======================================================================
README for mod_fast_bbs
======================================================================

.. image:: img/title.png
   :width: 414
   :height: 96
   :alt: mod_fast_bbs: Apache のモジュールとして動作するスレッド型掲示板

.. contents::


mod_fast_bbs とは?
----------------------------------------------------------------------

mod_fast_bbs は，スレッド型の掲示板を `Apache`_ のモジュールとして実装
したものです．以下のような特長があります．

* `Apache`_ のモジュールとして C++ で記述されているので，Perl や PHP で
  作られた物に比べて高速．

* 独自の簡易スクリプト言語によるテンプレート機能があるので，再コンパイ
  ル無しで手軽に見た目を変更可能．


動作サンプル
----------------------------------------------------------------------

http://acapulco.dyndns.org:6060/bbs/


動作環境
----------------------------------------------------------------------

.. |IconWindows| image:: img/icon_windows.png
   :width: 16
   :height: 16
   :alt: WIndows

mod_fast_bbs は，UNIX 系 OS で動作します．(|IconWindows| `Windows 版はこちら <http://acapulco.dyndns.org/mod_fast_bbs/apache-win.htm>`_)

詳細を以下に示します．

* `Apache`_ 2.0 以上（ `Debian`_ の場合，apache2，apache2-\*-dev，
  libapr0-dev が必要）

* `GNU Compiler Collection`_ 3.3 以上，または， `Intel C++ Compiler`_
  for Linux 9.1 以上

* `GNU Make`_ 3.8 以上

* `ImageMagick`_ 6.0 以上
  
開発は， `Gentoo Linux`_ Kernel **2.6.10** ，GCC **3.3.5** ，Apache
**2.0.54** ，ImageMagick **6.1.8.8** で行っています．


ライセンス
----------------------------------------------------------------------

`The zlib/libpng License`_ （ `The zlib/libpng License の翻訳`_ ）に従
います．


ダウンロード
----------------------------------------------------------------------

* `mod_fast_bbs-0.0.4.tgz <http://prdownloads.sourceforge.jp/mod-fast-bbs/22630/mod_fast_bbs-0.0.4.tgz>`_


CVS リポジトリ
----------------------------------------------------------------------

下記のようにすることで check out できます．（パスワードは空）

::

  $ cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/mod-fast-bbs login
  $ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/mod-fast-bbs co mod_fast_bbs


また， `ViewCVS 経由で参照
<http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mod-fast-bbs/mod_fast_bbs/>`_
することもできます．


コンパイル方法
----------------------------------------------------------------------

`GNU Compiler Collection`_ でコンパイルする場合は，

::

 $ ./configure
 $ make apache-module

とします． `Intel C++ Compiler`_ でコンパイルする場合は，

::

  $ env CC=icc ./configure
  $ make apache-module

とします．

configure は次のオプションを受け付けます．エラーがでた場合は，
`--with-apxs2`_ ， `--with-apctl2`_ や `--with-aprconf`_ を試してみてく
ださい．

_`--with-apxs2` = `APXS`
  apxs コマンドのパスを指定します．自動的に検出されない場合に使用して下
  さい．

_`--with-apctl2` = `APCTL`
  apachectl コマンドのパスを指定します．自動的に検出されない場合に使用
  して下さい．

_`--with-aprconf` = `APRCONF`
  apr-config コマンドのパスを指定します．自動的に検出されない場合に使用
  して下さい．

_`--with-libtool` = `LIBTOOL`
  libtool コマンドのパスを指定します．自動的に検出されない場合に使用し
  て下さい．

_`--with-march` = `CPU`
  特定の CPU 向けに最適化したい場合に使用します．例えば，Pentium 4 に最
  適化したい場合は， `--with-march`_ = pentium4 とします．

_`--with-mconf` = `MCONF`
  Magick++-config コマンドのパスを指定します．自動的に検出されない場合
  に使用してください．

各環境での例
``````````````````````````````````````````````````````````````````````

Gentoo Linux
......................................................................

::

  $ ./configure
  $ make apache-module

FreeBSD
......................................................................

::

  $ env CPPFLAGS="-I/usr/local/include -L/usr/local/lib" ./configure --with-libtool=/usr/local/bin/libtool15
  $ gmake apache-module

Mac OSX Tiger + Fink
......................................................................

::

  $ ./configure
  $ env MACOSX_DEPLOYMENT_TARGET=10.4 make apache-module


インストール
----------------------------------------------------------------------

次のコマンドを実行するだけで OK です．

::

  $ su
  # make -f GNUmakefile.apache install


設定
----------------------------------------------------------------------

設定は，Apache の設定ファイル（ `.htaccess` は不可）に，以下のように記
述します．（ ***** 印がついているものは必須）

テンプレートは，tmpl ディレクトリに入っている `index.htm` ，
`comment.htm` ， `thread.htm` ， `post_thread.htm` を利用してください．

::

  <Location 掲示板を設置するパス>
      SetHandler                fast_bbs
  </Location>    
  
  FastBBSBaseUrl                掲示板の URL *
  FastBBSDataDirectory          スレッドのデータを保存するディレクトリ *
  FastBBSFileDirectory          添付ファイルを保存するディレクトリ *
  FastBBSTempDirectory          一時ファイルを保存するディレクトリ *
  FastBBSIndexVIewTemplate      トップページのテンプレートファイル *
  FastBBSCommentVIewTemplate    コメントページのテンプレートファイル *
  FastBBSThreadVIewTemplate     スレッド一覧ページのテンプレートファイル *
  FastBBSPostThreadVIewTemplate スレッド作成ページのテンプレートファイル *

`http://foo/bbs/` に設置する場合の設定例は以下のようになります．`/img`
や `/css` の Alias は必須ではありません．テンプレートを書き換えたくない
場合に指定してください．（これはあくまでも例です．ディレクトリやファイ
ルのパスは環境よって違ってきます）

::

  <Location /bbs>
      SetHandler                fast_bbs
  </Location>    

  FastBBSBaseUrl                "http://foo/bbs"
  FastBBSDataDirectory          "/path/to/mod_fast_bbs/data"
  FastBBSFileDirectory          "/path/to/mod_fast_bbs/file"
  FastBBSTempDirectory          "/path/to/mod_fast_bbs/temp"
  FastBBSIndexVIewTemplate      "/path/to/mod_fast_bbs/tmpl/index.htm"
  FastBBSCommentVIewTemplate    "/path/to/mod_fast_bbs/tmpl/comment.htm"
  FastBBSThreadVIewTemplate     "/path/to/mod_fast_bbs/tmpl/thread.htm"
  FastBBSPostThreadVIewTemplate "/path/to/mod_fast_bbs/tmpl/post_thread.htm"

  Alias /bbs_img                "/path/to/mod_fast_bbs/img"
  Alias /bbs_css                "/path/to/mod_fast_bbs/css"
  Alias /bbs_js                 "/path/to/mod_fast_bbs/js"


起動
----------------------------------------------------------------------  

`Apache`_ を普通に起動すれば OK です．設置した場所にブラウザでアクセス
してみましょう．


お試し実行
----------------------------------------------------------------------  

次のコマンドを入力して，http://127.0.0.1:8080/bbs/ にアクセスすることで
することでインストールせずに動作を確認できます．(他のホストからアクセス
する場合は， *127.0.0.1* の部分を適当に置き換えてください)

::

  $ su -
  # make -f GNUmakefile.apache start

もし， `LoadModule` 関連のエラーが出た場合は，conf/apache.conf を適宜修
正してください．

停止は，次のようにします．

::

  # make -f GNUmakefile.apache stop


API ドキュメント
----------------------------------------------------------------------

http://acapulco.dyndns.org/mod_fast_bbs/api/


ツール
----------------------------------------------------------------------

プログラムの作成にあたってお世話になったツールを紹介します．

`Valgrind`_
  メモリの不正な参照や解放し忘れなどをチェックしてくれるツール．デバッ
  グでかなりお世話になりました．


参考文献
----------------------------------------------------------------------

プログラムの作成にあたってお世話になった文献を紹介します．

|Panda|_ |Secure|_

`Apacheモジュール プログラミングガイド`_
  `Apache`_ のモジュール作成に必要になる事柄を一通り説明した本．痒いと
  ころに手が届いているので，手元に置いておくと重宝します．

`Secure Coding in C And C++`_
  C/C++ でプログラムを作るときにセキュリティホールが発生してしまう原理と
  その対策について詳しく説明した本です．丁寧に書かれているので内容を
  しっかりと理解することができます．

`Advanced Topics in Module Design: Threadsafety and Portability`_
  `Apache`_ 2.0 でモジュールを作成するときに必要になってくるテクニック
  が解説されたパワポ．そんなに長くないので，モジュール書く前にさらっと
  読んでおきましょう．

`Apache API C++ Cookbook`_
  C++ を使って `Apache`_ のモジュールを作成する際の注意事項について説明
  したサイト．

`libapr (apache portable runtime) programming tutorial`_
  APR のチュートリアル．サンプルコードおよび，間違いやすい点についての
  記述が多いので重宝します．

`Using libavformat and libavcodec: An Update`_
  libavformat と libavcodec を使って動画からフレーム画像を取り出す方法
  を解説したページ．丁寧に書かれています．

`STL のページ`_
  C++ の標準テンプレートライブラリである STL について簡潔にまとめられた
  サイト．

`RubyExtensionProgrammingGuide`_
  Ruby の拡張ライブラリの書き方を解説したサイト．基本的な事項から少し高
  度な話題まで非常に良くまとまってます．

`Compiler Construction Lecture`_
  コンパイラ作成に関する実践的な内容が簡潔にまとめられたサイト．簡単な
  インタプリタもどきを作るんだったら，このサイトだけで十分かも．

.. _`Apache`:                         http://httpd.apache.org/
.. _`Debian`:                         http://www.debian.org/
.. _`GNU Compiler Collection`:        http://gcc.gnu.org/
.. _`Intel C++ Compiler`:             http://www.intel.com/cd/software/products/asmo-na/eng/compilers/clin/
.. _`GNU Make`:                       http://www.gnu.org/software/make/
.. _`ImageMagick`:                    http://www.imagemagick.org/
.. _`Visual C++ .NET`:                http://www.microsoft.com/japan/msdn/visualc/
.. _`Cygwin`:                         http://www.cygwin.com/
.. _`The zlib/libpng License`:        http://www.opensource.org/licenses/zlib-license.php
.. _`The zlib/libpng License の翻訳`: http://japan.linux.com/docs/licenses/zlib-license.shtml
.. _`Gentoo Linux`:                   http://www.gentoo.org/
.. _`FreeBSD`:                        http://www.freebsd.org/
.. _`Mac OSX Tiger`:                  http://www.apple.com/macosx/
.. _`Valgrind`:                       http://valgrind.org/

.. _`Apacheモジュール プログラミングガイド`: http://www.amazon.co.jp/exec/obidos/ASIN/4774117994/cstation-22
.. _`Secure Coding in C And C++`: http://www.amazon.co.jp/exec/obidos/ASIN/0321335724/cstation-22
.. _`Advanced Topics in Module Design: Threadsafety and Portability`: http://www.clove.org/~aaron/presentations/apachecon2004/ac2004advancedmodules.ppt
.. _`Apache API C++ Cookbook`:       http://zach.chambana.net/apache-cplusplus/ 
.. _`libapr (apache portable runtime) programming tutorial`: http://dev.ariel-networks.com/apr/apr-tutorial/html/apr-tutorial.html             
.. _`Using libavformat and libavcodec: An Update`: http://www.inb.uni-luebeck.de/~boehme/libavcodec_update.html
.. _`STL のページ`:                   http://www.wakhok.ac.jp/~sumi/stl/
.. _`RubyExtensionProgrammingGuide`:  http://i.loveruby.net/w/RubyExtensionProgrammingGuide.html
.. _`Compiler Construction Lecture`:  http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/compiler/

.. |Panda| image:: img/panda.png
   :width: 120
   :height: 151
   :alt: Apacheモジュール プログラミングガイド
   :align: right
.. _`Panda`: http://www.amazon.co.jp/exec/obidos/ASIN/4774117994/cstation-22

.. |Secure| image:: img/secure.png
   :width: 120
   :height: 151
   :alt: Secure Coding in C And C++
   :align: right
.. _`Secure`: http://www.amazon.co.jp/exec/obidos/ASIN/0321335724/cstation-22

.. raw:: html

  <hr />

  <div class="footer">
   <p class="id">
    $Id: apache.txt 1248 2006-08-05 05:51:43Z svn $
   </p>

   <address>
    <img src="img/mail_address.png" width="204" height="16" alt="&#107;&#105;&#109;&#97;&#116;&#97;&#64;&#97;&#99;&#97;&#112;&#117;&#108;&#99;&#111;&#46;&#100;&#121;&#110;&#100;&#110;&#115;&#46;&#111;&#114;&#103;" />
   </address>

   <p class="validator">
    <a href="http://validator.w3.org/check?uri=referer">
     <img src="http://www.w3.org/Icons/valid-xhtml11" alt="Valid XHTML 1.1!" height="31" width="88" />
    </a>
    <a href="http://jigsaw.w3.org/css-validator/check/referer">
     <img src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!" height="31" width="88" />
    </a>
   </p>
  </div>

.. Local Variables:
.. mode: rst
.. buffer-file-coding-system: utf-8-unix
.. End:

