つれづれ日記 2020年11月

予定

毎日


2020年11月29日 (日曜日)

10:35:29 # Life カウントダウンタイマーの使い方についてビデオを作成してみたが、使い方の説明が必要なほど複雑ではなかったかも。 カウントダウンタイマーサーバだけが動いているNodejsのDockerイメージを作成してそれをCloud Runで1インスタンスで動かすという仕組みにしてみました。 サーバとしては/にリクエストがきたらユニークっぽいIDを作成して「部屋」のIDとしその部屋単位でタイマーを管理。 Adminページにいくと管理者としてタイマーの時間をいつでも再設定できるように。 ブラウザがクライアントでブラウザ側では時間管理を全くせずに毎秒サーバにリクエストを送るようにしてみました。 こうするとリクエストの数が毎秒クライアント数になるうえに最大一秒のズレが発生するんだけどまぁ実用上は問題ないかな。 複数インスタンスの調整とか実装してなくて1インスタンス同時リクエスト数の上限が80なので、1リクエストで100ms以内ということを考えるとこのモデルで800クライアントくらいまではうごくかな。 もっと使えるクライアントの数を増やすには複数インスタンスへの調整とか、リクエストの頻度を減らしてクライアントサイドでもっと処理するとかすれば良いと思う。

2020年11月28日 (土曜日)

15:29:21 # Life canvas.toDataURLでハマった。 image/jpgを指定するとpngができて、image/jpegだとjpegができた。何じゃそりゃ。 そこをなおしたら先日のでもがまともな値になった。webp, png, jpegの差がそれっぽい。

webp: image/webp 72583
png: image/png 393406
jpeg: image/jpeg 163763

	

2020年11月25日 (水曜日)

09:44:31 # Life スクリーンショットのサイズ。 canvas.toDataURLで生成されるスクリーンショットのサイズを適当に(60fpsで)計測してみるコードを書いてみた。 出力はたとえばwebp: 19087 png: 115818 jpg: 115818。webpがすごいんだけどそれはchromeだからかな。

2020年11月24日 (火曜日)

17:56:16 # Life ひさびさにDockerをインストールしてみた。 docker buildでRUNしようとしたところで「failed to create endpoint on network bridge: failed to add the host」と出るのでなんじゃこりゃとおもったが、カーネルがモジュールのロードに失敗していたようだ。再起動したらなおった。アップデートした結果期待しているカーネルバージョン用のモジュールがなかったらしい。 これはハマる。 しかし自宅のネットワークでDockerを動かすと一瞬でダウンロードが終わらないので新鮮。

2020年11月21日 (土曜日)

11:16:40 # Life ビデオ録画ツールに手元のカメラで制御できるっぽいパラメータを制御できるようにスライダーを追加した。Chromeにべったりなので他のブラウザでは動かないと思うけど。 ここ。 Saturation, sharpness, contrast, brightnessあたりが操作できれば良いんじゃないか。 今日の学びとしては気づいたらJSのkeyに変数を入れやすくなっている。 {constKey: value}だったのが{[variableKey]: value} として指定できるようになった。 ES2015(ES6)ということは結構まえから?

2020年11月18日 (水曜日)

08:52:09 # Life ext4のcommitパラメーターについて調べたのでメモ。デフォルトはJBD2_DEFAULT_MAX_COMMIT_AGEで5秒。 s_commit_intervalがJiffiesで数えているのでINT_MAX/HZ以下じゃないといかんのだがINT_MAX/HZ秒っていったい何秒だろうと思って調べてたらHZ=1024で3年くらい?3年コミットしないジャーナルは流石にやばかろう。

2020年11月14日 (土曜日)

17:39:29 # Life またビルドシステムを書き直した。 手元のプロジェクトで使ってたNodejsで書いたビルドシステムがあったんだけどそれをC++で書き直してみた。Nodejsである必要ないよなぁとおもって。C++のプロジェクトだったらC++でビルドシステム書くべきな気がしたので。 BUILDみたいな形式になると面白いかなとかいろいろ考えたんだけど結局は素直にC++のコードっぽい書き方にした。 コードとしては情報を提供したwら必要なNinjaのルールを生成するというもの。 もうちょっとKey/Valueなかんじにしたいかなと思ったらc++20が必要になりそうだったのでInitializer_listで我慢。


int main() {
  NinjaBuilderConfig config;
  NinjaBuilder n(config);
  n.CompileLinkRunTest("gitlstree_test",
		       {"basename",
			"cached_file",
			"concurrency_limit",
			"directory_container",
			"get_current_dir",
			"git_cat_file",
			"gitlstree",
			"gitlstree_test",
			"scoped_timer",
			"stats_holder",
			"strutil"},
		       {"out/fetch_test_repo.sh.result"});
}

	

2020年11月11日 (水曜日)

08:31:32 # Life nodejsでwriteでエラーがおきたときのエラーメッセージ。 どのwriteでエラーが発生したのかを教えてくれないでerror eventがハンドリング去れていませんというエラーメッセージだけが出るのが辛い。

events.js:174
      throw er; // Unhandled 'error' event
      ^

Error: write EPIPE

	

2020年11月8日 (日曜日)

07:49:21 # Life 複数のChromebookを使ってて気づいたんだけどChromebook Pixelで動かしているCrostiniが特にプチフリーズみたいな挙動が多い。 なんかXの動きが変なのかも。なんでだろ。

09:02:17 # Life emacsがログインシェルの人あまりいないなぁとおもってみてる。 ssh-agent使いたいなぁとおもって調べたのだけどsystemd使って試行錯誤している人とかいろいろ。 とりあえずelispで環境変数を設定する方向で試してみようかな?


(defun ssh-agent ()
  "Run ssh-agent and set necessary environment variable."
  (interactive)
  (let* ((ssh-agent-output (shell-command-to-string "ssh-agent")))
    (string-match "SSH_AUTH_SOCK=\\([^;]*\\); " ssh-agent-output)
    (let* ((ssh-auth-sock (match-string 1 ssh-agent-output)))
      (setenv "SSH_AUTH_SOCK" ssh-auth-sock))))

	

ssh-agentのマニュアルを見た感じだと-a -Dを指定してEmacs側に管理去せてもいいかもしれない。 一時的なUNIX domain socketの名前をssh-agent側に生成させる価値はないし、 ログインシェルがemacsだったらssh-agentのプロセスの管理はemacsに任せれば良い。 systemd serviceにする場合でもそれは同じことのような気がする。

09:59:21 # Life クラウドのインスタンスつけっぱなしにするなら。 価格体系をながめてみるとVPSのほうが安い。たとえばGCEsakura vps。SakuraのVPSとSakuraのクラウドを比較すると価格設定は大体倍くらいになってるのかな。 僕のワークロードは使用率1%以下なのでその都度インスタンスを確保するほうがよいのだが。 なんでこんなことを調べようかと思ったのはまぁつけっぱなしにしてわすれてたから。

15:54:17 # Life webrecordアプリにマイナーアップデート。カスタマイズもうちょっとしないとなぁ。とりあえず720p決め打ちにしてみた。何も指定しないともっと解像度低いもしくは別のアプリの指定した解像度になるっぽい。これ

2020年11月6日 (金曜日)

16:29:55 # Life 東京エリアDebian勉強会のCI作業メモ。今日はSalsaのCIについて勉強した。 SalsaではGitlabのCIが使えるんだけど、全体で共有の「Shared」 環境というのがあるんだがなかなかビルドの順番が回ってこない。 その状況を回避するためには東京エリアDebian勉強会というグループでCIの実行環境(Runner)を用意することができる。 Gitlab CIの実行環境の設定についての説明はGitlabのドキュメントに書いてあって、CIの実行環境となるシステムからgitlab-runnerを実行して登録するとそこで実行できるようになると。 Dockerの環境の構築で住むはずのインストール作業を毎回いちからやりなおしているのもったいなぁとおもったけど Imageを指定する方法はあるけど、Dockerfileを指定する方法とかないのかな。 多分、cloud build でイメージを作成してgcr.ioから参照するということはできると思うんだけど、そのイメージの更新の仕組みをどうするか。 東京エリアDebian勉強会のCIは意外と個人の運用しているインスタンスに依存してビルドしているということがわかった。

18:08:02 # Life crontabでrebootで起動していたジョブ。気に入らないのでsystemdから起動してみることにした。 ハマるところはいくつかあるけど、まずserviceファイルの書き方、置く場所(.config/systemd/user/)、そしてuser権限でうごかすかシステム権限で動かすか。user権限で動かすんだったらserviceファイルの中にユーザを指定したら失敗。 user権限で動かす場合にその該当ユーザがログインしている間だけ動かすんじゃなくてシステム起動時に動かしたいのならloginctlでenable-lingerと指定することでログアウト状態でもジョブがうごくようにしないといけないところ。

2020年11月5日 (木曜日)

10:34:14 # Life sshfsのslaveモードについて思い出せないのでマニュアルにpull requestをしてみた。取り込まれたみたい。 名前をpassiveモードにしてみたけどどちらにしても思い出せない。

2020年11月4日 (水曜日)

08:17:52 # Life ハックカフェでやりたかったことメモ。どれかはやる。 ストリーミングのデバッグ、起動時にうごくはずの某ジョブがこけていること。Debian勉強会の資料。 Windowのキャストの方法

2020年11月1日 (日曜日)

09:07:58 # Life 最近結構ゲームしている。 SplatoonとRing Fit AdventureとFit BoxingとNieR Automataをプレイするので毎日が忙しい。


Junichi Uekawa