In my career I've used a wide variety of technologies. Here's s summary of what I've done with what.

Unix I was first exposed to Unix in college. It was the first O/S I became familiar with extensively. For two of my years in college I was a system administrator for the departments computers. Since then I've dealt with it increasingly in my professional environment.

At home we have a network distributing internet access between the rooms of my house. This is coordinated via the house server which runs Red Hat Linux. This provides e-mail access to all my roommates, centralized storage for our MP3, the house web page, several web sites for roommates, and a repository of pictures for us to share with our friends.

Java I have been deep into Java since it was introduced. I've used almost every package in it either professionally, or in a home project. Working on the Domino Translation Object crossed many programming boundaries. Seeing Java, BASIC, C and C++ interact closely together allowed me to compare them. The Java part of the code base had noticeably fewer bugs. It also ported across several operating systems without a single platform related bug. Java is now my language of choice.

c I was first exposed to the C programming language in college. The Maths Department in Trinity College Dublin was the first department in the country to teach C in its classes. By second year I was one of the student teachers for the course!

c++ C++ is more than a simple extension of C. Mostly the two are synonymous these days, but people forget that when they came out there was quite a difference between C and C++. C++ brings with it the concept of Object Orientated Programming. In a nutshell this is the idea of associating programmability with data objects. The first C++ project I did was porting a large C library I made as a home project to C++. As I did it I noticed that most of library routines were directly related to C structures, and those structures were usually the first argument to each function. In essence I had already been using OOP even before it existed!

TeX TeX is a typesetting system invented by Donald E. Knuth and is especially good for typesetting complicated mathematical formulas. I used it extensively in college and was paid by professors in the department to typeset their publications with it. Today it has been largely superseded by WYSIWYG word processors. There are still a large number of TeX based documents out there and it is still the best for typesetting complicated mathematical formulas. An old professor of mine, Tim Murphy, has produced a Java version of TeX. Someday I hope to convert this into a Eclipse plug-in.

MetaFont MetaFont is a companion product of TeX. It is used to create fonts. I've created a number of fonts with MetaFont from fantasy to academic. My Akkadian font was used in a paper on such things by Karel Píška. Someday I hope to convert this into a Eclipse plug-in.

MsTest When I was hired into Lotus to do work on Automation Tools the first automation tool I used was MsTest. In 1996 they morphed it into Visual Studio, then sold it to Rational, which IBM has now bought. But I still rather liked the 3.0 version of it. It was small, fit on three floppy disks, and had a really, really, good editor. I still move it around with me to almost every computer I used and write the occasional process automation script in it. Until I discovered Eclipse it was my editor of choice for Java. Someday I'd like to get the code base from Rational (since we own them now!) and recompile it to support long file names!

Notes Notes is Lotus's amazing groupware product. They pretty much invented Groupware and this is the product that made it. I used it extensively at work and at home. This web page is put together through a Notes application I wrote. My roommate manages lists for names for her name site through an application I dashed off for her. It still gives me a little thrill to browse onto various sites and realize they are backed by Notes databases.

LotusScript I first used LotusScript as an alternative to MsTest for writing automation scripts. This required getting deep down and dirty, learning the APIs and how it all worked. Later this was beneficial when I wrote the DTO, since one way the API was surfaced was as a LotusScript object. It has been a further advantage the few times I've had to deal with Visual Basic and Visual Basic within Microsoft Office. They were sufficiently similar in enough ways that I was able to quickly come up to speed in what I needed.

J2EE J2EE is "Java-2 Enterprise Enabled". The name is mostly Sun-hype. The concept, though, is an excellent one. A J2EE application is written all in Java, or Java technologies, so it can run on any platform. Additionally it encompasses a packaging and distribution methodology. This is great because it means I can take my complex application, containing many sub-elements, and package it all up on one file. I place it on my server and, volia, it installs itself and works! This has revolutionized how I do things and I completely embrace it.

JSP Java Server Pages are kind of like HTML on steroids. Almost any web application wants to have dynamic HTML that conforms to the state of the program as it runs. One option is to use JavaScript embedded in your HTML. The big drawback is that it's quite complicated. Another option is to populate your HTML with numerous Java applets. This would be cool except that Microsoft has played their abusive monopoly card and fragmented support for Java. It's very hard to deploy a Java applet that is guaranteed to run. JSP gives you all the benefits of Java, but executes them on the server side. What comes down to the client is pure HTML. So you have none of the worries about what the client does or does not support!

Struts A fad was started that had to do with "Design Patterns" for computer program development. This involved attaching cute, descriptive phrases to objects that tended to behave the same way from program to program. When I checked the patterns against my own code I found I kind of did things that way anyway, and gained no real benefit from it. However the one design pattern that has really hit home with lots of programmers is "MVC" or Model-View-Controller.

The idea is that you keep the code to represent your data (Model) completely separate from the code that represents your User Interface (View) and both of those separate from the code that actually does the business logic (Controller). This is very handy in case you want to change, for example, how you product looks. Most of my home projects have a Web interface and I have a View for them composed of JSPs. But for some I also want a richer interface, and have created a Java UI. However, for both of these I can reuse the Controller and Model layers.

Struts is a formalized way of doing this for J2EE applications. I've found it very handy and all my home projects now use this.

Tiles Tiles are a way of structuralizing the UI of J2EE applications. Most formatting aids allow you to give common formats to the elements you have in a page, but not give you structures for dealing with the page as a whole. Tiles is the first things I've seen that lets you do that. (Except for the Notes App I wrote to organize this web page!)

Eclipse One of the big advantages that Microsoft has had for years has been that developers are very keen on its development environment. Their logic is that if they can win the hearts of the developers, they can get more products developed for their platforms. Eclipse is an open source generic development environment. Anyone can write a plug in for it that lets you develop whatever you like under it. So tool vendors can concentrate on the tools rather than the environment. For example IBM's Webshpere Application Studio Developer is based on Eclipse with a bunch of value-added plug-ins.

I've never been a big fan of development environments. Simple text editors and command line compilers are usually enough for me. Prints are the best debuggers. However, Eclipse has sucked me in. It really is very good. My productivity is substantially increased under this environment. I can't run it on my portable and when I'm stuck using that for development, I really notice!

Portals When the web became popular a wave swept over the computer industry. People moved away from writing stand-alone client applications and started writing server based applications viewed through a web browser. (Although one should say that server side computing isn't new. Before the PC this was how everything worked! They just didn't have the graphically sophisticated web client to view it with.) This was a fundamental revolution but one that left companies with problems of interoperability. Different looks and feels lead to more costly training and support. Each time you did anything you had to reinvent the wheel.

A portal server is a sort of über web application. It provides all the framework for doing most of the heavy lifting. A web application just has to worry about rendering its core content in a little "portlet". Even better each individual user can arrange these portlets in a manner that best suits their working needs. (Or the company can set up standard desktops for different classes of users.) If you have used My Yahoo! you've already used a portal server!

HTTP/HTML HTML, Hyper-text Markup Language, has been described as "the language of the web". This is because the bulk of web content out there (presently) is in this format. It's really a pretty simple format for annotating text documents to describe how they should be formatted. For someone familiar with TeX, it's not rocket science. {\b bold} in TeX is <b>bold</b>.

However what wires all these things together is HTTP, Hyper-text Transfer Protocol. It defines a means by which the client side (usually the browser) can go "hey I want something", and the server side can sent it back what it asked for. This is usually a HTML document, but it doesn't have to be. It can be an image or something more abstract. HTTP has become so popular they are beginning to use it for remote function calls. In this case the cient is a program and the arguments for the function call are encoded into the "hey I want something" request. Then answer, then, contains the encoded return value of the funciton call. How flexible is that?

WAP/WML WAP is "Wireless Access Protocol" and WML is "Wireless Markup Language". With the bursting popularity of cellphones, digital pages, and wireless PDA's industry felt they had to extend the web to work on these devices. Unfortunately their brains were rather small and they couldn't deal with cumbersome HTTP and HTML. So WAP and WML were invented as slimmed down versions. Time has marched on, though, and their brains aren't as small as they used to be. It has turned out that making these little machines smart enough to read HTML was easier than making every HTML page out there available in WML.