HN user

SimHacker

914 karma
Posts2
Comments588
View on HN
Shadow DOM 12 years ago

Warren Teitelman described a lot of the great work done at Xerox PARC in "Ten Years of Window Systems - A Retrospective View" in the book "Methodology of Window Management," Proceedings of the Alvey Workshop at Cosener's House, Abingdon that took place from 29 April 1985 until 1 May 1985.

"Both James Gosling and I currently work for SUN and the reason for my wanting to talk before he does is that I am talking about the past and James is talking about the future. I have been connected with eight window systems as a user, or as an implementer, or by being in the same building! I have been asked to give a historical view and my talk looks at window systems over ten years and features: the Smalltalk, DLisp (Interlisp), Interlisp-D, Tajo (Mesa Development Environment), Docs (Cedar), Viewers (Cedar), SunWindows and SunDew systems. The talk focuses on key ideas, where they came from, how they are connected and how they evolved." -Warren Teitelman

http://www.chilton-computing.org.uk/inf/literature/books/wm/...

It's a wonderful book with many interesting articles and working group discussions about window management and user interface architecture, that gives great perspective on a wide variety of approaches. I'm glad that it's finally available online!

http://www.chilton-computing.org.uk/inf/literature/books/wm/...

Preface

This volume is a record of the Workshop on Window Management held at the Rutherford Appleton Laboratory's Cosener's House between 29 April and 1 May 1985. The main impetus for the Workshop came from the Alvey Programme's Man-Machine Interface Director who was concerned at the lack of a formal definition of window management and the lack of focus for research activities in this area. Window Management per se is not the complete problem in understanding interaction. However, the appearance of bitmap displays from a variety of vendors enabling an operator to work simultaneously with a number of applications on a single display has focussed attention on what the overall architecture for such a system should be and also on what the interfaces to both the application and operator should be.

The format of the Workshop was to spend the first day with presentations from a number of invited speakers. The aim was to get the participants aware of the current state of the art and to highlight the main outstanding issues. The second day consisted of the Workshop participants splitting into three groups and discussing specific issues in depth. Plenary sessions helped to keep the individual groups working on similar lines. The third day concentrated on the individual groups presenting their results and interacting with the other groups to identify main areas of consensus and also a framework for future work.

Part I of this volume gives the background to the Workshop, its scope and goals.

Part II consists of position papers, the invited presentations and an edited version of the discussion following each. The set of speakers covers a significant part of the expertise currently available. This section provided a useful summary of the state-of-the-art for the Workshop and highlighted the issues.

Each participant was asked to identify his major areas of concern prior to the Workshop. These have been condensed and integrated to give a view of the problems prior to the Workshop. Lists of issues were also generated from these contributions and the invited presentations. These formed an initial basis for the Working Group discussions reported in the next part.

Part III concentrates on the work carried out in the Working Groups with particular attention focussed on the Working Group conclusions and questions requiring further study.

Part IV presents the main conclusions of the Workshop and includes an Open List of questions requiring further study. This list indicates the current limits to the understanding achieved at the Workshop. As always, more questions were raised than conclusions reached. This part also includes a bibliography of the area and a glossary of terms used in the book.

The discussion sessions have been heavily edited. The Editors hope that no remarks have been attributed to individuals incorrectly. Copies of the typescript were sent to all participants for comment prior to publication.

The contents of this volume should not be considered as definitive conclusions but as a contribution to the study of methodology in human-computer interaction particularly with respect to single user workstations.

This book should be of interest to anybody with an interest in graphics and interaction in general. Many of the issues discussed have a more general applicability than the particular area under discussion. However, the primary audience is those directly involved in the area of the human factors and design of systems on high-powered single user workstations.

Shadow DOM 12 years ago

I wrote that article about nine years ago, and OpenLaszlo never took over the world the way I hoped it would, but Max Carlson, one of its chief architects, is working on reimplementing the good parts in JavaScript/CoffeeScript, without all the baggage. It's a work in progress and not very well documented, but it embodies some wonderful ideas!

https://github.com/mcarlson/rheses

Oliver Steele, another of OpenLaszlo's architects, has written some great stuff about "Instance First Development", a declarative, prototype and constraint based approach to programming modular components that OpenLaszlo supports.

http://blog.osteele.com/posts/2004/03/classes-and-prototypes

http://c2.com/cgi/wiki?InstanceFirstDevelopment

http://lua-users.org/lists/lua-l/2007-10/msg00379.html

http://www.donhopkins.com/drupal/node/124

http://don.fed.wiki.org/view/prototype-based-programming

https://ssl.weepee.org/lps-5.0.x/docs/developers/introductor...

And of course the granddaddy of all constraint based user interface systems is Ivan Sutherland's Sketchpad:

https://en.wikipedia.org/wiki/Sketchpad

Shadow DOM 12 years ago

I've worked on two user interface systems that used on constraints and data binding for layout and configuration, which worked very well.

http://www.donhopkins.com/drupal/node/69

Constraints and Prototypes in Garnet and Laszlo

Garnet is an advanced user interface development environment written in Common Lisp, developed by Brad Meyers (the author of the article). I worked for Brad on the Garnet project at the CMU CS department back in 1992-3.

http://www-2.cs.cmu.edu/~garnet/

One thing I like about Brad Meyers is that he's a strong programmer, as well as an excellent researcher, so he had a first-hand understanding of the real-world issues involved in programming languages and user interface architecture, unlike many academics who talk a lot of theory but never get their hands dirty. Brad Meyers understands where the rubber hits the road, and how important it is to have good tires.

At the time I worked on it, Garnet didn't have pretty graphics like Flash, but the underlying programming system had some advanced features that are sorely lacking from most modern user interface development environments.

Laszlo is an modern open source GUI programming system, with many of Garnet's advanced "natural programming" features like prototypes and constraints. Laszlo currently uses Flash as its virtual machine, but it's a much higher level way to program dynamic interactive web based applications, without using the proprietary Flash authoring tool.

http://www.openlaszlo.org/

Garnet had a true prototype based OOP system (somewhat like Self), which is great for gui programming, because guis have so many objects that look and behave like each other except for a few little customizations (like the layout, graphical style, data source and call-back behavior).

Garnet also had an automatic constraint system, which enabled you to simply define any attribute as a formula that depend on other attributes, without needing to worry about how and when the values were calculated. Garnet's constraint system automatically figured out the dependences of each formula, and automatically and efficiently recalculated and cached any values that needed to be updated, but only when necessary.

With constraints, you can make a button inside a window, and define its left edge to be ((parent.width - self.width) / 2), and it will automatically remain horizontally centered in the window from then on, without you (the programmer) having to worry about what to do when the parent window's size changes.

Without constraints, you have to manually write all the code that changes the button position whenever the window size changes, which results in code scattered all over the place in different classes and handlers and intermediate objects.

Constraints are much easier to use and more general purpose than resize handlers, springs and struts, complex MVC updating schemes, and other Rube Goldberg devices.

Constraints are especially useful for user interface programming, because they save you from having to write lots of annoying boiler plate and error prone code for handling updates (registering, chasing down dependencies, detecting changes, notifying updates, all happens automatically).

Constraints make GUI programming much easier, but they're also useful anywhere in your program where one value is defined in terms of other values that might change at any time.

Once you've tasted a programming language with constraints, you will not want to go back. Programming without constraints is like writing in machine language: error prone, low level, tedious, inefficient and mind numbing.

Constraints are like structured programming for variables: In the same way that it's better to use loops and conditionals instead of gotos, it's also better to use declarative programming that says what you mean, instead of imperative peeks and pokes and side effects.

Constraints let you write easy to read code, and concentrate on the interesting high level stuff that matters. You can go back later and change the layout of a complex GUI, without rewriting lots of fragile layout and event hanling code. Look at any MFC program to see how bad it can get without constraints.

Constraints are natural and close to the way you think, because they let you declare a variable and the formula that defines its value in one place, instead of scattered all around the code. They off-load the tedious task of tracking down and maintaining all the dependencies from the programmer to the computer, which is much better at that kind of stuff.

Garbage collection is like constraints: the computer can do a much better job than the human at performing the task perfectly, so spending some cpu time on automatic garbage collection and constraint maintenance is well worth the significant increase in programmer productivity and software reliability.

Garnet had a prototype based object system. It was implemented in Lisp with a system called KR (Knowledge Representation, classic AI "frames" with slots and inheritance). KR was extended with an automatic constraint system that parsed the formula expressions (written in Lisp macros), figured out the dependences, wired up and maintained the dependency graph.

An expression like "((parent.width - self.width) / 2)" would depend on self's width slot, self's parent slot, and parent's width slot. If any of them changed, then that formula would be automatically invalidated, and only recalculated on demand when it (or something that depended on it) is required.

The cool thing was that you can make a prototype object, like a button, which has sub-structures like a label, border, drop shadow, etc. The sub-structures can be constrained to the button's dimensions, the label is centered in the border, and the drop shadow floats below and to the right, so the button's layout is automatically updated when it moves or resizes.

The text color and border fill can depend on the button's "hilight" variable, so they automatically switch between bright and dark when you press the button (the input handler just toggles the "highlight" variable, and the graphics that depend on it are automatically updated).

Now that you've composed and constrained a button to look and feel how you want, you can use it as a prototype to make other similar customizable buttons instances. Each instance can itself override the prototype's graphical properties, label text, action, etc.

Instances of a prototype all magically inherit (instances of) the sub-structure of the prototype! It all just works the way you'd expect it to (with a lot of plumbing going on automatically behind the scenes). There's no need to make a separate class for each different style of button or action - prototypes let you customize any instance itself!

Like Garnet, Laszlo is an advanced open source user interface development environment that supports prototype based OOP with constraints.

Unlike Garnet, Laszlo deeply integrates recent trendy technologies like XML, JavaScript, Flash, data binding, networking, XML/RPC, SOAP, ReST, Java and Tomcat.

Laszlo has a class/prototype based object system, and it (currently) uses the JavaScript runtime in Flash as its virtual machine. But it's more than just another way to program Flash.

Unlike raw Flash, The Laszlo language is easy to learn and Laszlo programs are easy to read and write thanks to prototypes, constraints, declarative programming, and instance-first development.

Shadow DOM 12 years ago

NeWS was architecturally similar to what is now called AJAX, except that NeWS coherently:

used PostScript code instead of JavaScript for programming.

used PostScript graphics instead of DHTML and CSS for rendering.

used PostScript data instead of XML and JSON for data representation.

https://en.wikipedia.org/wiki/NeWS

The PHP manual pages are full of user comments with helpful suggestions just like that, which incompetent programmers copy and paste into production systems. But I think of it as a good thing, an instance of evolution in action, because banks that hire such stupid programmers deserve to have all their money stolen from them.

Well Ted Nugent (not to mention Ann Coulter) got away with calling Obama a "monkey," and he's the highly respected darling of the GOP, whose endorsement is sought after and appreciated by not only Republican senators and congressmen, but Mitt Romney himself.

(I'm not endorsing anyone's behavior here, just pointing out how low the right hand side of modern American politics has degenerated, to provide some perspective.)

Memories of Steve 12 years ago

At the National Air and Space Museum reception during Washington DC EduCom in 1988, I took a big bite out of one lobe at the bottom of a three lobed red bell pepper so it looked like an alien's face, and held it up to Steve Jobs, and said "Earthman, give me your seed!"

He looked at me funny, but I couldn't tell if he got the reference to Bizarre Sex #10: http://silezukuk.tumblr.com/post/3151672333 [NSFW]

And remember that "a hate group" is actually "more than one hate groups" because Pat Buchanan and Ron Paul definitely qualify as haters and bigots.

If you have the stomach, google yourself up some Pat Buchanan quotes -- it's really vile and disgusting stuff, and he absolutely and without question qualifies as an archetypal "bigot".

In fact, the Guardian article that recently outed him as contributing money to Pat Buchanan and Ron Paul happened between the short time that he announced in an interview he was NOT going to resign, and between when he DID resign, so it may have been a factor, the straw (or rather the bay of straw) that broke the camel's back.

http://www.theguardian.com/technology/2014/apr/02/controvers...

http://www.theguardian.com/commentisfree/2014/apr/04/brendan...

You should respect him if he had the integrity to earnestly change his views. But he deserves absolutely no respect for sticking to views that are wrong and hateful that he refuses to even justify.

Just because you were a bigot 15 years ago doesn't mean you should respect bigots who haven't changed their opinions yet. You deserve some respect for changing your views, but Brendan only deserves contempt for failing to do that himself, not respect.

So you're saying it was wrong for the Supreme Court to strike down bans on mixed race marriages because at the time an overwhelming majority of Americans were against it?

Why do you think human rights should be put up for a vote? Are you against mixed race marriage because it was so unpopular at the time the "activist court" struck it down?

Society has the right to protect itself from intolerant bigots like Brendan.

https://en.wikipedia.org/wiki/Paradox_of_tolerance

Michael Walzer asks "Should we tolerate the intolerant?". He notes that most minority religious groups who are the beneficiaries of tolerance are themselves intolerant, at least in some respects. In a tolerant regime, such people may learn to tolerate, or at least to behave "as if they possessed this virtue". Philosopher Karl Popper asserted, in The Open Society and Its Enemies Vol. 1, that we are warranted in refusing to tolerate intolerance. Philosopher John Rawls concludes in A Theory of Justice that a just society must tolerate the intolerant, for otherwise, the society would then itself be intolerant, and thus unjust. However, Rawls also insists, like Popper, that society has a reasonable right of self-preservation that supersedes the principle of tolerance: "While an intolerant sect does not itself have title to complain of intolerance, its freedom should be restricted only when the tolerant sincerely and with reason believe that their own security and that of the institutions of liberty are in danger."

It's certainly always possible to change what you believe, and that's a lot more ethical than lying about what you believe. Of course, Brendan is a failure as a CEO and a decent human being because he REFUSED to change what he believed.

It's ironic that bigots of Brendan's ilk strongly believe that it's possible for gays to change their sexual preference, while they continue to cling to what they believe in the face of all the facts that prove them wrong.

The difference is that the people who stuck their neck out for racial equality, gay rights and women's rights were objectively right, but Brendan Eich is objectively wrong. And that matters.

Your idea that human rights are about social consensus is really dangerous. The argument that homosexuality is acceptable is not based on cultural attitudes, it's based on science and ethics.

Why don't you let Brendan Eich play the victim and feel sorry for himself, he doesn't need any of your help.

It speaks to his integrity as a hateful bigot that he didn't have the human decency to change his beliefs based on the fact that he was completely incapable of coming up with a valid justification for them, and refused to justify himself or apologize for what he did. And no, his non-apology apology was not an apology.

Not to be confused with the other "guy", Josh Mattingly: "The original concept work came from Indie Statik’s then-face Josh Mattingly and Game Jolt founder David DeCarmine, back before that ugliness back in January lost us half our staff and an EIC in around twelve minutes."

This guy:

"Also, how are yo, pretty lady? :)"

"I will kiss you on the vagina if you do"

"Ill still kiss your vagina"

"Let me know if you need a penis for anything in the meae future *near"

"Like. My penis. For your vagina"

[Too explicit for me to feel comfortable leaving readable]

http://img.gawkerassets.com/img/19d66708hxa9zpng/original.pn...

http://kotaku.com/she-was-harassed-by-a-games-reporter-now-s...

Philosopher Karl Popper asserted, in The Open Society and Its Enemies Vol. 1, that we are warranted in refusing to tolerate intolerance.

https://en.wikipedia.org/wiki/Paradox_of_tolerance

Michael Walzer asks "Should we tolerate the intolerant?" He notes that most minority religious groups who are the beneficiaries of tolerance are themselves intolerant, at least in some respects. In a tolerant regime, such people may learn to tolerate, or at least to behave "as if they possessed this virtue". Philosopher Karl Popper asserted, in The Open Society and Its Enemies Vol. 1, that we are warranted in refusing to tolerate intolerance. Philosopher John Rawls concludes in A Theory of Justice that a just society must tolerate the intolerant, for otherwise, the society would then itself be intolerant, and thus unjust. However, Rawls also insists, like Popper, that society has a reasonable right of self-preservation that supersedes the principle of tolerance: "While an intolerant sect does not itself have title to complain of intolerance, its freedom should be restricted only when the tolerant sincerely and with reason believe that their own security and that of the institutions of liberty are in danger."

Welcome to the club of being even more hurt.

A lot of people disagree with you, because they believe financially supporting Proposition 8 is prima facia evidence of homophobia, just as donating money to the KKK is evidence of racism.

But you're performing logical backflips, and parroting implausible straw man arguments usually proffered by dyed in the wool homophobes to justify their hatred, without actually having any knowledge of Brendan's beliefs, in an attempt to counter arguments and testimonial from people who DO know him and HAVE been negatively affected by his beliefs.

That's why it's my belief that you're being an apologist for bigots. Your "maybe he's against all marriages" argument has been shot down -- don't try it again.

Explain that to the many religious people who used their religion to justify racism and misogony, as they now use their religion to justify homophobia. You can cherry pick and whitewash your religion however you choose, but that doesn't change the fact that it's a powerful weapon for racists and misogynists and bigots, and they use it against people they hate.

Of course maybe I'm misinterpreting you. If by "it is not the truth," you mean the religions that people use to justify their hate are not the truth, then I agree with you.

It's his inactions that have also caused problems. Refusing to change his beliefs. Refusing to justify his unchanged beliefs. Refusing to explain why he did what he did and what outcomes he intended. Refusing to respond to anyone's valid criticisms and questions. Refusing to apologize, but instead issuing a cynical, verbally acrobatic non-apology apology, that backflips and dances around the burning issues. Refusing to step down after he's caused damage to the Mozilla project.

Please stop being an apologist for bigots. Racists and homophobes and misogynists and nazis are all cut from the same cloth, and they all support each other, so attacking the root cause of their hate is fighting them all. And asking people to stop being "unfair" to them is asking people to treat them all fairly, which they don't deserve, because they acted unfairly first.

The Paradox of Tolerance is a resolved philosophical debate, so the idea that it's ironic or wrong to be intolerant of intolerance is an unoriginal and misguided idea. Philosopher Karl Popper asserted, in The Open Society and Its Enemies Vol. 1, that we are warranted in refusing to tolerate intolerance: https://en.wikipedia.org/wiki/Paradox_of_tolerance

I do know Brendan, since the time I interviewed with him at Netscape in the 90's, and I know people who work with him and know him much better than I do, who say he has a lot of insane hateful beliefs that he doesn't like to share with people (except by paying money to other people to fund making TV commercials demonizing gays, destroying existing gay married families, and preventing future ones until the Supreme Court stepped in, of course), and that he refuses to change or justify his unjust beliefs.

Mozilla has tried to recruit me on numerous occasions, and I've turned them down because of Brendan, sending them and Brendan my explanation of why, but I've never heard anything back from Brendan or Mozilla about it. And I'm not the only person who refuses to work with Mozilla because of Brendan, so he's already harmed the Mozilla project as well as the people he hates.

So I DID tell him how his donation has caused harm, both to me and my friends, and the Mozilla project, and he ignored it. Now what do you suggest?

----

There remains an huge elephant in the room, Brendan, which causes your message of inclusivity to fall flat.

"I'm sorry." "I was wrong." These are the words abusers never say; you want our forgiveness without actually promising to stop harming people, or explaining what was going through your head when you DID harm people before.

You're not sorry. You refuse to mention you were wrong, and apologize for the tangible harm you caused. You skirt around the well known fact that you donated money to destroy the existing and potential marriages of gay families. Everyone knows that. It's on the record.

Your verbal gymnastics to avoid addressing that fact overshadowed your message. Why didn't you mention that YOU PERSONALLY are the cause of people mistrusting Mozilla's commitment to equality, and explain WHAT you did and WHY you did it, as you have always refused to do.

If you learned anything, and changed your bigoted beliefs, then you should ADMIT to making a mistake, EXPLAIN why you made it, and APOLOGIZE for the harm you caused.

But no, you're still an abuser, because:

You refuse to admit you were wrong.

You refuse to explain what the fuck you were thinking when you donated money to support Proposition 8.

You refuse to explain why you intended and succeeded in destroying the existing and potential marriages of gay families.

You refuse to explain what you learned from being wrong, so other bigots like yourself can learn from your mistakes, and hopefully change their ways.

Brendan: You are a bigot, and an abuser. Not just because of your beliefs, which you have kept to yourself because they are so unjustifiable that you are ashamed to discuss them, but because of your ACTIONS, which tangibly contributed to the success of Proposition 8, thus destroying the existing gay marriages in California and preventing others. That was your intent, and that was the result of your actions, so you deserve credit for destroying those marriages, and you should be ashamed of yourself.

The Supreme Court finally ruled that Proposition 8 was wrong. Can you finally admit that YOU were wrong?

But I am sure you won't, because as a religious bigot, you think you're better than everyone else, and that you have a right to tell other people how to live their lives.

You've so much as proven that with your latest cowardly statement, a non-apology apology, which dances around the fact that you did what you did, that brought shame to the company that you direct, and blatantly avoids saying you're sorry and that you're wrong.

This is how your non-apology apology sounds:

https://www.youtube.com/watch?v=Ocv5WdBmSok

Fun With Your New Head

Heads are so funny, and there are a thousand laughs in store for you in the new, improved HEAD. Everyone enjoys a talking HEAD, from young to old. Taste, see, smell, and "pain" with a HEAD. Experience every emotion known to the HEAD. And if you already have a HEAD, remember what the HEADS say: "Two HEADS are better than one!"

Everyone enjoys a talking HEAD. Every minute is different from the next minute in incredible thought-chaos of a HEAD. And every single HEAD is different!

HEADS are so funny. Listen to the limbless talking HEAD talk about "Freedom," "Death," "Beauty," and "God-Father." Make the HEAD fall in "Love" with you. Any HEAD can be made to "Love," if training manual instructions are carefully observed. Watch the worn-out HEAD die, talking, talking, talking till the moment in decays. Indeed, it is not an exaggeration to say HEADS are so funny.

Taste, see, smell, and "pain" with a HEAD. Every HEAD purchaser receives absolutely free a "Life-time" supply of "Food." Put "Food" in the HEAD's Mouth, then insert consensual Apparat into Left Collarbone. You will taste every molecule of the Mouth's "Food." Only those who have "eaten" with a Mouth can understand the incredible sensations of "Food."

Left Collarbone is likewise Input/Output source for Right Eye and Left Eye. See the strange little world of the Right Eye, looking at you! See through the Left Eye too! Then see through both the Right Eye and th eLeft Eye together. Every Exo-Export HEAD has two eyes. Don't accept less!

Left Collarbone is likewise Input/Output source for Nose. Now, with the new, improved HEAD you can experience the disconcerting primeval world of "Sex," as the center of the new HEAD's sex-tropic response is removed from obsolete and unsightly sacral area and redirected to the graceful Nose. Just one more reason why two HEADS are better than one!

Left Collarbone is likewise Input/Output source for "pain"-sensitive Chin. Throughout the galaxies there are creatures, often the most insignificant, that can experience the famous "Negative Pleasure," and now with a HEAD you can too! The new, improved HEAD is thirty percent more sensitive to "pain," thanks to refinements in the Chin.

Left Collarbone is likewise Input/Output source and control center for Adam's Apple. Nothing is easier than to take over your HEAD's talking- function. Amuse your friends by talking through your own HEAD! What could be funnier than to talk to another HEAD that thinks you are just a HEAD too?

Everyone enjoys a talking HEAD, from young to old. Even more fun than talking-function of the HEAD is thought-function. Insert compassional Apparat into Right Collarbone, and experience every emotion known to the HEAD. You will feel the HEAD's amazing "Love." You will be paralyzed with the HEAD's consuming "Fear" of pain and of its own inescapable death. You will hate your own self -- perhaps the most exciting sensation of all.

HEADS are educational. Everyone should have his own HEAD to grow up with. HEADS provide an easy and stimulating introduction to basic concepts of xeno-language and xeno-culture. Each HEAD is given a thorough grounding in the astonishing cultural traditions of its autochthonous planet. A third of a lifetime is devoted to the education of every Exo-Export HEAD.

HEADS are perfectly safe for the young. The sharp, skeletal teeth are extracted from each HEAD's Mouth at the time of assembly and refitted with harmless, hydraulic pseudo-teeth.

Many designers consider HEADS to be an attractive addition to the decor of one's environment, especially in arrangements with contrasting xeno-flora and xeno-fauna. For the fashion-conscious HEADS are available now in a range of natural tincts from brown through pink. When treated with new, special-formula Fungi-X, HEADS can also be cultivated in more agreeable colors, though fungifying processes will abbreviate markedly the lifetime of the HEADS so treated.

Everyone should have his own HEAD, and now everyone can! Thanks to the diminished Chest volume of the new, improved HEAD, the result of recent advances in biominiaturization, HEADS are cheaper than every before. They eat less and take up less space too! So why don't you buy your new HEAD today?

Any HEAD you buy from Exo-Export is guaranteed to be the native handicraft of its autochthonous planet, where bioengineering has long been practiced by the wild-four-limbed progrnitors and manufacturers of the HEADS.

There are a thousand laughs in store for you in the new, improved HEAD. Why don't you buy your new HEAD today? Why don't you buy your new HEAD today? Why don't you buy your new HEAD today?

Only 49.95 from Exo-Export Monopolies.

Copyright 1968 by Thomas M. Disch An earlier version of this story, entitled "Cephalotron," originally appeared in Playboy Magazine, copyright 1966 by HMH Publishing Co., Inc.

https://www.youtube.com/watch?v=ZqefPy3q3Do