Perl5-CGI

アクセス数   Since 25-Jan.-2002 全頁累計:  全頁日毎:   Web初安打:

本サイトは開いた頁の画像を効果的に魅せる術を模索しながら作成しています。

Java系アプリケーションや、CGIなどのスクリプトを実行させている関係で表示完了まで時間が掛かるページがありますので御了承下さい。

ブラウジングはInternetExplorerについてはVer.11以上でFireFox、Operaで可能です。Edge、Safariは未確認です。IE11以前のバージョンでは正常に表示されない場合があります。

Java実行環境のセキュリティ強化、Flashアプリケーションが2020年末でサポート終了になるため、JavaScriptで代替実装しています。HTML5には未対応です。

Windowsの画面は1024×768、ブラウザの文字サイズは中[M]が標準です。画面サイズが小さいと表示が崩れることがあります。表示エラーの対処はこちら


更新日:2024/01/02

Copyright (c)2004-2024 "o9chan4" ALL RIGHTS RESERVED.

Windows XP SP1a以降、Microsoft JVMがサポートされなくなった。MicrosoftはWindowsパッケージに別の「Java仮想マシン」を用意す

  るとはアナウンスしていないから、以後使用出来るかはPCメーカーがどう対応するかに依存してしまう。実際のPCを確認したら

  Java-plug-inを搭載していたので取り合えずは一安心。Microsoftは .NET Framework等を推奨しているがWindows環境でしか使用

  出来ないのは使わない!! PC環境に依存しないコードを使うのが当然である。使用しているコードはMACでも動作することを確認している。

Java Ver 7.25以降からセキュリティが強化され始め、今後Javaがアップデートされるとアプリケーションが実行出来なくなります。

本サイトは年間のライセンス/維持費用が掛かる「デジタル署名」は取得しません。

最新のJava 7に更新ぜずにJava 6まで更新して止めるのを推奨しますが各PC環境に依存してしまうページは避けることにしました。

 

HTML4.01では<APPLET>は推奨されていない。一方、<OBJECT>は全てのブラウザではサポートされていない。

<OBJECT>でAppletを実行

Appletを<OBJECT>で実装した場合

Opera7.53〜8.5〜9.1

Netscape Communicator4.5〜Netscape7.1

Firefox1.0〜1.0.4〜1.5〜1.5.0.4〜2.0.0.1

Mozilla1.7.3〜1.7.8〜1.7.12

は動作したから、Mozilla/Gecko系コードをベースとしているブラウザは動作する。

InternetExplorer(=IE)6、WindowsXP-SP2用IE7ベータ2〜3版は動作しなかった。IE8も駄目である。HTMLハンドブックなどには<OBJECT>でAPPLETが動作しないブラウザがあると書かれているがIE8になっても<OBJECT>は.NET Frameworkなどの独自仕様用のままである。VerUPで標準化されないのは困ったもんだ。

後発ブラウザであるMacのSafariは動作すると思う。

IEでJavaAppletに<OBJECT>を使用するとハングアップすることがあるからコメント削除しました。

Internet Explorerは表示されない。

<OBJECT width="xx" height="xx" classid="java:Movie.class" codetype="application/java">

      :

      :

</OBJECT>

Internet ExplorerAPPLETの部分をOBJECTに変更するだけしかサポートしていない様である。これでは<OBJECT>に対応しているとは思えない。右のMozilla/Gecko系記述では動作しなかった。
Internet Explorerを標準ブラウザとして使用している人が多いのでページ作成はこちらに合わせる必要がある。不完全な<OBJECT>を使用するとIEは変な動きをするかも...。スクリプトでブラウザ種別を識別して分岐させるのは何かと面倒だし...。古いバージョンのブラウジングをサポートするには<APPLET>を使用する。廃止と言っても、最新ブラウザは古いHTMLをサポートしなければならないから同じである。

Win98、Win2000からWindowsXP・SP1aへアップグレードした場合は問題ないが、WindowsXP・SP1aを新規クリーンイストールし、Java-Plug-inを「Java仮想マシン」として使用すると処理が遅くなる。更にSP2をインストールすると格段に遅くなることがある。最新のPCはクロックスピードが速くなっているから別に支障は無いと思われる。テストしたPCは500MHzであった。PCがWindowsXPに対応していないと言うことも影響していたかもしれないが・・・。

FLASHのActionScript等で記述するよりはJavaの方が自由度が高く感じるが、ActionScript言語のバージョンアップによりクラスを導入したことにより柔軟さが出てきた。記述はJavaScriptと似ているが常にフレーム、レイヤー、タイムラインなどを考えないといけないのは面倒だし、スクリプトを一箇所に纏めて書かないとソースが見難くなる。また、「print」、「paint」文が無いため要らぬ時にイメージやテキストが表示されない様にしないといけない。それに、アプリケーションソフトが高価なのは難点である。など導入には問題があった。

AppletとActionScriptから直接CGIにコマンドを発行させ、アクセスカウンターが正常表示出来ることまで確認した。とりあえずは「Microsoft Java仮想マシン」のバグサポート終了である2007年12月31日までにアプリ移行準備は進める。FlashのActionScriptで埋め込むのを全ページに対応するのはページ数が多く面倒なので新規作成ページから対応する。

 
■FLASHのActionScriptにHTML記述を使い任意のパラメータを渡せるのか
<OBJECT WIDTH="xx" HEIGHT="xx" classid="d27cdb6e-ae6d-11cf-96b8-444553540000" ・・・>
 <PARAM NAME=movie VALUE="movie.swf">
 <PARAM NAME=quality VALUE=high>
 <PARAM NAME=bgcolor VALUE=#000000>

 <PARAM NAME=FlashVars VALUE="name1=op1&name2=op2&・・・">

  <EMBED src="movie.swf" FlashVars="name1=op1&name2=op2&・・・" ・・・></EMBED>

</OBJECT>

Macromedia社のWeb上でFLASHアプリケーションノートを探し、APPLETのパラメータ記述と同様の手法で、左記の様にすることで1ファイルで汎用性を持たせることが出来た。凝ったアプリケーションを作成しないのであればFLASHのActionScriptで代替することは可能となった。変数は「&」を除いた形式、つまりSWFが初期化される時にActionScript内部変数としてそのままname1=op1、name2=op2とセットされるから都合が良い。

1ファイルで汎用性を持たせるために同じSWFを上記パラメーターを変え多数埋め込むとNetscape、Opera等のMozilla/Gecko系コ

ードをベースにしているブラウザでは表示完了までに時間が掛かったりハングアップすることがある。OSがWin98、WinXP等はハン

グしたが、Win2000は問題無かった。Netscape、Opera等はアプリの動作が重く感じる。Internet ExplorerでMS-JVMを使用させる方

が処理が速かったり安定動作する。実装するには十分なテストが必要である。

 

下記に表示されている数値はFlashプレイヤーによるアクセス・カウンターです。

本サイトのwebページに実装したJava Applet

機能

Java化理由

備考

「更新情報」のアニメーション GIFアニメータで作成すると自由度がなくなる。自作プログラム化するとどうにでも作れる。
ページ・アクセスカウンター <IMG>タグで各桁を起動していた「GIFイメージカウンター」ではサーバーに負担が掛かる。サーバーに重いCGIプログラムは置けないから。 カウンター本体は

CGIプログラム

初訪問者カウンター ページ・アクセスカウンターがページアクセスを累計するのが目的なので「再読み込み」してもカウントするから訪問者数を別に表示させた。

GIFカウンターでなくtext表示にした。

ページ・アクセスカウンターもtext表示に出来る様に作ってある。これは<Applet>タグのパラメータで指定している。

実体はCGIプログラムのcookie発行者数カウンターであるからリピーターはカウントしないが、cookieを無効にしてあるとカウントアップする。何れにしてもPCの初期設定/セキュリティ設定に依存してしまう。

HTMLでCookieの内容は送れないのでCGIで「expires」などを計算してHTMLファイルの先頭に付けて送る。ページアドレスを公開した後にCookieを送ることにしたので取って付けた様になってしまった。

<<send Cookie Format sample>>
Set-Cookie; Visiter=1; expires=Wed, 30-Jan-2001 12:34:56 GMT;
Set-Cookie; HitDate=2002%2D06%2D27; expires=Wed, 30-Jan-2001 12:34:56 GMT;
Set-Cookie; Pages=1; expires=Wed, 30-Jan-2001 12:34:56 GMT;

<HTML>

<BODY>

    :

    :

</BODY>

</HTML>

Applet・イメージローダー

<IMG>タグを使用せず、Javaプログラムで画像をロードする。

Windowsの右クリック、ドラッグ&ドロップ、ページ保存対策。

マウスイベントは実装しない

JavaScriptは画像数が多くなると面倒なので使用せず。
Javaと違いJavaAppletはセキュリティの関係でローカルPC上のファイルはアクセス出来ない。JavaAppletのクラスファイルと同じフォルダーに必要な全てのファイルがあればアクセス出来る様である。つまり、ネット上のページを保存してPC上で見ようとしてもJavaAppletの領域はグレーに表示されてしまうことになる。これらを確認してネットワーク上でのみ画像が正常に表示される様にしてある。

  

■JavaAppletをWebページに実装

Webページにアニメーションを実装しようとしてGIFで作成したが動かす画像数が多くなると少し都合が悪い。FLASHで作成しようかと思ったが、どのPCでも表示出来ると言うのが条件なので別途アプリケーションをインストールしないといけないのでは作成意図に反していた。そこで今まではJavaScriptで画像をロードして、Webページ表示完了後に一定間隔で画像をスキャンする方法にしていた。だが、この方法ではインターネットの接続環境などによりアニメーションのスキャン間隔が不規則になってしまっていた。一定間隔制御にするためにタイマーを実装するとブラウザに「そんなことしたらパーフォーマンスが低下するではないか!」と文句を言われてしまう始末。しかたなく、スキャン間隔が不規則なままで我慢していた。元々アニメーションの出来には拘っていないのだが...。

PCに新規アプリケーションをインストールせずにアニメーションを実現させるにはどのOSにも標準装備されているアプリケーションを使うしかない。となると個人的にはJavaしか思いつかない。Javaで書くと言っても、仕事で常に使っているとか趣味が「プログラミング」ではないからソースをコーディングするのが少し取っ掛り難くかった。とりあえずはMy Webのアニメーションとして使える物を作成した。

完成したAppletをページに実装して動作することを確認した。コンパイラをインストールしていない別のPCでも動作すればO.Kであったがそうは行かなかった。調べて見るとブラウザのオプション設定が違っていた。コンパイラがインストールされているPCは「<applet>にJava 2 1.4.0を使用する」オプションにチエックが入っていたので外す。するとこちらも動かなくなった。コンパイラが生成したコードはデフォルトのVM1.2となっていた。VM1.1対応コードを生成させることでどうにか動く状態となる。

<< Javaコンパイル >>

C:\JAVA>JAVAC -target 1.1 Test.java ・・・ jsdk1.4.xの場合

 

jsdk1.5で<-target 1.1>を使用するとエラーとなるので<-target>は使用しない。

アプレットビューワーとhtmlファイル上でJavaAppletを表示させるのは違う。古いブラウザでも表示出来る様に作成してある。

そのため、Swingコンポーネント、JAppletは使用していない。 

 

■アニメーションをJavaAppletで実装してみる

Applet・オプション・パラメータを変更するだけでスキャン画像数/間隔を変えます。

1つのクラスファイルを広範囲に利用したいので入力パラメータが増えます。

<applet width="xxx" height="xxx" code="Movie.class">

<param name="anime" value="demo"> 
<param name="interval" value="1000"> 
<param name="timeout" value="10000"> 
<param name="repeat" value="12"> 
<param name="x_pix" value="0"> 
<param name="y_pix" value="0">

<param name="start" value="0">

<param name="stop" value="999">

JavaVMの使用が許可されていませんから表示されません。

</applet>

画像:「demo_xx.jpg」

スキャン画像数:12枚

間隔[ms]:1秒

イメージロード・タイムアウト:10秒

ページロード後の動作:自動開始orマウスクリックで開始

スキャン終了後の動作:停止or継続

画像の中の一部を動的に動かす「アニメーション」は「アルゴリズム」「構成方法」なども考えないといけないので行わない。

 

■アクセスカウンターをJavaAppletで実装してみる

各桁を表示させるため<IMG>タグを使いCGIを起動すると全桁数分記述が必要となる。と言うことは桁数回カウンター値ファイルのアクセスを伴う。何とかイメージを纏めて表示させる方法を考えたがバイナリーファイルを直接操作するのではイマイチすっきりしかった。JavaAppletを使えば座標を指定さえすればイメージが何処にでも配置出来るのではと思いテストを行うと想定した通りになった。その結果として、JavaAppletは「全頁累計」と「日毎」に分けたためCGI起動は2回にまで減らせた。1回に出来るがそこまではしていない。
<applet width="xx" height="xx"code="Counter.class">

<param name="clms" value="6">

<param name="mode" value="0">

<param name="timeout" value="10000">

<param name="gui" value="0">

JavaVMの使用が許可されていませんから表示されません。

</applet>

サーバーが「SSI対応」していたらもっと簡単にCGIカウンターを実装出来たのだが、レンタルサーバーのセキュリティの関係で苦戦を強いられた。結局、<IMG>タグ起動では思う様には行かなかった。このアプレットはカレント・カウントデータをロードして来るだけであって、再書き込みはしない。アクセス・カウンターCGIの起動をアプレットで行なうとアプレットが動作しない環境ではカウントが出来なくなってしまうからCGI起動はブラウザ環境に影響しない別の所で行なっている。CGIが後で起動された場合の表示は1アクセス前の値となる。優先順位を付けずに多数のスクリプトを同時に起動するため表示は正確ではない。もっとも、1カウント前後しようとも正確さは必要ない。
◆処理構成

「データリード」スレッド

 

Counter本体

URL接続 「データリード」スレッド起動
カウントデータリード MediaTrackerに読み込み監視イメージを登録
文字列処理 0〜9イメージの読み込み終了待ち
status flag set 「データリード」status check
count値 or エラー表示

 

■JavaAppletが動作しない場合

使用しているOSバージョンに依存します。詳細はこちら

 

Home

目次| 更新情報

編集後記| Article| Link| 壁紙Sample| Guest

Music| 撮影テーマ| My写真| 海釣り| 釣行メモ| 40cmOverへの道