[Home | Contact | What's New? | Products | Services | Tips | Mike]

Michael David Crawford P.E.,
Process Architect

Software failure is fundamentally a human problem, not a technical one.

Purely technical solutions fail to effect truly meaningful and lasting change.

650 NW Irving St
Portland OR 97209


I strive to achieve quality, correctness, performance and maintainability in the products I write. I believe a sound understanding and application of software engineering principles is more valuable than familiarity with popular APIs or toolsets. In particular, this makes one flexible enough to handle any sort of programming task.

Please see: Do I Have the Skills to Write Your Software?


Process Architect - Solving the Software Problem - 5/2012 - Present

I aim to Solve what I call The Software Problem.

Software failure is fundamentally a human problem, not a technical one.

Purely technical solutions fail to effect truly meaningful and lasting change.

Chief Executive Officer - Dulcinea Technologies Corporation - 8/06 - 5/2012

Developing software products for retail sale. Wrote Warp Life for iOS: iPhone, iPad and iPod Touch. Custom Software Development for the iOS, Mac OS X, FreeBSD, Linux and Microsoft Windows. Coding for Cocoa Mac OS X Apps and Cocoa Touch iOS Apps in Objective-C; Mac OS X device drivers (I/O Kit Kernel Extensions) in C++. Virtualization with VirtualBox on OS X and Linux, and with Xen and KVM on Linux. Installation and configuration of the Apache Solr search engine software on Ubuntu, with data imported from Microsoft SQL Server using Transact-SQL. Development was done with Apple Xcode, Apple's iPhone SDK, the GNU Toolchain (GCC, GDB), the clang and LLVM compilers, the OpenJDK for Java and Microsoft SQL Management Studio. Installation and configuration of Mac OS X, Linux (Ubuntu, Fedora, CentOS, Mint and Android), Windows XP and Windows 7, configuring and securing the Apache httpd web server.

Software Design Engineer - Microsoft - 9/2010 - 10/2010

Contract job writing application software for Mac OS X

MiB Team - Sony Ericsson Mobile Communications - 1/2010 - 3/2010

Google Android platform development as one of the “Men in Black.” Specialist in debugging and tuning the performance of a consumer electronic product's operating system running the Google Android Embedded Linux Distribution on an ARM core. Lent to our Board Support Program Team to assist in the bring-up of software support for hardware power management. Development is hosted on Ubuntu Linux with the GNU Toolchain.

Consultant - Data Robotics - 10/2009

Debugging a Mac OS X IOKit iSCSI initiator (storage driver) to enable its use within the 64-bit Snow Leopard operating system kernel. Use of Xcode development system, two-machine kernel debugging with GNU GDB.

Consultant - GuardianEdge Technologies - 5/2009 - 8/2009

Developing a Mac OS X IOKit disk drive encryption driver (IOMedia filter) in C++ with Apple's Xcode development system. Kernel debugging with GNU GDB in the two-machine configuration. Writing a user interface in Objective-C with the Cocoa application framework.

Consultant - Prgmr.com - 3/2009 - 5/2009

Programming the Xen virtual machine and the Linux and FreeBSD kernels as part of the effort to support FreeBSD as a DomU (guest operating system) under Xen. Coding in C and Intel assembly with the GNU toolchain.

Principal Software Engineer - Applied Micro Circuits Corporation - 7/2007 - 10/2008

Maintaining Mac OS X Kernel Extensions (device drivers) for AMCC's line of Serial ATA (SATA) and Serial Attached SCSI (SAS) RAID controllers. Use of the GNU Debugger GDB for kernel debugging, programming in C++ with Apple's Xcode development environment.

Software Engineer - Atimi Software - 8/2006 - 5/2007

Custom software development for Atimi's clients. Projects include a Mac OS X ColorSync color management Photoshop plugin, a Windows file format engine, and iSCSI, SAN and RAID storage software. Use of the Apple XCode and Microsoft Visual Studio development environments in C++ and Objective-C.

President - GoingWare, Inc. - Expert Software Development and Consulting
1990 - 1997 (part time), 1998 - 8/06 (full time)

Custom software development for worldwide clients, including software publishers, financial investment firms, application service providers (ASP), commercial web sites, and embedded device manufacturers. Projects have so far included:

  • Commercialized GoingWare's Bag of Programming Tricks through publication of Google AdSense advertising and affiliate ads for books. 9/2004 - Present

  • Porting a C++ Universal Disk Format (UDF) filesystem driver to DSP/BIOS to run on top of the SBP2/SCSI support I previously implemented for Zaxcom. 2/2004 - 6/2004

  • Writing a Mac OS X SCSI pass through device driver for Indigita Corporation, consisting of a kernel extension with driver subclass and user client, Core Foundation plugin and test harness. The device driver allows sending arbitrary SCSI commands to Indigita's USB and FireWire storage bridge chips from a user application for diagnostic purposes. 6/2003

  • Implementing Serial Bus Protocol 2 (SBP2) initiator and SCSI storage I/O support in an embedded system for Zaxcom. 2/2003 - 9/2003

  • Embedded systems development and Mac OS X device driver (IOKit) programming for WiebeTech. Customizing the firmwire of the Oxford Semiconductor OXFW911 high performance IEEE 1394 to IDE/ATAPI bridge to enable WiebeTech to produce some unique FireWire products such as the Forensic Drive Dock and FireWire Encrypt. The development was hosted on Windows 2000, targeting an integrated ARM7TDMI core. Programming SBP-2, RBC, IDE and SCSI device drivers and implementing the Advanced Encryption Standard (the Rijndael block cipher) in ARM and Thumb assembly code. Developing the firmware for an unannounced FireWire product using the uCLinux embedded Linux distribution. 5/2002 - Present

  • Creator and lead developer of the Linux Quality Database, initially conceived as an easy to use bug reporting system for the Linux kernel developers, it has evolved into an online software quality publication. The articles section serves as advocacy for the importance of quality in writing Free Software and provides information to enable developers to achieve quality in the products they write. This is an ongoing volunteer effort. 12/2000 - Present

  • Financial application programming for Win32 on Windows NT and Windows 2000 using Microsoft Visual C++ and the Standard Template Library (STL). Architecting and implementing a special-purpose database API and file format. Writing database import and export code. Creating a complex Win32 DLL. Writing test software, example code and documentation. Extending the capabilities of the database beyond its initial specification. Performance tuning, including use of Intel VTune Performance Analyzer. 6/2001 - 8/2002

  • Designing and implementing a fault tolerant database file format for use with ZooLib for Learning in Motion. 4/2001 - 5/2001

  • Working on a Mac OS graphics product written in C++ and MetroWerks PowerPlant for MGI Software (later acquired by Roxio) to resolve quality issues and prepare the product for final release. 2/2001 - 3/2001

  • Collaborating with CommerceFlow's team to develop a business-to-business eCommerce protocol based on XML messages. Protocol design, writing Document Type Definitions (DTDs) and sample documents for the protocol messages, and writing a parser in Python with the PyXML library to do custom processing of the DTDs. Development was done on a Debian GNU/Linux system. 11/2000 - 1/2001

  • Writing BeautyRiot's Instant Makeover, a Windows and Macintosh GUI consumer application in C++ that includes image editing and interaction with a web server. The GUI was written with ZooLib, a cross-platform library developed by the Electric Magic Company. Includes the use of the Standard Template Library (STL), the XML file format using the Xerces-C++ library from the Apache Software Foundation and JPEG format code Independent JPEG Group's LibJPEG library. 12/99 - 10/2000

  • Writing a server-side Java 1.1 web application with the Enhydra application server, MySQL, JServ, and Apache HTTPD on Linux for ClickRebates. Used the AnyJ Java source debugger from Net Computing to debug the Enhydra application. Database programming in SQL. 11/99 - 12/99

  • Converting a scientific instrumentation control application written in C++ for the Mac OS (MacApp) to Java 2 with Swing (to be run on Windows NT) for Coastal Software Group. The instrument was controlled via a serial protocol that used the javax.comm package. 9/99 - 11/99

  • Writing a gesturing application in C++, C and 68000 assembler on the MacOS in Metrowerks PowerPlant and the C++ Standard Template Library (STL) for Sensiva, Inc. The application catches the drawing of user-defined symbols on the desktop and reacts by running hot keys and menu selections, text typing, Apple Scripts, and other actions. 3/99 - 8/99

  • Writing an Adobe Photoshop Import plugin to drive a Konica RX-1 SCSI film and slide scanner for Image Software. The SCSI code uses both the Mac OS SCSI Manager 4.3 (an implementation of CAM) and the old SCSI manager. The user interface is written in Metrowerks PowerPlant. 8/98 - 9/98

  • Providing an expert evaluation of a Windows and Unix Web development program which may be purchased in source code form by my client. This has involved judging the suitability of the program for my client's purposes and will involve an inspection of the source code. 9/98

  • Porting Cycling '74's MAX MIDI application from MacOS to BeOS. 7/98 - 2/99

  • Writing scanner software on the Be operating system for BeatWare. I wrote three layers: a device driver that uses the SCSI-2 Common Access Method (CAM) to communicate with the scanner, scanner add-ons or drivers for the HP ScanJet, Umax Astra, and Apple Color OneScanner, and a C++ application to allow the user to operate the scanner and create TIFF files. 4/98 - 7/98

  • Reverse engineering a project scheduling file format for Graphical Planet. By making many small example files, studying them with a hex editor, and observing the effect of small changes, I was able to deduce and document the file format, and write a program to dump out a human-readible interpretation of arbitrarily complex files. 4/98

  • Porting Working Software's Spellswell from the MacOS to the BeOS operating system, and from BeOS for PowerPC to BeOS for Intel Pentium. This included implementing the Word Services Suite on BeOS to allow word processors to communicate with spellcheckers. Spellswell received an Honorable Mention in the BeOS Master's Awards. 2/97 - 4/98

Past clients also include MacEurope Information Systems, Medior, and Geonex Verde.

Senior Software Engineer - WebCom - 12/97 - 3/98

Modifying the Apache web server source code for use by a web hosting service. TCP/IP sockets programming on Solaris and Linux using the Gnu C compiler. Also installing Microsoft Frontpage server extensions.

Software Developer - Live Picture, Inc. (since acquired by Roxio) - 1/97 - 11/97

Writing an object-oriented photorealistic image editing and compositing application in C++ on the Macintosh with Metrowerks PowerPlant. Also debugging a Netscape Navigator plug-in for viewing images in the FlashPix file format.

Senior Software Engineer - KnowMed Systems Inc. - 9/96 - 12/96

writing an object-oriented electronic medical records application in SmallTalk for Windows 95. Implementing user interface, writing client code for Gemstone object-oriented database engine.

Senior Engineer - Apple Computer, Inc. - 3/95 - 8/96

(a.k.a. "Debug Meister") Macintosh Operating System debugging and performance tuning. I identified the problem component for bugs that were not yet understood, and either assigned them to the responsible engineer or fixed them myself. I also determined whether third party application crashes and malfunctions were caused by bugs in our new system software or by a programming error in the application, with the aid of disassemblers and low-level debuggers. Extensive use of 68k and PowerPC assembly code.

Work included diagnosing kernel code such as PCI and network device drivers, virtual memory, process scheduling, and the dynamic recompilation emulator (for running 680x0 code on PowerPC) as well as such toolbox components as QuickDraw graphics, QuickTime multimedia, memory management, printing and localization.

Analyzed the performance of system software code, wrote new performance tools and used the scientific method and proper statistical analysis to understand difficult performance problems. Rewrote a small portion of the operating system to improve its use of the processor's data cache, and wrote papers to aid other engineers in tuning their own code. Wrote user interface to infrared networking software for PowerBook laptop computers

Software Engineer - Medior, Inc. - 6/94-3/95

Writing Interactive Multimedia CD-ROM applications for the Macintosh. Invented and implemented a novel bitmapped graphics lossless compression algorithm and file format. (Medior has since acquired by America Online.)

Research and Teaching Assistant - University of California Santa Cruz - 7/93-4/94

Wrote Monte Carlo simulation software for a particle physics experiment that is searching for non-conservation of lepton number. Worked at the experiment at CERN in Geneva, Switzerland. Taught introductory physics lab (Physics 7a).

Product Development Manager - Working Software, Inc. - 11/90-6/94

Wrote Macintosh software for retail sale in Think and MPW C, and 68000 assembly. Extensive debugging of existing programs. Products include Control Panels, Desk Accessories, Device Drivers, Extensions, Applications, 4D Externals and Installer scripts. This includes experience with printing code (including Postscript programming), patching the operating system, and debugging CoreEdit word processing engine in assembler. Ported DOS dictionary and thesaurus application to Macintosh. Consulted to a client company on debugging. Led collaboration with other companies to develop the Word Services Apple Event Suite, the standard for linking spellers, grammar checkers and other text services to Macintosh applications. Spoke on Word Services at the 1992 Worldwide Developers Conference, the March 1993 Software Entrepreneurs Forum Mac SIG, and the 1994 MacHack Conference. Demonstrated products at user group meetings and trade shows. Hired, trained and managed our tech support, assisted with tech support, sales, marketing and production.

Macintosh Software Tester - Apple Computer - 11/89-10/90

Contract job testing the MacTCP 1.0.1 and 1.1 TCP/IP network stack. Ran test suites, ported test tool from Macintosh Programmer's Workshop 2.0.2 (Kernighan and Ritchey C) to 3.1 (ANSI C). Debugging asynchronous I/O using the Macsbug and SADE debuggers. Use of network protocol analyzers. Assisted the A/UX group in testing the MacTCP implementation in Apple's UNIX port. Studied the security of A/UX: reported several serious security holes to the A/UX team. Wrote test plan to ensure compatibility of MacTCP with future operating systems and hardware (System 7, virtual memory). Compiled Open Source BSD Unix VAX source code into SunOS kernel to enable network testing. Designed and wrote new test tool in C++.

UNIX System Administrator - Octel Communications - 4/89-11/89

Contract job on a network of four Sun 3 servers, eight workstations, and about 90 AT's and 386's running DOS with PC-NFS or SCO Xenix. Maintenance and development of software tools, evaluation and administration of source code control systems, installation of GNU Emacs, GNU C compiler (gcc), X Windows, TEX and the Usenet News. Troubleshooting and building serial and Ethernet cables. Installation of SunOS, disk controllers, Sun workstations and file servers, formatting SMD disks, configuring modems.

Programmer - Verde Technologies - 11/87-4/89

Wrote image processing software in C for an agricultural remote sensing company on a Sun 3/160. Programs written include calibration for CCD camera response (field flattening), geometric distortion, and sun shading, and color drivers with dithering for the Tektronix 4696 and Howtek Pixelmaster printers. Wrote documentation in UNIX "man" format. Developed a useful set of procedures for rapidly debugging code. Maintained local source code hierarchy with SCCS and Make. System administration, including networking two Suns and a Compaq 386 with Sun NFS, UUCP mail, maintaining backups, fixing cables, modems, and color inkjet printers, and programming GNU Emacs Lisp. Updated frame grabber device driver for compatibility with new release of SunOS. Sent to Denver, Colorado for two weeks to debug an InterGraph CAD system on VAX/VMS: VMS system tuning, wrote command procedures for plotting.

UNIX Technical Support - Microport - 11/86-4/87

Telephone support on UNIX variant Microport System V/AT for the IBM AT (80286 and 80386).

Programmer and Manager - Sapiens Software Corporation - 6/86-8/86

Managed programmers writing Star Sapphire Common Lisp, a Common Lisp interpreter in C for the IBM XT. The product was unique in that it implemented virtual memory in software to run on the 80286 processor, which was not equipped with a hardware Memory Management Unit. Coding and debugging a very complex program. MS-DOS system administration.

Teaching Assistant - California Institute of Technology - 9/84-12/84

Taught Computational Physics (numerical analysis) in C, Pascal and FORTRAN to students using the IBM XT.

Summer Undergraduate Research Fellow - California Institute of Technology - 6/84-9/84

Research in astronomy: observed with the Palomar 60 inch telescope CCD camera, analyzed data on a VMS VAX with FORTRAN.

Research Assistant - California Institute of Technology - 6/83-9/83

Prepared Color-Magnitude diagrams from CCD photos of globular clusters. Collected spectra with the double spectrograph on the Palomar 200 inch and took CCD images with the 60 inch telescopes.


Graduate study in Physics at the University of California Santa Cruz: electricity and magnetism, electromagnetic waves, plasma physics, quantum mechanics, special relativity. 9/93 - 4/94

B.A in Physics at University of California Santa Cruz : classical and quantum mechanics, optics, digital electronics, electromagnetism, psychology, social psychology, drawing and painting. 4/85-12/87

Two years studying Physics at the California Institute of Technology, Pasadena, CA. Also mathematics (calculus, differential equations, linear algebra, vector calculus, probability), astronomy, computer science (languages, data structures, algorithms, graphics and numerical analysis), biology and chemistry. GPA is 3.1. 9/82-12/84

Professional training (typically three day seminar classes)


For a complete list of publications, see http://www.warplife.com/mdc/publications/

Commercial Products I Have Shipped

For a list of the products I have written, see http://www.warplife.com/mdc/resume/products.html

[Home | Contact | What's New? | Products | Services | Tips | Mike]