<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Instadeq Blog (Posts about NoCodeHistory)</title><link>https://instadeq.com/</link><description></description><atom:link href="https://instadeq.com/blog/categories/cat_nocodehistory.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2023 &lt;a href="mailto:mariano@instadeq.com"&gt;Instadeq Team&lt;/a&gt; </copyright><lastBuildDate>Wed, 27 Sep 2023 07:58:13 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>No-code History: Lotus Improv - Spreadsheets Done Right (1991)</title><link>https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/</link><dc:creator>Instadeq Team</dc:creator><description>&lt;div&gt;&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-lotus-improv/improv-1.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-lotus-improv/improv-1.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Below are all slightly edited quotes from the material listed in the &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#res"&gt;Resources&lt;/a&gt;
section, emphasis mine. My notes prefixed with 💭&lt;/p&gt;
&lt;nav class="contents" id="contents" role="doc-toc"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#introduction" id="toc-entry-1"&gt;Introduction&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#history" id="toc-entry-2"&gt;History&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#how-it-works" id="toc-entry-3"&gt;How it Works&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#programmability" id="toc-entry-4"&gt;Programmability&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#why-it-failed" id="toc-entry-5"&gt;Why It Failed&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#resources-1" id="toc-entry-6"&gt;Resources&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#books" id="toc-entry-7"&gt;Books&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#media" id="toc-entry-8"&gt;Media&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#see-also" id="toc-entry-9"&gt;See Also&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="introduction"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#toc-entry-1" role="doc-backlink"&gt;Introduction&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;One of the hardest things to do with a computerized spreadsheet like Lotus'
1-2-3 is to lay out the initial modeler.&lt;/p&gt;
&lt;p&gt;What should go in the rows? What should go in the columns?&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-lotus-improv/improv-step-1.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-lotus-improv/improv-step-1.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Fundamentally, even the most basic spreadsheet program will let the user put a
number or a formula in any cell desired. It's a lot of power --- a lot more
than you need for most applications.&lt;/p&gt;
&lt;p&gt;Enter Pito Salas, a bright developer in the Advanced Technology Group. Pito's
project was to look at a variety of complicated models that had been built with
conventional spreadsheets and see what they had in common.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-lotus-improv/improv-step-2.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-lotus-improv/improv-step-2.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Pito looked at financial statements, revenue forecasts, and future tax
estimates, to name a few. He discovered that most spreadsheets have many
patterns in them. If a spreadsheet program could be taught to understand those
patterns, he realized, he could make it easier to build and use complicated
models.&lt;/p&gt;
&lt;p&gt;Within a few months, Pito had come up with the fundamental idea at the core of
Improv: that the raw data in a spreadsheet, the way that the user views the
data, and the formulas used to perform calculations can all be separated from
each other.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-lotus-improv/improv-step-3.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-lotus-improv/improv-step-3.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;The formulas should be general, so that the user can type something like
&lt;cite&gt;PROFIT = PRICE - COST&lt;/cite&gt; and have the spreadsheet calculate every &lt;cite&gt;PROFIT&lt;/cite&gt; cell
from its corresponding &lt;cite&gt;PRICE&lt;/cite&gt; and &lt;cite&gt;COST&lt;/cite&gt; cells.&lt;/p&gt;
&lt;p&gt;The user should be able to rearrange the views to highlight the information and
relations that she is trying to convey. And the data itself should be put into
a multi-dimensional database. A slick interface should sit on top to make it
easy to get information in and out.&lt;/p&gt;
&lt;p&gt;The result was Improv, &lt;strong&gt;a multi-dimensional spreadsheet product with natural
language formulas and dynamic views&lt;/strong&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="history"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#toc-entry-2" role="doc-backlink"&gt;History&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://books.google.de/books?id=kAWt82Cg2RQC&amp;amp;pg=PA28&amp;amp;lpg=PA28&amp;amp;dq=%22lotus+improv%22&amp;amp;source=bl&amp;amp;ots=YZUleEz6Q4&amp;amp;sig=ACfU3U2NJONR-02sqf6EM-BlzR2jTUAJYQ&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwi9keCSlIL3AhUhSfEDHYhSCjU4bhDoAXoECBEQAw#v=onepage&amp;amp;q=%22lotus%20improv%22&amp;amp;f=false"&gt;In 1986&lt;/a&gt;, &lt;a class="reference external" href="https://salas.com/"&gt;Pito Salas&lt;/a&gt; joined the Advanced Technology Group at Lotus to think
about a totally new kind of spreadsheet.&lt;/p&gt;
&lt;p&gt;The decision was made in September 1988 to go ahead with the "Back Bay"
project.&lt;/p&gt;
&lt;p&gt;After experimenting with interfaces and a database engine under DOS and the
Macintosh operating system, the group decided that the product would be based
on OS/2 and Microsoft's Presentation Manager. They even picked a mascot ---
Fluffy Bunny --- and started up an underground newsletter, "Fluffy Bunny Goes
to Back Bay".&lt;/p&gt;
&lt;p&gt;In October 1988, Steve Jobs came to Lotus to show off his new computer. After
the talk, Lotus' top management did a private show-and-tell for Steve of their
most interesting products that were under development.&lt;/p&gt;
&lt;p&gt;Pito showed Steve a clunky, character-based, primitive spreadsheet, but all of
the elements of the future were there: there were formulas at the bottom of the
spreadsheet, rather than integrated in the cells; it was multi-dimensional; and
the user could instantly call up different views of the same data set.&lt;/p&gt;
&lt;p&gt;Immediately, Jobs wanted Back Bay for the NeXT.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-lotus-improv/lotus-improv-ad.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-lotus-improv/lotus-improv-ad.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Another reason that Lotus decided to go with NeXT, says Jeff Anderholm, was
that the NeXT didn't run 1-2-3, Lotus' cash cow. "We didn't have to worry about
any [marketing] conflict with 1-2-3".&lt;/p&gt;
&lt;p&gt;By January 1989, Improv didn't have category tiles. Instead, all of the view
rearrangement was done with menu commands.&lt;/p&gt;
&lt;p&gt;Then the group hit upon the idea to use icons. "We realized that if we
represented these things as icons, all these manipulations could be represented
by moving icons from one place to another".&lt;/p&gt;
&lt;p&gt;But where should the icons for the categories go? After trying a lot of
different ideas, the developers decided to create a special icon window.&lt;/p&gt;
&lt;p&gt;"And then Steve Jobs came", says Paul, remembering Job's visit in April 1989.&lt;/p&gt;
&lt;p&gt;Jobs then said that the category manipulation had to be more direct. "You have
to be able to touch the categories and move them around. Having them off in a
separate window is too removed", Paul remembers.&lt;/p&gt;
&lt;p&gt;"He didn't even want to have the tiles; he wanted to just move them around.
He's really a fanatic for direct manipulation, and it really shows".&lt;/p&gt;
&lt;div class="youtube-video"&gt;
&lt;iframe width="720" height="540" src="https://www.youtube-nocookie.com/embed/rgGmKD87U3M?rel=0&amp;amp;wmode=transparent" frameborder="0" allow="encrypted-media" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;p&gt;Jobs didn't have an answer, says Paul, but "one of the benefits of that
[meeting] was we junked the idea of the extra panel", and put the category
tiles on the worksheet itself.&lt;/p&gt;
&lt;p&gt;The product was released for the NeXT brand computers in 1989 as Improv.&lt;/p&gt;
&lt;p&gt;Lotus chose not to include this functionality in their flagship Lotus 1-2-3
product. Instead, Lotus Improv for Windows came out in 1991.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="how-it-works"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#toc-entry-3" role="doc-backlink"&gt;How it Works&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Column letters, row numbers, and cell formulas, the main source of frustration
for spreadsheet users, are all gone.&lt;/p&gt;
&lt;p&gt;In their place are rows and columns labeled in plain English, and an
independent list of formulas that use those labels, making Improv, in essence,
a relational spreadsheet.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-lotus-improv/improv-formula.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-lotus-improv/improv-formula.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;For example, suppose you have rows labeled&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;UNITS BOUGHT&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;UNITS SOLD&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;WHOLESALE PRICE&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;RETAIL PRICE&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;EXPENSES&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;GROSS SALES&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;NET PROFITS&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the formula panel, you would enter the following formulas:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;EXPENSES = UNITS BOUGHT * WHOLESALE PRICE&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;RETAIL PRICE = 1.4 * WHOLESALE PRICE&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;GROSS SALES = UNITS SOLD * RETAIL PRICE&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;NET PROFIT = GROSS SALES - EXPENSES&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-lotus-improv/lotus-improv-worksheet-1.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-lotus-improv/lotus-improv-worksheet-1.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Now, no matter how those rows grow or shrink in size, and no matter where they
appear in your spreadsheet, the appropriate calculations always take place.&lt;/p&gt;
&lt;p&gt;Other innovative features abound. You can easily rearrange a spreadsheet by
moving around small tokens that represent row or column categories.&lt;/p&gt;
&lt;p&gt;You may open multiple windows to a spreadsheet, allowing you to view (and
change) data in several different ways simultaneously.&lt;/p&gt;
&lt;p&gt;Rather than use letters and numbers to describe data, it lets you use real
words, like "Tons" and "Dollar Value." Or anything you are comfortable with.&lt;/p&gt;
&lt;p&gt;The benefit of this is that now your formulas read like English.
Instead of seeing something like &lt;cite&gt;=BD2*BD3&lt;/cite&gt;, you see &lt;cite&gt;Dollar Value = Tons * 5.75&lt;/cite&gt;&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-lotus-improv/improv-categories.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-lotus-improv/improv-categories.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;And Improv lists all your formulas in one place, as opposed to hiding them in
individual cells.&lt;/p&gt;
&lt;p&gt;So when you revisit a complicated spreadsheet months later, it's sure to make
sense. Likewise if you're looking at a spreadsheet that's been designed by
someone else.&lt;/p&gt;
&lt;p&gt;All you do is use the mouse to click one of the category "tiles" located along the edges
of the spreadsheet - such as "Region" or "Material"- and drag it to a new location.&lt;/p&gt;
&lt;p&gt;Improv allows you to move your column and row headings from one part of the
spreadsheet to another, even interchange them - and without the slightest
hesitation, the spreadsheet will automatically rearrange itself.&lt;/p&gt;
&lt;div class="youtube-video"&gt;
&lt;iframe width="720" height="540" src="https://www.youtube-nocookie.com/embed/lTko_Pt2ZZg?rel=0&amp;amp;wmode=transparent" frameborder="0" allow="encrypted-media" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;p&gt;💭 For more usage examples check:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="http://simson.net/ref/NeXT/nextworld/NeXTWORLD_1991.pdf"&gt;Page 268 of NeXT World Magazine for a tutorial on how to build a budget on Improv&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://web.archive.org/web/20081207095305/infocom.cqu.edu.au/Staff/Michael_O_malley/web/mooses_review_page_lotus_improv.html"&gt;This review for a description and screenshots of some of its features&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://www.youtube.com/watch?v=lTko_Pt2ZZg"&gt;Lotus Improv - Live Demonstration and Discussion - The Greatest Software of ALL Time&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;a class="reference external" href="https://winworldpc.com/product/lotus-improv/2x"&gt;"Start Here" Manual&lt;/a&gt; for a good overview with screenshots&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="programmability"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#toc-entry-4" role="doc-backlink"&gt;Programmability&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Improv comes with LotusScript, which lets you build custom applications and
front ends for any Lotus application.&lt;/p&gt;
&lt;p&gt;If you have a basic programming experience, LotusScript makes understanding the
process of creating custom applications relatively simple.&lt;/p&gt;
&lt;p&gt;You can attach a script to a model or save it independently and use it with
other models.&lt;/p&gt;
&lt;p&gt;LotusScript and Lotus Dialog Editor give Improv all the tools necessary to
create a custom front end or complete custom application.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="why-it-failed"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#toc-entry-5" role="doc-backlink"&gt;Why It Failed&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lotus marketed Improv more as "spreadsheets done right" (referring to the
separation of data and formulas, and the more rigid structure of an Improv
model) rather than it's OLAP capabilities, which unfortunately had the effect
of confusing those customers who now had to choose between 1-2-3 and Improv,
and instead chose Microsoft Excel instead.&lt;/p&gt;
&lt;p&gt;From an architecture viewpoint, Improv was also limited by the fact that its
cubes ran in memory rather than being paged to disk, so it was always limited
in what it could hold, especially with the typical amount of memory a PC had
then.&lt;/p&gt;
&lt;p&gt;💭 A comment from Jeff Anderholm in 1991 that points to the need to train users&lt;/p&gt;
&lt;p&gt;We have to figure out what we can add to the product to help people learn it,
because you have to unlearn what you know about conventional spreadsheets like
Excel and 1-2-3. Our challenge is to convince people that the benefits of this
new spreadsheet are worth the cost of switching.&lt;/p&gt;
&lt;p&gt;💭 First person here is Salas&lt;/p&gt;
&lt;p&gt;It’s hard to argue that one of the keys is the maleability of the spreadsheet
as a medium. The fact that a spreadsheet can grow organically, be modified and
grown in a kind of an Improvisational manner. But when spreadsheets get
complicated they get messy and error-prone and this is what Improv set out to
address.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In the end it didn’t go anywhere, probably because in setting out to improve on
spreadsheets, Improv lost the essence of a spreadsheet and in doing so lost the
market&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Innovators Dilemma.&lt;/p&gt;
&lt;p&gt;I am not sure it applies, but one could argue a parallel here with Improv. In
particular this would lead you to the conclusion that &lt;strong&gt;the key strategy mistake
was to try to market Improv to the existing spreadsheet market. Instead, if the
product were marketed to a segment where the more structured model was a
‘feature’ not a ‘bug’ would have given Lotus the time to learn and improve and
refine the model to a point where it would have satisfied the larger market as
well&lt;/strong&gt;.&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Lotus was positioning Improv as a spreadsheet replacement, rather than a
specialized tool to better perform an important subset of tasks currently
performed with a spreadsheet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lotus was in the throes of a heroic battle for survival against Microsoft’s
Excel – causing undue pressure on the company to make its product portfolio
clean and understandable, and to organize all resources behind the flagship
product. Introducing new technology costs in a scenario such as that.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-lotus-improv/improv_box_back_medium.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-lotus-improv/improv_box_back_medium.jpg"&gt;
&lt;figcaption&gt;
&lt;p&gt;&lt;a class="reference external" href="https://books.google.de/books?id=PTwEAAAAMBAJ&amp;amp;pg=PA15&amp;amp;lpg=PA15"&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/section&gt;
&lt;section id="resources-1"&gt;
&lt;span id="res"&gt;&lt;/span&gt;&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#toc-entry-6" role="doc-backlink"&gt;Resources&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;🌎 &lt;a class="reference external" href="https://salas.com/"&gt;Salas' Homepage&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://salas.com/2004/11/29/20041129why-improv-didnt-succeed-html/"&gt;Why Improv didn’t succeed&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://salas.com/2004/12/02/2004122why-improv-didnt-succeed-part-deux-html/"&gt;Why Improv didn’t succeed, Part Deux&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📰 &lt;a class="reference external" href="https://books.google.de/books?id=KmFF_zr-HVgC&amp;amp;pg=PA56&amp;amp;lpg=PA56&amp;amp;dq=pcmag+Pito+Salas+improv+pivot+table&amp;amp;source=bl&amp;amp;ots=jJywY-9jH6&amp;amp;sig=ACfU3U2N8UPROIHLI-IbH2B77MLy10FD-g&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwj4xIuRlo73AhVrRPEDHc_BBTcQ6AF6BAgbEAM#v=onepage&amp;amp;q=pcmag%20Pito%20Salas%20improv%20pivot%20table&amp;amp;f=false"&gt;PC Magazine: Innovators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://simson.net/clips/1991/1991.NW.Improv.html"&gt;Improv: The Inside History&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📰 &lt;a class="reference external" href="http://simson.net/ref/NeXT/nextworld/NeXTWORLD_1991.pdf"&gt;NeXT World Magazine 1991. Pages 20, 51&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📰 &lt;a class="reference external" href="https://books.google.de/books?id=_DoEAAAAMBAJ&amp;amp;lpg=PA71&amp;amp;ots=RiMvGt_0Hh&amp;amp;pg=PA70#v=onepage&amp;amp;q&amp;amp;f=false"&gt;Improv for Windows 2.0&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📰 &lt;a class="reference external" href="https://books.google.de/books?id=SDsEAAAAMBAJ&amp;amp;lpg=PA13&amp;amp;ots=UKd02-tY6L&amp;amp;pg=PA13#v=onepage&amp;amp;q&amp;amp;f=false"&gt;Lotus won't shrink from macro battle&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://web.archive.org/web/20081207095305/infocom.cqu.edu.au/Staff/Michael_O_malley/web/mooses_review_page_lotus_improv.html"&gt;Moose's Greatest Products of All Time: Lotus Improv&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🥼 &lt;a class="reference external" href="http://www.zisman.ca/Articles/1993/Improv.html"&gt;Lotus Improv Review (1993)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;section id="books"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#toc-entry-7" role="doc-backlink"&gt;Books&lt;/a&gt;&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📚 &lt;a class="reference external" href="https://winworldpc.com/product/lotus-improv/2x"&gt;Lotus Improv Manuals&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📗 &lt;a class="reference external" href="https://books.google.de/books?id=kAWt82Cg2RQC&amp;amp;pg=PA28&amp;amp;lpg=PA28&amp;amp;dq=%22lotus+improv%22&amp;amp;source=bl&amp;amp;ots=YZUleEz6Q4&amp;amp;sig=ACfU3U2NJONR-02sqf6EM-BlzR2jTUAJYQ&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwi9keCSlIL3AhUhSfEDHYhSCjU4bhDoAXoECBEQAw#v=onepage&amp;amp;q=%22lotus%20improv%22&amp;amp;f=false"&gt;The Spreadsheet at 25: 25 Amazing Excel Examples that Evolved from the Invention that Changed the World&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📗 &lt;a class="reference external" href="https://books.google.de/books/about/The_Power_of_Improv_for_Windows.html?id=UpjWAAAAMAAJ"&gt;The Power of Improv for Windows&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📗 &lt;a class="reference external" href="https://www.amazon.com/Using-Lotus-Improv-2-1-Windows/dp/1565293010"&gt;Using Lotus Improv 2.1 for Windows&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📗 &lt;a class="reference external" href="https://www.amazon.com/Instant-Improv-Models-Scripts-Business/dp/B000OFBGZE"&gt;Instant Improv 2.1 Models, Scripts, And Business Tips&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="media"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#toc-entry-8" role="doc-backlink"&gt;Media&lt;/a&gt;&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=TbsfvdZXE7s"&gt;Lotus Improv Demo on NeXTSTEP (Year 1990)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="http://www.cornica.org/lotus-improv/"&gt;Lotus Improv Video 1&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="http://www.kevra.org/TheBestOfNext/ThirdPartyProducts/ThirdPartySoftware/PersonalProductivity/SpreadSheet-Database/LotusImprovVideo/LotusImprovVideo.html"&gt;Lotus Improv Video 2&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://www.youtube.com/watch?v=rgGmKD87U3M"&gt;Youtube Version 1&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://www.youtube.com/watch?v=dsYsZmhnXR4"&gt;Youtube Version 2&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://vimeo.com/358732181"&gt;Lotus Improv Tour Intro&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://vimeo.com/358732226"&gt;Lotus Improv Tour&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=lTko_Pt2ZZg"&gt;Lotus Improv - Live Demonstration and Discussion - The Greatest Software of ALL Time&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=sQqg_bud-c8"&gt;Lotus Improv Guided Tour - included with Improv in 1993&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=RleSDJQvSkg"&gt;Pivot Table First Shown in October 1989 - Lotus Improv (codenamed BackBay)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎙 &lt;a class="reference external" href="https://soundcloud.com/user-626311220/steve-jobs-demos-lotus-improv-1990"&gt;Audio of Steve Jobs showing Lotus Improv&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="see-also"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/#toc-entry-9" role="doc-backlink"&gt;See Also&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/"&gt;1959 The Geometry Theorem Machine&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/"&gt;1963 Sketchpad: A man-machine graphical communication system&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/"&gt;1969 GRAIL: GRAphical Input Language&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/"&gt;1975 Pygmalion: An Executable Electronic Blackboard&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/"&gt;1987 Peridot: UIs by Example, Visual Programming &amp;amp; Constraints&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/"&gt;1991 Frox: A Scriptable SmartTV with a Magic Wand&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;&lt;/div&gt;</description><category>history</category><category>nocode</category><guid>https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/</guid><pubDate>Wed, 13 Apr 2022 10:40:23 GMT</pubDate></item><item><title>No-code History: Peridot - UIs by Example, Visual Programming &amp; Constraints (1987)</title><link>https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/</link><dc:creator>Instadeq Team</dc:creator><description>&lt;div&gt;&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Below are all slightly edited quotes from the material listed in the &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#res"&gt;Resources&lt;/a&gt;
section, emphasis mine.&lt;/p&gt;
&lt;nav class="contents" id="contents" role="doc-toc"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#introduction" id="toc-entry-1"&gt;Introduction&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#example-of-peridot-in-action" id="toc-entry-2"&gt;Example of Peridot in Action&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#how-examples-are-used" id="toc-entry-3"&gt;How Examples are Used&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#how-inferencing-is-used" id="toc-entry-4"&gt;How Inferencing is Used&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#inferring-graphic-constraints" id="toc-entry-5"&gt;Inferring Graphic Constraints&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#inferring-control-structures" id="toc-entry-6"&gt;Inferring Control Structures&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#differentiating-variables-from-constants" id="toc-entry-7"&gt;Differentiating Variables from Constants&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#inferring-mouse-operations" id="toc-entry-8"&gt;Inferring Mouse Operations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#the-language" id="toc-entry-9"&gt;The Language&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#straight-line-code" id="toc-entry-10"&gt;Straight-Line Code&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#iterations" id="toc-entry-11"&gt;Iterations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#conditionals" id="toc-entry-12"&gt;Conditionals&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#parameters-and-return-values" id="toc-entry-13"&gt;Parameters and Return Values&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#visual-programming-aspects" id="toc-entry-14"&gt;Visual Programming Aspects&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#editing-programs" id="toc-entry-15"&gt;Editing Programs&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#evaluation" id="toc-entry-16"&gt;Evaluation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#graphic-constraints" id="toc-entry-17"&gt;Graphic Constraints&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#data-constraints" id="toc-entry-18"&gt;Data Constraints&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#trivia" id="toc-entry-19"&gt;Trivia&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#resources-1" id="toc-entry-20"&gt;Resources&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#see-also" id="toc-entry-21"&gt;See Also&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="introduction"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-1" role="doc-backlink"&gt;Introduction&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Peridot is an experimental tool that &lt;strong&gt;allows designers to create user interface
components without conventional programming&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The designer draws pictures of what the interface should look like and then
uses the mouse and other input devices to demonstrate how the interface should
operate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Peridot uses visual programming, programming by example, constraints, and
plausible inferencing to allow nonprogrammers to create menus, buttons, scroll
bars, and many other interaction techniques easily and quickly&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Peridot created its own interface and can create almost all of the interaction
techniques in the Macintosh Toolbox.&lt;/p&gt;
&lt;p&gt;Peridot demonstrates that it is possible to provide sophisticated programming
capabilities to nonprogrammers in an easy-to-use manner and still have
sufficient power to generate interesting and useful programs.&lt;/p&gt;
&lt;p&gt;In order to allow interaction technique procedures to be created in a direct
manipulation manner, Peridot has the designer provide example values for each
parameter.&lt;/p&gt;
&lt;div class="youtube-video"&gt;
&lt;iframe width="720" height="540" src="https://www.youtube-nocookie.com/embed/FsGx7G72V0Q?rel=0&amp;amp;wmode=transparent" frameborder="0" allow="encrypted-media" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;p&gt;For instance, when creating a menu, the designer provides an example list of
strings to be displayed in the menu.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using a technique called programming by example, Peridot generalizes from the
given examples to create a general-purpose procedure&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;An important component of Peridot is the use of constraints, which are
relationships among objects and data that must hold even when the objects are
manipulated.&lt;/p&gt;
&lt;p&gt;Peridot uses two kinds of constraints. Graphic constraints relate one graphic
object to another, and data constraints ensure that a graphic object has a
particular relationship to a data value.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The motivation for this style is that people make fewer errors when dealing
with specific examples rather than abstract ideas. The programmer does not need
to try to keep in mind the large and complex state of the system at each point
of the computation if it is displayed on the screen&lt;/strong&gt;. In addition, errors are
usually visible immediately.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="example-of-peridot-in-action"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-2" role="doc-backlink"&gt;Example of Peridot in Action&lt;/a&gt;&lt;/h2&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot-2-b.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot-2-b.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;The designer has created a gray rectangle to represent a “drop shadow” for a
button.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot-2-c.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot-2-c.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;The designer has drawn a black rectangle to represent the background of the
button, and Peridot has noticed that this rectangle seems to be the same size
as the gray rectangle, offset by a constant nine pixels.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot-2-d.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot-2-d.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;In the prompt area, it is asking the designer to confirm this constraint. The
designer types y for “yes,” and Peridot immediately adjusts the black rectangle
to be exactly the same size as the gray one.&lt;/p&gt;
&lt;p&gt;If the gray rectangle’s size were now changed, the black rectangle’s size would
change also, since a graphic constraint has been established that keeps both
rectangles the same size.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot-2-e.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot-2-e.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Next, the designer draws a white rectangle inside the black one, and Peridot
correctly infers that this rectangle should be evenly nested inside the black
one.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot-2-f.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot-2-f.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;The designer has selected the first element of the parameter “Items,” which is
the string “Bold,” and has used that as the string to display.&lt;/p&gt;
&lt;p&gt;Peridot infers that it is centered to the right of the white rectangle. The
code that is produced for this string refers to the first element of the first
parameter, whatever that is, rather than to the constant string “Bold,” so that
any value used for the parameter will be displayed.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot-2-g.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot-2-g.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Next, the designer selects all the objects created so far and specifies that
they should be copied to a new position.&lt;/p&gt;
&lt;p&gt;Peridot asks if it should look for constraints from the new copy to the old
one, but this is not necessary since it is going to be part of an iteration.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot-2-h.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot-2-h.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Next, the designer edits the second string to refer to the second element of
the parameter.&lt;/p&gt;
&lt;p&gt;At this point, Peridot notices that the designer has used the first two
elements of a list in the interface, and asks whether the rest of the elements
of the list should be displayed in the same way, as part of an iteration over
all the elements of the list.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot-2-i.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot-2-i.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;The designer confirms this, and the rest are immediately shown.&lt;/p&gt;
&lt;p&gt;In order to perform this conversion, Peridot has to determine which graphic
objects should participate in the loop and how they should change in each
cycle. Now the presentation aspects of the property sheet are finished.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot-2-j.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot-2-j.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Next, the designer places the iconic picture of a check mark centered inside
one of the boxes. This is used to show which items are selected.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot-2-k.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot-2-k.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;In order to demonstrate that this should be selectable by the mouse, the
“simulated mouse” icon is used.&lt;/p&gt;
&lt;p&gt;The real mouse cannot be used, since it is used for giving Peridot commands.
The nose of the simulated mouse is placed over the check mark with the middle
button down, and the MOUSEDependent command is given. Since there is only one
active value (Selected-Props), Peridot guesses that the check mark should
depend on this active value.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-peridot/peridot-2-l.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-peridot/peridot-2-l.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Since the example value of that active value is a list, Peridot guesses that
multiple items are allowed and that a check mark should appear for each one in
the list. The designer is asked to confirm these guesses in the prompt window.&lt;/p&gt;
&lt;p&gt;Peridot then shows the check marks displayed in the boxes next to Italic and
Underline, since these are the current value of Selected-Props.  Finally, the
designer is asked whether pressing the middle button should toggle, set, or
clear the selected object, and the designer types t for toggle.&lt;/p&gt;
&lt;p&gt;The user interface is now complete, and either it can be tested with the
simulated mouse, or else Peridot can be put into “Run Mode” and the real mouse
can be used.&lt;/p&gt;
&lt;p&gt;The PropSheet procedure that has been created can now be used outside of
Peridot as part of application programs. It is parameterized as to the list of
items that are displayed, so it can be called with an entirely different list
of strings, even if that list has a different number of elements.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="how-examples-are-used"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-3" role="doc-backlink"&gt;How Examples are Used&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Many PBE systems require the user to provide multiple examples in order to
generate code. In some cases, Peridot infers code from single examples. This is
possible because the designer is required to explicitly give a command to cause
Peridot to perform the inferencing.&lt;/p&gt;
&lt;p&gt;For example, the designer issues the MOUSEDependent command to tell Peridot to
look at the mouse position and to infer the generalization for the operation.&lt;/p&gt;
&lt;p&gt;For iterations, however, the designer is required to give two examples, and
Peridot can therefore usually infer the need for an iteration without an
explicit command from the user.&lt;/p&gt;
&lt;p&gt;Peridot also allows the designer to demonstrate conditionals that
display special graphics and that serve as exceptions to the normal way the
mouse dependencies work.&lt;/p&gt;
&lt;p&gt;For example, some items of the menu might be shown in gray if they are illegal,
and horizontal lines might replace certain items.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="how-inferencing-is-used"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-4" role="doc-backlink"&gt;How Inferencing is Used&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In order to make Peridot easier to use, it automatically guesses certain
relationships. This frees the designer from having to know when and how to
specify these relationships.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Peridot uses simple condition-action rules to implement these guesses&lt;/strong&gt;. This
approach is called plausible inferencing or abduction in the artificial
intelligence literature. The condition part of the rules determines whether the
rule seems to apply in the current context.&lt;/p&gt;
&lt;p&gt;If the condition passes, then the designer is asked whether to apply the rule
or not using an English message attached to the rule. If the designer answers
“yes,” then the action part of the rule is applied, which changes the code of
the procedure in order to add a graphic constraint.&lt;/p&gt;
&lt;p&gt;The rules in Peridot are simple-much simpler than those used in typical
artificial intelligence systems. Furthermore, there are only about 60 rules
used in Peridot. The goal was to see if simple mechanisms would be sufficient,
which seems to be true.&lt;/p&gt;
&lt;p&gt;Peridot uses rule-based inferencing in four ways:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;To infer the graphic con straints that relate one object to another&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To infer when control structures are appropriate&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To infer how to create the control structures&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To infer how the mouse should affect the user interface&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;section id="inferring-graphic-constraints"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-5" role="doc-backlink"&gt;Inferring Graphic Constraints&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Peridot infers how the various graphic objects are related to each other.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One reason that Peridot is more successful is that it guesses correctly more
frequently, since it only needs to deal with the relationships that are typical
in user interfaces&lt;/strong&gt;, rather than all possible relationships that might be used
in a general drawing.&lt;/p&gt;
&lt;p&gt;If the designer wants other relationships, they can be explicitly specified, or
if they occur frequently, a programmer can easily add them to the rule set.&lt;/p&gt;
&lt;p&gt;Another reason for Peridot’s success is that &lt;strong&gt;it assumes that guesses will
occasionally be incorrect. Therefore, it always reports to the designer the
rule that it is planning to apply and allows the designer to confirm or prevent
its application&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This gives the designer confidence that the system is not mysteriously doing
strange and possibly erroneous things.&lt;/p&gt;
&lt;p&gt;In addition, &lt;strong&gt;the results of the inferences are always immediately visible&lt;/strong&gt; (the
objects redraw themselves after every rule is applied), so the designer can
view the results and see whether they were correct or not.&lt;/p&gt;
&lt;p&gt;Another benefit of inferring graphic constraints is that &lt;strong&gt;they allow the
designer to draw the picture quickly and sloppily, and then Peridot
automatically “beautifies” the picture by enforcing the constraints&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The rules that Peridot applies are specific to the types of objects drawn. For
example, it is more likely for a string to be centered at the top of a
rectangle than it is for another rectangle to be.&lt;/p&gt;
&lt;p&gt;Some of the rules specify all of the properties of an object. Examples of these
are that a rectangle is the same size as another rectangle, that it is nested
inside the other rectangle, or that a string is centered vertically to the
right of a rectangle.&lt;/p&gt;
&lt;p&gt;Other rules only constrain some of the properties of an object. For example,
one rule might cause the width and left of a rectangle to be constrained by
another rectangle, and another rule may constrain the top and height by a
string.&lt;/p&gt;
&lt;p&gt;In general, there are constraints for most of the simple relationships found in
typical user interfaces.&lt;/p&gt;
&lt;p&gt;There are currently 50 rules, and these are all listed in. Of these, 16 were
added based on user testing.&lt;/p&gt;
&lt;p&gt;Since most of the additional rules were added from the initial users and no new
rules were needed for later users, it is expected that few new rules will be
needed in the future.&lt;/p&gt;
&lt;p&gt;Peridot goes through the rules in order, trying each test. The order is
determined by the types of the objects, by the specificity of the rule (the
rules that constrain all of the properties of the object are checked first),
and by which ones seemed to be the most common.&lt;/p&gt;
&lt;p&gt;If the constraint has parameters, such as how far apart the objects should be,
the designer can answer “almost” and supply a new value for the parameters. If
the designer answers “no”, then other rules are attempted.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="inferring-control-structures"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-6" role="doc-backlink"&gt;Inferring Control Structures&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Peridot automatically infers when control structures such as iterations are
appropriate&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Iterations are inferred whenever the first two elements of a list are used.&lt;/p&gt;
&lt;p&gt;To create a dependency on an active value or a parameter, the designer must
explicitly select an element of these in the upper window and then specify
which property of the object depends on the selection.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conditional control structures are automatically inferred when objects depend
on the mouse&lt;/strong&gt;. In addition, the designer can explicitly specify that either a
conditional or an iteration is desired by executing commands from the menu.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="differentiating-variables-from-constants"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-7" role="doc-backlink"&gt;Differentiating Variables from Constants&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;After the objects that participate in a control structure are identified,
Peridot must determine which properties of the objects are constant and which
change.&lt;/p&gt;
&lt;p&gt;It has been found with previous systems that inferring variables from constants
is difficult, but Peridot’s simple mechanism has been successful. Again, this
is due to the limited domain; graphic objects in user interfaces change
typically in simple ways.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="inferring-mouse-operations"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-8" role="doc-backlink"&gt;Inferring Mouse Operations&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;When the designer gives the MOUSEDependent command, Peridot looks under the
simulated mouse to determine which objects are affected and where the mouse
should be for the operation to be active.&lt;/p&gt;
&lt;p&gt;The designer specifies when the operation should happen by toggling the state
of the buttons on the simulated mouse. The interaction can start after single
or multiple buttons presses (e.g., double-clicking) and either on the down or
up transition of the button.&lt;/p&gt;
&lt;p&gt;Next, Peridot infers which object should be affected by the mouse.&lt;/p&gt;
&lt;p&gt;Then, Peridot infers how the objects should change with the mouse. The
possibilities are 1. to choose one or more out of a set of objects (e.g.,
controlling which objects are selected in the property sheet or menu, 2. to
move in a fixed range, 3. to move or change size freely 4. to blink on and off
in place.&lt;/p&gt;
&lt;p&gt;Peridot guesses which of these is appropriate by looking at the constraints on
the graphic objects that are affected by the mouse.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="the-language"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-9" role="doc-backlink"&gt;The Language&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Because Peridot creates user interface procedures, it operates as a code generator.&lt;/p&gt;
&lt;p&gt;The code generated by Peridot has a number of conventional parts: straightline
code, iterations, conditionals, and parameterized procedures.&lt;/p&gt;
&lt;section id="straight-line-code"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-10" role="doc-backlink"&gt;Straight-Line Code&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As the user is drawing objects, Peridot creates LISP code that will draw them
for application programs. If the user edits an object, the code that generates
it is modified.&lt;/p&gt;
&lt;p&gt;If properties of objects are fixed and unchanging, then their values will be
constants. If the properties are to change at run time based on parameters to
the procedure or end-user input, they are controlled by constraints.&lt;/p&gt;
&lt;p&gt;If the objects themselves appear and disappear at run time, they must be
enclosed in conditionals or iterations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Users are not allowed to edit the text code&lt;/strong&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="iterations"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-11" role="doc-backlink"&gt;Iterations&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Iterations are important because they allow Peridot to support variable-length
lists and they relieve the designer from having to perform tedious, repetitive
actions. Peridot infers iterations when two items from a list have been used.&lt;/p&gt;
&lt;p&gt;There are two forms of iterations in Peridot. The most common form displays a
copy of one or more graphic objects for each item of a list.&lt;/p&gt;
&lt;p&gt;The items in the list can be used to control any property of the graphic
objects in the iteration.&lt;/p&gt;
&lt;p&gt;The other form for iterations is to display a set of objects for a specific
number of times.&lt;/p&gt;
&lt;p&gt;This is mainly useful for displaying a line of identical objects. To get this
form of iteration, the designer creates two copies of the objects to be
repeated, selects them, and then executes the Peridot Iteration command.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="conditionals"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-12" role="doc-backlink"&gt;Conditionals&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Conditionals in Peridot are used to support displayed feedback over one of a
set of objects and to control an object blinking on and off.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conditionals are created in a postfix style; that is, the designer first draws
the graphic objects that are used as feedback when the conditional is true and
then specifies what these objects should depend on&lt;/strong&gt;. This allows the designer to
use the standard drawing and editing commands to create the graphic objects.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="parameters-and-return-values"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-13" role="doc-backlink"&gt;Parameters and Return Values&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;An important property of the code that Peridot generates is that the procedures
are parameterized.&lt;/p&gt;
&lt;p&gt;This provision for parameters is the most significant difference between
Peridot and other graphic user interface tools. Other systems like NeXT’s
Interface Builder only allow the designer to specify a fixed set of values for
the menus and buttons.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="visual-programming-aspects"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-14" role="doc-backlink"&gt;Visual Programming Aspects&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;An advantage in Peridot is that &lt;strong&gt;the system is not trying to address
general-purpose programming&lt;/strong&gt;, as in many other visual-programming languages.
Therefore, &lt;strong&gt;more specialized techniques can be used&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Some parts of the user interface are not fully visible in Peridot&lt;/strong&gt;. For control
structures, the designer only sees the result, and there is no indication
whether the objects were created due to an iteration or a conditional.&lt;/p&gt;
&lt;p&gt;Mouse dependencies are even more abstract and do not appear in the normal
graphic display. The designer must either exercise the interface or give a
command to have the interactors listed in order to know what has been created.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One of the problems of many visual-programming systems is that they cannot
handle large programs due to a lack of modularization. In Peridot this is not
a problem, since parameterized procedures are created that can be combined into
full interfaces&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Each user interface element is defined separately and encapsulated in its own
procedure, so the designer can create interfaces out of small, modular,
well-structured pieces.&lt;/p&gt;
&lt;section id="editing-programs"&gt;
&lt;h4&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-15" role="doc-backlink"&gt;Editing Programs&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;It is harder to edit control structures and mouse interactions, since they do
not have visual representations on the screen that can be selected.&lt;/p&gt;
&lt;p&gt;For editing control structures, the designer can simply select any graphic
object and give an editing command. If that object is part of a control
structure, Peridot will inquire whether a modification to the control structure
itself is desired or whether there should be an exception to the normal way the
control structure works.&lt;/p&gt;
&lt;p&gt;If the designer specifies that the control structure itself should be edited,
then Peridot returns the display to the original objects from which the control
structure was created.&lt;/p&gt;
&lt;p&gt;For an iteration, this is the original two sets of elements, and for a
conditional, it is the original one element.&lt;/p&gt;
&lt;p&gt;Now the designer can use all the normal editing commands to change the picture
as desired. When editing is complete, then the Iteration or Conditional command
is given to reinvoke the control structure.&lt;/p&gt;
&lt;p&gt;This technique is used for three reasons.&lt;/p&gt;
&lt;p&gt;First, it is easier to ensure that the designer’s edits always make sense.
Otherwise, if the designer changed the fourth item of a list, what would this
mean?&lt;/p&gt;
&lt;p&gt;Second, if multiple items are generated by the control structure, the designer
might make intermediate edits (such as deleting an object from one group) that
would cause Peridot to be unable to show the control structure consistently.&lt;/p&gt;
&lt;p&gt;Third, the list controlling the iteration or conditional might have only 1 or 0
items in it when the designer performed the edit, in which case there would not
be two groups of objects for iterations or one for a conditional, so there
would be nothing for the designer to select.&lt;/p&gt;
&lt;p&gt;Returning to the original two groups of objects allows the designer to have
full freedom to edit in any way desired, using all the conventional editing
commands.&lt;/p&gt;
&lt;p&gt;It is even harder to edit mouse interactions because there is nothing to
select. Peridot provides two ways to edit interactions.&lt;/p&gt;
&lt;p&gt;First, an interaction can be redemonstrated, and Peridot will inquire if the
new interaction should replace the old one or run in parallel.&lt;/p&gt;
&lt;p&gt;The second way to edit interactions is to select an active value and give the
DeleteInteractions command. Peridot then prints in the prompt window a de
scription of each interaction that affects that active value, and asks if it
should be deleted.&lt;/p&gt;
&lt;p&gt;Since individual interactions are small this should not be burdensome.&lt;/p&gt;
&lt;p&gt;The added complexity for the designer of learning extra editing commands does
not seem appropriate, given the ease of respecification.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="evaluation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-16" role="doc-backlink"&gt;Evaluation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In order to evaluate how easy Peridot is to use, an informal experiment was run
where 10 people used the system for about 2 hours each.&lt;/p&gt;
&lt;p&gt;Of these people, five were experienced programmers, and five were
nonprogrammers who had some experience using a mouse.&lt;/p&gt;
&lt;p&gt;After about 1; hours of guided use of Peridot, the subjects were able to create
a menu of their own design unassisted. This demonstrates that one basic goal of
Peridot is fulfilled: Nonprogrammers are able to create user interface elements
using Peridot.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="graphic-constraints"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-17" role="doc-backlink"&gt;Graphic Constraints&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;One important reason that Peridot is more complicated than a conventional
drawing package is that it must deal with the parameterization of the
procedures.&lt;/p&gt;
&lt;p&gt;This implies that Peridot must know how various graphic parts of the interface
change with different values for the actual parameters.&lt;/p&gt;
&lt;p&gt;Peridot must know that the size of the shadow and outline rectangles must
change based on the width of the widest string and the sum of the heights of
all the strings.&lt;/p&gt;
&lt;p&gt;It is also possible to specify explicitly the relationships by selecting two
objects and providing an arbitrary arithmetic expression that relates their
properties.&lt;/p&gt;
&lt;p&gt;After a relationship is either inferred or explicitly specified, Peridot
creates a graphic constraint so that the relationship will be maintained if the
picture is edited or if different parameters are used at run time.&lt;/p&gt;
&lt;p&gt;The constraints used in Peridot differ markedly from constraints in previous
systems because they are simple and efficiently implemented. The primary reason
for this is that only one-directional constraints are necessary. The reverse
relationship is saved at design time in case the designer edits the picture.&lt;/p&gt;
&lt;p&gt;For example, when creating a button, the first step is to create the black and
then the gray rectangles. At this point, the gray rectangle’s size and position
depend on the size and position of the black rectangle.&lt;/p&gt;
&lt;p&gt;Next, the designer adds the string, and Peridot infers that the size of the
gray rectangle should depend on the size of the string.&lt;/p&gt;
&lt;p&gt;Since constraints are only one directional, this would remove the constraint
that connected the gray and black rectangles. Peridot notices this and asks the
designer if the constraint should be reversed. The question is asked because it
is often the case that the user wants to remove or change the constraints
rather than reverse them, in order to change the way the picture looks.&lt;/p&gt;
&lt;p&gt;The dependencies of an object’s attributes are often cascaded. Peridot is
careful to reverse all the necessary constraints so that the interface stays
consistent.&lt;/p&gt;
&lt;p&gt;In addition, the dependencies may go forward in the drawing order as well as
backward.&lt;/p&gt;
&lt;p&gt;If a relationship has been reversed or the user explicitly edits an attribute
to depend on some object, an object may be drawn before the object it depends
on is drawn.&lt;/p&gt;
&lt;p&gt;The drawing order of objects cannot be changed, however, since newer objects
can obscure older objects. Therefore, the calculation order must be different
from the drawing order.&lt;/p&gt;
&lt;p&gt;The one-directional graphic constraints in Peridot have proved to be sufficient
for handling all the relationships that occur in user interface elements.&lt;/p&gt;
&lt;p&gt;Operations that appear to require two-directional constraints are usually
handled in Peridot using active values.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="data-constraints"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-18" role="doc-backlink"&gt;Data Constraints&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Active values are like parameters to the procedure except that, when they
change at run time, graphics are updated immediately&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Active values can be set by the application program at any time to update the
graphics.&lt;/p&gt;
&lt;p&gt;In addition, application routines can be attached to active values, and these
will be called when the active value changes. Therefore, active values are also
used to pass information back to the application programs.&lt;/p&gt;
&lt;p&gt;The screen in the top Peridot window, and the displayed value is updated when
the value changes. This makes the system more understandable, since the state
of the system is always visible; the designer does not have to try to remember
the values of the variables.&lt;/p&gt;
&lt;p&gt;Another factor that makes active values easy to use is that the designer can
type in new values for the active value using the FixActive command. This can
be used to check that the graphics change appropriately.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="trivia"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-19" role="doc-backlink"&gt;Trivia&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Peridot was implemented in Interlisp-D on the Xerox 1109 DandeTiger workstation&lt;/p&gt;
&lt;p&gt;Peridot stands for Programming by Example for Real-time Interface Design
Obviating Typing.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="resources-1"&gt;
&lt;span id="res"&gt;&lt;/span&gt;&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-20" role="doc-backlink"&gt;Resources&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="http://acypher.com/wwid/Chapters/06Peridot.html"&gt;Peridot: Creating User Interfaces by Demonstration&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://dl.acm.org/doi/pdf/10.1145/78942.78943"&gt;Creating User Interfaces Using Programming by Example, Visual Programming, and Constraints&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://www.billbuxton.com/demonstration.pdf"&gt;Creating Highly-Interactive and Graphical User Interfaces by Demonstration&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=FsGx7G72V0Q"&gt;Peridot Full 1987&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🐦 &lt;a class="reference external" href="https://twitter.com/bradamyers"&gt;Brad Myers&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="see-also"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/#toc-entry-21" role="doc-backlink"&gt;See Also&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/"&gt;1959 The Geometry Theorem Machine&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/"&gt;1963 Sketchpad: A man-machine graphical communication system&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/"&gt;1969 GRAIL: GRAphical Input Language&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/"&gt;1975 Pygmalion: An Executable Electronic Blackboard&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/"&gt;1991 Frox: A Scriptable SmartTV with a Magic Wand&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/"&gt;1991 Lotus Improv: Spreadsheets Done Right&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;&lt;/div&gt;</description><category>history</category><category>nocode</category><guid>https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/</guid><pubDate>Thu, 31 Mar 2022 16:05:45 GMT</pubDate></item><item><title>No-code History: Sketchpad - A man-machine graphical communication system (1963)</title><link>https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/</link><dc:creator>Instadeq Team</dc:creator><description>&lt;div&gt;&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-sketchpad/sketchpad-1.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-sketchpad/sketchpad-1.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Below are all slightly edited quotes from the material listed in the &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#res"&gt;Resources&lt;/a&gt;
section, emphasis mine.&lt;/p&gt;
&lt;nav class="contents" id="contents" role="doc-toc"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#introduction-2003" id="toc-entry-1"&gt;Introduction (2003)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#introduction-1963" id="toc-entry-2"&gt;Introduction (1963)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#influence" id="toc-entry-3"&gt;Influence&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#motivation" id="toc-entry-4"&gt;Motivation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#design" id="toc-entry-5"&gt;Design&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#how-it-works" id="toc-entry-6"&gt;How it Works&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#hardware" id="toc-entry-7"&gt;Hardware&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#lessons-learned" id="toc-entry-8"&gt;Lessons Learned&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#conclusion" id="toc-entry-9"&gt;Conclusion&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#trivia" id="toc-entry-10"&gt;Trivia&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#resources-1" id="toc-entry-11"&gt;Resources&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#see-also" id="toc-entry-12"&gt;See Also&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="introduction-2003"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-1" role="doc-backlink"&gt;Introduction (2003)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ivan Sutherland’s &lt;strong&gt;Sketchpad is one of the most influential computer programs
ever written by an individual&lt;/strong&gt;, as recognized in his citation for the Turing
award in 1988.&lt;/p&gt;
&lt;p&gt;Executable versions were limited to a customized machine at the MIT Lincoln
Laboratory — so &lt;strong&gt;its influence has been via the ideas that it introduced
rather than in its execution&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;After 40 years, ideas introduced in Sketchpad still influence how every
computer user thinks about computing. It made fundamental contributions in the
area of human–computer interaction, &lt;strong&gt;being one of the first graphical user
interfaces. It exploited the light-pen, predecessor of the mouse, allowing the
user to point at and interact with objects displayed on the screen&lt;/strong&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="introduction-1963"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-2" role="doc-backlink"&gt;Introduction (1963)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Sketchpad system &lt;strong&gt;uses drawing as a novel communication medium for a
computer. The system contains input, output, and computation programs which
enable it to interpret information drawn directly on a computer display&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It has been used to draw electrical, mechanical, scientific, mathematical, and
animated drawings; it is a general purpose system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A Sketchpad user sketches directly on a computer display with a “light pen”&lt;/strong&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-sketchpad/sketchpad-3.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-sketchpad/sketchpad-3.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;The light pen is used both to position parts of the drawing on the display and
to point to them to change them. A set of push buttons controls the changes to
be made such as ”erase”, or “move”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Except for legends, no written language is used&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The Sketchpad system &lt;strong&gt;makes it possible for a man and a computer to converse
rapidly through the medium of line drawings&lt;/strong&gt;. &lt;strong&gt;Heretofore, most interaction
between men and computers has been slowed down by the need to reduce all
communication to written statements that can be typed; in the past, we have
been writing letters to rather than conferring with our computers&lt;/strong&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-sketchpad/sketchpad-4.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-sketchpad/sketchpad-4.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;The Sketchpad system, by eliminating typed statements (except for legends) in
favor of line drawings, opens up a new area of man-machine communication.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="influence"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-3" role="doc-backlink"&gt;Influence&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/"&gt;Smith’s Pygmalion&lt;/a&gt;, heavily
influenced by Sketchpad, made a more explicit argument for the cognitive
benefits of this kind of direct interaction and feedback, coining the term
“icon”, and making it clear that graphical images could represent abstract
entities of a programming language.&lt;/p&gt;
&lt;p&gt;Sketchpad influenced &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Xerox_Star"&gt;Star’s&lt;/a&gt; user
interface as a whole as well as its graphics applications&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-sketchpad/sketchpad-2.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-sketchpad/sketchpad-2.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Sketchpad’s implementation of class and instance-based inheritance (though not
called objects) predated Simula by several years.&lt;/p&gt;
&lt;p&gt;Alan Kay’s seminal Dynabook project, which led both to the Xerox Star and to
the explosion of interest in object oriented programming through his language
Smalltalk, was directly influenced by Sketchpad.&lt;/p&gt;
&lt;p&gt;Kay has written of the fact that the genesis of Smalltalk lay in the
coincidental appearance on his desk of both a distribution tape of Simula and a
copy of Sutherland’s Sketchpad thesis.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="motivation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-4" role="doc-backlink"&gt;Motivation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Sutherland’s original aim was to make computers accessible to new classes of
user&lt;/strong&gt; (artists and draughtsmen among others), while retaining the powers of
abstraction that are critical to programmers.&lt;/p&gt;
&lt;p&gt;In contrast, direct manipulation interfaces have since succeeded by reducing
the levels of abstraction exposed to the user. Ongoing research in end-user
programming continues to struggle with the question of how to reduce the
cognitive challenges of abstract manipulation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sutherland’s attempt to remove the division between users and programmers&lt;/strong&gt; was
not the only system that, in failing to do so, provided the imaginative leap to
a new programming paradigm.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="design"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-5" role="doc-backlink"&gt;Design&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The decision actually to implement a drawing system reflected our feeling that
&lt;strong&gt;knowledge of the facilities which would prove useful could only be obtained by
actually trying them&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Had a working system not been developed, our thinking would have been too
strongly influenced by a lifetime of drawing on paper&lt;/strong&gt; to discover many of the
useful services that the computer can provide.&lt;/p&gt;
&lt;p&gt;Early in December 1961 Professor Shannon visited TX-2 to see the work I had
been doing. As a result of that visit the entire effort took new form.&lt;/p&gt;
&lt;p&gt;As a result of including circles into the Sketchpad system a richness of
display experience has been obtained without which the research might have been
rather dry.&lt;/p&gt;
&lt;p&gt;As a result of trying to improve upon conventional drafting tools the full new
capability of the computer-aided drafting system has come into being.&lt;/p&gt;
&lt;p&gt;In making the second generation drawing program, explicit representation of
constraints and automatic constraint satisfaction were to be included.&lt;/p&gt;
&lt;p&gt;The second generation drawing program included for the first time the recursive
instance expansion which made possible instances within instances.&lt;/p&gt;
&lt;p&gt;It was possible for me, armed with photographs of the latest developments, to
approach a great many people in an effort to get new ideas to carry the work on
to a successful conclusion.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Out of these discussions came the notions of copying definitions and of
recursive merging which are, to me, the most important contributions of the
Sketchpad system&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Addition of new types of things to the Sketchpad system’s vocabulary of picture
parts requires only the construction of a new generic block and the writing of
appropriate subroutines for that thing.&lt;/p&gt;
&lt;p&gt;The subroutines might be easy to write, as they usually are for new
constraints, or difficult to write, as for adding ellipse capability, but at
least a finite, well-defined task faces one to add a new ability to the system.&lt;/p&gt;
&lt;p&gt;Before the generic structure was clarified, it was almost impossible to add the
instructions required to handle a new type of element.&lt;/p&gt;
&lt;p&gt;In the process of making the Sketchpad system operate, a few very general
functions were developed which make no reference at all to the specific types
of entities on which they operate. These general functions give the Sketchpad
system the ability to operate on a wide range of problems.&lt;/p&gt;
&lt;p&gt;The rewards that come from implementing general functions are so great that the
author has become reluctant to write any programs for specific jobs.&lt;/p&gt;
&lt;p&gt;The power obtained from the small set of generalized functions in Sketchpad is
one of the most important results of the research.&lt;/p&gt;
&lt;p&gt;In order of historical development, the recursive functions in use in the
Sketchpad system are:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Expansion of instances, making it possible to have subpictures within
subpictures to as many levels as desired.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recursive deletion, whereby removal of certain picture parts will remove
other picture parts in order to maintain consistency in the ring structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recursive merging, whereby combination of two similar picture parts forces
combination of similarly related other picture parts, making possible
application of complex definitions to an object picture.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recursive moving, wherein moving certain picture parts causes the display of
appropriately related picture parts to be regenerated automatically.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;The major feature which distinguishes a Sketchpad drawing from a paper and
pencil drawing is the user’s ability to specify to Sketchpad mathematical
conditions on already drawn parts of his drawing which will be automatically
satisfied by the computer to make the drawing take the exact shape desired.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For example, to draw a square, any quadralateral is created by sloppy light pen
manipulation, closure being assured by the pseudo light pen position and
merging of points.&lt;/p&gt;
&lt;p&gt;The sides of this quadralateral may then be specified to be equal in length and
any angle may be required to be a right angle.&lt;/p&gt;
&lt;p&gt;Given these conditions, the computer will complete a square. Given an
additional specification, say the length of one side, the computer will create
a square of the desired size.&lt;/p&gt;
&lt;p&gt;The process of fixing up a drawing to meet new conditions applied to it after
it is already partially complete is very much like the process a designer goes
through in turning a basic idea into a finished design.&lt;/p&gt;
&lt;p&gt;As new requirements on the various parts of the design are thought of, small
changes are made to the size or other properties of parts to meet the new
conditions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;By making Sketchpad able to find new values for variables which satisfy the
conditions imposed it is hoped that designers can be relieved of the need of
much mathematical detail&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Arbitrary symbols may be defined from any collection of line segments, circle
arcs, and previously defined symbols. A user may define and use as many symbols
as he wishes. &lt;strong&gt;Any change in the definition of a symbol is at once seen wherever
that symbol appears&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It is easy to add entirely new types of conditions to Sketchpad’s vocabulary&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Since the conditions can involve anything computable, Sketchpad can be used for
a very wide range of problems.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="how-it-works"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-6" role="doc-backlink"&gt;How it Works&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If we point the light pen at the display system and press a button called
“draw”, the computer will construct a straight line segment which stretches
like a rubber band from the initial to the present location of the pen.&lt;/p&gt;
&lt;p&gt;Additional presses of the button will produce additional lines until we have
made six, enough for a single hexagon. To close the figure we return the light
pen to near the end of the first line drawn where it will “lock on” to the end
exactly. A sudden flick of the pen terminates drawing.&lt;/p&gt;
&lt;p&gt;To make the hexagon regular, we can inscribe it in a circle. To draw the circle
we place the light pen where the center is to be and press the button “circle
center”, leaving behind a center point. Now, choosing a point on the circle
(which fixes the radius,) we press the button “draw” again, this time getting a
circle arc.&lt;/p&gt;
&lt;p&gt;Next we move the hexagon into the circle by pointing to a corner of the hexagon
and pressing the button “move” so that the corner followsk the light pen,
stretching two rubber band line segments behind it. By pointing to the circle
and giving the termination flick we indicate that the corner is to lie on the
circle.&lt;/p&gt;
&lt;p&gt;If we also insist that the sides of the hexagon be of equal length, a regular
hexagon will be constructed. This we can do by pointing to one side and
pressing the “copy” button, and then to another side and giving the termination
flick.&lt;/p&gt;
&lt;p&gt;We now file away the basic hexagon and begin work on a fresh “sheet of paper”
by changing a switch setting. On the new sheet we assemble, by pressing a
button to create each hexagon as a subpicture, six hexagons around a central
seventh in approximate position.&lt;/p&gt;
&lt;p&gt;An entire group of hexagons, once assembled, can be treated as a symbol. The
entire group can be called up on another “sheet of paper” as a subpicture and
assembled with other groups or with single hexagons to make a very large
pattern.&lt;/p&gt;
&lt;p&gt;Information about how the drawing is tied together is stored in the computer as
well as the information which gives the drawing its particular appearance.
Since the drawing is tied together, it will keep a useful appearance even when
parts of it are moved.&lt;/p&gt;
&lt;p&gt;Again, since we indicated that the corners of the hexagon were to lie on the
circle they remained on the circle throughout our further manipulations.  It is
this ability to store information relating the parts of a drawing to each other
that makes Sketchpad most useful.&lt;/p&gt;
&lt;p&gt;If the master hexagon is changed, the entire appearance of the hexagonal
pattern will be changed.&lt;/p&gt;
&lt;p&gt;It took about one half hour to generate the 900 hexagons, including the time
taken to figure out how to do it. Plotting them takes about 25 minutes. The
drafting department estimated it would take them two days to produce a similar
pattern.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;By far the most interesting application of Sketchpad so far has been drawing
and moving linkages&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The ability to draw and then move linkages opens up a new field of graphical
manipulation that has never before been available.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-sketchpad/sketchpad-5.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-sketchpad/sketchpad-5.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;One of the largest untapped fields for application of Sketchpad is as an input
program for other computation programs.&lt;/p&gt;
&lt;p&gt;The ability to place lines and circles graphically, when coupled with the
ability to get accurately computed results pictorially displayed, should bring
about a revolution in computer application.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With Sketchpad we have a powerful graphical input tool. It happened that the
relaxation analysis built into Sketchpad is exactly the kind of analysis used
for many engineering problems. By using Sketchpad’s relaxation procedure we
were able to demonstrate analysis of the force distribution in the members of a
pin connected truss.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A graphical input coupled to some kind of computation which is in turn
coupled to graphical output is a truly powerful tool for education and design&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;To draw this figure, one bay of the truss (shown below the bridge) was first
drawn with enough constraints to make it geometrically accurate.  These
constraints were then deleted and each member was made to behave like a bridge
beam.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-sketchpad/sketchpad-6.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-sketchpad/sketchpad-6.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Applying a load where desired and attaching supports, one
can observe the forces in the various members. It takes about 30 seconds for
new force values to be computed.&lt;/p&gt;
&lt;p&gt;Having drawn a basic bridge shape, one can experiment with various loading conditions and supports to see what the effect of making minor modifications is.&lt;/p&gt;
&lt;div class="youtube-video"&gt;
&lt;iframe width="720" height="540" src="https://www.youtube-nocookie.com/embed/ubaX1Smg6pY?rel=0&amp;amp;wmode=transparent&amp;amp;start=2269" frameborder="0" allow="encrypted-media" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;p&gt;Since Sketchpad is able to accept topological information from a human being in
a picture language perfectly natural to the human, it can be used as an input
program for computation programs which require topological data, e.g., circuit
simulators.&lt;/p&gt;
&lt;p&gt;Sketchpad itself is able to move parts of the drawing around to meet new
conditions which the user may apply to them. The user indicates conditions with
the light pen and push buttons. For example, to make two lines parallel,&lt;/p&gt;
&lt;p&gt;The conditions themselves are displayed on the drawing so that they may be
erased or changed with the light pen language. Any combination of conditions
can be defined as a composite condition and applied in one step.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="hardware"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-7" role="doc-backlink"&gt;Hardware&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lincoln Laboratory provided not only advice but also technical support
including to date about 600 hours of time on the TX-2.&lt;/p&gt;
&lt;p&gt;Whatever success the Sketchpad effort has had can in no small measure be traced
to the use of TX-2.  TX-2’s 70,000 word memory, 64 index registers, flexible
input-output control and liberal supply of manual intervention facilities such
as toggle switches, shaft encoder knobs, and push buttons all contributed to
the speed with which ideas could be tried and accepted or rejected.&lt;/p&gt;
&lt;p&gt;Moreover, being an experimental machine it was possible to make minor
modifications to TX-2 to match it better to the problem. For example, a push
button register was installed at my request.&lt;/p&gt;
&lt;p&gt;Summary of Vital Statistics — TX-2 — December 1962&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Word Length&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;36 bits, plus parity bit, plus debugging tag bit&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;Memory&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;256 × 256 core 65,536 words 6.0 µsec cycle time&lt;/p&gt;
&lt;p&gt;64 × 64 core 4,096 words 4.4 µsec cycle time&lt;/p&gt;
&lt;p&gt;Toggle switch 16 words&lt;/p&gt;
&lt;p&gt;Plugboard 32 words&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;Auxiliary Memory&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;Magnetic Tape 2+ million words, 70+ million bits per unit (2 units in use,
total of 10 planned)&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;Tape Speeds&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;selectable 60-300 inches/sec, search at 1000 inches/sec (i.e. about 1600 to
8000 36 bit words/sec)&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Input&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Paper Tape Reader: 400-2000 6 bit lines/sec&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2 keyboards — Lincoln writer 6 bit codes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Random number generator — average 57.6 µsec per 9 bit number&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IBM Magnetic Tape (Model 729 M6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Miscellaneous pulse inputs — 9 channels — push buttons or other source&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Analog input — Epsco Datrac — nominal 11 bit sample, 27 kilocycle max. rate&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2 light pens — work with either scope or both on one&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Special memory registers&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Real time clock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;4 shaft encoder knobs, 9 bits each&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;592 toggle switches (16 registers)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;37 push buttons — any or all can be pushed at once&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Output&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Paper tape punch — 300 6 bit lines/sec&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2 typewriters — 10 characters per second&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IBM Magnetic Tape (729 M6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Miscellaneous pulse/light/relay contacts — 9 channels (low rates)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Xerox printer — 1300 char. sec&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2 display scopes — 7 × 7 inch usable area, 1024 × 1024 raster&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Large board pen and ink plotter — 29”×29” plotting area. 15 in/sec slew
speed. Off line paper tape control as well as direct computer control.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-sketchpad/sketchpad-7.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-sketchpad/sketchpad-7.jpg"&gt;
&lt;/figure&gt;
&lt;/section&gt;
&lt;section id="lessons-learned"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-8" role="doc-backlink"&gt;Lessons Learned&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Had I to do the work again, I could start afresh with the sure knowledge that
generic structure, separation of subroutines into general purpose ones applying
to all types of picture parts and ones specific to particular types of picture
parts, and unlimited applicability of functions (e.g. anything should be
moveable) would more than recompense the effort involved in achieving them.&lt;/p&gt;
&lt;p&gt;I have great admiration for those people who were able to tell me these things
all along, but I, personally, had to follow the stumbling trail described in
this chapter to become convinced myself.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="conclusion"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-9" role="doc-backlink"&gt;Conclusion&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We conclude from these examples that Sketchpad drawings can bring invaluable
understanding to a user. For drawings where motion of the drawing, or analysis
of a drawn problem is of value to the user, Sketchpad excells.&lt;/p&gt;
&lt;p&gt;For highly repetitive drawings or drawings where accuracy is required,
Sketchpad is sufficiently faster than conventional techniques to be worthwhile.&lt;/p&gt;
&lt;p&gt;For drawings which merely communicate with shops, it is probably better to use
conventional paper and pencil.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="trivia"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-10" role="doc-backlink"&gt;Trivia&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Claude_Shannon"&gt;Claude E. Shannon&lt;/a&gt; was the thesis supervisor.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Marvin_Minsky"&gt;Marvin Minsky&lt;/a&gt; gave advise during development.&lt;/p&gt;
&lt;p&gt;To initially establish pen tracking the Sketchpad user must inform the computer
of an initial pen location. This has come to be known as “inking-up” and is
done by “touching” any existing line or spot on the display whereupon the
tracking cross appears. &lt;strong&gt;If no picture has yet been drawn, the letters INK are
always displayed for this purpose&lt;/strong&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="resources-1"&gt;
&lt;span id="res"&gt;&lt;/span&gt;&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-11" role="doc-backlink"&gt;Resources&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-574.pdf"&gt;Sketchpad: A man-machine graphical communication system&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=-sbeghygOt4"&gt;Sketchpad – A Man-Machine Graphical Information System&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=FuKREmsiD9o"&gt;Sketchpad (1963) 1 of 3 - Intro and Interview&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=hB3jQKGrJo0"&gt;Sketchpad (1963) 2 of 3 - 2D Graphics&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=t3ZsiBMnGSg"&gt;Sketchpad (1963) 3 of 3 - 3D Graphics&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=57wj8diYpgY"&gt;Sketchpad Thesis Overview&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=FIMaf4RemOU"&gt;Odysseys in Technology: Research and Fun, lecture by Ivan Sutherland&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="see-also"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/#toc-entry-12" role="doc-backlink"&gt;See Also&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;✍  &lt;a class="reference external" href="http://recursivedrawing.com/"&gt;Recursive Drawing: an exploration of user interface ideas towards the development of a spatially-oriented programming environment&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📐 &lt;a class="reference external" href="http://aprt.us/"&gt;Apparatus: a hybrid graphics editor and programming environment for creating interactive diagrams&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;👩‍🎨 &lt;a class="reference external" href="https://cuttle.xyz/"&gt;Cuttle.xyz: A design tool for digital cutting machines&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/"&gt;1959 The Geometry Theorem Machine&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/"&gt;1969 GRAIL: GRAphical Input Language&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/"&gt;1975 Pygmalion: An Executable Electronic Blackboard&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/"&gt;1987 Peridot: UIs by Example, Visual Programming &amp;amp; Constraints&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/"&gt;1991 Frox: A Scriptable SmartTV with a Magic Wand&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/"&gt;1991 Lotus Improv: Spreadsheets Done Right&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;&lt;/div&gt;</description><category>history</category><category>nocode</category><guid>https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/</guid><pubDate>Wed, 23 Mar 2022 11:22:03 GMT</pubDate></item><item><title>No-code History: Frox a Scriptable SmartTV with a Magic Wand (1991)</title><link>https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/</link><dc:creator>Instadeq Team</dc:creator><description>&lt;div&gt;&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-1.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-1.jpg"&gt;
&lt;/figure&gt;
&lt;nav class="contents" id="contents" role="doc-toc"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#preface" id="toc-entry-1"&gt;Preface&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#introduction" id="toc-entry-2"&gt;Introduction&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#how-does-it-work-1" id="toc-entry-3"&gt;How Does it Work&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#frox-overview" id="toc-entry-4"&gt;Frox Overview&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#reports-at-the-time" id="toc-entry-5"&gt;Reports at the Time&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#trivia" id="toc-entry-6"&gt;Trivia&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#resources-1" id="toc-entry-7"&gt;Resources&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#see-also" id="toc-entry-8"&gt;See Also&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="preface"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#toc-entry-1" role="doc-backlink"&gt;Preface&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It's hard to find content online about Frox, below are quotes from articles,
books and a video presentation by Andy Hertzfeld, if you are interested in the
programmable part jump straight to &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#how"&gt;How Does it Work&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Below are all slightly edited quotes from the material listed in the &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#res"&gt;Resources&lt;/a&gt;
section, emphasis mine. My notes prefixed with 💭&lt;/p&gt;
&lt;/section&gt;
&lt;section id="introduction"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#toc-entry-2" role="doc-backlink"&gt;Introduction&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;💭 First person below is Hartmut Esslinger&lt;/p&gt;
&lt;p&gt;In 1987, we started a new company called frox (as in “frog electronics”), with
the goal of designing, developing, and producing a fully digital multimedia
entertainment system. It was a truly visionary concept that just didn’t pan
out.&lt;/p&gt;
&lt;p&gt;Essentially, &lt;strong&gt;we wanted to integrate video-audio entertainment and computing
into one system that would apply fully digital processing to all signals and
data streams&lt;/strong&gt;. Compared to our now decades-old concept, today’s “media centers”
are still well behind the curve.&lt;/p&gt;
&lt;p&gt;For two years, the venture consumed most of our attention and energy, &lt;strong&gt;until we
realized that neither the company nor the market was ready for the concept&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;What failed us in this undertaking wasn’t the raw-force/pure-play technology
we were developing. Instead, we were undone by human failure—in both the overly
“corporate” management team who over-politicized the venture and overspent its
funding, and the investors who didn’t fully understand the painful process of
applying high-tech capabilities to a consumer-focused product.&lt;/p&gt;
&lt;p&gt;Interestingly, after Patricia and I left the venture, the investors continued
frox with a new management team and new money. They succeeded at launching
the prototype, but it ultimately failed because it was too expensive and
unreliable.&lt;/p&gt;
&lt;p&gt;💭 First person below is Andy Hertzfeld&lt;/p&gt;
&lt;div class="youtube-video"&gt;
&lt;iframe width="720" height="540" src="https://www.youtube-nocookie.com/embed/R-rHDpEkDdE?rel=0&amp;amp;wmode=transparent" frameborder="0" allow="encrypted-media" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;p&gt;hi I'm Andy Hertzfeld and I've been working for the last year or so on
developing &lt;strong&gt;an advanced user interface&lt;/strong&gt; for Frox. A company involved with &lt;strong&gt;making
the home entertainment system of the future&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I'm really excited about the system because I think &lt;strong&gt;it has the potential to
create a revolution in the consumer electronics marketplace by combining a
powerful computer as powerful as today's advanced workstations at the center of
a complete home electronic system&lt;/strong&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="how-does-it-work-1"&gt;
&lt;span id="how"&gt;&lt;/span&gt;&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#toc-entry-3" role="doc-backlink"&gt;How Does it Work&lt;/a&gt;&lt;/h2&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-mouse.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-mouse.jpg"&gt;
&lt;figcaption&gt;
&lt;p&gt;Notice that Andy is using a mouse here, a computer without a keyboard ;)&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In designing the Frox user interface &lt;strong&gt;the greatest challenge was to create a
user interface that is appealing both to a technophobe and a technophile&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It's very hard to design an interface that is both simple and complex, so we
solve the problem by providing complete end-user configurability&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;What I'm going to show you now is &lt;strong&gt;how the end user can use the toolbox to
build their own unique environment&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I can click on the command panel and over to the right I see I have this large
toolbox.&lt;/p&gt;
&lt;p&gt;Whenever you bring up the toolbox it means &lt;strong&gt;the system is kind of under
construction&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I can move controls around just changing their positions, or I can customize
them in various ways&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The toolbox itself consists of a bunch of boxes of parts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There's actually over a thousand independent parts in the Frox system that the
user can manipulate&lt;/strong&gt;, by clicking on a box it opens.&lt;/p&gt;
&lt;p&gt;If I click on different entities in the boxes such as this cuckoo noise you
hear a cuckoo sound.&lt;/p&gt;
&lt;p&gt;I'll take this cuckoo noise and drop it into the left half of a button makes
the noise to reinforce it's being taken.&lt;/p&gt;
&lt;p&gt;I'll grab the boing noise and drop it into the right of the switch, from now on
this the switch will sound like Cuckoo ... Boing.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-sound-customization.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-sound-customization.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;In a similar fashion we're in control of all the colors you see on the screen.&lt;/p&gt;
&lt;p&gt;If I take this dab of blue and drop it here that panel becomes blue.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-color-customization.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-color-customization.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;If I take this pink and drop it between the cracks it becomes pink.&lt;/p&gt;
&lt;p&gt;I can change the color of the frog here to brown.&lt;/p&gt;
&lt;p&gt;There's lots of other interesting parts in the toolbox browser.&lt;/p&gt;
&lt;p&gt;You'll see that &lt;strong&gt;the looks of the controls are really independent of their functionality&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For example if I want to change the way this commercial switch looks but still
make it a commercial switch I can choose the way I want it to look from any of
these alternatives. Open one up take its shape image drop it on top of it,
it'll change that one to be a different shape.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-control-customization.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-control-customization.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;We've seen that we can change the looks of these controls but &lt;strong&gt;none of that
really matters unless we can change their meaning&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The meaning of a control is encapsulated in these little nuggets of
functionality called scripts&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In fact &lt;strong&gt;the system will come with hundreds of such scripts that can be dropped
into any of dozens of different controls&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Let's look at the script associated with the stop CD button.&lt;/p&gt;
&lt;p&gt;I can just click on that up, it opens up the script and we'll see that the
script for the stop CD button is very simple.&lt;/p&gt;
&lt;p&gt;Just is telling the CD to stop.&lt;/p&gt;
&lt;p&gt;In a similar fashion this button here is an eject button when I press on it, it
would eject the current CD.&lt;/p&gt;
&lt;p&gt;I can get a different script that say is the play CD function and drop that
into here now it becomes a play button, or now it would become a pause button.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;By dropping in scripts I can change the meanings of any given control&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The real power comes in when end-users can design their own scripts&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I think it would be a good idea now to maybe &lt;strong&gt;write our own script from scratch
so we can see how easy it is to to customize the system&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Let's turn this button here into a button so that instead of stopping the CD
every time we press it it'll change the color of whatever panel we're in.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-script-1.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-script-1.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;We can get up the toolbox browser, open up the script box and we'll see the
special script with a lightning bolt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When we drag this one out it will create an entirely new script&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We'll make a little program that will change the color of whatever panel we're
in.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-script-2.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-script-2.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;We'll use this pick operation which just picks one out of a box and then we'll
put this box of colors next to it so we've effectively made it say pick a
color.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-script-3.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-script-3.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;We'll use the set color primitive to take that color we've picked and what
we'll set with it is the color of the current panel.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-script-4.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-script-4.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;There it is. We've just created a little program to set the color of the
current panel.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-script-5.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-script-5.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;We can take that script and drop it into a button here.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-script-6.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-script-6.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Put away the browsers and we'll see that when we press on the button it'll
change the color of the panel we're in.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-script-7.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-script-7.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;If we hold the button down it'll repeatedly execute the script changing their
color repeatedly.&lt;/p&gt;
&lt;p&gt;I'm really proud of the system because I think &lt;strong&gt;it has the potential to redefine
how a user interacts with their audio and video environment&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It's a revolutionary system because &lt;strong&gt;it gives the end-user the same level of
control over his environment that a programmer typically has&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The end-user is in control of every color sound and shape that they see on the
screen&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The other most revolutionary aspect of the Frox system is that &lt;strong&gt;it's a
completely open software based system&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unlike traditional consumer electronic systems features can be added just by
sticking in a floppy disk so the system never becomes obsolete&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The Frox system that an end-user buys in 1991 will be that much better in 1994.&lt;/p&gt;
&lt;p&gt;I hope you've enjoyed watching this demo as much as I've enjoyed creating the
system, thanks.&lt;/p&gt;
&lt;div class="youtube-video"&gt;
&lt;iframe width="720" height="540" src="https://www.youtube-nocookie.com/embed/qDdmG7Lfrjs?rel=0&amp;amp;wmode=transparent&amp;amp;start=88" frameborder="0" allow="encrypted-media" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;section id="frox-overview"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#toc-entry-4" role="doc-backlink"&gt;Frox Overview&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I'm going to launch it here and while it's launching make a couple apologies
the main one being that &lt;strong&gt;the computer here has only 8 bits per pixel so it can
only display 256 simultaneous colors whereas our real system will have 24 bits
per pixel and be able to display 16 million colors&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The main way the user interacts with the system is through what we call a
magic wand pointing device much like a normal remote control but only one
button on it&lt;/strong&gt; and the user will point at the screen and this hand on the screen
tracks the movement of the magic wand.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-2.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-2.jpg"&gt;
&lt;/figure&gt;
&lt;p&gt;Your way of manipulating the environment is by clicking on these little
controls with your hand.&lt;/p&gt;
&lt;p&gt;You'll see that I can grab the volume control and will actually make it louder.&lt;/p&gt;
&lt;p&gt;I can move the balance control to listen to just the left or just the right.&lt;/p&gt;
&lt;p&gt;I have a wide variety of other controls that I'll be showing you later.&lt;/p&gt;
&lt;p&gt;Probably the most important panel here is the switch box panel which shows you
through graphics and animation all the activity currently going on in the
system.&lt;/p&gt;
&lt;p&gt;If we activate the CD we'll see the notes emanating from the CD when I hit
pause on the CD will notice that the CD stops spinning.&lt;/p&gt;
&lt;p&gt;When I start it up again as it spins in real life it spins in the switch box
panel.&lt;/p&gt;
&lt;p&gt;In a similar fashion if I pause the VHS cassette it will pause, when I play it,
will begin to animate again.&lt;/p&gt;
&lt;p&gt;We can switch between different screens using the command panel at the bottom.&lt;/p&gt;
&lt;p&gt;One click brings it up, there's a push button here to dismiss it and then just
clicking on an image of a screen will take us to that screen.&lt;/p&gt;
&lt;p&gt;We'll look at a large video screen it's paused here, we can get it going or
we can go to a variety of other screens.&lt;/p&gt;
&lt;p&gt;One of the most unique and extraordinary benefits of the Frox system is the way
it deals with your media such as your CDs.&lt;/p&gt;
&lt;p&gt;You can select the individual CDs by their album cover, I can go to a screen
where the album covers are displayed pretty large.&lt;/p&gt;
&lt;p&gt;As we click we can see a variety of different album images corresponding to
each CD that's currently accessible to the user.&lt;/p&gt;
&lt;p&gt;I can even go to another screen here that has a very large panel so you can see
every song on the CD to play, displayed all at once.&lt;/p&gt;
&lt;p&gt;Now we're playing "Like a Rolling Stone" if we want to play "Ballad of a Thin
Man" we just click on it or "Just Like Tom Thumb's Blues" or "Desolation Road".&lt;/p&gt;
&lt;p&gt;That's the CD capability. I'll turn off the CD player now so it'll be a
little easier to show you other dimensions of the system.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="reports-at-the-time"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#toc-entry-5" role="doc-backlink"&gt;Reports at the Time&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;💭 From Chicago Tribune article&lt;/p&gt;
&lt;p&gt;The FroxSystem revolves around a &lt;strong&gt;custom-designed Sun Microsystems computer
workstation&lt;/strong&gt;. A workstation is a personal computer on steroids. This computer
controls and manipulates all of the audio and video in the system. It converts
signals from analog to digital and processes them in the digital domain.&lt;/p&gt;
&lt;p&gt;The FroxSystem learns all of the infrared remote control commands of your
existing audio and video sources. &lt;strong&gt;It then takes control of the entire system
with a unique one-button wireless remote called the FroxWand&lt;/strong&gt; that operates like
a flying computer mouse. Pressing a button brings up a display of the TV screen
of controls for the piece of equipment you wish to operate.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-frox/frox-magic-wand.jpeg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-frox/frox-magic-wand.jpeg"&gt;
&lt;/figure&gt;
&lt;p&gt;The FroxVision monitor manipulates more than 360,000 pixels 60 times a second,
40 times the industry standard.&lt;/p&gt;
&lt;p&gt;Frox offers a choice of a 31-inch direct view monitor, a 52-inch rear
projection monitor, or a monster 10-foot front projection monitor.&lt;/p&gt;
&lt;p&gt;Since computer software operates the advanced digital hardware of the
FroxSystem, &lt;strong&gt;the system can be updated and improved without replacing the
hardware. Frox supplies updates on VHS videocassettes&lt;/strong&gt;. However, there`s an even
easier method. &lt;strong&gt;Frox made an arrangement with satellite program provider Turner
Broadcasting Co. to transmit updates invisibly on superstation WTBS, which is
carried on satellite and nearly all cable systems&lt;/strong&gt;. A portion of the TV picture
you can`t see, called the vertical blanking interval (VBI) contains room for
additional data.&lt;/p&gt;
&lt;p&gt;💭 From CNN article&lt;/p&gt;
&lt;p&gt;The TV is the focal point of the system, but what makes it all work is a
built-in computer as powerful as an engineering workstation. &lt;strong&gt;Soon the machine
will simultaneously monitor electronic databases for news or other information
of particular interest, answer the telephone, watch for incoming electronic
mail, and control additional home appliances even as it runs the TV or stereo&lt;/strong&gt;.
In essence, the Frox machine is an ambitious effort to give the boob tube some
real smarts.&lt;/p&gt;
&lt;p&gt;The goal: desktop video computers that users interact with, not merely another
box for couch potatoes to sit and stare at. &lt;strong&gt;These video computers would usher
in video encyclopedias and other interactive educational and training tools&lt;/strong&gt;.
They could read and display patterns of stock price quotes, and would make
possible hundreds of new and elaborate computer games. &lt;strong&gt;Ultimately just about
anybody will be able to create electronic productions that mix snippets of
moving video and sound with conventional text and computer graphics. FOR
EXAMPLE, you could write your mother a letter including video highlights of
your daughter's birthday party or your trip to Europe, with commentary dubbed
in. You would mail it to her on a single computer disk -- or, better yet,
transmit it to her computer almost instantly over telephone lines. One day,
video computers may even act as the futuristic&lt;/strong&gt; &lt;a class="reference external" href="https://instadeq.com/blog/posts/market-research-at-bell-labs-picture-phone-vs-mobile-phone/"&gt;videophones&lt;/a&gt; &lt;strong&gt;that
telecommunications companies have promised for decades but never really
delivered&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Moreover, many experts aren't so sure that ordinary people can master the
exacting techniques necessary to put together a comprehensible video program,
even if it's just an edited home movie. Indeed, some contend that most people
would really only need or want a 'multimedia player' -- a TV or computer that
allows them more control over prerecorded, professionally produced interactive
video programming.&lt;/p&gt;
&lt;p&gt;Frox was founded last year by Hartmut Esslinger, a West German whose Frogdesign
firm helped devise the striking ergonomic look of most of Apple's personal
computers and the Next machine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Steve Jobs helped Esslinger refine the idea last year but had to back out to
devote full time to Next. Esslinger continued on his own&lt;/strong&gt;. To build the
prototype he enlisted the help of Andreas Bechtolsheim, one of Sun
Microsystems' founders; Peter Costello, another top Sun engineer; and
Hertzfeld.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="trivia"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#toc-entry-6" role="doc-backlink"&gt;Trivia&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If a comment in the youtube video is to be believed: "&lt;strong&gt;Andy developed the Frox
prototype in (object-oriented!) assembly&lt;/strong&gt; language on a processor family he
KNEW wouldn't be used in the final product -- thus ensuring that the actual
product wouldn't be a hacked-up expansion on the bones of the prototype."&lt;/p&gt;
&lt;/section&gt;
&lt;section id="resources-1"&gt;
&lt;span id="res"&gt;&lt;/span&gt;&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#toc-entry-7" role="doc-backlink"&gt;Resources&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📰 &lt;a class="reference external" href="https://money.cnn.com/magazines/fortune/fortune_archive/1989/11/20/72774/index.htm"&gt;Couch Potatoes! Now it's Smart TV: The marriage of television's images and personal computers' brains is giving birth to dazzling offspring that could revolutionize both industries (1989)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📰 &lt;a class="reference external" href="https://www.chicagotribune.com/news/ct-xpm-1992-03-13-9201230690-story.html"&gt;Frox Has a New Vision of Home Theater&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📷 &lt;a class="reference external" href="https://twitter.com/bitsavers/status/1143216234348998657"&gt;Magic Wand Image Tweet&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📕 &lt;a class="reference external" href="https://archive.org/details/finelinehowdesig0000essl/page/n7/mode/2up?q=frox"&gt;A Fine Line: How design strategies are shaping the future of business&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=R-rHDpEkDdE"&gt;Frox Demo January 1990&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?v=qDdmG7Lfrjs&amp;amp;t=88s"&gt;Frox And American Technology&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="see-also"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/#toc-entry-8" role="doc-backlink"&gt;See Also&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/"&gt;1959 The Geometry Theorem Machine&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/"&gt;1963 Sketchpad: A man-machine graphical communication system&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/"&gt;1969 GRAIL: GRAphical Input Language&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/"&gt;1975 Pygmalion: An Executable Electronic Blackboard&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/"&gt;1987 Peridot: UIs by Example, Visual Programming &amp;amp; Constraints&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/"&gt;1991 Lotus Improv: Spreadsheets Done Right&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;&lt;/div&gt;</description><category>history</category><category>nocode</category><guid>https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/</guid><pubDate>Tue, 15 Mar 2022 09:58:21 GMT</pubDate></item><item><title>No-code History: GRAphical Input Language - GRAIL (1969)</title><link>https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/</link><dc:creator>Instadeq Team</dc:creator><description>&lt;div&gt;&lt;p&gt;Note: Almost all text below are quotes from resources listed at the end with slight editions.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-grail/grail-3.png" src="https://instadeq.com/blog/galleries/post-images/nocode-history-grail/grail-3.png"&gt;
&lt;/figure&gt;
&lt;nav class="contents" id="contents" role="doc-toc"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#introduction" id="toc-entry-1"&gt;Introduction&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#motivation" id="toc-entry-2"&gt;Motivation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#challenges" id="toc-entry-3"&gt;Challenges&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#the-language" id="toc-entry-4"&gt;The Language&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#how-it-works" id="toc-entry-5"&gt;How it Works&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#trivia" id="toc-entry-6"&gt;Trivia&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#resources" id="toc-entry-7"&gt;Resources&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#see-also" id="toc-entry-8"&gt;See Also&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="introduction"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#toc-entry-1" role="doc-backlink"&gt;Introduction&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The GRAIL (GRAphical Input Language) Project proposed to create an
&lt;strong&gt;interactive software-hardware system in which the man constructs and
manipulates the display contents directly and naturally without the need to
instruct an intermediary (the machine); i.e., the display contents should
represent, in a very real sense, the man's problem, and allow him to deal
directly with it&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="youtube-video"&gt;
&lt;iframe width="720" height="540" src="https://www.youtube-nocookie.com/embed/2Cq8S3jzJiQ?rel=0&amp;amp;wmode=transparent" frameborder="0" allow="encrypted-media" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;p&gt;For example, consider the construction of a flowchart. An interactive system
embodying these features allows a researcher to draw freehand figures and
connecting lines; then it immediately replaces these figures with stylized
versions of the appropriate size and at the same position to inform him that it
understood his actions. If the researcher's actions are in error, the system
makes this apparent; e.g., by brightening a symbol or disallowing a connecting
line.&lt;/p&gt;
&lt;p&gt;The foregoing considerations led to these design goals:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Machine-to-man communication to be accomplished solely via the CRT.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Man-to-machine communication to be accomplished solely via real-time interpretation of stylus/tablet motions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The environment to minimize ambiguous responses and the operation to be reasonably apparent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The system to be responsive enough for the man to consider the display his working surface with minimal distraction and delay.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The system to be complete as a problem solving aid; i.e., the man should be able to specify, edit, validate (debug), document, and exercise his problem description.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The evident mismatch between output potentials and existing input capabilities
led to the investigation of two-dimensional input devices. The device that
resulted, known as &lt;strong&gt;the RAND Tablet, consists of a pen-like instrument (stylus)
used on a two-dimensional surface (printed circuit tablet), which is coupled to
a general-purpose computer&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The project deals with the problem of computer programming using flowcharts as
a starting point from which to investigate man-machine communications within
the above principles. &lt;strong&gt;Operations are described that allow the man to specify,
edit, validate, document, and exercise his problem description by drawing and
gesturing (freehand and in-place) those symbols, characters, and other means of
problem expression that he may need. Continuous responses on the CRT display
are necessary to minimize distraction and to allow the man to feel that he is
dealing directly with the expression of his problem&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The GRAIL research experiment was designed to facilitate problemsolving by
providing a useful interface between man and machine. Specifically, the
project investigated techniques for the real-time interpretation of free-hand
gestures (on a RAND Tablet), display representation methods, and their
application to a significant problem area --constructing computer programs via
flowcharting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The system permits construction, editing, interpretive execution, compilation,
debugging, documentation, and execution of computer programs specified by
flowcharts&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The communication language is structured to assist the man in problem
formulation by allowing specification of a problem, editing of its constructs,
and validating its representation. Accurate and intelligible documentation
directly results from the problem statement in GRAIL.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="motivation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#toc-entry-2" role="doc-backlink"&gt;Motivation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The project's main goal was to identify the problems and study possible
methodology for this form of man-machine communications.&lt;/p&gt;
&lt;p&gt;Computer programming via flowcharts was chosen as a vehicle for the GRAIL
project work. Flowcharting is broadly applicable and complex enough to be
interesting, as well as being amenable to the proposed communication
techniques.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="challenges"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#toc-entry-3" role="doc-backlink"&gt;Challenges&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The man's ability to focus his attention exclusively on the display is
certainly coupled to his ability to effect his intentions directly in place.&lt;/p&gt;
&lt;p&gt;The seemingly difficult feat of looking one place while gesturing in another
(such as typing or driving a car) is really no problem for the man provided the
feedback loop is closed quickly enough to avoid a rubbery feeling.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="the-language"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#toc-entry-4" role="doc-backlink"&gt;The Language&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The language organization centers on sequential control flow and nested
subroutines coupled with flowcharts to relate their interdependence
pictorially.&lt;/p&gt;
&lt;p&gt;These notions help the man to structure his program and to envision graphically
its organization in two dimensions.&lt;/p&gt;
&lt;p&gt;Important organizational concepts in the GRAIL system are the sequential flow
of control, the hierarchy of subroutines, and the language (flow diagrams) for
pictorially relating the organization within the concepts of the first two.&lt;/p&gt;
&lt;p&gt;Flow diagrams help the man to picture his control options and the relationship
between processes by expressing these interrelationships in two dimensions.&lt;/p&gt;
&lt;p&gt;The main ideas and their interrelationships constitute a conceptual plane. The
next level of detail for a particular notion constitutes another conceptual
plane and so on, until the lowest level of detail has been explicitly expressed
by appropriate computer-language statements or flowchart symbols.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-grail/grail-2.png" src="https://instadeq.com/blog/galleries/post-images/nocode-history-grail/grail-2.png"&gt;
&lt;/figure&gt;
&lt;p&gt;A man may have many files or programs. Each is a diagramatically ordered
collection of closed-process definitions whose instances may appear in other
processes.&lt;/p&gt;
&lt;p&gt;Each closed process is a collection of planes.&lt;/p&gt;
&lt;p&gt;Each plane is a collection of frames implicitly coupled via connectors and may
contain instances of other processes.&lt;/p&gt;
&lt;p&gt;Each frame contains a collection of flowchart symbols or code statements.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="how-it-works"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#toc-entry-5" role="doc-backlink"&gt;How it Works&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A man using a RAND Tablet/Stylus and a random deflection CRT display may draw
flowchart symbols, edit and rearrange them on the display surface, and connect
them appropriately to form a meaningful program. &lt;strong&gt;He may also execute the
program while controlling its execution rate and the amount and content of
information presented to him&lt;/strong&gt;. The system interprets, in real-time, the man's
hand-drawn figures, characters, and other stylus gestures to provide germane
responses on the display surface. &lt;strong&gt;Operations were governed by the principles
that the system should be responsive, easy to understand, easy to use, and
powerful&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The GRAIL system allows the man to print text and draw flowchart symbols
naturally; the system recognizes them accurately in real-time. &lt;strong&gt;The
recognizable symbol set includes the upper-case English alphabet, the numerals,
seventeen special symbols, a scrubbing motion used as an erasure, and six
flowchart symbols-- circle, rectangle, triangle, trapezoid, ellipse, and&lt;/strong&gt;
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Lozenge"&gt;lozenge&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GRAIL's text-editing features are: character placement and replacement,
character-string insertions, line insertions, character and character-string
deletions, and line deletions&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;No positional maneuvers (e.g., moving a cursor) are required.&lt;/p&gt;
&lt;p&gt;An alphanumeric or special symbol may be handprinted in-place (character
placement); when completed, its ink track is replaced by a hardware-generated
character.&lt;/p&gt;
&lt;p&gt;When a character is printed over an existing character (character
replacement), the system replaces the previous character with the
newly-recognized character.&lt;/p&gt;
&lt;p&gt;One erases by scrubbing (as in erasing a blackboard) over the character(s) to
be deleted. Any number of characters within a line may be erased by a single
scrubbing.&lt;/p&gt;
&lt;p&gt;Erasure of blanks shifts the remaining characters (to the right of the blanks)
leftward over the erased blanks.&lt;/p&gt;
&lt;p&gt;One may insert a string of characters between two characters by drawing a caret
(^) between them.&lt;/p&gt;
&lt;p&gt;One may insert blank lines between existing lines by drawing a '&amp;gt;' symbol in
the left margin.&lt;/p&gt;
&lt;p&gt;Erasing all the characters on the line and then erasing again on the blank line
deletes the line entirely.&lt;/p&gt;
&lt;p&gt;Syntax analysis is performed on character strings where it is appropriate, and
errors are indicated by brightening the entire line.&lt;/p&gt;
&lt;p&gt;The man may execute part or all of his program from the console either by
compiling the processes and executing them at CPU speeds or by interpretive
execution.&lt;/p&gt;
&lt;p&gt;The man may execute part or all of his program from the console either by
compiling the processes and executing them at CPU speeds or by interpretive
execution.&lt;/p&gt;
&lt;p&gt;Interpretive execution, designed to be much more interactive, is used for
debugging.&lt;/p&gt;
&lt;p&gt;The man controls execution by starting, stopping, continuing, and terminating
with simple, direct stylus actions.&lt;/p&gt;
&lt;p&gt;He controls execution rate in either single-step or variable mode (up to a
display frame-swapping rate of about 30 ms/frame) as well as the amount and
content of information presented on the display.&lt;/p&gt;
&lt;p&gt;Brightening the next graphic to be executed and scrolling the next code
statement to the top of the viewing window shows the control flow through
flowchart symbols and code statements, respectively.&lt;/p&gt;
&lt;p&gt;The man may overlay or delete the changing data-value display (parameter frame)
at any time; therefore, he may view any change (data value or control step) to
his program.&lt;/p&gt;
&lt;p&gt;The information displayed during interpretive execution is exactly the same
picture that the man constructed. In fact, the man frequently uses the overlay
(e.g. 1 parameters and flowchart) and split-screen (parameter and code state-
ments) images during construction.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-grail/grail-1.png" src="https://instadeq.com/blog/galleries/post-images/nocode-history-grail/grail-1.png"&gt;
&lt;/figure&gt;
&lt;/section&gt;
&lt;section id="trivia"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#toc-entry-6" role="doc-backlink"&gt;Trivia&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The system was implemented on an &lt;a class="reference external" href="https://en.wikipedia.org/wiki/IBM_System/360_Model_40"&gt;IBM System/360 Model 40-G&lt;/a&gt; with two 2311 disk
drives as secondary store.&lt;/p&gt;
&lt;p&gt;The capabilities of the language as a programming system were tested &lt;strong&gt;by
writing GRAIL itself within the flowchart symbolism&lt;/strong&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="resources"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#toc-entry-7" role="doc-backlink"&gt;Resources&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://www.rand.org/pubs/research_memoranda/RM5999.html"&gt;The Grail Project: An Experiment in Man-Machine Communications&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://www.rand.org/pubs/research_memoranda/RM6001.html"&gt;The GRAIL Language and Operations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://www.rand.org/pubs/research_memoranda/RM6002.html"&gt;The GRAIL System Implementation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;💻 &lt;a class="reference external" href="https://jackschaedler.github.io/handwriting-recognition/"&gt;Back to the Future of Handwriting Recognition: An Active Essay Revisiting the GRAIL Handwriting Recognizer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="see-also"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/#toc-entry-8" role="doc-backlink"&gt;See Also&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/"&gt;1959 The Geometry Theorem Machine&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/"&gt;1963 Sketchpad: A man-machine graphical communication system&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/"&gt;1975 Pygmalion: An Executable Electronic Blackboard&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/"&gt;1987 Peridot: UIs by Example, Visual Programming &amp;amp; Constraints&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/"&gt;1991 Frox: A Scriptable SmartTV with a Magic Wand&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/"&gt;1991 Lotus Improv: Spreadsheets Done Right&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;&lt;/div&gt;</description><category>history</category><category>nocode</category><guid>https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/</guid><pubDate>Mon, 07 Mar 2022 14:12:56 GMT</pubDate></item><item><title>No-code History: The Geometry Theorem Machine (1959)</title><link>https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/</link><dc:creator>Instadeq Team</dc:creator><description>&lt;div&gt;&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-geometry-machine/geometer-machine-1.png" src="https://instadeq.com/blog/galleries/post-images/nocode-history-geometry-machine/geometer-machine-1.png"&gt;
&lt;figcaption&gt;
&lt;p&gt;Geometry machine proving PARALELOGRAM EFGH&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;nav class="contents" id="contents" role="doc-toc"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#preface" id="toc-entry-1"&gt;Preface&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#introduction" id="toc-entry-2"&gt;Introduction&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#motivation" id="toc-entry-3"&gt;Motivation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#the-language" id="toc-entry-4"&gt;The Language&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#how-it-works" id="toc-entry-5"&gt;How it Works&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#theory" id="toc-entry-6"&gt;Theory&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#trivia" id="toc-entry-7"&gt;Trivia&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#resources" id="toc-entry-8"&gt;Resources&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#see-also" id="toc-entry-9"&gt;See Also&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="preface"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#toc-entry-1" role="doc-backlink"&gt;Preface&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the process of finding and sorting the history of a field one has to define
a "starting point" and a set of criteria to filter what is and isn't part
of the field being studied.&lt;/p&gt;
&lt;p&gt;This series of posts is an attempt at finding both the starting point and the
filter criteria, which as the series progresses hopefully will be clear enough
to be shared publicly.&lt;/p&gt;
&lt;p&gt;I find the following papers a good approximation to a starting point, the lack of
a visual interface is mostly the result of technology limitations, as the papers say:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The behavior of the system would not be changed if the diagram computer
were replaced by a device that could draw figures on paper and scan them.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;Our first system does not "draw" its own initial figure, but is, instead,
supplied with the diagram in the form of a list of possible coordinates for
the points named in the theorem.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;Like the human mathematician, the geometry machine makes use of the potent heuristic
properties of a diagram to help it distinguish the true from the false sequences.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Note: Almost all text below are quotes from resources listed at the end with
slight editions, emphasis mine, personal comments are lines starting with 💭&lt;/p&gt;
&lt;/section&gt;
&lt;section id="introduction"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#toc-entry-2" role="doc-backlink"&gt;Introduction&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In early spring, 1959, an IBM 704 computer, with the assistance of a program
comprising some 20,000 individual instructions, proved its first theorem in
elementary Euclidean plane geometry. Since that time, the geometry-theorem
proving machine has found solutions to a large number of problems taken from
high-school textbooks and final examinations in plane geometry.&lt;/p&gt;
&lt;p&gt;Some of these problems would be considered quite difficult by the average
high-school student. In fact, it is doubtful whether any but the brightest
students could have produced a solution for any of the latter group when
granted the same amount of prior "training" afforded the geometry machine.&lt;/p&gt;
&lt;p&gt;The geometry machine is able to discover proofs for a significant number of
interesting theorems within the domain of its ad hoc formal system (comprising
theorems on parallel lines, congruence, and equality and inequality of segments
and angles) without resorting to a decision algorithm or exhaustive enumeration
of possible proof sequences.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="motivation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#toc-entry-3" role="doc-backlink"&gt;Motivation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The research project which had as its consequence the geometry-theorem proving
machine was motivated by the desire to learn ways to use modern high-speed
digital computers for the solution of a new and difficult class of problems.&lt;/p&gt;
&lt;p&gt;In particular, we wished to make our computer perform tasks which are generally
considered to require the intervention of human intelligence and ingenuity for
their successful completion.&lt;/p&gt;
&lt;p&gt;If we restrict the universe of problems to the discovery of a proof for a
theorem in some well-defined formal system, then the distinguishing
characteristics of those problems of special interest to us are brought clearly
into focus.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="the-language"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#toc-entry-4" role="doc-backlink"&gt;The Language&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The following theorem is proved in less than a minute.&lt;/p&gt;
&lt;p&gt;Theorem: A point on the bisector of an angle is equidistant from the
sides of the angle:&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-1" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-1"&gt;&lt;/a&gt;Premises
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-2" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-3" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-3"&gt;&lt;/a&gt;Angle ABD equals angle DBC
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-4" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-4"&gt;&lt;/a&gt;Segment AD perpendicular segment AB
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-5" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-5"&gt;&lt;/a&gt;Segment DC perpendicular segment BC
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-6" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-6"&gt;&lt;/a&gt;
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-7" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-7"&gt;&lt;/a&gt;Definition
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-8" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-9" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-9"&gt;&lt;/a&gt;Right angle DAB
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-10" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-10"&gt;&lt;/a&gt;Right angle DCB
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-11" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-11"&gt;&lt;/a&gt;
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-12" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-12"&gt;&lt;/a&gt;Syntactic Symmetries
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-13" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-13"&gt;&lt;/a&gt;
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-14" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-14"&gt;&lt;/a&gt;CA, 88, AC, DD
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-15" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-15"&gt;&lt;/a&gt;
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-16" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-16"&gt;&lt;/a&gt;Goals
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-17" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-17"&gt;&lt;/a&gt;
&lt;a id="rest_code_201ba4c503024d5f8d8435b51424ddcc-18" name="rest_code_201ba4c503024d5f8d8435b51424ddcc-18"&gt;&lt;/a&gt;Segment AD equals segment CD
&lt;/pre&gt;&lt;p&gt;Solution:&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-1" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-1"&gt;&lt;/a&gt;Angle ABD equals angle DBC
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-2" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-2"&gt;&lt;/a&gt;    Premise
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-3" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-3"&gt;&lt;/a&gt;Right angle DAB
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-4" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-4"&gt;&lt;/a&gt;    Definition of perpendicular
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-5" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-5"&gt;&lt;/a&gt;Right angle DCB
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-6" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-6"&gt;&lt;/a&gt;    Definition of perpendicular
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-7" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-7"&gt;&lt;/a&gt;Angle BAD equals angle BCD
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-8" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-8"&gt;&lt;/a&gt;    All right angles are equal
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-9" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-9"&gt;&lt;/a&gt;Segment DB
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-10" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-10"&gt;&lt;/a&gt;    Assumption based on diagram
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-11" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-11"&gt;&lt;/a&gt;Segment BD equals segment BD
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-12" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-12"&gt;&lt;/a&gt;    Identity
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-13" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-13"&gt;&lt;/a&gt;Triangle BCD
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-14" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-14"&gt;&lt;/a&gt;    Assumption based on diagram
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-15" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-15"&gt;&lt;/a&gt;Triangle BAD
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-16" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-16"&gt;&lt;/a&gt;    Assumption based on diagram
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-17" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-17"&gt;&lt;/a&gt;Triangle ADB congruent triangle CDB
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-18" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-18"&gt;&lt;/a&gt;    Side-angle-angle
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-19" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-19"&gt;&lt;/a&gt;Segment AD equals segment CD
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-20" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-20"&gt;&lt;/a&gt;    Corresponding elements of congruent triangles are equal
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-21" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-21"&gt;&lt;/a&gt;
&lt;a id="rest_code_b2e3d391ddcf4006a5c358fde399877a-22" name="rest_code_b2e3d391ddcf4006a5c358fde399877a-22"&gt;&lt;/a&gt;Total elapsed time = 0.3200 minute
&lt;/pre&gt;&lt;p&gt;In less than five minutes, the machine is able to find the attached proof,
which requires the construction of an auxiliary segment.&lt;/p&gt;
&lt;p&gt;Theorem: In a quadrilateral with one pair of opposite sides equal and
Parallel, the other pair of sides are equal:&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-1" name="rest_code_0404ed814fc949c4ad60eee336299d01-1"&gt;&lt;/a&gt;Premises
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-2" name="rest_code_0404ed814fc949c4ad60eee336299d01-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-3" name="rest_code_0404ed814fc949c4ad60eee336299d01-3"&gt;&lt;/a&gt;Quad-lateral ABCD
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-4" name="rest_code_0404ed814fc949c4ad60eee336299d01-4"&gt;&lt;/a&gt;Segment BC parallel segment AD
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-5" name="rest_code_0404ed814fc949c4ad60eee336299d01-5"&gt;&lt;/a&gt;Segment BC equals segment AD
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-6" name="rest_code_0404ed814fc949c4ad60eee336299d01-6"&gt;&lt;/a&gt;
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-7" name="rest_code_0404ed814fc949c4ad60eee336299d01-7"&gt;&lt;/a&gt;CA BA DA
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-8" name="rest_code_0404ed814fc949c4ad60eee336299d01-8"&gt;&lt;/a&gt;DB AB CB
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-9" name="rest_code_0404ed814fc949c4ad60eee336299d01-9"&gt;&lt;/a&gt;AC DC BC
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-10" name="rest_code_0404ed814fc949c4ad60eee336299d01-10"&gt;&lt;/a&gt;BD CD AD
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-11" name="rest_code_0404ed814fc949c4ad60eee336299d01-11"&gt;&lt;/a&gt;
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-12" name="rest_code_0404ed814fc949c4ad60eee336299d01-12"&gt;&lt;/a&gt;Goals
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-13" name="rest_code_0404ed814fc949c4ad60eee336299d01-13"&gt;&lt;/a&gt;
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-14" name="rest_code_0404ed814fc949c4ad60eee336299d01-14"&gt;&lt;/a&gt;Segment AB equals segment CD
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-15" name="rest_code_0404ed814fc949c4ad60eee336299d01-15"&gt;&lt;/a&gt;
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-16" name="rest_code_0404ed814fc949c4ad60eee336299d01-16"&gt;&lt;/a&gt;I am stuck, elapsed time = 0.88 minute
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-17" name="rest_code_0404ed814fc949c4ad60eee336299d01-17"&gt;&lt;/a&gt;
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-18" name="rest_code_0404ed814fc949c4ad60eee336299d01-18"&gt;&lt;/a&gt;Construct segment DB
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-19" name="rest_code_0404ed814fc949c4ad60eee336299d01-19"&gt;&lt;/a&gt;Add premise segment DB
&lt;a id="rest_code_0404ed814fc949c4ad60eee336299d01-20" name="rest_code_0404ed814fc949c4ad60eee336299d01-20"&gt;&lt;/a&gt;Restart problem
&lt;/pre&gt;&lt;p&gt;Solution:&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-1" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-1"&gt;&lt;/a&gt;Segment BC parallel segment AD
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-2" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-2"&gt;&lt;/a&gt;    Premise
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-3" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-3"&gt;&lt;/a&gt;Opp-side CADB
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-4" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-4"&gt;&lt;/a&gt;    Assumption based on diagram
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-5" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-5"&gt;&lt;/a&gt;Segment DB
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-6" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-6"&gt;&lt;/a&gt;    Premise
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-7" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-7"&gt;&lt;/a&gt;Angle ADB equals angle CBD
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-8" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-8"&gt;&lt;/a&gt;    Alternate interior angles of parallel lines
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-9" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-9"&gt;&lt;/a&gt;Segment BC equals segment AD
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-10" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-10"&gt;&lt;/a&gt;    Premise
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-11" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-11"&gt;&lt;/a&gt;Segment BD equals segment DB
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-12" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-12"&gt;&lt;/a&gt;    Identity
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-13" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-13"&gt;&lt;/a&gt;Triangle CDB
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-14" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-14"&gt;&lt;/a&gt;    Assumption based on diagram
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-15" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-15"&gt;&lt;/a&gt;Triangle ABD
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-16" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-16"&gt;&lt;/a&gt;    Assumption based on diagram
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-17" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-17"&gt;&lt;/a&gt;Triangle ABD congruent triangle CDB
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-18" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-18"&gt;&lt;/a&gt;    Side-angle-side
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-19" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-19"&gt;&lt;/a&gt;Segment AB equals segment CD
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-20" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-20"&gt;&lt;/a&gt;    Corresponding elements of congruent triangles
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-21" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-21"&gt;&lt;/a&gt;
&lt;a id="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-22" name="rest_code_0724a28bbfdd4dc595683b3c0991fbb7-22"&gt;&lt;/a&gt;Total elapsed time = 4.06 minutes
&lt;/pre&gt;&lt;/section&gt;
&lt;section id="how-it-works"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#toc-entry-5" role="doc-backlink"&gt;How it Works&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;💭 The use enters the definition of a geometric shape and asks the system to
prove a statement, the system will either provide the proof or inform that it's
"stuck" and needs more definitions to continue. At the end the proof is
provided.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="theory"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#toc-entry-6" role="doc-backlink"&gt;Theory&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Just as manipulation of numbers in arithmetic is the fundamental mode of
operation in contemporary computers, &lt;strong&gt;manipulation of symbols in formal systems
is likely to be the fundamental operating mode of the more sophisticated
problem-solving computers of the future&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It seems clear that while the problems of greatest concern to lay society will
be, for the most part, not completely formalizable, they will have to be
&lt;strong&gt;expressed in some sort of formal system before they can be dealt with by
machine&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Like the human mathematician, the geometry machine &lt;strong&gt;makes use of the potent
heuristic properties of a diagram to help it distinguish the true from the
false sequences&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Although the diagram is useful to the machine in other ways as well, the single
heuristic "Reject as false any statement that is not valid in the diagram" is
sufficient to enable the machine to prove a large class of interesting
theorems, some of which contain a certain trivial kind of construction.&lt;/p&gt;
&lt;p&gt;A heuristic is, in a very real sense, a filter that is interposed between the
solution generator and the solution evaluator for a given class of problems.&lt;/p&gt;
&lt;p&gt;The first requirement for such a filter is a consequence of the fact that its
introduction into the system is never costless. It must, therefore, be
sufficiently "nonporous" to result in a net gain in problem-solving efficiency.&lt;/p&gt;
&lt;p&gt;Secondly, a heuristic will generally remove from consideration a certain number
of sequences that are quick and elegant solutions, if not indeed all solutions,
to some potential problems within the domain of the problem-solving machine.&lt;/p&gt;
&lt;p&gt;The filter must, then, be carefully matched to that subclass of problems in
the domain containing those that are considered "interesting," and are
therefore likely to be posed to the machine.&lt;/p&gt;
&lt;p&gt;The decisive point in favor of geometry was the great heuristic value of the
diagram. &lt;strong&gt;The creative scientist generally finds his most valuable insights
into a problem by considering a model of the formal system in which the problem
is couched&lt;/strong&gt;. In the case of Euclidean geometry, &lt;strong&gt;the semantic interpretation is
so useful that virtually no one would attempt the proof of a theorem in that
system without first drawing a diagram; if not physically, then in the mind's
eye&lt;/strong&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="trivia"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#toc-entry-7" role="doc-backlink"&gt;Trivia&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The geometry machine is in reality a particular state configuration of the
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/IBM_704"&gt;IBM 704&lt;/a&gt; electronic Data Processing Machine.&lt;/p&gt;
&lt;p&gt;In order to ease the task of writing so massive and complex a machine code, a
convenient special-purpose &lt;strong&gt;list processing language&lt;/strong&gt; was designed to be compiled
by the already available FORTRAN system for the IBM 704 computer. The authors
feel that had they not made free use of an intermediate programming language,
it is likely that the geometry program could not have been completed.&lt;/p&gt;
&lt;p&gt;💭 The language mentioned is a precursor of LISP called &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Information_Processing_Language"&gt;Information Processing Language (1956)&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;section id="resources"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#toc-entry-8" role="doc-backlink"&gt;Resources&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://www.labolsadeideas.es/archivos/h-gelernter.pdf"&gt;Realization of a Geometry - Theorem Proving Machine&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://dl.acm.org/doi/10.1145/1460361.1460381"&gt;Empirical explorations of the geometry theorem machine&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="see-also"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/#toc-entry-9" role="doc-backlink"&gt;See Also&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/"&gt;1963 Sketchpad: A man-machine graphical communication system&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/"&gt;1969 GRAIL: GRAphical Input Language&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/"&gt;1975 Pygmalion: An Executable Electronic Blackboard&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/"&gt;1987 Peridot: UIs by Example, Visual Programming &amp;amp; Constraints&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/"&gt;1991 Frox: A Scriptable SmartTV with a Magic Wand&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/"&gt;1991 Lotus Improv: Spreadsheets Done Right&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;&lt;/div&gt;</description><category>history</category><category>nocode</category><guid>https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/</guid><pubDate>Wed, 02 Mar 2022 09:41:51 GMT</pubDate></item><item><title>No-code History: Pygmalion (1975)</title><link>https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/</link><dc:creator>Instadeq Team</dc:creator><description>&lt;div&gt;&lt;p&gt;Note: Almost all text below are quotes from resources listed at the end with slight editions.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="/galleries/post-images/nocode-history-pygmalion/01Pygmalion22.jpg" src="https://instadeq.com/blog/galleries/post-images/nocode-history-pygmalion/01Pygmalion22.jpg"&gt;
&lt;figcaption&gt;
&lt;p&gt;Pygmalion being used to define factorial&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;nav class="contents" id="contents" role="doc-toc"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#introduction" id="toc-entry-1"&gt;Introduction&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#motivation" id="toc-entry-2"&gt;Motivation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#the-language" id="toc-entry-3"&gt;The Language&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#how-it-works" id="toc-entry-4"&gt;How it Works&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#retrospective" id="toc-entry-5"&gt;Retrospective&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#theory" id="toc-entry-6"&gt;Theory&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#trivia" id="toc-entry-7"&gt;Trivia&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#resources" id="toc-entry-8"&gt;Resources&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#see-also" id="toc-entry-9"&gt;See Also&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="introduction"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#toc-entry-1" role="doc-backlink"&gt;Introduction&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pygmalion was an early attempt to improve the process of programming.&lt;/p&gt;
&lt;p&gt;By studying how people think and communicate, it attempted to build a
programming environment that facilitated communication and stimulated people's
ability to think creatively.&lt;/p&gt;
&lt;p&gt;While it never went beyond a toy system, Pygmalion embodied some ideas that
still seem to have promise today:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;It allowed ideas to be worked out via sketches on the screen and then was
able to reexecute the sketches on new data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It introduced icons as the basic entity for representing and controlling
programs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Programming was done by editing sketches and then recording the editing
actions. This avoided the abstract step of writing down statements in a
programming language.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example data were always concrete, never abstract.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It used analogical representations for data. This reduced the translation
distance between mental models and computer models of data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It represented programs as movies.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="motivation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#toc-entry-2" role="doc-backlink"&gt;Motivation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Its design was based on the observation that for some people blackboards
provide significant aid to communication.&lt;/p&gt;
&lt;p&gt;If you put two scientists together in a room, there had better be a blackboard
in it or they will have trouble communicating.&lt;/p&gt;
&lt;p&gt;If there is one, they will immediately go to it and begin sketching ideas.
Their sketches often contribute as much to the conversation as their words and
gestures. Why can't people communicate with computers in the same way?&lt;/p&gt;
&lt;p&gt;Pygmalion was an attempt to allow people to use their enactive and iconic
mentalities along with the symbolic in solving problems.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="the-language"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#toc-entry-3" role="doc-backlink"&gt;The Language&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pygmalion is a two-dimensional, visual programming environment.&lt;/p&gt;
&lt;p&gt;It is both a programming language and a medium for experimenting with ideas.
Communication between human and computer is by means of visual entities called
"icons," subsuming the notions of variable, data structure, function and
picture. Icons are sketched on the display screen.&lt;/p&gt;
&lt;p&gt;The heart of the system is an interactive "remembering" editor for icons, which
both executes operations and records them for later reexecution. The display
screen is viewed as a picture to be edited.&lt;/p&gt;
&lt;p&gt;Programming consists of creating a sequence of display images, the last of
which contains the desired information.&lt;/p&gt;
&lt;p&gt;In the Pygmalion approach, a programmer sees and thinks about a program as a
series of screen images or snapshots, like the frames of a movie.&lt;/p&gt;
&lt;p&gt;One starts with an image representing the initial state and transforms each
image into the next by editing it to produce a new image. The programmer
continues to edit until the desired picture appears. When one watches a program
execute, it is similar to watching a movie. The difference is that, depending
on the inputs, Pygmalion movies may change every time they are played.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="how-it-works"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#toc-entry-4" role="doc-backlink"&gt;How it Works&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Below is a video demonstration:&lt;/p&gt;
&lt;div class="youtube-video"&gt;
&lt;iframe width="720" height="540" src="https://www.youtube-nocookie.com/embed/xNW8wUpbqQM?rel=0&amp;amp;wmode=transparent&amp;amp;start=304" frameborder="0" allow="encrypted-media" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;p&gt;The user creates programs by editing graphical snapshots of the computation.
Essentially the user treats the display screen as an "electronic blackboard",
using it to work out algorithms on specific concrete examples&lt;/p&gt;
&lt;p&gt;Partially specified programs could be executed. The system asks the user what
to do next when it reaches the end of a branch.&lt;/p&gt;
&lt;p&gt;A person would define factorial by picking some number, say "6", and then
working out the answer for factorial(6) using the display screen as a
"blackboard."&lt;/p&gt;
&lt;p&gt;The user invokes the "define" operation, and types in the name "factorial."&lt;/p&gt;
&lt;p&gt;The first thing the system does with a newly created function is to capture the
screen state.&lt;/p&gt;
&lt;p&gt;Whenever the function is invoked, it restores the screen to this state. This is
so that the function will execute the same way regardless of what is on the
screen when it is called.&lt;/p&gt;
&lt;p&gt;Icons may be deliberately left on the screen when a function is defined; these
act as global variables. When the function is invoked, the "global" icons and
their current values are restored to the screen and are therefore available to
the function.&lt;/p&gt;
&lt;p&gt;Whenever all the arguments to a function are filled in, the system immediately
invokes it.&lt;/p&gt;
&lt;p&gt;Functions in Pygmalion can be invoked even if their code is undefined or
incomplete. When the system reaches a part of the function that has not yet
been defined, it traps to the user asking what to do next.&lt;/p&gt;
&lt;p&gt;The process will repeat until all parts are specified and the program can run
to completion.&lt;/p&gt;
&lt;p&gt;Finally, it restores the screen to its state when the function was initially
invoked.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="retrospective"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#toc-entry-5" role="doc-backlink"&gt;Retrospective&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There are three main things the author would do differently:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Address a broader class of users. Pygmalion was designed for a specific
target audience: computer scientists. These people already know how to
program, and they understand programming concepts such as variables and
iteration. Would like to see if the approach could be applied to a wider
audience: business people, homemakers, teachers, children, the average "man
on the street." This requires using objects and actions in the conceptual
space of these users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The biggest weakness of Pygmalion, and of all the programming by
demonstration systems that have followed it to date, is that it is a toy
system. Only simple algorithms could be programmed. The biggest challenge for
programming by demonstration efforts is to build a practical system in which
nontrivial programs can be written.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Put a greater emphasis on the user interface. Given what we know about
graphical user interfaces today, it wouldn't be hard to improve the interface
dramatically. Good esthetics are an important factor in the users' enjoyment
of a system, and enjoyment is crucial to creativity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="theory"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#toc-entry-6" role="doc-backlink"&gt;Theory&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Writing static language statements interspersed with compile-run-debug-edit
periods is obviously a poor way to communicate. Suppose two humans tried to
interact this way! Specifically, it is poor because it is:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Abstract&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;The programmer must mentally construct a model of the state of the machine
when the program will execute, and then write statements dealing with that
imagined state.&lt;/p&gt;
&lt;p&gt;We must find a way to allow programmers to work with concrete values
without sacrificing generality.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;Non-interactive&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;Instead of speeding up the debug-edit-recompile loop, programmers should eliminate it!&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;"Fregean"&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;The most articulate representation for a program requires the least
translation between the internal representation in the mind and the
external representation in the medium.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://scholar.google.com/citations?user=lTc3UwsAAAAJ&amp;amp;hl=en&amp;amp;oi=ao"&gt;Aaron Sloman&lt;/a&gt; distinguishes two kinds of data representations: "analogical"
and &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Gottlob_Frege"&gt;"Fregean"&lt;/a&gt;.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Analogical representations are similar in structure to the things they describe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fregean representations have no such similarity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;One of the advantages of analogical representations over Fregean ones is that
structures and actions in a context using analogical representations (a
"metaphorical" context) have a functional similarity to structures and actions
in the context being modeled.&lt;/p&gt;
&lt;p&gt;Jerome Bruner, in his pioneering work on education, identified three ways of
thinking, or "mentalities":&lt;/p&gt;
&lt;dl class="simple"&gt;
&lt;dt&gt;Enactive&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;in which learning is accomplished by doing. A baby learns what a rattle is
by shaking it. A child learns to ride a bicycle by riding one.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;Iconic&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;in which learning and thinking utilize pictures. A child learns what a
horse is by seeing one or a picture of one.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;Symbolic&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;in which learning and thinking are by means of Fregean symbols. One of the
main goals of education today is to teach people to think symbolically.&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;All three mentalities are valuable at different times and can often be combined
to solve problems. All three skills should be preserved.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="trivia"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#toc-entry-7" role="doc-backlink"&gt;Trivia&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pygmalion is the origin of the concept of icons as it now appears in graphical
user interfaces on personal computers.&lt;/p&gt;
&lt;p&gt;After completing his thesis, David Canfield Smith joined &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Xerox_Star"&gt;Xerox's "Star"&lt;/a&gt;
computer project. The first thing he did was recast the programmer-oriented
icons of Pygmalion into office-oriented ones representing documents, folders,
file cabinets, mail boxes, telephones, wastebaskets, etc.&lt;/p&gt;
&lt;p&gt;Pygmalion was implemented in Smalltalk on a computer wht 64 Kilobytes of RAM and no virtual memory.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="resources"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#toc-entry-8" role="doc-backlink"&gt;Resources&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="http://acypher.com/wwid/Chapters/01Pygmalion.html"&gt;Pygmalion: An Executable Electronic Blackboard&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://apps.dtic.mil/sti/pdfs/ADA016811.pdf"&gt;Pygmalion: A Creative Programming Environment&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎥 &lt;a class="reference external" href="https://www.youtube.com/watch?app=desktop&amp;amp;v=xNW8wUpbqQM"&gt;SIGCHI Lifetime Practice Award Talk: Icons, Metaphor, and End-User Programming (CHI 2020)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="see-also"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/#toc-entry-9" role="doc-backlink"&gt;See Also&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-the-geometry-theorem-machine-1959/"&gt;1959 The Geometry Theorem Machine&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-sketchpad-a-man-machine-graphical-communication-system-1963/"&gt;1963 Sketchpad: A man-machine graphical communication system&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-graphical-input-language-grail-1969/"&gt;1969 GRAIL: GRAphical Input Language&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-peridot-uis-by-example-visual-programming-constraints-1987/"&gt;1987 Peridot: UIs by Example, Visual Programming &amp;amp; Constraints&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-frox-a-scriptable-smarttv-with-a-magic-wand-1991/"&gt;1991 Frox: A Scriptable SmartTV with a Magic Wand&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📝 &lt;a class="reference external" href="https://instadeq.com/blog/posts/no-code-history-lotus-improv-spreadsheets-done-right-1991/"&gt;1991 Lotus Improv: Spreadsheets Done Right&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;&lt;/div&gt;</description><category>history</category><category>nocode</category><guid>https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/</guid><pubDate>Mon, 21 Feb 2022 10:14:19 GMT</pubDate></item></channel></rss>