FC2ブログ

JAVAでインターネット・サーバーから画像ファイルをダウンロード

(2016-03-21)
2016年3月20日
(写真は前回掲載できなかったSienaのDuomoの大理石のモザイク床)

今日は殆どの方には興味がないかも知れないコンピュータ・プログラミングのお話。しかもDatiniシステムのために使っている表計算ソフトでなく、私がこれまで殆ど何も知らなかった、プログラミングのプロが使うJAVAというプログラミング言語で書いたプログラムのお話です。なぜ、こんな話が出てくるの?

[どうしてまたJAVAプログラミング?]
Datiniシステムでは、ダイアログという窓を通して表の上の仕訳データを覗きますが、そのとき、その仕訳のDatini帳簿の上での該当画像を同時に表示するようにしています。これが私たちのシステムの大きな特徴のひとつであることは前にも書きましたので既にご存知かと思います。ところが、この画像はDatiniシステムと一緒に配布することはできません。まず、帳簿画像の著作権はArchivio di Stato di Prato(古文書館)にありますので、勝手に配布できないことが第一の理由です。第二に、帳簿の写真は解像度をよくするために画像サイズを3-4Mバイトにしています。このため、システムと一緒にダウンロードするには恐ろしく長い時間がかかってしまいます。そこで、私たちはインターネット上のディスク・スペースを借りて、そこに画像を保管し、そこから見たいページだけをその都度、表上にとりこんで表示する方法を取ろうと考えています。この方法でも著作権の問題は直ちにはクリアできないのですが、でも、古文書館が私たちの撮った写真をそのホームページに掲載するようになった暁には、私たちのシステムから閲覧する画像も同じ扱いにしてもいいはずです。この件については古文書館のC嬢に投げかけてありますが、まだ、その議論をするのは早過ぎるということでペンディングになっています。そこで、私たちは早くHPにアップして貰えるよう週に3回は撮影に充てて頑張っているところです。さて、話をJAVAに戻します。サーバー上の画像ファイルを表計算のマクロを使ってダウンロードする実験をしてみたところ、私たちのADSL経由でも120秒かかってしまったのです。この2分間は、パソコンの前に座ってただ待っているにはおそろしく長い時間です。オーストラリアからPratoまでやってきて、帳簿の原本を見る方もいらっしゃいますが、それよりは早いものの、これはとても我慢できる時間ではありません。そこで、インターネット検索をしてみると、この時間短縮のためのいろいろ方法がありそうでした。

[C#, C++, Visual Studio]
サンプルプログラムが載っていましたので、この言語は何かな?といろいろ調べてみると、はっきりとは分かりませんが、構文とか語彙をあわせて考えてみると、C言語系のC++とかC#のようです。まずは、これでやってみようかと思いました。そうすると、まず、Visual Studioという開発環境をダウンロードして、それを使ってコンパイル(コンパイラーというソフトを使って機械語へ翻訳した小さなファイルを作ること)して実行ファイルを作ればいいのか、簡単そうだな。しかもこの開発環境だといろいろなPCのハードの違いに関わらず動くプログラムを生成してくれるのか。すごいな!・・・と思って始めてみたのです。ところが、この無料でダウンロードしたVisual Studioだけでは結局実行ファイルを作るところまでたどり着けないことが分かりました。ここまで3日間かかってしまいました。自分はプログラミングの素養がないんだから、やはり無理か。夏にでもやることにしておこうかなどと中断することに。

[もしかして、JAVAなら]
もうあきらめようかと思って、3日間別のことをやっていましたが、それでも何度もこのことが頭をよぎり、離れてくれません。ただ、待てよ、OpenOfficeは基本的にJAVAでプログラムができているから、JAVAとの相性はいいはずだ。それならJAVAを使ったら旨くいくかもしれない、と考えると、また風向きが変わってしまいました。再び、いろいろ検索してJDKという開発環境をダウンロードして、JAVAの基礎を解説しているサイトを探して、簡単なプログラムの例を入力して、コンパイル、実行実験をしました。インターネットからダウンロードできるプログラムも見つかりましたので、そのコンパイル、実行をしてみると、リモート(インターネット上の)ファイルのダウンロードができてしまいました。ちなみに、このJAVAのコンパイルと実行はMS-DOSの「コマンド・プロンプト」という真っ黒な小さな画面から行います。MS-DOS.?古いねー。30年以上前のWindowsの前の言葉です。コマンド・プロンプトで入力するとよくスペリングの間違えをやってしまって、これまた大変。そこで最後はBatchファイルを作って実験を繰り返すようにしましたが。この間2日。

[引数を受付けるJAVAが見つからない]
ところが、このプログラムでは見たい画像ごとにプログラムを書かなければなりません。そこで、画像ファイル名を引数でプログラムに渡して実行させることはできないかと探したら、翌日みつかり、何箇所か変更して私が前から使っていた日本のサーバーに接続したところ旨く動きました。120秒が5秒に一気に短縮しました。気をよくしてもっと早くならないかといく通りか試してみました。もちろん、何十回、何百回とコンパイル、実行を繰り返して目が痛くなり、エラーメッセージが出るたびに、挫けそうになりましたが。なぜ、挫けそうにうなるかって?エラーメッセージが漠然としていて意味が分からなかったり、こちらの教養が足りないからです。それで、あれこれ想像しては延々と試すしかないのです。悲しいことに。その間、ずっと片想いなのです。でも、動けば、これで、一旦解決!に見えそうなのですが、そうは問屋が卸してくれません。この間2日。

[サーバー接続の方法はいろいろ]
日本のサーバーは20MBしかないし、この会社はレンタル・サーバーはやっていないのです。そこでイタリアのWebスペースを試しに借りて実験してみました。こちらは100GBを手始めに500GBまであります。Datini帳簿の写真を全部載せたら1000GB=1テラバイトを超えるかもしれませんが、当分これで間に合います。ところが、、こちらのサーバーへ、さっきまで旨くいったプログラムのパラメータを変えて接続しようとしても、サーバーが見つからないというエラーが出て繋がらないのです。いろいろ調べて、パラメーターの順番を変えたり、サーバー会社に問い合わせたりしましたが、結局インターネット検索で手がかりになりそうなのが見つかりました。それはインターネット・サーバーを動かすソフトで有名なApacheのモジュールを使う方法です。Apache commons-net-3.4というものをダウンロードして、これをJAVAプログラムの一部に組み込むのです。ところが、コンパイル過程でのエラーメッセージは出なくなりましたが、実行時のエラーメッセージが何度あおれこれやってもやまないのです。この日もまた、何百回と試行錯誤を繰り返し、もう、だめかと諦めかけながら、自分が入力したものと、サンプルプログラムをぼんやりと較べ眺めていました。すると、何だこれ?!最後のところに「;.」とあるぞ!ゴミじゃないんだろうなと印刷したサンプルプログラムを何度も擦ってみましたが、ちゃんとあります。もしかして、これが原因?そして、試したら、エラーメッセージが出なくなりました。あー、よかった。でも、これ教養の問題じゃないよね。

[接続はできたけど]
よろこびいさんで、ダウンロードしたファイルをクリック。あれーっ!空っぽだ。いろいろ試して何度繰り返しても結果は同じ。そこで、Apache Commonsからダウンロードして44頁の英語説明書を何か手がかりはないかと探しました。すると、FTPClient.isConnectedとか、FTPClient.listFilesとかFTPClient.listDirectoriesとかの言葉が目に留まりました。
どう使えばいいか分からないので、これまた使い方をインターネット検索。そして、また、コンパイル、実行の繰返し。そうして、分かったことは接続はできているということ。そして、接続したサーバーの下にあるディレクトリの書き方は?まず、ルートディレクトリは?ちゃんと表示してくれた!万歳。では/Pratoのその下は?/Prato-industriale ??? あれーっ?もしかして、ずっと/Prato/Prato-Industrialeと書いてなかったかな?どこが違うの?大文字と小文字です。industrialeの最初の文字iとIはぜんぜん違うと認識してるのかな?それでファイルが見つからなかったのかな?それでは正しく大文字を小文字に変えてコンパイル、実行してみたらどうなる?そうしたら、やった、やりました。空っぽでないファイルがダウンロードできたよ。しかも3秒で。2日かかりました。

[これからの宿題]
疲れたけど、挫けずに、たどり着きました。でも、まだ半分。この後、OpenOfficeのマクロからこのJAVAプログラムを使えるようにする作業が残っています。多分、何とかなりそうな気がします。それにしても、120秒もかけてマクロは何をやっているんでしょう?JAVAのプログラムには私のユーザー名とログイン・パスワードを書きます。これがないと接続できません。ところが、OpenOfficeのマクロにはそれを書きません。書かないのに2分かけて、接続してしまう。接続しなければ画像を取り込めないのですから。私はOpenOfficeのマクロは馬鹿じゃないかと思っていましたが、とんでもない、物凄いことをいろいろ試しながら、パスワードの壁を突き破ってしまっていたんだ。振返って日常生活の場面にもこんなことはないのでしょうか。何を聞いてもなかなか返事がかえってこなくていらいらしてしまう人がいますが、中には、ものすごくしぶとく考え続けていて、人をいらいらさせても気にかけず解決法を求め、結局探してしまう人がいるんじゃないか。こういう人が本当にすごい人なのではないだろうか・・・と最後の1日になって思いました。

あ、そうそう、3月15日に水道会社がマイナスの水道料金の請求書を発行しました。今後の水道料金から差し引くようです。ま、貯金みたいなもの。これで完全決着。5ヶ月かかりました。JAVAの方が早かった。

(上の写真はSienaのDuomo美術館のPisanoの洗礼者ヨハネ像。美しい目をしてる。)
スポンサーサイト


コメントの投稿

非公開コメント

プロフィール

SCIUICIdiFDATINI

Author:SCIUICIdiFDATINI
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR