変奏現実

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

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

パソコン

「javascript」失敗したら即throwしたい

try {
・・・
  const divSample1 = document.getElementById('sample1');
  if (!divSample1) {
    throw new Error('divタグ(id:sample1)が見つかりません');
  }
  const divSample2 = document.getElementById('sample2');
  if (!divSample2) {
    throw new Error('divタグ(id:sample2)が見つかりません');
  }
  ・・・
  const divSampleN = document.getElementById('sampleN');
  if (!divSampleN) {
    throw new Error('divタグ(id:sampleN)が見つかりません');
  }
・・・
} catch (ex) {
  console.error(ex.message);
}

と書きたくないのでNull 合体演算子 (??)を使って

try {
  ・・・
  const divSample = document.getElementById('sample1') ?? throw new Error('divタグ(id:sample1)が見つかりません');}
  const divSample = document.getElementById('sample2') ?? throw new Error('divタグ(id:sample2)が見つかりません');}
  ・・・
  const divSample = document.getElementById('sampleN') ?? throw new Error('divタグ(id:sampleN)が見つかりません');}
  ・・・
} catch (ex) {
  console.error(ex.message);
}

と書くと「throw」に赤い下線が付いて「式が必要です。ts(1109)」とエラるので・・・

/**
 * 投げだす
 * @param {string} msg 
 */
const throwMsg = (msg) => {
  throw new Error(msg);
}
・・・
try {
  ・・・
  const divSample = document.getElementById('sample1') ?? throwMsg ('divタグ(id:sample1)が見つかりません');}
  const divSample = document.getElementById('sample2') ?? throwMsg ('divタグ(id:sample2)が見つかりません');}
  ・・・
  const divSample = document.getElementById('sampleN') ?? throwMsg ('divタグ(id:sampleN)が見つかりません');}
  ・・・
} catch (ex) {
  console.error(ex.message);
}

で誤魔化せた。

式が必要な深い意味は思いつかないので、単に「throw」を式として認識してないダケだろう。

多用するとメンドクサイ事になるのは避けられないが・・・

※{美しくない}

とか言われそう。

心配なのはデバッグ中に式でExceptionすると

javascriptが処理を「本当」に投げ出す事がマレになるコトかな?(フッ



[javascript]正規表現

以前作ったJSのUTF-16をSJISに変換するサンプルが時代の波にモマれ動かなくなってたので作り直し。

それにつけても非推奨が増える一方な感じがするJS。

同様に正規表現のデバッガも動かなくなっていた。(【javascript】 RegExp 正規表現デバッガ

でも正規表現で名前付きキャプショングループを使える様になってきたみたいだから良しとしよう。

※2016年の記事(9年も前か!)だし、単に使いこなせなかったかもしれないけどね。

今回は名前付きキャプショングループのおかげで内容をとても単純になった。

正規表現の/…/の中のパターンとオプションを手入力して【チェック】ボタンを押すと

new RegExp({正規表現パターン}, {オプション})

が動き、RegExpオブジェクトのプロパティを画面下の結果欄に表示する。

だけのハズだったが、

実際 サンプルをRegExe.execメソッドに与えてみないと

文法上正しいだけの正規表現になってしまうので、

【RegExp.exec(サンプル)をループ実行】ボタン

whie(true) {
  if({正規表現パターン}.exec({サンプル}) {
    #結果に出力を追記
  } else {
    break;
  }
  {無限ループチェック}
}

を追加した。

空の正規表現パターンを無限ループ内のexecメソッドに与えると空振りし続け

CPUファンが最大回転数になる上にブラウザが「メモリが~メッセージ」を出すので

空回りしない様にしてる。(つもり

名前付きキャプチャグループ名をCSSの色名にすれば、replaceメソッドに正規表現とリプレッサーを組み込めば、簡単にテキストの色付けができる様になってた。(笑

※色指定方法:キャプチャーグループ名_文字色_背景色と(_)で区切る。

前回の苦労は何だったのかな?(只の徒労だな(昔は大変だったよね?(笑って忘れよう

【名前付きキャプチャグループ名で色付け】ボタン

{サンプル} .replace ( /{正規表現パターン}/{オプション} , {名前付きキャプチャグループ名で色付けする処理} )       

も追加した。

正規表現パターンを拡張しテキストの文字を全て色付けできたら「完成」なんだろうなぁ~

正規表現パターンが完璧なのにテキスト中に色指定無しがあれば、多分「シンタックスエラー」だから

replaceで「<span style=”color: xxx”>・・・</span>」部分を消去すれば、エラってる箇所を抽出できそうダケど、色指定をdarkgrayに差し替えるか色指定が無い部分に下線属性を付加した方が見つけやすそう。

正規表現の最後に何でもヒットするパターンに下線の名前を付ければ、

(?<blue>true)|(?<red>false)|(?<green>\d+)|(?<underline>.+)
で
aaaatruebbbbfalsecccc1234dddd
を色分けしてみると?

予想外の部分に下線が付くと思ったら、全部下線が付いてしまった(合掌

ま、気軽に進めよう(笑

以下、サンプルデータ。

(?<blue>true)|(?<red>false)|(?<green>\d+)
gi
aaaatruebbbbfalsecccc1234dddd

最後に画面が寂しいのでtitleとplaceholder属性を追記した。

今はtitle内容を改行して表示させるには\nと書いてもブラウザが”\n”と思ってしまうので、

テキストエディタ上で直にLFコードを入れる(Enterキー押下)しかなけど、気が付いたら\nって書けば改行してくれる様な気がする。

最近のテキストエディタは「Enterキー」入力をCR、LF、CRLFのいづれかに変更する機能を持つものが多いので何とかなるけどね。

ps.2025/4/16

画面はサンプルなデータを初期表示して試しやすく(具体的にはデバッグ)した。コードも少し変えてみた

結果にオブジェクトの内容を表示する処理を共通化してみた

JSONなオブジェクトでは十分だけど、

for(const propertyName in oobject)

クラスでは静的なプロパティしか見せたくないらしく出てこない。


/**
 * JSON.stringifyのreplacer
 * @param {*} key 
 * @param {*} value 
 */
const stringifyReplacer = (key, value) => {
  if (key !== '' && !value) {
    value = 'undefined';
  }
  return value;
};
/**
 * オブジェクトのプロパティを列挙
 * @param {object} object オブジェクト
 */
const objectPropertyStringify = (object) => {
  let ar = {};
  // for(..in object)
  for (const id in object) { ar[id] = object[id]; }
  // Object.keys(object)
  const keys = Object.keys(object);
  keys.forEach((id) => { ar[id] = JSON.stringify(object[id], stringifyReplacer, 0); });
  // Object.getOwnPropertyNames(object)
  const props = Object.getOwnPropertyNames(object);
  props.forEach((id) => { ar[id] = JSON.stringify(object[id], stringifyReplacer, 0); });
  // Object.getOwnPropertyNames(obj.__proto__)
  const prototypeProps = Object.getOwnPropertyNames(object.__proto__);
  prototypeProps.forEach((id) => { ar[id] = JSON.stringify(object[id], stringifyReplacer, 0); });
  // 纏め
  const txts = [];
  for (const id in ar) {
    // typeof value !== 'function' で メソッドを排除
    if (typeof object[id] !== 'function') {
      txts.push(`${id}:${textColor(ar[id])}`);
    }
  }
  //
  return `<ul><li>${txts.join('</li><li>')}</li></ul>`.replace('<li></li>', '');
};

アレレ?配色が効かない!

/**
 * JSON.stringifyのreplacer
 * @param {*} key 
 * @param {*} value 
 */
const stringifyReplacer = (key, value) => {
  if (key !== '' && !value) {
    value = 'undefined';
  }
  return value;
};
/**
 * オブジェクトのプロパティを列挙
 * @param {object} object オブジェクト
 */
const objectPropertyStringify = (object) => {
  let ar = {};
  // for(..in object)
  for (const id in object) { ar[id] = object[id]; }
  // Object.keys(object)
  const keys = Object.keys(object);
  keys.forEach((id) => { ar[id] = JSON.stringify(object[id], stringifyReplacer, 0); });
  // Object.getOwnPropertyNames(object)
  const props = Object.getOwnPropertyNames(object);
  props.forEach((id) => { ar[id] = JSON.stringify(object[id], stringifyReplacer, 0); });
  // Object.getOwnPropertyNames(obj.__proto__)
  const prototypeProps = Object.getOwnPropertyNames(object.__proto__);
  prototypeProps.forEach((id) => { ar[id] = JSON.stringify(object[id], stringifyReplacer, 0); });
  // 纏め
  const txts = [];
  for (const id in ar) {
    // typeof value !== 'function' で メソッドを排除
    if (typeof object[id] !== 'function') {
      txts.push(`${id}:${textColor(ar[id])}`);
    }
  }
  //
  return `<ul><li>${txts.join('</li><li>')}</li></ul>`.replace('<li></li>', '');
};

にしている。

後、文法解析用の字句解析にReExpの(…)|(…)|…|(…)な書き方用【↓組み合わせ】機能も追加。

ちゃんと字句解析できてるかと思いきや「初期色」が読み飛ばされていた。

キャプチャー名が名前以外の場合は適当に色を割り当ててます。(今は2色を交互に使ってる。

※2025/4/17 : 配色が赤・緑・赤・赤・緑・赤・赤・緑と変なので修正、空白にも配色してたので修正。読飛ばされた箇所は背景色を黒にしてみた。早速「:」忘れてたのに気が付く。

長いログを見ても判りにくいのでexecを実行させる際に「macthしたテキストのみ」結果に出るチェックボックスを追加してみた。

※2025/4/17 : 名無しキャプチャーグループのみの正規表現でも表示する様に修正

なるほど、BINOP単項演算子に見えたか

完成までの道程はまだ遠い

※適当なソースを貼って遊ぶとオモシロイかもしれないけど、ページを「保存」してローカルで遊びましょう。

/* ・・・ */の複数行コメントの字句解析が思わしくない。

  • Windowsから貼ると改行がCRLFになると正規表現のmオプションが暴走しやすい
    • 仕方がないからCRLFはLFに置換
  • /* コメント1 */ コード /* コメント2 */」と複数のコメントがあると
    • /* コメント1 */ コード /* コメント2 */」と一括りにしてしまう
  • /* コメント1 / コード / コメント2 /コード / コメント3 /」と複数のコメントがあると
    • / コメント1 / コード / コメント2 /コード / コメント3 */」と一括りにしてしまう
  • パターンを先読みアサーション((?=))、([\s\S]*)、後読みアサーション((?<=))
    • (?=ここから/*) ([\s\S]*) (?=*/ここまで)」も
    • ここから/* * */ここまで * ここから/* * */ここまで」と一括りにしてしまう
  • 初期表示のサンプルは/* … */は1つだけなので2度コピペすると↑を際限できます
  • とりあえず良さげなパターンが見つかった。
    • COMMENT: (/{2}.$|\/\*\/?([^/]|[^*]\/|\r|\n)*\*\/)
      • \/\*:つまり / *
      • [ \ s | \S ]* を使うと 最後に見つけた * / までブチ抜けくので
      • \/?([^/]|[^*]\/|\r|\n)* で頑張る
        • 先頭の\/?:/*直後に/があった場合のお守り
        • ([^/]|[^*]\/|\r|\n)*: */ 以外のパターンのつもり
          • ( ) * で中のパターンを0回以上繰り返し
            • [^/] | [^*] \/ | \r | \n
            • 非 / or 非 * and / or CR or LF  であるから
          • 非 / 非 * and / 改行のパターンを0回以上繰り返すパターンの意味
      • \*\/:つまり * /
    • CR: ([\r|\n]+)
    • 記事にペーストなんか違う?勝手に斜体になってる???
    • まさかWordPressの記事入力のエスケープシーケンスまで絡んでくるとは思わなんだ

結果に改行がそのまま出力してたので<br/>に変えた。

ついでに空白も&nbsp;や&emsp;に変えたらなぜか色設定が消えた!(あ、タグの中に空白がいっぱい

font-familyの設定もイジることにした見やすくなった。(結果オーライ

ps,2025/4/18

’ ・・・ ’の字句解析が思わしくない。

  • \’ ・・・・ ‘ も判定してしまう。
    • LITERAL:    (‘[^’]*’) では不完全らしいから
      • WQLITERAL:  (“[^”]*”) や QLITERAL:   (‘[^’]*’) もダメだろう。
  • でも普通はいきなり \’ なんて出てこない

コードの中の正規表現の後がズタズタだった・・・(涙

spreadSheetを作ってた時もBNF記述でハマってた。パーサーコンビネーターで作ってたから厳密な字句解析をすっ飛ばして token === ‘/.*/{flags}’ でいいや的な誤魔化しができた。

正規表現でコードハイライトのラスボスは正規表現

嫌すぎ

ps.2025/4/18:多少改善できたので更新。

TODO:/\\/な正規表現が苦手で、以下ボロボロになる。

text = text
  .replaceAll(/\\/g, '\\\\') 👈今この辺で滞っている
  .replaceAll(/\"/g, '\\"')
  ;
copyClipboardText(`new RegExp("${text}", "${flags}");`);

やっと片付いた(かもしれない

COMMENT:    (\/{2}.*$|\\/\\*\\/?([^/]|[^*]\\/|\\r|\\n)*\\*\\/)
CR:         ([\\r|\\n]+)
SPACE:      ([\\s]+)
BQLITERAL:  (\`(\\\\\\\\|\\\\\`|[^\`]|\\r|\\n)*\`)
LITERAL:    (\'(\\\\\\\\|\\\\\'|[^'])*\')
WQLITERAL:  ("(\\\\\\\\|\\\\"|[^"])*")
REGEXP:     (\\/(\\\\\\\\|\\\\/|[^\\/])*\\/[a-z]*)
REGION_B:   (s*#regions+[a-zA-Z0-9]+.*$)
REGION_E:   (s*#endregion$)
L_BRACE:    ({)
R_BRACE:    (})
L_PAREN:    (\\()
R_PAREN:    (\\))
L_BRACKET:  (\\[)
R_BRACKET:  (\\])
COMMMA:     (,)
COLON:      (:)
DOT:        (\\.)
BINOP:      (\\|\\||&&|===|!==|!=|==|\\+|<|>|\\?|<=|>=|-|\\*|\\/|%|=|!)
DELIMITER:  (;)
NULL:       (null)
VALUE_TYPE: (void|integer|bool|string)
SCOPE:      (public|private|friend|static)
THIS:       (this)
NEW:        (new)
BOOL:       (true|false)
SYMBOLE:    ([_a-zA-Z0-9]+)
NUMBER:     ([1-9][0-9]*[.]?[0-9]*)
※オプションは「gim」指定時のみ有効。

から【↓組合せ】ボタンで論理和で結合したパターンを貼り付ける。

このパターンとオプションからVScodeに貼ると、自動的にフォーマッタが働きグチャグチャになるので

"・・・"

とペーストする部分をクリックした後にそ~っとペーストしなければいけない。

※【コピー】ボタンでエスケープ処理済みのテキスト(↓参照)をクリップボードにコピーさせてからファイルにペースト。

const re = new RegExp(
  "/(?<COMMENT>\\/{2}.*$|\\/\\*\\/?([^/]|[^*]\\/|\\r|\\n)*\\*\\/)|(?<CR>[\\r|\\n]+)|(?<SPACE>[\\s]+)|(?<BQLITERAL>`(\\\\\\\\|\\\\`|[^`]|\\r|\\n)*`)|(?<LITERAL>'(\\\\\\\\|\\\\'|[^'])*')|(?<WQLITERAL>\"(\\\\\\\\|\\\\\"|[^\"])*\")|(?<REGEXP>\\/(\\\\\\\\|\\\\\\/|[^\\/])*\\/[a-z]*)|(?<REGION_B>s*#regions+[a-zA-Z0-9]+.*$)|(?<REGION_E>s*#endregion$)|(?<L_BRACE>{)|(?<R_BRACE>})|(?<L_PAREN>\\()|(?<R_PAREN>\\))|(?<L_BRACKET>\\[)|(?<R_BRACKET>\\])|(?<COMMMA>,)|(?<COLON>:)|(?<DOT>\\.)|(?<BINOP>\\|\\||&&|===|!==|!=|==|\\+|<|>|\\?|<=|>=|-|\\*|\\/|%|=|!)|(?<DELIMITER>;)|(?<NULL>null)|(?<VALUE_TYPE>void|integer|bool|string)|(?<SCOPE>public|private|friend|static)|(?<THIS>this)|(?<NEW>new)|(?<BOOL>true|false)|(?<SYMBOLE>[_a-zA-Z0-9]+)|(?<NUMBER>[1-9][0-9]*[.]?[0-9]*)",
  "gim");

な感じなら、使用しているjavascriptファイルは大体OK(だと思う

リテラル系の「 \ \ \ \ \ \ \ \ 」:「\」8キャラが酷い。

  • javascriptファイル上の「 \ \ \ \ \ \ \ \ 」:「\」8キャラ
    • をjavascriptエンジンが読み込んで
    • 「\\」を「\」に変換するので
    • \ \ \ \ 」:「\」4キャラのデータになる
      • これを渡されたRegExpクラスも
      • 「\\」を「\」に変換するので
      • \ \ 」:「\」2キャラのデータになる。

なのでRegExpに「 \ 」を2キャラ渡すために

javascriptのソースコードには「 \ \ \ \ \ \ \ \ 」と8キャラ書くことになる

なんてこったい。(知ってたけど

ついでにココ(段落)に貼るとWordPressのエスケープシーケンスが即反応するので、専用のプラグインに貼る方がいい。

ps.2025/4/19:少し調整

・テキストエリアでタブキーを入力できる様にした

・正規表現のキャプチャーグループ名に文字色と背景色を指定できるようした

COMMENT_RED_000000 な感じに書くと

色付け処理で、

グループ名を(_)で区切って「グループ名_文字色_背景色」な感じで色付けできる。

色番号の「#」はキャプチャーグループ名に使えないので「#」を除いた16進表記のみ書く。

これで、ちょっと「(」が読みにくいので色を変えるとかが簡単になった。

ps.2025/4/23

XMLのツリービュー表示で使う正規表現のデバッグをしていたら

正規表現
(?<attr_name>[-:a-z]+)(?<attr_sep>=)(?<attr_value>"[^"]*")|(?<attr_name>[-:a-z]+)|(?<SP>[\t\s\r\n]+)
サンプル
<style:style style:family="paragraph" style:name="a213">

一度のexec実行で複数のグループがヒットする正規表現の場合には・・・

[attr_name, attr_sep, attr_value] : '{attr_nameの抽出結果のみ}'

と最初の抽出結果しか表示してないコトに気付いたので

[キャプチャ1名]:'{キャプチャ1抽出結果}'、・・・[キャプチャn名]:'{キャプチャn抽出結果}'

の様な感じに変更した。

隣の「色付け」ボタンを押すとキャプチャ対象外の文字は赤で背景色が黒で表示するので、

あ、「<」と「>」を無視してるじゃん!

とか判りやすいと思う。



[javascript]コードは短い方が良い(かもしれない

const divMatchPattern = document.getElementById('matchPattern');
const txtMatchPattern = "/(\\/\\*[\\s\\S]*?\\*\\/|\\/{2,}・・・/g\n";
divMatchPattern.value = txtMatchPattern.toString();

というコードがあって、

id=matchPatternなオブジェクトが無い場合があるので

const divMatchPattern = document.getElementById('matchPattern'); if(divMatchPattern){
const txtMatchPattern = "/(\\/\\*[\\s\\S]*?\\*\\/|\\/{2,}・・・/g\n";
divMatchPattern.value = txtMatchPattern.toString(); }

とすると読みにくいから「保存(Ctrl+S)」すると

const divMatchPattern = document.getElementById('matchPattern');
if(divMatchPattern){
    const txtMatchPattern = "/(\\/\\*[\\s\\S]*?\\*\\/|\\/{2,}・・・/g\n";
    divMatchPattern.value = txtMatchPattern.toString();
}

となって長くなるから1行でも短くしようと捻って

for (const divMatchPattern of document.querySelectorAll('#matchPattern')) {
  const txtMatchPattern = "/(\\/\\*[\\s\\S]*?\\*\\/|\\/{2,}・・・/g\n";
  divMatchPattern.value = txtMatchPattern.toString();
}

とか

document.querySelectorAll('#matchPattern').forEach((divMatchPattern) => {
  const txtMatchPattern = "/(\\/\\*[\\s\\S]*?\\*\\/|\\/{2,}・・・/g\n";
  divMatchPattern.value = txtMatchPattern.toString();
});

とか

try {
  document.querySelector('#matchPattern').value = "/(\\/\\*[\\s\\S]*?\\*\\/|\\/{2,}・・・/g\n";
} catch() {}; ※とミスっても原因が~になるパターン

とか最後には

document.querySelector('#matchPattern') {左辺がnullじゃなければ右辺も続けて評価する演算子} .value = "/(\\/\\*[\\s\\S]*?\\*\\/|\\/{2,}・・・/g\n";

があったらいいなぁとか思う。

Null合体演算子(??)が近いけど、基本は || なので

const 結論=(Aプラン) ?? (Bプラン) ?? (冗談ではない)

的に

const ストーリィ展開=(なんだかわかないけど) ?? (なんかわかった) ?? もうどうなってもいいや

の様に使うものなので、

document.querySelector('#matchPattern') ?? .value = "/(\\/\\*[\\s\\S]*?\\*\\/|\\/{2,}・・・/g\n";

は期待通りには動かない。

「.」を「.$.」にすると左辺がnullだったらもうどうなってもいいやドット演算子があったらいいな

document.querySelector('#matchPattern').$.value = "/(\\/\\*[\\s\\S]*?\\*\\/|\\/{2,}・・・/g\n";

一応、try ・・・ catchで包まれていたらthrowするけど

try {
   document.querySelector('#matchPattern').$.value = "/(\\/・・・"; ※中で throw(undefined)する
   ※Throw.resume()で、ここに戻る
} catch (ex, stack) {
  if(ex) console.log(ex) ※ ex が undefinedなので
  else stack.resume();   ※ throwした直後に戻る。
                         ※ 状況は stack.stackを読む
                         ※  行番号とかカラムとかnullな処理箇所が判ると助かる
}

だといいな。

あとドット演算子(.)とアロー演算子(->)の違いの記事を読んだ感想。

昔のC言語では、メモリがとっても少なかったので作りがとても簡素で

簡素な構文解析に落とし込まないとメモリに入らない

というゲーム制作みたいな理由。

変数は基本的にアドレス+オフセット+サイズとして考えるポインタ変数でプリミティブな型変数はオフセットが0でサイズがプリセットで決まっているポインタ変数。

このため、構造体のドット演算子もポインタ変数のアロー演算子も「この変数の構造(オフセット)を見てオフセットを計算してね」という意味では同じだから一緒で良かったハズ。

しかし、基本な皆中身がポインタ変数なので、内部構造であるハズのポインタ変数を明示的に使われるとコンパイラは

  • 普通の変数は梱包済み
  • ポインタ変数は開梱済み

を切り分けて処理するのも面倒なので

※2通りの変数の種別があると毎度毎度似た様な処理が4通り必要になるのでウザい

仕方なく演算子(という表現上で人が指示する様に)を分けた様に思える。

昔のソースって概ね一本の長さが80列×25行程度に収まってたのもあるけどね。



[VScode]リモートサーバに繋ぐ※メモ書き

VScodeでHTMLやJavaScripの作成やデバッグができるけど、リモートなサーバにはWinSCP等でコピっていたけど今はSSH接続でターミナルやファイル転送やデバッグができる。

1.SSH接続の設定を追加する

まず、左のリモートエクスプローラ(><っぽい奴)からSSHの歯車をクリック。

一番上のconfigを選択

そして適当に追記

Host {SSH接続先メニューのタイトル}
    HostName {リモートホストのIPアドレス}
    User {SSH接続時のユーザ名}
    Port 22  ※多分22でOK
    IdentityFile ~/.ssh/{秘密鍵ファイル名のハズ}

Host のタイトルを {ユーザ名}@{表示名} のように書いたら、

プロセスが、存在しないパイプに書き込もうとしました。

とかエラーになった。

{表示名}_{ユーザ名}はOKなので@だけ失敗するかもしれない。

タダの表示名では無い様だ。

Ctrl+Sで保存

2.SSH鍵ファイルの作成と転送

昔はPuTTYをインストしてKEY-GENで作って出来たものを変換して・・・だったけど、

今はWindowsのコマンドプロンプトで作成できる。

※元ネタ:SSH鍵の生成と使用ガイド(Windows対応)

> dir "%USERPROFILE%\.ssh"         ※ SSH鍵を保存する .ssh フォルダがあるか調べる
> mkdir "%USERPROFILE%\.ssh" ※ .sshフォルダが無かったら実行する
> ssh-keygen -t rsa -b 4096 -f "%USERPROFILE%\.ssh\id_rsa" -N ""    ※このコマンドで作ってくれる

出来た公開鍵を使って下のスクリプト7行を{…}内を修正した内容をコピって

PowerShellにペーストしてリモートのホストの認証リストに追記させる。

※元ネタ:Windowsでssh-copy-idっぽいことをしたい

※改行を無視させる文末の「`」の前に半角空白が必須

$sshUser = '{SSH接続ユーザ名}'
$sshHost = '{リモートホストのIPアドレス}'
cat ~/.ssh/id_rsa.pub | ssh ${sshUser}@${sshHost} `
" `
mkdir -p ~/.ssh && chmod 700 ~/.ssh && `
cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys `
"

※ログインするのでパスワード入力応答あり、

これでリモートホストのフォルダを見る度にパスワード入力しなくてもいい。

リモートホストを選択し

なぜかリモートホストのプラットフォームをちゃんと選択すると

自動的に選択したプラットフォーム用のVSCode-Serverがリモートホストにインストされる

それはいいけど英語のメッセージ

和訳すればホッとする内容

これで毎回パスワード入力画面(下図)を見たくて良くなったのはとても気分がいい。

接続するとターミナルか

エクスプローラからソースを選択すれば編集できて保存もやってくれる。

デバッグもソースを手前に表示している状態でメニューの【実行】から

Node.jsを選択すれば、デバッグコンソールで

$  node  {表示してるJSファイル}

してデバッガが起動するのはいつも通り。

ブレークポイントとかウォッチ式も使える。※ import.meta.url 等一部不可

但しVSCodeで開いたフォルダがプロジェクト以外のディレクトリィだとそのディレクトリィをカレントディレクトリィとしてnodeを実行するみたいなので

privateKey: fs.readFileSync(`${__dirname}.ssh/id_rsa`), ※__dirname がホームディレクトリィ
↓
privateKey: fs.readFileSync(new URL(`.ssh/id_rsa`, import.meta.url)), ※ソースのフルパスを使う

とかちょっと修正が必要。



[Windows11]コア分離・メモリ整合性OFF?

何か?

押してみると・・・

設定に移動してみる

オンにしてみよう

どうやら互換性のないドライバがマズイらしい。

互換性のないドライバーを確認するとLogcoolの名前が多いので、LogcoolのG HUBをインストしてみるもダメ!ドライバーの名前が被る始末、症状は悪化してしまった。検索するとDriverStoreにもコピーを作っている。アンスコしてもDriverStoreフォルダに残ったまま。

このDriverStoreフォルダはエクスプローラからの削除はうまくいかないので、よく判らないけどDriverStoreの邪魔なドライバーを削除するツール(DriverStoreExplorer.v0.11.92)を使い、非互換ドライバーをC:\Windows\System32\DriverStore\FileRepositoryから強制削除も使用して一掃した。

C:¥Windows¥System32¥driversフォルダにある非互換ファイルは1つづつDEL。

やっと【再スキャン】の出番だ。

これでメモリ整合性がONになるのかな?

無事、メモリ整合性はONにできた様だ。

24H2インスト直後はここでTPM2.0が無いせいと表示されていたと思うが今はキニシナイらしい。

しかし、インテルのオンボのグラフィックス・ドライバーやドライバー&サポート・アシスタントが使えなくなっていた。

暫定的にこうなってる様な気もするし、いづれにTPM 2.0モジュールが無いと本当にダメな気がしてきた。

i7-3770Tの今のマザボをCPU-Zで見るとMSIのPH61A-P35 (B3)で、オンラインでマニュアルを見るとTPMモジュールのコネクタがOptionalで付いている。実物にもそれらしいコネクタが付いていたのでAmazonで注文してみた。(500円くらい。国際郵便で一週間程度)

これが届けば、一安心?一波乱?

ps.2024/10/14

PC(G4560)で、非互換ドライバー発見

  • WinDVD 10 の PxHlpa64.sys
    • C:\Windows\System32\Drivers\PxHlpa64.sys を削除
      • それでも普通にWinDVD起動するし動画再生もする
      • BDドライブにメディアを入れた時に起動する設定がレジトリィあるそうな
        • \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e965-e325-11ce-bfc1-08002be10318}のLowerFilters のデータに、PxHlpa64.sys とあるのを削除しておく方が良いらしい。
  • USB TVチューナー(PIXELA製PIX-DT295)の pxmb86m0x_usb.sys

でメモリ整合性ONにできた。

ps.2024/10/14

INTEL(i7-3770T)のオンチップ・グラフィックスが停止。

調べてみると、第3世代のグラフィックスドライバーは開発終了で、第7世代以降しかドライバは更新されていなかった。どうやらメモリ整合性ONにするにはWindows11対応してるグラフィックスカードが必要な様だ。またドライブを無効化してもWindows起動時に「このドライバは読み込めません」えらーが出るので、BIOSから「PEG」の設定で「IGPU Multi-Monitor」を無効化し「IGD」を併用しない様にした。

これで安定するかな。SATAドライバが2つ?不明なデバイスもあるのが謎なので無効化。Ivy Bridgeは厳しい様だ。

G4560のオンボード・グラフィックスは無事。Kaby Lake(第7世代)だからセーフ?

G3900はSkylake第6世代)だからダメかも。

ps.2024/10/17

不明なデバイスはサポートされなくなったIntel Smart ConnectionとのことなのでBIOSで【DISABLED】

標準SATA AHCIコントローラーの⚠️は、BIOS でSATAのモードが【AHCI】だったので【IDE】に変更したら消えたけど、デバイスマネージャの表記がSATAからIDEに変わってしまった。

SSDもIDEだったかな?

ps.2024/10/17

TPM2モジュールが届いたけど、20PINだった。14PINタイプを買うもASUS用で、MSIとPINアサインが全然違っていたのでキャンセル依頼を出して、MSI用を買い足す。キャンセルできなかったら古いMBの保守に取っておくか。

ps.2024/10/18

ピン数種類価格送料状態
20unknown510配達(10/17)
14asus1043699キャンセル
14msi1733700配達(10/25)
BIOS未対応?
TMP2.0モジュール

ps.2024/10/25

予定より速くTPMモジュールが到着。試してみるとモジュールのREDが点灯するがWindowsはドライバーが読み込まれず無反応。BIOSを見るがTPMモジュールの項目が無い。

ここでBIOSをdefaultにしてみたらハマった。

起動してリセットの繰り返しになる。TPMモジュールやグラボやストレージを外しボタン電池を取り換えても無駄。

オングラボは無反応なのでグラボを戻してCMOSリセット直後はブート時にF1:SETUP、F2:CONNTINEのメニューが出るがBIOSは表示せず、リセットの繰り返し。またUSBキーボードが反応しない(NumLock等も全くLEDが付かない)のでPS2キーボード(起動時にLED点灯)でなんとかF1かF2が押せるだけ。

TPMモジュールに怪しいコードでも入っていたか?

BIOSのdefaultが化けていたか?

もうCPUかマザボが虫の息一歩だったダケ?

少なくともUSBのPS2エミュが不可になってる。



[windows11]スリープからの復帰の呪い

時間がかかり過ぎ、電源のメニューに「休止」が無いので、「スリープ」が「スリープ」アンド「休止」動作になり、復帰後も暫く無反応な状態になる場合がある。※NVME M.2 SSDを使ってるのに。

この「スリープ」の「休止」処理を止めるには電源ボタンのメニューに「休止」を出すことで・・・

「スリープ」が「スリープ」のみの動作になる。(らしい

操作1:

①ウィンドウズバーの検索に「電源」と入れて「電源プランの編集」を選択。

②「電源ボタンの動作を選択する」を選択。※電源ボタンのメニューを編集したいから

③「現在利用可能ではない設定を変更する」を選択。※メニューに出ない項目を出したいから

④「休止状態」にチェックを入れ「変更の保存」ボタンを押す。

これで電源ボタンのメニューに無事「休止」が表示される。

管理者権限のコマンドラインでハイバネーション(ストレージにPCの状態を保存する機能)をOFFし、

powercfg.exe /hibernate off

休止不可にしてスリープを速くすることもできるっぽい。

というか、手持ちのSSDが実質0.8GBytes/sec程度でメモリ32GBytesも積んでるから30秒以上はかかりそうな休止よりシャットダウンの方が速そうなんでハイバネーションOFF済みだったのに。



[javascript]spreadSheet5 ネームスペース

自前コードなので、関数やクラスをネームスペースにバラ巻いていた。

ただ、このままでは、再利用する度に、困りそうなので、カスタムタグのソースのクラスなどをMYAPPに纏めてみた。

まず、ネームスペースをまとめる関数を追加。※ネットで見つけたコードを少し改良したもの

/**
 *  MYAPP   グローバルオブジェクトのアプリ名
 */
const MYAPP = {};   //  初期設定

/**
 *  指定ネームスペースを作成する
 * @param {string} pNameSpace       作成するネームスペース・パス
 * @param {undefined | JSON} pJson  追記する内容 undefined または JSON
 * @param {boolean} pFreeze         変更不可指定
 */
MYAPP.namespace = (pNameSpace, pJson = undefined, pFreeze = false) => {
    /**
     * 再帰的にオブジェクトを凍結する
     * @param {object} obj  凍結するオブジェクト
     */
    const freezeR = (obj) => {
        if (typeof obj === 'object') {
            // オブジェクトの配下を再帰的に凍結
            for (const key of Object.keys(obj)) {
                freezeR(obj[key]);
            }
            // オブジェクト自体を凍結
            Object.freeze(obj);
        }
    };
    // ネームスペースのテキストを .で区切った配列を作成する。※先頭がMYAPPなら削除する
    const aNameSpace = pNameSpace.split('.').filter((element, index) => index !== 0 || element !== 'MYAPP');
    //  現在のパスをMYAPPへ移動する
    let curPath = MYAPP;
    //  パス最後の要素の有無で処理が分岐する為、配列から最後の要素を分離する。※constでもpopはオブジェクトを差替(代入)えないのでOK(らしい
    const lastElement = aNameSpace.pop();
    //  配列の順にネームスペースの有無をチェックする
    for (const part of aNameSpace) {
        // パスが存在しなければ作成し、パス位置を現在位置へ移動する
        curPath = curPath[part] = curPath[part] ?? {};
    }
    // パス最後の要素が未設定なら空リストを代入
    if (curPath[lastElement]) {
        // pJsonをマージする
        Object.assign(curPath[lastElement], pJson ?? {});
    } else {
        // pJsonに差替える
        curPath[lastElement] = pJson ?? {};
    }
    //  編集不可指定ありの場合
    if (pFreeze) {
        //  作成したネームスペースを再帰的に凍結します
        if (!pJson) {
            freezeR(curPath[lastElement]);
        } else {
            //  JSON配下のオブジェクトを再帰的に凍結します
            for (const key of Object.keys(pJson)) {
                freezeR(curPath[lastElement][key]);
            }
        }
    }
};

aNameSpaceからそのままfor (const part of aNameSpace)を回すと、curPathが最後まで移動し、pJsonをネームスペースに追加しようとすると、

 curPath = pJson ?? {} ;                            // MYAPPの方は書き換わらない

となってしまい、MYAPPの方は書き換わらないので、最終の一歩手前でcurPathを止めて、

curPath[lastElement] = pJson ?? {};                 // curPath[lastElement]はMYAPPの一部なのでOK

としたかったので、aNameSpaceから最後の要素を切り取った。

また、Object.assignの第一パラメータの中身がundefinedの場合は、エラってしまうので、

try {
  let obj = undefined;
  Object.assign(obj, pJson ?? {}); 
} catch(ex) {
  debug.print('Fail. '+ex);
}

⇒ Fail. Uncaught TypeError TypeError: Cannot convert undefined or null to object

undefined判定で空リストに変えてマージ。

    if (!curPath[lastElement]) {
        curPath[lastElement] = {};                      // 空リストにする
    }
    Object.assign(curPath[lastElement], pJson ?? {});   // マージする

さすがに

Object.assign(curPath[lastElement]??{}, pJson);   // マージする

は無理。

また、参照先が同じJSONにある場合は未確定な状態になりやすいので、MYAPP.namespaceの呼び出しを参照元と参照先で分けるのも面倒なので、第一パラメータで非参照先のネームパスを作成した方が楽。

これで完了と思ったら( ^ω^)・・・

MYAPP.namespace('aaa.bbb.ccc',
   (p1, p2, p3) => {
     ...
   }
);

aaa.bbb.ccc(1,2,3);

Uncaught TypeError TypeError: aaa.bbb.ccc is not a function

Object.assignは関数をプロパティっぽく書き込み、参照時に未定義な関数のエラーになるので、

    // パス最後の要素が未設定なら空リストを代入
    if (curPath[lastElement]) {
        // pJsonをマージする
        Object.assign(curPath[lastElement], pJson ?? {});
    } else {
        // pJsonに差替える
        curPath[lastElement] = pJson ?? {};
    }

で落ち着いた。

※まずpJsonがJSONかどうか判定した後の処理にした方が意図が読み取りやすいけど、深く意味を読み取ると無駄だと判るコードになる。

元ネタでは、

/**
 * スプレッドシートクラス
 * @class MYAPP.spreadSheet.SpreadSheetCustomElement
 */
MYAPP.namespace('spreadSheet.SpreadSheetCustomElement'),
MYAPP.spreadSheet.SpreadSheetCustomElement = class extends HTMLElement {
    ...
};

と、ネームスペースを作成し、作成したネームスペースにクラス等を設定する感じになっていた。

これを実際に動かしてみると、クラスの#変数がエラるw(パラメータがクラス宣言部なせいだろう)し、ネームスペースの文字も2度書いてるw(被ってるのは嫌い)なので、ネームスペースはファイルのパスまでとし、クラス名等はJSON形式でキー指定した方に変更して、クラスの定義は、こんな感じになった。

/**
 * スプレッドシートクラス
 * @class MYAPP.spreadSheet.SpreadSheetCustomElement
 */
MYAPP.namespace('spreadSheet', {
  'SpreadSheetCustomElement': class extends HTMLElement {
    ...
  }
});

ゴチャ付いてないから見やすくなった。(と思う

クラスを使用する場合はグローバルにクラスを宣言してないので、フルパス名で指定する。

_spreadSheet._command = new MYAPP.spreadSheet.SpreadSheetCommand(this);

関数も同様で、無名関数「function(…) { } 」でもいい。

MYAPP.namespace('lib', {
  'createHtmlElement': (elementName, options) => {
    ...
    },
});

使う時はフルパス名で指定する。

_layout.divTableN = MYAPP.lib.createHtmlElement('div', ... );

オブジェクトのプロパティはObject.freeze(object)で変更不可にできる。

メソッド名プロパティの追加プロパティの削除プロパティの値の変更
Object.preventExtensions()
Object.seal()
Object.freeze()

Object.freeze(object)以外は値の変更ができるので今回は対象外。

MYAPP.namespace('lib', {
  'char': {
    BR:'<br/>',
    CR: '\n',
    TAB: '\t',
    },
},true);             // 変更不可を指示

関数やクラスの外では意図的にstrictモードにしないとエラー(TypeError)が起きない。

ちなみに

"use strict";    // strictモード全開!

//  const 変数
MYAPP.namespace('lib', {
    'char': {
        BR: '<br/>',
        CR: '\n',
        TAB: '\t',
    },
}, true);
MYAPP.lib.char.BR = 'aaaaa'; ☚ここでType Error

Uncaught TypeError TypeError: Cannot assign to read only property 'BR' of object '#<Object>'

修正した結果

デバッグして止めて、スクリプト・スコープの内容を見ると、修正が漏れ過ぎ( ´∀` )

やっとのことでMYAPPにまとまった。

ネームスペースはすっきりした。

しかし、こんなコードを見た試しが無い。(大笑

パス名が付くのでコードが長くなる上、VSCodeの自動でコメントを生成するプラグインが怪しい動きをする可能性があるが、このクラス、変数はどこ?と探すのは楽かもしれない。

ps.2024/10/8

アップロード処理でvalueの無いセルデータでエラっていたので修正



[Windows11]早々の24H2といつものお約束

早々の24H2のインスト

早々に24H2へアップグレードしPC(i9-9900)を再起動すると

いつものお約束

トラブル①動かない「ASUS社製(らしい)」AsIO.sys

PC(i7-3770T)のマザボをASUSからMSIのものに交換した際にアンスコしたAI Suite3の残骸が残っていたらしい。

AsIO.sysで検索してみると、

  • C:\ProgramData\Asusフォルダ
    • AI Suite3プロダクト一式が隠れていた。設定のアプリの【変更】ボタン用だろう。
  • C:\Windows\System32\drivers\フォルダ
    • AsIO.sysがあった
  • C:\Windows\SysWOW64\Drivers\フォルダ
    • AsIO.sysがあった

の3か所にいっぱい残骸が残っていることが判ったので

  • C:\ProgramData\Asusをフォルダごと削除
  • C:\Windows\System32\drivers\AsIO.sysファイルを削除
  • :\Windows\SysWOW64\Drivers\AsIO.sysファイルを削除

で再起動したらエラーは出なくなった。

トラブル②動かない「INTEL社製」iqw64e.sys

他のPC(G4560)ではIntelのiqvw64e.sysがエラってた。

こっちはファイルを掴んでいるのがいるらしく上手く消せない。

Intel印のアプリを全て設定のアプリからアンスコしても消えない。

恐る恐る最後に残ったIntelのLANドライバーも設定のアプリからアンスコ。

それでもエラーは消えない。

IntelのホームページからWindows11用のLANドライバーのEXEをダウンロードしインスト。

やっと消えた。

安全の為に、同ホームページからインテル® ドライバー & サポート・アシスタントを入れなおし。

なぜか、2コア2スレッドのG3900だけはそんなエラーを吐かなかった。

 Hyper-Threadingが絡んでいるのかな?

ヤレヤレと思ったのもつかの間、

トラブル③Windows11のオンラインアップデートがへたる。

24H2にアップグレードした全てのPCでWindowsUpdateが失敗。

0x800f0825。ヽ( ´ー)ノ フッ

メッセージ説明軽減策
CBS_E_CANNOT_UNINSTALL。パッケージをアンインストールできません。通常、このエラーは、コンポーネントが部分的にインストールされている状態のときに発生するコンポーネント ストアの破損が原因です。コマンドを使用してコンポーネント ストアを Dism RestoreHealth 修復するか、部分的にインストールされたコンポーネントのペイロードを使用して手動で修復します。 管理者特権のコマンド プロンプトから、次のコマンドを実行します。
Dism.exe /Online /Cleanup-Image /Restorehealth
Sfc.exe /Scannow
デバイスを再起動します。
0x800f0825の意味

つまり、アップデートモジュールが勝手に24H2アップグレードからの回復機能をOFFしようとしたけど、システムから怒られた訳か。

> DISM /Online /Get-OSUninstallWindow
展開イメージのサービスと管理ツール
バージョン: 10.0.26100.1150

イメージのバージョン: 10.0.26100.1742

Uninstall Window : 10
操作は正常に完了しました。

期限が10日すぎるまで様子見モード。

60日まで伸ばしておくか。

> DISM /Online /Set-OSUninstallWindow /Value:60

お急ぎの方は、コンポーネント ストアを修復するか

> Dism.exe /Online /Cleanup-Image /Restorehealth
> Sfc.exe /Scannow

がっつりと修復をさせる

> Dism RestoreHealth

と良いかもしれない。

回復する気が無いことに気が付いたのでいつものおまじないをする。※上記と同じ。

> DISM /Online /Cleanup-image /Restorehealth  '  展開イメージのサービスと管理ツール
展開イメージのサービスと管理ツール
バージョン: 10.0.26100.1150

イメージのバージョン: 10.0.26100.1742

[==========================100.0%==========================] 復元操作は正常に完 了しました。
操作は正常に完了しました。
> sfc /scannow
システム スキャンを開始しています。これにはしばらく時間がかかります。

システム スキャンの検証フェーズを開始しています。
検証 100% が完了しました。

Windows リソース保護により、破損したファイルが見つかりましたが、それらは正常に修復されました。
オンライン修復の場合、詳細は次の場所にある CBS ログ ファイルに含まれています
windir\ Logs\CBS\CBS.log (たとえば C:\Windows\Logs\CBS\CBS.log)。オフライン修復 の場合、
詳細は /OFFLOGFILE フラグによって指定したログ ファイルに含まれています。

C:\Windows\Logs\CBS\CBS.logをRepairで探したけど、怪しいのは

CSI    00000245 [SR] Repair complete
DEPLOY [Pnp] Corrupt file: C:\WINDOWS\System32\drivers\bthmodem.sys
DEPLOY [Pnp] Repaired file: C:\WINDOWS\System32\drivers\bthmodem.sys

ぐらい。

KB5043178をリトライしてみると、エラーは出ないが無限ループっぽい感じがしたけど、再起動が要求来た。

DISM /Online /Get-OSUninstallWindowの回答は60のまま。復元の【戻す】ボタンもまだ使えるかもしれない。

WindowsUpdateで問題を解決するの【今すぐ再インストール】ボタンで

コンポーネント ストアを修復する様だ。
これからはこの【今すぐ再インストール】ボタンでWindowsUpdateの0x800f0825エラーを修復するのが簡単そうだと思って、PC(G4560)で試したが効果無く、おまじないもしたが失敗

※G3900,G4560のupdateの0x800f0825エラーは2024/10/9のupdateで解消。

G3900はWin10より起動が速くマウス操作の反応も良くなった気がする。※色々設定が初期化されてるせいかも?

トラブル④Windows11の「ネットワーク」の中のNASのアイコンを開けない。

PCの中のNASは開けるが

「PC」の中身、NASを開くと
ちゃんと見える。

しかし、「ネットワーク」のアイコン

を開き、

「ネットワーク」の中身

NASのアイコンをクリックすると

【0x80070035 ネットワークパスが見つかりません。】と、そっけない返事。

よくあるパターンは

  • ファイル共有が外れている可能性?
    • 有効になっていた
  • (怪しさMAXな)Peerプロトコルが無効の可能性?
    • サービスの一覧にPeer xxxxxなサービス名がそもそも無かった

方法1:Windows11のPCからNASにアクセスできない場合の対処方法

では、「Windowsの機能の有効化または無効化」で、

でSMB1.0クライアントを有効にしてNASにつなぐ方法が紹介されているが、

今はNAS側でSMB3暗号化が[Enabled]になっているので繋がらない。

方法2:ネットワークパスが見つかりません(エラーコード:0x80070035)の対処法 – Windows10

というのを見つけ、対処3: ゲストログオンを有効にする を試してみる。

グループポリシーエディタ(gpedit.msc)で

  • 左ペインのローカルコンピュータポリシー
    • コンピュータの構成
      • 管理用テンプレート
        • ネットワーク
          • Lanman ワークステーション
            • 右ペインの「安全でないゲストログオンを有効にする」を開く
              • 「未構成」⇒「有効」に変更
      • Windowsの設定
        • セキュリティの設定
          • ローカルポリシー
            • セキュリティオプション
              • 右ペインの「Microsoftネットワーククライアント: 常に通信にデジタル署名を行う」を開く
                • 「無効」になっていたのでそのまま閉じる
「安全ではないゲストログオンを有効にする」を探してる
「未構成」から「有効」に切り替えて【OK】ボタン
「常に通信にデジタル署名を行う」は無効だったのでパス

やっとNASのアイコンを開けるようになった。

トラブル⑤NASのパスワードを変えたら資格情報が自動更新してくれない

勿論、NASのアカウント設定は消えていたようで、ユーザ名とパスワードを再度入力して開けた。

・・・

「PCの中のNAS」は誰でも見れるパブリックなフォルダなので、セキュリティ的には何もしていない。

「ネットワークの中のNAS」はSMBで特定のアカウントのみに制限しているが、これがWin11だとセキュリティ的中途半端で嫌いらしい。

・・・

とりあえず、トラブルはこれでクリアできたかな?

ん?再起動するとNASのアカウントを忘れてる?

自動で更新されてないっぽい。Windowsアルアルで、パスワードを更新しても自動保存されない件。

資格情報マネージャーでパスワードを再設定。

これで終わったかな・・・( ^ω^)・・・

ps.2024/10/5

Windows 11 24H2で巨大ファイルのコピー速度が最大94%改善へ

という記事を見たけど、実感は無い。巨大なISOファイル(今回のは5.35GBぐらい)をPCのSSDにバックアップする場合は速いだろうけど、NASにバックアップする場合にはLANが1Gbps(≒GBit/sec)なら100MBytes/secあたりが最速なんで、頻繁にPCの中で巨大な作業ファイルをコピる人以外は体感する画面は少なさそう。

ps.2024/10/8

トラブルが多すぎて配布を中止してるそうです。再開時期は未定。カーソルが消えたり、NASの接続方法等が初期設定に戻されたりと、仕方が無いかな。

ps.2024/10/10

いっぱい残ってるWindowsUpdateの一時ファイルのクリーンアップを実行しても、途中で引っかかってしてい進まない。試しにChromeを閉じると、一気に進み完了。

しかし、8.63GBも残ってるので繰り返してみるが減らない。

諦めて、以前のWindowsのインストールの一時ファイルを削除をしてみるも、こっちもさっぱり進まない。

タスクマネージャでイーサネットの負荷が不可解だったのでグラフの表示をイーサネットに切り替えたら、即終了。

いかにも、「バレたか!」っぽい動き

どうやら、一時ファイルの削除処理はただ黙って待ってても、うまくいかないっぽい。

ps.2024/10/11

例の一時ファイルWindowsUpdateのクリーンアップ(8.43GB)はクリーンアップ対象候補から外れてるので放置でいいかも。それよりWindows10互換指定とか全く使ってないアプリを消した方が良いかも。

ps.2024/10/12

DeskCleanコマンドで一時ファイルが消えるかな?Windowsバーの検索に「DeskClean」と入力して

結果は、減らなかった。

ps.2024/10/13

sfc /scannow で必ずエラーが出るらしい。

2024-10-13 01:54:36, Info                  CSI    00000149 [SR] Verifying 100 components
2024-10-13 01:54:36, Info                  CSI    0000014a [SR] Beginning Verify and Repair transaction
2024-10-13 01:54:36, Info                  CSI    0000014b [SR] Repairing file \??\C:\WINDOWS\SystemApps\Shared\WebView2SDK\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 01:54:36, Info                  CSI    0000014c [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.WindowsAppRuntime.CBS_8wekyb3d8bbwe\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 01:54:36, Info                  CSI    0000014d [SR] Repairing file \??\C:\WINDOWS\SystemApps\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 01:54:36, Info                  CSI    0000014e [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.Windows.SecureAssessmentBrowser_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 01:54:36, Info                  CSI    0000014f [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.Windows.OOBENetworkCaptivePortal_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 01:54:36, Info                  CSI    00000150 [SR] Repairing file \??\C:\WINDOWS\ImmersiveControlPanel\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 01:54:36, Info                  CSI    00000151 [SR] Repairing file \??\C:\WINDOWS\SystemApps\ShellExperienceHost_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 01:54:36, Info                  CSI    00000152 [SR] Repairing file \??\C:\WINDOWS\SystemApps\Shared\WebView2SDK\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 01:54:36, Info                  CSI    00000153 [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.WindowsAppRuntime.CBS_8wekyb3d8bbwe\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 01:54:36, Info                  CSI    00000154 [SR] Repairing file \??\C:\WINDOWS\SystemApps\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 01:54:36, Info                  CSI    00000155 [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.Windows.SecureAssessmentBrowser_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 01:54:36, Info                  CSI    00000156 [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.Windows.OOBENetworkCaptivePortal_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 01:54:36, Info                  CSI    00000157 [SR] Repairing file \??\C:\WINDOWS\SystemApps\ShellExperienceHost_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 01:54:36, Info                  CSI    00000158 [SR] Verify complete

二度目も修復しましたと表示する。減ってるけど・・・

2024-10-13 02:03:34, Info                  CSI    00000234 [SR] Verify complete
2024-10-13 02:03:34, Info                  CSI    00000235 [SR] Repairing 1 components
2024-10-13 02:03:34, Info                  CSI    00000236 [SR] Beginning Verify and Repair transaction
2024-10-13 02:03:34, Info                  CSI    00000237 Hashes for file member [l:31]'Microsoft.Web.WebView2.Core.dll' do not match.
 Expected: {l:32 ml:33 b:a46788e94463899b6799304178a634643b20949cc7d378938db8abce8f69d17e}.
 Actual: {l:32 b:50a5c14fd4da7116a2072d12cb94c258354d0237979d5d5afa979be740d118f5}.
2024-10-13 02:03:34, Info                  CSI    00000238 [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.WindowsAppRuntime.CBS_8wekyb3d8bbwe\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 02:03:34, Info                  CSI    00000239 Hashes for file member [l:33]'Microsoft.Web.WebView2.Core.winmd' do not match.
 Expected: {l:32 ml:33 b:84c0515b0adf5f0078b2ce28d84912ebc071737c2150d781a2d15a7464390e92}.
 Actual: {l:32 b:0491fcbadc7e2e7320f741a9a562612305e515930811f176eab1b00ae5eb9d91}.
2024-10-13 02:03:34, Info                  CSI    0000023a [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.WindowsAppRuntime.CBS_8wekyb3d8bbwe\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 02:03:34, Info                  CSI    0000023b CSIPERF - FilePI Queue 132ms
2024-10-13 02:03:34, Info                  CSI    0000023c [SR] Repair complete

3度目も修復しましたと表示する。戻ってる?

2024-10-13 02:10:27, Info                  CSI    0000023d [SR] Verify complete
2024-10-13 02:10:27, Info                  CSI    0000023e [SR] Repairing 1 components
2024-10-13 02:10:27, Info                  CSI    0000023f [SR] Beginning Verify and Repair transaction
2024-10-13 02:10:27, Info                  CSI    00000240 [SR] Repairing file \??\C:\WINDOWS\SystemApps\Shared\WebView2SDK\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 02:10:27, Info                  CSI    00000241 [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.WindowsAppRuntime.CBS_8wekyb3d8bbwe\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 02:10:27, Info                  CSI    00000242 [SR] Repairing file \??\C:\WINDOWS\SystemApps\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 02:10:27, Info                  CSI    00000243 [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.Windows.SecureAssessmentBrowser_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 02:10:27, Info                  CSI    00000244 [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.Windows.OOBENetworkCaptivePortal_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 02:10:27, Info                  CSI    00000245 [SR] Repairing file \??\C:\WINDOWS\ImmersiveControlPanel\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 02:10:27, Info                  CSI    00000246 [SR] Repairing file \??\C:\WINDOWS\SystemApps\ShellExperienceHost_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.dll from store
2024-10-13 02:10:27, Info                  CSI    00000247 [SR] Repairing file \??\C:\WINDOWS\SystemApps\Shared\WebView2SDK\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 02:10:27, Info                  CSI    00000248 [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.WindowsAppRuntime.CBS_8wekyb3d8bbwe\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 02:10:27, Info                  CSI    00000249 [SR] Repairing file \??\C:\WINDOWS\SystemApps\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 02:10:27, Info                  CSI    0000024a [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.Windows.SecureAssessmentBrowser_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 02:10:27, Info                  CSI    0000024b [SR] Repairing file \??\C:\WINDOWS\SystemApps\Microsoft.Windows.OOBENetworkCaptivePortal_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 02:10:27, Info                  CSI    0000024c [SR] Repairing file \??\C:\WINDOWS\SystemApps\ShellExperienceHost_cw5n1h2txyewy\\Microsoft.Web.WebView2.Core.winmd from store
2024-10-13 02:10:27, Info                  CSI    0000024d [SR] Repair complete

繰り返しても終わらなさそう。

そのうち修正されるそうです。

ps.2024/10/20

昨日からインターネットが不通気味。

Chromeを開くと

とブログに追記しようとしたら

などと表示された後に

が表示されることがある。

Microsoft Windows [Version 10.0.26100.2033]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\System32> IPCONFIG /FLUSHDNS

Windows IP 構成

DNS リゾルバー キャッシュは正常にフラッシュされました。

C:\Windows\System32> NBTSTAT -R
    NBT リモート キャッシュ ネーム テーブルを正常に削除し、事前に読み込みました 。

C:\Windows\System32> NETSH INT IP RESET
コンパートメントの転送 のリセットに成功しました。
コンパートメント のリセットに成功しました。
制御プロトコル のリセットに成功しました。
エコー シーケンス要求 のリセットに成功しました。
グローバル のリセットに成功しました。
インターフェイス のリセットに成功しました。
エニーキャスト アドレス のリセットに成功しました。
マルチキャスト アドレス のリセットに成功しました。
ユニキャスト アドレス のリセットに成功しました。
近隣 のリセットに成功しました。
パス のリセットに成功しました。
可能性 のリセットに成功しました。
プレフィックス ポリシー のリセットに成功しました。
プロキシの近隣 のリセットに成功しました。
ルート のリセットに成功しました。
サイト プレフィックス のリセットに成功しました。
サブインターフェイス のリセットに成功しました。
スリープ解除のパターン のリセットに成功しました。
近隣の解決 のリセットに成功しました。
 のリセットに成功しました。
   ...
 のリセットに成功しました。
 のリセットに失敗しました。
アクセスが拒否されました。

 のリセットに成功しました。
   ...
 のリセットに成功しました。
コンピューターを再起動してこの操作を完了してください。


C:\Windows\System32> NETSH WINSOCK RESET

Winsock カタログをリセットしました。
リセットを完了するためにコンピューターを再起動する必要があります。

この記事をプレビューすると50%くらいの確率でエラるか砂時計が回りっぱなし。【保存】ボタンもあやしい。

ps.2024/10/28

通信エラーはかなり緩和された。Windows Updateのクリーンアップできない件は9.6GBから大きく減量された。




top