Click for previous comedy photo   Click for next comedy photo
Click to lock or unlock display of photo

Laurence A. Clifton
23270 Indian Town Road
Courtland, VA  23837-2357
(757) 653-2671 (home)
(757) 424-1191, ext.3506 (work)

Software development and support in an environment that values industrious, determined staff who:
create robust and flexible applications,
quickly adapt to changing requirements,
maintain effective, productive communication with system users, project champions and information technology colleagues, and
readily learn and employ unfamiliar technologies.


Software development, maintenance and support with a variety of technologies and platforms.  Work experience includes:

Languages: Java, Java Swing, HTML, JavaScript, VBScript, XML, Visual Basic, SQL, C, Pascal, Unix shell script, VAX Basic, VAX C, VAX DCL, dBASE, FoxPro, COBOL
Platforms: Microsoft Windows NT, Solaris (Unix), HP-UX (Unix), HP MPE, VAX OpenVMS, PC DOS, Novell Netware, OS/2 LAN Manager, Xenix (Unix), IBM 4300 mainframe, Honeywell DPS-6
Databases: PostgreSQL, Microsoft Access, Oracle8i, HP Allbase, VAX RMS, dBase/FoxPro, Sybase SQL Server, Knowledgeware MDBS III, IBM VSAM, Honeywell DMS II
Development Tools: Apache Ant, Visual Studio, Visual InterDev, Data Dynamics ActiveReports (report designer/generator), vi, Easytrieve, IBM DMS/CICS/VS
Analysis/Design: UML Use Cases, UML Class Diagrams, UML Sequence Diagrams, Entity/Relationship Diagrams
Miscellaneous: OO, Client/Server, Web, JBoss, J2EE, EJB, MDB, JMS, JAAS, RMI, Hibernate, jdom, dom4j, jCVS, ASP, IIS, DHTML, MTS/COM+, DCOM (Distributed COM), ActiveX, ADO, RDS (Remote Data Service), InstallShield, Microsoft Office, WordPerfect, WordStarr

In addition, on my own have used or studied C++, Borland C++Builder, Borland JBuilder, PaintShop Pro, Microsoft Windows 2000, .NET, Web Services, and SOAP.

Communication.  Exceptional with both non-technical users and information technology colleagues.  Have worked closely with countless users in collecting requirements, providing individual help with unfamiliar or confusing applications, and training individuals and groups in the use of custom and off-the-shelf software.  Take the perspective of the audience in these interactions, keep an open mind, maintain a sense of humor and avoid technical jargon.  Additionally, have written innumerable analysis, design and user/operation documents.
Requirements collection and analysis.  Have played central role for several projects.  Emphasize achieving a thorough understanding of the business processes and goals an application will serve, rather than exhaustively enumerating requirements.  Express requirements in terms of function, not technical implementation.  Avoid imposing or assuming solutions; defer these decisions until design, and keep an open mind.  Keep users involved throughout development to continually verify that solutions satisfy real requirements.  Recognize that analysis, design, coding and even testing will reveal essential new requirements, and the development process must have the flexibility to accommodate these.  Latest experience employed UML event tables and use cases to document requirements.
Object modeling and implementation.  Completed OO programming and design course since earning master’s degree.  Have applied OO techniques formally since 1999.  In work as project architect, employed UML class diagrams to document the object model.  Have implemented objects with Visual Basic and Java.  In previous work with procedural languages, purposely designed and built library components that mimicked objects by providing complete public interfaces and by hiding implementation details.
Database design and programming.  Using entity/relationship diagrams, have designed new databases for implementation using PostgreSQL, Oracle8I, Sybase SQL Server and Microsoft Access.  Have written hundreds of SQL queries, including many containing complex joins.  Have employed embedded SQL in C, Pascal and FoxPro programs and used ADO extensively to produce SQL query results from Microsoft Access and Oracle8i databases.
User interface design.  Among responsibilities for several projects.  Strive always to design user interfaces that are consistent and intuitive, that prevent errors, that deliver timely feedback in plain language when errors occur, and that allow user to reverse actions easily.  For latest project, used UML sequence diagrams to exhaustively describe the interactions among user, Web interface and middleware classes.
Coding.  Experienced developing and maintaining applications in many different languages.  Organize program logic into compact and focused classes or libraries, and assign each method, function and procedure a name that clearly describes its purpose.  Seek opportunities to build libraries of reusable components in order to decrease the size and improve the reliability of application programs that use the libraries.  Reliably and consistently document each class, library, component, method, function and procedure.  Enthusiastically support coding standrds in organization where these exist.
Adaptability.  Have repeatedly sought opportunities to learn unfamiliar systems, languages, development tools and application architectures, often in situations without the benefit of experienced colleagues.  Most recent required mastering Java, JBoss, J2EE, Java Web Start, PostgreSQL and Apache Ant in an environment in which other staff had no or very limited experience with these.  On every job, welcome the opportunity to learn something new.

Master of Science in computer science, Old Dominion University, 1997
Mathematical Sciences Certificate in computer science, Virginia Commonwealth University, 1991
Associate in Applied Science in business management/data processing, Paul D. Camp Community College, 1987


Senior Software Engineer, 2002 to present
MAP Communications, Chesapeake, Virginia

Designed and developed user interface and J2EE middleware for an n-tier client/server answering service call center application.  Created the user interface with Java and Java Swing, and distributed it with Java Web Start from Apache Tomcat embedded with the JBoss J2EE application server.  Used Remote Method Invocation (RMI) to enable the user interface to invoke the methods of middleware Enterprise Java Beans (EJB) running in the JBoss server.  Developed some EJBs to communicate using XML with remote applications, and developed others to communicate directly with a PostgreSQL database using Hibernate.

Installed and configured JBoss to run on Solaris 8 and 9 servers.  Compiled, built and installed PostgreSQL to run on a Solaris 8 server.  Employed Hibernate to specify the PostgreSQL database schema to persist and retrieve Java objects on behalf of the EJB middleware, and to perform runtime persistence and retrieval.  For all, wrote detailed instructions in HTML to guide other in carrying out these tasks.

The application replaced one that employed text-based terminals each with dedicated connections to the back-end server processes.  To design the new user interface, used simplified UML use cases to document the operation of the existing user interface and to describe the operation of its replacement.  Determined the middleware beans required and their public methods from the use cases.  Defined and documented the XML transactions for exchanging data between the middleware and back-end processes.

Implemented user interface and middleware security using the Java Authentication and Authorization Service (JAAS).  In the middleware, created custom queues using Java Messaging Service (JMS) and message-driven beans (MDB) to pickup and process message objects placed in the queues.  Used jdom and dom4j to create and parse XML documents.  Created an Apache Ant build.xml file to compile the user interface and middleware Java classes, to assemble these into executable JAR files, and to create Web Archive (WAR) and Enterprise Archive (EAR) files (containing JARs) to deploy onto JBoss.

Identified jCVS as a prospective GUI client to interact with the existing CVS repository, and configured it to serve this role for the project.

Early in the life of the project, created a prototype application in which a Web page containing a Java applet communicated with a Web Service, which, in turn, communicated with J2EE middleware.

Programmer, 2002
CrystalView Technology Corporation, Virginia Beach, Virginia

Short-term position performing maintenance and troubleshooting of custom inventory management and scanner software written in Visual Basic, C, C++, FoxPro and MCL-Link.  Also responsible for maintenance and development of InstallShield scripts and projects used to install inventory management and scanner software on individual computer workstations.

Software Engineer, 1999 to 2002
MILCOM Systems Corporation, Virginia Beach, Virginia

Architect and lead developer for project to build a three-tier, client/server, Web application to plan and manage installation of computer networks.  Developed the application to serve users around the world.  The three tiers include the user interface, the middleware servers and the database.

Go to detailed description of the application, including sample Web pages.

For the user interface, developed Web pages with Visual InterDev.  Used JavaScript and VBScript to make the pages highly dynamic.  Employed ASP and XML/XSL to build some pages on the Web server.  However, to minimize page refreshing and make the user interface work more like a Windows GUI, employed RDS (Remote Data Service, a light-weight version of ADO) and DCOM to enable pages to communicate directly from the client side to middleware servers.  Most communication retrieves ADO recordsets containing lists or data records, or sends recordsets containing data changes to save in the database.

The middleware servers apply business logic, retrieve data from the database to pass to the user interface, and receive data from the user interface to save in the database.  Developed the object-oriented middleware servers in Visual Basic to run under Microsoft Transaction Server (MTS/COM+) on a Windows NT server.  The middleware uses ADO to pass SQL queries and updates to the database.  The middleware includes servers to produce reports in Adobe Acrobat format; used Data Dynamics ActiveReports to design and generate these report servers.

Oracle8i running on a Sun Solaris server is the application’s implementation database.  Also created a working Microsoft Access prototype.

As architect, used UML event tables and use cases to document the requirements.  To design and document the object-oriented middleware classes, employed UML class diagrams.  UML sequence diagrams served to document the operation of the user interface and the interactions among the interface, middleware servers and database.  Also, designed the database and established a single error-handling model for use across the entire application, from Web page to database server.

As lead developer, identified the combination of technologies best suited to satisfy the project’s requirements, and then built prototype Web pages, middleware servers and database tables to demonstrate and prove the technologies.  Developed all middleware servers.  Took on all user interface development when the Web page programmer resigned to take a job closer to home following the birth of a child.

Consultant, 1998 to 1999
Ajilon Services, Richmond, Virginia

Member of team providing 7-day, 24-hour operational support for Circuit City Stores customer information system.  Support included developing C programs with embedded SQL to repair database corruption, troubleshooting malfunctioning C and Pascal programs and Unix shell scripts, developing and reviewing program development designs and test plans, and documenting system operation and problem-solving procedures.  Data resided in multiple HP Allbase relational databases.  Applications ran on HP-9000 using HP-UX (Unix) operating system and HP-3000 using HP MPE.

Though not team leader, personally spearheaded effort to drive the count of customer information system open problem reports from nearly 1,000 down to zero.  Discovered methods for fixing complex database corruption problems (caused by misbehaved update programs) that previously had been categorized as unrepairable, and documented these fixes in step-by-step detail for use by others, including, by front-line, non-programmer support staff.

Software Engineer, 1994 to 1998
Harris Publishing, Norfolk, Virginia

Architect and technical lead of project to detach the company’s legacy software from an obsolete call center management system and integrate the software with a modern system.  The company’s call centers produced 98% of its revenue, so these systems were critical to its success.

Responsibilities included working with business analyst to collect and organize requirements; determining the changes required to meet the requirements; making development time estimates; designing and documenting new programs and program changes, and guiding other staff in preparing similar documents; writing new application programs, modifying existing programs, and assisting other developers with their new programs and changes; and performing unit and integration testing.

Both the legacy software and the obsolete call center management system resided on a VAX OpenVMS platform, and in more than ten years of inadequately-controlled development had become highly entangled.  As architect, identified and documented all the interactions and dependencies between legacy software and obsolete system, and determined changes required to uncouple these and to accommodate new system.

Most of the legacy software was written in VAX Basic and VAX DCL (Digital Command Language).  As technical lead, chose C as the primary development language in order to give new programs a chance of portability.  To further support this, developed libraries in C to provide reusable functions and to hide details of VAX system and VAX RMS calls from application programs.

Also as technical lead, designed and implemented many new data tables.  Normalized these in order to facilitate their later use in a database, even though the platform required their implementation as VAX RMS files.  Added new tables to support system configuration previously handled by code.  For example, adding a call center previously had required a six-week project to insert and test a host of hard-coded references.  A new call center table reduced this to a five-minute operation.

DAVOX Unison running on a Sun Microsystems Solaris (Sun’s Unix) platform was the new call center management system.  DAVOX customized the product for Harris.  In particular, it developed scripts to mimic the functionality provided by those in use with the obsolete system.  These supplied the screens and control logic for both the inbound and outbound telemarketing applications.  DAVOX planned to reverse-engineer the obsolete scripts.  Worked closely with DAVOX to help them with this task.  Knowing the complexity of the old scripts, prepared documents which identified and described all the screens, their sequence, their purposes, the conditions for their display, and many other details.  Eventually traveled to DAVOX headquarters near Boston, Massachusetts, to work side-by-side with their programmers in order to complete the development.

Prior to this project, participated as a developer or as a leader in numerous small projects to make improvements to the legacy software.  Also provided 7-day, 24-hour support for inbound and outbound call centers located in Tennessee, Texas and Virginia.  For more than a year, served as the company’s lone support expert for these systems.  Carried a pager continuously in this role.

Programmer/Analyst, 1991 to 1994
Metro Information Services, Virginia Beach, Virginia

(since acquired by Keane, Inc., 2001)

Designed and developed multi-user FoxPro applications and database tables to manage the company’s billable hours entry, billable hours invoicing, and human resource information.  Since the company supplied information technology consulting services, these were core applications for managing its operations.

The coding of these applications stretched FoxPro to its limits.  Billable hours entry automatically displayed the current projects of the selected staff member in a spreadsheet-like interface that allowed entering all hours by day for each project for an entire week.  The interface dynamically showed daily, project and grand totals as the user entered the data.  This required hand-coding the logic to generate pages on the fly and handle field-level events before these techniques came into common use.

Introduced structured programming to the company's FoxPro development.  A year or so earlier, dBASE and FoxPro finally had implemented the capability to define multiple procedures within program files.  Metro continued to use the old dBASE/FoxPro paradigm of creating programs consisting of a single, very large main procedure and no subprocedures.  In addition, to provide a rich source of reusable code, introduced and built a huge library of common procedures for use with all company FoxPro applications.

The applications and database tables resided on a Novell Netware file server.  The applications ran on MS-DOS PCs.  The programs used embedded SQL to query the database.  Remote users employed PCAnywhere to access the applications.

Systems Analyst, 1989 to 1991
Christian Children's Fund, Richmond, Virginia

Led an 18-month project to redesign and rewrite the core application of the organization’s European affiliates in order to migrate it from an obsolete HP minicomputer to an OS/2 LAN Manager platform.  The affiliates used the application to manage child sponsorship contributions, their primary activity.  It included capabilities to match sponsors with specific children, track the status of monthly contributions, and automatically debit contributions from sponsors’ bank accounts.

Nine of the 18 months had elapsed under another leader with no requirements, analysis or design completed, only a trip to Germany to gather documents and see the obsolete system first hand.  To determine the functionality required, started by reverse-engineering the existing application from two unorganized file cabinet drawers of screen prints, sample reports, data file layouts and Pascal source code documented in German.  Then refined and enhanced the requirements through an exchange of written correspondence by mail with the primary user in Germany.

After completing the requirements, guided the development of a GUI prototype to demonstrate the new application’s look and narrated a videotaped demonstration of the prototype for review by the German affiliate.  Created and documented the design of all interactive and batch functions.  From the old application’s collection of indexed flat files, designed a relational database for implementation with Sybase SQL Server.  Also designed in great detail the program to populate the database with the data from the flat files.

Supervised the work of the consulting firm developers who programmed the application in C for a Windows 3.0 user interface and who implemented the database.  Because of the looming deadline, development started before the requirements were complete.  Thus, circumstances forced engaging concurrently in requirements gathering and analysis, program and database design, and supervision of the developers.

Prior to this project, developed training materials and course in WordStar, the organization’s chosen word processing software, and presented the course to dozens of headquarters staff.

Programmer/Analyst, 1988 to 1989
Computer Data Systems, Inc., Petersburg, Virginia

(since acquired by Affiliated Computer Services, Inc., 1997)

Completed the development of an on-line, remote-access military logistics library using C development language, Xenix (Intel’s Unix) operating system, vi editor, and Knowledgeware MDBS III hierarchical database.  Had no training or experience with any of these technologies.  Hired on the strength of prior performance with the company.  Working alone, finished all the previously scheduled work on time, designed and added many new features and functions, and fixed many errors and performance bottlenecks left by the experienced C programmers who had started the application, all within the project’s original deadline.

Programmer/Analyst, 1986 to 1988
Abacus Technical Services, Virginia Beach, Virginia

(since acquired by Randstad North America)

Worked as a jack of all trades for this start-up, five-person division of Abacus Services, providing computer hardware and software services to a host of small clients.  Installed and configured the hardware and operating systems for Novell Netware local area networks.  Worked as troubleshooter for malfunctioning networks, PCs, printers and software.  Developed project proposals and specifications for new application development.  Developed dBASE applications for the City of Norfolk, Yorktown Victory Center, Wareing’s Gym, Virginia Chemicals Corporation, Abacus Services and others.  Supervised two programmers in development of dBASE applications.

Assigned concurrently to work on-site at Virginia Chemicals Corporation, developing, maintaining and troubleshooting COBOL and Easytrieve programs, and DOS/VSE job control language running on an IBM 4300 mainframe.

Programmer/Analyst, 1986
Computer Data Systems, Inc., Petersburg, Virginia

(since acquired by Affiliated Computer Services, Inc., 1997)

Project leader for the development of an on-line Army information application to run on an IBM 4331 mainframe.  Had no previous experience with the platform, the DMS/CICS/VS development utility, or the VSAM file system.  Learned these on the job.  Revised the existing functional specifications.  Defined the VSAM data files.  Developed the screens and logic for the on-line data maintenance.  Supervised one programmer in writing batch report, file backup and file restore programs in COBOL.  Wrote the user/operation manual.

With project on schedule and its product working well, was assigned concurrently as leader and developer for a failing companion project.  Completed it and original project on schedule.

Programmer/Analyst, 1985 to 1986
Computer Data Systems, Inc., Norfolk, Virginia

(since acquired by Affiliated Computer Services, Inc., 1997)

As a member of a team of about 25 contract staff, wrote interactive and batch COBOL programs for a Navy information application residing on a Honeywell DPS-6 minicomputer.  The programs included logic to access, navigate and update a DMS-II network database.  In spite of a formal computer education consisting of just two programming courses, after three months earned promotion to leader of a small team and to analyst preparing program specifications for other developers.  Offered new assignment when project ended; most staff laid off.


Available to work in the following locations:
Richmond, Virginia, including Chester, Colonial Heights, Glen Allen and Petersburg
Hampton Roads, Virginia, including Chesapeake, Hampton, Newport News, Norfolk, Suffolk, Virginia Beach and Williamsburg
Southside, Virginia, including Courtland, Emporia and Franklin


In developing this on-line résumé, I had the following goals in mind:

Make it dynamic.  I aimed to produce a site that would use the event-handling capabilities of HTML and JavaScript to navigate the sections of my résumé.  To implement my notion, I could have put each section in a separate, static HTML page, especially if I wrapped these pages in a navigation frame.

However, that would have been easy, and one purpose was to challenge my Web DHTML development skills.  Therefore, I chose to let a single page contain all the sections, and then dynamically hide and show these in response to the user's actions.  Each major browser requires different structures and operations for doing this, and the structure and code of my single page accommodate these.

To gild the lily, I added a gallery of comedy photos (below my name near the top of the page).  Click on the lock control    to display (lock) or hide (unlock) the photos.  Click on the forward browse    or backward browse    control to display the next or previous photo, and to set the default browse direction.  Clicking directly on the photo browses in the default direction.

Maximize the use of Cascading Style Sheets (CSS) to specify the presentation style, and, conversely, minimize definition of style details within the HTML.  Of course, coding for multiple browsers limits the use of CSS.  Each provides a unique set of style properties.  Even so, I strived to push CSS to its limit.

Make the JavaScript code 100% object-oriented.  I added properties and methods to some existing HTML/JavaScript DOM objects, and created a few others.  I organized these into a hierarchy with a Résumé object at the top.  Other than references to my own Browser object properties to identify the browser in use, all methods use only properties and methods that belong to the invoking object (that is, "this").  (If you're not acquainted with "this", ask an OO programmer.)  Instances of object method calls include use of polymorphism.

If you take a peek at the source code of the page, you'll see that it contains only two JavaScript routines, assignLinkNames() and windowOnload().  The page invokes the windowOnLoad() routine when it loads.  It's very simple.  The first statement calls the Browser object constructor, which determines the browser in use and defines its properties and methods.

Next it calls assignLinkNames(), which associates selected link objects with their ids and names for the benefit of Netscape Navigator 4.  Navigator 4 does not recognize these properties when assigned for links (the <a> tag) in HTML.

The routine then uses the Browser object's isCompatible property.  If the browser in use is not compatible, the load routine invokes the Browser method that displays a warning message.  On the other hand, if a compatible browser is in use, the routine calls the Résumé object constructor.  It creates the Résumé object and its component objects.  Therefore, one statement in the load routine sets up the objects and methods which make the page dynamic.  Once created, the routine invokes the Résumé object's show method.  If not invoked, none of the control buttons gets activated.

After creating the Résumé object, the load routine creates and shows the Amusement object.  This object displays the gallery of comedy photos.

View or save my object-oriented JavaScript source code.  This code contains the Résumé object contructor and the constructors for the objects it contains.  With Mozilla and Navigator 6, I have found that both viewing and saving work.  With Navigator 4 and Internet Explorer, I have found that saving works but viewing doesn't.  To view, point mouse at link, right click to display context menu, and choose "Open" or "Open in New Window".  To save, display context menu and choose "Save Link As..." or "Save Target As..."); save it to a file on your system; to view, open saved file in a text editor; for example, Notepad.

Preserve state between visits.  If you have set your browser to accept cookies, the two dynamic components on the page save their states and will restore themselves when you visit again.

The résumé saves the last section you select.  When you return, it automatically displays that section.

The gallery of comedy photos saves the last photo you select.  It also saves the states of the forward/backward browse controls and the lock control.  This gallery appears on my home and résumé pages.  Because both galleries use the same state values, the photo you choose on one page automatically appears when you visit the other.

Make it compatible with the major browsers, Netscape Navigator 4, Netscape Navigator 6 and 7, Mozilla, and Microsoft Internet Explorer 4, 5 and 6.  Turned out to be the greatest challenge.  All use a different DOM (document object model).  Also, I found that Navigator 6 produces inexplicable results with some small changes to the HTML.  Nevertheless, I was able to create a single page, a single JavaScript library and a single CSS that work pretty well with each browser.

Please note that I tested the page with Navigator 4.79, Navigator 6.2, Mozilla 1.5 and Internet Explorer 6.0, so it is entirely possible that I have not accommodated idiosyncracies of earlier versions.  Do not expect the page to work correctly with Navigator 3 or Internet Explorer 3.

Last modified:  August 15, 2004.