ポタージュを垂れ流す。

マイペースこうしん(主に旅行)

積分技法など

twitter見てたら数学の記事を書くとどうのこうの...という話題があり、1つだけ書けるネタがあるなあと思ったので書いてみる。

自分が使ってるかどうかは別として知っている積分技法的なものを4つ紹介する。

Schwinger trick

場の量子論とかで使われるらしい積分技法。twitterでたまに見る。Schwinger parametrization - Wikipedia

Schwinger trick
$$ \frac{1}{A^n}=\frac{1}{(n-1)!}\int_0^\infty u^{n-1}e^{-{u}{A}} du $$

特に$n=1$の場合は

$$ \frac{1}{A}=\int_0^\infty e^{-{u}A} du $$

となる。

$A$はなにかしらの関数。

例題
$$ \int_0^\infty \frac{\sin x}{x}dx=\frac{\pi}{2} $$
$$ \begin{align} \int_0^\infty \frac{\sin x}{x}dx &=\mathrm{Im}\int_0^\infty \frac{e^{ix}}{x}dx \\ &=\mathrm{Im}\int_0^\infty \int_0^\infty e^{ix} e^{-ux} dudx \\ &=\mathrm{Im}\int_0^\infty \left[\frac{e^{-(u-i)x}}{-(u-i)}\right]_{x=0}^{x=\infty} du \\ &=\mathrm{Im}\int_0^\infty \frac{1}{u-i} du \\ &=\mathrm{Im}\int_0^\infty \frac{u+i}{u^2+1} du \\ &=\int_0^\infty \frac{1}{u^2+1} du \\ &=[\tan^{-1} u]_{u=0}^{u=\infty} \\ &=\frac{\pi}{2} \end{align} $$ $$ \tag*{$\blacksquare$} $$

Maz identity

ラプラス変換を知ってると楽にできたりするらしい。Laplace transform - Wikipedia

Maz identity
$$ \int_0^\alpha f(t)g(t)dt=\int_0^\alpha\mathcal{L}[f](s)\mathcal{L}^{-1}[g](s)ds $$
例題
$$ \int_0^\infty \frac{\sin x}{x}dx=\frac{\pi}{2} $$
$$ \begin{align} \int_0^\infty \frac{\sin x}{x}dx &=\int_0^\infty \mathcal{L}[\sin x](y)\mathcal{L}^{-1}\left[\frac{1}{x}\right](y) dy\\ &=\int_0^\infty \frac{1}{y^2+1}\cdot 1 dy \\ &=\frac{\pi}{2} \end{align} $$ $$ \tag*{$\blacksquare$} $$

Wick's theorem

こちらも場の量子論で使われたりする技法らしい。名前が正しいのか微妙だが次のリンクにならっておく。integration - reference for multidimensional gaussian integral - Mathematics Stack Exchange

Wick's theorem(の特定の場合) $x\in\mathbb{R}^n$,$A\in\mathbb{R}^{n\times n}$とすると
$$ \sqrt{\frac{\det A}{(2\pi)^n}}\int_{\mathbb{R}^n} x_ix_j\exp(-\frac{1}{2}x^\top Ax) d^nx=\frac{1}{2}(A_{ij}^{-1}+A_{ji}^{-1}) $$
となる。

より一般的な話は上のリンクを読んでもらえばいいと思うが、より一般には次の関係が成り立つらしい(あまり理解できなかったが、$f$を多項式に展開してみるとまあそうかな、という気になる)。

$$ I_J=\sqrt{\frac{\det A}{(2\pi)^n}}\int_{\mathbb{R}^n} \exp(-\frac{1}{2}x^\top Ax+J^\top x)f(x) d^nx $$
と定めると
$$ \begin{align} I_0&=\sqrt{\frac{\det A}{(2\pi)^n}}\int_{\mathbb{R}^n} \exp(-\frac{1}{2}x^\top Ax)f(x) d^nx\\ &=\left.f(\partial_J)\exp(-\frac{1}{2}J^\top A^{-1} J)\right|_{J=0} \end{align} $$
が成り立つ。ただし$A$は上の変形が意味をもつような正方で可逆な行列で、$J\in\mathbb{R}^n$はベクトル。

上の応用と説明を兼ねて平均$0$,分散共分散行列$Σ$の多変数ガウス分布について以下の関係が成り立つことを説明してみる。

例題 $n$次元ベクトル値の確率変数$X\sim \mathcal{N}(0,Σ)$について、$V[X]=E[XX^\top]=Σ$となる。つまり、
$$ \int_{\mathbb{R}^n} \frac{1}{\sqrt{(2\pi)^n\det Σ}}\exp\left(-\frac{1}{2}{x^\top}{Σ^{-1}}{x}\right) xx^\top d^nx=Σ $$
が成り立つ。

まず$Z_J$を以下で定める:

$$ Z_J=\int_{\mathbb{R}^n}\exp\left(-\frac{1}{2}x^\top Σ^{-1}x+J^\top x\right)dx $$

ここで、$x=y+ΣJ$なる変換を使うと

$$ \begin{align} Z_J&=\int_{\mathbb{R}^n}\exp\left(-\frac{1}{2}x^\top Σ^{-1}x+J^\top x\right)dx \\ &=\int_{\mathbb{R}^n}\exp\left(-\frac{1}{2}(y+ΣJ)^\top Σ^{-1} (y+ΣJ)+J^\top (y+ΣJ)\right)dy \\ &=\int_{\mathbb{R}^n}\exp\left(-\frac{1}{2}y^\top Σ^{-1} y-J^\top y-\frac{1}{2}J^\top ΣJ+J^\top y+J^\top Σ J \right)dy \\ &=\int_{\mathbb{R}^n}\exp\left(-\frac{1}{2}y^\top Σ^{-1} y+\frac{1}{2}J^\top Σ J\right)dy \\ &=Z_0\exp\left(\frac{1}{2}J^\top Σ J\right) \end{align} $$

となる。さて、これを$J$の第$i,j$成分$J_i,J_j$で微分して$J=0$を代入することを考える。まず上の式の一番目の行を使うと

$$ \begin{align} \left.\frac{\partial}{\partial J_i}\frac{\partial}{\partial J_j}Z_J\right|_{J=0}&=\left.\frac{\partial}{\partial J_i}\frac{\partial}{\partial J_j}\int_{\mathbb{R}^n}\exp\left(-\frac{1}{2}x^\top Σ^{-1}x+J^\top x\right)dx\right|_{J=0} \\ &=\left.\int_{\mathbb{R}^n}\exp\left(-\frac{1}{2}x^\top Σ^{-1}x+J^\top x\right) x_ix_jdx\right|_{J=0} \\ &=\int_{\mathbb{R}^n}\exp\left(-\frac{1}{2}x^\top Σ^{-1} x\right) x_ix_jdx \end{align} $$

次に一番下の行を使うと、

$$ \begin{align} \left.\frac{\partial}{\partial J_i}\frac{\partial}{\partial J_j}Z_J\right|_{J=0}&=\left.\frac{\partial}{\partial J_i}\frac{\partial}{\partial J_j} Z_0\exp\left(\frac{1}{2}J^\top Σ J\right)\right|_{J=0}\\ &=Z_0\frac{\partial}{\partial J_i}\frac{\partial}{\partial J_j}\left(\frac{1}{2}J^\top ΣJ\right)\\ &=\frac{1}{2}Z_0(Σ_{ij}+Σ_{ji})\\ &=Z_0Σ_{ij} \end{align} $$

となる。ただし2行目について$\exp$を展開した時に$J_i,J_j$で微分して$J=0$を代入した時に残るのは$J$の2次式以下の部分だけであることに注意。 $Z_0=\sqrt{(2 \pi )^{n}\det Σ}$ なので、これら2つを比較すると

$$ \int_{\mathbb{R}^n} \frac{1}{\sqrt{(2\pi)^n\det Σ}}\exp\left(-\frac{1}{2}{x^\top}{Σ^{-1}}{x}\right) x_ix_j d^nx=Σ_{ij} $$

となることがわかる。これをすべての$i,j$について考えることで

$$ \int_{\mathbb{R}^n} \frac{1}{\sqrt{(2\pi)^n\det Σ}}\exp\left(-\frac{1}{2}{x^\top}{Σ^{-1}}{x}\right) xx^\top d^nx=Σ $$

がわかる。 $$ \tag*{$\blacksquare$} $$

確率分布の活用

確率分布やその期待値を利用して、その意味から積分値を求める方法。確率分布の性質を知っていればゴリゴリ計算しなくても確率論的な意味(?)を考えることで計算ができる。高校とかで何かの計算を順列とか場合の数の言葉に焼き直して解くのと似たようなものだと思う。

例題
$$ \int_{-\infty}^\infty |x|e^{-ax^2}dx=\frac{1}{a} $$

この例だと直接計算した方が早いかもしれないが、考え方の例としてこの問題を確率分布を利用して解いてみることにする。

ここで使う確率分布の確率密度関数(の一般形)を並べておく。

* ガウス分布$\mathcal{N}(μ,σ^{2})$:
$$ f_{\mathcal{N}(μ,σ^{2})}(x)=\frac{1}{\sqrt{2 \pi σ^{2}}}\exp\left(-\frac{(x-μ)^{2}}{2σ^{2}}\right) $$
* ガンマ分布$\mathrm{Ga}(\alpha,\beta)$:
$$ f_{\mathrm{Ga}(\alpha,\beta)}(x)=\frac{1}{\Gamma(\alpha)\beta}\left(\frac{x}{\beta}\right)^{\alpha-1}e^{-\frac{x}{\beta}} $$
* 自由度nのカイ2乗分布$\chi(n)$(ガンマ分布で$\alpha=\frac{n}{2},\beta=2$としたもの):
$$ f_{\chi(n)}(x)=\frac{1}{\Gamma(\frac{n}{2})2}\left(\frac{x}{2}\right)^{\frac{n}{2}-1}e^{-\frac{x}{2}} $$
* 母数$\lambda$の指数分布$\mathrm{Ex}(\lambda)$(ガンマ分布で$\alpha=1,\beta=\frac{1}{\lambda}$としたもの):
$$ f_{\mathrm{Ex}(\lambda)}(x)=\lambda e^{-\lambda x} $$

さて、これらを使って元の積分値を求めてみる。

$$ e^{-ax^{2}}=\sqrt{\frac{\pi }{a}}\cdot\frac{1}{\sqrt{2 \pi (2a)^{-1}}}\exp\left(-\frac{x^{2}}{2\cdot (2a)^{-1}}\right)\sim \sqrt{\frac{\pi }{a}}\cdot\mathcal{N}(0,(2a)^{-1}) $$

なので、$\mathcal{N}(0,(2a)^{-1})$で$|X|$についての期待値を考えて

$$ \int_{-\infty}^\infty |x|e^{-ax^2}dx=\sqrt{\frac{\pi }{a}}E[|X|] $$

が成り立つ。ここで、$Y=2aX^{2}$を考えると、$Y$は自由度1のカイ2乗分布$\chi(1)$に従う確率変数*1。つまり、その確率密度関数

$$ f_{\chi(1)}(y)=\frac{1}{\Gamma(\frac{1}{2})2}\left(\frac{y}{2}\right)^{-\frac{1}{2}}e^{-\frac{y}{2}}=\sqrt{\frac{2}{\pi}}\frac{1}{2}y^{-\frac{1}{2}}e^{-\frac{y}{2}} $$

となる。この$Y$を使うと

$$ \sqrt{\frac{\pi }{a}}E[|X|]=\sqrt{\frac{\pi }{a}}\cdot\frac{1}{\sqrt{2a}}E[\sqrt{2aX^2}]=\sqrt{\frac{\pi}{2}}\frac{1}{a}E[\sqrt{Y}] $$

と変形できる。ここで$E[\sqrt{Y}]$を計算するわけだが、$\chi(1)$の確率密度関数に注目すると、この期待値計算をするときに$\sqrt{y}=y^{\frac{1}{2}}$と$\chi(1)$の確率密度関数の$y^{-\frac{1}{2}}$が打ち消し合うことがわかる。さらに、$\chi(1)$の確率密度関数に含まれる$\frac{1}{2}e^{-\frac{y}{2}}$というのは$\lambda=\frac{1}{2}$の指数分布の確率密度関数なので、この部分について積分を実行すれば、確率密度関数が規格化されていることからその値は1となる。したがって、これらの観察によって

$$ \sqrt{\frac{\pi}{2}}\frac{1}{a}E[\sqrt{Y}]=\sqrt{\frac{\pi}{2}}\frac{1}{a}\cdot\sqrt{\frac{2}{\pi}}=\frac{1}{a} $$

であることがわかる。よって

$$ \int_{-\infty}^\infty |x|e^{-ax^2}dx=\frac{1}{a} $$

がわかった。 $$ \tag*{$\blacksquare$} $$

*1:自由度nのカイ2乗分布は標準ガウス分布に従う$n$個の確率変数$X_i$の2乗の和、つまり各$X_i \sim \mathcal{N}(0,1)$が独立同分布のとき、$Y=\sum_{j=1}^{n} {X_j}^{2}$は自由度nのカイ2乗分布$\chi(n)$に従う。標準ガウス分布の確率変数にするために上では分散の分だけスケールさせて標準化を行っている。

年越し、初詣、帰省

あけましておめでとうございます。

特になんということはないんですが年末年始の2020/12/31-2022/01/01の日記を書こうと思ったので書きます。徹夜していたのでこの2日は繋がっています。


2021年12月31日、7時半ごろ。毎年年を越してから完成する年賀状が珍しく年越し前に完成。満足して就寝。年賀状の写真はそのうち上げる。

昼間15時ごろ?に起床。友人からそば打ちをしないかと連絡がきていた。行くと返信。

あかつきでラーメン納め。あかつきスペシャル2玉、ポイントカード使ってライス小をつけるのがいつものセットとなっているのでそれを注文。お会計のときに来年もよろしくお願いしますと言われる。

f:id:potaxyz:20220106011045j:plain
ラーメンあかつき

ミスタードーナツカードがあと900円でVIPチケットもらえそうだったのを思い出してバスに乗って出町柳ミスドに行くも福袋は売り切れておりそのまま退店。よく考えたらドーナツ1個無料券のためにバス乗ってたらその時点で損してるんだよな。

そば打ちするついでに天ぷらやるからサラダ油買ってきてとのことだったので帰り道にスーパーに寄って購入。

バス停で変なじいさんに絡まれる。適当に話を受け流し良いお年を〜と言って手を振って別れた。

薬局で消臭剤とかを購入。

友人宅へ。そば打ち。自分と友人2人の3人いたが自分が一番最後でどうすれば良さそうかわかってきたので一番上手く作れた。ちゃんとそばになっていた。

f:id:potaxyz:20220106010958j:plain
年越しそば

ゆく年くる年

ジルベスターコンサートを見て年越し。

下鴨神社へ初詣。ちなみに先週も来たし先々週も来た。

f:id:potaxyz:20220106011251j:plain
下鴨神社 お焚き上げ

くじ引き300円高いな〜と思いつつも巫女さんに番号を告げてお金を払う。方丈記の序文が書いてあり感動。ただし吉凶のやつは「平」であまりよくなさそう。

f:id:potaxyz:20220106011410j:plain
おみくじ

友人たちと別れ帰宅。家の掃除をする。

掃除は終わらなかったが家を出て修学院駅まで歩く。始発で貴船に向かう。元旦とはいえ流石に始発なだけあって人はそんなにはいなかった。

貴船神社に到着。今年もきっと何度か訪れると思う。澄んだ気持ちになれるので。

f:id:potaxyz:20220106011515j:plain
貴船神社

f:id:potaxyz:20220106011545j:plain
参道

f:id:potaxyz:20220106012219j:plain
奥宮

鞍馬山の山道を歩く。

f:id:potaxyz:20220106011706j:plain
鞍馬山

鞍馬寺に到着。舞台から初日の出が見れたらいいなと思ったが雲がかかっておりいい感じには見えなかった。雲の隙間から顔を完全に覗かせたことは一応あったので初日の出は見れたということで。

f:id:potaxyz:20220106011744j:plain
初日の出?

昨日手に入れられなかったミスド福袋を買いに行く。阪急スクエアは元旦は閉まっているのでビブレに行くことに。

なにも考えずに修学院で電車を降りたらバスの接続がないことに気づき修学院道->北白川別当町->北大路バスターミナルという無駄な移動をすることになった(失敗1、元田中で降りてバスに乗るのがおそらく最適解)。

無事に買えた。

コメダで朝食。今年もコメダにはお世話になるだろう。

実家等へのお土産を買うため再びバスへ乗る。目的地が妙心寺前ではなく嵐電妙心寺駅前だったのに間違えてしまい時間ロス(失敗2)。

普段こんなよくわからないミスしないのに失敗続きで夜に引いた下鴨神社のおみくじが当たってしまっていないかと心配になる。

お店に到着。1組あたり8分程度かかっており1時間くらい待つことになってしまった。

くまもなか目当てだったが売り切れてしまったので(元々買う予定だったが)花びら餅を購入。家まで戻る。

北野天満宮の人が多すぎたしバスの乗降も永遠にやってるしでバスが全然進まなかった。

起きて24時間経っているので流石に眠く寝落ち。起きた頃には銀閣寺道前だったが1日乗車券を床に落としており少し焦る。

帰省の準備を適当に済ませ京都駅へ。

年賀状の宛名書きのためボールペンを買う(が、結局使えなかった、失敗3)。

茶の菓が買いたい!と思ったが何故か京都駅内でうまく見つけられず八条口烏丸口を行ったり来たりしていたら閉店時間になっており買えずに終わる(失敗4)。

夕食として美味しそうな弁当を購入。

想定よりだいぶ遅い時間になってしまったため特急に課金。ただ新幹線だけだと面白くないので、新幹線としらさぎを使う。

米原近辺や関ヶ原のあたりは雪がかなりあった。

弁当がうまい。

弁当のゴミをフタ閉めてたとはいえ適当にお土産袋に入れた(なんで?)せいで汁がこぼれてお土産パッケージを汚してしまう(失敗5)。お土産を渡した友人にごめんと伝えたい。

実家に到着。猫と戯れる。

風呂にエアコンがついており驚く。

26時ごろ就寝。

f:id:potaxyz:20220106133117p:plain
めっちゃ歩いたね


今年の抱負はていねいなくらしをすること、よりactiveにagressiveに生きることです。

2021秋の京都紅葉散策 三十三所巡礼

今年は本気で紅葉狩りをしよう。そう決めた。

行ってみると散ってしまっていたようなところもあったが、結果として33ヶ所回ることができた。*1

それのレビュー的なものを京都市街を俯瞰した時に右下から大体反時計回りに書いていこうと思う。

本編

東福寺

  • 訪問:11/19 8:00頃
  • 拝観料:2000円(JR東海の事前予約制の早朝拝観コース)

2014年の11月に行っていたみたいなので7年ぶりの訪問。紅葉の時期は通天橋に人がめっちゃいて写真撮影が禁止されるほどらしい。それを見越して課金を行なって早朝拝観にしてみた。人が少なくて快適に見れたのでこの課金はよかったと思う(通常拝観が8:30開始なのだが長蛇の列ができていた)。通天橋からの景色が有名だが、その下を散策するのも楽しいと思う。

通天橋から

撮影スポットに人が集まってはいるが人が多いわけではなかった

東福寺塔頭 光明院

  • 訪問:11/19 9:00頃
  • 拝観料:300円

枯山水庭園がいい感じ。落ち着く。混んでないしね(途中で団体が来るとアレだが)。紅葉は始まったばかりという感じだった。

波心庭

吉野窓から

泉涌寺

  • 訪問:11/19 10:00頃
  • 拝観料:500円(伽藍)+300円(庭園)

こっちは色づいていた。人も少なめだった。

御座所庭園

泉涌寺別院 雲龍

  • 訪問:11/19 11:00頃
  • 拝観料:400円

ありがちな長方形の折り畳まれたパンフレットに加えて『雲龍院の「へぇ〜」ポイント』という小学校の生徒思いな先生が修学旅行とかで作って配りそうな感じのプリント(?)をもらった。七福神像のかっこよさNo1コンテストみたいなのが部屋の一角に展示してあり、それぞれの像の写真の前にある花瓶に花を1本添え、それを1票とみなして投票してもらう、みたいなことをやっていた。

紅葉は、うーん。

雲龍

今熊野観音寺

  • 訪問:11/19 11:30頃
  • 拝観料:なし

境内が縦に伸びている感じ(?)で上を見れば紅葉がたくさん。(そういうことを感じさせる写真は撮っていなかった)

参道入り口

大師堂

清水寺

  • 訪問:11/24 20:30頃(夜間拝観)
  • 拝観料:400円(昼夜問わず)

平日の受付終了間際なら多少マシかなとは思ったが、とにかく人が多くゆっくりはできない。超有名だからというだけでなく、他と比較すると夜間拝観料が安く、京都駅から近めだということも多くの旅行客が来やすい要因になっていると思う。人が多すぎることに対する文句はあるが、実際見て、お〜、とはなるので満足感は得られそう。

よくtwitterとかで見る写真が撮りたければ人混みの一員となるしかない。

清水の舞台と紅葉

音羽の滝のあたりから見上げる

高台寺

  • 訪問:11/30 20:30頃(夜間拝観)
  • 拝観料:600円

タイミングがよかっただけかもしれないが、思ったより人が少なかった。また、21:30まで拝観を受け付けており京都市内では(自分が調べた中では、24時間門が開いているような所を除いては)最も遅くまで拝観受付をしている寺院/神社だった。紅葉シーズンに旅行などで訪れた際には、色々見終わった後で更にここで夜間拝観していくという芸当が可能となる。

方丈前の枯山水庭園にちょっとしたプロジェクションマッピングがされていたり(波紋が描画されていた)、(仏教音楽でない)音楽が流れているエリアがあったりなんとなくチームラボみを感じた。アンドロイド観音とかやっているだけある。

臥龍池に映る紅葉が良かった。ちなみに、畳に座って落ち着くわね〜とかなる庭もいいですが、こういう歩いて色々見れる庭の方が個人的には好きです。

拝観順路の終わりの方に竹林があるのもオツだと思う。嵐山以外だと珍しい気がする。

臥龍池に映る紅葉

雰囲気のよい境内

竹林

高台寺塔頭 圓徳院

  • 訪問:11/30 21:30頃(夜間拝観)
  • 拝観料:500円

おそらくここも高台寺に倣ってか拝観の受付終了が21:30と京都市内で最遅。

長方形の折り畳まれたパンフレットに加え(これは渡されず自分で持っていく形式だったかもしれない)、新型コロナウイルス疫病退散と書かれた御朱印札をもらった。

受付のところから入るとすぐ南庭があるが、そこから建物に上がると思ったより先が長い。最後に北庭がある。自分が最後の拝観者だったので北庭の前に座ってぼーっとゆっくりしていった。

南庭

北庭

南禅寺

  • 訪問:随時(普段の散歩コースの終点のため)
  • 拝観料:なし(庭園、山門に入っていないため)

この記事に入れるか微妙だが一応行ってはいるため項目に入れた。

散歩コースの終点なのでいつでも行くだろうと思って(ただし行くのは夜で真っ暗なため紅葉はよく見えない)毎年紅葉の時期の写真を撮り忘れる。今年も撮り忘れた。

定番ですが、参道の山門前の左右に紅葉が生えてる感じが良いと思う。

南禅寺塔頭 天寿庵

  • 訪問:11/26 13:30頃
  • 拝観料:400円

わざわざ塔頭にお金払ってまで行こうという人は少ないのか外よりは空いていた。

本堂の前の庭は散っていたが池のある広い南庭は楽しめた。

本堂から見える南庭の紅葉

本堂前庭

書院南庭

南禅寺塔頭 南禅院

  • 訪問:11/26 14:00頃
  • 拝観料:400円

けいおんのOP等でも有名になった南禅寺水路閣の奥にある。

天寿庵と同じく、わざわざ塔頭にお金払ってまで行こうという人は少ないのか外よりは空いていた。

池をぐるっと1周取り囲むような形になっている。

南禅院

ちなみに、昨年は南禅寺塔頭大寧軒というのに行っておりこれで3つの塔頭を訪問したことになるが個人的な好みとしては大寧軒>天寿庵>南禅院かな、というところです。

永観堂

  • 訪問:12/1 20:30頃(夜間拝観)
  • 拝観料:600円

昼間は人でごった返しているが、平日の夜間拝観終了間際に行ったら混んでいなくてゆっくり見ることができた。昼間に来たことがないので一度行ってみたいと思う。

御影堂の前

放生池

帰り道の手前

真如堂

  • 訪問:11/28 14:30頃
  • 拝観料:なし(有料エリアは存在するが行かなかった)

そこそこ人はいる。三重塔と紅葉が映える。本堂の横や裏なんかも紅葉が良い感じになっていた。けっこう好き。

三重塔と紅葉

金戒光明寺

  • 訪問:12/5 20:00頃(夜間拝観)
  • 拝観料:1000円

個人的に最も好きな山門を持つ寺。受付終了ギリギリに行ったので空いていた。ライトアップ最終日だった。大体の夜間拝観は建物前にテント張ってたりとか明らかな受付があるのでわかりやすいが、ここは山門の方から登ってきた時に手前側に目に入ってくる昼間使っているであろう拝観受付的な看板がついてるテントが使われておらず、その奥の御影堂の中に受付があり、パッと見で若干わかりづらい(後述の靴袋渡してくれる人がいるとはいえ、手前のテントで隠れている)。その手前で靴袋持ってない人は紙袋が渡される。その際に志納金的なものをお願いされるのでケチは靴袋を持っていくといいと思う。

法然の一生を庭という形で表現されているらしい。手前からみるとグラデーションが綺麗。見頃は過ぎていたのでまずまずという感じだった。

山門

紫雲の庭

哲学の道

  • 訪問:12/9 6:30頃
  • 拝観料:なし

散歩コースというか家の目の前にあるのでいつでも行けはするが写真の撮影日を訪問日とした。紅葉は散りかけ。早朝に行くと気分がシャキっとする気がするが大体早朝に行く時は徹夜明けなのでシャキっとはしたくない気もする。

思ったよりまともな写真を撮っていなかったが銀閣寺寄りだとこの辺が好きかなというところを載せておく。実際には南禅寺寄りのところの方が紅葉はよく見れる。

哲学の道

安楽寺

  • 訪問:11/26 15:30頃
  • 拝観料:500円

疫病の影響で時短となり10時開門16時閉門になっていた。紅葉がよく見えるのは入り口のところ。

タイミングがよく30分に1回やっているらしいお寺の成り立ち的な話をお坊さんから聞くことができた。面白かった。

安楽寺

法然院

  • 訪問:12/9 7:00頃
  • 拝観料:なし

早朝の散歩のゴールは大体ここに設定している。個人的に雰囲気が好きなところ。だいぶ散ってきてはいた。

参道

境内

詩仙堂

  • 訪問:11/29 14:00頃
  • 拝観料:500円

境内はあまり広くない。以前初夏の朝に行った時は自分含めて3人くらいしかいない状態で、静かな庭に響くししおどしの音が趣深いなあと思っていたのだけれど、あまりに人が多かったので趣も何もなくなってしまった。庭をぐるっと歩きそそくさと退散した。

詩仙堂

ししおどし(詩仙堂はししおどし発祥の地)

曼殊院

  • 訪問:11/26 18:30頃(夜間拝観)
  • 拝観料:600円

今年で夜間拝観が最後ということらしかったので夜に行ってきた。急な坂の上にあり、かなりきつい。

建物の中が広い。雰囲気は良いが、紅葉を見るという点では微妙だった。外の紅葉は見頃な感じだった気がする。

枯山水庭園

鷺森神社

  • 訪問:11/29 13:30頃
  • 拝観料:なし

参道の紅葉が良い。住宅街に溶け込んではいるが、昔からある伝統があって威厳ある神社感(?)があるのが良い。

参道

拝殿

なお、ここで経年劣化で買い換えないとなあと思っていたチャリがパンクして終了した。

叡山電車もみじのトンネル

  • 利用:11/26 出町柳19:15発の便、鞍馬21:23発の便(利用区間:修学院 - 貴船口
  • 運賃:380円x2

貴船神社のライトアップの時期にあわせて叡山電車も市原-二ノ瀬の間のもみじのトンネルをライトアップしている。貴船神社に行く場合は大抵の場合は叡山電車を使うのでどの便も混んでいると思われるが、空いているとすれば出町柳発の貴船神社のライトアップが終了した後の時刻に貴船口あたりに到着する便(=ライトアップしてくれる電車の終電)かなあと思う(貴船神社に行かずわざわざこれだけを見るためor通勤通学の帰宅のために乗る人は少ないだろうという推測、ライトアップしてくれる終電の出町柳行きは貴船神社で楽しみ終わった人がいっぱい乗る、しかも1両なので混む)。

もみじのトンネル

貴船神社

  • 訪問:11/26 20:00頃
  • 拝観料:なし

紅葉は散っていたのでライトアップを楽しむ感じになっていた。雪が降った時は毎年行くのだが、ライトアップ時に訪問するのは初めてだったのでこれはこれで良いなと思った。

鳥居

参道 紅葉は終了していた

境内

裏参道

京都御所

  • 訪問:12/3 14:00頃
  • 拝観料:なし

帝の住居、道もデカいし木もデカい。

学習院発祥の地のイチョウ

下鴨神社

  • 訪問:12/12 7:00頃
  • 拝観料:なし

京都で一番遅く紅葉する場所。紅葉シーズンの終わりの早朝に散歩しに来た。馬場ではじじばばさん達が朝の体操をしていた。

紅葉橋付近

参道

馬場

境内

神護寺

  • 訪問:11/7 18:30頃
  • 拝観料:800円

神護寺のライトアップが11/5,6,7の3日間だけということを11/7の夕方に知ったので急遽バスに乗って行ってきた。京都の山の外れにあるので普通に1時間くらいかかる。家出た時間がギリギリ過ぎて拝観受付終了18:30前に到着する終バス(二条駅から神護寺のある高雄地区への臨時直行便)で18:20に到着。

google mapで調べると何故か変なルートを案内されて10分では着けないことになったが、以下のルートを早歩きでバス停からひたすら下り続けること5分程度。ちょうど以下のルートの終点あたりに夜間拝観のチケット販売をしている場所がある(おそらく拝観終了=チケット販売終了だと思う)。

チケットを購入できたらそこからはひたすら上り続けて境内に入ることになる。

JR東海のひかりの京都とかいうイベントもやっていたようで竹灯籠が設置してあった。ライトアップされる紅葉と、街外れのおかげで真っ暗な空とのコントラストがとても良かった。

金堂

階段の上から

大覚寺

  • 訪問:12/3 15:00頃
  • 拝観料:500円(お堂エリア)+300円(大沢池エリア)

紅葉を見るという点では大沢池エリアだけでいいと思う。公式ホームページを見ると、全部回るとお堂エリア60分+大沢池エリア60分かかるみたいなことが書いてあるが、よっぽどじっくり見ない限り1時間あれば回れるはず。実際僕はお堂エリア20分+大沢池エリア25分で回った。

百人一首藤原公任が詠んだ名古曽滝の跡を見ることができてよかった。

池の周りを散策して彩りに秋を感じた。

もみじロード

大沢池

宝筐院

  • 訪問:11/30 12:30頃
  • 拝観料:500円

拝観方法が券売機で買ったチケットをおっちゃんに渡すスタイルだった。

入り口の門をくぐって出ると一面の紅葉が目に飛び込んでくる。自然にヤバって言ってしまった。今期で最も良かったスポットはここだと思います。紅葉に包まれたい人はここに行きましょう。

宝筐院(入口付近)

宝筐院(境内中程)

祇王寺

  • 訪問:11/30 11:30頃
  • 拝観料:300円

境内がコンパクトなので混みやすいかもしれない。散り紅葉がきれい。苔が有名なところなのでいろんな苔が並んでるコーナーがあった。

境内

山門

二尊院

  • 訪問:11/30 11:00頃
  • 拝観料:500円

散り始めてはいたがまだまだ赤かった。展望台は常寂光寺よりもいいかも。

紅葉の馬場

展望台からの右京の街並み

常寂光寺

  • 訪問:11/30 10:30頃
  • 拝観料:500円

境内散策が楽しい。満足度が高い。

仁王門を後ろから

鐘楼

石段

竹林と紅葉林

嵯峨野トロッコ列車

当日17:30頃に行ったが普通に窓側の席が取れた。もともと空いてたかもしれないし、キャンセルがあったのかもしれないがラッキーだった。

景色は真っ暗で何も見えない。ライトアップしてある紅葉を楽しもう。写真映えはあまりしないと思う。

普通の紅葉散策も楽しいですが、トロッコ列車に乗って眺めることでのみ得られる栄養があります。

嵯峨野トロッコ

天龍寺

  • 訪問:12/3 16:40頃
  • 拝観料:500円(庭園のみ)

弘源寺を見ていたら庭園以外拝観終了していた。日没直前なので暗い。紅葉も終わりに入ってきているなあという感じだった。この奥で散り紅葉が見られた。

曹源池庭園

宝厳院

  • 訪問:12/3 18:30頃(夜間拝観)
  • 拝観料:600円

苔と散り紅葉が綺麗。散策していて楽しいと思う。昼間も見てみたいと思った。

宝厳院

番外編

清涼寺

  • 訪問:11/30 12:00頃
  • 拝観料:400円

紅葉スポットの1つではあると思うのですが....

空腹でだいぶ判断力が落ちた状態になっていたため境内をくまなく回れず...多重塔とか見ていないし...

ちゃんと見れてないので紅葉散策にカウントしないことにした。

天龍寺塔頭 弘源寺

  • 訪問:12/3 16:20頃
  • 拝観料:500円

たまたま特別拝観とかいって看板出てたので入ってみた。拝観者は自分だけだった。建物内の撮影は禁止だったので写真はないが、近代の京都画壇の絵が襖にペタペタ貼ってあってちょっとした美術館みたいになっており面白かった。

枯山水庭園があり、借景が紅葉しているという形になっていた

紅葉スポットではなく美術館だなあと思うので紅葉散策にカウントせず番外編ということにした。

まとめ

かかった予算

これらすべての拝観(もしくは列車への乗車)にかかった金額は...

15590円

でした。移動に市バス使ってるので2万円はいかないにしてもそれくらい使った計算になりますね。

行けなかったところなど

頭の中にはあったり計画してたりはしたけれど行かなかったところも挙げるとたくさんあります

  • 山科地区全般(遠いため)
  • 大原三千院(遠いため)
  • 岩戸落葉神社(遠いため)
  • 赤山禅院、瑠璃光院などの一乗寺修学院地区(行くつもりだったがチャリが壊れて行く気がなくなったため)
  • 仁和寺などその辺の地区(時間がなかった)
  • 北野天満宮(一昨年紅葉シーズンに訪問したためパスした)
  • 建仁寺(夜間拝観行こうとしたら予約制だった)

などなど...

結果として本気度70%くらいだったと思う。

感想的な

一番よかったと思うところと満足度が高めだったところを下に挙げる。あくまで紅葉という観点から見ているもので、その寺社仏閣自体が微妙と言っているわけではないことに注意してほしい(例えば下で詩仙堂は挙げていないが昔初夏に行った時はとてもよかったし、清水寺はお盆に行った時の夜間拝観もよかった)。行った時期やタイミングが悪かっただけという可能性も十分ありうる。

  • 一番よかったところ

京都で紅葉見るならどこがいい?って聞かれたらこの2つを勧めると思う。

  • 満足度高めなところ
    • 嵐山地区:宝筐院以外だと、常寂光寺、宝厳院、大沢池、祇王寺の順
    • 東山地区:東福寺(早朝拝観で混んでなかったってのがデカいと思う)、高台寺
    • 岡崎・哲学の道あたりなど:真如堂南禅寺永観堂は昼間に見ると評価上がりそう)
    • 一乗寺修学院あたり:強いて言えば鷺森神社 上に挙げてるものに比べるとどうかな〜と思う、このエリアは気になっていたスポットが何個もあるのに、実際行ったスポット数が少ないのは反省点

地区としては嵐山が好きかなーという感じ

寺社仏閣の新規開拓とか、かなり昔に行ったところの再訪問ができたりとかして、この機会に色々行ってよかったと思う。

来年もどこか行くぞ〜


2022年版はこちら

potaxyz.hatenablog.jp

*1:紅葉を楽しむ列車も1ヶ所として計算

ASLR

例のリレーブログ*1の時間です。前の僕の記事はこれ、前回の方のブログはこちらになります。

今回僕に与えられたテーマはASLR。聞いたことないワードだったので毎度のごとく少し調べて、今回は試してみたことを書いていこうと思う。

ASLRとは

ASLR(Address Space Layout Randomization、アドレス空間配置のランダム化)とは、重要なデータ領域の位置(スタックやヒープの位置など)を無作為に配置するOSのセキュリティ技術のこと。現在よく使われているOSにはこの機能が標準搭載されている。

なんでそんなことするんだ、と思うかもしれないが、この技術は例えばスタックバッファオーバーフロー攻撃に有効な防御手段となる。入力サイズの上限の指定ができなかったり、その指定を怠った時に、大量の入力をすると、スタック領域を超えた場所にあるデータが上書きされてしまうことがある。これを悪用して呼び出し元のプログラムへの戻りアドレスであるリターンアドレスを書き換え、別のプログラムを実行させるといったことができてしまう。これに対してアドレスのランダム化を行えば、攻撃の成功率を下げることができる。

ASLRを確認する

ASLRあり

実際にASLRがどう動いているのか確かめてみる。今回は床に転がっていたraspberry piを使う。

pi@raspberrypi:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 9.11 (stretch)
Release:    9.11
Codename:   stretch

適当なコードを実行させてメモリマップを見てみる。

pi@raspberrypi:~$ sleep 100 &
[1] 996
pi@raspberrypi:~$ sleep 100 &
[2] 997

100秒スリープするプロセスを2つ走らせてみた。これら2つのメモリマップを確認してみる。

pi@raspberrypi:~$ cat /proc/996/maps
00010000-00016000 r-xp 00000000 b3:07 391782     /bin/sleep
00025000-00026000 r--p 00005000 b3:07 391782     /bin/sleep
00026000-00027000 rw-p 00006000 b3:07 391782     /bin/sleep
002d0000-002f1000 rw-p 00000000 00:00 0          [heap]
76d3c000-76e55000 r--p 00000000 b3:07 14166      /usr/lib/locale/locale-archive
76e55000-76f7f000 r-xp 00000000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f7f000-76f8e000 ---p 0012a000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f8e000-76f90000 r--p 00129000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f90000-76f91000 rw-p 0012b000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f91000-76f94000 rw-p 00000000 00:00 0 
76faa000-76faf000 r-xp 00000000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76faf000-76fbe000 ---p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76fbe000-76fbf000 r--p 00004000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76fbf000-76fc0000 rw-p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76fc0000-76fe1000 r-xp 00000000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
76fee000-76ff0000 rw-p 00000000 00:00 0 
76ff0000-76ff1000 r--p 00020000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
76ff1000-76ff2000 rw-p 00021000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
7ec25000-7ec46000 rw-p 00000000 00:00 0          [stack]
7eff0000-7eff1000 r-xp 00000000 00:00 0          [sigpage]
7eff1000-7eff2000 r--p 00000000 00:00 0          [vvar]
7eff2000-7eff3000 r-xp 00000000 00:00 0          [vdso]
ffff0000-ffff1000 r-xp 00000000 00:00 0          [vectors]
pi@raspberrypi:~$ cat /proc/997/maps
00010000-00016000 r-xp 00000000 b3:07 391782     /bin/sleep
00025000-00026000 r--p 00005000 b3:07 391782     /bin/sleep
00026000-00027000 rw-p 00006000 b3:07 391782     /bin/sleep
01562000-01583000 rw-p 00000000 00:00 0          [heap]
76cc3000-76ddc000 r--p 00000000 b3:07 14166      /usr/lib/locale/locale-archive
76ddc000-76f06000 r-xp 00000000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f06000-76f15000 ---p 0012a000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f15000-76f17000 r--p 00129000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f17000-76f18000 rw-p 0012b000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f18000-76f1b000 rw-p 00000000 00:00 0 
76f31000-76f36000 r-xp 00000000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76f36000-76f45000 ---p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76f45000-76f46000 r--p 00004000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76f46000-76f47000 rw-p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76f47000-76f68000 r-xp 00000000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
76f75000-76f77000 rw-p 00000000 00:00 0 
76f77000-76f78000 r--p 00020000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
76f78000-76f79000 rw-p 00021000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
7e91a000-7e93b000 rw-p 00000000 00:00 0          [stack]
7e98f000-7e990000 r-xp 00000000 00:00 0          [sigpage]
7e990000-7e991000 r--p 00000000 00:00 0          [vvar]
7e991000-7e992000 r-xp 00000000 00:00 0          [vdso]
ffff0000-ffff1000 r-xp 00000000 00:00 0          [vectors]

差分を見てみる。

pi@raspberrypi:~$ diff <(cat /proc/996/maps)  <(cat /proc/997/maps)
4,22c4,22
< 002d0000-002f1000 rw-p 00000000 00:00 0          [heap]
< 76d3c000-76e55000 r--p 00000000 b3:07 14166      /usr/lib/locale/locale-archive
< 76e55000-76f7f000 r-xp 00000000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
< 76f7f000-76f8e000 ---p 0012a000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
< 76f8e000-76f90000 r--p 00129000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
< 76f90000-76f91000 rw-p 0012b000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
< 76f91000-76f94000 rw-p 00000000 00:00 0 
< 76faa000-76faf000 r-xp 00000000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
< 76faf000-76fbe000 ---p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
< 76fbe000-76fbf000 r--p 00004000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
< 76fbf000-76fc0000 rw-p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
< 76fc0000-76fe1000 r-xp 00000000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
< 76fee000-76ff0000 rw-p 00000000 00:00 0 
< 76ff0000-76ff1000 r--p 00020000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
< 76ff1000-76ff2000 rw-p 00021000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
< 7ec25000-7ec46000 rw-p 00000000 00:00 0          [stack]
< 7eff0000-7eff1000 r-xp 00000000 00:00 0          [sigpage]
< 7eff1000-7eff2000 r--p 00000000 00:00 0          [vvar]
< 7eff2000-7eff3000 r-xp 00000000 00:00 0          [vdso]
---
> 01562000-01583000 rw-p 00000000 00:00 0          [heap]
> 76cc3000-76ddc000 r--p 00000000 b3:07 14166      /usr/lib/locale/locale-archive
> 76ddc000-76f06000 r-xp 00000000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
> 76f06000-76f15000 ---p 0012a000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
> 76f15000-76f17000 r--p 00129000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
> 76f17000-76f18000 rw-p 0012b000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
> 76f18000-76f1b000 rw-p 00000000 00:00 0 
> 76f31000-76f36000 r-xp 00000000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
> 76f36000-76f45000 ---p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
> 76f45000-76f46000 r--p 00004000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
> 76f46000-76f47000 rw-p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
> 76f47000-76f68000 r-xp 00000000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
> 76f75000-76f77000 rw-p 00000000 00:00 0 
> 76f77000-76f78000 r--p 00020000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
> 76f78000-76f79000 rw-p 00021000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
> 7e91a000-7e93b000 rw-p 00000000 00:00 0          [stack]
> 7e98f000-7e990000 r-xp 00000000 00:00 0          [sigpage]
> 7e990000-7e991000 r--p 00000000 00:00 0          [vvar]
> 7e991000-7e992000 r-xp 00000000 00:00 0          [vdso]

これから、[heap]から[vdso]まで、ヒープやスタックなどは違うアドレスになっていることがわかる。

もうちょっと直接的に(?)見てみる。C言語のmain関数の中で定義した変数(ローカル変数)はスタックメモリに配置されるので、試しに以下のような適当なローカル変数のアドレスを表示するだけのプログラム

#include <stdio.h>

int main() {
    int x;
    printf("%p\n",&x);
    return 0;
}

を書いて、10回実行してみると

pi@raspberrypi:~$ gcc test.c -o test
pi@raspberrypi:~$ for x in {0..9}; do ./test; done
0x7e9496e4
0x7ee156e4
0x7ea486e4
0x7ed7e6e4
0x7efc56e4
0x7eb376e4
0x7eea06e4
0x7ea146e4
0x7e8196e4
0x7e8a96e4

このように全て異なるアドレスになっていることがわかる。

ASLRなし

Linuxの場合、sudo sysctl -w kernel.randomize_va_space=0とすれば、ASLRを切ることができる。逆にsudo sysctl -w kernel.randomize_va_space=2とすればASLRありの状態に戻る。

ASLRなしの状態で上のsleepコマンドとCのプログラムを走らせてみる。

pi@raspberrypi:~$ cat /proc/1019/maps
00010000-00016000 r-xp 00000000 b3:07 391782     /bin/sleep
00025000-00026000 r--p 00005000 b3:07 391782     /bin/sleep
00026000-00027000 rw-p 00006000 b3:07 391782     /bin/sleep
00027000-00048000 rw-p 00000000 00:00 0          [heap]
76d4a000-76e63000 r--p 00000000 b3:07 14166      /usr/lib/locale/locale-archive
76e63000-76f8d000 r-xp 00000000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f8d000-76f9c000 ---p 0012a000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f9c000-76f9e000 r--p 00129000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f9e000-76f9f000 rw-p 0012b000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f9f000-76fa2000 rw-p 00000000 00:00 0 
76fb8000-76fbd000 r-xp 00000000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76fbd000-76fcc000 ---p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76fcc000-76fcd000 r--p 00004000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76fcd000-76fce000 rw-p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76fce000-76fef000 r-xp 00000000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
76ff9000-76ffb000 rw-p 00000000 00:00 0 
76ffb000-76ffc000 r-xp 00000000 00:00 0          [sigpage]
76ffc000-76ffd000 r--p 00000000 00:00 0          [vvar]
76ffd000-76ffe000 r-xp 00000000 00:00 0          [vdso]
76ffe000-76fff000 r--p 00020000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
76fff000-77000000 rw-p 00021000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
7efdf000-7f000000 rw-p 00000000 00:00 0          [stack]
ffff0000-ffff1000 r-xp 00000000 00:00 0          [vectors]
pi@raspberrypi:~$ cat /proc/1020/maps
00010000-00016000 r-xp 00000000 b3:07 391782     /bin/sleep
00025000-00026000 r--p 00005000 b3:07 391782     /bin/sleep
00026000-00027000 rw-p 00006000 b3:07 391782     /bin/sleep
00027000-00048000 rw-p 00000000 00:00 0          [heap]
76d4a000-76e63000 r--p 00000000 b3:07 14166      /usr/lib/locale/locale-archive
76e63000-76f8d000 r-xp 00000000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f8d000-76f9c000 ---p 0012a000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f9c000-76f9e000 r--p 00129000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f9e000-76f9f000 rw-p 0012b000 b3:07 526355     /lib/arm-linux-gnueabihf/libc-2.24.so
76f9f000-76fa2000 rw-p 00000000 00:00 0 
76fb8000-76fbd000 r-xp 00000000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76fbd000-76fcc000 ---p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76fcc000-76fcd000 r--p 00004000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76fcd000-76fce000 rw-p 00005000 b3:07 11311      /usr/lib/arm-linux-gnueabihf/libarmmem.so
76fce000-76fef000 r-xp 00000000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
76ff9000-76ffb000 rw-p 00000000 00:00 0 
76ffb000-76ffc000 r-xp 00000000 00:00 0          [sigpage]
76ffc000-76ffd000 r--p 00000000 00:00 0          [vvar]
76ffd000-76ffe000 r-xp 00000000 00:00 0          [vdso]
76ffe000-76fff000 r--p 00020000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
76fff000-77000000 rw-p 00021000 b3:07 526228     /lib/arm-linux-gnueabihf/ld-2.24.so
7efdf000-7f000000 rw-p 00000000 00:00 0          [stack]
ffff0000-ffff1000 r-xp 00000000 00:00 0          [vectors]

差分をとってみると

pi@raspberrypi:~$ diff <(cat /proc/1019/maps)  <(cat /proc/1020/maps)
pi@raspberrypi:~$ 

ということでキレイに何も出力されなかったので、全く同じアドレスになっている。

Cのプログラムも先ほど同様10回走らせてみると

pi@raspberrypi:~$ for x in {0..9}; do ./test; done
0x7efff6e4
0x7efff6e4
0x7efff6e4
0x7efff6e4
0x7efff6e4
0x7efff6e4
0x7efff6e4
0x7efff6e4
0x7efff6e4
0x7efff6e4

ということで全く同じアドレスになった。

*1:seccampのグループワークから生まれた企画。リレーブログのルール:前の人がが次の人のテーマを決める

京都発着1周片道切符で行く下呂温泉・富山市街旅行記

はじめに

大学の学祭休み中に統計検定1級を受けてきた。会場として東京or大阪or名古屋が選べたが、大阪会場で変なところに飛ばされるのも嫌だなと思って帰省ついでに名古屋で受けることにした。

名古屋に行って戻るだけではつまらないので、適当にどっか旅行して帰ろうと思い、昔から作ってみたかった切符を発券してもらった。

f:id:potaxyz:20211126233725j:plain
京都発着1周片道切符

前半は特になんということもない帰省して試験受けてふらふらした話、後半が旅行記になります。

統計検定のことはいつか記事にします。多分。

前哨戦(11/20,21)

11/20

実家に帰った。普段は在来線や高速バスだが、今回は切符経路の都合もあって新幹線*1

11/21

統計検定1級を受ける@中京大名古屋キャンパス

統計数理(午前)と統計応用(午後)の試験があるのだが、午後は多分落ちた。詳しい話は結果がわかったらおそらく記事にする。

試験の後、きらら展を見に行った。

f:id:potaxyz:20211126234612j:plain
きらら展 in 名古屋

一昨年は大阪、昨年は新潟で見ているのでわざわざ見に行くこともなかったが、試験で傷だらけの心に効いた。新しく展示に加わっていた『ななどなどなど』の複製原画が面白かった。気づいたら

2万円が溶けた。届くのが楽しみです。

家に帰って流石に疲れたな〜こんな疲れてるのに明日から本当に旅行いくんか〜?と思いながら就寝。

本編(11/22,23,24)

11/22

切符を発券するだけ発券して本当にどうするか何も考えていなかったので名駅ゲートタワー1階のスタバで計画立案。下呂に早く着き過ぎても開いている温泉は少ないのでゆっくりした。

ついでに統計検定のせいで先延ばしにしていた課題(のために講義動画を止めてノート起こし)もちょっとやる。

気が早いね。

スタバを出て色々準備の物品探し。

雨が降っていたが傘がなかったのでコンビニで折り畳み傘を購入。

温泉街でもタオル買えるとは思ったけど一応買っておこうと思って無印良品で適当なタオルを購入。

twitter見てたら北海道行っている人間が多くて僕も北海道気分になりてえ〜と思ったのでどさんこプラザでリポンナポリンを購入。

こんな感じで買い物して名駅でうろちょろしていたのでうまい感じの電車の時間に合わず、昼食たべてから電車乗ることにした。

台湾まぜそば。麺とスープとかがあっておらずハズレでした...55系列だし美味しいと思っていたんだけどなあ

特急代の節約のために名古屋から岐阜は普通電車で移動して、岐阜から特急に乗ることにした。

飛騨川に沿って北上。山岳地帯に入っていくと景色も楽しくなりますね。そこそこ紅葉も見れた気がする。

到着。

湯めぐり手形を買って3箇所を巡ります。

1 水明館

由緒正しき旅館。中がでかい。

2 小川屋

畳風呂が有名。ひのき。サウナに入れなかったのは心残り。

〜休憩〜

下呂プリンを食した。おいしい。

下呂温泉合掌村を見学。

f:id:potaxyz:20211127001748j:plain
合掌。

温泉寺。紅葉のとこだけライトアップしていて他のとこは超真っ暗だった。

f:id:potaxyz:20211127001904j:plain
温泉寺

温泉寺にいました。

夜になったので夜ご飯を食べる。下呂温泉はトマト丼が名物らしいのでそれを注文。鶏ちゃんはまた今度。

トマトが合ってるかどうかは正直わからなかったが美味かったのでヨシ!

3 白鷺の湯

ここは1.2.とは異なり銭湯。お湯が熱め。おっちゃんがフレンドリーだった。今日は終電で富山まで行くんや!そっから何するかは決めとらん笑みたいな旨のことを言ったら変なやつやなガハハと言われた。帰り際は常連のおばさんと一緒に気をつけてな〜って送り出してくれた。また行きたい。

3箇所無事巡ることができた。温泉に入ると本当にリラックスできることがわかった。温泉最高〜!

f:id:potaxyz:20211127002802j:plain
ありがとう下呂温泉

富山に向かう。

20:03発の特急ひだ17号が富山に抜けられる最終。

高山で降りて乗り換え。

猪谷で再び乗り換え。ここでJR東海からJR西日本に会社が変わる。そのせいかホームが対面ではなくて縦(?)移動な感じで若干遠い。

こういう周りに何もないようなローカル区間でぼーっとしているのが楽しい。

猪谷駅ですでに富山市内でびっくりした。

寝てたら西富山だった。

富山駅に到着。

最近駅が新しくなって駅の南北で分かれていた路面電車が繋がったらしい。南北統一。駅が未来的(?)でかっこいい。

ホテル到着。2018年にできたばっかりで綺麗だった。

就寝。

11/23

この日も雨。

市街徘徊したい気持ちもあったがこの日締め切りの課題をやらなければならなかったのでホテルにこもって講義動画を見ることから開始。なんとか提出できた。昼食をとる時間もなく16時ごろになっていた。

とりあえずどこか行こうと思って市内公共交通の一日乗車券*2を買ってガラス美術館へ。

常設展に行ってもよかったが企画展に行った。ガラスにも色々あるんだなあという気持ちになった(小並感)。

路面電車をとりあえず乗り潰すかと思ってガラス美術館の最寄りから南富山駅まで行った。

再び戻って富山市中心街を散歩。

日枝神社なるところをちょっと見たりとか、グランドプラザとかそのあたりの商店街とかを適当に歩いた。

総曲輪(そうがわ)←読めん

石畳に路面電車が走ってるの海外感があっていいです。

一旦富山駅に戻って回転寿司を食べる。

時間が遅かったのでネタが少なく、注文して○○売り切れですって言われるたびにテンションが下がっていった...

富山の魚は美味しいって聞いてたけど思っていたほどではなく、北海道の方が美味しい気がした。タイミングが悪かっただけかもしれないのでもう一度回らない寿司屋とかで検証する必要がある。

再び路面電車に乗って富山大学前まで。

富山大学内を適当に散歩。雨風が強くなる。

終点の富山大学前駅の隣が日本で一番長い駅名のところだった。

実際後ろにトヨタの店がある。

雨風強すぎてこれ以上散歩する気が起きなかったのでホテルに戻る。

11/24

学祭休みが終わり、平日がやってきた。

大学を休んでする観光は最高だと思います。

が、今日も雨。本当は立山アルペンルート行きたかった。

ぐるっとグルメぐりクーポンというものを購入。路面電車1日乗車券にますのすしとか和菓子のお店で交換できるクーポン券2枚(or5枚)がついて1000円(or1500円)というもの。

この日は水曜日で、クーポン券が使える店で定休日になっているところが多く、切符販売所のところのお姉さんが何か目的のお店があるならお勧めできないかもしれないですよと確認してくれた。

とりあえずますのすし1つと引き換えようと思って川上鱒寿し店に行ったが売り切れ...。近くの高田屋に行って引き換えた。あとで食べよう。

富山城へ。

中の展示で佐々成政の手紙の展示会してたんだけど歴史に全然詳しくないせいかふぅ〜んという感じで全然頭に入らなかった。

富山城の天守閣からの眺めは(雨だったというのもあるだろうが)ビルとかが多くあまりよいものではなかった。

ついでにマンホールカードを回収。(下のデザインのものの他に別の場所でも回収した)

昼食。富山ブラックではない?かもしれないが、美味しい醤油ラーメンだった。

岩瀬浜へ。ちょうど雨が止んだ。

岩瀬浜の海。風がクソ強くて砂がめっちゃ当たって足元が舞台とかのスモークみたいになってヤバかったのでちょっと歩いて撤収。

富山港展望台へ。雨が止んだとはいえ立山の方はまだ雲がかかっていてあまり見えなかった。

北前船の廻船問屋の森家、馬場家を見学。でかい家。

クーポンの残り1枚を引き換えようと思ったが売り切れになっていたのでここではスルー。

富山駅に戻る。駅の近くでクーポンを適当にどらやきと交換しておく。

富岩運河環水公園へ。

ちょっとのんびりして富山駅に再び戻る。

16:57の新幹線で帰るので時間には余裕があり、途中でどこかに寄って夜ご飯を取るかけっこう迷ったが、疲れたのでそのまま帰ることにした。

各所へのお土産を購入。

新幹線に乗車。

22分で金沢駅に到着。

ノルマ達成。写真だけ撮ってすぐ戻る。

はやい。

朝貰ったますのすしがリュックに入っているのを思い出したのでここで食べる。当然おいしい。

気づいたら寝ていて起きたら山科。

お疲れ様でした。

おまけ

帰りについでに清水寺に立ち寄った。人はめっちゃいた。

お土産

*1:在来線だと岐阜-名古屋が被る、まあ代わりに関西本線使えばいいけど

*2:路面電車だけではなくバスとか地鉄の一部も使える

BGPとそのセキュリティ対策

はじめに

例のリレーブログ*1の時間です。前の僕の記事はこれ、前回の方のブログはこちらになります。

potaxyz.hatenablog.jp

amame.hateblo.jp

今回のテーマは『BGPのセキュリティ』です。今回もこの分野に関する知識は持ち合わせていなかったので、ゼロから調べたことを簡単にまとめて(まとまってるか?)紹介します。

BGPとその問題点

BGPとは、Border Gateway Protocolの略で、AS(自律システム:単一のルーティングポリシーによって管理されたネットワークの集まり)間の経路制御プロトコルです。

AS同士は、ASに割り振られているAS番号を利用してネットワーク上での組織間の経路情報を交換しますが、送られてくる経路情報はいちいち認証せずに基本的に信用する仕様になっています。

そのため、BGPルータで誤ったネットワークの設定がなされると、その正当性の確認なしにその経路情報が伝搬して、IPパケットが到達しなくなったり、転送先や経路が変わってしまうことがあります。このように通信経路を結果的に乗っ取ってしまうことを(意図的かどうかにかかわらず)BGPハイジャックと言うようです。

この仕様によって、例えば

  • 2008年にはYouTubeの経路情報が乗っ取られたり(これは設定ミスが原因らしい)

https://www.ripe.net/publications/news/industry-developments/youtube-hijacking-a-ripe-ncc-ris-case-study

  • 2014年にはBitcoinのマイニングプールへの経路をハイジャックする攻撃が行われて報酬が横取りされたり*2

https://www.secureworks.com/research/bgp-hijacking-for-cryptocurrency-profit

  • 2018年にもAmazonのRoute53向けの通信が別のサーバーに転送されて仮想通貨が盗まれる

https://doublepulsar.com/hijack-of-amazons-internet-domain-service-used-to-reroute-web-traffic-for-two-hours-unnoticed-3a6f0dda6a6f

といったような被害が出ています。

BGPのセキュリティ対策

RPKI

上であげたような問題を解決するために、BGPのセキュリティ機能としてRPKIというものの利用が考えられました。

RPKI(Resource Public Key Infrastructure)とは、IPアドレスやAS番号といった番号資源の割り振りと割り当てを証明する公開鍵基盤です。

これを用いることで、ROAと呼ばれるものの生成ができます。

ROA(Route Origination Authorization)とは、IPアドレスとAS番号の組み合わせに対し、それが正しい組み合わせであることを示す電子署名が施されたデータです。

ROAを利用すると、オリジン検証というものを行うことができるようになります。

オリジン検証:あるIPアドレスの経路情報が本来の経路情報の広告元によって経路広告(広告:動的ルーティングによりルート情報を伝えること)されたものかをROAと比較して検証します。

この検証によって、本来と異なるASがIPアドレスを使い始めた場合に検知ができます。

BGPsec

RPKIだけで問題は解決するように見えます*3が、厳密には、ニセのBGPルーティング情報を送るときにASパス(ルート情報がどのASを経由してきたのか分かるAS番号のリストを示すアトリビュート)の末尾に正しいAS番号を追加すればオリジン認証を突破できてしまうようです。

BGPsecは、誤った経路情報を以下の2つの仕組みで検出する仕組みです。

  • オリジン検証:上で説明した通りです*4

  • ASパス検証:IPパケットの伝送経路が正しいか確認します。ASパスが途中で変えられてしまったことが検知できます。

これにより経路情報の保証がほぼ完全になされますが、前のASが作った署名にも署名がなされている、といった署名のチェーンが起きていたりして署名チェックの負荷が大きく、BGPルータに大量のメモリが必要となるという問題があり、現状あまり普及していないようです*5

おわりに

今回BGPについて色々調べてみて、誤操作によって問題が起きてしまうこともよくあったり、脆弱性を突いた攻撃もけっこうなされているんだなあと勉強になりました(小学生並の感想...)。

次回の方はこちらで更新予定です。

参考文献

BGPハイジャックの怖さを、目で見てみよう:可視化ツールで学ぶWAN入門(1) - @IT

[招待講演] RPKIとルーティングセキュ リティ技術BGPSECにおける課題と展望

インターネット用語1分解説~リソースPKIとは~ - JPNIC

インターネット用語1分解説~BGPsecとは~ - JPNIC

BGP security: the BGPsec protocol | Noction

*1:seccampのグループワークから生まれた企画。リレーブログのルール:前の人がが次の人のテーマを決める

*2:この手の攻撃はよくされているようです:BGP Hijacking for Cryptocurrency Profit | Secureworks

*3:誤操作によるBGPハイジャックが大半のようなので、攻撃のことを考えず意図的でないBGPハイジャックを防ごうと思えばこれで事足りているらしい?https://rpki-nstgt-test.readthedocs.io/ja/latest/about/faq.html

*4:オリジンだけ見ていて途中の伝送経路はちゃんと見ていないという理解をしています。

*5:これの改良を試みている論文もあります:https://ipsj.ixsq.nii.ac.jp/ej/index.php?active_action=repository_view_main_item_detail&page_id=13&block_id=8&item_id=177521&item_no=1

EMアルゴリズムをirisデータセットで試す(PRML 9-2)

前期に引き続いてPRMLの自主ゼミをしているわけですが、後期に入って下巻に突入。本を参考にEMアルゴリズムを実装してみることになった。

PRMLの9章2節に混合ガウス分布EMアルゴリズムを用いて最尤推定する手順が記されており、それを元に実装した。

以下のリンクの枠組みだけは参考にしつつ、中のコードはできるだけ自分で考えて書いた。とりあえず動かすことを目標にしていたので計算量的にかなり無駄な計算をしていたり綺麗ではないコードではあるが...

qiita.com

実装したやつ

gist.github.com

まずは本にあったようにold_faithfulとかいう間欠泉データに対して試してみた。

ゼミのメンバーに分散共分散行列のプロットをしている人がいたので僕も描画してみようと思ってネットでコード探してほぼコピペして使ったりしてる。

分散共分散行列の逆行列が存在しない場合があるので適当に小さい単位行列を足す処理を入れている。

初期値にけっこう依存するけどうまく初期値が選ばれるとちゃんと分類される。

f:id:potaxyz:20211104002418p:plain
old faithfulデータにEMアルゴリズムを適用

次にirisでやってみているメンバーがいたので僕もやってみた。

こっちもけっこう初期値に依存するが、うまく初期値が選ばれていれば良い感じに分類された。

4次元のデータセットなので2次元に射影したやつにプロットしている。

EMアルゴリズムを試した結果。

f:id:potaxyz:20211104002811p:plain
irisデータセットEMアルゴリズムを適用

答えのラベルがirisデータセットについてるので正しい分類もプロットしてみた。

f:id:potaxyz:20211104002840p:plain
irisデータセットの正解

目視ではわからないので正解と不正解のプロットをしてみた。今回の場合は正解率が97%くらいになっててうまく分類できた。(うまくいかない時は30%台になったりほぼ2クラスにしか分類されなかったりとかするのでランダムに選んでる初期値が良い感じになってくれるまで何回か試しています)

f:id:potaxyz:20211104002956p:plain
irisデータセットの正解率

こうやって実際に実装してみると面白いですね!