So-net無料ブログ作成

PyPy をコンパイルしてみる [Python]

OS を Yosemite にして Xcode の新しいのをインストールしたので、ふと思い立って pypy.org のソースをリポジトリから取得して、コンパイルしてみた

やり方は、これ↓
http://doc.pypy.org/en/latest/build.html
Linux ディストリビューションによって、違うけど、事前にいろいろライブラリーをインストールしとけと書いてある。

Mac OS X の場合
xcode-select --install
だけしとけばよさげ。

んでもって、以下の手順でソースを取ってきてコンパイル。
(pypy3 のリリースされたバージョンをコンパイルしてみる)

$ hg clone http://hg@bitbucket.org/pypy/pypy
cd pypy
hg up pypy3-release-2.4.0
python2.7 rpython/bin/rpython --opt=jit pypy/goal/targetpypystandalone.py

半日くらいかかってpypy-c っていうのができる。
パスが通っているところに pypy-c っていうやつへのシンボリックリンクを貼る

ln -s pypy-c $SOMEWHERE/pypy

$ pypy
Python 3.2.5 (b2091e973da6, Aug 24 2015, 14:34:46)
[PyPy 2.4.0 with GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>>

となる。これでできたっぽい

ちなみに、この pypy でコンパイルしようとすると
pypy rpython/bin/rpython --opt=jit pypy/goal/targetpypystandalone.py
File "rpython/bin/rpython", line 17
print __doc__
^
SyntaxError: invalid syntax

となって、コンパイルに失敗する。
Python2 互換のバージョンの pypy じゃないとブートストラップ作れないようだ
じゃあ、default ブランチはどうなってんの?って思って

$ hg up default
$ python2.7 rpython/bin/rpython --opt=jit pypy/goal/targetpypystandalone.py

ってしてコンパイルしてできたバイナリを実行してみると

$ pypy
Python 2.7.10 (f5e65d929e0e, Aug 24 2015, 23:49:08)
[PyPy 2.7.0-alpha0 with GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin

と、いまのところ python2.7 互換バージョンが開発のメインになっているっぽい。
コンパイルのツールが 2.7ベースだと PyPy3 ベースに変更するの大変そうだな。
きっと、PyPy の開発の人たちには Python3 互換にすることにモチベーションあんまないんだろうなぁ

Python3 系互換の開発版の最新は py3k か py3.3 というブランチを update して使うのがよさげな感じ
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Plone Symposium Tokyo 2015 [Python]

参加した。
http://plone.jp/plone-symposium-tokyo-2015
http://togetter.com/li/835036

参加者 60名程の規模のイベントだったので、せっかくの国際イベントなのに盛り上がるかどうかちょっと心配だったが、 人数が少ないぶん当事者意識の高い参加者でなかなか良かった。

普段の Plone シンポジウムは 150名ほど集まるそうだけれども、アジア極東の国で行われたイベントとしてはまずまずじゃなかろうか。
ボランタリーに集まった運営の人の妹さんが写真をとったり、別の運営の人の奥さんがクッキーを焼いたり、takanory さんや hirokiky がタリーズにコーヒーを買いに行ったりする手作り感あるイベントで、その点でも良かった。

基調講演は Plone5 の新機能の話。
今年の9月頃に出るっぽいが、もう随分前にリリース間近と聞いていたせいか、話としては、どっかで聞いてた気がする。(多分、寺田さん)

僕は Plone 使ってないし見かけることもあまりなくなったけど、コンテンツマネージメントシステムの機能とOSS のエコシステムによる利活用ができるという点で、安定した人気があるんだなぁと思った。
特に、大学の教育に Plone を使っている方々のパネルディスカッションを見て。

Plone の拡張性、カスタマイズ性というのは、引き続き比類ないもののようで、今足りないのは採用事例だけなのかな。

運営としては用意してなかったイベント後の飲み会は25名ほど集まって、なかなかの参加率だった。
(会場近くに急遽大人数で入れるはなの舞があってよかった)
「OSS のイベントに行くと、ロックスターが気軽に声かけてきてくれるんだよー」
みたいな話をアレキサンダーレイチェルさんがしてて、
(んー、でもあなたも僕からしたら OSS のロックスターでないの?)
と思ったりした。
そういえば Mr. Terada も Plone Foundation のメンバーなので OSS のロックスターだった。

コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

はじめての GitHub を観察して [Python]

昨日の
第8回 Pythonもくもく会 @アライドアーキテクツ(恵比寿)
http://mokupy.connpass.com/event/14343/
で、nobolis さんが、はじめての Git で、はじめての Github で英語ドキュメントを和訳して Pull Request を投げようとしていた。

参考にしていた書籍は「GitHub 実践入門」
http://gihyo.jp/book/2014/978-4-7741-6366-6
この書籍の選択は良かったと思う。
(頭のいいひとは、参考書の選択を間違えないなぁ)

「きれいな Patch にしてから Pull Request を出すという流儀もありますが、それは大変なのでとりあえず今日は歴史を修正しないで Pull Request を出せばいいんじゃないですか」
という話をした。
最終的に、とりあえず一回ドキュメントの Pull Request を出していた。
途中で色々試行錯誤していたようだったので、そこまでたどり着いたのはすばらしい。

横で観察していて

- Upstream からの fork
- Fork した自分のリポジトリからの clone
- ローカルリポジトリでのブランチ作成、修正、add、 commit、 push
- 自分のリポジトリから Upstream への Pull Request
- その他、適宜 pull

と、ひとつひとつはコラボレーション(他人の足を踏まずに作業する)のためには意味があることなのだけれども、初めての人のは手順が多くて大変だなあ、ということを再認識した。
GitHub のfork が、Git 的には clone と同じというあたりがややこしい。

いままでは Subversion はおろか、RCS までさかのぼったどんな VCS も使ったことないところからだったから、さぞかし大変だったろう。
(・・・ひょっとして、過去の歴史を知らないほうがわかりやすいのかな?)

最初に EUC-JP で修正したテキストをコミット& push して文字化けしてた。
僕にとっては馴染みのある失敗なのだが、ああいうのを IT業界でないひとが、周囲にいる人に聞かずに一人で解決するのは大変だろうなぁ。

最近、仕事では GitHub にリポジトリがあるという話をよく聞く。
使い方を教えなくても、皆が知っているということはやりやすいことだろう。
気がつくと、GitHub は使えてあたりまえという時代になっていた。
OSS もGitHub にホスティングするものが特に最近急激に増えてきた。
オープンデータやオープンなドキュメントをGitHub に公開している
例もちらほらあって、もうソースコード開発のためだけのものじゃない。

最初に GitHub というサービスを知ったときには、OSS開発者の中の尖った人だけが使うものという印象だったが随分と広がりを持つようになって、僕は全く見る目がないということを思い知る今日この頃

コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PostgreSQL の driver minipg を -m オプション付きで実行できるようにする [Python]

python を起動するときのオプションに -m というのがあって、

$ python -m foo

とすると foo モジュールをスクリプトとして実行します。
・・・とのことですが、もうちょい正確にいうと、 foo がモジュールだったらfoo.py を実行、foo がパッケージだったら foo/__main__.py を実行ということのようです

このオプションを使うことは、僕自身はあまりなくて
python -m SimpleHTTPServer で、HTTP Server が立ち上がるというのと
python -m profile foo.py で foo.py を実行してプロファイル情報を表示する
というのを実行したことがある、程度でした。

・・・が、データーベースのドライバーで、データーベースにクエリを投げた結果が表示できるようになったら、ひょっとしたら便利かな、と思ってやってみました。
こいつ↓を pip install minipg でインストールして
https://pypi.python.org/pypi/minipg/0.5.1

$ echo 'select * from foo' | python -m minipg -U user -W password -D db_name

とすると、クエリーが実行されて結果が標準出力に出力されます

psql コマンドを使えば同じ(以上の)ことはできると思うので、この機能があってどれくらいうれしいかわからないけど、 argparse の使い方と -m オプションで実行される機能のサンプルとして機能を追加しておきます。
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Plone の日本語 Splitter c2.splitter.janome の公開 [Python]

Plone の日本語 Splitter c2.splitter.janome を公開しました。
Plone へのインストールは、ここ↓を参照してください
https://github.com/nakagami/c2.splitter.janome
(・・・といっても eggs に1行追加して buildout の実行だけです)

インストール後の設定については↓ここを参照してください。
http://takanory.net/plone/basic/splitter/
(「日本語での検索設定」の ejSplitter を c2.splitter.janome に読み替えてください)

【Plone を知らない人向けの解説】
Plone は Zope という python 製 Web Application Framework 上に構築された Contents Management System です。
http://plone.jp/
https://plone.org/

来る 6/13, 6/14 に、 Plone Symposium Tokyo 2015 という Plone の国際イベントが日本で開催されます。
興味のある方は参加してみてはいかがでしょう。

【janome を知らない人向けの解説】
janome は、 pure python で書かれた形態素解析器です
http://mocobeta-backup.tumblr.com/post/115843098157/pure-python-janome
python から使う形態素解析器には MeCab を使ったパッケージ mecab-python があるのですが、インストールの難易度が高く障壁になっていました。 janome は

pip install janome

でインストールできます。

【謝辞】
bigram の Splitter である c2.splitter.twocharactersをパクリベースにしました
c2 の namespace のままパッケージを公開することに快諾いただいた CMSコミュニケーションズの寺田さんに感謝します。

コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

janome のソースコードを読む(つづき) [Python]

これは「第7回 Pythonもくもく会 @アライドアーキテクツ(恵比寿)」
http://mokupy.connpass.com/event/13840/ の記録で、かつ http://nakagami.blog.so-net.ne.jp/2015-04-11 の続きです。

前回のこれ↑の直後に、python2.7 と python3.4 の両方で動くような修正の pull request を送ったのだが、今日、それが動いていないことを発見。超恥ずかしい。
言いわけをさせてもらうと python setup.py test でエラーメッセージが出ていなかったので大丈夫だと思っていた。

そのことは @moco_beta さんは(当然ながら)気づいていたようなので、お任せして、もっと真剣にソースコードを読むことにした。

前回のソースコードリーディングのあとで、 http://mocobeta.github.io/janome/ ここに紹介されている「自然言語処理の基礎」の第3章を読んだので、さっぱりわからないから、クラス名が何を意味してるか多少わかる状態からのソースコードリーディングとなった。

fst.py は、何をしているかわからないけど、まあそういうもんだから知らなくてもいいな、と理解した。そんなわけで、今日は一日かけて lattice.py と tokenizer.py の300行弱のコードを読んだ。
・・・が、ほぼ一日にらんでいたが完全に理解するまでには至らない。うーん、難しい。
結局のところ経路探索の問題で、Lattice.backward() で逆順にたどって最小コストのものだけを取得していることはわかった。
しかし、Lattice の、すべての経路をたどる方法がよくわからない。そんなことできないのかも知れないけど、できないのかどうかもよくわからない。
Lattice の内部に snodes と enodes の2つメンバーを持たなければいけない意味もわからない。
どっちかひとつにまとめることはできないんだろうか?

インデックスの始まりが 1〜になっている部分があったり、 Lattice.conn_costs のようにメンバーは宣言されているけど使ってない変数とかあって、参考にしたソースコードの影響とか、試行錯誤した名残があるのかな、と思った。

(2015-04-20追記)
snodes には node の先頭文字の位置が、 enodes には node の最後の文字が入る位置が記録してあって、どちらも必要なようだ。


コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

janome のソースコードを読む(まだ途中) [Python]

これは「(第53回)Python mini Hack-a-thon」の記録です
http://pyhack.connpass.com/event/13504/

前回は mecab をインストールしてソースを読んでました。
http://nakagami.blog.so-net.ne.jp/2015-03-28
・・・が、まあ自然言語解析の素養がないのでさっぱりわかりません。

その後、たまたま Janome という Pure Python の形態素解析器がリリースされました
http://mocobeta.github.io/janome/
今日は、これをインストールしてソースを読みました(まだ途中)

何が書いてあるかさっぱりわからないことには変わりないですが、だいぶ読みやすく分量も少なく、
解析器全体で 1000行以内なので、
「ふーん、この程度でできるんだー」
という感じはしました。
(まだ、mecab のごく一部の機能しかないのですが)
せっかくなので、もうちょっと勉強したいと思います。

Python3.4 でしか動かなくて、これはこれで良いと思っているのですが、 Python2.7 でも動くようにしたらうれしいかな・・・

(追記)
これを書いた直後に python2.7 で動くバージョンのブランチが作成され、パッケージがリリースされてた

コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Python を使う人が増えて [Python]

この前、
「古くから Python をやってる人にとって、最近 Python を使い始めた人のことはどう思ってるんですか?」
という質問を受けた。要するに、古参が「この新参者め!」と思ってないかってことかと。
他の人は知らないが、僕にとっては新しい人が増えて Python が普通のものになるのはとても嬉しい。
昔は、
「nakagami さんに Python とかいうマイナーが言語でスクリプト書かれたけど他の人には保守できない。Perl のがいいのに」
みたいなことを言われたりしたが、今なら Python で書くことに文句を言われないだろう。

数値解析・統計をやっているような自分とは違う分野の人と知り合いになるのも楽しい。
書籍も、良い内容のものが増えてくる。
「PyConJP のチケットさばけるだろうか?いつまで続けられるんだろうか?(参加するだけだけど)」
と心配していたが、今の状況だとチケットはすぐさばけそうだし、セッションのクオリティも維持できる気がしている。

国内のことだけじゃなくて、パッケージングが整理され便利なパッケージが PyPI に登録されたり、PyPy が CPython より速くなったり Cython(旧 Pyrex)が進化したり。
人が増えるということは、単純に色々な取り組みが増えて、新しい発見もあるし便利にもなる。
何か困ったことがありましょうか。

ただ心配なこともある。例えば

- メシを食うためにだけ Python を使っている人が増える
- COBOL 世界の業務のやり方が無理矢理導入される

みたいなことだ。

上は、ループをかけない Java プログラマーや Ruby を知らない Rails プログラマーみたいな人が増えるってこと
下は、「アルファベット2ケタと数値○ケタで機能を表す。番号を採番する担当者がいる」みたいな世界

実際、僕は見てないが
「あー、頑張って Django で書いちゃったのねー」
みたいなのもあるらしいので、その時は近い・・・かも。

コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Jython の開発版をビルドして実行する [Python]

これは、「第5回 Pythonもくもく会 @アライドアーキテクツ」の記録です
http://mokupy.connpass.com/event/11807/

Jython 2.7 Beta4 が最近出ました
http://fwierzbicki.blogspot.fi/2015/02/jython-27-beta4-released.html

次は RC だそうですが、Beta3 が出たのが去年の8月なので、今年中に final がリリースできるかどうか予断を許しません。(Jython の開発は非常にゆっくり進んでいる)
ただ、そろそろプロダクションに使ってもいいレベルだと思っています。コミッターの皆さんは開発版を使っているに違いありません・・・と思うくらいに。

リリース時には、2.5.3 と同じようなインストーラーが用意されるようです。
また、最近のbeta も含むリリースでは Maven Central にも jar ファイルが上がっているので、そこからインストールしても良いと思います(←よくわかってない)

私は開発リポジトリの最新をビルドしています。以下、ビルド手順

【用意するもの】
- mercurial(ソースを取得するため)
- JDK1.7 以降(私は Ubuntu 上の Oracle JDK1.8 を使ってます)
- Apatche Ant

【手順】
$ cd $SOMEWHERE
$ hg clone http://hg.python.org/jython
$ cd jython
$ ant
(これで $SOMEWHERE/jython/dist/jython-dev.jar ができる)
$ export PATH=$PATH:$SOMEWHERE/jython/dist/bin


【実行例】
jython とだけ打つと、インタラクティブシェルが立ち上がります。
java のクラスが import できる以外は、使い方はほぼ CPython 2.7 と同じ。
$ jython
Jython 2.7b3+ (default:301e2a08b0c9, Feb 25 2015, 03:48:16)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_31
Type "help", "copyright", "credits" or "license" for more information.
>>>


【pip install】(追記)
今日知ったが
$ jython -m ensurepip
を実行すると
$SOMEWHERE/jython/bin/pip ができて pure python 2.7 のパッケージなら
$ $SOMEWHERE/jython/dist/bin/pip hogehoge

もしくは
$ jython -m pip install hogehoge
で package hogehoge が jython の環境にインストールできる

$SOMEWHERE/jython/dist/Lib/site-packages にインストールされている

ひえー、すごい
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PostgreSQL のSQL:2006 統計関数((第51回)Python mini Hack-a-thon の記録) [Python]

SQL:2006 で、分散、標準偏差などの記述統計とか相関関数が定義されて Oracle, DB2, SQLServer では使えるっぽい。

個人で気軽に使える環境だと、最近の PostgreSQL は使えるらしい。
https://www.postgresql.jp/document/9.3/html/functions-aggregate.html#FUNCTIONS-AGGREGATE-STATISTICS-TABLE

ということで実行して結果を確認するテストコード書いた
https://gist.github.com/nakagami/755bc066c5e9ee8354dd

仕様を見ると計算方法はわかりそうなんだけど、意味が分からない。
高校の数学や学部の2年までに少しは勉強したはずだが忘れた。

次は、基礎的な統計の勉強をしなくてはいけない。
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感