次世代標準非同期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…

Ducktyping じゃない interface の良さも取り込む Python (RE: PHP の interface なめんな

PHP の interface なめんな を読みました。 Python も非 Duck typing の良さを順調に取り込んでいます。 Python で上記記事のサンプルを書くと from __future__ import print_function # for Python 2/3 compatibility import abc class Renderable(metaclas…

テストコードがないコードだけが技術的負債じゃないよ

私は「レガシーコード改善ガイド」を読んだことがないのですが、世間的に「テストコードがないコードが技術的負債」という認識が広まっているようです。 レガシーコード改善ガイドを批判するつもりは全くありませんが、たんにその本の中で使われている「レガ…

distribute と setuptools がマージされた

setuptools の開発が停滞し、 fork の distribute が開発を継続していた状態で、初心者にとって最初の大きな罠になっていました。 この2つがマージされることになり、 setuptools 0.7 がリリースされました。 移行手順 How do I upgrade... にあります。 set…

言語とリーダビリティ

この記事は 勝手に添削: PHP初心者向けのコード最適化 の続編です。リーダビリティの定義は前と同じく、「そのコードが何をしたいかを把握する時間+そのコードをレビューして正しいと自信を持てるまでの時間」の短さです。 よく「php よりも Python の方が…

勝手に添削: PHP初心者向けのコード最適化

php

PHP初心者向けのコード最適化 という記事がちょっと社内で話題になったので勝手に添削します。 話題になった理由は、確かにコードは最適化できてるけど圧倒的に汚くなってるからです。 この記事を読む前に、まずリーダビリティについて意識合わせしておきま…

pip install や easy_install を速くするための pypi の設定変更

pip や easy_install が突然速くなるかもしれない で紹介した pypi からのインストール高速化の第一弾が始まりました。 といっても、いきなり勝手に pypi 側でスクレイピングするURLを変更するのではなくて、パッケージ管理者が明示的に指定する方法になりま…

vagrant で ansible を試す

Vagrant 1.2 から ansible がサポートされたということで、気になって試してみた。 まだ自作モジュールとかは作ってなくて、単に vagrant で使えるところまで。 vagrant-ansible vagrant plugin install ansible で vagrant の provision 機能として ansible…

GoCon で Go 1.1 のスケジューラについて発表して来ました

発表資料というかコードの流れのメモはこちらの gist にあります。 https://gist.github.com/methane/5377227 ほんの数カ月前に読んだときの記憶がいろいろ間違ってて、 proc.c のログを見たら今年に入ってからだけでもすごい進化しているのが解ります。 あ…

pip や easy_install が突然速くなるかもしれない

PyPI を安全に利用するために、先日デフォルトで https を利用する pip がリリースされました。 ですがこれで終わりではありません。 pip や easy_install は PyPI のページからリンクを辿ってスクレイピングしてパッケージを探しています。リンク先がhttps…

wsaccel を Tornado に対応しました

最初の wsaccel は UTF-8 のバリデート処理だけを高速化していたのですが、 WebSocket Frame のマスク処理も1バイトごとビットでxorをとる処理だったので高速化するようにして、 0.5 をリリースしました。 Tornado はUTF-8のバリデートをしていない (このバ…

dotCloud で独自のWebサーバーを使いたい場合は type: *-worker が便利

個人的に今 dotCloud がアツいです。無料枠を無制限に使える、WebSocketに対応している、設定の自由度がメチャ高いので、ちょっと作ったものを他人に見せたり自分の携帯から見たりするために気軽に作れちゃいます。 さて、 dotCloud で golang を使うとか、 …

wsaccel の効果

wsaccel で、 UTF-8 のバリデートだけでなく、同じく1バイトずつの処理である mask も Cython で実行するようになりました。 UTF-8 のバリデートはテキストフレームのみに行われる処理であり、JSONをバイナリだと言って転送してバリデートをJSONデコーダに…

AutobahnPython と WebSocket4Python の高速化

Python の WebSocket ライブラリの Autobahn と ws4py は、テキストフレームを受信した時にその内容が正しい UTF-8 になっているかどうかをバリデートしています。 このバリデートが1バイトずつの処理を Python でやっているために、 PyPy を使ってない場合…

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