Dive into Ofuton

お布団に飛び込もう

SNSに投稿した時間を可視化したい

Why

  • 最近はやりのマストドンにかなり時間を取られているので、なんとかして自分の時間を取り戻したい。
  • 睡眠時間を間接的に記録したい
  • なんか作りたい
  • GitHubの草みたいにしたい

How

進捗

概ね出来てきた。 f:id:crakac:20170628230146p:plain

GitHubっぽい表は、cal-heatmapを使用

ActiveRecordで、1分毎の投稿を集計して返す

Status.select("count(*) as toots, date_trunc('min', tooted_at) as t").where(user_id: id).where(tooted_at: start..stop).group('t')

↑の結果をJSONにして、ブラウザなりに返す

render json: stats.map{|s| [s.t.to_i, s.toots]}.to_h

困りどころ

cal-heatmapが表示用のJSONを取得するとき、こういう感じのパラメータが飛んでくるが、

start=2017-06-27T13:00:00.000Z&stop=2017-06-28T12:59:00.000Z

上述のselect文だと最後のマス目のcount()が合わない。2017-06-28T12:59:00.000Zからの一分間で投稿されていた場合はカウントできなくなるから。

毎回countするよりは、集計結果を別テーブルにして、ユーザーがSNSへの投稿を取得するのと同じタイミングで更新していくのがいいんだろうなという気持ちではある。

今読んでるもの

PostgreSQLのEXPLAINの読み方https://www.postgresql.jp/document/8.3/html/using-explain.html