Wednesday, September 28, 2016

Henry's Zen Things

My uncle passed away recently after a life dedicated to art and living. I admired him very much and think that this advice on Zen Things was appropriate to post, even in this mostly career-oriented blog...


  1. Do one thing at a time
  2. Do it slowly and deliberately
  3. Do it completely
  4. Do less
  5. Put space between things
  6. Develop rituals
  7. Designate time for certain things
  8. Devote time to sitting
  9. Smile and serve others
  10. Make cleaning and cooking become meditations
  11. Think about what is necessary
  12. Live simply

Monday, January 18, 2016

Natural Order Evaluation of Spreadsheet Cells

Instead of just tossing this bit of history in the trash I decided to scan and post it for posterity. In the mid-80s I worked for EMS/McGraw-Hill on a series of products for the Gregg division that were used to train students on how to use Lotus 1-2-3 and spreadsheets in general. We created a product called McGraw-Hill Integrated Software (MHIS) which included a spreadsheet module (written in C for MS-DOS). The memo I wrote explaining the implementation of natural order evaluation in a spreadsheet vs. column-order evaluation in a spreadsheet is below. It was fun to see that I was able to use my computer science education to bring a postorder traversal of a binary tree to the project!

Dolphin Inc.

Dolphin Inc. (formerly was a boutique educational software company that worked primarily for educational publishers including McGraw-Hill, Pearson, Houghton Mifflin, and Educational Testing Services (ETS) creating software for textbooks and other educational products. Dolphin's work was nominated for Codie awards several times and the Criterion product by ETS (Dolphin worked on the web interface) was awarded a Codie in 2005. At its peak Dolphin had approximately 40 employees.

The first products developed by Dolphin were on MS-DOS and the Apple II (6502 assembler!) in the 80s and the company migrated with technology into Windows and Macintosh software and then to web-based products.

The company was acquired by Byron Preiss Multimedia in approximately 1996 and then when that merger unwound, the company was sold to American Education Corporate (AEC) in approximately 1999. Dolphin continued to develop product for external clients until 2005 when the missions was changed to working only on AEC internal projects. AEC was subsequently purchased by K12.

Some materials including screen shots from software products can be found on Dolphin's Facebook page.

Dolphin Write (WordPerfect 5.1 Compatible SW circa 1995)

Ah, remembering programming in earlier years... Dolphin Inc. created software for a variety of educational publishers including Glencoe/McGraw-Hill and its Gregg line of keyboarding software products. Part of the product included a WordPerfect 5.1 compatible word processor that I created in my basement (of course!) around 1993/1994 shortly after coming to work for Dolphin in Gibbsboro, NJ (near Cherry Hill). The product was written in C and was an interesting, if intense, project created under a tight deadline and pressure from the client to replace a word processor (NYWord) that we had attempted to adapt unsuccessfully.

A Gap Buffer approach was used for managing the insertion of text and of course implementing base WordPerfect 5.1 functionality including the Show Codes feature, endnotes/footnotes, and even basic keystroke macros was fun.

The first screen shot shows some of the features in action including indent, bold, italics, underline, footnotes, and endnotes. The Show Codes feature is at the bottom of the screen and below the (1) you can see the indent code and below the (2) the footnote (FN) code.

What follows are screen shots of the pulldown menus to give a feel for the features supported. We even had a modest set of print drivers included that covered many of the printers found it schools at the time (LaserJet III, Epson, etc.) Dolphin Write used the vLib library for the windows-like user interface.

Here's a link to the Dolphin Write folder where you can download the files needed to run Dolphin Write (dw.exe, dw.hlp, dw.lst, dw.pdb, dw.cfg, dw.err). You'll probably need to download DOSBox to run the 16-bit EXE file on any recent Windows (64-bit) system.

Saturday, June 06, 2015

Phaser for HTML5 Game Development

Just starting on an adventure in HTML5 game development using Phaser and thought I'd keep notes online. There's a bigger picture application goal that I have in mind, but it will start as a series of exercises and I want to record them while I'm learning.

First I wanted to create an example of a polygon moving around the screen using the cursor keys. After some exploration of the examples and reading documentation it boiled down to this basic example. First the index.html file:

1:  <!doctype html>  
2:  <html lang="en">  
3:    <head>  
4:      <meta charset="UTF-8" />  
5:      <title>Polygon Test</title>  
6:      <script src="js/phaser.js"></script>  
7:      <script src="js/polytest.js"></script>    
8:    </head>  
9:    <body>  
10:      <div id="phaser_game">  
11:      </div>  
12:    <script type="text/javascript">    
13:    window.onload = function() {  
14:      game = new Phaser.Game(500, 500, Phaser.CANVAS, 'phaser_game',  
15:                  { create: create, update:update });  
16:    };  
17:    </script>  
18:    </body>  
19:  </html>  

and the polytest.js file:

1:  var game;  
2:  var bmd;  
3:  var img1;  
4:  var bmdsprite;  
5:  var cursors;  
6:  function create() {  
7:    // used to detect arrow key presses in update function  
8:    cursors = game.input.keyboard.createCursorKeys();  
9:    // bitmap to draw onto  
10:    bmd = game.add.bitmapData(128,128);  
11:    // draw on the bitmap canvas  
12:    bmd.ctx.beginPath();  
13:    bmd.ctx.rect(0,0,128,128);  
14:    bmd.ctx.fillStyle = '#ff0000';  
15:    bmd.ctx.fill();  
16:    // use the bitmap data as the texture for the sprite  
17:    bmdsprite = game.add.sprite(200, 200, bmd);  
18:    // an Image is a lighterweight version of a sprite  
19:    img1 = game.add.image(50, 50, bmd);  
20:  // unfortunately, drawPolygon is not a canvas feature  
21:  // so a future effort is to draw the lines separately:  
22:  //  
23:  // 4839993/how-to-draw-polygons-on-an-html5-canvas  
24:  }  
25:  function update() {  
26:    if (cursors.left.isDown) {  
27:      bmdsprite.reset(bmdsprite.x - 15, bmdsprite.y);  
28:      img1.reset(img1.x - 15, img1.y);  
29:    }  
30:    else if (cursors.right.isDown) {  
31:      bmdsprite.reset(bmdsprite.x + 15, bmdsprite.y);  
32:      img1.reset(img1.x + 15, img1.y);  
33:    }  
34:    else if (cursors.up.isDown) {  
35:      bmdsprite.reset(bmdsprite.x, bmdsprite.y - 15);  
36:      img1.reset(img1.x, img1.y - 15);  
37:    }  
38:    else if (cursors.down.isDown) {  
39:      bmdsprite.reset(bmdsprite.x, bmdsprite.y + 15);  
40:      img1.reset(img1.x, img1.y + 15);  
41:    }  
42:  }  

as noted in the source code, I really wanted to use drawPolygon, but discovered it is a feature of Geometry in Phaser and not an HTML5 Canvas feature. From the code you'll see that both Sprite and Image objects are being used. Image may be sufficient in many cases.

Here's what the resulting screen looks like:

As far as tools, so far I'm using Brackets with Live Preview.

Handy links:

Phaser Cheatsheet:
(root site is good:

Amazon Dev Blog:

Tuesday, December 09, 2014

Dashboarding Dos and Don'ts

Nice summary on dashboard design. It's about an hour, but worth the time.

Dashboarding: The Developers’ Role in Data Analysis

Visual display
the most important information needed to achieve one or more objectives
fits entirely on a single screen
so it can be
monitored at a glance.

(Stephen Few)

Categories of dashboard:

  • Strategic (long term decisions)
  • Analytical (immediate decisions, explorable)
  • Operational (immediate decisions)


  1. too big
  2. missing context
  3. excessive detail
  4. deficient measure
  5. inappropriate visualization
  6. meaningless variety
  7. poorly design visualization
  8. large lie factor
  9. poor arrangement
  10. bad highlighting
  11. chartjunk
  12. unattractive display


  1. simplicity - reduce non-data pixels (data-ink ratio)
  2. simplicity - reduce data pixels
  3. highlight appropriately (color, position, form, motion)


Information Dashboard Design (Stephen Few)

The Visual Display of Quantitative Information (Edward R. Tufte)

Saturday, June 28, 2014

Push Notifications for HTML5 Web Apps (Not)

I've been helping a high school student with a senior project related to an app she is developing in HTML5. Push Notifications were desired and are of course one of the more useful aspects of having a mobile solution. Unfortunately, Push Notifications (without using a third-party solution) require a native app, at least at the present time for a broad iPhone/Android audience.

PhoneGap may offer a solution, but I've started on a research project into alternatives for developers wanting to offer a nice Web App solution supported by a third-party Push Notifications solution. Here are some links that I've found so far:

There are no doubt some text messaging service options that would provide another route for a solution that requires a capability like Push Notifications. I'll append these here over time.