Midnight Beach logo

Midnight Beach - Recent Work

2006

Finished my .NET 2.0 book on February 9th. After seeing the book through a long production process, received my copies on June 2nd; it's selling about as well as you'd expect a book to sell when selling 5000 copies is doing really well.

Production was lots of high priority interrupts, and in between I updated my website, and spun some articles and talks out of the book. I wrote a few DevSource articles. I gave user's group talks on Advanced Delegates April 5 and 25 and a talk on What's New In 2 on Feb 16.

I also indulged my spring fever as much as the weather would allow. My garden is alive again (after a fallow 2005 so I could have actual copies of the book by the end of December) and I'm getting back in shape after a mountain bike accident in Aug-05 ripped up my shoulder and left a lot of things off limits.

2005
Logged enough hours with Scantron to risk falling behind schedule on my book. Designed and implemented a shell that loads plugin assemblies into container windows (using app domains for security tests); designed and implemented a rich services api. Also did a couple of smaller utility modules used by specific plugins: scanner language parsing and generation; and output interpretation and formatting.

Turned book (as of June) into slides, and delivered a day and a half of .NET training to Scantron's Delphi programmers.

Nearly finished my .NET 2.0 book - it would have been printed by December, in fact, if I didn't lose three and a half months to a shoulder injury.

Wrote another DevSource article on Dynamic Plugins: Using the AppDomain Class to Load and Unload Code about how to load and call code in a temporary AppDomain without affecting your original AppDomain .

2004
Started a long-term C# contract for Scantron (Irvine, CA, via TierSolution) doing architecture and tools for a suite of modular applications: plug-in architecture and framework code; error reporting and analysis; scanner control language parsing.

Researching and writing my .NET 2.0 book: Architecture, C# 1 and 2, Framework Class Library [FCL].

Four .NET articles for DevSource, a Microsoft-sponsored Ziff-Davis online magazine:

  1. Object Oriented State Machines: implementing state machines as a collection of objects (one per state) instead of an enum and a switch statement.
  2. Delegates vs. Interfaces: delegates act like method pointers but are slow, while interfaces are faster and offer more functionality.
  3. Hosting A C# UserControl: a step-by-step guide to hosting a C# UserControl in a Visual Studio tool window.
  4. Adding Controls To Forms: writing a custom tool palette in VS.2003.
2003
Medium length C# contract for Streamline Solutions (San Rafael). They were building an application framework, and I did the Visual Studio integration. This included assemblies to generate "project" and "solution" files, but the majority of it was writing a C# UserControl that 'lived' in a VS tool window and that acted as a custom tool palette for a very large control library. This involved some UI, but was mostly a matter of learning my way around the VS Development Tools Extensibility [DTE] interface so that users could drag-and-drop controls from my palette to their form.

Short Delphi contract for VPop (Ojai). They were trying to use a Delphi form as an Internet Explorer toolbar, and were getting unpredictable errors. After stripping out most functionality, we concluded the problem probably was not with their code but that Delphi forms just weren't compatible with the IE toolbar threading model.

Delivered the first chapters of my .NET book, and did a lot of C# programming by way of research. Most projects were very small, but the two largest were:

  1. A Bayesian email classifier that taught me a lot of .NET memory-conservation techniques: mostly heavy use of the String and Regex libraries substring overloads, but also partitioning a large task into an IEnumerable pipeline.
  2. A script language compiler. I used Coco/R to build the parser, and Reflection. Emit to actually generate the code. The language itself is, for the most part, a procedural subset of C#, with some interesting "array slicing" extensions and default conversions to string - for example, "Foo" + 1 == "Foo1". I took a few shortcuts, but the compiler can create and manipulate FCL objects, and has been very useful in my web content management system.
2002
Very short Delphi contract for Asta Technology Group (Boise, Idaho). Found threading bug, did general code review.

Started learning C# and .NET. Started my current content management system.

Wrote and delivered two talks for the European BorCon in London (.NET Architecture and Kylix for Delphi Programmers). Reported for Delphi Informant on what was said at BorCon 2002 about Borland's .NET Plans.

2001
Short Delphi contract for Socket Communications (Newark, California). Designed and implemented a custom protocol running over HTTP (an ISAPI DLL server and a desktop (TForm) client that used WinINet) for testing performance and power consumption of network cards for WinCE machines.

Wrote most of my Kylix book - the IDE and VCL, Linux, and projects (extended code samples) sections.

2000
Long Delphi contract for Stationery Central (Lake Mills, Wisconsin). This was one of those deals where the customer really didn't know what they wanted: It started as a WYSIWYG email client that would send HTML mail using downloadable 'stationery' templates; it morphed into a MIME handler for automatically installing Outlook templates when you downloaded a .xcl file. The email client used the RichEdit control and various Indy internet components.

Short Delphi contract for Socket Communications (Newark, California). User interface and database work on application for testing PC Cards in off-shore production-line environment. (This was just a matter of finishing an app that they didn't have time to do in-house.)

Did research for my Kylix book, and wrote the first chapters.

1999
Short Delphi contract (1999/2000) for Austin-Hayne (San Mateo). Found and fixed a problem with the HR app (below) when it ran on DBCS machines.

Very short Delphi contract for Gluons, LLC (San Francisco). Wrote Delphi bindings to C dll, and helped with integration of micropayment system into customer's code.

1998
Long Delphi contract for Austin-Hayne (San Mateo). Did a 32-bit port of a multi-exe system to Win32, fixing bugs and adding features. Designed and implemented ratings subsystem: added numerical expression evaluator and active controls (radio buttons, select lists) to .rtf editor. Maintained and debugged 3rd party C-based .rtf editing dll.

Medium length Delphi contract for Mobile Information Systems (Sunnyvale). Did a 32-bit port of an order entry app: improved UI, fixed bugs, added features, wrote custom components.

Medium length Delphi contract for ETS (Davenport, Iowa). Continuous data export via OLE "advise loop".

Wrote Better Threads for the VCL, a two-part article for Visual Developer magazine. Presented a set of thread classes that execute arbitrary method pointers, and discussed the use of the Win32 API call MsgWaitForMultipleObjects to put a simple, procedural face on complex, asynchronous processes. Pascal and C++ source code.

1997
Long Delphi contract for DeltaPoint (Monterey). Designed and implemented a MLE interpreter; did some standard db and GUI stuff; acted as Delphi mentor to C++ programmers.

Wrote Models, Views, and Frames chapter for the Coriolis book High Performance Delphi 3 Programming. Using a form as a lightweight component by setting its Parent property. Details and applications, including a wizard and property sheet framework that relied on Delphi metaclasses.

1996
Medium length Delphi contract for Socket Communications (Fremont, California). Wrote DLL that supplied high-level program interface to pager PC cards. Final design; implementation; "unit testing"; preliminary documentation.

Long Delphi contract for MaxInfo (San Francisco), which was bought mid-stream by NetManage (Cupertino). Designed and implemented user programmability (OLE Automation server, exporting objects to client code; interfacing with Summit Basic Script); reports and search subsystems (visual query-tree editor; on-the-fly SQL generation).

Medium length Delphi contract for Destiny Telecommunications (Oakland). GUI hierarchy editor for Oracle backend.

Two short Delphi contracts for Remacs (Pleasanton). Troubleshooting.

Wrote three articles for Visual Developer / PC Techniques magazine that were reprinted in the Coriolis book KickAss Delphi Programming:

  1. 3D Fractal Landscapes, about a simple fractal landscape generator I wrote: 3D perspective transformations, fixed point arithmetic, and Delphi TCanvas graphics.
  2. Using RDTSC For Pentium Benchmarking, a very short piece.
  3. Is It Right To READ To WRITE?: Delphi does not call a TPersistent property's write method when loading a component from a stream.
1995
Long Delphi contract for DG Systems (San Francisco), starting late in 1994. Front-end to Turbo Pascal database, with view to later movement to BDE.

Wrote the appendix Writing HTML for the Coriolis book The Mosaic & Web Explorer.

Pre-Delphi
Wrote and sold MANDELBROT 3 fractal software. Fixed point and 80x87 math; GUI under DOS; EMS and XMS memory mapping. MANDELBROT 3 was reviewed twice by the New York Times and Byte magazine.

XBBS was a DOS-based multi-user BBS, written in Turbo Pascal. The whole thing was one big state machine; the prioritizing task switcher simply pointed to the appropriate user record and executed the state. Assembly-language interrupt handlers, and a clever (imho) use of text file device drivers. Pre-internet, this was a big part of the Santa Cruz geek scene, with five dial-up lines in a "hunt group" behind a single phone number.

Wrote and sold lots of little semi-commercial games and toys in Turbo Pascal and assembler. Also FORMIT, a 'markup language' for text formatting.

Wrote nineteen magazine articles, mostly about Turbo Pascal.

Started my popular homeschool resource site, www.midnightbeach.com/hs, which currently spans 148 pages and 2.1 MB of HTML, and which has driven my content-management needs more than the main Midnight Beach "pubs and services" site.

Created on October 15, 1995, last updated July 9, 2006 • Contact jon@midnightbeach.com