Python 3.3 以上で使える Python/C API で文字列アクセスを高速化

試しに英語で Blog を書いてみた のですが、書くので精一杯で結局何が言いたいのか分からない感じになってしまったので今後は日本語 Blog 書いてから英訳しようと思います。 Python 3 は 3.2 まで、文字列を unicode に統一した関係で Python 2.7 に比べて遅…

http-parser と picohttpparser との比較

h2o Advent Calendar 2014 の記事です。 Minefield は http-parser (nginx のパーサーと基本的に同じもの) を利用しているのですが、これを picohttpparser に置き換えてみます。 最初は libh2o に置き換えるつもりだったのですが、まだ API が unstable で…

Unix Domain Socket において keep-alive が性能に与える影響 (Gazelle vs Meinheld)

id:kazeburo さんが Gazelle という高速な Perl 用の Web アプリケーションサーバーを公開されました。 Gazelle - Plack Handler for performance freaks #yokohamapm from Masahiro Nagano Gazelle の特徴のうち幾つかは、 id:mopemope 作の Meinheld と同…

GoConference 2014 Autumn に参加してきました & ReadMIMEHeader() で使われているテクニック

GoCon 2014 Autumn に参加してきました。 娘の誕生のために Spring には参加しなかったので1年ぶりになります。 今年は去年に比べて、圧倒的に production で使ってるという話が聞けたのが印象に残りました。 残念ながら私はそういった話ができなかったので…

mysqlclient が Django の推奨ドライバになりました

MySQL-Python (MySQLdb) のメンテナンスが停滞したことで fork して後方互換性を保ったままメンテナンスをしている mysqlclient ですが、 Django の recommend になりました。 Databases | Django documentation | Django もともと推奨になっていた MySQLdb …

Web アプリケーションにおいては Python 3 への移行は簡単だという話

Python 2 / 3 両対応のライブラリをメンテナンスしている人にとって、 Python 3 の メリットは享受できずメンテナンスコストだけが上がるつらい状況がずっと続いています。 しかし、「Python 3 への移行が大変」というのは、Python 2 を捨てるのが大変、 Pyt…

PyCon JP 2014 の1日目 keynote について

今年は娘ができたこともあり、 PyCon JP に発表だけじゃなく参加もしませんでした。 (娘と妻次第ですが、来年からはまた行きたいと思っています。) さて、 Twitter を眺めていると Python 3 に対するネガティブな反応がいきなり 流れ始めました。元になった…

Tornado-MySQL をリリースしました

PyMySQL をベースに Tornado をサポートした Tornado-MySQL をリリースしました。 Github: https://github.com/PyMySQL/Tornado-MySQL PyPI: Tornado-MySQL 0.2 : Python Package Index 単に IO 部分を Tornado に置き換えるだけでなく、簡単なコネクション…

mysqlclient-python を簡易的に非同期I/Oに対応させた

libmysqlclient を利用した Python の MySQL ドライバである libmysqlclient-python を、 gevent, meinheld など非同期I/O + 軽量スレッド環境で使いやすいようにしました。 libmysqlclient の API について libmysqlclient は基本的に同期IOのことしか考え…

mysqlclient をリリースしました

前回の記事で しかし、長年の実績がある本家といえども、個人プロジェクトで、1年に数回しかコミットされてない現状です。 一応、「いま転職直後で時間ないんだけど、できれば週末に見ておくよ」という感じのレスを貰ったのでしばらく待ってみますが、進展…

MySQL-python の Python 3 対応

去年10月に Python 3 の MySQL ドライバ事情 という記事で次のように書いていました。 多分デファクトスタンダードな MySQLドライバなのですが、現状リリースされている 1.2.4 では Python 3 対応ができていません。 Fork の MySQL-for-Python3 が推奨されま…

Python 2/3 両対応のために `unicode_literals` を使うべきか

背景 Python 2 用のコードを書くときは、 Python 3 対応を見越して # -*- coding: utf-8 -*- from __future__ import division, print_function, absolute_import をテンプレとして書いています。 __future__ はファイルごとにバラバラだと混乱を招くので、…

Python でシェル経由でコマンド実行するときのバッドノウハウ

PHPだってシェル経由でないコマンド呼び出し機能が欲しい コマンド実行でシェルが怖いなら使わなければいいじゃない どちらの記事でも Python の subprocess を使ってシェルを介在せずにコマンドを実行する方法が紹介されています。 シェルを介在すると、エ…

次世代標準非同期I/Oフレームワーク asyncio (Tulip)

Python Advent Calendar 2013 の4日目です。 Python 3.4 で標準ライブラリに追加される asyncio を触ってみます。 なお、 Tulip とは asyncio のリファレンス実装のプロジェクト名です。 背景 Python はよく非同期 I/O プログラミングに使われます。 Twisted…

PyPy 2.2 を Amazon Linux (など)で使う

PyPy 2.2 がリリースされました。 PyPy は、 RPython -> C -> バイナリという流れでビルドされますが、 C 言語のソースコードが配布されていないので、バイナリ配布物を使うか最初からビルドするしかありません。 ちなみに、(ソース配布物の Makefile による…

Go で書いたサーバーを管理するには circus が便利

Go を使うとサーバーとアプリケーションの境界が無くなり、アプリケーションサーバーを書けるようになります。 それは良いことなのですが、アプリケーションを書く人が、従来サーバーを書く人が設計していた機能を理解して実現できないと、運用できないサー…

Go で 1024 以下のポートを Listen するアプリを作る

Go はネットワークアプリケーションを手軽に書ける言語ですが、例えば 80 番ポートなど、 root でしか bind できないアドレスを Listen するアプリケーションを、 root でないユーザーで動かすのは地味に面倒です。 普通はソケットを bind してから setuid/s…

Mac で Python の開発環境構築(2013.11)

しばらく Mac からおさらばしていたのですが、ゆえあって戻ってきました。 Python 3.3 ベースで Python 環境の構築をしたので、参考までに手順を残しておきます。 1. Homebrew で Python 3 をインストール とりあえずベースになる Python を用意します。いま…

iterable と iterator

イテレータを介して見るPHPクラスの内部構造 を読んだのですが、 最近の php はちゃんと Python などの言語を参考にしてるなーと思うことが多かったのにこの仕様は残念です。 Python など多くの言語では、イテレータの取得とイテレータの使用を明確に区別し…

Python でパッケージのインストール時に rpath を設定する方法

libmysqlclient を static リンクする方法 を紹介したばかりですが、 MySQL 5.6 だとこの方法でビルドしても Import エラーになるという報告がありました。 static link は動的ライブラリの検索パスを考えなくて良くなる代わりに、動的ライブラリなら芋づる…

libmysqlclient を static link して MySQL-python を使う

ディストリのものではなくて Oracle からダウンロードした MySQL を使う場合など、 そのままでは libsqlclient_r.so が動的リンクできない場合の解決策の一つとして、 static link してしまうという方法があります。 MySQL-python の場合、 pip install を諦…

gosym を使って引数名を取得してみる

golangで実行時に関数の引数の名前を取得する方法 を見て、 Go には debug ってパッケージも合ったなーとおもって試してみました。 当初、同じパッケージ内にダミーの関数を用意してやろうと思ったのですが、リンク時に strip されるらしく、 さらに呼び出し…

GoCon で発表してきました

僕の発表 発表資料というかメモ 発表時間が20分だったので、ISUCONの紹介と、 Go 凄いよってことをアピールしてきました。 あとで流れてる Tweet を見ていたら、僕が一番感動した部分があまり拡散されてなかったので こちらで繰り返しておきます。 去年の IS…

Python 3 の MySQL ドライバ事情

Python 3.3 の現状の MySQL 事情ってだいぶ解りにくいので、 MySQL-python と PyMySQL についてまとめておきます。 MySQL Connector/Python とかも Python 3 対応しているはずですが使ってないので知りません。 MySQL-python 多分デファクトスタンダードな M…

Go の MySQL ドライバの効率の良い使い方

10/5 に ISUCON 3 の予選に Go 言語で参戦していました。 とりあえずレポートは会社のブログに書いたので、 Go 言語で go-sql-driver/mysql を使って MySQL を使う時に知っておくと良い点をまとめておきます。 ちなみに MySQL ドライバにはもうひとつ MyMySQ…

PyMySQL 0.6 がリリースされました

PyMySQL のコントリビュート始めました という記事を書いたころ、ちょうど PyMySQL のメンテナが活動できなくて開発が停滞していたので新しいメンテナを募集していました。 僕はその募集に気づいていなかったので立候補もしていなかったのですが、幸運なこと…

PyMySQL のコントリビュート始めました

MyKaze を作ってみたり、 http://www.techempower.com/benchmarks/ で PyPy を使ってみたりして、 PyMySQL の重要さを強く感じました。 libmysqlclient は non blocking IO との相性が悪いし、 MySQLdb は Python/C API をガッツリ使ってるので CPython での…

PEP 8 を翻訳しました

PEP 8 の邦訳は既にありましたが、誤訳が残ってたり版が古かったりと問題があったので、最新版の PEP 8 をエイヤと翻訳しました。 公式ドキュメントの翻訳プロジェクトで PEP 翻訳の管理・公開できる体制ができるまで、 DropBox においています。 https://dl…

BitCasa がずっと CPU 100% 使いつづける場合の対処法

https://support.bitcasa.com/entries/23769606-Known-Issue-Desktop-App-is-Stuck-at-X-MB-to-go- ここに書いてあるとおり、BitCasa を一旦終了してキャッシュを全部削除してから起動しなおしたら、しばらく同期して Idle に戻る。

舞風作った

暗い雰囲気は苦手です。 https://github.com/methane/MyKaze Tornado で MySQL 使うの、まぁ ワーカースレッドでやれる んだけど、 なんかかっこ悪いよね。せっかくだから Tornado の仕組みで通信したいよね。 ってことで、 PyMySQL の中の socket を Tornad…

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。