<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<article id="contributing">
  <articleinfo>
    <title>Contributing</title>
    <author>
      <firstname>Ashley</firstname>
      <othername>J.S</othername>
      <surname>Mills</surname>
      <affiliation>
        <address><email>ashley@ashleymills.com</email></address>
      </affiliation>
    </author>
    <copyright>
      <year>2005</year>
      <holder role="mailto:ashley@ashleymills.com">The University Of Birmingham</holder>
    </copyright>
  </articleinfo>

  <sect1 id="contributing-intro"><title>Introduction</title>
    <sect2 id="contributing-intro-why"><title>Why?</title>
      <para>
        Writing a tutorial is a good way to learn a topic and a good way to hone your authoring skills. In addition, you will get the satisfaction of knowing that others will benefit from something you have created, that is, not just current and future members of our school, but people from all over the world.
      </para>
    </sect2>

    <sect2 id="contributing-intro-full"><title>Full-length tutorials</title>
      <para>
        Full-length tutorials are a great way to learn a topic since writing them generally requires a more in-depth understanding of the subject. They provide something really useful to the computing community, especially if no other tutorial of equal or higher quality exists. The drawback is that they require a much heavier investment in terms of time and effort than say, for writing a quicky or doing a translation.
      </para>
    </sect2>

    <sect2 id="contributing-intro-quicky"><title>Quickies</title>
      <para>
        Quickies, in the context of this tutorials collection, are short tutorials with high informational content that are lighter and less formal than a full-length tutorial, the topics will generally be more focused and the applications more specific. Examples could include using some tool to make a snazzy gif image for a web page, doing fancy substitutes in XEmacs, using the java debugger, securing a Unix box, doing something really useful with perl etc. Note too that quikies can evolve into full-blown tutorials with time.
        etc.
      </para>
    </sect2>

    <sect2 id="contributing-intro-translators"><title><acronym>XML</acronym> DocBook Translators</title>
      <para>
        As part of the automated build proces, the tutorials must be written in <acronym>XML</acronym> DocBook (see below). It is likely that there will be people who want to contribute yet don't have experience in writing <acronym>XML</acronym> DocBook, this is OK. If we get some translators, these contributors can submit their tutorials in pretty much any cut-and-pastable format and have one of our translators convert the file to <acronym>XML</acronym> DocBook. Translating documents into <acronym>XML</acronym> DocBook can be a bit tedious but since a good translation generally requires that the translator read the tutorial through, the translator gets to learn something in the process.
      </para>
        
      <note>
        <para>
          It is possible to translate quickly by only marking up things like paragraphs and sections but adding things like emphasis typically requires contextual knowledge of the word to be emphasised and hence a more thorough reading.  DocBook is a rich markup language, it makes sense to use and benefit from this fact when translating into it.
        </para>
      </note>

      <para>
        Translation is beneficial to the non-DocBook literate person too because when they get their tutorial back in <acronym>XML</acronym> DocBook it should be relatively easy for them to extropolate from this should they want to write another tutorial.
      </para>
    </sect2>

    <sect2 id="contributing-intro-readers"><title>Proof Readers</title>
      <para>
        Another way to contribute is to proof-read and give constructive comments. This confers the benefits of learning the topic to a certain extent and more importantly, improves the quality of the tutorials by removing typos and so on.
      </para>
    </sect2>
  </sect1>

  <sect1 id="contributing-process"><title>Getting Involved - Necessary Steps</title>
    <para>
      The process of getting involved should be quite informal and friendly but some kind of structure is necessary else nothing will get done. As a consequence I have formalised the process slightly and it can be summarised thus:
    </para>

    <para>
      The first step is to think of an idea, some of the best ideas are intuitive so it is probably not a good idea to sit down and contrive one, it is a good idea to write about something you know a lot about. It would be nice if you could contribute something that only you can.
    </para>

    <para>
      Write a brief summary of your idea and sent it to me via email, perhaps at some later date a web frontend for idea submission will be added, but for now, email will be sufficient. I will read the email and discuss it with my boss (Alan Sexton) and we will come to a decision as to whether we think the tutorial idea is good enough, assuming it is, the idea will be added to the tutorials list. Assuming you want to work on the tutorial, and are ready, you will be added to the <emphasis>tutorial</emphasis> group so you can checkout your tutorial via <acronym>CVS</acronym>. I will create the <acronym>CVS</acronym> module, in addition a document template will be created if you have don't have initial files to commit. This is of course, assuming you want to work on the tutorial, there is nothing to stop you from just submitting ideas for others to work on.
    </para>
      
    <para>
      A list of the tutorials will be kept in this document which will detail which tutorials are being worked on and by whom, you can check this list to see who is working on a given tutorial or check the list of tutorials not yet assigned authors and if one takes your fancy, request that you be assigned ownership.
    </para>
  </sect1>

  <sect1 id="contributing-oncein"><title>Accessing Your Tutorial</title>
    <para>
      Once you are in the tutorial group, you will be able to access the repository and checkout your own project, make modifications and commit any changes. This can be done like so:
    </para>

    <orderedlist>
      <listitem>
        <para>
          Install <acronym>CVS</acronym>: <ulink url="../tutorials/cvstute/cvstute.html">CVS Tutorial</ulink>
        </para>
      </listitem>
      <listitem>
        <para>
          To access from within the CS department, set <envar>CVSROOT</envar> to point to the repository:
        </para>

        <screen><userinput><command>setenv</command> <envar>CVSROOT</envar> /bham/htdocs/supportweb/documentation/tutorials/cvsrepos/</userinput></screen>

        <para>To access from outside of the CS department, set <envar>CVSROOT</envar> to:</para>

        <programlisting>&lt;USERNAME&gt;@dipsy.cs.bham.ac.uk:/bham/htdocs/supportweb/documentation/tutorials/cvsrepos/</programlisting>

        <para>Set <envar>CVS_RSH</envar> to <emphasis>ssh</emphasis>, so if you are using Windows you need a windows version of ssh.</para>
      </listitem>
      <listitem>
        <para>Issue <acronym>CVS</acronym> commands as normal, for example, to checkout the Ant module:</para>

        <screen><userinput><command>cvs</command> <option>checkout</option> <replaceable>ant</replaceable></userinput></screen>

        <para>
          This will create the directory <filename>ant</filename> containing a copy of the files that the module is comprised of, this is your personal copy and you can do what you like with it and it will not affect the real copy but if you do a cvs commit the changes will be committed to the real copy. (Stating the obvious I know, but worth stating) Luckily, one of the main reasons for using <acronym>CVS</acronym> is its ability to recover from such things, but please try your hardest not to perform such accidents.
        </para>
      </listitem>
    </orderedlist>
  </sect1>


  <sect1 id="contributing-spec"><title>Specification And Guidelines</title>
    <para>
      The tutorials are built automatically at 3AM every morning so please make sure you validate your <acronym>XML</acronym> document before commiting changes else it is likely to break the build process (Don't worry, I get mailed a report of the nightly build hence can fix things in the morning if they go wrong).
    </para>

    <para>
      Being a member of the <emphasis>tutorial</emphasis> group, you will be able to checkout all tutorials in the system, this can be useful if you want to see how somebody acheived something in their tutorial, if you are a first time commiter it is probably worth checking out some of the well established tutorials to get a general feel for the preferred DocBook style. Please don't modify the tutorials of others however without first getting permission from that person.
    </para>

    <para>DocBook 4.2 (The latest version) must be used to markup the tutorials as currently no other <acronym>DTD</acronym>'s are installed.</para>

    <para>
      Here is <citetitle>DocBook: The Definitive Guide</citetitle>, a very useful resource: <ulink url="http://www.docbook.org/tdg/en/html/docbook.html">http://www.docbook.org/tdg/en/html/docbook.html</ulink>.
    </para>

    <para>
      All files referenced from the tutorial such as example programs and so on must be placed in a directory called <filename>files</filename> in the same directory as the source file, all images must be placed in a directory called <filename>files/images</filename>. (Note that each tutorial has these directories, created by you, not some central repository of files and images).
    </para>

    <para>
      The <acronym>XML</acronym> file for the tutorial must match the ID of the particular tutorial for it to be build correctly. If multiple olinked <acronym>XML</acronym> files are used for a single tutorial, the root of the collection must match the ID of the particular tutorial. ID's are case sensitive but are currently all lower case to avoid confusion.
    </para>

    <para>
      Feel free to look at the source code for the project but please don't modify it since I solicit full control over it. (It is actually owned by the University Of Birmingham).  You can find the full project implementation details here: <ulink url="../projdoc/projdochome.html">Project Implementation Details</ulink>
    </para>
  </sect1>

  <sect1 id="contributing-ideas"><title>Current ideas and modules</title>
    <para>
      None yet, but an a possible layout for this section is illustrated below.
    </para>

    <table frame="all"><title/>
      <tgroup cols="5">
        <thead>
          <row>
            <entry>Tutorial</entry><entry>Description</entry><entry>Reference</entry><entry>Status</entry><entry>Contributors</entry>
          </row>
        </thead>
        <tbody>
          <row>
          </row>
        </tbody>
      </tgroup>
    </table>
  </sect1>
</article>

