Michael J. Hammel

Principle Software Engineer

12914 Elkhorn Cir.
Broomfield, CO 80021
832-754-8755 (c)
mjhammel@graphics-muse.org / michaelhammel@acm.org
http://www.graphics-muse.org
http://www.linkedin.com/in/mjhammel

Professional Objective

Embedded Linux systems, including architecture and design, build systems, and user interfaces.

Experience

25+ years of software development on Unix, Linux and open source systems in R&D environments for the storage, computer system, government and telecom industries.

Operating Systems / Firmware

Linux kernel, Linux Distributions: Red Hat, Fedora, CentOS, Ubuntu, Debian, Gentoo; UNIX System V R3/R4, Das U-Boot, Coreboot

IoT and Embedded

AES over REST, Arduino, ESP8266, GPIO, Raspberry Pi, WPA Supplicant, hostapd, Linux from scratch, pthreads, shared libraries, PiBox and Ironman projects

Development tools

C, sh, bash, ash, dash, Buildroot, Busybox, Crosstool-NG, kconfig-based configuration and builds, BDI2000 JTAG programmer, Git, Mercurial, CVS, Jira, Redmine, Flyspray, Bugzilla, gcc, gdb, cross compilers, GNU Make, autoconf, imake, libvirtd, qemu, virt-manager, RPM, Debian and opkg package management, Wordpress, Java, SWT, JPF, Perl, PHP, XML, X.org, GTK+/Cairo, HTML, DHTML, CSS, Javascript, NodeJS, Docker

Publications

Freelance author, Linux Journal

Columnist, Linux Format Magazine (UK), Future Publishing, 2002-2010

Senior Editor, LWN.net, 2000-2001

Artists Guide to GIMP Effects, No Starch Press, 2006, 2nd edition 2012

Essential GIMP for Web Professionals, Prentice Hall PTR, 2001.

Artists Guide to the GIMP, SSC Publishing, 1999.

GTK+ Programming, SAMS, published 1st Quarter 2000 (authored the 2 chapters on GLib programming)

The Unix Web Server Book, Ventana Press, published December 1996 (co-authored; responsible for Graphics and Multimedia chapters)

Selected Writings

Building a Voice-Controlled Front End to IoT Devices, Linux Journal, June 2018

Custom Embedded Linux Distributions, Linux Journal, February 2018

Managing KVM Deployments with Virt-Manager, Linux Journal, January 2011

Comparing MythTV and XBMC, Linux Journal, May 2010

Mongoose: An Embeddable Web Server in C, Linux Journal, April 2010

Running Remote Applications, Linux Journal, February 2010

Ximba Radio: Developing a GTK+/Glade GUI to XM Satellite Radio, Linux Journal, September 2004

An Introduction to GTK+Programming, Linux Magazine, June 2001

The History of XFree86, Linux Magazine, December, 2001

Education

B.S., Computer Science, May 1987
Texas Tech University, Lubbock, Texas

Talks

SXSW – South by Southwest, panel member, March 2002

Atlanta Linux Showcase, October 2000

LinuxWorld, February 2000

Atlanta Linux Showcase, October 1999

Career Highlights

Senior Software Engineer, Platform Engineering
NetApp, Inc (re: Solidfire)
September 2017 – Present

Member of Advanced Project Lead team, working on lightweight Linux distribution with Docker for cluster managed deployment of container services. Implemented product installation processes to transition from server installation paradigms to embedded bank switching technologies using Linux overlays and squashfs distributions. Defined tasks required for long term migration to bank switching installations. Led virtualization development effort in platform team for lightweight version of product for demonstration purposes, including work on virtualization compatibility and encryption of the root file system.

Technologist, Firmware Engineering
WD, Inc (re: HGST, Inc)
February 2015 – July 2017

Designed and implemented host-to-firmware-and-back message passing and logging components in C for embedded NVme fabric product. Designed and implemented user space components - web server, command line utilities and remote client - in C and Javasccript/NodeJS for user management of fabric hardware. Defined RESTful API for management software. Implemented automated unit tests across all levels of firmware and host side software. Forward ported code from previous projects into fabric project.

Designed and implemented custom Linux distribution based on Debian for embedded virtual hard disk product. Implemented package release cycles, build systems, package repositories and associated DNS support, automated update systems for development and field use and disk imaging and release process for both internal and factory use.

Principle Software Engineer
Colorado Engineering, Inc.
June 2006 – November 2014

Responsible for cross toolchain, bootloader, kernel, root file system and applications development for internally developed hardware based on x86 and PowerPC processors utilizing Crosstool-NG, Buildroot/Busybox, u-boot, AVR tools, custom kernels and drivers. Multiple metabuild systems drive Makefile-based builds with custom patches and configurations. Work includes JTAG and u-boot/Coreboot based flash partitioning and custom kernel and toolchain configurations and extensions to bootloaders and kernel. Implemented PCIe kernel driver with file system interface, ioctls, initial DMA support and interrupt handlers and user-space utilities to support mutliple FPGA-based PCIe devices. Defined specifications for FPGA to kernel, kernel to user space and user space to remote system data messaging. Defined data flows for complete radar system, mode management of multiple integrated FPGA-based boards and scheduling of development tasks related to milestone deliveries. User-space applications include cross-compiled, multithreaded and networked radar application, test tools, benchmarks, and Matlab/Simulink modeled radar emulator. Lead engineer responsible for all software project management, architecture, documentation and production planning duties for a multi-member, cross discipline and distributed team.

Designed a distributed grid computing environment including a simple cloud management environment utilizing embedded, chained web servers and VNC for web-based access to virtual machines. Configuration includes extensive virtual machine configuration with various Linux distributions using libvirtd/qemu/virt-manager tools. Also implemented a digital signal processing and steganographic analysis grid application.

Architected, designed and implemented distributed agent technology for satellite health management. System uses dynamically loadable personalities in a discovery-based network of agents, embedded web servers for command and control and application-independent protocol processing.

Other duties: Implementing grid services for Air Force weather systems. Signoff responsibility for software components of all corporate deliverables. Mentor senior and junior engineers on software design and practices. Defined and implemented production process, software release process and product plans for in-house developed boards and software products. Write software oriented contract proposals. Configure and maintain corporate project-management wiki, issue tracker and SCM servers and software lab. Manage and direct general maintenance of corporate network.

Senior Software Engineer
Octopus Development Group
DRS Technologies, Signal Solutions Colorado
April 2005 – April 2006

Responsible for overall design and implementation of custom embedded Linux distribution for high-end, blade-like system. Defined and implemented embedded root file system layout based on Busybox toolset and MontaVista Linux platform. Created build system for custom Linux distribution based on LinuxFromScratch methodologies. Modified and maintained high speed network driver for HyperTransport/SPI-4 interface for a 2.4 kernel. Focal engineer for design issues from kernel level through distribution and applications support, including work on 2.6 port and clustering software integration. Lead developer for all tools, including CVS management, build system, Wiki and blog installation and maintenance and overall developer tool specifications.

Senior Software Engineer
Control Tower Software Group
RLXTechnologies, Inc.
Nov 2003 – December 2004

Designed and implemented automated full image and upgrade build and developer test systems for Linux based (Red Hat and Debian) blade management product including automated remote testing facility using template build system utilizing GNU Make, Perl, CVS, wget, RPM, alien and related tools. Formally documented implementation describing build process, tools and related resources.

Worked on integrating features to a uClibc/Busybox based embedded environment. Responsible for developer tools for debugging, profiling, encoding and caching of PHP based management system, including integrating CVS with bug tracking system and online blogging software. Built and packaged in RPM format PHP, PostgreSQL and numerous inhouse applications. Implemented Linux LiveCD based factory installation software based on Morphix distribution. Installed and managed Wordpress blogger, PmWiki Wiki software, and Qmail for integration with blogger. Established APT repositories for use with RPMs. Built and managed upgrade distributions for field released products.

Additional responsibilities included managing hardware resources for developer group, including CVS, archive, DNS and DHCP servers, test blade and 1U systems and accompanying peripherals and network systems including VLAN management on Cisco switches. Maintained Wiki system and content to keep track of all resources, developer documents and processes used by the Control Tower Software team.



Senior Software Engineer
Hardware
Diagnostics Group
Panasas,
Inc.
April
2002 - February 2003

Responsible for the design, implementation and deployment of a distributed test harness written in C and used for automated testing of blade server systems in both the hardware design facility and in factory production. System included general infrastructure for link list and task management, distributed status handling using a TCP based protocol, and user interface features based on GTK+, ncurses and Web browsers. Also responsible for diagnostic test tools used in certification of both memory and hard drive subsystems. Over 15000 lines of new code, plus management of existing code base under both Perforce and the Cons build environment.

Senior Editor
LWN.net
September 2000 - November 2001

Responsible for day to day editorial management of various parts of a news oriented web site with over 2 million unique visitors a month. Processed content for the Daily Page, requiring sifting through news leads, finding, reading and selecting, and posting material appropriate for that page. Daily Page used as content primer for Weekly Edition. Wrote lead in articles based on development research and personnel interviews and edited various pages of Weekly on as needed basis. Covered issues including Desktop Linux, Security, Distributions, Development and Commerce. Wrote numerous Front Page editorials. Primary editor for site while Managing and Executive Editors were out of contact, usually once or twice a month. Minor coding work for site maintenance.

Senior Software Engineer
Samsung Telecommunications America
November 1997-February 1999

Responsible for development, test, and installation issues related to base station management system for digital PCS network. Work includes analysis and documentation of Graphical User Interface designed and implemented in Korea, extension of GUI for new features, and overall understanding and debugging of Unix-based daemons and tools. Lead engineer for all Unix-based development.

Senior Engineer
EMASS, Inc.
June 1996 - November 1997

Designed and implemented Motif based UI and daemon for AMASS file system administration, including generic AMASS API libraries for use with Command Line Interface (CLI) tools. Libraries include signal wrappers, link list management, work file management, and AMASS API wrappers for querying the AMASS API. System being ported to multiple flavors of Unix.

Primary architect for new application layer features. Initiated formal development process, coding standards. Initiated the use of product plans and schedules. Responsible for bug fixes in both application level and some kernel level code.

Lead Developer
Xi Graphics, Inc.
April 1995 - February 1996

Responsible for porting of OSF Motif 2.0 to various Intel-based Unices, including BSDI BSD/OS, Linux, and FreeBSD. Ported and packaged X11 XVideo extensions (server extensions and sample implementations of API library) Wrote HTML based documentation for these products. Designed and implemented an mSQL-based Web database using C programs. Responsible for evaluation of various UNIX based tools for graphic design (netpbm, gimp, etc). Established RCS tree and development tools for accessing, updating, building, installing and creating distribution packages. Developed initial Web site. Responsible for keeping an eye on related Usenet newsgroups and forming ideas and information for WEB site.

Contract Programmer
Aztek Engineering, through Adia Information Systems
November 1993 - February 1995

Wrote event-driven, streams-based application code for Unix-based Interactive Cable Video system (GTE Mainstreet). Designed and implemented DOS-based TCP/IP gateway library. Designed and developed text-based front-end to database conversion utilities. Primary Test Engineer responsible for automating test facilities. Designed and developed Script Generator utilizing SQL for creating scripts used by a load-generating test facility. Developed new proprietary script format for verifying content of video and audio frames sent to a terminal access device connected to TV. Implemented automated tools for analyzing test results for validity. Designed and wrote Acceptance and Field Verification Test Plans.

Designed and implemented textual interface to embedded real-time telephone switching system for developers use in debugging. Implementation protocol for passing information between multiple tasks within the switch. Assisted in debugging of call processing and billing tasks and coordinated the integration of PC-based administration utilities with the switching system.





Independent Open Source Projects

PiBox, Ironman, Xeon: Architect, design and implementation of open source, DIY custom distribution (PiBox) aimed at consumer media and home automation products based on Raspberry Pi and Arduino compatible platforms utilizing Crosstool-NG, Raspberry Pi userland support, Buildroot, Linux and opkg customizations. PiBox metabuild system similar in scope to OpenEmbedded but based on GNU make. Built custom software stack and applications based on Android model but written in C/Cairo/GTK with limited php and NodeJS. Designed and implemented collections of apps for PiBox Media System and Ironman Home Automation. Implemented secure IoT communication based on REST APIs utilizing AES128 encryption. Developing custom phone, Xeon, based on PiBox and app ecosystem. Created, wrote and maintain project wiki and bug database. Make regular releases with code repository on Gitlab.org. PiBox has been ported for x86 embedded platform using Coreboot, used for minimal Linux platform with Docker, and formed the basis of two radar systems. URLs: http://www.piboxproject.com, https://gitlab.com/mjhammel, https://gitlab.com/pibox, https://gitlab.com/xironman, https://www.graphics-muse.org/wiki/pmwiki.php/RaspberryPi/RaspberryPi, http://redmine.graphics-muse.org

Jarvis: Experimental project for voice control of IoT devices, such as PiBox and attached home automation tools based on Arduinos. Component of IronMan project. URLs: https://www.graphics-muse.org/wiki/pmwiki.php/Jarvis/Jarvis, https://gitlab.com/xjarvis

Git Repositories: https://gitlab.com/mjhammel

XNotesPlus/XNotesNG: Personal Information Manager for Linux/Unix systems written in Java using JPF/SWT. URL: http://www.xnotesng.org

Other Experience

Presenter
MakerFaire, Denver, October 2018
MakerFaire, Colorado Springs, October 2016

Discussed and demonstrated PiBox configurations and media services as part of an effort to recruit developers to the project and to encourage the advancement of embedded development with Linux in Colorado. Demonstrated the PiBox Media Center video sharing services. Demonstrated Ironman home automation project.

PiBox Meetup Group, Colorado
October 2016 - Present

Founded a meetup group to encourage embedded Linux development in Colorado Springs, using the PiBox development platform as a basis to initiate discussions and projects. Gave an impromptu course on system design.

Chairman and Founder
Colorado Linux Info Quest
August 1999-October 2001

Founded the Colorado Linux Info Quest (aka CLIQ), a registered non-profit in the state of Colorado formed to provide a vendor neutral, community friendly and business focused conference and exhibit for the Rocky Mountain Region. Chaired the first event in April 2000, which ran with a $26,500 budget, including overall event management and management of the board of directors, handled all financial issues for the event, contracted and acted as primary contact for all exhibitors and sponsors, handled all event venue preparations, wrote and tested the Web-based registration system used at the event, handled all attendee registrations and the accompanying database management, handled all publicity and show signage issues and lead the volunteer board of directors who managed all other aspects of the show. Chaired the committee for CLIQ 2001, with similar duties and a budget of approximately $40,000. Managed second event from a remote location (Houston). Handled all tax and corporate filing issues. Both shows broke even. Non-profit dissolved by unanimous vote of board of directors in October 2001.