«前の日(08-30) 最新 次の日(09-01)» 追記

Matzにっき


2003年08月31日

_ [教会]松江

松江に出席。今日はお話もない。

しかし、妻がお話の割り当てが当たっていた。彼女なりに緊張していたらしい。 ゆうべも遅くまで準備していたし。結果はいい話であった。

_ [OOP]箱モデル

ruby-listで「変数=箱モデル」の優劣についての議論がある。 まあ、あくまでもたとえなんだから、完全なたとえはありえないわけだが。

箱モデルについて考察すると、まず前提としては

  • 「箱モデル」は、変数は値を入れる箱という実行モデルを説明するためのもの。
  • そのような実行モデルを持つ言語はいくつかある(Cとか)

ということがある。これは別に問題ない。 私がCの解説書を書けと言われたら、変数の解説には箱モデルを使うだろう。

問題はそれをRubyの解説書に適用するのが適切かどうかだ。 これはもちろん読者のバックグラウンドによって違うだろう。

すでに箱モデルになじんだ人にとっては箱モデルの解説に意味があるのは確かだが、 問題は

  • 箱モデルを自覚的に理解している人は実はあまりいないかも。
  • 十分に箱モデル言語を理解していれば「ポインタと同じ」で通用するので、たとえ話は不要。
  • 箱モデル言語に対する知識がない人には、Rubyの解説としては役に立たない
  • ここで箱モデルを説明したとして、Rubyの次に習う言語で役に立つとは限らない。必要なら、その時改めて箱モデルを学んだ方が良さそう。

ということだ。やっぱり、Rubyを題材にした解説本に箱モデルは有効ではないんじゃないかなあ。

ただし、反論の中にはいくつか興味深いものがあるので、引き続き考察してみる。

オブジェクトIDを入れた箱という解説は有効
オブジェクトIDと言うのは「数値で表現したアイデンティティ」に過ぎないので、 このたとえ話で一度に説明する必要があるものではない。
配列を箱が並んだものと説明するために箱モデルが有効

配列は普通箱の並びとして図示するので、気持ちは分かる気がするけど、 「名札が並んだもの」でも別に困らないと思う。

一番心配するのは、箱モデルでは変数に箱という実体を与えてしまうため、 変数がオブジェクトであると認識させてしまうのではないかということ。 変数が実際にオブジェクトであるCのような言語でない限り、じゃまにしかならないような。


2004年08月31日

_ 論文〆切当日

なんか気がついたら朝7時だよ。台風16号の風がだんだん強くなって、それから遠ざかるのを聞いてしまった。 一眠りしてから、会社へ。

当日まで論文の提出方法もちゃんと確認していないのはいかがなものか、 と自分にツッコミつつ、原稿の分量を調整したり、書類を整備したり。

まあ、苦労の甲斐があったのか、なんとか夜には原稿を仕上げて、郵便局へ。 しかし、まあ、今回も

  • 着手が遅れて
  • 〆切ぎりぎりまで手がかかり
  • おまけにサービス精神過剰で、ひとつの論文に複数の仕事を詰め込む

といういつもと同じ不手際で(最後のは「不手際」とは呼ばないか)、 全然進歩していないことを痛感してしまった。

しかし、なんだ、毎度毎度同じような辛い思いをしてるのだが、 なんとか乗り切ってしまうのは(そして乗り切ったら忘れてしまうのは)、 もしかしたら才能かもしれない。「幸運の遺伝子」のような。

あんまりありがたくはないかも。

_ 台風の被害

台風16号で、分かっている範囲内だけでも、 島根県で5,500万円、鳥取県では1億円を越える農作物への被害が出たそうだ。

農業と言うのは天候に左右される厳しい商売だなあ、と思う。 それに比べればソフトウェア業界は楽なものかも。 いや、ソフトウェア業界には、また別の苦難があるのだが。

なんて、思っていたら、裏庭の畑では、せっかく育っていたヒマワリは倒れるわ、 トウモロコシは傾いてるわで、結構被害にあっていた。うーん、台風侮りがたし。


2005年08月31日

_ デジタルテレビに潜む危険と脆弱性

デジタルテレビが、 月例のアップデートでファームウェアが壊れてしまった、という実話。

昔のテレビと違ってデジタルテレビは結構複雑なものである。 放送データでアップデートできることは良いことだとは思うが、 気を付けないと大変なことになるという話。

記事中では「全国で一斉に強力な違法電波を送信して、テレビのファームウェアを破壊するようなデータを送信してしまえば、日本中のテレビが役に立たなくなる」というメディアテロが懸念されていたが、 これは適切な暗号化技術でほぼ不可能にできると思う。実際に暗号化されているかどうかは知らないが。

しかし、もうひとつの懸念である「テレビ本体が個人情報を保持している」という事実はちょっと恐い。 私はデジタルテレビに反対しているわけではない(全面的コピーワンスには反対している)。 この記事にもあるようにもっとシンプルなシステムの存在を許すことは必要だと思う。 少なくとも今のテレビと同等でただ伝送経路がデジタルなだけというテレビも必要ではないだろうか。

別にHDでなくても構わない。

_ 国際線チケット購入

やっと重い腰を上げてRubyConfのチケット購入を考える。

しかし、インターネットでチケットを購入するシステムというのはどうしてどこもかしこもあんなに使いにくいのか。やりたいことは、「いつから」、「どこから」、「どこへ」、「いつまで」を指定して、チケットを購入したいだけである。

ところが、大抵のチケット屋では、これら「いつから」、「どこから」、「どこへ」、「いつまで」の情報を指定させた後、候補が表示されるが

  • 候補の空席情報を調べようと思うと、改めて「いつから」、「どこから」、「どこへ」、「いつまで」をもう一度、しかも今度は乗り換え情報まで含めて入力させる
  • やっとの思いで飛行機の便と時間を確認できたかと思うと、そこから購入することはできない

なんてシステムはざらだ(というか、どっかのシステムを共有しているみたい)。

楽天トラベルはシステムとしては一番マシだが、それでも

  • やたら長い待ち時間
  • ようやっと表示されたかと思うと謎のエラー(空席がないのか、システムが混んでいるのか、まったく判断できない)
  • 何度も条件を変えてチャレンジし、ようやっとエラーをくぐり抜けて便が表示され、見積りを取ろうとすると、「空席がありません」エラー。だったら候補として表示するなよ。前のページでは「空席あり」だったのに。

やっぱりあきらめた。電話で予約しようかな。人件費を削減するためのインターネット取り引きだと思うのだが、これではユーザに苦痛を与え、信頼を失わせた上で、結局人件費のかかる電話予約に誘導する役にしか立ってないのではないか。

改善を要求する。


2006年08月31日

_ [Ruby] Array embedding

Stringの埋め込み化対応はほぼ完成。一通り動作するようなのでコミット。

次はArrayに手を入れる。 方針はStringと同じなので簡単、簡単。 ArrayにはSTR_ASSOCがないぶんより難易度は低そう。

とはいえ、やっぱり見落としがあって、 一発で動作するとは行かないのだった。

と、この時点で埋め込み化はnative threadと相性がとても悪そうだという 事実に気がついたのだが、まあ、どうせ他のところでGILが必要だろうし、 並列環境での性能を追求するなら、どうせStringもArrayも(Hashも)実装を置き換えないと いけないだろうから当面は気にしないことにする。

見えない、見えない。

性能は数%程度向上したような気がする。

_ [OSS] GPLにまつわる10個の誤解

ほんとにそんなに誤解があるのだろうか、という疑問もあるが、 人間の誤解する能力をあまり低く見積もってはいけない、のかもしれない。

  1. GPLにはウイルス的性質がある
  2. GPLに強制力はない
  3. GPLソフトウェアに対しては課金できない
  4. 「自由か死かの選択」条項は無制限に適用される
  5. ディストリビューションには変更したコード部のみを同梱しておけばよい
  6. 頒布時に必要なのはソースコードの提供のみで、それらの使用手段まで用意する必要はない
  7. 頒布時にソースコード提供の用意があることを明記しておく必要はない
  8. 頒布時のソースコード提供は、直接のカスタマーに対してのみ行えばよい
  9. 頒布時にはライセンス条項へのテキストリンクを張っておけばよい
  10. 条文の解釈は読む人間ごとに異なる

GPLはやや難しげな単語が 登場するものの、言われているほど難解でも、曖昧でもない。 一度は(できれば二度、三度くらい)呼んで読んでおいても損はないだろう。

_ [Ruby] Things You Shouldn't Be Doing In Rails

Railsを使ってる時にしちゃいけないコト。

正直、わかんないものがいくつかあって、 自分はRailsについてなんにも理解していないと思い知らされる。


2007年08月31日

_ 有機化学美術館・分館:ナノチューブを溶かす意外なもの - livedoor Blog(ブログ)

ナノチューブと言うのは丈夫な素材で、強いうえに溶剤にも溶けない。 が、意外なものに溶ける、という話。

あらゆる溶媒を受け付けないナノチューブを溶かしてしまう「魔法の液体」は、実はコンビニで150円も出せば容易に入手できます。その液体の名はなんとサントリーの緑茶「伊右衛門 濃いめ」です。

どうやら学生が溶けないことを実証するため、いろいろやっているうちに 意外にも溶けたということのようだ。 世の中、分からないことの方が多いということを実感させる。

_ [Ruby] 思っているよりもずっとずっと人生は短い。- Rubyバブル

Seasarのひがさんのエントリから派生した会長のお言葉。

まあ、多少は仕方ないんじゃないでしょうか。そもそも「たのしさ」なんて訳の分からない物差しを持ち出して喜んでいながら冷静な評価を期待するのは虫がよすぎるでしょうし。

幸せになるユーザが増えるのを歓迎し、不幸になるユーザが増えるのを防ぎつつ、ハードランディングに備えて。

ていうか、Ruby自体はバブルにはならなさそうな。良くも悪くも。

そうかなあ。Railsほど前面に立ってないけれども、 バブルは確実にあると思う。バブルの大きさは小さいのかもしれないけど。

でなきゃ、私のところにこんなに講演の依頼が来たり、 NaClに分不相応な仕事が舞い込んだりしないと思うし。

で、現状が中身のない(あるいは薄い)風船であることを自覚した上で 中身を詰める努力を継続していった方がよいと考えている。 それを思ってのRubyアソシエーションだったり、 NaClといろんな会社との提携だったりするわけだし。

たぶん、バブルが崩壊しても、私にはあまりダメージはなさそうなんだけど。 もともと「お金」とは距離を置いてるし。

でも、最近上向いてきた収入が下がることは避けられないかなぁ。

_ [Ruby] Superators Add New Operators to Ruby

「<---」とか「++-」とか、元々Rubyには存在しない演算子を作り出すライブラリ。

「パーザーを書き換えるのか、しかし、Yaccのパーザーは簡単じゃないよな」と思ったのだが、 実際には演算子の組み合わせで実現するようだ。

つまり、

foo ++- bar

は、もともと

foo.+(bar.-@().+@())

と解釈されるので、この組み合わせで指定したメソッドが起動するように それぞれの演算子を再定義してやるということ。

なるほど。思いつきもしなかった。脱帽。

_ [Ruby] err.the_blog.find_by_title('Full of Ambition')

ブロックからSQLを生成するライブラリAmbitionについて。

User.detect { |u| u.name == 'Jericho' && u.age == 22 }

のようなコードからSQLを生成できる。

Mockオブジェクトを使って、式からSQLを生成するようなライブラリは Squirrelのような ものが以前からあったが、どうしても以下のような制限があった。

  • 「&&」や「!」のような再定義できない演算子が使えない
  • Mockオブジェクトを含む式の評価順序に気を使わなければならない
  • 結果として「Ruby文法を使ってSQLっぽい表現をするDSL」になってしまう

一方、AmbitionはRubyを使って条件指定すると、それがそのままSQLになる というもの。たとえば、

User.first
"SELECT * FROM users LIMIT 1" 

User.select { |m| m.name != 'macgyver' }
"SELECT * FROM users WHERE users.`name` <> 'macgyver'" 

User.select { |u| u.email =~ /chris/ }.first
"SELECT * FROM users WHERE (users.`email` REGEXP 'chris') LIMIT 1" 

User.select { |u| u.karma > 20 }.sort_by(&:karma).first(5)
"SELECT * FROM users WHERE (users.`karma` > 20) 
 ORDER BY users.karma LIMIT 5" 

User.select { |u| u.email =~ 'ch%' }.size
"SELECT count(*) AS count_all FROM users 
 WHERE (users.`email` LIKE 'ch%')" 

User.sort_by { |u| [ u.email, -u.created_at ] }
"SELECT * FROM users ORDER BY users.email, users.created_at DESC" 

User.detect { |u| u.email =~ 'chris%' && u.profile.blog == 'Err' }
"SELECT users.`id` AS t0_r0 ... FROM users 
 LEFT OUTER JOIN profiles ON profiles.user_id = users.id 
 WHERE ((users.`email` LIKE 'chris%' AND profiles.blog = 'Err')) 
 LIMIT 1" 

これはすごいぞ。で、これをどうやって実現しているかというと ParseTreeを使って 構文木を解析して、そこからSQLクエリを生成しているのだった。

頭いい。

でも、YARVで構文木って手に入るんだっけか。

_ [Ruby] ITmedia エンタープライズ:EMEA地域でRuby on RailsとC#の利用が拡大

EMMAって初めて聞いたけど「Europe」、「Middle East」、「Africa」の略らしい。 なんか広すぎて(世界の半分はカバーしてる)共通項がありそうな気がしないんだけど。

ま、いずれにせよ、Ruby on RailsとC#(ってフレームワークと言語を並べるのは不適切なような)が 人気が出ているという調査結果には、素直に喜んでおこう。


2008年08月31日

_ asahi.com(朝日新聞社):米、南部4州に非常事態宣言 ハリケーン「グスタフ」 - 国際

3年前の「カトリーナ」を連想させるような巨大ハリケーン。 温暖化の影響下。だからブッシュ(とアメリカ)は...。

それはそれとしても、予想進路がちょうど(今週訪問する)テキサスに向かってるような気がするんだけど。

2001年に炭疸菌で話題騒然のフロリダ(第1回RubyConf)といい、 どうもトラブルがつきまとうのは、どういうことだろう。 今回もマンガ的経験ができるのだろうか。

ありがたいやら、そうでないやら。

無事を祈っててください > 関係者

追記

主催者から「オースチンは大丈夫そう」とメールが来ました。 一応、安心。


«前の日(08-30) 最新 次の日(09-01)» 追記