These are images of Ad Maker, a WYSIWYG yellow page ad editor for Bell South released in May 1995. Ad Maker was a significant part of a client-server application used for the automation of phone book generation. It allowed sales personal to create a yellow page ad directly in front of the customer. It also allowed them to show how a larger and more expensive ad can better serve their needs. The ad design data generated by Ad Maker was eventually compiled into the Yellow Pages. Over 800 users used the client-server application at launch.

Ad Maker was written in C++ using Borland C++ 4.5 and OWL 2.0, and targeted Microsoft Windows 3.1.

I was the primary developer responsible for all design and development issues with a second developer implementing the database bridge to my specifications. It consists of approximately 85 classes and 7 hierarchies. I also used many design patterns in its design, including Abstract Factory, Singleton, Bridge, Composite, Strategy, and Template Method.

Ad Maker was the first object-oriented application for which I had complete development responsibility and control. I was also able to complete multiple releases with incremental and functional improvements that clearly demonstrated the power of object-oriented programming. It allowed me to more clearly formulate my object-oriented design and development strategies and learn from my insights as well as with my mistakes. One of the keys to object-oriented development is reuse within the same application as opposed to reuse across multiple applications.

The images above are of the main window. To create an ad, one would first select the type of ad to create and then ‘edit in place’ the text of the ad. The text cursor can be seen above the ‘y’ in ‘Entry’ on the address line in the left image. The top toolbar provides functions to set ad features, the one below provides functions to format text, and the toolbar on the left is used to insert text symbols.

This image is of the library dialog box. A salesperson can create a number of different to ads to show to a customer before visiting that customer. Similar capability was used to create template ads that could be used to jump-start the creation of a new ad. This shot demonstrates reuse within an application. This library function reused the existing functionality of displaying an ad from the main window with the ability to store/retrieve a single ad. Instead of requiring 5-6 weeks of development to implement, it took less than a day.

This image is of the debug dialog box. It shows the complete object model of the ad show in the main window. Child objects are displayed by selecting them in the children list box. The parent object is displayed by clicking on the ‘Parent’ button.

Not only could Ad Maker display the object model of an ad, it also wrote to a log file each user operation with the relative time it was generated. The log could be read and executed at its original speed for automated testing or to easily reproduce a bug found in testing.

I like to build in a lot of runtime debug functionality into my designs, especially with large applications. Not only is it useful during initial development, I find it especially useful when a bug is found which seems to be only reproducible on a production computer without the development environment. By building in the debug functionality during initial development, its there when you really need it and do not have the time to put it in completely.