TaKesso's Tech Blog

Web中心の技術メモ

行ってきた: [ハンズオン] LINE Clova×IBM WatsonでAIを学ぶ

参加したイベント

概要

linedev.connpass.com

占いスキルのハンズオン ClovaスキルとIBM Cloud/Watsonを使ってスマートスピーカーから音声認識で占いをするアプリを作ります。

提供された資料

CEK(CIova Extensions Kit)の概要や設定方法など

www.dropbox.com

IBM Clowd と サーバーサイドについて

medium.com

学んだこと、思ったことメモ

スキルの動作フローが大体わかった

  • LINE Clovaのハンズオンに参加するのは2回目。
    • 1回目は基本的な動作フローのレクチャーとかは一切になく、『とにかく動かすこと』メインだった。
      • (基本的な動作フローくらい自分で学んでこいよって話?)
  • 今回はちゃんと説明があったのでありがたかった
    • LaunchRequest: Clovaスキルを起動するためのリクエス
    • IntentRequest: 話しかけられた言葉の意図(Intent)を解釈するためのリクエス
    • SessionEndRequest: Clovaスキルを終了するためのリクエス

対話モデルが何なのかフワッと分かった

  • VUI(Voice User Interface)の一種
  • BotにUserと対話させることで、Userの意図を汲み取れるようにする、的な。

debugしやすい仕組みづくりが大事

  • 今回は星座占いのスキルを作ったが、全参加者にobject.values is not a function的なエラーが発生したため完成者ゼロで終わった
    • 存在しない星座名を話しかける場合:
      • 期待通りの挙動『星座に誤りがあります。他の星座でお試し下さい。』
      • つまりアプリケーション自体は生きている
    • 存在する星座名を話しかける場合:
      • 動作停止(500エラー) <- アプリケーションロジックの問題ぽい...?
  • 問題発生から30分程度経過しても原因が掴めなかった
    • 効率的なdebugの仕組みがなかった
      • ログを吐くロジックを書き加える->デプロイする->ログ見る という愚直なdebug
    • Heroku版で、同じアプリケーションロジックで正常に動作していた(らしい)
      • 『あっちでは動いてるのに何でIBM Cloudでは動かないんや...』ってなる <- 環境依存なの...?

試しにやってみた

Heroku版で、同じアプリケーションロジックで正常に動作していた(らしい) を検証するために、herokuでつくってみた。

手順は前述の↓に書いてある通り。 www.dropbox.com

...動きました

んー、IBM Cloudの設定に不足があるとか、Node.jsのバージョンとか、使ってるライブラリとか、その辺の問題なのかな...?

Heroku版は比較的スムーズにできると思うので、ご興味ある方はぜひ。

Django Girls Tutorial をやってみて詰まったところ

諸事情によりPython/Djangoをやることになり、Django Girls Tutorialをやってみました。 やってみたところ、いくつか詰まった箇所があったのでメモしておこうと思います。

Django Girls Tutorial って何?

比較的多くの人がオススメしているDjangoチュートリアルです。自分は知人にオススメされてやってみた勢です。

qiita.com qiita.com

チュートリアルの目次(+雑メモ)

詰まったところや詰まりやすそうなところに★つけてます

詰まりポイントと解決策

手順通りにやると確実に詰まる箇所が2つありました。両方ともデプロイ!のところです。1つずつ見ていきます。

①Psycopg

発生する事象

『Herokuにデプロイできないよ〜〜〜』

問題詳細

  • チュートリアルに以下のような手順があります

    ファイルを開いて、最終行に次の1行を追加しましょう: psycopg2==2.5.4 これは、あなたのアプリケーションをHerokuで動かすために必要な1行です。

  • Psycopgは公式ドキュメントによると

    Psycopg is the most popular PostgreSQL database adapter for the Python programming language.(Psycopgは、Pythonプログラミング言語のための最も一般的なPostgreSQLデータベースアダプタです。)

  • 手順の通りに進めると、Herokuにデプロイする際に以下のようなエラーになります
    • Command "python setup.py egg_info" failed

解決策

  • まずpsycopg2をアップグレードしてください
    • pip install --upgrade psycopg2
  • 次にアップグレード後のpsycopg2のバージョンを確認してください
    • pip freeze
  • 最後にrequirement.txtにそのバージョンを記載したら完了です
    • psycopg2==O.O.O

②WhiteNoise

発生する事象

『なんかローカルがエラーになってる!?さっきまで動いてたのに...!!』

問題詳細

  • このチュートリアルでは、Herokuにデプロイするにあたって、WhiteNoiseを使っています
    • WhiteNoiseはこの記事によると

      WSGIアプリケーションのための静的ファイルを配信するのを簡単にしてくれるライブラリです。

  • 手順通り pip install dj-database-url gunicorn whitenoise すると、WhiteNoise v4.0 がインストールされます
  • このv4.0にはブレーキングチェンジがあります...!
    • 公式ドキュメントによると↓とのこと

      The WSGI integration option for Django (which involved editing wsgi.py) has been removed. Instead, you should add WhiteNoise to your middleware list in settings.py and remove any reference to WhiteNoise from wsgi.py. (DjangoWSGI統合オプション(wsgi.pyの編集を含む)は削除されました。 代わりに、settings.pyのミドルウェアリストにWhiteNoiseを追加し、wsgi.pyからWhiteNoiseへの参照を削除する必要があります。)

  • これに対応できていないため、以下のようなエラーが出ます
    • '(Djangoプロジェクト名).wsgi.application' could not be loaded;

解決策

  • mysite/settings.pyのMIDDLEWAREに、以下を追記する
  • mysite/wsgi.pyの編集(追記)をしない
    • 次にmysite/wsgi.pyファイルを開き、最終行に次のとおり追加してください と書いてありますが、無視してください

終わりに

初学者の方がこれ系をやるときは書かれている通りのバージョンで実施することが大事かな、と思います。書かれている通りのバージョンでやっていると、前提が整うのでエラーの原因を探しやすいかなと思います。

かくいう自分が書かれている通りのバージョンでやらなくて詰まりまくったので一応それも記載しておきます。

[残念な例]
  • 『プロジェクトの諸事情でPython2.7系で進めます〜』
    • WhiteNoise v4.0 がPython3.3未満はサポート対象外
    • あるいは、pip install whitenoise==X.x.x みたいな感じで、2.7系に対応するバージョンを指定してあげればいいかもしれません
      • が、個人的にはバージョンを下に揃えるアプローチは好きじゃないので非推奨です
  • 『今の最新のPython3.7系でやるっす!!!』
    • python manage.py migrate でエラー発生
    • この記事によると、↓とのこと

      You’re not doing anything wrong; this is a problem between Django and Python 3.7. Django has a fix, but that fix hasn’t made it into a new version yet.(君は悪くないよ。DjangoとPython3.7の問題でね。修正されてるんだけど、まだ新しいバージョンが出てないんだよ。)

以上! お疲れっした

Tech Blog やっていきます

誰に向けて書くか

  • 変数とか配列とか条件分岐とか繰り返し処理とかはザックリわかるよ、な人
  • Progateで一通り勉強したよ、な人
  • SIerやっててWebの技術に興味あるよ、な人
  • 未来の自分
  • 未来の自分を採用しようと検討している面接官や採用担当者

何を書くか

いつ書くか

  • 不定期(書きたいことがあったら)
  • 8月はニート期間なので割とかける気がしている(気がしている)
  • 9月からも書きたいとは思っている(思っている)

どこで書くか(どうでもいい)

なぜ書くか

  • 情報発信をしておくの、大事だな、という気持ちが湧いているから
    • 退職エントリを書いたことで『8月暇なら手伝ってよ』と、面白い話をいただけた note.mu
    • 雑でもいいから書いておくことで、何か起きるきっかけになり得ることが分かった
  • 未来の自分が振り返った時に "やったった感" があると気持ちえぇのでは?という仮説

やっていきます

エラー&対応方法メモ:Ruby / Ruby on Rails

  • 目的
  • rbenv install でエラー
    • ruby-buildでコケてるっぽい?他のバージョンでも試す。
    • rbenvにそのバージョンが存在しないよ、的な。
    • 今度はxcrunが見つからない、的な
    • 改めてrbenv install

目的

  • エラーが出た場合の対応策を記録することで、同じエラーに出会った時の対応効率をあげる
続きを読む