season's quarterly

数学/物理/プログラミング

面白かった本

数学

群論入門』雪江明彦 雪江代数1、赤雪江とか。

多様体の基礎』 松本多様体。丁寧に書かれている。

物理学

『天体と軌道の力学』木下宙 天体力学。ニュートン重力からケプラーの法則を導出するのは力学でもやると思うが、惑星の運行を記述するケプラー方程式や三体問題の安定性など、惑星の軌道の性質について細かく考察する。

天文学史』桜井邦朋 ニュートンがプリンキピアを出版した時代の観測技術ではどこまで分かっていてどこが分かっていなかったのかは興味あるところだと思う。地球を出ずに太陽系のスケールを計測することの偉大さが良く分かる。

量子論の基礎』 清水量子論量子力学を、基本的な5つの要請から始めて、対象や流儀の違いを踏まえて全体像を把握できるように丁寧に解説している。

技術

『低レイヤを知りたい人のためのCコンパイラ作成入門』 C言語によるCコンパイラを作りながら理解していく本。開発する上で便利やgitやmakeの使い方も説明している。コンパイル時に分かる情報と実行時に分かる情報の違いとか、アセンブリにはなくて高級言語にはある様々な概念について意識を向けるには、実際に作ってみるのが一番効果的なのだろうなと痛感した。

哲学

『認識の分析』エルンスト・マッハ 『時間と空間』エルンスト・マッハユークリッド幾何学は人類の空間に対する認識を大きく変えた。世界は目に見えている物だけではなく、外部の世界があるかもしれないこと、それは内部の観測者には決して分からないことを非ユークリッド幾何学は教えてくれる。現実の宇宙がそのような構造を取っている可能性は大いにあり、実際にその後一般相対性理論が発表されたわけなので、時空の哲学の重要性を思い知った気がする。

一般向け

フェルマーの最終定理サイモン・シン 人類が数というものについて考察を始めたディオファントスの時代から、問題が生まれたフェルマーの時代を経由して、問題に取り組んだ様々な数学者のエピソードに数学という学問の性質や周辺情報を加えながら、ワイルズによる解決に至るまでのストーリーを綴る。圧倒される。

『完全なる証明』 ポアンカレ予想を証明したグレゴリ・ペレルマンを追ったドキュメンタリー。数学オリンピックの選手だった少年時代や、ユダヤ人差別の状況、大学に入学し研究者として成功していく様子が分かる。ペレルマンやその周囲の人物たちの発言から感じられる考え方の独特さや知的な雰囲気が面白い。

アインシュタインの世界』 アインシュタインの人物像を様々な視点から探る。

『魔法の世紀』落合陽一 メディアとしてのコンピュータがどのような形を目標として発展してきたが分かる。サザランドやアラン・ケイといった人たちが、人間の扱うツールの究極形としてどんな物を考えてきたのかとても興味深い。

『色彩の科学』金子隆芳 色彩の仕組みとそれに対する理解の歴史が詳しく書かれている。特にアダムスの段階説が面白かった。相反するように見える学説がレイヤーの違いで説明できることは他の分野(微分幾何とかコンピュータとか心理学)でも良く出てくる話だと思った。

『観察者の系譜 視覚空間の変容とモダニティ』ジョナサン・クレーリー 視覚というものに対する認識の変遷を知ることができる。

小説

ソードアート・オンライン アインクラッド 古い町並みとか死と隣り合わせの緊張感から来るエモさが良いので、SAOはアインクラッド編が一番好き。

古典部シリーズ米澤穂信 アニメのタイトルになった『氷菓』から始まるシリーズ。文化祭のごたごたした感じが好きなので、『クドリャフカの順番』が一番好き。

ジョーカーゲームシリーズ柳広司 誰にも知られず人を動かし情報を集めていくのがスリリングでたまらない。スパイ視点も第三者視点もそれぞれ良さがある。

キノの旅 the Beautiful World時雨沢恵一

すべてがFになる森博嗣 他の作品だと天才描写が寒いけど、森博嗣作品はその辺りがしっかりしていて、理解に時間がかかるような台詞も少し出てくる。理系の独特な思考回路とか理解を超越した動機も他では得難い世界観だと思う。

『たのしいムーミン一家』

階層性・仮想化

「内部の空間からは外部の空間の情報が隠蔽されている」とか「隠蔽することで都合の良い空間を構築する」といった話は様々な分野で見られる。

2次元しか知覚できない生物を考え、この生物にとって世界は無限に広がる2次元の平面に見えているとする。この平面が3次元の空間に埋め込まれているとしたとき、この空間内でも平面であるとは限らない。光や音も空間ではなく平面に沿って伝わるので、2次元の生物が知覚する世界は2次元でしかない。それにも拘わらず、この生物にとっては自らが住んでいる世界を2次元の平面として記述しても一向にかまわない。外部から見れば誤りであるような記述も内部から見れば矛盾なく成立するのである。いわばこの生物が住んでいるのは実在の3次元の中に実装された仮想的な空間なのだ。もちろんこの階層構造はいくらでも高階に考えることができる。

全宇宙の物体の大きさが等しく大きくなっていたら観測者にはどう見えるだろうか。物差しも等倍で拡大し、自分自身も拡大するから、変化していても気付かないだろう。全宇宙の物体の速度が等しく大きくなっていたらどう見えるだろうか。時計の進みが等倍で速くなり、自分の頭の回転も速くなるから、同様に変化には気付かないはずである。

外在的な量から定義されたガウス曲率が内在的な量のみから導くことができることを示したのが、ガウスの驚異の定理であった。一般相対性理論において物質の運動を記述する測地線の方程式はリーマン計量のみで書かれており、外界の情報を全く必要としない。

このような階層性はコンピュータ技術においてよく利用されている。OSは物理アドレス空間から使用可能なメモリをかき集めて仮想アドレス空間を構築する。「C言語の配列が連続するメモリに配置される」というのは仮想アドレスの話である。Javaバイトコードコンパイルされ、実行時はJITコンパイラがスタックマシンをエミュレートする。これは仮想マシンと呼ばれる。

人間の記憶に関しては、感覚記憶から短期記憶・長期記憶の順に貯蔵されるという仮説(二重貯蔵モデル)が提案されている。心理学で検討するのはしばしばこのような抽象的なモデルであり、神経系の上に具体的にどのように実装されているかには立ち入らない。ところで記憶の宮殿というものがあるが、物理的にはどのような配置になっているのだろうか。また、多重人格者は人格間で記憶が共有されないというが、脳の中でどのようにリソースが分割されているのだろうか。

人間の色覚に関して、ヤング=ヘルムホルツの三色説とへリングの反対色説という二つの説があった。三色説とは、色彩はRGBの3つの原色の組合せであるという説。反対色説とは、色彩は赤-緑、青-黄という相反する性質の物質の組合せであるという説。両者にもそれを用いることで上手く説明できる現象が存在する。これに対してアダムスが段階説というものを提案した。これは人の神経系は三色説に基づく処理がされた後、反対色説に基づく処理がされるということである。つまり、三色説と反対色説は対立するものではなく、単一のシステムを異なるレイヤーから記述したものに過ぎないということだ。

バイクにはリザーブタンクと呼ばれる予備のガソリンタンクがある。これによりメインのタンクのガソリンが切れてもしばらくは走ることができるのである。しかしリザーブタンクというタンクが物理的に存在しているわけではない。タンクは1つだが、タンクの底より少し高い所からガソリンを供給することで仮想的なタンクを構築しているのである。

知覚する世界がどのレイヤーにあるかに関わらず意識は存在するはずだと推論したのがデカルトだった。デカルトは『方法序説』の中で夢を例に解説している。自分が夢を見ているとしても夢を見ている自分という存在は消えない。現代ならVRで例えても良い。自分が仮想現実にいるとしても、(実体を持った動物であれ、水槽の中の脳であれ)何らかの形で意識は実在するだろう。似たような話に胡蝶の夢、邯鄲の枕などがある。

世界には様々な考察や観察が可能なのである。

フラクタル図形の拡大

解像度を明示せずにフラクタル図形を描画する

解像度を明示せずにフラクタル図形を無限に拡大するにはどうすれば良いか考えていた。例えば、再帰呼び出しを使って描くときに、再帰の回数を人間の方で指定せずに、拡大するとその都度座標が再計算されるようにできないか。さらに、自然な書式でフラクタル図形を定義する方法として、関数型言語の遅延評価のようなものを考えていた。

ピクセルがその集合に載っていることが分かれば良いのでシェーダーを使えば良さそうだと思った。シェルピンスキーのギャスケットの場合、面積を持たないので、線分に幅を持たせて一番近い線分までの距離を求める必要がある。そこで次のようなフラグメントシェーダーを書いた。

precision mediump float;

uniform vec2 uOrigin;
uniform float uScale;

float cross2(vec2 a, vec2 b){
    return a.x * b.y - a.y * b.x;
}

float distLine(vec2 p, vec2 a, vec2 b){
    float x = distance(p, a);
    float y = distance(p, b);
    float z = distance(a, b);
    float s = (x + y + z) / 2.0;
    float area = sqrt(s * (s - x) * (s - y) * (s - z));
    return 2.0 * area / z;
}

float distTriangle(vec2 p, vec2 vert[3]){
    float dist = 1e9;
    dist = min(dist, distLine(p, vert[0], vert[1]));
    dist = min(dist, distLine(p, vert[1], vert[2]));
    dist = min(dist, distLine(p, vert[2], vert[0]));
    return dist;
}

bool inTriangle(vec2 p, vec2 v0, vec2 v1, vec2 v2){
    float sign0 = cross2(p - v0, v1 - v0);
    float sign1 = cross2(p - v1, v2 - v1);
    float sign2 = cross2(p - v2, v0 - v2);
    if(sign0 > 0.0 && sign1 > 0.0 && sign2 > 0.0) return true;
    if(sign0 < 0.0 && sign1 < 0.0 && sign2 < 0.0) return true;
}

bool inGasket(vec2 p, vec2 v0, vec2 v1, vec2 v2){
    float width = 1.0;
    vec2 mid[3];
    for(int i = 0; i < 100; i++){
        mid[0] = (v1 + v2) / 2.0;
        mid[1] = (v2 + v0) / 2.0;
        mid[2] = (v0 + v1) / 2.0;
        if(inTriangle(p, mid[0], mid[1], mid[2])) return distTriangle(p, mid) < width;
        if(inTriangle(p, v0, mid[1], mid[2])){
            v1 = mid[1];
            v2 = mid[2];
        }
        else if(inTriangle(p, mid[0], v1, mid[2])){
            v0 = mid[0];
            v2 = mid[2];
        }
        else if(inTriangle(p, mid[0], mid[1], v2)){
            v0 = mid[0];
            v1 = mid[1];
        }
    }
}

void main(){
    vec2 a = uOrigin + vec2(0.0, uScale);
    vec2 b = uOrigin + vec2(-uScale * sqrt(3.0) / 2.0, -uScale / 2.0);
    vec2 c = uOrigin + vec2(uScale * sqrt(3.0) / 2.0, -uScale / 2.0);
    gl_FragColor = (inGasket(gl_FragCoord.xy, a, b, c) ? vec4(0.0, 0.0, 0.0, 1.0) : vec4(1.0, 1.0, 1.0, 1.0));
}

glslで再帰呼び出しwhile(true)が使えれば、有限時間で計算が終了し、適切にフラクタルを離散化できる。実際にはそのどちらも使えないようなので、結局forループで最も大きい三角形から分割する回数を指定することになった。この方法では拡大していくといつか限界が来る。

スクリーンと交わる部分をセグメント木のように求めていく方法も考えたが、同じ理由でできないと気付いた。

解像度を明示してフラクタル図形を描画する

解像度を明示する場合でも、最も大きい三角形からどれだけ拡大したかを記録しておかなければ、縮小しても戻ってくることはできない。拡大率が可変長のデータとなってしまうので、これも難しい。

一方で両方向に無限に拡縮できる場合は絶対的なサイズを持っておく必要がないので描画が可能。常に三角形がスクリーンを覆うように頂点を持っておく。

if(isIncluded(tri)){
    if(isIncluded([tri[0], inMid(tri[0], tri[1]), inMid(tri[0], tri[2])])){
        tri[1] = inMid(tri[0], tri[1]);
        tri[2] = inMid(tri[0], tri[2]);
        return;
    }
    if(isIncluded([inMid(tri[0], tri[1]), tri[1], inMid(tri[1], tri[2])])){
        tri[0] = inMid(tri[0], tri[1]);
        tri[2] = inMid(tri[1], tri[2]);
        return;
    }
    if(isIncluded([inMid(tri[0], tri[2]), inMid(tri[1], tri[2]), tri[2]])){
        tri[0] = inMid(tri[0], tri[2]);
        tri[1] = inMid(tri[1], tri[2]);
        return;
    }
}else{
    if(isIncluded([tri[0], exMid(tri[0], tri[1]), exMid(tri[0], tri[2])])){
        tri[1] = exMid(tri[0], tri[1]);
        tri[2] = exMid(tri[0], tri[2]);
        return;
    }
    if(isIncluded([exMid(tri[1], tri[0]), tri[1], exMid(tri[1], tri[2])])){
        tri[0] = exMid(tri[1], tri[0]);
        tri[2] = exMid(tri[1], tri[2]);
        return;
    }
    if(isIncluded([exMid(tri[2], tri[0]), exMid(tri[2], tri[1]), tri[2]])){
        tri[0] = exMid(tri[2], tri[0]);
        tri[1] = exMid(tri[2], tri[1]);
        return;
    }
}

function inMid(a, b){
    return { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };
}

function exMid(a, b){
    return { x: 2 * b.x - a.x, y: 2 * b.y - a.y };
}

逆三角形に接している部分は自己相似となっていない(反対側に頂点が存在するかどうかが絶対的な基準となり、拡大率を覚えておく必要がある)ので、拡大し続けるには適宜位置をずらす。

自然界のフラクタル

良く考えると自然界にも理想的な形でフラクタルが存在しているわけではないから、コンピュータで計算できなくても仕方ないのかもしれない。視線に平行な直線を考えると、これらは全て視線の先の消失点で交わるが、光速は有限なのでいつまで経ってもレンダリングが終了しない。

作図言語: PentagonScript

リポジトリ: https://github.com/season1618/PentagonScript

webサイト: https://season1618.github.io/PentagonScript/

動機

多分Glispっていうデザインツールを見て良いなあと思ったのがきっかけ(高校の時にこれを読んでいて、機能の直交性とかツールにおける言語相対論とかを知ってほえーとなっていた) 。

作図も似たようなものなので「言語で作図」をやってみたかった。

初等幾何学における作図を支援するツールを動的幾何学ソフトウェアというらしいです。

動的幾何学ソフトウェア - Wikipedia

作図をわざわざ言語によって記述するメリットは、良く使う操作をまとめて関数化したり、繰り返しが記述できる点だと思います。

構文

Go言語に似てる。型を後置して接頭辞で変数と関数を区別できるようにすると構文解析が楽になる。これはCコンパイラ作ったとき面倒だったので。

普通の図形は宣言的に記述すべきかもしれないが、作図の場合は文字通り手続き的に記述すべき。

交点は複数できるので分割代入をサポート。

変数名が図形に対応するようにしたいと思ったので変数は再代入不可としました。これについては拘らなくても良かったと思う。再代入不可を維持しつつfor文を使うには配列は使えません。正n角形を作図で最後に頂点を求めるとき、それらは帰納的に求まり、かつ評価順が決定しません。よってHaskelの遅延評価のように一度に配列の全要素を決定するのは難しいです。そこで配列を使う代わりに可変変数(変数名を変数で表現)を導入しました。for文も制御文ではなくマクロという形にして、スコープも維持されます。(これがまともな解決法かは自信がない)

描画

作図線を描画する関係で結構特殊なことをやっています。LineとCircleは何もなければそれぞれ線分と円を描くことになってるんですが、他の図形と交点を作るとそれに応じて交点を含むように線を伸ばしたり弧を拡縮します。

正多角形の作図

  • 1796年 Gauss 正17角形の作図
  • 1801年 Gauss 作図可能な正多角形の必要十分条件
  • 1832年 F・J・リシェロー, Schwendenwein 正257角形の作図
  • 1894年 Johann Gustav Hermes 正65537角形の作図(計算の要旨のみ)

正17角形の作図を試みた人類は何人かいるようです。

正257角形の作図を試みた人類は何人かいるようです。

正65537角形を作図した人は流石にいなそう。

六万五千五百三十七角形 - Wikipedia

ドイツのヨハン・グスタフ・ヘルメスは、10年の歳月をかけて正65537角形の作図法を調べ、1894年に計算の要旨のみの報告を雑誌に発表した。200ページを超える原稿は、ゲッティンゲン大学に保管されている。

本当は正257角形の作図をやりたかったんだけど、3000工程あるので断念した。

最後に

この辺りも実装したかったけど飽きた。

  • 点をドラッグする
  • 点のラベルの表示
  • 作図可能数の計算
  • 浮動小数点数

ICPC2022国内予選参加記[SOS Brigade]

7/8に開催されたICPC2022国内予選に参加しました。

去年の参加記 season1618.hatenablog.jp

チームはSOS Brigade(shobon + otoshigo + season)です。otoshigo君がメンバーの頭文字がSOSだと指摘していたので、自分がじゃあSOS団wと言ってそうなりました。

2022/Teams/List - ICPC OB/OG の会

今回もtraP内で何回か練習しました。

競技

今年は各々自宅からDiscordで繋いで参加しました。

まずAをotoshigo君、Bを自分、Cをshobon君が取り組みました。A, Cは直ぐにACされました。

B問題はババ抜きで終了までにカードを取る操作が何回行われるかという問題でした。「入力サイズが10000行以下」を「データセットの数が10000以下」と空目して、最初30分くらい分からん~となってました。誤読に気付いてからはやるだけだと分かったんですが、実装に手こずって結局90分かかってしまいました。

提出しようとしたときにたまたまネットワークの調子が悪くて、大会のサイトにアクセスできなかったり、Discordが一瞬落ちたりしてしまったので、コードだけ送ってshobon君に提出してもらいました。一発でACできたので良かったです。

その後は二人がD問題を考えていたようなので、自分はE, Fの問題を読んでましたが何も分かりませんでした。終盤になってDをACしたので凄いと思った。

結果

ABCD4完59位(学内4位)でした。二人のおかげで順位がかなり上がりました。:kansya:

ちなみにtonosamaが単独で全完して優勝してました。凄い。

trap.jp

2021年度の読書記録

『たのしいムーミン一家』

受験期に少しムーミンのアニメを見てたので本も読んでみたくなった。ミイが出てこなかったり、フローレンの名前が出てこなかったり、結構アニメと違った。

『コンピュータグラフィックスの歴史 3DCGというイマジネーション』

大学の図書館で初めて借りた本の一冊。アイヴァン・サザランドの研究室とかCG映画の歴史などの話があった。あんまり覚えてない。

『デザインの授業 目で見て学ぶデザインの構成術』

何故かデザインに興味を持った。デザインの本を読むのは初めてだった。テーマごとに色々なデザインの例が載っていて面白かった。

『科学革命の構造』トーマス・クーン

東工大立志プロジェクトの読書レポートの課題図書で一番面白そうなものを選んだ。科学的発見はある時点で起こると明確に言えるようなものではないこと、現代から見た過去の業績の評価は誤解されがちであること(共約不可能性)、科学の発展は断続的であることなど、なるほどーとなる話が色々あった。文系の本を読むきっかけの一つだったかもしれない。

『鉛筆スケッチ モチーフ作例事典』

何故か絵を描きたくなったので借りてみた。モチーフ作例事典だから説明が丁寧なわけではなかったので上級者向けだったのかもしれない。それまでちゃんと絵を描いたことが無かったけど、濃淡を付けると段々立体感が浮かび上がってくる感覚とか結構面白かった。

ゲーテ 自然と象徴』

詩人・小説家として知られるゲーテは自然科学に関する著作も残している。内容はあまり科学的ではないけど芸術方面では評価されていたらしい。色彩に関してはニュートンを徹底的に批判していて、露骨に嫌いなんだなあというのを感じた。

線形代数の世界 抽象数学への入り口』

確か入学前にいいねしていたこのツイートの人が東工大生で「おー」となって早速借りてみた。テンソルとかの話は分からなかったけど、線形回帰数列と定数係数線形常微分方程式の解のなす線形空間が同型で、その次元から解が基本解の線形結合に限るって話が「線形空間ってこういう風に使うのか」となって面白かった。物理とかだと特性方程式解いて終わりで、解がそれ以外にないのかもやもやしてたけど、これを読んですっきりした。基底の取り方に依らないというのが重要なんだなあと実感した。

『視覚系の情報処理 心理学・神経科学・情報工学からのアプローチ』

心理学のアプローチが少し分かった気がする。

グーテンベルクの銀河系 活字人間の形成』マーシャル・マクルーハン

『魔法の世紀』の中でアラン・ケイが『グーテンベルクの銀河系』を読み込んでいたという話が出てきたので気になっていた。活版印刷の登場による人間や文化の変化など。分厚い本で、全体の流れを見失いがちだったのでいつかまた読みたい。

『装飾とデザイン』山崎正和

デザインの観点から見た人類史のような感じ。

『数は科学の言葉』

グーテンベルクの銀河系』に引用されていた。数を数えることとか長さを測ることについての哲学的なこと。実数ってかなり人工的な概念なんじゃないかと思った。古代ギリシャ人は有理数しか知らなかったし、小数が発明されたのもずっと後だったから。

ハッカーと画家 コンピュータ時代の創造者たち』ポール・グレアム

エッセイを集めたもの。「ハッカーと画家」は章の一つで本全体のテーマではない。めっちゃLISPの話があった。

文化人類学のすすめ』

文化人類学がどういう学問なのか分かる。文化による人間の差異を見極めるために文明人と未開人の差を観察するというのがこの分野の基本的なアプローチらしい。

『数学から創るジェネラティブアート Processingで学ぶかたちのデザイン』巴山竜来

読むだけで実装はしなかった。

『「いき」の構造』九鬼周造

日本人の精神を様々な感情間の関係の中で捉えて分析したもの。出てくる図は正に構造と言えるものだったので驚いた。

親族の基本構造クロード・レヴィ=ストロース

アンドレ・ヴェイユがムルンギン族の婚姻制度を群論を用いて解析した話は以前から知っていた。文化人類学に興味が出てきたので読んでみた。実際にオーストラリアの先住民族がアーベル群の構造になっていて、かなり上手く表現できるなあという感想。

『数について 連続性と数の本質』リヒャルト・デデキント

第一篇 連続性と無理数では切断を導入し実数を定義する。第二篇 数とは何か、何であるべきかではひたすら説明と定理を連ねて自然数を定義する。

『入門言語学ジーン・エイチソン

言語学も面白そうだと思った。あまり覚えていない。

『認識の分析』エルンスト・マッハ

マッハは物理学者・生理学者であり、哲学の研究も行っていた。認識について考えさせられる。

『数学デッサン教室 描いて楽しむ数学のかたち』

たまにTwitterで目にした本。自分もいくつか描いてみた。楽しかった。

『色彩のメッセージ 三原色と補色の絵画史』

錐体細胞の発見より前に光の三原色が提唱されてるのはどういうことなのかと思ったりして、また色に興味が出てきた。

特定の色を基本色に据えることは昔から行われていて、アリストテレスやアルベルティなども考えていた。絵具を混ぜると色が変わることから、できるだけ少ない色数でより多くの色を生み出す組合せを探すのは当然の試みだったのかもしれない。17世紀には色の三原色として赤・青・黄がほぼ確立されていたらしい。

ヤングは色の三原色からヒントを得て三色説を提唱した。ヘルムホルツは更に定量的な分析を行い、1868年には各錐体の分光感度を求めている。この辺りの推論にどの程度根拠があるかまでは分からなかった。

『色彩の科学』金子隆芳

色覚の学説の発展が詳しく書かれてとても良かった。特にアダムスの段階説が面白かった。ヤング=ヘルムホルツの三色説とへリングの反対色説を矛盾なく説明することができる。ヤングの頃は赤外線や紫外線が発見されて、人間に知覚できないものが意識された時代だったような気がする。

『人体観の歴史』

三原色の話がそうだったように、顕微鏡が発達する前から人類は人体についてかなり多くのことを知っていたのだなあという印象を受けた。

人体の解剖は紀元前3世紀には既に行われていて、動物体からの類推も合わさって人体の構造もある程度分かっていた。古代で運動神経と感覚神経、動脈と静脈を区別していたらしいが、なぜそんなことができたのかは書かれていなかった。18,19世紀頃の博物学についてさらに興味が湧いた。

解剖図と印刷の歴史についてそこそこのページが割かれていた。

『現代心理学 認知理論の展開』ジャン・ピアジェ

知能に関心があったので読んでみた。心理学というのがどういう学問なのか少し分かった。メディアで紹介されるような心理学はかなり実体とずれるような気がしていて、実際には脳を開かずに表面的な反応から知性を探ろうという試みなんだろうなあと思った。人間の知性については古くから議論されていて、哲学では認識論という分野だったけど、実証的にやろうということで19世紀に心理学に分化したということらしい。

『日本思想史』子安宣邦

全然覚えてない。

『表情分析入門 表情に隠された意味を探る』ポール・エクマン、フリーセン

中学の時『ノーゲームノーライフ』を読んでいたらポール・エクマンが出てきたので面白かった記憶がある。空の表情を読み取るスキルは実際にできる人もいるらしい。いくつかの感情について特徴的な表情や見分け方について解説されている。

『観察者の系譜 視覚空間の変容とモダニティ』ジョナサン・クレーリー

表象文化論Aの先生が紹介してた。人間の視覚に対する理解の歴史みたいな感じ。視覚の主観性について考えさせられた。結構面白かった。

『天体と軌道の力学』木下宙

天体力学はずっと前から勉強したいと思っていた。天体力学って多分物理系ではやらないけど地惑ではやるんですかね。ケプラー方程式の解や三体問題の平衡点、惑星方程式など。pdfも書いた。

https://github.com/season1618/PDFs/tree/main/Celestial-Mechanics

『天体力学のパイオニアたち カオスと安定性とめぐる人物史(上)』

カオスの発見された経緯など。下は借りなかった。

天文学史』桜井邦朋

天体力学のpdfを書くにあたってちゃんとした天文学の歴史を知りたいと思った。これもその時代の観測技術でどこまでのことが分かっていたのかかなり興味深い。

コペルニクス革命 科学思想史序説』トーマス・クーン

天動説は当時としては十分科学的だったという話があったので、その辺りの事情を把握しておきたいと思った。一般的には天動説に固執するキリスト教側と地動説を支持する近代的な科学者という構図で捉えている人が多いのだと思う。自分も小学校の図書室に置いてあったガリレオの伝記を読んだときはそういう印象を受けた。実際にはそう単純ではなく、両説の精度に大した違いはないとか、教会内での見解は様々だったとかいう話だった。

海王星の発見』

誤植が酷かった。2,3ページに一か所くらい。

『音声科学原論 言語の本質を考える』

音声信号処理で用いられるソースフィルタモデルやフォルマント周波数の話題など。

『わかる・身につく 歴史学の学び方』

面白い話が少しあった。

フェルメールと天才科学者 17世紀オランダの「光と視覚」の革命』

天才科学者というのはアントニ・ファン・レーウェンフックのこと。カメラ・オブスキュラを使って絵を描いていたとされるフェルメールと顕微鏡を発明したレーウェンフックを中心に、人間の視覚に対する認識の変化や、それについての科学と芸術を取り上げている。『観察者の系譜』と似た内容だった。

『日常礼賛 フェルメール時代のオランダ風俗画』

17世紀オランダ絵画について。

『世界の名著 ロック ヒューム』

ロック『人間知性論』『統治論』だけ読んだ。『統治論』では労働価値説とかの法哲学の話と国家体制をどうすべきかなどの政治哲学の話があって、この辺の分野の雰囲気が分かった。

『進化論物語 「進化」をめぐる六人の学者の功罪とその生涯』

社会進化論なるものがあることを知った。生物の進化は自明ではないから生物進化論を提唱することには意味があると思うが、社会が発展するのは当たり前に見えるから社会進化論が具体的に何を主張しているのかが分からなかった。この本では生物進化論と社会進化論を両方取り上げているので読んでみた。この本に拠れば社会進化論にはっきりした主張はないということだったが、やっぱり原典を読むのが一番良さそうとなった。

『文字の歴史 ヒエログリフから未来の「世界文字」まで』

アルファベットにはなぜ大文字と小文字の二種類あるのか気になっていた。初期の頃は大文字だけで書物体と筆記体の二種類があり、筆記体が後に小文字となったらしい。

『一般言語学講義』フェルディナンド・ソシュール

言語で重要なのは音と概念の二重分節とか、シニフィアンシニフィエの結びつきが恣意的であること、シニフィアンが線的であることなど。日本語で「示すもの」っていうと主語なのか目的語なのか分からないので分かりにくい。

記号論入門 記号概念の歴史と分析』ウンベルト・エーコ

記号とは何かを示すもの。それ以外のことは良く分からなかった。

『パースの思想 記号論認知言語学

良く分からなかった。

ようこそ実力至上主義の教室へ3』衣笠彰梧

自由が丘駅近くのブックオフに初めて行った時に買った。無人島でのサバイバル試験の回。最後の場面が好き。

精神分析学入門・上』ジグムント・フロイト

表象文化論Aの講義を聴いていて、無意識について考えるようになった。下は読まなかった。

『ゾウの時間ネズミの時間 サイズの生物学』

この頃は時間の問題を考えてた。時間は時計によって計られる。例えば振り子時計など。振り子の運動方程式を立てて、近似的に解いてやると調和振動になって振り子の周期が$T = 2\pi\sqrt{l/g}$となる。だけど、そもそも運動方程式に$t$が含まれているから一瞬悩んだ。結局これは問題ではないけど、今度は物理的時間と心理的時間の関係がどうなってるのかが気になって、体内時計とか生物の時間について調べるようになった。面白い話題が多かったけど、時間に関する章は一部だった気がする。

チャーチルの昼寝 人間の体内時計の探求』

時間や体内時計について幅広い視点から論じられている。関係ないけど、リンネの花時計というものが出てきて、アートっぽくてかなり感動した。

量子力学史Ⅰ』

量子化学の講義が始まったので、量子力学のpdfを書いたり歴史を調べたりした。熱放射の問題からプランクの公式が発見されるまでの経緯とか水素スペクトルの理論が整備されていった様子が分かる。物理学全体が量子論に取り掛かっていた中、重力の理論を考えていたのは本当にアインシュタインくらいだったのだろうなという印象を受けた。水素原子の理論では、ボーアの量子条件やそれを拡張したゾンマーフェルトの量子条件、天体力学のテクニックを持ち込んだりとかなり試行錯誤があったらしい。

ピカソ 二十世紀美術断層』

評論一般に言えることだけど、作者の動機を外部に求めすぎな気がした。

セザンヌ論 その発展の研究』

あまり覚えてない。

『絵画空間を考える』

遠近法的な絵画が近代に入ってどのように変化していったか。

『まなざしのレッスン2 西洋近代絵画』

ボードレールが主観的な美を提唱してから絵画の題材も手法も変化した。写真成立によって絵画そのものの存在が強調されていった。印象派から、象徴主義キュビスムなどを経て抽象絵画へと向かっていった。これも『観察者の系譜』と関連していて、『フェルメールと天才科学者』よりも美術に寄った内容だった。

量子力学史Ⅱ』

行列力学波動力学が誕生してから数年で急速に量子力学の基礎が整備されていったことが分かる。これらの理論は、前期量子論にはなかったもので、零点エネルギーやシュタルク効果の説明などを含んでいた。ハイゼンベルクシュレーディンガーはかなり哲学の素養があった人で、黎明期から哲学的な議論が生まれていたらしい。既に意識に関する問題に言及していたのは意外だった。

『時間と空間』エルンスト・マッハ

空間をアプリオリな認識としてカントに対して、マッハは経験的な感覚とした。確かに人類は長い間非ユークリッド空間を知らなかった。こういった話から宇宙が非ユークリッド的である可能性にも言及していたのだけど、この考え方は一般相対性理論の基本的なアイディアだったので驚いた。アインシュタインはマッハに随分影響を受けたようだけど、かなり凄いことを言ってたので納得した。

『開眼!JavaScript 言語仕様から学ぶJavaScriptの本質』

ウェブアプリをjsで作ろうと思って一応借りた。

『コーディングを支える技術 成り立ちから学ぶプログラミング作法』

スコープや型などの多くのプログラミング言語に共通する概念の歴史。

エッシャー・マジック だまし絵の世界を数理で読み解く』

錯視やエッシャー風タイリングの自動生成について調べてた。

ベルグソン全集1 時間と自由/アリストテレスの場所論』

『時間と自由』は時間や空間、物体や数について、意識の問題。所々理解できる箇所はあったが、全体では良く理解できていない。

ショーペンハウアー全集1 根拠律の四つの根について/視覚と色彩について』

感性と悟性による視覚の描像が分かりやすく説明されていて、視覚の主観的な面が良く分かった。ショーペンハウアーは色彩を眼の内部で起こる現象として考察した。かなりカントを研究していたらしいが、一方でドイツ観念論の哲学者に対してはほぼ悪口を言ってた。

『楽しみながら実力が身に付く 風景デッサンの基本』

風景を描いてみたかったが、形が複雑で難しい。

『心の研究史

心理学の全体的な流れを追ったもの。知識が足りないため良く理解できなかった。

『探る表現 東大生のドローイングからみえてくる創造性』

二番目に出てきた学生の絵が結構好みだった。

『ヴィジュアル・コミュニケーションの歴史』ウィリアム・アイヴィンス

グーテンベルクの銀河系』に引用されていた気がする。内容も似ていて、学問の発展における図版の役割とか、版画の大量生産による経済や文化の変化など。

アインシュタインの世界』

久し振りに読み返した。昔は知らなかった哲学者や思想家の名前が出てきて面白かった。

FPGAの原理と構成』

情報科学の達人で買ってもらった本をずっと積読していたけど、論理合成が面白そうだったので読み始めた。FPGAの構成も多少理解した。

『講座心理学 4知覚』

心理学科の人はこういう本で勉強するんですかね。

『光学の原理I 電磁光学および幾何光学』マックス・ボルン、エミール・ウォルフ

幾何光学も以前から勉強したいと思ってた。思ったより難しかった。

『知能の心理学』ジャン・ピアジェ

ピアジェによる知能の発達の説明。

『歴史の終わり(上・下)』フランシス・フクヤマ

プラトンアリストテレスは政治体制は定期的に循環していくと考えていた。近代になって、国家体制には終点があり、あらゆる国家は最終的にはその唯一の体制へと収斂していくという主張がされ始めた。ヘーゲル進歩史観では近代自由主義であり、マルクスの場合は共産主義だったが、本書ではリベラルな民主主義がそのような終着点であると主張する。これを読むだけでヘーゲルマルクスの思想にも触れることができるのが良いと思った。後半は話が曖昧になった気がした。

ナショナリズムの歴史と現在』

政治学Aの期末レポートを近現代日本ナショナリズムというテーマで書く必要があったので、参考文献として読んだ。

『生成Deep Learning 絵を描き、物語や音楽を作り、ゲームをプレイする』

生成タスクに関する機械学習の本。画像生成の章を参考にVAEやGANなどを実装した。喩え話で説明してるんだけど分かりにくいと思う。

『やさしい顔と手の描き方 基礎から学ぶ頭部と手の描き方』

顔の立体感を意識しましょうってなった。

『明るい部屋:写真についての覚書』ロラン・バルト

明るい部屋(カメラ・ルシダ)。写真の評論。面白くなかった。

『ダブル・ジョーカー』柳広司

GYAOジョーカーゲームが無料配信されてたので丁度良い機会と思って読んだ。スパイ視点で思考が分かるのも良いが、別の人物の視点から書くのもミステリアスで良い。

『言語・思考・現実』ベンジャミン・ウォーフ

有名な言語相対論(サピア=ウォーフ仮説)の古典。漠然とした理解では物足りなくなったので本人の著作を読んでみた。

ウォーフは言語による表現の違いを指摘して、思考様式が異なると結論していた。ここには表現が異なれば思考も異なるという前提が含まれているような気がして同義反復に陥っていると感じた。編者解説にも全く同じ意見が出てきた。言語と思考の関係を実証する研究はほとんど無いらしいので、あまり強く主張できる説ではないなあと思った。

この本で取り上げられているのは主に言語学の話だけど、自分が知りたいのは心理学的なもっと実証的な話だと思った。例えば、色を識別するときに出力となる語彙に従ってNNが変更されると言われれば、それはダイレクトに言語が知覚(思考)に影響を与えていると納得できる。

『現代微分幾何入門』

また微分幾何を勉強したくなってきたので借りてきた。pdfもかなり加筆修正した。抽象論で理解できてない部分もあるけど面白かった。

『曲線と曲面の微分幾何小林昭七

有名なやつ。ガウス=ボネの定理の証明が『現代微分幾何入門』に載っていなかったので参考にした。3次元空間内の曲線や曲面については以前勉強していたので、割と早く読み終わった。

『言語が違えば、世界も違って見えるわけ』

色覚と色彩語彙に関する研究の歴史を詳細に追っている。20世紀には心理学実験も行われ、言語相対論の主張にも部分的には証拠が与えられている。主張の強い部分についてはかなり批判的なことを言ってるので、考えにバランスが取れるんじゃないかと思う。

『生物から見た世界』ヤーコプ・フォン・ユクスキュル、ゲオルク・クリサート

生物の感覚や時間空間に対する考察。思っていたよりもずっと認識論や哲学よりの本だった。

Web Speed Hackathon 2022 for Students 参加記

3/5-6の二日間にかけて Web Speed Hackathon 2022 for Students に参加しました。Web Speed HackathonというのはWebサイトのパフォーマンスをチューニングするコンテストです。学生限定なので参加者は40人とかだった。

www.cyberagent.co.jp https://github.com/CyberAgentHack/web-speed-hackathon-2022

準備

Herokeでデプロイ

まずリポジトリをforkする。なんも分からんのでREADME.mdにある通り取り敢えずHerokeでデプロイすることにする。下の記事を参考にした。 qiita.com ちなみに自動デプロイしようとしたけどなんか反映されなかったので手動デプロイでやっていた。URLが取得できたらlearderboardのissueから参加登録する。 初回計測がこれなんですけどなぜか高く出てしまって最後まで超えられませんでした(泣)。 f:id:season1618:20220306191825p:plain

手元で実行

リポジトリをcloneする。yarn installしようとしたら問題発生。

PS C:\Programming\web-speed-hackathon-2022> yarn install
yarn : このシステムではスクリプトの実行が無効になっているため、ファイルC:\Users\user\AppData\Roaming\npm\yarn.ps1 を読み込むことができません。詳細については、「about_Execution_Policies 」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ yarn add react-image
+ ~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PS 
SecurityE    xception
    + FullyQualifiedErrorId : UnauthorizedAccess

qiita.com 実行ポリシーがそのままだった。forkしたリポジトリだとこうなるぽい?Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Processしたらできた。

ところがlocal hostにアクセスしたらUncaught ReferenceError: exports is not definedと出てしまいページが表示されない。Slackで別の学生が同じ報告をしていた。Windowsに起因する問題だったらしく、新しくpushされたもので実行できたら表示された。やっと競技開始です。

競技

コードを読んで取り敢えずReactが使われてることだけは分かった。

Reactコンポーネントを関数コンポーネントの外に置く

トップページ開いたらThe component styled.button with --- has been created dynamically.がたくさん出てきたので、定義を関数コンポーネントの外に置きました。改善にはなるけどスコアには大きく影響しないそうです。

画像の読み込みを何とかする

TrimmedImageの読み込みが遅かったので色々やろうとしたんですが上手くいきませんでした。サブピクセルレンダリングという言葉を覚えて整数座標にしたりしてた。

canvas の最適化 - Web API | MDN

HTML5 canvas のパフォーマンスを向上させる - HTML5 Rocks

それ以外

以下の記事を読んで試行錯誤したのですが、結局何もできませんでした。知識が浅いな~。

zenn.dev trap.jp

結果

次あったらもっと良い結果を出せるように頑張りたい。 f:id:season1618:20220306191038p:plain traPの先輩が上位に入っていて凄いなあと思った。