So-net無料ブログ作成

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

「すらすらわかる Python」と「いちばんやさしい Python の教本」 [Python]

ス>ラスラわかるPythonいちばんやさしいPythonの教本 人気講師が教える基礎からサーバサ
イド開発まで (「いちばんやさしい教本」シリーズ)








同時期に2冊の Python の入門書が出版されるらしい。それぞれ、の違いとしては以下のような感じかな。

スラスラ

- クラスを作るなど、多くの Python の機能を説明してない
- 読み物っぽくなっていて、スラスラ読める
- 説明するところを極力減らして、最初にプログラミングをするときにくじけないようなしている
- 役に立つプログラムを書くというよりは、まずはプログラミングとは何かを解説している
- レビューした

いちやさ

- カラー刷りでわかりやすくしようとしている
- 外部パッケージの説明も少しある
- スラスラよりは説明の範囲が広い(bot, Webプログラミング・・・)
- でも、やっぱりクラスを作るところなど説明しないで極力、説明する分量を減らそうとしている
- リスト中のスペースの表示が記号でわかるようになっているのがわかりやすいかも
- 自分の所属している会社が書いた

どちらも、かなり初心者向きで、
- スラスラは読み物っぽく、最初のプログラミングでくじけないようにしている
- いちやさはビジネスマンの読む Office解説本みたいなテイストになっている
という微妙な違いがあって、どちらが良いかは一概に言えなくて、本屋で見て比較してから買ってもらえると良いと思う。

職業プログラマーとして Python を書くのであれば、内容はまったく不十分。
しかし、自分でちょっとデータ処理をしたい、既存のライブラリーを使いたい、ということであれば、データ構造にリストと辞書があって、関数が定義できれば十分といえる。
クラス定義などの説明をざっくり省略することでわかりやすくしようというアプローチは僕にとっては目からうろこだった。
そういう本が2冊も同時に出るっていうのは、Python の裾野がものすごく広がっているんだなぁー、と思ったことであった
コメント(0) 
共通テーマ:日記・雑感

Python Boot Camp in 愛知 [Python]

全国47都道府県制覇を目指して Python Boot Camp が始まったとき、故郷の愛知で行われるときに、地元の人で足りなかったら手伝いたいなと思っていた。

名古屋は都会なんで、いつかはやる人いるだろうなと思っていたが、企画してくれる人がいて開催されるはこびとなった。さすが都会。
https://pyconjp.connpass.com/event/60165/
最初予定していた TA の申し込みはすぐにいっぱいになったが、TA が増えたら、参加者枠を増やすということだったので TAとして参加することにした。
自分が TA をすることによって参加できるひとが増えたなら良かったと思う。

初心者は、ちょっとした typo で行き詰ったりするので、そういうときに、ちょっと聞いて解決できるような、こういう形式のセミナーはいいなと思った。
(教える人間を多めに用意しないといけないのが大変だけど)

このイベントが(Python に限らず)プログラミングをする、いいきっかけになるといいし、このイベントが自分で勉強できるきっかけになるといいなぁと思った。



コメント(0)  トラックバック(0) 
共通テーマ:moblog

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