COODBMS release 0.13.1
- 10 more [interactive] commands added to Browse.
- 24 more comands can be used in scripts.
- New wiki page on scripts.
- Backward compatible with release 0.13
Exploring Time as a dimension in Software Applications and further developments of the AgileWiki project, salted lightly with personal notes.
- 10 more [interactive] commands added to Browse.
o Scripts have been implemented with a basic command set--scritps are run as a single transacton.
OK, I've converted the remove command to be interpreted by the server rather than pre-processed by browse. It works. Then I ran a series of removes from a script file. Even that is working.
One thing that always happens in retrospect is that I find Norm is right. He always said that language is key and that we needed an interpreter. OK, it isn't the whole answer, but now I see the truth in what he was talking about... more than 6 years later.
Browse currently processes its commands and converts them into RoleML. To implement scripts we can either convert them into RoleML in Browse or interpret them in the server. And to keep Browse light weight, I am in favor of doing the work in the server.
Did some packing for the upcoming move today, but I also wrote a bunch of wiki pages and got two releases out. Besides that I also managed to implement keyword tagging and queries, which is just so much frosting on the cake.
o New Browse commands: removeWellknown, createWellknown, adoptFork, wellknownFork, setUpdateUser and setUpdateGroup.
release 3.3.4:
First, clients should be kept as light weight as possible and scripts interpreted on the client side is simply the wrong way to go. Scripts should be executed within a transactional context so we need to have the interpreter in the server itself. This will be called the RoleMagicInterpreter (RMI), an old term of Norm's.
Today my priority is on getting ready for the move to Raipur. Movers will be here Monday and our train leaves on Tuesday evening. But it is also a good time to think things out. COODBMS is at a point where I just need to crank out the rest of the commands for Browse and write some howto docs, and that doesn't allow for much deep thinking.
Took the day off and crashed. Work this week and next on COODBMS will be a bit irregular as we are moving to Raipur. And that's a very long train trip.
o With 10 more commands, branch access control is now fully configurable with Browse.
o New WellKnownOperations group.o
5 more wiki pages in the docs.
o 1 bug fixed in setWellKnownName.
http://agilewiki.wiki.sourceforge.net/COODBMS
http://sourceforge.net/project/showfiles.php?group_id=106672&package_id=258830
o New utility, PurgeHistory, can be used to limit the amount of history retained in a branch.
o 2 CowDb bug fixes,
release 3.3.3:
The commands links and rtree have been added to browse and the COODBMS page has been updated to illustrate the use of these commands.
o Added selections to the UI of Browse--less typing is now required to use it.
The elements, children and parents queries have now been added to the browse program. That done, I spent some time writing about the browse program and explaining the content held by COODBMS. And it looks to me that I'm off to a great start. I hope you enjoy reading it as much as I did writing it.
Spent the day in the hospital. Rupali had her eye operation--an apparent success, though it will take 2 days for her vision to clear.
COODBMS release 0.11.3 should be quite helpful when it comes to learning RoleML. The browse program is a non-graphical user interface which now supports several queries, allowing you to navigate databases, branches and content. It also has an option for viewing the request/response documents, which could be handy if you are working on a program which will use COODBMS.
The browser is pretty much done now. I still want to add a keyword command, but that can wait until the keyword sample gets converted.
I am happy to report that the ListUsers utility is done. This then completes the set of utilities for managing accounts and completes as well the utilities needed by COODBMS administrators. In the process I also implemented a listChildren operation which will have considerable general utility.
Database Management
release 0.11.2:
The client/server architecture is now done and I've moved on to working on a database browser with a simple non-graphical user interface. Hopefully I can finish this over the weekend.
o When run in server mode, COODBMS now has a comprehensive suite of client utilities for managing its databases.
release 3.3.2:
Well I'm a bit happier now about error and exception handling. Wrote a bunch of client-side utilities and found/fixed two CowDb bugs in the process--it is always helpful when you have queries (like listOpenDbs in this case) that allow you to see what's happening.
I've been thinking about how best to extend the client model while retaining and adding clarity to the code and I believe the best approach would be by layers of subclasses. We've got a good start on a reasonably simple ModelObject.
We've now got a client-side binder for the new client-drm. And we're now processing responses from the server.
Well, there is one big thing that needs to be addressed--RoleML scripting. That's a bunch of code that needs to be added to ObjectModel. But I'm studiously ignoring it until we have a working set of utilities.
Well, I now have a ModelObject class in client which serves as a simple model, as well as an Xpress class. So I am able to send a request to the server and process it. Just. But to handle a response, I'm also going to need a binder in the client. More code to hack out.
As far as it goes, the client/server architecture is now working, including a graceful socket close handshake. The holdup at this point now is the lack of a client DRM, so that now is my focus.
It occurs to me that a top-down approach would be interesting and helpful. So even before the client DRM is done we could start with programs to block/unblock updates. (These utilities allow for backups of databases without interfering with queries to the blocked database.)
I'm thinking now that the classic server architecture might be best. We eliminate the queues and we eliminate the problems. We eliminate the thread pools (except for servicing socketts) and we minimize the overhead per sockett. A smart client then can maintain a pool of idle socketts and a dumb one can just open new ones as needed. We also reduce the number of potential bugs and speed development. And for notifications, a client interested in them can open a sockett to receive them.
OK, we now have optional .cfg files for configuring databases, and even provision for defaultDatabase.cfg when there is no .cfg file specific to a new database. Common is now part of the CowDb jar file. DRM is now part of the COODBMS jar file. And I'll start work on the client-side DRM tomorrow morning. Time to speculate about the client/server architecture.
There are a few things that need doing to get things ready for converting COODBMS over to client/server.
With the addition of the listWellKnow and tree queries, COODBMS now has a minimum workable set of queries--see sample 22 for details.
Write access control is nearly complete. Got a tad sidetracked--I'm reworking OpCode access control to make is fully scaleable to any number of users. But that is almost done and there is likely not much left to write access control.
We now have a moderate amount of access control data which is generated when a database is initialized and no effective means of displaying it. The queries that we have are simply too verbose--I had to chop them out of the sample programs when I updated them to work with access control. Also, the existing queries (except for express) use a print stream, and that will not be supported when we go to client/server architecture. So right now, queries should have priority.
Operation access control is now in place, providing different sets of operations to different groups of users. Fully configurable and extensible, you can define new operations, operation sets and user groups. The initial configuration allows guests to create their own accounts and for admins to set the passwords for other accounts. Logins are controled by a single database and tokens are issued for subsequent access and for access to other databases on the same server.
Access control for operations is done, though only 5 of 25 samples have been completed. I expect to wrap it up tomorrow and then on to read/write access control.
COODBMS release 0.10.1:
This is just the preliminary work for access control. The next step will be to control access to various operations. For example, not everyone should be able to change another user's password. After that we can worry about read/write access.
http://agilewiki.wiki.sourceforge.net/AccountCreation
If passwords are kept in a branch, then there will be much confusion when rolling back to an eariler branch. Similarly it makes no sense to have account ledgers in every branch or database, as a user needs to be able to review a consolidated ledger--and all logins should be against a single master account. At the same time, users should have a user rolon in every branch they are active in--permissions may differ and for each branch we should be able to view the activities of each user.
http://agilewiki.wiki.sourceforge.net/RolemlQueries
Access control will be at the level of rolons and operations (opcodes). User groups and operation groups will also be supported. But as queries will often span multiple rolons, these will wait until access control is in place--otherwise they would need to be redone.
The new RoleML interpreter is in place and now fully supports queries. See sample 22 for a simple example.
Got all the easy stuff done today, including a new QTransaction class. What remains is to create an executable pluging for descriptor elements and migrate the existing code the new form. The plugin will be a bit different from Apps, as it needs to work with both Descriptor elements and Descriptor Model elements. Of course, after that we need to implement some basic queries.
The problem we face is that, where now we are using DSecs and DEnts in the interpreter, for queries we will be using DSec and DEnt model classes. So either the executable code on DSecs and DEnts needs to be duplicated on the model classes, or the code needs to be relocated. Now I've got nothing against duplicating the code, so long as it is minimal. But for the bulk of the code, we need to relocate it.
I've got 3 things on the list for COODBMS:
I suspect that I'll move COODBMS to beta once we have RoleML based queries, as Access Control in many ways is an application.
Now are socketts the right kind of client/server? I'll note that AgileWiki3 used RMI, but this causes problems for non-Java clients. And as everything will be passed over the socketts as XML documents, RMI just adds extra overhead. Another advantage of not using RMI is that we can then have callbacks/notifications. I'm thinking that advanced clients would have a cash of rolons and the server could send notifications when a rolon "of interest" is updated... Just a thought for now.
This release wraps up the common API and DRM cleanup:
release 3.3.1:
The common API has [finally!] been wrapped up and today I was able to focus on the DRM. The DRM is now also in good shape. Tomorrow I plan to work on a bit of general cleanup relating to attributes. (I want to catch attributes being set which have side-effects, like the name attribute.) After that it is, at long last, on to working on query scripts.