Welcome to the Smalltalk Zoo (this page is under construction)
We begin with an atomic concept that is simple and general: simply a unique ID, an author, and a time of creation (and
Here you will find various Smalltalk stories and artifacts that I have collected from many years of building Smalltalk systems at Xerox, Apple, HP, and Disney. This collection began as background material for a paper that I wrote for the ACM's History of Programming Languages conference in 2020.
Notes
When an object is copied, it gets a new ID, author, time and sequence number. A whole bunch of notes, for instance, can be made simply by copying an existing note and, where desired, editing its content text.
Much of this project is simple, almost trivial, database behavior. The hopefully interesting aspect is its brute simplicity, and therefore the ease of conducting experiments, such as making this all work as a collaborative information environment, and including active content as well as more conventional information.
Any item can have properties added to it to be more useful as, eg, a sticky note, calendar item, a contact item, or an email. Some properties are atomic, such as a tag, "family", and some may have associated values such as "date" for a calendar item. Some properties may be collections or ranges, and we'll try to do a nice job of that before we're done.
Simulations
Papers
What is it?
This is all similar to the process of defining new record types in a database and then making many instances of them, but there are other goals here: To make it very simple and thus easy to experiment with To make it concrete so as to be understandable to end-users To make it collaborative, and thus a tool that we can actually use
Bootstrap Files
Most of these are preserved only as printouts, though someone who is good at OCR could probably recover the text without too much trouble.
To make this exercise meaningful, so we'll start with a basic item, and add text to it like a "sticky note", arguably the simplest usable item of personal information.
Stories
ALLDEFS - this is actual text of the bootstrap definitions for Smalltalk-72. MDefs - A scan of a similar
A couple of things to try...
X
+
Menu
Yet to do...
X
+
Menu
Things to fix...
X
+
Menu
Workspace
X
+
Menu
All the shortcuts listed here that include CMD for MacOS can be done using CTRL on Windows. General: CMD + R = browser reload!!! Be careful, you will lose your work if is not saved! CMD + W = close window!!! Be careful, you will lose your work if is not saved! CMD + S = save, either the world (if selected) or the code (when editing) CMD + A = select all (text only) CMD + C = copy (text only) CMD + V = paste (text only) CMD + X = cut (text only) CMD + K = open workspace (empty editor window) CMD + O = open ObjectEditor CMD + P = open PartsBin CMD + B = open system browser (internal system editor for modules, classes, etc.) Code execution: (most of them work with the current line or the code that is selected) CMD + D = do it (executes the statement) CMD + E = exchange (exchange the last two selections) CMD + SHIFT + I = inspect (inspects the statement, therefore opens a window with attributes) CMD + P = print it (prints the result of the statement) CMD + SHIFT + P = protocol (opens a menu with all the methods that the statement/object has) CMD + F = find (finds the selected text in the text and asks for a search string) CMD + G = find again/next CMD + M = do more (do the last replacement again for the next occurrence) CMD + SHIFT + M = do much more (do the last replacement again until the end of the text) CMD + SHIFT + F = find source/browse implementors (finds the statement in the source code) CMD + SHIFT + B = browse class (finds the statement in the source code) CMD + ] = indent selection CMD + [ = outdent selection CMD + / = comment/uncomment selection Morph manipulation: CMD + click / right-click only = get halo CMD + SHIFT + click / left-click only = add object to group selection SHIFT + drag = copy morph = (in the world) select several objects at once right-click = world menu (when clicked on background or context menu for e.g. button) ALT (when dragging/resizing) = gridding (default: every 10 pixel) SHIFT (when resizing) = keep aspect ratio SHIFT (when transforming) = scaling Text manipulation: CMD + B = bold (works on selected text) CMD + I = italic (works on selected text) CMD + U = underline (works on selected text) CMD + L = open font editor (works on selected text or text morph) CMD + K = add link (works on selected text) CMD + O = add do it/JavaScript code (works on selected text) CMD + SHIFT + U = un-emphasize (removes all style from selected text) CMD + SHIFT + S = convert tabs to spaces CMD + 1 = align left (works on text morph) CMD + 2 = align right (works on text morph) CMD + 3 = align center (works on text morph) CMD + 5 = set font size to 8 (works on text morph) CMD + 6 = set font size to 12 (works on text morph) CMD + 7 = set font size to 18 (works on text morph) CMD + 8 = set font size to 30 (works on text morph) CMD + + = increase font size (works on selected text or text morph) CMD + - = decrease font size (works on selected text or text morph) About More and Exchange These are two operations not seen in most other environments (other than Squeak ;-), but you'll like them if you try them. More is like search-and-replace except that you don't have to plan ahead. Overtype a variable name and then, when you remember it is used elsewhere, just type cmd-M -- it will find the next occurrence and make the same replacement. You can also use cmd-SHIFT-M to make the same substitution throughout the remaining text. Exchange is also unusual in that it depends not only on the current selection, but also the previous selection. This is a minor no-no in UI design, but you will find it to be entirely natural. For instance, select one line of text (twice-click at left margin) and then select another line, after which cmd-E will exchange those two lines. Similarly the then and else clauses of an if statement can be exchanged with this one command.
Helpful Shortcuts
X
M