2021-08-29

"KVM 徹底入門" 平初, 森若和雄, 鶴野龍一郎, まえだこうへい 著

KVM(Kernel-base Virtual Machine)とは、文字通り仮想マシンモニタを提供するツールで、物理マシンをハイパーバイザーにすることができる。
その特徴は、Linux のカーネルモジュールとして実装され、x86 系 CPU に搭載される仮想化支援機能(Intel VT や AMD-V)を介してオーバヘッドを軽減する。お馴染みのパッケージ管理コマンド yum で拾えるのもありがたい。
ここでは、コマンドラインユーティリティとして qemu-kvm パッケージが紹介され、QEMU にぶら下がる形が見て取れる。実際、KVM の利用には、QEMU の導入が前提されている。


QEMU といえば、ハードウェアをエミュレートする場面で重宝している。例えば、設計対象となる組込システムでは ARM アーキテクチャによく出くわし、これの動作確認のためのプログラム作成など、いわゆるクロス環境として。CPU だけでなく、USB コントローラや SCSI コントローラなどの周辺回路をエミュレートする場面でも利用している。
ちなみに、つい最近、OS 制作のセミナーでも見かけた。自作 OS を試す場面でも活用でき、これを学生と一緒になってやるのは楽しい。実に楽しい...
QEMUは、ホスト OS に対してゲスト OS を配置し、アプリケーション風に動作させられるところが手軽でいい。ただ、完全にソフトウェアで制御するため、お世辞にも高速とは言えない。ARM 環境を動かすとなると、ある程度の高性能マシンでないと辛い。特に、出先で非力なノート PC でやるには...


近年、CPU に限らず、ハードウェア・アクセラレーションを利用できる GPU も目立つ。逆に、CPU の負担を軽くしようとして GPU の負担が重くなり、表示パフォーマンスが低下したりと、その按配が微妙だったりするけど。
いずれにせよ、ソフトウェアのパフォーマンスを上げるために、ハードウェアで支援するやり方は古くからある。暗号化といった大量な演算を要するチップなど。
とはいえ、おいらの場合、仮想化のための支援回路となると、いまいちイメージできていない。おまけに、使っている対象が物理的にイメージできないと、不安に襲われる性分ときた。そこで、KVM ってヤツはどうなんだろう... というわけである。


本書は、Fedora と Ubuntu への導入事例として書かれているが、両 OS のインストール手順まで掲載される。ここまでやらんでも。なるほど、徹底入門だ!
導入部では、GUI 環境を提供する virt-manager と、コマンドシェル virsh が紹介され、コマンドリファレンスも付録される。
興味深い話題は、KVM のリソース管理機能である。動作モニタのプロセスは、物理的なイメージがしやすい。核となるモジュールは、仮想マシン制御用の抽象化ライブラリ libvirt と、そのデーモン libvirtd。そう、Xen や VMware Workstation などの導入でも見かけるやつだ。こいつを手なづけるには、ライブラリが提供する API 群をいかに使いこなすか、にかかっている...
KVM のライブマイグレーション機能も興味深い。マイグレーションとは、ホスト OS で稼働中の仮想マシンを別のホスト OS に移行させることだが、その際、サービスやサーバを停止せずに移行させるのがライブマイグレーションってやつ。まさに、Linux カーネルらしい仕掛けである...


ところで、仮想化とはなんであろう。その目的とはなんであろう。少なくとも、貧弱なリソースが豊富になった気分にさせてくれる。物の価値を代替するお金も物量の仮想化であり、貧しい心を豊かになった気分にさせてくれる。仮想化とは、価値の代替か?気分の問題か?いや、それだけではあるまい。
実体がなければ、想像は無限に膨らむし、想像力そのものが仮想化のプロセス。精神という得体の知れない実体は、仮想空間とすこぶる相性がよく、精神そのものが仮想的な存在と言えよう。人間社会とは、まさに仮想社会における生存競争の世界だ。集団は実体のない情報に振り回され、いつも右往左往。精神が仮想的な存在だとすれば、仮想化によって人間は人間を取り戻しているだろうか?仮想化によって、自らの思考回路を活性化させているだろうか?仮想化によって、合理的に生きているだろうか?
コンピューティングにおける仮想化は、想像力を膨らまし、思考アルゴリズムを豊かにする、実に素晴らしい概念だ。しかしながら、仮想化技術もまた他の技術と同様、コモディティ化の流れに飲み込まれていく。どんなに優れた概念を編み出したところで、その概念の奴隷にならず、自分らしく生きることは難しい...

2021-08-22

"宇宙をプログラムする宇宙" Seth Lloyd 著

宇宙を論じる場では、古くから重力が主役を演じてきたが、E=mc2 の呪文とともに、エネルギーが主役に躍り出た。ここでは、エネルギーと肩を並べるように情報が主役を演じて魅せる。
it is bit... それはビットから... IT や ICT もビットから...
ここで、ジョークを一つ。但し、数字は二進数表記。
「10種類の人間がいる。ニ進数を知る人間と、知らない人間だ。」


宇宙とは何か?宇宙は何のために存在するのか?量子コンピュータ研究の第一人者セス・ロイドが熱く語ってくれる。それは、計算をするためだと。では、何を計算しているのか?それは宇宙そのもの、すなわち、自分自身の振る舞いを。量子情報理論によると、宇宙とは巨大な量子コンピュータであり、宇宙は自らを計算によって作り出しているという。それは、自己増殖システムか。自己言及によって進化していく様に、不完全性定理や不確定性原理との相性が見て取れる。チューリングが唱えた計算不可能性にしても自己言及に発する。人間が進化してきたのは、自己言及の名手だからこそ。進化とは、複雑化し、カオス化していくことなのか...
尚、水谷淳訳版(ハヤカワ・ポピュラー・サイエンス)を手に取る。


宇宙という巨大な世界を知ろうとすれば、量子という微小な世界を探ろうとする。木を見て森を見ず... という皮肉めいた格言があるが、森を見て木を見ず... では同じこと。
とはいえ、量子の世界は狂ってやがる。猫が生きていて、かつ死んでいる、といった荒唐無稽なことが理屈の上で起こっちまう。宇宙には悪魔が棲みついているのか。マクスウェルの悪魔にせよ、ラプラスの悪魔にせよ、超現象はすべて悪魔のしわざか?


昔から神のように崇められる物理法則に、エネルギー保存則ってやつがある。宇宙の誕生がビッグバンにあるとすれば、無から生じたことになるが、それで何が保存されているというのか。誕生する前からなんらかの情報が浮遊していて、その情報がエネルギーを持っていたとでもいうのか。宇宙で生じる物理現象は、あらかじめ仕込まれた情報によって、突然、露わになるものなのか。
うん~... そもそも、情報ってなんだ???
例えば、有名な二重スリット実験では、電子を1個発射させると、それぞれのスリットに同じ干渉縞が生じる。これが波動性ってやつだが、電子が粒子ならば、二つのスリットを同時に通り抜けるはずがない。これも悪魔のしわざか?
量子力学には、干渉性の消失という概念がある。デコヒーレンスと呼ばれるヤツだ。それは、周囲の環境が量子系の情報を得ることで、波動性を壊すプロセスにも見える。情報を抜き取ることによって、片方のスリットに存在する電子を無にできるというのか?
まったく、情報に操られた現象は悪魔じみている。なるほど、人間社会に蔓延る情報は、人間を動かすエネルギーを持っている。どうりで、人間は悪魔じみている...


1. 計算とは何か
宇宙が、自らの振る舞いを計算しているとしたら、その住民も計算しながら生きているということか。ただ、自己言及プロセスは、自分が何を計算しているかを認知できないことにある。人間だって、なんらかの損得勘定や見返りを計算しながら生きている、ってところまでは認知できるが、それ以上のこととなると、形而上学に放り込まれる。
宇宙が、量子の集合体で構成される巨大な量子コンピュータだとすれば、人間の脳だって量子の塊であり、ある種の量子コンピュータと言えよう。量子数の規模を比べると、人間に意思があるぐらいだから、宇宙には、もっと、ずっと高尚な意思があっても不思議はない。
計算とは、意思のことなのか?単純な法則が複雑系へ向かうのは、何らかの意思が働いているということなのか?計算するとは、なんらかの情報を元に量子が運動するということなのか?
ならば、情報とは過去ということになる。計算を重ねていくうちに、そのプロセスのすべてが情報となる。最初は単純な情報でも、過去の蓄積がカオスへ向かわせる。熱力学の第二法則は告げている。エントロピーはただ増大すると。宇宙はエントロピーに引きずられて膨張し、人間は過去に引きずられて生きていくわけよ...


2. 情報の本質と二進数
情報の最小単位はビットで表され、0 か 1 の状態をとる。計算の基本原理は、この状態を保持するか、反転させるか。つまり、すべては二進数で事足りる。十進数で計算するのは人間の都合であって、両手合わせて十本の指がそうさせるのかは知らん。
実際、コンピュータの演算回路は、2 の冪乗で構成される。足し算して桁上りするかしないかは、0 か 1 で示され、人生の分岐点で、進学するか就職するかも、0 か 1 で記述できる。選択肢が複数ある場合は、二択の多重化と捉えれば同じこと。
つまり、コンピュータプログラムの基本構造は、順次処理と分岐処理が主体となる。情報理論の父と呼ばれるシャノンが提示した 2 を底とする対数で記述される定理は、なかなか意味深い。情報と計算の両方の本質を暴いて魅せたのだから...


3. 量子ビットと多宇宙
量子コンピュータが扱うビットは、従来のビットとは、モノが違う。量子ビット(Qubit)と呼ばれるやつだ。
従来のビットは、例えば、トランジスタが保持する一つの状態で、0 か 1 をとる。これを変化させるには、ベース電圧やゲート電圧を制御して、スイッチングさせる。
一方、量子ビットは、光子、電子、クォーク、ニュートリノといった素粒子が持つスピンの状態で、それぞれの相互作用によって、スピンの方向を変えて情報を処理する。これを変化させるには、単に光をあてたりする。つまり、ビットの処理速度は光速なみに高速というわけだ。一般相対性理論によると、これ以上の反応速度はない。
しかも、スピンは別の状態を同時に持つことができる。こうした特性は、超高速な多重並列処理の可能性を匂わせる。まさに夢の演算素子というわけだ。膨大な計算量を要する因数分解だって、状態を分割して同時に計算すれば、暗号解読もお茶の子さいさい。猫が生きている状態と、死んでいる状態の両方を同時にシミュレーションすることだって...
そして、宇宙はユニバースからマルチバースへ。もはや、自分探しの旅なんてやってる場合じゃない。多宇宙で生きている別の自分を探さねば、いや、お前はすでに死んでいる...


4. ランダム性と有効複雑性
計算された結果は、消去されるか、後の計算のためにフィードバックされるか、それが情報の運命。計算や分岐の積み重ねによって世界が成り立っているとしたら、今の世界は確率によって決定されたとも言えよう。サルがタイプした文字列と人間がタイプした文章の違いは何であろう。サルがタイプした文字列が、詩になる確率は?途方もなく小さな確率であろうが、ゼロとは言えまい。しかし、人類という知的生命体が誕生した確率だって似たようなもの。
ただ、この広大な宇宙空間に地球外生命体が存在するかどうか、しかも、それが知的生命体である確率は?と問えば、かなり高そうな気がする。互いの知的生命体が接触する可能性となると、途方もなく小さな確率になるかもしれんが...
物質の存在や存在の仕方を問えば、ランダム性という概念に遭遇する。ランダム性は複雑系とすこぶる相性がいい。宇宙における計算や分岐の方向は、ランダムに行われているのだろうか?それとも、なんらかの意思が働いているのだろうか?
そもそも、ランダムってなんだ?完全なランダムって、どんなランダム?なんらかの法則でランダムが記述できるとすれば、それはランダムなのか?
宇宙空間に存在する物質は一様に分布していない。銀河団のような塊が点在する。しかも、それぞれの重力法則に従って形を整えている。ランダムってやつは無秩序なのか?それとも、弱い秩序があるのか?
そこで、「有効複雑性」という概念が飛び出す。有効な複雑ってなんだ?手に負える程度に複雑ってことか?人間社会を機能させるのに、完全なランダムは必要ない。ランダムっぽく見えるだけで、かなり役に立つ。その意味では、極めて主観的である。客観性を重んじる数学が、主観確率と同居できるのも頷ける。
その証拠に、デジタルシステムの検証の場で、疑似ランダム生成器が幅を利かせている。それは、軽い秩序か?人生のコントロールには軽いアンダーステアがいい...
それにしても、確率には救われるよ。こんな天の邪鬼な性格も、どんな現象も確率のせいにすればいい。神はサイコロを振らない!と豪語した大科学者がいたが、神ほどのギャンブル好きも知らんよ...

2021-08-15

"新・数学の学び方" 小平邦彦 編

数学は楽しい!おいらは数学の落ちこぼれ。でも楽しい!
酒を酌み交わしながらオイラーの公式について語り始めると、つい夜を明かしちまう。数学ってやつは厳密に理解しようとすると、これほど難解な学問もないが、分かった気になる分にはそれほど難しくはない。
いま、顔を合わせるたびに、けしかけてくる大学の先生がいる。薄っすらと笑みを浮かべ、これを読んでみろ!あれを読んでみろ!と、チェシャ猫のごとく。専門家がド素人を論理でねじ伏せようってかぁ...
いや、数学ってやつは、感覚やイメージで嗜むものらしい。五感を総動員して、絵画や音楽を嗜むように。数学が他のどの分野よりも厳密な論理で組み立てられているのは確かだ。しかし、それだけでは味気ない。
そういえば、ルイス・キャロルも数学の先生だっけ。少女に子供心をいつまでも忘れぬようにと書いた物語が、あの「不思議の国のアリス」。だから、薄っすら笑みを?気色わるぅ...


ここでは、13人もの先生方が数学の具体的な事例を用いながら、その学び方を伝授してくれる。寄稿者の面々は、小平邦彦、深谷賢治、斎藤毅、河東泰之、宮岡洋一、小林俊行、小松彦三郎、飯高茂、岩堀長慶、田村一郎、服部晶夫、河田敬義、藤田宏。
学び方は、十人十色!数学の先生方も一つしかない表記法に対して、実に多様な考え方や理解の仕方を提示してくれる。数学は、けして無味乾燥な学問ではないってことを。
ただ、13人もの御歴々が一斉に語り始めると、話題が豊富すぎてゲロを吐きそう。ざっと拾ってみても、πが無理数であることの証明に始まり、代数幾何学、コホモロジー、微分方程式、複素関数論、微分位相幾何学,.. さらにはガウスの楕円関数論まで飛び出す。帰納的な思考を語るには、やはりガウスは欠かせない。
数学者らしからぬ、暗記を勧める先生までもいる。理解が暗記の対極のように考えられがちだが、そう単純ではないようである。どうしても理解できなければ、暗記でも何でもやってみるさ。フランシス・ベーコンとソクラテスの言葉を掛けて、疑問のあり方を問い掛ける先生もいる。
「知は力なり vs 無知の知 vs 疑問を育てる」
疑問は言語化を育てる。正しく問わなければ、正しく答えられない...


学ぶとは、どういうことであろう... 理解するとは、どういうことであろう...
本書を読んでいると、そんなことを考えてしまう。人は何かを手本にしながら、考え方のヒントを得る。幼児が大人の真似をして、繰り返し片言を喋ることによって言葉を憶えるように。ダ・ヴィンチも、ミケランジェロも、ラファエロも、古代芸術を模写しながら独創性を磨いた。けして目先の技法に囚われず、猿真似で終わらぬよう。独創性とは、模倣の先に見えてくるものやもしれん...
「'学ぶ' は 'まねぶ' であって、その第一義は 'まねること' である。」


しかしながら、ド素人が専門家の学び方を真似ても、うまくはいかない。もともと数学のセンスがあるから、この道を選んだのであろうし、数学に対する姿勢も違えば、遊び心の奥行きも違う。
とはいえ、真似てみる以外に何ができよう。数学のセンスがなくても、我武者羅にやっているうちに、突然視界が開けることだってある。理解するまでのプロセスこそが数学の醍醐味!とすれば、落ちこぼれも少しは救われる。自分の思考回路は自分にしか分からない。理解するまでの道筋は自分で見つけ出すしかない。おいらには、自分の思考回路もよう分からんけど。ユークリッドの言葉に「幾何学に王道なし!」というのがあるが、ここでは「数学に王道なし!」と励ましてくれる...


ところで、本書の代表を務める小平先生といえば、日本人初のフィールズ賞を受賞した大先生だが、フィールズ賞といえば、昔から違和感を持っていることがある。それは、40歳の年齢制限があること。頭が柔軟でなければ数学で功績を上げることは難しいということだが、だからといって絶対的な年齢で規定するとは。柔軟性を重んじる数学が、実にらしくない。健康寿命が伸びている現代社会では、尚更。
但し、何を学ぶにせよ、子供心をいつまでも忘れぬよう心がけたい。アリスのように...
「数学の持つ鋭い魅力は人に伝えようとしてできるものではない。数学は面白いから面白いのであって、説明する必要など少しもないのである。数学の魅力を伝えようとしていかに数学が世に役立っているかを力説してみても、それではちっとも面白さが分からない。むしろ苦しみが増してしまう...」


たいていの人は、銭勘定に必要な加減乗除を知っていれば十分だと考えるだろう。だが、無味乾燥と酷評される数学が、人間社会でいかに重要な役割を果たしていることか。市場経済は、微分方程式なしでは立ちゆかない。保険会社や金融機関は、数理統計学なしでは立ちゆかない。個人情報を保護する暗号システムは、素因数分解なしでは成り立たない。通信経路やデータ記憶装置では誤り訂正率が問われ、製造ラインでは歩留まりが問われる。心理学や生物学にしても遺伝子工学と結びき、その根底にある量子力学、電磁気学、熱力学といった物理数学は避けられない。最大多数の最大幸福といった政治スローガンまでも確率論に支えられ、いまや数学と無縁でいられる分野を探す方が難しい。物事を観察する上で、数学は実に多様な道具になりうるだけに、それぞれの部門に適合した数学的思考を学ぶだけでも、視野が広がる...


そういえば、おいらにだって、数学が得意だ!と言い張っていた時代があった。定理や証明なんてものは憶えるものではない!必要ならその場で導いてやるさ!などと豪語していた。なので試験では、いつも時間をめいいっぱい使う。高校数学で登場する因数分解は、せいぜい四次方程式まで。これを解くのに法則めいたものはない。ただ数字を感じ取ること。大学の初等教育で、いきなり奈落の底に突き落とされたε-δ論法なんて、丸暗記してどうなるというのよ。素朴な精神をエラトステネスの篩にでもかけようってかぁ...
人生は短い!点数競争なんぞに付き合っている時間はない。なぁ~に... 落ちこぼれの遠吠えよ!
そして、数学から逃れるように工学の道へ進んだのだった。しかし、微分方程式からは、いまだ逃れられずにいる。それでも、解析学で重要な複素数や三角関数の恩恵を知って拒否反応も薄れている。フーリエ変換の凄みを実感しながら、テイラー展開や無限級数の有難味を感じ、πの偉大さを感じつつ。
πが無理数だと知っていても、どんな風に無理数なのかは知らん。知っていることといえば、数直線上で単位円を 0 から一周させると、3 を少し超えるあたりで止まるってことぐらい。πの無理性は、無限級数の親戚の連分数で記述することができる。無限級数ってやつは、近似する上で実に便利な道具だ。求める精度に対して、必要なだけ項数をとればいいのだから。
デジタル社会が論理数学で成り立っているのは確かだけど、それほど厳密とは言えず、そのほとんどが近似法で成り立っている。人間社会で繰り広げられる物理現象は、そのほとんどが連続性に見舞われており、連続的な物理現象をモデル化するのに、微分方程式ほどうってつけの道具はない。幾何学的なアプローチで、漸近線の有難味も合わせて。金融危機や自然災害の類いで不連続なケースもあるけど、境界面を微分方程式でつなぎ合わせていかに実世界に近づけるか。これぞ、微分方程式の役割だと解して励んでいるのだけど、やはり落ちこぼれは落ちこぼれ...

2021-08-08

"タイヒミュラー空間論" 今吉洋一, 谷口雅彦 著

学術研究都市のサロンでブラックコーヒーをやりながら、空間認識なんてものは、存在を意識できるなら誰しも持っているわけで、数学屋さんは、その記述の仕方をルール化しているだけじゃないの... なんて大人気ない発言をしていると、ある大学教授から、この本でも読んでみてよ!とけしかけられた。空間論の教科書的存在らしい。
おいらにとって、空間が多様体であろうが、何次元であろうがどうでもいい。興味があるのは、微分できるかどうか。それは、いかに実世界に対応づけられるかということ。もっといえば、微分可能とは、人間の認識可能!と解している。
それでいて、解析対象の物理現象に対しては、微分方程式を組み立てるまではいいが、解けないのは毎度のこと。数学屋さんにボトルを差し入れしては、気分はいつもハーフボトル!天の邪鬼な空間認識ときたら、まったく救いようがない。
だからといって、数学のド素人を議論でねじ伏せようとする数学の大先生も大人気ない。しかも、満面の笑みを浮かべて... こっちも負けじと笑い飛ばすとしよう...

ところで、空間論なるものに接すると、いつも悩まされることがある。集合論や位相論で出くわす空間のコンパクト化ってなんだ?ある種の有限界のことか。ついでに、被覆空間ってなんだ?閉空間の類いか。いつも閉塞感がつきまとう。
空間を論じるからには、それぞれ距離の概念と結びついているが、ユークリッド空間の距離とは明らかに違う。コンパクト化と言いながら、コンパクトにまとめきれない。リーマン・ロッホの定理を用いれば、複素解析曲面の分類ができることは知っているが、オイラー数でいいじゃん。おいらにとっての空間論なんて、こんなもんよ...、
そして、解析的な思考では、広大な空間を分割して貼り合わせ、局所的にユークリッド空間を割り当てて実世界に近づける。それは、微分可能な領域の貼り合わせ。これを集合の連続体として眺めれば、群論も顔を覗かせる。要するに、ある種の近似法と解している。
微分の概念にしても、永遠に近づこうとするということは、永遠にたどり着けないことを意味する。結局、人間の能力では、真理に近づくことはできても、真理にたどり着くことはできまい。だから、近似法に縋る。いつまでもユークリッド空間に幽閉されたまま。なぁーに、屁理屈屋の独り言よ...
こんな見方からでも、複素数空間を眺めると、リーマン面とやらが薄っすらと見えてくる。それは、まさに一次元複素多様体であり、直観的には二次元平面を双正則写像で貼り合わせたもの。本書も、そんなことを言ってくれるのに救われる。
すると、数学的な厳密性が保てるかどうかの境界面は、微分可能かどうかにかかっていると言えそうな。そして、アルコール濃度で分解可能な空間を貼り合わせ、リアリティを求めてバーへ足が向く...

さて、「タイヒミュラー空間論」という名には、条件反射的に圧倒される。オズヴァルト・タイヒミュラーという数学者はナチズムに熱狂した人物でもあるが、まぁ、それはおいといて、ベルンハルト・リーマンと深くかかわるというから、こいつが難解な書であることは想像に易い。
それは、種数 g によって記述される閉リーマン面をめぐる物語。タイヒミュラー空間とは、どうやら種数によって表記できるリーマン面のことを言うらしい。ということは、リーマン面には種数で表記できないものもあるってことか?と解釈すれば、タイヒミュラー空間はリーマン面よりも親しみやすく感じる。
ちなみに、種数とは、位相幾何学で物体の本質とされる穴の数で、位相幾何学者とはコーヒーカップとドーナツの違いも分からん連中... などと揶揄される、あれだ。

こうして見ると、「同じ」という概念も、なかなか手ごわい。ユークリッド幾何学において第五公準を放棄するだけで、空間の抽象度が格段と上がる。何をもって同じ空間と見なすか?その時の座標系は?変数に何をとるか?座標を局所的にとれば、変数も局所的となる。
本書には、抽象数学でお馴染みの「自己同型」だけでなく、「双正則同値」「等角同値」といった用語が散りばめられる。微分可能な条件をやや弱めながら、等角写像から擬等角写像を考察したり。「モデュライ空間」という用語も飛び出すが、これも「同じ」という概念の親戚のようなものか。点の集合を領域で貼り合わせて同一視することを「商空間」というらしいが、タイヒミュラー空間の商空間がモデュライ空間であるという。
何をもって同じとするか... ということは、何をもって区別するか... という問題でもある。「ホモトピック」という概念も、こうした思考から生まれたのであろう。

物語の主役は、種数 g ≧ 2 の閉リーマン面...
まず、6g-6 次元で記述される「フリッケ空間」ってやつが紹介され、次いで、双曲幾何を記述するための「ポアンカレ計量」という曲率テンソルや、フリッケ空間を記述する「フェンチェル - ニールセン座標」の導入でリーマン面の空間イメージを膨らませ、これらを予備知識として、6g-6 次元の実数空間で記述される「タイヒミュラーの定理」が論じられる。
これだけでも、満腹だというのに、ここからが本ちゃんときた!「複素解析的に...」と題して...
解析的とは、どういうことか?分割的ということか?のりとはさみによる構成論か?
g ≧ 2 の閉リーマン面を解析的に眺めるには、3g-3 次元の複素数空間が鍵になる。「タイヒミュラー・モデュライ群」と呼ばれる自己同型写像からなる群を考察しながら。このプロセスを理解するには、擬等角写像と正則二次微分が鍵となりそうだ。

また、空間を論じるからには、距離の概念も欠かせない。計量できるからこその距離だが、座標系が変われば距離の風景も変わる。距離ゼロの意味ですら。タイヒミュラー距離が小林双曲距離に一致するとか、ヴェイユ - ピーターソン計量はケーラー計量であるとか... こうした考察は本当に距離を論じているのか?遠くのものが近くに感じたり、近くのものが遠くに感じたり、まるで人間関係に見る距離感...

それにしても、こいつぁ、本当に入門書なのか?外観できるのはありがたいが、厳密に理解するのは、おいらの能力では到底無理!
ただ、数学ってやつは厳密に理解しようとすると、これほど難解な学問もないが、分かった気になる分には、それほど難しくはない。だから、数学の落ちこぼれなのである。おいらの知識は、たいていこんなもんよ。
地球が公転し、自転していることだって、地球が丸いってことすら自分で確かめた知識ではない。学校で習ったから、そう信じているだけで、そう信じていないと馬鹿にされるだけのこと。確実に知っていることといえば、コーヒーカップは食べられないが、ドーナツは食べられるってことぐらい。
なにごとも、分かった気になれるってことが一番の幸せであろう。そこに挫折感を浴びせようものなら、M な性分が救いになる。もはや、ユークリッド空間に存在する自我を満喫するのみ...
それにしても、数学の大先生のボランティア精神には敬服する。授業料も払ってないド素人相手に、ハーフボトルで釣られるなんて...

2021-08-01

"レガシーコード改善ガイド" Michael C. Feathers 著

P. F. ドラッカーは、こんな言葉を遺してくれた...


"If you can't measure it, you can't manage it."
「測定できないものは管理出来ない。」


"measure" を "test" に置き換えれば、まさに本書が意図するところ...
尚、平澤章、越智典子、稲葉信之、田村友彦、小堀真義訳版(ウルシステムズ株式会社)を手に取る。


モノづくりの現場には、科学同様、観察の哲学がある。まずは観ること、そして状態を知ること。状態を正しく見極めなければ、間違った方策を施し、さらに状態を悪化させる。設計開発で身を立てるなら、この状態を知るという検証プロセスからは逃れられない。そして、検証作業の効率化を図り、実績ある資産を蓄積していく。
では、これらの資産を再利用するためには、どのような状態にしておくべきか。ずっと悩まされてきた課題である。本書は、ソフトウェアの視点から大きなヒントを与えてくれる。
ちなみに、おいらはソフトウェア設計者ではない。ハードウェア設計者だ。それでも、アルゴリズムの検証に C 言語系や数値演算言語などを用い、実行コマンドにスクリプト言語を組み合わせ、アーキテクチャをハードウェア記述言語で実装する。設計開発において、プログラミングと無縁でいられる現場を、おいらは知らない。
そして、流用モジュールを政治的に押し付けられることも...


お偉いさんは、神話に取り憑かれる。過去のモジュールを流用すれば、開発期間が大幅に短縮できる... と。しかも、バグリスト付きときた。バグの所在が分かっているのなら、修正してからもってこい!っちゅうの。いや、修正できない!手に負えない!ってことだ。
政治的に押し付けられる流用モジュールは、たいていレガシーコードだ。モジュールが放つ異臭は、人間関係までも胡散臭くさせる。プロジェクトの健全性を保つなら、すぐにポイ!
しかしながら、現場では、簡単にポイ!できないケースが多い。理解不能コードの変更を外部に依頼すれば、責任の外注となる。


ソフトウェア業界には、もっと悲惨な事例で溢れているようで、本書に励まされる。マイケル・C・フェザーズは、何年もの間、様々なチームで深刻なコードを克服する手伝いをしているうちに、ある定義にたどり着いたという。
「レガシーコードとは、単にテストのないコードです!」
なかなか挑発的な定義だ。ソースコードがきれいで、きちんと構造化されているだけでは不十分... オブジェクト指向が採用され、きちんとカプセル化しているなんてことは核心ではない... というのである。
まず、メソッドにテストがなければ、テストを書く。これを習慣づけると、テストがコミュニケーション手段になり、テストを見るだけで、メソッドに何が期待できるかを感じ取れようになる。クラスをテスト可能にするだけでコード品質が向上する。ライブラリを過信して乱用するのは危険である。そして、コード改善の中心は依存関係の排除にある... と。


おいらは、長い間、ドキュメント化が重要な要素だと考えてきた。その考えが変わったわけではないが、きちんとドキュメント化されていたとしても、ソースコードと完全に対応している保証はどこにもない。変更作業でコードとドキュメントで二度手間になるのでは、何をやっているのやら。
コードが美しいに越したことはない。が、それでバグがないという保証にはならない。何事も整理整頓、環境美化が作業効率を上げ、合理性を高めることは確かだが、何か足りない。
それは、「より現実に...」という観点か。
力学では物体が運動している状態こそが現実であり、ソフトウェアでは振る舞いこそが現実となる。モジュール設計の現場で最もプリミティブな現実は、テストぐるみの動作状態ということになろうか。なるほど、テストが書けるか書けないかが、ポイ!するかどうかの判断基準になりそうだ。
システム設計へのアプローチにおいて、「ドメイン駆動設計」という考え方にも共感できるが、本書が提唱する「テスト駆動設計」という考え方もなかなか。そして、設計の核心をつく、このフレーズとともに...
「ネーミングは設計の中心である。優れたネーミングはシステムの理解を助け、作業を容易にする。しかし、貧弱なネーミングはシステムの理解を妨げ、後でシステムを扱うプログラマに辛い日々を送らせる。」


プログラムの基本構造は、順次処理、分岐処理、反復処理に、あとは、call ぐらいでだいたい説明がつく。
但し、構造化の掟では、goto 文のような、どこへでも飛べる裏技は御法度!
つまり、プリミティブなレベルでは、すこぶる単純な構造で、関数の呼び出しでほぼ抽象化できる。この構成単位となる関数を一つの機能モジュールとして眺めれば、ハードウェアでも同じこと。
となれば、関数レベルで機械的にテストルーチンを組み込むことは可能かもしれない。本書の事例で見る、関数単位でラップしてコードを保護しながらテストを埋め込んでいくといった具合に。ここでは、「テストハーネス」と呼んでいる。
機械的にテストを埋め込む法則が編み出せれば... いや、コーディングルールをテスト仕様にするか... いやいや、言語仕様そのものがそうなっていくのか...
それにしても、ソフトウェア業界の商売戦略は、お見事!一番コストのかかるテストを、一般ユーザにやらせているのだから。β版などと称して。オタクの姑チェックで成り立っている業界というわけか...


おいらは検証環境に対して、それなりに思い入れがある。というのも、設計開発の現場で検証環境を構築をすることが多い。設計作業は若手に任せて。検証プロセスは、経験や勘所も重要で、マネジメントと直結するところもある。つまり、歳のせいか...
よく耳にするのは、プロマネなんだから、コーディングは部下にやらせろ!というお偉いさんの声。しかし、おいらは現場から離れたくないので、強く反発する。ただ、検証環境の構築はおもろいが、検証作業そのものは大っ嫌い!だから、よく自動化に突っ走って地雷を踏む...
実際にテストコードを埋め込もうとすると、モジュールの内部と外部のどちらに持たせるか、いつも悩ましい。余計なモジュールを作りたくないので、なるべく内部に持たせたいが、助長したモジュールはハードウェアの実装では躊躇する。
ただ、リソースの贅沢な昨今、そんな配慮からも解放されつつある。昔は、故障検出率を考慮してモジュールの作り込みにも気を配ったものだが、いまや自動化されて。その分、要求仕様が膨れ上がって仕事量は減らないけど。いや、増えたか...
カバレッジの自動化にも助けられている。カバレッジそのものは非常に有効で、予期しないバグを発見することもあるが、自動化を鵜呑みにするのは危険か。ハードウェア的な機能検証とソフトウェア的なカバレッジでは、目的が少し違うし...
それにしても、人間社会とは奇妙なものである。自動化して便利になると、なぜか?仕事量が増えやがる。人間ってやつは、生まれつき仕事の奴隷ってか...