Michael David Crawford
P.O. Box 373
Owl's Head, ME 04854-0373
+1 (831) 401-3790
Note: GoingWare's Michael Crawford will be giving a talk on Subclassing an
I/O Kit Device Driver [ http://www.machack.com/content.php#Subclassing.IOKit
] (on Mac OS X) at MacHack [ http://www.machack.com/ ], which will be held in
Dearborn, Michigan from June 19th to the 21st. MacHack is a great conference
- please attend if you can.
GoingWare, Inc. seeks direct consulting clients who require custom software development.
Services are provided for clients worldwide.
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 knowledge of APIs or toolsets.
In particular, this makes one flexible enough to handle any sort of programming
- Embedded systems development, including microcontrollers and embedded Linux.
- Fluent in ARM, Thumb, x86, 68000 and PowerPC assembly, C, C++, Fortran,
Pascal, SmallTalk, Postscript, Python and Java
- Adept at using the C++ Standard Template Library (STL), as well as writing
new templates and exception-safe code
- Knowledgeable about algorithm analysis and algorithm design
- Able to implement cryptographic algorithms efficiently
- Experienced with XML, Document Object Model (DOM) and the Xerces [ http://xml.apache.org/xerces-c/index.html
] and PyXML [ http://www.python.org/sigs/xml-sig/ ] libraries
- Expert with file formats
- Designing new file formats
- Implementing format codecs and parsers as well as porting libraries
to new platforms
- Reverse-engineering formats
- Formats I have worked with include XML, HTML, JPEG, TIFF, FlashPix,
various word processor document and database formats and a lossless compressed
graphics format I invented
- Proficient at designing and coding multithreaded programs
- Very strong low-level debugging skills
- Macintosh (Classic and Mac OS X) and Unix and Linux operating system internals
and device driver programming
- Unix and Linux System administration, network and utilities programming,
- Self motivated. I taught myself most of what I know about programming, and
wrote many large programs mainly on my own.
- Shipped several new or updated commercial products, including applications,
MacOS extensions, Windows DLLs and embedded firmware.
- Porting experience - ported large programs from DOS to Mac, UNIX to DOS,
and Mac to BeOS
- Cross-Platform, including working with ZooLib [ http://zoolib.sourceforge.net/
], a multithreaded C++ cross-platform application framework, which can build
native executables for Mac OS, Windows, BeOS [ http://free.be.com/ ] and POSIX
flavors with XWindows (such as Linux) from a single sourcebase.
- Experience in network programming and testing (TCP/IP, AppleTalk, including
DDP, NPB, and PAP)
- Multiplatform experience: Macintosh, BeOS, Linux, Unix and X11, DOS, VMS
- Strong architectural skills (led industry-wide effort to develop Apple Event
protocol for spellchecking)
- SCSI Scanner drivers on MacOS and BeOS using the SCSI-2 Common Access Method
[ http://www.t10.org/drafts.htm#SWLAY ] (CAM)
- Other connectivity protocols I have experience with are IEEE 1394 (FireWire,
i.Link), Serial Bus Protocol 2 (SBP-2), the SCSI architectural model and IDE
- President - GoingWare, Inc. [ http://www.goingware.com:80/ ] - Expert Software
Development and Consulting (formerly Crawford Software Consulting) 1990 - present
- I do independent software consulting for clients worldwide.
I have worked on for my clients are:
- Implementing Serial Bus Protocol 2 (SBP2) initiator support in an embedded
system for Zaxcom [ http://www.zaxcom.com/ ] by porting Apple Computer's
FireWire Reference Platform [ http://developer.apple.com/firewire/platform.html
] to the DSP/BIOS [ http://dspvillage.ti.com/docs/catalog/devtools/overview.jhtml?familyId=44&toolTypeId=5&toolTypeflagId=1&templateId=5121&path=templatedata/cm/toolswovw/data/swbios_ovw
] real-time operating system running on a Texas Instruments TMS320C6711
digital signal processor. The software will allow users to attach mass storage
devices to Zaxcom's product via FireWire. Development done with Code Composer
Studio using a Spectrum Digital [ http://www.spectrumdigital.com/ ] XDS510PP
Plus JTAG emulator for debugging. 2/2003 - Present.
- Embedded systems development and Mac OS X [ http://developer.apple.com/macosx/
] device driver (IOKit) programming for WiebeTech [ http://www.wiebetech.com/
]. Customizing the firmwire of the Oxford Semiconductor [ http://www.oxsemi.com/
] OXFW911 high performance IEEE 1394 to IDE/ATAPI bridge to enable WiebeTech
to produce some unique FireWire products such as the Forensic Drive Dock
[ http://www.wiebetech.com/products.html#forensicdd ] and FireWire Encrypt
[ http://maccentral.macworld.com/news/0301/07.wiebetech.php ]. 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 [ http://csrc.nist.gov/encryption/aes/ ] (the Rijndael block cipher
[ http://www.esat.kuleuven.ac.be/~rijmen/rijndael/ ]) in ARM and Thumb assembly
code. Developing the firmware for an unannounced FireWire product using
the uCLinux [ http://www.uclinux.org/ ] embedded Linux distribution. 5/2002
- Editor of ByteSwap.net [ http://www.byteswap.net/ ] - an online publication
that aims to promote cross-platform and portable software development through
education and information. ByteSwap.net is a publication of GoingWare Inc.
1/2002 - Present
- Creator and lead developer of the Linux Quality Database [ http://linuxquality.sunsite.dk/
], which is proposed as an easy to use bug reporting system with a web interface
to enable regular users to provide quality assurance for the Linux kernel
developers [ http://www.tux.org/lkml/ ]. The articles section [ http://linuxquality.sunsite.dk/articles/
] serves as advocacy for the importance of quality in writing Free Software
and provides information resources to enable developers to accomplish quality
in the products they write. This is an ongoing volunteer effort. 12/2000
- 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 file import and export code. Creating a complex 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 [ http://developer.intel.com/software/products/vtune/
]. 6/2001 - 8/2002
- Designing and implementing a fault tolerant database file format for
use with ZooLib [ http://zoolib.sourceforge.net/ ] for Learning in Motion
[ http://www.learn.motion.com/ ]. 4/2001 - 5/2001
- Working on a Mac OS graphics product written in C++ and MetroWerks PowerPlant
for MGI Software (later acquired by Roxio [ http://www.roxio.com/ ]) to
resolve quality issues and prepare the product for final release. 2/2001
- Collaborating with CommerceFlow's [ http://www.commerceflow.com/ ] 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 thePyXML
[ http://www.python.org/sigs/xml-sig/ ] library to do custom processing
of the DTDs. Development was done on a Debian GNU/Linux system. 11/2000
- Writing BeautyRiot's [ http://www.beautyriot.com/ ] Instant Makeover
[ http://www.beautyriot.com/instant_makeover.php ], 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 [ http://zoolib.sourceforge.net/
], a cross-platform library developed by the Electric Magic Company [ http://www.em.net/
]. Includes the use of the Standard Template Library (STL), the XML file
format using Xerces library [ http://xml.apache.org/xerces-c/index.html
] from the Apache Software Foundation [ http://xml.apache.org/ ] and JPEG
format code Independent JPEG Group's [ http://www.ijg.org/ ] LibJPEG library.
12/99 - 10/2000
- Writing a server-side Java 1.1 web application with the Enhydra [ http://www.enhydra.org/
] application server, MySQL [ http://www.mysql.org/ ], JServ [ http://java.apache.org/
], and Apache [ http://www.apache.org/ ] on Linux for ClickRebates [ http://www.clickdough.com/
]. Used the AnyJ Java source debugger from Net Computing [ http://www.netcomputing.de/
] to debug the Enhydra application. Database programming in SQL. 11/99 -
- Converting a scientific instrumentation control application written
in C++ for the MacOS (MacApp) to Java 2 with Swing (to be run on Windows
NT) for Coastal Software Group [ http://www.coastsoft.com/ ]. The instrument
was controlled via a serial protocol that used the javax.comm package. 9/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. [ http://www.sensiva.com/ ] 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 http://www.imagesw.com/. The SCSI
code uses both the MacOS 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 [ http://www.cycling74.com/ ] MAX MIDI application
from MacOS to BeOS. 7/98 - 2/99
- Writing scanner software on the Be [ http://www.be.com/ ] operating
system for BeatWare [ http://www.beatware.com/ ]. 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
[ http://www.graphicalplanet.com/ ]. 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 an interpretation of arbitrarily complex files. 4/98
- Porting Working Software's [ http://www.working.com/
] Spellswell [ http://www.bebits.com/app/48 ] from the MacOS to the Be [
http://www.be.com/ ] 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 [ http://www.be.com/developers/masters/masters_may97/index.html
]. 2/97 - 4/98
Past clients also include MacEurope Information Systems, Medior, and Geonex
- Senior Software Engineer - WebCom [ http://www.webcom.com/ ] - 12/97 - 3/98
- Modifying the Apache [ http://www.apache.org/ ] 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 Engineer - Live Picture, Inc. (since acquired by Roxio [ http://www.roxio.com/
]) - 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
[ http://www.kodak.com/US/en/digital/dlc/book2/chapter4/flashp1.shtml ].
- Senior Software Engineer - KnowMed Systems Inc. [ http://www.knowmed.com/
] - 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. [ http://www.apple.com/ ] - 3/95
- (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 proper engineer or fixed them myself. I also
determined whether third party application crashes and malfunctions were caused
by bugs in our new OS 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 68k 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 peculiar performance problems. Rewrote a small portion of the
OS to improve its use of the processor 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 Mac. Invented
and implemented a new bitmapped graphics compression algorithm and file format.
(Medior has since acquired by America Online [ http://www.aol.com/ ].)
- Research and Teaching Assistant - UC Santa Cruz [ http://physics.ucsc.edu/
] - 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 [ http://physics.ucsc.edu/ ] in Geneva, Switzerland. Taught introductory
physics lab (Physics 7a [ http://reg.ucsc.edu/catalog/phys/index.html#courses
- Product Development Manager - Working Software, Inc. [ http://www.working.com/
] - 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, debugging CoreEdit word processing engine in
assembler. Ported DOS dictionary and thesaurus application to Macintosh. Did
consulting on debugging. Led collaboration with other companies to develop the
Word Services Apple Event Suite [ http://www.wordservices.org/ ], the standard
for linking spellers, grammar checkers and other text services to applications.
Spoke on Word Services at the 1992 Worldwide Developers Conference, the March
1993 Software Entrepreneurs Forum Mac SIG, and the 1994 MacHack Conference [
http://www.machack.com/ ]. Demonstrated products at user groups and trade shows.
Hired, trained and managed our tech support, assisted with tech support, sales,
marketing and production.
- Macintosh Software Tester - Apple Computer [ http://www.apple.com/ ] - 11/89-10/90
- Contract job testing the MacTCP 1.0.1 and 1.1 TCP/IP network driver. Ran
test suites, ported test tool from Macintosh Programmer's Workshop 2.0.2 C to
3.1, including debugging asynchronous I/O, using the Macsbug and SADE debuggers.
Use of protocol analyzers. Assisted the A/UX group in testing the MacTCP implementation
on 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 BSD Vax sources into Sun kernel to enable network testing. Designed
and wrote new test tool in C++.
- UNIX System Administrator - Octel Communications [ http://www.octel.com/
] - 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, 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
printer drivers with dithering for the Tektronix 4696 and Howtek Pixelmaster.
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. Fixed device driver for
compatibility with new SunOS. Sent to Denver, Colorado for two weeks to debug
an InterGraph CAD system on VAX/VMS: VMS system tuning, wrote command procedures
- UNIX Technical Support - Microport [ http://www.mport.com/ ] - 11/86-4/87
- Telephone support on Microport UNIX for the IBM AT.
- Programmer and Manager - Sapiens Software - 6/86-8/86
- Managed programmers writing Star Sapphire Common Lisp [ http://www.webweasel.com/brujo/lisp.htm
], a virtual memory Lisp compiler in C for the IBM XT. Coding and debugging
a very complex program. PC system administration.
- Teaching Assistant - California Institute of Technology [ http://www.caltech.edu/
] - 9/84-12/84
- Taught physical numerical analysis in C, Pascal and FORTRAN to students
using the IBM XT.
- Summer Undergraduate Research Fellow - California Institute of Technology
[ http://www.caltech.edu/ ] - 6/84-9/84
- Research in astronomy: observed with the Palomar 60" telescope CCD camera
], reduced data on a VAX with FORTRAN.
- Research Assistant - California Institute of Technology [ http://www.caltech.edu/
] - 6/83-9/83
- Prepared Color-Magnitude diagrams from CCD photos of globular clusters.
Collected spectra with the double spectrograph on the Palomar 200" [ http://www.astro.caltech.edu/observatories/palomar/200inch/instruments.html
] and took CCD images with the 60" telescope [ http://astro.caltech.edu/observatories/palomar/60inch/instruments.html
Briefly enrolled as a graduate student in Physics at UC Santa Cruz [ http://www.ucsc.edu/
], Santa Cruz, CA. 9/93 - 4/94.
B.A in physics at UC Santa Cruz [ http://www.ucsc.edu/
]: 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 [ http://www.caltech.edu/
], Pasadena, CA. Also math (calculus, differential equations, linear algebra, vector
calculus, probability), astronomy, computer science (languages, data structures,
algorithms, graphics and numerical analysis), chemistry. GPA is 3.1. 9/82-12/84.
Professional training classes (typically three day seminar classes)
- Interop '89 tutorial on Network Administration and Security, 10/89
- Apple Developer University Debugging class. 1992
- Apple Developer University PowerPC Bootcamp. 8/95
- Apple Developer University PowerPC Debugging class. 8/95
For a complete list of publications, see http://www.goingware.com/resume/publications.html
Commercial Products I Have Shipped
For a list of the products I have written, see http://www.goingware.com/resume/products.html
Copyright 2003 http://www.goingware.com/resume/