The Delimiter Manifesto

[That which is crooked cannot be made straight]
  1. Escape to dot mountain

    1. the Proposal

      1. Components of public categories will be separated by the dot, or period; the ASCII 0x2E.
      2. Assuming a conservative Dan Egnor, no demand will be made at this time that crossposts be denoted by categories separated from one another by spaces, and only in passing will I mention the gain in usability one would reap from such a change in conjunction with shell brace expansion, and the arguable gain in readability. This proposal therefore suggests that the colon be retained as the crosspost delimiter for the time being.
      3. "Tags" or "condiments" will still be denoted with a leading slash.
      This proposal does not entail a change in the category structure or any modification in the code to gsend or gsub. The only difference will be the convention of the character used to separate components of a category.
    2. Dots through History

      or "Why?"
      1. Every gale category expresses a hierarchy, which starts at the least specific component on the left and becomes more specific with each additional component. There are a few established top level category components (pub, local, group, and bot, for example). Conventions for the hierarchy exist, and are encoded, for example, in the output of "finger [email protected]." Because subscribing to all categories is discouraged, there is no convenient notation to represent the "root" of the category tree; no obvious category exists which is a prefix of both pub and group. This creates the appearance of multiple roots from which grow multiple parallel trees.
      2. One well known notation for representing hierarchical structures like the gale category system is the slash notation used in UNIX filesystems. (An almost identical notation which uses the backslash instead of the slash is used in DOS and Windows filesystems.) In this notation, one can refer to the root of the tree with a single slash; one may refer to a given entity with an absolute path by starting the hierarchical specification with a slash; or one may refer to an entity relative to a current prefix or directory by using a specification that does not begin with a slash, but may contain slashes between components.
      3. Gale, by design, does not give you a symbol to refer to the root of the tree, and it has no concept of a "current category." Thus, every gale category is absolute. The fact that we use slashes is quite unfortunate because it makes our absolute categories resemble relative UNIX path names. This resemblance causes a great deal of confusion among newcomers to gale. Almost all new users make the mistake of posting a few messages to "/pub", or starting a gsub subscribed to "/" in the hopes of getting all messages. They assume, incorrectly, that since gale categories resemble UNIX pathnames, they have the same semantics. This is a reasonable assumption; it could easily have been the case, if not for design decisions they could not possibly be expected to be aware of. Gale should not be violating it.
      4. There is an existing notation for hierarchical structures that has the same semantics as gale categories (multiple apparent roots, all paths absolute): dot separated components. Dot separated components are used with exactly this meaning in the names of USENET newsgroups, zephyr instances, Java's hierarchical namespaces, and object names in Java or Python (C and C++ use arrows in addition to dots). Of these, newsgroups and zephyr categories are particularly similar to gale categories in their usage. Users familiar with either would be able to almost instantly understand the semantics of gale categories if they used the same notation rather than one that differs because of a random historical accident.
  2. Metaphor skew vignettes

    -------------------------------------------------------------------------------
    [pub/gale/help] from name-omitted
    so if i 'gsub -c pub'  it will subscribe me to / and i will see all the
    messages in the pub/* heirachy?
                              -- <id-omitted> for *everyone* 1999-06-22 16:56:19 -- 
    -------------------------------------------------------------------------------
    [/pub/me/dudes-login-name-omitted] from name-omitted
    Afternoon all..
                              -- <id-omitted> for *everyone* 1999-06-17 08:36:46 -- 
    -------------------------------------------------------------------------------
    [/pub/me/blakej:/catchup] from name-omitted
    Most fans are designed to die loudly, on the same theory as brake pads
    squeeling more and more as they reach their last legs...
                              -- <id-omitted> for *everyone* 1999-03-03 23:35:01 -- 
          
    Note that, hard as it is to believe, I'm not mocking those who are confused by the category notation. I think it should be changed to be less confusing. The logs of the categories /local and /pub, which, ideally, would both be empty, are fairly large:
    1. /pub
    2. /local
    Many, in fact most, of these accidental entries are due not to miscomprehension of the hierarchical semantics of the category system, but to the fact that condiments, or tags, use the same delimeter. This is no longer the case under this new proposal. Using slash for condiments is less confusing than for category separation because it always appears at the beginning, thus making the semantics almost the same as those of UNIX filesystems. Nevertheless, its use is questionable and should probably be considered carefully at a later time.
  3. Finger deep within the borderline

    1. The problem is not just novice users. The problem is that gale is not using the established, traditional notation for constructs that behave like gale categories do. Using a distinct notation means that any tools or gateways which could otherwise take advantage of this similar semantic must convert between notations in addition to protocols, and, if people think like machines, it may mean that a gale user must devote part of his or her brain to a new notation instead of using already established rules. In addition, the choice of slashes is unfortunate and increases chance of confusion because all common uses of slashes are different from the use they are put to in gale, but, unfortunately, similar enough that one might use them in a gale category context by accident.
    2. Many arguments to retain the slash as delimiter stem from inertia; unwillingness of the current gale populace to retrain themselves. However, the current gale populace is a group of early adopters, alpha testing a technology intended for wide-spread use. They should think of themselves not as the end users, but as testers, trying to develop a more powerful, flexible, and intuitive system for those who come to it later. Retaining a misfeature because it is mildly inconvenient for a small, relatively cohesive and technically savvy group to change their muscle memory is ridiculously short-sighted.
  4. Ranting and pointing that very same finger

    While this debate still rages, it may be useful to subscribe to both dot and slash delimited categories. Assuming you currently have a set of slash based categories in your .gale/conf or shell startup file, just copy the lines with your subscriptions and run a substitution on those lines that replaces "/" with ".". In addition to dot-delimited categories, this may subscribe you to condiments starting with dot, which are not sanctioned by this proposal but are not uncommon among delimiter revolutionaries. Make sure you add a colon between your slash subscriptions and dot subscriptions in your .gale/conf, or gsub will ignore the dot subscriptions. An example, almost certainly more complicated than your subscriptions:
    GALE_GSUB pub/:local/ugcs:local/caltech:local/pasadena:  :group/skokie:
              group/mublyjoe:pub/me/jtr:group/ofb:local/alaska:-pub/me/kaihsu:
              -pub/moi:-pub/meow:-pub/sports:-pub/me/leesa:bot/autosurf:
              bot/headlines/slashdot:bot/headlines/reuters:
              bot/reuters:local/bayarea:local/socal:
              pub.:local.ugcs:local.caltech:local.pasadena:  :group.skokie:
              group.mublyjoe:pub.me.jtr:group.ofb:local.alaska:-pub.me.kaihsu:
              -pub.moi:-pub.meow:-pub.sports:-pub.me.leesa:bot.autosurf:
              bot.headlines.slashdot:bot.headlines.reuters:
              bot.reuters:local.bayarea:local.socal
    


I can do anything I want!  I am the Master of Time! maintainer