|
Chris Morris Denton, TX 940-594-1235 resumeI'm a Senior Software Developer with over 15 years of experience developing object oriented client/server applications for Windows, process automation and agile process management. I'm interested in TDD, object oriented design principles and open source.I've been employed on a wide range of applications including an interactive 3D rendering engine, timecard processing, unattended Windows services and have been responsible for coding and supporting a public SDK for interfacing with custom hardware. Roles have included coding, quality assurance including custom integration test automation, team leading and process training. My standard resume information is available at LinkedIn (PDF version). portfolioCommercial WorkeInstructionCPSThe Classroom Performance System by eInstruction provides students with wireless remotes allowing teachers to get quick feedback from their class. It can be used for anything from opinion polls during lectures to administering standardized tests. Receiver SDKThe Receiver SDK grew out of the original CPS J++ codebase. After a couple of large refactorings, another developer and I had isolated the code for communicating with our hardware into a rough API. I eventually became sole maintainer and developer of the API and later worked to remove any lingering J++ dependencies leaving us with a pure Java solution. ChrismoControl & HindsightChrismoControl is the tongue-in-cheek name for the collection of custom Ruby scripts I wrote to provide continuous integration for our J++ application. It included all of the CI basics - pulling sources from version control, detection of changes, incrementing build versions, code compilation, test execution, deployment and email and rss notifications. Not the prettiest thing in the world, but it worked well. A co-worker added build automation for our installers and a simple web front end to allow single button push builds by anyone in our department. Snelling Staffing ServicesDocuTIMEDocuTIME is a custom timecard processing system written in Delphi against a SQL Server database. DocuTIME was built to replace an aging DOS application used in many Snelling branches and franchises for sending payroll data to corporate on a weekly basis to get checks cut for temporary employees. The system includes DocuTIME proper, a Windows client/server application that integrates with the database of a third party application called eEmpACT; DocuTIME Extraction and Transmission module for weekly transmissions of data to corporate; and DocuTIME Gateway, a multi-threaded Windows service for receiving all branch office transmissions, queuing them for import into PeopleSoft and notifying end users of status. I wrote a good portion of the front end piece, plus all of the Transmission module and DocuTIME Gateway. T-SQL Schema Ruby DSLAs DocuTIME was deployed to more branch locations, we accrued issues with supporting the installed schema. Out of this work I developed a simple schema DSL in Ruby that would generate different T-SQL scripts for validation, installation and upgrades. Web Application SupportAt times I helped support our in-house web app development, at one time building a small, home rolled VBScript unit test framework, and another using (what later became) Watir and DRb to do execute some web tests against 3 different versions of Internet Explorer on separate machines (not being able to have multiple versions installed on the same machine). ERPITIMSAs one of the original developers of TIMS (v 1.0-2.4), an electric utility application to record, transmit and store inspection data of transmission line assets, I built a custom interactive 3D graphics engine in addition to some general OOP development. Written in Delphi, the field app was designed for hand-held pen-based systems. I was also responsible for much of the schema design, the installer and build engineering, and eventually was lead developer on a team of 5 coders. Open SourceWindowsDvorak AssistantDVAssist is a utility for toggling between Qwerty and Dvorak layouts on Windows with a configurable hotkey. I originally wrote it because the built-in toggling support in earlier versions of Windows was flaky and not easy to use. Version 1.0 also included a stay-on-top window displaying the current layout, to aid with heads-up training. To help serve the international Dvoraker, version 2 is no longer hardwired to US Qwerty and will toggle between any layout and Dvorak. While Windows support for toggling layouts has improved, the tool has remained popular with users on public machines (typically at universities) that do not have access to change the keyboard layout through regular means. Outlook MonitorEarlier versions of Outlook had no way to turn off the new mail tray icon. This drove me crazy because I subscribed to many mail lists and all of that activity rendered the notification icon useless for me. I wanted to be able to restrict it to only displaying when I had email that stayed in my Inbox (mail list messages getting filtered off to other folders) -- that usually meant important business email that I did want to be notified for. Disk Usage for WindowsAt some sweet spot in the recent past where I had big enough drives to make it easy for large dirs of temp folders to sneak about stealing space, but not big enough drives for me to ignore the leeches, I wrote cLabs Disk Usage for Windows, based on a nifty utility called DUW by Markus Seger. Both tools will show recursive totals starting at the top level folders for a drive and allow you to drill down. The first improvement I made on Markus's tool was to compensate for amount of disk space used by files, not just file size. Some other improvements followed at later dates, including file count data and data by file extension. Despite its lacking in good (meaning 'any') UI feedback during the time consuming calculation phase, I continue to use this tool to hunt down unexpectedly large folders wasting space on my drives. DUnitNear the end of 1999, the short-lived Borland Developer News published an article on DUnit, written by the guy who'd ported it from JUnit, Juancarlo Anez. This article was the beginning of all things Agile for me and I quickly started using his work. Not long after that I started whining about his work and Juanco was foolish enough to make me a co-admin on the project. I began making my first commits around August of 2000. I stayed fairly active with the project while I could still afford the time by doubling up during my day job working in Delphi. I've since left Delphi behind and DUnit with it - but I still browse the mailing list and Juanco hasn't kicked me out of the SourceForge project yet. Many thanks to Juanco for his introductions to a better way of doing things. MouseKeysBuild a better MouseKeys and the world will beat a path to your door -- unless you forget to actually post the thing anywhere. I'm a keyboard junky and got beat down one day fooling around with XP's built-in MouseKeys accessibility tool, so I decided to write my own. Mine, I think, has some better options for jumping around the screen faster when you need it, sort of like the acceleration settings for mouse movement. If you're curious, hit me up and I'll send you a copy. RubyclWiki & clIndexI had the privilege in the early oughts of hanging around Dave Thomas and other smarties on a regular basis via the DFW XP group. In addition to interesting process discussions, we got to hear tales of Dave and Andy's initial endeavors into Ruby. At the time I'd heard of Perl and Python, but not had the wherewithal to check them out. Hearing him talk about Ruby convinced me to check into it. XML Serialization for RubyIn 2002 I started working on an XML serialization library for Ruby. There were existing ways of doing this at the time, but I wanted to make a library that was simple to use. Not long after, YAML caught the attention of many, including myself, so my interest in maintaining the library waned. Check out its home page for details. BSD license. WatirIn 2001, I released a small Ruby lib for manipulating Internet Explorer with the sexy name of ClIEController. Brian Marick and Bret Pettichord picked up on it for some of their QA automation training and by 2003 a small group formed. I hosted a wiki for it -- still up for historical purposes (i.e. I'm too lazy to take it down). Bret and I did a presentation of the tool at Bret's 5th Annual AWTA in 2004. By August of that year, Bret made the push to evolve things into the Watir project and a thriving community has gathered around the tool. Bret has been the real backbone behind the project throughout and my involvement since these beginnings has waned as I've had less opportunity to do web work on my day jobs, but I'm hopeful future opportunities will give me time to contribute more to the tool as it continues to grow. casegencasegen is a handy test tool for generating use case combinations. It's written in Ruby and uses a simple external DSL. The goal of the tool is to generate all possible combinations from sets of variables, then eliminate certain combinations based on rules. While it can be difficult to figure out how to define the sets of variables, I've found the tool invaluable in certain situations for helping to provide good use case coverage. Rather than starting from a few positive cases and working in my head outward to think of some negative cases, the tool forces me to think through all cases to begin with and then define the rules that should eliminate cases the software should prevent or otherwise deal with. JavaCall Graph Eclipse Plug-inEclipse's call hierarchy tool is one of my favorites to work with. In some cases, though, it can be too much information to grok in the tree view widget. After a few manual trips taking the copy/pasted output and massaging it in a text editor into dot source, I decided to make a plug-in to do the work for me. Here's a screenshot of it in action. Open sourced under a BSD license. partikil & clParticleclParticle is simple 2D particle system I wrote in Java, and partikil is a game I built on top of it; both are open sourced under a BSD license. Each player starts with a small group of stationary particles of their color and a particle they can move in any direction, N, S, E, W. At any time each player can activate one of two actions at their current location, either drop an additional lump of stationary particles or drop a bomb to blow away any particles in the blast radius. The longer the player waits to do anything, the bigger the lump or the bigger the bomb. Also, the longer a player waits to do anything, the older and weaker (less blast resistant) their existing particles become. Once a player has all their own particles blasted off the board, they're out. Last one remaining on the board wins. partikil supports 3 simultaneous players on one keyboard. WritingPapersThe Case for XPBack when I was first studying XP, I decided to write a paper about it in hopes of presenting it at a Borland Developer's Conference to help further the cause within the Borland community, having already gotten involved with the DUnit framework. Unfortunately, my schedule wouldn't permit me to attend, so I only submitted the paper for inclusion on the conference's CD, but they did decide to publish it there. The Case for XP is a pretty straight-forward (i.e boring) read, but I think it a decent summary of Agile from the XP perspective. Blogki Technical ArticlesDebuggingOne part of the job I enjoy is tackling nasty debugging problems. I've written a few of these bug hunts up in my blogki (Martin Fowler has a bliki, I have a blogki. Mine sounds more Russian and macho, even if it doesn't have its own Wikipedia entry). Prepare yourself for mind-numbing details: Tools and TechniquesHere's a sample of articles detailing techniques and tool configuration. Software AppreciationOne of the things I like to collect in my blogki is articles that try to help capture the complexity of the craft. Grab BagFinally, a sample of entries on design and the craft in general. |