|
Software Structures, Inc. |
|||||||||
|
RAFAEL E. PENA, Ph.D. SENIOR
PROGRAMMER, GROUP LEADER AND TRAINER / INSTRUCTOR 3200
South Gessner, Houston, Texas 77063 rpenaphd@SoftwareStructures.com www.SoftwareStructures.com (713)
781-6633 (Last
Updated: February 3, 2003) Principal Keywords: C++, CSharp (C#), ATL, COM / COM+ /
DCOM, MFC, Visual Basic, Visual Studio .NET, ASP.NET, ASP, ADO.NET, ADO, .NET
XML (Extensible Markup Language) Classes, .NET XML Web Services, SQL Server
2000, SQL Server CE, MSMQ, COM+ Queued Components, MTS, Windows 2000 DDK,
Windows NT DDK, OLEDB, ADO, Windows XP, Windows 2000, Windows NT, Windows CE,
CE.NET (CE .NET), Pocket PC. I specialize in WIN32 Microsoft operating systems,
especially Windows 2000 Server (Professional) and Windows NT (Server), both
User-Mode (Win32) and Kernel-Mode (DDK).
My recent work involves ASP and ASP.NET, Microsoft .NET technologies,
their interoperability with COM+, .NET XML Web Services and ADO.NET XML-aware
classes. I also have significant work
with Microsoft COM+/DCOM based technologies for distributed processing in
(wireless) intra-nets and over the Internet.
This includes Transient COM+ Event Subscriptions, COM+ Queued
Components, MSMQ (Microsoft Message Queue Server) and MTS (Microsoft Transaction
Server). SOFTWARE DEVELOPMENT AND PROJECTS A FACILITY THAT USES INTERNET SOCKETS TO MONITOR AND CONTROL
SOFTWARE PIRACY. Programmer,
for Software Structures, Inc. Houston, Texas.
January 2003. Keywords: ASP.NET, ADO.NET, CSharp
(C#), C++, Microsoft Visual Studio .NET, Visual C++ 6.0, MFC (Microsoft
Foundation Classes), Windows Sockets (Winsock), .NET Socket classes: Socket,
TcpListener, TcpClient. Summary: - Client
software retailed from the server web site is packaged with a unique identifier
(GUID). - At
timer controlled intervals the client attempts to establish a socket connection
to the server. - When
the server is listening for client connections, client-identifying information
is received to verify License Agreement compliance. MSN-CHAT WHISPER ADVERTISEMENTS BLOCKER: AN ONLINE PRODUCT OF
WWW.FEWDOLLARSOFTWARE.COM. Programmer,
for Software Structures, Inc. Houston, Texas. September,
December 2002. Keywords: C++, Visual C++ 6.0, COM
(Component Object Model), ATL (ActiveX Template Library), MFC (Microsoft
Foundation Classes), ASP.NET, ADO.NET, CSharp (C#), Paypal Instant Payment
Notification (IPN), Visual SourceSafe, Windows XP / 2000 / NT. SOFTWARE DEVELOPMENT AND PROJECTS (continued) Summary: - New
MSN Chat Whisper windows are subclassed. - Whisper
windows whose message contains Internet URLs or any one of a list of
user-specified phrases are dismissed before the user sees or interacts with the
window. - The
list of user-specified phrases may be edited in a separate dialog. PIANO PLAYER TEACHER: A MIDI DRIVEN PIANO INSTRUCTION SOFTWARE
FACILITY. Programmer,
for Info-Tek Associates, Inc. Costa Mesa, California. October
- November 2002. Keywords: C++, Visual C++ 6.0, MIDI (Musical Instrument Digital Interface) Sequencing and MIDI File I/O, COM (Component Object Model), ATL (ActiveX Template Library), MFC (Microsoft Foundation Classes), MFC Document-View Architecture, Visual SourceSafe, Windows 2000 Professional. Summary: - A MIDI file is read to structured RAM. This is the Document in MFC's Document-View Architecture. - Two GUI views of the music are implemented: the Notation Staff window and the Keyboard window. - At playtime an indicator moves horizontally across the Staff to mark the presently playing tones. The Staff view scrolls automatically. - At playtime the Keyboard view shows depressed keys corresponding to the played tones. Playing Hands are also shown executing the required fingering of the music. TABLETOUCH: A HTTP-BASED DATA TABLE VIEWER AND EDITOR. AN ONLINE PRODUCT OF
WWW.FEWDOLLARSOFTWARE.COM. Programmer,
for Software Structures, Inc. Houston, Texas.
June - July 2002. Keywords: ASP.NET, ADO.NET, CSharp (C#), JavaScript, Microsoft Visual Studio .NET, ODBC .NET Data Provider. Summary: - A
.NET Web Service on the remote data server accesses tables using classes in
.NET's ODBC Data Provider add-on component. - The
user interface on the client browser is provided by an ASP.NET Web Form. - TableTouch
supports: - Arbitrary connection strings and WHERE clauses
in SELECT statements. - Viewing, Editing and Updating remote table
records. - Local View Sorting on any column while
preserving the SelectedItem record - Multiple persistent control settings for each
value of the remote data server URL. - Persistent Web Form scroll position across
post-backs to the GUI server. - Tooltip based help strings with lag time and
timeout. - Deployed
for sale from www.FewDollarSoftware.com. SOFTWARE DEVELOPMENT AND PROJECTS (continued) AN E-COMMERCE WEB SITE (WWW.FEWDOLLARSOFTWARE.COM) THAT USES
WWW.PAYPAL.COM FOR INTERNET ONLINE PAYMENTS Programmer,
for Software Structures, Inc. Houston, Texas.
April - May 2002. Keywords: ASP, ASP.NET, CSharp (C#), VBScript, JScript, ADO, Microsoft Visual InterDev 6.0, Microsoft Visual Studio .NET, Microsoft Access 2000, ODBC, Paypal Instant Payment Notification (IPN). Summary: - ASP based database
support via ADO and ODBC. - Please
visit www.FewDollarSoftware.com A SERIAL COMMUNICATION API AND TROUBLESHOOTING A CE.NET EMULATED
DEVICE INTERACTING WITH A SECOND COMPUTER CONNECTED TO THE CE DEVICE HOST Programmer, for Heron Solutions Ltd.
United Kingdom. February - March 2002. Keywords: CE.NET (CE .NET), Platform Builder 4.0, Visual Studio
.NET, .NET Smart Device Extensions. Summary: - From
CE.NET, CreateFile() caused an uninformative exception to be thrown. I solved
the problem. - Developed
a simple serial communication API. TRANSDBG. A MTS / COM+, MSDTC TRANSACTIONS TRACE
VIEWER-DEBUGGER. AN ONLINE PRODUCT
DOWNLOADABLE FROM WWW.FEWDOLLARSOFTWARE.COM. Programmer, for Software Structures,
Inc. Houston, Texas. February 2002. Keywords: C++, Visual Basic 6.0 (VB), Visual C++ 6.0, COM/COM+
(Component Object Model), ATL (ActiveX Template Library), MFC (Microsoft
Foundation Classes), MTS (Microsoft Transaction Server), MSDTC (Microsoft
Distributed Transaction Coordinator), Windows Installer SDK, ORCA *.msi
Editor. Summary: - Every
Transaction enabled COM object (or VB class) registers itself with the TransDbg
facility by issuing a call into an in-process DLL TDProxy.dll. - At run-time a Dialog reports system wide transaction activity of all such registered COM objects. - For
each object, TransDbg traces the receipt by the object's transaction Resource
Managers of calls made to them by the Distributed Transaction Coordinator. - The
calls traced are: PrepareRequest(), CommitRequest() and AbortRequest(). - TransDbg
also facilitates the debugging of various transaction failure scenarios by
allowing the user to artificially abort any one or various registered
transactions. TONAL MUSIC WRITER - THE
TONAL GRID. A MIDI SEQUENCER AND SOFTWARE TOOLS FOR THE ANALYSIS OF MUSIC BY
THE RULES OF TONAL MUSIC COMPOSITION. Programmer,
for Software Structures, Inc. Houston, Texas.
October 2001 - February 2002 (in progress), September 2000 - August
2001, December 1998 - February 1999, February - March 1997. Keywords: C++, CSharp (C#), Visual Basic 6.0 (VB), Visual Studio .NET, Visual C++ 6.0, .NET XML Web Services, SQL Server 2000, ADO.NET, MIDI (Musical Instrument Digital Interface) Sequencing and MIDI File I/O, COM/COM+ SOFTWARE DEVELOPMENT AND PROJECTS (continued) (Component Object Model), COM+ LCE (Loosely Coupled Events), ATL (ActiveX Template Library), MFC (Microsoft Foundation Classes), SAX2 (Simple API for XML), Visual C++ 1.52 (16 bit), ActiveX Automation into 16 bit Windows under NTVDM (NT Virtual Dos Machine), PowerTracks Pro Audio DLL API, Cakewalk MIDI FX (MIDI Effects Filters, Mfx Sdk), Shared Memory Mapped Files, Visual SourceSafe, Windows 2000 Server. Summary: - Visual Basic classes implemented in an ActiveX
DLL manage the user interface. Use of
an ActiveX DLL for the GUI manager allows GUI components to receive COM+ LCE's
(Loosely Coupled Events) generated elsewhere in the system. Microsoft's MSFlexGrid control is used for
the "Tonal Grid". - The Music data structures are handled in a
normal DLL linked to the VB GUI. That
DLL is accessed via a single command-driven entry-point. - ATL classes were written which provide required MIDI functionality: Sequencing of MIDI messages to the sound generating device, and MIDI file I/O. - The MIDI Sequencer class posts windows messages to an ATL control that owns a windows timer. Timer events trigger COM Connection Point events that are received by the GUI Visual Basic executable. VB is thus able to synchronize its display of played tones with the currently generated sound. - The sequencer plays tones as they are inserted
into the grid. - Snap-to-Grid drag-drop is supported. Tones are played by the sequencer at each
snap to a grid-cell. If the movement is
vertical in the grid, the dragged tone is played at the pitch corresponding to
its new location. - To draw cell images (Music Tones), MSFlexGrid
offers a per-cell .CellPicture property, which may be set to reference a COM
object implementing a Microsoft documented interface IPictureDisp. I implement IPictureDisp in an ATL COM
object that also supports easy changes to image attributes such as color. From the VB6 code it is easy, involving only
a small code snippet, to change the color of a tone dependent on its being
dragged or played. - The MSFlexGrid control does not support a
per-grid-cell .ItemData property helpful in tracking the state of each grid
cell. Because this application uses the
grid to display tone images rather than text, the per-grid-cell .ForeColor
property is used in lieu of .ItemData. - A dedicated ATL DLL provides a COM interface to
access static diatonic information concerning tone degrees, intervals and
chords built from them. - The music analysis component is proxied by .NET
classes that execute in event synchronized dedicated threads for independence
and improved performance. - SQL Server 2000 music-rule tables drive the
music analysis. Each table record
specifies which run-time analysis function to call and parameters to be used
for the call. - For improved run-time execution speed, the
music-rules tables are actually read at compile time. ADO.NET classes are used to read from the tables generating
source code that is compiled into a rules DLL. - The analysis component is structured for remote
execution: it is implemented by a .NET XML Web Service. For development and/or improved performance
the Analysis Web Service DLL may also be linked as a local in-process server to
the GUI VB6 client. - The music analysis component generates a XML
analysis report file using .NET XML and ADO.NET classes. This file is returned to the .NET proxy
executing on the GUI VB6 client machine.
The .NET proxy fires COM+ LCE events to inform the GUI VB6 client
analysis results for feedback to the user. SOFTWARE DEVELOPMENT AND PROJECTS (continued) A FACILITY THAT GENERATES
POCKET PC DATA ENTRY SCREENS FOR ANY SQL SERVER 2000 TABLE. SQL SERVER CE - SQL
SERVER 2000 MERGE REPLICATION. Programmer, for Software Structures, Inc. Houston, Texas. September 2001. Keywords: SQL Server CE, ADOCE 3.1, Pocket PC, Handheld PC, Windows CE, SQL Server 2000 Replication, Embedded Visual Basic 3.0, Embedded Visual C++ 3.0, Microsoft Embedded Visual Tools, Windows CE Platform SDK, Platform SDK for Pocket PC, Visual Studio .NET, CSharp (C#), ADO.NET. Summary: - From
a Visual Studio .NET project (Code Generator) ADO.NET classes SqlDataReader and DataTable are used to extract the schema of
a given SQL Server 2000 table, published for merge-replication. - .NET's
StreamWriter class is used to generate an Embedded Visual Basic 3.0 Pocket PC
project file (.ebp) and form file (.ebf). - The
Embedded Visual Basic 3.0 Pocket PC form file (.ebf) supports a dialog
consisting of a TabStrip, a Frame window per Tab, and a MenuBar. - Parameters
specified to the .NET Code Generator, determine the number of Tabs on the
TabStrip and the number of labeled data-entry TextBox controls per Frame. One TextBox control per SQL Server 2000
table column. - The
MenuBar has buttons to manage the SQL Server CE subscription to the SQL Server
2000 merge-replication publication, including synchronization, and also buttons
to access the local Pocket PC copy of the replicated data using ADOCE 3.1. - All
the required Pocket PC code is automatically written by the .NET Code
Generator. A GENERIC COM SERVER OBJECT HIERARCHY AND C++ CLASSES FOR PROCESS-SHARED ACCESS TO MEMORY MAPPED FILES (SMMF) WITH COM+ EVENT NOTIFICATIONS TO TRANSIENT AND PERSISTENT SUBSCRIBERS. XML SHARED MEMORY MAPPED FILES AND VISUAL BASIC CLIENTS ARE ALSO SUPPORTED. Programmer,
for Software Structures, Inc. Houston,
Texas. September 2000, December 2000. Keywords: File Mapping, ::CreateFileMapping(), COM/COM+ (Component Object Model), Visual Studio .NET, SQL Server 2000, ADO.NET, .NET XML Web Service, VB (Visual Basic 6.0), ATL (ActiveX Template Library), MFC (Microsoft Foundation Classes), C++, Visual C++ 6.0, Visual SourceSafe, Windows 2000 Server. Summary: - Singleton COM objects are anathema to
COM+. However good design often
requires that structured data in RAM be server-owned and shared by multiple
clients. In situations where it is
known that the server COM object will be instanced only on a single machine,
the usual case, that server object may be designed as a COM+ compatible wrapper
(not a singleton) providing access to a single copy of the data in
shared-memory. - The Server Object hierarchy is driven by type
awareness and is implemented using COM aggregation. The base object knows the data simply as a byte stream whereas a
'derived' object (that COM aggregates the base object) is aware of the data as
an instance of a user-defined type.
This separation facilitates reuse of base object code. - Multiple clients each in their own process
space share access to the typed data when they instance the 'derived' object. SOFTWARE DEVELOPMENT AND PROJECTS (continued) - The base object defines an Event-Interface that
is registered with the COM+ LCE (Loosely Coupled Event) subsystem. The base object fires a method call in that
Interface: SharedMemoryHasBeenModified() when any client writes to shared
memory. - Clients who want to receive that event
notification may implement the Event-Interface and activate a COM+ Transient
Subscription to themselves to receive those events. - For XML shared memory mapped files, SQL Server
2000 tables are used to define the SMMF base object and derived object data
structures. Using ADO.NET classes the
corresponding XML Schema Definition (XSD) files are generated from the table
definitions. For the interface to COM,
"C" header files are generated from the XSD Schema definitions using
Microsoft's XML 3.0 implementation of SAX2 (Simple API for XML). The type information is also available to
.NET components via CSharp (C#) classes created with the Xsd.exe utility also
reading from the XSD files. Finally, at
run-time the information in the XML shared memory mapped file is processed
using a technique based on .NET XML Serialization classes. SYSTEM SOFTWARE FOR A WIRELESS NETWORK OF PALM-SIZE WINDOWS
2000 AND WINDOWS CE COMPUTERS. LAND WARRIOR. Senior
Programmer and Architect, for Pacific Consultants, LLC. Mountain View,
California. January 2000 through July
2000. Keywords:
COM/COM+, ATL, MFC (Microsoft Foundation Classes), OLE DB, SQL Server 7,
Oracle8 Lite, SQL (Structured Query Language), COM Aggregation, Pipes,
MultiThreading, Error Logging, Memory Leaks, Windows Hooks, C, C++, Templates,
Visual C++ 6.0, Windows 2000 DDK (Device Driver Kit), NuMega SoftIce Debugger
for Windows 2000, Windows CE Toolkit for Visual C++ 6.0, USB (Universal Serial
Bus), CAN (COTS Controller Area Network), Windows Sockets, Visual SourceSafe,
Windows 2000 Professional, Windows CE. Summary:
Some of my writings and contributions: - In support of OLE-DB access to SQL Server
tables, a C++ class CLWVariant derived from MFC's COleVariant that extends the
realm of implicit type conversions performed by the overloaded .Attach() and
.Detach() member functions. Using this
facility explicit variant type information (VARTYPE vt) was removed from the
code. Modification of the type of a
table column now requires only a code modification of the corresponding OLE-DB
consumer-object accessor header file.
The compiler handles the rest. - To hide the COM complexities of (COM)
client-side access to table data, a C++ template class
CLWVariantLWServerClientHelper<....>.
Corresponding to any rectangular (rows x columns) area of a SQL Server
table, this template outputs a client-side array of Variants containing the
table data. - A (COM) client-side template class
CLWClientControlWithTable<....> which automates the COM mediated
initialization of client display controls.
For ComboBoxes the template's constructor requires sufficient
information to generate SQL statements to initialize the list and edit
sub-controls. - A facility based on three classes:
CLWClientItemData, CLWSMngrCmdItemData, and CLWClientPrepareAndIssueLWSMngrCmd
that implements a mapping (in a mathematical sense) of the information content
of client-side screens onto a (COM) server-side (variable sized) array of
CLWSMngrCmdItemData structures. SOFTWARE DEVELOPMENT AND PROJECTS (continued) This facility allows server-side processing
of user input bypassing the COM complexities that such processing on the
client-side would otherwise require. - A hierarchy of server-side templates: class
CdboXxxxSimpleWhere<....> and class CdboXxxxMultiRecord<....> :
public CdboXxxxSimpleWhere<....>.
These classes templatize the OLE-DB accessor classes and simplify and
systematize the manipulation of recordsets obtained from more complicated SQL
select statements. - A server-side ATL COM object class CLWTable
able to access any table for generic I/O operations with no need to code
explicitly for column types, column names, etc. - The OLE-DB accessor classes used by the system
is ATL Wizard generated for access to SQL Server 7 tables. The server-side table manipulation code is
based on these SQL Server 7 accessor classes.
Considerable effort was committed to identify minimal modifications of
the accessor classes and direct SQL Server <-> Oracle 8 Lite
table transformations that would permit the same body of code to execute
against a Oracle 8 Lite implementation of the database. - The group was writing code to run against
hardware that was not yet available. I
wrote a MFC Dialog that, via NT Named Pipes, emulates the expected behavior of
kernel mode device drivers for that hardware. - A hierarchy of threading (thread owning)
classes based on class CLWThread having the following features: 1. Easy
relocation of the thread's activity to some other executable. This flexibility is partly supported by an
optional loose coupling to adjacent threads synchronized by named dispatcher
event objects and NT Named Pipe mediated cross-thread communication. 2. An
optional named heart-beat event that may live in its own (sub-)thread. This (sub-thread) feature is useful in
situations where the main CLWThread thread is expected to block for significant
periods of time. 3. Any
invocation of the destructor: ~CLWThread() will -properly- terminate the thread
(and sub-thread, if it exists). 4. CLWTread
derived classes are quite simple. The required complexities have been coded
into the base class. The only significant feature provided by the derived
classes is the ThreadFunction(). 5. The
base-class code uses only SDK calls. Neither MFC nor ATL are required. - A set of smart pointer templates and classes
designed to trap memory leaks due to unreleased COM objects. Four smart pointer classes that share
client-side reference count information were written. The four classes derive from _com_ptr_t<....>,
CComQIPtr<....>, CComPtr<....> and _variant_t. This facility is able to trap unreleased COM
objects which adhere to the COM rule stating that any QueryInterface() for
IUnknown on a given COM object instance should always return the same address. - An error logging class CLWErrorLog for system
wide tracking of error conditions both on Windows 2000 and Windows CE
machines. Supports single or multiple
concurrent log files. The software
manipulates enumerated error qualifiers so that the information is binary in
the code but readable in the log file(s).
A set of preprocessor macros was written to facilitate and encourage
use. - Initial work developing a WriteFile(),
ReadFile() user mode API for both ends of a proprietary USB line connecting the
Windows 2000 and Windows CE SOFTWARE DEVELOPMENT AND PROJECTS (continued) machines.
The intent was to hide the implicit master-slave assumptions built into
the USB protocol and drivers so that either machine could initiate a transfer
of information. - Land Warrior 0.6 hardware includes a CAN (COTS
Controller Area Network) bus attached to a serial port of the Windows 2000
machine. Independent circular buffers
in Kernel (system) memory are used to manage the data stream belonging to each
device attached to the bus. I modified
to completion an existing Windows 2000 kernel mode device driver to support
user mode registration to each device.
I also wrote a user mode API supporting independent asynchronous
overlapped I/O to each attached device. - A required third-party software library was
generating error message dialogs that could not be disabled. I wrote a WH_CBT windows hook that attaches
itself to local threads only and uses Thread Local Storage (TLS) to keep thread
specific information. On a
HCBT_CREATEWND notification received for an offending window, the window is subclassed
and later during window creation, before it shows, it is dismissed with a click
event posted to its 'OK' button. A VISUAL BASIC ACTIVEX CONTROL AND
SUPPORTING OUT-OF-PROCESS ATL OBJECTS WHICH SERVE ADO RECORDSETS ASYNCHRONOUSLY
USING MSMQ UNDER MTS TRANSACTIONS Programmer,
for Software Structures, Inc. June 1999
through December 1999. Keywords: VB, ActiveX Template Library, ATL Service, NT Service, ActiveX Data Objects, OLE DB, MFC (Microsoft Foundation Classes), STL (C++ Standard Template Library), Microsoft Message Queue, Microsoft Transaction Server, DCOM+ (Distributed Component Object Model), C++, Visual C++ 6.0, Visual Basic 6.0, Visual SourceSafe, IIS 4.0 (Internet Information Server 4.0), Windows NT Server 4.0. Summary: - A multi-threaded (Free-Threaded) ATL Service
serving a COM object for Message Queue(s) management and administration and
additional threads on which local tables are accessed to satisfy ADO data
requests. - STL and MFC library support. - VB ActiveX DLLs serving standard VB written
COM automation objects and/or MTS components (both on the server and client
sides of the code). - Mtx.exe processes executing MTS component
packages and interfacing to the MSMQ API from both the C++ and Visual Basic
bodies of code. A OS/2 WARP 4 EMULATOR
(PARTIAL SUBSET) FOR WINDOWS NT / WIN32 (STARTRAX, EWAVE) Senior Software
Architect and Programmer, for ADC Labs, Inc.
July 1997 - April 1999. Keywords:
MFC (Microsoft Foundation Classes), WIN32 SDK, MultiThreading, Drag-Drop,
DirectSound, MMSystem, Btrieve DBMS, C++ / C Language, Visual C++ 6.0, Visual
SourceSafe, Windows NT Workstation 4.0. Summary: - Partial functionality of approximately 300 OS/2
functions and roughly 400 OS/2 window messages and notifications was emulated,
primarily in MFC derived classes. - Approximately 110 OS/2 Dialog resources were
converted to Win32. - Heavy multithreading with thread pooling and
queuing. SOFTWARE DEVELOPMENT AND PROJECTS (continued) A C++ CLASS LIBRARY FOR
DEVELOPMENT OF WINDOWS NT 4.0/3.51 KERNEL-MODE DEVICE DRIVERS AND A KERNEL-MODE
TRACING DEBUGGER Programmer, for
Software Structures, Inc. June -
October 1996 and intermittent through June 1997. Keywords:
Windows NT 4.0 DDK (Device Driver Kit), MFC (Microsoft Foundation Classes), OLE
Automation, Visual C++. Summary:
The library was written in support of work on a NT Virtual Device Driver that
buffers run-time Debug-traces generated by multiple, concurrent NT
Kernel, WIN32 and Virtual DOS Machine (NTVDM) (Windows On Windows 16 bit)
threads. The Debug-trace
information is read by a WIN32 MFC application that displays the call-indented
traces in a listbox. A FACILITY TO DYNAMICALLY
(FORCE AT RUN-TIME) MFC-SUBCLASS ANY WINDOW ACROSS WINDOWS NT PROCESS
BOUNDARIES Programmer, for
Software Structures, Inc. December
1996. Keywords:
MFC (Microsoft Foundation Classes), Microsoft Visual C++ Summary: Summary: - Consists of 11 specialized C++ classes (5 are
MFC-derived) distributed in 5 DLLs (Dynamic Link Libraries) with support from
my MFC Extension Class - The facility reads Performance Data from the
Windows NT Registry, injects a MFC DLL application into the address space of
the target Server-process, subclasses the server's main window, and delegates
window message handling to a separate Client-process via MFC-derived classes
for inter-process memory sharing and thread synchronization. - The Server code need not be re-linked to my
facility. All operations are performed
dynamically at run-time, without any server cooperation. PORTED A UNIX SYSTEM TO
WINDOWS NT 3.51, WIN32 SUBSYSTEM Programmer, for
Bailey Network Management Systems, Inc.
October - November 1996. Keywords:
Microsoft Visual C++, Sockets, Pipes, Shared Memory, X-Windows events. Summary: - Over a dozen executables communicating via sockets,
pipes, shared memory and X-Windows events were compiled under Microsoft Visual
C++ 4.1 and linked to NutCracker (Data Focus, Inc.) for Unix-Kernel emulation
and also to X-Windows server, and to GPHIGS (Open Productivity Graphic Systems)
for graphics. - Win32 named pipes and memory mapped files. AN EXTENSION CLASS
LIBRARY TO THE MICROSOFT FOUNDATION CLASSES (MFC). MORE THAN 70 NEW OR MFC
DERIVED CLASSES Programmer, for
Software Structures, Inc. January 1996
- June 1996 and intermittent through June 1997. Keywords:
Microsoft Visual C++ for Win32, MFC. Summary: - Currently
consisting of more than 70 new or MFC derived classes. SOFTWARE DEVELOPMENT AND PROJECTS (continued) - The
following three items characterize the design of this library: 1. Programs written for the Microsoft Windows
family of Operating Systems (OS) execute as multiple-entry-point
subroutines of the OS. MFC based programs must additionally respond as
subroutines of the Application Framework.
Because of this multiple-entry-point character of event-driven
code, a truly reusable class library must be written to alert a programmer of
any "missing events" in a reuse of the library. My extension library accomplishes this by
instancing class CSxEnforce member variables (m_...), one per event-category
required or expected by each base-class.
Base-class construction determines which events are required in
order to deliver a programmer's functional specifications. In a reuse of the library, a programmer
naively derives from the class library making sure to specify all desired
functionality to the base-class constructors. 2.
Having satisfied the compiler and linker, one or more trial
runs will identify any not-received events, which the library will flag during
destruction of the corresponding CSxEnforce variable. 3. Base-class
constructors accept a bit-masked long integer calling parameter, via
which programmers specify desired base-class functionality. The indicated bits are named using
enumeration constants. Two significant
advantages are offered by such a design: (i) The code automatically documents
which sections of it implement each functional characteristic. All cooperating code sections are found by a
global search of the name of the corresponding enumeration constant. (ii) The proliferation of derived classes
that alter the behavior of a base-class in some small way, is kept to a
minimum. Also, the occasional need for
multiple inheritance is diminished. 4. Virtually
all library classes implement their own behavior. Since the MFC message routing system does not inform each class
of the occurrence of each event, my library routes to each class the occurrence
of any relevant events. In many cases
this is accomplished taking advantage of ClassWizard's ability to generate
resource Id handlers. AN OIL FIELD ACCOUNTING
SYSTEM (TOW) UNDER COBOL AND VISUAL BASIC GUIs FOR WINDOWS 3.1, WINDOWS NT
3.51 AND OS/2 WARP 3 Lead Programmer and
Designer, for VertiComp, Inc. June 1994
- October 1994, March 1995 - January 1996. Keywords:
C++ / C Language, Visual Basic, MKS Kornshell, VBX (Visual Basic Control),
Oracle 7 OCI (Oracle C Interface), ODBC 2.1 SDK, Watcom Embedded SQL
4.0, Microsoft Visual C++, PWB, Watcom C/C++ 10.5. Summary: - I wrote 12 DLLs (Dynamic Link Library), 2 EXEs
(Windows Executable), 1 VBX and very many Visual Basic .bas modules and
.frm forms. - Designed, developed and trained VertiComp
programmers in technology required to port the user interface of a large
existing Cobol application to a client/server environment against Oracle 7 (OCI),
ODBC 2.1 and Watcom SQL 4.0. - Object oriented techniques were applied to the
Visual Basic code in order to maximize code sharing between dynamically
instanced ("Inner"-) Forms (.frm). Form-Sensitive I/O is supported by a body of
DLL "and" VB code which is entirely Form-Insensitive. SOFTWARE DEVELOPMENT AND PROJECTS (continued) - A VBX was written which supports data sharing
and VB Event-firing between multiple VB executables. - Multiple-language display of user-interface
strings was achieved using Windows string-table resources. - A Kornshell facility was written to automate
link-time Form and resource files modifications required to serve language
strings for all VB Forms from a single DLL. - A dynamic-SQL DLL interface to the DBMSs
(Oracle 7 OCI, ODBC 2.1, WSQL 4.0) was written in order to hide complicated
DBMS-specific I/O mechanisms from the Cobol and VB GUIs and other DLLs. - A DLL facility supporting per-Cursor I/O to a
local cache was written which may be configured for asynchronous I/O managed by
a dedicated windows executable. A GENERIC LIBRARY AND
FACILITY FOR DEVELOPING VISUAL BASIC (or WINDOWS) USER INTERFACES FOR DOS
PROGRAMS RUNNING IN A VIRTUAL 86 DOS-BOX UNDER 386 ENHANCED MODE
WINDOWS 3.1. Programmer, for
Software Structures, Inc. Feb. - May
1994; Feb. - March 1995. Keywords:
C++ / C Language, 80x86 16- & 32- bit Assembler Language, VXD (.386 Virtual
Device Driver), VBX (Visual Basic Control), Visual Basic. Summary: - A pair of .386 Virtual Device Drivers and
supporting Interrupt Service Routines (ISR) were written to post messages
across virtual machine boundaries and to access Virtual Machine Manager (VMM)
Services from either a V86 DOS-Box or the Windows System machine. - A Visual Basic control (.vbx) was written to
map Windows received V86 messages into VB's Event Space. - Complicated messages are passed through
pointers to structures defined in the V86 machine, made addressable from the
Windows System machine. A REAL-TIME TSR
MONITORING SYSTEM, WHICH DISPLAYS AND REPORTS ALL 8086 INTERRUPT-VECTOR
ACTIVITY IN A DOS MACHINE. Programmer, for
Software Structures, Inc. March -
February 1993; November 1993 February 1994. Keywords:
C++/C Language (TSRd: Terminate-Stay-Resident), 80x86 Assembler. Summary: - A single interrupt handler installs itself on
all PC interrupt vectors. - Able to trace into-and-from all hardware and
software interrupt handlers, irrespective of whether interrupt parameters are
passed in registers or on the stack. - For PC Text Mode, a Int 10h handler was written
which on-the-fly repositions screen output in order to preserve the monitoring
system's real-time tracing windows. - System control and displays may be obtained
under DOS or under WINDOWS, across DPMI Virtual Machines. SOFTWARE DEVELOPMENT AND PROJECTS (continued) A C++ MACRO FACILITY
WHICH AUTOMATICALLY GENERATES CODE FOR DEBUG-TRACING OF C++ CLASS,
DATA AND FUNCTION MEMBERS. Programmer, for
Software Structures, Inc. September
1993 - October 1993. Keywords:
C++/C Language, MKS Kornshell, 80x86 Assembler. Summary: - An environment of C/C++ preprocessor macros was
written which when used to declare and define C++ Classes, generates member
function debug-tracing Entry/Exit reporting code together with automatically
generated assembly Language functions to report class-data values by member
name, for all data types. - The system relies in part on a Kornshell
"h2inc" (*.h to *.inc) facility which, working in conjunction
Microsoft Assembler's h2inc.exe, converts C++ declared Class information into assembly
language macros and code. - All generated output is
call-level-indented. Overloaded
functions are distinguished. Function
entry/exit is reported quantifying the origin of the function call. Data member values are reported in any
specified (i.e. declared) type. Output
may be sent to DOS, BIOS, or WINDOWS.
The facility may be TSRd. A PC/WINDOWS 3.1 BASED
SYSTEM FOR REMOTE CONTROL OF LOGIN ATTRIBUTES FOR NEW USERS IN A MULTI-PLATFORM
CLIENT/ (UNIX, NETWARE, NET-GATEWAY, SYBASE, ORACLE) SERVER ENVIRONMENT. Programmer, for
Tenneco Gas, Inc. March 1993 - August
1993. Keywords:
Microsoft C Language, ANSI C Language (on UNIX), MKS / UNIX Kornshell, Visual
Basic, Netmanage's Newt/Chameleon TCP/IP socket library, Netware 4.0 SDK and
Client API for C. Summary: - In a single operation, the system installs new
users on any number of Netware, UNIX, Net-Gateway (on OS/2), Sybase, or
Oracle (on UNIX) servers. Synchronized
user installation on identically configured UNIX "backup"
server-pairs is also supported. - Visual Basic code accesses Netware Connection
and Bindery Services through a command-driven DLL interface to the
Netware 4.0 SDK, CLIENT API FOR C. - Visual Basic code accesses all other servers
through a command-driven DOS executable running in a Virtual 86 DOS-Box, under
Windows. - From the DOS executable, using Novell's LAN
WORKPLACE FOR DOS TCP/IP, UNIX and Oracle servers are accessed with Novell's
Remote Shell (rsh.exe) while Net-Gateway and Sybase servers use Sybase's
ISQL (isql.exe). Before remote
shelling, DOS standard handles stdout and stderr are redirected to files that
collect output and error information. - On UNIX servers, user attributes are
manipulated by root owned Shell Scripts and ANSI C executables. Oracle servers are accessed using SQLDBA
command files prepared by the UNIX Shell Script, which manipulate
tablespaces, tables, privileges and users. - System Procedure calls directly issued from
ISQL manipulate logins, databases, groups and users on Sybase servers and
logins, connections, transaction groups and remote procedure calls (RPCs) on
Net-Gateway servers. - I also designed a Windows DLL-based
Telnet interface between Visual Basic applications and UNIX or OS/2 hosted
servers, using Netmanage's Newt/Chameleon TCP/IP socket library. - The entire system is command-driven with full
checking and reporting of any remote or local error conditions. SOFTWARE DEVELOPMENT AND PROJECTS (continued) A GENERIC TSR DYNAMIC
GRAPHING UTILITY WHICH GENERATES REAL-TIME ON-SCREEN PLOTS OF NUMERICAL
RESULTS AS THEY ARE BEING WRITTEN TO A DISK FILE. Programmer, for
Software Structures, Inc. January 1992.
(Unfinished.) Keywords:
C Language, 8086 Assembler. Summary: - The TSR (Terminate Stay Resident) is configured
to intercept certain write to file DOS Interrupt calls and to display in a
real-time window, a plot of the intercepted records. AN EXPERT SYSTEM FOR
CRITICAL ASSESSMENT AND ANALYSIS OF HYDROGEN-INDUCED CORROSION DEFECTS IN
HYDROCARBON PRESSURE VESSELS. Programmer, for
Exxon Production Research Company.
October 1990 - May 1991 and intermittent through July 1992. Keywords:
C Language. Summary: - A Lotus-123 style menu tree leads the user to
data entry screens. - When analyzing a given defect, the software
checks for inconsistencies or missing values in the entered data and
automatically directs the user, through the menu tree, to the appropriate data
entry screen and field where a correction is required. - The system supports per hydrocarbon-vessel file
I/O of data entry screens. - A record of all analysis activity performed is
automatically generated and saved in a set of history files, one per vessel. - Defect analysis reports may be printed or saved
to files. A LIBRARY OF C FUNCTIONS
THAT IMPLEMENT DATA-ENTRY SCREENS UNDER DOS, TSR
(TERMINATE-STAY-RESIDENT) ENABLED. Programmer, for
Software Structures, Inc. August 1990 -
October 1990 and intermittent through March 1993. Keywords:
C Language. Summary: - Object oriented design permits a single code
engine to drive any number of screens.
To each screen is associated an instance of an involved data structure
which entirely quantifies its dynamic behavior. This permits the dynamics of each screen to be "painted"
at screen-design time. - Supports data entry fields of all standard
data-types with type-sensitive error checking, code-decode popup tables and any
units of measurement. - The generated screens may be linked to TSR
(Terminate-Stay-Resident) systems. A USER-INTERFACE FOR A
FORTRAN PROGRAM WHICH ANALYZES OIL-RIG PUMPOUT DATA. Programmer, for
Exxon Production Research Company.
August 1990 - September 1990. Keywords:
C Language. SOFTWARE DEVELOPMENT AND PROJECTS (continued) A LIBRARY OF C FUNCTIONS
WHICH IMPLEMENT LOTUS-123 STYLE MENU TREES FOR DOS, TSR (TERMINATE-STAY-RESIDENT)
ENABLED. Programmer, for
Software Structures, Inc. January 1990
- February 1990 and intermittent through March 1993. Keywords:
C Language. Summary: - Object oriented design permits a single code
engine to drive any number of menus. To
each menu is associated an instance of a data structure which entirely
quantifies its dynamic behavior. - Supports menu trees having a significant range
of static and dynamic features. - The generated menus may be linked to TSR
(Terminate-Stay-Resident) systems. A CONSTRUCTION COMPANY
JOB MANAGEMENT SYSTEM Programmer, for
Debmar Construction Company. November
1988 - January 1990 and intermittent through January 1991. Keywords:
dBASE III PLUS, C Language, 8086 Assembler. Summary:
A customized system supporting all required operations: - Automatic handling for a variety of per-job or
maintenance contract types. - Job-location sensitive tax rates. - Per job, activity tracking, reporting and
invoicing with itemized costing. - Employee records, payroll computation and checks
printing. - Inventory control and pricing. - A flexible contract biding subsystem. A WIZARD TO AUTOMATE THE
CODING OF INVENTORY CONTROL SYSTEMS Programmer, for
Software Structures, Inc. October 1988
- January 1990. Keywords:
dBASE III PLUS, C Language, 8086 Assembler. Summary:
Automates the development of highly customized inventory systems. - Supports multiple tables, multiple indexed
views, automatic generation of data-entry screens. A WORLD-WIDE OIL REFINERY
CONSTRUCTION ACTIVITY TRACKING SYSTEM Programmer, for
Gulf Publishing Company. November 1987
- September 1988. Keywords:
dBASE III PLUS, C Language, 8086 Assembler. A RASTER/VECTOR CAD
SYSTEM (INITIAL PHASE) Programmer, for
Mohr Engineering. August 1987 -
September 1987. Keywords:
C Language, Texas Instruments TMS34010 Graphics Processor, KOFAX 8400/8200
cards, PC/AT. Summary:
Retrieval, storage and editing of large engineering drawings. SOFTWARE DEVELOPMENT AND PROJECTS (continued) A RASTER DOCUMENT
RETRIEVAL AND EDITING SYSTEM ON A PC/AT Programmer, for
Mohr Engineering. April 1987 - July
1987. Keywords:
C Language, 8086 Assembler, Texas Instruments TMS34010 graphics, KOFAX
8400/8200 cards, PC/AT. Summary: - Data expansion, imaging, windowing, scrolling,
and printing of Compressed, 300 dots per inch, raster scanned
8.5 X 11" documents stored on a laser disk. TWO MORTGAGE LOAN
INVENTORY AND TRACKING SYSTEMS Programmer, for
Champion Savings Association. January
1986 - October 1986. Keywords:
dBASE III PLUS, C Language, 8086 Assembler. Summary: Document tracking in GNMA, FNMA and other
pooled mortgages. A CINEMATIC GRAPHICS
WINDOWING SYSTEM FOR IMAGING IN A PC/AT
-NUMBER NINE'S PEPPER SGT HARDWARE/SOFTWARE ENVIRONMENT Programmer, for
Baylor College of Medicine. August 1985
- November 1985. Keywords:
C Language, Texas Instruments TMS34010, INTEL 82786 graphics co-Processor. Summary: Menu driven, raster bitmap imaging and
cinematics in multiple hardware windows with selectable zoom control. Text windows for information and menu display,
together with a mouse interface. A MAPS GRAPHIC DATABASE
SYSTEM FOR VISUAL DISPLAY AND QUERY OF DATABASE INFORMATION Programmer, for Software Structures, Inc. June 1985 - August 1985. (Unfinished.) Keywords:
C Language. Summary: Dynamic heap allocation, graphics-cursor
control from the keyboard, manager of map points, lines, and areas, graphic
objects display manager. A MULTIVARIATE OPTIMIZING
PROGRAM Programmer, for
Software Structures, Inc. April 1985 -
May 1985. Keywords:
FORTRAN-77. Summary: Based on a statistical Monte-Carlo
technique (the Metropolis Algorithm). GROUP LEADER EXPERIENCE SYSTEM SOFTWARE FOR A
WIRELESS NETWORK OF PALM-SIZE WINDOWS 2000 AND WINDOWS CE COMPUTERS. LAND
WARRIOR. SENIOR PROGRAMMER AND ARCHITECT For Pacific Consultants, LLC. Mountain View, California. January 2000 through July 2000. I
inherited an architecture that left much to be desired. Given only 6 months to
prototype due date much of my writing was aimed at the development of GROUP LEADER EXPERIENCE (continued) system-level
software constructs (C++ classes, C++ templates and COM Objects) that would
hide underlying flaws and complexities and would allow junior programmers to
write easily modifiable code. We
succeeded. SENIOR SOFTWARE ARCHITECT
/ PROGRAMMER For ADC Labs, Inc. July 1997 - April 1999. I
selected, hired, trained programmers, and rebuilt the Software Development
Group of ADC Labs, Inc. I also
designed, directed and trained programmers working on the port from OS/2 to
Windows NT, of ADC Labss EWAVE (formerly STARTRAX) product. LEAD PROGRAMMER AND
DESIGNER For VertiComp, Inc. June 1994 - October 1994, March 1995 - January 1996. I
designed the Visual Basic User-Interface and middle-ware architecture of a large
accounting and management system (TOW) for oil field production being ported
from Cobol/mainframe to a Windows 3.1 / Windows NT Client-Server environment. I also trained VertiComp programmers on
coding techniques under Visual Basic / Windows. TRAINING COURSE-MATERIAL DEVELOPMENT WRITING WINDOWS NT 4.0
AND WINDOWS 2000 KERNEL-MODE DEVICE DRIVERS.
A PRACTICAL HANDS-ON APPROACH. For Software Structures, Inc. Produced by Peak, Inc. Copyright 1998 - 2001. Currently 13 Chapters. The material is deliverable over the Internet or suited to a 5 or 6 -day intense course. Additional information is available at www.SoftwareStructures.com. Keywords: Windows NT 4.0 DDK (Device Driver Kit), Windows 2000 DDK. TRAINING / TEACHING EXPERIENCE INTRODUCTION TO WINDOWS
NT 4.0 KERNEL-MODE DEVICE DRIVERS. For Intel Corporation, Folsom, California. August 1998. A 5
day course. INTRODUCTION TO PROTEL (A
NORTEL PROPRIETARY C-LIKE LANGUAGE) For Nortel Networks, Richardson, Texas. July 1997 - June 1998. Approximately
20, 2 or 3 day course sessions. INTRODUCTION TO VISUAL
BASIC 5.0 For Hands On Technology Transfer, Inc. (HOTT) of Chelmsford, Mass. Spring 1997. A 3
day course. TRAINING / TEACHING EXPERIENCE (continued)
INTRODUCTION TO C++ For Hands On Technology Transfer, Inc. (HOTT) of Chelmsford, Mass. January 1997. A 4
day course. INTRODUCTION TO THE C
LANGUAGE For CompuLearn, Inc. November 1996. Two 3
day courses. CORPORATE TRAINING IN PC
BUSINESS SOFTWARE For the Houston Community College, Professional and Corporate Training and Development, Seminar Series. 1993 - 1995. (Approximate dates). Very
Many 3 and 6 hour seminars in: PC Hardware Introduction, MS-DOS, Lotus
123 (various versions/releases), dBase III+/IV-1.0, WordPerfect 5.1,
WordStar 2000 Plus, Symphony and the C Language. VARIOUS TRAINING IN PC
BUSINESS SOFTWARE For the local business community and Compushop Bell Atlantic. 1991 - 1994. (Approximate dates). A
number of training sessions in Lotus 123, dBase III+, WordStar
2000 Plus. SEMESTER COURSES IN PC
SOFTWARE For the Houston Community College, Data Processing Division. 1988 - 1990. (Approximate dates). 9
semester courses in MS/PC-DOS, dBase II/III, Lotus 123, C Language,
and Basic. EDUCATION DOCTOR OF PHILOSOPHY.
SOLID STATE PHYSICS Yeshiva University, New York, New York, June 1976. Dissertation
Topic: "Many-Body Theory of a Localized Phonon in an Electron
Gas." Last Updated: February 3, 2003
|
||||||||