OmniAICreator/Qiita-1.07M huggingface dataset:
Shiny で SEIR モデルを表示する

こちらにあるSEIR モデルを Shiny で表示してみました。
[感染症数理モデル；Sequential SEIR model](https://biostat-hokudai.jp/seirmodel/)

>プログラムはこちらです。
[SEIR.zip](https://biostat-hokudai.jp/download/1545/)

Ubuntu 20.04 で確認しました。

R がインストールしてある状況で、
1) ライブラリーのインストール

```bash
sudo apt install r-cran-desolve
```

2) Shiny-Server のインストール

こちらの記事を参考にしました。
[【R】Shiny-Serverのインストール](https://qiita.com/qyuser/items/e8b676871056d46d04ef)
[Download Shiny Server for Ubuntu 16.04 or later](https://rstudio.com/products/shiny/download-server/ubuntu/)

Shiny-Server が動いていることの確認

>```bash
sudo systemctl status shiny-server
```

http://localhost:3838/ にアクセス
![shiny_aug25_aa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/261cffd4-5ced-5efb-0c18-e6e52565cdef.png)

http://localhost:3838/sample-apps/hello/ にアクセス
![shiny_aug25_bb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/adadd643-8bad-1d02-2e41-a488b45c42ce.png)


Shiny-Server の設定ファイル

```text:/etc/shiny-server/shiny-server.conf
# Instruct Shiny Server to run applications as the user "shiny"
run_as shiny;

# Define a server that listens on port 3838
server {
  listen 3838;

  # Define a location at the base URL
  location / {

    # Host the directory of Shiny Apps stored in this directory
    site_dir /srv/shiny-server;

    # Log all Shiny output to files in this directory
    log_dir /var/log/shiny-server;

    # When a user visits the base URL rather than a particular application,
    # an index of the applications available in this directory will be shown.
    directory_index on;
  }
}
```

3) /opt/shiny-server/samples/sample-apps に SEIR.zip を解凍して置く

```text
$ tree sample-apps/
sample-apps/
├── SEIR
│   ├── server.R
│   └── ui.R
├── hello
│   ├── server.R
│   └── ui.R
└── rmd
    └── index.Rmd
```

4) http://localhost:3838/sample-apps/SEIR/ にアクセスして、Submit ボタンをクリック
![seir_aug25_cc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/ebb91f39-6b30-ecf0-7173-0e27395aa8c5.png)
クッキー、セッション、キャッシュを簡単にまとめ


## クッキー

・「誰が？」の情報を取得し、保存してる。

・passwordやuser_idなどがあるためセキュリティ上危険。そのためセッションにより安全に情報を保持する。

・保存場所は、自分のPC（主にブラウザ）

・クッキーは無効にできる。


## セッション

・「何をしたか？」という情報を取得し、保存してる。

・クッキーと連動して生成されてることが多い。

・保存場所はブラウザだけでなく、サーバーにも情報が保存されてるから、追える。

・セッションは無効にできない。


## キャッシュ

・よく使うデータへのアクセスを速くするために、より高速な記憶装置に一時的に保存する仕組み。

・高速化のための情報を保存してる。 


## ３つの違い

キャッシュとクッキーおよびセッションとの大きな違いは、
キャッシュが表示の高速化のために情報を保存しているのに対して、
クッキーやセッションはユーザーの情報を保存していること。
Rails6系×PostgreSQLでRSpecの実行環境を作成する

RSpecが使用出来るように、railsアプリケーションを新規で作成し、gem rails-rspecを導入したときの備忘録です。

## 実行環境
- Rails 6.0.3.2
- postgres (PostgreSQL) 12.4
- rspec-rails 4.0.1

## 手順
### ① rails newでrailsアプリケーションを新規作成
```
$ rails new アプリケーション名 -d データベース名 -T
```

- -dオプションで、データベースの種類を指定出来ます。デフォルトはsqlite3です。今回はpostgresqlを使用したため-d postgresqlと指定。
- -Tオプションで、test::unitを組み込まないようにスキップする事が出来ます。今回はRSpecの実行環境を作成したかったので、railsのフレームワークでデフォルトで提供しているminitestの設定はスキップします。

### ②今回作成したアプリケーションのディレクトリに移動
```
$ cd アプリケーション名
```

### ③ DBを作成
```
$ rails db:create
```

### ④ Gemfileの以下のグループに最新の安定版のrspec-railsを追加し、gemをインストール

```ruby:Gemfile
group :development, :test do
  gem 'rspec-rails', '~> 4.0.1'
end
```

```
$ bundle
```

###⑤generateコマンドでRSpecに必要なディレクトリや設定ファイルを作成
```
$ rails g rspec:install
```

以上の手順で簡単にRSpecの実行環境が作成出来ます！

## 注意事項
手順③で以下のエラーメッセージが出るかと思いますが、これはpostgresが起動していないためですので、起動させるコマンドを実行すれば解決します！

エラーメッセージ
`connections on Unix domain socket “/tmp/.s.PGSQL.5432”?`

postgresの起動コマンド

```
$ postgres -D /usr/local/var/postgres
```

postgresコマンドがnot foundとなる場合は、brewでpostgresを入れられていない事が考えられるので、その場合はbrew install postgresqlでインストールしてください。brewにpostgresが入っているかは以下のコマンドで確認する事が出来ます。

brewの中身を一覧で確認するコマンド

```
$ brew list
```

また、上記のpostgresの起動コマンドが動かない場合、postgresのコマンド実行ファイルが存在するかを確認してみると良いです。

コマンド実行ファイルの格納場所(今回の場合postgres）を確認するコマンド

```
$ which postgres
```

自分の場合はpostgresが以下のパスに存在していて、問題なく動きました！
`/usr/local/bin/postgres`

##参考文献
- [Railsドキュメント](https://railsdoc.com/page/rails_new)
- [rspec/rspec-rails](https://github.com/rspec/rspec-rails)
- Ruby on Rails5速習実践ガイド（書籍）
- [PATHを通すとは？ (Mac OS X)](https://qiita.com/soarflat/items/09be6ab9cd91d366bf71)
xdebugによってvar_dumpはどのように変わるか

# やりたいこと
xdebugをインストールしてからvar_dumpの表示が変わった。
具体的にどのように変わるのか確認してみた。

# 環境(今回の作業に関連ないものも記載)
* MacBookPro(macOSCatalina10.15.5)
* PHPStorm2020.2
* docker desktop2.2.0.3
* cakephp4.1.2
* xdebug2.9.6

# 実装
```test.php
$test = ['a' => 'apple', 'b' => 'bed', 'c' => ['cat', 'cookie']];
var_dump($test);
```

## xdebugが設定されていない場合のブラウザ表示
全て１行で表示される。見辛い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691945/fe73c09f-a48f-a0d1-1ae7-1b7fd41a17e1.png)

## xdebugが設定されている場合のブラウザ表示
* var_dumpの記述ファイル、行が表示される
* 自動で改行されている
* valueに色がついている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691945/f29db27e-fd3b-4480-c465-0417ccef7c03.png)

## 補足
xdebugをアンインストールするのは面倒くさかったので、以下を設定して確認した。

```Docker/php/php.ini
xdebug.overload_var_dump = 0
```

# 所感
xdebugを設定して見た方が効率上がりそう。

# 参考
マニュアルの設定を見ると他にも色々できそう。
https://xdebug.org/docs/all_settings
PythonでMLflowからmetricの履歴を取得する

# tl;dr
```python
import pandas as pd
import mlflow

def get_metric_history(run_id, metric):
    client = mlflow.tracking.MlflowClient()
    history = client.get_metric_history(run_id, metric)
    history = [dict(key=m.key, value=m.value, timestamp=m.timestamp, step=m.step) for m in history]
    history = pd.DataFrame(history).sort_values("step")
    history.timestamp = pd.to_datetime(history.timestamp, unit="ms")
    return history

train_loss = get_metric_history(run_id, "train_loss")
valid_loss = get_metric_history(run_id, "valid_loss")
history = pd.concat((train_loss, valid_loss))
history.pivot(index="step", columns="key", values="value").plot()
```

<div align="center">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106412/60759944-3626-c0c5-4ea5-492037da819c.png" width=80%>
</div>

# How to
MLFlowでサーバーとやり取りしたいときは、 [mlflow.tracking.MlflowClient](https://github.com/mlflow/mlflow/blob/master/mlflow/tracking/client.py) を使います。

`MlflowClient.get_metric_history(run_id, key)` を使うとあるrunでのあるkeyのmetricの履歴がすべて取れます。
これを使って、metricの履歴を`pandas.DataFrame`として取得する関数がこちらです。
timestampはdatetimeに変換すると扱いやすいです。


```python
def get_metric_history(run_id, metric):
    client = mlflow.tracking.MlflowClient()
    history = client.get_metric_history(run_id, metric)
    history = [dict(key=m.key, value=m.value, timestamp=m.timestamp, step=m.step) for m in history]
    history = pd.DataFrame(history).sort_values("step")
    history.timestamp = pd.to_datetime(history.timestamp, unit="ms")
    return history

train_loss = get_metric_history(run_id, "train_loss")
```

<div align="center">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106412/78ac014e-fae3-fde4-3916-806985751dd7.png" width="50%">
</div>

補足ですが、複数のmetricを比較してplotしたいときは、以下のようにDataframeを縦に結合した上で、pivotを使うと簡単に実現できます。  

```python
train_loss = get_metric_history(run_id, "train_loss")
valid_loss = get_metric_history(run_id, "valid_loss")
history = pd.concat((train_loss, valid_loss))
history.pivot(index="step", columns="key", values="value").plot()
```

<div align="center">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106412/60759944-3626-c0c5-4ea5-492037da819c.png" width=80%>
</div>
【Rails】アソシエーションされたモデルのエラーメッセージ日本語化

railsでエラーメッセージを日本語させている時にちょっと沼ったので忘れないように書いておきます。

### アソシエーションされたモデルに日本語を渡せない

こちらの投稿を参考にさせてもらい、エラーメッセージの日本語化を行いました。
[Railsのバリデーションエラーのメッセージの日本語化](https://qiita.com/Ushinji/items/242bfba84df7a5a67d5b)


.ymlファイルを作成し、カラム名に日本語を渡していく中で思った通りの動きをしない部分が出ました。
![スクリーンショット 2020-08-25 9.39.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629679/e7731e4c-7783-cc04-1729-713e146666ec.png)

記述したコードはこんな感じです。

![スクリーンショット 2020-08-25 9.40.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629679/dc756c72-4e9b-040f-8c1d-abb959b3a331.png)

何をしようとしているかというと、product(商品)を登録しようとした時に、商品名・ジャンル・価格にバリデーションをかけてもしその部分が未入力であればエラーメッセージを表示させよう、ということです。
一つのジャンルに対して複数の商品があるので、ジャンルはモデルを作ってあります。

prouctsテーブルが持つ　name　introduction　price genre_id を日本語化させようとした所、ジャンルだけ英語のままになりました。

binding.pryで中身をみた所、英語になっているGenreは :genre が渡されている様子。
でもproductsの中にはgenreはないよーな？

![スクリーンショット 2020-08-25 9.34.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629679/74f1ed9b-5203-7bf4-81ae-93e04d44726c.png)

シンプルに.ymlファイルの中にgenreを記述しました。

![スクリーンショット 2020-08-25 9.38.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629679/94033d1d-9e09-e16a-c53c-92fa6cdd9a0c.png)

これで行けました。

![スクリーンショット 2020-08-25 9.40.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629679/6fde6bad-6832-0dda-ead6-ab0eaf1bc1c4.png)

しっかり確認したわけではないですが、アソシエーション先のモデル名を書くことで反映されるみたい。
必要であればその先のカラム名も入力してあげれば表示をさらに増やせるのかな。

また何かあったら投稿していきます。
ララベルで背景画像の適用方法

###背景などに画像を用いる方法について紹介していきたいと思います！

まず自分が使用したい画像を決めてpublicフォルダに入れてください！![スクリーンショット 2020-08-25 9.29.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696811/f7aa6760-7307-d2ed-e337-7e67f2a324d8.png)
※今回はpublicフォルダにimagesフォルダを作成していますがそこはお任せします
※これはCloud9の画像です

public/imagesに画像を入れることができたらリネームをしてわかりやすい名前にしておくといいと思います！
![スクリーンショット 2020-08-25 10.19.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696811/c919665e-2022-f29a-3ace-7401acbef270.png)


```app.blade.php
<body style="background:url({{ asset('images/image02.jpg') }}); 
background-size:cover;">
```
背景画像は他のビューでも同じなのでapp.blade.phpに書いています
assetを使っています
背景画像なのでbackground-size:cover;を使うといいと思います！

###まとめ
今回は背景画像の挿入について紹介しました！
画像があると華やかになると思うのでよかったらしてみてください！
【GCP】Cloud Next onAir 20の「Data Management & Databases」関連の講演をまとめ

【Cloud Spanner で進化し続けるビジネスを支えるシステムを構築】


【Cloud SQL for SQLServer 徹底入門】


【実践入門 Cloud Firestore の最新情報】

＝＝＝＝

・サーバレスDBについて（Cloud Firestore）
・ストレージやDBサービスの特徴	
![Screenshot from 2020-08-25 11:02:40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/1a694c4e-c0dd-876b-7b8f-9873a9f36afd.png)
![Screenshot from 2020-08-25 11:06:00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/b2bbf96a-586f-6d09-2c7d-3667d4e02348.png)
xdebugを設定したDockerでvar_dumpを省略させないための設定

# やりたいこと
var_dumpでデバッグをしていたところ見たい値部分が「...」に省略されてしまい見れなかった。
省略させずに見る設定。


# 環境(今回の作業に関連ないものも記載)
* MacBookPro(macOSCatalina10.15.5)
* PHPStorm2020.2
* docker desktop2.2.0.3
* cakephp4.1.2
* xdebug2.9.6

# 実装

## 前提
以下構成で構築していることを前提とする。
https://qiita.com/learn_tech1/items/836d2ea84b518b8a2766

## 実装

下３行を追加。

```Docker/php/php.ini
[xdebug]
xdebug.idekey="PHPSTORM"
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9001
; var_dumpが省略されない設定
xdebug.var_display_max_children=-1
xdebug.var_display_max_data=-1
xdebug.var_display_max_depth=-1
```

`docker-compose restart`で再起動すると反映される。

## 
## 参考
ありがとうございます。
https://mawatari.jp/archives/do-not-omit-the-result-of-var_dump
【GCP】Cloud Next onAir 20の「security」関連の講演をまとめ

お客様をサイバー攻撃から保護する Google テクノロジー
recaptya entreprize
ロボットかどうかを確認するAPI
javaで判定する

recaotyaを使ってる人向け
＝＝＝＝＝＝
Cloud Security Command Center によるセキュリティ管理

web security scanner 脆弱性を検出
コンプライアンスダッシュボード

コンテナのセキュリティサービスもある
Veolia社の事例を紹介　メール通知、Slack通知をする
＝＝＝＝＝

シンプルが一番。新しい時代における安全な運用
※ここは関連してきそう。

セキュリティ運用の効率化
security command center
一元管理　設定ミスの検出　
プレミアムだと、脅威特定、広範囲での設定ミス確認、レポート作成

protecting customors 
→ボット、詐欺を防ぐ

BeyondCorを使って安全にアクセスできる
NYCでもBeyondCorを利用
chronicle ＝クラウドのセキュリティデータを分析　マルウェアのサーチもできる

rechaotyaも進めてくれてる

Tanium,palaaltoなどと協業を発表

セキュリティ製品はこれからもたくさんリリースされる
＝＝＝＝＝
Destaques Next '20: Semana de Infraestrutura

ずっと話が続いているのでよくわからない
事例なども恐らくない
＝＝＝
Asia Pacific Weekly Update: Security

何もない
＝＝＝
A Better, Safer Normal

security command center　は人気がある
Assured Workloads
confidentioal computing →機密情報をまもる　VM作成時にチェックをつけるだけ　よりセキュアにできる

ワクチンの作成など

★★★★★　ここの部分はいつもでてる
BeyondCorを使って安全にアクセスできる
NYCでもBeyondCorを利用
chronicle ＝クラウドのセキュリティデータを分析　マルウェアのサーチもできる
rechaptyaで詐欺を防止
★★★★★　ここの部分はいつもでてる

＝＝＝＝＝
Master Security and Compliance in the Public Cloud

ユーザー側で制御できるセキュリティ
CSP側で制御するセキュリティ
ISOの何を順守しているか←ここの部分は使えるかも

Anthos　GKEのセキュリティについて説明されているが、
よくわからない部分も多い
＝＝＝＝＝＝
Getting Started With BeyondCorp: A Deeper Look into IAP

9:55 新しい構成図がでた
12:00 使い方のデモが流れる
DeviceMAnagement がDeviceInventoryかもしれない

GKEingressの部分については説明がない

＝＝＝
Building Trust Through Customer Collaboration

Googleのセキュリティの考え方

＝＝＝
説明動画：Streamline Security Analytics and Operations

クロニクルについて
端的にまとまってるのでこの動画のほうがいいかも

＝＝＝＝
説明動画：Confidential Computing in Google Cloud

機密情報をまもるやつ
でもも流れる
＝＝＝
説明動画：Simplify Private Certificate Authority Management

certificate authority service
認証情報のサービス
→コンソールからみてみたが、その項目がない

======
The Next Frontier In Data Protection (APAC)

confidential vmの仕組み
どうやってデータを守っているか


＝＝＝＝
How You Can Protect Your Web Sites and Applications with Google Cloud Armor (APAC)

cloud amor

詳細を紹介してくれている


＝＝＝＝
How to Lead a Data-Driven Digital Transformation - What Every Leader Should Know

DXについて	
データ駆動型のDXをどのようにすすめるかを紹介してくれている
しかし、内容が難しくてよくわからない・・・

＝＝＝

Security
【お客様をサイバー攻撃から保護する Google テクノロジー】
・reCAPTCHA　Enterprise：詐欺防止
・Spotifyなどで導入中
・web risk api

【Cloud Security Command Center によるセキュリティ管理】
・Google　Cloud でセキュリティを管理する
・Security　Command　Center　Premium
・BeyondCorp　で利用する　IAP　について
・Confidential Computingで機密情報を守る

![Screenshot from 2020-08-25 10:03:20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/a059e2c0-8caf-d9c2-bc60-403b0b2ecb8e.png)



![Screenshot from 2020-08-25 10:02:31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/db730c22-cfa7-6e56-f380-1cc22e55910e.png)







![Screenshot from 2020-08-25 10:04:55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/50d094e1-420f-c07d-c4e2-e7a9ef92156a.png)
Mac Chrome ショートカット

# はじめに
僕が初心者の頃に知っておきたかったものをまとめました。
最近、当たり前の操作一つ一つを少しでも早くできれば、
その積み重ねが必ず身になると実感しています。
ちょっとでもこの記事が誰かの役に立てれば幸いです。



### 特殊キーの表

キーボードによって表記違う場合もあるので一応

|記号|　|
|---|---|
|⌘|command|
|⌥|option (または alt) |
|⌃|control|
|⇧|shift|

矢印キー：↑↓←→

# 検索系のショートカット

|ショートカット  |用途 |
|---|---|
|⌘   F  |ページ内検索画面を開く  |
|⌘   Y  |履歴検索画面を開く  |
|⌥ ⌘ B  |ブックマーク検索画面を開く  |
|⌥ ⌘ L  |ダウンロード検索画面を開く  |

# 開発で使うショートカット

|ショートカット  |用途 |
|---|---|
|⌥ ⌘ I  |開発ツールを開く  |
|⌥ ⌘ U  |現在のページの HTML ソースコードを表示する  |
|⇧ ⌘ R  |キャッシュ無視して再読み込み  |
|⌘ R  |現在のページ再読み込み  |

# タブやウィンドウのショートカット

|ショートカット  |用途 |
|---|---|
|⌘ T  |新しいタブを開く  |
|⌘ N  |新しいウィンドウを開く  |
|⇧ ⌘ N  |シークレットウィンドウを開く  |
|⌘ W  |現在のタブを閉じる  |
|⇧ ⌘ W  |現在のウィンドウを閉じる  |
|⇧ ⌘ T  |閉じたタブ（またはウィンドウ）を開く  |

# 移動系のショートカット

|ショートカット  |用途 |
|---|---|
|⌥ ⌘ ←  |左のタブに移動  |
|⌥ ⌘ →  |右のタブに移動  |
|⌘ ↓  |現在のページの一番下に  |
|⌘ ↑  |現在のページの一番上に  |
|⌘ L  |アドレスバーに移動  |

# その他のショートカット

|ショートカット  |用途 |
|---|---|
|⌘ Q  |Google Chromeを終了する  |
|⇧ ⌘ R  |閲覧履歴データの削除  |
|⌘ D  |現在のページをブックマーク  |
|⌘ P  |現在のページを印刷  |
|⌘ M  |現在のウィンドウを最小化  |
|⌘ ＋ |拡大  |
|⌘ ー |縮小  |





# 参考

https://support.google.com/chrome/answer/157179?hl=ja
[Ubuntu 18.04/20.04] Intel e1000e インストール メモ

# 参考URL
- https://blog.spiralray.net/archives/474
- https://jyn.jp/ubuntuserver-intelnic/
- http://datyotosanpo.blog.fc2.com/blog-entry-190.html?id=LOAD#LOAD
- http://www.usupi.org/sysad/298.html


# 問題が起きた環境を以下コマンドで確認
```
$ lspci | grep Ethernet
$ modinfo e1000e
```
- このとき、```version: 3.2.6-k```だと、上手く動いていない可能性が高い。

# 動かない原因の調査
```
$ zegrep e1000e /var/log/kern.log*
```
- ```version: 3.2.6-k```だと、チェックサムでエラーが生じていることがある。
- 以下では、チェックサムでエラーが生じている場合に、e1000eをインストールし直して、問題に対処する方法を紹介する。

# e1000eの再インストール
- e1000eの最新版を以下のサイトからダウンロードしてUSB等で入れ、解凍する。（以下、```version: 3.6.0```の場合で説明する。）
    - https://downloadcenter.intel.com/ja/download/15817/-PCI-E-Linux-
- 以下では、`$HOME`の配下に解凍した状態を想定する。
- ```~/e1000e-3.6.0/src/nvm.c```内の関数を編集して、チェックサムを行わないように編集する。

```~/e1000e-3.6.0/src/nvm.c
s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
        return 0;
}
```

# ソースのあるディレクトリに移動
```
$ cd ~/e1000e-3.6.0/src
$ make
$ sudo make install
```
- ここでビルド中に、```<linux/pci-aspm.h>```がないと言われることがある。この場合は、```kcompat.h```の```#include <linux/pci-aspm.h>```をコメントアウトすれば、ビルドできる。
    - ```version: 3.8.4```なら、このエラーが修正されるとの情報あり。
        - https://qiita.com/matsuo7005/items/b0037b6450d752378316
 
# 現ドライバの削除・新ドライバの適用
- 注意！ネット切れます！（まだつながっていない想定だが…。）

```
$ sudo modprobe -r e1000e
$ sudo modprobe e1000e
 ```

# 適用されたか確認
```
$ modinfo e1000e
filename:       /lib/modules/4.4.0-21-generic/updates/drivers/net/ethernet/intel/e1000e-3.6.0/e1000e.ko
version:        3.6.0-NAPI
...
```

# 一応ネットワーク再起動
```
$ sudo /etc/init.d/networking restart
```

# 今のモジュールを次回起動時に使用するように設定
```
$ sudo update-initramfs -u
```

- 完了。

# DKMSへの登録
- `/usr/src/`配下に`e1000e-3.6.0`を解凍し、配置する。
```
$ sudo mv ~/e1000e-3.6.0.tar /usr/src/
$ cd /usr/src/
$ sudo tar xf e1000e-3.6.0.tar
$ sudo rm e1000e-3.6.0.tar
$ cd e1000e-3.6.0/
```
次に`/usr/src/e1000e-3.6.0/dkms.conf`を新規作成して編集する。
```
PACKAGE_NAME="e1000e"
# バージョン
PACKAGE_VERSION="3.6.0"
BUILT_MODULE_LOCATION=src
BUILT_MODULE_NAME[0]="e1000e"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/e1000e/"
AUTOINSTALL="yes"
MAKE[0]="BUILD_KERNEL=${kernelver} make -C src CFLAGS_EXTRA=-DDISABLE_PM"
CLEAN[0]="make -C src clean"
REMAKE_INITRD=yes
```
- 最後に以下のコマンドでDKMSに追加、ビルド、インストールを行う。
```
$ sudo dkms -m e1000e -v 3.6.0 add 
$ sudo dkms -m e1000e -v 3.6.0 build 
$ sudo dkms -m e1000e -v 3.6.0 install 
```
dockerとは別でmysql接続してlocalhostが使えなくなったとき


#dockerとは別でmysql接続してlocalhostが使えなくなったとき



##Homebrewでmysqlのインストール

```
$ brew update
$ brew install mysql

$ brew update
```

##MySQLの起動

```
$ mysql.server start

Starting MySQL
. SUCCESS! 
```

この状態で別でdocker環境を使って開発しているとdocker環境で
DB接続ができなくなる。

##使わない時はこのコマンドでmysqlサーバーの接続を切っておく

```
$ mysql.server stop
Shutting down MySQL
. SUCCESS!
```
gitのディレクトリ情報保存方法

## 背景

git は差分管理ツールというイメージが強いですが、どうやってディレクトリ情報を保存しているかについてふと疑問に思いました。  
ディレクトリ情報も差分で管理している？差分ならどこから適用している？`.git`の中に実は入っている？  
少し考えても手段は分からなかったので調べて見ました。

## sha1(前提知識)

今回調べた結果として git で使用されている sha1 というハッシュ技術に触れないわけにはいかないので、前提知識として少し説明します。といっても大した内容じゃないですが...

git では [sha1](https://ja.wikipedia.org/wiki/SHA-1) と呼ばれるハッシュ技術を使用しております。みなさんが git のハッシュと聞いて最初に思い浮かべるのは commit ハッシュだと思います。現在はこの sh1 はセキュリティ上の脆弱性などが見つかり sh2 系統が暗号化技術では主流になっています。まぁ、git の使い方では気にするようなものでもない気がしますが、どうなんですかね。面倒でよく調べていません。
まぁ、git の根幹とも言える技術であり、こういうハッシュ技術をいろんな所に使っているよっていうのが今回のオチだったりします。

## どうやってディレクトリ情報を保存しているか

それではどうやって保存しているかを見ていきます。
まず、以下のようにして適当なレポジトリをコピーして、ディレクトリ内に入ります。

```sh
$ git clone git@github.com:komem3/go-diary.git
$ cd go-diary
```

ログなどを確認して適当な commit ハッシュを取ってきます。

```sh
$ git log | grep commit | head -n3
commit 14bde74b0c41c5fa48313ea78185e77668b97f20 (HEAD -> master, origin/master, origin/HEAD)
commit 352908fdb0ea4b5a9e611c060eeb496d61d248f4
commit b2175aadf10b51307c33d931840241d0d57bc7e5
```

この取得したコミットハッシュをデコードしていきます。git には ハッシュに関する操作を行うコマンドがあるため、そのコマンドを使用します。
以下のように入力するとコミットの内容が見れます。コミットハッシュはコミットの内容から作っているってことがよく分かります。

```sh
$ git cat-file -p 352908fdb0ea4b5a9e611c060eeb496d61d248f4
tree 30e8473323d6fc439711f2814cb433c7bb408e3b
parent b2175aadf10b51307c33d931840241d0d57bc7e5
author dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1596432759 +0000
committer GitHub <noreply@github.com> 1596432759 +0000
...
```

上から見ていくと、`tree` という項目と `parent` という項目があるのが分かると思います。`parent`はこのコミットの前のコミットに当たります。こうやって前のコミット情報を保存しているということが分かります。  
では、`tree`とは何でしょうか？これが今回の目的のディレクトリ情報です。  
試しに出力された `tree` のハッシュ値をデコードしてみます。

```sh
$ git cat-file -p 30e8473323d6fc439711f2814cb433c7bb408e3b
```

そうすると、以下のようにディレクトリ情報が出力されることが分かります。すごい！

```sh
$ git cat-file -p 30e8473323d6fc439711f2814cb433c7bb408e3b
040000 tree ef24d35be196813c0aea4ab8ffa911947741ab83	.circleci
040000 tree 9b65cf3b799fe9861bd209f7329dbb3dfe165393	.github
100644 blob 9dfdfdb57d914ec5af4b96a265d782c27e2cc359	.gitignore
100644 blob 932a7ebed933a1a9a9c8ec5f54cec24c844d8b0f	.markdownlint.json
...
```

この出力における `tree`はサブディレクトリとなっています。ハッシュ値をデコードしてみると、サブディレクトリの似たような出力を見ることが出来ます。では、blob は何なのか？こちらも出力してみます。

```sh
$ git cat-file -p 9dfdfdb57d914ec5af4b96a265d782c27e2cc359
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
```

ファイル情報が入っていました。なるほど − って感じです。つまり commit ハッシュの中に「差分情報」「前のコミット」「その時のディレクトリ情報」が入っているということです。ハッシュ技術の凄さを感じます。
図にしてみる以下のようなイメージです。

![commithash.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488897/447e6667-1b46-4954-2dbb-70de81742557.jpeg)

## まとめ

git はそれぞれのコミットに「前のコミット」「差分情報」「ディレクトリ情報」を保存しているということが分かりました。20 バイトとかにこれだけの情報が詰まっているというのはハッシュ技術の面白さを感じます。git のハッシュについてもう少し詳しく知りたいかたは下の[参考文献](#参考文献)を呼んでみると良いかもしれないです。

## 参考文献

https://git-scm.com/book/ja/v2/Gitの内側-Gitオブジェクト
BigQueryの取り込み時間パーティションテーブルのカラム削除

# 背景
取り込み時間パーティションテーブルのカラム削除を行いたい。
なかなかいい方法がなくて困りました。
クエリを使った削除や、GCSを経由するLoadジョブだとパーティション情報は失われてしまう。。。
[テーブル スキーマからの列の削除](https://cloud.google.com/bigquery/docs/manually-changing-schemas?hl=ja#deleting_a_column_from_a_table_schema
)

今回はINSERT(..., _PARTITIONTIME) を使うとパーティションに区切れることを利用したやり方でやってみました。
他にいい方法知っている方は教えてください。

# やること

対象テーブルのスキーマを取得

```bash

bq show --schema --format=prettyjson dataset.sample
```

スキーマから削除したいカラムのスキーマ情報を削除して、textに保存

```json:元スキーマだとすると...
[{
		"type": "TIMESTAMP",
		"name": "time",
		"mode": "NULLABLE"
	},
	{
		"type": "STRING",
		"name": "string1",
		"mode": "NULLABLE"
	},
	{
		"type": "STRING",
		"name": "string2",
		"mode": "NULLABLE"
	}
]
```

```json:deleted_schema.json(使う方)
[{
		"type": "TIMESTAMP",
		"name": "time",
		"mode": "NULLABLE"
	},
	{
		"type": "STRING",
		"name": "string1",
		"mode": "NULLABLE"
	}
]
```

カラムを削除したスキーマで新テーブル(destination_table)を作成する

```bash
bq mk  --time_partitioning_type=DAY --table dataset.destination_table ./deleted_schema.json
```

新テーブルにINSERTする

```bash
INSERT INTO `dataset.destination_table` (time, string1, _PARTITIONTIME)
SELECT time, string1, _PARTITIONTIME FROM dataset.sample
```

# 参照
[Is it possible to remove a column from a partitioned table in Google BigQuery?
](https://stackoverflow.com/questions/48830133/is-it-possible-to-remove-a-column-from-a-partitioned-table-in-google-bigquery)
【GCP】Cloud Next onAir 20の「Infrastructure」関連の講演をまとめ

【ワークロードに適した Compute Engine インスタンス タイプの選定】
・実際のニーズに応える VM ファミリー
 - チームにとって本当に必要なものを
 - エンジニア / サイエンティストにイノベーションを
 - データ アナリストに洞察できる環境を
 - ミッション クリティカルなアプリケーションを全従業員に

![Screenshot from 2020-08-25 09:48:53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/efe0d15d-a50a-0337-57d5-c45ccf65cb97.png)


【プライベート サービス コネクトとサービス ディレクトリ：サービスへの接続を革新】
・さまざまな環境（GKE、VM、Cloud Functions、マルチクラスタ、マルチクラウド、オンプレミス）にまたがる異種混合サービス
・プライベート サービス コネクト：自社やサードパーティのサービスと、お客様が所有するサービスを簡単かつプライベートに接続し利用できる


【Google Cloud で信頼性を高めるためのアプローチ】
・SLOを達成する理由
- オンプレミスのアップタイムを超えられるか
- アプリケーションスタックの信頼性向上が可能か
- 信頼性の目標達成が容易になるか
UIターンのオンラインイベントの良い点・悪い点まとめ

### イベント紹介
今回我々が運営したイベントはコチラ。
[島根に移住したITエンジニアと話す会](https://www.shimane-itworks.jp/column/3297)
当日の参加者は

- 一般参加者13名
- ゲストスピーカー　4名
- コーディネーター　4名
- 県スタッフ2名
- 弊社オペレーター2名

当日は、Zoomを使い、各ゲストスピーカー4名がブレイクアウトルームに分かれ、それぞれ参加者を3〜4名づつ割り振り、各ルームを4回ローテーションするという手法を取りました。
###  オンラインイベントで良かった事
#### 参加者数/予約数=参加率が多い
オフラインのイベントだと当日に連絡なくキャンセルする人がどうしても一定数居ます。しかし、今回はオフラインに比べて、かなり参加率が高い止まりしました。オンラインだと移動する必要もなく、気軽に参加出来るのが良かった様に思えます。主催者側としても、参加者数を見積もりやすいのも良かったです。

#### 普段参加しない層が参加してくれた
通常イベントだとなかなか参加してくれない、家に子供がいるママさんが複数参加してくれたりしました。また、首都圏や関西圏ではないところに住む方も参加してもらえたりもしました。オンラインだからこそ、幅広くアプローチ出来るのは有るように思えます。

###  事前準備がかなり楽
当日はポップを印刷したり、会場をセッティングするのがかなり楽になりました。当日必要な物(マイクやスピーカーなど)を送ったりレンタルするといった事をする必要もなく、最小限のPCのセットアップで事足りました。

#### アンケートの依頼と集計が楽
イベントの終了間際、全体にアンケートのURLを送る事で、ほぼ全員にアンケートに答えてもらうことができました。答える側も集計する側もPCから直接入力なので圧倒的に容易でした。

### オンラインイベントでの問題点
#### 業務連絡が困難
オフラインイベントだと、業務連絡等等のヒソヒソ話や、紙切れを渡す事で出来る業務連絡ですが、どうしてもZoom単体だと機能しづらい面が有ります。会話はどうしても他の人に聞こえてしまうので適しません。個別チャットもよくよく設定を見ないと全体チャットに送ってしまいかねません。今回は裏で別のチャットツールを使い業務連絡しましたが、各ブレイクアウトルームに居るコーディネーターが複数のツールをこまめに言ったり来たりするのは想像以上に困難で、見落としのリスクも有りました。

#### 自然発生的に多対多のコミュニケーションが成立しない
例えば各ミーティングで会話に入っていけない人に対して、小さな声でコーディネーターがフォローを入れたりが困難です。また、同じテーブルでもそれぞれ聴きたいことが違って小さなグループが自然発生的に出来ることもありません。ある程度、コーディネーターやゲストスピーカーが中心になって話すスタイルでないと、なかなか機能しません。

#### オペレーターの負荷が高い
ブレイクアウトルームの移動は1名の管理者権限を持つホストしかできず、初回の割り振りから、各セッション毎に参加者をローテーションさせる作業を1人でこなす必要が有ります。事前に作った割り振り表を確認しながら、一つ一つミス無く手作業するのは予想以上に集中力が必要です。この当たりは、Withコロナ、ポストコロナの情勢から、色々なところからオンラインイベントツールみたいなのが登場し、ある程度作業が容易になると思われます。

#### 意外と多いチェック項目
それぞれのコーディネーターに共同ホスト権限を割り振ったり、画面共有出来るユーザーを制限したり、5分前アナウンスや、終了のアナウンス等、自動で出来ない為、事細かにオペレーションする必要が有りました。

#### 当日の機材関係のトラブル
WEB会議をすると、PCの状況に応じて、音が小さい・聞こえない、マイクが酷いノイズを拾ってしまう、ビデオが真っ黒、といった事がどうしても発生してしまいます。実際、本イベント中、コーディネーターの業務用PCはエクセルが動く程度の低スペックで、同時にブラウザやチャットといった処理が何か発生した際に声が途切れて聞きづらいといったトラブルがありました。また、管理者のPCがフリーズ等した場合、別のユーザーに管理権限が一時的に移ってしまうトラブルも想定されます。かならず管理権限を持つユーザーを複数PCからログインさせておく等が必要に成ります。
Pythonのbytesの使い方色々

## bytesの使い方

Python 3.7.5 で確認。

### bytesの自力入力

```python
b'\x00\x01\x02\x03'
# result: b'\x00\x01\x02\x03'

b'\x64\x65\x66\x67'
# result: b'defg' # asciiコードに対応した文字が表示されている
```

### ファイルからbytesで読込

```python

# with無し
fp = open('filename.bin', 'rb')
all_bytes = fp.read()
fp.close()

# with付き
with open('filename.bin', 'rb') as fp:
    all_bytes = fp.read()
```

### bytesの部分切出し

```python
a = b'\x00\x01\x02\x03' # 準備コード
a[1:3]  # listなのでlistと同じ要領でスライスが可能
# result: b'\x01\x02'
```

### 整数をbytesへ変換

```python
a = 255  # 準備コード
a.to_bytes(2, 'little')  # to_bytes(変換後のバイト数, エンディアン)
# result: b'\xff\x00'
```


### bytesから整数へ

```python
a = 255                         # 準備コード
byts = a.to_bytes(2, 'little')  # 準備コード
int.from_bytes(byts, 'little')  # int.from_bytes(bytes, エンディアン)
# result: 255
```


### bytesから整数へ（符号付き）

```python
a = -255                                     # 準備コード
byts = a.to_bytes(2, 'little', signed=True)  # 準備コード
int.from_bytes(byts, 'little', signed=True)  # int.from_bytes(bytes, エンディアン, signed=True)
# result: -255
```


### 16進表記文字列からbytesへ

```python
bytes.fromhex('F1E2f3f4')
bytes.fromhex('F1E2 f3f4')
bytes.fromhex('F1 E2 f3 f4')
# result: b'\xf1\xe2\xf3\xf4'
```

### bytesを16進表記文字列へ

```python
by = bytes.fromhex('F1E2f3f4')  # 準備コード
by.hex()
# result: 'f1e2f3f4'
```
【GCP】Cloud Next onAir 20の「Productivity & Collaboration」関連の講演をまとめ

【G Suite のビジョン 未来のワークプレイス】
・meetの新機能　
 - 会議の出欠確認
 - 手を上げる
・GsuiteによるBeyondCorp（ゼロトラストセキュリティモデル）の実現
 - VPNに依存しない世界
 
![Screenshot from 2020-08-25 09:17:55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/67f8dbdb-719e-615f-69a0-a9c889d8a128.png)

![Screenshot from 2020-08-25 09:19:33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/8d0407a9-86aa-a75b-a9b2-c5b824c484cc.png)


【Chrome Enterprise と BeyondCorp のセキュリティ機能のご紹介】
・ChromeEnterprise(企業向け Chrome ブラウザ)によるセキュアなエンドポイントを提供
 - BeyondCorpの実現
 - 組み込みウイルス対策
 - 作業中断のないOSアップデート
 - パスワードが流出しているかをユーザーに報告
 - Google管理コンソールで紛失および盗難の防止
メモDocker + MySQL 勉強・参考

2020/08 DockerでMySQL使用したときに読んだ記事

docker-compose でMySQL環境簡単構築
https://qiita.com/A-Kira/items/f401aea261693c395966

dockerでmysqlを使う
https://qiita.com/astrsk_hori/items/e3d6c237d68be1a6f548
[ServiceNow][ATF] Click Componentでコンポーネントが取得できない場合の対処法

# 発生した問題
サービスポータルのテストを行おうとテストを作成していると、コンポーネントをクリックするためのClick Componentのテストステップを作成したが、対象のボタンやリンクが選べない。

## プラットフォーム
NewYork
PDIのParisでも同事象を確認しました。

# 対処法
言語を英語にすれば取得できます。

# 問題点
日本語環境下でテストしたい場合に、期待するテスト結果が得られない。

# 発生までの手順
１. サービスポータルを開くテストステップを追加します。
![スクリーンショット 2020-08-21 9.48.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/05ee20ee-bb93-859e-1f2d-38da8bed7d9b.png)
2. テストステップの追加でClick Componentを選択します。
![スクリーンショット 2020-08-21 9.48.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/cef85d06-7d78-ad68-7cd8-700dbc78cb5b.png)
3. `コンポーネントを取得`ボタンを押すとテストランナーが実行され、ポータルページのコンポーネントを取得します。
![スクリーンショット 2020-08-21 9.48.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/13f11ebd-0258-86b2-7f39-a07ad71ed0b4.png)
4. 完了後`次へ`を押すと…
![スクリーンショット 2020-08-21 9.49.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/6213f211-0014-c937-6dec-b994c24eedc3.png)
5. 何も設定できない画面が表示されました。。
![スクリーンショット 2020-08-21 9.49.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/ab349d4b-a26e-e416-388a-a37aa275ed4c.png)

# 期待した結果
言語を英語にすれば取得できます。
1. Click Componentを選択し`Retrieve Components`を押すと…
![スクリーンショット 2020-08-21 9.50.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/4e9fcbef-904e-3d1a-35d7-7a678b4d6f8f.png)
2. コンポーネントを選択できるようになりました。
3. 
![スクリーンショット 2020-08-21 9.51.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/d222df55-f10c-82e5-75d9-b305be6fd309.png)
3. テストを作成し`Run Test`でテストは完了しますが、言語を日本語に戻すとエラーになります。
![スクリーンショット 2020-08-21 10.02.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/94b74d8e-ba3c-81ab-41d4-4d0e0062630b.png)

# きっかけ
現在ServiceNowがサポートするバージョンは **最新 - 1** のため、メジャーアップデートがあるとその一つ前のバージョンまでしかサポートが得られません。
年間2回のメジャーアップデートが予定されているため、最低年1回のアップデートが必要となります。
バージョンアップによってカスタムアプリケーションやOOTB（標準機能）のカスタマイズに不具合が起きていないか、都度確認しなければならず、
利用期間が長くなればなるほどこれらの検証対象も増えるため、テストの工数を抑えるためにもATF（自動テストフレームワーク）の利用は避けられないこととなります。
またATFを整備し定期実行することで、通常開発時においても変更によるデグレードを防ぐ役割も果たしてくれます。
ということで、重い腰を上げて自動テストを今少しずつ作っていっています。
Google Earth EngineでNO2

#概要

Google Earth EngineでNO2、やって見た。
covid-19のロックダウンでNO2が減ったか、5月の第一週を去年と比較表示。

#参考にしたページ

https://hirosaji.hatenablog.com/entry/2020/07/11/191949


#写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/2733c9a3-ea32-8526-7e3e-263ae85f07ce.png)


#サンプルコード

```
var collection = ee.ImageCollection('COPERNICUS/S5P/NRTI/L3_NO2').select('NO2_column_number_density');
var collection_2019 = collection.filterDate('2019-05-01', '2019-05-07').mean();
var collection_2020 = collection.filterDate('2020-05-01', '2020-05-07').mean();
var band_viz = {
  min: 0,
  max: 0.0002,
  palette: ['black', 'blue', 'purple', 'cyan', 'green', 'yellow', 'red'],
  opacity: 0.5
};
//Map.addLayer(collection_2019, band_viz, 'S5P N02 2019');
//Map.addLayer(collection_2020, band_viz, 'S5P N02 2020');
Map.setCenter(137, 36, 5);
var diff = collection_2019.subtract(collection_2020);
Map.addLayer(diff, band_viz, 'diff no2');


```

以上。
Swiftでデザインパターン【Adapter】

元ネタ → [ochococo/Design-Patterns-In-Swift](https://github.com/ochococo/Design-Patterns-In-Swift#-adapter)

# クラス図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37598/41377d74-623a-c791-3843-c50860e802d0.png)


図の引用元：[Wikipedia: Adapter パターン](https://ja.wikipedia.org/wiki/Adapter_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3)

# 概要
The adapter pattern is used to provide a link between two otherwise incompatible types by wrapping the "adaptee" with a class that supports the interface required by the client.
Adapterパターンは、クライアントが必要とするインターフェースをサポートする**Addapter**クラスを用意して**Adaptee**をラップすることにより、2つの互換性のないタイプ間のリンクを提供するために使用されます。


# サンプルコード
```swift
// Target
protocol NewDeathStarSuperlaserAiming {
    // requiredMethod() propertyだがgetterメソッドという扱い
    var angleV: Double { get }
    var angleH: Double { get }
}

// Adaptee
struct OldDeathStarSuperlaserTarget {
    // oldMethod() propertyだがgetterメソッドという扱い
    let angleHorizontal: Float
    let angleVertical  : Float

    init(angleHorizontal: Float, angleVertical: Float) {
        self.angleHorizontal = angleHorizontal
        self.angleVertical   = angleVertical
    }
}

// Adapter
struct NewDeathStarSuperlaserTarget: NewDeathStarSuperlaserAiming {

    // adaptee: Adaptee
    private let target: OldDeathStarSuperlaserTarget

    // requiredMethod(): this.adaptee.oldMethod()
    // Targetに準拠した形式でAdapteeからの戻りをラップする
    var angleV: Double {
        return Double(target.angleVertical)
    }
    var angleH: Double {
        return Double(target.angleHorizontal)
    }

    init(_ target: OldDeathStarSuperlaserTarget) {
        self.target = target
    }
}


// usage //

let target    = OldDeathStarSuperlaserTarget(angleHorizontal: 14.0, angleVertical: 12.0)
let newFormat = NewDeathStarSuperlaserTarget(target)

newFormat.angleH
newFormat.angleV
```

# クラス図との対応
|  サンプルコード  |  クラス図  |
| ---- | ---- |
|  **NewDeathStarSuperlaserAiming** |  **Target**  |
|  angleV, angleH  |  requiredMethod()  |

|  サンプルコード  |  クラス図  |
| ---- | ---- |
|  **OldDeathStarSuperlaserTarget** |  **Adaptee**  |
|  angleHorizontal, angleVertical  |  oldMethod()  |

|  サンプルコード  |  クラス図  |
| ---- | ---- |
|  **NewDeathStarSuperlaserTarget** |  **Adapter**  |
|  target  |  adaptee: Adaptee  |
|  angleV, angleH  |  requiredMethod() 　＃this.adaptee.oldMethod()  |



# 考察
**Adaptee**は既存の何らかのクラス。それ自体には変更を加えずに**Adapter**を用意してラップすることでクライアントが使用できるようにする。**Target**は**Adaptee**から必要な機能をラップする具体的なインタフェースを定義する。ここでは、**OldDeathStarSuperlaserTarget**の`Float`を返すメソッド（`get`プロパティ）をインタフェース（`protocol`）で抽出して、`Double`を返すようにラップしている。インタフェースを抽出して定義しているのは、`Double`を返す形式で、他のクラスと同等に、**OldDeathStarSuperlaserTarget**の機能を取り込みたいためである。**Target**に準拠させることで**OldDeathStarSuperlaserTarget**以外にも互換性のない様々なクラスを同等に使用することが可能になる。
SysMLの説明

応用情報技術者平成30年秋期 午前問46

SysMLの説明として，適切なものはどれか。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/8c2fc3b6-805f-741a-a9fd-0bd16f74d7b0.png)


１、SysML(Systems Modeling Language)は、
ソフトウェア設計の用いられるUMLを、ハードウェアに関する記述を含めたものに拡張し、システム設計を行えるようにしたモデリング言語です。全部で次の9つの図法があり、UMLと全く同じもの、UMLの図を拡張したもの、SysML独自のものがあります。

２、MathMLの説明
Webページに，画像を使用せずに数式を表示するために用いられる，XMLで定義されたマークアップ言語

３、SystemCの説明
ハードウェアとソフトウェアとの協調設計(コデザイン)に用いられる，C言語又はC++言語を基としたシステムレベル記述言語

４、VHDL・Verilog-HDL の説明
論理合成してFPGAで動作させるハードウェア論理の記述に用いられる，ハードウェア記述言語


参照：
https://www.ap-siken.com/kakomon/30_aki/q46.html
WPAとWPA2のセキュリティプロトコル、暗号アルゴリズム、暗号鍵の鍵長


応用情報技術者平成30年秋期 午前問45


無線LANのセキュリティプロトコル，暗号アルゴリズム，暗号鍵の鍵長の組合せのうち，適切なものはどれか。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/9546f9ac-7e2c-eb3b-46d0-2bb95bb6be8f.png)

WPAとWPA2のセキュリティプロトコル、暗号アルゴリズム、暗号鍵の鍵長をまとめると次のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/2ed653f8-3871-223d-5816-8d7d20ab06c8.png)


参照：
https://www.ap-siken.com/kakomon/30_aki/q45.html
GCP リーエンにより保護されているプロジェクトの削除方法

#原因
DialogFlowと接続しているプロジェクトにリーエンが設定されてしまっていたこと

#対策
リーエンを削除する

#コマンド
＞CloudShell

```
gcloud alpha resource-manager liens list
```

現存するリーエン一覧を取得

```
gcloud alpha resource-manager liens delete [LIEN_NAME]
```

上記コマンドで削除したいリーエンを指定し、削除

#結論
公式ドキュメントを読めば解決しました。
https://cloud.google.com/resource-manager/docs/project-liens?hl=ja
【rails】モデルとは？

#railsにおいてモデルとは？

データベースとやり取りを行うクラスのこと。
データベースの中にあるクラス名のついたテーブルを作っている。
例えば、データベース内にtweetテーブルを作っている場合、ここでのモデルクラスはtweetクラスになる。

railsのモデルクラスは、頭が大文字、単数形と言うルールがある。

```csharp:コンソールからモデルクラスとfindメソッドを使って、データーベースから情報を取り出す例
Tweet.find(1)
```
Docker初心者のための簡単に環境構築する方法

## この記事は
- サーバーがデプロイしていないのでローカルホストでサーバーを立てて動作を検証する。
- Dockerよくわからないけど、とにかく使って環境構築しないといけない。

みたいなときに役に立つと思います。


## ホームページからDockerをダウンロード・インストールする。
https://www.docker.com/get-started
こちらのページから `Docker Desktop` を `Download for Mac`　でDockerをダウンロード、インストールしてください。

インストール後、Macのステータスバーにクジラアイコンが出て、ステータスが
`Docker Desk Top is running`になれば準備完了です。


## Server-APIのリポジトリをクローンする。

Githubから`xxxServer-API`というリポジトリ をcloneしてきます。

リポジトリに移動します。

```
$ cd xxxServer-API
```

`rbenv: version ruby-2.7.1 is not installed` みたいなメッセージが出るかもしれませんが、
一旦無視して大丈夫です。

## Docker起動

大抵はread meを参照すれば、開発環境を構築するシェルスクリプトかDockerの起動方法が書いてあります。(あるはず。。)
以下のようなコマンドです。

```shell:初回のみ起動
$ sh docker/init_docker.sh
```

データを取得するので時間がかかります。


```shell:サーバー起動
$ docker-compose up
```


## この状態になれば完了です。

<img width="380" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276894/7ba0f376-3347-648b-5360-0c6e925def4f.png">


アプリ側でテストしAPIなど受け取れていれば、完了です！😌

Dockerは使っていなかったら`Ctrl+C`で止めることもできます。
若干重いので使わなかったら止めるといいです。

また走らせたかったら `docker compose up`で起動できます。
PostgreSQL　クライアントのタイムアウト設定について

# クライアントのタイムアウト設定について

PostgreSQLクライアントからSQLを実行した場合のタイムアウトの設定は以下の2つがあります。

- statement_timeout
- lock_timeout

statement_timeoutを設定すると、SQLが実行されてから指定した時間を経過すると処理を中断します。
lock_timeoutを設定すると、SQLがロックを取得しようと待っている間に、指定した時間を経過すると処理を中断します。
両方ともpostgresql.confに設定することもできますが、全てのセッションに影響を与えるため、セッションごとに設定することになります。

セッション中で両方のタイムアウトを設定することもできます。
その場合、statement_timeout > lock_timeoutで設定します。そうしないとlock_timeoutより必ず先にstatement_timeoutで処理が中断されることになります。


## lock_timeout

lock_timeoutを設定してタイムアウト時の動作を確認してみます。
タイムアウトは10,000ms（10秒）に設定しています。

まず、test01テーブルをselectし、ACCESS SHAREロックを取得します。

```
postgres=# begin;
BEGIN
postgres=# select * from test01;
 id 
----
(0 rows)
```

別セッションで、lock_timeoutを設定し、test01テーブルをロックします。
ACCESS SHAREのロックがかかっており、ロックが取得できずタイムアウトとなります。

```sql
postgres=# set lock_timeout = 10000;
SET
postgres=# begin;
BEGIN
postgres=# lock table test01;
ERROR:  canceling statement due to lock timeout
```

ログにもERRORレベルで出力されます。

```
2020-08-24 23:24:01.972 CEST [4011] ERROR:  canceling statement due to lock timeout
2020-08-24 23:24:01.972 CEST [4011] STATEMENT:  lock table test01;
```


## statement_timeout

statement_timeoutを設定してタイムアウト時の動作を確認してみます。
タイムアウトは10,000ms（10秒）に設定しています。

lock_timeoutを設定し、pg_sleep(30)で30秒間スリープします。
そうすると10秒経過後にタイムアウトします。

```sql
postgres=# set statement_timeout to 10000;
SET
postgres=# select pg_sleep(30);
ERROR:  canceling statement due to statement timeout
```

ログにもERRORレベルで出力されます。

```
2020-08-24 23:31:47.978 CEST [4011] ERROR:  canceling statement due to statement timeout
2020-08-24 23:31:47.978 CEST [4011] STATEMENT:  select pg_sleep(30);
```

# 参考

- [クライアント接続デフォルト(PostgreSQL 12.3文書)](https://www.postgresql.jp/document/12/html/runtime-config-client.html)
Google Earth Engineで夜間光

#概要

Google Earth Engineで夜間光、やって見た。

#写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/25841102-45d4-7b90-b7b3-8dc17b4f0eab.png)

　
#サンプルコード

```

var dataset = ee.ImageCollection('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS').filter(ee.Filter.date('2013-01-01', '2013-12-31'));
var nighttimeLights = dataset.select('avg_vis');
var nighttimeLightsVis = {
  min: 3.0,
  max: 60.0,
};
Map.setCenter(140.82, 38.1, 5);
Map.addLayer(nighttimeLights, nighttimeLightsVis, 'Nighttime Lights');




```

以上。
SAMLと私

Single Sign-On (SSO) と Single Logout (SLO) についてメモ。

## 基本
SAML...Security Assertion Markup Language。シングルサインオン(SSO)の規格。XML形式で認証情報のやり取りを行う。

- SP ... Service Provider
- IdP ... Identity Provider SAML認証での認証情報の提供者

[シングルサインオンのOSS](https://www.designet.co.jp/ossinfo/sso_top.html)

### 認証方式
#### SP-initiated 
- [Diagram shows the flow for SP-initiated SLO](https://support.f5.com/csp/article/K70726133)
- [SPがシングルログアウトの起点になる方法](http://memoyasu.blogspot.com/2013/12/saml-20-single-logout.html)

#### IdP-initiated
- [SP-Initiated と IdP-Initiated の動作の違いを Fiddler を見ながら確認してみる](https://qiita.com/Shinya-Yamaguchi/items/434fab8c39e806e69a88) 

### [SAML Bindings](https://www.netone.co.jp/knowledge-center/blog-column/knowledge_takumi_199/index.html)
- HTTP Redirect Binding
- HTTP POST Binding
- HTTP Artifact Binding

### [NameID Format](https://www.netone.co.jp/knowledge-center/blog-column/knowledge_takumi_199/index.html)

- Persistent identifiers
- Transient identifiers

## KeyCloak

https://www.keycloak.org/

[KeycloakでSAMLを使ってみる（WordPress編）](https://qiita.com/katakura__pro/items/1e65e0bde7fda75332a1)


メタデータエンドポイント: 
http://xx.xx.xx.xx:xxxx/auth/realms/${realm名}/protocol/saml/descriptor


## Javaでどう実装するの

- [Spring Security SAMLを使ってSAML認証にチャレンジしたメモ](https://hotchpotchj37.wordpress.com/2018/07/23/spring-security-saml%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6saml%E8%AA%8D%E8%A8%BC%E3%81%AB%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8%E3%81%97%E3%81%9F%E3%83%A1%E3%83%A2/)

- [Spring Security SAML#Quick Start](https://docs.spring.io/spring-security-saml/docs/1.0.x-SNAPSHOT/reference/htmlsingle/#quick-start-prerequisites)

- OSS ... https://github.com/onelogin/java-saml


## 参考
[SAML2.0シングルサインオン対応したアプリからサインアウトする4つの方法](https://qiita.com/ekojima/items/925cd9e1279ac89e72c9)
[SAML認証を勉強せずに理解したい私から勉強せずに理解したい私へ](https://qiita.com/khsk/items/10a136bded197272094a)
[(ちょっと噛み砕いた)SAML入門](https://qiita.com/taxin/items/bc66fc8d26f804202d7d)
[今更ですがSAMLのおさらい](https://qiita.com/samiii/items/a144a8661635fcc9fb0e)
devise(GEM)の適用時のエラー

ルーティングのエラーが発生

Routing Error
No route matches [GET] "/"
（以下略）

で、パスが見つからないと言う指示だけどroutes.rbにしっかり書いてる。
routes.rbを書き直しようがないのでよくわからなかったけど、deviseを適用するとき、と言うよりgemをインストールするときのrailsサーバーを一度再起動していなかったらしく、サーバーを再起動したら直った。
Swiftで画質をできるだけ保ちつつ画像ファイルサイズを下げる

# はじめに
- iPhoneで写真を撮ると無駄に画像サイズが大きいですよね。
- iOSアプリで画像を扱いたいときにうざかったりします。
    - メモリを圧迫しますし、サーバーにアップロードする場合はサーバー代がかさみます。
- そこで、Swiftで画像ファイルサイズをなんとか下げたいと思ったのですが、ネット上にある方法だと画質がめちゃくちゃ悪くなってしまい困っていました。
- 色々試行錯誤して画質をできるだけ保ちつつ画像ファイルサイズを下げる方法を見つけたので共有します。

# 方法
ざっくり２つあります。
## 1 画像サイズをちっさくする
```swift
extension UIImage {

    func resize(targetSize: CGSize) -> UIImage {
        return UIGraphicsImageRenderer(size:targetSize).image { _ in
            self.draw(in: CGRect(origin: .zero, size: targetSize))
        }
    }

}
```

このメソッドを使ってください(sizeの部分は好きな値をいれてください)

```swift
var resizedPicture: UIImage = picture.resize(targetSize: CGSize(width: picture.size.width / 8, height: picture.size.height / 8))
```

## 2 jpegに変換する際のクオリティ(compressionQuality)を下げる

```swift
resizedPicture = resizedPicture.jpegData(compressionQuality: 0.25)
```

compressionQualityは0.0から1.0まで指定できますが、結構下げても画質が悪くならない(その割にファイルサイズはだいぶ下がる)のでおすすめです。

# 結果
iPhoneで撮影した1.3MBの画像が57KBになりました。
![IMG_4464.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455240/0875e127-5c50-c578-1e2d-fd82256a845e.png)

## ネットにある方法との比較
### ネットにある方法( https://stackoverflow.com/questions/29137488/how-do-i-resize-the-uiimage-to-reduce-upload-image-size )で圧縮した画像
![IMG_4461.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455240/08128049-d1df-8365-5940-67f6e40b1758.png)

画質に大きな差があることがわかります。しかも、画像ファイルサイズも前者は後者の半分以下に抑えられています。

# おわりに
- この方法を使えば画質を保ったまま画像ファイルサイズを下げることができます。
- ただ、なぜできるのか(正確にはネットでよくある方法ではなぜ画質がめちゃ悪くなるのか)、といった部分はよくわからないので今後調べてわかったら追記する予定です。

# 参考文献
- https://stackoverflow.com/questions/32612760/resize-image-without-losing-quality
- https://developer.apple.com/documentation/uikit/uiimage/1624115-jpegdata
- https://qiita.com/marty-suzuki/items/159b1c5d47fb00c11fda
【rails g.error】

◆ファイル作成時のスペルミス
・rails g model massege
上記でmodelでファイルを作成。

その後、コントローラーで初期値の設定をできていないとエラーになり、プログラミング初心者の私は７時間かかって解決できませんでした。
次の日、通っているプログラミングスクールのメンターさんに解決していただきました。

◆rails gでファイル名を指定して作成する時はスペルミスをするととんでもないことになりました。
qiitaで書くブログの情報発信らしい内容はまだまだ書けていませんが、有益な情報を発信できるように頑張って学習していきます。
git commit時のテンションを上げる

git commitをした瞬間ってなんかテンション上がりませんか？

.git/hooks/post-commit に好きな画像を表示するともっとテンションあがると思います

img2txtで画像をコンソール表示できる形に変換できます

    apt install caca-utils
    img2txt mouse-face_1f42d.png


こんな感じ


ヨシ！

    curl -L https://git.io/JUfWA > .git/hooks/post-commit
    chmod +x .git/hooks/post-commit

![peek_2020_08_25_04_18.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106549/d3a8d584-5aa1-08d8-6356-9a472bfe9ee3.gif)

瞬獄殺が決まった風

    curl -L https://git.io/JUfWx > .git/hooks/post-commit
    chmod +x .git/hooks/post-commit

![peek_2020_08_25_04_19.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106549/c79934fe-8163-617a-9799-9bdb1673b49a.gif)


(｀・ω ・´ )v
【Railsチュートリアル】総合テスト

# 総合テストとは
アプリケーションの一連の動作を端から端までシュミレートできるもの

# 作成方法
テストのテンプレートは以下のコマンドで作成可能

```:コンソール
rails generate integration_test テスト名
```

# HTMLの構造を調べて、レイアウトの各リンクが正しく動くかどうかチェックする

1. ルートURL(Homeページ)にGETリクエストを送る。=>**getメソッド**
2. 正しいページテンプレートが描写されているかどうか確かめる。=>**assert_templateメソッド**
3. Home,Help,About,Contactの各ページへのリンクが正しく動くか確かめる。=>**assert_selectメソッド**
【Railsチュートリアル 5章】レイアウトを作成する

# ナビゲーション
すべてHTMLはクラスとidの両方を指定することができる。
これらは単なるラベルであり、CSSでスタイルを指定するときに使用する。

**クラスとidの違いはクラスはページ内で何度でも使用できるが、idは一回しか使用できない点です。**

下のheaderタグには、navbar, navba-fixed-top, navbar-inverseという3つのCSSクラスがスペース区切りで与えられています。

```erb

<header class = "navbar navbar-fixed-top navbar-inverse">

```

下のコードをみてください
. navタグは**内側がナビゲーションリンクである**という意図を明確に伝える役割があります。
. ulタグに付与されているnav,navbar-nav, navbar-rightクラスもBootstrapにおいて特別な意味を持ちます。

```erb

<nav>
  <ul class="nav navbar-nav navbar-right">
    <li><%= link_to "Home",   '#' %></li>
    <li><%= link_to "Help",   '#' %></li>
    <li><%= link_to "Log in", '#' %></li>
  </ul>
</nav>
```

# image_tagヘルパー
このヘルパーは、シンボルを使ってalt属性やwidth属性を設定できる。
下の例では、アセットパイプラインを通してapp/assets/images/の中から該当画像ファイルを探し出してきてくれる。

```erb
<%= link_to image_tag("rails.svg", alt: "Rails logo", width: "200px"),
                      "https://rubyonrails.org/" %>
```

# renderメソッド
renderメソッドにはapp/viewsを起点とするフルパスを渡すことができます

```erb
<%= render "layouts/header"%>
```

# 名前付ルート
|ページ名| URL | 名前付きルート |
|:-:|:-:|:-:|
| Home  |  / | root_path  |
| About  | /about  | about_path  |
|  Help |  /help | help_path  |
| Contact  | /contact  |  contact_path |
|  Sign up |  /signup |  signup_path |
|  Log in | /login  | login_path  |
区間が無限の積分を数値計算で行う(ガウス積分)

積分を台形公式などを用いて数値計算するには、積分区間を細かく分割することが重要となるが、積分範囲が広くなるにつれて計算量が増大する。特に積分区間が無限である場合(広義積分)はそのまま数値計算を行うことは困難である。

例を挙げると、$\int_{-\infty}^{\infty} e^{-x^2}dx=\sqrt{\pi}$(ガウス積分)は自然科学で頻出の積分だが、そのままの形では台形公式を用いて計算することはできない。
これを計算するには以下のような工夫で無限区間を有限にする必要がある。

###1.積分区間を途中で打ち切る
これは指数関数のように急激に減衰する場合に有効である。ガウス積分もこの方法を用いると[-3:3]の区間で数値積分するだけで解析解との誤差は$10^{-5}$のオーダーに収まる。しかし$\int_{-\infty}^{\infty}\frac{dx}{1+x^2}$では被積分関数の減衰が緩やかであるためにこの方法で計算することは難しい。
![ka.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697232/c908ef3d-a0bb-2474-f5bd-359a0d6781df.png)
###2.置換積分を用いる
定義域が無限区間でも値域が有限となるような関数を用いて置換積分を行えば積分区間を狭くすることができる。例えば$y=\tanh(x)$や$y=\frac{2\arctan(x)}{\pi}$の値域は[-1:1]となり積分区間の大幅な短縮ができる。![pa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697232/59066977-baca-e83e-2e5e-cbbfcc4394a4.png)

ガウス積分をこの方法を用いて数値計算してみよう。

```math
\int_{-\infty}^{\infty} e^{-x^2}dxについてy=\frac{2\arctan x}{\pi}とする。\\
x:-\infty\rightarrow\infty \Leftrightarrow y:-1\rightarrow 1\\
x=\tan(\frac{\pi y}{2})\\
dx=\frac{\pi}{2\cos^2(\frac{\pi y}{2})}dyより\\
\int_{-\infty}^{\infty} e^{-x^2}dx=\int_{-1}^{1}\frac{\pi e^{-\tan^2({\frac{\pi y}{2}})}}{2\cos^2(\frac{\pi y}{2})}dy
```

被積分関数をプロットすると図のようになり、[-1:1]で無限に発散する点はないので、これに対して台形公式を適用すればよい精度でガウス積分が計算できると期待される。
![ga.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697232/cf9db330-ec0d-1673-a587-0fdc28f36e8e.png)

c言語での台形公式のコードは以下の通り

```c
#include <stdio.h>
#include <math.h>

double f(double x){
double y;

y = M_PI*exp(-pow(tan(M_PI*x/2),2))/(2*pow(cos(M_PI*x/2),2));

return y;
}

int main(void){
int i,N=50000;
double S,dx;

dx=1./(double)N;
S=0.;

for(i=0;i<=N-1;i++){
S += (f(i*dx)+f((i+1)*dx))/2.*dx;
}

printf("計算結果: %e 解析解: %e",2.*S,sqrt(M_PI));

return 0;
}
```

計算結果は以下の通り

```
計算結果: 1.772454e+000 解析解: 1.772454e+000
```
Gatsby.jsでおしゃれなポートフォリオを作ろう！

## 自己紹介
むちゃんです。
関西を拠点に活動しているフロントエンドエンジニア目指しています。

HAL大阪の2回生です:(2020.8.25現在)

イベントなど回っているので是非大阪辺りの方は会いましょう！


## 概要

### [**Gatsbyjs**](https://www.gatsbyjs.com/)と[**Netlify**](https://www.netlify.com/)で爆速ポートフォリオを作成しました。

![](https://i.imgur.com/xyqRpBn.png)


## 実際の完成物


**今回、僕が作った[ポートフォリオ](https://hongmuchan.net)はこんな感じです。**


<img src="https://i.imgur.com/YFshXPF.png" width="400px" height="500px">

<br>


## GatsbyJSとは

GatsbyJSは[React](https://ja.reactjs.org/)で作られた静的サイトジェネレーターです。
<br>
・[よく耳にするReactを自分なりにまとめてみた...](https://qiita.com/HongMuchan/items/7bca179a0cfb33cbe206)
・[Reactベース静的サイトジェネレータGatsbyの真の力をお見せします](https://qiita.com/uehaj/items/1b7f0a86596353587466)
<br>

### Gatsbyのインストール

**プロジェクトを作成し構成を確認します。**

**①Gatsbyのインストール**
```$ npm install -g gatsby-cli
```


**②プロジェクト作成**
```$ gatsby new portfolio ```
``` $ cd portfolio```

```
├── gatsby-browser.js
├── gatsby-config.js
├── gatsby-node.js
├── gatsby-ssr.js
├── LICENSE
├── package.json
├── public
│   ├── index.html
│   ├── render-page.js.map
│   └── static
├── README.md
├── src
│   ├── components
│   │   └── Header
│   │       └── index.js
│   ├── layouts
│   │   ├── index.css
│   │   └── index.js
│   └── pages
│       ├── 404.js
│       ├── index.js
│       └── page-2.js
└── yarn.lock
```

**③ローカルで確認**
```$ gatsby develop```

***確認方法*** [http://localhost:8000/](http://localhost:8000/)
※この辺りは色んな記事などを参考にしてください。

## Netlifyでデプロイ方法

* [NetlifyでWebサイトを公開する方法](https://qiita.com/shozzy/items/dadea4181d6219d2d326)


* [Netlifyへの自動デプロイをしよう](https://cr-vue.mio3io.com/tutorials/netlify.html#netlify-%E3%81%A8%E3%81%AF%EF%BC%9F)

* [NetlifyはGitHubなどからデプロイできる静的Webホスティングサービス](https://tech.qookie.jp/posts/info-netlify-static-web-deploy/
)

この辺りに詳しく書いてあるので是非読んでみてください。


## 流れ

1. 作ったサイトを**GitHub**に**push**しておく
2. Netlifyの設定とデプロイする
3. サイトを更新する


## あとがき


今回は自分なりに**Gatsby.js**で**Netlify**にデプロイして
**爆速なポートフォリオ**作成する。についてまとめてみました。

是非おしゃれなポートフォリオ作ってみてください。

**ポートフォリオ**:[hongmuchan.net](https://hongmuchan.net)
**Twitter**:[@HomgMuchan](https://twitter.com/HongMuchan)是非フォロー待っています❗️