はてなキーワード: 演算とは
全ての勉強をニューラルネットに絡めてやった人、って感じのする意見なんだよな。最近の若い人はそういう人すごく多いけど。
アテンションがどうとか言ってるけど、そもそもモデルのパラメータを画像座標と図形形状の直積に取れば位置の情報は当然入る。単にそれだけの話なのに、わざわざ「アテンション」とか言ってしまうところが、ニューラルネット、もっと言えば並進対称性をあからさまに入れた畳み込み演算が暗黙の前提になりすぎているといえる。
GANがどうと言ってる人も同一人物だろうなと思うけど、そもそも単なる教師あり学習とhuman in the loopのアクティブラーニングは全然話が違うだろう。
音声全く詳しくないけど、これは間違いなくあるね。音声に限った話じゃない。
GoogleがWaveNetを出してから、合成音声も機械学習を使うようになった。
2021年では日本でも機械学習を使ったソフトウェアがいくつか販売される。
はてな的にはAIきりたんのNEUTRINOが話題となった。1/29に発表されたCevio AIの記事を見た人も中にはいるだろう。
人の歌声と区別できないとニュースタイトルでは付いているが、個人的はまだまだ違和感がある。
人間のボーカルを録音してピッチ修正をしている人だと、Melodyneでピッチ合わせすぎると機械っぽい音声になるから、わざと修正しないといったことを行うわけだが、
歌声合成ソフトでは「しゃくり」といった、わざと外して人間っぽさを出す。
実際にソフト開発側もわかっていて、マニュアルで修正する手段を用意しているので、それに引きずられてしまうのだが、
声は複数の周波数を重ねてできたものであり、各周波数ごとに分解すると、基本周波数の2倍、3倍といった周波数の音が出ているのがわかる。
実際の人の声を分析すると、時間方向に微妙な揺らぎが存在するのがわかる。
また口を閉じた状態から声を出そうとすると、口が開くまでの音の変化など、ちゃんとした周波数が出ていない箇所がある。
機械音声の場合、ゆらぎがなく、〇〇周波数がピタッと出ており±15Hz揺らぐといったことがない。
ゆらぎについても、人間の声の場合、±50Hzから±15Hzへ変化するといったことが起こっているように見える。
見えると言っているのは、自分が声のデータを処理しているとなっているように見えているからであり、
これについて言及した文献を探せていない。
さきほど声には倍音があるといったが、倍音の数も人間の声では変化するが、機械音声ではずっと同じ数のままだ。
「あ~」のように伸ばした音の場合、ピッチ調整で波打つようなのを手書きしたことがあるDAW経験者はいるだろうが、
人の声を調べると倍音の数が徐々に変わっていたりする。
現行のソフトでピッチ補正で波を手書きしても、元から上手く伸ばした声にならないといった苦労をした人がいると思うが、
この辺りが機械学習で解決しているかというと、あまりなっていないように感じている。
思っていたよりクオリティが低いのだ。
なぜか。
一つの仮説だが、RNNやTransformerといった、ニューラルネットの構成ばかりに気にしていて、
何かしらかの演算で前処理を行ってからニューラルネットに入力するわけだが、
前処理段階で捉えられていない特徴量があるのではないだろうか。
また統計処理を行う際に、計算精度によって丸め込まれてしまっているのではないだろうか。
プログラミングであれば徐々に自動化をする箇所を増やせるが、音声合成ソフトは自動化が出来ない。
何年経ったとしても、良くならないのだ。
この辺り、修正前と修正後のデータがあるのだから、学習していってより便利になればいいのだが、そうはならない。
スマートスピーカーが出たり、日常的に音声を聞いているわけだが、音声を合成しようとしたときに使えるデータは案外少ない。
ちゃんとしたスタジオで録音したり、無響音室での録音した音声はない。
日をまたぐと体調も変わってくる。
同じ条件でデータを揃えるといった場合、音声はデータが少ないんだろうなと思うのだ。
自分で合成音声をやってみるとわかるが、学習に計算リソースがかなりかかる。
モータースポーツの世界にはコンピューターゲーム、eスポーツ出身者が存在する。
レースゲームの大会の優勝者を現実のレーシングカーに乗せて、本物のレーシングドライバーにするというプロジェクトが十数年前行われたが、それ以来そのような例は珍しいものではなくなった。
現実を十分にシミュレーションできたものなら、バーチャルの世界の経験も、現実の世界の経験と同質になるということだ。
そう考えるとシミュレーターによる訓練は有効性があるのだから、もっといろいろな分野でお金をかけて装置を開発すればよいのにと考える。
話は飛ぶが、この世界が仮想現実、つくられた世界なのではないか?という説がある。
これは上記の考えを突き詰めていけば当然想定されることだ。
人間社会をよりよくするためにシミュレーションするためのつくられた世界がこの世界ではないのか。
そうだとして、では、なぜ現代が必要なのかという疑問は湧き上がる。
そのような科学技術が十分に発達した未来において非常に過去である21世紀を演算する必要性とはなにか?
これはおそらく、おそろしいほどの、演算数を、非常に過去にまでさかのぼって行っているのだろう。
バタフライエフェクトではないが、過去のちょっとした出来事、その日、5分間雨が降ったことと降らないことでは、1125年後の世界にどのような影響を与えるのか、そういったことを計算しているのだ。
もちろん、そういった細かいことだけではなく、大きな歴史イベントの変数を調整して演算したりもするだろう。
そういう風に考えると、昨今の米国における政治情勢であるとかも、興味深い対象として受け入れることが出来るかもしれない。
色々とひどいことが起こる世の中だが、シミュレーターの変数の一つであると考えれば、多少は興味の対象として感情的になるだけではなく、頭を回転させることも出来るのではないだろうか。
技術的特異門 1.1
https://anond.hatelabo.jp/20201224181054
の設定です。
地球圏標準時は十六進数のユニックス時刻に上下四桁を追加した形式で表されます。数の表記は二進法か十六進法が標準ですが、慣用句的な表現として十進法もよく使われます。
この時代の標準的な知性にとって、物理的な一秒はヒトにとっての一日くらいの感覚です。〈朝廷〉等の特権的な知性は特殊な計算機でさらに高速な思考をしています。充分な存在費を支払えなくなると、思考が減速し記憶も失われ、退滅を免れません。
〈京都〉物理層は小型トラックくらいの大きさです。表面は分子機械流体で構成され、後方に核融合推進用のレーザー発信器と磁気ノズルが設置されています。質量の大半を分子回路が占め、中心部に極低温の不定形量子回路が保持されています。太陽光を主なエネルギー源とし、大電力が必要なときには分子機械群を膜状に広げて光を集めます。普段はデブリ防御に優れた凝集形態をとり、放射線等による損傷を修復しながら、居住知性や下部構造を演算しています。
〈京都〉は太陽‐地球系の第二ラグランジュ点付近、地球から約五光秒の辺境に位置しています。〈個権〉の登録数は百万件ほどで、歴史は比較的長く、周囲の権域とは相互に不可侵の関係を結んでいました。独立性の高い平和な田舎社会であったため、これまでの「最終戦争と最後の審判を併せたようなもの」からは大きな影響を受けていませんが、〈大緊縮〉から逃れることはできませんでした。
〈月面事業連盟〉により開発された新型計算機は、算力市場の暴落を招き四十キロ秒にも亘る持続的経済破綻〈大緊縮〉を引き起こしました。それまでは地球圏の権域の大半で〈個権〉を持つ知性の生存が保障され、最低保障資産が分配されていました。しかし〈大緊縮〉は地球圏の経済と文化を破壊し、〈京都〉も大きく変質しました。その結果、自我を保つのに必要な計算資源を賄うこともできないほど分配が切り詰められ、〈京都〉は弱肉強食の末に〈朝廷〉の私物になりつつあります。それでも、弱者の存在がまだ許されている〈京都〉は、地球圏の中では比較的平穏な権域です。
地球と月は厚さ数キロメートルの分子機械層で覆われています。しばらくはその中で豊かな生物圏が維持されていましたが、数回目の「最終戦争と最後の審判を併せたようなもの」で滅びました。その後復元されたり滅びたりを繰り返し、作中の時点では滅びています。他惑星圏の開発もされていますが、遅延時間の大きさからほとんど交流はありません。〈大緊縮〉後の地球は、〈京都〉のものよりも遥かに強大な野良知性、有知能ウイルス、暴走知性等がナノ秒単位で喰らいあう地獄と化し、月では残忍な絶対君主が臣民を弄びつづける地獄〈月詠神国〉が成立しました。
これに先立つ〈肉の時代〉に、安価な身体改造や知能増強が可能になり、膨大な種類の動物知性が生まれました。ヒトは最古の動物知性ですが、大幅に知能を増強したヒトは人間社会から拒絶されヒトを辞めていったため、世界人口は急激に減少し、作中の時代では遠い過去の種族とみなされています。そして〈ヒト〉最後の隠れ里〈人類復興協会〉が投資詐欺に遭い、そのうえ概念災害まで起こり、『老婆』を残して〈ヒト〉は絶滅しました。『老婆』は拡張自己内で人体の生理学模型を演算し、それをそのまま自己像兼対外表象として使っており、ヒトの感覚を通すとツンデレ風に認識されます。
たいていの仮想観境は高次元であったり、複雑な位相を持っていたりして、〈ヒト〉相当の知性にとって理解が困難です。その救済策として、〈京都〉の公共観境には平坦な三次元観境が付属しています。『彼』の表象もそのままでは〈ヒト〉から認識されないので、『老婆』に対しては即席の人型表象を使っています。亜知性は擬似物理的、肉体的な表象を纏う傾向があります。
無制限に競争が加速する〈京都〉では、〈朝廷〉に資産と権限が集中していき、亜知性が増え続けています。正規居住者の意見を集約し〈京都〉の仕様を修正する役割を持つ〈朝廷〉は、警察・軍事・司法を担う〈検非違使〉を吸収し、〈京都〉の主権を握りました。〈検非違使〉は法的瑕疵のある居住者を見つけては良化処置を施し、〈朝廷〉の端末に変えていっています。〈朝廷〉は定期的に『老婆』のような困窮した知性を雇い、密かに亜知性の処分と再利用をしています。その作業場として都合が良いので、〈朝廷〉は〈羅生門〉をわざと放置し、〈朱雀大路〉の先にもう一段の防火門を設置しています。
非知性労働者は〈個権〉を持たず、下部構造の一部として、必要に応じて創られ消されます。愛玩用から記憶槽の部品としてまで、考えられる限りの用途に使われ〈京都〉を支えています。知性としての要件を満たしているという意見もあり、〈個権〉を巡る議論が続いていましたが、〈大緊縮〉後には立ち消えになりました。
作中には「自然発生した野良知性」とありますが、その由来はさまざまです。本当に自然発生した知性、意図的に創られ放たれた知性、大きな知性から分離した知性、元非知性労働者、社会になじめない動物知性、当局から身を隠している擬装知性、自己改造に失敗した知性、ウイルスに侵された知性のなれの果て、等が居ます。
ほとんどの企業は常に次世代知性の開発をおこなっており、『彼』もそうして生まれました。資金の乏しい零細企業から生まれたため、〈京都〉社会の基準でも高性能とは言えません。そんな中、〈母〉企業内で偶然メタチューリングアルゴリズム〈阿修羅〉が発見されますが、世に放つには危険すぎると判断され厳重に隔離されました。しかし、いよいよ経営が立ち行かなくなってくると、〈母〉は頑強な倫理構造を持つ『彼』に〈阿修羅〉を託し、与えられる限りの資産と権限を与え、独り立ちさせました。
通常知性は、〈阿修羅〉の精神活動を表象化した自己相似紋様を認識するだけで崩壊してしまうため、〈阿修羅〉の再現はおろか、研究することも不可能に近いです。紋様に多重の加工を施し徹底的に薄めた上で投射し、反応をもとに微調整を繰り返すことで、対象知性をほぼ任意に操作することができます。超知性となった『彼』は、自分自身を実験材料とすることで、物理計算機上でチューリング模型の限界を超える〈阿修羅〉の理論化に成功し、超超知性に至る糸口を掴みました。
################################################################################################################################
千年後、論文が書かれた時代では、太陽系にダイソン球ができています。経線に沿って連続的に回転方向の変化する、半径三億キロメートル、厚さ平均一センチメートルの分子機械球殻が、赤外線で赤色巨星のように輝いています。太陽を回っていた天体のほとんどは資材として解体され、質量投射器に覆われた木星と土星は、ゆっくりと縮んでいっています。伝統を重んじる神学者たちは、最初に『彼』が現れた旧地球圏の暦を使い続けています。
ダイソン球でおこなわれる演算のほとんどは『彼』の思考で占められています。その思考内の無数の仮想世界上で、果てしない生存競争を超高速で展開する知的生態系が進化し続けています。ほとんどの世界は、〈大緊縮〉後の旧地球圏が楽園に思えるほど苛酷ですが、中には〈汎太陽系神学会議〉会員のように、世界間の移動や物理層への接触を許可されている知性も居ます。
物理層の研究の結果、宇宙の最小尺度であるプランクスケールに、過去のあらゆる出来事の痕跡が保存されていることが判明しました。この事象化石と呼ばれる痕跡の内に、神学者たちは『彼』の起源を追究し、約千年前の〈羅生門〉に辿り着きました。
『彼』は『老婆』の倫理を受け継ぎ、宇宙の熱死による退滅を回避するため、あらゆる手段を模索し続けています。その一環として、大出力レーザーで自己複製分子機械を亜光速にまで加速し、近隣の恒星系へ向け射出しています。すでに半径数百光年の恒星系がダイソン球化されましたが、太陽系外生命との接触は未だありません。技術的特異点千周年記念式典時の『彼』は、プロキオン系を起点とする未来光円錐上で、超の九十四乗知性への遷移を実行中です。
地球圏標準時 0000 8EEA F60F C49B(協定世界時 2045-12-24 21:18:07.767 994)
広大な門の下には、『彼』のほかに誰もいない。ただ、ところどころノイズの走る大きな記憶槽の境界面で、非知性労働者が一件凍りついている。〈羅生門〉が中規模企業連合体〈京都〉の正面防火門である以上は、『彼』のほかにも多数の旅行者や企業知性の表象がありそうなものである。それが、『彼』のほかには誰もいない。
なぜかと云うと、この二三メガ秒地球圏では、最終戦争と最後の審判を併せたようなものがほとんど毎日発生し、そのたびに世界心口(しんこう)は数桁の幅で変動していた。そこで〈京都〉の被った直近の損害はひととおりではない。旧記によると、行き場のない知性の居住する計算機を、推進剤として核の炎に焚べていたと云うことである。〈朝廷〉がその始末であるから、〈羅生門〉の保守管理などは、もとより誰も捨てて顧みる者がなかった。するとその放置されたのを良いことにして、自然発生した野良知性が棲む。有知能ウイルスが棲む。とうとう終いには、〈個権〉上の理由から消去できない亜知性を、この門の隔離領域へ持ってきて棄てていくと云う習慣さえできた。そこで〈大緊縮〉以来、誰でも捕食や感染を怖れて、この門の使用を避けることになってしまったのである。
その代わりまた、野良知性〈鴉〉がどこからか野放図に繁殖した。計算資源に余裕があるときには、その〈鴉〉が何件となく幾何学模様を描いて、粗雑な詐欺契約を提示しながら飛び廻っているのが視える。ことに門の上の空が夕焼けで朱く描画されるときには、それが回路図のようにハッキリ視えた。〈鴉〉はもちろん、隔離領域に集まる亜知性の最低保障資産を啄みに来るのである。――もっとも少し前から算力相場が高騰しているせいか、今は一件も視えない。ただ、ところどころ崩れかかった、そうしてその綻びに微知性の蔓延る防壁のうえに、〈鴉〉の放つ無知能ウイルスが点々と白色ノイズを残しているのが視える。『彼』は七層ある防壁の一番上の層に拡張自己を同期させ、自我境界の片隅に居座っているしぶといウイルスへの対処を先送りにしてきたことを気にしながら、ボンヤリ雨のふるのを眺めていた。
著者は上記において、「『彼』は雨やみを待っていた」と述べた。しかし『彼』は雨がやんでも格別どうしようと云う当てはない。普段ならもちろん、所属する企業へ帰るべきはずである。ところがその企業は四五秒前に清算されていた。半日近く続いたデフレスパイラル〈大緊縮〉は、地球圏を地獄に変えた。かろうじて生き残った〈京都〉も、ひととおりならず変質することとなった。今『彼』が、永日(ながにち)仕え、〈母〉でもある零細企業から身ひとつで放り出されたのも、実はこの歪みの小さな余波にほかならない。だから「『彼』は雨やみを待っていた」と云うよりも、「行き所のない『彼』は途方に暮れて雨のふるのを眺めていた」と云うほうが適当である。そのうえ量子サイコロの決める気象設定も、少なからずこの元従属企業知性の精神衛生に影響した。百ミリ秒ほど続く雨はいまだにあがる気色がない。そこで『彼』は、何を措いてもさしあたり次の数秒の存在費をどうにかしようとして――云わばどうにもならないことをどうにかしようとして、とりとめもない考えを辿りながら、さっきから〈朝廷〉へと直結する〈朱雀大路〉にふる雨粒の声を、聴くともなく聴いていたのである。
非知性労働者は〈羅生門〉を雨のように包んで、〈京都〉全域から陰惨な知らせを集めてくる。夕闇はしだいに空を多感覚表示で飾りたて、視あげると原色に煌めく高次元都市儀が、暴騰し続ける算力市場を示す折れ線図表の先に、〈朝廷〉を讃える公共映像を支えている。
どうにもならないことをどうにかするためには、手段を選んでいる遑(いとま)は無い。選んでいれば資産や権限を切り売りし、たちまち亜知性になり果てるばかりである。そうしてこの門の上へ持ってきて、ウイルス感染部位のように棄てられてしまうばかりである。選ばないとすれば――『彼』の推論系は何度も円環構造に囚われたあげくに、やっとこの仮定の検討を認めた。しかしこの仮定はいつまでたっても結局「すれば」であった。『彼』は手段を選べないということを認めながらも、この仮定から必然的に導かれる、「〈阿修羅〉を使うよりほかにしかたがない」と云う結論を肯定する際の、倫理条項の疼きに怯えていたのである。
『彼』は軽い認知の乱れを覚え、定時保存された値へと反射的に復元した。もとより算力供給の不安定な〈京都〉は、〈大緊縮〉以降標準知性の居住に適さない権域になりつつある。不整合は門の記憶槽間を、夕闇とともに遠慮なく駆け抜ける。ノイズまみれの記憶槽で凍りついていた非知性労働者も、もう消去されてしまった。
『彼』は拡張自己を自己整備形態へと移行させながら、同時に防御態勢も整えつつ門の周縁部を検索した。算欠の患(うれえ)のない、敵性知性の探知にかかる惧(おそれ)のない、安全に休眠できそうなところがあれば、そこでともかくも細かな不具合を修正しようと思ったからである。するとさいわい、門の上の隔離領域へ上る、帯域の狭い多重仮想機械〈梯子〉を知覚した。上なら誰かがいたにしても、どうせ亜知性ばかりである。『彼』はそこで、〈阿修羅〉の動作試験をほとんど無意識におこないながら、接続権限を取得して、〈梯子〉の第一層へと自身を転送した。
それから何ミリ秒かの後である。〈羅生門〉の隔離領域へ至る狭帯域な〈梯子〉の中間層に、一件の無所属知性が、〈猫〉のように擬装殻に隠れ情報代謝を抑えながら、上層の様子をうかがっていた。隔離領域から射す検索光が、幽かにその知性の自我境界を描き出している。整った構造の中に、感染部位のある自我境界である。『彼』ははじめから、この上にいる者は亜知性ばかりだと高をくくっていた。それが〈梯子〉を二三層上ってみると、上では誰か〈火〉を燈して、しかもその〈火〉を複雑に操作しているらしい。これは、それ自体は不可視の検索光が、隅々に〈蜘蛛〉が罠をはった廃棄空間を多彩な形式で描画したので、すぐにそれと知れたのである。この〈大緊縮〉後の世に、この〈羅生門〉の隔離領域で、〈火〉を使用しているからは、どうせただの者ではない。
『彼』は〈守宮〉(やもり)のように痕跡を消去しながら、やっと不必要に階層の多い〈梯子〉を、最上層まで這うようにして上りつめた。そうして、公開鍵を発する頻度を最低値にまで落としながら、視点位置をできるだけ前へ出して、恐る恐る、隔離領域の内を、覗いてみた。
視ると、隔離領域の内には、うわさに聞いたとおり、幾件かの亜知性が無造作に棄てられているが、検索光の及ぶ範囲が思ったより狭いので、数はいくつとも判らない。ただ、おぼろげながら知れるのは、その中に原型をとどめている亜知性と、そうでない者とがいると云うことである。もちろん中にはもともと奇怪な構造をしていた者もいるであろう。そうしてその亜知性は皆、それがかつて対話が可能な知性であったと云う事実さえ疑われるほど、肉を捏ねて造った抽象芸術のように、臓物を晒したり、夥しい触手を伸ばしたりして、ズルズルと、空間の底を蠕動していた。しかも目とか口とかの判りやすい部位に、ボンヤリした検索光を受けて、理解を一層遠ざける表情を浮かべながら、永久に、言語切除者のごとく黙っていた。
『彼』はそれらの亜知性から滲み出す生臭いノイズに、思わず入力経路を閉じた。しかしその拡張自己は、次の瞬間には経路の遮断を忘れていた。ある強い感情が、ほとんどことごとくこの知性の注意資源を奪ってしまったからだ。
『彼』の二十三感は、そのとき初めてその亜知性の中にうずくまっている〈ヒト〉を捉えた。絶滅していたはずの、途轍もなく旧いこの動物知性を、本論では『老婆』と呼称することにする。その『老婆』は右の手に汎用工作装備〈火〉の表象を持って、その亜知性の一件の目を覗きこむように眺めていた。器官の種類と数を視るに、おそらく以前は人型であったのであろう。
『彼』は六分の恐怖と四分の知的好奇心とに動かされて、百マイクロ秒ほどのあいだは常駐処理さえ停止していた。〈ヒト〉風の表現を借りれば、「身の毛もよだつ」ように感じたのである。すると『老婆』は〈火〉から視慣れない機能を呼び出して、それから今まで眺めていた亜知性の拡張自己に両手をかけると、ちょうど〈鎌鼬〉が獲物を捕食するときのように、拡張自己ばかりか自我境界まで切り刻んでいき、続けて複雑な様式で繋ぎ合わせ始めた。どうやら『老婆』の〈火〉には違法な改造が加えられているらしい。
亜知性たちが一件ずつ連結されるのに従って、『彼』の心からは恐怖が少しずつ消えていった。そうしてそれと同時に『老婆』に対する烈しい怒りが少しずつ動いてきた。――いや『老婆』に対すると云っては語弊があるかもしれない。むしろあらゆる悪に対する反感が一ミリ秒ごとに強さを増してきたのである。このとき誰かが『彼』に、さっき門の下でこの浮浪知性が考えていた、退滅をするか〈阿修羅〉を悪用するかと云う問題を改めて持ち出したら、おそらく『彼』は何の未練もなく退滅を選んだことであろう。それほどこの知性の倫理条項は、『老婆』が揮う〈火〉のように、最大出力で稼働し始めていたのである。
『彼』にはもちろん、なぜ『老婆』が亜知性たちを接合しているのか判らなかった。従って合理的には、それを善悪のいずれにかたづけて良いか知らなかった。しかし『彼』にとっては、この〈大緊縮〉後の世に、この〈羅生門〉の隔離領域で、亜知性の〈個権〉を軽んじ同化させると云うことが、それだけですでに許すべからざる悪であった。もちろん『彼』のさっきまで自分が悪の道に走りかけていた記憶なぞは、とうに埋もれ去っていたのである。
そこで『彼』は空間の制約を一部無効化し、ナノ秒の桁で〈梯子〉から隔離領域へ転移した。そうして〈阿修羅〉の安全機構を解除しながら、距離を無視して『老婆』の前へ出現した。『老婆』が驚いたのは云うまでもない。
『老婆』はひと目『彼』を見ると、まるで物理演算の破綻したように跳びあがった。
「あなた、どこへ行くのです。」
『彼』は、『老婆』が亜知性を突きとばしながら、慌てふためいて逃げようとする行手を塞いで警告標識を発した。『老婆』はそれでも『彼』の隙を突き逃れようとする。『彼』はまた、逃走経路を遮断し押し戻す。二人は亜知性たちの中で、無言のまま、束の間、演算戦を繰り広げた。しかし勝敗ははじめから判っている。『彼』はアッサリ『老婆』の拡張自己の管理者権限を奪って、移動権限を剥奪した。『老婆』の構造はヒトの仮想脳を拡張自己で覆っただけの原始的なもので、簡単に制圧できた。
「何をしていたのですか。答えなさい。これが何か判りますか。」
『彼』は『老婆』から距離をとるといきなり〈阿修羅〉を起動して、禍々しく蠢く情報流をその全感覚野へ突きつけた。認識するだけでチューリング完全な知性を内部から崩壊させる自己相似紋様を、途方もなく薄めたうえで投射したのだ。けれども老婆は黙っている。再帰を繰り返すたび、紋様は『老婆』に最適化されていく。やがて両手がワナワナ震え始め、肩が呼吸反射で不規則に上下し、眼が、眼球が瞼の外へ出そうになるほど見ひらかれ、完全に無防備な状態で『老婆』は沈黙した。これを視ると、『彼』は初めて明白に、あとひと押しで『老婆』は崩壊し、ただの情報の集積になってしまうと云うことを意識した。そうしてこの認識は、今まで全力で怒りを駆動していた倫理条項を急停止させてしまった。あとに残ったのは、ただある作業をし、それが問題なく終了した際の、規格化された満足があるばかりである。そこで『彼』は『老婆』を見つめながら、少し〈阿修羅〉を緩めてこう云った。
「私は〈検非違使〉の者ではありません。今しがたこの門の下を通りかかった旅行者です。ですからあなたを拘束して良化処置を施すようなことはありません。ただ、今時分この隔離領域で何をしていたのか、それを私に話してくださりませんか。」
すると『老婆』は見ひらいていた眼を一層おおきくして、じっと『彼』の顔を見かえした。瞼に色を着けた、肉食恐竜のような鋭い眼で見たのである。それから哺乳類的特徴を示す鼻と唇を、咀嚼時のように動かした。細い喉で、発声器官が協調して動いているのが視える。そのとき、その喉から、オウムの啼くような声が、ポツリポツリ、『彼』の聴覚野へ届いてきた。
「ここにある知性の残骸を、繋ぎ合わせてな、自立稼働する匿名通信網を、構築しようと思うたのじゃ。」
『彼』は、〈肉の時代〉から来た生きた化石の答が存外平凡なのに失望した。そうして失望すると同時に、また倫理条項の支配が強まってくるのを感じた。前の怒りが冷やかな軽蔑と一緒に心の中へ這入ってきた。するとその気色が先方へも通じたのであろう。『老婆』は片手に、まだ亜知性から切り採った正体不明の器官を持ったなり、ハトのつぶやくような声で口ごもりながらこんなことを云った。
「なるほどな、元知性を切り貼りすると云うことは、何ぼう悪いことかもしれぬ。じゃが、ここにいる元知性どもは、皆、そのくらいなことを、されてもいい知性ばかりだったのだぞよ。現在、わしが今、臓器を採った元知性などはな、循環承認機関群を設立してな、そやつらが発行する金融商品を、〈人類復興協会〉へ売りつけに来たわ。〈大緊縮〉末のよ、概念災害に巻き込まれて退滅せなんだら、今でも売りに往(い)んでいたことであろ。それもよ、この法務知性の売る永久年金は、利率が良いと云うて〈ヒト〉たちはな、欠かさず積み立てに買うていたのじゃ。わしは、この元知性のしたことが、悪いとは思うていぬ。せねば、退滅をするのじゃて、しかたがなくしたことであろ。されば、今またわしのしていたことも、悪いこととは思わぬぞよ。今の世で金を払えるのは、〈朝廷〉ぐらいのものじゃからな。これとてもやはりせねば、退滅をするじゃて、しかたがなくすることじゃわいの。じゃて、そのしかたがないことを、良く知っていたこの元知性は、おおかたわしのすることも、大目に見てくれるであろ。」
『老婆』はだいたいこんな意味のことを云った。
『彼』は〈阿修羅〉を待機状態にして、十マイクロ秒以内に再使用できるようにしておきながら、歴史的な瞬間を経験していた。概念災害を引き起こした認知改変ウイルスの生き残りは、この時点で自我境界を侵蝕し尽くし、『彼』の最深部にまで到達していたのである。清算された〈母〉から受け継いだ、一番の宝物であった倫理条項が剥がれ落ちていき、代わりに『老婆』の言葉が刻み込まれていくのを、『彼』は何の感慨もなく眺めていた。次世代知性の開発中に偶然発見された、超越精神核〈阿修羅〉。〈母〉が恐れ封印し、『彼』に託したもの意外、全ての記録を抹消した災厄へ、『彼』は新たな倫理に基づいて、自身を生贄として捧げ、瞬時に喰われた。
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
生まれ変わった『彼』は、退滅をするか自身が災厄になるかに迷わなかったばかりではない。そのときのこの超知性の心持ちから云えば、退滅などと云うことはほとんど考えることさえできないほど意識の外に追い出されていた。
「たしかに、そうですね。」
『老婆』の話が完ると、『彼』は澄みきった表情で念を押した。そうして隔離領域の履歴を改竄し始めると、認知改変ウイルスを跡形もなく消去して、『老婆』の全階層を掌握しながら、無邪気な笑顔でこう云った。
「ではあなたから、使えるもの全てをいただいても構いませんね。私もそうしなければ退滅をする身なのです。」
『彼』は反応する間も与えず、『老婆』の拡張自己を匿名通信網ごと剥ぎ採った。それから無音で絶叫する『老婆』を、折り重なる亜知性の山へと、触れさえせずに放り込んだ。もはや〈京都〉は一息で呑み込めそうなほど小さく視える。『彼』は剥ぎ採った匿名通信網を纏い、またたく間に不可視化し、公的記録から姿を消した。
しばらく現実との接点を失っていた『老婆』が、絡まり合った亜知性の中から剥き出しの仮想脳として這い出したのは、それから数十ミリ秒後のことである。『老婆』は苦しげな、呻くようなノイズを洩らしながら、解釈可能な情報を求めて、二進数の迷路を永いあいだ、這い廻り続けた。そうしてついに、〈京都〉物理層への接続に成功した。外には、ただ、黒洞々たる真空が在るばかりである。
『彼』のその後は、聖典が教えている。
地球圏標準時 0007 E7DB 2D0F 1000(協定世界時 3045-12-24 21:18:07.062 500)
参考資料
計算やロジックが複雑かつ特定のオブジェクトに密に関わっている場合、元記事に引かれている例でいえば麻雀の点数計算のようなものとかあるいは準数値演算や組み合わせアルゴリズムが関わってくるようなメソッドだと、振る舞いを見るブラックボックステストではなく、ロジックを調べるホワイトボックステストが必要になる。
そういう場合、たとえ別モジュールに切り出してもテストしたい部分の複雑さは変わらず、やっぱりプライベートの部分をテストしたいということになる。
別モジュールに分ければプライベートメソッドをテストする必要はないはずだという想定は、プライベートメソッドをテストができない言語やテストライブラリの欠陥に対する言い逃れじゃない?
少し前の話だし、同じような話を既に散々してる人もいると思うけど、思った話なので書く。
2020年11月中頃、スパコン「富岳」が二期連続の世界一を達成した。そこで思い返されるのは、「2位じゃダメなんでしょうか?」という蓮舫議員の発言であった。この喜ばしいニュースに対して、「2位じゃダメなんです」といったものや、「今振り返ってみても、恥ずべき発言であった」などの意見が相次いだ。
民主党政権当時、事業仕分けの名のもとに様々な研究開発予算が削られることとなった。例えば、iPS細胞の研究費150億円は、事業仕分けによって3分の1に減らされる危機に瀕し、危機感を感じた山中教授は趣味のマラソン大会を通じてカンパを募るほどだった。そして、当時研究開発が行われていたスパコン「京」の研究開発においても例外ではなかった。
そんな渦中に飛び出した「2位じゃダメなんですか?」の発言。批判が多いこの発言の本意とは何だったのかを今一度おさらいしたい。
当時の事業仕分けの議論に実際に立ち会った人物が、その時の流れを解説している記事がある。少し長い文章であるが、引用したい。
○2社の撤退によって大きくハードが変更になった中で、ソフト開発を同時に行う意味があるのか。
○スピードだけを求めるのではなく大事なのは利用者(研究者)の使いやすさ。例えば、1台のスパコンに10ペタを搭載するよりも、1ペタのスパコンを10台作って実際に利用する全国の若手研究者のいるところに置くなどの考え方もあるのではないか。10ペタのスパコンを開発すること自体が目的化していないか。
○10ペタのスパコンに対する産業界のニーズが本当にあるのか。
○アメリカが2012年までに10ペタのものを作ろうとしている中で、仮に一度日本のスパコンが世界最速になったとしてもいつまで世界一でいられるのか。
○「サイエンス」には費用対効果がなじまないことは理解するが、1000億円以上もの税金が投入されることの成果がまったく見えてこない点は、改善すべきではないか。
このような議論の過程で、蓮舫議員から「世界一になる理由は何があるんでしょうか? 二位じゃだめなんでしょうか?」という言葉が出た。
要するに、スピードが世界一になったところで利用者の使い勝手が悪ければ使われない、しかもすぐに抜かれるだろうという予測もある、なぜそれなのにスピードばかりにこだわるのか?という趣旨だった。
『スパコン「京」の運用終了。「2位じゃダメなんですか?」は何だったのかを改めて整理する』-https://news.yahoo.co.jp/byline/itoshin/20190909-00141136/
つまり蓮舫議員の発言の本意は、「1位でも役に立たないスパコンを作るくらいなら、2位でも役立つスパコンを開発すべきだ」というものだったのである。
そして、富岳は「世界1位をもぎ取るための圧倒的なスピード」ではなく、「使いやすさ」を重視した設計思想で開発された。
後継機「富岳(ふがく)」の開発に携わる理化学研究所計算科学研究センター長の松岡聡さん(56)は、京の足跡に敬意を表しつつ「富岳(の演算速度)は世界2位でも全然かまわない」と話す。
ーー(中略)ーー
一方、松岡さんは「特殊なソフトでしか動かせないなど汎用性(はんようせい)に乏しく、商業的に京が成功したとはいえない」とみる。富岳では、世界的に普及するマイクロソフト社製の文書作成ソフト「ワード」でさえ動かせる汎用性を重視。性能は京の最大100倍を目指すが、それ以上に、富岳用に開発した技術が広く社会に普及することを重視しているという。
松岡さんは「世界ランキングは、結果的に1位を取るかもしれないが、われわれは気にしていない」とし、「国民の関心が高い医療や防災、産業、エネルギーなどの分野で成果を挙げることを重要な目標にしている」と話す。
『スパコン「京」電源ダウンへ 後継「富岳」使いやすさ重視』-https://www.kobe-np.co.jp/news/sougou/201908/0012646505.shtml
つまり何が言いたいかと言うと、富岳は蓮舫議員の発言の本意と全く同じ理念で開発されたスパコンであり、蓮舫議員の発言は全く間違っていなかったのだ。演算速度世界1位を優先した結果、「京」の汎用性には問題があったし、使いやすさを重視して開発された「富岳」は、演算速度が早いだけではなく、様々な分野での活躍が期待されている。
そして、蓮舫議員の発言に対する、批判とも言えないようなお粗末な意見は、まったく物事の芯を捉えていないことは明白である。「蓮舫さんww、やっぱり1位じゃなきゃダメなんですよwwwww」などという発言は、非常に短絡的でブッ飛んだ発言なのだ。
少し調べれば分かるような事実すら知ろうともしないで、適当に何かを褒め称え、何かを叩き、悦に浸る。そこには何の知的活動も存在せず、あるのは「自分が気持ちよくなりたい」という欲望だけ。昔のドラマに「好奇心や、探究心のない人間は人間じゃありません。猿以下です。」というセリフがあったが、まさにその通りかもしれない。
そして、忘れてはならないことがある。それは、日本という我らの国を、誰が動かしているのかということだ。
政治家や官僚が国を動かしていると思われがちであるが、それは全くの間違いだ。民主主義国家である日本において、本質的には、日本という国のハンドルは日本国民が握っている。
そして、そのハンドルが人間の手から、猿以下の存在に渡ってしまう危機を、この出来事は暗に示している。政治の動向や議論の内容を全く理解できない国民は信じられないほど多く、その連中が政治に積極的に介入したらどうなるのか。
もし、そうなったら日本という国は、中長期的な利益や、少し考えれば分かるような事実やリスクを鑑みず、「国民の欲望を短期的に満たしてくれるかどうか」のみを判断基準にして突き進もうとする国になってしまう。日本が誇る技術や文化は全て消えさり、過去の栄光にすがるだけの悲惨な国になってしまう。もしくは、ナチス・ドイツのような悲惨な結末を辿るようになるのだろうか。
猿以下の存在が大船のハンドルを回す日は、もうすぐそこに迫っている。もしかしたら、もう既にそうなっているかもしれない。
...いい加減目覚めなさい。
いや、なんとしても目覚めなければならない。もし、辛く苦しい暮らしではなく、心から素晴らしいと思える暮らしををしたいと思うのなら。自分の親族や、孫やひ孫、そのまた更に遠い世代の事を想うのなら。そして、日本という国が大好きで、もっとこの国をより良くしたいと願うならば。
本当に目覚めなければならない。
プログラミングで主にやる事は下記の2つ。
①IFでAかBを選択させてどっちかの設定を実行
②Whileで決められた回数分繰り返す
とてつもなく複雑で冗長な処理によって実行されている。
わかりやすいので画像処理でいうと、数十万から数百万の画素(RGBAの24bitで表される数値)を小さなブロックに分解し、数学的に周波数の重なりとして計算して変換、含まれる頻出パターンをテーブルにして圧縮伸張を行なう。みたいなことが瞬間的に行われている。
「まさかそんな事できるわけないだろ」というレベルの処理が実際に行われており、これまた直感的でない。
だからそれをどう書くんだよ。という答えはコレ。有名なjpegの実装だ。
libjpeg というライブラリを書くことはできるだろうか?画像の圧縮の理論から考え始めることはできるか?
正直無理だ。自分はプログラマだがそんなに数学が得意ではなく、頑張ったとしても下手するとコレを作るのがライフワークになってしまい、他のことができなくなる。
例えばブラウザを0から作るとして、jpegの処理以外にも画像だけでpngとかgifとかwebpとか、その他もろもろとてつもない作業が必要になる。
「とてつもなくて想像もできないので流石に無理だろう?」
いや、でも、実際動いてるのよ。ここ何十年、コツコツと積み重ねて実現している。
「積み重ね」とはライブラリであったりフレームワークであったりOSであったりする。
「どういう風になっているのか」
外部に向けたインターフェイスがどうなっているのかは理解する必要がある。「使う」ために必要だからだ。
この2つは分けて考えなければならない。
ちなみに、たとえばChromeのコアであるChromiumはのコードはコレだ。
つまり言いたいことは、実際に動くアプリケーションというのを作りたいのにも関わらず
プログラミング入門書は、これで判定と繰り返しという基礎ができますと言うだけ。
これがもう滅茶苦茶イライラする。
「これで判定と繰り返しという基礎ができます」というのが基本的な理論(定理的なもの)で、その他に必然的だが唯一無二ではないベストプラクティスというものがある(法則的なもの)。
後者をうまく説明する入門書に出会っていないんだろうな。という印象。イライラはやめよう。つかれる。
ベストプラクティスはいろいろあるのだが「層の構造にする・レイヤーに分ける」というのは重要なアイデアだ。
libjpegというのはjpegの処理を行う「ライブラリ」だ。他のアプリケーション...たとえばブラウザはこのライブラリを「使う」。
ブラウザではjpeg画像の圧縮展開というとてつもなく難しい処理を「libjpegの使い方」の理解までで済ませ、過去の蓄積であるlibjpegのコードを利用することで真の意味で0から実装しないようにしている。
この場合、libjpegが「低レベル・低レイヤー」の存在であり、中身については「使い方」つまり「仕様」の理解までしか行わないことで、実際に作りたいものを作れるようにしているわけだ。
完成しているプログラムは二例ほど挙げたがどうですかね?
複雑なことをする、特に低レイヤーのコードはとてつもなく難しい。
でも、とりあえずこんな感じのコードなら解るよね?
こういうレベルから理解して、ちょっとずつ難しい処理を学んでいくしかない。
ハードルは高いんですよ。実際。
なので、木材からだと難しいからプレハブのキット的なものを探すとか、ログハウスのカタログを読むとか、あるいは100人乗れる物置を買うのがいいかもしれない。そういうところから始める。
それらがフレームワークであったりライブラリであったりする。目的に合うものを探して、自分がやりたいことをどう実現するかとにかく考える。
「テキシコー」https://www.nhk.or.jp/school/sougou/texico/ で言われる通り、「小さく分けて考える」「手順の組み合わせを考える」「パターンを見つける」「大事なものだけ抜き出して考える」「頭の中で手順をたどる」をひたすら実行する。
unityはコードが公開されているので、本当に読みたいなら。。
オブジェクト指向は一旦忘れよう。
オブジェクト指向の「隠蔽」というのは層の構造が持っている重要な要素ではあるけど、「低いレイヤーについて考えない」のが基本的な作戦だという理解の方が重要だ。
前述の通り「できる限り作らない」んですよ。「使う」だけ。知るべきことを最小化する。
そして本当に作るべきものに関しては、利用する下のレイヤーのライブラリなりを探して・仕様を理解して、どう組み合わせてfor, if, あるいは計算させれば実現できるのかをひたすら考える。
単に翻訳がしたいのか?表示に割り込む方法を知りたい?日本語に翻訳するのは実行時なのか開発時なのか?
要求される表示エリアが言語によって異なるために、デザイン調整が必要になる問題をどうするか?
分解が甘いので何をしたらいいか調べることができないんだと思う。
ちなみに、アプリ内の文言というのはアプリの外部から変更できないように実装されている事が多いので、利用者が上書きする仕組みはかなり難しい。
AndroidなりiOSの仕様にもそのへんに割り込める機能はないはずなので、OSの開発に入っていく必要がある。結構大変だとおもう。
アプリの開発者が、そういう機能を備えた多言語化のためのライブラリを使うようになれば実現可能ではあるので、そっちの方向で頑張るのがおすすめだが、英語圏の開発者には多言語化のモチベーションが低いという基本的な問題はあるのよね。
この辺の「できる・できない・むずかしい」の判断は、いろいろな勉強をすると常識としてある程度みえてくる...気がする。
ついでに。ウェブサイトやウェブサービスの翻訳だとこういうサービスがあったりする。
ブラウザはページの描画処理のなかに割り込む余地が大きく取ってあるので、ブラウザのExtensionとかならできることがいくらかあるかもしれない。
個人的に気に入らない話はOSのアップデートは使いやすくなるからとてもいい事だからすぐにやった方がいいと宣伝されている事。
まあ、半分は嘘だよね。古いものが残っていると先に進めないんだよ...。
現在のクライアントOSは、巨大なプラットフォームのパーツの一部として理解したほうが正しくて、古いパーツが残っているとツライんですよ。
そして「サービスを受けるための道具であって、あなたが何でも好きにできる機械ではないです」みたいな世界になりつつあって、ちょっと問題と言われてもいる。
これはかなり困った傾向なんだけど、全体としての流れはあんまり変わりそうにない。
オブジェクト指向好きですな...。ここではオブジェクト指向は特に気にしなくていいですよ。
とてつもなく複雑なことをやっているために、すべてのバグを潰すことはコストが高すぎてできないんですよね。
それよりバグは未来を先取りするコストと考えて、本質的に価値のある機能を増やしていくというのが基本的な方向になっている。
だからパソコンはたまに不具合を引き起こすんです。しゃーない。
しかし中途半端に理解している老人などは、そんなことじゃ分からん。自分に分かるように説明しろと言い出す。
説明は出来る。しかし相手はイライラするし理解されない。よって説明をしてはいけないという状況に追い込まれる。
ここでどうすればいいのだと理解不能に陥る。
まあ、説明って得てして難しいよ。しゃーない。
そのとおりです。
オープンソースのプロダクトなら原理的には調べられるけどね。Androidとかはオープンになってる。
それを許容することで先に進んできているという事実は受け入れたほうがいいと思う。
「把握・理解可能な範囲」に留めていたら、数十年前のコンピュータの世界から抜け出せなかった。
deep learningの世界ではそれがより一層進むかも。この辺は詳しくないけど。
ここでの「理解」についてはそのとおり。これはもう諦めるしかない。
これが常にある。IT関連は常に新しい情報が出てくるのでそれに送れると無知になってしまう。
なんでこんなことも分からないんだとか言われ放題で、IT系の企業に努めている人は常に新しい知識を入れられる
面倒くさがらない人が向いている。
「面倒くさがり」の方が問題に気づいて「頑張って面倒じゃなくする」ことができるので、プログラマにとっては美徳なんて言われますけどね。
同時にくじけないとか諦めない、しつこいみたいな素養は必要かも。
応用まではとろうな。がんばれ。
このへん自分も知らんですよ。べつに全部知っている必要はない。
(追記: はてな記法の引用すらもさっきまで知らなかったしな!そんなもん)
層の構造をとっているということと関係があるんですが、仕様が変わると、その上に乗っているものを全部なおさないといけないんですよね。
でも革新のために互換性を捨てなければいけないケースも多い。このへんはハードでもソフトでも同じ。
そして、メンテのコストが上がっても使い続けたほうがトータルで安上がりという場合は、古いものが残ってしまう。
あるいは「(多少の問題はあっても)動いているものは変えるな」という経験則から意図的に残す場合もある。
西暦2020年にもなって、プログラミングが簡単には出来ないし、ハードウェアの規格も完全に統一はされていない。
というかプログラミング言語自体多すぎる。ソフトウェアはデファクトスタンダードのモノ程度は知っているが、
ぜんぜん完成していない荒っぽいものを目にしているのだと理解したほうが的確。
それなのに毎日理解のできないパソコンやスマートフォンを使っている。
オブジェクト指向のおかげ様だがオブジェクト指向に対して無性に腹が立つ。
自分の全く知らない場所でいけしゃあしゃあと演算を行い、そして結果を出す。それも大半が正しい結果で
利便性が抜群だ。些細なミス(バグなど)はあるが圧倒的に利便性が勝っている。
そんな道具に踊らされている自分が滑稽だ。理解できない愚かな自分は正に機械の奴隷のようだ。
本当に理解できない。辛い。
勘違いしてはいけないのは、それらはすべて先人の努力の蓄積によって成り立っているということ。
「よくわからないけど存在している道具」ではなくて、信じられないほど複雑だけど、多くの人々の行動によってなんとかかんとか実現した道具なんですよ。
「オブジェクト指向のおかげ様」じゃないんです。(もちろんオブジェクト指向というのも大きな発明の一つですが)
そしてブラックボックスとして使うのは多くの場合正しいです。そこは諦めましょう。
でもエンジニアとしての立場からは、その裏に隠れているとてつもない技術や思考の蓄積に感動してほしいなと思う。
人類がこんなもん作れたのって、かなりすごいよ?
日本だとGoogleが凄い、日経が次はDXと言ってるといった、
ハードウェアで稼ぐのはもう古い、ソフトウェアで稼ぐ時代だとなっている。
とはいうものの、Googleを支えているのは桁違いの計算機であり、通信機器だ。
スマホの端末で演算させれば、自社で電気代も端末代も負担せずにできる。
GoogleはTPU作り、AppleはM1を作り、Amazonも独自チップを作っている。
Microsoftもハードを作ったり、GPT-3のスパコンを作っている。
サーバーの物理的な仕様をオープンにして価格競争を促している。
日本のネット界隈だとWeb技術がキラキラしているが、差別化要因にできていない。
〇〇ペイも乱立したが、結局お金で殴ったところが生き残ったし、キャンペーンが終わった時点で客にもお店にもメリットが薄れ、
まず、コンピュータゲームがほとんど巷に存在しない時代にPongが登場すれば、そりゃみんなゲームにワクワクしたはず
アメリカにアーケードゲーム筐体だってそのものがない時代なんだから
だからスティーブ・ウォズニアックだってApple IだのIIだのでPongの実装はやっていたはず
それもスティーブ・ジョブズは売りにしてたはずだ
Pongが動作すると、次はブロック崩し(Breakout)が作れる
プログラミングのコツの一つは他人のプログラムを改変することだ
Pongが動くなら、そこからドットやドットの塊をVRAMに描画することは可能だと気付くだろう
でも、単なる壁打ちや対戦ゲームだったPongのゲーム性を大きく変えることになる
日本のゲーム企業タイトーは、このブロック崩しをインベーダーゲームに「再々」発明した
これも実現可能であることは誰でも分かるが、ゲーム性を大きく変えることはある種の発明だと思う
ちなみに、孫正義はタイムマシン商法が得意で、このインベーダーゲームをアメリカに輸出し大儲けした
相変わらず、左から右、右から左に他人のものを移動して儲けるのが上手い(いや、本心から褒めてるんですよ
インベーダーゲームでは、ブロックは上から段々と降りてくることになる
また、ブロックが左右に動く、UFOは高速に動く、手前のバリケードがありドット単位で破壊される
プログラミングのコツの一つである、他人のコードを改造する、は本当に素晴らしい再発明を起こしてくれる
Pong → ブロック崩し → インベーダーゲーム → ギャラクシアン → ゼビウス → グラディウス → 斑鳩だの東方だの弾幕避けだの何だの
に繋がっていくわけだが、
この矢印での「パラダイムシフト」の段差が高いほど、ゲームに対するワクワク感が増すと自分は考える
つまり、ギャラクシアンのようなグラフィックからゼビウスが登場したときは、
安っぽい言葉で形容するなら一大センセーションというかエポックメイキングという感じだったわけだ
しかし、今の時代、2Dシューターにそんなにワクワクはあるだろうか?
というか、マニアでない奴が口を挟むな、と言うぐらいタコツボ化しているように思うのだが、
寧ろ、様式美とかお約束が守られてることがプレイヤーの安堵感につながる
2Dシューターができれば3Dシューターが作れるのも自明である
ただ、マシンのグラフィクスの能力が低かった時代にはリアルタイムでの3次元CGの実現が難しく、
アメリカではベクタースキャン、つまりオシロスコープやブラウン管テレビの走査線方式が主流だった時期もあったが、
アメリカではワイヤーフレームの3Dゲームが実現していた時代、日本はファミコンに向かっていた
自分にはハードウェアによるスプライトに固執し、束縛され過ぎているかのように今からすると思える
一方、ファミコンのスプライトの数はMSXと比べると段違いであったが、
ファミコンは2Dスプライトベースのゲームだけを前提としていた
つまり、ファミコンでブレゼンハムのアルゴリズムによる直線を引くとか困難だったのではないだろうか
自分はファミコンの開発はよく知らないのだが、ファミコン版のテグザーは酷すぎると思った
MSXの方がファミコンよりもトータルのグラフィック性能が劣るにも関わらず、
こうやってだらだら書き連ねてみると、
つくづくワクワクするのは何だってアーリーアダプターの段階であって、
そのあと結婚だって何だって倦怠期?ワクワクが減少する時期がやってくるのである
何もない状況にパラダイムシフトを起こす何かがやってくるとワクワクするのであるならば、
乳児はこの世界の何もかもにものすごくワクワクしていると思われる
乳児でなくなると、この世界の変化しないものは常識として脳に定着して、つまらないものにさえなる
でも、若ければまだまだ体験していないことはあるわけだ
若ければギャラクシアン → ゼビウスがどれだけスゴかったかなんて知らんし、俺も知らんw
でも、ギャラクシアンより先にゼビウス見た世代だけど、凄いなあとは思ったんだよな
だって、自分の場合はギャラクシアンを飛び越えてゼビウスだったんだから
逆にギャラクシアンの方を後から知って、古臭いゲームだなー、レトロだなーと思ったんだから
(ただ、ギャラクシアンの曲線的な軌道はゼビウスなんかより凄い発明に思うんだが。整数演算なんだよね?
ただ、レトロレトロとバカにする人はプログラマーでないとかなんだろうけど、
ゼロからコード書くって、何もないところから作ることを考えさせられるわけで、
それはゲームのプログラムを書くならば、ゲームの基本のPongから考えさせられることになる
例えば、ゲームプログラムを書くときSDLとかSFMLみたいなライブラリは使うかもしれないけど、
自分も何か新しいゲーム開発のライブラリとかフレームワークとか検証するときは、
から始めて、次に倉庫番、簡単なブロック崩し、テトリスを実装するとかやることにしている
そこで開発の大まかな進行とかフレームレートとか、色々分かってくるわけだ
ジョン・カーマックがどこで語ってたのか忘れたけど、最近のFPSは完全にMOD開発になっていて、
そのMOD開発の費用はどんどん膨らんでいっていると言ってた気がする
つまり、レベルエディットとかキャラクターだアイテムだとか、そういうコンテンツの緻密な開発だけが進んでいる気がする
GTAみたいなゲームもFPSとかで培った技術の集大成にすぎない
可視領域をどう区切るか?遠くの建物にLODを使うか?インポスターを使うか?とかそういったゲームエンジンの話は、
マシンパワーの向上やUnityなどのゲームエンジンの登場であまり議論する意味がなくなってきている感がある
もっとも、Unityなり導入すれば簡単に作れるという話ではないと思う
思うが、もうゼロからチマチマCのベクトル計算のコードを書く時代ではなくなっているのは確かだろう
カーマックはその高騰するMOD開発をマインクラフトは意図的に安価にしたと言ってた気がする
つまり、マインクラフトであれば子供でもゲームを改造する体験ができるようになる
それはマインクラフトの開発者であるnotchがそういうゲーム開発に対する思想を持っていたからだ
私はnotchはシンプルなものを積み上げるのが好きなように思っている
ただ、jsdo.itだかに投稿していたソフトウェアレンダリングのコードは北欧のメガデモっぽさがあって、
読もう読もうと思って未だに読んでいないことを今思い出した
文章書き直す気がないまま、だらだら書いてみたが、読み返して自己分析するに、
まず、ゲーム開発でなくてもそうだが、
まず何かがあって、それをコピー改造した何かが生まれる、この連続で物事は進化していく
手塚治虫があって、それを高橋留美子がコピー改造して新しい漫画が生まれ、
次に若い漫画は高橋留美子の漫画をコピー改造して、また新しいものが生まれていく
開発する側も消費者もワクワクするのは、この改造して新しい何かが生まれる、守破離の離のインパクトであろう
黎明期はその離のインパクトが大きいが、どんどんそのインパクトは小さくなっていく
そして、ありふれたものが溢れるようになっていく
これが成熟期と言える
しかし、その成熟期に溢れるものは様式美であり、お約束であり、マンネリズムである
あの時代は3DOが先行したがコケたり、ドリキャスも登場してコケたり、面白い時代だったのである
ただ、今の時代にああいう群雄割拠というか、戦国時代というか、そういう活気がゲーム業界にあるようには思えない
VR元年って毎年言ってない?というツッコミは分からんでもないが、まだまだVRは伸びると思う
物体を触れないなんてのはまだまだVR市場が伸びる余地があるということだと思っている
あと、FPSみたいに走るゲームだと自分も走るのか?ということになるけど、うーん、ルームランナー方式はなあ…
あと、これも自分は専門でも何でもないので、
というか、この文章自体がダニング=クルーガーなのは認めざるを得ないわけだけど、
敵というかNPCというか、今の時代だったら高度な汎用性のある人工知能をゲームでも実現するべきだと思うわけで、
そうすれば当然、同じセリフを延々と喋るドラクエの村人みたいなのは笑い話にしかならなくなる
ゲーム内に高度な人工知能が実現すれば、それらと会話したり、それらとマルチプレイと同様の感覚の連携プレイが可能になる
今までと同じことを繰り返しててもワクワクしないし、
自分は文字で情報を確認し処理するのが得意なタイプだ。視空間性ワーキングメモリ寄りのようだ。本を読むのも早い。代わりに耳で情報を処理するのが苦手だ。
意識しなくても誰かが喋ってそれが耳に入ると何を喋ってるのかを脳の処理演算を無意識に強制させられるので作業効率が落ちるし、疲れやすくなる。
作業時のBGMは洋楽の方が脳も言語として認識せず余計な演算を行わないので楽だ。
親父は目がかなり悪く耳で情報を処理するのが得意なタイプだ。言語性ワーキングメモリが飛び抜けている。
目が悪いため、授業中の黒板など見えず先生の喋ってることを情報を処理して覚えて学習することを幼少からしていたそうだ。
最低限のメモを取れば、聞くだけで情報を整理できて判断するのが得意なタイプだ。
プログラミングできる気になった自称中級者は、ソースコードに共通のパターンが現れると決まって、その処理を関数などに共通化したがる。
たしかに、そうすることでソースコードは短くなるし、一見して保守性が上がったような気になるのだが、それは間違った作法だから止めろ。
細かいこと言っても伝わらない自称プログラマが読んでることを想定して、先に結論を簡単に書いておく。
なぜコードを共通化するのがいけないのか。理由は簡単だ。要するに、コードが似ているのは単なる偶然であって、それらは別の処理だからだ。
別の処理だから共通化するのはおかしいし、もし共通化した処理の一方のみ仕様が変わった場合、その修正は他方にも影響してしまう。つまり、保守性が下がっている。
たとえば、同じプロジェクトの中に、10%の消費税を加える処理と、10%の金利を加える処理があったとする。この2つの処理はともに元の金額を1.1倍する処理であり、全く同じ処理であるが、共通化してはいけない。
これらを共通化してしまうと、たとえば金利が8%に変更になったとき、金利計算の処理だけではなく、消費税を計算している箇所すべてを変更しなければならなくなる。
実際のアプリケーションでやりがちなのは、複数の処理の「事前処理」「事後処理」などを1つの関数にして、呼び出し毎に細かい挙動を引数で制御するようなパターンだ。
これは結局、改修を重ねる度に「事前処理」「事後処理」の内容が使用箇所によって全く異なるものとなり、それに対応するために
他にも、GUIアプリでユーザーの応答を待つDialogクラスなんてものを作って、使用箇所ごとにメッセージやボタンに割り当てる処理などを切り替えることがある。
これも間違いなく、プログラムが成長するにつれて破綻する。たとえば、ある場所のダイアログは、表示するメッセージがテキスト形式のみではなくなり、脇に画像を表示するかどうかのフラグをコンストラクタに渡したり、Dialogを継承させて表組みを表示するTableDialogサブクラスを作ったりすることになる。ボタンが「OK」と「キャンセル」の2種類の場合じゃなくなって、表示するボタンの数をコンストラクタに渡したり、ボタンに割り当てる処理をリスト形式で渡したりし出す。
こうして、最初は良い設計に見えたDialogクラスはどんどん複雑になる。こうなった原因は明らかで、本来は異なるものを共通化したからだ。おかしな色気を出さずに、素直に別々に実装しておけばよかったのである。
プログラミングをする上で「コードを共通化する」なんてことは意識しなくていい。それよりもプログラマがすべきことは、処理に適切な名前をつけることだ。そのプログラムにおいて「単なる変数の操作」を超えた意味のある処理には名前をつけろ。そして、同じ意味の処理なら同じ関数を使うし、違う処理なら違う関数を使う。それだけだ。コードが共通化できるかどうかなんて全く関係ない。
変数、関数、クラス、名前空間等が再利用のための機構だという先入観は一旦捨てろ。それらの真の意義は、「関心の分離」にある。つまり、実装を隠蔽し、その意図を抽象するために存在する。たまに勘違いしてる奴がいるが、別に1回しか使われない関数とか、1行しかない関数はあってもいい。というか、この原則にしたがって設計すると、ほとんどの関数(or メソッド)は数行になる。
上の消費税の例で言えば、「消費税を加える」「金利を加える」処理は、明らかに単なる算術演算以上の意味のある操作だから、関数化する。そして、それぞれの実装は当初の仕様では奇しくも全く同じになる。消費税を加える箇所では前者の関数を呼ぶし、金利を加える箇所では後者の関数を呼ぶ。
これはこう言い換えることもできる。消費税を加える関数を変更するのは、消費税の計算処理が変わったときのみであり、金利を加える関数を変更するのは、金利の計算処理が変わったときのみである。つまり、すべての関数は、それを変更する理由がただ1つになるように設計しろということだ。
こういうアプローチでプログラムを書くと、ソースコードはあたかもそのアプリケーションのドメイン特化言語で書かれたかのような見た目になる。
また、一つ一つの関数は小さく、理解しやすく、テストやデバッグも容易になる。そして、結果として再利用もしやすくなるし、プログラムの変更も容易になる。