メッセージ。 - diary
2006-03-09
# ファイルを新しい順にリストアップしたい(絶対パス付きで)
あるディレクトリに存在するファイルのうち、新しいものにgrepコマンドをかけたい場合、どうすればいいの? 「最近使ったファイルのほうが、価値が高い」メソッドで、ファイルを探そうとしているのだけど、うまくいかない……。
新しいファイル100件の「ファイル名」をリストアップして、それをgrepの引数に渡すだけなんだけど……。「ファイル名」をリストアップするときに、lsコマンドでは絶対パスをうまく作れない(findを使えばよさそうだけど、「あるディレクトリ」にはファイルがたくさんありすぎるので、検索に余計な時間のかかるfindを使いたくないのです)。
$ for i in `ls -t ~/repository | head -100`
do
grep "test" ~/repository/${i}
done
でうまくいきそうなのに、ダメ。
しかたないから、とりあえずGaucheで書くけど。
#!/usr/bin/env gosh
(use util.list) ;; take*
(use file.util) ;; directory-list
(define (usage)
(display "USAGE: lsrecent.scm directory\n" (current-error-port))
1)
(define (lsrecent dir num)
(for-each
(lambda (e) (print e))
(map (lambda (e) (cdr e))
(take* (sort (map (lambda (file)
(cons (file-mtime file :follow-link? #t) file))
(directory-list dir :children? #t :add-path? #t))
(lambda (x y) (> (car x) (car y))))
num)))
0)
(define (main args)
(let1 num 100
(if (= (length (cdr args)) 1)
(lsrecent (cadr args) num)
(usage))))
これをlsrecent.scmというファイルに保存して「chmod u+x ./lsrecent.scm」。次のように実行する。
$ ./lsrecent.scm ~/repository/ | xargs grep "test"
ふぅ。1時間ぐらいかかったかな? lsにオプションが1つあれば済むのに……(とかいいつつ、本当はきっともっと、うまい方法があるんだろうなぁと思う)。
新しいファイル100件の「ファイル名」をリストアップして、それをgrepの引数に渡すだけなんだけど……。「ファイル名」をリストアップするときに、lsコマンドでは絶対パスをうまく作れない(findを使えばよさそうだけど、「あるディレクトリ」にはファイルがたくさんありすぎるので、検索に余計な時間のかかるfindを使いたくないのです)。
$ for i in `ls -t ~/repository | head -100`
do
grep "test" ~/repository/${i}
done
でうまくいきそうなのに、ダメ。
みたいに言われる。どうもgrepコマンドを実行する前に、~/repository/ と ${i}の展開・結合処理をしてくれていないみたいなんだよなぁ。grep: /home/fujisawa/repository/1141380955.0: そのようなファイルやディレクトリはありませんgrep: /home/fujisawa/repository/1141380954.0: そのようなファイルやディレクトリはありません
しかたないから、とりあえずGaucheで書くけど。
#!/usr/bin/env gosh
(use util.list) ;; take*
(use file.util) ;; directory-list
(define (usage)
(display "USAGE: lsrecent.scm directory\n" (current-error-port))
1)
(define (lsrecent dir num)
(for-each
(lambda (e) (print e))
(map (lambda (e) (cdr e))
(take* (sort (map (lambda (file)
(cons (file-mtime file :follow-link? #t) file))
(directory-list dir :children? #t :add-path? #t))
(lambda (x y) (> (car x) (car y))))
num)))
0)
(define (main args)
(let1 num 100
(if (= (length (cdr args)) 1)
(lsrecent (cadr args) num)
(usage))))
これをlsrecent.scmというファイルに保存して「chmod u+x ./lsrecent.scm」。次のように実行する。
$ ./lsrecent.scm ~/repository/ | xargs grep "test"
ふぅ。1時間ぐらいかかったかな? lsにオプションが1つあれば済むのに……(とかいいつつ、本当はきっともっと、うまい方法があるんだろうなぁと思う)。
# もうすぐ中年に差し掛かる男どもが「王子様・お姫様ゴッコ」
東京・秋葉原で可愛らしいメード姿のお嬢さんからチラシをもらった。「新しいカウンタースタイルのメード喫茶です!」。俗にいうコスプレ喫茶? 10代に見えるメード嬢が「お帰りなさい」と優しく迎え、ご主人様(客)は彼女と楽しい話?をする。Hな店ではない。「こんな中年男が行っても良いのかな?」と聞いたら、彼女「お爺(じい)さんも来てますよ。平気! 平気!」。 「でも、普通は10代、20代がお客なんだろう?」と聞くと「そうかなあ? 30代も多いじゃん」。30代? もうすぐ中年に差し掛かる男どもが「王子様・お姫様ゴッコ」をしているのか。不気味だ。
なかなか面白い指摘。反論をすると、現実がリアリティを失ってるんだよ。この人のように、「Hな店」や「身を固める」という価値観が、最近ではリアルじゃなくなってきている。そういうものが、インセンティブを失っている。だから若い人は、そういうものを昔の人ほど欲しがらないんじゃないかなぁ。Hな店に行くことや身を固めることでは、人間の中にある空虚ななにかを埋められ(そうに)ない。いまの人たちは、そういうことに気付いてしまった。不気味なのは、オタクじゃなくてむしろ現代であり、現実なんだ。
# そして、「リアリティを失う」=「相対化」でもあるね。
# プログラミングは難しいよ? というお話
プログラミングは難しいよ?というお話。友達が「プログラミングを勉強してみようかなぁ」と言っていたので。
初めてぼくが、「プログラミング」というものに手を出したのは、春になって大学生というものになったことがきっかけだった。コウガクブ(工学部)のジョウホウコウガッカ(情報工学科)に席を持つぼくにとって、それは興味の対象であり、習得必須技術のようだったからだ。
それまでぼくは、プログラミングはおろか、コンピュータにろくすっぽ触ったことすらなかったのだけど、それはジョウホウコウガッカではあまり褒められたことではないようだった。同級生には、パソコンマニアのような人が何人もいたし、授業もなにがしかその方面のスキルを期待して編成されていた。
とはいえ、情報工学科にもコンピュータのことを知らない生徒はたくさんいた。コウガクブにしては女性も多かったし、「パソコンのスキルとガクモンとしての情報工学はチガウ」ということで、スキルのバラつきは許容される雰囲気があったと思う。
そんななか、ぼくもいざ、コンピュータのことを学ぶことにした。とくにプログラミングというのは、ゲームを作るのにもロボットを動かすのにも必要なギジュツだ。ダイガクというからには、うちの親父が持ってるPC-9800などというようなパソコンとは、全然違う高度なことができるのだろう。ぼくは喜び勇んだ。最初は。
でも、やってみると、それは目も覆いたくなるような惨憺たるものだった。ぼくが使えることになった「わーくすてーしょん」というこんぴゅーたは、親父のPC-9800より「高度」だとはとても感じられず、しかもその「わーくすてーしょん」の中で、何が起こっているのかさっぱり、まるっきり、一向に、かけらさえ、とにかく分からなかった。
システムにログインすると、大きな画面に無愛想な白い箱が描かれ、そこに豆つぶほどの文字を打ち込んで、なにがしかの作業をするのだ。実習と銘打たれた授業の最初のほうで、「どこそこのシステムにログインし、『ls -lR』というコマンドを打ち込んで 『ls-lR』というファイルに保存、それを先生に(電子メールなどで)提出しろ」というものがあった。
「ナンダコレハ?」。さっぱり分からなかった。すべてが! これの何が面白くて、何が学ぶべきことがらなのか。まるで見知らぬ外国で、いきなり一人ぼっちにされたみたいだった。見るものすべてが意味不明で、周りの誰もが、違う国の人のようだった。同級生は誰も助けにならなかったし、先生は外見も内面も宇宙人かなにかにしか見えなかった。
なんてこった。悪い夢だと言ってくれ! こんなところでぼくは4年間を過ごすのか? しかももっとひどいことに、その4年の後にも、ぼくの人生はずっと、この場所から続いていく!
(つづく(と思う))
初めてぼくが、「プログラミング」というものに手を出したのは、春になって大学生というものになったことがきっかけだった。コウガクブ(工学部)のジョウホウコウガッカ(情報工学科)に席を持つぼくにとって、それは興味の対象であり、習得必須技術のようだったからだ。
それまでぼくは、プログラミングはおろか、コンピュータにろくすっぽ触ったことすらなかったのだけど、それはジョウホウコウガッカではあまり褒められたことではないようだった。同級生には、パソコンマニアのような人が何人もいたし、授業もなにがしかその方面のスキルを期待して編成されていた。
とはいえ、情報工学科にもコンピュータのことを知らない生徒はたくさんいた。コウガクブにしては女性も多かったし、「パソコンのスキルとガクモンとしての情報工学はチガウ」ということで、スキルのバラつきは許容される雰囲気があったと思う。
そんななか、ぼくもいざ、コンピュータのことを学ぶことにした。とくにプログラミングというのは、ゲームを作るのにもロボットを動かすのにも必要なギジュツだ。ダイガクというからには、うちの親父が持ってるPC-9800などというようなパソコンとは、全然違う高度なことができるのだろう。ぼくは喜び勇んだ。最初は。
でも、やってみると、それは目も覆いたくなるような惨憺たるものだった。ぼくが使えることになった「わーくすてーしょん」というこんぴゅーたは、親父のPC-9800より「高度」だとはとても感じられず、しかもその「わーくすてーしょん」の中で、何が起こっているのかさっぱり、まるっきり、一向に、かけらさえ、とにかく分からなかった。
システムにログインすると、大きな画面に無愛想な白い箱が描かれ、そこに豆つぶほどの文字を打ち込んで、なにがしかの作業をするのだ。実習と銘打たれた授業の最初のほうで、「どこそこのシステムにログインし、『ls -lR』というコマンドを打ち込んで 『ls-lR』というファイルに保存、それを先生に(電子メールなどで)提出しろ」というものがあった。
「ナンダコレハ?」。さっぱり分からなかった。すべてが! これの何が面白くて、何が学ぶべきことがらなのか。まるで見知らぬ外国で、いきなり一人ぼっちにされたみたいだった。見るものすべてが意味不明で、周りの誰もが、違う国の人のようだった。同級生は誰も助けにならなかったし、先生は外見も内面も宇宙人かなにかにしか見えなかった。
なんてこった。悪い夢だと言ってくれ! こんなところでぼくは4年間を過ごすのか? しかももっとひどいことに、その4年の後にも、ぼくの人生はずっと、この場所から続いていく!
(つづく(と思う))
# 「Wiki」っていうからみんな使わない説
kokepiの日記 - 「Wiki」っていうからみんな使わないんだ。「まとめサイト」って言えばいい
なるほどねぇ。それはあるかもしれないね。
なんつーか、名前重要もだけど一歩進めて。レイヤーを変えるというか抽象化するというか、別レイヤーで具象化するというか。
「Wiki」っていうから、いろいろ小難しいことが気になるのかもしれない。「まとめサイト」を作ろうっていったら、記法とかやるべきこととかを気にしなくてよい気がする。そういうことなんかもしれん。そういえば誰かが、「なんでもできる」ということは「なにもできないこと」だと言っていたなぁ。桶さんだったっけかなぁ。
なるほどねぇ。それはあるかもしれないね。
なんつーか、名前重要もだけど一歩進めて。レイヤーを変えるというか抽象化するというか、別レイヤーで具象化するというか。
「Wiki」っていうから、いろいろ小難しいことが気になるのかもしれない。「まとめサイト」を作ろうっていったら、記法とかやるべきこととかを気にしなくてよい気がする。そういうことなんかもしれん。そういえば誰かが、「なんでもできる」ということは「なにもできないこと」だと言っていたなぁ。桶さんだったっけかなぁ。
2006-03-08
# たつをさんがCNETでブログを!
2006-03-07
# もしきみが、それを良くしたいと本気で思っているのなら
全然話は違うように聞こえるかもしれないけど、先日二十代前半の友人と話していたら、彼がこう言った。「うちの会社は経営が下手すぎる。もっと上手くやれるはずだ」。だけどぼくは、違うと思うのだ。そんなことを言っていてもしょうがない。ぼくはこう答えた。
『たとえば、いま世の中に、うまくいっていない夫婦はたくさんいる。もしかしたら、半分以上の夫婦がうまくいっていないかもしれない。これはなぜだろう? 外にいて「もっと上手くやれるはず」なんて言うのは簡単だ。だけど、現実に自分がその立場に立ったら、ほとんどの人はうまくやれない。そして、会社というのも同じなんだ。夫婦というのは組織であり、会社も組織なんだよ』
そして、組織とはシステムのことだ。この例と照らし合わせてみると、会社がうまく行かないのは自然なことだし、(情報)システムがうまく行かないのも、それと同じだけ当たり前のことのように思える。じゃあ、そんななかでシステムや会社をうまく行かせるにはどうすればいいのか。
ぼくだってどうすればいいかなんて分からないけど、でも言いたいのはこういうことだ。「ここで文句を言っていてもしょうがないよ。『こうすればよい』と思うことがあるならば、そう行動してみよう。あなたはその組織の一員なのだから。組織を良くしたいのなら、そのために行動する権利があるし、義務さえあるかもしれない。とにかく、ここでクダを巻いていないで、やってみよう。もしきみが、それを良くしたいと本気で思っているのなら」。
『たとえば、いま世の中に、うまくいっていない夫婦はたくさんいる。もしかしたら、半分以上の夫婦がうまくいっていないかもしれない。これはなぜだろう? 外にいて「もっと上手くやれるはず」なんて言うのは簡単だ。だけど、現実に自分がその立場に立ったら、ほとんどの人はうまくやれない。そして、会社というのも同じなんだ。夫婦というのは組織であり、会社も組織なんだよ』
そして、組織とはシステムのことだ。この例と照らし合わせてみると、会社がうまく行かないのは自然なことだし、(情報)システムがうまく行かないのも、それと同じだけ当たり前のことのように思える。じゃあ、そんななかでシステムや会社をうまく行かせるにはどうすればいいのか。
ぼくだってどうすればいいかなんて分からないけど、でも言いたいのはこういうことだ。「ここで文句を言っていてもしょうがないよ。『こうすればよい』と思うことがあるならば、そう行動してみよう。あなたはその組織の一員なのだから。組織を良くしたいのなら、そのために行動する権利があるし、義務さえあるかもしれない。とにかく、ここでクダを巻いていないで、やってみよう。もしきみが、それを良くしたいと本気で思っているのなら」。
# 情報システムの本質と、社会への適用
2005年後半から2006年初頭にかけての事件と情報教育の関連に関するコメント
非常に質の高いコメント。正論だと感じた。
ただし、まだ煎じ詰めることができると思う。この文章では、情報技術をめぐる昨今の事件について、その原因を「情報処理と情報システムの原理に対する理解の欠如」として、問題を解決するために「国民全体の『情報水準』の底上げ」が必要であるとしている。
方向性としては同意だ。
でもぼくは、国民全体の「情報水準」は、期待したほど高められないように思う。情報システムの本質というものを理解するのはとても難しいことだからだ。言うまでもなく人間の能力にはバラツキがあり、思想や習慣もかなり違う。ものごとの本質を理解する力、あるいは何に価値を見出すかも人によってさまざまだ。
この文章に書かれている言葉、「情報システムは作った人と同程度にしか信用できない」、「重要な情報システムを維持する企業の責任者(CIO)は、(中略)その成果に対して応分の責任を取れる人材であるべきである」といった指摘は秀逸だと思う。しかし、いくら高度な教育を施したところで、この秀逸な指摘を肚の底から理解し、実践できる人材はなかなか育たないのではないだろうか。
人間には向き不向きというものがあり、情報システムというものだけにそれほどの教育コストを割けないだろうと考える。かりにこのような理解をできる人材がいたとしても、それを活かせる組織であるとは限らない。情報システムに起因した問題を起こりにくくするためには、情報システムに対する理解だけでなく、コミュニケーション能力や信頼関係、目的共有と執行能力をかなり高度に保つ必要がある。人間と組織の歩留まりをそこまで高めるのは不可能だ。
では結局どうすればいいか。何が問題で、どう解決すべきなのか。それはぼくにもよく分からないけど、少なくとも情報システムの構築・保守コストが、いま一般に考えられているよりもかなり高いことをまず明らかにして、それを社会が理解すべきだと思う。そして、
(1)情報システムに誤りが含まれていてもそのミスを回復できる(フィギュアスケート採点ミスなんかは、コーチや視聴者からの情報でミスを発見できるし、その時点で人手で再計算すればよい。あるいは複システム化と組み合わせるとか。というか、最初から人手でやったっていいんじゃない?)
(2)ミスを回復できない情報システムならば、十分たくさんの人間をミス回避のために投入する(東証の誤発注では、1つの業務に対して複数の部署を用意しておき、それらの発注内容が同期したときだけシステムにコマンドが投入されるとか)
といった仕組みを作るべきなんじゃないかと考える。また、
(3)必要のないところは情報システム化しない。あるいは、ユーザーができるだけ情報システムを使用しない(情報システムは梃子だ。それを使うことで効率化できる。しかし、効率化できるということは、効率的に損失を出せるということでもある。人間が十分気を付けて使えば、得るものもあるだろう。しかし気を付けるコストが割けないのなら、痛い目に合うこともあるだろう。不要なところでは情報システムを使わないこと。必要なところでは、十分気を付けられる人的コストをそこに割くこと)
も効果があるか。
などと愚行する。つらつらと書いてみたが、本当はこんな対策じゃ問題は解決できないかもしれない。もっとちゃんと、本質は何かを(みんなで)考え、(みんなで)理解する必要があると思う。この問題の本質を解明するためには、まだまだ知恵が必要であり、それにかけるコストは十分ペイしうる。今後も情報システムは使われるだろうから。
非常に質の高いコメント。正論だと感じた。
ただし、まだ煎じ詰めることができると思う。この文章では、情報技術をめぐる昨今の事件について、その原因を「情報処理と情報システムの原理に対する理解の欠如」として、問題を解決するために「国民全体の『情報水準』の底上げ」が必要であるとしている。
方向性としては同意だ。
でもぼくは、国民全体の「情報水準」は、期待したほど高められないように思う。情報システムの本質というものを理解するのはとても難しいことだからだ。言うまでもなく人間の能力にはバラツキがあり、思想や習慣もかなり違う。ものごとの本質を理解する力、あるいは何に価値を見出すかも人によってさまざまだ。
この文章に書かれている言葉、「情報システムは作った人と同程度にしか信用できない」、「重要な情報システムを維持する企業の責任者(CIO)は、(中略)その成果に対して応分の責任を取れる人材であるべきである」といった指摘は秀逸だと思う。しかし、いくら高度な教育を施したところで、この秀逸な指摘を肚の底から理解し、実践できる人材はなかなか育たないのではないだろうか。
人間には向き不向きというものがあり、情報システムというものだけにそれほどの教育コストを割けないだろうと考える。かりにこのような理解をできる人材がいたとしても、それを活かせる組織であるとは限らない。情報システムに起因した問題を起こりにくくするためには、情報システムに対する理解だけでなく、コミュニケーション能力や信頼関係、目的共有と執行能力をかなり高度に保つ必要がある。人間と組織の歩留まりをそこまで高めるのは不可能だ。
では結局どうすればいいか。何が問題で、どう解決すべきなのか。それはぼくにもよく分からないけど、少なくとも情報システムの構築・保守コストが、いま一般に考えられているよりもかなり高いことをまず明らかにして、それを社会が理解すべきだと思う。そして、
(1)情報システムに誤りが含まれていてもそのミスを回復できる(フィギュアスケート採点ミスなんかは、コーチや視聴者からの情報でミスを発見できるし、その時点で人手で再計算すればよい。あるいは複システム化と組み合わせるとか。というか、最初から人手でやったっていいんじゃない?)
(2)ミスを回復できない情報システムならば、十分たくさんの人間をミス回避のために投入する(東証の誤発注では、1つの業務に対して複数の部署を用意しておき、それらの発注内容が同期したときだけシステムにコマンドが投入されるとか)
といった仕組みを作るべきなんじゃないかと考える。また、
(3)必要のないところは情報システム化しない。あるいは、ユーザーができるだけ情報システムを使用しない(情報システムは梃子だ。それを使うことで効率化できる。しかし、効率化できるということは、効率的に損失を出せるということでもある。人間が十分気を付けて使えば、得るものもあるだろう。しかし気を付けるコストが割けないのなら、痛い目に合うこともあるだろう。不要なところでは情報システムを使わないこと。必要なところでは、十分気を付けられる人的コストをそこに割くこと)
も効果があるか。
などと愚行する。つらつらと書いてみたが、本当はこんな対策じゃ問題は解決できないかもしれない。もっとちゃんと、本質は何かを(みんなで)考え、(みんなで)理解する必要があると思う。この問題の本質を解明するためには、まだまだ知恵が必要であり、それにかけるコストは十分ペイしうる。今後も情報システムは使われるだろうから。
# ザウルスSL-C3200、発売
パーソナルモバイルツール“ザウルス”<SL-C3200>を発売 | ニュースリリース:シャープ
ハードディスクが6GBになったらしい。メモリ容量は64MBのまま。新しいのが出るのはうれしいけど、うえーん、メモリ増やしてよ〜。絶対買うから。
ハードディスクが6GBになったらしい。メモリ容量は64MBのまま。新しいのが出るのはうれしいけど、うえーん、メモリ増やしてよ〜。絶対買うから。
2006-03-06
# ロボットラバ、すごい
ロボットラバが開発されたとのことだけど、これすごいねぇ……。本当に生きているみたい。いろいろ想像しちゃったよ。
というコメントもあるけど、むしろ四足歩行の動物はたいていこういう足の形をしているよね? 画像を見て、あらためて発見した気がした。人間でいうと向かい合わせなんだなぁって。そのほうが安定するのかなぁ。上方向に立ち上がるには、この足の構造のほうが合理的な気がするけど。
前後左右の安定性を考慮した結果「人間向かい合わせ」っていう結論に達したってワケですかね。
というコメントもあるけど、むしろ四足歩行の動物はたいていこういう足の形をしているよね? 画像を見て、あらためて発見した気がした。人間でいうと向かい合わせなんだなぁって。そのほうが安定するのかなぁ。上方向に立ち上がるには、この足の構造のほうが合理的な気がするけど。
# ピーッ。
2006-03-04
# Debianと格闘中
ぐえー。Debianを使ってると、たまに息苦しくって死にそうになる。
apt-getでGaucheをインストールしたら、Segmentation Fault。バージョンも0.8.3-3ということで、まぁそんなもんかな、やっぱ自分でコンパイルするべとgccをインストールしたんだけど、やっぱりダメ。./configureで「C compiler cannot create executables」とか言われる。で、ためしにhello.cを書いてコンパイルを試みる。
$ cat > hello.c
#include <stdio.h>
int main(void) {
printf("hello, world!\n");
return 0;
}
^d
$ gcc hello.c
hello.c:1:19: stdio.h: No such file or directory
まぁそうなんだろうなぁとは思うけど。どうすればstdio.hをインストールできるのでつか? orz orz orz。くだらないことができないとほんと腹立つのり!
追記:お。dselectで「Std libdevel libc6-dev」をインストールしたらhello.cはコンパイルできたぞ。
追記:やった! configureは通った。で、makeって実行したらこんどは「make: command not found」ですよ。笑っちゃった。
さらに追記:どうも、Segmentation Faultの原因はアーキテクチャとGaucheの相性にある気がしてきた。CPUは「XScale-IOP8032x Family rev 0 (v5l)」(XScale/400MHz)を使っているのだけど、普通のarmではないのかもしれない。要調査。
apt-getでGaucheをインストールしたら、Segmentation Fault。バージョンも0.8.3-3ということで、まぁそんなもんかな、やっぱ自分でコンパイルするべとgccをインストールしたんだけど、やっぱりダメ。./configureで「C compiler cannot create executables」とか言われる。で、ためしにhello.cを書いてコンパイルを試みる。
$ cat > hello.c
#include <stdio.h>
int main(void) {
printf("hello, world!\n");
return 0;
}
^d
$ gcc hello.c
hello.c:1:19: stdio.h: No such file or directory
まぁそうなんだろうなぁとは思うけど。どうすればstdio.hをインストールできるのでつか? orz orz orz。くだらないことができないとほんと腹立つのり!
追記:お。dselectで「Std libdevel libc6-dev」をインストールしたらhello.cはコンパイルできたぞ。
追記:やった! configureは通った。で、makeって実行したらこんどは「make: command not found」ですよ。笑っちゃった。
さらに追記:どうも、Segmentation Faultの原因はアーキテクチャとGaucheの相性にある気がしてきた。CPUは「XScale-IOP8032x Family rev 0 (v5l)」(XScale/400MHz)を使っているのだけど、普通のarmではないのかもしれない。要調査。