OmniAICreator/Qiita-1.07M huggingface dataset:
さくらのVPSの準備

#はじめに
さくらのVPSの準備方法の解説です。
契約 -> 接続 




#契約
『[お申し込みのながれ](https://vps.sakura.ad.jp/flow/)』のそって、1G:メモリ、30G:SSD、東京リージョンを月払い(クレジットカード)で契約する。


![スクリーンショット 2018-08-25 10.34.02.png](https://qiita-image-store.s3.amazonaws.com/0/54439/b1fd2c86-85b2-b04a-aba4-0506a4c2f4c6.png)


##手順1: スペックを確認
『[さくらのVPS](https://vps.sakura.ad.jp)』にアクセスし、
『[料金・仕様一覧のPDFはこちら](https://vps.sakura.ad.jp/common/pdf/spec.pdf)』で仕様などを確認する。

![スクリーンショット 2018-08-25 10.34.02.png](https://qiita-image-store.s3.amazonaws.com/0/54439/cdcfaced-7986-dcba-5bb0-ae865e4aab02.png)


##手順2: 希望スペックを指定
1Gの中の『2週間無料でお試し』ボタンをクリックする。

![スクリーンショット 2018-08-25 10.34.16.png](https://qiita-image-store.s3.amazonaws.com/0/54439/6c7c0a93-065d-776d-4c10-b763bfa536e9.png)

![スクリーンショット 2018-08-25 10.34.29.png](https://qiita-image-store.s3.amazonaws.com/0/54439/59982840-25c0-51a4-53d4-dc44ce82909c.png)


##手順3: さくらのVPS カート内容確認
『さくらのVPS カート内容確認』をする。

![スクリーンショット 2018-08-25 11.03.23.png](https://qiita-image-store.s3.amazonaws.com/0/54439/1a6238da-183b-38bc-f3b8-f5c6e16b42b6.png)

![スクリーンショット 2018-08-25 11.03.30.png](https://qiita-image-store.s3.amazonaws.com/0/54439/b305a209-ac5b-7595-7195-7e2c8b6e3413.png)



##手順4: さくらのVPS お申し込み
『さくらのVPS お申し込み』で会員登録または、ログインする。

![スクリーンショット 2018-08-25 11.06.16.png](https://qiita-image-store.s3.amazonaws.com/0/54439/d6fafd89-2f0d-b68a-14ee-3ed1aeecedd4.png)

##手順5: さくらのVPS お申し込みのご確認
お客様情報、申し込み内容、月額費用(年額費用)、初回請求額、約款のご確認（同意）して、『この内容で申し込む』をクリックする。

![スクリーンショット 2018-08-25 11.27.17.png](https://qiita-image-store.s3.amazonaws.com/0/54439/c234110e-49a4-a5d0-0f6d-cdb298711695.png)


#接続
『[さくらのVPS] 仮登録完了のお知らせ 』というタイトルで、『お申込み・ご利用情報』がおくらてくるので、『サーバ情報』を元にサーバにアクセスします。



##手順1: 『サーバ情報』を確認
『[さくらのVPS] 仮登録完了のお知らせ 』のメールで、『サーバ情報』を確認する。




##手順2: VPSコントロールパネルにログイン
『[VPSコントロールパネル](https://secure.sakura.ad.jp/vps/)』にログインする。（ここでは、サーバのIPアドレスでログインする)

![スクリーンショット 2018-08-25 12.13.24.png](https://qiita-image-store.s3.amazonaws.com/0/54439/78a85428-ab5d-159b-d5c4-0bf7c3d6126e.png)





 

#参考資料

- リージョンの選択は、『[さくらのクラウドのリージョン・プラン別ベンチマーク結果一覧](https://qiita.com/CloudRemix/items/37674f6d32a220cd60aa)』を参考して、東京リージョンにしました。


- 『[さくらインターネットの障害でデータが消えた話](https://qiita.com/GachiNyanNyan/items/627a22f32b93f0e58912)』がありました。

- VPSがわからない方は、『[さくらのVPS入門ガイド](https://vps.sakura.ad.jp/guide/)』で学習できます。

- マニュアルは、『[さくらサポート情報 - VPS](https://help.sakura.ad.jp/hc/ja/categories/201105252)』です。
Ubuntu ServerからのUPS(APC製)設定

#はじめに
電源の障害対策としてUPSを導入し、5分間電源回復しない場合は、自動シャットダウンするようにする。

#手順

###UPS(APC用)のパッケージをインストールする。

```bash:
sudo apt-get install apcupsd
```

###apcupsd.confファイルを編集して設定する。

```bash:
cd /etc/apcupsd/
sudo vi apcupsd.conf
```

```bash:
#UPSCABLE smart
UPSCABLE usb

#UPSTYPE apcsmart
#DEVICE /dev/ttyS0
UPSTYPE usb
DEVICE

#TIMEOUT 0
TIMEOUT 300
```

###apcupsdファイルを編集して設定する。

```bash:
cd /etc/default/
sudo vi apcupsd
```

```bash:
#ISCONFIGURED=no
#ISCONFIGURED=yes
```

#リファレンス
- [APC](http://www.apc.com/jp/ja/)
- [APC社製UPS導入](https://forums.ubuntulinux.jp/viewtopic.php?id=3063)
- [停電に備えて APC 製 UPS を導入する](https://qiita.com/nagizero/items/e1c730424caa9ac634f3)
macOS Serverに『Let's Encrypt』の証明書のセットアップ (DNS認証版)

#はじめに
macOS Server 5.7からWebサービスがなくなってしまった。お手軽に発行する為には、Web認証からDNS認証へシフトすることだろう。今回は、macOS Server 5.7をインストールしたマシンのセットアップ方法を解説します。

#事前準備
Let's Encryptのオフィシャルサイトの『[Getting Started](https://letsencrypt.org/getting-started/)』を読むと、certbotというACMEクライアントを使うことを勧めている。
certbotは、homebrewで提供されているので、homebrewのインストール経験があれば、簡単にインストールできる。ただ、certbotをインストールすると依存系ファイルもインストールする。それだとちょっと気に入らないので、今回は、クライアントマシンにインストールして、証明書をクライアントマシンで作成し、サーバにアップロードするという手法をとる。

#大まかな流れ
1. クライアントマシンにcertbotのインストール
2. certbotを使って証明書をクライアントマシンで作成
3. できた証明書をサーバマシンにアップロード
4. Server.appを使って証明書をセットアップ


#手順
##クライアントマシンにcertbotのインストール
https://certbot.eff.org/#osx-apache の手順に従い、certbotをインストールする。

```
$ brew install certbot
```

##certbotを使って証明書をクライアントマシンで作成
certbotの対話形式のマニュアル発行だと次のコマンドを使う。メールアドレス、アグリメント、ドメイン名など聞かれる。また、サーバ上に出力されたWebページを作成する。（英語を良く読んで手順通りやれば、問題なし。）

```
$ certbot certonly --manual --preferred-challenges dns
```

または、

```
$ sudo certbot certonly --manual --preferred-challenges dns
```


```
出力結果
```

```
HOSTNAME IN TXT VALUE
_acme-challenge.hoge.example.com IN TXT ...
```


##できた証明書をサーバマシンにアップロード
証明書ができると、/etc/letsencrypt/live/ドメイン名/に4種類の証明書が作成されて、その中のprivkey.pemとfullchain.pemをサーバにコピーする。ちなみにliveディレクトリに入っているのはリンクで、実体は、/etc/letsencrypt/archive/ドメイン名/に入っている。

##Server.appを使って証明書をセットアップ
Server.appのサーバの証明書で、『証明書識別情報を読み込む...』選ぶ。

![スクリーンショット 2017-10-26 8.31.32.png](https://qiita-image-store.s3.amazonaws.com/0/54439/33bd719d-dce6-4322-23f3-7289b0909b84.png)

『秘密鍵が含まれるファイルをここにドラッグしてください。』にprivkey.pemをドラッグし、『公開証明書が含まれるファイルをここにドラッグしてください』にfullcain.pemをドラッグする。

![スクリーンショット 2017-10-26 8.32.08.png](https://qiita-image-store.s3.amazonaws.com/0/54439/5e96f256-1fa6-5f88-5853-95f6c4c516f2.png)

できたら、『サービスのセキュリティ保護に使用:』で証明書を選択してください。

#参考資料
+ [Let's Encrypt](https://letsencrypt.org)
+ [OSX ServerにLets' EncryptのSSL証明書を適用したメモ](https://qiita.com/do-gugan/items/2d9d101df8d4d7aa6f50)
+ [Let's EncryptのSSL証明書をDNS認証で発行してみた。（DNSはお名前.com）](https://qiita.com/aquiq/items/db4eb8c7106f109819f0)
【AWS】アクセスキーの作成/登録

## 概要

- CLIなどからAWSにアクセスするためのアクセスキーの発行手順です

## アクセスキーの発行

- AWSにログインしキャプチャの通り進めていきます
    - ユーザ作成の権限があるユーザで実行してください
- IAMのメニューを開く

<img width="733" alt="スクリーンショット 2020-05-25 15.41.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175213/af531cd2-4250-eb34-dd9a-5a919275ba4c.png">

- ユーザタブからユーザ追加を選択

<img width="732" alt="スクリーンショット 2020-05-25 15.43.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175213/3674fe84-13ae-61bd-f1ea-b4bb684bee0c.png">

- 適当なユーザ名を入れます
- プログラムによるアクセスのみチェックを入れます
    - AWSマネジメントコンソールへのアクセスにチェックを入れるとWebコンソールにログインできるユーザになってしまいます

<img width="733" alt="スクリーンショット 2020-05-25 15.44.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175213/b00f1f17-c40d-416e-4eb3-dc47e7fb1d13.png">

- 権限を設定します
    - ここではAdmin権限を付与しています

<img width="732" alt="スクリーンショット 2020-05-25 15.44.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175213/b90f8634-4171-d6cb-1961-a80473be01a5.png">

- タグは何も設定しなくて大丈夫です

<img width="733" alt="スクリーンショット 2020-05-25 15.45.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175213/1bd8c1e0-7f6d-dd00-90f4-b0c4a5480ff3.png">

- ユーザーの作成ボタンを押して送信します

<img width="732" alt="スクリーンショット 2020-05-25 15.45.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175213/85352afa-b1b2-3c1e-da4e-bbd3d4c0a006.png">

- アクセスキーIDとシークレットアクセスキーが表示されます
    - 漏洩することがないよう厳重に管理しましょう

<img width="797" alt="スクリーンショット 2020-05-25 15.45.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175213/92ad9e70-4dc4-863f-7fd0-a5e610e949be.png">

## アクセスキーの登録

- ローカル端末上にアクセスキーを登録します
- ホームディレクトリ直下に`.aws`フォルダを作成しその中に`credentials`という名前のファイルを作成します
- 発行したアクセスキーとシークレットキーを登録します

```config:~/.aws/credentials
[default]
aws_access_key_id=XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
region=ap-northeast-1
output=json
```

- 複数のキーを登録したい場合は`[default]`の部分を他の名前にして登録します

```config:~/.aws/credentials
[default]
aws_access_key_id=XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
region=ap-northeast-1
output=json

[my-account]
aws_access_key_id=XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
region=ap-northeast-1
output=json
```
intra-martでIM-FormaDesigner + Oracleを使用する際の注意点

#はじめに
intra-martのDBを標準のPostgreSQLを選択する場合は問題にならないのですが、
oracleかつIM-FormaDesignerを使用した際にハマったポイントについて説明します。


#intra-martのセットアップ
intra-mart Accel Platform セットアップガイド
https://www.intra-mart.jp/document/library/iap/public/setup/iap_setup_guide/index.htm
をまずは参照し、環境を作成していきます。
IM-FormaDesigner は使用できるようにしておきます。


#ハマったところ
セットアップも完了し
IM-FormaDesigner を使用して、部品をポチポチと配置してDB登録しようとすると
落ちる、、、、、
そして落ちる時と落ちないときがある。
どうやらリッチテキストが悪さをしているようで、
これがバイナリ形式で保存されるからということが分かった。

#IM-FormaDesigner側の設定が別途必要
端的にいうとIM-FormaDesigner側のデータ型のマッピングを
PostgreSQL以外の場合は手動で変更しなければいけないということ。

詳しくは下記URLを参照
https://www.intra-mart.jp/document/library/forma/public/forma_setup_guide/texts/create_war/forma_config.html

varcharなどはマッピングしなくても、oracle側でうまく働いてくれているようで
余計にわからなくなってしまった。
結局バイナリ型だけは互換性がなかったため、落ちてたという結果に。


#おわりに
セットアップガイドに、IM-FormaDesignerを使用するときの注意点でリンクが張ってあれば
ハマらず済んだのになと思う今日この頃。
[Javascript]変数、定数

#変数定義
**let 変数名　= 値;**

```javascript
let name = "tanaka";
```

##変数の出力

```javascript
let name = "tanaka";

console.log(name);
```

###変数の値の更新
letをつけずに定義する。

```javascript
let name = "tanaka";
console.log(name);

name = "satou";
console.log(name);
```

#定数定義
定数は値の上書きができない。
**const 定数名　= 値;**

```javascript
const name = "tanaka"
```

#まとめ
いわゆる変数を定義する時
値が変わる
**let 変数名 = 値;**

値が変わらない
**const 定数名 = 値;**
Ruby on Railsのformについて

##最初に
formの使い方が曖昧だったので勉強致しました。
至る所で紹介されていることで、個人的なアウトプットですので、ご了承ください。

##formの使い分けについて
formは３種類が存在していますが、使い分けが曖昧でした。

<b>・form_tag</b>
モデルがない時に使用します。
使用例で言うと検索フォームです。

<b>・form_for</b>
データのモデルがある時に使用します。
使用例で言うと投稿フォームです。

<b>・form_with</b>
記述次第で「form_tag」と「form_for」の両方の使い方ができます。
現在のバージョンで推奨されている書き方です。

##form_tagの基本構文
form_tagを使うときは基本的にアクション属性とHTTPメソッドを指定します。

```erb
<div>
  <%= form_tag (action: :index, method: :post) do %>
    <input type="text" id="name">
    <input type="submit">
  <% end %>
</div>
```

##form_forの基本構文
form_forはインスタンス変数を引数として渡します。
さらにHTMLのinputタグは使わず、フォームのビルドヘルパー(form.hoge)を使用します。

```ruby:controller
def new
  @user = User.new
end
```

```erb:view
<%= form_for(@user) do |form| %>
  <%= form.text_field :name %>
  <%= form.submit %>
<% end %>
```
##form_withの基本構文

<b>・form_tagの様な書き方</b>

```erb
<%= form_with url: users_path do |form| %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>
```

<b>・form_forの様な書き方</b>
form_withはデフォルトでAjax

```erb
<%= form_with model: @user, local: true do |form| %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>
```

##最後に
まだまだ覚えないといけない書き方がたくさんありますが、少しずつ覚えていきます。
flutter run  で No supported devices connected. 

エミュレータを起動していないと、このようになる。
iPhoneまたはAndroid
の、どちらかのエミュレータを起動してから

```
flutter run
```
を実行するとよい。

ちなみに、
iPhoneとAndroid
両方のエミュレータを起動した状態だと、
flutter runが失敗した。
同時に連動するのは無理なのだろう。
Rails Console内で関数を定義したい

ちょっとしたことなんですが。

[pryにコードをコピペするためにしておきたい設定#方法1：一つの式にしてしまう
](pryにコードをコピペするためにしておきたい設定)

括弧で括ると改行は無視されるようになります。
無視されるというか、閉じるまで式の途中とみなされます。

よく使うパターンとしては、Consoleが立ち上がってる間だけの関数を定義したいとき。
これはメソッドの一部を軽くテストしたいな〜ってときにやってます。

Console内で

```ruby

[1] pry(main)> (
[1] pry(main)*   def hoge
[1] pry(main)*     return 'hoge' # 処理内容
[1] pry(main)*   end  
[1] pry(main)* )  
=> :hoge


[2] pry(main)> hoge # 呼び出し
=> "hoge"

```

という感じです。
[Blue Prism]プロセスが消せない時の対応方法

# 

## はじめに
プロセスを削除しようとすると、次のようなエラーが発生することがあります。
![clipboard-202005211537-pycc5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637459/54b2dcc4-4e11-8158-3b84-1b69738561da.png)
![clipboard-202005211538-zled2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637459/9294591d-1839-0879-e3d5-f65711aad0c2.png)


これらのエラーが発生する原因と、エラーが起きた時の対処法について解説します。

## 「このプロセスは既に実行されており、監査に必要です」のエラー
エラーメッセージの通り、既にセッション実行を行ったことがあるプロセスを削除しようとした時に出るエラーです。  
対処法は二つあります。

### リタイア
例として、「DeleteTest1」というプロセスをリタイアさせます。
![clipboard-202005211629-azvxl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637459/ffa22222-1c50-2119-a02f-f075992d16e8.png)

「システム」→「プロセス」→「管理」から管理画面に移動し、「アクティブなプロセス」の欄から削除したいプロセスを選択してドラッグ＆ドロップでリタイア済のプロセスの方へ移動させます。  

管理画面
![clipboard-202005211623-dca9o.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637459/24e08fa6-d4ba-59b5-8c7a-ff12f3c6edca.png)

移動後
![clipboard-202005211624-48vm7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637459/5c2d4aba-e72e-bf0f-7ab0-d37249485c5b.png)

これで一覧からプロセスを消すことができました。
![clipboard-202005211628-sicvr.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637459/d174e5ef-2994-a9ae-3c58-66695dfd3076.png)


注：リタイアしたプロセスと同名のプロセスを作成することはできないので、リタイアする前に名前を変更しておくと良いです

![clipboard-202005211640-iylaz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637459/0cf3753d-f949-daef-996b-f915cdf03f5e.png)


### データベースデータの削除
もう一つの方法として、セッション実行を行ったログを削除することでプロセスを削除することができるようになります。

「システム」→「アーカイブ」からアーカイブされたログを削除することができます。
![clipboard-202005211635-7wfbw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637459/46cc0487-16a3-8f6c-6b0e-b5c4dddd01d7.png)


削除したいログを選択して、左クリックでチェックマークを付けて「削除」ボタンで削除します。
![clipboard-202005211632-1d5j1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637459/0a3a2741-e2cf-7a5e-7884-115c3d6f52c4.png)


ログを削除したらスタジオに戻ってプロセスを削除します。
![clipboard-202005211637-obtyf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637459/6cf26358-95e5-034d-9b60-4eccc6de2f23.png)


これでプロセスを削除できました。
![clipboard-202005211628-sicvr.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637459/0e14867d-94dc-7676-040a-8d85d40f44b0.png)


## 「DELETE ステートメントは～」のエラー
セッションが残った状態でプロセスを削除しようとした時に発生するエラーです。
例えば、以下のような手順を踏むと発生します。

①「DeleteTest1」をセッション実行
②「DeleteTest1」をリタイア
③「DeleteTest1」をリタイア状態から復帰（管理画面でリタイア済みのプロセスからアクティブなプロセスへドラッグ＆ドロップすると復帰させることができます）
④ アーカイブから「DeleteTest1」のログを削除
⑤「DeleteTest1」を削除

この状態から削除することはできないので、[リタイア](#リタイア)を利用します。

## さいごに
今回はプロセスを削除する方法を2つ紹介しました。
①[リタイア](#リタイア)
②[データベースデータの削除](#データベースデータの削除)
ぜひ活用してみて下さい。
MongoDB を手動で起動

MongoDB を手動で起動する方法です。

```bash
mkdir /tmp/mongodb
sudo  /usr/bin/mongod -dbpath /tmp/mongodb
```

クライアントから接続

```bash
mongo
```

参考
[MongoDB のスーパーユーザーの作成方法](https://qiita.com/ekzemplaro/items/820a0482c60865ff186e)
PHPで型宣言

PHP7以降型宣言充実しており
7.4でかなり良くなり、型宣言する機会が増えたので、まとめ

#1.引数の型(タイプヒンティング)

```php:
// int型のみ
function hoge(int $num)
{
    echo $num;
}
// デフォルト値
function hoge(int $num = 0)
{
    echo $num;
}
// null許容型
function hoge(?int $num)// int $num = nullも可
{
    echo $num;
}

// オブジェクト(ex.Laravel)
function hoge(Request $request)
{
    echo $request->hoge;
}

```

#返り値(戻り値)

```php:
// int型のみ
function hoge(int $num): int
{
    return $num;
}

// null許容
function hoge(?int $num): ?int
{
    return $num;
}

// オブジェクト(ex.Laravel)
function hoge(Request $request): Request
{
    return $request;
}

// void(returnしないメソッド)
function hoge(Request $request): void
{
    echo $request->hoge;
}

```

#プロパティ(クラス変数)

```php

class User
{
    // intのみ
    protected int $age;
    // デフォルト
    protected string $name = 'hoge';
    // null許容
    protected ?string $address;
    // オブジェクト
    protected Request $request;
}
```

せっかく7.4使ってるのにいまだにタイプヒントすらないところも多々あるので積極的に使っていきたいところ
Node.js, npm, yarn, gitの環境構築+コマンド解説

EC2にフロントエンド開発ができる環境構築をしていくぞ〜〜
あわせてコマンドが色々わからなかったので解説もしてみる
ところどころ間違えてそうなので直してほしい

別にAWSじゃなくても、ローカルPCに環境構築するのでも同じだと後から気が付きました
なので、ローカルに環境構築したい人の参考にもなるはず

環境: AWS Linux 
（WindowsとかMacOSの人はこの記事は参考にならないよ）

:zap:コメント大歓迎:zap:

## EC2インスタンスの立ち上げ & 接続

インスタンスを作ってなかったら[こっちの記事の1-4](https://qiita.com/jesuissuyaa/items/b0932540cc16edec6f03)を見てね
ここから先は、ターミナルからインスタンスにSSHで接続してる前提でいきます

## gitのインストール

```
sudo yum install git
```

`yum`はAWS Linuxのパッケージマネージャーで、macOSの`brew`みたいなやつ
Linux系だと`apt-get`とかもあるけど、このインスタンスでは`yum`を使ってパッケージをインストールする


## Node.js & npm のインストール

[AWSの公式](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html)の手順でやっていく

流れ: nvmインストール :arrow_right: Nodeインストール（npmも一緒に入る）

```
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
```

:warning: nvmのバージョンに応じて`v0.34.0`のとこは変えてね
執筆時点だと、nvmの最新バージョンはv0.35.3だったんだけど、AWSのdocsがv0.34.0だったので、とりあえずそっちに従ってみた

- `curl`: ネットワーク上でデータを転送するためのコマンド （[Wikipedia](https://en.wikipedia.org/wiki/CURL)より翻訳）
- `-o` オプション: 出力先を指定する
- `-` 引数: stdout (標準出力)を意味する引数(argument)
- `|`（「パイプ」と読む）: パイプの前にあるやつをパイプの後にあるやつに流す。つまりパイプ
- `bash`: このターミナル/シェル/黒い画面のことを指す

`-o`の使い方は、例えば `curl -o "filename.txt" http://www.hoge.com/hogehoge.sh`だったら、`hogehoge.sh`を`filename.txt`に出力する

このコマンドでやってることは、
nvmのインスールスクリプトをインストールするためのシェルスクリプトを`https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh`からダウンロードする
:arrow_right: シェルの標準出力に出す
:arrow_right: `nvm.sh`が入る

```
. ~/.nvm/nvm.sh
```

`nvm.sh`が入ったのでこのシェルスクリプトを実行して、nvmをインストール

`.`は`source`と同じで、シェルスクリプトを実行するコマンド
ここでは`~/.nvm/nvm.sh`にあるファイルを実行している

```
nvm install node
```

nvmでnodeをインストールする
（npmとかyarnと同じ構文）

```
npm i -g yarn
```

npmが入ったので、npmを使ってyarnを入れる
※yarn公式では非推奨のやり方。今回は力尽きたのでこの方法でやった

## VSCodeで開発

Remote-SSHプラグインを入れる
VSCodeのExtensionsから探すか、[ここ]((https://code.visualstudio.com/docs/remote/ssh)からダウンロードする

SSH接続は[公式](https://code.visualstudio.com/remote-tutorials/ssh/getting-started)に書いてあるとおりにやります

1. F1キーを押して Remote-SSH: Add New SSH Hostを選択
2. `ssh -i <.pemファイルへのパス> ec2-user@<インスタンスのIP>`を入力
3. config fileを聞かれるので、適当に選ぶ（わたしは/etc/ssh/ssh_configがドロップダウンの中にあったので、それにした）
4. 左のタブのファイル >  「Open Folder」ボタンで、**リモート**のフォルダを開く

:warning: 4でリモートじゃなくてローカルのフォルダが開いちゃったら、ローカルに接続したままなので接続しなおす（F1キー :arrow_right: Remote-SSH: Connect to Host）

参考までのスクショたち :arrow_down:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430849/9a3f9f7a-e16d-419b-6384-1ebb2e227472.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430849/a200c812-4cc6-697f-0f9f-6d035ff53693.png)

SSH接続してると、左下に接続先が表示される

## おわり

あとは、`git clone`とかでソースコードをリモートにおいて、リモートにSSHしたVSCodeで開発すればok :tada:


## おまけ

`yarn`しようとしたらこんなエラーが出た :arrow_down:

```
make: g++: コマンドが見つかりませんでした
```

くわしく調べなかったけど、C++コンパイラがインストールされてなかったせいらしい
[この記事](https://mebee.info/2019/11/06/post-1998/)を参考にこのコマンドを叩いたら治った

```
sudo yum -y install gcc-c++
```
Macのバタフライキーボードのキーが取れてしまう問題の対応方法について

## 前提
バタフライキーボードでは、[「よく使うキーが外れてしまう」「ほこりが溜まって押し心地が悪くなる」問題が起きやすいです。](https://support.apple.com/ja-jp/HT205662) コロナ前ならAppleに持っていけば直してくれるんですが今は臨時休業中です。

## 結論
キーボードカバーを付けましょう。キーボードカバーを付けることによって全く気にならなくなりました。
安いものなら1000円ほどで買えます。

私は `MacBook Pro(13-inch, 2016)` を使用していて、下記のカバーを買いました。
https://www.amazon.co.jp/gp/product/B06ZYBSSR3/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&th=1

## 後述
定期的にキーが外れると集中しづらく仕事の質が悪くなりますので、本当にオススメです。
また、本記事はプログラミングに関する知識とは微妙にずれていますが、職場の人も同じ事象でストレスを感じていまして、そういった人が他にも多いのではないかと思い記事にさせていただきました。
AndroidStudioのKotlinで演算を試す

#Kotlinの演算を試す

AndroidStudioの空のアクティビティで演算を試して見ましょう

```MainActivity.kt
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val tvMain = findViewById<TextView>(R.id.tvMain)
        var i: Int = 0
        i =  i + 1
        tvMain.setText(i)
    }
}
```

1.変数をiを定義して0で初期化
2.i と 1 を加算した結果を i に代入
3.i を表示するテキストとして設定

手順3の所で実は**勝手に変換**が行われていますので少し修正します。

```MainActivity.kt
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val tvMain = findViewById<TextView>(R.id.tvMain)
        var i: Int = 0
        i =  i + 1
        tvMain.setText(i.toString())
    }
}
```

**tvMain.setText(i)**をやめて**tvMain.setText(i.toString())**とします。

setTextの引数は文字列なのですがInt型のiを渡してもエラーになりませんでした。
~~これは型が異なるときに型を変換する処理が自動的に追加されたためです。~~
~~勝手に変換されることは最初につまづきやすいのでしっかり変換を覚えておきましょう。~~
これはsetTextが多重定義（オーバーロード）になっており Int型も引数で定義しているためとの指摘がありましたので修正します。

| 演算  |  例その1 | 例その2 |
|:--------|---:|:------:|
|加算| i + 1| i.plus(1)|
|減算|i - 1|i.minus(1)|
|乗算|i * 2|i.times(2)|
|除算|i / 2|i.div(2)|
|余り|i mod 2|i.mod(2)|

例その2は変数の型**Int**が持っている演算用関数のようなものです。
覚えておくと後々便利なことがあります。

##文字列テンプレート
変数の中身だけ表示されるのはちょっと味気ないので **i = 1**のように表示してみましょう。

```kotlin.kt
 tvMain.setText("i = " + i.toString())
```

文字列をつなげられる言語を習得済みなら 文字列と文字列を足せばよいというのがわかります。
しかしKotlinにはもっと良い方法があります。

```kotlin.kt
 tvMain.setText("i = $i")
```

スッキリとした書き方になりました。文字列テンプレートというみたいです。文字列の中で **$変数名** と記述するとその変数の中身に変換されます。PHP言語にも似たようなのがありますね。

では iを2倍にした値を表示してみましょう

```kotlin.kt
 var i: Int = 3
 tvMain.setText("i = $i*2")  // 結果は i = 3*2
```

$iが3に変換されたのでこのような結果になります。

そのような場合には

```kotlin.kt
 var i: Int = 3
 tvMain.setText("i = ${i*2}")  // 結果は i = 6
```
${}という文字列テンプレートを使用するとその中で処理が行われて結果が文字列内に埋め込まれます。
演算以外にも関数呼び出しも使えます。

これで様々な演算を試すことが出来ます。

この変換が行われるのは文字列型の変数に、その場所で指定された定数（生の文字列）を代入するときだけです。文字列の中に偶然 **$i** があったとしても変換されることはありません。

##複数行の文字列
Kotlinには複数行の文字列を見た目のまま代入出来る便利な方式があります。

```kotlin.kt
        val str2 : String = """先頭の行
2行目
3行目
最後の行"""
```

**結果**
先頭の行
2行目
3行目
最後の行

""" と """ で囲まれた部分は「"」でも何でも文字列になります。

先ほどの文字列テンプレートで計算式を返すサンプルで終わります。

```kotlin.kt
        var i: Int = 3
        var str : String = """
i = $i
i + 2 = ${i+2}
i - 2 = ${i-2}
i * 2 = ${i*2}
i / 2 = ${i/2}
i % 2 = ${i%2}
"""
        tvMain.setText(str)
```
[備忘録] ius-release.rpmのアドレスが変わっててDockerのビルドに失敗した(Cannot open: https://centos7.iuscommunity.org/ius-release.rpm. Skipping.)

# ius-release.rpmにアクセスできない
Dockerを別のマシンでビルドしようと思い、git cloneしてからdocker-compose叩いたら何故か失敗した。

```
Cannot open: https://centos7.iuscommunity.org/ius-release.rpm. Skipping.
```

まずググるとcurlのバージョンが低いとhttpsが開けないというのがあったが、これは関係ない。
で、直接`https://centos7.iuscommunity.org/ius-release.rpm`を打ち込んでみると・・・
<img width="309" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629456/2533bbec-9d8f-5965-82f3-c09ec65f26e8.png">

というわけで`https://github.com/iusrepo/announce/issues/18`にアクセスすると、アドレスが変わったとありました。
ここ！
https://repo.ius.io/ius-release-el6.rpm
https://repo.ius.io/ius-release-el7.rpm

Python関係でここを使ってビルドをしているコンテナって多いと思うので、これに引っかかるケースって増えそう・・
どうやら変わったのは5日前(2020/5/20)らしい。そりゃググっても出てこないわけだ。
<img width="562" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629456/06165c99-acda-6c03-17bc-7905077e2065.png">
今日覚えた Visual Studio Code のショートカット「タブや画面領域の有効活用」

VSCode でマウスでぽちぽちやってることで、毎日やっててだるいなぁと思うものをちょっとずつショートカットに置き換えていきたいと思います。

今日覚えたのは、以下のショートカット

- `Ctrl + 数字`
- `Ctrl + Tab`
- `Ctrl + B`

順番に見ていきましょう

## Ctrl + 数字

`Ctrl + 0` でサイドバーにフォーカスを当てます。`Ctrl + 1` でエディターの一番左のエリアにあるところにフォーカスをあてます。`Ctrl + 2` は左右にエディターを分割していると右側にフォーカスが当たります。`Ctrl + 3, 4, 5` は想像通りに動くと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70288/d15b5747-5cf2-b23f-c340-2485e85b3ee1.png)

## Ctrl + Tab

複数タブを開いているときにタブを切り替えます。

![ctrltab.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70288/52c3816b-a896-f0f2-5c1c-0c8cfbe2de9f.gif)


## Ctrl + B

サイドバーの表示・非表示を切り替えます。捗る。

![ctrlb.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70288/ed6dea4b-05f0-109c-e8ed-6c36a84b366d.gif)

## まとめ

一気に全部のショートカットを覚えてつかうのは無理なので、ちょっとずつ調べておぼえていこう。
Ionic4,Ionic5でのAndroidの戻るボタンの無効化、およびカスタムイベントの設定

AndroidにはiPhoneにはない物理的な戻るボタンが存在します。
本記事ではIonicプロジェクトでこの戻るボタンを無効化する方法をまとめます。

##Ionic3以前

Ionic3の環境で試していないですが`Platform`の`registerBackButtonAction`メソッドを使用することで制御できるようです。


##Ionic4からregisterBackButtonActionが使えない問題

Ionic3の`Platform`にあった`registerBackButtonAction`メソッドがないので、Androidの戻るボタンを上書きすることができません。
移行のドキュメントに記載が見当たりませんでしたが、3から4以降へバージョンアップする際にソースコードを修正する必要があります。

ここら辺の話がIonic4betaのissuesに挙がっています。
[GitHub - When platform hardware backButton subscribed, router.goBack should not be triggered](https://github.com/ionic-team/ionic/issues/15820)

このissuesに対応するため`subscribeWithPriority `が実装されています。Androidの戻るボタンの制御の問題はこのメソッドを使用することで解決できます。
[GitHub - feat(angular): observer based api to override hardware back button](https://github.com/ionic-team/ionic/commit/6a5aec8b5d76280ced5e8bb8fd9ea6fe75fe6795)

##subscribeWithPriorityの利用方法
###アプリ全体で戻るボタンを制御したい場合
ルートコンポーネントで戻るボタンをオーバーライドするだけで、戻るボタンが無効化されます。

```app.component.ts
this.platform.ready().then(() => {
  this.platform.backButton.subscribeWithPriority(
    10000,
    () => {
      // something...
    }
  );  
});
```

###一部のページで戻るボタンを制御したい場合
一部のページで戻るボタンをオーバライドする場合はページコンポーネントのライフサイクルの入口でオーバーライドし、出口で解除を行います。
アプリに適切なライフサイクルイベントで解除を行なってください。

```sample-page.ts
import { Subscription } from 'rxjs';

export class SpeakerDetailPage {
  backButtonSubscription: Subscription;

  ngOnInit() {
    this.backButtonSubscription = this.platform.backButton.subscribeWithPriority(
      10000,
      () => {
        // something...
      }
    );
  }
  ngOnDestroy() {
    this.backButtonSubscription.unsubscribe(); // subscribeWithPriorityを解除
  }
}
```
ESLint v7.1.0

前 [v7.0.0](https://qiita.com/mysticatea/items/0931a7d910fcb91733ee) | 次 [v7.2.0](https://qiita.com/mysticatea/items/9215050e4546c1e2d486)

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">ESLint v7.1.0 has been released! 🎉<a href="https://t.co/r2Dk1UBQoy">https://t.co/r2Dk1UBQoy</a></p>&mdash; ESLint (@geteslint) <a href="https://twitter.com/geteslint/status/1264009245999202307?ref_src=twsrc%5Etfw">May 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ESLint `7.1.0` がリリースされました。小さな機能追加とバグ修正が含まれています。

また、公式のサポートチャット (英語) が Gitter から Discord に移動しました。日本語の方も移動予定です。

質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。

> 🏢 [日本語 Issue 管理リポジトリ](https://github.com/eslint/eslint-jp)
> 👫 [日本語サポート チャット](https://discord.com/channels/688543509199716507/718026066001788958) ([招待リンク](https://discord.gg/wfTnWvE))
> 🏢 [本家リポジトリ](https://github.com/eslint/eslint)
> 👫 [本家サポート チャット](https://discord.com/channels/688543509199716507) ([招待リンク](https://eslint.org/chat))

---

[PR] ESLint は開発リソースを確保するための寄付を募っています。
応援してくださると嬉しいです。

- [ESLint の GitHub Sponsors](https://github.com/sponsors/eslint)
- [私個人の GitHub Sponsors](https://github.com/sponsors/mysticatea)

---

# ✨ 本体への機能追加

特になし

# 💡 新しいルール

## [no-loss-of-precision](https://eslint.org/docs/rules/no-loss-of-precision)
🔖 [#12747](https://github.com/eslint/eslint/pull/12747)

`number` 型 (IEEE 754: 64bit 浮動小数点数) で表現できない桁数の数値リテラルを警告するルールです。

```js:例
/*eslint no-loss-of-precision: error */

//✘ BAD
const a = 9007199254740993
const b = 5123000000000000000000000000001
const c = 1230000000000000000000000.0
const d = .1230000000000000000000000
const e = 0X20000000000001
```

» [Online Demo](https://eslint.org/demo#eyJ0ZXh0IjoiLyplc2xpbnQgbm8tbG9zcy1vZi1wcmVjaXNpb246IGVycm9yICovXG5cbi8v4pyYIEJBRFxuY29uc3QgYSA9IDkwMDcxOTkyNTQ3NDA5OTNcbmNvbnN0IGIgPSA1MTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxXG5jb25zdCBjID0gMTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wXG5jb25zdCBkID0gLjEyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcbmNvbnN0IGUgPSAwWDIwMDAwMDAwMDAwMDAxXG4iLCJvcHRpb25zIjp7InBhcnNlck9wdGlvbnMiOnsiZWNtYVZlcnNpb24iOjExLCJzb3VyY2VUeXBlIjoibW9kdWxlIiwiZWNtYUZlYXR1cmVzIjp7fX0sInJ1bGVzIjp7fSwiZW52Ijp7fX19)

# 🔧 オプションが追加されたルール

特になし
KPIとは

#KPIとは
https://udemy.benesse.co.jp/marketing/kpi-meaning.html

> KPIは（Key Performance Indicator）の略称で、日本語では「重要業績評価指標」と言われます。経営にはさまざまな種類の業績評価指標が使われますが、KPIはその中でも「キー（重要な）」となる指標で、目標の達成に向かってプロセスが適切に実行されているかどうかを計測する役割があります。

> KPIは通常、一定の期間が定められて計測されます。通常は月次、スピードの速い企業では週次、日次で計測されるところもあります。期間ごとにパフォーマンスが評価され、成績が悪い場合は対策が取られたり、改善策の策定と実施を求められます。

KGI：組織が目指すゴール設定・・・例）企業全体の年度目標
KPI：細分化された中間目標の設定・・・例）各部署で設定するKGI達成に向けた目標

##AWSの管理とガバナンスのビデオを使用して、ガバナンスとビジネスの俊敏性を向上させる
https://aws.amazon.com/jp/blogs/field-notes/improve-governance-and-business-agility-using-aws-management-and-governance-videos/
Javaのコンソールへの入力

###コンソールへの入力
コンソールに値を入力し、その値をプログラム内で使うことです。
コンソールへの入力を受け取るにはScannerというライブラリを使います。
Scannerは「import java.util.Scanner」を使います。
【例】

```Main.java
import java.util.Scanner;
class Main {
  public static void main(String[]args) {
  Scanner scanner = new Scanner(System.in);  //Scannerで初期化
  String name = scanner.next();  //文字列の入力の受け取り
  }
}
```
new Scanner(System.in)；で初期化します。
scanner.next();で文字列の入力を受け取ります。
###Scannerの使い方
まずScannerを初期化しscannerという変数にいれています。
Scannerではこの初期化したものを代入した変数を使ってメソッドを呼び出します。
scanner.next()で、コンソールに入力された文字列を受け取ります。
【例】

```Main.java
import java.util.Scanner;
class Main {
  public static void main (String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("名前： ");
    String name = scanner.next();
    System.out.println(name + "さん");
  }
}
```
上記を実行すると「名前：」と出るので、そこで文字列を入力すれば、〇〇さんと出力されます。
####数値の入力を受けとり方
先ほどと同様にScannerを使います。
整数を受け取るメソッドはnextIntメソッド、小数を受け取るメソッドはnextDoubleメソッドを使います。
【例】

```Main.java
import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    
    System.out.print("名前：");
    String firstName = scanner.next();

    System.out.print("名字：");
    String lastName = scanner.next();

    System.out.print("年齢：");
    int age = scanner.nextInt();  //nextIntメソッドで整数を受け取ります
    
    System.out.print("身長(m)：");
    double height = scanner.nextDouble();  //nextDoubleメソッドで少数を受け取ります
    
    System.out.print("体重(kg)：");
    double weight = scanner.nextDouble();
    
    Person.printData(Person.fullName(firstName, lastName), age, height, weight);
  }
}
```
マイライブラリ：レスポンシブデザイン（ブレークポイント、フレックスボックス）

Mana本

メディアクエリはCSSに記述する。

**■ブレークポイント**

デザインを切り替えるポイントとなる画面サイズをブレイクポイントと言う。
ブレイクポイントをいくつに設定するかとりあえず以下で！！
https://hashimotosan.hatenablog.jp/entry/2019/05/28/164834

**◎560px未満をスマホと設定**

```
@media (max-width:560px) {}
```

**◎960px未満をタブレットと設定**

```
@media (min-width:561px) and (max-width:960px) {}
```

**■フレックスボックスの並びの変更**
https://qiita.com/abetack/items/6f036cdc27aa5150c28b

下のようなフレックスボックスの親要素の場合

```
.page-header{
  display:flex;
  justify-content: space-between;
}
```

それをメディアクエリで560px以下の場合は、子要素を縦並びにして中央揃えにすると

```
.page-header{
  flex-direction:column;
  align-items:center;
}
```

通常はjustify-contentで横並びの均等配置
560px以下の場合はalign-itemsで縦並びの中央揃い

**■グリッドレイアウトの場合**

grid-template-columnsプロパティの値で、自動の列数を変えたり、画像1枚の最低値をセットできる。
下は、自動整列で、最低画像サイズ240px。

```
.gird{
 display:grid;
 gap:26px;
 gird-template-columns:repeat(auto-fit,minmax(240px,1fr));
}
```
Eclipse setting memo

###Using bash in Terminal

Preference > Local Terminal setting 

<img width="746" alt="Screen Shot 2020-05-24 at 9.22.41 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504139/aa155bbf-262c-a8c1-c154-c8ccb173c653.png">

Launch Terminal 

<img width="232" alt="Screen Shot 2020-05-24 at 9.19.23 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504139/afe017c2-d973-84b8-16e8-58b0e3a4f71f.png">

select left one

Choose local terminal


###Setting Symbols
ProPerties > C/C++ General > Paths and Symbols
<img width="1127" alt="Screen Shot 2020-06-09 at 11.23.40 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504139/c30a0df5-f3da-4623-6649-b622a00a5568.png">
Defcon DFIR CTF 2018 HR Server - Attribute ID 2

#問題

https://defcon2018.ctfd.io/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/94b859bd-1ceb-5aac-7445-ee52d1b587c7.png)

HRサーバー-属性ID
2

\$UsnJrnlというファイル名を持つMFTエントリの名前付き$Jデータ属性のMFT属性IDは何ですか？

[形式は整数です]

#解いてみた

\$Jのidを答える問題。
\$Jというのはいまいちよくわかってませんが、特殊なファイルで$UsnJrnlっていうファイルっぽい雰囲気の中に入ってるファイルです。。。

FTK Imagerを使ってイメージを読み込みます。
\\[root]\\\$Extend\\\$UsnJrnlの中を見ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/9b2b808c-c561-9b47-92e3-b2c4de386e3a.png)

\$UsnJrnlっていうのが一見ファイルのアイコンになってるんですが、その中に入ることができて、そこに\$Jがあるという仕組みなんです。

fteを使って抽出したMFTのデータの中には$Jは入ってません。
そしてFTK Imagerでも属性IDというのは見えません。

属性IDを見るにはActive@ Disk Editorっていうソフトを使用すれば見れます。

Active@ Disk Editor
https://www.disk-editor.org/index.html

ただ、e01ファイルを直接読み込めないので一旦ほかのソフトでマウントする必要があります。
FTK imagerでマウントしてDisk Editorで中身を見ようと思ったんですが、なぜか失敗してしまいました。
なのでArsenal Image Mounterでマウントしなおします。

Arsenal Image Mounter
https://arsenalrecon.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/6d905454-bb0e-d4c9-de17-7d0386500646.png)

この状態で再度Disk Editorで中身を見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/bfa89f3c-5bef-a355-737a-ab5bb92f591c.png)

見れました。
見れたらMFTレコードの中から\$UsnJrnlを探します。

検索機能を使用して\$UsnJrnlを探します。
勢いあまってANSIに「\$UsnJrnl」と入力してしまうとヒットしないので注意してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/622558d6-e304-1672-e0bc-bc700cc0db58.png)

\$UsnJrnlの文字列のちょっと前にFILE0という文字列があればMFTレコードです。
黄色い部分を見ると\$Jの文字もあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/74610ff3-d0bd-c0d4-2866-a90534f87071.png)

黄色い部分にフォーカスして、左のnameの項目のAttribute IDを確認すると答えがわかりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/a0e779c9-b109-345c-2cf9-47bcbe7fddb5.png)
Basic 4ログイン


```
	implementation('org.springframework.boot:spring-boot-starter-security')
```

```
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http
			.authorizeRequests()
				.antMatchers("/", "/home").permitAll()
				.anyRequest().authenticated()
				.and()
			.formLogin()
				.loginPage("/login")
				.permitAll()
				.and()
			.logout()
				.permitAll()
		   .and().csrf().ignoringAntMatchers("/h2-console/**")//don't apply CSRF protection to /h2-console
           .and().headers().frameOptions().sameOrigin();//allow use of frame to same origin urls
	}

	@Bean
	@Override
	public UserDetailsService userDetailsService() {
		UserDetails user =
			 User.withDefaultPasswordEncoder()
				.username("user")
				.password("password")
				.roles("USER")
				.build();

		return new InMemoryUserDetailsManager(user);
	}
}
```

```

@Configuration
public class WebMvcConfig implements WebMvcConfigurer{
	public void addViewControllers(ViewControllerRegistry registry) {
		registry.addViewController("/login").setViewName("login");
	}
}
```

```
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
      xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
    <head>
        <title>Spring Security Example </title>
    </head>
    <body>
        <div th:if="${param.error}">
            Invalid username and password.
        </div>
        <div th:if="${param.logout}">
            You have been logged out.
        </div>
        <form th:action="@{/login}" method="post">
            <div><label> User Name : <input type="text" name="username"/> </label></div>
            <div><label> Password: <input type="password" name="password"/> </label></div>
            <div><input type="submit" value="Sign In"/></div>
        </form>
    </body>
</html>
```

```
  <form th:action="@{/logout}" method="post">
            <input type="submit" value="Sign Out"/>
        </form>
```

```
https://github.com/cloudinary/cloudinary_java/tree/master/samples/photo_album/src/main/java/cloudinary


   .and().csrf().ignoringAntMatchers("/h2-console/**")//don't apply CSRF protection to /h2-console
                  .and().headers().frameOptions().sameOrigin();//allow use of frame to same origin urls
```
AWS Update 5/22

# AWS Systems Managerパラメータストアを使用してAWSアベイラビリティーゾーンとローカルゾーンをクエリする

> お客様は、AWSリージョン、サービス、エンドポイントに関する情報に加えて、AWSアベイラビリティーゾーンとローカルゾーンに関する情報にプログラムでアクセスできるようになりました。AWSのお客様は、AWSアベイラビリティーゾーン、ローカルゾーンの完全なリストに簡単にアクセスし、AWS Systems Managerパラメーターストアにクエリを実行することで、リージョン内で利用可能なサービスを見つけることができます。  

> パラメータストアはSystems Managerの機能で、アプリケーション構成データ用の安全な集中ストレージを提供します。AWSサービスは、AMI IDやリージョンなどの一般的なアーティファクトに関する情報を公開パラメーターとして公開します。利用可能なパブリックパラメータを検索して、スクリプトとコードから呼び出すことができます。今回のリリースにより、AWSアベイラビリティーゾーンとローカルゾーンをクエリできるようになりました。パブリックパラメータには、AWSコマンドラインインターフェイス（CLI）、AWS Tools for Windows PowerShell、または任意のAWS SDKを使用してアクセスできます。 

##AWS のサービス、リージョン、エンドポイント、アベイラビリティーゾーン、ローカルゾーンのパブリックパラメータの呼び出し

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/parameter-store-public-parameters.html

以前より便利になったのかな？

#AWSソリューション：Spark Streamingを使用したリアルタイム分析で、Spark SQL、データフレームなどがサポートされるようになりました
> AWSは、Apache Spark StreamingとAmazon Kinesisを活用するAWSクラウドに高可用性で費用効果の高いバッチおよびリアルタイムデータ分析アーキテクチャを自動的にデプロイするAWSソリューションであるSpark Streamingを使用したリアルタイム分析を更新しました。このソリューションは、カスタムApache Sparkストリーミングアプリケーションをサポートするように設計されており、動的にスケーラブルなAmazon Elastic Compute Cloud（Amazon EC2）インスタンス全体で膨大な量のデータを処理するためにAmazon EMRを活用します。

> このソリューションには、最新バージョンのSparkを使用する更新されたコンシューマーアプリケーションが含まれ、最新の機能（Spark SQLやDataFramesなど）、きめ細かなカスタムIAMポリシー、保存時の暗号化（デフォルト）、VPCへのフローログ、サンプルSparkストリーミングアプリケーションの移植Java（Scalaから）、およびPythonのバージョン3.8への更新、Amazon EMRのバージョン5.29.0への更新など、いくつかのメンテナンスアップグレード。AWSでのSpark Streamingによるリアルタイム分析の詳細については、ソリューションのWebページを参照してください。

##Spark Streaming を用いたリアルタイム分析
https://aws.amazon.com/jp/solutions/real-time-analytics-spark-streaming/

#AWS CodeBuildテストレポートが一般提供になりました
> AWS CodeBuildのテストレポートのサポートが、本番環境での一般提供を開始しました。テストレポートは、CodeBuildでのテスト実行の詳細で実用的なビューを提供し、テストの失敗を簡単に調査できるようにします。

> テストのレポートには、過去の傾向、集約メトリック、またはAWS CodeBuild上で実行されたテストのためのテスト失敗の詳細を表示することができます。これらの機能は、JUnit、Cucumber、TestNG、またはTRXのファイルを出力するすべてのテストフレームワークでサポートされています。2019年11月に発表されたテストレポートベータ版以降、レポートグループのタグ付けのサポートと2つの追加のテストフレームワーク（TestNGおよびTRX）が導入されました。あなたは、あなたへの参照が含まれ、「レポート」セクション追加してbuildspecファイルを更新することで始めることができレポート・グループとテスト結果ファイルのパスを。

##AWS CodeBuild でのテストレポートの使用
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/test-reporting.html

> ビルド時に実行したテストの詳細を含むレポートを AWS CodeBuild で作成できます。単体テスト、設定テスト、機能テストなどのテストを作成できます。テストファイル形式は、JUnit XML または Cucumber JSON にすることができます。これらの形式 (たとえば、Surefire JUnit プラグイン、TestNG、Cucumber) のいずれかでファイルを作成することができる任意のテストフレームワークを使用してテストケースを作成します。

> テストレポートを作成するには、ビルドプロジェクトの buildspec ファイルにテストケースに関する情報を含むレポートグループ名を追加します。ビルドプロジェクトを実行すると、テストケースが実行され、テストレポートが作成されます。テストを実行する前にレポートグループを作成する必要はありません。レポートグループ名を指定すると、CodeBuild はレポートの実行時に自動的にレポートグループを作成します。既に存在するレポートグループを使用する場合は、buildspec ファイルでその ARN を指定します。

> テストレポートを使用すると、ビルドの実行中に問題をトラブルシューティングできます。ビルドプロジェクトの複数のビルドから多数のテストレポートがある場合、テストレポートを使用してトレンドやテストと失敗率を表示し、ビルドを最適化できます。

> レポートは、作成から 30 日後に有効期限が切れます。期限切れのテストレポートは表示できません。30 日以上テストレポートを保持する場合は、テスト結果の生データファイルを S3 バケットにエクスポートできます。エクスポートされたテストファイルは期限切れになりません。S3 バケットに関する情報は、レポートグループを作成するときに指定します。

#
Raspberry Piの起動時にローカルIPをディスプレイに表示する

自分へのメモ書き。

# 背景
- Raspberry Piに一体化して使える3.5インチのタッチスクリーンを使用している
    - https://www.amazon.co.jp/dp/B075K56C12/
- RaspbianをインストールしてGUIアプリを表示させたりして遊んでいるが、画面が小さすぎてコンソールとか表示して作業するのはつらいので、各種作業はSSH越しにCUIで行っている
- モバイルバッテリとWi-Fiで運用
- DHCPサーバの設定で固定IPを配ればいいのだが、諸事情で今のところローカルIPが固定できていない
- SSHログインするときにたまにローカルIPが変わっていてくやしい
- IP調べるのに細かい画面を見ながら作業するのが億劫

# 目的
起動時に自分のIPをディスプレイに表示してほしい

（以前似たようなのをTwitterAPIで作った気がするが、今回はローカルIP）
[TwitterのDM botをpollingベースで作ってみる（TwythonやめてRequestsでAPI直叩きにしてみた）](https://qiita.com/y_uehara1011/items/22c680ea0e0b13c7942b)


# 手段
面倒なことをしたくなかったので、Zenityで単純なダイアログを画面に表示するだけにする。
（そのうちSlackに投稿したりするのを作ってみたい）

こんな感じ

1. cronでraspbian再起動時に自動実行
2. ipコマンドを使ってIPを取得
3. 適宜整形してZenityでダイアログ表示 

## IP取得
ipコマンドで取得した情報には色々くっついてくるので、IPアドレス以外は削る
（有線LAN側のIPを取りたければwlan0をeth0に変更）

```sh
$ ip -4 addr show wlan0 | grep -o "inet [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" | grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"
```

起動直後はxが上がっていなかったりするので、アドホックだが60秒待ってから実行することにする（ついでなので無線＋有線両方取得する）

```get_local_ip.sh
sleep 60
echo -n "eth0: "
ip -4 addr show eth0 | grep -o "inet [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" | grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"
echo -n " "
echo -n "wlan0: "
ip -4 addr show wlan0 | grep -o "inet [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" | grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"
```

## ダイアログ表示

zenityを使用する。zenityはGNOMEのユーティリティで

```sh

$ zenity --info --text="hoge"
```

のように指定すると簡単なダイアログを表示してくれるので、
上記スクリプトの標準出力をxargsに食わせて--text=の後に与えてあげればいい。
xargsの-Iオプションで引数置換ができるので、

```sh

$ get_local_ip.sh | xargs -I{} zenity --display=:0 --info --text={}
```

こんな感じでOK。SSH越しに叩くことも考えてディスプレイも明示的に指定しておく。


## cronで起動時に自動実行
cronを編集する。初回は編集に使用するエディタを聞かれるので適当にnanoあたりを選ぶ

```sh

$ crontab -e
```

`@reboot`と指定するとraspbianの起動時に実行してくれる。
（crondだけの再起動時にどうなるかはディストリによって異なるらしい。raspbanではcrondだけ再起動しても実行されない。） 

crontabに以下を記述

```sh

@reboot /home/pi/get_local_ip.sh | xargs -I{} zenity --display=:0 --info --text={} > /home/pi/zenity.log 2>&1
```
has_secure_passwordとは

#簡単に言うと？
安全性の高いパスワード機能を簡単に実装できるメソッド。
間違ったパスワードを入力させないように、二回パスワードを入力させるフォーム画面を作成するときに使える。

#何ができる？
has_secure_passwordを使うと以下の機能が使える様になる。

- ハッシュ化したパスワードをデータベース内のpassword_digestという属性に保存できるようになる。
- 2つのペアの仮想的な属性（passwordとpassword_confirmation）が使えるようになる。また、存在性と値が一致するかどうかのバリデーションも追加される 。
- 認証のために使うauthenticateメソッドが使えるようになる。authenticateメソッドとは、引数で受けとった文字列がオブジェクト内のpassword_digestと一致するか調べるためのメソッド。一致した時はそのオブジェクト自身を返し、不一致だとfalseを返す。


#どうやって使う？
1. テーブルのカラムに`password_digest`を導入する
2. Gemfileの`bcrypt`をコメントアウトして`bundle install`（Genfile内にコメントとして既に記述されているのでコメントアウトする）
3. モデルに`has_secure_password`を追加する
4. `password`と`password_confirmation`を使ってフォーム画面を作成する。


```
$ bin/rails g model user name:string password_digest:string
```

```app/model/user.rb
class User < ApplicationRecord

  has_secure_password

end
```

```Gemfile
gem 'bcrypt', '~> 3.1.7'

$ bundle install
```

```app/views/users/form.html.slim
= form_with model: user, local: true do |f|
  .form-group
    = f.label name, '名前'
    = f.text_field :name, class: 'form-control'
  .form-group
    = f.label :password, 'パスワード'
    = f.password_field :password, class: 'form-control'
  .form-gorup
    = f.label :password_cocfirmation, 'パスワード(確認)'
    = f.password_field :password_cocfirmation, class: 'form-control'
  = f.submit '登録する', class: 'btn btn-primary'
```








#####引用
[has_secure_passwordのvalidationsをカスタマイズする](https://qiita.com/Shantti-Y/items/19ea23b81f3421063fc5)
[Railsのhas_secure_passwordとは](https://qiita.com/shumpeism/items/4d8946ade2dbdccab31c)
[BCryptのすすめ](https://qiita.com/ponkotuy/items/1a703b866ddf5c9fe80c)
[Xcode]The maximum number of apps for free development profiles has been reachedと出てインストールできない。

##原因
自作のアプリやプロビジョニングプロファイルを削除しても、インストールに失敗する場合は無料枠プロファイルのカウント処理がバグっている可能性が高いです。

##対応

iPhoneをMacに繋いで、コンソールでログを表示しながら再度インストールを試してください。


1. Window->Devices and Simulators->対象のデバイスを選択してOpen Consoleボタンをクリックでログを表示
2. アプリを実行して対象デバイスへのインストールを試みてください。
3. `MIFreeProfileValidatedAppTracker`でログを絞り込んでください。

```
[MIFreeProfileValidatedAppTracker _onQueue_addReferenceForApplicationIdentifier:bundle:error:]: 182: This device has reached the maximum number of installed apps using a free developer profile: {(
    "<bundleid>",
    "<bundleid>",
    "<bundleid>"
)}
```

というようなエラーが出ているかと思います。


1. その一覧に表示されているアプリを削除または、再インストール
2. 自作アプリをインストール

の順番で実行してみてください。



## 情報源
https://stackoverflow.com/questions/61953293/the-maximum-number-of-apps-for-free-development-profiles-has-been-reached-xcode/61978102#61978102


3日ほど悩んだので取り急ぎ共有しました。
CloudFrontのSSL Certificate項目がグレーアウトで選択不可？原因はSSL証明書(ACM)をバージニア北部で発行していないから

AWSのCloudFront+S3+Route53で静的WEBサイトをSSLで公開しようと思ったところ、CroudFrontと独自ドメインの紐付けでハマった話です。

### 概要/環境
HTMLのファイルをS3で公開するように構築します。

* CloudFront
* S3
* Route53
* ACM(AWS Certificate Manager)

まずは、S3バケットを作って公開設定。次にCloudFrontを使ってS3とドメインを紐付け……

というところでハマりました。

S3でのHTMLファイルの公開方法等は下記サイトを参考にしてみてください。本記事では割愛します。
* [Amazon S3 で静的なウェブページを公開してみた。](https://hacknote.jp/archives/44286/)
* [CloudFront で S3 静的ウェブサイトホスティングを SSL/TLS に対応させる](https://dev.classmethod.jp/articles/tls-for-s3-web-hosting-with-cloudfront/)

### CloudFrontのSSL Certificate項目がグレーアウトしてた
さてS3の公開設定も終わり、CloudFrontの設定をしていると「SSL Certificate」という項目がグレーアウトしているんです。ここでCloudFrontとRoute53の独自ドメインを紐付けるはずなのに…。

![スクリーンショット 2020-05-25 9.26.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562723/614a47f9-2248-9629-43ae-f55c3b4bfc55.png)

んんん？？

[ACM](https://aws.amazon.com/jp/certificate-manager/)を確認しても、ちゃんとワイルドカード（*.hogehoge.com）で設定済み。

いろいろ検索した結果、リージョンが間違っていたことが発覚。

### CloudFrontでACMを利用する場合はバージニア北部でないといけない

いろいろ検索をしていたところ、AWSの公式で下記の文言を見つけました。

>Amazon CloudFront で ACM 証明書を使用するには、米国東部（バージニア北部） リージョンで証明書をリクエストまたはインポートする必要があります。CloudFront ディストリビューションに関連づけられたこのリージョンの ACM 証明書は、このディストリビューションに設定されたすべての地域に分配されます。

参考：[AWS Certificate Manager (ACM)-サポートされているリージョン
](https://docs.aws.amazon.com/ja_jp/acm/latest/userguide/acm-regions.html)

要は**「CloudFrontでSSL証明書を使いたいなら、ACMのリージョンはバージニア北部で設定してね」**ってこと。

先ほど「ワイルドカード（*.hogehoge.com）で設定済みだった」と書きましたが、たしかにACMは東京リージョンで設定されていました。

### ACMをバージニア北部リージョンで設定してみる
コンソール画面から[AWS Certificate Manager](https://console.aws.amazon.com/acm)ページを開く。

リージョンが「バージニア北部」になっていることを必ず確認してから、作成します。

![スクリーンショット 2020-05-25 9.30.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562723/8bccc0f0-919d-114e-3f90-8abac43f0496.png)

ドメインの設定は*(ワイルドカード)でOKです。
画像は ` *.hogehoge.com` でセットしています。

![スクリーンショット 2020-05-25 9.31.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562723/a81ba683-5454-d1c0-32db-4b3d3b6b459c.png)

あとは特に設定せずに次へ次へでOKです。
少し待てば状況が「発行済」になるので次に進みます。
![ACM証明書スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562723/5a9b6eee-d7a7-cf52-002b-03ad778b8e58.png)

### CloudFrontで設定できた！
ACM設定後にCloudFrontの設定に戻ったところ、「SSL Certificate」のグレーアウトが解除されて設定可能に！
![CloudFront設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562723/213dddbf-8cc2-b34f-e085-11ad8c32c965.png)

あとは選択肢に出てるものをクリックして保存でOK。

これでSSLドメインでS3へのアクセスが可能になります！

### まとめ
CloudFrontを使用する場合、ACMをバージニア北部で設定しなければならない。というのは盲点でした。

CloudFront自体はリージョンという概念はないのになーとちょっとしっくりこない部分もありますが、解決したのでヨシ！
Visual Studio Code + MarkDown で画面遷移図を描写しようとしたけどつまずいた時の話し

# 前置き

新しいプロジェクトにアサインされて、画面遷移図を見てみると
![画面遷移図.md - 未設定 (ワークスペース) - Visual Studio Code 2020-05-25 11.45.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223359/cd053490-7688-8db7-beef-28c031558165.png)
お、MarkDown で書かれてるのね。

なので、Visual Studio Codeを起動して、プレビュー表示してみたところ
![画面遷移図.md - 未設定 (ワークスペース) - Visual Studio Code 2020-05-25 11.47.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223359/c0f48842-d312-3ef5-be8e-e51d4a087b78.png)

![画面遷移図.md - 未設定 (ワークスペース) - Visual Studio Code 2020-05-25 11.53.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223359/38c09b88-1f97-0cb3-60d5-942022b3b8ca.png)
あれ？　描写されないぞ。。。

となったので、対応した時の手順のメモになります。


# 実際にやったこと

一先ず、アサインされた案件の方々にどうしたら良いか聞いてみたところ
![[7(1)]KDDI Chatwork - CONNECT_アプリ(Ph2_信用_投信_開発のみ) - Google Chrome 2020-05-25 11.57.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223359/98c31262-5fa8-2521-4359-c997f9fd77d8.png)
とか
![[7(1)]KDDI Chatwork - CONNECT_アプリ(Ph2_信用_投信_開発のみ) - Google Chrome 2020-05-25 11.57.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223359/419caa9a-d303-8617-0e7f-6cf45dc5238f.png)
とか回答いただけました。

まだ良く分かっていないですが、以下は必要そうだという事は分かりました。


## 「Markdown Preview Enhanced」をインストール 

いただいたリンクを確認してみる。
https://qiita.com/asuzuki2008/items/87c09a91cc53b15a7555

こちらの導入手順に記載してある内容を実施してみました。

![画面遷移図.md - 未設定 (ワークスペース) - Visual Studio Code 2020-05-25 12.03.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223359/859f99c0-d612-5d2c-93a2-de366e528a7b.png)


##  「Graphviz」をインストール

記載されているURLにアクセスしたんですが、私はパッケージファイルを見つけることができなかったので、同じような方は以下からダウンロードするのが良いかもしれません。
▼ Windows Packages
https://graphviz.gitlab.io/_pages/Download/Download_windows.html

ダウンロードしたらインストールしてください。

これで描写出来る！と思いプレビュー表示をしてみました。
![画面遷移図.md - 未設定 (ワークスペース) - Visual Studio Code 2020-05-25 12.26.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223359/cc6a0e08-5739-6b66-033e-bccf416326d7.png)

```
Error: write EPIPE
Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed
```

いや、エラーなんですけど。。。

ここから、「plantUML」をインストールしてみたり
![画面遷移図.md - 未設定 (ワークスペース) - Visual Studio Code 2020-05-25 12.37.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223359/899f1493-2abe-52ca-efd1-b24131e5266a.png)

こちらの記事を参考にしてみたり
https://qiita.com/zonbitamago/items/7946acfb4cbaa139f00a

対応をしていたのですが、一向にエラー解消せず。。。


## 「java」 をインストール

Google先生に質問攻めしていると、どうもJava入っていないと使えないっぽいとのお告げが。。。

とりあえずJava先生をインストールしてみる。
https://www.java.com/ja/

Visual Studio Code を再起動して、再度プレビュー表示をクリックしたところ
![Preview 画面遷移図.md - 未設定 (ワークスペース) - Visual Studio Code 2020-05-25 12.41.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223359/c2b976e6-1325-b279-1216-3a83edc0c6a2.png)

やっと表示されました！！


# まとめ
Markdown Preview Enhanced を使用するのに必要な設定は

* 「Java」 のインストール
* Visual Studio Codeに「Markdown Preview Enhanced」のインストール
* 「Graphviz」のインストール

でした。

途中「plantUML」もインストールしましたが、無効にしても図形描写は出来たのでインストールは必要ないかもです。



以上、参考にさせていただいたサイトの皆々様方、ありがとうございました。