17:04:25 # Life 今月読んだ本の読書メモ。
18:09:22 # Life pingっぽい挙動をするHTMLを書いてみた。 HTTP RequestとFetchするだけ、多分サーバが404を返してくるまでの時間を計測していると思う。 手元のNodejsサーバが7msくらいで意外と遅いなぁという感想。 http ping アプリ。 難しかったのは標準偏差の計算を各言語で実装してみて同じ値が出るようにするところ。
18:00:01 # Life 標準偏差を計算。 RとC++とRustとJavascriptで同じような値が出るようにとやってみ たところ値が合わなくてなんでだろうと思って調べていたらRでは stddevはn-1で割っていることがわかったので調べてなんかサンプ ルと母集団の場合で違うということをなんか薄っすらと思い出して めんどくさいなぁと思った。なんでこうなっていたのか。 nが十分大きいと気にならないのだけどnが小さいときとか挙動が正しいことを確認するためにユニットテストを書いてみたりすると気になる。
18:41:32 # Life pandasでndjson処理。 東京都のワクチン接種の速度はどうなっているのかなとおもったので調べてみた。 都道府県別のデータがNDJSON形式で提供されている。 もっと難しいかなと思っていたので拍子抜けしたのだがPandasのread_jsonは便利なことに行区切りのJSONというのを処理できるようになっているので(jsonl?)それを使えば良さそう。 とりあえず簡単にグラフができました。よかったよかった。二度目のワクチン接種している人の数なのかこれ。 最初に接種し終わっている65歳以上を除外したグラフがほしかったのでこれで良いのかも。 tokyo_vacc.groupby(tokyo_vacc['date']).sum()['count'].cumsum().plot()にしたら累積数になった。 東京都の人口1325万人、65歳以上は309万人、65歳以下はざっくりというと1000万人くらいか。そのうちの400万人くらい接種しているのかな。現在400万人くらいで、5万人くらいのペースで接種している、と。
vacc_per_pref = pandas.read_json('https://vrs-data.cio.go.jp/vaccination/opendata/latest/prefecture.ndjson', lines=True) # 東京都はprefecture 13 tokyo_vacc = vacc_per_pref[vacc_per_pref['prefecture']==13] tokyo_vacc = tokyo_vacc[tokyo_vacc['age']=='-64'] tokyo_vacc = tokyo_vacc[tokyo_vacc['status']==2] # 2nd doze tokyo_vacc = tokyo_vacc[tokyo_vacc['medical_worker']==False] tokyo_vacc.groupby(tokyo_vacc['date']).sum()['count'].plot()
11:57:47 # Life timesyncd設定してからしばらく放置していたシステム。以前は200msくらいずれていたのに今みたら数ミリ秒くらいしかずれてないっぽい。よい。
18:01:03 # Life colab, pandasでサンプリングのデータを処理してみた。 コロナウィルスの蔓延度を計測する一つの方法として適当に市中の人に検査に協力してもらうというモニタリング検査というのがあって そのモニタリング検査の結果がCSVで提供のでそれを処理してみた。 機械処理するという点ではCSVファイルでおいてあるのはまずよい。 まず文字列のエンコーディングがShift-JISであることでなんか嫌な予感、きょうびUTF-8が標準的。久々に文字コードなんてものがあるのを思い出させられた。 週数が文字列で1週目とかになっているのでなんかさらに嫌な予感。 そして検査数 にスペースが入っているコラム名になっているので更に嫌な予感。 あと数字がコンマ区切りになっているのでもっと嫌な予感。 ではあるがまぁ一応処理できなくもないCSV。
memo
region = pandas.read_csv('https://corona.go.jp/monitoring/csv/region_result_20210916.csv', encoding='shift_jis') tokyo_sample = region[region['都道府県']=='東京都'] tokyo_sample['week'] = pandas.to_numeric(tokyo_sample['モニタリング検査実施週'].str[:-2]) tokyo_sample['positive_rate'] = tokyo_sample['陽性疑い者数'] / pandas.to_numeric(tokyo_sample['検査数 '].str.replace(',',''))
17:50:13 # Life WebAudioのステレオからモノラルへの変換とモノラルからステレオへの変換。 Specを眺めている感じだとchannelCount=1のノードを経由すると Down mix, Up mixとなって左右に同じ音が聞こえるようになると思うんだけど、どうも左チャンネルにしか聞こえない。これでハマってしまった。 そしてスピーカーを確認したところ右チャンネルがつながってなかった。うげーーー何を試行錯誤していたんだいままで。
10:52:23 # Life podmanを使ってRustの開発環境を整備する。 なんかRustの最新版が使いたいこともあるけどパッケージとして入れるのは嫌だなぁと思っていたらpodmanでやればいいんじゃないかという気がしてきたのでメモ。 まずCargoのインデックス更新と依存関係のビルドのために/usr/local/cargoに中身を追加するためのDockerfileを用意した。src/以下はビルドする必要ないんだけどまぁよい。 一番遅いのはメタデータのダウンロードっぽいので関係ないプロジェクトのCargo.tomlでもよいのかもしれない。そこは未確認。
FROM docker.io/rust RUN apt update && apt full-upgrade -y && apt clean COPY . . RUN cargo build
podman buildのために、.dockerignoreにはtargetを追加、なぜかというと1GBくらいこのディレクトリに存在していて直接必要ではないから。ここはなんかもっと違う方法があるかも。
target
一連の作業は高速に動くことがわかった。cargo build 実行時のオーバヘッドは400msくらいなのでまぁ気にならない。
podman pull docker.io/rust podman build . -t rustbuild # なんか名前をつける # 毎回のビルド podman run -it --rm -v $(pwd):$(pwd):rw -w $(pwd) rustbuild cargo build podman run -it --rm -v $(pwd):$(pwd):rw -w $(pwd) rustbuild cargo test # 実行: ${PORT} にHTTPサーバ動かしている場合 podman run -a --rm -v $(pwd):$(pwd):rw -w $(pwd) --publish ${PORT}:${PORT} rustbuild cargo run # ゴミ掃除 podman ps -a # 何が残っているか確認 podman kill -a # うごいているのを殺す ちょっとなんで残るのかよくわかってない podman rm -a # 残っているデータを消す。 --rm つけ忘れたやつとか podman system prune # いらないデータを消す
14:57:16 # Life systemd-timesyncd. ntpをいれるとサーバ機能をどうするのかということがついてきたのでそこがめんどくさかったんだけど systemd-timesyncdはクライアント側の機能しか提供していないので問題がシンプルに。 Bullseyeで新しく入ったっぽい。 しかしネットワークの向こう側のサーバと時間が200msくらいずれているなぁということが気になっていたんだけどそこはまだ解決していない。 timedatectl statusで設定状況、timedatectl timesync-statusで時刻同期の状態が表示されるので確認してみたところ 初期設定のままだと2.debian.pool.ntp.orgにいってたまたまひろっているIPアドレスがうちからは200ms程度の距離にいることがわかった。 国内だと20msとかNGN内なら6msとかなのでそういうサーバを/etc/systemd/timesyncd.confのNTP=に追記したらとりあえずは良さそう?なのかな。
18:04:16 # Life aptの2.1.16 のNEWSみたら複数のカーネルあったら古いのを消すよと書いてあった。 Phased-Update-Percentageというフィールドが追加されてたりいろいろNEWSおもしろい。
16:55:13 # Life 自分の日記システムで一番複雑であろうMakefileをJSに書き直した。 Ninjaでもよいんだけどめんどうなので。 Makefile、並列実行したら出力が混じってしまってエラーメッセージとかが判別できないのが困る。Ninjaはそこをうまくしてくれる。多分Makefileもcatコマンドとか使って色々バッファリングしたら適切にできたと思うんだけど。
16:59:45 # Life apt dist-upgradeでカーネルが消えておどろいた。 普段古いカーネルを掃除してくれるひとはだれもいないのでどんどん増えていきがちなんだけど 今日気づいたら古いカーネルを削除してくれるようになっていた。 しかしざっと見た感じなぜ可能なのかわからない。
The following packages will be REMOVED: linux-image-4.19.0-16-amd64 linux-image-5.10.0-6-amd64
11:01:20 # Life アメリカ株の配当メモ。 WBEN-8で源泉徴収税率1割になっていて、日本で2割課税されると全体としては受け取るのは0.72(28%源泉徴収された)。高いのか安いのかよくわからない。そういえばアメリカの配当税については損益通算できないのかな・・・。
17:22:14 # Life 久々にGolangで書いた自宅用コードをいじった。 Raspberrypiで動いているウェブサーバで、サクサク動いていてよいのだが、Raspberrypi上でコンパイルすると分単位で時間がかかるので遅い。 nodejsだと気にならないスピードなのでGolangの欠点か。 初代Raspberrypiがおそすぎるというのはそれはそう。 まぁサクサク動いていると思っていたがHTTPリクエストの処理に1秒くらいかかっている(sqliteの処理にそれくらいかかっているっぽい)のでこれは遅いのかも。