We looked at the Seaside version of SmallWiki and decided it did not work
well enough. We were adding security features. Since security depends on
Actions, and since the Seaside version didn't have Actions, it seemed like
it would not be a good base for work. Links don't work. I imagine lots of
other things wouldn't work, but that was enough to persuade me to keep
working with the older version.
The main problem with the old version is that Actions are a mixture of
Commands (a model idea) and GUI. We tried for several days to treat Actions
like real Commands and to write them out to a log, but we eventually gave up
on that and instead used the Storage system to create a log. I know several
things wrong with our current implementation, but we can fix them with
enough work. Life would have been much easier if Actions had been only
commands and we could have written them to a log and then restored them to
recover the log. However, the use of callbacks made that impossible.
Callbacks are probably not as bad as I claimed a few days ago. We were
trying to do things with Actions that they were not designed to do. However,
it is often hard to tell what a framework can do. Normally it is possible
to write Commands to a log. It is not possible to write Actions to a log if
you intend to execute them after you read them back.
We added persistence to SmallWiki by having each page-change write to a log.
You can recover from a crash by restarting the latest image and reading the
log. We also added a VirtualFolder that allows one user to access a set of
pages with a particular name that are in other users folders. I plan to use
this in a course I teach. We wrote some actions that will help administer
these classes. There are a few more things that need to be done before
SmallWiki can replace our WikiWorks server, but we are getting close, and I
understand it much better now.
Actions are very important. I don't understand why the Seaside version
doesn't have it. Probably it is just because it is incomplete.
It is a mistake to make page and folder be the same. How can you make new
pages without using the component editor? New pages on a page should be in
the same folder, new pages on a folder should be inside that folder. What
would you do if there were no difference between pages and folders?
Seaside will make Actions simpler. However, it is possible to make Actions
simpler without Seaside. Callbacks should assign values ONLY to instance
variables of Actions. Once the Action is complete, it should be
"completed". This would make the behavior of each action easy to
understand. They could also be used in logs. It might even be easy to
refactor them to be like this. I might look at it next week.
-Ralph