Python 3.6 の(個人的に)注目の変更点

Python 3.6b1 がリリースされましたね。(フライング) beta1 ということで、 3.6 に向けた新機能の追加は (provisional package を除いて) 終了です。ただし、仕様が確定したと言うわけではなくて、beta版に対するフィードバックを元に新機能を修正したり、…

Python と Ruby と typing

うーん、structural subtypingとダックタイピングは同じものなんだろうか。— Yukihiro Matsumoto (@yukihiro_matz) 2016年9月8日 https://t.co/5Rv86piThCwikipediaによると似て非なる物のようですね。 https://t.co/VwIg39h5M0— INADA Naoki (@methane) 201…

Python 3.6 に向けて新しい dict 実装の人柱募集

会社のBlogに書いた通り、現在新しい dict の実装を試しています。 また、 shared key を削除して実装を削れた分、別の効率のいい特殊化 dict を実装して、 compact + shared よりも高い効率を狙うこともできます。 今はあるアイデアのPOCを実装中なので、採…

manylinux1 wheel を作ってみる

先日の記事 で紹介した、 manylinux1 wheel を作ってみます。 manylinux1 docker image ビルド環境を Docker image として公開してくれています。 Github manylinux Docker (amd64) Docker (x86) docker pull quay.io/pypa/manylinux1_x86_64; docker pull q…

文字列の先頭への追加に対する最適化を期待していいか?

paulownia.hatenablog.com 文字列型が immutable な言語では、文字列にループで文字を追加していくようなコードは、 Java でいえば StringBuilder などの方法を使えというのが昔から言われていた。しかし、 Java でも Python でも、文字列の右側に追加してい…

Wheel が Linux でもバイナリパッケージに対応しました

PEP 0513 -- A Platform Tag for Portable Linux Built Distributions | Python.org 今まで Windows と Mac では、ビルド済みのバイナリ形式の拡張モジュールを wheel にして配布することができました。 WindowsやMacに比べてLinuxは環境の差が激しいのでバ…

依存するパッケージは厳選しよう

japan.zdnet.com JS界隈が大騒ぎになった事件だけど、こういった事件自体は完全に防ぐことは不可能だと思う。 今回は依存ライブラリが削除されるだけで済んだけど、 npm install するだけで ~/.ssh ディレクトリを zip にしてどこかに送信するような悪質な攻…

GAE が Python 3 に対応しました

今日、 GAE が Ruby と node.js をサポートするという発表がありましたが、実際のところ、今まであった Managed VM が GAE flexible environment と名前を変えたようです。 そして GAE flexible environment の公式イメージとして、 Ruby, node.js などに加…

最近出たPython本2冊紹介

1冊めは入門書。結城さんの Tweet を見て知った。 www.amazon.co.jp プログラミング自体が初めてという人向けの入門書なので真面目に読む気は無いんだけど、応援のために買ってみた。 中身をかいつまんで読んでみたんだけど、例えばよくある間違いのコードを…

miniconda3 が遅かった件

このブログで何度か紹介している TechEmpower FrameworkBenchmarks では、フレームワークごとにテストを Travis で回している。 Python をビルドするときには速度重視で make profile-opt でビルドしたいのだが、ビルド時間が長くなり、 Python 2 と 3 の両…

判りやすいやり方が1つは必要だ -- その1つだけなら最高だね

はじめてのにき(2016-03-10) を見て。 Python の Zen の一つ "There should be one - and preferably only one - obvious way to do it." はよく誤解される。 これはもちろん Perl の TMTOWTDI 「やり方は1つじゃない」に対するものなのだけど、反対の「やり…

Python をビルドするときに LTO (Link Time Optimization) を使う

タイムラインで Ruby が LTO で速くなるという話題を目にしたので、 Python でどう使うんだったっけ?と思って調べてみました。 ちょうど configure オプションに --with-lto を付けるパッチが投稿されていました。 Issue 25702: Link Time Optimizations su…

prompt_toolkit がアツい

とりあえず mycli と aws-shell のスクリーンキャストを見てください。 prompt_toolkit はこのようなリッチコンソールアプリを作るためのライブラリです。 Windows でも動きます。 Jupyter (ipython notebook) を切り離した、コンソール版の ipython も次の…

TechEmpower FrameworkBenchmarks Round 12

Blog: Framework Benchmarks Round 12 - TechEmpower Blog Result: TechEmpower Framework Benchmarks 普段のラウンドは試験的にベンチマーク回して preview という形でMLに公開し、エラーや設定ミスを修正するサイクルを数回繰り返すんだけど、今回はベンチ…

「Go による Web アプリケーション開発」書評

Go による Web アプリケーション開発 を読みました。 (まだ後半はパラパラめくっただけですが) この本は Go のチュートリアルでは無いです。 A Tour of Go とか The Go Programming Language で基本的な文法などは抑えた状態で読むべきでしょう。 この本で最…

Python を速くする取り組み

速い Python 実装といえば PyPy が有名ですが、 Python 3 へのキャッチアップが遅い、 CPython が持っている Python/C API のサポートがまだ弱く遅い、などの欠点があります。 また、 Google の1年プロジェクトだった Unladen Swallow もありました。これは …

CPython の GC チューニング

ISUCON は Go で参戦しているんだけど、複数のチームが Python で予選通過したらしいので、応援のために Tips を公開していこうと思う。 目次 CPython の GC について 統計情報を出力する 第一世代GCの間隔を調整する Out of Band GC 循環参照を見つけて対処…

logger のパフォーマンスについて [Go]

Go の logging ライブラリ、今はとりあえず標準ライブラリの log か google/glog を使っているんだけど、 log は機能不足が、 glog は Google 標準ライブラリなのでフォーマットを調整したり flag 以外でカスタマイズするために fork しないといけなかったり…

X250のLCD交換

情報がまだ少なくて不安もあったけど、無事 X250 のLCD交換に成功しました。 ヤフオクで国内業者から、 X240用の FullHD IPS 液晶パネルを購入。 LP125WF2 (SP)(B1) という液晶が届く。 ベゼルの下側を爪で少し浮かし、あとは指で引っ張ってベキベキ外す。 …

Thinkpad X250 に Ubuntu デュアルブートで遊ぶ

ふるさと納税で X250 が数量限定、寄付額13万円で出ていたので衝動買いしてしまいました。 CPUはかろうじて Celeron ではなく Core i3 ですが、メモリ4GB, WiFi は 5GHz 未対応、500GB HDD、液晶は TN の HD (縦768px) というスペックです。 HDDは256GBのSam…

VirtualBox 5 で利用可能になった Paravirtualization 機能 kvmclock を使う

Oracle に買収されてからずっと 4.x のまま大きな進化が無いのではないかと心配した時期もありましたが、とうとう VirtualBox 5 が出ましたね。 買収後は vagrant や、最近だと boot2docker などで重要度が大きく増しているので、今後の発展にも期待していま…

Python の新しいプロファイラ vmprof が面白い

PyPy 2.6 と同時に、 vmprof という CPython/PyPy 用のプロファイラが登場しました。 私はまだ PyPy では使っていませんが、CPythonのプロジェクトをこれでプロファイル取ってみたらなかなか面白かったので紹介します。 概要 Python にはもともと標準ライブ…

PyMySQLのメンテナにSQLAlchmey開発者のMike Bayer (@zzzeek)さんが参加しました

このブログでも数回紹介していたとおり、今メジャーな Python の MySQL ドライバ3つのうち2つ (MySQL-python の fork の mysqlclient と PyMySQL) を僕がほぼ単独でメンテナンスしている状況でした。 メンテナンスしているといっても、両方とも MySQL-python…

json.dump() は ensure_ascii=False の方が遅かった

Python の標準ライブラリの json モジュールのエンコード機能には ensure_ascii というオプションがあり、デフォルトでは True です。このオプションが真のときは、非ASCII文字を全て "\uXXXX" の形にエスケープします。 ensure_ascii=True の方が安全ですが…

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…

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