javadocs updated
As I said before, the client-side API for the DRM is done. Updated javadocs have now been posted. Only the inheritance model needs work.
Exploring Time as a dimension in Software Applications and further developments of the AgileWiki project, salted lightly with personal notes.
As I said before, the client-side API for the DRM is done. Updated javadocs have now been posted. Only the inheritance model needs work.
I'm very glad to be finished with the common API for now. I'll just note that this is the client API for the DRM, though the methods apply to COODBMS's RolonicElements and many of the methods also apply to the CowDb handles and elements.
release 0.9.2:
Took most of the day off, but still managed to get some good work done this evening.
http://agilewiki.sourceforge.net/
I've started documenting more now, which is slowing things down. But when working on API, speed is not a consideration. So while documenting the API in the common package I'm doing the deep thinking necessary for the creation of a usable API.
http://agilewiki.sourceforge.net/org/agilewiki/package-summary.html
release 3.3:
Spent the day polishing the common API. The javadoc really needs work now and I expect to get to that in a day or two.
I am very much behind on my writing and it is about time that I give it the appropriate focus/effort. I'll start once I've spent a bit more time with the DRM. But before beginning, some of the names used in the code need to be changed. Indeed, the worst offenders are the app attributes, which are really not attributes at all. (And all the worse because we already have real attributes and this is just too confusing.) So the attribute apps have been renamed to entry apps--which is consistent with Rolonic nominclature.
release 0.9.1:
Big day today--cleaned up common. ICommonObject now has two sub-interfaces: ICommonElement and ICommonHandle. And a lot of spurious methods have been removed. Common is now the basic API for AgileWiki, though I still need to spend some time on the javadocs.
CommonObject and Base64 have been moved to a "common" jar file, allowing their use without any extra bagage. (COODBMS's Document Rolon Model has no other dependencies.) This is a first small step to separate client/server processes.
The new CommonObject is a bit strange, but I've been working with the code and I really like it. At the highest level, you are just working with common objects and handles. And you can do a whole lot with just that. There are times when you need some additional capabilities, and only then do you need to do any casting.
release 0.9:
I'm 1/4th done a major API cleanup.
Previously, DRM was intended only for creating scripts. So methods which dealt with navigating or editing the model began with "m" to distinguish them from actions being added to the script.
At some point we will want to implement COODBMS as client/server, where both client and server processes make use of the element model. This should be a very fast system if we can take full advantage of RoleML script, with a lot of work being done by each transaction. (Transactions having high overhead.) Note also that each transaction will consist of a single request from the client and a single response from the server--which will make it very fast indeed!
release 3.1.1:
o Name is now persisted as an attribute--otherwise problems with round trips.
o Symbolic references are now expressed in XML as text content rather than as an attribute--again, to avoid round-trip issues.
o The factory now sports the String eXpress(PNode node) method for expressing nodes as XML.
o Bug fix: Xpress was displaying too many handles. Now its output is similar to Display--only handles with symbolic references are displayed.
o Bind now supports well known names.
Complete round trips are now fully supported: Rolon -> RoleML -> DRM -> RoleML -> Rolon. So you can copy things out of the database, use DRM to edit them, and then use the results to create new Rolons. Still need to write a guide, but other than that it is done--with 3 sample programs.
release 0.8.1:
The name problem has been handled. The common object now manages both the name and the immutableName flag. I've also fixed handle now so that symbolic references are expressed in XML as text content to avoid a round-trip issue similar to the one I saw with name.
The XML Model Binder is now done. In the process, I realized that there will be round trip (Rolon => RoleML => Rolon) problems with the current implementation of name in Persistent Object. I'm not impressed. There's also a really big hole--handle bindings.
CowDb release 3.1:
Lots o refactoring this afternoon and evening. CommonObject now handles attributes and role, whereas before there were 3 different ways attributes were handled. I've tested everything at least once, but not with all the changes. Tomorrow I'll test more carefully and then do the releases.
OK, the create method for model elements now models the create element for Rolonic Elements, which is goodness. Indeed, if you now look at the check register you will see that we are able to use the same model class, ActionModel, to model two different Rolonic Elements. And we are ready for DRM binding, only that project will be delayed a bit...
Spent the evening refactoring the Document Rolon Model. The factory now instantiates ElementModel when it doesn't recognize the role, which is great for modeling. The next step will be to drop those subclasses which simply contain constructors and then to modify the plugin method in the factory to associate a model element class with every role. I expect to be able to do all this tomorrow morning.
After the release this morning I took some time off and just watched tv. Taking time off is always difficult--I get bored before I've really had enough of a break to come back to AgileWiki fully recharged. Rupali spent the day running errands so I had an especially quiet day. Time to reflect a bit, but not really enough time away from it all.
release 0.8:
Reorganized the constants; replaced implements with static include. The javadocs look a lot better as a result.
The order of the eval method's arguments was inconsistent.
JTransaction now returns a DRM with a collection of responses from the actions which have been executed.
A sample application, a check register, has been implemented. Process check returns the new balance.
A guide has been writen for the check register.
It may be a bit rough, but we now have a reasonable mechanism for returning results. And the check register illustrates this. Guess we really need that guide for the next release.
At this point there is a big hole in COODBMS--responses. To date we've been using out, which should only be used for debugging.
The check register is to the point where it can process checks, which is to say it is hardly started but what is done is working if not very usable. But even a fragment of an application is very helpful in developing COODBMS.
Reorganized the constants; replaced implements with static include. The javadocs look a lot better as a result.
Gosh, I put on my application programmer hat and I get a very different opinion of how things should be done! I've just written a first draft of the code to create a check register. I started by writing a script to do it, but then it dawns on me that I don't want a messy JSec which reflects a series of actions to create the account--I want the JSec to contain a single JEnt which creates the account.
There are a lot of things that I could work on at this point, too many in fact. But what would add the most clarity and the most utility? I think it is time to work on a better example than String2!
This morning I spent some time writing an introduction on the main page and I think it came out fairly well: http://agilewiki.wiki.sourceforge.net/
A bit of a grind today, but I've converted all but two of the COODBMS sample programs as well as flushing out the RoleML script interpreter and the DRM. The samples should be done tomorrow.
It was a great day, though it ended on a sour note.
Several of the specialized handles did not support direct links, which are needed when internal nodes are created, i.e. when the root node splits.
Lots of refactoring today. CNode (which is the base class for all Rolonic Elements) now supports the dynamic creation of both persistent and transient attributes.
The JSec will have the same headline as the JRolon and will give you some idea of the intent of the transaction, while the JEnts under the JSec will give the particulars of the actions applied to that Rolon when the JRolon was executed.
The hope here is that this will not require any extra effort when writing a RoleML script, and yet it should fully document the effect that script had on each of the Rolons which are updated by that script.
I've started working on converting sample2 to using a RoleML script. Progress is still slow.
CowDb is finally starting to stabalize, it seems. This latest release fixes only a few minor bugs found while working on COODBMS. Hopefully now the frequency of releases will also decrease.
I spent the evening working on add section. One change to the API is that we'll use chained methods for headline and for exports. And for set too when I get to it. This will greatly simplify the API.
The DRM has been implemented, though it is not complete and can not be until the RoleML script interpreter is completed.
When constructing a DRM (or even a RoleML document), we'll want to use pathnames to refer to other elements in the same Rolon. The best way to do this is with a Rolon-relative pathname, which requires a new notation. I'll note that absolute pathnames can not always be used as the name of the Rolon may not be known.
It is time for a DOM, er, the DRM. DRM will be a simple, but highly specific model of Rolons. The idea is to construct the DRM programatically, express it as XML, and then pass it in a JTransaction. It can be used then to construct the JRolons. But the XML model of a Rolon can also be passed as content to the JRolon which can then use it to create new rolons.
http://agilewiki.wiki.sourceforge.net/COODBMS
XML scripting languages can be pretty bad. In this case the use of a scripting language is justifyable, as we need to preserve the transactions now in COODBMS and that means keeping the number of classes reasonable, and XML scripting languages are especially easy to implement. But still RoleML needs to be easy to use and easy to learn or COODBMS will be just another dead project on Sourceforge. So every effort needs to be made at this time to assure success. And yes, I have a plan...
With this release, CowDb now fully supports XML expression and binding.
The new scripting language, RoleML, is working, JTransactions are now being logged and the effected Rolons have links to the transactions which updated them.
With the way eval is currently structured, it is not extensible. This can be fixed by adding an eval method to App and its subclasses and having the App classes handle opcodes specific to them. A fringe benefit here is that we get to break up eval into multiple large methods rather than having one huge method on PNode and another on CNode.
Things really came together today: Some good design, implemented it and got it working. I also implemented the displayBranch opcode.
In that last scenario we were still missing the transactions. What we need is a master journal (a calendar) which contains a series of Rolons, each of these Rolons created by a transaction. So they are the Transaction Rolon EXecution (TREX?). Hmm, perhaps TRolons would be a better name.
Hey, that's not a whole lot. And all of these things are pretty light-weight. Well we also need a Calendar App, but we can use the sorted app for now, or create a stub which simply subclasses the sorted app. Looks like fun!
I've been thinking a lot about JOODBMS and Journals. My eariler thinking was that there would need to be a lot of architecture to support retrodiction. But now I am thinking that retrodiction can be achieved by a Query to one branch which then executes a transaction on another branch. Note that this would not break the threading model.
Action is getting a bit more interesting. I've changed setAttribute to makeAttribute and now get and set work indirectly, so that is done. But I've also removed the context argument from the execute method--the context attribute is used instead, possibly indirectly. This opens the doors to all kinds of games, as it would easy to configure a sequencer action app to have multiple contexts--which always seems to turn out to be necessary.
I see trees of actions. If, while and for statements are easily implemented as trees.
A very productive afternoon--the action app class is done and integrated with the rest of the code. Still a fair-sized project remains: extending the eval method on PNode to include the API. And that really is only the beginning of an interpreter. Once the eval method is done, then we need some fancy action classes for constructing sequences and loops and branches and for navigating context.
There's a new TEXT role, and with full support for bi-directional XML transformations, as well as a programmer guide on the topic.
There is still one last thing that we need before we move on to JOODBMS--eval.
There are two new helper classes:
The simplified API is in place. In the process of doing the release, I found 4 bugs relating to the b-tree logic. Two I fixed, but the other two were in the iterator's remove method which I disabled. On reflection, I now see how I can now implement that remove iterator.
We need to first identify which roles will have a small footprint and which may not, which requires a bit more metadata to be supplied by the CowdbFactory's plugin method. Once that is done, we can make the add and make methods a tad smarter.
Direct references need not be represented in XML. However, in the case of symbolic references we will need an XML element. Again, the role becomes the element name and we will need a few attributes:
We also need to handle attribute values and custom roles. This will require additional API on the App class for XML binding and XML expression. So even though we only need XML transformations for JOODBMS, this has to be driven all the way down to CowDb for a clean implementation.
RoleML seems to be a good name for this markup language. Note that it does not have a fixed schema, as new roles can always be defined which carry their own unique content. The alternative would be to just use node and handle as the element names and carry the role as an attribute. But that breaks the original spirit of extensibility and makes for really ugly xml, especially as the role maps so very nicely to the XML element name.
CowDb1.1.1 contains a minor bug fix. COODBMS0.4 includes headlines, keyword access and dynamic creation.
I've been thinking about keywords and headline searches and have concluded that this is not a good time for headline searches. JOODBMS is close at hand and involves some major architecture. So it will be better to let the dust settle before working on other things which also involve architecture.
I've completed headlines and nearly completed keywords. But now I'm thinking about searches.
Units, Children CSecs and Parents CSecs are now all created as needed. I've checked in the updated output for the samples and everything is ever so much easier to understand now, as well as reducing the footprint on disk and speeding rolon creation. All 'round goodness.
Right now the CowDb API is complicated by the fact that some nodes are embeded in others (makes for fast retreival) while others are placed in their own physical block. And when we introduce XML transforms, we need to preserve that information. Besides being a pain, it will also be added clutter in the XML document. Not good.
CowDb is perhaps (hopefully) complete now. Release 1.1 was all about finishing touches.
So if all goes well, I can now focus on COODBMS and JOODBMS. I am especially excited about dynamically creating the various elements of a Rolon, as this will reduce the footprint of the less-developed rolons as well as adding making the sample output easier to read.
Except for optimizing the footprint of handle and some final testing, cowdb1.1 is ready to go. Expect a release tomorrow.
One thing I've left out of COODBMS is headlines. A headline is just an optional title that can be attached to any rolonic element. Easy enough to add.
Finished updating the docs and made the release. COODBM 0.3 is out.