Projects

Programming Projects

Work Related

  • Multiserver init.d (December 2007 at the Columbus Metropolitan Library) - Created a perl script to manage starting and stopping applications within a pool of web servers via an automated fashion. This script handled starting and stopping 20+ applications on the correct servers while managing dependencies for each application.
  • DNS auditing and clean-up (March 2007 at the Columbus Metropolitan Library) - Created perl scripts to audit Bind DNS records. Reports on missing or mismatched records were created. Hundreds of records then had to be fixed by hand.
  • Built LDAP directory (February 2007 at the Columbus Metropolitan Library) - Using OpenLDAP, I built an LDAP directory for all Linux accounts, netgroups, sudo-ldap, autofs-ldap. Custom RPMs were build for sudo-dap and autofs-ldap on SLES9.
  • Ezproxy authentication (January 2007 at the Columbus Metropolitan Library) - We deployed a commercial product called Ezproxy from Useful Utilities. I designed the authentication scheme that was implemented which included a series of complex redirects and cookie passing between applications. Working with the web developers, I re-wrote part of a server side authentication component in Perl so that session validation occurred with the main web website.
  • LDIF processing (Nov 2006 at the Columbus Metropolitan Library) - Created a perl script to parse and process ldif files for posix account information.
  • Web File Listing Tool (May 2006 at Grote Company) - This Perl CGI program was created to sit on top of a secure ftp site and provide a sorted view of new files added to the server. The tool could show a listing of files sorted by date, size, and name.
  • Field Modification Database (Apr 2006 at Grote Company) - This was a Lotus Notes database application that tracked field modification requests and included an approval work-flow system. The database included a configuration page where defaults and settings would be changed. This database into general use by the engineering team.
  • Parts Order Form (July 2006 at Grote Company) - This was a Lotus Notes database application that was migrated from a template, re-written into a database, and updated per specifications. The database included a configuration page and simple work-flow.
  • DR Makefile installer/uninstaller (Oct 2005 at Nationwide) - At the time I was working with monthly DR testing. The DR tests required us to take running servers and make a number of changes that would isolation the network, fail over the NIS, and fail over automounts into our DR environment. Making all these changes across a number of machines and then undoing the changes after the DR testing provided to be an error prone process. Thus, I created a Makefile that could generate the DR NIS maps, apply the server changes, and then remove the changes after we were complete while making the whole process 99% people proof. The Makefile's ability to automatically check file dates and times proved perfect for this task.
  • Redhat Network Satellite CGI Built Tool (2005May at Nationwide) - Our RHEL3 server build at Nationwide relied on a large structure of files kept on an NFS share. RHN satellite works by issuing a dynamic key in a generated kickstart file that allows access to the package repository. I wrote a Perl CGI script to bypass RHN's kickstart process, but still using the RHN package repository. It works by excepting a request from a new server build, then grabs a dynamic key from RHN, it then hands the server build a new kickstart file which allows pulling packages from RHN while accessing our build files on our NFS share. NFS is not the idea protocol for this, but the intension here was to later tarball up and deliver the build files via HTTP. The built-in RHN kickstart process is far to simplistic for our needs at the time.
  • Callup (May 2004 at Nationwide) - This Perl program is a shell tool for querying Nationwide's internal contacts directory. The program pulls XML data via libwww and supports multiple methods of requesting and displaying the data. The program also provides a smarter query interface to the directory than the standard web interface as it uses regular expressions to interpret the type of info provided. If it guesses wrong, it automatically retries multiple query types. This tool could also display the data in ini, xml, list, simple, and structured formats.
  • Datacenter Map (Dec 2004 at Nationwide) - This Perl program takes exports from the server information database and analyzes the location information to create HTML maps of the different datacenters. Each grid location can be clicked to see a picture of the rack units at that location. The analysis of the data also reports location conflicts and discrepancies.
  • Server Information Database (Jan 2004 at Nationwide) - This Perl program takes an export of Nationwide's server inventory database, similar to an INI file, and converts it into XML. Then using Gnome's libxml2 interface via perl, the script allows querying the database. The script provides quick command line access to SID data from any server in the environment and auditing of DNS/IP information.
  • Remote Scripting (Oct 2003) - Created a Perl program for running Windows shell commands against a list of servers. The script was heavily used while patching 800+ windows servers month after month. The program provided clean logging and reporting of the results for each server.
  • Patch Scheduling with XML Stylesheets (Dec 2003 at Nationwide) - I needed a method to have a single set of scheduling data while able to generate multiple reports with the data. I did not have a database available, or a web server capable of running server side scripts. Thus, enter XML stylesheets and let the users browser process the information. A single XML data file was maintained with a full list of servers, owners, and patching schedule times. I created a separate XSTL file to generate an on-line schedule that our customers could view. The same XSTL script also created the actual script used to schedule the patching. Thus, if the customer checked and verified their servers and schedule times, then the difference between what they verified and the actual patch times in theory would be zero. This helped out tremendously with the 800+ servers that needed patched each month, as scheduling would get quite confusing. I would have loved to write a full database, web, and email driven work flow system for handling all of this, but in the end I moved on to another fun task (Linux).
  • Pateb virus removal program (Nov 2003 at Nationwide) - After the outbreak of the Pateb virus our anti-virus software was not effectively removing the virus. A solution was needed to clean the registries of desktop machines. I became award of the issue and with a friend volunteered to write a perl program that would clean the infected machines. We coded and tested for 12 hours creating tool that could open and clean all registry hives on a windows PC, including the hives of users that were not logged in. The tools was then compiled to an .EXE and deployed via Windows SMS (System Management Service).
  • DNS/IP Audit (2002 at Nationwide) - This Perl script took our server inventory network information from an excel spreadsheet and performed a complete audit on all DNS and IP information.
  • Windows NT Backup (Apr 2002 at Nationwide) - This Perl script functioned as a wrapper for Windows ntbackup. The script provides detail logging in HTML, error reporting, backup retention and rotation, and daily email notifications. The script ran in production on ~15 servers for 2+ years without a glitch.
  • Cisco Route Auditing (Aug 2001 at FNSI) - The was my first major Perl script. The script would telnet into a remote Cisco router, collect the routing table and interfaces, and then run a correlation report looking for broken routes.

Personal

  • Created website (Dec 2006 at home) - Re-build my personal website (www.ilive4code.net) using the Perl Template Toolkit. The website contains some AJAX code which is used to dynamically load different pages in page.
  • Fixcols (June 2005) - This Perl program is a shell tool that cleans up column formated text producing perfectly aligned columns. This tool is especially useful for cleaning up message df -k outputs and /etc/fstab files. Fixcols works on both files and piped text streams.
  • MS Windows Task Management (Feb 2003)- Created several Perl scripts to manage the Window's task manager via the build API.
  • Desktop Background Info - This Perl script (packaged as an exe) would register as a Windows service. Early in the OS startup the program would collect important system information. The program would then produce a BMP background file to display this information. The program also knew how to install and uninstall itself.
  • Sudocat (Jun 2005) - This Perl LDAP script provides quick command line access to sudo-ldap rules. The script uses the local /etc/ldap.conf file, requires the user authenticate with the LDAP directory, and supports SSL connectivity.
  • Unix PAM - Created a sample C program for testing PAM (Pluggable Authentication Module) authentication. This program was used for PAM troubleshooting on different platforms including HP-UX, Solaris, and Linux.
  • Web Database Log (Aug 2006) - Created a Perl program to sort through Apache log file, pull out the logged data, and insert the data into a PostgreSQL database.
  • PHP Authentication / Login System - Created in PHP4 a login system for providing access to a website in a controlled method. The system enforced encrypted authentication, session tracking through cookies, and error handling while providing the user a consistent user friendly interface.
  • Neverwinter Nights Module (Nov 2004 - Aug 2006) - This is without a doubt the largest project I have ever undertaken. About 1000 hours have been put into developing this game module. NWN uses a C style object oriented scripting language. All the aspects of software development were used in creating this module. Complex state diagrams and flow charting were needed to development event interacts. Naming standards were used to track the large number of variables and script names. About two thirds of the development time was spent testing and bug fixing. Although version control software could not be used, revisions were tracked and updated manually. I still maintain the module and fix bugs as they are found.

College

  • Game of Life - As a completely different approach then my classmates, I implemented our Game of Life assignment on FreeBSD using multiple curses windows. The program alternated between displaying one window while updating data in the other window to produce a smooth animation of the simulated single cell life cycles.
  • Unix TCP/IP Server - Create a program in my Operating Systems course which which provided both client and server processes for an example messaging API. The program uses XML configuration files, C++ classes, and Unix process forking.
  • Data Structures - Created a linked list C++ class in my Data Structures and Algorithms course. The class provided methods for push, pop, shift, unshift, add, del, index, clear, bubblesort, selectsort, and quicksort. The class was also overloaded for the streaming and assignment operators.
  • Unix mice - Created a C program to read /dev/mouse and display a mouse pointer for a school lab.
  • Java GUI - Created numerous Java based GUI (Graphical User Interface) programs while taking a course in Java.
  • Java Client/Server - Created a Java client / server program that serialized data for network network transport for a Java course I took. The program also supports multiple server threads, a common protocol class for the server and client, user authentication, and server side command validation.
  • Linux Kernel Modules (Aug 2005 to Oct 2005) - Created various example Linux kernel modules for school labs while reading Oreilly's Linux Devices Drivers book.
  • libmdedriver Parallel Port Drive (Oct 2005) - Open Source implementation of the MDE8255LPT-1's controller's shared library. This library allowed our integrated peripheral labs to be performed under Linux.
  • Rockbox sound distortion (May 2006 - Jun 2006) - For our Devry senior project, our team decided to write a sound distortion tool under Rockbox on an Archos MP3 player. I was the lead programmer on the project. The program we wrote was written in C and integrated into the Rockbox 2.5 operating system. The program could update the LCD display and except input from the Archos's buttons. The sound distortion worked by creating waveforms in software and could apply these waveforms to the volume, bass, and trebles controls. Much of the time on this project was spent cross training my team members on Subversion source code repository and Unix, and reverse engineering the Rockbox operating system, as there was no how-to book that we could follow.

Systems Administration Projects

Single Sign-on and Directory Services

  • Setup redundant OpenLDAP Servers (February 2008 at the Columbus Metropolitan Library). Setup one primary and two secondary OpenLDAP servers.
  • Setup an single sign-on directory for my systems at home using OpenLDAP, secure OpenSSL, pam_ldap, nss_ldap, and autofs on Linux, FreeBSD and Sun Solaris systems.
  • Supported single sign-on pam_ldap, openldap, openssl for 600+ servers including Redhat Linux, Sun Solaris, HP-UX, and IBM AIX at Nationwide Mutual Insurance.
  • Supported sudo-ldap for 600+ servers including Redhat Linux, Sun Solaris, HP-UX, and IBM AIX at Nationwide Mutual Insurance.
  • Packaged custom sudo-ldap RPMs for Redhat Linux
  • Wrote a perl program for displaying sudo rule information. The program uses /etc/ldap.conf for all settings including SSL connectivity.
  • Setup an NFS automounted environment where the maps are stored in LDAP. This has been running on at home on RHEL3, RHEL4, and Debian Linux for over a year now. Note, Suse9 needs a code fix.
  • Setup Bind DNS with an LDAP backend. I had to edit the bind source code to add in the bind-sdb ldap extensions. Then bind could be compiled and installed. My home network currently runs on Bind-LDAP. My setup notes can be found here: Bind DNS LDAP setup notes. My DNS at home has been using this configuration for over a year now.
  • Unix to LDAP migration (2006 Nov at the Columbus Metropolitan Library). Migrated Unix accounts into eDirectory for the Columbus Metropolitan Library. I created a perl script to parse and rewrite ldif exports. Added sudoers and autofs schema's to eDirectory.

Networking

  • Linux Firewall (2006 Jan-Feb at the Grote Company) - I setup two cheap desktop machines as IPcop firewall servers. Basic NAT forwarders were created for internal services. In addition to the default rules provided by the firewall, additional rules were added to /etc/rc.d/rc.firewall.local. All outbound traffic not specifically permitted was logged and blocked. All permitted inbound traffic was logged. I re-wrote the custom rules script so that the rules could be started, stopped, and reloaded similar to an init script. Over time the complexity and number of these rules grew to over a hundred lines. The log files generated by the firewall where sent via syslog to our central syslog-ng logging server. These log files and tools such as tcpdump were used on many occasions to troubleshoot and resolve Internet access problems. The two servers where kept in sync and a simple fail-over script was available in the event of a hardware failure.
  • Linux Proxy (Dec 2005 - Jan 2006 at the Grote Company) - I setup two cheap desktop machines as Smoothwall Guardian proxy servers. A proxy.pac file was placed on a web server to provide automatic client configuration. By symlinking the proxy.pac file to either proxy1.pac or proxy2.pac we could fail all users over to the alternate proxy server. AD (Active Directory) authentication was setup requiring all users to authentication themselves before accessing the Internet. Internet access was based on AD groups and each group had customized access. The proxy server did not support time based access schedules, thus I developed a perl script that would switch users in and out of the lunch time/after hours proxy group within AD.
  • Nagios Monitoring (Feb 2006 - Mar 2006 at the Grote Company) - I setup Nagios 2.0 under Ubunto Linux. NagiosQL was later setup using a MySQL database to provide an easier method for other team members to manage Nagios. Developing the Nagios rules took some time and lots of tweaking. We had 90+ services and 20+ hosts monitored. Only critical items would alert after hours. A second setup of Nagios at the UK site done. Both sites would monitor each other. Thus, if either site went offline an email page would still get through.
  • MRTG Monitoring (Feb 2006 at the Grote Company) - I setup MRGT to monitor network traffic for all hosts on our network. The stats were pulled directly from the switches. MRTG was used to identify network problems, in particular our Internet bandwidth was problematic.
  • Ntop Monitoring (Feb 2006 at the Grote Company) - Although MRTG provides an excellent history of network bandwidth, its minimum resolution is five minutes. Thus, ntop was needed to give a clear picture of network usage as it was occurring. I had to start by compiling ntop on a SuSe 8 machine, which has a Linux 2.4 kernel. Ntop was then setup on both the IPcop Firewalls and Smoothwall Guardian proxy servers. Different required dynamic libraries were missing on each of these platforms. By hand I had to fudge the dynamically linked libraries using the environment variable LD_LIBRARY_PATH on both systems to get ntop working. Ntop was configured to automatically startup on boot and ran for without any issues.

General System Administration

  • Apache vhosts (April 2008 at the Columbus Metropolitan Library) - Built complex structure for managing a large number of web configurations.
  • NTP Servers (February 2008 at the Columbus Metropolitan Library) - Setup and secured redundant Network Time Servers.
  • Bind DNS Servers (February 2008 at the Columbus Metropolitan Library) - Built one primary and two secondary Bind DNS servers.
  • Request Tracker Ticking System (Apr 2006 at the Grote Company) - A ticking system was needed to track all the requests and issues that came up daily. Request Tracker (RT) was setup on Ubuntu Linux under Apache and using a MySQL database. Custom queues and attributes were added to suit our needs. After a month of testing and tweaking RT proved to be a simple, fast, and capable tool.
  • Designed Wiki (Oct - Nov of 2006 at the Columbus Metropolitan Library) - The IT area lacked a documentation system. I setup dokuwiki and started a basic framework. The site continues to grow into a wealth of information.
  • There are many more items I still yet to add under this section.

Server Builds

SLES9 Server Build

  • Created for the Columbus Metropolitan Library
  • Designed for deploying SLES9 sp3 on HP Proliant DL38x and VMware servers.
  • Provides automated installation of Novell SLES9.
  • Includes HP Proliant Support Pack installation
  • Provides many custom post configuration settings including automatic network settings, LDAP login, sudo-ldap, autofs-ldap,
  • Includes both a setup procedure and a post setup checklist.
  • The build is tracked under SVN version control and included documentation

Ubuntu 5.10 Server build

  • Created at the Grote Company from May 2006 to June 2006.
  • Automated many of the manual tasks that need performed after a new server install. These items included: NFS client, winbind AD client, standard local accounts, automated backups, network settings, SSH settings, PAM settings, syslog settings, serial console settings, updating the system packages, installing additional standard packages, and many more not listed here.
  • Included both a setup procedure and a post setup checklist, which was meant to be performed by a second person.
  • Some setup steps were intentionally not automated to enforced cross training of key setup steps.
  • The setup checklist included items such as: update central syslog-ng configuration, update Nagios monitoring configuration, update server database information, update server documentation, update MRTG configuration, and verifying SSH key setup.
  • The build was tracked under SVN (Subversion source code repository).

Redhat Linux AS 3 Server build

  • Produced and maintained for the NSC Unix server team at Nationwide from Aug 2004 to Oct 2005.
  • Used in production and deployed on more then 40+ servers.
  • Extensively documented and tracked under CVS (A source code versioning system).
  • Used PXE boot and was fully automated from beginning to end. We could build a Redhat servers in about 25 minutes, with the HP Proliant tools taking most of the time.
  • Later the build was integrated with Redhat Satellite server, which provide the install media.
  • Installation of HP Proliant support tools, drivers updates, firmware updates, and ILO configuration was fully automated.
  • HP's Rapid Deployment Process (RDP) provided the PXE boot environment. The Linux install process entailed booting the system to DOS, running hardware configuration tools, rebooting, then using loadlin (later linload) to boot Redhat Linux and run Anaconda.
  • Build documentation provided a detailed checklist for post setup verification.
  • Complied with Nationwide's security checklist, which was a 50 page document. Note, this compliance process took months of negotiation and lengthly step by step reviews.

Windows 2000 Server Build

  • Built and maintained for the Office of Finance at Nationwide from Dec 2001 to Jun 2003
  • Used in production on 20+ HP Proliant servers.
  • Provided a repeatable, consistent, and documented method for setting up Windows 2000 servers.
  • Most parts of the build were automated with scripting.
  • Build documentation provided a detailed checklist for post setup verification.
  • Complied with Nationwide's security checklist, which was a 50 page document.

Presentations

  • SNMP - (2003 Spring) Presented the inter details of SNMP to my advanced networking class while attending Devry University
  • Unix Signals - (2003 November) Colug meeting presentation
  • Shell scripting - (2004 June) 2 hour cross training presentation on basic shell scripting and basic regular expressions to the Windows server team.
  • Console Monitoring with Conserver - (2005 January) Colug meeting presentation
  • Dynamic Libraries - (2005 Aug) Colug meeting presentation
  • Linux Kernel Modules - (2006Sept28) Colug meeting presentation
  • Linux Process Scheduling - (2007 January) Colug meeting presentation
 
/var/www/sites/dokuwiki/data/pages/people/travis/projects.txt · Last modified: 2009/04/11 22:23 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki