SBCL 1.0.55 と clx

ずっとアップグレードをさぼって Ubuntu 10.04 を使い続けてきた自宅 PC をさっきようやく 12.04 にしました。

再起動したら stumpwm が起動しなかったので .xsession-errors を見たら

debugger invoked on a ASDF:COMPILE-ERROR in thread
#:
Error while invoking # on
#
;
; compilation unit aborted
; caught 1 fatal ERROR condition
; caught 1 STYLE-WARNING condition

なんかコンパイルに失敗したらしい。

えー(めんどくさい)と思いながらちょっと調べたら http://lists.gnu.org/archive/html/stumpwm-devel/2012-03/msg00024.html が出てきました。そこにあるパッチをあてたらちゃんと起動しました。どうやら SBCL 1.0.55 で起きるエラーのようです。

ところでしばらく Lisp をあまり触っていなかったら #+ とか懐かしい感じがしますね。

その先に何があるのか

ふと,ある後輩の話していたことを思い出した。当時,僕が三回生で彼が二回生だったと思う。時期は忘れてしまったが,冬だったような気がする。違ったかもしれない。

彼が言うには,大学に入ってからずっと数学を勉強しているが,この先に何があるのかまったく見えてこない,のだそうだ。高校生のころは,大学に入ってもっと数学を勉強したら,視界がパーッと開けてくるのだと思っていた。しかし実際に大学に入ってからこれまで,数学を勉強しているけど,この先に何が見えてくるのかまったく分からないし,視野が開けた感じもしない。正確な言葉は覚えていないが,そんなことを言っていたような記憶がある。

その時,僕には彼の言うことがよくわからなかったし,何も言うべきことは浮かんでこなかった。*1

でも今ならその気持ちは何となくわかる気がするし,どうして自分が当時それをわからなかったのかもわかるような気がする。たぶん,僕は数学に接していても何かを見ようという意志を持ってはいなかった。でもその後輩は,何かを見ようとしていたんだと思う。だから先が見えてこないことに,満たされないような思いを抱いたんだと思う。

授業の時間になったら教室に行って,ぼんやりと話を聞きながら適当に黒板に書かれたことを書き写して,演習の時間に与えられた問題をひたすら解く。考えてみれば,僕がやっていたことはそれだけだった。たまに図書館などで教科書を手にとって眺めることはあったし,時には手に取った本を借りてきて読むこともあったけど,基本的にはカリキュラムにより与えられた以上のことはほとんどやっていなかった。だから,僕は自分から積極的に何かを見ようとはしていなかったのではないかと思う。まして,今やっていることの先に何があるか,なんてことはまったく気にしたことがなかったのだろう。

そういうのは,もったいなかったなあと思う今日このごろなのでした。

*1:その時,近くにもっと上の先輩もいたと思うけど,その先輩が何と言っていたか,残念なことにまったく覚えていない

計画を立てる能力の話

研究計画ってどう作るものなんだろう,ということをちょっと前に考えた。こういう目標があって,そのためにはこういう問題を解決するとよくて,それはかくかくしかじかの道筋を辿ることで達成できる,というわけでこれからこういう手順で研究を進めていく。たぶん,ふつう目にする研究計画はそんな感じに書かれているんじゃないだろうか。そういうのを読んだり,論文の書き方や研究発表のしかたについての本を見たりしていると,だんだんそういうものだというイメージができてくる気がする。

視覚的には,木構造のイメージだと思う。上に頂点があって,下へ向かって広がりながら伸びる図を想像する。一番上にあるのが,最終的な目標。下にあるのは,上位の目標を達成するために踏もうとするステップ。そして,研究計画というのは上から下へ向かう形で語られるものだ。実際に計画が作られる経過がどうなのかはともかく,少なくとも建前としては,計画というのはそういう姿をしているのが普通なんだと思う。つまり,完成した計画を見せるときは上から下へ向かう形で見せるものだということだ。

どうも自分には,そういうふうに計画を組み立てることができないんじゃないかと,何年か前から思っている。まず目標を定めて,それからそこへ向かって進んでいく,ということができない。そういうことをした経験も,記憶を探ってみてもあまり思い当たらない。漠然とした「こういう感じのことをしたい」はあるような気がするけど,そこから一歩進んで具体的な目標を定めるということがうまくできていないのだと思っている。木構造でいうと,かなり上のほうに位置するであろうノードは何となくあっても,そこから下へ向かって順に枝を伸ばすことができていない。

考えてみればいままでの研究の様子にもそういう傾向が表れている気がする。僕のこれまでの研究の流れは,上位目標のために下位の目標を立ててから一つ一つ積み重ねてゴールに到達する,という形にはなっていない。最初は末端に位置するごく細かい技術的なことから始まって,うまいこと上に登れそうだったら,どれ梯子をかけてみるか,となる。それでうまくいけば論文になることもある,という感じだ。上に位置するべき目標らしきものがろくに定まらないままあれこれやっている,という言い方もできるだろう。かなり上のほうには漠然とした目標があるといえばあるような気はするが,そのかなり上位の目標と,実際に今やっている末端の細かいこととの間には結構な隔りがある……ような気がする。少なくとも,木構造のイメージにあてはめようとすると隔っているように感じられる。中間に位置するべきものが欠けているのだ。今やっているこの作業が完成したらどうなるのか,ということがはっきりしていなくて,上と下がつながらないまま,運よくどこかにつながったらもうけもの,という感じでやってきたように思える。

ときどき,もうちょっとなんとかならないかなと思う。

backtrace が読めない

emacs でエラーが出たときに *Backtrace* バッファに表示されるトレース,日本語の部分が読めないのが前から気になってたので調べた。

debug-on-error を有効にして M-: から (error "えらー") を評価してみると

Debugger entered--Lisp error: (error "\x3048\x3089\x30fc")
  signal(error ("\x3048\x3089\x30fc"))
  error("\x3048\x3089\x30fc")
  eval((error "\x3048\x3089\x30fc"))
  eval-expression((error "\x3048\x3089\x30fc") nil)
  call-interactively(eval-expression nil nil)

こんなのが出る。

ソースコード追いかけてみたところ,debug.el で定義されている debugger-setup-buffer の中で (set-buffer-multibyte nil) しているので,そのせいで日本語はエスケープされてしまうらしい。

で,どう対処すればいいのかよくわからないけど,"\x3048\x3089\x30fc" みたいなところをコピーして別のバッファに移動して eval-expression するなりなんなりすれば "えらー" みたいに表示されて読めることに気付いた(multibyte なバッファでやらないと読めない)。これでいいことにしようか。

Project Euler unsolved problems

ここ数日久しぶりに Project Euler 解いてる気がする。せっかくなのでまだ解けてない問題を振り返ってみる。

  • 241 Perfection Quotients: これは相当な時間をかけてる気がしますけど,いったいどうやればいいのか見当もつかないでいます。素因数は 1.4e9 ぐらいまでしかない,程度のことしかわかっていないのでどうにも手がつけられない。
  • 252 Convex Holes: 幾何は得意でない。DP なのかなあと思って二,三日がんばってみた記憶があるけど,結局うまくいかなくて詰まってます。
  • 275 Balanced Sculptures: 適当に DP すれば出るのでは,と最初は思ったけど考えれば考えるほどややこしく見えてきました。
  • 289 Eulerian Cycles: なんかすごくがんばって漸化式を作ればできるんじゃないかと思いつつ,がんばりたくないのでやってない。
  • 295 Lenticular holes: 途中まで考えたけど,もうちょっと計算量落とさないといけないなあ,というところで放置しています。
  • 298 Selective Amnesia: 漸化式を立てるところまではできて,コードを書くのが面倒で放置しています。そんなに難しくはないんだと思います,たぶん。
  • 300 Protein folding: あんまり本気で考えた記憶がありません。方針はなんとなく見えてる気がします。
  • 314 The Mouse on the Moon: どうやるんでしょう。なんかよくわからない。
  • 319 Bounded Sequences: 確か規則性は見つけて,それであとはコード書くだけかと思ったらそこからができなかったような。
  • 322 Binomial coefficients divisible by 10: なんか忘れました。すぐできそうに見えたけど意外とそうでもなかったような記憶があります。10 でなくて素数なら簡単なような。
  • 324 Building a tower: あとはコード書くだけという状態のままずっと放置しています。なんだか面倒です。確か 298 と同じ感じ。
  • 325 Stone Game II: 確か必要十分条件は求まっていて,そういうものの個数を数える方法がわからないまま止まっています。
  • 328 Lowest-cost Search: 使われる数字は n から決まるなあとか細かいことはいろいろ調べた気がしますが,どうやったらバランスがとれるのかがよくわからず。
  • 331 Cross flips: 最適な手順はわかるけど,その手数を数える方法がわからない。
  • 353 Risky moon: 頂点数そんなに多くないだろうと思って Dijkstra してみたら遅かったので放置中。
  • 354 Distances in a bee's honeycomb: なんかよく覚えてませんが少しだけ計算して,可換環を振り回せばできるのでは,などと思っただけで放置した記憶があります。この週は用事があって忙しかったのであまり考えてなかった。
  • 355 Maximal coprime subset: これは同じ問題を昔考えて「たぶん解けないんじゃないの」という結論に至ったことがあるような気がします。解けるらしい。よく覚えてませんが,あんまり方針は見えてなかったのかも。
  • 360 Scary Sphere: 昨日あたりに考えて,だいたいの方針はできてる気がします。思ったより複雑になってしまったので例によってコード書くのが面倒。
  • 361 Subsequence of Thue-Morse sequence: なんとなく規則性がいろいろあるんじゃないかという気がしますけど,どのあたりに注目すればいいのか絞れてない感じです。

世の中は抽象的なものであふれている

僕みたいな人にとっては,コンパクトハウスドルフ空間とか完備ハイティング代数なんかよりも,政府とか法律とかのほうがずっと抽象的に見えてるんじゃないか,などと思ったことがある。

そういえば,竹内外史『集合とはなにか』には「政府という見たこともないものが税金をとって行くという抽象的な現代社会」という記述があった。お金だって考えてみればずいぶん抽象的なものだけど,そんなことは普段の生活の中で意識することがない。

僕がどうして政府とか法律とかそういう言葉を抽象的だなあと思いながら毎日を過ごしていないかというと,きっとそれらの言葉を耳にすること自体には慣れているのだ。政府がどうしたとか,法律がどうなるとかいう文章は新聞なんかを見れば入ってくる。内容をどこまで理解しているかはともかく,言葉だけは子供のころから見聞きしてきたものだから,深く考えることなしに「そういうものが世の中にはあるものなんだろう」という気分になれるんじゃないだろうか。どんなに抽象的だったり不可解だったり,中身を理解していなかったりすることであっても,表面だけ見慣れてしまえば何とも思わなくなるものなのかもしれない。

聞き慣れた言葉が実は実体のよくわからないぼんやりしたものだと気付いて驚く,というような経験は好きなので大事にしたい。世の中はよく見れば,きっとわからないものであふれていると思う。

oodraw から eps にエクスポート

beamer でスライド作っているときに,oodraw で作った図をエクスポートするのがめんどくさいなーと思ったのでスクリプト書いたら,いろいろとよくわからなくてそれはそれですごくめんどくさかったです。

でもこのへん参考にしたり真似したりしつついじってたらなんかできた。

つかいかた

oodraw で図を描いて doit を実行すると,元ドキュメントと同じディレクトリに eps ファイルができます。保存してなかったらホームディレクトリにできます。たぶん。

  • ページごとに別々のファイルになります
  • ページ名がファイル名になります
  • 全選択して「選択範囲(S)」にチェック入れてエクスポートしたような感じです

コード

もっと簡潔に書けないものか,と思うがいろいろとよくわからず。