«前の日(08-06) 最新 次の日(08-08)» 追記

Matzにっき


2003-08-07

_ [仕事]出張

茨城県ひたちなか市へ出張。あまり出番なし。やっぱりおまけだったか。

夕食をごちそうになる。タイ料理。おいしかった。からかった。おなかいっぱい。 しあわせだけど、ちょっとくるしい。

_ [OOP]オブジェクト指向の神髄

なんか以前にもどこかで書いたような気がするけど、私がなんの修飾もなく 「オブジェクト指向」と表現する時には、ほとんど「オブジェクト指向という考え方」を意味するつもりでいる。

そして、その最低限の条件は「アイデンティティがある」ことである。 アイデンティティとはある「オブジェクト」と別の「オブジェクト」が、 同じかそうでないか判定できる、という意味だ。

たったそれだけのことならば別にオブジェクト指向言語を使う必要はない。 Cのstdioだって、UNIXのシステムコールだってオブジェクト指向だ。 どんな言語、どんな環境でプログラムするかではなく、 プログラムする対象をどう捉えるかという考え方が重要なのだ。

でも、これだけではあんまり嬉しくない。

そこで、あえてもう一つの条件を付け加えるなら、 「あるアイデンティティがある存在(=オブジェクト)は自分に対して適応可能な処理を知っている」こと、 つまり「動的結合」とか「ポリモルフィズム」と呼ばれる概念を挙げたい。

この二つがあれば「オブジェクト指向(という考え方)」は十分である。

よく、オブジェクト指向の三要素として

  • 動的結合
  • 継承
  • カプセル化

のみっつが挙げられるが、「継承」と「カプセル化」はあくまでも「あると便利なもの」であって、 必須ではない。そのことは

  • オブジェクトによるカプセル化がないCLOS
  • クラスがなく継承もないSelf

が十分オブジェクト指向言語であること、 つまりオブジェクト指向という考え方に従ったプログラミングを十分支援していることからも分かる。

でもって、そういう「ファンダメンタルなオブジェクト指向」に付け加えて、

  • クラスベースのオブジェクト指向とか
  • カプセル化重視のオブジェクト指向とか

いろいろなレベルがあって、人によってどのレベルで「オブジェクト指向」 という単語を使っているかが異なっているので、 過去長らく発生した不毛な論争の原因になっていたのだと思う。

それよりなにより、誰もが自分の使っているオブジェクト指向言語から学んだ「オブジェクト指向」に こだわりすぎていて、一般化・抽象化が行われなかったことが不幸だと思う。

いや、私もけっして人のことは言えないのだが、私自身は

  • 最初Smalltalkをかじり、
  • Eiffelで静的型と多重継承に目覚め、
  • CLOSをかじってオブジェクト単位のカプセル化のない世界を知り、
  • Selfをかじって継承のない世界を知り、
  • ふたたび動的型と単純継承(+Mix-in)のRubyの世界を構築した

という経緯があるので、比較的オブジェクト指向という考え方を一般化しやすい立場にあるのではないかと思う。

本日のツッコミ(全2件) [ツッコミを入れる]

_ とも [やっぱ、アイデンティティは必要でしょうか? アイデンティティがないとか、書き換えの度に アイデンティティが変わるよう..]

_ ゆあい [↑の投稿はテスト書き込みです。 消してくれれば幸いです。>matzさま >>ともさま >やっぱ、アイデンティティは..]

[]

2004-08-07 Lightweigt Language Weekend 1日目

_ Language Update

役に立たないメモ。

CL
お掃除ロボ、RoombaはLispで動いている。「やっぱりゴミ集めはLisp」
Curl
発表者は日本語のPerlと韻を踏むアクセントになっていた。 アクセントの転化は日本語特有か。 隣の席の弾さんが「財務が何年もつか」とつぶやいていたのが印象的。
Gauche
Schemeの紹介からはじめるのは不利か。
Groovy
「ぐRuby」「Javaの奇妙な冒険」(爆笑)
Haskell
関数型。lazyな評価。怠け者になる。
Perl
小飼さんは「ぱーる」の発音が英語風。
PHP
ヨーロッパではPythonがPHPについで2位らしい。日本ではPHPだと思うが、なぜ?
Python
「Pythonの紹介」に終始。というのが、現在の日本のPythonのポジションを表現しているような。
Pnuts
Pnuts=言語+API。Groovyとは目標が違う。クラスはJavaに任せる。
Ruby
スライドが出ない。最低。これはもうプレゼンはするな、という啓示か*1
Squeak
Morphic。やっぱデモ向け。アニメーションもサウンドも見栄えがする。

全体にUpdateでない感じ。「Update」と「紹介」は分離したほうがよかったか。

*1  新しいマシンを買え、ということかも

_ 仕事でLL

仕事でLL。なかなか悩ましく、上司の理解がないため、LLが使えないという悲しい話をたくさん聞く。

ちゅーか、私だったら「Rubyで書いた検証プログラムを顧客の無理解から泣く泣く書き換えた」なんて経験をしたら、 速攻転職を検討すると思う。みなさん、忍耐強いよなあ。

結局は「秘密兵器」としてサクセスストーリーを積み重ねるしかない、というのが個人的な結論。

追記。

あ、会場でも違和感があったんだけど、私の発言の「秘密兵器」は「秘密」には重点が置いてなくて、 実際には「すごい兵器」というニュアンスだったのでした。つまり、『黒い秘密兵器』における (誰もが知ってる)「秘密兵器」のような。って、若い人はそんなの知らないぞ。

_ 君ならどう書く

「ls-lRシェル」と「nQueen対戦」。

前者はデザインパターンを強調しているのがちょっと苦しい感じ。 というか、C++中心のGoFとLLはかならずしも相性は良くないよね。 GoFはSmalltalkパターンも解説しているので、こっちはちょっと近いかも。 Rubyは前田くんが健闘。

後者は、NxMの盤面に順にチェスのクイーンを置いていき、

  • 他のクイーンが効いているところに置いてしまった。
  • 時間切れ
  • 投了

のいずれかに陥ったプレイヤーが負け、というルールで、Gauche, Python, Ruby, Squeakのプログラムが対戦する。 Rubyからの刺客はかずひこくん。

第1回戦: 時間切れでPythonの負け

第2回戦: 時間切れでGaucheの負け

第3回戦: 失敗でPythonの負け

第4回戦: 失敗でPHPの負け(PHPはランダムに置くサンプル。ここで脱落)

第5回戦: 時間切れでGaucheの負け

第6回戦: 時間切れでGaucheの負け

ギャラリーからの声によりここから勝ち残り戦

第7回戦: 失敗でGauche脱落

第8回戦: 失敗でPython脱落

第9回戦: サーバが落ちて再試合

第10回戦: 時間切れでRuby脱落(クライアントがエラー)

優勝はSqueak。

GaucheはXML-RPCライブラリから実装したぶん不利だったか。 PythonはLinuxザウルスで動かしていたので、もしかしたらパワー不足だったかも。 Rubyは...なんでエラーが出たんでしょうねえ。

Squeakはあぶなげない、というよりもGaucheとPythonが早々に脱落し、 Rubyとの一騎討ちではRubyが謎のエラーで自滅したので、 あんまり実力発揮というわけではなさそう。

ゲームは盛り上がる(勝ち抜き戦にしてからは特に)が、 ソースコードを鑑賞する時間が取れなかったのは残念だ。

_ 移動

で、終了後(いくつかサインなんかしたりした後)、そうそうに移動。 ほんとは懇親会とか出たかったんだけど、飛行機がなくなるので。

少々あせりつつ移動した結果、ちゃんた間に合った。が、会場にファイルフォルダをふたつ置いてきてしまった。 論文やら発表資料やらが入っているだけで、そんなに貴重なものではないはずだが、 なくなったとなると少々惜しい。だれか見つけて保護してくれないかなあ。

_ 帰宅

なんとかたどりつく。やたら疲れていると思ったら、ゆうべテレビでやってた映画『スコア』を見たからだ。 一度見た映画なのに、つい、最後まで見てしまったなあ。

本日のツッコミ(全6件) [ツッコミを入れる]

_ IKeJI [お疲れさまでした。 私も、紹介とUpdateは分離した方が面白かったと思います。 nQueenは、Rubyが優勝でき..]

_ MMX [>ヨーロッパではPythonがPHPについで2位らしい。・・・、なぜ? 地の利では、occam 以前から空白字下げ構..]

_ かずひこ [事務局で預かってくださっていましたので持って帰ります]

_ bravo [りなざうが悪かったんではなくて、 コードのチューニングが足りなかったみたい...orz]

_ おがわ [帰り際のせっぱ詰まったところでRuby本にサインをしてもらった人です。ありがとうございました。飛行機に間に合って良か..]

_ TM [Perl -> Ruby -> jRuby -> gRuby -> groovy.それにしても,「クロス言語開発」っ..]

[]

2005-08-07

_ [教会] 松江

帰国早々の教会。今日は司会だ。

断食証会。聖句朗読は長女。 第一話者だったので、アメリカで経験したことについてすこし話した。 けど、緊張してなにを言ったのかあんまり覚えてない。

帰宅後、たまった日記を片付けようとも思ったが、くたびれて更新できなかった*1

*1  この後、怒涛のズレがはじまるのだった

[]

2006-08-07

_ 早朝、ラジオ体操

朝、4時前に末娘に起こされる。「あそぼーっ」

おいおい。勘弁してよ。

結局、寝かしつけたのは5時半頃であった。 今日は地区のラジオ体操の当番で、 6時すぎにはでかけないといけない。

結局、あんまり寝れなかったなあ。 こんなことは珍しいが、たまにあるとしんどい。

_ [原稿] オープンソースマガジン 2006年10月号

先月は英語学習についてだったので、 今月は国語についてとか、 文型と理系の対比について考えようかとも思ったのだが、 生産性と「ゾーン」の話にした。国語とかについてはまた今度。

しかし、ゾーンの話とかはJoel on Softwareに似てしまったかなあ。

_ [OSS] オープンソースは自由に使えると勘違いしていませんか?

センセーショナルなタイトルであるが、内容は正直、薄い。 子供じゃないんだから無制限な自由は存在しえないことくらい理解してると思いたかった。

できれば「自由」について語る前に、 「ソフトウェアの自由」についてもうちょっと押さえて欲しいような。

_ [Ruby] RUBY ROUC

「Ruby Rest of us conference」なんだそうだ。 いまいち実態が見えないんだけど、RubyConfに参加できない人を中心に デンバーで開催されるより緩やかなカンファレンス、なのかな?

FooCampに対抗したBarCampとかをイメージすればよいのかなあ。

_ 一般人はプログラマなんて目指しちゃいけない、死ぬことになる

煽ったエントリなんで普通なら取りあげないんだけど、 どういうワケか私が登場してたので(だからエゴサーチで見つかった)。

まつもと氏と結城氏がなぜあそこまで闘えるのか。それは彼らが信仰を持ち、妻と子があるからだ。いってみれば無限エリクサーを持っているようなものだ。

あんまり「闘ってる」自覚はないんだけど...。

でも、あんまり人生をプログラミングに「最適化」しちゃってたら ずっと前に生活破綻してたかも、という自覚はある。 そういう意味では信仰と妻子は「人生の碇」であったかもしれない。

本日のツッコミ(全1件) [ツッコミを入れる]

_ drmaruyama [「楽しい」という事も無限(?)のエネルギーになると思うのですが、日記の主はその事を知らないのではないでしょうか。エン..]

[]

2007-08-07

_ [Ruby] Lazy Collectionへの第一歩

になるかどうか自信は無いのだが、 1.9でイテレータ系メソッドにブロックを渡さない時に返される Enumerable::Enumeratorクラスに、 外部イテレータとして使うことができるようにnextメソッドを追加した。

実装には最近YARVに追加されたFiberを利用した。 っていうか、Fiberって初めて使ったよ。 使いやすいような、使いにくいような。慣れてないせいかな。

追加したメソッドは以下の通り

  • next - 「次」のオブジェクトを返す。末尾ではStopIteration例外
  • next? - 「次」のオブジェクトがあればtrue
  • rewind - nextでのオブジェクト生成を最初に「巻き戻す」

また、Enumerable#zipメソッドは、以前は引数として渡されたEnumerableを to_aで配列に変換していたが、Enumeratorを外部イテレータとして使うことにした。 これで、無限列もzipの対象にできる。

あと、zipの挙動だが、今まではレシーバの要素数だけ繰返していたが、 今後は正式にレシーバと引数でもっとも少ない要素数だけ繰り返すことにした(今までも1.9ではArray#zipがそうなってた)。

これでgeneratorライブラリを使わなくても簡単に外部イテレータが使えて、 PythonやXtalに一歩近づいた。

_ 蛙男商会からの報告・連絡・相談 祝・開星高校甲子園出場!

開成高校の吉田投手は吉田くんの弟だったんだ(そんなわきゃない)。

それはともかく、誰にでも理解できる表現ができる人には あこがれちゃうなあ。いや、蛙男については必ずしも「誰にでも」とは 言えないかもしれないけど、 少なくともRubyよりは広い範囲に分かってもらえそう。

というわけで、実は蛙男商会も島根県の重要な地域資源(コンテンツ産業)と 見なされているらしいぞ。現在、蛙男さんはほとんど東京に居るみたいだけど。

_ [言語] CSS、YAML、XML、JSONのいいとこ取り? 新データフォーマット「RSD」提案 | マイコミジャーナル

データフォーマットに特化しているという点ではYAML、JSONと同じ方向性のように見える。 CSSの影響が強いので、そっち方面に慣れている人にはわかりやすいかもしれない。

_ 仙石浩明CTO の日記: 面接FAQ: Tech総研「転職体験談」の取材を受けました

採用面接で「どんだけ技術が好きか」という点を集中的に確認するという仙石さん、という話。

技術が好きならば、プログラミング技術は後でいくらでも延ばせるし、 お互いに幸福な関係が築けるだろう、と。 まあ、確かにうちで生き残ってる連中も、 技術好きで日常生活をコンピュータにたとえて下らない話をするのが好きな連中が 多いものな。

今後の採用の参考にしよう。

_ [Ruby] InfoQ: Gemstone OODB to support JRuby, Rubinius

Gemstoneといえば昔一世を風靡したOODBMS。 これがJRubyやRubiniusから使えるようになる、という話。 私はその頃ObjectStoreを使ってたけど。

待て。JavaとのコネクションでなんでもできるJRubyは分かるが Rubiniusが出てて、なんで本家Rubyが対象にならないのか。不思議。

_ [言語] Static Typers vs Dynamic Typers

動的型を好む人(Dynamic Typer)と静的型を好む人(Static Typer)は プログラミングの別の側面を見ているのだろう、という話。

If I understand correctly, people who prefer static type systems tend to

think in terms of structural invariants of their programs, while people who prefer dynamic type systems tend to think in terms of their programs' behavior. I am convinced this is a personal preference, nothing more, nothing less. I guess that static typers have equal problems developing in dynamically typed languages as dynamic typers have developing in statically typed languages. I don't see a problem here: If the requirements are such that a focus on static correctness is important, it's probably better to employ a static typer, whereas if the requirements are such that dynamic flexibility is more important, the job should better be done by a dynamic typer. There is nothing wrong with specialization, we don't need a grand unified theory of program development.

そう言われてみればそんな気もする。

_ asahi.com:ゲゲゲの「ぬりかべ」、こんな姿? 江戸期の絵巻に登場 - 文化・芸能

「ぬりかべ」のあの姿と言うのは伝統的なものだと思っていたのだが、 実は水木さんの創造だったのね。実際はこんな獅子のような姿であったとは。

で、この「L・トム・ペリー コレクション」のL・トム・ペリーってのは、 ペリー長老のことだね、きっと。戦後、進駐軍として日本にいたって聞いてたけど、 ここまで日本通だったとは。

意外。

本日のツッコミ(全11件) [ツッコミを入れる]

Before...

_ まつもと [ありがとうございます。 rewindは残念ながら私のアイディアではありません。 Rubyには以前からgenerat..]

_ 野分 [このnext/next?の定義だと、空集合の繰り返しが上手く処理できませんね。終了判定も面倒ですし。 nextは末..]

_ ogijun [RubiniusとはSmalltalkつながりとか? (元記事まだ読んでないですが)]

_ ささだ [Enumerator が Iterator の機能をあわせもつのはうれしいのかなぁ。Enumerator#itera..]

_ まつもと [野分さん、 上手く処理できない空集合の繰り返しとか面倒な終了判定とかが具体的にイメージできませんでした。むしろ、提案..]

_ まつもと [iteratorメソッドとかで明示的にイテレータを作るのは冗長過ぎて使われないと思います。 気持ち悪いと言う指摘は..]

_ 野分 [もしかしたら勘違いしているかもしれませんが、下記の2つは見分けつきましたっけ? ''.to_enum(:each_b..]

_ まつもと [区別つきます。next?は「次」のnext呼び出しが例外を出すかどうかを判定するので、(1)ではfalse、(2)で..]

_ 野分 [む?そうしますと、$を終端とすると | $   ''.to_enum(:each_byte) | a |..]

_ まつもと [そういうことです。 next以外に要素を取り出す手段がありません(currentとかない)から、無駄ということはない..]

[]

2008-08-07

_ 松江帰還

山口を夜の11時すぎにでて、松江に夜中の3時頃に着いた。

涼しいし、道は空いてるし、気分よく運転できた。

しかし、出雲市内ではことごとく信号に引っかかった。 あの街の信号のタイミングはおかしい。 せっかくのバイパスが全然有効に活用できない。 交通量もないのに。

_ 読者プレゼント受付

それなりの応募が。 「ぜったいほしいです」とかいうメールもあったが、 実際の選択は私情をはさまず、乱数で決定します。

が、あまり競争率は高くないので、結構当たるかも(むやみな期待を増す奴)。

〆切を明示していませんでしたが、明日(8日)正午まで受け付けます。

まあ、今回外れても次回以降もあるはずだから。

補足

「本が当たったら勉強します」というメッセージを付けてくれた人が数名いたが、 この本はRuby 1.4が対象でかなり内容が古いので、勉強するならもっと新しい本が良いと思う。 純粋にコレクションとしてお楽しみください。

あと、本が当たった人は、希望によりサインも入れます。 が、絶版だからといって転売するのは勘弁してください。

_ 瀕死のPrius

妻や子供たちはOSS貢献者賞でいただいたPrius Noteを活用しているのだが、 最近あちこちおかしくなってきている。主にハード的に。

先月には画面の一部に縦に色が薄い部分が発生した。 よくみると1ドットおきに常時点灯しているようだ。 外部ディスプレイには現れないことから考えても ソフト的な問題ではなさそう。

で、今日になって内蔵のキーボードとタッチパッドが効かなくなった。 外付けのUSBマウスやキーボードは使える。 デバイスマネージャで見ると、内蔵デバイスが見えていないようだ。

大変困っているのだが、Windowsには慣れていないもので、 どう調べたらよいのかわからない。Linuxとかなら最終的にはソースコード読んででも確認するんだが。 Windowsはわからん。

もうそろそろいただいてから3年になるので、 もう買い替えろということなのかしら。特に性能上の不満はないんだけどなあ。

追記

キーボードとマウスは直った。

いろいろやったので、どれが効いたのかはわからない。 可能性があるのは

  • デバイスマネージャでデバイスを一度削除→ハードウェアのスキャン
  • 手動でWindows Updateをかけた

のいずれかだろうか。理由がわからないのが気持ち悪い。

Windows Updateの副作用としてIEがIE7になった。 UIが変わって妻はとまどうことだろう。うーむ。

本日のツッコミ(全2件) [ツッコミを入れる]

_ とっとり [プログラムの追加と削除から IE7 を削除すると IE6 に戻るはず]

_ rokujouhitoma [>とっとり >プログラムの追加と削除から IE7 を削除すると IE6 に戻るはず えっ。知らなかったったです。]

[]

«前の日(08-06) 最新 次の日(08-08)» 追記

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.