So-net無料ブログ作成

DjangoCongress 2018 [Python]

昨日行われた DjangoCongress 2018 の Day 1 にSpeaker として参加してきた

https://djangocongress.jp/

人前で緊張するということはないけれども、
- 発表自体が尺に会うか(ものすごく時間が余ったり、時間が足りなくて話したいことが話せないのではないか)
- トラブルで画面に出せなかったりネットワークが使えなくて発表が台無しにならないか
が気になって、45分のトークは緊張した。

発表内容はこれ https://gist.github.com/nakagami/098db7387d78ab9c6aa85d77a0eeecf5

後半は駆け足になってしまったが、それも尺が余った場合に丁寧に話そうと思って用意していたものなので、自分的には満足のいく発表ができた。
内容は、 PyCon JP の CfP では通らないようなニッチな内容だったので、発表する機会が与えられて良かった。
終わったら、どっと疲れが出て、俺ってこの発表がこんなに重荷になってたんだなぁって自分で驚いた。

他の人のトークも、雑なアニメコラージュでうけ狙いみたいなのがなくて良かった。
みな「内容は雑でたいしたことないけど、有名人だから」みたいな発表ではなかった。そういう CfP があったのかどうか知らないけど。

自分のもほかの人のも、トーク中に聞いている人が twitter にハッシュタグ #djangocongress 付きで投稿してくれている人が多くいてよかった。トークの様子もわかるし、盛り上がっている感じも伝わるし。

なにより良かったのは、スタッフの人たちが終わったときに口々に「良かった」と表明していたことだった。
ボランタリーで無報酬でやって、達成感はあるものの自分の聞きたいトークも聞けなくて燃え尽きて終わってしまう→イベントが開催されないとなったら残念なので。

結局、100人という規模で食事とかノベルティとかいろいろしないで運営の負担が少なかったのが良かったと思う。
もしよかったら来年もできる範囲で開催されるといいなぁ、と思う。

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

Windows + Python 3.6 の msys2 + minitty で utf-8 [Python]

気が付いたら、Python3.6 では、Windows で、コマンドプロンプトとファイルシステム(フォルダー名、ファイル名)のデフォルトの encoding が utf-8になってた

https://www.python.org/dev/peps/pep-0528/
https://www.python.org/dev/peps/pep-0529/

以下のようなーコードで
import sys
print(sys.stdin.encoding)
print(sys.stdout.encoding)
print(sys.stderr.encoding)

print('あいうえお')
コマンドプロンプト上で
utf-8
utf-8
utf-8
あいうえお
こんな感じになった。

すばらしい

しかし自分が普段使っている Git for Windows (Msys2) + mintty で、
上記と同じWindows にインストールした python3.6 で実行すると
cp932
cp932
cp932
▒▒▒▒▒▒▒▒▒▒

となってしまう。

・・・結局、環境変数に

export PYTHONIOENCODING=utf-8

を設定したらutf-8 でうまく表示できた。

まだ、minitty で interactive shell が動かないんだけど、コマンドプロンプトでは interactive shell ちゃんと動くし自分の Windows 環境がだいぶ良くなった。

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

Python Boot Camp in 柏の葉 [Python]

故郷愛知 http://nakagami.blog.so-net.ne.jp/2017-07-29-1 に続いて、26年間暮らす千葉(の柏の葉)で開催された Python Boot Camp in 柏の葉に TA として参加した
https://pyconjp.connpass.com/event/81251/

このイベントの TA は
「なんか、うまく動きませーん」
と質問されたときに、

- python3 のつもりで 2.7 が動いてた
- pip install を sudo 付きで実行してた
- エディターをインストールしてない

と、トラブルのバリエーションが多くて、それを限られた時間で解決しないといけないので緊張する。


愛知の時は、環境が動かせなくて、ほぼ座学になってしまった人がいたが、今回は、まったく Python が動かせなかった人はいないようだった。ほっとした。

ハンズオン中に受講者の人が
「これは、ひとりではできないよなぁ」
ってぼそっと言ってた。

最初の一歩の手助けができて、このうちの何割かでもプログラマー仲間になってくれるとうれしい。

柏の葉キャンパスは、都会で学際都市で ITベンチャーがいっぱいあって産学共同で、その象徴が KOIL ・・・っていうイメージだったけど、話を聞くと、あくまでも千葉(田舎)で、新宿、渋谷とは差があるんだなぁという感じだった。
KOIL の中はきれいでおしゃれだったけど。
東京にはイベントがあって、いざとなれば東京に行けばいいじゃん、って思うけど、心理的なハードルがあるようで、今回柏であるから来ましたっていう人が多かった印象。
千葉開催が決まったときに 「柏?都会じゃん」と思ったけど、マインドは田舎だった。
僕が何かの助けになればよかった。

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

Python で日本語文章要約 [Python]

最近、諸般の事情により、
「自然言語処理でなんか面白いことできないかなー」
って調べてて
「そういえば以前に、どっかの大学院生が日本語要約を python でやっててソースを公開してたな」
ってことを思い出して探したんだけど・・・
https://recruit-tech.co.jp/blog/2015/10/30/summpy-released/
↑これだった。
公開した直後以降はソースコードの更新は行われず、python2.7 でしか動かないようだった。残念、というかもったいない。Python2.7 でしか動かないものは、今後使われなくなってしまう。

MIT ライセンスなので、結果のよさそうな LexRank アルゴリズムのエッセンスの部分を1ファイル(1モジュール)に抽出して Python3 で動かせるようにして gist に貼っておきます。
https://gist.github.com/nakagami/92c0904ac9c1a98ee4ff8d8fb644fd69
正直、アルゴリズムの数学的な意味などさっぱり分かっていないけど・・・

自然言語処理研究者でない人(例えば自分)向けの LexRank による要約についての
ざっくりとした日本語解説は、これが比較的わかりやすいかと思います
https://qiita.com/takumi_TKHS/items/4a56ac151c60da8bde4b

jabstract.py をダウンロードして
import jabstract
text = '複数の文がある、ながーい文章'
sentences = jabstract.summarize(text, sent_limit=10)
print(sentences)

という感じで要約できるんだけど、ちゃんと動いてるかな?
必要なパッケージとか、関数のパラメーターとか、詳しくはソースコード読んでください。

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

PostgreSQL とpython(pytz) のタイムゾーン [Python]

(自分用メモ)

http://blog.untrod.com/2016/08/actually-understanding-timezones-in-postgresql.html

- PostgreSQL は日付、時刻のデータ型に、タイムゾーンを持てるものと持てないものがある
- カラムの定義で with time zone か without time zone かを指定する
- システムテーブル pg_timezone_names にタイムゾーン名称と offset を持っている

http://en.proft.me/2014/11/2/examples-pytz-python/

- python の datetime も timezone の指定ができる
- タイムゾーンデーターベースは python にはないので pytz を使う
- pytz でタイムゾーン名称から tzinfo を生成できる


pytz は定期的にリリースされている
いろいろな都合で時差は変わっちゃうけど PostgreSQL は政治的な都合で時差が変更になるのはキャッチアップできないよな。
サマータイムは対応できてるのかな?

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

micropython から PostgreSQL に接続する micropg [Python]

この記事は MicroPython Advent Calendar 2017 https://qiita.com/advent-calendar/2017/micropython の7日目の記事です。

PostgreSQL とクライアントがネットワークを介してやりとりするデータは割と簡単で、習作としてpure python のデーターベースドライバを書きました。
https://github.com/nakagami/minipg

書いてみて、micropython で動くようにできるのでは?と、この minipg を改造して micropython で動作するようにしたのが https://github.com/nakagami/micropg です。

upip で
import upip
upip.install('micropg')

などでインストールすると

例 にあるように接続できる
https://github.com/nakagami/micropg#example

・・・はずなんですが、自分は Linux 上のmicropython でしか動かしてないので、マイコンボードでの動作を確認していません。
内部では、usocket と ubinascii しか使っていないので、動作しそうではあるんですが、マイコンでの動作確認をしてもらえると嬉しいです。

中身は、1ファイルだけ https://github.com/nakagami/micropg/blob/master/micropg.py のモジュールなので、このファイルを import できる場所に配置してもよいです。

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

Django CyMysql backend の Django 2.0 対応 [Python]

この記事はDjango Advent Calendar 2017 https://qiita.com/advent-calendar/2017/django の4日目の記事です。

Python の mysql 用データーベースドライバーってたくさんあるのですが、CyMySQL https://github.com/nakagami/CyMySQL も、そんな(マイナーな)ドライバーのひとつです。

PyMySQL https://github.com/PyMySQL から fork したもので、Cython がインストールされていれば速く、インストールされていなくても pure python で、それなりに動く、というものです。

Django に対する、CyMySQL 用のデーターベースバックエンドもリリースしていたのですが、Django 2.0 のリリースにともなって、 Django 2.0 用の CyMySQL 用のデーターベースバックエンドをリリースしました。

https://pypi.python.org/pypi/django-cymysql/2.0.0

pip install cymysql django-cymysql で、cymysql と django-cymysql をインストールして、settings.py の DATABASE の ENGINE に django.db.backends.mysql の代わりに mysql_cymysql と入力すると使えます。

django.db.backends.mysql + mysqlclient と比べて機能面で良いところというのはないんですが、
「なんかよくわからないけど mysqlclient のインストールがうまくいかないので django.db.backends.mysql が使えない」
「ビルドするためのコンパイラや libmysqlclient-dev をインストールしたくない」
という人に使ってみてもらえると嬉しいです。


ちなみに、今までは、
import pymysql
pymysql.install_as_MySQLdb()

という処理を初期化時に一回呼ぶと、Django で PyMySQL が使えるという技があったんですが、
https://stackoverflow.com/questions/34777755/how-to-config-django-using-pymysql-as-driver
Django 2.0 のコードの中で mysqlclient のバージョンを判定しているところが入ってしまったので、ソースコードそのままでは動かなくなりました。
(いやいや、その判定いらんやろ)
それで、PyMySQL のバージョン番号がちっちゃすぎるからなんとかしようぜという Issue が、PyMySQL のプロジェクトに上がってて、 https://github.com/PyMySQL/PyMySQL/issues/610
・・・え、そっち?直すなら Django でしょ?という気持ちでいっぱいです。

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

Tokyo Quantopian User Group のハンズオンに参加した [Python]

息子は、数学好きだが、株とか投資とかで金儲けには興味ない(はず)。
ただ、高校の頃、かみさんが買ってきた
「ウォール街の物理学者」
を読んで、物理、数学の専門家が、経済の世界で活躍するのが面白かったようだった。

Tokyo Quantopian User Group で、入門者向けののハンズオンがあるというので
https://quantopian-tokyo.connpass.com/event/71872/
まだ興味あって行ってみたいか?と聞いたところ、行ってみたいというので、昨日、親子で参加した。

Quantopian は、Python mini hack-a-thon 夏山合宿で、どりらんさんのデモを見てて、
https://pyhack.connpass.com/event/55337/
そんな世界があるんかーと思っていた。

前半で、株式売買の解説が1時間ほどあったので、後半の Quantoian の使い方の例では、 python が読めれば PyQ 初心者コースレベルの息子でも、(僕でも)だいたいどんなものかわかって、非常に良かった。
右も左もわからない状態からの、最初の一歩は、講義+ハンズオンの形式は助かるなぁ。
株式売買は知らなくて python が書ける人にはよかったが、株式売買はしていて python でプログラムを書いたことない人は難しかったかもしれないな、と思った。

ハンズオンで用意してくれた例題は、超初心者の最初の例として丁度よい難易度だったと思う。
ネットワーク帯域の関係で、各自がコードを書き換えて試すということは思うようにできなかったが、デモを見ているだけでも十分に分かりやすかった。
ハンズオンの例題のpython のコードに日本語でコメントが入っていたのでフィリップモリスとか SP500 になじみのない我々にもわかりやすかった。
フィリップモリスって、グローバル企業でディフェンシブな銘柄の典型なの?

Quantopian を少しだけ使ってみた感想は
「IDE のキーワード補完が凄い!Web ベースでこんなことできるのか!」
だった。

アルゴリズムを書いて、過去の期間のパフォーマンスを見るという基本的なやりかたはわかったが、こっから、まともなパフォーマンスを示すアルゴリズムを作るまでには凄い差があるな、とも思った。

あとで、 drillan さんが翻訳(途中)の Quantopian チュートリアルの和訳があることを教えてもらった。
https://github.com/drillan/quantopian_tutorial

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

OSC 2017 千葉 [Python]

週が明けたので、先週の土曜日のこと、 Open Source Conference 2017 千葉に行った。
https://www.ospn.jp/osc2017-chiba/
千葉のどこかでやるらしいことは聞いていたが、金曜日まで、何日にどこでやるのか知らなかった。
twitter の TL で、土曜日に津田沼の千葉工大だということを知った。

近いし(千葉のために)少しでも盛り上がるんなら賑やかしに行こうかということになった。気が付いたら人生の半分を千葉で暮らして郷土愛らしきものも芽生えた。

一般社団法人 PyCon JP で、寺田さんが Python Boot Camp の説明をしていて、僕も Python Boot Camp の TA をやったので、隣に席があったので座らせてもらった。
ブースには、いままであまりやってこなかったけど、必要に迫られてPython (Django とか Tensorflow) をやらなきゃいけなくなってきた(なりそう)という人が来ていて、時代の変化を感じた。
もう何年も「Python ってマイナーだよねー」といいながらみんなで Python を書く職場にいたので、感覚がマヒしている。

最後に LT の時間があったので、これまた賑やかしのために参加させてもらったが、千葉工大の上田研の学生さんたちが頑張ってたのが印象的だった。
LT は、痛恨の時間切れで反省点が多いが、資料を整理してここにおいておく
https://gist.github.com/nakagami/292b711d39c368088d90cdb14e968e54
(さめがめと pythonanywhere に全く言及できなかった)

参加者が 100人を超えたようなので、来年もあるかも。
日程が合えば来年も参加しよう。

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

Python でリバーシ(オセロ) [Python]

先日、息子と「人間とコンピューターが対戦するオセロのプログラム」の話をした。

コンピューターが人と対戦するオセロは、僕が中学生の頃に読んでいた電波新聞社のマイコンBASICマガジンに、よく掲載されるテーマだった。
自分が、うっすらと記憶しているプログラムでは、盤の位置によって重みがつけられていて、コンピューターの手番で置ける場所のうち、重みの一番大きい位置に置くというロジックだったと思う。
自分でもプレイしたが、単純なロジックの割には、勝ったり負けたりして意外と強いんだなと思った記憶がある。

あの頃は、ただひたすら雑誌にあるプログラムを入力してカセットテープに save して遊ぶだけだったけど、今だったら、あのプログラム書けそうだぞ、と思った。

インターネットで探せば、解説記事があるだろう・・・と思ったらあった。
http://uguisu.skr.jp/othello/5-1.html

僕が見たプログラムでは、もっと単純な重みづけだった気がするし、次の手の位置の重みだけで判定していたと思うが、ここの解説では、置かれた後の盤上の黒と白の駒の重みの合計の差で判定していて、幾分かロジックが複雑だ。

今の自分なら Python で書くのが一番早いし、駒をカッコよく描画する必要はないんで、コンソールに、駒の位置がわかる程度に print できればいいや。・・・できた
https://gist.github.com/nakagami/7a7d799bd4bd4ad8fcea96135c4af179
(python3 で動きます)

プレイしてみると、なんとなく自分が昔プレイしたコンピューターよりは弱い気がするんだけど、それは自分が強くなったからなのかな?
コメント(0) 
共通テーマ:日記・雑感