変奏現実

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

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

2024 / 1月

[javascript]createElementとかaddEventListenerはダルい

createElementはダルい。

そもそも、innerHTMLを使えば済む。

createElementはタグ名が付いてるダケの空っぽなHTMLエレメントを作るだけなので

var button = createElement('button');
button.className = 'fileButton fileDrag';
button.id = 'fileButton' + buttonId;
button.type = 'button';
button.innerHTML = caption;
parentObj.appendChild(button);

と・・・ダラダラと書かないといけないから

      var fileButton  = createElement('button', {
        className:  ['fileButton','fileDrag'],
        id:         'fileButton' + buttonId,
        type:       'button',
        innerHTML:  caption,
        parent:     parentObj
      });

の様に連想配列でエレメントの属性を一式で指定できればいいのに・・・

と思ったので書いてみた。

    //  HTMLエレメントを作成します
    const createElement = (tagName, options) => {
      var eventList = ['ended'];
      var elm  = document.createElement(tagName);
      Object.keys(options).forEach( (key) => {
        // eventの場合
        if( eventList.includes(key) ) {
          elm.addEventListener(key,options[key]);
        } else {
          // event以外の場合
          switch(key) {
            case 'className': // プロパティはclassNameですが、タグの属性はclassなので別途に処理します。
              if(Array.isArray(options[key])) {
                elm.classList.add(...options[key]); // 配列を展開しパラメータとして引き渡す
              } else {
                elm.classList.add(options[key]);
              }
              break;
            case 'innerHTML': // setAttributeではタグ内にinnerhtml="***"と属性を生成するので別途に処理します。
              elm.innerHTML = options[key];
              break;
            case 'parent':    // setAttributeではタグ内にparent="***"と属性を生成する様で、画面に生成したエレメントを割り付けないので別途に処理します。
              options[key].appendChild(elm);
              break;
            default:
              elm.setAttribute(key, options[key]);
              break;
          }
        }
      });
      return elm;
    };

イベントに対応するeventListの中身が少ないのは、creapteElementの後で毎回addEventListenerするのも面倒なので、スクリプトの最初でクラス指定でイベント登録を済ませたかったから・・・

とは云え、クラス数×イベント数がいっぱいあったら、その分のdocument.addEventListenerは呼び出したくないので、

    const onLoadWindow = () => {
      //  コントロールのイベント処理を登録します
      const classEvents = [
        /* onload */
        { className:  'fileButton',         events:   { 'click':  onClickFileButton}},
      ...
      ];
      registEventListener(classEvents);
    };
    //  documenイベント処理
    var documentEvents = {};
    const documentEventListener = (event) => {
      // 処理
      var target = event.target || event.srcElement;
      Array.from(target.classList).map((className) => documentEvents[event.type][className])
        .filter((func) => func !== undefined)
        .forEach((func) => func(event));
    };
    //  指定クラスを持つHTMLエレメントにイベントを登録します
    const registEventListener = (classEvents) => {
      // classEvents配列数分ループ
      classEvents.forEach((classEvent) => {
        // イベント数分ループ
        Object.keys(classEvent.events).forEach((eventName) => {
          // クラスのイベントごとの処理
          if( documentEvents[eventName] === undefined ) {
            // documentEvents[eventName][classEvent.className]に代入できるように初期化
            documentEvents[eventName] = {};
            document.addEventListener(eventName, documentEventListener);
          }
          // ※同じクラス・同じイベントに対応する処理は1つだけ
          documentEvents[eventName][classEvent.className] = classEvent.events[eventName];
        });
      });
    };
    //  画面初期表示時の処理
    window.onload = onLoadWindow;

イベントごとに1回document.addEventListenerを呼び出し、イベント発生時に呼出された時にイベントターゲットのクラス名からイベントで処理したい関数をリストアップして呼び出す様にしてみた。

const classEvents =[
  {
    className:  'fileButton',
    events:   {
      'click':  onClickFileButton}
    },
  },
  ...
]

この書き方は思いついたイベントを書き殴るには都合がいいけど、documentEventsでは扱いにくいので

var documentEvents = [
  {
    'click': [
      {
        'fileButton': onClickFileButton,
        ...
      }
    ],
  ...
  }
]

に置き換え、documentEvents[‘click’][‘fileButton’]からonClickFileButtonが容易に取得できるようにしている。

で・・・全部済ませたかったが、

videoタグのendedイベントはdocument.addEventListenerで拾えなかったので

自作のcreateElementで作成したHTMLエレメントにaddEventListenerでendedイベントを登録できるようにした。(ワケ

気分的には楽になるけど、

なぜかソースは長くなる。(大笑い



[javascript]matchとか

HTMLで同じようなタグが多いとのidに1とか2とか数値を付けるけど、

この数値の部分だけ欲しい時がある。

parseInt(id.match(/\d+$/))

とするとidの末尾の方の数字を数値で得られる。

matchは配列を返すので [0] を付けてparseIntに渡した方がいいけど、parseIntは引数を文字列に変換する際に配列なら先頭のみを対象とするみたいでこのままでも支障は無い。

ファイルの拡張子ダケ欲しい時

fileName.match(/([.])(.*$)/)[2]

[1]の様に思えるけど

matchはキャプチャグループを使うと

[0]:全体

[1]:1つ目のキャプチャグループ

[2]:2つ目のキャプチャグループ

の様に返すので ピリオドの後の拡張子部分ダケ欲しい場合は[2]になる。



[AlmaLinux]DNF update失敗

AlmaLinux 8.9 (Midnight Oncilla)はcockpitでアップデートに失敗したけど

dnfコマンドで無事アップデートできたが

AlmaLinux 8.8 (Sapphire Caracal)はダメだった。

# dnf update
メタデータの期限切れの最終確認: 2:35:57 前の 2024年01月24日 23時23分56秒 に実施しました。
エラー:
 問題: libgs-9.27-11.el8.x86_64 と libgs-9.27-6.el8.x86_64 どちらもインストールできません
  - パッケージ libgs-devel-9.27-6.el8.x86_64 には libgs(x86-64) = 9.27-6.el8 が必要ですが、どのプロバイダーからもインストールできません
  - パッケージの最良アップデート候補をインストールできません libgs-9.27-6.el8.x86_64
  - インストール済パッケージの問題 libgs-devel-9.27-6.el8.x86_64
(競合するパッケージを置き換えるには、コマンドラインに '--allowerasing' を追加してみてください または、'--skip-broken' を追加して、インストール不可のパッケージをスキップしてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)

パッケージの依存関係が解消できなかった様だ。

あーメンドクサイ。

とりあえず、指示通りに

–allowerasingをコマンドに付ける事により依存関係で競合してるパッケージを削除を削除してみる。

$ dnf -y update --allowerasing
(・・・中略・・・)
依存関係のインストール:
 perl-Digest                                      noarch      1.17-395.el8                                                     baseos          27 k
 perl-Digest-MD5                                  x86_64      2.55-396.el8                                                     baseos          37 k
 perl-IO-Socket-SSL                               noarch      2.066-4.module_el8.6.0+2811+fe6c84b0                             appstream      297 k
 perl-Net-SSLeay                                  x86_64      1.88-2.module_el8.6.0+2811+fe6c84b0                              appstream      378 k
 perl-URI                                         noarch      1.73-3.el8                                                       baseos         116 k
 perl-libnet                                      noarch      3.11-3.el8                                                       baseos         121 k
削除中:
 kernel                                           x86_64      4.18.0-477.21.1.el8_8                                            @baseos          0
 kernel-core                                      x86_64      4.18.0-477.21.1.el8_8                                            @baseos         70 M
 kernel-modules                                   x86_64      4.18.0-477.21.1.el8_8                                            @baseos         25 M
 kernel-modules-extra                             x86_64      4.18.0-477.21.1.el8_8                                            @baseos        677 k
依存関係パッケージの削除:
 libgs-devel                                      x86_64      9.27-6.el8                                                       @System         39 k

トランザクションの概要
====================================================================================================================================================
インストール     10 パッケージ
アップグレード  499 パッケージ
削除              5 パッケージ

ダウンロードサイズの合計: 1.0 G
パッケージのダウンロード
(1/509): kernel-4.18.0-513.11.1.el8_9.x86_64.rpm                                                                    6.3 MB/s |  10 MB     00:01
(・・・中略・・・)
(509/509): webkit2gtk3-2.40.5-1.el8_9.1.alma.1.x86_64.rpm                                                           5.5 MB/s |  24 MB     00:04
----------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                 15 MB/s | 1.0 GB     01:11
AlmaLinux 8 - BaseOS                                                                                                4.9 MB/s | 5.0 kB     00:00
GPG 鍵 0xC21AD6EA をインポート中:
 Userid     : "AlmaLinux <packager@almalinux.org>"
 Fingerprint: E53C F5EF 91CE B0AD 1812 ECB8 51D6 647E C21A D6EA
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
鍵のインポートに成功しました
GPG 鍵 0xCED7258B をインポート中:
 Userid     : "AlmaLinux OS 8 <packager@almalinux.org>"
 Fingerprint: BC5E DDCA DF50 2C07 7F15 8288 2AE8 1E8A CED7 258B
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
鍵のインポートに成功しました
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  scriptletの実行中: kmod-kvdo-6.2.8.7-92.el8.x86_64                                                                                            1/1
  scriptletの実行中: java-1.8.0-openjdk-headless-1:1.8.0.402.b06-2.el8.x86_64                                                                   1/1
  準備             :                                                                                                                            1/1
  scriptletの実行中: libgcc-8.5.0-20.el8.alma.x86_64                                                                                            1/1
  アップグレード中 : libgcc-8.5.0-20.el8.alma.x86_64                                                                                         1/1013
(・・・中略・・・)
  アップグレード中 : pam-1.3.1-27.el8.x86_64                                                                                                24/1013
警告: /etc/pam.d/smartcard-auth は /etc/pam.d/smartcard-auth.rpmnew として作成されました。
(・・・中略・・・)
  scriptletの実行中: python36-3.6.8-38.module_el8.9.0+3700+efebe9fd.x86_64                                                                 182/1013
シンボリックリンク /usr/bin/pip3 -> /etc/alternatives/pip3 の作成に失敗しました。 /usr/bin/pip3 がすでに存在しており、シンボリックリンクファイルではありません。
(・・・中略・・・)
  scriptletの実行中: python3-wheel-1:0.31.1-3.module_el8.9.0+3700+efebe9fd.noarch                                                          429/1013
シンボリックリンク /usr/bin/pip3 -> /etc/alternatives/pip3 の作成に失敗しました。 /usr/bin/pip3 がすでに存在しており、シンボリックリンクファイルではありません。
(・・・中略・・・)
  整理             : libwbclient-4.17.5-3.el8_8.alma.x86_64                                                                                804/1013
警告: ファイル /usr/lib64/samba/wbclient/libwbclient.so.0.15: 削除に失敗しました: No such file or directory
警告: ファイル /usr/lib64/samba/wbclient/libwbclient.so.0: 削除に失敗しました: No such file or directory

と、沢山のパッケージがアップデート!

php3系でパイプの処理がちょっと怪しい。

libwbclient系で何か削除に失敗してる。

大丈夫かな・・・

  整理             : libgcc-8.5.0-18.el8.alma.x86_64                                                                                      1013/1013
  scriptletの実行中: libgcc-8.5.0-18.el8.alma.x86_64                                                                                      1013/1013
  scriptletの実行中: glibc-all-langpacks-2.28-236.el8.7.x86_64                                                                            1013/1013
  scriptletの実行中: ipa-selinux-4.9.12-9.module_el8.9.0+3688+465b6369.alma.1.noarch                                                      1013/1013
  scriptletの実行中: crypto-policies-scripts-20230731-1.git3177e06.el8.noarch                                                             1013/1013
  scriptletの実行中: nss-3.90.0-4.el8_9.x86_64                                                                                            1013/1013
  scriptletの実行中: gnome-session-3.28.1-21.el8.x86_64                                                                                   1013/1013
  scriptletの実行中: grub2-efi-x64-1:2.02-150.el8.alma.1.x86_64                                                                           1013/1013
  scriptletの実行中: kernel-core-4.18.0-513.11.1.el8_9.x86_64                                                                             1013/1013
  scriptletの実行中: kernel-modules-4.18.0-513.11.1.el8_9.x86_64                                                                          1013/1013
  scriptletの実行中: kmod-kvdo-6.2.8.7-92.el8.x86_64                                                                                      1013/1013
  scriptletの実行中: java-1.8.0-openjdk-headless-1:1.8.0.402.b06-2.el8.x86_64                                                             1013/1013
  scriptletの実行中: authselect-libs-1.2.6-2.el8.x86_64                                                                                   1013/1013
  scriptletの実行中: httpd-2.4.37-62.module_el8.9.0+3646+acd210d0.x86_64                                                                  1013/1013
  scriptletの実行中: libvirt-daemon-8.0.0-22.module_el8.9.0+3714+46544554.x86_64                                                          1013/1013
  scriptletの実行中: libvirt-daemon-driver-network-8.0.0-22.module_el8.9.0+3714+46544554.x86_64                                           1013/1013
  scriptletの実行中: libvirt-daemon-driver-interface-8.0.0-22.module_el8.9.0+3714+46544554.x86_64                                         1013/1013
  scriptletの実行中: libvirt-daemon-driver-nodedev-8.0.0-22.module_el8.9.0+3714+46544554.x86_64                                           1013/1013
  scriptletの実行中: libvirt-daemon-driver-nwfilter-8.0.0-22.module_el8.9.0+3714+46544554.x86_64                                          1013/1013
  scriptletの実行中: libvirt-daemon-driver-qemu-8.0.0-22.module_el8.9.0+3714+46544554.x86_64                                              1013/1013
  scriptletの実行中: libvirt-daemon-config-network-8.0.0-22.module_el8.9.0+3714+46544554.x86_64                                           1013/1013
  scriptletの実行中: libvirt-daemon-driver-secret-8.0.0-22.module_el8.9.0+3714+46544554.x86_64                                            1013/1013
  scriptletの実行中: libvirt-daemon-config-nwfilter-8.0.0-22.module_el8.9.0+3714+46544554.x86_64                                          1013/1013
  scriptletの実行中: libvirt-daemon-driver-storage-8.0.0-22.module_el8.9.0+3714+46544554.x86_64                                           1013/1013
  scriptletの実行中: sssd-common-2.9.1-4.el8_9.alma.1.x86_64                                                                              1013/1013
  scriptletの実行中: authselect-compat-1.2.6-2.el8.x86_64                                                                                 1013/1013
  scriptletの実行中: tuned-2.21.0-1.el8_9.noarch                                                                                          1013/1013
  scriptletの実行中: java-1.8.0-openjdk-1:1.8.0.402.b06-2.el8.x86_64                                                                      1013/1013
  scriptletの実行中: firefox-115.6.0-1.el8_9.alma.x86_64                                                                                  1013/1013
  scriptletの実行中: microcode_ctl-4:20230808-2.20231009.1.el8_9.x86_64                                                                   1013/1013
  scriptletの実行中: libgcc-8.5.0-18.el8.alma.x86_64                                                                                      1013/1013
  scriptletの実行中: glibc-common-2.28-236.el8.7.x86_64                                                                                   1013/1013
  scriptletの実行中: systemd-239-78.el8.x86_64                                                                                            1013/1013
  scriptletの実行中: systemd-udev-239-78.el8.x86_64                                                                                       1013/1013
  
  検証             : kernel-4.18.0-513.11.1.el8_9.x86_64                                                                                     1/1013  
...
  検証             : libgs-devel-9.27-6.el8.x86_64                                                                                        1013/1013

アップグレード済み:
  NetworkManager-1:1.40.16-13.el8_9.alma.1.x86_64
...
  zlib-devel-1.2.11-25.el8.x86_64
インストール済み:
  kernel-4.18.0-513.11.1.el8_9.x86_64                                        kernel-core-4.18.0-513.11.1.el8_9.x86_64
  kernel-modules-4.18.0-513.11.1.el8_9.x86_64                                kernel-modules-extra-4.18.0-513.11.1.el8_9.x86_64
  perl-Digest-1.17-395.el8.noarch                                            perl-Digest-MD5-2.55-396.el8.x86_64
  perl-IO-Socket-SSL-2.066-4.module_el8.6.0+2811+fe6c84b0.noarch             perl-Net-SSLeay-1.88-2.module_el8.6.0+2811+fe6c84b0.x86_64
  perl-URI-1.73-3.el8.noarch                                                 perl-libnet-3.11-3.el8.noarch
削除しました:
  kernel-4.18.0-477.21.1.el8_8.x86_64                   kernel-core-4.18.0-477.21.1.el8_8.x86_64     kernel-modules-4.18.0-477.21.1.el8_8.x86_64
  kernel-modules-extra-4.18.0-477.21.1.el8_8.x86_64     libgs-devel-9.27-6.el8.x86_64

完了しました!

リブートできたし、AlmaLinux 8.9 (Midnight Oncilla)にアップグレードできてるし、結果オーライ。



「Windows10]KB5034441が0x80070643エラー

詳しいことは詳しい記事にお任せして、

見よう見まねでコマンドラインから回復パーティションを拡張しようとしたが

やはり失敗。(予定通り

原因は回復パーティションを拡張するにはディスクに未割当な部分(つまり隙間)が必要だが、Windowsのインストール時にディスクに隙間無く領域を割り当てるから隙間が全くないせいだ。

(と思う。

とは云うものの、DiskPartコマンドでディスクのパーティションを無駄なく割り当てるのはとても難しい。(と思える。

と云う訳で、AOMEIさんのPartiton Assitant Standard(機能制限のある体験版)のお手軽なUIで解決。

(1)Cドライブと回復パーティションを画面右のリサイズ機能でそれぞれ容量を調整する。

今回の手元のPCでは、Cドライブ、回復パーティションの順にならんでいたので、

  • Cドライブのパーティションをリサイズで縮小して未割当な領域(隙間)を作る。
  • 回復パーティションをリサイズで1.5GB程度に拡張する。

な感じで調整。

逆順だったら移動すればいいのかな?

(2)画面左上の『適用』ボタンを押す。

(3)ポップアップしたダイアログで『続行』ボタンを押すと

※操作時の画像を取り忘れた!画像はイメージです。

自動的に再起動しPartiton Assitant がディスクのパーティション調整を終わるまでじっくり待つ。

※240GBのSSDでも最初のボリュームチェックが結構長く数秒で1%進むペースだが、調整自体は数分だった。

再起動後にPartiton Assitant で調整結果を確認。

WindowsUpdateも確認すると

エラーは出なく無くなったので無事終了したようだ。

しかし、ツールを使ってディスクをイジるのはリスクがあるので、Windows10 – 22H2 のインストールUSBディスクを作ってクリーンインストールした方が安心!

ps.

このPCはCPUが古いから11にアップデートできないので、どうせならWindows11をクリーンインストールでディスクのボリュームも割り当てしなおした方が良かったのかな?



[三国英雄の夜明け]10倍

ゲームの近況。

襄陽戦に勝利したから年度報酬もいつもより多めに9倍を目指しましょう!

とゲームのチャットに出ていたのでやってみた。

9倍になったので報酬が配布される午後11時まで暫くYoutobeを見て時間を潰す。

さて、

午後11時になったのでログインして年度報酬を貰らおうとしたら・・・

ん?10倍報酬になっていた。

適当に英雄を配置してからYoutobe見てたので

撃破数や損失数が少し増えたかな?

でも、中身はショボかった。

年度報酬は人数割りなので、

サーバー統合の度に減額されるのは知ってたけどね。

偶然10倍になるのは良いけど、10倍を目指すのは辞めといた方がいい。

ps.2024/1/13

と云ったのにもう一度10倍にならないか試してみたケド。

9倍止まり、損失数が400万に届かなかったせいかな?

損失増やすには食料がいっぱい必要で襄陽戦に負け他勢力からの報酬が無いから黄金探索の七星灯で米を大量にGETできないと無理かな。

なので報酬はいつもの通り。

ps.2024/1/14

日付変わってから確認すると10倍に変わってた。報酬貰うの早すぎたのか!

前の10倍だったスクリーンショットの時刻が、23:37。

昨日の9倍のスクリーンショットの時刻が、23:28。

今日の10倍のスクリーンショットの時刻が、0:43。

このゲームで23時になっても年度報酬は貰えず、再ログインが必要。

だから数回再ログインすると10倍になるかもしれない。

時刻かもしれないけど、9倍だったら10倍になるまでちょっと待つのはありかもしれない。

いや!もしかしたら・・・・

いっぱい建設したのに9倍は可哀そう・・・

もう報酬は貰ったよね!

表示だけ10倍にしてあげよう!

かもしれない。

ps.2024/1/15

21:07:37 獣霊の品質選択の画面のレイアウトが変わってた。午前中は只のチェックボックスだったのに?

と云うか、このゲームのサーバは負荷が重いっぽいので、

実はコレが正解で、今までは画像データが読み込めず、「とりあえず判るレイアウト」になったままだったのかもしれない?




top