= Guiding Principles = - in general, documentation becomes a lower-class citizen since programmers, QA, etc. generally know the system well so will devote a minimum of time to writing and maintaining documentation. (In addition, usually people solidly familiar with a product are not necessarily the best at presenting the product in a way not intelligible to experts.) - documentation is only an issue when it is wrong or when someone new to the project spends an inordinate amount of time "getting" the software. Experts are (competitively) assumed to be able to correctly discern how the system works. - so, if (good) documentation is desirable, it must be easy for programmers to edit the documentation - everyone wants to edit documentation in their own way. people will avoid editing documentation if it is not easy for them personally - if documentation becomes a first class citizen and is maintained in a repository with the code, documentation changes can be seen in the same commit as code changes. This not only gives a way of seeing the project evolve in natural language[*], but also encourages the writing of documentation as part of the duty of making a changeset - DRY = Overall strategy = - Each package should have a README.txt in some markdown language - These README should be read in the appropriate setup.py as the `long_description` (e.g.): """ try: here = os.path.dirname(os.path.abspath(__file__)) description = file(os.path.join(here, 'README.txt')).read() except OSError: description = '' """ This way, the full descriptions can live with the packages on pypi. - to note: restructured text (ReST), given a magical flag in setup.py that I can never remember, will be rendered on pypi. To the best of my knowledge, markdown (the format) cannot be rendered there. If its not restructured text, it will be rendered in text/plain in a
so not a big deal - a script should be written that renders the README.txt files -> HTML and posts each to an appropriate place on wiki.m.o or dev.m.o. The script will need user auth, which I'm not sure how it is done on either side, though we could steal cookies from firefox - If we need multiple pages, these could live in a docs directory. Or they could just live directly on a wiki. I'm inclined to keep as much as possible with the source if it is at all of interest to users and developers. IMHO, this makes it more likely to be maintained and if anyone is operating without internet access or is unaware of where to find the documentation on the wiki (always an issue for me, anyway), then they will have a local copy on checkout (and if they're not using a VCS checkout....maybe they should be. So many python and system packages problems are avoided by using virtualenv + setup_development.py -- I have never had a problem with these in combination. ). - In this way, the documentation is available at four entry points -- {wiki,dev} github, pypi, and with the source on checkout -- but since they are mirrored from one canonical source, all documentation remains up to date - since rendered documentation will only be populated via a script (presumedly when a new version is in vogue), we control when the documentation is "released" to this mirror - In addition, arbitrary {dev,wiki} pages may be created that do not use this strategy. Only a set of scripts is uploaded to e.g. dev.m.o - if we ever change our documentation strategy, since there are multiple good copies and (unlike sphinx) the script is a glue layer rather than a proscription of how to write documentation, we can transparently pick a copy and go with it - diagrams should be done in some sort of declarative syntax versus rendered raster images. For instance, I like graphviz (see http://graphviz.org/Gallery.php, or e.g. http://k0s.org/portfolio/microfic.gv.txt vs http://k0s.org/portfolio/microfic.gv.txt?format=raw ). We could also do SVG, but I find SVG to be less declarative and editable for this purpose (though of course the resulting rendering can be SVG). This has the advantage that diffs to the diagram are human-readable and, more importantly, if a diagram needs to be updated then it can be vs raster images and the usual need to recreate from scratch. - culture may encourage documentation contibution. I'm a busy person -- we all are -- and often I've written very detailed and highly technical documentation on the mailing lists only to have to repeat myself several times and then be told that I should add it to the (badly maintained) wiki documentation In short, there is not enough manpower/time to foster a system of disincentives. This means we need to document(!) how to contribute and make it very clear that better documentation is the responsibility of everyone. In the same way, if you *see* something on a mozmill-dev thread that belongs in the documentation, please update; conversely, if you update the documentation in before answering a mozmill-dev email, note that too. - inclusion of source code via identifiers: there are several pieces of software that are able to extract e.g. a function or class from a source code file. We should build upon this to encapsulate up-to-date examples in our scripts vs copy+paste. - leverage of docstrings and comments: one of the best places you can document highly technical things is directly in a `.py` or `.js` file. This way, the programmer has the information at their fingertips as they program. Similar to the above, some (though probably not all) of these could be included into our docs in an (again) non copy+paste manner ---- [*] for extra credit, one could imagine an etherpad-like playback webpage that shows the evolution of the documentation with links to the corresponding changeset. [**] there was a time when if I was semi-interested in a piece of software I became very non-interested if I saw it was using sphinx. The README.txt pointed to the index.txt in docs, which had a make file and some other nonsense, unrendered and generally unreadable in-source, existing only as a crappy replacement to HTML which, when you found the website on which it was rendered, was usually mostly bereft of content anyway