Info

Archive for

すげ~悩んだ。
環境:
Tomcat: 4.1.36
JDK: 1.4.12

普通にStrutsを使ったJavaウェブアプリケーションである。ライブラリパス、コンパイルが済んだあとTomcatを起動すると以下ようなエラーが発生。

2008/02/27 14:27:16 org.apache.commons.digester.Digester error
致命的: Parse Error at line 6 column 19: Document is invalid: no grammar found.
org.xml.sax.SAXParseException: Document is invalid: no grammar found.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.handleStartElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$ContentDispatcher.scanRootElementHook(Unknown Source)

line6 column 19 ? web.xml , *.tld などのファイルをいくら探してもそういったコードが見つからない。どこがダメだろう?Googleに聞いても答えが出なかった。同じ質問は結構あったが、回答がなかった。

試しにTomcat5にしたらうまく行ったが、事情によりTomcat4しか使えない状態なんで、Tomcatのバージョンアップは無理。いろいろ調べてるうちに、目に見えたのが WEB-INF/lib の下にある standard.jar と jstl.jarである。プロジェクトのコードを探ってみてもJSTLを使ってるところが見つからない。前の開発者が追加したjarと思われるが実際使われてない!ある意味ではゴミなので、削除。Tomcat再起動してみたらエラーが消えた!

結論としては Tomcat4 ではJSTLを使えないということになる?

Advertisements

Perlの gethostbyaddr は遅くて使い物にならない!2000個ぐらいのIPアドレスをホスト名変換するのに5時間以上もかかる。はじめはネットワークか、DNSサーバーのせいかと思ったが、nslookup で試したところ gethostbyaddr よりずっと早かった。ということはやっぱり gethostbyaddr の問題と推定できる。自力でnslookupの情報からホスト名を取り出すのもよいだが、CPANのライブラリを使うとずっと簡単だと思う。

1.ライブラリダウンロード
http://search.cpan.org/~olaf/Net-DNS-0.63/lib/Net/DNS.pmから Net-DNS-0.63.tar.gz ダウンロード。

2.インストール
インストールというよりは設置ですね。Perlのライブラリパスにダウンロードしたものをコピーする。

3.コード

#!/usr/bin/env perl
use strict;
use Net::DNS;
use vars qw/ $myRes $query $rr $host /;

$myRes = Net::DNS::Resolver->new;

sub myLookup($){
    $query = $myRes->search($_[0], 'PTR');
    if (!$query) {
        return "?";
    }
    foreach $rr ($query->answer) {
        if ($rr->type eq "PTR") {
            return $rr->ptrdname;
        }
    }
}

$host = &myLookup("72.14.207.99");
print $host;

5時間もかかる処理が30分以内で終わった。興奮!興奮!

新年会が終わって撮った写真をFriendsと共有しようと思ってRailsで作ってみました、機能としては問題なかったが、デジカで撮った写真をそのままのサイズでアップロードして一覧に表示してしまうとメモリ不足でPCが死んじゃいます。ちなみに画像は平均1.4MB、一ページ9枚表示。

50何枚もある写真を一つずつ開いてサイズを修正するのも可能ですが、時間の無駄、絶対やりたくない!そこでRubyになんかイメージファイルを操作するライブラリがないかと探してみたところ、RMagickを発見。書いてあるソースコードみると自分がやりたいことに合ってたので早速試しようと思った。

環境:Fedora8, Ruby 1.8

# yum install ImageMagick
# yum install ImageMagick-devel
# gem install RMagick

ここでエラーです。(ERROR: could not find RMagick locally or in a repository)
gemにないの?と思ってほかの方法でインストールしようと思ったが、もしかして

# gem install rmagick
Building native extensions. This could take a while…
Successfully installed rmagick-2.2.0
1 gem installed

成功したようです。

#!/usr/bin/ruby
require ‘rubygems’
require ‘RMagick’
img = Magick::ImageList.new(‘test.jpg’)
img.resize(200, 200).write(‘new.jpg’)

お~小さい画像が出てきました!感動!
もうすこし勉強して、元画像のサイズと比例にある画像を作ること。