kuroの覚え書き

96の個人的覚え書き

データベースアプリ上のtempファイルを介した動作と古いtempファイルの自動削除

これまでデータベースアプリに仕込んだ解析プログラムの中間ファイルだったりダウンロードする解析済みファイルなどは各個人のプライベートフォルダに記録することにしていた。共有のフォルダにtempファイルを落とすようにすると、複数人でアクセスしたときにデータが混線するから。
しかしその方式だとユーザーごとに登録する必要があるし、ユーザー管理も面倒くさい。そこで一計を案じ、tempデータにタイムスタンプをつけて、混線しないようにデータをやり取りできる方法をとることにした。

具体的には動作の最初くらいにunixtimeを参照し、それを文字列としてtempファイル名に入れ込んでやり、続くプログラムでもその文字列を順次リレーしていくという感じ。

timeId = str(time.time())
target = "./temp/" + timeId + "_list.txt"
outfile = open(target, 'w')
outtsv = csv.writer(outfile, delimiter='\t', lineterminator='\n')
for record in q.all():
	outtsv.writerow([record.nbt_id])
outfile.close()
link = "<a href='/hogehoge/hoge_list/?id=" + timeId + "' download='hoge_list.txt' class='btn btn-default btn-xs'>Download hoge list</a>"

みたいに出来上がったtempファイルを次の処理にリレーできるようにリンクを生成するなど。

ただ、この方式だと./tempフォルダが早晩ファイルで溢れかえることになるので、古くなったtempファイルを削除してやる必要がある。新しいファイルと入れ替え方式にすると、他のユーザーが作ったtempファイルも消してしまいかねないのでだめ。最初cronで定期的にrmするか?とも思ったが、タイミングが難しいので、新しいtempファイルを作るタイミングで、そのタイムポイントから、いくらかさかのぼった時間以前のファイルを消してやるようにする。誰もアクセスしなかったらいつまでもファイルが残ることにはなるが、実害はそんなにないと思う。(生成されるファイルサイズにもよるが)

timeNow = time.time()
timeOld = timeNow - 3600
files = os.listdir("./temp")
for file in files:
	file = "./temp/" + file
	t = os.path.getmtime(file)
	if t < timeOld:
		os.remove(file)
timeId = str(timeNow)
target = "./temp/" + timeId + "_list.txt"
・・・・

のように。この例では3600秒(1時間)前より古くなったファイルを./tempフォルダから探し出してos.remove()で順番に消していっている。

これでユーザー登録無しで混線の心配なく使うことができるね。
1時間ぼーっとしていたらせっかく解析したファイルは消えてしまうことになるけど。ダウンロードはお早めに。

Meta quest 2を複数アカウントで使えない

Metaにブランド名が変わったOculus quest 2を入手したのでセットアップなどをしている。

このヘッドセットは買ってから知ったんだけど、基本本体だけで完結して、本体に専用アプリをインストールすれば使える機器であるということらしい。
なんだけど、どういうわけかセットアップするにはスマホbluetoothでペアリングする必要があるというよくわからなさ。
スマホ側にもアプリをインストールしておかないといけない。ついでにいうとMetaだけにFacebookのアカウントを持っていないと使えない。

Facebookのアカウントに紐付けされてOculusのアカウントがquest2本体にできるということらしい。

で、quest2を家族で共有しようと、アカウントを追加してみたんだけど、どうもおかしい。アカウント設定場面でアカウント追加を選んで、共有する人のFacebook IDなどを入力すると、一応アカウントが作られる様子はあるものの、ボールが浮かんでいる画面から一向に先に進まず、何もできるようにならない。
そもそもこの複数ユーザー設定って2021年2月頃にテスト機能として実装され、その後、いつからか正式機能として取り込まれたような感じなのだけど、もしかしたらまだ非常にバギーなんじゃないかな。

結局ユーザー複数登録は諦めて、SteamVRの中だけでユーザー切り替えてお茶を濁すことにした。

なお、早速VR酔いで気持ち悪いです。

サーバのメモリ整理

なんだか、ツギハギに増設をしていたら気がついたら規格まちまちになってて、遅いものに足を引っ張られてるんじゃないかという気がしてきたので全部調べてみる。
# dmidecode -t memory

Server#0 RX200S7
Locator: DIMM-1A
Size: 2048 MB
Type: DDR3
Type Detail: Unbuffered (Unregistered)
Speed: 1333 MT/s
Manufacturer: Samsung
Part Number: M391B5773DH0-YK0
Rank: 2
Configured Memory Speed: 1333 MT/s

Locator: DIMM-1B
Size: 2048 MB
Type: DDR3
Type Detail: Unbuffered (Unregistered)
Speed: 1333 MT/s
Manufacturer: Samsung
Part Number: M391B5773DH0-YK0
Rank: 2
Configured Memory Speed: 1333 MT/s

Locator: DIMM-1E
Size: 2048 MB
Type: DDR3
Type Detail: Unbuffered (Unregistered)
Speed: 1333 MT/s
Manufacturer: Samsung
Part Number: M391B5773DH0-YK0
Rank: 2
Configured Memory Speed: 1333 MT/s

Locator: DIMM-1F
Size: 2048 MB
Type: DDR3
Type Detail: Unbuffered (Unregistered)
Speed: 1333 MT/s
Manufacturer: Samsung
Part Number: M391B5773DH0-YK0
Rank: 2
Configured Memory Speed: 1333 MT/s

あれ?M391B5773DH0-YK0ってPC3L-12800 unbuffered ECCだから1600 MT/sのはずなんだが。biosの設定のせい?

Server#3 RX300S7
Locator: Node0_Dimm0
Size: 8192 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Hynix Semiconducto
Part Number: HMT31GR7CFR4A
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm1
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm3
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5173QH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm4
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5773DH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm6
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5173QH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm7
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm9
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node0_Dimm10
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5773DH0-Y
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm0
Size: 8192 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Hynix Semiconducto
Part Number: HMT31GR7CFR4A
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm1
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm3
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5173QH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm4
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5773DH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm6
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5173QH0-
Rank: 2
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm7
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm9
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Micron
Part Number: 18KSF51272PZ-
Rank: 1
Configured Memory Speed: 1600 MT/s

Locator: Node1_Dimm10
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1600 MT/s
Manufacturer: Samsung
Part Number: M393B5773DH0-Y
Rank: 2
Configured Memory Speed: 1600 MT/s

こっちはすべてPC3L 12800Rでちゃんと1600出てる。
しかし見事にばっらばらだな。RANK1とRANK2の混在は問題ないんだろうか?

Server#m1
Bank Locator: Node0_Bank0
Size: 4096 MB
Type Detail: Registered (Buffered)
Speed: 1333 MT/s
Manufacturer: Samsung
Part Number: M393B5170GB0-
Rank: 1
Configured Memory Speed: 1333 MT/s

こいつは同じ4GBが8枚
M393B5170GB0はPC3 10600Rなので規格通り。

Server#m2
Locator: Node0_Dimm0
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Hynix Semiconducto
Part Number: HMT125R7BFR8C
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm1
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm2
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm3
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm4
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm5
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm6
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm7
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm8
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm9
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node0_Dimm10
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s


Locator: Node1_Dimm0
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Hynix Semiconducto
Part Number: HMT125R7BFR8C
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm1
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm2
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm3
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm4
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm5
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm6
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm7
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm8
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm9
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

Locator: Node1_Dimm10
Size: 2048 MB
Type Detail: Registered (Buffered)
Speed: 1066 MT/s
Manufacturer: Micron
Part Number: 18JSF25672PDZ
Rank: 2
Configured Memory Speed: 1066 MT/s

おや?こいつもmicronのPC3 10600Rなので1333 MT/sのはずだが、 と思ったらなんとHynixのPC3 8500Rのが混ざってる。こいつの遅さはこのメモリのせいか?外してしまおう。

と思ったが、結局全部10600だった。よくよく調べるとそもそもRX300 S7って2G PC3-10600Rは動作保証がないようだ。規格通りの速度が出ていないのはそのせいかも。

CentOS7にpyenv-virtualenvを噛ましてAnacondaを入れてETE3toolkitをインストールする

なんともややこしいが禁断のAnacondaをCentOS7に入れてみる。
とにかくメインのサービスの邪魔をしないように厳重に環境を切り分けておく必要がある。
単純なPythonの環境切り分けなら、venvが今風なんだろうけど、混ぜるな危険のcondaなのでちょっと面倒だがpyenvを使う。
特定のディレクトリの中だけでAnacondaを動作させるためにvirtualenvも入れておく。

まずは何はなくともpyenvとvirtualenvのインストール。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
$ source .bash_profile
$ pyenv install anaconda3-5.3.1
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = "ja_JP.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Downloading Anaconda3-5.3.1-Linux-x86_64.sh.sh...
-> https://repo.continuum.io/archive/Anaconda3-5.3.1-Linux-x86_64.sh
Installing Anaconda3-5.3.1-Linux-x86_64.sh...
Installed Anaconda3-5.3.1-Linux-x86_64.sh to /home/rnaseq/.pyenv/versions/anaconda3-5.3.1

$ pyenv virtualenv anaconda3-5.3.1 anac1
Solving environment: done

・・・・・

# To activate this environment, use:
# > source activate anac1
#
# To deactivate an active environment, use:
# > source deactivate
#

Looking in links: /tmp/tmp_ys7svrl
Requirement already satisfied: setuptools in /home/rnaseq/.pyenv/versions/anaconda3-5.3.1/envs/anac1/lib/python3.10/site-packages (61.2.0)
Requirement already satisfied: pip in /home/rnaseq/.pyenv/versions/anaconda3-5.3.1/envs/anac1/lib/python3.10/site-packages (21.2.4)

$ source activate anac1
pyenv-virtualenv: activate anac1
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.

(anac1) $ source deactivate
pyenv-virtualenv: deactivate anaconda3-5.3.1/envs/anac1

$ mkdir anac1
$ cd anac1
$ pyenv versions
* system (set by /home/rnaseq/.pyenv/version)
  anac1
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1
$ pyenv local anac1
(anac1) $ pyenv versions
  system
* anac1 (set by /home/rnaseq/anac1/.python-version)
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1

これで環境は整ったと思い、ETE3 toolkitを入れていこうと

(anac1) $ conda create -n ete3 python=3
pyenv: conda: command not found

The `conda' command exists in these Python versions:
  anaconda3-5.3.1

Note: See 'pyenv help global' for tips on allowing both
      python2 and python3 to be found.

ここで一旦つまづく。


(anac1) $ cd
$ pyenv global anaconda3-5.3.1
(anaconda3-5.3.1) $ conda create -n ete3 python=3
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.11
  latest version: 4.13.0

Please update conda by running

    $ conda update -n base -c defaults conda

・・・・・

# To activate this environment, use
#
#     $ conda activate ete3
#
# To deactivate an active environment, use
#
#     $ conda deactivate

(anaconda3-5.3.1) $ cd anac1/
(anac1) $ pyenv local anac1
(anac1) $ pyenv versions
  system
* anac1 (set by /home/rnaseq/anac1/.python-version)
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1
  anaconda3-5.3.1/envs/ete3
(anac1) $ pyenv global system
(anac1) $ pyenv versions
  system
* anac1 (set by /home/rnaseq/anac1/.python-version)
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1
  anaconda3-5.3.1/envs/ete3
(anac1) [rnaseq@mn-rx1330m3 anac1]$ cd
$ pyenv versions
* system (set by /home/rnaseq/.pyenv/version)
  anac1
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1
  anaconda3-5.3.1/envs/ete3

一旦Anacondaをglobalに切り替えてインストール後globalをsystemに戻してやる。

(anac1) $ conda activate ete3
(ete3) (anac1) $ conda install -c etetoolkit ete3 ete_toolchain
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.11
  latest version: 4.13.0

Please update conda by running

    $ conda update -n base -c defaults conda

・・・・・



Downloading and Extracting Packages
ete3-3.1.2           | 2.1 MB    | ################################################### | 100% 
argtable2-2.13       | 2.8 MB    | ################################################### | 100% 
dialigntx-1.0.2      | 2.4 MB    | ################################################### | 100% 
numpy-1.19.2         | 21 KB     | ################################################### | 100% 
paml-4.8             | 7.1 MB    | ################################################### | 100% 
trimal-1.4           | 1.4 MB    | ################################################### | 100% 
pyqt-5.9.2           | 5.6 MB    | ################################################### | 100% 
numpy-base-1.19.2    | 5.2 MB    | ################################################### | 100% 
pip-21.2.2           | 2.1 MB    | ################################################### | 100% 
sip-4.19.8           | 290 KB    | ################################################### | 100% 
libxslt-1.1.34       | 573 KB    | ################################################### | 100% 
glib-2.69.1          | 1.9 MB    | ################################################### | 100% 
muscle-3.8.31        | 1.9 MB    | ################################################### | 100% 
gstreamer-1.14.0     | 4.0 MB    | ################################################### | 100% 
python-3.6.13        | 32.5 MB   | ################################################### | 100% 
fontconfig-2.13.1    | 299 KB    | ################################################### | 100% 
iqtree-1.5.5         | 6.8 MB    | ################################################### | 100% 
phyml-20160115.patch | 3.9 MB    | ################################################### | 100% 
jpeg-9e              | 273 KB    | ################################################### | 100% 
mkl-service-2.3.0    | 56 KB     | ################################################### | 100% 
freetype-2.11.0      | 943 KB    | ################################################### | 100% 
scipy-1.5.2          | 18.5 MB   | ################################################### | 100% 
expat-2.4.4          | 211 KB    | ################################################### | 100% 
libxcb-1.15          | 609 KB    | ################################################### | 100% 
setuptools-58.0.4    | 979 KB    | ################################################### | 100% 
intel-openmp-2022.0. | 8.5 MB    | ################################################### | 100% 
clustalo-1.2.4       | 2.0 MB    | ################################################### | 100% 
lxml-4.6.3           | 1.4 MB    | ################################################### | 100% 
gst-plugins-base-1.1 | 6.3 MB    | ################################################### | 100% 
mkl_random-1.1.1     | 382 KB    | ################################################### | 100% 
pmodeltest-1.4       | 727 KB    | ################################################### | 100% 
mkl-2020.2           | 213.9 MB  | ################################################### | 100% 
phylobayes-4.1c      | 26.7 MB   | ################################################### | 100% 
libgcc-7.2.0         | 304 KB    | ################################################### | 100% 
fasttree-2.1         | 272 KB    | ################################################### | 100% 
certifi-2021.5.30    | 141 KB    | ################################################### | 100% 
slr-1.4.3            | 638 KB    | ################################################### | 100% 
mafft-6.861          | 4.7 MB    | ################################################### | 100% 
ete_toolchain-3.0.0  | 2 KB      | ################################################### | 100% 
pcre-8.45            | 257 KB    | ################################################### | 100% 
qt-5.9.7             | 85.9 MB   | ################################################### | 100% 
libxml2-2.9.14       | 771 KB    | ################################################### | 100% 
dbus-1.13.18         | 586 KB    | ################################################### | 100% 
libpng-1.6.37        | 364 KB    | ################################################### | 100% 
raxml-8.2.11         | 10.4 MB   | ################################################### | 100% 
icu-58.2             | 22.7 MB   | ################################################### | 100% 
mkl_fft-1.3.0        | 185 KB    | ################################################### | 100% 
kalign-2.03          | 176 KB    | ################################################### | 100% 
six-1.16.0           | 19 KB     | ################################################### | 100% 
t_coffee-11.00       | 5.8 MB    | ################################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

無事インストールが完了した。AnacondaなしでのインストールとかMacにインストールはどうしてうまく行かないんだろう。

ただまあete3としてこれらを使う気は実はなくて、インストールされたツール群を自分のアプリから呼び出して使うつもりなのだが。
ete3として使うときはanac1ディレクトリに入って、

(anac1) $ conda activate ete3

としてやってからコマンドを叩くことになる。

Phylogenetic treeを描くためのツールを自分で集める

大方のソフトウェアはバイナリを実行権限つけて/usr/local/bin/におく
コンパイルが必要なものは適宜コンパイルしてやはり/usr/local/bin/におく

clustalo: Clustal omega
ClustalWより新しいアライメントソフトウェア
www.clustal.org
Mac用のバイナリがダウンロードできるのでダウンロードし、clustaloという名前にしてchmod 755で/usr/local/bin/にコピー。

fasttree: FastTree
最尤法による系統樹を描画するソフトウェア
www.microbesonline.org
fasttree.cをダウンロードして

$ gcc -O3 -finline-functions -funroll-loops -Wall -o FastTree FastTree.c -lm

iqtree: IQ-TREE
これも最尤法で系統樹を描く
www.iqtree.org
ダウンロードして

$ sudo cp iqtree-1.6.12-MacOSX/bin/iqtree /usr/local/bin/
$ sudo chmod 755 /usr/local/bin/iqtree

kalign: Kalign
msa.sbc.su.se
currentをダウンロードし、解凍。

$ ./configure
$ make

codeml
これも最尤法?
http://nebc.nox.ac.uk/bioinformatics/docs/codeml.html
なのだが、本体は
Phylogenetic analysis by maximum likelihood (PAML)
abacus.gene.ucl.ac.uk
こちらかな。
バイナリがダウンロードできる。

mafft: MAFFT
Multiple Alignment using Fast Fourier Transformということでフーリエ変換を使った累進法による系統樹を描く
mafft.cbrc.jp
mac用にバイナリがダウンロードできるようだ。
自分のプログラムにビルトインしたり、webサービスも有るようだ。
MAFFT alignment and NJ / UPGMA phylogeny
とりあえずこれ使ってりゃいい気もする。

muscle: MUSCLE
ClustalW同様のアライメント作成
www.drive5.com
バイナリでダウンロードできる
MEGAにもClustalWとMUSCLEが実装されている。

まだまだあるけどどこまで追求するか。
あとはtcoffeeくらいは見ておくべきか

Anacondaに手を出す

ずっとPythonは素のPython3をつかっている。
Anacondaはいっとき手を出した事はあるが、conda以外のpipでインストールしたライブラリとの折り合いが悪く、結局アンインストールして今に至る。
しかし素のPython3では依存関係がうまく構築できない案件がやはり出てくるので、pyenvで共存を図ることにしたい。

homebrewでpyenvとpyenv-virtualenvをインストールする。
そのために

$ brew update
Updated 4 taps (qmk/qmk, homebrew/core, homebrew/cask and brewsci/bio).
==> New Formulae
・・・・・
You have 132 outdated formulae and 2 outdated casks installed.
You can upgrade them with brew upgrade
or list them with brew outdated.

$ brew upgrade
==> Upgrading 132 outdated packages:
・・・・・
==> `brew cleanup` has not been run in the last 30 days, running now...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Removing: /usr/local/Cellar/openssl@1.1/1.1.1k... (8,071 files, 18.5MB)
Error: Permission denied @ apply2files - /usr/local/lib/docker/cli-plugins

久しぶりにMacのHomebrewをアップデートしたら(もしかしたらCatarinaにアップデートして初めて?)いきなりエラーでつまづく。

$ sudo chown -R $(whoami) $(brew --prefix)/*

$ brew upgrade
==> Upgrading 130 outdated packages:
・・・・・
Warning: Your Xcode (11.3.1) is outdated.
Please update to Xcode 12.4 (or delete it).
Xcode can be updated from the App Store.
・・・・・
==> Caveats
`osxfuse` has been succeeded by `macfuse` as of version 4.0.0.

To update to a newer version, do:
  brew uninstall osxfuse
  brew install macfuse

osxfuse requires a kernel extension to work.
If the installation fails, retry after you enable it in:
  System Preferences → Security & Privacy → General

For more information, refer to vendor documentation or this Apple Technical Note:
  https://developer.apple.com/library/content/technotes/tn2459/_index.html

You must reboot for the installation of osxfuse to take effect.
・・・・・
Error: emacs: It seems the App source '/Applications/Emacs.app' is not there.

なにやら不穏なCaveatsやWarningがたびたび出て、あげくまた別のエラーで止まる。
Emacsなんてそもそも入れてないはずなんだけどなあ。

$ brew reinstall emacs --cask --no-quarantine
==> Downloading https://emacsformacosx.com/emacs-builds/Emacs-28.1-4-universal.d
Already downloaded: /Users/kuro/Library/Caches/Homebrew/downloads/96cf5c42fb25db0b78be33651afe4cd8fc82097a0a81e10b4125a5d2831a125d--Emacs-28.1-4-universal.dmg
==> Uninstalling Cask emacs
==> Purging files for version 25.2 of Cask emacs
==> Installing Cask emacs
Warning: macOS's Gatekeeper has been disabled for this Cask
==> Moving App 'Emacs.app' to '/Applications/Emacs.app'
==> Linking Binary 'Emacs' to '/usr/local/bin/emacs'
==> Linking Binary 'ebrowse' to '/usr/local/bin/ebrowse'
==> Linking Binary 'emacsclient' to '/usr/local/bin/emacsclient'
==> Linking Binary 'etags' to '/usr/local/bin/etags'
==> Linking Manpage 'ebrowse.1.gz' to '/usr/local/share/man/man1/ebrowse.1.gz'
==> Linking Manpage 'emacs.1.gz' to '/usr/local/share/man/man1/emacs.1.gz'
==> Linking Manpage 'emacsclient.1.gz' to '/usr/local/share/man/man1/emacsclient
==> Linking Manpage 'etags.1.gz' to '/usr/local/share/man/man1/etags.1.gz'
🍺  emacs was successfully installed!

$ brew upgrade
Running `brew update --preinstall`...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/cask).
==> New Casks
bili-downloader
==> Updated Casks
Updated 2 casks.

なんかわからんがようやくbrew upgradeまで完了。

$ brew install pyenv pyenv-virtualenv

$ nano .bashrc
# pyenv
PYENV_ROOT=~/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

# brew doctor
alias brew="env PATH=${PATH/\/Users\/${USER}\/\.pyenv\/shims:/} brew"

を.bashrcに追記

$ source .bashrc

$ pyenv install anaconda3-5.3.1
Downloading Anaconda3-5.3.1-MacOSX-x86_64.sh.sh...
-> https://repo.continuum.io/archive/Anaconda3-5.3.1-MacOSX-x86_64.sh
Installing Anaconda3-5.3.1-MacOSX-x86_64.sh...
Installed Anaconda3-5.3.1-MacOSX-x86_64.sh to /Users/kkuro/.pyenv/versions/anaconda3-5.3.1

$ pyenv virtualenv anaconda3-5.3.1 anac1
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.11
  latest version: 4.12.0

Please update conda by running

    $ conda update -n base -c defaults conda
・・・・・
# To activate this environment, use:
# > source activate anac1
#
# To deactivate an active environment, use:
# > source deactivate
#

Looking in links: /var/folders/sf/3lk5x37135586w0jgqyjq_yc0000gn/T/tmpwy8czazq
Requirement already satisfied: setuptools in /Users/kuro/.pyenv/versions/anaconda3-5.3.1/envs/anac1/lib/python3.10/site-packages (61.2.0)
Requirement already satisfied: pip in /Users/kuro/.pyenv/versions/anaconda3-5.3.1/envs/anac1/lib/python3.10/site-packages (21.2.4)

$ source activate anac1
pyenv-virtualenv: activate anac1
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.

$ source deactivate
pyenv-virtualenv: deactivate anaconda3-5.3.1/envs/anac1

anac1という名前で仮想環境を作る。
ホームディレクトリにanac1というディレクトリを作り、仮想環境はその中だけで動作させる設定にしたい。

$ mkdir anac1
$ cd anac1
$ pyenv versions
* system (set by /Users/kkuro/.pyenv/version)
  anac1
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1
$ pyenv local anac1

ここでプロンプトが

kuro-Mac:anac1 kuro$ 

から

(anac1) kuro-Mac:anac1 kuro$ 

というように頭に(anac1)がつく。

(anac1) kuro-Mac:anac1 kuro$ pyenv versions
  system
* anac1 (set by /Users/kuro/anac1/.python-version)
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1

(anac1) kuro-Mac:anac1 kuro$ cd

kuro-Mac:~ kuro$ pyenv versions
* system (set by /Users/kuro/.pyenv/version)
  anac1
  anaconda3-5.3.1
  anaconda3-5.3.1/envs/anac1

このようにanac1ディレクトリから出ると素のPython3環境に自動的に戻る。

さて、Anacondaを入れることにした要因のETE Toolkitをインストールしておこう。
先ほど作成したanac1ディレクトリに入り

$ conda create -n ete3 python=3
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.11
  latest version: 4.12.0

Please update conda by running

    $ conda update -n base -c defaults conda
・・・・・
#
# To activate this environment, use:
# > source activate ete3
#
# To deactivate an active environment, use:
# > source deactivate
#

$ conda activate ete3
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
If your shell is Bash or a Bourne variant, enable conda for the current user with

    $ echo ". /Users/kuro/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.sh" >> ~/.bash_profile
・・・・・

早速エラーが出る。言われたように対応して

$ echo ". /Users/kuro/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.sh" >> ~/.bash_profile

$ source ../.bash_profile

$ conda activate ete3

そっけなく

(ete3) (anac1) kuro-Mac:anac1 kurovmax@gmail.com$

とプロンプトが変わり、

$  conda install -c etetoolkit ete3 ete_toolchain
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.11
  latest version: 4.12.0
・・・・・
Downloading and Extracting Packages
gettext-0.21.0       | 3.4 MB    | ##################################### | 100% 
pip-21.2.2           | 2.1 MB    | ##################################### | 100% 
mafft-6.861          | 4.8 MB    | ##################################### | 100% 
fasttree-2.1         | 278 KB    | ##################################### | 100% 
mkl_fft-1.3.0        | 175 KB    | ##################################### | 100% 
expat-2.4.4          | 145 KB    | ##################################### | 100% 
setuptools-58.0.4    | 970 KB    | ##################################### | 100% 
mkl_random-1.1.1     | 334 KB    | ##################################### | 100% 
certifi-2021.5.30    | 141 KB    | ##################################### | 100% 
numpy-base-1.19.2    | 5.0 MB    | ##################################### | 100% 
lxml-4.6.3           | 1.3 MB    | ##################################### | 100% 
sip-4.19.8           | 252 KB    | ##################################### | 100% 
libiconv-1.16        | 1.3 MB    | ##################################### | 100% 
kalign-2.03          | 261 KB    | ##################################### | 100% 
scipy-1.5.2          | 17.3 MB   | ##################################### | 100% 
pcre-8.45            | 221 KB    | ##################################### | 100% 
ete3-3.1.2           | 2.1 MB    | ##################################### | 100% 
argtable2-2.13       | 2.7 MB    | ##################################### | 100% 
dbus-1.13.18         | 550 KB    | ##################################### | 100% 
paml-4.8             | 7.0 MB    | ##################################### | 100% 
muscle-3.8.31        | 1.8 MB    | ##################################### | 100% 
libxslt-1.1.34       | 534 KB    | ##################################### | 100% 
mkl-service-2.3.0    | 45 KB     | ##################################### | 100% 
pyqt-5.9.2           | 4.4 MB    | ##################################### | 100% 
phylobayes-4.1c      | 27.3 MB   | ##################################### | 100% 
glib-2.69.1          | 3.3 MB    | ##################################### | 100% 
phyml-20160115.patch | 3.9 MB    | ##################################### | 100% 
raxml-8.2.11         | 10.4 MB   | ##################################### | 100% 
mkl-2019.4           | 155.2 MB  | ##################################### | 100% 
dialigntx-1.0.2      | 2.4 MB    | ##################################### | 100% 
libgcc-4.8.5         | 302 KB    | ##################################### | 100% 
pmodeltest-1.4       | 729 KB    | ##################################### | 100% 
t_coffee-11.00       | 10.5 MB   | ##################################### | 100% 
slr-1.4.3            | 862 KB    | ##################################### | 100% 
iqtree-1.5.5         | 11.2 MB   | ##################################### | 100% 
clustalo-1.2.4       | 1.4 MB    | ##################################### | 100% 
python-3.6.13        | 20.3 MB   | ##################################### | 100% 
ete_toolchain-3.0.0  | 4 KB      | ##################################### | 100% 
llvm-openmp-12.0.0   | 300 KB    | ##################################### | 100% 
trimal-1.4           | 1.4 MB    | ##################################### | 100% 
intel-openmp-2022.0. | 1.2 MB    | ##################################### | 100% 
numpy-1.19.2         | 20 KB     | ##################################### | 100% 
libxml2-2.9.12       | 1.2 MB    | ##################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

$ ete3 version
3.1.2 Tools path: /Users/kuro/.pyenv/versions/anaconda3-5.3.1/envs/ete3/lib/python3.6/site-packages/ete3-3.1.2-py3.7.egg/ete3/tools

$ ete3 build check
Current Toolchain path: /Users/kuro/.pyenv/versions/anaconda3-5.3.1/envs/ete3/bin/ete3_apps/bin 
Current Toolchain version: unknown
       clustalo: MISSING
         codeml: OK - AAML in paml version 4.8a, July 2014
Dialign-tx not supported in OS X
       fasttree: OK - Usage for FastTree version 2.1.8 Double precision (No SSE3), OpenMP (1 threads):
         iqtree: OK - IQ-TREE multicore version 1.5.5 for Mac OS X 64-bit built Jun  2 2017
         kalign: OK - Kalign version 2.04, Copyright (C) 2004, 2005, 2006 Timo Lassmann
          mafft: OK - MAFFT v6.861b (2011/09/24)
         muscle: OK - MUSCLE v3.8.31 by Robert C. Edgar
          phyml: OK - . This is PhyML version 20160115.
     pmodeltest: OK - pmodeltest.py v1.4
          raxml: OK - This is RAxML version 8.2.11 released by Alexandros Stamatakis on June 2017.
 raxml-pthreads: OK - This is RAxML version 8.2.11 released by Alexandros Stamatakis on June 2017.
         readal: OK - readAl v1.4.rev6 build[2012-02-02]
            slr: OK - # SLR "Sitewise Likelihood Ratio" selection detection program. Version 1.4.3
         statal: OK - statAl v1.4.rev6 build[2012-02-02]
        tcoffee: OK - PROGRAM: T-COFFEE Version_11.00.8cbe486 (2014-08-12 22:05:29 - Revision 8cbe486 - Build 477)
         trimal: OK - trimAl v1.4.rev6 build[2012-02-02]

WARNING: 1 external tools seem to be missing or unfunctional
Install using conda (recomended):
 conda install -c etetoolkit ete3_external_apps
or manually compile by running:
 ete3 upgrade-external-tools

インストールできたのか?。
clustaloが入ってないよ、と言っている気がする。

Clustal Omega - fast, accurate, scalable multiple sequence alignment for proteins

ここでMac用バイナリをダウンロードしてきて名前をclustaloに変える。そして
/Users/kuro/.pyenv/versions/anaconda3-5.3.1/envs/ete3/bin/ete3_apps/bin/
に移動させてchmod 755としてやれば

o$ ete3 build check
Current Toolchain path: /Users/kuro/.pyenv/versions/anaconda3-5.3.1/envs/ete3/bin/ete3_apps/bin 
Current Toolchain version: unknown
       clustalo: OK - 1.2.3
         codeml: OK - AAML in paml version 4.8a, July 2014
Dialign-tx not supported in OS X
       fasttree: OK - Usage for FastTree version 2.1.8 Double precision (No SSE3), OpenMP (1 threads):
         iqtree: OK - IQ-TREE multicore version 1.5.5 for Mac OS X 64-bit built Jun  2 2017
         kalign: OK - Kalign version 2.04, Copyright (C) 2004, 2005, 2006 Timo Lassmann
          mafft: OK - MAFFT v6.861b (2011/09/24)
         muscle: OK - MUSCLE v3.8.31 by Robert C. Edgar
          phyml: OK - . This is PhyML version 20160115.
     pmodeltest: OK - pmodeltest.py v1.4
          raxml: OK - This is RAxML version 8.2.11 released by Alexandros Stamatakis on June 2017.
 raxml-pthreads: OK - This is RAxML version 8.2.11 released by Alexandros Stamatakis on June 2017.
         readal: OK - readAl v1.4.rev6 build[2012-02-02]
            slr: OK - # SLR "Sitewise Likelihood Ratio" selection detection program. Version 1.4.3
         statal: OK - statAl v1.4.rev6 build[2012-02-02]
        tcoffee: OK - PROGRAM: T-COFFEE Version_11.00.8cbe486 (2014-08-12 22:05:29 - Revision 8cbe486 - Build 477)
         trimal: OK - trimAl v1.4.rev6 build[2012-02-02]

これでいいですね。DialignはMacでは使えないらしいのでどうにもならん。

とまあインストールできたように見えるんだけど、どうしたわけか動かないんだよなETE3 toolkit。バカバカしくなってきたから撤退。

coreserverにNode.jsを入れてJbrowseを使いたい

まずNode.jsがCoreserverで使えるのか?
標準状態ではインストールされていないし、root権限がないので通常のインストールもできない。

いろいろ調べてみると、nvm (Node Version Manager )を介するとユーザーごとにユーザー権限でインストールし、シェルごとに起動することができるらしいので、まずはこれを試してみる。

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 15037  100 15037    0     0  42126      0 --:--:-- --:--:-- --:--:-- 42120
=> Downloading nvm from git to '/virtual/kkuro/.nvm'
=> Cloning into '/virtual/kkuro/.nvm'...
remote: Enumerating objects: 355, done.
remote: Counting objects: 100% (355/355), done.
remote: Compressing objects: 100% (302/302), done.
remote: Total 355 (delta 39), reused 168 (delta 28), pack-reused 0
Receiving objects: 100% (355/355), 208.47 KiB | 0 bytes/s, done.
Resolving deltas: 100% (39/39), done.
* (detached from FETCH_HEAD)
  master
=> Compressing and cleaning up git repository

=> Appending nvm source string to /virtual/kkuro/.bashrc
=> Appending bash_completion source string to /virtual/kkuro/.bashrc
=> You currently have modules installed globally with `npm`. These will no
=> longer be linked to the active version of Node when you install a new node
=> with `nvm`; and they may (depending on how you construct your `$PATH`)
=> override the binaries of modules installed with `nvm`:

/usr/lib
├── boom@0.4.2
├── cryptiles@0.2.2
├── hoek@0.9.1
├── iconv-lite@0.2.11
└── xmldom@0.1.19
=> If you wish to uninstall them at a later point (or re-install them under your
=> `nvm` Nodes), you can remove them from the system Node as follows:

     $ nvm use system
     $ npm uninstall -g a_module

=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

さてNode.jsのインストールをしよう。

$ export NVM_DIR="$HOME/.nvm"
$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
$ [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
$ nvm install node
Downloading and installing node v18.2.0...
Downloading https://nodejs.org/dist/v18.2.0/node-v18.2.0-linux-x64.tar.xz...
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v18.2.0 (npm v)
Creating default alias: default -> node (-> v18.2.0)

すんなり入ったっぽい?

$ node -v
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
$ npm -v
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)

ありゃgccのバージョンが足らんのかも

$ nvm uninstall node
$ nvm ls-remote 
Uninstalled node v18.2.0
        v0.1.14
        v0.1.15
        v0.1.16
        v0.1.17
        ........
       v16.13.0   (LTS: Gallium)
       v16.13.1   (LTS: Gallium)
       v16.13.2   (LTS: Gallium)
       v16.14.0   (LTS: Gallium)
       v16.14.1   (LTS: Gallium)
       v16.14.2   (LTS: Gallium)
       v16.15.0   (Latest LTS: Gallium)
        v17.0.0
        v17.0.1
        v17.1.0
        v17.2.0
        v17.3.0
        v17.3.1
        v17.4.0
        v17.5.0
        v17.6.0
        v17.7.0
        v17.7.1
        v17.7.2
        v17.8.0
        v17.9.0
        v18.0.0
        v18.1.0
        v18.2.0

となっているので最新版じゃなくてv16.15.0にしてみる

$ nvm install 16
Downloading and installing node v16.15.0...
Downloading https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-x64.tar.xz...
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v16.15.0 (npm v8.5.5)
$ node -v
v16.15.0

OK

とまあとりあえずNode.jsを使えそうなところまでは来たのだけれど、Jbrowseはサーバなのでポートを自由に扱えない限り運用は難しいかも。

PythonからUSB camで写真を撮る

Pythonでは映像周りはopenCVで扱うのが良いようだ。

$ sudo apt install python3-opencv

cv2モジュールを読み込んであれこれするようだ。

$ python3
Python 3.8.10 (default, Mar 15 2022, 12:22:08) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> c=cv2.VideoCapture(0)
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (935) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
>>> r, img = c.read()
>>> cv2.imwrite('test.jpg',img)
True

これで

こんな感じにカメラで撮影されカレントディレクトリにtest.jpgとして保存された。
これで外部のプログラムを呼びださなくてもpythonで完結できるな。

VRoid Studioでアバターに着替えをさせてみる

顔と体はころころ変えると誰かわからんくなるので固定するとして、服装くらいは色々変えてやってもいいよな。
ってことでVRoid Studioを使って服を作ってみる。

すでに最初の服もVRoidのプリセットではなく、色を変えてみたりしているのだが。

まずはプリセットで定番女子高生的制服。

スカートやブラウスの色とラインの幅などをいじってみたり。

Tシャツにしてみたり。

最初のワンピースのテキスチャをいじってみたり。

服の形自体をいじるのはどうやるんだろうか。

アバターのアップロード

VRoidで作成したアバターをVRChatにアップロードしてみる。
VRoid StudioはMacにインストールしてMacで作業した。出来上がったアバターVRMにエクスポートして保存し、UbuntuUSBメモリで運搬。いろいろ先人のページを見ているとこれをBlenderで微調整して、Unityでアップロードするということになっている。というわけでBlenderとUnityをUbuntuにインストールする。
おもにはこれらのページを参考に
Ubuntu20.04でBlender/Unity/Steam/VRChatをインストールする - Phiel_ing
【Unity Hub】UbuntuでUnity3DとVRChat SDKインストールする方法 | 内向型人間の知恵ブログ

Blenderblender-3.1.2
UnityHUBは2.4.6
Unityのエディタのバージョンは2019.4.31f1
UnityのVRChatプラグインはVRCSDK3-AVATAR-2022.05.04.17.47_Public.unitypackage
UnityのVRMプラグインはUniVRM-0.98.0_2f6b.unitypackage
という組み合わせ。

VRChat SDKのダウンロードはVRChatのアプリではなくウェブサイトにログインするとダウンロードサイトがあるのでダウンロードしておく。SDKは多くの解説ページではSDK2を使って書かれているが、UbuntuでやるにはどうやらSDK3でないとコンパイルが完遂できないっぽい。

つぎにUnity Hubをインストールし、(ユーザーアカウントの登録などはすでにWindows版で行っていたので割愛)Unityエディタをインストールする。エディタのバージョンはVRChatの現時点の最新バージョンに依存するので、ここ(
Currently Supported Unity Version
)を確認する。
UnityHubのインストール画面からは推奨リリース、正式版から選択するのだが、現状では2019.4.31f1はリストされておらず、ダウンロードアーカイブへリンクで飛ぶ。で、該当バージョンのUnity Hubというボタンを押すのだが、そのままでは反応がないときは

$ xdg-mime default UnityHub.desktop x-scheme-handler/unityhub

とする。
Unityのインストールができたらプロジェクトを作る。新規作成で適当にディレクトリやプロジェクト名をいれて作成。Unityは1バージョンしか入れていなければそれがそのまま使われる。
プロジェクトを開くとAssets>Import Package>Custom Package....でSDKをインポートする。
同様にUniVRM-0.98.0_2f6b.unitypackageもインポートする。
ダウンロードはこちらから
Releases · vrm-c/UniVRM · GitHub

そのうえで、VRM形式で保存したアバターをAssetsのウインドウにドラッグ&ドロップする。

結局Blenderでは何もしなくてもとりあえずアップロードまでできたけど、細かな動きとか再現したければ骨の数を増やしたりするんだと思う。今回総ポリゴン数が4万を超えていて、ちょい重いかもしれない。ポリゴン数の調整なんかもBlenderでやるといいのだろうと思う。

Assetsにいれたアバターファイルを今度はHierarchyウインドウにドロップすると、メインのSceneウインドウにモデルが表示されるはず。

右のカラムにAdd Componentというボタンがあるので押す。VRC Avatar Descriptorを選ぶのだが、そのままではリストに現れないので虫眼鏡ウインドウにVRCくらいを入力して探すと一覧に現れる。謎仕様。
すると右カラムにVRC Avatar Descriptorが現れるので、View>View Positionで視点を調整する。アバターの顔の前に浮かんでいるグレーの点が目と目の間に来るようにXYZを入力する。

最後にアップロード作業。
VRChat SDK>Show Control Panel
で開くウインドウでまずはVRChatにログイン->Builderタブに移動->エラーに対応->Build & Publish for Windowsボタンを押す。

するとコンパイルが始まり、最終的にメインウインドウのGameタブにインストール画面が表示されれば成功。
この画面が何故かすごく解像度が低く、入力を求められていることがわかりにくいのだが、Avatar Nameを一番上のボックスに入力し、その下の枠のさらに下のチェックボックスにチェックして、一番下にあるUploadボタンを押す。

以上で作成したアバターがVRChatサーバにアップロードされているのでVRChatアプリでアバターを選ぶことができるようになる。