素歩人徒然 身辺整理 ウェッブデータの後始末
素歩人徒然
(84)

身辺整理


── ウェッブデータの後始末

 家内が入院して一か月以上になる。手術を受けて何とか危機を乗り越えてくれたようである。手術の翌日、病院へ様子を見に行くとかなり元気になっているので安心したのだが、病室にいるその瞬間に大地震(*1)に襲われた。東日本大震災の始まった瞬間である。

【注】(*1)正式名称:平成23年東北地方太平洋沖地震

 直ぐに看護師が病室に走り込んで来て、酸素マスクを取り出し必要なときには何時でも装着できるような体勢を取った。しっかりと訓練されているようで心強い。私は壁に寄りかかって自らの身体を支えつつ看護師と一緒に揺れるベッドを押さえていた。看護師は、この病院の建物は耐震設計になっているから大丈夫ですと言ってくれたが、それでも長い時間、不安な思いで激しい揺れに身を任せるしかなかった。

 最近、身辺整理のことが頭を離れないでいる。家族の病気に直面し、自分自身も何時病院のお世話になるか分からない身である。病気ばかりでなく、今回の大地震のような災害や交通事故にたまたま遭遇し、突然この世におさらばしなければならないことになるかもしれない。私にもしものことがあれば、多分残された者たち(家族、親族)が何とか事後の整理をしてくれるであろう。しかし私が個人的にインターネット上に構築してきたデータ類の後始末まで、彼らがやってくれるとは到底思えない。かねてから、私はウェッブ上のデータの後始末について、いずれ考えなければいけないテーマだと思っていた。東日本大震災に直面したこの機会に、私は本気で考えてみることにした。

 たとえば、ホームページがある一定期間更新されない状態になると、その旨自動的に表示されるようにしてはどうか。
 長年、私のホームページ上のエッセイを愛読してくださった見知らぬ多くの方々に、更新できなくなった理由をちゃんと説明しておきたいのである。それができれば、思い残すことが少しは少なくなるであろう。そういう注意を喚起する方式を、HTMLファイル上で考えてみよう。高価なアプリケーションプログラムなど購入しなくても、そのようなプログラムなら簡単に作れそうな気がしたのである。何しろ、私めは「昔プログラマ」であることを誇りにしているのだから。

 たとえば、1か月間更新されないと、次のように表示する。

更新SelfCheckerからの報告!

【更新日】2011年2月11日 =======>【現在日】2011年3月14日
 最後に更新されて以来 1か月以上が経過しています。
【注意】
 本ホームページの更新が遅れています。おそらく、現在更新準備中と思われます。あるいは、このホームページの著者のアイデァが枯渇してきたためかもしれません。少し時間的な余裕を与えてあげて、静観するのがよいと思います。新たなアイデァが浮かべばまた更新されるでしょう。その際には、また訪問してください。

じゃ また / See you.
(更新SelfCheckプログラム)

 6か月以上更新されないと、次のように表示する。

更新SelfCheckerからの報告!

【更新日】2010年9月12日 =======>【現在日】2011年3月14日
 最後に更新されて以来 6か月以上経過してしまいました。
【お詫び】
 このホームページの著者が怠けている可能性が濃厚です。でも、善意に考えてあげましょう。もしかすると病気で入院中なのかもしれません。入院中で、容易にはインターネットアクセスができない状態なのかもしれません。あるいはアイデァが尽きたのではなく、寿命が尽きつつあるのかもしれません。少し時間をおいて、また訪問してみてください。

じゃ また / See you again.
(更新SelfCheckプログラム)

 更に、1年間以上更新されないと、次のように表示する。

更新SelfCheckerからの報告!

【更新日】2010年3月12日 =======>【現在日】2011年3月14日
 最後に更新されて以来 もう1年以上経過しています。
【警告】
 このホームページの著者は、もしかすると亡くなっているかもしれません。その場合、このホームページは以後更新されることはありません。閉鎖されることもあり得ます。早めに、書斎内を詳細に見学しておくことをお勧めいたします。
 そろそろ私め(プログラム)も覚悟を決めておく必要がありそうです。実に残念なことであります。

では では / Bye.
(更新SelfCheckプログラム)

 更に、数年間以上更新されないと、次のように表示する。

更新SelfCheckerからの報告!

【更新日】2009年12月20日 =======>【現在日】2011年3月14日
 最後に更新されて以来 とうとう2年近くが経過してしまいました。
【お礼と報告】
 これはかなり深刻な事態です。おそらく、このホームページの著者の寿命が尽きたものと思われます。生前の著者に対するご厚情に対し、著者に代わり私め(プログラム)から厚く御礼申し上げます。

 なお、香典を送りたい方は、

 ○○銀行○○支店 普通預金口座 番号 XXXXXXXXXXXX

へお振り込みいただければ幸いです。

 ただし、万一、この判断が間違っていた場合(何しろプログラムが判断したことですから充分にあり得ます)送金された香典は返却いたしません。その場合は同額をタイガーマスク(伊達直人)名義で児童養護施設に寄付させて頂きますので、ご容赦いただきたいと思います。

さようなら / Good bye.
(更新SelfCheckプログラム)

 これらを表示するためのアルゴリズム(手順)を記述した JavaScriptプログラムを以下に示す。

【注意】以下のプログラム表記は本物のプログラムそのものではなく、プログラムをHTMLファイル上で表現するために手を入れています。したがって、間違いが混入している可能性もあります。本当に利用したい人は正確を期して本物のプログラムファイルUpdateSelfChecker.htm、または UpdateCheck.jsをダウンロードして利用してください。
・方法1
 この方法は初心者向きである。
 データ更新が行われていない旨を報告するメッセージは、最初に表示されるページ上に表示したいのが普通だから、トップページのHTMLファイル中の適当な場所に以下のJavaScriptプログラムを、

 <script type="text/javascript">
  <!---


   //--->
 </script>

とで囲んで挿入すればよい。

更新SelfCheckプログラム
<script type="text/javascript">
<!---

//* UpdateSelfChecker
//* (c) Coded by Knuhs : 2011-3-11(東日本大震災の日に作成開始)

 var Delay = 2; //* 条件成立を遅らせる日数

 var step = 0; //* =0:異常なし, =1:1月以上経過,
                 //* =2:6カ月以上, =3:1年以上経過
 var lastUpdate = document.lastModified ;
//* テスト時は active にしたい行の黒ブロック■を削除する
/* *■/ lastUpdate = "02/11/2011"; //* 1か月以上 */
/* *■/ lastUpdate = "09/12/2010"; //* 6か月以上 */
/* *■/ lastUpdate = "03/12/2010"; //* 1年以上 */
/* */   lastUpdate = "12/20/2009"; //* 2年以上 */

//* lastModified : mm/dd/yyyy
//*                0123456789
 var lastYear = Number(lastUpdate.substr(6,4));
 var lastMonth = Number(lastUpdate.substr(0,2));
 var lastDay = Number(lastUpdate.substr(3,2));

 var now = new Date();
 var nowYear = now.getFullYear();
 var nowMonth = now.getMonth()+1;
 var nowDay = now.getDate();

/* テスト時は行末の黒ブロック■を削除する *■/
     nowYear = "2011";
     nowMonth = "01";
     nowDay = "01"; //* */

 var DiffY = nowYear - lastYear;
 var DiffM = nowMonth - lastMonth;
 var DiffD = nowDay - lastDay;

 var lastdateString = lastYear+'年'+lastMonth+'月'+lastDay+'日';
 var nowdateString = nowYear+'年'+nowMonth+'月'+ nowDay+'日';


/* テスト時は行末の黒ブロック■を削除する *■/
 if ( DiffY == 0 && DiffM < 0 ) alert("data error 1");
 if ( DiffY < 0 ) alert("data error 2");
 document.write( '【更新日】', lastdateString , ' |');
 document.write( '【現在日】', nowdateString ,' |');
 document.write( '【 差 】' , DiffY,'年差/', DiffM,'月差/',DiffD, '日差/ :: ');
//* */

 switch( DiffY )
 {
  case 0:
        if ( DiffM == 0 ) break;
        if ( DiffM == 1 )
            if ( DiffD - Delay > 0 ) step = 1;
            else ;
        else
        {   step = 1;
            if ( DiffM > 6 ) step = 2;
            else
                if ( DiffM == 6 )
                    if ( DiffD >= 0 ) step = 2;
                    else ;
                else ;
        }
        break;
  case 1:
        if ( DiffM > 0 ) step = 3;
        else
            if ( DiffM == 0 )
                if ( DiffD >= 0 ) step = 3;
                else step = 2;
            else
                if ( DiffM == -11 )
                    if ( DiffD - Delay > 0 ) step = 1;
                    else step = 0;
                else
                    if ( DiffM + 6 > 0 ) step = 2;
                    else
                        if ( DiffM + 6 == 0 )
                            if ( DiffD > 0 ) step = 2;
                            else step = 1;
                        else step = 1;
        break;
  default:
        step = 3;
 }

 if ( step != 0 ) document.write( '<center><table border="5" width="490" cellspacing="0" cellpadding="5" bordercolor="#ff9900" bordercolorlight="#ff9900" bordercolordark="#993333"><tr><td align="left" bgcolor="ffffcc"><font size=3><font color="red"><center><b>更新SelfCheckerからの報告!</b></center></font> <hr><font color="black">【更新日】', lastdateString,' =======>【現在日】', nowdateString,'\n</font> <hr><font color="blue">  最後に更新されて以来 ' );

 switch( step )
  {
  case 0: break;

  case 1: document.write( '
1か月以上が経過しています。<p><b>【注意】</b><br> 本ホームページの更新が遅れています。おそらく、現在更新準備中と思われます。あるいは、このホームページの著者のアイデァが枯渇してきたためかもしれません。少し時間的な余裕を与えてあげて、静観するのがよいと思います。新たなアイデァが浮かべばまた更新されるでしょう。その際には、また訪問してください。</p><b> じゃ また / See you.</b></font><font color="black">(更新SelfCheckプログラム)' );
    break;

  case 2: document.write( '
6か月以上経過してしまいました。<p><b>【お詫び】</b><br> このホームページの著者が怠けている可能性が濃厚です。でも、善意に考えてあげましょう。もしかすると病気で入院中なのかもしれません。入院中で、容易にはインターネットアクセスができない状態なのかもしれません。あるいはアイデァが尽きたのではなく、寿命が尽きつつあるのかもしれません。少し時間をおいて、また訪問してみてください。</p><b> じゃ また / See you again.</b></font><font color="black">(更新SelfCheckプログラム)' );
    break;

  default: if ( DiffY < 2 ) document.write( '
もう1年以上経過しています。<p><b>【警告】</b><br> このホームページの著者は、もしかすると亡くなっているかもしれません。その場合、このホームページは以後更新されることはありません。閉鎖されることもあり得ます。早めに、書斎内を詳細に見学しておくことをお勧めいたします。<br> そろそろ私め(プログラム)も覚悟を決めておく必要がありそうです。実に残念なことであります。<br></p><b> では では / Bye.</b></font><font color="black">(更新SelfCheckプログラム)' );
    else
  document.write( '
とうとう', DiffY,'年近くが経過してしまいました。<p><b>【お礼と報告】</b><br> これはかなり深刻な事態です。おそらく、このホームページの著者の寿命が尽きたものと思われます。生前の著者に対するご厚情に対し、著者に代わり私め(プログラム)から厚く御礼申し上げます。</p><p> なお、香典を送りたい方は、</p><p> ○○銀行○○支店 普通預金口座 番号 XXXXXXXXXXXX</p><p>へお振り込みいただければ幸いです。</p><p> ただし、万一、この判断が間違っていた場合(何しろプログラムが判断したことですから充分にあり得ます)送金された香典は返却いたしません。その場合は同額をタイガーマスク(伊達直人)名義で児童養護施設に寄付させて頂きますので、ご容赦いただきたいと思います。</p><b> さようなら / Good bye.</b></font><font color="black">(更新SelfCheckプログラム)' );
 }

 if ( step != 0 ) document.write( '<hr></font></td></tr></table></center><br>\n' );
 else
 { document.write( '<br><center><table border="5" bgcolor="#ffffcc" width="500" cellspacing="0" cellpadding="5" bordercolor="#ff9900" bordercolorlight="#ff9900" bordercolordark="#993333"><tr><td align="left" bgcolor="ffffcc"><font size=3><img src="
flash.gif" align="left"><font color="black"> 本ページには、<font color="blue"><b>更新セルフチェック機能</b></font> が付加されています。詳しくは <a href="selfcheck.htm">こちら</a> を参照してください。</td></tr></table></center><br>\n' );
 }


  //--->
</script>

・方法2
 これは、JavaScriptプログラムに詳しい人向きである。
 上記と同じ手順を関数形式にして用いる。これを UpdateCheck.js という名前のファイルにし、JavaScriptプログラムを置く場所、たとえば /js 上に置く。
 これを利用するには更新確認をしたいHTMLファイルの中に

<script type="text/javascript" src="js/UpdateCheck.js"></script>
<script type="text/javascript">UpdateSelfChecker();</script>

と書けばよい。こちらの方が格段にスマートであろう。

UpdateCheck.js
//* UpdateCheck.js
//* (c) Coded by Knuhs : 2011-3-11(東日本大震災の日に作成開始)

function UpdateSelfChecker()
{

 var Delay = 2; //* 条件成立を遅らせる日数

 var step = 0; //* =0:異常なし, =1:1月以上経過,
               //* =2:6カ月以上, =3:1年以上経過
   ・
   ・
   ・
   ・
  (この部分は上記と同じ)
   ・
   ・
   ・
   ・
ます。詳しくは <a href="
selfcheck.htm">こちら</a> を参照してください。</td></tr></table></center><br>\n' );
 }


}

 関心のある方は是非利用してみてください。ただし、間違いがあって早々に香典が届いたりして“新手の振り込み詐欺”と疑われても、私めは一切責任を負えませんので自己責任で試みてください。■

【プログラムの解説】
(1) このプログラムには、デバッグ用として動作確認のために“更新日”と“現在日”を任意に設定できる記述が含まれています。それを利用したい場合は、
 /* */ lastUpdate = "12/20/2009"; //* 2年以上の */
の黒ブロックを削除してください。プログラム例では2年以上の場合が設定(active化)されているので、最終的にはを挿入してコメント化してください。
 現在日の設定場所もすぐ分かると思います。

(2) ここでは、チェックの期間を1か月、6カ月、1年以上と設定されていますが、自分に適した期間に改造してください。

(3) 1か月経つと直ぐさま警告されたのでは、うるさいと感ずる場合もあります。数日の猶予期間を設けたい場合は、変数 Delay にその値を指定することができます。ここでは2日の猶予を与えています。

(4) ある限界を越えた場合に出力するメッセージは、各自工夫して灰色の文字列で示してある部分と入れ替えてください。

(5) ある限界を越えたかどうかの判定は、それほど厳密ではありません。しかしアルゴリズムに重大な欠陥を発見した場合は、勝手に直してくださって結構ですが、私にも教えていただければ幸いです。

(6) 出力幅は width="490" としてありますが、表示する場所の事情に合わせて調整してください。
(7) 一般化するための表示は省略しています。必要なら UpdateSelfChecker.htm
表示してはいけませんよ。!ダウンロードしてください!)、または UpdateCheck.js の方を参照してください。

Knuhs (2011-3-14記) … 公開 2011-4-1 四月馬鹿の日