docker multi host networkを構成しようとしたが、うまくいかなかった

検証環境でmulti host networkを構築しようとしたら、結構厄介だったのでペンディングとした

環境

やりたいことと条件

  • dockerのマルチホストネットワークでコンテナを接続する
  • etcdを使用
  • swarmは使わない

手順

etcdの起動

取り急ぎdocker上でetcdを起動する

IP="192.168.1.99"
etcd \
      --name=etcd-1 \
      --data-dir=./etcd-data \
      --advertise-client-urls http://${IP}:2379 \
      --listen-client-urls http://${IP}:2379 \
      --listen-peer-urls http://${IP}:2380 \
      --initial-advertise-peer-urls http://${IP}:2380 \
      --initial-cluster etcd-1=http://${IP}:2380 \
      --initial-cluster-token my-etcd-token \
      --initial-cluster etcd-1=http://${IP}:2380,etcd-2=http://${IP}:2382 \
      --initial-cluster-state new

docker daemonの起動オプションの修正

こんな感じ

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock --cluster-store=etcd://192.168.1.99:2379 --cluster-advertise=0.0.0.0:2376

詰まったこと

docker network create -d overlay testnetが失敗する

Error response from daemon: error getting pools config from store: could not get pools config from store: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint.

deprecated?

docker info

WARNING: node discovery and overlay networks with an external k/v store (cluster-advertise,
         cluster-store, cluster-store-opt) are deprecated and will be removed in a future release.

と出てくる。素直にswarmに切り替えるべきか

E資格受験メモ

deep learningの資格であるE資格を受験したのでメモ。

試験内容以外の色々も情報がなかったので書き留めておく。

TL; DR

  • レベル感としては黒本や認定講習の例題(JDLA提供の例題)と同等
  • 出題はシラバス全般のため、教材で練習しつつシラバスの項目の漏れがないかは確認しながら勉強した方がいい

結果

■合否結果


【 合 格 】


総受験者数   897名

合格者数    644名

■分野別の得点率

応用数学:90 %

機械学習:100 %

深層学習:72 %

開発環境:100 %

準備

  • 認定講習
  • 黒本

試験メモ

  • 出題内容はシラバス通りなので、シラバスに沿った勉強は大事
  • 実装問題は例題に近い感じ。ライブラリの知識は直接は問われなかった(例えばtensorflowのメソッド仕様を覚えていないと解けないようなものはなかった)
  • 全106問、120分 開始10分前くらいに入室したが、PC起動後すぐに試験始まった

出題項目のメモ(印象に残っているもの)

  • 方策勾配定理
  • 全結合型ニューラルネットワークのスクラッチ実装
  • 最適化学習の特徴(SGD,、AdaGrad, RMSprop、Adamなど)
  • Layer正規化、Instance正規化などの特徴
  • Sequence-to-Sequenceのネットワーク図
  • 識別モデルと生成モデルの特徴
  • A3C
  • ResNetやDenseNetの特徴
  • FCOS
  • BERT
  • WaveNet
  • FFT、メル尺度
  • SiameseNetとTripletLoss
  • MAML
  • Grad-CAM
  • セマンティックセグメンテーションとは

その他、情報理論機械学習の各項目

シラバスに載っていたが出題されなかった項目のメモ(別日の試験で出たかも?)

  • オートエンコーダ
  • AlphaGo
  • GoogLeNet、EfficientNet
  • WordEmbedding
  • CTC
  • LIME、SHAP
  • グラフ畳み込み
  • LSTM、GRU、Attentionも多分なかった

その他試験システムなど

  • よくあるCBTの形式。PCで完結しており、メモ用にボードが1枚貸与される。PC画面内に電卓(Texas Instruments製)がある
  • 1画面1問の形で、すべて選択式
  • 振り返り用に各問題にフラグを付けられる
  • 前後は1問ずつしか移動できない。
  • 最後まで解き終わると、問題番号の一覧とフラグ有無が出るので任意の問題を見直すことができる
  • 一覧には問題番号とフラグのみで、問題内容の情報はないので、手元のボードに補足情報をメモしながら進めた方が見直しがしやすい(計算問題の番号を控えておくなど)

所感

  • 問題の内容・難易度としては、黒本や認定講習の例題とほぼ同じ
  • 時間は割と短めなので、テンポよく解き進めた方がいい
  • 行列計算やベイズの定理の計算問題は時間とられないように練習しておいた方がいい
  • 試験対策としては実装には時間かけなくても良さそう(python書けなくても試験自体は問題ないのでは?)。im2colとか全結合ニューラルネットワーク、CNNの実装問題見ておけばおおむね行けそう。問われる箇所は変わると思うので、そこは柔軟に
  • シラバスの追加項目以外については全くわからない(細かく覚えていなかったものはあるものの、教材になかった)というものはなかった
  • シラバスに項目のあるトピックは抑えておいた方がいい(MAMLとかGrad-CAMとか、シラバスに載っているのに認定講習も黒本もアップデートが遅い)。ただ、何が問われるかをまとめるのは難しいかも。例えば、「ResNet=スキップ接続で勾配消失を解消」で試験対策できるが、「MAML=?」をうまくまとめられるか
  • 教材にあるものの最低ラインは抑えておくとよさそう(問題を一通り解けるレベル)
  • 認定講習と黒本と両方見てみると、説明がわかりやすい方があって理解しやすかったりする(黒本のLSTMやAttentionの説明は分かりやすかった)。認定講習と黒本の組み合わせは割と捗ったが、認定講習:理論的な情報量が多めで試験対策としては重要なものがわかりにくい、黒本:試験対策としては向いているが、誤植多いとの話があったり、新シラバスに対応していないこともあったりして、全面的には信頼できない。シラバスと見比べながら漏れがないように確認した方がいい。
  • そもそも試験の合格ラインは低め?そもそも講習も受けているし試験自体はそんなに重視されていない可能性もありそう

CentOS 8でのVPN(L2TP/IPsec)構築のメモ

CentOS 8の記事が少なめで、ややハマったのでメモ

エラー

initial Main Mode message received but no connection has been authorized with policy PSK  

が出る。

解決策

デフォルトで/etc/ipsec.conf内にて

include /etc/crypto-policies/back-ends/libreswan.config

をしており、これが悪さをしていた模様。コメントアウトすることで解消(中身未確認)

その他

L2TP kernel support not detected (try modprobing l2tp_ppp and pppol2tp) 

については、xl2tpd.service内のmodprobe l2tp_pppをコメントアウトすることで対応した。

elasticスタックを使う時に知っておきたかったこと

随時更新する。

①環境構築はdocker-composeで出来る & ハイスペックでなくてもいい

docker-composeが複数公開されていて、そのまま使ってセットアップできる。

また、docker-compose.yml内でメモリ使用量を設定することで、256MBメモリから使える。

②調べものをするときはバージョンを確認すること

後方互換性がない変更が多いので、バージョン違う情報は参考程度にしておいたほうがいい。

現時点の最新は7.x系だが、5.x系の記事が多い印象。 下手に検索するよりも公式見たほうが結局早かったりする。

③kibanaのDev Tool使えばelasticsearchもこわくない

elasticsearchってRESTで操作するのよくわからんとか思っていたけど、kibanaのDev ToolだとAPIを補完してもらえたり、対象APIのドキュメントをすぐ開けたりするのでかなり便利。

④kibanaのいろいろ

  • index managementはStack Management(HomeのManageからアクセス)にて行う

⑤Logstashのいろいろ

  • add_fieldはgsubの後でしか実行されない

こう書くのが正解

mutate {
  add_field => { "client-host" => "%{[event_data][IpAddress]}"}
}
mutate {
  gsub => ["client-host", "::ffff:", ""]
}

stackoverflow.com

スマートメータBルートで電力使用量を取得する際のECHONET Liteについてのメモ

スマートメータBルートで電力量を取得するPYTHONスクリプトを作成する際に、ECHONET Lite仕様とか、そもそもWi-SUNとかECHONET Liteとか何だっけ?となったのでメモ。

TL; DR

  • スマートメータBルートはECHONET LiteとWi-SUNを用いる
  • ECHONET Liteはスマートハウス向けのOSIのL5〜6の通信プロトコル、Wi-SUNは920MHzの無線規格であり、スマートメータBルートはWi-SUN無線上でIPv6+UDP+ECHONET Liteで通信を行う。
  • ECHONET Liteはスマートメータに限らずエアコンとかの家電でも実装されている(ものがある)
  • ECHONET Liteのフレームフォーマットをきちんと読み解いた

環境

以下の環境にて動作を確認。

Wi-SUN接続確認

  • 事前に電力会社へBルート用認証情報を申請する
  • WSR35A1-00を接続し、screen /dev/ttyUSB0 115200でシリアル接続する
  • SKINFOでリファレンスマニュアルへの認証情報が得られる
  • リファレンスマニュアル71/79にBルート接続の仕方が記載されているので接続確認する
  • 接続後はSKSENDTOコマンドでECHONET Liteフレームを入力することでスマートメータとECHONET Liteでの通信が可能
  • 初期状態では、ペイロード部分のデータはバイナリで出力される。16進数ASCIIで出力したい場合はシリアル接続後WOPT 01コマンドを実行しておく。

以上の動作をPythonで記述すればスマートメータBルートからPythonでデータ取得できるのだが、ECHONET Liteをきちんと理解しておかないと何かと応用がきかない。

ECHONET Liteフレームフォーマット

ECHONET Liteフレームフォーマットは以下の形式である(厳密には任意フォーマット形式もあるがここでは割愛する)

f:id:smitch:20210411215824p:plain

各値の内容は以下の通り

EHD1

  • ECHONET Liteの場合は0001000
  • 従来のECHONET規格(LiteじゃないECHONET?)の場合は1***0000

EHD2

  • 上記の形式の場合は0x81
  • 任意フォーマット形式の場合は0x82

TID(Transaction ID)

  • 要求と応答を紐付けするための値
  • 応答送信側が要求のTIDに合わせる

SEOJ、DEOJ

  • 送信元と宛先のEOJをそれぞれ指定する
  • X1、X2は機器種別ごとに「ECHONET機器オブジェクト詳細規定」により決まっている
  • X3は同一機器に複数インスタンスがある場合を想定して指定されている

ESV

  • 送信しているメッセージが「応答」、「要求」、「通知」を示すためのコード
  • 応答の要否や不可応答などもあり、種類がやや多い

要求としてよく使いそうなものを書き残しておく。

  • 0x60: プロパティ値書き込み要求(応答不要)
  • 0x61: プロパティ値書き込み要求(応答要)
  • 0x62: プロパティ値読み出し要求

OPC

  • 送信しているメッセージが含む(EPC1, PDC1, EDT1),...の組の数を指定する

EPC

  • 具体的な処理を示すコード(例えば瞬時電力計測値の要求など)。機器ごとに規定されている

PDC

  • EDTのバイト数を保持

EDT

  • 書き込み要求時の書き込みデータなどの指定。処理内容(ECHONET Lite用語ではプロパティ)ごとに規定されている

以上を踏まえて、「ECHONET機器オブジェクト詳細規定」から扱いたい機器のクラス規定を参照すれば希望の処理が行えるはず。

例えば、スマートメータだと、過去の積算電力量を読み出そうとすると、「読み出したい日付をスマートメータ側に書き込み要求」+「(書き込んだ日付の)積算電力量計測値履歴の要求」の組み合わせが必要、といったことなどはきちんと規定を読まなければいけない。

具体的なコードは多数ウェブ上にあるのでここでは割愛する。そのうち整理してgithubにでも載せる。

所感

  • 初見だと、ノード、オブジェクト、プロパティとかの用語がピンとこない(ノード=機器、オブジェクト=機器内のECHONET Lite通信を行うモジュール(機器内に複数あるかも)、プロパティ=コマンドくらいの読み替えでおおよそ掴める)
  • 仕様上は想定パターンが多く複雑そうに見えるが、実際に必要な処理自体は単純
  • もうちょっとスマート家電系流行って欲しい

スマホ選び 2021冬

スマホの買い替え検討のためのメモ

現機種について

現在、Xperia XZ3 SO-01Lを使っている。

現行の評価と不満

主な評価・不満としては、

  • 画面きれい
  • 希望サイズよりやや大きい
  • CPU性能、メモリ、ストレージは良い
  • たまに動作が不安定(落ちる)
  • 周囲に合わせて輝度を調節してくれる機能がいまいち。ないと不便だが、期待通りに動いてくれない閾値になっている
  • バッテリーの持ちは及第点。持つには持つがパワーセーバーを起動すると使いたくなくなるくらい動作が悪くなる
  • ニュースアプリとしてNews Suiteが入っているが、自分にあったニュースが通知に出てきている感じがしない(芸能ニュース多めな気がするが、興味ない)
  • カメラの起動やシャッター押してからの撮影が遅い。カメラ起動後、30秒くらいシャッター押していないと自動で終了するのだが、もう少し長い方がいい。
  • ワイヤレス充電は便利ではあったが充電機器を複数持っていないのでないならないでも問題なかったかな。

スペック

現機種の主なスペック

  • 約158(H)×約73(W)×約9.9(D)mm
  • RAM 4GB/ROM 64GB
  • カメラ画素:約1920万画素(アウト)、約1320万画素(イン)
  • 3200mAh(内蔵電池)
  • 重量 約193g
  • 防水 防塵

要件

OS

現行がandroidであるのとOS分散のためandroidでまずは探したいが、スペック次第ではiOSも選択したい。

機能

概ねiphone8相当以上のスペックを期待するが、具体的に押さえたいポイントは以下の通り。

カメラ動作

早いこと(カメラ起動、シャッターボタンを押してから実際に写真をとるまで) 主に人物写真、スマホで閲覧する範囲において画質が良いこと

バッテリー

1日以上持つこと(バッテリーセーバー起動も含むが、バッテリーセーバー起動時に著しく動作が悪くならないこと)

メモリ容量、動作の安定性

ブラウザ使用程度の用途において、動作が安定しており、十分なメモリ容量があること

画面サイズ

片手での画面操作がしやすいこと(iphone8又はiphone12程度の画面サイズが好ましい)

ストレージ容量

アプリインストールに困らない程度のストレージ容量 (プリインストールアプリ含めて現在319個ある)

その他

使用感を損ねる品質の機能を持っていないこと。 例えば、現行のスマホは画面輝度を周りに合わせて調整してくれるのだが、夕方の少し暗くなった部屋と真っ暗な部屋が同じ扱いになっていたり、画面を少し傾ける程度ですぐに明るさが変わったりするなどストレス要因になっている。 その他、プリインストールアプリなど。

選択肢

ドコモ契約なのでドコモ端末とSIMフリー枠でPixel

機種 arrows 5G F-51A arrows NX9 F-52A AQUOS sense5G SH-53A Xperia 5 II SO-52A AQUOS R5G SH-51A Xperia 1 II SO-51A 現機種(Xperia XZ3) Google Pixel 5
サイズ(HxWxD mm) 164×76×7.7 152x72x8.5 148x71x8.9 158x68x8.0 162x75x8.9 166x72x7.9 158x73x9.9 144.7x70.4x?
メモリ(RAM/ROM GB) 8/128 8/128 4/64 8/128 12/256 8/128 4/64 8/128
バッテリー(mAh) 4070 3600 4570 4000 3730 4000 3200 4080
カメラ(万画素) 4800 4850 1200 1220 4800 1220 1920 1220
重量(g) 171 162 178 163 189 181 193 ?

結論

未決定

arrows NX9が良さそうな気がするけど、カメラの反応速度が分からないので保留中。お店行って実機さわるしかないか。

さっさとiphoneに乗り換えれば機種に悩むこともないのだが

cockpit-podmanインストールメモ

cockpitとcockpit-podmanのインストールメモ

TL; DR

  • cockpitはyumで入る
  • reverse proxyするならws通す
  • cockpit-podmanはyumで入るpodman 2.0.5, cockpit-podman 18.1の組み合わせだと動かないので自前ビルドする。

環境

CentOS: 8.3
podman: 2.0.5
cockpit: 224.2
cockpit-podman: 273

cockpit

cockpitって?

サーバ管理のためのウェブコンソール。webminの同種と言っていいのかな。

CPUやメモリ使用率などの統計情報の表示、firewalldやネットワーク系の設定などができる。

公式サイトはここ https://cockpit-project.org/

install

sudo yum install cockpit

でインストールできる。

sudo systemctl enable --now cockpit.socket

して、localhost:9090で動いていることを確認する。

reverse proxyで動かすなら、ここの設定を実施する。

websocketを通すのと、cockpit側でoriginの設定を入れる必要がある。

cockpit-podman

cockpit-podmanって?

podman container用のcockpitユーザインターフェース。要するにcockpitの画面上でコンテナの起動・停止ができる。

公式はここ https://github.com/cockpit-project/cockpit-podman

install

yumで入れると18.1が入るが、podman 2.0.5との互換性がないのでlatest(273)を手動で入れる。

まず、podmanを入れる

sudo yum install podman

次に、sasscを入れる。手順はこちらが詳しいのでここでは割愛。

nodeがなければ入れておく。手順はここでは割愛。

今回は以下のバージョンで動作した。

npm: 6.14.11
node: v14.15.5

cockpit-podmanをビルドする。なお、以下は全てユーザ権限でのインストールを想定。

git clone https://github.com/cockpit-project/cockpit-podman
cd cockpit-podman
make
mkdir -p ~/.local/share/cockpit
ln -s `pwd`/dist ~/.local/share/cockpit/cockpit-podman

podmanサービスを起動する

systemctl --user start podman

これでcockpitにアクセスすると"Podman containers"の項目が表示されるようになる。

f:id:smitch:20210212144204j:plain

なお、2つ目の"Podman Containers"はyum install cockpit-podmanでインストールしたもの。

こちらだと、API互換性がないのでimage一覧は表示されるがcontainer一覧が表示されない。

podman varlink unix:/run/user/1000/podman/io.podman --timeout=60000

の実行時に

Command "varlink" is deprecated, Please see 'podman system service' for RESTful APIs

のエラーになっていた。

感想

  • cockpit-podmanは情報少なめな感じ。docker優位だしcockpitとの組み合わせではユーザ数少ないか?
  • 手軽に使える面では便利。cockpit-podmanは機能少なめな感じだが、コンテナ管理したいならkubernetes使えよってことだろうか