<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><id>tag:tai-dev.blog.co.uk,2009-11-21:/</id><title>The Tai-Dev Blog, owned by Daniel Bryant</title><link rel="self" href="http://tai-dev.blog.co.uk/feed/atom/posts/"/><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/"/><subtitle>Musings on Java Enterprise Application Development utilsing open-source Frameworks. Topics for discussion include JEE, JSE, J2ME, Spring, Hibernate, DWR, Prototype, Script.aculo.us, jQuery, Google Maps, Google AJAX APIs and more!</subtitle><generator version="1.0">MokoFeed</generator><updated>2009-11-21T11:39:55+01:00</updated><entry><id>tag:tai-dev.blog.co.uk,2009-11-11:/2009/11/11/ginfowindow-to-customise-or-not-to-custom-that-is-the-question-7352805/</id><title>GInfoWindow - To customise or not to custom... That is the question...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/11/11/ginfowindow-to-customise-or-not-to-custom-that-is-the-question-7352805/"/><author><name>dbryant</name></author><published>2009-11-11T19:05:17+01:00</published><updated>2009-11-11T19:05:17+01:00</updated><content type="html">	&lt;p&gt; I've recently finished conducting research (and a few experiments) with customising the Google Maps (GM) popup "GInfoWindow" window and wanted to share the results. The GInfoWindow is the window which is typically displayed when you click on a GM pin, and one of the key questions that is often asked is how customizable is this window framework? My thoughts  :&lt;/p&gt;
	&lt;p&gt;The actual HTML structure and code framework of the default GM popup window appears fixed and is controlled internally within the GM API code&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt; As such, it will not be easy to alter colours or styles of the white bubble itself, particularly if you want to leverage the tab functionality provided (Blog comments seem to indicate that attempting to alter the CSS of the bubbles leads to strange results)&lt;/li&gt;
	&lt;li&gt; It appears capturing standard DOM events on tabs is not very easy, such as onclick or onmouseover, using this implementation. This means that it's not easy to change the colour or style when clicking or hovering over a tab&lt;/li&gt;
	&lt;li&gt;The basic size of the InfoWindow can be altered, as can the tab width (and allowable characters), but anecdotal blog information would indicate this isn't as flexible as it should be&lt;/li&gt;
	&lt;li&gt;The main content of the InfoWindow can contain any HTML with any style. However, the HTML will always be surrounded by the GM bubble and it's white border&lt;/li&gt;
	&lt;li&gt;This default tabbed InfoWindow handles a lot of the basic window functionality internally, and is easy (and hence time efficient) to code&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt; There are open source implementations of custom InfoWindows which the popup window to be styled in any manner required&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt; For cool examples have a look @ &lt;a href="http://gmaps-utility-library-dev.googlecode.com/svn/trunk/extinfowindow/examples/cssSkins.html"&gt;http://gmaps-utility-library-dev.googlecode.com/svn/trunk/extinfowindow/examples/cssSkins.html&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt; Using this approach you have complete control over the popup functionality, and can capture mouse events such as clicking and hovering&lt;/li&gt;
	&lt;li&gt; With a quick inspection it looks like there will be substantially more programmatic work required if you do use these custom InfoWindows, especially if you want tabs, as you have to code the tab framework yourself (re-inventing the wheel to some degree)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt; The decision to implement (or not) your own InfoWindows using open source frameworks also has other plus and minus points in relation to being coupled (tied-into) Google's API and code&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt; Implementing your own code means that you will be less coupled to Google changes (for example, Google rolls out new code quite often which isn't always fully backward compatible, and can cause existing pages to look strange)&lt;/li&gt;
	&lt;li&gt; On the flip side of this, being less tied into Google means that you could spend a long time implementing your own windows only to find that you end up throwing the work away when Google changes the GM API or releases it's own all-singing-and-dancing version of customisable InfoWindows next month...&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt; More info and an API reference can be @ &lt;a href="http://code.google.com/apis/maps/documentation/reference.html#GInfoWindow"&gt;http://code.google.com/apis/maps/documentation/reference.html#GInfoWindow&lt;/a&gt; &lt;/p&gt;
	&lt;p&gt; My personal recommendation would be to utilise the open-source frameworks and code some of the InfoWindow functionality yourself as this essentially unshackles the design. However, as this could require a lot more development time ultimately it's a decision that needs to be deliberated.&lt;/p&gt;
	&lt;p&gt;I hope this helps, and if it does then please let me know!&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt; Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk/"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/11/11/ginfowindow-to-customise-or-not-to-custom-that-is-the-question-7352805/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-11-11:/2009/11/11/are-you-seeing-the-java-lang-noclassdeffounderror-sun-security-pkcs11-sunpkcs11-error-when-signing-your-rim-blackberry-j2me-apps-7352729/</id><title>Are you seeing the java.lang.NoClassDefFoundError: sun/security/pkcs11/SunPKCS11 error when signing your RIM Blackberry J2ME apps?</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/11/11/are-you-seeing-the-java-lang-noclassdeffounderror-sun-security-pkcs11-sunpkcs11-error-when-signing-your-rim-blackberry-j2me-apps-7352729/"/><author><name>dbryant</name></author><published>2009-11-11T18:50:38+01:00</published><updated>2009-11-11T18:50:38+01:00</updated><content type="html">	The Problem
	&lt;p&gt;One of the key stages in compiling and deploying a J2ME application to a RIM Blackberry device is utilsing the JadTool to cryptographically sign your application JAR file and convert it to a Blackberry COD file&lt;/p&gt;
	&lt;p&gt;An error that has caught me out several times over the last year or so of BB development is this:&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;Jar to get signature is dist/blackberry/deploy/demo/unsigned/YW_INT.jar &lt;br&gt;java.lang.NoClassDefFoundError: sun/security/pkcs11/SunPKCS11 &lt;br&gt;Caused by: java.lang.ClassNotFoundException: sun.security.pkcs11.SunPKCS11 &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:303) &lt;br&gt; at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) &lt;br&gt; at java.lang.ClassLoader.loadClass(ClassLoader.java:248) &lt;br&gt; at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) &lt;br&gt;Could not find the main class: com.sun.midp.jadtool.JadTool. Program  will exit.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;The error typically occurs when I either move development machines or upgrade my JDK - this is because the JDK is itself the cause of the problem.&lt;/p&gt;
	The Solution
	&lt;p&gt;The problem is typically (in my cases) caused by attempting to sign a JAR when compiling with a 64 bit JDK. For some reason certain versions of the Sun JDKs don't include the required sun.security.pkcs11.SunPKCS11  package, and in particular none of the 64-bit versions I have used contain this package.&lt;/p&gt;
	&lt;p&gt;Accordingly the solution is rather simple: Just install a 32bit JDK along side (or instead) of your 64 bit JDK, and make sure you compile and sign the JAR/COD file with the 32 bit version.&lt;/p&gt;
	&lt;p&gt;I hope this helps, and if it does then please let me know!&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt; Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk/"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
	&lt;p&gt; &lt;/p&gt;
	&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/11/11/are-you-seeing-the-java-lang-noclassdeffounderror-sun-security-pkcs11-sunpkcs11-error-when-signing-your-rim-blackberry-j2me-apps-7352729/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-10-13:/2009/10/13/using-prototype-and-want-to-remove-all-css-classes-from-an-element-7162111/</id><title>Using Prototype and want to remove all CSS classes from an element?</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/10/13/using-prototype-and-want-to-remove-all-css-classes-from-an-element-7162111/"/><author><name>dbryant</name></author><published>2009-10-13T17:57:57+02:00</published><updated>2009-10-13T18:01:34+02:00</updated><content type="html">	&lt;p&gt;Although the JavaScript Framework Prototype has a lot of cool functions and features for adding and removing individual CSS classes to and from an element, it doesn't have any function to remove ALL classes.&lt;/p&gt;
	&lt;p&gt;Therefore I've created a simple little function that when passed an element as a parameter will remove all CSS classes from this element in a single call...&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;function removeAllCssClasses(el) {&lt;br&gt;
   var classArray = $(el).classNames().toArray();&lt;br&gt;
   for (var index = 0, len = classArray.size(); index &lt;len; ++index) {&lt;br&gt;
       $(el).removeClassName(classArray[index]);&lt;br&gt;
   }&lt;br&gt;
} &lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;Don't forgot that as this function uses some of the Prototype magic you will obviously need to import the prototype.js file into any page that you use this function on.&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;
Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/10/13/using-prototype-and-want-to-remove-all-css-classes-from-an-element-7162111/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-09-25:/2009/09/25/thinking-of-increasing-compilation-speeds-in-netbeans-with-a-shiny-new-sdd-my-advice-is-to-think-again-7039366/</id><title>Thinking of increasing compilation speeds in Netbeans with a shiny new SDD? My advice is to think again...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/09/25/thinking-of-increasing-compilation-speeds-in-netbeans-with-a-shiny-new-sdd-my-advice-is-to-think-again-7039366/"/><author><name>dbryant</name></author><published>2009-09-25T17:20:24+02:00</published><updated>2009-09-25T17:20:24+02:00</updated><content type="html">	&lt;p&gt;Due to requirements of a JEE project I am currently working on I am &lt;strong&gt;frequently having to perform a full clean and build compilation cycle&lt;/strong&gt; on the project code within Netbeans. Needless to say &lt;strong&gt;this can consume quite a bit of time, usually 2 minutes+&lt;/strong&gt;, and when I mention that I may compile 10-15 times an hour you can see the problem...&lt;/p&gt;
	&lt;p&gt;I'm fortunate to have a fairly hefty development PC (Intel Core 2 Quad @ 2.40GHz, 4 Gb Corsair RAM, 150Gb WD Velociraptor HD), and after a quick investigation I identified &lt;strong&gt;the slowest link in the compilation chain was the physical manipulation/transfer of data on the HD&lt;/strong&gt; (litterally thousands of files being created and destroyed per build)&lt;/p&gt;
	&lt;p&gt;I've been hearing good things about the current breed of Solid State Drives (SDD) and so I decided to purchasea Samsung SSD -  SAMSUNG PB22-J 128GB 2.5" SATA-II MLC SOLID STATE HARD DRIVE - thinking this would speed up compilation...&lt;/p&gt;
	The Results?
	&lt;p&gt;There is no denying that the general performance of the PC and Windows improved dramatically - Vista booted in half of the time, applications (including Netbeans) opened much faster, and so all was good?&lt;/p&gt;
	&lt;p&gt;Not exactly... Although my development environment became more responsive, and localhost servers started much faster, the &lt;strong&gt;actual compilation process became slower... yep that's right, cleaning and building became much slower!&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;A build (no clean) was sometimes faster than before, but sometimes up to 30 seconds longer when performing other tasks (which didn't used to affect compilation time). A full clean and build took up to 4 times longer than before - sometimes over 10 minutes!!&lt;/p&gt;
	&lt;p&gt;As you can imagine I wasn't best pleased, and after a bit more thorough research on the web I have learned that although SSD are much faster for reading large blocks of data and even locating small amounts of data rapidly, many drives are not suitable for reading/writing small files concurrently due limitations in the drive controller (source: &lt;a href="http://www.wysk.info/?p=56)"&gt;http://www.wysk.info/?p=56)&lt;/a&gt; Of course, reading and writing multiple small files is exactly what happens when compiling - d'oh!!&lt;/p&gt;
	&lt;p&gt;Hence I have reinstalled my Velociraptor....&lt;/p&gt;
	 Summary
	&lt;p&gt;In a nutshell if you want to improve your HD performance when compiling:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Utilise with a Velociraptor HD - if you are gonna stick with a mechanical drive, this is the best you can get (I was being greedy by thinking an SSD could be better &lt;img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"&gt; )&lt;/li&gt;
	&lt;li&gt;If you really want to go the SSD route, make sure you spend some extra cash on getting a drive with a good controller, such as the Intel X25-M&lt;/li&gt;
	&lt;li&gt;Maybe get extra system RAM and utilise a RAM-drive &lt;a href="http://coffeecokeandcode.blogspot.com/2008/08/netbeans-on-speed.html"&gt;http://coffeecokeandcode.blogspot.com/2008/08/netbeans-on-speed.html&lt;/a&gt; I'm off to try this now...&lt;/li&gt;
	&lt;/ul&gt;
	 Additional Resources
	&lt;ul&gt;
	&lt;li&gt;Has anybody tried to build NetBeans on an SSD drive? &lt;a href="http://forums.netbeans.org/topic4011.html"&gt;http://forums.netbeans.org/topic4011.html&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;NetBeans on speed &lt;a href="http://coffeecokeandcode.blogspot.com/2008/08/netbeans-on-speed.html"&gt;http://coffeecokeandcode.blogspot.com/2008/08/netbeans-on-speed.html&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;Can SSDs Be Used For Software Development?  &lt;a href="http://ask.slashdot.org/article.pl?sid=09/03/06/191219"&gt;http://ask.slashdot.org/article.pl?sid=09/03/06/191219&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;Why cheap SSD sucks for Visual Studio &lt;a href="http://www.wysk.info/?p=56"&gt;http://www.wysk.info/?p=56&lt;/a&gt; &lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;I hope this helps, and if it does please let me know!!&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt; Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk/"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/09/25/thinking-of-increasing-compilation-speeds-in-netbeans-with-a-shiny-new-sdd-my-advice-is-to-think-again-7039366/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-09-16:/2009/09/16/problems-starting-glassfish-when-upgrading-changing-your-jdk-pointing-the-fish-to-the-new-pond-6975937/</id><title>Problems starting GlassFish when upgrading/changing your JDK? Pointing the fish to the new pond...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/09/16/problems-starting-glassfish-when-upgrading-changing-your-jdk-pointing-the-fish-to-the-new-pond-6975937/"/><author><name>dbryant</name></author><published>2009-09-16T13:02:51+02:00</published><updated>2009-09-16T13:02:51+02:00</updated><content type="html">	The Problem
	&lt;p&gt;If you upgrade or otherwise modify your JDK/JVM/JRE installation (such as upgarding to a new version or changing your directory structure) when you have a GlassFish installation running you may find that GlassFish will no longer start after you reboot the server, even if you update your JAVA_HOME environment variable accordingly...&lt;/p&gt;
	The Solution
	&lt;p&gt;You will need to update the envionrment variables stored in the asenv.bat file associated with GlassFish. This file is typically located at&lt;/p&gt;
	&lt;p&gt;&lt;glassfish-install-dir&gt;/config/asenv.bat&lt;/p&gt;
	&lt;p&gt;Locate the line starting with &lt;/p&gt;
	&lt;p&gt;&lt;span&gt;set AS_JAVA=&lt;old-jvm-dir&gt;/..&lt;/span&gt;&lt;/p&gt;
	&lt;p&gt;and enter the dir of your new JVM/JDK/JRE installation, not forgetting to include the "/.." at the end of the path. For example my value is&lt;/p&gt;
	&lt;p&gt;&lt;span&gt;set AS_JAVA=D:\Java\jdk1.6.0_16\jre/..&lt;/span&gt;&lt;/p&gt;
	&lt;p&gt;I hope this helps, and if it does please let me know!!&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk/"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
	&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/09/16/problems-starting-glassfish-when-upgrading-changing-your-jdk-pointing-the-fish-to-the-new-pond-6975937/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-09-11:/2009/09/11/tai-dev-helps-triopsis-as-they-become-one-of-the-guardian-s-top-100-tech-media-companies-6941708/</id><title>Tai-Dev helps Triopsis as they become one of the Guardian's "Top 100 tech-media companies"</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/09/11/tai-dev-helps-triopsis-as-they-become-one-of-the-guardian-s-top-100-tech-media-companies-6941708/"/><author><name>dbryant</name></author><published>2009-09-11T11:50:49+02:00</published><updated>2009-09-11T11:50:49+02:00</updated><content type="html">	&lt;p&gt;Recently the UK's Guardian newspaper announced it's "&lt;a href="http://www.guardian.co.uk/tech-media-invest-100/top-100 "&gt;Top 100 tech-media companies&lt;/a&gt;" for the current year and one of &lt;a href="http://www.tai-dev.co.uk/"&gt;Tai-Dev's&lt;/a&gt; current clients, &lt;a href="http://www.triopsis.com"&gt;Triopsis Ltd&lt;/a&gt;, was included in this influential list. Triopsis uses a SaaS business model to offer a suite of mobile device and web-based applications that enable companies to capture and manage visual business information in a highly effective fashion. The 100 companies were picked for their &lt;a href="http://www.guardian.co.uk/tech-media-invest-100/innovation-nation"&gt;innovation and creativity&lt;/a&gt; over the past year in areas as diverse as mobile applications, racing games and music recognition.&lt;/p&gt;
	&lt;p&gt;Tai-Dev has been instrumental in designing, architecting and implementing TriOpsis' flagship initial product, the &lt;a href="http://www.triopsis.com/products/rdm-overview"&gt;Retail Display Manager (RDM).&lt;/a&gt; The RDM consists of a mobile phone-based J2ME application, which is utilised to capture images, such as point-of-sale merchandise displays or evidence of health and safety incidents, in addition to geographical (GIS) data and other associated metadata. This data is then transferred via HTTPS to a JEE application which provides a rich and highly dynamic Web 2.0 style front-end. This interface enables the user to view and manipulate data (making extensive use of the Google Maps API), perform statistical analysis and extract business reports.&lt;/p&gt;
	&lt;p&gt;The RDM is currently being utilised successfully in production by companies such as Sequel UK, the UK distributor of &lt;a href="http://www.guess.com/"&gt;Guess Watches&lt;/a&gt; and GC Jewellery. Further information on the RDM product can be found at Triopsis' website &lt;a href="http://www.triopsis.com"&gt;www.triopsis.com&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Tai-Dev is currently working with Triopsis on designing and implementing further additions to their product suite, such as the &lt;a href="http://www.triopsis.com/products/am-overview"&gt;Asset Manager&lt;/a&gt; (for managing a diverse range of business assets) and &lt;a href="http://www.triopsis.com/products/sn-overview"&gt;Saftey Net&lt;/a&gt; (a Health and Safety reporting application), which promise to push forward the state-of-the-art in both the collection of visual business information via mobile devices and also the real time display and manipulation of the resulting GIS-based data.&lt;/p&gt;
	More Information
	&lt;p&gt;&lt;a class="moz-txt-link-freetext" href="http://www.guardian.co.uk/tech-media-invest-100/top-100"&gt;&lt;a href="http://www.guardian.co.uk/tech-media-invest-100/top-100"&gt;http://www.guardian.co.uk/tech-media-invest-100/top-100&lt;/a&gt;&lt;/a&gt; &lt;br&gt;&lt;a class="moz-txt-link-freetext" href="http://www.guardian.co.uk/tech-media-invest-100/innovation-nation"&gt;&lt;a href="http://www.guardian.co.uk/tech-media-invest-100/innovation-nation"&gt;http://www.guardian.co.uk/tech-media-invest-100/innovation-nation&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.triopsis.com"&gt;http://www.triopsis.com&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.tai-dev.co.uk"&gt;http://www.tai-dev.co.uk&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk/"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/09/11/tai-dev-helps-triopsis-as-they-become-one-of-the-guardian-s-top-100-tech-media-companies-6941708/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-08-26:/2009/08/26/help-for-anyone-unable-to-install-a-signed-j2me-midlet-ota-on-a-mobile-device-maybe-a-samsung-omnia-with-wm6-6824972/</id><title>Help for anyone unable to install a signed J2ME MIDlet OTA on a Mobile Device (maybe a Samsung Omnia with WM6.1?)...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/08/26/help-for-anyone-unable-to-install-a-signed-j2me-midlet-ota-on-a-mobile-device-maybe-a-samsung-omnia-with-wm6-6824972/"/><author><name>dbryant</name></author><published>2009-08-26T11:20:31+02:00</published><updated>2009-08-26T11:20:31+02:00</updated><content type="html">	
	
	&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;Recently an end user with a Samsung Omnia (i900) device could not install a signed MIDlet that would install fine on a handful of other devices. The device would download the JAD from our server successfully (after following a link provided via SMS), and prompt the user to accept that the MIDlet was from a third-party provider and was signed accordingly. However, as soon as this was confirmed the device would display "Internet status: CONNECTING_TO_SERVER" and appear to hang for 30-60 seconds after which an error was displayed “cannot connect to server”. The annoying thing was that the JAD/JAR would install fine via a manual copy of the JAD/JAR from PC to mobile device via USB, and several other mobile devices could install the JAD/JAR OTA fine...&lt;/p&gt;
	&lt;p&gt;I couldn’t find anything useful via a Google search or several posts to appropriate forums, including Samsung’s own Java Forum and the WM6.1 forum, resulted in some interesting discussions (many thanks to Ravztech in the Samsung forum!), but ultimately no solution...&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;The Solution:&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;After much head-scratching and many experiments we eventually figured out that the problem was caused by the configuration of the device (which according to anecdotal blog evidence is apparently quite common with Samsung phones...), and the device JVM itself was not configured to connect to the Internet. A simple visit to the JVM options rectified the problem:&lt;/p&gt;
	&lt;p&gt;Start &gt; Programs &gt; Java &gt; Menu &gt; Java Settings &gt; Changed "Select Network" to "The WAP Network" &gt; Ok&lt;/p&gt;
	&lt;p&gt;Bam! Job done...&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;Some other thoughts / diagnostic paths...&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;For anyone else suffering from a similar problem (but isn’t helped by the advice above) I thought a brief outline of my trouble-shooting/diagnostic path might be useful. Of course, I have to say this isn’t all my own work – over the time I have been a J2ME developer I have gleaned a lot of these ideas from various forums and guides, and so a big thanks to all the bloggers/posters who have helped me in the past!&lt;/p&gt;
	&lt;ol&gt;
	&lt;li&gt;Problem: You can’t install a signed MIDlet OTA on a specific device? Read on...&lt;/li&gt;
	&lt;li&gt;Attempt to manually install the JAD/JAR on the device by copying the files via USB or Bluetooth etc.
	&lt;ul&gt;
	&lt;li&gt;If the application does not install then most likely you will be given more information from the device error messages, such as &lt;/li&gt;
	&lt;li&gt;invalid certificate (check the date and time on the device is correct, check the certificate) or a &lt;/li&gt;
	&lt;li&gt;corrupt JAD/JAR (rebuild)&lt;/li&gt;
	&lt;li&gt;a random message about third-party apps (check the device is not install-locked – early Samsung phones only allowed a specific class of signed apps to be installed. I won’t go into detail here, and a Google search on the issue will turn up more info)&lt;/li&gt;
	&lt;li&gt; If the app installs fine manually then this points to an OTA install issue – read on...&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Check that your application server which is hosting the JAD/JAR files has the MIME type correctly set for both of these file types. Check out the info under the heading “Remote Deployment” in this link &lt;a href="http://developers.sun.com/mobility/midp/articles/deploy/"&gt;&lt;a href="http://developers.sun.com/mobility/midp/articles/deploy/"&gt;http://developers.sun.com/mobility/midp/articles/deploy/&lt;/a&gt;&lt;/a&gt; and if you’re using GlassFish my earlier post in regards to setting the MIME type for Blackberry OTA installs may help &lt;a href="http://tai-dev.blog.co.uk/2009/07/09/glassfish-j2me-blackberry-install-grrr-907-invalid-cod-http-error-6478856/"&gt;&lt;a href="http://tai-dev.blog.co.uk/2009/07/09/glassfish-j2me-blackberry-install-grrr-907-invalid-cod-http-error-6478856/"&gt;http://tai-dev.blog.co.uk/2009/07/09/glassfish-j2me-blackberry-install-grrr-907-invalid-cod-http-error-6478856/&lt;/a&gt;&lt;/a&gt;
	&lt;ul&gt;
	&lt;li&gt; If the MIME types are correctly set then read on...&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Alter the “MIDlet-Jar-URL:” property in the JAD to be an absolute reference to the application JAR file (and not simply a relative reference)
	&lt;ul&gt;
	&lt;li&gt;Some mobile devices require that an absolute reference is required...&lt;/li&gt;
	&lt;li&gt;If this doesn’t help, then read on...&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Try serving the JAD/JAR via HTTP and HTTPS
	&lt;ul&gt;
	&lt;li&gt;Some mobile devices allegedly have issues with installing JARs via HTTPS (or HTTP)&lt;/li&gt;
	&lt;li&gt;No help? Read on...&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Try serving and installing the JAD/JAR from another server
	&lt;ul&gt;
	&lt;li&gt;This works? Sometimes a server is just poorly configured (buggered in technical terms) and so you need to figure out what is different between the server that allows installs and the server that doesn’t&lt;/li&gt;
	&lt;li&gt;No joy? Read on...&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Try installing a version of the application which isn’t signed?
	&lt;ul&gt;
	&lt;li&gt;If this works, it could indicate that the device itself has problems with installing signed apps – probably best to post to the device manufacturer forums and hope someone has an answer...&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Try installing another person’s J2ME app.
	&lt;ul&gt;
	&lt;li&gt;I use the J2ME Map Viewer application, available at &lt;a href="http://j2memap.landspurg.net/"&gt;&lt;a href="http://j2memap.landspurg.net/"&gt;http://j2memap.landspurg.net/&lt;/a&gt;&lt;/a&gt; and the JAD I use is located at &lt;a href="http://j2memap.landspurg.net/java/beta/MINIMUM_CLDC11/J2meMap_Beta.jad"&gt;&lt;a href="http://j2memap.landspurg.net/java/beta/MINIMUM_CLDC11/J2meMap_Beta.jad"&gt;http://j2memap.landspurg.net/java/beta/MINIMUM_CLDC11/J2meMap_Beta.jad&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;If this doesn’t work then it probably points to a device-specific issue (this is when the light-bulb went on in our experiments). Check that the device JVM can talk to the outside world (Internet) and isn’t locked-down i.e. can only install manufacturer apps.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;/ol&gt;
	&lt;p&gt;I hope this helps, and if it does please let me know!!&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk/"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
	
	
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/08/26/help-for-anyone-unable-to-install-a-signed-j2me-midlet-ota-on-a-mobile-device-maybe-a-samsung-omnia-with-wm6-6824972/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-08-14:/2009/08/14/is-anyone-else-confused-by-microsoft-s-behaviour-in-the-mobile-market-now-ms-is-giving-their-mobile-apps-exclusively-to-nokia-6723140/</id><title>Is anyone else confused by Microsoft's behaviour in the mobile market? Now MS is giving their mobile apps exclusively to Nokia...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/08/14/is-anyone-else-confused-by-microsoft-s-behaviour-in-the-mobile-market-now-ms-is-giving-their-mobile-apps-exclusively-to-nokia-6723140/"/><author><name>dbryant</name></author><published>2009-08-14T14:56:27+02:00</published><updated>2009-08-14T14:56:27+02:00</updated><content type="html">	&lt;p&gt;I have just read on the &lt;a href="http://news.bbc.co.uk/1/hi/business/8198178.stm "&gt;BBC Technology RSS that Nokia has formed an alliance with Microsoft&lt;/a&gt; and is &lt;strong&gt;planning to ship Nokia mobile devices with mobile-flavoured MS apps &lt;/strong&gt;such as Word in a bid to compete with RIM Blackberry...&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;Does this strike anybody as a strange move for Microsoft?&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;MS are already having problems increasing the popularity of Windows Mobile (WM) phones, and the introduction of the iPhone and Andriod platforms has not exactly helped their case... I have also &lt;a href="http://www.appleinsider.com/articles/09/02/18/microsoft_htc_has_made_80_of_all_windows_mobile_phones.html"&gt;read recently that the vast majority (80%) of WM6.1 phones are manufactured by HTC&lt;/a&gt; and there are rumours suggesting that &lt;a href="http://mobilephonedevelopment.com/archives/871"&gt;HTC may increasingly move away from WM in favour of BREW (BMP) and Android...&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;Nokia owned Symbian is currently  the worlds leading mobile platform, and surely hanging them the exclusive keys to the MS mobile apps only serves to strengthen the position of a direct competitor Nokia/Symbian in the mobile market? &lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;Could it be that the MS execs are so keen to &lt;strong&gt;prevent the likes of RIM/Google from maintaining/gaining share in the enterprise mobile platform market&lt;/strong&gt; that they will happily take actions that hasten the demise of their own mobile platform... &lt;a href="http://www.computerworld.com.au/article/314739/nokia_alliance_may_spell_doom_windows_mobile"&gt;Some analysists are already ringing the death-bells for Windows Mobile...&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ &lt;br&gt;Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk/"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
	&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/08/14/is-anyone-else-confused-by-microsoft-s-behaviour-in-the-mobile-market-now-ms-is-giving-their-mobile-apps-exclusively-to-nokia-6723140/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-08-12:/2009/08/12/is-your-j2me-mobile-app-hanging-when-deployed-to-a-physical-blackberry-device-for-example-the-6711261/</id><title>Is your J2ME mobile app hanging when deployed to a physical Blackberry Device? (for example the 8900...)</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/08/12/is-your-j2me-mobile-app-hanging-when-deployed-to-a-physical-blackberry-device-for-example-the-6711261/"/><author><name>dbryant</name></author><published>2009-08-12T18:06:16+02:00</published><updated>2009-08-12T19:02:45+02:00</updated><content type="html">	The Problem
	&lt;p&gt;Recently I came across a strange problem when deploying a Java J2ME application to a new Blackberry Phone (the 8900 "Javelin" Curve). The app simply captures data from the user, performs a little bit of processing and sends the resulting data to a server over http/https. The app installed and ran absolutely fine on several older BB devices (such as the 8320 Curve) and also the new 8900 simulator. &lt;strong&gt;However, when I installed the app on an actual physical 8900 device for final testing the app would hang at arbitary points when sending or receiving data over http. &lt;/strong&gt;Tracking down the cause of the problem took a long time. The first step was looking at the Blackberry event log (by holding the alt-key and entering LGLG via the keypad), and it showed that a communication Exception was being thrown around the time of the hang.&lt;/p&gt;
	&lt;p&gt;The problem is that no Exception was being caught be our code (as we had try-catch blocks at appropriate places). Running the app through the Blackberry JDE with the phone debug-attached (via USB ) again confirmed that no Exception was being seen within the application, but we did learn that the frequency of Garbage Collection was increasing exponentially as the number of http communications were established and closed. At this point I assumed that either the http connections to the server were not getting closed properly, or there was a strange memory leak in the app somewhere, but why were we not seeing this problem in other BBL devices?&lt;/p&gt;
	My Solution
	&lt;p&gt;After posting in the Blackberry J2ME developer forum (see link below) and playing around with the app's debug output we eventually tracked the main cause of the problem down to http connections not being closed, but for a strange reason... A lot of code within the http communication class was written as follows:&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;try {&lt;/p&gt;
	&lt;p&gt;HttpConnection hc = null; &lt;br&gt; &lt;br&gt;
try { &lt;br&gt;
hc = (HttpConnection) conn.open("&lt;&lt;url&gt;&gt;");&lt;br&gt;
 } catch (IOException iox) {&lt;br&gt;
&lt;br&gt;
//do stuff, but although execution to continue in this method&lt;br&gt;
 }&lt;/p&gt;
	&lt;p&gt;hc.close();&lt;/p&gt;
	&lt;p&gt;}catch (Exception e) { //do stuff }&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;Changing it to close the connection in a finally statement solved the issue:&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;try {&lt;/p&gt;
	&lt;p&gt;HttpConnection hc = null; &lt;br&gt;
try { &lt;br&gt;
hc = (HttpConnection) conn.open("&lt;&lt;url&gt;&gt;"); &lt;br&gt;
} catch (IOException iox) { &lt;br&gt;
//do stuff, but although execution to continue in this method&lt;br&gt;
&lt;br&gt;
} finally {&lt;br&gt;
&lt;br&gt;hc.close();&lt;/p&gt;
	&lt;p&gt;}catch (Exception e) { //do stuff }&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;I'm not exactly sure why, although not including the call to the close() method in a finally block (as demonstrated by the first code fragment) could be considered bad form, the connection should have been closed after any IOException was caught? Regardless changing all of the connections to close in the finally method eliminated the problem we were seeing...&lt;/p&gt;
	If this didn't help, here any some other causes
	&lt;p&gt;Upon reading various forums I also learned that a J2ME app hanging on a BB can also be symptomatic of the following causes (which may be worth further research if my solution didn't help)&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;UI Dialog boxes being hidden (behind the current app) which require user input&lt;/li&gt;
	&lt;li&gt;Garbage collection due to memory leaks etc. (full GC can take up to 30 seconds to complete)&lt;/li&gt;
	&lt;li&gt;Deadlock between competing threads &lt;/li&gt;
	&lt;li&gt;Incorrect threading in general i.e. attempting to open socket connections using the main thread (a new thread should be spawned)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt; &lt;/p&gt;
	Useful links
	&lt;p&gt;My BB Forum Post (thanks to John for replying) : &lt;a href="http://supportforums.blackberry.com/rim/board/message?board.id=java_dev&amp;message.id=51749#M51749"&gt;http://supportforums.blackberry.com/rim/board/message?board.id=java_dev&amp;message.id=51749#M51749&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ &lt;br&gt;Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/08/12/is-your-j2me-mobile-app-hanging-when-deployed-to-a-physical-blackberry-device-for-example-the-6711261/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-07-30:/2009/07/30/building-and-deploying-j2me-business-apps-in-q3-q4-2009-a-list-of-physical-devices-on-which-to-test-to-ensure-maximum-compatibility-6616396/</id><title>Building and deploying J2ME business apps in Q3/Q4 2009? A list of physical devices on which to test to ensure maximum compatibility...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/07/30/building-and-deploying-j2me-business-apps-in-q3-q4-2009-a-list-of-physical-devices-on-which-to-test-to-ensure-maximum-compatibility-6616396/"/><author><name>dbryant</name></author><published>2009-07-30T09:57:20+02:00</published><updated>2009-07-30T10:03:29+02:00</updated><content type="html">	&lt;p&gt;I'm sure you've all heard that the original Java slogan of &lt;strong&gt;"write once, run everywhere" was converted to "write once, test everywhere"&lt;/strong&gt;, and this has &lt;strong&gt;never been more true when deploying J2ME apps to mobile platforms&lt;/strong&gt;. It is not always possible to restrict the devices/platforms that your end-users will be using , and therefore my experience has lead me to conclude that in order to ensure maximum compatibility between your app and the various devices on the market you have to test the app on a variety of physical devices. &lt;strong&gt;This leads to the important question, which devices do you choose?&lt;/strong&gt;&lt;/p&gt;
	Platforms
	&lt;p&gt;There are 6 main mobile device operating systems/platforms in the consumer market today:&lt;/p&gt;
	&lt;ol&gt;
	&lt;li&gt; Symbian Series 40 (S40)&lt;/li&gt;
	&lt;li&gt; Symbian Series 60 (S60)&lt;/li&gt;
	&lt;li&gt; Windows Mobile 6.X (WM6.X)&lt;/li&gt;
	&lt;li&gt; Google Android (Android)&lt;/li&gt;
	&lt;li&gt; Apple iPhone (iPhone)&lt;/li&gt;
	&lt;li&gt; Research in Motion Blackberry (BlkB )&lt;/li&gt;
	&lt;/ol&gt;
	&lt;p&gt; There are also additional small-scale players, but for the sake of the argument I will focus on these. On a related note, there is an excellent list of available development platforms/frameworks and an overview of their capabilities at Wikipedia &lt;a href="http://en.wikipedia.org/wiki/Mobile_development"&gt;http://en.wikipedia.org/wiki/Mobile_development&lt;/a&gt; &lt;/p&gt;
	J2ME Support
	&lt;p&gt; It is well known that the Apple iPhone OS does not support the installation (at least natively) of J2ME apps. You can &lt;a href="http://blog.taragana.com/index.php/archive/how-to-install-compile-run-java-on-iphone/"&gt;hack an iPhone to allow the installation of J2ME apps&lt;/a&gt;, and on a more official note there is promise of a &lt;a href="http://www.phonenews.com/sun-to-bring-j2me-java-to-apple-iphone-2870/ "&gt;JVM being available via the app store&lt;/a&gt;. At the current time this effectively wipes out the iPhone from the rest of our discussion.&lt;/p&gt;
	&lt;p&gt; The rest of the platforms listed above natively support J2ME, and although different OS/platforms all support different &lt;a href="http://en.wikipedia.org/wiki/Java_Community_Process "&gt;JSRs&lt;/a&gt; &lt;strong&gt;the core functionality offered by the J2ME APIs should be consistent... right? And of course, all of the implementations of each specific OS flavour behave exactly the same... don't they?&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt; Well no, often this is not the case. My experience indicates that you have to install and test an app on a subset of devices available in the market to ensure the greatest level of compatibility. Having said that, if you need a guarantee that an app will function as expected on a specific device you must install and test the app on the actual device! A few examples of the problems I have seen should drive home the point&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt; An http communication module within an app deployed in production for 6 months to a BB 8320 does not work (and simply hangs) on the new BB 8900&lt;/li&gt;
	&lt;li&gt; Many S40 phones do not arrange native J2ME screen components in a consistent manner (leading a colleague to create his own custom screen widgets which provided more control)&lt;/li&gt;
	&lt;li&gt; Accessing the multimedia/camera functionality on various implementations of the S60 platform is not consistent&lt;/li&gt;
	&lt;li&gt; RMS Storage behaviour is not consistent across devices (such as the maximum storage space available, and the method for determining if this space has been exceeded)&lt;/li&gt;
	&lt;/ul&gt;
	The List of Phones
	&lt;p class="MsoNoSpacing"&gt;The main outcome of this article is that I have&lt;strong&gt; created a list of mobile devices that I would recommend you test your J2ME apps on if you are looking to deploy them into the business world over the next 6 months,&lt;/strong&gt; and you can’t restrict which devices will be used by your end-users. I've compiled the list by looking at the major manufacturer websites, the current personal/business phones being offered by the major network providers and a few choice blogs.&lt;/p&gt;
	&lt;p class="MsoNoSpacing"&gt;The list is in an approximate order of my thoughts on predicted prevalence/desirability in the business community. I have also indicated the OS/platform of each device, and unless otherwise stated all devices have a built-in camera and GPS&lt;/p&gt;
	&lt;ol&gt;
	&lt;li&gt;RIM Blackberry Curve 8900 (BlkB ) &lt;a href="http://uk.blackberry.com/devices/blackberrycurve8900/"&gt;http://uk.blackberry.com/devices/blackberrycurve8900/&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;Nokia N97 (S60) &lt;a href="http://europe.nokia.com/find-products/devices/nokia-n97#/main/landing"&gt;http://europe.nokia.com/find-products/devices/nokia-n97#/main/landing&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;Nokia 5800 (S60) &lt;a href="http://www.nokia.co.uk/find-products/all-phones/nokia-5800/specifications"&gt;http://www.nokia.co.uk/find-products/all-phones/nokia-5800/specifications&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;HTC Touch Diamond2 /Pro2 (WM6.1) &lt;a href="http://www.htc.com/uk/product/touchdiamond2/specification.html"&gt;http://www.htc.com/uk/product/touchdiamond2/specification.html&lt;/a&gt; &lt;a href="http://www.htc.com/www/product/touchpro2/overview.html"&gt;&lt;a href="http://www.htc.com/www/product/touchpro2/overview.html"&gt;http://www.htc.com/www/product/touchpro2/overview.html&lt;/a&gt;&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;Nokia 6300 (S40) [NO GPS] &lt;a href="http://europe.nokia.com/find-products/devices/nokia-6300"&gt;http://europe.nokia.com/find-products/devices/nokia-6300&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;HTC Hero / Magic (Android) &lt;a href="http://www.htc.com/uk/product/hero/specification.html"&gt;http://www.htc.com/uk/product/hero/specification.html&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;Samsung Jet S8000 (S60) &lt;a href="http://jet.samsungmobile.com/"&gt;http://jet.samsungmobile.com/&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;Sony Ericsson C510 (S60) [NO GPS] &lt;a href="http://www.sonyericsson.com/cws/products/mobilephones/overview/c510"&gt;http://www.sonyericsson.com/cws/products/mobilephones/overview/c510&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;Nokia E75 (S60) &lt;a href="http://europe.nokia.com/find-products/devices/nokia-e75/specifications"&gt;&lt;a href="http://europe.nokia.com/find-products/devices/nokia-e75/specifications"&gt;http://europe.nokia.com/find-products/devices/nokia-e75/specifications&lt;/a&gt;&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;RIM Blackberry Curve 8300 &lt;a href="http://uk.blackberry.com/devices/blackberrycurve8300/"&gt;http://uk.blackberry.com/devices/blackberrycurve8300/&lt;/a&gt; &lt;/li&gt;
	&lt;/ol&gt;
	&lt;p class="MsoNoSpacing"&gt;If anyone has any comments or different thoughts, I would always appreciate hearing them...&lt;/p&gt;
	&lt;p class="MsoNoSpacing"&gt;Daniel&lt;/p&gt;
	&lt;p class="MsoNoSpacing"&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/07/30/building-and-deploying-j2me-business-apps-in-q3-q4-2009-a-list-of-physical-devices-on-which-to-test-to-ensure-maximum-compatibility-6616396/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-07-17:/2009/07/17/a-quick-test-of-the-html5-geolocation-api-with-firefox-3-5-spookily-accurate-on-my-work-pc-6533920/</id><title>A quick test of the HTML5 geolocation API with Firefox 3.5 - spookily accurate on my work PC...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/07/17/a-quick-test-of-the-html5-geolocation-api-with-firefox-3-5-spookily-accurate-on-my-work-pc-6533920/"/><author><name>dbryant</name></author><published>2009-07-17T14:12:02+02:00</published><updated>2009-07-17T14:12:02+02:00</updated><content type="html">	&lt;p&gt;I've just been having a quick play with the new HTML5 geolocation API - you can see the results and also determine your location on a Google Map at &lt;a href="http://www.tai-dev.co.uk/experiments/geolocation/"&gt;http://www.tai-dev.co.uk/experiments/geolocation/&lt;/a&gt; (although you will need a browser that supports the new HTML5 geolocation API, such as &lt;a href="http://www.mozilla.com/en-US/firefox/all.html"&gt;FF3.5&lt;/a&gt;)&lt;/p&gt;
	&lt;p&gt; I don't know about your location, but mine was pinpointed with an &lt;strong&gt;almost spooky level of accuracy&lt;/strong&gt; (considering my work PC does not have GPS built in... &lt;img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"&gt; )&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;Determining your current location is ridulously easy&lt;/strong&gt;, and you simply use the &lt;strong&gt;navigator.geolocation&lt;/strong&gt; methods&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;navigator.geolocation.getCurrentPosition(showMap); //where showMap is the function called if the location is successfully determined.&lt;/p&gt;
	&lt;/blockquote&gt;
	
	&lt;p&gt;There are several other methods of interest that are defined in the W3C geolocation spec - I'll let you have a look &lt;a href="http://www.w3.org/TR/geolocation-API/#geolocation_interface"&gt;here&lt;/a&gt; - and you can do cool things such as &lt;strong&gt;constantly monitor the current location (great if you're on the move)&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;You'll also need to consult the spec to see what data is passed into the callback function after the location has been determined, but I have included the barebones code below to allow you to plot your current location on a Google map (have a look at this code in action on my &lt;a href="http://www.tai-dev.co.uk/experiments/geolocation/"&gt;experiment page&lt;/a&gt;)&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;&lt;script src="http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;sensor=true&amp;amp;key=_your_key_" type="text/javascript"&gt;&lt;/script&gt;&lt;br&gt; &lt;script type="text/javascript"&gt;&lt;br&gt; var map;&lt;/p&gt;
	&lt;p&gt; function initialize(){&lt;br&gt; if (GBrowserIsCompatible()) {&lt;br&gt; map = new GMap2(document.getElementById("map_canvas"));&lt;br&gt; map.setCenter(new GLatLng(53.500, -4.00), 4);&lt;br&gt; map.setUIToDefault();&lt;br&gt; }&lt;br&gt; }&lt;/p&gt;
	&lt;p&gt; function findLoc(){&lt;br&gt; if (!navigator.geolocation) {&lt;br&gt; alert('Sorry, your browser does not support Geo Services');&lt;br&gt; }&lt;br&gt; else {&lt;br&gt; // Get the current location    &lt;br&gt; navigator.geolocation.getCurrentPosition(showMap);&lt;br&gt; return false;&lt;br&gt; }&lt;br&gt; }&lt;/p&gt;
	&lt;p&gt; function showMap(position){&lt;br&gt; var lat = position.coords.latitude;&lt;br&gt; var lon = position.coords.longitude;&lt;/p&gt;
	&lt;p&gt; alert('You appear to be located at (' + lat + ', ' + lon + ') (lat,lng)');&lt;/p&gt;
	&lt;p&gt; var myPoint = new GLatLng(lat, lon);&lt;br&gt; map.setCenter(myPoint, 15);&lt;/p&gt;
	&lt;p&gt; var yourCurrPoint = new GMarker(myPoint);&lt;br&gt; map.addOverlay(yourCurrPoint);&lt;br&gt; return false;&lt;/p&gt;
	&lt;p&gt; }&lt;br&gt; &lt;/script&gt;&lt;br&gt; &lt;/head&gt;&lt;br&gt; &lt;body onload="initialize()" onunload="GUnload()"&gt;&lt;br&gt; ...&lt;br&gt; &lt;form&gt;&lt;br&gt; &lt;input type="button" value="Find Me!" onclick="findLoc()" /&gt;            &lt;br&gt; &lt;/form&gt;&lt;br&gt; &lt;div id="map_canvas" style="width: 500px; height: 300px"&gt;&lt;br&gt; &lt;/div&gt;&lt;br&gt;&lt;/body&gt;&lt;br&gt;&lt;/html&gt;&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt; &lt;/p&gt;
	How does it work?
	&lt;p&gt;The &lt;a href="http://www.w3.org/TR/geolocation-API/"&gt;W3C provide the interface/specification for the service&lt;/a&gt;, and it's up to individual browser vendor to implement the specs. Apparently the browser determines the current location through information such as nearby WiFi signals, but the exact method is still a bit of a mystery. You can read more about this in a recent  &lt;a href="http://google-latlong.blogspot.com/2009/07/blue-circle-comes-to-your-desktop.html"&gt;Google Blog Post announcing Google's support for the service &lt;/a&gt;(including of course, Chrome and Gears support)&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk/"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/07/17/a-quick-test-of-the-html5-geolocation-api-with-firefox-3-5-spookily-accurate-on-my-work-pc-6533920/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-07-09:/2009/07/09/geotagging-with-the-blackberry-8900-mixed-results-6479380/</id><title>Geotagging Images with the Blackberry 8900... Ready for business use? Not quite...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/07/09/geotagging-with-the-blackberry-8900-mixed-results-6479380/"/><author><name>dbryant</name></author><published>2009-07-09T16:20:00+02:00</published><updated>2009-07-10T12:10:49+02:00</updated><content type="html">	&lt;p&gt;I believe adding location metadata or "geotagging" images via mobile devices is a currently underused feature - in particularly, the use of geotagging has yet to really gain a foothold within the business world. Many businesses rely on capturing visual data, whether it be a view of a shop window or snapshot of a health and safety issue. Surely adding additional metadata to these images, such as current location, would be highly beneficial? &lt;/p&gt;
	&lt;p&gt;Geotagging is now readily available to many end-users via functionality offered on modern mobile phones, such as the new Blackberry Curve 8900. Accordingly, I wanted to explore how easy it would be for a typical business end-user to add location data to captured images using the native geotagging functionality within the Blackberry Curve camera app.&lt;/p&gt;
	Why Geotagging?
	&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Geotagging"&gt;Geotagging&lt;/a&gt; allows mobile devices with a GPS receiver (like the 8900) to "tag" captured images with the location at which the image was taken, for example lat/lng coordinates and elevation. The lat/lng coordinates (along with other location data) is stored in the&lt;a href="http://en.wikipedia.org/wiki/Exchangeable_image_file_format"&gt; image EXIF metadata&lt;/a&gt;, and can be read by compatible applications, such as Flickr, allowing you to associate the images captured with a map location.&lt;/p&gt;
	How?
	&lt;p&gt;On the 8900 enabling geotagging is very easy - when in camera mode simply press the menu key -&gt; options -&gt;Geotagging and make sure "enabled" is selected. You will notice that in the bottom right of the image preview screen a crosshair and "x" is now displayed in red. The red colour means that the device is attempting to get the current location data via GPS. As soon as the crossshairs turn white you're good to go, and any images captured while the crosshairs are white will be geotagged with the current location.&lt;/p&gt;
	&lt;p&gt;Now this sounds great, but in real use I have found that getting a GPS lock can be problematic... With my 8900 if I am in a building there is no chance of getting a lock (no surprises here), but even if I am standing in the middle of an open space it can take several minutes. On several occaisons the &lt;strong&gt;only way I could get a lock was to quit the camera viewer, start the Blackberry Maps app, acquire my location via GPS and then start the camera viewer again&lt;/strong&gt;. The act of starting the GPS and finding the current location via the maps app seemed to bump-start the camera GPS for some reason?&lt;/p&gt;
	&lt;p&gt;I'm assuming that the GPS problems with the native camera app must be the result of a bug in the code, as the 8900 GPS works fine in other apps, including J2ME apps that I have developed myself.&lt;/p&gt;
	&lt;p&gt;When you do manage to get a GPS lock you can simply snap away. You can then upload your images to your PC and examine the EXIF metadata to view the location data. I've included a screenshot below which shows the image I captured, the EXIF GPS data (viewed using Paint Shop Pro) and the corresponding location on Google Maps... (I've obscured the GPS location slightly in order to hide my exact location - I don't want anyone stealing my cabbages... :) )&lt;/p&gt;
	&lt;p&gt;&lt;a title="geotagging images on 8900" href="javascript:window.open("&gt;&lt;img src="http://data5.blog.de/media/836/3669836_474a807fea_s.jpeg" alt="geotagging images on 8900"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;The Google "A" Pin is the location coordinates recorded in the EXIF information and the red arrow indicates the exact location - as you can see the location recorded in the image EXIF data is not exact, but within 200 meters of the original location. This shows the level of accuracy is not really what you would expect from a modern GPS, but I suspect that it is either that the coordinate data recorded in the EXIF data is truncated, or it could be due to the fact that I had to convert the lat/lng recorded in the EXIF from imperial to decimal (&lt;a href="http://www.fcc.gov/mb/audio/bickel/DDDMMSS-decimal.html"&gt;using this website&lt;/a&gt;)?&lt;/p&gt;
	Something cool...
	&lt;p&gt;&lt;a href="http://blackberrystorm.inlaymansterms.net/2009/04/geotagging.html"&gt;Another blog author posted on geotagging on his Blackberry,&lt;/a&gt; and after reading this I discovered that you can view the image and location on the Blackberry Maps app, just like you can with Google Maps - quite cool... Here is a screenshot of my device showing the location the image was taken... (apologies again for the info-hiding black lines)&lt;/p&gt;
	&lt;p&gt;&lt;a title="BB Maps and Images" href="javascript:window.open("&gt;&lt;img src="http://data5.blog.de/media/841/3669841_768d12ecd6_s.jpeg" alt="BB Maps and Images"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;This may be slightly gimmicky, but it's quite neat... (Following on from my above point regarding accuracy, this screenshot shows that the Blackberry itself recorded the location very accurately, and so I'm strongly suspecting that the lat/lng data is truncated in the EXIF data...)&lt;/p&gt;
	In Conclusion...
	&lt;p&gt;Geotagging is a very cool, and potentially very useful, feature. However, the current implementation on the 8900 is definitely not ready for primetime use yet, and I believe the inadequate GPS locking functionality would prohibit the use of the Blackberry camera app for capturing geo data in a real-world context. The fact that it takes several minutes to acquire a GPS lock, or you have to force the device to manually get a lock via the Maps app, ultimately results in disappointment, and how many business end-users would be prepared to wait-around before they can start capturing images?&lt;/p&gt;
	&lt;p&gt;Another point, slightly off-topic, is that Blackberry doesn't really provide any applications to help you manage your geotagged photos once you have uploaded them to your PC. Sure, you can view the images on a map on you device or upload the images to Flickr, but what about viewing/searching/sorting on the desktop?&lt;/p&gt;
	&lt;p&gt;If you want to add geotag or add location data to your captured images for business purposes, and also have the ability to manage them via a desktop/web app, then I would suggest that you look to more reliable third-party apps and services, such as those offered by &lt;a href="http://www.triopsis.com/"&gt;Triopsis Ltd&lt;/a&gt;. This is a completely self-serving plug as I have built a large part of Triopsis' current applications, but it does mean that I can vouch for the quality :)&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Daniel Bryant (Director) | Tai-Dev Ltd &lt;a href="http://www.tai-dev.co.uk/"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/07/09/geotagging-with-the-blackberry-8900-mixed-results-6479380/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-07-09:/2009/07/09/glassfish-j2me-blackberry-install-grrr-907-invalid-cod-http-error-6478856/</id><title>J2ME + GlassFish + Blackberry OTA Install = grrr... 907 Invalid COD HTTP Error 406</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/07/09/glassfish-j2me-blackberry-install-grrr-907-invalid-cod-http-error-6478856/"/><author><name>dbryant</name></author><published>2009-07-09T14:31:38+02:00</published><updated>2009-07-09T21:36:40+02:00</updated><content type="html">	&lt;p&gt;Are you seeing a 907 Invalid COD or HTTP Error 406 when attempting to install a J2ME app on a Blackberry via GlassFish App Server? The problem can be intermittent, and doesn't necessarily affect all Blackberry models. Barring the fact that your JAD or COD file might actually be corrupt (which is an issue not covered here), the cause is most likely a missing mime-type for COD files in the GlassFish default-web.xml descriptor...&lt;/p&gt;
	&lt;p&gt;This problem has tripped me up time and time again, as the root cause is one of those little configuration options that it easy to forget when deploying your JEE/J2ME app to a fresh GlassFish install. It's time to blog the solution in the hopes that it might lodge in my memory...&lt;/p&gt;
	&lt;strong&gt;Solution&lt;/strong&gt;
	&lt;p&gt;The &lt;a href="http://www.checkupdown.com/status/E406.html"&gt;HTTP 406 "not acceptable" error&lt;/a&gt; is actually a red-herring, and after Googling the result you will most likely end up &lt;a href="http://www.checkupdown.com/status/E406.html"&gt;here&lt;/a&gt;, which although informative, doesn't provide much help. The actual cause is that GlassFish doesn't know what mime-type the COD extension maps to, which results in the COD file being served incorrectly to the BB device. This can be fixed by editing the &lt;strong&gt;&lt;glassfish_install_dir&gt;/domains/domain1/config/default-web.xml&lt;/strong&gt; file and adding the following element under the root &lt;strong&gt;web-app element&lt;/strong&gt;&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;&lt;mime-mapping&gt;&lt;br&gt; &lt;extension&gt;cod&lt;/extension&gt;&lt;br&gt; &lt;mime-type&gt;application/vnd.rim.cod&lt;/mime-type&gt;&lt;br&gt; &lt;/mime-mapping&gt;&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;If you include this element with the rest of the mime-mappings your default-web.xml file will look something like this...&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;&lt;br&gt;...&lt;br&gt;&lt;!DOCTYPE web-app PUBLIC "-&lt;em&gt;Sun Microsystems, Inc.&lt;/em&gt;DTD Web Application 2.3&lt;em&gt;EN" "http:&lt;/em&gt;java.sun.com/dtd/web-app_2_3.dtd"&gt;&lt;/p&gt;
	&lt;p&gt;&lt;web-app&gt;&lt;br&gt;...&lt;br&gt;&lt;!-- ====== Default MIME Type Mappings ====== --&gt;&lt;br&gt;...&lt;/p&gt;
	&lt;p&gt;&lt;mime-mapping&gt;&lt;br&gt; &lt;extension&gt;cod&lt;/extension&gt;&lt;br&gt; &lt;mime-type&gt;application/vnd.rim.cod&lt;/mime-type&gt;&lt;br&gt;&lt;/mime-mapping&gt; &lt;/p&gt;
	&lt;p&gt;...&lt;br&gt;&lt;/web-app&gt;&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;strong&gt;Key Points!&lt;/strong&gt;
	&lt;ul&gt;
	&lt;li&gt;You must restart your GlassFish server after making this change.&lt;/li&gt;
	&lt;li&gt;You must also clear the Blackberry browser cache of any device that has attempted to download the mobile app previously i.e. any device which has visited your GlassFish server and potentially cached the available mime-types&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;If the above steps don't help, or you have already configured the GlassFish mime-types correctly check out &lt;a href="http://www.blackberryforums.com/developer-forum/2970-error-907-invalid-jar.html"&gt;this forum post for more guidance..&lt;/a&gt;.&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt; Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt; &lt;a href="http://www.tai-dev.co.uk/"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/07/09/glassfish-j2me-blackberry-install-grrr-907-invalid-cod-http-error-6478856/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-06-24:/2009/06/24/is-gwt-the-future-of-cross-browser-ui-implementation-some-cool-videos-and-my-opinions-6377483/</id><title>Is GWT the future of cross-browser UI implementation? Some cool videos, and my opinions...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/06/24/is-gwt-the-future-of-cross-browser-ui-implementation-some-cool-videos-and-my-opinions-6377483/"/><author><name>dbryant</name></author><published>2009-06-24T11:26:39+02:00</published><updated>2009-06-24T11:37:16+02:00</updated><content type="html">	&lt;p&gt;I'm really starting to like the ideas behind &lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit (GWT),&lt;/a&gt; which allows developers to write client-side code (e.g. HTML, CSS and Javascript/Ajax) using Java... Yes, that is correct - you can write your browser-based UI in Java and have it compiled into Javascript before being sent tn the client for rendering!&lt;/p&gt;
	&lt;p&gt;The GWT team are pitching that the resulting client-side code is very compact (and hence performant), and also takes care of cross-browser issues by compiling multiple browser-flavours of your GWT code, and sending only the appropriate optimised  code after the client's browser has been detected. You can also do lots of cool stuff like debug your Java code responsible for the UI generation in real time - that is, you can set breakpoints and watches in your Java code, which will be triggered when you interact with the compiled Javascript in the browser.&lt;/p&gt;
	&lt;p&gt;You can find more info from the &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT home page&lt;/a&gt; over at Google code, but I personally wanted a more high-impact overview which I have found in several videos of Google I/O sessions:&lt;/p&gt;
	&lt;p&gt;Check out this presentation for a good intro on how to migrate apps to GWT, and also a very cool introduction on GQuery, which is the GWT equivalent of &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; .&lt;br&gt;&lt;a&gt;&lt;/a&gt;&lt;a class="moz-txt-link-freetext" href="http://code.google.com/events/io/sessions/ProgressivelyEnhanceAjaxApps.html"&gt;&lt;br&gt;&lt;a href="http://code.google.com/events/io/sessions/ProgressivelyEnhanceAjaxApps.html"&gt;http://code.google.com/events/io/sessions/ProgressivelyEnhanceAjaxApps.html&lt;/a&gt;&lt;/a&gt; &lt;/p&gt;
	&lt;p&gt;This is also a good presentation, which shows some of the more programmatic low-level concepts, such as how to build a GWT-flavoured app, recommended design patterns, and also includes a demo app&lt;/p&gt;
	&lt;p&gt;&lt;a class="moz-txt-link-freetext" href="http://code.google.com/events/io/sessions/GoogleWebToolkitBestPractices.html"&gt;&lt;a href="http://code.google.com/events/io/sessions/GoogleWebToolkitBestPractices.html"&gt;http://code.google.com/events/io/sessions/GoogleWebToolkitBestPractices.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;And finally, a very cool video showing how the Google Wave client UI was built using GWT&lt;/p&gt;
	&lt;p&gt;&lt;a class="moz-txt-link-freetext" href="http://code.google.com/events/io/sessions/GoogleWavePoweredByGWT.html"&gt;&lt;a href="http://code.google.com/events/io/sessions/GoogleWavePoweredByGWT.html"&gt;http://code.google.com/events/io/sessions/GoogleWavePoweredByGWT.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;The fact that I often wear both client-side and server-side developer hats in an organisation makes GWT an appealing toolkit. I am very comfortable with Java, design patterns and Unit Testing, and typically my hair-pulling days involve Javascript or cross-browser issues. If I can write my whole app in Java using accepted design pattern and unit tests, and then have GWT deal with the fiddly issues such as cross-browser problems, I would be more than happy! I also believe the prevalence of this type of toolkit strengthens the position of Java within the developement market, and as I am a Java Consultant, I quite like this... &lt;img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"&gt;&lt;/p&gt;
	&lt;p&gt;My final comment is that Google is playing it very smart in the rapidly growing browser app market lately (not that they ever play it dumb...) - UI platforms are converging, for example modern mobile devices are increasingly offering fully-functional browsers, and many apps traditionally confined to the desktop are now being served via the browser (i.e. email, word processing and document sharing). Released from the shackles of a desktop machine, many of these apps are now also benefiting from being location-aware.&lt;/p&gt;
	&lt;p&gt;Google is primed for this kind of shift - GWT allows developers to build a flexible, performant and highly compatible browser app and &lt;a href="http://gears.google.com/"&gt;Google Gears&lt;/a&gt; takes care of any persistence and desktop interaction limitations of current browser deployment. Google is also investing heavily in the new &lt;a href="http://gears.google.com/"&gt;HTML5&lt;/a&gt; developments, which I believe will only serve to augment the functionality offered by their existing toolkits and platforms (check out the new &lt;a href="http://www.mozilla.com/en-US/firefox/3.5/releasenotes/"&gt;Firefox 3.5 Release Candidate &lt;/a&gt;which supports some of the new HTML5 features). Finally, I think we all know how much Google is investing in location-awareness, location-based services and &lt;a href="http://tai-dev.blog.co.uk/2009/06/19/is-your-google-map-app-a-fully-fledged-gis-and-more-importantly-could-it-integrate-with-an-existing-gis-6342443/"&gt;GIS&lt;/a&gt;.&lt;/p&gt;
	&lt;p&gt;It might be time to buy some more Google Stock...&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt; Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt; &lt;a href="http://www.tai-dev.co.uk/"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/06/24/is-gwt-the-future-of-cross-browser-ui-implementation-some-cool-videos-and-my-opinions-6377483/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-06-19:/2009/06/19/deploying-java-applications-to-multiple-mobile-devices-an-excellent-overview-and-comparison-of-jme-sdks-and-toolkits-6342906/</id><title>Deploying Java applications to multiple mobile devices? An excellent overview and comparison of JME SDKs and Toolkits</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/06/19/deploying-java-applications-to-multiple-mobile-devices-an-excellent-overview-and-comparison-of-jme-sdks-and-toolkits-6342906/"/><author><name>dbryant</name></author><published>2009-06-19T16:44:01+02:00</published><updated>2009-06-19T16:45:15+02:00</updated><content type="html">	&lt;p&gt;As a JME developer who builds applications which will be deployed to multiple device types it can be tricky knowing which platforms and tools support the various JME functionality and JSRs available. &lt;/p&gt;
	&lt;p&gt;Sun has very thoughtfully produced a nice article to help with this problem...&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/javame/stateoftheunion/"&gt;http://java.sun.com/developer/technicalArticles/javame/stateoftheunion/&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;In particular the platform/tool comparison matrix is priceless:&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/javame/stateoftheunion/#8"&gt;http://java.sun.com/developer/technicalArticles/javame/stateoftheunion/#8&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;
Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt;
&lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/06/19/deploying-java-applications-to-multiple-mobile-devices-an-excellent-overview-and-comparison-of-jme-sdks-and-toolkits-6342906/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-06-19:/2009/06/19/is-your-google-map-app-a-fully-fledged-gis-and-more-importantly-could-it-integrate-with-an-existing-gis-6342443/</id><title>Is your Google Maps App a fully-fledged GIS? and more importantly, could it integrate with an existing GIS?</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/06/19/is-your-google-map-app-a-fully-fledged-gis-and-more-importantly-could-it-integrate-with-an-existing-gis-6342443/"/><author><name>dbryant</name></author><published>2009-06-19T15:08:31+02:00</published><updated>2009-06-19T15:16:56+02:00</updated><content type="html">	&lt;p&gt;As a Google Maps API developer I have recently been thinking about where this kind of API sits within the &lt;a href="http://en.wikipedia.org/wiki/Geographic_information_system"&gt;Geographical Information System (GIS)&lt;/a&gt; application domain. GIS is big business, and many large companies and organisations that are responsible for managing distributed assets rely heavily on this type of application. Until several years ago GIS applications were often deployed “behind the scenes” out of the public eye, and tended to be highly specialised, very technical, and when initially constructed both the data itself and transfer/storage mechanisms were quite esoteric. I refer to these as first-gen GIS apps (although I’ll caveat this by stating that there may be existing classifications of GIS apps, of which I am unaware).&lt;/p&gt;
	&lt;p&gt;2005 heralded the arrival of second-gen GIS apps for general public consumption, which presented a nice Web 2.0 style interface and associated APIs for global mapping applications, &lt;a href="http://en.wikipedia.org/wiki/Google_Maps#Development_history"&gt;such as Google Maps.&lt;/a&gt; Now in 2009 everybody and their cat are using these applications daily...&lt;/p&gt;
	&lt;p&gt;In addition to the locations of roads, petrol station and tourist attractions which are currently spilling out of Google Maps there must also be hundreds of other first-gen GIS applications around the world that hold interesting data. Obviously some of this data is not for public consumption, but even if the data is destined for private use it would surely be reasonable to assume that an organisation could benefit from combining their existing GIS data with the user friendly and highly malleable second-gen style of GIS applications, albeit in a restricted fashion? Combine this with the prevalence of today’s low cost GPS devices, for example packaged within many modern mobile phones, and also the emergence of services such as &lt;a href="http://www.google.co.uk/latitude/intro.html "&gt;Google Latitude, &lt;/a&gt;we are rapidly hurtling towards a location-aware and highly contextualised future which will only get better with access to more and more data...&lt;/p&gt;
	&lt;p&gt;So, how easy would it be to integrate first and second generation GIS applications? My main research questions revolved on where the functionality of Google Maps/Earths type applications sit within the GIS domain, identifying any interesting nuances with storing/manipulating data, and the type of functionality offered in terms in interoperability. The preliminary research turned out to be quite interesting...&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;GIS apps tend to specify locations and geographical features by latitude, longitude and also elevation. Google Maps doesn’t manage elevation, as this application provides a 2D view onto the globe. Google Earth on the other hand, is quite capable of handling all of this information, and now work is well and truly under way to &lt;a href="http://tai-dev.blog.co.uk/2009/06/14/want-users-to-see-your-google-map-in-3d-check-out-the-new-g-satellite-3d-map-6302311/"&gt;merge Google Maps and Earth &lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;ul&gt;
	&lt;li&gt;Although lat/lngs are used to specify a location, there are variations in different formats (or "datum" in GIS-speak) depending on the&lt;a href="http://en.wikipedia.org/wiki/Geographic_information_system#Projections.2C_coordinate_systems_and_registration"&gt; map projection used&lt;/a&gt;. I am assuming that if a high level of accuracy is required when integrating data from multiple sources that the datums in use throughout the applications would have to be identified and compared.  I can’t see any reason why coordinates stored using different datums couldn't be programmatically converted (more info on datums @ &lt;a href="http://en.wikipedia.org/wiki/Map_projection#Choosing_a_model_for_the_shape_of_the_Earth"&gt;http://en.wikipedia.org/wiki/Map_projection#Choosing_a_model_for_the_shape_of_the_Earth&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Datum_(geodesy) "&gt;http://en.wikipedia.org/wiki/Datum_(geodesy) &lt;/a&gt; )&lt;/li&gt;
	&lt;/ul&gt;
	&lt;ul&gt;
	&lt;li&gt;There are several GIS standard protocols from the &lt;a href="http://www.opengeospatial.org/"&gt;Open Geospatial Consortium&lt;/a&gt; which may be of interest: 
	&lt;ul&gt;
	&lt;li&gt;Web Map Service (WMS) defines an API to allow a high-level layered image of a specified location to be retrieved.  More info @ &lt;a href="http://en.wikipedia.org/wiki/Web_Map_Service"&gt;http://en.wikipedia.org/wiki/Web_Map_Service&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;Web Feature Service (WFS) defines an API to enable lower-level manipulation of GIS features and concepts, such as adding data to a location or spatial analysis. More info @ &lt;a href="http://en.wikipedia.org/wiki/Web_Feature_Service"&gt;http://en.wikipedia.org/wiki/Web_Feature_Service&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;Geography Markup Language (GML) specifies an open XML-based interchange language to express geographical features. More info @ &lt;a href="http://en.wikipedia.org/wiki/Geography_Markup_Language"&gt;http://en.wikipedia.org/wiki/Geography_Markup_Language&lt;/a&gt; &lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;/ul&gt;
	&lt;ul&gt;
	&lt;li&gt;There is a Java-based open source reference implementation of WFS named &lt;a href="http://geoserver.org/display/GEOS/What+is+GeoServer"&gt;GeoServer&lt;/a&gt;, which in turn is built upon another Java-based open source GIS Toolkit named &lt;a href="http://geotools.codehaus.org/"&gt;GeoTools&lt;/a&gt;. These could potentially be integrated into both new and old GIS applications to enable the sharing of data using the above standards, essentially exposing a standard WFS API to third-party developers allowing integration of your data into their GIS apps.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;Google happens (by design I’m assuming &lt;img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"&gt; ) to be in good standing with its current GIS flavoured offerings:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Google Maps supports WMS and Google Earth supports WFS. &lt;/li&gt;
	&lt;li&gt;Google uses it's own&lt;a href="http://en.wikipedia.org/wiki/Kml"&gt; Keyhole Markup Language (KML),&lt;/a&gt; which compliments GML, to transfer and manipulate Geographical feature data. If an existing GIS app exposes data using the above standards, then integrating this data (in addition to your data) on Google Maps/Earth should be possible.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;That turned into quite a bit of text, but in a nutshell there are plenty of options to support the sharing/integration of data between 1G and 2G GIS apps, which would be made much easier if the above open standards are supported.&lt;/p&gt;
	&lt;p&gt;The open questions? Do existing first-gen GISs, which would be pervasive within well established organisations/companies, support these standards, and how do we find out about these GISs in the first place?&lt;/p&gt;
	&lt;p&gt;&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;
Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt;
&lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS &lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/06/19/is-your-google-map-app-a-fully-fledged-gis-and-more-importantly-could-it-integrate-with-an-existing-gis-6342443/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-06-18:/2009/06/18/finding-an-open-source-free-crm-can-be-trickier-than-you-might-think-6333732/</id><title>Finding an open-source (free) CRM can be trickier than you might think...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/06/18/finding-an-open-source-free-crm-can-be-trickier-than-you-might-think-6333732/"/><author><name>dbryant</name></author><published>2009-06-18T14:40:39+02:00</published><updated>2009-06-18T17:35:43+02:00</updated><content type="html">	&lt;p&gt;As the title suggests, I was recently searching for a free open-source CRM with a good API, which actually proved to be trickier than I initially thought. Many of the "open source" CRMs tend to offer the &lt;em&gt;majority&lt;/em&gt; of their code as open source, but the really useful features are proprietary and require a monthly subscription to use. Tut tut tut... The Open Source Initiative has more details of this kind of practice  &lt;a href="http://www.opensource.org/node/163"&gt;here...&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;After jumping down from my high horse I managed to find a good overview and review of existing "open source" CRMs &lt;a href="http://www.insidecrm.com/features/top-open-source-solutions-121307/"&gt;http://www.insidecrm.com/features/top-open-source-solutions-121307/&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;SugarCRM &lt;a href="http://www.sugarcrm.com/"&gt;http://www.sugarcrm.com/&lt;/a&gt; looks very comprehensive, especially from a business/end-use perspective, although the "free" open source Community Edition only offers approx 85% of what is on show. The full product (of which there are 3 flavours) is chargeable on a monthly basis....&lt;/p&gt;
	&lt;p&gt;SugarCRM does offer an API, but I couldn't get as much detail as I would like in a quick scan (although I've found this to be the case with a lot of open source products which charge for support) The core engine appears to use the &lt;a href="http://en.wikipedia.org/wiki/LAMP_(software_bundle)"&gt;LAMP&lt;/a&gt; stack, which means it is built using PHP with a MySQL backend. &lt;/p&gt;
	&lt;p&gt;Another CRM that looks interesting in HiperGate &lt;a href="http://www.hipergate.org/"&gt;http://www.hipergate.org/&lt;/a&gt; which is a genuinely open source and free application. This CRM doesn't appear quite as "flashy" as SugarCRM, and I would recommend that anyone interested has a look at the business/end-user functionality in order to ensure it has all of the desired functionality.&lt;/p&gt;
	&lt;p&gt;A big plus is that HiperGate is written in Java and has an excellent programmatic API, which was exactly what I wanted for bi-directional communication between existing bespoke JEE applications and the CRM (more info @ &lt;a href="http://www.hipergate.org/docs/api/4.0.0/"&gt;http://www.hipergate.org/docs/api/4.0.0/&lt;/a&gt; )&lt;/p&gt;
	&lt;p&gt;I don't know if anyone else has any better suggestions?&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;
Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt;
&lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS &lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/06/18/finding-an-open-source-free-crm-can-be-trickier-than-you-might-think-6333732/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-06-14:/2009/06/14/want-users-to-see-your-google-map-in-3d-check-out-the-new-g-satellite-3d-map-6302311/</id><title>Want Users to see your Google Map in 3D? Check out the new G_SATELLITE_3D_MAP...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/06/14/want-users-to-see-your-google-map-in-3d-check-out-the-new-g-satellite-3d-map-6302311/"/><author><name>dbryant</name></author><published>2009-06-14T19:26:34+02:00</published><updated>2009-06-14T19:26:34+02:00</updated><content type="html">	&lt;p&gt;Two weeks ago when I was trawling through my regular blog list I stumbled across&lt;br&gt;
&lt;a href="http://googlegeodevelopers.blogspot.com/2009/05/hey-maps-api-and-earth-api-developers.html"&gt;this article from Google&lt;/a&gt;, which detailed some modifications the Geo Developer team have made with the integration of Maps and Google Earth. Essentially it allows you to view your Google Map (embedded in your webpage) using the Google Earth interface i.e. you can view your map in 3D and "fly" through the terrain.&lt;/p&gt;
	&lt;p&gt;The functionality in this updated version is very cool - it even integrates with the existing pin/polygon line API, allowing you to plot all of your applications data using the usual Maps APIs, hit the "Earth" button, and as if by magic you are seamlessly transported into a 3D representation of the current map view complete with all your data (markers etc) - very cool.&lt;/p&gt;
	&lt;p&gt;Here is the basic code to get you up and running:&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;//...&lt;br&gt;
// the code below should be in a JS&lt;br&gt;
// function that is called by onload&lt;br&gt;
//...&lt;/p&gt;
	&lt;p&gt;if (GBrowserIsCompatible()) {&lt;/p&gt;
	&lt;p&gt;//create map&lt;br&gt;
        map = new GMap2($("map"));&lt;/p&gt;
	&lt;p&gt;//set default view to G_PHYSICAL_MAP, which looks cool,&lt;br&gt;
//and add the large style map control&lt;br&gt;
        map.setMapType(G_PHYSICAL_MAP);&lt;br&gt;
map.addControl(new GLargeMapControl());&lt;/p&gt;
	&lt;p&gt;//add the new G_SATELLITE_3D_MAP to the mix&lt;br&gt;
        map.addMapType(G_SATELLITE_3D_MAP);&lt;/p&gt;
	&lt;p&gt;        //add the GMapTypeControl to the UI to allow&lt;br&gt;
//the new "Earth" view to be selected&lt;br&gt;
        map.addControl(new GMapTypeControl());&lt;/p&gt;
	&lt;p&gt;}&lt;/p&gt;
	&lt;p&gt;// other functions...&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;You may need to do some tweaking in order to get all of the data representation working correctly - all of my custom pins appear correctly, but I can't get the pin clustering images I &lt;a href="http://tai-dev.blog.co.uk/2009/05/11/google-maps-pin-aggregation-a-neat-solution-6097485/"&gt;blogged about recently&lt;/a&gt; to display properly...&lt;/p&gt;
	&lt;p&gt;Viewing the Google Map in G_SATELLITE_3D_MAP Earth-style does require a small plugin installation in your browser (which may hamper deployment in some organisations), but so far I haven't heard of any particular problems with any browser...&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;
Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt;
&lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/06/14/want-users-to-see-your-google-map-in-3d-check-out-the-new-g-satellite-3d-map-6302311/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-06-12:/2009/06/12/book-review-affinity-managing-java-application-servers-by-john-m-hawkins-6291121/</id><title>Book Review: Affinity – Managing Java Application Servers, by John M. Hawkins</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/06/12/book-review-affinity-managing-java-application-servers-by-john-m-hawkins-6291121/"/><author><name>dbryant</name></author><published>2009-06-12T18:57:05+02:00</published><updated>2009-06-14T10:27:50+02:00</updated><content type="html">	&lt;p&gt;In a nutshell this book reads more like a consultant’s journal than a technical manual. This is not necessarily a bad thing, and if you’re looking for a good read about life in the trenches as a technology/solution consultant, then this is a book for you. If you, like me, are looking for a technical overview on how to improve your Java application server (GlassFish, WebLogic) management skills, then this is NOT the book for you.&lt;/p&gt;
	&lt;p&gt;I am a technical consultant specialising in designing, developing and deploying enterprise applications using JEE, Web 2.0 and RDBMS. Although I didn’t realise this before I bought the book, a good portion of this text is clearly out of the scope (and area of interest) for the type of role I typically occupy within an organisation. In all fairness the book’s back cover does state that the target audience is application/system admins and IT managers, but in my opinion it even misses the mark for these three roles. There is not enough technical information for first two roles, and in contrast provides way too much content for the third (I would estimate that someone could condense the book down to 10-20 pages as an executive summary for IT managers who are looking to become aware of application deployment terminology etc)&lt;/p&gt;
	&lt;p&gt;I also have three key criticisms from a technical aspect:&lt;/p&gt;
	&lt;p&gt;1. First, no concrete technical examples are provided (such as JVM memory configurations, deployment descriptor examples, or performance testing methodologies).&lt;br&gt;
2. Second, the book doesn’t provide enough detail about certain key concepts, and at the same time also talks too much about some topics. For example, at several places within the book the author labors the point about using n-tier architectures when designing applications, but doesn’t really define the concept (I already knew this from my Uni days, but the non-techies or middle managers might not).&lt;br&gt;
3. Finally, and probably the most important today, is that the technologies covered are not up to date, and the book doesn’t cover important application/ORM frameworks such as Spring, EJB 3.0 and Hibernate, or concepts such as RESTful Web Services, all of which feature heavily in modern applications.&lt;/p&gt;
	&lt;p&gt;If you are looking for a technical overview of how to manage and tune the performance of your application server, and also improve your JEE applications then I would recommend these two books:&lt;/p&gt;
	&lt;p&gt;* &lt;a href="http://www.amazon.co.uk/Pro-Java-Performance-Management-Optimization/dp/1590596102/"&gt;Pro Java EE 5 Performance Management and Optimization, by Steven Haines&lt;/a&gt; – This is _exactly_ the kind of book I was looking for. The author provides a comprehensive introduction to performance management, a guide to optimising both application servers and applications themselves throughout the development lifecycle, and a great overview of load testing and common JEE performance problems - including excellent (and very technical) examples. The chapter on generic tuning for application servers is worth the admission price alone, and is something I have used on troubled production servers!&lt;br&gt;
* &lt;a href="http://www.amazon.co.uk/Java-Power-Tools-John-Smart/dp/0596527934/"&gt;Java Power Tools, by John Smart&lt;/a&gt; – In addition to several chapters providing technical details of tools useful for performance management and testing of your application server (such as load testing with jMeter, and Profiling with jConsole and jstat) this book also provides a very technical overview of best practice for build processes (ANT, Maven, Version Control, Hudson CI etc), development quality metric tools (CheckStyle PMD, Findbugs etc ) and Unit testing. This book is a very useful addition to any developer/consultant’s bookshelf.&lt;/p&gt;
	&lt;p&gt;In summary, there is no denying the author of Affinity knows his stuff, but the book could have benefited by defining the target audience more clearly. If your background and reasons for reading this book are similar to mine you can most likely take away a few nuggets of information from this text. However, you can acquire the same information (in a better format) from my recommendations above, and in the process also benefit from literally hundreds of other tips and practical examples for managing a JEE application server.&lt;/p&gt;
	&lt;p&gt;[The above text is a copy of the review I recently submitted to amazon.co.uk for &lt;a href="http://www.amazon.co.uk/Affinity-Managing-Java-Application-Servers/dp/059545626X/"&gt;Affinity: Managing Java Application Servers&lt;/a&gt;] &lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;
Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt;
&lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/06/12/book-review-affinity-managing-java-application-servers-by-john-m-hawkins-6291121/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-05-25:/2009/05/25/google-maps-search-bar-enablegooglebar-configuration-options-hidden-but-now-found-6173239/</id><title>Google Maps Search Bar (enablegooglebar) configuration options hidden, but now found...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/05/25/google-maps-search-bar-enablegooglebar-configuration-options-hidden-but-now-found-6173239/"/><author><name>dbryant</name></author><published>2009-05-25T11:36:48+02:00</published><updated>2009-06-03T10:12:47+02:00</updated><content type="html">	&lt;p&gt;I'm not sure how many of my fellow Google Maps developers are using the Google Maps Local Search bar, but it's actually quite cool. In essence it adds a small search box to any maps view (replacing the "powered by Google" icon) that allows a user to search locally via the current map view for things of interest (restaurants, petrol/gas stations) and also search more globally for Locations (towns, cities etc). &lt;/p&gt;
	&lt;p class="center"&gt;
&lt;a href="http://www.blog.co.uk/media/photo/enablegooglebar/3536397" title="enablegooglebar"&gt;&lt;img src="http://data5.blog.de/media/397/3536397_d04dd82f02_s.jpeg" alt="enablegooglebar" vspace="5" hspace="5"&gt;&lt;/a&gt;
&lt;/p&gt;
	&lt;p&gt;Enabling the search bar is deceptively simple...&lt;/p&gt;
	&lt;blockquote&gt;&lt;p&gt;
// within script tag&lt;/p&gt;
	&lt;p&gt;   //onload function - create map&lt;br&gt;
   var map = new GMap2(document.getElementById("map"));&lt;br&gt;
   //show the bar on the map...(yes it really is this simple!)&lt;br&gt;
   map.enableGoogleBar();&lt;/p&gt;
	&lt;p&gt;// end of script tag
&lt;/p&gt;&lt;/blockquote&gt;
	&lt;p&gt;However, configuring the bar is slightly more tricky, and the docs on this are not so easy to find. This is because you don't actually configure the bar options directly, instead you configure a &lt;a href="http://code.google.com/apis/maps/documentation/reference.html#GMapOptions"&gt;GMapOptions&lt;/a&gt; and pass this into your GMap2 constructor. In turn this config info is utilised when you enable the bar on the associated GMap2 instance.&lt;/p&gt;
	&lt;p&gt;Here is an example that I used to ensure the search bar is open by default, and also add a callback that is fired after the the local search pins are added to the map (which happens after a user's local search completes, and the map is zoomed/panned)...&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;// within script tag&lt;/p&gt;
	&lt;p&gt;   //onload function - create map, passing in a GMapOptions&lt;br&gt;
   map = new GMap2(document.getElementById("map"),{&lt;br&gt;
            googleBarOptions:{&lt;br&gt;
                showOnLoad : true,&lt;br&gt;
                onMarkersSetCallback : myCallback&lt;br&gt;
                }&lt;br&gt;
        });&lt;br&gt;
   //show the bar on the map...&lt;br&gt;
   map.enableGoogleBar();&lt;/p&gt;
	&lt;p&gt;   //function myCallback defined here...&lt;/p&gt;
	&lt;p&gt;// end of script tag&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;There are many configuration options you can add once you have the above constructor setup. Here are links to the appopriate Google API configuration docs&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://code.google.com/apis/maps/documentation/reference.html#GMapOptions"&gt;GMapOptions&lt;/a&gt; - list of constructor config options available&lt;br&gt;
&lt;a href="http://code.google.com/apis/maps/documentation/reference.html#GGoogleBarOptions"&gt;GGoogleBarOptions&lt;/a&gt; - detailed list of options for local search bar config&lt;/p&gt;
	&lt;p&gt;Best wishes,&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;
Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt;
&lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/05/25/google-maps-search-bar-enablegooglebar-configuration-options-hidden-but-now-found-6173239/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-05-23:/2009/05/23/google-javascript-ajax-rss-feed-api-and-html-component-6164176/</id><title>Google Javascript/AJAX RSS Feed API and HTML component</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/05/23/google-javascript-ajax-rss-feed-api-and-html-component-6164176/"/><author><name>dbryant</name></author><published>2009-05-23T17:30:23+02:00</published><updated>2009-06-03T10:13:18+02:00</updated><content type="html">	&lt;p&gt;I was recently looking for a nice (simple) html/javascript RSS viewer component to put on the main &lt;a href="http://www.tai-dev.co.uk"&gt;Tai-Dev web page&lt;/a&gt; which would provide a summary of recent blog posts and tweets via their respective RSS feeds. I first ran into this &lt;a href="http://www.newsniche.com/using-javascript-to-display-rss.php"&gt;blog article&lt;/a&gt; which makes a very valid point about javascript alone being incapable (at least on first glance) of displaying RSS feeds as some processing of the feed is required in order to extract the data from the xml...&lt;/p&gt;
	&lt;p&gt;Essentially either a server-side component is required (which didn't meet my simplicity requirement...) or you can utilise a third-party service which parses the RSS feed and provides a simple javascript API to allow display on a web page. The aforementioned &lt;a href="http://www.newsniche.com/using-javascript-to-display-rss.php"&gt;article&lt;/a&gt; lists several such third-party providers, but does warn that you will become reliant on the provider - if they disappear, so does the usefulness of your RSS viewer component...&lt;/p&gt;
	&lt;p&gt;In these slightly unpredictable times none of the provided third-parties were names I knew or filled me with confidence in regards to their reliability. However, another session of searching revealed that Google actually provides such a service as part of their &lt;a href="http://code.google.com/apis/ajaxsearch/"&gt;Ajax Search API&lt;/a&gt; - you can find details of this ajax Feed API &lt;a href="http://www.google.com/uds/solutions/dynamicfeed/index.html"&gt;here...&lt;/a&gt; (and of course, I am assuming that Google won't disappear overnight &lt;img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"&gt; )&lt;/p&gt;
	&lt;p&gt;I plugged the details of my feeds into the Google Feed Wizard and copied the resulting code into my web page. A quick look at the Feed API &lt;a href="http://www.google.com/uds/solutions/dynamicfeed/reference.html"&gt;reference docs&lt;/a&gt; allowed me to customise the functionality and looks, and also offer some hints in regards to displaying multiple feeds on a single page.&lt;/p&gt;
	&lt;p&gt;You can check out the results on the &lt;a href="http://www.tai-dev.co.uk"&gt;Tai-Dev home page&lt;/a&gt; or see below...&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.blog.co.uk/media/photo/rss_feeds_on_tai_dev_web_page/3536563" title="rss feeds on tai-dev web page"&gt;&lt;img src="http://data5.blog.de/media/563/3536563_340ffac0b8_m.jpeg" alt="rss feeds on tai-dev web page" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Not bad for 10-15 mins work, and I think it looks very good (cue sound of own trumpet playing). Let me know what you think...&lt;/p&gt;
	&lt;p&gt;Best wishes,&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;
Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt;
&lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/05/23/google-javascript-ajax-rss-feed-api-and-html-component-6164176/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-05-23:/2009/05/23/check-out-the-tai-dev-tweets-6164011/</id><title>Check out the Tai-Dev Tweets!</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/05/23/check-out-the-tai-dev-tweets-6164011/"/><author><name>dbryant</name></author><published>2009-05-23T16:48:04+02:00</published><updated>2009-06-03T10:13:59+02:00</updated><content type="html">	&lt;p&gt;Why not check out the Tai-Dev Twitter account @ &lt;a href="http://twitter.com/taidevcouk"&gt;http://twitter.com/taidevcouk&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;I will mainly be Tweeting info when it doesn't require the full blog treatment, such as links to interesting articles or tools I'm using.&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;
Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt;
&lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/05/23/check-out-the-tai-dev-tweets-6164011/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-05-12:/2009/05/12/geocoding-addresses-postcodes-via-google-maps-api-in-bulk-and-on-the-server-side-6104334/</id><title>Geocoding addresses/postcodes via Google Maps API in bulk (and on the server-side)...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/05/12/geocoding-addresses-postcodes-via-google-maps-api-in-bulk-and-on-the-server-side-6104334/"/><author><name>dbryant</name></author><published>2009-05-12T19:27:28+02:00</published><updated>2009-06-03T10:14:23+02:00</updated><content type="html">	&lt;p&gt;A common problem for Google Maps developers who plot addresses on the map via postcode or other address data is getting the actual lat/lng coordinates of the address.&lt;/p&gt;
	&lt;p&gt;Now we all know we can "geocode" a postcode or address into lat/lng vales for plotting in real time via Google's JavaScript API (details @ &lt;a href="http://code.google.com/apis/maps/documentation/services.html#Geocoding),"&gt;http://code.google.com/apis/maps/documentation/services.html#Geocoding),&lt;/a&gt; but this has obviously got to be conducted client-side and is not suitable for geocoding a large (bulk) number of addresses. Frequently when you are loading lots of new addresses into a database these restrictions prove a problem...&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;The Solution&lt;/strong&gt; Google also offers an HTTP Geocoding service which can be called server-side and is more suited for bulk geocoding! I'll let you read the details @ &lt;a href="http://code.google.com/apis/maps/documentation/geocoding/index.html"&gt;http://code.google.com/apis/maps/documentation/geocoding/index.html&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;However, Google don't give you much support in respect to how to actually programmatically use this HTTP service, and so I've included a pseudo-java implementation below that should be enough to get you started...&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;    private String googleURL = "http://maps.google.com/maps/geo?output=csv&amp;oe=utf8&amp;sensor=false&amp;key="; //note csv output requested&lt;br&gt;
    private String googleKey = "_your_key_here_";&lt;br&gt;
    private String googleQuery = "&amp;q=";&lt;/p&gt;
	&lt;p&gt;//&lt;br&gt;
//...&lt;br&gt;
//&lt;br&gt;
    private void geocode(String geoTarget) {&lt;br&gt;
        //encode the geoTarget in case there are any non-URL friendly&lt;br&gt;
        //characters included (such as spaces and quotes)&lt;br&gt;
        String encodedGeoTarget = null;&lt;br&gt;
        try {&lt;br&gt;
            encodedGeoTarget = URLEncoder.encode(geoTarget, "UTF-8");&lt;br&gt;
        } catch (UnsupportedEncodingException uee) {&lt;br&gt;
            throw new InfrastructureException(uee);&lt;br&gt;
        }&lt;/p&gt;
	&lt;p&gt;        //build the geocoding URL&lt;br&gt;
        URL googleGeocodeURL = null;&lt;br&gt;
        try {&lt;br&gt;
            googleGeocodeURL = new URL(googleURL + googleKey + googleQuery + encodedGeoTarget);&lt;br&gt;
            log.finer("Complete URL for geocode request : " + googleGeocodeURL.toString());&lt;br&gt;
        } catch (MalformedURLException mue) {&lt;br&gt;
            //do something&lt;br&gt;
        }&lt;/p&gt;
	&lt;p&gt;        try {&lt;br&gt;
            in = new BufferedReader(new InputStreamReader(googleGeocodeURL.openStream()));&lt;/p&gt;
	&lt;p&gt;            if (in.ready()) {&lt;br&gt;
                response = in.readLine();&lt;br&gt;
                log.finer("Google Responded with : " + response);&lt;br&gt;
                String[] split = response.split(",");&lt;br&gt;
                log.finer("split is " + split);&lt;/p&gt;
	&lt;p&gt;                try {&lt;br&gt;
                    //first check the response code for sign of problems&lt;br&gt;
                    responseCode = Integer.parseInt(split[0]);&lt;br&gt;
                    log.finer("Response Code: " + responseCode);&lt;br&gt;
                    if (responseCode.equals(620)) {&lt;br&gt;
                        //max number of queries exceeded&lt;br&gt;
                    } else if (responseCode.compareTo(new Integer(201)) &gt; 0) {&lt;br&gt;
                        //Google indicated a problem occurred - the responseCode value will provide more info&lt;br&gt;
                        &lt;em&gt;see http:&lt;/em&gt;code.google.com/apis/maps/documentation/geocoding/index.html#StatusCodes&lt;br&gt;
                    }&lt;/p&gt;
	&lt;p&gt;                    //response code good&lt;br&gt;
                    //parse geocode data from CSV response...&lt;br&gt;
                    latitude = Float.parseFloat(split[2]);&lt;br&gt;
                    log.finer("latitude is " + latitude);&lt;br&gt;
                    longitude = Float.parseFloat(split[3]);&lt;br&gt;
                    log.finer("longitude is " + longitude);&lt;br&gt;
                    accuracy = Float.parseFloat(split[1]);&lt;br&gt;
                    log.finer("accuracy is " + accuracy);&lt;br&gt;
                } catch (NumberFormatException nfe) {&lt;br&gt;
                    log.severe("Problem parsing response..." + nfe.getMessage());&lt;br&gt;
                }&lt;/p&gt;
	&lt;p&gt;            } else {&lt;br&gt;
                log.severe("Unable to open URL @ " + googleGeocodeURL.toString());&lt;br&gt;
            }&lt;br&gt;
        } finally {&lt;br&gt;
            if (in != null) {&lt;br&gt;
                in.close();&lt;br&gt;
            }&lt;br&gt;
        }&lt;br&gt;
    }&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;Feel free to drop me a line if you need more info...&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;
Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt;
&lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/05/12/geocoding-addresses-postcodes-via-google-maps-api-in-bulk-and-on-the-server-side-6104334/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-05-11:/2009/05/11/google-maps-pin-aggregation-a-neat-solution-6097485/</id><title>Google Maps Pin Aggregation - a neat solution</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/05/11/google-maps-pin-aggregation-a-neat-solution-6097485/"/><author><name>dbryant</name></author><published>2009-05-11T16:28:25+02:00</published><updated>2009-06-03T10:14:54+02:00</updated><content type="html">	&lt;p&gt;I stumbled across a great little pin clustering/aggregation tool for Google Maps. This elegantly solves the problem that many Google Map developers come across which involves having too many pins on the map. Too many pins not only causes the page to load/refresh slow, but looks rubbish as well...&lt;/p&gt;
	&lt;p&gt;Here is a link to an example screenshot (linked from &lt;a href="http://googlegeodevelopers.blogspot.com/2009/04/markerclusterer-solution-to-too-many.html)"&gt;http://googlegeodevelopers.blogspot.com/2009/04/markerclusterer-solution-to-too-many.html)&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;&lt;img src="http://gmaps-samples.googlecode.com/svn/trunk/images/screenshot_clusterereffect.jpg" alt="markercluster" title="markercluster"&gt;&lt;/p&gt;
	&lt;p&gt;For more info check out the Google Geo Devlopers blog...&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://googlegeodevelopers.blogspot.com/2009/04/markerclusterer-solution-to-too-many.html"&gt;http://googlegeodevelopers.blogspot.com/2009/04/markerclusterer-solution-to-too-many.html&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Kudos to the developer for releasing this into the open source (it looks like it was originally used in a commercial product)...&lt;/p&gt;
	&lt;p&gt;Best wishes,&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
	&lt;p&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;
Daniel Bryant (Director) | Tai-Dev Ltd&lt;br&gt;
&lt;a href="http://www.tai-dev.co.uk"&gt;www.tai-dev.co.uk&lt;/a&gt; - IT Consultancy Services Specialising in JEE, Web 2.0 and RDBMS
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/05/11/google-maps-pin-aggregation-a-neat-solution-6097485/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2009-05-03:/2009/05/03/so-oracle-buys-sun-microsystems-6050592/</id><title>So, Oracle buys Sun Microsystems</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2009/05/03/so-oracle-buys-sun-microsystems-6050592/"/><author><name>dbryant</name></author><published>2009-05-03T14:55:43+02:00</published><updated>2009-05-03T14:56:09+02:00</updated><content type="html">	&lt;p&gt;Very interesting for Java Consultants like myself:&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://news.zdnet.com/2100-9595_22-290094.html"&gt;http://news.zdnet.com/2100-9595_22-290094.html&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;One of the most interesting points I've seen mentioned is what will happen to MySQL? I can't see Oracle wanting to push this DB instead of their own?
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2009/05/03/so-oracle-buys-sun-microsystems-6050592/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2008-08-07:/2008/08/07/glassfish-spring-multiple-applications-p-4555617/</id><title>Glassfish + Spring + Multiple applications = problems...</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2008/08/07/glassfish-spring-multiple-applications-p-4555617/"/><author><name>dbryant</name></author><published>2008-08-07T14:51:04+02:00</published><updated>2008-08-07T14:51:04+02:00</updated><content type="html">	&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;br&gt;
Recently I was working on a project where we were deploying multiple Spring-based web applications onto the same server (and same Glassfish instance), and we were seeing intermittent problems with the applications...&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;The Symptoms&lt;/strong&gt;&lt;br&gt;
- Quite often any application deployed after the first would deploy correctly but fail to start without any obvious Exceptions being generated (we were deploying our apps by dropping a WAR into the autodeploy directory)&lt;br&gt;
- Sometimes an application would behave unexpectedly (particularly involving database access and session handling)&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;The Search for Answers...&lt;/strong&gt;&lt;br&gt;
Googling the problem didn't point to any obvious help. It turned out (after much investigation) to be connected with the log4j listener used by Spring. As I understand it, when a Spring-based application using log4j is deployed and initialised the log4j component registers within the app server a system property "webAppRootKey". Now this property should be separately stored for each web app, but many app servers such as Glassfish and Tomcat don't do this and instead share this property across all apps. The problem arises if more than one app attempts to set this property - if this occurs log4j throws a rather subtle Exception that can easily be overlooked when Spring is busy initialising.&lt;/p&gt;
	&lt;p&gt;This is exactly what was happening in our situation - after the first app deployment set the webAppRootKey any further attempt by another deployment to set this property produced the subtle Exception or strange effects within the app.&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;The Fix&lt;/strong&gt;&lt;br&gt;
The fix really is quite simple - &lt;strong&gt;include a context-param within each app's web.xml with the param-name set to webAppRootKey and param-value set to a unique value&lt;/strong&gt; (we use our ant build script to randomly inset a unique value here at build time).&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;&lt;context-param&gt;&lt;br&gt;
        &lt;param-name&gt;webAppRootKey&lt;/param-name&gt;&lt;br&gt;
        &lt;param-value&gt;WEB_APP_ROOT_KEY&lt;/param-value&gt;&lt;br&gt;
&lt;/context-param&gt;&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;More info can be found hidden away on the Spring website at &lt;a href="http://opensource.objectsbydesign.com/spring-1.1.4/org/springframework/web/util/Log4jWebConfigurer.html"&gt;&lt;a href="http://opensource.objectsbydesign.com/spring-1.1.4/org/springframework/web/util/Log4jWebConfigurer.html"&gt;http://opensource.objectsbydesign.com/spring-1.1.4/org/springframework/web/util/Log4jWebConfigurer.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;I hope this helps any developer struggling with the same problem!&lt;/p&gt;
	&lt;p&gt;Daniel&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2008/08/07/glassfish-spring-multiple-applications-p-4555617/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry><entry><id>tag:tai-dev.blog.co.uk,2008-07-30:/2008/07/30/hello-world-4519910/</id><title>Hello World!</title><link rel="alternate" type="text/html" href="http://tai-dev.blog.co.uk/2008/07/30/hello-world-4519910/"/><author><name>dbryant</name></author><published>2008-07-30T12:27:04+02:00</published><updated>2008-07-30T12:27:04+02:00</updated><content type="html">	&lt;p&gt;Welcome to my blog. I plan to post interesting items about my work with Java-based Enterprise Application Development as I come across them, and so stay tuned!
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://tai-dev.blog.co.uk/2008/07/30/hello-world-4519910/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</content></entry></feed>
