Abbott Flashcards
Prepare for software engineering job interviews at Abbott.
Modern .NET U/I framework.
WPF (Windows Presentation Foundation)
.NET remote procedure calling framework.
WCF (Windows Communication Foundation)
Low level exception debugging for non-debug builds (for .NET or any Windows environment)
Watson Buckets. Tie approximate location of the exception to the source code using PDB files created during compilation.
Calling unmanaged C++ code from C#
Interop, arguments and return values must be marshaled
1st most recent .NET experience
Created alternatives to the .NET provided serial port endpoint class to work around problems with the Silicon Labs virtual com port driver. Built test code to exercise these endpoints.
2nd most recent .NET experience
Debugged multithreaded serial communication code in PLEX-ID that was causing device response to appear to be delayed.
3rd most recent .NET experience
Created LIS interface for PLEX-ID. An optional service interfaced with the PLEX-ID backend and, using a legacy ASTM 1394 LIMS library, communicated results via a serial port or network socket. The legacy library was accessed via a new managed interface that took that bottlenecked the library’s old, wide, interface through a new XML based one that I introduced.
4th most recent .NET experience
Added audio alerts to the m2000 instrument. This included creating a user interface for configuration of the alerts.
NGE Development Activities
I developed firmware for stepper motor/pump, valve, heater block control and cable sensing. I also developed the process scheduler and inter-module communications.
NGE
The NGE firmware project was with Jim Keevan, Julius Toth, Floyd McInally and Tyler Hall, a contractor associated with the principle electrical engineer, Ron Kukula.
NGE Processors Modules
The project was designed around several ARM-based processors and an AVR processor for heater block control.
NGE Development Environment
GNU tool chains for ARM and AVR processors using the Eclipse IDE.
PLEX-ID
The PLEX-ID desalter project was initially designed and coded by a prototyping house, Omnica, for Ibis. When Abbott bought Ibis, responsibility for the desalted firmware was taken in house by me.
PLEX-ID Development Activities
In addition to maintenance, documentation, bug fixing and the creation of a controlled build environment, new features where added.
PLEX-ID Processor Modules
The desalter was designed around 32 (11 distinct) 8051 based modules. 30 of these modules reside on a CAN-bus to coordinate the actions preformed by each module. The desalting assay is pipelined via a carousel of 22 spin mixer modules to bring the throughput to a well processed every 30 seconds.
PLEX-ID Development Environment
Development was through the Kiel 8051 tool chain using the Silicon Labs IDE.
Tell me about yourself
I’m a software engineer of more than 20 years. As the field is constantly changing, I’ve have found it to fit well with my life-long love of learning. I’m eager to learn and use new technologies.
Why should we hire you?
I’m an excellent programmer, competent with both C++ and C# with a broad range of talents. I’m equally at home analyzing and debugging others work as I am designing and coding my own. The last 5 years I have been involved with embedded software development. Prior to that I worked on large medical diagnostic applications. I enjoy learning new technologies and bringing a fresh perspective to their use.
Why do you want to work here?
I’m motivated by the opportunity to create something important and beneficial to others. This gives my effort meaning beyond a pay check and drives me to do good work.
What is your greatest weakness?
I can sometimes be too frugal. I have tried to address this by being more introspective and critical of my choices and their rationale. An instance of this occurred when I was debugging infrequent randomly dropped characters in the serial connection between the SCC and the PLEX-ID. It was not certain where the responsibility for the dropped characters lied. The virtual serial port USB connection to the desalter was suspect, but that was difficult to prove. I started with frugal approach to avoid an expensive USB sniffer, but soon realized that being able to quickly eliminate half of the search for the bug would be more valuable than the cost of the sniffer.
What is your greatest strength?
I’m persistent and thorough in tackling difficult problems. An instance of this recently is finding the cause of an intermittent error closing and reopening a virtual com port. Lacking a readily reproducible way to cause the problem, I set up a test bed using spare SCC, Desalter boards and other parts around the lab. This allowed long running test code to eventually trigger the problem while I worked on other tasks. Different potential solutions could be tested. After trying a number of different host serial port end point implementations, the problem was shown to be an issue internal to Windows XP that has since been remedied in Windows 7.
Lazy/RT pattern
A design pattern conceived by Ian Poole and me to form the principal architecture behind the Quips genetic image analysis software. The pattern manages a representation of multiple application states in an computationally efficient manner. The pattern works hand-in-hand with the classic Visitor pattern.
Visitor Pattern
A classic, Gang of Four, pattern that decouples structures from the operations on them using type safe double dispatch.
Double dispatch
A method for virtual binding based on two run time types, the visitor and the visitee,
PID
Proportional Integral Derivative controller is a feedback loop algorithm were the controller endeavors to minimize the error between a measured value and a set point for the value. Proportional term embodies the current error, the Integral term past error and the Derivative term a prediction of future error.
[SOAR] NGE Heater Block Control
NGE, the same architectural layer was compiled for both ARM and AVR modules. While platform differences where isolated, the AVR simply did not have the memory and horsepower to run the same support code as the ARM. This resulted in occasional AVR crashes. To subvert a long debugging processes, I instead developed a simple protocol between the ARM and AVR and off loaded the PID algorithm onto the ARM. This fixed the reliability problem on the AVR.
[SOAR] NGE fill-in
The NGE project was staffed with little redundancy. During development, the developer responsible for motor control left due to an extended illness. I was able to school myself on the motor controller and associated code, and reprioritize tasks to complete critical functionality for the prototype.
[SOAR] PLEX-ID desalter firmware spec gap
A gap analysis in an internal quality audit of PLEX-ID revealed a lack of software specifications for desalter firmware developed by the prototyping house. Working in a small group, specifications were reverse engineered and via trace matrix were shown to be complete to the auditor.
[SOAR] PLEX-ID dropped serial characters
I traced the random, infrequent loss of characters on the serial connection between the SCC and the desalter to multiple causes including an undocumented pipelining bug in the 8051 processors that caused intendedly short periods with interrupts disabled to become lengthy resulting in overflowing the one character serial port hardware buffer on the 8051. A second cause was an improper understanding by the original developers of 8051 interrupt priorities. Both these issues were addressed and the communication link was shown to be reliable with white box testing.
[SOAR] Quips design
The desire to have a new genetic image analysis program suite run on both Macintosh and PC lead me to invent a novel design pattern that was implemented in C++. 85% of the code was shared on both platforms with each platform retaining its native look and feel.
[SOAR] Handling conflicts with colleagues
The principle developer on the NGE firmware project, a contractor, had the annoying habit of restyling other’s code including mine. After repeated discussion failed to stop the behavior, we imposed project wide coding standards that addressed all party’s concerns.
[SOAR] Sequence diagram creation
Design documents for the PLEX-ID where ladened with hand drawn sequence diagrams in Visio. Not only were these diagrams inconsistent, but they where also cumbersome to edit. I took the initiative to find a tool that draws such diagrams from textual descriptions. In the team wiki, I described the procedure for creating the diagrams and retaining the associated textual descriptions which was then embraced by all the developers.
[SOAR] Symbiotic colleague relationship
When I was new to embedded programming I teamed with a fellow electrical engineer that was new to software engineering and coding. We complimented each other’s weaknesses and where able to bootstrap each others’ abilities.
[SOAR] Controlled development environment
To save effort and to guarantee consistency, I created a single multipurpose VM that served both as a continuous integration build server and a development environment for programmers.
[SOAR] Hardware project
Spin mixer modules on PLEX-ID were too small to accommodate a JTAG header. Since a bug in the zerorec image randomly booted the bootloader on power up instead of the application, it was necessary to devise a JTAG connection to the unpopulated contacts on the board. I conceived and built a gadget using parts and materials in the engineering lab. This gadget clamped on to the board and provided a connector for the USB JTAG dongle. It was then possible to update the zerorec image while debugging the issue.
[SOAR] Novel solutions
A fix for the zerorec bug was only useful for newly manufactured boards. It was not feasible for FSEs to update zerorecs on the 32 PLEX-ID boards since individual physical access would be required to each, one at a time. I additionally implemented a clever work around in the bootloader that could be deployed in the field via the normal firmware download procedure which hid the problem on older zerorecs.
[SOAR] Reverse engineering
A gap analysis found the PLEX-ID firmware lacked an adequate high level design document. By studying the code, I was able to devise a set of design principles and patterns used in the firmware development. I created a document rich in high level explanation and diagrams, avoiding simply restating the code as is common in such documents.
[SOAR] Complex debugging
A PLEX-ID was installed that would intermittently report bar codes with lower case. I traced the problem to a unique firmware version on the barcode scanner. Desalter firmware was reworked to be robust to these scanner firmware versions. Additionally, action was taken with the manufacturer to control the firmware version provided with the scanners.
[SOAR] Dual sprayer mod
The PLEX-ID dual sprayer module was modified to include valve and sensors to control vacuum during the cleaning cycle. I implemented support for this new functionality in firmware, and purposes a hardware modification enabling the firmware to sense the presence of the new device to avoid bifurcating the firmware into separate versions.
Most recent Microsoft development environment used
Visual Studio 2010 and .NET 4