<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja"> 
  <HEAD>
    <title>Akihito Nagata's Page</title> 
    <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
    <META http-equiv="Content-Style-Type" content="text/css">
    <meta name="keywords" content="akihito,nagata,ocaml,java,unix,linux,postgresql,html,stylesheet,cgi,thesis,type">
    <meta name="description" content="Akihito Nagata,プログラミングやlinuxなどのtips">    
    <meta name="robots" content="all">
    <link rel="stylesheet" href="/~ganat/stylesheet.css" type="text/css">
    
    <style type="text/css">
      
      h1.titlecounter { background-color : white;
                        color: navy;
                        font-style : italic;
                        padding : 10px;
                        text-align : right;
                       border-style : none none solid none;
      }
      div.history { border-style : none;
                    border-width : 1px;
                    border-color : red;
                    padding : 0px;
                    margin : 0px;
      }
      li { margin : 5px; }
      div.date { background-color : #0fbf9f; 
                 font-weight : bold;
                 color : white; 
                 text-align : right;
                 font-style : italic;
                 margin : 0px; padding : 1px;}
      .blue {
        color : blue;
      }
      
    
    </style>
  </head>
  <body>
    <table summary="table" border=0 cellspacing=0 cellpadding=0>
	<tr>
	  <td valign="top">
	    <table summary="table" border=0 cellspacing=0 cellpadding=0>
		<tr>
		  <td>
		    <!-- 左上の画像 -->
		    <table summary="table" border=0 cellspacing=0 cellpadding=0>
			  <tr>
			    <td width=10><img alt="*" src="/~ganat/images/borders/pic_border_lt.jpg"></td>
			    <td width=120 style="background-image : url(/~ganat/images/borders/newpic_border_t.gif);">
			      <img alt="*" src="/~ganat/images/borders/white10x10.gif"></td>
			    <td witdh=10><img alt="*" src="/~ganat/images/borders/pic_border_rt.jpg"></td>
			  </tr>
			  <tr>
			    <td><img alt="*" src="/~ganat/images/borders/pic_border_l.jpg"></td>
			    <td><img alt="*" src="<!--#exec cgi="/~ganat/cgi-bin/todayimage.cgi"-->"></td>
			    <td style="background-image : url(/~ganat/images/borders/newpic_border_r.gif);vertical-align : top;">
			      <img alt="*" src="/~ganat/images/borders/white10x10.gif"></td>
			  </tr>
			  <tr>
			    <td><img alt="*" src="/~ganat/images/borders/pic_border_lb.jpg"></td>
			    <td style="background-image : url(/~ganat/images/borders/newpic_border_b.gif);text-align:left;">
			      <img alt="*" src="/~ganat/images/borders/white10x10.gif"></td>
			    <td><img alt="*" src="/~ganat/images/borders/newpic_border_rb.gif"></td>
			  </tr>
		      </table>
		  </td>
		</tr>
		<tr>
		  <td class="menu" valign="top">
		    <!-- MENU -->
		    <div class="menutitle"><img alt="menu" src="/~ganat/images/menutitle.jpg"></div>
		    <div class="menu"><table width="140">
<tr style="text-align : right; "><td><a class="menu" href="/~ganat/index.html">Top Page</a></td></tr>
<tr style="text-align : right; "><td><a class="menu" href="/~ganat/ocaml/ocaml.html">Ocaml</a></td></tr>
<tr style="text-align : right; "><td><a class="menu" href="/~ganat/java/java.html">Java</a></td></tr>
<tr style="text-align : right; "><td><a class="menu" href="/~ganat/diary.html">Theses</a></td></tr>
<tr style="text-align : right; "><td><a class="menu" href="/~ganat/presentation.html">Presentation</a></td></tr>
<tr style="text-align : right; "><td><a class="menu" href="/~ganat/survey/index.html">Survey</a></td></tr>
<tr style="text-align : right; "><td><a class="menu" href="/~ganat/unix/unix.html">Unix Tips</a></td></tr>
<tr style="text-align : right; "><td><a class="menu" href="/~ganat/memo/index.html">Memo</a></td></tr>
<tr style="text-align : right; "><td><a class="menu" href="/~ganat/link.html">LINK</a></td></tr>
<tr style="text-align : right; "><td><a class="menu" href="/~ganat/cgi-bin/nagabbs/nagabbs.cgi">BBS</a></td></tr>
</table>
</div>
		  </td>
		</tr>
	    </table>
	  </td>
	  <td>
      <table summary="table" border=0 cellspacing=0 cellpadding=0>
		<tr>
		  <td valign="top" style="text-align : center;">
		    <!-- 題名 -->
		    <!-- <div class="title">GANAT PAGE</div> -->
		    <img alt="Akihito Nagata's Page" src="/~ganat/images/title.gif">
		  </td>
		</tr>
		<tr>
		  <td>
		    <!-- メイン -->
		    <table summary="table" border=0 cellspacing=0 cellpadding=0>
			<tr>
			  <td width="10"><img alt="|" src="/~ganat/images/borders/vline_t.jpg"></td>
			  <td></td>
			  <td></td>
			</tr>
			<tr>
			  <td style="background-image:url(/~ganat/images/borders/vline.jpg);"><img alt="|" src="/~ganat/images/borders/vline.jpg"></td>
			  <td><div class="main">
    <div style=" padding-left : 30px; padding-right : 30px; padding:10px;background-color : white;">
      
      <table>
	  <tr>
	    <td><img alt="*" src="images/robo1.gif"></td>
	    <td><h1 class="titlecounter">Akihito Nagataの<br>ページへようこそ<br>You are <!--#exec cgi="cgi-bin/count.cgi"-->th Comer!</h1></td>
	    <td><img alt="*" src="images/robo2.gif"></td>
	  </tr>
      </table>
      東京大学 理学部情報科学科 米澤研究室<br>
      永田 章人が管理するページです。
      
      <address>
	なんでもいいのでメール下さい。
	<a href="mailto:ganat@yl.is.s.u-tokyo.ac.jp">Akihito NAGATA</a>
      </address>
      <hr>
      <div class="history">
	<ul>
	  <li><div class="date">(2003.5.31)</div>
	    <p>
	      「OIOIのバーゲンに行ってきた。」
	    </p>
	    <p>
	      去年の冬の品川の時のリベンジをすべく、OIOIのバーゲンに参戦。会場がサンシャイン60で近いから行きやすくてよかった。
	    </p>
	    <p>
	      夜の8時閉店なのに、夕方5時にサンシャイン到着。<br>
	      
	      まず腹ごしらえをするために、地鶏の親子丼の店に入る。大当たりだった。こんなうまい親子丼は初めて食べた気がする。これからも利用します。<br>
	      でも最初に出てきたお吸いものは科学調味料の味がしてちょっとがっかり。
	    <p>
	      バーゲンに入店。6時。うちの学科と違って女性が多くて圧倒される。
	      人が大勢いて酔う。
	      へこたれないうちに勢い良くちゃちゃっと買いものを済ませた。メンズの領域は面積が狭くて楽でいい。その後は勢いがない奴につき合う。<br>
	      靴とかTシャツとか買った。よかったよかった。これで夏が乗り切れる。<br>
	      でも一番の収穫はおいしい親子丼か。
	    </p>
	    <p>
	      夜は夜でおいしい豚の角煮を作って食べる。写真を撮ったけどあんまりおいしそうに写らなかったのが残念。おいしかったのに。<br>
	    </p>
	  </li>
	  <li><div class="date">(2003.5.30)</div>
	    <p>
	      「Haskell BBS。完成か。」
	    </p>
	    <p>
	      最近コツコツと <a href="http://www.haskell.org/">Haskell</a>という言語を勉強しておりました。MLを勉強した時に MLは型の制約が厳しいから窮屈でプログラムが書きにくいと思った人もいるかと思いますが、Ocamlは Haskellに比べたらまだまだ甘い。Haskell はもっとガチガチに型い。 これは慣れるには相当時間がかかりそう。
	    </p>
	    <p>
	      Haskellと Ocamlの違いは評価順序にもあるんだけど、Ocamlと違ってHaskellは副作用にも型で制約がかけられる。<Br>
	      プログラムのバグの温床になったり、ソースを読みにくくしているのは副作用なので、副作用のある手続きと副作用のない関数とを型とか構文で区別して使える Haskellは素晴らしい。  大きいプログラムを書こうすればするほど、Haskellは有効でしょう。<br>
	      <a href="http://www.haskell.org/practice.html">ここ</a>のリンク先とかいろいろ読んでみると、どうやら企業でHaskellを採用しているところもあるようだ。 日本の企業ではないのかな。 就職してみたら開発言語が Haskell。そういう会社はプログラマもみんなスーツ。
	    </p>
	    <p>
	      子供(ソースコード)がぐれる(バグを出す)ことが無いように、親(言語)が厳しく躾け(型付け)するのは、当然のことなんだろうけどやり過ぎるのもよくないしねぇ。  Haskell家は躾けが厳しい。
	    </p>
	    <p>
	      とりあえずいつも通り 掲示板を作ってみました。<a href="/~ganat/cgi-bin/haskellbbs/bbs.cgi">Haskell BBS</a>。でも、頑張って見つけたHaskellのCGIライブラリがSyntax errorでコンパイルできなくて、それを直せるくらいのHaskellの知識がなかったので、仕方なくそのあたりを自分で実装。フォームの入力のparseはできたんだけど、URL decodeができない。とりあえず URLデコードができていないまま暫定版完成。もうちょっと勉強して 最小限の機能は追加したいなと。 <br>
	      Haskellは 資料とライブラリが全然ないのがつらい。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.29)</div>
	    <p>
	      「型推論器が それっぽくなった！」
	    </p>
	    <p>
	      やたらと難しい let rec の推論はまだできてないけど、 研究の型推論器がそれっぽいところに到達しました。でも、今までずっとデバッグとかテストをしてこなかったので、今からが勝負。 ここまでがちゃんとできたら、let recを実装して インタプリタの作成だ。  <br>
	      デバッグしてたらパーザーという根本的なところでバグを発見したので、直す。 これを期にかなり適当に作ってあった lexer と parserをちゃんとしたものにしようとして、終らないまま今日は終了。
	    </p>
	    <p>
	      <a href="http://www.ecc.u-tokyo.ac.jp/">ECC</a>が<a href="http://www.sun.com/">Sun</a>と仲良くなって、学生に <a href="http://jp.sun.com/starsuite/">Star Suite 6.0</a> を与えてくれた。 ふとっぱら。<br>
	    早速使ってみる。見た目とかは 当然 <a href="http://www.openoffice.org/">OpenOffice.org</a> とほとんど同じなんだけど、OpenOfficeよりもきれいに Officeのファイルが読めるし、フォントも、日本語環境も充実。これはいい。 Linuxでプレゼンの資料が作れるのは素晴らしいです。 これでますます Windowsから遠ざかる。 ただ、Star Suite のImpressのユーザーインタフェースはかなり イマイチ。ここまでOfficeの真似をしたなら インタフェースも真似すればよかったのに。
	    </p>
	    <p>
	      単体テストが簡単にできるJUnitを使ってみたが、結構面倒だった。微妙。Antと連携できるのはいいけど。
	    </p>
	    <p>
	      今日の夜はタツザワくんが ただただファイルを開きまくるプログラムをvenus(NIS兼WEBサーバ)で起動しまくったために、一時ログインができなくなる事態となった。挙動が不審なプログラムを試してみる攻めの姿勢はいいけど、攻め過ぎ。
	    </p>
	    <p>
	      昨日の夜は千石にある有名なラーメンやに行った。超こってり。いつもスープを飲む気になれない。むしろ吐き気。でも大人気。行列。<br>
	      なぜあんなに人気があるのか。僕はどっちかというと２、３軒隣のあんまり人気のないとんこつラーメン屋の方が好き。世間の皆様 油とり過ぎ。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.28)</div>
	    <p>
	      「今日は帰りにラーメンを食べて帰ることに決めました。」
	    </p>
	    <p>
	      朝から研究の実装、研究室まわりに来てる4年生と打ち合せ、掲示板に機能を追加するためにいろいろ変更、バイトのプログラミング。JUnitで遊ぶ。と1日でいろんなことをやった気分。しかも、どれも少しずつ着実に進捗があってよい一日。満足して夕方から研究室で寝てしまった。
	    </p>
	    <p>
	      夕飯前にちょっと秋葉原に行って、リファクタリングの本を買ってしまった。4800円。高い。
	    </p>
	    <p>
	      プロジェクトXに出てた技術者さんが「設計書を書くのに 一日20時間× 数日かかった」 と言っていた。一日20時間 × 数日 かけてコーディングすれば、XPとかよりもかなりの単期間でよいソフトが完成することでしょう。 今日は比較的コーディング時間が長かった気がするけど、20時間には到底及ばない。でも1度チャレンジしてみたいですな。
	    </p>
	    <p>
	      生協で、ちょっと前までアメリカに2年くらい留学してた後輩に会った。<br>
	      気のせいかもしれないけど、2年前と比べると、体の動作が大きい。表情の変化が大きい。りアクションが大きい。声も大きい。アメリカが及ぼす影響は大きいと思った。
	    </p>
	    <p>
	      学校に2日連続で泊まると人間としてよくないので、今日は帰る。今午前3時。朝9時に新橋でバイト。やだやだ。  帰り際に見つけたかつおの日記のタイトルが 「oonyo’s diary」だった。かなり笑った。かつお最高。ありがとう。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.27)</div>
	    <p>
	      今日はミーティングが多かった。ML演習と7号館掃除と4年生ミーティングと全体ミーティング。演習と掃除はミーティングじゃないけど。 <br>
	      7号館の掃除の時に3年生とちょっとだけ話した。なんだかんだいってやっぱりOS演習が今年も大変みたいですね。突き詰めようと思えば、いくらでもできるところが難しいのか。ついこりたくなるのはよくわかる。Ocaml演習の最終課題を楽しみにしてるので楽しいもんでも作って下さい。<br>
	      4年生ミーティングと全体ミーティングが楽しかったので いいんだけど、おかげで、自分の作業はあんまり進まなかった。でも夜型の人間なのでこれからが勝負。家に帰って実装を進めて飽きたらHaskellを勉強する予定。いつも通り。論文も書かないと。
	    </p>
	    <p>
	      前から使ってみようと思っていたJakarta Antをやっと使ってみました(最近 Javaでプログラムを書くことが少なかったので使ってなかった。) 基本的に Makeなんだけど、対象言語をJavaだけに限定している分 細かい指定とかパッケージ化とかが簡単にできるようになってて非常によい。JVMを1回しか起動しないので複数コンパイルも速い。 これからJavaを書く時には必須ですな(IDEとか使えない人間なので)。<br>
	      Javaの話題ついでに、Xemacsのspeedbarを使ってみたら非常によい感じ。前に使った時はかなりへぼかったのに。 いつの間にパワーアップしたのか。メンバ変数とメソッドがちゃんと分けられてて、一発でジャンプできます。すごい。Javaって本当に人気があるんだなと思います。<br>
	      OcamlでSpeedbarを使うと…？ デフォルトでは拡張子が *.ml のファイルすら表示されないようだ。残念。
	    </p>
	    <p>
	      今日はプロジェクトXで 小柴先生のカミオガンデがやるそうなので、見るつもり。今から帰ります。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.26)</div>
	    <p>
	      「未だ自己ベストを越えられず」
	    </p>
	    <p>
	      何も聞いてない時も多いけど、なんか作業してる時は大抵 なんか歌を聞く。 作業の能率を落さずに楽しく落ち着いて聞ける曲がいい。The Blue Heartsは大好きだけど、能率を著しく低下させるので駄目だ。モーニング娘。とか集中力がなくなる曲も駄目だ。<br>
	      なんか、あんまりいい曲が見つけられず、ずっと小田和正の「自己ベスト」聞いてます。 新しい曲を借りてきてもなんとなく飽きて「自己ベスト」に戻ってしまう。<br>
	      「自己ベスト」は最高だ。まず名前がいい。部活やってたころにの感じがする。特にYes-Noが好き。こんな善人ボイスを僕も出せたらなぁと。
	    </p>
	    <p>
	      今日は7時ごろにものすごい地震がおきた。震源地は岩手なのに東京でもかなり揺れました。東北の人は大丈夫か。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.25)</div>
	    <p>
	      今日は論文を書く。わかっていたけど文章を書くのが苦手。合うとラインは作ってもらったので、その流れに合わせて 視点を徐々に深い部分に向けつつ全体の見通しがよくなるように文章を書く。 きっとこういうのを何も考えずにできてしまう人がいるんだろうなぁと、羨ましく思います。文章を書くのは嫌いだけど、段々と論文ができあがっていくのは楽しい。
	    </p>
	    <p>
	      気晴らしに相変わらずHaskellの勉強をする。勉強すればするほどすごい言語だ。もしちゃんと理解できて、使いこなせて、速いコンパイラがあったら、かなり素晴らしい言語。  でもかなりややこしい。 CとかJavaに比べると習得が困難かも。中身はCなんかよりずっと優れてるんだけどなぁ。本来アプリケーションの一番外枠はこういう言語で記述した方がいい気がするんだけど、 C言語しか使えない人間が多いから結局Cが使われてしまってるんだろうなぁ。 C言語はC言語しか使えない状況でのみ使うべきだ。
	    </p>
	    <p>
	      Haskellばかりもやってられないので、研究の実装をする。ちょっと間が空いてしまった。未だ型推論中。誰かOcaml用のSppedbarを作ってください。OCamlでプログラムすることの欠点はコードの量が全然増加しないこと。短く書けるのはいいんだけど、なんとなく頑張った感が薄い。バイトのプログラミングはJavaなのですぐ1000行とか行ってしまって、なんか今日はいっぱいコードを書いたなぁ感。
	    </p>
	    <p>
	      コードを書きつつ、ZOPEに手を出してみる。RPMもあったけど、ソースにした。ソースを落して解凍、ビルド。python2.2はサポートしてないって書いてあるけど、とりあえず無視して2.2でやってみた。簡単にビルドと起動ができた。<br>
	      勝手にデータベースと連結してくれたり、ソースの管理をしてくれたり、ビルドしてくれたりもするWebサーバのようだ。いわゆるアプリケーションサーバ。最近こういうの多い。楽なのかな。一度データベースを駆使してアプリケーションを作ってみたいけど、個人レベルでデータベースに入れる内容がそんなになくて作れない。こじんまりしたデータで実験がせいぜいです。<br>
	      あと。デフォルトポートが8080でTOMCATと被ってるなと。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.24)</div>
	    <p>
	      「ひさしぶりに部活にいきました。」
	    </p>
	    <p>
	      健康診断を前にして、ジョグを大量にしようと思ったけど、久しぶりだったせいか、疲れてすぐに足が止まってしまう。 やっぱり最初はもう少しおもしろん練習をしなきゃ駄目だなと思い 100x6に変更。 あの吐きそうになる感覚がいい。<br>
	      100x6が終ったら、体が軽くなったのでずっとジョグをした。間に砲丸も投げた。最後に1年生が補強をやっていたので参加。  今日は大量に汗をかき、やせました。腹を触ると皮下脂肪が減って、痩せたって感じがするけど、多分気のせい。
	    </p>
	    <p>
	      やっぱり練習は継続的にやらなきゃ駄目ですね。これからも最低週１で部活にいきたいものです。いつ何時 走らなくてはならない状況に陥っても大丈夫な体にしておきたいです。 走らなくてはならない状況に陥ったことはないけど。
	    </p>
	    <p>
	      せっかく痩せたのに、その後、部活の友達というか後輩と <a href="http://www.e-asia.co.jp/sibu.html">オーカルカッタ</a>へ。東京で最も思い出深い店 オーカルカッタ。 第３番目くらいの我が家。 もう店員さんに知合いの人はいなくなってしまったのは残念。でも相変わらずカレーとナンがうまい。運動した後はさらにうまい。大量に食べて今日痩せた分を取り戻した。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.23)</div>
	    <p>
	      なんとなく、とくになんにもない日。起きたのが遅いし。まったりと、論文の型規則を書いたり、Haskellの勉強をしたりする。 <br>
	      monad というのがなんとなくわかってきた感じ。でも、これが 群論とどう結び付くのよくわからない。 まぁ群論自体がよくわかってないので、難しいですが。<br>
	      プログラミング言語を学ぶのは楽しいですな。Haskellを学んだあと、やりたい言語は他にも多数あり。そんなに学んでも役に立たないかもしれないけど、まぁ趣味っていうのはそういうもんだ。
	      
<!-- 	      関数型の言語は「何」を計算するかを記述し、手続き型の言語は「どう」計算するかを記述する。
	      関数型言語は入力に対し出力が決まる、という感じにプログラムを数学でいうブラックボックスのようにとらえるのに対して、手続き型は、ある状態でプログラムを動かすと別の状態に遷移するという 状態変化でとらえられる。

	      結局 アセンブラが手続き型だから、昔の人が手続き型に慣れてしまって 手続き型から抜けられないだけじゃないだろうかと。-->
	    </p>
	  </li>
	  <li><div class="date">(2003.5.22)</div>
	    <p>
	      「【ｲﾝﾃﾞﾝﾄ】ぱいそんぱいそん！【ﾑﾈｵたん】」
	    </p>
	    <p>
	      <a href="/~ganat/cgi-bin/pythonbbs/bbs.cgi">Pythonで掲示板</a>が完成した。一応<a href="/~ganat/cgi-bin/pythonbbs/pythonbbs.zip">アーカイブ</a>。どうにかなるもんだ。CSSも全部つぶした。完璧。<br>
	      Pythonはよい言語だ。Perlよりはいい。Rubyよりも使いやすいかな。いや、それはどっちもどっちって感じか。<br>
	    </p>
	    <p>
	      よい言語は何か？っていうと、それはきっと「バグのあるコードは一切書けなくて、バグのないコードは簡単に書ける言語」。<br>
	      言語に求められる機能は、
	    <ul>
	      <li>
		マイナスの面を減らすという観点では、近年の言語にあるようにポインタ演算をなくして、メモリに関するエラーを防ぐとか、型を厳しくてエラーが起きそうなコードを防ぐ。
	      </li>
	      <li>
		プラスの面を強化するという観点では、パターンマッチングとかオブジェクト指向みたいに、プログラマが慣習的に頻繁に書くコードを簡単に書けるようにする。
	      </li>
	    </ul>
	    一方は「書けない」ことを目指してて、一方は「書ける」ことを目指してるので、そう簡単に究極のプログラミング言語は作れないですね。
	    </p>
	    <p>
	      でも、プログラミング言語を新たに設計するときに、一つの指標となるのが、コーディング規約だと思う。<br>
	      コーディング規約っていうのは、プログラマが経験的に「よいコード」を書くための方法として、提案した規則だから、もし、プログラミング言語がコーディング規約にのっとったコードしか書けないようにできていたら、その言語は「よいコード」しか書けない言語になる。<br>
	      例えば、C++に比べて、Javaは Global変数 or 関数が書けない。 あるチームが、C++でコードを書く時に「Global変数が必要な時は クラスのstatic変数として持たせること。」というコーディング規約を作ったとしたら、Javaでコードを書く時にはそういった規約は必要なし。もともとJavaではGlobal変数が書けないから。
	    </p>
	    <p>
	      Pythonが目をつけたコーディング規約はインデント。<br>
C言語だと、
<pre>
if(a==3){
   return 1;
}
</pre>
と書いてもいいし、
<pre>
if(a==3){
return 1;
}
</pre>
でもいいんだけど、
Pythonだと
<pre>
if (a==3):
     return 1; # <-- ここにインデントは必須
</pre>
	    としか書けない。特に規約を作らなくても、みんな共通のきれいなインデント。  改行とかスペース、タブに意味を持たせて、単なるwhitespaceとしてとは扱わない言語が嫌いな人もいるかと思いますが、僕は気に入りました。
	    </p>
	    <p>
	      言語を新たに設計する時は、今までのコーディング規約に注目ですね。関数呼出とかも、アセンブラのコーディング規約だったかもしれないし。<br>
	      ちなみに、GNUのCのインデントに関する規約は
<pre>
if(a == 3)
    {
       return 1;
    }
</pre>
	    なんだけど、これはどうかと思う。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.21)</div>
	    <p>
	      「24になりました。」
	    </p>
	    <p>
	      もう２４か。小学校４年生の時の担任の先生が２４だったなと思う。2 * 2 * 2 * 3。２５になったら四捨五入してみたり、被選挙権を取得できたりといろいろ変わるけど、２４だと実はあんまり変わることはないかな。まだ学生だし。 <br>
	      あと、誕生日にちょうど内々定がもらえて就活が終了。来年の身の振りが決まってほっと一息。
	    </p>
	    <p>
	      祝いにケーキを作って食べる。<br>
	      <img src="images/cake.gif"><br>
	      最近、本気で電動で泡立ててくれるやつが欲しくなってきました。いくらぐらいするのだろうか。欲しい。
	    </p>
	    <p>
	      昨日に引続き MLkitのインストール。昨日の make は途中でエラーになってた。 どうやら Makefileが間違っているっぽい。言われるごとに直す。３箇所くらい直しても、まだ完全にビルドできる気配が見えないし、一回のビルドに３０分くらいとられるのが嫌になって、諦めて軟弱にも rpmでバイナリをインストール。 <br>
	      遊んでみる。 コンパイルがやたら遅い。リージョン推論に時間がかかってるのか、その他で時間がかかってるのか。 リージョンの初期化が遅いのかも。 でも使い方は大体わかった。よくできてる。研究もここまで実装しなくては駄目なんかね。 すごい。
	    </p>
	    <p>
	      pythonの勉強をしてみる。 Syntax以外はあんまり特徴のない言語のような気がする。Rubyのよりも現実的。その分Rubyよりもちょっと汚い。もうすぐ掲示板が完成します。新しい言語を覚える時は、とりあえず なんか作ってみればいい、ってのはこの学科で学んだ中でもっとも素敵なこと。やってみればなんとかなるもんだ。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.20)</div>
	    <p>
	      住んでるアパートの水道工事が始まった。朝からうるさくてゆっくり眠れない。仕方ないので起きる。11時。ピーコックでおいしいパンを買って学校へ。優雅だが駄目な生活。
	    </p>
	    <p>
	      学校にきて、ML演習に出る。基本的にレポート見るだけだから講義に出る必要ないけどなんとなく。ML演習中に多くの３年生はOS演習をやっていた。ちょっと悪循環？
	    </p>
	    <p>
	      自転車の鍵をなくしました。と、同時に研究室の自転車の鍵も紛失していたので、2台分の鍵を壊す。 所要時間５分くらい。使ったのはマイナスドライバーのみ。こんなに簡単に壊れていいのだろうか。 鍵なんて所詮は気持ちの問題だなと思った。
	    </p>
	    <p>
	      演習３の4年生で Region Inferenceに興味を持ってる人がいた。一緒にRegion Inferenceをやることになった。 今まで使ったことのなかったMLKitを試すよい機会なのでインストール。かなり面倒だった。インタープリタからバイナリ作って、もう一回自分自信をコンパイル。何回もmake。 結局 make が完了しないままほっといて帰ることにした。
	    </p>
	    <p>
	      雨 と 雷。 帰る気がなくなる。でも帰るぞ。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.19)</div>
	    <p>
	      「いいことがあった」
	    </p>
	    <p>
	      <img src="images/todays/teib2.jpg">学食に閉店間際に行くと、たまにおかずを追加してもらえる。  相変わらず定食Bを頼んだが、メニューを見た時にはのっていなかった ひややっこをおまけしてもらえた！  というわけで６皿。 なんとなくラッキーな感じ。 他には枝豆とかつけてもらえることもあるので、閉店間際はチャンスです。
	    </p>
	  </li>

	  <li><div class="date">(2003.5.18)</div>
	    <p>
	      「 リンゴ １個と 水１リットル。合わせてどれだけ？」
	    </p>
	    <p>
	      C言語で
<pre>
int apple = 1;
int water = 1;
printf("ans = %d\n",apple + water);
</pre>
	    って書けるけど、意味的になんかおかしい。どうにかしてコンパイラでこのような意味のない計算を検出できないだろうか？
	    </p>
	    <p>
	      何がいけないかというと、プログラム上では「個」を表すときも「容量」を表す時も同じ「整数」型になってしまうところ。<br>
	      リンゴと水を別々の型にしてしまえばうまく行きそう。
<pre>
typedef int countable;
typedef int capacity;
countable apple = 1;
capacity  water = 1;
printf("ans = %d\n",apple + water);
</pre>
	    ここでコンパイラは、 apple + water で それぞれの型が違うので型エラーを吐くことにする。これでプログラム上の意味のない計算は検出できる。もしどうしてもこういう異なる型の間での計算がしたい場合は 2種類の "+" を用意して、演算子が"+"ならば意味を考慮して和を計算、意味がわからないときはエラーとする。演算子が"__+__"ならば意味は無視して実装の"int"という情報のみを用いて和を計算する。という仕様にすればよい。
	    </p>
	    <p>
	      言いたいのは、つまり型には２種類あって
	    <ol>
	      <li>意味上の型(単位,受験物理でいう次元？)</li>
	      <li>値の実装を表す型。intなど</li>
	    </ol>
	    の２つがあるんじゃないの？ということ。よくabstract data typeって呼ばれるものは１に分類されることが多い。 プログラムを書くときは、できる限り多くのバグをコンパイル時に見つけ出すことが望ましいので、コンパイラの手を最大限に借りるためにも、プログラマは１の型を定義して利用するのが望ましいのでしょう。<br>
	    ただ、問題はabstract data typeを定義する時を思い出してもらえばいいけど、定義が非常にめんどくさい。意味がわからない場合はエラーを出して、わかる場合は計算すると言ったけど、それを実現するには自分が定義した型に対して、正しい計算と言うものを、専用の関数を定義するなどしてコンパイラにすべて教えなくてはならない。それはプログラマに大きな負担となってしまいます。
	    </p>
	    <p>
	    保守性やセキュリティを重視して、エラーを出さないようにするには"意味上の型"を利用するのがよい。  逆に(表面的な)開発効率を重視するのであれば"実装を表す型"を利用すると楽。<br>
	    現実を考えると、大部分は"実装を表す型"を使用してしまうのだろうけど、モジュール性が高いところとか 整合性が重視される箇所には"意味上の型"を使用しなくてはならないと思います。言ってみれば、全部を"実装を表す型"で取り扱ってしまう<a href="http://www.arcpit.co.jp/winapi/api_01/ap010203.htm">ハンガリー記法</a>なんて使っちゃ駄目ってことです。(MSが考え出したっぽいし。)
	    </p>
	    <p>
	    "意味上の型"と"実装を表す型"を明確に区別するような型則規をちゃんと考えたら、現実で使えるくらい簡単に記述できて、 プログラムの整合性が強く保証できるような言語とコンパイラを設計できるかもしれないですね。
	    </p>
	    <p>
	      と、いうことを考えました。
	      深く考えたわけではないので、言ってることに穴があるかもしれないです。
	    </p>
	    <p>
	      ----- 
	    </p>
	    <p>
	      全然関係ない話題。僕が作った ML演習の質問掲示版は スレッドが使えて、しかもOcamlの予約語の色が自動的に変わったりと、<span class="red">"非常によくできているのに世間には使われない"</span>。まさしくMLと同じだ思った。よかったよかった。(ホントは非常に非常によくできてないだけかもしれないけど。)
	    </p>
	    <p>
	      今日はバイトのコードを大量に書きました。Javaはすぐコードが膨らむ。ボリュームは出るけど 書く時うっとうしくなります。
	    </p>
	    <p>
	      研究：今日は論文書きの方を頑張ったのでコーディングはなし。文章を書くのは難しい。何を書かなくてはならなくて、何を書かなくてもよいかがよくわからない。初めて数学の証明を書いたときみたいな感覚ですね。あとlatexは非常に面倒。どうにかならんもんかね。ワードはへぼすぎるし。
	    </p>
	    
	  </li>
	  <li><div class="date">(2003.5.17)</div>
	    <p>
	      朝から某社の面接。技術面接やって人事面接やって筆記試験。
	    </p>
	    <p>
	      面接中に「長男でしょ？」って言われたりと、面接はものすごく和やかな雰囲気の中行なわれたが、それは 学生に "何を行ってもいい" というような気持ちにさせておいて、ボロを出させる企みのように思えた。深読みしすぎか。
	    </p>
	    <p>
	      その後初めてSPIをやりました。相変わらず自分は国語が苦手だなと思った。あと相変わらず人の話を聞かない。注意事項は全部書いておいてくれ。  でも、久しぶりに算数をやって楽しかった。
	    </p>
	    <p>
	      夜はまったりとオムハヤシを作って食べる。完熟トマトのハヤシ。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.16)</div>
	    <p>
	      「定食B」
	    </p>
	    <p>
	      東大の中央食堂で夕飯を食べる時は、毎回「定食B」。定食Bはこれ<br>
	      <img src="/~ganat/images/todays/teishoku_b.jpg"><br>
	      定食Bのどこがいいかというと
	    <ul>
	      <li>5皿もある</li>
	      <li>味噌汁ではなくとん汁</li>
	      <li>一人暮らしだとあまり食べられない魚(刺身)がある</li>
	      <li>魚があるくせに肉も必ずある</li>
	    </ul>
	    といったところ。非のつけどころがない。これで540円(半ライス)。安い。<br>
	    ただ問題点は
	    <ul>
	      <li>皿がトレイに入りきらない</li>
	    </ul>
	    カウンターで皿を一つずつ受けとる時は、次に並んでいる人もいるのでそんなに長く皿の置き方を考えている暇はない。これに対し、<a href="http://www2.toki.or.id/book/AlgDesignManual/BOOK/BOOK5/NODE192.HTM">２次元 bin packing は NP-complete</a>なので、限られた時間で解を算出することができなくて、仕方なく上の写真のように、刺身の醤油皿の上に湯飲みを置く、という解で近似する。誰か定食B(湯飲み含む)がトレイに入り切るような解を時間内に与える近似アルゴリズムを教えて下さい。
	  </p>
	    <p>
	      明日は就職の面接。プレゼンをしろというので資料を作成する。相手はエンジニアなので、専門的な分野に踏み込んで話をしなくちゃいけないと思うんだけど、どこまで踏み込んだものが迷う。企業のエンジニアは ML なんて知らないだろうし。
	    </p>
	    <p>
	      今日は情報科学科の２つ上の代が飲み会のようだ。いいなー。うちの代はこの間やったばっかりだけど。
	    </p>
	    <p>
	      研究：今日は他にやることがあったので研究が進まず。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.15)</div>
	    <p>
	      「寄生獣」
	    </p>
	    <p>
	      本屋で寄生獣の完全版を見かけたので、なんとなく読みたくなって家の寄生獣を読み返した。思えば豊田(実家)の床屋の待合室の本棚に1巻だけ置いてあって、暇潰しに読んでみたら大はまり。そのころ出ていた５巻くらいまで一気に買いました。その後は新刊が出るのが遅くてかなり待ち遠しかった気がする。
	    </p>
	    <p>
	      寄生獣は今まで読んだ漫画の中で No1のおもしろさ。何度読んでも面白いし、読むたびに新しいことを思います。これを超える漫画に出会うのは難しい。まだ読んでない人は絶対読むべき。地下の談話室にも置いてあるし。最高の全10巻。
	    </p>
	    <p>
	      話は変わって、今日415に米澤研の助手をしていらっしゃるＯ山さんがやってきて、僕にモー○すのライブのDVDをくれた。なぜＯ山さんがそんなDVDを持っているのか？(モーヲタだから？)、なぜ僕にくれたのか？、なぜ一部日本語でない部分があるのか？。謎だらけ。でもとりえあえず見てみた。市井さやかの引退ライブ。でも市井さやかよりも、護とか辻がギコチなく明らかにコメントがセリフを言わされてるっぽいところが興味を誘った。あと、安部なつみはしゃべらない方がいいと思った。バックでファンの方々(男ばっかり)が一緒に熱唱する熱いライブだった。 そんな風にアイドルにウツツを抜かしてたら、その後行った学食で、もう少し身近なアイドルを発見。幸せになる。
	    </p>
	    <p>
	      研究: 型推論器にバグ。というか仕様にちょっとミス。結構大きく直す。時間がかかった。現在 1110 行。
	    </p>
	    <p>
	      そういえば、世界は破滅しませんでした。どうやら 5/22 に延期になったそうです。5/22 に世界は破滅するそうです。
	    </p>
	  </li>
	  <li><div class="date">(2003.5.14)</div>
	    <p>
	      1年半前くらいに買ったソニーのヘッドホン(耳にかけるやつ)が壊れました。耳にかける部分のバネが外れて弾力がなくなった。ソニーさんはこんなものにまでソニータイマーをつけているのか。ユビキタスコンピューティング。
	    </p>
	    <p>
	      達人プログラマによると「1年に1つ新しい言語を覚えなさい」とのこと。平木大先生に聞いてみたら、おすすめは史上No1のファンシー言語 APLらしい。<a href="http://www.acm.org/sigapl/whyapl.htm">http://www.acm.org/sigapl/whyapl.htm</a>のちょうど真ん中くらいにある例を見てみると、BASICで50行くらい、FORTRANで16行で書けるプログラムが、APLでは1行(<img src="http://www.acm.org/sigapl/sort.gif">)で書けるらしい。記述には「<span class="red">ascii文字以外の文字も使う</span>」ファンシーさ。
	    </p>
	    <p>
	      最近はバイトが朝っぱらからあるので早寝早起き。非常によい生活。久しく忘れていた。
	    </p>
	    <p>
	      パナウェーブ研究所によると明日は世界が破滅する日です。
	    </p>
	    <p>
	      現在研究中の型推論器のプログラムが今のとこ全部で980行。開発言語はOcaml。これから増えて行きます。
	    </p>
	    <p>
	      夜はなんとなく食欲がなかったので、かぼちゃの煮つけを作る。安くておいしくて心が豊かにる夕飯。
	    </p>
	  </li>
	
	  <li><div class="date">(2003.5.13)</div>
	    <p>
	      ML演習の型推論器が副作用ベースなのが、関数プログラミングと言えないし、Minerのアルゴリズムと違っててわかりにくくて、嫌だって大岩さんに主張したら、推論器の代入版を自分で書くことになった。2時間で達成。久しぶりに熱くなった。熱い2時間。でもやっぱりこっちもコードがごちゃごちゃしてわかりにくいかも。<br>
	    </p>
	    <p>
	      最近思うこと。Javaのクラスとメソッドはデフォルトがfinalで継承したい時はvirtualをつけさせた方がいいのに。Javaのメンバ変数はデフォルトがfinalで変更したい時はmutableをつけさせた方がいいのに。と思う。
	    </p>
	    <p>
	      新しい曲を仕入れたい。レンタルしに行こうかなと思うけど返すのが面倒。あとその面倒さを押し切ってまで借りたいと思える人が最近いない。年をとった。小田和正はいつ聞いても いいと思うし。
	    </p>
	    <p>
	      陸上部のうちの代で飲みたい。誰か企画してくれないかな。幹事は面倒だな。うちの学科のシケ長みたいにやってくれる人がいたら。
	    </p>
	  </li>
	  
	  <li><div class="date">(2003.5.12)</div>
	    <p>
	      「リファクタリング」
	    </p>
	    <p>
	      をしてみる。リファクタリングっていうのはソースコードを、保守管理のために書き直すこと。
	      デバッグとか機能追加とは違って、コードの機能とかアルゴリズムは一切変えない。よりよいソースコードに変えるだけ。
	    </p>
	    <p>
	      最近プログラムの設計に非常に興味があって、設計を微妙にしてからコードを書くけど、書き終ったコードを見るとなぜか汚かったりするので、反省を兼ねてリファクタリングを試してみようとする。<br>
	      どうやってやるか、ネットで調べてもあまり出てこないので、いつものラオックスブック舘へ。でも４８００円という値段にひよる。いつか米澤研の公費で買ってくれることに期待。<br>
	      結局ネットで得られた情報とオリジナルの手法でやる。
	    </p>
	    <p>
	      対象は「2003年ML演習質問掲示板」。理由は
	    <ul>
	      <li>
		構造がわかりやすい。
	      </li>
	      <li>
		適度な大きさ。
	      </li>
	      <li>
		最近書いたコード。
	      </li>
	      <li>
		３年生が全然使ってくれないので、バグが生まれてもそんなに問題なさそう。
	      </li>
	    </ul>
	  </p>
	    <p>
	      結果はかなりきれいな設計になったけど、見ためは何もかわらないので多少むなしい。
	    </p>
	    <p>
	      全然関係ないけど、夕飯食べた後に散歩してたら 森下研のなかむに会い、その直後に平木研のなかむに会った。
	    </p>
	  </li>
	  

	  <li><div class="date">(2003.5.11)</div>
	    <p>
	    今日は関カレの日だった。けどやることがいっぱいあったので断念。行きたかった。来週の日曜は行けるといいなと。</p>
	    <p>健康診断がじわじわと近付いてくるので、いかにしたら体脂肪率を下げられるかを考えてみる。普通に考えるとジョグなどの有酸素運動をするのが良さそうだけど、もっとよく考えてみると、体脂肪率と言うのは「率」なんだから体の脂肪の割合を相対的に減らせばよいと気づいた。よって解は「筋トレして脂肪以外のものを増やす」。</p>
	    <p>xemacsからFreeWnnに繋げない時がある。Wnnが悪いやらeggが悪いやら。この間 FreeWnnのバージョンアップしたから多分悪いのはWnn。バージョンダウンしようか。でもそんなネガティブなことはせずにつっきる。</p>
	    <p>深夜に地震があった。4階は揺れる。</p>
	  </li>
	  <li><div class="date">(2003.5.10)</div>
	    部活に1年生がいっぱい入ってていい感じ。今年は女の子も入ってよかったね。豊作。<br>
	    今日はかなりいいことがあった。でも極秘。<br>
	    かなり久しぶりに学科飲みした。忘年会以来。相変わらず濃かった。埼玉埼玉。あややはプロのアイドルだと思った。<br>
	    ヒカルの碁は何巻まで出てるのだろう。とりあえず出てるとこまで読みたい。誰か貸してくれ。その前にジョジョの６部を早く最後まで読みたい。早く新巻を出してくれ荒木。<br>
	    そんなこんなで飲み会が終ったあとに、夜中に地下談話室に漫画を返しにいったらなぜかノムさんがいた。怪しい。    
	  </li>
	  
	  <li><div class="date">(2003.5.9)</div> オブジェクト指向は本当に役に立つか。<br>
	    関数型の言語でばかりプログラムをしていると、オブジェクト指向なんていらないように思えてきます。オブジェクト指向の欠点は、コンパイラの最適化がしづらい &amp; メッセージパッシングなので、どうしてもプログラムが状態変化の記述となってしまって一つのメソッドがどこまで影響しているのかがわかりづらい。 <br>
	    あと、現実のプログラムで継承とか必要な場面は、そんなに多くないように思います。<br>
	    分散環境にも適用できるから、一番外側のレベルでの設計法としてはいいと思うけど、クラス単位の設計法としてはちょっと強引な気がします。<br>
	    モジュールの方がモジュール性高いし。<br>
	    設計方法に「オブジェクト指向」っていうかっこいい名前がついているから人気が出たという感じがします。	    オブジェクト指向がなにか知らない人でも、オブジェクト指向をやってみようって思えるしね。

	  </li>
	  
	  <li>
	    <div class="date">(2003.5.8)</div>今日はバイトを頑張りました。頑張ったというか、そんなに頑張ってないけど、時給制で、マシンのセットアップなんかでやたら時間がかかったので、その分もうかったりして頑張った気になった。<br>
	    そろそろ就活が正念場になってきました。気合いで勝利しないと。<br>
	    2002.5.3に書いたことに対して母に文句を言われました。真実なのに。でも一人でインターネットができるようになるとは&middot;&middot;&middot;成長しましたね、母上。
	  </li>
	  <li>
	    <div class="date">(2003.5.7)</div>ヒカルの碁をサイがいなくなるところまで読みました。近距離囲碁打ち型スタンド。続きが読みたい。誰か貸してくれ。漫画喫茶かな？<br>
	    あと携帯替えました。番号は変わらないので引続きよろしくお願いします。
	  </li>
	  <li>
	    <div class="date">(2003.5.3)</div>GWは実家に帰って、いとこの結婚式に出てきました。楽しかったけど、親類というか主に自分の家族の相手に疲れて疲労困憊。風邪が悪化した。
	  </li>
	  
	  <li>
	    <div class="date">(2003.3.24)</div>サンシャイン60でダンディ坂野を見た。<br>(σ・∀・)σゲッツ！<br>
	    <img src="images/todays/gets.jpg">

	  </li>
	  <li>
	    <div class="date">(2003.2.13)</div>駒裏で収録してるさまぁ〜ずをみました。写メールしようとしたら怒られたので隠し撮り風。<br>
	    <img src="images/todays/summer.jpg"><br>
	    情報をタレこんでくれた人によると「タレコミ」という番組っぽい。
	  </li>
	</ul>
      </div>
    </div>
  </div></td>
			  <td></td>
			</tr>
			<tr>
			  <td><img alt="|" src="/~ganat/images/borders/vline_b.jpg"></td>
			  <td></td>
			  <td></td>
			</tr>
		    </table>
		  </td>
		</tr>
	    </table>
    </td>
  </tr>
  </table>
    <div><a href="/~ganat/old/index.html">前のページはこちら</a></div>
  </body> 
</html>