目次
2023-06-08 68の日
2023-05-21 ディスクイメージ公開
2023-05-07 X68kサルベージ
2023-05-05 X68k実機と格闘中
2023-04-24 コラムス97の配信
2023-04-10 素人プログラマから見たX68k
2023-04-10 続 X68000Z
2023-04-02 X68000Z
2023-03-07 2つのタブレット
2023-01-02 新しい年に…
2022-12-27 ONU 不調の顛末
2022-12-26 SSL 証明書期限切れ
2022-12-12 Windows 11 の 22H2 アップデートでネットがつながらなくなる
2022-12-06 iPhone の Javascript で Howler.js を使う
2022-11-15 X68000 Z
2022-09-26 スプラ3のフェス
2022-08-19 vue-tweet-embed で表示していた Tweet が崩れる
2022-07-23 プリンタ購入
2022-06-14 CAPCOM
2022-04-05 代入の評価順
…同じテーマのほかの記事
今日は 68の日、らしい。6月8日だから。
ちょっと安易すぎないか?
まぁ、先日から何度も書いているが、X68k の公式エミュレータとして、X68kZ という製品を作った会社がある。
僕はクラウドファンディングで初期モデルを購入したが、ここで出た意見を元に改良したものが正式に発売することになった、そうだ。
わずかな改良だが、一番欲しいのは「リセットボタンがソフトウェア制御になった」ことか。
初期版は、リセットするとハードウェア本体がリセットしてしまい、起動が遅い。
しかし、リセットボタンをただのスイッチにして、エミュレータのソフト内で「エミュレータ上のプログラムに再起動をかける」ようにしたそうだ。
で、先日から少しづつサルベージしているので、「気に入ってた小さなゲーム」も見つけることができた。
今日に合わせて公開できれば良かったのだが、まだ何の準備もしていないので公開できない。
ゲームに限らずとも、もう何本かこうしたソフトがあれば、ディスクにまとめて公開しやすいのだけど。
以前の日記に書いた、X68k からサルベージした「夢日記」だが、ゆっくり読んでみたらなかなか面白い。
中には、いまだに覚えているものもあった。
これは、日記に書くことで記憶が固定されていたのだな。
でも、覚えていても詳細は忘れているので、面白いのだ。
一つ短いのを転載してみよう。
1992年の8月4日に見た夢らしい。
8月4日(火)
ヘミングウェイの猫を探している。
高校の体育館の横、学校机が沢山積み重ねられ、ゴミゴミとしたところで、その
猫を捕まえた。黒い小さな猫で、かわいい。
スーツをきて、ソフト帽をかぶった初老の紳士が現れ、猫を渡して欲しいという。
この猫は、彼の猫らしい。
猫を渡すと、彼はお礼だと言って、コインを指で弾くように投げた。
そのコインは、とても古く、価値のある物だ。
私が拾うと、彼は次々とコインを投げた。机の上に10枚ずつ並べて、4列と少
しあった。
どうやら、あの猫は貯金箱だったらしい。
これは、当時も意味が分からなくて面白かった夢だった。
猫は貯金箱だった、ってどんなオチなんだ。
自分の書いた夢日記には、自分なりに「夢に影響を与えたと思われる最近の話」も併記しているのだが、これは本当に意味不明。
ヘミングウェイの猫というのは実際にいて、多分どこかで聞いたのが夢の中でキーワードとして出てきたのだと思うのだけど、直近にそういうテレビを見たりしたわけでもなかったようだ。
他にも、妙にドラマチックなものとか、怖くて飛び起きて終わっている夢とか、いろいろある。
面白いのだけど、記述が長いのも多いので、特に転載はしない。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
ここしばらく日記に書いていた、大学時代に作ったゲーム。
やっと公開できる状態になりました。
自作ゲームなどの紹介ページの最後に、ZIP 圧縮したディスクイメージを置いています。
前回の日記に書いてあった、2年の時に作ったゲームが思った以上に未完成だった、という話。
その後、学祭出品版を見つけました。ちゃんとそれなりに遊べる状態になっていたよ。
でも、1面しかないし、敵のバリエーションも少ない。
まぁ、それなりに楽しめるかと思います。
このシューティング以外は…X68kZ では遊べません。
Windows のエミュレータ、XM6 でなら、「それなりに」動きましたが。
今更発表する意味あるのか? と思いつつ、自己満足、自分の記念碑的に置いておきます。
発表するほどのものでなくても、小作品をもう少し作っていたはずなのだが、見つけ出せていない。
結構気に入っていた小さなゲームもあったのだけどな。
BANDITS のディスク内には NYORO というディレクトリがあります。
これは、当時作った小さなプログラム。
nyoro /c8
で常駐して、
nyoro /r
で常駐解除します。
こういうのも、ある程度発掘出来たらディスクにまとめて公開するかもしれません。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
やばい。楽しい。
先日、X68k のディスクサルベージをしている、と書いたのだが、これが非常に楽しい。
いつかやりたい、と思ったまま、面倒すぎて頓挫していたのだよね。
それが、SD カードで受け渡せるという状態になっただけで、どんどんデータを Windows に持ってこられている。
無茶苦茶楽しい。
ディスクはたくさんあるのだが、全部吸い出していたら時間がいくらあっても足りない。
だから、まず「自分が作ったもの」を取り出している。
自分で作ったものは、僕の環境以外に存在しないから。
これが消えたら世界中どこにもなくなってしまうので、最優先で保全するのだ。
そして起きることは、「部屋を片付けようとしていて、昔の新聞を見つけてしまった」状態なのだ。
何もかもが懐かしい。
日記を見つけた、と先日の日記で書いたが、大学1年の秋から始まっていた。
X68k は大学1年の夏休みにバイトした金で買ったので、購入してすぐに書き始めたのだろう。
大学卒業後も数か月書いて、終わっている。
その頃 Mac を購入したのではなかったかな。
ところどころ読んでみたけど、日常がだらだら書いてあるだけで、あまり面白くないので全部は読んでない。
夢日記もあった。
このページの日記でも以前書いたことがあるが、一時期面白がってつけていたやつ。
最終的に、日記をつけることで明晰夢を見ることが多くなり、夢らしい荒唐無稽さが無くなってつまらないのでやめた。
しかし、こちらの方が日記より面白い。
内容がぶっ飛んでいるのだもの。
他に、当時書いた旅行記だとか、偶然に体験してしまった「マルチまがい商法」の勧誘会のレポートとか、ちょっと書いてみた童話とか、色々出てくる…
面白いので、内容吟味せず、とりあえず全部 Windows 側に保存。
文字コード SJIS のままだが、拡張子だけ DOC から TXT に変えておいた。
(当時は、DOC はテキストファイルの一般的な拡張子だった。今は MS-Word が使っているので、TXT のほうが混乱がない)
さて、ある程度当時書いた「個人的な」ファイルを保全できたところで、次は自作のゲーム類だ。
先日の日記でも書いたが、単体のディスクとして起動できるようにしていなかった。
大学祭で発表するのが目的だったので、ハードディスクから直接起動でもよかったのだろう。
これらを、Windows のエミュレータで読み出せるようにしたうえで、単体起動のディスクを作ってみる。
大学2年の時に作ったシューティングゲームは、「未完成」だったことは覚えているのだが、思った以上に未完成だった。
起動すると、いきなり始まる。タイトル画面とかない。
そして、ゲームオーバーになると、終了してコマンドラインに戻ってしまう。
操作もジョイスティックにしか対応していない。
これをいまさら発表する意味はなさそうだが、とりあえずディスクから起動できるようにしてみる。
まず、システム起動できる最小限セットのディスクを作成。
これはたびたび使うことになるので、BLANK.XDF の名前で保存しておく。
これを Windows 上でコピーして新しいディスクイメージを作り、サルベージしたゲームのファイルを書き込んでいく。
そして、AUTOEXEC.BAT でゲームが起動されるようにして、完成。
2年生の時のゲーム、最終的にコマンドラインに戻ってしまうので、そしたらすぐ再起動するようにバッチファイル内でループしてみた。
でも、起動時にデータファイル読んだりして結構遅いので、良くない。やめた。
でも、ひとまず完成。
調子に乗って、大学3年の時に作ったゲームも同じように起動できるようにしてみる。
こちらのゲームの方がいろいろと問題がある。
マイク入力が必要なのだ。
こんなの、発表しても X68kZ で遊べないし…
とおもったら、Windows のエミュレータ、XM6 ではマイク入力もエミュレートしているのね。
ちゃんと遊べた。声出すの恥ずかしいので、1面クリアまでしかやってないけど。
ゲームオーバーで暴走した。
あ、そうだ。このゲーム、ハイスコア時にマイクで「ヒーローインタビュー」して、その録音をディスクに残す。
だから、対応したディレクトリ構成が必要だった。
…ソースファイルを眺めて、High/ というディレクトリがあればよいと分かったので作る。
もう一度遊び、ハイスコア記録されてタイトルに戻ることを確認。
大学祭のために作ったから、「遊んでくれた人」の人数なども記録するようにしているし、ハイスコアの録音データも、ランキング外になっても全部残している。
だから、フロッピーディスクで遊んでいたら、しばらくたったところで書き込めなくなっておかしくなるはず。
しかし、それは注記した上で公開しても良いかな、という感じ。
大学4年の時のゲームは、まだサルベージしてない。
このゲームは、マウス2個使うんだよね。対戦ゲーム。
当時、X68k はマウスが2本つなげる、という「非常に珍しい」マシンだったから、それを活かして何かやってみたかったの。
XM6 も、これにはさすがに対応していないようだ。
なので、動くことはあまり期待できない。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
少し前に X68000Z の話題を書いた。
それで、自分が作ったデータをこちらでも遊べたら、という欲が出たのだけど、データを持ってくる方法が、いろいろと面倒くさい。
X68k と Windows をシリアルケーブルでつないで…と言っても、今時の PC にはシリアル端子がないのだ。
USB でシリアル端子を接続するアダプタもあるが、さらにシリアルのクロスケーブル買ったり、いろいろ考えるとそれなりの出費だ。
(ストレートケーブルなら、探せば家のどこかにあるかもしれないけど)
そういえば、X68kZ 発売の前に、「X68kZ は SD カードが使えるから」と、TNB製作所さんが、X68kで SD カードの読み書きをするためのアダプタ作っていた。
あの時は、ちょっと欲しいと思いつつも、自分がわざわざ X68k 実機を出してまで何かをすると思わずに手を出さずにいた。
ネットで販売しているというので見に行ったら、すでに売り切れだった。
メールアドレス登録しておくと、また在庫が出来たら教えてくれるというので登録して…そのまま忘れていた。
(念のため書くと、機器名称は「MMCじょい君」なので、SD カードではなくマルチメディアカードが対象。
MMC は SD カードの元となった規格で、互換性がある。
そして、SDカード機器はライセンス料を払わないと作れないが、MMCなら無料)
5月2日の夜。
寝る前に何気なくメールを見たら、入荷のお知らせが来ていた。1日に入荷したそうだ。
慌てて確認に行くと、すでに残り1個。その場で購入即決。
それが、昨日4日に届いた。連休明けになると思っていたのに、速い。
しかし、昨日はいろいろとやることがあった。すぐには遊べない。
今朝、やっと X68k 実機を取り出して、動作確認。
ドライバのディスクも一緒に注文した。
ドライバは無料配布しているから、Windows から X68k にデータを持っていける人なら不要なのだけど、それができないから困っているのだ。
このドライバディスクが親切で、OS が書き込んであって直接起動できる。
これがないと詰んでいた。
一応、ずっと昔に使っていた設定のまま、HDD 起動は可能だ。
でも、いろいろ古い。MMCじょい君のドライバは、他のドライバにも依存するのだけど、僕の環境には入っていない。
特に、TwentyOne は VFAT 対応版を使わないといけないようだ。
僕の環境は古く、対応版ではなかったのでうまく動かず、少し悩んだ。
(ドライバのディスクから HDD にコピーして解決した)
他にもいろいろ問題があったが、ひとつづつクリアして、午前中いっぱいで SD カード読み書きができるようになった。
さぁ、自分が作ったゲームとかをサルベージするぞ!
…と意気込んだのだけど、思った以上に「ディスクから起動できる」物が少ない。
いまの X68kZ はハードディスクに対応していないので、ディスクから起動して、単体から楽しめないといけないのだ。
自分でゲームを作っていた時は、ハードディスクがついているのだから、そちらから起動してからゲームを起動、というのが当たり前になっていた。
フロッピーディスクに作ったゲームを入れてはあるのだけど、これは HDD の容量の問題で「追い出した」、または「バックアップを取った」もので、単体起動のことは考えていなかったようなのだ。
しかし、自分で作った懐かしいゲームをいくつか起動することはできた。
ジョイスティック前提で作ったゲームとか、今ジョイスティックがないために画面を見るだけ。遊べなかった。
あと、X68k のマウスも、どこに行ったか見当たらない。
だから、マウスを使うものも今は実機で遊べない。
というわけで、キーボード作業でディスクイメージを作り、Windows のエミュレータで内容確認を試みる。
…こちらも、HDD 環境整えていないので、単体起動してくれないと見られないのだけど。
年賀状ディスク、ってのが残っていて、大学時代に X68k を持っている友人に送っていたものだ。
これは、ディスクから起動していろいろ見られるようになっている。
正しく起動するディスクイメージを作る実験で、これをディスクイメージ化してみた。
…しかし、もう 30年も前のディスクなので、読み取りエラーが起きる。うまく行かない。
やっと、1枚だけディスクイメージかできた。
今 Windows のエミュレータで内容確認し、身悶えているところ。
大学生の馬鹿ノリとはいえ、あらゆるネタがつまらない。
まぁ、作るのが楽しかったからやっていただけで、アイディアを「作り散らかして」いる感じ。
先日も書いたけど、アイディア一発のくだらないものでも作りやすかったのが、X68k の良さだったんだよなぁ。
ところで、ディスクを見ていて、自分が書いていた日記を見つけてしまった…
まだ中身は見ていないし、公開するつもりもない。
でも、後でサルベージして読んでみたい。青春の甘酸っぱい思い出とか、見たら悶え死にそう。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今年の1月に、タイトー Hey がコラムス 97 の配信をやっていた。
で、今度は VGM ロボット深谷店がコラムス 97 の配信をやったらしい。
Hey は1週間だったが、ロボットは1日だけ。
事前に情報は得ていたが、忘れていて見逃した。
でも、Youtube でも配信を行ってくれていたた。
上のリンクはアーカイブのもので、後からでも見られる。
で、見られるといったところで、特に見所はなかったです。
タイムラインをサムネイルで確認できるので、全部見るまでもなくわかる。
だれもコラムス 2000 まで行かなかったし、当然カンストするような人もいない。
しかし、Hey の配信はニコ動課金ユーザでないと後から見られないが、Youtube は誰でも見られるので、ここに記録だけ残しておく次第です。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
当時の状況を記そう。
当時、ホビープログラマが最初に使う言語は BASIC だった。
8bit 機では、OS は存在して無くて、起動すると ROM に入っている BASIC が動き始める、というのが普通だった。
シャープ製マシンは ROM に入ってなかったけど、本体を買うと BASIC が付属している点は変わらない。
16bit でも BASIC が付属しているのは当たり前だった。
PC98 は、PC88 の BASIC 互換マシンとして作られた。当然 ROM BASIC もあるし、DISK BASIC 、DOS BASIC もある。
X68k にも、X-BASIC が付属した。
今となっては、当時の BASIC の環境は忘れられかけている。
文法は、今でも残っているね。BASIC という言語自体は残っている。
でも、「環境」としては、今と全然違う。
BASIC は OS と、エディタと、デバッガと、実行環境が混然一体となったものだった。
ソースコードをエディットしている最中に、命令の動作詳細を知りたくなったとする。
その時は、その場で命令を実行してみることができる。
実行して、動作を確認して、納得したらソースコードに組み込む。
プログラムが出来たら全体を実行してみるが、途中でエラーで止まってしまったとしよう。
原因調査のため、止まったあたりのソースコードを表示する。
どうも、そこで使われている変数の内容がおかしい気がする。
その場で、変数の内容を表示する命令を打ち込むと、命令が実行され、変数の内容が表示される。
こうやってデバッグを進めることができる。
この環境、プログラムに不慣れな初心者にとって、めちゃくちゃ使いやすかった。
ただ、非常に大きな欠点があって、プログラムの実行速度が遅かった。
いつでもコマンドを実行できる、というのは、コマンドを解釈して実行する機構があるためだ。
そして、プログラムはこれを連続して動かしている。文法解釈をいちいち行いながら動くので、遅いのだ。
一応、BASIC コンパイラというものもあった。
先に書いたように、BASIC はエディタとデバッガと実行環境を総合したような環境で、この環境自体が大きい。
完成したプログラムを BASIC コンパイラに通すと、OS から起動できる実行形式のプログラムを生成してくれる。
この際、速度も改善する。
でも、そもそも BASIC って、初心者にはわかりやすい反面、コンパイラで速度を上げたりしにくい構造だったのね。
PC98 の DOS BASIC の場合、コンパイラを通しても速度は3倍程度にしかならなかった。
X68k の X-BASIC は、当時の他のコンピューターの BASIC とは、文法面から少し異なっていた。
とはいえ、BASIC ではある。先に書いたような、エディタとデバッガと実行環境が統合されたような、初心者でも使いやすい環境は実現されていた。
この、「少し異なる文法」がミソだ。
当時は、パソコンユーザーにはまだ C言語はあまり普及していない。
しかし、X-BASIC の文法は、C言語に非常に近いものだったのだ。
そして、SHARP 純正の C 言語が発売される。
このセットには、X-BASIC のプログラムを C に変換するプログラムが含まれていた。
もちろん、Cコンパイルすれば、機械語の実行ファイルになる。
これは素晴らしい「BASIC コンパイラ」だった。
先に、BASIC は文法を解釈しながら実行する、と書いた。
それに対し、C 言語は、文法解釈を先に行い、結果として「CPU が直接理解できる」機械語プログラムのファイルを生成する。(この作業をコンパイルと呼ぶ)
結果として、プログラムの実行時には、余計な動作が一切入らない。
このため、非常に高速に動くのだ。
PC98 の BASIC コンパイラのような3倍程度ではなかった。
ちゃんと速度を測ったことは無いけど、超高速。機械語として動作するからね。
初心者が気軽にプログラムを作り始め、最終的に十分な速度で動作するプログラムを作れたんだ。
これは、他のパソコンにはない環境だった。
さて、実行速度が速ければプログラムが組めるようになるか、というと、そんなことは無い。
ゲームを作りたいと思ったら、キャラクターを表示しないといけない。
PC98 の BASIC でも、画面に描いたキャラクターを動かすくらいのことはできた。
でも、全てをグラフィックとして扱う必要があった。
キャラクターを描いて、消して、少しずれたところにまた描いて、の繰り返しだ。これで動いて見える。
ただ、「消して」のところで、背景も消える。
「描いて」のところでも、キャラクターを含む矩形全体を描くので、キャラクターの周囲が四角く消えてしまう。
背景があるような華やかなゲームを作るのは、BASIC では事実上無理だった。
じゃぁ、一念発起して機械語を勉強してみようか…とすると、急に高い壁が立ちはだかる。
詳細を書くと長くなるので、過去に書いた記事を紹介しておこう。
BASIC でキャラクターを扱うときは、このことを気にしないでいいようになっている。
でも、機械語だと知らないとダメだ。
適当にグラフィックを扱うと、周囲のドットを破壊してしまうので、それを解消するプログラムが必要だった。
とにかく、ゲームを作りたくてキャラクタを動かそうとすると、それだけでも大変だった。
これ、ゲームに限った話ではない。
ちょっとグラフィックを扱うツールを作ろうと思ったら、マウスカーソルとか、選択範囲とかでグラフィック表示が必要だ。
しかし、処理対象のグラフィックを壊すわけにはいかない。
一旦グラフィックをメモリに退避したり、いろいろ複雑なプログラムを作る必要がある。
もっというと、これは PC98 に限った事情だが、画面を構成する情報を「設定」出来ても「読出し」できないものがあった。
画面を構成する、4096色中 16色のパレットは、設定専用で読み出せないのだ。
ということは、「現在表示している画面を加工して、セーブ」という操作はできない。
グラフィックを加工するフィルタを作りたければ、それだけで、ファイルの読み込み、グラフィック圧縮フォーマットの展開、画像加工、グラフィックの圧縮、ファイルの書き出し、までをセットで作る必要がある。
初心者が何かしようと思っても、余りにも壁が高い。
それが当時の、普通のパソコン環境だった。
X68k には、こうした制約がなかった。
キャラクターを動かしたいなら、スプライトを使えば良い。
動かす際に、以前描いたものを消す、というような操作は必要ないし、背景を壊す心配もない。
周囲だって、適切に「透明」として背景を見せてくれる。
グラフィックを扱いたいなら、1ドットは1ワード(16bit) に対応していた。
1ドットを構成するメモリが、他のドットと共有されることは無い。
さらに、グラフィックを複数重ね合わせることもできたので、グラフィックの範囲指定などで枠を表示しても、グラフィックを壊さない。
こちらも詳細は過去の記事に譲ろう。
とにかく画面関係が豊富で、扱う際に何かに気をつけないといけない、というような制約が少なかった。
(全くないとは言わない)
先に書いたように、グラフィックを加工するプログラムを作りたい、とする。
画像の読み込みと書き出しは、すでに存在しているプログラムに任せることができた。
操作パレットや範囲指定の枠表示などは、表示中のグラフィックに影響を与えないように描けた。
グラフィックの操作は、1ドット単位でメモリの読み書きを行えばよいだけ。
あとは、処理の中心となる「加工」部分をどう作るか。
このアイディアだけに集中すればよい。
初心者でも、自分が作りたいプログラムを作りやすい環境だったんだ。
もう一つ、OPM ドライバの話を書いておこう。これは大発明だったと思う。
また BASIC の話に戻ってしまうのだが、日本のパソコンのBASICは、音楽演奏機能が充実していた。
これ不思議で、海外のパソコンには見られないんだよね。過去に調べたことがある。
ともかく、日本ではパソコンの楽しみの一つに音楽演奏があり、パソコン用の、文字の組み合わせで楽譜を表現する「MML」と呼ばれる記法が出来上がっていた。
当時の MML を使った演奏は、BASIC の中に組み込まれていたのだけど、演奏中は他の動作が止まるのが普通だった。
非力な CPU では、そうしないと演奏のテンポとかを保証できなかったからだろう。
ところが、X68k の MML 機能はそうではなかったんだ。
演奏を開始すると、演奏を続けたままプログラムの動作を続行してしまう。
これにより、ゲームに BGM が付けられた。
最初は BASIC の中だけの機能だったのだけど、すぐに音楽機能は「OPM ドライバ」という名前で切り離され、OS 標準機能の一部になった。
これにより、「全ての」プログラムが、気軽に BGM をつけられるようになったんだ。
これもまた、素人がゲームを作る上では強力な、超強力な機能だった。
他の PC でゲームを作ろうと思ったら、速度を確保することが難しく、キャラクターを表示することが難しく、BGM をつけることも難しい。
この問題が、最初から解決していたのが X68k という環境だ。
だから、素人でも作品を作れたし発表できた。
ゲームに限らず、自分が興味を持つ分野だけを、集中して取り組めた。
それ以外の部分は、すでにあるものを使えばいい。
「大根おろしPRO68k」とか、当時有名な PDS だった。
今でもインパクトで覚えている人が多いようだ。
内容見ると、超くだらない。白い四角をマウスで動かして、画面中央の「おろし金」にこすりつけると、四角が小さくなって白い点々が増える。ただそれだけ。
でも、おろし金のギザギザと、白い点々と、四角い「大根」はちゃんと重ね合わせ処理が行われているのね。
X68k だから別画面に描いているだけだと思う。でも、PC98 でこれを作ろうと思ったら大変な処理になる。
こうした「思いつきの冗談」みたいなものでも、すぐにプログラムが組めてしまう。
そして、もう一つ。重要なピースがある。
X68k は、市販ソフトがほとんどなかった、ということだ。
パソコンを使って何かをしようと思ったら、普通はそれができるソフトを探すだろう。
でも、X68k には市販ソフトがなかった。探すことすらできなかった。
じゃぁ、自分で作るしかない。
仕方がないからやるだけだし、自分用だから多少出来が悪くても構わない。
先ほど書いたように、BASIC でもそれなりのものが作れてしまうのが、X68k だった。
とにかくプログラムを作ってみて、目的を達成する。
そして、自分が困っているのだから、こんなプログラムでも使う人がいるかもしれない、と、当時流行し始めたパソコン通信にアップロードする。
もしくは、雑誌 Oh! X に投稿する。ディスクマガジン電脳倶楽部に投稿する。
X68k にはとにかくソフトがなかった。多少出来が悪くても、動くだけでありがたい。
電脳倶楽部の編集長も、「動いているプログラムは良いプログラム」と言っていた。
多少出来が悪くたって、ないよりはある方がずっといいのだ。
そうか。出来が悪くても、ある方が良いのか。
これが、X68k の当時のユーザーの認識だったと思う。
だから、自分が何か作ったら、出来が悪くても、恥ずかしげもなく公表する。
そういうソフトを見た人は、そのレベルでいいんだ、と、また出来の悪いソフトでも公表する。
この、とにかく公表するし、みんながそれをありがたがる、という構図は、現代でもなかなか見られない。
これが、良いスパイラルを産む。
公表して、みんなにありがたがられた人は、また何か作ったら公表しようと思う。
次の作品へのモチベーションになる。
そうして作品を作り続ける。作り続けるうちに、技術も上がり、もっと良いものを作れるようになる。
X68k のソフトウェア環境は、こうしてユーザーたち自身の手で作られていった。
これが、「無いものは作る」と呼ばれる文化の正体だ。
決して、技術力の高い人間が、なんでも作ってきた、というような文化ではない。
仕方がないから出来の悪いものでも作り、公開し、泥臭く環境を整えていった文化だ。
結果として、すごい人を育てる良い環境になった。
でも、最初からすごかったわけではない。
最後に、今の初心者が X68kZ を使ったら、同じように上達できるか? ということについて。
当時「使いやすかった」と言われる環境だから、今から自分も何か作ってみたい、という人は少なからずいるようだ。
しかし、ここまで読んでくれた人には、答が分かると思う。
「プログラムを作りやすい」というのは、あくまでも当時の他のパソコンに比較しての話。
今なら、何も古いマシンのエミュレータを使う必要はない。
Unity とかを始めて見るのがいいだろう。初心者の内は Scratch でもいい。
どちらも、他の人に作品を公表しやすい環境だ。
X68k がそうであったように、出来が悪くても恥ずかしげもなく公表し、評価をもらえることが大切だと思う。
プログラムに限らない。絵でも音楽でも、今は昔に比べてずっと公表しやすい。
ただ、なんでも有難がられた X68k と違い、今はソフトも情報もあふれている。
出来が悪いと容赦なく叩かれるし、ちょっと初心者に厳しい環境かもしれない、とは思う。
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
X68000Z (以下 X68kZ)が届いて遊んでいるが、思っていた以上に楽しい。
僕はこういうエミュレータにそれほど興味がなかったので、コレクションとして置いておくだけになると思っていた。
せっかくだから少し使ってみよう、とセットアップしたら、思った以上に遊べてしまっている、という感じだ。
当初、X68kZ は「ミニファミコン」や「メガドラミニ」、もっと言えば「ミニPC-8001」と同じように、ゲームを何本か内蔵した形で発売するつもりだったようだ。
でも、当時のファン…所有していた人や、高くて買えなかったが憧れていた人たちからの強い要望を受けて、「パソコンとして」のエミュレータとなった。
もっとも、届いたときの最初の日記で書いたように、ゲーム機としてのモードと、パソコンエミュレータとしてのモードを切り替えられる、二重人格マシンでもある。
付属のゲームは2つしかない。これらはゲーム機としてのモードで起動し、動作が保証される。
一方で、エミュレータのモードでは動作保証がないが、ディスクイメージがあれば好きなプログラムを動作させられる。
ネット上の反応を見ると、「付属ゲームが2つしかない」ことについて失望している人もいるようだ。
メガドラミニ2なんて、ずっと安いのに60本のゲームが入っている。
X68kZ は高いのに、2本しかついてこない。
X68k は、現役当時「業務用のゲームが完全移植できる」パソコンだと言われていた。
ゲーム好きなら欲しいパソコン。でも、高性能なだけに、非常に高価でもあった。
今回、X68kZ を入手した人の中には、当時あこがれていたが買えなかった、という人も多いようだ。
そういう人は、当時のゲームが遊べない X68kZ に失望したのだろう。
でも、僕が「思った以上に楽しい」と言っているのは、エミュレータモードの存在なのだ。
ゲーム機としてのモードは、あまり重要ではない。だから付属ゲームが少ないのも、それで構わない。
エミュレータなら Windows 用のもので十分ではないか、という人もいるだろう。
まったくその通りだ。僕もそう思っていた。
もっと言えば、X68kZ のエミュレーションは最低限の精度しか持っておらず、Windows 用の方が正しい挙動を再現できる。
でも、小さいウィンドウの中で動くんじゃないんだよ。
マウス操作するために、エミュレータ内のマウスと、Windows のマウスを切り替える必要はないんだよ。
いや、それだって全画面モードを使えばいいだけの話。Windows 用のエミュレータで十分。まったくその通り。
だから、あとは単に「思い入れ」と「思い出補正」という言葉に尽きるのだろうと思う。
これは非常に個人的な体験に基づくものになるので、万人に勧められるものではない。
ここで、付属する2本のゲームについて書いておこう。
まず、グラディウス。
当時ゲームセンターで大人気だったゲームだ。発売は 1985年。
ちょうどファミコンブームが始まった頃。
ファミコンは、ゲームセンターで遊ぶようなゲームが家でも遊べる、という触れ込みで売れ始めた。
実際、発売時のキラータイトルであったドンキーコングは、ゲームセンター向けと遜色のない出来だった。(全4面構成が、3面構成に減らされていたけど)
グラディウスも、翌年(1986)にはファミコンに移植された。
原作の雰囲気をよく活かした移植ではあったが、見た目もゲーム性も、随分と違うものになっていた。
ほかのパソコン向け移植も発売された。
MSX 版は、ファミコンとは違う方向性の移植で好評だった。しかし、やっぱり本物とは違う。
それ以外のパソコン向けは、ファミコン版をベースに、更に劣化させた移植だった。
あぁ、やっぱりゲームセンターのゲームを家で遊ぶ、なんていうのは夢だったんだ。
多くのゲームマニアが落胆した、その年の年末、開発中の X68k が公表された。
そこでは、ゲームセンターのものとそっくりなグラディウスが動いていた。
X68k の実際の発売年は 1987年春だが、グラディウスは「X68k ならこんな事ができる」と見せつける、優れた技術デモだった。
ひるがえって現代。
今でもグラディウスは人気で、Nintendo Switch や PS4 にもゲームセンター版の、かなり完璧な移植が発売されている。
だから、ゲームを遊ぶことが目的であれば、わざわざ X68kZ で遊ぶ必要はない。
X68kZ にグラディウスが付属する、というのは、X68k にグラディウスが付属したことに対する、オマージュだ。
X68k はここから始まったのだ。
そしてもう一本。超連射68k。
こちらは、1997年に発表された同人ソフトだ。
X68k シリーズは、1993 年発売の X68030 で終了している。以降後継機は出ていない。
専門誌であった Oh! X も、1995年末で休刊している。
そのさらにあと、1997 年に発売されたソフトなので、実際のところ遊んだことのある X68k ユーザは少ないはず。少なくとも、僕は X68k では遊んでいない。
ただ、作者自身によるWindows 版が 2001年に公開されていて、僕はそちらは遊んだ。
つまり、懐かしのソフト、というものではないし、遊ぶことが目的であれば、Windows でも遊べる。
しかし、当時話題になったのは覚えている。
同人ソフトだからこそ、市販ソフトにはないような技術的チャレンジを行っている。
巧妙なプログラムにより、X68k の限界を超える数のキャラクタを表示しているんだ。
だから、これが動けば、X68kZ のエミュレーション能力がそれなりのものである、という証明にはなる。
同時に、X68k 最後の話題作を付属させることにもなる。
さて、X68kZ には、3つの SD カードが付属する。
2つは、上に書いたゲームが入っている。
残る1つは、パソコンエミュレータとして起動するための OS だ。
これは、X68kZ の制作者からのメッセージだ。
ゲームにより、X68k の最初と最後を示した。
OS は、その中間を埋めるもの。
しかし、OS というのはゲームと違い、そのまま楽しむものではない。
「何かを起動するためのプラットフォーム」だ。
君なら、何を起動する?
この問いに答えられる人は、X68kZ を楽しむことができる。
—
「無いものは作る」
この言葉は、X68k を象徴するものとして語られる。
僕が過去に X68k について書いた記事でも多用している。
書いた当時は X68k を知るものも多く、この言葉の真意が伝わりやすかった、と思う。
この言葉は、X68kZ の宣伝文句でも使われていた。
しかし、すでに当時を知るものは少ない。
言葉自体が神格化して、ねじ曲がっているように思う。
X68k は、圧倒的に「無かった」。
ソフトの数で、当時絶対王者だった PC98 に負けるのは当然。
ライバルとされていた FM-Towns にも、圧倒的に負けていた。
X68k はゲームに強かった、と言われるが、そのゲームの数ですら負けているのだ。
でも、X68k は、ソフトを持っていないが「ソフトを作りやすいハード」を持っていた。
後で詳細を語るが、使い始めの素人でも、それなりのソフトを作れたし、発表できた。
無いものは作る、というのは、なんでも作ってしまう熱い技術者集団を示す言葉ではない。
無いから仕方なく自分たちで作り、不格好でもいいから環境を整えようともがいた軌跡を示す言葉だ。
市販ソフトの少ない X68k は、こうしたソフトを中心として回っていた。
X68k を再現する、というのであれば、市販ソフトの収録よりも、こうしたソフトを収録しないといけない。
実際、超連射68k は同人ソフトなわけだが、先に書いた通り当時遊んだ人は少なかったはずだ。
当時遊ばれたものは…市販ではないからこそ、権利関係などが確認できずに収録は難しいだろう。
当時の X68k を懐かしむ「ミニ」を作るにあたり、ゲームではなくエミュレータをメインコンテンツとする、というのは大英断だったと思う。
—
ネット上では、当時自分が作ったソフトを公開している人がいる。
ゲームに限らず、探せばいろいろある。
そういうものを探して動かしてみるのが楽しい。
最初に書いた通り、Windows のエミュレータでも遊べる。そちらの方が再現性も高い。
でも、遊び終わって次のソフトを見るときに、「本体上のリセットスイッチを押す」というのが、当時を知っているものにとっては、たまらなく懐かしい。
Windows のエミュレータではこうならないのだ。
それだけで入手した意味があった。
何度も書くけど、これは思い出補正だ。当時持っていた人間だから懐かしめるものだ。
憧れていた人が買って、「ゲームが2本しかない」と嘆く気持ちはわかるのだ。
でも、ファミコンミニも、メガドライブミニも、そうでしょ?
今更昔のゲームが遊びたいというよりも、思い出を懐かしみたい、という側面が強いと思う。
思い出がない人間には、懐かしめない。
X68kZ だってそれは同じ。それだけのことだ。
—
X68kZ の話としてはこれで終わりなのだけど、途中で書いた話の詳細を、次の記事に書きたいと思う。
X68k が、素人でもプログラムを組みやすい環境だった、という話だ。
こういう「使い勝手」の話は、スペックに現れない。
ずっと昔に自分が書いた記事でもあまり取り上げていなかったので、今更ながら記しておこうと思う。
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
X68000Z の Early Access Kit が昨日届いた。
以前、日記で話題にしたことがある。
当時は計画発表のみだった。その後クラウドファンディングで受付が開始され、1日で当初の目標金額を達成。
結局、目標の 10倍に達したために、生産が間に合わないということで締め切られた。
以前の日記では「様子見」としていたが、その後の情報は期待を持てるものだったので、僕も出資した。
一番安い、製品だけもらう内容だけど。
しかし、「せっかくだから欲しい」程度で、待ち望んでいたわけではない。
なので、ネットで「届いた」という知らせを見たときも、製品出荷だと気づいてなかった。
最初に開発参加者向けに出荷していたからね。届いたというのも、今更参加とかできたのか? と思っただけ。
すぐに、「あぁ、本格的な出荷か」と理解したけど。
クロネコヤマトから連絡がきて、3月31日にお届け、となっていた。
そうか、速いな、と思っていたら、夜まで待っても来なかった。
で、昨日、4月1日は仕事で、PC 前で待機している必要があった。
待機して、連絡用の slack を確認できる体制にあればよかったので、長い日記書いて公開したのだけど。
そんなわけで、製品は午後早い時間に届いたのだけど、放置。
夜になって中身を確認したが、動作確認に至らなかった。
そして、先ほど本格的に動作確認した。
HDMI モニタが必要だが、今使ってない PC 用はスピーカー内蔵してないんだよな…
サーバの動作確認などで緊急に使うために追いおてある、小さな HDMI モニタを出した。これはスピーカー内蔵。
キーボードの感触は、悪くない。
しかし、今更 X68k の配列は、PC につなげてまで使おうとは思わない。
値段高い購入品だから、コレクションとして置いとくだけになるだろう。
X68k のキーボード自体は好きだよ。日本語入力のことをすごく考えて作られている。
現在普及しているキーボードのような、英語入力を考えたものに最低限のキーを追加しただけ、とは違う。
しかし、X68k の日本語変換FEP は、キー操作などは良くても変換エンジンと辞書がダメだったけどね。
マウス。こちらも高級品になる。
X68k の付属マウスのイメージをそのままに、現代的なマウスホイールもついていて、Windows で使用できるように考えられている。
さらに、トラックボールマウスだ。トラックボールにもなるのだ。
でも、「マウスとトラックボールをくっつけただけ」で、X68k のマウスのような仕組みではない。
あれは、マウスのボールを物理的に持ち上げて上に出すことでトラックボールになる、という面白ギミックだった。
今時のマウスは光学センサーだから、X68k のマウスを再現するために、わざわざボールを入れてある。このボールは上下に動いたりしない。
こちらも良くできている、と褒めはするが、コレクションとして置いとくだけになるだろう。
本体の質感は悪くない。
インタラプトキーとリセットキーもちゃんと動作する。
しかし、最初起動に戸惑った。せっかくだからグラディウスを起動、と思ったら、エラーになって起動しないのだ。
システムディスクを入れると、起動できる。
B ドライブにグラディウスを入れて、そこから起動できるかな、と思ったが、B ドライブを認識しない。
B ドライブ壊れてる? と思ってシステムディスクを B に入れると、ちゃんとそちらから起動できる。
グラディウスの SD が初期不良? と思って、超連射 68k で試すが、こちらもエラーになる。
ちゃんとマニュアルを読まないといかんな、と思って読むのだけど、特に説明はない。
説明がないということは、普通に操作して起動できるということか?
…ネットで調べた。
起動方法についての PDF が配布されていた。どうも、説明書の印刷が製品出荷に間に合わなかったようだ。
なるほど。
X68000Z は、X68k の動作を再現する「エミュレートモード」と、ゲーム機として気軽に使うための「ランチャーモード」があるようだ。
そして、付属するゲームである、グラディウスと超連射 68k は、ランチャーモードから起動しないといけない。
モードの切り替えは、インタラプトキーの長押しで行える。
ランチャーモードからエミュレーターを起動することもできるので、「X68k と同じ動作にしたい」という強い欲求がない限り、ランチャーモードにしておくのが便利そうだ。
ランチャーモードでは、起動したゲームを終了してランチャーに戻ったりすることもできる。
ただし、エミュレーターモードに入ると、戻れない。
ここら辺、Wii の時のゲームキューブ互換モードみたいだ。
そんなわけで、グラディウスを遊んでみる。
ランチャー上では、グラディウスがどのようなゲームか、という説明も行われる。
なるほど、単にエミュレータとして起動するのではなく、時代背景などの説明もできるのか。
ランチャーモード、よく考えられているな。
懐かしい。そして、すでにパターンを忘れているので、1面クリアもままならない。
何度か遊んで2面の途中で死に、やめた。
超連射を遊んでみる。
こちらも、ランチャー上で説明が出る。有名な同人ソフトだ。
当時から話題にはなっていた。X68k の性能を超えた数のスプライトを表示している。
理論上、4倍の数まで出せるのだそうだ。すごいな。
ゲームとしてはなかなか面白い。
グラディウスはゲームセンター向けだから、100円で長時間遊ばれると困るんだよね。すぐ死ぬような難易度。
でも、超連射は同人ソフト。遊んでいて気持ちいいことが優先されていて、心地よく遊べる。
しかし、しばらく遊んでゲームオーバー。ひとまずはこれで終了。
Windows で、SD カードの中を覗いてみる。
…Windows では見られないフォーマットのようだ。
となると、Windows で自分のデータを SD カードに何らかの方法で書き込んで、X68kZ で見る、というのはすぐにはできなさそうだ。
コメットのディスクイメージなら手元にあるのだけど。
すでに、X68kZ 向けの専用ソフトが発売されている。
当時の内容ほぼそのままらしいけど、ランチャーモードから起動できる、シューティングゲーム作成ソフト。
あと、ZOOM (当時の X68k 向けの人気ソフト会社)も何か発売を考えているようだ。
それらを考えると、Windows でアクセスできないようにする気持ちは、わからないではない。
翌日追記
X68k の「エミュレータ部分」のマニュアルも、PDF で公開されていた。
これを読んだら、FAT32 の SDHC カードに X68000Z というディレクトリを作成し、その中に XDF ディスクイメージを置くと、エミュレータ起動時にディスクを認識させられる、ということだった。
早速、コメットのディスクイメージを起動してみる。
せっかくだからマウスをトラックボールモードで…
元々トラックボール用として考えたゲームだったから。
しばらく遊ぶ。懐かしいけど、拙いね。
よくこんなものを売ろうとしたものだ。若気の至り。
しかし、若気の至りで「評価される」喜びを知り、その後の人生の転機となったのだ。
過去にScratch 版を作ってみたりもしたけど、オリジナルがもう一度見られた、というのはそれだけでうれしいものだ。
(いや、実機復活させたときに少し遊んだ覚えがあるし、win 用の X68k エミュでも遊んでいるのだけど。)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
高校を卒業した長男、大学受験も試験は終わって区切りがついたし(まだ発表待ちのところがある)、部屋を片付けていた。
そして、「そういえば、こんなのあった」と未開封の箱を持ってきた。
転校した際に、転校先の高校では全員持つことになっているから、と購入した、学校指定のタブレット端末。
転校したのが遅かったこともあり、使わなかった。だから新品未開封のまま。
前の高校では学校では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 の方が安くて管理簡単に思えるのだが…)
学校のお勉強データには興味が無くて、消えてしまっても構わない、という生徒もいるだろうが、取っておきたい、という子もいるだろう。
長女が僕に相談してきたのだから、学校ではこうした保存方法は教えていないと思われる。
学校の勉強で作ったものなんて、多分数年後に見たら拙くてたいして価値のないものだと思う。
しかし、それを見ることで「当時の想い出」が一緒によみがえってきたりして、消してしまうには惜しいものだと思う。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
新しい年にあわせ、キーボードを新調した。
…いや、別に新年だから買ったわけではないのだけど、12月頭ごろに「何か別のものを買う機会があったら一緒に買おう」くらいの気軽な気持ちで Amazon のカートにキーボードを入れていたのだ。
それを、年末に仕事が休みになり、別の品物を買おうとしたときに思い出した。
購入したら昨日元日に届いた。
そういうわけで、新しい年に新しいキーボード、となったわけだ。
この日記は今、新しいキーボードで書いている。
(実は、昨日の日記も新しいキーボードで書いていたのだけど)
新しいキーボードの使い勝手を…と行きたいところだが、前と同じものを購入したので全く変わらない。
前の製品は、2016年に購入していた。
5年半も使っていて、最終的に不調が一切なかった。
しかし、5年半の間にキートップの文字がすり減ってしまった。
この日記冒頭に添付した写真を見るとすり減り具合がわかるだろう。
(手前のものが古く、奥に置いてあるのが新しく購入したもの)
普段キーボード見ないのですり減っていても問題ないのだけど、慎重に入れる必要があるパスワードなどを間違えることが時々ある。
(仕事柄多数のパスワードを使う必要があり、内容がランダムに近いものなので、手元を見て確認しながら入力している)
それで、新しいのを買うことにしたのだ。
それ以前に使っていたキーボードは、3年程度で不調になることが多かった。
それが5年半も問題なく使えていたのだ。当然同じものを買うことにした。
マイクロソフトの有線キーボード。それも一番安いものだ。
あ、今過去の日記を読み返していて気づいた。
5年半前に買った時は、990円だったらしい。今回は 1391円だった。
一番安いやつ、と言いつつ、少し値上がりしている。
まぁ、5年使えることを考えたら十分に安いけど。
昔から、マイクロソフトはマウスやキーボードに定評がある。
その品質の高さを、よく知ることができた。
まったく同じ製品だが、変わったことが一つ。
5年半前に買った時は「Windows 8 / 10 対応」だった。
今回購入したものは「Windows 10 / 11 対応」になっていた。
普通のキーボードだから、対応のために変わえるところはない。
時代に合わせて箱が変わっただけだ。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
なんか、ネットの不調の話ばかり書いているな。
昨日は 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 見て「ファームウェアアップデートが入ってしまったので、しばらくかかります」と言った。
…ファームウェアアップデート中でネットがつながらない状態でも、電話やテレビは繋がるのか。
ここらへん、どうなっているのか知らないけど謎技術。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
当ページが、昨日未明から先ほどまで、うまく見られない状態になっていました。
その間に見に来てくださった方には、大変申し訳ありません。
原因は SSL 証明書切れです。
Let's Encrypt で発行してもらい、サーバに自動更新するように設定してあるのですが、9月25日の未明に更新したのを最後に、更新されていませんでした。
Let's Encrypt は無料の SSL 証明書発行サービスなのですが、有効期限は90日間と短めです。
Linux サーバに設定をおこない、毎週1回は更新プログラムを動かしていました。
と言っても、実際の更新は「残り1か月をきったら」行われるようになっています。
これが、どういうわけか10月の半ばから、更新のための接続に失敗するようになっていた模様。
原因は不明です。
で、昨日未明に期限切れを迎え、サイトのSSL接続ができなくなっていたのですが、昨日はクリスマスで家族団欒していたので、自分のサイトの不調に気づきませんでした。
今日の昼に気づいたものの、仕事があるために作業できず、先ほどやっと復旧したところです。
復旧方法は、単に新しい証明書を取りなおしただけ。
久しぶりなのでやり方を忘れていましたが、ネットを調べれば解説記事は山ほど出てくるので、ここでは特に解説しません。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
表題の通りの不具合の修正方法なのだけど、同じ症状で困っていて解決方法を探している人は、行の頭が ▼ で始まる部分まで読み飛ばしてください。
今回書きたいのは「解決方法」ではなくて、その過程が面白かった記録なので。
長女が、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 にアップした人は、すぐに追加のアップデートがないか確認しましょう。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
仕事で作っていたプログラムで、スマホページから、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 が使える。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
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 になったのだが、なんか買う情熱が無くなってしまい、そのまま。
今回も同じ道をたどりそうな予感が、少しある。
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
スプラ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の「サンリオフェス」以来の大失態。
サンリオフェスは、サンリオがスポンサーになって開催されたものなのだけど、どうも最初から「ハローキティを勝たせたい」という要求があったようなのだよね…
おそらくはそのために、マッチングの際に手心が加えられたのだけど、これが露骨すぎて公式が謝罪するまでの騒ぎになりました。
(サーバーの不具合だった、ということになっていますけどね)
今回は、選択肢は悪くなかったのだけど、紹介するキャラクターの寸劇のシナリオが悪かった。
「無人島と言えばリゾートじゃないの?」の一言があれば、これほど道具に偏らなかったと思う。
別年同日の日記
16年 箱根小涌園ユネッサンに行きたい人へのまとめ(1/3)
16年 箱根小涌園ユネッサンに行きたい人へのまとめ(2/3)
16年 箱根小涌園ユネッサンに行きたい人へのまとめ(3/3)
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
昨日 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 が広く使われている割に騒ぎになっていないのが不思議だったのだが、これも環境によって動作が違うのかもしれない。
謎はいろいろある。ここに書いたこと自体が、多くの人にとっては無意味なのかもしれない。
しかしまぁ、ライブラリに頼らず問題を自分の手元でコントロールできる状態に置いたことで、今後の保証をある程度得られた、と思うことにしよう。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
プリンタが壊れ…てないのだけど、半壊くらいになったので新しいプリンタを購入した。
まず、前の機種の状態について。
最近色が変だなー、と思ったので、状態確認のプリントをしたら、黄色と青がちゃんと出ていなかった。
ノズルが目詰まりしている感じ。
まぁ、当然ヘッドクリーニングする。その後状態確認すると、黄色は完全に出なくなり、青もほとんど出なくなり、それまで出ていた赤も目詰まりしているような状態に。
さらにヘッドクリーニングすると、余計に悪化。ついには黒以外がでなくなった。
あ、これダメだ。目詰まりじゃなくて、なんかノズルの機能(インクを送るポンプとか、ピエゾ素子とか)が壊れてるっぽい。
というわけで、すぐに新しいプリンタを探し始め、翌日には購入、翌々日には到着した。
今日は、到着の翌日だ。セットアップして正常に動くようになった。
前に使っていたのは、ブラザーの DCP-J557N だった。
7年も使っていたことに驚いた。
プリンタって可動部品が多く、ゴムやインクなどの自然劣化する部品も多い。
だから、使えても5年程度、と思っていた。
この機種は戦略機種で、6千円で入手した。
ちなみに、インクもブラザーが以前から使っていたものだった。
購入当初から互換インクが多数の会社から発売されており、4色で千円程度。
それで我が家の場合1年くらいは使えていたので、本当にコストパフォーマンスが良かった。
その前に使っていたのは…名誉のために名を伏せるが、有名プリンタ会社のもので、1年以内に壊れた。
さすがに保証期間だったので交換してもらったら、それも1年以内に壊れた。
あの会社はインクタンクに特殊 IC を積んでいたので当時は互換インクもなく、非常に高かった。
なので、この会社のものは我が家的には当面買わない。
大きく状況が変わって評判の良い機種でも出れば買うかもしれないけど。
今回購入したのは、当然のように前の機械の後継機。
…とはいえ、良い特徴のいくつかは失われている。
いくつかの後継機があったが、選んだのは DCP-J926N。
前の機種は6千円で買えたが、2万円弱だった。
コロナで在宅勤務する人が増えて以降、プリンタは売れ行きの良い商品らしい。
値引きして買ってもらうような必要が無くなったので、値引きがない。
そのうえ、ロシア・ウクライナ戦争以降、物価高の影響でプリンタも実売価格が上がっているらしい。
この状況では、2万円というのは悪くない値段のようだ。
で、インクタンクが新開発のものに替わった。
昨年秋に発売されたこの機種から使われるようになったインクタンクなので、まだ互換品が市場に出ていない。
4色で4千円くらい、というのが相場のようだ。
容量の違いなどが明確でないので、単純に高いか安いかは言えないのだけど、まぁ純正品だから互換品よりは高いのだろう。
でも、ブラザーのインクはほかの会社に比べて良心価格だと思っている。
互換インクもそのうち出てくるだろうし。
検討時にはもう一つ候補があって、DCP-J4140N を検討していた。
こちらは大容量インクタンクで、やはり互換品はまだないのだけど、インクの「容量当たり」のコストが低い。
あと、インクが顔料系インクなので印刷が鮮やか。
…でも、インク高いんだよね。4色買うと2万円くらい。
それほど印刷するわけでもないし、人に配布する書類を作るわけでもない。
だから、印刷が鮮やかな必要も、大容量である必要もない。
というわけで、こちらは選ばなかった。
顔料系インクには少し興味があったのだけど。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
Switch でスト2が期間限定無料配布、と聞いて、別に好きでもないのにダウンロードしておこうと思った。
詳細に書くと、CAPCOM ARCADE STADIUM というソフトがあり、これは無料配布している。
というのも、これ自体はプラットフォームであり、ゲームを遊べるわけではないからだ。
で、ダウンロードコンテンツの形で、昔の業務用ゲームを別途購入し、遊ぶことができる。
何も買わないでも、サンプル扱いで 1943 が入っている。縦スクロールシューティングゲームだな。
で、期間限定でストリートファイター2が無料になっている、という話なのだ。
1943 もスト2も、別に好きではない。というか、CAPCOM のゲームをそれほど好きではない。
でも、スト2が歴史的な転換点にあった重要作品であることは認めるし、せっかくだからもらっておこう、と思ったのだ。
ダウンロードして遊ぶ。スト2で選べるキャラ、最初はこんなに少なかったっけ。
ちょっと遊んで終了。対戦格闘自体が、それほど好きなジャンルではないからね。
他にどんなゲーム遊べるのかなー、と、「購入すれば」遊べるゲームのリストを眺める。
あー、そういえばそんなゲームあったなー、と懐かしみながら、各ゲームのタイトルロゴを眺める。
そして、出会ってしまったのだ。「ストライダー飛竜」。
少し上に書いた前言を撤回しよう。CAPCOM のゲームをそれほど好きではない、と書いたが、飛竜は大好きだった。
僕の人生を方向づけたゲームの一つ、と言ってよいくらいやり込んだ。
X68k 版も持っていたし、メガドライブ版は「いろいろ違う」と怒りながらも、やはりやり込んだ。
200円かー。気軽に試してもいい程度の額。
今更昔のゲームは「懐かしい」というだけで、遊ばないのが目に見えているのだけど、買っちゃうか。
よし、買おう。とストアページに行くと、過去にゲームを購入したときに付いたポイントがたまっていた。
200円分くらい、ポイントで買える。実質無料で入手。
これ、CAPCOM の思う壺なんだろうな。
久しぶりに遊んだが、最初の方はそれなりに攻略パターンを覚えていた。
でも、途中から全く覚えていない。コンティニューでごり押ししてエンディングまで行ったが、納得できない。
このゲームはゴリ押しするようなものではなく、美しく踊るものなのだ。
しかし、やはりプレイ感覚の好きなゲームだ。
パターンを思い出しながら、しばらく遊ぶことになりそうだ。
さて、ストライダー飛竜だが、まだソ連が崩壊する前に作られたゲームだ。
ゲームの舞台は「ソ連から帝政ロシアに戻った 2048年」で、このロシアを率いる独裁者は、世界を相手に核戦争を起こそうとしている。
その彼を倒し、世界を救うのが主人公に課せられた使命だ。
…なんか、今書くのが きな臭いな。
まぁ、崩壊するとまでは思ってなかったけど、ソ連がごたごた続きだった時期に作られたゲームだし、この設定を「予言」とまで言うつもりはない。
当時は政府も仮想敵国としてソ連を想定していたしね。
でも、なんかいろいろ考えちゃうのでした。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
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 を見ろ、と僕は思っているのだけど、今この記事を書くために確認していたら、ちゃんと書いてあった。
でも、長い文章の中にさらりと入っているので、気づいてなかった。
演算子の優先順位のページに書いてある。
(どこに書いてあるのか探してみよう。見落としていたのに納得してもらえると思う)
・興味深いのは、結合性や優先順位に関係なく、評価の順序は常に左から右になることです。
「計算」には優先順位があるが、「評価」は常に左から。覚えておこう。
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |