HYSPRO Diary
2001-12-19 (Wed) 入力テスト
_ tDiaryをインストールしてみました。
テスト書き込みです。
_ tDiary
書き込みOK無事設定できたようです。
tDiaryは、GPLのフリーソフトとして公開されています。
日記支援Webものとしては、はいぱー日記システム(hns)が有名なようですが、こちらを見つけたので使って見ます。「つっこみ」機能が気にいりました。
どこで知ったかというと、Kondaraに関して調べものをしていたら、tDiaryを使って情報提供している人がいたからです。どうも、コンダラーズの間では流行っているような気がします。まだ局所的な人気のようですが、機能も面白いですし、開発も旺盛なので、早晩爆発するでしょう。作者さんの日記はこちらです。こうやって日記にリンクを張って飛ぶと、向こうの日記にもリンク元が記録され輪が広がっていきます。面白いですね。
2001-12-20 (Thu) LDAP
_ Java携帯電話
携帯電話上のJavaで、いよいよビジネス利用できるようです。J-Phone機種交換しよう。メモリが多い機種がよい。
_ Jakarta-Struts 1.0
ActionFormのプロパティに配列やCollectinを指定でき、iterateタグで見ることができます。感動です。劇的にJSPが楽になります。ActionFormの書き方を工夫中です。
html:textタグには、indexed属性がないことが判明しました。ドキュメントには書いてありますが、タグ定義には書かれていませんでした。ソースコードにもないので、ドキュメントの勇み足でしょう。nightly buildでは実装されているようです。
そこで、Scriptletをつかって、逃げました。ちょっとコードが入ってしまいましたが、それでもこの威力は凄いです。
2001-12-21 (Fri) Jakarta-Struts 1.0
_ iterateの書き方
昨日書いたように、iterateタグを試行錯誤しました。はまりポイントは2つあって、html:textをiterateする方法と、html:selectの書き方です。このように書きます:
===== JSP =====
<html:form action="foo">
<% int i = 0; %>
<logic:iterate id="element" name="autoCollectResultForm"
property="urls" indexId="index" scope="request">
<TR>
<TD height="20" width="17%" valign="top" class="text" nowrap>
<bean:write name="autoCollectResultForm" property='<%= "urls[" + i + "]" %>'/>
</TD>
<TD height="20" width="18%" valign="top">
<html:textarea cols="16" rows="3" name="autoCollectResultForm" property='<%= "comments[" + i + "]" %>'/>
</TD>
<TD height="20" width="18%" valign="top">
<html:select name="autoCollectResultForm" property='<%= "keys[" + i + "]" %>'>
<html:options name="autoCollectResultForm" labelProperty="keyNames" property="keyIds"/>
</html:select>
</TD>
</TR>
<% i++; %>
</logic:iterate>
</html:form>
===== ActionFormのプロパティ =====
private String urls[];
private String comments[];
private String keyIds[];
private String keyNames[];
private String keys[];
こんな感じです。1.0では、iをScriptletにしなければいけませんが、次バージョンでは改善されているようです。
で、なぜか真っ黒になってしまいますね。HTMLではきちんと書かれているので、CSSの設定でしょうか。とりあえずこのまま載せておきます。ご覧になりたい方はHTMLソースを見てください。
ここではXMLなどプログラム上のタグを多用したいのですが、HTMLタグと誤認識されてうまくいきません。なので、「iterateタグ」などと書いているわけです。この日記でのうまいタグの書き方はないのでしょうか。
2001-12-22 (Sat)
_ tDiary 1.3.1へアップグレード
昨日の日記でタグの書き方が分かりませんでしたが、ご指摘いただき修正しました。とりあえずアンド記号を使ってタグを展開することで、表示できるようになりました。ツッコミありがとうございます。
なんでも、tDiary1.3.1からは、プラグイン機能を使ってタグを直接書くことができるそうなので、早速アップグレードしました。が、プラグインの使い方がまだ分かっていません。こりゃRubyを勉強しなきゃいけないかな。
2001-12-25 (Tue)
_ tDiary Plugin
ただただしさんのMary日記で、ソース表示用プラグインが載ってました。ありがとうございます。早速テスト:
<?xml version="1.0"?>
<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
<map:pipelines>
<map:pipeline>
<map:match pattern="">
<map:redirect-to session="true" uri="menu"/>
</map:match>
<!-- ================= -->
<!-- Simple login page -->
<!-- ================= -->
<map:match pattern="login">
<map:generate src="docs/login.xml"/>
<map:transform src="stylesheets/simple-page2html.xsl"/>
<map:serialize/>
</map:match>
<!-- ========================================= -->
<!-- Form target which performs auth service -->
<!-- ========================================= -->
<map:match pattern="do-login">
<!-- first validate whether submitted values are ok -->
<map:act type="form-validator">
<map:parameter name="descriptor" value="context://mingol/db/loginParams.xml"/>
<map:parameter name="validate" value="username,password"/>
<!-- now try to log in -->
<map:act type="db-authenticator">
<map:parameter name="descriptor" value="context://mingol/db/auth.xml"/>
<!-- now go to protected area -->
<map:redirect-to session="true" uri="protected"/>
</map:act>
</map:act>
<!-- something was wrong, try it again -->
<map:redirect-to uri="login"/>
</map:match>
<!-- ================ -->
<!-- Protected area -->
<!-- ================ -->
<map:match pattern="protected">
<!-- first validate whether user has logged in -->
<map:act type="session-validator">
<map:parameter name="descriptor" value="context://mingol/db/loginParams.xml"/>
<map:parameter name="validate" value="username,password"/>
<!-- generate protected content -->
<map:generate src="docs/protected/menu.xml"/>
<map:transform src="stylesheets/simple-page2html.xsl"/>
<map:serialize/>
</map:act>
<!-- something was wrong, redirect to login page -->
<map:redirect-to uri="login"/>
</map:match>
<map:match pattern="protected-*">
<!-- first validate whether user has logged in -->
<map:act type="session-validator">
<map:parameter name="descriptor" value="context://mingol/db/loginParams.xml"/>
<map:parameter name="validate" value="username,password"/>
<!-- generate protected content -->
<map:act set="score">
<map:parameter name="descriptor" value="context://mingol/db/score.xml"/>
<map:generate src="docs/protected/menu.xml"/>
<map:transform src="stylesheets/simple-page2html.xsl"/>
<map:serialize/>
</map:act>
<map:generate type="serverpages" src="docs/protected/{../1}.xsp"/>
<map:transform src="stylesheets/simple-page2html.xsl"/>
<map:serialize/>
</map:act>
<!-- something was wrong, redirect to login page -->
<map:redirect-to uri="login"/>
</map:match>
<map:match pattern="hello">
<map:generate src="docs/hello.xml"/>
<map:transform src="stylesheets/simple-page2html.xsl"/>
<map:serialize/>
</map:match>
<map:match pattern="addAccount">
<map:act set="account">
<map:parameter name="descriptor" value="context://mingol/db/account.xml"/>
<map:generate src="docs/menu.xml"/>
<map:transform src="stylesheets/simple-page2html.xsl"/>
<map:serialize/>
</map:act>
<map:generate type="serverpages" src="docs/addAccount.xsp"/>
<map:transform src="stylesheets/simple-page2html.xsl"/>
<map:serialize/>
</map:match>
</map:pipeline>
</map:pipelines>
</map:sitemap>
素晴らしい、うまくいきました。
こうしてRubyにお世話になっているので、Ruby人口が増えるのに協力しますよ。
2001-12-26 (Wed)
_ Cocoon2のインストール
Cocoon2はβ版の早い時期から利用していたのですが、正式リリースもされて環境も変わりましたのでメモを残します。
環境は、Kondara 2.0 + Sun JDK 1.3.1_01 + Tomcat 4.0.1 + Cocoon 2.0 です。Tomcatまでインストール完了したものとします。
はまりポイントは、Xの設定です。というのも、Sun's JDKの仕様で、AWTパッケージがネイティブの描画メソッドをコールします。そのため、Cocoonを使う際描画を利用しなくても、AWTを利用するため、Xが必要となってしまいます。
これを回避するには:
- Xを使う
- X Windowを起動した環境で利用する
- Virtual Xを利用する
- 別のAWTを利用する
- JDK 1.4を利用する
- フリーのAWTを利用する
_ とする方法があります。
最も簡単なのは、自然にX Windowを利用してしまうことです。しかし、サーバーマシンとしての利用するのにわざわざXを立ち上げるのは嫌ですよね。そんな場合に、仮想Xを利用して、Xがあることにすることができます。Xbvfが有名です(スペルがちょっとちがうかもしれない)。設定がちょっと面倒です。
別のアプローチで、ネイティブコールのないAWTを使う方法があります。JDK 1.4ではこの点が改善されています。しかし、まだβ3で、そのままでは別のエラーが起こってCocoonは動作しません。
そこで、フリーのAWT実装を利用します。
_ PJA Toolkitのインストール
Sun以外のAWT実装もいろいろあるのでしょうが、フリーでは、PJA Toolkitが有名ですので、インストールしましょう。
ダウンロードしたなかのlib/に3つのjarファイルがあるので、これを展開します。展開先は、$JAVA_HOME/jre/classes/です。jarファイルをそのまま置くのではなく、中身のクラスファイルを直接置くのがミソです。よって、$JAVA_HOME/jre/classes/com/....にいろんなクラスファイルが置かれます。
あとは、catalina起動時に環境変数をセットします。
export CATALINA_OPTS='-Dawt.toolkit=com.eteks.awt.PJAToolkit \ -Djava.awt.graphicsenv=com.eteks.java2d.PJAGraphicsEnvironment \ -Djava.awt.fonts=/usr/local/jdk/jre/lib/fonts/'
_ を、$CATALINA_HOME/bin/startup.shに追加すればよいでしょう。
これで、cocoon.warをwebappに入れてtomcatを起動すればOKです。
_ みずみず [Cocoonはペアマッチのやつね(^^)データ入力をするのにもう少し簡単な方法があればうれしいんだけどなぁ〜。作れな..]
_ ばろ [つ…つっこめない…(^^; JDKって1.4にアップするんだ。 1.3で勉強したけど、ブラウザ上で動かないから 泣く..]
_ はんばあぐ [JDK1.4はまだβですので特別使う必要はないです。 アプレットを動かすには、ブラウザにJavanのプラグインを入れ..]
_ はんばあぐ [Cocoon2インストールの続きを<a href"./?date=20020128">ここ</a>に書きました。]
_ はんばあぐ [Cocoon2インストールの続きを<a href="./?date=20020128">ここ</a>に書きました。]
2001-12-27 (Thu)
_ tDiary update
tDiary 1.3.2へアップデートしました。そのまま上書きでOKです。
_ 訓 野次馬根性
野次馬根性というか戦闘種族の血が騒ぐというか、そういうのをもっと発揮せねば。火の立つところは、力の見せ所&金のにおいがするので。
2001-12-28 (Fri)
_ JBuilder5でTomcat 4.0.1を使う
JBuilder5にはもともとTomcat3.2が入っていて、それをIDE内で使用できます。しかしTomcatの最新リリースは4.0.1なのでそれを利用したくなります。
JBuilder5には、インストールされたサーバーを自動認識する機能があるのですが、Tomcat4.0.1はそのままでは利用することが出来ません。その設定の仕方をここに書きます。
まず、Tomcat4.0.1をDLします。インストーラのついたexe版ではなくて、ファイルそのものをDLするとよいでしょう。
JBuilder5をインストールしたディレクトリ($JBUILDER5)に、DLした書庫を展開します。
これで、JBuilder5を起動すると、[プロジェクト]-[プロジェクトプロパティ]-[サーバー]のプルダウンで、Tomcat4.0が新たに認識されているのが分かります。このまま切り替えても、エラーがでてうまく動作しませんので、次のようにパスの設定をします。
[ツール]-[ライブラリの設定]で、ライブラリを新規作成します。Tomcat4.0.1 Servletとでも命名しましょう。次の4つのクラスを追加します。この順序通り追加してください。$CATALINAはTomcat4.0.1をインストールしたディレクトリです。
$CATALINA\common\lib\servlet.jar
$CATALINA\lib\jasper-compiler.jar
$CATALINA\lib\jasper-runtime.jar
$CATALINA\common\lib\xerces.jar
です。
後は、プロジェクトプロパティにこのライブラリを追加し、サーバーを切り替えればOKです。
2001-12-30 (Sun)
_ CVSの本
・入門CVS 大月美佳 秀和システム
いろいろ書いてあって便利なのですが、惜しむらくは文章にまとまりがないため読みにくい点です。入門にはこれ一冊でよいでしょう。
・CVS -バージョン管理システム- Karl Fogel著 でびあんぐ監訳 オーム社
読み応えのある本です。CVSの解説も丁寧で、マージなどCVSの奥深さを学べます。オープンソースの解説もとても面白いです。
_ CVSによるWebの自動更新
WebコンテンツをCVSで管理したくなりますが、CVSが更新された際に、公開されている作業ファイルも自動的に更新されると便利ですね。その仕掛けを作ります。以下、「入門CVS」を参考にしましたので、詳細はそちらをご覧下さい。一つ注意がありますので、末尾に書きました。
まず、WebコンテンツをCVSのリポジトリ(webrep)として登録します。WWWに公開するディレクトリは~/public_htmlだとします。
まず、公開するためのリソース(作業ファイル)を配置(checkout)しましょう。
$ cd ~/public_html
$ cvs checkout webrep
このリポジトリが更新された際に、Webコンテンツを更新するには、
$ cd ~/public_html/webrep
$ cvs update -d -P
すればよいわけです。この更新作業を自動化します。
まず、2つスクリプトを用意します。以下、$CVSROOTと$HOMEは自分の環境に合わせて書き直してください。
========= auto_update.pl ========== #!/usr/bin/perl # cvs path $cvs = '/usr/bin/cvs'; $usage = "usage: auto_update.pl WORKDIR [MODE]"; # process arguments die $usage, "\n" unless $workdir = $ARGV[0]; $chmod = $ARGV[1] ? "; chmod -R $ARGV[1]" : ""; # main update process which must be executed in background. $cmd = "(cd $workdir; $cvs -q update $chmod) &"; system($cmd); # last message. $date = `date`; chomp($date); $mesg = "$workdir automatically updated at $date"; print "$mesg\n"; =============================== ========== update.sh ========== #!/bin/sh $CVSROOT/CVSROOT/auto_update.pl $HOME/public_html/webrep ===============================
_ auto_update.plは、CVSROOT/に保存し、CVS自身が管理できるようにします。CVSROOT/checkoutlistにも設定するとよいでしょう。
update.shは、~/public_html/bin/に置きます。2つのファイルとも、実行権に注意しましょう。
処理の流れは次のようになります:
cvsにcommitする→update.sh→auto_update.pl→cvs update。
cvsにcommitした時にトリガとなるコマンドは、CVSROOT/modulesに書けます。update.shを緩衝させたのは、modulesファイルの中では引数を渡せないからです。
ここに、
webrep -i $HOME/public_html/bin/update.sh webrep
と書きます。トリガされるモジュール名はwebrepで、また、-iオプションでcommitでトリガされることを示します。
注意:update.sh内の引数で、モジュール名まで含めていることに注意してください。そうしないと、CVSが管理しているモジュール全てが展開されてしまいます。
Debian links:スレッドテンプレ, Debian Quality Assurance, Debian Package Tracking System
written by はんばあぐ

_ みずみず [おめでと。 これからもがんばれ。 素材屋にいつアップできるかな?]