コンピュータの日記です

目次

2018-01-10 原初のプログラム
2017-12-20 無言電話(SIP SPAM)
2017-12-18 P10 plus に乗り換え
2017-12-13 0sim
2017-12-12 IP電話
2017-11-27 リロケータブル
2017-10-27 Android Chromeでスクロールがおかしくなるバグの原因と修正
2017-10-23 P10 に乗り換え
2017-09-12 ヒューマン・リソース・マシーン
2017-08-08 スプラトゥーン2 その後
2017-07-24 スプラトゥーン2初感
2017-07-12 ジョージ・イーストマン 誕生日(1854)
2017-06-21 ゼルダ雑感
2017-06-13 遅い Javascript を iframe に追い出す方法
2017-05-28 CRT処分
2017-04-30 Switch 買った。
2017-04-14 フィル・カッツ 命日(2000)
2017-04-07 プラスとピリオドの取り違え
2017-03-31 西角友宏さん 誕生日(1944)
2017-03-30 ルータ不調
 …同じテーマのほかの記事
原初のプログラム  2018-01-10 12:02:44  コンピュータ 家族

▲目次へ ⇒この記事のURL

長男が熱心だった Scratch プログラムだけど、この冬休み期間に、長女・次女も再チャレンジし始めた。


以前は難しくてやめてしまったのだけど、今の年齢なら楽しめるようだ。



で、長女(小4)から質問が出た。


Scratch は Flash という言語で作られていて、その Flash はC言語という別のプログラム言語で作られている。

…ここまでは、プログラム言語の多様性を知ってほしくて以前に教えている。


#厳密に言えば、Scratch ver.2 が Flash の ActionScript 言語で作られていて、ActionScript は C言語の拡張である、C++ 言語で作られている。


ここからが長女の質問。


「では、このパソコンで動く一番最初のプログラムはどうやって作られたの?」



あぁ、なるほど。そこに疑問を持ったか。

同じようなことに興味を持っている人もいるかもしれないので、長女に答えたことを記して置こうと思う。




まず、目の前の疑問の答えは、クロスコンパイルだ。

すでに動いているコンピューターの上で、別のコンピューターのプログラムを開発する。


僕はテレビゲームの開発をやっていたけど、テレビゲーム機の上では、普通は「プログラム」を作れない。


長女も Nintendo Switch で遊んでいるけど、そこでプログラムは作れない。

プログラムを楽しみたいときは、パソコンで Scratch をやっている。


Switch でゲームを作っている人も、Switch を使って作っているわけではない。

パソコンの上でプログラムを作って、それを特殊機材で Switch に送って動かしているんだ。



新しいパソコンが作られる時も、同じように別のパソコンでプログラムを作ることになる。


今広く使われているパソコン…IBM PC 互換機、と呼ばれるものが出てきたときも、基本プログラムはすでにあったコンピューターで作られた。


#それ以前の 8bit マシン…CP/M マシン上で開発されていたようだ。




長女はこの答えには納得できないようだった。


「このパソコンの」と言ったのは言葉のアヤで、真意は「最初のプログラム」にあったのだ。


そのプログラムはそれ以前のプログラムで作られたという。

じゃぁ、「それ以前」はどうやって作ったのか。もっともな疑問だ。


そのため、ここで話を切り替える。




コンピューターの中では、すべてを数値として扱っている。

計算をするときには、例えば「1番は足し算、2番は引き算」というように、命令も数値になる。


1 2 3


という3つの数値があったとしよう。

ここで、1 は足し算の命令で、2 3 が足すべきデータになる。結果は 5 だ。



一番最初のコンピューターでは、人間が直接この「数値」の列を作り出した。


もっとも、プログラムを作るときに 1 2 3 と直接書いていると、頭がこんがらがってしまう。

1 は足し算(英語で ADD)なのだから


ADD 2 3


のように紙に書いておき、プログラムが全部出来上がったら、命令を手作業で数値に直していけばよい。




そして、この数値を入力するには、ON / OFF できるスイッチを使う。

コンピューターの中では、数値は全部、電気信号の ON / OFF に置き換えて覚えられている。


ON なら 1 、OFF なら 0 として、寄せ集めるともっと大きな数値も表せるようになる。


#いわゆる2進数だけど、この話では詳しく知る必要はない。

 ちなみに、長女は以前教えて2進数を知っているので、この部分に疑問は持たなかった。


スイッチをぱちぱちやって数値を作り、「書き込み」スイッチを押すと、メモリに書き込まれる。

どんどん連続してメモリに書き込まれていく回路を作ると、これでプログラムを準備できる。


そして、CPU に対して「実行」を指示すれば、「最初のプログラム」が無事動き出す。

最初はこんな風にしてプログラムが作られた。




じゃぁ、最初にどんなプログラムを作ったか。


スイッチをぱちぱちやるのは、プログラム方法としてはかなり面倒くさい。

だから、最初に作るのは「タイプライターのキーを押すと、それが文字だと識別されるプログラム」だ。


これがあれば、もう「ぱちぱち」とはおさらば。タイプライターで効率よくプログラムが作れる。


次に作るのは、ADD なら 1 、SUB なら 2 …という、命令から数値への変換を、自動的にやってくれるプログラムだ。

先ほど「人間が手作業で命令を数値に直す」としていたけど、自動的にやってくれるプログラムがあれば効率が上がる。


#一般には、数値化する作業を「アセンブル」(組み立て、の意味)と呼び、これを自動的に行うプログラムは「アセンブラ」と呼ばれる。




もし、この時点で新しいコンピューターが設計されたとしよう。


新しコンピューターでは、命令の数値なども変わるのが普通だ。

今まで使っていたコンピューターでは、ADD は 1 だったけど、新しいコンピューターでは 10 かもしれない。


そうしたら、アセンブラのプログラムを修正する。

ADD は 1、だったところを ADD は 10 、にするだけでいい。


これで、新しいコンピューター用のプログラムを作り出すことができる。

最初に書いた「クロスコンパイル」というのは、ただこれだけの話だ。




ここで話はひと段落。

スマホで情報を検索して、Altair 8800 の画像を長女に見せてみた。


Altair 8800 は、最初のコンピューターではないが、最初のパソコンとされる。


前面パネルには、ON / OFF のスイッチがたくさんついていて、結果出力のためのランプもある。

入力も、出力も、ON / OFF しかないんだ。



でも、タイプライター(厳密にはテレタイプ)を接続して使うのが普通だった。


電源を入れたら、RAM の中には何もない。

だから、まずはタイプライターからの入力を読み取るためのプログラムを、 ON / OFF スイッチで入れる必要があった。

このパソコンを使っている人は、それが毎日の作業なので、短いプログラムを暗記していた。


タイプライターの入力が読めるようになったら、タイプライターについている紙テープ読み取り機から、紙テープを読み込ませる。


テレタイプでは、入力内容を紙テープ化できた。そうすることで、同じ原稿を何度でも打ち出すことができる。

でも、ここでは紙テープに記録されているのは「文字」ではなく、プログラムそのものだ。


たとえば、テレタイプを入出力として、BASIC 言語を解釈するプログラム。

このプログラムが動き始めれば、タイプライターを使ってプログラムを作れるようになる。


時には、さらに「BASIC で作られたプログラム」を紙テープから読み込み、何らかの実作業に使ったかもしれない。



ここでは、タイプライターだから出力が紙なのだけど、キーボードで文字を入力して、人間にわかる文字で結果を返す、という、誰にでもわかりやすいプログラム環境が出来上がったことになる。




このときは、手っ取り早く Altair 8800 の画像を見せた。


でも、それ以前からコンピューターは存在する。

それらも、構造的にはほぼ同じだった。


うちのページでいえば、TX-0あたりを見ていただきたい。

Altair 8800 よりずっと古い機械だけど、トグルスイッチを使って2進数を入力するあたりも、ほぼ同じ構造だ。


もっとも、TX-0 は紙テープを読み込んでメモリにデータを配置する機能を、ハードウェアで持っていた。

そのため、毎回紙テープを読み込むプログラムを入れる必要はない。



さらに古く、電子計算機の元祖に近い EDSAC では、完成後の改造で「イニシャルオーダー」が備えつけられた。


抵抗とワイヤーで ON / OFF を表現することで、紙テープを読み込むプログラムを固定化したものだ。

必要に応じて取り外せるようになっていて、取り外すとその部分は普通のメモリとして扱われる。


ROM に準備され、コンピューターが起動するときに最初に読み込むプログラム…今でいえば、BIOS や UEFI に相当するものだった。




ともかく「手作業で」最初の小さなプログラムを作り上げ、そこからプログラム環境が整えられていく。

あとは、Scratch の話と一緒だ。



Scratch は Flash で作られ、Flash は C で作られていた。


Altair 8800 では、Scratch に相当するものが BASIC だった。

BASIC はアセンブラで作られ、そのアセンブラは、ON / OFF スイッチを駆使して入力されるものだった。



BASIC から C までの間は長女には説明しなかったけど、想像は付いたようだ。

より便利な環境を作るために、誰かが「その時使える」環境で、新しいプログラムを書いてきた。


その積み重ねの果てに、子供でも使える良く練り込まれた環境、Scratch が存在している。


Scratch も、そろそろ Javascript で書かれた Ver.3 に移行する予定だ。



▲目次へ ⇒この記事のURL

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

家族

別年同日の日記

05年 Switch!

13年 続々・Windows8

16年 国立科学博物館

16年 国立科学博物館(続き)

16年 上野公園


名前 内容

無言電話(SIP SPAM)  2017-12-20 18:39:52  コンピュータ 歯車

▲目次へ ⇒この記事のURL

先日 IP 電話を導入したら、すぐに無言電話がかかってきた。


無言なので電話を切ると、すぐにまた掛かってくる。

もしかして、機器の設定を間違えて音声がうまく通じていないのか、と思ったが、自分で確認したら大丈夫。


そもそも、新しい会社電話番号は税理士さんにしか伝えていない。

(この年末調整で、税務署に伝えてもらうためだ)


税理士さんが確認のために電話をくれたのかな、と思ったが、それにしてもしつこい。

10回もかけ続ける、なんて人間が相手ではありえないだろう。


とりあえず、IP電話の機器から電話機のケーブルを引き抜く。

どうせまだほとんど誰も電話番号を知らないのだ。電話がつながってなくても構わない。




忙しくてそのまま数日。

やっと設定を見直す。


ネットで情報を探すと、SIP SPAM とか、 SPIT (SPAM over Internet Telephony)とかいうらしい。

IP 電話に対して、だれかれ構わず電話をかける、SPAM。


もっとも「SPAM」というのは語弊のある部分で、実際には宣伝などの通話をしたいわけではない。

電話機のポートが開いていないかを確認していて、ポートが開いているなら攻撃を試みるのだ。


ネットで対策方法を調査し、機器設定で、一か所ボタンを Yes にするだけで、簡単に対処できるとわかった。

でも、その設定の「意味」を知っておかないと気持ち悪い。


そんなに簡単な対処なら、なぜわざわざ変更可能にしてあり、初期状態が No なのか。

何か副作用があるのではないか。




そんなわけで、VoIP 電話機がどうやって動作しているのか、改めて確認したので、まとめておこう。


ちなみに、同じような「無言電話」に困っている人のために、先に対処を書いておこう。


僕は Grandstream の HT701 を使っている。


設定の FXS PORT というタブに、Authenticate incoming INVITE という項目がある。

初期状態は No なので、 Yes にすればよい。これだけで SIP SPAM による無言電話が無くなる。


他の機器でも、INVITE 、Authenticate あたりをキーワードに設定を探すと見つかると思う。

(日本語では INVITE 認証、と訳されることが多いようだ)




設定の意味を理解するためには、VoIP の概要を知る必要がある。


VoIP は、単純に言えば、アナログ音声をデジタルサンプリングして、パケット化して相手と相互通信する技術だ。

これ自体はそれほど難しいことではない。


問題は「相手」ってなぁに? ってことだ。

インターネットを使うのだから相手は IP アドレスで指定しないといけないが、電話なので電話番号で指定したい。


そこで、VoIP 電話を提供する会社が SIP サーバーというものを用意する。

契約したユーザーには、ID とパスワードを発行する。

電話番号は、この ID と紐づいている。



通信機器は、まず SIP サーバーに接続し、パスワードで認証を行う。

これが成功すれば、ID に対して、接続してきた IP アドレスを記録できる。


先に書いたように ID と電話番号は紐づいているので、IPアドレスと電話番号も紐づけられることになる。



電話をかけたい人は、SIP サーバーに接続して、電話番号を伝える。

すると、SIP サーバーはその電話番号相手の IP アドレスに接続し、「INVITE」(呼び出し)と伝える。


VoIP 通信機器は、INVITE を受信すると、電話を鳴らす。

電話を取った場合、サーバーは発信者の IP アドレスを教え、以降はサーバーを仲介しない直接通信となる。




SIP SPAM は、SIP サーバーでない第三者が、ランダムな IP アドレスに対して INVITE メッセージを送ることで起きている。

INVITE が受け付けられれば、そこに VoIP 通信機器があることがわかる。


PC やサーバーの存在を確認しても、そうした機器は注意を払ってセキュリティを固めてあることが多い。

それに対し、VoIP 通信機器のようなものは、セキュリティに注意を払われにくい。


悪意のある人間としては、乗っ取りやすいありがたい機器だ。

これを知りたいから、SIP SPAM が行われる。



余談になるが、外部ネットワークから参照可能で、設置したらそのままほったらかしの機器は同様の問題を抱える。

Webカメラやルーター、NAS や HDDレコーダーなど。


対策は、常に最新のファームウェアを入れるように気をつけること。

また、脆弱性が見つかったらすぐにファームウェアを更新してくれる、信頼ある会社の製品を使うこと。


VoIP 機器の場合、SIP SPAM で「無言電話」にならない対策をしても、上記問題は解決しない。

やはりファームウェアの更新に気を付けること。




さて、当初の SIP はこのような「悪意」を想定しないで設計されてしまった (RFC 2543)。

しかし、このような攻撃方法が認識された時点で、追加の RFC で対策が立てられた (RFC 4474)。



サーバーは、ユーザー認証のためのパスワードを知っている。

ユーザーも当然自分のパスワードを知っている。


でも、攻撃者はこのパスワードを知らない。


そこで、INVITE メッセージを送る際に、パスワードやそのほかの情報を使って計算した値を一緒に伝える。

両者で計算が合えば「正当な」INVITE メッセージ、それ以外は SPAM だ。



ここで、SPAM かどうかを判断するのは、受け付ける VoIP 機器側だ。

SIP サーバーが数値を伝えてきたとしても、受け取る VoIP 機器側で無視しても何ら問題はない。

(SPAM は無言電話となる)


また、後から追加された RFC なので、SIP サーバーが対応していない場合もあり得る。

この場合は、VoIP 機器側では比較すべき数値が渡されないため、正当な INVITE も、 SPAM と判断せざるを得なくなる。

(一切着信しなくなる)



前者はイライラするだけだが、後者は電話として致命的だ。

そのため、機器の初期設定としては、この機能を使用しない状態になっている。


SPAM に困って「使用する」に設定した場合は、自分で電話をかけて、着信できることを確かめたほうが良いだろう。

正常に着信すれば、SIP サーバーもこの機能に対応しており、他の副作用は生じない。




というわけで、設定変更一つで問題は解決した。

これで、着信待ちだけなら無料の電話回線が一つ用意できた。


以前書いたけど、僕に用事がある人は僕の携帯やメールに連絡をよこすため、多分使わない。

「会社電話番号」を知りたがるお役所のために用意しているだけだ。

その役所も電話をかけてくることは、まずない。


使わないからこそ、無料になるのはありがたい。


▲目次へ ⇒この記事のURL

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

歯車

関連ページ

IP電話【日記 17/12/12】

別年同日の日記

02年 ムカツク店員

03年 日記エンジンバージョンアップ

13年 Robot Turtles

15年 honor6 plus 使い勝手レビュー


名前 内容

P10 plus に乗り換え  2017-12-18 11:56:25  コンピュータ 歯車 家族

▲目次へ ⇒この記事のURL

Huawei のスマートホン、P10 plus を購入した。


…いやいや、2ヵ月前に、その下位機種の P10 を購入したばかりだろ。

もう買い替えたのか、って思われるかもしれない。


元々、P10 を欲しかったのは妻なのだ。

購入したのだけど、思ったのと違った。それで僕が使うことになった。



「思ったのと違った」のは、主にユーザーインターフェイス部分。

Android で、ランチャとかホームとか言われる、システム標準で付属している、一番操作の中心となる部分だ。


それまで ASUS の ZenFone2 Laser を使っていた。

ASUS では ZenUI というランチャを使用している。


Android には、iOS の通知機能である「バッヂ表示」は存在しない。

でも、ZenUI では謎テクノロジーによって、バッヂ表示を行う。



これに対し、Huawei では HuaweiHome というランチャを使っている。

バッヂ表示は「一部ソフトのみ」対応していて、「一部ソフト」の多くが、Huawei 製のアプリだった。


これが、バッヂ表示はするけれど、アプリとしての出来はそれほど良くない。

いや、出来が悪いわけではないけど、可もなく不可もなく。

探せば無料でもっといいのがあるよ、という感じの出来栄え。




一度は P10 は肌に合わない、と僕に譲り、代わりに僕がそれまで使っていた Huawei Honor6 plus を使い始めた。

でも、その後 HuaweiHome の癖にも多少慣れてきた。


何よりも、Android はランチャを好きなものに交換できる。

無料の「Atom Launcher」が結構望みの操作感を実現してくれる、ということも分かった。



#先にバッヂ表示を「謎テクノロジー」と書いたが、iPhone にあるものを Android で実現すべく、いくつかのホームアプリが「独自の」バッヂ表示 API を作り出していた。

 独自規格が乱立したわけだが、今はそのすべてに対応したホームアプリなどが作られている。

 HuaweiHomeが「一部ソフトのみ対応」だったのも、一部 APIにのみ対応していただけの話。



じゃぁ、ユーザーインターフェイスの問題が無くなったところで、再び新機種を選定しよう。


妻は小柄なので 5.5inch の Honor6 Plus は持ちにくい。

5.0inch の Zenfone2 Laser は持ちやすい。

ちなみに、5.1inch の P10 も、問題なく持てる。


Zenfone2 Laser の不満点は、カメラ性能が悪いこと。カメラ性能は欲しい。

Pokemon GO とかポケ森とか、結構ゲームも好きなので、それなりの処理能力も欲しい。


…というわけで探すと、やっぱり P10 になってしまう。

P10 、コストパフォーマンス高いんだよね。だから以前も選んだのだけど。



じゃぁ、やっぱり P10 は妻が使うことにして、僕は新しい機械を買おう、ということになった。

Honor6 plus に不満はなかったのだけど、SIM サイズが違うので、今更戻れない。


それに今は、Honor6 plus を「空き」の状態にしたいんだ。




じゃぁ、P10 の廉価版であり、Honor6 plus の後継機である、Honor9 にしようかな…と思って調べる。



えーと、一応書いておけば、Honor9 と P10 は、処理性能などはほぼ同じだ。

違うのはカメラとディスプレイで、P10はカメラにいいレンズを使っているため、集光しやすい。つまりは暗い時に強い。

また、レンズ部分に光学手振れ補正が入っているので、揺れに強い。



でも、Honor9 のカメラが貧弱なわけではない。

もともと、レンズなんて気にしないでも十分高性能なのだ。


今では iPhone もダブルレンズだけど、もともとは Honor6 plus が導入した技術だ。

それをさらに進化させたものが、Honor9 と P10 に搭載されていて、レンズ以外は同じもの。


Honor9 だって、スマホとしてはかなり高いレベルのカメラで、P10 はそれをさらに良くしたもの。



ディスプレイは、Honor9 のほうがわずかに大きい。P10 が 5.1inch で、Honor9 は 5.15inch だ。

ちなみに、大きくなったがドット数は同じ。つまり、ここは「大きい方が微細加工が楽になるから安い」部分と思われる。


とにかく、技術的には P10 と一緒だけど、「多少安い部品つかってもいいんじゃないかな」って部分で安くしたのが、Honor9。

海外では、P10 の半額くらいで Honor9 を販売しているようなのだけど…




買うつもりで調べてみると、妙に高い。


honor9 は販売ルートが限られている。あまり Huawei 名を出さない「OEM」に近い販売ルートを取るためだ。

そして、値段は税抜き 53,800円で横並び。税込みだと 58,104円。


もちろん、SIM 契約付き1年縛り、とかで値引きしているところは多いけど、今欲しいのはそういうものではない。



これに対し、「上記機種」にあたる P10 は、販売ルートが自由なので値引き競争がある。

価格.com で安い店を調査すると、税込みで 54,400円の店が並んでいる。


…廉価機種のほうが高い、という逆転現象が起きているんだ。



#…と、購入検討時には思っていた。

 今日記にするために再度調べたら、OCN 販売の SIM 付き Honor9 は、税込み 49,464円なのだけど、この SIM は契約する必要はないそうだ。

 とはいえ、「上位機種」である P10 との差額は5千円程度。わざわざ選ぶかは微妙な値段だ。




P10 をもう一台買って、妻には新しい方を渡そうか…とも思った。

そうすれば、僕は「引っ越し」の必要がなくなるので楽だ。


でも、思い立って P10 の上位機種である「P10 plus」の値段を調べてみる。

58,782円。上位機種と言っても、P10 と5千円も違わない。というか、廉価機種であるはずの Honor9 と600円しか違わない。

何よりも、P10 plus の最安値を Amazon が付けているので、頼めばすぐ届く安心感がある。



P10 plus は、P10 よりもさらに良いレンズを使っている。


また、ディスプレイは 5.5inch になり、表示ドット数も増えている。

その分本体は大きくなるが、大きくなった分バッテリー容量も増えている。


もっとも、画面が大きくなって画素数が増えたのは、デメリットの可能性もある。

処理能力は変わらないのだから、画素数が増えた分だけ描画速度が遅くなるだろうし、電力食いにもなるだろう。

ディスプレイが大きくなった分バックライトも電力食いだろうし、バッテリー容量増加は相殺されるかもしれない。



でも、僕としては Honor6 plus で 5.5inch を使っていたので、このディスプレイが魅力的に見える。

というわけで、P10 plus を購入することに決めた。




前回、13日の日記で「妻のスマホ買い替え待ち」という話を書いたのだけど、それから新機種の選定を始め、注文したのが14日。


15日には P10 plus が届いたので乗り換え作業。

Huawei 機種は、Android / iOS からの「乗り換えツール」が準備されている。

これを使うと、できるだけ同じアプリを入れてくれ、可能ならデータや設定も引っ越してくれる。


そんなわけで、開封して1時間後には乗り換えが完了。

実際には使っていて多少のトラブルはあったのだけど、見た目の上では画面が広くなっただけの上位機種に、ほぼそのまま環境移行できた。

「気づいたら成長して画面が大きくなってました」というくらい、乗り換えの違和感がない。



多少のトラブルというのは、Amazon Prime Video がデータ不整合でもあったのか使えなかったことくらい。

データ消去して、再ログインしたら何も問題なく使えるようになった。


15日の夜には妻にファクトリーリセットした P10 を渡し、16日中に妻も移行作業。

こちらはいろいろ実験していたこともあり、移行ツールを使わずいくつかのアプリを再インストールしただけ。


SIM サイズが変わるのだけど、その申し込みは後にして、とりあえず2台持ちしていた Zenfone2 Laser に電話機能を戻す。



16日の夜には Honor6 plus が空いたので、ファクトリーリセット。

先日契約したゼロSIM を入れ、新規に子供用アカウントを作り、子供の連絡用に仕立て上げる。




なぜこんな突貫作業をしたかというと、17日に家族で出かける用事があったから。

また、18日から長男が塾に体験入学してみることになっていたから。


どちらかというと、大事なのは塾。

僕や妻が中学の頃は、塾は夜9時には終わっていたものなのだけど、今の塾は10時近くまであるのね。

その時間に子供を一人で帰らせるのは危険なので、車で迎えに行くことにしても、連絡手段が欲しい。



で、その前日に家族で出かけるのだから、そこで練習できるといいだろう、というつもりで突貫で仕上げたのだ。

そのお出かけの話は、この後の日記に…



▲目次へ ⇒この記事のURL

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

歯車

家族

関連ページ

ピューロランドのクリスマス【日記 17/12/18】

別年同日の日記

09年 名機の条件

12年 ふたござ流星群

14年 コンラッド・ツーゼ 命日(1995)

15年 CentOS5+Xen3 から CentOS6+Xen4 への引っ越し


名前 内容

0sim  2017-12-13 12:06:04  コンピュータ 歯車

▲目次へ ⇒この記事のURL

昨日に続き電話関連の話。


中学1年の長男に、先日塾の模試を勧めてみた。


近所の学習塾が、無料で模試を行っていたのね。

チェーン店なので、県下の1万人以上が同じ試験を受け、学力がわかる。


結果はまだ出てないのでそのことは良いのだけど、このときに「子供との連絡手段欲しいな」と、ちょっと思った。

初めて、子供だけで夜外出させて、車で迎えに行ったので。




まずは、0sim を申し込んでみる。


ゼロシム。月額料金無料、500MByte までは利用料無料の、データ専用 SIM だ。

500M を超えると、100Mごとに100円かかる。時々子供と連絡するだけなら、500Mに収まるだろう。


データ専用だけど、IP電話を使えば通話もできる。

そして、LINE を使えば、相手が限定されるが音声通話でも無料だ。


ちなみに、昔は LINE は SMS が使えないと ID 作れない、と言われた。

今は Facebook アカウントがあれば ID を作れる。データ専用 SIM でも大丈夫。



問題は、これを入れるスマホだな…

昔使っていたLumix Phoneをガラクタ箱の奥深くから発掘。


古いけど、通話するくらいなら問題ないだろう。




ところが…だ。

LumixPhone 、ずっとほったらかしだったので、過放電でバッテリーがダメになっているっぽい。


最初は、1日充電しても5分動作するのがやっとだった。

ただ、過放電で悪くなったバッテリーは、しばらく使っているうちに「ある程度」回復する、と聞いたことがある。


繰り返してみても、30分くらいが限度。


ネットで調べると「冷凍庫に一晩入れ、半日かけてゆっくり解凍するとよくなる」という情報が。

一体何がどういう原理で。オカルトだと思いながら試す。


なんと、4時間くらい動くようになった。

これは、機内モードにして無駄な電力を消費させない状態の話。




ゼロシム自体は、入れて動作させてみたら問題なく動く。


ただし、セルスタンバイ問題が出る。

データ専用 SIM を入れられたスマホが「音声通話回線が見つからない」と思って、一生懸命探し続けて電力を無駄に消費する現象。


ただ、「セルスタンバイ状態」と表示はされているのだけど、この状態でもやっぱり稼働時間が4時間くらい。

「音声が見つからないよー」とは言っているが、それで無駄あがきはしない、ということか。





試しに LINE アカウントも作り、通信できるようになった。

あとは、動作時間さえどうにかなればなぁ。



…まぁ、本命は妻のスマホの買い替え待ちか


現在、僕が以前使っていたスマホと併せ、妻は2台持ちで生活している。


新しい機種を買ってみたのだけど、


「スマホ初心者だったので、Android スマホがメーカーごとにかなり使い勝手が違うのを知らなかった」


のが主な原因で、使わずに僕に譲ったのだ。

でも、そろそろ機種差に慣れてきて、本当に欲しい機能が何かまとまってきているようだ。



譲れない機能、諦められる機能などが見えてくれば、適切な1台を買える。

そしたら、少し古い機種が2台余るので、そこにゼロシムを入れればいいだろう。


▲目次へ ⇒この記事のURL

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

歯車

関連ページ

P10 plus に乗り換え【日記 17/12/18】

P10 plus に乗り換え【日記 17/12/18】

別年同日の日記

02年 ページ更新

03年 東海道旅行終了

04年 忘年会

09年 風邪その後

10年 盛りだくさんの週末

12年 答えは重要ではない


名前 内容

IP電話  2017-12-12 17:16:02  コンピュータ 住まい

▲目次へ ⇒この記事のURL

ルーターを入れ替えてから、IP電話が使えなくなった。


…早くどうにかしなくちゃなぁ、って思いながら、元々ほとんど使ってなかった電話なのでほったらかしになっていた。


会社の電話番号なのだけど、関係者はみんなメールとか僕の個人携帯電話にかけてくるので、もし掛かってくるとしてもお役所か、セールス電話だけ。

で、お役所からかかってきたことなんて、ない。


でも、ずっとそのままにはしておけない。

重い腰を上げて、やっと「どうにか」した。


電話番号変わってしまったので、お役所には新たな番号を届けないといけないのだけど。

セールス電話は、来なくなるだろうからかえって良いだろう。




元はといえば、NTTコミュニケーションズの運用する IP 電話を、NTT 純正のルーターで使っていたのだった。


ところが、今年の春にルーターが壊れた。

IP 電話設定できるルーターはかなり古いバージョンが「最新の現役」であり、事実上開発が止まっていた。


というのも、NTTコミュニケーションズは現在スマホで使用できる 050plus という IP 電話を展開していて、家庭用の「固定 IP電話」は縮小傾向だから。

過去に契約した人たちへのサービスは維持しているが、新規獲得する気はないのだろう。



対応したルーターが無いと、使い続けることはできない。

でも、NTT コミュニケーションズ系の IP 電話を、VoIP アダプタで使用している、という人のブログ記事などを見つけた。


なるほど、それで行こう。

というわけで、ルーターと一緒に VoIP アダプタを購入してあった。




NTT コミュニケーションズ「系」という書き方をしたが、過去において展開された家庭用の IP 電話は、NTT コミュニケーションズが直接運用しているものではない。


インターネットサービスプロバイダ…各家庭からインターネットに接続する業者が、サービスを「再販」する形で展開したものだ。


僕はアサヒネットを使用しているので、アサヒネットの「IP電話C」というサービスに当たる。


#朝日ネットでは、他に「IP電話F」も展開している。

 C はコミュニケーションズで、F は富士通のサービスを再販した形。



僕は、アサヒネットから振り出された、NTTコミュニケーションズ系の IP 電話のサービス ID などを VoIP アダプタに設定すればそのまま使える、と思っていた。

でも、話はそんなに簡単ではなかった。




VoIP というのは、Voice Over Internet Protocol の略。

「インターネットで音声通話」って意味合いだな。IP 電話の技術の総称だ。


問題はこれが「総称」であることで、少しづつ違ったいろんな技術がある。

そして、VoIP アダプタでは、ものすごくたくさんの設定項目を用意することで、どの技術にも対応できるようにしてある。


NTT 純正ルーターでは、この「膨大な設定項目」をすべて隠し、ユーザーごとに与えられる値だけを設定すればいいようにしてあった。

というか、VoIP を独自拡張し、設定すべき項目を自動的にサーバーから取得するようにすらしてあったようだ。



この項目を正しく設定する必要があるわけだが、問題は「サーバーから自動取得する」ような値。

NTTコミュニケーションズ系の IP 電話でも、サービスプロバイダによっては公開されていて、公開されていなくても解析されていて、場合によっては一切の情報がない。


アサヒネットは、比較的情報がない方だった。一切ないわけではないが、僕は VoIP の専門知識が乏しいため、正しい設定方法を見いだせなかった。



VoIP を扱う無料ソフトウェア… Asteriskというものがある。

これを使うと電話構内交換機を作れるのだけど、まぁややこしいことはいいや。つまりは、VoIP アダプタの内部ソフトと同じようなことをしているはずだ。


これにアサヒネットの IP電話C を登録している例は、いくつか見かけた。

でも、一般的な VoIP アダプタの設定方法とは、大きく異なる。

そこを解決するだけの知識が、僕にはなかったのだ。




一応書いておけば、春から設定を始めて、夏くらいまではいろいろ粘ったのだ。

アサヒネットの知り合いのつてを頼って、技術の偉い人に「IP電話Cの設定パラメータわかりませんか」なんて直接聞いたりもした。


でも、ダメだった。

NTTコミュニケーションズのサービスを再販しているだけで、詳しいことは知らないんだそうだ。


#偉い人だから末端の細かなパラメーターまで知っているわけがない、という側面もあるとは思う。


得られた答えは「解約して別のサービス使ったほうがいいです」っていう答え。


サービスしている会社の人に解約して、って頼まれるのもすごい話だ。

でも、それだと電話番号変わっちゃうからなぁー、って思ったまま半年が過ぎた。




先ほど、妻に「あの電話結局どうなってるの?」と聞かれて、再挑戦することにした。

もう、電話番号は変わってもいいので使えるようにしよう。


そう腹が決まれば展開は速い。以前から考えていたことはある。


smartalkの電話番号をすぐに取得する。

月額無料の IP 電話だ。その代わり、通話料が少し高い。


でも、元々家の電話は別にあり、仕事用の待ち受け専用だ。

通話料っていうのはこちらから掛けたときに発生するものだから、高くても関係ない。



smartalkはスマホアプリで使うことを前提としているのだけど、普通の VoIP だ。

IP電話Cのような、特殊なことはやっていない。


だから、VoIP アダプタに設定すれば、固定電話でも使用できる。

サポート対象外だから、設定は自己責任で、というだけ。


設定は主にこの辺とか、この辺を参考にさせてもらった。


最初はつながらず、いろいろいじる。

NAT 越えができてないのかな、と思ってルーターにサーバー設定を行い、VoIP ルーターは NAT 越えがいらないようにする。


でもなかなかつながらないなぁ、と思っていたら、パスワードの設定個所を間違えていた。

正しく設定したらあっさりつながった。




調べると、うまく NAT を越えないと「発信は出来るが待ち受けできない」状態になるようだ。

まぁ、仕組みから考えるとそうなるだろうな。


NAT というのはルーターの機能。家庭内の複数のマシンをまとめ、1台に見せかける。


サービスプロバイダは「1台」の接続しか提供しないのだけど、NAT によって複数台を繋げるのだ。

電話をかけるときはこれでいい。


でも「呼び出し」の時は、家の外から接続が行われれる。

機械が1台に見えるからアクセスするのだけど、それはルーターで電話じゃないから通話できない。


これを解決するのが NAT越え、という技術。

これもいろんな方法があるけど、ともかくルーターに「電話にアクセスがあったら VoIPアダプタにデータを渡してね」って教えておく。



今回僕が使ったのは、あらかじめ手動で設定して教えておく、という方法で、NAT 越えは使わない。


設定方法としては難しいので、参考にしたページはみんな「NAT 越え」の一番原始的で適用範囲の広い(でもトラブルも起きやすい)方法で設定するようになっていた。


原理を理解して、一番シンプルな方法を使えば、トラブルは少ない。

うちの設定としてはこれで行こう。




そんなわけで、今まで使っていた(半年ほどは使えないのにお金を払っていた)IP電話C は解約。

解約してください、って偉い人にも言われちゃってたし。


まだ電話番号を誰にも教えていないので、当面どこからもかかってこないはず。




追記 2017.12.20


どこからもかかってこないはず…と思ったら、無言電話が沢山きました。

SIP SPAM と呼ばれるものです。


対策方法書きました。



▲目次へ ⇒この記事のURL

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

住まい

関連ページ

無言電話(SIP SPAM)【日記 17/12/20】

別年同日の日記

01年 12/11

02年 粗大ゴミ

11年 カレンダー

12年 nexus 7 と US キーボード

14年 ロバート・ノイス 誕生日(1927)


名前 内容

リロケータブル  2017-11-27 14:09:53  コンピュータ

▲目次へ ⇒この記事のURL

2年ほど前に、LSI-Cの作者さんの訃報に触れ、追悼文を日記に書いた


LSI-C というのは、コンピュータープログラムに使われる「C」という言語の亜種。(実装の一つ)

作者さんに面識はなかったが、昔お世話になったので追悼文を書いたものだった。


で、そちらの日記を見た方が、Twitter に感想を書いてくださっていた。


#時々エゴサーチしてますよ


MS-DOS には、COM と EXE と呼ばれる、二つの実行形式ファイルがあった。

プログラム言語の話なので実行ファイルとも関連が深く、Cでもこの二つのファイルが作れたことを書いたところ、「初めて知った」と素直に感想をくださったのだ。



あー、…ごめん。

知識を得て喜んでくれたところ申し訳ないのだけど、あちらのページに書いたのは正確ではない。


以前書いたことの概要を示そう。


MS-DOS のC言語には「メモリモデル」という概念があり、プログラムを作るときにはメモリモデルを選ぶ必要があった。


このうち、プログラムとデータをすべてひっくるめて 64Kbyte 以内で作れるものは、COM ファイルになる。

それ以外は EXE ファイルだ。



…でも、これは「C言語で、64Kbyte 以内のメモリモデルを選ぶと COM ファイルを作れた」というだけで、COM ファイルの要件ではない。

COM ファイルで 64Kbyte を超えるデータを扱うことも可能だったし、COM と EXE の違いは、プログラムやデータのサイズよりも大切なことがある。


嘘を書いてしまったみたいで申し訳ないので、もう少しちゃんと書いておこう。




メモリの話なので、簡単な基礎知識から。


メモリは「アドレス」を使って参照される。

アドレス=住所、の名前の通り、1つのメモリ(記憶)には、1つのアドレスが対応している。


1000番地に 123という数値を入れておけば、1000番地を読みだしたときには、必ず123が入っている。

1001番地に 45 という数値を入れても、1000番地の内容には影響がない。

あいかわらず 1000番地は 123 だし、1001番地は 45 だ。


当たり前の話なのだけど、この当たり前が成立するから、安心してプログラムも作れるし、計算もできるんだ。

基本はしっかり抑えておきたい。


コンピューターの中では、文字も、プログラムも、すべて数値で表現される。

だから、メモリの中に文章データも、プログラムも、もちろん計算結果も、すべて置いておける。



もう一つ、以下の説明で使うので「レジスタ」というものを覚えてほしい。

これは、CPU の中にある、特別なメモリ。

アドレスは割り振られておらず、CPU が特別な意味を持って利用する。




さて、MS-DOS に COM ファイルの実行を指示すると、OS は空きメモリを見つけ出して、ファイルの中身をそのままメモリに読み込む。

その後、OS は CPU の中にある「データの場所」と「プログラムの場所」を示すレジスタを、読み込んだ場所にセットする。


そして、読み込んだデータを実行する。

これが、COM ファイル実行の仕組みだ。



「データの場所」と「プログラムの場所」のレジスタとは何だろうか?


MS-DOS が使えるパソコンは、8086 という 16bit CPU を使っていた。

この CPU は、8bit CPU の 8080 の後継機種で、8080 のプログラムを「簡単に移植」できるように作ってあった。


8bit CPU では、メモリアドレスは 16bit (8bit 2個分)あった。これで、64Kbyte のメモリを扱える。

プログラムの中でアドレスを扱うレジスタも、当然 16bit だった。


これが 8086 になると、16bit なのだからメモリアドレスが 32bit になったか…というと、そうでもない。

中途半端に見えるかもしれないけど、20bit になった。

そして、アドレスを扱うレジスタは、あいかわらず 16bit だった。


これは、8bit CPU 8080 のプログラムを移植しやすいようにするためだ。



でも、メモリアドレスは 20bit なのに、レジスタが 16bit では全部を扱えない。

そこで、プログラムの中では「メモリの開始位置」をずらせるようになっていた。


たとえば、「データの場所」として、1000番地を指定したとしよう。

すると、プログラムの中では「234 番地」を指定した場合に、自動的に 1000 + 234 で 1234 番地が使われる。


データの場所と、プログラムの場所は、別々に指定ができた。

だから、最大で 128Kbyte のメモリが扱える。


もしそれ以上のメモリを扱いたいときには、プログラムの中で「データの場所」「プログラムの場所」を示すレジスタを書き替えればいい。



しかし、MS-DOS の COM ファイルは、データもプログラムも同じ場所にあり、さらに場所の書き替えは行わない、という前提で作られる。

最初に書いたように、場所をセットするのは OS の役目で、プログラムはその「場所」で動くことになる。




ここで一つ説明が必要になると思う。


なんで、プログラムやデータを示す「場所」のレジスタをセットする、という必要があるのか。

1234 番地を使いたいのなら、プログラムの中で 1234番地、って書いとけばいいのに。



この答えは単純で、プログラムが同時に複数読み込まれるからだ。


あるプログラムが 1234 番地を使う、と指定していたとしたら、別のプログラムで 1234番地を使ってはならない。

でも、プログラムを作るときに、他の「知り得ない」プログラムが、どこのメモリを使っているかなんてわからないのだ。


プログラムの中では 234番地、とだけ指定して置けば、この問題を解決できる。


2つのプログラムが、それぞれ 234番地をつかおうとしていても、OS が片方は「1000番地から」、もう片方は「2000番地から」使うように指示する。

そうすれば、片方は実際には 1234番地、もう片方は 2234 番地を使うことになり、同時に使って問題ない。



そもそも、8086 が 20bit のアドレスを 16bit のレジスタとの組み合わせで示す、という変なアドレス指定方式を採用しているのは、このような使用方法を想定していたためだ。

MS-DOS の COM ファイルは、素直にそのやり方を実現したプログラム形式なのだ。




でも、これでは大きなプログラムを作れない。COM ファイルの限界を無くしたいときには、EXE ファイルを使う。



COM ファイルは、単純にプログラムを入れてあるだけのファイルだった。

でも、EXE ファイルの中は構造になっていて、少なくとも次の3つのものが入っている。


・プログラム

・データ

・再配置情報


COM ファイルでは、プログラムとデータは混然一体となっていた。

でも、EXE では分離してある。


…まぁ、もちろん混然一体にしてもかまわない。

でも、先に書いたように 8086 は「プログラムの場所」と「データの場所」を別々に指定できる仕組みを持っている。


だから、分離しておけば、読み込み時点で OS が適切にメモリに配置してくれる。



最後に残る「再配置情報」っていうのは何かというと、プログラムを実行する間に OS が書き替えるためのヒントだ。


しつこく繰り返すことになるが、8086 には「データの場所」「プログラムの場所」を、それぞれ 64Kbyte 確保する仕組みがある。

それ以上のメモリアクセスが必要なら、これらの「場所」を示すレジスタを書き替えないといけない。


でも、ここで先に書いた問題が再燃する。

OS が「1000番地から」使うように指示をくれていたのに、勝手に「2000番地から」使うように書き替えることは許されないのだ。

そんなことをしたら、他のプログラムとぶつかってしまう。


そこで、プログラムを作る際には、仮に「0番地から」メモリアドレスを始めて、場所を示すレジスタも、自由に書き替えてよいことにする。

ただし、プログラム中でレジスタを変更する場所は、すべて「再配置情報」に記しておく。


OS は、ファイルからプログラムを読み込み、メモリに配置する際に「再配置情報」を参照する。

そして、書かれた数値に、適切な数値を足していくのだ。


1000番地から使用するのであれば「0番地から」になっている部分に 1000を足し「1000番地から」に変える。

アドレスを指定している個所をすべて変更すれば、そのプログラムはメモリのどこに置かれても、正しく動作する。




プログラムをメモリのどこにおいても大丈夫なように作る…このようなプログラムを「リロケータブル」という。

英語で書けば relocatable。re(再び)locate(配置)able(可能)で、日本語訳は「再配置可能」。


COM ファイルは、そのままでリロケータブルだ。「場所」を示すレジスタさえ正しく整えれば、どこにおいてもそのまま動く。


EXE ファイルのプログラムは、読み込むアドレスを「仮に固定して」作られている。リロケータブルではない。

でも、再配置情報を使って、OS が書き替えを行うことで、リロケータブルになっている。

利用者にとっては気にする必要はないだろう。どちらもリロケータブルだ。



さて、ここでやっと、最初の問題に戻れる。


僕は、COM ファイルの要件を「プログラム、データ含めて 64Kbyte 以内のもの」というように書いたのだけど、実はこれは嘘だ。

COM ファイルはサイズが問題なのではなく、「そのままでリロケータブル」なプログラムを意味している。


メモリのどこに読み込んでも実行できる。

MS-DOS の仕組みでは、「読み込み時点」では、64Kbyte 以内に収まることが大切だ。

これは、ファイルサイズが 64Kbyte 以内であること、と同じ意味になる。


実行された後に、空きメモリを探して確保して、外部データファイルを読み込むのは構わない。

こうすれば、COM ファイルでも 64Kbyte を超えるデータを扱える。




歴史的には、MS-DOS の元になった CP/M という 8bit OS があり、その OS の実行ファイルが COM だった。

8bit なので、同時にいくつものプログラムを読み込むことはできない。


MS-DOS では、8086 の仕組みを利用して、COM を複数同時に読み込めるようにした。

CP/M にはできない芸当で、便利だった。


でも、16bit らしい大きなプログラムは作れなかった。

そこで、MS-DOS の Ver 2 になってから、EXE ファイルの仕組みが拡張された。



先に書いたように、仕組みは違うがどちらも「リロケータブル」なファイルで、ユーザーから見たら特に違いはない。


形式が古く、制限の厳しい COM ファイルを好きこのんで作る理由なんて、どこにもなかった。

DOS 標準プログラムも、ver1 から使われている command.com 以外には、非常に小さなプログラムでもほぼ EXE で作られていたと思う。


しかしまぁ、ファイル構造を示すヘッダがない、構造を解析してパッチを当てる時間が不要、などの理由で COM ファイルは「実行が速い」とされた。

ディスクアクセス時間に比べれば、そんなものは誤差範囲レベルなのだけど。


制限が厳しいからこその腕試し、というような側面も相まって、それなりに COM ファイルは作られていたと思う。




さて、ここからは余談。



EXE ファイルのような、「OS がアドレスを変えることで」どこにでも読み込めるようにする…という形式が、いつ頃考案されたのか僕は知らない。


マルチタスクなら、複数のプログラムがメモリに読み込まれるので、当然「プログラムをどこにおいても良い」、つまりはリロケータブルである必要がある。


マルチタスクの元祖は、Multics か、その前身となる実験だった TSS あたりになるのだけど、今調べたら TSS では当たり前に「リロケータブル」となる仕組みが作られていたようだ。


おそらくは、シングルタスクでも複数のライブラリを組み合わせて使用する場合などで、アドレス調整の必要からリロケータブルの仕組みが作られたように思う。



以前調べた中では、WhirlWind I のライブラリプログラムは、リロケータブルにできるように作られていた。

もっとも、これは OS が仕組みを作っているとかではなくて、ソースコードレベルで「別のアドレスに置くときは、ここの部分を改造する」など、適切なコメントを人間に残す形なのだけど。


ともかく、プログラムを置くアドレスが変わっても、正しく動作するプログラムを作ろう、という意識はあったことになる。

となれば、後はどこかの段階で、機械的なサポート方法が考案されたのだろう。



MS-DOS は、Ver 1 では COM ファイルしか使えない。

CPU がサポートする機能を使ってリロケータブルを実現してはいるが、「OS の機能」として、制限の少ないリロケータブルをサポートするのは Ver 2 以降だ。


大型機で使われていた技術を取り入れたものだろう。




X68000 という 16bit パソコンがあった。

CPU に 68000 という、昔の Apple Macintosh や、セガの「メガドライブ」に使われたものと同じ LSI を使用していた。


この CPU では、MS-DOS は動かない。

だけど、MS-DOS を参考にしたと思われる、Human68k という OS を標準搭載していた。



実行ファイルも、MS-DOS のように2種類あった。x 形式と r 形式だ。

x 形式は、EXE と同じように、実行前にプログラムが OS によって書き替えられる。


r 形式は書き替えずにそのまま実行する。この点は COM ファイルと同じだ。

でも、68000 には MS-DOS のような「メモリの始まる場所」を示すような数値はなかった。


それでも、リロケータブルなプログラムを作ることができた。




8086 では、アドレスを表すのに3つの方法があった。


・今実行中のアドレスに、1byte 分、-128~127 の数値を加える。

・今セットされている「場所を示すレジスタ」を先頭として、2byte 分、0~65535 の数値を加える。

・場所を示すレジスタも書き替えて、全メモリ(20bit)を指定する。



これに対して、68000 では、大きく分類して2つのアドレス指定方法があった。


・今実行中のアドレスに、2byte 分 -32768~32767 の数値を加える。

・全メモリ (24bit) を指定する。



8086 の COM ファイルは、「場所を示すレジスタ」を OS がセットしてくれるのを前提として、リロケータブルになっている。


それに対し、68000 では、レジスタの助けを無しにリロケータブルにできる。

アドレスの範囲は同じ 2byte に見えるが、常に「実行中のアドレス」を中心とするため、作り方次第で 64Kbyte を超えるプログラムも作れる。


68000 の「リロケータブル」は、8086 の「リロケータブル」よりも、もっと制限が少ないのだ。



でも、X68k では、「 r 形式」としてリロケータブルなプログラムを実行できるようになっていたにも関わらず、開発のためのサポートはなかった。


MS-DOS なら、C言語でメモリモデルを選択すれば作れた。

だけど、X68k のC言語は x 形式しか作ることができず、r 形式を作るには、アセンブラですべてを書くしかなかった。



先に、MS-DOS でも COM を作るのは腕試しの側面があった…というようなことを書いた。

とはいえ、C言語でも簡単に作れる。


でも、X68k の r 形式はすべてをアセンブラで書く必要がある。

「適切に書かれれば」という前提付きだけど、C言語の生成するコードよりも効率が良く、高速動作する…ことも考えられる。


だから、r 形式のプログラムは「速い」という神話が生まれた。

いや、ただの神話で、r だから速いなんてことは全然ないのだけど。


僕もあこがれて、いくつかの小さなプログラムを r 形式になるようにアセンブラで書いていた。

まぁ、習作だよね。特に発表はしてなかったと思う。


#特に、シングルタスクの OS 上でマルチタスクな動作を実現する「常駐プログラム」はアセンブラで書く必然性があったので、そういうものを試作していたはず。


大学2年生の時に作った、BANDITS も r 形式ではなかったかな。

ただ、このゲームは未完成。習作何本か作っていい気になって大作に挑み、失敗した。


技術が伴わないのに大きな目標を立ててはいけませんね。



▲目次へ ⇒この記事のURL

関連ページ

【追悼】森公一郎さん (LSI-C の作者)【日記 15/01/20】

別年同日の日記

03年 ピザ

06年 クリスマス飾り

15年 エイダ・ラブレイス 命日(1852)

15年 NTT工事延期

16年 セガ・サターン復活


名前 内容

Android Chromeでスクロールがおかしくなるバグの原因と修正  2017-10-27 11:30:48  コンピュータ

▲目次へ ⇒この記事のURL

フリーのプログラマーとしてやっているので、仕事内容はどんどん変わる。

ここ数カ月は、ある企業の WEB サイトデザインの大規模変更を手伝っている。


すでに長年運用されているサイトで、Wordpress で構築されている。

プログラムは拡張を繰り返してスパゲッティ状態だが、今回は「デザイン改修」が趣旨なので、プログラムは出来るだけそのまま活かして…

という指示。


ほぼ完成していたのだが、今月の中ごろに、一部の Android 端末でスクロールがおかしい、というバグが報告された。




Chrome のアップデートで、スクロールがおかしくなるバグが混入したらしい


…と報じているサイトがあった。9月28日の記事で、アップデートは9月25日…ということになっているが、実際には19日。


#Android アプリを配布する Google Play ストアでは、バグやウィルス入りのアプリが一気に広まるのを防止するため、複数のサーバーで徐々に配信が開始される。

 アプリの登録・公開は19日だったが、実際にアップデートが入るのは端末ごとに接続するサーバーにより異なり、25日が嘘だということではない。



あぁ、Chrome のバグならしょうがない。そのうちアップデートされるだろうから、この件は一時保留…となったのだが、大きなバグに思える割になかなか修正されない。


クライアントからの強い修正依頼もあり、たとえ Chrome に原因があろうとも、多少別の機能に影響が出ても回避・修正せよ、となったのが昨日。

徹底的に原因の解明が始まった。




改めて確認すると、自分の端末でもバグが出た。


先日新しい端末にしたばかりで、以前の端末では問題が出なかった…と思う。

普段は PC の Chrome で、スマホエミュレートして確認をしているが、やはり問題は出ていない。


ともかく、手元でバグを再現できるようになった。こんなに心強いことはない。

しばらくいじって、バグの出る状況を確認。



スマホのブラウザの場合、スクロールによってアドレスバー…URL を表示したり、入力したりするところが、現れたり消えたりする。

この状態が切り替わった後、最初の Idle 状態にブラウザがなった時に、スクロール位置がトップに戻ってしまう、というバグが出現した。


Idle 状態って表現は説明がいるだろう。

アドレスバーはスクロールに合わせて出入りするが、スクロールが「止まって」も、指が放されるまではスクロールが続いている、と考える。

また、指を放す際にフリックすると、慣性スクロールが始まる。この慣性スクロールが終わるまでは、スクロールが続いている。


そして、スクロールが終わった時が「Idle 状態になった時」だ。

この瞬間にバグが出る。



多少の心当たりはあった。

作製しているサイトでは、画面上にある「ナビゲーションボタン」を、スクロールに合わせて表示を切り替えていた。


ページ表示時には、ページのヘッダ部分があり、その下にナビゲーションがついている。

文章を読み進め、下に向かってスクロールすると、当然ヘッダとナビゲーションは上に消えていく。


…はずなのだが、ナビゲーションがちょうど画面の上に貼りついたタイミングから、ナビゲーションだけがその位置に固定される。

CSS を position:fixed に変えているわけだが、これは画面スクロールに合わせて行っている。


スクロールのタイミングに合わせてバグが出る、というのは、この一連のプログラムと関係があるのかもしれない。

そこで、Javascript の該当プログラムを動かないようにしてみる。


…それでもバグは出た。




サイトはすでに古いものだし、Wordpress で構築されている。

他にも無数の Javascript プログラムが動いている。


このどこかでおかしくなっているのかもしれないし、全く違うバグかもしれない。


いろいろとプログラムや CSS など、外部から読み込むプログラムを外しては、リロードしてみる。

この最中、不思議なことに気が付いた。


ある程度スクロールを進めた状態でリロードを行うと、まず画面のトップ位置が表示され、続いてリロード前の位置にジャンプし、さらにまたトップ位置に戻される。


…普通は、直前まで読み進めた位置にジャンプして終わりのはずだ。最後の「トップ位置に戻る」が余計だ。


何度かリロードして観察して、このタイミングは、画面上の全要素を配置し終わったタイミング、いわゆる「window.load」だ、と見きわめた。

Javascript で何か処理が行われている可能性が高い。



無数の Javascript ファイルのどこで処理が行われているのかわからないが、ステップ実行を延々と…10分以上も繰り返して、やっと最後の「おかしな動作」をするタイミングを見極めた。


ウィンドウのロード、リサイズ時に、document.body.scrollTop を調べ 0 ならば window.scrollTo(0,1) する、というプログラムがあった。




このプログラム、5年くらい WEB サイト構築をしている人なら何かわかるだろう。


5年ほど前に、「ページを開いた瞬間から、アドレスバーが消えて画面が広く読みやすい」という WEB デザインが流行したことがある。


アドレスバーは、下にスクロールすれば消える。これを Javascript で実現するのが、上のプログラムだ。

ロード・リサイズ時に画面の一番上を表示していたら…つまり、ページ読み込み直後なら、1ドットだけ下にずらしてやる。

すると、アドレスバーが消えた。


しかし、アドレスバーが消えると表示中のサイトの URL もわからなくなるわけで、フィッシング詐欺には好都合だった。

他のサイトと同じような動作なら疑問に思う人もいない。そういう詐欺サイトが横行した。


これをうけて、スマホのブラウザでは、人が操作しない、Javascript でのスクロールはアドレスバーに影響を与えないようになった。



つまり、先のプログラムは今となっては無意味だ。

無意味だけど、やっぱり読み込み直後には1ドットスクロールする。

それ以外は何もせず、無害なプログラム、のはずだった。




スクロール位置は、古くは document.body.scrollTop で調べられた。

しかし、body 要素は「ドキュメントの表示部分」を意味する。それに対し、スクロール位置というのは、表示ウィンドウの問題とか、もっと別の次元のものだ。


この論理的なおかしさをただすため、document.documentElement.scrollTop でスクロール位置を調べる、という方法が標準化された。


Chrome の元となっていた webkit にもこの変更は反映された。

だけど、コンパイル時のオプション設定により、新しい「標準モード」と、古い「互換モード」を、切り替えられるようになっていた。


Chrome では過去との互換性のため、body.scrollTop が使い続けられていた。

しかし、9月頭にアップデートされた Chrome で、body.scrollTop から documentElement.scrollTop に切り替えられたらしい


こちらにgitログがある。

 …が、超巨大なページの上、技術者でないと意味が分からないので、特に興味が無ければ読まないのがお勧め。

 で、このログで scrollTopLeftInterop を検索すると、default が Enable され、WebView が Disable されているのがわかる)



これは、「いつか行う、と予定されていた変更」が実行されたに過ぎない。


すでに documentElement を使用していたブラウザもあるし、「ブラウザを調べて」ではなく、「環境を調べて」動作を変えるプログラムを作っておかなくてはならなかった。


そのための期間も十分に与えられていたにもかかわらず、動作がおかしくなったサイトがあったとすれば、そのサイトに潜在バグがあったと言わざるを得ないだろう。


これは Chrome のバグなどではなく、もちろん今後のアップデートで修正されるものでもない。




上に書いたのはデスクトップ版の話で、同じ変更が9月下旬に Android 版 Chrome に入った。


今後、body.scrollTop は、実際のスクロール位置を反映せず、常に 0 となる。



これが、2012 年ごろに流行った「アドレスバーを消す」ための Javascript と、非常に相性が悪い。


画面ロード時・リサイズ時には、本来「現在のスクロール位置が 0 なら」、scrollTo(0,1) でアドレスバーを消していた。

これが、現在のスクロール位置に関わらず、いつでも scrollTo(0,1) で、ページトップに戻ることになる。


いや、これでもまだ、PC 版で同じプログラムが動いていたとしてもあまり害をなさない。

ロード時に動くのは問題ないし、ページ中でのウィンドウリサイズも、それほど行わないからだ。



スマホだと、スクロールしただけで、アドレスバーが表示・消去される。

アドレスバーを消す理由は、コンテンツの表示領域を広げるためだ。


このため、Chrome ではスクロールしただけでリサイズイベントが発行されることがある。

どうも、このイベントの発行は、Scroll イベントが置き続けている時は避けて、Idle 状態になった時に行われるようだ。



これで、最初に書いたバグの条件がすべて整った。


スクロールに伴い、アドレスバーの表示・非表示が切り替わると、その後最初に Idle 状態になったタイミングで、現在のスクロール位置に関わらず、画面トップに戻される。




原因が理解できれば、修正も簡単。

幸いなことに、「1ドットスクロールさせる」というプログラムは、2012年頃には意味のあるものだったが、今では全く意味をなさない。

このプログラム自体を消してしまおう。


これで正常な動作に戻った。



今回の仕事ではこれで終わりだったが、「スクロール位置を変更したい」場合の動作も変わっているらしい。


jquery 的表現だと、今まで Chrome は $('body').scrollTop(y) などでスクロール位置を指定できた。

これを、$('html').scrollTop(y) にする必要がある。


…FireFox では、html に指定しなくてはならなかったので、$('html,body').scrollTop(y) としているサイトも多いかもしれない。

この場合、特に問題は出ず、今まで通り動き続ける。


機種判別して使い分けていた場合は、修正が必要だ。


▲目次へ ⇒この記事のURL

別年同日の日記

01年 10/27

02年 妹主演の劇を見る

04年 枝豆

11年 太陽電池

16年 ダイナマイト刑事


名前 内容

P10 に乗り換え  2017-10-23 15:40:13  コンピュータ 歯車

▲目次へ ⇒この記事のURL

P10ってわかりにくい商品名だな。Huawei P10。いわゆるスマートホンだ。


今まで使っていた Honor6 Plus と同じ会社の、比較的最新の上位機種に当たる。

買い替えになるのだけど、Honor6 Plus に不満があったわけではない。




Honor6 Plus を購入したのは2年近く前。妻も一緒にスマホを購入した。

妻のスマホは Zenfon2 Laser 。


購入時点でのネットでの評価は悪くなかったし、値段の割に性能が良くて当時のベストセラー機種の一つなのだけど、その後評価が落ちた機種でもある。

Pokemon Go がブームになった時に、この機種ではうまく遊べなかったから。


Zenfon2 Laser は GPS のアンテナが弱く、位置データ取得が怪しい。

どうも「GPS を ON にしてから最初の位置測定」までが時間がかかるようで、バックグラウンドで常に GPS 測定をしているとそれなりに正しい位置を測定してくれる。

でも、それだと無茶苦茶電池を食う。


Pokemon Go を快適に遊ぶための電子ガジェット「Pokemon Go Plus」も公式に対応しておらず、実際うまく接続できない。

もう1年以上前、発売したばかりで入手困難な時期に購入したにもかかわらず、1度も使えていないまま。



さらに加えて、Zenfon2 Laser はカメラ性能が低い。

「レーザー測位するから暗がりでもピント合わせが速く、良い写真が撮れる」というのが名前の由来の機種だけど、肝心のカメラが暗がりに弱く、明るくても写真写りが悪い。



そんなわけで、我慢して使っていたのだけど、半年くらい前から買い替えを検討していた。




上のような理由なので、できることなら Go Plus が動く機種がいい。

でも、これが非常に難しい。


Go Plus は、Android での動作が壊滅的だ。

動く機種もあるのだけど、動かない機種が多い。動作報告されている機種でも、動かないという報告もある。


これに対し、iPhone は安定して動く…とされていた。iOS 11 が出るまでは。

先日 iOS 11 が出てからは、動かなくなったという報告が相次いでいるのだ。


…えーとつまり、iPhone を買っても Android を買っても、Go Plus を使うのはギャンブルだということになる。


ずっと妻は悩んでいたが、本格的に「思い切って買い換えようと思う」と相談を受けたのが1か月ほど前。

調べてみると、Android なら「最近の」Huawei 系の端末は動作しやすい、とわかる。


僕が使っている Honor 6 Plus は最近の機種ではないのでダメだ。



Go Plus の動作がギャンブルなら、それ以外の観点で選ぼう。

カメラ性能にも不満があるのだから、せめてカメラが満足いきそうな機種を選んだらどうだろう。


こうやって調べていた中で、Honor 9 の発売のニュースを知った。




Honor 9 の性能を調べるうち、これが P10 の廉価版に当たる。ということも分かった。

P10 を調べると、カメラ性能が少し上で、値段も少し高い。


カメラ性能が満足できるものを買おう、と考えていたので、少し高くても P10 にすると決定。



…で、購入決定の翌日には届いたのだけど、結論から言えば Go Plus は使えなかった。


多くの動作報告があるのになぜ? と思ったが、調べると動かないという報告もあった。

さらに調べると、他の機種での報告なのだけど、「発売してすぐに買った Go Plus はつながらなかったけど、最近買ったのはつながった」という報告を発見。


つまり、Go Plus にはバージョン違いがあり、初期バージョンはとにかく接続性が悪いらしい。



じゃぁ、Go Plus 買い直せばよかったんや!

と調べてみるが、どうも生産を停止しているようだ。売っているのは転売屋ばかり。


…これはあれだな。あまりにも「不良品」というクレームが多いので、設計直すことにしたかなにかで生産停止しているんだな。



ちなみに、Go Plus は「たとえ初期不良でも修理・交換に応じない」と最初から明言して販売している、という不思議な販売方法を取っている。

多分、発売前から何らかの不良品であることを、発売側が認識していたのではないかと思う。


#解析したわけではないので正確なことは言えないが、おそらく Bluetooth の標準的な規格に沿っていない。

 iPhone しか繋がらなかったのは、iPhone のバグか何かに由来した接続方法をしていて、iOS 11 になって繋がらなくなった、というのはそのバグが修正されたためではないかと思う。

 Android で接続できる機種・できない機種があったのは、同じようなバグを抱えていたかどうかによるのだろう。

 (Huawei は、あるころのアップデートで Go Plus が動作するようになったので、わざわざバグを再現したのかもしれない。

  また、同じバグを持った機種が偶然でそれほど多いとも思わないので、どこかのチップメーカーが提供した標準デバイスドライバがバグ含みで、そのチップを使った機種を中心にバグがあった…と想像)




とりあえず仕方がないから P10 を使おう、それでも、Zenfone2 Laser よりは GPS 感度良いのだし…と決めた翌日、妻の方から提案があった。


僕が P10 を使うことにして、中古の honor 6 plus を譲ってくれないか。



僕としては最新機種を使わせてもらうのはありがたい。

特にガジェット好きではないし、honor 6 plus に不満はなかったのだけど。


妻が Go Plus を使いたい一番の理由は、手の小さな妻では、スマホを持ちながら走り回っていると、良く落としてしまうからだった。

Go Plus があれば、スマホはカバンなどの中に入れたままでゲームの操作ができる。


ここで、Go Plus が使えないまま P10 を使うと、折角の新しい端末を落としまくってしまい、もったいないことになりそうだ、という懸念。

それなら、中古機種を最初から使っていたほうが、落としたとしても気が楽だそうだ。



と、説明が長かったが、そんな経緯で急に P10 を使うことになった。




Honor 6 Plus は micro SIM だったが、P10 は nano SIM 。なので、SIM 交換が必要だった。

ちなみに、Zenfone2 Laser は micro SIM なので、妻はそのまま乗り換えられる。


新しい SIM を待ちながら、P10 に乗り換えの準備。

同じ会社の上位機種なので、使い勝手はほとんど変わらない。特に戸惑いもなく移行できた。


Huawei は、iPhone を強く意識して端末を作っている。Android としてはかなり使い勝手を改造していて、Androidに慣れた人が使うと戸惑うだろう。

しかし、iPhone から Android に乗り換える際には良い端末だと言える。


そして、この改造のついでに、普通の Android では使えない「ちょっとした機能」をたくさん搭載している。

機能が多すぎて、設定するのが大変ではあるのだけど、何も設定しなければ普通の Android と同じように動くので気にしないでもいい。


たとえば、登録されている WiFi 局がないときは、WiFi を OFF にしてしまい、時々確認のために ON にする、という機能がある。

これにより、電池の持ちをよくできる。僕は以前、この動作を Llama でプログラムしていたのだけど、P10 は OS で持っている。


例えば、画面ロック…画面が消えて、パスワードなどの認証が必要な画面に戻る際に、アプリを「閉じて」しまう機能がある。

アプリごとに ON / OFF を設定できるのだけど、使っていない時は閉じてしまえば、動作しなくなるので電池の持ちをよくできる。

僕は以前、この動作を Llama でプログラムしていたのだけど、P10 は OS で持っている。


例えば、アプリごとの通信許可。本来通信が必要ないアプリで、広告を出すためだけに通信するのを「許可しない」ことができる。

僕は以前、この動作を Llama でプログラムしていたのだけど(以下略)



まぁ、こんな調子で、今まで Llama を使って実現していた「ちょっと便利な使い方」を、ほとんど OS レベルで持ってしまっている。

とりあえず Llama は入れたのだけど、今のところ何も動作していない。

(これから使っているうちに、必要だと思ったらプログラムを組むのだけど)


まぁ、Llama は作者さんが「最近の Android では役割を終えた」と感じたようで、メンテナンスが止まったままだ。

僕としても、そろそろ使うのをやめるべきかと思っている。




全然 P10 のレポートらしいこと書いてないな…

でも、本当に honor 6 plus とあまり変わらない、という実感。


・上に挙げたように、細かな使い勝手の良さは上がっている。

・CPU が良くなったので、軽快な動作感になっている。

・指紋認証は素晴らしい。ポケットからつまみ出そうとしただけで指が触れる位置にあるので、出したときには使えるようになっている。逆に言うと電源を切ってポケットに入れるときにも起動することがある。

・カメラは、少し暗がりに強くなった。これはレンズの良さによるのだろう。でも、honor6 plus も結構カメラ性能良かったので、ライカすげー、というような感覚はない。



▲目次へ ⇒この記事のURL

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

歯車

関連ページ

0sim【日記 17/12/13】

P10 plus に乗り換え【日記 17/12/18】

P10 plus に乗り換え【日記 17/12/18】

別年同日の日記

03年 当たりました

15年 古くて非力なマシンをLinuxBeanで再生してみた

15年 マイケル・クライトン 誕生日(1942)


名前 内容

ヒューマン・リソース・マシーン  2017-09-12 17:28:45  コンピュータ

▲目次へ ⇒この記事のURL

Switch 購入時から遊んでみたかったゲームなのだけど、やっと購入して遊んでみた。

僕の周囲では評判の良いゲーム。


これがまぁ、変わったゲームではある。



課題を出されるのでアセンブラでプログラムを作る、というゲームだ。


…ゲームなのか? まぁ、楽しいのだけど、人を選ぶのは間違いない。




表面上は、小さな人がチョコマカと動き回ったりして、ゲームらしくなっている。

でも、これはあくまでも飾り。ゲームの本質はそこではない。


ゲーム内容的には純粋にプログラムをするだけだし、そのプログラムも「入力データを8倍して出力せよ」とか、「0 を区切りとする入力データ列の合計を出力せよ」とか、いかにもプログラム演習っぽい物。


使用言語はアセンブラ。それも、1950年代くらいの、飛び切り古いアセンブラだと思っていい。


アキュムレータ(レジスタ)は1つだけ。

条件分岐は「0」と「負」しかない。

メモリはあるけど、配列として使えない。

スタックなんてないからサブルーチンも呼び出せない。


いや、1950年代の計算機は、「計算機」なので掛け算や割り算の機能を持っている。

でも、このゲームではそれすらない。足し算引き算だけ。


ちなみに「直値」という概念もない。扱えるデータは、すべてあらかじめメモリに入っているもののみ。



#翌日追記

 途中のステージから命令が追加され、間接アドレッシングでメモリを配列として使えるようになりました。

 後の部分で書いてあるのだけど、この文章書いた時点で最後までゲームを終わらせていなかったための勘違い。

 もっとも、序盤のステージでは配列を使いたくても使えない、というのは事実。



しかし、この厳しすぎる制約の中でプログラムをする、というのが、適度に頭を使う心地よいものなのだ。

プログラムをするゲームというよりは、ちょっと複雑なパズルゲームだと言って良いだろう。


「A ÷ B の余りを求めよ」と言われたら、普通のプログラム言語なら1行で終わってしまう。

でも、こんなに制約が多いアセンブラだと、ちょっと工夫しないといけない。

そもそも割り算命令なんてないのだ。割り算って何だっけ? ってところから考える必要がある。



ゲーム的には、入力に対して正しい出力が得られれば「成功」となる。

各ステージは「成功」すれば次に進めるのだけど、さらに「十分小さいプログラム」と「十分速いプログラム」を作れたか、ということも評価される。


これがまた、アセンブラでゲームを作っているようで楽しい。




ゲームとしては、入力されるデータは毎回変わる。

そのため、入力を「決め打ち」して高速化するような姑息な手段はとれない。


その一方で、データはランダムに決められているわけではなく、非常に巧妙に作られている。


「0区切りデータの合計」であれば、あえてデータがない「nullデータ列」が入っていたりする。

データが無いから合計は 0 なのだけど、ちゃんとプログラムを組んでいないとおかしな出力を出してしまい「失敗」となる。



デバッグもプログラムの楽しさだと思うのだけど、わざとバグが出やすい課題とデータを用意してあるのだ。



昨日ダウンロードして遊び始めたところなので、まだ全部は遊んでいない。

昨日は、たった3つのデータをソートするプログラムで頭を悩まし、一端プレイを終了した。


ソートプログラムって、配列を前提に考えてしまうもので、配列がない環境でのアルゴリズムが思いつかなかった。

その後もお風呂に入りながら考えたり、家事をしながら考えたりして、「今晩試してみよう」というアルゴリズムは思いついている。


ゲームを離れている時間まで考え続けてしまうのだから、ゲームとしてはかなり成功していると思う。




僭越ながら、僕も過去に Z80 vs 6502 というページを作ったことがある。

Z80 と 6502 で、よくあるプログラムを「課題」として、高速なプログラムを作る競争で、結構盛り上がった。


もっとも、最初から競争を意図していたのではない。

僕がプログラムを作って公開したら、多くの人が改良案を送ってきてくれたので競争になってしまっただけ。



でもね、多くの人が参加してくれたというのは、つまり、「アセンブラの最適化は楽しい」ってことに他ならない。


そんなの、プログラマの中でもほんの一部の上級者だけが理解できる楽しみだと思っていた。

でも、それを多くの人に届けようというのがこのゲーム。


プログラム経験があったほうがすぐに楽しめるとは思うけど、最初は簡単な課題からなので、経験が無くても理解できる。

よくわからない時は、ゲーム中で「上司」に相談すると、回答例を教えてくれる。


(プログラムの正解例ではなく、こんな入力があったら、こんな出力になればいい、と教えてくれる)


足し算だけで「40倍するプログラムを作れ」というのは、アセンブラ経験者じゃないと悩むかもしれない。


同じものを足せば2倍になる。2回繰り返せば4倍になるし、3回繰り返せば8倍になる。

また、4倍になったものに元のデータを加えれば5倍になる。


8倍と5倍が作れるのだから、8*5で40倍も作り出せる。



フィボナッチ数列を作れ、に至っては、言っていることもわからないかもしれない。

一応簡単な説明はゲーム中にあるのだけど、フィボナッチ数列とは何か、と調べることも面白いだろう。


プログラムを組むって、対象を理解することだから。ゲームとはいえ、ゲーム機の前を離れて調査することも楽しみのうち。




おまけ的な要素だけど、このゲームは「ブラック企業」が舞台になっている。


ちょこまかと画面上を動く小さな人は、CPU でいえば「アキュムレータ」だ。

データをどうにかする単純作業を、延々と繰り返す社畜。


課題は上司から出されるし、よくわからない時は上司に聞けばいい。

だけど、この上司の受け答えがまた、ブラック企業感を出している。


英語が元のゲームのはずなのに「忖度」とか「プレミアムフライデー」とか、時事ネタもたくさん入っている。

この会話がいちいち面白い。


さらに、時々ストーリー進行があり、企業の外ではなにかとんでもないことが起きている、とわかってくる。

ブラック企業過ぎて、主人公は何年も本社ビルから外に出ていないようなのだ。

だから、外の世界がどうなっていても、会社で楽しく働いていられる。



「グーの惑星」を作った会社なのだけど、あれも楽しかった。

(Wii 版が発売されてすぐに買って遊んだ)


あちらも、少し陰のある独特の世界観だった。

今作も同じような雰囲気。


まぁ、このセンスも、好き嫌いがはっきり分かれそうなところではあるのだけど。

いろいろな意味で、すごく面白いのだけど人を選びそうなゲームです。




▲目次へ ⇒この記事のURL

関連ページ

続・ヒューマンリソースマシーン【日記 17/09/16】

別年同日の日記

02年 あれから1年

08年 家族旅行2日目

14年 「テレビテニス」が出荷された日(1975)

15年 レイ・ドルビー博士 命日(2013)


名前 内容

スプラトゥーン2 その後  2017-08-08 11:36:45  コンピュータ 家族

▲目次へ ⇒この記事のURL

1度目のフェスも終わり、ある程度遊んでからの感想。

まぁ、まだ1ヵ月も遊んでいないわけで、「やり込んでいる」状態ではないのだけど。



フェスはルールがよくわからなかったので、「チーム分けして戦うのだろう」程度の気持ちで参加した。

そしたら、チーム分けの時点で得票率で勝敗があるのね。


「マヨネーズ vs ケチャップ」というお題だったので、日本人なら多くがマヨネーズを選ぶと判断した。

しかし、長女と次女がマヨを選んだので、同じでは面白くないと思ってケチャップを選んだ。


人数に偏りが出たらどうするのだろう…と思ったのだけど、勝敗数を競うのであれば「マッチングした」ことが前提になる。

マッチングできなければノーカウントなので、人数の偏りは問題ではないのだろう。


実際遊んでいると、マヨ vs マヨとか、ケチャ vs ケチャのような試合が始まることがあった。

勝敗集計としてはノーカウントだろうけど、遊べないより遊べた方が良いということか。


で、結果は得票率、ソロ戦、チーム戦の3つでそれぞれ勝敗が出され、2つ以上勝ったほうの勝ち。

じゃぁ、得票率の時点で予想を立てて勝つほうに乗ったほうが良いだろうと思うのだけど、ヨーロッパとアメリカでは共に、得票率はケチャップが多く、勝敗はソロ・チームともマヨが勝つ、という結果になっていた。


もっとも、勝敗部分はいずれも僅差。スプラ2のシステム上、勝敗は運に左右される部分が多いので、必然的に僅差になるだろう。

予想の利く得票率は重視したほうがよさそうだ。


#余談。

 マヨネーズって、数あるドレッシングの一つだと思う。それに対し、ケチャップは仕様用途の広いソースの一つ。

 日本では、マヨネーズ会社の戦略もあり、バブル期に「マヨネーズ料理専門店」もできるほど流行し、ソースに格上げされた感がある。

 日本と海外で反応が違うのもその影響かと思っている。




遊んでいると経験値が入る。

勝つとボーナスもあるが、上に書いたように勝敗は時の運なので、このボーナスは平均半分、と考えてよいだろう。


すると、塗り面積が経験値を最も左右する。

塗りたくればいっぱい入る、というわけでもなくて上限も定まっているのだけど、そうなると結局経験値は「遊んだ回数」が最も重要になる。


そして、経験値によってランクが上がる。

ランクが上がると選べる武器(ゲーム中の表記では「ブキ」)が増えたり、遊べるモードが増える。



これ、ランクが上がったご褒美というより、慣れないうちはシンプルで判り易いゲーム、慣れると奥深いゲームになっていく、というデザインだ。


ランクが上がって使えるブキは、決して強いわけではない。

実は、一番最初に使える「わかばシューター」は非常にバランスがとれていて、後から使えるブキになるにしたがってバランスが崩れていく。


崩れていく、というのは使いにくいという意味でもあるのだけど、長所をうまく活かせば非常に強力だ。

そういう意味では「強いブキ」でもあるのだけど、実際ランクが高くても最初の頃に入手できるブキを使っている人もよく見かける。



僕は、多少戦えつつも、塗りやすいブキを使っている。

FPS はもともと苦手で、戦いたくないのだ。前線の後ろで細かな塗り残しを潰しているほうが楽しめる。


狙撃できるようなブキも存在する。敵側に狙撃手がいると、なかなか苦戦することもある。

でも、狙撃ブキは連射が効かない、塗りつぶしに適していない、などの弱点がある。


そして、このゲームは塗りつぶし面積で競うゲームだ。

狙撃手は怖いのだけど、実は狙撃手が多いチームは弱い。


このバランスが非常に面白いと思う。




先日の話。

夜子供が寝た後で遊んだら、そんな夜半に遊んでいるような人は「ガチ勢」ばかりだった。


僕は今ランク 15 なのだけど、僕以外で一番低いランクが 24。上は 35までいた。


「うわ、これはやられまくってつまらないゲームになりそうだ」とおもったら、そうではなかった。

敵味方含めて、全員が血気盛ん。一気に中央に登り、そこで前線が形成される。

やられた人も、すぐに前線に向かう。周囲を塗りつぶそうとする人はいない。


僕は、前線には登らずに自陣をせっせと塗りつぶした。チームは勝利し、塗りつぶし面積で評価されるチーム内の貢献者のトップに。


FPS でありながら、前線に行かずに逃げ続けている人が一番偉い、というのは面白いバランスだと思う。


ゲーム終了時に連戦すると、基本的に同じ顔触れでもう一戦となる。

誰も塗りつぶそうとしない不思議な試合を連戦、連勝してずいぶん稼がせてもらった。




ランクが上がると遊べる他のモードは「ガチバトル」と呼ばれる。

このモードでは、前線に行かないわけにいかない。


「シャチホコ」のようなものを奪い取り、相手陣地に運ぶ「ガチホコ」

乗ると相手側に向かって動き出す「ヤグラ」を奪い、これも相手陣地を目指す「ガチヤグラ」

ステージ中央付近の一定エリアの塗りつぶし・保守を狙う「ガチエリア」


の3種類がある。

いずれも、「全体の塗り潰し面積」というようなふんわりとした目標ではなく、明らかなターゲットが設定される。

これにより、全員がそこに向かい、戦闘が行われることになる。「ガチ」であるゆえんだ。



…先に書いた通り、僕は FPS が苦手なので、このモード遊んでいない。

でも、中1の長男が特にガチヤグラを気に入って遊んでいる。


というか、前回も書いたのだけど、長男のプレイがヘタレだ。

状況を理解しない行動をとりがちなので、普通の対戦をやっていてもなかなかチームの勝利に貢献できない。


ならば、目標物がわかりやすいガチバトルで…と思ってやっているようなのだけど、今度は目標物にばかり向かいすぎて、やはり周辺状況を理解しない。


ガチヤグラであれば、ヤグラに乗ったままでいると、周囲から狙われてすぐにやられてしまう。

自分が載っているならできるだけ「やられない」ようにすることが大切だし、載っていないなら周囲の敵を殲滅し、上の人を守るのが大切。


でも、長男のプレイは「がむしゃらに乗りに行く」ことが中心で、周囲を整えようとしない。

周囲を整えないといけない、と気づいたら、今度は進む道をあらかじめ塗ろうとしすぎて、敵側にヤグラを取られているのに奪回に向かおうとしない。




小4の長女のプレイは、相変わらず見ていて楽しい。


すっかり切り込み隊長だ。使用ブキは、比較的序盤から使えるスプラローラー。

ローラー系の武器は、塗りつぶしが目的で、戦闘に向いていない。にもかかわらず、敵をバッタバッタとなぎ倒す。


一度、敵陣の前に陣取り、やられて復活した敵を瞬殺、を繰り返したことがあった。

(スプラ2では、そういうプレイがしにくいようにデザインされているにもかかわらず!)


その間に見方が全体を塗りたくり、80% 近くを塗るという圧勝。相手側の人が気の毒になる。



長女は、ローラー系でも臆せず敵に突っ込み、なぎ倒す。

だけど、そもそも戦いに向いていないことは理解していて、ステージごとの「敵陣への侵入ルート」の研究を行っている。


通常通れないと思っている部分を、実はジャンプでギリギリ通れるとか、いや、ぎりぎり落ちるので、落ちる先の壁を軽く塗っておくことでよじ登れるとか、そういう無茶なルートで敵陣に侵入するのだ。


えー、そんなことできるの! って、見ていて驚く。



そして、敵陣をインクが切れるまで一気に塗りたくり、切れた瞬間に「スーパーチャクチ」作動。


これは、武器ごとに定められた「スーパーウェポン」で、一定の面積を塗るごとに使えるようになる。

スーパーチャクチをすると、周囲の一定範囲にインクを飛ばして塗ることができ、その範囲内にいる敵は即死する。


それだけでなく、これを使うと瞬時にインクが満タンになる。そして、また塗り進む。

もちろん、スーパーチャクチを、インク切れの前に敵の近くで作動させることもある。


敵にまわしたら怖い存在だ。



先日、長女にフレンド申請が来た。

一緒にプレイした人には、フレンド申請を送れるのね。ゲームの機能ではなく、OSの機能なので知らなかった。

フレンドになっておくと、一緒にチーム戦を行ったりできる。


長女は相手の名前を憶えていた。

同じように切り込んでいくタイプの人で、その人は塗るのには適さないけど戦闘に適したブキの使用者。

お互いの弱点を補うような形で、二人で敵陣を塗りたくって圧勝した、非常に楽しいゲームだったらしい。


メッセージのような機能はないので、子供でも安心。フレンド申請を受け付けておいた。




さて、最後に僕の話。


通常の対戦もやっているのだけど、ヒーローモードを非常に楽しく遊んでいる。

ヒーローモードは、ネットワークを使用しない、一人用のゲーム。


多くのサイトで「チュートリアル」だと書かれている。

まぁ、チュートリアルの側面があることは否定しない。


だけど、良く練り込まれていて、やり込み要素も多い。

チュートリアルというより、僕のように FPS 苦手な人でも楽しめるようにするための、サービスではないかと思う。



基本的には、ゴールを目指すだけのゲーム。時間制限はないけど、クリアタイムを競うようにはなっている。

各ステージに必ず「イリコニウム」と「ステッカー」が落ちているので、それを取得してあるかどうかも記録される。


ステージによっては、初プレイ時に「これを使え!」と、ブキを渡される。

一度はそのブキでクリアしないといけないのだけど、大抵そのステージは、そのブキの特性を活かしたものになっている。


そして、ステージには「どのブキでクリアしたか」も記録される。

コンプリートを目指すなら、すべてのブキでクリアしないといけない。


これが、ブキによっては先に進むのが非常に難しくなったりする。

一度クリアしているのでルートは知っているのだけど、ブキの違いで進み方を変える必要があるのだ。


遊ぶことでブキの特性を自然に覚えてしまう、という意味では、チュートリアルだろう。

でも、そこで使われる特性は、時には「対戦には全く使わない技術」だったりもする。


先に書いたようにチュートリアルというよりは、やり込みゲーとして作られているように思う。



ゼルダを楽しめている人なら、このモードは気に入るのではないかな。

僕は対戦に疲れたらこのモードで遊んでいる。


▲目次へ ⇒この記事のURL

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

家族

別年同日の日記

02年 …てなわけで

04年 マハラージ

07年 おもちゃ


名前 内容

スプラトゥーン2初感  2017-07-24 17:16:12  コンピュータ 家族

▲目次へ ⇒この記事のURL

先日もゼルダ雑感書いていたし、Switch漬けだな、と思いながら。


前作「スプラトゥーン」はやっていない。WiiU 持ってないから。

そもそも、僕は3Dの「撃ち合い」ゲームは好きではなく、今回のスプラ2も興味はあったが、購入直前まで迷っていた。


子供が興味を持って遊びたがっていて、発売前までどうするか悩んでいた。

中学生の長男なら十分遊べそうだけど、小学校2年生の次女には遊べないんじゃないかな、という気持ちもあったから。


購入に踏み切ったのは、ゲームは好きだが詳しくはない妻が、発売日の夜に「スプラトゥーンっていつ発売なの?」と聞いてきたから。

ツイッターで周辺の人がみんな話題にしていて、そろそろ発売なのかな、と気になったのだそうだ。



#注:「撃ち合いゲーム」を、以下 FPS と書く。

 First Person Shooting、「自分視点の撃ち合い」の意味で、自分が画面に表示されるスプラトゥーンは、厳密には FPS ではなく、TPS (Third Person Shooting) だ。

 しかし、TPS という用語は FPS ほど一般的でないので、TPS も含めて FPS と言われてしまうことが多い。




で、購入後15分ほど遊んでみる。

3試合して、この段階ではまだ「思ったよりも悪くない」程度の感想だったけど、そもそも妻の言葉で購入に踏み切ったので、妻に交代する。


その後妻のプレイを見ながら…自分でやっているのではないので、冷静に分析しながら、思った以上に初心者に優しいゲームだと知る。



翌日は土曜日。

子供に購入を伝え、夏休み入ったし、土曜日なので思いっきり遊ぶのを許可する。



普段は、ゲーム時間は1人1日1時間半程度に制限している。

というか、学校もあるし、3人で時間を分け合うと、その程度しか遊べない。


でも、この日は朝からゲーム三昧。30分~1時間程度で交代しつつ、1人3時間づつ遊んだ。




先日、ゼルダの話を書いたときに、「触っていても面白いゲーム」を作るのは難しい、と書いた。


ゼルダは、触っているだけで面白い。

戦うのが怖いなら、敵から逃げ続けていてもゲームが成立する。


森の中でリンゴや鳥の卵、キノコなどを拾い、それらを組み合わせて料理しているだけで面白いから。


いや、そんな目的すら不要だ。

緻密に描かれた美しい風景は、歩き回っているだけで世界を観光している気分にさせてくれる。


「ガノン征伐」なんて目的は、些細なことだ。目的なんて気にしないでいい。ただいじっているだけで面白いゲーム。

それがゼルダだった。



それに対して、スプラトゥーンは、対戦ゲームだ。

触っているだけ、というわけにはいかない。「戦うのが怖い」なんて言っていられないし、相手に勝つ、という目的を強要される。


にもかかわらず、目的を忘れて「触っているだけで面白い」状態を作り出している。



こんなこと、1からやっている人は今さらだろうけど、僕が感心したので細かく説明する。


普通、FPS は「敵を倒した数」を中心とした評価を競う。

でも、スプラトゥーンでは敵を倒すことは、評価に一切関係しない。

(後で書くけど利点はある)


敵を倒した数になると、経験が最大の武器となる。

ゲーム慣れして、冷静沈着に敵を倒せる人が強いし、長い時間遊んで強い武器を持っている人が強い。

一番良いのは、やられた人が復活するポイント付近で物陰に隠れて待ち構え、倒し続けることだ。


これ、初心者お断りのゲームだ。

もちろん、様々な評価軸で強さを算出し、同じくらいの強さの人同士をマッチングするようなシステムにより、皆が楽しく遊べるようにする。


それでも、ゲームに十分に慣れたうえで、あえてアカウントを作り直して1から始める、などで「俺だけが最強の世界」を楽しもうとする人がいる。

もちろん、ゲーム制作者側はあまりこのような行為をしてほしくない。


初心者が嫌な思いをすればプレイヤーが先細りになるし、ひいては続編もなく打ち切り、ということになりかねないからだ。

ゲームが好きで、ハマり込んでいる人が自らの好きな世界を壊す、という悲しい例だが、事実として存在する。



スプラトゥーンは、1の時点から、このような「FPS の問題点」を克服するべく作られていた。


評価の軸は「塗りつぶした面積」だ。

だから、敵がいたら逃げ回わる、という戦略が可能になる。


敵の目をかいくぐり、敵地に侵入し、すでに敵が塗った部分を自分の色に染め上げていく…

「撃ち合い」のゲームであるにもかかわらず、撃たない鬼ごっこが成立する。


これが、思った以上に幅の広い遊びになっていることに感心した。




まだ2日しか遊んでいないが、家族のプレイの様子を書いてみよう。

ゼルダの記事も読んでもらうと、家族の性格がよくわかるかもしれない。


まず中一の長男。一番遊んでみたがっていた。

ゼルダでは、敵との戦いを極度に恐れる傾向にあった。


スプラ2でも、ヘタレぶりは変わらず。

なんとか「敵に見つからずに生き延びる方法」を見つけようとして、物陰に隠れていたりする。

それでは、塗り面積を広げられない。


詳細は後で書くけど、塗った面積は個人評価につながり、評価を溜めることでより強い武器などを入手できる。

だから、思い切って「塗り」に出ようとすると、今度は無防備に敵に突っ込み、討ち死に。


頭は良いのだけど、判断力が悪い。

「敵の色を塗りつぶせば、相手の陣地も減るし、こちらの陣地は増えるから、2倍の効果!」

と言って、敵の陣地に切り込みたがる。当然討ち死に。



最初は全然チームに貢献できていない感じだった。

でもまぁ、遊び続ければ慣れるもので、500pt程度は確実に塗れるようになってきた。




小4の長女。

ゼルダでは、人の話を聞かず、地図も入手せず、度胸だけで世界を突き進んで探検し、見つけたものは手持ち資金で買いあさっていた。


スプラ2でも同じプレイスタイル。

ただ、こちらはストーリーなどないので、人の話なんて聞かないでいい。地図のような、ゲーム中に入手するアイテムもない。


だから、度胸で敵陣に突っ込んでいく、というプレイスタイルは、スプラ2に向いている。

もっとも、これで討ち死にしていたら無謀な馬鹿なのだけど、勝負勘が良くて、自分よりランクが高い相手でもバタバタとなぎ倒す。


広い面積を塗ろうとするよりも、敵陣深くに続く道を開拓しようとする。

なので、後についてきて援護してくれる人が出る場合があって、そんなときは本当に…相手チームが可哀そうになる試合展開となる。



はっきり言って、我が家で一番「横から見ていて楽しい」プレイスタイルだ。

ついたあだ名が「切り込み隊長」。


#小学校4年生だから、「切り込みってなに?」と、言われていることを理解していない。教えたけど。




小2の次女。

彼女は、ゼルダはやっていない。「敵と戦うのが怖い」というのが理由。


同じ理由で、スプラ2も最初は見ているだけだった。

でも、あまりに長男・長女が楽しそうに遊んでいるので、ちょっと遊んでみる、と手を出して…十分楽しんでいる。


戦うのが怖い小2女児でも、「対戦シューティング」を遊べるのだ。これってすごいことだと思う。


プレイスタイルは、前線での戦いを避けるもの。

みな前線に突き進むし、そういうゲームなのだけど、最後の「塗り面積のジャッジ」を見ていると、結構「塗り残し」が勝負を分けるのがわかる。


プレイフィールドは基本的に四角く、出撃地点は辺の中央あたりか、角。

そこから、中央に作られる(であろう)前線にまっしぐらに進むと、どうしても自陣近くの角に塗り残しが出やすい。


こうした部分を着実に塗っていく。

自陣近くは、大抵自分の側の色になっているが、たまに「切り込んできた」相手によって、まだらに色が違う。

そうした部分も、着実に塗り戻していく。


この戦略は僕が教えたものだけど、細かな部分をちまちま塗るのは、ゲーム慣れしていない子でも楽しいようだ。


残り1分程度になったら、その後の身の振り方を決める。


自分のチームが勝つと、勝利ボーナス点が全員に入る。

だから、勝ちそうならそのまま細かな部分の塗りつぶしを続行し、勝ちを確実にする。


負けると、ボーナス点は入らず、個々人の「塗りつぶしポイント」が入るだけ。

だから、負けそうなら前線に進んで、思い切ってポイントを稼ぐ。


なに、やられてもかまわない。

負けているということは、前線は自陣側に寄っている。やられても、すぐに前線に復帰できる。


それでいて、すでに自分側の色の部分をちまちまと塗っているより、敵側の色の中で適当にインクをばら撒いているほうが、「塗りつぶした面積」は多いのでポイントが稼げる。


目標は、500pt 稼ぐこと。

慣れないうちは 300pt とか、ひどいときは 100pt で終わっていたのだけど、次女も2日遊ぶ間に慣れ、500pt は確実にとれるようになった。




さて、遊ぶ人によって幅広い戦略が可能になる、とわかってもらったところで、細かなルールの説明を行っておこう。


Switch のゲームには説明書が付いてこないので、僕もよく理解できていない部分があるのだけど。


試合中は、塗った面積が「ポイント」として表示されている。

壁は塗ってもポイントにならない。ただ、壁を塗ると登ることができ、周囲にインクをばら撒きやすくなるので、無意味ではない。


何も塗られていないところに塗っても、敵の色のところに塗ってもポイントは同じ。

すでに自分側の色のところを塗っても、何ももらえない。



まず、塗った「ポイント」は、そのままゲーム内で武器などを買える通貨となる。

勝利すると、ボーナスで 1000 ポイント上乗せされる。


通貨とは別に、経験値があり、経験値によってランクが上がる。

塗ったポイントは、100 の単位ごとにもらえる。100,200,300,400,500 で、それ以上はない。


また、参加者全員に、3分遊んだことに対する報酬 300pt が、勝利したチームならさらに 600pt がもらえる。


他にもボーナスはあるのだけど、以上が基本。


これが、次女の遊び方の話に書いた、「勝てそうなら勝ちを確実にするように動き、負けそうなら 500pt を超えることを目指す」という理由だ。




話は脇にそれるがここで書いておこう。


3分遊んだ報酬は、おそらく「途中で通信を切断されないため」のものだと思う。

ゲーム作成者として、途中で通信切断されるのは困るから、ポイントをちらつかせて最後まで遊んでもらおうとしているのだろう。


でも、実はこれ目当てで、遊ぶ気がない人も参加してくる。

全く動かず(スタート地点に棒立ちはおかしいから、適当な物陰に潜んでいる)、最後の戦績表示画面を見ても、全く塗っていない。

チームとしては迷惑な話で、子供たちはそういう人がいることに怒っているようだ。



しかし、ゲーム制作者の端くれとして言わせてもらうなら、そうすることで得をするシステムになっているのだから、そのプレイヤーは悪くない。

ゲームの遊びかたはそれぞれだ。「まじめにやれ」なんて強要される覚えもない。


ただ、運営側は遠からず対策をするんじゃないかな。

全くやる気がない人には、参加賞の 300pt や、たまたまチームが勝利した際のボーナスなどを一切与えなければよい。


次女が初めて遊んだ際でも 100pt は塗れていたから、100pt ボーナスを取得しなくては、それ以外のボーナスももらえない、とかね。




相手チームが強いと…というか、組み合わせは時の運だし、必ずしも強い人がいるチームが強いわけでもない。

だから、「うまく歯車がかみ合うと」くらいのイメージなのだけど、前線が中央付近からずいぶんと偏ることがある。


こんな時は、さすがに勝ち負けがはっきりする。


だけど、前線は案外中央付近にでき、動きにくいものだ。


当然な話で、倒されたキャラクターはそれぞれの陣地のスタート地点から復活するし、そこから前線まで行かなくてはならない。

自陣に前線が近づけば、前線に早く到達できる。遠いと遅くなる。


ということは、自陣に近い前線は相手側に押し戻しやすいし、自陣から遠い前線は、押し戻されやすい。

結果として中央付近が前線になる。



このことを前提とすると、前線までの「自陣側」を、塗り残しなく、より緻密に塗ったほうの勝ちだ。

これが、次女に授けた「塗り残しを無くす」作戦となる。



しかし、チームの勝ちなんて関係なく、自分がポイントを…仮想通貨を稼ぎたいのであれば、思い切って敵陣に飛び込むといい。

自分側の色はほとんどないので、どこを塗ってもポイントになる。


戦うことは目的ではないので、敵のいないところを狙って大量に塗りつぶせば、一気に大量得点。

もちろん、敵陣に近いのですぐに塗り返されることになる。


戦いが目的ではないとはいえ、倒されると復活までに数秒間(状況により短縮もされるが、5秒程度)かかるし、陣地一番奥のスタート地点に戻される。


だから、相手側に前線を進めるために、相手を倒すことは決して無駄ではない。

戦いが得意な人は前線で戦いつつ、陣地を広げる。


苦手な人は相手に塗られてしまった部分を後方で「修復」したり、戦いを避けつつも相手陣地に忍び込んで塗ってみたり、やれることは結構ある。



戦いはあまり起こらず、お互いに相手陣地を塗るような混戦になることがあるのだけど、そういう時は終了時のポイントも総じて高い。

みんなが「塗り続ける」わけだからね。


負けたとしても、結構稼げたので良しとしようか、と思える。


長女が「切り込んでいく」と、そういう試合展開になりやすい。

ランクを上げる経験値に関しては、500pt で頭打ち。それ以上稼ぐ必要はない。


でも、通貨としては、稼いだだけもらえる。大量に塗ることにはそれなりの利点がある。

買い物を楽しみたい人には良い戦法。


#そして、長女はゼルダと同じく、武器や服を買いまくる。




僕や妻がどうしているかというと、実は子供に時間を奪われて、あまり遊べていない。


まぁ、それでも遊んではいるけどね。

僕は、最初は突き進んで前線形成に加担して、その後は倒されて戻るたびに、すこし寄り道して塗り残しを消しながら前線に向かう、というスタイル。


500pt を超えるまでは前線に進むことを優先しているけど、それ以降は自陣の塗り残しをできるだけなくす。

残り一分を過ぎたら、思い切って敵陣に切り込んでいく…と言う感じ。


でも、塗りやすい武器を中心に使っているので、戦闘力は低い。

敵陣に切り込んだ場合でも、戦いは避けて、あまり人が通らない裏通りを塗る感じかな。


#自陣と敵陣は対称形。普段から塗り残しを気にしているので、人が入りにくいエリアも把握している。

 人が入りにくいなら奪い返されにくいので、この戦略は結構効く。


▲目次へ ⇒この記事のURL

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

家族

関連ページ

スプラトゥーン2 その後【日記 17/08/08】

別年同日の日記

15年 マイコプラズマ肺炎


名前 内容

ジョージ・イーストマン 誕生日(1854)  2017-07-12 10:52:12  コンピュータ 歯車 今日は何の日

▲目次へ ⇒この記事のURL

今日は、ジョージ・イーストマンの誕生日(1854)

写真で有名なコダック社…正確には、イーストマン・コダック社の創業者です。



写真は、19世紀の序盤…1826年に発明されています。

最初は、撮影に8時間もかかるものでした。


しかし10年ほどで撮影時間は 10~20分ほどに短縮されます。

ただし、この方法は「左右が反転してしまう」「高価」などの問題がありました。


さらに 15年ほど…1851年には、左右が正しく記録され、安価で、わずか15秒で撮影でき、しかも何枚でも複製が可能という方法が発明されます。


この方法の欠点は、撮影時にガラスに「薬品」を塗り、これが乾くまでに撮影・現像・定着などの作業を行わなくてはならないこと。

薬品の専門知識が必要ですし、写真館での撮影ならともかく、屋外での撮影にはたくさんの荷物を運ばなくてはなりませんでした。



そして、この方法からもたったの 20年で…1871年に、あらかじめ薬品を塗って乾かしたガラス板を使用する「写真乾板」が発明されます。

乾板の製造、撮影、現像が、遠く離れた場所でできるようになります。


「カメラ」自体はそれまでのものが使え、撮影のためのガラス板を変えればよいだけだったため、「写真乾板」は、あっという間に普及します。




ジョージ・イーストマンは、写真乾板の大量生産方法で特許を取得し、1880年に工場を設立しています。

翌年には会社組織化し、「イーストマン乾板会社」を設立。


1885年には、それまでガラスに塗るのが当たり前だった薬剤を、紙に塗って巻き取った「ロールフィルム」の製造を開始します。


エジソンとの共同研究によるもので、開発中だった「映画」での使用を想定していました。

後々までカメラ用フィルムとして使用される 35mm という幅は、このときに決定しています。


(この映画を見る機械、「キネトスコープ」は1891年に公開。その前に撮影機が完成しているようだが、一般公開したものではないので完成年不明)




そして、1888年。

イーストマンは、この「ロールフィルム」を使った新しい商売を始めます。


小型のカメラの中に、ロールフィルムがセットされた状態で売っています。

これで、100枚の写真が撮影できます。


フィルムが終わったら、カメラと 10ドルを現像所に送ると、すべての写真をプリントし、新しいフィルムを装填して返送されてきます。



これ以前は、カメラというのは専門知識が無くては扱えないものでした。


フィルムは光に弱く、取り出し・装填には間違えてはならない手順がありました。

そして、当時のカメラは、写真1枚ごとにフィルムを入れ替えていました。


また、フィルムの現像・プリントなども専門知識が必要でした。


これを、「100枚連続でとれる」ようにして、手間を無くしたのです。

そして、複雑な取り出し・現像は専門家に任せる、というサービスをセットで売ったのです。


それまで専門家しか撮れなかった写真を、一般に開放したと言えます。



このときのキャッチフレーズが「You press the button, we do the rest」。

意訳すると「ボタンを押すだけ。後は我々にお任せを」という感じかな。


このときに、カメラのブランドとして新しく作ったのが「Kodak」という単語です。

イーストマンが好きなアルファベットが K で、「K で始まり、K で終わる、短くて力強い音の言葉」として作り出した造語で、意味はありません。



ところで、フィルムを使い切ったらカメラごと現像所へ…って、1980年代後半に流行した「レンズ付きフィルム」と同じ感覚です。

レンズ付きフィルムは「新しい物」に思えたのですが、100年前に同じような商売があったのですね。




翌年、1889年には、フィルムを紙ではなく、透明なセルロイドで作成するようになります。

先にキネトスコープの話を書きましたが、実際のキネトスコープでは、こちらのセルロイドフィルムを使用しています。


セルロイドは、紙と同じように植物由来のシートです。

紙は物理的に繊維をほぐし、形を変えたものですが、セルロイドは科学的に溶かして生成します。


そのため、紙よりも表面が滑らかで、薬剤を均一に塗ることができますし、透明なので光を透過するという利点もあります。


#ガラス乾板では、光を透過させることで写真の複製を行いました。

 同じことができるようになったわけです。



問題点もいろいろあり、後にセルロイドは使われなくなるのですが、それはまた別の話。




1890年には、イーストマンは「折り畳みカメラ」を発売します。

カメラはその構造上、光を通さない頑丈な箱である必要がありますが、折り畳み式にしてポケットに入るようにしたものです。


高価なものだったようですが、気軽に使えることからヒット商品となります。


これで「コダック」の名前が知れ渡り、1892年には社名を「イーストマン・コダック」に変更。




ところで、1897年に、有名な小説「ドラキュラ」が刊行されています。


序盤で、ドラキュラ伯爵からロンドンにある邸宅を買いたい、という依頼を受けた主人公弁護士が、ペンシルバニアに行って伯爵と話をするシーンがあります。


ここで、遠い異国の邸宅の様子を詳しく聞きたいという伯爵に、主人公が


 I have taken with my kodak views of it from various points.

 いろいろな場所からの眺めを、私のコダックで取って来ましたよ。


答えるのです


当時、「コダック」が、カメラと同じ意味で使われていたことがよくわかります。


#作者のブラム・ストーカーは新し物好きだったようで、ドラキュラの中には、当時の最新の発明が次々出てくる。

 多くの人の日記を繋ぎ合わせる形で話は進行するのだけど、タイプライター(1890年頃から普及)や、蓄音機(1877年発明)で日記を記録する人々がいる。

 電話機も出てくるが、これも 1890年代に普及。

 「最新で科学的な世相」の中に、「中世から生きている化け物」が紛れ込む、という筋立てが当時の人には恐ろしかったのだと思うけど、今読むと全部古臭くてカッコいい。




実業家としては成功を収めたイーストマンですが、その生涯はあまり幸せそうではありません。


13歳の時に父が病死。16歳の時には、2番目の姉が病死。

イーストマンは、高校を中退して働き始め、コダック社の成功に至ります。


苦労しながら自分を育ててくれた母に孝行したい、と多くの贈り物をしたようですが、母は高価な贈り物を受け取ろうとはしなかったようです。

苦労したからこそ、子供が自分への贈り物にお金を使うよりも、自分のために使ってほしかったのかもしれません。


そして、1907年の母の死。

晩年は病気を患っており、少し動くと痛がり、車椅子生活だったようです。


結婚もしておらず、親族のいないイーストマンは、慈善活動にお金を使うようになります。

大学や病院などに多額の寄付を繰り返し、彼や、彼の母の名前を付けた施設がたくさん作られています。



1930年頃から背骨の病気を患います。立つことも歩くのも痛く、何もできない日々。

おそらくは母と同じ病気です。


そして、1932年 3月 14日に、ピストル自殺。


遺書にはただ短く、こう書かれていました。


 To my Friends, My work is done. Why wait?

 友へ、仕事は終わった。なぜ待つ?



待つ…何を待つ?


おそらくは、痛みを耐えながら迫りくる死を…でしょうね。

苦痛しかなく、その先に待つのが死であれば、待たずに今すぐ…ということなのでしょう。




彼は「仕事は終わった」と言葉を残しました。

確かに、十分すぎるほどの仕事を…世の中を大きく変えています。


カメラを作ったのは彼ではありませんが、カメラを誰でも使える道具にし、普及させたのは彼でした。



20世紀は「映像の世紀」「情報化時代」などと呼ばれます。

カメラは、遠い異国のニュースであっても、危険な戦争の前線の話であっても、文章よりも雄弁に情報を伝えてきました。


そして今も、情報機器…スマホなどの重要な機能として、カメラが組み込まれています。

この世の中は、ジョージ・イーストマンによって生み出されたのです。



▲目次へ ⇒この記事のURL

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

歯車

今日は何の日

別年同日の日記

02年 納得?

15年 実装の苦労

16年 Chromebook購入

16年 Chromebook で子供ができること


名前 内容

あきよし】 誤字指摘ありがとうございます。無粋なんかではなく、ありがたいですよ :-) できるだけ読み返して推敲もしているのですが、趣味に使う時間も限られるもので、誤字脱字・そもそもの情報の勘違いも多いです。 (2017-07-26 09:15:13)

【セイ】 更新いつも楽しみにしています。無粋ではありますが誤字指摘です。「広告を中退して」→「高校を中退して」 (2017-07-13 11:28:42)

ゼルダ雑感  2017-06-21 11:31:42  コンピュータ 家族

▲目次へ ⇒この記事のURL

3日ほど前に、ゼルダの雑感を書いている個人blog を読んだ。


今回のゼルダは「自由度が高い」とされるのだけど、実際遊んでみると、そこかしこで任天堂の見えざるコントロールを感じられ、強制ではなくやんわりと、導かれているのがわかる、という内容。


「おせっかいおばさん」と表現していたけど、非常によくわかる。

このおせっかいが嫌な感じではなく、意図を感じたら信頼して乗っかれる安心感がある。


だから乗っかっていくと、自由だと言われながらもみんなが同じような進め方になる、というのも同意。




と、同意したうえで、我が家の話を書いておこう。

上の記事に倣い、僕のゼルダ遍歴から。



僕はファミコンゼルダ・リンクの冒険はリアルタイムに遊んだ。


スーファミは持ってなかったので遊んでないけど、後に「神々のトライフォース」の GBA 移植版は遊んだ。


GB の「夢を見る島」は、高校の後輩の「やるべき」という強力プッシュで借りて遊んだ。

でも、急いで遊んで返したので、あまり細かいことを覚えていない。


ゲームキューブ版は発売日前に予約し、予約特典でもらえた N64 のゼルダを1か月間遊び倒した。

裏ゼルダとムジュラもついてきたのだけど、GC 版が発売になったのでそちらに移行してしまい、遊んでない。


GC 版「風のタクト」は…N64 が面白かったので期待していたが、少し肩透かしと思った。

その後 Wii 版「トワイライトプリンセス」も買ったが、これは「面白くない」と感じて、途中で放棄した。


Wii版の「スカイウォードソード」は遊ぶ気にもならず、完全スルー。


近年の 3Dゼルダには、N64 の人気を超えようとして「がんばりすぎた」残念感を感じている。

プレイヤーに感動を与えようとしすぎて、押し付け気味に思えるのだ。



だから、今回のゼルダも、「あぁ、また出るんだ」程度でスルーのつもりだった。

…が、Switch 発売直前のインタビューなどで「近年の嫌な部分が払拭されている」ことを知り、遊びたくなった。


でも、Switch 大人気で入手できなかったのね。

入手は4月末。発売から2カ月たっていた。


で、いま2か月近く遊んだ状態。




「とりあえずの目的」である、ガノン征伐は果たした。


でも、このゲームは目的があってないようなもの。

「ミニチャレンジ」と呼ばれる、いわゆる RPG の「使いっぱしり」はゲーム中に大量に発生して、無視して進んでもいいのだけど、ゲームクリア後はこれをひとつづつ解決して楽しんでいる。


ミニチャレンジではないが、各地にある「祠」や、木の妖精「コログ」探しも楽しめる。

ストーリー上の目標はガノン征伐だけど、実際にはこちらの探索のほうがずっと楽しい。



ネタばれになるかもしれないけど、ガノン戦はまだ「近年のゼルダのいやらしさ」を感じた。


強いんじゃなくて、倒し方がわかるまでダメージを与えられない。

でも、こちらも逃げ回っていればダメージを受けない。

硬直した状態で延々と時間を浪費するゲームを「面白い」とはとても言えない。

ゼルダの嫌な部分がほとんどなくなっているとはいえ、完全ではなかったな、という感想。




家族中で遊んでいるが、暗黙の了解がある。

「先を進んでいる人のプレイは見ない」ということだ。


また、後から遊んでいる人にヒントを出すのもなし。

具体的に「はい」「いいえ」で答えられるくらい絞り込んだ、わずかな質問程度は答えるけど。


この結果、それぞれが自分の考えで進めているのだけど、「自由度」が非常に高いことがわかる。

この点において、「任天堂のコントロール」なんて存在していない。

(いや、もちろん道に迷わないような親切なサジェストはあるのだけど)



妻は僕よりも先を行っている。

自由時間の違いで、僕より多少長く遊んでいるためだ。


ただ、プレイスタイルは結構違う。

僕は敵を見るとできるだけ殲滅してから先に進む。

逃げ回っていて、前からも敵が来て挟み撃ち…というのが怖いから、着実に進みたいのだ。


そうやって、目的地に向けてどんどん進んでいった。



妻は、無視できそうな敵なら逃げ回って先に進む。

逃げる途中で道を外れてしまうこともあるし、逃げ回ることで節約した時間で、周囲を無駄に探索したりもする。


この結果、ストーリーの進行具合は同程度でも、妻のほうが多くの「なにか」を発見していた。

その一方で、闘うことで得られる報酬…強い武器などは、僕の方が持っていた。



長男は、中学1年生だがゲーム慣れしていないので、まだストーリーの中盤だ。


後ろから見ているとイライラするくらい、本筋と関係のない部分を楽しんでいる。

ゲーム慣れしていないので、触っているだけで楽しい段階なのだ。


例えば、稲刈りをすると米が手に入る、と知ると、延々と稲刈りだけをやり続ける。

その稲に火をつけると燃え広がり、上昇気流が起こって飛び上がれる、と知ると、面白がってそれを延々続ける。


とにかく「これやったらどうなるのだろう?」と思ったら試してみる。

さまざまな操作を試しているので、僕も妻も気づかなかったような「操作テクニック」を編み出している。


敵と戦うのを極度に恐れ、挟み撃ちにあったりするとワープして逃げかえる。

操作などの「ストーリー外の部分」を楽しみすぎて、ストーリー上、次に向かうべき場所を忘れてしまう。


だから、ストーリーはあまり進んでいない。



小学校4年生の長女は、「素材集め」と「買い物」が楽しい様で、そうしたゲームとして遊んでいる。


家族中で一番大胆な行動に出て、マップを入手していない土地でも闇雲にガンガン進んでみて、そこで見つけた「まだ見ぬもの」を、買えるものであればどんどん購入する。


なので、ストーリー進行や「マップの入手具合」とは関係なく、後半にならないと入手できないはずのものを持っていたりする。



進行度合いの割には、コログの発見率が非常に高い。

元々四葉のクローバー集めが特技で、「見た目のわずかな異常」に気付く能力が非常に高い。

それがゲーム中でも活かされているのだ。


闘うことも恐れないので、長男よりストーリーを進めているが、ボス戦などは怖いようだ。

ボスの前まで行くといったん退却し、長男がボスを超えるのを待って(ヒントを得て)ボス戦に挑む。


一方で、とにかく先に進むことが楽しいので、村などを見つけても人の話をちゃんと聞かない。

ヒントをくれる人を無視したまま先に進み、「あれぇ? これどうするの?」なんて言っている。


普段からも「人の話をちゃんと聞くように」と注意されている子なのだけど、ゲームを遊んでいる時にも同じ注意をするとは思わなかった。




ストーリーも…一応、4つの「小ボス」がいるのだけど、どこから倒してもかまわない。

いや、倒さずにいきなり大ボスに挑むこともできるのだけど、初回プレイでそれをやる人はいないだろう。


たぶん、最初の「小ボス」はみんな一緒だと思うんだ。

ここは「任天堂のコントロール」が利いている。うちでも、4人とも同じだった。


でも、その次のボスはもう、人によって違うのではないかと思う。

一応「これを2つ目に倒すべきなのだろう」というボスはいて、長男と長女は素直にそこに進んでいた。


でも、僕と妻は、気づかずに4番目のボスに進んでしまっていた。

余りの強さに泣きそうになりながら戦って、「2体目でこんなに強いのだと、この後どうなるんだ」と思って拍子抜けした。


「おせっかいおばさん」の話として書けば、いきなりこのボスのいる方向に進んだのも、それなりのサジェストがあったからなんだ。

詳しく書くとネタバレになるから書かないけど、理由を説明したら納得してもらえると思う。



だから、おせっかいおばさんは確かにいるのかもしれないけど、コントロールは絶対ではない。

4体中2体目のボス、という時点でかなり違いが出てくるし、そこに至るまでも遊び方が全く異なる。


買い物はせずに節約している人もいれば、ガンガン買い物をする人もいる。

さまざまな操作の可能性を試す人もいれば、そんなことよりストーリーを進めようとする人もいる。


これは十分に「ゲーム慣れしていない人にとっても、自由性が高い」ということかと思う。




じつは、この「ゲーム慣れしていない人にとっても」という部分で、舌を巻いている。


僕もゲーム業界の端っこにいた人間だから分かるけど、遊ぶ人ごとに遊び方が異なるゲームって、言うのは簡単だけど作るのは非常に難しい。


ましてや、「ゲーム初心者」と、「ゲーム慣れした上級者」が同じ世界で楽しめるなんてすごいことだ。


過去に、何度かそうしたゲームを見たことがある。

逆にいえば、いろいろなゲームを見ていても、初心者と上級者が共に楽しめるゲームなんて、数えるほどしかなかった。


絶対的な条件としてはゲームの目的を無視して、操作するだけで楽しめること。


敵が怖いなら戦わないでよい。ストーリーを進めるのが難しいなら、最初の場所にいればいい。

それでも楽しめる、というのは、本当にシステムがよくできていないといけない。


今回のゼルダは、そうしたゲームの中でもトップクラスであるように思う。




ところで、小学校2年生の次女は…いや、彼女は遊んでいない。

マリオカート8は大好きで遊んでいるので、ゲームができないわけではない。


ただ、「敵が出てくるゲーム」というだけで怖いようだ。

長男や長女が遊んでいるのを眺めているが、強い敵が出てくると緊張感に耐えかねて、別の部屋に逃げてしまう。


自分で遊んでなくても「緊張感に耐えられない」ほどにゲーム世界に入り込める。

遊んでいない子の行動をとっても、ゲームがよくできていることを意味している。



▲目次へ ⇒この記事のURL

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

家族

関連ページ

スプラトゥーン2初感【日記 17/07/24】

別年同日の日記

02年 飲んだくれの日々

03年 なんだか色々入手

13年 「暗号の歴史」と、アメリカの盗聴問題

14年 ファミリーベーシックの発売日(1984)

15年 山歩き

16年 コンピューターが初めてプログラムを実行した日(1948)


名前 内容

遅い Javascript を iframe に追い出す方法  2017-06-13 12:18:54  コンピュータ

▲目次へ ⇒この記事のURL

お仕事で、すでにあるコンテンツに「広告」を入れることになった。


特に大変そうな話ではないのだけど、これが大変なことになっていたので僕が呼ばれた。

まぁ、それなりのお金をいただけるのでいいのだけど。


難点はいくつかあったのだけど、それは個別に解決した。

ざっくり書くと、設計の悪い「テンプレートシステム」がまともに働いておらず、1つのコンテンツのデータが1カ所にまとまっていない上に、1つのコンテンツ群のテンプレートが似て非なる複数に分散していて、さらにそれらを処理するプログラムがページの数だけある、という惨状だった。


なんでプログラムをデータと同じ数だけ複製して、少しづつ書き換えようと思ったのだろう。

html で全部べた書きしていたほうが、データが分散しないだけまだましだったと思うよ。



これを、まともな処理方法に改めないといけなかったのだけど、実のところ技術的な問題はそれほどなかった。

単純に、しっかりしたシステムを作ってデータを移行するだけだったから。


問題は、そうした手間を導入することに理解を得る必要があったことだな。

今までのシステムで動いているのに、手間をかけて(ということは金も時間もかけて)、なぜ大規模に改修を行う必要があるのか、ということの賛同を得るのが一番の難題。




しかしまぁ、そちらは解決した。技術話ではないので特に書かないけど。

テンプレートとプログラムは統一され、コンテンツデータは適切に集約された。

これで、全ページに広告を適用することができた。


最後に残った難題が、広告システムの動作が遅すぎる、という技術的な問題だった。



広告システムは「いろいろ試してみたい」というクライアントの意向で、3社用意された。


広告の表示場所は、いろいろな都合があって Javascript で生成することになっていた。

Javascript で生成する中に、広告表示のためのタグを埋め込む。


…埋め込めばいいんでしょ? と思ってタグを Javascript から生成したら、動かない。

なんで? とおもって、広告表示用の Javascipt を解析してみる。


document.write が入っていた。なんてこった。現代的なシステムとは思えない。




元々、Javascript は HTML 内に混ぜて書くような方法で考えられていた。

この際、document.write で何か「表示」すると、Javascript が埋め込まれた位置に、「表示」を生成する。


より詳しく言うと、HTML のパース中に Javascript コードを発見すると、その場で HTML のパース(文法解釈)は一時停止し、Javascript コードのパース、実行が始まる。


コードの実行が終わると、HTML のパースが再開する。

その際に、 document.write で書かれた内容があれば、その内容からパースが始まる。


ということは、「後から」Javascript で Javascript コードを埋め込んでも、document.write は動かない。




じゃぁ、最初から HTML に広告タグを埋め込んでおくしかない。

div で囲んで「表示しない」領域を作り、必要な広告をすべて読み込む。


これらの読み込みが終わるまで、HTML のパースは完了しない。

HTML のパースが完了すると、HTML 内容がいじれるようになるので、Javascript で広告を出したい位置にコピーする。


…という戦略で、document.write の問題を解決した。


そしたら、次の問題が出た。

この広告システムがすごく遅くて、数枚の広告を出すために、2秒以上待たされたのだ。

他の広告と合わせ、それまで1秒で表示できていたページが、4秒待たないと表示されないようになった。




すべては document.write のせいなのだ。

javascript で後から生成できれば、とりあえず画面の表示をしてしまい、ユーザーが読み始めてから周囲の広告などを整えればいい。

でも、document.write されているとそれができない。


じゃぁ、最初から広告を HTML 内に配置していると、document.write の結果を待つために HTML パースが停止し、画面表示が遅くなる。


こんな腐ったシステムを提供している広告会社も、それを使おうというクライアントもどうかしているとしか思えないが、それをどうにかするのが僕の仕事だ。




HTML の解釈が阻害されるなら、ユーザーに見せる HTML と、広告を呼び出す HTML を分離してしまえばよい。


具体的には、iframe を使う。


iframe タグを記述する HTML …「外側」と、iframe の中で読み込まれる HTML …「内側」は、別々の HTML だ。

外側にとっては「iframe がある」ということが HTML パースの情報であり、その iframe 内の HTML がどのような内容かは関知しない。


だから、内側で遅い Javascript が動いていても、外側はすぐに HTML パースを終わらせられる。



ただ、こうしたことで問題も出た。

広告を含めた各種情報を配置する Javascript が動き出したときに、まだ広告が読み終わってないのだ。



これは、仮に「広告が後で入るスペース」を埋め込むことにした。

そして、iframe 内の広告がすべて読み終わった、というタイミングを待って、実際の広告に差し替える。


実際にはもう少し問題解決しないと動かなかったのだけど、大体こんな感じ。


これで、ページ表示まで4秒かかっていたのが、1秒に短縮された。

劇的な高速化だ。


…というか、それが本来の速度だったのだけど。




しばらく運用していると、もう一つ問題が出た。

いくつかの広告は、ページに書かれたことを認識して、内容に合わせて表示を切り替えるようになっていた。

しかし、どうも内容が認識できないようで、汎用の広告ばかり出るのだ。


…と、文字で説明してしまうと、情報が整理されているので理由がわかってしまうな。

作業中は混沌としていて自分でも気づかなかったのだけど。



広告が読み込まれると、その時点でサーバーに「読み込み元」のページの URL が referrer として送られる。


サーバーはこの URL をクロールすることでページの内容を知るのだけど、iframe 内のページには広告しか入っていないので、適切な内容を読み出せない。



これはつまり、referrer を偽装して、外側ページの URL を返せばよい。


内側のページにとっては、外側のページは呼び出し元であり、referrer で知ることができる。

なのでこれを使って、内側のページが、外側のページの URL を名乗れるように環境を整えてやる。


これで、「現在のページを問われた際に、その呼び出し元の(実際の記事の) URL を返す」ようになる。解決。


#http のリクエストヘッダで送られるのは referer だけど、Javascript などで参照するときは referrer 。

 後者が正しい綴りだけど、http の RFC 書いた人が綴りミスして、公式にそのままになってしまった。

 上の文章では正しいつづりで揃えている。


#iframe 内だからこれで解決だけど、普通のページでこの referrer 偽装をやってはならない。

 なぜやってはならないか…が理解できないうちは、気軽に手を出さないこと。




同じ問題で悩んでいる人がいるかはわからないが、以下プログラム方法を示唆だけしておこう。

示唆だけ、というのは意地悪ではなく、実際のコードはそれぞれだと思うから。



・document.write が入っているような Javascript をどうしても動かさないといけないなら、別の HTML に押し込めてしまい、iframe 内に呼び出す。

 iframe は CSS などで非表示にしておき (display:none) 、得られた結果はあとで別の個所にコピーすることで表示する。


・iframe 内に表示する html には、URL を呼び出し元に偽装するための Javascript を仕込んで置く。

 history.replaceState(null,null,document.referrer);

 これで、iframe 内に書かれたプログラムは、URL 的には iframe に入れられたことに気付かなくなる。


・iframe の描画完了は、load イベントで知ることができる。

 jquery を使っているなら $("iframe").on("load",function(){~}); という感じ。

 iframe の部分は、もちろん #id などにしてよい。


・iframe 内のアクセスは、$("iframe").contents().find("#foobar") という感じ。

 これで、iframe 内の #foobar にアクセスできる。

 (iframe 内から外側にアクセスする方法はないので、外から操作すること)



これで、描画をとりあえず終わらせてしまい、遅いデータを後からゆっくり料理できるようになった。


あとは、煮るなり焼くなりお好きなように。



▲目次へ ⇒この記事のURL

関連ページ

Programming Tips

別年同日の日記

02年 アップデート完了

02年 サーバー完全復活

04年 夏至祭

07年 大人買い


名前 内容

CRT処分  2017-05-28 11:58:48  コンピュータ

▲目次へ ⇒この記事のURL

古いPCディスプレイを捨てた。

19インチのブラウン管のやつ。三菱製だった。


マルチスキャンで購入時にはそれなりに高かったのではないかな。

でも、X68kにつないでみたら周波数がギリギリだったようで、バチバチいうし不安定。

今の PC で使うには、解像度が低すぎて使えない。


つまりは無用の長物なのに置いてあったのは、単に捨てるのが面倒くさかったためだ。


古いパソコンは、大抵無料回収業者に引き取ってもらっている。

古くても東南アジアやアフリカ諸国では売れたりするし、売り物にならないレベルでも都市鉱山としての価値があるので、無料でも商売が成り立つようだ。


でも、これは基板などからそれなりのレアメタルが回収できる、パソコン本体や液晶ディスプレイが前提。

でかくて重くて基盤のほとんどないCRTなどは、回収対象外。


法律では、CRTは粗大ごみにもできない。

その昔、パソコンが一気に普及したしばらく後に、粗大ごみとしてのパソコンが増えすぎて社会問題化したためだ。


製造メーカーに問い合わせて、お金を払って引き取ってもらう必要がある。

この手間が面倒で、もう使わないのに家の片隅でほこりをかぶっていた。




重い腰を上げて、メーカーサイトを見てみる。


ん? NEC / サムソン / EIZO とともに4社共同でリサイクル事業をやっていたけど、今はこれを解消して単独で回収している、という趣旨のことが書いてあるな。


そうか、じゃぁ三菱にリサイクルを依頼すればよいのか、とおもって情報を探す。


ん? 今はパソコン3R推進協会(以下PC3R)に回収を委託していると書いてあるな。


じゃぁ、そちらを見に行ってみよう。


ん? パソコンメーカーが回収リサイクルします、と書いてあって、各メーカーへのリンクがあるな。


そこから三菱のページに飛ぶ。


どうも、さっき見ていた三菱は、「三菱電機インフォメーションネットワーク」という別会社で、ディスプレイを製造した三菱電機とは違ったようだ。


ここで、「家庭用ディスプレイの回収申し込み」というリンクがあり、規約などの表示・同意のうえで…

ふたたびPC3Rのページに飛ばされた。



えーと、つまり、「回収」自体は三菱がやっているのだけど、回収の申し込み自体は、PC3Rを通さなくてはならない、ということらしい。

何ともわかりにくいシステム。



ともかく、これでやっと回収の申し込みができた。




僕がCRTの型番を少し書き間違えたために、PC3Rから問い合わせの電話が来た。

そこで口頭で修正を行い、数日後に手紙が届く。


振り込み用紙が同封されているので、金融機関からリサイクル料金を払い込む。

すると、また数日後に手紙が届き、郵便局のゆうパック伝票が入っている。



「メーカーが回収」という言葉で、家まで引き取りに来てくれることを少し期待していたのだけど、自分で梱包しないといけない。

実はこれも面倒で捨てられなかった理由の一つで、19インチディスプレイを梱包できるような段ボール箱なんて、なかなか手に入らない。


同封の説明を読むと、伝票の有効期限は 30日以内。

今月はいろいろと忙しかったのだが、その合間を見て箱を調達せねばならない。




結局、非常に大きめの段ボールを調達し、ディスプレイが入るサイズに切って再加工した。


郵便局に持ち込むか、回収に来てもらうか選べるのだが、申し訳ないが回収を申し込む。

19インチディスプレイ、とにかく重い。運びたくない。


申し込んだら、その日のうちに回収に来てくれた。

真っ白い髪のおじいさんが回収に来てくれて、重いディスプレイを任せるのに申し訳なさがあったのだけど、普段から仕事で運びなれているのか重い荷物でも躊躇せず持って行ってくれた。




さて、これで長年の懸案だったCRT処分ができた。


まだ、古いPCと周辺機器などで段ボール2箱分ほど捨てたいものがあって、これは近いうちに無料回収業者に引き取ってもらわねばと思っている。


こちらはクロネコヤマトに持ち込めばいいのだけど…これまた重くて、持ち込みが大変なので箱に詰めたまま家に置いてあるのだった。



▲目次へ ⇒この記事のURL

別年同日の日記

03年 開発言語

03年 クレーマークレーマー

08年 風邪惹き

14年 世界初のMML


名前 内容

Switch 買った。  2017-04-30 12:15:47  コンピュータ 家族

▲目次へ ⇒この記事のURL

遅ればせながら Nintendo Switch 購入。

3月3日発売だけど、今現在、まだ品薄で入手困難。


発売前は様子見、と考えていた。

非常によくできたハードに見えるが、当面は面白そうなゲームがなさそうだったので。

その時点ではまだ発売日に予約入れられたのだけどね。


しかし、ふたを開けたら「今度のゼルダは面白い」と大評判で、一気に品薄状態へ。

ゲーム機っていうのは、欲しい人は事前に予約を入れているものだし、別に欲しくない人は発売されても買おうとしないので、発売初日がすごく売れる。

その後、徐々に売れ行きは落ちていく。


しかし、Switch は売れ行きが落ちずに売れ続けているようだ。

ちょっと珍しい売れ方。




Amazon が時々、急に「予約受付」を開始する。

たまたま別件の買い物をしようとしたときにそれに気づき、4月初旬に予約を入れる。お届けは2週間後予定。


そのころ、マリオカート8DELUX のテレビCMが始まり、長女が興味を示していた。

まず、誕生日に欲しいと言ってきたが、その時にはすでに長女のリクエストでキッザニアの予約を入れていた

誕生日プレゼントはそれでしょ?


そしたら、値段を確認して「溜めているお小遣いで買える値段だから買ってもいい?」と聞いてきた。

いや、ソフトだけ買っても本体無いから、と答える。



うちの子供たち、マリオカートが大好きだ。

…ただし、遊んでいるのはゲームキューブのマリオカート・ダブルダッシュ。

これを、Wii で遊んでいる。


長女は、仲の良い友達の家に Wii U があるそうで、マリオカート8を何度か遊んでいた。

それが、基本的に同じもので新発売、と聞いて遊びたくなったようだ。




予約していた Switch は、まず「ゼルダの伝説」のカートリッジから届いた。

これが、21日木曜日のこと。


お届け予定では、23日日曜日に追加購入した別売りコントローラーが届き、24日に本体が届くことになっていた。

遊びたくても遊べない状況をじわじわと整えられるのか…


しかし、これは Amazon の方で配送をまとめられたようだ。

コントローラーは24日に本体と一緒に届く。



コントローラーを買ったのは、もちろんマリオカートを子供たちと遊ぶためにだ。

でも、マリオカートの発売日は28日。ゼルダは子供にはちょっと難しいだろう、と思ったので、まずは子供に内緒で親だけ遊ぶ。


1日1時間くらいで、まだ1週間もたっていないので、やっと「チュートリアルを抜け出した」くらいの段階。

いや、このゲーム、「ここまでチュートリアルだったのか」と思わせる段階がいくつもあるので、まだチュートリアル内かもしれないのだけど。


出来はいいね。いろいろなところで語られているようなので語ろうとは思わないけど、初代ゼルダの気軽さを取り戻した気がする。

ゼルダ 64 の出来は良かったのだけど、その評価の高さに続編を「大作化」しすぎて、遊ぶのに気の重いシリーズになっていたからね。



子供にはまだ教えないので、居間のテレビに繋げたまま、段ボール箱で隠しておく。

いつもはなかった段ボール箱が増えたのだけど、子供たちは案外気付かない。




そして28日、マリオカート8が届いたのだけど、昼間は僕も仕事が忙しいので子供には黙っておく。


教えたら確実に遊びたがるとわかっているし、そうなると Switch の操作説明から始めないといけない。

おそらくはすぐにわからないことが出てきて、子供が聞いてきたら仕事にならない。



夜になり、風呂も入って寝る準備が整ったところで、「明日はお休みだから寝るの遅くなっていいよー」と言いつつ、郵便物の封を皆の目の前で切る。

マリオカートに喜びつつ、「本体は?」と当たり前の疑問が出たので、段ボールを開ける。


さっそく2回ほど遊んでみるが、さすがにダブルダッシュとはいろいろ違って、まだ「白熱のバトル」とはならない。

まぁ、それなりに楽しんだけど。




寝る時間も近いのだけど、他にもいろいろ気になるようだ。


まず、「いっしょにチョキッとスニッパーズ」を購入してあったのがホーム画面にあったのが気になったようだ。


遊ばしてみる。ふたりで遊ぶのが楽しいゲームなのだけど、4人でも遊べる。

チュートリアルは2人用にしかないので、僕が説明しながら遊ぶ。


協力しながら遊ぶパズルゲームなのだけど、答えは一通りではない。そもそも、何をするのかも示されない。


特徴的なのは、お互いの「体」を重ねた際に、ボタンを押すことで相手を「切る」ことができること。

重なった部分が切り取られて穴が開く。


切られても操作で戻せるし、完全になくなると、少したって復活するので何も問題はない。


「ボールを運ぶ」という目的があっても、体は板状なので運びにくい。

ここに、少し穴をあけてもらえば運びやすくなる。そういう工夫をしながら遊ぶゲームなのだけど、「切る」ことは出来ても「切られるのは」相手次第。


「誰か切って器にして~」とか「斜めに切って~」というような指示が飛ぶのだけど、言っている人がどのキャラを操作しているのか、斜めと言われてもどのような形なのか、などわからないことだらけ。


意思の疎通が大事なのだけど、「形」を言葉で表すのは難しいので、混乱必死。

大勢で楽しむのには楽しいゲームだ。




スニッパーズは、4人で「バトル」もできる。

これがまた、説明も何もないし、遊び方もラフすぎる。


2チームに分かれて戦ったりするのに、チーム分けについて何の説明もないのね。


バスケットボールは、赤チームと黄色チームに分かれていて、一応プレイヤーの二人はその色なのでなんとなくチーム分けになるのだけど、後の二人がどちらにつくかも決まっていない。

いや、そもそも赤プレイヤーが赤チームにつかないといけない、というルールすらないのだ。混乱必死。



ホッケーもあるのだけど、こちらはチーム分けがあるので混乱にはならない。

でも、ここでも相手の体を切れる。

ホッケーゲームで「相手を消す」という選択肢は今までになかったように思う。



そして、「道場」というゲーム。

とにかく、誰かの体を切って消してしまえばいい。自分は消されないようにする。

消すためには重ならないといけないけど、重なった瞬間に相手がボタンを押せば、自分が切られる。


もう、ボタン連打しながら相手に向かっていく、何が何だかわからない戦い。笑いが絶えない。




その後、もう寝ないと…と言いつつ、Mii で似顔絵を作る。

子供たちそれぞれが遊ぶためのアカウントを作りたいから。


子供3人分を作るのに、これまた大騒ぎ。

似ている髪型がない、とか、鼻の形がよくわからない、とか。


一応、Wii で子供の似顔絵を登録してはいたのだけど、みんな3歳くらいで「初めてゲーム機を触れるようになったころ」に作った似顔絵なんだよね。

今とは全然特徴が違うので、作り直し。


#そもそも Wii からの移行もできない。

 上に書いたのは、参考にすらしなかった、という意味。




中1の長男は、マニュアルとか読むのが好き。

でも、Switch のゲームにはマニュアルが付属しない。


そもそもダウンロード販売が基本で、ネット接続しない人や、「手元に有体物が欲しい」人向けにパッケージ販売があるのだろうね。


僕も古い人間なので、有体物が欲しい…と思っていた。

その上、Amazon で見ているとパッケージのほうが、ダウンロードより安い。


それでパッケージを買ったのだけど、ゼルダとマリオカートを切り替える際に、いちいちカードを抜き差しするの面倒くさい。


これは、ダウンロード版買ったほうが便利で価値あるわ。高いのも納得。

パッケージ版を買うメリットが、わずかに安いこと程度しか見当たらないのだ。



じゃぁ、付属マニュアルがないのだからゲーム内でヘルプが充実しているのかと言えば、そうでもない。

これはゲームの作り込み次第なのだろうけど、マリオカートのヘルプは「知りたい」ことをカバーできていない感じだった。


(ゲームの「テクニック」は書かれているのだけど、基本的な遊び方が書かれていない。

 初心者向けの「ハンドルアシスト」や「オートアクセル」という機能があるのだけど、設定方法などが書かれていない、など。

 基本部分は試行錯誤するのも楽しいとはいえ、あまりにも情報が少ないと感じた)


これは、紙のマニュアルでも情報が十分カバーできていない場合はあるので、媒体の違いは問題ではないのだけど。




昨日は、子供たちはマリオカートで楽しんでいた。


今朝、長男がゼルダに興味を持ったので遊ばせてみる。

長女・次女にはまだ難しい。でも、隣で見ているだけでも冒険を楽しめているようだ。


まぁ、ゴールデンウィークだし、のんびり遊ぶのに良いタイミングだったかな。


▲目次へ ⇒この記事のURL

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

家族

別年同日の日記

02年 4/30

08年 その後の事件

15年 クロード・シャノン 誕生日(1916)

16年 GAME ON 展関連書籍


名前 内容

フィル・カッツ 命日(2000)  2017-04-14 13:03:46  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

今日は、フィル・カッツの命日(2000)


Phillip Walter Katz。

彼は自分の作ったソフトに、名前の頭文字を取って PKZIP と名付けました。


今でも使われる、拡張子 ZIP の圧縮ファイルのフォーマットを決めたソフトです。



詳しい話は、誕生日記事で書いています。

興味を持たれましたら、そちらをお読みください。


この日記は、ただ命日の日付を記録する目的です。



▲目次へ ⇒この記事のURL

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

今日は何の日

別年同日の日記

02年 4/14

10年 iPad を触ってみた

13年 草むしり


名前 内容

プラスとピリオドの取り違え  2017-04-07 11:57:37  コンピュータ

▲目次へ ⇒この記事のURL

恥ずかしながらケアレスミスによるバグを出した。

恥ずかしい話だし、黙っていればいいのだけど、思うところがあったので書いておこう。




PHP でサーバー側を、Javascript でクライアント側を動かすプログラムを組んでいた。

まぁ、良くある話だ。


両言語とも、いろいろと似たところのある言語だ。

データの型は比較的緩く、必要に応じて自動変換される。


たとえば、


32 + "1"


と書くと、33 になる。前の 32 は数値、後ろの 1 は文字列なのだけど、計算しようとしているのだから両辺を数値にしないといけない、と気を回してくれるのだ。


"32" - 1


と書くと、31 になる。これも、同じように文字列の 32 を数値に変換してくれるんだ。


では、次の式はどうなるだろう?


"32" + 1


これは、PHP では 33 で、Javascript では "321" だ。


PHP では + は計算に使われるものなので、左右にあるものを数値にする。


でも、Javascript では + は計算と文字列の連結の両方に使われる。

左側が優先されるので、左側にあるものが数値なら計算になるし、文字列なら連結になる。


PHP では、文字列の連結は . (ピリオド)で示す。


"32" . 1


これで、PHP では "321" になる。

同じことを Javascript でやると、エラーになる。




さて、PHP と Javascript では、文字列の連結方法が違う。

でも、同時に使っていたので、うっかりして Javascript で次のようなプログラムを書いてしまった。


var foo = "bar" . str;


ここで str は文字列の入った変数だ。

文字列を連結しようと思ったのだけど、間違えて PHP のやり方で書いている。


先に書いたように、Javascript では文字列の連結は + なのでエラーに…ならない。なってくれれば気づいたのだけど。



Javascript では、 . (ピリオド)はオブジェクトのプロパティへのアクセスを意味する。



オブジェクトっていうのは、まぁざっくりと言えば、名前を付けた複数のデータを保持する仕組みだ。

AWK や perl 、またはそれらの影響を受けた言語では「連想配列」や「ハッシュ」と呼ばれるものと同じだと思っていい。


var obj = {a:1,b:"Hi!"};


ここで obj.a は 1 になるし、obj.b は "Hi!" になる。


C言語系の言語では、配列のアクセスは [ ] で行われる。

Javascript では、こちらの方法も使えて、obj["a"] は 1 で、 obj["b"] は "Hi!" だ。

[ ] と . (ピリオド)は、少し違うけど「ほぼ」同じものなんだな。


「ほぼ」と括弧書きで書いたのは、完全に同じではないから。

ピリオドで書く場合、後ろに書かれるものが「名前」である必要がある。

[ ] で書く場合は、名前ではなく「リテラル」である必要がある。



多くの言語では、単語は「名前」と「直値(リテラル)」に分けられる。

リテラルには大きく分けて数値リテラルと文字列リテラルがある。


それ以外は、大体「名前」だと思っていいだろう。

(細かく見れば他にもいろいろあるのだけど)


さきに "32" . 1 という例を出したけど、"32" は文字列リテラルで、1 は数値リテラルだ。

だから、ピリオドの後ろには名前が来る、というルールに違反していて、エラーになる。



でも、ほぼ同じ書き方である "32"[1] ならエラーにはならない。"2" が返ってくる。


#最後の例はC言語と同じ動作を提供しているのだけど、案外知られていない。

 文字列を配列アクセスすると、0 から始まる「位置」に応じた文字を、文字列として取り出せる。




先に書いた間違い、


"bar" . str


の場合、 str は文字列リテラルでも数値リテラルでもない。

これは変数 str の指定…正確にいえば、変数の内容を参照するために、 str という「名前」を書いたのだ。


意図としては、文字列リテラル "bar" に、変数 str に入っている内容の文字列を連結、だった。

ただ、連結の演算子を間違えて、PHP 風に表記してしまった。


すると、オブジェクトのプロパティアクセス演算子となる。

str は変数ではなく、"bar" オブジェクトのプロパティとなってしまう。


Javascript では、すべてのものは「オブジェクト」だ。文字列リテラルであっても例外ではない。


先に書いたように、オブジェクトの正体は連想配列に過ぎない。

そして、文字列オブジェクトの場合、関連情報が連想配列として保持されている。


例えば、「文字列の長さ」という関連情報は、length という名前で保持されている。

だから "bar".length とすれば、 3 が返される。


"bar".str は、定義されていない情報を参照した、というだけで、文法エラーではない。

この場合、定義されていないことを意味する、 undefined という値を返す。




恥ずかしいバグ、というのはこれなのだけど、長いコードの中にこれが混ざっていた。


ここで作りだそうとしていたのは、別サーバーにアクセスする際に渡すパラメーターだった。

さらに、このパラメーターはアクセス自体には影響がなく、アクセス理由などをログに残して解析するためのものだった。


結果として、正しい値を渡せていないにも関わらず、プログラムは動作した。

そして、別サーバーは僕の管轄ではなかったため、ログに正しく記録できているかを調べる術はなかった。


つまり、僕は自分で作ったこのバグに気付かなかったんだ。




ログがうまく取れてない、という報告があって付近を見回し、str の内容などが正しく来ていることなどを確認しても、+ と . を間違えていることに気付かなかった。

僕としては「文字列を連結したい」ところに、PHP で文字の連結を行う . を正しく書いているので、おかしくないと思っていたんだ。


でも、ログがうまく取れていないのはどうやら事実らしいし、バグの可能性範囲を絞り込んでいって…30分くらいたって、やっと自分の過ちに気が付いた。


恥ずかしい、と思うけど、プログラマなら誰でも同じような経験を持っていると思う。

自分が「正しい」と思っていることは、間違えていてもなかなか気づくことができない。



で、思ったんだ。

FORTRAN のことを「古い言語」と笑えないぞ、と。


FORTRAN の有名な「おかしな言語仕様」として、, (カンマ)と . (ピリオド)を取り違えてしまってもエラーにならない、というものがある。

見た目も似ているので、見直していても気づきにくい。


そして、金星探査機を失うわけだ。…いや、これは都市伝説に過ぎないのだけど。




そもそも PHP と Javascript の記法を間違えたからいけない、という話ではある。

でも、それをエラーにできず、構文の間違いに気づく機会を失うのは、FORTRAN と同じような言語の不備だ。


Javascript の場合、アクセスできないとなんでも undefined にする。

ここで、アクセスできないならエラーになるのであれば、構文の間違いに気づいただろう。


もっとも、アクセス違反があってもプログラムが動き続けてくれる気軽さは Javascript のよさでもある。


strict モードをつかったらどうだろう…と思ったけど、これもエラーにはできないようだ。


"32"-1 は計算になるのに "32"+1 は文字列の連結になる、という対称性の悪さも気になる部分ではある。

ここは、連結に . (ピリオド)を割り当てた PHP のほうが良いように思うが、そのせいで PHP は、オブジェクトのプロパティアクセスに -> という面倒な記号を割り当てることになった。



FORTRAN の時代に比べて、言語は便利になったと思うのだけど、こうした「単語の解釈」で足元をすくわれる、というのはあまり変わっていないのかもしれない。


"bar" . str の例でいえば、後ろが「プロパティ名」ではなく「変数名」だと判れば、文法違反でエラーにできる。

でも、文字で書くとどちらも名前であり、情報が足りないために類推するしかない。


例えば、PHP であれば変数名は $ で始まり、プロパティ名には $ がつかないため、こうした文法違反を検出しやすい。

まぁ、変数が必ず $ で始まる、という古臭い仕様が良いとは言わないのだけど。


結局、文字を並べてプログラムする、というやり方の限界だとも思う。



Scratch が良いとは言わないけど、「ブロック」を選んで組み込む方式なら、選んだ時点でプロパティか変数かは確定する。

表示上は「名前」だけを示してすっきりとさせつつ、内部的に情報を保持しておけばよいだけだ。


情報の違いによって、表示の色を変えるなどすれば、ユーザーもミスした際に気付きやすいだろう。

語句解析で情報を「類推」するのではなく、語句の中に見えない情報を埋め込んだ言語だな。



その情報によって、プログラマーのケアレスミスを未然に検出する。

そもそも、Scratch の場合は、「組み込めない」場所には、ブロックが入れられないようになっている。

子供向けだからこその配慮だけど、ケアレスミスは起こせない。


いつまでもテキストだけで書こうとするのではなく、これからはそういう方向の言語だってありだと思う。




▲目次へ ⇒この記事のURL

別年同日の日記

05年 工事が遅くなるそうだ

10年 ポメラニアン

14年 オーレ・キアク・クリスチャンセンの誕生日

15年 プログラムは必要か

15年 女性向けのゲーム


名前 内容

西角友宏さん 誕生日(1944)  2017-03-31 15:28:30  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

西角友宏さん 誕生日(1944)

今日は、西角友宏さんの誕生日(1944)


名前はあまり有名ではありませんが、作り出したものは多くの人が知っている。

スペースインベーダーの開発者です。




過去に世界最初のゲームについて書いていますが、まぁ、多くの人が世界最初のゲームは PONG だと考えています。


これは商業用として最初にヒットし、ゲーム業界を作り出した作品。

でも、その前に同じ作者による、「COMPUTER SPACE」というゲームがあります。


PDP-1 で遊ばれていた「SPACE WAR!」を業務用にしたもの。

…なのですが、もちろん業務用にするためにルールは違いますし、最大の違いは、SAPCE WAR! がプログラムで作られていたのに対し、COMPUTER SPACE は回路で作られているということ。


当時、コンピューターはまだ非常に高価でしたし、プログラムを解釈して処理できる機械を作ろうとしたら大変でした。

だから、安くするためには回路で組まないといけなかったのです。


PONG も回路ですし、その後の多くのゲームも回路で作られています。



しかし、タイトーから発売されたスペースインベーダーは CPU 8080 を利用して作られ、回路では実現できないような複雑な内容を持っていました。

そのために大ヒットしますし、同じように「プログラムされた」ゲームが大量に作られ、ゲーム業界を作り出すことになります。


#ソフトウェアで作られた初の業務用機、ということではない。

 インベーダー以前に日本でもヒットした「サーカス」(風船割ゲーム)も 6502 を使用している。

 ただ、サーカスは絵がきれいになり、遊びに幅は出たものの、ブロック崩しの亜流に過ぎない。




インベーダーは、ブロック崩しのブロックが動いたら面白いのではないか、というアイディアから着想されたそうです。


ブロック崩しは、ただでさえ狙うのが難しいゲーム。

動いたらとても狙ってられないので、直接「撃つ」ことにします。


ということは、ボールがないのだから、「落としたらダメ」にはできない。

そこで、敵からも反撃があるようにします。


このままだと戦争ゲームになってしまい、なんだか血なまぐさい。

当時スターウォーズが流行していたので、宇宙戦争ということにします。


これで大体インベーダーゲームの骨子の出来上がり。

非常に論理的に組み立てられていますが、「全く新しいゲーム」を感じさせてくれました。



プログラムで作られたゲームとしては最初期のものなので、バグも多いです。


ミサイルがインベーダーの「下」ではなく、「2つ下」から出てしまうため、密着するとやられない。

いわゆる「名古屋撃ち」です。


インベーダーは左右に動きますが、右に進むときは、左に進むときよりもわずかに速いです。

これもバグだったそうですが、微妙な速度の緩急により、ゲームを単調ではなくしていました。


ビットマップの画面にキャラクターを描き、動かすときには消す必要があります。

でも、インベーダーは左右にしか動かないのだから、左右の余白を大きくしておけば、新しく「描く」時に、以前のものも消してくれる。

…はずでしたが、一番大きな 10点インベーダーが、上に書いたバグにより、最高速で右に進むと軌跡を残しました。

いわゆる「レインボー」。



バグかもしれませんが、すべてがいい方向に動きました。

他社からも真似をしたゲームが多数発売されましたが、バグをとってしまったゲームは「つまらない」と言われてしまう始末。




PONG のコピー基盤でアメリカのゲーム業界が形成されたように、日本ではインベーダーのコピー基盤でゲーム業界が形成されます。


コピーというより「パチモン」と言ったほうがいいかな。

まるっきりコピーする、いわゆる「デッドコピー」ではないです。

(デッドコピーもありましたが)


任天堂も、セガもコナミも、アイレムもニチブツも、インベーダーのコピーを作っています。



もちろん、今でも残るメーカーは「真似」だけで終わらずに、その後オリジナル作品などを作って生き残ってきたのですが。



インベーダー以前のゲーム機は、遊園地や、デパート屋上スペースや、映画館や、喫茶店などに置かれるようなものでした。


でも、インベーダーの大ヒットで、インベーダーだけをたくさん並べたお店、いわゆる「インベーダーハウス」が乱立します。

ブームの終焉と共に無くなった店も多いですが、これらの一部が「ゲームセンター」として生き残っていきます。



メーカー側、店舗側、どちらもインベーダーの出現で大きく変わったのです。

インベーダーが日本のゲーム業界を形成した、と言ってよいかと思います。




西角友宏さん個人については、実のところ僕はそれほど知りません。

まだ精力的に活動しておられる方で、実際にあって話をしたような人の記事も、ネットを探せばたくさん見つかります。


インベーダーが大ヒットしてしまったがゆえに、「アフターサービス」で、インベーダー基盤の交換用ソフトをしばらく作っていた…なんて話もあります。



他社製品ではスプライトが使えるようになったりする中ですから、羨ましくもあったようです。

でも、制約の中で作ったゲームは大ヒットとはいかずとも、よく考えられた面白いゲームだったと聞いたことがあります。




▲目次へ ⇒この記事のURL

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

今日は何の日

関連ページ

テニスとインベーダー【日記 16/01/04】

別年同日の日記

04年 びっくりした

08年 花見

14年 長女卒園

14年 カップヌードルミュージアム

15年 春の家族旅行

15年 ペンション とうてんぽーる

15年 バナナワニ園

15年 ぐらんぱる公園

15年 帰り道


名前 内容

ルータ不調  2017-03-30 18:35:30  コンピュータ

▲目次へ ⇒この記事のURL

先日、なんだかネットの調子が悪いことに気付いた。

サーバーの調子かな、と思って調べてみたり、いろいろ絞り込むうちに、どうやらルータが何か変だ、と気づく。


ルータの設定が何かおかしいのかな、と見直してみる。

項目をいじったら、リセットを促された。そして…再接続しない。


げ! 困った。設定をいじってみたり、いろいろするけどなかなか接続できない。


使っていたルーターは、webCaster V120。NTT の純正品(?)だ。

ちなみに、この前は V110 を使っていた。順調なバージョンアップ。


でも、購入は9年前、機種としては10年前のものだった。




何かおかしい。設定はあっているはずなのに接続できない。

「すでにその ID でログインしている」と怒られる。


スマホで(LTE 電波で)情報を探す。


使っているプロバイダのページに、「接続できないくらいは10分くらいたってから再接続」と書かれていた。

えーと、切断しても「ログインしている」とみなされてしまうような場合でも、10分くらいで強制切断されたりするのかな。


試してみると、接続できた。が、すぐ直後にまた切れてしまう。

やはり調子が悪い。いじった設定のせいかもしれない、と設定を元に戻し、また10分待ち、再接続。

しかし接続できない。



おかしい、と思っていじり始めたのが夜10時過ぎ。

何かするたびに 10 分まつ、というようなやり方をしているので、あっという間に深夜1時を過ぎた。


違うことを試してみる。


ルータは PPPoE で上流に接続しているが、この接続を2つ作れる。

1番目のプロファイルを2番目にコピーし、2番目で接続して見ると…接続できた。


全く同じ内容のはず。もう一度1番目で接続すると、接続できない。


PPPoE はソフト的に処理されていると思うので、この2つは等価であるはずなのだけど、なんで?

実はソフトではなく、それぞれの回路が作り込まれていて、片方だけおかしくなった? なんて考える。



しかし、もう夜は遅い。

外部公開しているサーバーなどは、どちらの接続を使っているかの影響を受けてしまう。

この設定を書き換え、問題なくなったところで就寝。深夜3時近かった。


#主夫なので朝5時には起きないといけない。

 でも、春休みで子供の学校もないし、6時まで寝てしまった。




さて、翌朝。

ルータの調子が悪いのは事実だし、新しいルータを買うことにする。


V120 には IP 電話の機能がついていて、プロバイダの提供する、NTTコミュニケーションズ系(以下NTTC)の IP 電話を使用していた。


だから新しいルータにも同じ機能が欲しいが…ない。

NTT純正品は、古いものをいまだに売っていて、低性能で高い。


高性能なものを選ぶと、値段に関わらず、IP 電話機能は付いていない。


その代わりと言っては何だけど、今のルータには WiFi 機能がついているのが普通だ。

V120 はオプションで、このオプションが妙に高いので別の WiFi ステーションを使っていた。


そして、探すと IP 電話のアダプタはそれほど高くない。

今ルータのそばにある WiFi ステーションを無くし、代わりに IP 電話アダプタを置けばよい。


というわけで、ルータと IP 電話アダプタを購入。




ルータの置き換えは おおごと になるので、まずは IP 電話を設定しようと思った。


…設定がわからない。


詳しく書くと長くなるので書かないけど、NTT純正の IP 電話機能は、NTTCの設定に特化することで、使いやすくしてあった。

この言葉は嫌いだけど、「ガラパゴス化」だ。だから、新しい機種も出ない状態になっていたのだ、と気づいた。


NTTCが悪い、というのではなくて、電話って各国で少しづつ規格が違って、対応するのが大変なのだ。

購入したのは海外製のアダプタで、どこの国でも使えるようにやたら設定項目が多い。


それよりは、NTTCがNTT純正品として、国内用の設定を「固定化」させた機種を売っていても、良いサービスだと思う。



まぁ、ともかくたくさん情報を調べたのだけど、今のところ設定方法がわからずに頓挫している。


で、仕方がないからこの部分だけ今まで使っていた V120 を使えないか、と思った。

ルータの内側に、ルータ機能を殺した V120 を置いて、IP 電話アダプタとして使う、という案だ。



ここで調べていて、意外な一文と出会う。


「IP 電話機能は、PPPoE の1番目で接続している時のみ使用できます」


ルータとして動いていないといけない、というのであればまだ理解できる。

でも、1番目の接続でないと動かない。


ということは、PPPoE はソフトウェア処理で、1番目と2番目は等価である…と思っていたのが間違いなのかな。

1番目と2番目は別の回路で処理されていて、1番目の回路に IP 電話の機能がつけられている。


これなら、1番目が調子が悪くて2番目なら動く、というのも説明が行く。


いろいろと腑に落ちたのだけど、IP 電話は当面使えない、ということが確定した。

この電話、仕事用で、仕事では大抵メールを使っているので、数少ない相手が年に1度かけてくるかどうか、という程度のものなので、ダメならあきらめもつくのだけど。


#仕事電話番号にしていて、名刺に番号を印刷してしまっているのが一番の問題。

 この名刺も、ほとんど配らないのだけどね。




ルータは、とりあえず家の中の WiFi ステーションとしては動き出している。

5Ghz 帯も使えるようになり、快適に動くね。


ルータを変えることで「固定 IP 接続」の IP が変わってしまうと困るので、DNS の ttl を短く設定し直した。

キャッシュが無くなったころに切り替えを行おうと思う。




▲目次へ ⇒この記事のURL

関連ページ

ルータ交換【日記 17/04/03】

別年同日の日記

12年 ロボットゆうえんち


名前 内容


戻る
トップページへ

-- share --

10000

-- follow --




- Reverse Link -