Spider-Man: Far From Home

Spider-Man: Far From Home

Tony Stark亡き後のヒーローとは何なのか?という話。TonyはPeterに入れ込んでいたみたいだけど、Tonyの技術者・経営者としての成功のような、自信を支えるバックグラウンドを持っていないPeterに押し付けるのは酷だよなあと思う。そのPeterも正体バレ+Beck殺しの濡れ衣を着せられてしまい、追い詰められていきそうで不穏な感じ。かつてのTony StarkもStark Industriesの兵器の流出問題で同じような立場に立たされていたけど、Tonyを支えた才能はPeterにはない。しかしPeterには支えてくれる仲間がいる……。これシンフォギアXVでは??やはりアイアンマンはシンフォギア(確信)

ホログラムを使って現実を上書きする戦闘もよかった。ニンジャスレイヤーのメンタリスト戦を彷彿とさせる、何を信じればいいのかどんどん分からなくなっていくトランス感が気持ちいい。こういうメタ系の演出は一般受けしないので普通の映画ではやんない印象があるけど、そもそも一見さんを容赦なく切り捨てているMCUだからできるのかなと思った。

ICFPC2019感想&反省

ICFPC2019が終わってもう一週間も経ってしまった。忘れないうちに感想と反省を書いておく。

リポジトリは生きてるサーバのパスワード等が入っているのでまだ公開しません。後処理をする前に中国旅行に来てしまったため……。

あ、チームは1kg cheeseです。Register直前までチームメンバーが好き勝手なチーム名を提案していてまとまらなかったが、yuustiがドミノ・ピザの1キロチーズピザを頼もうとか言い出したため、なし崩し的にこのチーム名になった。

コンテストの感想

問題文中でLambda LifterとPanterに言及しており、しかも3回アップデートが来るというそれらの回を踏襲したような形式から、また微妙な回かと思って戦々恐々としていたが、フタを開けてみればかなり良い問題だった。問題自体は適度な大きさの探索でとっつきやすく、プログラムを提出する必要がないのは安心感があるし、タイブレークとしてリアルタイム性のあるマイニング問題が出たのも新鮮味があった。

一方で、前半に要素を詰め込みすぎな感じはした。特に24時間ノンストップでLightningを終わらせて疲れ切った直後に、4時間でマイニング対応してねというのはなかなか辛い。体力を消耗して余裕がなくなる前に対処できるよう、最初からマイニングのようなリアルタイム性を要するシステムが来ると分かっていると良かった。

役割分担

今年はy3eadgbeが一身上の都合で抜けて、新しくkenkooooが入った。役割は以前とほぼ同じで、AI班がkawatea, yuusti, mkut、インフラがosa_k, amylase, kenkooooという分担になった。

  • ○役割分担、人数の割当て共に適切だった。
  • ✘インフラ班は人数が多かったものの、互いに互いのコードをちゃんと把握しておらず、ownerが寝ているときにトラブルが発生すると結構どうしようもなかった。特に今回はリアルタイム性が重要だったため、即時トラブル対処ができないと点数に直結してしまうので厳しかった。
    • 全員バラバラの言語かつモジュールでシステムを作っていたのが遠因となりシステムが把握しづらくなっていたので、全部入りの1モジュール構成にすれば見通しが良かったかもしれない。
    • MySQLにアクセスする部分はPythonを使っていたが、誰もPythonMySQLドライバの挙動をよく分かっておらず、異常に大量のコネクションを張ろうとして、サーバ側のコネクション制限に引っかかりまくって辛かった。
  • ✘インフラがいつ壊れるか戦々恐々としていると結構脳に負荷がかかるので、暇な時にAIを実装してみるといった遊びができなくて悲しい。
    • 自分は左手法で隙間を舐めていく動きがいいんじゃないかとずっと主張していたので実装したかったけど、余裕がなくて結局諦めてしまった。
    • 壊れにくく、かつ他人にメンテを投げやすい設計ができると負荷が軽減できるのでは?

解答ファイルの管理

前回まではソルバの出力をwrapperがポータルサイトREST APIを叩いてアップロードする形式だったが、今回は所定のディレクトリに置かれたファイルをIndexerが定期的に確認する方式にした。

  • ○前回までと同様、Flask製のポータルサイトMySQL Connection Error等で落ちまくっていたため、HTTP経由で生成した解答を登録する方式だとほぼ間違いなく死んでいた。
  • ○インフラが整わないうちに生成された解答をとりあえずコピーしておき、後で採点するというムーブができた。
  • ✘ファイルはコピーされたがIndexerにまだ検出されていない状態の解答が見えないため、AI班に待ちが発生してしまった
  • ✘解答のVerifyもIndexerにやらせてしまったため、バッチ実行の後などで解答が大量に生成された後はIndexerが遅くなった。
    • 新しいファイルを拾ってキューに入れるプロセスと、実際に採点と登録をするプロセスを分ければマルチプロセスできそう。
    • ソルバを実行するためのwrapperに採点まで組み込む構成も考えたが、verifierがおかしいことが後でわかった時のbackfillや、複数のマシンをセットアップした時にいちいちHeadless Chromeをセットアップしないといけなくて面倒くさいなどの、非本質的な部分でrejectしてしまった。ただ、AI作成者が自分のマシンでwrapperを走らせていたことも考えると、一概にダメとは言えなそう。

ソルバの管理

前回と同様、Gitリポジトリのmasterで指定されたパスにあるコードを make && ./run.sh する素朴な実装にした。

  • ○ソルバの更新がすぐに反映できた。
  • ○サーバ上で実行する限りにおいて、必ず最新の補助スクリプトを使うことを強制できた(2017年はブランチで分けたが、古い補助スクリプトが使われて問題を起こすケースがあった)。
  • ✘ソルバにバグが混入すると、その後もずっとバグり続けるのが厳しい。オフライン実行型のタスクなら普通は大きな問題にはならないが、今回はLambda Coinのマイニングというオンラインに近いタスクがあったため、バグったソルバのせいで解答に失敗することがあった。最終的に10万LMC程度損していると思われる。
    • ソルバをパッケージ化してfreezeし、可能な範囲で正しさが保証されているソルバを動かせるようにするべきだった(ディレクトリを切ることで擬似的にfreezeしてもらっていたが、間違ってバグっているコードで上書きする事故があった)。

マイニング

Lightning終了時点まで完全にオフラインの問題だと思っていたところに突然ぶっこまれたので、あまり複雑なシステムを実装する気力がなく、最終的にはその時点で有力だったソルバと、kawateaが作ったマップ生成プログラムを直列に実行してsubmitするスクリプトを書いた。

  • ○初回のマイニングが開始した時点ではとりあえず動いた。
  • ✘ずっと動かしていたら、問題サイズがある程度大きくなったところでソルバの実行に長時間かかるようになり、数回解答に失敗した。
    • 最終的に、マイニングのソルバも通常のシステムとマージして、強いCPUを使いつつ複数のソルバを並列で回せるようにした。もっと早くやっておくべきだった。

リポジトリ構成

単一のGitリポジトリにみんなでコミットする構成。特にブランチ分けやレビューなどしなかったので、無限にマージコンフリクトが起きて面倒だった。git pushのときに勝手にfetchしてrebaseするオプションとかありそうだけど……。

AWS OrganizationsとIAMユーザの設定

去年のICFPCの時に、AWS Organizationsを使って自分のメインアカウントの支払い情報を使いつつ、計算資源は完全に独立させる(メインアカウントを他の人に触ってほしくないため)という設定をした……ということがICFPC2018の感想に書いてあるんだけど、どうやって設定したのかが全く書き残されていなくて困った。

osak.hatenablog.jp

で、過去の自分ができたんだったら今の自分にできないことはないだろうと思ってボタンをポチポチしたらできたので、今後のために書き残しておく。

Organizationの下にアカウントを作る

まず、AWS Organizaitons (https://console.aws.amazon.com/organizations/home)を開く。画面はこんな感じ。

f:id:osa_k:20190527154858p:plain

"Add Account" と書いてあるボタンをクリックすると、Invite AccountかCreate Accountか聞かれる。ここではCreate Accountを選ぶことにする。すると新しいアカウントの名前とメールアドレスを聞かれるので、適当な名前と自分が管理している適当なアドレスを指定する。

これでアカウントは作成されるが、特にこの画面からログインできる訳ではないので、一旦ログアウトするか、Incognitoでもう1枚ブラウザを開いて、さっき指定したメールアドレスでログインする。パスワードを聞かれるが、当然そんなものは設定していないので "Forget Password" からパスワードをリセットする。そうすると新しく作ったアカウントで入れるようになる。

新規アカウントにアクセスできるユーザを作る

IAM (https://console.aws.amazon.com/iam/home)を開き、左のメニューからUsersを選ぶ。"Add User" と書いてあるボタンをクリックするとユーザが作成できる。Programmatic Accessを選ぶとAWS CLI経由のアクセスを許可でき、AWS Management Console Accessを選ぶとAWS Consoleへのアクセスを許可できる。

パーミッションは適宜設定する。この用途だとBilling以外の全てにアクセスできるアカウントが作成できると一番いいんだけど、今回は十分に信頼できる人しか触らないことが分かっているのでAdministratorAccessを付与した。PolicyのJSONを自分でいじればBillingのアクセスだけ落とすのもできると思う。

この方法で作成されたアカウントは、AWSアカウントにひも付いたConsole Sign-in Linkからログインする必要がある(たぶんAWSアカウントのIDをEmail代わりにログイン画面で入力してもいける)。このリンクを知る方法は複数あるっぽいが、とりあえずユーザの詳細ページからSecurity Credentialsタブを開くと見える。

f:id:osa_k:20190527160309p:plain

とりあえずここまで設定できれば、後は勘でなんとかなると思う。

Detective Pikachu

Detective Pikachuを見た。

ポケモンの描写は結構良かった。所々に入るオマージュがニヤッとする。プリンとか、ポケモン亜空間とか。しかし全体的にはあんまりまとまりが無いなと感じた。ピカチュウが折角くたびれたオッサンの声で喋っているのに、あんまりメチャクチャなことをしないので、その違和感をどうにも生かしきれてない気がする。Guardians of the GalaxyのRocketみたいな、妙にニヒルで言葉巧みに罵倒してくるようなキャラクターを想定していたのでちょっと肩透かしだった。

ストーリーも、なんかよく分からんうちに二転三転して、気づいたらラスボスのHowardが人類補完計画をしている感じ。序盤でTimがリザードンに殴りかかっていったシーンはポケスペ展開か?と思ったけど、その後は人 vs. ポケモンの構図がほとんどなくて、それも残念。

上映前に入るトレイラーの宣伝を見る限り、Detective Pikachu自体が子供向けにデザインされているっぽいので、Guardians of the Galaxyレベルのナンセンスやアグレッシブな展開を求めるのは酷なんだろうとは思うけど、トレイラーで想定していたのがそういう方向性だったので、期待を下回ってしまった感がある。

Avengers: Endgame

Avengers: Endgame

Captain Marvel以外一通り観たのでもう一度Avengers: Endgameを観てきた。なんも知らずに観た初回でも結構面白いと思っていたけど、シリーズを一通り観てから改めてEndgameを観ると全然違う。単に格好良く、もしくは面白く見せるための演出だと思っていたもののほとんどに実はちゃんと意味があり、どれを取っても過去との対比に感動がある。

魔術師勢はやはり強いなあと思った。特にThe Ancient OneとDoctor Strangeの、時間を超越して全てを見通している感じが好き。StrangeがTime StoneをThanosに差し出したと聞かされたThe Ancient Oneが、それには何か意味があるに違いないと理解してBannerに差し出す、絶対の信頼感が良い。そのStrangeもThanos戦でTonyになぜあらかじめ言っておかなかったのか問い詰められたとき、If I was told you, it would not happenという、全てを見通したかのような答えを返すのが最高に格好いい。Infinity WarでStrangeが見た勝利のビジョンはこれだったのか、と全てが腑に落ちるシーンだった。

2012年に飛んだCaptain Americaも良い。特にHydraからLokiの槍を取り返すシーン、エレベーターで囲まれるシチュエーション自体が明らかにCivil Warを意識していてどうなるかと思いきや、Hail Hydraの一言で信頼を得る流れは鮮やかだったし、20作使って張った伏線を満を持して回収するという、演出の技巧が光る。その後Captain同士で殴り合う時の "I can do this all day" "I know, i know" もセルフオマージュとパロディを重ねているうまいシーンだった。更に、Thanos戦でついにThorのミョルニールを手にすることになったのもアツい。初見時は単に武器を交換しただけだと思っていたけど、ふさわしい者しか手にできないというミョルニールの性質を知ってから観ると、Captainが本当に世界を背負うCaptainになったんだなあという感銘がある。

そしてTonyの死。I'm an Iron Manと言ってSnapする、ヒーローとして今まで積み重ねてきたもの全ての集大成。思えばこの映画はTonyにとって大切なものを全て再訪していく、Tonyのためのような映画だった。Potsと結婚して、娘ができて、Captainと仲直りして、過去で父親の想いを聞いて、Peterも取り戻して……。その果てが、自己犠牲のヒーローとしてのIron Manの最大の自己犠牲と、望み得る限り最大の勝利であるのが、いかにもTonyらしいなと思う。

伏線を活用する作品が好きだからという理由でシリーズを観始めて、ここEndgameに到達して、本当にその価値があったと感じた。個々の作品のクオリティは色々だったけど、その全てがEndgameに繋がり、またEndgameがその全てを参照していると思うと、全体で1つの作品だとしか言えないし、この体験をするためには全部を観る必要があったのは間違いない。

Ant-Man and the Wasp

Ant-Man and the Wasp

Ant-Manの2作目だけど、Infinity Warの頃から話が始まる。

Hank博士のラボで量子トンネルが出てきたので、ここで事故が起きてScottが巻き込まれてEndgameに繋がる感じなのかなと思っていたら、それ自体は平和に終わってしまった。エンドクレジット後の、Hank博士一家が灰になってしまうシーンは、そうなると分かっていてもきつい。こういうのを見るとThanos許せんなという気持ちになってくる(単純)。

1作目と比べると、小さくなるギミックを使ったダイナミックなアクションも、コミカルなシーンも少なくなっているのが残念だった。


Captain Marvelはまだネットで視聴できないみたいなので、ひとまず飛ばして今週末あたりにもう一度Endgameを見に行きたい。

Avengers: Infinity War

Avengers: Infinity War

ついにここまで来た。

Endgameから見てしまったのでみんな負けるのは分かっていたけど、かなり善戦してはいたんだなあと思った。Quillが激昂してThanosを起こさなければ勝ててたんじゃないか。まあそこまでは理想的に進みすぎてたし、それでもDoctor Strangeが1/14000605しか勝ち目がないっていうんならそういうもんなんだろう。

Doctor Strangeはかっこいい。Doctor Strange(映画)ではTonyと同系統だと思ったけど、Tonyのように色々なしがらみを乗り越えていく渋いかっこよさではなく、人の世を超越している強者としてのかっこよさがある。魔術師というのはだいたい渋くてどこか超然としているもんではあるが、Doctor Strangeはまさにそうだと思う。そもそも魔法陣を出すのがかっこいいという説もある(単純)。

Thorもかっこいい。Rocketもかっこいい。ここまでに出てきた面々がみんな見せ場を作っていくのが良いが、Visionだけは最初に潰されてからほとんど活躍しておらず、何をやってるんだかという感じがある。

Black Pantherの最後でBuckyが目覚めていて、時系列としてCivil Warの前なのかと思っていたけど、普通に冷凍睡眠から覚めてたのか。このへんよく分からん。

Avengersのメンバーが灰になっていくところも、映画館に灰が置いてあったしそうなんだろうなあと思っていたけど、ここまでのシリーズを全部踏まえると重みがある。特にEndgame冒頭でClintの家族が灰になってしまうところも、初っ端で見せられて何も分からなかったけど、今になって思い返すとめっちゃ辛いシーンなんだなというのが分かる。もう一度Endgame見に行かないといけない。

Thanosも単純にMultiverseを征服したいだけの悪役かと思ったら、半分の人口を消し去って宇宙の均衡を保つという、狂人なりに筋の通ったことを言い始めて、一理あるやんと思ってしまった。こういう世界を滅ぼすタイプの悪に理を見出してしまうと、正義の側にうまく肩入れできなくなってしまうので良くない気がするが、破滅に憧れる気持ちは常にあるのでなんともできない……。