Windows でプロセスごとの TCP IO をとってグラフにした
まぁいうてリソースモニターでできてることなんですが…
それでも面白いことがあったので。
結果はこんな感じ。
時々帯域をとってるのは、Firefox の通信です。
ブラウジングはこんなもんですかね。サイズ的にも KB なので、そこまでがっつり見に行ってなかったです。
で、これを通信イベントの回数にしてみると面白いんです。
やたらめったら目立つ黄色があったので、これだけに絞ってみます。
なんか定常的にやってる! あ、イベントの精査もできていないのでこれだけでこいつが悪者だ!!てわけではないです。
で、vpnkit という docker 関連のプロセスが発行しているですが、どんなイベントが発行させてるのかなーと調査してみたくなってきました。
何やってるんだろう。ワクワクします。
ちなみにサーバー側ですが、 docker-compose で InfluxDB + Grafana をローカルにたてて、 そこに向けてメトリクスなげてます。
以下の記事を参考にさせていただきました。感謝感謝。
influxDB + Grafanaに入門する - Qiita
クライアントは Rust で書いたんですが、unsafe
まみれなのでどうにかしたい…
そのあとにクライアント側で合算してサーバーに投げるとかになりますかねー
後は PID からプロセス名にするもありますか
先はながいなー
Grafana で AWS の見える化がすぐできた
いやー、すごい。
わかったらすぐできました。
例として AWS の使用料を見える化します。
まず、AWS 側で計測をはじめるため、請求ダッシュボード
-> 設定
-> 請求アラートを受け取る
にチェックをつけます。
で、Grafana を公式サービスおひとり様用で作成します。
Grafana のデータソースまで遷移して、プルダウンメニューから Cloud Watch を選びます。
一度、AWS にもどり IAM で以下のポリシーを付けた測定用のユーザーを作成、アクセスキー ID とシークレットキーを発行します。
- CloudWatchLogsReadOnlyAccess
- CloudWatchReadOnlyAccess
で、Grafana に戻り作成したアカウント情報を入れて、保存します。 ここでエラーが出る場合はポリシーの確認とかをするとよいかもです。
で、ダッシュボードのインポートで 139 を入れて、先ほど追加したデータソースを選び、ロードすると!
でたー!!
いやー、共有はつよいですねー。 先ほどの 139 も Grafana の公式サイトで公開されているやつです。
Grafana はローカル環境の性能計測で 3.x とかを使っていたので、ここまで進んでるとは思ってなかったです。いやすごい。
使用料だけでなく Lambda やら EC2 やら ElastiCache やらまで…
インフラはさっぱりなので、知見の塊っす。ありがたや。
誰か3か月前の僕にこの情報を届いてほしい…
Rust で Vector データを Map + Vector にいれる
どんな状況だったかというと、JSON で設定ファイルを書く必要があってそれが複数人にいじられるという感じで、マージで地獄を見たのでまずは TSV でどうにかしてみよう、となったときに書いたやつです。*1
ほんと JSON はマージしづらくてかなわん。
そして、ある要素をキーにまとめていくんですが、その配下が複数になりえる設定でした。というか、大体複数でした。
ということは、Vector から Map にしつつその中に Vector があって、ということになります。
で、こんな感じ。
use std::collections::HashMap; #[derive(Debug)] struct Hoge { a: String, b: u32, } fn main() { let xs = vec![ Hoge {a: "a".to_owned(), b: 1}, Hoge {a: "aaa".to_owned(), b: 2}, Hoge {a: "a".to_owned(), b: 3}, Hoge {a: "aaa".to_owned(), b: 4}, Hoge {a: "aa".to_owned(), b: 5}, ]; let h = xs.into_iter().fold(HashMap::<String, Vec<u32>>::new(), |mut acc, x| { acc.entry(x.a).or_insert(Vec::new()).push(x.b); acc }); println!("{:?}", h); }
https://play.rust-lang.org/?gist=75d175041fcd5577b2c9ea0d7fb95594&version=stable
一番の発見は or_insert
で、こいつのおかげで大分まとまりました。
mut
とかの話、はいいや。どっかで誰かが書いてそうです。
*1:本質的な解決になってなかったので動かしてないですが…
なんとなく思いついた Scala でのライブラリ切り替え
今日オブジェクトのシリアライズ形式を切り替える方法考えなきゃで、ぼんやりと思いついた方法。
trait DataFormat { type Format type Formatter[T] def ser[Data: Formatter](input: Data): Format def de[Data: Formatter](input: Format): Data } trait Spray extends DataFormat { import spray.json._ override type Format = JsValue override type Formatter[T] = JsonFormat[T] override def ser[Data: Formatter](input: Data): Format = input.toJson override def de[Data: Formatter](input: Format): Data = input.convertTo[Data] }
で、コンパイルしたところ
Warning:(40, 8) higher-kinded type should be enabled by making the implicit value scala.language.higherKinds visible. This can be achieved by adding the import clause 'import scala.language.higherKinds' or by setting the compiler option -language:higherKinds. See the Scala docs for value scala.language.higherKinds for a discussion why the feature should be explicitly enabled. type Formatter[T]
そーですか、警告スカ…
こんなコードばっか書いてるから IDE が不調になったりするのだ。意味は調べるけど。
MX ERGO 雑感
土曜日にヨドバシカメラで買って今日会社にもっていっての感想
角度
買った一番の理由です。普通のマウスで角度が付いたやつがあるので、トラックボールもあるかなーと探してみてもなかったんですよね。前。
んで、今回でてきたので飛びつきました。
一度付けた後で真っ平にすると違和感がでてきます。ん、つらい。的な。
一方で、手の重さの預けどころがまだちょっとわかってない感じです。かぶせるのに角度が付いていて、そこに手を預けたらいいのかを探り中。
探っていたせいか、前腕の筋に違和感がちょっとあったりもしました。
1日目ですしそのうちわかるでしょう。
ボール
接続せずに転がして引っかかてるかなーと思ったんですが、操作したらとくに遅延もないので大丈夫そう。
大きさ
結構大きいです。かぶせるという印象がかなり強め。
この大きさはどうなんでしょう。野郎で手が大きめの僕にはよかったですけど。
Bluetooth 接続
思ったより良かったです。
というのも、前に買った Bamboo タッチパッドも Bluetooth 接続でこの機種がいまいちだったんです。一番困ったのがスリープからの復帰で、10秒弱はかかっていた印象。
Bluetooth のせいかなーとおもっていたところ、それが今回1秒ぐらいで復帰してくれました。この辺りはバッテリーのもちとの兼ね合いはあるかもです。
この辺りはあれですかね。Logicool がすごいのか。
あとはレシーバーがなくなるのもありがたいです。ほら Type-C って、あるじゃあないですか…
表面の感触
表面がゴムぽくてでざらっとしてて、違和感というよりも不快感がちょっと先に出ました。慣れましたけども。
お値段
チョットタカイ
その他
Logicool Options を入れるまでは戻る進むのボタンが効かなかったです。入れればすぐに行けました。