From October 2001 to March 2003, I worked through D&K Engineering as a Software Development Engineer at a company called Phogenix, a Hewlett-Packard/Kodak joint venture. Phogenix was developing a new photo processing system called the DFX Digital Inkjet Photofinishing Minilab that would develop and scan conventional film or accept digital images, process the images, and finally produce prints using a next-generation industrial printer. Using some pretty amazing ink jet technology, the prints produced were pretty much indistinguishable from conventional film prints and even an improvement on them in many ways, for instance in including a waterproof, tear-proof, UV-resistant, textured laminate. All told, an operator could insert a roll of conventional film in one end of the machine and receive custom prints out the other end in about 15 minutes.
The work I did there initially involved developing, as part of a small team, a multi-threaded software COM module to monitor and control the Integrated Film Processor and Scanner (IFPS). The IFPS hardware, later called the "1-Touch" was part of a modular system that also included the flagship DFX Printer and a Xeon-class HP computer workstation, along with a host of additional peripheral devices such as a touchscreen display, label printer, and Nikon slide scanner.
The IFPS Team was initially composed of myself and two other software engineers. After about a year, one engineer in the team was moved to another project, and we continued for the remaining six months as a team of two. Upon successful completion of the IFPS Plugin software, we were one of the select remaining teams of software contractors at Phogenix out of an original group of contractors from many other, much larger, San Diego-based contracting companies. Based on our performance we were selected to further develop a Film Processor Service Plugin and a System Control Panel Plugin. All modules were then integrated into Kodak's DLS (Digital Lab System) suite of photo processing and machine control software.
Most of the programming was in C++, using Microsoft Visual C++ (Visual Studio 6.0), with source control by Visual SourceSafe and program testing by NuMega BoundsChecker. Among other things, the project included development by D&K of a USB device driver for the film processor, a serial control interface for a small combination LCD/keypad developed by Matrix Orbital, as well as use of a number of COM libraries developed by other teams involved in the effort. This included integration of the machine control back end with Kodak's extensive "KIWI" UI library that presents an entire look-and-feel windowing replacement for touchscreen photo-processing kiosks. Additionally, we were responsible on a day-to-day basis for requesting hardware and firmware changes, burning revised firmware EPROMs, and a host of other such technical tasks.
The initial phase involved creating and elaborating an interface with the machines--a conventional film processor machine manufactured by FC Company (Japan) and a film negative scanner. While in general the film processor machine had a long history of development at FC, part of my job early on was to request design changes we discovered in R&D to be required by the overall vision of an integrated system that would include such novel features as film order tracking and system health monitoring. This R&D effort was continuous over about a year and a half, and one of my early duties included preparing and leading a meeting with FC's engineers on their visit to San Diego to get a detailed understanding of the mechanical, chemical, electronic, and firmware operations of the film processor and to discuss a number of design changes we required. I must say that working with this group of engineers, despite the significant barriers of language and geographical distance, was a thoroughly enjoyable experience owing to their technical expertise, the excellent design of their hardware and firmware, the timeliness of their responses and revisions, and the palpable sense of pride in the tradition of their company.
Contrary to that of the film processor, the development of the scanner by Pakon (Minnetonka) began as a first-generation effort, pretty much from scratch as I understand it. As such, both hardware and firmware changes continued up until the very end of the project, and we were constantly required to adapt our work to such changes. Programmers at Kodak (Rochester) developed software to control the scanner as a standalone device, and out of this effort they were also to provide the IFPS Team with a COM library useful in integrating the scanner with our own application. The latter effort fell short due to time and resource constraints as well as ongoing development of the underlying hardware design, and my team was required to take up the slack and improvise a bit in providing software for a functional scanner integration.
Our team designed and developed a machine control and business logic back end as loosely-coupled as possible to an initial graphical user interface (GUI) that focused on facilitating software and hardware R&D, debugging, testing, and maintenance. It was this back end and user interface, collectively called the "Film Processor Manager," that was my primary responsibility for the project, while others in my team worked on the production user interface, a serial keypad, the scanner interface, and aided me with some of the more specialized and complex aspects of the back end such as health and error monitoring. As part of this initial effort, my work included elaborating a "Communication Engine" interface with the film processor to enable film tracking (sensors), software control of the machine's devices (motors, solenoids, heaters, pumps, etc.), and error detection. At this stage I also developed a system of software state machines to track films and mechanical and logical states of the film processor on a higher level of abstraction, using the "Mcx" state machine library developed at HP.
Finally, my proudest contribution to this phase of development was the conception and creation of a "Device Monitor" scheme to facilitate machine control and diagnostics using real-time, interactive graphical representation of the machine's devices. While it later became evident that managers had initially expected a much less elaborate effort regarding this early stage of development, they allowed our team an impressive amount of design independence and happily adopted this scheme, which basically provided a graphical window on the state of all of the machine's devices, in real time, with the ability to activate and deactivate devices, monitor temperatures, etc. Initially developed for use in R&D and in testing film processors during manufacturing by Shinei International (Singapore), it proved to be an invaluable asset in monitoring and understanding the machine's operation, and in it's maintenance, and I was asked to give a presentation to the software team as a whole, including teams working on other devices in the system such as the printer. The Device Monitor scheme was subsequently adopted for use in the printer R&D and diagnostics, and I was involved in passing the technology along to developers in that effort. Finally, the Device Monitor was deemed an important enough addition to be included in the final product as the major part of the Film Processor Service Plugin we were later asked to develop.
Statistics for the Film Processor Manager project are as follows: 25,585 functional lines of code and 9,041 lines of comments, in 54 classes. 15 main worker threads, with additional threads created to track each film order.
The back end of the Film Processor Manager, developed for R&D, was then used as the basis for the production IFPS Status Plugin, with some modifications and additions, including order management, health monitoring, and scanner integration. During this phase, I was in charge primarily of integration, testing, and extension of the existing back end, while my teammates worked on such aspects as the production GUI, scanner interface, keypad interface, and health monitor. I also aided with the graphical and user interface design of the IFPS Plugin Status and Maintenance screens, as they were based in part on the earlier Film Processor Manager GUI. During this phase my team also performed daily regression testing, debug, and performance tuning in preparation for production release, and we later aided the software test team in designing and executing preproduction test plans.
IFPS Plugin project statistics: 36,734 functional lines of code and 21,614 lines of comments, in 81 classes. 21 main worker threads, with additional threads created to track each film order.
Development of the Film Processor Service Plugin was leveraged from the maintenance, diagnostics, and monitoring functionality of back end code developed earlier for the Film Processor Manager. UI design was closely based on the Device Monitor scheme I had developed earlier, and I also contributed significantly to development of the production graphics (using Adobe PhotoShop) and other aspects of user interface design of the Film Processor Service Plugin screens.
FPU Service Plugin project statistics: 7,956 functional lines of code.
My contribution to the System Control Panel included development of system data backup functionality using the "Gear Writer" CDR library. I also integrated and utilized the HP DFX Printer command engine for communicating system settings to the printer.
System Control Panel Plugin project statistics: 4,920 functional lines of code.
Here is a list of selected documents I authored or co-authored while working at Phogenix:
The Phogenix DFX 1-Touch system was a success, with early market trials in selected shops in San Diego and more scheduled for Future Shops, a division of Best Buy Canada. At the February 2002 PMA (Photo Marketing Association) convention, Phogenix won a DIMA (Digital Imaging Marketing Association) Innovative Digital Product Award for the DFX 1-Touch Minilab, and retailers began expressing interest in ordering the system before it was even in production. The system's performance at Photokina (Cologne) in September 2002 further boosted it's market visibility in Europe. The system was slated for release on the global market in 2003, at a price of around $70,000 for a complete system.
Our team completed all our projects at Phogenix either before or by deadline. Phogenix management showed for the most part a very enlightened attitude in giving our team a great deal of design independence, recognizing that in many cases we had operated and interacted with the machines during development on a daily basis perhaps more closely than anyone else, and as such we were the best judges of how to balance functionality with ease of use in our software development.