Adds "Send encouragement" section
[mediagoblin.git] / docs / hackinghowto.rst
index 93cd5ddce3520f1d0e576b3a70ce716210ccdf8c..8b40e37d79b9c02da8ac881847bae6dccf25ba93 100644 (file)
@@ -1,5 +1,208 @@
+.. _hacking-howto:
+
 ===============
  Hacking HOWTO
 ===============
 
-FIXME - write this!
+
+So you want to hack on GNU MediaGoblin?
+=======================================
+
+First thing to do is check out the `Web site
+<http://mediagoblin.org>`_ where we list all the project
+infrastructure including:
+
+* the mailing list
+* the IRC channel
+* the bug tracker
+
+Additionally, we have information on how to get involved, who to talk
+to, what needs to be worked on, and other things besides!
+
+
+How to set up and maintain an environment for hacking
+=====================================================
+
+
+Getting requirements
+--------------------
+
+First, you need to have the following installed before you can build
+an environment for hacking on GNU MediaGoblin:
+
+* Python 2.6 or 2.7  - http://www.python.org/
+
+  You'll need Python as well as the dev files for building modules.
+
+* python-lxml        - http://lxml.de/
+* git                - http://git-scm.com/
+* MongoDB            - http://www.mongodb.org/
+
+If you're running Debian GNU/Linux or a Debian-derived distribution
+such as Mint or Ubuntu, running the following should install these
+requirements::
+
+    sudo apt-get install mongodb git-core python python-dev \
+         python-lxml
+
+
+Running bootstrap and buildout
+------------------------------
+
+After installing the requirements, follow these steps:
+
+1. Clone the repository::
+
+       git clone http://git.gitorious.org/mediagoblin/mediagoblin.git
+
+2. Bootstrap and run buildout::
+
+       cd mediagoblin
+       python bootstrap.py && ./bin/buildout
+
+
+That's it!  Using this method, buildout should create a ``user_dev``
+directory, in which certain things will be stored (media, beaker
+session stuff, etc).  You can change this, but for development
+purposes this default should be fine.
+
+
+.. Note::
+
+   We used `zc.buildout <http://www.buildout.org/>`_ because it
+   involves fewer steps to get things running and less knowledge of
+   Python packaging.  However, if you prefer to use `virtualenv
+   <http://pypi.python.org/pypi/virtualenv>`_, that should work just
+   fine.
+
+
+Updating dependencies
+---------------------
+
+While hacking on GNU MediaGoblin over time, you'll eventually have to
+update your development environment.  To do that, run::
+
+    ./bin/buildout
+
+
+Wiping your environment for a clean-slate
+-----------------------------------------
+
+.. Note::
+
+   Unless you're doing development and working on and testing creating
+   a new instance, you will probably never have to do this.  Will
+   plans to do this work and thus he documented it.
+
+
+Delete the following directories:
+
+* bin/
+* develop-eggs/
+* eggs/
+* mediagoblin.egg-info/
+* parts/
+* user_dev/
+
+FIXME - how to drop data from mongodb?  we should probably write a
+script.
+
+
+Running the server
+==================
+
+Run::
+
+    ./bin/paster serve mediagoblin.ini --reload
+
+
+Running the test suite
+======================
+
+Run::
+
+    ./bin/nosetests
+
+
+What's where
+============
+
+After you've run buildout, you're faced with the following directory
+tree::
+
+    mediagoblin/
+    |- mediagoblin/              source code
+    |  |- tests/
+    |  |- templates/
+    |  |- auth/
+    |  \- submit/
+    |- docs/                     documentation
+    |
+    |        the rest of these directories are generated by
+    |        buildout.
+    |
+    |- bin/                      scripts
+    |- develop-eggs/
+    |- eggs/
+    |- mediagoblin.egg-info/
+    |- parts/
+    |- user_dev/                 sessions, etc
+
+
+
+Quickstart for Django programmers
+=================================
+
+FIXME - write this
+
+
+Bite-sized bugs to start with
+=============================
+
+FIXME - write this
+
+
+Tips for people new to coding
+=============================
+
+Python
+------
+
+GNU MediaGoblin is written using a programming language called `Python
+<http://python.org/>`_.
+
+There are two different incompatible iterations of Python which I'll
+refer to as Python 2 and Python 3.  GNU MediaGoblin is written in
+Python 2 and requires Python 2.6 or 2.7.  At some point, we might
+switch to Python 3, but that's a future thing.
+
+You can learn how to code in Python 2 from several excellent books
+that are freely available on the Internet:
+
+* `Learn Python the Hard Way <http://learnpythonthehardway.org/>`_
+* `Dive Into Pyton <http://diveintopython.org/>`_
+* `Python for Software Design <http://www.greenteapress.com/thinkpython/>`_
+* `A Byte of Python <http://www.swaroopch.com/notes/Python>`_
+
+These are all excellent texts.
+
+FIXME - are there good quality Python tutorial videos?
+
+
+Libraries
+---------
+
+GNU MediaGoblin uses a variety of libraries in order to do what it
+does.  These libraries are listed in the :ref:`beardomatic-chapter`
+along with links to the project Web sites and documentation for the
+libraries.
+
+There are a variety of Python-related conferences every year that have
+sessions covering many aspects of these libraries.  You can find them
+at `Python Miro Community <http://python.mirocommunity.org>`_ [0]_.
+
+.. [0] This is a shameless plug.  Will Kahn-Greene runs Python Miro
+   Community.
+
+If you have questions or need help, find us on the mailing list and on
+IRC.