メモの日々


2008年11月07日(金) [長年日記]

  • やーーっと実装終わりそう。しかしまだ色々動かないなあ。

[howto][dev] svn mergeの代わりにsvn diffを使う

Subversionで、以前にコミットした内容(複数ファイルを変更)の一部を取り消そうとして svn merge コマンドを使ったら、

% svn merge -r 575:574 src/xxx/yyy/zzz/Nantoka.java
svn: REPORT リクエスト (相手: '/svn/aaa/bbb/!svn/vcc/default') が失敗しました
svn: Cannot replace a directory from within

のようなエラーになってしまった。エラーの意味が分からない。

svn diff は実行できたので、

% svn diff -r 575:574 src/xxx/yyy/zzz/Nantoka.java  | patch -p0

としてやりたいことは実行できた。

あと、以前のメモによれば

% svn cat -r 574 src/xxx/yyy/zzz/Nantoka.java > src/xxx/yyy/zzz/Nantoka.java

でもよかった。でもこれはmergeの代わりにはならないか。

(追記)

ふと思いついて、

% cd src/xxx/yyy/zzz
% svn merge -r 575:574 Nantoka.java

のようにしたら svn merge が実行できた。ふーむ。

[book] 償い (矢口敦子)

償い(矢口敦子/著) 読んだ。医師から落ちぶれたホームレスの男が殺人事件に首を突っ込む話。面白く読んだけど、今思うとたいしたことないかも。3点。

やること

  • 歯ブラシ
  • 防虫カバー
  • 毛布

2008年11月20日(木) [長年日記]

  • すぐに目が乾く。なんでや。
  • Java DBの検索が異常に遅くて困っていたが、インデックスを追加したら速くなったみたい。普通だ。

[java][db] Java DBのマニュアル

Java DBを使っている。マニュアルに関してメモ。

JDK 1.6をインストールするとJava DBもインストールされ(Windowsだと C:\Program Files\Sun 配下に)、そこにマニュアルが含まれている。が、結局それはApache Derbyのマニュアルなので、Derbyのドキュメント を見ても同じだ。Derbyのサイトでは翻訳されたものを見れるのでこちらの方がよい。ただし、翻訳されていないドキュメントの方が多い。

それから、Derbyは元々Cloudscapeというソフトウェアだったようで、その Cloudscapeのドキュメント をIBMのサイトで見ることができる。こちらはすべて日本語に訳されているようでありがたい。しかしCloudscapeのサポートは既に終了しているようなので、このドキュメントもそのうち見られなくなってしまいそう。

[java][db] Java DBにログを出力させる

Java DBのサーバプロセスがログを出力するようにする設定をメモ。

derby.properties

Java DBの設定は、derby.propertiesというファイルを作成してその中に記述すればよい。このファイルはデータベースファイルが作られるディレクトリに配置しておく。

設定項目

derby.properties に設定できる項目は、「Tuning Derby」というドキュメント内に載っていた。

実行SQLのログ出力

設定項目の中の、derby.language.logStatementText を true に設定したら Java DB のサーバプロセスが実行したSQLがログファイルに出力されるようになった。

クエリープランのログ出力

derby.language.logQueryPlan を true に設定したら、「query plan information」もログに出力されるようになった。日本語で出力されるが解読の仕方はよく分からない。

derby.drda.traceAll はダメ

「Derby Server and Administration Guide」というドキュメントに derby.drda.traceAll というパラメータが載っていたので何が起こるのか試してみたが、これを設定するとwrite権限エラーになってしまいJava DB自体が動かなくなってしまった。よくわからない。

やること

  • 歯ブラシ
  • 防虫カバー
  • 毛布
  • お香典

2008年11月25日(火) [長年日記]

  • 連休中ゴロゴロしていたら、なんだか腰が痛い。なぜだ。
  • frkwくんはペンギンに詳しい。

[java] Integer.valueOf(int i) を好め

Integer zero = new Integer(0);

のようなコードを書いていたらFindBugsに次のように注意されたのでメモ。

new Integer(int)の呼び出しは、常に新たなオブジェクトが生成されます。これに対してInteger.valueOf(int)は、コンパイラ、クラスライブラリ、JVMによってキャッシュすることが可能です。キャッシュを使用することによって、余計なオブジェクトの生成を防ぎ、コードの実行効率を改善できます。

Effective Javaの最初の項目に書いてある話だな。

Boolean.valueOf(boolean b) はバージョン1.4で追加され、Integer.valueOf(int i) は1.5で入ったみたい。なんで時間差があるんだろう。

Effective Javaの第2版発売日は明後日か。買わないと。

[java][db] Java DB の RUNTIMESTATISTICS を参照する

設定ファイルにderby.language.logQueryPlanを設定するとクエリープランをログファイルに出力できたが、SQLだけを使ってクエリープランを取得することもできたのでメモ。

Tuning Derbyというドキュメント内の How you use the RUNTIMESTATISTICS attribute にある通りだが、

CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1);
CALL SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING(1);
MaximumDisplayWidth 10000;

とした後で(MaximumDisplayWidthは5000だと入りきらなかったので10000にした)任意のSELECT文を実行し、続けて

VALUES SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS();

を実行すると logQueryPlan を設定した場合と同じような(完全に同じかどうかは未確認)結果が出力された。

[service] 新しいはてなブックマークがイマイチ

はてなブックマーク が新しくなったみたいなんだけど、以前よりJavaScriptを積極的に使っていて操作が分かりにくくなった。慣れれば大丈夫なのだろうけれど。

ただ、ブックマークを追加するための新しいブックマークレットが、ブックマーク対象サイトでJavaScriptをオフにしていると動かないようなのが困る。ああ、既に指摘されているのか。改善されるといいけど。

それから、ブックマーク編集画面を簡単に開く方法が分からない。一応、http://b.hatena.ne.jp/ でのJavaScriptをオフにすると「ブックマークを編集する」というリンクが現れてそこをクリックすれば開けた。JavaScriptオンだとリンクが見当たらないんだがおれだけなのか。

あと、「デザインの変更」機能も動かない。NoScriptのせいだろうなあ。デザインは変更しなくてもいいからあまり困ってないけれど。

タグ名を置換できるようになっていたのはありがたい。これは以前からできていたのかも。

(追記)

新しいブックマークレットにはセキュリティ上の問題があるとの指摘があった。

なるほど。はてな製ということで安直にパスワードを入力してしまった。「ブックマーク対象サイトでJavaScriptをオフにしていると動かない」という時点で何かおかしいと気付くべきだった。

この指摘を受けてか、はてブの ブックマークレットのセットアップページ の一番下に、古いブックマークレットへのリンクが追加されていた(ログインしないと見られない)。

やること

  • お香典
  • 洗顔
  • O2ケア

2008年11月27日(木) [長年日記]

  • 腰が痛いのはもう治った。

[shell][unix][howto] シェルスクリプトファイル自身の格納ディレクトリの絶対パスを得る

毎回同じことを調べている。

#!/bin/sh
cd `dirname $0`
d=`pwd`
echo $d

で大体うまくいくが、パス中にシンボリックリンクがあったりファイル自身がシンボリックリンクだと、リンク先ファイルとは異なる絶対パスが得られてしまい困ることがある。格納ディレクトリからの相対パスで別のファイルを探したい時とか。

これを解決する簡単でポータブルな方法はなさそうだが、最近のLinuxだと readlink というコマンドがあるようで、これを使うと簡単に絶対パスを取得できた。

readlink は -f オプションを使うと

% ln -s /usr/bin/gcc link
% readlink -f link
/usr/bin/gcc
% readlink -f /usr/bin/gcc
/usr/bin/gcc

のようにリンクがあろうとなかろうと絶対パスを出力してくれるようなので、

#!/bin/sh
my_path=`readlink -f $0`
cd `dirname $my_path`
d=`pwd`
echo $d

のようにすればよさそう。

(追記)

今見ると上のスクリプトはおかしい。readlinkが絶対パスを出力してくれるならcdやpwdをする必要はなくて

#!/bin/sh
my_path=`readlink -f $0`
d=`dirname $my_path`
echo $d

でいいはず。

(追記2)

少なくともbashでは、スクリプト起動直後の $_ にコマンドの絶対パスが設定されていることを知った。

ただし、readlinkのようにシンボリックリンクを辿ってはくれない。また、$_ に絶対パスが設定されているのはスクリプトの起動直後だけだということに注意が必要。

$ cat myname.sh
#!/bin/bash
echo '  $_      :' $_
echo '  $0      :' $0
echo '  readlink:' `readlink -f $0`
echo aaa > /dev/null
echo '  $_      :' $_

$ ln -s myname.sh oreore.sh

$ ./myname.sh
  $_      : /home/kenichi/tmp/./myname.sh
  $0      : ./myname.sh
  readlink: /home/kenichi/tmp/myname.sh
  $_      : aaa

$ ./oreore.sh
  $_      : /home/kenichi/tmp/./oreore.sh
  $0      : ./oreore.sh
  readlink: /home/kenichi/tmp/myname.sh
  $_      : aaa

[shell][unix][howto] パイプの途中で行を追加する

パイプを使ってテキストを変換していくとき、途中で新しい行を追加したくなった。が、やり方をなかなか思いつかない。

awkのENDを使えばできた。

% echo "ore\nboku" | sort | awk '{print} END {print "omae"}'
boku
ore
omae

awk便利だな。awk使うならパイプ使わず全部awkで処理すればいいじゃない、それならperlでもいいじゃんか、という話になる。うーむ。

ところで、「man awk」だと英語のマニュアルが表示されるが「man gawk」とすると日本語訳(左はリンク切れ。こっちへ移行したみたい。)を読めることに気づいた。

[ruby] JRubyが実行できなかった

JRubyを使おうとここからダウンロードして展開したが、

% jruby
Exception in thread "main" java.lang.NoClassDefFoundError: org/jruby/Main
Caused by: java.lang.ClassNotFoundException: org.jruby.Main
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

のようになり実行できなかった。

色々調べた結果、libディレクトリにあるべき jruby.jar というファイルが無いのが原因の模様。何故無いのか。

その原因は、おれのダウンロードしたファイルが jruby-src-1.1.5.tar.gz だったため。これだと、srcなので自分でビルドしないといけないみたい。jruby-bin-1.1.5.tar.gz というファイルをダウンロードし直したら、libに jruby.jar が存在し普通に実行できた。

配布ディレクトリにファイルが多すぎて、どれをダウンロードすればいいのかが分かりにくいのだ。気を付けろ。

やること

  • お香典
  • 洗顔
  • O2ケア
  • 5000円
本日のツッコミ(全2件) [ツッコミを入れる]

tito [行を追加ですが別解で echo hoge | ( cat -; echo fuga ) の方が軽いと思います。]

小川 [なるほど、このようにする方がよさそうです。ありがとうございます。 これはbashのマニュアルに「Compound C..]


2008年11月30日(日) [長年日記]

[life] 祖母の一周忌

祖母が亡くなってからもう一年経った。早い。

10時前に実家へ着き、20分後くらいにお寺へ出発。が、車に乗るとき母がドアに手を挟んでしまう。大丈夫そうなのでそのまま出発したが、途中でやっぱり引き返し家で少しアイシングをした。時間がないのですぐに再出発。幸い、その後腫れることもなく平気そうだった。

遅れてお寺に着いたが開始時間はまだ先。親戚一同の中に座ってお茶を飲んだりした。

11時頃にお経が始まる。お経が始まると大きな黒い犬が部屋に入ってきてお坊さんの傍まできて横になった。お坊さんは気にする様子もない。犬はそのままずっとおとなしくしており、しばらく経った後で起き上がり、自分で引き戸を開けて出て行った。後で聞く所によると、その犬はお経が好きでお経が始まるといつも来るらしい。49日のときにはいなかったけど。

その後お墓でお線香をあげた。とても暖かい。そして食事。食べ終わってから、遺影の前に置いていた膳を食べるのを忘れていたという話になり、おれが刺身と天ぷらを食べさせられた。満腹だー。それで解散。

帰りにEffective Java 第2版を買った。

やること

  • お香典
  • 5000円
  • 請書
  • スポンジ