すなぶろ

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

Twitter の片隅で Clojure 愛を叫ぶ→ヘッドハンティングされた

――これは、地球と Land of Lisp を繋ぐ、新たな架け橋の物語 あ…ありのまま 今 起こった事を話すぜ!「おれは Clojureが好きだとツイートしたと思ったら いつのまにかClojure会社に就職していた」な… 何を言っているのか わからねーと思うがおれも 何をされ…

Clojure 入門者による【チャットボットづくり】 Part5

大幅に更新が遅れてしまいました。実は腰痛で入院していまして、無事手術を終えて先日退院してきたところです。 入院中あまりにも暇なのでずっと Programming Clojure (第三版)を読んでいたんですが、 Clojure の奥義をそんな簡単に伝えていいの? と思う…

Clojure 入門者による【チャットボットづくり】 Part4

前回は respond :random を実装しました。辞書も Map にしようというところまでは決めましたが、それをどう使っていくかに関しては説明していません。 ということで今回は『ランダム辞書の学習』『辞書ファイルの読み書き』をコーディングしていきます。同時…

Clojure 入門者による【チャットボットづくり】 Part3

大切なことを言い忘れていました。このチャットボットの元ネタは、Ruby 向けの書籍『恋するプログラム』で紹介されていた unmo という名前のチャットボットです。今ではあまり聞きませんが、一昔前にチャット専門の AI がちょっとしたブームになった頃、その…

Clojure 入門者による【チャットボットづくり】 Part2

Coders At Work (原著: Peter Seibel, 翻訳: 青木靖)という本があります。第一線級のハッカー達に「エディタは何を使ってます?」「デバッグはどうしてます?」といった基礎的な質問から、「プログラマ全員が読むべき本はありますか?」といった抽象的な質…

Clojure 入門者による【チャットボットづくり】 Part1

最近 Clojure にハマっています。JVM 上で動くバイトコードにコンパイル可能な Lisp 族で、 なんか書いてて楽しい です。とりあえず作者である Rich Hickey のアツい一言をご覧ください(参考1・参考2)。 コンパイラ相手に「型が合っています」と言わせて…

Hy の macroexpand が S 式じゃない→直した

Python へ直接コンパイルできる Lisp 方言 Hy が楽しいです。 しかし Lisp 族のつもりでいると思わぬ落とし穴があったり( let, cons がないなど)するので、 とりあえず macroexpand の結果を S 式にしてみます。 Python 3.6.6 Hy 0.15.0 例えば let をマク…

Spacemacs + Python で快適コーディング環境を整える

最近spacemacsにハマってます。「Spacemacs とはなんぞや」についてはいろんな方々が 解説してくださっているので、その魅力についてはぜひそちらをご参照ください。 かくいう私もそういった記事を読んで手を出し、そのまま戻れなくなった身です。 今回は Py…

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

やりたかったこと 4バイトずつ取り出す リトルエンディアンでunsigned intに変換する リストにぶちこむ read(), struct.unpack()などでできそうな気はしたんですが、Pythonっぽいやり方ないのかなと探した結果をメモしておきます。オーバーヘッドなどを考え…

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

IPython上でモジュールをimportする。 コードスニペットを書いてテストしてみる。 エディタでモジュールを書き直す。 反映させるにはIPythonごと再起動する必要がある。 「なんで?」ってなる。 では、自動化を始めましょう。

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

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

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

先日買い物に行きました。ごま油が欲しかったのですが、目の前にあったのは 298円のごま油(250g、セール中) 378円のごま油(340g、通常価格) の2つ。私は安ければ何でも良いのですが、オトクなのはどちらだ?と考えたとき、暗算が苦手なのですぐに答えが…

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

Pythonのパッケージと言えばsetup.pyです。依存関係も解決してくれるし、必要ならwheelを使ったプリビルトパッケージも含めることができます。 でも書くのが面倒くさいと思ってずっと放置していたんですが、先日知人にUnmoを試してもらおうと思ったら思いの…

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

nose = unittest + coverage + doctest + and more! 前回はデコレータを使ってコードのインデントを浅くし、ボイラープレートとなっていた繰り返し処理をひとつにまとめました。しかしその際、「挙動が変わってしまったらどうしよう」と怯えながら書き換えて…

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

前回のコードは思い返すだけでも寒気がするほどひどいものでした。そこで今回はPython固有の機能であるデコレータを使って、ちょっとPythonっぽいコードに変更します。 sandmark.hateblo.jp このデコレータ、LispやHaskellのように関数や処理を頻繁に渡す言…

Radonで始めるコードリファクタリング 【ランクAよりもPython力をつけろ】編

スマートPythonプログラミング、引き続き読んでます。 sandmark.hateblo.jp 読み進めていると、Radonという循環的複雑度を調査するパッケージが紹介されていたので、今回はそれを用いてsandmark/unmoのdictionary.pyのリファクタリングに挑戦します。 先に言…

Python初心者が中級者になるためのスタートダッシュ 【ググるのは時間の無駄】編

皆さん今日もググってますか? 私のようにRubyから転向したPython初心者にとっては、Googleは神のようなサービスです。「Rubyではこう書けたけど、Pythonではどう書けばいいの?」という質問に、Google先生は(基本的には)誠実に応えてくれます。 しかし、…

Python初心者に送る「人工知能の作り方」 Part7(終)

前回はマルコフ連鎖で学習・応答するモジュールを作りました。それなりに複雑な処理が含まれていましたが、設計時点で仕様を決めておき、それをコメントを含めたコードにすることで、メンテナンス性を保っています。 sandmark.hateblo.jp 今回はmarkov.pyをD…

Python初心者に送る「人工知能の作り方」 Part6 後編

前回は「マルコフ連鎖とはなんぞや」に始まり、それをプログラムの設計に落とし込むところまで行きました。今回はいよいよ実装に移ります。 sandmark.hateblo.jp Python的には『オブジェクトのコピー』『オブジェクトの永続化』を扱っていきます。今回のソー…

Python初心者に送る「人工知能の作り方」 Part6 前編

このシリーズも佳境となり、ついにAIが初めての自分の言葉を発しました。人間の赤ちゃんだって親の真似をするのですから、前回は猿真似をする猿から一気に人間の赤ちゃんまで進化したと言えます。 sandmark.hateblo.jp 今回はさらに踏み込んで、「ゼロから言…

Python初心者に送る「人工知能の作り方」 Part5

前回は形態素解析による学習と、名詞に関連した文章を返すPatternResponderを追加しました。キーワードで連想的に応答を生成させることで、そこそこ文脈を保った会話が実現した気がします。とはいえ一文をまるごと保存しているため、オウム返しされている感…

Python初心者に送る「人工知能の作り方」 Part4

前回はリスト内包表記と正規表現を使って新しい思考エンジンを作りました。しかし依然として辞書はユーザーが手作業で作らなければならず、チャットをしても新しい発見があるとは思えません。 sandmark.hateblo.jp 今回はDictionaryに学習機能を組み込みます…

Python初心者に送る「人工知能の作り方」 Part3

前回はAIに思考エンジンを追加しました。まだまだ会話にはなりませんが、継承を使ってコードを簡潔に保つことで、機能を追加しやすい状況にしています。今回のソースはこちら。 sandmark.hateblo.jp チャットボットっぽくなってきた? 今回のテーマは『Respo…

Python初心者に送る「人工知能の作り方」 Part2

前回はAIを作るにあたって、全体の骨組みとインターフェイスを作ってみました。結果として「○○ってなに?」としか発言しない、とてもAIとは呼べないものになっていますが、今回はもう少し反応を改善してみます。 sandmark.hateblo.jp 前回のおさらい: Respo…

Python初心者に送る「人工知能の作り方」

プログラムと会話(?)しよう! 昨今、機械学習やディープラーニングといったキーワードで注目を集めているPython。簡潔な文法から初心者向けの学習目的にも採用されています。 とはいえ、入門書を読んだだけではよくわからないという人も多いはず。「何を…

django-rest-frameworkのチュートリアルを超意訳してみた。第07回「スキーマとクライアントライブラリ」

このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。 欲しかった機能はこんな感じ。 モデルデータのCRUD モデルの特定フ…

django-rest-frameworkのチュートリアルを超意訳してみた。第06回「ViewSetとRouter」

このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。 欲しかった機能はこんな感じ。 モデルデータのCRUD モデルの特定フ…

django-rest-frameworkのチュートリアルを超意訳してみた。第05回「リレーションシップとハイパーリンクAPI」

このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。 欲しかった機能はこんな感じ。 モデルデータのCRUD モデルの特定フ…

django-rest-frameworkのチュートリアルを超意訳してみた。第04回「認証と許可」

このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。 欲しかった機能はこんな感じ。 モデルデータのCRUD モデルの特定フ…

django-rest-frameworkのチュートリアルを超意訳してみた。第03回「クラスベースのビュー」

このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。 欲しかった機能はこんな感じ。 モデルデータのCRUD モデルの特定フ…