スタジオおふとん

プログラミング系

WSL2空の状態からStable Zero123を動かす

3回は環境を爆破させた。
余計なことはやらないに限る。

cudaを入れる

11.8を入れる

正解

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
sudo apt-get install cuda-11-8

間違い

https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=18.04&target_type=deb_network
このままやるとcudaが勝手に最新版にされるので注意。
sudo apt-get -y install cudaは実施してはいけない。

https://note.com/srvhat09/n/ndfc828a5cf21

パスを通す

export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

先ほどのnoteに書いてある通りに実施する。
この辺をやらないと、nvccが通らない。
そして、プロンプトのエラーの通りsudo apt install nvidia-cuda-toolkitをすると環境がぶっ壊れる罠。

https://cocoinit23.com/cuda-nvcc-command-not-found/

tinycudannでcannot find lcudaとかになるときはパス周りがうまくいっていない可能性がある。

パスを反映させて確認する

source ~/.bashrc

nvcc -V

さらにパスを追加する

これは必要かわからんし、もうちょっとちゃんとした書き方はある。

export PATH="/usr/local/cuda/bin:$PATH"
export PATH="~/.local/bin:$PATH"
export LIBRARY_PATH="/usr/local/cuda/lib64/stubs:$LIBRARY_PATH"

pipを入れる

sudo apt install python3-pip

stable zero 123をcloneして指示に従う

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
pip install ninja
pip install -r requirements.txt

これより前にpytorchとか入れておくともうわけわからんことになるので腕に自信がないなら空っぽの状態から始めた方がいいいい。

学習済みデータをDL

wget -P load/zero123/ https://huggingface.co/stabilityai/stable-zero123/resolve/main/stable_zero123.ckpt

設定を変えて実行

https://qiita.com/keisuke-okb/items/1b590c21aa9cd94332ac#3-threestudio%E3%81%AE%E5%AD%A6%E7%BF%92%E8%A8%AD%E5%AE%9A%E3%81%AE%E5%A4%89%E6%9B%B4

とりあえず最初はこれでやった方がいい。
メモリ(GPUじゃない方も)を馬鹿食いするので、失敗したときに何が原因かわからなくなる。(この設定でも一時的に32Gをほぼ食い尽くす)
しかも、途中でエラーになるとwsl2を閉じてもメモリが解放されないのでpowerShellで下記コマンドを打つ必要がある。

wsl.exe --shutdown

objの出力

python3 launch.py  --config "outputs/zero123-sai/[64, 128, 256]_name.png@20240321-210619/configs/parsed.yaml"  --export   --gpu 0  resume="outputs/zero123-sai/[64, 128, 256]_name.png@20240321-210619/ckpts/last.ckpt"  system.exporter_type=mesh-exporter  system.exporter.context_type=cuda

上記の設定だとほぼ使い物にはならないが。

https://note.com/npaka/n/ndd4da6c942db

感想

設定をある程度チューニングしたいところだが、超ハイスペックPCじゃないと3Dモデルのベースにすらできない感じするな。

『GitLabに学ぶ世界最先端のリモート組織のつくりかた』を読んだ

リモートあんま関係なく働き方としてTeam Geek並みにいい本だった。
というかリモートに関しては出社組が利益を得るようなのはやめろ、とか経営陣のデフォルトをリモートにしろ、などのよく見かける内容。

全部に触れるとネタバレになるので、特に勉強になった・同意できるポイントだけに絞って自分の意見を織り交ぜつつ記載する。

個人の「行動」にこそ意味がある

ちょくちょくDRIという言葉が出てくる。 DRIとは誰が最終的な責任者なのかを明確にする。そのうえで、必要な決定権を持つこと。

https://coralcap.co/2021/04/dri/

この本の自分なりの解釈として、
「何かを成すなら自身の行動がベースにあってその行動に責任を持て。」
というのが一貫したテーマだと受け取った。

これはDRIに限った話ではなく下記のような項目からもメッセージとして受け取れる。
(詳しい内容は本を読んで)

  • グループシンク(ブレインストーミング)にやや否定的
  • 短いつま先
  • 行動へのバイアス
  • 不確実性を受け入れる
    • 不確実性を排除する方法は、長い時間をかけて分析や推測を重ねることではなく、不確実性を受け入れて前進しながら問題を取り除いていくこと。

  • プロポーザル(具体的な解決策まで踏み込んだ提案のこと)を用意する
    • 意見や感想の表明はプロポーザルではない。

ブレインストーミングって意味あんのか?

特にプロポーザルとブレインストーミングは密接に関係していて、どうすればいいか他人に聞いているようじゃ自分で解決する気ないだろ、というのがここ最近のチーム運営で感じた。
わからないならわからないなりの行動や意見があるはずで、それも無しにみんなで決めましょう。っていうのは課題に対して本当に行動を起こす気があるのか?(実際、解決策が見つからなくても自身でブレインライティングして自分のアイデアを列挙しろ、とある)

そもそもブレインストーミングって意味あんのか?っていうのは結構思ってて、あれって結局その場のアイデアじゃん。
1週間風呂でも寝る前でも絶えず独りで熟考した内容が、その場に集まっただけの人に劣るってことがあっていいのか?
そもそもああいう場ではデータを即興で用意することが不可能で発言に対して責任も持てないだろう。
リンゲルマン効果も考えると果たして本当に有用なものなのか。

もちろん専門知識を有した人の助けを借りるのは有効だが、それも別にブレインストーミングである必要ないというか。
あとは発言自体はその場だけど、積み重ねによって可能な発言もあるので完全に否定というのはしづらいが。
ただ、やっぱり「早い思考」と「遅い思考」という考え方を持ってきたときに、ブレインストーミングは早い思考が優先されてしまう罠はあるよな、と思う。

M5 Stack CoreS3でタッチパネルのリリース時に座標を出すまでの話

みんな大好きM5Unifiedを使用。
API仕様書ないのまぁまぁきつくないっすか。

GitHubのコードとIDEで表示される候補から勘で実装。

#include <M5Unified.h>

void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);
  M5.Display.setTextSize(3);
}

void loop() {
  M5.update();

  M5.Display.startWrite();
  if (M5.Touch.isEnabled()) {
    auto t = M5.Touch.getDetail();
    M5.Display.setCursor(0, 0);
    if (t.wasReleased()) {
      M5.Display.printf("x: %4d, y: %4d", t.x, t.y);
    }
  }
  M5.Display.endWrite();
  delay(1);
}

これに領域を指定してあげれば、特定の場所が押されたときになんか動作。というのもできるだろう。

参考

https://github.com/m5stack/M5Unified/blob/d7f880a293badd54958a6da2403855da4245aefc/src/utility/Touch_Class.hpp
https://lang-ship.com/blog/work/m5unified-1/#toc10

UnityでSpecular HighlightsのON/OFF(コードで)

https://forum.unity.com/threads/cant-access-_specularhighlights-via-script-please-help.430238/#post-2795813

ついでにinspectorを右クリックしてNormalではなくdebugを選ぶとキーワード名とかがまぁまぁわかる。
にしても、こんなんわかるわけないが。

WindowsでDVD-Rにboot起動isoを焼くときに毎回ミスっている気がする

いや、そもそも今どきDVDって。って感じなんだが、手の届くところに空のUSBメモリがなかったので。
やりたかったことは古いCentOS PCを売るなり捨てるなりするために全消去。
そのため、一回クリーンインストールしておくか。ということでCent OSのイメージディスクの作成。

正直、CentOSをインストールするだけならUSB bootからnetinstallするのが今の主流だし、Linux動かしたい。というだけなら、WindowsのWSL使うのが正解かと。

ミスりどころ

普通にエクスプローラーにドラッグアンドドロップで焼くと、bootイメージにならない。
isoをダブルクリックしてWindows ディスク イメージ書き込みツールを使う必要がある。
関連付けされてるかわからないときは、Windows/System32/isoburn.exeを指定する。
https://www.projectgroup.info/tips/Windows/windows10_0021.html

昔はWinCDRとか使わないとできなかったからそれ用のつくり方があったんだが(老人会)、windows標準機能になって逆によくわかんなくなったな。

ちなみに0埋めは500Gで2934sだった。だいたい1時間くらいか。

M5 Stack CoreS3でHello World!を出すまでの話

結構詰まった。
過去にM5 Stack経験は無し。
Arduinoはちょっとアリ。(FGOのボックス開けるためのポチポチマシンを作った。なお、次のボックスイベで100箱単位で開けられるようになった模様)

ドライバ

Arduino IDEを入れれば勝手に入る。

初期設定

FileのPreferencesのAdditional boards manager URLsに下記を入力
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json

左側の上から二番目のボードマネージャからM5Stackを検索してinstall

というか、ここに書いてあることをする。
https://docs.m5stack.com/ja/quick_start/arduino

次にライブラリを入れる。
SketchのInclude LibraryからManage Librariesから(左側の上から3番目クリックでもいいかも)
m5coreを検索して、M5CoreS3をinstall。
M5Unifiedもinstallした方がいい。(自動でinstallされるかも)

ToolsのSerial PortでCOM PORTを選ぶ。たぶん括弧でESP32S3 CAM LCDと表示されている。
心配だったらデバイスマネージャー見ながら抜き差しして確認してもいい。

Hello World

FileのExamplesからM5CoreS3のHelloWorldを選択したいところだが、なぜか削除されている。
https://github.com/m5stack/M5CoreS3/commit/cd31336d1a286527f637be6a5ccd2c723bf1e146#diff-b378487c2df2346ab6aca31e549f6a791f26ad541a93fb259c7d46d65e2183dd
ちなみにコピペしてもコンパイルエラーになる。

ので、以下の「M5UnifiedでHelloWorld」に記載されているコードを使おう。
https://docs.m5stack.com/ja/quick_start/m5unified/migration

今後やりたいこと

AWS IoT Coreとつないでいろいろやりたいのだが、先は長そう。
というかWi-Fi設定からプログラムの必要があるっぽくてそこから!?って感じである。

Logicool F310

格ゲーで使っているPS4コンがディスコンすると困るなー。ということでいろいろコントローラを試してみることに。

  • 斜めが暴発する。
    • そのおかげで、アクセルボンバーは打ちやすいが。
  • ちゃんと昇竜コマンドを入力しないと、波動コマンド扱いになる。
  • 指が痛くなる。

総合的には使えなくはないけど、たまにイラッとする。

追記

やっぱ指痛くなる。
PS4コンは十字キーに柔らかい素材を使ってるっぽくて、そことの違いが顕著。
格ゲーには向かないコントローラーかな。