2006-09-03 [長年日記]
_ 葬儀tips
- 香典袋は顕示欲を抑えて極力シンプルなものにしておくと整理する人が楽。
- 水引まで印刷されちゃってるやつがベスト。
- 職場はともかく仕事上のつきあいの場合はあんまりバラバラに行かない。香典もまとめておいて代表が出席する。
- 記帳の際は読みやすい字で変に省略せずに書くと喜ばれる。
- 達筆系は困ります。下手でも丁寧に書きましょう。
- というか仕事関係なら可能な場合は(偉い人が)名簿が別ルートで手に入るように仕向けておくと現場はとても助かります。
まぁなんかそんな感じ。舞台裏は情緒とかそんなものとは別にあれこれ煩雑な作業が噴出しておるわけです。
_ emacs で 3タブ
まぁなんだ。ただただしモードだな。ruby-mode.el の中身を読んだりマニュアルを調べたり bookshelf.jp を調べたりして書き上げてから見つけた。
indent-tabs-mode は ruby-indent-tabs-mode でなくてもいいのか。
2006-09-04 [長年日記]
_ viewset という考え方
別段新しい考え方でもなんでもない気がするんだけど、思いついたのでメモ。
Rails を引き合いに出すまでもなく MVC という単語だけはずいぶん浸透している。でまぁ、この V に当たる部分をロジックから分離する方法の一つとして*1テンプレートの活用というのがあるわけなんだけど、
このテンプレートって配置に困りませんか?
プログラマが、あるいはアプリのワクが分かっているデザイナがテンプレートを書いているなら困らないかもしれないけれど、そういうことが分からない人がデザインを担当している場合、
テンプレートとそれ以外のパーツが泣き別れになると作業しにくい
と思うわけ。テンプレートはテンプレート用のフォルダに、画像や CSS などのパーツは Web ブラウザから直接見える場所に置いてください、というのはやはり不親切ではないかと。だからと言ってテンプレートをブラウザから見える場所に、具体的にはアプリケーションと同じ階層に置くと今度はお互いに管理しにくいし危ない。
そこでブラウザから見えない場所に viewset の置き場所を作って、そこにまとめて置いてもらうっていうのはどうだろう。具体的には以下のような構成になるんじゃないかと思う。
|-- app ← ブラウザがアクセスするところ
`-- viewset ← テンプレートおよびデザインパーツ置き場
|-- VIEWNAME
| |-- css
| | |-- base.css
| | `-- flavour.css
| |-- img
| | |-- dummy1.img
| | `-- dummy2.img
| `-- template.htm とか template.erb とか
`-- VIEWNAME2
で、アプリの側からは VIEWNAME を指定するだけで、いい具合に CSS や画像も呼び出せるようになるという寸法。デザインリニューアルの際にはこの VIEWNAME を切り替えるだけでガラっと印象を変えることができる。また画像や CSS を直接上書きしなくて済むのでリニューアルというほど大掛かりではないが、定期的にデザインが変わるような場合も更新作業が楽になるのではないかと思う。
ファイルの管理上も都合がよい。デザインする人はデザイン過程と同じ要領でテンプレートも画像も CSS もひと固まりで管理しておけるし、アプリケーションとは別な領域に置いておけるので開発する人もデザインする人もお互いに安心。おまけに VIEWNAME が時系列で並ぶようにすれば簡単な履歴管理にもなる。
どうだろ。
実現方法をなんにも書いてないけど、それはまだ何も考えてないからです。
*1 メリットはそれだけじゃないけど
2006-09-07 [長年日記]
_ Emacs22 の font-lock の色使いが terminal で再現できなくて意味不明
頑なに拒んでいた unicode 化の波なんだけど、一応 javascript のネイティブは unicode だしなということで渋々対応を考え始める。*1
なんで渋っていたのかというと、mule-ucs を組み込むと Emacs の起動がやたら遅いから。Debian マシンは当然 CVS 版が入ってるわけないので、これに関しては mule-ucs で我慢することを決め込む。Emacs は終了しないで使う。*2
問題は手元の OSX 版。mule-ucs を組み込む方法が分からん。*3fink で入れることにすると Emacs からビルドし始めるので、それだったら CVS 版でいいじゃないかと思い立ち、Carbon Emacs を落としてくる。立ち上げる。おぉ、OS ネイティブのウィンドウだ。こえぇ。Emacs は terminal でしか使ったことがないので自分のウィンドウを持ってる Emacs を見るとビビる。いそいそと Carbon Emacs 内のディレクトリをたどり、
emacs -nw
すると普通に terminal の中で起動してくれた。よしよし。
……。
あれ。色分けがおかしくね? font-lock は有効になっているんだけど、色の付き方がずいぶん中途半端になってしまう。うーん。もう一度ウィンドウを持ってる Emacs を立ち上げてみる。あー。何この中途半端な色。こんな微妙な色が terminal で出るわけないじゃん。
うーん。Carbon Emacs だからかなぁ?と思い、意を決して Fink から Emacs 22 のビルドを開始。その間はずっとサーバ上で作業するので手元の処理が重くなっても気にしない。で、起動。
やっぱり色分けの意味が分からんorz
どうやら Emacs 22 の font-lock の色分けは基本的に terminal での利用は考慮していないっぽい。まいったなぁ。Emacs は細かいカスタマイズって面倒でやってないのでこういう事態が起きるとさっぱり分からない。
※ とりあえず Emacs 21.3.5 にして回避した。
[追記] ansi8 + M-x customize で emacs22 への準備 で Terminal でも使えるようになりました!
2006-09-08 [長年日記]
_ (たぶん)いちばん短い phpdoc 生成の覚え書き
なんか今までサクっとコマンドで phpdoc を生成するってのはなぜかやったことがなかったので。
- CLI 版 PHP バイナリが入っている
- Pear で PhpDocumentor をインストールしている
状態を想定。以下のように叩く。
php PHPDOC-MODULE -d SOURCEDIR -t OUTPUTDIR
オプションは
- -f
- parse 対象ファイル名の指定
- -d
- parse 対象ディレクトリの指定(たぶん、普通使うのはこっち)
- -t
- HTML などの出力先
- -h
- ヘルプを出力
-t じゃなくて -o じゃないのかとか、-f と -d を分けるのってちょっとどうなんだとか、CLI 好きとしてはなんか少し他のいろいろあるコマンドと比べてオプションの体系に違和感がある。やっぱもともと Web インターフェイス + 設定ファイル(PHP直書き)という文化圏のツールなんだなぁって感じがしないでもない。
phpdoc のモジュールは OSX 標準の PHP に対して Pear でインストールしたときには /usr/lib/php/PhpDocumentor/phpDocumentor/phpdoc.inc にある。alias を設定しておけ。*1と思ったら Debian で入れたら勝手に phpdoc コマンドができた。あれれ。まぁ便利だからいいけど。
しかしこれ未だに多言語対応は考えてないんだな、きっと。iso-8859-1 に決め打った HTML が生成されてしまう。まぁオープンソースものなら Pear の規約に照らし合わせても us-ascii 以外をコード内に入れない方がいいんだろうけど、手元で使う分には日本語書けないとさすがに不便なのよね。
*1 みんなに使わせたいなら shell script の方がよい。
2006-09-09 [長年日記]
_ iCab 3.0.2 の getElementsByTagName は自分自身を含むらしい
JavaScript で DOM いじりの話。いやーハマった。
- 要素をオブジェクト化する
- そのオブジェクトに対して getElementsByTagName() で含まれる要素のコレクションを取得する
iCab 3.0.2 では 1 と 2 が同じ要素名(例えば div)だった場合、2 で取得したコレクションに 1 で取得したオブジェクト自身が含まれてしまう。日本語だと意味が分からないかもしれないのでコードを用意した。
- div#large とその中に div#small を用意
- div#large のオブジェクトを取得
- そのオブジェクトに対して getElementsByTagName() で(自分としては)その「中に含まれる要素のコレクション」を取得
- div#large の中には div#small しかないので、コレクションの length は 1 になるし、最初の要素の ID は small になるはず。
- ここで iCab 3.0.2 ではコレクションの数が 2 に、最初の要素の ID が large(つまり自分自身)になってしまう。
Firefox 1.5.0.6 と iCab 3.0.2 で確認。
※ 他のブラウザの状況が確認できた方はツッコミにでもいただけると助かります。
しかし iCab って、2 のときに比べてずいぶんまともに動くようになってるんだねぇ。
<html>
<head>
<title>Test of DOM</title>
<script>
function main() {
var log = [];
var first = document.getElementsByTagName( 'div' );
log.push( 'a number of whole divs : ' + first.length );
log.push( 'id of 1st element of divs : ' + first[0].id );
var second = first[0].getElementsByTagName( 'div' );
log.push( '----' );
log.push( 'a number of divs inside divs : ' + second.length );
log.push( 'id of 1st elements of divs : ' + second[0].id );
var console = document.getElementById( 'log' );
console.innerHTML = '<pre>' + log.join( "\n" ) + '</pre>';
}
window.onload = main;
</script>
<style>
body {
background: #fefefe;
color: #202020;
}
div {
border: 1px solid;
margin: 1em;
padding: 0;
}
#large {
height: 5em;
}
#small {
height: 1.4em;
}
#large:before {
content: 'Large';
}
#small:before {
content: 'Small';
}
#log:before {
content: 'Log';
}
</style>
</head>
<body>
<h1>Test of DOM</h1>
<div id="large">
<div id="small">
</div>
</div>
<div id="log">
</div>
</body>
</html>
2006-09-10 [長年日記]
_ screen の multiuser mode を1台のマシン上で1人で実験する
前にも一度だけやってみたことはあったんだけど、そのときは「おぉすげぇ」と思っただけで使いたいとは思わなかった。今回は真面目に使いたいと思ったのでメモ。
まず、screen の multiuser mode はユーザーが1人だけでも利用できるため、ちょっと混乱する。先に言っておくが、ユーザーが自分1人の場合は
screen -x は multiuser mode でなくても成功する
のでこの結果では判断しちゃいけない。ただ、何かの拍子に機械を変わる必要があり、いちいち detach しなくても作業を続けられるというメリットはあるのでこの使い方自体を否定する気はない。しかしあくまで multiuser じゃないのでそこんとこよろしく。
で、multiuser mode の実験になるわけだが、必要な作業は以下の通り。
- screen バイナリに setuid root ( man chmod )
- 別なユーザーでログインする
- screen の session を作成し、それに対し
| コマンド | 意味 |
| multiuser on | 絶対に必要 |
| acladd USER | これやっとかないと detach できない |
| aclchg USER PERMISSION WINDOW | 特定のユーザーに特定の window 上で特定の操作を許可する |
と言ったコマンドを実行すると自分の利用している screen session に別のユーザーが attach してこれるようになる。attach するには
screen -x -r username/pid
とする。screen -S で name が設定されている場合はそれでもよい。detach は通常通り detach すれば ok.
別なユーザーでログインすることの意味
1人で実験の際に意外とハマるのは上の 2 に挙げた別なユーザーでログインするというところ。これ、su ではダメ。もっと言うとそのユーザーの tty が作成されてないとダメ。ということで login する。
これをクリアすればもう大丈夫。
acladd, aclchg 辺りの挙動がなんか変
しかしまだ自分の中には疑問があって、
- acladd すると aclchg しなくてもいきなりフルコントロールできちゃうので、これは一種のセキュリティホールじゃないのか?
- acladd しなくても aclchg しただけで attach は可能なので余計な作業をしてほしくない(例えば見せたいだけの)場合は先に aclchg した方がよさげ。
- でもその場合も acladd しておかないと detach できない
- で、acladd したときにやっぱり全権限が付与されちゃう予感
なんか、acladd と aclchg の動きがおかしいような。確認したのは screen 3.09.15 @ OSX なので、最近のバージョンでは挙動が変わってるかもしれない。
※ 設定も環境も元の session を作ったユーザーのものに従うっぽい。escape とか違ってると detach できなくて焦るので multiuser での作業はすぐに情報を伝達できる準備(irc とか Skype とか口頭でとか)をしてからやっとかないと混乱するかも。
2006-09-14 [長年日記]
_ Wiki でゲームブックって作れるな
いや、ふいに思いついたんだけど。つかたぶんいろんな人がとっくに思いついてるんだけど。
ページの一覧とかその辺の便利機能を殺していけばゲームブックになるんじゃなかろうか。あーでもその場合はページ名と URL が密接に結びつかないシステムがいいな。無意味な番号の方がいい。そこら辺は普通はシステムに組み込みだからなぁ。URL の設計って最初に考えておかないと、あとからいじるの面倒だもんね。
で、ここがミソなんだけど、最終的に一続きのテキストになる機能があるといいな。つまり本物のゲームブックを作れる機能。
2006-09-15 [長年日記]
_ xCHM 1.9 ANSI 版がいい感じ
最近ウノウの人が chmox 日本語対応版を紹介していたなぁ、ときらいな CHM ファイルで実験してみた。
検索できないじゃん
そりゃーないよ、そりゃーない。検索できないんじゃー困ります。ということで最近更新してなかった xCHM を落としてくる。
- Unicode 版を起動。
- 見事にバケバケ! やっぱりなぁ…。
- ANSI 版を起動。
- エンコーディングが不明だからお前選べと言われ、CP932 を選んだら普通に表示できた!
- しかもインデックスも化けてないじゃん!
- ascii でなら検索もできる!!
ということでマカーで CHM 好きなら xCHM の ANSI 版がオススメですよ。
2006-09-16 [長年日記]
_ また Maxtor 逝った
以前 iMovie で遊ぶために用意しておいた 160GB のディスクに久しぶりに通電したら逝ってしまった。以前 Windows を使っていた頃のデータやらアプリも入れてあったのでちょっと惜しいんだけど、まぁいま必要になるものはないので、いいっちゃいいか。*1
で、このディスク。HGST のものだとばかり思っていたらまた Maxtor だった。というか、
すごい引き。なんてこった。
*1 最近あまりそういう執着がなくなってきた。
2006-09-22 [長年日記]
_ るびま16号のインタビューが面白い
Rubyist Magazine - Rubyist Hotlinks 【第 16 回】 essa さん
何が面白いって高橋さんの話が面白い。
……。
それでいいのか?
いろいろ刺激になったんだけど、書いてみたら引用ばっかりになったので公開しないことにした。今回も勉強になりました(ぺこり)
2006-09-26 [長年日記]
_ Terminal のフォント放浪 → Monaco + ヒラギノに落ち着く
Terminal のフォントを M+ と IPAフォントの合成フォント : フォント一覧 の (3) の 2 にしてみた。OSX のフォントパネルは幅や高さを調整できるので、これまでの Osaka-等幅と同じく 80 * 59 を画面いっぱいで2枚広げることができるように調整。
見やすいじゃないか。
これまでコードは断然ビットマップだ!と思っていたけど、もうあっさり撤回。これでいくことにする。つかね、トシのせいか、細すぎるビットマップよりほどよく肉のついたアウトラインフォントの方が目が楽だ。
※ しかしこのフォント、Grass と一緒に配布してないのはダメなんじゃないのかな?
[追記]ずれる。
カーソル位置と文字の位置がずれる。幅の調整してるからか?と思ったけど無調整でもずれる。うーん。使えん。
VLゴシック にした。
Bitstream Vera Sans Mono も試したけど、標準の設定でほしいサイズに設定するとアンダースコア消えちゃう。行間を大きめに取らないと表示できない。でもそんなことしたら狭い画面がもっと狭くなっちゃう。ProFont も試した。結局 Andale Mono にした。こんでいいんじゃないか?と思ったらこれもだめだ。セミコロンとコロンの区別がつかねー。
ワンサイズ落として Monaco にしてみた。アルファベットのサイズはちょうどいいんだが日本語(たぶん自動でヒラギノが割り当てられている)がずいぶん小さい。うがー。5行減を飲んで他のフォントと同サイズの Monaco にしてみた。見やすいけど狭い…。でも Bitstream Vera Sans Mono よりはスペース効率がよくて視認性にも優れているのでよしとしてみるか。改めて見るとO'Reilly の本のコードみたいでかっこいいじゃないか。
2006-09-28 [長年日記]
_ 画面の広さを取り戻せ
そういえば。ずっとずっとずっと。Emacs で無駄にメニューバーを表示させていたことを思い出した。ちゅーことで以下の設定。
; ツールバーを表示しない (tool-bar-mode 0) ; メニューバーを表示しない (menu-bar-mode -1)
ま、no window で使っているのでツールバーはもともとないんだけど。
例によって bookshelf.jp より。
15.3.7 メニューを消したい (2004/01/15) (Meadow/Emacs memo: 基本的な設定)
これで1行取り戻したぞ。上の黒い行(白バックなので)がなくなっただけで急に広く感じるのはなんでだろ。
これで
- Terminal 全体で54行
- screen の status で1行減
- Emacs の mini-buffer と status で2行減
- Emacs のウィンドウを上下に分割
- 分割したウィンドウの status で1行減
おぉ。1ウィンドウ 80 * 25 の前時代的な環境のできあがり。やっぱこれくらいが落ち着く。
そして、このウィンドウで読める範囲でメソッドを書け > 誰ともなく
2006-09-29 [長年日記]
_ Finder から一発で Terminal 上の Emacs を起動する
わたしゃゴリゴリの Terminal 使いですが、何がなんでもキーボード操作じゃなきゃやだ、というわけでもなくて。マウスでポチポチしてたりするときだって当然あるわけです。ファイルをネットワーク越しに転送してきてとりあえず何か開いてみたい、みたいなときとかね。Terminal で cd して less hoge とかすればいいわけですけど、なんとなくドラッグ&ドロップで開きたいときだってあるわけですよ。例え常に Terminal ウィンドウが開いていたとしてもです。開いてる Terminal に emacs と打って目的のファイルをドロップしてフォーカスを Terminal に持ってきてリターン押すだけやん!と言われてもです。
そんなときにね、実は OSX にはコレ!っていうページャやエディタってないわけですよ。どうもどれもこれもイマイチでね。日本語の自動判別がダメだとか設計が古すぎるとか対応しているプログラミング言語が少ないとかそもそもプレインテキストが扱えないだとか、不思議な現象に悩まされることが多いわけです。一応 mi を常備してますけど、なーんかしっくりはこないんですよ。
で、Emacs 使いとしてはじゃあ Carbon Emacs にすれば?みたいな気もしてくるわけですが、Carbon Emacs は先日述べた理由で使いたくない。つか標準の Emacs のほかに Fink の Emacs が入っているのに、そのうえ Carbon Emacs 入れろってか。なんでただでさえ巨大な Emacs を3つも入れないかんのじゃ。
さてどうするか。
閃いたのが「Terminal 上で Emacs を使って目的のファイルを開くって作業をコンテクストメニューとかドラッグ&ドロップでできたらステキ」作戦。
じゃあ、ということで wrapper になりそうなアプリを探すんだが、これが思うような動作をするものってないのね。Terminal にこれこれこう言うコマンドを与えて実行、っていう指定ができて、かつドロップされたファイルを引き数で与えることができればそれでいいのに。*1
うーん。AppleScript を使えばできそうだなぁとは思うけど、あれ書くの楽しくないし、もう書いたの1年以上前だし…。
[2006-09-30 追記]でけた。ドロップレットにするには Xcode で Droplet プロジェクトにせんといかんのね。たったこれだけなのに大げさだなぁ。
-- drop-to-emacs
on idle
(* Add any idle time processing here. *)
end idle
on open names
set filenames to ""
repeat with str in names
copy filenames & " \"" & (POSIX path of str) & "\"" to filenames
end repeat
tell application "Terminal" to do script ("emacs" & filenames)
quit
end open
on idle のときに何か書くべきなのかとかさっぱり分かっていないので放置。
動作としては
- 新しい Terminal を起こして
- そこで emacs を使って全部のファイルをいっぺんに開く
ただし、Terminal が起動していない場合は、Terminal を起動した際に自動的に作られる新しいウィンドウとは別に自分で Terminal ウィンドウを作成するので、
2個のウィンドウができる
という不細工な動作をする。まぁいいかーと。Terminal そのものはいつも起こしてるから。
しかし、、、AppleScript を書くのは気持ちよくない。いろんな予約語(演算子も予約語みたいなもんだ)があるのに、それいっぺんに確認できるリファレンスないし。つか XCode なんだからリファレンスとか補完とか自分でやってくれりゃいいのになんもしてくんないし。なんか設定足りんのかなぁ。
ま、とにかくできあがったアプリを Dock に置いて完成。いいじゃないの。いーじゃないの。
*1 Terminal に指定コマンドを与える設定を Terminal そのものから「名前を付けて保存」できるんだけど、このアイコンにテキストファイルをドロップすることはできない。