Projects & Challenges

Back to Main Page: David Dantowitz


Project
  Created The ZipBurst CGI Pro, a Web-based Geographic Locator. Requirements include a multi-threaded database kernel, secure across users & domains, a tag-based report generator, relational tables, and a macro language.
Date
  1997-Present
Company / Client
  Various Clients
Solution / Approach
  Written completely from scratch in C, supporting multiple search and sort criteria and for report generation a full set of tags to retrieve data from data tables. The report tags include support for:

        embedding tags within tags
        variables of multiple types
        fully nested if/then/else
        nested loops
        include text files
        include other web URLs
        nested database queries

Additionally, because database access is asymmetric (read access is likely to run several orders of magnitude higher than write access) that was taken into consideration in the design of read/write access methods to maintain consistency and reduce latency due to lock operations.
Epilogue   Licensed for on-site use and also hosted on my server.


Project
  Write an optimized version of Bresenham's line drawing algorithm in 8086 Assembler.
Date
  1986
Company / Client
  Self
Solution / Approach
  I had read an article in Byte Magazine referencing a very fast routine for Bresenham's algorithm and since I was up for a challenge, decided to write a version that ran faster.
Epilogue   Published on the internet with documentation and still available online at Simtel: mresline.asm


Project
  Publish an optimized table-driven CRC method and place the code in the public domain.
Date
  1986
Company / Client
  Self
Solution / Approach
  Someone on a mailing list had submitted code to compute CRCs and it was incorrect (the code had been moved from another program and an error was introduced). Having had much experience with cyclic redundancy codes and other related error detection / correction techniques, I realized that not only should I publish a correct implementation, but also a small tutorial.
Epilogue   The code was published on the internet with documentation and is still available online at Simtel: CRC2.pas. About 10 years later I received an email from a professor in Europe who thanked me for the code and tutorial, letting me know that he had used it with his students for years.

Also, the librarians at DEC, where I worked at the time, and gave me the original copy of "The Honeywell Computer Journal" from 1971 describing the table-driven computation when the time came to discard originals.



Project
  Create test sequences for a robotic arm to test an Automated Bank Teller Machine (ATM.)
Date
  1990
Company / Client
  Consultant to Citicorp / Transaction Technology, Inc. (TTI)
Solution / Approach
  I was asked to assist in programming a robotic arm being used to test an ATM as the process was going slowly. Since the robot's instructions were essentially assembly language level opcodes, writing sequences was tedious. I decided a better way to create the sequences would be to represent the ATM in it's own specification language and to write an application to generate robot sequences covering paths through the ATM. The application built a graph and used Djikstra's Algorithm for path planning through the ATM's screens. The app set a goal of visiting all screens in the ATM and covering all paths (inbound and outbound to each screen) and added random walks through the ATM as well.
Epilogue   Returning from my honeymoon, I was informed that Citicorp was having cut backs and TTI was being asked to drop all contractors / consultants. They were very excited about the work I was doing, especially since TTI had a strong history in research and development, and worked hard to keep me on as a contractor. It took a while, but in the end they acquired authorization to continue my work and to our amusement the CEO mentioned Djikstra's Algorithm in TTI's "State of the Company" address.


Project
  Create a rotated ellipse module in Occam (a concurrent programming language) for use on parallel processors.
Date
  1992
Company / Client
  Graphex Imaging Systems
Solution / Approach
  Analyzed math and developed routines using rotated scan conversion and highly optimized computation.
Epilogue   Code introduced and run on a custom parallel pre-press system.


Project
  Create a Pie Chart module for Macromedia (now Adobe) Director, which supported Bezier Curves, but not circular arcs.
Date
  1999
Company / Client
  InterActions Media
Solution / Approach
  Analyzed math and wrote code in the Lingo programming language to approximate circular arcs with Bezier curves and finally a set of routines to create pie wedges and pie charts.
Epilogue   Code placed in public domain and published on the internet.



Project
  MailBurst: Add support for multiple domains to the Apple Internet Mail Server / Eudora Internet Mail Server.
Date
  1996
Company / Client
  Various Clients
Solution / Approach
  At the time, Apple's mail server did not support multiple domain name spaces. Although you could host multiple domains, david@domain1 was the same mailbox as david@domain2. Apple's Mail Server was developed and maintained by a single developer who didn't plan on adding multiple domains for a few years, yet I needed it ASAP. With a few suggestions from the developer I wrote a powerful stand-alone app, to run along side the mail server and added support for multiple domains.

Subsequent versions added forwarding, mailing lists, bouncing, auto-replies, a drop box and more.

Epilogue   Licensed worldwide and gained a strong reputation as it's performance scaled well from 10 domains and 10 users in each domain to 1000 domains and 1000 users in each domain.


Project
  SPEDS: Create a highly-optimized message passing framework for a shared memory multi-processor, minimizing cross processor synchronization barriers to a provable minimum and minimizing cross processor shared memory access.
Date
  1989-1991
Company / Client
  UCLA: MS Thesis Work
Solution / Approach
  Written in C, running on three architectures and operating systems, incorporated specialized data structures, accessed in such as way as to reduce the need for both additional cross processor synchronization and cross processor shared memory access.
Epilogue   Demonstrated effective speed up on parallel processors


Project
  VAX Processor Architecture Exerciser: My first task when starting at DEC: Update six year old source code to standard system headers. Intended to be done by hand to introduce me to the source code a module at a time.
Date
  1985
Company / Client
  Digital Equipment Corporation
Solution / Approach
  Rather than modify the code by hand, I wrote a series of LISP macros to run within EMACS to automatically update the code.
Epilogue   Humorous: It took 2 1/2 days to get the first set of files updated and to debug the macros, after which I emailed the files to my supervisor. He emailed another set and 15 minutes later I sent back the updated files, after which he appeared at my cubicle and asked me how I did that so fast :-)

Over the next few years I improved the program's coverage and performance significantly with members of my team. After a few years I was given the task of creating a new application to verify the architecture of DEC's new Prism and Alpha CPUs (as well as the MIPS CPUs which DEC used in interim products). My work also involved developing models for improved pipeline testing and selection criteria for testing floating point operations.

Side note: the well publicized Intel Pentium FP bug that surfaced in 1994 would have been found in minutes from the FP test criteria I developed at DEC in the late 80s. That work on FP was an extension of research presented by N. L. Schryer at Bell Labs in 1981.



Project
  Finding a way to separate print jobs on a departmental laser printer.
Date
  1988
Company / Client
  Digital Equipment Corporation
Solution / Approach
  While not a member of the printer group, but knowing PostScript as a programming language I developed a custom PostScript library to pull print job header pages from a printer's second paper tray -- placing colored paper in the second tray made it simpler to separate print jobs for different users as jobs were now separated by colored paper.
Epilogue   The print library was distributed within DEC and made people happier!


Project
  Replacing the NULL (idle) job on DEC Workstations with something more fun!
Date
  1988
Company / Client
  Digital Equipment Corporation
Solution / Approach
  The default idle or NULL job on the workstations of the day was a spinning cube at the top of the screen. For a reason that now escapes me, I sought to replace the spinning cube with a spinning globe. Having found the graphics it was just a matter of a little code, and it made the workstation more organic. I released the code to DEC's internal network of 90,000 people and it was an instant hit. I received a flurry of "thank you" email, including one from overseas that I recall addressing me as "Dear great globe maker."
Epilogue   Again, people were happier!


Project
  Bulk Mail / Mail Merge program -- I lost my watch, having taken it off in the computer room and (being overly optimistic) figured sending email to everyone on the university email system might help find someone who had seen it. Bulk mail was not a feature offered by the system.
Date
  1984
Company / Client
  Myself
Solution / Approach
  The email system was developed by a student programmer for the CDC main frame at UMass and was designed to prevent batch emailing. Because my account had the privilege to create special "direct access" files I tried piping one into the email program and found it worked. I then proceeded to dump the list of all email addresses on the system and wrote a mail-merge program to create the proper input stream. (The work was done remotely via a 300 baud modem.)
Epilogue   Predictably, I didn't find my watch, but I did get some nice and some mean responses. There was no such thing as SPAM in 1984, so people were taken aback at receiving email that was personalized from someone they didn't know. Additionally, a few weeks later, I ran into the email system's developer (who I knew, as a few months earlier I purchased his PC Clone and he turned around and purchased something called a Macintosh). He had been trying to figure out how I accomplished the bulk mail-merge.