Last updated at 12:20 pm UTC on 16 January 2006
InfoSqueak would be an information manager written in Squeak. Here are some of the general issues to resolve.
=== simplicity ====
The very simplest storage and presentation of data is probably a scrolling text window with all versions of a document or program source, its input, and its output, each after the other in the window.
The next simplest is probably a presentation of each version of a data item (program source, documentation, input or output text) shown as text, switchable with a simple linear list of all the items displaying the first few characters of the text from each data item, where new items are added by making changes in the text editor and pressing a "version" button.
Now this is a very simple system. Obviously, there would be benefit in having a more complex system.
=== complexity ====
Here are some ideas to think about for a system involving greater complexity:
1. What if I want to see the data items as other than text? What if they are HTML? Or bitmaps? Or sounds?
2. What if I want to see alternative presentations of the data items in the lists (names, icons)?
3. What if I want the list to be hierarchical? Or a web? Or nodes in two-d spaces, some being doorways to other two-d spaces? Or 3d spaces? Or multiple lists active simultaneously?
4. What if I want more information about each data item (user creating, last access)? How are items tagged indicating they have new properties? How are the tags tagged, etc.?
5. Do I allow deleting items? Or, like ENVY, can items only be deleted by cloning a repository and leaving items in the clone?
6. How can the system scale to handle multiple users and billions of data items?
7. What if I want to look at two data items side by side? How can I compare and contrast them? How do I present an arbitrary number of data items at once?
8. How can changes be made to multiple items at once through transactions? Can transactions be undone? Or does one only maintain a record that the transaction should be considered to be undone, even though there is a record or audit trail? Are lesser changes stored (like minor edits changing a single character), and if so, does efficiency matter?
9. What if I want to export data items or import them? Can that be done by a GUI? Would I want custom Squeak scripts that know how to import and export groups of related data items from the repository? How would they be stored in the repository?
10. How do I show that one item is related to another? How do I show it was used as the starting point for another? What if I mix several items together to make another – how do I show that?
11. At what point does a repository cross over into being a development environment (or vice versa?) When does it become an OS? When does it become an active OO database with triggered Squeak code like GemStone does with Smalltalk or Java?
12. How can the system be searched? How can the results of a search be presented? How can you hide things so they don't clutter up future searches?
13. How do you support the notion of project or workspace – a simplified view of the repository for a current need? How do you maintain versions of workspaces and how do you present those versions?
14. How do you deal with changes in the underlying repository storage format? How do you deal with continued encrusting of data types and links and new user needs for searching and archiving? (All questions William Kent wrestles with in his book "Data & Reality".)