朝、かなり遅くまで寝てしまった。10:30くらいにようやく起きた。久しぶりの筋トレがそんなに効いたのだろうか。
RustとVueを使って簡易的なコメントシステムを開発中。
CORS関係の処理に手間取った。バックエンドサーバはhttp://localhost:3000/、viteによるフロントエンド開発サーバはhttp://localhost:5173/で動くのでオリジンが変わってしまう。実際に動かすときにはバックエンドサーバからビルド済みのフロントエンドを読み込んで配信するつもりなのでCORSの問題は出ないのだが、開発中はホットリロードを使い倒したいので分けざるを得ない。
開発効率を上げるためのホットリロードを使うために開発の時間を食っているのだから本末転倒な気がしなくもないが、CORSの勉強をしたいというのもあるのでちゃんとやった。
クライアントとサーバ双方の実装が必要になる。fetch APIでやっていく場合、mode: 'cors'
が必要らしい。さらにパスワードなどを送る場合はcredentials
の指定も要る。こうした指定をするとリクエストにOrigin
ヘッダが付く。それにサーバ側がAccess-Control-Allow-Origin
とかのヘッダを返すことでCORSが許可されるのだ。
そしてこれはtext/plainやmultipart/form-dataを軸とした「単純リクエスト」の場合の話。text/jsonなどを送ろうとするとさらにpreflightとかを飛ばして確認をとることになる。この辺の動作はブラウザがやってくれるので、フロントエンドの実装的には単純リクエストかどうかを意識する必要はないのだが、サーバ側では単にヘッダを追加して飛ばすだけという訳にはいかなくなる。が、actixはこの辺有能で、actix-corsクレートを使って専用のミドルウェアを追加すると簡単に解決する。素晴らしい。
話は変わる。dieselでpostgreSQLのinet型を使用しようとしたのだが、ipnetworkクレートのバージョンが0.18.0でないと動かないようだった。調べたわけではなく試行錯誤して発見した。
Rust界隈はバージョン管理が適当だと前に誰かが言っていて本当かよと思っていたが、本当だったらしい。npmだったらこういうところは勝手に「0.18.0じゃないとダメなんでバージョン下げときますねー」みたいにしてくれるところだ。せっかく素晴らしい言語なのだからこんなところで評価を下げないで欲しい。
昨日は腕立てをやったので腹筋をやった。腕立ては腹筋にも効くので、少し昨日の分の筋肉痛がまだ残っていたが、まあいいやということでやった。
久しぶりにやったら上体を少し持ち上げる姿勢を保つだけでぷるっぷるする。
今日解いた競プロの問題。最近モチベがからっきし。
ABC262-D: 1個選ぶ場合からN個選ぶ場合までそれぞれについて計算する。C個選ぶときにCの倍数になっていればよいので、mod Cでの各重さにおける個数を調べる。dp[i][j][k]:=(i番目まで見てj個選んだ時に重さがmod Cでkとなる選び方の数)としてDPする。これを1≦C≦Nについて全部やればいいので$O(N^4)$で解けた。
Categories: 未分類