..     Licensed to the Apache Software Foundation (ASF) under one
       or more contributor license agreements.  See the NOTICE file
       distributed with this work for additional information
       regarding copyright ownership.  The ASF licenses this file
       to you under the Apache License, Version 2.0 (the
       "License"); you may not use this file except in compliance
       with the License.  You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing,
       software distributed under the License is distributed on an
       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       KIND, either express or implied.  See the License for the
       specific language governing permissions and limitations
       under the License.

Online References
======================

Generated API docs, useful for browsing through the code, viewing inheritance, etc:

* http://allura.sourceforge.net/epydoc/

Our SourceForge project page, including tickets, discussion forums, etc.:

* http://sourceforge.net/p/allura/home/


Much of the current forge was inspired by Roundup
---------------------------------------------------------------------

http://roundup.sourceforge.net/index.html

After we told ESR about roundup, he posted some interesting ideas about how to "federate" roundup entities "namespaces" that are ultimately just url-prefixes per project:

http://esr.ibiblio.org/?p=1359

Message based system needed
---------------------------------------------------------------------

http://ejohn.org/blog/google-groups-is-dead/


Potential pitfalls for groupware development
---------------------------------------------------------------------

http://research.microsoft.com/en-us/um/people/jgrudin/past/papers/cacm94/cacm94.html

AMQP Online References
---------------------------------------------------------------------

http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/
http://www.igvita.com/2009/10/08/advanced-messaging-routing-with-amqp/
