Embedded Systems, Electronics, Software and Databases
Note: Brent LaReau is your point of contact for this category.
Designing today's products requires depth and breadth of knowledge in many related hardware and software subjects. I can help you with:
- Embedded Systems
- The term "embedded system" covers a lot of ground. I have created (or helped to create) all sizes of embedded systems, from hand-held 8x51-family microcontroller-based devices, to facility-wide networked systems consisting of a server plus multiple client PCs (some running Windows, some OS/2, etc.).
- I have written all sorts of software for embedded systems — in some cases a single dedicated assembly language program, in other cases a collection of programs written in C/C++ and Visual Basic. In many cases my software connected to databases such as Oracle, DB2, Access and SQLite. Sometimes part of my software was inside an Oracle database (PL/SQL code). I have devised and implemented a large variety of interfaces for embedded systems: GUIs for human interaction, data translators for machines, and whatever protocol was required to exchange data with a remote system (HL7, fixed data structure, FTP, etc.).
- System Architecture
- Indeed, "system architecture" no longer pertains to just one device. As I outlined above, today's "systems" are interconnected, hierarchical structures of smaller systems that encompass various electromechanical devices, computer platforms and software programs, which to function correctly must all operate in unison.
- Computers and Operating Systems
- I have designed with a wide spectrum of x86-compatible hardware, from special-purpose diskless and fanless CPU boards, to normal desktop-style PCs, to conventional servers. On the operating system side I have dealt with assorted versions of Windows, Linux, OS/2 and DOS.
- Software Development
- I have developed software on five X86-based platforms (Windows NT, OS/2, Windows 2000, DOS and Linux) in five main application categories (web-based, database, embedded control, desktop and utilities).
- Programming Languages
- Today, rapid application development is a must. This is best accomplished by assembling a heterogeneous collection of programs, where each one is coded in the language best suited to the task. I have written software in more than a dozen languages: Python, JavaScript, C, C++, BASIC, Visual Basic, PHP, PL/SQL, Perl, REXX, and several OS command shell languages.
- Software Installers
- Software deployment is best done using some sort of software installation tool. For Windows my tool of choice is the Nullsoft Scriptable Install System (NSIS). For Linux I use several native installation methods.
- Software Tools
- I am accustomed to using a large assortment of software tools: specialized programmer's editors, compilers, IDEs, interpreters, debuggers, data converters, plotting software, etc. I believe in using the right software tool for each task. When I cannot find a third-party tool I simply write my own.
- Open Source
- We run our business on generously licensed open source software, and we encourage our clients to do likewise. However, we do highly recommend rigidly licensed proprietary software to our competitors.
- Databases and Related Topics (SQL, programming, etc.)
- Many of my projects have used some sort of database, often as part of an end product, and sometimes as part of supporting tools that I create for my projects. I have used SQL and SQL functions for queries and views, plus PL/SQL and other database-specific programming languages for triggers and packages. I am acquainted with several small- to large-scale databases including SQLite, Access, DB2, MySQL and Oracle.
- "Data Mining", Data Analysis, Plotting and Charting
- Increasingly, it is necessary to really "dig in" when researching, developing, testing and supporting one's products. I regularly "mine" data from a variety of sources: the Internet, my own programs' log files, network packet sniffer capture files, etc. I use diverse software tools (many of my own invention) to analyze data and publish it in visual forms that are easy to understand.
- Microprocessors and Microcontrollers
- I normally use prefabricated single-board computers, but I am always open to "rolling my own" microprocessor-based product to avoid vendor "lock-in" and to extend a product's lifetime.
- Single-Board Computers (SBC)
- I use several types of SBCs, usually diskless and fanless x86 PC-compatible units that can be sealed against dust and dirt.
- Electronics
- I am familiar with component-level design techniques using commonly available discrete parts and integrated circuits. In my designs I consider EMI/RFI, ESD, power dissipation, driver loads, cable capacitance, ground loops, crosstalk, slew rates, shielding, decoupling, terminations, etc.
