今日作る料理をサジェストしてくれるlinebotを作ったよ!
少し前からLINE community labというワーキンググループに友達と参加し面白いLine Botが作れたので紹介しようと思います
作成したもの
機能としては例として「なんか、豚肉とか使ったものない?」とメッセージを送信してますが、言葉の中にある材料が含まれる料理を提案してくれます。 またレシピ確認ボタンで詳細レシピURLの表示、材料確認ボタンで材料の表示をしてくれます。 これで冷蔵庫に残った余り物で何を作ろうか考えなくて済みますね!
構成
私は今回バックエンドの方を主にやっていたのでlineのapiはよくわかってません(友達がやってくれました)ので、バックエンドを中心に説明します。
使用言語
今回はRubyを使いました。 web frameworkは軽量のsinatraを使用
実装
まず、レシピのデータについてですが、RakutenレシピがAPIを公開していたので負荷をかけないように注意しながらレシピ情報をいただきました(利用規約に引っかかってそう...)。
材料名のところに全角スペースや★がついててそこら辺整形するのが面倒くさかったです。
次に柔軟に文章に対応したいため送られてきた文章に対して形態素解析を行い材料と思われる単語を抜き出します。
そしてElasticsearchで全文検索を行いレシピをピックアップしています。
最後に開発にあたってはコンテナ環境を使いたかったのでDockerを使用してます。で、docker-composeを使って複数のコンテナを管理してます。
本番サーバはGCPを借りて動かしました。
まとめ
小規模ですが初めてチーム開発をしました。
gitやrubyをもっと学ばないといけないなと思いました。
途中までテストを書いていたのですが、途中でめんどくさくなってやめてしまったのでちゃんと書かないとな...
今回は公にサービスを公開する気はないのですが、いざサービスを公開するときに外部のサービスを利用している場合、利用規約ちゃんと見ないといけないな。
Amazon Echoを使って自宅の照明を操作してみた
目的
最近家のリモコンがよくなくなるのでAmazon Echoで操作できたら最強なのでは?と思い作成に至りました。
完成品
作成手順(雑にしか書きません)
- 赤外線LED,赤外線センサー、Raspberry piをなんとかして手に入れる。
- lircを使い赤外線を記憶させて送るところまでを行うのですが、以下の記事が参考になりました。(ありがたや〜)
- コマンドで照明がON, OFFできたらいよいよAmazon echoと連携させます
- raspberry piでsmart home(正確にはBelkin WeMoデバイス)をエミュレートしてくれるものを見つけたのでそれを使います
- 使い方としてはREADMEに書いているとおりにセットアップすれば問題なく動かせました。(Python3.6以上を要求されることに注意)
- セットアップが終わったらfauxmo/config-sample.jsonをconfig.jsonにリネームしてPLUGINSのとこを書き換えます。
私はRaspberry pi上にFlaskでサーバーを立てて、httpリクエストを受け取ったらON, OFFのコマンドが走るようにしました。
まとめ
この内容はPycon Kyushuの懇親会のLTで発表した内容となっています。
発表したスライドも一応載せておきます
AnsibleでArchLinuxの自動インストール
AnsibleでArchLinuxの自動インストールをやってみた
今回、AnsibleでArchlinuxの自動インストールに挑戦しました。
結果として成功したのですが、tasksが結構汚いのでまだまだ改善の余地はあります…
インストールの説明はGithubに載せているのでそっち見たほうがいいです。
並列処理と平行処理について
ふと並列処理と平行処理の違いは?と考えると毎回う〜んとなるので一番しっくりくる考え方を書き残しておこうと思います。
定義
システムが複数の動作(処理の流れ)を同時に実行状態(in progress)に保てる機能を備えている場合を 並行(concurrent)と言い、複数の動作を同時に実行できる場合を並列(parallel)と言います。 重要な概念、違いは「実行状態」という点です。
平行処理
平行処理はシングルコアプロセッサで考えると理解しやすいです。シングルコアなので基本は1つの仕事しかできません。なので1つの仕事にだけ集中していると他の仕事はこなせません。なので複数の仕事を分割して処理すれば多くの仕事をこなすことができます。これが平行処理の考えです。
平列処理
平列処理はマルチコアプロセッサで考えると理解しやすいです。マルチプロセスで動く仕事をそれぞれのコアで分担して、さらに同時に処理していきます。これが平行処理です。
まとめ
並列処理の中に平行処理の考え方があるみたいな感じかな?