SlideShare a Scribd company logo
1 of 16
Download to read offline
Secure Code for Python 
Interactive Programming 
PyCon JP 2014 OpenSpace 
2014/9/14 
@hagino3000
前提 
ここではデータ分析環境DB 
等の巨大なデータソースに直 
にアクセスできる共用 
IPython Notebookサーバー 
を想定しています。
Interactive Programming 
• Pros 
• Powerful, Fun, Quick 
• Cons 
• Some dangerous (Probability of breaking 
production environment)
IPython Notebook 
からの……
突然の死 
• 大量のデータをロードしてしまいスワップアウト 
• DB、ネットワークに負荷をかける 
• 重い処理を放置 
• CPUに負荷をかけてしまい監視にひっかかる 
• なにげなくファイルに保存したらDisk Full
回避したい 
• インフラの人におこられる 
• データ回収の遅延 
• データロスト & 再送処理の手間
運用と設計でなんとかしよう 
• インタラクティブ環境向けのショートカットメ 
ソッド(データロード) 
• 省メモリな実装 
• 人間の怠惰さ、ミスを想定した設計 
• 共用IPython Notebookサーバの運用
省メモリ 
• とにかくgeneratorを返す 
• DBフルスキャンする様なコードを実行していた 
としても、generatorが帰ってきた時点ではセー 
フ 
• 正しく扱えばよい
generatorのチェーン例 
def invoke(file_name, db_name):! 
db = MongoClient(‘localhost’)! 
db.events.insert(convert(parse(readline(file_name))))! 
! 
def readline(file_name):! 
with gzip.open(file_name) as input:! 
for line in input:! 
yield line! 
! 
def parse(lines):! 
for line in lines:! 
yield json.loads(line)! 
! 
def convert(rows):! 
for row in rows:! 
yield {…(略)…}
メモリ使用量のチェック 
$ pip install memory-profiler 
$ pip install psutil 
からの 
@profile! 
def readline(file_name):! 
with gzip.open(file_name) as input:! 
for line in input:! 
yield line 
指定したメソッドの行ごとに使用量が出せる
大量のオブジェクトの扱い 
• __slots__ 使っておく 
• 属性の少ないクラスを扱う場合は有効
人間は怠惰 
• とりあえずパラメータ無しで実行とかしがち 
• 絞り込み条件無しで実行すると全データフェッ 
チするような設計だと死ぬ 
• 例えば生ログを取ってくる様なメソッドの場合 
は期間を必須にする 
• 期間の最初だけ指定されたら??
人間は怠惰 
• docコメント書いておく 
• mymodule.load_data? でいつでも参照できる
Notebook Serverの運用 
• 1日一回再起動 
• CPU、メモリ使用量は不定期に暴れる 
• 起動ユーザーは権限小さめが良い 
• インフラの人には大丈夫だと言おう
Enjoy Interactive 
Programming

More Related Content

What's hot

Singularityで分散深層学習
Singularityで分散深層学習Singularityで分散深層学習
Singularityで分散深層学習Hitoshi Sato
 
これからのデータセンターが目指す技術(公開用)
これからのデータセンターが目指す技術(公開用) これからのデータセンターが目指す技術(公開用)
これからのデータセンターが目指す技術(公開用) Tadashi Sugita
 
Storage by Red Hat #rhcpday 2015
Storage by Red Hat #rhcpday 2015Storage by Red Hat #rhcpday 2015
Storage by Red Hat #rhcpday 2015Emma Haruka Iwao
 
Cloud storage services
Cloud storage servicesCloud storage services
Cloud storage servicesHiroki Kaneko
 

What's hot (6)

Singularityで分散深層学習
Singularityで分散深層学習Singularityで分散深層学習
Singularityで分散深層学習
 
Vacuumとzheap
VacuumとzheapVacuumとzheap
Vacuumとzheap
 
Vector
VectorVector
Vector
 
これからのデータセンターが目指す技術(公開用)
これからのデータセンターが目指す技術(公開用) これからのデータセンターが目指す技術(公開用)
これからのデータセンターが目指す技術(公開用)
 
Storage by Red Hat #rhcpday 2015
Storage by Red Hat #rhcpday 2015Storage by Red Hat #rhcpday 2015
Storage by Red Hat #rhcpday 2015
 
Cloud storage services
Cloud storage servicesCloud storage services
Cloud storage services
 

Viewers also liked

Google App Engine で初めるServerSide JavaScript
Google App Engine で初めるServerSide JavaScriptGoogle App Engine で初めるServerSide JavaScript
Google App Engine で初めるServerSide JavaScripthagino 3000
 
Introduction of Leap Motion
Introduction of Leap MotionIntroduction of Leap Motion
Introduction of Leap Motionhagino 3000
 
JavaScriptとSalesforceとTwitterマーケティングな話をした時の資料
JavaScriptとSalesforceとTwitterマーケティングな話をした時の資料JavaScriptとSalesforceとTwitterマーケティングな話をした時の資料
JavaScriptとSalesforceとTwitterマーケティングな話をした時の資料hagino 3000
 
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様hagino 3000
 
はじめてのChaos Proxy Viewer
はじめてのChaos Proxy ViewerはじめてのChaos Proxy Viewer
はじめてのChaos Proxy Viewerhagino 3000
 
PRML 6.1章 カーネル法と双対表現
PRML 6.1章 カーネル法と双対表現PRML 6.1章 カーネル法と双対表現
PRML 6.1章 カーネル法と双対表現hagino 3000
 
ノンタッチUI時代とフロントエンドエンジニア (Using emotiv)
ノンタッチUI時代とフロントエンドエンジニア (Using emotiv)ノンタッチUI時代とフロントエンドエンジニア (Using emotiv)
ノンタッチUI時代とフロントエンドエンジニア (Using emotiv)hagino 3000
 
PRML ベイズロジスティック回帰
PRML ベイズロジスティック回帰PRML ベイズロジスティック回帰
PRML ベイズロジスティック回帰hagino 3000
 
Cloud DatalabとBigQueryを使ったアドホックデータ解析
Cloud DatalabとBigQueryを使ったアドホックデータ解析Cloud DatalabとBigQueryを使ったアドホックデータ解析
Cloud DatalabとBigQueryを使ったアドホックデータ解析hagino 3000
 
異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知hagino 3000
 
スパース性に基づく機械学習 2章 データからの学習
スパース性に基づく機械学習 2章 データからの学習スパース性に基づく機械学習 2章 データからの学習
スパース性に基づく機械学習 2章 データからの学習hagino 3000
 
アドネットワークのデータ解析チームを支える技術
アドネットワークのデータ解析チームを支える技術アドネットワークのデータ解析チームを支える技術
アドネットワークのデータ解析チームを支える技術hagino 3000
 

Viewers also liked (14)

Google App Engine で初めるServerSide JavaScript
Google App Engine で初めるServerSide JavaScriptGoogle App Engine で初めるServerSide JavaScript
Google App Engine で初めるServerSide JavaScript
 
Introduction of Leap Motion
Introduction of Leap MotionIntroduction of Leap Motion
Introduction of Leap Motion
 
JavaScriptとSalesforceとTwitterマーケティングな話をした時の資料
JavaScriptとSalesforceとTwitterマーケティングな話をした時の資料JavaScriptとSalesforceとTwitterマーケティングな話をした時の資料
JavaScriptとSalesforceとTwitterマーケティングな話をした時の資料
 
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
 
逃亡の勧め
逃亡の勧め逃亡の勧め
逃亡の勧め
 
はじめてのChaos Proxy Viewer
はじめてのChaos Proxy ViewerはじめてのChaos Proxy Viewer
はじめてのChaos Proxy Viewer
 
iOS WebView App
iOS WebView AppiOS WebView App
iOS WebView App
 
PRML 6.1章 カーネル法と双対表現
PRML 6.1章 カーネル法と双対表現PRML 6.1章 カーネル法と双対表現
PRML 6.1章 カーネル法と双対表現
 
ノンタッチUI時代とフロントエンドエンジニア (Using emotiv)
ノンタッチUI時代とフロントエンドエンジニア (Using emotiv)ノンタッチUI時代とフロントエンドエンジニア (Using emotiv)
ノンタッチUI時代とフロントエンドエンジニア (Using emotiv)
 
PRML ベイズロジスティック回帰
PRML ベイズロジスティック回帰PRML ベイズロジスティック回帰
PRML ベイズロジスティック回帰
 
Cloud DatalabとBigQueryを使ったアドホックデータ解析
Cloud DatalabとBigQueryを使ったアドホックデータ解析Cloud DatalabとBigQueryを使ったアドホックデータ解析
Cloud DatalabとBigQueryを使ったアドホックデータ解析
 
異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知
 
スパース性に基づく機械学習 2章 データからの学習
スパース性に基づく機械学習 2章 データからの学習スパース性に基づく機械学習 2章 データからの学習
スパース性に基づく機械学習 2章 データからの学習
 
アドネットワークのデータ解析チームを支える技術
アドネットワークのデータ解析チームを支える技術アドネットワークのデータ解析チームを支える技術
アドネットワークのデータ解析チームを支える技術
 

Similar to Secure Code for Interactive Programming

[C14] 超高速データベースエンジンを用いたTPC-Hベンチマーク100TBクラス世界初登録への挑戦 by Shinji Fujiwara
[C14] 超高速データベースエンジンを用いたTPC-Hベンチマーク100TBクラス世界初登録への挑戦 by Shinji Fujiwara[C14] 超高速データベースエンジンを用いたTPC-Hベンチマーク100TBクラス世界初登録への挑戦 by Shinji Fujiwara
[C14] 超高速データベースエンジンを用いたTPC-Hベンチマーク100TBクラス世界初登録への挑戦 by Shinji FujiwaraInsight Technology, Inc.
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
ミニ四駆でPython on Windows Azure
ミニ四駆でPython on Windows Azureミニ四駆でPython on Windows Azure
ミニ四駆でPython on Windows AzureTakahiro Fujiwara
 
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保するDNA Data Bank of Japan center
 
たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.jsishiki-takai
 
Data Scientist Workbench - dots0729
Data Scientist Workbench - dots0729Data Scientist Workbench - dots0729
Data Scientist Workbench - dots0729s. kaijima
 
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoSoftware for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoShohei Hido
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングRyohei Kamiya
 
デスクトップの仮想化とフレキシブルワークスタイル
デスクトップの仮想化とフレキシブルワークスタイルデスクトップの仮想化とフレキシブルワークスタイル
デスクトップの仮想化とフレキシブルワークスタイルjunichi anno
 
仮想化環境の設計手法 〜プロのテクニック教えます〜
仮想化環境の設計手法 〜プロのテクニック教えます〜仮想化環境の設計手法 〜プロのテクニック教えます〜
仮想化環境の設計手法 〜プロのテクニック教えます〜VirtualTech Japan Inc.
 
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3infinite_loop
 
Open design computer project(boost)
Open design computer project(boost)Open design computer project(boost)
Open design computer project(boost)Ito Takahiro
 
乗り遅れるな!IBMが本気で取り組む新世代クラウドサービスを徹底解説
乗り遅れるな!IBMが本気で取り組む新世代クラウドサービスを徹底解説乗り遅れるな!IBMが本気で取り組む新世代クラウドサービスを徹底解説
乗り遅れるな!IBMが本気で取り組む新世代クラウドサービスを徹底解説Kimihiko Kitase
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet ServicesNaoto Gohko
 
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)Insight Technology, Inc.
 
DeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャHaruto Otake
 
Rancher/k8sを利用した運用改善の取り組み
Rancher/k8sを利用した運用改善の取り組みRancher/k8sを利用した運用改善の取り組み
Rancher/k8sを利用した運用改善の取り組みMichitaka Terada
 
[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向
[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向
[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向Naoki (Neo) SATO
 

Similar to Secure Code for Interactive Programming (20)

私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
[C14] 超高速データベースエンジンを用いたTPC-Hベンチマーク100TBクラス世界初登録への挑戦 by Shinji Fujiwara
[C14] 超高速データベースエンジンを用いたTPC-Hベンチマーク100TBクラス世界初登録への挑戦 by Shinji Fujiwara[C14] 超高速データベースエンジンを用いたTPC-Hベンチマーク100TBクラス世界初登録への挑戦 by Shinji Fujiwara
[C14] 超高速データベースエンジンを用いたTPC-Hベンチマーク100TBクラス世界初登録への挑戦 by Shinji Fujiwara
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
ミニ四駆でPython on Windows Azure
ミニ四駆でPython on Windows Azureミニ四駆でPython on Windows Azure
ミニ四駆でPython on Windows Azure
 
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する
 
たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.js
 
Data Scientist Workbench - dots0729
Data Scientist Workbench - dots0729Data Scientist Workbench - dots0729
Data Scientist Workbench - dots0729
 
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoSoftware for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティング
 
デスクトップの仮想化とフレキシブルワークスタイル
デスクトップの仮想化とフレキシブルワークスタイルデスクトップの仮想化とフレキシブルワークスタイル
デスクトップの仮想化とフレキシブルワークスタイル
 
仮想化環境の設計手法 〜プロのテクニック教えます〜
仮想化環境の設計手法 〜プロのテクニック教えます〜仮想化環境の設計手法 〜プロのテクニック教えます〜
仮想化環境の設計手法 〜プロのテクニック教えます〜
 
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
 
Open design computer project(boost)
Open design computer project(boost)Open design computer project(boost)
Open design computer project(boost)
 
乗り遅れるな!IBMが本気で取り組む新世代クラウドサービスを徹底解説
乗り遅れるな!IBMが本気で取り組む新世代クラウドサービスを徹底解説乗り遅れるな!IBMが本気で取り組む新世代クラウドサービスを徹底解説
乗り遅れるな!IBMが本気で取り組む新世代クラウドサービスを徹底解説
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services
 
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
 
DeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャ
 
Rancher/k8sを利用した運用改善の取り組み
Rancher/k8sを利用した運用改善の取り組みRancher/k8sを利用した運用改善の取り組み
Rancher/k8sを利用した運用改善の取り組み
 
[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向
[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向
[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向
 

More from hagino 3000

Where does my money go チーム発表
Where does my money go チーム発表Where does my money go チーム発表
Where does my money go チーム発表hagino 3000
 
今日からはじめるKinect Hack
今日からはじめるKinect Hack今日からはじめるKinect Hack
今日からはじめるKinect Hackhagino 3000
 
Introduction of Kinect Hacks
Introduction of Kinect HacksIntroduction of Kinect Hacks
Introduction of Kinect Hackshagino 3000
 
HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化hagino 3000
 

More from hagino 3000 (6)

Where does my money go チーム発表
Where does my money go チーム発表Where does my money go チーム発表
Where does my money go チーム発表
 
NUIとKinect
NUIとKinectNUIとKinect
NUIとKinect
 
今日からはじめるKinect Hack
今日からはじめるKinect Hack今日からはじめるKinect Hack
今日からはじめるKinect Hack
 
Introduction of Kinect Hacks
Introduction of Kinect HacksIntroduction of Kinect Hacks
Introduction of Kinect Hacks
 
HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化
 
Extjs + Gears
Extjs + GearsExtjs + Gears
Extjs + Gears
 

Secure Code for Interactive Programming