Thursday, November 12, 2015

History In a Muddle. And a Planner, and a Conniver, and even a Dali

Jason Self Wed, Nov 11, 2015 at 3:35 PM

Hello, are you the Greg Pfister that worked on Muddle (MDL) back in the
day? Here's hoping you are and that this email address works when I
click on Send... :)

Greg Pfister Wed, Nov 11, 2015 at 7:05 PM
To: Jason Self

Yes, that's me.

However, I didn't really work on the language or its implementation; rather, I documented it. Some did think that was the bigger feat, since it was rather huge had kind of just grown without documentation of any kind.


Greg Pfister
Sic Crustulum Frangitur
Quidquid latine dictum sit, altum videtur.
[Quoted text hidden]

Jason Self Wed, Nov 11, 2015 at 8:25 PM
To: Greg Pfister

> However, I didn't really work on the language or its implementation;
> rather, I documented it. Some did think that was the bigger feat,
> since it was rather huge had kind of just grown without documentation
> of any kind.

Documentation seems to be all that survives today. Perhaps it is enough.

A group of people (3 or 4 counting myself) are looking into the possibility of reimplementing Muddle on modern systems (GNU/Linux.) It seems an interesting technical challenge. I have learned from [4] that Muddle was ported to UNIX at some point, but sadly none of that code seems to have survived to the present day. I've also learned that MIT had an extensive Muddle library on a machine called mitajax (or perhaps just ajax) but it seems to have been decommissioned and no one knows what happened. Just a few PDFs seem to be all that's left, and those cover much but not everything [0] [1] [2] [3]. Those PDFs refer to other documents which I can't seem to find, like EDIT: The MDL Editor and etc. I'm wondering if you might have additional information on Muddle or know where it could be found? For example: I've learned through my research that Muddle had a machine independent virtual machine but no documentation of it (bytecode, etc.) seems to exist or at least I've not been able to find it if it does.

And there is always the "you don't know what you don't know" aspect
too - so I'm not interested in just EDIT and the virtual machine but anything can be learned.
And even if you have no further information, thanks for taking the time to listen to me. :)

[2] programming/mdl/manuals/MDL_Programming_Language.pdf
[3] programming/mdl/manuals/MDL_Programming_Environment.pdf

> Quidquid latine dictum sit, altum videtur.


Greg Pfister Wed, Nov 11, 2015 at 10:01 PM
To: Jason Self

I think your best bet is to try contacting Dave Lebling.

After leaving LCS, where he worked in the same group I (and Muddle) was, he founded Infocom, creating Zork. And Zork, I was told, was written in a port of Muddle (very sure of that) which was made machine & OS independent (less sure of that; it's obviously desirable for a game, just hard) (and would explain the VM).

Who knows, best case maybe he kept a copy for old time's sake.

Dave should be fairly easy to contact; he even has a Wikipedia page. He also had (has) a phenomenal talent for creating really good games.

Hope this helps! Let me know how things turn out. Muddle was fun.

(And it will always be Muddle to me. "MDL" was "Oh #$&% we're going to lose our DARPA funding for a funny name" from a fearful administrator.)


[Quoted text hidden]

Jason Self Thu, Nov 12, 2015 at 12:29 PM
To: Greg Pfister
Greg Pfister wrote ..

> I think your best bet is to try contacting Dave Lebling.

Thank you. I am in contact with Dave Lebling.

> (And it will always be Muddle to me. "MDL" was "Oh #$&% we're going
> to lose our DARPA funding for a funny name" from a fearful
> administrator.)

Do you know where the Muddle name came from or how it got started or
what it was supposed to be about or whatever?

Greg Pfister Thu, Nov 12, 2015 at 2:13 PM
To: Jason Self

On Thu, Nov 12, 2015 at 12:29 PM, Jason Self wrote:

Greg Pfister wrote ..
>> I think your best bet is to try contacting Dave Lebling.
> Thank you. I am in contact with Dave Lebling.

Good. He's sure to know something.

>> (And it will always be Muddle to me. "MDL" was "Oh #$&% we're going
>> to lose our DARPA funding for a funny name" from a fearful
>> administrator.)
> Do you know where the Muddle name came from or how it got started or
> what it was supposed to be about or whatever?

The backronym was "MAC's User Defined Data and Language Evaluator." But that was well after the fact. I don't recall, if I ever knew, where the original name came from.

"MAC" was from "Project MAC", the original name for the MIT lab where Multics (and other things) was developed. It stood for "Machine Aided Cognition." That name was changed to LCS shortly after I left. During a visit back there just after the name was changed, I noticed that the men's room door to the 9th floor (AI lab) had acquired the label "Lavatory of Computer Science." (Hackers don't usually respond favorably to what they perceive as unnecessary changes to their environment.)

There may have been a name connection to Carl Hewitt's proposed language Planner, for AI, since there certainly were other connections. Muddle follows Planner syntax very closely. It also follows the simpler parts of Planner semantics closely, like notions of evaluating an array or other data, and arrays, strings, etc., being first class objects (unlike LISP at the time). It didn't try to do his automatically enabled backtracking, though. That was insane.

An aside: I seem to recall that I was the author of the first inline editor/debugger written in Muddle for Muddle. I also wrote -- or rewrote; there may have been a less fancy one before I started hacking it -- nearly all of of the first pretty printer. That's rather necessary if you want to save changes you made in the debugger. It helped that comments were also first class objects that stayed with the program during interpretation, although prettyprinting them was a bitch.

Other general background, a.k.a. Giant Aside:

Making up new languages was in the air those days. I now consider that a big mistake, and believe nobody should even consider creating a new language until he/she has written at least 100,000 LOC in at least four other languages, each. Of course none of us had done that, but we didn't know better at the time. I made up one myself, called Dali (a name I cringe at now), for writing animations of objects in computer graphics. It was based on what now would be called objects with closures, several years before objects hit the scene. (Closures were all over the LISP language world.) Object closure execution was triggered on events like a request to move or resize an object, so, for example, trying to move a ball would make it bounce and trying to move a human figure would make it walk. (This was a Long Time before OOP.) Anyway, Dali and Planner and Muddle to say nothing of dataflow languages were part of the "new language" trend.

Planner, with its automated backtracking, got a huge boost when Winograd used a simple Planner LISP extension to implement his "blocks world" AI microworld, which was regarded with awe in the AI community. Planner as a result was the kickoff of a "procedural embedding of knowledge" fad in AI. (A few years after all this, I spoke with another AI grad student whose thesis title was that phrase, asking him what he found out. His answer: "Don't embed knowledge in procedures." A somewhat shortlived fad.)

Hewitt responded to the reflected fame by developing syntax and semantics to beat the band, leaving LISP syntax far behind. Muddle might well have began as an informal attempt to implement part of it; it was never explicitly funded at its start, and even was done in a group with a different funding contract.

Hewitt kept on adding features and filigree to Panner until it was getting ridiculous, IMHO, and its description, his thesis, kept getting longer and longer.

Eventually Gerry Sussman – who was then a grad student in the AI lab, along with Hewitt; I was a grad student in MAC – got seriously fed up with Planner. Exactly why, I'm not sure; he certainly considered it bloated and rococo, which it definitely was at that point. He also wanted something usable (and implementable in finite time) in which to program his own thesis. Or maybe it was Hewitt's newfound predilection for wearing ascots.

So Sussman defined and implemented another language which he called Conniver, explicitly referring to it as "the Jewish Planner."

(Hewitt was 100% blond WASP, from Texas I believe; Sussman was NYC Jewish, with one of his goals being to get an airplane pilot's license before a (car) driving license).

Conniver was lean and mean. It just added closures to LISP, with a very few primitives to manipulate them. His manual was short, decorated with entomological insect pictures (bugs, or course) and his crowning touch was a one page implementation of Planner in Conniver.

Well, that one page at least implemented the entire backtracking core of Planner, which was the main thing anybody really ever wanted.

I believe Sussman used Conniver for his thesis. All I recall about that is he had programs which looked at whether other subprograms were failing, and modified them to do better. The reason I remember that: Minsky seized on it to proclaim that programs were now conscious! They examine themselves! Gack.

I don't know if Planner ever got used for anything significant other than the blocks world. I seem to remember that people didn't like it because it was too uncontrollable; once it started backtracking you couldn't tell why things happened.

Muddle, of course, went on to be the implementation language of Zork.

I implemented Dali as an extension of Muddle. Dali never went anywhere either, although when I ran into Alan Kay (of Xerox PARC and computer graphics fame) at a conference many years later he acted very happy to meet me and said he was using the principles in Dali as the core of the latest thing he was doing. So maybe it had some impact.

Can't leave this out: The person who deserves the credit for implementing Muddle at MAC is Chris Reeve. The last (and only) email I have from him puts him in AMD. I've no idea where he is now. Before AMD, he worked in France for a compiler company whose name I don't recall.

Dang, this got long enough that I think I'll copy and publish it in my "Random Gorp" blog.


Sunday, June 28, 2015

The Dinner Install: An Exercise in Frustration

Hopefully this will be funny to a number of folks out there of a semi-geeky/techie nature. Many have probably been in similar situations. My apologies if it embarasses anybody else. All quotes are approximate, and names have been avoided where possible. Everything recounted below actually happened, of course. It was just so surreal I had to write it down.

    * * * * *

On arrival at relatives' home for dinner, I am greeted by

"Oh, Greg, we can use your expertise."


But of course I have to help. Not a problem. Relatives. See what I can do.


Now, you have to imagine all of this taking place in the middle of an informal dinner get-together of about eight people including two 5-6 year old girls. Everything, every question, every event, is an interruption to some conversation, and the girls are in constant motion, continuously emitting extremely high-pitched sounds that may or may not have any meaning.

"Can you get this to work on our Sonos system?"

"This" is a floating waterproof speaker for a hot tub. So naturally the first thing I do is look at the directions. Yeah, I'm weird that way. Those only talk about pairing with Bluetooth. Sonos is WiFi. I look at the box. It says "Waterproof Bluetooth Speaker."

"Sorry, this doesn't work with Sonos. That's WiFi, this is Bluetooth. Two completely different things. They don't talk to one another."

"Oh. I suppose we could return it. But it was a Father's Day gift. Is there any way to make it work?"

"Well, it can probably work with your phone. Can you play the Sonos on your phone?" She has a somewhat elderly iPhone that is having problems.

"No. The phone has a Sonos controller, but not a Sonos player."

"Well, we can still play music from your phone."

"I don't have any music on my phone."

"Actually, you do. iTunes has iTunes Radio." I pull it up on her phone, and start scrolling through the stream choices.

"Does it have smooth jazz?" Of course not.

At this point my wife chimes in with "Oh, you have to get this great app, Fit Radio. I use it all the time. It's free! And it has almost no commercials."

Never mind that Fit Radio is for workouts, and not everybody wants 140 beats/min songs pumping them up in a hot tub. It's my wife. It must be installed.

"How do you get it?"

I open the app store, find Fit Radio, click to install.

"It wants your Apple ID password. Could you enter it?"

Oh, no. The rabbit hole just opened. Wide. Because, of course...


"Ummm. I'm not sure. Try [xxxxx]. We usually use that around the house." Doesn't work. "Try [yyyy]." "Maybe [zzzz];" This goes on until... 

iTunes says "Your account is disabled."

The choices are 1) Reset password. 2) Answer security questions. Of course nobody wants to go near the security questions.

So it's reset time. "OK, what's your Apple ID? Not the password, the email address or whatever you used."

"My what? I have no idea. Let's text . I think he keeps track of those things. Maybe he knows."

Text sent, so I get time to drink a swig of beer, but that's about all, since his response is quick.

"I think the ID is aaaa@bbbb. And password is yyyy."

We're past the point of the password, of course, but it was one of the ones we tried, and it didn't work.

A step forward! aaaa@bbbb works! Now we wait for iTunes to send email to that account.

Wait. Not there. Wait. Not there. Wait. Not there.

"Are you checking aaaa@bbbb?"

"Huh? Oh. That email account. Let me look... there it is!"

One step forward again. Click on link, reach web page saying to pick a new password.

"What do you want for a password?"


"Try [argle]." I enter it twice, carefully, and hit "next". 

iTunes says: All passwords must contain a number.

"Try [argle]08." I enter it twice, carefully, and hit "next". 

iTunes says: All passwords must have an uppercase letter.

"Try [Argle]08." I enter it twice, carefully, and hit "next". 

iTunes says: You can't have used the same password in the last year.

"Try [Bargle]08." I enter it twice, carefully, and hit "next". 

iTunes says: Your password is not complex enough.

I give up and make up a *&^%ing password myself. It contains words expressing my frustration, but is not unsuitable for work. Relatives, remember. It gets through iTunes' tight-assed checks. Of course it has no mnemonic value for them, so it gets written down on a piece of paper which is put in a kitchen drawer, probably never to be seen again.

Now we're back in the App store, and again try to download Fit Radio. Which is free. So obviously

iTunes says "You need to verify your payment method. Cancel/Continue".

I hit cancel, thinking, silly me, that we're not buying anything, so I can skip that step. Naturally, that cancels the download. Of a free app. So I try again, and this time hit "continue."

"I'm sorry, but they are saying there's no credit card on file. Yes, they insist on it even though the app is free."

"Well, yes, not having a card on account was deliberate, as I recall." Smiles.

"Have you ever downloaded an app?"

"Actually, well, no."

I wonder where the other apps I see on the phone came from, but keep my mouth shut.

"Do you really want to keep pushing on this, or just call it a day?"

Hands me a credit card.

So I enter it and all the other information, and it bounces back with invalid number. But I can't see where it's wrong because the space to enter it on the form is too short for all 12 digits.

After much fumbling with iPhone's sadistic cursor control I find the wrong digit - which had scrolled off to the right, of course -- and fix it.

OK, now we can download the free app. I do so. It downloads and installs.

WAIT WAIT WAIT... yes, they do have a late enough version of iOS installed to use it. Whew. Yes. Not the most recent release, but good enough, by like one sub-release.

Almost had a little moment there.

So I crank up the app, and... It's free, but it wants you to create a new account. At this point I've had it. I hand the phone to my wife, saying "You did this for yourself, right? Do it for them, please." She gives me a nasty look because this is obviously less important than whatever she was talking to someone about, but I just grab my now-warm beer and go outside, where folks are sitting around and talking, just as if they were normal people.

A few minutes later, my wife comes over and says it won't play.

We fuss with it. We get the commercial - &deity forbid the commercial shouldn't work - but no music is emitted. I kill it and restart it. This time I say I have no idea, because I don't.

But a few minutes later I feel guilty. So I download the dang thing on my own phone, start it up, And I have to create another dang furshlugginer account, probably my 267th. At least it doesn't have iTunes' tight sphincter about passwords. For me, it works. 140 bpm music is indeed emitted. So it's probably nothing in their WiFi or whatever.

I go chase down her phone again, and try again. Still no noises are emitted. (Other than the commercial, of course.) I try iTunes Radio. No noises there, either. Hmm. That was working before; I tried that back when finding out it didn't meet the Smooth Jazz Requirement. (Neither does FIT Ratio, but...) What the heck?

Just for grins, I try the other part of the job, which originally was the only job: pairing bluetooth. I start up the Waterproof Bluetooth Speaker, and it proceeds to emit a long, bizarre series of beeps and boops and flashes which, the instructions inform me, mean that... it's paired! I look at the Bluetooth settings, and gol-dang, the phone agrees. So why no noises?

OK, so reboot the phone. I do that, and get the message

"You have less than 20% battery left."

Wonderful. Well, that should be enough to try...

Nope, it just did an auto-shutdown.

A charging cable gets found somewhere, the phone is plugged in on the kitchen counter amid the party wine glasses, and it reboots.

Once it's going again, I think well, whatever, it's plugged in, so let's try. Among the wine glasses I go to iTunes Radio, and noises come out! I go to Fit Radio and... more noises! After the commercial!

So I bring the Waterproof Bluetooth Speaker over by the wine glasses, but my wife has put a thing down where I need to be. I go to move it and hear "What are you doing? I put that there to remember to take it home." "I need to try the speaker, and it has to be over here where the phone is charging. How about putting it over there instead." "I suppose." Another dirty look.

Finally. I turn on the Waterproof Bluetooth Speaker. It boops. Then the phone stops emitting noises - they're coming from the speaker! Oh frabjous day! Caloo! Calay!

So I tell everybody it now works! It works! Hooray! Even the new app works with it!

"Good. It's time to eat."

So they can now get 140bpm songs under water in the hot tub, or whatever. I don't think they'll ever use it. But they can tell whoever gave it to them that they got it to work, and oh, it's so great.

And I have a new app, and Yet Another Account, that I am never going to use and I know Apple will never let me get rid of. (I've tried. They come back on restore from backup.)

And I know they're going to lose that password.