びぼーろく

ネットに記事通りにやったのにできない!となったのを記録する

VS Code Vim日本語入力 おかしい

表現が難しいがVSCode Vimプラグインを適用した状態でインサートモードで日本語を入力するとおかしなことになる

別のエディタを使った場合は普通に入力できるため、Vimプラグインがおかしいのではという考えに。

変換後、決定をせずに次の文字を入力してそのあと決定すると後に入力した文字が変換した文字を挟むように入力されてしまう。 表現が難しいが、まさに以下の記事の通り現象が起こっていた。

dev.classmethod.jp

バージョン特有の原因らしいのでダウングレードで対処した。

それにしてもどう調べればいいのか分からないので大変だった。

WSL2にPybullet環境を構築する

環境

OS:Windows11

オンボードのグラフィックス:Intel UHD Graphics

NVIDIA GeForce MX550

wsl2のインストール

Windows11でのwsl2インストールは非常に簡単になっていて コマンドプロンプト

wsl --install

を実行するだけ。あとはユーザ名やパスワードは適宜決める。

Ubuntuにpython3をインストールする

Windows での Python を使用した Web 開発 | Microsoft Learn

sudo apt update && sudo apt upgradeとして更新した後に、 sudo apt upgrade python3pythonを更新する

  • pipのインストール sudo apt install python3-pipと入力してpipをインストールする これによりパッケージの追加ができる

WSL2:UbuntuのPythonで「pip install」する前に知るべきこと - SE_BOKUのまとめノート的ブログ

上によるとpipコマンドでインストールする際にsudoを付けてしまうと 標準の管理パッケージaptとの間で問題が起きるらしい よって通常のpip installを使う

環境分けたほうが安全なのでvenvもインストール sudo apt install python3-venv

xserver(VcXsrv)のインストール

wsl2でGUIアプリを表示するために必要 以下の通りに進めていけば問題ない。

VcXsrv(Xサーバー)をWindowsにインストールしLinuxのGUIをリモート操作する設定方法 | りんか ネット

最後のチェックは3つ(4つ)全部入れていい。 特にファイアウォールについてはパブリックとプライベート両方にチェックを入れるようにする

ディスプレイの番号についてはWSL2を使う場合以下のように設定する

WSL で動くアプリの GUI を VcXsrv を使い Windows 10 に表示する | りんか ネット

エクスプローラで直接ファイルを開いて編集してもいいし、sudo vim /etc/bash.bashrcで ターミナル上で直接編集してもいい

うまくインストールできているか確認するためにxeyesを使う

sudo apt install x11-apps
xeyes

xeyesが起動すれば問題ない

Running WSL GUI Apps on Windows 10 - Microsoft Community Hub

Pybulletのインストール

homeディレクトリに仮想環境を置く場所を作る

mkdir python-projects/Pybullet
cd python-projects/Pybullet
python3 -m venv .venv # 仮想環境の作成
source .venv/bin/activate # 仮想環境の有効化

仮想環境内でパッケージをインストールする

(.venv) pip3 install pybullet
(.venv) pip3 install numpy
(.venv) git clone --depth 1 https://github.com/bulletphysics/bullet3 # サンプルプログラムのダウンロード
(.venv) python3 bullet3/examples/pybullet/examples/humanoid_manual_control.py # 実行環境

Pybulletでロボットアームシミュレーションをするまでの手順 - Qiita

WSL2(Ubuntu20.04)+venv+pyBulletで深層強化学習のサンプルプログラムを動かす - Qiita

ウィンドウが出ても真っ黒で描画されない場合

自分の環境ではnvidiagpuも入っていたためかウィンドウは出てきても真っ黒のままで描画されなかった。 おそらくOpenGLに関係した問題だろうということで動作確認を行った。

sudo apt install mesa-utils
glxgears

本来なら回転するギアが表示されるのだが真っ黒なウィンドウが表示される

WSLのOpenGL errorでハマった話(LIBGL_ALWAYS_INDIRECT=1でなく0) - Qiita

glxgears displays black screen, no gears · Issue #654 · microsoft/wslg · GitHub

そこで以下の設定を追加した

export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0" # ←ディスプレイ番号の設定
export LIBGL_ALWAYS_INDIRECT=0  #←追加
export MESA_D3D12_DEFAULT_ADAPTER_NAME=nvidia  #←追加

bashrcには記述するだけでは反映されないので新しくWSL2を立ち上げるか source /etc/bash.bashrcを実行する

きちんと歯車が回っていれば描画については問題ないはず

改めてサンプルプログラムを実行する プログラム起動時のログを見るとGL_RENDERERがNVIDIAになっていることが確認できる

startThreads creating 1 threads.
starting thread 0
started thread 0
argc=2
argv[0] = --unused
argv[1] = --start_demo_name=Physics Server
ExampleBrowserThreadFunc started
X11 functions dynamically loaded using dlopen/dlsym OK!
X11 functions dynamically loaded using dlopen/dlsym OK!
Creating context
Created GL 3.3 context
Direct GLX rendering context obtained
Making context current
GL_VENDOR=Microsoft Corporation
GL_RENDERER=D3D12 (NVIDIA GeForce MX550)
GL_VERSION=4.2 (Core Profile) Mesa 22.2.5-0ubuntu0.1~22.04.3
GL_SHADING_LANGUAGE_VERSION=4.20
pthread_getconcurrency()=0
Version = 4.2 (Core Profile) Mesa 22.2.5-0ubuntu0.1~22.04.3
Vendor = Microsoft Corporation
Renderer = D3D12 (NVIDIA GeForce MX550)
・
・
・

WSL2上で動作させることができた。

全体的な流れは以下を参考にさせていただきました

WSLのOpenGL errorでハマった話(LIBGL_ALWAYS_INDIRECT=1でなく0) - Qiita

glxgears displays black screen, no gears · Issue #654 · microsoft/wslg · GitHub

PyBulletの調査: 基本からモデル作成まで

sumatrapdfで逆順検索

VSCodeTexを書く際にpdfビューワーとしてsumatrapdfがよく使われる。 VSCodeでのlatex環境構築は

VSCode で TeX を書こう - KERI's Lab を参考にする。

ビューワーをクリックすることで対応するVSCodeの行に移動できる逆順検索がある wikiの通りにsumatrapdfの設定を行う

Visual Studio Code/LaTeX - TeX Wiki

"{VSCodeがあるフォルダ}\Microsoft VS Code\bin\code.cmd" -r -g "%f:%l"

VSCodeの設定と違って階層の区切りが\であることに注意する

github.com

vscode-backgroundを複数キャラ仕様にする

vscodeでの編集作業やる気がでない・・・

そんなときアイドル達が背景にいたら少しは楽しくなる! かもしれない。

ということでvscodeに背景画像を追加する拡張機能である

background - Visual Studio Marketplaceを少し編集してぷちデレラ達に出演してもらう。

拡張機能の作り方は以下の記事をベースに

qiita.com

最新バージョン(2021/08/01現在)でも使える+α ように追加を行う。

先に結果を示すと見た目はこんな感じ。

カスタム内容
  • ランダム生成(参考記事通り) 最新バージョン対応(2021/08/01) ショートカットキーに加えて新規ウィンドウでもランダム生成されるようにする

オリジナルの拡張機能をインストールできるようにする

まずは参考元の手順1~5に従ってvsixをインストールする準備を行う。

スクリプトの変更

background.jsの修正

shalldie.background-1.1.28/extension/out/background.jsを以下のように修正する。

   install(refresh) {
        const lastConfig = this.config; // 之前的配置
        const config = vscode_1.default.workspace.getConfiguration('background'); // 当前用户配置
 
        // 5.hack 样式
        let arr = defBase64_1.default; // 默认图片
        if (!config.useDefault) {
            // 自定义图片
            //arr = config.customImages;
            arr = this.getImageList(); // getImageList()を呼ぶように修正
        }

    }

install(refresh)の後ろにgetImageList()の中身を追加する。

    install(refresh){
    }
 //install()の後に追加する
    getImageList() { 
        let config = this.config;
        let folders = config.customImageFolders;
        let arr = [];
        if (folders.length > 0) { //フォルダの設定があればランダムで一つ選択
            let fdpath = folders[Math.floor(Math.random() * folders.length)];
            let files = fs_1.default.readdirSync(path_1.default.resolve(fdpath));
            files.filter((s) => {
                return s.endsWith('.png') || s.endsWith('.jpg') || s.endsWith('.jpeg') || s.endsWith('.gif') || s.endsWith('.webp') || s.endsWith('.bmp');
            }).forEach((file) => {
                arr.push('file://'+path_1.default.join(fdpath, file).toString().replace(/\\/g, '/'));
            });
        } else { //なければ既存のcustomImagesから画像を取得
            arr = config.customImages;
        }
        if (config.useRandom) { //ランダム使用モードなら並び替え
            for (let i = arr.length - 1; i > 0; i--) {
                let r = Math.floor(Math.random() * (i + 1));
                let tmp = arr[i];
                arr[i] = arr[r];
                arr[r] = tmp;
            }
        }
        return arr;
    }

package.jsonに新しいコンフィグを追加する

shalldie.background-1.1.28/extension/package.jsonuseRandomcustomImageFoldersを追加する。

    "configuration": {
// 略
        "background.useRandom": {
            "type": "boolean",
            "default": false,
            "description": "Use random order."
        },
        "background.customImageFolders": {
            "type": "array",
            "default": [],
            "description": "Your custom image folders. (selected randomly) "
        },
        "background.loop": {
          "type": "boolean",
          "default": false,
          "description": "Loop your images. 循环使用图片"
        }
      }
    }

ショートカットコマンドから再起動して背景画像を切り替えできるようにする

background.jsにrefresh用の記述を追加する

shalldie.background-1.1.28/extension/out/background.js に以下を追加する。refreshinstallショートカットコマンドから切り替えをするときに呼び出される。

        getImageList(){
        // 略
        }
    refresh() { //installの処理からメッセージを出さずrestart出来るようにしたもの
        let config = vscode_1.default.workspace.getConfiguration('background'); 
        this.config = config; 
        if (!config.enabled) {
            this.uninstall();
            vscode_1.default.commands.executeCommand('workbench.action.reloadWindow');
            return;
        }
        let arr = []; 
        if (!config.useDefault) { 
            arr = this.getImageList();
        }
        let content = getCss_1.default(arr, config.style, config.styles, config.useFront).replace(/\s*$/, ''); 
        let cssContent = this.getCssContent();
        cssContent = this.clearCssContent(cssContent);
        cssContent += content;
        this.saveCssContent(cssContent);
        vscode_1.default.commands.executeCommand('workbench.action.reloadWindow');
        return;
    }

extension.jsにrefresh()をコマンドから呼び出せるようにする

shalldie.background-1.1.28/extension/extension.jsにてactivate()の一番下にrefreshコマンドを追加する。

//refreshコマンドを追加
    const disposable2 = vscode_1.default.commands.registerCommand( 'extension.background.refresh', () => background_1.default.refresh() );
    context.subscriptions.push(disposable2);

package.jsonにコマンドとショートカットを追加する

shalldie.background-1.1.28/extension/package.json

    "commands": [
      {
        "command": "extension.background.info",
        "title": "Background - Info"
      },
      {
        "command": "extension.background.refresh",
        "title": "Background - Refresh"
      }
    ],
    "keybindings": [
        {
            "command": "extension.background.refresh",
            "key": "ctrl+shift+f6"
        }
    ],

新規ウィンドウで起動したvscodeでも切り替えが起きるようにする

そのままでは新規ウィンドウでvscodeを複数起動しても画像が変わらないので 起動時の処理を追加する。 shalldie.background-1.1.28/extension/out/background.js

refresh(){
        //略
}

    fupdate() { //installの処理からメッセージを出さずrestart出来るようにしたもの
        let config = vscode_1.default.workspace.getConfiguration('background'); 
        this.config = config; 
        if (!config.enabled) {
            this.uninstall();
            vscode_1.default.commands.executeCommand('workbench.action.reloadWindow');
            return;
        }
        let arr = []; 
        if (!config.useDefault) { 
            arr = this.getImageList();
        }
        let content = getCss_1.default(arr, config.style, config.styles, config.useFront).replace(/\s*$/, ''); 
        let cssContent = this.getCssContent();
        cssContent = this.clearCssContent(cssContent);
        cssContent += content;
        this.saveCssContent(cssContent);
        return;
    }

shalldie.background-1.1.28/extension/out/extension.js

activate(){
    //refreshコマンドを追加
    const disposable2 = vscode_1.default.commands.registerCommand( 'extension.background.refresh', () => background_1.default.refresh() );
    context.subscriptions.push(disposable2);
    background_1.default.fupdate();  // 起動したときの切り替え処理
}

画像ファイルのダウンロード

ぷちデレラの画像ファイルは以下からダウンロードした

ぷちデレラ一覧 | アイマス シンデレラガールズ カードギャラリー

chrome拡張機能などで画像をまとめてダウンロードできるものがあるのでそれを使うか 開発者ツールなどから画像を取り出してダウンロードするかして画像をフォルダに保存する。

vscodeの基本設定(settings.json)にbackgroundのセッティングを追加する

settings.jsonに画像フォルダの指定などを記述する。フォルダ名はダウンロード先のフォルダを指定する。

    "background.enabled": true,
    "background.useDefault": false,
    "background.useRandom": true,
    //拡張機能標準の画像設定パス 以下のパスパターンいづれかで記述 ランダムにしたい場合は4つ以上も可
    "background.customImages": 
        "file:///C:/Users/ユーザー名/Pictures/m@s/.png",
        "file:///C:/Users/ユーザー名/Pictures/m@s/.png",
        "file:///C:/Users/ユーザー名/Pictures/m@s/.png"
    ],
    //画像が置いてあるフォルダパス 以下のパスパターンいづれかで記述customImagesより優先される
    "background.customImageFolders": [ 
        "C:\\Users\\ユーザー名\\Pictures\\m@s",
    ],
    "background.style": {
        "content": "''",
        "pointer-events": "none",
        "position": "absolute",
        "z-index": "99999",
        "width": "100%",
        "height": "100%",
        "background-position": "100% 100%",
        "background-repeat": "no-repeat",
        "opacity": 0.6,
        "background-size":"auto 20%" // 右下に高さ20%で設置
    },

再度vsix化してインストールする

再びzip化してvsixとしてvscodeにインストールする。 本体cssをいじっているので拡張機能を有効化するために一度 管理者権限でvscodeを起動する。 以降は通常通りvscodeを起動すれば設定が適用される。

※個人の趣味用途の範囲でお願いします。