お家くらうど kubernetes編

突然お家にkubernetesクラスタが欲しくなったのでやってみたメモ(怪文書)

やったこと

  • ubuntuVMをいくつか立てる
  • kubeadmを入れる
  • masterのVMでkubeadm init
  • それ以外のVMで紐付けるやつ(忘れた)する
  • ホスト名変え忘れてたので変える
  • kubeadm resetしてinitからやりなおし
  • 適当にビルドしたイメージを適当に立てたコンテナレジストリにpush
  • podの設定でそれを参照
  • kubectl create
  • リブートしたらswapがまたonになっててkubeletがコケてたので直した

きょうはここまで

• 雑にkubeadmを使い雑にk8sが立った • swap入ってるとコケる • コンテナイメージはまだちゃんとおける場所がない • Volumeの扱い方は要検討 • Haskell stackのイメージはでかすぎる • ローカルで使うだけならEndpointの定義で一応外に行ける

来週つづきできるかなあ……

ベースステーションを支える技術

ノリと勢いで我が家のHTC Vive ベースステーションの固定方法を紹介 ふと思い立ったので自宅のHTC Viveベースステーションの固定方法をメモっておくことにしたので書きます。 一応全く壁に穴開けたりせず、三脚とか使ったりもせずに固定できているので、結構うまくいってるんじゃないかなーと我ながら思ってたり。

TL;DR

  • もとの部屋の環境をうまく使おうず
  • 長方形の部屋なら長辺をうまく使って正方形のスペースを確保しようず

カーテンレール

ちょうどいい場所にカーテンレールがあったので、カーテンレールの上にベースステーション付属の壁用金具を載せて結束バンドでくくりつけました。かなり安定しているのでカーテンレールがいい感じの場所にあったら第一候補になりそう。

突っ張りメタルラック

収納がなかったので突っ張りメタルラックを買いました。そのときに模様替えをしたのでカーテンレールに付けたベースステーションの対角線上にメタルラックの足が来るようにして設置し、天井付近にベースステーションの金具をくくりつけてます。

少しスペースに余裕があって、部屋の長辺に余ったスペースがある場合、この手はかなり有効だと思います。

レイアウト

長方形の6帖の部屋に机など諸々を置き、残ったスペースが正方形になるようにしています。 これによってSteamVRの設定画面によれば2.0m*2.0mのスペースが確保できているようです。

三脚を使ったりすると三脚の足のぶんだけ使えないスペースが出てきてしまいますが、カーテンレールや突っ張りによる設置だとスペースをフルに使うことができるので良いと思います。

ただ、結束バンドだけで固定してるとベースステーションの起動時にビビりが発生することがあるのでうまい具合に防振ゴムなどを挟む必要はありそうです。

引っ越したい、もののまだイケてる間取りの部屋が見つからず……

お手軽に出来合いのものを組み合わせて赤外線リモコン操作する(Google Homeもあるよ!)

この記事はCPS Lab Advent Calenderの18日目の記事です。 17日目は「ゲームパッドをMIDIコントローラーとして使おうとした」でした。

こんにちは、赤外線リモコンの機器ってなかなか多いですよね。こっちはHTC Viveを設置してしまったものだからベースステーションから出る赤外線で家中のリモコンの危機です。

さて、赤外線リモコンで操作できる機器は例えばどんなものがあるでしょう。まずエアコン、ちょっと高いPCのディスプレイ、LEDシーリングライト……

色々あるのですが、今回はLEDシーリングライトを操作できるようにしました。しかも強い先人たちの築き上げたリソースをフル活用したら、殆どコードを書かずに実現できてしまいました。(しかしお手軽ではあるものの微妙な点もたくさん有りますのであしからず)

使ったもの

ESP8266-HTTP-IR-Blaster

実際の赤外線を発光する部分はESP-WROOM-02に接続した赤外線LEDから行います。 雑にユニバーサル基板上に実装しました。汚すぎてお見せできません…… まず最初の先人の成果物をまるっと利用させて頂くポイントがこちら

github.com

このスケッチでは赤外線受光素子からの赤外線パターンの記録と指定したパターンの発光を無線LAN経由から行うことができます。

ここまでcloneしてきて書き込むだけ。LAN内からは自由自在に赤外線リモコンとして操作できるようになりました。さて、次はどうしましょう?

timer(systemd)

最初に一番やりたかったことである決まった時間に照明をつけたり消したりをできるようにしました。 無駄に大掛かりだと自分でもおもっているのですが、自宅で動いているサーバのtimerタスクでESP-WROOM-02に決まった時間にHTTPリクエストを送るようにしました。 これによって、朝目が覚める時には明るい部屋になっている上に、そろそろ寝ないといけない時間帯には強制的に照明が消えます。 悩みの種であった睡眠リズムが若干改善するかもしれません。

Google Home

さて、その後Google Homeを購入したので、こいつからも操作できたら楽しいよねと思うようになりました。 しかし、Google Home経由で操作するにはDialogFlowにしろIFTTTにしろいっぺん外に出てから戻ってくるような通信経路になります。 今回はお手軽に何も考えず適当にやりたいことを実現するのが趣旨なので、もっといい方法あるんじゃないかとか思いつつ自宅IPにDDNSのアドレスを設定し自宅鯖にnginxを立ててLet's Encryptで証明書を取得して、nginxで外からの通信を受けることにしました。

とりあえずSSLBASIC認証を設定して(IFTTTだとBASIC認証しか使えなかった気が)、IFTTTのWebHookでそのまま自宅に返ってくるような感じにしました。

反応しない

冒頭でも挙げたのですが、HTC Viveが起動している間はベースステーションが部屋中に赤外線を照射するため、赤外線リモコンが一切使えなくなります。 何度もこれで照明のコントロールができずあれーおかしいなーとか言いながら数分間立ち尽くしてました。終了すれば普通に使えるし諦めました。

まとめ

とりあえずお手軽に照明をコントロールしてみましたが、ぶっちゃけ融通が聞かないと感じることも多くこの用途ならラズパイかなんかで自前実装するほうが色々コンパクトにできて楽かもしれません。

何も考えずにググるだけでやるとこうなるよ、という例ということで見ていただけると幸いです。でも何気に実用的に仕上がったのでやって見る価値はあると思いました。

Android Design Support LibraryのSnackbarはユーザ補助機能が有効だとアニメーションしない

個人的にはあのアニメーション大好きなのですが……

Snackbarを使ったアプリケーションをデバッグ中、あのおしゃれな表示・非表示時アニメーションがバッサリなくなっていることに気づきました。

原因はアクセシビリティ設定が有効になっていることで、今回はLastPassが提供する自動入力用のサービスだったのでそれを切ればすんなりアニメーションが再生されてます。

正直LastPassは使ってるしちょっと変わったことをするアプリだと思ううえにアクセシビリティサービスでアニメーションを無効にする理由もわからなくないのですが、Snackbarだけアニメーション無効化されるのもなんだかなあという気持ちです。

ちなみに、普段からLastpass有効で使ってる→Snackbar実装→アニメーションしないことに気づく→ググるという手順を経て以下の記事に気がついたことによってこの問題の存在を知りました……

stackoverflow.com

PostmanでCookieを使いたいときはPostman Interceptorを有効にしないといけない

ただのメモ。結構ハマったので書いときます f:id:haru2036:20170611185948p:plain Interceptorをここで有効にするのを知らなくてずっと悩んでました

【たすけて】Dagger2の導入でつまづく【ハマった】

Dagger2を自作のAndroidアプリに導入する中で躓いたことをまとめようと思います。現在進行形でハマっているのでこれからも加筆修正が入る予定……

前提条件

  • Kotlin
  • Android Studio2.2

✓ハマりその1 そもそもaptが動かなくて困る

アノテーションプロセッシングがうまく動かなかったみたいだったのですが、今回はKotlinを使っているのが原因だったようです。結果的にkaptを利用することにより解決できました。

✓ハマりその2 Activity内でInjectしてもうまく注入されない

これはまだ未解決で結構激しくハマっているのですが、ComponentやModule等を定義した状態で、依存性を注入したいlateinit varで定義したフィールドに@Injectアノテーションを付けActivityのonCreate内でInjectメソッドを呼んでも正しく依存性が注入されていない結果、そのフィールドを参照したときに例外が発生してクラッシュするという問題にぶち当たっています。 とりあえず目下これをなんとかしたいと思っているのですが、なんとかなったらここに追記しようかと……

追記

これは僕の根本的な勘違いが原因だったようです。 正しい理解としては以下の様なものになると思います(@yuyakaidoさんありがとうございます!)

  • Component内のInjectメソッドは依存性を注入する対象を指定する
  • ModuleはComponent内のInjectメソッドで必要とされるものに対して(注入する中身)providerを定義する

ここらへんの理解が曖昧だったため上記のActivityを引数に取るメソッドを用意しなかった結果コケてしまったみたいでした。

FreeNAS機を組んだ

FreeNAS機を組みました。 WD Red 3TB*6でRaid Z2を組んでいます。

一台引っこ抜いて遊んでみたりしましたが少なくとも大丈夫そうです。

今のところ有り余っているストレージ容量を何に使うか、それは多分写真とかに当てられるんじゃないかなあと思っています。あとMacのTimeMachineのバックアップ先にも指定しました。それでも多分余るのでまあゆっくり使っていこうと思います。

あ、あとブートドライブに指定してミラーリングしてあるUSBメモリのうち一方がすぐ脱落してたんですが、別のUSBメモリに取り替えたら正常に動き出しました。