2013-01-01から1年間の記事一覧
PHPだってシェル経由でないコマンド呼び出し機能が欲しい コマンド実行でシェルが怖いなら使わなければいいじゃない どちらの記事でも Python の subprocess を使ってシェルを介在せずにコマンドを実行する方法が紹介されています。 シェルを介在すると、エ…
Python Advent Calendar 2013 の4日目です。 Python 3.4 で標準ライブラリに追加される asyncio を触ってみます。 なお、 Tulip とは asyncio のリファレンス実装のプロジェクト名です。 背景 Python はよく非同期 I/O プログラミングに使われます。 Twisted…
PyPy 2.2 がリリースされました。 PyPy は、 RPython -> C -> バイナリという流れでビルドされますが、 C 言語のソースコードが配布されていないので、バイナリ配布物を使うか最初からビルドするしかありません。 ちなみに、(ソース配布物の Makefile による…
Go を使うとサーバーとアプリケーションの境界が無くなり、アプリケーションサーバーを書けるようになります。 それは良いことなのですが、アプリケーションを書く人が、従来サーバーを書く人が設計していた機能を理解して実現できないと、運用できないサー…
Go はネットワークアプリケーションを手軽に書ける言語ですが、例えば 80 番ポートなど、 root でしか bind できないアドレスを Listen するアプリケーションを、 root でないユーザーで動かすのは地味に面倒です。 普通はソケットを bind してから setuid/s…
しばらく Mac からおさらばしていたのですが、ゆえあって戻ってきました。 Python 3.3 ベースで Python 環境の構築をしたので、参考までに手順を残しておきます。 1. Homebrew で Python 3 をインストール とりあえずベースになる Python を用意します。いま…
イテレータを介して見るPHPクラスの内部構造 を読んだのですが、 最近の php はちゃんと Python などの言語を参考にしてるなーと思うことが多かったのにこの仕様は残念です。 Python など多くの言語では、イテレータの取得とイテレータの使用を明確に区別し…
libmysqlclient を static リンクする方法 を紹介したばかりですが、 MySQL 5.6 だとこの方法でビルドしても Import エラーになるという報告がありました。 static link は動的ライブラリの検索パスを考えなくて良くなる代わりに、動的ライブラリなら芋づる…
ディストリのものではなくて Oracle からダウンロードした MySQL を使う場合など、 そのままでは libsqlclient_r.so が動的リンクできない場合の解決策の一つとして、 static link してしまうという方法があります。 MySQL-python の場合、 pip install を諦…
golangで実行時に関数の引数の名前を取得する方法 を見て、 Go には debug ってパッケージも合ったなーとおもって試してみました。 当初、同じパッケージ内にダミーの関数を用意してやろうと思ったのですが、リンク時に strip されるらしく、 さらに呼び出し…
僕の発表 発表資料というかメモ 発表時間が20分だったので、ISUCONの紹介と、 Go 凄いよってことをアピールしてきました。 あとで流れてる Tweet を見ていたら、僕が一番感動した部分があまり拡散されてなかったので こちらで繰り返しておきます。 去年の IS…
Python 3.3 の現状の MySQL 事情ってだいぶ解りにくいので、 MySQL-python と PyMySQL についてまとめておきます。 MySQL Connector/Python とかも Python 3 対応しているはずですが使ってないので知りません。 MySQL-python 多分デファクトスタンダードな M…
10/5 に ISUCON 3 の予選に Go 言語で参戦していました。 とりあえずレポートは会社のブログに書いたので、 Go 言語で go-sql-driver/mysql を使って MySQL を使う時に知っておくと良い点をまとめておきます。 ちなみに MySQL ドライバにはもうひとつ MyMySQ…
PyMySQL のコントリビュート始めました という記事を書いたころ、ちょうど PyMySQL のメンテナが活動できなくて開発が停滞していたので新しいメンテナを募集していました。 僕はその募集に気づいていなかったので立候補もしていなかったのですが、幸運なこと…
MyKaze を作ってみたり、 http://www.techempower.com/benchmarks/ で PyPy を使ってみたりして、 PyMySQL の重要さを強く感じました。 libmysqlclient は non blocking IO との相性が悪いし、 MySQLdb は Python/C API をガッツリ使ってるので CPython での…
PEP 8 の邦訳は既にありましたが、誤訳が残ってたり版が古かったりと問題があったので、最新版の PEP 8 をエイヤと翻訳しました。 公式ドキュメントの翻訳プロジェクトで PEP 翻訳の管理・公開できる体制ができるまで、 DropBox においています。 https://dl…
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…
PHP の interface なめんな を読みました。 Python も非 Duck typing の良さを順調に取り込んでいます。 Python で上記記事のサンプルを書くと from __future__ import print_function # for Python 2/3 compatibility import abc class Renderable(metaclas…
私は「レガシーコード改善ガイド」を読んだことがないのですが、世間的に「テストコードがないコードが技術的負債」という認識が広まっているようです。 レガシーコード改善ガイドを批判するつもりは全くありませんが、たんにその本の中で使われている「レガ…
setuptools の開発が停滞し、 fork の distribute が開発を継続していた状態で、初心者にとって最初の大きな罠になっていました。 この2つがマージされることになり、 setuptools 0.7 がリリースされました。 移行手順 How do I upgrade... にあります。 set…
この記事は 勝手に添削: PHP初心者向けのコード最適化 の続編です。リーダビリティの定義は前と同じく、「そのコードが何をしたいかを把握する時間+そのコードをレビューして正しいと自信を持てるまでの時間」の短さです。 よく「php よりも Python の方が…
PHP初心者向けのコード最適化 という記事がちょっと社内で話題になったので勝手に添削します。 話題になった理由は、確かにコードは最適化できてるけど圧倒的に汚くなってるからです。 この記事を読む前に、まずリーダビリティについて意識合わせしておきま…
pip や easy_install が突然速くなるかもしれない で紹介した pypi からのインストール高速化の第一弾が始まりました。 といっても、いきなり勝手に pypi 側でスクレイピングするURLを変更するのではなくて、パッケージ管理者が明示的に指定する方法になりま…
Vagrant 1.2 から ansible がサポートされたということで、気になって試してみた。 まだ自作モジュールとかは作ってなくて、単に vagrant で使えるところまで。 vagrant-ansible vagrant plugin install ansible で vagrant の provision 機能として ansible…
発表資料というかコードの流れのメモはこちらの gist にあります。 https://gist.github.com/methane/5377227 ほんの数カ月前に読んだときの記憶がいろいろ間違ってて、 proc.c のログを見たら今年に入ってからだけでもすごい進化しているのが解ります。 あ…
PyPI を安全に利用するために、先日デフォルトで https を利用する pip がリリースされました。 ですがこれで終わりではありません。 pip や easy_install は PyPI のページからリンクを辿ってスクレイピングしてパッケージを探しています。リンク先がhttps…
最初の wsaccel は UTF-8 のバリデート処理だけを高速化していたのですが、 WebSocket Frame のマスク処理も1バイトごとビットでxorをとる処理だったので高速化するようにして、 0.5 をリリースしました。 Tornado はUTF-8のバリデートをしていない (このバ…
個人的に今 dotCloud がアツいです。無料枠を無制限に使える、WebSocketに対応している、設定の自由度がメチャ高いので、ちょっと作ったものを他人に見せたり自分の携帯から見たりするために気軽に作れちゃいます。 さて、 dotCloud で golang を使うとか、 …
wsaccel で、 UTF-8 のバリデートだけでなく、同じく1バイトずつの処理である mask も Cython で実行するようになりました。 UTF-8 のバリデートはテキストフレームのみに行われる処理であり、JSONをバイナリだと言って転送してバリデートをJSONデコーダに…