タグ

ブックマーク / methane.hatenablog.jp (11)

  • Python と Ruby と typing - methaneのブログ

    うーん、structural subtypingとダックタイピングは同じものなんだろうか。— Yukihiro Matsumoto (@yukihiro_matz) 2016年9月8日 https://t.co/5Rv86piThC wikipediaによると似て非なる物のようですね。 https://t.co/VwIg39h5M0— INADA Naoki (@methane) 2016年9月8日 この話題について補足しておきます。なお、僕はTAPL脱落組なのであまり正確性は期待しないでください。 背景 Ruby Kaigi で Matz が Ruby3 に向けて考え中の静的型について話されたようです。 少し前から、 Python でも Guido が Dropbox での大量のコードベースを改善していくために type hinting がほしいということで PEP 484 を始めました

    Python と Ruby と typing - methaneのブログ
  • バッチがわりに Python を使うときは、 os.system よりも subprocess.call を使おう - methaneのブログ

    次の2つのスクリプトは同じに見える。 #!/usr/bin/env python import os for i in xrange(100): cmd = "tail -f /var/log/syslog | cat " os.system(cmd) #!/usr/bin/env python import subprocess for i in xrange(100): cmd = "tail -f /var/log/syslog | cat " subprocess.call(cmd, shell=True) タイプ数が少ない分前者のほうが良さそうに見える。 でも、このスクリプトを止めようとしてCtrl-Cを押すと、前者はそのまま次のループが実行されてしまうのに対して、後者は例外を出して止まってくれる。 シグナルによる終了とは別に、終了コードが0で無かった場合にも例外を出してくれる

    バッチがわりに Python を使うときは、 os.system よりも subprocess.call を使おう - methaneのブログ
    korin
    korin 2016/02/22
  • Python 3.3 以上で使える Python/C API で文字列アクセスを高速化 - methaneのブログ

    試しに英語Blog を書いてみた のですが、書くので精一杯で結局何が言いたいのか分からない感じになってしまったので今後は日Blog 書いてから英訳しようと思います。 Python 3 は 3.2 まで、文字列を unicode に統一した関係で Python 2.7 に比べて遅くなったりメモリ効率が悪くなったりしてしまっていたのですが、 Python 3.3 で PEP 393 Flexible String Representation が導入されて改善されました。 PEP 393 は Python の内部だけではなく Python/C API にも変更を加えており、内部を理解しつつ新しい API を適切に使えば、バイト列と文字列の間の変換を行うような C 拡張を高速化することができます。 そろそろ Python 3.2 のサポートを切れる時期なので、思い当たる人は目を通してお

    Python 3.3 以上で使える Python/C API で文字列アクセスを高速化 - methaneのブログ
  • Unix Domain Socket において keep-alive が性能に与える影響 (Gazelle vs Meinheld) - methaneのブログ

    id:kazeburo さんが Gazelle という高速な Perl 用の Web アプリケーションサーバーを公開されました。 Gazelle - Plack Handler for performance freaks #yokohamapm from Masahiro Nagano Gazelle の特徴のうち幾つかは、 id:mopemope 作の Meinheld と同じです。 IO周りは全てCで書かれている accept4 や writev などの Linux 独自のシステムコールを利用している 一方で異なる点もあります。 Meinheld は HTTP/1.1 に対応していて、 keep-alive が利用できる。 Meinheld は greenlet というコルーチンを利用して、 long polling や SSE に対応している。 Meinheld が http-pa

    Unix Domain Socket において keep-alive が性能に与える影響 (Gazelle vs Meinheld) - methaneのブログ
    korin
    korin 2014/12/24
  • Python でシェル経由でコマンド実行するときのバッドノウハウ - methaneのブログ

    PHPだってシェル経由でないコマンド呼び出し機能が欲しい コマンド実行でシェルが怖いなら使わなければいいじゃない どちらの記事でも Python の subprocess を使ってシェルを介在せずにコマンドを実行する方法が紹介されています。 シェルを介在すると、エスケープの問題考えるのが面倒だったり、 kill してみたらシェルだけ殺して肝心のコマンドがずっと残ってるというアホみたいな問題を避けられるのでお勧めです。 いい子はこれを使いましょう。 この記事ではどうしてもシェルの機能が使いたい場合や、 subprocess の PIPE の組み立てが面倒な場合のための、バッドノウハウを紹介していきます。 ちなみに、バッドノウハウと呼んでるのは、安全安心 one size fits all ではなく、メリット・デメリット・やり方をいちいち調べないといけなくて、しかもその調べる行為がほとんどコン

    Python でシェル経由でコマンド実行するときのバッドノウハウ - methaneのブログ
  • iterable と iterator - methaneのブログ

    イテレータを介して見るPHPクラスの内部構造 を読んだのですが、 最近の php はちゃんと Python などの言語を参考にしてるなーと思うことが多かったのにこの仕様は残念です。 Python など多くの言語では、イテレータの取得とイテレータの使用を明確に区別しています。 Python ではイテレータを取得できるオブジェクトを iterable と呼び、イテレータを iterator と呼びます。 iterable は __iter__ メソッドを実装し、 iterator は __next__ メソッド (Python 2 では next)を実装します。 また、 iterator は同時に iterable も実装し、自分自身を返すようにします。 これにより、 for 文などは「イテレータを取得しそれをイテレートする」というシンプルな動作ができます。 iterable と iterat

    iterable と iterator - methaneのブログ
    korin
    korin 2013/10/29
  • ropevim を使う - methaneのブログ

    インストール に続いて、実際に rope を使い始めてみます。 とりあえず Flask アプリを題材に環境を作ってみます。 準備 $ mkvirtualenv flask $ pip install flask $ mkdir hello $ cd hello app.py を作ります import flask app = flask.Flask(__name__) @app.route('/') def index(): return 'hello world.' if __name__ == '__main__': app.run() プロジェクトのセットアップ :RopeProjectConfig というコマンドを実行すると、プロジェクトのルートディレクトリを聞かれる (デフォルトでは .) ので、そのままエンターキーを押すと、こんどはプロジェクトを作るかどうか (0. yes 1.

    ropevim を使う - methaneのブログ
  • Chef-solo の代わりに fabric を使う - methaneのブログ

    Fabric は ssh 経由でリモートをゴニョゴニョするツールなので、デプロイツールとして見られがちですが、 cuisine など冪等な操作をサポートするライブラリを組み合わせれば手軽な構成管理ツールになります。 chef-solo に比べてターゲットとなるマシンへのインストールが不要なので vagrant と EC2 の Amazon AMI で同じように home ディレクトリを構築するようなスクリプトを書くことも可能です。 また fabtools を使えば、簡単に vagrant を対象にすることができます。 インストール: $ pip install fabric fabtool cuisine fabfile.py を作ります (サンプル): 使い方: $ fab vagrant package_upgrade setup_devtools # 開発マシンにいつもインストールし

    Chef-solo の代わりに fabric を使う - methaneのブログ
    korin
    korin 2013/02/05
  • Python で TDD してみる - methaneのブログ

    RSpec の入門とその一歩先へ がとてもよい記事だったので、 Python で写経させてもらいました。 https://github.com/methane/pytest-tut Ruby コミュニティと Python コミュニティの考え方の違いも見えて面白いと思います。 環境は Python 3.3 で、実行には py.test コマンドを使いましたが、 py.test の機能は特に使っていないので nose でもなんでも大丈夫です。 ファイルの作成 まずは空の実装とテストを作ります。 message_filter.py class MessageFilter: pass message_filter_test.py 最初のテストを書く py.test は .should といったメソッドを勝手に生やしたりはしません。普通に assert 文を書きましょう。 --- a/messege

    Python で TDD してみる - methaneのブログ
    korin
    korin 2013/01/10
  • Python のカッコ無いところを紹介してみる - methaneのブログ

    Haskellのカッコいいところを紹介してみる をみて、 Python と比較してみようと思います。 以下、 heading は上記記事の heading の引用で、 Python のことではなく Haskell の特徴です。 数学英語の知識で「読める」表現が多い 一応、 instanceof など多くの2引数関数が、 infix で書いたら左に来るものが第一引数というルールを守っているので、頭の中ではそれで引数の順序を補完して、 if instanceof(x, int) は "if x is instance of int" と読んでいます。引数の順序がどっちだっけ?と迷うことはほとんど無いです。 しかし残念ながら Python は中置記法はありません。構文をシンプルに保つ方を取っているんでしょうね。 import Data.List import Data.Function xs

    Python のカッコ無いところを紹介してみる - methaneのブログ
    korin
    korin 2013/01/04
  • s.decode('utf8') よりも unicode(s, 'utf-8') の方が速い - methaneのブログ

    http://groups.google.com/group/comp.lang.python/browse_thread/thread/314a3043ea63319f/ unicode vs s.decode unicodeはLOAD_GLOBALで、s.decodeはLOAD_ATTRでスタックに積まれる。で、LOAD_GLOBALの方が速い。 さらに言えば、何度もデコードを行うのであれば u = unicode のようにローカル変数にするとさらに速くなる。LOAD_ATTRやLOAD_GLOBALは最適化で消すことが出来ないので、明示的にローカル変数に束縛することはCPythonに限らず有効な手法だ。 'utf8' vs 'utf-8' 単なる1タイプの問題だけど、内部的には 'utf-8' が利用されており、 'utf8' を使うと 'utf-8' だと判断するのに1クッション必

    s.decode('utf8') よりも unicode(s, 'utf-8') の方が速い - methaneのブログ
  • 1