Monday, 28 September 2009

Please keep in touch

From 6th October 2009, no one should expect to receive new emails signed like this:
Herb Miller
Senior IT Specialist
CLS AD Transition
+ Mail Point: DGC (CLS), North Harbour, Portsmouth
( Int : 37251581 Ext : +44 (0)2392 561581
: Notes : Herb P Miller/UK/IBM
@ Sametime / E-Mail : herb
Instead, they will either be from or my gmail address

ghoti spells fish

Just in case you weren't sure what "ghoti" is here's one of many entries you can find on the subject.
Ghoti - wikipedia's entry

I've also heard that ghoti is the Hindu word for marbles. This rather confused some of my Indian colleagues who had not read So long and thanks for all the fish, by Douglas Adams.

Didn't Matter Anyway

I'd like to share with you the lyrics of a song
I have learnt to love in the past few years
and which aptly describes my feelings as I contemplate my impending retirement.

Didn't matter anyway
words and music by Richard Sinclair

It didn't matter anyway
We'll meet again some other day
Till then keep well
You'll be in my dreams
Goodnight, goodbye, bye for now...

The time has come to leave you
Please don't feel alone
For now that we've met
There'll be a way to reach you and say
'Never mind...'

How many bugs in blank lines

Did you know that a blank line can cause syntax errors?

The number of blank lines that I have been responsible for maintaining is an estimate based on
summary figures for projects I have worked on since the mid 90's

In 4 projects, written in C, the total lines of code and total blank lines are:

Project,Total lines,Blank lines,Comments

An example of a blank line causing a syntax error is:

void main( void )
#define blankmac \
int a = 1 \


So you can imagine how many potential bugs there are in these projects given that on average there's one every 1,000 lines!

Avoid saying I didn't think you'd find it

I also learnt that when a tester complains about a problem you were already aware of the list of
acceptable responses does not include "I didn't think you'd find it"

Many years later, after I'd avoided the customer care course, the following events took place

1. I found a bug in some code, only a couple of days before we released it
2. Discussed it with development manager
3. We agreed that it was a very unlikely situation
4. So we released the code unchanged... our testing was 95% complete
5. System test found it on day one of testing
6. They reported the problem
7. I looked at their error log
8. It was exactly the same as mine
9. So I said "Yes, we know about the problem"
10. I explained the situation under which it occurred
11. Tester asked "So you released code with a known problem?"
12. And I replied "Well, I didn't think you'd find it"
13. Oops

What did you expect

I now understand there is more than one way to ask "Well, what did you expect?".

In the early 90's we were developing the Technical Infrastructure being used by
a number of projects for utility companies. We provided C APIs.

At one customer the IBM contact called to report that when their program
called our functions passing a NULL pointer for a particular parameter the program crashed.

I replied "Well, what did you EXPECT?"
Had I replied "What DID you expect",
ie. How would you like the program to behave when you pass the wrong parameters
then Jo Strain might not have suggested I go on a Customer Care course.

I can use a model 29 card punch

I used to be able to multi-punch semi-colons using a model 29 card punch.

They could only do BCD - not EBCDIC

For those of you who have only worked on Windows or -ix systems there are other types of character representation systems than ASCII or Unicode.

IBM mainframes use(d) EBCDIC - Extended Binary Coded Decimal Interchange Code -
which is an 8 digit code, whereas BCD was only 7.

The IBM model 29 card punch had a smaller keyboard than the model 129 so if you wanted to type an EBCDIC character, such as a semi-colon then you had to multi-punch the holes into the card.

Whenever I wanted to use the card punch at college the only one available was the old style.
So I learnt to live with it.

I've never used a coding pad

Not even at university, where I used to write my programs on a quarter of a piece of green lined paper. In pencil; in case I had to rub the code out or change indentation.
There was no way I could write big enough letters to fill in the empty blocks on a coding pad.

When I first started permanently, there was about one terminal to three programmers but I could type fast enough that I didn't need to send my code away to be punched in by the data input staff.

80 into 800 won't go

I recently tried to back up the contents of an 80 GB hard drive to a single 800 MB CD

My first work PC was a 3270-PC. It had a 10 megabyte hard disk drive which took me
nearly a year to fill up.

My first home computer was a PS/2 Model 80.
It ran at 25Mhz, with 4MB main memory in order to suppport OS/2 Extended Edition
and a 100 MB hard disk drive.
At half price it still cost over 4 gran, 20 years ago.

Recently, I purchased a second portable USB hard drive since I was worried my
first one (80 GB) was behaving strangely. As my disk space was limited
I thought it would be a good idea to backup to CD the contents of the drive
before moving files about.

Without thinking I just tried to drag the contents of the drive to the CD writer
and then kept wondering why it stopped copying files at just over 2.75 GB
having written nothing to the CD.
Then I did the maths

I should have stopped and taken a rest there and then.
Realising that saving to CD was not going to be possible I hunted for
spare disk space on another drive.

Well to cut a long story short, one drive looks very much like any other in Windows
(D:, E:, etc), so what actually happened was that I deleted ALL copies of some directories
from ALL of the drives.
And I didn't have a CD backup!

Before I do anything else I'm going to backup everything to my brand new 1TB Seagate external drive

All code used to be CAPS

Nowadays nearly all code is written in mixed case.
But in the late 70's and early 80's we used dumb screens (3270's) and the ISPF editor would be configured to automatically capitalise just about everything you typed.
So PL/1 programs were written in CAPS.

When we started using Script/DCF (which became GML (leading to HTML then XML)) to develop the system documentation then we typed in mixed case.

I wanted to extract the comments from my code in order to:
a) produce the detailed design
b) provide input for the Data Dictionary
so I wrote a program that was affectionately called ptery.
Note: This was well before we knew about Doxygen.

This was against the programming standards at the time. So the compromise we eventually agreed (Dave Jelley, Steve Smith, Adrian Prince, etc) was that I'd write the code in CAPITALS and the comments in mixed case.

We now make things all capitals (CAPS) if they are global constants, defines or macros.

As an aside, I have never learnt to type with the Caps Lock on.I simply press the shift key with my left ring finger, and make do with 5 or 6 other fingers from both hands to press the keys.

My desk name plate is 24 years old

My desk name plate celebrated its 21st birthday three years ago.

In June 1985 I attended a course entitled PSL/PSA.
The Instructor was Rolf Moerman, the course manager was Jon Tappy.
I can't remember anything about the course except
a) I have a photo of the class and can recognise 5 in the picture (including me)
b) I still have my name plate, was made by John Banks of the MCS Development Centre.

It was plotted on the back of an "OUT - do not leave any correspondence or material" sign
and I have kept it on my desk ever since.

Give your computer a nice name

I had a computer called Drinkstable... as in "I haven't had a drink all night occifer"

Are computers people too? Perhaps not, but they can have nicer names than "IBM-B7L3R8616"

I've named computers after film characters, favorite music and jokes.

There was forrest, majordan (should have been lieutenant dan), jenny and drillsergeant.
We had two servers called bubba and gump.

As my favourite band is Caravan, I've named other machines: dunstans, better by far and bobbingwide. And my colleague Ajay called his nightmare.

Half of the computers in the CLS/CTS project were named after Belgian beers: Rodenbach, Primus, Geuze to name a few.

Drinkstable was a rude spoonerism, suggested by my mate Jon Woodcock.

Draw diagrams with 8 boxes

In the early 90's we were still drawing diagrams using box characters in Script.

My colleagues pointed out that many of my diagrams consisted of 8 boxes.

After some consideration I replied that this gave me an edge as
... most people can only remember 7 things at any one time.
... and the one that most people forget is "Systems Management"
... but it's not that one, otherwise I'd have 9 boxes

It turns out that in recent research the number of things people can
remember is now only 4.

spectacles, testicles, wallet and watch :-?

I've never won a project naming competition

For Technical Infrastructure my slogan was "tired of doing it by hand... then get yourself a FlowJob".

For the recent CLS competition my submission was in the form of a poem.

The bean counters at CLS
desired a slogan blue

They offered wide screen for success
in competition. TRUE!

The entries varied, more or less
from alphabet to zoo

But chosen above all the rest
was Herb's choice "blue cashew"

I mean we're not trading peanuts are we?

"Blue Currency" was the winner.

I did win a bottle of bubbly for my suggestion for the
eBI logo - eBusiness Integration
... but someone else actually drew the image.
There was no competition when we changed to PCEC.
I suppose it was too "EeCee PeCee"

I had 4 managers on my first day at IBM

People often complain that in recent years they have had more managers than hot dinners. Well, it's not a new thing...

On my first day as a permanent employee I had 4 managers:
My offer letter said my Manager would be Jim Jerwood
Later I was told it would be Audrey white.
When I arrived in the office I was met by acting manager Pete Walley
since my real manager was on vacation.
I can't remember who the real manager was: Rob somebody, quite a large man
with black hair and black glasses.

Anyone who worked in WTAAS in the late 70's care to remind me?

Quite What is an Object Action interface

I accidentally invented an Object Action Interface for ISPF/PDF - I called it "Quite What" (QW)

In the early 80's, I programmed a suite of routines that performed an appropriate action for the
object you had most recently selected (either by browsing or editing). In most cases the routine performed the next most logical action e.g. compile a PL/1 program, format a script document but it also had the ability to offer a set of choices.

I intially called the routine "What", as in "What next?" but it was a bit slow. The improved version was simply known as QW. Though I never knew what the Q stood for: Quite or Quick. All I know is, for most English speakers, the letters were nice and close on the keyboard.

I didn't realise it at the time, but looking back I believe I had accidentally invented Object Action programming for ISPF/PDF. I didn't learn about Object Oriented programming until the early 90's.

I believe this was the closest I'd ever get to inventing something patentable.

Two of my colleagues have committed suicide.

I remember a Peanuts cartoon where Linus (7) and Charlie Brown (9) are leaning over the picket fence considering life.
Linus asked "Do you think there's one day on your life that's better than any other?"
Charlie Brown replied "There must be."
Linus paused then said "Suppose you've already had it".

For my colleagues who committed suicide I imagine that their last day was also their worst day.
We will have no way of knowing.

But looking on the brighter side, for me at least, there's a 60% chance that if I've had the best day of my life it was while working for IBM.

Brighter still, I hope my best day is still some time in the future.

Driving lessons

I learnt to drive in the IBM Havant car park. On my second lesson I nearly kangaroo'd backwards into the Building 27 machine rooms. At the tender age of 16 years, 11 months and 28 days
my Dad said I could have my first driving lesson, round the IBM Havant car park.

There was a lot of kangarooing and my cornering was something to behold.

If you ever want to experience how I first attempted turning right then try this technique.

Day 1:
Stop at junction
When clear, attempt to move off, limiting the kangarooing as much as possible.
Turn the wheel to attempt to steer round the corner
But don't quite turn it enough, so that you mount the pavement with the nearside wheels.
All the while continue to look straight ahead at where you WERE going.

Day 2: repeat day 1 but this time stall when one wheel is mounted on the kerb.
On advice from parent, put vehicle into reverse.
Kangaroo backwards as fast as you can so that you cross the main road, mount the kerb
then manage to mount another rise of 9 inches or so.
Finally come to rest half way up the earth mound leading to the Building 27 machine rooms.
If you get the kangarooing right the underside of the car is undamaged.

Day 3: Aged 17! Hooray. But Dad too tired to let me drive.

It's not my mistake but I can fix it

I once closed a Severity 1 APAR (bug) as "User error" - then re-released every module in the online system to correct it.

The system was HVP (High Volume Products - an internal ordering system)
I was responsible for the rewrite of the online system. Each online program had an edit on a list of country numbers. I asked the user's if this list would ever change.
They said no. So I coded it as a static array.

6 months into production they decided another country number was needed. Had I closed the problem as a "SUG"=suggestion then they would have needed to raise a change request. But this was urgent so I closed it as "USE"=User Error, made the change, and re-released every module in the online system.

If at first you don't succeed, don't try again

I once brought down both the Development and Production mainframes by running the same SQL query on both of them.

When we first started using DB2 the performance was not good enough for online production systems but was OK for decision support.

We had a system where the developers had access to both the development environment and production systems.Since it was a read only system, we could not do much harm; except if we wrote a long running SQL query.

Well one day I ran a very simple query that didn't produce the output instantly, as previously experienced. After a big delay I commented "That's not supposed to happen" and then proceeded to demonstrate to the 'stupid question asker' what was supposed to happen.
"See, it works on production!" I said, rather too soon.

The queries running on both machines were using a shared swapping drive
and trying to write an awful lot of temporary data to the drives.
The only way to fix it was to reboot both machines.

Fortunately for me we were able to blame the DBA for not running runstats after a reorg.

The Silver Bullet list

There are now over 1400 entries in the Silver Bullet (SB) list (example Saxon Base)

When I was working for Chris Winter on the Silver Bullet project we started a collection of word pairs where the first word started with an S and the second started with a B

The list now contains over 1400 unique pairs.
They were categorised as follows Example

- - OK Silver Bullet
? - don't know about this. Need to check. Singing bobby
b - brand name Sensor blade
c - cheat Sauteed bunny - alternative to Jugged hare
d - disastrous failure Banana Splits
f - foreign Sacre bleu
n - name Sergeant Bilko
p - place Sunset Boulevard
q - questionable Stripy B - the middle letter of the IBM logo
s - sick or stupid Safe bonk
x - x-rated Silly Bunt

Three times older than when I started

I celebrated being exactly 3 times the age that I was when I first started working for IBM, on 30th April 2009.

Here's the REXX exec to demonstrate it

/* Routine to calculate when you will be exactly 3 times older than when you first started working. */
dob = date( "B", "30 Jul 1958" ) /* 714989 */
startwork = date( "B", "30 Jun 1975" ) /* 721168 */
age = startwork - dob /* 6179 */
enddate = startwork + ( age * 2 )
say "Herb will be 3 times older than his age when he first started working on" date( "W", enddate, "B") date( "N", enddate, "B" )

As always the comments to explain the code were a lot harder to write than the code.
And it's a pretty useless program unless you're me.
You could ask Angus Tuckey-Smith, Mat Caney or Mike Cowlishaw for an improved version that will work for anyone...
But if you think about it, most people will have left work by the time they reach the required age, so won't have a REXX interpreter to run the code anyway.

PS. Ajay R Krishnan has a similar program written in Python.

top 10 list of questions to ask when some code doesn't work

Unfortunately I have never seen such a list. But I'm prepared to start one.

If you're the asker

- find the "stupid question asker" and start explaining the problem to them.
You'll realise your mistake quite quickly

- if you're worried that that it could be a silly mistake, and not worth being awarded "the plank"
if it becomes public, then start adding debug statements.
In the PL/1 days I used to write "put skip list" statements
In C you write printf's or the equivalent macro or function call.
In my experience you'll notice the problem the minute you've finished writing the debug lines,
even before the code has been compiled and run.

- ask yourself the following:
has it ever worked
did it actually work last time
what have you done?
did you recompile the program
did you relink the program
did you actually change the program
are you running the program you thought you'd changed
are you looking at the right output
have you changed the inputs
does the code match the comments. if not, which is wrong
is it repeatable. if not, give up until it is

You can ask these questions in whatever you order you feel necessary and
as many times as you like until you find the solution

If you're the askee

- do the google search that the askee should have done
- ask them if they have reduced the problem to the simplest version that exhibits the bad behaviour
- ask them if they have you compared the results with the most recent regression test
- ask them to repeat the problem on another machine

If you're the "stupid question asker", ask the asker
- "Can you explain it to me again?"
- "Are you sure that's the problem?"
- "Does it make any difference what day of the week you run it"
- "Did you reload the data from yesterday's dump"
- "Does it work on Windows?"
- "Would you expect it to work when 'whatever' is not available?"

If you happen to be the project manager you can add these
- "When will you have a fix for it?"
- "If this went into production what severity would it be?"
- "Do you have a work around?"
- Ask them if they have asked the expert. This is a particularly good question if you know the programmer IS the expert.

If you're just earwigging someone else's conversation, tell them
- "It's not possible, you have to rewrite it"
- "I had that problem yesterday but it went away when I upgraded to version blah of thingummy"
- "It works fine on Windows"
- "You need to get trace output"
- "Ask them for a dump"

I was once locked into two tapes drives

After my first year at University I worked on shift as a computer operator, in Building E machine room.

My job involved
- typing "k e,1" to clear a line from the Master terminal of a System 370 running MFT.
- sitting behind a line printer fanning the greenline paper into the box
when the page ejects were happening faster than the paper feed could handle it
- or performing tape labelling - wiping tapes so they could be re-used.

The tape drives were those big things you see in 70's films
with electrically powered sliding glass windows
that closed automtically so that the tapes could be pulled into loops by a vacuum
- ensuring that they didn't tension the tape too quickly and snap it.

Late one night I was led to a tape drive and demonstrated the
safety aspects of the sliding glass window.

There was a sensor that would detect an object preventing the window from closing.
When the circuit was broken the motor would automatically reverse and the window
would go down. There was a replaceable fuse in the door that, if removed would
cause the window to lock in place.

Well, I was to learn that someone had discovered that if you pushed an arm through the glass
past the elbow and removed the fuse at just the right time, you could effectively trap a person by their arm.I was not the discoverer; I was the person with the arm.

They locked me in and went out to the kermits for a coffee break.

I started getting worried...
- who's going to type "k e,1"
- who's going to fan the paper in that printer
- what if there's a fire and the sprinklers come on and I get electrocuted

I was determined to escape.
I opened another tape drive door, took the fuse from that and replaced the missing
fuse from my door. Freedom!

Trouble is, I can't lie very well.
So I told my captors how I'd escaped.

Next day both arms were trapped.

I sent my first email in 1975

My first job at IBM was as a vacation student working in the ROSS User's group, in RESPOND.
ROSS - Rationalised Ordering Support System
RESPOND - Retrieval Entry, Storage (and) Processing (of) Online Networked Data

I was a clerk and the only Brit in the department.
Every day I'd have to write a telex to coordinators in each European country advising them which 'cycles' had been processed overnight. A few months into the job I discovered the pleasure of using IBM golfball terminal/typewriters to use RETAIN (Remote Entry Technical Advice Information Network). I discovered that instead of hand writing telexes I could type them in myself and
send these to a pan-European distribution list.

Even though they were only being sent on the internal network these messages would now be considered emails.

I can't remember what I used to call them before I started sending PROFS Notes (we had been sending messages to/from TSO/VM ids well before PROFS/NOSS) but I still prefer using the term 'note' for a simple message, as opposed to 'document' for one written in Script/DCF.

My real name is Robert Peter Gordon Miller

So why am I called Herb?

When I was a schoolboy at Portsmouth Grammar we were initially all called by our surnames. Being too dumb to ask each others Christian names (
in those days we all had Christian names, even those who weren't C of E ) we invented nicknames for each other e.g. Gasser, Blossom and Ipse.
As I was a reasonably speedy but small cross country runner, rather than being called Dusty or Windy, they called me Mick; after Mick the Miller.

I didn't like it, so at the age of 13 or 14, when my best mate George Miles
decided he'd like to be called G, I put about that I'd like to be called
Herb - after Herb Alpert and the Tijuana Brass.

The name stuck. Even my parents called me Herb. So when I first started at IBM I asked for that name to be put on my badge. Many years later, when I first got a Notes ID, the P for Peter got inserted into my name. I've never liked it.

And did I know about Glenn Miller's brother in those days?
Answer: No

I have not been banned from unicycling, yet

Last year, I got some birthday money to spend on "cycling".
Having just completed a ride of over 500K I was relaxing in Avignon with a
Small Beer (see SB list) when along came a unicyclist. In an instant my mind was made up. I'd learn to unicycle. It took me a while, but eventually I was confident enough to demonstrate my new found skills
in the CLS offices, building D ground and the nearby car park.

I still can't free mount so am not able to ride to the pub. Even if I did achieve this, I doubt I'd ever be able to make it back again.

Reminds me of the joke about the man who only had enough money to buy a hoop and a stick. He left the hoop outside the pub. On leaving he discovered it had been nicked. Like most people he was rather upset. "How the hell am I going to get home now?"

I am banned from roller skating in IBM North Harbour

A few years after they joined Phases 1 and 2 (F) with Phase 3 (E), by constructing building's A to D, they introduced an automatic badge locked door at the end of D Ground. It was through this door that late departers or weekend workers could gain access to the building. As I a) worked in building F and b) did not yet have a home computer I often worked late into the night and even popped in at the weekends. I reduced my journey time within the buildings by roller skating the corridors. I could get up quite a speed on the smooth floors but had to stop quickly at the fire doors at between F and A and A and R since they only swung one way. It wasn't long before a jobsworth security guard contacted my Manager (John "Superstar" Cowell) to tell me I was not allowed to roller skate in the offices for H&S reasons. I while later, I learnt that any easy way to get out of the building was through Goods Inwards. One night two of us attempted to depart by this route only to find our way blocked by the shutters being down. We could not get back into the building as our badges didn't operate the nearest door. Eventually we called Security. "Hello Mr Miller", said jobsworth. "I assume Mr Anderson is still there with you. Do you want to be let back in then?"