SOFTWARE BACKGROUND

OR WHAT I DO IN FRONT OF A COMPUTER


Coding

Nowadays, my IT time is peppered more with terms such as UML, SCRUM, SOA, SOAP, Waterfall, TOGAF - all terminology associated with Technical Architecture and Solutions Architecture, which is the area I have moved into, and is also an area that fascinates me. I spend time developing wireframes and sitemaps, as well as using tools such as Enterprise Architect to develop UML diagrams, and Dia for Flowcharting. Having said that, I do still code in PHP, PERL, SQL and JavaScript (using various frameworks for AJAX).

Coding wise, as well as writing PERL, JavaScript, JSP, PHP, ASP (VBScript and JScript), XML & shell script, I have also developed applications and applets in Java - for desktop applications and for smartcards and PDA applications. I have also programmed sporadically in C, C++ and C-shell, on UNIX operating systems, since the start of the 1990's, (mainly using cc and gcc). I also use Java for some numerical modelling software I have been developing for astrophysics, quantum mechanics and rocket science (previously, I was using C++, but I infinitely prefer Java). I also speak some SQL (on Oracle, MySQL, PostGRES and SQL Server).


PHP

When writing code, I tend to find I make a lot of use PHP nowadays. Much of the recent systems I have designed and rolled my sleeves up and written or co-written the code for, have used PHP, purely because of the speed of development. Database backends I have worked on with PHP have primarily been MySQL and PostGRES. The PHP work has ranged from simple websites through to some quite interesting custom content management systems, customer relationship management systems and location aware mobile systems, as well as a host of others along the way.

I use a mixture of PHP 5 and PHP 4, depending on the version that might be specified by a client for the particular task. When I am doing the specifying, it is usually PHP 5.


Perl

Perl is really my main language of choice though. There's little that can't be done with Perl, and although somewhat arcane at times, it's rarely that you don't find a Perl module on CPAN that's been written to do exactly what you want. Using Perl with modules such as CGI and DBI is a dream - DBI especially, makes talking to databases such as Oracle or MySQL a breeze. I'd be the first to admit though, that I'm no Perl guru (much though I would like to be) - my regular expressions are just not creative enough to start with! My main background with Perl is in using Perl with web applications with Perl modules such as DBI and CGI. I'm currently undertaking the following Perl code projects:

1. Developing a Perl GIS application to read in GPS strings from a GPS unit connected to an RS-232 port, and then plot the GPS position data on screen on a map in real time using Perl and Tk, and to overlay various layers of spatial information - a clear demonstration that it can be used for a lot more than just CGI/Internet programming.

2. Developing a Perl application to apply Kalman filtering to a number of empirical datasets.

3. Developing a Perl application to communicate with a data logger via the RS-232 port, and to parse the data from the data logger.

If you want a look at some cool Perl code, a good place to start is The London Perl Mongers

I use Perl on both Linux, and the ActiveState port to Windows. On both the GNU Linux and Windows versions, I use Perl 5.8, although I'll probably move eventually to Perl 6 (a much anticipated event). Yes, I use strict and the -w flag, as well as trying to document my code in POD. In fact I tend towards the viewpoint that anyone who puts out Perl code with lots of warning messages being displayed, or without internal documentation, should be shot! or the managers who force developers to follow these practices should be shot!


ASP (Active Server Pages)

Professionally, I've used ASP a fair bit too (Both using VBScript and JScript). ASP's really nice, it's straightforward (a heck of a lot more straightforward than Perl), and working with ADO is really useful from a speed of development point of view, but it's biggest downpoint is that it can be a pain to debug compared to Perl. With Perl you're much closer to the metal so to speak, whereas ASP is abstracted quite a bit.


C and C++

My C and C++ are pretty rusty. I only ever really use C now for interfacing with hardware via the RS-232 port. Real low level stuff. I used to use it for some really quite involved code for space missions, developing various algorithms to scan images of the surface of planets (Earth and Mars mainly) and similar - this was interesting. It involved some unusual experiences such as sitting in a computer lab in Russia with a bunch of Russian space scientists, not being able to speak to each other in English or Russian, but being able to communicate in a computing common language - C! More recently, I've had to dust off my C++ for an open source application I'm working on using KDE on GNU Linux however.


Shell

Where I've used Shell scripts, I've tended to use C-Shell. I have used Bourne Shell and Korn Shell for some scripts interfacing to an Oracle database, but I replaced those with Perl at the first opportunity because Perl is so much more powerful. Likewise for the likes of sed and awk/gawk/nawk I tend to use Perl for any development that would ordinarily use shell scripts. It's very rare you don't get Perl installed on a Unix or GNU Linux box alongside shell, so I've gravitated towards Perl.


Unix / GNU Linux

I see Unix as just a tool, as I do GNU Linux. It's just the robust OS that I write my Perl, C and Java code on and where I configure Apache. When I used to have my SysAdmin hat on I invariably used Perl as much as possible for maintenance rather than shell. I wouldn't say I'm ever going to be a UNIX guru, more a case of I sort of know my way around UNIX (hopefully). I've used a fair few flavours of Unix, from AIX, through HP/UX, DEC ULTRIX, SunOS, Solaris, BSD and GNU Linux.


Databases

Database wise, I've used everything from dBase in the 1980's through Access and FoxPro to Oracle, MySQL, PostGRES and SQL Server. The use of SQL makes moving between modern Relational databases fairly painless, so I just take databases as they come. The use of the DBI.pm Perl module also makes database use through Perl mostly a straightforward process, and PEAR with PHP and ADO with ASP are similarly relatively painless processes. I tend to use SQL in my main code, with maybe some triggers, or small stored procedures. I tend not to write enormous stored procedures (in the case of Oracle and SQL Server), and through circumstance, have found myself more often than not building simple databases from the command line, rather than through the use of TOAD or phpMySQLAdmin.


Development

I set up an office, which became referred to as "The Batcave" mainly due to the quantity of kit filling it. When working from the Batcave, I used both Sun Workstations running Solaris amd SunOS, Intel machines running Windows and Linux, and an Apple Mac. Nowadays, I just work wherever is comfortable. Generally, I use a mix of different PCs and operating systems, so that I can stay current on them, and in order to test various web applications on as wide a range of browsers and operating systems as possible.

I've been fortunate enough to undertake programming on all the following:


Table 1: Programming and Scripting Language Experience
Language Platform Operating System
PERL SUN SPARC Solaris
SunOS
BSD
Intel x86 & Intel Core GNU Linux
Microsoft Windows
Apple Mac (Intel Core) OSX
DEC Alpha GNU Linux
PHP Intel x86 & Intel Core GNU Linux
Microsoft Windows
XHTML / HTML Intel x86 & Intel Core GNU Linux
Microsoft Windows
JavaScript / DHTML / AJAX Intel x86 & Intel Core GNU Linux
Microsoft Windows
XML Intel x86 & Intel Core GNU Linux
Microsoft Windows
SUN SPARC Solaris
SQL Intel x86 & Intel Core GNU Linux
Microsoft Windows
SUN SPARC Solaris
Java Intel x86 & Intel Core GNU Linux
Microsoft Windows
SUN SPARC Solaris
Apple Mac (Power PC & Intel Core) OS9 & OSX
ASP Intel x86 & Intel Core Microsoft Windows
TCL/Tk Intel x86 & Intel Core GNU Linux
SUN SPARC Solaris
C++ Intel x86 GNU Linux
Microsoft Windows
SUN SPARC Solaris
Apple Mac (Power PC) OS9
C Intel x86 GNU Linux
Microsoft Windows
ARM GNU Linux
SUN SPARC Solaris
Apple Mac (Power PC) OS9
DEC Alpha GNU Linux
PIC Assembler Intel x86 GNU Linux
Microsoft Windows
Microsoft DOS
68000 Assembler Sinclair QL (68008) QDOS
Commodore Amiga (68000)

One day, I may even write a GNU Linux device driver. I just keep getting side tracked with rockets, electronics and just about anything that has electrons flowing through it.