kuroの覚え書き

96の個人的覚え書き

アバターの自作

初心者向けのチュートリアルワールドをいくつか回っているうちにステータスがVisitorからNew Userに格上げされたので早速オリジナルなアバターをアップしたい。どうせなら自分で作りたいよ、ってことでVRoid Studio。これは流石にUbuntuでわざわざやることもないよな、できないわけではなさそうだけど。まあおとなしく使い慣れたMacでやることにした。
ちょうどNintendo WiiにあったMiiのようにボディパーツを選んでいくだけでなんとなくあっという間に3Dモデルが出来上がる。すごいね。自分で作った美少女が動き回るよ。これでバ美肉の仲間入りだねw

あんまり奇をてらったキャラ作りをしたいわけではないので、ごくふつーでしょ。(でも猫耳

これを次はBlenderに持っていって微調整してUnity経由でアップロードだね。

XEONサーバにGTX1650をインストールしてVRChat

GTX1650をインストールした。
もっと強力なグラボのほうがいいのは当然なのだが、NEC Express5800 T110f-EのマザーボードPCI-eスロットの配置が1x、1x、16x、4xとなっていて4xにRAIDカードが乗っており、SASのHDDx3でRAID5が起動ディスクとなっている。グラボを16xに刺すにはシングルスロットにするかRAIDカードを外して起動ディスクをどうにか変更してダブルスロットのグラボを入れるかすることになる。後者にするにはいろいろとややこしいし、RAIDカードを外したとしてもSATA用のmini-SASコネクタがすぐ脇にあってグラボと干渉しそう。あと、それにしてもグラボ用補助電源のコネクタがないのでそれもどこからか工面してくる必要がある。
ということで妥協点として補助電源なし、シングルスロットでそこそこの性能のELSAのGTX1650カードを購入した。


おお、GT710じゃカクカクして全くお話にならなかったが、ちゃんと動き回れるじゃないの。
ということで当初の目的は達成。

WEB会議用マイク

学会発表とか大事な場面でマイクの通りが悪くて何度も失敗しているため(比較的)ちゃんとしたマイクを使ってみようと思いたち

これを買ってみた。888M マランツプロ USBコンデンサーマイク
コンデンサーマイクと書いてるがエレクトレットコンデンサーマイクと呼ばれるタイプでファンタム電源はいらない。しかしPCのマイク端子から取れる電流程度は必要なのでダイナミックマイク用のオーディオインターフェースでも使えないちょっと癖のあるマイク。つまりはヘッドセットについているPC用マイクと同様な代物なわけだ。
Sonyにも同様な形状、構成のマイクがあり、それなりの音が取れることは知っていたので、更に安いこいつを試してみたくなり、つい。
で、学会発表で使ってみたら見事撃沈。だめっす。本番で冒険するの良くない。←アタリマエ。

どうも付属のUSBインターフェースとMacの相性が非常に悪いらしく、ハウリングしてるような、もしくはガラス越しのような不鮮明な音しか録れないらしい。

ところが、実はこのマイクMacで使うならわざわざ付属USBインターフェースに繋がなくても、ヘッドフォンジャック(マイク兼用4端子)に接続すれば非常にクリアな音が取れることが判明した。

こういう分岐のアダプタをMacのヘッドフォンジャックに挿し、マイク側に今回のマイク、ヘッドフォン側に何らかのヘッドフォンをつなぐといい。

Macに内蔵されているADコンバータは結構優秀なようで、ローノイズな音がちゃんと取れるようにもとからなっているので、安物のUSBインターフェースなど使わないほうが良いというわけだ。

最近はすっかりMacの脇にスタンバっており常にスタジオ状態で仕事している。マイクカフでも導入しようかな。

VRChat

メタバースってのがジワジワきてる。
ってことでVRChatというのを始めることにする。

まずはとにかくやってみるということで専用にPCを調達することにした。

仮想空間、3Dってことなので3Dヘッドセットが必須なのかと思ったら、まああって悪くはないし、没入感はあったほうがいいよ、というものでゲームの中に入り込むような感じであれば普通にPCだけでもいいらしい。


まあこんなのがあれば申し分ないわけですが。

とりあえずまずはPCだけで始めることにする。
とはいってもうちには基本Macしかない(Macは3台常時接続で稼働している。あ、子供らはそれぞれウインドウズ使っているな)のでPCを調達から始めなければならない。

少人数で遊ぶ程度のVRモードでCore i5 8700~ 、メモリ16GB、GeForce GTX1660~またはGeForce RTX 2060~
大規模にVRモードであそぶならCore i7 9700~、メモリ32GB、RTX3060〜
ということらしいので、

これいっとく。
メモリは16GBだけど足りないようならそのうち増設すればいいかと。
早速環境を構築してメタバース突入〜。
いける、いけるよこれで。ってことで環境としては申し分なさそう。
ファンが結構全開でずっと回っているのがノートPCとしてはアレだけど。あとゲーミングPCとうたっているからUS配列だとばっかり思っていたら普通にJIS配列だった。この点はDELLのにしときゃよかったか?と思わなくもないが、まあよしとしよう。

さて、これだけではアマゾンの宣伝にしかならないので、ここからちょっと普通はやりそうもないことに挑戦だ。

うちにはヤフオクでジャンクで2000円で買ったNECのサーバが転がっていて、時々サーバ環境を構築してはお蔵入りを繰り返していたのだが、こいつでVRChatいけないのか?というのを試してみることにした。

スペック的には
XEON E3-1220V3 (Haswell)
8GB ECCメモリ
GeForce GT710
というちょっと残念な感じ。

デスクトップモードというのでやるなら
Core i5 4400~、メモリ16GB、GeForce GTX1650~
というのが要求スペックなのでCPUはまあギリギリ、メモリはちょっと足らん、グラボはだいぶ足らん。
という感じ。
何よりWindowsが入っていない。Linuxでなんとかなるのか?というところが最大の問題点。しかしどうやらUbuntuならWineを介してSteamアプリを起動することが可能とのこと。
現状ではCentOS7が入っていたが、特に運用もしていなかったのであっさりUbuntuに乗り換えることにした。時期的には22.04がもう出ていたが20.04のDVDRがすでにあったのでとりあえず20.04にしておく。最新バージョンより1つ前のほうが色々安定しているかもしれんしな。そもそもUbuntuは新しすぎて好かん、ということでCentOS7派なわけだし。

さて、UbuntuにSteamをインストールするには

[Proton] Ubuntu 18.04 で Windows 向け Steam ゲームをやる - under-identified’s diary

こちらの言われるままにインストールするだけ。

sudo apt install steam

お手軽にこちらを実施。Steamのアカウントは持っていたのでそのパスワードを思い出すのが一番時間がかかったね。

で、動かしてみると動くには動く。でもVRモードはきつい。普通に自室にいる分には問題ないが、一度人がいっぱいいるワールドに入ってみようものならカクカクしてマウスに全く追従しないので身動きが取れない。やはりグラボはもうちょっと積まないと実用的ではないな、というのが結論。グラボの高騰もちょっと落ち着いてきたし、GTX1650くらい入れてみるかなあ。ただこの手のデスクトップサーバはPCIeの構成が結構きついのと、補助電源が用意されていないので変換ケーブルとか色々面倒なのだよね。

ETE Toolkitで系統解析

ClustalWはお手軽にアライメントをとって系統樹を描くことが出来る。
しかしClustalWで出力されるdndファイルを使った系統樹は近年、系統樹としてはあまり信頼をされない。
ClustalWで実施される解析は近隣結合法(Neighbor joining method)で、計算量は極めて少なく、短時間で描写できるメリットは有るが信頼度としてはあまり高いとは言えない。
なので、大まかに系統を描いてざっくりとした分類をするくらいなら問題ないが、系統解析がメインの仕事に用いるにはちょっと役者不足と言われる。

そこで最尤法やBayes法による描写ができる環境構築を目指すことにした。目に止まったのはETE Toolkitというpythonパッケージ。
etetoolkit.org

まずはインストールしてみる。CentOS7サーバに入れていつものようにWebアプリに組み込みたい。
私はAnacondaは使わない方針なので、

$ sudo yum install PyQt4.x86_64 numpy.x86_64 python-lxml.x86_64 python-six.noarch
$ python3 -m pip install --upgrade ete3
$ ete3 upgrade-external-tools

と実施したが、

$ ete3 upgrade-external-tools
target directory? [/home/kuro/.etetoolkit/]:
Downloading latest version of tools...
Decompressing...
Compiling tools...
Compiling tcoffee ...Ok
Compiling clustalo ...argtable2 library is missing. Attempting to compile a local version
Ok
Compiling muscle ...Ok
Compiling dialigntx ...Ok
Compiling mafft ...Ok
Compiling kalign ...Ok
Compiling prank ...Ok
Compiling probcons ...Ok
Compiling trimal ...Ok
Compiling pmodeltest ...Ok
Compiling fasttree ...Ok
Compiling raxml ...Ok
Compiling phyml ...Ok
Compiling consel ...Ok
Compiling paml ...Ok
Compiling slr ...ERROR
Compiling slr. Check log /home/kuro/.etetoolkit/ext_apps-latest/slr.log

という感じでslrのコンパイルでエラーが出て止まってしまう。

$ cat /home/kuro/.etetoolkit/ext_apps-latest/slr.log
rm: `/home/kuro/.etetoolkit/ext_apps-latest/bin/Slr' を削除できません:そのようなファイルやディレクトリはありません
rm -f *~ *.o
rm: `../bin/Slr'を削除できません:そのようなファイルやディレクトリはありません
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o slr.o -c slr.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o like.o -c like.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o tree.o -c tree.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o data.o -c data.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o rng.o -c rng.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o model.o -c model.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o bases.o -c bases.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o codonmodel.o -c codonmodel.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o gencode.o -c gencode.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o utility.o -c utility.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o matrix.o -c matrix.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o optimize_new.o -c optimize_new.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o spinner.o -c spinner.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o options.o -c options.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o tree_data.o -c tree_data.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o linemin.o -c linemin.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o gamma.o -c gamma.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o statistics.o -c statistics.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o mystring.o -c mystring.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o nucmodel.o -c nucmodel.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o root.o -c root.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o vec.o -c vec.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o brent.o -c brent.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o rbtree.o -c rbtree.c
gcc  -o ../bin/Slr slr.o like.o tree.o data.o rng.o model.o  bases.o codonmodel.o gencode.o utility.o matrix.o optimize_new.o spinner.o options.o tree_data.o linemin.o gamma.o statistics.o mystring.o nucmodel.o root.o vec.o brent.o rbtree.o -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99 -L -lblas -llapack -lm 
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dgetrf.o): in function `dgetrf_':
dgetrf.f:(.text+0x348): undefined reference to `dtrsm_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetrf.f:(.text+0x3f9): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dgetri.o): in function `dgetri_':
dgetri.f:(.text+0x335): undefined reference to `dtrsm_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetri.f:(.text+0x47d): undefined reference to `dswap_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetri.f:(.text+0x505): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetri.f:(.text+0x59f): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dsyev.o): in function `dsyev_':
dsyev.f:(.text+0x508): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dsytrd.o): in function `dsytrd_':
dsytrd.f:(.text+0x386): undefined reference to `dsyr2k_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytrd.f:(.text+0x6a7): undefined reference to `dsyr2k_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dtrtri.o): in function `dtrtri_':
dtrtri.f:(.text+0x140): undefined reference to `_gfortran_concat_string'
/home/linuxbrew/.linuxbrew/bin/ld: dtrtri.f:(.text+0x27a): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrtri.f:(.text+0x2c4): undefined reference to `dtrsm_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrtri.f:(.text+0x570): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrtri.f:(.text+0x5f1): undefined reference to `dtrsm_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dsteqr.o): in function `dsteqr_':
dsteqr.f:(.text+0xab0): undefined reference to `dswap_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(xerbla.o): in function `xerbla_':
xerbla.f:(.text+0x49): undefined reference to `_gfortran_st_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x54): undefined reference to `_gfortran_string_len_trim'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x69): undefined reference to `_gfortran_transfer_character_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x79): undefined reference to `_gfortran_transfer_integer_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x81): undefined reference to `_gfortran_st_write_done'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x8a): undefined reference to `_gfortran_stop_string'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dgetrf2.o): in function `dgetrf2_':
dgetrf2.f:(.text+0x18e): undefined reference to `dtrsm_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetrf2.f:(.text+0x1f6): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetrf2.f:(.text+0x35c): undefined reference to `idamax_'
/home/linuxbrew/.linuxbrew/bin/ld: dgetrf2.f:(.text+0x425): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlatrd.o): in function `dlatrd_':
dlatrd.f:(.text+0x125): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x1a3): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x29e): undefined reference to `dsymv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x326): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x3a0): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x425): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x4a2): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x4f0): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x55d): undefined reference to `ddot_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x5c1): undefined reference to `daxpy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x6f5): undefined reference to `dsymv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x738): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x788): undefined reference to `ddot_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x7d2): undefined reference to `daxpy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x880): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x8f7): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0x99a): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0xa16): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlatrd.f:(.text+0xa9f): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlatrd.o):dlatrd.f:(.text+0xb16): more undefined references to `dgemv_' follow
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dsytd2.o): in function `dsytd2_':
dsytd2.f:(.text+0x1b3): undefined reference to `dsymv_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x1ff): undefined reference to `ddot_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x249): undefined reference to `daxpy_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x28b): undefined reference to `dsyr2_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x46d): undefined reference to `dsymv_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x4cc): undefined reference to `ddot_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x529): undefined reference to `daxpy_'
/home/linuxbrew/.linuxbrew/bin/ld: dsytd2.f:(.text+0x58a): undefined reference to `dsyr2_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dtrti2.o): in function `dtrti2_':
dtrti2.f:(.text+0x159): undefined reference to `dtrmv_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrti2.f:(.text+0x17d): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrti2.f:(.text+0x2e5): undefined reference to `dtrmv_'
/home/linuxbrew/.linuxbrew/bin/ld: dtrti2.f:(.text+0x310): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlarfg.o): in function `dlarfg_':
dlarfg.f:(.text+0x39): undefined reference to `dnrm2_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfg.f:(.text+0x16f): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfg.f:(.text+0x1fc): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfg.f:(.text+0x255): undefined reference to `dnrm2_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlarfb.o): in function `dlarfb_':
dlarfb.f:(.text+0x1a5): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x22a): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x299): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x313): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x4ac): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x513): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x582): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x5ee): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x71c): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x783): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x7f2): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x85e): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x995): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xa29): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xa98): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xb24): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xc7a): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xd09): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xd79): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xe06): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xf44): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0xfb3): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1023): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1090): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x11cf): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1251): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x12c1): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x133c): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1475): undefined reference to `dcopy_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x14e6): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1556): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x15c3): undefined reference to `dtrmm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x16c4): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1734): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x17b1): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x1835): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarfb.f:(.text+0x18a3): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlarfb.o):dlarfb.f:(.text+0x191e): more undefined references to `dgemm_' follow
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlarft.o): in function `dlarft_':
dlarft.f:(.text+0x4c4): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarft.f:(.text+0x543): undefined reference to `dtrmv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarft.f:(.text+0x6db): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarft.f:(.text+0x87d): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarft.f:(.text+0x91b): undefined reference to `dtrmv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarft.f:(.text+0xa6a): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dorg2l.o): in function `dorg2l_':
dorg2l.f:(.text+0x221): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dorg2r.o): in function `dorg2r_':
dorg2r.f:(.text+0x2e6): undefined reference to `dscal_'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dlarf.o): in function `dlarf_':
dlarf.f:(.text+0x13a): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarf.f:(.text+0x185): undefined reference to `dger_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarf.f:(.text+0x206): undefined reference to `dgemv_'
/home/linuxbrew/.linuxbrew/bin/ld: dlarf.f:(.text+0x250): undefined reference to `dger_'
/home/linuxbrew/.linuxbrew/bin/ld: matrix.o: in function `Matrix_Matrix_Mult':
matrix.c:(.text+0x7c): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: matrix.o: in function `Matrix_MatrixT_Mult':
matrix.c:(.text+0x123): undefined reference to `dgemm_'
/home/linuxbrew/.linuxbrew/bin/ld: matrix.o: in function `MatrixT_Matrix_Mult':
matrix.c:(.text+0x1bc): undefined reference to `dgemm_'
collect2: エラー: ldはステータス 1 で終了しました
make: *** [Slr] エラー 1
cp: `../bin/Slr'をstatできません:そのようなファイルやディレクトリはありません
ls: /home/rnaseq/.etetoolkit/ext_apps-latest/bin/Slr にアクセスできません:そのようなファイルやディレクトリはありません

とな。
discussionを見ると同じような症状が書かれている。
Compiling slr ...ERROR

LAPACKライブラリをインストールせよ。とな。

$ brew install LAPACK

これだけではだめ。
liblapackとlibblasが/usr/lib/liblapack.aと/usr/lib/libblas.aにあることを確認。

$ ete3 upgrade-external-tools
target directory? [/home/kuro/.etetoolkit/]:

とインストールを開始したら、すかさず別のターミナルで

$ cd .etetoolkit/ext_apps-latest/src/slr/src
$ nano Makefile.linux

Makefileを開き、

LDFLAGS = -L$(BLASDIR) -lblas -llapack -lm

LDFLAGS = -L/usr/lib/lapack -llapack -L/usr/lib/libblas -lblas -lm

に書き換える。なんとトリッキーな。

すると、やっぱりslrでエラーが出る。

$ cat /home/kuro/.etetoolkit/ext_apps-latest/slr.log
rm: `/home/kuro/.etetoolkit/ext_apps-latest/bin/Slr' を削除できません:そのようなファイルやディレクトリはありません
rm -f *~ *.o
rm: `../bin/Slr'を削除できません:そのようなファイルやディレクトリはありません
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o slr.o -c slr.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o like.o -c like.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o tree.o -c tree.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o data.o -c data.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o rng.o -c rng.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o model.o -c model.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o bases.o -c bases.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o codonmodel.o -c codonmodel.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o gencode.o -c gencode.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o utility.o -c utility.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o matrix.o -c matrix.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o optimize_new.o -c optimize_new.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o spinner.o -c spinner.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o options.o -c options.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o tree_data.o -c tree_data.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o linemin.o -c linemin.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o gamma.o -c gamma.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o statistics.o -c statistics.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o mystring.o -c mystring.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o nucmodel.o -c nucmodel.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o root.o -c root.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o vec.o -c vec.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o brent.o -c brent.c
gcc -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99  -o rbtree.o -c rbtree.c
gcc  -o ../bin/Slr slr.o like.o tree.o data.o rng.o model.o  bases.o codonmodel.o gencode.o utility.o matrix.o optimize_new.o spinner.o options.o tree_data.o linemin.o gamma.o statistics.o mystring.o nucmodel.o root.o vec.o brent.o rbtree.o -O4 -fomit-frame-pointer -funroll-loops -DNDEBUG -std=gnu99 -L/usr/lib/lapack -llapack -L/usr/lib/libblas -lblas -lm 
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(dtrtri.o): in function `dtrtri_':
dtrtri.f:(.text+0x140): undefined reference to `_gfortran_concat_string'
/home/linuxbrew/.linuxbrew/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../liblapack.a(xerbla.o): in function `xerbla_':
xerbla.f:(.text+0x49): undefined reference to `_gfortran_st_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x54): undefined reference to `_gfortran_string_len_trim'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x69): undefined reference to `_gfortran_transfer_character_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x79): undefined reference to `_gfortran_transfer_integer_write'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x81): undefined reference to `_gfortran_st_write_done'
/home/linuxbrew/.linuxbrew/bin/ld: xerbla.f:(.text+0x8a): undefined reference to `_gfortran_stop_string'
collect2: エラー: ldはステータス 1 で終了しました
make: *** [Slr] エラー 1
cp: `../bin/Slr'をstatできません:そのようなファイルやディレクトリはありません
ls: /home/rnaseq/.etetoolkit/ext_apps-latest/bin/Slr にアクセスできません:そのようなファイルやディレクトリはありません

しかしエラーが減っている。

ん、よく見ると間違っているじゃないか。

LDFLAGS = -L/usr/lib/liblapack -llapack -L/usr/lib/libblas -lblas -lm

なんじゃないか?

いや同じエラーが出て止まるな・・・

未解決

リストに従ってテキスト置換

FASTAファイルのIDの命名を変更したいと思ったが、scaffoldの数が多すぎて面倒臭すぎるので、自動化したい。

変更一覧をrename.listに以下のように記録しておく。

Scaffold1	Scf0001
Scaffold2	Scf0002
Scaffold3	Scf0003
Scaffold4	Scf0004
..........	...........

で、おもむろに

$sed 's/\([^\t]*\)\t\(.*\)/s|\1|\2|g/' rename.list | xargs -I{} sed -i '{}' target.fasta

ワンライナーを走らせる。
なお、Macでやるとエラーが出る。MacBSD sedでは-iオプションにバックアップファイルの設定が必須だから、ということらしいがそれだけでもなさそうな。

sed: 1: "target.fasta": undefined label 'arget.fasta'

というエラーが延々出る。なにこれ?

$ brew install gsed

Gnu sedをインストールしてしまえばこの問題は起こらないことがわかった。

$sed 's/\([^\t]*\)\t\(.*\)/s|\1|\2|g/' rename.list | xargs -I{} sed -i "" '{}' target.fasta


参考ページはこちら
参照ファイルを用いて、複数のテキスト置換を一括で行う - Qiita

で、実際に走らせてみると不具合発覚。
例えばScaffold11とかがScf00011になる。本来の希望はScf0011なわけで。
いろいろ考えてみたが、リストを降順で記載しておけば、大きい数字のところから処理されていくため、期待通りの変換になることがわかった。

Jetson NanoにUSB接続でリモートアクセス

Jetson Nano (B01, 2GB)はイーサネットワーク以外にUSBケーブル直結でリモートアクセスが可能になっている。

B01, 2GBともにmicro USBコネクタがついている。B01のそれはデフォルトでは電源供給用となっているが、ピンヘッダでACジャックから供給してやると特に接続する必要がなくなるが、ここをPC、Macと直結することでUSBケーブル経由のネットワークが形成され、リモートアクセスが可能となる。
2GBはもとからmicro USBは通信用に用意されている。

アクセスの方法はusbmodemとしてシリアルコンソール接続する方法と、IP接続する方法の両方が利用できる。OSがインストールされていない状態でもシリアルコンソールは利用可能なので、OSのセットアップからリモートで実施できる。

まずはシリアルコンソールから。
Macでターミナルを開き

$ ls /dev/cu.usbmodem*
/dev/cu.usbmodem14237200591583

このように/dev以下にデバイスファイルが見つかるので

$ sudo screen /dev/cu.usbmodem14237200591583 115200
Password:

Macのパスワードを入れてリターンすると

Ubuntu 18.04.5 LTS kuro-jetson2g ttyGS0

kuro-jetson2g login: 

このようにJetsonのログイン画面が表示される。OSがインストールされていないときは
System Configuration
の画面が出てくるはずだ。

あとは普通にログインするだけ。

次にIP接続。
OSさえセットアップされていればsshで普通にログインできるはず。

$ ssh 192.168.55.1 -l kuro
kuro@192.168.55.1's password:

IPアドレスは192.168.55.1がデフォルトで設定されているのでsshだとこんな感じ。

またMicrosoft Remote Desktopを使ってリモートデスクトップで接続も可能。
ただ、リモートデスクトップで接続するためには少なくとも一度はローカルにモニタとキーボードを繋いでログインしておかないといけないらしいが本当か?

somocluで自己組織マッピング その2

というわけで定番Irisでやってみよう。

import numpy as np
import matplotlib.pyplot as plt
import somoclu
import pandas as pd
%matplotlib inline
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
Y = iris.target
n_rows, n_columns = 50, 50
som = somoclu.Somoclu(n_columns, n_rows, initialization="pca",gridtype="rectangular",maptype="planar",neighborhood="bubble")
som.train(data=X, epochs=10)

som.view_component_planes(figsize =(5,5))

som.view_umatrix(figsize =(5,5), bestmatches=True, labels=Y)

from sklearn.cluster import KMeans
som.cluster(KMeans(n_clusters=3))

som.clusters

colors =  ['r', 'b', 'g']
a = list(map(lambda x:colors[som.clusters[som.bmus[x][1],som.bmus[x][0]]],range(len(som.bmus))))
som.view_umatrix(figsize =(5,5),bestmatches=True, labels=Y,colormap ='Greys', bestmatchcolors=a)

f:id:k-kuro:20220225131903p:plainf:id:k-kuro:20220225131914p:plainf:id:k-kuro:20220225131922p:plain
こんな感じ。

somocluで自己組織マッピング

Self Organized Mappingをpythonでやりたくてsomocluをインストールしてみた。

まずはMacに入れてみると、

Python 3.9.6 (default, Jun 29 2021, 06:20:32) 
[Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import somoclu
Warning: the binary library cannot be imported. You cannot train maps, but you can load and analyze ones that you have already saved.
If you installed Somoclu with pip on macOS, this typically means missing a linked library. If you compiled Somoclu with GCC, please make sure you have set DYLD_LIBRARY_PATH to include the GCC path. For more information, please refer to the documentation.
>>>

とつれなくエラー。
なんか面倒くさそうだし、どうせサーバにアプリを仕込みたいのでCentOS7にインストールしてみる。

Python 3.9.10 (main, Jan 13 2022, 23:32:03) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import somoclu
Traceback (most recent call last):
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.10/lib/python3.9/site-packages/numpy/core/__init__.py", line 23, in <module>
    from . import multiarray
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.10/lib/python3.9/site-packages/numpy/core/multiarray.py", line 10, in <module>
    from . import overrides
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.10/lib/python3.9/site-packages/numpy/core/overrides.py", line 6, in <module>
    from numpy.core._multiarray_umath import (
ImportError: libopenblas.so.0: cannot open shared object file: No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.10/lib/python3.9/site-packages/somoclu/__init__.py", line 11, in <module>
    from .train import Somoclu
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.10/lib/python3.9/site-packages/somoclu/train.py", line 12, in <module>
    import matplotlib.cm as cm
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.10/lib/python3.9/site-packages/matplotlib/__init__.py", line 107, in <module>
    from . import _api, cbook, docstring, rcsetup
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.10/lib/python3.9/site-packages/matplotlib/cbook/__init__.py", line 28, in <module>
    import numpy as np
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.10/lib/python3.9/site-packages/numpy/__init__.py", line 144, in <module>
    from . import core
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.10/lib/python3.9/site-packages/numpy/core/__init__.py", line 49, in <module>
    raise ImportError(msg)
ImportError: 

IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.

We have compiled some common reasons and troubleshooting tips at:

    https://numpy.org/devdocs/user/troubleshooting-importerror.html

Please note and check the following:

  * The Python version is: Python3.9 from "/home/linuxbrew/.linuxbrew/opt/python@3.9/bin/python3.9"
  * The NumPy version is: "1.22.2"

and make sure that they are the versions you expect.
Please carefully study the documentation linked above for further help.

Original error was: libopenblas.so.0: cannot open shared object file: No such file or directory

>>>

もっとエラーが出た。おいっ!お前もか。
仕方がない。
libopenblas.so.0
がないよって言っているので素直に入れてやる。

$ brew install openblas

コレで使えるようになったらしい。

Rasberry PiもJetsonNanoも品薄

なんだが世界中半導体不足らしく、Raspberry Pi4とかJetsonNanoが全然手に入らないか、転売ヤーにいいようにされているらしい。
アマゾンは転売ヤーの巣窟なので絶対手を出してはいけないが、頼みの綱の秋葉原秋月電子でも在庫切れの札ばっかり。

まあ今すぐに必要だ〜ということでもないのだが。
ふと秋月の通販ページを見ると、シングルボードコンピュータはラズパイやJetsonばかりじゃないぞ、という品揃えであることに気がついた。
ということで、ちょっと気になるボードのスペックを整理してみることにした。
f:id:k-kuro:20220130151851p:plain

どうよ。結構魅力的なラインナップじゃない。(なお、ラズパイより高価なものは取り上げていない)
色々一長一短はあるものの、用途を考えるのもまた愉しからずや。

例えばpcDuinoはSATAホストがあるからHDDを使った結構マジPC構成も可能かもしれないな、でもデュアルコア
Mali400 GPUってどんくらいの能力があるんだ?
など妄想は膨らむ。