Upgrade to Pro — share decks privately, control downloads, hide ads and more …

M-x doctor

M-x doctor

AI をテーマにした LT で、人口無能をお題にして孤軍奮闘しました。

xorphitus

April 21, 2016
Tweet

More Decks by xorphitus

Other Decks in Programming

Transcript

  1. Doctor doctor, please Oh, the mess I’m in Doctor doctor,

    please Oh, the mess I’m in She walked up to me And really stole my heart And then she started to take my body apart Livin’Lovin’, I’m on the run Far away from you Livin’Lovin’, I’m on the run So far away from you
  2. 最初にやること ごくごく自然な発想として、Emacs を Web サーバにします • elnode を使います ◦ Node.js

    に触発されたっぽい Web サーバ ◦ イベントドリブンなのは、シングルプロセス・シングルスレッドな Emacs では自然なアーキテクチャと 言えるでしょう • ELIZA (doctor.el) の応答が HTTP レスポンスになるアプリを書きます ◦ しかし doctor.el はバッファ内でやりとりをする作りになっているので ◦ HTTP が I/F になるように無理やり何やかんやします
  3. 動作確認してみましょう Bundler 的に Cask を使います Emacs を batch モードで起動して $

    cask exec emacs -Q --script app.el $ curl ‘http://localhost:8080?q=(hello eliza)’ (how do you do ? what brings you to see me ?) このように、ELIZA への問い合わせを S 式で行うことで S式によるお返事が返ってきます データフォーマットが JSON とか言うのは小学生までです
  4. Deploy to Heroku Emacs 界の英傑、gongo 氏の手法を用います Microservices 風 HTTP Server(s)

    on Heroku > Emacs ユーザの皆様におかれましては > 「Emacs で HTTP Server を起動できるから >  Heroku で動かしたい!!」 > と日頃から思い悩んでいるはずで(以下略)
  5. Heroku に上げたら動作確認してみましょう $ curl --include‘https://web-doctor-el.herokuapp.com:8080?q=(hello eliza)’ HTTP/1.1 200 Ok Server:

    Cowboy Date: Mon, 18 Apr 2016 14:05:39 GMT Connection: keep-alive Transfer-Encoding: chunked Content-Type: text/x-s-expression Via: 1.1 vegur (how do you do ? what brings you to see me ?) OK, Emacs in Cloud!!
  6. では LINE BOT として叩けるようにしましょう どうやら固定 IP が必要なんですね そこには Heroku のアドオンを使います

    $ heroku addons:create fixie:tricycle --app web-doctor-el さて、準備は整ったので I/F を LINE BOT API に合わせたら終わりでしょう
  7. 本家ドキュメントを確認します https://developers.line.me/bot-api/overview > How Bot API works > Using Bot

    API, you can send information between company’s servers > and user’s LINE app via the LINE platform. > Requests are sent using JSON-based APIs.
  8. 最後に この Front-Back Emacs 構成ではたぶん大量アクセスに耐えられません (参考)大量アクセスが来ても安心なLINE BOTサーバのアーキテクチャ この記事にあるように、Back Emacs の方は

    Web サーバではなく Job Worker にする必要があるでしょう しかし、非同期処理 Worker としての Emacs 技術が確立されるその前に 新興勢力が「それ Atom でできるよ」とか言い出す未来もあるかも知れません とりあえず若者はエディタに Atom を使っておくとよいでしょう ちなみに今回のソースコードな https://github.com/xorphitus/web-doctor-el