モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

Pythonのdotenvのインストールではまった

すごくしょうもないことではまったのでメモ。


Pythonの仮想環境ツールをanaconda使ってたのだけど、ぼちぼち移行したほうがよかろうと思って、Poetryにしようかと思ったんだけど、Pythonのバージョンも一括で管理できて評判の良いRyeにかえたのでした。

んで、dotenvを使いたくて

rye add dotenv
rye sync

したところ

error: could not write production lockfile for project

的なエラーがでて動かず。


ただ、別段たいしたことないdotenvのせいでlockfileが作れないとか、そんなことは無かろうと思って、色々調査して、最終的にはRyeのせいだろうか?とか思ってPoetryを試してみるまでいくも解決せず。
ただ、Poetryでやるとdotenvのインストールで問題が起こっていることに気が付きました。


でよくよく確認してみるとdotenvのパッケージ名って「python-dotenv」なんですね…

てことで、再度Ryeに戻して

rye add python-dotenv
rye sync

にすることで解決しました。

これだけで2時間くらい無駄にしました…

WindowsからNASへどうしてもアクセス出来ない問題

新しいWindows PCのセットアップを頼まれて、NASへのショートカットを作ろうとしたところでどうしても共有フォルダにアクセスができない(認証が通らない)という謎現象に当たりました。

2台の新しいPCをセットアップしていて、1台はなんの問題もなくすんなり。
でもう1台がなぜかPINを求められるようになって、そこからはどーしても、どうしても、ユーザ名とパスワード入れても通らないのです。
Windows Credentialsのところから、現在保存されてしまっているアカウント設定を削除するとか、SMB1.0 Clientのチェックとかは試してみたのですがダメ。

それで、色々ぐぐってみたところSynologyのFAQにこんな内容がありました。

kb.synology.com

ここで「ユーザ名」だけではなく「サーバ名¥ユーザ名」とすると通ることがあるとのこと。
IPでの設定だったため「192.168.10.100\example」みたいな感じで設定したところ、無事に通りました。

しかしなぜ1台はすんなり通ったのに、もう1台だけこんなことになったのかは、謎のままです。

UbuntuとWindowsのデュアルブート環境でAX200のWiFiが接続できなくなる問題

タイトルが長いけど、WindowsデュアルブートであることによってなぜかWiFiが接続できなくなることがあるという、絶対気が付かんだろこれ!という問題に当たったのでメモ。


ある日突然 UbuntuWiFiが接続できないようになってしまい

sudo lshw -C network

として調べてみると、インターフェイスのところに「UNCLAIMED」とついていて、利用できない状況になっていることがわかりました。

突然こうなったのでなんでだろ?と、再起動してみたりデバイスドライバのアップデートとか掛けたりしてみたんですが解消せず。


んで AX200 特有の問題だろうか?と Ubuntu AX200 で探してみたところ、こちらのエントリがありました。

musaprg.hatenablog.com

bugzilla.kernel.org

WindowsUbuntuデュアルブートでAX200を利用している場合、Windows側でFastbootを利用していると、その影響でWiFiが使えなくなるというのです。
なので、Windows側の設定でFastbootをやめると解決するとのこと。


このPCもWindowsUbuntuデュアルブート環境だったので当てはまるのですが、何度も再起動もしてるのにほんと??となったんですけども、半信半疑で試してみました。

すると、ほんと一発で解決しました。

いやー… さすがにこんなの気が付かんわ、と思いました。

「0x0000011bエラー」で印刷できない件ふたたび

ちょうど1年前に

stealthinu.hatenadiary.jp


というエントリを書いたのですが、その件のサーバリプレースがあり、再度同じ問題が発生して対処したため、そのまとめです。


このサーバには古いドットインパクトプリンタがUSBパラレル変換ケーブル経由で繋がっていて、これは他のプリンタサーバなどでは共有に出来ないため、どうしてもWindowsサーバ経由で使うように設定する必要があります。
もう転写式の帳票なんてやめたほうがいいんでないかなあ… と思うんですけど、それはお客さんの判断なのでなんともです。


さて、新規サーバリプレースのため、サーバのOSはWindows Server 2019になったのですが、これだと前回対応したときのように、Windows Updateで「5005565」等があたったわけではないため更新のリストには上がっておらず、それと全く同じに対応することはできませんでした。


それで探してみると、あの方法で対処した後日、問題のパッチが当たっていても、レジストリを変更することで対処する手法が発見されていたみたいです。

sakuraxren.blog.fc2.com

こちらのエントリを拝見すると、「SMB1.0の有効化」と「RpcAuthnLevelPrivacyEnabledレジストリの設定」で動作可能になるようでした。

ただこれは、パッチ当てないのと同様、パッチを当てるべきセキュリティリスクをあえて穴あける設定なので、今回のようにどうしても必要な場合以外はおすすめではありません。


Windows ServerでWindowsの機能を追加しようとすると、サーバーマネージャーが起動しちゃってどうしたらいいんだろ?と思ったんですが、進めていくと機能の選択というのが出てきてここで普通のWindowsと同じように追加ができるのですね。

anything-it.info


これで無事にドットインパクトプリンターが動くようになりました。

OCNバーチャルコネクト固定1IPで接続してる環境にクライアントVPN接続する設定

最近、OCNバーチャルコネクトの固定1IPで接続している環境に、出先のWindowsクライアントからVPN接続するための設定がどうしてもうまくいかずはまりました。
やっと解決できたのでそのメモです。


自分のハマったポイントは、クライアントPC側のWindowsで「AssumeUDPEncapsulationContextOnSendRule」 レジストリ キーを設定してNATトラバーサルを有効にしてやる必要があったことでした。

実は同じクライアントPCに他のVPN設定があり、そちらは問題なくつながっていたため、この設定をしなくても良いと思っていました。そちらの接続は普通にPPPoEで繋がってました。
OCNバーチャルコネクトはIPoEでIPv6で接続して、そこからIPv4にNATして繋がっているため、このNATトラバーサルの設定がないとつながらないようです。

https://www.cup.com/staticip/manual/win10_l2tp.html

【Windows10】L2TP/IPSecでリモート接続するVPN接続設定 | The modern stone age.

ちなみに「ヤマハVPNクライアント」をインストールしても自動的にこちらのレジストリの設定が行われます。
そのため、ヤマハVPNクライアントを使えばこの設定をしなくてもすんなり接続できてしまいます。


OCNバーチャルコネクトの接続設定とVPNの設定は、configファイルでやってもいいのですが、Web GUIからでもできてしまうようです。

【OCNバーチャルコネクト固定1IPの接続設定】

基本はヤマハの公式サイトのWebGUIの説明のとおりです
OCNバーチャルコネクトでインターネット接続

  • かんたん設定 > プロバイダー接続
  • プロバイダー接続から「LAN2」で接続
    • IPoE
    • 設定名「OCN_virtual_connect」
    • 光電話契約「契約していない」
    • IPv4 over IPv6「使用する」>「OCNバーチャルコネクトサービス」
    • OCNバーチャルコネクトサービス固定IP1契約
    • アドレス解決システムURL: http://ipoe-static.ocn.ad.jp/nic/update
    • 認証用ID: 【OCN指定のもの】
    • 認証用パスワード: 【OCN指定のもの】
    • 推奨のIPフィルタを使用する

リロードすると

  • OCN_virtual_connect
  • IPv6 IPoE(RA)接続
  • LAN2/TUNNEL1

で接続している状況になります。

【クライアント接続用VPNの設定】

基本は下記ヤマハ公式の接続設定のとおりですが、それにプラスしてESP/UDP500,4500,1701を通すためのフィルタ設定とマスカレードの設定が必要になります。
L2TP/IPsecを使用したリモートアクセス : Web GUI設定

stable-diffusion-webui-dockerをGPUのRAMが4Gの環境で動かす

StableDiffusionがオープンソースで発表されて、怒涛の勢いでより簡単に、使いやすくなるよう開発が進められましたが、現時点で一番楽なのは stable-diffusion-webui-docker を入れる、だと思います。


下記のエントリなどを参考にして
zenn.dev

Windows11でCUDAのドライバとDocker Desktopが入っていれば、あとはPowerShell上から

> git clone https://github.com/AbdBarho/stable-diffusion-webui-docker
> cd stable-diffusion-webui-docker
> docker compose --profile download up --build
> docker compose --profile auto up --build

して、ブラウザから http://localhost:7860/ を開けばいいだけです。


なのですが、自分のノートはRTX3050Tiの4GBとメモリが足りず、そのままでは「exited with code 137」のエラーが出て起動してくれませんでした。
ただ「Highly optimized 4GB GPU support」と書いてあるように4GBでも設定すれば動きました。


Usage · AbdBarho/stable-diffusion-webui-docker Wiki · GitHub

に説明があるように、dockerのフォルダ内に下記内容を

services:
   automatic1111:
     environment:
       - CLI_ARGS=--lowvram

「docker-compose.override.yml」というファイル名で作成します。


このファイルを作ってから docker compose … を実行してやります。


ただ、自分の場合はこれだけでもダメでした。
WSL2でメモリをぎりぎりまで使ってしまうため、それを制限するための設定を「C:\Users\【ユーザ名】\.wslconfig」ファイルに

[wsl2]
memory=8GB

のように設定していました。が、下記エントリに、WSL2に12GBは使えるようにしてないとだめとありました。

Web UI container exits with code 137 · Issue #64 · AbdBarho/stable-diffusion-webui-docker · GitHub

そこで設定変更して

[wsl2]
memory=12GB

としてやったところ無事に動くようになりました。

特定サイトのみ勝手にhttpsでの接続になってしまって繋がらない問題

ある特定のサイトに、他のPCからは接続できるのに特定のPCだけ接続できないという相談を受けました。


どうせウイルス対策ソフトがFWで止めてるんだろうと思ってFW止めてみたのですが変わらず、ブラウザをEdgeとChromeで変えてもダメでした。
ただ、pingを打つと問題なく到達しており、IPも表示可能なものと比べて同じで、DNSの問題でもないことがわかりました。
Proxyも設定されておらず、v6がらみかと思ってv6も切ってみたのですがやはり変化なしでした。


それで元々のURLを確認すると「http:」であったものが「https:」で表示しようとしていることに気が付きました。
SSLがらみの問題?と思ったのですが、「http:~」のURLを打ってもどうしても勝手にhttpsに変更してしまうのです。
ぐぐるとEdgeでhttp:をhttps:に変更するというのが2021年あたりにあったらしく、その設定を変更してみたのですがそれでも変化なしでした。


もう少しググってみたところ、他にもhttp:をhttps:に変更するHSTSという仕様があるんだそうです。

laboradian.com

このHSTSの重要な点は

「今後もしこのドメインに http でアクセスしようとしたら、強制的に https で接続し直す」ようブラウザに伝えて、それをブラウザが覚えてしまう、ということです。

どうもこの特定サイトは最初にきっと設定に一部失敗して、このHSTSの設定をしてしまっており、運悪くその失敗した設定をしてあるときにアクセスしたこのPCだけが、その後もずっとhttpsで接続しようとしてしまっている状態になっていました。


ここの説明にあるように

chrome://net-internals/#hsts

に対してアクセスして「Delete domain security policies」で該当ドメインのHSTSの設定を削除したところ、その後は問題なくhttps:に変換されずにhttp:のまま表示されるようになりました。


これは知らないと絶対に解決できんわな…

OpenAIのwhisperがすごい

このひと月ぐらいはStableDiffusionのことで持ち切りだった気がするが、こないだOpenAIが発表したwhisperも相当すごい。

openai.com

github.com

whisperはすごい高性能な音声認識とついでに英語翻訳が可能なツールです。

音声認識できるのは英語や日本語だけじゃなくてほぼすべての言語と言ってよいくらい。そして全部の言語から英語へ翻訳可能なのです。
しかもMITライセンスで使えて、学習済みデータも提供されています。この学習されたデータがなんと68万時間(77年!)というとてつもない時間のデータとなっています。
そして認識精度もすごくて、ノイズが酷くてもものすごい早口でもだいぶ正確に聞き取れています。

そして、プログラムに組み込むのもものすごく簡単で、下記にデモのページを作ってみたのですが、たったこれだけのコードで音声認識と英語への翻訳が可能になってしまいます。

github.com

これ、音声認識とか自動翻訳とか研究でされてる方はもう相当打ちのめされてるのでは…

iZotope RX9で音が出ない場合ASIOを選択する

最近ディープラーニングによるボイスチェンジのことを色々やっていて、そこで学習用データのノイズを削減するためにiZotope RX9を導入しました。


で一番基本的なファイルの音を聞くことができない、というところではまりました。
音を聞こうとするとグラスをキンキン鳴らしたみたいな音しかしないのです。


support.minet.jp

RX7の話ですが、公式にこのような話が出ていて、Driver typeの指定が正しくないとだめっぽいのですが、これはMacの例だったのでそのまま「CoreAudio」は使えず。


でもこれはWindowsの場合「ASIO」にあたると考えられるためASIOを選択しました。
Windowsでは必ずしもASIOドライバが入っているわけではないのですが、自分の場合は「Realtek ASIO」が入っていたので、とりあえずこれを選択すると、通常のイヤホンマイクジャック経由では音を聞くことができました。
が、なぜかこれで聞くとプチノイズが非常に高い頻度で発生する状況になりました。


ヘッドセットにLogicoolのG433を使っており、これはUSB接続もできるのですけどもASIOは対応していませんでした。
そこで今度はASIO4ALLを導入してみました。
これはASIO対応していないものもASIOに対応してくれる「かもしれない」ツールです。
最初最新の2.15を入れたのですが、これだと設定ツールが使えないためうまく動かず、2.14を入れて無事にG433のUSB接続でASIOに対応できるようになりました。


その上で再度RX9の

Edit->Preferences->Audio から

Driver type->ASIO
Device->ASIO4ALL v2

を選択してやることで利用できるようになしました。


(追記)

実はASIO4ALL入れなくてもVoicemeeter Banana入れてたら、BananaがASIO対応しているのでそちらで使えることがわかりました。
BananaのほうでIN/OUTの設定をしてやる必要がありますが、問題なく使うことができました。

WSL環境のVSCodeでTensorboard使えるようにしようとしてGLIBCXX_3.4.29がないといわれるエラー

WSL環境で動かしてるVSCodeでTensorboardを起動できるようにしようとすると、VSCodeが自動で出してくるインストールの指定

$ conda install -c conda-forge tensorboard

を実行したせいだと思うのだが、sklearn関係のところで「GLIBCXX_3.4.29」が入ってないというエラーがでて動かなくなるという問題が起きた。

ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/stealth/anaconda3/envs/mmvcwsl/lib/python3.8/site-packages/sklearn/metrics/_pairwise_distances_reduction.cpython-38-x86_64-linux-gnu.so)


そこでまず該当の「libstdc++.so.6」がどのバージョンまでの GLIBCXX に対応しているかを確認してみた。

$ strings /lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
…略
GLIBCXX_3.4.27
GLIBCXX_3.4.28

ということで「3.4.29」は対応していないからエラーになっていることがわかった。


ここ見るとこういう場合、conda-forgeから新しいめの「gxx_linux-64」をインストールすると良い模様。

python - Install GLIBCXX_3.4.29 in anaconda - Stack Overflow https://stackoverflow.com/questions/68205760/install-glibcxx-3-4-29-in-anaconda

$ conda install -c conda-forge gxx_linux-64==11.1.0

しかしこれでもダメ。
最新のが必要なのかと思い探してみると 11.2.0 があったのでこれを入れてみる。

https://anaconda.org/anaconda/gxx_linux-64

$ conda install -c conda-forge gxx_linux-64==11.2.0

がやっぱダメ。


というか strings 見ると変わってないから、そもそも conda で入る場所が /lib/... 以下じゃないので、見るところが間違ってるというのが根本的問題に見える。
ちなみに下記ページでは自分で手で /usr/lib64/ 以下にファイルをコピーしていた。

解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题 - IT笔录 https://itbilu.com/linux/management/NymXRUieg.html


そこでanacondaの環境が保存されてるディレクトリ以下の ~/anaconda3/envs/mmvcwsl/lib/libstdc++.so.6 を確認してみたところ、

$ strings lib/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
…略
GLIBCXX_3.4.28
GLIBCXX_3.4.29

と、ちゃんと3.4.29 が入っていることが確認できた。
なのでやはり、conda環境で参照してるライブラリのパスが合ってないのが問題な気がした。


そこでLD_LIBRARY_PATHも含めてググってみると、下記の内容が見つかった。
やはりLD_LIBRARY_PATHに anacondaのlibディレクトリを指定して解決していた。

python - ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found - Stack Overflow https://stackoverflow.com/questions/49875588/importerror-lib64-libstdc-so-6-version-cxxabi-1-3-9-not-found
python - Anaconda ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found - Stack Overflow https://stackoverflow.com/questions/58424974/anaconda-importerror-usr-lib64-libstdc-so-6-version-glibcxx-3-4-21-not-fo

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/path/to/conda/env/lib

ということで自分の場合は

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/anaconda3/envs/mmvcwsl/lib

とすることで解決した。

でもこれだとcondaで環境切り替えたとき、一緒に LD_LIBRARY_PATH も切り替えないといけないはずで、それが一発でできなくなるのはなんかおかしいように思う。
思うが、これ以上追及するのはさすがにヤックシェービングすぎるので、環境切り替えたりなんだりするシェルスクリプトにLD_LIBRARY_PATHの指定も入れて解決したことにした。


なにかもっと根本的な解決法があれば教えてください。