[Debtags-commits] [svn] r905 - libtagcoll1/trunk

Enrico Zini debtags-commits@lists.alioth.debian.org
Sat, 18 Jun 2005 14:31:04 +0000


Author: enrico
Date: Sat Jun 18 14:31:03 2005
New Revision: 905

Added:
   libtagcoll1/trunk/DONE
Removed:
   libtagcoll1/trunk/TODO
Modified:
   libtagcoll1/trunk/README
Log:
Restyled README and TODO

Modified: libtagcoll1/trunk/README
==============================================================================
--- libtagcoll1/trunk/README	(original)
+++ libtagcoll1/trunk/README	Sat Jun 18 14:31:03 2005
@@ -1,4 +1,8 @@
-README for libtagcoll
+README for libtagcoll1 1.0.3, still unreleased
+==============================================
+
+Functionality
+-------------
 
 The package finally builds some API documentation using doxygen.  Not much of
 the source code has useful comments yets, but since doxygen support is in
@@ -22,7 +26,32 @@
 I would like to involve library users in design discussions and API changes.
 
 
-Project resources:
+What is in this release
+-----------------------
+
+TDBFile now copy operations disabled, because it contains a TDB handle which is
+unsafe to copy (it leads to double closes and deallocs).  I might consider, in
+the future, to implement proper copy operations if I find a need for it.
+
+
+Compiling from the subversion repository
+----------------------------------------
+
+Additionally to the build-dependencies, you need to install ``libtool`` and
+``automake1.9`::
+
+  apt-get install libtool automake1.9
+  ./autogen.sh
+  ./configure
+  make
+
+The library uses GNU Libtool.  While this is very nice, it can be a pain when
+trying to debug a program. For that reason, compilation of shared libraries can
+be turned off by specifying the ``--disable-shared`` option to ``configure``.
+
+
+Resources
+---------
 
   Website:
 
@@ -52,10 +81,135 @@
     deb http://debtags.alioth.debian.org/debian unstable main
 
 
-The library uses GNU Libtool.  While this is very nice, it can be a pain when
-trying to debug a program. For that reason, compilation of shared libraries can
-be turned off by specifying the `--disable-shared' option to `configure'.
+Further stages of the development
+---------------------------------
+
+Development will now proceed by:
+
+ * Trying to find better data structure and algorithms to improve the
+   efficiency of the various features provided by libdebtags1
+ * Possible restructurings to provide a cleaner API
+
+
+TODO-list items completed so far
+--------------------------------
+
+These are the TODO-list items completed so far::
+
+(older completed items are archived in the DONE file)
+
+
+TODO-list items being worked on
+-------------------------------
+
+These are the TODO-list items currently being worked on::
+
+ - Report a wishlist bug to libtool asking for a feature to generate PIC
+   libraries
+
+ - Document header files and main classes, with usage examples rather than long
+   explanations
+ - Add example code
+ - Add more tests
+
+
+Future TODO-list items
+----------------------
+
+These are the TODO-list items that are to be addressed in the future::
+
+ - Replace Consumers with functors:
+   class Collection
+	{
+	  addUntagged(PACKAGE& p)
+	  addTagged(PACKAGE& p, TAGS& t)
+	  addUntaggedGroup(PACKAGES* p)
+	  addTaggedGroup(PACKAGEs& p, TAGS& t)
+	}
+	class CollectionDispatcher
+	{
+	  Collection& c;
+	  public:
+	  void operator() (PACKAGE& p) { c.addUntagged(p); }
+	  void operator() (PACKAGE& p, TAGS& t) { c.addTagged(p, t); }
+	  void operator() (PACKAGES& p) { c.addUntaggedGroup(p); }
+	  void operator() (PACKAGES& pm TAGS& t) { c.addTaggedGroup(p, t); }
+	}
+   (maybe it doesn't make sense)
+	    
+ - Tagcoll1
+    - Classe Tag, smart pointer, con TagImpl virtuale
+       - Metodo TagImpl* Tag::impl impl(); da usare per chi ha bisogno di
+      	accedere a funzioni speciali dell'impl
+       - Compare fatto esclusivamente per nome del tag, cosí da rendere
+      	mescolabili Tag di tipo diverso
+       - Facet e quant'altro di conseguenza
+    - Tag rappresentato con un'URL: Organization/facet/tag o
+      Organization/Facet#tag
+
+ - Hierarchization algorithms:
+   If mergeequivalent is called on a child node of a tree node, the
+   resulted hiearchy might come out with a single root node.  In that
+   case, the node previously selected is equivalent to the root.
+   Option 1: take the parent into account when merging
+   Option 2: self-expand lone child nodes
+
+ - Implement cleanup of the tagcoll with noise filtering (removing tags with
+   cardinality less than a given threshold) and merging of equivalent tags.
+   Implement as a method of TagCollection, that gives the new, cleaned
+   collection.
+
+    - Another optimization would be to remove intermediate hierarchy nodes wich
+      contain a single child node and no elements.
+
+      It could just be implemented by merging tagsets with cardinality under a
+      given threshold into the nearest, bigger one.  Like filtering
+      insignificant or "noise" tag data before building the structure.
+
+      The optimization must be kept optional, because it induces a loss of tag
+      informations if the resulting tagged collection is used as the only way
+      to store the results like with tagbk
+
+ - Document the tree-cleaning features:
+    - noise reduction
+    - merging of equivalent items
+    - flattenThreshold
+
+ - Implications can be seen as a simple form of derived tags: handling them in
+   that way could avoid the need of multiple
+   expand-implications/add-derived-tags/expand-implications cycles
+
+
+
+Discarded TODO-list items
+-------------------------
+
+These TODO-list items have been discarded::
+
+ = Use a generic class instead of Tag
+    - Must be comparable
+       - Must have a name() method
+       - Must have a fullname() method
+       - Must have a facet() method
+       - Must be assignable
+       - Must be possible to construct the "invalid" entry using the
+	 constructor with no parameters
+   (doesn't make sense anymore: Tag has been moved to libdebtags1)
+ = Use a generic class instead of Facet
+    - Must be comparable
+       - Must have a name() method
+       - Must have a tags() method
+       - Must be assignable
+       - Must be possible to construct the "invalid" entry using the
+	 constructor with no parameters
+   (doesn't make sense anymore: Facet has been moved to libdebtags1)
+ = Use a generic class instead of Vocabulary
+    - Must have a getFacet(const string& name) method
+    - Must have a getTag(const string& name) method
+   (doesn't make sense anymore: Vocabulary has been moved to libdebtags1)
+
 
+Author
+------
 
----
 Enrico Zini <enrico@debian.org>