Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

canvasのサンプル

html5canvasで線を描く。

f:id:KatagiriSo:20170522181810p:plain

<!DOCTYPE html>
<head>
   <title>HTML5 canvas</title>
</head>
<body>
  <div align="center">
     <h1>sample</h1>
   </div>


<div align="center">
   <canvas id="canvas" width="200" height="200" >
      <p>error</p>
   </canvas>
 </div>

   <script>
   var example = document.getElementById('canvas');
   var context = example.getContext('2d');

   var cx = 100
   var cy = 100

   function drawFillRect(cx,cy,w,h) {
     context.fillRect(cx-w/2, cy-h/2, w, h);
   }

   context.fillStyle = "#ff8000";
   drawFillRect(cx,cy,100,100)
   context.fillStyle = "#EEEEEE";
   drawFillRect(cx,cy,40,40)


   context.beginPath();
   context.moveTo(10, 10);
   context.quadraticCurveTo(50, 90, 90, 10);//(seigyo, endpoint)
   context.stroke();


   var sx=30;
   var sy=30;
   var w=50;
   var corner = 40;

function drawRounddedCornerRect(sx,sy,w,corner) {
  context.beginPath();
  context.moveTo(sx+corner, sy);
  // top
  context.lineTo(sx + w,sy);
  context.quadraticCurveTo(sx+w+corner,sy,sx+w+corner,sy+corner);
  // right
  context.lineTo(sx+w+corner,sy+w);
  context.quadraticCurveTo(sx+w+corner,sy+w+corner,sx+w,sy+w+corner);

  //  bottom
  context.lineTo(sx+corner,sy+w+corner);
  context.quadraticCurveTo(sx,sy+w+corner,sx,sy+w);

 // left 
 context.lineTo(sx,sy+corner);
 context.quadraticCurveTo(sx,sy,sx+corner,sy);
  context.stroke();
}

  drawRounddedCornerRect(30,30,50,20)
  drawRounddedCornerRect(100,30,50,30)
  context.fill()


function drawBezier(sx,sy,c1x,c1y,c2x,c2y,ex,ey) {
  context.beginPath();
  context.moveTo(sx, sy);
  context.bezierCurveTo(c1x, c1y, c2x, c2y, ex, ey);
  context.stroke();
}

drawBezier(20,100,50,20,150,150,200,100)

context.beginPath();
context.strokeStyle='#ff0000';
context.arc(120, 80, 70, 0, Math.PI*2, false);
context.stroke();


   </script>

</body>
</html>

円を描く

extension CGRect {
    init(_ center:CGPoint, _ size:CGSize) {
        self.origin = CGPoint(x:center.x - size.width/2, y:center.y - size.height/2)
        self.size = size
    }
}

extension CGPoint {
    init(_ x:CGFloat, _ y:CGFloat) {
        self.x = x
        self.y = y
    }
}

extension CGSize {
    init(_ width:CGFloat, _ height:CGFloat) {
        self.width = width
        self.height = height
    }
}

class RDView:UIView {
    
    func drawCircle(context:CGContext) {
        context.setLineWidth(20)
        context.strokeEllipse(in: CGRect(CGPoint(100,100), CGSize(100,100)))
        context.setFillColor(red: 1.0, green: 1.0, blue: 0.3, alpha: 0.3)
        context.setStrokeColor(red: 1.0, green: 0.3, blue: 0.5, alpha: 0.3)
        context.strokeEllipse(in: CGRect(x: 100, y: 100, width: 100, height: 100))
        context.fillEllipse(in: CGRect(x:120, y:120, width:60, height:60))
    }
    
    override func draw(_ rect: CGRect) {
        // Drawing code
        let p = UIGraphicsGetCurrentContext()
        drawCircle(context: p!)
    }
}

上のextensionは簡便のため。

エレメント

レイアウトにはめ込んで使える。Templete/Elementフォルダにいれておき、

 <?=this->element("hoge") ?>

で読み込める。
値をわたしたければ

 <?=this->element("hoge", ['x'=>10,'y'=>5]) ?>

のように渡す。

色々部品化しておくと良いようだ。

レイアウト

使用するスタイルシートwebroot/css/cake.hello.cssを用意する。

body {
  background: #eee;
  color: #999;
  margin: 10px 8px
}

#header {
  font-size: 18pt;
  font-weight: bold;
  margin: 10px;
}

#content {
  background: #fff;
  color: #999;
  padding: 10px 25px 30px 25px;
  font-size: 14pt;
}

#footer {
  text-align: right;
  font-size: 12pt;
  margin: 10pt;
}

h1 {
  color: #aaa;
  font-size: 24pt;
  margin: 20pt 0pt 50pt 0pt;
}


cssを利用するレイアウトsrc/Template/Layout/hello.ctpファイルを用意する。

<!DOCTYPE html>
<html>
<head>
    <?= $this->Html->charset() ?>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>
        <?= $this->fetch('title') ?>
    </title>
    <?= $this->Html->meta('icon') ?>

    <?= $this->Html->css('cake.hello.css') ?>

    <?= $this->fetch('meta') ?>
    <?= $this->fetch('css') ?>
    <?= $this->fetch('script') ?>
</head>

fetchでコントローラの変数を取ってきている。

<body>

<div id="container">
  <div id="header">header</div>

  <div id="content">
      <?=$this->fetch('content') ?>
  </div>

  <div id="footer">footer</div>

</body>
</html>


ここではcake.hello.cssを読み込んでいるが、javascriptも読み込みたい場合、
webroot/js/cake.hello/jsなどというファイルをつくり

    <?= $this->Html->script('cake.hello.js') ?>

を追加してやれば良い。


コントローラでレイアウトを指定する。

<?php
  namespace App\Controller;

  class HelloController extends AppController {
    public $name = "Hello";
    public $autoRender = true;
    public function index() {
      $this->ViewBuilder()->layout('Hello');
    }
  }
?>

テンプレート

src/Template/Hello/index.ctpを作ってテンプレートを以下のように用意

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta http-equiv="content-type" content="text/html;
  charset=UTF-8">
  <title>Hello Page</title>
</head>

<body>
    <h1>midashi</h1>
    <p> hello hello </p>
</body>
</html>


コントローラ側でautoRenderをtrueにしてテンプレートを読み込む。

<?php
  namespace App\Controller;

  class HelloController extends AppController {
    public $name = "Hello";
    public $autoRender = true;
    public function index() {
      $this->viewBuilder()->autoLayout(false);
    }
  }
?>


自動レイアウト(autoLayout)はなしにした。
テンプレート名を変えればその名前のアクションに適用される。

自動レイアウトを使用する場合はテンプレートは

    <h1>midashi</h1>
    <p> hello hello </p>

のみで良く。コントローラの方は $this->viewBuilder()->autoLayout(false);の行を削る。
これでデフォルトのレイアウト(src/Template/Layout/default.ctp)が適応される。

フォワードとリダイレクト

<?php
  namespace App\Controller;

  class HelloController extends AppController {
    public $name = "Hello";
    public $autoRender = false;
    public function index() {
      echo "hello, world!!";
    }
    public function other() {
      echo "hello, other world!!";
    }

    public function forw() {
      $this->setAction(other);
    }

    public function red() {
      $this->redirect("/hello/other");
    }

  }
?>

フォワードはアクションを指定。サーバ内で閉じる。
リダイレクトはアドレスを指定、ブラウザにページ移動を依頼する。

Hello World

/helloにアクセス

<?php
  namespace App\Controller;

  class HelloController extends AppController {
    public $name = "Hello";
    public $autoRender = false;
    public function index() {
      echo "hello world!!";
    }
  }
?>

/hello/otherにアクセス

<?php
  namespace App\Controller;

  class HelloController extends AppController {
    public $name = "Hello";
    public $autoRender = false;
    public function index() {
      echo "hello, world!!";
    }
    public function other() {
      echo "hello, other world!!";
    }
  }
?>

otherはotherアクションと呼ばれる。

プロトコルMisc

CustomStringConvertible description オブジェクトの文字表示 print
CustomDebugStringConvertible debugDescription オブジェクトの文字表示 debugPrint
LosslessStringConvertible 文字列からそのままオブジェクト構築できる
TextOutputStream  write(_ string: String)
TextOutputStreamable writeの拡張 write(to target: inout Target)
Hashable ハッシュ。ハッシュが違えば違う。ハッシュが同じでもおなじとは限らない。
Comparable 比較
Equatable 同じ
BitwiseOperations ビット計算できる
AnyObject 任意のオブジェクト
Error エラー
OptionSet ビットでつかっている。SetAlgebra, RawRepresentable。使うと便利かも?



AnyHashable構造体

任意のHashableなものなら受け入れる引数等を作りたいときにつかう。いわゆるtype-erased。

標準入力から一行受け取る。trueはその一行は標準入力から切り出すかを示す。

public func readLine(strippingNewline: Bool = default) -> String?

コマンドライン

public enum CommandLine {
    public static var argc: Int32 { get }
// argvの値
    public static var unsafeArgv: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?> { get }
// swift用に変換される?のか?
    public static var arguments: [String]
}

Unmanaged構造体

自分でメモリ管理するもの

強参照のチェック

isKnownUniquelyReferenced
一個だけから強参照されているかを見る。weakに複数参照されていてもOK。
blog.stablekernel.com

Tensorflowの画像認識のチュートリアル

キータにも書いたが、自分のメモとしてTensorflowの画像認識のチュートリアルのサンプルに結果表示をいれたものをメモしておきたい。
コードの説明はコメントの形で埋め込んだ。

qiita.com


#coding:UTF-8
# rdtensorflowsample.swift
# KatagiriSo

import input_data
import numpy as np
import matplotlib.pyplot as plt
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

import tensorflow as tf


## 画像は28*28ピクセル = 784ピクセル
## この画像から0,...,9という番号を判断したい。
Pixels = 28*28
Pattern = 10
LearningRate = 0.01



# 入力変数定義 float32型で、(None, 784)の2階のテンソルを作る。
with tf.name_scope("input"):
    x = tf.placeholder(tf.float32, [None, Pixels],name="input")

with tf.name_scope("Weight"):
    # 重み 初期値ゼロで(784,10)の2階のテンソルを作る。
    W = tf.Variable(tf.zeros([Pixels, Pattern]), name="weights")
    # バイアス 初期値0で(10)の1階のテンソルをつくる
    b = tf.Variable(tf.zeros([Pattern]), name="bias")

with tf.name_scope("Output"):
    # ソフトマックス活性化関数
    y = tf.nn.softmax(tf.matmul(x, W) + b, name="softmax")

with tf.name_scope("optimizer"):
    # 正解
    right_answer = tf.placeholder(tf.float32, [None, Pattern], name="answer")
    # 交差エントロピーの定義
    cross_entropy = -tf.reduce_sum(right_answer*tf.log(y), name="loss")

    # 勾配降下法で重みを調整する
    # 学習比率 0.01
    optimaizerNode = tf.train.GradientDescentOptimizer(LearningRate).minimize(cross_entropy)
    #optimaizerNode = tf.train.AdamOptimizer().minimize(cross_entropy)




## 結果表示 ##

with tf.name_scope("result"):
    # それぞれの分布から最も確率の高いもの同士を見比べ同じであるかを調べる。
    correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(right_answer,1))

    # 正答率を計算する。
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"), name="accuracy")


# グラフ表示用
tf.scalar_summary("entropy", cross_entropy)
tf.scalar_summary("accuracy", accuracy)
tf.histogram_summary("weights", W)
summary_op = tf.merge_all_summaries()



#初期化
init = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init)

summary_writer = tf.train.SummaryWriter('data',sess.graph)


# 学習中
for i in range(1000):
    # データを取得 1回で100個のデータ(バッチ)を持ってくる
    batch_images, batch_answers = mnist.train.next_batch(100)
    # ステップを実行 placeholderであるx,right_anserにデータを入れてoptimaizerNodeを実行する。
    sess.run(optimaizerNode, feed_dict={x: batch_images, right_answer: batch_answers})

    # 100回に一度現状の重みでの交差エントロピーを計算しグラフ表示用に追加する。
    if i % 100 == 0:
        loss = sess.run(cross_entropy, feed_dict={x: batch_images, right_answer: batch_answers})
        acc = sess.run(accuracy, feed_dict={x: batch_images, right_answer: batch_answers})
        print("交差エントロピー%f, 精度 %f" % (loss, acc))


        summary_str = sess.run(summary_op, feed_dict={x: batch_images, right_answer: batch_answers})
        summary_writer.add_summary(summary_str, i)



# 精度表示
result = sess.run(accuracy, feed_dict={x: mnist.test.images, right_answer: mnist.test.labels})

print("最終結果 精度 %f" % result)

# 重み
w_val = sess.run(W)
b_val = sess.run(b)

#print("重み")
#print(w_val[40])
#print("バイアス")
#print(b_val)

fig = plt.figure(figsize=(8,6))

for c,(image, ans) in enumerate(zip(mnist.test.images, mnist.test.labels)):
#image = mnist.test.images[0]
#ans = mnist.test.labels[0]
    if c > 20-1:
        break

    subplot = fig.add_subplot(4,5,c+1)
    subplot.set_xticks([])
    subplot.set_yticks([])
    # 28*28 濃淡0から1, グレースケール、ピクセルのデータ補完を無効化
    subplot.imshow(image.reshape(28,28), vmin=0,vmax=1, cmap=plt.cm.gray_r, interpolation="nearest")

    # 今の重みで計算してみる
    y_val = (sess.run(tf.argmax(y,1), feed_dict={x:[image]}))[0]
    ans_val = (sess.run(tf.argmax(right_answer,1), feed_dict={right_answer:[ans]}))[0]

    #print(y_val)
    title = "pred %d ans %d" % (y_val, ans_val)
    subplot.set_title(title)


plt.show()

また、機械学習の初歩の理論的な説明を書いてみたものはこちら
https://www.researchgate.net/publication/313842779_jixiexuexinochubunoshaojie

デバイスごとのUI調整

途中にUIViewを挟んでそのUIViewのアスペクト比を決め、左右などを固定することで、そのUIViewに隣接する形でビューを拘束配置していけば画面の大きさが変わった際の調節ができる。

単語

inherently  生得的に、本質的に
verbose 冗長な

sibling 兄弟(男女別のない)
ancestor 先祖
descendant 子孫

trail 通った跡、痕跡
trailing end 終端

追加 2017.06.12

indispensable 絶対必要な
Anatomy 解剖学、詳細な分析
Hands on 実践的
fly by の近くをかすめて飛びすぎる
revamp 改革する、改造する、修理する
delightful 大きな喜び、快適
instinctively 直感的、本能的
Immersive 没入型
engulf 吸い込む、飲み込む、圧倒する
Strive 努力する、励む、戦う、抗争する
riveting ワクワクする
stunning 気絶させる、ぼうっとさせる
Shelf 棚、岩棚、浅瀬
effortlessly 楽々と
Differentiate 区別する、識別する
inadvertent 意図しない、うかつな、偶然の
intentional  故意の、もくろんだ
thumb 親指
appreciate 高く評価する、良さがわかる
aid 助ける、援助する、手伝う
Where appropriate 適切な場合は、必要に応じて
expectation 期待、予期
friction あつれき
afar はるかに、遠くに
bunch ふさ、たば、群れ、仲間


Unconditionally 無条件に
stalling 行き詰まった
stall 畜舎に入れておく、区画、行き詰まる、失速する、屋台
beneath の下に、真下に、を受けて、に値しない

ephemeral つかの間の
participate 参加する、あずかる、関係する、幾分..の性質を持っている
fluent 流れる、流ちょうな、

追加 環境系

intricate 入り組んだ、複雑な
ubiquity 至る所にある。遍在する。
range 変動する、並ぶ、広がっている、分布する、歩き回る、幅、距離、範囲
generically 一般的に
allegedly 伝えられるところによると、申立によると、言われていることによると
abuse 誤用、乱用、悪用、虐待
distressing 悲惨な、苦悩に満ちた、悩ませる
tether ロープでつなぐ、束縛する、拘束する、限界
treat 扱う、処理する、治療する、捉える
punish 罰する、懲らしめる、不当に取り扱う
hug 抱きしめる、抱擁する
stranger 見知らぬ人、よそ者、他人
as for に関しては、
prevent 防ぐ、阻む、阻止する
serve 仕える、勤める、勤務する、供給する、役立つ
poke 突っつく、だらだら進む、探し回る、突き出る、邪魔する
What's more さらに重要なことに、その上、さらに良いことに
industrious 勤勉な、熱心な、よく働く
counterpart 片割れ、対応部分、法律の写し
oxen oxの複数形、oxは雄牛(役牛用の)
plow 耕作する、苦労して読み進む、すきで耕す
field 野原、田畑、フィールド、領域、場、視野
herd 動物を集める、連れて行く、世話する、群れ、群衆
livestock 家畜
rottweiler ロットワイラー
guard 用心する、警戒する、保護する
sniff 匂いを嗅ぐ、嗅ぎつける、鼻であしらう、クンクンとする
Archaeologist 考古学者
baboon ヒヒ
nut 木の実、ナッツ、ナット、変わり者
nuts ばかめ、糞食らえ、ちぇっ
nutshell 簡潔にのべる、ナッツの殻、小さな容器
skeptical 懐疑的、疑わしい、疑う
allegation 申し立て、主張、疑惑、陳述
emeritus 名誉教授、名誉退職の
anthropology 人類学
cruelty 残酷さ、残虐行為
cruel 残酷な、酷い、無慈悲な、厳しい、つらい、悲惨な
household 家族、家庭、世帯、家族の
degree 度合い、過程、段階、ステップ、学位、度、親等、次数
trained 訓練を受けた、熟練した、研鑽を積んだ
train トレーニングする、訓練する、列車で行く
fed feedの過去形、餌を食べる、送り込まれる、供給する、飼う、餌を与える、送り込む
ride 乗馬する、乗りこなす、乗る、
mistreatment 虐待、酷使、治療ミス
mistreat 虐待する
folded 折られた、折りたたまれた
fatal 致命的な結果、命に関わる、運命を決する、決定的な
instability 不安定な性質、変わりやすさ、不安定
contraction 縮小、収縮
deepen 深まる、深くする、濃くする


Ostrogradski theorem

追加 ニュース系

astoundingly 仰天させるように、どえらく
gist 要点、要旨
addictive 常習性、習慣性の、夢中にさせる
hex まじない、ジンクス、魔女、
meditative 瞑想的な、沈思黙考する
drip down ぽたぽた落ちる
bequeath 遺言で譲る、後世に残す
extraordinary 異常な、突飛な、並外れた、臨時の
axis 軸、中心線、枢軸
recipient 受取人、受領者
deceased 死去した、故人
postage 郵便料金
glimpse 一見、ちらりと見ること、それとなく感づくこと
uncensored 無検閲、検閲で修正されていない
virtually 事実上、ほとんど
interdisciplinary 多分野にまたがる、学際的な
transcription 筆写、書き換え、写本、編曲、録音
reveal 人に漏らす、本性を現す、明らかにする、あらわにする、啓示する




oceanic 大洋の
coast 海岸、沿岸、そりなどの滑走
verdict 評決
transnational 国家を越えた、多国籍の
criminal 犯罪の、犯罪的な
involved 入り組んだ、複雑な、関係のある、巻き込まれて、熱中して
fishery 漁業
crime 犯罪、罪
court 裁判所、裁判官、宮廷、謁見式
convict 有罪と宣告する
vessel 容器、船、導管
illegal 不法の
sentence 文章、判決、宣告する
jail 刑務所
charge 請求する、告発する、非難する、のせいにする
recklessness 無軌道、がむしゃら、無謀
forgery 偽造、贋造
pollution 汚染、汚染による公害
judicial 司法の、裁判の、公正な



poach 密猟する、侵入する、荒らす
arrest 逮捕する、阻む、注意をひく
agency 代理店、仲介、働き、政府機関
track 轍、航跡、踏み鳴らした道、鉄道線路、人生の行路、競争路
finale 終楽章、大詰め、終局
Antarctica 南極大陸
Gulf 湾、入り江、大きな隔たり
sank sinkの過去形、沈没する、くぼむ
presumably 思うに、多分
intentionally 故意に

unregulated 未制御の
offence 違反、軽微な犯罪、立腹、不愉快、攻撃
gathering 非公式の集まり、できもの
fraud 詐欺、欺瞞
corruption 堕落、改悪
evasion 回避、言抜け
prosecute 起訴する、遂行する
secrecy 内密の
high sea 公海、外洋
threaten 脅す、束縛する、恐れがある、脅かす


consequence 結果、成り行き、結論、影響の重大性
sustainable 支持できる、持続できる
coastal 沿岸の
labour 労働力、仕事、労働者
lure 誘惑する、魅力、ルアー
green issue 環境問題
curb 縁石、へり、くつわ鎖、抑制、拘束
regulatory 規定、取り締まる、調節する
judiciary 司法部、司法組織、裁判官
custom 慣習、習慣、お引き立て、顧客、注文の、税関の


tax 税金、無理仕事、課税する、重い負担をかける、非難する
port 港、港町、蒸気口、砲門(Porta 門から)、左舷、ふるまい(PORTAGEから)
authority 権威、許可、官憲、大家、出典
paramount 最高の、主要な、
threat 脅し、脅迫、恐れ
Regional 地域の、局部的な
cooperation 協力、協調性
reinforce 補強する、強化する
appropriately 適切に、ふさわしく
fund 資金、基金、財源、公債、薀蓄
ongoing 進行中の
investigation 取り調べ、調査、研究
urgent 切迫した、緊急の、強要する
commitment 委託する、委任する、引き渡し、約束、献身
seriousness まじめなこと、重大さ
regulation 取り締まり、規制、加減、調節、規則、条例
legislation 立法、法律
deter おじけづかせて止めさせる、妨げる
consumer 消費者
reward 報酬、報い、値する

追加 人文系

immanence 内在
commitment 傾倒、深い関与、言質、契約
address 対処する、 取り組む、注意や努力を向ける、呼びかける、
integrate 差別がなくなる、まとめる、結合する、積分する、組入れる、統合する
conjunction 結合、共同、出来事の同時発生、連言
coordination 調整、一致、対等、配位、協調
Continental 大陸人、ヨーロッパ本土、大陸の
valorisation 物価安定策、物事の価値決め
embodiment 具現化、具象化、化身
transcendent 並外れた、超越
depiction 描写、表現、叙述
discourse 講演、会談、会話、話法
exemplified 例示された
Opacity 不透明

追加 IT系

pursue 追跡する、つきまとう、遂行する、追求する
precept 教訓、訓示、勧告
compel 強いる
annotation 記注、注釈
capitalization 資本化、投資、現金化、資本金、大文字使用
trait 特徴、特性、遺伝の形質、筆運び、わずかな痕跡(気配)
invoke 思い起こさせる、呼び出す、プログラムを起動する、行使する、祈る
leading 指導、指揮、誘導する、第1級の、先頭の、 行間(鉛をいみするleadより)、行送り
oblique ななめになる、傾いた
certification 照明、検定、認可、証明書
prospect 見通し
declares 宣言する、布告する、公表する
conformance 企画適合性、適合
Inspect 調査、検査、視察
buffet
prompt
bring up
delimit
teeth
shiny
wipe
humiliating
privileges
arguably 間違いなく
Notably とりわけ、明白に
plausible もっともらしい、まことしやかな
Integrity 高潔、誠実、完全な状態、無傷


religious 宗教的な、信仰の、敬虔な
embrace 抱き合う、抱擁する、包囲する、進んで活用する、受け入れる

追加 ブログ

evicts 立ち退かせる、追い立てる
overshadowed 影にする、覆う
contrive 考案する、工夫する。悪事を企む、首尾よく何々する
overlook 見晴らす、見渡す、大目にみる、見落とす、監督する
wart いぼ、木のこぶ
inexplicable 不可解な
caveat 手続き差し止め通告、警告
mess 混乱、散らかっていること、乱雑にする、台無しにする、会食する(元々食卓に置かれる食べ物の意味)
encompass 取り囲む、包含する、悪い結果をもたらす
eclipse 月や太陽の食、名声の薄らぎ、光を奪う、暗い影を落とす(ギリシャ語の姿を消すことの意味)
eviction 追い立て
so far so good 今のところ順調
guarantee 保証、約束する
detrimental 有害な、
readily 快く、容易に
go through 通過する、うわさや病気はひろまる、苦難を経験する、くまなく調べる、詳細に見直す、儀式などを行うまたは参加する、法案が承認される、使い潰す、版を重ねる
incorporate 合体させる、合併する、法人組織にする、加入させる、考えを具体化する、考えを組み入れる、取り入れる
inadequate 不十分な、不適切で
curious ものを知りたがる、好奇心の強い、不思議な
reliably 頼もしく、確実に
unveil ベールをとる、明かす
deficit 不足、赤字