CO2を測定できる機器orセンサーを調査

やりたい事

室内の室温、湿度、二酸化炭素濃度を計ってグラフ化したい

できればセンサー単体で値をpostしてくれるモノがベスト

そういうデバイスがないか調べてみた

NETATMO(ネタトモ) ウェザーステーション

http://amzn.asia/d/6DW6o7m

最有力候補だが、値段が高い

カスタム (CUSTOM) CO2モニター CO2-mini

http://amzn.asia/d/8mS1SpO

  • 価格: ¥ 9,720
  • 測定項目:CO2、温度(湿度がない)
  • 電源:USB(ケーブル付属。要USBポート)
  • Wifi接続できず

ラズパイ等に接続してpythonでセンサーを送ってた、wifiが無いのが惜しい

SMARTMIEW スマートミュー

http://smartmiew.jp/

二酸化炭素は計れないので惜しい

番外編:センサー

空気品質を測定し、記録する - AmbientでIoTをはじめよう http://pages.switch-science.com/letsiot/airquality/

  • 2つのセンサーを「ESPr Developer」というマイコンでデータを送ってる
  • もちろんWi-Fi付き

一番安くてカスタマイズ性も最強だが、今回はこういう電子工作っぽいのはあまりやりたくない。。。

Android開発の最新バージョンリンク集 (Android Studio, Support Library, buildToolsVersion, etc...)

開発に必要な最新バージョンを知るための情報リンクをメモとして載せておく。

Android Studio

Android Studio Release Updatesfds https://androidstudio.googleblog.com/

Support Library

Recent Support Library Revisions  |  Android Developers https://developer.android.com/topic/libraries/support-library/revisions

AndroidX

AndroidX release notes  |  Android Developers https://developer.android.com/topic/libraries/support-library/androidx-rn?hl=ja

Play Service

Release Notes  |  Google APIs for Android  |  Google Developers https://developers.google.com/android/guides/releases

Build Tools Version

SDK Build Tools release notes  |  Android Developers https://developer.android.com/studio/releases/build-tools

app/build.gradleで使うやつ

android {
    compileSdkVersion 27
    buildToolsVersion '27.0.3' // <-これ

Android Gradle plugin

Android Gradle plugin release notes  |  Android Developers https://developer.android.com/studio/releases/gradle-plugin

build.gradleで使うやつ

buildscript {
...
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0' // <-これ

Android Studioで保存すると自動でコード整形したい

コードを書いて「コード整形+インポート最適化+ファイル保存」 ←この作業を1アクションで済ませたい。

やり方は2パターンある

マクロを使う方法

以下の動作をマクロとして記憶させて⌘S(もしくはctrl+s)に割り当てる。 - Code => Optimization Imports - Code => Reformat Code - File => Save All

以下の記事に詳しく紹介されている。
Android Studioでファイル保存時にコードを最適化したい - Qiita https://qiita.com/chocomelon/items/46810763a5be0a433158

マクロのメリット

  • やる事がシンプル
  • カスタマイズ可能
  • マクロの有効/無効が簡単、Android Studioを再起動せずに済む
  • Android Studio起動時にPlugin読み込み数が減って起動が早くなるかも?

デメリット

  • 機能はプラグインに及ばない
  • 新たにAndroid Studioをインストールして設定するとき、自動整形マクロを作成/設定方法を毎回忘れる
    • (マクロファイルをインポートすればいいだけだが、それすらも面倒だと思う時がある)

プラグインを使う方法

Save Actions というプラグインをインストールする

Save Actions - Plugins | JetBrains https://plugins.jetbrains.com/plugin/7642-save-actions

いい紹介記事が見当たらなかったのでスクショを貼っておこう

インストール

Preference => Plugins => Install JetBrains Plugin...
からSave Actionsを検索してインストールする。

インストール完了したらAndroid StudioをRestartさせる。

スクリーンショット 2018-09-12 6.15.52.png

Save Actionsを有効にするには以下の画像のような設定にする。

スクリーンショット 2018-09-12 6.15.33.png

これで保存時に自動でコード整形+インポート整理されるはず。

プラグインのメリット

  • インストールが簡単で楽
  • マクロにはできない事が多々ある(使ってないけど)
    • 変更した箇所だけコード整形とか
    • finalを自動で変数に追加

デメリット

まとめ

両方試してみて自分に合う方を使用すればよい

ちなみに、自分はマクロ派

あと、プラグイン設定ファイルをチームでgit共有したい場合はプラグインの方がいいかも

TransitionDrawableでFragmentをクロスフェード遷移させる

TransitionDrawableでFragmentをクロスフェードさせながら切り替えてみた。

色合いはさておき、なかなかカッコいい

使い所としては、アプリの紹介やチュートリアル画面あたりだろうか。

実装方法

まずdrawable内にtransitionタグのリソースxmlを作成する

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/first" />
    <item android:drawable="@color/second" />
</transition>

このtrans.xmlを置き換えるレイアウトの背景に指定する。

   <FrameLayout
        android:id="@+id/main_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
+       android:background="@drawable/trans"
        />

これで準備OK
あとはstartTransitionクロスフェードする時間を引数に渡して呼び出すだけ

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        ...

        fab.setOnClickListener {
+           val transition = main_container.background as TransitionDrawable
+           transition.startTransition(1000) //1秒かけてクロスフェード開始

+           supportFragmentManager
+                   .beginTransaction()
+                   .replace(R.id.main_container, SecondFragment())
+                   .commit()
        }
    }

これで@color/firstから@color/secondクロスフェードが始まるので、その間にFirstFragmentからSecondFragmentへ切り替える。

切り替え後、戻す時はreverseTransitionを使えば逆のクロスフェードになる。

transition.reverseTransition(1000)
    override fun onBackPressed() {
+       val transition = main_container.background as TransitionDrawable
+       transition.reverseTransition(1000)

+       supportFragmentManager
+               .beginTransaction()
+               .replace(R.id.main_container, FirstFragment())
+               .commit()
    }

たったこれだけ、とても簡単

公式ドキュメント

TransitionDrawable  |  Android Developers https://developer.android.com/reference/android/graphics/drawable/TransitionDrawable

実装コード

今回のコードは以下にありまっせ

banbara23/Android-Kotlin-Lab at TransitionDrawable https://github.com/banbara23/Android-Kotlin-Lab/tree/TransitionDrawable

Firebaseに新機能が追加されたらしい

グーグル、「Firebase」に新機能を追加--アプリ内メッセージングツールなど - ZDNet Japan https://japan.zdnet.com/article/35124174/

この記事が社内でシェアされてたので、本家記事を眺めながらまとめた。

まとめ

  • アプリを活発に利用しているユーザーとその開発者がコミュニケーションを図れるようになるアプリ内メッセージングツールができた=> Firebase In-App Messaging
  • 「Firebase Crashlytics」における「BigQuery」と「Jira Software」との統合
  • CrashlyticsはBigQueryとの統合によってクラッシュ時のデータをより詳細に分析できるようになる
  • Jira Softwareとの統合により、クラッシュの通知を「Slack」のようなサードパーティーのツールを介して行える
  • 「Firebase Hosting」の機能向上、開発者は単一プロジェクト内で複数のウェブサイトをホストできる
  • Firebaseコンソールがライブデータを取り扱い、パフォーマンス上の問題のほか、通知やA/Bテストの状況を表示できる
  • Functions」や「Hosting」「Storage」といった、他のFirebaseサービスの利用状況や稼働状況を確認できる
  • Remote Configのhistory機能を追加

これらの改善はすべて今日から始まり、数週間以内に誰もが利用できるようになる

感想

「Firebase Hosting」の機能向上、開発者は単一プロジェクト内で複数のウェブサイトをホストできる

個人的にはこれが一番面白そう

Firebase Hostingを利用してVuejs + Materializecss のサイトをいくつか運営しているので、自サイトで使えないか調べてみよう。

BotkitでSlackのアプリメッセージをキャッチしたい

概要

SlackでBotkitを使用してbotを作るとき、ユーザーのメッセージに反応するにはambientだったりmention,direct_messageなど使うが、これらはアプリ経由やwebhook経由からのメッセージには反応しない。
つまり人間が発言したメッセージ以外はbotがキャッチしてくれない。

図で説明するとこんな感じ

スクリーンショット 2018-08-07 0.21.40.png

このAPPが付いたメッセージをBotkitでキャッチしたい、とする。

方法

controller.hearsで2番めのイベント引数にbot_messageを渡すだけで反応してくれる

const Botkit = require('botkit');
const controller = Botkit.slackbot();
controller.hears([''], 'ambient, bot_message', (bot, message) => {
    //botがあれこれする箇所
});

ちなみに、Botkit自身が投稿したSlackメッセージには反応しない。

備考

ちなみに、このbot_messageはBotkitドキュメントに見当たらず、下記Issueを見た時に偶然知った。

Any reason why bots don't hear other bots in slack? · Issue #284 · howdyai/botkit https://github.com/howdyai/botkit/issues/284

参考リンク

Botkit公式ドキュメント https://botkit.ai/docs/readme-slack.html

Lottie-Androidで素晴らしいアニメーション試す

Lottie-Androidとは

Airbnbが開発したアニメーションを簡単に表示できるライブラリ

詳しくは公式ページを参照
https://airbnb.design/lottie/

AndroidGithubはここ
https://github.com/airbnb/lottie-android

導入

app/gradleに以下を追加

    implementation 'com.airbnb.android:lottie:2.5.5'

アニメーションファイルは以下サイトに山ほどあるんで、好きなアニメーションのjsonをダウンロードする
LottieFiles - https://www.lottiefiles.com/

jsonをresに配置する

自分はrawディレクトリを作ってそこに置いた

スクリーンショット 2018-08-03 13.16.34.png

実装

自動再生させたければレイアウトxmlに追加するだけで済む

    <com.airbnb.lottie.LottieAnimationView
        android:layout_width="100dp"
        android:layout_height="100dp"
        app:lottie_autoPlay="true"
        app:lottie_loop="true"
        app:lottie_rawRes="@raw/giftbox"
        />

たったこれだけ、素晴らしい

もちろんコードで実装することも可能、今回はやらないけどね

完成物

いろいろアニメーションを載っけてみた

感想

LottieFilesのというサイトから好きなアニメーションを選んで、簡単にアプリに導入できるのは素晴らしい

そしてアニメーションのクオリティが高い!

作ろうと思えばアニメーションは自分で作れるらしい

気になった事

いくつかアニメーションjsonAndroid Studioにコピーするとビルドが失敗した

Android Studiojsonを読み込めなかったのか、jsonが正しく書かれてないのか不明...

また、Android Studioのレイアウトxmlを修正する際にエディタがすっごく重たくなる気がする。

これはAndroid Studio 3.2 Beta 5だからなんだろうか...

使用コード

banbara23/Android-Kotlin-Lab at Lotties https://github.com/banbara23/Android-Kotlin-Lab/tree/Lotties