江戸一番のジャスタウェイ職人のブログ

江戸一番のジャスタウェイ職人

SoftBank HealthCare Exporter を書きました

ソフトバンクの体組織計に毎日乗っていても全然データを見ていなかったので可視化しました。

f:id:s-aska:20160615202352p:plain

https://github.com/s-aska/softbank_healthcare_exporter

しかし

www.softbank.jp

社会は厳しい。

現在ではWiFiに対応した体組織計も販売されているようなので、使えなくなったら考えましょう。

SSL証明書の有効期限を監視するexporterを書きました #prometheuscasual

f:id:s-aska:20160611185111p:plain

カンペを見ながらやってみました。

github.com

Let's Encrypt ちゃんと更新出来ているのか問題

Let's Encrypt で調子に乗って色んなドメインSSL証明書をとっていると全部ちゃんと cron で更新出来ているか不安になってくるので Grafana のダッシュボードを見て安心感を得られるようにしました。

設定ファイルはURLで指定

設定ファイルはローカルではなく Gist や S3 に置く設計になっているので Docker Hub や Deploy to Heroku でカジュアルに使えて便利です。

設定ファイル弄るためだけに fork したり、自分用の Dockerfile 書いたりするのはイマイチだし設定変える GUI あっても永続化はどうするかとか考えると Gist に設定ファイル置いて URL で指定というのが一番合理的でした。

Grafana も Docker での使い勝手を意識してかやたら環境変数でなんでも設定できるようになっていますね。

自分用 Prometheus、自分用 Grafana

何かしら可視化したい欲求は定期的に訪れますが可視化のところが億劫でいつもやらないでいたら Grafana が最高だったのでやれました。

次は体組織計の可視化にチャレンジしようかと思います。

github.com

英語と筋トレとプロテイン

朝起きてずっとツイッターしてたのを筋トレに、寝る前にずっとツイッターしてたのも筋トレに、通勤時間ずっとツイッターしてたのをやめて英単語の暗記をやるようにした。

f:id:s-aska:20160605145054j:image

一目見て覚える単語と何度覚えても2秒で忘れる単語があり不思議、四択のやつは見覚えのある選択肢タップしてるだけで正解してしまうので選択肢の無いカードかカードと選択肢の組み合わせでやっていくと良い。

音声があると覚えやすい、conとかinとかで始まるとか何が含まれるとかで思い出せても実践のスピードに追い付けないので音を聴いてすぐ連想出来るまで続けたほうが良さそう。

洋画、海外ドラマ、洋ゲーで稀に聞き取れるようになってきた。

プロテイン飲む前はどんなに面倒でも筋トレしておかないと効果が殆どないので筋トレしようという気持ちよりお薬飲まなきゃみたいな気持ちで続けている、腕や胸筋は付きやすいけどウエスト細くするのはランニングやエアロバイクみたいな運動やらないとダメそうだがまったくやりたくない(本当にやりたくない)、まだしばらくは腕立て・体幹・スクワットで筋肉量増やしつつ経過を見て考えよう。

利用規約とプライバシーポリシーをtextlintでチェックするようにしました

qiita.com

欲張っていろんな rule を指定したので初っ端のインストールコマンドが

npm install -D textlint textlint-plugin-html textlint-rule-common-misspellings textlint-rule-general-novel-style-ja textlint-rule-incremental-headers textlint-rule-max-appearence-count-of-words textlint-rule-max-length-of-title textlint-rule-no-double-negative-ja textlint-rule-no-doubled-conjunction textlint-rule-no-doubled-conjunctive-particle-ga textlint-rule-no-doubled-joshi textlint-rule-no-dropping-the-ra textlint-rule-no-hankaku-kana textlint-rule-no-mix-dearu-desumasu textlint-rule-no-nfd textlint-rule-no-todo textlint-rule-sjsj textlint-rule-spellcheck-tech-word textlint-rule-spellchecker

とえらい長いコマンドになったのですが無事導入できました。

nodejs を travis でやるのが初めてで最初インストールできない rule があったのですが、公式のドキュメントにあるように .travis.yml を調整して事なきを得ました、やりましたね。

Building a Node.js project - Travis CI

.travis.yml

sudo: false
language: node_js
node_js: "stable"
script:
  - npm run textlint
env:
  - CXX=g++-4.8
addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - g++-4.8

github.com

利用規約とプライバシーポリシーを日本語と英語で書きました

経緯

出来たのはこちらです。

利用規約

プライバシーポリシー

サードパーティ製のログ解析やクラッシュレポートを付けるのは気が引けるなぁと思い付けていなかったのですが、今回プライバシーポリシーにもその旨を明記する事と致しました。

利用規約が定型的なものになりがちなのに対してプライバシーポリシーはサービスについて細かく書く余地が多く、良い機会でした。?

これからも時間を見つけてヘルプを書いたりしようと思います。

NSRegularExpressionやNSDataDetectorで指定するrangeにはString.utf16.countを使う

テキストからリンクを抜き出す場合などよくこういったコードを見ますが、テキストにサロゲートペアが含まれているとマッチの対象がサロゲートペアの分短く解釈され、末尾が切れたりします。

let text = "? is sushi http://example.com/hello"
let detector = try! NSDataDetector(types: NSTextCheckingType.Link.rawValue)
let matches = detector.matchesInString(text,
                                       options: [],
                                       range: NSRange.init(location: 0, length: text.characters.count))

for match in matches {
    let link = (text as NSString).substringWithRange(match.range)
    print(link) // -> http://example.com/hell
}

String.utf16.count を使うと期待した結果を得ることが出来ます。

let text = "? is sushi http://example.com/abc"
let detector = try! NSDataDetector(types: NSTextCheckingType.Link.rawValue)
let matches = detector.matchesInString(text,
                                       options: [],
                                       range: NSRange.init(location: 0, length: text.utf16.count))

for match in matches {
    let link = (text as NSString).substringWithRange(match.range)
    print(link) // -> http://example.com/hello
}

しかしこれは本当に気づきにくくSwiftライブラリでも characters.count を利用している例が多いです。