John Brian Coke
Office: 817.283.4465 e-mail: johnbcoke@hotmail.com
Cell: 817.319.2910 e-mail:
john@cosoftech.com
Although
I’m not a web developer, building this site was a lot of fun and I think it’s
really a much more informative presentation than a traditional resume.
Check it out => www.co-soft-tek.com/index.htm
EDUCATION: BSEE, Southern
Some additional course work after graduation
PROFESSIONAL
ORGANIZATIONS: IEEE Computer Society, Association for
Computing Machinery, and Independent Computer Consultants of
SUMMARY: Graphical User Interface / Windows XP / Scientific, Engineering, and Financial Systems.
LANGUAGES: C, C++, C#, Python, Pascal, Assembler, Shader Assembler, bit-slice microcode
ENVIRONMENTS: OpenGL, DirectX, Windows .NET / XP / 2000 / NT, .NET controls, ActiveX, ATL, MFC, OWL, Rose XDE, UML, OOA, OOD, DOS, UNIX, VMS
DATABASES:
Access, Paradox, Empress, DBASE IV, Informix – ISAM, Code
Base, C-Tree, Oracle 7, SQL-Server
AWARDS: Wylie / Electronic Engineering Times National Design Competition 1995: Motorola Award
HIGHLIGHTS:
I
have 30+ years of software engineering experience including 15+ years C++
development experience in the Microsoft Windows environment. Currently I am working in OpenGL -
applications or drivers. I also build
graphical user interfaces for large client /server systems. I am
experienced with all types of methodologies: OOA, OOD, OOP, SA, SP; half a
dozen databases; mathematical functions: splines, exponentials, polynomials,
linear algebra; medical, electrical, and aerospace software standards; languages: assembler, Pascal, Python, C, C++,
C#, templates<>, and debuggers. I
have full life cycle experience: specification, design, coding and test. I’ve done scheduling with Microsoft project,
testing with Silk Test, configuration management with Source Safe, Star Team, Clear
Case, and CVS, and deployment with Install Shield and MSI.
Living
Software, Inc. April – now: C, C++,
OpenGL, OSG, GLUT, Shaders, Linux
Linux:
I would like to be able to do anything in Linux that I can do in Windows, but
I’m just starting on that adventure. The last time that I
used UNIX professionally was almost 20 years ago. In the late 80’s I used BSD 4.2, XENIX
(Microsoft), and Ultrix (DEC). Since
then my experiences with installing both BSD 6.2 as well as Red Hat Linux on
the PC were something of a disappointment.
However, a couple of weeks ago I installed UBUNTU on 4 different
machines here at my office. The installation
went smoothly, even for my Wi-Fi connection, although I may need to drop in the
latest drivers for that. As of today I have Mono and Eclipse working, so I am
very pleased with the results. I intend
to rebuild a complete development environment including Boost, Nant, Widgets,
Python, etc. I want to duplicate my windows working environment as closely as
possible. Apparently Python was already
installed with the Debian release. I
need to hook that into Eclipse. I’d like
to see if I can get Corba running as well.
As of today I have Mono and Eclipse running. I’ve added the Python language. I need to add Widgets and some sort of
Framework.
OSG:
This is an open source version of a scene graph program. I am experimenting with it as an exercise. It
utilizes the cmake build utility. I’ve
rebuilt TIFF, JIFF (GIF), PNG and JPEG source code from Source Forge Website. I could not get the original downloaded
binaries to link in debug mode to the Open Scene Graph source code. At first it was an exercise in frustration,
but gradually I began to get some insight into how to put things together. The last library to build was cURL. It required modifications to the cmake files
to correctly provide all of the #defines.
I probably should turn in the corrections to the cURL site and let the
OSG people know that the above debug versions don’t link.
I also built a 1 angstrom to 1 unit model of a water
molecule and a methane molecule using the OSG. I need to find out if there are
acyclic graph versions of Protein molecules available online anywhere. I can
get the DNA / FASTA format that’s not the problem. If I could visualize the map between the DNA
and protein by formula then reconstruct the protein in 3D and add some bending
/ folding tools that would be very interesting.
From 1DNQ.pdb data set drawn with OSG, Yes, there are no
hydrogen atoms in the model. Below both 1DNQ and 1DNR are drawn using
only selected amino acids. [MFC and OpenGL not OSG] notice disulfide bonds:
Methane and Water in OSG
GLSL
shaders:
GLSL just is not that complicated. Of course having said that it’s true I have
not yet built a pair of shaders that will pass the OpenGL conformance test.
However, I have managed to apply a (image 1)color array from a
vertex object, (image 2) and (image 3) a square texture, and (4) the “brick”
shader to a mobius strip using vertex buffer objects and a texture object.
I’ve been running the 3DLabs GLSL sample codes. I compared their GLSL blend shader to the
blend shader I wrote for BARCO in 3DLabs shader assembler. They are very, very similar. Even their notes say to be sure and pass the
alpha value down to the fragment shader; I did add some shader codes to my
mobius strip. I may put up a side by side comparison between the assembly
language and GLSL for alpha blend codes.
Image 1) A
brick shader, Rost, etc., is drawn onto Mobius strip, using x and y from the
position. Image 2) the standard brick shader is modified to use tex_coords from
above instead of x and y from the gl_Vertex shader attribute.
Image 4
through 8) the seam is visible where the Mobius strip starts over. Below a
Mandelbrot set adhered to the Mobius strip
.
U-SYSTEMS,
Inc. , February 2009 – March 2009: C,
C++, C#, and OpenGL, Consulting Programmer
Development
of OpenGL programs in a managed code environment. VC 9.0,
Short
contract to support virtual biopsy capability: Build classes to render vertex
buffer objects and store buffer data to 3DS format file.
The
client has a 3D bio-med application to use ultra-sound imaging of the human
breast for diagnostic purposes.
Create 3-dimentional
data export capability from vertex buffer objects into a standard format: 3DS.
Built a small single
dialog MFC application with simple draw capability and then rewrote that
program using windows forms and the customer’s proprietary class library. [This was to insure a reliable baseline from
which to start.]
Wrote sample coding
using vertex buffer objects. Built a simple cube with lines base on the
“red book” vertex array cube and created a drawing example of both a vertex VBO
and an index VBO. I rendered the cube to
the screen using both glDrawArray and glDrawElement.
Chose the “little
bird” demo program from the deep exploration 3D tool and exported it as a (non-managed)
cpp file. Put the data arrays into the
name space of a new managed c++ class, then moved the functions over as both
managed c++ and global c functions. [The
little bird application uses a single vertex mesh, a single normal mesh, an
array of materials, and a funny little algorithm for calculating when to change
materials.] Modified the begin/end paradigm
to use vertex arrays. Set up some lights
and did some rotations and translations to make it look good. Duplicated the code and created a new class
derived from the customer’s vertex buffer object class to create and populate
the buffer objects. See results below:
Little Bird in a
managed code environment
Wrote software to
export a 3DS format file using a publically licensed c library called 3dsLib. Downloaded a 3dsviewer [called
ab3d.reader3ds.viewer3DS.exe] from the net to verify the 3DS file so produced. Resulting 3DS version of little bird:
Little Bird displayed
in 3DS file viewer
Stored texture
coordinates into the 3ds file along with the vertices and then created a vertex
buffer object (VBO) for rendering to the screen. Rendered the checker board with vertex
arrays, creating the texture coordinate with: glTexCoordPointer
instead of glTexCoord2f. Rendered a textured cube from a 3DS file. Rendered the
vertex and
Texture
coordinates stored in 3DS file format.
SARNOFF,
Inc., July 2008 – Jan 2009 C, C++, Python, Corba, OpenGL, Consulting Programmer
Make
enhancements to a global mapping system capable of showing terrain and live
data. This is the Standard Ground
Station for the
The
c++ code was built using Visual Studio 2005 (VC 8.0). The python code was built using Ganymede
Eclipse with SlickEdit for code writing and python 2.5 drop in editor for Eclipse;
wxPython versions were 2.6 and 2.8
Modified the IDL and
let the Corba tools rebuild the interfaces.
Added handlers on both sides of the Corba interface. Cut / paste / and edit new IPC
functions. The GUI was written in Python,
the OpenGL was done in C/C++.
Investigated point singularities
in the projective geometry over the poles.
I had been reading a math book about adding bad points back into the
finite group one at a time. My instinct is that it is typical to solve a
problem in the real number system and then work out the code using floats,
doubles and integers not realizing that the algebraic properties [abstract
algebra: groups, rings, fields] for these subsets are quite different. In fact I think that with a proper algebraic
treatment these finite sets might be quite a bit more malleable than the real
number system. I created proper inverses
for the points and patched around the floating point errors. Still there were a number of special cases
throughout the code. The technique for
bad points is to treat each point separately and give it “group” properties. This problem remained an open investigation.
Ran the Coverity
prevent checker which detected about 750 potential defects and corrected about
250 defects. Approximately 250 of those flagged were false positives. Another
200 or so were a result of automatic code generation by various tools. An
excerpt from my notes on the Coverity Prevent Defect Checker:
1.
BUFFER_SIZE_WARNING 3/3
2.
CHECKED RETURN 13/13, but I’m not altering
the flow of control based on the result, not yet.
3.
DEAD_CODE 0/6 I have not decided what
to do about these. I may just #if 0
around the dead code and see the effect, I am cautious about chopping out code,
since we don’t do dynamic coverage. The
real error could be that the logic to skip over the dead code is in error.
4.
FORWARD_NULL 35/35 but I’m not changing
any of the generated Corba code, obviously.
5.
MISSING_LOCK 4/4, but one of these,
required no lock. I discovered this the
hard way, when the renderer suddenly stopped working, I hadn’t done a build in
a few hours and it took a while to find what broke.
6.
SECURE_CODING 150? Corrected string functions to prevent possible buffer overflow
[all of the deprecated sprintf type functions]
Utilized python’s
built in thread, queue, and lock functions to provide asynchronous client side
function calls. [Python allows very
smooth integration of various types. In
this case, what would be called a function pointer in c was placed on a
queue. New threads are simply created in
python. Worker threads can access the
queue removing the “function pointer”, which in this case is simply an
identifier with no special characteristics other than being of type
executable. Execution of the function
was simply by name. The l-value derives
its type from the r-value. No special code was required for declaring function
pointers or delegates or any c, c++, c#, type mechanisms.]
Create various minor
code enhancements at customer’s request [US ARMY].
BARCO,
INC. December 2006 – June 2008, c, c++, OpenGL, Consulting Programmer
Develop
an OpenGL graphics driver.
Designed and wrote an implementation of a safety
critical version of the OpenGL display lists capability. The native Display List functionality for our
graphics card utilizes list architecture with memory management on the server
side [GPU]. This functionality is not
allowed for our avionics application. I
have rewritten this code to use finite arrays OpenGL client side.
Designed and wrote
code implementing an algorithm to change the order of execution for segments of
code within a display list. The
algorithm slices the code into segments, creates a tree representing the
segment structure, and traverses the tree according to a set of reversal
operations.
Designed and wrote
code implementing an algorithm to parse the binary of a compiled and saved
display list. The display list had been
compiled for a different graphics card, so it was necessary to regenerate the
OpenGL commands and recompile them for the new graphics card.
The tricky part was
making it work with display lists. I
expanded my test frame to test functions against the ATI driver and the Barco
Driver.
(The upper left openGL
display is a vector font library stored as a series of vertex arrays stored in
a saved precompiled display list; a customer openGL extension provides saving
precompiled display lists)
Vertex
arrays at work
Wrote read pixel
code, this task involves locating memory mapped chip address in local address
space and converting chip format data to standard GL types
Figure out what the
actual addresses are for the frame buffer memory. Enable the pipeline bypass to do direct
memory reads.
Designed and wrote a
graphical test framework for running the OpenGL EC-SC conformance tests. See picture
on the left above.
Designed and wrote a
set of OpenGL performance tests, an accounting structure, and a test frame for
running the tests.
Wrote blend
code. This is pixel unit micro code. I Modified anti-aliasing codes to improve
speed.
This is fragment
shader code, not GLSL, this chip does have GLSL. The language is “c-like”. It translates assembler
to horizontal micro code which drives the programmable units on the graphics
chip.
I built various
reworks, fixes and new code for the above.
I re-split OpenGL
into client / server model. I then connected
via sockets to simulate the 653 partition boundary.
SHURE,
INC. August 2005 – December 2006: Consulting Programmer:
Technical
Lead Windows Development: COM, COM, nothing but COM, Visual C++ 7.1 and 8.0,
STEREOTAXIS,
INC.: July 2004 – June 2005: Consulting Programmer:
Modified
and enhanced existing code base: OpenGL / Windows XP / VCC 7.0, St. Louis, MO.
EFW,
Inc.: Jun 2004 – December 2004: Consulting Programmer:
Developed
code Windows XP / Visual C# / Integrity Real-time / C
LIVING
SOFTWARE, INC.: January 2004 – May 2004:
Research
on version 7.0 compilers: MICROSOFT WINDOWS / VCC 7.0 / .NET / C# / VB:
ABBOTT
LABORATORIES: JANUARY 1998 – DECEMBER 2003:
Consulting
Programmer: WINDOWS / C++ / VCC 6.0 / MFC / ATL / WIN32 API / DIRECTX / OPENGL
/ GDI / ACTIVEX
Siemens DEMATIC
AG (Electrocom AUTOMATION): December 1995 - November 1997:
Consulting Programmer: WINDOWS / VCC
5.0 / C++ / MFC / ACTIVEX
· Development of an automation system for control and data presentation of a nationwide postal sorting system. New design, coding and test of Windows NT graphical user interface. MFC development with document / view architecture. Extensive use of new VC++ controls: Property sheets, Tree controls, List controls, Custom toolbars, etc. Constructed viewers and database engines for four real-time memory image databases. Windows MFC Printing. Inter-process communications via custom message classes and global sections. Software for direct modification of the registry. Complex class serialization. FTP client retrieves configuration data remotely, updates the registry and loads global section for other processes. Documented project using Rational Rose analyzer: reverse engineering system to Mil spec 2167 design document.
MISCELLANEOUS
COMMERCIAL SOFTWARE DEVELOPMENT EXPERIENCE: 1991 – 1995 VCC / MFC / OWL / SDK /
ACTIVEX
· Performed object oriented design of distributed and remote objects in Rose C++. Object oriented consulting and mentoring for first object oriented project at the company. Utilized collaborator / responsibility (CRC) and Booch (UML). Facilitated C++ class design, developing objects at both the class level and the component level. Designed distributed configuration database server utilizing classes described above for persistent storage of a configuration profile class.
· Performed alpha test and defect removal for an upgraded C++ GUI based credit reporting system.
· Designed new 32 bit object oriented C++ software application. Performed data modeling and verification utilizing the Access database. Developed multi-process / multi- threaded solution. Utilized anonymous pipes for interprocess / inter-thread communication. Developed add on classes for adding this communications model to the existing system. Tested interprocess and inter-thread communications.
· Designed message routing and translation function of a real-time Object Oriented paging system controller under Windows NT server. Utilized various well-known methodologies for this Multi-threaded / multi-process application, utilizing pipes for inter-process message buffering and sockets for TCP / IP client-server connectivity to transmitter sites over X.25 land lines. Coded console applications and message translation classes. Utilized Access / ODBC to simulate the client / server processes. Constructed GUI test program for directing message traffic.
· Developed a number of new ActiveX controls: toolbars, menu, status bars and application base classes. Designed and constructed a data conversion program for translating data from an existing ISAM database into an Oracle database. Created a new schema and detailed one to one map between all elements of each database. This involves approximately 1000 elements and 100+ megabytes of data per system. Designed an algorithm for automatically generating an SQL schema based on the data unique to each site. Some of the data is stored in free text format. An algorithm for parsing free text data into a relational format was designed and coded.
·
Performed Beta test, code enhancements,
and corrected defects of a C++ windows application. Developed and taught a
course curriculum in Object Oriented
Analysis. Based on
Coad’s view of OOA.
· Developed new software using Windows SDK and Microsoft’s C7 compiler for an intelligent tax system. Developed new C code to enhance the existing C-tree database applications. Debugged a large - 500,000+ loc piece of C code which was not formally documented. Enhanced a prototyped OLE annotation system and modified the C-tree interface to correctly represent the requirements. This application involved custom message traffic between the Frame, the Client and the MDI children. Wrote a Visual C++ index key converter for the C-tree database.
· Designed and developed graphical user interface and Object Oriented software for replaying prerecorded or synthesized digital audio frequency data (prerecorded or synthesized fault data) through high performance test equipment amplifiers. Provided multi-channel translation, automatic scaling, synthetic pre-fault sine wave data, division by Potential Transformer and Current Transformer ratios, and the editing and storage of permanent test plans based on the selected data channels. Developed an Objected Oriented Design for a new electrical meter test system. Developed a database system for tracking requirements throughout the product life cycle.
· AEROSPACE SOFTWARE DEVELOPMENT EXPERIENCE: 1978 – 1990
· Developed several financial database applications for Litton.
·
Managed software development team of
five engineers during initial phase of development of an embedded real-time
Infrared Imaging Airborne System. Initiated DOD 2167a software development.
Used Boehm's Software Engineering Economics COCOMO intermediate model to
project costs of both this project and a conversion of existing c code to
· Developed test plans and procedures to validate Mode-S (transponder) radar ground station.
·
Reviewed research and development
projects: Artificial Intelligence,
· Designed and developed precision stage controller board firmware for the hardware graphics pipeline. Wrote IEEE 488 communications, image-recognition, initialization and control logic. Debugged new digital boards. Wrote portions of MS-DOS BIOS embedded driver for new token ring LAN board in Pascal. Used structured analysis and design to map requirements to transport / network layer protocols. Developed artificial intelligence algorithms for automatically generating test vectors for VLSI chips as part of Automatic Test Equipment expert system.
· Developed CASE tool (T-Parse / VMS) which automatically read and documented the internal structure of existing undocumented code.
· Team Leader software integration and test. Developed integration test software (VMS/ Pascal/ Macro 11 assembler) and performance studies for a new multiprocessor satellite data system. Discovered and corrected critical miscalculation in data flow design assumptions.
· Designed Direct Memory Access and Central Processing Unit Interrupt I/O cards for networking a VAX 11/780 to an IBM 360 channel controller. Managed the integration and test of MIPS SD ground radar display station of a fire control system. Wrote two papers on the computational requirements of deep space probes: "The Future of Deep Space Fight Navigation" and "Three Axis vs. Spun Spacecraft Navigation". Performed research and development in the area of deep space flight computers, especially multi-processing, task switching, and load balancing architectures. Member of flight computer architecture team for Venus Orbital Imaging Radar Spacecraft.
COMMERCIAL
SOFTWARE CLIENTEL:
SHURE, STEREOTAXIS, ABBOTT LABS, SIEMENS AUTOMATION, STERLING
COMMERCE, AMR, COMPUTER LANGUAGE RESEARCH, TRW (EXPERIAN), MOTOROLA, ALCON, AVO
MULTIAMP, U-SYSTEMS
AEROSPACE
SOFTWARE CLIENTEL:
LITTON DATA SYSTEMS, GENERAL DYNAMICS, UNISYS,