SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
Pythonでpyftpdlibを使って
FTPサーバーを作る際に
使ったテクニックの紹介
Shinya Okano
PyConJP 2016
お前、誰よ
• 岡野 真也
• tokibito
• Pythonを使って10年ぐらい仕事してます
• https://twitter.com/tokibito
• 所属: 株式会社ビープラウド
伝えたいこと
ソフトウェアを開発する際、
闇雲にコードを書いて作っていくのではなく、
手順(工程)を意識すること
アウトライン
1. 題材としたFTPサーバーアプリケーションの紹介
2. ツール(アプリケーション)開発の流れ
3. 要件、仕様、設計を書き起こしてみよう
4. どこから書き始めるか
5. 先に外枠だけ作ってしまう(パッケージング、コマンド化)
6. 実装の仮組み
7. モジュールを分ける
8. テストコードを書く
9. 自動テストを設定する
10. 設定ファイルやログ出力の整備
11. Dockerで動かせるようにしてみる
1.題材としたFTPサーバーアプリケーション
の紹介
• FTPについては詳しくは説明しません
• コンピュータ間でファイルを転送するのに使うプロトコルです
• RFCいくつもあるので調べれば出てきます
• クライアントだとFFFTPなどが有名
• サーバー実装はいろいろあります
• 今回のFTPサーバー
• 1ユーザーのみ
• なるべく設定項目を減らす
• 既存のソフトウェアの設定が面倒なので、目的を果たす単機能なもの
• マスカレードアドレス、パッシブモードとポートは設定できること
• soloftpdという名前でPyPIに登録済み
• https://github.com/tokibito/soloftpd
2.ツール(アプリケーション)開発の流れ
1. 何をしたいのか、まとめる(企画、要件定義)
2. 要件を満たすシステムの入力や出力の詳細、データの流れやシ
ステムの処理をまとめる(仕様策定)
3. 要件、仕様をどうやって実現するのか考えてまとめる(設計)
4. 設計に対応する実装をする、システムを構築する(実装)
5. 実装、構築して出来上がったものが、要件や仕様を満たしている
か確認する(試験)
6. 完成
小さいツールなら、ある程度簡略化、省略するといいです。
参考:
http://tokibito.hatenablog.com/entry/2016/08/01/000820
3.要件、仕様、設計を書き起こしてみよう
• 要件、仕様、設計の一例
• https://github.com/tokibito/soloftpd/blob/master/README.rst
• どんな機能が必要なのか、何を作るのか書き出してみよう
• どのように使うのか、書き出してみよう
• コマンド名やコマンドラインオプション
• 設定ファイル
• 入力ファイル、出力ファイルの仕様など
• ちょっとしたツールなら、簡易的な記述でも十分
• コードをすぐに書けそうな状態=設計ができてる
とても大切な工程です。
これができないまま進めると、完成は遠いです
何を作りたいのか、できるだけハッキリさせておきましょう。
補足. pyftpdlib
• FTPサーバーを実装するためのPythonモジュール
• 認証のカスタマイズ
• ストレージのカスタマイズ
• FTPプロトコルの拡張
4.どこから書き始めるか
• 設計はできました。
• では作りましょう。
• →どこから始める?
• パッケージ設定、ライセンス、README
• あんまり何も考えなくても定型的な部分
• 後回しにすると面倒な部分
• 最初のコミット
• https://github.com/tokibito/soloftpd/commit/80dc9419a97046e5ee
6b148312859ef2c2ed1df3
5.先に外枠を作ってしまう
• まずは外枠のパッケージの部分を用意する
• setup.pyを書く
• わからなければ、他のサードパーティモジュールなどの真似をすればいい
• https://packaging.python.org/distributing/
• コマンドツールであれば、console_scriptsを設定するのが便利
• 誰かに見られて困るものでなければ、PyPIに登録して使えるようにし
とくと楽
• 自分専用のツールだったとしても登録しとけば、便利です
補足. ライセンス
• OSSを利用するのであれば、大雑把にでもライセンス体系は把握し
ておいたほうが良いでしょう
• 自分のツールをどのライセンスで公開するのか、調べるのもいい勉
強になります。
• PythonのライセンスはPSF License(Python Software Foundation
License)です。
• BSDスタイル、GPL互換
• https://docs.python.org/3/license.html
6.実装の仮組み
• 動かしながら作れるほうが、イメージは湧きやすい
• とりあえず入出力できるようにしてみる
• 細かい部分を後回しにして、処理の流れを先に実装する
• 関数やメソッドの呼び出しで、仮の値を返す実装
• 設定によって分岐する部分を固定値にする
• 仮実装の部分はTODOコメントを入れておく
• 後でgrepなどで見つけやすいように
• FTPサーバーの例.
• 設定ファイルの読み込みなどは後で実装
• 認証ハンドラを固定のユーザーで実装
• FTPサーバーを起動して、クライアントから接続できるように
7.モジュールを分ける
• 仮組みができたら、細かい部分の実装をする
• 機能に名前をつけられるなら、モジュール、クラスに分けておく
• 機能単位で実装し、組み込んでいく
• FTPサーバーの例.
• 設定ファイルを読み込むクラスを実装
• 実装したクラスを組み込み
• 認証クラスを実装
• 実装したクラスを組み込み
補足. FTPサーバーのクラス関係
補足. 関数 or クラス
• 関数とクラスのどちらを使うか
• Pythonの関数とクラスの違い
• 関数 = 処理
• クラス = 状態と処理
• 大雑把な経験則:
• 状態(入力)によって処理の分岐が発生するなら、クラスにしたほうがよい
• クラス同士を入れ子にする場合は、役割を文章で説明できる単位にする
• 処理の共通化
• 仕様、設計の上で共通化していないものは、冗長でも分けておく(コピペ上等、設計直
せ)
• クラスの継承は、安易に使わない
• is-a関係とhas-a関係
8.テストコードを書く
• フレームワークは標準のunittestをまずは使う
• テストコードの書き方
• 関数、クラス、モジュール単位でテストコードを書く
• 結合テストは、設計変更に弱いのでなるべく単体から。
• 機能実装時に一緒にやれればなお良い
• テストコードが書きづらい?
• 関数、クラス、モジュール設計の問題
• ほとんどの場合がこれ
• 処理をテストするために準備しないといけない状態が多すぎる
• 処理が大きすぎ
• 結合度が高すぎ
• 対象がテストしづらい場合
• 非同期処理はテストしづらい。気合でやるしかない。つらい。
補足. テストフレームワーク、テストランナー
• テストフレームワーク
• TestCase、TestSuiteやアサーション関数、テストフィクスチャなど、テストコード
を書くための機能、枠組みを提供
• doctest、unittest、pytest、noseなどが提供
• テストランナー
• テストコードを実行し、結果を表示する機能
• テストコードを自動的に見つける機能を持つものもある
• doctest、unittest、pytest、noseなどが提供
• フレームワークとランナーは、別のライブラリを使える
• unittestフレームワークを使ってテストコードを書く
• pytestでテストコードを実行する
補足. テストの実行
• setup.pyのコマンドを使う方法
• python setup.py test
• py.testを使う場合
• py.test tests
9.自動テストを設定する
• 復数のPythonバージョン、実装でテストを実行したい
• toxを使おう
• https://tox.readthedocs.io/en/latest/
• https://github.com/tokibito/soloftpd/blob/master/tox.ini
• 継続的インテグレーション(Continuous Integration, CI)をしたい
• TravisCIやCircleCIを使おう
• Python復数バージョンでのマトリクスであればTravisCIのほうが簡単かも
• https://travis-ci.org/
• https://github.com/tokibito/soloftpd/blob/master/.travis.yml
10.設定ファイルやログ出力の整備
• 設定ファイルのフォーマット
• Pythonの標準モジュールだとJSONやiniファイルが使いやすい
• その他だとXML、YAMLなど。
• 設定ファイルを読み込む処理をどこに持たせるか
• 設定情報を扱うクラスに実装しておくとか
• 設定情報は辞書で扱うこともできるが、属性になっているほうがコードは見
やすい
• コード中の記号を減らせる
• 設定項目が少ないならクラス化しないのもアリ
• ログ出力は、loggingモジュールを使う
• 設定ファイルから設定できるようにしておけば、作り込む必要はさほどない
補足. loggingモジュールでログを出力する
• モジュールのglobalにlogging.getLoggerでオブジェクトを用意してお
いて、infoやerrorなどのメソッドを呼ぶ
• https://github.com/tokibito/soloftpd/blob/master/soloftpd/comman
d.py#L8
11.Dockerで動かせるようにしてみる
• Dockerコンテナで動かせると便利なところ
• OSのバージョン依存から脱却
• インストール手順の省略
• PyPIに登録しているならば、requirements.txtだけ作ればすぐに登録
できるイメージを使える
• https://hub.docker.com/_/python/
• official repository
• python:3.5-onbuild
• 例:
• https://github.com/tokibito/docker-soloftpd
• dockerコマンドのオプション指定が面倒な場合は、docker-compose
を使うと楽
まとめ
• コードを書き始める前に
• 作りたいものを決めて、要件、仕様、設計
• コードを書く
• 外枠(パッケージ)
• 仮組み
• モジュール化
• テストコード
• 使いやすさ向上させる
自分にあった開発手順を持ち、
スムーズに品質良くソフトウェアを作れるようになれるといいですね。

Contenu connexe

Tendances

Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17Shinya Okano
 
Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Hironori Sekine
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LTdrillan
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPythonHironori Sekine
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたYusuke Kon
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようKenji NAKAGAKI
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎真哉 杉野
 
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方サードパーティパッケージの歩き方
サードパーティパッケージの歩き方Takesxi Sximada
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Reportgree_tech
 
Python3 プログラミング勉強会
Python3 プログラミング勉強会Python3 プログラミング勉強会
Python3 プログラミング勉強会Tetsuya Morimoto
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境Hisao Soyama
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版Katsuhiro Morishita
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyoShuyo Nakatani
 
Stapy#17LT
Stapy#17LTStapy#17LT
Stapy#17LTdrillan
 
Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版Katsuhiro Morishita
 
Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpPythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpYoshifumi Yamaguchi
 
久しぶりのPythonでgoogleのアレを制御してみた
久しぶりのPythonでgoogleのアレを制御してみた久しぶりのPythonでgoogleのアレを制御してみた
久しぶりのPythonでgoogleのアレを制御してみたShohei Tai
 

Tendances (20)

Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17
 
Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編-
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LT
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPython
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎
 
OSSと私
OSSと私OSSと私
OSSと私
 
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方サードパーティパッケージの歩き方
サードパーティパッケージの歩き方
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
Python3 プログラミング勉強会
Python3 プログラミング勉強会Python3 プログラミング勉強会
Python3 プログラミング勉強会
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
 
210630 python
210630 python210630 python
210630 python
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
Pythonでpdfをいじってみる
PythonでpdfをいじってみるPythonでpdfをいじってみる
Pythonでpdfをいじってみる
 
Stapy#17LT
Stapy#17LTStapy#17LT
Stapy#17LT
 
Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版
 
Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpPythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjp
 
久しぶりのPythonでgoogleのアレを制御してみた
久しぶりのPythonでgoogleのアレを制御してみた久しぶりのPythonでgoogleのアレを制御してみた
久しぶりのPythonでgoogleのアレを制御してみた
 

En vedette

Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングYuichi Ito
 
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演Hironori Washizaki
 
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!Antoine Choppin
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
Pythonで実現する4コマ漫画の分析・評論
Pythonで実現する4コマ漫画の分析・評論Pythonで実現する4コマ漫画の分析・評論
Pythonで実現する4コマ漫画の分析・評論esu ji
 
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)株式会社MonotaRO Tech Team
 
Djangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組みDjangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組みShinya Okano
 
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャGoji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャShiroyagi Corporation
 
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316Takefumi MIYOSHI
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyMasashi Shibata
 
Camp report for_kwskrb
Camp report for_kwskrbCamp report for_kwskrb
Camp report for_kwskrbrojiuratech
 
Robot Framework (のSelenium2Libraryのお話)
Robot Framework (のSelenium2Libraryのお話)Robot Framework (のSelenium2Libraryのお話)
Robot Framework (のSelenium2Libraryのお話)泰 増田
 
BPStudy#97 世界に価値を創り出すエンジニアの技術
BPStudy#97 世界に価値を創り出すエンジニアの技術BPStudy#97 世界に価値を創り出すエンジニアの技術
BPStudy#97 世界に価値を創り出すエンジニアの技術Haruo Sato
 
Taming robotframework
Taming robotframeworkTaming robotframework
Taming robotframework泰 増田
 
4コマ漫画 Machine Learning 分析データを集めたかった話
4コマ漫画 Machine Learning 分析データを集めたかった話4コマ漫画 Machine Learning 分析データを集めたかった話
4コマ漫画 Machine Learning 分析データを集めたかった話esu ji
 
ちょっと真面目にPython&Django・基礎編
ちょっと真面目にPython&Django・基礎編ちょっと真面目にPython&Django・基礎編
ちょっと真面目にPython&Django・基礎編OMEGA (@equal_001)
 
Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016Tatsuya Atsumi
 
データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831
 データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831 データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831
データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831Yusaku Kinoshita
 
Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法Ian Lewis
 

En vedette (20)

Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
 
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
 
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Pythonで実現する4コマ漫画の分析・評論
Pythonで実現する4コマ漫画の分析・評論Pythonで実現する4コマ漫画の分析・評論
Pythonで実現する4コマ漫画の分析・評論
 
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
 
Djangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組みDjangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組み
 
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャGoji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
 
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
 
Camp report for_kwskrb
Camp report for_kwskrbCamp report for_kwskrb
Camp report for_kwskrb
 
Robot Framework (のSelenium2Libraryのお話)
Robot Framework (のSelenium2Libraryのお話)Robot Framework (のSelenium2Libraryのお話)
Robot Framework (のSelenium2Libraryのお話)
 
BPStudy#97 世界に価値を創り出すエンジニアの技術
BPStudy#97 世界に価値を創り出すエンジニアの技術BPStudy#97 世界に価値を創り出すエンジニアの技術
BPStudy#97 世界に価値を創り出すエンジニアの技術
 
Taming robotframework
Taming robotframeworkTaming robotframework
Taming robotframework
 
4コマ漫画 Machine Learning 分析データを集めたかった話
4コマ漫画 Machine Learning 分析データを集めたかった話4コマ漫画 Machine Learning 分析データを集めたかった話
4コマ漫画 Machine Learning 分析データを集めたかった話
 
ちょっと真面目にPython&Django・基礎編
ちょっと真面目にPython&Django・基礎編ちょっと真面目にPython&Django・基礎編
ちょっと真面目にPython&Django・基礎編
 
Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016
 
データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831
 データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831 データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831
データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831
 
Python入門
Python入門Python入門
Python入門
 
Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法
 

Similaire à Pyconjp2016 pyftplib

今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築You&I
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementationsmasahitojp
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45civic Sasaki
 
Apilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlabApilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlabYutaka Kobayshi
 
vscode pipenv docker
vscode pipenv dockervscode pipenv docker
vscode pipenv dockerikdysfm
 
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpTakeshi Komiya
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方Yuji Oshima
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3mganeko
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門kashew_nuts
 
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botdcubeio
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 Hideo Takahashi
 
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料Naoki Shibata
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようTakayuki Shimizukawa
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室Yusuke Ando
 
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみたPHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみたjohgus johgus
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Kazuto Kusama
 

Similaire à Pyconjp2016 pyftplib (20)

今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
 
Apilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlabApilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlab
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Introduction Pycon2010
Introduction Pycon2010Introduction Pycon2010
Introduction Pycon2010
 
vscode pipenv docker
vscode pipenv dockervscode pipenv docker
vscode pipenv docker
 
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
 
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
 
Softlayer勉強会#2
Softlayer勉強会#2Softlayer勉強会#2
Softlayer勉強会#2
 
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
 
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみたPHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
 

Plus de Shinya Okano

Djangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHueDjangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHueShinya Okano
 
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Shinya Okano
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Shinya Okano
 
Hadoopとその周辺の紹介
Hadoopとその周辺の紹介Hadoopとその周辺の紹介
Hadoopとその周辺の紹介Shinya Okano
 
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Shinya Okano
 
2011.06.01 和歌山高専
2011.06.01 和歌山高専2011.06.01 和歌山高専
2011.06.01 和歌山高専Shinya Okano
 
電子書籍の話
電子書籍の話電子書籍の話
電子書籍の話Shinya Okano
 
写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバーShinya Okano
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用Shinya Okano
 
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジmixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジShinya Okano
 

Plus de Shinya Okano (12)

Djangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHueDjangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHue
 
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道
 
Spring4Dの紹介
Spring4Dの紹介Spring4Dの紹介
Spring4Dの紹介
 
Hadoopとその周辺の紹介
Hadoopとその周辺の紹介Hadoopとその周辺の紹介
Hadoopとその周辺の紹介
 
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介
 
2011.06.01 和歌山高専
2011.06.01 和歌山高専2011.06.01 和歌山高専
2011.06.01 和歌山高専
 
電子書籍の話
電子書籍の話電子書籍の話
電子書籍の話
 
写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジmixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
 

Pyconjp2016 pyftplib