1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274
|
TODO:
- Do a facet filter, to only get in packages with given facets. It could be
used for example to prepare the data to then create a smart hierarchy using
only facets relevant to a given environment
- Have the related command accept a tagset, and not just a package name, as
the start of a search
[ender]
- [herv]
> The problem is, it takes a lot of time for me to dwelve into the
> automake info files to find out how to add to the distclean target.
> Do you have some hint on where to look at?
CLEANFILES = *~ .*~ *.bak *.org gmon.out core \#*\# .\#*
in .am files. You can add that in a include file, included by every
Makefile.am...
- [me]
It could be interesting to outsource the first tag layout of such parts
to the relative communities: for example, we could ask the gnome people
to provide the right tag vocabulary for gnome-related qualities.
I guess they may be happy to do it (and to be kept in consideration by
the Debian people), and surely they know what are right qualities in
their world.
- Make a "best istallation candidates" option: give points to tags depending
on how many packages are installed and have that tag. Then sort the
non-installed packages by tag score
[ender]
- Maintain an upgrade checklist for the vocabulary. cvs diff can help
generating it
- Ask for someone in the i18n team to join in, to help with the design of the
language dependent files with tag names and descriptions.
- Make TagCollection a template wrt the item format
(I *badly* need to discover how to distribute templates inside libraries!)
*** Done in tagcoll 1.0
--- 2004-07-25
+ Ported to libtagcoll 1.0
*** Done in tagcoll 0.16
--- 2003-07-18
+ 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
+ tagcoll: merge equivalent tags
If a tree node has only one child non-leaf node, compress them in a single
one merging the tree tags.
For example: /a/b/ could become /a,b/
*** Done in tagcoll 0.15
+ Port to libtagcoll 0.4
*** Done in tagcoll 0.14
+ Package the common tagcoll functions in a separate library
*** Older versions
+ Separate the source parser from the rest; make the sorting algorithm sort
integer handles to real items, giving in input the integer handles and their
cathegory set and in output the hierarchy. The upper level will then keep
track of the handle -> real item association, input parsing and generation
of output
Problem: in which internal format should the result tree be generated?
Solution:
class Node
{
vector<Node> subnodes;
set<int> leaves;
};
Problem: in which internal format should the input items be presented?
class Input
{
map< string, set<int> > tags;
set<int> orphans;
}
+ Write a hierarchy sorter using /usr/share/aptitude/function_pkgs and
function_groups as data
+ Instead of working with all the single items, work with groups: make a group
with all the items that have identical tag sets, and just remember the
number of items present in each group. Then build the hierarchy, and
populate it with the items in a second pass.
= This does not work: tagsets are merged and reworked during the sort, and
there is no way to find out what packages belong to each hierarchy node
+ tagsorter: make an option to list the implicit implications found in the
input data, instead of the hierarchy
+ the implicit implications can be in the form tag:<tags that imply it>, and a
hierarchy can be built out of that
+ add a --explicit-implications switch to read an explicit implication list
+ add a --copy switch to output the tagged collection unchanged: to be used
with --explicit-implications to produce an expanded collection
+ add a --pack switch (requiring --explicit-implications) to contract a
tagged collection removing all tags covered by the explicit implication file
from it
Example: given implication `gnome: gui, desktop', then it would remove the
tags `gui' and `desktop' from all tagsets containing `gnome'.
+ add a --rename-tags-from to read a mapping list stating that a given set of
tags should be renamed with another tag on input.
Example:
mp3: MP3, Mp3
+ add methods can compute bad tag cardinalities if an item is added that is
already part of the collection
+ write a tagged collection diff and patch utility, able to detect tagged
collection changes, where a change simply is the add or removal of a tag to
an item. In this way, multiple concurrent changes to a collection can be
merged.
+ Change the parser to use /:\s+/ instead of /:\s*/ to separate items from
tags. In this way there is the possibility of using ':' in tag names to
simulate namespaces ("lang:ml", "mail:ml"), and such tag names won't corrupt
the output of --show-implications, nor need some extra escaping all the
time.
+ Rearrange switches. Produce packed output by default, and use a --expanded
switch to request for fully redundant output
+ Roadmap
+ Prepare a tag vocabulary and keep it in CVS.
Repository name: pt-normative
The vocabulary should contain:
- A list of all possible tags
- A brief semantic description of the tags
- Optional explicit implication list for the tags
- Optional notes for complicate tags
+ Test tagcoll a little more and upload it in sid, so that it will be ready
when we need it.
(Herv, you're the best tester that I've ever had: be as mean as you
can get! :)
+ Prepare the `package-tags' package
+ Decide a method to download the last version of the tag database
+ Ask erich if he can setup some output method with a single unique
URL
+ Decide if the tag vocabulary should be routinely downloaded as
well or it it's enough to ship a copy of it inside `package-tags'
+ Include some example toy so that people can start playing with
tags (like my script to generate the static HTML browser, a text
file showing example tagcoll manipulations of the data and other
toys we might like to write for the occasion)
+ Make an announcement in debian-devel about what we've done and where
`package-tags' can be downloaded (experimental, maybe?) to be tested.
+ Eventually start using a public mailing list (-devel?) for
discussions instead of private mail
+ Write a script that extracts the explicit implication list from the
vocabulary
+ debtags implications
+ Write a script to check a tagged collection against the vocabulary
+ debtags check <filename>
+ debtags: non si pu coabitare con apt, che si lamenta se vede 'tags' nel
sources.list. Usare /etc/debtags/sources.list.
+ Feature from Erich:
> This is another nice frontend. "Show me packages similar to this one" is
> a /really/ nice function.
> BTW: i think we should expand this system beyond packages to
> applications. "apropos" sucks nowadays, it usually lists hundrets of
> matches. But a tags-based apropos would be /really/ cool.
> especially with that similarity function. "biff" is almost what i want,
> what is similar (but with x11 tag)? oh, xbiff. fine.
Definire "distanza" tra due oggetti in una t.c. come la cardinalit
dell'insieme differenza tra l'unione dei tagset dei due oggetti e
l'intersezione dei tagset. La similitudine tra due oggetti diventa quindi
un valore inversamente proporzionale alla distanza.
+ Also try a "similar to item1, item2, .., itemN", as the ones with the least
distance from the intersection of the tagsets of all these
+ debtags: let "show" and "cache" do the same of apt-cache, and proxy them to
the real apt-cache
+ debtags: use tagshow and tagsearch to work on tags
+ debtags: port to getopt::long
+ debtags: write a manpage
+ debtags: add a "related" search
+ debtags: apply patches in sorted order from files in /etc/debtags/patches.d
at update time
+ Write a README.Debian for debtags
- Write a quickstart session
- Give some rationale about package tags
- Why that way
- What can you do with them
- Advantages
- Structure build and updates automatically from the existing package
qualities
- Description of packages from different points of view
- No need to define and order of importance between qualities
(compared to hierarchical organization)
- Explain how it's been implemented in Debian so far
- Erich's Package Browser / cooperative editor
- Normative vocabulary
- Task force
- CVS editing
- Central package tags database
+ tagcoll: subclass CommandlineParser to CommandlineParserWithCommand,
managing the first argument as a command
+ Make an addCommand(string name, int val) method
+ tagcoll: --implications-from is not working
+ Update the mkbrowser script to use debtags and add it to debtags exaples
+ debtags: when proxying the `show' command, subtly add tag informations to
its output
+ Revision the tags
+ Update the vocabulary with the last data from the DB
+ The hierarchy can also be created on-demand for interactive applications:
just leave in the child nodes their child tagged collection, and expand it
only when needed.
+ tagcoll: since the tagging generation can be incremental, implement it, and
output smart hierarchy lines as soon as they are computed
+ incremental generation can also be used to compress subtrees: when the size
of a child collection is small, directly get the list of children
+ A further optimization would be to flatten subhierarches that contain less
that a certain threshold number of elements.
+ Make the announcement
+ Tagcoll: add the possibility to "reverse" a collection, that is to output it
as:
tag: item1, item2, item3...
[ender]
+ define "derived tags", that is, tags that are a derived from others.
Like: userlevel::novice = !specialized && (interface::gui || interface::curses)
The functions can be present in the vocabulary and computed by debtags
update during the creation of the package database
[David Roundy]
+ debtags: do not add Tags: informations to empty apt-cache outputs
+ Include a version of the tag database in debtags.
[Colin Walters]
+ Add a (commented) source pointing to the tag database shipped with debtags
+ Add the possibility of having a local vocabulary that is merged to the one
provided by debtags. It could be used to add local implications or local
derived tags
- For example, "specialized" could be implied by some tags, but only in a
custom vocabulary provided by some subdistro
[Colin Walters]
+ debtags update should then update the vocabolary, too
[Colin Walters]
+ debtags update should extract implications and derived tags from the
vocabulary and store them in separate files inside /var/lib/debtags
+ debtags: do the patching with the implications from the vocabulary at import
time. They can be removed at any time with the compress function, but in
the meantime the system tag database will be complete.
+ [erich]
tagcoll: ad an option to compress a tagcoll file as
item1, item2, item3: tag1, tag2, tag3
But keep it an optional feature, to use just for things like distribution of
database, since having that format for the database as a default would
impact of the ability to process it with normal unix tools
(like doing grep ^item: on it)
- The parser could be made agnostic on the format
- The serializer could instead be chosen in the compact form by a
commandline switch
This should be in the version that goes in sid, so that Erich can change the
format at any time
+ [io]
Use the expression parser to add an option to grep the database printint
only the items that match (or do not match) a given pattern
tagcoll [-v] grep "expression" file
or
taggrep [-vq...] "expression" file ...
+ debtags:
+ store the tag collection in the most compact form
+ add a "cat" command that outputs the tag collection fully expanded
+ add a "grep" command that calls taggrep on the expanded collection
+ debtags: add a method to display all the packages with a given tag or set of
tags
[ender, Kevin B. McCarty]
vim:set ts=3 sw=3:
|