changeset 254:c6c803903417

add TODO.org
author Jamie Forth <j.forth@gold.ac.uk>
date Thu, 24 Feb 2011 11:23:18 +0000
parents b5ffec94ae6d
children f1e6d10fdb11
files TODO.org
diffstat 1 files changed, 145 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TODO.org	Thu Feb 24 11:23:18 2011 +0000
@@ -0,0 +1,145 @@
+* AMuSE
+** amuse-database-admin + CHARM db persistence
+   - Generalize mtp-admin?
+   - How general should amuse-database-tools be?
+   - General import/export API?
+*** TODO Use database user accounts
+*** TODO Move prototype versioning code from CHARM into amuse-database-admin
+
+Provide the logic to update and retrieve successive versions of
+constituents. Includes providing a way of deleting (updating, marking
+something as deleted) and destroying. The latter should require
+adequate permissions and also test that no analyses depend on them.
+
+***** TODO Define and implement versioning logic
+
+Revision control. There needs to be some logic to work out the union,
+intersection, relative complement between successive versions of
+constituents. Surely best to do this server side? Use temporary
+tables?
+
+***** TODO Simplify current code
+
+Column names could be in a variable: implementation-id parent-id
+ext-properties int-properties owner version creation-timestamp
+deletion-timestamp.
+
+Some macros would also be helpful here, particularly if it would be
+possible to abstract out the table creation and versioning stuff. That
+way, all database tables created within AMuSE (in backends, or
+specialized applications like SIA) could be created with a macro that
+automatically generates the necessary revision control columns,
+triggers and functions.
+
+***** TODO Decide on the long-term aim of amuse-database-admin
+
+More adventurously, the database admin stuff here could form the basis
+of a general mechanism for creating tables and getting data into and
+out of the database. Each implementation could be stored in tables
+generated by the template CHARM reversion controlled table, with
+backend-specific columns. SIA is not a backend as such, it can take
+any other backend and generate data from that. Anyway, the database
+interaction is very similar.
+
+This could tie up with better overall integration of CHARM
+constituents within each implementation. We could also ensure that all
+compositions added to the database, and all their events have unique
+ids! I still think we need an amuse_implementation table though, along
+with consistent constructor methods specialised on packages -
+otherwise, how else do we know to create a geerdes-constituent or an
+mtp-constituent. Or maybe these should be properties of constituents?
+But we'd still need the methods specialized on packages, or at least
+we'd need to look up consistently named functions within individual
+packages.
+
+How possible or beneficial would this be? Might simplify things in the
+long run and shouldn't have to compromise the flexibility of
+individual implementations. This would be more about general work flow
+and database interaction. I was going to try and do something along
+these lines with the midi-db backend.
+
+Or perhaps it's better to stick with specialized implementation
+specific database functions with some code duplication?
+
+*** TODO Check all backends use *amuse-database*
+
+Sort out the passing around of the database variable. Basically, there
+should only be one database connection accessible to every backend, as
+presumably it would be very difficult to maintain consistency across
+multiple databases (e.g. for the results of general analysis tools or
+the CHARM constituents mechanism).
+
+The database connection could be passed in as an optional argument
+(defaulting to *amuse-database*). But that would require changing the
+existing API (e.g. get-composition). The way I've done this in midi-db
+is to make sure all the database functions explicitly use
+*amuse-database* for any database call, rather than defaulting to
+clsql:*default-database*. This allows other databases to be used for
+testing purposes by shadowing *amuse-database* within the backend
+package.
+
+** Geerdes
+*** TODO Sort out general weirdness in the data
+    - Geerdes compositions timepoint = 0 instead of timepoint of first event.
+    - g-id-file-id 1004 is in 6/4, which tactus-duration treats as compound time!
+    - g-id-file-id 3822 is in 4/64!
+    - g-id-file-id 8261 has a 63/32 time signature!
+
+*** TODO Import new files
+** Constituents
+*** DONE Are the floating constituent abstractions sensible?
+    - Or should the base constituent class not inherit from anchored period?
+
+*** TODO CHARM
+**** TODO Sort out old CHARM mess in my darcs Geerdes branch
+**** Questions
+     
+     1. 'Parent' slot: the constituent the particles derived from
+        (current implementation), or always the composition?
+
+     2. What to do about constituent properties? They are currently
+        'charm-property-list' objects, which are a subclass of
+        sequence, but do not actually contain any additional slots!
+        Should we define more structure for these objects? Should
+        there be a differentiation between intrinsic and extrinsic
+        lists? Should they be keyword-value lists instead of lists of
+        strings? Or make better use of the class hierarchy?
+
+     3. Related to property-lists, how should we determine identity
+        between constituents? Can this be done purely from the
+        headers - in particular, the property lists, or is it
+        necessary to also test for identity between all of the
+        particles?
+
+     4. What to do about time? Should they be slots in the header?
+        Time represented in database format (integer) or backend data
+        type?
+
+     5. The need for a consistant API. If we are going to ask for
+        specific constituents from the database, and these might be
+        from any backend, there needs to be consistantly named
+        functions like 'make-composition-identifier' (as opposed to
+        g-id-file-id in geerdes) in each package. Examples of generic
+        functions I've added are 'identifier' and 'id', which will
+        return the identifier (implementation specific object) or
+        database-id-number (integer) respectively for any
+        'amuse-database-object' given to them. (The class
+        'amuse-database-objects' currently does not exists, but it
+        probably should, providing the slots that are shared between
+        all AMuSE objects stored in a database.)
+
+        Is this a bad thing to do? The semi-general API I work with is
+        most similar to Geerdes, just because I was most familiar with
+        that backend when I started. Marcus seems to have his own set
+        of conventions, but the two are probably not incompatible.
+
+	If we don't have a consistant API, we have to make a CHARM
+        implementation within each backend?
+
+** Future development
+*** Viewpoints, projections, properties and features
+    - What is the difference between a viewpoint (MTP), a projection
+      (SIA), and features (SIA, CONCEPTUAL-SPACES, and general
+      constituent features and properties).
+    - Retain original amuse context (like sia-datasets).
+    - Define a general design for developing general tools?