ポタージュを垂れ流す。

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

続 セキュリティ・キャンプフォーラム2022に登壇しました

前回の記事の続きです。が、フォーラムは関係なくただの旅行記です。

potaxyz.hatenablog.jp


久しぶりの東京ということで今回の旅行はかなり楽しみにしていました。

フォーラムの前日の夜から移動を開始。まずは東京とは逆方面の大阪に向かいます。

わざわざ大阪に出向いたのは...そうです、サンライズに乗りたかったからです!

6年前程にも一度出雲市→東京で乗車したことはありましたが、今回は途中大阪からの利用です。寝台特急って憧れますよね〜

前回はおそらくシングルだったと思うんですが、今回は席が空いていなかったというのもあって、B寝台の1人用個室としては一番高いシングルツインを利用。2人で使うこともできるので、2人用の準備がしてあります。

1階部分はイスと机に組み替えることもできます。

1人で使うには広いので贅沢に空間を使うことができました。起きたら発表の本番なので早く寝ます。


おはようございます。

肌寒くてなかなか布団から出られませんでした。気づいたら函南トンネルを抜けて熱海にいました。この辺で起き上がったと思う。

歯磨きなどを済ませて部屋に戻ります。

横浜駅停車中

PCR検査をしました。ちゃんと陰性でした。実際にはPCR検査に失敗していて、というのもあるはずのパーツが足りませんでした。フォーラム会場で雑談でこの話したらパーツ持ってる人がいたのでそこでやっと判定ができました。

歯磨き後とか食事後30分は検査ちゃんとできないかもって書かれてたから結局パンはここでは食べれず東京駅の外で食べることに...

パーツなくてPCR検査できなくね?ってなって困惑していたら東京駅に到着してしまいました。別のパーツに本体を押し込むみたいに書いてあったので、なんとかならないかと一生懸命外の石畳に検査キットを打ち付けていましたが、検査結果は出てくれませんでした。

suicaがメインのエリアではなかったので入れていなかったのですがここで入れてみました。都区内パスを買っていますが結局ほとんど使っておらず金をドブに捨てる結果に...

フォーラムまで時間を潰します。

スタバの都道府県埋めも兼ねて会場のビルの1階に入ってたスタバに入ります。スターバックスリザーブとかいうのやっててかなりいい店舗らしいですね。

会場 丸の内オアゾ でかい

パソコンを開いて発表スライドの確認(喋ることを決める)、別件でtexでせこせこと数式を書いてpdfを作ってメールを投げたりしていました。

そんなこんなしてたら昼ご飯を食べた方がいい時間になってきました。google mapで自分が目つけたご飯屋として打鋲してたのが一箇所しかなかったのでそこに行くため秋葉原へ。30分後には会場にいないといけないみたいでちょっとシビアだな、と思いつつ行ってみたら普通に並んでたので諦めてそのまま戻ってきました。仕方ないのでnewdaysでおにぎり2つ買って会場で食べました。

スカイツリーがよく見える

発表した話は前の記事の通りです。

焼肉会も解散し、ホテルへ向かいます。

夜の東京駅

皇居周辺を歩きましたが、大都会の夜景を久しぶりに見たなあという気持ちに。

twitterで見かけて泊まってみたいなあと思ったところです。説明はツイートの通りです。

チェックインして部屋にあったチラシ?読んだらチェックイン時刻とされている21時は普通に過ぎててちょっと申し訳なくなりました。一応門限(ホテルなのに門限って何だ)とされている24時より前に来たからセーフなのかな。

おやすみ


朝食を食べます。

洋朝食

和食も選べましたが洋食の方がそれっぽいと思ってそうしてみました。卵料理もスクランブルエッグと目玉焼きとオムレツで選べますが、一番それっぽいオムレツにしました。他の宿泊客の方もオムレツばかり選んでいたようで、料理してる方とか案内してくださった方からの今日はオムレツしか出ませんね、という会話が聞こえてきました。

飲み物が2つ並んでいるが、飲み物もいくつか提示されて、そこから好きなだけ選べるようになっていました。リッチだね。

朝食の後は館内を軽く探検しました。3階ではウエディングフェアやってたりとか、4階には読書室があったりしました。学士会会員専用の囲碁将棋部屋とかもあったし、旧帝大の七大学紹介コーナーとかもあった。さすがだと思う。更衣室ってどう使うんだろう。

チェックアウトをして、いくつかやりたいと思っていたタスクを遂行していきます。

麹町にあるセブンイレブンに来ました。本社が近いためか、かなり設備も充実してたし、商品がバカみたいに品揃えよくて驚きました。

クリック感なくてアレかなあとか思ってたんですが、意外と違和感なかった気がしました。普及するんでしょうかねえ...

ネットミームの巡礼

こんなの売ってるんですね

お茶の水でクラシックCDを漁りました。思い立った時にたまにやっています。今回はショパンエチュード集とシューマン子供の情景クライスレリアーナが入ってるやつを買ってみました。サブスクでも聞けるけど。

秋葉原で麺を食べました。おいしかったです。

チームラボボーダレスに行こうとしていたのですが、思った時間に予約を取るのに失敗してかなり時間を無駄にします。

仕方ないので東京駅に戻って先んじてお土産を集めておきます。が、丸の内側と八重洲側を間違えたりしてここでもかなり時間を無駄にして、乗る電車ギリギリとなっていました。京葉線ホーム遠すぎやねん。

ちなみに買ったお土産は東京カンパネラのバウムバーと、東京ひよこの紅茶ひよこ3個入りです。個人的に好きなので東京行くといつも東京カンパネラと東京ひよこの商品を買ってしまいます。

無事時間内に到着できました。

写真をバシャバシャ撮りまくっていました。デジタル感ある空間に没入できるのは楽しいですね。光とか鏡とかがこれでもかというほど配置されています。

個人的には最後の2枚の空間が好きです。

京都でチームラボがなんかやってるといつもこのタマゴが置いてあるイメージがあります。

1階は見て没入して楽しむ感じでしたが、2階は子供たちが遊んだりとか、カップルとか友人複数人向きな感じだったかなと思います。

技術好き人間としては裏でどうやって制御してるのかとか、プロジェクターの使い方とかが気になったりしました。物体動かしてそこにマッピングしてる光移動させたりとかしてるのに何使ってんだろう。

なんだかんだ2時間いかないくらいはうろうろしていたと思います。満喫したので京都にこれで帰ってもいいですが、今期は北海道に行くことができずフラストレーションが溜まっているので、ここで北海道を作ろうと思います。

新宿に向かいました。ウェルシアではセイコーマート商品をいくらか扱ってくれているのですが、関東ではその扱っている商品数が多く、パスタやヨーグルト等を扱ってくれているので、新宿大ガード近くのところでそれらを購入しました。

ついでに駅弁の深川めしを買っておきました。

池袋にどさんこプラザがあるので、そこでジュース等を購入します。

ここの導線はかなり反省しているのですが、実はわざわざ新宿と池袋に寄る必要はなく、東京駅に戻ればよかったです。東京駅付近でもセコマパスタを扱っているウェルシアはあるし、どさんこプラザは有楽町にもあります。ここでもかなりの時間をロスしました。

なんだか名残惜しいので山手線を時計回りに半周して時間をかけて東京駅に戻ります。

タスクリスト

途中で思いついたことやったりとかもしましたが、ある程度タスクは遂行できたかな?とはいえ、定休日だったりとか、友人が体調崩してしまっていたりとかでどうしようもないものもありましたが...

羽田空港は単純に遠いので次回に持ち越しです。

また行きます。

おいしかったです。東京で買ってみたい駅弁はいくつかあるのですが、今度はチキン弁当を買ってみようと思います。

新幹線に乗る機会も少ないだろうと思ったので、シンカンセンスゴイカタイアイスを買ってみました。スプーン全く刺さりませんね。

あっという間に京都に帰ってきてしまいました。

楽しい週末でした。

ちなみにですが、この土日の前後は別件で体験型インターンをしています。その記事も近いうちに書こうと思います。

セキュリティ・キャンプフォーラム2022に登壇しました

セキュリティ・キャンプフォーラム2022に登壇してきました。

www.ipa.go.jp

本名と顔を開示 下ネタも呟くtwitterアカウントとも結びついてオワリです

ちなみに親にはバズったツイートのせいで既にバレてるのでそこは問題ないです

話したこと

セキュリティキャンプフォーラムは、一番上のリンクにある通りですが、修了生の立場でいえば今どんなことしてますとか交流したりするような場です。初めはそんなのもあるんだ〜くらいでしたが、主にリレーブログをするのに連絡し合ったりとか活動しているdiscordチャンネル上に、セキュリティキャンプの運営側の方から発表してみませんか?というお誘いの投稿がされ、現地で登壇したい発表者は交通費を出してくれるようだったので、せっかくなら東京に行きたい!ということで、現地で発表することにしました。旅行オタクは旅費が出るというのならば手段は選びません。なお、フォーラム自体はオンラインで、発表者は現地に行くことも可能という形式でした。

内容なんですが、僕のブログを読んでくれている方なら度々見ているかもしれない『例によってリレーブログの時間です!』で始めてる一連のリレーブログについての話をしてきました。ちなみに、僕の前の記事はこれになります。記事のメインの内容の下につけたこれまでの記事一覧のところに飛ぶようになっていると思います。

セキュリティキャンプのグループワークってどういう企画?ってところから始めて、リレーブログをするに至った経緯、リレーブログしていてよかったことと、簡単に記事の紹介をしました。

リレーブログって気づいたら更新が止まってしまうことがよくありがちなイメージなんですが、我々のグループはなんだかんだもう半年近くも続いており、記事の数も2022/3/14現在で24個もあります。正直自分もここまで続くことになるとは思っていませんでした...。

しかも、セキュリティキャンプでのグループワークの中で継続しているチームが我々だけっぽい(もちろん、グループワークをきっかけに個々としては活動を継続しているような方もいるとは思いますが)。

なんでこんなに続けられているのか、って考えられる要因としては、「前の人に次の人のテーマを指定して、それに従った内容の記事を書く」という縛りがちょうどいい感じの縛りになってるのかなあとは思います。皆さんそれなりに知識欲的なものもあるので、何かしら調べて記事を書き上げてくださいますし、僕もそうしています。知らないテーマが振られがちではありますが、高度なことを書くのをコンセプトにしてるわけでもないし、自分が元から興味があるような分野でないと高度な記事を書くのが難しいので、そこそこ気楽に書けるっていうのもあるのかもしれないです。

正直なところ、内容がないようってやつだったので、こんなもので発表して大丈夫だったかな、と思っていたのですが、雰囲気的に大丈夫そうでした。安心安心。

パネルディスカッション

修了生講演以外にも、パネルディスカッションの企画があって、それがなかなか面白かったです。

『プログラミングの教育者になるとしたら、何から教えるか』というテーマでした。パネリストの方々はさまざまなバックグラウンドをお持ち(競プロやってる人、エンジニアリングできる法律家、実際に高校で情報教えたりしてる院生、など)だったので、そういう考え方もあるんだ、とか、話聞いてて思いついたことをtwitterハッシュタグつけて呟いてたら拾っていただいたりとかして(会場にいるけどパソコン開いてツイートするスタイルだった)楽しかったですね。

ちなみに僕はプログラミングはものづくりのための道具だと思ってるので、初めの言語は簡単なもので、調べれば作りたいものが大抵作れるようなpythonがいいかなーと思っています。

と書いたこの一文にも色々突っ込みどころはあって、ググったり調べる方法を初めに教えるべきでは、とかpythonよりjavascriptとかperlの方がいいんじゃない、とか、バイナリエディタ初めに触らせようぜ、とか。小中高校生全員に教育することを考えると、ものづくりをしようと思わない人にプログラミングを教える意味とは何か?とか。こんな感じのことを議論していました。

交流

会場にいたセキュリティキャンプ修了生は十数名程度。久しぶりのオフラインでの交流ということもあってか、技術的な話から世間話まで色々と話ができました。僕は他の方に比べると技術的な知識(セキュリティキャンプは低レイヤーが強い人が多いが、僕は正直さっぱりわからん)がないので、そんなのもあるんだーとなっており面白かったです。

フォーラムの後に、別企画として交流会が完全オンライン開催でありました。LT大会の中で気になった話はdolphin attack(超音波領域の音でボイスコマンドを入力して実行させる)の話です。僕もdolphin attack使って家のAlexaで遊びたい。ちなみにその発表してたの一緒にリレーブログやってるとぅくしさんなんですが。現地会場に来てた人たちも交流会のLT大会はパソコンに向かって話を聞いていましたが、そっちで討論やってる時間は現地組は現地組で雑談していました。とぅくしさんはオンラインの方で忙しく、現地組の雑談に混ざる暇がなくて寂しかったようですが...

父親が気合い入れてオシャレな名刺を作ってくれたので配りました。QRコードのリンク先に飛ぶと、名刺にかざすとARでtwitterとかのリンクとかに飛べるような感じにはしてるので貰った方は遊んでみてください。といっても即席で作ったのでリンクが並んで浮いてるだけで面白くないと思いますが...

焼肉おいしかったです。大人数でやるのはアレなので、4人ずつぐらいに分けられて配慮はなされていました。

あと、twitterで9年前からつながってる人がお互い知ることなく(相手は最近は別垢でよく活動していたため)ここでエンカすることになって、これが一番の衝撃でした。


機会があればまた登壇してみたいし、こういう交流の機会があればまた行きたいなあと感じられる週末でした。

続きます。

potaxyz.hatenablog.jp

新潟・山形・宮城(6泊7日)

新潟できんモザ展をやるということだったので新潟スタートで仙台方面に抜ける感じで旅行しようと立案。全然東北は攻めれていなかったのでとても良い体験ができた。特に山形はいいところだと思った。(なお、今回も非常に長い記事となっており、画像とかのせいで重くなっていると思います)

3/1(火)

いつものようにギリギリに自宅を出発。関西空港駅に向かう。

経験上飛行機出発予定時刻の45分前に駅に到着できれば飛行機に搭乗することが可能だが、乗った電車がまさにそのちょうどギリギリの電車。

10:14に関西空港駅に到着。第二ターミナル連絡バスに乗る。前までこの時間帯は7分間隔で連絡バスが出てたはずなのだが、知らぬ間に10分間隔になっていた。時刻表を見る感じ9時台は55分発が最後で、それ以降が何分間隔、って書き方になっていて、9:55を基準に10分間隔でバスが出ているってことなんだと思う。

チェックイン期限3分前にターミナルに到着、チェックインを済ませる。

保安検査を通過し、飛行機に搭乗。いざ新潟へ。

新潟が近づくと上空からは雪化粧をした市街(長岡など)が見られた。

f:id:potaxyz:20220310174733j:plain
上空より

新潟空港に到着。

f:id:potaxyz:20220310174452j:plain
新潟空港

写真奥に見えている、新潟駅までの連絡バスに乗ってとりあえず新潟駅の方まで出る。

時刻は13時ごろ。お昼ご飯を食べたいところ。何も思いつかなかったので、とりあえず万代バスセンターのカレーを食べる

何も考えずに大盛りにしたらかなり量があって苦しんだ...

本当はホテルのチェックインをしたいがまだ時間があったので、近くにあったスタバで明日以降の旅程を立てることに。

別にスタバ入らなくてもいいんだけど、都道府県スタンプラリーがついてることを知ってしまったので、スタンプラリーを埋めなくてはならない!

f:id:potaxyz:20220310194751j:plain
スタバスタンプ埋め

15時ごろになったので、ホテルにチェックイン。アパなんだけど、できたばかりらしく安く宿泊できた。

荷物を置いて、今回の目的であったきんいろモザイクThank you!!展へ。新潟市マンガ・アニメ情報館自体は前回に引き続き2度目の訪問(前回→新潟に行った - ポタージュを垂れ流す。)。

京都から新潟は遠いが、きんいろモザイクと青春を共に生きてきたので見る以外の選択肢はなかったのです。

f:id:potaxyz:20220310175524j:plain
きんいろモザイクThank you!!展

制作の裏側の資料を見ることができて大満足な展覧会だった。

受注生産品を購入してしまい金が飛んだ。

出ると時刻は17時過ぎ。夕食にはまだ若干早いかな〜っていうのとお店を決めかねていたので古町商店街を散策。以前も来たことあるけど中心街は歩いていなかったんだなあとなった。思ったよりでかい。小雨が降っていたけれどアーケードだったので少し助かった。

新潟市マンガの家に寄って原悠衣先生のサインを見に行った。ついでにマンガコーナーで、そこでオススメされていたマンガを一冊読んだ。

f:id:potaxyz:20220310175747j:plain
サイン

時刻は19時ごろ。ここまで歩いた道でよさげなお店はあまりなかったので、調べて目星をつけたお店に行ってみたが臨時休業になっていた...仕方なく、無難だが前から目をつけていた回転寿司のお店へ。

佐渡産のエビが美味かった(何故それの写真を撮っていない?)。

明日は異常に早いので、適当に朝食を買い入れ、絶起したら困るので切符も購入しておく。新潟から坂町までの片道切符と、きらきら日本海パスを購入しておく。

f:id:potaxyz:20220310201737j:plain
新潟駅前にあるBE KOBEの亜種

ホテルに戻る。大浴場がついているらしいので入る。

ホテルについている大浴場としては良かったが、露天風呂といいつつ外気に触れられるだけで特に景色が見渡せるわけではなかったり、サウナが付属していなかった点はいただけなかった。

ちなみに、プールがついていたり、フィットネスルームがついていたりする。ホテル&リゾーツって言ってるだけあって設備はかなり良い。1階にはホテルにくっついて良い感じの飲食店とかコンビニも入っている。

さっさと寝ましょう、といいつつ日付をまたいでから就寝。

3/2(水)

4時起床。重い体を起こして準備をする。

4時45分ごろ?にホテルを出発。かなりギリギリ。駅へ走る。新潟駅万代口の下に着いたのが列車が出る3分前。ホームまで遠いのを完全に忘れていた。

発車20秒前くらいでギリギリ滑り込む。なんとか今日の旅程を遂行できそうだ。

新潟市街を過ぎるとあまり除雪されていないのかそこそこ雪景色を見ることになる。とはいえ日の出前真っ暗でほとんど何も見えないが。

途中村上駅で乗り換える。

新潟市周辺はかなり良い感じ?の電車だが、ここからは田舎にありがちなワンマンカーとなる(ただし最近新造されたやつで古い感じはない)。

鶴岡まで乗車。新潟から山形の海岸を望みながら北上。景色が良い。笹川流れとか鼠ヶ関とかいつかちゃんと行ってみたい。7時台になり鶴岡が近づいてくると地元の高校生も列車に乗ってくる。

鶴岡駅でバスに乗り換え、加茂水族館へ。開館より前に到着してしまうので、時間を潰す。近くに灯台があったのでそこでしばらく待機。と言っても、海からの風が強く、かなり寒い。

開館時刻になったのでいざ水族館へ。開館凸するやつなんていないだろう、と思っていたが、意外と家族連れか何かだと思われるものが2組程度おり、クラゲ水族館としての人気を窺わせる。

f:id:potaxyz:20220310180426j:plain
加茂水族館 右奥には荒埼灯台も見える

館内はあまり広くないので、なにかショーとかイベント的なものを見るわけではないなら1時間もあれば十分だろう。疫病や改修工事のおかげで、イベントは行われていないようだったが。一応クラゲの解説会?みたいなのが10時から〜みたいな感じになっていたが、時間もないので断念。

半分くらいは普通の水族館(?)のような感じだが、半分くらいはクラゲが展示されている。色々なクラゲを見ることができ、かなり面白い。

f:id:potaxyz:20220310180218j:plain
シロクラゲ

発光していた。

f:id:potaxyz:20220310180248j:plain
オワンクラゲ

どうでもいいが、放射線測定器の名前がアカクラゲだったな、と思った(居たけど写真なし)。

バスの本数も多くないので、10:15に出るバスに乗って鶴岡駅周辺まで戻ることにする。鶴岡市役所前で下車。

バスを降りる時に足を引き摺るような感覚に襲われたので、なんだと思ったら靴底が剥がれていた。このタイミングでなるのはかなり困った...

どうやらコンビニで瞬間接着剤が買える場合もあるらしいということで、雪残る道を足を引き摺りつつ一番近かったコンビニへ(10分近く歩行することになった)。

f:id:potaxyz:20220310195051j:plain
剥がれる靴底

完全に足攣った人の歩き方をして入店し、アロンアルファを購入。外で一生懸命くっつける。お陰様で左手はベタベタである。

www.amazon.co.jp

なんとかくっついたようなので、近くの鶴岡公園を歩いてみる。雪が多く歩きづらいが、ちゃんと接着されているようだ。

コンビニにアロンアルファが売っていて、それで靴底剥がれてもなんとかできるという知見はけっこうデカいと思う。

f:id:potaxyz:20220310180918j:plain
公園内にある荘内神社

神主さん?に春が来ましたねえ〜と挨拶された。

市街のどこか施設に行ってもいいが、あまり気も進まず、適当に街を散策していた。

f:id:potaxyz:20220310181208j:plain
大寶館
こんな感じの洋風の建築が点在している。

お昼も終わろうとしており、良さそうなお店も見つからなかったので、アロンアルファを購入したコンビニでおにぎりを購入。目的のバス停の前で昼食を済ませる。それにしても人気の少ないシャッター街である(車は通るとはいえ...)。

バスに乗り羽黒山方面へ。雪山道を路線バスが登って行き、終点の羽黒山頂に到着。降りたのは僕1人だった。

鳥居がすぐ見えるだろうと思っていたが、雪が積もりすぎていたせいか見えなかった。歩くべき方向がわからなかったがおそらくこっちだろうという方向に向かうと、出羽三山神社の鳥居が見えた。

f:id:potaxyz:20220310181324j:plain
出羽三山神社 鳥居

冬季は雪に閉ざされるため外から参拝することはできず、建物内からの参拝となる。祈祷受付所とか看板がついてて(祈祷するわけじゃないけど...)となるので若干躊躇するが、入ればよさそう。

f:id:potaxyz:20220310181440j:plain
雪がすごい

建物入って右に行くと廃仏毀釈で捨てられてしまっていた仏像などをがんばって集めたコレクションのある部屋などが見れる。メインの三神合祭殿は左。建物内にもかかわらず手水舎がありちょっと面白い。一番奥に出羽三山の神が祀ってあり、ここで参拝すれば三山すべてに参ったことになるという(それでいいのか...)。これまで色々見てきた中でもかなりイイ感じだった。

バスで行く場合、効率よく同じバスで戻ろうとすると見れる時間が22分か32分だが、22分だと少し短そう。今回は32分で散策をした。

f:id:potaxyz:20220310181550j:plain
路線バス

先ほど登ってきた、今度は始発となったバスに再び乗り、羽黒随神門で下車。羽黒山五重塔を見に行く。無料貸出してるから長靴とスノーストック借りて行きなさいみたいな看板が立ってて少しビビり、あっち側から歩いてきたおばちゃんに、雪靴だけで行けそうですか?と聞いたが、若い男ならなんとかなるっしょと言われたのでそのまま歩いて行くことに。

随神門をくぐったすぐのところに、階段があったはずだが完全に雪に埋もれてしまっている下り坂がある。ここさえ越えればなんとかなった。当然滑る。

五重塔が見えた。時間帯も良かったのか、良い感じに日が当たり、かなり神々しい感じに。すごく美しかった。マジで何十分でも見ていられる。

f:id:potaxyz:20220310181744j:plain
羽黒山五重塔

来た道を戻る。途中で入り口の激坂で滑りまくって諦めるか迷っていたJD(?)2人組がいたので、坂ここだけだから頑張って〜と声をかける不審者となっていた。実際そこまでしても見て欲しいくらい素晴らしかった。

帰りのバスが来るまで、いでは文化記念館でパンフレットを読んだりして待っていた。五重塔でゆっくりしすぎて展示物を見れる時間は終了していた。

バスに乗車し、鶴岡駅に戻ってきた。本日の最終目的地である山形に到達するにあたって、別に急ぐ必要はなかったが、ここで特急課金して余目駅に移動しておく。

余目駅に到着。わざわざ特急に課金したのは温泉に入りたかったからである。

f:id:potaxyz:20220310182144j:plain
庄内町ギャラリー温泉 町湯

デザインのいい温泉。サウナもできた。黙浴との張り紙がされつつも喋ってる2人組がいたが、その2人から山形弁の会話を聞くことができた。

サッパリした〜、あっ、柚子酢ドリンクだ〜飲んじゃお〜、いま何時かな〜と時間を見ると、次の列車まで10分。どうやら温泉でのんびりしすぎたようだ。

走って余目駅に戻る。

ここから陸羽西線で新庄まで抜ける。

太陽も沈み切ってしまっており残念ながら景色は見れなかったが、これからトンネル工事かなにかでしばらく陸羽西線は運休になるので、この機会に乗れたのはよかったと思う。田舎特有のワンマンカー。

新庄駅で山形行きに乗り換える。きらきら日本海パスは陸羽西線の途中駅である古口までしか有効ではないので、車内で車掌さんに古口から山形までの乗車券を発行してもらう。

なお、今回きらきら日本海パスを使用したが、JRに加えてバスも利用でき、鶴岡でのバス利用だけで元が取れているので非常にお得な切符だった。

www.jreast.co.jp

山形駅に到着。そのままホテルに向かってもいいが、駅から直結している霞城セントラルに展望室があるようなので行ってみた。山形市街が一望できた。てか、もしかして山形市ってけっこうデカい?

f:id:potaxyz:20220310182415j:plain
夜景 室内が映り込んでいる

展望室には今日卒業式だったのかもしれない高校生らしきグループが3組と、そして僕という感じでアウェー感があった。

ホテルにチェックイン。1日中動き回って疲れたのでそのへんのコンビニでカップ麺を購入。それだけ食べて22時ごろには就寝。

3/3(木)

おはようございます。泥のように眠っていたが9時起床。

とりあえずチェックアウト。市内どう動くか決めていなかったが、スタバのスタンプを埋めないといけないので駅のスタバに入って旅程を立てる。

目処が立ったので動く。

どうやら山形は辛味噌ラーメンが有名らしい。よく名前が出る?ところは車とか借りないとキツそう?ということで、街中のお店で食べることに。

美味しかった。

博物館にきた。なんと入館料70円で激安だったので中に入る。学校教育の変遷が細かく解説されている。かなり面白かった。学ランとか昔と全く変わっていないなあ〜とか思った。

時間的に中を見る時間はなかったが、文翔館へ。卒業式シーズンだからか、花束を持って卒業生を待ち構える在校生?みたいな人がたくさんいた。横の湯殿山神社も訪問した。

f:id:potaxyz:20220310182918j:plain
文翔館(山形県旧県庁舎及び県会議事堂)を外から

f:id:potaxyz:20220310183121j:plain
湯殿山神社

最後に山形城跡もとい霞城公園へ。発掘調査と復原工事中で、しかも本丸のところは冬季閉鎖中という...

f:id:potaxyz:20220310183221j:plain
霞城公園 橋とその先には入れない...

山形駅に戻り、いざ蔵王温泉へ。バスで1000円。

山を登っていき、蔵王温泉バスターミナルに到着。

旅館にチェックイン。そこの女将さんの話で蔵王樹氷の存在を知った。明日の予定に樹氷ウォッチングが追加された。

ちなみに、gotoキャンペーンがない間は現金特価で4000円!みたいなキャンペーンで泊まったが、普通に泊まろうとするとそこそこするお宿である。

とりあえず旅館についてる温泉に入ってちょっとのんびり。

チェックインのときに隣にバルがあるよ〜って教えてもらったところがオシャレだったので行ってみることに。ジュースだけ飲むつもりだったがご飯も食べちゃうかということで夕食の時間に。

ごちそうさま。共同浴場巡りへ。

上湯、下湯、河原湯共同浴場の順に巡った。上湯は4人くらいいてなんだか混んでいた。が、下湯、河原湯は誰も人がおらず、独り占めできた。

強酸性pH1.7程度のお湯。舐めると酸っぱい。入った後、体から湯気が出てる気がしたけど気のせいだろうか?でもかなり体の芯から温まった。

個人的には河原湯が好きかな〜 他の場所と違って下がすのこみたいになってて、そこからお湯が抜けていくような感じになっていた。

最後に酢川温泉神社に行ってみよう、と思ったが参道にあまりに雪が積もりすぎていて断念。またいつか行きましょう。

旅館に戻る。お部屋の中でゆっくり...とはいかずスライドを作りつつ、明日の予定を立てる。

ネットがめっちゃ速かった。ワーケーションロングステイするのはありかもね。

おやすみなさい。

3/4(金)

9時に起床。本当はもう少し早く起きてどこか温泉に入るつもりだったが...

チェックアウトを済ませ、樹氷を見に行くことに。

ロープウェイで蔵王山頂まで。往復3000円はけっこう高いがそんなものか...。

頂上に到着。何も見えない...風もめちゃくちゃ強いし寒い...(-10℃程度らしい)

とりあえず玉こんにゃく食べてのんびりするか...

帰る前にもう一回展望台に行ってみるとちょうど晴れてくれた。樹氷スゲー

f:id:potaxyz:20220310184230j:plain
樹氷高原

ロープウェイで戻る。ロープウェイからも綺麗な樹氷をみることができた。

時間を気にしていなかったが、降りてきたらけっこうギリギリな時間になっていた。稲花餅を買い込み、バスに乗る。

昼食の時間が取れなかったので、蔵王温泉に唯一存在するコンビニ(ローソン)で、朝食のつもりで買っておいていたあんパンを口に入れる。

山形駅に戻ってきた。山頂はかなり寒かったが、降りてくると暖かい。

お土産を選びつつ、スマホから情報処理学会のzoomに接続して友人の発表を見た。僕も準同型暗号アプリケーション作りたい。

改札に入り、仙山線に乗って仙台方面へ。

山寺駅で下車。

これの手前に日枝神社の参道の石段があるが、そっちを登っても結局登山道?と合流することになる。

f:id:potaxyz:20220310185543j:plain
山寺日枝神社

寺なのに神社なんですね

立石寺へ。

後の下山のツイートの画像にあるとこが入山の受付になっており、そこで制限時間を伝えられた。

ひたすら石段を登る。

五大堂に到着。水墨画の世界とか言われているようだが、実際そんな感じで、非常に綺麗だった。

f:id:potaxyz:20220310184724j:plain
五大堂からの眺望

奥之院に到達。雪に埋まっていた。

f:id:potaxyz:20220310184828j:plain
奥之院

少し横道にそれて三重小塔をみる。洞穴の中に塔があるというのは不思議な感じだ。

f:id:potaxyz:20220310184958j:plain
三重小塔

もう一度五大堂行ってもよかったけど、まあ降りるか、ということで下山。

猿ゥ!

f:id:potaxyz:20220310185349j:plain

駅から往復所要時間130分とか書いてあったけど一般人向けなのだろう。異常旅行者であれば90分程度で完了でき、そこまでかからないと思う。が、どうせ電車は1時間に1本しか来ないので急ぐ必要もない。

雪靴はちゃんと履きましょう。

山寺駅みどりの窓口仙台まるごとパスを購入。今日明日はこれだけでJRも地下鉄も、そして一部バスも使えて動き回れる。

電車に乗り仙台駅に到着。

ホテルにチェックインを済ませ、荷物を置いて牛タンの店へ。

めちゃウマで幸せになった。また来たいし、他の牛タンのお店とも比べてみたいと思った。ちなみに、サカナクションの山口一郎のサインが置いてあったりとかして、芸能人にも人気のようだった。

地下鉄南北線東西線(東側)の乗り潰しを敢行。

ホテルに戻る。寝る前に蔵王で買っていた稲花餅を食べておこう。

おやすみなさい。

3/5(土)

おはようございます。10時にチェックアウト。

次の電車まで時間があったので、地下鉄東西線の残り西側の乗り潰しをした。ら、逆に時間がなくなってしまった。

ずんだシェイクを購入。実は大阪梅田でも購入できる。

あおば通駅から松島海岸へ。

導線を全く考えていなかったので駅でパンフレットかなんかもらう気だったが、置いてなかった(僕が見つけられなかっただけ?事前情報としては、島がいくつかあって、遊覧船があって、お寺があって、カキが美味しい)。

駅を出ると遊覧船のチケット売り場があるが、ネット予約をすると安くなった気がしたのでスルーし、とりあえず瑞巌寺へ。

中の金箔の屏風絵が良かった。一応宝物館にも入ったが、歴史に詳しくなさすぎて流し見で終わってしまった。

お隣の円通院へ。こういう庭園が楽しいところは好きです。ここも小堀遠州作庭なのか...

こうやって散策している間にスマホで遊覧船乗船券を予約。遊覧船乗船券売り場へ。ネット予約のおかげで1000円のところ900円で購入できた(仁王丸就航記念でそもそも1500円が1000円になってるのにさらに割引されるとは...)。

お昼ご飯に焼き牡蠣を食べる。当然美味しい。

遊覧船に乗る。いっぱい島があるんだなあ。

f:id:potaxyz:20220310191649j:plain
しまのひとつ

戻ってきた。

松島博物館に立ち寄った。この日は松島海岸駅のバリアフリー化記念で入場無料になっていた。

展示物を見てそうなんだ〜と薄い感想を抱きつつ、目的の雄島を散策。

f:id:potaxyz:20220310191922j:plain
雄島

道の途中で東日本大震災津波がこの高さまで来ましたみたいなステッカーを見たりとか、津波を意識したような看板が多く見かけられたのも、この地方ならではだなと思ったりした。

福浦島へ。こちらも松島海岸駅のバリアフリー化記念で橋の通行料が無料になっていた。

島内を散策。

松島海岸駅へ戻り、仙台方面に帰る。

時間調整も兼ねて東北大学の見学と、ついでに仙台第二高等学校(大学の友人の出身校)も見学。

仙台駅に戻る。この日は東北大の友人に泊めてもらうことになっており、夕食も一緒に食べようとのことで、待ち合わせ。久しぶりに会ったが変わっていなかった。

せり鍋が仙台名物らしい、ということで、何件か回るがどこも満席...しょうがないので(?)キャッチに頼る。あんまりキャッチにいいイメージがないが、悪くない値段のお店を教えてもらった。その友人によると、仙台のキャッチは優しい人が多いらしく、あの人もお世話になったし、その人もよく見る、とか言っていた。

鴨肉、せり根が美味しい。めっちゃ歓迎していただいて、毎回友人がよそってくれた。

量としては足りない(酒を入れているわけではない)ので、ラーメンを食べることに。友人オススメのお店へ。

しゃれおつ。ビールも提供しているらしい。

友人の車で仙台城址へ。友人曰く、昼行ってもなんもないから、夜来た方がいいとのこと。

友人宅へ。山形土産をあげたり、シャワー浴びたり、喋ったりして就寝。

3/6(日)

7時ごろ起床。友人はヨット部で、今日も朝から部活とのこと(昨日は海でヨットの調整をしていたらしい、今日は8時からオンラインでなんかやるとか)。準備を済ませ、お礼をして外出。お世話になりました。

大崎八幡宮へ。仙台は至る所で伊達政宗の名前を見かけるので、その影響を垣間見ることができるなあと感じた。

歩いていたら二郎系の店があって、並んでるなあって横目にみつつ、三居沢発電所へ。日本最初の水力発電所。隣に記念館みたいなのがあったが、時間の都合上みることはできなかった。

めっちゃ風強くて寒かったので退散。

朝昼兼用で何か食べるか、ってことでさっきの並んでた二郎の店に行くことにした。どうやら一昨日開店らしい。

立席スタイルの店は初めてだった。ごちそうさまでした。

店を後にし、フェリーまでのバスの時間を調べたらかなりギリギリだった。

大崎八幡宮前からバスに乗り、あおば通駅前へ。

ここで宮城県のスタバスタンプラリーを押せていなかったので、バスの中でスマホで注文しておいたコーヒーを受け取りに行く。乗り換え時間は5分もなかったが、なんとかなった。

フェリーターミナル行きのバスに乗る。バス停の名前は仙台駅前だが、JRのあおば通駅前からが出ている。そもそも地下鉄の仙台駅はJRのあおば通駅の方が近いのだが。

フェリーターミナルに到着。

チケットを受け取る。

いざ乗船、出航。

福島第一原発を視認

昼寝をしていたら、夕食バイキングの時間に。

あるやつ全部載せようとするから汚くなってしまったが...ごちそうさま。お風呂に入る。

TENET見れて良かった。

シアタールーム的なところを出ると23:30になっていた。おやすみ。

3/7(月)

おはよう。9時くらいまで寝てたから日の出は見られなかった。朝食もバイキングにしてもよかったが、少し節約しようと思い、レストランではない売店でモーニングセットを注文。

下船の準備で荷物をまとめる。

名古屋港が近づいてきた。名港トリトンをくぐる。

名古屋フェリーターミナルに到着。帰ってきちゃったなあ。

特に理由もなく平針ミスドに寄る。

京都に帰りましょう。帰りの途中でニット帽なくして凹んだ。

おしまい。

行程表(だいたい)

3/1(火)

3/2(水)

3/3(木)

3/4(金)

3/5(土)

  • JR仙石線 普通 石巻行き あおば通 11:20 - 12:00 松島海岸
  • 松島観光
    • 瑞巌寺 12:20頃
    • 円通院 12:50頃
    • 昼食 13:20頃
    • 五大堂 13:45頃
    • 松島観光遊覧船仁王丸 14:00 - 14:50
    • 観瀾亭・松島博物館 15:00頃
    • 雄島 15:30頃
    • 福浦島 16:00頃から約50分
  • JR仙石線 普通 あおば通行き 松島海岸 17:12 - 17:53 あおば通
  • 地下鉄で仙台第二高等学校、東北大学川内キャンパスの訪問
  • 仙台駅 19:00頃
  • せり鍋、ラーメン(だし廊-Nibo-)
  • 仙台城址 22:10頃

3/6(日)

3/7(月)

ハッシュ関数について(後編? + SHA-256を実装してみる)

中身に入る前に...

グループワークとしてリレーブログを続けていたら、セキュリティキャンプフォーラム2022で発表させていただけることになりました

www.ipa.go.jp

他の内容もおもしろそう2

こんな機会はなかなかないので、楽しんできたいと思います〜


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

potaxyz.hatenablog.jp

bigdrea6.hatenablog.com

今回のテーマはハッシュ、ということでハッシュ関数の1つであるSHA256を実装してみようかなと思います。

※色々あって記事の内容が前の方と被ってしまいましたが、書いてしまったのでせっかくなので投稿します

ハッシュ関数の概要

ハッシュ関数とは

ハッシュ関数とは、任意の長さの入力データ(メッセージ)を一定の手順で計算し、あらかじめ決められた固定長の出力(ハッシュ値)を得る関数です。

とくに、セキュリティのために使われるのは一方向ハッシュ関数とか、暗号学的ハッシュ関数とか言われて、(条件がゆるいものから厳しいものの順に)次の3つの暗号学的性質を持ちます。

  • 衝突困難性(衝突発見困難性):同じ出力値を生成するような2つの入力値を発見することが困難であること。すなわち、H(m1)=H(m2)となるような異なるメッセージm1とm2を探すことが困難であること。
  • 第2原像計算困難性:ある入力値と同じハッシュ値となるような別の入力を求めることが困難であること。すなわち、m1があたえられたときH(m1)=H(m2)となるようなm2(ただしm1とは異なる)を探すのが困難であること。
  • 原像計算困難性(一方向性):出力値から入力値を発見することが困難であること。すなわち、あるハッシュ値hが与えられた時、h=H(m)をみたす任意のメッセージmを探すことが困難であること。

ちなみに、ハッシュってのは、ハッシュドポテトとかのハッシュで、切り刻んでごちゃごちゃにして混ぜるみたいな意味です。

利用例

ハッシュ関数は、

  • パスワード認証
    • 平文パスワードではなく、平文のハッシュ値をシステムに保存しておき、ログインするときには入力されるたびにハッシュ値を計算してシステム内のハッシュ値と比較する)
  • ワンタイムパスワードの生成
    • S/Key方式
  • 改竄検知
  • デジタル署名
    • 送信者から送るデータDとする。受信者は、データDを受け取り、ハッシュ値[X]を計算する。また、送信者から「署名」として、暗号化されたDのハッシュ値が送られてくる。これを受信者側で復号する[Y]。XとYが等しければ署名の検証に成功したことになる

などに利用されています。

上で述べた性質から、めっっちゃ長いデータでもハッシュ関数を通してハッシュ値を得れば、短いデータにしてやることができます。大きな本体のデータそのものを扱って確認するよりも、小さい値を確認するだけで正真性(改竄などがされていないこと)を確かめることができます。

種類

ハッシュ関数にはMD5SHA-1、SHA-256など、色々な種類があります。MD5SHA-1はすでに衝突困難性が破られているため、使用は非推奨とされていますが、セキュリティが必要とされていないところでは今でも使うとかなんとかどこかで見たことがある気がします(うろ覚え)。

SHA-256

ハッシュ関数について簡単にまとめたところで、今回はSHA-256をピックアップして実装してみようと思います。

ちなみに、ここで実装するのは自分の理解を深めるという目的あってのことです。セキュリティ的にはここにあるコードを利用することはせず、SHA-256の機能を提供してくれるライブラリ等を使う方がいいです。

なお、SHA-256の簡単なしくみの概要は前回のブログを参照してください。

あと、アニメーションでわかりやすくSHA-256の仕組みを説明してくれるものもあるので、興味があれば見てみるのもいいかも。

github.com

実装

実装にはNISTの論文を参考に、他の実装されている方のものも参考にしつつ、という感じで実装しました。

使用する定数の定義

の、小数点以下32bitが格納されています。

なんでこんな定数が使われているのかはどこにも書いていないので謎です。が、私見と調べてみた感じとして、2つ理由を考えてみました。私は専門家でもなんでもないので、1つの考えとして受け取ってください!真に受けないこと!

  1. 恣意的な数を選んでバックドアを作ったりはしていないということ。
    素数平方根や立方根を用いているというのは、あまり恣意的な感じがしない。他の疑似的にランダムな数字を定数に使用してもよさそうな気がするが、それが確実にランダムであるという保証はどこにもない。他人からはすぐにはわからないが、実際には仕様を定めた人にしかわからないような脆弱性がある定数かもしれない。

  2. 素数平方根や立方根が正規数であることが(未解決だが)予想されているため。
    正規数とは、無限小数表示において数字が一様に分布しており、数字の列が現れる頻度に偏りがないという性質を持つ実数のこと(wikipedia)。素数平方根は正規数であることが予想されており、小数点以下の数字の並びが一様に分布しているとエントロピーが最大になってくれるのでうれしいのかもしれない。

羅列したところであまり意味はないと思うので、雰囲気だけコードを載せます

K = (
    0x428A2F98,
    0x71374491,
    ...,
    0xC67178F2,
) # 実際には64個の数字が格納されている
H = (
    0x6A09E667,
    0xBB67AE85,
    ...,
    0x5BE0CD19,
) # 実際には8個の数字が格納されている

使用する関数の定義

以下に使用する8つの演算を定義しておきます。なお、計算は全て$\bmod\,2^{32}$上で考えるので、それを超えてしまうことのある演算には& 0xFFFFFFFFとして、$\bmod\,2^{32}$をとるのに該当する操作をおこなっています。

def ROTR(x, n):
    return ((x >> n) | (x << (32 - n))) & 0xFFFFFFFF


def SHR(x, n):
    return x >> n


def Ch(x, y, z):
    return (x & y) ^ (~x & z)


def Maj(x, y, z):
    return (x & y) ^ (x & z) ^ (y & z)


def SIGMA0(x):
    return ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22)


def SIGMA1(x):
    return ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25)


def sigma0(x):
    return ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3)


def sigma1(x):
    return ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10)

padding処理

以下のようなフォーマットの512bitsの倍数の下図の赤枠にあたるデータを成形します。lbitsの長さのメッセージMとします。

f:id:potaxyz:20220228234036j:plain

仕様書にはbit単位で書いてありますが、実装にはbyte単位で考えることに注意します。つまり、下のようになります。

f:id:potaxyz:20220228234128j:plain

まず、ハッシュ関数にかけたいメッセージmessageutf-8エンコードしておきます(メッセージのbyte数を正確にはかりたいため)。

メッセージの長さをmessage_lenとしてbyte数で取得しておきます。

$56\leq (l'\,\bmod\, 64)\leq 63$ byteをみたす数 $l'$ になるとハッシュ関数に入れるデータの形に合わなくなってしまう(一番後ろに入れる元のメッセージの長さのbit数を格納できない)ので、その分1ブロック増やします。

一番後ろに元のメッセージ長のbit数を表現する8byteを入れるのですが、message_lenとして得られているのはbyte数なので、3つシフトさせてbit数表現に直しておきます。

最終的に成形して得られるデータは「元のメッセージ+区切りの0x80+0埋め0x00+元のメッセージ長のbit数を表現する8byte」となります(これをあらためてmessageとしてやります)。

今回はこのメッセージのハッシュ値を計算してみましょう。

message = "シャーっと実装するSHA256🐱"
message = message.encode("utf8")

message_len = len(message)
padding_len = 64 - 8 - 1 - message_len % 64
if message_len % 64 > 64 - 8 - 1:
    padding_len += 64
message = (
    message + b"\x80" + b"\x00" * padding_len + struct.pack("!Q", message_len << 3)
)
message_len += 1 + padding_len + 8

本処理

padding処理を行なったデータを64byteずつに分け、先頭からその64byteごとのブロックをハッシュ計算にかけていきます。上で設定していたHというのが初期ハッシュ値というやつで、それと64byteごとのブロックを順次演算させてやります。

while len(message) >= 64:
    message_block = struct.unpack("!16L", message[:64])
    H = sha256_hash_computation(message_block)
    message = message[64:]

本処理は以下のような形になっています。こうやってみると意外と単純?

def sha256_hash_computation(message_block):
    W = [0] * 64

    # 1. Prepare the message schedule, W[t]:
    W[0:16] = message_block
    for t in range(16, 64):
        W[t] = (
            sigma1(W[t - 2]) + W[t - 7] + sigma0(W[t - 15]) + W[t - 16]
        ) & 0xFFFFFFFF  # +はmod 2^32上の演算であることに注意

    # 2. Initialize the eight working variables, a-h with the (i-1)st hash value:
    a, b, c, d, e, f, g, h = H

    # 3.
    for t in range(64):
        T1 = h + SIGMA1(e) + Ch(e, f, g) + K[t] + W[t]
        T2 = SIGMA0(a) + Maj(a, b, c)
        h = g
        g = f
        f = e
        e = (d + T1) & 0xFFFFFFFF
        d = c
        c = b
        b = a
        a = (T1 + T2) & 0xFFFFFFFF

    # 4. Compute the ith intermediate hash value Hi
    return [(x + y) & 0xFFFFFFFF for x, y in zip(H, [a, b, c, d, e, f, g, h])]

結合

最後に、8つの数が入っている配列Hを結合します。

message_digest = b"".join([struct.pack("!L", i) for i in H])

これでbit表示が得られていますが、ハッシュ値の表示として16進数に直しておきます。

message_digest = message_digest.hex()

これでハッシュ値を表示してみると

print(message_digest)
43b682dc606a6321cd51a05268c60f93fe2694473d34650bfb1c093ee560f795

が得られました。他のSHA256を計算してくれるものを使うと同じ値が得られるので、正しい実装ができていそうです。

動かしてみる

google colaboratoryで作ってみました。興味がある人は中のmessageのところとか書き換えて遊んでみよう〜

おわりに

ハッシュ関数、特にSHA-256には詳しくなれた気がします!

次回はこちらです。

参考文献

[1] NISTの論文

[2] Software Design 2022年3月号|技術評論社

[3] 『暗号技術入門 第3版 秘密の国のアリス』

[4] マスタリングTCP/IP 情報セキュリティ編 | Ohmsha

これまでのリレーブログ記事まとめ

ここにリレーブログ記事の履歴を載せておきます

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

京都十六社朱印めぐり2022

2日かけて御朱印を集めてみた。きっかけは忘れたけど熊野神社かどこかに幟旗たってたのを見かけたからだと思う。御朱印集めたことなかったから集めてみようかなーと思ったのと、自転車を新しくしたので街中走れるしいいじゃん、ってことでやることにした。

www.kyoto-16sha.jp

一番初めの神社の御朱印おしてもらえるところに十六社朱印巡りやりたいんですけど〜みたいなこと言うと、紙袋と共に16社の場所とかご利益が書いてあるチラシと、これ専用の朱印帳がもらえる。各神社の御朱印料も300円と統一されていてやりやすいと思う。

紙袋

チラシ(無くしたので代わりに市比賣神社に貼ってあったもの。これが表裏で1枚になってるものがもらえる)

f:id:potaxyz:20220216231245j:plain
チラシ

以下巡った記録 ちなみにswarmのチェックインは全て御朱印をもらったあとに行なった

本当は2/13-15で3日に分ける予定だったけど14日は起床に失敗したので13日に3つ、15日に残りを回ることになった。

2/13

天気は雨だったので自転車で行くには遠くて行きづらいところを狙おうということでとりあえず長岡天満宮から開始した。家を出るのも14時ごろとかなり遅かった。徒歩と市バスと阪急を利用。

1. 長岡天満宮

2/13 15:20頃訪問

16社の中では最も端に位置していると思う

大きい神社 八条が池という大きい池もある 本殿は平安神宮の社殿を持ってきてるとかなんとか

裏には梅林があったりした

2. 西院春日神

2/13 16:20頃訪問

きれいな神社 境内は撮影禁止っぽい?(少なくとも社殿は撮影禁止だった)

この神社のホームページに厄除けをする意味とは、みたいなことが書いてあってへえ〜となる

3. 吉祥院天満宮

2/13 16:50頃訪問

横に公園がくっついていて街に溶け込んでいる感があった。

他の神社はどっかで名前知ってたけどここだけ初めて聞いたな...となった

16個中2個が天満宮だけど菅公聖蹟二十五拝とかいうやつに入っているとかなんとか

2/15

朝9:30頃に白川通今出川を出発。この日は自転車で走り回った。どの神社も一応駐輪できる感じにはなっていそう。

4. 御靈神社

2/15 10:00頃訪問

上御霊神社ともよばれていて下御霊神社も存在する。応仁の乱はこのあたりから始まった

お腹壊れてたのでトイレに救われた

5. 今宮神社

2/15 10:30頃訪問

バラエティ豊か(?)な境内で楽しい

参道のあぶり餅が名物なんだけど食べたことないんだよな...

やすらい祭りが京都三大奇祭りの1つだったりする

東門のあたりの交差点がちょっとよくわからない形をしていて入りづらかった

6. 敷地神社

2/15 11:00頃訪問

f:id:potaxyz:20220216234321j:plain
境内

西大路通金閣寺から下っているとデカい鳥居が通りに面していてここか!となった

本殿の横に摂社として六勝神社が並んでいる(けっこうデカい、必勝祈願など)

神具庫が休憩所にされている コンクリートかなんかで作られてて若干浮いてる気がする

トイレがきれい

7. 六孫王神社

2/15 12:30頃訪問

昼食を食べてから一気に八条通まで南下

参道に六孫王会館とかいうとこがありなんかワイワイやってた

池に鯉が泳いでてそこに橋がかかっていて、それを恋の架け橋とかいって縁結びの聖地にしようとしてるとかなんとか(って境内の新聞かなんかに書いてあった記憶があったけど、調べたらけっこうそういう話書いてあって有名なんやなって思った)

誕生水とかいういい水が沸いてるらしい

f:id:potaxyz:20220216235051j:plain
なんかみたことある和歌だなあと思った

8. 御香宮神社

2/15 13:20頃訪問

かなり南下して丹波橋のあたりまできた

良い水らしい 飲んでないけど

ペットボトルで水汲んでる人も見かけた

(7.8.と水に縁のある神社が並んでますね)

9. 藤森神社

2/15 14:00頃訪問

競馬やる人はここ行って勝てるように祈ってこればいいと思う

クッソ狭い鳥羽街道を北上して次に向かったが、その間に伏見稲荷とか東福寺を通過した

f:id:potaxyz:20220217000935j:plain
伏見稲荷通過記念

10. 新熊野神社

2/15 14:30頃訪問

近くに今熊野観音寺があって勝手にそっちを想像してたら違った(よく考えたらあっちはお寺だね)

裏に熊野古道を模した京の熊野古道なるものがあって、そこ歩けば熊野三山御利益巡りしたのと同じご利益があるみたいなこと書いてあったと思うんだけど、そんな...となった

ここで足利義満観阿弥世阿弥の能を見たことで観阿弥世阿弥は躍進したらしい

京都三熊野神社の1つで、紀州熊野本宮大社に対応する

11. 豊国神社

2/15 14:50頃訪問

クソデカ正面通とクソデカ大和大路通の交わるところに鳥居がある

昔撮った写真

12. 市比賣神社

2/15 15:10頃訪問

女人守護の神社なので僕はお呼びでない感じがあった(参拝客は女性しかいなかった)

が、お守り売ってるところ(御朱印いただいたところ)は宮司さんか分からないが男性が対応していた

河原町五条あたり、河原町通りの横入ったとこにあってこんなところに...となった

13. 粟田神社

2/15 15:30頃訪問

三条通のところに鳥居があるがそれより奥にも鳥居がある そこに駐輪してよさそうな場所がある

石段がちょっと長い、それだけ上がるので境内からの眺めは良い

京都の東の出入口(粟田口といわれている)にあって旅行安全の神だったりする

今年もいい旅行がしたいと願っておいた

14. 熊野神社

2/15 15:50頃訪問

京大の近く東山丸太町にあるのでよく通過はしていたが実際境内に入ったことはなかったという

八ツ橋発祥の地らしい(なお横に西尾八ツ橋の店があり向かいには聖護院八ツ橋の店がある)

京都三熊野神社の1つで、紀州の熊野速玉大社に対応する

15. 熊野若王子神社

2/15 16:20頃訪問

哲学の道の南端にある 散歩でよく通る

京都三熊野神社の1つで、紀州熊野那智大社に対応する

16. 岡崎神社

2/15 16:30頃訪問

うさぎがいっぱいいてかわいい

個人的に好きなので一番最後にここを参拝することにした

おわりに

ということでなんとか回ることができた

十六社参拝記念品です

チャリの経路

御朱印です

僕は2日に分けたけど、検索かけてみた感じ頑張れば1日で全部回れるらしい

いい運動にもなったし、行ったことないところにも行けたし個人的には楽しかったです

グラフ作成の備忘録

思い出したら追記する。個人的なメモ

より良いのがあったら教えてください

matplotlib

プロット表示設定

import matplotlib as mpl
mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.size'] = 16
mpl.rcParams['xtick.direction'] = 'in'
mpl.rcParams['ytick.direction'] = 'in'
mpl.rcParams['xtick.top'] = True
mpl.rcParams['ytick.right'] = True
mpl.rcParams['agg.path.chunksize'] = 100000
  • フォントをサンセリフ体にする(個人的な好み)
  • フォントサイズを16にする(デフォルトは12)
  • 目盛り線の向きを内向きにする(x軸方向)
  • 目盛り線の向きを内向きにする(y軸方向)
  • 目盛り線を書く(上側)
  • 目盛り線を書く(右側)
  • 大きなデータでplt.savefigした時にエラー吐かないようにするやつ

フォーマッタ

普段google colaboratoryを使っているので、それで使えるフォーマッタ。マジックコマンドを作ってくださっている方がいた。

note.com

google colaboratoryでデフォルトでは使えないフォントを使う

google drive内にfontというフォルダを作り、そこにフォントを入れておく。

フォルダ構成の例:

/content/drive/MyDrive/font/
└── Tsukushi A Round Gothic
    └── TsukushiAMaruGothic.ttc

その後、以下を実行

from google.colab import drive
drive.mount("/content/drive")

!cp -a "drive/MyDrive/font/" "/usr/share/fonts/"

!rm -r /root/.cache/matplotlib/

その後ランタイムを再起動する

プロット例1

f:id:potaxyz:20220212205154p:plain

fig, ax = plt.subplots(figsize=(8, 6))
ax.grid(axis="both", which="major", linestyle="--")
ax.set_xlabel("Energy [MeV]")
ax.set_ylabel("Events [count/s/MeV]")
ax.set_xlim([0.2, 6])
ax.set_yscale("log")
ax.plot(x, y)
plt.savefig("sample.png",dpi=300)

一番スタンダードな図?

一部だけ設定を変える

そのセルに表示される図表だけ設定を変えたい場合

設定をrc_contextに入れておく

COLOR_DARK = "#455a64"
COLOR_LIGHT = "#ffffff"
rc_context={
    "font.family":"Tsukushi A Round Gothic",
    "font.size":18,
    "axes.facecolor":"none",
    "legend.facecolor":COLOR_DARK,
    "text.color":COLOR_LIGHT,
    "axes.labelcolor":COLOR_LIGHT,
    "axes.edgecolor":COLOR_LIGHT,
    "xtick.color":COLOR_LIGHT,
    "ytick.color":COLOR_LIGHT
}
with plt.rc_context(rc_context):
    # 普通にグラフ作る

プロット例2

上を利用してプロット。

f:id:potaxyz:20220212212601p:plain

with plt.rc_context(rc_context):
    fig, ax = plt.subplots(figsize=(10, 8))
    for id in sorted(dict_dataframes.keys()):
        df = dict_dataframes[id]
        ax.plot(df["time_elapsed"],
                df["fit_residual"],
                label="ID {}".format(id))
    ax.grid(axis="both", which="major", linestyle="--")
    ax.minorticks_on()
    ax.set_xlabel("Time[min]")
    ax.set_ylabel("Pressure (baseline subtracted)[hPa]")
    ax.legend(bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0)
    ax.set_xlim(-200, 200)
    ax.set_ylim(-0.6, 2.1)
    plt.savefig("pressure_subtracted.png",
                facecolor="#222222",
                bbox_inches="tight",
                dpi=300)
    #スライドに貼る時はこっちを使う
    #plt.savefig("pressure_subtracted.svg",transparent=True,bbox_inches="tight")
  • minorticks_on()で補助目盛りがつく

プロット例3

f:id:potaxyz:20220212213421p:plain

with plt.rc_context(rc_context):
    id = 13
    df = dict_dataframes[id]
    fig, ax = plt.subplots(figsize=(10, 8))
    ax.minorticks_on()
    ax.grid(axis="both", which="major", linestyle="--", color=COLOR_LIGHT)
    ax.grid(axis="both", which="minor", linestyle="--")
    ax.tick_params(axis="both", which="major", direction="in", length=5)
    ax.tick_params(axis="both", which="minor", direction="in", length=3)
    ax.plot(df["time_elapsed"],
            df["fit_residual"],
            marker="o",
            ls="-",
            color=COLOR_LIGHT,
            markerfacecolor="r",
            markersize=12,
            label="ID {} (baseline subtracted)".format(id))
    ax.set_xlim(-200, 200)
    ax.set_ylim(-0.6, 2.1)
    ax.set_ylabel("Pressure (baseline subtracted)[hPa]")
    ax.set_xlabel("Time[min]")
    ax.legend()
    plt.savefig("13.png",
                facecolor="#222222",
                bbox_inches="tight",
                dpi=300)
    #スライドに貼る時はこっちを使う
    #plt.savefig("13.svg",transparent=True,bbox_inches="tight")

スライドの例

f:id:potaxyz:20220212211054p:plain
スライドの例

最近はMarpというmarkdownでスライド作れるやつを使ってスライドを作成している。テーマはinvert。フォントはmacOSに標準搭載されている筑紫a丸ゴシックを使用している。(かわいいフォントで好き)

プロット例4

f:id:potaxyz:20220212215503p:plain

# from datetime import datetime, timedelta, timezone
# from matplotlib import dates as mdates

cmap = plt.get_cmap("tab10")
baseline = datetime(2022, 1, 15, 20, 40)
w = timedelta(seconds=12000)

fig = plt.figure(figsize=(24, 12))
grid = plt.GridSpec(2, 3, hspace=0)
axs = [fig.add_subplot(grid[i // 3, i % 3]) for i in range(6)]
for i in range(6):
    axs[i].plot(x, y[i], c=cmap(i))
    axs[i].set_ylabel("area{}[cps]".format(i + 1))
    axs[i].set_xlim(baseline - w, baseline + w)
    if i // 3 == 0:
        axs[i].tick_params(labelbottom=False)
    axs[i].xaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))
    axs[i].axvline(baseline, c="red", linestyle="--")
    axs[i].grid(axis="both", which="major", linestyle="--")
plt.savefig("areas.png",bbox_inches="tight",dpi=300)
#plt.savefig("areas.svg",transparent=True,bbox_inches="tight")
  • cmapでカラーマップの指定ができる。tab10が通常のカラーマップ。
  • 複数の図を並べるにはGridSpecを使うと楽?hspace,wspaceで図表の間隔を調節
  • tick_params(labelbottom=False)でラベルを消す
  • set_major_formatterで時刻軸のフォーマットを変える

プロット例5

f:id:potaxyz:20220212224716p:plain

# import matplotlib.pyplot as plt
# import matplotlib as mpl
# import seaborn as sns
# import numpy as np
# import pandas as pd

fig = plt.figure(figsize=(24, 10))
grid = plt.GridSpec(10, 2, hspace=0, wspace=0.15)
axLs = [fig.add_subplot(grid[i, 0]) for i in range(10)]
axR = fig.add_subplot(grid[:, 1])
for i in range(10):
    axLs[i].plot(df.iloc[:, i])
    axLs[i].set_ylabel(df.columns[i], labelpad=10)
plt.setp(axLs[9].get_xticklabels(), rotation=45)
sns.heatmap(df.corr(),
            annot=True,
            cmap="coolwarm",
            fmt=".2f",
            annot_kws={"size": 14},
            ax=axR,
            center=0)
axR.set_title("correlation")
plt.savefig("sample.png",dpi=300)
  • ヒートマップはseabornを使うと楽
  • sns.heatmapのaxにfig.add_subplotぶち込めばこうやって並べることができる

pickleの利用

めっちゃデカいデータの処理を中断した状態から再開したりとか、ローカルランタイムで処理しておいたものをgoogle driveにアップロードしておいて後で使う、みたいなことができる。処理後のデータ等をpickleという形式にしておいて後で読み込み、データを使うことができる。

# super_big_dataはなんかクソデカデータ
import pickle
with open("super_big_data.pickle", "rb") as pkl:
    pickle.dump(super_big_data,pkl)
super_big_pickle_file="super_big_data.pickle"
with open(super_big_pickle_file, "rb") as pkl:
    super_big_data = pickle.load(pkl)

プロット例6

f:id:potaxyz:20220212233127p:plain

pickle_file="take_time_to_make_np_array.pickle"
with open(pickle_file, "rb") as pkl:
    zz = pickle.load(pkl)[1:].T[1:].T

fig, ax = plt.subplots(figsize=(12, 8))
x = np.log(np.linspace(0, 70, 700 + 1)[1:])
y = np.log(np.linspace(0, 20, 200 + 1)[1:])
z = np.outer(y, x)
S = np.sort(events[0] * events[1])
mappable = ax.pcolormesh(x, y, zz, cmap="Blues_r")
fig.colorbar(mappable, ax=ax, label="z")
ax.scatter(events[0], events[1], c="red", zorder=99, marker="x")
ct = ax.contour(x, y, z, cmap="hsv", levels=S, zorder=90)
ax.clabel(ct, fontsize=14)
for i in range(len(files_and_errortime)):
    ax.annotate("Event {}".format(i + 1), (events[0][i], events[1][i]),
                c="red",
                zorder=99,
                fontsize=14)
ax.set_xlabel("log x")
ax.plot(x,
        exponent * x + constant,
        c="black",
        lw=5,
        label=r"$\log y={}+{}\log x$".format(round(exponent, 2),
                                             round(constant, 2)))
ax.set_ylabel("log y")
ax.set_xlim([0, 4])
ax.set_ylim([0, 3])
ax.legend(loc="lower left")
#plt.savefig("sample.png",dpi=300)
  • 配列zzを作るのにかなり時間がかかるのでpickleで読み込んでくる
  • ax.pcolormeshでz方向が色になるような感じのグラフが作れる
  • contourのclabelの数字の位置の指定はよくわからなかった

plotly

インタラクティブなグラフを作るライブラリは色々あるけどここではplotlyを取り上げる(使ったことあるのがこれだけなので)。

プロット例1

plotlyを使ってインタラクティブなグラフを表示する例(下のグラフは触ってみると動きます)

# import plotly.offline as po
# import plotly.graph_objects as go
# from plotly.subplots import make_subplots
# po.init_notebook_mode()

fig = make_subplots(rows=2, cols=1)
for id in sorted(dict_dataframes.keys()):
    fig.add_trace(
        go.Scatter(
            x=dict_dataframes[id].index,
            y=dict_dataframes[id]["pressure"],
            mode="lines",
            name="id {}".format(id),
        ), 1, 1)
    fig.add_trace(
        go.Scatter(
            x=dict_dataframes[id].index,
            y=dict_dataframes[id]["fit_residual"],
            mode="lines",
            name="id {} (subtracted)".format(id),
        ), 2, 1)
fig.update_layout(yaxis_title_text="Pressure")
fig.update_layout(yaxis2_title_text="Pressure (Baseline Subtracted)")
fig.update_layout(xaxis2_title_text="Time")
fig.update_layout(width=800, height=800)
fig.update_xaxes(matches="x")
fig.update_xaxes(
    type="date",
    range=[datetime(2022, 1, 15, 17, 30),
           datetime(2022, 1, 16, 0, 0)])
fig.add_vrect(
    x0=datetime(2022, 1, 15, 20, 30),
    x1=datetime(2022, 1, 15, 20, 50),
    fillcolor="lightsalmon",
    opacity=0.3,
    layer="below",
    line_width=0,
)
fig.add_vrect(
    x0=datetime(2022, 1, 15, 20, 50),
    x1=datetime(2022, 1, 15, 21, 40),
    fillcolor="lightgreen",
    opacity=0.3,
    layer="below",
    line_width=0,
)
fig.show(renderer="colab") #colaboratoryで使う時はこれで表示

colaboratoryとか自分のパソコン内でpython実行するだけならそのまま実行できるが、こうやってブログにのっけて公開するときはplotlyのページでSign Upする必要がある。

chart-studio.plotly.com

サインインしてsettings > API Keys、Regenerate Keyをしてapi_keyを取得する。その後下を実行する。

import chart_studio
chart_studio.tools.set_credentials_file(username="xxxxx", api_key="xxxxx")
import chart_studio.plotly as py
py.plot(fig, filename="sample", auto_open=True)

colaboratoryで実行するとリンクが取得できるので、iframeのsrcにぶち込んで貼り付けるといい。

gnuplot

texと親和性の高い図をgnuplotで生成する1

あんまり覚えてないけど実験で使ってたのを引っ張ってきた

set terminal epslatex size 14cm,10cm
set output "graph.eps"
set border lw 2
set xlabel "{$x(t)$}"
set ylabel "{$y(t)$}"
set zlabel "{$z(t)$}"
set ztics 10
set mxtics 2 
set mytics 2
set mztics 2
splot "lorenz_equation.txt" u 2:3:4 w l title "Lorenz equation"
quit

lorenz_equation.txtローレンツ方程式を計算した各点のデータ

こんな感じで作ったgnuplotファイル(拡張子がgp)をgnuplot make_graph.gpかなんかで実行してやるとepsファイルとtexファイルが生成される(graph.epsgraph.tex)。epsファイルが表示させたい曲線とか、texファイルに枠の情報が入ってる。texファイルの方は数字の位置とか気に入らなければ目grepしてやればいいと思う。

個人的にはこっちより下の方を使うことが多いが、点データが多すぎると生成されるtexファイルが重くなってしまうので、そういう時はこっちを使っている。

たまに位置ずれが起きたりするのがあんまり好きじゃないポイントではある。

texと親和性の高い図をgnuplotで生成する2

f:id:potaxyz:20220213002456j:plain

あんまり覚えてないけど実験で使ってたのを引っ張ってきた2

こっちは上と比較してepsファイルを出力せずtexファイルだけ生成するもの。

はじめにmacならターミナルを開いて作業フォルダでgnuplotと打ち込んで起動。その後set term tikz createstyleをする(なぜかパイプで渡せないため)。と、なんかいろいろ3つくらいgnuplot-lua-tikz.texみたいなファイルができる。

set terminal tikz size 8cm,6cm
set output "graph.tex"
set border lw 2
set xlabel "{$t$}"
set ylabel "{$u$}"
set mxtics 4
set mytics 4
#set xrange [0:20]
set yrange [0:10]
plot \
    "09.txt" u 1:2 w l lw 2 title "{$u_0=0.9$}",\
    "10.txt" u 1:2 w l lw 2 title "{$u_0=1.0$}",\
    "11.txt" u 1:2 w l lw 2 title "{$u_0=1.1$}"
quit

各txtファイルは数値計算結果が入っている。こいつを実行してやるとgraph.texが出力される。

メインのtexファイルには\usepackage{gnuplot-lua-tikz}を入れておく。あとはgraph.texを読み込みたいところに\include{graph}すればOK。

他の例

f:id:potaxyz:20220213002154p:plain

これはgnuplotファイルを頑張ると並べて表示できるという例

width=0.22
lms0=0.03
rms0=lms0+width
lms1=rms0+0.02
rms1=lms1+width
lms2=rms1+0.02
rms2=lms2+width
lms3=rms2+0.02
rms3=lms3+width

height=0.3
bms2=0.04
tms2=bms2+height
bms1=tms2+0.03
tms1=bms1+height
bms0=tms1+0.03
tms0=bms0+height

#set terminal postscript enhanced color
#set output "kadai3graph.eps"
#set terminal epslatex size 24cm,18cm
#set output "kadai3graph.eps"
set terminal tikz size 24cm,14cm
set output "kadai3graph.tex"

set border lw 2
#set ylabel "{$x(t)$}"
set clip two
set mytics 4 
#set xrange [0:100]
set xtics 20
set logscale y
#set key left top
unset key
set multiplot

##########0

set title "{$n=100$}"

set lmargin screen lms0
set rmargin screen rms0
set tmargin screen tms0
set bmargin screen bms0

set logscale y
set format x ""
set format y "{$%2.1t\\times 10^{%L}$}"
set ylabel "residue"
set yrange [10**(-5):10**0]

stats "kadai3_100.txt" u 3 name "residue100"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",residue100_mean) tc rgb "red"

plot "kadai3_100.txt" u 1:3 w p pt 2 lt 1 lw 2,\
    residue100_mean lc rgb "red" lw 1 dt 2

unset title

set lmargin screen lms0
set rmargin screen rms0
set tmargin screen tms1
set bmargin screen bms1

set logscale y
set format x ""
set format y "{$%2.1t\\times 10^{%L}$}"
set yrange [10**(-6):10**(-2)]
set ylabel "relative error"

stats "kadai3_100.txt" u 4 name "relativeerror100"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",relativeerror100_mean) tc rgb "red"

plot "kadai3_100.txt" u 1:4 w p pt 3 lt 1 lw 2,\
    relativeerror100_mean lc rgb "red" lw 1 dt 2

set lmargin screen lms0
set rmargin screen rms0
set tmargin screen tms2
set bmargin screen bms2

set logscale y
set format "%g"
#unset format y
set format y "{$%2.1t\\times 10^{%L}$}"
set xlabel "trials"
set ylabel "time[ms]"
set yrange [10**1:10**4.3]
stats "kadai3_100.txt" u 2 name "time100"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",time100_mean) tc rgb "red"

plot "kadai3_100.txt" u 1:2 w p pt 4 lt 1 lw 2,\
    time100_mean lc rgb "red" lw 1 dt 2

##########1

set logscale y
set title "{$n=200$}"
set format ""
unset xlabel
unset ylabel

set lmargin screen lms1
set rmargin screen rms1
set tmargin screen tms0
set bmargin screen bms0
set yrange [10**(-5):10**0]

stats "kadai3_200.txt" u 3 name "residue200"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",residue200_mean) tc rgb "red"

plot "kadai3_200.txt" u 1:3 w p pt 2 lt 2 lw 2,\
    residue200_mean lc rgb "red" lw 1 dt 2

unset title
set logscale y
set lmargin screen lms1
set rmargin screen rms1
set tmargin screen tms1
set bmargin screen bms1

set format ""
set yrange [10**(-6):10**(-2)]

stats "kadai3_200.txt" u 4 name "relativeerror200"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",relativeerror200_mean) tc rgb "red"

plot "kadai3_200.txt" u 1:4 w p pt 3 lt 2 lw 2,\
    relativeerror200_mean lc rgb "red" lw 1 dt 2

set lmargin screen lms1
set rmargin screen rms1
set tmargin screen tms2
set bmargin screen bms2

set logscale y
set format x "%g"
set format y ""
set xlabel "trials"
set yrange [10**1:10**4.3]

stats "kadai3_200.txt" u 2 name "time200"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",time200_mean) tc rgb "red"

plot "kadai3_200.txt" u 1:2 w p pt 4 lt 2 lw 2,\
    time200_mean lc rgb "red" lw 1 dt 2

##########2

set logscale y
set title "{$n=400$}"
set format ""
unset xlabel
unset ylabel

set lmargin screen lms2
set rmargin screen rms2
set tmargin screen tms0
set bmargin screen bms0

set yrange [10**(-5):10**0]

stats "kadai3_400.txt" u 3 name "residue400"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",residue400_mean) tc rgb "red"

plot "kadai3_400.txt" u 1:3 w p pt 2 lt 3 lw 2,\
    residue400_mean lc rgb "red" lw 1 dt 2

unset title
set logscale y
set lmargin screen lms2
set rmargin screen rms2
set tmargin screen tms1
set bmargin screen bms1

set format ""
set yrange [10**(-6):10**(-2)]

stats "kadai3_400.txt" u 4 name "relativeerror400"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",relativeerror400_mean) tc rgb "red"

plot "kadai3_400.txt" u 1:4 w p pt 3 lt 3 lw 2,\
    relativeerror400_mean lc rgb "red" lw 1 dt 2

set lmargin screen lms2
set rmargin screen rms2
set tmargin screen tms2
set bmargin screen bms2

set logscale y
set format x "%g"
set format y ""
set xlabel "trials"
set yrange [10**1:10**4.3]

stats "kadai3_400.txt" u 2 name "time400"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",time400_mean) tc rgb "red"

plot "kadai3_400.txt" u 1:2 w p pt 4 lt 3 lw 2,\
    time400_mean lc rgb "red" lw 1 dt 2

##########
set logscale y
set title "{$n=800$}"
set format ""
unset xlabel
unset ylabel

set lmargin screen lms3
set rmargin screen rms3
set tmargin screen tms0
set bmargin screen bms0

set format ""
set yrange [10**(-5):10**0]

stats "kadai3_800.txt" u 3 name "residue800"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",residue800_mean) tc rgb "red"

plot "kadai3_800.txt" u 1:3 w p pt 2 lt 4 lw 2,\
    residue800_mean lc rgb "red" lw 1 dt 2

unset title
set logscale y
set lmargin screen lms3
set rmargin screen rms3
set tmargin screen tms1
set bmargin screen bms1


set format ""
set yrange [10**(-6):10**(-2)]

stats "kadai3_800.txt" u 4 name "relativeerror800"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",relativeerror800_mean) tc rgb "red"

plot "kadai3_800.txt" u 1:4 w p pt 3 lt 4 lw 2,\
    relativeerror800_mean lc rgb "red" lw 1 dt 2

set lmargin screen lms3
set rmargin screen rms3
set tmargin screen tms2
set bmargin screen bms2

set logscale y
set format x "%g"
set format y ""
set xlabel "trials"
set yrange [10**1:10**4.3]

stats "kadai3_800.txt" u 2 name "time800"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",time800_mean) tc rgb "red"

plot "kadai3_800.txt" u 1:2 w p pt 4 lt 4 lw 2,\
    time800_mean lc rgb "red" lw 1 dt 2

unset multiplot
quit

長いね