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