コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

グッドハートの法則に関してざっくりまとめる

原典

イギリスの経済学者、チャールズ・グッドハート氏の論文に登場する以下の内容がもととなったもの

Any observed statistical regularity will tend to collapse once pressure is placed upon it for control purposes.

観察される統計的規則性は、制御目的で圧力が加えられると崩れる傾向があります。

元の話はどういう意図のものなのか

いままで観測されてきた統計データに関して、それをもとにして何かしらのアクションが起こされるとその規則性は崩れるというもの。主に過去の計測データとそれに対する政策に関しての話としてつかわれており、規則性に対して何かしら政策アクションをかけるとその規則性はなくなってしまう。

こちらのページにて紹介されている例だと「結婚指輪の購入数と結婚の数に関連があるという統計データ」があるとしたときに、結婚数を減らしたくなったときに「結婚指輪の価格をあげる」という政策をとっても規則性が崩れるだけ、というような話。

どのように捉えられるようになったのか

別の話題として、心理学と社会学のアプローチとしてキャンベルの法則があり、こちらは簡単に説明すると「能力を測るのペーパーテストを使って点数をつけるが、点数そのものが目標になる(≒高得点を得ることが目的)になると計測としての効能は失われる」というようなもの。

このような考えと絡めて「計測される指標自体が何かしらの目標などに据えられるとその計測指標自体が意味をなさなくなる」という意図で使われている。

現在ではどのように使われるか

主に目標設定の文脈で語られることが多く、本来達成すべき話題から間接的に設定された数値などに対して、意味のない操作を行うことが起きる文脈で使われる。

たとえば目標設定で「売上をあげるために、契約数をいままでの2倍にします」というように設定すると、いままでは包括して行っていて契約を分割契約にしてあたかも件数が増えたようにするが、本質的には契約で取り交わされている金額が変わっていない、というような話で使われる。

参考リンク

「 イミュータブルな変数」という言葉をざっくりまとめる

そういえばなんとなく雰囲気で使っているところがあるので

immutableとは

英単語としてのimmutableは「不変の」というような意味。

Immutable Object

オブジェクト指向の文脈で Immutable Object というフレーズがある。これはオブジェクト指向におけるインスタンスを生成したタイミング以降は状態が変化しない(不変)のオブジェクトのことを指している。

具体的には各オブジェクトがインスタンス変数として持つ値は、インスタンスの生成後は変更や操作できないようになっているような構造のオブジェクトのことを指す。とても大雑把に表現するとsetterなどのインスタンスの内部の情報を書き換えるような変数を持たず、それらの値はインスタンス生成時に設定されて変更が効かないオブジェクトなどがこれにあたる。

イミュータブルなオブジェクトは内部の状態が変化しないので、変化したことを考慮した実装が減るという利点がある。

イミュータブルな変数

Immutable Objectの考えの延長線上に、一度定義したら内容の変えない変数をイミュータブルな変数という表現をすることがある。

多くは一度変数を定義したら、定義時点の情報から書き換えない(再代入や操作を行わない)変数のことを指す。プログラミング言語によってはイミュータブルな変数として定義できるようになっている(Swiftのletなどがこれにあたる)。もちろんプログラミング言語などでイミュータブルな状態を維持する機構がない場合もある。

参考/関連リンク

組み合わせ爆発についてざっくりまとめる

日本語特有の表現かと思ったらそうではなかったのでメモ

意味

問題を解く過程にある、内容のかけ合わせが増大する事例のことをいう。

組み合わせのかけ合わせが増えれば増えるほどパターンが増えるという事例は下記を見ていただくとわかりやすい。

『フカシギの数え方』 おねえさんといっしょ! みんなで数えてみよう! - YouTube

語られ始めた時期

英語版のWikipedaで初めて記事が作られたのが2006年、その前年の2005年にも "combinatorial explosion" の記載がある論文がちらほらあるので、その頃から出てきた言葉かと思われる。

関連するフレーズ

指数関数的に増える(指数関数的増加)

指数関数は線形的な関数に比べて、数の上がり方が急激に増えるため、その性質になぞらえて指数関数的〜という表現がされる。

こちらに関しても下記サイトで図が紹介されているので参照のこと。

増え方に着目してみよう ~ねずみ算と指数関数~

参考リンク

2024年夏頃時点のmiroでは、ふきだしのしっぽがコントロールできる図形はcalloutで検索すると出てくる

自分自身が困ったのでメモ

miroの吹き出し図形の難点

miroの下記の部分にある吹き出し図形は吹き出しの発言者の三角形、いわゆるしっぽやツノと言われる部分がPower PointやGoogleスライドのように操作できない。

callout(ふきだし)を使う

しっぽの部分を動かしたい場合はデフォルトのリストにあるものを選ぶのではなく、callout(あるいはふきだし)で検索して出てくるものを使う。以下の図のようなイメージ。

参考リンク

モデルなどの関係性を表すときに使うCrow’s foot(カラスの足)記法についてざっくりまとめる

記法の名前もよくわかっていなかったのでメモ書きレベルで

起源

Gordon C. Everest氏の1976年の論文を起源にしており、"Crow's foot"という呼称に関してもあとから付いた呼称である。日本ではIE(Information Engineering)記法とも呼ばれることがある。

使い所

オブジェクトとオブジェクトの関係性を表すときに用いられる。お互いの存在に対して0、1、1以上の関係性が表記されている。

関係性を表す際に以下の図形で表現する。

線の一覧

使い方例

下記のような図の使い方になる。

使い方例

参考リンク

RailsのIpSpoofAttackErrorとは何なのかをざっくり整理する

そもそもどういう事象なのかも含めて整理する。

前提としてIp Spoofing(IPスプーフィング)とは何か

送るリクエストの送信元IPを偽装してアクセスをする手法。IP制限などで特定のIPのリクエストしか受け付けない環境に対して、自身のIPを偽装をすることで制限を突破することなどを目的に行われる。

通常TCP/IPの方式ではTCPが送信元のIPを改ざんするのは難しい作りになっているため、TCPを用いる場合での送信元IPの偽装は難しいとされている。

RailsのIpSpoofAttackErrorとは

IpSpoofAttackErrorが発生するところのv7.2.0のソースコード を見ると、リクエスト元となるクライアントIPを推測する処理のところでraiseされる。

この処理ではIPアドレスをHTTPのヘッダ情報から類推して特定する処理となっている。その際に利用するのが REMOTE_ADDR , CLIENT-IP , X-FORWARDED-FOR ヘッダのいずれかを利用する。その際にあまり併用されることがない CLIENT-IPX-FORWARDED-FOR に関して送信元IPを含むべきX-FORWARDED-FORCLIENT-IPで書かれているIPが入っていない場合に異常として検知するもの。(X-FORWARDED-FOR に関しては過去の記事に書いたので説明は端折ります)該当コードとしては以下のあたりです。

should_check_ip = @check_ip && client_ips.last && forwarded_ips.last
if should_check_ip && !forwarded_ips.include?(client_ips.last)
  # We don't know which came from the proxy, and which from the user
  raise IpSpoofAttackError, "IP spoofing attack?! " \
    "HTTP_CLIENT_IP=#{@req.client_ip.inspect} " \
    "HTTP_X_FORWARDED_FOR=#{@req.x_forwarded_for.inspect}"
end

そのため、原義のIp SpoofingよりもHTTPヘッダでの整合性の合わない話へのエラーとなっている。

無効にするには

このraiseが上がらないように設定をすることもできる。Railsガイド曰く以下の通り。

この設定はconfig.action_dispatch.ip_spoofing_checkオプションとconfig.action_dispatch.trusted_proxiesオプションで変更可能です。 - Rails アプリケーションの設定項目 - Railsガイド

そのためしかるべきところで

config.action_dispatch.ip_spoofing_check = false

としておけばこのチェック自体がスキップされる。

余談:CLIENT-IP ヘッダについて

この調査の際に、CLIENT-IP ヘッダの仕様について調べようとしたところ2024年時点だと全然情報が見つけられずでした。仮に使うとしても X-Real-IP などで同様のことをやるのが一般的という情報しか出てこなかったので、今だとセットするほうが珍しい可能性があります。それ故にもしエラーが上がった場合は経路的にどこでセットされているのかを確かめるようほうが良いかもしれません。

参考・関連リンク

SEOを考えるときに実例を見ながら基本を見返したいときに読みたい『医療情報ネット「ナビイ」のSEO課題と改善策』

未来の自分が見返したくなる可能性があるのでスクラップ的な意味で書き残す。

対象ページ

医療情報ネット「ナビイ」のSEO課題と改善策 | SEO研究チャンネル

みどころ

以下のツイートにだいたいが語られている

内容としては国が運営するナビイを題材に、SEO的に気に掛けるべきところがまとめられている。例えばクローラーが回遊しやすいようにaタグを配置するなどというところに関してはSEOに携わったことがない方だとピンと来ない部分の可能性があるので、そのあたりが実例込みで知れるよい記事となっています。

Googleが用意しているGoogle 検索の基本事項(旧ウェブマスター向けガイドライン)を読んだあとに実例として目を通すと良さそうな記事でした。

関連リンク