ホーム 主筆 その他ソフト その他情報 Syuhitu.org English

Windows用ソフト

Jsvz

かなえ

くるみ

もとみ

MSDNライセンスキービューア

SkipSpace - スパースファイル変換ツール -

猜疑心に満ちた目でファイルを見守るツール

みゆき - 固定的FTPアップローダー

Relentless

Solaris用ソフト

ど貧民

HHttp

くず箱

JavaApplet

ソリティア

迷路

HHttp 画像ビューア

始めに

実を言うと俺は、俺の内部に存する低次元な欲求に逆らえず、ある種の画像を多量に収集している。で、日々その画像を鑑賞しているのだが、その画像鑑賞をより快適に行えるようにと開発したのがこのソフト。(開発の経緯も目的も使用方法もすべてが下らねぇな。)

システム構成

まず、現在俺が使用しているマシンの概況を説明すると、

  1. 普段使用しているWindowsのPC
  2. 普段使用しているSolarisのマシン(Firev250)
  3. いらなくなったSolarisのマシン(Blade100)

上記の3台をLAN(100Mbpsのイーサネット)でつないでいる。で、画像鑑賞を1と2の両方のマシンで心地よく行えるように、3の古いマシンをサーバとして活用することを思いついた。

要求

で、単にファイル共有なんだったら、いろいろとやりようもあるんだろうが、とりあえず以下の要求を満たしたい。

  • 3のマシンは必要なときだけ起動する。
  • 縮小イメージでプレビューできるようにしたい。
  • なるべく軽快に動く方が良い。
  • 扱うファイルはBMP,JPG,PNG,GIF
  • Solarisで使用するデスクトップシステムは必ずCDE。何が何でもCDE。

問題

上記の要求を満たすに当たって、当面問題となる事柄を考えてみる。

  • Solaris(特にCDE)では、画像を見るのには結構難儀する。まず、上述の全ての画像を見ることができるソフトは、GIMPやNetscape,StarSuiteぐらいのものである。でもって、たいていのソフトはドラッグアンドドロップに対応していない。
  • CDEでは、Windowsの画像の縮小表示のような機能がない。
  • ファイル共有をするならSolaris側から見ればNFSがいい感じなのだが、これはWindowsクライアント(Services for Unixとかいうソフトが使える)での性能が悪い(何でだろう?)、Solarisクライアントでは、サーバが起動していることを要求する、などと言った理由から断念した。
  • Sambaを落としてきて入れるのが面倒くさい。

方式

以上の要求や問題をすりあわせて考えた結果、以下のようにすることにした。

  • 画像を見るためにはWebブラウザを使用する。
  • 画像やHTMLをクライアントに送信するためのHTTPサーバを実装する。
  • HTTPサーバで、プレビュー用画像の生成を行う。

別にHTTPサーバを自作しなくたってもapatchだかなんだか知らんが、適当に落としてきて入れれば良さそうな気もするが、面倒そうだったからやめた。

あと、どうせLANで回線速度が極めて速いんだから、わざわざHTTPサーバ側で画像の縮小を行わなくたっても良さそうな気もするのだが、実は、縮小していない画像を一度に読み込むとクライアントのメモリが一杯になってしまい、実用に耐えないことが判明した。(特にWindowsのPC、メモリが384MBしかない。)だから、わざわざサーバ側でサムネールを生成する必要が生じたのだ。

あとはまぁ、一度生成したサムネールの画像はキャッシュしておいて、再度要求があった場合はその画像を返すようにする、とか言う機能もいるよな。

開発

使い方

公開したからには、とりあえず使い方も示しておいた方がいいのではないかと。

1.インストール方法・起動方法

1.1 Windowsの場合

Windows用にはインストーラ付きのものを作ってみた。横着したい人は使ってみてほしい。

1.1.1 インストール

で、インストールするには、「hhttp_win.cab」ファイルを展開した中に含まれている「HHttp.msi」ファイルをダブルクリックして開いてほしい。そうすると、インストーラが起動する。

インストール作業と言っても別に大してすることもない。とりあえず画面に従って「次へ」ボタンを押すだけだ。

1.1.2 使用方法

インストールに成功すると、スタートメニューの中に「HHttp管理コンソール」というショートカットが作成されるので、それを起動してほしい。すると、以下のような画面が表示される。

設定する内容は、下記のコマンドラインの引数と全く同じなのだが、とりあえず示しておく。

項目 説明
公開するディレクトリ 公開したいデータが格納されているディレクトリをフルパスで指定してください。
キャッシュディレクトリ 生成した画像のサムネールを格納するディレクトリを指定してください。このディレクトリには、必ず「公開するディレクトリ」に含まれないディレクトリを指定してください。
プレビュー イメージのサイズ サムネールのサイズをピクセル単位の面積で指定してください。
プレビュー イメージを横に並べる数 サムネールを横にいくつ並べて表示するのかを指定してください。
ディレクトリ プレビューの数 ディレクトリ名の横に表示される、ディレクトリ内の画像のサムネールをいくつ表示するのかを指定してください。
ポート番号 使用するTCPポート番号を指定してください。通常は80番ですが、80がほかですでに使用されている場合などは、別の番号を指定してください。
キャッシュの寿命 サムネールのキャッシュをどれぐらいの期間だけ保存しておくのかを、秒単位で指定してください。
キャッシュの削除を行う間隔 キャッシュの寿命を確認して削除する処理を、どれぐらいの間隔で行うのかを秒単位で指定してください。
404エラーの代わりに返すファイル 404エラー(指定されたファイルが見つからない)の時に表示するファイルをフルパスで指定してください。
ディレクトリ名の要求時に返すファイル 参照先としてディレクトリ要求された時に表示するファイルの名前を指定してください。要求されたディレクトリ内の、この項目に指定された名前のファイルが返されます。

例えば、サーバ名がservername、ディレクトリ名がabc、この項目に指定した値がindex.htmlであった時に、「http://servername/abc」という要求があった場合は、クライアントにはabc/index.htmlのファイルが返されます。

ディレクトリ一覧の表示 参照先としてディレクトリ要求された時に、デフォルトのディレクトリ一覧を表示するか否かを指定してください。
ディレクトリ一覧中の通常ファイルの表示 デフォルトのディレクトリ一覧の中に、画像ファイルでもサブディレクトリでもない普通のファイルを表示するか否かを指定してください。
キャッシュの強制更新 URLのフラグとして「f」を使用した、キャッシュの強制更新を有効にするか否かを指定してください。
イメージの任意サイズ変更 URLのフラグとして「e」を使用した、イメージサイズの変更要求を有効にするか否かを指定してください。
ファイル名一覧の表示 URLのフラグとして「l」を使用した、ファイル名一覧の表示を有効にするか否かを指定してください。
POSTメソッド POSTメソッドを有効にするか否かを指定してください。
全キャッシュの削除 デフォルトのディレクトリ一覧の中に、「Refresh」ボタンを表示するか否かを指定してください。
ドットで始まるファイルの表示 ファイル名の頭が「.」で始まるファイルを表示するか否かを指定してください。
画像表示用ページ 画像を表示する際に、画像表示用のHTMLページを使用するか否かを指定してください

問題は、「サービス登録」というボタンだが、これはWindowsのサービスというやつに登録する作業を行うためのボタンだ。インストール後にこの「登録」ボタンを押さないことには使用できるようにはならない。本来ならインストーラでやるようにしたかったんだが、どうにもうまくやる方法が判らなかったから、こういう形になった。

でもって、さらに不便なことに「サービス登録」なる作業をやった後にもまだ使用できるようにはならない。サーバを起動しなくてはいけない。まぁ、PCを再起動してくれてもいいのだが、そこまでしなくても、コントロールパネルの「管理ツール」の中にある「サービス」というやつを使用することで、サーバの起動や停止を行うことができる。

サービスなるものに登録すると上記のように「hhttp」という項目が表示されるようになる。後はこの項目を適当に突っつき回してサーバを起動すればいい。

1.1.3 アンインストール

アンインストールする際には、必ず「HHttp管理コンソール」で、サービスの削除を行ってほしい。そうでないと「サービス」の画面にhhttpの項目が残ることとなる。

その後で、「アプリケーションの追加と削除」の画面からhhttpのアンインストールを行ってほしい。もしサービスの削除を行う前に「アプリケーションの追加と削除」からアンインストール作業を行ってしまった場合には、どうしようもないからもう一度インストールして、サービスの削除を行って、またアンインストールしてほしい。

1.2 Windows以外の場合

Windows以外の環境で使用する場合やレジストリへの汚染が気になる場合には、ソースコードをコンパイルし、コマンドから起動するようにする必要がある。なお、UNIXであれば「rc3.d」等から起動するようにしておけば、かなりご機嫌に使えるようになる。しかしWindowsの場合にはやや弊害がある。マシンが起動した時点でサーバが起動するようにするには、結局「サービス」に登録しなくてはいけないのだ。そうでないと、誰かがログインして起動するか、あるいはログイン時に自動的に起動されるようにするかしなくてはならない。つまり、少なくとも「誰かがログインしなくてはいけない」のだ。それがいやならレジストリへの汚染を甘んじて受けるほかない。

1.2.1 コンパイル

これをコンパイルするにはJava2SDKの1.5以上が必要となる。でも、Ver1.5が必要なのは単にGenericを使っているだけだから、その部分を全部消してしまえばVer1.4でもコンパイルできるはず。

あと、BMPファイルに対応するためにJava Advanced Imaging APIというのを使用している。コンパイル時にも実行時にも必要となる。

次に、jarでまとめる。一応生成された.classファイルをhhttpディレクトリ内に格納しておいて、下記のコマンドでhhttp.jarにまとめるようにしてほしい。

jar -cf hhttp.jar hhttp/*

1.2.2.インストール

特にインストールと言うような作業は必要ない。適当なところに上記で作成したjarファイルを格納してほしい。

1.2.3 起動方法

起動するには、以下のようにコマンドを叩く。

CLASSPATH=jarファイルのパス
export CLASSPATH
java hhttp.HHttp -RootPath 公開するディレクトリ -ImgExtent サムネールの大きさ ・・・ その他引数

CLASSPATHの設定方法は実行環境によって異なると思うから、まぁ適当にやってほしい。

で、各スイッチに指定する値は以下の通り。

スイッチ デフォルト値 説明
-RootPath 必須 公開するディレクトリを指定してください。
-TmpDir 必須 生成したキャッシュを格納するディレクトリを指定してください。このとき、-RootPathに指定したディレクトリに含まれる(-RootPathから見て、子や孫・ひ孫に当たる)ディレクトリは指定しないでください。
-ImgExtent デフォルトでは22500 サムネールのサイズを、ピクセル単位の面積で指定してください。
-ImgRowCount デフォルトでは5 サムネールを横に並べる数を指定してください。
-DirImgCount デフォルトでは1 ディレクトリ名の横に表示する、プレビューの数を指定してください。
-PortNumber デフォルトでは80 使用するTCPポート番号を指定してください。
-CashLifeSpan デフォルトでは604800(一週間) キャッシュの寿命を秒単位で指定してください。
-CashDeleteSpan デフォルトでは3600 キャッシュの破棄(寿命の確認)を行う間隔を秒単位で指定してください。
-404ErrFile   404エラーが生じた時に返すファイルを指定してください。省略したときは、404エラーが発生した時にファイルを返さないようになります。

このファイル名には、システム依存のファイル名をフルパスで記述してください。例えば、Windowsなら「c:\data\404.html」など。

-ShowDirCont デフォルトではtrue ディレクトリ一覧を表示するか否かを指定します。"true"か"false"を指定してください。
-ShowNormalFileName デフォルトではtrue ディレクトリ一覧の中に、サブディレクトリや画像ファイル以外の通常のファイルへのリンクを表示するか否かを"true"か"false"で指定してください。
-DefDirFile   ディレクトリ名の要求に対して応答するファイルを指定してください。省略した場合は、ディレクトリ一覧が自動的に生成されます。

このファイル名には、-RootPathに指定したディレクトリをルートとした、システム非依存のパス名を絶対、もしくは相対パスで記述してください。例えば「index.html」と指定した場合は、要求されたディレクトリ内に格納sれているindex.htmlファイルが表示されます。

-Enable_f デフォルトではtrue 「type=f」の指定による、キャッシュの強制更新を有効にするか否かを"true"か"false"で指定してください。
-Enable_e デフォルトではtrue 「type=e」の指定による、イメージの任意サイズ変更を有効にするか否かを"true"か"false"で指定してください。
-Enable_l デフォルトではtrue 「type=l」の指定による、ファイル名一覧の表示を有効にするか否かを"true"か"false"で指定してください。
-Enable_POST デフォルトではtrue POSTによる処理を有効にするか否かを"true"か"false"で指定してください。
-EnableFullReflesh デフォルトではtrue 全キャッシュの削除を有効にするか否かを"true"か"false"で指定してください。
-LogFileA   ログファイルAの名前を指定してください。
-LogFileB    ログファイルBの名前を指定してください。ログファイルのA、Bともに省略された場合は、ログファイルは出力されません。どちらか片方のみ指定された場合は、単一のファイルに対し出力して、-LogChangeIntervalで指定された時刻ごとにファイルの破棄と新規作成を行います。両方とも指定された場合は、-LogChangeIntervalで指定された時刻ごとに、交互に出力します。
-LogChangeInterval デフォルトでは3600 出力先のログファイルを切り替えるタイミングを秒単位で指定してください。
-HiddenDotFile デフォルトではtrue ドットで始まるファイルを出力するか否かを"true"か"false"で指定してください。
-ImageShowFile デフォルトではtrue 画像表示用HTMLファイルを使用するか否かを"true"か"false"で指定してください。

2.使う

サーバが起動したらそのサーバにブラウザでアクセスしてみる。ホスト名だのIPアドレスだのは各自の環境によって変わるだろうが、とりあえずサーバ名がABCなら

http://ABC

にアクセスすればいい。なお、TCPポート番号として80番以外のもの、例えば81を指定した場合は以下のようになる。

hhttp://ABC:81

アクセスに成功すると下記のような画面が表示される。なお、この画面は、サーバやクライアントの環境に依存せず同じような画面が表示される。

上段に「Refresh」というボタンが表示され、次の段に親ディレクトリへのリンク、三番目の段にはサブディレクトリへのリンク、4番目の段には現在のディレクトリに格納されているファイル名の一覧(イメージはのぞく)、一番下にはイメージのサムネールが並ぶこととなる。

上記の画面では、「d:\abc」というディレクトリの内容が示されている。そして、このディレクトリの中には「icon1」と「icon2」というサブディレクトリが存在する。また、画像以外のファイルとして「新規テキスト ドキュメント.txt」というファイルがあり、画像は「1.bmp」と「3.bmp」の二つが存在する。また、「icon1」と「icon2」というサブディレクトリの中にも何枚か画像が格納されており、その最初の3枚がディレクトリ名の横に表示されている。

上記のサブディレクトリ名をクリックすれば、無論そのサブディレクトリの内容が表示される。また、画像もしくはファイル名をクリックすればその画像やファイルが表示される。

「Refresh」というボタンを押すとキャッシュされているイメージがすべて削除される。キャッシュを更新したいときに押してほしい。もっとも、FTPなりTELNETなりでつないで、キャッシュのイメージを全部削除しても問題ないのだが。

あと、URLだが、ファイル名の後に「?type=_」がついている場合は、通常の参照となり、サーバはその内容をただそのまま返してよこす。しかし「?type=p」がついている場合は、そのファイルのサムネールを返してくる。

だから、例えばサーバ「ABC」にある「/Image/xyz.jpg」を参照するとき

http://ABC/Image/xyz.jpg?type=_

とすれば、その画像をそのままの状態で見ることができる。また、

http://ABC/Image/xyz.jpg?type=p

とすれば、その画像のサムネールを見ることができる。

ついでに、URLの末尾を「?type=f」にした場合、

http://ABC/Image/xyz.jpg?type=f

は、サムネールを強制的に更新して表示させることができる。サムネールの生成に失敗したときとか、何らかの事情で更新したい場合とかにやってほしい。

そのほか、「?type=e&extent=面積」と指定すれば、指定された面積になるよう拡大・縮小が行わた画像が表示される。

もう一つ言うと、何もつけなかった場合(つまり、上記の例でいけばhttp://ABC/Image/xyz.jpgとした場合)は、「?type=_」がつけられたのと同じと見なすようになっている。

動作環境

とりあえず、Windows2000とSolaris10で動作確認を行っている。ブラウザはIEの6とMozillaの1.7で確認している。だがそれ以外の環境でもたぶん大丈夫だろう。まぁ知ったことではないが。

注意事項

これはhttpのサーバの形になっているが、決して激しいトラフィックに耐えられるようにもなっていなければ、セキュリティについても考慮されていない。

だから、外部(インターネットなど)に公開したり、悪意のあるユーザがいるような環境(治安の悪い会社や学校のイントラなど)に公開する目的では使用しないでほしい。あくまでも個人が余っているマシンの有効利用を図る目的程度にしておいた方がいい。

著作権

一応著作権は全てnabiki_tが保有する。

二次配布はしたければしてもらってもかまわない。

このソフトを使った結果、何らかの不都合が生じても作者は一切関知しない。極秘画像を公開して社会的地位が失墜しても、サーバが故障して首を刎ねられても、虎の子の画像が全部消えても知ったことではない。全ては自己責任の元で使用してほしい。

更新履歴

更新しちまったから、履歴を書くか。

2005/04/09

初犯公開

2005/05/30

第二犯公開

  1. 日本語のファイル名に対応
  2. サムネールのサイズを面積で指定するように変更

2005/07/24

第三犯公開

  1. 起動時のスイッチの指定方法を変更
  2. ディレクトリ一覧の横に、ディレクトリ内の画像の先頭数枚を表示するように変更
  3. 起動時にTCPポート番号を指定できるように変更
  4. Windows用にまとめたものを作成

2005/10/08

第四犯公開

  1. いくつかの機能を使用できないようにする機能を実装
  2. 各種機能を増強
  3. パス名に指定された.や..を無視するように変更
  4. キャッシュのアクセス時に排他制御を行うように変更
  5. あまりにも下らないからVectorの登録を削除

2006/01/09

第五犯公開

  1. 画像表示時にキーボードによる操作に対応

2006/05/08

第六犯公開

  1. Windows用のインストーラを更新


連絡先 - サイトマップ - 更新履歴
Copyright (C)  2000 - 2016 nabiki_t All Rights Reserved.