Author: gbg
Date: Sat Jun 21 12:56:46 2014
New Revision: 1604346

URL: http://svn.apache.org/r1604346
Log:
Add trunk directory and proposal file.

* flexicon

  (trunk): New directory.

* flexicon/trunk
 
  (Proposal.txt): Initial version of the Flexicon Proposal.

Added:
    labs/flexicon/trunk/
    labs/flexicon/trunk/Proposal.txt

Added: labs/flexicon/trunk/Proposal.txt
URL: 
http://svn.apache.org/viewvc/labs/flexicon/trunk/Proposal.txt?rev=1604346&view=auto
==============================================================================
--- labs/flexicon/trunk/Proposal.txt (added)
+++ labs/flexicon/trunk/Proposal.txt Sat Jun 21 12:56:46 2014
@@ -0,0 +1,726 @@
+Flexicon
+==========
+
+A tool for individuals, business and crowds to organise and maintain a
+personal or community-owned compendium of compound commands and
+scripts, which can be standardised, shared, tracked and searched due
+to having a general compatible format and inbuilt tests.
+
+It is not tied to any particular operating system or software, it is a
+general tool to keep our working methods organised and to enable us to
+share and preserve them.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+Index
+-----
+
+A. Introduction
+   Who uses Flexicons and why?
+   How Tricks are used by the community
+B. Design 
+   Rationale
+   Next steps
+   Caveat
+   Future Plans
+   Project Motto
+C. Examples
+   Use Case
+   Sample Trick File: SvnShowRevisionNumber.tr
+   Finding the right trick
+   Checking if you can use a Flexicon
+D. Components
+   List
+   Trick Test Suite
+   Environment/prerequisite checker
+   Functionality checker
+E. Library program definition
+   Basic Concept
+   Commands
+   User Interface
+   Bookkeeping
+   Preparation
+   Shelf Management
+   Testing books and tricks
+   Producing books
+F. Data Fields
+   Tricks
+   Flexicon/Library 
+ 
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+A. Introduction
+===============
+
+Flexicon is tool to organise collections of compound commands
+(called tricks for short) that use one or more software applications
+to complete complex tasks.
+
+Each individual or community collects, writes and maintains their own
+Flexicons and individual tricks, and individual Flexicons are a
+named collection of offical tricks which are loaded by the main
+program, called 'Library' along with and personal tricks that the user
+can select on a case-by case basis.
+
+Tricks and Flexicons are freely interchangable between people, and
+ready to use (provided their integrated test passes). Flexicons and
+tricks can be integrity checked, and failing tricks can disabled until
+they have been repaired and are added back.
+
+
+Who uses Flexicons and why?
+-----------------------------
+
+An individual may use Flexicon to keep a collection of their
+personal tricks, and tricks they obtain from other Phrasebooks or as
+individual items.
+
+A business can use Flexicon to organise tricks pertaining to
+particular IT tasks or positions, and to provide organisational
+memory, and a dictionary of processes used.
+
+A community can use Flexicon to pool effort and quality check tricks
+for use with their project or the product their community uses or
+produces.  It is a communication tool & vault and specifically aims to
+provide a structure that prevents loss of information and obsolence
+via 'software rot' or lossage through time-induced obscurity, and
+enables a community to keep track of, and organise crowdsourced
+tricks.
+
+A project may use Flexicon to enable users to build a richer user
+interface than the project itself can offer.  One such example is
+Apache Subversion which has a plethora of options that can be combined
+to do complex tasks, some of which are not immediately obvious even to
+expert users.
+
+This allows the dev team to add more bells and whistles to their
+project without the overhead of attempting to design how people will
+use their software easily, and allows users to standardise idioms they
+use and swap, or to create personal collections.  A user community can
+produce a fully tested, validated Flexicon for every version of the
+projects software they use.
+
+Who better to design an user interface than the user community
+themselves?
+
+
+How Tricks are used by the community
+------------------------------------
+
+Tricks can be shared via the internet, and any trick from anywhere can
+be added to any Flexicon collection according to user-set
+conditions.
+
+Tricks may be publicly shared or kept private, they may be encrypted
+or even carry licenses.  It's no different to what you find in the
+wild on the Internet, but with the added bonus of a set format and an
+attempt to ensure functional integrity.
+
+
+B. Design 
+=========
+
+Rationale
+---------
+
+Flexicon provides a formal method of organising tricks into
+Flexicons which themselves can be collected into the library program
+that runs on the users' platform.
+
+It's a very general tool and not dependent on any particular usage,
+operating system or software.  You can create, distribute and collect
+tricks for your windows system, your Linux/FreeBSD/Macintosh or
+whatever other system you're working on, provided the Flexicon
+software can run on your system.  
+
+An individual trick may be a complex script which combines many
+different softwares, or it may be a simple one liner that just uses
+GNU tools for a particular task.
+
+Individual users can pick and mix tricks they like, and communities
+can choose to apply a voting process or another decision process as
+a quality control tool for their official compendiums.
+
+Most tricks come with a test suite that can be run individually or as
+part of an automated batch check to ensure that it works correctly in
+it's current setting.  This ensures that the trick remains current
+despite a software upgrade or a project release, and that tricks can
+be selected correctly for particual software versions.  Users can of
+course omit this for their personal tricks, or choose to download
+tricks without tests, at their own risk, which is not much different
+to the current situation of finding something useful on the internet.
+
+This may seem a bit complex, but it allows us to share our tricks and
+it is hoped that this gadget will save the Open Source community huge
+amounts of time since we no longer have to each knit our own tricks or
+rely on (and laboriously test) 'cooking recipes' we happen to find
+somewhere that may or may not work.
+
+Also, it will help to standardise what tricks we use.  If one of us
+writes a trick to automagically (say) merge an svn trunk to an svn
+branch, everyone can partake if the creator shares this trick -- write
+once, use everywhere (relatively safely...!) is the motto!
+
+
+Next Steps
+----------
+
+I've posted a request to Apache Labs to attract contributers, hoping
+that this project will be promoted to Apache Incubator.
+
+Decisions need to be made what language and database to use, and the
+design idea needs a robust peer review.  Many edges of the design are
+ragged, and there are a few parts where the description amounts to
+'and here a miracle happens', in particular the current TrickServer
+concept.
+
+The actual size of the project is rather small --- so far the library,
+which is the actual heart of Flexicon has 27 user commands, most of
+which are classic queries that will be fun and easy to code.
+
+The programming language and other software to use needs to be decided
+upon.  The requirements are: Small memory footprint and quick
+execution since were are writing something that actually is a meta
+shell, and as a second tier condition, ubiquity and as little user
+effort needed as is possbible for installation.
+
+Caveat
+------
+
+Thus spake Cassandra: "One user is difficult, two users gets tough,
+an unlimited amount of users with unlimited freedom to do whatever
+they want to do (some of which may be malicious!) is quite the tall
+order."
+
+
+Future Plans
+------------
+
+Once Flexicon is operational and past the initial test phrase, I
+would like to introduce the concept to the Subversion user community,
+in the hope that they indeed adopt Flexicon as a tool to build a
+user designed user interface to Apache Subversion and agree to stress
+test the concept, with a view to set up a voting process to allow the
+existing IRC svn-user community to collaborate on an official
+Apache Subversion Phrasebook.
+
+
+Project Motto
+-------------
+
+Why have one or the other, when you can have one, the other, and both?
+
+
+
+C. Examples
+===========
+
+Use Case
+--------
+
+One typical application (and the orginal motivation) would be for the
+svn-user IRC community to collect and quality check compound commands
+that use svn in conjunction with with other software to produce a
+wrapper application for svn and other applications used in people's
+VCS processes.
+
+The other day on svn-dev mailing list, someone requested an svn
+feature to show the current revision number.
+
+Subversion didn't need a new feature, and whilst the solution _looks_
+simple, it wasn't all that obvious either:
+
+svn info | sed -ne 's/Last Changed Revision: //p'
+
+We helped one user to a solution, but packaging the above trick into
+
+--svn-show-revision-number 
+
+would help all users, and also a list of such tricks would inspire
+users to make full use of svn's capabilities they so far have been
+unaware of.  The problem is a) how to share this efficiently b) how to
+keep those shared tricks up-to-date!
+
+If we can package the above as a trick together with a test, and
+present it in an accessible form, then all our users will have access
+to this knowledge and the trick can be automatically checked to see if
+it's still functional for every SVN release, and users can build up a
+compendium that educates, and works for, the entire community,
+(reasonably) realiably so.
+
+Ideally, the svn-user community on IRC will be able to use the Apache
+voting process and tools to produce and maintain proven Flexicons
+containing fully tested tricks which pertain to particular svn
+releases.  
+
+If a trick fails it's tests, it's automatically removed from the
+official SVN Flexicon and placed back into the pending release
+Flexicon until it's fixed and voted back in again by the community
+members of svn-user.
+
+
+Sample Trick File: SvnShowRevisionNumber_1.tr
+----------------------------------------------
+
+\ID{1}
+\TrickName{SvnShowRevisionNumber}
+\Organisation{svn-user}
+\Flexicon{SVN-1.6-official}
+\Author{Gabriela Gibson}                              
+\Status{public}        
+\Precis{Display current revision number of Subversion}                         
     
+\Description{Query the Subversion revision number using 'svn info'}  
+\LongSwitch{--svn-show-revision-number}
+\Version{1.0}
+\Software{svn, grep}
+\Shell{bash}                       
+\Command{c=`$SVN info | grep "Last Changed Rev:"`; echo ${c##*: }}
+\Keywords{svn, revision}                            
+\TestExpectation{!integer}
+\InitialCreationDate{10 Dec 2013}
+\Last updated{10 Dec 2013}      
+
+
+Finding the right trick
+-----------------------
+
+If you perhaps noticed, the example trick file uses 'grep' and bash
+substitutions.  What if you actually would prefer to use sh and sed?
+
+Tricks that have different execution methods but the same TrickName
+can be differentiated by searching their properties -- you look for a
+trick with the same name, that uses specific software:
+
+$ library find-software [location] --svn-show-revision-number sh,sed
+
+You can search with any field, or any combination thereof as the key.
+
+Example:
+
+Library also performs searches that help the user to produce a shelf
+with tricks/books that work, by just knowing their software
+requirements.  Tricks may have many duplicates, for example:
+
+SvnShowRevisionNumber_1.tr
+(...)
+\Software{svn, grep}
+\Shell{bash}                       
+\Command{c=`$SVN info | grep "Last Changed Rev:"`; echo ${c##*: }}
+
+SvnShowRevisionNumber_2.tr
+(...)
+\Software{svn, sed}
+\Shell{sh}                       
+\Command{svn info | sed -ne 's/Last Changed Revision: //p'}
+
+Library will find and select the correct trick by looking at your
+software list, or check that you have the needed tools before it puts
+a trick on the shelf.  So the ancient HP system that just has sh will
+have the same interface as someone's Macintosh, Windows or BSD system.
+
+
+Checking if you can use a Flexicon
+------------------------------------
+
+If you find a Flexicon that looks like it's perfect for you, you can
+run a check to see if you have all the required software on your
+system that the tricks in there need to use.
+
+$ library check-software FlexiconName 
+
+will produce either a list of everything that is missing, or, inform
+you that it's ready to be used.
+
+
+About TrickServer
+-----------------
+
+TrickServer is a small webhosted database that registers tricks and
+serves unique IDs to new trick authors.
+
+TrickServer can be searched by [TrickName] [keywords] [software] and
+will return ID's of matching tricks.  If it cannot find any tricks
+that match, it will inform you that this trick is missing, or if it
+only finds partial matches, it will return all the ID's that match,
+which you then can google for and see if you can find it on some
+mailing list or someone's blog perhaps.
+
+Note: I'm not sure about this design, it looks like it could be
+vandalised.  Maybe using an email list and utilising the unique SMPT
+id might just about work, but I think this is beyond my current
+expertise and I would like to invite interested readers to propose a
+better concept here.
+
+
+D. Components 
+=============
+
+Trick       -- a plain text file in LaTeX macro format.
+
+Flexicon  -- a plain text file in a dedicated directory which
+               contains information about the Flexicon and a list of
+               tricks which reside in the same directory.
+
+Library     -- command line program that organises them and creates new
+               Flexicons.
+
+TrickServer -- central server that assigns unique ID and collects
+               (some) information about tricks.  It also facilitates a
+               voting process in order to purge obsolete tricks.
+
+
+Trick Test Suite:
+-----------------
+
+Tests are run before its added to a Library on a system, or as a
+requested check, for example, after software upgrades. Individuals may
+decide to ignore failing tests, but communities may have their own
+procedures to validate tricks.
+
+
+Environment/prerequisite checker
+--------------------------------
+
+Checks that the test matches the current environment -- if you need
+zsh and svn, this checks for the availability those softwares and
+ensures that the versions thereof are in the range as defined by the
+trick author(s).  Similiar in concept to make's configure.
+
+
+Functionality checker
+---------------------
+
+Runs the trick's test (if it exists) that checks whether the trick or
+Flexicon has the correct output on your system.
+
+
+E. Library program definition
+=============================
+
+Basic concept:
+
+Library is the user interface that manages tricks and books and runs
+the commands.  
+
+Library has general and optional named shelves on which it stores
+collection of tricks obtained from Flexicons and individual tricks.
+
+A shelf can be emptied, filled, combined and packaged into a new book,
+or dumped out to an alias file. 
+
+Library will check the users selection to ensure that every trick on
+the shelf works, and mark broken tricks/books as 'compromised' until
+their tests no longer fails.
+
+
+Commands 
+========
+
+There are currently 27 command designs for the library program:
+
+User Interface: library
+
+Bookkeeping:  makeAliasFile, make-trick-form
+
+Preparation: check-trick, check-book, check-software, find-software,
+             gather-software, diff-software, select-trick, purge-trick
+
+Shelf management: remove-book, remove-shelf, remove-trick, add-book,
+                  add-trick, use-book, use-trick, show-shelf,
+                  trick-show-[datafields], book-show-[datafields],
+                  move-trick, copy-trick
+
+Testing books and tricks: validate-trick, validate-shelf,
+                          validate-book, validate-show-failures
+
+Producing books: write-book, gift-wrap
+
+
+User interface
+---------------
+
+$ library [TrickName|switch]
+
+  run this trick on system.
+
+If library cannot parse your input, the error message is 'Ook?'
+followed by an attempt to explain what went wrong.
+
+library itself can be part of a piped compound command under UNIX --
+tricks can contain tricks that contain tricks which contain
+tricks(...)
+
+
+Bookkeeping:
+------------
+
+List: makeAliasFile, make-trick-form
+
+$ makeAliasFile [shelf|{TrickName1, TrickName2...}] [format] [filename]
+
+  Dump requested library contents into an alias file(s):
+  TrickName=command for unix, not sure what windows needs.
+
+$ make-trick-form [TrickFileName, ID]
+
+  Create TrickFileName_ID.tr containing skeleton of datafields.
+
+
+Preparation:
+------------
+
+List: check-trick, check-book, check-software, find-software,
+gather-software, diff-software, select-trick, purge-trick
+
+$ check-trick [optional: --mandatory]
+
+  reports any missing entries in a trick file.  If mandatory is set
+  only missing mandatory entries are shown.
+
+$ check-book [optional: --mandatory] [Flexicon]
+
+  As check-trick, but it check all the tricks of the Flexicon.
+
+$ check-software [TrickName|Flexicon|shelf|all]
+
+  Create list of software required and runs 'configure' to check if
+  the user's system has the required software, report back if 'foo'
+  needs to be installed, disable non-functional tricks, enable all
+  tricks that work.
+     
+$ find-software [switch|TrickName|keywords] [software] [location]
+
+  Search location for tricks that conform to software requirements.
+  Do not show duplicates if one trick already matches the
+  requirements.  Report tricks/books that are not yet on the shelf,
+  and have software requirements
+
+$ gather-software [switch|TrickName|keywords] [software] [location] 
[FlexiconName]
+
+  Search location for tricks that conform to software requirements.
+
+$ diff-software [switch|TrickName] [location] 
+
+  Show a numbered list along with the software requirement and command
+  differences of the given TrickName.
+
+$ select-trick [number|ID]
+
+  Sometimes two or more tricks do the same thing in a different way.
+  This command allows you to select the one your prefer.
+
+$ purge-trick [number|ID] [successor ID | alternative ID]
+
+  Schedules an obsolete trick for a deletion vote at the TrickServer.
+  Note that the ID is never reused, but marked obsolete.  A duplicated
+  trick that uses a different command is not obsolete, nor is a broken
+  trick that could be repaired.  However an identical trick that has
+  two IDs is indeed obsolete -- there can only be one!
+
+
+Shelf management:
+-----------------
+
+List: remove-book, remove-shelf, remove-trick, add-book, add-trick,
+use-book, use-trick, show-shelf, trick-show-[datafields],
+book-show-[datafields], move-trick, copy-trick
+
+Tricks and Flexicons are never actually deleted, just removed from
+the library's data collection.  If you want to delete them, you need
+to delete the actual file(s) themselves.
+
+$ remove-book [FlexiconName]
+
+  removes everything from FlexiconName from all shelves.
+
+$ remove-shelf [shelf]
+
+  empty that shelf.
+
+$ remove-trick [TrickName|switch]
+
+  Remove [TrickName|switch] from the shelves.
+
+$ add-book [no-test] [shelf] [FlexiconName]
+
+  If no shelf is given, a new shelf bearing FlexiconName is created. 
+
+$ add-trick [no-test] [shelf] [TrickName] 
+
+  If no shelf is given, it will be added to 'general'.  
+
+  If no-test is set, the addition will not be tested but marked
+  'compromised'.
+
+$ use-book [FlexiconName]
+
+  Empty all shelves, load FlexiconName               
+
+$ use-trick [TrickName]
+
+  Empty all shelves, use TrickName instead.
+
+$ show-shelf [shelf|all] [switches|TrickName]
+
+  show what tricks are on the shelf and the original FlexiconName if
+  applicable. 
+
+$ trick-show-[datafields] [switch|TrickName|keywords] 
+                     
+  where [datafields] are any data fields a Trick contains.
+  Example: trick-show-precis-command 
+
+$ book-show-[datafields] [Flexicon|shelf|keywords] 
+                     
+  where [datafields] are any data fields a Trick contains.
+  Example: book-show-author-status
+
+$ move-trick [TrickName] [shelf] 
+  
+  move trick to a shelf.
+
+$ copy-trick [TrickName] [shelf]
+  
+  copy trick to a shelf.
+
+
+Testing books and tricks
+------------------------
+
+List: validate-trick, validate-shelf, validate-book,
+validate-show-failures
+
+$ validate-trick [Name]
+$ validate-shelf [shelf]
+$ validate-book  [Flexicon]
+
+  run tests on the above.  Tricks marked 'Compromised' will be
+  disabled.  Show report of disabled items.
+
+$ validate-show-failures
+
+  display complete report of failed tests.
+
+
+Producing books:
+----------------
+
+List:  write-book, gift-wrap
+
+$ write-book [shelf]
+
+  write new book from shelf contents.
+
+$ gift-wrap [FlexiconName]
+
+  add author's digital signature and make md5sum (I assume you can
+  securely add the actual md5sum into the signature somehow, so
+  malicious modification is not easily possible despite it being plain
+  text)
+
+
+F. Data Fields
+==============
+
+A trick is a plain text file using the LaTeX macro style format, ie,
+\fieldName{<contents>}
+
+The following fields are defined.
+
+* denotes an mandatory entry to ensure overall consistency
++ denotes user/community set mandatory entry
+- denotes optional entry that users/communities can set.
+& encrypted mandatory field (probably a key for a server?)
+% encrypted optional field  (probably a key for a server?)
+# constant mandatory entry
+R range (min, max, numerical, in []) 
+
+Absence of a non-mandatory field is interpreted as 'none'.
+
+Tricks
+------
+
++ Flexicon                            Name of Flexicon this belongs to
++ Organisation                          Name of community/company
+# Author                                The original designer        
+# ID                                    unique numerical ID
+% AuthorEmail                           Email of original designer
++ Maintainer                            Current maintainer 
+% MaintainerEmail                       Email of maintainer
+- MailingList                           mailing list for this trick
+- Contributers                          people who made/fixed this
+- PublicKey                             To sign the trick
+- md5sum                                Enable safety check of trick
+* Status                                public, restricted, personal
++ License                               Licence type 
++ Copyright                             some tricks are propietary
++ Encryption                            whether the trick is secured
+- Reviewers                             last person/group to review this
+# TrickName                             One word alias name
+* Precis                                Short description (one line)
+* Description                           Long description  
+* LongSwitch                            official Long switch
++ ShortSwitch                           official short switch
+- UserLongSwitch                        user set alias for long switch
+- UserShortSwitch                       user set alias for short switch
+* Version                               tricks have versions
++ OperatingSystem, R                    what OS to use (absence = any)
++ ExportVariables                       shell scripts may require env vars set
++ ExportVariablesDescription            description of req. env vars
+* Software                              list of req. SW and [version ranges]
+* Shell                                 What shell to use
+* Command                               script or command of the trick         
        
+* Keywords                              a list of tags eg, bash, svn, emacs
++ TestShell                             What driver to use to run the test
++ TestEnvironment                       environment script for the test
++ TestInput                             data for the test
++ TestCode                              code for the test
++ TestExpectation                       expected output 
++ TestResult                            expected result
++ FunctionalityStatus                   result of last test run
+- Notes                                 Extra notes
++ Bugs                                  Bugs and such
++ Alternatives                          Similiar tricks (IDs thereof)
++ Ancestor                              Trick that was used to make this
++ Successor                             Newer version of trick (ID thereof)
+* InitialCreationDate                   When was it made?
+* LastUpdated                           When was it last fixed?
++ WebAddress                            Canonical source of this trick
++ UserDefinedFields                     Some empty spots for future use
++ Compromised                           true if a test failed  
++ Server                                Origin 
+
+Flexicon/Library
+------------------
+
+# Real ID                               Unique ID
+* Working ID                            for inofficial/personal copies
+# FlexiconName                        Name
+- Public Key                            To sign the Flexicon
+- md5sum                                Enable safety check of Flexicon
++ OperatingSystem, R                    what OS to use (absence = any)
+* Software                              list of req. SW and version ranges
+* Shell,R                               What shell to use
+* Precis                                Short description (one line)
+* Description                           Long description  
++ Tricklist                             list of tricks added
+* InitialCreationDate                   When was it made?
+* LastUpdated                           When was it last updated?
++ WebAddress                            Canonical source of this Flexicon
++ Alternatives                          Similiar Flexicons (IDs thereof)
++ Ancestor                              Original Flexicon or None
++ Successor                             Newer version of Flexicon (ID thereof)
+* Keywords                              a list of tags eg, bash, svn, emacs
++ Organisation                          Name of community/company
+# Author                                The original designer        
+% AuthorEmail                           Email of original designer
++ Maintainer                            Current maintainer 
+% MaintainerEmail                       Email of maintainer
+- Mailing list                          mailing list for this trick
+- Contributers                          people who made/fixed this
+* status                                public, restricted, personal
++ License                               Licence type 
++ Copyright                             some Flexicons are propietary
++ Encryption                            whether the trick is secured
+- Reviewers                             last person/group to review this
++ Compromised                           true if a test failed  



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@labs.apache.org
For additional commands, e-mail: commits-h...@labs.apache.org

Reply via email to