データ群の列数を自在に調節する(シェルスクリプト)

課題

1列のデータを2列のデータにしたい。具体的には以下のようなイメージ。

$ seq 1 10
1
2
3
4
5
6
7
8
9
10

1 2
3 4
5 6
7 8
9 10

解決策

xargs コマンドを利用すれば良い。

$ seq 1 10 | xargs -n 2
1 2
3 4
5 6
7 8
9 10


xargs と言えば、指定したコマンドに対して標準入力の内容を引数として与えるためのコマンドとして認知されていると思う。 単純なフィルタのコマンドとは少し性質が異なるので、使いこなすまでにやや時間が要るかもしれない(その分、重要度は高い)。

しかし、本記事で紹介するのはこれに対してやや斜め上な利用法である。 xargs に対してコマンドを指定せず、オプションだけを与えている。 コマンドを指定しない場合の動作については、以下のように説明されている。

If utility is omitted, the default shall be the echo utility.

The Open Group xargs

つまり echo が指定された状況と同じ動作をする。 ということは、データ群が何も加工されないまま出力されるということだ。

そして、データ群の列数を変換するキモは xargs の -n オプションである。 これはコマンドに対して引数として与えるデータの数を指定するものである。 ここまで説明すればもう明らかだろう。 echo に対して渡す引数の個数を -n オプションによって指定することで、列数を自在に調節できるのだ。

所感

UNIX的なシェルスクリプトを作成するうえで、データ群の列をいじくることはよくある。 awk を使えば複雑な加工も可能ではあるが、本記事のような機械的な加工が xargs を利用することで簡易的に実現できることは覚えて置く価値はある。 また、本記事の内容以外にも xargs には色々な利用法が考えられるので、別の機会があれば紹介したい。

paizaのランクA相当の練習問題をbashで解く

課題

paizaで公開されている以下の練習問題をbashで解いてみたい。

https://paiza.jp/works/mondai/a_rank_skillcheck_archive/max_range_large

解決策

入力

5 3
1 2 3 2 1

以降は説明のしやすさから上記が入力されることを想定する。

データ正規化

# 入力
5 3
1 2 3 2 1
# 処理
awk '
NR==1 { n = $1; k = $2; }
NR==2 { for (i = 1; i <= k; i++) { print; } }
' 
# 出力
1 2 3 2 1
1 2 3 2 1
1 2 3 2 1

システムからの入力は最初にawkで受ける。引数としてファイル名を指定しない場合は標準入力からデータを引っ張ってきてくれる。

paiza等の競技プログラミングにおいてシステムから入力されるデータはたいてい「正規化」されていない。 ここで言う「正規化」とは、各入力行のデータのフォーマットが同一であることを意味する。 本問では第一行に日数を表すnとkが、第二行に各日の訪問者数のリストが記述されている。これは「正規化」されていない。 UNIX的なシェルスクリプトでは「正規化」されていないデータは扱いづらいため、いち早く「正規化」することを目指す。

本問での正規化はどのように行うべきであるか。 内容的にはk回だけ加算する可能があるため、データをk個に「複製」するという発想をしてみる。

処理をしたあと、nとkの情報は消えておらず、n はデータの列数、kはデータの行数として保存されていることに注目したい。

総和計算の準備(1)

# 入力
1 2 3 2 1
1 2 3 2 1
1 2 3 2 1
処理
awk '
NR==1 { n = NF; }
{
  for (i = NR; i <= NF;   i++) { printf "%s ", $i; }
  for (i = 1;  i <= NR-1; i++) { printf "0 ";      }
  print "";
}
'
# 出力
1 2 3 2 1 
2 3 2 1 0 
3 2 1 0 0 

「連続する」k日の訪問者数の総和を求める必要がある。 kはデータの行数として表現されていることを考えると、「連続する」は、各行の先頭位置をスライドさせたうえで列方向に観察するときに表れると考える。

「正規化」した状態を保持するため、スライドにより末尾に発生する空白は、加算しても影響が無いゼロで埋める。

総和計算の準備(2)

# 入力
1 2 3 2 1 
2 3 2 1 0 
3 2 1 0 0 
# 処理
awk '
{
  for (i = 1; i <= NF; i++) { a[NR,i] = $i; } 
}
END {
  for(j = 1; j <= NF; j++) { 
    s=a[1,j]; for (i=2; i<=NR; i++) { s=s " " a[i,j]; }
    print s
  }
}'
# 出力
1 2 3
2 3 2
3 2 1
2 1 0
1 0 0

この工程ではいわゆる行列の転置を行っている。 転置を行う理由は、たいていのコマンドが行指向だからだ。 つまり、加工の対象が行内で完結すると都合が良いので、そのように変換(=転置)する。 なお、ここで言う加工はもちろん加算のことを指す。

総和計算の準備(3)

# 入力
1 2 3
2 3 2
3 2 1
2 1 0
1 0 0
# 処理
tr ' ' '+'                                              
# 出力
1+2+3
2+3+2
3+2+1
2+1+0
1+0+0

k日の総和を求めるために bc コマンドを用いることとする。 bcは各行ごとの計算式を評価して値を返してくれる。 各行に合計するべき数値のリストが空白区切りで並んでいるので、これを加算の記号「+」で置き換えることで計算式を生成する。

総和を求める

# 入力
1+2+3
2+3+2
3+2+1
2+1+0
1+0+0
# 処理
bc
# 出力
6
7
6
3
1

bcコマンドに計算させるのみ。

日付情報を付加する

# 入力
6
7
6
3
1
# 処理
nl
# 出力
     1  6
     2  7
     3  6
     4  3
     5  1

総和の最大値を求めるだけであれば容易である。 sortコマンドにより降順で並び替え、その先頭の要素を取り出すだけで良い。

しかし、本問の解答としては、単純に最大値を返すだけでなく、最大となる候補の数と、候補の最も早い日付を返す必要があり、少しだけややこしい。 そこで、ソートすることをベースに、この2つの観点を満たすために小細工する。

まずはnlコマンドを通す。本来の意図としては行番号を表現するものだが、今回の文脈では日付と捉えることができるだろう。

最大値を持つ区間を集約

# 入力
     1  6
     2  7
     3  6
     4  3
     5  1
# 処理
sort -b -k2,2nr -k1,1r
# 出力
     2  7
     1  6
     3  6
     4  3
     5  1

そのうえでソートをしてみよう。 ソートの最優先のキーはもちろん総和を表す第二列だ。これは数値の降順としている。 次点の優先度として日付を表す第一列を指定する。これは数値の昇順である。

不要な情報を上書き

# 入力
     2  7
     1  6
     3  6
     4  3
     5  1
# 処理
awk '
NR==1 { 
  day = $1; 
}
{
  print day, $2; 
}
'
# 出力
2 7
2 6
2 6
2 3
2 1

カウントの常套手段はuniqコマンドであるが、現在の入力をそのままuniqに渡しても何もならない。 ここで解答のために必要な情報を改めて整理する。

  • 各「総和」の数を計算すること...①
  • 各「総和」の区間の先頭の日付を取得すること...②

①はuniqの-cオプションで対応できる。ただし、-cは行の重複によるカウントなので、最大数を持つ行の記述を統一しなければならない。 現在は第一列の日付が存在するため、これを実現するためには支障がある。

一方で、第一列の日付は、最大数をもつ行の先頭にのみ興味があるので、第一列をすべてこの値で書き換えると、重複のカウントが可能になると気づく。 書き換え後の値は、これまでのロジックから入力の第一行第一列に位置しているので、これをすべての行に対して上書きする。

カウントと解答の抽出

# 入力
2 7
2 6
2 6
2 3
2 1
# 処理
uniq -c                                          |
head -n1                                         |
awk '{print $1,$2}'
# 出力
1 2

ここまで来たらやることは一本道。 uniqにより各「総和」のカウントを行い、その先頭行(最大カウント値と先頭日付)のみを出力して、本問の解答とする。

この入力例では最大数を持つ区間がひとつのみであったが、複数でも問題なく成り立つ。 そのときはuniqが出力するカウント値が1ではない値になるだけだ。

スクリプト全体像

awk '
NR==1 { n = $1; k = $2; }
NR==2 { for (i = 1; i <= k; i++) { print; } }
'                                                          |
awk '
NR==1 { n = NF; }
{
  for (i = NR; i <= NF;   i++) { printf "%s ", $i; }
  for (i = 1;  i <= NR-1; i++) { printf "0 ";      }
  print "";
}
'                                                          |
awk '
{
  for (i = 1; i <= NF; i++) { a[NR,i] = $i; } 
}
END {
  for(j = 1; j <= NF; j++) { 
    s=a[1,j]; for (i=2; i<=NR; i++) { s=s " " a[i,j]; }
    print s
  }
}'                                                         |
tr ' ' '+'                                                 |
bc                                                         |
nl                                                         |
sort -b -k2,2nr -k1,1n                                     |
awk '
NR==1 { 
  day = $1; 
}
{
  print day, $2; 
}
'                                                          |
uniq -c                                                    |
head -n1                                                   |
awk '{ print $1,$2; }'

所感

転職のひとつの手段としてpaizaに興味を持ち、初めて登録してみた。 最近はコードやスクリプトを書く機会が減っており、なまっていると思いながらも、bashシェルスクリプト)で解くことができた。

本問に対するbashでの解法をわざわざ執筆した理由は、UNIX的な考え方を適用してスマートに解答を求められるからだ。 つまり、パイプラインを通してデータを次々と加工し、その出口で最終的な解答を得ることができる。 アルゴリズム的に最適化された解法と比較すると効率は落ちるが、それはUNIX的な考え方の範疇ではない。

(注意)スクリプト提出時のチェックでは計算時間切れになる入力セットあり

映画『かがみの孤城』舞台挨拶 内容書き起こし(2024/03/30)

注意事項

個人的なメモを書き起こしたものです。 細かい言い回し等まで完璧に再現できているものではありません。 また内容に誤りを含む可能性があります。 ご了承ください。 致命的な誤りがありましたら修正しますのでご指摘をお願いします。

イベント情報

舞台挨拶

原=原監督の発言です。

新=新垣プロデューサーの発言です。

各見出しは公式のものではありません。

はじめに

  • 原:初めて来てくれた人ありがとう。久しぶりの人もありがとう。
  • 新:今日は自由に写真を撮ってくれてOKです。
  • 新:(新宿ピカデリーでの)イベントはいつ以来?去年5月26日の再上映が最後だったでしょうか。時間経ってみてどうでしょう?
  • 原:これだけの人がイベントに来てくれるのは監督として嬉しい。
  • 新:初めての人は...?何人かいる。最前列の人は30回!?

映画祭

  • 新:去年は再上映あり、外国映画祭ありだった。外国の人の反応はどうでした?
  • 原:QAでは通訳してもらってやりとりをしたが、どこの国でも学校に行けない辛い子がいると聞いた。
  • 原:一番規模が大きかったのはアヌシー国際映画祭スタンディングオベーションもあった。手応えがあったが...笑(グランプリは受賞できず)。
  • 新:過去にも色々受賞はしていたので笑。自分もグランプリとるのではと思って会社に無理言って会場に。
  • 新:フウカとウレシノのロマンスのシーンで盛り上がっていたのは意外だった。
  • 原:海外の人はリアクションが良い。上映後に限らず上映中でも。
  • 新:国ごとの違いはある?
  • 原:反応が大きい国が多い。日本が一番反応が少ない。
  • 新:みなさん、リアクションがほしいって!笑(会場拍手)。
  • 原:海外の人は楽しんでくれているのがわかる。
  • 新:アカデミー賞について、結局「君たちはどう生きるか」が受賞しましたが、「かがみの孤城」は世界中のアニメの33本には入っていました。
  • 新:毎年この日をイベント日にしたい。ただ今日もトーク以外については予定はないですが...笑。

演者のその後

  • 原:かがみの孤城の映画が完成してから2年以上が経過した。出演者の皆さんがその後もドラマやCMや映画で活躍しているのを見ると嬉しくなる。あの子達がちゃんと売れていっている。
  • 新:當真さん、吉柳さんは特にね。
  • 原:當真さんはアフレコでは中学生だったのにもう高校3年とのこと。びっくりしたのは吉柳さんがグラビアに出ていたこと。細かいことは言えないが「さくらあああ!!!」と思った。
  • 原:それ以外だと喜多嶋先生の同僚役の岩田アナ。日テレで中途半端な立ち位置だといじってしまったが、ぐるナイにゴルゴのメイクで角刈りにして出てきたときはやるじゃねえかと思った。これからも楽しませてほしい。
  • 新:ちゃんと追っかけてるんだね。
  • 原:とばっちりだったけどできる子だなあと。これからも(面白枠として)頑張ってほしい。報道はもう無理かも...?

(時間があったので観客からのQA)

QA.1

  • 客:7人の中学生を演じたのはほとんどが中学生だがひとりはベテランの高山さん。なぜ高山さんを選んだ?
  • 原:キャスティングのバランスがあった。役者だけでなく声優を入れるとか。高山さんを指名したのは自分。マサムネは見た目がコナンくんに似ているので。高山さんは男の子の声がうまい。クレヨンしんちゃんのおケイ(本田ケイ子)の役もやってもらっていて上手いと思っていた。
  • 原:「真実はいつもひとつ」をアフレコの前日に思いついた悪ふざけ。拒絶されるかと思ったが「いいですよ」と。
  • 新:日テレチームがざわついたが(コナン制作は読売テレビ)、裏でちゃっちゃと...。
  • 原:一応、本来のテイクもとってあった。

QA.2

  • 客:フルアニメで希望を表現している内容で良かった。ただリオンの姉はかわいそうに亡くなってしまった。亡くなる前に城の化身になって、現実でいじめに遭っている人たちを救った。そのようなサブキャラの扱いについて考えていることは?
  • 原:幼くして亡くなってしまう子達はいる。その子達が成長したらどうなるのかは想像するしかない。運命は変えられない。自分はそういうこともなく健康で生きられること、当たり前に生きられることの素晴らしさを噛み締めたい。

QA.3

  • 客:三鷹オルゴール館に行った。トロイメライの選曲にこだわって、わざわざディスクを作ったりしたと聞いている。そこまでした理由はなにか?
  • 原:トロイメライの選曲は脚本の丸尾さんが行い、自分は理由はちゃんとは聞いていない。ただメロディを知っていて活きると思った。ディスクはネットで探して、A-1 Pictures のプロデューサーが買った。三鷹オルゴール館で録音して、そのまま寄贈した。

プレゼント争奪じゃんけん

  • 新:今日は入場特典はないですが、私物ですが原監督のサインが入った完全版が2人分あるので、原監督とのじゃんけんで買った人に。

(=== 当選者決定後のコメント ===)

  • 当選者1:テレビでの放送を見て感動して、ちょうどイベントがあるということで来た。
  • 当選者2:仕事をしていてテレビのほうは見れなかったが、この映画を見るときは毎回泣きながら見てしまう。今日は仕事を抜け出して来た。

おわりに

  • 新:今日は時間が押せない理由がある。
  • 原:この後、新文芸坐でのイベントがあって、そちらでも登壇する。もしよければこれから皆さんもご一緒に笑。登壇は21:15頃から。今は河童のクゥが終わったくらい?
  • 原:最後に。この映画の監督をすることができて幸せ。このようなイベントを開催するとたくさん人が来てくれる。今の日本は子どもの不登校や自殺がずっと減らない。この映画がそういう子たちの救いになることを願っている。そしてこの映画を見た人が、そういった人たち(子供も大人も)に、何か今までにできなかった接し方をするきっかけになってほしい。いじめを受けている人は心が弱っている。ちょっと声をかけるだけで違う。それくらいはしていきましょう。僕もそうしたい。この映画が僕だけでなく、たくさんの人達にとって、特別であり続けることを願う。
  • 新:来年もこのようなイベントができれば。

アカウント作成後にやるべきこと(AWS)

セキュリティ

項番 対応 料金 補足
1 ルートのMFA認証を設定 無料
2 管理者ユーザを作成 無料 管理者グループ(ポリシー:AdministratorAccess)に所属させる
3 管理者ユーザのMFA認証を設定 無料
4 IAMユーザへの請求情報へのアクセスを許可 無料 デフォルトはルートのみ閲覧可能

請求

項番 対応 料金 補足
1 PDF請求書をメールで配信 無料
2 請求アラートを設定 無料 CloudWatch請求アラートを受信を有効化&CloudWatchでアラートを設定する

参考

佐渡旅行の備忘録(v0.1)

はじめに

  • 主な目的:『アイの歌声を聴かせて』の聖地巡礼とガシマシネマの訪問
  • 居住地:大阪
  • そのほか:過去に佐渡島を訪れた経験は無い

1日目:3/13(水)

(自宅→伊丹空港

  • 発:6:00
  • 着:7:15

大阪モノレールを経由するルートで伊丹空港まで移動しました。 最寄り駅は「大阪空港駅」になります。

搭乗の手続き

諸事情により、当初搭乗予定であった8:40発の便ではなく、10:00発の便に乗ることになりました。

飛行機に乗ることが久しぶりであったため保安検査の要領を忘れておりました。 特に以下のことに関してはうっかり忘れないように注意しましょう。

  • はさみやカッター等の刃物類の扱い
  • 飲料を含む液体の扱い(飲料は保安検査を通過したあとに購入するべし)
  • ノートPCやタブレット類の扱い(事前にカバンから取り出す)

伊丹空港新潟空港

  • 発:10:00
  • 着:11:10

実は国内線に乗るのは初めてでした(米国行きの国際線は経験あり)。 国際線のエコノミークラスに乗ったときは座席が狭く、なかなか不快なフライトであったので、その意味では飛行機自体にややネガティブな印象がありました。 しかし、今回のフライトはそんなことはなく、快適なフライトを享受できたと思います。

新潟空港→新潟港)

  • 発:11:20
  • 着:11:45

本来はさくら交通のミニライナーを利用する予定でしたが、フライトを変更したためミニライナーに乗ることができませんでした。 歩くにはなかなか長距離なのでここはタクシーを利用しました。 金額はちょっと痛かったですが(約3,200円)、遅れをリカバリーできたのでおっけーです!

乗船の手続き

佐渡汽船のカーフェリー(おけさ丸)をあらかじめネットで予約してあり、当日は自動発券機で発券するのみでした。 発券後に昼食としてらーめんを喫食しながら出発の時刻を待ちます。

(新潟港→両津港

  • 発:12:25
  • 着:15:05

おけさ丸では以下の席が用意されています。

種類 料金
スイートルーム 16,510
特等 7,300
1等 5,020
2等 2,960

※本記事執筆時点の片道大人一人あたりの料金(運賃表

今回は1等チェア席を利用してみました。全席指定です。 同じ部屋にいたのはわたしも含めて二人だけでした。閑散期なんですかね。2等にしても良かったかもしれません。 船外の景色を見たかったので窓際の席にしてみたのですが、窓の汚れが酷く、あまりきれいに景色が見れなかったのが残念です。

チェア席で少し休んだ後に後方の甲板に出てみましたがめちゃ寒い。3月でこの寒さかあ...。

『アイの歌声を聴かせて』の聖地巡礼

天気が良ければ両津港到着後にそのまま聖地巡礼に行こうともともと考えておりました。 実際は天気が良かったとは言いづらかったですが、とくに支障は無いと判断して巡礼に向かいます。

聖地巡礼のために こちらを参考にさせていただきました。

移動手段は レンタサイクル です。 佐渡観光情報案内所に立ち寄ってレンタルの手続きをしました。身分証明書のコピーを取られます。

今回は2時間500円のシティタイプをレンタルしました。 シティタイプですが電動自転車なので道中はスイスイです。

行き先は住吉海水浴場方面。 道中は海に面しているので自転車を走らせるのは気持ち良かったです。景色も良かったですね。 普段はあまり自然が無いところで過ごしているので新鮮でした。 ただ、途中で雪のような雹のようなものが降ってきたので、そこは厳しかったです...。


住吉海水浴場近くの巡礼地に到着。 ネットでよく見る聖地に直接訪れることができました。


せっかくなのでサトミの通学の雰囲気を味わうために(?)海へ向かう方向へ連続で撮影してみました。


巡礼後、16:30頃には両津港に戻り、相川行きのバスを待ちます。

両津港佐渡汽船バス停→相川バス停)

  • 発:16:47
  • 着:17:51

自分はペーパードライバーで車を運転できないので、島内での長距離移動は基本的にバスに頼ることになりました。 両津港(島の東)と相川(島の西)を結ぶ本線は1時間に1~2本程度の頻度で運行されています。思っていたよりも頻度が多くて助かりました。

料金は基本的に現金払いです。本区間は840円でした。バス内での両替は面倒だったので事前に小銭を用意しておきました。 現金払いのほかに、1day~3day限定の乗り放題のチケットを購入するという選択肢があることを教えていただいておりました。 ですが、今回バスは1日1本しか乗る予定がなく、コスパが悪かったので利用しませんでした。

(相川バス停→宿泊所)

  • 発:18:00
  • 着:18:30

近くにスーパーがあったので地元民の顔をして飲料等の買い物をしてみました。 海が近いのでお魚系の売り場が大きかったような気がしないでもないです。 佐渡らしいものも買ってみましたよ。 たしか丹波に宿泊したときもご当地の牛乳を買った気がします。地域性は牛乳に表れるのだ(仮説)。


買い物のあとにまっすぐ宿泊先に向かっても良かったですが、北沢浮遊選鉱場が近かったのでそちらへ。しかし暗くて何もわからず。 この写真の左部分に階段があり、その階段を上がると北沢浮遊選鉱場が見えることを翌日に知ります。

ホテルみやこでの宿泊

ホテルみやこ(楽天トラベル)に宿泊しました。 こちらを選定した理由を以下にあげておきます。

  • 口コミ評価が良かった
  • 最終チェックイン時刻が19:30であり時間的な余裕があった
  • 佐渡の料理を豪華に食べてみたかった(ので朝食・夕食付きプランがあるところにしたかった)
  • チワワが可愛いかった

こちらのホテルはマスター(女将さん)が一人で切り盛りされているようでした。 ホスピタリティ満載で、とても居心地よく過ごすことができました。 とくに夕食が!マジで!うまい!普段はよろしくないものを食べているからでしょうか。素晴らしい食事でした。 畳の部屋で布団敷いて寝たのも久しぶり〜。

2日目:3/14(木)

北沢浮遊選鉱場の観光

8:15頃にチェックアウトし、途中ブラブラしたりしながら「北沢浮遊選鉱場」に向かいました。昨日のリベンジです。 天気はほどほどには良かったですが、風が強かったです。

前日夜には暗くてよくわからなかった階段がこちら。


浮選鉱所・浮遊選鉱場(四角っぽいやつ)とシックナー(丸っぽいやつ)の間には川が存在していたので、それぞれ近寄って見学するためには、川を回り込まないといけないのが注意です。

(北沢浮遊選鉱場→ガシマシネマ)

北沢浮遊選鉱場はガシマシネマの北西に位置しています。 まずは南側へくだり、それから京町通りを経由して、ガシマシネマへ向かいました。

京町通りの途中で、「相川バス停からガシマシネマへ向かう際に経由するであろう例の階段」の横を通りかかりました(階段上の位置)。 せっかくなので(?)一度下りて上がってみましたが、確かにきついのでお越しになる方は気をつけてくださいね。

途中で見つけたものたち。

ガシマシネマでの映画鑑賞

今回の佐渡旅行の本命のガシマシネマさんです。

外観は日本の古民家そのもので、映画館のようには思えませんでした。 玄関から中に入ると、映画のポスターやパンフレット等が飾られているエントランスがあり、マスターに迎えていただきました。 エントランスに向かって左が廊下になっていて、廊下の左手が映画館のスペース、右手が喫茶店のスペースになっています。

茶店のスペースに『アイの歌声を聴かせて』の祭壇がありましたので拝観🙏 『この世界の片隅に』(3月上映中)に関する資料も置いてありました。


映画館のスペース


茶店のスペース


映画の上映時間は以下の通りでした。

この世界の片隅に』は映画館で鑑賞するのは初めてで、この機会があって良かったです。 『窓際のトットちゃん』と同じく、戦争と隣合わせの平和(日常)を描いた作品です。 改めて鑑賞して2つの作品の描写の共通点にもいくつか気が付きました。 わたしの他にもお客さんが何人かいらっしゃいました。

千年女優』はわたしだけの貸し切り!座席はど真ん中です。 これまでの鑑賞回数は10回弱くらいですかね。 エンドロールの「ロタティオン(LOTUS-2)」には震えました。 やはり『千年女優』はなんぼ見てもいいですね〜(^o^)

映画館としての印象としましては、ミニシアターでありながら、音響的なところは普通のシネコンと謙遜しない(むしろ超えている?)レベルじゃないかと思いました。 古民家を改造して作られたとのことですが、どんな工夫がなされているのか、マスターに聞いておいても良かったかもしれません。

上映後は他のお客さんやマスターとしばしお話させていただきました。 普段は現実で周囲の人と映画に関する話をすることはないので(寂しい人間)、貴重な時間でした!


お昼は例にもれずカレー。


ガシマシネマを訪れた証。

(ガシマシネマ→史跡佐渡金山)

  • 発:15:20
  • 着:15:45

ガシマシネマが面している京町通りをそのまま東側に登っていくと金山に着くということをマスターから教えていただいたので、その通りに歩いてみました。 途中で竹林の道や急な石段を下る道など、やや不安になるような道も通りましたが、たしかに金山にたどり着くことができました。 「正しい道か不安になるかもしれない」ということもマスターが事前に教えてくださったので安心でした。 ちなみにGoogle Mapではこれとは異なる経路(新潟県道463号線を経由する経路)が推薦されてしまうので無視してください。

金山の観光

あまりゆっくり観光している時間はなかったので、コースを一つだけ選んで観光しました。 宗太夫坑 江戸金山絵巻コースです。 当時の採掘作業の様子や作業者の暮らしについて展示されているコースになります。 急峻で奥深い坑道に人形が配置されていたり、その人形が動いていたり、けっこう凝った展示になっていたと思います。

金山といえばこれ!(偏見)

あとは売店でこんなものを見つけたり。

(史跡佐渡金山→相川バス停)

  • 発:16:40
  • 着:17:15

金山の観光のあとは、もと来た道を戻りました。 ちょうど夕暮れ時で、坂道を下る道のりであったので、たくさん写真を撮影してみました。


途中の工事現場でこんなかわいいものがあったよ!

(相川バス停→夷本町バス停)

  • 発:17:18
  • 着:18:17

この日の宿泊は両津港の近くに予定しており、夕食がついていないプランだったので、食事処を探しておりました。 昨日と同じく海鮮を食べたい→お寿司!という(短絡的な)思考によりお寿司屋さんに行くことに。 ターゲットを決めて、その付近の夷本町(えびすほんまち)バス停で降りました。

(夷本町バス停→いしはら寿司)

  • 発:18:17
  • 着:18:30

道のりが暗い。

いしはら寿司での夕食

お店の夜の雰囲気良し。


ここまで来たらもう料金は気にせず食べてみたいものを注文しました。 おすすめ握り10貫(2750円!!)

(いしはら寿司→ゲストハウスじんく)

  • 発:19:35
  • 着:19:55

道のりが暗い(大事なことなので)。

ゲストハウスじんくでの宿泊

ゲストハウスじんく(じゃらん)に宿泊しました。

ゲストハウスに宿泊するのは初めてでした。 他者との交流が目的というより、立地や宿泊料の観点でこちらを選びました。

3日目:3/15(金)

(ゲストハウスじんく→両津港

  • 発:xx:xx
  • 着:yy:yy

両津港は目の前なのですぐに到着しました。

乗船の手続き

帰りは佐渡汽船のジェットフォイルでした。 行きの時点ですでに発券していたので、このときには特に何もやるべきことはなく、待合室あたりをブラブラしていました。 ちなみに特別割引が利いていて、普段は7,050円のところ、なんと2,960円(カーフェリー2等相当)でした! 後から冷静に考えてみるとえげつないですね。

両津港→新潟港)

  • 発:9:40
  • 着:10:47

ジェットフォイルはカーフェリーのときの半分以下の時間で目的地に到着できる凄いやつです。 その反面、ジェットフォイルでは乗船中は基本的に自席でシートベルトをして座っている必要があります。カーフェリーでは乗船中は自由に行動できました。 船外の目視や体感として、カーフェリーの2倍以上のスピードが出ているのかはよくわかりませんでした。

(新潟港→新潟空港

  • 発:11:05
  • 着:11:30

復路はすべて当初計画通りに行動できていたのでミニライナーに乗ることができました。 定員は13名です。事前予約せず、満席になってしまっていたら乗れませんので、心配な方はあらかじめ電話で予約をしておきましょう。わたしはそうしました。

お値段はタクシーを利用する場合より大幅に安いので(3,200円 vs. 700円)、可能であればミニライナーに乗りましょう。

搭乗の手続き

伊丹空港と同じような要領で保安検査を通過してフライトを待ちました。 保安検査後に昼食を食べる予定でしたが、規模的な問題か、食事処がありませんでした。これは痛い。伊丹空港にはあったんですけどね...。

新潟空港伊丹空港

  • 発:12:45
  • 着:14:05

とくに問題なくフライトを終えました。

おわりに

佐渡島はいいぞ

そのほか

交通メモ(実績)

交通手段 出発地 到着地 時間 価格 補足
飛行機 伊丹空港 新潟空港 1h5m 25,760 往復料金(ANA バリュー7K)
カーフェリー 新潟港 両津港 2h30m 5,020 1等チェア席
ジェットフォイル 両津港 新潟港 1h7m 2,960 特別割引を適用
路線バス 両津港佐渡汽船 相川 1h4m 840
ミニライナー 新潟空港 新潟港 25m 700
タクシー 新潟空港 新潟港 25m 3,200 往路でミニライナーの代わりに利用

参考サイト

お土産

見た目に目が眩みました。9.9割は自分用です。

買い物

どちらもガシマシネマで購入しました。 『君だけのシネマ』のモデルはもちろん...?

発見

佐渡島出身Youtuberであるけえ【島育ち】氏が佐渡島を盛り上げているそうです。 両津港に盾が飾られていました。


この配色をどこかで見たような...?(参考

変数の種類を知る(Ansible)

課題

Ansibleには様々な種類の変数があって、状況によってどの変数を利用するべきかわからない。

解決策

以下に整理する。

参照範囲の観点での概観

種類 説明 変数例
Global領域の変数 Ansible実行の全体に対して定義される変数。プレイブックのどこからでも参照することが可能 環境変数 / エクストラ変数
Play単位の変数 個々のプレイ内で定義される変数。プレイ内で参照する場合に利用 プレイ変数 / タスク変数 / ロール変数 / マジック変数
Host単位の変数 各ターゲットノードに関連付ける変数。そのホストを対象とする インベントリ変数 / レジスタ変数 / ファクト変数

各変数の説明

エクストラ変数(extra variables)

コマンドラインから指定できる変数のこと。 具体的には ansible-playback コマンドに「-e」(--extra-vars)オプションを付けることによって定義できる。

環境変数(environment variables)

environment ディレクティブを利用して定義する変数のこと。 Ansibleを利用する際の環境変数であり、LANG、PATH、SHELL等が ansible_envに構成されている。

プレイ変数(play variables)

個々のプレイ内で定義される変数。 Vars セクションで指定した「vars」「vars_files」「vars_prompt」などが含まれる。 「vars」ディレクティブだけはタスク(tasks)やロール(roles)、ブロック(blocks)内でも利用できる。 これらはそれぞれ定義する場所によって名前が変わる(i.e. タスク変数、ロール変数、ブロック変数)。

マジック変数(magic variables)

Ansible による定義済みの変数。 主にインベントリに記載された情報や、Ansibleの環境情報を定義している。 基本的に変更することはできない。

インベントリ変数(inventory variables)

インベントリ内で定義される変数。 ターゲットノートごとに指定するホスト変数と、グループ全体に指定するグループ変数がある。

レジスタ変数(registered variables)

タスクの実行結果の戻り値を格納するための変数。 各タスク内に register ディレクティブを用意し、その後ろに変数名を定義することによって、タスクの戻り値をマッピング形式で格納できる。

ファクト変数(host facts)

ターゲットノードのシステム情報が格納されている変数。 Ansible はタスクを実行する前に、ファクトと呼ばれるシステム情報を各ターゲットノードから取得し、「ansible_facts」という変数名に格納している。

所感

それぞれの変数には適した役割があるため、この役割に沿わない利用方法をする変数が存在すると、運用・保守が困難になる。 あらかじめ定義方法の方針等は検討しておきたい。

参考

基本の正規表現を知る(正規表現)

課題

正規表現には様々な種類が存在すると聞くが、基本として覚えるべき正規表現はどのようなものか知りたい。

解決策

POSIXの範囲内では以下の3種類の正規表現が存在する。 まずはこれらを学習すると良いのではないか。

種類 略称
基本正規表現 BRE (Basic Regular Expression)
拡張正規表現 ERE (Extended Regular Expression)
AWK正規表現 -


POSIXの範囲内の代表的なコマンドとそれに対応している正規表現の例を以下に挙げる。

コマンド名 対応している正規表現
grep (-E オプションなし) BRE
grep (-E オプションあり) ERE
sed BRE
AWK AWK正規表現

sed において頻繁に利用される -r オプション(EREを利用するオプション)はPOSIXの範囲外


正規表現において利用できる機能についての詳細な説明は割愛する。 各正規表現の違いについてのみ簡単に述べておく。

  • BRE に対する ERE
    • メタ文字「+」「?」「|」が利用できる
    • メタ文字「(」「)」「{」「}」に関してバックスラッシュをつけない
    • 後方参照「\n」が無保証(の実装がある)
  • ERE に対する AWK正規表現
    • メタ文字「{」「}」による繰り返し指定が利用できない

補足

POSIXの範囲内の正規表現は、例えば以下のような機能には対応していない。 POSIXの範囲から外れることを理解したうえで、対応するツールを利用して実現する必要がある。

  • 単語境界
  • 先後読み
  • キャプチャ無しの括弧
  • アトミックグループ/絶対最大量指定子
  • 控えめなマッチ

所感

ひとえに正規表現と言っても様々な種類があるため混乱することが多い。 自身の環境でどのような正規表現が対応しているのか正しく把握したうえで利用することが重要であると思う。

参考