おまえらこのライブラリ使ってないの? m9 (2013-07)

Toru Furukawa
Toru FurukawaEngineer in Business at Twitter
おまえらこのライブラリ使ってないの?	
  m9	
ふるかわとおる	
  
@torufurukawa	
  
お前だれよ?	
•  ふるかわとおる	
  
•  @torufurukawa	
  
•  #bucho	
  
•  株式会社バスキュール	
  
– TV連動サービス作ってますした	
  
アンケート結果より...	
•  仮想環境	
  
•  シェル拡張	
  
•  コーディングスタイル	
  
•  テスト	
  
•  追加は	
  #pyfes	
  #m9	
  で、ツイートしてください。	
  
h8ps://twi8er.com/search?q=%23pyfes%20AND%20%23m9&src=typd	
  
仮想環境でインストールし放題	
•  複数のプロジェクト	
  
•  ライブラリの競合を避けたい
virtualenv	
$	
  virtualenv	
  .	
  
$	
  ls	
  
bin	
  	
  	
  	
  	
  include	
  lib	
  
$	
  source	
  bin/activate	
  
インストールし放題!
venv	
  (3.x)	
$	
  python3.3	
  -­‐m	
  venv	
  .	
  
$	
  source	
  bin/activate	
  
インストールし放題!
virtualenvwrapper	
$	
  mkvirtualenv	
  myenv	
  
$	
  workon	
  myenv	
  
インストールし放題!
対話シェル拡張	
•  対話シェルだけでは...	
  
•  Python	
  の対話シェルでもっといろいろやる
ipython	
$	
  ipython	
  
Python	
  2.7	
  (r27:82500,	
  Nov	
  	
  7	
  2010,	
  14:17:28)	
  	
  
Type	
  "copyright",	
  "credits"	
  or	
  "license"	
  for	
  more	
  informaXon.	
  
	
  
IPython	
  0.13.2	
  -­‐-­‐	
  An	
  enhanced	
  InteracXve	
  Python.	
  
?	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐>	
  IntroducXon	
  and	
  overview	
  of	
  IPython's	
  features.	
  
%quickref	
  -­‐>	
  Quick	
  reference.	
  
help	
  	
  	
  	
  	
  	
  -­‐>	
  Python's	
  own	
  help	
  system.	
  
object?	
  	
  	
  -­‐>	
  Details	
  about	
  'object',	
  use	
  'object??'	
  for	
  extra	
  
details.	
  
	
  
In	
  [1]:	
  
In	
  [1]:	
  import	
  random	
  
	
  
In	
  [2]:	
  random.choice?	
  
Type:	
  	
  	
  	
  	
  	
  	
  instancemethod	
  
String	
  Form:<bound	
  method	
  Random.choice	
  of	
  
<random.Random	
  object	
  at	
  0x10183f820>>	
  
File:	
  	
  	
  	
  	
  	
  	
  /usr/local/Cellar/python/2.7/
lib/python2.7/random.py	
  
Definition:	
  random.choice(self,	
  seq)	
  
Docstring:	
  	
  Choose	
  a	
  random	
  element	
  from	
  a	
  
non-­‐empty	
  sequence.
In	
  [3]:	
  random.choice??	
  
Type:	
  	
  	
  	
  	
  	
  	
  instancemethod	
  
String	
  Form:<bound	
  method	
  Random.choice	
  of	
  
<random.Random	
  object	
  at	
  0x10183f820>>	
  
File:	
  	
  	
  	
  	
  	
  	
  /usr/local/Cellar/python/2.7/
lib/python2.7/random.py	
  
Definition:	
  random.choice(self,	
  seq)	
  
Source:	
  
	
  	
  	
  	
  def	
  choice(self,	
  seq):	
  
	
  	
  	
  	
  	
  	
  	
  	
  """Choose	
  a	
  random	
  element	
  from	
  a	
  
non-­‐empty	
  sequence."""	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  seq[int(self.random()	
  *	
  
len(seq))]	
  	
  #	
  raises...	
  
ls	
  とか	
  cd	
  とか	
In	
  [4]:	
  ls	
  
bin/ 	
   	
  lib/ 	
   	
  share/	
  
include/	
  man/	
   	
  src/	
  
	
  
In	
  [5]:	
  cd	
  src	
  
/Users/torufurukawa/works/pyfes201307/src
コマンド実行	
In	
  [6]:	
  !ps	
  	
  
	
  	
  PID	
  TTY	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  TIME	
  CMD	
  
	
  2739	
  8ys000	
  	
  	
  	
  0:00.84	
  -­‐zsh	
  
	
  6059	
  8ys000	
  	
  	
  	
  0:01.13	
  /Users/torufurukawa/
works/pyfes201307/bin/python2.7	
  /Us....	
  
In	
  [7]:	
  !redis-­‐server	
  
[6080]	
  27	
  Jul	
  12:59:29	
  #	
  Warning:	
  no	
  config	
  file	
  
specified,	
  using	
  the	
  default	
  config.	
  In	
  order	
  to	
  
specify	
  a	
  config	
  file	
  use	
  'redis-­‐server	
  /path/to/
redis.conf'	
  
[6080]	
  27	
  Jul	
  12:59:29	
  *	
  Server	
  started,	
  Redis	
  
version	
  2.4.10	
  
[6080]	
  27	
  Jul	
  12:59:29	
  *	
  The	
  server	
  is	
  now	
  ready	
  
to	
  accept	
  connecXons	
  on	
  port	
  6379	
  
bpython	
誰か書いて
コーディングスタイル	
•  汚いコードを見つけてくれる	
  
•  自分でチェックしなくていい!
from	
  urllib	
  import	
  urlopen	
  	
  #	
  使ってない	
  
def	
  add(a,	
  b	
  ):	
  	
  #	
  カッコのまわりに不要スペース	
  
	
  	
  	
  	
  addressess	
  =	
  None	
  	
  #	
  スペルミス	
  
	
  	
  	
  	
  return	
  a	
  +	
  b	
  
pep8	
$	
  pep8	
  spam.py	
  
spam.py:2:1:	
  E302	
  expected	
  2	
  blank	
  lines,	
  found	
  0	
  
spam.py:2:13:	
  E202	
  whitespace	
  before	
  ')'	
  
pyflakes	
$	
  pyflakes	
  spam.py	
  
spam.py:1:	
  'urlopen'	
  imported	
  but	
  unused	
  
spam.py:3:	
  local	
  variable	
  'addressess'	
  is	
  assigned	
  
to	
  but	
  never	
  used
flake8	
$	
  flake8	
  spam.py	
  
spam.py:1:1:	
  F401	
  'urlopen'	
  imported	
  but	
  
unused	
  
spam.py:2:1:	
  E302	
  expected	
  2	
  blank	
  lines,	
  found	
  
0	
  
spam.py:2:13:	
  E202	
  whitespace	
  before	
  ')'	
  
spam.py:3:1:	
  F841	
  local	
  variable	
  'addressess'	
  is	
  
assigned	
  to	
  but	
  never	
  used
misspellings	
$	
  misspellings	
  spam.py	
  
spam.py:3:	
  addressess	
  -­‐>	
  "addresses"
HTTP	
  リクエスト	
•  urllib	
  だけだとちょっと...	
  
•  リクエストを簡単に書きたい	
  
•  レスポンスを簡単に取得したい
requests	
>>>	
  import	
  requests	
  
>>>	
  r	
  =	
  requests.get('h8p://wozozo.jp/')	
  
>>>	
  r.status_code	
  
200	
  
>>>	
  r.content	
  
'n<!DOCTYPE	
  html>n<!-­‐-­‐[if	
  IEMobile	
  7	
  ]><html	
  
class="no-­‐js	
  iem7"><![endif]-­‐-­‐>n<!-­‐-­‐[if	
  lt	
  IE	
  
9]><html	
  class="no-­‐js	
  lte-­‐ie8"><![endif]-­‐-­‐>n<!-­‐-­‐[if	
  
(gt	
  IE	
  8)|(gt	
  IEMobile	
  7)|!(IEMobile)|!(IE)]><!-­‐-­‐
><html	
  class="no-­‐js"	
  lang="en"><!-­‐-­‐<![endif]
>>>	
  r.json()	
  	
  #	
  辞書を返す	
  
{'spam':	
  'ham',	
  'foo':	
  [1,2,3]}	
  
	
  
requests.post(	
  
	
  'h8p://wozozo.jp/',	
  
	
  	
  	
  	
  	
  data={'name':	
  'xaxtsuxo'},	
  	
  #	
  パラメータ	
  
	
  	
  	
  	
  	
  auth=('user',	
  'pass')	
  	
  #	
  Basic	
  Auth	
  
)
テスト	
•  テストを手早く書きたい	
  
•  失敗したテスト結果は分かりやすくならん?
py.test	
•  テストランナー	
  +	
  ディスカバラー	
  
•  エラーをきれいに見せてくれる	
  
•  確認しやすい
import	
  uni8est	
  
	
  
class	
  MyTest(uni8est.TestCase):	
  
	
  	
  	
  	
  def	
  test(self):	
  
	
  	
  	
  	
  	
  	
  	
  	
  self.assertEqual(True,	
  True)	
  
	
  
def	
  test2():	
  
	
  	
  	
  	
  x	
  =	
  {'foo':	
  'bar',	
  'hoge':	
  'fuga'}	
  
	
  	
  	
  	
  y	
  =	
  {'foo':	
  'bar',	
  'hoge':	
  'wozozo'}	
  
	
  	
  	
  	
  assert	
  x	
  ==	
  y	
  
$	
  py.test	
  mytest.py	
  
=============================	
  test	
  session	
  
starts	
  ==============================	
  
pla{orm	
  darwin	
  -­‐-­‐	
  Python	
  2.7.0	
  -­‐-­‐	
  pytest-­‐2.3.5	
  
collected	
  3	
  items	
  	
  
	
  
mytest.py	
  .F	
  
...	
  
...	
  
	
  
	
  	
  	
  	
  def	
  test2():	
  
	
  	
  	
  	
  	
  	
  	
  	
  x	
  =	
  {'foo':	
  'bar',	
  'hoge':	
  'fuga'}	
  
	
  	
  	
  	
  	
  	
  	
  	
  y	
  =	
  {'foo':	
  'bar',	
  'hoge':	
  'wozozo'}	
  
>	
  	
  	
  	
  	
  	
  	
  assert	
  x	
  ==	
  y	
  
E	
  	
  	
  	
  	
  	
  	
  assert	
  {'foo':	
  'bar',	
  'hoge':	
  'fuga'}	
  ==	
  {'foo':	
  'bar',...ge':	
  'wozozo'}	
  
E	
  	
  	
  	
  	
  	
  	
  	
  	
  Hiding	
  1	
  idenXcal	
  items,	
  use	
  -­‐v	
  to	
  show	
  
E	
  	
  	
  	
  	
  	
  	
  	
  	
  Differing	
  items:	
  
E	
  	
  	
  	
  	
  	
  	
  	
  	
  {'hoge':	
  'fuga'}	
  !=	
  {'hoge':	
  'wozozo'}	
  
	
  
watchdog	
•  ファイル変更を監視して、コマンド実行	
•  継続的テスト	
  
watchdog	
$	
  watchmedo	
  	
  
	
  	
  	
  	
  shell-­‐command	
  	
  
	
  	
  	
  	
  -­‐-­‐pa8erns="*.py"	
  	
  
	
  	
  	
  	
  -­‐-­‐command="py.test	
  	
  
	
  	
  	
  	
  mytest.py"	
  
1 of 32

Recommended

Ansible 2.0 のサマライズとこれから by
Ansible 2.0 のサマライズとこれからAnsible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれからTakeshi Kuramochi
6.2K views40 slides
Ansible 入門 #01 (初心者向け) by
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Taro Hirose
6.2K views34 slides
Ansible 2.0を使って組む kubernetesクラスタ vol.1 by
Ansible 2.0を使って組む kubernetesクラスタ vol.1Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1Hidetoshi Hirokawa
11.7K views61 slides
Haikara by
HaikaraHaikara
Haikarajewel12
694 views38 slides
Ansible入門...? by
Ansible入門...?Ansible入門...?
Ansible入門...?shirou wakayama
9.5K views43 slides
Ansible ではじめるインフラのコード化入門 by
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Sho A
9.2K views46 slides

More Related Content

What's hot

Ansible入門 by
Ansible入門Ansible入門
Ansible入門Daiki Hayakawa
936 views16 slides
認証機能で学ぶ Laravel 5 アプリケーション by
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーションMasashi Shinbara
17.9K views39 slides
Fabric Essentials by
Fabric EssentialsFabric Essentials
Fabric EssentialsYoshinari Takaoka
7.2K views44 slides
Vagrant環境のAnsibleを速くしたい by
Vagrant環境のAnsibleを速くしたいVagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたいKazuhiro Oinuma
5.3K views17 slides
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec by
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpecマニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpecYukihiko SAWANOBORI
4.8K views147 slides
Ansible ではじめるサーバ作業の自動化 by
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Masashi Shinbara
32.8K views50 slides

What's hot(20)

認証機能で学ぶ Laravel 5 アプリケーション by Masashi Shinbara
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション
Masashi Shinbara17.9K views
Vagrant環境のAnsibleを速くしたい by Kazuhiro Oinuma
Vagrant環境のAnsibleを速くしたいVagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたい
Kazuhiro Oinuma5.3K views
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec by Yukihiko SAWANOBORI
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpecマニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
Yukihiko SAWANOBORI4.8K views
Ansible ではじめるサーバ作業の自動化 by Masashi Shinbara
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
Masashi Shinbara32.8K views
Fabricでサーバー管理をDRYにしよう by max747
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
max74710.7K views
Pythonユーザのための構成管理入門 #pyconapac by Takeshi Komiya
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
Takeshi Komiya10.1K views
Itamae-Serverspec入門 by 辰徳 斎藤
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門
辰徳 斎藤3.5K views
serverspecを使用したサーバ設定テストの実例 by Koichi Shimozono
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例
Koichi Shimozono1.8K views
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug by Takeshi Komiya
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Takeshi Komiya11.8K views
2日間Fabricを触った俺が
 色々解説してみる by airtoxin Ishii
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
airtoxin Ishii4.4K views
明日から始める Chef 入門 #bpstudy by Takeshi Komiya
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
Takeshi Komiya8.8K views
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- by Daisuke Ikeda
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Daisuke Ikeda3.3K views
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016 by Kohei Hoshi
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
Kohei Hoshi921 views
Cakephp tokyo5 by ichikaway
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
ichikaway1.9K views

Similar to おまえらこのライブラリ使ってないの? m9 (2013-07)

「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12 by
「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
3K views96 slides
How to run P4 BMv2 by
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2Kentaro Ebisawa
9K views22 slides
Node予備校 vol.1 名古屋 by
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Mori Shingo
2.9K views46 slides
CPANの依存モジュールをもう少し正しく検出したい by
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいcharsbar
3.3K views90 slides
EC-CUBE + PHPUnit で 実践テスト駆動開発 by
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発Kentaro Ohkouchi
4.5K views47 slides
ひのきのぼうだけで全クリ目指す by
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すAromaBlack
1.5K views35 slides

Similar to おまえらこのライブラリ使ってないの? m9 (2013-07)(20)

「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12 by Takanori Suzuki
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Takanori Suzuki3K views
Node予備校 vol.1 名古屋 by Mori Shingo
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
Mori Shingo2.9K views
CPANの依存モジュールをもう少し正しく検出したい by charsbar
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
charsbar3.3K views
EC-CUBE + PHPUnit で 実践テスト駆動開発 by Kentaro Ohkouchi
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
Kentaro Ohkouchi4.5K views
ひのきのぼうだけで全クリ目指す by AromaBlack
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
AromaBlack1.5K views
「Python言語」はじめの一歩 / First step of Python by Takanori Suzuki
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki65.9K views
Pythonによる並列プログラミング -GPGPUも- by Yusaku Watanabe
Pythonによる並列プログラミング   -GPGPUも- Pythonによる並列プログラミング   -GPGPUも-
Pythonによる並列プログラミング -GPGPUも-
Yusaku Watanabe5K views
ホームディレクトリに埋もれた便利なコードをさがせ! by Yohei Fushii
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii27.6K views
Getting Started with Testing using PHPUnit by Atsuhiro Kubo
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
Atsuhiro Kubo1.2K views
関西Php勉強会のlimeの話 by Hisateru Tanaka
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
Hisateru Tanaka1.4K views
恋に落ちるデプロイツール by totty jp
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
totty jp5.1K views
ネットワークエンジニアのための Puppet / Chef by npsg
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
npsg8.1K views
WSL2+docker+JupyterとVS Codeリモート環境の構築 by Saito5656
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
Saito5656 548 views
成長を加速する minne の技術基盤戦略 by Hiroshi SHIBATA
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA9.4K views
Openstack SPICE console (icehouse) verification by yukihiro kawada
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
yukihiro kawada3.9K views

More from Toru Furukawa

Twitter 広告と API を組み合わせたインタラクティブなキャンペーン by
 Twitter 広告と API を組み合わせたインタラクティブなキャンペーン Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Twitter 広告と API を組み合わせたインタラクティブなキャンペーンToru Furukawa
1.1K views21 slides
My client wanted their apps synced, and I made it with Go by
My client wanted their apps synced, and I made it with GoMy client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with GoToru Furukawa
2.7K views24 slides
Introduction to Python 3.4 as of beta 1 by
Introduction to Python 3.4 as of beta 1Introduction to Python 3.4 as of beta 1
Introduction to Python 3.4 as of beta 1Toru Furukawa
2.2K views45 slides
Test Failed, Then... by
Test Failed, Then...Test Failed, Then...
Test Failed, Then...Toru Furukawa
2.7K views36 slides
Mock and patch by
Mock and patchMock and patch
Mock and patchToru Furukawa
2.5K views26 slides
Trying Continuous Delivery - pyconjp 2012 by
Trying Continuous Delivery - pyconjp 2012Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012Toru Furukawa
1.5K views35 slides

More from Toru Furukawa(11)

Twitter 広告と API を組み合わせたインタラクティブなキャンペーン by Toru Furukawa
 Twitter 広告と API を組み合わせたインタラクティブなキャンペーン Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Toru Furukawa1.1K views
My client wanted their apps synced, and I made it with Go by Toru Furukawa
My client wanted their apps synced, and I made it with GoMy client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with Go
Toru Furukawa2.7K views
Introduction to Python 3.4 as of beta 1 by Toru Furukawa
Introduction to Python 3.4 as of beta 1Introduction to Python 3.4 as of beta 1
Introduction to Python 3.4 as of beta 1
Toru Furukawa2.2K views
Trying Continuous Delivery - pyconjp 2012 by Toru Furukawa
Trying Continuous Delivery - pyconjp 2012Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012
Toru Furukawa1.5K views
Python32 pyhackathon-201011 by Toru Furukawa
Python32 pyhackathon-201011Python32 pyhackathon-201011
Python32 pyhackathon-201011
Toru Furukawa1.2K views

Recently uploaded

The Things Stack説明資料 by The Things Industries by
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things IndustriesCRI Japan, Inc.
71 views29 slides
Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
88 views41 slides
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
23 views38 slides
JJUG CCC.pptx by
JJUG CCC.pptxJJUG CCC.pptx
JJUG CCC.pptxKanta Sasaki
6 views14 slides
SSH応用編_20231129.pdf by
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
353 views13 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Hitachi, Ltd. OSS Solution Center.
73 views26 slides

Recently uploaded(11)

The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.71 views
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka88 views
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4353 views
光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけない
Takuya Matsunaga18 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda376 views

おまえらこのライブラリ使ってないの? m9 (2013-07)

  • 2. お前だれよ? •  ふるかわとおる   •  @torufurukawa   •  #bucho   •  株式会社バスキュール   – TV連動サービス作ってますした  
  • 3. アンケート結果より... •  仮想環境   •  シェル拡張   •  コーディングスタイル   •  テスト   •  追加は  #pyfes  #m9  で、ツイートしてください。   h8ps://twi8er.com/search?q=%23pyfes%20AND%20%23m9&src=typd  
  • 5. virtualenv $  virtualenv  .   $  ls   bin          include  lib   $  source  bin/activate   インストールし放題!
  • 6. venv  (3.x) $  python3.3  -­‐m  venv  .   $  source  bin/activate   インストールし放題!
  • 7. virtualenvwrapper $  mkvirtualenv  myenv   $  workon  myenv   インストールし放題!
  • 8. 対話シェル拡張 •  対話シェルだけでは...   •  Python  の対話シェルでもっといろいろやる
  • 9. ipython $  ipython   Python  2.7  (r27:82500,  Nov    7  2010,  14:17:28)     Type  "copyright",  "credits"  or  "license"  for  more  informaXon.     IPython  0.13.2  -­‐-­‐  An  enhanced  InteracXve  Python.   ?                  -­‐>  IntroducXon  and  overview  of  IPython's  features.   %quickref  -­‐>  Quick  reference.   help            -­‐>  Python's  own  help  system.   object?      -­‐>  Details  about  'object',  use  'object??'  for  extra   details.     In  [1]:  
  • 10. In  [1]:  import  random     In  [2]:  random.choice?   Type:              instancemethod   String  Form:<bound  method  Random.choice  of   <random.Random  object  at  0x10183f820>>   File:              /usr/local/Cellar/python/2.7/ lib/python2.7/random.py   Definition:  random.choice(self,  seq)   Docstring:    Choose  a  random  element  from  a   non-­‐empty  sequence.
  • 11. In  [3]:  random.choice??   Type:              instancemethod   String  Form:<bound  method  Random.choice  of   <random.Random  object  at  0x10183f820>>   File:              /usr/local/Cellar/python/2.7/ lib/python2.7/random.py   Definition:  random.choice(self,  seq)   Source:          def  choice(self,  seq):                  """Choose  a  random  element  from  a   non-­‐empty  sequence."""                  return  seq[int(self.random()  *   len(seq))]    #  raises...  
  • 12. ls  とか  cd  とか In  [4]:  ls   bin/    lib/    share/   include/  man/    src/     In  [5]:  cd  src   /Users/torufurukawa/works/pyfes201307/src
  • 13. コマンド実行 In  [6]:  !ps        PID  TTY                      TIME  CMD    2739  8ys000        0:00.84  -­‐zsh    6059  8ys000        0:01.13  /Users/torufurukawa/ works/pyfes201307/bin/python2.7  /Us....  
  • 14. In  [7]:  !redis-­‐server   [6080]  27  Jul  12:59:29  #  Warning:  no  config  file   specified,  using  the  default  config.  In  order  to   specify  a  config  file  use  'redis-­‐server  /path/to/ redis.conf'   [6080]  27  Jul  12:59:29  *  Server  started,  Redis   version  2.4.10   [6080]  27  Jul  12:59:29  *  The  server  is  now  ready   to  accept  connecXons  on  port  6379  
  • 17. from  urllib  import  urlopen    #  使ってない   def  add(a,  b  ):    #  カッコのまわりに不要スペース          addressess  =  None    #  スペルミス          return  a  +  b  
  • 18. pep8 $  pep8  spam.py   spam.py:2:1:  E302  expected  2  blank  lines,  found  0   spam.py:2:13:  E202  whitespace  before  ')'  
  • 19. pyflakes $  pyflakes  spam.py   spam.py:1:  'urlopen'  imported  but  unused   spam.py:3:  local  variable  'addressess'  is  assigned   to  but  never  used
  • 20. flake8 $  flake8  spam.py   spam.py:1:1:  F401  'urlopen'  imported  but   unused   spam.py:2:1:  E302  expected  2  blank  lines,  found   0   spam.py:2:13:  E202  whitespace  before  ')'   spam.py:3:1:  F841  local  variable  'addressess'  is   assigned  to  but  never  used
  • 21. misspellings $  misspellings  spam.py   spam.py:3:  addressess  -­‐>  "addresses"
  • 22. HTTP  リクエスト •  urllib  だけだとちょっと...   •  リクエストを簡単に書きたい   •  レスポンスを簡単に取得したい
  • 23. requests >>>  import  requests   >>>  r  =  requests.get('h8p://wozozo.jp/')   >>>  r.status_code   200   >>>  r.content   'n<!DOCTYPE  html>n<!-­‐-­‐[if  IEMobile  7  ]><html   class="no-­‐js  iem7"><![endif]-­‐-­‐>n<!-­‐-­‐[if  lt  IE   9]><html  class="no-­‐js  lte-­‐ie8"><![endif]-­‐-­‐>n<!-­‐-­‐[if   (gt  IE  8)|(gt  IEMobile  7)|!(IEMobile)|!(IE)]><!-­‐-­‐ ><html  class="no-­‐js"  lang="en"><!-­‐-­‐<![endif]
  • 24. >>>  r.json()    #  辞書を返す   {'spam':  'ham',  'foo':  [1,2,3]}    
  • 25. requests.post(    'h8p://wozozo.jp/',            data={'name':  'xaxtsuxo'},    #  パラメータ            auth=('user',  'pass')    #  Basic  Auth   )
  • 26. テスト •  テストを手早く書きたい   •  失敗したテスト結果は分かりやすくならん?
  • 27. py.test •  テストランナー  +  ディスカバラー   •  エラーをきれいに見せてくれる   •  確認しやすい
  • 28. import  uni8est     class  MyTest(uni8est.TestCase):          def  test(self):                  self.assertEqual(True,  True)     def  test2():          x  =  {'foo':  'bar',  'hoge':  'fuga'}          y  =  {'foo':  'bar',  'hoge':  'wozozo'}          assert  x  ==  y  
  • 29. $  py.test  mytest.py   =============================  test  session   starts  ==============================   pla{orm  darwin  -­‐-­‐  Python  2.7.0  -­‐-­‐  pytest-­‐2.3.5   collected  3  items       mytest.py  .F   ...  
  • 30. ...            def  test2():                  x  =  {'foo':  'bar',  'hoge':  'fuga'}                  y  =  {'foo':  'bar',  'hoge':  'wozozo'}   >              assert  x  ==  y   E              assert  {'foo':  'bar',  'hoge':  'fuga'}  ==  {'foo':  'bar',...ge':  'wozozo'}   E                  Hiding  1  idenXcal  items,  use  -­‐v  to  show   E                  Differing  items:   E                  {'hoge':  'fuga'}  !=  {'hoge':  'wozozo'}    
  • 32. watchdog $  watchmedo            shell-­‐command            -­‐-­‐pa8erns="*.py"            -­‐-­‐command="py.test            mytest.py"