――これは、地球と Land of Lisp を繋ぐ、新たな架け橋の物語 あ…ありのまま 今 起こった事を話すぜ!「おれは Clojureが好きだとツイートしたと思ったら いつのまにかClojure会社に就職していた」な… 何を言っているのか わからねーと思うがおれも 何をされ…
大幅に更新が遅れてしまいました。実は腰痛で入院していまして、無事手術を終えて先日退院してきたところです。 入院中あまりにも暇なのでずっと Programming Clojure (第三版)を読んでいたんですが、 Clojure の奥義をそんな簡単に伝えていいの? と思う…
前回は respond :random を実装しました。辞書も Map にしようというところまでは決めましたが、それをどう使っていくかに関しては説明していません。 ということで今回は『ランダム辞書の学習』『辞書ファイルの読み書き』をコーディングしていきます。同時…
大切なことを言い忘れていました。このチャットボットの元ネタは、Ruby 向けの書籍『恋するプログラム』で紹介されていた unmo という名前のチャットボットです。今ではあまり聞きませんが、一昔前にチャット専門の AI がちょっとしたブームになった頃、その…
Coders At Work (原著: Peter Seibel, 翻訳: 青木靖)という本があります。第一線級のハッカー達に「エディタは何を使ってます?」「デバッグはどうしてます?」といった基礎的な質問から、「プログラマ全員が読むべき本はありますか?」といった抽象的な質…
最近 Clojure にハマっています。JVM 上で動くバイトコードにコンパイル可能な Lisp 族で、 なんか書いてて楽しい です。とりあえず作者である Rich Hickey のアツい一言をご覧ください(参考1・参考2)。 ※元記事がリンク切れになってしまったので、意訳…
Python へ直接コンパイルできる Lisp 方言 Hy が楽しいです。 しかし Lisp 族のつもりでいると思わぬ落とし穴があったり( let, cons がないなど)するので、 とりあえず macroexpand の結果を S 式にしてみます。 Python 3.6.6 Hy 0.15.0 例えば let をマク…
最近spacemacsにハマってます。「Spacemacs とはなんぞや」についてはいろんな方々が 解説してくださっているので、その魅力についてはぜひそちらをご参照ください。 かくいう私もそういった記事を読んで手を出し、そのまま戻れなくなった身です。 今回は Py…
やりたかったこと 4バイトずつ取り出す リトルエンディアンでunsigned intに変換する リストにぶちこむ read(), struct.unpack()などでできそうな気はしたんですが、Pythonっぽいやり方ないのかなと探した結果をメモしておきます。オーバーヘッドなどを考え…
IPython上でモジュールをimportする。 コードスニペットを書いてテストしてみる。 エディタでモジュールを書き直す。 反映させるにはIPythonごと再起動する必要がある。 「なんで?」ってなる。 では、自動化を始めましょう。
AlphaGoってどのくらいの強さなんでしょう。とりあえずべらぼうに強いとは聞いたんですが、囲碁にまったく明るくない私にとっては、ドラゴンボールにおける「宇宙一強い」くらい現実味のないふわふわした印象です。 そんな私にもわかることはあって、なんで…
先日買い物に行きました。ごま油が欲しかったのですが、目の前にあったのは 298円のごま油(250g、セール中) 378円のごま油(340g、通常価格) の2つ。私は安ければ何でも良いのですが、オトクなのはどちらだ?と考えたとき、暗算が苦手なのですぐに答えが…
Pythonのパッケージと言えばsetup.pyです。依存関係も解決してくれるし、必要ならwheelを使ったプリビルトパッケージも含めることができます。 でも書くのが面倒くさいと思ってずっと放置していたんですが、先日知人にUnmoを試してもらおうと思ったら思いの…
nose = unittest + coverage + doctest + and more! 前回はデコレータを使ってコードのインデントを浅くし、ボイラープレートとなっていた繰り返し処理をひとつにまとめました。しかしその際、「挙動が変わってしまったらどうしよう」と怯えながら書き換えて…
前回のコードは思い返すだけでも寒気がするほどひどいものでした。そこで今回はPython固有の機能であるデコレータを使って、ちょっとPythonっぽいコードに変更します。 sandmark.hateblo.jp このデコレータ、LispやHaskellのように関数や処理を頻繁に渡す言…
スマートPythonプログラミング、引き続き読んでます。 sandmark.hateblo.jp 読み進めていると、Radonという循環的複雑度を調査するパッケージが紹介されていたので、今回はそれを用いてsandmark/unmoのdictionary.pyのリファクタリングに挑戦します。 先に言…
皆さん今日もググってますか? 私のようにRubyから転向したPython初心者にとっては、Googleは神のようなサービスです。「Rubyではこう書けたけど、Pythonではどう書けばいいの?」という質問に、Google先生は(基本的には)誠実に応えてくれます。 しかし、…
前回はマルコフ連鎖で学習・応答するモジュールを作りました。それなりに複雑な処理が含まれていましたが、設計時点で仕様を決めておき、それをコメントを含めたコードにすることで、メンテナンス性を保っています。 sandmark.hateblo.jp 今回はmarkov.pyをD…
前回は「マルコフ連鎖とはなんぞや」に始まり、それをプログラムの設計に落とし込むところまで行きました。今回はいよいよ実装に移ります。 sandmark.hateblo.jp Python的には『オブジェクトのコピー』『オブジェクトの永続化』を扱っていきます。今回のソー…
このシリーズも佳境となり、ついにAIが初めての自分の言葉を発しました。人間の赤ちゃんだって親の真似をするのですから、前回は猿真似をする猿から一気に人間の赤ちゃんまで進化したと言えます。 sandmark.hateblo.jp 今回はさらに踏み込んで、「ゼロから言…
前回は形態素解析による学習と、名詞に関連した文章を返すPatternResponderを追加しました。キーワードで連想的に応答を生成させることで、そこそこ文脈を保った会話が実現した気がします。とはいえ一文をまるごと保存しているため、オウム返しされている感…
前回はリスト内包表記と正規表現を使って新しい思考エンジンを作りました。しかし依然として辞書はユーザーが手作業で作らなければならず、チャットをしても新しい発見があるとは思えません。 sandmark.hateblo.jp 今回はDictionaryに学習機能を組み込みます…
前回はAIに思考エンジンを追加しました。まだまだ会話にはなりませんが、継承を使ってコードを簡潔に保つことで、機能を追加しやすい状況にしています。今回のソースはこちら。 sandmark.hateblo.jp チャットボットっぽくなってきた? 今回のテーマは『Respo…
前回はAIを作るにあたって、全体の骨組みとインターフェイスを作ってみました。結果として「○○ってなに?」としか発言しない、とてもAIとは呼べないものになっていますが、今回はもう少し反応を改善してみます。 sandmark.hateblo.jp 前回のおさらい: Respo…
プログラムと会話(?)しよう! 昨今、機械学習やディープラーニングといったキーワードで注目を集めているPython。簡潔な文法から初心者向けの学習目的にも採用されています。 とはいえ、入門書を読んだだけではよくわからないという人も多いはず。「何を…
このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。 欲しかった機能はこんな感じ。 モデルデータのCRUD モデルの特定フ…
このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。 欲しかった機能はこんな感じ。 モデルデータのCRUD モデルの特定フ…
このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。 欲しかった機能はこんな感じ。 モデルデータのCRUD モデルの特定フ…
このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。 欲しかった機能はこんな感じ。 モデルデータのCRUD モデルの特定フ…
このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。 欲しかった機能はこんな感じ。 モデルデータのCRUD モデルの特定フ…