プログラミング方法論第13回

50
プログラミング方法論 13人力プログラミング 橋本 翔(教育実習)

Upload: sho-hashimoto

Post on 31-May-2015

1.439 views

Category:

Technology


3 download

DESCRIPTION

SFC プログラミング方法論第13回 2013年7月8日の講義資料

TRANSCRIPT

Page 1: プログラミング方法論第13回

プログラミング方法論第13回

人力プログラミング

橋本 翔(教育実習)

Page 2: プログラミング方法論第13回

橋本翔(28)

• 教育実習生

• SFC博士課程 (増井研究室)

• 実世界インタフェース

• 分散並列/Webプログラミング

• 趣味:プログラミング、料理

@shokai

Page 3: プログラミング方法論第13回

教育実習• 博士号を取るのに必要

• 何言ってるかわからない時は止めてください

• チャットを使おうと思う

• http://chat.shokai.org/

Page 4: プログラミング方法論第13回

人力プログラミング

• 人間をプログラムに組み込む

• 人間を関数のように扱う

• ソフトウェアが苦手な事は人間が分担する

Page 5: プログラミング方法論第13回

人間の方が得意な事• パターン認識、間違い探し

• 個人の趣味趣向の判定

• インターネットにない情報

• 実世界情報、おいしい店、綺麗な景色

• 使いにくいシステムや、人に頼んだほうが速い仕事

• 親に頼まれてビデオ録画の設定をする

Page 6: プログラミング方法論第13回

CAPTCHA

Page 7: プログラミング方法論第13回

reCAPTCHA

• OCRの補正に流用

Page 8: プログラミング方法論第13回

インターネットパトロール

Page 9: プログラミング方法論第13回

エンゲルバートのデモ

• マウスとウィンドウシステムの発明デモ

• 中に人が10人以上入っていたとのこと

Page 10: プログラミング方法論第13回

重要な物を判定

• Googleはよくクリックされるページが上に行く

• みんなが良いと言ったページは面白い?

• よく開くファイルは重要なファイル?

• みんなが持っているファイルは重要?

Page 11: プログラミング方法論第13回

StumbleUpon

• ページに対して「良い」「悪い」を入力するブラウザ拡張を導入

• ある程度学習すると、面白いページばかり表示させられる

Page 12: プログラミング方法論第13回

last.fm

• 音楽を聞くだけで趣味が解析される

• スキップボタンで学習するらしい

Page 13: プログラミング方法論第13回

集合知

• collective intelligence

• wikipediaなど

Page 14: プログラミング方法論第13回

人力検索

Page 15: プログラミング方法論第13回

どう書く?org

• http://ja.doukaku.org

• お題を色々なプログラム言語で解く

• 各言語で同じ問題を解くアルゴリズムが集まる

• コードを書く→他の言語への翻訳・・もやろうとしていたようだ

Page 16: プログラミング方法論第13回

Amazon Mechanical turk

• 仕事依頼のクラウドサービス

• どの写真が一番写りが良いか?など

Page 17: プログラミング方法論第13回

CrowdForge• 文章をAmazon

Mechanical Turkで添削

• 適切な部分で分割し、結合までやってくれる

• map/reduce

Page 18: プログラミング方法論第13回

昔デンマークで見たゲーム

• 観客をカメラで画像認識してpongを操作する

• と、みせかけて途中から逆にpongで観客が操作される

Page 19: プログラミング方法論第13回

人間をアルゴリズムの一部に取り入れる

• 機械学習のフィードバック

• 使ってもらうのに工夫が必要

• 楽しく使ってもらう

• あるいは何もしていないのに使えている状態にする

Page 20: プログラミング方法論第13回

Tumblr dashboard

• 人間をフィルタにして多段連結

Page 21: プログラミング方法論第13回

顔認識• 顔認識は学習が面倒

• データが少ないと間違う

Page 22: プログラミング方法論第13回

Facebookの顔認識

• 顔を学習させる

• 相手に通知される

• つらくない学習

Page 23: プログラミング方法論第13回

レシピサイト

• レシピを共有

• レビュー、作ったよレポート等で洗練されていく

• 遺伝的プログラミングに似ている

Page 24: プログラミング方法論第13回

lang-8• 外国語を勉強したい人同士が日記などを添削しあうサイト

• 人間は、間違っていると直したくなるもの

• 添削ランキングがすぐに反映されるようにしたら添削率が上がった

• http://blog.livedoor.jp/sasata299/archives/51898602.html

• フィードバック速度重要

Page 25: プログラミング方法論第13回

写真の位置登録• ズレているとつい直したくなる

Page 26: プログラミング方法論第13回

Gunosy

• 普通にTwitter

やFacebookを使っているだけで学習してくれる

Page 27: プログラミング方法論第13回

アルゴリズムと組み合わせる• レコメンド

• クラスタリング

• 決定木

• SVM

• ニューラルネット

• ベイズ

Page 28: プログラミング方法論第13回

エンドユーザープログラミング

• ユーザーにプログラムさせた方が良い場合がある

• 目覚まし

• ビデオデッキ

• UserScript

• UserStyleSheet

Page 29: プログラミング方法論第13回

Userscriptやブラウザ拡張

• ユーザーがWebページを制御

• UIを変えたり

• 無限スクロール

• 他のページの情報を読み込んだり

• SBMの評判を表示

Page 30: プログラミング方法論第13回

シリアスゲーム・ゲーミフィケーション

• ゲームでゲーム外の問題を解決

Page 31: プログラミング方法論第13回

タンパク質構造解析ゲーム

• foldit

Page 32: プログラミング方法論第13回

遺伝子構造解析ゲーム

• Phylo

Page 33: プログラミング方法論第13回

人間と機械に互換性があるシステム

• プログラムにも人間にも読めるフォーマットで出力する

Page 34: プログラミング方法論第13回

RSS/Atom

• 専用アプリで読む

• Webサービス間のインフラになっている

Page 35: プログラミング方法論第13回

Twitter bot

Page 36: プログラミング方法論第13回

Twitter bot (JSON出力)

Page 37: プログラミング方法論第13回

「ホワイトハウスで爆発」偽ツイートで株価急落

• 人間に得意なこと=最新のニュース情報など

• をプログラムに取り入れた結果の事故

Page 38: プログラミング方法論第13回

人間のbotが混ざっても良い

• botを書きやすくするツールがある

• “Tw”など

Page 39: プログラミング方法論第13回

Amazonマーケットプレイス

• 買う側はamazon.co.jpから買える

• 中古の物だけ中古業者にメールが飛ぶ

• 中古業者とAmazon倉庫が互換性を持つようにwrapされている

Page 40: プログラミング方法論第13回

SFでよくある

• ゲームをしていたと思ったら、宇宙人と戦争していた

Page 41: プログラミング方法論第13回

BabaScript

コンピュータが得意な事はコンピュータが、人間が得意な事は馬場くん  がやってくれる言語

@takumibaba

Page 42: プログラミング方法論第13回

% baba -e 'アイス買ってきて("#{rand 5}本")'

baba -e ’コード’

もしくはbaba ファイル名

Page 43: プログラミング方法論第13回

結果

Page 44: プログラミング方法論第13回

res = かず助に行きたい人の出欠取ってくださいloop do num = res.to_i # 整数に変換 if num > 0 puts では予約してください("#{num}人") exit else res = 残念・・その次の週はどうですか? puts res endend

出欠確認.bb

% baba 出欠確認.bb

実行

ただのRuby…ではなく日本語で書いた部分を馬場君が実行してくれる

Page 45: プログラミング方法論第13回

class Foo def initialize @name = "bar" endend

foo = Foo.newfoo.instance_eval do puts @name # => "bar"end

instance_eval

babaコマンドの中身 = instance_evalFile.open(fname) do |f| BabaScript::Baba.instance_eval f.readend

コードやブロックをそのインスタンスのコンテキストで実行する

fooのコンテキストで実行されるのでアクセサが無いプロパティ@nameも読める

Page 46: プログラミング方法論第13回

module BabaScript class Baba

def self.method_missing(name, *args) ## (略) Androidにnameとargsを送信する end

endend

Rubyの関数名には日本語が使える→ method_missingで全部取れる

File.open(fname) do |f| BabaScript::Baba.instance_eval f.readend

Page 47: プログラミング方法論第13回

人間に命令を送る構文を追加したプログラム言語

+人間を関数のように扱えるようになるスマホアプリ

→ 人間とプログラム言語の新しい関係

Page 48: プログラミング方法論第13回

人力プログラミングの工夫

• 人間とプログラムの接続方式

• UIとデータフォーマットに工夫が必要

• 楽しませる、熱中させる

• 競争させる、自慢、達成感

• 正しいアルゴリズム

Page 49: プログラミング方法論第13回

新しいWebサービス• 人間は部品になりたいのではないか?

• 大抵のWebサービスは「ある目的を達成するために人間を部品に取り込んだプログラム」である、とも言える

• 既存のプログラミングモデルの一部分を人間に置き換えるとWebサービスになる

• 目的達成の役割を自分が担うとうれしい

• アルゴリズムが正しければ動くのでは?

Page 50: プログラミング方法論第13回

実習JavaScriptとRubyによるWeb版Linda入門(3)

http://shokai.org/blog/archives/7847