Feb
18 Coding Options
	
      I have discovered that I have been away 
      from coding for a while! My last coding assignment was with EDS(www.eds.com, 
      now a unit of HP), working on an existing codebase that dealt with a 
      mixed Oracle/mainframe backend, with a Java servlet/JSP front end (http://travis.gov.ab.ca). 
      This was a familiar environment, since I worked on similar systems at 
      Novartis (www.gnf.org) and the 
      University of Alberta Human Metabolome Database Project (metabolomics.ca). 
      However, my work at EDS transitioned into Business Analysis, including a 
      lengthy stint as a facilitator for a large-scale Smart Card 
      implementation. While I was gone, the world changed!
    
    
      The world has experimented with web user 
      interfaces (UIs), and has found them wanting. In their place, the Rich 
      Web has gained prominence. This primarily has meant AJAX, and in 
      practice, the Google Web Toolkit along with other offerings. Adobe has 
      introduced Adobe AIR, which allows cross-platform desktop development 
      based on Flash. And the rise of the Mac platform to relevance has 
      re-invigorated cross-platform library solutions, such as Qt, a unit of 
      Nokia, which provides Java and C++ development environments that can be 
      targeted at almost any platform, including Linux, Mac, Windows, and many 
      smart phones.
    
    
      So I want to develop custom, easily 
      modified business software. So do millions (?) of other developers. I 
      hope that my choice of technology gives me a business advantage. Of 
      course, my primary business advantage is that I will start by creating a 
      relationship with my clients, and then will meet their perceived and 
      actual needs. This means that my choice of platform must allow me to 
      fulfill those needs within a cost and time structure that allows me to 
      be profitable.
    
    
      So, what do I do? Here are some major 
      factors in my decision-making process (which has not finished yet!):
    
    
      1) Run on desktop vs. remote server: Do I set up a server and 
      allow my clients to log in to the server? Or do I send a complete 
      solution to the client desktop, including a persistence solution and all 
      business logic?
    
    
      My experience and my instincts suggest that if I can control the server, 
      I can improve the experience for the client without the pain of an 
      upgrade process. This should allow me to iterate rapidly towards a 
      really good product.
    
    
      2) Web client vs. Rich client: Should the user interface be 
      compiled to run on the local machine, or should it be mediated by one of 
      several possible browsers, over an uncertain network connection? This 
      seems to be somewhat of a false dichotomy, as long as the client has 
      decent bandwidth. With my choice of a server backend in #1, the 
      bandwidth seems to be required. Can a solution such as GWT support 
      enough functionality to make the browser "disappear?" Or would a Java 
      client offer enough speed and interactivity to make the browser 
      interface seem clunky? Perhaps I should let Qt provide the UI framework, 
      and write once, test everywhere?
    
    
      3) Client hosting of data: Will the clients be comfortable with 
      their private business data in the "cloud," or should I sell them on 
      local appliances that host their solution on their local intranet (which 
      means in many cases, setting up an intranet)?
    
    
      The low cost of desktop hardware leads me towards this second option, 
      where I build and configure a server that hosts the persistent data and 
      the application, which is served to the client desktop (through 
      something like Java Web Start, or through GWT, or Adobe AIR). This 
      allows me to set up backup schemes and encryption to reassure the client 
      of the security of their data, and gives me a single upgrade point per 
      client.
    
    
      Given the explosion of virtual server 
      environments available, I believe this progression of questions and 
      answers will lead me to develop a standard appliance that can be easily 
      loaded into a commodity PC. This appliance will host the applications 
      required by the client, while the data will be stored on the PC outside 
      of the appliance, allowing for quick swapping of images when I wish to 
      push out an upgrade or bugfix, without touching the client data.
    
    
      I have a lot of experience with MySQL, and 
      combined with its price point (free!), I plan to stick with it for now 
      (while watching PostGres et al). Combining MySQL with a JVM and a 
      servlet container (Tomcat? Jetty? Jboss? I'll decide later... the joy of 
      standards) gives me a comfortable backend. Now, developing on the front 
      end for the JVM has gotten interesting, and that's where I'm still 
      experimenting. GWT? AIR? I will probably pass on AIR for now, as its 
      advantages are pretty small compared to the other options, and there is 
      a small upfront cost involved. I'm still happiest with free tools.
    
    
      I am taking a good long look at Qt, and its 
      Java implementation, Qt Jambi. That combination gives me a near-native 
      front end (from C++ compiled into native code) combined with Java (which 
      I actually have worked in before). If it's not dynamic enough (more on 
      that in a later post), I will probably invest some time in GWT, and then 
      fall back to HTML+javascript as a last resort (but the one I actually 
      know how to do now).
    
    
      Suggestions?
    
	Categories: Business , Methodology , Software