Archive for the ‘Recipes’ Category

Zeetix, Discworld, and Terry Pratchett

February 22, 2009

Like every similar framework, language, or environment, Zeetix needs LOTS of names. Lots of them are names for new concepts, and lots of them are names for things that are like other things but different in significant ways.

Zeetix draws on Terry Pratchett’s “Discworld” series in the same way that Python draws in Monty Python and Ruby draws on jewels and jewelry. If you haven’t read any Terry Pratchett, if you like British humor (especially if you like “Hitchhiker’s Guide”), fantasy (sort of), and satire, then you might like Terry Pratchett. Discworld is to fantasy what Hitchhiker’s Guide is to science fiction.

In addition to the novels themselves (as far as I know, all are in print and readily available), a multitude of online resources exist to inform your exploration of Discworld. I particularly like lspace.

Some immediate names that I’ll be using in Zeetix are “Glooper”, “Clacks”, and probably “Hex”. I encourage you to see “Glooper“, “Clacks“, and probably “Hex” for context.


I (Tom) did some early Zeetix development in Smalltalk (specifically, IBM Smalltalk). One early motivator was my desire to have a tool with which to build families of websites, where each website was represented as a directed graph of objects, instead of as a file hierarchy. I called this tool, for want of a better name, “SiteBuilder”. This was before RubyOnRails existed, and was mostly because I found myself frustrated with the limitations and learning curve of contemporary versions of Dreamweaver, Zope, Django, and so on.

I’m still using the Smalltalk “SiteBuilder” (on my own development PC), and I am acutely aware of the need to import it into the Zeetix framework. When I do so, it will be called “Glooper”.

I’ll write more about Glooper as I get time.


Zeetix will need to model and wrap the semantics of the internet and web. Zeetix will use “Clacks” (and variants of this theme) to name that stuff.


Underneath Zeetix is a universal virtual system. Really universal. Zeetix will use variants of “Hex” and to name related resources and assets.


Create a new clazz

February 9, 2009

For a class named “Foo” in assembly “Bar”:

  1. Create a sql file that adds suitable records to it, behavior, clazz, and metaclazz, and any superclazzes. If Foo is to have persistent instances, this file should also create a new table named “foo”. By convention, the sql file is named “create_foo.sql”, and is kept in the “sql” subdirectory of the “Bar” directory. NOTE: Each new object requires a new version_id/object_id, and these must be kept in synch with the ZeeStore.
  2. Run, from either the command line or MySqlQueryBrowser, the sql created in the previous step. Validate that the new records exist in the ZeeStore and are well-formed.
  3. Create a python file containing class definitions for the new clazz and its metaclazz. The new file should be named “”, and should be located in the “Bar” subdirectory of the zeetix root. Inside “”, there should be an import statement that imports the superclazz, and class definitions for “Foo” and “FooClazz”.
  4. Create another python file containing class definitions for the record clazzes of the new clazz. The new file should be named “”, and should be located in the “Bar” subdirectory of the zeetix root (alongside “”). Inside “”, there should be an import statement that imports the superclazz (another descendant of ItRecord), and class definitions for “FooRecord” and “FooRecordClazz”.
  5. Add implementations of hook methods required by the various framework interfaces, such as “doTransientAttributeNames”, “doTableName”, and so on.
  6. Add an import line and installation code to “” that imports and installs Foo and FooRecord.

With proper tweaking of the existing Zeetix naming conventions, it should be possible to generate the required column names (in the DB), record attribute names (in the record clazz), and instance attributes (in the new clazz) from the specification provided in the original subclazz creation method. I do some of this now (I use ZeeString), and could do MUCH MUCH more.

Adding a new Assembly/SubAssembly

February 4, 2009
  1. Create the assembly directory.
  2. Add the module to the assembly directory.
  3. Create the assembly module in the assembly directory.
  4. Add the clazzes in the assembly to the assembly module.
  5. Create a clazz module for each clazz in the assembly directory.
  6. Add an import for the new assembly to (ouch!)
  7. Add the assembly to the doAssemblyNameList method of each application that requires the new assembly.