睡眠時間をダッシュボードで表示する(Misfitアプリ版→IFTTT→Airtable→Lambda→PostgreSQL→Metabase)
睡眠時間がダッシュボードで表示できるようになりました!わーい( ´ ▽ ` )ノ
以下、要素技術の説明。
Misfitアプリ版
なぜMisfitか?それは...
1. アプリ単体(重要)で睡眠時間を計測でき、かつクラウド上に保存してくれる
2. しかもIFTTTでアクセスできる
この二つの要件を満たすのが、自分の観測範囲ではMisfitしかなかったんですね。
なお2018年2月現在iOS HealthCareには同期してくれませんが、IFTTTをかませば可能です👌
Airtable
GoogleSpreadSheetのUIとREST APIを標準装備したクラウド上のリレーショナルデータベースと言えば分かりやすいだろうか。
当然IFTTT連携OK。
で、テーブルをMisfitのデータに合わせてこんな感じで設定します。
ポイント:
* テーブル名、シート名は任意だが、後でIFTTTから参照するときに使うので注意。
* 明らかな数字以外は全て文字列型に設定しておくこと。日付っぽいデータだからと日付型にするとエラーで泣きを見る。
* Misfitが標準で書き込むデータの他に一つ列を追加する。(これだと"ParsedDate")"TimeAwoken"をプログラムで扱いやすい日付に変更するため。
"ParsedDate"列の関数の中身はこんな感じ。
DATETIME_PARSE(TimeAwoken, 'YYYY-MM-DD HH:mm')
IFTTT
こんな感じに。
Record Contentはこんな感じ。
::airtable::SleepStart::{{SleepStart}} ::airtable::TimeAwoken::{{TimeAwoken}} ::airtable::TotalTimeSlept:: {{TotalTimeSlept}} ::airtable::TotalTimeOfRestfullySlept::{{TotalTimeOfRestfullySlept}} ::airtable::TotalTimeSleptInSeconds::{{TotalTimeSleptInSeconds}} ::airtable::TotalTimeOfRestfullySleptInSeconds::{{TotalTimeOfRestfullySleptInSeconds}}
Lamnda(とそれ以降)
ソース置いておきます( ´ ▽ ` )ノ github.com
楽しいのでぜひ〜。
GlassFishユーザー会のMicroservices & Cloud Evening 参加メモ
GlassFishとの関わりは普段ないのだけど、Microserviceってキーワードが気になって参加してきた!
そもそも知らなかったこと
もともとSunが開発していたJavaEE=GlassFishの開発ペースが落ちていたみたい。
それを見かねて?2016年夏にIBMとかのJavaEEベンダ+ロンドンJUGがMicroProfileを発表し、
2017年夏にはJavaEEがJCP(Oracleと関わりが強い?)からEclipse Foundation(だいたいMicrorofileを発表したメンバーと同じ人たち?)に移動することになった。
Microrofile
リソースの限られたクラウドで動かすためにJavaEE最小限のAPIに絞ったバージョン。
※1: クラウドのリソースが限られている、っていうのもニュアンスがよく分からない...
そういうソースがあるのかな?と思ったけどそういうわけではなく、どのAPIを選んでビルドするかの問題っぽい。
EE4J
それで、JavaEEをEclipse Foundationで開発していく上でEE4Jというプロジェクト名をつけたらしい。
今日のセッションによると、まずはソースコードの移行、次にネーミング、最後に新バージョンの発表という順序?で進むそう。
その他セッションから
Payara
コンテナ対応を強化した?GlassFish。今回日本にHazelcastさんと合同のオフィスができた。
それで魚のアイコンなのか...!
Kubernetes
クーバネティス(クーバネティクスだと勝手に思っていた)
複数のコンテナを一つのマスターコンテナが管理してくれるっぽい。これを前提に、一つのアプリケーションをビジネスロジックとログとか運用監視に分けるのがSidecar Patternというそう。
OracleのJavaリリースモデルの変更
18年3月からは半年ごとに時期ベースでリリースするらしい。それで、JDK10みたいなバージョン番号はなくなるそう。
自分のブラウジング履歴をSQLで見られるって知ってました?(Firefox + SQLite)
自分専用ダッシュボードを作るにあたり、ブラウジング履歴を取得する方法を調べました。
本当はGoogle マイアクティビティがAPIを用意してくれていたらよかったんですが...ない※ のでブラウザの履歴を取得します。
※APIがないだけで、Google Takeoutというサービスで自分のデータのアーカイブを取得することはできる。
やってみた
FIreFoxのブラウジング履歴は"places.sqlite"ファイルに入っているので、これをDB Browser for SQLiteで表示します。
Open Databaseをクリックし、"~/Library/Application Support/Firefox/Profilles/*.default/places.sqlite"を開く。
すると!Firefoxの内部で使っているテーブルの一覧が!
よく見ると、訪問したサイトの記録とサイトの情報は別々に持っている(正規化)みたいですね。これは賢い。 他にもvisit_dateをunixtimeで持っていたり、裏側感が満載でちょっとワクワクします。
勤務時間をダッシュボードで管理する(2/2) AirTable → Postgres → Metabase編
勤務時間, 在宅時間が自動で計測できるようになった!
IFTTT → AirTableまでは前編を参照。
AirTable → Postgres
CloudWatchで日次で起動するAWS Lambdaを使い、AirTableからRDSのPostgresにデータを突っ込んでいます。
※Lambdaで使用するにはpsycopg2とpandasをEC2と同じ環境でビルドしたものに差し替える必要があるので注意。
Postgres → Metabase
Metabaseの設定は別に難しくないんだけど、PostgresのInterval型は使えないことに注意。
SQLを直接編集して解決してます。
SELECT (略), extract("epoch" from "public"."spent_time"."spent_time")/3600 as "spent_hours" FROM "public"."spent_time" WHERE (略)
やってみて
まずはひと段落って感じ。本当はこの後コード行数/(在宅時間-睡眠時間) とか計測してみたいな〜。
Lambdaが日次で動いてちゃんと仕事してるの、見てるとすごい嬉しくなりますね。
勤務時間をダッシュボードで管理する(1/2) IFTTT → AirTable編
勤務時間と在宅時間がMetabase(OSSのダッシュボードツール)で確認したいな〜と思っている。
アーキテクチャはこんな感じで。
iPhoneの位置情報 → IFTTT → AirTable → AWS Lambda → PostgreSQL → Metabase
やってみた
IFTTTのAppletの設定はこんな感じ
- レコードの設定
::airtable::OccurredAt::{{OccurredAt}} ::airtable::EnteredOrExited::{{EnteredOrExited}} ::airtable::LocationMapUrl::{{LocationMapUrl}}
AirTableはこう。列の属性がDate型だと書き込みに失敗するので注意。代わりに変換用の列を用意する。
- 値はこんな感じ
January 19, 2018 at 09:25AM https://maps.google.com/?q=(※緯度),(※経度)&z=18 exited 1/19/2018 9:25am
- 変換用列の式はこんな感じ
DATETIME_PARSE(OccurredAt, 'MMMM D, YYYY at HH:mmam/pm')
※AirTableの代わりにGoogle Spreadsheetも検討したんだけど、Pythonのライブラリが必要なのと(これはLambdaだと面倒)、僕がAirTable推しなのでこうしました。
ネイティブが使ってる英単語の省略形が分かる、変数の命名に必見のサイト「All Acronyms」
英単語を省略したいけど、何が正しいのか分からなくて困ることないですか?
例えば "Management" を省略したい時、"mgmt"がいいのか、それとも"mgt"がいいのか、みたいな...
調べられるサイトがあります。All Acronyms です。
ご覧の通り、ポピュラーな省略形が投票で選ばれています。これは便利!
以下は興味のある方向けです〜!
そもそも省略形とは
英単語の省略形を調べるとき、知っておくとよいキーワードが二つあります。"abbreviation"と"acronym"です。
abbreviation: 主な意味: 省略、短縮、省略形、略語、略字
ex) management → mgmt
acronym: 主な意味: 頭字語
ex) United Nations Educational → UNESCO
※weblio英和辞典より引用
"acronym"の一種に"recursive acronym"というのがあって、エンジニアだと覚えがある人いるんじゃないでしょうか。
GNU(GNU's Not Unix!) みたいなやつですね。
調べ方
"abbreviation"と"acronym"を載せていればいいので、上記の"All Acronyms"以外にも調べられるサイトはあります。
一つ調べて見つからなかったらほかも当たってみるといいんじゃないでしょうか。
オックスフォード英語辞典: Abbreviations
public.oed.com
THE FEEE DICTIONARY acronyms.thefreedictionary.com