- ジョギング
- 日課
- ミッション・インポッシブル
- 今日のるびぃ exercism 編 〜 Difference Of Squares (1) 〜
- 今日の AWS ~ AWS 認定デベロッパー – アソシエイトレベルサンプル試験を解く (3) ~
ジョギング
- 香椎浜 x 2 周
- カラッとして走りやすかったけど, なんか体が重いし, 体が動かない...
日課
- 引き続き, 腰と腰に痛みがあるので止めといた
ミッション・インポッシブル
最新のミッション・インポッシブル〜フォールアウト〜を観てきた.
香椎のトム・クルーズがTジョイ博多でミッショインポシブルを見てきた。本物のトム・クルーズに負けないように生きていきたいと思った。
— Yohei Kawahara(かっぱ) (@inokara) 2018年8月18日
細かいことを言うと, ストーリ的に「んっ??」ってなる部分もあったけど, 一貫して冷や冷やしたし, トム・クルーズがガチでアクションしてて「すごい」としか思えなかった.
今日のるびぃ exercism 編 〜 Difference Of Squares (1) 〜
ギョームで Ruby を触ることが無さすぎるので, exercism の問題を解くことにした.
概要
総和の二乗と各自然数の二乗の総和の差分を求める.
- The square of the sum of the first ten natural numbers is (1 + 2 + ... + 10)² = 55² = 3025.
- The sum of the squares of the first ten natural numbers is 1² + 2² + ... + 10² = 385.
上記の 3025 と 385 の差分を求める.
テスト
require 'minitest/autorun' require_relative 'difference_of_squares' # Common test data version: 1.1.0 7a1108b class DifferenceOfSquaresTest < Minitest::Test def test_square_of_sum_1 # skip assert_equal 1, Squares.new(1).square_of_sum end def test_square_of_sum_5 # skip assert_equal 225, Squares.new(5).square_of_sum end def test_square_of_sum_100 # skip assert_equal 25_502_500, Squares.new(100).square_of_sum end def test_sum_of_squares_1 # skip assert_equal 1, Squares.new(1).sum_of_squares end def test_sum_of_squares_5 # skip assert_equal 55, Squares.new(5).sum_of_squares end def test_sum_of_squares_100 # skip assert_equal 338_350, Squares.new(100).sum_of_squares end def test_difference_of_squares_1 # skip assert_equal 0, Squares.new(1).difference end def test_difference_of_squares_5 # skip assert_equal 170, Squares.new(5).difference end def test_difference_of_squares_100 # skip assert_equal 25_164_150, Squares.new(100).difference end ... def test_bookkeeping skip assert_equal 4, BookKeeping::VERSION end end
実装
class Squares def initialize(n) @n = n end def square_of_sum sum = (0..@n).inject(:+) # sum = (0..@n).inject(0) { |sum, n| sum + n } sum ** 2 end def sum_of_squares sum = (0..@n).inject(0) { |sum, n| sum + n ** 2 } sum end def difference square_of_sum - sum_of_squares end end
inject
を reduce
に置き換えても OK 牧場.
class Squares def initialize(n) @n = n end def square_of_sum sum = (0..@n).reduce(:+) sum ** 2 end def sum_of_squares sum = (0..@n).reduce(0) { |sum, n| sum + n ** 2 } sum end def difference square_of_sum - sum_of_squares end end
Run Test
$ ruby difference_of_squares_test.rb Run options: --seed 16699 # Running: ........S. Finished in 0.001553s, 6439.1500 runs/s, 5795.2350 assertions/s. 10 runs, 9 assertions, 0 failures, 0 errors, 1 skips You have skipped tests. Run with --verbose for details.
いい感じ.
メモ
- inject 結構便利
- reduce は inject のエイリアス (と言っていいのかな??)
今日の AWS ~ AWS 認定デベロッパー – アソシエイトレベルサンプル試験を解く (3) ~
公開されているサンプル試験問題を解く. なぜ, その答えになるのかをちゃんと理解する必要がある.
Q8. STS について
設問
企業ウェブアプリケーションを Amazon VPC 内にデプロイし、IPSec VPN 経由で企業データセンターに接続しています。このアプリケーションは、オンプレミスの LDAP サーバーに対して認証を行う必要があります。認証後、ログインしたユーザーは、そのユーザーに固有の S3 キー空間のみにアクセスできます。この目的を満たすことができる方法を、次の中から 1 つ選んでください。
A. アプリケーションを LDAP に対して認証する。次に、アプリケーションで IAM Security Token Service を呼び出して、LDAP 認証情報を使用して IAM にログインする。アプリケーションでは、IAM の一時的な認証情報を使用して適切な S3 バケットにアクセスできる。 B. アプリケーションを LDAP に対して認証し、ユーザーに関連する IAM ロールを取得する。次に、IAM Security Token Service を呼び出して、その IAM ロールを引き受ける。アプリケーションでは、一時的な認証情報を使用して適切な S3 バケットにアクセスできる。 C. LDAP 認証情報を使用して、アプリケーションを IAM Security Token Service に対して認証する。これらの一時的な AWS セキュリティ認証情報を使用して、適切な S3 バケットにアクセスする。 D. LDAP に対して認証を行う認証ブローカーを開発し、IAM Security Token Service を使用して IAM フェデレーションユーザー認証情報を取得する。アプリケーションで認証ブローカーを呼び出して、適切な S3 バケットへのアクセスを有する IAM フェデレーションユーザー認証情報を取得する。 E. IAM Security Token Service に対して認証を行って IAM ロールを引き受け、一時的な AWS セキュリティ認証情報を取得する認証ブローカーを開発する。アプリケーションで認証ブローカーを呼び出して、適切な S3 バケットへのアクセスを有する AWS の一時的なセキュリティ認証情報を取得する。
正答
- D (LDAP に対して認証を行う認証ブローカーを開発し、IAM Security Token Service を使用して IAM フェデレーションユーザー認証情報を取得する。アプリケーションで認証ブローカーを呼び出して、適切な S3 バケットへのアクセスを有する IAM フェデレーションユーザー認証情報を取得する。)
メモ
- 設問や選択肢自体の日本語が分かり辛い
- 設問としては, LDAP で認証させたユーザーに対して, 一時的に AWS リソースへのアクセスを許可するにはどうしたら良いか ということを問われているような気がする
- 解答としては, ユーザー (アプリ) は認証ブローカーにリクエストを投げて, ブローカーが LDAP で認証し, 認証されたら STS に一時的な認証情報の取得を要求し, その情報を以て S3 にアクセスさせる...ってことなのかな
このあたりの理解は深めたいなー.
Q9. S3 の署名付き URL について
設問
広告収益モデルの写真共有ウェブサイトを運営しており、サイト訪問者への写真配信に S3 を使用しています。いつからかその写真に他のサイトが直接リンクを張るようになり、広告収益の減少を招いていることに気づきました。この影響を緩和するにはどの対策が効果的ですか?
A. 静的コンテンツに CloudFront ディストリビューションを使用する。 B. パブリックの読み込み権限を削除し、有効期限付きの署名 URL を使用する。 C. 被害を及ぼしているウェブサイトの IP をセキュリティグループで遮断する。 D. 写真をウェブサーバーの EBS ボリュームに保存する。
正答
- B (パブリックの読み込み権限を削除し、有効期限付きの署名 URL を使用する。)
メモ
- 署名付き (有効期限付き) URL を発行する
- アクセス許可設定をしていない特定のオブジェクトを指定した期間に限定して HTTPS アクセスで公開する
- AWS CLI で設定した場合のデフォルトは 3600 秒 (presign — AWS CLI 1.15.81 Command Reference)
Q10. S3 の仕様
設問
アプリケーションで 6 GB のファイルを Simple Storage Service にアップロードしようとしていますが、「指定されたアップロードは、アップロード可能な最大オブジェクトサイズを超えています。」というメッセージが表示されます。これを解決する方法はありますか?
A. ない。Simple Storage Service オブジェクトは 5 GB に制限されている。 B. このオブジェクトにマルチパートアップロード API を使用する。 C. このオブジェクトに大きなオブジェクトのアップロード API を使用する。 D. サポートに連絡してオブジェクトサイズ制限を増やす。 E. 異なるリージョンにアップロードする。
正答
- B (このオブジェクトにマルチパートアップロード API を使用する。)
メモ
- 1 ファイル最大 5TB まで
- 1 回にアップロード (1 つの PUT) 出来るサイズは 5GB まで, 5GB を超える場合にはマルチパートアップロード API を利用する
- バケット内のオブジェクト数は無制限
フムフム.