ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

HTMLからStruts用のJSP、クラス、config自動生成の試案メモ

2005-04-05 18:13:12 | JavaとWeb
 今日、電車の中で、このブログのお話を考えていたら、HTMLのファイルからStruts用のJSP,クラス(ActionFormとAction)、Struts-config.xmlを自動生成するExcelVBAを思いついてしまった。

 で、忘れないようにメモ




機能:Struts用の画面のHTMLファイルを読み込んで
   Struts用のJSP,
   クラス(ActionFormとAction)、
   Struts-config.xmlをつくります。

業務内容:
 Strutsで開発する場合って、ここに書いてあるような感じで、
 まず、HTMLファイルで画面つくって、お客さんにOKもらって、上記のファイルをつくる。

今回の機能:
 それって、めんどくさいんで、自動化する

環境:
 ExcelのVBAなのだ
(とうぜん、ぷらっとほーむは秋葉原だ!
じゃなくて、Windowsだ)

操作:
(1)はじめに、画面となるHTMLファイルをどこかにまとめよ。
    FORMタグがはいってて、値の入るところにはInputで指定して置く)

(2)Excelシートを開いて、「HTMLからシートJSP作成」を、
   (設定変数を設定した後)実行
   


   すると、HTMLファイル1ファイルにつき、ActionFormのシートが1つできる
   

   全体で、Action一覧のシートが1つできる
   

   そして、HTMLファイル1つにつき、1つのJSPファイルができる。
   HTMLタグに置き換えられる。
   Inputのところは、プロパティに置き換えられる。
        ActionFormシートにも書き出し
   Formのところは、actionのところが、Action一覧の1行分に相当

(2)シートを修正して「ActionとActionForm作成」を
   (設定変数を設定した後)実行
    Actionの一覧には、successのときの移動先JSPを書く
    ActionFormは、修正が必要なら(繰り返しのところとか)シートを直す
        当然、JSPもなおす
    ActionForm1シートにつき、1つのActionFormクラスが出来る
    Action一覧1行につき、1つのActionクラスができる

(3)「Struts-configの作成」を
   (設定変数を設定した後)実行
   もととなるStruts-config.xmlを読み込み、シートの
   ActionFormをもとに、form-beanを作成し、
   Action一覧をもとに、Actionを作成し、追加書き出しする。
  (書きながら、足りないところに気づいた。
   Action一覧のシートに、どのJSP画面で発生したかを書かないと
nameがつくれないや)




 別に、思いついたことを忘れないために、書いただけなので、
 本当に作るかどうかわかんないです。
 だから、だれか、このアイデアをもとに、勝手に作っても、結構です。
 もし、作ったら(作ってる過程もふくめて)このブログで紹介するかも?

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ソース公開、コミュニティが開発のLinuxって、ハッカー君が有利に見えるのは私だけ??

2005-04-05 11:50:07 | Linux
 昨日の記事が、アクセス数は普通だったけど、アクセスIP数が多かったので、今日もLinuxの話題(Linuxというカテゴリまで作ったぞ!)。




 Linuxのバグフィックスに、結構、「バッファーオーバーフロー」っていう言葉が良く出てきませんか?このバッファーオーバーフロー、原因の多くは、

 Cなど、メモリ領域を自分で確保する必要があるプログラムにおいて、

char fname[256]; // ファイル名を受け取るところ
int i,c;

for(i=0; c != EOF ; i ++)
{
c = getchar();  // コンソールからファイル名を受け取る
fname[i] = c;
}
fname[i] = 0;

みたいな
(って、いくらなんでも、ここまで、お馬鹿なプログラムはないよ!)
予想以上のデータが入ってきてしまったときに起きるのが普通。




 で、ここで問題なのは、Linuxは、ソースが公開されているっていうこと。
 バッファーオーバーフローが起きた場合、その部分を修正して、公開されるわけだ。

 ということは、ソースコードを入手して
 (公開されているからダウンロードして,rpm -bp する)
 そうすると、どこにバグがあったかが、わかる
 (最終的にあてたパッチを調べてもいいし、直前のものとのdiffをとってもいい)

 そうすると、どこにバグがあったかが分かる。

 っていうことはだよ、
 普通の業務開発なら、ここで横並びチェックをやっていて、同じようなバグは、修正してるよねえ。。。
 でも、でも、でも、Linuxって、コミュニティが開発してるわけよ!
 コミュニティの間で、横並びチェックができるのかあ???(^^;)

 ってことはあ。。。。

 他のハッカーの人は、違うコミュニティで、同じようなバグがでてないか?
 って、すぐに調べられるよね
 だって、ハッカー君は、
 ・他のコミュニティが作ったもののソースをrpm -bpして、
 ・そのソースで、似たようなバグ
    (バッファーオーバーフローの場合、似たようなところでバグを起こす)が
  あるかどうか、ソースをgrepしてみることができる。

 似たような、ソースがあったら、どーする??このハッカー君は!

 でも、ある可能性は、否定できないわけよ。その理由は後で書くけど。




 さらに、これ以外の話でも、ハッカー君有利なことがある。
 ソースが公開されているので、
   デバッグ情報つきになるようにMakefileを書き換えて、
   rpm -bbして、
   gdbで動かせば、
 バグで落ちたとき、どのモジュールで落ちたかわかるわけ。
 つまり、バグとその理由を発見しやすいわけね。

 コミュニティが修正する場合は、
  ・この理由を見つけた後に、
  ・修正して、
  ・みんなに配らないといけないけど、

 ハッカー君の場合は、そこから悪さできる方法を知っていたら、あとは、もう、すぐ、悪さできちゃうわけよ。どー考えても、ハッカー君のほうが、悪さしやすいわけよね。

 この勝負、ハッカー君のほうが、有利なわけよ。




 じゃあ、こういうことをやらせないようにすればいいわけ。
 その方法としては、
   ・バッファーオーバーフローにさせない
   ・バッファーオーバーフローになったら、
      シグナルをあげて、
      シグナルが上がったら、
      適切な処理を行うとか、
    とにかく、Segmentation Faultでいきなり死なないようにする
 とかが、考えられる。でも、どちらもいまの、コミュニティに頼るCVSによる開発方法では、限度があるのよ。




 っていうのは、バッファーオーバーフローになるのの多くは、勝手にプログラマが領域を切っちゃうことが多いため。
 例えば char fname[256]とか、char URLname[1024]とか、最大と思う領域を勝手にきめていれてしまうため。

 なぜ、そんなことが起きるか?というと、
  一般の業務開発では、こういう固定値は、管理する人がいて、
   その人がAccessとかExcelで管理して、
   CやJavaのソースコードをそこから自動生成して、
   みんなに配布する
  っていうルートができてますよね。

 でも、Linuxの場合、
   URLのパスの最大値って、そもそも、あるのかどうかわからないし、
   仮にあったとしたら、どのヘッダーファイルに入っているかしってる??
 ファイルの長さの最大値、MAXFILELENが、Linuxでどのヘッダーファイルに定義されてるか?
 「MAXFILELEN Linux ヘッダーファイル」でぐぐってみても、見つかんないってでてくるのよ。

     わかんない=めんどくさい、
     自分で勝手にきっちゃえー!ってなる。

 でも、そうすると、その文字以上、ハッカー君が入力しちゃうと、Segmantation Fault!
 (バッファーオーバーフロー)




 でも、かりにバッファーオーバーフローになったとしても、エラー処理がしっかりしていて、カーネルから、そういうシグナルで「落ちる」という信号をひろったら、処理を終了して、きれいに抜けるような処理がかかれていればOKだけど、

 Linuxにおける標準的なエラー信号の拾い方、ひろった後の処理の仕方

 って、だれが決めるの(どこのコミュニティの人がきめるわけ?)
 そして、決まったことが守られてるって、だれが確認するの?

 ふつうの開発なら、アーキテクチャを考える人がやるけど、
 Linuxの場合、???




 つまり、Linuxの場合

  ・コミュニティ内での開発情報は、メーリングリストなどで盛んに流れるが
  ・コミュニティを超えて、開発情報、バグ情報、コーディングスタイルの情報が流れない?
  ・コミュニティを超えて、それらの情報を管理、監査、勧告する団体がはっきりしない?
    →ないのかも?あっても、仕事してないのかも?
  ・それらの管理をディストリビューターにやれといわれてもねえ??

 っていう感じだと思う。




 なんで、そこにハッカー君がつけこんで、あるコミュニティが作成したソフトのバグが、他のコミュニティのソフトで起きないか?などと、横並びチェックをされた日にゃー、ハッカー君有利!になると思う。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする