Michael J. Pedersen
42 Henry St
Oxford, NJ 07863
m dot pedersen at icelus dot org
I'm an IT Generalist with over 17 years of experience managing Windows, Linux, UNIX, and Macintosh systems. This means that I tend to work in the cracks in the organizations that hire me: I get between systems that don't talk to each other, and make them talk. I work between the IT department and other departments to find out what everybody needs, and then build solutions that make everybody's day better. I even work inside of the IT department to get sub-groups that don't work well with each other (for instance, system administration and networking often have issues), and help them resolve their issues.
Because of this, I find myself working heavily with systems automation, and I take great joy in helping somebody remove hours of repetitive work from their work days, regardless of what department they work for, or what they do. Making someone's work life better is the point of technology, after all.
I am comfortable in a wide range of working conditions. Work environments have been heterogeneous (Windows, OSX, and several flavors of Linux), small to medium sized (from 10 to 120 servers, 20 to 300 workstations), and mixed locations (all local to all remote teams).
- Open Source Software Contributions2002-Current
- Starting in 2009, I began participating in the TurboGears project, working primarily on the documentation. In 2011, I took over as project maintainer, and we put out three releases in that year alone.
- Created Java plugin for Openfire XMPP server, allowing vBulletin forums to have a working XMPP server for their communities.
- Contributed patch to Mercurial to assist with repository conversions. Specifically, it allows branches to be renamed (useful for repositories that used named branches in Subversion to change their main trunk location).
- Implemented initial Pluggable Authentication Module support for HylaFax, which was accepted into HylaFax 4.2.0.
- Contributed code to MythTV project, allowing users to save recordings using custom cut lists, which allowed for easy removal of commercials.
- Contributed documentation to WebGUI project, showing how to design a custom theme for WebGUI.
- Contributed documentation to libpqxx project, showing how to compile libpqxx using MinGW/MSys on Windows.
- OrcaTec LLCAtlanta, GA (telecommute)Developer2012-Current
OrcaTec is in the litigation support industry (they help their clients reduce the costs of being sued). OrcaTec is primarily a software-as-a-service company, allowing OrcaTec to host customer data. While working here, my focus has been on improving the GUI. This has involved refactoring code heavily, adding new features, and adding new tests to cover existing and new code.
The team structure at OrcaTec is geographically very diverse. I have teammates in many states. We all work remotely, and we all work together to make the product the best that it can be.
- Developed new advanced search tool that gave customers search capabilities that were difficult (or impossible) before.
- Created new document production subsystem from scratch.
- Added holds and matters subsystem, allowing customers to state that documents belong to specific cases and should not be deleted while the cases are ongoing.
- Spearheaded conversion from YUI 2 to jQuery.
- Documented undocumented internal server API, and wrote a Python class to standardize the GUI use of it.
- Found major security hole (remote code execution) and closed it.
- Debugged and resolved memory issues that were causing systems to shut down.
- Resolved intermittent issue with drag/drop events that had been unsolvable by the existing team.
- Added user preferences.
- Added tag cloud (using awesomecloud plugin for jQuery).
- Added support for allowing customers to login using OpenID.
- Implemented login idle timeout functionality.
- Identified weaknesses in the database model, and added code to prevent those weaknesses from being hit.
- Wrote tools to help in spawning and reporting on background jobs that could run for a long time.
- Corrected Unicode handling errors in the code.
- Created a tool to allow copying settings between instances.
- Sped up our bulk database operations. Instead of taking hours, many large scale operations could now complete in minutes.
- Refactored code on a regular basis to reduce code repetition and increase legibility.
- Incorporated memcached into our stack to handle sessions and cached data.
- Installed and configured WSO2 Identity Server for our OpenID implementation
- Switched web server from Paster to Apache with mod_wsgi.
- Sped up the build process for developers (from 20 minutes down to 2).
- Organized weekly meetings for members of the OTGUI team, providing a chance to talk in depth about the issues the team was facing.
- Choopa.comSayreville, NJDeveloper2012
As a developer at Constant.com (renamed from Choopa.com in Jan, 2012), I have worked with a variety of technologies, with the heaviest focus being on OpenStack and Nagios. I have helped bring two products to production level availability for their customers (specifically: the Dedicated Cloud Server and Backup systems).
- Developed interface library to allow internal systems to manage OpenStack nodes, and gather billing information from them.
- Configured Bacula backup system as replacement for custom backup scripts.
- Refactored in-house Nagios web interface. This reduced the workload from six files down to one when adding new checks.
- Reconfigured Nagios monitoring system, reducing full systems check from 8 hours to 2 minutes.
- Built Nagios configuration file generator for in-house web interface for Nagios.
- Several smaller bug fixes and features throughout the internal code base.
- 6th Avenue ElectronicsSpringfield, NJSystems Administrator, IT Generalist2005-2008, 2011
In 2007, 6th Avenue began switching from their then-current POS system (named Tyler) to SAP. At the end of 2010, SAP was declared unworkable, and I was asked to come back to help them switch back to Tyler.
The environment at 6th Avenue covered a wide range of platforms spread out over 120 servers (both physical and virtual). We had VMWare ESX, Windows Server 2003, Windows Server 2008, CentOS Linux, Suse Linux, and Debian GNU/Linux. In 2011, I was brought back to transition the POS system and become the IT Manager. At the time the POS transition was completed, we had a team of 6 people managing the servers and about 300 desktops.
- Successfully lead migration from SAP to Tyler Point of Sale system.
- Developed numerous data validation scripts to validate and scrub data coming from SAP for import into Tyler system.
- Created automation scripts to easily reconfigure hundreds of terminal definitions within Tyler that could not be done via simple data import.
- Wrote automated installer for the Tyler client program to incorporate the program plus the mandatory pieces that we needed.
- Installed and configured Zenoss for full systems monitoring.
- Developed program to copy all sales data from Tyler POS system (which uses only ISAM files) to PostgreSQL database.
- Developed intranet pages (using AJAX) to allow customer service representatives to find old invoices in the database copy of Tyler's data.
- Created intranet pages (using AJAX) to assist in the selling of complex systems.
- Created an internal wiki for use by the IT department, including populating with over 30 pages of documentation at time of deployment.
- Implemented VMWare Virtual Infrastructure 3.
- Maintained Tyler point of sale system on HP-UX (and, later, Linux), responsible for inventory, sales, purchasing, and accounting for the entire company.
- Deployed Windows Software Update Server for Microsoft product updates.
- Developed workaround to resolve issue in point of sales system causing store wide sales terminal lockups.
- Retrieved bulk information from Tyler point of sale system for audits.
- Wrote several scripts to extract data from Tyler POS system before PostgreSQL database was available.
- Updated customer facing web site to reflect changes to NJ sales tax rates.
- Implemented ticket tracking system for help desk issues.
- Maintained heterogeneous environment with more than 60 Linux and more than 40 Windows servers.
- Maintained Active Directory domain, which included complete implementation of group policy structure for users and computers.
- Maintained CommVault backup system and disaster recovery site.
- Frequently wrote scripts to satisfy various company needs using a variety of scripting languages (AutoIt3 and Python being the preferred choices, depending on platform).
- Performed field certification of MaxDB system for CommVault, providing reliable and supported backups for SAP databases.
- Exported data from Tyler point of sale system for import into SAP system.
- Configured all servers for newly implemented SAP system.
- Spearheaded server room cleanup: Shut down over 30 servers, removed over a mile of wire.
- Rack mounted, installed, and prepared newly arrived servers for use in projects.
- Datapipe, Inc.Jersey City, NJUNIX Developer2008-2011
Datapipe manages thousands of customers servers. Many of these servers are connected to various shared storage systems, including 3Par, Isilon, and backup servers. Datapipe required an ability to do reporting on what data was being stored on these systems for each client, and then report that data back to billing. In addition, Datapipe required monitoring of the backup systems to ensure timely and complete backups of client data. My duties primarily focused on making these systems work well.
My team structure is worth describing briefly as well: My immediate manager worked out of Austin, TX. One coworker worked in the same building as myself, and I had two "extended" teammates who worked in Jersey City (I worked in Somerset). The extended team included the Windows developers, while I was on the UNIX development team.
- Created new backup monitoring and reporting system called StorageWeb, enabling a new revenue stream for Datapipe.
- Developed a system called unixops to allow Datapipe technicians to use one time ssh keys for accessing client machines as needed.
- Developed multi-threaded back end daemon which connected to the various storage systems and gathered the data about the stored data for reporting before pushing aggregate data to the billing system.
- Developed web interface that would allow users to drill down and see how storage was being used (by client, by server, by data center, and/or by storage type).
- Wrote tool to gather performance data from 3Par InServ nodes and display it via the client portal.
- Optimized PostgreSQL database on FreeBSD. Multi-million record insert jobs were taking hours to complete, and the optimization brought that time down to 20 minutes.
- Updated and maintained the existing backup monitoring tool which reported backup failures to our main ticketing system.
- Debugged issues with Python, FreeBSD, Apache, and modwsgi. Turned out to require specific compilation options to get these all working correctly.
- Created internal packages for Bacula (internal name: SureRestore) for all supported platforms.
- Evaluated potential replacements for Subversion, including Git and Mercurial.
- Diversified SystemsHackettstown, NJSystems Developer / Adminisrator2002-2005
Diversified Systems is a small company that focuses on low voltage wiring and subcontracting. While there, I wore many hats, and did work on every system. The total number of servers for this company was less than 10, and the entire IT department consisted of myself.
- Worked with upper management to completely redesign entire business processes and systems company-wide (accounting, customer service, builder coordination, sales and warehouse management).
- Developed customized interface to new software system using PHP, Apache, and Mozilla. Reverse engineered new system as needed.
- Automated sending faxes to field installers, saving five man hours per day.
- Modified SQL-Ledger accounts receivable report for historical views of accounts receivable. The modified version was capable of showing how accounts receivable looked on a given day.
- Implemented HylaFax fax server for incoming and outgoing faxes, allowing electronic receipt of over 200 pages of faxes per day from field technicians.
- Deployed Unattended, an automated Windows imaging system, to standardize computer receiving and configuration.
- Implemented employee remote-access system, using VPN (virtual private network).
- Deployed SNMP and monitored daily resource utilization.
- Converted structured portion of data from older system into a database, and provided training to employees on proper usage.
- Created PHP scripts to provide clean access to unstructured data from older system, and showed employees how to access and use.
- Managed upgrade of entire office to Windows 2000. This involved testing programs for compatibility, replacing obsolete programs, and determining proper installation procedures for undocumented installations.
- Resolved issues with the various systems which Diversified Systems installs in customer homes, including alarm systems, stereos, central vacuums, and structured wiring on a daily basis.
- Coordinated the activities of field technicians with customers to provide the maximum service level to the customers.
- Authored new scripts using Perl and PHP.
- Ciber, Inc. / Decision ConsultantsGreenwood Village, CoMember of Technical Staff1999-2002
Decision Consultants (DCI) was acquired by Ciber, Inc., in 2002. While working for DCI, I was contracted out to Coors, IBM, and a .com named "X-Care" (no longer in business). The points below come from all of those places.
- Ran, and later automated, nightly code compilations for patient records program. This effort saved approximately 1000 developer hours per week. Before this effort, corrupted nightly compilations stopped the whole team until resolved (usually an entire day would be lost). After this effort, no corrupted compilations occurred for over six months.
- Revamped and improved scripts used by developers for retrieving the nightly code compilations and to perform their own personal compiles, providing new features as requested.
- Wrote several smaller scripts related to the compilation process, to help developers understand what would be required for their work to be completed.
- Researched/corrected error in Perl, permitting resolution of time-zone conversion issues, enabling global use of data from medical care providers.
- Created Perl scripts to migrate health care provider data between systems.
- Integrated AIX/Solaris servers into Windows NT network, allowing developers on Windows to access AIX/Solaris files/printers.
- Developed a set of Solaris packages allowing deployment of new servers within 2 hours of receipt.
- Developed Ghost-like utility overnight, meeting next-morning deadline for usable computer loads.
- Configured several Sun Ultra servers to work as part of a network. Original condition was such that they were on a network, but not working together. This involved re-mapping user id numbers, and configuring NFS mounts such that the machines worked together.
- Configured and administered a CVS repository.
- Created a set of Solaris packages to allow the deployment of new Solaris servers within 2 hours of receiving them.
- Coded many scripts to perform several daily tasks.
- Downloaded and tested new tools to be used for the compilation process, to make sure they still produced correct results.
- Installed Perl modules and programs as requested by developers.
- Documented all new scripts and processes, and informed developers when new documents were available.
- Participated in configuration of training room using Red Hat Linux with Kickstart.
- Assisted customers in resolution of issues with Windows 95, Windows NT, Microsoft Office, and other software packages in use throughout Coors.
- Instructed junior developers in the inner workings of C++.
- Robert Half InternationalBoulder, CoTechnical Support1999
- Assisted customers of StorageTek in resolution of problems with both hardware and software products.
- Sykes EnterprisesDenver, CoSystems Technologist1998
Working for Sykes Enterprises, I was contracted out to Sun's internal Resolution Center. I worked with Sun employees around the world to resolve their issues with the workstations and servers they relied on daily.
- Performed remote operating system installations and upgrades.
- Resolved customer issues with Solaris 2.5.1 and Solaris 2.6.
- Wrote a Tcl/Tk script to speed up the process of logging into customers' machines for use in the Resolution Center.
- Wrote a Korn shell script to check a list of users and make sure that all users on the list were valid Sun employees.
- Added new users throughout Sun's internal network.
- Fabian CorporationStrousdburg, PaSystem Administrator1998
- Added new domains to Linux servers for web site hosting.
- Added new user logins to servers.
- Set up sendmail to forward email addresses from hosted domains to local users and remote users.
- Performed system upgrades (both hardware and software).
- Performed system backups.
- Dealt with security issues through upgrades, and removal of suspicious software.
- Installed firewall.
- Upgraded and recompiled kernel as needed.
- MaxTech CorporationRockaway, NJDeveloper / System Administrator1995-1997
I was hired at MaxTech as a customer service representative. Over the time I worked there, I earned the opportunity to participate in system administration and development of a new call tracking system to be used by the customer service team.
- Assisted customers daily with issues installing, configuring, and using their MaxTech modems.
- Discovered bug in the newly released modem drivers for Windows 95 and the MaxTech 28.8kbps modems.
- Created a new Windows based call tracking system to replace the old DOS based call tracking system. Used Delphi and Interbase as the development environment and database.
- Rebuilt Novell Netware server that had experienced hard drive crash. Did so while the server was in Atlanta and I was in Rockaway, NJ.
- Fixed issues with the Lotus cc:Mail SMTP gateway.
- Helped test the new MaxTech website.
- Actively working (as lead maintainer) on TurboGears. This involves migrating our infrastructure, new development, documentation maintenance, bug fixing, and mailing list management.
- Working on new system (named "Icelus Construction Assistant") to provide complete company management for construction companies, with features including scheduling, service, accounting, and warehouse management. This is being written using TurboGears.
- Created Linux-based network featuring NIS, NFS, DHCP, Linux firewall (using iptables), Samba, SSH, Subversion server, and Mercurial.
- Customized installation of Request Tracker for San Diego firm.
- Helped clients, family, and friends resolve various computer and home networking issues.
- Software Design and Configuration Management Tools
Time Used Last Used Proficiency Git 2 years 2014 Fair Mercurial 4 years 2014 Good Subversion 2 years 2010 Fair
- Markup Languages
Time Used Last Used Proficiency CSS 4 years 2014 Good HTML 14 years 2014 Very Good XML 2 years 2011 Fair
- Operating Systems Used / Administered
Time Used Last Used Proficiency Linux (Debian, RedHat, SuSE) 15 years 2014 Excellent UNIX (Solaris, AIX, HP-UX) 5 years 2011 Very Good Microsoft Windows (2008/7/Vista/2003/XP/NT/98/95) 12 years 2011 Very Good
- Programming Skills
Time Used Last Used Proficiency Object-Oriented Design 10 years 2014 Very Good Object-Oriented Programming 10 years 2014 Very Good Refactoring 6 years 2014 Very Good
- Programming and Scripting Languages
- Database Skills
Time Used Last Used Proficiency PostgreSQL Database Administration 1 year 2011 Good Relational Schema Design 4 years 2014 Very Good Structured Query Language (SQL) 12 years 2014 Very Good
- Database Servers
Time Used Last Used Proficiency PostgreSQL 5 years 2011 Good Microsoft SQL Server 3 years 2008 Fair MySQL 3 years 2014 Good
Time Used Last Used Proficiency Ipswitch What's Up 2 years 2008 Good Nagios 3 years 2012 Good OpenStack <1 year 2012 Fair VirtualBox 3 years 2014 Good VMWare 6 years 2011 Good Zenoss <1 year 2011 Fair
- Networking and Security
Time Used Last Used Proficiency Checkpoint VPN 2 years 2007 Fair Cisco 3 years 2011 Fair Firewall Design 5 years 2011 Good TCP/IP 10 years 2011 Good
- East Stroudsburg University, East Stroudsburg, PennsylvaniaGraduated 2000
Bachelor of Science in Computer Science
- Advanced Search Tool
Period 2014 Company OrcaTec LLC Tools Python, jQuery, jQueryUI Platform Server: TurboGears, Browser (Cross Browser)
At OrcaTec, the primary tool we provided to our customers is the ability to search collections of documents quickly. We did this in a number of ways. We have a "simple" search that allows the user to fill in commonly used fields, and we have an "advanced" search that allows the user to do more complex queries.
The advanced search tool that we had allowed the user to search based on a dozen different fields, but was still limited in its ability. In particular, it was unable to allow the user to build queries which or'ed together different fields. In addition, the code was fragile, had issues with encoding <> in email addresses, did not support drag and drop on all of our supported browsers, and was easily broken depending on how the data was formatted when it was loaded into the system.
This project was to remedy all of these issues. It involved a complete rewrite of the tool. When the work was done, this tool had transformed noticeably. It now is its own miniature investgative tool, allowing customers to easily dig through the documents and zero in on the documents relevant to the matter at hand. One customer reported narrowing their searches from 80,000 possible documents down to under 2,000 within an hour through use of this tool. Due to extensive test coverage when the code was published, even the problems that were found were quickly fixable. All of this was accomplished while reducing the total code for the tool by 50%.
- Paster to Apache/mod_wsgi Conversion
Period 2013 Company OrcaTec LLC Tools Python, Apache, mod_wsgi, Paster Platform Ubuntu Linux
Paster is meant to be used in a development environment, allowing the developer to use a (single threaded) lightweight, easily managed webserver while writing code before it goes to production. At OrcaTec, we were using Paster both in development and in production. Due to the demands being placed on Paster (in many instances, loading up documents that were over 100M), the entire system could appear to one user to freeze up due to it responding to a request from another user.
We did have some pitfalls to work through. The most notable was our need to locally compile mod_wsgi and Apache. Due to constraints on our stack, using the operating system provided versions was not workable. In the end, I completed the conversion, and the issues we were experiencing were resolved. The main work was simply incorporating the programs into the stack, and assuring that the configuration was as easy and automatic as possible.
- SAP to Tyler Conversion
Period 2011 Company 6th Avenue Electronics Tools AutoIt3, CentOS Linux, Python Platform Server: CentOS Linux, Client: Windows
6th Avenue Electronics found that SAP was not a workable solution for them. The decision was made to switch back to the Tyler POS system. They would do a new installation, though, so that mistakes made with the old system could be removed, and the system could be more easily maintained. I was tapped to manage many of the technical aspects of the migration, while my immediate managers would handle the business aspects.
Due to the costs associated with SAP, we had just over three months, in total, to complete the transition. We were successful.
- Wrote several one-off scripts to check data that was sent in various Excel spreadsheets. Validate that all entries in column A of File 1/Sheet 1 are in Column C of File 2/Sheet 1.
- Used AutoIt3 to automate the update of several items that could only be keyed into the client. No import existed at all. This reduced work from several hours down to an hour (including the initial script creation).
- Developed an automated installer that was used to handle installing all components (receipt printer, fonts, initial configuration) on every machine in the company.
- Worked with Tyler Retail Systems to configure the server properly.
- Developed snapshot backup strategy that reduces downtime for Tyler to mere minutes per night.
Period 2010 Company Datapipe Tools FreeBSD, Python, Apache, PostgreSQL, TurboGears Platform FreeBSD, Web Browser
Datapipe manages thousands of servers. Many of these servers are connected to various shared storage systems, including 3Par, Isilon, and backup servers. Datapipe required an ability to do reporting on what data was being stored on these systems for each client, and then report that data back to billing. StorageWeb was written to fill that need.
- Debugged issues with Python, FreeBSD, Apache, and modwsgi. Turned out to require specific compilation options to get these all working correctly.
- Developed web interface that would allow users to drill down and see how the storage was being used (by client, by server, by data center, by storage type).
- Developed multi-threaded backend daemon which connected to the various storage systems and gathered the data about the stored data for reporting.
- Developed backend daemon that pushed aggregate data to the billing system, allowing billing to finally happen for all clients.
- PyTyler - Tyler POS to PostgreSQL Migration Tool
Period 2007, 2011 Company 6th Avenue Electronics Tools Python, PostgreSQL, Tyler POS System Platform HP-UX, Debian GNU/Linux
Tyler is a point of sale system used by many smaller retail establishments. Tyler stores data in a set of proprietary ISAM files. These files do not have a modern access tool available (such as Crystal Reports) to perform reporting.
The users needed an easy way to report on the data, and this meant a tool was needed to copy the data from the on-disk files into a formal SQL server of some variety. In less than a month, I wrote a tool in Python to read the Tyler data files and load the information into a PostgreSQL database on a nightly basis.
This tool copied the entire database, comprising approximately 36,000,000 records, 140 tables, and 22 gigabytes of disk space. The program worked by reading the structure definition from the configuration files and recreating the structure in PostgreSQL. PyTyler would then read each table, row by row, parse the data in the row, and load it into PostgreSQL server.
This allowed the users to use standard ODBC drivers to access and report on the data.
- Developed a tool to read configuration of ISAM files, and generate SQL "create table" statements mirroring the structure of the file.
- Created a specialized reader class which could read the data stored in the ISAM table.
- Developed small web server application to provide status page for administrators while migration tool runs
- Reduced total run time from 13 hours to 5 hours by converting the entire application into a multi-threaded application.
- Verified that data is being copied into the system correctly.
- Tyler POS system was in production until the closure of the company in December, 2011, so data copy ran every night to bring in updated data from previous day's activities.
- SBN Implementation
Period 2004-2005 Company Diversified Systems Tools SBN, Sybase 11.0, PHP Platform Microsoft Windows 2000, Debian GNU/Linux
SBN, published by IBSoft, is an ERP system for the alarm industry. Diversified Systems is a subcontractor working in the low voltage electrical industry, including alarm systems, stereo systems, central intercom systems, structured wiring, and central vacuum systems. I implemented all aspects of SBN at Diversified Systems.
The provided client interface was unsuited for the intended use. This resulted in much in-house development to augment the SBN client with a web-based interface.
- Configured all aspects of SBN from base installation to full production mode, with active communication with users at each step.
- Implemented over 50 custom screens and reports using PHP on an Apache web server. This included easier access to customer searches, more usable technician schedules, and easier input for large quantities of data.
- Developed automated system for the sending of faxes to field technicians,saving over 5 work hours per day.
- Implemented an automated backup system for the database.
- Administered Sybase instance on day to day basis, resolving issues with full log files, etc.
- VMWare Implementation
Period 2005-2007 Company 6th Avenue Electronics Tools VMWare Virtual Infrastructure 3, VMWare Virtual Center Platform Linux (Various distributions), Windows Server 2003
- Installed and configured iSCSI based SAN disks.
- Installed and configured all aspects of VMWare Virtual Center and VMWare Virtual Infrastructure 3.
- Developed (and tested) virtual machine templates to allow rapid deployment of new virtual servers using various operating systems (Windows XP, Windows 2003, Debian GNU/Linux, RedHat Linux).
- Monitored daily usage of VMWare hosts.
- SQL-Ledger Implementation
Period 2005 Company Diversified Systems Tools Perl, Apache Platform Apache, Debian GNU/Linux
- Authored script to automatically migrate necessary data (customers, bills to be collected, etc.) from SBN to SQL-Ledger.
- Installed and configured SQL-Ledger.
Period 2001-2002 Company Ciber, Inc., contracted to IBM Tools Perl, Cygwin, GNU Make Platform Server: AIX, Client: Windows NT
IBM was under contract to develop a complete clinical information system for Kaiser Permanente clinics. I participated as a member of the environment team, focusing on improving the build processes.
- Resolved issues with corrupted builds occurring weekly, resulting in savings of over 1000 work hours every week.
- Developed and improved approximately 450 compilation scripts and Makefiles on AIX and Windows NT/2000, fixing dependency issues and allowing reliable use of nightly code compilations.
- Evaluated, tested, integrated, and deployed new compilation tools.