変奏現実

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

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

未分類

[javascript]サンプルを実行

jsファイルにコードを書かないと簡単なサンプルも実行できない。

勿論、そんなものはオンラインにあるけど、そういうところにソースをパリッと貼り付けるのはご法度なケースも多いので・・・

パパッとjavascriptのサンプルをローカルなHTMLで実行するサンプルを作ってみた。

但し、new Functionからはグローバルな変数が見えてしまう。

それだけなら特に危なくないけど

某MS操縦士のセリフ:俺を踏み台にしたぁ~~~

なんてコードを書かれても不思議ではない碌でもない世の中なので、

ソースだけ公開。

<DOCTYPE html>
  <html lang="ja">

  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>javascriptを実行させるサンプル</title>
    <link href="jstest.css" media="all" rel="stylesheet" type="text/css" />
    <script src="createelement.js"></script>
    <script src="download.js"></script>
    <script src="jstest.js"></script>
    <link href="loader.css" media="all" rel="stylesheet" type="text/css" />
    <script src="loader.js"></script>
  </head>

  <body>
    <!-- loader begin -->
    <div id="js-loader" class="loader">
      <p>***</p>
      <p id="js-loader-text"></p>
      <p>***</p>
    </div>
    <!-- loader end -->
    <textarea class="jsText" id="jsText1" scrolling="auto">
// sample code
return new Promise((resolve, reject) => {
  let result = new Array(10);
  for (let index = 0; index < 10; index++) {
    result[index]=index + 1;
  }
  console.log(result); console.log(10);
  console.log('aaaaaaaaaaaaaa');
  console.log({log: 'data=> result=data' });
  resolve();
});
</textarea><br />
    <button type="button" id="executeJsText">実行</button><br />
    <div class="status" id="status"></div><br />
    <textarea class="jsResult" id="jsResult1" scrolling="auto"></textarea><br />
    <button type="button" id="downloadJsText">javaScriptダウンロード</button><br />
    <button type="button" id="downloadResult">結果ダウンロード</button><br />
  </body>

  </html>
@charset "UTF-8";

textarea.jsText {
    width: 95%;
    /* 親要素の幅と合わせる */
    height: 200px;
    resize: both;
    border: 2mm ridge rgba(211, 220, 50, .6);
}

textarea.jsResult {
    width: 95%;
    /* 親要素の幅と合わせる */
    height: 100px;
    resize: both;
    border: 2mm ridge rgba(211, 220, 50, .6);
}
let CRLF = '\r\n';
window.addEventListener('load', () => init());
/**
 * 初期化処理
 */
const init = () => {
    // ボタンクリックイベントの登録
    document.querySelector('#downloadJsText').addEventListener('click', () => downloadText('jsText1'));
    document.querySelector('#downloadResult').addEventListener('click', () => downloadText('jsResult1'));
    document.querySelector('#executeJsText').addEventListener('click', () => dexecuteJsText('jsText1', 'jsResult1'));
    loaderClose();
};
/**
 * サンプルをエンコーディングしたファイルをダウンロードする
 */
const downloadText = async (target) => {
    try {
        loaderOpen();
        try {
            let dateBegin = Date.now();
            displayStatus(`${target}ダウンロード処理中`);
            let jsText = document.querySelector(`#${target}`).value;
            download(jsText, `${target}.js`, "text/plan");
            displayStatus(`${target}ダウンロード完了。処理時間:${dateDateBetween(dateBegin, Date.now())}`);
        } catch (ex) {
            alert(`${target}ダウンロード異常終了${CRLF}${ex}`);
        }
        loaderClose();
    } catch (ex) {
        alert(ex);
    }
};
/**
 * 実行する
 * @param {*} jsText 
 * @param {*} jsResult 
 */
const dexecuteJsText = (jsText, jsResult) => {
    let jsTextElmText = document.querySelector(`#${jsText}`).value;
    let jsResultElm = document.querySelector(`#${jsResult} `);
    let dateBegin = Date.now();
    try {
        loaderOpen();
        try {
            displayStatus(`${jsText} 実行処理中`);
            let func = new Function('console', jsTextElmText);
            let result = [];
            let radix = 10;
            let rc = func({
                log: (data) => {
                    if (data === undefined) {
                        data = 'undefined';
                    }
                    if (data === null) {
                        data = 'null';
                    }
                    switch (typeof data) {
                        case 'object':
                            data = JSON.stringify(data);
                            break;
                        case 'string':
                            break;
                        default:
                            data = data.toString(radix);
                            break;
                    }
                    result.push(data);
                }
            });
            new Promise((resolve, reject) => {
                if (rc instanceof Promise) {
                    displayStatus(`${jsText} 実行中 Promise.then待ち`);
                    rc.then(() => {
                        resolve(result);
                    });
                } else {
                    resolve(result);
                }
            }).then((result) => {
                jsResultElm.innerHTML = result.join(CRLF);
                displayStatus(`${jsText} 実行完了。処理時間:${dateDateBetween(dateBegin, Date.now())} `);
            });
        } catch (ex) {
            displayStatus(`${jsText} 実行異常終了。処理時間:${dateDateBetween(dateBegin, Date.now())}${CRLF}${ex} `);
        }
        loaderClose();
    } catch (ex) {
        alert(ex);
    }
};
/**
 * ステータスを表示する
 * @param {string} text 
 */
const displayStatus = (text) => {
    let divStatus = document.querySelector('#status');
    divStatus.innerHTML = text;
    let divLoading = document.querySelector('#js-loader-text');
    divLoading.innerHTML = text;
};
/**
 * 時刻差のテキストを作成する
 * @param {Date} dateBegin 
 * @param {Date} dateEnd 
 * @returns 
 */
const dateDateBetween = (dateBegin, dateEnd) => {
    return `${(dateEnd - dateBegin) / 1000} 秒`
};

createelement.js
download.js
loader.css
loader.js

は先の記事

デスクトップに貼ったJSからSJISのCSVをダウンロードさせてみる【その後】サンプル

と同じなので割愛。

ミソはjsソース中に

console.log(result);

と書かれたらどうやって取り出すか?

である。

今回は

let result = "";
let func = new Function( 'console', jsテキスト);☚jsテキストの処理に対してパラメータ'console'を宣言
func({log: (data) => ☚{...}内がconsoleオブジェクトとして扱われ、result変数にセットされる。

これでjsテキストの中でconsole.logメソッドがそれっぽく動き出す。

jsコードがwindowやdocumentを直接参照するのが嫌なら

let func = new Function( 'console', 'window', 'document', ..., jsテキスト);
func(
{log: (data) => result.push(data);},
{console: (data) => xxxx;},
{body: (data) => xxxx;},
);

とパラメータを追加し、見せたい情報を渡してサンドバック風にできるだろう。



[Linux]chrome

ダウンロードページからインストしようとしたら、1つ依存パッケージが見当たらないと出たので、

※chrome用のyumリポジトリィファイルを作る
# sudo vi /etc/yum.repos.d/google.chrome.repo
i
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
「esc」:wq
※内容チェック
# yum search google chrome
google-chrome-beta.x86_64 : Google Chrome (beta)
google-chrome-stable.x86_64 : Google Chrome
google-chrome-unstable.x86_64 : Google Chrome (unstable)
※安定版をインスト
# sudo yum install google-chrome-stable

※元ネタは、Google Chromeをインストールする Rocky,Alma,CentOS

chromeの拡張機能のchrome リモートデスクトップはインストできたので、他のパソコンに繋ぐことはできた。

しかし、他のPCから接続しようとdebパッケージで作られたパッケージのインストールができなかった。

一応、CentOS Stream8とMIRACLE LINUX 8.4にChrome Remote Desktopで接続する で

alienパッケージを使用して debパッケージをrpmパッケージに変換すれば使えるようになるらしいが、最新のdebパッケージではダメらしいので、パス。

すなおにUbuntuを入れようとしたが、cockpitの仮想マシンへの「OSのダウンロード」でUbuntu18をインスト中の「パッケージのインストール」で無限ループに入ってしまったので挫折。

ps.2023/08/17

ubuntu-22.04.2-desktop-amd64.isoをダウンロードし、これを仮想マシンにマウントする方式で無事Ubuntu 22をインストできた。

vncコンソールのマウスのポインタがズレて判定され操作しにくい。(特に×クリック

ここで、コンソールの「デスクトップビューアー」を試してみた。

  1. WindowsにRemote Viewerをダウンロードしてインスト
    • virt-viewer 11.0 (gpg) Friday November 18th, 2021 Win x86 MSI (gpg) 「Win x64 MSI (gpg)
    • インストするとv拡張子と連動する。
  2. 【リモートビューアーの起動】ボタンを押す
    • spice://127.0.0.1:5901へ接続する設定ファイルがダウンロード
      • そのまま実行しても接続失敗
      • ダウンロードしたvvファイルは自動削除設定になっている。
  3. cockpitが動作しているマシンのIPアドレスに差し替えても
    • 接続失敗。
  4. 使用する5900, 5901ポートを解放
    • 接続失敗。

ローカルホスト上でcockpitを起動している場合のみ、コンソールの「デスクトップビューアー」が使える様だ。

※もしかしたらWindowsの場合のみ127.0.0.1になるのかもしれない。

シリアルコンソールではクリップボードが使えるが、

vncコンソールでは使えないので、

諦めてSSHサービスをインスト。

$ sudo apt-get install openssh-server

勿論、以下はTeraTermから操作。

chromeをインスト。

$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo dpkg -i google-chrome-stable_current_amd64.deb
$ google-chrome で起動

chromeから remotedesktop.google.come/access を開き、chromeリモートデスクトップをインストし拡張画面へ移動。

リモートホストもインストさせようとしたが失敗。

手動に切り替える。

$ wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb -P ~/Downloads
$ sudo dpkg -i ~/Downloads/chrome-remote-desktop_current_amd64.deb
$ mkdir ~/.config/chrome-remote-desktop で作業フォルダを作っておく

するがdpkgでエラる。

どうやら、libutempter0モジュールが見当たらないらしい。

しかし、

$ sudo apt-get install libutempter0

しても先のdpkgが途中でエラーったのが影響しているのか失敗。

画面に apt –fix-broken installを試してね。と提案が出ていたので、

$ sudo apt --fix-broken install

で、無事リモートデスクトップがインストされた。

※うまくいかない場合もあるらしい。

とりあえず、WindowsからUbuntu22のデスクトップにアクセスできたが、nonモニターのため真っ黒。

結論

仮想マシンのvncコンソールがイマイチ。

  1. クリップボードが使えない。
  2. デスクトップ上のマウスポインタの座標がクリックした時とズレている。

chromtリモートデスクトップでリモート接続できても、モニターレスなら多分真っ黒画面になるので、仮想マシンはキャラベースでインストした方が安心。

こうなるとLinuxにHTML5なリモートデスクトップが欲しくなる。(Linux限定になるけどね

ThinVNCがあるか・・・



「HTML」タブ

これだけのためにjQuery使ってた気がするけど、今ではCSSだけでも作れるっぽい。

というかCSSの書き方としては昔からある

各タブは、チェックボックスとこれに連携するラベルで構成する。

<input id="{タブ名}_tab" type="radio" name="tab_item" checked>
<label class="tab_item" for="{タブ名}_tab">{タブ・タイトル}</label>

チェックボックス 自体は表示する必要は無い。

input[name="tab_item"] {
    display: none;
}

タブことラベルをクリックすると チェックボックス の状態がcheckedに切り替わるので、チェックボックスに対応する兄弟のブロックを表示。

ここは、タブ名が変わったり増えたりするる度に修正しないといけない。

#{タブ名1}_tab:checked~#{タブ名1}_content,
#{タブ名2}_tab:checked~#{タブ名2}_content,
#{タブ名3}_tab:checked~#{タブ名3}_content {
/* 表示 */
    display: block;
/* または上下左右センタリング */
    display: flex;
    justify-content: center;
    align-items: center;
}

cssに正規表現はあるけど、ペアだけ対象にする書き方は無い。

[id$="_tab"]:checked  ~  [id$="_ content] {
どのタブをクリックしても、全部表示しようとする
}

なので 兄弟のブロック は初期非表示。

.tab_content {
    display: none;
    ...
}


[Anime]ゴジラ S.P <シンギュラポイント>

留守録を溜めてあったのを一気観した感じは。

よく判らない。

オリジナル・ストーリィのせいかも。

アレっぽい男の子とアレッポい女の子のSNSを通し破滅に向かう世界の状況と謎の歌の謎解きが語られる。

ところが、最後の最後に、それとは何ら一切関係無く、

本当の主人公が勝手に最強になって

勝手にゴジラを倒し

勝手に世界は救われる。

一言でいえば、

ループもの。

だが、お話は「最終のループ」だけの構成だ。

エンディングの後に、ゴジラは50年前にも倒されていたらしい。どうやって倒したのかは不明だが、その場に居合わせた子供は、そのゴジラ復活を目指していた様だ。

と、第二シーズンもありそうな終わり方になっている。

絵も綺麗だし、怪獣も出るし、話の進め方も何となく「古代の伝承」絡みで、過去のゴジラっぽい。

しかし、オリジナルなストーリーは最低限に絞り込み、謎 謎 謎 な雰囲気で包まれているから、お話なんてどうでもいい。今の技術で凄いゴジラが見れれば良いんだよ!な人向け。

一応、ゴジラだけど放射能が出てこない。マスコミや学者はストーリーの中で核が出てないと嘆き、現実の核兵器の怖さを感じないならまた「 現実の核兵器が使われる」状況がやってくると考えている様だ。

マスコミの大半は「文系」だから「核=目に見えない危険物」 が無くなれば、文字通り「 危険な 状況は終了する」と思っている。

火薬などの化学モノは燃やしたり中和すれば「安全なもの」になるが、

核兵器や放射性物質は時間をかけて安全そうな放射性に下がるまでは「安全なもの」にならない。

※すぐに放射性を下げるには希釈する以外に方法は無い。

つまり、法律や条約で 完璧に核兵器や放射性物質を規制しても直ちに無くなる訳ではない。

どうせ全部下請けに丸投げするんだから。

見えない場所(処分場)に移動するダケ。

なんですよね。気持ちは察するけど、現実は悲しいね。



Windows 11 Check

Core i9-9900 Normalはチェックツールを通った。

しかし、こっちは惜しくも落選した。CPUリストに載ってないせいかな?

Pentium G4560の結果

UEFIからセキュアブートをON、トラステッド・コンピューティングでTPPを選択,再起動してデバイス選択をAUTOからTPM2.0にした。

Win10からTPM.MSCでドライバは動いている様に観える。



【Twitter】寒い時代になったぁ

Twitterにログインできるけどつぶやきが凍結されてしまった。

あ、ログインもはじかれた。

2021/02/13

今日もパスワード・リセットのメールが届かず。

そういえば、「普段とは異なる方法で・・・」とか書いてたな?

「普段と同じ方法」ならOKなんだな?(多分

最後の手段

スマホのtwitterアプリは基本的にログインしっぱなし(=普段と同じ方法)なのでここからパスワードの変更を試みたらできた。

どうやらPCからの接続は長時間のロックがかかっていたようだ。

というか・・・

とあるPCからアタックされまくっていたのだな?

しかし、心当たりは、ビビットアーミー と 原神 だけなんだが?

あ、どっちも中華ゲーだったな。(わっはっは

暫くはゲームを控えなくちゃいけないのかな???



【3Dプリンタ】印刷の事前準備

CURAでプリンタ設定の「プリンタ」タブの「G-Codeの開始」に

; Script based on an original created by tjjfvi (https://github.com/tjjfvi)
; An up-to-date version of the tjjfvi's original script can be found
; here:  https://csi.t6.fyi/
; Note - This script will only work in Cura V4.2 and above!
; --- Global Settings
; layer_height = {layer_height}
; smooth_spiralized_contours = {smooth_spiralized_contours}
; magic_mesh_surface_mode = {magic_mesh_surface_mode}
; machine_extruder_count = {machine_extruder_count}
; --- Single Extruder Settings
; speed_z_hop = {speed_z_hop}
; retraction_amount = {retraction_amount}
; retraction_hop = {retraction_hop}
; retraction_hop_enabled = {retraction_hop_enabled}
; retraction_enable = {retraction_enable}
; retraction_speed = {retraction_speed}
; retraction_retract_speed = {retraction_retract_speed}
; retraction_prime_speed = {retraction_prime_speed}
; speed_travel = {speed_travel}
; X5SA Pro Start Code
G21
G90
M82
M107 T0
M140 S{material_bed_temperature_layer_0}
M104 S{material_print_temperature_layer_0} T0
M190 S{material_bed_temperature_layer_0}
M109 S{material_print_temperature_layer_0} T0
G28
G92 E0
G28 ;Home
G1 Z15.0 F6000 ;Move the platform down 15mm
;Prime the extruder
G92 E0 ;Reset Extruder
G1 F200 E3 ;Extrude 3mm
G1 Y1 Z0.3 F200 ;Move Y1 Z0.3
G1 X120 F200 E10 ;clean-up
G1 X75 F200 E15 ;clean-up2
G92 E0 ;Reset Extruder Again

と追加すると、いいらしい。

2021/02/09

「ヘッド清掃」は印刷する前にベッドの手前側に樹脂を塗りつけるらしいので手前でクリップを止めている場合は注意。
※手前のクリップの針金が吹っ飛びました!
手前にクリップがある場合は・・・XとYを入れ替えて・・・こうですね。

G28 ;Home
G1 Z15.0 F6000 ;Move the platform down 15mm
;Prime the extruder
G92 E0 ;Reset Extruder
G1 F200 E3 ;Extrude 3mm
G1 X1 Z0.3 F200 ;Move X1 Z0.3
G1 Y120 F200 E10 ;clean-up
G1 Y75 F200 E15 ;clean-up2
G92 E0 ;Reset Extruder Again

所感

格安3Dプリンタだから失敗して壊れても・・・また買えばいいや
そう思ってたけど、失敗しすぎかな?



【Windows10】マウス

急にマウスのボタンが反応しなくなった。マウス自体のせいかと思ったが、他のマウスも押せなくなっていく。酷いのはポインタすら動かなくなる。
Bluetoothマウスや無線マウスなので電波状態が悪いのかもしれないけど、ボタンだけ押せないのは辺。

マウスの電源をON/OFFすると治ることもあるがすぐ押せなくなる。
PCを再起動すると治ることもあるがすぐ押せなくなる。

てか、マウスのボタンが押せないと、再起動するのも大変だ。

ので、マウス自体の問題ではないようだ。

原因1:複数のマウスを登録している。

設定・デバイスで普段使わないマウスを削除してみる。

変化なし。

原因2:複数のマウスドライバがインストされている。

デバイスマネージャに3つの汎用マウスドドライバーがあったので、全部消して、入れなおす。

少し良くなった。

原因3:アプリをインストせい。

最近原神を始めてから、症状がでるようになった。

でもアンスコするのは本末転倒なのでやらない。

あ、互換モードがあったな。推奨はWindows8だった。

これを設定してみたら、とりあえずエクスプローラやIMEは安定した。



【思いつき】太陽活動が減少すると…

大方の説として、太陽の活動が活発になろうが減少しようが、地球の気温に左程の影響は無いというのがある。

それじゃ~、主な熱源って太陽じゃないという訳ではなく。

大気の温室効果が増加して熱が籠ってる。

ということで、あるらしい。

しかし、不意に思いついたけど、太陽の活動が減少し、主にスペクトルが集中している可視光領域からちょっと周波数が下がると、赤外線の量が増えそうな気がした。

そうなると、暑くなるのも仕方が無いのかもしれない。

前世紀にオゾンホールで紫外線ががが~と騒がれていたが
そのオゾンホールも大分小さくなっているとか、紫外線量が減ったのも。

太陽の紫外線量が減って、赤外線量が増えてるんじゃないかな?
それに微々たる量だから、ちょっと「温暖化した」位で済んでるのかも。

ということは、太陽の活動が活発になったり減少したりすると、とりあえず温暖化するのかな?

そのうち雲が増えすぎると、日射量が減って寒冷化するのかも。

となると・・・

これから暫く温暖化が続くのか?寒冷化するのか?(居住地域に限定しての話。

どっちだろう?予測不可。

と、そう思った。



[モバイルモニタ]中華系

色々悩んだけど、6K円の割引に釣られてポチった。

届いたのはメーカー名らしき文字が一切無い完璧なノーブランド品。

箱の表には「Portable Monitor」
横に
「モバイルモニター13….イ カバー付3年保証付
 新品」
のシールが付いていた。

裏面には

Specification
Color: Black
Backlight: Highlit LED
Input: HDMI
Speaker: Built-in 2 Speakers

と書かれていた Made in China 製

中華製は押すと凹むものを見かけるが、
これは厚さ1cm、重さも2kg近くもある頑丈仕様。

取り扱い説明書では

機型MDS-133B11
パネルの種類IPS
サイズ13.3型ワイド
アスペクト比16.9
解像度1920*1080
視角178°
コンスラスト1000:1
明るさ600cd/㎡
色域パラメータ100%NTSC
入出力端子mini HDMI*2、USB TYPE-C*1、PD*1
Speac.

となっており、普通に使う分には申し分ないけど、色域は古い感じがする。

一応タッチ機能があるが、接続するとよくある「USB装置が…」が表示されるが、マウスの様な使い方はできるものの、手元のWindows10はタブレットモードがONにならなかったのでジェスチャーは使えないっぽい。

この製品はMacやUSB 3.1付きのスマホがメインなのでコレでいいんだろう。

スペック表の通り3入力あるので、HDMI1、HDMI2、USB 3.1を切替も可能、但し、ボタンを押してOSD表示⇒設定⇒入力切替 とメニューを進めないといけないので、まず使うことは無いだろう。

一番残念なのは、HDMIケーブルを延長コネクタで延長すると認識しないことかな。

しかし、Rasbery-pi にHDMIとUSBで繋いだら、座標が右下1cmくらいズレてるけどタッチキーが反応した。ズレを調整できるなら使い物になるかもしれない。これでケースサイズの小さなLCDは不要かな。もっともX-Windowは反応が遅すぎてキツイ。





top