B-Teck!

お仕事からゲームまで幅広く

【雑記】Miband4(Miスマートバンド4)のススメ

昨年末にXiaomiが日本公式販売をスタートしてからにわかに話題となっているXiaomiのスマートバンドですが、実際購入してみて確かに満足度が高かったので改めておすすめしたいと思います。
f:id:beatdjam:20200126151314j:plain

なぜMiband4を購入したのか

昨年秋、知人がFitbit購入を期に生活のトラッキングなどを始めているのを見ました。元々あまり睡眠週間が良くなかったために改善のための何かを探していたのですが、Fitbitはお試しで購入してみるには高く…。実売価格で 4000円弱 だったMiband4を購入しました。

その時はまだ日本公式販売ではなかったので、ほんとに大丈夫かな…と若干不安だったんですが、現在はXiaomiが国内公式販売を始めたのでより手に入れやすくなっていますし安心ですね。
(※余談ですが、なぜかこのタイミングで国内向けの製品名がMiスマートバンド4になりました。謎)

Miband4でできること

じゃあ具体的に何ができるんだというと、下記のような事ができます。

* 各種運動の消費カロリーなどのモニタリングと記録
* 歩数計(万歩計)
* スリープモニター(眠りの質をチェックする)
* 心拍数のモニタリング
* スマートホンからの通知を受ける
* 座りすぎ通知
など…

モニタリングされた情報はXiaomi公式が出している MiFit というアプリで確認できます。

さらに、Androidしか確認していないんですが、サードパーティの睡眠トラッキングアプリと連携して睡眠の浅い時間にアラームを鳴らしたりもできます。
ちょっと古い記事ですが、連携はこちらを参考にしました。
まだアラーム音で朝起きてるの? Sleep as Android×スマートウォッチでスマートに目覚めよう | あすへん! 〜薙月の明日への変化〜

また、一つ特徴的な点として、 Xiaomiが出しているアプリ以外にも、このスマートバンドと連携できるサードパーティ製のアプリが多数リリースされている点があります。
公式のアプリよりも運動などのデータが見やすいものや、ショートカット用のジェスチャーを追加するもの、より細かい通知の制御を提供するもの等様々あるので、こちらを色々探してみるのも良いかもしれないです。
個人的に利用しているのは Tools & Miband というアプリです。Notify & Fitness for Mi Band というアプリも有名みたいですね。

買ってよかったこと

実際にどういった点で満足しているのかというと…

* 防水のためほぼずっとつけっぱなしでいられる
* バンド含めて22g(実測値)なので軽い
* 安いのである程度雑に扱っても罪悪感がない
* 電池持ちがめちゃくちゃ良い
* 最も電力消費する設定にしてもでもフル充電から10日程度は充電が不要
* 歩数・心拍数等がGoogleFit・iOSのヘルスケアにも連携可能

などです。

睡眠時間や運動のログが勝手に残るので、見る習慣をつけるだけで生活習慣の振り返りなどが行えるようになりました。また、生活を振り返る事が習慣化することで、生活の質を上げよう心理が働いてサイクルが回っているような気がします。

あと単純に、スマホを出さなくても通知が確認できるというのは思った以上に便利でした。朝家を出る時間に天気予報の通知が飛ぶように設定しておいたり、Google Calendarの通知を飛ばすようにしてミーティング忘れを防いだり…。

おわりに

  • 安くて多機能なウェアラブルデバイスでエントリーモデルとして最適
  • 腕時計使いたいけど、重さが気になる人にもおすすめ

実は私は合わせてXiaomiの体組成計も買いました。
先述したMiFitに接続することで、こちらもボディスコアなどを勝手に記録してくれるのでとても便利なのでこちらもおすすめです。

【Java】ImmutableなCollectionをJavaで扱う

finalの挙動

Javaのfinalは宣言した変数への代入を禁止するだけで、変数が持っているインスタンスの内容は変更できてしまう。 そのため、Collectionの追加や削除などの操作が行えてしまう。

変更できないCollectionを扱いたい場合、宣言と同時に初期化する インスタンスイニシャライザCollections.unmodifiableXXXメソッド を組み合わせて利用すると良い。

インスタンスイニシャライザ

インスタンスイニシャライザの仕組みを使うと、Collectionを宣言と同時に初期化できる

new ArrayList<String>() {{ add("one"); add("two"); }};
new HashMap<Integer, String>() {{ put(1, "one"); put(2, "two"); }};

操作できないCollectionを作る

java.util.Collectionsには各種Collectionの型に対応した読み取り専用化メソッドがある 各メソッドにCollectionを渡してやると変更不可のCollectionに変換でき、addやputを行うとUnsupportedOperationExceptionがthrowされる。 変換時にnullを渡すとNullPointerExceptionが発生するのでCollections.emptyList()を渡すようにするなど、取り扱いに注意。

また、一度unmodifiableすると変更可能なCollectionにリキャスト等行おうとしてもClassCastExceptionが発生してしまうので注意

unmodifiableCollection(Collection<? extends T> c)
unmodifiableList(List<? extends T> list)
unmodifiableMap(Map<? extends K,? extends V> m)
unmodifiableNavigableMap(NavigableMap<K,? extends V> m)
unmodifiableNavigableSet(NavigableSet<T> s)
unmodifiableSet(Set<? extends T> s)
unmodifiableSortedMap(SortedMap<K,? extends V> m)
unmodifiableSortedSet(SortedSet<T> s)

インスタンスイニシャライザと組み合わせ

static final List<String> list = Collections.unmodifiableList( new ArrayList<String>() {{ add("one"); add("two"); }} );
static final Map<Integer, String> map = Collections.unmodifiableMap(new HashMap<Integer, String>() {{ put(1, "one"); put(2, "two"); }} );

【雑記】2020年の目標 その1

昨年の1月に色々目標を立ててみたものの、一年間というスパンではやりたいことの変遷や仕事の立ち位置、触れる技術などが変わっており、全然役に立たないなと思ったので、1月から3ヶ月おきに目標を立てようと思いました。

達成できた目標、今後も継続するべきものについては次回に持ち越しつつ、定期的なむきなおりを挟むことで、年間の満足度をあげようという作戦です。

というわけで、1〜3月期の目標については下記を立てていこうと思います。

技術・アウトプット

  • 月2本以上ブログ更新(内容によらず、言語化・文字化を習慣づける)
  • 開発中のQRコード読み取り/作成アプリをストア公開まで持っていく
  • DDDを学ぶ(ブログに記事化できる位を目標)

生活の目標

  • 睡眠時間を平均7.5h以上にする
  • 社内の昼休みの運動に週3程度参加+帰宅後軽めのダンベル運動・プランク実施
  • 水分摂取リマインダー導入(1日1.7リットル目標)
  • 毎日最低8000歩を目標に歩く
  • 私生活も含めタスクはTodoistに記載、togglでトラッキングして無駄を洗い出す

まずは達成できそうな目標をベースに立ててみました。
色々周りの人にはお世話になることも多い一年になるかと思いますが、何卒よろしくおねがいします!