変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

Visual Studio Code

[Windows11,VScode]diagrams.net

旧名draw.ioの描画ツール。

MicrosoftStoreからインストールできファイル作成もテンプレ選択があるので使いやすい。

VScodeの拡張機能でもインスト可能だがいつものようにファイルの拡張子に連動してメニューが出る仕組みなので、まずdrawio拡張子でファイルを新規作成しなければ触ることすらできないし、一見するとテンプレは無い様に観えるが、メニューのの中にテンプレがある。

メニューのの「高度な設定」がなかなか奥が深い。

  • SQLを選択しCREATE TABLE文を入れるとDBのテーブルの図形が出る。
  • Marmaidを選択し、Marmaidのマークアップなテキストを貼り付けると、それらしい図形が出る。

スクラッチパッドがあるのであちこちに図形の組み合わせを複製するのが楽そう。

メニューのファイル>Exportから、svgやpngファイルに出力できるので、こんな感じの図形をブログの記事に埋め込むこともできるから使い道は結構ありそう。

欲を云えば、MS-WORDやMS-EXCELと線画のままコピペできたら便利そうだけど、どっちもインストしてないマシン(例えばスマホ等)で観れないだろうから、注意して取り扱わないといけない気がする。

MS-ExcelやGooleのSpreadSheetの図形や肝心な機能を制限してる無償ツールでUMLなシーケンス図描きに悩まさたのを思い出した。適材適所って重要だよね?(大笑



[Visual Studio Code]「フォルダを指定して検索」が動かない

JavaScriptは型が無い。とは云え、全く無視するのは辛いので。マメにJSDocなコメントを入れている。

VisualStudioCodeでは関数や変数の名前をクリックして2回(Ctl+Alt+D)すると、テンプレが書き込まれるので簡単だ。

しかし、コード中に型チェックすると typeof を羅列するより switch case で書きたい時もある。

そんな時はObject.prototype.toString()が、

[Object ${ObjectTypeName}]の様な文字列を返してくれるので、 switch case 風に処理できる。

/**
 * オブジェクトの型名を調べる
 *
 * @param {Any} obj   オブジェクト
 * @return {string}      型名
 */
const getTypeName= (obj) => {
  if (typeof (obj) === "undefined") {
    return "undefined";
  }
  var toString = Object.prototype.toString;
  // [object typeName] のハズなので、typeName部分を抽出してみる
  let typeName = toString.call(obj).match(/^\[\w+\s+(\w+)\]$/);
  return typeName[1];
}

各オブジェクトのtoStringメソッドは、一番OverWriteしまくっているメソッドなので、

ココでは確実な動作を狙って、Object.prototype. toString をCall呼び出しで参照してみた。

でも名前がgetTypeNameなのがイマイチなんでObjectTypeNameにリファクタリングしたら、

他のファイルでUndefinedになってた。

JavScriptだから仕方が無いけど。

置換機能で書き換えようとしたら・・・

(サッパリ

検索すらしない。

ググっても、それっぽい記事は無い。

試しに「検索エディタ」を開いてみた。

赤線で囲んだアイコンをクリック

するとちゃんと検索しだした。

MSCodeを再起動しても、結果は良好。

つまり、裏側でこっそり設定ファイルが出来た様だ。

※この手の自動設定の不具合は、インストーラのテスト同様に見つけにくいものだ。

昔の映画で「xx製は叩けば治る!」というセリフがあったけど、MSCodeも同じらしい。

初回ダメなら「新規xx」とかをぶったたけば、初期設定ができるかも。

しかし、今後はどうなるか予断を許さない。(と思う。



[Visual Studio Code]インスト

Visual Studio Codeとは

https://techacademy.jp/magazine/39548

を参考にVisual Studio Codeからダウンロードして、インスト。

画面が英語ばかりなので、以下の拡張機能を追加。

  • Japanese Language Pack for Visual Studio Code
  • Material Theme
  • Live Server
  • Markdown All in One

ps.2024/2/1

バージョン: 1.86.0 (user setup)
コミット: 05047486b6df5eb8d44b2ecd70ea3bdf775fd937
日付: 2024-01-31T10:28:19.990Z
Electron: 27.2.3
Chromium: 26495564
Node.js: 118.0.5993.159
V8: 18.17.1
OS: 11.8.172.18-electron.0
Sandboxed: Windows_NT x64 10.0.22631
インストしたVisual Studio Codeのバージョン

今は最初から日本語になっている。



[Visual Studio Code]node.js デバッグ

サーバで、foreverをグローバルでインストールしコマンドラインから使える様にする。

$ npm install forever -g
$ forever --version
v3.0.0

デバッグの準備

$ cd {node.jsアプリのフォルダ}
$ forever -c 'node --inspect=0.0.0.0:9229' app.js
warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
Debugger listening on ws://0.0.0.0:9229/ad7164d6-5cb7-43bb-9585-7c95c6d24e28
For help, see: https://nodejs.org/en/docs/inspector

アプリがlisenに成功したら標準出力に
app listening on port http://{サーバー名}:{ポート} !
と表示させると便利。

Visual Studio Code の方の「実行」⇒「構成の追加」から
{} Node.js :Attach to remote program を選択し
lanuch.jsに追加されたブロックに
 ”address”: {サーバ名}
 ”port”: 9229
と編集して、【実行】すると、

(node:22749) [INSPECTOR_ASYNC_STACK_TRACES_NOT_AVAILABLE] Warning: Warning: Async stack traces in debugger are not available on 32bit platforms. The feature is disabled.

と出てくるので、lanuch.jsのAttach to remote programに設定を追加。

"showAsyncStacks": false

適当にソースでブレークポイントも追加しても〇になるので無効。
しかし、アプリの出力はサーバーのコンソールとデバッグコンソールの両方に表示され、VSCから再起動も出来る。

デバッグコンソールに何故かconsole.logしたソースのリンクが貼ってある。

これをクリックするとデバッグ中のプロセスと連携しているソースが表示されるので、ブレークポイントを設定できる。

しかし、次にその場所に来た場合に一時停止になる仕組みなので、
事前にブレークポイントを設定して実行!という訳にはいかないが、大抵のことはコレで十分だろう。

VSCからまだコミットが出来ないので git push も変だ。

OpenSSH Authentication Agentを自動起動
> ssh-agent
> ssh-add
Enter passphrase for C:\Users\***/.ssh/id_rsa: {パスワード}
Identity added: C:\Users\***/.ssh/id_rsa (***@********)

まですると、コマンドラインからは git pushできる。
VSCは待機中になってしまう。



[VSCode]Python, pytest

Visual Studio Code で Pythonのソースを実行する手順

1.VisualStudioCodeをインストールする。

https://azure.microsoft.com/ja-jp/products/visual-studio-code/ から
ダウンロードして、インスト。

日本語化する。

メニューのView Command Paletteを選択
[Configure Display Language]と入力
プルダウンリストから[Install additional Language…]を選択
画面左のEXTENSIONS: MARKETPLACEから
[Japanese Language Pack for VS Code]を選択
画面右の[Japanese Language Pack for VS Code]の説明下の【install】を押す
画面左下の【Restart Now】を押す
多々変なトコロもあるけど、タダだから仕方が無い

2.適当な場所にフォルダを作り、Pythonのソースを入れておく。

参考:https://scrapbox.io/remi-tech/VisualStudioCode%E3%81%A7pytest%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B

E:\pythonProject
 │- sample.py
 │- pytest.ini
 └─tests
      └─ test_sample.py
def func1(para) :
    print("func1")
    return "func1_" + para

def func2(para) :
    print("func2")
    return "func2_" + para
# pytest用

import os
import sys
sys.path.append(os.getcwd())
import sample

class Test_sample :
    def test_sample_func1(self) :
        assert sample.func1("aaa") == "func1_aaa"
        
    def test_sample_func2(self) :
        assert sample.func2("aaa") == "func2_aaa"
       
[pytest]
testpaths = ./tests
python_files = test_*.py
python_classes = Test
python_functions = test_

3.ワークスペースに上記のフォルダを追加する。

メニューの【フォルダーの追加】を押す
追加するフォルダを開いたら【追加】を押す
無事に目的のフォルダが追加された
壊さないうちにワークスペースとして保存してしまおう
勿論ワークスペース設定ファイルは先のフォルダの中に作る
とりあえずOK

3.Pythonの環境作り

・Windows StoreからPython3.8をインスト。
※本来Python3.xのインストールはOSやCPUの特性を詳細に調査しgccのConfigure(中身はPython2のソース)を熟読してオプションを探り出してビルドの後のTestモードの結果を見て何度もウンザリするものだが、Windowsはその辺の選択肢が一つしかないから世界中の誰かが成功すればもうその人の設定をコピペするだけでOK(逆算的に容易)であり、今ではベンダーのHPにもインストーラが用意されている。

ところが、
> python
指定されたプログラムは実行できません。
となる、これはPATH環境変数にプログラムのパスが通っていないせい。

コントロールパネル⇒システムとセキュリティ⇒システム
システムの詳細設定の【環境変数(N)…】を押す
システム環境変数(S)のPathを選択し【編集(I)…】を押す
設定内容の最後にコマンドラインで
> where python
の結果
C:\Users\ユーザ名\AppData\Local\Microsoft\WindowsApps\python.exe
のファイル名のフルパスのフォルダ名を入れる
※ C:\Users\ユーザ名\AppData\Local\Microsoft\WindowsApps

・VSCodeのエクスプローラのpythonのソースをクリックしてみると、

【Install】を押す
少し待つと、自動的にpython(の何か)がインストールされる

その↓の説明通りデバッグビューを経由して設定を進める

※スクショ上書きして消えたけど、確か「Python」 を選択したハズ。

設定が終わったら、緑の▷を押すと実行する。

4.pytestを設定する

インスト中、3.8だとアップグレード要求が出る

> python -m pip install –upgrade pip するとpipがアップグレードされる

ここまで進むとテストビューが出てくる。
出なければpythonソースを右クリックして「全ての単体テストを実行」を選択

Discover Testを押してテストソースを探させよう!

ここで、発見できない場合は、画面の左下の「出力」に原因が出る。
大体はテストソースの何かのエラーだ。

os.cwd()は間違い os.getcwd()が正解
実行してみよう!
うまくいった!!!

あ、vscodeやpipのリポジトリィも一旦消しといた方がいいね。

vscodeの場合は、C:\Users\ユーザ名\.vscode フォルダを消す。

pipの場合は、C:\Users\slani\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.*_************
※ * 部分はインストするマイナーバージョンやランダム文字

ps.

{
	"folders": [
		{
			"path": "."
		}
	],
	"settings": {}
}
{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }
    ]
}
{
    "python.pythonPath": "C:\\Users\\{ユーザ名}\\AppData\\Local\\Microsoft\\WindowsApps\\python3.8.exe",
    "python.testing.pytestArgs": [
        "tests"
    ],
    "python.testing.unittestEnabled": false,
    "python.testing.nosetestsEnabled": false,
    "python.testing.pytestEnabled": true
}

では、なぜこんな記事を書いたのかと云うと・・・今朝方、仕事場の開発環境がぶっ飛んだから、予算の都合で非力なマシンになってしまったので試行錯誤するとむやみに時間だけが過ぎ去っていくので家に戻って準備した。
これを見れば、あの非力なマシンでも1時間もあれば余裕のハズ。(涙

ps.
VScodeではソースを修正すると改行コードがCR・LFとLFが混在することがある。この場合、見た目は問題無いソースだけどCRのせいで行が繋がって見えるらしく、イミフなインデントエラーが出ることがある。

def func1() CRLF
    """CRLF
    コメントLF
    """LF
※コメントは宣言されていない変数です。等


エディタ右下がCRLF表示になっている時は特に危ない。

{
// エディター設定
"editor.tabSize": 4,
"editor.insertSpaces": true, // Tabキーで半角空白
// ファイル設定
"files.autoSave": "off", //VScodeを閉じている間に他のエディタでソースを開くと変なことになりやすいのでOFF
"files.eol": "\n",  // 改行コードをLFにする
}

と強制的にLFしたりTABも空白になる様に仕向けないといけないようだ。

多分、改行コードのせいなのだろう。沢山のpytestのテスト関数を全部実行したらいくつかNGになった。しかし、1つづつ実行するとOK。
こんな時は大方は初期化処理が他のテスト関数と競合していたり依存しているためだ。
そのため、
def Test_xxxxx を def __Test_xxxxx と変えてpytestをやり過ごし、少しづつ戻していって、馬鹿な間違いをしているコードをあぶりだそうとした。

しかし、その結果。全て戻したら、ALL GREENになってしまった。
エディタが何かやらかしたらしい。もし幅0空白とか見えない文字だったら勘弁だ。

結果オーライでいいんだけど、再現したら泣きそうだ。

ここまで気を使わないといけないCompute言語なら・・・
Pythonなんて無くなってしまえ!
と素直に思う。

マネーをケチれば、 等価交換に則り、時間が足りなくなるのは必然である。

Slanirish Warlander




top