読者です 読者をやめる 読者になる 読者になる

あーく・りなっくす

プログラミングとかガジェットとかの雑記

ノイズキャンセリングイヤホンを買ってみた

ガジェット

職場の席替えがよくあるのだけど、今回はかなりハズレらしく、他部署の人が非常にうるさい(声が大きいだけなのはまだマシ?)。
その旨は上長へ報告しておいて何とかしてもらうことで、いずれ解消されるだろう。

ただ、タイムラグもあるだろうし、普通に集中したいというときのことを考え、イヤホンを追加で購入することにした。
今は、MDR-XB90EX を使っている。また、使っているスマフォも Xperia というところからも、今回も Sony のものを選択した。

ノイズキャンセリングできればなんでも良かったのだが、前から気になっていた Bluetooth 対応のものにした。最近少しずついろいろ無線化していってる気がする。
3年前に発売されたものだから、いろいろレビューは出ているので、少しだけ使ってみた感想を軽く書くぐらいにしておく。

デフォルトの設定で使ってみたときは、イヤホン自体が安いものぐらい、と書いてあったとおりの音だったが、音質優先の設定にしたところかなり良くなった気がする。それでも今使っているもの程ではないのかなぁ、という印象もある。もっと使わないと分からないかもしれないが。
ノイズキャンセリングの性能は、テレビを付けながら試した限りではいい感じであった。通勤電車でも試した。ほどよく周囲の音が聞こえるという感じ。OFF の時とも比較したが、こんなに周囲の音気になるものか?と思ってしまうほど違った。歩いてる時に使うと危ないなこれ。

ということで、初のノイズキャンセリングを使った感想おわり。

Fitbit API を使ってみる

ガジェット 開発

ここから登録やドキュメントの確認ができる。

API を利用することで、サーバに同期済みのデータを取得したり、Fitbit のデバイス以外からデータを追加することができるようだ(別のフィットネス系のアプリなどから流せたりするのかもしれない[要出典])。

アプリケーションの登録は Twitter で登録するのとほぼ同じ感覚だと思う。 "OAuth 2.0 Application Type" という項目では選択肢が 3 つあり、Personal だと取得できるデータが多いようだ。

Server
"Server" applications authenticate using the Authorization Code Grant Flow.

Client
"Client" applications authenticate using either the Authorization Code Grant Flow or the Implicit Grant Flow. An advantage of "Client" applications is that they allow for client-side authentication.

Personal
"Personal" applications authenticate using either the Authorization Code Grant Flow or the Implicit Grant Flow, and also have access to the intraday time series data (such as Heart Rate or Activity) of the owner of the app only.

定期的にデータを取得して、Slack とかに投げてみようと思う。

Fitbit Charge HR 買った

ガジェット

海外で見かけたときから気になってて、半年ぐらい経ってようやく買った。
まだ、日本では発売されてないモデルだと、SmartWatch みたいな雰囲気のものもある。すでに SmartWatch 3 があるので今回は選択肢から除外した(海外で見たときにすでに販売されていた)。

運動と睡眠を記録するだけなら、すでに持ってるけど、心拍数なども記録できるものが欲しかった。SmartBand Talk も心拍数の記録ができる。ただ、対応 OS の差で Fitbit Charge HR にした。

ひとまずメイン端末である Xperia Z3 Compact でセットアップした。
アプリを起動して、指示に通りに設定をしていけば良い。

ちょうど出かける予定があったので、早速使ってみた。
バッジというアクティビティに応じてもらえるもの(ゲームの実績みたいな感じ)や友達と競った結果もらえるトロフィーなどがあり、モチベーション維持とかも頑張ってるっぽい。

f:id:arc680:20160423200229p:plain

同期したデータは Web 上でも確認することができる。

f:id:arc680:20160423200333p:plain

Web 上からのみ設定できる項目として、TwitterHealthVault (初めて知ったけど、Microsoft のものらしい) との連携などもある。
ざっと調べてみたけど、あんまり日本で使ってみた的な記事が見つらからなかったが、使ってみようと思う。

Let's Encrypt を使って https 対応

Linux Ubuntu nginx サーバ 開発

https 対応している Web ページが増えてきたので、自分のものも対応したくなった。お金がかかるのはつらいと思っていたが、Let's Encrypt を使えば無料で SSL/TLS 証明書を発行できるということなので、利用してみた。

Let's Encrypt クライアントのインストール

リポジトリから clone し、クライアントを実行する。
初回実行時には、必要なパッケージをインストールしてからクライアントが実行される。そのため、初回はヘルプなどを表示するようにしておいた方がいいかもしれない。

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt/
$ ./letsencrypt-auto --help

証明書の取得

DNS の設定

TCP/80 に対してアクセスしてくるので、そのポートを開放しておく必要がある。 あとは、証明書を発行したいドメインの A レコードに導入するサーバのグローバルな IP アドレスを設定しておく必要がある。

Let's Encrypt

コマンドを実行する前に Web サーバなどを止めておく。

$ ./letsencrypt-auto certonly -a standalone \
-d domain1 -d domain2

実行するとメールアドレスの入力を求められる。 ちなみに Web サーバ(80 番を使っているもの)を止めていないと、怒られる。

nginx の設定

既にある設定に追加する。https のみにしたい場合は、80 でのアクセスを https へリダイレクトさせるという方法もとることができる。

server {
  listen 443 ssl;
  server_name <ドメイン>;

  ssl_certificate /etc/letsencrypt/live/<ドメイン>/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/<ドメイン>/privkey.pem;

  location / {
    # 省略
  }
}

設定を追加したら reload をする。

$ sudo service nginx reload

この証明書の更新もコマンドを利用して行えるので、次は自動化なども行っていこうと思う。

Ubuntu で nginx を使ってリバースプロキシ

Linux nginx Ubuntu サーバ 開発

Heroku を Web サーバに使っているが、ドメイン周りでの不満がある。
どちらかと言うとドメイン契約先の問題なのだが、CNAME で設定するときにサブドメインを省略して設定することができない。

そこで、ルートドメインで設定できていた VPSを経由して Heroku をアクセスすればいい感じにできそうだということを思いついた。
そんなわけで初めて nginx を触っていろいろ設定してみた。
(今まで使ったことがなかったという理由で採用)

微妙に苦労したけど、とりあえず http でアクセスできるようになったので、Qiita へまとめた。

qiita.com

今度は https 対応しようと思う。

Slack 用の bot を作ってみた

Ruby 開発

Slack では簡単に bot を作れるようだが、Ruby で実装してみたかったので、 slack api で bot を作ってみた - Qiitaを参考に作ってみる。

必要な Gem をインストール

gem 'slack-api'

Gemfile に追記して、bundle を実行する。

$ bundle
Your Gemfile has no gem server sources. If you need gems that are not already on your machine, add a line like this to your Gemfile:
source 'https://rubygems.org'
Could not find gem 'slack-api' in any of the gem sources listed in your Gemfile or available on this machine.

あれ…。最初のメッセージは、特に source を指定してないからだろうけど、その下はなんだろう…。
根本的な原因は特定できていないが、source を http で指定したら問題なかった。

最終的な Gemfile

source "http://rubygems.org"

gem 'slack-api'

実装

簡易的な実装は下記の様になる。

# -*- coding: utf-8 -*-

require 'slack'

SLACK_TOKEN = 'ほげほげ'

Slack.configure {|config| config.token = SLACK_TOKEN }
client = Slack.realtime

client.on :hello do
    puts 'Successfully connected.'
end

client.on :message do |data|
  p data
  if data['text'] == 'test' && data['subtype'] != 'bot_message'
    params = {
      token: SLACK_TOKEN,
      channel: data['channel'],
      username: "bot test 1",
      text: "<@#{data['user']}> bot test"
    } 
    Slack.chat_postMessage params
  end
end

client.start

キーワード 2 種類に対してそれぞれのリプライを割り当ててみた図である。 f:id:arc680:20160409202146p:plain

実際に運用する際には、同記事の方が作っている bot の構成などを参考にしていく。 (ベースクラスを作って、それを継承していく形)

作った bot 紹介

日記 開発

Twitter などではなく、会社のチャットで利用している自作の bot についてどんなものがあるのかをまとめてみる。 いろいろ作りたい欲が湧いてきたので、使えそうなものがあれば、実装してみよう。

作ったもの一覧

基本的に Ruby で作っている。

当番通知

週替わりに PC を持ち帰り、緊急時に対応するようになっている(1 年ぐらい続けているけど、1 度ぐらいで基本的に平和)。
その週の担当者への通知を月曜日に行う。
最近対話にも対応するようにした。

数値計測

いろんな数値系を収集してきて、投稿している。月初のみのものもあれば、毎日のものもある。各プロジェクトで利用している。

午後ロー通知

みんな大好き(?)午後のロードショー
これはなんとなくで、Node.js にしている。公式からゴニョゴニョして取ってきている。今となっては作り直したいぐらいアレでヤバい。

六曜通知

これも Node.js である。
スピリチュアルやね。

会社以外の bot で何をどうするか

何かのデータを受け取って通知とかをいくつかやりたいのでやる予定である。
Slack あたりでやってみよう。

続く。