So-net無料ブログ作成
検索選択

Pure Python の redis client [Python]

このエントリーは
(第71回)Python mini Hack-a-thon の記録です
https://pyhack.connpass.com/event/45135/

色々なデータベースの pure python のドライバーを書いてきましたが、
そろそろネタが尽きてきたので、redis のクライアントを書き始めました。

[インストール]
How to Use Redis with Python 3 and redis-py on Ubuntu 16.04
https://www.fullstackpython.com/blog/install-redis-use-python-3-ubuntu-1604.html

macports の場合は
sudo port install redis
sudo launchctl load -w /Library/LaunchDaemons/org.macports.redis.plist


[コマンド操作について]
redis-cli コマンド操作まとめ
http://qiita.com/rubytomato@github/items/d66d932959d596876ab5
redis入門 データ型とその簡単な操作について
http://www.yukisako.xyz/entry/2015/05/10/021400
3分でRedisのpub/subを使ってみる【redis】
http://otiai10.hatenablog.com/entry/2014/05/04/112426

[プロトコル]
Redis Protocol specification
https://redis.io/topics/protocol
プロトコル仕様
http://redis.shibu.jp/hacker/protocol_spec.html
RESP (REdis Serialization Protocol)の調査
http://qiita.com/nus/items/374ad5869f471da5b5cf

上記の URL を元に、最も基本的な文字列(バイナリ)データの get/set ができるあたりまでできました
https://github.com/nakagami/toyredis

エラー処理できてないし、未対応のコマンドがいっぱいあるので、そこらへんをある程度改善したらリリースしようと思います。
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PyConJP 2016 に参加した [Python]

https://pycon.jp/2016/ja/

21日, 22日の Conference と、24日の Sprint に参加した。

いつも事前に Conference で、どれを聞こうか迷っているのだが、今回もいつものごとく、その時間にそこらへんで会った人に話こんでいたりして、結局、あんまり聞いてなかった。
それはそれで久しぶりにあった人たちと楽しい話ができてよかった。
きっと、来年もそんなだろうなぁ。

毎年、基調講演は聞くようにしている

Jessica McKellar のキーノートは、ダイバーシティーとか、コミュニティーとか、まあ、そんな感じだったが、Jessica は大学で化学を学んでいて、大学の CS の時間にプログラミングを始めて、その時点で子供の頃からコードを書いていた人たちと比べて劣等感があった。しかし・・・というような話があって、 kameko さん見るべき、と思った。

Andrey Vlasovskikh のキーノートは、サンプトペテルブルクの紹介から始まって、メインのテーマは Python3.6 と型ヒントかなー、という感じだったが、Andrey のトークと関連するセッション(日本語含む)の紹介がされていて、興味を持った人がそのセッションが聞けるようになっていて非常に良かった。
後で聞いたところ google translate で、日→英に翻訳して概要をつかんだあと、1日目に対象のトーカーの人に話を聞きにいったりしていたそうだ。すごい。

今回は初めて僕も発表することができた。
https://gist.github.com/nakagami/bfbe98d62377f3f4554121ab161ae8c9
資料は多めに用意したつもりではあったが、半分も話すことができなくて、せっかく用意した資料の無駄になった部分が多くてちょっと残念だった。別の機会に話してない部分だけで発表だと面白くないんだよなー。
ただ、資料の中の最も話したいところを45分に納めることができてトークとしては、だいたい満足な出来だった。


24日のスプリントは、僕のトークと関連して、カレーめし先輩とマンツーマンで PostgreSQL のネットワークプロトコルを16進ダンプして見るというテーマに取り組んだ。
カレーめし先輩が minipg のソースを丁寧に見てくれたおかげで、よいコードレビューになった
https://github.com/nakagami/minipg/pull/2


22日の LT の、走るルーターの発表を見て、 micropython が、思っていたよりも CPython に近いことを知ったので(そして、手元の Ubuntu で micropython をコンパイルして動くことがわかったので)
https://speakerdeck.com/puhitaku/cpython-vs-micropython-on-embedded-linux
スプリントの合間に minipg.py を魔改造して micropython で動く micropg.py を書いた
https://gist.github.com/nakagami/a6626ed2d954b8b04548c52369be85c3
主に、 micropython では持っていない型に変換していたところを文字列のままにしておくようにした。

24日のスプリントが、今年の PyConJP 2016の最後のイベントのはずだったが、俺たちの闘いはまだ終わってなかった。スプリントのあと、みんなで飲み会に行って、紆余曲折の末、最終組で朝3時半まで飲んだ。僕以外のメンバーは
- @wolf20xx
- Andrey (ロシア人)
- ヨナス(日本語の喋れるスイス人)
- 南米(アルゼンチンだっけ?)の人
- 台湾の人
海外から来た人、朝まで飲むとか頑張り過ぎ
英語は苦手だけど全員が共通に理解できる言葉が英語しかないので仕方なかった
- 北野武とバトルロワイヤルは有名
- 日本のアニメで一番有名なのは攻殻機動隊(どうも、見てないのは僕だけっぽい)
- ドイツの香川はスイス人に有名
- ロシアにいたことある本田はロシアで有名
- 南米では高原が有名(忘れてたよ)
- 全会一致でオノ・ヨーコは有名
- 野球は(やっぱり)ヨーロッパと南米の人には全く興味なし(なので、イチローはヨナスしか知らない)
などということがわかった。Python の話はしてない

ブログ(これ)も書いたの、僕の PyConJP 2016 がようやく終わった
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Hastings 兄弟とお昼ご飯を食べた [Python]

先週の土曜日に Python mini Hack-a-thon #64 があって、Python3.4 と Python3.5 のリリースマネージャーだった
Larry Hastings さんと弟の Steve Hastings さんが来た。
日頃から Python を使っている人間からしたら最大級のロックスターな
わけだけど、僕はあんまり OSS デベロッパーの有名人知らないし興味もない。
当然 Larry さん知らないし、英語も標準的な日本人並にしかできないので、会話を交わそうという気はなかった。

ただ、お昼を、同じところに行くことになって、そこで英語ができないからといって遠巻きにするのは、
わざわざ日本に来てくれた人たちに失礼だろうと思って、片言ながら頑張って少し話をした。

前日は東京ディズニーシーに行っていて、その他では、日本の食べ物(ラーメンとか焼き鳥とか)を食べ歩いていたようだった。
前日は喜多方ラーメン。
シアトルには山頭火があるそうで・・・って僕よりも日本のラーメンに詳しかった。
シアトルは、日本人が住みやすいことで有名だけど、日本の料理を出すお店はあまりないそうな。
ただ、(なぜか)テリヤキを出すお店がいっぱいあるそうな。

来たのは四川の担々麺のお店だったけど、よかったかな。
非常に申し訳なかったのは、Hot な食べ物を所望していたのに、僕とのコミュニケーションが
不十分で、長家の定食、青椒肉絲(だっけかな?)があまり辛くなかったこと。
マーラー担々麺をお勧めしておけばよかった。

「Suica (Pasmo)便利だよー。電車も乗れるしコンビニで買い物もできる」
という話をしたら、その日の帰りに shimizukawa さんと Pasmo を買いに行ったらしい。

Larry さんが
「Python3 つかってるか?」
と聞くので
「Python2 だ。仕事ではね」
と言って、Steve さんが
「まあ、仕事ではそうだよね」
みたいなのが唯一の Python についての会話だった。
全体としては、会話の内容はPython 関係なかった。

そういえば、
「日本でマクドナルド以外の(日本らしい)ハンバーガー屋はないか?」
と聞かれたので「モスバーガーというのがある。でも、ここら辺でどこにあるか知らない」
という話をした。日本案内としては非常に心もとないし不親切だった。
無事モスバーガー食べられたろうか?

うまくコミュニケーション取れなくて申し訳なかった。
日本好きなオタクな兄弟として日本での良い思い出の一部になってくれたら良いのだけど。
僕も海外に行ってみたいとか英語を勉強しよう・・・とは思わないが、日本に来る外国人にはできる範囲で親切にしたいもんだと思った。
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Python で文字列の数字部分と数字じゃない部分の集まりで分割したい [Python]

会社の Slack で質問して、いい回答が出たけど、忘れちゃうのでメモっておく

"ab123d45fgh67" -> ["ab","123","d","45","fgh","67"]

みたいに、文字列を分割して文字列の配列にしたい
itertools を使う例と re を使う例が出た
>>> import itertools
>>> [''.join(it) for _, it in itertools.groupby("ab123d45fgh67", str.isdigit)]
['ab', '123', 'd', '45', 'fgh', '67']
>>>

>>> import re
>>> re.findall(r'(\d+|\D+)', "ab123d45fgh67")
['ab', '123', 'd', '45', 'fgh', '67']
>>> 


やっていることはなんとなくわかるが、次にやりたくなったときにメモ残しておかないと再現できない自信がある

python2.7 でも python3.5 でも動いた。 ちょっとびっくり。
str.isdigit って渡しかた 3.5 でもできるんだな
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

リクルートテクノロジーの自動要約API [Python]

@shinyorke さん経由で Python の自動要約API の存在を知る
http://blog.recruit-tech.co.jp/2015/10/30/summpy-released/

GitHub のリポジトリは https://github.com/recruit-tech/summpy
python2.7 で、以下のパッケージが必要とのこと

- numpy
- networkx
- scikit-learn
- pulp
- cherrypy
- MeCab

自分の Ubuntu14.04 の環境で、できるだけ pip install でインストールした。
古いバージョンのものもあったので、それは pip install --upgrade で最新にした
(自分の環境では、 --upgrade する前は "scipy distance metrics do not support sparse matrices." と出てた。さっぱりわかってない)

MeCab(python-mecab)は、pip でインストールするのを早々に挫折して apt-get でインストールしたのだが、辞書を EUC-JP から UTF-8 にする必要があったため、 mecab コマンドも apt-get でインストールした。
そこらへん、まとめて http://mglab.blogspot.jp/2008/06/mecabpython.html あたりが参考になった。
結局、 Mecab 関係のインストールと設定は

$ sudo apt-get install mecab mecab-ipadic mecab-utils libmecab-dev
$ sudo /usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic \
-o /var/lib/mecab/dic/ipadic -f euc-jp -t utf-8 -p
$ sudo apt-get install python-mecab

こんな感じ。

とりあえず動くのだけ確認したけど、みんな、 WebAPI よりは、ライブラリ(pypi からインストールできるパッケージ)になっているほうがうれしいんじゃないかなと思う。
もちろん、使用例として WebAPI の実装があるのはうれしいんだけど。


残念ながらライセンスの表記がないので使いづらいなぁ

(2015-11-05 追記)
MITライセンスになってた。すばらしい
https://github.com/recruit-tech/summpy/commit/cec00ace472ba8a35279de0195ee96bab54a701a
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PyCon JP 2015 に参加した [Python]

PyCon JP 2015 にどういうセッションがあったかはこれを見るとよい。
http://togetter.com/li/885210
(メディアスポンサーとしてまとめてくれた toggetter さん、すばらしい)

僕自身は、年々セッションを聞く時間が減って、今年は基調講演を含めて(必ず入れる)メインカンファレンスフォールの幾つかのトークしか聞いてない。
2日間、会場にはオープニングからクロージングまでいたのに。

まあ、ビデオがあるのでいつでも見られるし(実際には見ないけど)
「誰か、知り合いはいないかな・・・」
と会場内をうろうろするので、セッションを聞くよりも疲れる。

自分の聞きたいトークの会場に我先にと集まるひともいれば、ただ知り合いと世間話をするためにそこらへんをうろうろするひともいる。
本当は、もっと知らない人と話したいんだけど、そういう勇気があまりないので、来年は全員の名札に twitter のアイコンが入ってるといいな。

別にプログラム担当の方が狙っているわけではないのに、毎年すこしずつ集まる人たちの毛色がちがって面白い。
Web フレームワークの時もあるし、統計解析の人たちが多い時もあった。
今年は、女性コミュニティーの人たちと、(数値解析の中でも)pandas 関連のトークや LT が多かったように思う。

ボランティアスタッフの皆さんも、いつもの人も入れば、新しい人もいて、新陳代謝があって、このままどんどん入れ替わって行って、イベントが長く続くといいなぁ、と思っている。

今年は去年と同じ会場だったので、道間違えたりしなかったけど、そろそろ広さ的に厳しいかな、と思った。メインホール以外は、僕のような出遅れ気味の人間が入れないくらい人いっぱいのセッションが多かったし。
ランチが屋台だったり、コーヒーが無限になったりして、運営上の新しいチャレンジがあってよかった。
食べ物だけじゃなくて、チュートリアルや子供向けワークショップとか。
子供向けワークショップは、形を変えてもよいので来年も続いて欲しい。
ロジ的に厳しいものもあるが、そのなかから良いものだけ取り入れて来年に繋がるといいなぁ。

販売チケット数を増やさなければいいんだけど、もっとたくさんの人と会えると楽しいと思うし、いい会場があるといいなぁ、と思う。
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

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) 
共通テーマ:日記・雑感