ファミコンって、Memory-maped I/Oって言って、指定したアドレスに書き込んだり読み出したりすると、ハードウェアに指示ができたり、状態を取得したりできたのね。
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%9E%E3%83%83%E3%83%97%E3%83%89I/O
だから、メモリを、アドレスを指定してアクセスするっていうのを覚えるのは早かった。ベーシックの段階でそれを使っていた。
ベーシックでできることに限界を感じた頃、マシン語に手を出すんだけど、これも少ないCPUのレジスタをやりくりしながら、メモリから読み出して、計算したり判定して、メモリに書き込むっていうロジックを延々と書くモノだった。
ゼロページを駆使して、そこにインデックスでアクセスする。
そういうのをやってから、C言語を覚えたので、MASMをさらに高性能にした、簡単にマシン語が書ける凄い言語という認識で、構造体とか配列とかポインタというのも、シンタックスシュガーだという認識だった。
いまは、こういう順序でC言語に触れるのは無理だと思うので、自分達の世代の優位点だな、と思っている。
DTP鯖管
さんがブースト
あるとき、弾のスピードをあげるために、ループ毎に足す値を大きくしたんだけど、今度は敵をすり抜けちゃうようになったw
さあ、どうやったら交差して場所が入れ替わる敵と弾が衝突した判定ができるんだ?
という感じで延々と続くんですが、こういうことを無我夢中で考えていた。
これを、よくわからないけど、面白そうって思うかどうか。
ファミリーベーシックでのプログラミングは、まず、ノートに実現したいことをスケッチして、変数の値がループ毎にどう移り変わるか、罫線を引いて表を作って数字を埋めて、頭の中で動かしてみて、最後にBASICで書いた。
これは、今でも通用するやり方だと思う。
さっきの斜めの動きなんかは、担任の先生に聞いたりしたけど、あまり有意なヒントは得られなかった。大人にも難しいことはあるのかと思った。それで、自力で頑張ることにした。
当時、何にも知識は無かったけど、最強のパラメータが一つあった。それは、時間を忘れて熱中できること。今は、もうあそこまでの熱意と集中力を発揮することは難しい。(短時間なら多少はできる)
パワーアップシューティングって格好良かったよね。シングルだった自機の弾が、ダブルになったり、3Wayになったり。
あと、連射できると嬉しい。
そういうのがやりたかったので、そういう動きをするプログラムを必死で書いた。
ファミコンのスプライト(キャラクターを描画する機能)は、画面端にいくと反対側から出てきちゃうので、どこまでいったら画面から消すか。
連射ってことは、画面上に自機の弾が沢山でてこなくちゃいけない。どうやって複数の弾のデータを管理すればいいのか。
画面に3発まで撃てるようにしたんんだけど、チュン!チュン!チュン!………………チュン!チュン!チュン!…………というリズムになる。画面上に貼り付くとすごい連射できるけど、下の方にいると、消えるまで続きが撃てないw
データ構造とアルゴリズム。予想外の動きと、開き直って仕様にしちゃう。バグったらそれはバグ技w
ファミリーベーシック、整数演算しかできないのね。
2Dシューティングゲームつくろうとして、敵が自機に向かって弾を撃ってくるようにしたいんだけど、その計算がわからない! どうやって斜めに移動させればいいの?
そこで、縦と横のより大きい方を1ずつ動かして、小さい方は、条件を満たしたら1動かすことにした。
弾の初期位置はEX=0, EY=0
自機はMX=100, MY=150
その差、XX=100, YY=150
EYは、ループ毎に1ずつ増やす。EXは、カウンターにXXを足し続けて、条件を満たすまで増やさない。
合計がYYを超えたらEXを1増やしてカウンターからYYを引く。
そうやって、斜めの軌跡を計算することにした。
これで、ちゃんと弾が斜めに飛んでくる。速度がおかしいんだけど、そこはご愛敬w
そうやって、問題を解決する仕組みを考えるということを学習した。アルゴリズムは楽しい。三角関数とかはまだ知らない。小学4年生の頃の話。
DTP鯖管
さんがブースト
DTP鯖管
さんがブースト
DTP鯖管
さんがブースト
Mastodonの作りとして、クライアントやリモートから取得した情報をチェックして変換したものを自前でキャッシュ・保存して、外部と切り離して扱うよね。
外部リンクから取得するプレビューとかもそう。閲覧するタイミングじゃなくて、取得したタイミングで生成する方式をとっている。
トゥートはもちろんそうで、そのコピーを保持する。
画像も、いちいちImageMagickでプロセスして、取得したままのものは使わない。
外部リンクは、アクセスするタイミングに気を遣っている。閲覧されたタイミングの情報を、事前に取得しておくことで伝わらないようにしている。(また、負荷対策としてインスタンス毎にランダムにタイミングをずらしている:1〜59秒)
インスタンスが情報をキャッシュする機能を持たず、あらゆる情報をリモートから取得する作り(普通のWebはこっち)と比較すると、インスタンスというものの特徴や意義が浮かび上がってくるのでは。
DTP鯖管
さんがブースト
noteを書きました。
『最近のマストドンいろいろ』
https://note.mu/gingadon/n/nc73a3bab5d6d
ざなくさんの記事を引用させていただきました。
(あと、ダダさん発のじゃがいも心地にも触れさせていただきました。)
空と緑が綺麗ですね。
さて、こちらのDTP鯖の画像とゴロツキ鯖の画像は、もとは同じものをアップロードしていますが、サイズと圧縮率が違っております。
ドン・ゴロツキではどのぐらい画像を小さくして容量を節約しているか、おわかりいただけるかと思います。 #dtp
QT: https://gorone.xyz/@noellabo/100850233800050826
DTP鯖管
さんがブースト
@Yohei_Zuho 個別の事情は別として、今、Mastodonの汎用インスタンスに人を呼ぶのってそもそも難しくない?
DTP鯖管
さんがブースト
With a month passed since 2.5.0, I wonder if people would prefer me to dump the current progress in 2.6.0?
Out of 18 features planned for 2.6.0, 9 are done and 3 are almost done. The rest could be postponed to 2.7.0, if there is demand...
Before you ask, the roadmap can be viewed here: https://github.com/tootsuite/mastodon/projects/6
DTP・デザイン・印刷のテーマサーバ DTP-Mstdn.jpやってます。
#Illustrator #スクリーン印刷 #インクジェット #カラーマネジメント #運営
#searchable_by_all_users