Rediscover with Python 
サイボウズ・ラボ 
西尾泰和 
質疑応答加筆バージョン 
2014-09-17 
14年9月17日水曜日1
evil pythonista 
14年9月17日水曜日2
evil pythonista 
14年9月17日水曜日3
evil pythonista 
• 2006年LL Ring「じゃんけん2.0」 
14年9月17日水曜日3
evil pythonista 
• 2006年LL Ring「じゃんけん2.0」 
• いろいろな言語のプログラマが各言語でプロ 
グラムを書き、通信対戦でじゃんけんする 
14年9月17日水曜日3
evil pythonista 
• 2006年LL Ring「じゃんけん2.0」 
• いろいろな言語のプログラマが各言語でプロ 
グラムを書き、通信対戦でじゃんけんする 
• この程度のプログラムなら1行で書ける! 
14年9月17日水曜日3
改行のある構文は使えない 
• if 
• while 
• try..except 
14年9月17日水曜日4
How to? 
14年9月17日水曜日5
How to? 
• if → and/orの短絡評価を使う 
14年9月17日水曜日5
How to? 
• if → and/orの短絡評価を使う 
• while → 無限にyieldする便利ライブラリ 
from itertools import count 
14年9月17日水曜日5
How to? 
• if → and/orの短絡評価を使う 
• while → 無限にyieldする便利ライブラリ 
from itertools import count 
• try..except → “例外を投げて死ぬ可能性の 
ある処理” を子プロセスとして起動し、 
終了時のエラー出力を読む 
14年9月17日水曜日5
http://www.nishiohirokazu.org/blog/2006/08/python_12.html 
14年9月17日水曜日6
まじめな自己紹介 
14年9月17日水曜日7
まじめな自己紹介 
• サイボウズ・ラボ 
14年9月17日水曜日7
まじめな自己紹介 
• サイボウズ・ラボ 
• 次世代のグループウェアの 
基盤となる技術を中長期視点で研究開発 
14年9月17日水曜日7
まじめな自己紹介 
• サイボウズ・ラボ 
• 次世代のグループウェアの 
基盤となる技術を中長期視点で研究開発 
• ワンライナーは書いていません 
14年9月17日水曜日7
サイボウズにおける 
Python利用シーン 
• 自動化 
• インフラ 
• 解析 
14年9月17日水曜日8
自動化 
• VM・ストレージ・各種設定の管理 
• テスト:記述するのもモックを作るのも楽 
• Jenkinsのスクリプトとして 
→RequestsでkintoneのAPIを叩いたり 
14年9月17日水曜日9
インフラ 
14年9月17日水曜日10
Remote Backup 
https://enterprise.cybozu.com/topics131111/ 
14年9月17日水曜日11
P2P automatic failure recovery system 
http://developer.cybozu.co.jp/tech/?p=5799 
14年9月17日水曜日12
P2P automatic failure recovery system 
http://developer.cybozu.co.jp/tech/?p=5799 
14年9月17日水曜日13
インフラ 
• 性能が要求される部分はC++やJava 
• Pythonでそれらのコンポーネントを 
つなぎ合わせる 
14年9月17日水曜日14
解析 
14年9月17日水曜日15
解析 
• データの収集 
14年9月17日水曜日15
解析 
• データの収集 
• クレンジング・フィルタリング 
14年9月17日水曜日15
解析 
• データの収集 
• クレンジング・フィルタリング 
• 統計処理もNumPy・SciPyでお手軽 
14年9月17日水曜日15
解析 
• データの収集 
• クレンジング・フィルタリング 
• 統計処理もNumPy・SciPyでお手軽 
from scipy.stats import chi2_contingency 
chi2_contingency(data) 
14年9月17日水曜日15
サイボウズにおける 
Python利用シーン 
• 自動化 
• インフラ 
• 解析→具体例を話します 
14年9月17日水曜日16
14年9月17日水曜日17
おすすめグラフ 
Chart recommendation 
• データからグラフを作る 
• どんなグラフを作るか選択肢が色々 
• コンピュータが支援 
http://developer.cybozu.co.jp/tech/?p=3874 
14年9月17日水曜日18
Recommend charts using statistics of data distribution 
14年9月17日水曜日19
おすすめグラフ 
Chart recommendation 
• プロトタイプにFlask、NumPy 
• 標準ライブラリのcollectionsも便利 
• 製品版はJavaScriptで実装されてます 
http://developer.cybozu.co.jp/tech/?p=3874 
14年9月17日水曜日20
What is groupware? 
14年9月17日水曜日21
What is groupware? 
Group + Software 
14年9月17日水曜日21
Augmenting Human Intellect 
ソフトウェアによって 
人間の能力を増強する 
エンゲルバート"Augmenting Human Intellect: A Conceptual Framework" (1962) 
14年9月17日水曜日22
Augmenting Group Intellect 
ソフトウェアによって 
集団の能力を増強する 
=グループウェア 
14年9月17日水曜日23
word2vec 
文章を与えると 
コンピュータが 
単語の意味を理解する 
14年9月17日水曜日24
人間 
コンピュータ 
14年9月17日水曜日25
人間+コンピュータ 
=増強された人間 
人間 
14年9月17日水曜日26
14年9月17日水曜日27
14年9月17日水曜日28
“やる気の出るアドバイス”で検索 
14年9月17日水曜日29
14 channels brain wave sensor 
14年9月17日水曜日30
Human→Machine touch panel 
Machine→Human 
liquid crystal 
(multi-touch) 
switch 
mouse 
keyboard 
camera 
scanner 
paper CRT 3D TV 
e-ink HMD 
14年9月17日水曜日31
Machine→Human 
paper CRT liquid crystal 3D TV 
e-ink HMD 
book e-book 
14年9月17日水曜日32
人間増強の四要素 
• 1: 人工物(Artifacts): 
コンピュータ、ソフトウェア、etc. 
• 2: 言語(Language): 
概念を表す専門用語、デザパタ、etc. 
• 3: 方法論(Methodology): 
問題解決のための手順、戦略、etc. 
• 4: 教育(Training): 1~3を使うスキルを身につける 
エンゲルバート"Augmenting Human Intellect: A Conceptual Framework" (1962) 
14年9月17日水曜日33
人間増強の四要素 
• 1: 人工物(Artifacts): 
コンピュータ、ソフトウェア、etc. 
• 2: 言語(Language): 
概念を表す専門用語、デザパタ、etc. 
• 3: 方法論(Methodology): 
問題解決のための手順、戦略、etc. 
• 4: 教育(Training): 1~3を使うスキルを身につける 
エンゲルバート"Augmenting Human Intellect: A Conceptual Framework" (1962) 
14年9月17日水曜日34
theme of this conference: 
Rediscover with Python 
14年9月17日水曜日35
How to discover? 
→Methodology to find unknown 
14年9月17日水曜日36
14年9月17日水曜日37
14年9月17日水曜日38
14年9月17日水曜日39
How to discover? 
→Change Perspective 
14年9月17日水曜日40
Change Perspective 
• どんな視点で物事を見ても、 
かならず見えていない部分がある 
• 見えてない部分を見るために視点を変える 
14年9月17日水曜日41
known ↔ unknown 
14年9月17日水曜日42
明らかに 
知っている 
明らかに 
知らない 
14年9月17日水曜日43
明らかに 
知っている 
明らかに 
知らない 
不明 
14年9月17日水曜日44
盲点(blind spot) 
• 「明らかに知ってる」領域と 
「明らかに知らない」領域の間に 
「知らないことを知らない」領域がある。 
• 見えていないのに、 
見えてないことに気づいていない。 
それが盲点。 
14年9月17日水曜日45
「どこまで知っているのか」 
を明らかにする 
明らかに 
知っている 
明らかに 
知らない 
14年9月17日水曜日46
明らかに 
知らない 
明らかに←盲点 blindspot 
知っている 
14年9月17日水曜日47
明らかに 
知らない 
明らかに←盲点 blindspot 
知っている 
14年9月17日水曜日48
How to find blind spot? 
14年9月17日水曜日49
Comparison 
History 
Experience 
14年9月17日水曜日50
Comparison 
History 
Experience 
+ 
Abstraction 
Communication 
14年9月17日水曜日51
How to find blind spot? 
Comparison 
History 
Experience 
Abstraction 
Communication 
14年9月17日水曜日52
Comparison 
• 例:複数言語を比較することで気づく 
「あれ?Rubyでは0は真なのか?! 
 Pythonでは偽だよな?!」 
「言語によって何が真か異なるのか?」 
「他の言語ではどうなってるんだろう?」 
「Pythonではどう定義されている?」 
object.__nonzero__(self) 
Called to implement truth value testing and the built-in operation bool(); 
14年9月17日水曜日53
History 
• 例:歴史を追うことで盲点に気づく 
「PythonってなんでNew-styleクラスとそうでな 
いのの2つあるの? 
→歴史を知る 
→型とクラスを融合する目的のために 
メソッドの名前解決の順序の決め方を 
変える必要があったことに気づく 
Unifying types and classes in Python 2.2 | Python.org 
https://www.python.org/download/releases/2.2.3/descrintro 
14年9月17日水曜日54
Experience 
• 実際に使うことで盲点に気づく 
「あれ?1/2は0.5になると思ったが 
 0になったぞ?」 
PEP 238 -- Changing the Division Operator 
http://legacy.python.org/dev/peps/pep-0238/ 
14年9月17日水曜日55
Abstraction 
• 具体例を抽象化したものに触れることで 
自分の経験を言語化する 
「ああ、なんとなく使っていたこの書き 
方って、Mediatorパターンって名前がつ 
いていたのか!」 
14年9月17日水曜日56
Communication 
• 経験の異なる他人と会話することで盲点 
に気づく 
「こういう問題に困ってんだよね」 
「それこうしたらいいんじゃない?」 
「なるほど、その発想はなかった!」 
「いや、GUIでは普通の発想だよ」 
「俺サーバ周りが専門だからなぁ」 
14年9月17日水曜日57
How to find blind spot? 
Comparison 
History 
Experience 
Abstraction 
Communication 
14年9月17日水曜日58
Communication 
14年9月17日水曜日59
Office Hour 
13:00-13:30 
Blog, Mail 
see http://nhiro.org/ 
14年9月17日水曜日60
Q&A 
↓質問を思い出すのにとても役に立ちました!ありがとう! 
PyCon JP 2014 Day 3 感想とノート #pyconjp | こえむの編集後記 
http://www.koemu.com/blog/2014/09/15/pycon-jp-2014-day3/ 
14年9月17日水曜日61
Q: 「盲点に気づくチャンス」となる 
情報を見ても認知的不協和を起こして 
「そんなはずはない」と思ってしまう 
人がいるのでは。組織のaugmentを 
考える上ではそういう人をどうすれば 
よいだろうか?どう啓蒙する? 
14年9月17日水曜日62
A: まさにその点に対して答え 
ようとしている「U理論」に 
ついて9/24から京都大学サ 
マーデザインスクールで解説 
する予定なのでその資料を… 
http://www.design.kyoto-u.ac.jp/sds2014/ja/theme01.html 
14年9月17日水曜日63
A: 言いたいことは2点ある。 
まず「他人をどう変えるか」 
というスタンスではうまくい 
かない。自分が変わる必要が 
ある。 
14年9月17日水曜日64
A: 次に「見えているのに見て 
いない」状態にハマることは 
自分も含めてよくあること、 
と気づくこと。 
14年9月17日水曜日65
A: 最初は小さなものでよいの 
で、その気付きから有益な結 
果が得られる「成功体験」を 
積むこと。これが自信につな 
がる。 
14年9月17日水曜日66
U曲線 
PDCAサイクルとU曲線の関係 
U曲線 
補足スライド 
C・オットー・シャーマー「U理論」 
  
状態 
行動 
14年9月17日水曜日67
U曲線 
PDCAサイクルとU曲線の関係 
U曲線 
補足スライド 
←見えているのに思い込みにとらわれて 
C・オットー・シャーマー「U理論」 
  
状態 
行動 
きちんと見てない状態 
14年9月17日水曜日68
U曲線 
PDCAサイクルとU曲線の関係 
U曲線 
補足スライド 
←見てはいるが、自分の視点からだけ。 
自己と他者の間に境界線を引いて 
「奴らは~しないから」と考えたりする。 
C・オットー・シャーマー「U理論」 
  
状態 
行動 
14年9月17日水曜日69
Q: モデリングをどうやっ 
てやるかも大事なのでは 
ないか? 
14年9月17日水曜日70
A: はい、大事です。 
14年9月17日水曜日71
この特集の 
3章がまるまる 
その内容です 
WEB上で読めます 
http://gihyo.jp/lifestyle/feature/01/engineer-studying 
14年9月17日水曜日72
A: 経験から仮説が作られる。 
「理解した」という気持ちも 
仮説。仮説は実験によって検 
証する必要がある。理解に基 
づいて行動し結果を確認する 
14年9月17日水曜日73
A: 行動した結果が予想と異 
なった場合はモデルを修正する 
必要がある。これを繰り返して 
いくことで「正しい可能性の高 
い」モデルを作り、それを組み 
合わせることでより大きなモデ 
ルを作る。これが一つの方法論 
14年9月17日水曜日74
A: もう一つの方法論とし 
て実験が容易でない人文 
科学では、KJ法やグラウ 
ンデッド・セオリーが使 
われる。 
14年9月17日水曜日75
A: まずインタビューなどで大 
量にデータを集め、それを自 
分の偏見で「これはノイズ 
だ」とフィルタリングするこ 
となく一覧できるようにする 
14年9月17日水曜日76
A: 人間の作業記憶は7つくら 
いしかないが、データを紙に 
書いて机の上に広げれば100 
とか200とかを見ることがで 
きる 
14年9月17日水曜日77
A: 100のデータを一覧できる 
状態を作った上で、机の上で 
動かすことでモデルを組み立 
てていく、これがKJ法 
(会場では言いそこねたが、既存の構造をトップダウ 
ンに当てはめるのではなく、データからボトムアップ 
で構造を組み立てていくのも重要なポイント) 
(ちなみに上記で紹介した拙著書籍・特集記事は 
KJ法でモデル化されている) 
14年9月17日水曜日78
Office Hourでの質問 
Q: 盲点に気づく5つの方法は 
並列ではなく、時間軸で前後 
関係があるのではないか? 
14年9月17日水曜日79
A: それは盲点だった!確かに 
抽象はいきなり最初から使う 
ことはできない。プログラミ 
ングの経験がない人がデザイ 
ンパターンの本を読んでも自 
分の経験と結びつかない。 
14年9月17日水曜日80
Q: テスタの間でテストのノウ 
ハウを共有したいがどうした 
らいいか 
(詳細な状況説明は省略) 
14年9月17日水曜日81
A: 言語化されていない知識を 
どうやって共有するかという 
問題だと思える。一つの方法 
論は「一緒に作業」だ。 
14年9月17日水曜日82
A: 一緒に作業することでノウ 
ハウを言語化しないまま共有 
することができる。更に「操 
作せずに指示する人と操作す 
る人」を分ければ指示するた 
めに知識の言語化が促される 
参考文献 “凡才の集団は孤高の天才に勝る” 
14年9月17日水曜日83
A: 言語化が行われて初めて、 
マニュアル化などができるよ 
うになる。言語化は結構難し 
いタスクなので、そのスキル 
を鍛えずにいきなり個々人に 
任せるとうまくいかない。 
14年9月17日水曜日84
言語化されていない知識 
  
このスパイラルを回すことで知識が創造される 『知識創造企業』p93 
  
補足スライド 
14年9月17日水曜日85
言語化されていない知識 
  
このスパイラルを回すことで知識が創造される 『知識創造企業』p93 
  
補足スライド 
↑ペアプロ・共同作業はここに相当する 
14年9月17日水曜日86
Q: 私は情報の言語化のための 
テンプレートを作っている。 
質問に答えていくと必要な情 
報が揃う。 
14年9月17日水曜日87
A: それは良いアプローチ。 
「言語化しろ」と言われてで 
きない人でも、具体的に質問 
をされると答えられることが 
よくある。適切な質問を投げ 
かけることは重要。 
14年9月17日水曜日88
A: そういう意味でテンプレー 
ト化にはメリットがある。し 
かし、テンプレートで表現で 
きない情報が捨てられてしま 
うデメリットに気をつける必 
要がある。新しい重要な情報 
は定型化されていない。 
14年9月17日水曜日89

PyConJP Keynote Speech (Japanese version)