jessieからstretchへのアップデートでlibmysqlclient-devはdefault-libmysqlclient-devへと生まれ変わったのだ...
はじめに
FROM python:latest RUN apt -y update RUN apt install -y build-essential libmysqlclient-dev libpcre3-dev tzdata ...
python:latest
をベースイメージとしたDockerfileのビルドで下記のエラーでコケてしまった際の対処方法です。
E: Package 'libmysqlclient-dev' has no installation candidate
今まで libmysqlclient-dev
は普通にインストールできていたのにどうしてでしょう。。。
原因
FROM buildpack-deps:stretch <- stretchになってる!! # ensure local python is preferred over distribution python ENV PATH /usr/local/bin:$PATH ...
公式の python:latest
のDockerfileのベースイメージが jessie
から stretch
にアップデートされており、 libmysqlclient-dev
が default-libmysqlclient-dev
に変更されていたことが原因でした。
Debian -- Details of package default-libmysqlclient-dev in stretch
解決策
FROM python:latest RUN apt -y update RUN apt install -y build-essential libpcre3-dev tzdata ...
libmysqlclient-dev
を削除します。
名前から自明のように、 default-libmysqlclient-dev
はデフォルトでインストールされているパッケージです。
jessie
から stretch
でデフォルトのパッケージに繰り上がったらしいですね。
チャットボット設計・開発入門に参加してきました
はじめに
サポーターズCoLabで開催されたチャットボット設計・開発入門に参加してきました。業務でチャットボットの開発があるので設計・開発における勘所を知れたらなと思ったのが動機です。
スライド
TL;DR
- チャットボットはとにかく小さく始めよう。
- チャットボットにしかできない機能に絞ろう。
- ズボラ旅 のようなチャットボットサービスがウケる。
感想
- 最終的に自然言語処理を伴う機能開発をすることが多くなりそうなのでPythonで開発すると良さそう。
- 勤怠管理システムにおけるチャットボットにしかできない機能とは何か。
- チャットボットとRPAとの組み合わせは面白そう。
- Facebook for developers の Messagengerプラットフォームで紹介されているデザインのベストプラクティスを設計や開発時に取り入れると良さそう。
以下メモ書きです。
お前誰よ
チャットボットとは
- メッセンジャーを用いた対話型アプリケーション
人工知能使うんでしょう?
- AIは必要ないこともある
- 「A Bot is a app!」 by Christopher Harrison
どんなものがある?
- Facebook Messenger
- LINE
- etc...
ユースケース
- 全ての課題を解決してくれるものではない
- 「私の仕事は、ボットを作るなと、人に言うこと」 by Christopher Harrison
- 「それチャットボットにする必要ありますか?」 by 及川卓也
アンチパターン
- オンラン上で検索したり、探したりすることに慣れているもの
- 限りなく人間に近いコミュニケーションを目指すもの
- Siri, りんなちゃん
- アプリ・WEBでできること
- 天気確認
- メール通知
- バイト探し
- etc...
グッドパターン
- Knowledge Base Bots
- 何かすでに知識・ノウハウが用意されており、それらに対するアクセス方法が乏しいもの
- 専門家を代替するもの
- 電話や対面での会話を代替するもの
- ランディングページなどによるユーザー獲得を代替するもの(メールに比べ6倍くらいのコンバージョン)
- ソーシャル性(Facebook Messanger, LINE Bot)
- LINE Beaconを利用した位置情報活用
- タスク自動化
- Slack
未来なるキラーボット
開発フロー
- 構想
- ユーザーストーリーを全て書き出す
- ビジュアル&コピーブランディング
- 開発・デザイン
- テスト
- リリース・改善
構想
- MVPを目指して解決する課題とそれを解決する最低限の手段を決める(チャットボットだけで完結するサービスは特に気をつける)
- その機能はチャットボット以外で本当にできないのか?
ユーザーストーリーを全て書き出す
- ユーザーがたどる状態・遷移を図にすると抜け漏れがなくわかりやすい
ビジュアル&コピーブランディング
- テンプレがある程度確立されているためそんなに難しくない
- キャラクター作りがチャットボット開発における特徴
開発・デザイン
- メッセージが同時に大量に送られた場合を想定して、どうトラフィックを裁くか考える
- 非同期的な処理を心がける
- Node.jsで開発する場合 promiseなどは必須
- 基本的には洗濯しの画像や以前説明したビジュアル・コピーブランディングの部分が大きい
テスト
- ターゲットユーザーとなる人に実際に触ってもらおう
- あくまで前提条件のみ伝えて、使い方は説明しないでおく
リリース・改善
- リリースはできるだけ最小限の機能でしよう
- 会話のログ分析が重要
- アナリティクスツール Botanalytics
APOLOのしくじり
- 機能を詰め込みすぎた
- 音楽を探すことはアプリで十分できていた
- ドコモの雑談対話APIを搭載することで期待感を煽ってしまった
チャットボットだからこそできることに機能を絞る
機能が多すぎると使われなくなってしまう!!
今後の方向性〜海外〜
- マネタイズを考えているチャットボットは、B向け(Slackを利用したもの)が多い
- C向けチャットボットでどんどん小さなヒットが生まれている
- Poncho, DoNotPay, Foxsy
- Facebook(wit.ai), Google(Api.ai), Microsoft(Maluuba)が自然言語処理系スタートアップに投資・買収
- チャットボット × AI 領域に挑むのは敵が巨大すぎる
今後の方向性〜国内〜
DjangoCongress JP 2018 に参加してきました
はじめに
DjangoCongress JP 2018 Day1カンファレンスデーとDay2スプリントデー両日に参加してきました。
五月病の怠惰を吹っ飛ばしてくれた最高のカンファレンスでした。毎年この時期にやってほしいですね(笑)
参加動機としては、Day1は会社の先輩社員の方が登壇予定だったためで、Day2はOSSへのコントリビュートに興味があったためです。
Day1, Day2に参加した感想をそれぞれまとめておきます。
Day1 カンファレンスデー
カンファレンスの内容に関しては、djangocongress.jp にセッション概要やスライドのリンクがあります。
また、DjangoCongress JP 2018の参加者の方は優秀な方が多くて、Day 1終了後2時間もしないうちにいくつも参加レポートが投稿されていたので、スライドの紹介やセッションごとの感想は今回は割愛します。Twitterのタイムラインで見逃してしまった方はぜひ確認してみてください。
DjangoCongressに参加してみていくつか収穫を得ることができました。
- 業務に活かせそうな内容が数多くあった
- Djangoの最新の動向を探ることができた
- もっと勉強しなくてはという刺激になった
- 良い参考文献をたくさん知ることができた
これが1000円で得られたのですごく満足度の高いカンファレンスでした。
実は私は、Hayao Suzuki さんが発表されていた「レガシーアプリケーションの現代化」というセッションで紹介されている、架空のプロジェクトの4人のメンバーのうちの1人です。
新卒2年目の私にとっては勉強させていただくことばかりでしたが、一方で、レガシーアプリケーションを触るのはモチベーション的に辛いものがあります。エンジニアであればやはり新しい言語やフレームワークを用いて1から作りたいですよね。
幸いにも最近新しい案件が舞い込んできているので、レガシーアプリケーションの現代化での経験やDjangoCongressで学んだことを活かして新規案件に取り組みたいです。
Day2 スプリントデー
OSSへのコントリビュートに興味があったので、参加を決意しました。スプリントは未経験でDjango歴も1年と浅かったので不安な気持ちが大きかったですが、わかりやすくてよくまとまっているガイダンスがあったおかげで作業を進めることができました。
ガイダンスの一部
Contributing to Django Core
- Done the tutorial.
https://docs.djangoproject.com/ja/2.0/intro/tutorial01/ - Done Contributing tutorial.
https://docs.djangoproject.com/ja/2.0/intro/contributing/ - See Dashboad, Find nice issue and break it.
(Don't share this URL to SNS)
Translating Django Docs
- 翻訳ガイドからユーザー登録をする
http://djangoproject.jp/translate/ - Transifex上で翻訳
- Introやtopics内の翻訳がおすすめ
- 興味のある&よく読むところからどうぞ
- 他の人の翻訳をレビューするのもOK
Translating DjangoGrilsDocs
- 翻訳ガイドを見て進める
https://bit.ly/2rWD1tE
Django2.0は触ったことがなくDjangoチュートリアルもがっつりやったことがなかったので、いい機会だと思いチュートリアルを一からやってみました。
Django1.11からの大きな変更点である django.urls.path()
を用いたよりシンプルなURLルーティング構文以外は知っていることが多かったのでやる必要はなかったかもしれません。
そのあと、「Django への初めてのパッチを書く」というチュートリアルを行いました。 django/django をフォークして過去のパッチを真似てプルリクを出すというチュートリアルです。
初めてdjango/djangoのテストを読んだのですが、1つのテストケースメソッドにいくつものアサーションがあって、心が少しざわざわしました。(ルール: 各テストケースメソッドは、 1つのことだけをテストする : Day1のtell-kさんによる 「できる!Djangoでテスト!」でも紹介されています。気になる方は djangocongress.jp からチェック!)
機能追加などのより本格的なソースコードへのコントリビュートをするためには、もっと素振りが必要だと感じました。
一方で、今のレベルでも翻訳やタイポの修正などコントリビュートできることはあるので、積極的に活動していきたいですね。
以下の2つが、記念すべき人生初コントリビュートです。