ようへいの日々精進XP

よかろうもん

2021 年 02 月 26 日 (金)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

  • いつもの補強 x 2 毎日続けないと、すぐに弱々になってしまう
  • エアロビクス 40min (負荷 8) + 35 秒ダッシュ x 3 (rest: 35 秒)

読書

今日も本を読む時間が取れなかった orz

レアジョブ

既にチケットを使い切ってしまった。

夕飯

2021 年 02 月 25 日 (木)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

yamap.com

今日も補強を休んだ、仕事の息抜きに 1 セットでもやるようにしたい。

読書

今日も本を読む時間が取れなかった orz

レアジョブ

2 月最後のレッスンだった。以下、今日の指摘事項。

You said: I want to practice in this weekend.

Correct: I want to practice *on* this weekend.

うたとかんた

今日は、奥さんのお腹に宿った小さな命が旅立った日でした。

夫婦にとって、特に忘れられない日です。

inokara.hateblo.jp

2021 年 02 月 24 日 (水)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

yamap.com

今日も補強を休んだ、仕事の息抜きに 1 セットでもやるようにしたい。

読書

今日も本を読む時間が取れなかった orz

レアジョブ

今日は予約していたけど、バタバタしてて急遽キャンセルさせて頂いた。Val 先生、ごめんなさい。

夕飯

AutoScaling 環境においてスポットインスタンスとオンデマンドインスタンスが混在している環境において...

以下のような状態でインスタンスが起動していて、「Termination Policy」は OldestLaunchTemplate を選択している。

インスタンス Launch Template Version
オンデマンド 10
スポット 11

AutoScaling の Desired Instance の調整を行なって、インスタンスを削除しようとした場合、スポットインスタンスが最初に削除される状態を観測した。

んー、Launch Template が古いオンデマンドのインスタンスが止まって欲しいのになーと思って調べていたら、「Optional On-Demand base」の設定が 1 になっていたのが原因っぽいことが解った。

つまり、「Termination Policy」の設定よりも、「Optional On-Demand base」の設定が優先されるってことらしい。

ちゃんと、検証していないので、確定ではないけど、時間があったら検証してみたい。

AutoScaling 奥深いぞ...

2021 年 02 月 23 日 (火)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

[ランニング-2021-02-23-朝] 〜 うっかり休日だった朝のランニング 〜 / かっぱさんの活動データ | YAMAP / ヤマップ

今日も補強を休んだ。

読書

ダラダラと「相席食堂」の再放送を見ながら昼寝をしてしまった時間があったのに、今日も本を読む時間が取れなかった orz

レアジョブ

今日も自分なりに頑張った。以下、指摘事項。

(1)
You said: Derek can play the rap.

Correct: Derek can rap.

(2)
You said: I'm very _exciting_ .

Correct: I'm very *excited* .

ディスカッションにおいて、まったく設問を理解していなくて明後日な返答をしてて、思わず笑ってしまったけど、先生も笑ってて面白かった。

夕飯

Apache の LimitRequestFieldSize

ちゃちゃっと検証した内容をブログに書いた。

inokara.hateblo.jp

Apacheソースコードを読めるようになりたい。

Apache の LimitRequestFieldSize の挙動を確認する

tl;dr

ギョームで LimitRequestFieldSize について調べる機会があったので、改めて、手元で LimitRequestFieldSize の挙動を確認した。

LimitRequestFieldSize とは

HTTP リクエストヘッダー 1 つで受け付けられるバイト数の上限ということで、設定値を 100 バイトに制限した場合、以下のようなリクエストを送信すると、各ヘッダ行で 100 バイト制限がかかることになる。

> Host: localhost:8080    # ここで 100 バイト
> User-Agent: curl/7.64.1 # ここで 100 バイト
> Accept: */*             # ここで 100 バイト
> Cookie: name=xxxxxxxxxx # ここで 100 バイト

挙動を試す

検証環境

Apache の Docker コンテナを利用する。

root@71158ebff5ab:/usr/local/apache2# httpd -V
Server version: Apache/2.4.46 (Unix)
Server built:   Aug  5 2020 23:20:17
Server's Module Magic Number: 20120211:93
Server loaded:  APR 1.6.5, APR-UTIL 1.6.1
Compiled using: APR 1.6.5, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr/local/apache2"
 -D SUEXEC_BIN="/usr/local/apache2/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

LimitRequestFieldSize を 100 に設定してみる

LimitRequestFieldSize 100

まずは、普通にリクエストを投げてみる。

$ curl localhost:8080 -I
HTTP/1.1 200 OK
Date: Tue, 23 Feb 2021 08:45:35 GMT
Server: Apache
... 略 ...

次に、100 バイト (100 文字) の cookie を送信してみる。

$ curl -b 'name=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' http://localhost:8080/ -I
HTTP/1.1 400 Bad Request
Date: Tue, 23 Feb 2021 08:47:59 GMT
Server: Apache
Connection: close
Content-Type: text/html; charset=iso-8859-1

BadRequest が返ってきた。100 バイト制限だから 100 文字の値が受け付けられるわけではなさそう。

$ curl -b 'name=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' http://localhost:8080/ -I
HTTP/1.1 200 OK
Date: Tue, 23 Feb 2021 08:52:41 GMT
Server: Apache
... 略 ...

実際には 88 文字まで x を減らすと正常なレスポンス (ステータスコード: 200) が返却されるようになった。

これは、なんでだろうなーと思って、curl--verbose オプションを付けてリクエストヘッダを見てみた。

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> HEAD / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.1
> Accept: */*
> Cookie: name=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

どうやら、Cookie のキー名と、ヘッダの Cookie: という文字列を含め 100 バイトの計算で制限がかかるようだ。(空白はカウントされない) ちゃんとソースコードを読んだわけではないので、あくまでも予想。

ちょっとだけ Apacheソースコードをリーディング

LimitRequestFieldSize のデフォルト値は

httpd.h に定義されている。

https://github.com/apache/httpd/blob/2.4.x/include/httpd.h

/** default limit on bytes in any one header field  */
#ifndef DEFAULT_LIMIT_REQUEST_FIELDSIZE
#define DEFAULT_LIMIT_REQUEST_FIELDSIZE 8190

default limit on bytes in any one header field って書いてある。

気になるのが、同ソースコード内のコメントに、以下のように記述されている。

/*
 * Limits on the size of various request items.  These limits primarily
 * exist to prevent simple denial-of-service attacks on a server based
 * on misuse of the protocol.  The recommended values will depend on the
 * nature of the server resources -- CGI scripts and database backends
 * might require large values, but most servers could get by with much
 * smaller limits than we use below.  The request message body size can
 * be limited by the per-dir config directive LimitRequestBody.
 *
 * Internal buffer sizes are two bytes more than the DEFAULT_LIMIT_REQUEST_LINE
 * and DEFAULT_LIMIT_REQUEST_FIELDSIZE below, which explains the 8190.
 * These two limits can be lowered or raised by the server config
 * directives LimitRequestLine and LimitRequestFieldsize, respectively.
 *
 * DEFAULT_LIMIT_REQUEST_FIELDS can be modified or disabled (set = 0) by
 * the server config directive LimitRequestFields.
 */
...

ざっくり意訳すると...

  • これらの値は単純な DDoS を防ぐ為に存在している
  • 場合によっては、推奨値よりも大きな値を設定する必要があるが、ほとんど変える必要は無い

あまり大きな数値は設定しないほうが良さそうなことが解る。

以上

手元で動かしながら、Apache の LimitRequestFieldSize の挙動を確認してみました。

2021 年 02 月 22 日 (月)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

[ランニング-2021-02-22-夕] 〜 仕事終わりにジョギング 〜 / かっぱさんの活動データ | YAMAP / ヤマップ

読書

今日も本を読む時間が取れなかった orz

レアジョブ

今日も自分なりに頑張った。以下、指摘事項。

(1)
You said: I know Dance with Me every night.

Correct: I *watch* Dance with Me every night.

(2)
You said: Me too. A lot of fun.

Correct: Me too. *I* had a lot of fun.

会話の中で、先生の言ったセンテンスをオウム返しすれば、なんとなく会話が継続するのでは...と思って、Me too. A lot of fun!! って言ったんだけど、Me too. *I* had a lot of fun. って言えと指摘されたので見透かされているなって反省。

夕飯

Apache の設定を server-info で取得する

たまに Apache を使うことがある。

httpd.apache.org

2021 年 02 月 21 日 (日)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

[ランニング-2021-02-21-朝] 〜 のんびりジョッグ 〜 / かっぱさんの活動データ | YAMAP / ヤマップ

読書

今日も本を読む時間が取れなかった orz

レアジョブ

今日はお休みだったけど、明日は予約をゲット。

夕飯

イカとトメイト (トマト) のパスタを作った。我ながら美味しく出来たと思う。

PPP/PPPoE の認証 (PAP/CHAP/MS-CHAPv2)

ルーターの設定をする機会があって、PPP/PPPoE の認証方式して、PAP/CHAP/MS-CHAPv2 についてちゃんと理解出来ていなくて、慌ててググったら、以下のサイトが勉強になった。

milestone-of-se.nesuke.com

ありがとうございました。

2021 年 02 月 20 日 (土)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

[ランニング-2021-02-20-夕] 〜 しゃかりきビルドアップ 〜 / かっぱさんの活動データ | YAMAP / ヤマップ

あと、補強 (なんちゃってプランクレーニング 4 種盛り x 1 セット) もやった。

読書

読書はお休み。

レアジョブ

今日はお休み。Val 先生の予約が取れなそう。

夕飯

AWS の Availability Zone 名 と Availability Zone ID の紐付けを確認

AWS アカウントによって、Availability Zone 名と Availability Zone ID の紐付けは異なるらしい。

以下、マイ AWS アカウントの状況。

$ aws ec2 describe-availability-zones \
        --region ap-northeast-1 \
        --query 'AvailabilityZones[].{RegionName:RegionName, ZoneName:ZoneName, ZoneId:ZoneId}' \
        --output table
----------------------------------------------------
|             DescribeAvailabilityZones            |
+----------------+-------------+-------------------+
|   RegionName   |   ZoneId    |     ZoneName      |
+----------------+-------------+-------------------+
|  ap-northeast-1|  apne1-az4  |  ap-northeast-1a  |
|  ap-northeast-1|  apne1-az3  |  ap-northeast-1b  |
|  ap-northeast-1|  apne1-az1  |  ap-northeast-1c  |
|  ap-northeast-1|  apne1-az2  |  ap-northeast-1d  |
+----------------+-------------+-------------------+

以下の記事を参考にさせて頂きました。

dev.classmethod.jp

2021 年 02 月 19 日 (金)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

[ランニング-2021-02-19-朝] 〜 めちゃくちゃ寒い朝でした 〜 / かっぱさんの活動データ | YAMAP / ヤマップ

今日の補強はお休み。

読書

読書はお休み。

レアジョブ

レッスン。以下、指摘事項。

(1)
You said: Also like horror movies.

Correct: *I* also like horror movies.

(2)
You said: I'm very enjoyed.

Better: I enjoyed it very much.

適当に話していることがバレバレな感じで反省。

夕飯

OneMix4

2021 年 02 月 18 日 (木)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

  • 補強 (なんちゃってプランクレーニング 4 種盛り x 1 セット)
  • エアロバイク 40min (強度: 8)

読書

書籍は読めなかったけど、読もう読もうと思っていた、分散システムのためのメッセージ表現手法に関する研究 を読み切った。論文ということで、難しい言葉の言い回しがあるのではと思ったけど、見たこと、聞いたことの文言が並んで、思ったよりも読みやすくて良かった。普段、何気なく利用している技術が様々な課題を解決する為に考え出されたもので、様々な人たちの努力の賜物なんだなと感銘を受けた。

レアジョブ

今日は久しぶりレッスン。以下、指摘事項。今日も散々だった。

(1)
You said: Let's watching movies.

Correct: Let's watch movies.

(2)
You said: What kind of movies watch with me?

Correct: What kind of movies should we watch together?

「週末、映画を見ようぜー」という質問に対して、「どんな映画を見よっか」て言いたかったんだけど言えなかったのが (2) だった。

夕飯

ぎっくり腰の奥さんが頑張って作ってくれた。

ありがとう。

Terraform を Github Actions で動かす

以下の記事を参考にさせて頂いて、Pull Request を作ると、terraform plan が動いて、Pull Request をマージすると terraform apply する仕組みを作った。

zenn.dev

Pull Request のコメントに terraform plan の実行結果が掲載されたりして、Infrastructure as code 感がより高まる気がする。