method_missing [ruby]
Module#undef_methodとModule#remove_method
リファクタリング
#元のコード。data_sourceにある機器情報を取得し、出力するクラス class Computer def intialize(computer_id, data_source) @id = computer_id @data_source = data_source end def mosce info = data_source.get_mouse_info(@id) price = data_source.get_mouse_price(@id) result = "Mouse : #{info}, #{price}" end def display info = data_source.get_display_info(@id) price = data_source.get_mouse_price(@id) result = "Display : #{info}, #{price}" end #以下同様のコードが続く end #リファクタリング class Computer #今回method_missingで呼び出したいメソッドが親クラスなどに定義されていると困るので、それに対応 instance_methods.each do |method| undef_method method unless method.to_s =~ /method_missing|respond_to¥?|^__.+__$/ end def intialize(computer_id, data_source) @id = computer_id @data_source = data_source end def respond_to?(method) @data_source.respond_to?("get_#{method}_info") || super end def method_missing(name, *args) super unless @data_source.renspond_to?("get_#{name}_info) info = @data_source.__send__("get_#{name}_info", @id) price = @data_source.__send__("get_#{name}_price", @id) result = "#{name.capitalize} : #{info}, #{price}" end end
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2010/08/28
- メディア: 大型本
- 購入: 18人 クリック: 533回
- この商品を含むブログ (124件) を見る
動的メソッドと動的ディスパッチ [ruby]
上記2つを活用したリファクタリング
#元のコード。data_sourceにある機器情報を取得し、出力するクラス class Computer def intialize(computer_id, data_source) @id = computer_id @data_source = data_source end def mosce info = data_source.get_mouse_info(@id) price = data_source.get_mouse_price(@id) result = "Mouse : #{info}, #{price}" end def display info = data_source.get_display_info(@id) price = data_source.get_mouse_price(@id) result = "Display : #{info}, #{price}" end #以下同様のコードが続く end #リファクタリング class Computer def intialize(computer_id, data_source) @id = computer_id @data_source = data_source @data_source.methods.grep(/^get_(.+)_info$/){|item| Computer.define_component(item)} end def self.define_component(name) define_method(name) do #動的メソッド info = data_source.__send__("get_#{name}_info", @id) #動的ディスパッチ price = data_source.__send__("get_#{name}_price", @id) result = "#{name.capitalize} : #{info}, #{price}" end end end
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2010/08/28
- メディア: 大型本
- 購入: 18人 クリック: 533回
- この商品を含むブログ (124件) を見る
インターネットにより、情報が偏り、人々が分断される危険性について
グーグルの検索結果は人によって変わる Yes or No
という問いに対して、即答できる人は少ないと思います。
情報にアクセスできる幅が広がり、より多くのことを考える自由度が増した、インターネットのおかげで。。
と一般的に考えられることが多いが、そうでないのではないかもしれないという話。
冒頭の答えとその背景
まず、冒頭の答えはYesです。
グーグル、Facebookなどの企業は、個々人を特定し、できる限りその人に興味に合ったものを表示しようとする。
しかし、これらは企業側の利益に見合っているから、そうしているというだけです。
グーグルやFacebookは広告によってお金を稼いでいます。
ユーザーの興味を知り、ユーザーが知りたいと思うものを沢山表示させることができれば、ユーザーはその企業のサイトを頻繁に利用するようになります。
そして、ユーザーの興味を知っている企業は、それに合わせて広告を表示できる。
自分が知りたいことを知れる、興味のあるものの広告が出てくる。
非常に便利でメリットが見えやすい一方で、このパーソナライズ化(個々人を特定し、最適なものを表示すること)のデメリットは見えてきにくいです。
少なくなる未知との出会い
人は全く未知のものに出会うことで、好奇心が刺激され、成長する。
また、多くのイノベーションは一般的に、全く異なる分野同士を掛け合わせることで生まれる。
パーソナライズ化が進むということは、自分が知りたいと思うことだけを表示する、つまり、未知との出会いが薄れるということになる。
更に怖いことが、パーソナライズ化は、個々人が知らないところで行われるため、自分に未知のものがあるということに気付くことはできない。
例えば、セパタクローというスポーツを知らない人は、セパタクローに興味を持つことはできない。
一方で、例えば新聞だった場合、(もちろん新聞にも多くのバイアスはかかっているが)新聞を開くことで、自分に興味のない様々なニュースがあるということには気付ける。
インターネットのみに頼った情報収集を行うことで、無知の無知、知らないということを知らないという状況に陥りやすくなるかと思います。
強化される志向性
フィルタリングされた情報は、人の志向性を強化する。
例えば、保守政党が好きな人には、保守政党を賛美するような記事ばかりが表示されるようになり、更に保守政党が好きになる。
保守政党がより好きになると、以前にも増して、更に保守政党を賛美する記事が表示される。
こうして、フィルタリングによって、自分の志向性が強化されていってしまう。
危うくなる民主主義
インターネットの世界がパーソナライズ化によって細分化されてしまうと、この民主主義の土台が危うくなる。
保守政党を支持する人には、保守政党の記事が流れ、革新政党を支持する人には革新政党の記事が流れる。
こういったことが起きると、共通の議論の土台がなくなってしまう。
また、保守政党の議員も、わざわざ革新政党の人に意見を伝えようとしても、批判されるだけで、効率が悪いので、意見を伝えるのは、保守政党を支持する人、もしくは中立の人になる。(そのようにセグメントをわけてPRすることも可能になる。)
更に怖いのが、グーグルやFBがフィルターを調整できる権限を持っていることだ。
フィルタリングで、人の志向性を強化することが可能だと書いたが、変化させることも可能だ。
(例えば、あなたが新卒の保守派の人間だとして、入った会社の人が全員革新派の人だった場合、徐々に革新派の考えに染まっていく可能性は非常に高い)
問題は何か
今あげたようなことは、必ずしもインターネットの世界だけにとどまるものではない。
例えば、テレビ、新聞にもバイアスはかかっており、世論を形成するのに非常に大きな力を発揮する。
しかし、テレビや新聞には、報道倫理などがあり、あまり無茶なバイアスをかけると大きな批判にあう。
一方で、インターネット企業のフィルタリングは、非常に気付かれにくく、そのような批判がおきにくい。
また、SNS(Facebookなど)は特にそうだが、皆が使っているということが大きな力になるため、一つの企業に力が集中してしまうことが多いため、そのような企業が暴走した時、手が付けくい。
そして、インターネットのフィルタリングは○○新聞を読んでいる人という分け方をするのではなく、個人個人を分断できます。
個々人で何をすべきか
まず、このようなフィルタリングのある世界で過ごしているということに自覚的になることは大切です。
そして、意図的に自分と関係のない世界の情報を取りにいく姿勢、情報の収集をインターネットばかりに頼らず、自分と異なる世界の人に話を聞くなどの姿勢が大切になるかと思います。
「閉じこもるインターネット」という本を参考に書きました。
閉じこもるインターネット――グーグル・パーソナライズ・民主主義
- 作者: イーライ・パリサー,Eli Pariser,井口耕二
- 出版社/メーカー: 早川書房
- 発売日: 2012/02/23
- メディア: 単行本
- 購入: 3人 クリック: 103回
- この商品を含むブログ (47件) を見る