2020/04/26 にっき

弊社、Snap cameraブームがおきているが当方Linuxなので試せず

ということでこれを試すことにする

github.com

これが必要

github.com

あとminicondaも必要

docs.conda.io

いれる

% yay -Ss v4l2loopback
aur/v4l2loopback-dkms-git 0.12.4.r0.g9bd5553-1 (+12 1.12%)
    v4l2-loopback device
aur/v4l2loopback-dkms 0.12.5-1 (+38 4.89%)
    v4l2-loopback device
% yay -S v4l2loopback-dkms
% yay -Ss miniconda
aur/miniconda3 4.8.2-1 (+19 0.09%)
    Mini version of Anaconda Python distribution.
% yay -S miniconda3
% echo "[ -f /opt/miniconda3/etc/profile.d/conda.sh ] && source /opt/miniconda3/etc/profile.d/conda.sh" >> ~/.zshrc

確認する

% dkms status
v4l2loopback, 0.12.5, 5.6.7-arch1-1, x86_64: installed
% conda --version
conda 4.8.2

avatarifyをダウンロード

% ghq get https://github.com/alievk/avatarify.git
% cd ~/src/github.com/alievk/avatarify

インストールスクリプトを少し読む

% cat scripts/install.sh
#!/usr/bin/env bash

source scripts/settings.sh

# v4l2loopback
rm -rf v4l2loopback 2> /dev/null
git clone https://github.com/alievk/v4l2loopback.git
echo "--- Installing v4l2loopback (sudo privelege required)"
cd v4l2loopback
make && sudo make install
sudo depmod -a
cd ..

source $(conda info --base)/etc/profile.d/conda.sh
conda create -y -n $CONDA_ENV_NAME python=3.7
conda activate $CONDA_ENV_NAME

conda install -y pytorch==1.0.0 torchvision==0.2.1 cuda100 -c pytorch

# FOMM
rm -rf fomm 2> /dev/null
git clone https://github.com/alievk/first-order-model.git fomm

pip install -r requirements.txt
% cat scripts/settings.sh
# Web-camera device id
# Call `v4l2-ctl --list-devices` and find your web-camera device, e.g. /dev/videoX, where X is camera id
CAMID=0

# ################################################
# Normally you don't want to change settings below

# [Linux] Virtual camera device
# Make sure this id is greater than maximum device id in the list `v4l2-ctl --list-devices`
# Don't set a big number, it's known that Zoom does not detect cameras with id like 99
CAMID_VIRT=9

# Conda environment name
CONDA_ENV_NAME=avatarify

確認してみよう

% v4l2-ctl --list-devices
HD Pro Webcam C920 (usb-0000:02:00.0-4):
        /dev/video0
        /dev/video1

これvideo0とvideo1あるのはHDかどうじゃないかみたいな違いかしら、とりあえず CAMID は問題なさそうだし CAMID_VIRT も9でもんだいなさげ

v4l2loopback まわりの部分はざっくりコメントアウトしてしまおう

diff --git a/scripts/install.sh b/scripts/install.sh
index 4117693..6ba196f 100644
--- a/scripts/install.sh
+++ b/scripts/install.sh
@@ -3,13 +3,13 @@
 source scripts/settings.sh
 
 # v4l2loopback
-rm -rf v4l2loopback 2> /dev/null
-git clone https://github.com/alievk/v4l2loopback.git
-echo "--- Installing v4l2loopback (sudo privelege required)"
-cd v4l2loopback
-make && sudo make install
-sudo depmod -a
-cd ..
+# rm -rf v4l2loopback 2> /dev/null
+# git clone https://github.com/alievk/v4l2loopback.git
+# echo "--- Installing v4l2loopback (sudo privelege required)"
+# cd v4l2loopback
+# make && sudo make install
+# sudo depmod -a
+# cd ..
 
 source $(conda info --base)/etc/profile.d/conda.sh
 conda create -y -n $CONDA_ENV_NAME python=3.7

bash scripts/install.sh する

待っている間にちゃんとREADME読んだけどCUDAじゃないと、Geforceじゃないとだめそうじゃん。ぴえん。

まあ気にせずすすめる。 インストールはうまくいったのでDropboxからダウンロード。 md5sumを確認

% md5sum ~/Downloads/vox-adv-cpk.pth.tar
46b26eabacbcf1533ac66dc5cf234c5e  /home/sei/Downloads/vox-adv-cpk.pth.tar

大丈夫そうなので移動

% mv ~/Downloads/vox-adv-cpk.pth.tar ~/src/github.com/alievk/avatarify

実行する前にソースを読む

% cat run.sh
#!/usr/bin/env bash

#set -x

source scripts/settings.sh

bash scripts/create_virtual_camera.sh

source $(conda info --base)/etc/profile.d/conda.sh
conda activate $CONDA_ENV_NAME

CONFIG=fomm/config/vox-adv-256.yaml
CKPT=vox-adv-cpk.pth.tar

export PYTHONPATH=$PYTHONPATH:$(pwd)/fomm

python cam_fomm.py --config $CONFIG --checkpoint $CKPT --cam $CAMID --virt-cam $CAMID_VIRT --relative --adapt_scale $@%
% cat scripts/create_virtual_camera.sh
#!/usr/bin/env bash

source scripts/settings.sh

FILE=/dev/video$CAMID_VIRT
if [[ ! -w "$FILE" ]]; then
    echo "Creating virtual camera $FILE (sudo privelege required)"
    sudo modprobe v4l2loopback exclusive_caps=1 video_nr=$CAMID_VIRT card_label="avatarify"
    #sudo v4l2-ctl -d /dev/video$CAMID_VIRT -c timeout=1000
fi

これで一応動かしてみる、動いたがFPSが低い

% bash run.sh

転がってるEdge TPUのことを思い出しとりあえずライブラリをいれるがavatarifyはPyTorchなのでだめやん

% yay -Ss edgetpu
aur/libedgetpu-max 13.0-1 (+1 0.09%)
    Google Coral Edge TPU library and headers (max speed).
aur/libedgetpu-std 13.0-1 (+1 0.09%)
    Google Coral Edge TPU library and headers (standard speed).
aur/edgetpu_api 2.11.1-1 (+1 0.00%) (Orphaned)
    Google Coral Edge TPU runtime and Python library
% yay -S libedgetpu-max

おわり


JSONのoptionの型まじめにつけるのをあきらめて Hash[Symbol, bool] にして誰かに頑張ってもらいたい JSONに限らずoptsは魔境....

一応あとから頑張れるよう

type json_options = Hash[Symbol, untyped]

しておいて json_options を使うようにした

あとかいていて

type encoding = Encoding | string

でもう1 Pull Request出せることに気がついた

なんか他、いろいろ詰まってだめ。おやすみ。

2020/04/07 にっき

下書きに入れたまま忘れていた


活動あまりしていない方と https://github.com/CodeforOkinawa

最近活動している方で2つになっているので https://github.com/Code-for-OKINAWA

なんかいい感じにまとめられたほうがよいのでは、と思ってSlackにでばろうと思ったら入れなかったのでコメントをした。

www.facebook.com


年度が変わったのでRuby Associationに個人寄付のお申込をした

www.ruby.or.jp

2020/04/25 にっき: JSが 消えて型付く リポジトリ 働く仲間 増えてほしいなあ

最近職場のとあるリポジトリのコードからJavaScriptが消えつつありほぼほぼTypeScriptに移行された

残っているのは一抹の js.erb のみ

私はTypeScriptへの移行はぜんぜん関わっていない1のでそこまで型書いてないけど型が付いていて便利なことが多い、書いてみるとレスポンスとかいい感じにしたりpropsの interface だけまともに書くとあとはいい感じになる 2

新職場でどうOSSと関わって行こうかなあ、というのがぼんやりあったけど「職場のRubyのコードに型を付けていく」というのを趣味的にやろうかなあ

  • 足りない型が出てくるはずなのでそれを書いてOSSに還元する
  • リポジトリの全てのコードに型がついていると嬉しい
    • 働いていて「TypeScriptなら型があったのに」みたいな悔しい気持ちになるがなくなって嬉しいだろう
  • 型は欲しいけど自分では書きたくない人にとって働きやすくなる(私)
  • 型がある他の言語での書き換えを阻止してRubyをずっと書ける

はい

直近ではJSONの型を書いています

github.com

何卒

www.wantedly.com


  1. 4月1日働き始めた

  2. 様々な歴史的経緯によりVueとReactとjQueryが混在していたけど弊社のフロントエンドエンジニアめちゃくちゃ優秀なのでつい最近Vueが消えjQueryも消えReactだけを書いている

2020/04/22 にっき

scrapboxの方が在宅作業環境をまとめるのに適していそうだが構築していくログの流れはにっきに書きたいみたいな感じで使い分けがわからず悩んでいる


COVID-19の話題、自分はアホのような連想で食欲に変換するという傾向があることが分かってきた

  • 和牛券の話題を見てステーキを焼きはじめる
  • 🔟万円の給付金を知事が寄付をお願い、カツアゲしている様子を見てカツを揚げたくなる
  • 次亜塩素酸水の消毒液の話題をみて今ノロウィルス掛かったら絶対消毒薬なくてヤバイだろうなということで生牡蠣を食べたくなる

お魚券はどう料理したらいいかわからない


snapperの設定はうまくいっていそうだった


マイク買ったときのポイントが650ポイントあって650円割引になるのでこれを買った。

www.soundhouse.co.jp

  • いいところ: アームが50cm + 50cmありながい
  • わるいところ: アームの中にXLRケーブルが通っているのだがぶった切らないとケーブル外せない

結局オーディオインターフェイスがないからQ2UをUSB接続するのでXLRケーブルはいらないのだけど、ハサミできって取り外すのにどうしても抵抗を感じてしまうので、きっと外せずつかうんだろう。そう考えると邪魔くさいだろうな、という気持ちになる。 かといってXLRケーブルをつなぐためにオーディオインターフェイスにお金を注ぐかと言うとそんな気持ちはなく、もし注ぐならケーブルもこだわるのでやっぱりぶったぎるんだろうな、とか。 そもそも超こだわるなら値段2倍のマイクアームを買う...んだろうなと思うとなかなか購入を決断できなかった。

今日がポイントの期限なので結局今日このマイクアームかった。もっと早くかえばよかった。


TypeScriptではunknownで型付けたいけどGraphQLではどうなってるんだろう、というのがよく分からずPull Request出したけど着地は遠そう

github.com


10万円なにかおうかなあ


ArchLinuxでノイズキャンセルの設定を有効にしてみた

# /etc/pulse/default.pa
### Enable Echo/Noise-Cancelation
load-module module-echo-cancel

RealforcePS/2とUSBの変換器をかましているんだけど

  • Caps LockをCtrlにしていてt押すと変換器の都合なのかうまくCtrl+Tとして認識してくれない
  • Windowsキーがなくて不便

などの問題があり、フットスイッチを引っ張り出してきた(なんでもあるなわがや...)

yay -S footswitch-git してこれいれる

github.com

←コントロール、真ん中エンター、→Windowsで割り当てる

% lsusb | grep -i foot
Bus 003 Device 005: ID 0c45:7403 Microdia Foot Switch
# footswitch -1 -m ctrl -2 -k enter -3  -m win

2020/04/21 にっき

久しぶりに pacman -Syu したらこんなメッセージが出た

エラー: 処理を完了できませんでした (衝突しているファイル)
nss: /usr/lib/p11-kit-trust.so がファイルシステムに存在しています
エラーが発生したため、パッケージは更新されませんでした。

ググるとこれに当たった

www.archlinux.jp

もっと頻繁に pacman -Syu せねば...


pacman -Syu 前のバックアップのことを全く考えていなかった、snapperをいれる。軟弱者なのでGUIを使う。

% yay -S snapper-gui-git

なんか出た

>>>
>>> You must create a default config with snapper cli named root first.
>>> Run 'snapper -c root create-config /' as root
>>>

snapper --help で確認すると設定ファイル名の指定が -c オプションで create-config の引数はsubvolumeを指定するらしい

とりあえず # snapper -c root create-config / しておく

ArchLinuxのWikiを見る

wiki.archlinux.jp

なるほど

# snapper get-config
キー                   | 値
-----------------------+------
ALLOW_GROUPS           |
ALLOW_USERS            |
BACKGROUND_COMPARISON  | yes
EMPTY_PRE_POST_CLEANUP | yes
EMPTY_PRE_POST_MIN_AGE | 1800
FREE_LIMIT             | 0.2
FSTYPE                 | btrfs
NUMBER_CLEANUP         | yes
NUMBER_LIMIT           | 50
NUMBER_LIMIT_IMPORTANT | 10
NUMBER_MIN_AGE         | 1800
QGROUP                 |
SPACE_LIMIT            | 0.5
SUBVOLUME              | /
SYNC_ACL               | no
TIMELINE_CLEANUP       | yes
TIMELINE_CREATE        | yes
TIMELINE_LIMIT_DAILY   | 10
TIMELINE_LIMIT_HOURLY  | 10
TIMELINE_LIMIT_MONTHLY | 10
TIMELINE_LIMIT_WEEKLY  | 0
TIMELINE_LIMIT_YEARLY  | 10
TIMELINE_MIN_AGE       | 1800

/etc/snapper/config-templates/default に各値の説明がある

とりあえず起動時にバックアップを取るようにし、定期的に取るようにし、定期的に消すようにする

% systemctl enable snapper-boot.timer snapper-cleanup.timer snapper-timeline.timer

こんなに頻繁に長期間残さなくていいので雑に設定を変更、8時間ぐらいは残しておくか...と思ったけど全部はいらないので5時間ぐらいでいいかもしれない。homeの下だけsubvolumeわけて頻繁に取るみたいな設定をすれば(面倒なので今回はそのまま)。明日確認しよ。

snapper get-config
キー                   | 値
-----------------------+------
ALLOW_GROUPS           |
ALLOW_USERS            |
BACKGROUND_COMPARISON  | yes
EMPTY_PRE_POST_CLEANUP | yes
EMPTY_PRE_POST_MIN_AGE | 1800
FREE_LIMIT             | 0.2
FSTYPE                 | btrfs
NUMBER_CLEANUP         | yes
NUMBER_LIMIT           | 50
NUMBER_LIMIT_IMPORTANT | 10
NUMBER_MIN_AGE         | 1800
QGROUP                 |
SPACE_LIMIT            | 0.5
SUBVOLUME              | /
SYNC_ACL               | no
TIMELINE_CLEANUP       | yes
TIMELINE_CREATE        | yes
TIMELINE_LIMIT_DAILY   | 7
TIMELINE_LIMIT_HOURLY  | 8
TIMELINE_LIMIT_MONTHLY | 0
TIMELINE_LIMIT_WEEKLY  | 0
TIMELINE_LIMIT_YEARLY  | 0
TIMELINE_MIN_AGE       | 1800

2020/04/15 にっき

dev.toの通知周りを読んでいた。お昼に読めばいいんだけど、人はなぜ...

scrapbox.io

TypeScriptとMaterial UIの筋トレの必要性を感じていて1日にちょっと時間とってガッツリやっていかねば...

今日はrubyに右代入が入っていたのを確認していなかったので手元で動かしてなるほど〜〜となったりRactorで Array#map するのを実装していたりした

gist.github.com

明日はIOしたい

いいなと思ったらKyashでお金を下さい
20191128011151
GitHubスポンサーも受け付けています
https://github.com/sponsors/hanachin/