Michael Geary

Software Inventor

Mike@Geary.com - Mike’s Blog - Geary Central

Why? - Testimonials - Projects - Publications

TopWhy?

Five hundred years ago, a man visited three stonecutters on a construction job. He asked them what they were doing.

The first stonecutter grumbled, “I'm a stonecutter. I'm cutting stone. I cut stone every day.”

The second one said, “I'm a stonecutter. I'm making money to feed my family.”

The third man stood with pride. “I'm a stonecutter. I am building a cathedral!”

That's why I build software. It may not be a cathedral, but it pleases me when my friends use my software and in some little way I have improved their lives.

TopTestimonials
“Geary is easily one of a small handful of really brilliant Windows programmers on the planet.”
Andrew Schulman, Undocumented Windows

“a Windows programmer of legendary skill”
Alan Cooper, About Face: The Essentials of User Interface Design

“Michael Geary…literally created the interactive climate of the Windows community… Since the earliest days of Windows programming, he has offered expert insight and strong encouragement for Windows programmers using every possible medium--electronic bulletin boards, conferences, personal discussions, and more. His authoritative knowledge and openness to sharing it have significantly influenced this industry.”
Kim Crouse, The Windows Programming Puzzle Book

TopProjects
Acrobat
Adobe Systems, Inc., 2002-2005

I worked on the Acrobat Viewer team and helped develop Acrobat (and Adobe Reader) 6 and 7. During this time I worked on these projects:


Storymail
Storymail, Inc., 2000-2001

I was the User Experience Engineer for Storymail, Inc. I developed Storymail’s ActiveX control and a custom installer which used only 16Kb and never, ever made you reboot--even if you updated the control while it was running.


Tetra Time
Tetra Tech EMI, Inc., 1999-2001

I designed and developed a custom computer resource billing application for Tetra Tech EMI. They had been using a commercial product which had an 18 megabyte installer, a slow, cumbersome user interface, and required remote offices to mail in disks with their usage databases.

I replaced this with a streamlined program with a simple, fast user interface and a 450Kb installer. Gary Kratkin developed ASP server code to automatically synchronize into an SQL database over the Internet.

One of my goals in this project was to have no message boxes and no dialog boxes anywhere in the user interface--to have nothing be any more modal than it has to be. Almost made it, too. But there did turn out to be one really rare situation where the work to make it modeless didn’t seem cost-effective, so we ended up with one message box.


TrustMail
InterTrust Technologies Corporation, 1999-2000

I developed an Exchange Client Extension for Microsoft Outlook that allowed email to be sent and received using InterTrust’s digital rights management system.

The Outlook extension added an InterTrust control bar to each outgoing secure message so you could set its security and distribution restrictions, and it encoded the e-mail message into a DigiBox for transmission.

When a secure message was received and displayed, TrustMail embedded InterTrust’s ActiveX viewer into the Outlook display window. Because this had to work with Outlook 97 as well as newer versions, the code hacked directly into Outlook’s child window structure to embed the viewer.

While this project was a technical success, changes in InterTrust’s company direction meant that it never made it to market.


Geary Central
Geary Labs, 1999

This describes the old Geary Central, which I’ve now replaced with a new version built around a WikiWiki.

A directory of the many Geary web sites around the world: people, places, businesses, everything named Geary. There’s a plain HTML version, compatible with any browser, and a split-window version that lets you view Geary sites without bouncing back and forth. This was a fun personal project and an excuse to get up to date on Web development techniques.

The split-window version uses JavaScript to generate the numerous frames that make it up and to customize the code for different browsers. I’d planned to support a number of browsers on different platforms, but I soon learned that fancy cross-platform Dynamic HTML takes more of an investment in time than I could afford for a personal project. So if you don’t have Internet Explorer on Windows, you’ll get the plain HTML version.

To improve the user interface and work around the security restriction that browsers impose on frames that come from different domains, I use a CGI script in Perl that filters the HTML code coming from each Geary site. That lets me add a bit of JavaScript and HTML to make the page work correctly as part of my frameset.

Perl code also generates all the lists of Gearys in both the plain and dynamic HTML versions of the site from a common XML source file.


Open Directory
1999

I was a volunteer editor for the Open Directory, the Web directory used by Google, Netscape, and many other sites.

I helped build several categories:


Acrobat Distiller 4.0
Adobe Systems, Inc., 1997-1999

I was responsible for the Windows platform code in versions 3.02 and 4.0 of Distiller, the Acrobat component that converts PostScript code into PDF files. Distiller 3.0 had an unreliable printing mechanism called Distiller Assistant; I replaced this with a printer port monitor that routes print job data directly through Distiller. I also created a COM interface for Distiller, making it easy to control it from Visual Basic and other languages.


Ricoh Image Communication
Ricoh Corporation, 1998

I built part of the PC software package that is used in Ricoh’s Image Communication product line.


PDFWriter for Windows NT 4.0
Adobe Systems, Inc., 1996-1997

PDFWriter is a Windows printer driver that generates PDF files. In NT 3.51, printer drivers ran in user mode, and Adobe wrote PDFWriter for NT to work in user mode. NT 4.0 required printer drivers to run in kernel mode. The large amount of code in PDFWriter made it difficult to port it to kernel mode, so I wrote a stub kernel mode printer driver and used a variety of Windows NT tricks to set up a user mode environment that the existing PDFWriter code could run in. This allowed Adobe to support Windows 3.51 and Windows 4.0 from the same code base.


Agent 95
Connectix Corporation, 1996

Agent 95 was a resource and memory monitor for Windows 95. Unlike traditional resource monitors that merely tell you the total amount of resources used, Agent 95 went behind the scenes to determine the resources and memory each individual application is using.

I designed the user interface and built the application portion of the product, including the code that snoops inside Windows to figure out which application is using which resources. Art Rothstein wrote the compression/paging VxD.


RAM Doubler for Windows
Connectix Corporation, 1994

Art Rothstein was the primary author of RAM Doubler; I developed code to solve the "below one megabyte" problem in Windows 3.1.


WinSight
Borland International, 1991

In my work as a Windows developer, I needed a tool to see how other applications set up their windows and window classes and what messages they passed back and forth. So I wrote the WinSight spy utility, which I then sold to Borland. WinSight is bundled with Borland C++ Builder and Delphi.


Adobe Type Manager for Windows
Adobe Systems, Inc., 1990-1991, 1994-1995

Adobe needed the impossible: a way to get Windows 3.0 and Windows applications to display PostScript fonts just like the native bitmap fonts that Windows used at the time. So they called on me. I hacked into Windows and created a way to plug in Adobe’s PostScript font rasterizer, so Windows applications could use scalable Type 1 fonts as if they were bitmap fonts.


Visual Basic
Cooper Software, Inc., for Microsoft Corporation, 1989

Back in the days of Windows 1.0 and 2.0, Alan Cooper had an idea for a user-customizable Windows shell. He put together a prototype and sold the idea to Microsoft, who planned to make this the shell for Windows 3.0. I led the team that turned Alan’s prototype into a real product, code-named Ruby.

As it turned out, Microsoft decided to use the much-beloved Program Manager and File Manager as the Windows 3.0 shell. They added the Basic language to Ruby and the rest is history. Alan can give you a more detailed story of how Visual Basic came to be.


SQLWindows
Gupta Technologies, 1988

SQLWindows was the first visual programming tool available for Windows, combining a structured outliner with a forms editor to create SQL database applications. I designed the first version of SQLWindows and implemented the user interface for its first release. Dave Roth wrote the SAL language compiler and SQL interface, and several other people at Gupta contributed to the product. After I left Gupta, Earl Stahl and his team made many significant improvements to SQLWindows, extending it far beyond my original work.


Windows utilities
Public domain, 1986-90

I wrote several freeware utilities for Windows developers: FixDS, OX.SYS, Spy, and others.

FixDS was an interesting little program. In 16-bit Windows, Microsoft told developers they had to use the cumbersome MakeProcInstance and EXPORTS for all their callback functions, such as dialog procs. I found a way to eliminate the need for these, letting programmers write callback functions with ordinary C code as they would in a non-Windows environment. Microsoft thought this was impossible, but FixDS showed them otherwise. Later, the FixDS technique became a standard feature in all 16-bit Windows compilers.

For the curious, here is the original readme file for FixDS.

“FixDS by Michael Geary . . . brings insight and imagination to the optimization process.”
Dale Rogerson, Microsoft Developer Network CD


Diplomat
Apple Computer, Inc., 1986

I developed a scriptable electronic mail gateway for the Macintosh, based on some of the technology I developed for Transend PC.


MVP-FORTH Macintosh Editing Shell
Public domain, 1985

I built a program development environment for FORTH using standard Macintosh windows (instead of FORTH “screens”) and a “select and execute” capability. Apple later used concepts from this shell in their Macintosh Programmers’ Workshop.


EGA BIOS
Nara Technologies, 1985

I implemented a high performance BIOS for an EGA video card.


Transend PC COMplete
Transend Corporation, 1984

I designed and implemented the first electronic mail “user agent” for the IBM PC. Numerous reviews praised the package’s power and ease of use. Transend PC used character mode graphics to provide a visual interface for managing the user’s email, and it had a scripting language to let it connect to multiple email systems.


SpaceFinder
RealTran, Inc., 1981

I designed and developed a property listing database system for commercial real estate agents, featuring point-and-select editing and forms-based query and data entry.


MITS
Tymshare, Inc., 1979

I designed and developed Tymshare’s first micro-to-mainframe application, an inventory system using a forms-oriented transaction editor on Texas Instruments 771 microcomputers. It was a successful product for its time, bringing in $15,000,000 in revenue.

TopPublications

“Inside Windows 3.0: A Long and Winding Road”, BYTE, August 1990.

“An Introduction to Microsoft Windows Version 3.0: A Developer’s Viewpoint”, Microsoft Systems Journal, July 1990.

“Developing Applications with Common Source Code for Multiple Environments” [Presentation Manager and Macintosh], Microsoft Systems Journal, January 1989.

“Inside Microsoft Windows”, chapter of The Waite Group’s MS-DOS Papers, Howard W. Sams, 1988.

“SQL Development Tools”, Dr. Dobb’s Journal, July 1988.

“SQLWindows Brings a Graphical User Interface to SQL Database Applications” (interview by Craig Stinson), Microsoft Systems Journal, May 1988.

“Converting Windows Applications for Microsoft OS/2 Presentation Manager”, Microsoft Systems Journal, January 1988.

“Spying on Windows”, BYTE IBM Special Issue, 1987.

“Microsoft Windows 2.0: Enhancements Offer Developers More Control”, Microsoft Systems Journal, July 1987.

“A Communications Package for the IBM PC” (coauthor), BYTE, November 1983.