Frederick P. Stluka

Bristle Software, Inc.
1011 West King Road
Malvern, Pennsylvania 19355-2004

http://bristle.com
fred@bristle.com

http://bristle.com/~fred

SKILLS

Systems Windows (XP, 2000, NT, Me, 98, 95, 3.1), Linux, Mac OS X, Unix (Sun Solaris, Apollo, BSD, BSDI), X Window System, OS/2, DOS, VAX/VMS, IBM VM/CMS
Programming Languages Java, JavaScript, Visual Basic, C++, Perl, Unix shells, Ada, REXX, C, Pascal, Fortran, assemblers
Web Languages/ Protocols Ajax, JavaScript, JScript, VBScript, HTML, DHTML, CSS, XML (DTD, DOM, SAX), XSL, XSLT, XPath, CGI, RSS, Atom, SMTP, FTP, HTTPS, DNS, WSDL, SOAP, REST
Web Frameworks Java servlets, JavaServer Pages (JSP), JavaServer Faces (JSF), Apache Jakarta Struts, Apache Jakarta Velocity, Microsoft Active Server Pages (ASP)
App Servers Apache Tomcat 5/4/3, BEA WebLogic 8.1
Web Servers Apache HTTP Server 1.3, Sun/Netscape iPlanet 6/4.1, Netscape Enterprise Server (NES) 3.62, Microsoft Internet Information Server (IIS) 5/4
Web Components Apache Xerces XML Parser 1.3/1.2/1.1, Apache Xalan XSLT/XPath Processor 2.0, MSXML.DLL XML Parser 1.4/1.3/1.2, Winsock OCX 6.0
Databases,  Data Access MySQL 5/4/3, Oracle 9i/8i/8.0/7.3, Microsoft SQL Server 2000/7.0/6.5, Interbase, Access, ADO, RDO, DAO, ODBC, JDBC, Perl DBI, SQL Navigator, DBVisualizer 4.2.2, TOAD 7.5, SQL*Plus
Component Technologies J2EE, Microsoft OLE, COM, DLLs, ActiveX Controls (OCX, VBX)
Developer Tools Cygwin 1.5, Apache Ant 1.6, Eclipse 3.3/3.1, JetBrains IntelliJ IDEA 4.5, Borland JBuilder 9, Oracle JDeveloper 2.0, JUnit 3.8.1, Apache log4j, Microsoft Visual Studio 6.0, FrontPage 2000/98, PuTTY, WinRAR, WinSCP, RoboForm
Unix perl, yacc, lex, make, cvs, rcs, sccs, awk, emacs, vi, sed, csh, sh, tcsh, bash, ant, cron, mail, pine, telnet, rsh, ssh, ftp, iptables
Java Sun Java 5/1.4.2/1.3.1/1.2/1.1/1.0, JDBC, Servlets, JSP, Javamail, J2EE, WebApps, EJB, JMS, JSF, Web Services, Applets, AWT, Swing, Microsoft Visual J++ 6.0/1.1
VB Visual Basic 6/5/4/3/2, VBA, VBScript, Visual Modeler
C++ Microsoft, Borland, Zortech, gcc
S/W Mgmt Concurrent Versions System (CVS), WinCVS, Microsoft Visual SourceSafe (VSS), NMake, Systems Management Server (SMS), Intersolv PVCS Version Manager, Configuration Builder, Tracker, Mercury Test Director, Seagate WinInstall, Unix cvs, rcs and sccs, VAX CMS
Debugging Eclipse, JPDA, Firebug, Microsoft Script Debugger, XML Spy, PC-lint, SpyWorks, Spy++, PView, PSpy, OLEView, NT Event Viewer
GUI Components Microsoft WebBrowser OCX, DHTMLEdit (TriEdit) OCX, FarPoint Spread/OCX, TabPro OCX, Sheridan Data Widgets
Office OpenOffice 3.0, Microsoft Office 2003/2000/97/6.0/2.0 (Word, Powerpoint, Excel, Outlook), Visio, MediaWiki, Lotus Notes 4.5/4.0/3.2, Mozilla Thunderbird, Netscape Messenger, cc:Mail

STRENGTHS

Teamwork, initiative, ability to learn and teach, customer and quality focus, effectiveness, broad range of experience.  My greatest thrill is to learn a new technology, teach it to others, and use it to quickly develop reliable software that makes its users more productive. While performing assigned tasks, I also make significant unsolicited contributions to the team. On my own initiative, I have developed many tools that have gained company-wide acceptance: automated regression test tools, text editors, network file transfers, configuration management tools, e-mail programs, XSL debuggers, and reusable software parts.  Finally, I have received numerous awards for teamwork, consistently "ironing out the rough spots" to keep the team working smoothly.

EXPERIENCE

1996-Present   Bristle Software, Malvern, Pennsylvania

2007-Present:  For a small software company, designed and wrote a Web application for sale to large regulated corporations (pharmaceutical, cosmetics, auto parts, medical devices, fertilizers, etc.) to taglessly track products for detection of counterfeits and distribution chain violations:

  • Architected (see diagram), designed, implemented, tested, documented, and demoed the Web app, using MySQL, Tomcat, Java, JDBC, JavaScript, Ajax, DHTML, CSS, and XML.
  • Installed, configured and hosted the Tomcat app servers and MySQL DB servers on Linux and Windows.
  • Features:
    • "Filthy rich" client interface:  liquid interface with draggable self-calibrating dynamically constrained sliders, screen updates via JavaScript at each keystroke and mouse move, etc. but requiring no client install.
    • Multi-window master-detail drill-down user interface, running in any browser.
    • Data validation and access control performed at all levels (UI, App server, DB), but only specified once.
    • Portable across all operating systems, DB servers, App servers, and browsers.
    • Ajax transactions used for global validations, keep-alives, etc.
    • Full audit trail in a parallel set of DB tables.
    • Fine-grained, attribute-based, hierarchical, cached access control allows owner users to grant and deny other users the rights to view, update, delete, and own objects.
    • Comprehensive multi-level hierarchical logging of all user actions and internal operations with automatic begin/end matching, durations, indented layout for visual scan by a person as well as timestamps, memory size, thread id, IP address, username, browser name, etc. for use by log analysis tools.
    • Entirely data-driven: constraints, rules, units, access rights, etc.
    • Robust file upload and download w/access control, configurable limits on file type and size, dynamic image scaling, etc.
    • Custom connection pooling, monitoring, managing, and self-healing.
    • Admin tools for adding users, specifying initial access control rights, etc.
    • Self-reloading XML config file specifies all limits, delays, timeouts, levels, scale factors, connection info, locations, etc., so no server restart is ever needed.
  • Comment posted by client to my LinkedIn page:
    "Fred has done amazing work, far beyond merely turning our ideas into software.  He thinks about the whole problem, its context, its implications, and its future, and builds for the long term.  He meticulously documents the options overruled, and why, as well as the path taken, so nobody wastes time revisiting settled issues.  It's a pleasure working with him.  When I first hired Fred, his references were highly enthusiastic, and now I understand why:  his work is so polished, it's as if we got 2.0 instead of 1.0."

2005-2006:  For an on-line bank, supported and enhanced Web applications, Web services, and underlying architectural components, using Oracle 9i, WebLogic, Apache HTTP Server, JSP, Struts, EJB, JMS, log4j, JUnit.

  • Enhanced login to use "Multi-Factor Authentication" images and phrases obtained via SOAP calls to the Passmark Web Service.
  • Converted Web site from HTTP to HTTPS.
  • Implemented various new features and bug fixes.
  • Created Wiki for use by developers containing:
    • Comprehensive installation/setup/configuration guide for development environment.
    • How-to guide for implementing new features, debugging problems, searching logs, etc.

2004-2005:  For a small dot-com company, helped develop a JavaServer Faces (JSF) engine and set of components.  Specific contributions included:

  • JSF Engine Development
    • Developed several pieces of the JSF engine, including bean discovery, value bindings, method bindings, component bindings, and event generation. 
    • Re-wrote several pieces to make them compliant with the emerging JSF standard.  
    • Re-factored the Java class tree for improved code sharing and manageable modules.
  • JSF Component Development
    • Developed Integer and Date JSF components to support user entry of integer and date (month/day/year) values with internationalization.  Wrote the Java classes for the components, tags, and renderers.  Also wrote the JavaScript code to do client-side validation in all major browsers (IE, Netscape, Mozilla Firefox, Opera, etc.) 
  • Demos, Documentation, Training
    • Developed demos and user/programmer guides for use at the product Web site.  
    • Taught team members advanced Java topics, like thread synchronization.
    • Taught team members how to use JetBrains IntelliJ IDEA, Microsoft Script Debugger, CVS, and other development tools.
  • Configuration Management
    • Introduced the team and the company owner to the concept of version control.
    • Installed and administered CVS.  
    • Used Ant to automate builds, regression tests, and releases as JAR, WAR, and EAR files.
  • Unix System Admin
    • Configured Unix firewall to safely support remote access by off-shore developers.  
    • Automated backups via cron and tar.  Debugged and resolved network hardware issues.

1999-2004:  For a large multi-national pharmaceuticals company, developed a 3-tier Web application architecture (see diagram):

  • Presentation Tier
    The presentation tier consists of DHTML, XSL, CSS, and JavaScript.  All files are downloaded from the Tomcat web server, and displayed and executed by the IE Web browser.  They use the MSXML component to implement Ajax-style loading, sorting and filtering of XML, and generation of HTML via XSLT transformations.
  • Business Tier
    The business tier consists of Java components.  Access from the presentation tier is via Java servlets implementing REST Web Services.  Access to the data tier is via JDBC using a shared pool of connections.  The Xerces XML parser and Xalan XSLT/XPath processor format XML to send to the presentation tier.
  • Data Tier
    The data tier consists of an Oracle 9i database.  All data is retrieved via database views and updated via PL/SQL stored procedures.  Foreign keys provide referential integrity, with triggers maintaining audit tables and additional referential integrity.  Packages add structure to the stored procedures.

The client estimates savings of 15 million dollars per year, increasing each year as it uses the application to manage more clinical trials.

Previously for the same client, prototyped the following, demonstrating successful integration across tiers using each combination:

  • Alternative Technologies for Presentation Tier:
    • Java applets running in a web browser, using Xerces to manipulate XML and generate HTML.
    • Visual Basic, using MSXML to manipulate XML.
  • Alternative Technology for Business Tier:
    • Perl CGI scripts using DBI to access the database.

Previously for the same client, developed Web and database applications (which I later ported to the architecture above) including:

  • Inventory Tracking
    Enhanced an existing application using VB, RDO, and Oracle 7.3 to track the inventory and distribution of drugs used in clinical trials.  Defined tables and views, and wrote stored procedures and triggers.  Wrote VB code using RDO to access the database and call stored procedures.  Optimized performance to maintain good response time despite a heavily loaded database server across the ocean.
  • Web Reporting
    Designed and coded a Web-based reporting system.  HTML pages are generated by Perl 5 using DBI to access an Oracle 7.3 database.  The user interacts with the pages specifying selection and sort criteria for the reports, views reports as HTML tables, and downloads them as comma-separated (CSV) files.  All interaction is funneled through a common Perl script to log interactions and dispatch specific requests to secondary Perl scripts.

Previously for the same client, developed a Generalized Database Front End.  Designed and coded a VB application to access Oracle 8 and Oracle 7.3 databases.  The application presents the user with a list of available plugins (stored procedures and SQL*Plus scripts), executes the selected plugin with the specified parameters, and displays the results to the user.  The application is structured as 3 layers of cooperating components:

  • Database Layer
    Oracle packages provide a stored procedure API for running plugins, scheduling runs to occur in the future, viewing the output of previous runs, etc.
  • Business Object Layer 
    COM components encapsulate all knowledge of plugins, runs, etc, including all database access (via the database layer), validation, execution, etc.
  • User Interface Layer (see diagram)
    ActiveX Controls (OCXs) encapsulate all user interaction, including data access (via the business object layer), presentation, undo, dirty flag, etc.  These OCXs can be embedded in a variety of host environments, including Visual Basic, Excel, Word, or Internet Explorer, displaying their output in VB controls, Excel spreadsheets and charts, Word documents, or HTML.

1996-Present:  Webmaster and Linux System Admin for the Bristle Software Web site (http://bristle.com).

  • Installed and administer the Linux server running Apache Web server, Tomcat, SMTP, DNS, etc.
  • Author the Web pages to house my collection of thousands of tips and techniques on topics including Java, XML, Windows, Unix, VB, ASP, C++, SQL, X, Perl, HTML, Lotus Notes, and VAX/VMS.
  • Maintain a mailing list for each topic and mail the tips to subscribers as I add them to the Web pages.
  • Wrote my own mailer to do the list mailings, most recently in Javamail, previously in VB directly using the SMTP protocol.
  • Currently, re-writing tips pages in XHTML and processing them with XSLT transforms to generate RSS and Atom feeds.

1996-Present:  Developing and supporting open source Java  and JavaScript libraries, including:

  • Applications:  Image scaler, URL downloader
  • Web Applications:  Slideshow, MemoryMeter, ConnectionMeter, Clock, ServletDebugger
  • Packages/Subsystems:  Logging, Database connection pooling, Attributed-based access control, File and directory operations, Command line parsing, JPEG manipulation, JSP helpers, Data dictionary, Multi-tier metadata and validation, etc.
  • Classes:  FTP, HTTP, HTML, SQL, XML, XSL, JDBC, Enhanced Java data types (strings, exceptions, maps, arrays, lists), etc.

Docs:  http://bristle.com/opensource/javalib/docs/api/public/
Source code:  http://bristle.com/opensource/


1999-2000:  Developed and taught an advanced VB 6.0 ActiveX Component Development class for corporate clients.  Covered all aspects of component development with VB, including:  designing and building ActiveX DLLs, EXEs and OCXs, data access via ADO, debugging techniques, enterprise-scale support and scaleability considerations, etc.


1999-Present:  Tutoring professional programmers in Java, XML, VB, ASP, Unix and Windows.


1999:  Prototyped a component application architecture.  The Java components can be configured in a variety of ways, including:

    N-tier Web application Client is DHTML driven by JavaScript running in a Web Browser.  Web pages are generated by ASP using VBScript on the IIS Server.  ASP pages exchange data via XML with application objects written in Java.  Application objects communicate with a MS SQL Server 7.0 database via ADO 2.0.
    J++ WFC Client/Server application Client is a J++ WFC application, which communicates with the same Java application objects, and through them to the database.
    Java AWT Client/Server application Client is a Java AWT application, which communicates with the same Java application objects, and through them to the database.
    Java Swing Client/Server application Client is a Java Swing application, which communicates with the same Java application objects, and through them to the database.

1998-1999:  For a small medical technology watchdog company, developed database applications and portions of a government sponsored, database driven Web site containing information about medical devices and procedures.  Specific contributions included:

  • Database (SQL Server 6.5 and 7.0)
    Administered the databases and database server, defining tables, views, users, logins, etc, and writing stored procedures and triggers.  Ported the databases from SQL Server 6.5 to 7.0.
  • Data Entry Programs (VB 6.0)
    Enhanced an existing Visual Basic ADO data entry program.  Re-architected from a "fat client" (the user interface code was intermixed with the database access code) to an object-oriented 3-tier application with thin client, application objects and database layer.  Added the ability to add and delete database records (the previous version only supported update of existing records).  Converted the internal HTML editor from a text-based editor (the user was required to type in the HTML tags as text) to a WYSIWYG editor similar to Microsoft Front Page or Word (the user can directly edit the rendered HTML).
  • Web Site (IIS 5.0)
    Helped write and administer the ASP scripts that pulled data from the database and generated Web pages.  Such pages are used by the internal users to review data and generate reports for the government client, and by external users to search for information on medical devices and procedures.

1996-1998:  For a major financial services and mutual funds company, functioned as a consultant to the Technical Architecture and Core Infrastructure team, which is responsible for defining the software architecture for all corporate applications on Windows NT and producing reusable software components.  Specific contributions and responsibilities included:

  • User Interface Framework (UIF).

    Designed, developed, documented, and promoted the UIF (a 1998 predecessor to the RCP -- Rich Client Platform -- concept that gained popularity in 2007).  It is a user interface framework written in VB 5.0,  that supports the ability to "snap in" binary components at runtime. Application developers produce screens as ActiveX controls (OCXs) in VB, and configure the UIF to load each screen as the header or footer region of a window or as a tab of a tabbed notebook. The UIF is completely data driven. It reads configuration data at runtime to determine which OCXs to load and to dynamically build its menu, toolbar, status bar, etc. To the user, the resulting application looks like a typical well-integrated Windows application, but behind the scenes it is a collection of cooperating components running in one or more processes, coordinated by the UIF. Advantages of this approach include:

    • Snap in additional screens without re-building or re-installing the entire application.
    • A bug in one component can’t crash the entire application.
    • Dynamic loading of components for fast startup.
    • Dynamic reconfiguration based on security.
    • Consistent look and feel.
    • High degree of reuse.

    Used a RAD (Rapid Application Development) approach to design and develop the UIF. Worked with an application group for 2 weeks to produce a working prototype to demonstrate the concept and refine the requirements. Over the next 2 years, added more and more function, always maintaining backwards compatibility.  Also wrote the tutorials, developer’s guide, and reference manual, and gave dozens of demos to management teams and application groups. The UIF has been adopted for use by all in-house client/server applications on Windows NT.

  • Software Architecture for Windows NT

    When I joined the team, all applications were running on OS/2 in a variety of languages (C, Smalltalk, SQL Windows, Application Manager). Worked with the lead architect to design a layered architecture on Windows NT including user interface services, business services and data services. We proved the feasibility of the architecture with a series of prototypes using progressively more of the layers. For client/server applications, the user interface runs in VB on Windows NT (using the UIF described above). For Web applications, the user interface is HTML and Java in a Web Browser. The data services, written in VB and C provide portable access to legacy data sources (SQL databases, VSAM files and CICS programs) without requiring changes to the legacy code. One division of the corporation has successfully moved to this architecture and the other three are now following.

  • Core Infrastructure Team

    When I joined the team, it was an ad-hoc group of developers with no documentation, no process, and no plan. The team was constantly interrupted with support calls and the users were dissatisfied. One developer complained that the hardest part of producing the next version of the software was to find the latest source code from the previous version. Only one division of the company used the Core software.
    Due in part to my influence, the team now produces regular quarterly releases of software to all four divisions of the company, with a full regression test suite, complete documentation (developer’s guides, tutorials, reference manuals, release notes and Help files), an automated build process to reproduce old software versions from source code archives, an automated bug-tracking utility, automated install/uninstall scripts, and a Lotus Notes database for communication with users (announcements, tips/techniques, questions/answers). Users communicate with the developers and each other via the Notes database. Support calls are down, and the users are much happier.

  • NT Developer’s Guide

    Wrote a Developer’s Guide, containing standards, tips, and techniques for use by all Windows NT developers.  Created this as a "groupware" application, using Lotus Notes, rather than a simple document, so that all developers could review and publicly comment on the Guide as I wrote it. This approach achieved dramatic "buy-in" from the developers because they could participate in the process.

  • Software Distribution

    Learned and documented WinInstall, used with Systems Management Server to silently "push" application installs to thousands of PCs overnight. Taught application developers how to use it. Wrote standards to avoid collisions between unrelated installs and to guarantee the ability to uninstall safely. Wrote a utility program in C++ to check install scripts for compliance.


1991-1996 Shared Medical Systems (SMS), Malvern, Pennsylvania
 

Member of the LAN and Database Technology Services group at SMS, chartered to provide a distributed platform on which all SMS applications are deployed. Our job included developing the services and applications of the platform, selecting and integrating 3rd party tools, and assisting in the cultural and technical transition of SMS applications and developers from a mainframe, sequential programming, COBOL approach to an approach based on distributed PC/LAN, event-driven, object-oriented, Visual Basic (VB) and C++ technology on Windows and OS/2.  Responsibilities and contributions included:

  • Implemented a User Interface Builder similar to VB (before VB existed), in C++ under OS/2 Presentation Manager.
  • Led the move from OS/2 to Windows, recreating our entire development environment (compilers, make utility, debuggers, bug-tracking, e-mail, etc.) with Windows products. Ported lowest level system services layer of platform, and wrote regression test suite.
  • Enhanced VB 3.0 to include "data-awareness" and "data validation", and to allow end-user drag-and-drop customization of SMS applications without rebuilding or reinstalling. Written in VB and C++, my add-on was developed with a RAD approach. Within 2 weeks I had a working prototype, and over the next 2 years I added more functionality while maintaining compatibility. This tool was so wildly successful that, as part of our "strategic alliance",  Microsoft requested that I visit their corporate headquarters in Redmond to demonstrate it to the developers of VB. Much of the same functionality has since appeared in VB 4.0, 5.0, and 6.0.
  • Wrote a VB custom control (16-bit VBX and 32-bit OCX) to monitor all Windows messages in any VB application and improve the keyboard focus handling aspects of VB.
  • Coordinated the move of all SMS VB programmers from VB 3.0 to VB 4.0, including tracking SMS code changes, 3rd party VBXs and OCXs, and resolving technical problems.
  • Chaired C++ Coding Standards Committee, and wrote the standards document.
  • Set up Internet e-mail access for my department, and introduced them to the Internet (before the existence of the World Wide Web).
  • Award for saving 6 man-months by conceiving a template-driven approach to code generation.
  • Award for excellence in teaching C++ robustness techniques to programmers.
  • Nicknamed "The Exterminator" by my peers for finding and fixing so many bugs.


1987-1991 Software Productivity Consortium (SPC), Herndon, Virginia

Member of a team developing tools to predict performance characteristics of proposed systems. These tools, implemented in Ada using the X Window System on Apollo Unix and VAX/VMS, allow any system to be described graphically or textually as a Petri Net, or textually in an Ada-like syntax. They then model the system mathematically, and report behavioral characteristics like deadlock, throughput, and response time.
My contributions:
  • Wrote a graphical Petri Net editor in Ada and X.
  • Worked with local university to enhance Petri Net analyzer.
  • Enhanced autolayout package (see below) to lay out Petri Nets in the editor.
  • Wrote reusable Ada packages to manage menus, accelerator keys, and dialog boxes. Developed for the graphical editor, these were reused throughout the company.
  • Helped design the YACC-based parser for textual annotations added to Petri Nets.
  • Factored out system-dependent portions of tools (file access, system calls, etc.) and produced equivalent Unix and VMS versions.
  • Gave presentations and demos to customers.

Previously, member of a team that developed tools for designing large Ada programs. Tools perform "forward engineering" of Ada source code from OOD (Object-Oriented Design) diagrams, and "reverse engineering" of diagrams from code.
My contributions:

  • Wrote an interactive graphical editor prototype in Pascal on an Apollo Unix workstation to edit OOD diagrams stored in an Interbase relational database.
  • Used the graphical editor along with prototype tools developed by other team members to complete requirements analysis and design, experimenting with various strategies for integrating OOD graphics and Ada source text, and doing demos to get customer feedback.
  • Member of a 3 man team to develop Ada bindings to the X Window System, and write a deliverable version of the graphical editor in Ada using X on Apollo Unix and VAX/VMS workstations.
  • Wrote a generic Ada "autolayout" package to lay out graphs, routing arcs around intervening nodes, and minimizing line crossings. Used this package to automatically lay out diagrams in the editor.


1982-1987 Raytheon Company, Sudbury, Massachusetts

Worked in the Air Traffic Control and Software Tools departments.  Responsibilities and contributions include:
  • Technical lead in Ada development of an operating system emulator.  A team of 60 engineers used the emulator, running on our existing VAX/VMS computers, to develop a multi-tasking real-time air traffic control system targeted to the Motorola 68000 operating system. This eliminated the need to purchase multiple expensive 68000 workstations for development.
  • Member of a team that developed Ada tools in VAX/VMS "C", using Unix YACC and LEX which we ported to VMS. The tools operate on Ada programs, and include: a source code formatter, a McCabe complexity metric, a coding standards checker, and a document generator.
  • Wrote device drivers in Pascal on IBM PC-DOS for graphics devices (mice, trackballs, keyboards, color displays, plasma panels, etc.) to support their evaluation for use in a proposed air traffic control workstation.
  • Programmed a Raytheon graphics display controller in assembler, to double-buffer and update the cursive display list in real-time as it is used to refresh an air traffic control screen.
  • Wrote a device driver in VAX Pascal for a GKS-based raster graphics workstation.

EDUCATION

1982

 

 

University of Pennsylvania, Moore School of Electrical Engineering
BSE, Computer Science and Engineering, GPA: 3.6/4.0 (Magna cum laude)
Thesis Design and Implementation of a 3D interactive computer graphics package. Design was published in ACM "Computer Graphics" journal, and implementation used for instruction and graphics research at the university.
Ongoing Conferences Java, C++, VB, Windows, Internet, Graphics, Ada
Classes Java, XML, Oracle 8, MTS, MFC, VB, COM/OLE, Design Patterns, Advanced C++, X Windows Programming, Software Engineering with Ada, User Interface Design, Object-Oriented Design, Probability Theory and Petri Nets, IDL, VMS Internals.