//tips
//基本情報理解
相補演算とは演算結果の否定関係を示したもの。
A,Bの排他的論理和は下記のように表されるので表を書いておくと混乱しない。
A=0,B=0 -> XOR=0
A=0,B=1 -> XOR=1
A=1,B=0 -> XOR=1
A=1,B=1 -> XOR=0
桁落ちは切り上げや切り捨てのことではなく、絶対値がほぼ等しい数値の差を求める場合、正規化によって有効桁数が減少してしまうこと。
例えば1234.567と1234.555を減算する計算を有効桁数6桁で行う場合、
0.123457*10^4
0.123456*10^4
となり、これを減算すると
0.000001*10^4となるが浮動小数点数形式では、仮数部が1よりも小さく、1に最も近くなるように調整・正規化するので
0.100000*10^-1
のように有効桁数分の0を足すことになるので本来の数字との誤差が生じる。
音声のデジタル化は標本化と量子化によって行い、サンプリング周波数が40kHzの場合、1秒間に40k回の標本化を行う。16ビット=2バイトでデータ化をその標本数に対して行うので、1秒間のデータ量は80kバイトとなる。
//shopify/unity
まずrequire_once("inc/functions.php”);の理解から。
PHPで外部ファイルを読み込む場合、require、require_once、include、include_onceなどがあるが、requireは、失敗した場合にスクリプトの処理がそこで止まってしまうが、include の場合は、警告(E_WARNING) を発するもののスクリプトの処理は続行される。
require_once文は require とほぼ同じ意味だが、 ファイルがすでに読み込まれているかどうかをPHPがチェックし、すでに読み込まれている場合はそのファイルを読み込まない。
どちらも構文は同じで、別ファイル名を絶対パスか相対パスで指定するもの。
次に書きに出てくる$_GETについて。
$params = $_GET;
$hmac = $_GET['hmac']; // Retrieve HMAC request parameter
$_GETは、htmlやurlのパラメータで送受信される情報を取得するもの。
URLパラメータとは、URLの末尾に付け加える文字列のことで、サーバ側に情報を送信する手段の一つ。
https://www.google.com/search?〇〇〇=■■■■
(〇がパラメータ名、■がパラメータ値)
〇は パラメータの名前(key)、■は パラメータの値(Value)を示している。
https://www.google.com/search?q=testとすると
qが検索文字列を表す変数(key)、testが検索文字列(Value)となり、?q=test をURL末尾に付与してアクセスすることで、「検索文字列qという箱に”test”という文字が入っている」という情報をサーバ側に送信したことになる。
このURLパラメータを付与したURLにアクセスする方法意外にもhtmlで仕込み間れている情報をGETで抜き出すこともでき、下記のように、
<form method="get" action="https://www.google.com/search" >
<input type="text" name="q" value="test">
<input type="submit">
</form>
で$_GET[“q”] を用いると “test”が取得できる。
つまり、$_GETは、URLパラメータが付与されたURLにアクセスしたときやGETメソッドでactionのURLに遷移したときのようなリンクを踏んだだけでも値が取得できる。
$_GET[“q”] = “test”
HTMLからURLにパラメータを送るのではなく、リンクを作成してそれをPHP側から$_GETで取得することも可能で、その際にHTMLで作成するリンクは
<a href="example.php?first_name=値&last_name=値">リンク</a>
のようになる。
$_GETを考えるときにはhtml設計をきちんと見ておく必要があることが理解できる。
array array_diff_key ( array $array1 , array $array2 [, array $... ] )は、array1 のキーを array2 のキーと比較し、その差を返すもので、array1 の要素のうち、 その他の配列のいずれにも含まれないキーのものだけを残した配列を返す。
例えば、
?php
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
var_dump(array_diff_key($array1, $array2));
?>
上の出力は以下。
array(2) {
["red"]=>
int(2)
["purple"]=>
int(4)
}
なので、ここではhmacのみをGETしたものから外している。ksortはkey部分の規則性の順に並べ替えるもの。
Hmacについては下記参考。
https://e-words.jp/w/HMAC.html
$params = array_diff_key($params, array('hmac' => '')); // Remove hmac from params
ksort($params); // Sort params lexographically
例えば、
<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
?>
この出力は
a = orange
b = banana
c = apple
d = lemon
となる。
HMAC 方式を使用してハッシュ値を生成し、認証実施。
参考:
https://www.php.net/manual/ja/function.hash-hmac.php
$computed_hmac = hash_hmac('sha256', http_build_query($params), $shared_secret);
if (hash_equals($hmac, $computed_hmac)) の部分で認証の是非確認を行うことになる。
ここからどのようにaccess tokenを実際に生み出すのかを見ていく。