すなぶろ

Pythonistaを目指しているつもりが、Hyのおかげで無事脱線。Clojurian目指すことになりました。

Pythonでバイナリファイルをnバイトずつ取り出したかった

  • やりたかったこと
    • 4バイトずつ取り出す
    • トルエンディアンでunsigned intに変換する
    • リストにぶちこむ

read(), struct.unpack()などでできそうな気はしたんですが、Pythonっぽいやり方ないのかなと探した結果をメモしておきます。オーバーヘッドなどを考えると最適解ではないと思うので、ビッグデータには向いていないはずです。

続きを読む

IPythonにモジュールを自動リロードしてほしいとき

  1. IPython上でモジュールをimportする。
  2. コードスニペットを書いてテストしてみる。
  3. エディタでモジュールを書き直す。
  4. 反映させるにはIPythonごと再起動する必要がある。
  5. 「なんで?」ってなる。

では、自動化を始めましょう。

続きを読む

ディープラーニングするPython製の将棋AIを見つけたら2 years ago

AlphaGoってどのくらいの強さなんでしょう。とりあえずべらぼうに強いとは聞いたんですが、囲碁にまったく明るくない私にとっては、ドラゴンボールにおける「宇宙一強い」くらい現実味のないふわふわした印象です。

そんな私にもわかることはあって、なんでも『ディープラーニング』という言葉を世界的に有名にしたらしいですね。『深層学習』って言うと、むしろ漢字なのに意味が遠い気がします。

どこの国でもそうですが、あまりにも文化や常識からかけ離れたものであればあるほど、名前をそのまま取り込む傾向にあるように思います。例えば日本発祥のmai waifuとかwapaneseとか。

私は将棋が好きなので「マシンでディープなラーニングをするショーギ・インテリジェンスがあればプレイできるのに」などと今風なことを考えていたらありました。それもPython製の、まだ開発版のAIが。

続きを読む

AIが人類を超える日は来るの?→もう来てるよ

f:id:sandmark:20171020155324j:plain

先日買い物に行きました。ごま油が欲しかったのですが、目の前にあったのは

  • 298円のごま油(250g、セール中)
  • 378円のごま油(340g、通常価格)

の2つ。私は安ければ何でも良いのですが、オトクなのはどちらだ?と考えたとき、暗算が苦手なのですぐに答えが出ません。そこでGoogleアシスタントさんにご登場願いました。

  • 「250グラム298円のごま油と340グラム378円のごま油、安いのはどっち?」
  • 「お調べしました」
  • 「えっ」
続きを読む

unmoをsetup.pyを使ってパッケージにしてみた

Pythonのパッケージと言えばsetup.pyです。依存関係も解決してくれるし、必要ならwheelを使ったプリビルトパッケージも含めることができます。

でも書くのが面倒くさいと思ってずっと放置していたんですが、先日知人にUnmoを試してもらおうと思ったら思いの外手間がかかりました。知人がコマンドプロンプトに明るくないのも手伝って、

  • pip install dillして」
  • 「ぷっぷ……なに?」
  • 「ぴっぷ いんすとーる でぃる」
  • 「ぴっぷい……?」

などという珍妙な会話に。二度あの会話をするくらいならsetup.pyを書いたほうがずっと楽だと気づきました。

続きを読む

Pythonのテストで悩むあなたへ送るnoseフレームワーク

f:id:sandmark:20171017200859j:plain
nose = unittest + coverage + doctest + and more!

前回はデコレータを使ってコードのインデントを浅くし、ボイラープレートとなっていた繰り返し処理をひとつにまとめました。しかしその際、「挙動が変わってしまったらどうしよう」と怯えながら書き換えていたのも事実です。

sandmark.hateblo.jp

今回はユニットテストという命綱を作ることで実装に専念できる環境を整え、また中途半端なリファクタリングもどきによってバラバラになった感のある仕様をまとめてみます。

教科書はいつものスマパイです。

続きを読む

Pythonのデコレータをイチから展開・解説してみた 【あれ? ただのクロージャじゃん】編

f:id:sandmark:20171016071130j:plain

前回のコードは思い返すだけでも寒気がするほどひどいものでした。そこで今回はPython固有の機能であるデコレータを使って、ちょっとPythonっぽいコードに変更します。

sandmark.hateblo.jp

このデコレータ、LispHaskellのように関数や処理を頻繁に渡す言語に慣れ親しんだ人なら比較的すぐに理解できると思うのですが、そうでない場合は難しく感じるかもしれません。しかし理解してしまえば「なんだそんなことか」といったものなので、もちろん乱用は禁物ですが、適宜使っていくことで明らかに読みやすく宣言的なコードを書くことができます。参考: PEP 318

続きを読む