ノートPCと飛行機
2025.08.18
ノートPCは、手荷物検査でカバンから出し、トレイに入れて検査機に通さなければならないのでひと手間かかります。
上着を脱いでトレイに載せろとか、ズボンのベルトもはずせとか、ポケットの小銭とか、ただでさえ面倒くさいのに。(恨むならテロリストを恨め)
たぶんバッテリーが問題になるのだろうから、取り外し可能な機種なら取り外して(家に置いて)持ち込んだらどうか?と思いつき。その場合、検査に通さなくて良いのかどうか。
外出先ではバッテリーで使えなくて不便と思うだろうけど、だいたいコンセントのある場所で使うので問題なし。バッテリー自体、劣化していてあまり役立たない。
たぶん、バッテリーの有無にかかわらず、検査に通せと言われるだろうなと。かえって、そこで係員とのやりとりで時間をとられそう。
ただでさえ面倒くさくてイライラしている人がいて、つい感情がでてしまい「爆弾を仕込んだ」とか冗談を言えば、しゃれにならん結果に(笑)
私、個人的には(過去の経験から)手荷物検査をスムーズに抜けたいので、とにかくなんでも預けてしまい、手元にはスマホだけといった具合。スマホは搭乗に必要。
だから・・・まだ時間があるからジュースでも、と思ったらポケットにお金が無く、なんとかペイはスマホから消しちゃったから使えず、というオチも。
ノートPCは預け荷物にもできるが、破損の可能性がある。あまりおすすめではない。
専用のクッションカバーとか着替えなどでしっかり包んでおけば、気休めにはなるかなと。
海外に行った時に預けたが、盗まれる事も壊れる事もなく、でもたまたまかもしれない。
出張先には宅急便で送っておくという手がある。往復送料はかかるけど、ほかの資料とか機材も仕事で使う必要があればそうした方が良さそう。なるべく身軽に移動したい。
空港は知らないうちにルールが変わっていたりするので、最新情報を確認したほうが安心。
上着を脱いでトレイに載せろとか、ズボンのベルトもはずせとか、ポケットの小銭とか、ただでさえ面倒くさいのに。(恨むならテロリストを恨め)
たぶんバッテリーが問題になるのだろうから、取り外し可能な機種なら取り外して(家に置いて)持ち込んだらどうか?と思いつき。その場合、検査に通さなくて良いのかどうか。
外出先ではバッテリーで使えなくて不便と思うだろうけど、だいたいコンセントのある場所で使うので問題なし。バッテリー自体、劣化していてあまり役立たない。
たぶん、バッテリーの有無にかかわらず、検査に通せと言われるだろうなと。かえって、そこで係員とのやりとりで時間をとられそう。
ただでさえ面倒くさくてイライラしている人がいて、つい感情がでてしまい「爆弾を仕込んだ」とか冗談を言えば、しゃれにならん結果に(笑)
私、個人的には(過去の経験から)手荷物検査をスムーズに抜けたいので、とにかくなんでも預けてしまい、手元にはスマホだけといった具合。スマホは搭乗に必要。
だから・・・まだ時間があるからジュースでも、と思ったらポケットにお金が無く、なんとかペイはスマホから消しちゃったから使えず、というオチも。
ノートPCは預け荷物にもできるが、破損の可能性がある。あまりおすすめではない。
専用のクッションカバーとか着替えなどでしっかり包んでおけば、気休めにはなるかなと。
海外に行った時に預けたが、盗まれる事も壊れる事もなく、でもたまたまかもしれない。
出張先には宅急便で送っておくという手がある。往復送料はかかるけど、ほかの資料とか機材も仕事で使う必要があればそうした方が良さそう。なるべく身軽に移動したい。
空港は知らないうちにルールが変わっていたりするので、最新情報を確認したほうが安心。
乱数(MSXの)
2025.08.17
MSX BASICのソースを見れば乱数発生の仕組みがわかると思うけど、いや、昔調べたような気がする。覚えてない。
学生時代に同級生がテトリスを自作して、その時に使った乱数ルーチンはMSXのROMではなく、独自に組み込んだもの。Z80マシン語秘伝の書に載っていた乱数ルーチンをアレンジしたと思う。
当時でも議論したけど、じつは乱数ってのは意外と難しく、完全な乱数って作れないのです。
BASICに内蔵されている乱数は、算術乱数というやつだったと思う。計算で次の値を求めている。どうしても偏りがある。
ある数に別の数をかけたり足したりして、その下位桁を取るとか、そんなやり方です。だからパターンが決まってしまう。不確定な要素が含まれてないわけ。
MSX-BASICにはTIMEという変数(カウンタ)があって、1/60秒ごとにインクリメントされているから、これを利用する手がある。何か押した瞬間の値を取るとか。プログラムをRUNした時に値を取り込んで乱数の種にする。
別に、TIMEに依存しなくても入力を待っている間にカウンタを適当に回しておいて、HIT ANY KEYで押した時の値でも良い。
パチスロ機の場合は、ハードウェアカウンタを回しておき、レバーを叩いた瞬間の値をとるというやり方でした。
これは昔、体感機で同期できてしまっていたので、その後に対策がとられて、ずっと高速で回るようになっていると思われます。
完全な乱数が必要なら物理乱数になります。電気的なノイズを利用したものがよく使われると思うけど、それだって外乱を受けるようではダメです。
MSX用乱数発生カートリッジとか? 需要ないだろうな。
あと、円周率を小数点以下何万桁までテーブルに記憶しておいて、そこから値を拾ってきて使うと乱数代わりになると本で読んだ事があるけど、良いのかどうか知らない。
この場合でも、順番に読むんじゃなくて、さっきのキーを押したタイミングでどこを読むかというやり方を組み合わせたものだと良さそう。
乱数の再現性を求める場合は、あらかじめデータとして蓄えておかないといけないな。ゲーム等では再現性は求めない場合がほとんどだろうから、いかにばらつかせるか、偏らせないかということになる。
学生時代に同級生がテトリスを自作して、その時に使った乱数ルーチンはMSXのROMではなく、独自に組み込んだもの。Z80マシン語秘伝の書に載っていた乱数ルーチンをアレンジしたと思う。
当時でも議論したけど、じつは乱数ってのは意外と難しく、完全な乱数って作れないのです。
BASICに内蔵されている乱数は、算術乱数というやつだったと思う。計算で次の値を求めている。どうしても偏りがある。
ある数に別の数をかけたり足したりして、その下位桁を取るとか、そんなやり方です。だからパターンが決まってしまう。不確定な要素が含まれてないわけ。
MSX-BASICにはTIMEという変数(カウンタ)があって、1/60秒ごとにインクリメントされているから、これを利用する手がある。何か押した瞬間の値を取るとか。プログラムをRUNした時に値を取り込んで乱数の種にする。
別に、TIMEに依存しなくても入力を待っている間にカウンタを適当に回しておいて、HIT ANY KEYで押した時の値でも良い。
パチスロ機の場合は、ハードウェアカウンタを回しておき、レバーを叩いた瞬間の値をとるというやり方でした。
これは昔、体感機で同期できてしまっていたので、その後に対策がとられて、ずっと高速で回るようになっていると思われます。
完全な乱数が必要なら物理乱数になります。電気的なノイズを利用したものがよく使われると思うけど、それだって外乱を受けるようではダメです。
MSX用乱数発生カートリッジとか? 需要ないだろうな。
あと、円周率を小数点以下何万桁までテーブルに記憶しておいて、そこから値を拾ってきて使うと乱数代わりになると本で読んだ事があるけど、良いのかどうか知らない。
この場合でも、順番に読むんじゃなくて、さっきのキーを押したタイミングでどこを読むかというやり方を組み合わせたものだと良さそう。
乱数の再現性を求める場合は、あらかじめデータとして蓄えておかないといけないな。ゲーム等では再現性は求めない場合がほとんどだろうから、いかにばらつかせるか、偏らせないかということになる。
サイコロ、オモテとウラ
2025.08.17
プログラムが残っていました。中学生の頃の古いノートからです。
改良前のプログラムで、バカ正直にIF文で処理しています。



バカだなあ・・・と笑ってやってください。
一方で、動けばいいんだ、という考えの方もいらっしゃると思います。
オモテとウラ、というのはコインの裏表の確率をシミュレーションしています。
乱数RNDはゼロから指定の数値未満まででした。確か。
それにわざわざ+1して1~6にしたのでしょうけど、最初から1~6を0~5に置き換えて処理したって構わないわけです。
表記としてはわかりにくくなるかもしれませんが、計算をひとつ削って処理時間を少しでも節約できます。
冒頭のRND(-TIME)は乱数のタネでしょう。(初期値)TIME変数を元にしています。
それから、
いま何回目かを常時表示しているとその表示に時間をとられます。そこで、たとえば100回とか1,000回おきに表示したかった。
これも馬鹿正直にIF文で判定させています。そうじゃなくて、1,000で割り切れて余りが0かどうか見ればよかったのではないか。あるいは、別にカウンタを回してIFで判定するほうが早ければそっちを採用しても良かったのではないか。
当時そのことは気づいていて、実際にそのような判定を入れた記憶があります。
処理速度を上げるには、整数型変数を使うようにプログラム先頭にDEFINT A-Zとすれば改善が見込めたものと思います。
しかし32767までしか扱えないのと、相対度数の計算で小数点が出てきます。
とりあえず3万回までのシミュレーションに限定すればよいでしょう。
あとは、相対度数の計算に関係する変数だけ浮動小数点のままにすればよかったでしょう。
改良前のプログラムで、バカ正直にIF文で処理しています。



バカだなあ・・・と笑ってやってください。
一方で、動けばいいんだ、という考えの方もいらっしゃると思います。
オモテとウラ、というのはコインの裏表の確率をシミュレーションしています。
乱数RNDはゼロから指定の数値未満まででした。確か。
それにわざわざ+1して1~6にしたのでしょうけど、最初から1~6を0~5に置き換えて処理したって構わないわけです。
表記としてはわかりにくくなるかもしれませんが、計算をひとつ削って処理時間を少しでも節約できます。
冒頭のRND(-TIME)は乱数のタネでしょう。(初期値)TIME変数を元にしています。
それから、
いま何回目かを常時表示しているとその表示に時間をとられます。そこで、たとえば100回とか1,000回おきに表示したかった。
これも馬鹿正直にIF文で判定させています。そうじゃなくて、1,000で割り切れて余りが0かどうか見ればよかったのではないか。あるいは、別にカウンタを回してIFで判定するほうが早ければそっちを採用しても良かったのではないか。
当時そのことは気づいていて、実際にそのような判定を入れた記憶があります。
処理速度を上げるには、整数型変数を使うようにプログラム先頭にDEFINT A-Zとすれば改善が見込めたものと思います。
しかし32767までしか扱えないのと、相対度数の計算で小数点が出てきます。
とりあえず3万回までのシミュレーションに限定すればよいでしょう。
あとは、相対度数の計算に関係する変数だけ浮動小数点のままにすればよかったでしょう。
確率のシミュレーション
2025.08.17
中学生の頃に一時ハマったのは、確率のシミュレーション
サイコロを転がして、ある目が出る確率というもので、何の仕込みもない正常なサイコロならどの目でも同じはず。
相対度数って言ったっけ。0.1666・・・になる。(1/6)
サイコロを振る回数が増えるほど、1/6に近づいていく、ということをシミュレーションしました。
MSXの乱数で1~6を発生させ、1から6の目それぞれ何回出たか集計させる単純なプログラムです。
最初は、いまでも自分で賢くないと思うけど、
IF X=1 THEN K1=K1+1
IF X=2 THEN K2=K2+1
IF X=3 THEN K3=K3+1
IF X=4 THEN K4=K4+1
IF X=5 THEN K5=K5+1
IF X=6 THEN K6=K6+1
・・・と、バカ正直にIFを並べていました。
もしIFで処理するとしても、最後にGOTOで以後のIFをとばしてやれば少しは速くなったでしょう。K1=K1+1:GOTO 200 とか。
あとで気づいて、IF文を並べるんじゃなくて
K(X)=K(X)+1
とすれば1行で済むじゃないかと。
最初は、こんなものでした。
あとから、中間結果を表示(印刷)するようにしました。
たとえば1000回ごとの結果を見たり記録に残したいわけです。
メインループの処理にできるだけ影響しないように、単純に判定する必要がありました。
MODを使ったのか\を使ったのかもう忘れました。
カウントの変数を別に回して1000回で0に戻すついでに印刷じゃなくて、
上記のXの値を1000で割って、割り切れるかどうかで判断したと思います。どっちが速いかわからないけど、まあ、放置しておけばそのうち終わる。
いま動いているのか、いまは何回サイコロをふったか、という表示もする必要がありました。そうでないと進捗がわからない。
サイコロを転がして、ある目が出る確率というもので、何の仕込みもない正常なサイコロならどの目でも同じはず。
相対度数って言ったっけ。0.1666・・・になる。(1/6)
サイコロを振る回数が増えるほど、1/6に近づいていく、ということをシミュレーションしました。
MSXの乱数で1~6を発生させ、1から6の目それぞれ何回出たか集計させる単純なプログラムです。
最初は、いまでも自分で賢くないと思うけど、
IF X=1 THEN K1=K1+1
IF X=2 THEN K2=K2+1
IF X=3 THEN K3=K3+1
IF X=4 THEN K4=K4+1
IF X=5 THEN K5=K5+1
IF X=6 THEN K6=K6+1
・・・と、バカ正直にIFを並べていました。
もしIFで処理するとしても、最後にGOTOで以後のIFをとばしてやれば少しは速くなったでしょう。K1=K1+1:GOTO 200 とか。
あとで気づいて、IF文を並べるんじゃなくて
K(X)=K(X)+1
とすれば1行で済むじゃないかと。
最初は、こんなものでした。
あとから、中間結果を表示(印刷)するようにしました。
たとえば1000回ごとの結果を見たり記録に残したいわけです。
メインループの処理にできるだけ影響しないように、単純に判定する必要がありました。
MODを使ったのか\を使ったのかもう忘れました。
カウントの変数を別に回して1000回で0に戻すついでに印刷じゃなくて、
上記のXの値を1000で割って、割り切れるかどうかで判断したと思います。どっちが速いかわからないけど、まあ、放置しておけばそのうち終わる。
いま動いているのか、いまは何回サイコロをふったか、という表示もする必要がありました。そうでないと進捗がわからない。
プログラミング(ゲーム作りとか)
2025.08.17
とうとうゲームを作れるようにはならなくて、そっち方面の才能もなかったのかなと思う。
そもそもゲームは苦手であまり興味なかった。とくに反射神経がダメ。だから仕方なかったかも。
最後にチャレンジしたのは学生の頃で、テトリスを作るとか言って、なかなかできませんでした。
ゲームの作り方を知らなかったんですね。「作り方」の意味ですけど、敵機と自機を同時に動かさないといけないじゃないですか。そんな処理の作り方の基本から知らなかった。
入力を待ってそこで止まるような作り方では、ゲームにならんわけです。それを知るきっかけもなかったから、基本も知らなかった。
さっき、同時とか書いたけど厳密に同時ではなくて、見た目には同時に動いているように見えるという意味です。
作り方としては、入力をとにかく取り込んで(待たないで)、自機の動きを変化させて、もし範囲外だったら変化させないで、
敵機の動きを計算して動かして、もしミサイルが発射されたらその動きを計算して表示を動かして、
当たったかどうか判定させて、もし当たったらスコアを計算して表示を更新する。
このサイクルを繰り返すわけです。こうすると、見た目には全て同時に動いているように見えます。
処理に時間がかかってしまうと遅くなるのは当然として動きが鈍くなるから、できるだけ詰めたり、整数型の変数を使うのは勿論、マシン語で処理したり・・・
敵を動かすのも、毎回1サイクルごとに動いていたら動きが細かすぎてダメだから、何サイクルごとに一コマ動かすとか、あるいはレベルによってスピードを可変させたりとか、そんな工夫も入れるのでしょう。
最初の頃はベーマガ等に載っているリストを打ち込んで試すことを繰り返すだけで、中身までは理解できませんでした。遊んでも(私がドンくさくて)すぐ終わってしまうから、打ち込んで満足しただけで終わった。
むしろ、グラフィックに興味を持ち始めて、あのMZ-2000の広告にあるような帽子みたいな形とか不思議な模様を描くのが楽しかったものです。一時期、かなり夢中になりました。
なんだっけ、パソコン・グラフィックスといった本を買ってきて試していました。もともとPC98用だから解像度をMSXのSCREEN2に合わせて縮小しなければなりません。荒いけど、まあそれなりにできた。
どうして関数だけで花束のような模様が描けるのか、不思議で仕方ありませんでしたけど、それを深く追究していけば数学の天才になったかも。
円を少しずつ変形させて描き、コマ送りすると回っているように見える、というのも自分なりに考えてやってみました。
今のPCだったらリアルタイムに描くなんて普通ですけど、MSXだから1枚描くのも大変。ビデオに録画しておき、あとで早送り再生すれば、円がくるくる回っているように見えました。
きっかけは高校で見た、オシロスコープのリサージュ波形がくるくる回るのが格好よくて、なんとか再現してみたかったのでした。
2つの発振器を用意して、オシロのX-Y軸それぞれに接続して、適当にレベル調整します。周波数を変えていくと、円がくるくる回ったりゆっくりになったり、不思議な模様を描いたりします。見ているだけで飽きません。
雑誌の文通欄で知り合った人とプログラムを交換する、ってのもやりました。
自分なりに変なプログラムを作って相手に送り、相手からもカセットが送られてきたので試したら・・・まるで市販ソフトのようなクオリティ。
まさかそんなすごい物が送られてくるなんて。そのレベルの違いに、私はとっても恥ずかしくなりました。私のは、とても人に見せられるようなものではありませんでした。
当時はプログラムの交換手段が無く、モデムと電話回線を使う人だって周囲にはいませんでした。したがって雑誌から打ち込むか、付録のソノシートを苦労してLOADするか、サークルに入って交換するか。やっぱり会報に載っているリストを打ち込むのです。
そもそもゲームは苦手であまり興味なかった。とくに反射神経がダメ。だから仕方なかったかも。
最後にチャレンジしたのは学生の頃で、テトリスを作るとか言って、なかなかできませんでした。
ゲームの作り方を知らなかったんですね。「作り方」の意味ですけど、敵機と自機を同時に動かさないといけないじゃないですか。そんな処理の作り方の基本から知らなかった。
入力を待ってそこで止まるような作り方では、ゲームにならんわけです。それを知るきっかけもなかったから、基本も知らなかった。
さっき、同時とか書いたけど厳密に同時ではなくて、見た目には同時に動いているように見えるという意味です。
作り方としては、入力をとにかく取り込んで(待たないで)、自機の動きを変化させて、もし範囲外だったら変化させないで、
敵機の動きを計算して動かして、もしミサイルが発射されたらその動きを計算して表示を動かして、
当たったかどうか判定させて、もし当たったらスコアを計算して表示を更新する。
このサイクルを繰り返すわけです。こうすると、見た目には全て同時に動いているように見えます。
処理に時間がかかってしまうと遅くなるのは当然として動きが鈍くなるから、できるだけ詰めたり、整数型の変数を使うのは勿論、マシン語で処理したり・・・
敵を動かすのも、毎回1サイクルごとに動いていたら動きが細かすぎてダメだから、何サイクルごとに一コマ動かすとか、あるいはレベルによってスピードを可変させたりとか、そんな工夫も入れるのでしょう。
最初の頃はベーマガ等に載っているリストを打ち込んで試すことを繰り返すだけで、中身までは理解できませんでした。遊んでも(私がドンくさくて)すぐ終わってしまうから、打ち込んで満足しただけで終わった。
むしろ、グラフィックに興味を持ち始めて、あのMZ-2000の広告にあるような帽子みたいな形とか不思議な模様を描くのが楽しかったものです。一時期、かなり夢中になりました。
なんだっけ、パソコン・グラフィックスといった本を買ってきて試していました。もともとPC98用だから解像度をMSXのSCREEN2に合わせて縮小しなければなりません。荒いけど、まあそれなりにできた。
どうして関数だけで花束のような模様が描けるのか、不思議で仕方ありませんでしたけど、それを深く追究していけば数学の天才になったかも。
円を少しずつ変形させて描き、コマ送りすると回っているように見える、というのも自分なりに考えてやってみました。
今のPCだったらリアルタイムに描くなんて普通ですけど、MSXだから1枚描くのも大変。ビデオに録画しておき、あとで早送り再生すれば、円がくるくる回っているように見えました。
きっかけは高校で見た、オシロスコープのリサージュ波形がくるくる回るのが格好よくて、なんとか再現してみたかったのでした。
2つの発振器を用意して、オシロのX-Y軸それぞれに接続して、適当にレベル調整します。周波数を変えていくと、円がくるくる回ったりゆっくりになったり、不思議な模様を描いたりします。見ているだけで飽きません。
雑誌の文通欄で知り合った人とプログラムを交換する、ってのもやりました。
自分なりに変なプログラムを作って相手に送り、相手からもカセットが送られてきたので試したら・・・まるで市販ソフトのようなクオリティ。
まさかそんなすごい物が送られてくるなんて。そのレベルの違いに、私はとっても恥ずかしくなりました。私のは、とても人に見せられるようなものではありませんでした。
当時はプログラムの交換手段が無く、モデムと電話回線を使う人だって周囲にはいませんでした。したがって雑誌から打ち込むか、付録のソノシートを苦労してLOADするか、サークルに入って交換するか。やっぱり会報に載っているリストを打ち込むのです。