[GCP] どんな機能があるのか?

1.コンピュート
Compute Engine, Container Engine, App engine
2.ストレージ
Cloud Storage, Cloud SQL, Cloud Bigtable, Cloud Datastore
3.ネットワーキング
Cloud Virtual Network, Cloud Load Balancing, Cloud CDN, Cloud DNS
4.ビックデータ
BiQuery, Cloud Dataflow, Cloud Dataproc, Cloud Pub/Sub
5.IoT
Cloud IoT Core
6.機械学習
Cloud Vision API, Cloud Translation API, Cloud Speech API, Cloud Machine Learning
7.管理ツール
Cloud Console, Cloud Shell, Stackdriver, Cloud IAM

プロジェクト単位で開発する

### リージョン
GCPのデータセンターが存在
リージョンの中に複数のゾーンが存在

全てのリージョンにまたがって、単一のサブネットが構成される

なんとなくイメージはつくが、まずはCompute Engineを動かしたい

[CentOS8] PHP8インストールしよう

$ cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
$ php -v
-bash: php: command not found
$ sudo yum update

$ sudo yum install epel-release
$ sudo yum update epel-release
$ sudo rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-8.rpm
$ sudo rpm –import http://rpms.remirepo.net/RPM-GPG-KEY-remi

$ export LC_ALL=C
$ printenv | grep LC
$ sudo yum config-manager –set-enabled remi

$ sudo yum module reset php
$ sudo yum module install php:remi-8.0

$ sudo yum install php php-devel php-pdo php-mysqlnd php-mbstring php-gd

$ php -v
PHP 8.0.3 (cli) (built: Mar 2 2021 16:37:06) ( NTS gcc x86_64 )

ヒョエエええええええ

[SpringBoot2.4.3] よく使われるannotation

@Controller
画面遷移用のコントローラーに付与

@RestController
リクエストを受け付けるコントローラークラス

@RequestMapping(“path”)
マッピングするURLの接頭辞を設定

@GetMapping(“path”)
GETメソッドを受け取るメソッド

@PostMapping(“path”)
POSTメソッドを受け取る為のメソッドに付与

@Service
サービスクラス

@ComponentScan
特定のアノテーションが付与されたクラスのBeanをDIに登録

@Bean
DIコンテナに管理させたいBeanを生成するメソッドに付与

@Data
コンパイル時に、setter, getter, toString, equals, hashCodeなどのメソッド生成

@Autowired
特定のアノテーションを付与したクラスのインスタンスを使用できるようにする

@ModelAttribute
返り値は自動的にmodelに追加

@Validated
Bean Validationアノテーションが評価され、結果がBindingResultに格納

@PathVariable
Rest形式のパラメータを受け取る

@RequestParam
リクエストパラメータを受け取る

@Entity
JPAエンティティ

@Table(name=”table name”)
エンティティに対応するテーブル名を指定

@GeneratedValue
auto increment

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator=”シーケンス名”)
SEQ_IDで自動採番

@Transactional
クラス内に付与するとDBのトランザクション制御

@AllArgsConstructor
全フィールドを引数にもつコンストラクタ生成

@NoArgsConstructor
引数がないコンストラクタ

@Column
カラムに名前や制約を設定

@Query(“JPQL”)
データへのアクセスを自作する際に使用

@NotNull, @NotEmpty, @NotBlank, @Size(min=,max), @Email, @AssertTrue, @AssertFalse, @Pattern, @DateTimeFormat

@SpringBootApplication
Spring Bootの様々な設定を自動的に有効にする

@EnableAutoConfiguration
Spring Bootの様々な設定を自動的に有効にする

@Configuration
JavaConfig用のクラスであることを示す

@Qualifier(“Bean name”)
同じ型のBeanがDIコンテナに複数登録されている場合に適用する

アノテーションをきちんと理解しないと、SpringBootは使いこなせんな。

画像ファイルのアップロード

基本

<form action="#" method="POST" enctype="multipart/form-data">
	  <input type="file" name="file"><br><br>
	  <input type="submit" value="upload">
	</form>

bootstrap

<form action="#" method="POST" enctype="multipart/form-data">
	  <div class="form-group">
	    <label for="inputFile">File input</label>
	    <div class="custom-file">
	    <input type="file" class="custom-file-input" id="inputFile">
	    <label  class="custom-file-label" for="inputFile" data-browse="参照">ファイル選択</label>
		</div>
	  </div>
	  <br>
	  <button type="submit" class="btn btn-primary">Submit</button>
	</form>
</div>
	<script src="https://cdn.jsdelivr.net/npm/bs-custom-file-input/dist/bs-custom-file-input.js"></script>
	<script>
		bsCustomFileInput.init();
	</script>

画像変更

	<form action="#" method="POST" enctype="multipart/form-data">
	 <img src="https://placehold.jp/200x150.png" class="img-icon">
	 <div class="preview"></div><br>
	  <div class="form-group">
	    <label for="inputFile">File input</label>
	    <div class="custom-file">
	    <input type="file" class="custom-file-input" id="inputFile" name="file1">
	    <label  class="custom-file-label" for="inputFile" data-browse="参照">ファイル選択</label>
		</div>
	  </div>
	  <br>
	  <button type="submit" class="btn btn-primary">Submit</button>
	</form>
</div>
	<script src="https://cdn.jsdelivr.net/npm/bs-custom-file-input/dist/bs-custom-file-input.js"></script>
	<script
  src="https://code.jquery.com/jquery-3.5.1.js"
  integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc="
  crossorigin="anonymous"></script>
	<script>
		bsCustomFileInput.init();

		$(function(){
	  		$('form').on('change', 'input[name="file1"]', function(e) {
			    var file = e.target.files[0],
			        reader = new FileReader(),
			        $preview = $(".preview");
			        t = this;
		    if(file.type.indexOf("image") < 0){
		      return false;
		    }
		    document.getElementsByClassName("img-icon")[0].style.display = "none";
		    reader.onload = (function(file) {
		      return function(e) {
		        $preview.empty();
		        $preview.append($('<img>').attr({
		                  src: e.target.result,
		                  width: "250px",
		                  height: "200px",
		                  class: "preview",
		                  title: file.name
		              }));
		      };
	    	})(file);
		    reader.readAsDataURL(file);
		  });
		});
	</script>

object-fit: containにしておきます。

OK^^

[Xd] Adobe Xdを始めよう

とりあえずmacにインストールしました。

とりあえずGetting Started のVideoに沿ってやるか。

とりあえず新規作成画面

なるほど、Cacooみたいなこともできるのね。
1920 x 1080だとちょっとWFとしては描きにくいから、カスタムサイズか。
チュートリアルだけだとモチベーションのフォーカスが難しいから、次実際にワイヤー描く時になったらXdでやってみるか。

OK、悪くない。

[Arduino]温度センサー

mde
#include < OneWire.h >
int inPin=10;
OneWire ds(inPin);

void setup() {
  Serial.begin(9600);
}

void loop() {
  int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];

  if(!ds.search(addr)){
    ds.reset_search();
    return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);

  delay(1000);

  present = ds.reset();
  ds.select(addr);
  ds.write(0xBE);

  for(i=0; i<9; i++){
    data[i] = ds.read();
  }
  Serial.print("Temprerature:");
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  SignBit = TReading & 0x8000;
  if(SignBit){
    TReading = (TReading ^ 0xffff) + 1;
  }
  Tc_100 = (6 * TReading) + TReading / 4;
  Whole = Tc_100 / 100;
  Fract = Tc_100 % 100;
  if(SignBit){
    Serial.print("-");
  }
  Serial.print(Whole);
  Serial.print(".");
  if(Fract < 10){
    Serial.print("0");
  }
  Serial.print(Fract);
  Serial.print(" C\n");

}

頭で分かっていても、実際に手を動かしてみることが大事

マイコンモジュールArduino Uno

Arduino Unoを購入、入出力端子が少なく、Raspberry Piより安価

dav

マイコンチップ:ATmega328P
動作電圧:5V
入力電圧:7~12V (DCジャックもしくはVIN端子から入力)
デジタルI/Oピン:14本(うち6本はPWM出力可能)
アナログ入力ピン:6本(デジタルI/Oピンとしても利用可能)
DC出力電流:1つのI/Oピン当り20mA程度、I/Oピン全部の合計100mAまで
DC出力電流:3.3V出力ピン 50mA
Flashメモリ:32KB (うち0.5KBをブートローダーで使用)
SRAM:2KB
EEPROM:1KB
クロックスピード:16MHz

– Arduino Create(Arduinoのクラウド開発環境)を使うことができる
– センサー技術を組み合わせると色々できる

まずは初心者用のキットを動かすことから始めるのが王道か
手を広げすぎると、キャパオーバーになるから出来るところからやりた

板倉聖宣訳:磁石(および電気)論

ウィリアム・ギルバート原著(コルチェスター出身、ロンドンの医師):doctrina nostra & scientia magnetica

– アリストテレス、テオフラストス、プトレマイオス、ヒッポクラテス、ガレノスには敬意を払うべき
– 書物からの推論を採用せずに、実験をするべきである

### 磁石
magnes lapis(マグネスの石)が鉄の鉱脈の中に発見された
鉄の力強い吸引力が研究された
磁気の南北に向く運動が発見されていた
パラケルススは「天界には磁石の能力を付与された星がある」と断言していた
ナポリ王国の船乗りたちは方位針を使っていた
位置の変化による磁気偏角の違いなどから、特殊の星による影響とする考えを否定した
磁石はその性質の顕著な極[polos]を有する
磁石にも二つの極を持っており、極に近いほど強い力を得る
回転針によって磁極を確認した
磁石は自然な位置関係にあるときは引っ張るが、逆の位置関係にあるときは退ける
N極とS極は互いに誘う
ギリシア人は琥珀のことをエレクトロンと呼んでいた

実験が大事というのはプログラミングにも通じるところがあるように思います。

デジカメの記録メディア

デジカメで画像を記録する部分をメディア(メモリーカード)という
記録メディアにはSDカード、コンパクトフラッシュ、xDピクチャーカード、メモリースティックなどがある
デジカメの機種によってどのメディアを使うか決まっている

### SDメモリーカード
サンディスク、松下、東芝が開発
32GB
Class 2 :読み書き時のデータ転送速度が最低 2MB/ 秒
Class 4 :読み書き時のデータ転送速度が最低 4MB/ 秒
Class 6 :読み書き時のデータ転送速度が最低 6MB/ 秒

### コンパクトフラッシュ
サンディスク提唱
コントローラーICとフラッシュメモリICを実装

### xDピクチャーカード
オリンパス、富士フイルム、東芝が共同開発

### メモリースティック
ソニー開発

HDD、メモリー系は東芝強いな〜
san disk

しかし、今はクラウドの時代なのに、未だにメモリーカードに保存している意味がわからんな。

デジカメのレンズの仕組み

レンズとは?
-> 光を屈折させるガラスやプラスチックで作られた薄い部品
-> レンズそのものだけでなく、ピント調整や光の量を調整する部品も合わせたレンズシステム全体を指すことが多い
-> 光の通り方をコンピュータで計算し、最適な像ができるよう設計している
-> ピント合わせはレンズの全部または一部を前後させる
-> ヘリコイド、カムなどがある
-> レンズにはフィルムやセンサーに届く光の量を調節する仕組みもあり、「しぼり」という
-> 凹レンズは近視、凸レンズは遠視。凸凹レンズは通常組み合わせる

レンズの材質、大きさ、厚み、曲面の具合、レンズの組み合わせなどによって、レンズを通過する光はさまざまに変化する

### オートフォーカス
– 距離を測るには三角測量という方法が使われる。これは、一つの辺の長さと二つの頂点の角度が決まれば、三角形が定まる、という原理に基づく
– ファインダーから被写体を覗き、カメラの中にある小さな鏡をAが映るように回転させる
– デジカメでは、コントラスト検出方式というピント合わせ技術が用いられる
  センサに写る像を調べながらレンズを前後に動かし、最もコントラストが高くなる位置にレンズを止める仕組み
  多くのデジカメでは、ピントを調べる場所をいくつも用意して、ピントの合い方を計算して調整している
– 位相差検出式のオートフォーカスも一般的

### しぼりとシャッター
– 完全に開いてから完全に閉じるまでの露出時間をシャッタースピードという
– しぼりは感光材料に一度に当たる光の量を調整する仕組み

### レンズ
– センサーサイズや構造により焦点距離やレンズが異なる

### 材質
プリズムやハーフミラーなど光を透過させる光学ガラス、ミラーに使われる基板ガラス、屈折率や波長分散が細分化されるレンズ用ガラスに分けられる
アクロマティックレンズは屈折率の波長分散の小さいガラスと波長分散の大きいガラスを組み合わせることで、色収差を補正している

レンズ設計 例

焦点距離:200mm
イメージサークル:φ43.2(像高21.6mm)
Fナンバー:5.6
レンズ全長(第1面~像面):180mm以下
レンズ枚数:4枚以下
バックフォーカス:45mm以上

F値は小さいほどボケを活かした撮影が得意

### レンズの種類
(1)ズームレンズ
 ズームできる範囲によってレンズの種類が分かれている
(2)単焦点レンズ
 撮れる距離が決まっている
 美しいボケ味を出したり暗い場所が得意

### 写す範囲
焦点距離によって「広角レンズ(35mm以下)」「標準レンズ(50mm前後)」「望遠レンズ(200mm以上)」に分類できる
「○○mm」の数字が大きいほど被写体に近づいたようになる
「18-55mm」など二つの数字が書いてあるのがズームレンズ

被写体との距離が決まっているシステムの場合は、その焦点距離に合わせたレンズを設計すれば良さそうですね。
CVで、ジェスチャ認識など被写体が動く想定の場合は、精度を上げるには被写体が動くから、ピントを合わせる必要がある。
んん、ちょっと待てよ。
イメージセンサーで光電変換を行ってるわけだけど、凹レンズの制御は自動でできるってこと?

あれ、こう考えると、画像処理のアルゴリズムだけでなく、レンズの設計の問題も出てくる??