ハヤカワ文庫(早川書房)分類SF感想SFの主役が土建屋さんとは。岩波文庫だけオーラが違いますね。分量は少ないけど濃そうな内容。いったのでむつかしい内容に慣れることができれば良いな。ちくま新書(筑摩書房)分類ビール(地ビールいろいろ)感想ウィンナーをつまみにビールが飲みたくなる。「取り合えずビール」と言うばかりでは良くないと思わされる一冊。科学技術を先導する30人というシリーズの1冊(1990年初版)。他の人がやってることを自分がやる必要はない、というスタンスがかっこいい。それで成功してきてるところがさらにすごい。書籍2009年11月26日木曜日Emacsの設定(プログラミング).emacsを晒す(その2)プログラミング関係の設定。Emacsからはろくに使ってないけど。ほんの少しだけLinux(mono)で触ったので。一応GHCはインストールされてるけど使われてない。'utf-8-unix);;;;coreファイルから起動.起動時に自前の関数を定義するutil.lispを読み込む。t)))色々な場所で調べたもののコピペばかりなはずだが、参考にしたものがどこにあるのかまでは覚えていない。CommonLispの設定あたりが消え去ったらやる気が著しく削がれるのは間違いないのでメモメモ。Lispのwith-output-to-stringやwith-input-from-stringは便利なのだが、文字列ストリームは名前の通り文字しか読み書きできない。バイナリの読み書きもファイルを開かずに、このように書いてみたい。Streamというものを使って実装している人がいた。単純なものなら結構簡単に書けそうだ。Streamとやらを利用したコードを書いてみた。Lispに書いてあったものを使った。リストでキューを表現する方法が格好良い。これでwrite-byte,read-byteを使えるようになった。ついでにread-char,write-charも書いた。SBCLバイナリデータを読み込む(CL)C++でFDCとお話しする事に疲れたから、逃避するためにLispプログラミング。実践CommonLispに、バイナリファイルのパースという章があったかと思うが、自分の脳みそで考えるのが大事だろうということで書いてみる。;FATはいくつかるか。:u16))試しに読み込んでみる。floatとdoubleで同じ値が表示されるというわけの分からない状態になったのを目撃した。x86系CPUの浮動小数点演算用レジスタはなぜか80bitなので、わけわからないことになるのかもしれない。GCCのコンパイラオプション-ffloat-storeをつけてコンパイルすることでうまくいった。マシンイプシロン2009年11月18日水曜日マルコフ連鎖をCommonLisp+MeCabでバイト中にエントリーシート(の自己PR)を生成するプログラムをつくろうぜ、というネタが出たのでやってみた。思えば去年も現実逃避ぎみに似たようなことをしていた気がする。obj)))))接頭語は2つで、consしてハッシュテーブルのキーにしている。ハッシュテーブルの生成時にキーワードパラメータtestにequalを指定している。ファイルへの書き出しと読み込みは、Lispなのでwrite/readを用いた。形態素解析はmecabを用いているが、すごくやっつけ仕事状態になっている。mecabはデフォルトだとeucを使うらしいので、UTF-8な私のSBCLの環境とあわないため、一時的にexternal-formatの設定を変えて対処した。hunchentootを使ってwebから使えるようにしてみた。(es:emit-es)))さて、問題はサンプルをどこから持ってくるか、だ。TT#4で,S式でアセンブラを書いていたhigepon氏が格好良かった。SBCLでCPUID命令を実行してみた。Interface)でなんとかしようかとも思ったけど、バイナリコードを吐くためにアセンブラを使う方法しか思い浮かばなかったので却下した。CPUID命令を実行するところまでいきたい。Operation)というものを使えばなんとかなりそうだとわかった。...)というのがあるので、幸いにもcpuid命令のバイナリコードは定義してあるようだ。英語を読むパワーがないので、例のごとくとりあえず動くというだけのコードになった。s))))))))%cpu-idは1つ目の引数にEAXの値、2つ目の引数に返してほしいレジスタのオフセットを指定するようにした。レジスタの個数より多くののTN(レジスタ?)は作れないっぽい。GoでFizzBuzz新しい言語に触れるときは,ループや条件分岐が必要なのでFizzBuzzを書いてみることにしている。switchを使ったものと配列を使ったもの、それをメソッドとして呼び出すものの2+1パターンを書いた。hoge.fizzbuzz_hoge();}switchはcaseの部分に色々書ける。if-elseif-elseをswitchとして書ける、ということなのだろう。配列の要素数は型の前に書く。配列内の""のところにnilと書こうとしたけどコンパイラに怒られた。typeじゃないので新しいメソッドを定義できないと言われる。仕方ないのでHoge型を作って呼び出すようにした。GoGoogleのGoで正規表現(regexpパッケージ)昨日インストールしたGoで遊んでみる。みんな大好き正規表現を使ってみつつ、雰囲気を掴もうと試みる。return;}mainパッケージのmain関数がエントリポイントのようだ。importやconst(定数宣言)など、はかっことこっかで囲むことで複数同時に宣言できる。セミコロンはあってもなくても良いらしい。変数の宣言時には、変数名の後に型(クラス?)の名前を書く。"hoge"また、Goは多値を扱える。2つ目の返り値でエラーかどうかを判定する何かを返すことが多そうだ。flagパッケージはコマンドライン引数を処理、fmtパッケージはフォーマット入出力、以下略。documentationにまとめられている。os.Error)となっていれば、関数Printfは1つ目の引数に文字列,その後に可変長で引数を取り、整数とエラーを多値で返す,ということだろう。Languageをインストールした。入ったわけじゃなかったのでメモしておく。環境はVM上のUbuntu(x86).実際に作業したときは環境変数を後で設定しているので、少し手順がおかしいかも。ホームディレクトリにいる。*/GOARCH=386と指定していると、コマンドは8g,8lなどと8が頭につくものになるようだ。go/miscにcgo,emacs,vim,xcodeというディレクトリがある。一応Emacs使いなので、go-mode.elとgo-mode-load.elをマイelファイルディレクトリにコピー。設定ファイルまで用意してくれてるとは素晴らしいですね。思ったらインデントが気にくわない。これがデフォってことはないだろうから私がなにかを間違えているのだろうか。World!\n")}適当なファイル(hello.go)に保存してコンパイル->実行する。hello.goちなみに、気にくわないインデントというのは、こんな感じ。酒の瓶に書かれたPROOFってなにさ本日の酒はアブソルートウォッカ。書いてあったが、何のことかわからなかったので少し調べてみた。英和辞書に、proof=酒類の標準強度という項目があったが、それだけじゃよくわからない。標準強度/2という関係がなりたっているらしい。国によっては度数じゃなくてproofで酒の強さを話すのがメジャーなんだろうか。ちなみに、アブソルートウォッカの原産国はスウェーデン。作っていたのは国有企業だったが、今はフランスの企業に買収されているらしい。酒2009年11月12日木曜日mtoolsフロッピーのイメージをマウントして、そこにファイルをコピーして、アンマウントする、という作業がとてもめんどくさい。3つのコマンドが必要だし、フロッピーのイメージをマウントするのでルート権限まで要求されるようだし。tools?)というものがあることを教えてもらった。ubuntuならapt-getで入るようだ。/etc/mtools.confに設定を書くことになるので、てきとーに以下の記述を加えた。mformat_only以下、mtoolsの良いところを示すコマンド例。file="floppy.img"と設定したおかげで、z:hoge.binと書くとカレントディレクトリのファイルfloppy.imgをマウントした際の/hoge.binとして扱えるようだ。mtools2009年11月10日火曜日C++のスタートアップ(C++でカーネルコードを書きたい)以前適当に解決しようとした問題を調べた。いってもwiki.osdev.orgのC++の項目を読んだだけ。英語の読解力がろくに無いので間違えて理解したかもしれない。ようは、OSというパトロンがいなくなったC++さんが路頭に迷わないための手引き。以下自分の理解をまとめる。osdev.orgにはサンプルコードまで載っていて素敵です。デフォルトのスタートアップコードを利用しないデフォルトでは、G++はmainが呼び出される前に実行されるコードや、mainがreturnした後に呼ばれるコードをリンクしようとする。無効にするために-nostartfilesオプションをつける。new/delete必要な処理を無効にしてしまった以上は、自前で実装しなければならない。global/staticなオブジェクトのコンストラクタ、デストラクタを呼び出すコードを追加すればよい。コンストラクタ、デストラクタではnew/delete(new[]/delete[]も)が必要なので、これらも実装しなければならないが、その際にメモリマネジメントの機能が必要になる。newというテクニックもあるらしい。global/staticオブジェクトのコンストラクタ、デストラクタを登録する。C++のコードにジャンプする前後にこれらのセクションの内容を処理する。セクションの境界を知るためにリンカスクリプトを書く。__cxa_atexitは、__cxa_finalizeで呼ばれる,オブジェクトや共有リソースを破棄する時のハンドルを登録する。C++のカーネルコードが終了したら__cxa_finalize(0)を呼ぶべき。dctorの処理と__cxa_finalize(0)の呼び出しは両方するべきなのだろうか。終了時の事はあまり気にしなくても動くので良いか。function)純粋仮想関数がオーバライドされていないのに呼びだされる(?)ときのための関数を用意する。どこかの.cpp内に、__cxa_pure_virtualという関数を作る。"C"でC言語のリンケージを指定する。variablesGCCはローカルなスタティック変数のコンストラクタの前後に、複数スレッドから同時に呼び出されないように保護するコードを挿入するらしい。いままで気にした事が無いシンボル名が出てきたので、他のどこかのオプションで無効になってるのではなかろうか。標準ライブラリを無効にするところだろうか。するために-fno-tffiオプションをつける。無効にするために-fno-exceptionsオプションをつける。TT#4に参加していた。TT#3に続いて2度目の参加だったけど、相変わらず発表も周囲の人もレベルが高すぎて、自分なんかが話を聞いててよいのだろうかと思うことしばしば。Lispを使う人の最低ラインが上昇するんじゃないかと思ったので、もう少しまともに学ぼうという気持ちがわいてきた。この気持ちが持続すれば問題はないんですけどね。運営、発表の方々には深く感謝。次回も参加したいので、申し込み開始時にはモニタ前で正座して待機することにしよう。zpb-ttfのみで問題無いんじゃないかと思ったのでやってみた。:cl-glfw-glu);;取り合えずxの最小値~最大値が0~1.0となるよう調整。;;x,yについて実行すべき関数の多値を返す;;返り値vertex-2fに渡したいので、関数はsingle-floatを返す。p2)))))))))))問題として、塗りつぶすことをまったく考えてない事がある。あたりにかえて書けば良さそうだけど、ベクトルを忘れ去っている似非理系なのでまずは数学のお勉強から始めなければならないみたいだ。続cl-yaccどうしようか迷ったけど、いいや貼り付けてしまえ。文法をうまくかけるかどうか、ということが問題。自分の脳みそではあんまり考えられないけど、何かの文法をパクっても、どうせ途中でオレオレルールになるだろうから、試行錯誤しながら書いてみる。)read-c-likeで読み込んだリストを引数にしてlist-lexer-cを呼び出し、さらにその返り値をyacc:parse-with-lexerにパーサの定義とともに渡す。FizzBuzzを書くいてみると、こうなる。ifとネストできるが、{}は必須。パースした結果は以下のとおり。A))))))スキルが無かろうと、ひたすら適当な文法をつづれば、一応動く。相模灘(日本酒)購入(2009/11/01)伊勢原市の中屋という酒屋(小田急伊勢原駅から徒歩15分程度)で、前々から買おうと思っていた相模灘という日本酒を購入した。(久保田酒造/神奈川)同じ銘柄ばかり買おうとする自分に、店の方が話しかけてくださった。こんな若造にわざわざ付き合っていただいて感謝です。県内でおいしい地酒が作られていてうれしい。そんなことを思いつつ、今日は雄町の方を飲んでみる神奈川県民なのでした。酒2009年11月1日日曜日C++で書いたコードをGRUBから起動したいGRUBから起動するコードをCで書いていたが、ろくに触ったことのないC++に書き換えてみることにした。OSの力が借りられない(と思う)ので、コンパイルが通らなかったり、リンクできなかったりと大変だったので、とりあえずの解決へいたった道筋をメモしておく。一応動くようになった、というレベルでしかないので、間違ったことをしているかもしれないし、勝手に思い込んでるだけという可能性も高い。環境はVM上のUbuntu8.04。ldでリンクという流れ。staticメンバへの参照を解決できないstaticメンバはクラス定義の外部に実態を作らないといけないeh_frameというセクションから何かの関数への参照を解決できないeh_frameは例外処理関係のコードが入ってるらしい。new以外で静的に用意したオブジェクトの初期化と後処理のための関数?cxa_atexitで終了時に動作するデストラクタを登録している?ダミーのcxa_atexitをリンクさせて無理やり解決dso_handleはよくわからない。Object関係?libgcc.aからarコマンドでdso_handle.oを抜き出してリンク。しなければいけないらしい割と問題が山積みな気もするけど、一応動くとこまで持っていけるということで手打ちにする。OScl-yaccでCライクなコードを読むRubyライクな構文を読む、というネタを見たときからやってみたいと思ってたのでcl-yaccで遊んでみた。}}こんなコードに変換されるようになった。1)))))readで読み込んだ順のリストを作り、リストの内容が頭から取り出せるlexerを用意し、すさまじく適当な文法のparserでS式に変換している。CommonLisp用に読み込まれてしまったり他のシンボルの一部になってしまったりするので、リーダマクロでシンボルを返すようにした。fuga)にされてしまうという困った状態になった。この調子だと明日もこのネタで遊んでそう。文字列の中にCっぽく改行を入れるCなどのように文字列中の改行を"\n"と書けるようにしてみた。ダブルクオートにまで自前で設定できるなんてフリーダム。mic-paren)いつか.emacsが消滅したときに復元する手助けになると信じて,適当に選んだ部分を晒してみる。1つ目はタイムスタンプ。設定が変わるとめんどくさそうなので、どの環境でも同じ状態にしておきたい。20)Cのインデントスタイルの設定。変わっても問題はないだろうけど、慣れているインデントスタイルにすぐ戻れるように。c-basic-offset)))mic-paren.elの設定。一応Lisp使いの末端の端っこくらいには引っかかってほしいと思ってるので、括弧を見やすくするために入れている。t)anything.elをsdic用に設定してみたもの。anything自体ろくに使っていないけど、自分で書いたネタコードはこのくらいしかないので保存しておく。あとで黒歴史扱いする自分の姿が見えないでもない。(volatile)))いろいろ酷いことになっているけど、ネタなので放置。Emacs2009年10月23日金曜日sb-threadSBCLはデフォルトでマルチスレッド対応が無効になってるらしい。バイナリパッケージからインストールしたものだと*features*にsb-threadが入っていない。DISTRIBUTIONの項目にカスタマイズの設定を書いてビルドしろとのことらしいので、ちょうど良い機会ということにして1.0.29から1.0.30に乗り換えることにした。INSTALLファイルに書いてあるとおり、customimze-target-features.lispファイルを作り、設定をそのままコピペする。install.shとするだけ。SBCLがインストールされてる環境なのでオプションをつけずともすんなりと進んだ。LispでGLFW(OpenGLのフレームワーク)を動かすライブラリがあるので利用して遊んでみる。2Dの表示をやってみた。quad)))おそらくCで書いてもほとんど同じコードになるんだろうなぁ。CommonLisp読了(2009/10/21)昨日今日で2冊本を読んだ。感想ネタっぽいことをまじめに考えてみるのは楽しい。世界征服の目的について考えているが、なにかを行う時には目的設定が大事なので、本来なら世界征服を目指すすべての人々が行ってしかるべきなことなんだろうなぁ。時間SF感想SFを読みたくなったので買ってみた。宇宙を駆けめぐったり時間移動したりな話は大好きです。本作は時間を遡ってバトバトする話。いや、略しすぎですけどね。