Home > Application Notes

BrianHetrick.com Application Notes and Technical Reports

Currently Available Notes




Title and Goal or Abstract




The Singleton Pattern in .NET

The singleton design pattern arises from having a single distinguished instance of a class, where the instance is used application-wide. This Application Note describes the singleton design pattern in .NET. It discusses the design pattern itself and the properties of the pattern. It investigates three different implementation strategies for the design pattern, and recommends one as particularly suited for most circumstances. An example of an application-wide facility as is typically addressed by the singleton pattern is examined in detail, showing how the recommended implementation strategy can be used to adjust the characteristics of the implementation in use.

(The PDF is 15 pages. The ZIP includes the PDF and the software source.)




The Event-Based Asynchronous Operation Pattern in .NET

The .NET framework includes the Task-Based Asynchronous Programming model, introduced in .NET 4. The task based asynchronous programming model permits the simple expression of a number of operations used in multithreading designs. Even with simplified expression, multithreading remains a rich source of program errors. This Application Note examines an older technology, the Event-Based Asynchronous Pattern, which provides an easier and more robust (although somewhat more limited) approach to correct multithreading.

This Application discusses the pattern itself, the properties of the pattern including the circumstances when it is useful, and implementation techniques for using the pattern. The .ZIP file accompanying this Application Note includes both a sample program using the pattern and an abstract base class useful in implementing the pattern. The Application Note also describes how to use the abstract base class.

(The PDF is 17 pages. The ZIP includes the PDF and the software source.)




Interface Technology-Independent Applications

The user interface is the most volatile aspect of applications. None of what computers actually do today is new, although some formerly intractable problems (such as route planning) have become tractable as multi-terabyte databases and thousand-MIPS multicore processors enable what are essentially brute-force solutions. What is new is the user interface. Typically applications are discarded because they cannot be economically adapted to newer user interface technologies.

This Application Note addresses the software architectures needed to isolate the application from the user interface technology in use. This architecture permits replacement of not only the particular user interface technology, but the entire style of user interface, be it scriptable (batch), desktop GUI, web, mobile GUI, voice-responsive, or (in the future) anticipatory or thought-responsive.

(The PDF is 18 pages. The ZIP includes the PDF and the software source.)




Introduction to Asynchronous Serial Communications

Communication between and among computing devices is a ubiquitous need. In robotics and home automation, functions are typically allocated among dispersed computing elements and overall activities require cooperation among the computing elements. This coordination requires communications. Serial communication pathways can be simple, reliable, and fast.

Most data communications pathways are serial: bits are sent one at a time across some medium. This Application Note discusses a particular type of serial communication, asynchronous (or start-stop) character communication.

(The PDF is 27 pages. The ZIP includes the PDF and the software source.)




101 Software Engineering Interiew Questions

There are many lists of interview questions for software developers around the web, but most concentrate on the latest buzzword technology or methodology for programming rather than on the larger and (in my opinion) richer world of software engineering. This Application Note tries to address this gap. This list uses the C# language and the .NET environment as its vehicle for concrete expression.

(The PDF is 7 pages.)




Unit Testing Inherited Interfaces

Object oriented languages encourage inheritance. Inheritance, by design, creates classes which share substantial subsets of behavior. Unit testing these classes requires substantial subsets of duplicated test activity testing the shared behavior. This gives rise to copy and paste unit tests. This in turn increases maintenance risk and effort.

The goal of this Application Note is to describe techniques for unit testing classes which inherit common behavior or interfaces from parent classes or interface declarations without replicating test code.

(The PDF is 10 pages. The ZIP includes the PDF and the software source.)




A Real-Time Application Framework for the Freescale HC08 Microcontroller Family

This Application Note presents a framework for hobby real-time application software on the Freescale HC08 microcontrollers, with particular reference to the MC68HC908QTxA and MC68HC908QYxA microcontrollers. The software is supplied under the GNU Affero General Public License, version 3.

(The PDF is 7 pages. The ZIP includes the PDF and the software source.)




A Naïve Non-Linear Optimization Algorithm and Implementation

This Application Note describes a simple and naïve non-linear optimization algorithm and its implementation in C#, and provides an example of its use in modeling a thermistor. The software is supplied as open source under the GNU General Public License, version 3.

(The PDF is 3 pages. The ZIP includes the PDF, the software source, and an analysis spreadsheet.)




A Latin-1 and Latin-3 Characters US Keyboard Layout for Microsoft® Windows

This Application Note describes the construction of a Windows 2000/XP/Vista keyboard layout supporting the entry of English and Esperanto language text by persons already familiar with the standard US keyboard. The keyboard layout is built using the Microsoft Keyboard Layout Creator program.

(The PDF is 11 pages. The ZIP includes the PDF, the software source, and the software binaries.)