novtanの日常

ネタです。ネタなんです。マジレスする人は撲滅すべき敵です。だからネタだってば!

サマータイムとグレムリン餌やり問題

昨日色々書いたわけですが、どうもまだ「時間ずらせばいいじゃない」と言う人がいますので、その人向けになるかどうかはわからないけど、ちょっと思考実験です。
つまり、
novtan.hatenablog.com
の続きね。

グレムリンの餌やり

グレムリンを知らない人は
グレムリン (映画) - Wikipedia
※結末までネタバレしてますが

さて、可愛いペットのモグワイを手に入れたあなたは、深夜12時に餌を上げないという掟を守らなければなりませんが、ブラック企業に務める身であり、日が変わるギリギリまで家に帰ってこれません。仕方がないので、餌やりが12時に間に合うか間に合わないのかを正確に判断しなければならないのです。

ところで、このモグワイ、地球の自転を正確に体内で検知しているらしく、サマータイムだろうがなんだろうが、関係なく、モグワイ基準の真夜中になって餌を食べてしまうと凶暴化してしまうのでありました。サマータイムになり、時計を一時間後ろにずらしたあなたは、「もう1時も過ぎたし、大丈夫だろう」と思いモグワイに餌を…

新種のモグワイ

長い地球での繁殖の果て、サマータイムに適応したモグワイが誕生しました。このモグワイ、なんと時計に合わせて真夜中を判断するように進化を遂げました。これでサマータイムが施行されても何も問題なし!

ところで、ブラック企業での労働に疲れ切っていたあなたは今日からサマータイムということに気づかず、まだ11時だから大丈夫だろう、とモグワイに餌を…

モグワイの繁殖場にて

「おい、どっちがどっちのモグワイかわかんねーぞこら。なんで奇数時間のたびに少しずつ餌を上げるってルールになってるんだよここは」

街にはグレムリンが溢れました。

飛行機に乗って

自転の速度と同じ速度で移動し続ければ無限に餌やりタイム!

サマータイムがわからない人には

「いつか君たちにもモグワイを飼う資格を得る時がくる」

サマータイムは簡単、という記事があまりにあれな件

いくらなんでもこれはひどい、という記事があり、はてブでも総スカンを食らっていますが、ちょっと解説。

blogos.com

コンピュータ(システムやプログラム)には「時間経過」の概念がありません。命令を受けた瞬間からの経過時間は、秒単位でカウントアップしていくだけで、つまり「その瞬間」しかコンピュータは認識していません。

のっけから何を言いたいのかわかりませんが、「時間経過」の概念はプログラムには当然仕様として必要であればあります。例えば、ジョブ(ここでは、時間になったら起動して、一連の処理を行って終了するプログラム、と考えてください)の遅延時間監視をしていて、起動後30分経ったらハングアップしている可能性があるのでアラートをあげる、というシステムがあったとして、12:00にスタートしたジョブが10分後に時刻が1時間先に進んで13:10になったらまだ10分しか経ってないのにアラートが上がりますね。なので何も考えないと日本中のシステムがアラートだらけになりますね。

もう少し、かみ砕くと、「いま何時? 3時か、あと2時間仕事しなければ」という発想はなく、命令された時間だけ作業を繰り返しているということです。

これもかみ砕いているわけじゃなくて適当なことを言っているだけですが、そもそもシステムが「発想」することはありませんが、今何時?3時か、後2時間は要求を受け付けなくては、という判断はしますよ。つまり、ATMが15時になったら振込を翌日扱いにしますよ、という仕様は「いま何時?」をメインの基準にしているわけです。「命令された時間だけ作業を繰り返している」?なんの話?

これをプログラミングにより擬似的に、時間経過の概念があるように見せかけているのが、エアコンなどの「タイマー機能」です。

これも大嘘で、エアコンのタイマー機能は「システムが持っている所定の時刻になったら所定の動作をすることを設定する」わけなので時間経過の概念がそもそも不要ですね。これまで述べてきた例とは全く違う機能です。補足すると、エアコンのタイマーのようにエアコンに閉じたシステムにおいて、サマータイムの影響なんて当たり前ですがありませんよ。例が悪い。しかもインターネット家電的な意味で例えばスマホのアプリから予約をするとかになってスマホがサマータイム、エアコンはサマータイム非対応だと時間ずれますね。

反対に「時間の経過」を確認するプログラミングをすると、秒単位でカウントアップしていく内部時間とは別の、外部時間(時計)を用意しておかなければならず、さらに両者を絶えず確認しなければならないので、二度手間三度手間になってしまいます。

何を言っているのかさっぱりわかりませんが、複雑なシステムじゃなくても、ストップウォッチのことを考えれば時計と時間を測る機能はカウントが別なのは当たり前ですよね。手間の問題じゃなく、実現したい要件の問題です。

だから、どこかの瞬間、サマータイムにより2時間ないし、何時間と時間がずれても、そのまま処理するだけで影響は軽微です。目覚まし時計の時間がずれたら直すように「サマータイム」となったとき、コンピュータの時計を合わせ直せば良いだけのことです。

はいでました、「時間をずらせば良い」。これ言っている人は基本的にシステムのことをわかってない人です。わかりやすい。この人今までタイマーの話ししかしていないし、時計のことをコンピューターシステムのすべてと思っているんでしょうか。そもそもここまでで出てきた二度手間三度手間の話がないと仮定すると、ストップウォッチで時間測っていたらさっきまで1時間経過だったのが1秒後に3時間経過に変わってた、みたいになるってのこの人理解してるの?

ええと、電車一つとっても終電後3時に車庫に入ったのが次に始発向けに4時に出ていくはずが、2時間ずれて2時に出ていかなきゃならない、となったら破綻してますよね。システムの運用でさっき触れたジョブみたいなのも話は一緒なので時計ずらせばOKってのはシステムをパソコンレベルの用途しか考えてないんですよね。

ホストコンピュータなどと接続していて、連続した情報をやりとりしているシステムなら、バチっと電源を落として、その後の立ち上げで日時の変更をすればよいだけのこと。

ええと、そのホストコンピュータはどうすればいいんですかね。そもそもバチッと電源を落とす機会なんて今どき月イチあれば良い方ですよ。で、日時変更したら予定している作業スキップしちゃったりしたらどうするんですかね。簡単に言い過ぎ。

コンピュータに詳しくない人は、人間の意識する「時間」、便宜上「自然時間」と呼ぶとすれば、これを基準にコンピュータのことを考えます。

サマータイムとなり自然時間の定義が変われば、コンピュータも同時に変えなければと「思いこみ」ますが、コンピュータが処理に用いているのは、埋め込まれたクォーツが刻む「内部時間」だけです。

違いまーす。コンピューターが用いているのは、「データ」と「システム時刻」です。データには時刻の関連項目がありますね。みなさんに一番身近なのはファイルの更新時刻とかですね。ブログの更新時間なんてのもデータで持ってますよね。表示されるでしょ。まさかこれをずっと「内部時間で刻んている」わけないよね。X時間前、という更新時刻は当然XX:XX時というデータと今の時刻の比較をしているので、システム時間をバーンと変えたらX時間前との相対関係が変わって表示変わっちゃいますよね。

というのは、サマータイムなどのことを考慮していないシステムが直面する事態で、日本固有のシステムはたいてい直面する事態ですね。

日時の処理は、内部時間を変換して行っているに過ぎず、自然時間の概念をコンピュータは必要としません。

この文章は正しいですね。だからなんだって言うのだ?コンピューターが必要なのはデータとシステムの整合性ってだけ。今までの話はそこを一切無視していますよこの人。

なお、日時の変更はすべてのコンピュータシステムでできます。仮にできないコンピュータがあれば欠陥品と断言できます。なぜなら、内部時間を刻むクォーツには誤差があり、これを絶えず修正しなければなりません。

ほんとこの人時計の話しかしねーな。

最新のシステムではネットを介した日時の自動修正や、電波時計を用いた萬年単位で狂いのないシステムを構築することもできますが、それでも、日付またぎ、年またぎ、うるう日のチェックなどのために、「日付を設定する機能」というのは必ず必要となるからです。

ほんとこの人時計の話しかしねーな。

コンピュータは考え得る限りの状況をテストしてから製品となり、日時を扱うシステムなら「2100年に2月29日はあるか」という処理までチェックするものです。

ほんとこの人時計(レベル)の話しかしねーな。

なお、西暦の下二桁が0になる年にうるう日はありません。一方、400で割り切れる年はうるう日になります。つまり、2000年2月29日は、400年に1回訪れるうるう日でしたが、その400年に1回に対応するように、私が従事ししていたコンビニのPOSシステムは設計されていました。たしか昭和の終わり頃には。

よく、2000年がうるう年にならない問題は初心者を測る問題とされているのでこの話を嬉々として持ち出す人はそのレベルの話をしていると考えて良いですね。ところで、この話は完全に蛇足ですね。時刻の話をしているのであって日付の話はしていません。ほんとこの人時計の話しかしねーな。

つまり、日時変更できないコンピュータは、これらの処理を確認していない欠陥品だということです。

ほんとこの人時計の話しかしねーな。

サマータイムは日付変更すればすむ話し。一方で24時間、365日絶えず稼働しなければならないコンピュータで、日付を変更するわずかな時間すら許されない場合はどうするか。

先のコンビニのPOSシステムでさえ、サマータイムにはいつでも対応できるように設計されていました。平成元年の時点なので、いまから30年近く前のことです。海外の事例を参考に、変更開始日時と、その変更時間の幅と、終了時刻を処理する仕組みが考えられていたのです。実際に店舗に配備されたレジに、その機能は搭載していませんでしたが、ゴーサインがあれば、瞬時に対応できるようにしていたのです

あのさあ。みんな「そうなってないシステムがたくさんあるのだよ日本には」という話をしているの理解してます?自分が従事していたシステムがたまたま対応してたからってドヤっちゃうの?

プログラミングとは、その時点において考え得るすべてを洗い出し、対応できることは対応し、将来、予想されることに備えておくものです。

はいはいあなたが考えたんじゃないよね。それはさておき、その時点において考えられることがたまたまサマータイムだったというだけでドヤれるってまともなシステム屋さんの感覚じゃないよね。そりゃできることはやったほうが良いけど、そのために必要なコストとか期間とかがお客さんの予算を超えて行われることは、ないです。

余談にそれますが、小学生からのプログラミング教育が無駄だというのは、実戦においてはプログラミング言語よりも、こうした常識と知識を踏まえて、可能性をさぐる論理力が求められるからです。

ここまでの論理展開で説得力が皆無。

話を戻せば、浮かんでは消え、なんども議論されている、サマータイムへの対応、あるいは準備をしていないコンピュータ・システムの業者がいるなら、静かに退場すべきであり、裏返せば、多くのシステム屋はある程度の備えをしているものだということです。

何度も言いますが、サマータイムの対応には当初から備えたとしても金と時間がかかり、それでもなお、クリアできない課題があるわけですね。ある程度の備え、なんて当たり前の話で、複雑な運用をしていないシステムであればいいタイミングでどーんと時刻変更、でもなんとかなると思いますよ。そういうのでは太刀打ちできないシステムの話をしているわけです。時計の話じゃないからね。1日が22時間になったり26時間になったりするときに、俺の利子返せと言ってくる人にどう対応するかなんてことまで考える必要ありますからねー。

なにより、今の時点からでも即座に対応できる程度のことです。2018年8月8日の読売新聞は「元号の変更とあわせてシステム改修が間に合わない」と書いていましたが、あまりにも無知。

いやだからあなたが言うところの「その時点において考え得るすべてを洗い出し」た結果で言ってるんですかねこれだけ色んな人が具体的な事例で無理って言っている中で。

コンピュータの内部は西暦で処理されていますが、元号表記が必要な場合、「1989年1月8日からは平成」と変換しているだけのことです。それが次は「2019年5月1日からは○○」と新元号の処理を一行加えるだけです。

あまりにも無知。1行加える、というのは何に対してですかね。例えば1システム1行で済むと仮定したとしても100万システムあれば100万行なんですが。そもそもコンピューターの内部が西暦で処理されていますが、というのも大抵の場合嘘ですが(累積秒だよね)。

さらにこれらの制御は「フラグ」によって行います。あるフラグが立っていれば元号処理、または「新元号」を含んだ処理をさせ、そうでなければ通常処理という具合です。

サマータイムも同じく、「サマータイム」のフラグが立っていれば、サマータイムの開始日時を参照し、その切り換え日ならば、必要な時間調整をするというだけのもの。プログラミング初心者でもできる程度の処理です。

さっきは「こうした常識と知識を踏まえて、可能性をさぐる論理力が求められるからです。」とか言ってたんだけどさー。で、必要な時間調整をした後データとの整合性はどうやって取るんですかね。ここまでこの人データのデの字も言ってないけど。

一方で、ここがサマータイム導入が日本で難しいところに直結します。この記事を書いた読売新聞の記者のように、コンピュータへの無理解と、同時にコンピュータへの過大な期待が、日本社会にはあるからです。

お前が無理解だろ、と言いたくなった人が1000万人はいると思うぜ…

此処から先は蛇足なのでもういいかな。まあこの人の書いたものがすべて蛇足もいいところでしたが。

補足

で、結局どういうことなの、という声がありそうなのでちょっと補足します。わかりやすいとは限らん。

サマータイムの問題はシステムから見るとまず、時計がずれる、という問題があります。当該エントリで問題にしているのはおよそこの第一段階の問題が全てで、あとのことは「考慮しときゃできるでしょ」といっているだけで全く触れていませんので、そこが騙しポイントなわけですね。
で、時間がずれることを修正する、これは当たり前にできます(できなかったら欠陥品、というのは正しいけど、そんな欠陥システムないから)。そうすると何が起こるか。主に以下のことが起きます。

  • データが示している時刻(データ内に持っている時刻、例えばXX予定時刻とかや、ファイルのタイムスタンプ等)とのズレ
  • 現実の時間とのズレ(サマータイムをまたいでバイトしたらバイト代が1時間分急に増えたり、働いたことが働いてないことになったり、してもよいです?)

が起きますね。時計の問題に関しては日時そのものをテキストデータでもっている場合と、コンピューター内時間(時計とは関係ない、全世界で一定の値)でもっている場合で大きく異なります。
後者の場合はわりと対応が可能なことも多いです。時差の対応なんてのはそういう話です。しかし、時差の問題とこの問題が違うのは、時差の場合、単純に1時間ずらす、ということで問題ないわけです。これは単純に相対的な関係の解消だからです。12:00に更新したデータが1時間時差のある国で見たら13:00に更新したことになっていた、という場合、これをいわゆる標準時(日本から9時間時差があるやつ)で見たら一緒、ということですね。でもサマータイムの場合、昨日12:00に更新したデータが今日になったら13:00時に更新したことになってた、というわけにはいかんのです。サマータイムを跨いだら時間が変わったように見えてはいけない。だから、サマータイムに対応するためには予めサマータイム適用日なのかどうかをデータとしても持って(ここがポイントね)、いまサマータイムかどうかを判定基準に、表示や更新で考慮を入れなきゃいけないわけです。
おおよそこの問題が「対応不能」なのは、この「いまサマータイムかどうかを判断する項目」をデータ項目としてもっていないシステムが多いからなわけです。

日本に閉じたシステム、という問題は、単に時差の問題すら解決が難しかったりしますが、現実のシステムでは時差で問題がでるのは表示だけのことが多いのでわりと対応可能です。サマータイムへの対応はこれとは次元が違います。日本以外でも、「コンピューター導入前にサマータイムが施行されていた」国以外では同様の問題を抱えているのでサマータイムを今更やり始める国はないと思いますね。

さらに

補足的なネタエントリ
novtan.hatenablog.com

FFRK ★5魔石30秒切り攻略 ベリアスの記憶

30秒切りor Die。結構運が絡みますが、勝率はまあまあ良いです。

パーティー

f:id:NOV1975:20180808200046p:plain

キャラ アビリティ1/2 必殺 レジェンドマテリア1/2 レコードマテリア ダイブ状態
ウララ ケアルジャ/プロテガ アルブム 回復アップ/白2回 雷神 フルダイブ
リディア ルナリヴァイア/タイダリアサン 超絶 水纏/召喚2回 召喚アップ フルダイブ
パロム 連続ウォタジャ/連続ウォタガ 超絶 黒アップ/黒2回 水アップ フルダイブ
オニオン ボルテック/たくす 叡智/大魔法 黒2回/開幕待機なし 魔晄 フルダイブ
ティーダ サファイアブリット/パワーブレイク チェイン 開幕水纏/水2回 Dr.モグ フルダイブ

ウララ:壁

水魔法チェインないので。ティーダは防御より装備。パワーブレイクは精錬不要です。

魔石

f:id:NOV1975:20180808200344p:plainf:id:NOV1975:20180808200338p:plain

アンチ系とバファイアを多めに。マジックアップが一個あるとタイダリアサンが3連出るので結構重要

立ち回り

ティーダチェイン、オニオン叡智は開幕即発動。ウララは壁、リディアとパロムは右アビ。オニオンの2回目はボルテック。直後にチェイン発動します。
ウララはプロテガ、リディアとパロムは右アビ、オニオンの3回目はウララに託します。ティーダは回ってきたらサファイア。
この時点で結構ダメージ受けてますが、次の殴りまではまだ耐えられるので我慢。殴られて死ぬ場合、初撃でクリティカルを食らってる可能性ありますが、そうじゃなくて死ぬ場合は体力足りないので結晶水で盛る。
ウララの3回目の行動はケアルジャ。まだアルブム分溜まってませんので。ベリアスの次の行動がセーバーなので余裕があります。
リディアとパロムは左アビ。これによって次ゲージが溜まった状態になります。オニオンはしばらくボルテック連打。ティーダは9秒ちょっとまで待ってパワブレを入れるとちょうどセーバーを打ち消せます。
ウララがアルブム打って短縮効いている状態でリディアとパロムが超絶を打ちます。ウララの次の行動くらいのタイミングで魔石が貯まるので打って狂式解除。

ここまでが前半戦。この先が正念場です。
オニオンはゲージ貯まるまでボルテック。溜まったらだいまほう打ってまたボルテック。
リディアはひたすらルナリヴァイア。2回発動が何回かないとやばい。ポロムはひたすら連続ウォタジャ。これも2回発動(計3回)に期待。この3人の与ダメが少なすぎると、上下二人にバーサク食らってジエンド(倒すの間に合うことあるけど)。とにかくバーサクを飛ばしたい。
ポロムはウォタジャが1回になったらウォタガに切り替え。チェインが溜まっていれば確定2連を打ったほうが安定するのでこっち。アルブムの短縮込みで最速で打てていれば都合ウォタジャ3回(6~9連)、ウォタガ2回(4~6連)打てます。
リディアはルナリヴァイア切れたら超絶がまた打てるのでその後回復したリヴァイアをもう一回打つくらいで倒しているはず。オニオンはボルテック尽きる前にまだHPが結構残っちゃってたら叡智打っておく(叡智がない状態で30秒超える=与ダメが足りてないと最後の最後、火力足りなくなります)

で、ティーダの行動がポイント。前半の動きをおさらいすると、チェイン→サファイア→パワブレ→サファイヤ。これで大体ゲージがあとちょっとになっているんだけど、ちょっと足りない。このあたりで順調にダメージを与えていたらペインフレアが来るのでそれを待ちます。魔石のバリア貫通してくるので、ちょうどゲージが貯まるのですぐチェイン(大体15~16秒あたりの出来事)。で、次のベリアスの行動がセーバーなのでなんとかそれに間に合わせてパワブレを打ちたい。打てないと回復が足りないとか、たまに事故で誰か死にます。無事ここまで来たらあとはサファイア連打でチェインとダメージ(高チェイン状態で2回発動すると1万くらいは行くのでバカにならない)を稼ぎましょう。
ウララは、アルブムをどこで使うかがポイント。地獄の火炎の直後に合わせたい。セーバーとバオルのタイミングではできればリジェネガの回復に頼っておきたい。魔石による狂式解除がいまいち噛み合わないことが多いので、回復のタイミングも噛み合わないとメイン火力3人の誰かが死にます。誰かが死ぬと火力不足で全員死にます。火力足りなくなってルナリヴァイアも尽きたときにタイダリアサンが3連出ることで救われることがあります…

2回発動の調子が悪いと倒せないことが結構あります。水魔石の場合と違ってパロムの超絶でダメージが与えられないのが地味に痛いですね。