動かざることバグの如し

近づきたいよ 君の理想に

Rails8からstrong parametersの書き方が変わったのは何故か

環境

  • Rails8

Rails8からstrong parametersの書き方が変わった

# 今までの書き方
user_params = params.require(:user).permit(:name, :email)

# 新しい書き方
user_params = params.expect(user: [:name, :email])

なぜ変わったのか

主にセキュリティとエラーハンドリングの向上

セキュリティ

パラメータの構造の強制

従来の params.permit は、指定されたキーを許可するだけで、パラメータの構造(例:ハッシュや配列)を強制しない。 対照的に、params.expect は、期待されるパラメータの構造を明示的に定義し、異なる構造のデータが送信された場合には 400 Bad Request エラーを返すようになった。

配列の明示的な指定

permit は、配列を指定すると、ハッシュや配列のハッシュの両方を許可するが、expect は配列を明示的に指定しない限り、ハッシュのみを受け付けるため、セキュリティ上の曖昧さを減少させる。

エラーハンドリングの向上

500 エラーの防止

古い方法では、不正なデータ型が送信された場合に 500 エラーが発生することがあったが、expect は不正なリクエストを 400 エラーとして明示的に返すため、エラーハンドリングが改善される。

エラーの明確化

500 エラーは非常に一般的なエラーであり、特定のエラーを抑制することが難しい。 expect を使用することで、不正なリクエストが明確に拒否されるため、エラーの原因がより明確になる。

対応方法

rubocopで一括自動修正ができる

docs.rubocop.org

ただし破壊的な変更を伴うかもしれないので rubocop -A でのみ反映可能

参考リンク

チャーハンの作り方

用意するもの

  • ç±³200g
  • ごま油大さじ2
  • 卵2個
  • 丸鶏がらスープ 大さじ1
  • お湯 大さじ1

手順

  • 時間勝負なので用意するものをすぐ出せるようにしておく
  • フライパンにごま油を大さじ2ひいて中火で温めておく
  • 丸鶏がらスープ大さじ1をお湯大さじ1で溶かす
  • 卵2個を溶かしてフライパンにいれる
  • 半分火が通ったらご飯をいれる
  • 中火から強火にする
  • 溶かした丸鶏がらスープを入れる
  • 炒めたら完成 好みでコショウいれる

yt-dlpを使ってInstagramのストーリーハイライトをダウンロード

環境

やりたいこと

インスタグラムのストーリーハイライトをダウンロードしたい。

手順

yt-dlp https://www.instagram.com/stories/highlights/17885876810276296/ --cookies cookies.txt --concat-playlist always

先にChromeで「Get cookies.txt LOCALLY」拡張機能をインストールし、インスタグラムのページにアクセスしてcookies.txtをダウンロードしておく必要がある。

なんで認証情報が必要なの?

インスタグラムのストーリーハイライトをダウンロードするには、ログイン情報が必要だ。(おそらくクローリング対策) yt-dlpは--cookiesオプションを使ってクッキーファイルを渡すことで、ログイン状態をシミュレートする。

動画の結合

デフォルトでは、ストーリーの動画が分割されてダウンロードされるが、--concat-playlist alwaysオプションを付けることで、1つの動画として保存される。 これで、インスタグラムのストーリーハイライトを簡単にダウンロードできるようになる。

特定のIP帯でポートが空いているIPを爆速で検索したい

環境

やりたいこと

特定のIP帯(例: 10.1.10.2-250)から、ポート80が空いているIPアドレスを検索したい。

コマンド

nmap -p 80 -T4 --min-parallelism 100 10.1.10.2-250 --open
  • -p 80: ポート80を指定。ここではHTTPポートを対象としている。
  • -T4: スキャンの速度を指定。T4は高速スキャンを意味する。
  • --min-parallelism 100: 並列処理の最小数を100に設定。これにより、より多くのホストを同時にスキャンできる。
  • 10.1.10.2-250: スキャン対象のIP範囲を指定。10.1.10.2から10.1.10.250までのIPアドレスを対象とする。
  • --open: 開いているポートのみを表示するオプション。

注意点

  • このコマンドはネットワークに負荷をかける可能性がある。特に--min-parallelism 100を指定しているため、大量のパケットが送信される。 使用する際はネットワークの状態や管理者の許可を確認すること。

医師は「意識不明の重体」とは言わない

医師は「意識不明の重体」とは言わない

ニュースでよく見る「意識不明の重体」という言葉だが、医師は現場では使わないらしい。

意識不明と意識不明の違い

「意識不明」ってのは、文字通り「意識があるかないか」って話だ。でも、医療現場じゃ「意識障害」って言葉を使う。 それは、「意識があるかないか」の二択じゃなくて、「意識がどのくらい障害されてるか」が重要だからである。

  • 意識不明: 意識のあるなしを指す言葉
  • 意識不明: 意識にどの程度障害があるかを指す言葉 意識レベルが関係する

意識レベルとは

医療現場じゃ、「意識レベル」って言葉で意識障害の程度を数字で表す。 日本じゃ「Japan Coma Scale(ジャパン・コーマ・スケール)」、略してJCSってやつがよく使われる。

JCSは意識レベルを0、1、2、3、10、20、30、100、200、300の10段階に分ける。数字が大きいほどヤバい。

例えば、

  • 呼びかけに反応しない、痛み刺激にもピクリともしない → JCS 300
  • 名前は言えるけど、場所や日付が言えない → JCS 10

で、緊急の時は「JCS 3桁」みたいに大雑把に言うこともある。 こうすると、100なのか200なのか300なのかは分からんが、大体のヤバさは伝わる。

「意識不明」=「重症」とは限らない

「意識不明」って聞くと、めっちゃヤバい状態を想像するかもしれない。 でも、意識レベルが低くても、命に関わらないこともあるんだ。

例えば、糖尿病の人が薬の使いすぎで低血糖になって意識を失うことがある。 でも、ブドウ糖を注射すれば、すぐに意識は回復する。

逆に、意識はハッキリしてるのに、敗血症とかで命に関わるってケースもある。

つまり、「意識があるかないか」だけじゃ、病気の重さは決まらないってことだ。

参考リンク