2008年1月25日金曜日

文字とコードポイント

すごい限定的な状況かもしれませんが、
たまにこの文字のコードポイントは何だっけ、とか
そういうことありますよね?

そういう時にどうやってコードポイントを調べるかが問題です。
ネットで調べたりIMEの文字一覧で調べたりと
すごく面倒くさいです。

自分の場合はAlphaというテキストエディタを使って調べてます。
このソフトの

編集>高度な操作>文字をコードポイントに変換 (Shift + Alt + x)

で、簡単にコードポイントを知ることが出来ます。
逆に、コードポイントから文字を出す(Alt + x)ことも可能です。
調べたい文字を入力・選択してShift+Alt+xでコードポイントがわかるので結構重宝してます。

ちなみにこのソフトでBMP外の文字も変換可能です。
拡張漢字Bに収録されているものでも、そのコードポイント(U+xxxxxのxxxxxの部分)を入力・選択して
Alt+xで変換できます。すごい簡単です。ただ、ちゃんとフォントを設定しないと表示されませんが。

他にもウィンドウ分割とか色々と面白い機能があるので一度試してみてはどうですかね。

2008年1月24日木曜日

javascript - createTextNodeで文字参照を使う

javascriptのDOM操作でHTMLの編集をする際
テキストを入れたい時

node.innerHTML = string;

で追加するのもいいが、色々と問題が出てきたから

document.createTextNode(string)

でテキストノードを追加したいってことがあるかもしれない。
ここで文字列stringで&や亙などの文字実体参照 (Character entity reference)や数値文字参照 (Numeric character reference)を使いたいってことがあります。たまに。
しかし、普通に

var string = "&";
var txtnode = document.createTextNode(string);

とやって出力しても

& (ソースでは:&)

と出てきて、本来欲しかった

& (ソースでは:&)

が出てくれません。自動的にエスケープされてしまいます。
これはこれで便利なんですがこれでは文字参照が使えません。
で、色々やってみたのですが
prototype.jsのunescapeHTML()を使えば多分いけます。
つまり

var string = "&";
var txtnode = document.createTextNode(string.unescapeHTML());

とやれば

&

が出てきました。出てくるはず。
後でprototype.jsのunescapeHTML辺りを確認しておこう。
こんなんでいいのかよく分からないなぁ。

・・・本来ならcreateEntityReferenceとかString.fromCharCodeで生成する気がしますが。
文字参照を含む文字列を一度に入れたいときには便利だと思います。


適当に追記
prototype.jsのunescapeHTMLって中でinnerHTML使ってたんですね。
うーん。素直にinnerHTMLで書いたほうがいいかも。

2008年1月17日木曜日

Tomcat 6.x によるCGIの実行について

PerlやRubyなどのスクリプトをCGIで実行するには
Apache等のサーバの設定を書き換えればできます。
Apacheならhttpd.confでコメントアウトされてる部分のコメントを取り除けば
普通に実行できます。その辺の細かいことは他に資料が沢山あるので別にいいでしょう。

Tomcatにも簡易Webサーバの機能があるのですが、TomcatのWebサーバだけでもCGIを実行することが出来ます。

$CATALINA_HOME/conf/web.xmlを開いて($CATALINA_HOMEはtomcatを入れた所です)

<servlet>
<servlet-name>cgi</servlet-name>
長いので省略

この部分と

<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>

この部分がコメントアウトされているのでコメントを除去します。

ここで、web.xmlのコメントでは
$CATALINA_HOME/server/lib/servlets-cgi.renametojar

$CATALINA_HOME/server/lib/servlets-cgi.jar
にファイル名を変えろといってます。
Tomcat5.xまではこの/server/lib/があったのですが
Tomcat6.xでは/server/lib/が見当たりません。

このservlets-cgi.jarは6.xでは
$CATALINA_HOME/lib/catalina.jar
に入っています。
jarをzipに変えて中を見てみると
org/apache/catalina/servlets
の中にCGIServlet.classがあるのが分かります。

じゃあweb.xmlを書き換えるだけでCGI使えるじゃない。
・・・と思ったら使えない。
catalinaのログファイルを見てみると

java.lang.SecurityException: クラス org.apache.catalina.servlets.CGIServlet のサーブレットは特権を与えられているので、このWebアプリケーションによってロードできません

とか言われてます。何のことやらさっぱりです。

で、色々見て回った結果、context.xmlのContext要素に
privileged="true"
を付け加えればいけるみたいです。

これで多分Tomcat単体のWebサーバでCGIが実行できるようになるはず。
後でprivileged属性の意味とか調べておこう。

まあTomcatでCGIを実行する機会なんてそうないですが。
ほとんどはApacheとTomcatを繋いで使うと思いますし
JSPとCGIを併用なんてしないと思うので
これが役に立つことはあまりないですがせっかくなので書いておこう。

2/12追記
どうやらWebアプリケーションがサーブレットコンテナを使うためにはContext要素のprivileged属性をtrueにする必要があるみたい。…すごい基本的なことですね。

まぁ色々セキュリティ上の問題があるかもしれませんが、その辺は適当にやってください。

2008年1月16日水曜日

ActivePerlのDBD-Pgに関して

色々と躓いた事柄についてメモ的なものを適当に書いていこうかと思います。自分のために。

ActivePerlのDBD-Pgのインスコに関するメモ

http://pgfoundry.org/frs/?group_id=1000199&release_id=589
この辺りからDBD-Pg-5.8(5.6).ppdを落として適当なフォルダにぶち込む。
DBD-Pg-1.49-5.8s.tar.gzとかのsがついてるのはOpenSSL dllも一緒についてくるらしい。

それでコマンドラインから
>ppm install DBD-Pg-5.8.ppd
でインスコされる。
ppdの中にDBD-Pg-1.49-5.8(5.6).tar.gzのURLがあるので
DBD-Pg-1.49-5.8(5.6).tar.gzは直接落とさなくてもいいのかな。

ActivePerlのppm Manager(GUI)の一覧ではDBD-Pgがないのでめんどいですね。(2008-1-16現在)
ちなみに、このppm Managerはユーザのホームディレクトリ以下に設定ファイルかログかよくわからんが、何らかのファイルを作成するみたいです。
色々見てみたら
C:/Documents and Settings/{user_name}/Local Settings/Temp
にActivePerlInstall.logとかppm4.logなどのログが作成されるので
パスに2バイト文字、つまりユーザ名に日本語とか使ってると多分起動しないので注意が必要です。

一番躓いたことは
ActivePerl5.10では
>ppm install DBD-Pg-5.8.ppd
The PPD does not provide code to install for this platform
って蹴られてインスコできない。
PostgreSQLとActivePerlでDBD-Pgを使うならActivePerl5.8辺りを入れておきましょうってことです。