SlideShare a Scribd company logo
1 of 115
Download to read offline
"Continuous Publication" 
with Python: 
Another Approach 
This presentation will be in JAPANESE
英語必須と勘違いした orz
発表者自己紹介 
• 宮川大輔 (@amedama) 
• 株式会社 mokha 取締役 
• 「もか」 (もくは) 
• 前職: Google Inc. (U.S, Android部門)
Continuous Publication 
継続的出版
造語
「書籍」ビルドシステム 
を作ってみた
「書籍」ビルドシステム 
Griflet 
• PDF, epub, InDesign, … 
• Re:VIEWを採用 
• 同人誌~商業書籍の「ビルド」 
• 「書籍執筆」を支援
Re:VIEW 
• 書籍執筆に強い軽量マークアップ言語 
• https://github.com/kmuto/review 
• @kmuto, @takahashim, @kdmsnr, … 
• TeX, epub, HTML, InDesign, … 
• 参考図書: https://github.com/TechBooster/FirstStepReVIEW
Grifletのきっかけ 
• 同人誌『Effective Android』 
• C84 (2013年 夏コミ) 
• 著者22人, 184ページ 
• Re:VIEW + GitHub → すごい! 
• だが…… 
TechBooster代表 
@mhidaka
ビルド失敗に 
気づかない
ビルド失敗に気づかない 
• 執筆中はビルド結果に無頓着なことが多い 
• 「HTMLが作れてるのでコミット」 
→PDFのビルドが成功するとは限らない 
• Continuous Integration 環境が( ゚д゚)ホスィ…
自分で作った
(2) WebHook 
(1) commit 
(3) Build Req. 
(4) Build 
(6) Download 
(5) Notify 
Linux 
Re:VIEW
デモ
……のサブセット
割と手探り 
• Django, Celery初めて 
• 「virtualenvって何 (́・ω・`)」 
• 当初、1プロジェクトのみサポート
同人誌 → 商業書籍 
• 『Effective Android』(TechBooster) = 同人誌 
『Effective Android』(達人出版会) = 電子書籍 
『Effective Android』(インプレスジャパン) = 紙商業 
• 共著者 22人 → 33人 
• epub もサポート 
• Re:VIEW偉大 (>ヮ<)
次のお題 
• TechBooster @ C85 (2013年 冬コミ) 
• 4冊同時刊行 
• 合計1書籍 -> 合計5書籍
ビルドが 
たまに止まる orz
「たまに止まる」問題 
• たまに … 1週間に一回とか 
• 原因: Celery + GitPythonの組み合わせ 
• 根本原因は未解明 
• 迂回策: subprocess.Popen + git
Re:VIEWが暴走する
Re:VIEW暴走事件 
• Re:VIEW側のバグ (正規表現が無限ループ化) 
• Celeryのタイムアウトも効かず……
動かなくなったら 
すぐ教えて欲しい
Zabbix 
• OSSの監視ソフト
C85 も無事に終了
そこそこ評判が良い
クチコミヽ(=́▽`=)ノ
クチコミ 
• 「友人の友人」のプロジェクトも扱い始める
……えっ (゚Д゚)
知らない人の 
Re:VIEWプロジェクト
is 脅威
あるいは
Re:VIEW is 脆弱性
「Re:VIEWは脆弱性」問題 
• Re:VIEWではRubyコードで命令を拡張出来る 
• OSコマンドインジェクションそのものじゃね? 
• サンドボックスが( ゚д゚)ホスィ…
• Immutable Infrastructure 
• 「軽量VMでOSを囲って実行 -> 廃棄」 
• ぴったり(●́ω`●) 
• ……と油断していると
_人人人人人人_ 
> 突然の死 < 
‾Y^Y^Y^Y^Y^Y‾
Dockerは不安定? 
• あくまで過去形 = 今は比較的安定している 
• 実際、Dockerのバグには何度か出会った 
• 自分のミスという部分も多々あった 
• モニタリング大事
(2) WebHook 
(1) commit 
(3) Build Req. 
(4) Build 
(6) Download 
(5) Notify 
Linux 
Re:VIEW
(2) WebHook 
(1) commit 
(3) Build Req. 
Re:VIEW 
(4) Build 
(6) Download 
(5) Notify 
Linux
C86 (2014年 夏) 
• またもやTechBooster 
• 他サークルの同人誌も
粛々と開発
開発上の課題
「片手間」開発
「片手間」開発 
• 長いスパンで少量の実装をちまちま 
• 一人で「1ヶ月に2~3日。まとめて」
そして忘れる 
• 設計・実装・運用の詳細を、忘れる 
• どのような問題が発生していたかを、忘れる 
• ユーザフィードバックを、忘れる 
• 自分が何を達成したいのかまで、忘れる 
• しばしばここで作るのをやめてしまう
よくあるよね
諦めない(`・ω・́)
対策を考えてみる
対策 1
メモる
対策 1: メモる 
! 
• Redmineのチケットに、メモる 
• ソースコードへのコメントに、メモる
「古くてアホくさいメモ」 
忘れるよりマシ
見るのはハズカシィ (∩∀`*)
Redmineのチケット 
• 作りたい機能、設計上の課題、未解明な点を記録 
• 現在: 合計200チケット超 (未完了100超) 
• 不定期の見直しで「思い出す」
コードへのコメント 
• 「理由」「意図」「疑問」をなるべく残す 
• 含「よく分かってないんだけど何故かこうなる」 
• 「何をしているか」のコメントは避ける 
• 整合性がとれなくなると余計に混乱する
対策 2
ログる
対策 2: ログる 
• = ログに残す 
• 「ここ通ったら、あかーん」というログも 
• コメントの代わりにログにしてしまう 
• RotatingFileHandlerでサイズを抑える 
• 注: サービス規模が大きくなったらもちろん無理
それでも見失う 
• print() になってる 
• logging.debug() って書いてる
Loggerを活用する 
• print()を避ける 
• “logging”自体 
インポートしない 
• 関数の仮引数にlogger 
• http://qiita.com/amedama/items/ 
b856b2f30c2f38665701 
from logging import getLogger, DEBUG 
from logging import NullHandler 
local_logger = getLogger(__name__) 
handler = NullHandler() 
handler.setLevel(DEBUG) 
local_logger.setLevel(DEBUG) 
local_logger.addHandler(handler) 
! 
def some_func(…, logger=None): 
logger = logger or local_logger 
logger.error(u“some_func() なう”)
「開発ログ」と「運用ログ」 
• Logging Context が与えられない 
• 1つの関数で2つのloggerを管理したくはない
テスト……?
ユニットテスト 
• モックアウトが「無駄」になりやすい 
• 「外部ツールのリアルな挙動」が問題の発生源 
• Viewについて重点的に
回帰テスト/結合テスト 
• 外部の世界: Docker, Re:VIEW, …… 
• 片手間の最中に「変わってしまう」ことがある 
• 効率的にこの変化を捉える(́・ω・`)
Python処理系も外部に? 
• 例: Python 2 v.s. Python 3
Linux 
Re:VIEW 
Re:VIEW 
Re:VIEW 
Python 2.7 
Python 3.4 
Python 3.5 
(願望です)
今後について
今後のGriflet 
• 未だ「粛々と開発」 
• 「一般公開」出来る水準にしたい 
• 一部オープンソース化 
• https://github.com/dmiyakawa/pyrev 
• Re:VIEWのメタデータ解析 + Lintチェッカ
ありがとうございました 
この後オフィスアワーにいます
This page is 
intentionally left blank
……
まだまだ続くんじゃ 
(`・ω・́) 
発表で使わなかったスライドが延々続きます
「片手間」開発 
≒ 趣味
問題を愉しむ
運用環境の裏でテストしたい 
• 新しい原稿データでその場で「A/B テスト」 
• ここはあくまで今後の「希望」
Re:VIEW 
Linux
Re:VIEW 
Linux 
(WSGI)
Linux 
(WSGI) 
Re:VIEW
Linux 
Re:VIEW 
Re:VIEW 
Re:VIEW
Linux 
Re:VIEW 
Re:VIEW 
Re:VIEW 
Python 2.7 
Python 3.4 
Python 3.5
Linux 
Re:VIEW 
Re:VIEW 
Re:VIEW 
Python 2.7 
Python 3.4 
Python 3.5
あくまでアイディア
楽か?(́・ω・`)
バージョン管理の苦悩 
• 分離した部分でのセキュリティは自分で責任を持つ 
• 他人 (OSディストリビューション等) に 
どこまで頼って、どこから自分でやるのか? 
• 全環境を expose するわけではないので…… 
• ただ、考えておく必要はある
新しい何か 
≒ 新しい問題 
≒新しい発見 
• 「検証 ~= 実装」 
• 公開サービスではないので落ちてても切れる赤の 
他人がいない (今回助かるポイント) 
• 簡単な部分で敢えて一歩踏み出す 
• 経験値目当て 
• ただし、ヤバそうな点は忘れないようにメモする
ライブラリなのか 
それより下なのか 
• 多様な条件を切り替えられると気分が楽 
• CentOSに乗っける?問題ないだろ(`・ω・́) 
• ……systemdコワイ(́・ω・`) 
• OS固有の問題、Python環境の問題、ライブラリの 
問題、外部サービスの問題 
• 切り分けられるポイントで切り替える練習
実際、環境の一本化に 
やや難を感じている 
• 個人の事情もあるものの 
• 開発マシン: Debian 7 (wheezy) 
• 個人サーバ: Debian 7 (wheezy) 
• テスト環境: Ubuntu 12.04 LTS / Ubuntu 14.04 LTS 
• 「これも経験」と割り切る 
• (仕事の運用環境は一本化するのがベター) 
• BSDマダー
違うLinux 
細かいところでズレる 
! 
• Ubuntu 12.04 -> django 1.3 
• 使っていた reverse_lazy() がない 
• Pythonから上のレベルではせめて統一……
分離
virtualenv / venv 
• Python実行環境分離 
• 実行環境を(言語バージョン同じで)もう一つ作る 
• PyPiのパッケージも別管理 
• 最近 (3.3以降) なら(py)venv 
• 以降 venv = virtualenv or pyvenv 
• ……というか、どう呼ぶのがベストなの?
Django + venv の苦悩 
• activate忘れ (Apache, Celery含めて) 
• しかもある程度動作してしまうこともある…… 
• OS本体側にsudo pip全くしないのはどう? 
• あるいはmanage.pyの段階で強制?
Python環境も 
選びたくなる
Python環境も選びたい 
• virtualenvはPythonバージョン固定 
• make install すればいいのだが 
• 何かラフにでいいから管理したい
pyenv + venv 
• pyenv で任意のPython実行環境を(ユーザレベルで)用意 
• virtualenvのPython実行環境まるごと版みたいなの 
• https://github.com/yyuu/pyenv 
• rbenvのPython版なのでpyenv 
• 注意: pyenv ≠ pyvenv 
• venvを用いて、プロジェクト固有の環境をもう一つ作る 
• 3.系のpyvenvでは--copyを付けた方がベター
pyenv 実用例 
• Debian 7 のPython 2.7.3にマイナーなバグが…… 
• PyPiへのWindowsバイナリがアップ出来ない? 
• pyenvで2.7.6を入れることで回避出来た様子 
• 言語環境の軽いA/Bテストに使える
3種類のPython環境 
• システムレベル (OSパッケージ管理) 
• 保守的、OSに付属する環境が使う 
• ユーザレベル (pyenv) 
• 複数のPython環境をユーザが切り替える 
• OS付属のマイナーバージョンに不満がある場合にも便利 
• プロジェクトレベル (pyenv + venv) 
• プロジェクト毎にPython (+ PyPi) 環境を独立して持つ
mod_wsgiの苦悩 
• venvはApache + mod_wsgi のバージョンを 
強制できるわけではない 
• mod_wsgiのPythonバージョンはOS毎に異なる 
• 特に2と3の両立は不可 
• 他のWSGI依存のプロジェクトに影響する 
• 安易に変更はできない
WSGIを境界に
今試していること 
• pyenv + venv + Supervisor + tornado + 
Apache mod_proxy 
• どんどん複雑化していておじさん悲しいな
Supervisor 
• daemon管理のためのdaemon 
• Celeryを複数のDjangoプロジェクトで使いたいなら必須 
• 後述するtornadoの管理にも使う 
• OSによっては標準のバージョンが超古くアレなことが? 
• Debian 7 -> 2010年の頃のもの 
• 必要なら sid (unstable) からソースビルド
tornado 
• スタンドアローンWeb(WSGI)サーバ 
• http://www.tornadoweb.org/en/stable/ 
• Apacheのmod_wsgiを迂回するために使う。 
• Django 1.7 + tornadoでの注意 
• django.setup() 忘れるなや 
• 古い「tornado + Djangoを試してみた」系の記事内容だけだとハマる 
• http://qiita.com/amedama/items/a8f511bd75a14aac0277 
• 「異なるバージョンのPython(wsgi)アプリを一つの開発環境上で動かす」
素朴な疑問 
Supervisor v.s. systemd 
• 全く分からん(́・ω・`)
気軽に試せる環境が嬉しい 
• 「Python 3.X + Django 1.Y」をさっくり用意 
• /opt 下に一度に飼える 
• http://qiita.com/amedama/items/a8f511bd75a14aac0277 
• http://qiita.com/amedama/items/79994598d9f4daa69d13
楽しい!!! 
✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
ふたたび 
ありがとうございました
想定問答集
なぜmd/rst/etc.じゃない? 
• 極端な話、非常に抽象的なXMLを定義すれば 
なんでも書ける……はず。 
• それをしたくない適切な「軽量マークアップ」は何か 
• Re:VIEWは複数種類のアウトプット向け 
• 新しい文法的に拡張をし易い 
• 文法定義毎に固有の命令を埋め込みやすい 
• ただし「HTML出たけどPDFとInDesignが死んでる」が起こる 
• 日本の書籍事情に関与している方々が主導している 
• 参考: https://github.com/TechBooster/FirstStepReVIEW
Sphinx? 
• あ、ほら、最初良く知らなかったし(́・ω・`)
それ使ってみたい 
• Ask @amedama (Facebook dmiyakawa)
☆(ゝω・)vキャピ

More Related Content

What's hot

密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境Fumihito Yokoyama
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングRansui Iso
 
tse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティtse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティAtsuo Ishimoto
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12Takanori Suzuki
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎真哉 杉野
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版Katsuhiro Morishita
 
Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版Katsuhiro Morishita
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由Ransui Iso
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPythonHironori Sekine
 
Python3 プログラミング勉強会
Python3 プログラミング勉強会Python3 プログラミング勉強会
Python3 プログラミング勉強会Tetsuya Morimoto
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCYoshifumi Kawai
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Reportgree_tech
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル敦志 金谷
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発shoma h
 
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016Atsushi Odagiri
 
3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術Kei IWASAKI
 
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015SaitoTsutomu
 

What's hot (20)

密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
tse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティtse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティ
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
 
Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版
 
第1回python勉強会
第1回python勉強会第1回python勉強会
第1回python勉強会
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPython
 
Python3 プログラミング勉強会
Python3 プログラミング勉強会Python3 プログラミング勉強会
Python3 プログラミング勉強会
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
 
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016
 
3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術
 
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
 
Pythonでゲーム作る
Pythonでゲーム作るPythonでゲーム作る
Pythonでゲーム作る
 

Viewers also liked

Micro Python で組み込み Python
Micro Python で組み込み PythonMicro Python で組み込み Python
Micro Python で組み込み PythonHirotaka Kawata
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone teradaManabu Terada
 
PyConJP Keynote Speech (Japanese version)
PyConJP Keynote Speech (Japanese version)PyConJP Keynote Speech (Japanese version)
PyConJP Keynote Speech (Japanese version)nishio
 
Effective Numerical Computation in NumPy and SciPy
Effective Numerical Computation in NumPy and SciPyEffective Numerical Computation in NumPy and SciPy
Effective Numerical Computation in NumPy and SciPyKimikazu Kato
 
Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014Yoshiki Shibukawa
 
Directory Write Leases in MagFS
Directory Write Leases in MagFSDirectory Write Leases in MagFS
Directory Write Leases in MagFSMaginatics
 
FlyData Autoload: 事例集
FlyData Autoload: 事例集FlyData Autoload: 事例集
FlyData Autoload: 事例集FlyData Inc.
 
2014-01-28 Operation in the future
2014-01-28 Operation in the future2014-01-28 Operation in the future
2014-01-28 Operation in the futureOperation Lab, LLC.
 
Getting Started with Performance Co-Pilot
Getting Started with Performance Co-PilotGetting Started with Performance Co-Pilot
Getting Started with Performance Co-PilotPaul V. Novarese
 
第29回WebSig会議「効率化だけではない!中小~中堅ECサイトの成果を上げる「メディア編集力」とは」
第29回WebSig会議「効率化だけではない!中小~中堅ECサイトの成果を上げる「メディア編集力」とは」第29回WebSig会議「効率化だけではない!中小~中堅ECサイトの成果を上げる「メディア編集力」とは」
第29回WebSig会議「効率化だけではない!中小~中堅ECサイトの成果を上げる「メディア編集力」とは」WebSig24/7
 
SI業界の営業の役割と存在意義を一緒に考えよう
SI業界の営業の役割と存在意義を一緒に考えようSI業界の営業の役割と存在意義を一緒に考えよう
SI業界の営業の役割と存在意義を一緒に考えようManabu Terada
 
Site Search Analytics in a Nutshell
Site Search Analytics in a NutshellSite Search Analytics in a Nutshell
Site Search Analytics in a NutshellLouis Rosenfeld
 
Nttドコモ事例から見るモバイル&クラウド時代のサービス開発についてr4(public)
Nttドコモ事例から見るモバイル&クラウド時代のサービス開発についてr4(public)Nttドコモ事例から見るモバイル&クラウド時代のサービス開発についてr4(public)
Nttドコモ事例から見るモバイル&クラウド時代のサービス開発についてr4(public)Osaka University
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performancehirokiky
 
Deep Learning for Image Recognition in Python
Deep Learning for Image Recognition in PythonDeep Learning for Image Recognition in Python
Deep Learning for Image Recognition in PythonHideki
 
Riverbed Software Defined IT Survey
Riverbed Software Defined IT SurveyRiverbed Software Defined IT Survey
Riverbed Software Defined IT SurveyRiverbed Technology
 

Viewers also liked (20)

Micro Python で組み込み Python
Micro Python で組み込み PythonMicro Python で組み込み Python
Micro Python で組み込み Python
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone terada
 
PyConJP Keynote Speech (Japanese version)
PyConJP Keynote Speech (Japanese version)PyConJP Keynote Speech (Japanese version)
PyConJP Keynote Speech (Japanese version)
 
Pyramid入門
Pyramid入門Pyramid入門
Pyramid入門
 
Effective Numerical Computation in NumPy and SciPy
Effective Numerical Computation in NumPy and SciPyEffective Numerical Computation in NumPy and SciPy
Effective Numerical Computation in NumPy and SciPy
 
Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014
 
Cracking PRNG
Cracking PRNGCracking PRNG
Cracking PRNG
 
Directory Write Leases in MagFS
Directory Write Leases in MagFSDirectory Write Leases in MagFS
Directory Write Leases in MagFS
 
FlyData Autoload: 事例集
FlyData Autoload: 事例集FlyData Autoload: 事例集
FlyData Autoload: 事例集
 
2014-01-28 Operation in the future
2014-01-28 Operation in the future2014-01-28 Operation in the future
2014-01-28 Operation in the future
 
PCP
PCPPCP
PCP
 
Getting Started with Performance Co-Pilot
Getting Started with Performance Co-PilotGetting Started with Performance Co-Pilot
Getting Started with Performance Co-Pilot
 
第29回WebSig会議「効率化だけではない!中小~中堅ECサイトの成果を上げる「メディア編集力」とは」
第29回WebSig会議「効率化だけではない!中小~中堅ECサイトの成果を上げる「メディア編集力」とは」第29回WebSig会議「効率化だけではない!中小~中堅ECサイトの成果を上げる「メディア編集力」とは」
第29回WebSig会議「効率化だけではない!中小~中堅ECサイトの成果を上げる「メディア編集力」とは」
 
SI業界の営業の役割と存在意義を一緒に考えよう
SI業界の営業の役割と存在意義を一緒に考えようSI業界の営業の役割と存在意義を一緒に考えよう
SI業界の営業の役割と存在意義を一緒に考えよう
 
Site Search Analytics in a Nutshell
Site Search Analytics in a NutshellSite Search Analytics in a Nutshell
Site Search Analytics in a Nutshell
 
Nttドコモ事例から見るモバイル&クラウド時代のサービス開発についてr4(public)
Nttドコモ事例から見るモバイル&クラウド時代のサービス開発についてr4(public)Nttドコモ事例から見るモバイル&クラウド時代のサービス開発についてr4(public)
Nttドコモ事例から見るモバイル&クラウド時代のサービス開発についてr4(public)
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performance
 
Deep Learning for Image Recognition in Python
Deep Learning for Image Recognition in PythonDeep Learning for Image Recognition in Python
Deep Learning for Image Recognition in Python
 
Riverbed Software Defined IT Survey
Riverbed Software Defined IT SurveyRiverbed Software Defined IT Survey
Riverbed Software Defined IT Survey
 
Docomo Cloud Package
Docomo Cloud PackageDocomo Cloud Package
Docomo Cloud Package
 

Similar to "Continuous Publication" with Python: Another Approach

Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Shota Umeda
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来Kazuto Kusama
 
Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較Kazuto Kusama
 
20120927 findjob4 dev_ops
20120927 findjob4 dev_ops20120927 findjob4 dev_ops
20120927 findjob4 dev_opsume3_
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみようRyo Adachi
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
 
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGJun Okazaki
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!ymmt
 
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編kimulla
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていくRyo Mitoma
 
ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発 ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発 schoowebcampus
 
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)Masahito Zembutsu
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべKaoru NAKAMURA
 
メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012cfm_art
 
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねGitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねNaoto TAKAHASHI
 
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望Tetsuo Yamabe
 
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45civic Sasaki
 

Similar to "Continuous Publication" with Python: Another Approach (20)

Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
 
Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較
 
20120927 findjob4 dev_ops
20120927 findjob4 dev_ops20120927 findjob4 dev_ops
20120927 findjob4 dev_ops
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみよう
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
 
恋するJenkins
恋するJenkins恋するJenkins
恋するJenkins
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発 ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発
 
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべ
 
メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012
 
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねGitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
 
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
 
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
 

"Continuous Publication" with Python: Another Approach