マイブーム@技術と生活

仕事や生活に関わる技術的なことを記述します。

米国は、COVID-19 新型コロナウイルスの起源と推測される中国の武漢ウイルス研究所に資金を提供していた

COVID-19 新型コロナウイルの起源に関する機密情報が公開されました
https://www.youtube.com/watch?v=QsFZ98qBQkw

 

なぜ COVID-19 新型コロナウイルが武漢ウイルス研究所から流出したという情報が隠蔽されたのか
https://www.youtube.com/watch?v=l_sXcRyKBFM

 

[ALINA CHAN]
武漢ウイルス研究所では、SARS に類似したウイルスを人工的に加工し操作していました。


[Matt Ridley]
「いずれ真実が明らかになるでしょう」と私は楽観的に考えています。真実を知る人が複数いるため、この非常に重要な問題を永遠に隠し続けるのは難しいと思います。その一例として、George Gao が今年の4月にジュネーブを訪れたことを挙げます。彼は北京を拠点とする中国 CDC (疾病対策センター) の所長であり、2020年5月にウイルスの感染拡大について「市場は関係なく、起源でもない」との見解を示したため、私は彼に大変興味を持ちました。Alina と私はジュネーブで彼と会って長い間話しました。彼は多くの言葉を用いなかったものの、「市場起源は支持できない」と明言し、「研究所説を排除することはできない」とも述べました。これが中国高官からの発言だったら良いのにと思います。彼はその後すぐに BBC の Vanity Fair に出演し、同じような発言をしましたが、中国政権によって発言の一部を撤回させられたため、今後は西側メディアで彼の姿をあまり見かけないだろう思います。とはいえ、彼は非常にオープンで親しみやすい人物です。中国政権が今後数年間で、2019年に武漢で何が起こったかを知る、海外へ旅行するすべての科学者を監視し、秘密を話させないようにするのは容易ではないでしょう。

 

バイデン大統領がウクライナ軍の支援を発表 (BBCニュース)


https://www.youtube.com/watch?v=58bF0GUg1tc


日本の首相とウクライナ大統領が原爆死没者慰霊碑に献花しました。

70年前に原爆が投下された歴史的象徴で重要な場所を二人が並んで歩きました。

ゼレンスキー大統領は次の日程ではロシアから原油を輸入しているインド首相と会議を行います。

 

2023/3/10、COVID-19 の起源に関する情報について、機密指定を強制的に解除する法案が、全会一致で可決されました

英語の勉強のため。

(3/8)
米国の疾病管理予防センター (CDC) の前長官 (2018年トランプ大統領により指名)
レッドフィールド博士

最初のデータ分析によると、COVID-19 は、自然発生よりも、研究所から誤って漏洩したように思えました。

(3/11)
法案に対して、バイデン大統領は、まだ決めていない、と記者に回答した。
(両院を通過した法案は、署名を得るために、大統領に送付される。署名して法律にする、拒否権を行使する)

(3/7)

新しく公開されたEメールで、アンソニー・ファウチ博士が、武漢研究所から COVID-19 ウイルスが漏洩したという情報を信用できないものにするよう働きかけたことが明らかにされました。ファウチ博士は、研究者に対して、漏洩理論を反証することを目的とした2020年2月の論文を書くよう、促しました。

8週間後、ファウチ博士はホワイトハウスの記者会見で、自分自身が密接に関わっていたことは隠して、研究所漏洩理論が起こりえないことの証拠としてこの論文を引用しました。

SARS-CoV-2の近位起源」と題された論文は、公開される前にファウチ博士に2回送付されたと報じられています。

New emails reveal that Dr. Anthony Fauci worked to discredit claims that the COVID-19 virus leaked from a lab in Wuhan prompting researchers to write a Feb, 2020 paper aiming to "disprove" the leak theory.

Eight weeks later, Fauci cited the paper at a White House press conference as evidence that the lab leak theory was implausible without acknowledging his close ties to the study.

The paper, entitled "The Proximal Origin of SARS-CoV-2" was allegedly sent to Fauci twice before it was published.

The House Oversight subcommittee pblished Fauci's emails as part of their probe into the origins of the pandemic.

(2/26)
米国エネルギー省は、確信性は低いものの、COVID-19 の起源となるウイルスが武漢研究所から漏洩した可能性が最も高いとの結論を出しました。
A Lab Leak in China Most Likely Origin of Covid Pandemic, Energy Department Says - WSJ

(2/28)
FBIのクリストファー・レイ長官は、FBIがウイルスが武漢研究所から漏洩した可能性を長い間認識していたことをFOXニュースに語りました。
FBI Director Says Covid Likely Spread From Wuhan Lab

 

PSVR2

PSVR2 のレンズの洗浄のために買った、無水エタノール (¥1,738) とガーゼ (¥349) です。

所有ゲーム:
カヤック VR ミラージュ
Walking Dead Saints & Sinner 2

操作メモ (PSVR2) :
電源は前下
コントローラーは、×があるほうが右
前右下を押すと、パススルーモード
バンドの丸ボタンを押すと、引っ張って広くできる。回して締める
前右上を押して前に出したり
前左上のダイアルで両目の間隔を調節。最初の画面、設定、周辺機器、PlayStation VR2、

操作メモ (ゲーム) :
×ボタンでメニュー、〇ボタンでキャンセル、トリガーで決定
ツアーのとき右トリガーで速度が上がる (けど、あんまり早くならない)
目玉 - 南極大陸のシャチを近くで見る、ノルウェーの崖を下から見る

 

 

操作メモ (拳銃の弾切れ) :
X ボタンでリジェクト
左手で弾を取り出して、銃にセット
左手で銃身を引く

 

ホグワーツ・レガシー (PS5) 研究部

立てた PS5 のブルーレイディスクは左側が上

ブルーレイでも開始のダウンロードで1時間以上

さらに高解像テクスチャーインストール中

音声を英語化 (ダウンロード30分)、字幕は日本語化できない

名前に日本語が入力できない

 

魔法一覧

[左]下で回避
Lスティック 移動
Rスティック 見回り
[右]× でジャンプ
R2 基礎呪文、ポンと押す
[右]□ 調べる
[左]左でレベリオ
R2 + [右]△ ルーモス、杖を灯す
[右]△ プロテコ、△を押したままで反撃
Lスティック押下でダッシュ (L3)

 

ウェブ開発ランバッチ

ビルドインウェブサーバー

 

PHP

start php -S localhost:8000
"C:\Program Files\Google\Chrome\Application\chrome.exe" "http://localhost:8000/test.php"

 

Python 3.10 版

start python -m http.server 8000
"C:\Program Files\Google\Chrome\Application\chrome.exe" "http://localhost:8000/index.html"

 

Python 2.7 版

start python -m SimpleHTTPServer 8000
"C:\Program Files\Google\Chrome\Application\chrome.exe" "http://localhost:8000/"

 

□ クライアント側

curl "http://localhost:8000/test.php"

 

□ クライアント側 Visual Studio Community 2019 版

httprepl "https://petstore.swagger.io/"

 

□ index.html

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>
</TITLE>
<STYLE type="text/css">
<!--
BODY{
  background-image : url(image1.gif);
  background-repeat : no-repeat;
}
-->
</STYLE>
</HEAD>
<BODY>
<FONT size="-1">
<BR>
Hello World!<BR>
<BR>
</FONT>
</BODY>
</HTML>

 

 

スプラ3 研究部

技の向上を目指して、やることを書いて行きます。
愛用武器:N-ZAP85、キューバンボム、エナジースタンド

イカノボリ
 壁を登っているとき、Bボタンを長押し
 目が光ったら、Bボタンを離す
 壁の上までインクが塗られていること

・ジャンプ
 1.Xで地図を表示 2.左手の方向ボタンで仲間を選択 3.A
 (近くが塗られていないときはジャンプしない)

・対面は、前進撃ち・後進撃ち

エナジースタンド
 味方が集まっている所に投げる

有線接続にして、MTU を調査・設定
https://www.speedguide.net/analyzer.php
MTU = 1454
xx Logitec LAN-TXU2C は駄目
HORI NSW-004、¥3,270、自動 (IPadr、DNS)、で OK

 

 

Elden Ring 研究部

第三次世界大戦がロシアで始まっているところですが、世界的なブームとなりそうな、Elden Ring をやっていきます。勉強のために英語表示でやります。いろいろ検討した結果、5万円の GeForce RTX 3050 とゲームパッドを購入し、Core-i7 の自宅PCに組み込み (PCI Express 用電源変換 SATA ⇔ PCIe 8ピン、ケーブルが必要)、Steam 版を購入しました。ダウンロードは12時間くらい。Japan - Tokyo 接続。他のPCで Youtube を見ていると遅くなるので、寝ていました。

内容は都度更新します。日記は下が最新になります。

ELDEN RING WIKI

YouTube 検索用:
  elden ring funny #番号、elden ring marz #番号、elden ring julia part番号 パツキン好き? 

 

登場人物
Marika
Tarnished (自分?)
Melina
Renna (=Ranni?)

Diallos
 Lanya
 tomboy
 House Hoslow

Fia
D
Corhyn
Enia

Roderika

Alexander
 Iron Fist

Recusant Henricus

Kenneth Haight

Yura

Irina
 Edgar
 Lord Godrick

Patches
Rogier

Hyetta
Thops 
Rya
Iji
Napheli
Gurranq

Albus
 Latenna
 Albinauric
 Logo

Miquella
Nepheli (再掲)
Miriel

Blaidd
 Nokron
Seluvis
 Sellen
Iji (再掲)

Tanith
 Volcano Manor
 House Hoslow (再掲)
 Istvan
 Bernahl
 Radahn

Varre
 Luminary Mohg


 

 

場所
Lands Between
Caelid Wilds
Redmane Castle
Mistwood
Castle Morne
Raya Lucaria Academy
Altus Plateau
Liurnia of the Lakes
Grand Lift of Dectus

(未開)
Mt Gelmir
Miquella's Haligtree
Castle Sol

 

 

単語
sorcery (sorceries)
keepsake
shatter
perish
praise
stranded
graveyard
effigie
accord
maiden
bequest
steed

sapling
ripend

armament
affinity
stomp

replenished

shack
parry
shard
craven
chrysalid
cramp
incantation

melee
decoy
repudiator
fort
lavish
codger

twig
coy
vessel
siege
vengeance

mausoleum
craling
soulless
demigod

tranquility
ritual
communion
heresy
contrivance
slaughter

valour

 

 

理解ポイント
thou, thy, thee
canst
hath
lambkin, anoint

 

 

操作方法
A (下) ... ジャンプ
B (右) ... 回避
B (右) 長押し ... 走る
X (左) ... アイテム使用
Y (上) ... メッセージを読む
RB ... 攻撃または弓矢
LB ... 盾
RT ... 2番目の弓矢
LT ... 戦技 (先に着目する)、盾の戦技は使わないので外す、強さのために戦技の属性を標準にする
右スティック押込 ... 着目
左スティック押込 ... しゃがむ
Y を押しながら RB ... 両手持ち、強敵に対して強い

終了 ... START ボタン、SYSTEM、QUIT GAME、タイトルで QUIT GAME、Steam 上で STOP

死んだ後はその場所のルーンを回収する (回収前に、また死なないこと)

 

日記
(03/06)
WW3 の最中、Elden Ring を始める。設定は以下
Hero Type A  勇者 (男)
Bewitching Branch  誘惑の杖
Reedlander  葦の地顔 (ヨシまたはアシのチガオ)
初期値:(Vigor) 14, 9, 12, 16, 9, 7, 8, 11 (Arcane)
初期値:(Vigor) 20, 15, 18, 22, 15, 13, 14, 17 (Arcane) (6足したもの)

 

(03/08)
洞窟の宝箱を開けたら、まだレベルが低いのに、遠くの鉱山 (ケイリッドの右端?) に飛ばされた
Fast Travel はできず、転がりながら逃げて、リムグレイブまで戻った

(03/09)
家のブレーカー (部屋で 20A) が落ちた。すぐには直らないので、ホテルで1泊
Elden Ring をやっている最中ではなかったのだが (終了して休憩していた、電気ストーブを点けていた)

(03/25)
ワープ
Dragon-Burnt Ruins→ Sellia Crystal Tunnel
Third Vhurch of Marika の裏 → Greyoll's Dragonbarrow
Laskyar Ruins → Liurnia of the Lakes (South Raya Lucaria Gate)
South Raya Lucaria Gate → Main Academy Gate
Debate Parlor → Church of Vows
Limgrave Tower Bridge → Divine Tower of Limgrave
Siofra River Grace 2番目近く → 門前
Siofra River 倒れた柱の上 → 2階
Impassable Greatbridge→ Redmane Castle

(03/28)
アゼルバイジャン合意違反、日本を含むロシア周囲の国々が戦争参加で、ロシアがきれて核爆弾を使ったら、100万人くらい死ぬかもしれませんが、Elden Ring をやっていきます
まだ序盤の範囲なのに、敵が強すぎて、心が折れそう。ザリガニは克服、クマ、ネズミ、ヨークシャーテリア、に殺される

(04/06)
弓矢づくり
Lake (Laskyar Ruins) のホタルを捕まえる
Storm (Stormhill Shack) のひつじを殺す

(04/07)
Fort Gael North のルーンの稼ぎ方
夜まで過ごす
馬に乗る
そこの2段の崖を登り、壁まで走る
松明の騎士がUターンするまで待つ
上からの視点にしながら、走って近づいて、崖の近くで馬を降りる
炎の丸に向かって崖から落ちる。離れて直後くらいに RB ボタン
致命傷を与える
着地後にジャンプで逃げる
馬に乗る
大きく右回りをして戻って、落とし物を確認
GRACE に戻って休む

(04/11)
Magma Wyrm's Scalesword (溶岩、大曲剣) で、Crucible Knight (Stormhill Evergaol) を撃破
Rampart Tower 最下層の Lesser Crucible Knight も撃破
Buckler Parry は2回が限界で断念した

(04/19)
ツリーガード (Tree Sentinel) 対策
 馬に乗って、剣と反対側の馬のおしりを狙う

竜対策
 斬った後、逃げて、崖から落ちたり、岩に隠れたり
強敵対策
 馬のときは雷か炎を付加した大剣で
 歩いているときは溶岩の大曲剣で。装備を中量にすること。溶岩、逃げる、回復、の繰り返し
 遺灰は、父、兄、鳥、クラゲ、補欠、の内どれか合ったもので。早く死んだら変更

(04/22)
残課題
 Caelid Highway South のド
 × Rampartside Path のド 4/22 完
 × Church of Vows のキ 4/24 完
 Ninth Mt. Gelmir Campsite のボ
 Auriza Hero's Grave のダ
 × Golden Lineage Evergaol のボ 4/29 完、溶岩曲、盾、聖杯 10-1
 × Auriza Side Tomb のボ 4/25 完

(05/15)
検索キーワードと対策方法

エルデンリング 侵入 できない
Windwos 10 NAT タイプ変更 バッファロー

ブラウザで 192.168.***.1 を表示
root、password 空欄
ゲーム&アプリ
DMZ
* WEB 設定を行っているパソコンの IP アドレス
を入力。設定ボタン押下

エルデンリングで、導きの始まりで、1分未満くらいで、侵入できた

(05/24)
HDD が故障。電源は入り、何か動く音がするが、
BIOS から認識しない。Windows 環境を再構築した
故障した HDD からのファイル取り出しで、データ復旧サービス会社に
お願いして、十数万円
新しい Windows 10 をインストール、Steam をインストール、同じ
ユーザーでログイン、Elden Ring を再ダウンロード、開始するところ
まで確認
復旧で取り出した次のフォルダ・ファイルを上書き
C:\Users\(UserName)\AppData\Roaming\EldenRing\GraphicsConfig.xml
C:\Users\(UserName)\AppData\Roaming\EldenRing\(Number)\
ER0000.sl2
ER0000.sl2.bak
steam_autoclould.vdf
無事にコンティニューで再開できた 
 

 

ロシアがウクライナに侵攻したニュース

英語の勉強のため。2/27 は TOEIC テストです。

下が最新です。

 

(02/22 11:59)
ロシア軍が平和維持のために、ドネツィク州 (Donetsk) とルハーンシク州 (Luhansk) に侵攻。ウクライナの首都はキエフ (Kyiv)。大統領はぜレンスキー (Zelenskyy)

ドイツは「ノルド・ストリーム2 (Nord Stream 2)」の施設を保留にした。ノルド・ストリームは、バルト海底を経由してロシア・ドイツ間をつないだ天然ガスのパイプライン

ミンスク合意 (ミンスク議定書、ミンスク2):2014年、2015年のロシアとウクライナの紛争の停戦合意。ミンスク2は欧州安全保障協力機構 (OSCE) の監督の下、ウクライナ、ロシア、フランス、ドイツがこの協定に署名

単語
provocation、pretext、imminent、carckdown、
Duma、ドゥーマ、ロシアにおける議会

 

 

(02/23 12:58)

UN
https://www.youtube.com/watch?v=Xw1ltchr-4Q
(1:13)ドネツィク州とルハーンシク州を独立するとするロシアの決定は、ウクライナの領土保全 (territorial integrity) と主権 (sovereignty) を侵害している

Canada
https://www.youtube.com/watch?v=lgB6iqOq4Jw
(0:35)ロシアの行為は、国際法国連憲章に従う義務の、違反である。カナダは、ウクライナの主権と領土保全を侵害したロシアの軍事行動を非難する。これはロシアのさならる侵攻を示し、受け入れられない。昨日、プーチンは、不明瞭で危険性を含んだ誤情報を発表した。ロシアの傲慢な挑発は、世界の安全と平和への脅迫である

 

(02/23 20:16)

DW (ドイツの公共放送、国際放送事業体、ドイチェ・ヴェレ)
https://www.youtube.com/watch?v=g-tSy7VxK9c
(1:00) ウクライナの現地住民、地下の貯蔵室に隠れているが、夜は寒い。村の中心部で砲撃 (shell) があった。幸運にも怪我人は出ていない。ガスと電気は被害で止まっている。数年前の危機でもこれほどではなかった。砲兵隊の陣地から 15km 離れている。何も考えられない。何もできない。次に何が起こるか分からない

 

我が (税金を払っているので) 日本の対応もニュースになってます
CRUX
https://www.youtube.com/watch?v=UF_Q-1ROHeE
米国、カナダ、オーストラリア、日本が、ロシアに制裁
岸田首相:日本でのロシア債権の扱い禁止、渡航ビザの禁止、複数ロシア人の個人資産の凍結。東京ではさらなる制裁が必要か検討している

 

(02/24 14:05)
NBC News、Live
https://www.youtube.com/watch?v=gMC4r9Or-PA
キエフ現地時間 7:05、サイレンが鳴ってます
車が渋滞で郊外に逃げています
(14:14) マリウポリ (Mariupol、ウクライナ東部、ドネツィク州) で爆発音
(14:18) キエフでサイレンが鳴り続いています

(03/12)
Sky News、Live
https://www.youtube.com/watch?v=9Auq9mYxFEE
ロシアが、米国がウクライナ国内で生物兵器を準備していたと、国連安全保理に訴え
WHO はウクライナ政府と協力していたが、生物兵器は見ていない
英国と米国とウクライナは、ロシア自身が生物兵器を使う理由にするつもりだと主張

(03/13)
Yahoo ニュース
The Telegaph
EUが英国、カナダ、米国と協調して取った外交的決定は、SWIFTの金融メッセージサービスから特定の銀行を除くことでこの危機を終わらせようとするものだ」

(03/16)
Global News (Canada)
https://www.youtube.com/watch?v=3Ax1bjgNaSk
カナダの議会にゼレンスキー大統領がオンラインで参加
拍手喝采
デモクラシーのヒーロー、チャンピオン、友達、とのこと
カナダはウクライナ人を受け入れて保護することを誓います
髭面が議会に奥さんと赤ちゃんを連れて来て演説。赤ちゃん泣きまくり
おばちゃんが泣きながら戦争停止を訴え
カナダは英語とフランス語が公用語で同時演説
ゼレ) 毎朝4時に空爆が行われ、子供が何が起きているのと聞いてくるのを想像して見てください
Slavokra Any, Slava, ?

(04/05)
ロシアによるジェノサイド
Ukraine Motyzhyn (link1)
Ukraine Bucha (link1) (link2)
Ukraine Stakhovsky
Ukraine Irpin
Ukraine Borodianka
Ukraine Kramatorsk rail station
Ukraine Makariv
Amnesty International, 際非政府組織 (INGO), イギリス・ロンドン

(04/13)
Bloomberg: Top Panel to Rule if Russia Ruble Payouts Trigger Default Swaps
ロシア国債 5兆円 $40 billion of the country’s debt
The Credit Derivatives Determinations Committee will meet on Wednesday
 
 

 

 

テンプレート自分用 (JavaScript)

HTML、JavaScriptデバッグは、Google Chrome で開いて、右上ボタン、その他のツール、デベロッパー ツール、を使います (Console を表示)


(2022/01/28 19:20 更新: Show_CustomControl.html の class の宣言を、別ファイル (js) に分離)
(2022/01/28 23:00 更新: init(str, sub) に変更。load() から呼び出し。初期値を、DB を読み込んだ後など、に書ける)
(2022/02/04 18:45 更新:サーバー側のアドレスを拡張子なしに変更。RewriteRule を使う)
(2022/02/16 10:45 更新:フォルダ名やファイル名を変更)



f:id:sato7411:20220128100816p:plain:w300


f:id:sato7411:20220128100831p:plain:w300



Show_CustomControl.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
    <title>JavaScript Promise, resolve and then Sample</title>
    <script>

      // var resource = { // debug
      //   "category": "プログラマ",
      //   "subcategory": "COBOL"
      // };


      function makeRequest() {

        //
        // Get Parent Select
        //
        var select = document.getElementById('category');
        var idx = select.selectedIndex;
        var str = select.options[idx].value;
        //
        //

        chbcapi.request({
          'path': 'https://kamimatsu-db.com/Api/CustomControl/ChangeChild',
          'method': 'POST',
          'body': JSON.stringify( {'category': str} ) // JSON.stringify(resource)
        }).then(function(resp) {
          writeResponse(resp.result);
        });
      }

      
      function initChild(str, sub) {

        //
        // Initial Value
        //
        var select = document.getElementById('category');
        for (var i=0; i<select.options.length; i++) {
          if (select.options[i].value == str) {
            break;
          }
        }
        select.selectedIndex = i;
        //
        //

        chbcapi.request({
          'path': 'https://kamimatsu-db.com/Api/CustomControl/ChangeChild',
          'method': 'POST',
          'body': JSON.stringify( {'category': str, 'subcategory': sub} ) // JSON.stringify(resource)
        }).then(function(resp) {
          writeResponse(resp.result);
        });
      }


      function writeResponse(response) {
        console.log(response);

        //
        // Change Child Select
        //
        var select = document.getElementById('subcategory');
        while(select.firstChild) {
          select.removeChild(select.firstChild); 
        }
        for (const elem of response) {
          var option = document.createElement('option');
          option.value = elem.value;
          option.text = elem.text;
          if (elem.selected) {
            option.selected = true;
          }
          select.appendChild(option);        
        }
        if (response.length > 0) {
          select.disabled = false;
        } else {
          select.disabled = true;
          var option = document.createElement('option');
          option.value = " ";
          option.text = " ";
          option.selected = true;
          select.appendChild(option);        
        }
        //
        //
      }

    </script>
    <script async defer src="https://kamimatsu-db.com/Api/Js/ChbcApi.js">
    </script>
  </head>


  <body>
    <!-- <button id="rest" onclick="makeRequest();">Make Request</button>
    <div id="info"></div> debug -->
    <select id="category" name="category" size="1" onchange="makeRequest();" style="width: 170px;">
      <option value="選んで下さい">選んで下さい</option>
      <option value="先生">先生</option>
      <option value="プログラマ">プログラマ</option>
      <option value="デザイナー">デザイナー</option>
      <option value="マッサージ">マッサージ</option>
      <option value="カウンセル">カウンセル</option>
      <option value="その他">その他(コメントへ記入)</option>
    </select>&nbsp;&nbsp;
    <select id="subcategory" name='subcategory' size="1" style='width:170px;' disabled>
      <option value=" "> </option>
    </select><br>
    <script>
      function load() {
        initChild('プログラマ', 'COBOL');
      }
      window.onload=load;
    </script>
  </body>
</html>

 
 
ChbcApi.js

class ChbcApi {
  request(data) {
    console.log(data);
    return new Promise(function(resolve) {

      fetch(data.path, data)
        .then(function(res) {
          return( res.json() );
        })
        .then(function(json) {
          console.log(json);
          if ( Array.isArray(json) ) {
            var resp = { result: json };
          } else {
            var resp = { result: JSON.parse(json) };
          }
          resolve(resp);
        });

    });          
  }
}
const chbcapi = new ChbcApi();

 
 
 
サーバーにアップロードする PHP ファイルです。POST 経由で、JSON のパラメータを受け取って、JSON で結果を返します

アドレス https://kamimatsu-db.com/Api/CustomControl/ChangeChild
パラメータ POST 又はアドレス
リクエスト本文 JSON
応答 JSON


ChangeChild.php

<?php
header("Content-Type: application/json; charset=utf-8");
header("Access-Control-Allow-Origin: *");
$json = file_get_contents('php://input');
$data = json_decode($json, true);


//
// Change Child
//

function opt($str, $sel)
{
    return array( 'value' => $str, 'text' => $str, 'selected' => ($str == $sel) );
}

$res = array();
$sel = $data['subcategory'];
switch ($data['category']) {
    case '先生':
        $res[0] = opt("選んで下さい", $sel);
        $res[1] = opt("英語", $sel);
        $res[2] = opt("数学", $sel);
        $res[3] = opt("物理", $sel);
        $res[4] = opt("小学生", $sel);
        $res[5] = opt("パソコン", $sel);
        $res[6] = opt("その他(コメントへ記入)", $sel);
        break;

    case 'プログラマ':
        $res[0] = opt("選んで下さい", $sel);
        $res[1] = opt("C#", $sel);
        $res[2] = opt("VB.NET", $sel);
        $res[3] = opt("JAVA", $sel);
        $res[4] = opt("Objective-C", $sel);
        $res[5] = opt("C/C++", $sel);
        $res[6] = opt("COBOL", $sel);
        $res[7] = opt("Python", $sel);
        $res[8] = opt("その他(コメントへ記入)", $sel);
        break;

    case 'マッサージ':
        $res[0] = opt("選んで下さい", $sel);
        $res[1] = opt("指圧", $sel);
        $res[2] = opt("リラクゼーション", $sel);
        $res[3] = opt("タイ古式", $sel);
        $res[4] = opt("その他(コメントへ記入)", $sel);
        break;

    case 'カウンセル':
        $res[0] = opt("選んで下さい", $sel);
        $res[1] = opt("経営", $sel);
        $res[2] = opt("恋愛", $sel);
        $res[3] = opt("その他(コメントへ記入)", $sel);
        break;

    default:
        break;
}

// $res = ["選んで下さい", "経営", "恋愛", "その他(コメントへ記入)"]; // debug
// $res[0] = ['value'=>'選んで下さい', 'text'=>'選んで下さい', 'selected'=>false]; // debug
// $res[1] = ['value'=>'経営', 'text'=>'経営', 'selected'=>false]; // debug
// $res[2] = ['value'=>'恋愛', 'text'=>'恋愛', 'selected'=>true]; // debug
// $res[3] = ['value'=>'その他(コメントへ記入)', 'text'=>'その他(コメントへ記入)', 'selected'=>false]; // debug

//
//


echo(json_encode($res));
?>

 
 
 
JavaScript の Promise、resolve、then の動作を確認したプログラムです

「function(resolve) {」は「(resolve) => {」に置き換えれます。「.then(function(resp) {」も同様に「.then((resp) => {」。request の data は渡されますが使っていません。resolve の resp が戻されて .then(function の resp (異なる名前でも良い) に渡されます

処理が失敗した時に異なる処理をしたい場合は、「function(resolve, reject) {」または「(resolve, reject) => {」 を作って、reject で error を戻して、「.catch(function(error) {」または「.catch((error) => {」で処理します

JavaScript では 「resp = { result: { name: "Ronaldo", team: "Juventus"} }」は resp.result や response.name のようにアクセスできます (ここで response = resp.result)。resp はオブジェクトと呼ばれています。PHP の配列とは扱いが異なりますね

var と const はスコープにだけ注意して適当に使っています。PHP の場合だと外で作った変数が function の内側に渡されません (必要ならば function の内側で global 宣言する)

request やその内側の fetch はマルチスレッドで動作しています。makeRequest(); の直後に <div id="info"> の内容を見ても、結果は更新されていません。続きの処理が必要ならば writeResponse() の中に書かなければなりません (または、return new Promise を書く)

※ promise.then の呼び出しは promise を返す



test.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
    <title>JavaScript Promise, resolve and then Sample</title>
    <script>

      var resource = {
        "summary": "Appointment",
        "location": "Somewhere",
        "start": {
          "dateTime": "2022-01-16T10:00:00.000-07:00"
        },
        "end": {
          "dateTime": "2022-01-16T10:25:00.000-07:00"
        },
        "visibility": "public"
      };

      function makeRequest() {
        chbcapi.request({
          'path': '/calendar/v3/calendars/primary/events',
          'method': 'POST',
          'body': resource
        }).then(function(resp) {
          writeResponse(resp.result);
        });
      }

      function writeResponse(response) {
        console.log(response);
        var divinfo = document.getElementById('info');        
        divinfo.append('name: ' + response.name + ', team: ' + response.team);
      }

      class ChbcApi {
        request(data) {
          console.log(data);
          return new Promise(function(resolve) {
            const resp = { result: { name: "Ronaldo", team: "Juventus"} };
            resolve(resp);
          });
        }
      }
      const chbcapi = new ChbcApi();

</script>
  </head>
  <body>
    <button id="rest" onclick="makeRequest();">Make Request</button>
    <div id="info"></div>
  </body>
</html>

 
 
 
簡単な fetch の例です。return や resolve を書かなければ、値を返さず、処理のみ行います (2番目の then)。fetch のマニュアルはこちら


<script>
  fetch('https://ipinfo.io?callback')
    .then(function(res) {
      return( res.json() );
    })
    .then(function(json) { 
       console.log(json.ip);
       var addr = document.getElementById("addr");
       addr.innerHTML = json.ip;
    });
</script>
<span id="addr"></span><br>

 
 
 
Promise 有りと Promise 無しを比較した例です。Promise 無しは先に "by initChild" が表示されて、3秒後に "by setTimeout" が表示されます。Promise 有りは両方ほぼ同時に表示されます


<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
    <title>JavaScript Promise, resolve and then Sample</title>
    <script>

      function makeRequest() {
        return new Promise(function(resolve) { // Promise 無し時はこの行をコメントアウト

          setTimeout(function() {
            console.log("by setTimeout");
            var divinfo = document.getElementById('info');
            divinfo.append("by setTimeout");
            resolve(); // Promise 無し時はこの行をコメントアウト
          }, 3000);

        }); // Promise 無し時はこの行をコメントアウト
      }

      function initChild() {
        console.log("by initChild");
        var divdata = document.getElementById('data');
        divdata.append("by initChild");
      }

      function load() {

        // Promise 有り
        makeRequest()
        .then(function() {
          initChild();
        });

        // Promise 無し
        // makeRequest();
        // initChild();

      }
      window.onload=load;
    </script>
  </head>
  <body>
    <div id="info"></div>
    <div id="data"></div>
  </body>
</html>

 
 
 
以上、