Monday, August 28, 2017

Communication without correctness

In contrast to my previous post, which also contains some writing done when I was eighteen years old, this one was published. It was a work of non-fiction, and contained some inaccuracies.

Valedictory

"All who have meditated in the art of governing mankind have been convinced that the fate of empires depends on the education of youth."
Those were the words of the ancient philosopher, Aristotle, commenting on the vital role of education in his time. In our time, the need for education is much greater. Our happiness, economic success, and well-being in the future depend on the extent of your education.
Our technology today is expanding more rapidly than it has ever done before in the history of man. Many new books, especially those on scientific subjects, become out-dated within five to ten years from the time they are published. The use of automation is increasing. Computers speed up the handling of business; run all sorts of establishments from airports to libraries; and are an indispensible aid to scientific research. They are also essential to national defence. The heart of the NORAD defence system is a giant computer which keeps tabs on hundreds of flying objects simultaneously and warns of enemy attack. These remarkable devices are the products of the well-trained minds of the past. But many people are needed now, and many more will be needed in the future, just to keep our defense systems up to date. It is indeed true that the fate of impires depends on the education of the youth.
We graduands have, for the past twelve years, been learning the facts which will enable us to take our place in the future. We have not been alone in this effort. Many teachers have laboured to give us the knowledge of past centuries. Facts which have been accumulating for hundreds of years are now our personal possessions thanks to their efforts. To our parents we also extend our personal gratitude. They have given us the rather firm encouragement that we have needed at times. Yes, our thanks go to all those who have so painstakingly prepared us for success in the future; a future full of promise.
We will be sorry to leave these familiar hallways and classrooms. They have been the scene of so many happy moments, and the backdrop for so many distressing problems. They will remain in our memories forever.
Our high school preparation is now complete; we are ready to go our separate ways and face the great challenges that lie ahead. May we forge forward fearlessly and make our lives as successful and enjoyable as our high school days have been. The future and all it holds is waiting.
Besides some typos and spelling mistakes (some due to the customary usage of British English in our school), the most glaring inaccuracy is my (younger self's) prediction that we would always remember the "familiar hallways and classrooms." After I delivered the speech, my classmate, Ian Miller, took me aside and pointed out that this was not true, that we were not "sorry to leave [them]" and that we would never think of them again.

Another inaccuracy, by omission, is that I failed to predict just how ubiquitous computers would be during our lives, and that most of my classmates would one day own a computer more powerful than the one highlighted here, and that furthermore we would be carrying it around in our pocket or purse and sometimes even use it to make phone calls.

In any case, I am happy to have this valedictory address on the Internet record, and recorded here for posterity.

Here is a picture of the page (including a picture of that younger self) scanned from our high school yearbook.


Tuesday, August 8, 2017

Composition without communication

Just found a story that I wrote when I was 18 years old and using the pen name "Solar Scout." To my knowledge it was never published.

It's Only An Owl
-original

The awesome notes of the hoot owl woke the Ericksons. Martha shivered, and sat up in the dawning air. The forest frightened her, but her husband Eric enjoyed its many moods. She turned over and attempted to go back to sleep, but the rising sun shed its rays on her pillow. With a sigh, she got up to fix Eric's coffee. Shuddering as the owl repeated its performance, she sat down on the crude bench to wait for Eric. She knew it was useless to plead with him to go home. He was determined to obtain the prized grizzly skin. Everytime she though of the huge monsters, she became cold and felt her skin tingle.

After breakfast, Eric left with his gun. Martha bustled around, putting the things away, trying to dispell the nagging fear. Though she had never seen a bear, she trembled at the thought of her beloved Erid going out to hunt them. Her reverie was burst assunder by a blood curdling scream. "Eric!" she cried. She rushed through the door of the cabin almost hysterically. She stumbled down the path and screamed. Eric was lying motionless just one hundred yards down the trail. A huge grizzly growled surly and lumbered off along the trail. Martha was completely hysterical by this time, but she grabbed the gun and shouted angrily at the retreating giant. Sobbing wretchedly, she pulled the trigger twice, then fainted. Minutes later, she woke looking into the worried, yet somehow exultant eyes of her husband. She flew into his arms with a thankful gasp.

Favoring his gashed leg, Eric helped her into the cabin. "After dinner", he said, "I'm going out to bring in that fine bear you bagged." Martha's eyes widened. For some strange reason, she never shivered again when the hoot owl mourned. She loved the forest.

Solar Scout, 18
Taber Alberta

If it was published it would have been in the Winnipeg Free Press Weekly.

I made every effort here to type it exactly as it was, and a photo of the original is shown here.


Tuesday, June 6, 2017

Correlation without confusion

In other words, the assumption of eponymity.

At the Wendy's fast-food restaurant, part of the ordering process is giving the cashier my name. That name becomes a prominent part of the receipt. Moments later, the person finishing my order calls out the name so that I can go to the front and pick it up.

McDonald's on the other hand assigns each customer a short number to serve the same purpose.

In computing, such things (the name or the number) are called correlation identifiers.

Some years ago, when I ate at Wendy's every week with my friend Thom Boyer, the cashier would most often ask, "May I have your name?" On occasion, however, the question was subtly different, "Will you give me a name for your order?" Always one to pounce on subtle differences in meaning, I began naming my order "Boris."

For picking up my order, this worked out just fine. Until one of our regular visits, when upon walking into the restaurant, an employee greeted us by name. In that restaurant, I had become known as Boris.

The assumption is that a person will give his or her own name. The assumption of eponymity.

In other languages (such as French and Spanish) one gives one's name not by saying, "My name is Boris," but rather by saying (in translation), "I call myself Boris." In English, we take a similar stance when we say things like, "My friends call me Boris."

The fast-food correlation identifier is short-lived. Just a few minutes. The way it is used gives a clear example of the fact that identifiers in general are part of a relationship between the identified and another party, rather than an attribute that I own. Things like my given name, my parents' names, my date and place of birth, and even other dates of significant events in my life are also less attributes, and more part of my relationship with society. Mathematically, we could say that an identifier is (part of) a relation and not a property.

This came to my attention recently during a conference session run by Joe Andrieu at the Internet Identify Workshop in Mountain View, California. From the notes of which, this quote, "Identity is about self, but in practice, it’s about how we relate to others."

Another influence in these thoughts is this post by Phil Windley about anonymity. My fast-food example is really an instance of this. Even though one of the restaurants asks for my name, I am free to give any name that I wish, and my anonymity is intact.

[Added June 21, 2017 this facsimile of the folium rectum of a Wendy's receipt which clearly shows the correlation identifier used for the associated order]


[Added June 22, 2017 showing the McDonald's correlation in action, with the correlation ID clearly visible on both the receipt and the order itself]




Monday, February 6, 2017

Contrast without comfort

I just finished reading the book Rainbows End, by Vernor Vinge.

The quote that stuck with me, from page 355 is, "Back when I was young, you could have got a patent off of it... Nowadays, it should be worth a decent grade in a high-school class."

Yes, technology changes, and skills that would have been impressive twenty years ago are of little worth today.

Friday, December 9, 2016

Consequence without compassion

There are some things in this world that are unforgiving. This post is about a couple of things that you can type into a computer's command line with devastating results.

Just today, I needed to use a file named SROSTERS.TXT, which had been written by a DOS program on a Windows machine. But, I needed to use it on my MacBook Pro. It was important to today's work, but I noticed that each of its 33,000+ lines ended with a carriage return, line feed. Those two characters are invisible, so I only noticed it because one line of interest was exactly one character longer in the file than the equivalent line produced on the Mac, although they appeared to be identical.

There is a handy Bash command that will remove all the carriage return characters, leaving only a line feed at the end of each line, which is what the Mac expects. So, I set out to use that command:
cat SROSTERS.TXT  |  tr  -d  '\r'  >srosters.txt
 The cat command outputs the file contents to standard output, which is then piped (notice the vertical bar aka "pipe") into the standard input of the tr (translate) command, with the option to delete all  carriage return characters (-d '\r'). It was my intention that the output of the translation would go into a new file named srosters.txt which could then be used on the Mac.

Now the greater-than sign (>) in Bash has two different roles. It is followed by a file name, and if the file doesn't already exist, it is created (empty) before the command runs, which was my intention. But, if it does exist, it is truncated to an empty file, again before the command runs.

In my mind, based on years of experience using UNIX® and various linux systems, the two file names SROSTERS.TXT and srosters.txt would be for different files. Not so on the Mac's OS X version of linux. These two* names are both names for the same file!

So, when I pressed the enter key, my computer first truncated the file to an empty file, then sent its contents (also empty) through the pipe into the translate command whose output went into the file (still empty!).

And that is how I experienced a severe consequence, with my computer expressing no compassion.

You know, the greater-than sign has bitten me before, so maybe I should have been more careful.

As a graduate student, 30 years ago at the University of Calgary, I had spent most of a day working on a class assignment. When I finished at six o'clock, I did what I ordinarily did at the end of a day, which is to type this command to remove all of my backup files:
rm  *.bak
This would remove all files whose names ended with ".bak" and that is what it had done every day before. But that night, I was in a hurry, and my left pinkie finger didn't leave the shift key quite fast enough as my right ring finger went for the period key. So, that key got shifted and the command that I actually typed was instead:
rm  *>bak
Ouch.  If only I'd had time to look at the command line before pressing the enter key, but my fingers were on automatic. After running the command, I did, as always, check to see that the backup files had indeed been removed. To my astonishment, all of the files were gone, and there was a new one, named bak, which was empty. The rm (remove) command removed all of the files (as specified by the wild-card *) and sent its (empty) output into the newly created file named bak. Just as my command specified. Again, no apologies from the computer!

That night, I learned that sometimes you can do a project better the second time you try it. I had to have the assignment done, so I stayed another hour or so and re-wrote all of the code from memory.

Today, I'm going to resolve my problem by having a friend who works near my desk in the office find a USB key in my drawer and email me the file contents.

A bonus story, where a great deal of much-appreciated compassion was shown, from 20 years ago, when I worked in the Advanced Technology Group of WordPerfect Corporation as a senior scientist. Our administrative assistant (who I will call Virginia) was having some trouble with her computer and emailed the group a screenshot** of a rather ominous warning message. I flippantly fired back an email message saying (as best as I can remember)
It looks like you have the dreaded M$ Windows virus on your machine. It's easy to get rid of. Just type DELTREE C:\WINDOWS and that'll take care of it.
About half an hour later, when I'd forgotten all about my little joke, I was called into my boss's office. He tried to keep a straight face as he reprimanded me. Virginia hadn't seen my message as a joke, and had issued the command, which completely removed the operating system from her computer. A technician came and it took most of the afternoon to get her machine working again.

The compassion came as my boss chose to forgive me, and we still laugh about it when our paths cross.

* And not just these two names, but all of the 2,048 possible variations, mixes of upper and lower-case letters, of this file name. Whichever of the variants you use, you will be referring to the same file.
** Unfortunately, I no longer have access to that email system, or I could have displayed the warning message in this blog post.

Monday, May 23, 2016

Computation without compilation

The notion of programming is customarily associated with the practice of coding. Developing a program by coding requires the use of a compiler to translate the code you write into a form usable by the computational device.

I own a fairly simple machine, a DeLonghi TRN0812T space heater (the link is to a review by Consumer Reports, from which I also borrow the picture below). The primary purpose of the device is to heat a small room, but it can be programmed, which is my interest in this post. It can be programmed without requiring any written code to be compiled. Thus it does a (very simple) computation without compilation.

Two asides are needed: 1) the distinction between operating a machine versus programming a machine, and 2) bootstrap loading via toggle switches. In the interest of tl;dr I am going to defer these to later in this blog post.

Here is a picture of part of the control panel of the space heater. It shows two large switches which have four possible configurations: 0 (off), MIN (minimum), MED (medium), MAX (maximum). Above them, and not shown in the image, is a thermostat. Below the two large switches are 96 tiny switches arranged in a circle. These are used to program the heater.


The heater photographed above is set to maximum and programmed to run continuously, except from 5:30 a.m. when it will be switched off until 6:00 a.m. when it will switch back on. The time at which the picture was taken* is 10:30 p.m. and the heater is on.

Operating the machine is straight-forward. Turn it on to maximum (with all the tiny switches left in the factory setting: towards the center of the circle). Set the thermostat to its maximum position (again, the factory setting).When the room reaches the desired temperature, turn the thermostat down slowly until you hear a click, then stop at that point. The thermostat will then act to maintain that temperature. To save energy, you can switch off one of the large switches, thus setting the heater to either medium or minimum.

Aside: operating the machine requires you to be present and attentive. In contrast, programming the machine involves you doing something now which will have an effect later even in your absence.

Programming the machine is also quite simple. First, turn the knob clockwise (in the direction of the long arrow) until the pointer is aligned with a number representing the current time of day (in a 24 hour clock). Then push the tiny switches outward for all of the times (15 minute intervals) when you want the heater off.

Having programmed the machine, you can now leave it unattended and it will cycle on and off under control of your program. (The owners manual soberly points out that "you can ... program up to 48 cycles ... over a period of 24 hours")

I would like to point out that since there are 96 of the tiny switches, and since each one can occupy, independently, one of two positions, that there are 296 (=79,228,162,514,264,337,593,543,950,336**) possible programs. (The reader may find it interesting to compare this calculation to the approximation suggested by my Powers of 2 post which would have 296 to be approximately 64 x 1027, which is close... but quite a bit on the low side)

Of all the possible programs, I'll mention four or five. With all the switches out, the heater will never turn on -- not a very useful program, except, perhaps, as a practical joke. With all the switches in (the factory setting), the heater is always on. With every other switch out, you have one of the two possible programs which cycle the heater on and off 48 times over a 24 hour period (the possibility promised in the manual). Finally, the program currently on my heater, with half the switches in and the other half out, turns the heater off at 5:30 p.m. and back on again at 5:30 a.m.

A note about large numbers. If there were a billion owners and each owner tried a different program every day (with some mechanism to avoid duplication), it would take nearly 217,000 trillion years for all possible programs to be tried.

Finally, the aside about bootstrap loading. This heater intrigued me because it reminded me of old days in computing. Early machines would load their programs from punched paper tape. But the program which loaded the programs from paper tapes had to itself be loaded into the machine. And this was done by setting small switches to place an initial program into the machine. Wikipedia has a nice article about booting computers which you can find by clicking here.

This is a nice demonstration of a fact that I point out in my dissertation, which is that one can look at programming as choosing a number. Here instead of the more customary "think of a number between one and a hundred" we have, with this heater, "think of a number between one and 79,228,162,514,264,337,593,543,950,336." Once having the number, we can convert it to binary and set the 96 switches according to the ones and zeroes, programming it without needing to compile code.

* the arrow is pointing at the mark between 22 and 23, meaning that the current time when the picture was taken is 22:30 (24 hour time) which corresponds to 10:30 p.m.
** the number was computed using TOOL which can do large integer arithmetic on numbers of up to 147,456 digits. This number doesn't stress the system much because it is only 29 digits long.

Tuesday, August 25, 2015

Continuation without compulsion

In other words, persisting in something because of its benefits, and not because one must. Such is my relationship with DataPerfect, with which I became acquainted in 1988, as I began* that portion of my career spent with WordPerfect Corporation. I continue to use DP regularly, having, in the last four months alone, created nine database applications to assist me in my current job as a web developer.

DataPerfect is a software jewel, very compact yet complete and powerful. It's most remarkable characteristic is that it has enabled people who would never have considered themselves programmers to create wonderfully useful data-based applications. People are considered computer-literate** if they can use programs to do work. They are programmers when they can create applicatons that other people can use to do work.

There are descriptions of DataPerfect in words, but of course the best way to understand it would be to learn to use it. The setting for the jewel is DOS, which modern computers no longer run directly***. Here are some dimensions that could be included in such a description.
  1. Modes: define mode vs. run mode
  2. Organization: panels, fields, indexes, and links
  3. Usage: single user vs. multiple concurrent users
  4. Operations: lookup, browse, create (i.e. data entry), edit, and delete
  5. Relationships: one to one, many to one, one to many, and many to many
  6. Communication: clipboard, importing, exporting, phoning, reporting, and printing
  7. Security: none, definer password, user credentials
  8. Usability: panel and report lists vs. menus
  9. Help: general, context-sensitive for each field
  10. Add-ons: print spooling, mouse usage
  11. Documentation: manual, books, web sites
  12. Support: active community
An article with a good description of DP was written many years ago by Ralph Alvy****. It touches on items 2, 3, 4, 5, 9, 11 and 12 from the outline above. Unfortunately, the links in this article are no longer working (suffering from "link rot") but you can find information about his book at http://www.sanbachs.net/compusofl/dpbook.html.

I expect to continue using DP any time that I need to process textual data with any amount of structure, not from compulsion, but because it is so very useful.

* At first, I was kept busy with a new language that our team was creating, TOOL, later described in my dissertation. The purpose of TOOL was to become the next implementation language for a new and different version of DataPerfect. Once the new language was up and running, I felt that it was important to learn what DataPerfect was, and so I gradually became an expert user, despite the fact that others on my team assured me that that wasn't necessary. I'm glad I did.

** Several years before this story, I taught computer literacy courses as an itinerant instructor for Lethbridge Community College. Generally, these were three week courses, and I would take my Apple ][ computer and drive to a small town one evening a week to join a small group of adults in a local school computer lab. First a three hour session on word processing. The second week another three hour session on spreadsheets. Finally a three hour session on databases. Both interest and mastery trailed off during each such course. Most people grasped word processing, which was after all, a lot like using a typewriter. They had more trouble with spreadsheets, and didn't get databases at all. I think it was too abstract. And probably too much based on a textual description of what would later happen. Making that connection, between a textual description, and something that happens later because of it, is what separates programmers from non-programmers.

*** Instead, one must first install a DOS virtual machine, as outlined in this story about one DP application.

**** The article is not dated, but is probably from around the turn of the century (which makes it "dated" in that sense of the word, but still applicable). Incidentally, Ralph is a good example of someone who is not self-described as a programmer, yet who has created DP applications, and even wrote a book about it!