読者です 読者をやめる 読者になる 読者になる

CUBE SUGAR CONTAINER

技術系のこと書きます。

Python: TensorFlow のチュートリアルでソフトマックス回帰を試す

最近、囲碁でプロ棋士を負かした AlphaGo も、この TensorFlow で組んだニューラルネットワークを使っているんだとか。 とはいえ、チュートリアルを読みながら使ってみると、これは単にディープラーニングだけをターゲットにしたライブラリではないように感…

Python: モジュールを動的にロードする

Python のモジュールは通常であれば import 文を使ってあらかじめ静的にロードする。 では、プログラムの中で動的にロードしたい場合にはどうしたらいいのか?というのが今回の話。 結論から先に言うと今は標準ライブラリの importlib を使うのが推奨される…

Python: doctest を書いてみよう

今回は Python が標準で提供しているテスト機構の一つである doctest について書いてみる。 doctest というのは docstring という Python のドキュメンテーション機構を使って一緒にテストもしちゃおうという発想の代物。 docstring については以前にもこの…

Python: 特殊メソッド __getattr__() を使う際の注意点

特殊メソッドというのは、名前の前後にアンダースコアがふたつ付いた、特別な意味をもったメソッドのことをいう。 これをユーザ定義クラスで実装すると、クラスのもつ基本的な挙動をオーバーライドできる。 その中でも __getattr__() という特殊メソッドを使…

Python: 自作パッケージにデータファイルを含める

Python で自作パッケージを作る際に、ソースコード以外のファイルを含めたくなる場合がある。 例えば Web アプリケーションを作るときの HTML テンプレートなんかはよくあるパターン。 今回は自作パッケージにソースコード以外のファイル (データファイル) …

Python: オブジェクトのソートについて

Python のソートについてイマイチちゃんと理解していなかったので、ここで一旦まとめてみる。 すべての基本となる sorted() 関数 まず、ソートの基本となるのが組み込み関数の sorted() だ。 これはイテレータを引数に取って、内容を整列させたリストを返す…

graphviz/blockdiag の作業を捗らせるツール diagram-autobuild をつくった

graphviz と blockdiag (シリーズ) は、どちらもテキスト形式のソースファイルからダイアグラムの画像を生成できるツール。 今回、その graphviz や blockdiag で作業する際の効率を上げまくるツール diagram-autobuild というものをつくってみた。 そもそも…

日本語の文章から文字列を検索するコマンド jpgrep をつくってみた

タイトルの通りなんだけど日本語の文章から文字列を検索するコマンドをつくってみた。 GitHub - momijiame/jpgrep: grep for japanese text 背景 例えば、次のような日本語の文章を格納したテキストファイルがあるとする。 文章には「事」と「事実」という、…

Python: オブジェクトを漬物 (Pickle) にする

Python の標準ライブラリにある pickle モジュールは Python のオブジェクトを直列化・非直列化するための機能を提供している。 直列化 (Serialize) というのはプログラミング言語においてオブジェクトをバイト列などの表現に変換することを指す。 非直列化 …

Python: ファイルオブジェクトのクローズについて

Python でファイルシステム上にあるファイルを扱うには open() 関数などを使ってファイルオブジェクトを取得する。 しかし、使い終わったファイルオブジェクトはちゃんと close() メソッドを呼んで後片付けをしなければいけない。 そして、同時に開くファイ…

Python: コマンドラインパーサの Click で独自の型を使う

これは Python Advent Calendar 2015 の 2 日目の記事です。 サードパーティ製のコマンドラインパーサ Click がとても便利で標準ライブラリの argparse を使っている場合じゃない件については以前このブログで書きました。 blog.amedama.jp 今回は、その記事…

Python: pip と Wheel キャッシュについて

これは Python Advent Calendar 2015 の 1 日目の記事です。 Wheel というのは、最近になって導入された Python の新しいパッケージング規格です。 今回はその Wheel を pip が積極的にキャッシュすることで気づいた点について書いてみます。 今回使用した環…

Python: functools.partial() で関数やメソッドを部分適用する

これまで存在すら知らなかったんだけど、標準ライブラリの functools.partial() はなかなか面白く使えそう。 これを使うと関数やメソッドの引数の一部をある値に固定した形で新しい呼び出し可能オブジェクトを作ることができる。 最初の例として functools.p…

Python: Janome で手軽に形態素解析する

Janome は Pure Python で実装された日本語の形態素解析ライブラリ。 形態素解析というのは文章から意味をもった最小の構成単位となる形態素を取り出すことをいう。 他の日本語の形態素解析ライブラリは Python から使えてもバインディングが提供されている…

Python: chardet でテキストファイルの文字コードを検出する

マルチバイト文字の含まれたテキストファイルを扱おうとすると、文字コードがまず問題になる。 そのファイルがいったい何でエンコードされているか分からないと、それを適切に扱うことは到底できない。 そんなとき使うと便利なのが、今回紹介する chardet と…

Golang でマージソートを書いてみる

以前、勉強がてら Golang でクイックソートを書いたので、ついでにマージソートも書いてみる。 blog.amedama.jp サンプルコードは次の通り。 例によってナイーブな実装なので実用性は低い。 package main import ( "fmt" "time" "math/rand" ) func merge(le…

Python の DB-API (Database API) とは何か

Python でデータベース周りについて調べていると、ドキュメントの中にちょくちょく DB-API (2.0) という単語が出てくる。 果たしてこの DB-API とは何者なのか、というのが今回の主題。 結論から言ってしまうと、DB-API というのは Python でリレーショナル…

Python: デコレータとコンテキストマネージャの両方として動作する API の作り方

以前、仕事でデータベースのトランザクションを管理する Python の API を考えているときに、同僚と「デコレータで作るべき」「いやコンテキストマネージャの方が扱いやすい」みたいなやり取りをしたことがあった。 でも、今考えるとどちらとしても動作する…

Python: docstring を書いてみよう

Python の docstring というのは、モジュールやクラス、関数などにつける説明文のこと。 単純なコメントとの違いは、より仕様に近い内容を記述しておくことで API のドキュメントとして利用できる他、別のドキュメントから内容を読み込んで使ったりすること…

Golang でクイックソートを書いてみる

Golang の勉強がてら、どれくらい楽に書けるかという確認を兼ねてクイックソートを書いてみた。 ナイーブな実装なので実用性はないけど。 package main import ( "fmt" "time" "math/rand" ) func sort(values []int) (ret []int) { // 要素数が 1 以下の配…

Python: コマンドラインパーサの Click が便利すぎた

Python のコマンドラインパーサといえば、標準ライブラリに組み込まれている argparse が基本。 蛇足になるけど、バージョン 2.7 以前で使われていた optparse は将来的に廃止予定なので新たに使うことは避けた方が良い。 そして、今回紹介する Python のサ…

Python で ROT13 (シーザー暗号) を書いてみる

Golang で ROT13 を書いたので、ついでに Python 版も書いてみる。 blog.amedama.jp 先に断っておくと、Python の場合 ROT13 は言語に組み込みで実装があるので、本来は自分で書く必要がない。 >>> import codecs >>> codecs.decode('Uryyb, Jbeyq!', 'rot13…

Python: Alembic でデータベースのスキーマ変更を自動検出する

Alembic は Python で書かれたデータベースマイグレーションツール。 アプリケーションを開発していると、データベースのスキーマ変更はちょくちょくある。 そうした場合、よくあるパターンでは更新内容を SQL のテキストファイルで管理したりする。 それに…

Python: contextlib.contextmanager を使うときの注意点

Python には with 文というシンタックスがあって、これを使うと前処理と後処理が書きやすくなっている。 その際、with 文にはコンテキストマネージャという種類のオブジェクトを渡すことが取り決めになっている。 そのコンテキストマネージャは標準ライブラ…

Homebrew で OpenCV3 の Python バインディングを試す

OpenCV はオープンソースのコンピュータビジョンライブラリ。 画像だけでなく動画も処理できたり、それ関連の機械学習アルゴリズムまで実装してたりする。 本体は C++ で書かれているけど Python バインディングもあるので、今回はそれを試してみる。 OpenCV…

Python: SciPy で特徴量の相関を調べる

相関というのは、ふたつの特徴量の間の線形な関係性を指す。 要するに、こちらが上がればこちらは下がる、みたいなもの。 また、ふたつの特徴量の間にどのくらいの相関があるかを示す数値を相関係数と呼ぶ。 そして、相関係数は「ピアソンの相関係数 (Pear…

Python: SQLAlchemy で悲観的・楽観的排他制御を試す

以前、MySQL を使ってリレーショナルデータベースの悲観的・楽観的排他制御を試してみた。 今回は、その悲観的・楽観的排他制御を Python の O/R マッパーの SQLAlchemy で実際に使ってみることにする。 blog.amedama.jp 使用する MySQL のバージョンは次の…

Python: 2to3 の使い方とセットアップスクリプト (setup.py) への組み込み

以前 Python の 2.x と 3.x の違いと、その吸収方法についてまとめた記事を書いた。 blog.amedama.jp その中で 2to3 という Python 2.x で書かれたソースコードを 3.x に移植するためのプログラムについても言及している。 記事の中では既に推奨できない方法…

Python: セットアップスクリプト (setup.py) に自作のコマンドを追加する

インストール可能な Python パッケージを作るには、セットアップスクリプト (setup.py) と呼ばれるファイルを用意する。 セットアップスクリプトは以下のように用いる。 <command> にはパッケージのインストールに使う install やソースコード配布物を生成する sdist </command>…

インターネットと疎通がないマシンに Python パッケージをインストールする

たまにインターネットと疎通がないマシンをデプロイしなきゃいけないこともあると思う。 今回は、そんな時にどうやって Python のパッケージを対象ホストにインストールすればいいかについて書く。 要約を先に書いておくと、まず OS のパッケージシステムを…

Python: mod_wsgi のログを rsyslog と logrotate でローテーションする

今回は mod_wsgi で動作させた WSGI アプリケーションのログを syslog で飛ばして、それを rsyslog で受信して logrotate でローテーションさせてみる。 尚、Apache httpd 本体のログを syslog で飛ばす方法は以下を参照のこと。 blog.amedama.jp 検証用の環…

Python: caniusepython3 で Python 3 非対応の依存パッケージを見つける

先日の記事で Python 2.x/3.x の互換性に関するツールをいくつか紹介したけど、詳しい使い方までは書くことができなかった。 今回は、その中のひとつ caniusepython3 について紹介してみる。 blog.amedama.jp caniusepython3 とは caniusepython3 は、プロジ…

Python: pylint でバージョン 3.x 非互換のシンタックスを見つけ出す

先日の記事で Python 2.x/3.x の互換性に関するツールをいくつか紹介したけど、詳しい使い方までは書くことができなかった。 今回は、その中のひとつ pylint (の --py3k オプション) について紹介してみる。 blog.amedama.jp pylint とは pylint は Python …

Python: tox を使って複数のバージョンでテストを実行する

先日の記事で Python 2.x/3.x の互換性に関するツールをいくつか紹介したけど、詳しい使い方までは書くことができなかった。 今回は、その中のひとつ tox の使い方について紹介してみる。 なんで tox が必要なのか プロジェクトを複数のバージョンの Python …

Python のバージョン毎の違いとその吸収方法について

この記事の目指すところ 現在 Python はバージョン 2.x 系と 3.x 系という、一部に互換性のないふたつのメジャーバージョンが併用されている。 その上で、この記事にはふたつの目的がある。 ひとつ目は、2.x 系と 3.x 系の違いについてまとめること。 現状、…

Python: mod_wsgi の組み込みモードとデーモンモードについて

Python で Web アプリケーションを開発する場合、WSGI という仕様に沿った形で作られているとアプリケーションのポータビリティが向上する。 WSGI の仕様に沿っているアプリケーションは、異なる実装の WSGI サーバであっても動作させることができるためだ。…

Python: SQLAlchemy で 'MySQL server has gone away' になる問題を解決する

Python の有名な O/R マッパであるところの SQLAlchemy を MySQL と一緒に使っていたところ、ちょくちょく 'MySQL server has gone away' というエラーになることに気づいた。 今回はこの問題の原因と対策について調べたので書き残しておく。 結論から先に書…