[HOME]
■5/30/04 ジェンツー!!
Gentoo Linuxをインストールしてみました.興味はあったけど,なかなか入れる気が起こらなかったディストリ,それがGentoo.今まで数多くのLinuxをインストールしてきた.といってもRedHat系ばかりで,それ以外は2,3あるかないかってところ.僕がLinuxを使い始めた2000年はGUIインストーラが出始めた時で,Linuxをインストールするのは特に難しいことじゃなくなっていた(僕が最初にインストールしたのはTurbo6でこれにはGUIインストーラはなかったが).Vineなんかだと入れた後も簡単で,やることはActXとXMascotをインストールするくらいだ(…か?).しかしGentooはそんなに甘くはない.そもそもUnix触ったこと無い奴じゃインストールはできない.Linux歴はもうそろそろ4年になるが,最近はWindowsに忠誠を誓っているので,かなり苦労した.x86用のDarwinをインストールしたときも苦戦した記憶があるが,それ以上だ.しかしLFS(Linux From Scratch)ほどではないな.LFSは初期化スクリプト(?)も自分で書くし.そういえば,ぼくがGentooを知ったのってLFSに貂蝉…じゃなくて挑戦してたときだった.唯単にmake installするだけだと後で大変になると思って,パッケージシステムを使おうとしたが,rpmやdebはよくわからなかった.それでFreeBSDのportsを思い出し,それをLinuxで使えないかと思ったら,すでにそんなようなことをやっているところがあった.それがGentoo Linux.普通ならそこでGentoo Linuxを試すはずなのだが,如何せん我が家はそのとき56kモデム.ムリのムリムリじゃ.それに日本での情報は少なかった.まあ,そんなこんなでたぶん2年くらい.その間はVine使ったりFreeBSD入れたが1月も使わずに終ったりとかそんな感じ.LFSはもちろん途中で挫折.我が家がADSLを導入にしてからそろそろ1年.やっとGentooをインストールする時が来たわけだ.まあ,日本でも結構使われてるし,atzm氏も頑張ってるみたいだし,Gentoo導入はかなり楽になっていると思う(いろんな意味で).どうでも良いが,最近までゲントゥーと発音してた.さて,まだXすらインストールしてないし,日本語環境もまるでなし.ゆっくりやっていくかな.
■5/26/04 一斉射撃問題
ぼくには生涯の目標というのがいくつかある.フィネガンズ・ウェイクを原著で読むことや,ラテン語使いになることなどがそれである.その1つになりそうだったのが,一斉射撃問題を解くことだった.一斉射撃問題というのは,n人の兵士が,将軍の「発射!」という合図によって同時に射撃状態に入るには個々の兵士はどのような振る舞いをすれば良いか?といった感じの問題だ.条件として,将軍さまの声は左端の兵士にしか聞こえない.兵士は自分の両隣の兵士からしか情報を受け取れない.兵士は頭が悪いので数を数えることはできないし,振舞い方には限りがある.兵士はみんな同じ思考回路.一斉射撃の前に撃ってはならない.兵士を新たに加えても,兵士の振る舞いを変える必要はない.正確に言うと,「とある有限オートマトンがn個直列に並んでいるとき,左端のオートマトンに一度だけ指示与えてから適当な時間が経過したのち全てのオートマトンが同じ状態(これ以前にその状態になってはならない)になるようにその有限オートマトンを設計せよ.ただし,個々のオートマトンは両隣のオートマトンとだけ情報を交換でき,オートマトンはnに無関係.」この問題にであったのは今から3年以上前.それから,ずっと考えてきた.と言っても,毎日うんうん考えたわけではなくて,バスを待っているときや,歩いているときなどの暇つぶしとして,ほんとにたまに考えただけだけどね.全く解けなかったが,答えを調べることもしなかった.さすがに3年間も解けないと,もう解ける気もしない.ぼくにはムリのムリムリだと思い始めたが,それでも暇な時は考えていた.そんな感じで日々を過ごしていたら,一昨日,神の声が聞こえ,解き方が閃いた.ピカっとな.実際に正しいかJavaで確かめると,どうやら合ってるっぽい.3年間考えたわりには一度わかればあっさりと解けてしまうものなのだな.正直に話せば,Javaで確かめるのにものすごく苦労したのだが,もう眠いのでその辺はパス.まだ最適解にはほど遠いと思うが,もう満足.これ以上は考える気はありません.嬉しかったがちょっと寂しくもある今日この頃だ.
■5/8/04 MIL CD
対応だった.別に箱無くともだいたいのことはわかることが発覚.ドリキャスの裏側を見れば,何年製のかが大体わかるので,MIL CD非対応が発売(2000年12月かな?)される以前のなら,OKなのだ.型番3000なら平気と書いていたサイトもあったが,そこ以外では型番で見分けるという情報は見かけない.もし,型番でわかるなら,みんな書くと思うんだが…….まあ,よろしい.SHマシンが手に入ったのだから.
■5/7/04 ドリキャス
ひと月ぶりの日記だな.というか月記.
ドリキャス,かつてセガがソニーの牙城を崩さんと世に送り出した,たまに128ビット機とか書かれたり,言われたりもしたが,SH-4載っけてる正真正銘32ビットの家庭用ゲーム機だ.湯川専務のCMで話題になったが,発売直後から生産が遅れ,再び市場に現れた時には誰も見向きもしなかった,可哀想なマシン.セガはこれを最後に家庭用ゲーム機から撤退した.しかし,ドリキャスとは不思議なマシンで,セガが生産を打ち切ったあとにもソフトがでる.まあ,特殊なのばかりだけど.そんなのはどうでもよろしい.ドリキャスの売りはなんと言ってもLinuxやNetBSDが動くこと.というかCD-Rがブートできることだな.これはすばらしい.なんに使うかは分らんが,なんかできそうな気がしてくる.この話を初めて聞いた時も,ドリキャスが無性に欲しくなったっけ.ただ,全部のドリキャスでブート可能というわけではないらしい.MIL-CDというよく分らんCDが読み込み可能のものだけのようだ.中古で探すのも面倒だし,ドリキャスで特にやりたいのはサクラ大戦くらいしかないので,結局ドリキャスは買わなかった.あれから,何年たったであろう.たぶん3年くらいだが,ドリキャスを手に入れた.それも,1200円で.しかも,ジャンクじゃない.箱無しだったのでMIL-CD対応かどうかはわからなかったが,1200円なら買ってから調べても良いだろう.対応してなくても,遊べるし,今度行った時に売れてたらやだし.ちなみにスーファミは1500円,PS2のジャンクは3000円.さて,CD-Rをブートできるか調べるとするかな.結果は次回の日記を待て.たぶん,ひと月はかからんよ.
■4/8/04 時間割
時間割を作ってみた.しかも,LaTeXで.
通常版
みかちゃん版(フォント埋め込み)
↑はdvipdfmxでPDFにしたもの.ちなみに,ワシはみかちゃん版をプリントアウトして使うつもり.しかし,LaTeX慣れしてないとはいえ,結構時間かかったなあ.たぶん,3時間以上.ワードでやれば30分かからないだろうに...
それにしても,今期は大変そうだ.木曜日なんて全部埋まってるじゃないか!ちくしょー,必修多すぎるんだよお!!しかも,金曜は一コマのために学校行かなくちゃ行けないし.授業時間よりも通学時間の方が長いんだぞ.プロジェクトじゃなければ取らないんだがなあ.あ,プロジェクトに1年生来るかしら.1年生来なかったら,たぶんメンバー4人.他のプロジェクトよりダントツに面白いと思うんだがなあ,人が集まらん.3年前には1年生が20人以上入ったらしい(残ったのは1人だが).そんなにはいらないが,3人くらいは入ってもらわないと,授業がハイレベルになりすぎてついてけなくなるし,毎週のように発表しなくちゃならない.ヘタしたらプロジェクトが一番ハードな授業になるな.
■4/1/04 もう4月かあ
大学もそろそろ始まるなあ.結局,本はあまり読めなかった.というより,読まなかった.時間はあるのだが,読まなかった.いや,普通のエッセイや読み物系の本は10冊以上読んだのだ.雑誌もコラムは読んだし,広告も見た.全く読まなかったのはコンパイラ本.最適化には興味あるが,構文解析とかはちょっと苦痛.まあ,必要に迫られれば読むでしょう.

昨日,超兄貴完璧版上下が届いた.近所の本屋には見つからなかったから,bk1で買ったのだ.今まではamazonで買うことが多かったが,4〜6週間かかるとのこと.bk1は24hだったので,迷わずbk1で.超兄貴なんて普通に書店で買えるだろうと思っていたんだが,よくよく考えると,(ラブやんが人気とはいえ,)超兄貴を買うやつは少ない.よって,入荷も少ない.しかしながら,ファンは確実に買う.さらに,インパクトのある表紙だから,金に余裕のあるやつは衝動買いする可能性が高い.なるほど,パスカリーヌ並の俺の脳によると,書店で超兄貴をゲットできなかったのはこのような理由があったのだ.次からはしっかり予約しよう.
■3/6/04 読めるかなあ?
気がついたら,机の上に本が山積みだった.ここ一週間で雑誌3冊,本1冊買い,市立図書館から本を3冊借り,大学の図書館で2冊,学部の図書室から4冊借りた.さらに大学図書館の処分本を1冊もらう.内容はコンパイラ,計算物理,バス,LaTeX,スーパーコンピュータとかそんな感じ(ちなみにバスは吉祥寺を走ってるシャア専用バスのバスじゃなくてPCIとかね).なんか,こう見ると凄そうだが,ほとんどブルーバックスのような読み物.しかし,なかには「コンパイラT 原理・技法・ツール」のような見た目も中身も重厚な専門書もあるのだ.これは5,600円もする本なのでもちろん借りた.読めるかどうかわからないからね.じつは昔,古本屋で6,000円の本を買ったけど,途中で挫折したのだ.俺も少しは賢くなったのだな.うむ.まあ,とりあえず,ブルーバックスは休み中に全部読もう.コンパイラは最低でもパラパラめくろう.
■2/25/04 続・受験数学
よくよく考えてみれば数学でも定理という形で手続き抽象(?)されてるね.加法定理が使えなかったら,問題解くの大変だ.そういえば何年か前の東大の入試問題で加法定理を証明せよってのが出たっけ.難しくないけど,自分が受験生だったらちょっと嫌な問題だな.普通,受験勉強では定理は覚えるものであって,証明なんてどうでもいいものだから.微分法の定義なんかも同じ.どこかの大学の推薦入試で,面接の終りに微分法の定義を用いて微分してと言ったところ大抵の受験生ができなかったという話を聞いたことがある.高校での微分法は,確率や積分に比べれば簡単だと思われてるけど,しっかり理解してる人は少ないってことかな.規則は覚えてるから問題は解ける.だから,自分がわかってないことに気付かない.そう考えると問題を作る側にも責任がありそうだ.そういえば,最近は算数や数学の教科書から練習問題や章末問題の数が減っているらしい.無駄に多くの問題を解いても時間の無駄だが,十分問題を解かないのでは習ったことも身につかないと思う.僕も前は,コンピュータの本を読んでも,その本に載ってる問題をあまり解かなかった.問題を解かないから,はじめの方は本を読むペースも速いのだが,大抵途中でつまづく.そして,今まで読んだことが全く理解できてないことに気付き,結局,一から読み直すか,本を読むのをやめてしまう.問題をしっかり解くようになったのはK&Rの「プログラミング言語C」を読んでからだと思う.最初はただ本文を読み進めていったら,ポインタでやられた(もしかしたら,もっと前かも.いや,そうに違いない.5章までいけるとは思えない).それで,一から読み直したら,序文にプログラミング習得するにはプログラムを書くべしって書いてあった.じゃあ,プログラムを書こうと思ったが,何を書いたらいいのか良くわからなかったので,本にある問題を解くことにしたような記憶がある.その後,ポインタも何とか納得できて,あの本を読み終えることができたのだ(ポインタをしっかり理解したのはアセンブリ言語を勉強した後).基本的にアメリカの大学の教科書には多くの問題が章末にある.かの国では多くの問題を解かせる訓練式で学生を鍛えるらしい.僕が通ってるところも,アメリカを真似て,問題を多く解かせると言ってる教授がいて,プログラミングの授業がそうらしいのだが,なんか中途半端なような気がする.今まで,問題を解くことの有益性を,適当に書いてきたけど,ちょっと注意しなければならないこともある.例えば,問題を解けてもその事柄を真に理解してるわけではない.問題を解けるってのは理解の目安にはなるけど証拠にはならない.同じような問題ばかり解いてもしょうがない.解ける問題を解くのは気分が良いが,時間の無駄だ.あと,難しすぎる問題にも気をつけなくてはいけない.新しいことを学習中の身で,同じ問題を一週間も考えるのは正しい時間の使い方か?難問は解くというのは魅力があるらしいが(俺にはよくわからない),解けないと勉強する気なくすこともある.なんか,自分で書いてて耳が痛い.花粉症か?いや,花粉症で耳に症状が出たことは今までないぞ.まあ花粉症などどうでもよい.問題を解くのは色々大変だけど(それが教科書の練習問題であっても),これからも項を進めるという誘惑に負けずに問題をしっかり解いてきたいなあという俺の決意を書きたかったわけです.
■2/24/04 受験数学
プログラミングをしながらふと思ったのだが,プログラミングって受験数学に似てる.大学受験での数学の勉強の仕方は,天才でない限り,問題のパターンを覚える,いわゆる暗記数学がベストだ.覚えるパターンの数は600くらい.ただこれは人による.俺は600くらい覚えたと思う(同じようなパターンもあるから実際はこれより少ない.ちなみにこの数の根拠は「大学への数学・一対一対応の演習」の例題数).覚え方は,英単語の覚え方とは違って,愚直に問題を解きまくる.解いてくうちに自然に身につくといった方が良いかもしれない.また,暗記数学とは言っても,歴史や地理のように覚えただけでは問題は解けない.普通は同じ問題なんて出ないからね.とは言っても全く違う問題も出ない.どこかしら自分が知ってる問題パターンに似てるのだ.自分の持ってるパターンを如何に問題に応用するか.これが実際に問題を解くときには重要(注1).
この,基本的なパターンを身に着けて,それを応用して問題を解くってのはプログラミングでも同じだと私は思うのだ.文字コードがASCIIなら大文字に'a'を足せば小文字になるということを知っていて,標準入力から得た値をそのまま標準出力に書き込むというパターンを知っていれば,それを応用して,標準入力から入力された文字が大文字なら小文字にして標準出力に出力するといったプログラムが書けるのだ.(良い例えが浮かばなかった.要するに,基本的なデータ構造とアルゴリズムの理解とその応用がプログラミングの要,といことが言いたいのだ.)習得の仕方も同じだ.プログラミングも本を読んでるだけじゃダメで実際にプログラムを書かなくては上達しない.しかし,プログラミングでは関数やメソッドといったもので手続きを抽象化できるので,あらゆるパターンを覚える必要はない(注2).それに,受験とは違って何見てもいいし.
何が言いたかったかというと,プログラミングできるようになるのは時間がかかるということ.受験勉強でも数学は一番時間がかかると言われてる.しかも,ちょこっとやっただけじゃ身につかないとも.まあ,何事も焦らずにってことか?

注1:受験数学の基本その2.解けない問題は無理して解くな.解けるとこまで解いて部分点を稼ぐ(筆記の場合).これだと応用力はあまり関係ないね.実際,京大の入試でも部分点狙いの答案ばかりで困ってるというのを本で読んだ.

注2:抽象化できるからプログラミングの方が楽かというとそうでもない.抽象化もしっかり理解できなければ,無用の長物.再帰的な関数やメソッドは抽象的に考えられればそれほど難しくないが,考えられなければあれほど嫌なものはない.
■1/30/04 春休み
テストが終った.意外に難しいのが多かったが,単位を落とすことはなかろう.これから2ヶ月も休みがあるが,さて何したものか.未読の本でも適当に読むかな.
■1/9/04 日記
一ヶ月間借りっぱなしの本を返すために図書館に行く.来週から学校が始まるので,ついでに,電車の中で読む本を物色.クレイの伝記と湯川秀樹の自伝などを5冊借りる.どれもハードカバーなので通学用には適さないと後で気付く.帰りに床屋で髪を切る.いつもどおりボーズ.もみあげを切るかどうか悩むが,床屋の「もみあげは残しますか?」の質問に,何も考えず「はい」と答える.その後,ブックオフで立ち読み.特に読みたい本がない.友人からメール.バドミントンをすることに.シャトルが変形していてやりにくい.二時間ほどで終了.それから適当に遊ぶ.
■1/8/04 プレゼン
今日は朝からプレゼンの資料づくり.英語の授業のだから,もちろん英語.内容はコンピュータに関することで,私のグループは「ダイナブック」についてやる予定.ダイナブックといっても東芝のノーパソじゃなくて,アラン・ケイのであることは言うまでもない(こんな題材にしたのはオレであるのも言うまでもなかろう).他のグループはCPUとかウィルスとかそんな感じで,どこも一番楽な歴史系をやらなかったのは不思議だ.まあ,世界初のディジタルコンピュータとか世界初のパーソナルコンピュータとかってのは人によって変わるからな,ちょっとやり難いのかもしれない.とりあえず,後はパワポでスライド作ればOKだ.って結局全部オレが用意してるのか.う〜む,これはこれで他の奴は不幸だよな.やっぱり,自分で調べた方が何かと良いし.オレが知ってることをテーマにしたのが失敗だったか?
■1/1/04 謹賀新年
あけましておめでとうございます.今年も去年同様気楽にやらせてもらいます.とは言っても,そろそろ何かやらんとなあ.さすがに何かしら目玉がないと...まあ,それは追々考えるとして,とりあえず,今年はHDL,コンパイラをキーワードにやっていこう(あくまで予定だ!).もう回路図でCPUは書かないぞ!!
■12/21/03 コンピュータ本
64ビットSRT(Radix-2)除算器が一応できた.一昨日のプロジェクト(ゼミみたいな授業)で発表するはずだったんだが...

このあいだ,池袋のジュンク堂書店でコンピュータの名著・古典100冊って本を買った.本当はクヌースの本を買う予定だったが,ちょっと読めそうにないので,変わりにこっちを買ったのだ(前から買うかどうか悩んではいた).読んでみると知ってる本が結構多い.というか技術書関係はほとんど聞いたことある本だ.でしっかり調べてみると,読んだことある本が18冊,持ってる本が15冊.おお,我ながら読んでるなあ...って読破した本はほとんど歴史,人物,ドキュメンタリー本だけど.中には,持ってるのに全く読んでないのもあるし(冬休みに読む予定だ!).それにして,前書きにも書いてあるが,翻訳書が多い(僕が持ってる本のうち日本人によるものは一冊だけ).コンピュータがアメリカ生まれだから,歴史などの読み物系に翻訳書が多いのはしょうがないけど,技術書,特に入門書ならコンピュータがどこ産であろうと関係ないと思う.別に翻訳書が悪いわけじゃないが(中には読むに耐えないのもあるけど),ちょっと寂しい.ところで,この本には読者の感想,コメントというものがあって,すべての本にあるわけじゃないが,紹介されている本に対する一般の人からの感想,コメントが載っているのだ.これも意外に面白い.で,読み進んでいくと,どこかで読んだことのあるコメントが...おれのじゃないか!!そういや以前,コンピュータの名著とかそんなのに何か書いた気がする.困ったなあ,本に載るとは知らなんだ.知ってればあんなコメント寄せなかったのになあ.俺のせいで売り上げが落ちなければ良いけど...
■12/07/03 除算器
16ビット除算器が遂に完成...いや,単に動いただけだけど.結局2週間くらいかかったかな.とりあえずロジックエレメント300個くらい使った.

職務質問とは,警官が「あなたの仕事はなんですか?」と訊ねることではありません.だから学生が職務質問されても全く変ではないのです.このあいだ,どこかで「学生なのに何で職務質問されてんの?」ってな発言を聞いたのでね(どこかは忘れた).家族,友人の発言でないことを祈る.
■11/25/03 プログラミング入門
実は最近,プログラミング入門というの授業の課題のヒント集みたいなものを作っている.いくつか書いて,Webにもアップしている.ネタがネタだけに表立ってリンクは貼らないが,とりあえず,ここにあります.アホなことを書いている可能性があるので,チェックしてくれる人がいるとありがたかったり.

もえたん買っちゃった.1200円でフルカラー,例文もディモールト良い.とりあえず買っとけ.
■11/17/03 オバーフロー→Overflow
不思議だなあ.なぜかまたオバーフローになっている.なんでこんなことをやってしまったのか理由を考えてみよう(と言いつつ言い訳を作っているのだ).俺がアホで注意力散漫で,さらに通知表に「人の話をしっかり聞きましょう」と書かれているのだったら,こんなミスは不思議でもなんでもないのだ.しかし俺は一度もそんなことを通知表に書かれたことはない(じゃあ,どんなことが書いてあったのかと問われても困るが,少なくとも高校生の時に書かれたことはない.だからOKだ).考えうる第一の理由は,俺じゃあなくてWindowsがアホで注意力が散漫であるということだ.しかし,今は俺が打ったとおりに処理してくれている.ただの気まぐれか?まあ,この理由の可能性は少なそうだ.二番目の理由としては,ソフトエラーが上げられる.アルファ線によってメモリのビットが反転するという奴だ.しかし,これならパリティ検査でエラー検出されるだろうし,なにより一ビット反転したことによって起こる間違いじゃない(文字数がちがうから).うーむ,他に何か理由があるかなあ?思いつかないなあ.いや,まてよ,最近ノートを取るとき英語と日本語がごっちゃになってるなあ.まさかこれのせいか?「中央処理装置」を「CPU」と書くように,「オーバーフロー」なら「Overflow」って書くことが多いものな.うむ,こんなわけか.謎はすべて解けた.これで,何をやっていたかは知らないが,じっちゃんの名も守れたってものだ.ヨカッタヨカッタ.

決定事項なので批判は受け付けません.
■11/16/03 Hyper 萌え式ダメ人間スカウター
FooBarBazHogeから.
エロヲタ度:  42 % 
エロヲタです。疑う余地はありません。精が枯れない限り脱出困難かと。 
アニヲタ度:  50 % 
アニヲタです。疑う余地はありません。アニメが続く限りエンドレスな悪寒。 
ゲーヲタ度:  56 % 
重度ゲーヲタです。ゲーム機も複数台所持。マニアックなタイトルもぼちぼちと… 
脳内麻薬量:  38 ぴこg 
アルコール中毒レベルです。早急に更正が必要です。 
法則無視数:  39 個 
小説級に捻じ曲げています。ちと人間としては捻じ曲げすぎてす。要更正。 
戦闘力: 900000
総合判定: 危
ちっ,このスカウター壊れてやがる.
Hyper 萌え式ダメ人間スカウター

訂正(日記11/14/03)
改心の一撃→会心の一撃
オバーフロー→オバーフロー
atzm氏に感謝
■11/14/03 ドラクエ4(FC)
今日,ゼミ(みたいな授業)でJVMについてのプレゼンをした.準備不足も甚だしく,上手く発表できなかった.こういうところもしっかりしなくては.まあ,それは置いておこう,重要なのはその後だ.プレゼンをしたのが俺だけだったから,当然時間が余る.それで,何故か知らないがゲームの話になった.もちろんネタはドラクエだ.ドラクエの裏技について色々語る.ドラクエで一番有名な裏技と言えば,伊藤家でもお馴染み「4の逃げる8回で改心の一撃」だろう.そんなことを話してたら,ゼミの先輩で人生の後輩(?)がその仕組みを教えてくれた.すなわち,ドラクエ4では"にげる"カウンタとして3ビット用意されているが,これだと8回目はオバーフローしてしまう(チェックされないのだ).だから,3,4回目で絶対に逃げられるようになってるらしい.しかし,デスピサロからは絶対に逃げられないのでオーバーフローが発生してしまう.じゃあ,なんでオバーフローで改心の一撃になるのか?これはパルプンテと関係があるみたい.この逃げるカウンタの上位(カウンタもかな?)はパルプンテ用のメモリとして使われているらしく,オバーフローにより上書きされるところは「ちからがみなぎってきた」ビットとのこと.それで,常に改心の一撃.ってことは他のボスでも同じことができるのかしら?それとも逃げられるのかな?よくわからん.とまあ,ためになるとっても良い話.
■11/08/03 TOEIC
木曜日の英語の授業でTOEICの模擬試験をやった.時間の関係で全部はできないので,半分だけ.点数は750点と俺の英語も未だ衰えてはいないらしいっと思ったら,リスニングはあまり良くなく,ほとんどリーディングのおかげだった.最近,Java関係で英語の資料ばかり読んでるおかげかしら,と思ってみたり.

で,最近Javaはどんな感じかと言うと,やっと逆アセンブラが完成!実装にミスったため800行くらいになってしまった.同じようなコードはサブルーチンとしてまとめる,これは重要だ.プログラムは小さくなるし,コードを一箇所にまとめる事によって保守が楽になる(はずだ).しかし,逆アセンブラを書くときに一番悩んだのが"if else文"で書くか,それとも"switch文"でいくかってところなのが自分らしくておもしろい.if文は分岐命令でそれを200近く(実際はそんなに必要ない)も書き連ねるのはあまり綺麗じゃないし,分岐命令は性能低下を招く.switch文はジャンプテーブルを用いて実装されるのが普通だと思うが,これだとメモリアクセスが増えるし,オブジェクトコードは大きくなる.それではどうすれば良いのか?これは何も考えずに自分の好きなほうで書くのが正解.別に速度が重要なソフトウェアではないし,最近のメモリ量を考えれば200×8バイト=1600バイトなど微々たるものだ.こんなことで悩む自分は,まあ,ハッカーにはなれないね.ちなみに今回はswitch文にした.swich文ならすべての条件のコードが時間的に平等に実行される.それに対してif文は最初に評価される条件と最後に評価される条件とで条件分岐命令200回実行分の時間差がある(if文を多段にすれば差は小さくなるけど).しかしよくよく考えてみると,JVMやjavac(こんかいはJavaで書いたのだ)の実装を詳しく知らなければ実際に顕れるれる差はよくわからないのでは?うーむ,まだまだだ.
■11/04/03 Java ClassFile
やっとクラスファイル解析ツールができた.まだ完璧じゃないけど簡単なクラスファイル(Hello, World!とか)ならOKだ.あとは逆アセンブラ作って,JVMをシミュレーションしてそれをGUIで見えるようにするだけだ...先は長い.
今回はJavaで書いたのだが,やはりオブジェクト指向な考え方,略してオブジェクト思考,は苦手だ.性格からか,クラス階層を如何に正しく(美しく?)するかに力を入れてしまう.そのせいで,書くコードが増えることもしばしば.また,クラス階層を美しくするためになくても全然問題の無いクラスもでる.でも,まあ,C言語で書くよりはかなり楽だから良いか.

昨日,テレビでIQテストをやっていたので試しにやってみた.やはり俺は記憶力がいいらしい.
■10/26/03 JVM
ゼミでJVMシミュレータをつくることになり現在勉強中(一年生の課題なのだ).Java言語だってよくわかっていない 僕にはちょっときつかったり(ちなみに,もう一人の一年生は既にクラスファイルの解析まで終わってるとのこと. 奴は人間じゃないね.まあ,僕は補欠なのでゆっくりやるさ).このゼミの最終目標はスタンドアロンなJavaリアルマシン をつくる,要はJavaCPUだと思うのだが,わしゃはJavaCPUってのはあまり好きじゃない.しかし,Virtiual Machineのプログラム を実際のCPUで直接実行するってなかなか好きなアイデアだ.JVMは抽象化し過ぎているので直接実行できてもたいした性能は得られない だろうが,もっと機械語に近い奴なら抽象化も得られつつ性能もだせると思う.ってこれじゃあ普通のCPUと同じだな. Pentium4だってx86命令をネイティブに実行できるμopに変換してるわけだから.
まあ,とりあえずJVMの勉強だ.しばらくはJava漬けになる予定.
■10/25/03 アセンブラ
「情報科学入門」という講義で,なぜかアセンブラをやっているのだが(昨日から高級言語に入った), その課題でアセンブリプログラムを解説せよだの書けだのってのがでる.僕はアセンブラをちょこっと かじっているので,まあ,なんていうか余裕なんだが,周りの人はそうでもないみたい. で,先週の課題の答えを講義で先生が解説するのだが,これがどっかで見たことあるコード. 僕が書いたのと同じゃないか.それでちょっと嬉しかったって話.

ちなみに課題はユークリッドの互除法を書くやつで,
static int gcd(int x, int y) {
	if (x == y) return x;
	if (x > y) return gcd(x - y, y);
	return gcd(x, y - x);
}
↑が与えられているので,やることはこれをアセンブリ言語に直すだけ(ハンドコンパイル?).
与えられた命令セットにある条件分岐はキャリーフラグを条件とするものしかないので,最初にx,yの差をとる必要があるのだが, xからyを引くのではなく,yからxを引くのが味噌.