ようへいの日々精進XP

よかろうもん

2018 年 08 月 09 日 (木)

ジョギング

  • 香椎浜 x 2 周
  • いつもよりだいぶん涼しい感じ
  • 右足踵付近に違和感 (軽い痛み)

日課

  • お休み

JAWS-UG 福岡 もくもく会

  • fukuoka.rb の雰囲気を参考にさせて頂いて, 似たような感じで開催してみた
  • アメンバー以外に二名の方に参加して頂いて, 軽い雑談を交えつつ, ビール呑みながらいい感じで手を動かせていたんではと思う
  • 出来るだけ, 間を開けない感じで次回も開催したい

今日のるびぃ exercism 編 〜 rna-transcription (1) 〜

ギョームで Ruby を触ることが無さすぎるので, exercism の問題を解くことにした.

概要

以下のように, DNA の配列を渡すと, RNA 相補体を返すような実装.

DNA  RNA
G -> C
C -> G
T -> A
A -> U

テスト

require 'minitest/autorun'
require_relative 'rna_transcription'

# Common test data version: 1.0.1 cb1fd3a
class RnaTranscriptionTest < Minitest::Test
  def test_rna_complement_of_cytosine_is_guanine
    # skip
    assert_equal 'G', Complement.of_dna('C')
  end

  def test_rna_complement_of_guanine_is_cytosine
    skip
    assert_equal 'C', Complement.of_dna('G')
  end

  def test_rna_complement_of_thymine_is_adenine
    skip
    assert_equal 'A', Complement.of_dna('T')
  end

  def test_rna_complement_of_adenine_is_uracil
    skip
    assert_equal 'U', Complement.of_dna('A')
  end

  def test_rna_complement
    skip
    assert_equal 'UGCACCAGAAUU', Complement.of_dna('ACGTGGTCTTAA')
  end

  def test_correctly_handles_invalid_input_rna_instead_of_dna
    skip
    assert_equal '', Complement.of_dna('U')
  end

  def test_correctly_handles_completely_invalid_dna_input
    skip
    assert_equal '', Complement.of_dna('XXX')
  end

  def test_correctly_handles_partially_invalid_dna_input
    skip
    assert_equal '', Complement.of_dna('ACGTXXXCTTAA')
  end
... 略 ...
  def test_bookkeeping
    skip
    assert_equal 4, BookKeeping::VERSION
  end
end

実装

# file: rna_transcription.rb
class Complement
  class << self
    def of_dna(rna)
      dna = ''
      rna.split('').each do |r|
        dna << 'G' if r == 'C'
        dna << 'C' if r == 'G'
        dna << 'A' if r == 'T'
        dna << 'U' if r == 'A'
      end
      dna.to_s.size == rna.size ? dna.to_s : ''
    end
  end
end

テスト実行

$ ruby rna_transcription_test.rb 
Run options: --seed 58737

# Running:

.......S.

Finished in 0.001557s, 5781.8396 runs/s, 5139.4130 assertions/s.

9 runs, 8 assertions, 0 failures, 0 errors, 1 skips

You have skipped tests. Run with --verbose for details.

とりあえず, パブリッシュ済み.

メモ

  • DNA とか RNA とか理解出来てないけど, テストを実行すれば, 一応, 動きは解った
  • 別の実装について模索中

今日の AWS ~ コンピューティング ~

EC2

EC2 のライフサイクル

  • ライフサイクル
    • pending
    • running
    • rebooting
    • stopping
    • shutting-down
    • stopped
    • terminated
  • ステータスチェック
    • System Status Check (インフラストラクチャ (H/W, ハイパーバイザ) のチェック)
    • Instance Status Check (OS のチェック)
  • オンデマンドインスタンスの課金
    • running になった時点で課金が発生, stopped 又は terminated になるまで発生

EBS とインスタンスストア

EBS インスタンスストア
データ特性 不揮発性 (永続化) 揮発性
性能 数百 ~ 20,000 IOPS 最大 300,000 IOPS
価格 GB 課金 無料

EC2 には, EBS-backend インスタンスと, Instance store-backend (S3-backend) インスタンスの 2 タイプが存在する. 両者の違いは以下の通り.

  • EBS-backend インスタンスは停止と起動, 再起動, 削除が可能
  • Instance store-backend (S3-backend) インスタンスは再起動と, 削除, 尚, 停止は出来ない

EBS のタイプ

  • General Purepose SSD (gp2)
    • 1GB ~ 16TB
    • 3IOPS/GB のベースパフォーマンス, 最大 10,000IOPS, ベースパフォーマンスが 3,000IOPS 未満の場合, 3,000IOPS までバースト機能
    • 容量課金
    • 一般的な利用 (汎用)
  • Provisioned IOPS SSD (io1)
    • 4GB ~ 16TB
    • 容量あたり 50 IOPS を指定可能, 最大 20,000IOPS (最新だと, 最大 32,000 IOPS)
    • 容量 + 指定した IOPS 課金
    • 10,000 IOPS を超える性能が求められるアプリケーション, データベース等で利用
  • スループット最適化 HDD (st1)
  • コールド HDD (sc1)
  • Magnetic
    • 1GB ~ 1TB
    • 平均 100 IOPS
    • 容量 + 発生した IO 数
    • IO があまり発生せず, コストが重視される構成で利用

Provisioned IOPS SSD で, EBS ディスク性能を高めることが出来るが, 通常の EC2 インスタンスでは, 通常のネットワーク帯域と EBS 用のネットワーク帯域が共有されている為, 十分に性能を引き出すことが出来ないが, EBS 最適化インスタンスを利用することで EBS 専用の帯域が確保される為, EBS の I/O が安定する. Provisioned IOPS SSD では, EBS の高い I/O 性能を活かす為にも, EBS 最適化インスタンスの利用が推奨される. (インスタンスタイプが大きい程, 使える帯域が大きい)

EBS スナップショット

  • 任意のタイミングでスナップショットを作成することが出来る
  • スナップショットは S3 に保存される
  • スナップショットは圧縮され, 差分のデータのみが保存される為, 容量を抑えることが出来る (圧縮後の容量に対して課金される)
  • データの整合性を保つ為にディスク I/O を停止する必要があり, 対象の EBS ボリュームをアンマウントしてからスナップショットを取得することが推奨されている
  • 取得開始時点の EBS ボリューム内のデータをキャプチャして, それ以降の書き込みはキャプチャ対象外
  • 復元はスナップショットの元となったボリュームサイズよりも大きなディスクサイズを指定して復元することが出来る
  • EBS ボリュームは AZ サービスであり, 同一 AZ 内の EC2 のみにアタッチすることが出来る
  • リージョンをまたぎたい場合には, スナップショットを利用して別リージョンにコピーして EBS ボリュームを復元する

プレイスメントグループ

  • 単一の AZ にプレイスメントグループ を作成すると EC2 間のネットワーク接続を高速化することが出来る

Dedicated インスタンス

フムフム.