103
Rediscover with Python サイボウズ・ラボ 西尾泰和 質疑応答加筆バージョン 2014-09-17 1 14917日水曜日

PyConJP Keynote Speech (Japanese version)

  • Upload
    nishio

  • View
    2.480

  • Download
    2

Embed Size (px)

DESCRIPTION

PyConJP Keynote Speech (Japanese version)

Citation preview

Page 1: PyConJP Keynote Speech (Japanese version)

Rediscover with Pythonサイボウズ・ラボ西尾泰和

質疑応答加筆バージョン2014-09-17

114年9月17日水曜日

Page 2: PyConJP Keynote Speech (Japanese version)

evil pythonista

214年9月17日水曜日

Page 3: PyConJP Keynote Speech (Japanese version)

evil pythonista

314年9月17日水曜日

Page 4: PyConJP Keynote Speech (Japanese version)

evil pythonista

• 2006年LL Ring「じゃんけん2.0」

314年9月17日水曜日

Page 5: PyConJP Keynote Speech (Japanese version)

evil pythonista

• 2006年LL Ring「じゃんけん2.0」

• いろいろな言語のプログラマが各言語でプログラムを書き、通信対戦でじゃんけんする

314年9月17日水曜日

Page 6: PyConJP Keynote Speech (Japanese version)

evil pythonista

• 2006年LL Ring「じゃんけん2.0」

• いろいろな言語のプログラマが各言語でプログラムを書き、通信対戦でじゃんけんする

• この程度のプログラムなら1行で書ける!

314年9月17日水曜日

Page 7: PyConJP Keynote Speech (Japanese version)

改行のある構文は使えない

• if

• while

• try..except

414年9月17日水曜日

Page 8: PyConJP Keynote Speech (Japanese version)

How to?

514年9月17日水曜日

Page 9: PyConJP Keynote Speech (Japanese version)

How to?

• if → and/orの短絡評価を使う

514年9月17日水曜日

Page 10: PyConJP Keynote Speech (Japanese version)

How to?

• if → and/orの短絡評価を使う

• while → 無限にyieldする便利ライブラリfrom itertools import count

514年9月17日水曜日

Page 11: PyConJP Keynote Speech (Japanese version)

How to?

• if → and/orの短絡評価を使う

• while → 無限にyieldする便利ライブラリfrom itertools import count

• try..except → “例外を投げて死ぬ可能性のある処理” を子プロセスとして起動し、終了時のエラー出力を読む

514年9月17日水曜日

Page 12: PyConJP Keynote Speech (Japanese version)

http://www.nishiohirokazu.org/blog/2006/08/python_12.html

614年9月17日水曜日

Page 13: PyConJP Keynote Speech (Japanese version)

まじめな自己紹介

714年9月17日水曜日

Page 14: PyConJP Keynote Speech (Japanese version)

まじめな自己紹介

• サイボウズ・ラボ

714年9月17日水曜日

Page 15: PyConJP Keynote Speech (Japanese version)

まじめな自己紹介

• サイボウズ・ラボ• 次世代のグループウェアの基盤となる技術を中長期視点で研究開発

714年9月17日水曜日

Page 16: PyConJP Keynote Speech (Japanese version)

まじめな自己紹介

• サイボウズ・ラボ• 次世代のグループウェアの基盤となる技術を中長期視点で研究開発

• ワンライナーは書いていません

714年9月17日水曜日

Page 17: PyConJP Keynote Speech (Japanese version)

サイボウズにおけるPython利用シーン

• 自動化• インフラ• 解析

814年9月17日水曜日

Page 18: PyConJP Keynote Speech (Japanese version)

自動化

• VM・ストレージ・各種設定の管理

• テスト:記述するのもモックを作るのも楽• Jenkinsのスクリプトとして→RequestsでkintoneのAPIを叩いたり

914年9月17日水曜日

Page 19: PyConJP Keynote Speech (Japanese version)

インフラ

1014年9月17日水曜日

Page 20: PyConJP Keynote Speech (Japanese version)

https://enterprise.cybozu.com/topics131111/

Remote Backup

1114年9月17日水曜日

Page 21: PyConJP Keynote Speech (Japanese version)

http://developer.cybozu.co.jp/tech/?p=5799

P2P automatic failure recovery system

1214年9月17日水曜日

Page 22: PyConJP Keynote Speech (Japanese version)

http://developer.cybozu.co.jp/tech/?p=5799

P2P automatic failure recovery system

1314年9月17日水曜日

Page 23: PyConJP Keynote Speech (Japanese version)

インフラ

• 性能が要求される部分はC++やJava

• Pythonでそれらのコンポーネントをつなぎ合わせる

1414年9月17日水曜日

Page 24: PyConJP Keynote Speech (Japanese version)

解析

1514年9月17日水曜日

Page 25: PyConJP Keynote Speech (Japanese version)

解析

• データの収集

1514年9月17日水曜日

Page 26: PyConJP Keynote Speech (Japanese version)

解析

• データの収集• クレンジング・フィルタリング

1514年9月17日水曜日

Page 27: PyConJP Keynote Speech (Japanese version)

解析

• データの収集• クレンジング・フィルタリング• 統計処理もNumPy・SciPyでお手軽

1514年9月17日水曜日

Page 28: PyConJP Keynote Speech (Japanese version)

解析

• データの収集• クレンジング・フィルタリング• 統計処理もNumPy・SciPyでお手軽

from scipy.stats import chi2_contingencychi2_contingency(data)

1514年9月17日水曜日

Page 29: PyConJP Keynote Speech (Japanese version)

サイボウズにおけるPython利用シーン

• 自動化• インフラ• 解析 →具体例を話します

1614年9月17日水曜日

Page 30: PyConJP Keynote Speech (Japanese version)

1714年9月17日水曜日

Page 31: PyConJP Keynote Speech (Japanese version)

おすすめグラフ

• データからグラフを作る• どんなグラフを作るか選択肢が色々• コンピュータが支援

http://developer.cybozu.co.jp/tech/?p=3874

Chart recommendation

1814年9月17日水曜日

Page 32: PyConJP Keynote Speech (Japanese version)

Recommend charts using statistics of data distribution

1914年9月17日水曜日

Page 33: PyConJP Keynote Speech (Japanese version)

おすすめグラフ

• プロトタイプにFlask、NumPy

• 標準ライブラリのcollectionsも便利

• 製品版はJavaScriptで実装されてます

http://developer.cybozu.co.jp/tech/?p=3874

Chart recommendation

2014年9月17日水曜日

Page 34: PyConJP Keynote Speech (Japanese version)

What is groupware?

2114年9月17日水曜日

Page 35: PyConJP Keynote Speech (Japanese version)

What is groupware?

Group + Software

2114年9月17日水曜日

Page 36: PyConJP Keynote Speech (Japanese version)

Augmenting Human Intellect

エンゲルバート"Augmenting Human Intellect: A Conceptual Framework" (1962)

ソフトウェアによって人間の能力を増強する

2214年9月17日水曜日

Page 37: PyConJP Keynote Speech (Japanese version)

ソフトウェアによって集団の能力を増強する=グループウェア

Augmenting Group Intellect

2314年9月17日水曜日

Page 38: PyConJP Keynote Speech (Japanese version)

文章を与えるとコンピュータが

単語の意味を理解する

word2vec

2414年9月17日水曜日

Page 39: PyConJP Keynote Speech (Japanese version)

人間

コンピュータ

2514年9月17日水曜日

Page 40: PyConJP Keynote Speech (Japanese version)

人間

人間+コンピュータ=増強された人間

2614年9月17日水曜日

Page 41: PyConJP Keynote Speech (Japanese version)

2714年9月17日水曜日

Page 42: PyConJP Keynote Speech (Japanese version)

2814年9月17日水曜日

Page 43: PyConJP Keynote Speech (Japanese version)

“やる気の出るアドバイス”で検索2914年9月17日水曜日

Page 44: PyConJP Keynote Speech (Japanese version)

14 channels brain wave sensor

3014年9月17日水曜日

Page 45: PyConJP Keynote Speech (Japanese version)

Machine→Human

Human→Machine touch panel

liquid crystal

(multi-touch)

switch

mousekeyboard

camerascanner

paper CRT 3D TV

HMDe-ink

3114年9月17日水曜日

Page 46: PyConJP Keynote Speech (Japanese version)

Machine→Human

liquid crystalpaper CRT 3D TV

HMDe-ink

book e-book

3214年9月17日水曜日

Page 47: PyConJP Keynote Speech (Japanese version)

人間増強の四要素• 1: 人工物(Artifacts):

コンピュータ、ソフトウェア、etc.

• 2: 言語(Language):

概念を表す専門用語、デザパタ、etc.

• 3: 方法論(Methodology):

問題解決のための手順、戦略、etc.

• 4: 教育(Training): 1~3を使うスキルを身につけるエンゲルバート"Augmenting Human Intellect: A Conceptual Framework" (1962)

3314年9月17日水曜日

Page 48: PyConJP Keynote Speech (Japanese version)

人間増強の四要素• 1: 人工物(Artifacts):

コンピュータ、ソフトウェア、etc.

• 2: 言語(Language):

概念を表す専門用語、デザパタ、etc.

• 3: 方法論(Methodology):

問題解決のための手順、戦略、etc.

• 4: 教育(Training): 1~3を使うスキルを身につけるエンゲルバート"Augmenting Human Intellect: A Conceptual Framework" (1962)

3414年9月17日水曜日

Page 49: PyConJP Keynote Speech (Japanese version)

theme of this conference:

Rediscover with Python

3514年9月17日水曜日

Page 50: PyConJP Keynote Speech (Japanese version)

How to discover?→Methodology to find unknown

3614年9月17日水曜日

Page 51: PyConJP Keynote Speech (Japanese version)

3714年9月17日水曜日

Page 52: PyConJP Keynote Speech (Japanese version)

3814年9月17日水曜日

Page 53: PyConJP Keynote Speech (Japanese version)

3914年9月17日水曜日

Page 54: PyConJP Keynote Speech (Japanese version)

How to discover?→Change Perspective

4014年9月17日水曜日

Page 55: PyConJP Keynote Speech (Japanese version)

Change Perspective

• どんな視点で物事を見ても、かならず見えていない部分がある

• 見えてない部分を見るために視点を変える

4114年9月17日水曜日

Page 56: PyConJP Keynote Speech (Japanese version)

known ↔ unknown

4214年9月17日水曜日

Page 57: PyConJP Keynote Speech (Japanese version)

明らかに知っている

明らかに知らない

4314年9月17日水曜日

Page 58: PyConJP Keynote Speech (Japanese version)

明らかに知っている

明らかに知らない

不明4414年9月17日水曜日

Page 59: PyConJP Keynote Speech (Japanese version)

盲点(blind spot)

• 「明らかに知ってる」領域と「明らかに知らない」領域の間に「知らないことを知らない」領域がある。

• 見えていないのに、見えてないことに気づいていない。それが盲点。

4514年9月17日水曜日

Page 60: PyConJP Keynote Speech (Japanese version)

「どこまで知っているのか」を明らかにする

明らかに知っている

明らかに知らない

4614年9月17日水曜日

Page 61: PyConJP Keynote Speech (Japanese version)

←盲点 blindspot明らかに知っている

明らかに知らない

4714年9月17日水曜日

Page 62: PyConJP Keynote Speech (Japanese version)

←盲点 blindspot明らかに知っている

明らかに知らない

4814年9月17日水曜日

Page 63: PyConJP Keynote Speech (Japanese version)

How to find blind spot?

4914年9月17日水曜日

Page 64: PyConJP Keynote Speech (Japanese version)

ComparisonHistory

Experience

5014年9月17日水曜日

Page 65: PyConJP Keynote Speech (Japanese version)

ComparisonHistory

Experience+

AbstractionCommunication

5114年9月17日水曜日

Page 66: PyConJP Keynote Speech (Japanese version)

ComparisonHistory

ExperienceAbstraction

Communication

How to find blind spot?

5214年9月17日水曜日

Page 67: PyConJP Keynote Speech (Japanese version)

Comparison

• 例:複数言語を比較することで気づく「あれ?Rubyでは0は真なのか?! Pythonでは偽だよな?!」「言語によって何が真か異なるのか?」「他の言語ではどうなってるんだろう?」「Pythonではどう定義されている?」

object.__nonzero__(self)Called to implement truth value testing and the built-in operation bool();

5314年9月17日水曜日

Page 68: PyConJP Keynote Speech (Japanese version)

History

• 例:歴史を追うことで盲点に気づく「PythonってなんでNew-styleクラスとそうでないのの2つあるの?→歴史を知る→型とクラスを融合する目的のためにメソッドの名前解決の順序の決め方を変える必要があったことに気づく

Unifying types and classes in Python 2.2 | Python.orghttps://www.python.org/download/releases/2.2.3/descrintro

5414年9月17日水曜日

Page 69: PyConJP Keynote Speech (Japanese version)

Experience

• 実際に使うことで盲点に気づく「あれ?1/2は0.5になると思ったが 0になったぞ?」

PEP 238 -- Changing the Division Operatorhttp://legacy.python.org/dev/peps/pep-0238/

5514年9月17日水曜日

Page 70: PyConJP Keynote Speech (Japanese version)

Abstraction

• 具体例を抽象化したものに触れることで自分の経験を言語化する「ああ、なんとなく使っていたこの書き方って、Mediatorパターンって名前がついていたのか!」

5614年9月17日水曜日

Page 71: PyConJP Keynote Speech (Japanese version)

Communication

• 経験の異なる他人と会話することで盲点に気づく「こういう問題に困ってんだよね」「それこうしたらいいんじゃない?」「なるほど、その発想はなかった!」「いや、GUIでは普通の発想だよ」「俺サーバ周りが専門だからなぁ」

5714年9月17日水曜日

Page 72: PyConJP Keynote Speech (Japanese version)

ComparisonHistory

ExperienceAbstraction

Communication

How to find blind spot?

5814年9月17日水曜日

Page 73: PyConJP Keynote Speech (Japanese version)

Communication

5914年9月17日水曜日

Page 74: PyConJP Keynote Speech (Japanese version)

Office Hour13:00-13:30

Blog, Mailsee http://nhiro.org/

6014年9月17日水曜日

Page 75: PyConJP Keynote Speech (Japanese version)

Q&A

PyCon JP 2014 Day 3 感想とノート #pyconjp | こえむの編集後記http://www.koemu.com/blog/2014/09/15/pycon-jp-2014-day3/

↓質問を思い出すのにとても役に立ちました!ありがとう!

6114年9月17日水曜日

Page 76: PyConJP Keynote Speech (Japanese version)

Q: 「盲点に気づくチャンス」となる情報を見ても認知的不協和を起こして「そんなはずはない」と思ってしまう人がいるのでは。組織のaugmentを考える上ではそういう人をどうすればよいだろうか?どう啓蒙する?

6214年9月17日水曜日

Page 77: PyConJP Keynote Speech (Japanese version)

A: まさにその点に対して答えようとしている「U理論」について9/24から京都大学サマーデザインスクールで解説する予定なのでその資料を…http://www.design.kyoto-u.ac.jp/sds2014/ja/theme01.html

6314年9月17日水曜日

Page 78: PyConJP Keynote Speech (Japanese version)

A: 言いたいことは2点ある。まず「他人をどう変えるか」というスタンスではうまくいかない。自分が変わる必要が

ある。

6414年9月17日水曜日

Page 79: PyConJP Keynote Speech (Japanese version)

A: 次に「見えているのに見ていない」状態にハマることは自分も含めてよくあること、

と気づくこと。

6514年9月17日水曜日

Page 80: PyConJP Keynote Speech (Japanese version)

A: 最初は小さなものでよいので、その気付きから有益な結果が得られる「成功体験」を積むこと。これが自信につな

がる。

6614年9月17日水曜日

Page 81: PyConJP Keynote Speech (Japanese version)

U曲線PDCAサイクルとU曲線の関係U曲線

C・オットー・シャーマー「U理論」 

状態

行動

補足スライド

6714年9月17日水曜日

Page 82: PyConJP Keynote Speech (Japanese version)

U曲線PDCAサイクルとU曲線の関係U曲線

C・オットー・シャーマー「U理論」 

状態

行動

←見えているのに思い込みにとらわれてきちんと見てない状態

補足スライド

6814年9月17日水曜日

Page 83: PyConJP Keynote Speech (Japanese version)

U曲線PDCAサイクルとU曲線の関係U曲線

C・オットー・シャーマー「U理論」 

状態

行動

←見てはいるが、自分の視点からだけ。自己と他者の間に境界線を引いて

「奴らは~しないから」と考えたりする。

補足スライド

6914年9月17日水曜日

Page 84: PyConJP Keynote Speech (Japanese version)

Q: モデリングをどうやってやるかも大事なのでは

ないか?

7014年9月17日水曜日

Page 85: PyConJP Keynote Speech (Japanese version)

A: はい、大事です。

7114年9月17日水曜日

Page 86: PyConJP Keynote Speech (Japanese version)

この特集の3章がまるまるその内容です

WEB上で読めますhttp://gihyo.jp/lifestyle/feature/01/engineer-studying

7214年9月17日水曜日

Page 87: PyConJP Keynote Speech (Japanese version)

A: 経験から仮説が作られる。「理解した」という気持ちも仮説。仮説は実験によって検証する必要がある。理解に基づいて行動し結果を確認する

7314年9月17日水曜日

Page 88: PyConJP Keynote Speech (Japanese version)

A: 行動した結果が予想と異なった場合はモデルを修正する必要がある。これを繰り返していくことで「正しい可能性の高い」モデルを作り、それを組み合わせることでより大きなモデルを作る。これが一つの方法論

7414年9月17日水曜日

Page 89: PyConJP Keynote Speech (Japanese version)

A: もう一つの方法論として実験が容易でない人文科学では、KJ法やグラウンデッド・セオリーが使

われる。7514年9月17日水曜日

Page 90: PyConJP Keynote Speech (Japanese version)

A: まずインタビューなどで大量にデータを集め、それを自分の偏見で「これはノイズだ」とフィルタリングすることなく一覧できるようにする

7614年9月17日水曜日

Page 91: PyConJP Keynote Speech (Japanese version)

A: 人間の作業記憶は7つくらいしかないが、データを紙に書いて机の上に広げれば100とか200とかを見ることがで

きる

7714年9月17日水曜日

Page 92: PyConJP Keynote Speech (Japanese version)

A: 100のデータを一覧できる状態を作った上で、机の上で動かすことでモデルを組み立てていく、これがKJ法

(会場では言いそこねたが、既存の構造をトップダウンに当てはめるのではなく、データからボトムアップで構造を組み立てていくのも重要なポイント)(ちなみに上記で紹介した拙著書籍・特集記事は

KJ法でモデル化されている)7814年9月17日水曜日

Page 93: PyConJP Keynote Speech (Japanese version)

Office Hourでの質問Q: 盲点に気づく5つの方法は並列ではなく、時間軸で前後関係があるのではないか?

7914年9月17日水曜日

Page 94: PyConJP Keynote Speech (Japanese version)

A: それは盲点だった!確かに抽象はいきなり最初から使うことはできない。プログラミングの経験がない人がデザインパターンの本を読んでも自分の経験と結びつかない。

8014年9月17日水曜日

Page 95: PyConJP Keynote Speech (Japanese version)

Q: テスタの間でテストのノウハウを共有したいがどうした

らいいか(詳細な状況説明は省略)

8114年9月17日水曜日

Page 96: PyConJP Keynote Speech (Japanese version)

A: 言語化されていない知識をどうやって共有するかという問題だと思える。一つの方法論は「一緒に作業」だ。

8214年9月17日水曜日

Page 97: PyConJP Keynote Speech (Japanese version)

A: 一緒に作業することでノウハウを言語化しないまま共有することができる。更に「操作せずに指示する人と操作する人」を分ければ指示するために知識の言語化が促される

参考文献 “凡才の集団は孤高の天才に勝る”8314年9月17日水曜日

Page 98: PyConJP Keynote Speech (Japanese version)

A: 言語化が行われて初めて、マニュアル化などができるようになる。言語化は結構難しいタスクなので、そのスキルを鍛えずにいきなり個々人に任せるとうまくいかない。

8414年9月17日水曜日

Page 99: PyConJP Keynote Speech (Japanese version)

言語化されていない知識 

このスパイラルを回すことで知識が創造される 『知識創造企業』p93 

補足スライド

8514年9月17日水曜日

Page 100: PyConJP Keynote Speech (Japanese version)

言語化されていない知識 

このスパイラルを回すことで知識が創造される 『知識創造企業』p93 

補足スライド

↑ペアプロ・共同作業はここに相当する

8614年9月17日水曜日

Page 101: PyConJP Keynote Speech (Japanese version)

Q: 私は情報の言語化のためのテンプレートを作っている。質問に答えていくと必要な情

報が揃う。

8714年9月17日水曜日

Page 102: PyConJP Keynote Speech (Japanese version)

A: それは良いアプローチ。「言語化しろ」と言われてできない人でも、具体的に質問をされると答えられることがよくある。適切な質問を投げ

かけることは重要。8814年9月17日水曜日

Page 103: PyConJP Keynote Speech (Japanese version)

A: そういう意味でテンプレート化にはメリットがある。しかし、テンプレートで表現できない情報が捨てられてしまうデメリットに気をつける必要がある。新しい重要な情報は定型化されていない。

8914年9月17日水曜日