View this PageEdit this PageAttachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide
Hotspots: Admin Pages | Turn-in Site |
Current Links: Cases Final Project Summer 2007

Zen Squeak by "Anything But Squeaky Clean"

Zen Squeak – Directing the course of the future, while remaining in the past

Zen Squeak – Helping direct the course of Squeak’s future.


“The journey of Squeak is not like a door but, is instead, a path meandering through the field of learning and tinkering.” – Author Unknown.

A Brief Introduction

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.

Learning to Navigate Squeak

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.


Documenting Squeak

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.


Project Screen Shots


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.


Creating an Interactive Help Agent

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.

Class Descriptions and UML


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.



Tips for Group Success

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.


  1. We would meet at the first of each week to discuss the project and make overall design decisions for each milestone. We would pull out the CRC cards and documentation from previous parts of the project and discus the best approach to the latest customer feedback (the TA in this case). After the weekly planning meeting, each team member would have a research assignment for a particular sub-project for the approaching milestone.

  2. All team members worked separately, away from the group, during the research phase. This is the time the member would read up on any available documentation on his or her assigned sub-project and write experimental Smalltalk.

  3. Towards the end of the week, the entire team meets in the lab to do the actually development for the milestone. This XP-like development environment allows for rapid coding in which each member comes to the group prepared for his or her sub-project.

    Doing the major portion of code as a group is very important to avoid some of the pitfalls of code integration and misunderstandings. All of the group members are available for detailed discussion on how they are implementing a certain portion of the code and real-time integration allows for the big picture to be realized very rapidly.


Download and Installation


Here are the files necessary to run our help system.


To install the program, file in 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.



Group Members


This glossary was constructed with the aide of Google definitions,, and the other Squeak-centric ones were written just for fun.




  1. One that acts or has the power or authority to act.
  2. One empowered to act for or represent another: an author's agent; an insurance agent.
  3. A means by which something is done or caused; instrument.
  4. A force or substance that causes a change: a chemical agent; an infectious agent.
  5. A representative or official of a government or administrative department of a government: an FBI agent.
  6. A spy.
  7. Linguistics. The noun or noun phrase that specifies the person through whom or the means by which an action is effected.



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.



A Squeak-centric way of doing things. The way the Squeak community thinks.

Link to this Page