2006-07-01 [長年日記]
_ GNOME発見

まぁだから何って話なんですが。
数年ぶりに草履っていうかサンダルを買った。*1普通の人より足の甲の高さがあるので、最近よく見るホールド性のよさげなサンダルは実はほとんど足に合わない。履いて履けないことはないんだけど、どうにもきつい。
今回は中で唯一甲の部分が広く開いているものがあったのでそれにした。
*1 いやこのブティックで買ったのではないぞ。
_ リフレッシュ済みバッテリ受け取り
バッテリパック以外の一部部品を交換したので、実は新品の方が安いってことになっちゃったんだけど、まぁ古くなったやつを処分しちゃうことを思えば処分代も掛からないし、えせエコロな感じで自己満足。
これから何回か満充電と放電をくり返さなきゃならない。意外と面倒。
2006-07-02 [長年日記]
_ 久しぶりに iTunes でラジオ聞いた
ちょっと勉強するために歌詞のない楽曲が聞きたいなぁと思っていたんだけど、どうも手元のライブラリにはその手のものがない。
つーことで仕方なく日本語で歌詞が入ってて気が散りまくるものを聞いていたんだけど、iTunes の「ソース」のカラムになんか見覚えのある文字がある。SmoothJazz.com ? あー。そうかこれインターネットラジオ聞けるんだった。ということで早速チューニング*1。最近はすっかり podcast だけど、とりあえず流しときたいってときにこの機能はやっぱり便利だなぁ。
*1 実際聞いてたのは smooth jazz じゃなくて Deep House :-P
2006-07-05 [長年日記]
_ ViewCVS の diff を等幅フォントで
個人的には Trac モードになってきてるんだけど、CVS + ViewCVS な環境のためのメモ。
- ViewCVS 0.9.2 は CSS を一切使っていない
- viewcvs.conf に以下のように font タグの設定を行える箇所がある
diff_font_face = diff_font_size =
font face の方に monospace って書けば ok.
monospace にプロポーショナルフォントを割り当てている人がいてもそれは知らん。
2006-07-07 [長年日記]
_ 正規表現で文字列を split すると、できた配列から空の要素が消える
具体的には改行を含むテキストを1行1要素の配列にぶった切ろうと思って以下の処理を行った。
var arr = str.split( /(?:\r\n|[\r\n])/ );
すると以下のように IE というか JScript エンジンだけ(つまり WSH でも同じ)できあがった配列から空の要素が消え、空行がなかったことになってしまう。
| エンジン | 空要素 |
| JScript 5.6 | 消える |
| Firefox 1.5.4 | 消えない |
| Safari 1.3 | 消えない |
| Opera 8.5 | 消えない |
これは正規表現をシンプルにしても同じ。
var arr = str.split( /\n/ );
ただし、文字列で split すると JScript でも空要素は消えない。
var arr = str.split( "\n" );
それなんて「仕様」?
document.write() の連発がださいけど下のスクリプトをコピペして開いてもらうと確認できる。IE では 6 と表示されるが、IE 以外では 7 と表示される*1。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>Test of split with RegExp</title>
</head>
<body>
<h1>Test of split with RegExp</h1>
<script type="text/javascript"><!--
document.open();
var str = "wedjweo\nweoidjwe\nweiodjw\n\nweid\nwoeid\nweoij";
var arr = str.split( /(?:\r\n|[\r\n])/ );
document.write( '<pre>' );
document.writeln( '<h2>original text</h2>' );
document.writeln( str );
document.writeln( '<h2>number of array items</h2>' );
document.writeln( arr.length );
document.writeln( '<h2>splitted array</h2>' );
document.writeln( arr );
document.writeln( '<h2>rebuilded text</h2>' );
document.write( arr.join( "\n" ) );
document.writeln( '</pre>' );
document.close();
// -->
</script>
<p>
If you use split with RegExp,
JScript engine automatically remove array's empty item :-(
</p>
</body>
</html>
*1 MacIE 5 では正規表現の (?: の書き方に対応してないのでどのみち動きません。
2006-07-10 [長年日記]
_ 楽々ERDレッスンを読んでいる
最近のはぶにっきが話題になっていたので惹かれて読んでみている。ああいう切れ味鋭い語り口の人の本は、読んでいて気持ちよくなるか頭にくるかどちらかだというのは分かっているので、安心して読める。(あんまり読書そのものが得意じゃないので、どう転ぶか分からない本を読むのは好きじゃないのだ。)
まだ半分くらいしか読めていないんだけど、これはかなりすっきりする本なのは間違いない。こちらに DB の基本的な素養が全然ないので突っ込んだ話はかなりの部分が分からないんだけど、それでも「ダメな設計って言うだけなら簡単だよな」と斜に構えた読者(つまりオレだ)にきっちりカウンターをかましてくれる。気持ちいい。
「ダメな設計」って言葉はあちこちで見る。それは設計が腐っているからだよ、と。しかしどこがどう腐っているのかをちゃんと言ってくれているものはあまり見ない。これは DB に限らずプログラミングでもシステムの管理でもなんでもいいんだけど、全般的に「こうするものです」的な話の流れになっている情報というのは「ではこうした場合なぜダメなのか」をあまり掘り下げてくれない印象がある。もちろんそれを掘り下げるのは面倒だし大変なんだってのは分かるんだけど、腐ってるとだけ言われても困っちゃうのも事実なわけだ。しかしこの本はなぜダメなのかが明確になっている。そこがいい。これは、設計のことはよく分からないが目の前にダメだってことだけは分かっている DB があるから、余計に強く感じることなのかもしれないけど。
ただ、3部構成*1の半分くらい読んだところで思うのは、「これ構成後付けじゃね?」って辺り。というか先に対象読者と、それ以前のレベルの人はまずこれとこれを読めと明示しておいてほしかった。付録を見れば参考文献はいっぱい列挙されているのでこの手の本としてはとても嬉しい配慮がされているんだけど、事前に絞った情報を出してくんないと、さすがにこれ全部は買えないし読めないし。
まぁこの本自体は手頃な分量なので、とりあえず第1部と第2部は細かいこと考えずにダダッと読んじゃうのがいいかもしんない。DB のことが分かっている人ならスラスラ読めるだろうし、分からなくても無理矢理ザクザク読んでしまってとりあえずレッスンしてから戻ってきてもいいんじゃないかと思う。少なくとも何が分からないのかさえ分からないレベルでない限りはなんとか読める。あー早くレッスンに入らないと。
気に入ったフレーズを書き出してみる。(ママじゃないよ。)
- 正規化には数学的な意味だけでなく業務の視点からの正規化が大事
- アイデンティファイヤ重要
- 「コード」はユーザーインターフェイスであり、ユーザーの都合、ビジネスの都合によって変更が入るので、これをキーに使ってはいけない。
- 複雑な(例外や運用時ルールの多い)業務のデータ構造は複雑になって当然。データ構造を無理にシンプルにするとプログラムが複雑になるだけ。
- データは(業務ベースでいけば)「その企業のもの」であって、「企業内の特定の誰かのもの」ではない。
- 蓄積することではなく、何らかのレポートを生成することが重要。
- DBMS にも富豪アプローチを。あえて性能を出すためにデータ構造に手を加えるのは分かりにくくなるのでオススメしない。
2006-07-15 追記
レッスン前はとても気持ちよく読めたが、実際のレッスンに入ったらやっぱりさっぱり分からなくなった。おまけに参考書籍にはどうも考え方の参考になる系のものが結構あり、教科書系のものが少ない感じ。うーん。教科書系も当たり外れあるだろうし、その辺が知りたかったんだけど、そういう目的には使えないようだ。
あくまで個人的にだけど、この本を読む前後で何を感じたかを書いておこう。
- DBMS を使えばデータ構造とプログラムの構造を切り離すことができそうで、使いこなせたら圧倒的にプログラムの量を減らせて嬉しいだろうと思っていた予想はたぶん当たっている。
- 第n正規形だの正規化崩しだの、なんだかなぁと思っていたんだけどこの本ではそこら辺は重視しておらず、少し安心した。しかし基礎的な用語が分からないことには変わりないので、何かしら教科書用意しないとなぁ。
- しかしこの本に書かれているように徹底的に業務を洗い出すのはやはり難しいだろうなぁ。何しろ自分たちの行為に無自覚な人間が多いから。まぁでもそれは絶対に無理っていう変更の要素が思い浮かぶようになったら、たぶんそれを避けるノウハウが自分の中に貯まってくるだろう。プログラムもそんな感じだから。
- ちくしょう、教科書で勉強したらもう一回戻ってきてやるぜ。
*1 付録を除いてね
2006-07-11 [長年日記]
_ eclipse の内蔵 CVS って CVS コマンドと互換性ないのか
ssh 経由で繋ぐ際に CVSROOT の指定が
:ext:USER@SERVER:/PATH/TO/REPOS
(プラス環境変数 CVS_RSH)ではなく、
:extssh:USER@SERVER:/PATH/TO/REPOS
になっている。
ということで eclipse の CVS の吐くメッセージの意味が分からないからと言って生で CVS コマンドを叩いても現象を確認できない。げげぼ。*1
また、ホームディレクトリに .cvsignore を置いても環境変数 CVSIGNORE を設定しても eclipse は解釈してくれないようだ。
※ .cvsignore って .cvsignore 自身を無視しないのがデフォルトの挙動だっけ? 使ってないから忘れちゃったなぁ。
*1 ssh 経由じゃなきゃいけそうな気がする。
2006-07-12 [長年日記]
_ EasyEclipse なんてあるんだ
先ごろ 1.0 がリリースされたばかりみたい。
いわゆる WEB+DB 系に特化して言語向けプラグインとデータベース向けプラグインだけ整理してパッケージングしてみましたって感じかな? 手っ取り早くていいんじゃなかろうか。個人的には日本語化には興味ないので、これはいいかもしんない。
Mac版だけ妙に小さいのはなんでだろ?
※ 最近 eclipse の話が増えているのは別に Emacs から乗り換えようとしているわけじゃないです。ただ DB 周りとかいじるときには便利だし、全体像の俯瞰に使ったらそれなりに作業がはかどるとは思ってます。
2006-07-13 [長年日記]
_ やっぱ最近の梅雨は7月だよな
最近、オレが外に出るほんの一瞬に限ってやたら雨足が強くなる。
今日はそれに慌てて走ったらこけてズボンが 1.5cm ほど割けた。
オレが何をした。
こんなに真面目に頑張ってんのによ。
今週はどうも何もかもダメだな。とっとと終われ。
煮詰まってどうでしょうの録画も忘れるしよ。ほんと最悪。つかこれ早くチェックとか自動化しないと。何やってんだオレ。
_ jsUnit 利用時は cache を切れ
そうかそうだよな。testRunner.html をどんだけスーパーリロードしても無意味だよね。ということで Webdeveloper から disable Cache するように > オレ
Safari だとキャッシュを空にするのはワンアクションでできるからいいんだけど、Firefox は奥まったところにあるから、つい億劫になっちゃうんだよねぇ。
2006-07-14 [長年日記]
_ Unix 系 CLI 使いが一時的に Windows を使ううえで必要以上にイライラしないための最低限のバッチ7+1本
いやね、私も「バッチファイル? だっせぇ」と思いました。しかしこのほんのわずかな工夫が心に平和をもたらします。alias があればもうちょっと簡単なんですけどねぇ…。
※ Kanegon's Web Page に alias.exe があり、これを利用することでも似たようなことができます。ただまぁ、あくまで一時的な利用を前提にするのであればこんなもんでもいいかなと思っています。
前提
- これは普段 Windows を使っていない人がふいに Windows に向かうことになった場合の最低限の対策です。
- 普段 Windows を使っているのであれば、Windows の流儀に染まるなり cygwin でゴリゴリ押すなり各自工夫してください。
使い方
以下のバッチファイルの内容を該当する名前のファイルにコピペし、パスの通ったフォルダに置くだけ。コマンドラインオプションはもっと本格的に解釈してもいいんでしょうが、自分が困らなければいいという程度のものなので、凝ったことは何もしてません。右から左へほとんどスルーしてます。
touch.bat は fsutil コマンドに依存しているので XP/2003 以降でないと使えませんし、本来 touch の Windows 版であるところの attrib コマンドとは一切無関係に、ゼロバイトのファイルを作成するために用意しています。これは私がとりあえずファイルだけ作って配置を考えるとか、ちょこちょこそういう作業をするために用意したもので、そういう需要のない方には必要ありません。
問題はエディタですが、vim なり emacs なりをこのバッチを収めるのと同じディレクトリに置いちゃうのがいいかなと思ってます。私の場合であれば、
emacs.bat
@echo off start ng %1
と ng.exe, ng.ini を用意します。(別に Emacs そのものでも xyzzy でもいいんですが、あくまで一時利用ですし。)
効果
たったこんだけですが、
grep function * | less
とか打ってもエラーにならないのでかなりストレスを軽減できるようになりました。more にバッファ内を検索する機能がないのはまぁ諦めましょう。
バッチファイル
cp.bat
@echo off COPY %1 %2
grep.bat
オプションは自分の好みで調整してください。
@echo off find /I /N "%1" %2
find は検索したい文字列を常にクォートしなくちゃいけないのがハマりやすいところ。
less.bat
lv 使いは当然 lv.bat にしてください。
@echo off more %1
ls.bat
@echo off dir
mv.bat
@echo off move %1 %2
rm.bat
@echo off del %1
touch.bat
echo off : : require Windows XP/2003 or later : fsutil file createnew %1 0
あと
@IT:Windows TIPS -- Hint:whichコマンドを作る
こんなんとかあってもいいかもね。
2006-07-15 [長年日記]
_ bs が便利
衛星放送ではなく、Emacs のバッファリストの話。標準のバッファリストは超使いにくくてなんだこれと思っていたんだけど、bs っちゅーのがいいらしいことをこの期に及んで初めて知った。ちょーあほだおれ。
28.1.3 カスタマイズ可能なバッファリスト ― bs (2004/09/26) (Meadow/Emacs memo: バッファリストとバッファの切り替え)
まぁリンク先の方は ibuffer 使っててそっちの方が評価高いみたいだけど、bs も標準のバッファリストに比べれば圧倒的にものすごくウルトラ使いやすいので、
;; バッファリストを bs-show に変更 (global-set-key "\C-x\C-b" 'bs-show)
を .emacs に早速書き足しましたよ!
今までどうしていたかというと、バッファリストが超使いにくいこともあいまって、Terminal を2枚開いてさらに screen で裏にも立ち上げて、合計4つ Emacs 立ち上がってますみたいな超富豪アプローチで回避していました。そうすると Emacs のインスタンスが異なると Emacs 上の操作ではコピペできないなどの致命的な問題もあったのですが、そこは今度は Terminal 用のコピペ操作で回避していたのです。ばっかでぇ。
というわけで少しだけ計算機資源に優しくなれたのでした。
というかさっさと bs の方をデフォルトにしなさいよ。(逆切れ)
2006-07-17 [長年日記]
_ パーツショップのショッピングサイトってひどいんだなぁ
最近 Pentium M で新しいサーバを組もうと思ってパーツをあれこれ注文していた*1んだけど、そこで気づいたことがある。全部かどうかは知らないが、PCショップのショッピングサイトの作りがひどすぎるということである。高木先生にたれ込んだらきっと重油吹くサイトのオンパレードだ。個人情報を入力して注文を完了させる画面において、
- SSL 使ってない
- あるんです!
- オレオレ証明書
- 少しはやる気があったんだなぁ
- 決済処理丸投げで別ドメインの証明書*2
- しかもオレオレ
- しかもフレーム分けてる
なんてのがザラにある。もちろん安めの店を狙っていたからなのかもしれないけど、そういうところはおまけに電話で注文を受け付けてくれなかったりする。電話掛けてもサイトから注文をお願いしますと言われる。
まぁ別にその店に個人情報が渡ったとか、パーツを買った履歴が漏れるかもしれないとか、spam が増えるかもしれないといった程度のことにこっちはそんなにビクビクしちゃいない。買い物はすべて代引きにしてるのでクレジットの情報はやりとりしてないしね。
にしてもだ。今なお Web 上で正しくセキュアな通信を行うなんてことに、中小零細のショップが気を回せるところにはきてかもしれないけれども、PCショップの客層にはそういうの詳しい人結構いるんでないかい? そういうところ気にならないのかなぁ。ショップ比較する人たちはセキュリティには興味ないのかな? もしかしてプライバシーポリシーとか特定商取引の文言があればいいの?
文句は言っているが、なぜかほしいものが扱ってる店のかなり限られたものばかりになってしまい、セキュアでないことは分かったうえで買っちまった。「こういう店では買わない宣言」できればかっこよかったかもしれないんだけどねぇ。
2006-07-21 [長年日記]
_ WSHでリモートのスクリプトを読み込んで実行、、、できない?
ほんっとーにほしい情報ってないもんだ。今回は WSH で
hoge.wsf
<job id="moge"> <script language="JScript" src="lib.js" /> </job>
を、
<job id="moge"> <script language="JScript" src="http://lib/lib.js" /> </job>
としてみた。
hoge.wsf(0, 1) Windows Script Host: パラメータが間違っています。
という、まったく意味不明かつリファレンスに載っていないメッセージが返ってきた。ちなみに、上の例でいう lib.js をちゃんと読み込んでいるのかというと、ローカルの存在しないファイル名を指定すると
参照された URLを 取得できません。
というエラーに変わるし、Web サーバにはログが残っているので取得できているっぽい。が、実行はできない。で、そのファイルをローカルに置いてそれを読み込ませると普通に実行できる。
えーとりあえずこれだけは書いとく。
- エラーメッセージを出すなら意味の分かるものを出せ
- 制限があるならちゃんとそう書いとけ
なんでこんなことをしたかったのかというと、
- サーバ管理のスクリプトを常にサーバ上でゴリゴリ書くのはやりたくない
- 別の機械で書いて、CVS で管理しよう
- CVS に commit したものがそのまま HTTP で取得できる場所に反映されたら*1、サーバ上のスクリプトを毎回更新しなくてもいんじゃね?(サーバにはランチャになるファイルだけを置いておけばよい。)
- 管理コスト減ってウマー
のつもりだった。まぁセキュリティの問題でリモートのファイルを読み込んでいきなり実行できなくても別に不思議はないんだけどさ。だったらそういうメッセージを返してくれよ。
※ 上のような使い方、うちではできてるよという方がいらっしゃいましたら情報お待ちしております。
*1 これはリポジトリ内の特殊なファイルを編集することで可能。詳しくはマニュアルを読め。
2006-07-22 [長年日記]
_ iCal って便利なのかも
Google Calendar じゃなくて普通のクライアントアプリ + WebDAV でも結構使いものになるというか「面白い」*1。
こういう善意の集まり的なシステムは利用者全員がちゃんと更新してくれないと意味がないという辺りで Wiki と同じ弱さを持つわけだけど、Wikiのように構造のないページというものにマークアップで構造を持ったテキストを書いていくという*2、自由の代わりに引き受けた分かりにくさ、まどろっこしさはずいぶんと減るので、そこまで悲観的にならなくてもいいかもしんない。
特にマネジメント層の人は部下のスケジュールを複数組み合わせて全体の予定を見直す、なんてことが割と手軽にできそうなので逆に喜んで使うようになる可能性もある*3。まぁどっちにしろ上の人のセンスというかスタイルに依存する部分は大きいわけだけれども、少なくともこれは直感的にメリットが分かりやすい。
純粋に個人で使うにしても予定の種類ごとにカレンダーを分けておくと、あとで WebDAV に放り込むとか HTML として出力するなんて操作をする際に楽なのはいいな。あとはこういうのが携帯から閲覧、編集できるとなおいいんだろな。
※ 排他制御とかどうなってるのなんて辺りはよく調べてない。少なくともすでに存在しているファイル名のカレンダーを新規に「公開」して上書きしてしまうことはできないようだ。
2006-07-28 [長年日記]
_ 最近もっともだなぁと思ったこと
- むしろ (サマータイム、実は好評? @ /.-j)
確かに夏は朝の涼しい時間に寝ていられる方が特に灼熱の都会に住んでいる人の健康にはよさげ。つか朝って結構涼しいよね。びっくりする。もう8月も目の前だってのに。
- 北海道式サマータイムを広めよう! (サマータイム、実は好評? @ /.-j)
偽サマータイムをサマータイムと読んでしまうことで本物の邪魔臭いサマータイムの浸透を妨げるというアイディアは秀逸だなと思った。
ピークシフトはいいと思うよぉ。土曜出勤すると妙に仕事がはかどるのと同じようなもんだと言えば身にしみて分かっちゃう人もそれなりにいるんじゃないかな。
何もこんなに遅れてサマータイムネタじゃなくたっていいじゃないか? これがピークシフトですよ!(嘘
_ awk のハマりどころ
awk と言っても gawk ね。あとは知らない。
- 文字列をついシングルクォーテーションで囲んで怒られる
- 「改行コード取らなきゃ」と思っちゃう
- 文字列をつい . で連結した気になって怒られる
gawk は Fink で入れた gawk 3.1.4 を使っている。3.1.x は gettext で国際化なんだよねー、gettext よく分からないんだよねーと思ってたんだけど、LANG をきっちり設定するかあるいは何も設定しなければなんかそれでオッケーっぽい。jXXX 関数はないけど別にいいや。*1
ところで gawk の 3.1 系統は TCP/IP が扱えたりかなり野心的で面白そうなのに、この日本語を扱う際の最初の一歩でつまづいてる人が多いような気がする。Windows の場合はこれをやる、Linux の場合はこれをチェックしろとかっていう最低限のノウハウがないまま「なんとなく国際化してるらしいけど今までと使い勝手違うからいやなんだよね」という層を作ってしまっているような。
2ch なんかでも gawk3.0.4+mb の方が 3.1.x よりウケはいい*2。でもメンテナはもうやる気ないわけですよ。本家が国際化してんだから無理に独自実装のマルチバイト化やる必要ないじゃんと。だったら 3.1.x についていくしかないと思うし、強力になってるんだから、どうせ使うなら 3.1.x 以降を使えた方が幸せになれると思う。
え、全部 Ruby か Python でいいじゃん? んー。なんかねぇ、使っちゃうんですよねぇ。使い続けるスクリプトを作るためには使わない方がいいと思うけど、フィルタとしてはやっぱ使いやすいのよね。
※ 凝り始めると結局 Ruby とかで書き換えちゃうんだけど。
2006-07-31 [長年日記]
_ 『データベース村へようこそ』読了
ほんとに初心者向けの本から取り組んでいる。わっはっは。
要素的には確かにかなり網羅されているような気がするんだけど、前々から感じていたが自分はこの対話形式の本がとても苦手だ。順を追った説明にも一覧性にも無理があるし、なんで教えてもらう側がそんなに詳しいんだというか、つか先生二人おるやんけとか気になってしょうがない。会話にするとどうしても単位面積当たりの文章量も落ちるし。
自分としてはもっと淡々と一方的に書いてくれる方が気持ちいいんだなってことが分かった。あともっと図を増やしてほしかった。
まぁ好みの問題ではあるんだけど。
_ 通りすがり [gawk 3.1.xの国際対応は、そのままではWindowsではまともに動きません(ソースの修正が必要)。あと3.1..]
_ wtnabe [Windows は相変わらず悩ましげですね。 jXXX関数は逆でしたか。細かい関数は使わなくなっちゃったのがバレバ..]