0718
書いてる日記が消えるやつが二回起きたので今日は諦めます。元気ない。
書いてる日記が消えるやつが二回起きたので今日は諦めます。元気ない。
タイムゾーンとの戦い 2日目ーー
本当にこれを今やるべきなのか?という疑問はあるのだが、DBやAPIの接触面だけ変えて中は元のままにしておく場合に整合性を保証できる気も全然しないので、結局全部やってしまうほうがマシなんじゃないかと思う、これは勘でそう思っているとしか言えない。でもその過程で不具合見つけたし、まあ元は取れたのではないか。
blogの実装は微妙に進めた。ペジネイション関連のロジックに入る。まだ具体的にどういうレスポンスを返すかは決めてないけど。
あとユースケースの抽象化もした。これは全然いらないような気もするのだけど、結局こうしないとモックできないわけで、テスタビリティのために仕方なくやっている。まだテスト書いてないけど。こういうとき、SpringBootは便利だなあと一瞬思うのだけど、あれはあれで邪悪というかしがらみに感じるわけで、難しい。
Rustという言語は、実は関数型のパラダイムからはどちらかというと遠い言語なのかもしれないなと思う。いや、「関数型のパラダイム」って何というのはよくわかってないけれど、結局関数を値として扱うのがしんど過ぎるので、仮に関数型言語として見るなら失格であろう。この辺はFnの返り値にimplが書けるやつやasync blockが入ったりすれば多少良くなる気はするから、今後に期待ではあるのだけど……。
逆にF#とか気になるよね。そういえばそういう観点からみたHaskellってどうなんだろうね?
寝ます。早く寝ないとなと思っているのにすぐ夜更かししてしまう。仕事とやりたいことが多過ぎる。
なんかiPhoneのSafariってセッション管理がバグってる気がしていて、ログインしてタブを開いたまま別アプリに移って戻ってくるとセッションが切れていたりする。ただこれは、裏で動いているTwitterアプリがメモリを食いすぎてるとかなのかもしれないし、よくわからない。Twitterアプリは最近非常に動作が不安定で、バッテリーの消費も過大な気がする。なんだこれ。
ねむかった。データベースのタイムスタンプ列をすべてタイムゾーンありにして、それに関連する実装を全部修正していた。なかなか厳しい。あとJDBCの挙動にもよくわからない部分があり、Java界隈への印象が汚れていく。
最近悩んでいたエラーハンドリングは一応の完成を見た。まあ、結局今はオーバースペックだなという気はするが、何かの時に役に立てばいいなと思う。
なので少し実装を進めた。OpenAPIのコードジェネレイタが出すコードとの接続をうまく抽象化したいが、なかなか。
寝ます。なんか遅くなっちゃった。
なんとか体調は戻ってきた。やれやれ。
昼頃に起きてから、ずっとマクロをいじっていた。マクロというか、根本的には動的キャストが課題なのだけど。うーん。元ネタではフィールド名で生成元エラーを判別していたけど、そこをジェネリックにするなら(そんな必要があるのか?)名前で判定することはできなくて、キャストするしかない。のだが、どうもRustのキャストはよくわからない。よくわからないもののマクロを書いているのでなおさらよくわからず、いっぺんこれはちゃんと実験をしたほうがいいのかもしれない。
いや、でもそうじゃないかもな。ジェネリックだからといって本当になにもわからないわけではないし、多少の制限ではあるけど静的に判定できる前提にしてしまえばいいか。少なくとも、外部のエラーも内部のエラーも両方受けうるジェネリクスが出てくるまでは、考えるのをやめよう……。
寝ます。三連休は酔い潰れて終わってしまったけれど、平日が四日で終わるということには希望が残されている。
飲み過ぎて夕方までうめいていた。なんか、メンタル的に不調の時にお酒で誤魔化そうとするとペース配分が狂って良くない気がする。はあ。
夜はエラーハンドリングについて考えたり実験したりしていた。前に読んだblog記事で紹介されていた、手続きマクロでエラーログをいい感じに出す方法は、結構良さそうなんだけどあと一歩が惜しい。もうちょっと試せば良くなりそうな気はするのだが。
寝ます。
会社の飲み会で飲みすぎたので死んでいる。なんか、酔いが時間差で来ることがあるんだよね。もはや昔ほどには強くないということなのか。だとするならば、これからそれと付き合って行かねばならないのか。
昼間はエラーハンドリングについて検討していた。thiserrorはいまいちな気がしてきたが、結局根本的にしんどいことをやっている気もするので、この方向に解はないのかもしれない。
寝ます。。酒を飲みすぎて苦しい。
元気がないのは大部分メンタル起因っぽい。肩こりがひどい。肩をもんでもらったりお酒飲んだら少しよくなった。
仕事はCDKのデプロイしてたら終わってしまった。なんか、結構ちゃんと整えたつもりではあったのだけど、やっぱり暗黙的なデプロイ手順がいろいろあったりして、それでコケるたびにロールバックやらリソース削除失敗やらで1時間くらい溶けるし、しんどい。ドキュメントはちゃんと書いておけという話ではあるが。あと、やっぱりCDK(というかCloudFormation)ってイマイチなんだろうか。Terraformだったらもっと速いか?
寝るかな。明日は会社の人たちと懇親会。
体調が良くない。なんか月に一度くらいこんな感じになるんだけど何なのかな。風邪……?すこし喉が荒れている気はする。
それはそれとして前歯の歯茎に口内炎ができるという異例の事態になっており、とにかく身体が弱っているらしい。うーん、やはり残業が多いのが効いてるのか?
バチェロレッテ シーズン3を観た。まあ結局、バチェロレッテシリーズはシーズン1で完成していて、あとはもう蛇足なんだよなという確信を再確認するだけだったな。
寝ます。元気になりたーい。
ちょっと体調良くないかも?
AWS AppRunnerはイマイチだなと思うことが多い。IP制限をかけようと思ったのだがSecurityGroupのルールが適用されるのは外向きトラフィックだけで、内向きには使えないらしい。だから前段にCloudFrontを置いてIP制限をしようと思った場合、WAFを2つ使う必要がある。しかもWAFのルールにCloudFrontのための穴を開けるのは自分で何らかの自動化をやらないといけないらしい。面倒すぎる……。
CDKへの対応状況といい、AppRunnerはまだまだ途上だなと感じる。Fargateがいいよなと思った。ここから切り換えられるかというと微妙なんだけど……。
blogの設計はいろいろ試行錯誤をしている段階。やはり非同期関数を受け渡しするのはRustだと書きづらいなという感じで、採用にとても躊躇する。まあ、そのことがわかったのは収穫だったと言えるのではないか。
寝ます。
いそがしいそがし。たぶんこれ来月まではずっとこんな感じなのかな……。やれやれ。
SeaORMを使ったDBアクセスを関数型っぽくやるやつに挑戦している。まあできないことはなさそうだけど、Rustの関数型っぽくなさみたいなのが結構ストレス。具体的には、非同期関数を返す関数みたいなのを書きたいとき(たとえばコネクションから「IDからレコードを返す関数」を返す関数)、返り値の型が長いしtrait objectが必要になる(impl FnOnce(i32) -> impl Future<...>の2つ目のimplが(stableでは)書けない)。nightlyならちょっとマシだが、どうしたものか。まあでも、あとでまた普通のリポジトリパターンにするのは難しくないだろうし、もうすこしこのままやってみる。でもこれ関数に渡すのもたぶん大変なんだよな。
寝る。