コンピュータ38ページ目の日記です

目次

前のページ
2021-10-10 ネットワークHUB故障
2021-11-25 グノーシア
2021-11-30 i-mode終了
2021-12-22 Windows 11
2022-01-11 続・グノーシア
2022-01-27 node.jsの2つのイベント処理
2022-02-27 BABA IS YOU
2022-04-04 停電
2022-04-05 代入の評価順
2022-06-14 CAPCOM
2022-07-23 プリンタ購入
2022-08-19 vue-tweet-embed で表示していた Tweet が崩れる
2022-09-26 スプラ3のフェス
2022-11-15 X68000 Z
2022-12-06 iPhone の Javascript で Howler.js を使う
2022-12-12 Windows 11 の 22H2 アップデートでネットがつながらなくなる
2022-12-26 SSL 証明書期限切れ
2022-12-27 ONU 不調の顛末
2023-01-02 新しい年に…
2023-03-07 2つのタブレット
次のページ
ネットワークHUB故障  2021-10-10 11:16:29  コンピュータ

▲目次へ ⇒この記事のURL

昨夜のこと。

子どもたちが、「ネットに繋がらなくなった」と報告してきた。


自分でも確かめてみると、WiFi に接続できない。


こういうことは、2ヶ月に一度程度の頻度で起きる。

大抵はネットワークの上流で何かあったときで、5分も経てば自然に回復する。


ただ、なにか違う気がした。

いつもなら、「インターネットに接続できない」であり、「WiFiに接続できない」ではないのだ。


ここで、我が家のネットワーク構成なのだが、WiFi ステーションが2基ある。

1基では家の中すべてをカバーしきれないためだ。

居間と仕事部屋においてあり、これで家全体をカバーできる。


このときは居間にいて、自動的に電波の強い居間のステーションが選ばれていたのだけど、あえて仕事場のステーションに繋いでみる。

普通に繋がった。仕事場のステーションは外部につながるルーターも兼ねており、接続状況を確認できる。

問題なく外部に接続していた。接続できないのは、上流の問題ではなく、家の中の問題だ。


居間のステーションをリセットしてみるも、回復しない。

WiFi の電波は出ていて接続を試みるも、「DHCPに接続できない」と言われるのだ。


あらためて WiFi ステーションを確認するが、インジケーター LED の点灯が少ない気がする。

もっとも、普段それほど気にしていないので、普通の点灯状態を覚えていない。


まぁ、おそらくは WiFi ステーションが家のネットワークから切り離されている。

DHCP は家の中に1台しかないので、ネットワークから切り離されて見えなくなっているのだろう。


困ったな、ステーション壊れたかな…と思いつつ、ネットワーク全体の確認を行うため仕事部屋に向かう。

家の中の機器のほとんどは、仕事場に集約してあるから。


で、ひと目見た瞬間に原因がわかった。

家のネットワークの分岐の中心である HUB が、電源ランプが点滅し、すべての接続ランプが消えた状態だった。故障したのは HUB らしい。


先に書いたように、外部に接続するルーターを兼用している WiFi ステーションは、当然 HUB を経由せず外に接続できる。

そのため、仕事部屋の WiFi に接続すれば問題なくインターネットに接続できていたわけだ。


このステーションは、4ポートしかないが、HUB 機能を内蔵している。

そのため、外部公開しているサーバーも、このステーションに直接接続してある。

なので、外部公開サーバーの稼働はつづいていた、はず。




壊れた HUB は8ポートだったが、実際には使われていないケーブルも繋がっていた。

家の中の主要な部屋に LAN ポートを用意しているが、現在は WiFi を使うことが増えたため使っていない部屋が多いのだ。


現在使っていない 5ポートの HUB があったので、本当に必要な線を厳選して繋ぐことにした。

…以前は線に接続先の部屋を書いた紙をつけていたはずなのだが、いつの間にかなくなっている。適当に繋いで、接続ランプがつかないやつは使っていない部屋だろう。


刺しては「あたり」「はずれ」と判定する、黒ひげ危機一発のような状況。

幸い、5ポートで丁度足りた。


とはいえ、余裕がないのも困りそうなので、早速8ポートの HUB を Amazon に注文。

以前は 8ポートは高かったのだけど、いますごく安くなっているのね。


十分な機能のものが、1700円だった。

壊れたものは…多分10年以上使っていたと思うのだけど、1万円以上した気がする。


▲目次へ ⇒この記事のURL

別年同日の日記

04年 大型の勢力

16年 CentOS 7 上の ndjbdns の落とし穴

17年 オーラ写真倶楽部

23年 3連休


申し訳ありませんが、現在意見投稿をできない状態にしています

グノーシア  2021-11-25 18:25:39  コンピュータ

▲目次へ ⇒この記事のURL

Nintendo Switch のゲーム、グノーシアを購入した。


発売したのは昨年の4月、そもそもこれは移植版で、最初に作られた PS Vita 版は2019年発売だそうだ。


しかし、数日前までこの作品の存在を知らなかった。

たまたま読んだ記事で紹介しており、「すごく面白そう」と思って早速購入、遊んでみたのだった。


購入は火曜日、勤労感謝の日だったのだが、その日に2時間ほど遊んだ後、仕事が忙しくて遊べていない。

しかし、子供たちが Switch に新しいゲームが入っていることに気づき、遊び始めて熱中している。


1人用のゲームなのだけど、周りで見ている人も参加できるようなものなので、他人のプレイでも口を出してしまうのだ。




先に書いたように古い作品なので、レビューは検索すればいくらでも出てくる。

だから詳細は書かないでおこう。そもそも、先に書いたように2時間しか遊んでいないので深い話は書けないし。


ゲーム内容は人狼だ。

あの「心理戦」を、コンピューター相手に行う。


人狼とか、人狼をモチーフにしたゲームはそこそこ遊んだことがあるが、嫌いじゃないけど面倒くさい、と思ってしまう。

心理戦だから人数が必要だし、人数が増えると時間がかかるし、長時間の心理戦は消耗する。



で、グノーシアはコンピューター相手の一人用ゲームなので、自分のペースで進められる。

1ゲーム 15分あれば終わるし、終わったらすぐに次のゲームが始まるのでテンポよく遊べる。


そして、1ゲーム終わるたびに、このゲームの世界の断片情報が、少しづつわかってくる。

ゲーム自体はランダム要素が強いのだが、ストーリーがあるのだ。


いや、ストーリーというよりも、一時期流行した言い回しだと「ナラティブ」ってやつだな。

語るのではなく、感じさせる世界観。




先にランダム要素が強いと書いたが、運ゲーという意味ではない。

毎回配役がランダムに決まる、というだけで、その後の心理戦は妥協がないのだ。


コンピューター相手なのに、心理戦がリアルに感じられる。

というのも、インタビュー記事などを読むと、内部に膨大なパラメーターを計算しているらしいのだ。


キャラクター間の仲の良さがあり、それとは別に誰がグノーシア(人狼に相当)か、という疑念の値がある。

また、議論で発言しすぎれば目立ち、黙り過ぎても目立つ。


仲が悪ければそれだけで疑われるし、グノーシアだと思われれば当然疑われるし、目立っても疑われる。


ここに、キャラクターごとの強烈な個性が加わる。

嘘を見抜くのがうまい人、嘘をつくのがうまい人、人を扇動するのがうまい人、理性的に導くのがうまい人。


人間相手の人狼だと、人間関係がこんがらがってくることもあるだろう。

グノーシアでは、だれがどんなことを言った、という簡単なログが記録され、いつでも参照できる。

(詳細な言葉も、直近のものは記録されている)


これらを勘案し、考え始めると…

コンピューターのプログラムにすぎない「キャラクター」が、本当に心を持っているかのように活き活きしてくる。

心理戦がリアルに感じられる。



でも、先に書いたように、相手はコンピューターだ。

自分のペースで話を進められる。

じっくり悩んでもいいし、直感で決めてもいい。


先に書いたように、テンポよくゲームが進む。

人間相手の面倒くささは一切ない。




作った作者がゲームを楽しめる、というのが開発の指針としてあったそうだ。

だから、どのようにゲームが進むかは、作者すら想像つかない。


作者すら考えないような神がかった展開になって驚くこともあった、とインタビューで答えている。


ランダムに話を進めながらも整合性を保てるように、シナリオを管理するプログラムも分散処理で、100以上のロジックが動いているという。


僕もゲーム業界にいた人間として、よくぞそんな方法でバグも出さず…

と思ってしまうが、バグは出てもいいんだそうだ。


全く支離滅裂な話の展開になっても、そういうものだ、という世界観が設定してあるらしい。

まだそんなにやり込んでいないから、それがどういうことかわからないけど。




まだあまり遊んでいないが、子供たちが遊んでいるのは少し見ている。

これだけでも非常に楽しい作品だ。


以前も書いたが、僕はゲームレビューを書くときは、人に勧められることを基準にしている。

だから、普通は2時間程度あそんだだけではレビューを書かないのだが、もう勧めたくてしょうがないのだ。


この作品は間違いなくお勧め。



▲目次へ ⇒この記事のURL

関連ページ

続・グノーシア【日記 22/01/11】

別年同日の日記

01年 11/24

02年 オムライスとカレー

07年 保育園イベントいろいろ

10年 ディズニーランド公式ホテル

11年 しつこくデフラグ話

13年 ピエール・ベジェの命日(1999)

16年 マジカル頭脳パワー!!


申し訳ありませんが、現在意見投稿をできない状態にしています

i-mode終了  2021-11-30 17:56:02  コンピュータ

▲目次へ ⇒この記事のURL

本日をもって i-mode のサービス終了、らしい。

ついさっきネットのニュースで知った


もっとも、まだ継続していたのか…という気持ちの方が強い。


仕事上の秘密事項もあってあまり多くは語れないが、i-mode は人気が出る前から、公式サイトの構築などをさせていただいた。

フリーのプログラマーになって、最初の「儲かった仕事」だった。

(それ以前は食い扶持を稼ぐのに必死)



上にリンクした記事でも、ピークが 2010年ごろと書いてある。

僕もその頃までは、i-mode …僕の場合は EZweb の方が仕事の中心だったのだけど、携帯コンテンツを作っていたように思う。


2018年に、これらの携帯コンテンツから手を引いた

メンテナンスコストの方が、儲けより大きくなったためだ。


それから3年ほどで i-mode 自体が終了したことになる。

一つの時代が終わった気がする。



▲目次へ ⇒この記事のURL

別年同日の日記

07年 成長記録

09年 fon 導入

17年 モノポリー


申し訳ありませんが、現在意見投稿をできない状態にしています

Windows 11  2021-12-22 17:48:30  コンピュータ

▲目次へ ⇒この記事のURL

メインマシンが、Windows 11 にアップグレード可能になったので入れてみた。


アップグレード可能、という通知が来たのは先週の末。

週末に入れてみようかな、と思ったけど、仕事にも使っているマシンだし、年末にするか…と保留した。



今週頭、通常の Windows Update で再起動を求められたので再起動。

そしたら起動後の最初の画面で、「Windows 11 をお勧めします」って言われた。



拒否するか取得するかの2択。

今から仕事でこのマシン使うんだよ。とりあえずは拒否。


すると、今はまだ作業続けられるよ、ダウンロードして後で入れればいいよ、って言われる。

じゃぁ、入手だけしておくか。




確かに、とりあえず作業は続けられた。

でも、ファイルダウンロードしてから2日も放置していたら、「アップデートのため再起動しましょう」とうるさい。


まぁ、アップデートしてもいいか。

昼休みでご飯食べる間に再起動。



戻ってきたら、無事 Windows 11 にかわっていた。




感想。


ひとまず、何も変わらない。



もちろん、いろいろと変わっているのよ。

スタートメニューは一新されたし、タスクバーも一新された。


でも、スタートメニューって、僕はそれほど使わない。

だから、変わってもあまり影響ない。



タスクバーは、Quick Launch を使えなくなったのが地味に痛い。

Quick Launch は Windows 95 から親しんできた。


…でも、今調べたら XP ですでに消えていたのね。

消えても、設定で表示できた。



Win 7 の時にいよいよ消えた。設定からも表示方法が消えた。

でも、ちゃんと設定する方法があって、Win 10 でも使えていた。


それがいよいよ Win 11 で完全消滅した。


じゃぁどうしたかというと、Win 7 で消えたときに、ちゃんと代替方法が用意されたから消えたのね。

「タスクバーにピン止め」だ。



実のところ、Quick Launch とピン止めは似て非なるものだ。

だからこそ、慣れ親しんだ QUick Launch の方を愛用していた。


でも、ないなら仕方がない。

Win11 に切り替える前に、無くなるのを知ってピン止めに慣れるようにしていた。


まぁ、2日ほどしか慣れる期間がなかったのだけど、違うと言っても用は足りる。

不便になった部分もあるが、便利になった部分もある。だから良しとしよう。




結果、今のところ Window の角が角丸になっている、というのが若干の違和感があるだけで、普段の作業フローには何の影響も出ていない。


角丸なんて、数日使えば慣れるだろう。その程度の違和感だ。


Windows 11 には楽しみな新機能もあるが、そうしたものはまだ提供されていない。

この点でも、今までと何も変わっていない。


まぁ、大き目なアップデートではあったが、普通のアップデートとそれほど変わらなかった、というだけの話。




▲目次へ ⇒この記事のURL

別年同日の日記

04年 冒険百連発?

11年 リモコン当たった

14年 Scratch 2.0

16年 ここらでコラムス


申し訳ありませんが、現在意見投稿をできない状態にしています

続・グノーシア  2022-01-11 13:55:03  コンピュータ

▲目次へ ⇒この記事のURL

グノーシア、というゲームについては、購入して少し遊んだ時点で一度書いている。


我が家では、家族全員が気に入って繰り返し遊んでいる。

いち早く「完全クリア」した長女は、その後もわずかな暇があるときに遊び続けている。


(まとまった時間があるときはスプラ2やるとか、使える時間に応じてゲームを変えている。

 グノーシアは、1回5分程度から遊べる)


さて、僕も少しづつ遊び続け、年末年始の休みでやっと完全クリアに至った。

やはりいいゲームだった。感想を書いておこう。


ここで「完全クリア」と書いてあるのは、単にエンディングを見たのではない、という程度。

本当は、きっとまだ「完全」ではないだろう。




グノーシア自体は、人狼を元にしたゲームだ。

閉鎖された宇宙船内で、人間に感染し、人間に敵対する「グノーシア」と多数決で戦うゲーム。


見た目は人間と変わらないため、外見からは判別できない。


ただし、船に一人だけ乗り込んでいる「エンジニア」は、船が空間転移…定期的に行われる、ワープ航行の際の特殊な状況を利用して、一人だけグノーシアかどうかを検査できる。


しかし、それで誰がグノーシアかを確定できるのは、当のエンジニアのみ。

グノーシアは「嘘をつく」ことができるため、エンジニアを名乗って情報を混乱させる。

本人以外は、情報が本物か偽物かもわからない。



ゲーム上、5回の「話し合い」が1ターンで、ターンごとに投票して一人の「コールドスリープ」を決定する。

ここは人狼に比べて穏やかなところ。人狼では投票で「処刑」するのだが、眠ってもらうだけだ。


そして、コールドスリープ状態にあるものは、これも船で一人だけの「ドクター」が検査して、人間かグノーシアかを判別できる。

もちろん、ドクターを名乗って情報を混乱させるグノーシアもいる。



グノーシアも、ただやられるのを待つだけではない。

ターンの最後に、一人だけ「消滅」させることができる。


空間転移の際の特殊な状況を利用し、人間を一人、完全に消し去るのだ。


このほか、絶対に人間であると互いに保証できる、二人一組の「留守番」、人間だがグノーシアを崇拝し嘘をつく「AC主義者」、存在していることが異常で、最後まで残ると宇宙を崩壊させる「バグ」など、いくつかの役職があり、それらの存在が状況を複雑にする。


ただし、ここまでは単に舞台や役職名を置き換えただけの人狼にすぎない。




グノーシアには、ストーリーがある。


いや、ストーリーと言ってよいのかどうか…世界観、という方が良いかもしれない。


グノーシアとは何なのか。なぜ人間に敵対するのか。

なぜ、どうやって人間を「消滅」させるのか。


1回のプレイは、グノーシアを全員眠らせて人間が勝利するか、もしくはグノーシアが過半数を占めて船を乗っ取るかで終わる。


しかし、時々この世界についての情報の断片を入手できる。

それは、登場人物の生い立ちだったり、全く意味の分からない…でも、すべてが明らかになった時に納得できるイベントだったりする。


少しづつ違う設定で繰り返し遊ぶことになるのだが、これも「そういう世界観」の一部だ。

プレイヤーと、もう一人の重要キャラクターだけが、並行宇宙を彷徨い、繰り返し同じ時間を過ごす能力を持っているのだ。


なんで? その能力は何のためにあるの?

それも謎の一つになっているが、ストーリー上やがて解き明かされる。



そして、多少ネタバレになってしまうが、「際限ない繰り返し」から脱出することが、ゲームクリアの条件となる。

それを達成するとエンディングが流れ、「1周目」のクリアとなる。


…のだけど、先に「完全クリア」と書いた通り、1周目クリアは完全クリアではない。

まだ謎がたくさん残っているし、ひとまずのエンディングではあるが、未解決問題も残っているのだ。



またネタバレで申し訳ないが、プレイヤーがゲームを始めるときに、性別を選ぶことができる。

ゲーム上性別はほとんど関係ないのだが、ストーリー上わずかな影響を与える。

このため、すべてを知ろうと思ったら、少なくとも2周クリアする必要がある。


(性別は三種類。男、女、汎、になっている。先にクリアした長男によれば、汎専用のイベントは用意されていないらしい)



そして、2周目をすべて終わらせる前のどこかで、1周目で未解決だった問題が解消される。

これが本当のエンディングだ。


すべての伏線が収束して綺麗に閉じる。

まぁ、ゲームとしての面白さを優先しているので、ストーリー的な荒さは多少あるのだけど。



実は、子供のプレイで先にこのエンディングは見てしまっているのだけど、自分で見るとまた違った印象になった。

それまでの過程…断片情報の積み重ねによる世界観の把握があるかどうかで、意味合いが変わってくるためだ。



なので、多少のネタバレがあってもこのゲームは楽しめる。

家族で遊ぶのにもお勧め。




さて、人狼面倒くさそう、という人向けに、このゲームが人狼と違って面倒くさくはないことを書いておこう。



相手が人間ではなく、コンピューターの動かすキャラなので自分のペースで進められる、というのは大きな要素の一つだ。

これは遊び始めてすぐの日記でも書いた。



でも、それ以上に、本物の…対人の人狼とは違う気楽さがある。

ゲーム進行に伴い、自分の能力があがり、使えるコマンドが増えるのだ。


対人の人狼では、「なんか嘘くさいな」と思っても確証を持つことが難しい。

でも、グノーシアでは自分の能力値次第では、相手が「嘘を言っている」と気づくことがある。


確実に嘘をついている、と分かるキャラがいて、そのキャラと妙に仲の良いキャラがいれば、それがグノーシアのグループではないか、と芋づる式に見つけ出すことができる。

(グノーシアが複数人いる場合、グノーシア同士は誰が仲間か知っている)


もっとも、だからこそ人間なのに嘘をつく「AC主義者」などの配役もあるのだけど、AC主義者はグノーシアが誰かは知らないため、微妙な反応の違いで見分けられたりするのが、また楽しい。


コマンドも、最初の内は「疑う」「かばう」「同調する」などの簡単なものしか使えないのだが、能力が上がるにつれて「反論する」「同意を求める」「哀しむ」「絶対に敵だ」…果ては「土下座する」なんてものもあり、適切に使うことで楽にゲームを進められるようになる。


1回のターンは5回の話し合いから成るのだが、ある程度能力があがってからの僕の1ターン目はこんな感じ。

自分はエンジニアでやった場合。


・名乗り出ろ 留守番

・名乗り出ろ ドクター

・役割を明かす エンジニア

・人間だと言え

・(流れに任せて静観)



「名乗り出ろ」は、役割を持つキャラに、役割を明かすように指示するコマンド。

自分の能力値が低いと誰も名乗り出ないこともある。

(役割は重要なものなので、明かすことでグノーシアに消される危険があるため)


留守番は互いに保証する必要があるため、必ず「人間」2名が名乗り出る。

ドクターとエンジニアは、偽物も名乗りを上げる。


そして「人間だと言え」は、全員に「自分は人間だ」と言わせるコマンド。

グノーシアは嘘をつくことになるので、嘘に敏感な…自分も含め、能力値が高いキャラなら嘘を見抜くことで、グノーシアに気づくことができる。


自分がエンジニアの場合、この後怪しい人間を調べていくことになる。

もっとも、自分がグノーシアを知ったとしても、それを他のキャラに信じてもらうのが大変なのだけど…




ちなみに、上の戦略を十分に能力値がないことにやると、目立ち過ぎてグノーシアに狙われたり、怪しまれてコールドスリープさせられたりする。


逆に言えば「育てたキャラなら無双できる」のであり、一人用のコンピューターゲームらしい気楽さが、そこにある。


人狼が面倒くさいと思うような人でも楽しめる人狼。よくできている。



ちなみに、登場人物は自分を含めて15人。

コンピューターが担当する14人は、細かな性格付けができていて、同じような状況でも人によって反応が違ったりする。

この性格を覚えるのも、ゲームを勝ち抜くためのコツで、対人戦だったらそんな簡単にはいかないだろう。


(人間には当然性格はあるが、「こういう性格だからこういう行動をとる」と言えるほど単純ではない。

 グノーシアはゲームなので、各人の性格による行動の違いはあるが、各人が予想外の行動をとることは少ない)


2周もやると、それらの性格付けも含め、キャラクターが愛すべきものになっていく。

最初の内は怖かった謎のキャラも、様々なバックグラウンドがあるだけで、みんな優しいいいやつなんだ。




何度も遊べるゲームシステム、よくできた世界観、綺麗に収束するシナリオ、生き生きとしたキャラクターの性格付け…


非常によくできたゲームです。

改めて、お勧めです。



▲目次へ ⇒この記事のURL

関連ページ

BABA IS YOU【日記 22/02/27】

別年同日の日記

04年 住宅展示場

06年 自宅で新年会

17年 アントニー・ホーア 誕生日(1934)


申し訳ありませんが、現在意見投稿をできない状態にしています

node.jsの2つのイベント処理  2022-01-27 17:16:47  コンピュータ

▲目次へ ⇒この記事のURL

仕事で node.js を使用しているのだが、思わぬところで引っかかったので記しておこう。


…と、いきなり話を始めてもわからないので、前提知識から。


node.js は、サーバ側で Javascript を使用するための仕組みだ。


そして、Javascript は「Webブラウザで使う」ことを前提に設計された言語だ。

設計当時の OS は、Windows3.1 と MacOS 8 …


どちらも、今のマルチタスクとは違って、「アプリケーションの善意」でマルチタスクを実現していた。

(OS が割り込みで CPU 時間を管理するのが今の方式だが、Win3.1 や MacOS 8 は、アプリケーションが「短い時間で OS に処理を返す」ことを前提にしていた。

 処理を返さないプログラムがいると、全体の動作が停止し、破綻した。)


いきなりすごい昔話が始まったが、その時代に設計された「アプリケーション内の組み込み言語」として、長時間の処理を「させるわけにはいかなかった」。


そこで、Javascript では「イベント駆動」という仕組みを使った。

画面がクリックされた、ボタンが押された、マウスカーソルが特定の領域に入った、など、あらかじめ設定した「イベント」が起きた場合に、指定したプログラムを呼び出してもらう。


イベント駆動でないなら、プログラムが動く条件を調べるところから自前で作らないといけない。

そして、条件を調べるためには、ユーザーがいつ押すかわからない「ボタン」が、押される瞬間を待ち続けないといけない。


…ここで「待ち続ける」というのがダメなのだ。

先に書いたように、短い時間で OS に処理を返さないと、全体が破綻するのだから。



そんなわけで Javascript はイベント駆動だし、なにかを「待つ」必要のある処理を「書けない」ように設計されている。

待つ必要がある場合には、その事象が起きた場合のイベントがあらかじめ用意されているから、そのイベントに対して処理を設定するのだ。


結果として、Javascript のプログラムはイベントを待って少しだけ処理する、というプログラムの断片だらけになる。




ブラウザ側なら、それでいいだろう。


ブラウザはユーザーインターフェイス(UI) の塊で、ユーザーが何かしたら、このプログラムを動かす、ということの連続でできている。


Javascript の組み込みイベントも、そうしたブラウザに合わせて設定されている。

この設定はブラウザメーカが勝手に作っているわけではなく、ECMA という団体で標準化されている。

だから、どこのブラウザでも同じ Javascript プログラムが動く、はずだ。


(実際には、すでにメンテナンスされていない IE とかは仕様が古すぎて最近のプログラムが動かなかったり、Chrome と FireFox で若干の仕様差があったりする。)


話しは戻って node.js なのだが、これはサーバ側で Javascript を動かす仕組みだ。

そして、ECMA の定めるイベントには、サーバで必要とするような事象が十分に考慮されていない。



先に書いたように、Javascript はイベント駆動だ。イベントなしにプログラムを書くことは、まぁできなくはないのだけど、やりづらい。

でも、サーバ向けのイベントは用意されていないし、そもそもサーバで作りたいプログラムは、ブラウザ側の UI と違って非常に多岐にわたる。


そこで、node.js では「ユーザが自由にイベントを拡張できるライブラリ」を作った。これは標準ライブラリとして、node.js を使える環境では必ず使える。

そして、多くの標準ライブラリで、このライブラリを使ったイベント処理を実現している。


なかなかうまい仕組みで、サーバ上でのプログラムを、違和感なくイベント処理で作ることができる。




さて、ここからが今日の本題。


Javascirpt に組み込みのイベントと、node.jsの標準ライブラリが提供するイベント。

同じ「イベント」の仕組みなので同じような動作をする、と思ってプログラムをしていたら、全くそうではなかったのだ。


気づかずに落とし穴にはまってしまった。

何か違う、と気づいてから情報を求めて探し回ったが、この違いに言及している日本語の記事には出会えなかった。


英語で探していてもほとんど情報がなく、「少し違うよ」程度に書かれている記事はあっても、具体的な情報がない。


最終的に、node.js のプログラムを読んで違いを理解した。



具体的には、次のようなプログラムが問題になったのだ。



const stream = fs.createReadStream("sample.text", {encoding:'utf8'})
const reader = readline.createInterface({input: stream})
const headline =  await new Promise((resolve) => {
    reader.on('line', (line) => {
        reader.close()
        return resolve(line.trim())
    }).on('close', () => {
         return resolve('')
    })
})


これはプログラムの断片で、ライブラリとして標準提供されている fs と readline を必要とする。


短いのに Javascript らしい、非常にわかりにくいイベントプログラムになっているので説明しよう。


まず、stream を作っている。

これは、ファイルを読み込んで、読み込みに成功すると、「読み込んだ」というイベントを起こしてデータを渡してくれる。

ここで、特に指定が無ければファイルの頭から終わりまで、読み込みバッファ(指定が無い場合は 64Kbyte)毎に勝手にデータを読み続けてくれる、というのがミソなのだが、ここではあまり意識する必要はない。


この stream を入力として、reader を作っている。

stream で流れてくるデータを、行ごとに分解して、できた行ごとにイベントを起こしてデータを渡してくれる、一種のフィルタだ。


このプログラムでは、この reader に対して2つのイベント処理プログラムを設定している。


line は読み取った行を渡してもらうイベントで、行を受け取ると reader を終了し、行を結果として返す。

(resolve は結果を返す仕組みだが、詳細後述)


また、行が1つもないと…つまり、0バイトのファイルだと、line が来ないで close が来る。

この場合は「空文字列」を結果として返している。


つまりは、テキストファイルの最初の行を取り出すプログラムになっている。



さて、resolve という変わったやり方で結果を返しているのは、これらのプログラム全体が、

Promise という関数の中で呼び出されているためだ。


これもイベントを作り出す仕組みで、「何かを待つ」必要があるときに使う。

先に書いた通り Javascript では何かを待つことはできないのだが、Promise は最近作られた巧妙な仕組みだ。


Promise は、Promise オブジェクトと呼ばれるデータを返す。この時に待ち時間は発生しない。


そして、Promise オブジェクトは、渡された後でも値が変化する、という何とも奇妙なものだ。


最初は「未解決」という状態になっている。

その後、resolve を呼ばれると「解決済み」となり、そのとき resolve に渡された値を読み出すことができる。



await という制御命令は、Promise オブジェクトを引数とする。


そして、await があると、Javascript はその前後でプログラムを分割する。

(以降のプログラムを、勝手に別の関数にまとめると思って欲しい)

そして、await 命令でいったんプログラムの実行を終了してしまう。


await は「Promise が解決した」というイベントを待ち、イベントが発生すると以降のプログラムの処理を始める。

これにより、「待つ」という動作が、見事にイベント駆動に置き換えられ、短い時間で処理を終了する、という Javascript の理念を守ることができる。




ここで、もう一つの Javascript の特徴を説明しておこう。

このあとの話で必要になるからだ。


Javascript の大きな特徴は2つある。一つは、ここまでに書いた「イベント駆動」だ。

もう一つが「シングルスレッド」。


Windows などの OS は。複数のプログラムを同時に動かすことができる。

これを「マルチスレッド」と呼ぶ。


これに対して、Javascript はシングルスレッド。1つのプログラムしか動かせない、という意味だ。

Javascript はイベント駆動で、このイベントはブラウザの場合なら、ユーザーの操作などで引き起こされる。


マウスを動かした、ボタンをクリックした、などだ。


でも、「イベント」が起きても、すぐにイベントの処理プログラムが動くわけではない。

すでに動いているプログラムがあるなら、そのプログラムが最後まで実行終了するまで待たされる。


多数のイベントが有るときは、イベントは処理待ちの「キュー」に貯められる。

そして、動いているプログラムがないときに、順次処理されていく。


複数のプログラムを同時に動かす、というのは、コンピューター的には実は結構「無理している」処理で、無駄が多いのだ。

それに対して、1つのプログラムを動かすだけなら、その仕事に専念できるので効率よく動かすことができる。


シングルスレッドと、必要なときには仕事を「溜めて」おけるイベントキューの組み合わせで、効率よく仕事をこなせる。

これが Javascript の特徴で、node.js が高速だと言われる理由でもある。




さて、話を戻す。先程のプログラムでは、2種類のイベントが出てきた。

Promise によるイベント処理と、reader(readline) によるイベント処理だ。


このふたつが全然違うことで問題が起きる、というのが今日の話のテーマだ。



先程描いたように Promise はプログラムを小さな単位に自動的に区切り、1回のプログラム実行時間を短いものにする。


await new Promise の前と後ろでプログラムは区切られる。

後ろのプログラムは、resolve が実行された後で実行される。


ここで、resolve が「以降のプログラム」を動かすわけではない、ということにも言及しておこう。

resolve は、promise オブジェクトを「解決済み」に変更する役割しか持たない。


resolve はイベントをキューに積むだけで、「解決」したときの、await 以降のプログラムを動かすわけではない。

実際に await 以降のプログラムが動き始めるのは、また別のタイミングなのだ。


ところが、reader によるイベント処理はそうなっていない。

そのため、先に書いたプログラムは正しく動作しない。


具体的には、reader.close() に落とし穴がある。

これが resolve と同じように、close イベントを発生させるだけで実際の処理は後回し、であればよいのだが、実際には reader.close() 関数呼び出しの中で、reader.on('close', ~ に書かれているプログラムが呼び出されてしまうのだ。


その結果、イベント処理は「最小の処理時間」を実現するのではなく、実行時間を引き延ばすことになっている。

さらに、line イベントのプログラムの「途中で」close イベントのプログラムが始まってしまうことで、close イベントの resolve が先に動いてしまう。

Promise はそこで解決してしまうため、行のデータを渡す、という一番大切なことが実現されない。




なぜこんなことになるのか。


node.js の提供する「イベントを実現するライブラリ」は、実際にはイベント「風」のふるまいを行うだけで、Javascript のイベントとは全く別の動作をするためだ。


Javascript のイベントは、Promise の resolve のように、「イベントが起きた」という記録だけを行い、そのイベントに紐づいた処理は後で起動される。


しかし、node.js のイベントライブラリは、「イベントが起きた」ことを伝えると、そのことを伝える関数の中で、イベントに紐づいた処理を呼び出してしまう。


Javascript はシングルスレッド…プログラムの途中で別のプログラムが動き始めることは無い、と保証されている言語なのだが、この仕組みだと、その前提さえ崩れてしまう。


(イベントを起こすと、そのイベントによって割り込みが起こったような挙動になる)




node.js のイベント標準ライブラリの名前は EventEmitter 。


これ自体は非常に便利なものだし、批判したいわけではない。

言語の持つ仕組みではなく、その言語自身で書かれたライブラリとしてイベントを「疑似的に」実現しているので、挙動が違うのも仕方がないところ。


ただ、使う上でこの知識を持っていないと、思わぬところで謎の挙動に悩まされることになる。



最初に書いた通り、日本語でこのことを解説する記事を見かけなかったので、ここに記しておく次第。

(EventEmitter の使い方、というような記事は多数あるのだけど)



▲目次へ ⇒この記事のURL

別年同日の日記

03年 おでん

17年 ザ・ハウス・オブ・ザ・デッド


申し訳ありませんが、現在意見投稿をできない状態にしています

BABA IS YOU  2022-02-27 18:19:16  コンピュータ

▲目次へ ⇒この記事のURL

あ、ちょうど2年前ではないか




ちょうど2年前、BABA IS YOU というパズルゲームを購入した。

ゲームの説明は、上のリンク記事で。


2年たって、やっとすべての面をクリアできた。



…いや、厳密にはまだ終わっていない面もある。

「マップコンプリート」で「THE END」の状態に持っていけた、というのが正確な説明で、一応ゲームの目的は果たしたことになるのだけど、まだやることは残っているから。




パズルゲームは好きなのだが、このゲームは普通のゲームとは違った。


2年もかかったのは、もちろん難しかったからだ。

ただ、「難しい」のかというと、そうでもないように思う。


普通のパズルなら、「難易度」というような指標が、なんとなくではあるが存在する。

しかし、BABA IS YOUはそういう尺度に当てはまらない気がするのだ。


難易度が普通は数値で示せるとしたら、なんか虚数軸方向に伸びてしまった感じ。




パズルゲームのネタバレをするわけにはいかないので、別の話で例えよう。


ファミコンの初代「ゼルダの伝説」には、「裏」と呼ばれるステージがある。


エンディングを迎えたものが遊べる、もう一つのゼルダの伝説。

ここに、今でも感心するギミックが用意されていた。


ゼルダの迷路には、明らかに「なにかある」と分かるのに、入れない部分がある。

これは、隣から爆弾を使って壁を壊すことで、入れる。


これはもう、ゼルダを遊ぶ上での常識だ。長い旅を終えて、エンディングを迎えたものにとってはそうなのだ。

にもかかわらず、「裏」では、絶対に何かあるのに、散々周囲の壁に爆弾を仕掛けても入れないところがある。


これ、プログラムを作ってあるにもかかわらず、「裏」になるまで登場しない新ギミックなのだ。

壁に向かって歩き続けると、すり抜けることができる。


「壁は爆弾で壊すもの」という常識を作り上げておいて、その常識とは違うことを求める。

「裏」は、面データなどが変わっただけのゲームだと思って遊び始めていたら、ここでまさかの新ギミック登場なのだ。


常識というのは、視野を狭くする盲点でもある。

こういうことをされると、なかなか正解に辿り着くことができない。




BABA IS YOU は、こんなことの繰り返し。


パズルなのに、ある面で使った解決方法はほかの面で役に立たない。

それどころか、「常識」を形成された後で、それを疑わないといけないような面を用意される。


だからなかなか正解にたどり着けない。

一週間も同じ面で悩み続けていると、全然 BABA IS YOU を遊んでいなかった妻が横から「こういう風にすればいいんじゃないの?」と、常識外れの解法をよこして、それが正解だったりする。


なんか、難しいとかそういうゲームじゃないのだ。

ゲームの根底にある常識を疑わないといけないのだけど、遊んでない人には常識が形成されていないから簡単に解けたりする。


こんなのが、200面以上ある。


まぁ、2年間 BABA IS YOU ばかりをやっていたわけではない。

忙しくて一切ゲームをやってなかった期間もあるし、サクナヒメやグノーシア、GOLF STORY なんかを遊んでいた時期もあった。


(GOLF STORY については日記に書いた気がしていたが、書いてなかったようだ。

 面白かったけど、人に勧めるほどのゲームではなかったからな…

 サクナヒメは、すごく話題になったゲームなので、わざわざ僕が書く必要はないと考えて書かなかった。)


しかし、他のゲームを遊んでいても、一息ついたら BABA IS YOU に戻ってくる、という感じだった。




2年前の紹介記事にも書いたのだけど、内容をちょっとおさらい。


基本的には、倉庫番タイプのパズルゲーム。何らかの「物体」を、主人公キャラで押したり引いたりしながら面クリアを目指す。


ただ、この「物体」として重要なものに、「単語」があって、単語を組み合わせることでゲームのルールを変更できる。


主人公も、面クリア条件も、障害物も、ルール組み換えの対象だ。


最初の方の面は、この組み換えの楽しさを知ってもらうためか、大味な面が多くなっている。

面クリアの方法で「別解」がいくつでも作れたり、画面上に主人公を大量発生させて、数の暴力で障害を乗り越えたり。


でも、こうした過程でゲームのルールを把握したころには、本格的なパズルゲームになっていく。


なにせ、200以上ある面で、「同じような解き方」の面がほとんどないのだ。

ある面で使った方法は、別の面では役に立たない。


遊ぶ方にも歯ごたえのあるゲームだが、それほど多くのパターンを用意した作者側に舌を巻く。




倉庫番なら、ルールの中で「荷物を動かすルートを考えて」「そのルートを確保する手順を考える」というような思考で解くことができる。


しかし、BABA IS YOU は上に書いたように、ルールが書き換えられてしまう。

目指すべきゴールがどこにあるかもわからない状態にされて、ゴールから逆算して考える、ということもできない。


それでも、「何がゴールとなるべきか」も、遊んでいるうちにだんだんわかってくる。

面ごとにゴール条件は異なるとは言っても、「主人公に設定されたオブジェクトが、ゴールに設定されたオブジェクトに重なること」という基本は変わらないのだ。


ゴールが分かれば、そのゴールを実現するためのオブジェクトの動かし方を考える段階に入り、倉庫番と同じような方法で解ける。


しかし、BABA IS YOU にはもう一段階先の難しさがある。


ルールを作る「単語」は時々追加され、その単語の意味をゲーム中で十分に把握する必要があるのだ。

ここで、先に書いたような「常識」の形成が…ミスリードするように行われる。


間違った常識は、ゲームの障害になる。

先に「ゴールが分かれば」、後は解ける、と書いた。しかし、間違った常識により、この過程が阻害されるのだ。



オブジェクトは、常識外の動作をする。

常識外なので、最初は「これ、バグじゃないの?」とすら思う。


だけど、バグじゃないのだ。間違っていたのは自分の常識の方。

試行錯誤の末にクリアして、常識が上書きされ、より正しいルールを理解できるようになる。


もちろん、そんな面ばかりではない。そこまでに作られた常識をうまく組み合わせるだけで解ける面も多い。

…もっとも、「うまく組み合わせる」のが難しいのだけど。




まぁ、作った側も「難しい」だろうことは予期しているのだろう。

全ての面を解かないでもよいようなゲーム構成にはなっている。


面は、様々な「テーマ」ごとにエリア分けされていて、エリア内の半数くらいの面を解くと、次のエリアが表示されるようになっている。


エリア内の面も、解けないならあきらめて、別の面を試せるようになっている。

だから、先に進む目的では、実はそれほど難しいゲームではない。


僕が2年もかかった、というのは、あくまでも「マップコンプリート」を目指していたため。

先に書いたエリア内の面を全部クリアすると「エリアコンプリート」となり、用意された全部のエリアをクリアすると「マップコンプリート」になる。


つまりこれは、基本的に用意された面の全面クリアを意味する。




そう、「基本的に」用意された面しか、まだクリアできていない。

ゲーム上、たくさんの「隠し面」があるのだ。


隠し面は、ゲーム上のいくつかの面で、「ゴールする」以外のことを行うことで現れる。


…いくつかの面には、面を解く以外にも、まだやることがあるのだ。

詳細を書くと、その方法を見つけたときの衝撃を奪ってしまうので書かないけど。


この「別のことをする」のも、面ごとにやるべきことが異なる。

でも、気づいてしまえば、やるべきことは見えてくるように作られている。


そうなった時に、もっと大きな別のパズルの存在に気づくだろう。



…驚かされっぱなしのゲームだ。

こんな飛びぬけた発想のゲームを良く作った、と思うし、その「発想」が、発想どまりにならずに高いレベルでまとめ上げられていることが素晴らしい。





なんかもどかしい書き方になっているな…パズルだからネタバレしてはつまらない。


パズルゲームが好きな人には、非常にお勧めなゲームだ。

ただし、完全に自分の力で解こうと思ったら、すごく時間がかかる覚悟は必要だ。


どの面も、「解けた」瞬間には驚きがある。

その驚きこそが楽しいゲームなので、時間をかけても攻略サイトなどを見ずに解くことをお勧めする。


先に書いたように、僕もまだやるべきことを残している。



…そして、先日「追加面」が無料配信されたんだよね。

主に「開発中で没にした面」を揃えているようだけど、また 200面以上あるらしいですよ。


こちらは没にした面、というだけあって、本編を知っていると楽に解ける面も多い。

とはいえ、そこは BABA IS YOU だ。没面でも驚くような解き方が多い。


追加面はまだ少ししか遊んでいない。先は長そうだ。



▲目次へ ⇒この記事のURL

別年同日の日記

02年 2/27

12年 おゆうぎ会

15年 WING WAR

20年 BABA IS YOU


申し訳ありませんが、現在意見投稿をできない状態にしています

停電  2022-04-04 08:55:25  コンピュータ 家族

▲目次へ ⇒この記事のURL

先日、電力逼迫の話を書いたら、それとは無関係に今朝停電した。


朝4時過ぎ。後で確認したら、4時11分だったようだ。

UPS(無停電電源装置)の4回続けてなるビープ音で目が覚めた。


このビープ音は、電源断を伝えるものだ。

東京電力は頑張ってくれていて、通常なら停電しても数秒で治るし、長くても5分くらい。


UPS は、30秒ごとに4回のビープ音を鳴らす。

何度も鳴り響く。長い停電のようだ。


スマホで情報を確認する。東京電力のページには、停電情報は載っていない。

まだ停電が起きたばかりで、情報掲載に至っていないのだろう。


更に5分ほど。これはどうにかしないといけない、と思って起きる。

UPS に繋がっているとはいえ、使える電力は無尽蔵ではない。


再度情報確認。停電情報が出ていた。鎌倉市で 2100件ほど。

復旧予定は6時。あと1時間半もある。


UPS のステータス表示を見ると、この調子では6時まで持ちそうにはなかった。

無駄なものの電源を落とそう。


たとえば、NAS は急な電源断からは守らないといけないので UPS に繋げているが、停電した状況で動いている必要はない。


WiFi ステーションも UPS に繋いでいるので、ChromeBook でログインすることができる。

NAS に対してシャットダウン指示。これで、電力の使用量が少し減った。


この時点で5時前。6時までならなんとか電源も持ちそうだ。

大抵、こういうのは予告時間少し前には復旧するものだし。


朝の支度を始めようか…と思ったが、IHを使っている我が家では、お湯も沸かせない。

もう一度ベッドに入る




5時55分、断続的だったビープ音が鳴り続けるようになる。

いよいよ電源の残り容量が少ない。


復旧完了時刻を再度見る。6時半に伸びていた。


あ、だめだ。急な電源断で壊れると困るから、家庭内サーバーもシャットダウンしよう。


これで、この日記などを公開しているサーバーも停止した。


で、仕方がない。何もやることないのでまたベッドに入る。




6時半ぴったりに、通電が始まった。

復旧したようだ。


僕は主夫なので、まずは朝の支度。

炊飯器もタイマーでが止まってしまったため動いていない。

炊飯を開始し、一日分のポットのお湯を沸かし、朝ごはんの支度をする。


並行して、サーバの復旧作業。

サーバは2台ある。


1台は土台となるホストOSは起動したが、その上で動くゲストOSが起動しない。

このゲストOS が普段仕事で使っているものなので、これでは困る。


サーバに直接コンソールを接続し、virsh start させる。ついでに virsh autostart も設定しておく。

(前回起動したのはいつだっただろう。自動起動の設定を忘れていたようだ)


もう一台、このページを載せている、公開用サーバが動いていない。

その土台にもログインできない。なんで? ややこしそうなのでひとまず置いといて、朝ごはんの支度を続ける。


ある程度朝ごはんができたところで、再度設定作業。

どういうわけか、サーバー自体がうまく起動できていなかった。

強制的に電源を落として入れ直しても動かない。BIOS 起動すらしない。

壊れたか? 焦る。


一度電源をプラグから抜いて、再度差し込んだら問題なく起動した。

あぁ、時々あるやつだ。問題なし。


こちらは、ゲストOSまで自動的に起動した。7時半。


というわけで、このサイトは、6時から7時半の1時間半ほど、停止していました。

こんな時間に見ていた人がいるかわかりませんが、ご迷惑をおかけしました。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

家族

別年同日の日記

12年 言葉の定義

13年 科学館めぐり

14年 ジョン・ネイピアの命日

15年 ジョン・ネイピア 命日(1617)

16年 冒険遊び場・花見

18年 ピューロランドで誕生日

18年 ピューロランドの秘密

19年 風邪が続いています


申し訳ありませんが、現在意見投稿をできない状態にしています

代入の評価順  2022-04-05 20:40:58  コンピュータ

▲目次へ ⇒この記事のURL

Javascript 豆知識。

というか、仕事で重要になった些細なこと。




演算子には評価順がある。

プログラマなら、だれでも意識することだ。


掛け算 * は、足し算 + よりも先に評価される。

でも、括弧 ( ) をつけると、それが最優先で評価される。


1 + 2 * 3 は 2 * 3 が先に評価されて 7 になるけど、

( 1 + 2 ) * 3 なら、1 + 2 が先に評価されて 9 になる、というようなこと。


まぁ、評価順が不安なら括弧で括っとけ、という話でもある。



じゃぁ、次。

6/3/2 という式があった場合、結果は何になるだろう?


これは、6/(3/2) なのか、(6/3)/2 なのか、という問題だ。

答えは、1 だ。(6/3)/2 になっている。


つまり、評価は左のものが先に行われ、右に進む。


Javascript では、累乗は ** で表される。


2 ** 3 ** 2 はどうなるだろう?

答えは 512 だ。2 ** (3 ** 2) が行われている。割り算の時とは逆で、右から順に評価される。



こうした「同じ演算子が続く場合の評価順」のことを、結合性という。

結合性は、演算子により異なる。




さて、本題。


Javascript では、「代入」も演算結果を持つ。

a = 5 という代入式があった場合、これ全体は、代入された値である 5 が結果になる。

そして、これは右から左に評価される。


a = b = 5 という式では、まず b = 5 が評価され、この結果である 5 が a に代入される。



では、次の式はどうか。


var a=0, b=[];

b[a++] = a++;


念のため書いておくと、a++ というのは「a の内容を値とした後で、a を1増加させる」という演算子だ。

a が 0 の時に a++ と書くと、その式自体は 0 なのだが、その後に a は 1 になっている。



さて、代入式は右から評価されるのだから、まず a++ が実行される。

そして、その結果が b[a++] に代入される。


…と、そう思っていた。


でも、結果は [1] になる。配列の 0 番目に、1 が入っている、という状態だ。

先に b[a++] が評価され、その後で a++ が評価されている。




ちなみに、こんな風に式の中に a++ とかを書くのはお勧めしない。


ここではわかりやすい形で書いているけど、実際には await を使った式の評価でバグが出た。

こんな感じだった。


b[a] = await func();

if(!b[a]) return;


func からの戻り値がない場合、それ以降の処理をしない、というようなプログラムだったのだが、実際には func が値を戻したとしても、return されてしまう。


書いたのは僕ではないのだけど、うまく動かないので相談が来た。


await は javascript に並列実行を引き起こすのだけど、その中で a が書き換えられていた。


それにしても、戻り値は b[a] に入ってすぐ次の行で見ているはずで、納得がいかない。

…と、この時点では思った。先に書いたように、左辺の評価は後になると思っていたからだ。


でも、左辺が先に評価されると考えないとつじつまが合わない。

そこで先のプログラムを書き、左辺の評価が先だと知ったわけだ。




Javascript でわからないことがあったら MDN を見ろ、と僕は思っているのだけど、今この記事を書くために確認していたら、ちゃんと書いてあった。

でも、長い文章の中にさらりと入っているので、気づいてなかった。


演算子の優先順位のページに書いてある。

(どこに書いてあるのか探してみよう。見落としていたのに納得してもらえると思う)



・興味深いのは、結合性や優先順位に関係なく、評価の順序は常に左から右になることです。



「計算」には優先順位があるが、「評価」は常に左から。覚えておこう。




▲目次へ ⇒この記事のURL

別年同日の日記

10年 花見

21年 家事のおとも


申し訳ありませんが、現在意見投稿をできない状態にしています

CAPCOM  2022-06-14 16:53:07  コンピュータ

▲目次へ ⇒この記事のURL

Switch でスト2が期間限定無料配布、と聞いて、別に好きでもないのにダウンロードしておこうと思った。


詳細に書くと、CAPCOM ARCADE STADIUM というソフトがあり、これは無料配布している。

というのも、これ自体はプラットフォームであり、ゲームを遊べるわけではないからだ。


で、ダウンロードコンテンツの形で、昔の業務用ゲームを別途購入し、遊ぶことができる。

何も買わないでも、サンプル扱いで 1943 が入っている。縦スクロールシューティングゲームだな。


で、期間限定でストリートファイター2が無料になっている、という話なのだ。

1943 もスト2も、別に好きではない。というか、CAPCOM のゲームをそれほど好きではない。


でも、スト2が歴史的な転換点にあった重要作品であることは認めるし、せっかくだからもらっておこう、と思ったのだ。




ダウンロードして遊ぶ。スト2で選べるキャラ、最初はこんなに少なかったっけ。

ちょっと遊んで終了。対戦格闘自体が、それほど好きなジャンルではないからね。


他にどんなゲーム遊べるのかなー、と、「購入すれば」遊べるゲームのリストを眺める。

あー、そういえばそんなゲームあったなー、と懐かしみながら、各ゲームのタイトルロゴを眺める。


そして、出会ってしまったのだ。「ストライダー飛竜」。


少し上に書いた前言を撤回しよう。CAPCOM のゲームをそれほど好きではない、と書いたが、飛竜は大好きだった。

僕の人生を方向づけたゲームの一つ、と言ってよいくらいやり込んだ。


X68k 版も持っていたし、メガドライブ版は「いろいろ違う」と怒りながらも、やはりやり込んだ。




200円かー。気軽に試してもいい程度の額。

今更昔のゲームは「懐かしい」というだけで、遊ばないのが目に見えているのだけど、買っちゃうか。


よし、買おう。とストアページに行くと、過去にゲームを購入したときに付いたポイントがたまっていた。

200円分くらい、ポイントで買える。実質無料で入手。


これ、CAPCOM の思う壺なんだろうな。



久しぶりに遊んだが、最初の方はそれなりに攻略パターンを覚えていた。

でも、途中から全く覚えていない。コンティニューでごり押ししてエンディングまで行ったが、納得できない。

このゲームはゴリ押しするようなものではなく、美しく踊るものなのだ。


しかし、やはりプレイ感覚の好きなゲームだ。

パターンを思い出しながら、しばらく遊ぶことになりそうだ。




さて、ストライダー飛竜だが、まだソ連が崩壊する前に作られたゲームだ。


ゲームの舞台は「ソ連から帝政ロシアに戻った 2048年」で、このロシアを率いる独裁者は、世界を相手に核戦争を起こそうとしている。

その彼を倒し、世界を救うのが主人公に課せられた使命だ。


…なんか、今書くのが きな臭いな。

まぁ、崩壊するとまでは思ってなかったけど、ソ連がごたごた続きだった時期に作られたゲームだし、この設定を「予言」とまで言うつもりはない。


当時は政府も仮想敵国としてソ連を想定していたしね。


でも、なんかいろいろ考えちゃうのでした。


▲目次へ ⇒この記事のURL

別年同日の日記

02年 眠り姫

06年 CSS

13年 びわ

19年 google photos その後

24年 溶連菌の流行


申し訳ありませんが、現在意見投稿をできない状態にしています

プリンタ購入  2022-07-23 17:47:47  コンピュータ

▲目次へ ⇒この記事のURL

プリンタが壊れ…てないのだけど、半壊くらいになったので新しいプリンタを購入した。


まず、前の機種の状態について。

最近色が変だなー、と思ったので、状態確認のプリントをしたら、黄色と青がちゃんと出ていなかった。

ノズルが目詰まりしている感じ。


まぁ、当然ヘッドクリーニングする。その後状態確認すると、黄色は完全に出なくなり、青もほとんど出なくなり、それまで出ていた赤も目詰まりしているような状態に。

さらにヘッドクリーニングすると、余計に悪化。ついには黒以外がでなくなった。

あ、これダメだ。目詰まりじゃなくて、なんかノズルの機能(インクを送るポンプとか、ピエゾ素子とか)が壊れてるっぽい。


というわけで、すぐに新しいプリンタを探し始め、翌日には購入、翌々日には到着した。


今日は、到着の翌日だ。セットアップして正常に動くようになった。




前に使っていたのは、ブラザーの DCP-J557N だった。

購入したのは7年前だ。


7年も使っていたことに驚いた。

プリンタって可動部品が多く、ゴムやインクなどの自然劣化する部品も多い。

だから、使えても5年程度、と思っていた。


この機種は戦略機種で、6千円で入手した。


ちなみに、インクもブラザーが以前から使っていたものだった。

購入当初から互換インクが多数の会社から発売されており、4色で千円程度。

それで我が家の場合1年くらいは使えていたので、本当にコストパフォーマンスが良かった。



その前に使っていたのは…名誉のために名を伏せるが、有名プリンタ会社のもので、1年以内に壊れた。

さすがに保証期間だったので交換してもらったら、それも1年以内に壊れた。

あの会社はインクタンクに特殊 IC を積んでいたので当時は互換インクもなく、非常に高かった。


なので、この会社のものは我が家的には当面買わない。

大きく状況が変わって評判の良い機種でも出れば買うかもしれないけど。




今回購入したのは、当然のように前の機械の後継機。

…とはいえ、良い特徴のいくつかは失われている。


いくつかの後継機があったが、選んだのは DCP-J926N。

前の機種は6千円で買えたが、2万円弱だった。


コロナで在宅勤務する人が増えて以降、プリンタは売れ行きの良い商品らしい。

値引きして買ってもらうような必要が無くなったので、値引きがない。


そのうえ、ロシア・ウクライナ戦争以降、物価高の影響でプリンタも実売価格が上がっているらしい。

この状況では、2万円というのは悪くない値段のようだ。



で、インクタンクが新開発のものに替わった。

昨年秋に発売されたこの機種から使われるようになったインクタンクなので、まだ互換品が市場に出ていない。

4色で4千円くらい、というのが相場のようだ。


容量の違いなどが明確でないので、単純に高いか安いかは言えないのだけど、まぁ純正品だから互換品よりは高いのだろう。


でも、ブラザーのインクはほかの会社に比べて良心価格だと思っている。

互換インクもそのうち出てくるだろうし。




検討時にはもう一つ候補があって、DCP-J4140N を検討していた。


こちらは大容量インクタンクで、やはり互換品はまだないのだけど、インクの「容量当たり」のコストが低い。

あと、インクが顔料系インクなので印刷が鮮やか。


…でも、インク高いんだよね。4色買うと2万円くらい。


それほど印刷するわけでもないし、人に配布する書類を作るわけでもない。

だから、印刷が鮮やかな必要も、大容量である必要もない。


というわけで、こちらは選ばなかった。

顔料系インクには少し興味があったのだけど。







▲目次へ ⇒この記事のURL

別年同日の日記

02年 免許更新

09年 ゲーム解禁

13年 ○○、Fonera やめるってよ。

14年 高柳健次郎の命日(1990)

15年 夏風邪

18年 LED 電球

19年 のみかい


申し訳ありませんが、現在意見投稿をできない状態にしています

vue-tweet-embed で表示していた Tweet が崩れる  2022-08-19 17:10:34  コンピュータ

▲目次へ ⇒この記事のURL

昨日 8/18 の夕方ごろから、仕事で作っていたプロダクトで、Tweet のタイムラインを表示していた部分で画面崩れが起きるようになった。


この時点では、リロードを繰り返すと崩れたり正常だったり。

あ、これは Twitter がウィジェット用の出力を変えたな、と気づいた。


普通は、Web ページに Twitter のタイムラインを埋め込みたければ、Twitter が公式に用意したサイトで作成した HTML の断片を埋め込めばよい。

この断片の中では、widget.js というプログラムを読み込んでいて、このプログラムがタイムラインを埋め込む。


しかし、Javascript のフレームワークである vue ではこの方法が使えなかった。




HTML は、画面を表現するための言語だ。

Javascript は、一般的な意味でのプログラム言語であり、HTML を操作するための機能も充実している。


ここで、Javascript でプログラムを作る際は、「データ操作」と HTML 操作を同時に行うことが要求される。

内部データを計算によって書き換えても、画面に反映されなくてはわからないからだ。


しかし、内部データと画面を常に一致させておく、というのが結構面倒くさい。


vue はこれを解消するフレームワークだ。

HTML とデータのつながりを記述できるようになっている。

そのうえで、Javascript でデータを操作すると、自動的に HTML に反映される。


非常に便利だ。

その代わり、今までのように「Javascript で HTML を操作する」のは禁じ手になった。

vue が書き換えることが前提なので、それ以外の書き換えがあると破綻するためだ。


さて、vue の説明が長くなった。

先に書いた Twitter の widget.js は「HTML を操作してツイートを埋め込むプログラム」であり、vue と相性が悪い。


そこで作られていたのが、vue-tweet-embed というライブラリだ。

これを使うと、非常に簡単に vue 内にツイートを埋め込める。




さて、今回、Twitter が送信するデータの形式が大きく変わったようだ。

widget.js は一緒にバージョンアップされているので問題はない。

しかし、vue-tweet-embed で表示する場合は、問題が出た。


具体的には、vue-tweet-embed のやり方で指定したサイズや、表示の際のオプションがすべて無視される。

縦に長い…とても長い「タイムライン」が表示され、スクロールバーも出ない。


これが冒頭に書いた画面崩れの状況だ。


僕が作っていた環境では、ツイートの冒頭に、以前はなかった「@~さんのツイート」という表示が入るようになった。

これ、noheader という指定で消していたものだが、vue-tweet-embed ではその指定も利かなくなっている。


昨日夕方は「時々崩れる」だったのが、今朝仕事を開始するときには「100%崩れる」状態になっていた。

Twitter 社が、数あるサーバーのすべてで新プログラムに更新が終わったのだろう。


これはどうにかしなくては。




ほぼ一日かけて何とかした。


まず、vue-tweet-embed の使用は廃止。

だましだまし使う方法もあるが、今後も同じようなことが起きては困るからだ。


公式 widget.js で何とかできる環境を構築するのが良いだろう。

先に書いた vue との相性の悪さは、v-once で解決できる。


vue で HTML とデータのつながりを記述する際のオプションで、「一度だけ描画」を意味するものだ。

最初に描画されたら、その後は更新しない。だから、widget.js が書き換えた後の内容が保証される。


あとは widget.js の読み込みをどうするかだ。

本当は、ツイッターの埋め込みを行う部分を指示する HTML などを準備したうえで、「最後に」読み込むと、埋め込みを行ってくれる。


しかし、vue だと埋め込みタイミングがいつになるかわからない。

(vue を使うと、ページ遷移なども画面の書き換えで行い、通信を起こさないようなことが可能になるため)


Twitter 公式に、widget.js 内の「埋め込み」メソッドの呼び出し方が定められていた。


すでに widget.js が読み込まれていることが前提だが、メソッドを呼び出したタイミングで埋め込みを行える。

これは公式に定められたものなので、今後も安心して使えるだろう。


さらに、公式に「widget.js を必要な時に読み込ませるが、読み込みが終わる前に、読み込みが終わったらやって欲しい処理を登録しておく」プログラムも公開されていた



そのままでは vue で使えないが、改造して使うことにしよう。




というわけで、出来上がったのが次のような仕組みだ。


まず、全体としては vue のコンポーネントだ。

このコンポーネントは、ツイートを埋め込むためのものになる。


だから、「埋め込みたい」側の vue プログラムからは、このコンポーネントを読み込んで組み込む必要がある。

この際、v-once タグをつけておいて欲しい。そうしないと、widget.js が書き換えたものが保証されないから。


template の中で、一番最初のタグに ref="tweet" をつけておいて欲しい。

また、ツイートを埋め込みたい部分には、ツイッター公式の埋め込み HTML 断片の、埋め込み部分を書いておく必要がある。

(だって、公式 widget.js は、それを見つけて書き換えるものだから)


あとは、このコンポーネントが読み込まれ、DOM が構築された際に適切なプログラムが動けばよい。

なので、mounted に仕込みを行う。


mounted(){ window.twttr = ((() => { const fjs = this.$refs.tweet; let js; let t = window.twttr || {}; if(t.widgets) return t; // もう関数定義されている js = document.createElement("script"); js.src = "https://platform.twitter.com/widgets.js"; fjs.appendChild(js); t._e = []; t.ready = function(f){ t._e.push(f); }; return t; })()); twttr.ready( () => { twttr.widgets.load( this.$refs.tweet); }); },


先に書いた通り、twitter 公式のプログラムから少し変わっている。


まず、一番重要なのは「widget.js の読み込みタグがなければ、追加することで読み込ませる」だ。

元のプログラムでは、HTML 内にタグがあるかどうかを確認していた。


でも、その追加したタグは、vue によって消されてしまうことがある。

なので、widget.js が読み込まれて関数定義されたかどうかを確認するように変更した。


タグを追加する位置は、元のプログラムでは特定のタグのすぐ後ろ、となっていた。

しかし、v-once された内部にしたいので、「内部の一番最後」に追加している。


あとは、そうした DOM を探し出す方法が vue 向けに変わっているくらいか。



最後に、twttr.ready に「埋め込み」を指示する関数を書いてある。

twttr.ready は、上のプログラムの中で、キューに登録するプログラムとして作ってある。


これ、widget.js が読み込まれた時点で、キューに入っている関数を実行してくれる。

そのうえで、twttr.ready 自体が書き換えられ、キューに登録ではなく「即時実行」になる。


そのため、再度この部分が読み込まれた場合には、新たに widget.js を読み込むこともなく、即時に埋め込みが行われる。




ひとまず、相性が悪い widget.js を、無理やり vue の中にねじ込んだ。

これで、今後 widget.js がバージョンアップすることがあっても大丈夫だろう。


でも、今回もこれだけでなく、文字サイズが変わったり、全体デザインが変わったり、いろいろ変わってるんだよね。


最初の方に書いた noheader が効いていないのは、公式 widget.js では大丈夫だった。

でも、以前は使えた noborder や nofooter は廃止されているようだ。


今回廃止されたのか、以前から実は使えてないのかはわからない。


今後も、「崩れる」ほどではないが、「見た目が変わる」くらいのことはあるかもしれない。



翌日追記

これを書いている「翌日」というのは土曜日。


昨日は、とにかく突貫作業でどうにかしなくてはならなくて、作り上げて日記ネタにした。

今日になって、気になったので、仕事時間外だけど vue-tweet-embed のソースを読んでみた。


驚くことに、構造はほとんど僕が作ったものと同じだった。

公式の widget.js を読み込み、widget.js の埋め込む対象位置を教えるタグを埋め込み、埋め込むための関数を呼び出す。


呼び出す関数が少し機能の違うものだったり、タグの作り方が違ったり、vue の再描画に対する保障方法が違ったり、という違いはあるのだけど、大きくは変わらない。


そうすると、なぜ表示崩れが起きたのかよくわからない。

いろいろな「若干の違い」によるものかもしれない。


また、vue-tweet-embed が広く使われている割に騒ぎになっていないのが不思議だったのだが、これも環境によって動作が違うのかもしれない。



謎はいろいろある。ここに書いたこと自体が、多くの人にとっては無意味なのかもしれない。


しかしまぁ、ライブラリに頼らず問題を自分の手元でコントロールできる状態に置いたことで、今後の保証をある程度得られた、と思うことにしよう。


▲目次へ ⇒この記事のURL

別年同日の日記

04年 お披露目

09年 13日

09年 夏祭り

09年 誕生日

14年 ブレーズ・パスカルの命日(1662)

16年 ゴードン・ベル 誕生日(1934)

20年 視野欠損・経過観察


申し訳ありませんが、現在意見投稿をできない状態にしています

スプラ3のフェス  2022-09-26 15:03:04  コンピュータ

▲目次へ ⇒この記事のURL

スプラ3の第1回フェスが終わった。


…改めて、この手のイベント運営の難しさを感じた。



スプラ2は最初の2年間しかフェスをやらなかった。

ファイナルフェスは 2019年の1月。


実際にはその後も不定期に特別なフェスが行われたのだけど、それも 2021年1月が最後。


正直に書くと、僕はもともと対戦ゲームは苦手だし、3Dのシューティングも苦手。

スプラ2は、最初の内こそ遊んでいたが、途中からは「フェスだけ参加」になっていた。


そんなわけなので、本当に久しぶりに遊んだのが、スプラ3の「発売直前」の無料お試し。

これもフェスの扱いだったのだけど、本当に特別扱いなので適当に楽しんだだけ。


今回、1年半ぶりのフェスで、詳細すっかり忘れていた。




遊んでない人には何やらわからない話なので、軽く説明しよう。

スプラ3、正式名スプラトゥーン3は nintendo switch 向けのゲームだ。


3Dで描画された画面で、敵陣営と味方陣営に分かれて撃ち合いをする「シューティングゲーム」だ。


この手のゲームは、もう10年くらい前からアメリカを中心に流行していた。

しかし、日本ではどうも流行らない。


任天堂社内に、この手のゲームを「好きなグループ」がいたそうで、彼らが日本でも流行させようとして、既存のゲームの「日本人受けしない」部分を徹底的に洗い出し、受け入れられる方法を考えた。


結果として、世界中で流行するゲームになった。

「日本人受けしない」と考えていた部分は、実は海外でも嫌いだった人が多いのだ。



最初に書いたが、僕はこの手のゲーム嫌い。でも、スプラは楽しめる。

撃ち合いのゲームであるにも関わらず、最終的な結果が「敵を倒した数」ではなく、「ナワバリの面積」で決まるためだ。


撃ち合いと言いつつ、武器も水鉄砲という設定になっている。

その水鉄砲で地面を塗る。塗ったところが「ナワバリ」になる。


人に銃を向ける、という内容に抵抗がある人も、直接対決が嫌だ、という人も楽しめる。

最終的には、前線で殺伐とした殺し合いになるけどね。




それで「フェス」だ。


普段のゲームだって十分面白いが、僕がフェスだけ参加する、と書いているように、より「特別感」のあるゲームになっている。


期日指定で、遊んでいる人がいくつかの「陣営」に分かれて、大きな勝負をする。


この陣営は、簡単なアンケートで決まる。

例えば、スプラ2の最初のフェスは「マヨネーズとケチャップ、どちらが好き?」だった。



フェスの時でも、1回1回の勝負は、いつものゲームとあまり変わらない。

でも、そのゲームの勝敗が、より大きな「勝負」を決めていく。


この「フェス」が、スプラシリーズの非常に面白いところであり…運営が非常に難しいところだ。



僕は初代のスプラは遊んでいないのだが、初代の最初のフェスはひどいものだったらしい。


2つの陣営に分かれて戦うのだが、「人数が少ない陣営」の人数が少ない。

何を当然のことを、と思われるだろうが、フェスは「2つの陣営」が戦うのだ。

両者が同じ人数でないと、勝負が成立しない。


結果、人数が多いチームでは、遊ぼうと思っても「相手がいない」状態で待たされる。

「人数が少ないチームは、寝ないで遊んでくれ」という懇願がネットの掲示板に書かれる始末。



その後、人数が少なくて試合が成立しないときは、「同じ陣営」の人同士が戦う、という同士討ちが作られた。

これで「ゲームが遊べない」ということは無くなったが、同士討ちはフェスの結果には無関係なので、あまり多いと興ざめする。


例えば、先ほど書いた「マヨネーズとケチャップ」だが、このお題はあまりよくない。

日本国内では半々程度に分かれたのだが、海外では圧倒的にケチャップが多いのだ。


これ、日本国内だとよく「似たようなもの」扱いされるのだけど、海外では「ドレッシングと、なんにでも使える万能ソース」だからね。

どちらが好き、と言われたら、なんにでも使える方が好きに決まっている。


こういう時、同士討ちだらけの詰まらないフェスになってしまう。




さて、それでやっと今回の本題に入れる。


スプラ3では、フェスが「3陣営」に分かれるようになった。


これ、素直にいいアイディアだと思った。

2陣営だと、必ずどちらか一方は「過半数」を取るのだ。

相手より人数が多くなったチームには、同士討ちが発生してしまう。


3陣営に分かれれば、「自分の陣営」は、おそらく「残る二つの陣営の合計」よりは人数が少ないだろう。

常に自分は「人数の少ない側」になり、他のチームと対戦することができる。


実際、発売前のお試しでは、「グー、チョキ、パー、どれが好き?」というお題で、それほど人数差もなくうまく遊べていた。



で、今回の第1回フェスだ。


「無人島に持っていくなら?」で、道具・食料・ひまつぶし の三択だった。


これ、海外でも同じ内容なのかな? 

どうもネットで情報探しても見つからないのだけど、事前調査を「世界的に」行って決めた三択ではないかと思う。


無人島、と聞いて、日本人はテレビのバラエティー番組の「無人島生活」や、遭難して無人島に漂着、と言ったシチュエーションを思い浮かべることが多い。


でも、海外では「無人島リゾート」も結構多いのだ。ちゃんとホテルが整っていて、島を丸ごと1つ貸してくれる。

そういうところでは暇つぶしという選択肢もありだろう。


でも、フェスの開催を伝える際の、キャラクターの寸劇は、「ガチで遭難し、いつ助けが来るかもわからない」という状況のものだった。

その状況で「ひまつぶし」はあり得ないし、食料だってすぐ尽きてしまうだろうから、食糧確保のための道具、と考える人が多かったようだ。


結果、3択なのに道具が過半数を超えてしまった。


これにはもう一つの裏があり、フェスの際はそれぞれの陣営に「キャラクター」が付くので、キャラの人気投票になりやすい。

道具には一番人気のキャラが付いた。これも過半数を取る原動力になっただろう。


ともかく、せっかくの「同士討ちを出さない工夫」は役に立たず、第1回フェスから同士討ちが頻発するものとなった。



ついでに言うと、スプラ3はフェスの後半で、前半で「一番勝率が高かったチーム」4人に対し、残る2チームが2人ずつ参加して3色で陣取りをする「トリカラバトル」というものがある。


今回、一番得票率が少なかった「ひまつぶし」陣営が、前半での勝率が一番高かった。


結果として、トリカラバトルはほとんど成立しない。特に、道具陣営の人にとってはせっかくの最初のフェスでトリカラバトルが全然遊べない、ということになったようだ。



#ちなみに、僕は食料派だった。

 ガチ遭難の場合、最初の1週間を生き抜くのが難しい。

 見知らぬ島での食糧確保をどうすればできるのか、という調査だけで時間が過ぎてしまうためだ。

 道具はこの調査が終わった後で役立つものだが、最初の1週間を生き抜けられないと無意味になってしまう。

 そんな本気で考えるようなものではないのだけど、久しぶりのフェスで、つい本気で投票してしまったのだ。





個人的には、スプラ2の「サンリオフェス」以来の大失態。


サンリオフェスは、サンリオがスポンサーになって開催されたものなのだけど、どうも最初から「ハローキティを勝たせたい」という要求があったようなのだよね…


おそらくはそのために、マッチングの際に手心が加えられたのだけど、これが露骨すぎて公式が謝罪するまでの騒ぎになりました。

(サーバーの不具合だった、ということになっていますけどね)


今回は、選択肢は悪くなかったのだけど、紹介するキャラクターの寸劇のシナリオが悪かった。

「無人島と言えばリゾートじゃないの?」の一言があれば、これほど道具に偏らなかったと思う。



▲目次へ ⇒この記事のURL

別年同日の日記

02年 バガン入手

03年 カットパイーン

04年 久しぶりの飲み会

04年 出産祝い

05年 せんべい食いたさ

08年 サーバー故障

11年 節電終了

13年 ワープロの日

16年 箱根小涌園ユネッサンに行きたい人へのまとめ(1/3)

16年 箱根小涌園ユネッサンに行きたい人へのまとめ(2/3)

16年 箱根小涌園ユネッサンに行きたい人へのまとめ(3/3)

16年 秋の家族旅行

16年 小田原城

16年 おもしろ歴史ミュージアム・かまぼこの里

16年 ホテルグリーンプラザ強羅


申し訳ありませんが、現在意見投稿をできない状態にしています

X68000 Z  2022-11-15 19:06:46  コンピュータ

▲目次へ ⇒この記事のURL

X68000 Z の詳細がやっと発表になったのだが…


ここまで日記に一度も書いていなかったので経緯を。


ミニファミコンとか、ミニメガドラとか、昨今昔のゲーム機の公式エミュレータハードが人気がある。

これらの機械、ハードウェアは全部「瑞起」という会社が手掛けているらしい。


その瑞起が、ミニX68000 を作っている、という情報を小出しにしてきた。

そして、9月15日から行われていたゲームショウにモックを展示した。


この時点で分かっていたのは、見た目が X68000 なミニハードだけでなく、実物大でちゃんと動作するキーボードとマウスも再現、キーボードは LED がいっぱいある例の変態的なものがちゃんと動いていて、マウスは現代的にホイールマウスになっているのに、トラックボールにもできるという仕様。

ちなみに、キーボードもマウスも USB 接続。


そして、ゲームショウの会場で、10月8日に詳細を発表し、販売の予約受付も同日から行う、と発表した。

これが X68000 Z という名前だった。


おぉそうか、是非買ってやろう、と思っていたら、10月8日当日になって延期する、という発表があった。

そして、要望の高さに驚いているので、まずは「ハッカーエディション」という、β版扱いのようなものから始める、と。


つまりは、この時点で「皆の要望に応えられるほど高度なエミュレーションは実現できていなかった」ということらしい。


詳細は不明だが、X68k の一部のゲームなどが入っている「ゲーム機」扱いでしか考えていなかったのかもしれない。

でも、ネットでは X68k ユーザー / 当時あこがれていたユーザーが、当時の環境の再現を望んでいたのだ。




当時使っていた人間として、ハッカーエディションを買って人柱をやるのもいいかもな、と思っていた。


今日になってハッカーエディションの詳細が発表された。


X68k として、ではなく、「ARM ベースの Linux 組み込み機として」の開発者の募集だった。

現時点でのエミュレータはβ扱いで、瑞起の想定したアプリは動いているが、「開発などには使えない」と明言されている。


なるほど… X68k には今でも思い入れがあるし、Linux もわからんではない。

でも、組み込み開発の経験求む、と言われると少し違うし、そこまでガチで参加できる時間的な余裕もない。


今後、ブラッシュアップされたら、アーリーアダプタ向けの製品を発表して、その反響次第でやっと一般市販版を作る…かも、とのことだ。

逆に言えば、一般市販版は世に出ない可能性もある。


ひとまず、様子見。




こんな日記を書くくらいには、期待している。


でも…


その昔、1chip MSX というものが発売になったことがある。


当初は MSX1 の機能として発売された。

しかし、FPGA で実現しているので、将来は MSX2 相当にバージョンアップできるようにする、という話だった。


じゃぁ、MSX2 相当になってから買おう、と様子見にした。

その間に、MSX1 相当の機械としても、いろいろ微妙だという噂を聞き始めた。


後に MSX2 になったのだが、なんか買う情熱が無くなってしまい、そのまま。


今回も同じ道をたどりそうな予感が、少しある。



▲目次へ ⇒この記事のURL

関連ページ

X68000Z【日記 23/04/02】

別年同日の日記

01年 11/14

12年 再度JAMSTECグッズ

13年 Intel 4004 の発売日(1971)

15年 追悼:ジーン・アムダール

16年 新しい文盲

21年 町内ウォークラリー


申し訳ありませんが、現在意見投稿をできない状態にしています

iPhone の Javascript で Howler.js を使う  2022-12-06 11:14:34  コンピュータ

▲目次へ ⇒この記事のURL

仕事で作っていたプログラムで、スマホページから、Javascript で、音を出したくなった。


その仕事の中で、PC から音を出すのには Howler.js というライブラリを使用していたので、そのまま使ってみる。


…Android では動くのだが、iPhone で動かない。


まぁ、こういうことはよくある。ネットで情報収集。

最初にユーザー操作で音を出さないと音が出ないよ、と書いたページ多数。


ずっと昔は、Javascript から自由にメディア再生できた。

そうしたら、開いた瞬間に問答無用で音楽を流したり、広告動画を流したりするページが多数あり、多くの人が迷惑していた。


そんなわけで、今の Javascript では、「ユーザーの操作により起動されたプログラム」の中でメディア再生を行う必要がある。

一度再生させれば、ユーザーの許可を得たことになり、後は好きなタイミングで再生できる。


これを解説したページは、その移行期に書かれたのだろうが、今回の問題はそれではない。




2020 年頃の記事で、iPhone のアップデート時にバグがあって Audio 再生がうまく行かないよ、というのがあった。

これはのちにバグ修正されたらしい。


2022 年2月ごろの記事で、iPhone のアップデート時にバグがあって Audio再生がうまく行かないよ、というのがあった。

これはのちにバグ修正されたらしい。



…別々のバグだが、iPhone では時々こういうことが起きるようだ。


2022年8月ごろの Howler.js コミュニティ掲示板の書き込みで、iPhone でうまく音が鳴らない、というのがあった。

html5audio を有効にすると鳴る、という対処法が書かれていたが、これは目的のものとは違う。


html5audio は、本当に自由に音を鳴らせる仕組みだ。

その一方で、非常に処理が重い。単に音を再生したいだけなら、この仕組みを使うのは違う。


しかし、Howler.js は音を鳴らすライブラリなので、この仕組みに対応していて、有効にすればそちらが使われる。


試してみたら確かに音は出たが、それ以外の処理に支障が出るほど重い処理になった。




そんなこんなで苦労したが、ここらへんで答えを書こう。


近年の iOS Sagari のアップデートで、メディア再生の「許可」の方法が変わったらしい。


以前は、先に書いた通り、ユーザーの操作の際にメディア再生を行えば、それ以降の再生も許可された。


Howler.js ではこの仕組みに自動で対応していて、ライブラリを読み込んだだけで、「画面のどこかをクリックしただけで動くプログラム」を仕込んでくれる。


このプログラムの中でメディア再生を行えば、以降のメディア再生は自由になるのだ。

前提として、一度画面に触ってもらう必要はあるのだが、それはユーザーのコンテンツでうまく導いてやる必要がある



さて、この「Howler.js が自動で行うメディア再生」は、Howler.js 自体の中に「無音」の音が仕込まれていて、それで行う仕組みだった。


そして、iOS はメディア再生の許可方法を変えた。

今後は、「ユーザーが許可したメディアファイル」のみが、自由に再生可能になる。


ここで、Howler.js ライブラリを使って出したい「音」のファイルと、Howler.js が自動で行う「無音」のファイルは、当然ながら違うものなのだ。

結果として、ライブラリ使用者が鳴らしたい音は、iOS ではどう頑張っても鳴ってくれない。




回避方法。

Howler.js に鳴らすファイルの URL を指示するはずだが、それとは別に、audio タグで同じ URL のファイルを読み込もう。


そして、ユーザー操作で、この audio タグのファイルを play し、即座に pause する。

さらに、Howler.js を使い何らかの音を出す。


なんかややこしいけど、これで以降は自由に音を出すことができる。


audio タグと Howler.js の2重に「音を出す仕組み」を用意する形だが、使うのは同じファイルなので、両方に許可が出るようだ。



しかし、両方で音を出す指示をしないと、正しく音が出てくれない。片側でも良さそうなものなのに。

これはなぜかわからない。


Howler.js には「サウンドスプライト」という機能があり、複数の短い音を1つのファイルにして、その「任意の部分」だけを再生することで、短い音を再生できる。


本来は、多数のサウンドファイルを1つにまとめてロードのオーバーヘッドを減らすのが目的なのだが、全部で「一つのファイル」なので、このファイルに対して許可を得れば全部の音を鳴らすことができる。


audio タグ側を play して pause したのは、全部の音を出すのを避けるためだ。

また、audio タグを準備するのに Howler.js も使用するのは、サウンドスプライト機能が便利だからだ。



なんだか無駄が多くて不格好な解決方法なのだけど、とりあえずはこれで iPhone でも Howler.js が使える。


▲目次へ ⇒この記事のURL

別年同日の日記

07年 妻の誕生日

10年 誕生日に必要なもの

12年 Nexus 7 買った


申し訳ありませんが、現在意見投稿をできない状態にしています

Windows 11 の 22H2 アップデートでネットがつながらなくなる  2022-12-12 15:25:54  コンピュータ

▲目次へ ⇒この記事のURL

表題の通りの不具合の修正方法なのだけど、同じ症状で困っていて解決方法を探している人は、行の頭が ▼ で始まる部分まで読み飛ばしてください。


今回書きたいのは「解決方法」ではなくて、その過程が面白かった記録なので。




長女が、PC がネットワークに繋がらなくなったと言って助けを求めてきた。


僕の前にすでに妻に相談していたらしいのだが、妻が解決できなかったので僕に回ってきた。

妻もそれなりに PC の知識はあるのだが、そこで解決できていないのだから、初心者向けのトラブルではない。


最初は WiFi の設定が OFF になっただけでは、とか思ったのだが、そんな簡単ではなかった。

見た目の上では、「WiFi 接続はできるが、その WiFi にネットワーク接続がないと言われる」状態。



リブートしても治らないので、いろいろと情報収集。

少し前に Windows 11 のアップデートである、22H2 がインストールされていた。


しかし、話を聞くと、インストール直後は問題なくネットワーク接続できていたという。

どこかでおかしくなったのだろうが、それが何かわからない。



22H2 でネットがつながらなくなった…というキーワードで google 検索。

しかし、20H2 でネットがつながらくなった、という情報が多数見つかるが、22H2 の話はない。


また、20H2 の時の対処法を試してみようとしても、最初から違う。

20H2 の時は「ネットワークのプロパティを開き、接続をプライベートに」が初手だったようなのだけど、ネットワークが接続できていないためか、プライベートかパブリックかの設定選択肢が表示されない。



もしかしたら 22H2 でこの設定なくなった?

とまで思ったのだけど、後でわかるがそうではなかったようだ。


ネットワークがプライベートかパブリックかは、「ネットワーク」に属する設定なので、たぶんネットワークに接続できない状態では表示されないのだ。




しばらく悩んで、問題の切り分けを試みる。


WiFi にはつながらないようなので、自分の携帯電話に Bluetooth テザリングしてみる。

ちなみに、携帯電話は WiFi に繋がっているので、通信料金がかかるようなことは無い。


これは、問題なくネットワーク接続できた。

ということは、WiFi 関連がおかしくて、インターネット接続自体はおかしくないのだろう。


WiFi のドライバを一度削除すると、次の起動時に勝手に再インストールする、という情報を見つけるが、ネットにつないでいない状態でインストールができるのかよくわからないので保留する。

(多分、システムディスク内のドライバから適切なものを選ぶだけだと思うが)


Bluetooth のテザリングで、通信のどのレベルの階層が使われているのかわからない。


インターネットの通信は、いろいろなレベルで階層化されており、状況に応じて交換可能だ。

たとえば、WiFi はイーサネットケーブルの代わりを行うものだ。


では、Bluetooth テザリングも、イーサネットケーブルの変わりなのか?

それとも、もっと上の IP プロトコルの代わりくらいまで行っているのか?


問題を切り分けたいと思ったのに、その切り分けの範囲がわからず悩む。




ここで少し、ネットワーク知識のお話を。


インターネットで通信を行うとき、この通信は非常に多くの「層」を経由して行われている。


一般的には7層あることにされているが、これは後付けで整理したものだ。

本当は、もっとぐちゃぐちゃとして、混然一体として、綺麗に切り分けられるものでもない。


しかし、この切り分けをうまく使えば、層ごとに別のものに交換が可能だ。



一番下は「物理層」。昔は、ネットに接続すると言えば、イーサネットケーブルを使うものだった。

しかし、電話回線を使うこともできたし、今では WiFi もある。

携帯電話の電波を使ってネット接続するのも普通のことだ。


全然特性が違うのに、どれを使っても同じように通信できるのは、物理層が「どのようなことができればよいか」が規定されていて、その規定を守れば交換可能だからだ。


物理層の上には、どのように送受信を行うか、という規定を行っている、ネットワーク層がある。

その上には、ネットワーク層を使ってどのように「意味のあるデータのまとまり」を送受信するか、という規定を行う、トランスポート層がある。


これより上は、クライアント・サーバ間の取り決めだ。セッション層という。

例えば、Web ブラウザで Web サーバにアクセスする、というのはセッション層だ。


先に Bluetooth のテザリングで、Web アクセスできるのは確認した。

これは、セッション層より上は問題ないらしい、という問題の切り分けを行ったことになる。


しかし、その下のどこがおかしいのかは、よくわからなかった。




情報を求めて、Windows の設定画面やドライバ画面をいろいろ見て回る。


どこだったか忘れたが、「ネットに接続できていない」にもかかわらず、Windows マシン自身の IP アドレス表示が行われた。

(ネットワーク設定画面には表示されていない。ネットに接続できておらず、IP アドレスはないためだ)


この IP アドレスが、我が家のローカルネットワークのものではなかった。



IP アドレスがネットワークのものと違う場合、そのマシンはネットワークに「物理的には接続している」にもかかわらず、トランスポート層での通信を行うことができない。


通常、IP アドレスは自動設定されるのだが、うまく行っていないのか?

と考え、WiFi 接続設定の画面で、ネットワークの設定を手動で行ってみる。


マシンに仮に固定 IP アドレスを設定し、ネットマスクとデフォルトゲートウェイとプライマリ DNS サーバを設定。


今度は、無事ネットワークに接続できた。




どこに問題があるかは判明した。DHCP だ。


先ほど、ネットワーク階層のどこに問題があるかを切り分けようとしていて悩んでいたのだが、DHCP はそれらの階層とは違うところにある。


あえて言うならばトランスポート層なのかなぁ。トランスポート層の設定を自動的に行ってくれる仕組みなので。

しかし、これは「設定を行う」という仕組みで合って、トラブルが起きてもトランスポート層のトラブルというわけではないのだ。


先ほど書いたが、ネットワークは7階層から成っている。

そして、インターネットにも使用されるトランスポート層である、「インターネットプロトコル」接続では、設定がなかなかにややこしい。


もっと厳密にいえば、インターネットプロトコル ver 4 、略して IPv4 の設定がややこしい。

歴史的経緯により、後から機能が足され続けてきたからだ。


(ちなみに、IPv6 というプロトコルもある。いつかは v4 に変わる予定だったが、一長一短あって今は共存状態だ)


そして、IPv4 のややこしさを解消すべく、DHCP という仕組みが作られた。

DHCP は、ややこしい IPv4 の設定を自動で行ってくれる。



さて、今回どうやら Windows が DHCP を利用する仕組みにバグがあったようで、自動設定がうまく行っていない。

そのため、ネットワークにうまく接続できないのだ。




▼問題の解決方法


冒頭から読み飛ばしてきた人は、ここから読み始めて欲しい。


さて、問題が DHCP だと分かったところで、再度検索。


今までは「ネットワークに繋がらない」とか、ふわっとした検索語句だった。

しかし、「Win11 22H2 DHCP trouble」で検索すれば、このことを書いた英語ページが多数見つかった。


なるほど、やはり 22H2 で、DHCP の設定ができなくなるバグがあったらしい。


で、気になる修正方法は、「すでに修正アップデートがあるので、アップデートすること」。


なるほど。ネットワークにつなげないトラブルを解消するために、ネットワークアップデートが必要。



先に書いたように、DHCP による自動ネットワーク設定ができないだけなので、IP アドレスやネットマスクなどの設定を手動で行えば、ネットワークには接続できる。


恐らく、それなりのネットワーク知識がある人でないと設定できないけど。


設定方法などは、ネットワークにより異なる、としか言いようがない。

だって、「ネットワークごとに異なる」部分の設定を行うためのものだから。


今このトラブルで困っている人は…頑張ってください。

問題点と解決方法は示しましたが、解決のための「設定パラメータ」はどこかから入手する必要があります。



長女のマシントラブルの場合は、でアップデートで無事修正された。



22H2 へのアップデートの後、「数日後に」問題が出たのだけど、この数日は大丈夫だった、というのは謎。


何らかの理由による「猶予期間」があるかもしれないのは事実なので、22H2 にアップした人は、すぐに追加のアップデートがないか確認しましょう。



▲目次へ ⇒この記事のURL

別年同日の日記

01年 12/11

02年 粗大ゴミ

11年 カレンダー

12年 nexus 7 と US キーボード

14年 ロバート・ノイス 誕生日(1927)

17年 IP電話


申し訳ありませんが、現在意見投稿をできない状態にしています

SSL 証明書期限切れ  2022-12-26 19:35:10  コンピュータ

▲目次へ ⇒この記事のURL

当ページが、昨日未明から先ほどまで、うまく見られない状態になっていました。

その間に見に来てくださった方には、大変申し訳ありません。


原因は SSL 証明書切れです。

Let's Encrypt で発行してもらい、サーバに自動更新するように設定してあるのですが、9月25日の未明に更新したのを最後に、更新されていませんでした。


Let's Encrypt は無料の SSL 証明書発行サービスなのですが、有効期限は90日間と短めです。

Linux サーバに設定をおこない、毎週1回は更新プログラムを動かしていました。


と言っても、実際の更新は「残り1か月をきったら」行われるようになっています。

これが、どういうわけか10月の半ばから、更新のための接続に失敗するようになっていた模様。

原因は不明です。


で、昨日未明に期限切れを迎え、サイトのSSL接続ができなくなっていたのですが、昨日はクリスマスで家族団欒していたので、自分のサイトの不調に気づきませんでした。


今日の昼に気づいたものの、仕事があるために作業できず、先ほどやっと復旧したところです。




復旧方法は、単に新しい証明書を取りなおしただけ。

久しぶりなのでやり方を忘れていましたが、ネットを調べれば解説記事は山ほど出てくるので、ここでは特に解説しません。



▲目次へ ⇒この記事のURL

別年同日の日記

12年 クリスマス

15年 チャールズ・バベジ誕生日(1791)

16年 コラムス 97 余談


申し訳ありませんが、現在意見投稿をできない状態にしています

ONU 不調の顛末  2022-12-27 13:14:58  コンピュータ

▲目次へ ⇒この記事のURL

なんか、ネットの不調の話ばかり書いているな。


昨日は SSL 証明書が失効していた話を書いたが、実はそれよりも前の話。

NTT の光回線を使用していると、外からくる「光」を、電気信号に変換する ONU という機械までが NTT のサービス区分となる。


そのため、ONU は NTT からのレンタル品なのだけど、どうも2週間くらい前からこの ONU の調子が悪くなった。




インターネットは様々な技術の寄せ集めでできているので、いつどこで不具合が起きるかわからない。

急に回線がつながらなくなり、何もしないでも1分もすると復旧する、ということもたびたびある。


2週間くらい前のその日も、ネットワークがつながらなくなったので「自然に復旧するだろう」としばらく待っていた。


でも、復旧する兆しがない。

こういう時は、ルータにログインして様子を見る。


ネットワークが切断していた。再接続指示。

普段は再接続は勝手に行われるのだけど、明示的に指示を出してみる。


しかし、どうもうまく接続できない。


じゃぁ、ルータの調子が悪いのかな。再起動。しかしうまく行かない。


うーん、もっと上流か。

プロバイダや NTT の障害情報を調べてみるが、特に障害は出ていないようだ。


障害箇所を絞り込みつつ、すると NTT の基地局などよりは内側で、ルータよりは外側。


その日は風が強かった。風でどこかのケーブルがおかしくなった可能性もある。

そんなもの、自分の手ではどうしようもない。


でも、自分で対処可能なものが1つあった。

ONU をリセットしてみよう…とおもったが、リセットボタンも電源ボタンもない。

基本的に常時電源入れっぱなしで使うものだからだ。


仕方ないので、コンセントを抜いて、10秒くらい待ってまた入れてみた。

これで無事復旧した。




その後も、2~3日に一回同じ状態になる。ONU をリセットすれば復旧する。

ONU はレンタルだと書いたが、レンタルなので「再利用」もされる。


我が家が今の光回線を契約したのは3年前で、ONU もその時に来たものなのだが、ONU の製造年月日を見たら 2008 年だった。14年も前。


これは ONU 故障だろう。

この時点で、最初の障害から1週間ほどたっていた。修理を依頼したところ、技術者が来られるのが1週間後、という。

不便だが使えているので、1週間くらい待てる。それでお願いする。


実は、修理を待つ間にも、半日で3回のリセットが必要になった時などあったのだが、昨日修理に来た。




光回線も「接続」ポイントが緩くなったりして不調になることはあるらしい。

なので、技術者としては近所の電柱も点検して回ってくれた。


しかし、ONU も古いし、僕が細かく状況を切り分けていたので、おそらくは ONU の故障なのでしょう、ということで交換。


以前は PR-S300 という機械だった。

ネットで調べたら、PR-S300 が不調になったら、同じ PR-S300 に交換、レンタル契約がそうなっているから…という話を見かけていた。


でも、PR-600 という機械に変わった。

基本機能は変わっていないし、何が違うのかよくわからないけど。

(おそらく、14年も前の機械はすでに在庫が無くて、後継機に交換になったというだけだろう)


もともと不調は2~3日に一回だったので、これで治ったのかどうかはまだわからない。



これで、今回書いたような顛末記を書こうと思って自分のページにアクセスして、昨日の障害に気づいた、というわけ。




NTT の光回線で、電話と、テレビの電波も頼んでる。


前の機械が不調になった時に確認すると、ネットがつながらなくなった時は、電話もつながらなかった。

しかし、テレビは見られた。


新しい機械の導入時、接続してから確認したら、電話とテレビはすぐに繋がった。

しかし、ネットは繋がらない。技術者の人が LED 見て「ファームウェアアップデートが入ってしまったので、しばらくかかります」と言った。


…ファームウェアアップデート中でネットがつながらない状態でも、電話やテレビは繋がるのか。


ここらへん、どうなっているのか知らないけど謎技術。



▲目次へ ⇒この記事のURL

関連ページ

ネットワーク障害【日記 24/06/23】

別年同日の日記

02年 クリスマスプレゼント

03年 飲み会

03年 日記エンジンバージョンアップ

16年 コラムス 97 サターン版


申し訳ありませんが、現在意見投稿をできない状態にしています

新しい年に…  2023-01-02 16:31:35  コンピュータ

▲目次へ ⇒この記事のURL

新しい年に…

新しい年にあわせ、キーボードを新調した。


…いや、別に新年だから買ったわけではないのだけど、12月頭ごろに「何か別のものを買う機会があったら一緒に買おう」くらいの気軽な気持ちで Amazon のカートにキーボードを入れていたのだ。


それを、年末に仕事が休みになり、別の品物を買おうとしたときに思い出した。

購入したら昨日元日に届いた。


そういうわけで、新しい年に新しいキーボード、となったわけだ。

この日記は今、新しいキーボードで書いている。


(実は、昨日の日記も新しいキーボードで書いていたのだけど)




新しいキーボードの使い勝手を…と行きたいところだが、前と同じものを購入したので全く変わらない。

前の製品は、2016年に購入していた


5年半も使っていて、最終的に不調が一切なかった。

しかし、5年半の間にキートップの文字がすり減ってしまった。

この日記冒頭に添付した写真を見るとすり減り具合がわかるだろう。

(手前のものが古く、奥に置いてあるのが新しく購入したもの)


普段キーボード見ないのですり減っていても問題ないのだけど、慎重に入れる必要があるパスワードなどを間違えることが時々ある。

(仕事柄多数のパスワードを使う必要があり、内容がランダムに近いものなので、手元を見て確認しながら入力している)


それで、新しいのを買うことにしたのだ。




それ以前に使っていたキーボードは、3年程度で不調になることが多かった。

それが5年半も問題なく使えていたのだ。当然同じものを買うことにした。


マイクロソフトの有線キーボード。それも一番安いものだ。


あ、今過去の日記を読み返していて気づいた。

5年半前に買った時は、990円だったらしい。今回は 1391円だった。

一番安いやつ、と言いつつ、少し値上がりしている。


まぁ、5年使えることを考えたら十分に安いけど。


昔から、マイクロソフトはマウスやキーボードに定評がある。

その品質の高さを、よく知ることができた。




まったく同じ製品だが、変わったことが一つ。


5年半前に買った時は「Windows 8 / 10 対応」だった。

今回購入したものは「Windows 10 / 11 対応」になっていた。


普通のキーボードだから、対応のために変わえるところはない。

時代に合わせて箱が変わっただけだ。



▲目次へ ⇒この記事のURL

別年同日の日記

22年 あけましておめでとうございます


申し訳ありませんが、現在意見投稿をできない状態にしています

2つのタブレット  2023-03-07 17:07:44  コンピュータ 家族

▲目次へ ⇒この記事のURL

高校を卒業した長男、大学受験も試験は終わって区切りがついたし(まだ発表待ちのところがある)、部屋を片付けていた。

そして、「そういえば、こんなのあった」と未開封の箱を持ってきた。


転校した際に、転校先の高校では全員持つことになっているから、と購入した、学校指定のタブレット端末。

転校したのが遅かったこともあり、使わなかった。だから新品未開封のまま。


前の高校では学校ではPCルームがあってそちらを使い、家では各自の端末を使い…という形をとっていたので、長男は自分のマシンを持っていた。(というか、高校入学時に買った)


転校先の高校では、学校では特にPCは使わず、学校指定の端末は「家からネットワークにつなぐときなどに使う」ということになっていたのだが、長男は自分のマシンでやっていた。


というわけで、未開封だったのだ。




長男はいらない、というので、初期化して使い物になるかどうか開封の儀。


ASCON AT-11、という聞いたこともない機械だった。

調べてみると、ASCON は教育用にPC導入などのサービスをやっている会社で、「PCを売っている」のではなく、PCを学校で使うためのコンサルタントサービス全体を売っているようだ。


そのため、新品未開封で電源を入れたにもかかわらず、すでに長男の名前のアカウントが作ってあり、パスワードなども設定されていた。

(初期パスワードを書いた紙は同封されており、すぐにパスワードを変えるよう指示もあった)


また、教育現場で使うための、おそらくグループウェア(Google Classroom のようなもの)も入っているようだった。

でも、すでに卒業したので接続しない方が良いだろう。そのまま置いておく。


というわけで、さっそく初期化を試みる。

問題無く初期化できそうで、さらに Windows 11 にアップデートできそう、と分かったので実行。




ところで、この AT-11 は、キーボードを取り外してタブレットとしても使える、いわゆる「デタッチャブルPC」だ。


本体の後ろにはキックスタンドが付いていて、スタイラスペンも付属する。

…まぁ、Microsoft が Surface で作り上げたスタイルだな。


時間がかかったが、Windows 11 が入ったところで使ってみる。

キーボードの感触は悪くない。スタイラスペンもうまく動く。


しかし、キーボードについている、タッチパッドがどうもよくない。

操作していて思ったのと違う挙動をするのでイライラする。


少し冷静に考えて、理由が分かった。

タッチパッドを2本指でスワイプすると画面スクロール、というのは一般的な操作なのだが、この方向が自分が思っているのと逆だ。


スワイプで画面を動かす場合は、僕は「画面を掴んで動かす」イメージで動かしたい。

しかし、この機種では、「スクロールバーを掴んで動かす」のだ。これは方向が逆になる。


まぁ、その程度は設定でどうにでもなる。

コントロールパネルから、タッチパネルの設定を開いて…と思ったが、どこにもない。


どこに設定画面あるんだ?



探してみてもどこにもなかった。

これは、デバイスドライバが入ってないのかな? とりあえず動いているが、設定は別アプリで行う、という例もある。


どこの機械だろう。

Synaptics か ELAN か 、または ALPS か…そのあたりだろうと調べてみるがどうも違う。




調べる過程で分かった。


この AT-11 という端末、Chuwi UBook のカスタム OEM だ。


Chuwi UBook は、実は家にもある。11.6インチだけど。妻のマシンなので僕はあまり触ってないけど。

AT-11 は 10.1インチ。調べてみたが、このサイズは UBook にも、その後継機である UBook X にもなかった。


しかし、気づいてみればキックスタンドの形状は同じだし、スタイラスペンも同じものだ。


ここを手掛かりに、タッチパッドをさらに調べると、衝撃の事実が分かった。


Chuwi のタッチパッドは、タッチパッドの形をしているが、信号などは完全にマウスを模倣していて、Windows からはマウスとして認識されるそうだ。


そのため、タッチパッドの設定、という概念自体が存在しない。


タッチパッドのハードウェア側で、Windows で標準的になっているタッチパッドのゼスチャを認識し、キーボード信号として発信している。


そのため、ゼスチャが邪魔だから消したいと思っても、その設定、という概念が存在しない。



なんてこった。

ソフトウェアで認識させるようなことを、すべてハードウェアで完結して行っている。

その技術自体はすごいのだが、そうじゃない。ソフトウェアで行うから微調整が効くのだ。



スワイプ時のスクロール方向は、レジストリの設定で逆転させられると分かった。

一部のゼスチャは、AutoHotKey というソフトを使って使えないようにする、という定番技が分かった。


しかし、一番誤認識してイライラする「画面のズーム」というゼスチャが、どうやっても殺せない。


さらに悪いことがある。

このタッチパッドは左右前端を押し込むことで、左右のマウスボタン相当の動きをするのだが、このクリックを行うために左右前端を触ると、タッチパッドに触れたことでカーソルが動いてしまう。

そのため、クリックをまともに行えない。


一応、「一番端の角の部分」だけ、触っても反応しないように作ってあるようだ。

しかし、慎重に触らないといけない、というのは使っていてストレスが溜まる。


このタッチパッドは、Chuwi 端末を使用している多くのユーザーの悩みの種のようだ。

キーボードを打とうとすると誤認識して邪魔だから、「ない方がはるかにまし」という人もいる。

(その場合、デバイスマネージャからデバイスを無効化して、完全に使えなくしてしまう、という技がある)




AT-11 、ダメなのはこのタッチパッドがすべて。

他は、素直なつくりの Windows マシンだ。


教育用で安くするためか、かなり CPU は非力だけど。

しかし、市販されてない小さなサイズで、持ち運び便利なサブノートマシンとしてはなかなか魅力的。


我が家では妻が使ってみようかな、と言っている。

先に書いたが、妻は現在 Chuwi の UBook をサブマシンとして使っているが、これは「タブレット端末」で、キーボードがついていないために少し不便を感じているのだ。




さて、今日の日記は「2つのタブレット」の話だ。もう一つのタブレットの話をしよう。



長女は目標としていた高校に合格したが、この高校では「毎日持ち運ぶ」PCを必要とするので、各家庭で購入してください、という通達があった。


推奨は Chromebook 。しかし、これは「クラウドを使用する」という意味合いでしかないため、最近の WebBrowser が動いて、WiFi に接続できるマシンであればなんでも構わない、家にある機械の流用でもよい、という説明になっていた。


他にも細かな規定があったが、常識的な内容。


そして、学校に出入りの業者の斡旋品のチラシも入っていたが、学校としてはこれを買うように指示するものではない、とわざわざ明記してあった。


さて、業者の斡旋品を検討する。ASUS Chromebook Flip CR1 BP0003


CPU は Intel Celeron 。少し非力だが、Chromebook としては悪くないだろう。


ただし、Intel 系で Chromebook となると、Chromebook の売りの一つである、Android アプリの使用にはかなり制限が出る。

Android は CPU を問わない前提ではあるが、事実上 ARM でないと動かないアプリもあるためだ。


難ありなのが、重さ。1.42kg 。

ノートパソコンとしては軽い方ではあるが、教科書多数と一緒に毎日持ち歩くとなると、ちょっと重い。


中学では iPad が支給され、使っていた。この重さを測ってみたら、990g 程度だった。(キーボード込み)

長女の実感としては、これより重いのは嫌だなぁ、とのこと。



探してみる。

Lenovo IdeaPad Duet 370 Chromebook が良さそう。

この1世代前の機械である、Duet 360 は僕が普段使用しているので、安心感もある。


重さは 980g で iPad とほぼ同じ。

CPU は ARM 系。Celeron より非力なのが気になるところだが、僕の機種より2倍程度の能力があるので、実用上の問題はないだろう。



学校推奨の ASUS Flip は画面が 11.6 インチ。Duet 370 は 10.95 インチ。少し小さい。

一方で、解像度は Flip が 1366x768で、Duet 370 は 2000x1200 。広い。


実売価格はほぼ同じだった。

Flip は学校の出入り業者の価格で、Duet はネットで調べた最安値だけど。



あとは本人の好みだな…と思って長女に聞いてみると、小さければ持ち運びもしやすいし、何よりも軽い方が良い、というので Duet 370 を購入することに決定。




で、このタブレットが今朝届いた。


先ほど長女が学校から帰ってきたので開封したが、充電しないと起動しないようだったので、現在充電中。


まぁ、Chromebook なので設定項目などもほとんどなく、何の違和感もなく使えそうだ、と思っている。

1世代前の機種は僕が今でも快適に使っているしね。





以上で話は終わりだが、思い出したので余談。


長女の中学では iPad が支給されている、と書いたが、明日卒業式なので、今日返却した。


昨日、返却前にデータを全部取り出したい、と言われて確認したら、データはすべて Google Drive に入れられていた。


まぁ、そのアカウントが教育用で消されてしまうので、PCからアクセスして、全ファイルを Zip に圧縮して取り出し。

長女の個人アカウントの Google Drive に「中学校」というフォルダを作り、その中に全部突っ込んどいた。


(iPad 特有のアプリなどは授業では使わず、Google スライドや Google Doc 、Google Spreadsheet などを使っていたそうだ。

 だから、データさえ突っ込んでおけば、見たくなった時にまた見ることができる。

 しかし、なんで iPad にしたのだろう? Chromebook の方が安くて管理簡単に思えるのだが…)



学校のお勉強データには興味が無くて、消えてしまっても構わない、という生徒もいるだろうが、取っておきたい、という子もいるだろう。


長女が僕に相談してきたのだから、学校ではこうした保存方法は教えていないと思われる。


学校の勉強で作ったものなんて、多分数年後に見たら拙くてたいして価値のないものだと思う。

しかし、それを見ることで「当時の想い出」が一緒によみがえってきたりして、消してしまうには惜しいものだと思う。




▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

家族

別年同日の日記

02年 3/7

03年 社会科見学

04年 舞岡公園

15年 ゴールデンアックス・ザ・デュエル

16年 【訃報】レイ・トムリンソン

17年 スティーブン・クーンズ 誕生日(1912)

21年 縁むすびカード


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -