|
2012-Present: HelpHOPELive
Creating a web app for internal and external use by HelpHOPELive,
a non-profit that does fundraising for medical patients:
- Recruit and mentor a team of developers
- Lay out architecture and select languages, tools, and
technologies
- Set up and administer Amazon servers (AWS, Linux, Apache, MySQL, Python/Django,
ElasticSearch, tripwire, fail2ban, ssh, sendmail, sudo,
etc.)
- Set up and administer other cloud-based services (JIRA, Confluence
wiki, BitBucket Git repo,
etc.)
- Train users on JIRA to gather requirements and maintain an Agile
backlog
- Conduct Agile stakeholder
meetings to set priorities for each sprint
- Design and code (Python/Django, MySQL, jQuery, JavaScript, Ajax,
ElasticSearch) portions of the HelpHOPELive
web app to support:
- Patients creating and managing web pages to solicit donations from
their communities to help pay their medical expenses
- Donors donating to patients via credit card or direct bank transfer
- Staff managing the content of the main Web pages via a custom CMS
(content management system)
- Staff performing internal business operations -- approving new patients,
editing patient pages, reviewing guestbook entries, approving disbursements,
etc.
- Reuse and extend my underlying components -- logging subsystem, RWD (Responsive
Web Design) framework, Ajax/REST framework, etc.
- Reuse and extend my existing sys admin tools -- automated backups,
security and performance monitors, etc.
- Create automated regression test suite
- Document everything in the wiki
2010-2011: Visibiz
Developed a social CRM Web application (contacts, interests, relationships,
etc.) integrated with LinkedIn, Gmail, etc:
- Recruited and mentored a team of architect and developers
- Worked with the architect to lay out an architecture
and select languages, tools, and technologies
- Installed, configured, and managed the servers (AWS, Linux, Tomcat,
Apache, MySQL, MongoDB, Groovy/Grails, Hudson/Jenkins,
JIRA, Git, JUnit, MediaWiki,
tripwire, fail2ban, ssh, sendmail,
sudo, etc.)
- Wrote custom backup software to do automated daily incremental and
full backups of laptops to the cloud servers, servers to each other,
and finally to the local NAS drive in the office
- Designed and coded portions of all tiers of the application:
- JavaScript, jQuery, DHTML, CSS,
JSON and Ajax in the Web front end
- REST
Web services written in Groovy/Grails wrapped
by Jersey JAX-RS
- MongoDB NoSQL database
- Wrote logging package to enhance log4j, producing
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
- Wrote JUnit test cases for unit, integration, and
functional tests, run automatically by Hudson/Jenkins in
the builds triggered by each push to Git
2007-2010: InfraTrac
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 SPA-style 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 physical servers (Linux, Mac, Windows),
and Amazon AWS virtual servers (Linux)
- Features:
- SPA --
Single Page Application
- "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.
Also, 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: Barclaycard (was Juniper
Bank)
Enhanced on-line banking 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 MediaWiki pages 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: Simplica
Helped develop
a JavaServer
Faces (JSF) engine and set of components:
- 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, MS
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: GlaxoSmithKline
Developed pharmaceutical software:
- Developed a 3-tier Web application architecture
(see diagram) for clinical trial management
software. The client estimates savings of 15
million dollars per year
- Presentation Tier
The presentation tier consists of DHTML, XSL, CSS,
JavaScript, and Ajax. 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. This technique
has recently come to be known as SPA -- Single
Page Application.
- 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 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.
- Enhanced a VB, RDO, and Oracle application
to track the inventory and distribution of drugs
- Developed a Web-based reporting system using Perl, DBI,
and Oracle database
- Developed a generalized database front end using VB to
access Oracle databases. It 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. It
is structured as 3 layers of cooperating components: Oracle
packages in the database, COM business components, and ActiveX
Controls (OCXs) for the user interface.
1996-Present: Webmaster and Linux System Admin
for the Bristle
Software Web site (http://bristle.com).
- Installed and administer Linux servers running Apache Web
server, Tomcat, MySQL, SMTP, DNS, etc.
- Migrated corporate Linux servers from physical servers to
Amazon AWS virtual servers
- Author the Web pages to house my collection of thousands of
tips and techniques
on topics including Web Programming,
Cloud Computing, Java,
JavaScript,
XML, SQL, Unix,
Mac, Windows,
VB,
ASP, C++,
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
Java using javamail classes,
previously in VB using the SMTP protocol directly
- Currently, re-writing tips pages in XHTML and processing them
with XSLT transforms to generate RSS and Atom
feeds
1996-Present: Developing and supporting the Bristle Software
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, Encryption, 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/
1998-1999: ECRI Institute
Developed
a database-driven Web site about medical technology, using SQL
Server and IIS.
Wrote a VB maintenance program that allows the user to edit Web
page fragments in a WYSIWYG HTML editor similar to
Microsoft Front Page or Word. It stores the fragments in the
database. The complete Web pages are assembled from the fragments via ASP
and ADO. (See
details)
1996-1998: The Vanguard Group
Joined the Technical Architecture and Core Infrastructure team that
defined the software architecture for corporate applications on Windows
NT, and produced reusable software parts. (See
details)
- User Interface Framework (UIF)
Designed and developed (in VB) the UIF (a 1998 predecessor
to the RCP -- Rich Client Platform -- concept that gained popularity
in 2007). It supports runtime "snap
in" of binary components. Application developers
produce screen fragments as ActiveX controls (OCXs).
The UIF assembles the fragments, reading config files to dynamically
build notebook tabs, menus, toolbars, etc. This allows dynamic
snap-in of new or modified fragments, dynamic security-driven
configuration, crash protection between fragments, and faster
startup. Using a RAD (Rapid Application Development) approach,
I created a working
prototype in 2 weeks, and evolved it for 2 years as it was adopted for
use in all in-house
client/server applications on Windows NT.
|