[ { "id": 64588, "uuid": "201caad53ebfeb2a4d7b", "user": { "id": 3057, "url_name": "kacchan6@github", "profile_image_url": "https://pbs.twimg.com/profile_images/1197288997/image_normal.jpg" }, "title": "FlashのColorMatrixFilterをImageMagickで再現する", "created_at": "2014-05-01 09:48:53 +0900", "updated_at": "2014-05-01 09:48:53 +0900", "created_at_in_words": "6分", "updated_at_in_words": "6分", "tags": [ { "name": "ImageMagick", "url_name": "imagemagick", "icon_url": "https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/510216acdf3055b255261b2d6f55a11074858394/medium.jpg?1387909468", "versions": [] }, { "name": "flash", "url_name": "flash", "icon_url": "/icons/medium/missing.png", "versions": [] }, { "name": "ActionScript3", "url_name": "actionscript3", "icon_url": "/icons/medium/missing.png", "versions": [] } ], "stock_count": 0, "comment_count": 0, "url": "http://qiita.com/kacchan6@github/items/201caad53ebfeb2a4d7b", "created_at_as_seconds": 1398905333, "tweet": false, "gist_url": null, "private": false, "raw_body": "\nFlashにはColorMatrixFilterがあり、4x5の色変換行列でDisplayObjectにフィルタをかけることが出来ます。\n\nImageMagickにも同様に-color-matrixオプションで行列を指定して、色の置き換えができ、Flashと同じように変換することが出来ます。\n\n#Flashの行列\n\nFlash側の行列は20個の要素の配列で表現され、次のように計算され新しい色が計算されます。\n\n```\ndestR = (m[ 0] * srcR) + (m[ 1] * srcG) + (m[ 2] * srcB) + (m[ 3] * srcA) + m[ 4];\ndestG = (m[ 5] * srcR) + (m[ 6] * srcG) + (m[ 7] * srcB) + (m[ 8] * srcA) + m[ 9];\ndestB = (m[10] * srcR) + (m[11] * srcG) + (m[12] * srcB) + (m[13] * srcA) + m[14];\ndestA = (m[15] * srcR) + (m[16] * srcG) + (m[17] * srcB) + (m[18] * srcA) + m[19];\n```\n\n#Flashの行列をImageMagickに移植する場合\n\nImageMagickではCYMKAも扱えるように6x6の行列に拡張されていますが、0と1で埋める、オフセットは255で割る、を行えばFlash同様の定義ができます。\n\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n
m[0]m[1]m[2]m[3]0m[4] / 255
m[5]m[6]m[7]m[8]0m[9] / 255
m[10]m[11]m[12]m[13]0m[14] / 255
m[15]m[16]m[17]m[18]0m[19] / 255
000010
000001
\n\n##例\n\nコントラストを上げる場合、Flashでは以下のようになります。\n\n```\nvar matrix:Array = [\t2, 0, 0, 0, -128\t,\n\t\t\t\t\t\t0, 2, 0, 0, -128\t,\n\t\t\t\t\t\t0, 0, 2, 0, -128\t,\n\t\t\t\t\t\t0, 0, 0, 1, 0\t\t];\nimage.filters = [new ColorMatrixFilter(matrix)];\n```\n\nこれをImageMagickで再現するには、Flashの行列を以下のように変換します。\n\n```\n2,\t0,\t0,\t0,\t0,\t-0.502,\n0,\t2,\t0,\t0,\t0,\t-0.502,\n0,\t0,\t2,\t0,\t0,\t-0.502,\n0,\t0,\t0,\t1,\t0,\t\t 0,\n0,\t0,\t0,\t0,\t1,\t\t 0,\n0,\t0,\t0,\t0,\t0,\t\t 1,\n```\n\nそして以下のようなコマンドになります。\n\n```\nconvert src.jpg -color-matrix \"2 0 0 0 0 -0.502 0 2 0 0 0 -0.502 0 0 2 0 0 -0.502 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1\" out.jpg\n```\n", "body": "

FlashにはColorMatrixFilterがあり、4x5の色変換行列でDisplayObjectにフィルタをかけることが出来ます。

\n

ImageMagickにも同様に-color-matrixオプションで行列を指定して、色の置き換えができ、Flashと同じように変換することが出来ます。

\n

\n \n Flashの行列\n

Flash側の行列は20個の要素の配列で表現され、次のように計算され新しい色が計算されます。

\n
destR = (m[ 0] * srcR) + (m[ 1] * srcG) + (m[ 2] * srcB) + (m[ 3] * srcA) + m[ 4];\ndestG = (m[ 5] * srcR) + (m[ 6] * srcG) + (m[ 7] * srcB) + (m[ 8] * srcA) + m[ 9];\ndestB = (m[10] * srcR) + (m[11] * srcG) + (m[12] * srcB) + (m[13] * srcA) + m[14];\ndestA = (m[15] * srcR) + (m[16] * srcG) + (m[17] * srcB) + (m[18] * srcA) + m[19];\n

\n \n Flashの行列をImageMagickに移植する場合\n

ImageMagickではCYMKAも扱えるように6x6の行列に拡張されていますが、0と1で埋める、オフセットは255で割る、を行えばFlash同様の定義ができます。

\n\n \n m[0]\n m[1]\n m[2]\n m[3]\n 0\n m[4] / 255\n \n \n m[5]\n m[6]\n m[7]\n m[8]\n 0\n m[9] / 255\n \n \n m[10]\n m[11]\n m[12]\n m[13]\n 0\n m[14] / 255\n \n \n m[15]\n m[16]\n m[17]\n m[18]\n 0\n m[19] / 255\n \n \n 0\n 0\n 0\n 0\n 1\n 0\n \n \n 0\n 0\n 0\n 0\n 0\n 1\n \n\n\n

\n \n 例\n

コントラストを上げる場合、Flashでは以下のようになります。

\n
var matrix:Array = [    2, 0, 0, 0, -128    ,\n                        0, 2, 0, 0, -128    ,\n                        0, 0, 2, 0, -128    ,\n                        0, 0, 0, 1, 0       ];\nimage.filters = [new ColorMatrixFilter(matrix)];\n

これをImageMagickで再現するには、Flashの行列を以下のように変換します。

\n
2,  0,  0,  0,  0,  -0.502,\n0,  2,  0,  0,  0,  -0.502,\n0,  0,  2,  0,  0,  -0.502,\n0,  0,  0,  1,  0,       0,\n0,  0,  0,  0,  1,       0,\n0,  0,  0,  0,  0,       1,\n

そして以下のようなコマンドになります。

\n
convert src.jpg -color-matrix "2 0 0 0 0 -0.502 0 2 0 0 0 -0.502 0 0 2 0 0 -0.502 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1" out.jpg\n
", "stock_users": [] }, { "id": 64586, "uuid": "97012d2d6f663712249e", "user": { "id": 41631, "url_name": "kozayupapa", "profile_image_url": "https://avatars.githubusercontent.com/u/3196383?" }, "title": "QCon2014 に参加してきました", "created_at": "2014-05-01 09:43:58 +0900", "updated_at": "2014-05-01 09:44:50 +0900", "created_at_in_words": "11分", "updated_at_in_words": "10分", "tags": [ { "name": "Azure", "url_name": "azure", "icon_url": "/icons/medium/missing.png", "versions": [] }, { "name": "lean", "url_name": "lean", "icon_url": "/icons/medium/missing.png", "versions": [] }, { "name": "QCon", "url_name": "qcon", "icon_url": "/icons/medium/missing.png", "versions": [] } ], "stock_count": 0, "comment_count": 0, "url": "http://qiita.com/kozayupapa/items/97012d2d6f663712249e", "created_at_as_seconds": 1398905038, "tweet": true, "gist_url": null, "private": false, "raw_body": "[QCon Tokyo 2014](http://www.qcontokyo.com/program.html)\n\nおすそわけのおすそ分けで、有料コンファレンスに参加できることになりましたのでメモを公開します。私自身 QConって何?という感じだったので簡単にQConの今までの歴史もまとめました。\n\n# 以下 参加した各セッションの詳細レポートです。\n* [Keynote#2 ロボットは東大にはいれるか] (http://qiita.com/kozayupapa/items/081132896fb9d0624201)\n* [Enterprice Cloud Design pattern 大量データ処理アーキテクチャ]近日Up\n* [リーン開発の現場 ~塹壕よりアジャイルなプロジェクト運営~]近日Up\n* [] (xxx)\n\n# 所感\n## \n* 初めての参加でどんなギークの人がいるのか、かなりワクワクしていたのですが疲れたサラリーマン(自分も含め)ぽい人が多くて技術者っぽい雰囲気の人は1/3くらいでした\n* BeerPartyで毎回Qconに参加しているいかにもGeekという雰囲気の方が、最近背広が増えたという感想をもらしてました。\n* 撮影は禁止ということを午後の2回目くらいのセッションで知りました。 しらなくて途中まで真ん前でとりまくってしまいましたが、、いまどき禁止ですか、、、確かにスライドは公開されると思うのですが、今!メモリたいんですが、、。\n* 幅広いテーマを扱っているので最初はよかったんだと思いますが、時間がたつにつれ対象がぼやけてみんなにとって今一つという日本の悪い習慣のある意味象徴的なコンファレンスかなと思いました。(私見です。)\n\n\n# QCon とは?\n主催者説明:\n「最先端のITとその関連技術の動向をエンジニアの視点で深く掘り下げこれからの未来を展望する。」\n\n# QCon History\nセッションのテーマ年表事例を確認してみると、2012 までプログラムや設計技術そのものをテーマにしたものが多かったですが、最近はサービス紹介的な要素も多くなってきています。クラウドというものが本格的な検証期から、普及期にはいったのが2012年ごろを境にしていることがテーマからも感じられます。その分技術者にとってはちょっと物足りなくなってきた感じがします。(あくまで私見です)\n\n## 2014(今年)\n[Qcon2014](http://www.qcontokyo.com/program.html)\n* 組込み系/モノづくり\n* クラウド\n* ビッグデータ/分散技術\n* モバイル/HTML5\n* アジャイル/モデリング\n\n## 2013\n[Qcon2013](http://qcontokyo.com/tokyo-2013/program.html)\n* クラウド\n* モバイル/HTML\n* 組込み x 2 \n* アジャイル・モデリング\n* ビッグデータ・分散技術\n\n## 2012\n[Qcon2012](http://qcontokyo.com/tokyo-2012/program.html)\n* 設計/プログラム言語 x 2 \n* モバイル/組込み x 2\n* ビジネス テクニカルケーススタディ(クラウドアーキテクチャー) x 2\n\n\n## 2011\n[Qcon2011](http://qcontokyo.com/tokyo-2011/program.html)\n* クラウド\n* Design & Patterns\n* Quality & Test\n* 技術(mobile & クラウドアーキ)\n* ケーススタディ(クラウドアーキ&先行研究)\n* アジャイル\n\n\n## 2010\n[Qcon2010](http://qcontokyo.com/tokyo-2010/program.html)\n* アジャイル\n* クラウドアーキ\n* クラウド導入\n* ユーザーインターフェース\n* プログラミング言語\n* 設計技法\n* Test技法\n\n## 2009\n[Qcon2009](http://qcontokyo.com/tokyo-2009/session.html)\n* アーキテクチャ\n* RIA\n* Ruby\n* Cloud Computing SOA\n* アジャイル\n* ウェブベストプラクティス\n\n\n", "body": "

QCon Tokyo 2014

\n

おすそわけのおすそ分けで、有料コンファレンスに参加できることになりましたのでメモを公開します。私自身 QConって何?という感じだったので簡単にQConの今までの歴史もまとめました。

\n

\n \n 以下 参加した各セッションの詳細レポートです。\n

\n\n

\n \n 所感\n

\n\n

\n \n QCon とは?\n

主催者説明:
\n「最先端のITとその関連技術の動向をエンジニアの視点で深く掘り下げこれからの未来を展望する。」

\n

\n \n QCon History\n

セッションのテーマ年表事例を確認してみると、2012 までプログラムや設計技術そのものをテーマにしたものが多かったですが、最近はサービス紹介的な要素も多くなってきています。クラウドというものが本格的な検証期から、普及期にはいったのが2012年ごろを境にしていることがテーマからも感じられます。その分技術者にとってはちょっと物足りなくなってきた感じがします。(あくまで私見です)

\n

\n \n 2014(今年)\n

Qcon2014
\n* 組込み系/モノづくり
\n* クラウド
\n* ビッグデータ/分散技術
\n* モバイル/HTML5
\n* アジャイル/モデリング

\n

\n \n 2013\n

Qcon2013
\n* クラウド
\n* モバイル/HTML
\n* 組込み x 2
\n* アジャイル・モデリング
\n* ビッグデータ・分散技術

\n

\n \n 2012\n

Qcon2012
\n* 設計/プログラム言語 x 2
\n* モバイル/組込み x 2
\n* ビジネス テクニカルケーススタディ(クラウドアーキテクチャー) x 2

\n

\n \n 2011\n

Qcon2011
\n* クラウド
\n* Design & Patterns
\n* Quality & Test
\n* 技術(mobile & クラウドアーキ)
\n* ケーススタディ(クラウドアーキ&先行研究)
\n* アジャイル

\n

\n \n 2010\n

Qcon2010
\n* アジャイル
\n* クラウドアーキ
\n* クラウド導入
\n* ユーザーインターフェース
\n* プログラミング言語
\n* 設計技法
\n* Test技法

\n

\n \n 2009\n

Qcon2009
\n* アーキテクチャ
\n* RIA
\n* Ruby
\n* Cloud Computing SOA
\n* アジャイル
\n* ウェブベストプラクティス

\n", "stock_users": [] }, { "id": 64585, "uuid": "16160f386fda3c31a7ff", "user": { "id": 42238, "url_name": "aTadatoshiTokutake", "profile_image_url": "https://avatars.githubusercontent.com/u/7322488?" }, "title": "[修正版]和田卓人さんの講演 (@ACCESS幕張オフィス)", "created_at": "2014-05-01 09:43:37 +0900", "updated_at": "2014-05-01 09:43:37 +0900", "created_at_in_words": "11分", "updated_at_in_words": "11分", "tags": [ { "name": "TDD", "url_name": "tdd", "icon_url": "https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/647a9c938b5e89bfa5db3a2316720fa95aeb4f7d/medium.jpg?1398501369", "versions": [] }, { "name": "和田卓人", "url_name": "%e5%92%8c%e7%94%b0%e5%8d%93%e4%ba%ba", "icon_url": "/icons/medium/missing.png", "versions": [] } ], "stock_count": 1, "comment_count": 0, "url": "http://qiita.com/aTadatoshiTokutake/items/16160f386fda3c31a7ff", "created_at_as_seconds": 1398905017, "tweet": false, "gist_url": null, "private": false, "raw_body": "**前回投稿したものを修正したものになるので、内容はほぼ変わりません**\n\n ACCESS幕張オフィスにて、テスト駆動開発(TDD)で有名な和田卓人さんによる講演が行われました。講演の内容やそのとき学んだことを書きたいと思います。\n\n#「この先生きのこるために」\n いきなり余談ですが、和田さんは「このせんせいきのこるために」とおっしゃっていました。\n まず、和田さんが提示した本は「プログラマが知るべき97のこと」(通称:きのこ本)でした。そして、97の項目のうち、プログラマとして生き残っていくために最も重要な一つを挙げるとしたら、\n> きのこ本の18: 学び続ける姿勢\n\nであるとおっしゃいました。\n では、学び続けるためには何をしていけば良いのか?和田さんは、学び方のコツを5つのポイントに絞ってお話されました。\n> \n1. 身の周りをプログラミング対象にする。例えば「生活費の計算」などのように、仕事ではないところでどんどん学びたい言語やフレームワークを用いることでそれに慣れていく。和田さんは、原稿の執筆時にgitを用いたバージョン管理をしたようで、その実際の画面なども見せていただきました。\n2. 年下から学ぶ。自分よりも能力のある年下のプログラマがどんどん出てくることに対して、意地を張らずに、謙虚に、誠実に年下からもどんどん学べることを学んでいくべきである。\n3. 過去から未来を知る。技術変化の推移はまるで「振り子」のような動きをしているように思われる。例えば、「分散システムと集中システム」や「サーバ処理とクライアント処理」などの注目技術の推移などがそれにあたる。しかし、これらは「振り子」のようにただの行き来を繰り返すのではなく、進化を伴った行き来である。和田さんはこれを「らせん」と表現していました。過去からどのような進化をして現在に至るのかを学ぶことが大事。\n4. 人の流れを見る。現在、オープンソース開発はコミュニティから個人へと遷移している。個が多く集まると渦が起こる。この流れは、githubなどによって作られたものであり、railsやnode.jsは委員会の設計に終焉をもたらしつつある。こういった渦の中で学べることは非常に多い。\n5. アウトプットをする。自分の学んだことを外に発信することが大事。発信すると、それに対するフィードバックがあり、それが自分に対する更なるインプットとなる。すなわち、学びを促進する。\n\n 最後にまとめると、5つのポイントから、最終的には自分の得意分野を作り上げ、実力を価値ある状態にすることが、「生き残る」ために必要なことではないかとおっしゃっていました。\n 「技術の学び方を学び、あとはとにかく手を動かす。やってるうちに、できるようになる。」は、自分の学生時代(特に大学の研究室)でも経験があり、とても共感しました。\n 講演自体も非常に密な内容でしたが、和田さんは、こちらの質問に対しても、とても密な返答をしていらっしゃいました。内容が多くなってしまいますので、すべては書けませんが、衝撃的だったことが1点あります。\n\n* 質問時間中、新入社員の我々に対して、和田さんが「こんなこと言ったらいけないが、転職をしてみるのも良い」と2〜3回程奨める。\n\n 学ぶことが多すぎる、非常に内容の濃い講演でした。和田さん、そして招待してくださった松木さん、この度は本当にありがとうございました。\n\n# 自分がこれからチャレンジしたいこと\n 講演での学びすべてを実行することは、とてもできそうにないので、まずやってみようと思うものを3つ挙げます。\n\n1. 自分の身の周りをプログラミング対象にする。とにかく手を動かすということを実践したいからです。\n2. アウトプットをする。「アウトプットが非常に簡単にできる現在において、それをしないのは損である」と、松木さんも常々おっしゃていて、自分はそういったことを全然しないので、少しづつでも挑戦していけたらと思います。\n3. TDDをとにかく試す。松木さんが技術研修中に行った実演も影響しているのですが、その有用性というものがよくわかりました。とにかく意識して、使える場面では使っていくということをしたいと思います。(ただ、現在進行中の3日間のrails実習においていきなりrspecを使うことを断念してしまいましたが。)\n\n\n以上、和田さんの講演に関する簡単な内容紹介と個人的な学び・感想でした。\n\n", "body": "

前回投稿したものを修正したものになるので、内容はほぼ変わりません

\n

 ACCESS幕張オフィスにて、テスト駆動開発(TDD)で有名な和田卓人さんによる講演が行われました。講演の内容やそのとき学んだことを書きたいと思います。

\n

\n \n 「この先生きのこるために」\n

 いきなり余談ですが、和田さんは「このせんせいきのこるために」とおっしゃっていました。
\n まず、和田さんが提示した本は「プログラマが知るべき97のこと」(通称:きのこ本)でした。そして、97の項目のうち、プログラマとして生き残っていくために最も重要な一つを挙げるとしたら、

\n\n
\n

きのこ本の18: 学び続ける姿勢

\n
\n

であるとおっしゃいました。
\n では、学び続けるためには何をしていけば良いのか?和田さんは、学び方のコツを5つのポイントに絞ってお話されました。

\n\n
\n
    \n
  1. 身の周りをプログラミング対象にする。例えば「生活費の計算」などのように、仕事ではないところでどんどん学びたい言語やフレームワークを用いることでそれに慣れていく。和田さんは、原稿の執筆時にgitを用いたバージョン管理をしたようで、その実際の画面なども見せていただきました。
  2. \n
  3. 年下から学ぶ。自分よりも能力のある年下のプログラマがどんどん出てくることに対して、意地を張らずに、謙虚に、誠実に年下からもどんどん学べることを学んでいくべきである。
  4. \n
  5. 過去から未来を知る。技術変化の推移はまるで「振り子」のような動きをしているように思われる。例えば、「分散システムと集中システム」や「サーバ処理とクライアント処理」などの注目技術の推移などがそれにあたる。しかし、これらは「振り子」のようにただの行き来を繰り返すのではなく、進化を伴った行き来である。和田さんはこれを「らせん」と表現していました。過去からどのような進化をして現在に至るのかを学ぶことが大事。
  6. \n
  7. 人の流れを見る。現在、オープンソース開発はコミュニティから個人へと遷移している。個が多く集まると渦が起こる。この流れは、githubなどによって作られたものであり、railsやnode.jsは委員会の設計に終焉をもたらしつつある。こういった渦の中で学べることは非常に多い。
  8. \n
  9. アウトプットをする。自分の学んだことを外に発信することが大事。発信すると、それに対するフィードバックがあり、それが自分に対する更なるインプットとなる。すなわち、学びを促進する。
  10. \n
\n
\n

 最後にまとめると、5つのポイントから、最終的には自分の得意分野を作り上げ、実力を価値ある状態にすることが、「生き残る」ために必要なことではないかとおっしゃっていました。
\n 「技術の学び方を学び、あとはとにかく手を動かす。やってるうちに、できるようになる。」は、自分の学生時代(特に大学の研究室)でも経験があり、とても共感しました。
\n 講演自体も非常に密な内容でしたが、和田さんは、こちらの質問に対しても、とても密な返答をしていらっしゃいました。内容が多くなってしまいますので、すべては書けませんが、衝撃的だったことが1点あります。

\n\n\n

 学ぶことが多すぎる、非常に内容の濃い講演でした。和田さん、そして招待してくださった松木さん、この度は本当にありがとうございました。

\n

\n \n 自分がこれからチャレンジしたいこと\n

 講演での学びすべてを実行することは、とてもできそうにないので、まずやってみようと思うものを3つ挙げます。

\n\n
    \n
  1. 自分の身の周りをプログラミング対象にする。とにかく手を動かすということを実践したいからです。
  2. \n
  3. アウトプットをする。「アウトプットが非常に簡単にできる現在において、それをしないのは損である」と、松木さんも常々おっしゃていて、自分はそういったことを全然しないので、少しづつでも挑戦していけたらと思います。
  4. \n
  5. TDDをとにかく試す。松木さんが技術研修中に行った実演も影響しているのですが、その有用性というものがよくわかりました。とにかく意識して、使える場面では使っていくということをしたいと思います。(ただ、現在進行中の3日間のrails実習においていきなりrspecを使うことを断念してしまいましたが。)
  6. \n
\n

以上、和田さんの講演に関する簡単な内容紹介と個人的な学び・感想でした。

\n", "stock_users": [ "kseta" ] }, { "id": 64583, "uuid": "081132896fb9d0624201", "user": { "id": 41631, "url_name": "kozayupapa", "profile_image_url": "https://avatars.githubusercontent.com/u/3196383?" }, "title": "QCon2014:人工頭脳プロジェクト『ロボットは東大に入れるか』", "created_at": "2014-05-01 09:35:30 +0900", "updated_at": "2014-05-01 09:35:30 +0900", "created_at_in_words": "19分", "updated_at_in_words": "19分", "tags": [ { "name": "QCon", "url_name": "qcon", "icon_url": "/icons/medium/missing.png", "versions": [] }, { "name": "人工知能", "url_name": "%e4%ba%ba%e5%b7%a5%e7%9f%a5%e8%83%bd", "icon_url": "/icons/medium/missing.png", "versions": [] } ], "stock_count": 0, "comment_count": 0, "url": "http://qiita.com/kozayupapa/items/081132896fb9d0624201", "created_at_as_seconds": 1398904530, "tweet": true, "gist_url": null, "private": false, "raw_body": "[QCon Tokyo 2014](http://www.qcontokyo.com/program.html)\n\nDetail Report#2/8 \n\n# 人口頭脳プロジェクト [「ロボットは東大に入れるか」](http://21robot.org/)\n[新井紀子](http://www.qcontokyo.com/AraiNoriko_2014.html):国立情報学研究所\noss maintanier\n\n## コンピュータは大学入試問題を解けるでしょうか?\n### 1997 chess 20世紀最高のチェスプレイヤーカスパロフが、IBM Deep blue に負けました\n\n### 2013 将棋でも三浦さん(8段)をコンピュータが破りました\n\n* 人間の目から見て「知的」かどうかはコンピュータには関係ない\n\n### さて、コンピュータはセンター入試を解けるでしょうか?\n(作れるかという質問に対してはほとんどの人がつくれる方に手をあげたが、自分が実際にプログラムをしてとけるものを作れそうかといわれると会場の手が上がらない)\n* 答えが決まっているからとける?  では作れる理由になっていない\n* 人間の世界では チェスの世界チャンピオンに勝つ > センター入試で高得点ですが、、\n\n## 1980年代 第5世代プロジェクトというのがありました\n* どれは犬でしょう? (人間には容易、人工知能には難しい)\n\n![DSC_9697.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/a0e15da1-189f-8a64-82de-9c5b9a02f2b7.jpeg)\n\n今Google , Amazon にしろ End to End すべてを機械にということは考えていない。エッジを挑戦的なところでFeasibilityのあるところに立てられたところが次の時代の勝者。\n\n## 問題は計算できるかどうか? ( I. チューリング)\n* 有限の知識\n* 特定の条件下での決まった手続き\n* 同様に繰り返す\n* (同様に繰り返す-> 帰納法 パスカルもいっていました)\n* (理性は計算できる -リバイアサン- : ホッブス ) 人工知能の歴史は400年前\n\n## 犬と猫の見分け方\n![DSC_9698.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/839b367e-1e49-5fe8-a8bb-b6bf93812f35.jpeg)\n* 基本的に意味は考えない(区分ける閾値のパラメータに意味をもとめない)\n* 正しさは保障しないが、 結構正しい\n* 論理はなくても結構効く\n\n## それではセンター試験の問題は、過去問を学習すればよいのでは?\n* たかが20年の過去問では、教師データにならない\n* 教師データがたまたまはいれば分類はできる\n* 最終的に問題は計算できるかどうか = 現時点では ** 論理 **と**確率過程**と**統計**でとけるか?\n\n## そもそもなぜ東大プロジェクトを始めたのか\n* 2010 に思いついたが、認められるには2011/2月 IBM Watson が、quize チャンピオンにかったというニュースの影響があった。8\n* なぜWatsonが勝てたのかというと、Quizeが特徴的。(what hogehoge in **this** planaet? ときかれえば 答えはJupiter とか \"this\" という言葉とそのあとのカテゴリーである程度絞り込めるのでその時点の人工知能、学習のプログラムを作りやすかった。)\n\n## 目標 2016年にセンター入試で高得点 202Xに東大合格レベル\n必要な分野\n* 含意関係認識\n* 深く正確な言語処理\n* 機械翻訳\n* 自然言語処理と接合可能な数式処理\n* シュミレーションによる曖昧性回避\n* オントロジーによる選択肢の絞り込み\n![DSC_9699.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/4ef167d3-d8ff-f636-e3e0-de8d73d973db.jpeg)\n\n\n## 社会科と英語 - 言語理解と知識の活用\n* センター試験の問題はすばらしい。かならず教科書そのままではなく、言い換えた問題をだしてくれるので通常のキーワード一致では正答できない。\n\n### 含意関係認識の研究\n* Wikipedia や 教科書を知識源として社会科の問題に答える\n* この技術をベースにキーワードではないタイプの検索エンジンが出てくるだろう\n![DSC_9700.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/b6573660-1d0d-fc4e-60bb-a8f7988d1ba9.jpeg)\n\n## 数学\n### 言語理解\n* 構文解析\n* 照応解析\n* 談話構造解析\n### ZFでの意味表現\n### 数式処理\n* 限量子消去\n* グレブナ基底\n![DSC_9701.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/410b9ec1-5384-0f94-9b4f-178f367dde90.jpeg)\n\n## 物理\n![DSC_9702.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/4d3c59d4-745d-673a-a3f5-8250f44df266.jpeg)\n\n## センター模試、東大プレ\n去年代ゼミで模試をうけたところじつは現時点でも400校ほどには合格率80%だそうです。\n\n## なぜ人工知能を研究しているか\n* いま栄えていても、エッジを立て間違えるとあっというまに衰退する\n* 2010 コンピュータが仕事を奪うという本を書いたが、誰も真剣に受け止めてくれない\n* 人間界にアウトソースするIFと承認欲求をうまくつくれば人間はただで働く\n* おそろしさを伝えるためにも、東大ロボプロジェクトでエッジを自分自身で証明してみようと考えている\n ![DSC_9705.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/7e6448fc-a0e7-9596-6477-6010cf1b21f3.jpeg)\n\n\n## 知的コンピュータによって上下に分断される労働\n* 人間に残されるのは、高度知的労働、肉体労働、教育を要しない低賃金労働になる可能性が高い。\n* 下の方を真ん中にいかせる方法論はある\n* 真ん中を上にいかせるメソッドは現在ない\n* 計算だけでは答えがでない仕事、とはなんだろう?\n\n#Q&A\n## Q. 人間の能力をロボットが超える日はくるでしょうか?\n\n* 現状は数学になれないとかけない\n* 論理、確率過程、統計\n* 部分的には超えている\n* 比較の問題として、人間は一様でない\n* 仕事のうえで多くの平凡な人をアウトパフォーム\n\n## Q.Googleの次にくる検索スタイルはどんな技術をベースになるでしょうか?\n* 用途的に分かれていく\n* 専門性が高くて知識源が少ないものに向くものになるだろう\n* ある論文などの知識から、対象の知識が正しいか、間違っているかを判断するようなもの\n* 特許などスペシフィックなものに対してい含意関係認識を使うと,より少ない知識から、答えを導き出すことができるようになる。\n\n\n\n\n\n\n\n", "body": "

QCon Tokyo 2014

\n

Detail Report#2/8

\n

\n \n 人口頭脳プロジェクト 「ロボットは東大に入れるか」\n

新井紀子:国立情報学研究所
\noss maintanier

\n

\n \n コンピュータは大学入試問題を解けるでしょうか?\n

\n \n 1997 chess 20世紀最高のチェスプレイヤーカスパロフが、IBM Deep blue に負けました\n

\n \n 2013 将棋でも三浦さん(8段)をコンピュータが破りました\n

\n\n

\n \n さて、コンピュータはセンター入試を解けるでしょうか?\n

(作れるかという質問に対してはほとんどの人がつくれる方に手をあげたが、自分が実際にプログラムをしてとけるものを作れそうかといわれると会場の手が上がらない)
\n* 答えが決まっているからとける?  では作れる理由になっていない
\n* 人間の世界では チェスの世界チャンピオンに勝つ > センター入試で高得点ですが、、

\n

\n \n 1980年代 第5世代プロジェクトというのがありました\n

\n\n

\"DSC_9697.jpg\"

\n

今Google , Amazon にしろ End to End すべてを機械にということは考えていない。エッジを挑戦的なところでFeasibilityのあるところに立てられたところが次の時代の勝者。

\n

\n \n 問題は計算できるかどうか? ( I. チューリング)\n

\n\n

\n \n 犬と猫の見分け方\n

\"DSC_9698.jpg\"
\n* 基本的に意味は考えない(区分ける閾値のパラメータに意味をもとめない)
\n* 正しさは保障しないが、 結構正しい
\n* 論理はなくても結構効く

\n

\n \n それではセンター試験の問題は、過去問を学習すればよいのでは?\n

\n\n

\n \n そもそもなぜ東大プロジェクトを始めたのか\n

\n\n

\n \n 目標 2016年にセンター入試で高得点 202Xに東大合格レベル\n

必要な分野
\n* 含意関係認識
\n* 深く正確な言語処理
\n* 機械翻訳
\n* 自然言語処理と接合可能な数式処理
\n* シュミレーションによる曖昧性回避
\n* オントロジーによる選択肢の絞り込み
\n\"DSC_9699.jpg\"

\n

\n \n 社会科と英語 - 言語理解と知識の活用\n

\n\n

\n \n 含意関係認識の研究\n

\n\n

\n \n 数学\n

\n \n 言語理解\n

\n\n

\n \n 物理\n

\"DSC_9702.jpg\"

\n

\n \n センター模試、東大プレ\n

去年代ゼミで模試をうけたところじつは現時点でも400校ほどには合格率80%だそうです。

\n

\n \n なぜ人工知能を研究しているか\n

\n\n

\n \n 知的コンピュータによって上下に分断される労働\n

\n\n

\n \n Q&A\n

\n \n Q. 人間の能力をロボットが超える日はくるでしょうか?\n

\n\n

\n \n Q.Googleの次にくる検索スタイルはどんな技術をベースになるでしょうか?\n

\n\n", "stock_users": [] }, { "id": 64582, "uuid": "035cd67ac6881ca49967", "user": { "id": 23997, "url_name": "kimama1997", "profile_image_url": "https://gravatar.com/avatar/00c062c68265474413402f10a4d051b5?d=https%3A%2F%2Fidenticons.github.com%2F597d103fa85096d9e70a76908df45048.png&r=x" }, "title": "Herokuの公式PHPビルドパックが5.5に対応してた", "created_at": "2014-05-01 09:33:17 +0900", "updated_at": "2014-05-01 09:33:17 +0900", "created_at_in_words": "21分", "updated_at_in_words": "21分", "tags": [ { "name": "heroku", "url_name": "heroku", "icon_url": "https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d77183eaf26189a59c14a189a23a004bb9bdecf4/medium.jpg?1364839078", "versions": [] }, { "name": "PHP", "url_name": "php", "icon_url": "https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bea656787429d261e190cef347af9879ffd98343/medium.jpg?1387912718", "versions": [] } ], "stock_count": 1, "comment_count": 0, "url": "http://qiita.com/kimama1997/items/035cd67ac6881ca49967", "created_at_as_seconds": 1398904397, "tweet": true, "gist_url": null, "private": false, "raw_body": "長らく公式メンテが無いと思ってたら先日いきなり『そろそろバージョンアップしよーよ』って話が出てた(?)Herokuの公式ビルドパックがなんと更新されたみたい。\nhttps://github.com/heroku/heroku-buildpack-php/commit/ae5f2a48dfd1c0ffa7a3519d04a987e6aa577d64\n\nなお、5.3.27→5.5.11RC1になった模様。\n\n既に公式ビルドパックを使用してるアプリはコミットしたら、新規PHPアプリは自動的に、このビルドパックが適用されるはず。(試してません。)\n", "body": "

長らく公式メンテが無いと思ってたら先日いきなり『そろそろバージョンアップしよーよ』って話が出てた(?)Herokuの公式ビルドパックがなんと更新されたみたい。
\nhttps://github.com/heroku/heroku-buildpack-php/commit/ae5f2a48dfd1c0ffa7a3519d04a987e6aa577d64

\n

なお、5.3.27→5.5.11RC1になった模様。

\n

既に公式ビルドパックを使用してるアプリはコミットしたら、新規PHPアプリは自動的に、このビルドパックが適用されるはず。(試してません。)

\n", "stock_users": [ "Reds" ] }, { "id": 64579, "uuid": "b732f7d707194bb95322", "user": { "id": 207, "url_name": "gfx", "profile_image_url": "https://secure.gravatar.com/avatar/6e8a7dbab8bec2252484c67e17d5446c?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png" }, "title": "GradleからOSX notification centerに通知をするスニペット", "created_at": "2014-05-01 08:41:23 +0900", "updated_at": "2014-05-01 08:41:23 +0900", "created_at_in_words": "約1時間", "updated_at_in_words": "約1時間", "tags": [ { "name": "OSX", "url_name": "osx", "icon_url": "https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2b7511b6a09068fde35692327f32f2551037cf90/medium.jpg?1387908812", "versions": [ "10.9" ] }, { "name": "gradle", "url_name": "gradle", "icon_url": "/icons/medium/missing.png", "versions": [] } ], "stock_count": 1, "comment_count": 0, "url": "http://qiita.com/gfx/items/b732f7d707194bb95322", "created_at_as_seconds": 1398901283, "tweet": true, "gist_url": null, "private": false, "raw_body": "`osascript(1)` で AppleScript を実行すればできる。\n\n```groovy\nvoid growl(String title, String message) {\n def proc = [\"osascript\", \"-e\", \"display notification \\\"${message}\\\" with title \\\"${title}\\\"\"].execute()\n if (proc.waitFor() != 0) {\n throw new GradleException(proc.err.text.trim());\n }\n}\n```\n\n他のオプションは [display notificationのマニュアル](https://developer.apple.com/library/mac/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW224) にあるとおり、 `subtitle` と `sound name` がある。\n", "body": "

osascript(1) で AppleScript を実行すればできる。

\n
void growl(String title, String message) {\n    def proc = ["osascript", "-e", "display notification \\"${message}\\" with title \\"${title}\\""].execute()\n    if (proc.waitFor() != 0) {\n        throw new GradleException(proc.err.text.trim());\n    }\n}\n

他のオプションは display notificationのマニュアル にあるとおり、 subtitlesound name がある。

\n", "stock_users": [ "Reds" ] }, { "id": 64578, "uuid": "de2b8cc7ec9ae1ce2cd9", "user": { "id": 29968, "url_name": "135yshr", "profile_image_url": "https://secure.gravatar.com/avatar/f1bc1cf9f7e38603089825ea0f528167" }, "title": "GAE for GOの環境を構築する", "created_at": "2014-05-01 08:26:26 +0900", "updated_at": "2014-05-01 09:14:36 +0900", "created_at_in_words": "約1時間", "updated_at_in_words": "40分", "tags": [ { "name": "GAE", "url_name": "gae", "icon_url": "https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bc7da538b63f978cfc76b5da1cc88d6916049357/medium.jpg?1396790561", "versions": [] }, { "name": "golang", "url_name": "golang", "icon_url": "https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/abdc121605e09b282c2cd003add30b599d7d07b8/medium.jpg?1368272516", "versions": [] }, { "name": "Go", "url_name": "go", "icon_url": "https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/52d8b32911f5e71b421e2cd751b48425c29fab11/medium.jpg?1366622944", "versions": [] } ], "stock_count": 0, "comment_count": 0, "url": "http://qiita.com/135yshr/items/de2b8cc7ec9ae1ce2cd9", "created_at_as_seconds": 1398900386, "tweet": false, "gist_url": null, "private": false, "raw_body": "\nMac(10.9.2)にGAE(Google App Engine)の環境構築したときの手順をまとめました。\n内容は、[本家サイト](https://developers.google.com/appengine/docs/go/gettingstarted/introduction?hl=ja)の情報を日本語に置き換えただけなので、英語が読める方はそちらを参照したほうが詳細な情報を得ることができます。\nまた、自分が環境構築した際、特に問題が起きなかったのでトラブルシュートは載っていません。\n\n# 前提条件\n1. Go 1.2 がインストールされている\n1. python 2.7 がインストールされている\n\n# 手順の流れ\n1. Google App Engine fo GO SDKのダウンロードと展開\n1. Pythonのバージョン確認\n1. 展開したフォルダのパスを環境変数に登録\n1. ファイルを作成して Hello, World を表示\n\n## GAE for Go SDKのダウンロードと展開\n1. [ここ][sdk]をクリックして、GAEのサイトからSDKをダウンロード\n1. ダウンロードしたSDKのzipファイルを任意のフォルダに展開 \n自分の環境では、$HOMEの配下に展開\n\n## Pythonのバージョン確認\n1. 下記のコマンドを実行して python 2.7 がインストールされているか確認 \n2.7がインストールされていないときは、[Python][python]のサイトを参考にセットップが必要\n\n```sh:手順\n$ env python -V\nPython 2.7.5\n```\n\n## 展開したフォルダのパスを環境変数に登録\n1. .bash_profile か .bashrc にGAE for Go SDKのパスを登録 \n自分の環境では、$HOMEの配下に展開したので、読み替えてください。\n\n```sh:手順\n$ cd\n$ vi .bashrc\nPATH=$PATH:$HOME/go_appengine # ← 追加した行\n```\n\n## ファイルを作成して Hello, World を表示\n1. ディレクトリを作成(パスは任意)\n1. Hello, World ファイルを作成\n1. yamlファイルを作成\n1. サーバーを実行\n1. http://localhost:8080 にアクセス\n\n```sh:手順\n$ mkdir -p ~/helloworld/hello\n$ cd ~/helloworld/hello\n$ vi hello.go\n$ vi app.yaml\n$ goapp serve\n```\n\n```go:hello.go\npackage hello\n\nimport (\n \"fmt\"\n \"net/http\"\n)\n\nfunc init() {\n http.HandleFunc(\"/\", handler)\n}\n\nfunc handler(w http.ResponseWriter, r *http.Request) {\n fmt.Fprint(w, \"Hello, world!\")\n}\n```\n\n```yaml:app.yaml\napplication: helloworld\nversion: 1\nruntime: go\napi_version: go1\n\nhandlers:\n- url: /.*\n script: _go_app\n```\n\n\n[sdk]: http://developers.google.com/appengine/downloads?hl=ja#Google_App_Engine_SDK_for_Go\n[python]: https://www.python.org\n", "body": "

Mac(10.9.2)にGAE(Google App Engine)の環境構築したときの手順をまとめました。
\n内容は、本家サイトの情報を日本語に置き換えただけなので、英語が読める方はそちらを参照したほうが詳細な情報を得ることができます。
\nまた、自分が環境構築した際、特に問題が起きなかったのでトラブルシュートは載っていません。

\n

\n \n 前提条件\n

\n
    \n
  1. Go 1.2 がインストールされている
  2. \n
  3. python 2.7 がインストールされている
  4. \n
\n

\n \n 手順の流れ\n

\n
    \n
  1. Google App Engine fo GO SDKのダウンロードと展開
  2. \n
  3. Pythonのバージョン確認
  4. \n
  5. 展開したフォルダのパスを環境変数に登録
  6. \n
  7. ファイルを作成して Hello, World を表示
  8. \n
\n

\n \n GAE for Go SDKのダウンロードと展開\n

\n
    \n
  1. ここをクリックして、GAEのサイトからSDKをダウンロード
  2. \n
  3. ダウンロードしたSDKのzipファイルを任意のフォルダに展開
    \n自分の環境では、$HOMEの配下に展開
  4. \n
\n

\n \n Pythonのバージョン確認\n

\n
    \n
  1. 下記のコマンドを実行して python 2.7 がインストールされているか確認
    \n2.7がインストールされていないときは、Pythonのサイトを参考にセットップが必要
  2. \n
\n
手順
$ env python -V\nPython 2.7.5\n

\n \n 展開したフォルダのパスを環境変数に登録\n

\n
    \n
  1. .bash_profile か .bashrc にGAE for Go SDKのパスを登録
    \n自分の環境では、$HOMEの配下に展開したので、読み替えてください。
  2. \n
\n
手順
$ cd\n$ vi .bashrc\nPATH=$PATH:$HOME/go_appengine # ← 追加した行\n

\n \n ファイルを作成して Hello, World を表示\n

\n
    \n
  1. ディレクトリを作成(パスは任意)
  2. \n
  3. Hello, World ファイルを作成
  4. \n
  5. yamlファイルを作成
  6. \n
  7. サーバーを実行
  8. \n
  9. http://localhost:8080 にアクセス
  10. \n
\n
手順
$ mkdir -p ~/helloworld/hello\n$ cd ~/helloworld/hello\n$ vi hello.go\n$ vi app.yaml\n$ goapp serve\n
hello.go
package hello\n\nimport (\n    "fmt"\n    "net/http"\n)\n\nfunc init() {\n    http.HandleFunc("/", handler)\n}\n\nfunc handler(w http.ResponseWriter, r *http.Request) {\n    fmt.Fprint(w, "Hello, world!")\n}\n
app.yaml
application: helloworld\nversion: 1\nruntime: go\napi_version: go1\n\nhandlers:\n- url: /.*\n  script: _go_app\n
", "stock_users": [] } ]