凝らなきゃ簡単、かな?
2001年11月21日 実は、この歳までPowerPointを触ったことが無かったのだけど、今日始めて触ってみた。
……。
好きな人は楽しいだろうなぁ、これ。
私は面倒がりなので、とてもそっけないスライドを作るだろうけれど。
けれど、最初から用意されているデザインの富士山とかって、どういうシチュエーションで使われることを想定しているのだろうか?
使えるシチュエーションが少なそうだ。
む。Excelの表がうまく貼れない。
仕方が無い、ビットマップとして貼るか。
と、そんな感じの一日。
……。
好きな人は楽しいだろうなぁ、これ。
私は面倒がりなので、とてもそっけないスライドを作るだろうけれど。
けれど、最初から用意されているデザインの富士山とかって、どういうシチュエーションで使われることを想定しているのだろうか?
使えるシチュエーションが少なそうだ。
む。Excelの表がうまく貼れない。
仕方が無い、ビットマップとして貼るか。
と、そんな感じの一日。
たまにC++を使ってみたら、大変なことに
2001年11月20日 友人Eに頼まれて、プログラムを組む。
内容は、ちょっとしたデータ処理をするプログラムである。
「Eが自分で組めばいいのになぁ」と思ったけれど、なんだか困ってそうなので私が組んだ。
言語はC++。「私が使い慣れているから」て理由と、EのパソコンにRubyが入っていないからって理由でC++を選んだのだけど、これが失敗だった。
実のところ最近まともにC++を使ってなかったので「C++を使い慣れていた」って感じの、もはや過去形になってしまっていた。
コピーコンストラクタは書き間違えるし、STLの挙動を忘れているし、って感じで散々だ。
おそらく、すんなりいった場合の3倍は時間が掛かったに違いない。
プログラムを引き受けて、かえって友人Eに迷惑を掛けてしまったかも。
すまない。
ってまあ、Eはこの日記を読んではいないけれど。
内容は、ちょっとしたデータ処理をするプログラムである。
「Eが自分で組めばいいのになぁ」と思ったけれど、なんだか困ってそうなので私が組んだ。
言語はC++。「私が使い慣れているから」て理由と、EのパソコンにRubyが入っていないからって理由でC++を選んだのだけど、これが失敗だった。
実のところ最近まともにC++を使ってなかったので「C++を使い慣れていた」って感じの、もはや過去形になってしまっていた。
コピーコンストラクタは書き間違えるし、STLの挙動を忘れているし、って感じで散々だ。
おそらく、すんなりいった場合の3倍は時間が掛かったに違いない。
プログラムを引き受けて、かえって友人Eに迷惑を掛けてしまったかも。
すまない。
ってまあ、Eはこの日記を読んではいないけれど。
コメントをみる |

やけに強気なDNS
2001年11月19日 DNSも作りたいのだけど、BINDは実に面倒そうだ。
で、何か簡単そうな方法は無いかなと思っていたら、やたら強気なDNSを見つけた。djbdnsという名前。私が知らなかっただけで有名っぽい。
どう強気かというと、(djbdns.jp.qmail.org/djbdns/ad/unbind.html)のような感じ。
有名なBINDをここまでコケにできるのなら、さぞやdjbdnsは凄いのだろう。
まあ、他の人から「BINDを使え」とか言われているわけじゃないから、これを採用することにしてみる。
うまく動かすことができるかな? 楽しみ。
で、何か簡単そうな方法は無いかなと思っていたら、やたら強気なDNSを見つけた。djbdnsという名前。私が知らなかっただけで有名っぽい。
どう強気かというと、(djbdns.jp.qmail.org/djbdns/ad/unbind.html)のような感じ。
有名なBINDをここまでコケにできるのなら、さぞやdjbdnsは凄いのだろう。
まあ、他の人から「BINDを使え」とか言われているわけじゃないから、これを採用することにしてみる。
うまく動かすことができるかな? 楽しみ。
テストの方法が変だったとはね
2001年11月18日 今週はひそかにファイアウォールを作ろうとしていた。いきなり本番だと、他の研究室に迷惑がかかっちゃうかもしれないから、ちょっと試しに作って、テストしてみた。
が、なせだかうまくいかない。
(www.jp.freebsd.org/)とかみて、いろいろ調べてみる。
……。
2枚のNICが、二つとも同じネットワーク(物理的に、という意味じゃなくて、IPアドレスとネットマスクの都合で、そういう意味になっている場合)に繋がっていると、普通にやっただけじゃうまく機能しないのだね。
テストの方法が間違ってた…。
あうぅ。
ま、NICはちゃんと認識されている様子だし、ファイアウォールを有効にすると、ファイアウォールのマシン自体はちゃんとパケットをはじくようだし、ちゃんと機能するだろう。
うん。
他にも、まだこのマシンにはさせなくちゃいかん仕事があるから、実際に使うのはもう少し先になるけど。
が、なせだかうまくいかない。
(www.jp.freebsd.org/)とかみて、いろいろ調べてみる。
……。
2枚のNICが、二つとも同じネットワーク(物理的に、という意味じゃなくて、IPアドレスとネットマスクの都合で、そういう意味になっている場合)に繋がっていると、普通にやっただけじゃうまく機能しないのだね。
テストの方法が間違ってた…。
あうぅ。
ま、NICはちゃんと認識されている様子だし、ファイアウォールを有効にすると、ファイアウォールのマシン自体はちゃんとパケットをはじくようだし、ちゃんと機能するだろう。
うん。
他にも、まだこのマシンにはさせなくちゃいかん仕事があるから、実際に使うのはもう少し先になるけど。
八木とか、ダイポールとかではなくて
2001年11月17日 アンテナというシステムがある。主に日記とかの更新を捉えるためのシステムだ。ちなみに、いちばん有名なのは、「朝日奈アンテナ」だと思う。
前々から不思議なんだけど、DiaryNoteの日記がアンテナに捉えられているのを見たことがないんだよね…。
よって、DiaryNoteの日記を捉えているアンテナが実際に無いのかちょいと調べてみようと思った。が、アンテナはかなりたくさんあって、探すのを断念。
しかし、ぱっと見たところ、(www.fastwave.gr.jp/diarysrv/)の日記以外の無料日記サービスでアンテナに捉えられているのは、少数派のようである。
うーん。
考えられることしては、
1.無料日記サービスを使う人は実は少数派。
2.アンテナを作るような人が読む日記は、無料日記サービスには少ない。
って辺りだろうか。
本当のところの理由は、なんなのだろうね?
前々から不思議なんだけど、DiaryNoteの日記がアンテナに捉えられているのを見たことがないんだよね…。
よって、DiaryNoteの日記を捉えているアンテナが実際に無いのかちょいと調べてみようと思った。が、アンテナはかなりたくさんあって、探すのを断念。
しかし、ぱっと見たところ、(www.fastwave.gr.jp/diarysrv/)の日記以外の無料日記サービスでアンテナに捉えられているのは、少数派のようである。
うーん。
考えられることしては、
1.無料日記サービスを使う人は実は少数派。
2.アンテナを作るような人が読む日記は、無料日記サービスには少ない。
って辺りだろうか。
本当のところの理由は、なんなのだろうね?
早起きは三文の得といいますが、夜更かしはどうなのだろう?
2001年11月16日 朝までゲームをして過ごす。
もっとも、ゲームを開始したのも夜遅かったけれどね。
やっていて思ったのだけど、文字を読むのがメインなゲーム(ノベル系のゲーム)は、眠い状態で遊んだほうが面白い気がする。
こう、ゲームの世界に入り込めるというか。
ちなみにゲームといえども、寝不足でシューティングやシミュレーションは駄目。前者は些細なミスで、イライラするようになるし、後者は非効率な判断をしがちになる。
夜にノベル系のゲームを遊んで楽しいのは、ノベル系のゲームは、論理的な部分に訴えかけてくるのではなく、情緒的な訴えかけてくるものが多いからかもしれない。
夜に文章を書いていて、翌朝に読み返して見る。すると、とてもじゃないけれど、人に見せられないような文書になっていた、なんて経験のある人もいるだろう。
「書いたレポートが論理的に破綻していた」とかじゃなくて、手紙とか、感想文とかを書いていて感情を込めすぎたとか、そういう理由でね。
どこかそういったことと、寝不足でゲームを遊んでいて楽しいのと関連があるのかもしれない、なんて思ってみた。
夜になると、論理的な思考はしにくくなり、その分情緒的な思考(?)が表に出てくるのかな、とか。
もっとも、ゲームを開始したのも夜遅かったけれどね。
やっていて思ったのだけど、文字を読むのがメインなゲーム(ノベル系のゲーム)は、眠い状態で遊んだほうが面白い気がする。
こう、ゲームの世界に入り込めるというか。
ちなみにゲームといえども、寝不足でシューティングやシミュレーションは駄目。前者は些細なミスで、イライラするようになるし、後者は非効率な判断をしがちになる。
夜にノベル系のゲームを遊んで楽しいのは、ノベル系のゲームは、論理的な部分に訴えかけてくるのではなく、情緒的な訴えかけてくるものが多いからかもしれない。
夜に文章を書いていて、翌朝に読み返して見る。すると、とてもじゃないけれど、人に見せられないような文書になっていた、なんて経験のある人もいるだろう。
「書いたレポートが論理的に破綻していた」とかじゃなくて、手紙とか、感想文とかを書いていて感情を込めすぎたとか、そういう理由でね。
どこかそういったことと、寝不足でゲームを遊んでいて楽しいのと関連があるのかもしれない、なんて思ってみた。
夜になると、論理的な思考はしにくくなり、その分情緒的な思考(?)が表に出てくるのかな、とか。
バベルの塔の話というほどでもないけれど
2001年11月15日 昼にワイドショーをちょこっと見る。
暇人っぽいけれど、気にしてはいけない。
そこで女子高生の言葉が取り上げられていた。「てゆーか」という単語である。
…ごめん。私もしばしば使っている。
それは置いておいて、業界などで使われる専門用語も、別のコミュニティの人にはしばしば通じないという意味では、そう大差はないのかもしれないと、ぼんやり考えてしまった。
そんなことを考えたのは、私がオブジェクト指向を始めたばかりのころに、言葉で苦しんだからかもしれない。同じ概念を指す言葉が複数種類あったり、同じ言葉でも本によって、言葉の使い方が違ったりで、「まったくもう」という感じだった。
最近は、私が馴れたのか、ひそかに言葉が統一されてきているのか、私は理解できるようになってきたけれども。
暇人っぽいけれど、気にしてはいけない。
そこで女子高生の言葉が取り上げられていた。「てゆーか」という単語である。
…ごめん。私もしばしば使っている。
それは置いておいて、業界などで使われる専門用語も、別のコミュニティの人にはしばしば通じないという意味では、そう大差はないのかもしれないと、ぼんやり考えてしまった。
そんなことを考えたのは、私がオブジェクト指向を始めたばかりのころに、言葉で苦しんだからかもしれない。同じ概念を指す言葉が複数種類あったり、同じ言葉でも本によって、言葉の使い方が違ったりで、「まったくもう」という感じだった。
最近は、私が馴れたのか、ひそかに言葉が統一されてきているのか、私は理解できるようになってきたけれども。
何故だか惹かれるものがある
2001年11月14日「オブジェクト指向には、人を惹きつける魔力があるよね」とは、私の友人KJの言葉だが、コンピュータの設定にも似たようなところがあると思う。
そういうわけで、私も最近コンピュータの設定にはまり気味。
なんで、面白そうに見えるのだろうか。あれは。
けれど、もしも、「おい。管理者、ちゃんと設定しろ」とか言われたら、やる気がしない気がする。
…あれか。
中学校のときとかに、「勉強しろ」と言われるとなんとなく、やる気がなくなるのと同じか?
当時は「いわゆる反抗期だからなのか?」と思っていたけれど、今になっても似た事が起こるのだから、別の理由なのだろう。
うーん。わからん。
そういうわけで、私も最近コンピュータの設定にはまり気味。
なんで、面白そうに見えるのだろうか。あれは。
けれど、もしも、「おい。管理者、ちゃんと設定しろ」とか言われたら、やる気がしない気がする。
…あれか。
中学校のときとかに、「勉強しろ」と言われるとなんとなく、やる気がなくなるのと同じか?
当時は「いわゆる反抗期だからなのか?」と思っていたけれど、今になっても似た事が起こるのだから、別の理由なのだろう。
うーん。わからん。
こんなところで、出てくるとは。
2001年11月13日 「ソフトウェアパターン再考」を一部飛ばしたけれど、読み終わる。
後半、よく理解できなかった…。
λ式とか出てきたのだけど、授業で出ないことを理由に、全然やってなかったから、さっぱり。まあ、その章を書いている人が、どういう研究を紹介したかったのか大体分かったから、よしとしよう。
この本、夏休みぐらいに読んでいたらなぁ…。私の研究の進め方が変わっていたかも。大きくは変わらないと思うけれど。
もう少しまめに本屋さんめぐりをしないといけないなぁ…、と反省。
後半、よく理解できなかった…。
λ式とか出てきたのだけど、授業で出ないことを理由に、全然やってなかったから、さっぱり。まあ、その章を書いている人が、どういう研究を紹介したかったのか大体分かったから、よしとしよう。
この本、夏休みぐらいに読んでいたらなぁ…。私の研究の進め方が変わっていたかも。大きくは変わらないと思うけれど。
もう少しまめに本屋さんめぐりをしないといけないなぁ…、と反省。
たまには、反省を
2001年11月12日 見直してみて思ったけれど、作業メモがやたら見難い。理由は私が思うに、
・書かなくてもいいことも書いている。
・DiaryNoteのレイアウトの都合上、あんまり一行が長くできない。
っていうことが原因があると思う。
DiaryNoteに、ソフトのインストール記録とかを書くのは止めておこう。
この日記を読んでいる大半の人は、興味を持たないであろうし。
とはいえ、ソフトウェアを扱っている人以外にはどうでもいいことも、今後もネタにはすると思うけれど。
それは、「他分野の人の話を読むのも、私は好きだから」というのが理由。私以外にも、まあ、少しはそんな人がいるだろう。
・書かなくてもいいことも書いている。
・DiaryNoteのレイアウトの都合上、あんまり一行が長くできない。
っていうことが原因があると思う。
DiaryNoteに、ソフトのインストール記録とかを書くのは止めておこう。
この日記を読んでいる大半の人は、興味を持たないであろうし。
とはいえ、ソフトウェアを扱っている人以外にはどうでもいいことも、今後もネタにはすると思うけれど。
それは、「他分野の人の話を読むのも、私は好きだから」というのが理由。私以外にも、まあ、少しはそんな人がいるだろう。
Ruby/GTKをWindows98で
2001年11月11日 今日は作業メモ。
RubyでGUIなアプリが作れると、自分用のちょっとしたツールを書きたくなったときに便利なのではないかと思ったので、使えるようにしようと思ってみた。
使ったのはruby1.6.4。ものぐさな私はCマガの付録に収録されていたバイナリを入れてある。多分、(homepage1.nifty.com/arima/ruby/)にあるのと同じもの。
まず悩んだのが、(www.ruby-lang.org/gtk/ja/)に置いてある、ruby-gtk-0.25.tar.gzが必要かということ。結論から言うと、必要なかった。でも、サンプルが付いているので、ダウンロードしておくことを推奨。
ruby-gtk-0.25.tar.gzは多分、rubyをインストールしたときどこかに、gtk.soというファイルがあれば必要ない。私の場合は、C:/ruby/lib/ruby/site_ruby/1.6/i386-cygwinにインストールされていた。
次にDLLを取ってこなければならない。(www.os.rim.or.jp/~eban/)に置いてある、gtk-dlls-20000215.zipというファイルを取ってきた。解凍してruby.exeと同じフォルダにほりこんだ。
ここで、
>ruby -e "require ’gtk’"
と入力。
出力は、
-e:1:in `require’: dlopen: Win32 error 1157 - /cygdrive/c/RUBY/lib/ruby/site_ruby/1.6/i386-cygwin/gtk.so (LoadError)
from -e:1
よく分からんけど、失敗している…。
GTKのバージョンが新しすぎるのではないかということを疑う。
しかし、gtk.soの中を覗くと、gtk-1.3.dllの文字列がある。私が取ってきたdllと同じ名前だ。きっと、バージョンも同じに違いない。マイナーバージョンは違うかもしれないけれど。
悩んだ挙句、(homepage1.nifty.com/markey/ruby/gtk-win/gtk01.html)の記述を思い出す。で、(www.gimp.org/~tml/gimp/win32/downloads.html)からファイルを取ってくることにした。微妙に古い日付が不安を誘う。
私が取ったのは、以下の4つ。いらないものも混ざっているかもしれないけれど、よく分からなかったから適当に取った。
・extralibs-dev-20001007.zip
・glib-dev-20001226.zip
・gtk+-dev-20001226.zip
・libiconv-dev-20001007.zip
解凍してDLLだけ、ruby.exeと同じフォルダにほりこんだ。私の場合は、C:/ruby/bin。
また、
>ruby -e "require ’gtk’"
と入力。
出力は、…何もでない。
ということは、おそらく成功!
というわけで、さっそくruby-gtk-0.25.tar.gzに入っていたサンプルの一つ、text.rbを実行してみる。
ソースを斜め読みしたところ、ボタン押すと、「Hello, world.」と出力されるようだ。
あ、動いている。
ということで、多分うまくいったので今日は終わり。
RubyでGUIなアプリが作れると、自分用のちょっとしたツールを書きたくなったときに便利なのではないかと思ったので、使えるようにしようと思ってみた。
使ったのはruby1.6.4。ものぐさな私はCマガの付録に収録されていたバイナリを入れてある。多分、(homepage1.nifty.com/arima/ruby/)にあるのと同じもの。
まず悩んだのが、(www.ruby-lang.org/gtk/ja/)に置いてある、ruby-gtk-0.25.tar.gzが必要かということ。結論から言うと、必要なかった。でも、サンプルが付いているので、ダウンロードしておくことを推奨。
ruby-gtk-0.25.tar.gzは多分、rubyをインストールしたときどこかに、gtk.soというファイルがあれば必要ない。私の場合は、C:/ruby/lib/ruby/site_ruby/1.6/i386-cygwinにインストールされていた。
次にDLLを取ってこなければならない。(www.os.rim.or.jp/~eban/)に置いてある、gtk-dlls-20000215.zipというファイルを取ってきた。解凍してruby.exeと同じフォルダにほりこんだ。
ここで、
>ruby -e "require ’gtk’"
と入力。
出力は、
-e:1:in `require’: dlopen: Win32 error 1157 - /cygdrive/c/RUBY/lib/ruby/site_ruby/1.6/i386-cygwin/gtk.so (LoadError)
from -e:1
よく分からんけど、失敗している…。
GTKのバージョンが新しすぎるのではないかということを疑う。
しかし、gtk.soの中を覗くと、gtk-1.3.dllの文字列がある。私が取ってきたdllと同じ名前だ。きっと、バージョンも同じに違いない。マイナーバージョンは違うかもしれないけれど。
悩んだ挙句、(homepage1.nifty.com/markey/ruby/gtk-win/gtk01.html)の記述を思い出す。で、(www.gimp.org/~tml/gimp/win32/downloads.html)からファイルを取ってくることにした。微妙に古い日付が不安を誘う。
私が取ったのは、以下の4つ。いらないものも混ざっているかもしれないけれど、よく分からなかったから適当に取った。
・extralibs-dev-20001007.zip
・glib-dev-20001226.zip
・gtk+-dev-20001226.zip
・libiconv-dev-20001007.zip
解凍してDLLだけ、ruby.exeと同じフォルダにほりこんだ。私の場合は、C:/ruby/bin。
また、
>ruby -e "require ’gtk’"
と入力。
出力は、…何もでない。
ということは、おそらく成功!
というわけで、さっそくruby-gtk-0.25.tar.gzに入っていたサンプルの一つ、text.rbを実行してみる。
ソースを斜め読みしたところ、ボタン押すと、「Hello, world.」と出力されるようだ。
あ、動いている。
ということで、多分うまくいったので今日は終わり。
factoryMethodをクラスメソッドにして、部品に持たせちゃえ
2001年11月10日 なんだか、前回といい、今回といい、個人的なメモだな…。
ごめん。
「initializeが多重定義できない」のに、どうやって複数の生成方法を実装するか。
考えたのだけど、「これは完璧だ!」というのが思いつかなかった。
考えたのは二つあって、
1.FactoryMethodパターンを適応する
2.生成のためのクラスメソッド定義する。
である。
両方とも欠点がある。
■案1の欠点
1.初期化していないProductクラスのインスタンス生成が、可能なこと。Creatorクラスを介さなくても、生成は可能だから。
2.無駄にクラス数が増える。
■案2の欠点
1.初期化していないProductクラスのインスタンス生成が、可能なこと。newをprivateに宣言できたらできるのだろうか? できるのかもしれないけれど、方法がわからない。
2.継承の時に面倒。クラスメソッドの呼び出しに対しては、ポリモルフィズムが生じない。
ちなみに案2の方を書いてみると、次のような感じ。
class Product
def self.factoryMethod
return Product.new
end
def self.createA
return detailInitializeA(self.factoryMethod)
end
def self.detailInitializeA(aInstance)
# Aな初期化処理
return aInstance
end
def self.createB
return detailInitializeB(self.factoryMethod)
end
def self.detailInitializeB(aInstance)
# Bな初期化処理
return aInstance
end
end
class ProductChild < Product
def self.factoryMethod
return ProductChild.new
end
#必ず上書き。もししないと、親クラスのfactoryMethodが呼ばれる。
def self.createA
return detailInitializeA(self.factoryMethod)
end
def self.detailInitializeA(aInstance)
super
# Aな初期化処理
return aInstance
end
def self.createB
return detailInitializeB(self.factoryMethod)
end
def self.detailInitializeB(aInstance)
super
# Bな初期化処理
return aInstance
end
end
begin
a = ProductChild.createA
print a, " "
end
ごめん。
「initializeが多重定義できない」のに、どうやって複数の生成方法を実装するか。
考えたのだけど、「これは完璧だ!」というのが思いつかなかった。
考えたのは二つあって、
1.FactoryMethodパターンを適応する
2.生成のためのクラスメソッド定義する。
である。
両方とも欠点がある。
■案1の欠点
1.初期化していないProductクラスのインスタンス生成が、可能なこと。Creatorクラスを介さなくても、生成は可能だから。
2.無駄にクラス数が増える。
■案2の欠点
1.初期化していないProductクラスのインスタンス生成が、可能なこと。newをprivateに宣言できたらできるのだろうか? できるのかもしれないけれど、方法がわからない。
2.継承の時に面倒。クラスメソッドの呼び出しに対しては、ポリモルフィズムが生じない。
ちなみに案2の方を書いてみると、次のような感じ。
class Product
def self.factoryMethod
return Product.new
end
def self.createA
return detailInitializeA(self.factoryMethod)
end
def self.detailInitializeA(aInstance)
# Aな初期化処理
return aInstance
end
def self.createB
return detailInitializeB(self.factoryMethod)
end
def self.detailInitializeB(aInstance)
# Bな初期化処理
return aInstance
end
end
class ProductChild < Product
def self.factoryMethod
return ProductChild.new
end
#必ず上書き。もししないと、親クラスのfactoryMethodが呼ばれる。
def self.createA
return detailInitializeA(self.factoryMethod)
end
def self.detailInitializeA(aInstance)
super
# Aな初期化処理
return aInstance
end
def self.createB
return detailInitializeB(self.factoryMethod)
end
def self.detailInitializeB(aInstance)
super
# Bな初期化処理
return aInstance
end
end
begin
a = ProductChild.createA
print a, " "
end
目的のために、手段を選んでしまう
2001年11月9日 今日もプログラミングな話。
私の思考の過程を記述したものなので、中身が薄いかも。ごめん。
あと、読んでて「せこ(仮名)って馬鹿?」と思っても、突っ込まないように。私も普段からそう思いつつ、騙し騙し生きているのだから。
言い訳が終わったところで、本題。
11月7日の日記で、「initializeが多重定義できない」と書いたけれど、昨日はそのことで少し悩んだ。
遺伝子を生成するときに、「親となる遺伝子があって、それを交叉して作る場合」と「親となる遺伝子がない場合」の二通りが必要だったのだ。前者は遺伝子を進化(?)させるときに使い、後者は、最初の最初で個体を初期化するときに使う。
これを、「initializeが多重定義できない」と言う条件のもと、どう実装するか、というのが今回の問題。
「交叉」という聞きなれない単語があるので、私は「『親から作る場合』と『親なしで作る場合』がある」と単語を置き換えて思考した。
解決法として、私が考えたのは
1.initialize中では、初期化しない。後で、別のメソッドで初期化する。
2.どちらか一方の初期化を特別視する。
というもの。
まず、案1の方について考える。
これは、できれば避けたいと思った。「生成と初期化がセットになっている」という実装の方が、分かりやすいからだ。
で、案2。これは、「一つ基本的な初期があって、他の初期化はそれを特化したもの」って場合だと、きれいな感じの実装になると思う。案1を採用しなかった理由で言っていることと、少し矛盾している気もするが、私の中では許容範囲。
しかし、今回は案2もどうにも…。「インスタンスを生成する」ということ以外、初期化に共通性を見出すことが私はできなかった。
で、私は一歩手前に戻った。「『親から作る場合』って考えかが美しくないのだ。すでに存在する遺伝子同士を混ぜ合わせるって考えればいいんだ」と、私は思いついた。
すなわち、「新しく作る」っていうのは一種類にして、もう一つは「混ぜる」と考えることした。
「混ぜる」の方の手順としては、
1.優秀な遺伝子をコピーする。
2.そいつに別の遺伝子を混ぜる。
実装的には、次のような感じ。
individuaA = Marshal.load( Marshal.dump(individuaOrg) ) #コピー
individuaA.cross(individuaB, crossingPoint) #混ぜる
結局これを採用した。
悪くない実装のような気がするけれど、なんだかすっきりしない。
今回の場合は、そこそこうまくいったけれど、これがいつでも通用する気はしない。
って、わけで実際に使ってないけれど、別の方法も考えたりしてみた。
明日、気が向いたら、その別の方法について。
私の思考の過程を記述したものなので、中身が薄いかも。ごめん。
あと、読んでて「せこ(仮名)って馬鹿?」と思っても、突っ込まないように。私も普段からそう思いつつ、騙し騙し生きているのだから。
言い訳が終わったところで、本題。
11月7日の日記で、「initializeが多重定義できない」と書いたけれど、昨日はそのことで少し悩んだ。
遺伝子を生成するときに、「親となる遺伝子があって、それを交叉して作る場合」と「親となる遺伝子がない場合」の二通りが必要だったのだ。前者は遺伝子を進化(?)させるときに使い、後者は、最初の最初で個体を初期化するときに使う。
これを、「initializeが多重定義できない」と言う条件のもと、どう実装するか、というのが今回の問題。
「交叉」という聞きなれない単語があるので、私は「『親から作る場合』と『親なしで作る場合』がある」と単語を置き換えて思考した。
解決法として、私が考えたのは
1.initialize中では、初期化しない。後で、別のメソッドで初期化する。
2.どちらか一方の初期化を特別視する。
というもの。
まず、案1の方について考える。
これは、できれば避けたいと思った。「生成と初期化がセットになっている」という実装の方が、分かりやすいからだ。
で、案2。これは、「一つ基本的な初期があって、他の初期化はそれを特化したもの」って場合だと、きれいな感じの実装になると思う。案1を採用しなかった理由で言っていることと、少し矛盾している気もするが、私の中では許容範囲。
しかし、今回は案2もどうにも…。「インスタンスを生成する」ということ以外、初期化に共通性を見出すことが私はできなかった。
で、私は一歩手前に戻った。「『親から作る場合』って考えかが美しくないのだ。すでに存在する遺伝子同士を混ぜ合わせるって考えればいいんだ」と、私は思いついた。
すなわち、「新しく作る」っていうのは一種類にして、もう一つは「混ぜる」と考えることした。
「混ぜる」の方の手順としては、
1.優秀な遺伝子をコピーする。
2.そいつに別の遺伝子を混ぜる。
実装的には、次のような感じ。
individuaA = Marshal.load( Marshal.dump(individuaOrg) ) #コピー
individuaA.cross(individuaB, crossingPoint) #混ぜる
結局これを採用した。
悪くない実装のような気がするけれど、なんだかすっきりしない。
今回の場合は、そこそこうまくいったけれど、これがいつでも通用する気はしない。
って、わけで実際に使ってないけれど、別の方法も考えたりしてみた。
明日、気が向いたら、その別の方法について。
ちょこっとだけ、GA
2001年11月8日 かなり昔に買ったまま、ほとんど遊んでなかった本、マッチ箱のAI(新紀元社、森川幸人)をちょっと遊んでみた。
マッチ箱でAIのアイデアを体験できる問題(?)がいくつか載っているのだけど、一人で遊ぶのは困難なものばかり。
で、プログラムを書いて、それで代わりにしようと思っていたのだ。
Rubyを突如はじめたのは、実は「マッチ箱のAI」を遊ぶついでに始めようと思ったという理由もある。
今日作ってみたのは、一番最初のやつ。
GAにマークシート式の問題を解かせてみようというもの。
Rubyで初めて、プログラムを書くということもあり、かなり時間がかかってしまった。
面白かったけど。
言語的に一番時間がかかったのは、オブジェクトのコピーの問題。cloneメソッドは、「浅いコピー」しかしないと知識としては分かっていたつもりなのに、やってしまった。
配列オブジェクトをもつオブジェクトがあって、それをcloneでコピーしたところ、配列の実体はコピーされてくれなかった。
あたりまえといえば、あたりまえなのだけど。
配列もオブジェクトであるということを、すっかり失念していた。
C++だと、自分でコピーコンストラクタを書くから、そんなミスはないのだけどさ。
ちなみに、「深いコピー」をどうするかというと、次のように書けばいい。
dest = Marshal.load( Marshal.dump(src) )
自分でコピーコンストラクタに相当するものを書かなくていいから、非常に楽だ。
アルゴリズム的にはまったのが、「同じ点数なら古い遺伝子を優先する」という実装にしてしまったこと。
「問題の規模的に、常に最適解を導いてくれて悪くないような感じなのに、なんで最適解を導くときと、導かないときがあるのだろう?」と不思議に思っていたら、そういうことだった。
乱数を使っているので、いくら問題の規模が小さくても「絶対に最適解を導く」と言ってしまっていいものか、私には良くわからないけれど。
古い遺伝子を優先するようになっていると、「点数には現れないけれど、最適解にに近づいた」って遺伝子が捨てられてしまうのだ。
評価法を変えれば、そういう問題は生じないのかもしれないけれど…。うーん。ちょっと自信が持てない。それに、完璧な評価法を作れるか、という問題もある。
今日学んだ知恵は、「点数が同じなら、新しい遺伝子を優先したほうがいい」ってことだね。
「今日の日記はいつにもまして、よくわからん」という人は、ぜひ「マッチ箱のAI」を読んでみてくださいな。
今回のGAの話は、P7〜P27を読めば分かります。
マッチ箱でAIのアイデアを体験できる問題(?)がいくつか載っているのだけど、一人で遊ぶのは困難なものばかり。
で、プログラムを書いて、それで代わりにしようと思っていたのだ。
Rubyを突如はじめたのは、実は「マッチ箱のAI」を遊ぶついでに始めようと思ったという理由もある。
今日作ってみたのは、一番最初のやつ。
GAにマークシート式の問題を解かせてみようというもの。
Rubyで初めて、プログラムを書くということもあり、かなり時間がかかってしまった。
面白かったけど。
言語的に一番時間がかかったのは、オブジェクトのコピーの問題。cloneメソッドは、「浅いコピー」しかしないと知識としては分かっていたつもりなのに、やってしまった。
配列オブジェクトをもつオブジェクトがあって、それをcloneでコピーしたところ、配列の実体はコピーされてくれなかった。
あたりまえといえば、あたりまえなのだけど。
配列もオブジェクトであるということを、すっかり失念していた。
C++だと、自分でコピーコンストラクタを書くから、そんなミスはないのだけどさ。
ちなみに、「深いコピー」をどうするかというと、次のように書けばいい。
dest = Marshal.load( Marshal.dump(src) )
自分でコピーコンストラクタに相当するものを書かなくていいから、非常に楽だ。
アルゴリズム的にはまったのが、「同じ点数なら古い遺伝子を優先する」という実装にしてしまったこと。
「問題の規模的に、常に最適解を導いてくれて悪くないような感じなのに、なんで最適解を導くときと、導かないときがあるのだろう?」と不思議に思っていたら、そういうことだった。
乱数を使っているので、いくら問題の規模が小さくても「絶対に最適解を導く」と言ってしまっていいものか、私には良くわからないけれど。
古い遺伝子を優先するようになっていると、「点数には現れないけれど、最適解にに近づいた」って遺伝子が捨てられてしまうのだ。
評価法を変えれば、そういう問題は生じないのかもしれないけれど…。うーん。ちょっと自信が持てない。それに、完璧な評価法を作れるか、という問題もある。
今日学んだ知恵は、「点数が同じなら、新しい遺伝子を優先したほうがいい」ってことだね。
「今日の日記はいつにもまして、よくわからん」という人は、ぜひ「マッチ箱のAI」を読んでみてくださいな。
今回のGAの話は、P7〜P27を読めば分かります。
けっこう、C++やJavaとは違うんだねぇ
2001年11月7日 Rubyは、newを再定義するのではなく、initializeを定義することによって、インスタンス生成の仕方を実装するのか…。
危うく、失敗するところだった。思い込みは危険だね。
名前が同じで引数だけ異なるメソッドは定義が出来ないっぽいなあ。
うーむ。initializeを多重定義したいのに。
てな感じで、Rubyとたわむれてました。
危うく、失敗するところだった。思い込みは危険だね。
名前が同じで引数だけ異なるメソッドは定義が出来ないっぽいなあ。
うーむ。initializeを多重定義したいのに。
てな感じで、Rubyとたわむれてました。
わりと当たりな本かも
2001年11月6日 ソフトウェアパターン再考(日科技連出版社、ソフトウェア品質学研究会 編、www.skpl.com/event/books/software_patterns-j.html)を読み始めてみた。とか書くと、有名な本みたいだけど無名な本だと思う。…多分。
どうでもいいけど、ここの出版社の本初めて買った。
まだ、第3章までしか読んでいないのだけど、なかなか面白い。
単体のパターンそのものの説明よりも、パターン全体を扱っているのが良い。「責務関係に関するパターンとは?」って言うような説明よりも「アナリシスパターンとは?」みたいな説明に重点がおかれている。
で、パターンが適用されている領域にどんなものがあるか、概略がつかめるんだよね。
私はデザインパターンしか知らないから、ありがたい。
これでちょっとは視野が広くなるかな?
でも、簡単な内容の本と言うわけでもないから、全部を理解して読んでいるかというと、そんなこともないのだけど。
ただ、第2章、参考文献を指す番号の間違いが多いのがちょっと…。
どうでもいいけど、ここの出版社の本初めて買った。
まだ、第3章までしか読んでいないのだけど、なかなか面白い。
単体のパターンそのものの説明よりも、パターン全体を扱っているのが良い。「責務関係に関するパターンとは?」って言うような説明よりも「アナリシスパターンとは?」みたいな説明に重点がおかれている。
で、パターンが適用されている領域にどんなものがあるか、概略がつかめるんだよね。
私はデザインパターンしか知らないから、ありがたい。
これでちょっとは視野が広くなるかな?
でも、簡単な内容の本と言うわけでもないから、全部を理解して読んでいるかというと、そんなこともないのだけど。
ただ、第2章、参考文献を指す番号の間違いが多いのがちょっと…。
適当に、はまれるといいな
2001年11月5日 今週は時間に余裕がありそうなので、かねてより手を出してみたかった、Ruby(www.ruby-lang.org/ja/)を触ってみた。
なぜ時間に余裕がありそうかというと、今週はゼミが一つお休みだから。
「卒論を進めろよ」と神の声が聞こえてくる気がしないでもないけれど、気にしない。
なぜ、Rubyかというと、短期間でそれなりに楽しめそうで、なおかつC++とはまた違ったタイプのオブジェクト指向言語なので。
まだ昨日からはじめたばかりで、基本的な文法をちょっと覚えただけである。
三日坊主にならずに出来るといいなぁ…。
実は以前、Perlに手を出したときに、「初心者向けの本を一冊やろう」と決めたにも関わらず、途中で辞めちゃったんだよね。
理由はそれほど楽しく感じられなかったことが一番大きい。
まあ、そもそもの私の目的が「テキストエディタでは簡単に出来ない、高度な置換が出来るといいなぁ」という比較的あっさりしたものだったため、すぐに目的の70%ぐらいが達成できてしまったことにも原因があるのだけど。
>>着物魔王さん
「覗いちゃだめ」って言われると、余計に覗いてみたくなると同じような心理が働いてしまいます
人々が全然お勧めしていない「エイケン」、余計気になって仕方がないです(笑)。
>>しゃんぐ〜さん
秘密日記が読めなくて困っているようなので、秘密じゃないほうで。
「理科系の作文技術」、知ってますよ。
知っているというか、むしろ教科書になってました。
「理科系の作文技術」に基づいて、作文の練習をするという必修科目があったのです。
実際に作文をさせられて面倒だし、必修科目だから辞められないしで、授業自体は学生に評判は悪かったのですけど(笑)。
「発想法」はKJ法の本ですよね。私の手元に「続・発想法」があるのだけど読んでないです。「続・発想法」も教科書ということで買ったのだけど、こちらは実際に授業中に使われることはなかった…。
なぜ時間に余裕がありそうかというと、今週はゼミが一つお休みだから。
「卒論を進めろよ」と神の声が聞こえてくる気がしないでもないけれど、気にしない。
なぜ、Rubyかというと、短期間でそれなりに楽しめそうで、なおかつC++とはまた違ったタイプのオブジェクト指向言語なので。
まだ昨日からはじめたばかりで、基本的な文法をちょっと覚えただけである。
三日坊主にならずに出来るといいなぁ…。
実は以前、Perlに手を出したときに、「初心者向けの本を一冊やろう」と決めたにも関わらず、途中で辞めちゃったんだよね。
理由はそれほど楽しく感じられなかったことが一番大きい。
まあ、そもそもの私の目的が「テキストエディタでは簡単に出来ない、高度な置換が出来るといいなぁ」という比較的あっさりしたものだったため、すぐに目的の70%ぐらいが達成できてしまったことにも原因があるのだけど。
>>着物魔王さん
「覗いちゃだめ」って言われると、余計に覗いてみたくなると同じような心理が働いてしまいます
人々が全然お勧めしていない「エイケン」、余計気になって仕方がないです(笑)。
>>しゃんぐ〜さん
秘密日記が読めなくて困っているようなので、秘密じゃないほうで。
「理科系の作文技術」、知ってますよ。
知っているというか、むしろ教科書になってました。
「理科系の作文技術」に基づいて、作文の練習をするという必修科目があったのです。
実際に作文をさせられて面倒だし、必修科目だから辞められないしで、授業自体は学生に評判は悪かったのですけど(笑)。
「発想法」はKJ法の本ですよね。私の手元に「続・発想法」があるのだけど読んでないです。「続・発想法」も教科書ということで買ったのだけど、こちらは実際に授業中に使われることはなかった…。
またもや、いまいちな反応だった…
2001年11月4日 友人Sにコメットさんを見せてみる。
友達にコメットさんを見せてみるのは、今回で2人目。ちなみに一人目には、「うーん。詰まらなくはないけれど…」という反応を返された。
で、友人Sの反応。
「俺には、ちょっと…」
がーん。
またしてもいまいちな反応。
コメットさん、「もし私にアニメを作る機会があるなら、コメットさんみたいなアニメを作りたい」と思ってしまうほど、私は好きなのになぁ…。
友達にコメットさんを見せてみるのは、今回で2人目。ちなみに一人目には、「うーん。詰まらなくはないけれど…」という反応を返された。
で、友人Sの反応。
「俺には、ちょっと…」
がーん。
またしてもいまいちな反応。
コメットさん、「もし私にアニメを作る機会があるなら、コメットさんみたいなアニメを作りたい」と思ってしまうほど、私は好きなのになぁ…。
コメントをみる |

私は使わない方の人種のようだ
2001年11月3日 最近、Yahoo!メッセンジャー(以下YM)をいれてみた。
が、あんまり使ってない。
どうやら、私は誰にもかまって欲しくない時の方が多いらしい。
YMを(相手に姿の見える状態で)起動している時は、「メッセージを送ってきてもいいよ」との意思表示だと思うのだけど、どうにも、そういう気分の時の方が少ないんだよね…。
「じゃ、アンインストールしたら」と思われる方もいるかもしれないけれど、たまには使うのである。カンファレンスの機能をたまに使うのだ。物理的に離れた人と、打ち合わせる必要が時々あって、その時便利。電話だと、多人数で一度に喋れないものね。
個人的には、IRCでもいいような気はするのだけど、まあ、どちらの方が特別便利、とか思いつかないので、YMの使用を受けれ入れている。
が、あんまり使ってない。
どうやら、私は誰にもかまって欲しくない時の方が多いらしい。
YMを(相手に姿の見える状態で)起動している時は、「メッセージを送ってきてもいいよ」との意思表示だと思うのだけど、どうにも、そういう気分の時の方が少ないんだよね…。
「じゃ、アンインストールしたら」と思われる方もいるかもしれないけれど、たまには使うのである。カンファレンスの機能をたまに使うのだ。物理的に離れた人と、打ち合わせる必要が時々あって、その時便利。電話だと、多人数で一度に喋れないものね。
個人的には、IRCでもいいような気はするのだけど、まあ、どちらの方が特別便利、とか思いつかないので、YMの使用を受けれ入れている。
かぶっちゃうとはねぇ
2001年11月2日 前から薄々そうなるのだろうと、教授も、学生も思っていたのだけど、私とY氏の研究内容がかなりかぶる事が判明。
教授「せこ(仮名)君と、Y君、出席番号離れているよね」
私 「はい、そうですね」
教授「じゃ、発表する際に時間が離れるから、似たこと喋っても、まあ、いいでしょう」
適当だ…。
でも、今更「研究内容を変えよう」と言われても辛いものがあるので、そう悪くは無い解決法だと思われる。
>>着物魔王さん
エイケン、少なくとも私は読んでないです。
読んでみたいけど、買ってまで読む気もしないですし。
私の友達も買ってくれる気配が無いので、この先も読むことがなさそう。(T_T)
教授「せこ(仮名)君と、Y君、出席番号離れているよね」
私 「はい、そうですね」
教授「じゃ、発表する際に時間が離れるから、似たこと喋っても、まあ、いいでしょう」
適当だ…。
でも、今更「研究内容を変えよう」と言われても辛いものがあるので、そう悪くは無い解決法だと思われる。
>>着物魔王さん
エイケン、少なくとも私は読んでないです。
読んでみたいけど、買ってまで読む気もしないですし。
私の友達も買ってくれる気配が無いので、この先も読むことがなさそう。(T_T)