ぶぶかっぽい味の油そばを作った

醤油、みりん、酒を混ぜて醤油ダレにする。このタレで豚バラを茹でてダシを取る。脂は取り除く。丼にこの醤油ダレと豆板醤、オイスターソース、ごま油を入れて混ぜる。茹でた麺を入れて混ぜる。おわり。

油そばを食べたくなったらいつもこんな感じでやってるんだけど、今日のは格段にぶぶかっぽさが高かった。醤油ダレが凝ってるせいか、もしくはちょっといい麺を使ってるのが効いていると思う。

やることリスト(2020/06/06現在)

どっかで一覧できる形にしとかないと忘れたり優先順位付けに失敗して永久に何も進まなかったりするのでメモ。思いついた順に片付けていきましょう(願望)。

  • ログ取りの話を書く
    • とりあえず書きたいトピックだけ並べる
  • 例外の話を書く
    • とりあえず書きたいトピックだけ並べる
  • はてなブログダウンローダーを書く
  • Mastodonダウンローダーを書く
  • 手元にあるデータをElasticsearchに突っ込む。メタデータを適宜抽出してフリーフォーマットでタグ付けする。正規化はデータが溜まったら考える。入れたいもの:
  • Elasticsearchのフロントエンドを書く
  • あずにゃんゴーストを作る
    • Ninix-aya http://ninix-aya.osdn.jp/
    • 伺かの情報が散逸している上、InfoseekやGeocitiesの閉鎖によってunreachableな情報があまりにも多い。表示部分のガワだけ借りて自分で中身を作り直すのが楽かもしれない……。
  • サーバ(ancient-one)が安定的にmDNSで解決できるようにする(なんで今そうなってないのか謎)
  • サーバ上で動いてるもののメトリクスをCloudWatchに送る
  • ブログほど他人に見られることを意識したものではない、適当に思ったことを書き捨てておくための場所が必要っぽい。shinhさんのはじめてのにきみたいなやつ……。
    • こういうのこそ練習プロジェクトにいいのでは?RustかScalaで書いてみたいね

2020年の目標 - 5月まとめ

引きこもり生活3ヶ月目。必要以上に人と関わらなくていいの楽でいいですね。

osak.hatenablog.jp

オースティンに限ってもアメリカ全国的にもコロナウイルスが収束している気はしないんだけど、なぜかトランプは経済活動を再開させてしまった。まあずっと止めてるとそれはそれでヤバいというのは分かるけどさ……。記録のためCDCの新規感染者数チャート(5月28日現在)を貼っておこう。

f:id:osa_k:20200528183313p:plain

ソース www.cdc.gov

レストランは入店率を25%以内に抑えるという条件下でイートイン営業が許可されたものの、自分がよく行く店は5月中は相変わらず様子見でテイクアウトしかやってなかった。Domain(ショッピングモール)のバーとかは結構開いてたらしい。6月から順次色々なところが復活していくっぽい。床屋も5月半ばから営業再開したけどまだ行ってない。

仕事が完全にリモートでなんとかなっているので、これはもはや家にいる必要すら無く旅をしながら仕事することも可能なのでは……?とか考えていた矢先に日本人の同僚が日本に避難すると言っていたので、ちょっと羨ましくなって帰国に必要な手続きとかメリットデメリットとかを調べた。今の所、入国拒否地域が111カ国・地域あり、ここに滞在してた人は日本国籍か永住権がない限り日本には入国できないっぽい。拒否されてない地域は大半がアフリカとアジアにある。アメリカは当然無理。そして日本に入国すると強制的に検査を受けることになり、陰性でも14日間の自己隔離が要請されている。逆にアメリカに入国する方はかなりザルで、中国やヨーロッパ諸国のいかにもヤバそうなところから以外は基本入れる。まあアメリカもヤバいリストの一員だからね……。

とにかく、今日本に行っても自由に動けないし、そもそも飲食店もあんまり営業してないっぽいので積極的に行く意味はなさそうだなあという結論になった。自宅の引きこもり環境が完璧すぎて、そのへんのホテルに引きこもるくらいなら自宅にいたほうが数百倍QoLが高い。14日間隔離さえなければ温泉旅館に逗留とかしに行ったかもしれないけど……。あと医療の質やそもそも日本語が通じるかという問題はあるが……。まあコロナウイルスはかかったら即病院行かないと死という感じの病気ではないっぽいので、平時より極端に危ないということはないかと思っている。

コロナウイルスはそれとして、今は暴動の方がヤバい。黒人が警官に殺された事件を発端として各地でデモが起きており、その参加者が暴徒化して店を襲ったりしているらしい。5月の終わりの方で始まって、オースティンにも30日くらいに到達してしまった。ニュース映像のぱっと見ではダウンタウン近くのI-35をデモ隊が練り歩いてる感じで暴徒化してないのかな?と一瞬思ったが、6th streetの店は略奪の被害に遭ったらしい。極左が暴動を煽っているという話もありなんともきな臭い。そうでなくてもみんな自粛続きでフラストレーションが溜まってるんだろうなあとは思う。とにかく平和に収束してほしい……。


ゲーム。ずっとフィリスのアトリエをやっていた。ソフィーのアトリエは5/3に裏ボスとDLCボス以外の要素をクリアしたので一段落着いたことにして、そのままフィリスのアトリエに切り替えた。6/1現在で90時間プレイしている。DLC抜きで一通りエンディングを見た後で強敵討伐がてらDLCキャラを攻略し終えるまでで87時間くらいかかって、それも一段落ついたので2周目を始めた。2周目は未回収の要素(キルシェとノルベルトの推薦状とかバッドエンドとか)とソフィー先生討伐のトロフィーの回収が目的。たぶん合計で100時間ちょいプレイすることになると思われる。ライザとソフィーが60時間ちょっとで一通り終わったことを考えるとフィリスは明らかにボリュームが多い。自由度が高いので初見だとあんまり機械的にストーリーを進めることができないのも一因だと思う。

ゲームの方向性は完全に後から味が出てくるタイプで、正直開始から15時間くらいは慣れる間もなく新要素と新キャラがガンガン出てきて、しかも個々の要素にあんまり深い掘り下げがないので何をやっていいのかかなり迷った。仲間キャラはあんまり脈絡なく出会うのでパーティに入れようという気持ちになれないし、広いオープンワールドを楽しもうにも日数制限が気になってしまい自由に探索できない。そもそもあんまり強いアイテムが作れないので強めの敵と戦いづらい。こういった要素が重なった結果、最初の方は結構精神負荷が高くて、1日3時間くらいプレイしたら疲れて終了してしまっていた。

結局ライゼンベルグには160日くらい余らせて到着した。なんだよ全然余るじゃん!!公認試験を突破して日数制限がなくなってからは精神的に余裕ができたので、早々にスカイフリーカーを錬金してあちこちを開拓して回った。仲間のイベントも最初の数個を見るとキャラの人となりが分かるようになるので、そこからはいい感じにストーリーに入り込めるようになった。どのキャラもいいんだけど、やっぱりリア姉とイルちゃんのストーリーは明らかに力が入っていて面白い。イルちゃんがあまりにもかわいいので、攻略し終えた後もずっと戦闘パーティに入れていた。ソフィー先生もかわいいので(以下同様)。レシピ発想もソフィーのアトリエに引き続き好きなシステムだけど、ソフィー式の最初から条件が見えてる方が分かりやすくて好き。

つまるところ公認試験突破(20時間くらい)まではチュートリアルでそれからが本番なんだけど、こんなに長いチュートリアルなのにそれといって示唆がないし、あんまり導線もはっきりしていないので不親切だと感じた。逆にチュートリアルさえ終わらせれば、広い世界の冒険と個性豊かなキャラのシナリオの両方を制限なく遊べるようになって、ソフィーのアトリエの拡張版のような気持ちで楽しめるのでかなり満足感がある。公式サイトでは公認試験合格後の流れについても結構ネタバレされているので、そこまで読んでいる前提なんだろうか。

フィリスのアトリエを一通り遊んでからmikutterの薄い本 vol.11に載ってるしじんさんのエロ漫画を読んだら、ネタが全部分かるようになっていてかなり良かった。というかこの本の内容は大部分が悪いオタクの妄想だと思ってたんだけど、実際のところかなり原作に忠実で驚いた。アトリエすごいな。


線を引いたけど他のゲームの話(当ブログはアトリエブログではありません)。まあ他のゲームはプレイしてはいないんだけど。先週くらいからTwitterで話題になっているHelltakerというのが気になっている。

store.steampowered.com

ゲーム自体は1時間くらいで終わる倉庫番らしいけど、キャラがかわいい。サクッと終わりそうなのでフィリスが終わったらやろうかな。

Youtubeを眺めていたら、CelesteのMODの動画を見つけた。これは人間辞めてるWR保持者がSpeedrunしてるとこ。

youtu.be

CelesteにMOD文化があったことがまず驚きだし、こういう完全に新しいギミックを追加できるとも思っていなかった。面白い。


株。なんか知らんが順調に回復したのと、Datadog株が突然+50%とか叩き出したのとで通算勝ち越しになっている。まあ現時点の通算にどれだけ意味があるのかは謎。まだ売る気はないし……(いい感じになったら売ろうと思って買った航空株は死んでいる)。


体重。全然運動してないので流石に単調増加していて、63kg前後になっている。4月中はなんか安定してたんだけどまた増え始めた。もうちょっと真面目に運動するべきか。


新しい技術。Database Internalsをちょこちょこ読み進めている。あんまり進まない。

Twitterで、階段状の折れ線を細かくしていくと斜線に収束するっぽいけど、長さが連続的に√2へ漸近しなさそうなのはなんで?という話題が出てきたので議論を追っていた。

自分の当初の理解では斜線に収束するというのがそもそも誤謬だと思っていたんだけど、どうも常識的な位相(ハウスドルフ空間)では斜線に収束すると考えてよいらしい。ただし曲線が収束することと、距離関数が連続的に収束することは別問題である、というのがこの問題の肝になっているようだ。確かにそう言われた上でよく考えてみると、曲線がだんだん収束して一致するという時に考えている「曲線間の距離」と、曲線そのものの長さを測る「曲線関数の積分値」は違うものを指している。

参考

togetter.com

https://note.com/keyneqq/n/n2ead38a59af5note.com

集合と位相についての理解が浅すぎて困ることがよくあるので、この機会にちゃんと勉強しておきたい。ルベーグ積分くらいは理解したい。

技術と言うか広い意味での物作りとしては、ちょっと思い立ってアイコンを改造してソフィーのコートを着せた。

f:id:osa_k:20200528195343p:plain

頭に付けてるバンダナ(っていうのか?スカーフ?)も再現したかったんだけど、どうしてもいい感じにならなかったので諦めた。まあいいんじゃないでしょうか……。フィリスのアトリエのモデルを見るとヘアバンドっぽくなっているので、なんかひらひらの付いたヘアバンドだと思って描くといいのかな。


中国語。相変わらずAnkiをやっている。Chinese Grammar WikiのA2レベルがほぼ終わった。


本。バーナード嬢曰く。の5巻を読んだ。あと進撃の巨人。あとハンチョウ。哲学書はブームが過ぎてしまったので積んである。そのうちまたブームが来るでしょう。


3月末から始まったアトリエ漬けの生活も、フィリスの終わりが見えてきたらなんとなく落ち着いてきた気がする。この後リディー&スールもやるけど……。6月はアトリエ以外の進捗を出したいですね。draftcodeさんと飲むたびに、例外の話の記事楽しみにしてます!!!などと言って煽られるのでそのへんを解決したい。

2020年の目標 - 4月まとめ

早いもので1年がもう1/3も終わってしまった……まで書いて先月のエントリを見直してみたら同じような始まり方だった。なんなら先々月もそうだった。日々何もできていないことがわかる。

osak.hatenablog.jp

相変わらずStay home令が発動中なのでひきこもりをエンジョイしている。テキサス州知事は5月から徐々に経済活動を再開させていくと言っていたけど、感染者数がリニアに増え続けている(ArcGIS Dashboards)中でやるのは正直意味がわからん……。経済が動かないと困るのはそうだけど、このタイミングで再開したら感染数が爆発してしまうと思う。経済が止まるのが予想以上に辛かったのでノーガード戦法に移行するということなんだろうか。


ゲーム。ライザのアトリエは2週間で70時間くらいプレイして、DLCのクリアと錬金レシピ・素材図鑑埋めまで完了したので一応満足した。自分で使うアイテムを自分で作るシステムはやっぱり面白くて、アイテムに付与したい効果と特性の組み合わせを考えて試行錯誤しているとあっという間に時間が経っていく。DLCボスに負けた後はちょっと面倒になったので攻略サイトを見て、賢者の石を使った無限ジェム稼ぎと手抜き錬成に逃げてしまったけど……。

ライザの次にプレイするべきアトリエシリーズを聞いたところ、Mastodonで識者(@toshi_a)に詳細なプロファイリングを受け、フィリス・ソフィー・トトリの順に推薦を受けた。ソフィーとフィリスは同じシリーズの1作目とと2作目らしいのでソフィーからプレイすることにした。

social.mikutter.hachune.net

ソフィーのアトリエは錬金システムがライザと違い、グリッド状の盤面にポリオミノを敷き詰めていくことで品質やアイテムの効果を上げていく仕組みで、グラフをたどっていくライザのシステムよりも好きな感じだった。ゲーム中で特定の行動を取ると錬金レシピを思いつくというシステムも面白い。あとソフィーが普通にかわいい。ライザみたいに暴力的なえっちさではなく、正統派にかわいくてすごく好き。

ストーリーはちゃんとあるけど存在感は弱めで、10人くらいいる主要キャラの個別シナリオを好きなタイミングで進めていくのがメインの体験という感じ。結構早い段階で仲間とマップが増えるので、中盤あたりでは進められるものが多すぎて正しく進行しているのかちょっと不安になったけど、全体的にはキャラ魅力にフォーカスしたゆるいゲームという雰囲気で良い。特に、メインシナリオの戦闘にソフィー以外が強く絡んでこない構成が個人的には評価が高い。パーティが自由に決められるゲームで、○○と共闘して敵をやっつけよう!みたいなイベント戦闘にそのキャラが参加しないことに強く違和感を覚えてしまうタイプなので……。

現時点で40時間くらいプレイして、ラスボスを倒すところまで進んだ。今はクリア後シナリオを遊んでいる。サクッと終わるという話だったけど、普通にライザと同じくらいのプレイ時間になりそう……。


線を引いたけど引き続きゲーム(アトリエの話が長くなりすぎたので)。日本で定期的にMagic: the Gatheringのドラフトをやってたメンバーと、MTG Arenaでイコリアのシールド戦をやった。最近は全然マジックをやってなかったけど、久しぶりにやると結構楽しかった。変容はオーラみたいなものだと思って過小評価していたけど、変容するたびに起動する能力がどんどん積み上がっていくので思った以上に強かった。

MTGシールドの後、流れでPrismataをやった。これも勧められて以来、2年くらい積まれてたゲーム。

store.steampowered.com

やってみるとめちゃくちゃ面白い。ターン制の拡大再生産ゲーなんだけど、ランダム要素がまったくなく、プレイヤー視点で不確定要素になるのはAIの思考だけ。しかも敵の行動結果に対しても、攻撃のダメージをどのように割り振るかなどある程度介入できたり、無限にUndoができたりするなど、自由度が高めのパズルゲームという体のデザインになっている。実際に高難易度では、ある瞬間での最適手を諦めて全体最適を達成するような手順が求められるステージもある。

アトリエシリーズが一段落するまではあんまり触れないと思うが、どう考えても面白いゲームなので早めに消化しておきたい。


株。普通のゲームで忙しかったのと、コロナウイルスの状況が全然改善していないのに株価が上がっていくのが完全に意味不明だったので、4月は定期的に資産状況を見る以外はほとんど何もしなかった。WTI原油先物が負の価格になったのはちょっと予想外ですごかった……。実物があれば0を割ることはないだろうから価格崩壊したら買ったもん勝ちだと思っていたけど、保管コストでやられるんですねぇ。


体重。62kg後半をキープしている。今年の初めと比べると1kgぐらい増えたところで安定しているんだけど、どう考えてもコロナの影響で運動しなくなったせいだよね……。明らかに筋肉が落ちたことによる体調の悪さを感じるので、たまに思い出したらスクワットと腕立て伏せをしている。


新しい技術。起きてて仕事してない時間は全部アトリエに注ぎ込んでいたのでなにも進んでいない。ロギングの話と例外ハンドリングの話でブログを書きたいと思って幾星霜……。というか、在宅といえども仕事が終わると精神力が尽きていて、こういう集中して思想を練るアクティビティが全然できない。つらい。

コンピュータの技術の話ではないが、家にずっといるという利点を活かしてラーメンを作った。豚骨スープの写真しか残ってないけど、昆布と煮干しダシも合わせたトンコツ煮干しラーメン。

ラーメンスープ作り 自作ラーメン

初めてにしては意外とうまくできた。特にオースティンでは煮干しラーメンというものが食べられないので、煮干しの味が身体にしみる……。店で食べると油っぽかったり塩味が強かったりするけど、自作なら味付けを自分好みに調整できるのもポイントが高い。トンコツは8時間くらいひたすら煮込んでいたけど、仕事しながら1時間毎に水位を見てお湯を足すだけなので楽だった(火を使っているので昼寝ができないのは少し辛い)。麺は最初はスーパーで売ってた細麺を使っていたけど、その後で試しにやってみたフェットチーネ重曹で茹でた麺もかなり中華麺っぽくておいしかった。縮れ麺にこだわりがなければ重曹スパゲッティで十分戦えると思う。

餃子も作った。既製品の冷凍餃子もいくつか買って試してみたけど、どれも味がいまいちだったので自作するしかないなと思った。

焼く前の餃子 焼いた餃子

生のまま冷凍しても日持ちするし、凍ったまま蒸し焼きにするだけで手軽に焼けるので便利。しかも市販品より遥かにうまいので、常備菜にしようと思う。


中国語。2〜3日に1回のペースでAnkiをやっている。本来は毎日やるべきだけど、継続しているのでまあよし。


本。Twitterで見かけて以来好きだったけんさんの「雑な生活」を読んだ。この人の漫画は思考のスキマを突いてくるというか、日常的に経験しているけど深くは考えないような絶妙な存在感のものを、いかにも大切そうに切り取って見せてくるので、シュールだけど納得もしてしまうという面白い感覚になる。

https://www.amazon.co.jp/dp/product/4047360783

(なんか知らんがAmazonが書影付きのリンクを生成してくれない)

Database Internalsは進んでない。


アトリエに時間を吸われた月だった。5月もほぼほぼ吸われる予定。まあなんもしないよりはゲームしてる方がよっぽど有意義でしょう……。

ところで、1ヶ月毎にまとめを書く形式だと結構忘れてしまっているイベントがありそうな気がしてきた。ログを残したいなら頻繁にブログを書いたほうが良さそう。

2020年の目標 - 3月まとめ

(注意:この記事は前半部分にライザのアトリエのネタバレを含みます)

早いものでもう2020年も3ヶ月終わってしまった。

osak.hatenablog.jp

ゲーム。ハナノパズル2は33面あたりで詰まって放置している。時間をかければ解けるタイプのパズルではあるけど、やる気が一度落ちてしまうと難しい。それから1ヶ月くらいはまた株の攻略法を考えていた……。株は気にしないって先月のまとめで書いたはずなのになあ。

3月末になって、さすがに仕事と株のことばっかり考えてると人生損してるなあという気持ちになったので、一念発起してライザのアトリエを始めた。アトリエシリーズはmikutter界隈とかあのへんの百合過激派が騒いでいるのでずっと興味があったものの、流れてくる話は百合の話ばっかりでゲーム内容が全然分からなかったので始めるきっかけがなかった。いざ始めてみると、アイテムを収集して錬金術で加工するというコアシステムが案外面白い。自分で装備品を作れて、しかも作り方によって性能が変わるので自然と凝りたくなってしまう。標準の難易度だと戦闘は比較的ぬるめなのでこってもあんまり意味はないのかもしれないけど……。戦闘は初見だと操作が煩雑な上にFF式の半リアルタイムで複雑すぎるかと思ったけど、慣れてくると自然と操作キャラを切り替えたり、クイックアクションで追い打ちをかけたりと自由に動かせるようになってきた。錬金術も戦闘もストーリーが進むにつれてどんどん新しいシステムが解禁されるようになっていて飽きない。ゲーム全体の雰囲気や錬金術というシステムも相まって、コアゲーマー向けに調整されたドラクエ8のように感じている。

現時点で20時間くらいプレイしていて、アンペルさんが仲間になるところまで進んだ。ひょろいオタクがプレイアブルだと嬉しくなってしまう(ひょろいオタクなので)。魔法使い(というか遠距離攻撃使い)なのもいい。あとライザかわいい。モーションがかわいいので移動するとき無意味にジャンプしたりしている。


株。値動きの気持ちがなんも分からんので、分野のプロであるところの投資信託に入れておくのが一番良いのでは……?という気持ちになってきたため、投資信託の選び方とかを色々調べていた。ファンドに突っ込んだ資金はファンドのものであり税金関係の処理はファンドで行われるものだと思っていたけど、どうもファンドが金融商品を売却してキャピタルゲインを得ると、それは投資家に直接還元されて投資家の所得に計上されるらしい。このシステムはキャピタルゲインをそのまま再投資する設定にしても変わらない。よって、頻繁にポートフォリオの売買をしているファンドに投資すると、資産は増えてないのに所得税が爆発することがあるらしい。こわい。

そもそも株価の決まるメカニズムが未だによく分かっていない。企業が利益を上げると自社株買いと配当による株主への還元が増えるという理屈は分かっているものの、実際の株価はそれ以上の何かを織り込んで変動しているか、もしくは深く考えず直近の取引に影響されて変動しているように見える。株価の妥当性はまったくわからん。金融理論の本を読む必要がありそう。

今日の記事だけど、コロナショックで企業が自社株買いを控え始めてるから株価はそんなに上がらないんちゃう?という主張をWall Street Journalで見て、なるほどそうだよねと思った。

www.wsj.com

目標を決めないと最適な戦略も決まらないので、とりあえず$1,000,000を稼ぐことを目標に据えた。これだけあれば適切な株を買って配当金で生きていけると思われるので……。しかしこの目標を達成するためには随分アグレッシブに戦う必要がありそう。


体重は全然変わっていないけど、体脂肪率だけじわじわと上がってきた。どういうことなんだろう。運動してないから筋肉が落ちてるのかな。


新しい技術。完全に在宅勤務になり、ちょっと興味が出てきたのでリモートに開発環境を置くということについて考えた。結局リモート環境は使ってないけど、どんなセットアップが必要で何を期待できるのかはだいたいイメージが掴めたと思う。

osak.hatenablog.jp

これに関連して、VSCodeを使い始めた。直接のきっかけはIntelliJ上でHaskellの補完がいまいちだったことだけど、リモート環境を調べる過程でVSCode Remote Development Pluginがどうやって動いているか納得感のあるメンタルモデルを構築できていたので、haskell-ide-engineの導入ガイドに従ってRemote Development Plugin経由でDockerに入りHaskellを書く環境を整えた。これが驚くほどシームレスで、UI上ではあたかも全てがローカルにあるかのように動いており(実際物理的には全部ローカルなんだけど)、補完もサクサクと動くし、エディタ内で開いたターミナル上なら実行もできる。しばらくは趣味のコードはVSCodeで書いてみようと思う。


中国語。DuolingoをやめてAnkiを始めた。文法を覚えたいので、今はChinese Grammar WikiのDeckを進めている。

ankiweb.net


本は読んでないな……。Database Internalsを読みかけで放置している。


3月末から4月頭にかけて、コロナウイルスっぽい症状で一週間くらいずっと体調が悪かった。最初は普通に季節の変わり目で体調を崩したのかと思っていたけど、37℃くらいの微熱が出たり下がったりを繰り返していて、発熱の低さの割に身体がだるく変だなあと思っていた。3/31〜4/3あたりは特に悪く、起きた時は平気だけど昼〜夕方頃になると熱っぽさを感じてくるという状態で、特に4/2は仕事を休んで寝ていた。微熱しか出ない風邪にしては治りが遅かったし、軽い咳や神経痛に似た後頭部の痛みもあったので、まあコロナウイルスなんじゃないかと思う。幸いにして今は回復した感覚がある。CDCによれば治ってから3日は出歩くなということなので、水曜日あたりまでは自宅謹慎することにする(元から買い物以外で出歩いてないけど)。

www.cdc.gov

これがコロナウイルスの症状だとしたら、Twitterで流れてきた以下の記事は正確に症状を描写してると思う。自分はずっと軽かったけど、定性的には似たような症状が出ていた。

note.com


今月はライザのアトリエをクリアするのが目標です。クリアしたら他のアトリエシリーズもやりたい。Database Internalsも読み終えたい。株はもうちょっとまともに市場のモデルを理解したい。アドホックに戦略を考えていても根拠が示せないので実質的にルーレットと変わらない。

リモート開発環境で何ができるのか

コロナウイルスの影響で、Indeedも3/3付で完全リモートワークに切り替えられた。

press.indeed.com

自分は会社支給の強いLinux laptopに全てを入れているので、開発環境に関しては特に普段と変わるところはない。しかし社内には、オフィスに置いてあるLinux workstationにsshして開発を続けている人もいるらしい。こういった環境構築系の話題は泥沼なので普段はあまり深入りしないようにしているけど、いいタイミングだしリモートに開発環境を置くということについて考えてみたいと思う。

この記事では純粋にプログラムを開発するために必要なセットアップについてだけ考える。物理的に一箇所に集まらない状態でチームとして動くテクニックの話はしないので、チームワークについて知りたい人はGitLab Handbookでも読んでください。

about.gitlab.com

リモート環境構築の動機と環境の再現性

そもそもなぜリモートに開発環境を構築したいのか。ざっくり考えると以下のようなケースが思いつく。

  • 自宅と会社等、2箇所以上で開発する必要があり環境を使いまわしたい
  • AWSとかで強力なサーバを借りて超並列ビルドをしたい
  • 強力なサーバを借りて巨大データをtry & errorでスクリプト書きながらいじりたい

このうち最初のケースでは常にサーバを立ち上げっぱなしにしておきたいが、他2つは必要に応じて立ち上げたり落としたりするワークフローが想定される。

1つめのケースは、会社に置いとけるワークステーションや、外からsshできる自宅サーバなどがあると考えると、基本的には一度構築した環境をずっと使い続けつつ、何かを更新したければその都度インストールしていけばいい。例外は新しくサーバを作った、HDDがクラッシュした等の理由でOSをクリーンインストールする時で、このときはゼロから環境構築をやりなおす必要が出てくる。強力なサーバを必要に応じて立ち上げる場合は、その都度ゼロから手動でセットアップするのは面倒なので、イメージファイルを作っておいたりAnsible等で環境設定をコード化しておくなどといった対応がほぼ必須になる。もちろん1つ目のケースでも、AnsibleのようなInfrastructure as Codeの枠組みで自動化すると管理しやすくはなる。

毎回Ansibleを走らせて環境を作るのではなく、必要なものを焼き込んだイメージを作っておくという方針だと、AMIのように構築済みの環境のスナップショットを直接サーバにマウントする方針と、DockerやVirtualBoxのように仮想マシンのイメージを作っておいてサーバ上で環境構築済みのコンテナやVMを走らせるという方針の2通りが考えられる。このどちらを選ぶかは、運用方針によってほぼ一意に決まるんじゃないかと思う。開発者1人につき1台EC2インスタンスを与えるという運用で開発環境が頻繁に変わらないなら前者がやりやすいだろうし、開発環境が頻繁に更新されたり、サーバ以外の環境(Windowsラップトップとか)でも開発環境を立ち上げたいという要望があるならVMイメージの方がいいだろう。

AMIやVirtualBoxのイメージの場合はともかく、Dockerの場合はイメージの管理が煩雑になる可能性がある。特定のアプリケーションのバージョンを上げることを考えると、おそらくDockerfileに手を加えることになるので、それ以降のコマンドはキャッシュが使えず全部やり直しになる。AMIやVMのスナップショットを配布する場合は、そのスナップショットから仮想マシンなりサーバなりを起動して、手動でアップデートを掛けることで部分的に更新するという戦略が可能になる。ただしこれも、何を変更したか管理するためにAnsibleやPuppetで管理したくなるだろうから、本質的には毎回Ansibleを走らせる方針と変わらなくなってくる。

リモート開発環境の使い方

リモート開発環境が構築できたとして、実際にはどう使うことになるのか。言語や抽象化レベルの違いによって多少の差異はあるだろうが、おおむね以下のような手順になると思われる。

  • ソースコードをローカルで編集する
  • 編集したソースコードをリモート環境にアップロードする
  • リモート環境でビルド・実行する
  • 出力結果等をローカルへコピーする(または何らかの手段でリアルタイムに共有する。たとえばDBの中身なら簡単にリモートアクセスできるし、Webサーバならブラウザでリモートマシンにアクセスすれば良い)
  • デバッガを使いたい場合、リモートでデバッガを走らせるか、ローカルのIDEからTCP経由でアタッチする

一連の操作をシーケンシャルに実行してくれるスクリプトIDEの補助無しでこの手順を踏もうとすると、間違いなくいくつかのポイントでハマるであろうことが容易に想像できる。

  • ソースコードをアップロードしないままビルド・実行してしまい、結果が予想と食い違う
  • 出力結果をローカルへコピーし忘れ、古いログを参照してしまう
  • ターミナルをローカルとリモートの2枚開いていて、間違った方でコマンドを実行しようとして失敗する
  • 普段はGUIのデバッガを使っているのに、リモートではCLIのデバッガしか使えない
  • リモートで動いているプロセスにアタッチできるようなGUIベースのデバッガが提供されていない

はじめの3つのポイントについては、これらを順番に実行するスクリプトを書いたり、IDEに任せることで解決できる。IDEの場合、たとえばIntelliJはRemote Developmentといって適切なタイミングでリモートにソースコードを送ってくれる機能があるし、VSCodeのRemote Development extension packはサーバ側とクライアント側の両方でVSCodeを走らせてそれらが通信することで、ローカルから透過的にリモート環境が触れるようになる。

www.jetbrains.com

code.visualstudio.com

後半2つに関しては、VSCodeはリモート側でもVSCode本体が動いているようなアーキテクチャなので、これも解決できるらしい(確認はしてない)。ローカルのVSCodeはリモートを操作するガワのように振る舞うので、ローカルのIDEでアクションをを実行するとリモートで実行されるが、使い勝手はあたかもローカルで全てが動いているかのようという都合の良いシステムになる。IntelliJにはこういう機能はない。言語によってはリモートで動いているアプリケーションにアタッチできるようなデバッガを提供していることがあるので、運良くそういう言語を使っており、GUIがリモートアタッチに対応していれば一応ローカル側のGUI経由でリモートのプロセスのデバッグはできる。IntelliJでは(少なくとも)Java, Go, Python, Ruby, Node.jsの各言語に対して、それぞれの言語が提供しているリモートデバッガを扱えるようになっているが、リモート側でプロセスが立ち上がってからアタッチする必要があるため、実行が高速に終わってしまうプロセスや、最初の方でちょっとだけ実行されるコード等ををデバッグするのは難しくなる(Java等ではプロセス側からリモートのデバッガに繋ぎにいくオプションもあるっぽい)。

また、IDEの利点として、ファイルツリーから特定のファイルだけを選んでテストを実行するといった機能がある。VSCodeでは(おそらく)普通に実行できる。IntelliJのようにリモート側でIDE本体を動かさない仕組みの場合は実装依存になるが、少なくともIntelliJの場合はテストの実行はIntelliJが走っている環境内でしか行えないため、リモート開発環境では使えない。自力で特定のテストケースだけを実行するようなコマンドを叩くことになる。また、IntelliJはテストを走らせた後にコードカバレッジをインラインで色つけ表示したり、テストの実行中にもブレークポイントを仕掛けて実行を止めたりできるが、こういった機能もリモート開発環境では使えないか、大幅に制限されることになる。

エディタがGUIである事にこだわらず、EmacsVim等でガリガリ開発できる場合には、エディタもリモート環境で起動することでローカル環境のことを一切考えずに開発することができる。この場合、間にネットワークが挟まることによる多少の不安定さを除けば、ローカル環境での開発と大差ない状況になる。全てがリモートで動いている状態でX転送やVNCを使うことでGUIも使えなくはないが、回線が細い場合は描画が遅くて使い物にならないと思う。

ローカルとリモートの住み分け

ローカルとリモートのそれぞれにどういったファイルやアプリケーションを置けばいいのかを考える。

リモート側は開発環境なので、当然コンパイラや各種ライブラリ、ビルドツール等が入る。DBやDockerなど、開発しているアプリケーションが依存しているアプリケーションもリモート側になる。構成によってはデプロイ用のツールチェインや秘密鍵もリモート側に置くことになるかもしれない(特に常設型の開発サーバを作る場合)。

一方のローカル側では、まずリモート環境に接続するための機構が必要になる。リモート環境がサーバやVMならssh, scp (rsync)と秘密鍵くらいが最低限必要になる。IDEを始めとしたGUIベースのアプリケーションを使いたい場合は、これも基本的にローカル側に置いておくことになる。逆に言えば、それ以外のアプリケーションはローカルで動かす必要がない。

リモート環境ではできないこと

リモートでどんなに高性能なマシンが用意できるとしても、本質的にリモートではできない、もしくはとても難しいタイプの作業も存在する。ここまでで何回か挙げたように、ネイティブGUI(ブラウザではないもの)の比重が大きいアプリケーションは、リモートで動かすことは困難なので、必然的にローカルで動かすことになる。分かりやすい例としては画像や音声の編集ソフトがある。

また、モバイルアプリや組み込みシステムなど、プログラムを動かすために別のハードウェアが必要な作業もリモート環境とは相性が悪い。多くの場合はプログラムを転送するためにLANやUSB、シリアルケーブル経由で接続する必要がある。開発用リモートマシンと自分が物理的に同じ家にいるならいいが、リモートマシンをクラウドに載せるには多少なりとも困難が伴うし、開発マシンから端末へデバッガをアタッチしたい時などはほぼ確実に有線での接続が求められる。

こういった作業が避けられない場合は、ローカルとリモートという分け方ではなく、その時手元にあるマシンだけで作業できるように環境を整えることが重要になる。

まとめ

  • 開発環境はAnsible等、Infrastructure as Codeで管理することがほぼ必須と言って良い。Playbookさえあれば、それを直接サーバに適用するかイメージの構築に使うかは好きにに選ぶことができる。
  • 開発プロセスは、ビルドや実行に関わるコマンドはすべてリモートで実行されることを念頭に置く必要がある。IDEによって差異が吸収される部分もある。特にVSCodeを使う場合、ローカル環境で閉じているときとほぼ同じ感覚で開発することができる(と思われる)。
  • ローカル開発環境にはリモート環境に接続するためのツール群と、GUIベースのアプリケーションを入れる。それ以外はすべてリモート環境に配置する。
  • GUI主体の画像いじりや、物理的な接続を要求されるモバイルアプリ開発はリモート開発環境と相性が悪い。そういう時は諦めて手元のマシンを増強したほうが良い。

2020年の目標 - 2月まとめ

3月になって一週間も経ってしまった。風化しないうちに2月分のまとめを書く。

osak.hatenablog.jp

これで毎月振り返る目標は2/12達成した。楽でいいね。なんだって達成すればいいってもんでもないが……。

ゲームはハナノパズル2を始めた。有名だけどやってなかったので……。現在33面。ゼリーよりは変な手筋が少なくて考えやすいが、それでもこんな動かし方あるのか!という驚きがずっと続くのですごい。

qrostar.skr.jp


株。自分の資金を投入し始めたので当事者意識が生まれ色々調べてまとめた。長期でどう考えるのかはそこそこイメージが掴めたので答え合わせ待ち。短期の値動きは全然分からん。先物とかチャンスレベル以上のパフォーマンスを出せる気がしない。

osak.hatenablog.jp

ウォール街のランダム・ウォーカーは巷で話題になるだけあっていい本だった。ランダムウォーク理論だけでなく、市場がどういう仕組みで動いているのかを大まかに見通せるのが良い。名前を知ってる将来性のありそうな株を買ってみていたら、コロナウイルスの打撃を受けて軒並み株価が下がり、うおーこれが暴落かという気持ちになった。3/8現在では含み損7%くらいになっている。明らかに動きがおかしいので素人が首を突っ込むと危ないだろうなあとは思いつつ、こんな面白い状況はなかなか経験できないだろうからとりあえず動いとこうと思って、めぼしい銘柄を見繕って監視することにした。で、底値かと思って買ったらまだ下がる、というパターンを2回やった。とりあえず遊べて満足したので少なくともあと半月は様子見でいいかな……。分析の過程で、自分が分かるようなS&P 500のコンポーネント(要するにIT系や超大手チェーン)はS&P 500インデックスと同じような動きをしているので、個別のコンポーネントに手を出すくらいならインデックスファンドに突っ込んだ方が安定度高いし考えること少なくていいなという気付きを得た。よっぽど高いリターンが見えるなら別だけど……。

旅行や飲食はともかくIT系株とかが落ちてるのはあんまり理由が分かってないが、コロナウイルスを口実にしてバブル気味だった市場が元に戻ろうとしているという分析をどこかで見た。本当かは分からんけど、会社そのものではなく株取引自体に値段が付いている雰囲気は確かに感じるので、まあなんか口実は必要なんだろうなとは思った。


体重は変わってない。相変わらず62kgくらい。頑張ると減らせそうな気もするが、変な病気が流行ってる時に体調のバランスを崩すようなことをするのもなあと思って頑張るのは止めている。


新しい技術。はなんもやってないな……。株式関連の情報を自動収集しようと思って、Alpha Vantageという無料で叩けるAPIのクローラをHaskellで書いてみたものの、Shares outstandingやReturn on Investmentのような自分の見たい情報が取れないので諦めてしまった。そういう情報をAPIで提供しているとこはそれなりに存在するが、どこも月$50以上の費用がかかるので、趣味で適当にやるだけの出費としてはちょっと辛い。FidelityのQuoteでは一応見たいものが全部見れるのでそこをクロールするのが一番いいような気もするが、やっていいのかな……。


中国語。Duolingoは初めの方はよかったけど、1ヶ月くらいするとアプリの粗が目立ってきて不満が多く、気が向いたらちょっとやるくらいになってしまった。大きく不満な点としては

  • 中文英訳問題で冠詞を抜かすと誤答判定されたり、中国語の微妙なニュアンスを変な訳し方で訳さないといけない(妹妹はsisterではなくyounger sisterとか)など、本質的でないことで時間と思考リソースを食う
  • 知らなかったり忘れたりした単語を調べたくても、Duolingoの機能の範囲内でピンインが表示できないので入力できない
  • フリーテキスト入力の問題が鬱陶しい上、やっぱりテンプレートに則って訳さないと誤答判定される

といったあたり。反復練習するためのプラットフォームとしてはそこそこいいんだけど……。雰囲気は掴めたので、Ankiかなんかで文法と単語を詰め込んでWebサイトを読むようにシフトしたほうがよさそう。……というような感想が先月のまとめにも書いてあった。今月やります。


本。1月に読んだ「いま世界の哲学者が考えていること」で紹介されていた、マルクス・ガブリエルの「なぜ世界は存在しないのか」と「『私』は脳ではない」を読んだ。

読書メーターの感想。

bookmeter.com bookmeter.com

「なぜ世界は存在しないのか」では、物理的な物と抽象的な思考をひとまとめに扱う道具として「意味の場」を考え、個人個人のもつコンテキストに応じて「意味の場」を通して観察されたものの積集合のところに「実存」が確かに存在するという、素朴実在論構築主義を合わせたような世界観を提示している。直感的には納得しやすいし、多様化する価値観をどう擦り合わせるかを問題とする現代においては確かに大切な考え方だと思う。一方で、これは日常生活を生きるために必要な考え方を提供する実用向けの哲学であって、世界を解き明かすというハードな用途には合ってないなとも思った。実際に2冊目の「『私』は脳ではない」では、精神の実在性に固執するあまり、自然科学的なアプローチでの定義(日常的なモノとしては精神を定義しづらくなる)に短絡的な難癖を付ける方向に向かってしまっており、あまり得られるものがなかった。

文体はとっつきやすいし、議論に必要な哲学的概念は逐一説明してくれるタイプの本なので、初心者でも読みやすい。実際自分も初心者だし……。とりあえずあまり構えずに読んでみると何かしら得られるタイプの本だと思う。


映画化して話題になっていたので、致命的なネタバレを踏む前にと思い、ようやくメイドインアビスを読んだ。

断片的な情報からグロテスクでダークな作品だとは知っていたが、予想の数倍ダークだったし、そういった簡単に耳目を集める演出だけでもない、硬派で密度の高い冒険ものでもあった。一周目だと何がなんだか分からなかった箇所もあったが、この前二週目を読み返したら全体像がすっと入ってきた。異種族レビュアーズもそうだけど、世界観が作り込まれている作品は読んでて楽しい。


そういえば、2月半ばにあまりにも疲れてもうだめぽみたいな気持ちになったので、Chase Sapphire Reserveのアホみたいに貯まるポイントを使ってダラスのKing Spaにまた行ってきた。ポイントはUnitedにマイルを送って航空券を取ったんだけど、Unitedはオースティン―ダラス間に直行便がなく、ヒューストンで乗り継いで3時間くらいかかる。本を読んだりPCしたりで時間は使えるからまあそれでもいいかなと当初は思っていたけど、やってみると面倒なので、やっぱり直行便だなと思った。United以外でもカード会員向けサイトから旅行を予約すると1ポイント1ドル以上のレートで使えるっぽいので、今後はそっちを使うか、アップグレードのために貯めるかかな……。

今回はマジで静養だけが目的だったので、IrvingのLake CarolynのほとりにあるMarriottに泊まった。部屋でなんか生産的なことできるかと思って、一応湖の見えるいい感じの部屋を取ったけど、結局ホテルでは何もせず、King Spaで風呂に入ってはリラックスルームで寝るのを3回くらい繰り返してだらだらしていた。

goo.gl

あとLyftのおっちゃんに、スパ行きたいならSpa Castleのほうが大きくていいよとおすすめされた。今度はそっちも行ってみたい。というかダラス以外でもいい温泉地やスパがあったら行きたいので情報を募集しています。


こんな感じかなあ。2月は仕事がちょっと立て込んでいて精神が終わり気味だったり、日本から同僚が来ていたので遊び回っていたり、株価が動いているのを眺めながら何が起きているのか考えたり(数値が変化するのは見ていて楽しい(数字って言うと警察に摘発される))していたので、他のことに割く元気があまり残っていなかった。3月は株はひとまずあんまり気にしないことにする。コロナウイルスの影響で在宅勤務になり、集中力が切れやすくなったからか相対的に疲れにくくなったので、この余剰分をうまく使って人生を進めたい。