いももちのきもち

新米プログラマによる技術的メモ

【夫婦円満】家庭用slackのネタ

エンジニアなら家庭用のチャンネルくらいもってますよね?
夫婦のコミュニケーションにSlack便利です。
妻が非エンジニアですって?ちょうどいいです。
簡単な設定で済むものを設定してあげたらそれだけで感心されます。

1. 記念日

labo.hatenastaff.com
結婚式や入籍日、子供の誕生日などを登録しておけば毎朝8時に自作botから投稿してあげると喜ばれます。

2. テレビの時間をリマインド

/remind を活用してslackbotにリマインドさせるだけです。
N〇Kの朝ドラの昼の再放送も見たい!という育休主婦の要望にも簡単に応えられます。

3. おみくじ

これもslackbotに「おみくじ」という単語に反応するようにしておき、ランダムに大吉や吉などと答えさせるとなんだか楽しくなってきます。

適宜追記していこうと思います。

家庭用チャンネルにslackbotを導入して天気調べる【LITE】

【背景】
会社の同期内でSlackのbotを作るのが流行っていたので乗り遅れまいとbotを作った。
しかし後発だとネタも思いつかないし、まずは家庭用チャンネルで始めようと思い典型的な天気予報botを整備した。

【利用したframeworkなど】
slackbot GitHub - lins05/slackbot: A chat bot for Slack (https://slack.com).
具体的なインストール方法や利用方法はQiitaを参考にした。
PythonのslackbotライブラリでSlackボットを作る - Qiita

放置していたさくらVPS上でバックグラウンドプロセスとして実行


天気予報botを作成しよう、ということで以下を参考に作りました。
Pythonを使ってSlack Botを作成してみた - Monthly Hacker's Blog
botがいるチャンネルでtenkiとつぶやくと東京の天気予報を教えてくれます。
HTTPリクエストの扱いにはrequestsモジュールを使っています。
地方の選択は以下のリンクからどうぞ。
http://weather.livedoor.com/forecast/rss/primary_area.xml

import requests

@listen_to('tenki')
def weather(message):
    city_id = '130010' # 東京
    url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=' + city_id
    data = requests.get(url).json()
    text = data['description']['text'].encode()
    message.send(text)

MySQL Using filesort とUsing temporary

MySQLでEXPLAIN文を使ってクエリの実行計画をみたらExtra欄にUsing filesortとUsing temporaryが出ました。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 8.8.2 EXPLAIN 出力フォーマット
これらが表示されている場合、パフォーマンスは良くないことが予想されるため改善が必要です。

MySQLのUsing Temporaryについて - aeroastroの日記

Perlで変数をprintするとき、文字との間を開けたくない

変数名を{}で囲みます

my $string = 'moji';
print "foo${string}bar";
# foomojibar

参考:How to print variables in Perl - Stack Overflow

MySQLのソケットエラーERROR 2002の解決

環境はCentOS 6.9です。

$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

時々ソケットファイルがなくなる?
mysqlの再起動で解決します。自動で/var/lib/mysql/mysql.sockが作られるようです。

$ sudo /etc/init.d/mysqld restart

mysqlサーバの文字化け対応記録

家のCentOS6環境で使っているmysqlのDBに格納した日本語データが文字化けしている!
mysqlの各設定の文字コードを確認!

show variables like "chara%"; 

character_set_databaseがutf8ではなくlatin1になっていました。
テーブルの定義変更でも文字コードを指定できますが、以下のページを参考にして/etc/my.cnfにデフォルトの設定がutf8になるように追記しました。
restart後、新規作成したテーブルはすべてutf8が使われることを確認しました。
qiita.com
qiita.com
interu.hatenablog.com
kzworks.at.webry.info

mysqlサーバの起動・終了

mysqlの起動はmysql.server start
だがrpmの場合は/etc/init.d/mysqldがmysql.serverに相当するそうだ(※1)。
mysqldを直接呼び出すのはどのプラットフォームでも機能する(※2)。

環境
CentOS6.9

$ mysql --version
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

mysqlのversionは古いまま使っている...

$ sudo /etc/init.d/mysqld stop
mysqld を停止中:                           [ OK ]
$ sudo /etc/init.d/mysqld start
mysqld を起動中:                           [ OK ]
($ sudo /etc/init.d/mysqld restartもあるよ)

参考文献:
※1 MySQLサーバの起動と停止 | OpenGroove
※2 MySQLオフィシャルサイト