[リストへもどる]

一括表示

▼ 板塀高度化計画 - としき@家主 2008/11/06 13:51 No.1491
  ┣Re: 板塀高度化計画 - としき@家主 2009/01/07 22:00 No.1507
  ┃┣Re^2: 板塀高度化計画 - としき@家主 2009/01/09 21:27 No.1508
  ┃┃┗Re^3: 板塀高度化計画 - としき@家主 2009/02/08 14:21 No.1522
  ┃┣Re^2: 板塀高度化計画 - としき@家主 2009/01/12 22:15 No.1509
  ┃┣Re^2: 板塀高度化計画 - としき@家主 2009/01/24 23:11 No.1516
  ┃┗Re^2: 板塀高度化計画 - としき@家主 2009/02/26 14:29 No.1527
  ┃ ┗Re^3: 板塀高度化計画 - としき@家主 2009/03/02 22:37 No.1528
  ┃  ┗Re^4: 板塀高度化計画 - としき@家主 2009/04/21 11:14 No.1551
  ┃   ┗Re^5: 板塀高度化計画 - としき@家主 2009/06/10 23:05 No.1600
  ┣Re: 板塀高度化計画 - としき@家主 2009/03/16 12:42 No.1531
  ┃┗Re^2: 板塀高度化計画 - めざら 2009/03/20 09:02 No.1532
  ┃ ┗Re^3: 板塀高度化計画 - としき@家主 2009/03/20 22:09 No.1533
  ┃  ┗Re^4: 板塀高度化計画 - としき@家主 2009/04/26 23:06 No.1552
  ┃   ┣Re^5: 板塀高度化計画 - 文太 2009/04/28 00:01 No.1553
  ┃   ┃┣Re^6: 板塀高度化計画 - 文太 2009/04/28 00:02 No.1554
  ┃   ┃┣Re^6: 板塀高度化計画 - 文太 2009/04/28 08:47 No.1555
  ┃   ┃┗Re^6: 板塀高度化計画 - としき@家主 2009/04/28 12:53 No.1556
  ┃   ┃ ┣Re^7: 板塀高度化計画 - 文太 2009/04/28 13:39 No.1557
  ┃   ┃ ┃┗Re^8: 板塀高度化計画 - としき@家主 2009/05/03 23:41 No.1574
  ┃   ┃ ┗Re^7: 板塀高度化計画 - としき@家主 2009/04/28 18:42 No.1558
  ┃   ┃  ┗Re^8: 板塀高度化計画 - 文太 2009/04/29 00:07 No.1559
  ┃   ┃   ┣Re^9: 板塀高度化計画 - 文太 2009/04/29 00:12 No.1560
  ┃   ┃   ┃┗Re^10: 板塀高度化計画 - としき@家主 2009/04/29 00:47 No.1561
  ┃   ┃   ┗Re^9: 板塀高度化計画 - としき@家主 2009/04/29 01:19 No.1562
  ┃   ┃    ┗Re^10: 板塀高度化計画 - 文太 2009/04/29 10:06 No.1563
  ┃   ┃     ┣Perl5 regex, look-ahead - 文太 2009/04/29 21:50 No.1564
  ┃   ┃     ┃┗Re: Perl5 regex, look-ahead - 文太 2009/04/29 21:52 No.1565
  ┃   ┃     ┗Re^11: 板塀高度化計画 - としき@家主 2009/04/29 23:06 No.1566
  ┃   ┃      ┗Re^12: 板塀高度化計画 - konno 2009/04/30 03:04 No.1567
  ┃   ┃       ┗Re^13: 板塀高度化計画 - としき@家主 2009/05/01 01:16 No.1568
  ┃   ┃        ┗Re^14: 板塀高度化計画 - konno 2009/05/01 13:53 No.1569
  ┃   ┃         ┣Re^15: 板塀高度化計画 - としき@家主 2009/05/02 14:12 No.1570
  ┃   ┃         ┃┣Re^16: 板塀高度化計画 - konno 2009/05/02 21:53 No.1571
  ┃   ┃         ┃┗Re^16: 板塀高度化計画 - としき@家主 2009/05/03 23:05 No.1572
  ┃   ┃         ┃ ┗Re^17: 板塀高度化計画 - としき@家主 2009/05/06 23:31 No.1575
  ┃   ┃         ┗Re^15: 板塀高度化計画 - としき@家主 2009/05/03 23:19 No.1573
  ┃   ┗Re^5: 板塀高度化計画 - としき@家主 2009/05/21 23:54 No.1582
  ┗Re: 板塀高度化計画 - としき@家主 2009/06/29 20:12 No.1605
タイトル板塀高度化計画
記事No1491
投稿日: 2008/11/06(Thu) 13:51
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
タイトルはなかなかかっこいいような気もしますが。
実際はそんなに高級なことをするわけではありません。
今回は、掲示板スクリプトのi-mode対応と、サーバダウン時の暫定臨時バックア
ップシステム導入の予定。フルブラウザ全盛の今時、i-mode対応もないとは思う
のですが。

とりあえず、i-modeについては、私が端末を購入してからまもなく1年になると
いう事もあり、現在、すでに規制は解除しました。今までは、J-PHONEの一部端末
とi-modeについては、スクリプトの方で規制をかけており、実質的に閲覧不可に
なっていたのです。ただ、閲覧できるようになったとは言え、とくに通常時から
表示を変えているわけではないため、それほど見やすいくなっているわけではあ
りません。これを、どのように変更するかという事を検討するのですが、なんか
面倒だなぁ。nogateって言ったかな、なんか普通のWEBページをi-mode対応に
するCGIが世の中にはあるらしいので、それをかましてアクセスするのが一番
手っ取り早い気がする。

ということで、次回(期日未定)は暫定臨時バックアップに関する方式検討の予
定。もちろん、変更の可能性は大有りですが。
 

タイトルRe: 板塀高度化計画
記事No1507
投稿日: 2009/01/07(Wed) 22:00
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1491
> ということで、次回(期日未定)は暫定臨時バックアップに関する方式検討の予
> 定。もちろん、変更の可能性は大有りですが。

#1503にも書きましたが。
板塀倒壊時の暫定臨時バックアップサーバへのなんちゃって自動切換機能が動き
はじめています。まだ、細かいところで微妙に問題も残っているのですが、発覚
する前に揉み消してしまう予定。

さて、方式検討なんて大上段に構えていますが、必要な要素技術をリストアップ
すると以下のようなものとなります。

・バックアップ用のサーバの用意
・バックアップサーバへのログの転送
・ダウン検知
・切換方法
・復旧時の切り戻し

そして、これらのそれぞれが完全に独立しているわけではなく、ある部分である
方法を選択すると、必然的に別の部分ではある方法が使えなくなってしまったり、
というような、非常に絡み合った関係なんですね。

ということで、次回はもう少し具体的なことを書いてみましょう。
#ぅぉぉ、ひっぱってるなぁ
 

タイトルRe^2: 板塀高度化計画
記事No1508
投稿日: 2009/01/09(Fri) 21:27
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1507
なんか、早速役に立っているというか有効に活用しているというか。
1月9日18時半頃から10日昼過ぎにかけても、約18時間ほど切り替わって
いました。宿直だったもので、帰宅するまで切り戻しできませんでしたからね。


> ・バックアップ用のサーバの用意
> ・バックアップサーバへのログの転送
> ・ダウン検知
> ・切換方法
> ・復旧時の切り戻し
> 
> そして、これらのそれぞれが完全に独立しているわけではなく、ある部分である
> 方法を選択すると、必然的に別の部分ではある方法が使えなくなってしまったり、
> というような、非常に絡み合った関係なんですね。

絡み合っているといっても、どんなサーバを用意するかで他は大部分が規定され
てしまいます。
まず、サーバの設置場所。自宅内なのか外部なのか。
外部の場合、現在の自宅サーバと同等かそれ以上のスペックが得られるのであれ
ば、そちらの方をメインのサーバとして、板塀の土塀化が行われるはず。だけど
暫定臨時バックアップと割り切ればスペック的に見劣りするサーバで十分なので、
選択肢は多くなります。ところが、スペックが低いと、メインサーバが落ちてい
ることをバックアップサーバ側から自動で検知する、なんて事ができなかったり
するわけで、この場合、検知機能を別途構築する必要があります。
一方、自宅内にもう一つのサーバを置いた場合。この場合、バックアップサーバ
側でいろんなことがなんでもできるので、自由度は非常に高いです。ログの転送
を例にすると、低スペックな外部サーバの場合、ftpでメインサーバ側からputす
るしかない場合もありますが、自宅内であれば、設定次第とは言え、バックアッ
プサーバ側でgetすることも可能だし、そもそもftp以外のプロトコルすら使用可
能。すなわち、ネットワークコンピュータとして接続して共有フォルダを設定し
て単純なコピー一発、という形。メインサーバから押し出すのかバックアップ側
で引っぱるのかも自由に選べるし。

ということで、以下次回。
 

タイトルRe^3: 板塀高度化計画
記事No1522
投稿日: 2009/02/08(Sun) 14:21
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1508
> まず、サーバの設置場所。自宅内なのか外部なのか。

いくつか、重大なことを書き忘れていますね。
外部サーバを使った場合、サーバダウン時のみならず回線断発生時にもサービス
を継続できる、というとても大きなメリットがあります。これは、自宅内にバッ
クアップサーバを用意する方式では逆立ちしてもまねできないアドバンテージ。

逆に、仮に外部サーバを使った場合のデメリットとしては、外部サーバから切換
が可能なのかどうか、ということ。つまり、フレームファイルを書き換えるわけ
ですから、これが格納されている地主(ケーブルテレビ屋)のサーバにアクセス
する必要があるわけです。そのためには、最低限、FTPのクライアント機能が
備わっていなければなりません。ソケット機能があればなおよし。
もう一つ、定期的な監視が必要なわけですから、タイマー機能も必須。さらに、
ログファイルの転送の有無でサーバの死活監視をする場合には、ファイルの存在
確認や時刻情報の取得をすることになるので、実質的にはシェルスクリプト相当
の機能が必要になります。

こういうことを考えていくと、外部サーバの場合、なんだかんだで結構なハイス
ペックが要求されそう。となると、もう一声で土塀サーバに手が届いてしまう、
ということに。なんだかなぁ。
 

タイトルRe^2: 板塀高度化計画
記事No1509
投稿日: 2009/01/12(Mon) 22:15
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1507
> ・バックアップ用のサーバの用意
> ・バックアップサーバへのログの転送
> ・ダウン検知
> ・切換方法
> ・復旧時の切り戻し

復旧時の切り戻しについては、特に考える事もなくて。
要は、自動切り戻しか手動切り戻しか、というだけのこと。
どうせ復旧は手動で行うのだから切り戻しも手動で十分、と考えるか、仮にそう
であっても、切換が自動で可能なのだから切り戻しも自動で行うロジックを具備
しておいた方が良い、と考えるか。わずかに工数は増えてしまいますが、自動切
り戻しも搭載しておくのがベターでしょうね。

一番キモになるのがダウン検知方法。
マシンの死活チェックだけならPingでのチェックがオーソドックスですが、この
板塀の場合、Ping応答はあるけどサービスが停止している、ということがよくあ
るので、この方法は使えません。
サービスの死活チェックということであればHTTPでアクセスして確認するのが筋
ですが、これはなにがいやかというと、アクセスログが肥大化すること。だって
1時間に1回の死活チェックでも1日あたり24回のアクセス。ところが、現状
のうちのサーバのアクセス状況は、スパマーやら検索エンジンのクローラー全部
ひっくるめて1日あたり平均400回。これ、ときどき猛烈なアクセスがあって
極端に多い時を含めた平均なんで、そういう時を除くと、1日平均約250回。
つまり、HTTPでチェックすると、ログが1割程度大きくなってしまいます。

実は、ここでも、バックアップサーバをどこに用意するか、という問題が絡んで
きます。バックアップサーバを自宅外に用意して、そこから直接ダウン検知を行
おうとすると、HTTPを使うしかありません。だって、自宅ゲートウェイでは、外
から中へのアクセスはHTTPしか許可していないのですから。が、これはあくまで
も「直接」ダウン検知を行おうとした場合。当然、間接的に検知するという方法
もあります。例えば、1時間に1回とかで定期的にログをバックアップサーバに
転送するようにしておいて、ログの転送が3時間以上途絶えたらメインサーバが
倒れていると判断する、という方法。当然、この方法は、バックアップサーバを
自宅内に用意する場合にも採用可能です。
もちろん、自宅内で検知するのであれば、直接的な方法がいくらでもあります。
とりあえず現在、HTTPの他にFTPとNFSのデーモンが動いているので、そのあたり
を使ってログ転送と合わせての死活チェックは可能。あ、NetBEUIという手もある
な。当然、その他のプロトコルのデーモンでもOK。そういえばTIMEプロトコル
(ポート37)のデーモンも動いているけど、Windowsマシンではこのプロトコル
を使った死活チェックというのはちょっと難しそう。そういう目的に転用できそ
うなクライアントソフトがなさそうなもので。

ということで、切換方法については次回。
 

タイトルRe^2: 板塀高度化計画
記事No1516
投稿日: 2009/01/24(Sat) 23:11
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1507
> ・バックアップ用のサーバの用意
> ・バックアップサーバへのログの転送
> ・ダウン検知
> ・切換方法
> ・復旧時の切り戻し

最後に残ったのが切換方法。
この掲示板はフレーム方式を採用しています。つまり、どこかから直リンクで入
ってきた人は別として、きちんとサイトのリンクをたどってきた場合、フレーム
の内側が掲示板本体となっている、という構造。こうなっているので、切換の際
には、土台と称しているフレームの外側のファイルを書き換えて

・倒れていることの表示
・フレームの内側のリンク先変更

を行えばOK。
METAタグを使ってURL転送する、という方が素直なような気もしますが。

ところが、ここでまた、サーバが外部か内部か、という問題が絡んできます。
外部サーバなら、フレームの内側のリンク先を単に書き換えるだけですが、内部
サーバの場合、書き換えてはいけないというか、書き換える必要がない場合があ
ります。これは、自宅のゲートウェイであるルータの機能や設定が絡んできます。
現在、自宅のゲートウェイでは、特定のポート番号にリクエストが来た時だけ、
そのリクエストをサーバに転送するような設定にしています。さて、そのサーバ
が倒れた時、自宅ゲートウェイをどのように制御するのがよいのか。

案1:
内部の転送先をメインサーバからバックアップサーバに変更する
外部からの待ち受けポートは変更しない
 →フレーム内側のリンク先の変更は不要

案2:
あらかじめ、別ポートをバックアップサーバ向けに転送するように設定しておく
 →切替時にはゲートウェイの設定変更不要
  フレーム内側のリンク先の変更は必要

この辺は、どっちを選んでも一長一短です。

ところが、案2の場合と、それから外部サーバを使う場合も同じですが、これら
の場合はもう一つ、制御するかしないかを考える部分があります。それは、バッ
クアップサーバを常時アクセス可能状態にしておくかどうか、という問題。
もし常時アクセス可能であれば、たとえば直リンクされてしまった場合、メイン
のサーバが生きているにも関らずバックアップサーバの方へアクセスされてしま
うわけで、私にとっては、これはいささか不愉快です。
ということで、これらの場合、ほんのちょっと面倒だけどきちんとバックアップ
サーバの起動制御を行うのか、多少の不愉快さを我慢してバックアップサーバは
アクティブのままにしておくか、という判断も必要になってきます。


え〜と。
検討が必要な項目はこれで大体いいかな。
ということで、次回はまとめ。それがあまり長くならないようなら、実際にうち
で導入したシステムの概要も書けると思うけど、私の場合、文章が無駄に長くな
る傾向があるから、ちょっとそれは無理かな。
 

タイトルRe^2: 板塀高度化計画
記事No1527
投稿日: 2009/02/26(Thu) 14:29
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1507
> ・バックアップ用のサーバの用意
> ・バックアップサーバへのログの転送
> ・ダウン検知
> ・切換方法
> ・復旧時の切り戻し

まとめ。
会社で作る資料なんかの場合は、パワーポイントあたりで表形式を作って○×△
を入れたりするのですが、タグもろくに使えないこの掲示板では、こんな感じで
しょうか。


案A:外部サーバでバックアップ
・ログ転送方式は外部サーバの仕様に依存(FTPが無難か?)
・ダウン検知方式:サーバにタイマー機能が必須
  HTTP取得不可 → △(自宅サーバに負荷がかかる)
  ログ転送途絶 → ○
・メインサーバダウン時だけではなく回線断時にも
 サービス継続可能というメリットあり
・外部サーバから地主サーバに FTP アクセス可能か確認要
・メインサーバがアクティブな時の待機方式をどうするか


案B:自宅内にバックアップサーバ設置
・ログ転送方式は自由度が高い
 FTP/NFS/NetBEUI
 どちらからput/getするか選択可能な場合もあり
・ダウン検知も選択肢が多い
 HTTP/ログ転送途絶/FTP/TIME プロトコル
・切換方式はどうする?
 ポート番号変更方式の採用可否
 自宅ゲートウェイを制御する/制御しない


ま、こんなところでしょうか。
さて、手持ちのリソースを検討してみた時、外部サーバとして使えるものは既存
ではほとんどありません。かつては自宅サーバを立てている友人が複数いたので
すが、現在は、かなり疎遠な友人が一人だけ。その他には、私はニフティの会員
なので、そこのCGIサーバが使えるのですが、これにはタイマー機能はなさそ
うだし FTP クライアント機能もなさそう。
となると、自宅内でバックアップサーバ設置という方法をとらざるをえないわけ
で、余っているパソコンはゴロゴロあるのですが、さて、どれを使うか。

ということで、次回、アッと驚く(誰も驚かないって)システム構成の予定。
 

タイトルRe^3: 板塀高度化計画
記事No1528
投稿日: 2009/03/02(Mon) 22:37
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1527
やっとたどりつきましたが、板塀バックアップシステムのハードウェア構成です。

いろいろと検討した結果、自宅内でバックアップサーバを維持するのは困難であ
るという結論に達しました。理由は、維持費。これは電気代がほとんどなんです
が、その他にも、騒音の発生に伴う精神的苦痛だの設置場所だのも金銭換算する
と結構な金額になってしまいます。もし、静かで、かつ、電気をあまり食わない
マシンがあれば、現用サーバとスペックを比較の上、どちらかをメインマシンに
し、もう片方がバックアップサーバとなったことでしょう。

となると、必然的にバックアップサーバは外部のものを使う事になるのですが、
では何が使えるか。地主が店子用に自由に使えるCGIサーバを用意してくれて
いればそちらも選択肢になったのでしょうけど、あいにくとそういう物はない。
重要な考慮点である「余分な出費をせずに」という事を考えると、著しく機能が
不十分なニフティのCGIサーバを何とかして使うしかありません。でも、こう
いう場合にどうすればよいかという事は、既に示唆してあったりします。
#1508 に、こんな事を書きました。

> 暫定臨時バックアップと割り切ればスペック的に見劣りするサーバで十分なので、
> 選択肢は多くなります。ところが、スペックが低いと、メインサーバが落ちてい
> ることをバックアップサーバ側から自動で検知する、なんて事ができなかったり
> するわけで、この場合、検知機能を別途構築する必要があります。

つまり、検知機能や切換機能などは自宅内に用意し、サーバそのものはニフティ
のものを使うという方法です。いわば、内部サーバ案と外部サーバ案の折衷案。
とは言え、検知機能や切換機能も、まともに考えると、最低限、パソコン程度の
機能は必要なはず。スペック的にはDOSパソコン程度で十分おつりがきますが。
あ、ネットワーク機能だけは割と高度なものが必須。

こう考えて手元のリソースを見渡すと、あるではないですか、ぴったりなものが。
「パソコンのようでパソコンでない」
「ネット機器のようでネット機器でない」
「それは何かと尋ねたら」
いきなり、なんかの古典芸能のようになってしまってますが。
そうです、アレです。2年越しで散々遊んでいる、APRS-11/APR-11です。
このうち、昨年夏に入手して「AP-11改」化してしまったAPR-11を使うことにしま
した。これは元々がルータですから、ゼロスピンドルで音は出ないし、消費電力
はわずか10W程度だし、いいこと尽くめ。スペック的には486パソコン相当
ですから、パソコンとして使うにはかなり貧弱ですが、linuxなOSでも入ってい
てタイマー機能もシェルスクリプトも使えますから、機能的には必要十分。もと
もとがルータだからネットワーク機能は必要以上に強力。

ということで、このちっぽけな装置を核として、ニフティのCGIサーバをふり
回すようなシステムを構築することとしました。といっても、やっていることは、
ちょっとした設定を行ったことと、些細なシェルスクリプトを書いただけなんで
すけどね。

あぁ、また文章が無駄に長い。
次回こそは、詳細なシステム構成を書いてみたいと思います。
 

タイトルRe^4: 板塀高度化計画
記事No1551
投稿日: 2009/04/21(Tue) 11:14
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1528
ということで、システム構成です。

・バックアップ用のサーバの用意
 ニフティのCGIサーバを使用することにします。

・バックアップサーバへのログの転送
 1時間に1回、メインサーバの側から、FTPでPUTします。
 新規にバックアップ用の設定を行ってもよかったのですが、既存で1時間に
 1回、回線断を検知するためのバッチファイルを走らせているので、これを
 改造しました。回線断でなければファイルをPUTする、というルーチンを追加
 しただけです。
 なお、バックアップサーバがコケていることはほとんどないので、その部分
 のチェックはサボっています。そもそも試験できないし。なので、その場合
 に何が起こるかは不明。FTPがタイムアウトするだけだとは思うのですが。

・ダウン検知
 AP-11から1時間に1回、TIMEプロトコルでサーバに問い合わせして、応答が
 なければダウンしていると判断します。cronでシェルスクリプトをキックし
 ているだけです。

・切換方法
 ダウンを検知したら、AP-11から地主サーバにアクセスして、フレームの外側
 ファイルを書き換えます。ついでに、板塀の飾りと称している、タイトルや
 注意事項を記載してあるフレームの内側ファイルその1も、現在ダウン中と
 いう内容に書き換えています。
 さらに、バックアップサーバにもアクセスし、通常は休止状態となっている
 掲示板スクリプトを活性化させます。具体的には、通常時はOFFとなって
 いる実行可能属性をONにするだけです。
 なお、ダウンが継続している場合は、毎時間、書き換えのためのアクセスが
 起きないように、状態を保持します。

・復旧時の切り戻し
 復旧を検知したら、地主サーバにアクセスして、フレームの外側ファイルと
 フレームの内側ファイルその1を書き戻します。そしてバックアップサーバ
 のCGIの実行可能属性をOFFにします。これで、メインサーバ稼動時に
 バックアップサーバに直リンクされてもアクセスできないようにしています。
 また、AP-11で保持している内部状態を復旧中のステータスにします。
 放っておいても最大1時間待てば自動で復旧しますが、AP-11にログインして
 ダウン検知のシェルスクリプトを手動で起動させれば即座に復旧可能です。

このシステムが稼動しはじめたおかげで、メインサーバがダウンしても、閲覧者
に対するサービス影響は最低限にとどまっています。家主の精神衛生にも、非常
に大きな好影響を与えています。

今後の予定というか妄想としては、ダウンを検知したら家主の会社や携帯電話の
メールアドレスにメールを飛ばすという機能を実装したいと考えています。使用
中のbusyboxにsendmail機能があれば簡単なんですが、現在はありません。一応、
telnet機能はついていますから、ヒアドキュメントを駆使すればなんとかなる可
能性はあります。busyboxをアップデートする方が簡単かなぁ。
他にも、なにか面白いネタを思いついたら実装するかもしれません。
 

タイトルRe^5: 板塀高度化計画
記事No1600
投稿日: 2009/06/10(Wed) 23:05
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1551
> 今後の予定というか妄想としては、ダウンを検知したら家主の会社や携帯電話の
> メールアドレスにメールを飛ばすという機能を実装したいと考えています。使用
> 中のbusyboxにsendmail機能があれば簡単なんですが、現在はありません。一応、
> telnet機能はついていますから、ヒアドキュメントを駆使すればなんとかなる可
> 能性はあります。busyboxをアップデートする方が簡単かなぁ。

busyboxをアップデートしようとしてみました。
が、あえなく玉砕。
sendmailが搭載された一番古いバージョンと思しきものをダウンロードしてみま
した。それを、会社のマシンのVirtual PCにインストールしてあるTurbo Linuxで
コンパイルしてみました。いくつかワーニングは出ましたが、エラーはたったの
2ヵ所。そのうちの片方はコメント化で簡単に回避できたのですが、もう1つは
私のスキルではどうしようもない。
おそらく、コンパイラのバージョンがもっと新しければ問題なくコンパイルでき
るのではないかという気がしています。なんとなくですけど、何かの型定義が、
古いコンパイラと新しいコンパイラで異なっているような気がしています。

またそのうちに近所の図書館で円盤付の本を借りて、簡単なLinux環境を構築して
から実験してみることにしましょう。
 

タイトルRe: 板塀高度化計画
記事No1531
投稿日: 2009/03/16(Mon) 12:42
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1491
別の枝にします。

最近、この掲示板もスパム書き込みがひどいです。
内容は、どれもこれも日本語。アクセス元は日本国内。
ログ解析の結果、どうやら、ブラウザから手動で書き込みを行っているみたい。
でも、完全に手動というわけでもなく、いわゆる、懸賞応募支援ツールのような
ものを使っている模様。これはかなり古く、10年かそれ以上昔からあるツール
で、ブラウザの名前や住所、メールアドレス欄に自動的に適切な文字列を放り込
んでくれるというものです。敵は恐らく、スパム書き込みに特化したツールを使
っていると思われますが、汎用的なその種のツールに、キーマクロツールという
のかな、キー入力自動化ツールを組み合わせてもスパム書き込みシステムを構成
することは可能です。というか、その程度なら私でも作れます。

一応、ここの掲示板、ロボット書込みツールによるアタックにはそれなりの対策
をとっているのですが、さすがに手動書込みには勝てません。
ということで、残念ながら、投稿内容に着目した書き込み規制措置を導入しまし
た。具体的にどんな内容が規制対象になっているかを明かすことはできませんが、
とりあえず、以下の内容は、現時点では規制対象とはなって「いません。」
いずれも「書き込み可能」です。

・全角文字の含まれていない投稿
・URLの多数含まれている投稿
・わいせつな単語がいくつか含まれている投稿

えぇっと、ちょっとした解析を行っておりますもので、わいせつな単語の場合、
大量に含まれていてもチェックをスルーしてしまう可能性もありますし、ほんの
1つか2つしか含んでいなくても、組み合わせによっては不正なアクセスとみな
されてしまう可能性もあります。
過去数週間に書き込まれてしまったスパム約10通のうち、この対策を通過でき
るのは多分1通、もしかしたらもう1通くらいあるかな。ということで、大甘の
希望的予測でスパムは現在の20分の1、辛口の予測でも半分に減ることが期待
されます。という事は、辛口の予測で2日に1通、ですか。本当に大したことは
ないな。まぁ、平均では3日に1通くらいでしょう。

もし、書き込みの際に「不正なアクセス」というようなメッセージが出てしまっ
た場合、大変恐れ入りますが、できるだけ謹厳実直な文体にして投稿しなおして
みて下さい。それでも書き込めないような場合は、メール等でお問い合わせ頂け
るよう、なにとぞよろしくお願いします。
 

タイトルRe^2: 板塀高度化計画
記事No1532
投稿日: 2009/03/20(Fri) 09:02
投稿者めざら
参照先http://homepage3.nifty.com/mezala/
レス元1531
> ほんの1つか2つしか含んでいなくても、組み合わせによっては不正なアクセスと
> みなされてしまう可能性もあります。

 正規表現の and で複数の語句片にマッチするとはじかれるのでしょうか。

 WebForumは用意した禁語リストにマッチする語があるとはじく機能がありますが,
伏せ字を使われるとお手上げです。おそらく,ユーザの大半は正規表現を知らないと
いう配慮(か思い込み,あるいは決め付け)が働いているのでしょうけど,リストが
実際に効力を発揮する例は,以前はともかく,現在は皆無と言ってもよいでしょう。

 原版の限界が明らかなので,としき版フィルタの技術に非常に興味があります。
 簡単に組み込み可能なモジュールを公開なさいませんか?

タイトルRe^3: 板塀高度化計画
記事No1533
投稿日: 2009/03/20(Fri) 22:09
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1532
とりあえず、現状報告。
対策導入後、めざらさんの書き込みまでの間に、全部で9件のアタックがありま
した。そのうちの1件は海外ホストからで、これは既存の対策で迎撃した模様。
その他の8件が国内の妖しいホストからでしたが、スルーされたのは1件のみ。
今回導入した対策の効果は、通過できるスパム数を今までの10%〜50%にで
きる、と見込んでいましたが、実際はもっと効果があって、5%〜20%程度に
抑止できそうな感じ。

ただ、自分でも今回のフィルターの挙動が読み切れていないもので、いろいろと
試してみているのですが、例えばちょっと古い世代の著名ポルノ作家の文章だと、
ほぼ確実にスルーしてしまう模様。例としては、あいうえお順で

 赤松光夫
 宇能鴻一郎
 川上宗薫
 団鬼六
 富島健夫
 蘭光生

といった方々の名前を挙げておきましょうか。あ、これらの方々は、たまたま私
が名前を知っていたというだけです。
一方で、最近のいわゆるライトノベルの文章だと、わいせつな語句を全く使って
いなくても、10%未満(恐らくはもっと低くて5%未満)の確率ではあります
けど、ごくまれに引っかかってしまうことがある模様。さらに顕著なのが、単に
URLを全角文字で入力しただけのものが、多分80%以上という結構な高率で
引っかかってしまっています。

ということで、なんというかちょっとこれはあまりにも劇薬というか副作用が大
きすぎる上に、場合によっては思ったような効果を上げないようなので、そのう
ちに取り外す方向です。

>  正規表現の and で複数の語句片にマッチするとはじかれるのでしょうか。

現状では違いますが、こっちの方が正統派っぽいかな。

>  WebForumは用意した禁語リストにマッチする語があるとはじく機能がありますが,
> 伏せ字を使われるとお手上げです。

正規表現を使って禁語リストマッチを行うのは、それほど大変ではなさそうな気
がしますけど、どんなものなんでしょうか。

>  原版の限界が明らかなので,としき版フィルタの技術に非常に興味があります。

大変申し訳ありませんが、上記の理由より、今回の対策は非公開です。
が、今回の対策の代替として導入を検討しているものを以下に挙げておきます。

まず、某所で導入されている「ほげほげ認証」。これはそのまま導入してもいい
し、ちょっといじって「としき認証」としてもいいかな。どうするかというと、
メッセージの中に「と」と「し」と「き」の全てが含まれている場合のみ投稿を
許可する、というもの。少なくとも「と」と「し」は、ある程度長い文章であれ
ば接続詞だの文末だので出現する確率は非常に高いと思われるので、わざわざ私
の名前を入れなくてもOKになるのではないかなぁ。
これであれば、実装はそんなに難しくないはず。文字列が含まれているかいない
かをチェックする条件判断をいくつか追加するだけですから。
とりあえず、過去の全発言を解析して、正当な投稿がどの程度の割合で弾かれる
か計算してみます。あと、スパムがどの程度の割合でスルーするかもチェックし
ないと。ただ、私、過去の全スパムを保存しているわけではないんですね。会社
から遠隔でメンテした場合は大抵そのまま削除してしまっているもので。でも、
大体の傾向はわかるから大丈夫かな。

次が、間隔検証。
昔のスパマーは掲示板を全く読まずにいきなり投稿してきましたが、多くの掲示
板でそのような投稿を排除する対策が取られた結果、とりあえず一度は読んでか
ら投稿するタイプのスパマーが増えました。が、よく言われることですが、スパ
マーの場合、読んでから投稿するまでの間隔が異常に短い。そりゃ、機械がやっ
ているわけですから、人間業ではないのも当り前。なので、この間隔を検証する
ことで判断可能。
実装としては、本来であればサーバのソフトで対応するのが筋かもしれませんが、
CGIレベルでやるのであれば、例えば、書き込みフォームにhidden属性で、そ
のフォームを出力した日時とリクエスト元のホスト名かIPアドレスを付加しま
す。書き込み時にそれらをチェックして、違うホストからの投稿や著しく短時間
での投稿を排除するようにします。許容時間は60秒以上12時間未満ぐらいで
いいかな。もしかしたら180秒以上でもいいかもしれない。
注意点としては、ホスト名はともかくとして、時刻情報は暗号化して送出してや
らないと、フォームのソースを読まれて突破されてしまう可能性があるという事。
でも、name属性の値を"rand"にして、unixtimeの値の上2桁くらいを削って送る
ようにすれば、結構バレないかもしれない。それに、現在ウチに押し寄せてきて
いるのが本当にブラウザを自動操作しているタイプのものであるなら、そいつら
はソースなんか読んでいないわけで、かなり効果が高いはず。

最後は算術認証。
ひらがなで「よんたすさんは?(答は半角数字で)」みたいな表示を出して、答
を認証欄に記入してもらう、というもの。いよいよ認証欄を使う事になるのかな。
いわゆるCAPTCHAのようなものなんですけど、形だけは音声ブラウザの人にも投稿
可能なようにしたい、ということで。
問題文は乱数で作成するので、当然、毎回異なります。一桁同士の足し算なら答
は0から18までの間に収まってしまいますが、さすがに19連発のアタックは
来ないだろう、と思っています。甘いかなぁ。

実装の難易度でいうと、としき認証が一番簡単で、間隔検証と算術認証はどっち
が楽かな。ユーザビリティは、間隔検証は現状と何ら変わらずだけど、他の2つ
はちょっとだけお客様にストレスがかかってしまう。でもって、問題は、効果の
見積もり。算術認証はCAPTCHAに近いと思っているんですが、としき認証は偶然に
突破される確率が高いはず。バレたら終りだし。間隔検証は、現状のアタックに
対して当面は効果があるはずだけど、対応する書き込みツールは既に存在してい
そうな気もする。
う〜ん、なんとか頑張って、早急に間隔検証を導入してみるかなぁ。



ちなみに、世の中にはどんな書き込みツールが現存するのだろうか、と探してい
て見つけたのが以下のページ。

http://kotonoha.main.jp/2004/10/16anti-spam.html
http://www.hat.hi-ho.ne.jp/heart_thoughts/sfs2_diary/200602.html

ちょっと日付が古いけど、なかなかまとまっていて、とても参考になりました。
 

タイトルRe^4: 板塀高度化計画
記事No1552
投稿日: 2009/04/26(Sun) 23:06
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1533
ちょっと本腰を入れて、間隔検証の導入準備を始めました。
フォーム部分に、妖しげなパラメータをhiddenで埋め込んでみただけです。
まだ、チェックのためのルーチンは実装していません。

フォーム部分のソースを読んでみれば一発ですが、乱数を想起させる名称のパラ
メータが2つ追加されました。が、実体は、片方はアクセス元のIPアドレス、
もう片方はフォームが呼び出された時刻を表しています。で、それぞれの値を文
字列として左右反転し、1文字ローテートをかけただけ。こんなもんでも、ちょ
っと見には実体が全くわかりません。

チェックルーチンもそれほど難しくなく実装できそうな気はしますが、現在多忙
につき、いつ完成するかなぁ。連休中にはなんとかしたいと思っているのですが。
ちょうど今、会社で使うと役に立ちそうなツールを作っていたりもするもので、
そっちが完成してからになるかも。


それも重要ですが、もっと重要というか、実は、この掲示板スクリプトを改造す
るにあたって、私が混入させたバグを発見してしまいました。具体的には、いわ
ゆる発言番号リンクの部分です。

cf.
http://www.hinocatv.ne.jp/~toshiki/computer/itabei/article.html

どこがバグかというと、#1543をご覧ください。
発言番号指定が3つ並んでいるのに、真ん中がリンクになっていません。
ちょっとソースを追いかけただけでは、何が悪いのかわかりませんでした。
これも、腰を据えて追いかけないとだめかも。

実験で、以下に、いくつか発言番号を羅列します。
これが原因の解析に役立てばいいんだけど。

#466 #611 #310
#700 #674 #652 #323
#526 #589 #564 #552 #514
 

タイトルRe^5: 板塀高度化計画
記事No1553
投稿日: 2009/04/28(Tue) 00:01
投稿者文太
レス元1552
としきさん

 以下のような具合のようでした。

#466 OK, 	*#611 		+#310
#700 OK, 	*#674 		#652, OK 	*#323
+#526 		*#589 		+#564 		*#552 		#514, OK

*リンクがブラウザ(firefox, ieとも)で出ず
+155.099.hinoまででfailure


タイトルRe^6: 板塀高度化計画
記事No1554
投稿日: 2009/04/28(Tue) 00:02
投稿者文太
レス元1553

 すいません、タブ飛びました。m(__)m

タイトルRe^6: 板塀高度化計画
記事No1555
投稿日: 2009/04/28(Tue) 08:47
投稿者文太
レス元1553
 おお。タブが直り(?)、リンクへ全部飛びました。文太@職場

タイトルRe^6: 板塀高度化計画
記事No1556
投稿日: 2009/04/28(Tue) 12:53
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1553
今日の午前中は、JR豊田駅前付近をうろついていたりしました。
駅から徒歩1分のところに、日野市勤労・青年会館などという素晴らしい施設が
あることに、つい3日ほど前に気がついてしまったもので。ほんと、同じ市内で
も、JR沿線というか浅川より北側は私の縄張りから外れてしまっています。


さて。

>  以下のような具合のようでした。

あぁ、レスをつけられてしまった。
個人的な実験というつもりだったので、あとで実験部分は削除しようと思ってい
たのです。が、レスをつけていただいたおかげでわかったこともいくつかあって。

まず、タブが飛ぶ、という点について。
これは、こちらでは再現していません。多分、閲覧環境によるものでしょう。
逆に言うと、どんな環境で閲覧されるかわからないという点をお含みいただけれ
ば、と思います。わかりやすく言えば、誰が読んでも同じ体裁を希望するなら、
タブを使わないようにするしかない、ということ。スクリプトの側で対応するの
は面倒ですし、タブ禁止、なんてことは言いませんが、自粛していただければ幸
せになれることが多いのではないかと。

次。

> +155.099.hinoまででfailure

これも、こちらでは再現しません。
というか、スクリプトはホスト名部分は送り出していません。
なので、ホスト名の途中で途切れる、というのがそもそも不可解。
ホスト名部分はブラウザが補ってくれるものですので、これも、ブラウザの方が
謎の挙動を示したという事でしょう。一時的なものかもしれませんが。

最後。

> *リンクがブラウザ(firefox, ieとも)で出ず

これが今回、私が問題とした部分。
プログラマー側の意図としては、全ての発言番号にきちんとアンカータグが付さ
れるようにスクリプトを書いたつもりでした。ところが、リンクにならない部分
が発生することが今になって判明。
当初、1つの行に複数の発言番号リンクがあれば発生するのかと思っていました。
が、この発言、#1553を見ると、同じだけの数の発言番号リンクがあっても、きち
んとアンカータグが発行されている。
となると、2つの発言番号の間隔が問題と想定されます。
うまくアンカーが出ていない#1543の場合は、間隔が全角句読点1文字、#1552は
間隔が半角空白1文字。一方、#1553は間隔に複数文字が入っています。
ということで、以下、さらに実験。

#513  #289 #509

最初は半角空白2文字、次は半角空白1文字。さてどうなるか。
あ、この実験に関して、わざわざレスをつけていただくにはおよびません。
私の方で結果は全て確認できますから。
もちろん、レス禁止というわけではなくて、HTMLのソースレベルでの検討を
していただけるのであれば歓迎しますし、ついでにスクリプトの問題点まで指摘
していただけるのであれば大歓迎。

ということで、なにとぞよろしく。
 

タイトルRe^7: 板塀高度化計画
記事No1557
投稿日: 2009/04/28(Tue) 13:39
投稿者文太
レス元1556
としきさん、職場です。firefoxな点は同じなのですが…。
 あらら、個人的実験だったのね、ごめんなさい。

>タブを使わないようにするしかない、ということ。スクリプトの側で対応するの
>は面倒ですし、タブ禁止、なんてことは言いませんが、自粛していただければ幸
>せになれることが多いのではないかと。

 了解。気をつけます。ただ、2個以上の半角スペースが1つにまとめられてし
まう掲示板というものもあり…。yahoo sed users' group その他のアメリカン・ヤフー。

>> +155.099.hinoまででfailure
>これも、こちらでは再現しません。
>なので、ホスト名の途中で途切れる、というのがそもそも不可解。

 途切れてません。端折ったのは僕。「hino.cable何とか=発言番号」です。タイムアウトでした。

#513  #289 #509
; A     B    C
>最初は半角空白2文字、次は半角空白1文字。さてどうなるか。

 Cにリンクが出ていないようです。昨晩と環境はいちおう違います。
 余計な口出し、失礼しました。
 今朝、職場で直っているように見えたのは、こちらの環境依存ということですね。

タイトルRe^8: 板塀高度化計画
記事No1574
投稿日: 2009/05/03(Sun) 23:41
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1557
>  了解。気をつけます。ただ、2個以上の半角スペースが1つにまとめられてし
> まう掲示板というものもあり…。yahoo sed users' group その他のアメリカン・ヤフー。

どちらかというと、2個以上の半角スペースが1つにまとめられてしまう掲示板
の方が多いはず。この板塀だって、空白削除モードにすればそうなるわけだし、
野ざらし言で推奨されている通常モードだってそうなっているはず。
逆に、タブを含んでいる発言の表示が閲覧環境によって異なることにより、お互
いのコミュニケーションの障害になる可能性もあると思うのだけど、あまりにも
妄想がすぎるかなぁ。
どんな閲覧環境でも同じような見た目を確保するために、スクリプトの側でタブ
コードを削除する、なんてことはほとんどしないと思うし。

>  途切れてません。端折ったのは僕。「hino.cable何とか=発言番号」です。タイムアウトでした。

この部分、よくわかりません。
サーバがタイムアウトを出したという事なのでしょうか。
ということは、HTMLとしては正しかった、ということなのかな。

今回、問題にしているのは、スクリプトの出力がどのようなHTML文になって
いるのか、だけです。家主の読解力の欠如とあいまって、HTMLのソースに基
づかない議論は、ひたすら家主が混乱するだけです。
要するに、どんなHTML文だったのでしょうか。
 

タイトルRe^7: 板塀高度化計画
記事No1558
投稿日: 2009/04/28(Tue) 18:42
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1556
> 今日の午前中は、JR豊田駅前付近をうろついていたりしました。

午後からは、ちょっと陣馬山方面へドライブ。
せっかくレス通知メールサービスを導入しても、車を運転中ではどうにもならん。

> 最初は半角空白2文字、次は半角空白1文字。さてどうなるか。

原因判明。
発言番号を認識するための正規表現文字列の問題でした。
現在、以下のような感じになっています。

(1)「半角英数字以外、または全角文字、または行頭」
(2)「半角『#』と半角数字の1文字以上の繰り返し」
(3)「いくつかの記号または半角数字ではない文字」(行末含む)

と連続している文字列を

(1)「半角英数字以外、または全角文字、または行頭」
(2)「アンカータグ」「半角『#』と半角数字の1文字以上の繰り返し」「閉じタグ」
(3)「いくつかの記号または半角数字ではない文字」(行末含む)

というように置換しています。
ここで、行頭に近い部分で(3)と判断された文字は、次の文字列の(1)とは判断さ
れなくなってしまうのです。間隔を2文字空けると、(3)と(1)が1文字ずつと判
定されて、後ろ側の発言番号もきちんとリンクになってくれます。

さて、どうしようかな。
このルーチン、めざらさんのところにも提供しているものだし、とっとと改修し
たいのだけど。
例えば、(1)の条件を取り払ったとします。すると

 http://〜/〜.html#xxx

みたいな、よそのURLが書き込まれても、この掲示板内のリンクが勝手に形成
されてしまいます。それはいくらなんでもまずい。となると、(3)の条件を削除し
てみましょうか。こうすると、例えば、小数点付の数字が発言番号リンクになっ
てしまいます。現状では、小数点付の文字列の場合はイゲタマークがついていて
も発言番号リンクにならないようになっているのです。
まぁ、この程度だったらいいか。

どんな具合になるか、あとで試してみましょう。
 

タイトルRe^8: 板塀高度化計画
記事No1559
投稿日: 2009/04/29(Wed) 00:07
投稿者文太
レス元1558
としきさん

>(1)「半角英数字以外、または全角文字、または行頭」
>(2)「半角『#』と半角数字の1文字以上の繰り返し」
>(3)「いくつかの記号または半角数字ではない文字」(行末含む)
>と連続している文字列を
>(1)「半角英数字以外、または全角文字、または行頭」
>(2)「アンカータグ」「半角『#』と半角数字の1文字以上の繰り返し」「閉じタグ」
>(3)「いくつかの記号または半角数字ではない文字」(行末含む)

 引用長くてごめんなさい。正規表現の知識だけでは無理ですね。しばらく眺め
ましたが映像が頭に浮かんできませんでした。
 タブだけ注意するようにしますね。

 豊田の左奥あたりは、何やら変わったみたいだな程度の認識です。あれら、
立派でしたっけ? 魚系のうまそうな飲み屋があるなぁ、とは何度も思ってい
るのだけど。でも、電車を使わなくなって久しく、関戸橋横のハード・オフで
一休みな毎日なものですから…(汗)。


タイトルRe^9: 板塀高度化計画
記事No1560
投稿日: 2009/04/29(Wed) 00:12
投稿者文太
レス元1559
としきさん

 投稿直後に error 423 が出るようです。 2回目かな? "something exceeds
my limit ...." ???
 あれ、何かへんなものが見えた。引用の行頭に#804000が各行、ついてました。
(今書いている「返信フォーム」の上の、文太元発言に。)

タイトルRe^10: 板塀高度化計画
記事No1561
投稿日: 2009/04/29(Wed) 00:47
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1560
>  投稿直後に error 423 が出るようです。 2回目かな? "something exceeds
> my limit ...." ???

これは、レス通知メールの送信が失敗した時に出ます。
そもそもなぜ送信に失敗するかを解明して根本対処するべきなのですが、ヒマと
スキルと根性が足りない。
とりあえず、この表示が出ないようなパッチを当ててみました。
が、それがうまくいくかは不明。
うまくいかないようなら、こいつも本腰を入れねばならんかな。

>  あれ、何かへんなものが見えた。引用の行頭に#804000が各行、ついてました。

試行錯誤の最中でございました。
#1558で書いた、条件(3)を単純に削除してみたのです。
結果、何が起きたかというと、色指定の文字列までもが発言番号扱いになってし
まった、ということで。
とりあえず、元に戻しました。
単に(3)を削除するというのであれば、HTML内で迂闊な色指定はできない、と
いう事ですね。どうしてもこの方法をとるのであれば、色指定は慎重に行うか、
あるいは正攻法で、色指定は全て外部スタイルシートファイルに追い出すか。
うぅん、悩みまくり。
 

タイトルRe^9: 板塀高度化計画
記事No1562
投稿日: 2009/04/29(Wed) 01:19
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1559
>  引用長くてごめんなさい。正規表現の知識だけでは無理ですね。しばらく眺め
> ましたが映像が頭に浮かんできませんでした。

これはしょうがないでしょう。私の説明がよろしくないのですから。
以下、全角文字で書きます。

 #x
↑↑↑↑ 
abcd

私が正規表現で引っかけているのは、上の図で言うと、以下のようなものです。

a部分:「半角英数字以外」または「全角文字」が1文字、または「行頭」
b部分:半角「#」
c部分:「半角数字の1文字以上の繰り返し」
d部分:(「数字」および「いくつかの記号」)ではない1文字、または「行末」

このような文字列があったら、それを以下のようにします。

 <アンカータグ>#x<閉じタグ>
↑       ↑↑     ↑ 
a       bc     d

つまり、a部分とb部分のあいだにアンカータグを挿入し、c部分とd部分のあ
いだに閉じタグを挿入しています。でも、このような文字列が、あいだに1文字
あるだけで2つ連続するとどうなるか。

 #x #x
↑↑↑↑↑↑↑
abcdbcd

最初の発言番号部分は、きちんとabcdが揃っているのでアンカータグの挿入
が成功します。ところが、2番目の発言番号部分は、a部分がないと判断されて
しまうため、正規表現にひっかからないのです。これがもし、あいだに2文字あ
ると、次のようになります。

 #x  #x
↑↑↑↑↑↑↑↑
abcdabcd

この場合は、2番目の発言番号も、abcdが揃っているとみなされて、きちん
とアンカータグの挿入がなされます。
ここで、4条件の連接ではなく、最後の条件を外して3条件の連接にしたとしま
す。すると

 #x #x
↑↑↑↑↑↑
abcabc

あいだが1文字でも、2番目の発言番号もきちんと3条件の連接が成立するので
アンカータグが挿入できます。しかし、こんな単純なことでは世の中丸く収まり
ません。

ということで、私の悩みは続くのでした。
 

タイトルRe^10: 板塀高度化計画
記事No1563
投稿日: 2009/04/29(Wed) 10:06
投稿者文太
レス元1562
としきさん

 そんなに世の中甘くないだろうとは思うのだけど、これしか思いつかない。
 確かに難しい。

 #x
↑↑↑↑ 
abcd

 dでなくaの条件を外すと使いものになりませんか?
 #はそのまま。
 xを桁数上限をつける。5桁まででとりあえず現実的?

 dが重なると先読み、戻り読みでも駄目。
 駄目だろうなぁ。

 タブ表示の件、firefoxだとOKで、IE6だと駄目だと判明。興味ないでしょうが。

タイトルPerl5 regex, look-ahead
記事No1564
投稿日: 2009/04/29(Wed) 21:50
投稿者文太
レス元1563
 d部分でなくa部分を外すプラン(perl5な正規表現。look-ahead)

--- input ---
#123 #456  #789  #12345 #123456 #12345

-------------
--- output --
X#123Y X#456Y  X#789Y  X#12345Y #123456 X#12345Y

-------------

#>ssed -R -f test.sed input >output

--- test.sed ---
{
N             # これはsedなので、強引に改行をパターンスペース末尾にに付加するため
              # perlなら不要、というかそもそも\nが取られない。
s/#([0-9]{1,5})(?=[^0-9#]|\n)/X#\1Y/g
}
----------------

 駄目ですかね。

タイトルRe: Perl5 regex, look-ahead
記事No1565
投稿日: 2009/04/29(Wed) 21:52
投稿者文太
レス元1564
あ、できてる!

タイトルRe^11: 板塀高度化計画
記事No1566
投稿日: 2009/04/29(Wed) 23:06
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1563
相変わらず試行錯誤中の家主でございます。

>  dでなくaの条件を外すと使いものになりませんか?

とりあえず、そのようにしてみました。
結果、どのような副作用が発生するかは不明。
今のところは顕在化していないようですが。
 

タイトルRe^12: 板塀高度化計画
記事No1567
投稿日: 2009/04/30(Thu) 03:04
投稿者konno
レス元1566
としきさん

> 相変わらず試行錯誤中の家主でございます。

ここの記事を読んで、うちの板にも発言番号リンク機能を導入したくなり、
「板塀(掲示板)の手入れ(改造)」の「発言番号リンク」
http://www.hinocatv.ne.jp/~toshiki/computer/itabei/article.html
を参考にして、入れてみました。m(__)m

うちのソースは独自の改変をしているので、そのままではうまく動かないので、
若干の手直しをして、何とか表示できるようになりました。
特に、自動リンクのルーチンは

    local($_) = @_;
      ・・・
      ・・・
    $_;

このやりかただとなぜかURLのリンクも含め、まったく機能が有効にならないので

	$_[0] =~ s/([^=^\"]|^)(https?\:\/\/[\w\.\~\-\/\?\&\=\;\#\:\%\+\@]+)/$1<a href='$2' target='_blank'>$2<\/a>/g;
#    s/(^|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]|[^0-9a-zA-Z\#\"]+)#([0-9]+)([^0-9\;\.\"])/$1<a href=\"$script?mode=article&amp;no=$2\">#$2<\/a>$3/g;
	$_[0] =~ s/([\x40-\x7E\x80-\xFC]|[^0-9a-zA-Z\#\"]+)#([0-9]+)([^0-9\;\.\"])/$1<a href='$script?mode=article&amp;no=$2'>#$2<\/a>$3/g;

このように従来形式でやってみました。
あと、なぜかURLが正しく生成されないので、「"」を「'」に変更しました。
現状ではまだスペース1文字の空きに対応できてないです。(++;

> >  dでなくaの条件を外すと使いものになりませんか?
> とりあえず、そのようにしてみました。

この変更点を教えてもらえませんでしょうか。


タイトルRe^13: 板塀高度化計画
記事No1568
投稿日: 2009/05/01(Fri) 01:16
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1567
> あと、なぜかURLが正しく生成されないので、「"」を「'」に変更しました。

これはなぜなんでしょうね。
シングルクォートの場合とダブルクォートの場合で、HTMLのソースを比較し
てみると、どんな感じになるのでしょうか。

> この変更点を教えてもらえませんでしょうか。

これは結構単純。
単に、正規表現の、頭の1文字分を消しただけです。
konnoさんの導入したもので言うと、以下のような感じ。

> $_[0] =~ s/([\x40-\x7E\x80-\xFC]|[^0-9a-zA-Z\#\"]+)#([0-9]+)([^0-9\;\.\"])/$1<a href='$script?mode=article&amp;no=$2'>#$2<\/a>$3/g;
      ↓
  $_[0] =~ s/#([0-9]+)([^0-9\;\.\"])/<a href='$script?mode=article&amp;no=$1'>#$1<\/a>$2/g;

基本的にはこれだけ。
実際には、$2に対応する正規表現で、あと2つくらいの記号を除外するようにし
ましたが、あまり意味のある変更でもないので、このままで十分でしょう。
 

タイトルRe^14: 板塀高度化計画
記事No1569
投稿日: 2009/05/01(Fri) 13:53
投稿者konno
レス元1568
としきさん、ありがとうございます。

さっそく手元のソースの先頭部分を削除してみたんですが、

123# 456#  789#
    ̄    ̄     ̄
X123#Y X456#Y  X789#Y X12345#Y 123456# X12345#Y
     ̄      ̄       ̄         ̄        ̄       ̄
こんなふうになっちゃうんですよ。(++; 
・・・はっ、$1,$2,$3がそのままだった。

でも、こんどは普通のリンクがこんなふうに。(++;

#35' target='_blank'>http://hpcgi3.nifty.com/tamaneko/wforum.cgi?&mode=allread&no=34&page=0#35

で、色々やってみて、結局後ろの条件 $3 だけを削除しました。

#	X#123Y ok
	$_[0] =~ s/(^|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]|[^0-9\#\"]+)#([0-9]+)/$1<a href='$script?mode=article&amp;no=$2'>#$2<\/a>/g;

これでたぶん同じ動作になっていると思いますが、URLリンク中に「#」があると
誤動作するような気がするので、

#	X#123Y ng
	$_[0] =~ s/(^|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]|[^0-9a-zA-Z\#\"]+)#([0-9]+)/$1<a href='$script?mode=article&amp;no=$2'>#$2<\/a>/g;

これでいくことにしました。これなら、

#123 #456  #789 #12345 #123456 #12345#3210

こちらは、最後の#3210以外は OK で、

X#123Y X#456Y  X#789Y X#12345Y X#12345Yx#6789y

こちらは NG になるので、URLでの誤動作はしにくいと思います。


> シングルクォートの場合とダブルクォートの場合で、HTMLのソースを比較し
> てみると、どんな感じになるのでしょうか。

ダブルクォートの場合、生成されるURLは

http://hpcgi3.nifty.com/tamaneko/bbs4/%22./wforum.cgi?mode=article&no=123"
                                      ^^^^                               ^^
こうなります。
「区切り文字としてシングルクォーテーション「'」を用いると、置換文字の変数解釈などを行わない」
ということらしいですが、板塀で問題ないということは、うちの環境が腐っているのかなぁ。(^^;

タイトルRe^15: 板塀高度化計画
記事No1570
投稿日: 2009/05/02(Sat) 14:12
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1569
えと、掲示板スクリプトの仕様変更に伴ない、あとから見ると仕様不備な部分が
おかしくなくなったり、その逆などが生じることが多々あると思います。なので、
できれば #xxx などというような形での表記をお願いしたいかな、と。 

ということで、正規表現の見直しをかけてみました。
これで、URLやVzマクロ内の部分が誤判別される可能性はぐっと減ったはず
なのですが、副作用として、行末に発言番号があった場合にリンクとなりにくく
なってしまいました。とりあえず、発言番号の後ろには半角空白を1文字置くこ
とを推奨、としておきますかね。

> ダブルクォートの場合、生成されるURLは
> 
> こうなります。

ありゃりゃん。なんじゃこりゃ。
実体参照というわけでもないし、どうしてこういう変換が行われてしまうのでし
ょうか。スクリプトのどこかを間違えているような気もしますが、でも、ダブル
クォートの後ろの方はOKだとか、シングルクォートにすればうまく行く、とい
うのがよくわかりません。
絶対どこかスクリプトを間違えているというか余計なものが付いているような気
がするのですが、それがどこかはさっぱりわからん。
 

タイトルRe^16: 板塀高度化計画
記事No1571
投稿日: 2009/05/02(Sat) 21:53
投稿者konno
レス元1570
としきさん

> 実体参照というわけでもないし、どうしてこういう変換が行われてしまうのでし
> ょうか。スクリプトのどこかを間違えているような気もしますが、でも、ダブル
> クォートの後ろの方はOKだとか、シングルクォートにすればうまく行く、とい
> うのがよくわかりません。

ダブルクォートのとき、後ろの方も「”」が付いているので絶対どこか間違えているんでしょう。
うちのスクリプトは複雑怪奇にスパゲっているので調べる気も起きません。(^^;

> 絶対どこかスクリプトを間違えているというか余計なものが付いているような気
> がするのですが、それがどこかはさっぱりわからん。

DATAがルーチンAからルーチンBへ通る際に途中で蟲が混入し、異常な状態になってしまったので、
更にルーチンCに通してDATAの正常化をはかっているのでしょう。(^^;

  s/ルーチン/ポッド/

タイトルRe^16: 板塀高度化計画
記事No1572
投稿日: 2009/05/03(Sun) 23:05
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1570
> ということで、正規表現の見直しをかけてみました。

さらに見直しをかけてみました。ので、

> これで、URLやVzマクロ内の部分が誤判別される可能性はぐっと減ったはず

誤判別される可能性はさらに減ったはず。その上、

> なのですが、副作用として、行末に発言番号があった場合にリンクとなりにくく
> なってしまいました。とりあえず、発言番号の後ろには半角空白を1文字置くこ
> とを推奨、としておきますかね。

行末に発言番号があっても、大抵はきちんとリンクできるようになったはず。
当然、半角空白1文字追加の推奨は取り消させていただきます。
何をやったかというと、正規表現文字列に行末の可能性があるものを追加しただ
けだったりしますが。

とりあえず、5月分のサイトの更新はこれをネタにすることにしましょう。
あぁ、なんて安直。
 

タイトルRe^17: 板塀高度化計画
記事No1575
投稿日: 2009/05/06(Wed) 23:31
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1572
> とりあえず、5月分のサイトの更新はこれをネタにすることにしましょう。
> あぁ、なんて安直。

無事、板塀の手入れページの更新も完了しました。
もし、なにかおかしいところに気付かれましたら、御指摘いただけると幸いです。
潜在的な不具合の可能性は否定できませんので。

野ざらしの方も、ここで採用している上記のページに掲載した方式か、あるいは
konno方式に切り替えていただけるとありがたいです。一応、マクロコードを書き
こんだ時にリンクにされる可能性が下がるというのはメリットだと思いますから。
でも、キーボードマクロをそのまま張りつけたりしなければ差異が出ないかも。


関係ありませんが、6月は、なんとなくポケ3の部屋が更新される事になりそう。
多分、グラフィックス関係のページに手を入れる事になるでしょう。
いいかげんそろそろ、FIXというか誤字修正程度にとどめたいのですが、まだ
まだぽちぽちとネタが出てきて困ってしまう。ポケ3が奥が深いというよりも、
どちらかというとDOSが奥が深いという事なんですが。
 

タイトルRe^15: 板塀高度化計画
記事No1573
投稿日: 2009/05/03(Sun) 23:19
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1569
> ダブルクォートの場合、生成されるURLは

ざっくりと抽象化してみると、

> http://(略)/%22./wforum.cgi?mode=(略)"

となっているわけですよね。
でも、元のスクリプトでは、

> 	$_[0] =~ s/(略)/$1<a href="$script?mode=(略)">#$2<\/a>/g;

だったはず。
つまり、この部分ではスクリプトのファイル名から下部しか生成していないはず
なのにディレクトリ名より上部のサーバ名やらスキームやらがくっついてしまっ
ているという事は、このあとにさらに何らかの変換が行われてしまっているとい
う事が推測されるわけです。
この辺、根本原因を潰しておかないと、まだなにかバグが潜在しているようで、
ちょっと恐いかもしれません。
 

タイトルRe^5: 板塀高度化計画
記事No1582
投稿日: 2009/05/21(Thu) 23:54
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1552
> ちょっと本腰を入れて、間隔検証の導入準備を始めました。
> まだ、チェックのためのルーチンは実装していません。

実装してみました。5日ほど前から実戦投入しています。
サーバログを確認した限りでは、妖しげな亜光速書き込みはきちんと蹴っとばし
ているにもかかわらず、通常の書込みには全く影響を与えていない感じです。
この間隔検証導入に伴い、書き込みの内容チェックは全て取りやめました。
URLテンコモリだろうが、2バイト文字が全く含まれてなかろうが、どのよう
な内容でも書き込めるようになっています。
 

タイトルRe: 板塀高度化計画
記事No1605
投稿日: 2009/06/29(Mon) 20:12
投稿者としき@家主
参照先http://www.hinocatv.ne.jp/~toshiki/
レス元1491
別のツリーにしようかとも思いましたが。
そんなに長くならない予定なのでこちらに。
予定通り行かない可能性も高いのですが。

何かというと、iモード対応のお話です。
きちんと対応するのであれば、どのタグが使えてどれはダメで、というような事
を調査して、CGIの側ではUAを検出して対応するタグだけを送出するように
して、と言うようなことが必要です。でも、なかなか手間に見あった効果が得ら
れそうにないような気がします。ということで、てきとーにざっくりと。

まず、重要なのはコスト。
iモードはパケット方式ですから、パケット数の削減が重要。
これには、送出する総バイト数を削減する、というのも必要ですが、もう一つ、
改行の数を減らす、というのも効果があります。料金表をよく見ると、細かい字
で、1パケットは128バイト以下、みたいなことが書いてあります。これは、
128バイト以上のデータを送ろうとすると複数のパケットに分割されるという
事を意味しているのですが、それ以外に、パケット通信というのは、例えデータ
量が少なくても、改行がくるとそこで強制的に複数のパケットに分割してしまう、
という特徴があるのです。なので、一万連続改行、なんてデータを送ろうものな
ら、それだけで一万パケット。
そこで、いくつかの改行コードを取り去ってみました。さすがに、厳密に全ての
改行コードを取り去るような根性はありませんが。この点に関しては、iモード
に対応するもしないもあまり違いはないので、全てのUAに共通な改造です。
スクリプトの吐き出したHTMLのソースを見ると、不自然に行がくっついてい
る部分に気がつかれるかもしれません。ま、とりあえずはこんなものでしょう。

次に、自分がこの掲示板にiモードでアクセスする場合に一番アクセスする頻度
が高いのはどの表示状態か、ということを検討しました。検討などという大げさ
な表現を使うまでもなく、過去の記憶を思い起こすだけなんですが、iモードで
一番よく見ているのは新着記事(mode=newsort)の画面。データ量を減らす、と
いう意味から、iモードでのアクセス時のみ、一度に表示する記事の数をわずか
3つとしてみました。
現在は、さらにラジカルというか、実験的に、本文表示もカットしてみました。
でも、ここまでやると、記事一覧で新規順表示を選んだ時と大して変わらない。
さすがにこれはやりすぎというか、それぞれの表示状態の存在理由が問われてし
まうので、きちんと差別化が図れるのでなければ元に戻しましょう。