Updated copyright
[mediagoblin.git] / docs / beardomatic.rst
1 ===========================================
2 Beardomatic: Infrastructure Documentation
3 ===========================================
4
5 What the hell is Beardomatic?
6 =============================
7
8 You might be wondering, "Gah! What the hell is Beardomatic!?"
9
10 Well, I'll tell you. GNU MediaGoblin is a piece of software that sits
11 on a stack of libraries that do a bunch of stuff. It makes it easier
12 to differentiate the bits of code that encompass GNU MediaGoblin from
13 the bits of code that GNU MediaGoblin sit on top of. Thus, we came up
14 with the TOTALLY AWESOME name Beardomatic.
15
16 Now you might be saying, "Holy crap!? Another web framework? Are you
17 going to write a mocking framework and an enumeration library, too!?"
18
19 No, we're not. We're just calling this Beardomatic so that it's
20 easier to talk about things. However, at some point, we can take
21 these infrastructure bits from GNU MediaGoblin and turn them into a
22 full-blown "web framework". We wouldn't do this to compete for
23 mindshare with other web frameworks. We would do this to make it
24 easier for us to bootstrap other similar projects.
25
26
27 Beardomatic software stack
28 ==========================
29
30 Beardomatic is a software stack "web framework" composed of the
31 following bits:
32
33 * Project infrastructure
34
35 * `Python <http://python.org/>`_: the language we're using to write
36 this
37
38 * `Nose <http://somethingaboutorange.com/mrl/projects/nose/>`_:
39 for unit tests
40
41 * `buildout <http://www.buildout.org/>`_: for getting dependencies,
42 building a runtime environment, ...
43
44 * Data storage
45
46 * `MongoDB <http://www.mongodb.org/>`_: the document database backend
47 for storage
48
49 * Web application
50
51 * `Paste Deploy <http://pythonpaste.org/deploy/>`_ and
52 `Paste Script <http://pythonpaste.org/script/>`_: we'll use this for
53 configuring and launching the application
54
55 * `WebOb <http://pythonpaste.org/webob/>`_: nice abstraction layer
56 from HTTP requests, responses and WSGI bits
57
58 * `Routes <http://routes.groovie.org/>`_: for URL routing
59
60 * `Beaker <http://beaker.groovie.org/>`_: for handling sessions
61
62 * `Jinja2 <http://jinja.pocoo.org/docs/>`_: the templating engine
63
64 * `MongoKit <http://namlook.github.com/mongokit/>`_: the lightweight
65 ORM for MongoDB we're using which will make it easier to define
66 structures and all that
67
68 * `WTForms <http://wtforms.simplecodes.com/>`_: for handling,
69 validation, and abstraction from HTML forms
70
71 * `Celery <http://celeryproject.org/>`_: for task queuing (resizing
72 images, encoding video, ...)
73
74 * `RabbitMQ <http://www.rabbitmq.com/>`_: for sending tasks to celery
75
76 * Front end
77
78 * `JQuery <http://jquery.com/>`_: for groovy JavaScript things
79
80
81 How to ... in Beardomatic?
82 ==========================
83
84 FIXME - write this