Chuck Moore's Fireside Chat 1999

The Annual Forth Day meeting of the Silicon Valley Chapter of the Forth Interest Group was held on Saturday 12/18/99 and included representatives from the Sacramento and North Bay FIG Chapters.

The video of this presentation is available in the UltraTechnology store and in the UltraTechnology Streaming Video Theater.

(Chuck Moore>
You can call yourself our survivors. The few who left are going to miss out on some great stuff. I've got a whole lot of miscellaneous stuff to talk about; some of it is kind of interesting and just occurred to me this morning.

Alan mentioned the opposable thumb. I would like to make an observation on the opposable thumb. I think it was the opposable thumbnail. The fact that you can put two nails together, which you can't do with your fingers, it just doesn't work. And we had to do this to be able to pick lice out of our hair. The evolutionists have got it not quite right. It wasn't grasping rocks and sticks, it was lice.

(Question) Are you picking nits? (Laughter)

Chuck
1000 years
1000 people

I went to the library and asked the reference librarian, "Are there anything on the history of the last millennium." There is very little, the story has not quite caught up to reality. But there was this book and I didn't it have any great expectation but it turned out to be very very interesting. I've been through four hundred people, six hundred to go.

It's a ranked list of the most important people in the last millennium. With a large paragraph about each one explaining why. Everyone you know is there. The comments are delightful. And just as a tantalizer I will say, "Do you know who the highest ranked person of the last millennium was?"

(Reply) Elvis?

(Chuck)
No he was even lower than the Beatles.

Gutenberg. He's ranked as the most influential significant contributor of the last thousand years.

(Comment about Bill Gates)

(Chuck)
Bill Gates was one of the almost made its. Andy Warhol was number 1000. And some people, you were surprised, but they were from before the millennium. It's a nice history lesson.

(Question) Any non-Western people?

(Chuck)
Oh yes, many people from China and Africa. They seem to have done a good job on trying to be fair.

(Question about pre-millennium people)

(Chuck)
Only mentioned to remind us that they weren't. Jesus Christ for instance was not from this millennium. They have formulas they use to calculate the ranks.

The Standard

I do agree of course that the standard is not necessarily a good thing. My latest thinking on that subject is that perhaps there should be two standards. One for 32 bit machines and one for 8 bit machines. Trying to meld them together into the same package is difficult, makes them both look more complicated, and in fact there is no advantage. They are not working on the same applications in those two environments. But it's not going to happen.

I've been worrying a lot about where we are and where we are going and this is the time at the new millennium. It's kind of pathetic actually that we are all sitting here talking about Forth. It is not the wave of the future. It's never been the wave of the future. It's not within our power to make it the wave of the future. It is a delightful tool for doing the things that I want to do. At least Color Forth is, which I'll come to in a minute. It doesn't have to be. If nothing else reading about a thousand people and all their stupid crusades reminds me that you can have a thousand points of view. We don't all have to agree on everything.

The fact that we are all trying to agree on a personal computer platform is wrong. It's not necessary. We've got a communication standard. We have enough standards in place that I can do something in my context, independently of you doing it in your context and we can communicate, and we can share, and we can co-operate. We don't all need to do it the same way.

The danger of course of us all doing it the same way is that we will all end up doing it wrong. And wrong gets locked in. Forever? If not now, when? If not us, who?

There was a statement in a novel that I read, "If people only bought what they need instead of what they want world trade would collapse." I can paraphrase that by saying If people on bought the software that they need the instead of the software that they want the industry would collapse. This is revealing to me because I have always felt that the amount of software that people need is within my capability of writing. If I could only persuade them to buy my software then no other programmers would be necessary. That may be true. But the software they want, all those stupid little games that they are going to waste time on I'm not going to write. I am not going to write all the stupid things that they are going to spend their money on. You can got to Fry's and walk down the isles of software and there are the stupidist packages imaginable. The only saving grace is that that they don't cost very much. For $29.95 you can get ...

One of my smart purchases. I was shopping in the junk bins and I bought an Ansel Adams screen saver. I could get some nice pictures and it would be a nice thing to do. The reason it only cost $11 was, you might have guessed, it doesn't work. It kept coming up at random intervals, screwing up my work, whether I was hitting a key or not. It was a bound a determined screen saver. But I've got the images if I can ever figure out how to extract them.

On that topic, I went to Fry's and was looking at the big projector TVs with 16x9 display. They all have little notes on them now saying that it is important to use this projector with full screen images. If you don't you are going to get screen burn in and you are going to get color imbalances between the lesser-used portions of the screen and the center.

Shocking. I hadn't realized this. I gather it has to do with the LCD elements and not the screen itself. But this is a severe drawback if you are going to get a wide screen and view narrow images on it you will lose the edges and will probably not be aware of it. Now what you need is a screensaver that works while your working and appears in the margins.

(Comment) You could put advertisements there!
(Comment) A custom chip!

Color Forth

This is very curious. It touches on questions I get asked often.

Let me remind you what Color Forth is. Color Forth is putting information in the white space of your source listing. I am increasing charmed by this notion.

I will put one of 16 color space characters before a word I will identify that space character by the color of the following word.

I have half a dozen different colors, red defines a new word, blue is just a comment, white or black, depending on whether you are printing or screening is to execute, green is to be compiled, silver is a number, cyan is a hex number, magenta is a tick bracket, a postpone, the kind of thing you would to compile even though you would normally execute it.

I envisage expanding that more. So if I want to say "the quick brown dog" I can have a space before each word to say something about the word. There are a different set of things that are interesting to say about it.

Up here it's do you compile it or do you execute it. Here you can say capitalize it, or not, or perhaps it alls caps or perhaps it's italics or other properties that you might want to assign to ordinary text words. Like the follow word is a link and not to be displayed or something like that.

So a lot of the tags in html can be replaced by a color code in the preceding space. It has to be an advantage in perhaps compactness. Or perhaps clarity. If you look at an html source listing it is full of gibberish, brackets brackets brackets all kinds of other characters.

The same actually with other languages. I was looking at Java script and how they distinguish between decimal, octal and hex numbers with leaning zeros and such. It's totally unreadable. Color would do that nicely.

On the other hand I am taking a step backwards here. If I am talking about numbers, say a cyan number. I am in fact putting an "X" in front of that number. It is an invisible "X" that expresses itself as color instead of obscuring characters.

When I say color I don't really mean color. What I mean is the following word will be displayed in a way that makes it's function clear. Typeface, color, or perhaps all red words are the first word on a line (layout), or perhaps these words are in all caps and these words are in all lower case. Many ways of distinguishing a function. But I am saying the function of a word should be indicated by the preceding space.

This is where I was the last time I was here. Things have changed. It occurred to me a couple of weeks ago that if I was doing this the best way to indicate capitalization, I only really need 26 characters. If I only have 26 characters I really only need five bits for characters. If I actually want to use something like star slash (*/) I can have a space in front of it that indicates a shift. If I do all of this I can have a keyboard that is QWERTY with only three rows of keys, 31 keys, one third the number of keys on a PC keyboard. And a couple space bars and maybe some shift keys out here and so forth.

That will be a nice small keyboard with large keys in a small forma for a portable device. And I layed out a keyboard and I planed to showing you the layout with the characters and special characters. I had numbers here and over here I had the arrow keys and it all fit quite nicely in 31 keys.

I could build one. I've done this before. But I got diverted. So ok I've only got 31 characters. I could do that with five pads, one for each of my fingers. (Laughter) I've done this before. But I had seven keys, I guess I have palm keys. But now I only need five and your fingers could be fixed. I guess It woke me up that I could do this.

(Question) Have you seen the wrist mounted fingernail sensors with an accelerometer on each finger? It's all wireless, keyboard Velcro's to your wrist. It receives the information and the transmits it on. I think it's from Sony.

(Question) Have you seen the brail keyboard or the keyboard used in stenography where you can press any combination of 26 keys?

(Question) Have you considered Morse code where you need only one key? (Laughter)

(Chuck)
I did look for keyboards. On the Internet I found a number of special purpose keyboards. One is called the finelty (sp?) which is optimized for things like the palm pilot.

Here of course I will my own character set. A is 1, B is 2 and so on. You get a shift key to get into numeric mode, and another sift key to get into upper case mode, not upper case but special character mode. Well you can see where I'm going. I don't know why I would do this when I've got a ten dollar keyboard on my desk with all the keys I could ever use.

The problem is that I don't have enough space characters. Having used 26 I only have 5 left for spaces and that's getting pretty sparing for the spaces characters for what I want to do.

Color Forth is not a destination it is a path. In wandering around in this universe I am trying to minimize something, I'm not sure what. Total complexity. It really isn't fair to expect people to learn to use a chorded keyboard to use Color Forth. It is mixing concepts.

But I think in the fullness of time I will come up with what I consider a true minimum human interface of hardware and software and maybe mass and power. It is certainly fun to explore.

(Question) What keys to you use for spaces?

(Chuck)
I used function keys for spaces because they are numbered one through nine. But they are awkwardly positioned. I would much rather have it down here.

Forth

Let me talk a little more about Forth. With Forth what you've got is words separated by spaces. It's such a beautifully simple definition of a word. Again Java script has rules about what can start a word. All languages do, particular numbers cannot start a word.

If you have blue number it will be ignored. If you have a white number or a silver number it will be compiled. Actually I've come to the point where I have to reuse colors. A silver number in interpreted text acts differently than a silver number in compiled text. This causes me some unpleasantries.

The editor I use for Color Forth is a word editor. Clearly each word has got to have a preceding space kind of attached to it. And rather than mess around with editing within a word my backspace key erases a word and the cursors keys move around a word at a time. So there is no way I can edit within a word. If I make a mistake in spelling color I erase color and type it again.

This is important because to get into changing the space in front of a character without changing the whole word it really gets fiddly and unsatisfactory. In particular I can't move the cursor vertically on the screen. I can only move forward and back. Because if I move vertically I end up in a place that is not a space before a word. I know how to find it but it is a fiddly thing and I don't know what color to make the cursor when I get there because I don't know the previous word looked like. It is much simpler to say that must just stay in context and go from command space to command space.

Alright, so what I am really saying here is that Forth is really word oriented not character oriented and we should realize that and take advantage of it. Which is what I though this morning while I was lying in bed wondering among other things what I would talk about today so if this is a little off the wall I haven't meditated on it long.

There is no reason that we need to use say eight bits bytes to represent a character. If I do it that way I can't take advantage of my characters. I would like five bit characters. But then I don't enough spaces. The of the only spaces I care about the ones at the beginning of a word. The problem is how do I recognize a space which ends a word. And the answer is you don't do it that way.

There is no reason that source code has got to be text strings. I am going to represent a word as 32 bits. The first four bits will be the space for the function of the word. Then I will have five five bit characters which are the word. If in fact this indicates a number then I have four bits.

If the first character is capitalized it is no problem. If all the characters are capitalized it is no problem. But when you get into something like McDonald you have a problem here with the capital letter in the middle of a word. So you can have to have a special escape character that takes care of that.

This is source code, this is not dictionary or compiled or anything. This is what the editor will give you when you type words in. A color and then as many characters as you need overflowing into another word if you have to do it that way. And it will be more compact.

In this format you can get five five bit characters in the first word and six five bit characters in succeeding words with enough bits left over to indicate that there are succeeding words. There are a couple of provisos here. With my word editor I can edit these kind of words more easily than I can edit the character oriented text.

This is pre-factoring of things into words for me so I know where the word ends. I don't have to worry about the following characters to indicate that. Well it gives me a lot more control characters. I can make the distinction between a number which is going to be compile and one which is going to be interpreted just by having a dedicated bit at the beginning of the word to distinguish it. So the compiler will be much more efficient in this format (tokenized) than in this format (plain text).

In fact I am shifting some of the burden of parsing the code from the compiler to the editor instead of in the compiler, and this pleases me. It won't look any different. The text displayed on the screen with words in this format will look the same as they would in this format but the internal representation will be different.

(Comment) Another way of doing this would be to change the base to 36 or something to represent text as numbers. In 16 bits you can get 3 numbers or letters.

(Chuck)
That's right. I'm tossing a lot of things around in my mind. Numbers for instance. I can just have a number code that says the following thing is a binary number. If I want to display it I will convert it to the right base. I don't have to represent it in decimal or octal or hex internally.

(Question) about something

I'll have an escape character for that. Or I'm almost willing to say don't do that, it's bad style. Tagging subscripts on words is not English and it is not attractive and it's not helpful.

There is a proviso. It is important that there is no character zero. Zero represents the absence of a character. I can pick up a word like this and right shift out the characters until the word becomes empty and I know I have used up all the characters in the word.

Or maybe I should have a character count field here so word wrap is easier to do. I wouldn't have to pre-scan a word to find out how many characters it had before I decide where to put it on the screen. So that might be a productive use of a few bits.

But the ability to shift six fields out of a word and detect when they are all gone will be particularly useful on something like the F21 where I don't have a byte counter to look inside of a word. In fact the presence of the byte counter on the Intel machines is useless if I am using five bit things packed into four eight bit fields which pleases me. I've argued all along that that was the wrong way to design architecture. And all you need is to not have the character zero.

Hex, hex numbers work easily. A number with punctuation in it like a decimal point or a lower case e fits easily into this format.

The zero character is represented by one. The one digit is represented by two and so forth to avoid anybody occupying zero.

(comment)

(Chuck)
So now by factoring out all the spaces I have room for more than 26 characters, I have five others. Which five symbols are most likely to mix with words that I want to retain? I'm not sure.

(Question) What's the motivation for doing this?

(Chuck)
I want a more compact representation. That's nice. I can get 60% the density of ASCII stuff. I want a faster parser. I want the ability to take advantage of the fact that I've got these shift bytes if you will that let me use five bit characters. Not that I expect anyone to use this. It's not going to become a universal standard. I'll convert everything to ASCII going out over wires. I'll convert everything to pictures on the screen. It's an internal representation. It's compact, it's efficient, it's easy to work with, and it's fun. Among other things it's colorful!

For those of you who can see colors whole new opportunities for having ordinary English text with color enhancing the meaning of words. For instance at the end of many sentences; "MacDonalds goes!" This function, end of sentence, I would make a special command. Actually a whole special word. This is my end of sentence command. I can have one for emphasis. I can have one for interrogation. I can have one for all the ordinary punctuation marks. But the capitalization feature of the following word will be included in that. The ability to translate across languages to different representations and the ability to represent dialog is a possibility.

One of the things that frustrates me and prevents me from understanding a novel is that you have quote and lots of text, a paragraph full of text, and another paragraph full of text and you're missing the closed quotes there because it's the same person talking. And every time I encounter that I have to reason it out again to figure out that it is the same person talking. (laughter) And that could easily be replace by color. You can avoid all the he saids and she saids, and a whole new style of literature falls out.

(Question) What is the formula for color blind people?

(Chuck)
Italics, upper case, bold face, ...

Also you've got the ability with color to indicate intonation. It is very hard to have a computer read text because it doesn't know about rising inflection or falling inflection or emphasis. In fact when you say "GOD DAMN!" it is kind of redundant. The all caps conveys all the information you need. But the computer doesn't know that.

With this convention you gain more information about the function of each word. That's literature. For computer source code I see a much more immediate direct advantage. For one having this character indicate something about the word and then two putting a character in a particular place in the word and having the content made separate. So I have a sort of half-compiled source code which would then be compiled into object code.

(Question) Can you read back object code into source code?

(Chuck)
No. I can't because what I do with this word ... it this is a word, My dictionary format is to sort of add all the words together sort and that is a sort of hash representation. So I can't get back in general. So you've got to have the source available. But decompile has proven to be a significantly difficult problem. I'm happy to avoid it.

This representation of the source code will make my compiler much simpler. I have been dithering about actually getting the publishable version of the compiler. I'm glad I have because ...

(Question) Publishable in what sense?

(Chuck)
Put it on a floppy that can run on your PC. (laughter) I'm doing two things at once. I'm trying to devise this and come up with what will be a self booting thing. And I know how to do it. A week's work? I don't know.

My other life is designing chips and I am faced with having to recode all my OKAD tools in this new way. If it is sufficiently compelling, it hasn't been so far. But this is nice. There are so many things I want to do.

First Color Forth if you boot it will come up with an interpreter. It will be able to read source code like this. That is all it can do. Presumably the first thing you will do with this interpreter is build up some backgrounds so you could put some text on the screen. The second thing is implement a keyboard interface so you could type something to put on the screen. The third thing you might do would be to incorporate some kind of disk access so you could get data.

But the key is, what is the smallest interpreter that you can implement? How many hundreds of bytes of code will it be? This is the core I would use. I'll give you examples of, heaven help us, a VGA driver, a SCSI driver, a PC keyboard driver and say go.

I have an ATI video card in the computer that I use and I would directly implement that card as my video drivers. I expect that if someone had a different video card than mine that they would write a different video driver than mine. Somehow. Not using the system because it doesn't exist yet. Which is why VGA might be nice. Code customized for the hardware from minimal precompiled source. And I really do think it is only hundreds of bytes. And this notion is going to make it work.

That is what I had in mind doing. That's how I'll publish it. A bootable floppy is a nice way or a bootable ROM.

What I am doing with all my old computers, I think I have got three or four, is just wipe the hard disk and use the whole shpeel. There is no problem implementing hard disk driver as long as you don't have to do the damn file system that the operating system put on it. In fact it's trivial.

The floppy driver I have for example, I read floppy tracks. I read a track at a time. I don't bother reading a sector or writing a sector. There's no point in that. You read the whole floppy track into memory and if you ever want to write it back out you write it out. A background task takes care of that while you are doing whatever you are doing. The same for the hard disks, track long reads are the only thing I need implement.

As far as keyboards I would probably just do USB interface, whatever that is. That takes care of printers and keyboards and mice or whatever else you want to put on it with one interface.

I would accuse Forth, the Forths that I see, of being old fashion, of not taking proper advantage of huge amounts of memory and disk. Certainly not taking advantage of the universality of USB. And we can simplify things enormously. And perhaps even... expand our user base if we are aggressive about moving into the future whereas Windows and Netscape and everyone is stuck in the past. I do think that the future of Forth is on the internet, internet plus embedded systems. I don't think there is a great deal of commonality between those two. I don't think that we need to strive for synthesis and these two areas can go in separate directions.

I characterize myself as guru of Color Forth I have total control over this exciting development I don't have to negotiate, I don't have to be polite about it. Nobody's interested, there is no conceivable profit motive.

Anyone is welcome to borrow these ideas and use them as you feel. Collaboration is wonderful. I don't expect you will. I understand completely that you are all doing your own thing. And your happy doing it and that's ok. But I'll keep making noise to the end of the millennium.

(Comment) These faith shattering experiences that we have every Forth day, I have to remind myself that father says this is not heresy. (laughter) And so on the other hand I said, wait a minute, maybe we all aught to be heretics. So Skip came to me and said that there was a book out there that may be of use. In the beginning there was the command line. It occurs to me that perhaps you can not only field questions but incite others to bring forth their own. There is a book out there that may be of use. In the beginning there was the command line. It is a treatise on operating systems by Niel Stevenson.

(Chuck)
Wow. he is one of my ...

(Question) How do you visualize Forth and the internet?

(Chuck)
HTML would be much nicer in Color Forth. Colors representing various aspects of it. Escape to Forth, come back to text. I plan to design my pages that way with of course a translator to convert them to html to send them out. Most of the html I am doing is for my own use.

(Question) You said at one time that you were pulling graphics out of OKAD to put on a web page. Have you continued to do any of that?

(Chuck)
I have OKAD documentation now illuminating all the gates and pictures showing how the simulator works and things like that. IT is very pretty, very satisfying. The things that I wish I could do that I can't do may be improved. The documentation is internal to iTV so there is nothing to see.

Oh, I work for iTVc still. Our new offices are just down the road they are at the end of Rengsdorf on El Camino. And we have very nice offices and lots of space for growth.

(Question) When will iTV get funding?

(Chuck)
Next week? It has been almost a year that the funding has been next week. No one believes it any more. One week it will actually happen and everyone will be amazed. Gary Langford is the president. He is very ambitious. Joe Zott and I are vp. Gary is talking deals with big players. Anything can happen. There is no reason to visit the office, there is nothing to see there. But it so close if you want to stop by. We have been there for 3 months. We've got out name up on the directory. The building is on the far side of El Camino opposite Rengsdorf, across from Cost Plus. It has a some name. Nice place, good view.

(Question) I read something the other day about a web site with speech to text connected to a search engine where you could say something like "I like to search following radio programs for the following phrase" ... ... and so on ... experimental thing ... your ideas ... speech ..

(Chuck)
I've got an audio card with a microphone input. And I've always planned of plugging in a microphone and looking at some speech and see if I couldn't find some simple way of doing voice recognition. I think the algorithms for voice recognition compete with the algorithms for playing chess in their brute clumsiness. There has to be better way. The brain doesn't do it that way. Human beings don't play chess in this algorithmic way either. There's a bit of magic that we are overlooking, that the AI people have overlooked for 30 years. That remains to be done.

I don't now about voice as a practical thing. I always liked privacy and voice lacks privacy. Muttering to your computer in a room full of people isn't going to work. And typing does. I just question how much of the time you want to spend alone with your computer talking making that feasible.

(Question) ... clip on your belt ... head's up monitor ...

(Chuck)
They've got a number of problems. One is: I was very uncomfortable with a keyboard mounted on my hand. That was very clumsy. I could reach in my pocket and touch the buttons. (laughter)

I gather that there is something people use but my experience with more than five keys was also disappointing. In fact my way of doing five keys on my fingers was not good. I can tap my fingers on this surface here and it's really nice. But when there are buttons underneath I become uncoordinated and I can' press two keys at the same time and my little finger was weak. And keys that don't get accidentally pressed have a pretty high actuation force and your fingers get tired. I have not found an adequate technology there.

I would want it to be one handed. The question is, if it is one handed do you use your dominant hand or your subordinate hand so that the other one is free to do other things?

(comment) about one handed keyboards

(Chuck)
I also need in the five keys shift. You've got escape characters with the five keys.

(Question) about handicapped software and spelling

(Chuck)
Wil Baden was telling me how he has developed a one character representation (noise) he uses that all the time. Maybe that explains why how he can (noise).

(Question) about predicting the rest of a word using the dictionary after you type the first few characters

(Chuck)
I keep trying to resist building too much context into the editor. What I find myself doing is that I want to edit this string completely out of the context in which it would normally be embedded so the words that it might recognize are in fact not around any more. To force everything to be sort of sequential has never worked for me. But certainly that kind of abbreviation, I don't know how they get these spell check dictionaries so compact. Maybe they aren't.

(Comment) They are.

(Chuck)
But I don't see that it's this complicated.

(Question) about strings

(Chuck)
I've never been strong on strings. And I guess that in this context strings don't exist. A string would have to broken down into words. If you have string that you are going to send out to the display or a dot quote I would say put a dot quote function in front of every word to use it like a string and just put those words out.

(Question) about extra spaces

(Chuck)
Well that would be an empty word and that would be expensive. Or you use the sentence terminator function to put in two spaces after a word instead of one. I like the notion of html that you don't specify the appearance you specify the functionality. Like uh emphasize words or cite tags. That is nice because they let you decide what the citation should be and I will try to emulate that. End of sentence is a functional thing and what it actually translates into is determined at display time.

(Question) in speech there is no need for a frequency consideration, because there no frequency in a whisper but there are words in a whisper. but you can understand.

(Chuck)
The first step in voice recognition should not be an FFT.

(comment) The guy who started up Dragon Systems, a major speech recognition company, is a Forth programmer from Europe. They are not using Forth but they brought a lot of the notions with them. I met with them one time. His first voice recognition stuff was done in Forth.

(Chuck)
I can see expanding Color Forth to encompass word processing, net browsing, spreadsheets, programming. Everything I have in mind to do I can see how to do it. I don't have the time or inclination to do it yet but I'll try.

(comment) You are not the only one who recognizes that FFT are not ideal for audio acoustic processing. It is not a good simulation of what the human ear does. There are other algorithms that are a thousand times more efficient for extracting the frequency information that we use for speech recognition than an FFT.

(Chuck)
One of the problems I have with jpeg is that apparently there is a theorem which has demonstrated that the DCT is the most efficient compression algorithm possible. And that amazed me because I think it's completely ad hoc. But there's this damn theorem which says that you have to do it this way our your going to be non-optimal.

I worry about voice the same way. Whatever the ear does is surely optimal. There has been a billion years of evolution.

(comment) It uses the constant Q transform.

(Chuck)
However the brain does it. The same with chess. We developed that game to stretch our minds and its worked beautifully but we don't know how it works.

Thank you for listening, I'll talk to you at dinner.
(applause)

UltraTechnology homepage