======================================================================
mod_uploader 取扱説明書 (CGI 版用)
======================================================================

.. image:: title.png
   :width: 440
   :height: 89
   :alt: mod_uploader: CGI として動作する高速アップローダ

.. contents::

mod_uploader とは?
----------------------------------------------------------------------

mod_uploader は，よくあるアップローダを C++ で実装したものです．以下の
ような特長があります．

* C++ で記述されているので，Perl や PHP で作られた物に比べて高速．

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

* アップロード時の進捗状況をリアルタイムに表示可能．

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

http://acapulco.dyndns.org:8888/up/

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

mod_uploader は，UNIX 系 OS で動作します．詳細を以下に示します．

* `APR`_ (Apache Portable Runtime) 0.9.6 以上

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

* `GNU Make`_ 3.8 以上

* `ImageMagick`_ 6.0 以上（サムネイル画像生成を行わない場合は不要）
  
* `ffmpeg`_ 0.4.9 以上（動画のサムネイル画像生成を行わない場合は不要）


開発は，Gentoo Linux kernel **2.6.10** ，GCC **3.3.5** ，ImageMagick
**6.1.8.8** ，ffmpeg **0.4.9** で行っています．

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

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

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

* `mod_uploader-1.4.4.tgz <http://prdownloads.sourceforge.jp/mod-uploader/20271/mod_uploader-1.4.4.tgz>`_

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

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

::

  $ cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/mod-uploader login
  $ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/mod-uploader co mod_uploader


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

バグ情報
----------------------------------------------------------------------

`バグ情報 <http://acapulco.dyndns.org/mod_uploader/bts/html/guest.cgi?project=mod_uploader&amp;action=top>`_

バグを見つけた場合は，リンク先の「新規レポート」から書き込んでください．

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

UNIX 系 OS
``````````````````````````````````````````````````````````````````````

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

::

 $ ./configure
 $ make cgi-module

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

::

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

とします．

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

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

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

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

_`--enable-thumbnail`
  ファイルのサムネイル画像を生成したい場合に指定してください．

_`--enable-movie`
  ffmpeg を使って動画のサムネイル画像を生成したい場合に指定してくださ
  い． `--enable-thumbnail`_ と組み合わせて使用します．

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

_`--with-writer` = `TYPE`
  ファイルを書き出す方法を指定します．basic と mmap が指定可能です．
  (デフォルト: basic)

_`--with-ie-name-code` = `CODE`
  Internet Explorer に対してファイル名を出力するときの文字コード．
  (デフォルト: cp932)

_`--enable-iconv-const` iconv の第二引数に const をつけるかどうか．
  `Mac OSX Tiger`_ や `FreeBSD`_ を使用している場合は指定する必要があり
  ます．

各環境での例
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

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

::

  $ ./configure
  $ make cgi-module

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

::

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

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

::

  $ env CPPFLAGS="-I/sw/include" ./configure --enable-iconv-const --disable-rwlock
  $ env MACOSX_DEPLOYMENT_TARGET=10.4 make cgi-module

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

(以下書きかけ)


.. UNIX 系 OS
.. ``````````````````````````````````````````````````````````````````````

.. mod_uploader.so を `lighttpd`_ のプラグインディレクトリにコピーします．
.. プラグインディレクトリが `/usr/lib/lighttpd` の場合，次のようにします．

..   $ su
..   # cp mod_uploader.so /usr/lib/lighttpd

.. 設定
.. ----------------------------------------------------------------------

.. lighttpd の設定
.. ``````````````````````````````````````````````````````````````````````

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

.. テンプレートは，tmpl/lighttpd ディレクトリに入っている `view.htm` ，
.. `progress.htm` ， `download.htm` ， `thumbnail.htm` ， `error.htm` を利
.. 用してください．

.. ::

..   uploader.path                       = アップローダを設置する場所（末尾の / は無し） *
  
..   uploader.url                        = アップローダの URL（RSS の生成に利用）
  
..   uploader.file-directory             = アップロードファイルを保存するディレクトリ *
..   uploader.thumb-directory            = サムネイル画像を保存するディレクトリ *
..   uploader.tmp-directory              = 一時ファイルを保存するディレクトリ *
  
..   uploader.max-file-size              = 一回にアップロードできるファイルの最大サイズ（KB）
..   uploader.total-file-size-limit      = ファイルの合計サイズの上限値（KB）
..   uploader.total-file-number-limit    = ファイルの個数の上限値
..   uploader.per-page-item-number       = 1 ページあたりに表示するアイテム数
  
..   uploader.view-template-file         = トップページのテンプレートファイル *
..   uploader.progress-template-file     = アップロード状況表示画面のテンプレートファイル *
..   uploader.download-template-file     = DL pass 入力画面のテンプレートファイル *
..   uploader.thumb-template-file        = サムネイルページのテンプレートファイル *
..   uploader.error-template-file        = エラーページのテンプレートファイル *
  
..   uploader.activate                   = mod_uploader を有効化するかどうか *

.. `http://foo/up/` に設置する場合の設定例は以下のようになります．（これは
.. あくまでも例です．ディレクトリやファイルのパスは環境よって違ってきます）

.. ::

..   uploader.path                       = "/up"
  
..   uploader.url                        = "http://foo/up/"
  
..   uploader.file-directory             = "/home/kimata/prog/Apache/Uploader/file"
..   uploader.thumb-directory            = "/home/kimata/prog/Apache/Uploader/thumb"
..   uploader.tmp-directory              = "/home/kimata/prog/Apache/Uploader/tmp"
  
..   uploader.max-file-size              = "1024"
..   uploader.total-file-size-limit      = "10240"
..   uploader.total-file-number-limit    = "1000"
..   uploader.per-page-item-number       = "20"

..   uploader.view-template-file         = "/home/kimata/prog/Apache/Uploader/tmpl/lighttpd/view.htm"
..   uploader.progress-template-file     = "/home/kimata/prog/Apache/Uploader/tmpl/lighttpd/progress.htm"
..   uploader.download-template-file     = "/home/kimata/prog/Apache/Uploader/tmpl/lighttpd/download.htm"
..   uploader.thumb-template-file        = "/home/kimata/prog/Apache/Uploader/tmpl/lighttpd/thumbnail.htm"
..   uploader.error-template-file        = "/home/kimata/prog/Apache/Uploader/tmpl/lighttpd/error.htm"
  
..   $HTTP["url"] =~ "^/up/" {
..       uploader.activate               = "enable"
..   }
  
.. 注意事項
.. ``````````````````````````````````````````````````````````````````````

.. * `lighttpd`_ の動作に不慣れなうちは，ディレクトリやファイルの指定には
..   絶対パスを使用してください．

.. * ディレクトリやファイルの指定には「\\」を使わないでください．
..   ( **×** C:\foo\bar\baz， **×** C:/foo/bar/baz)

.. * ディレクトリやファイルの指定には空白「 」を含めないでください．
..   ( **×** C:/Documents and Settings/foo/bar/baz)

.. * `uploader.file-directory` ， `uploader.thumb-directory` ，
..   `uploader.tmp-directory` の各ディレクトリは， `lighttpd`_ が読み書き
..   実行できるパーミッションに設定されている必要があります．

.. * `uploader.file-directory` ， `uploader.thumb-directory` には
..   mod_uploader が生成するファイル以外を置かないでください．

.. * 設定によっては，テンプレートを一部書き換えないと正常に表示されません．
..   適宜書き換えてください．

.. 起動
.. ----------------------------------------------------------------------  

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

テンプレートの書式
----------------------------------------------------------------------  

Comming soon...

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

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

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

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

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

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

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

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

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

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

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

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

.. _`APR`:                            http://apr.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/
.. _`ffmpeg`:                         http://ffmpeg.sourceforge.net/index.php
.. _`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/

.. _`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/

.. raw:: html

  <hr />

  <div class="footer">
   <p class="id">
    $Id: cgi.txt 1076 2006-05-24 12:38:36Z svn $
   </p>

   <address><img src="mail_address.png" width="204" height="16" alt="kimata&#64;acapulco.dyndns.org" /></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:
