2006/03/31

ここのところ、職業倫理について考えることが多い。これまでは、考えるものではなく、事あるごとに意識するものだった。職業倫理にもとる行為は、しないのが当たり前。金もらってる以上、顧客やビジネスパートナー(いまどき、どっちも Buzz っぽい)の利益になる行動をしろ。信頼(これも Buzz っぽい)は裏切るな。自分の仕事に誇り(やっぱり Buzz っぽい)を持て。

なんか違うと感じるのは、職業倫理とされているものは、どれも「くいぶち」にあぶれないための知恵でしかないんじゃないかってとこだ。それはそれでいいし、必要だし、大切だと思うけど、はたらくってのは所詮「くいぶち」なのか? 「食ってけなかったらどうする。くいぶち上等」のようなコメントは受け付けません。「はたらく=くいぶち」は、極論すれば「第三次産業なんてやめちまえ」に聞こえるから。なんで書籍みたいなモノが僕の「くいぶち」に転化されるのさ。そのモノが誰かにとって「くいぶち」になるから。そんなことは19世紀の時点ですでに常識。いまは21世紀。もうちょっと進化してるはず。っていうか、進化しててくれないと困る。いまさら野麦峠は越えたくないって。

で、職業倫理について考えてみるわけだけど、考えれば考えるほど、これが実は危険思想なんじゃないかと思えてくる。もうちょっと限定すると、職業倫理ドリブンであることの危険性。

たとえば、「エンドユーザのため」という台詞は聞こえがいいけれど、それは「家族のため」とか「上司のため」とか「会社のため」とか「お国のため」っていうのと何が違うのか。いずれの場合も根っこにあるのは保身だし、くいぶちなんじゃないかと。批判はしない。ただ、「はたらく」の根っこにあるのが「○○のため」っていうのは、素朴に考えて寂しいだけじゃなく、いきつくところは野麦峠かもしれなくって鬱。

あるいは、本当に自分の仕事に誇りを持つべきなのか。仕事に関係なく、自分自身に誇りを持つべきじゃないの?

じゃあ、何を「はたらく」の背景に抱けばいいのか。まず信じていいのは、技術だと思う。どんな「はたらく」でも、技術がなければ役に立たない。もちろん、ここでいう技術はテクノロジーではない。「はたらく」によっては、無作為な人間とのコミュニケーション能力みたいなのが重要かもしれない。もうひとつはセンスだろう。本来は技術と切っても切り離せないものだけど。

となると、どうすれば技術とセンスを取得できるかが問題になる。暫定的な自分の答えは、「各自が好きなことを続ける」。好き→続ける→技術とセンスがついてくる、という進研ゼミのような理屈はわかりやすいと思う。それに、好きじゃないことを「仕事だから」って開き直って続けるのはやめようよ。それは不幸だから。

この答えは、実は何も言っていないに等しいし、好きじゃない仕事に就かざるを得ない人のことを考えていないことも十分に自覚している。あと、自分のことを棚に上げていることも自覚している。そもそも、好きなことっていうのがよくわかっていない。僕は、好きなことがなんだかずっとわからない(いまだにかなりあやふや)。だから、スポーツ選手とかミュージシャンのような、好きなことがわかりやすい「はたらく」がうらやましい。それが続けられるほど好きな人がうらやましい。僕の話はどうでもいいので終了。

2006/03/26

いまごろ気づいた面白いクイズ。

AA折れ線グラフ(nobsun)
http://oss.timedia.co.jp/index.fcgi/kahua-web/show/ossz/oneline/2006-03-14

あまり悩まないでさくっと書いてみることにした。各行で出力する切片たちを割り出して、上の行から順番に書いていくだけなので、Cでもいいじゃんと言われたらそれまでという悲しさ。自分としては、各行の割り出し方が数値的なところがお気に入りなんだけど。
そういえば K&R にも、垂直方向のヒストグラムを出力させる問題があった気がする。横のものを縦にするという点では近いものがある。ない?
;; aa-graf.scm

(define (aa-graf RFC)
(let ((aas (aas RFC))
(alts (altitudes RFC)))
(let draw ((alt (apply max alts)))
(graf-at alt alts aas)
(if (> alt (apply min alts))
(draw (- alt 1))))))

(define (graf-at alt alts aas)
(print (list->string
(map (lambda (x y)
(if (eq? x alt)
y
#\space))
alts aas))))

(define (aas RFC)
(map (lambda (x)
(cond ((eq? x #\R) #\/)
((eq? x #\F) #\\)
((eq? x #\C) #\_)))
(string->list RFC)))

(define (altitudes RFC)
(map (lambda (pair)
(min (car pair) (cdr pair)))
(let R
((s 0)
(ls (map (lambda (x)
(cond ((eq? x #\R) 1)
((eq? x #\F) -1)
((eq? x #\C) 0)))
(string->list RFC))))
(if (null? ls)
'()
(cons (cons s (+ s (car ls)))
(R (+ s (car ls)) (cdr ls)))))))
gosh> (aa-graf "RCRFCRFFCCRFFRRCRRCCFRFRFF")
__
/ \/\/\
_/\_/\ _/ / \__/\ /
\/

それじゃあほかの人たちのエレガントな解答を見てみよう、と思ったんだけど、いきなり shiro さんが何をやってるんだか分からない……。つーか、自分が比較的プリミティブな Scheme の機能しか知らないのがいけない。てなことを書くと、リファレンスマニュアルを調べろと怒られそうだけど、まだまだ調べるよりも作るほうが楽しいお年頃(関数年齢)。プログラミングを独習するには10年かかるからしょうがないか。

2006/03/23

木曜洋画劇場でスティーブン・セガールをやっているとつい最後まで真剣に見てしまう症候群

2006/03/22

ようやく第2章まですべての問題が終わった。
;; ex. 2.97
(define ex-2-97-p1 (make-poly-with-dence 'x '(1 1)))
(define ex-2-97-p2 (make-poly-with-dence 'x '(-1 0 0 1)))
(define ex-2-97-p3 (make-poly-with-dence 'x '(0 1)))
(define ex-2-97-p4 (make-poly-with-dence 'x '(-1 0 1)))
(define ex-2-97-rp1 (make-rational-number ex-2-97-p1 ex-2-97-p2))
(define ex-2-97-rp2 (make-rational-number ex-2-97-p3 ex-2-97-p4))
gosh> (print ex-2-97-rp1)
(x + x^0)/(x^3 + -x^0)
gosh> (print ex-2-97-rp2)
(x)/(x^2 + -x^0)
gosh> (print (add ex-2-97-rp1 ex-2-97-rp2))
(-x^3 + -2x^2 + -3x + -x^0)/(-x^4 + -x^3 + x + x^0)

Mathematica をはじめて使ったとき以来の感動。なにせ、SICP片手とはいえ自分でコードを書き、まがりなりにも中で何が起きているかを把握しているんだから。

それでもやっぱりはずかしい、ぐちゃぐちゃコードたち。主に自分のためのバックアップ用。いつの日かもう一度書き直す。

symbolic-algebra-generic.scm

arithmetic-tower.scm
install-sparse-polynomial.scm
install-dence-polynomial.scm
日帰りで別所温泉に行ってきた。長野新幹線で上田まで1時間半、そこから上田電鉄別所線に乗り継いで30分くらいで別所温泉駅に到着する。関東甲信越にはこの手のローカル線がけっこう残っていてうれしい。

DSC_0017 別所線。さすがにこの車両は走ってない

空がきれいなのは、朝の9時だからだけではないと思う。

DSC_0014 塩田の車窓から

別所温泉には立ち寄りの公衆浴湯が何箇所かある。今回は大湯と石湯に入った。いずれも150円で、大湯のほうが硫黄臭が強くて温泉っぽい。でもこれは、湯が浴槽に到達するまでの距離の違いだろう。いずれも、かけ流しではなく循環式。まあ、別に循環式でもいいんだよ、楽しめれば。

実際にこの土地にくるまで知らなかったんだけど、付近には鎌倉~室町のころの遺産が多い。とくに三重塔がやたらにある。日本史には疎いんだけど塔、それも三層のやつには興味があるので、なかでも正八角形が魅力的な安楽寺の三重塔と、未完成が魅力的な前山寺の三重塔に行ってみた。どちらの寺も、塔の周りはふつうの分譲墓地で、お彼岸のお参りに来ている人がちらほらいる。一般の墓地の真ん中に国宝があるのは不思議だと奥様にいったら、京都や東京と違ってこのあたりの寺を維持するには檀家からの収益が重要なんだろうとのこと。確かにそうかもしれない。

DSC_0049 安楽寺三重塔。四層に見えるのは1階に屋根が2枚あるから

散策には別所温泉駅で自転車を借りた。とくに前山寺は山の上にあって、ふつうの自転車(サドル低い)がつらい。寺の前で胡桃を売っていたおばちゃんが「どこから自転車?」と聞くので「別所温泉駅」と答えると、あきれられた。自転車が最強の東京だと 3 km くらいどうってことないけど、自家用車中心の山間ではアホに見えるんだろう。

DSC_0055 前山寺は右手の山の上

別所温泉駅で自転車を借りる人の大半は、この自転車でどこにいくんだろう。

2006/03/18

姉さんとしたう人の一人が、今日、これまで彼女が属した共同体を離れて別な仕事を初めるというので、お祝いをした。おめでとうございます。あなたは、ほかで仕事をしたほうがいいと思うよ。これからも遊んでね。


じっと手を見る。

2006/03/11

ひさしぶりに電車にのったら、どっかの塾の広告が「日本の小学生は 9×9 までだけどインドの小学生は 19×19」っていってる。これは趣旨としては「もっとつめこもうぜ」であり、「詰め込みのお手伝いをさせていただくので費用をたっぷりお支払いください」だよなあ。ゆとり教育の見直しバンザイ……なわけないだろ

実は 19×19 の暗算は、思うほどむつかしくない。中学生以上なら、こんなふうにできる。
19×19 = (20 - 1)2 
= 202 - 2×20×1 + 12

ようするに、19 を 20-1 だと思って、誰もが中学校で詰め込まれたはずの文字式の展開をしただけ。
(a - b)2 = a2 - 2ab + b2

202 - 2×20×1 + 12 には、九九の延長で対応できる掛け算しかなくて、結局 400-39 になる。19×19 を脳内筆算するのはしんどいけど、400-39 なら暗算できる範囲だと思う。400-39 にもっていくまでに多少の脳内レジスタは必要だけど、常態でそれくらいのレジスタを確保できない脳みそが 19×19 を暗記するのはどのみち無理ですから。

つまり2桁の掛け算を九九のように暗記させる必要はない。むしろ積極的に暗記させないほうがいいかもしれない。どうせ詰め込むなら、文字式の展開とか因数分解の公式を小学校で詰め込んで、こんなふうに応用できることを教えてやってください。「あげるなら魚じゃなく釣竿」ってやつね。

2006/03/07

いま質問されて思い出したけど、dvipdfmx では pstricks が使えない。っていうか、\special 環境が使えない。

Debianにotfパッケージをインストールして、dvipdfmxでOpenTypeフォントを埋め込んだPDFを吐き出すまで


前提1


dvipdfmxのインストールまでは、以下のページで完了しているものとする。

* Debian GNU/Linux (Sarge)でのLaTeX導入備忘録
http://cise.edu.mie-u.ac.jp/~okumura/texwiki/?Linux%2FDebian

ちなみに、debianでLaTeXを使うときに参考にできるURLは、事実上ここしかないと思う(ここ以外の情報は、申し訳ないけど情報が断片的すぎて使えなかった)。

前提2


仮想フォントは使わない。つまり、あくまでも正規のOpenTypeフォントのライセンスを持っている人が、それを使ってDebianでフォント埋め込みのPDFを生成することを目標とする。つまり、ぶっちゃけほとんどの人には役に立たない情報。

otfパッケージのインストール


まず、otfパッケージを導入する。以下からotfパッケージのソースを取得して、添付されているシェルスクリプト(makeotf)でインストールする。

* Open Type Font用VF
http://psitau.at.infoseek.co.jp/otf.html

なお、ソースのreadmeには「古いバージョンのovp2ovfやopl2ofmが必要」とあるが、仮想フォントを使わないのであれば不要。ここでも、あえて古いバージョンを探して入れるようなことは(パッケージ管理上も問題があると思うので)しない。シェルスクリプトそのものは、標準でplatexを入れた場合にインストールされるバージョンでも支障はないっぽい。

OpenTypeフォントのインストール


/usr/share/texmf/fonts/otf および/usr/share/texmf/dvipdfm/Fonts みたいなディレクトリを作って、そこにフォントデータをおく。その後、update-texmf(またはmktexlsr)を実行する。

この時点で、プリアンブルで\usepackage{otf}としたLaTeXのソースはコンパイルできるはず。しかし、dvipdfmxを実行しても、
[1kpathsea: Running mktexpk --mfmode ……
みたいなエラーメッセージが出るはず。

dvipdfmxでOpenTypeフォントを使えるようにする


/etc/texmf/dvipdfm/dvipdfmx.cfg の最後の行に、
f hiraginox.map
などと書く。hiraginox.mapのところは、使用するOpenTypeフォントに合わせて、kozukax.mapやmorisawax.mapを指定する。
なお、hiraginox.map などの本体は /usr/share/texmf/dvipdfm/config にある(otfパッケージを入れる際にインストールされる)。TeXの常識だとこのディレクトリに dvipdfmx.cfg を置くみたい(実際ここにも dvipdfmx.cfg があったりするかもしれないけれど)。でも Debian では、/etc/texmf/dvipdfm/dvipdfmx.cfg を上記のように修正しないと、kpathsea に文句を言われ続ける。

使う


プリアンブルに\usepackage{otf}を指定して platex と dvipdfmx を実行すればいい。
自分はプリアンブルにこんな感じに指定して使っている。
\usepackage{type1cm}
\usepackage[T1]{fontenc}
\usepackage[scaled]{helvet}
\usepackage[deluxe]{otf}
\renewcommand{\rmdefault}{ppl}
\renewcommand{\sfdefault}{phv}
\renewcommand{\ttdefault}{pcr}

[おまけ]PDF/X-1にする


印刷所に安心して入稿するには、PDF/X-1 で検証された PDF にすべき。でも、これは Adobe 社謹製の何かを使わないと実現できないんじゃないかしら。つまり、Debian だけではできなくて、Adobe Acrobat Professional 7.0 がインストールされた Win/Mac マシンで行わなければいけないと思われる。

基本的には、まず上記の方法で生成した PDF ファイルを Adobe Acrobat Professional 7.0 で開き、PS で保存し直す。それから、その PS ファイルを Adobe Acrobat Distiller 7.0 で PDF/X-1 に変換すればよい。

ただし、上述した方法で OpenType フォントを埋め込んだ PDF を生成しても、その PDF ファイルには欧文基本14書体は埋め込まれていない。したがって、Win/Mac マシンに英文のフォントがそれなりに入っていないと、Distiller による PDF/X-1 への変換でこける可能性がある(Helvetica みたいな Win マシンには標準で入っていない欧文書体は特に注意が必要な気がする)。
数式も注意。cmやamstexなどのTeXにしかないフォントを dvipdfmx がどう扱っているのか知らない。PDF に埋め込まれていたり、ビットマップに変換したりしているのでない限り、要注意かも。自分の環境では、Win マシンにもごっそり TeX の数式フォントを入れていることもあって(Illustrator とかで使いたいし)、それがなかった場合にどうなるかは検証していない。

2006/03/05

* なんで確率は 0 以上 1 以下 なのさ
http://yowaken.dip.jp/tdiary/20060305.html#p02

という疑問に呼応した次の話が面白い。

* 確率分布間の「距離」
http://wiki.fdiary.net/lacs/?Pr.App

たしかに、確率0.1と0.2の違いは、感覚的に0.4と0.5の違いとは違う。それをこんなふうに定式化して説明してもらえると、思わず「ぎゅう」ってなっちゃう。

ところで、この話は「確率が 0 以上」であるひとつの解釈にはなるけれど、「確率は 1 以下」の解釈にもなっているのだろうか(読みとれないのは自分の力量不足……)。実は、ょゎさんの疑問を見たとき「測度なんだから 0 以上じゃないと上手くねぇ」と脊髄反射してしまいそうになって、「でも測度なら [0, ∞] でも(のほうが)いいんじゃね?」と自問自答。それだと気持ち悪いくらいしか反論がない。

もしかして、ょゎさんの気持ちは [0, 1)∪{∞} か?
# じょうだんですって
こういう働きをするフィルタがほしい。
((a 1) (b 2) (a 3) (c 1) (d 0) (a 4) (c 5) (b 6))

((a 8) (b 8) (c 6) (d 0))

ようするに、同じタグを持つ要素をまとめ(この場合は加算)させたい。その心は、タグ=>多項式の各項の変数、要素=>多項式の各項の係数とみなして、リスト全体で多項式を定義すれば、こういうフィルタを使って多変数多項式の代数演算システムが構築できるはず。つまり、SICPのex.2.92が解けるはず。
(define (M-filter equ? proc ls)
(let ((L (merge-if-equ-with-car equ? proc ls)))
(if (null? (cdr L))
(merge-if-equ-with-car equ? proc L)
(cons (car L)
(M-filter equ? proc (cdr L))))))

(define (merge-if-equ-with-car equ? proc ls)
(letrec
((head (car ls))
(foot
(let M ((a (car ls))
(rest (cdr ls)))
(cond ((null? rest)
'())
((equ? a (car rest))
(let ((a (proc a (car rest))))
(set! head a)
(M a (cdr rest))))
(else
(cons (car rest)
(M a (cdr rest))))))))
(cons head foot)))
うまくないなあ。つーか、このex.2.92の時点で set! を使うのは、問題の回答としていけないような気もする。でも、"The Seasoned Schemer" の 16th Commmandment(set!はletで束縛している名前にだけは使ってもいい)は破ってないので、よしとすることにしよう。ちっとも先に進まないし。
(M-filter (lambda (a b) (equal? (car a) (car b)))
(lambda (a b) (list (car a) (+ (cadr a) (cadr b))))
'((x 1) (xy 2) (x 3) (y 4) (z 5) (y 6) (xy 5)))

=>((x 4) (xy 7) (y 10) (z 5))

このリストをもってして 4x + 7xy + 10y + 5z を定義するということ。多項式どうしの加算は append して M-filter、積は car 同士および cadr 同士かけたものを combination して M-filter すればいいっしょ。あとは、x^2*y と y*x^2 とかがちゃんと #t になるように変数と equ? を定義して、それらをまとめて代数演算パッケージと連係するようにパッケージ化するだけ。


やあ、ようやく佐川急便が来たよ。これで会社にいける。
佐川のWebにある「お荷物問い合わせ24時間サービス」では、今ごろ大阪から札幌に転送されていることになっている荷物なんだけど、なんとか無事に届いたね。

2006/03/03

こんなことをしている場合ではないという瞬間がたくさんある。時間をへたくそに浪費しているとき、不本意な問題で労役を強いられているとき、自分は思っているほどにさえ何もできないと感じたとき、突き進んでいる人を見るとき、それから、毎日の16:00。
べつやくれいと小島麻由美の親近性について
  • かわいらしい(重要)
  • シュール
  • 異次元(超重要)


上の2つだけだと、ただの奈良美智どまり

2006/03/01

ただの備忘録。

debian では、crontab ではなく、cron.*(cron.daily/, cron.hourly/, cron.monthly/, cron.weekly/)以下に定期的に実行したいコマンドをおいておく。ただし、コマンドの名前にドット(.)が含まれているものは実行されない。これで何日分のログが反映されていなかったことか……