“The journey of Squeak is not like a door but, is instead, a path meandering through the field of learning and tinkering.” – Author Unknown.
Squeak is a strange and fun world, not so much a programming language, because it really is independent of anything else seen in today’s computing. New Squeakers should try to forget the assumptions they have about how a GUI works before they start working with the Squeak. Squeak is a fully object oriented system, which is both elegantly simple and complicated at the same time. Squeak has its roots in educational research and is designed to provide students, both the children and adult kind, a place to learn, explore, and grow.
Squeak is a toy; the kind that one spends hours tinkering and trying to get to work properly. Hours of frustration yields to a few seconds of enjoyment when something finally works. On the other hand, children often stay in the e-toys area of Squeak and can spend hours enjoying making cars and interactively destroying actors in Wonderland.
The goal of this case study is to provide the background information on our Squeak help agent and provide a few tips and suggestions for those who will soon start working in the Squeak environment.
The first hurtle to working with Squeak is getting a feel for how it works and how to move around the interface. Once one becomes familiar with the system, it is remarkable easy to use and understand since most things remain consistent with the overall design. The tool most powerful and useful tools are the Workspace and the System Browser. The first of which allows the user to play around with the system in code and the later which allows one to browse the entire system.
One of the major problems the lack of consistent documentation across classes. The Squeak community works under the assumption that the code is the documentation and provides significant facilities for navigating the code through Browsers and Inspectors. However, there is a lack of convention among Smalltalk developers and also very little in persistent documentation that is available outside of Squeak.
Two areas of documentation need to be developed as Squeak continues mature.
Avie, the Snowman in the upper left, is there to help new Squeakers.
Here are some screenshots from the project.
The repository editor is used by help system authors. On the left is a list of Tasks, each of which contain 1 or more steps. Each step has three sections, a human-readable instruction, the “do code” to execute the step on behalf of the user, and the “check code” which verifies that the user has completed a step before moving on. Both the check and do code are native Squeak, which makes use of the WorldLiason library.
The help agent shows the user how to perform system tasks such as opening files. Here she has just opened a System Browser and dragged to a new location on the screen.
By simply right-clicking on the agent, a user can choose to browse for help tasks, search for keywords of interest, tell the agent to return to the home position, and more.
Throughout the project, our group philosophy was to develop a system that would actually be usable. This means that we wanted to use Squeakisms correctly and avoid reinventing the wheel.
The help agent was implemented using Wonderland and the Snowman was chosen to be the actor since it was fairly easy to create some nice animations with the snowman form (too bad there is not a paper-click wonderland actor).
For the scriptable portions of help tasks, the Squeak compiler was used, which prevented the group from having to build an interpreter from scratch. A function library was developed in order to make writing help scripts easier.
The final design emerged after many short meetings throughout the semester. Centric to the design is the help repository, which manages the collection of tasks that the agent knows about. No god-class exists in the design, though the Guide appears to be centric to the end-user since it provides the interface that first launches the system.
Class: HelpRepository
Holds all the current tasks that are in the system and allows user to add new task, remove a task and get a task if they pass in the name of the task. It can also return a list of names of the tasks in the repository.
Class: RepositoryGUI
Is an administrator tool with a gui to make it easy to add, remove and edit both tasks and their steps. Shows all the information available in HelpRepository.
Class: TaskInstructions
Is the data structure that holds the information for a single task in the HelpRepository. Has methods for accessing the information inside the class as well as methods to store a file and load from a file.
Class: Step
Is a data structure to hold the information about a step. Allows user to input or return code to do the step or to check to see if the step has been done. Also has a description. Each TaskInstructions can have many steps.
Class: Guide
Is an interface class to extend the functionality of HelpRepository allowing the users to search for tasks by keyword display tasks and iterate threw a task step by step.
Class: Interface2D
Is an input and output bubble for entering the keywords to search and select the available task to display.
Class: AnimatedButton
Avatar to move around the screen and show people how to do things. The avatar has 3 idle behaviors. Can move to, look at and point to input locations on the screen.
Class: WorldLiason
Handles interaction between the steps and the squeak environment. Has a library of functions for the descriptions to use.
Class: InterpolatableString
Was used for the animation of typing. Got out of lecture slides.
Iterative group development is a great way of building a fairly complex piece of software quickly. Here is how our group worked together each week.
Here are the files necessary to run our help system.
To install the program, file in Avatar.st and run the following command:
Guide browse.The Help Repository editor will appear. This is the interface used to edit the contents of the help system. You should choose the "File In" button and select the Tasks.sfo file. To open the help agent, run the following:
Guide new.
You may also wish to take a look at the Zen Squeak power point presentation, which was used on the last day of class.
ZenSqueak.ppt
This glossary was constructed with the aide of Google definitions, dictionary.com, and the other Squeak-centric ones were written just for fun.
Agent
From dictionary.com:
Avatar
From the Sanscrit for the incarnation of Godhead, an avatar is the 'body' you 'wear' in a virtual community - an animated, articulated representation of a human which represents you, the user, in any virtual environment. Some of the more sophisticated chat rooms provide the facility to 'chat' over the 'net via the visual representation of interacting human forms.
Squeakism
A Squeak-centric way of doing things. The way the Squeak community thinks.