OmniAICreator/Qiita-1.07M huggingface dataset:
効果的なマインドマップの作り方

マインドマップは使っていましたが、今まで我流で作っていました。 
しかし、どうせ作るなら、より効果的なものを作りたいものです。

マインドマップ考案者：トニー・ブザン氏の推奨方法をまとめます。

## 対象読者

マインドマップのより効果的な作り方を知りたい方

## 作成したマインドマップ

![マインドマップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609106/f6e28a41-dd5f-cfc3-5c35-3ad387ab73ce.png)


※ イメージ全般は肖像権や著作権の関係で省略

## 利点

- 記憶に残りやすい
  - シンプルだが書き込み方に工夫

## 法則

<h3>ワクワクするマインドマップほど良い結果を生む</h3>

- 無地の背景にすること
- セントラルイメージを配置すること
- ブランチの太さで重要度を示すこと
- ブランチに書くのは画像か単語にすること
    - フレーズだと想像/連想が阻害されてしまう
- 色分けすること
    - 「他とは違うものは覚えやすくなる」(= 孤立効果) をうまく使う
- 関連する要素があったらつなぐこと
- **全体的に見やすいこと**

## チェックリスト

- 明確なテーマはあるか？
- そのテーマはセントラルイメージに表されているか？
- 中央から放射状に広がる図か？
- 「1つのブランチにつき1語」が守られているか？
- イメージが使われているか？
- 全体に色が使われているか？
- 見やすく分かりやすいか？
- 視覚に強く訴えるか？

## 似ているが違うもの

- スパイダー図
- ピラミッド図
- コンセプトマップ
- 特性要因図
- サンバースト図

## 終わりに

マインドマップ考案者：トニー・ブザン氏の推奨方法をまとめました。
厳密に従うのは難しいと思いますが、効果的なマインドマップの作成に役立ててください。

## 参考

[マインドマップ 最強の教科書](https://www.amazon.co.jp/dp/B07NDFJG5W)
macからEC2にSSH接続したら、Bad configuration option: identifyfile?/ terminating, 1 bad configuration optionsが出てしまった時の対処法

@nakmさん: [AWSのEC2にmacからSSHする方法](https://qiita.com/nakm/items/695e41d8e71d0d281ac4)

こちらの記事を参照して、設定した際に、
`Bad configuration option: identifyfile?`

`terminating, 1 bad configuration options`

が出てきてしまいました。
対処に時間をかけてしまったので、自分が解決したケースをシェアさせて頂きます。



<h1>
秘密鍵ファイルの移動をしてSSH接続を試みたところ....</h1>
```ssh -i ~/.ssh/<秘密鍵ファイル名> <ユーザー名>@<接続先IP>```

以下のエラーが返ってきました。

`.../ .ssh/config: line 6: Bad configuration option: identifyfile?`

`.../ .ssh/config:terminating, 1 bad configuration options`

configファイルの設定は以下の通りで、一見問題が無いように思えました。
※エラーで指摘された6行目は、identifyFile <ファイル名>
※EC2に接続する際のポート番号は"22"でOK。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647101/f86e9827-64e2-c407-c5e0-4e0c17fbadb5.png)




<h1>結論"identityFile"にしなければならなかった</h1>

最初に生成されているファイルが、identi"f"yFileと記述されていましたが、接続時には`identityFile`と記述する必要がありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647101/f702427f-da36-47ba-41a3-3fe7d831dfec.png)


これで無事接続が可能です。
TestLink の RESTAPI で情報取得する

# はじめに
TestLink に登録したテストプロジェクト、テスト計画、テストケースの情報を curl コマンドで取得する


# TestLink のRESTAPI で取得できる情報

* テストプロジェクトに割り当てられたテスト計画一覧
* テストプロジェクトの全テストケース


# テストプロジェクトに割り当てられたテスト計画一覧の取得


```bash
curl -i -H "PHP-AUTH-USER: ＜APIキー＞" -X GET http://localhost/lib/api/rest/v2/testprojects/＜テストプロジェクト名＞/testplans
```


出力される JSON は以下のようになる。

```json
{
	"status": "ok",
	"message": "ok",
	"items": {
		"74765": {
			"id": "74765",                   # テスト計画ID
			"name": "TestPlan",              # テスト計画名
			"notes": "<p>テスト計画の例</p>",  # 概要
			"active": "1",                   # 有効
			"is_public": "1",                # 公開
			"testproject_id": "2",           # ？？
			"api_key": "＜APIキー＞"          # APIキー
		},
		"74859": {
			"id": "74859",
			"name": "テストプロジェクト名",
			"notes": "",
			"active": "1",
			"is_public": "1",
			"testproject_id": "2",
			"api_key": "＜APIキー＞"
		},
		"74918": {
                    ＜省略＞
		}
	}
}
```

実際には以下のようなテスト計画を設定している
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304109/f2402902-a188-9fd8-7b9e-72ca0fa63c40.png)



#　テスト計画のテストケース一覧の取得

```bash
curl -i -H "PHP-AUTH-USER: ＜APIキー＞" -X GET http://localhost/lib/api/rest/v2/testprojects/1/testcases
```


```json
{
  "status": "ok",
  "message": "ok",
  "items": [
    {
      "id": "31692",
      "tc_external_id": "8046",
      "version": "1",                           # テストケースバージョン
      "layout": "1",                            # ？？
      "status": "1",                            # ステータス 1:ドラフト
      "summary": "サマリー",                     # 要約
      "preconditions": "前提条件",               # 前提条件
      "importance": "2",                        # 重要度
      "author_id": "2",                         # テストケース作成者
      "creation_ts": "2020-07-06 10:29:43",     # テストケース作成日時
      "updater_id": null,                       # ？？
      "modification_ts": "2020-07-06 10:29:43", # 修正日時
      "active": "1",                            # ？？
      "is_open": "1",                           # ？？
      "execution_type": "1",                    # 実行タイプ 1: 手動 2: 自動
      "estimated_exec_duration": null,          # ？？
      "tcversion_id": "31692",                  # ？？
      "name": "テストケース名",                   # テストケース名
      "keywords": null,                         # キーワード
      "customfields": null                      # カスタムフィールド (設定があれば)
    },

```



# 終わりに
テストケースの procedure 部分が取れないように思える
まだまだ、未調査の部分があるので順次情報を追加していきます。
configure で c compiler cannot create executablesとエラーがでて困った時の対処法

##はじめに
Ubuntuで

> c compiler cannot create executables

というエラーが生じたときの（あくまで私の場合の）原因を書き残しておく

##状況

configureする際に、



`# ./configure --prefix=/usr/local/openmpi-4.0.4  CC=gcc CFLAGS=-03`

としたところ上のようなエラーが生じた。

たいていは、
`# apt install build-essential`
でgcc(やg++,make)を一括してインストールしてしまえば解決するのだが、私の場合しっかりと最新版になっていた。

##対処法

`./configure --prefix=/usr/local/openmpi-4.0.4  CC=gcc CFLAGS=-03`

を

`./configure --prefix=/usr/local/openmpi-4.0.4  CC=gcc CFLAGS=-O3`

と数字の「0」から大文字のオー「O」へ変更する。

この記事上では違いがはっきりしているが、ubuntuのCUI上では違いが分かりずらかった。



#####参考にしたページのリンクは下記のURL
https://askubuntu.com/questions/647583/how-to-fix-configure-error-c-compiler-cannot-create-executables
CentOS7 Laravel環境構築のためにPHP7.4をインストールする

# 目的

- PHPをCentOS7のマシンにインストールする方法をまとめる

# 実施環境

- ハードウェア環境

| 項目 | 情報 |
| --- | --- |
| OS | CentOS 7 (7.8.2003) |a
| ハードウェア | Dell Studio 1537 |
| プロセッサ | Intel(R) Core(TM)2 Duo CPU     P8400  @ 2.26GHz |
| メモリ | 4 GB DDR3 |
| グラフィックス | 不明 |

# 前提条件

- 下記、または下記に準ずる方法でCentOS7のマシンが構築されていること。
    - [Cent0S7をPCにインストールする](https://miriwo.hatenablog.com/entry/2020/08/09/144030)

# 前提情報

- 説明で紹介するコマンドはクライアントPC(Mac)からSSHを用いて接続を行い実行する。

# 読後感

- CentOS7のPCにLaravelの環境構築を前提としたPHPをインストールすることができる。

# 概要

1. リポジトリの追加とインストール
1. 確認

# 詳細

1. リポジトリの追加とインストール
    1. 下記コマンドを実行してリポジトリを追加する。

        ```terminal
        $ sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
        ```
    1. 下記コマンドを実行して必要物をインストールする。

        ```terminal
        $ sudo yum install --enablerepo=remi-php74 php74 php 
        $ sudo yum install --enablerepo=remi-php74 php-fpm
        $ sudo yum install --enablerepo=remi-php74 php-mbstring
        $ sudo yum install --enablerepo=remi-php74 php-mysqlnd
        $ sudo yum install --enablerepo=remi-php74 php-pecl-zip
        $ sudo yum install --enablerepo=remi-php74 php-xml
        ```
1. 確認
    1. 下記コマンドを実行してphpと名前のつくインストールされたパッケージを表示する。

        ```terminal
        $ yum list installed | grep php
        ```
    1. 下記に筆者の環境でのphpと名前のつくインストールされたパッケージの情報を記載する。

        ```terminal
        oniguruma5php.x86_64                  6.9.5+rev1-2.el7.remi          @remi-safe 
        php.x86_64                            7.4.8-2.el7.remi               @remi-php74
        php-cli.x86_64                        7.4.8-2.el7.remi               @remi-php74
        php-common.x86_64                     7.4.8-2.el7.remi               @remi-php74
        php-fpm.x86_64                        7.4.8-2.el7.remi               @remi-php74
        php-json.x86_64                       7.4.8-2.el7.remi               @remi-php74
        php-mbstring.x86_64                   7.4.8-2.el7.remi               @remi-php74
        php-mysqlnd.x86_64                    7.4.8-2.el7.remi               @remi-php74
        php-pdo.x86_64                        7.4.8-2.el7.remi               @remi-php74
        php-pecl-zip.x86_64                   1.19.0-1.el7.remi.7.4          @remi-php74
        php-sodium.x86_64                     7.4.8-2.el7.remi               @remi-php74
        php-xml.x86_64                        7.4.8-2.el7.remi               @remi-php74
        php74.x86_64                          1.0-3.el7.remi                 @remi-safe 
        php74-php-cli.x86_64                  7.4.8-2.el7.remi               @remi-safe 
        php74-php-common.x86_64               7.4.8-2.el7.remi               @remi-safe 
        php74-php-json.x86_64                 7.4.8-2.el7.remi               @remi-safe 
        php74-runtime.x86_64                  1.0-3.el7.remi                 @remi-safe 
        ```
    1. 上記と同じパッケージがインストールできていれば本記事の作業は完了である。

# 参考文献

- [CentOS 7 に PHP 7.2 を yum でインストールする手順](https://weblabo.oscasierra.net/centos7-php72-install/)
TailwindCSSのカスタマイズ

##はじめに
普段tailwindを使っていますが、カスタムする機会がありました。
業務でmin-width-10remを使いたいと思いましたが、、、<img width="730" alt="スクリーンショット 0002-08-17 18.41.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648295/f2859e4f-0923-aa43-816a-3fea0ea032ed.png">
tailwindCSSには2つしかありません。カスタムをする必要があります。

##修正方法
まずtailwind.config.jsを開き、追加したいものを以下のように書きます。
extendがないとデフォルトの値は消え、使用できない。

```tailwind.config.js
module.exports = {
 theme={
  extend:{ 
   minWidth: {
    '40': '10rem',
   }
  }
 }
}
```

##使用例
```image.tsx
<div className = {'min-w-40'}>
 <img src = 'https://qiita.jpg' alt='qiita'>
</div>
```

##まとめ
module.exports>theme下でカスタマイズ可能

``` tailwind.config.js
module.exports = {
 theme={
  extend:{ // extendによりデフォルトのCSSは保たれる
   minWidth: {
    // ここにカスタムしたい内容を入れる
   }
  }
 }
}
```
Spring-Boot-2.3ではjavax.validationを依存関係に追加しなければならない

Spring Boot 2.3.1を利用してバリデーション機能を実装していたところ
@Sizeや@NotNullなどのアノテーション(javax.validation*)が利用できなくなっていました。

なので以下のように付け加えたら解決しました。

##mavenの場合
```
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
```

##gradleの場合
```

dependencies {
  ...
  implementation 'org.springframework.boot:spring-boot-starter-validation'
}
```

##理由
バージョン2.3以前を利用していた時は以下のスターターを読み込めばjavax.validation*のライブラリが利用できていましたが、
2.3からは含まれなくなっていたようです。

```
implementation 'org.springframework.boot:spring-boot-starter-web'
```
>参考
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes#validation-starter-no-longer-included-in-web-starters
aws apache  rds

# ec2にログイン
アパッチをyumでインストール

#RDS

## private subnet の作成
ip 10.0.20.0/24
internet gateway と接続しない。
RDSを作るとき用にもう一つ
ip 10.0.21.0/24も作る。availability zoneを違うところにして

## RDSの作成
まず、セキュリティグループの設定
データベース用の作成
xxxx-db-sg　あたりにして
vpc の選択
inbound rule 
type MYSQL/Aurora 
Source webように作ったもの

RDSに移動
database create 

DB instance identifierに名前を入れて
Credentials Settings
Master user
password 設定

### connectivity
VPC 

vpc-sg

availability zone の設定


###追加の設定
db name db-dev
sg の設定
## ssh

terminal で
login 
mysql install

database endpoint 確認。

mysql -h endpoint -uroot
Pythonで使えるメモ

#Python 早引きメモ
プログラミングするときのコピペメモ

## 入力
１行の中に複数の値が入っているのを、分けて変数に入れる
`1 2` -> `a=1, b=2`

```python
a,b = (int(x) for x in input().split())
```

多重リスト

```
table = [[0] * W for i in range(H)]
```


複数行の場合
最初に、行数を指定

```python
num = int(input())
a=list(range(num))
b=list(a)

for i in range(num):
    a[i],b[i]=(int(x) for x in input().split())
```

## 出力

```python
num = "Yeah"
print("Hello",num) # HelloYeah
print(num,end='')  # Yeah (改行しない)
```

## if文
インデントに注意！

```python
if a == 0:
  ~~
elif a < 0:
  ~~
else:
  ~~
```

## for文
値で指定 i =0,1,2,3,4

```python
for i in range(5):
```

リストで指定

```python
list1 = ["Suzuki","Noguchi","Takayama"]
for i in list1:
```

## while文

```python
while n<1000:
```

## リストのソート

```python
list1.sort() #値の小さい順 or 文字コード順にソート
list1.reverse() #値の大きい順 or 文字コードの逆順にソート
```

## リストの最大値・最小値
最大値 `max(リスト)`　最小値 `min(リスト)`

```python
print(max(list1),min(list2))
#最大値のインデックス
list3.index(max(list3))
#最大値のインデックス（複数あるとき＝リスト内包表記）
[i for i, j in enumerate(list4) if j == max(list4)]
```


## 時間計算
時間だけでも、日付をふくめたdatetime型で扱うと楽

```python
import datetime

h,m = (int(x) for x in input().split())
time[i] = datetime(2020, 1, 1, h, m, 00)       # datetime(年,月,日,時,分,秒)で入力

if time[i] < datetime(2020, 1, 1, 9, 00 ,00):  # 比較もできる
  hometime = time[i] - timedelta(minutes=30)   # 差し引きは、timedeltaで
  print(hometime.strftime("%H:%M"))            # 出力は、.strftime("%H:%M:%S")
```

## 文字列処理
文字列完全一致 `==`・不一致 `!=`

```python
print('abc' == 'abc') # True
print('abc' == 'ABC') # False
print('abc' != 'ABC') # True
```

文字列一部一致

```python
print('xyz' in 'aaa-xyz-zzz') # True
```

文字列前方一致・後方一致

```python
s = 'aaa-xyz-zzz'
print(s.startswith('aaa')) # True
print(s.startswith('zzz')) # False
print(s.endswith('zzz')) # True
print(s.endswith('xyz')) # False
print(s.endswith(('xxx', 'yyy', 'zzz')))# True  タプルでor検索
```

大文字小文字変換

```python
s = 'Abcあいうえお'
print(s.lower()) # abcあいうえお
print(s.upper()) # ABCあいうえお
```
StreamlitアプリケーションをGCP(GAE)にデプロイする方法

## 0. フォルダ構成

application_directory
└Dockerfile
└app.py
└app.yaml
└requirements.txt

## 1. Dockerfileを作成する

以下のようなDockerfileを作成する


```Dockerfile
FROM python:3.7
EXPOSE 8080
WORKDIR /app
COPY requirements.txt ./requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD streamlit run app.py --server.port 8080
```

※最後の行で`streamlit run app.py`としているので、Pythonで書いたアプリケーションのファイルは`app.py`となっていることを仮定しています。

## 2. requirements.txtを作成する

以下のようなファイルを作成する。

```
streamlit
```

※個人的には仮想環境下でアプリケーションの動作を確認した後に`$ pip freeze > requirements.txt`でrequirements.txtを作成するのがおすすめです。

## 3. app.yamlを作成する

```app.yaml
runtime: custom
env: flex
```

※ここでflex環境を使わなければいけないのかどうかは私はよく分かっていません。standardでもいけるのかも。

## 4. デプロイする

GCP上で任意のプロジェクトを作成する。

作成したプロジェクトのホームページのナビゲーションメニューから「App Engine」に行き、App Engineアプリケーションを作成する。Languageは「Python」を選択し、Environmentは「フレキシブル」を選択する。

Google Cloud SDKをインストールしていなければ、ダウンロードおよびインストールをする。これでgloudコマンドが使えるようになる。

application_directory内で以下の操作を行う。

まず、必要に応じてSDKを初期化する。

```
$gcloud init
```

次に、App Engineにデプロイする。

```
$gcloud app deploy
```

## 参考

https://stackoverflow.com/questions/59052104/how-do-you-deploy-a-streamlit-app-on-app-engine-gcp
Macで何を試してもGoogle Chromeが起動しない時の対処法（ファイル削除しません）

## 元の記事
[Chrome Won’t Open On Mac, Fix / macReports](https://macreports.com/chrome-wont-open-on-mac-fix/)
こちらを日本語で解説いたします。

一切Application Supportの中のフォルダを削除せずに解決できました。
こちらの記事はディスプレイのスクショも掲載されており、非常にわかりやすくなっております。

## 環境
MacBook Air 2020
macOs 10.15.5 ver

## 誰に向けて書いているか
- Mac OS で再起動・アンインストール・などなど、手っ取り早く試せるトラブルシューティングを全て試しても、__Google Chromeが全く起動しなかった人__。
 
　あのアプリケーションにはコピーできたところで、クリックしても何故かDockで数回跳ねるのみで何も起こらない現象、殺意が湧きますよね。僕もあの光景を20回は見ました。

- __コンピュータに強い人__

　僕の解説には不備があるかもしれませんので、どんどん指摘していただければ嬉しいです。

## 解説
通例の強制終了&再起動、ソフトウェアアップデート。これは誰でもやることなので割愛。

1. Finder起動

2. ディスプレイ上部のメニューバーから__移動__を選択

3. 下から2番目の__フォルダへ移動__を選択

4. __~/ライブラリ/Application Support__記入
5. __Google__フォルダを選択
6. __Chrome__フォルダを右クリック & __情報を見る__選択
7. 右下の南京錠アイコンのロックを解く（pass記入 or 指紋認証）
8. __共有とアクセス権__の中の、問題が生じている人のアクセス権を__読み出しのみ__から__読み/書き__に変更
　
 僕は一番上の__システム__さんのみが__読み/書き__状態で、__staff__と__everyone__が__読み出しのみ__状態であったため、後者2つを__読み/書き__にしました。
（staffのみ変更でもうまく起動しました。everyoneは読み出しのみにしておいた方が安全？？）
9. 下の設定アイコンをクリックし、__内包している項目に適用...__を選択
10. Google Chromeを起動

で起動できました。

## 終わりに
Qiita初投稿でした。
皆様の手助けになりましたら幸いです。
vistaでquartus その26

#概要

vistaでquartusやってみた。
cpu作ってみた。



#cpuの仕様

スタックマシン
スタック長　8word
命令長　16bit
データ長　16bit
アドレス長　12bit
実装メモリー　256word

#アセンブラの作成

##push

スタックトップに、データを直接積む。

##get

メモリーから読み込んで、スタックトップに積む。アドレスを直接指示。

##set

スタックトップを、メモリーへ格納。アドレスを直接指示。

##jmp

アドレスに飛ぶ。

##jz

スタックトップが０なら、アドレスへ飛ぶ。

##out

スタックトップをシリアルへ出力。

##op

算術計算。加算と比較のみ、実装。

#アセンブラでhello_world


```

push 'h'
out
push 'e'
out
push 'l'
out
push 'l'
out
push 'o'
out
push ' '
out
push 'w'
out
push 'o'
out
push 'r'	
out
push 'l'
out
push 'd'
out
push '!'
out
loop:
jmp loop

```

#命令セット

|ニーモニック|bit15|bit14	|bit13	|bit12|bit11|bit10	|bit9	|bit8	|bit7	|bit6	|bit5	|bit4	|bit3	|bit2	|bit1	|bit0	|16進	|
|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
|push I|0	|0	|0	|1	|I|I	|I	|I	|I	|I	|I	|I	|I	|I	|I	|I	|1000+I	|
|get A	|0	|0	|1	|0	|A|A	|A	|A	|A	|A	|A	|A	|A	|A	|A	|A	|2000+A	|
|set A	|0	|0	|1	|1	|A|A	|A	|A	|A	|A	|A	|A	|A	|A	|A	|A	|3000+A	|
|jp A	|0	|1	|0	|0	|A|A	|A	|A	|A	|A	|A	|A	|A	|A	|A	|A	|4000+A	|
|jz A	|0	|1	|0	|1	|A|A	|A	|A	|A	|A	|A	|A	|A	|A	|A	|A	|5000+A	|
|jnz A	|0	|1	|1	|0	|A|A	|A	|A	|A	|A	|A	|A	|A	|A	|A	|A	|6000+A	|
|out	|1	|1	|1	|0	|-|-	|-	|-	|-	|-	|-	|-	|-	|-	|-	|-	|E000	|
|+	|1	|1	|1	|1	|-|-	|-	|-	|-	|-	|-	|0	|0	|0	|0	|0	|F000	|
|>	|1	|1	|1	|1	|-|-	|-	|-	|-	|-	|-	|0	|0	|0	|0	|1	|F001	|
|<	|1	|1	|1	|1	|-|-	|-	|-	|-	|-	|-	|0	|0	|0	|1	|0	|F002	|




#ハンドアセンブル


```

		mem[0]  = 16'h1068;//push 'h'
		mem[1]  = 16'he000;//out
		mem[2]  = 16'h1065;//push 'e'
		mem[3]  = 16'he000;//out
		mem[4]  = 16'h106c;//push 'l'
		mem[5]  = 16'he000;//out
		mem[6]  = 16'h106c;//push 'l'
		mem[7]  = 16'he000;//out
		mem[8]  = 16'h106f;//push 'o'
		mem[9]  = 16'he000;//out
		mem[10] = 16'h1020;//push ' '
		mem[11] = 16'he000;//out
		mem[12] = 16'h1077;//push 'w'
		mem[13] = 16'he000;//out
		mem[14] = 16'h106f;//push 'o'
		mem[15] = 16'he000;//out
		mem[16] = 16'h1072;//push 'r'	
		mem[17] = 16'he000;//out
		mem[18] = 16'h106c;//push 'l'
		mem[19] = 16'he000;//out
		mem[20] = 16'h1064;//push 'd'
		mem[21] = 16'he000;//out
		mem[22] = 16'h1021;//push '!'
		mem[23] = 16'he000;//out
		mem[24] = 16'h4018;//jmp 24
```

#環境

windows vista 32bit
quartus ii v13.0
ep2c5t144ボード

#コンパイル結果

![無題.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/f868ce13-ec5c-0d5c-3708-9043386d8121.jpeg)


#実行結果

![無題.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/debc032c-27ec-bb50-2667-48afd0501eae.jpeg)





以上。
ファイル操作

###ファイルの存在を確認

```python:qiita.py
import os

print(os.path.exists('test.text'))
```

処理結果

```
True
```

###ファイルの存在を確認

```python:qiita.py
import os

print(os.path.isfile('test.text'))
```

###ディレクトリがどうか確認

```python:qiita.py
import os

print(os.path.isdir('test.text'))
```

###ファイルの名前を変更
test.textからrenamed.txtに変更している

```python:qiita.py
import os

os.rename('test.text','renamed.txt')
```

###symlinkを作る

symlin.txtが作成される
>シンボリックリンク（英：symbolic link）とは
UNIX系のOS（MacとかLinuxとか）における、ファイルやフォルダの代理人ファイルのこと。


```python:qiita.py
import os

os.symlink('renamed.txt','symlink.txt')
```

###ディレクトリの作成,削除
rmdirはディレクトリが空のときのみ削除できる

```python:qiita.py
import os

os.mkdir('test_dir')
os.rmdir('test_dir')
```

test_dirの中にtest_dir2を作成
その後、listdirでtest_dirの中を確認する

```python:qiita.py
import os

os.mkdir('test_dir')
os.mkdir('test_dir/test_dir2')
print(os.listdir('test_dir'))
```

実行結果

```
['test_dir2']
```

###pathlib

pathlibを使いtest_dir2のなかにからのテキストファイルを作成
testdirの中をglobを用いて確認

```python:qiita.py
import os
import pathlib
import glob
import shutil

pathlib.Path('test_dir/test_dir2/empty.txt').touch()
print(glob.glob('test_dir/test_dir2/*'))
```

実行結果

```
['test_dir/test_dir2/empty.txt']

```

###shutil
shutilを用いてディレクトリのコピー

```python:qiita.py
import os
import pathlib
import glob
import shutil

# pathlib.Path('test_dir/test_dir2/empty.txt').touch()
shutil.copy('test_dir/test_dir2/empty.txt','test_dir/test_dir2/empty2.txt')
print(glob.glob('test_dir/test_dir2/*'))
```

中身があるディレクトリの削除

```python:qiita.py
import os
import pathlib
import glob
import shutil


shutil.rmtree('test_dir')
```
###現在の位置を確認


```python:qiita.py
import os
import pathlib
import glob
import shutil

print(os.getcwd())
```
GitHubにSSH接続する方法(秘密鍵、公開鍵の作成)

GitHubにSSH接続していないと、pushした際、以下のようなエラーになると思います。

```
$ git push origin master
git@github.com: Permission denied (publickey).
```

なので今回は、GitHubにSSH接続する方法をご紹介いたします。

# 秘密鍵と公開鍵を作成する
秘密鍵、公開鍵というのは、公開鍵暗号方式で使われる２種類のデータのことです。
簡単に言えば、公開鍵が鍵穴、秘密鍵が鍵のようなものです。
秘密鍵は自分で保持し、公開鍵はGitHubに送ります。

まずは、この２つの鍵を作成します。

以下のコマンドで、鍵を保存するフォルダに移動します。

```
$ cd ~/.ssh
```

以下のコマンドで、鍵を生成します。

```
$ ssh-keygen -t rsa
```

以下の表示がでるので、Enterを押します。

```
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/yusukehorita/.ssh/id_rsa): 
```

さらに以下の表示がでるので、Enterを押します。

```
Enter passphrase (empty for no passphrase):
```

さらに以下の表示がでるので、Enterを押します。

```
Enter same passphrase again:
```
```
Your identification has been saved in /Users/yusukehorita/.ssh/id_rsa.
Your public key has been saved in /Users/yusukehorita/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Q+ZcarwT4Snlqa8hT1nFhT+xzpSGou3xQaKdyCONdns yusukehorita@hottayuusukenoMacBook-Air.local
The key's randomart image is:
+---[RSA 2048]----+
|           ..    |
|         ....    |
|        = +o +   |
|       XoBo B    |
|     +.*S= = .   |
|    + O*=+. o    |
|   ..o=+oo .     |
|     +.oE..      |
|      oo.        |
+----[SHA256]-----+
```

これで秘密鍵と公開鍵が生成されました。

ちゃんと作成されたか、確認してみましょう。

```
$ ls
id_rsa		id_rsa.pub
```
以上の２つのファイルが表示されたら、OKです。(id_rsa が秘密鍵、id_rsa.pub が公開鍵)

# 公開鍵をGitHubにアップする

以下のコマンドで公開鍵をコピーします。

```
$ pbcopy < ~/.ssh/id_rsa.pub
```

https://github.com/settings/keys
ここから、GitHubの公開鍵の設定ページに飛んでください。

画面の右上の <b>New SSH key</b> を押してください。

すると、次のような画面になるので、Title に公開鍵の名前(ご自身で決めてください)、key に先ほどコピーした公開鍵を貼り付けてください。
最後に、Add SSH key を押してください。
![スクリーンショット 2020-08-18 2.13.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654387/63fdf322-3442-8d16-3f50-00c6d5e7c7c8.png)

これで GitHubにSSH接続できました。

# 参考記事
https://qiita.com/shizuma/items/2b2f873a0034839e47ce
https://it-trend.jp/encryption/article/64-0089
ffmpegのmapを解説する

# 出力の確認方法確認方法
複数のストリームの内容や順番を確認する場合、以下の方法があります
## `ffprobe`を使う
`ffmpeg` が入っていれば使えるはずです
使い方は以下です

```bash
ffprobe <ファイル名>
```

映像・音声ストリームが2つずつある場合、以下のように出力されます

```
Input #0, matroska,webm, from 'output.mkv':
  Metadata:
    DATE            : 2020
    MAJOR_BRAND     : mp42
    MINOR_VERSION   : 0
    COMPATIBLE_BRANDS: isommp42
    ENCODER         : Lavf58.51.100
  Duration: 00:00:10.02, start: 0.000000, bitrate: 17966 kb/s
    Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 1k tbn, 120 tbc (default)
    Metadata:
      HANDLER_NAME    : VideoHandle
      ENCODER         : Lavc58.100.100 libx264
      DURATION        : 00:00:10.020000000
    Stream #0:1: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 1k tbn, 120 tbc
    Metadata:
      ENCODER         : Lavc58.100.100 libx264
      DURATION        : 00:00:10.020000000
    Stream #0:2: Audio: vorbis, 48000 Hz, stereo, fltp (default)
    Metadata:
      HANDLER_NAME    : SoundHandle
      ENCODER         : Lavc58.100.100 libvorbis
      DURATION        : 00:00:10.004000000
    Stream #0:3: Audio: vorbis, 48000 Hz, stereo, fltp
    Metadata:
      ENCODER         : Lavc58.100.100 libvorbis
      DURATION        : 00:00:10.004000000
```

## VLCを使う
VLCでファイルを開き、「オーディオ」→「オーディオトラック」からオーディオトラックの切り替えができます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/63d33263-c2f2-9729-becc-34833c7824c0.png)

ビデオトラックも同様です


# 識別子の意味

## `A`の場合（Aは数字）
「A番目のファイルの全てのストリーム」という意味です

## `A:B`の場合
「A番目のファイルのB番目のストリーム」という意味です

## `A:v`または`A:a`または`A:s`の場合
「A番目のファイルの全ての映像/音声/字幕ストリーム」という意味です
それぞれ、vが映像、aが音声、sが字幕という意味です。

## `A:v:B`等の場合
「A番目のストリームの全ての映像/音声/字幕ストリームのうち、B番目のストリーム」という意味です

## 末尾に`?`が付く場合
そのストリームが存在しない場合、エラーを吐かずに無視される、という意味です

## 角括弧（`[]`）で囲われている場合
フィルターから出力します
詳細は後述します

## まとめ
つまりこういうことです

|指定子|意味|
|:--:|:--:|
|`0:0`|0番目のファイルの0番目のストリーム|
|`0:a`|0番目のファイルの全ての音声ストリーム|
|`1:v`|1番目のファイルの全ての映像ストリーム|
|`2:s`|2番目のファイルの全ての映像ストリーム|
|`0:a:1`|0番目のファイルの全ての音声ストリームのうちの1番目のストリーム|
|`1:s?`|1番めの全ての字幕ストリーム（存在しない場合エラーを吐かず無視して続行）|
|`[outv]`|フィルタから出力（後述）|

# 指定方法の例
## 映像・音声を持ったファイルから音声のみを抜き取る

```bash
ffmpeg -i 1.mp4 -map 0:a output.mp3
```

## 映像・音声を両方持つ2つのファイルから映像・音声をそれぞれ引っ張ってくる

- 1.mp4の音声
- 2.mp4の映像

を1つにまとめるには、

```bash
ffmpeg -i 1.mp4 -i 2.mp4 -map 0:a -map 1:v output.mp4
```

これが`-map`の最も基本的で有用な使い方ではないでしょうか

## 複数の音声ストリームを持たせる

- 1.mp4の音声/映像
- 2.mp3の音声

を1ファイルにまとめる場合、

```bash
ffmpeg -i 1.mp4 -i 2.mp3 -map 0:v -map 0:a -map 1:0 output.kv
```

## コーデックやビットレートをストリーム毎に設定する
ffmpegでは、`-map`の前に書いた設定がそのストリームに適用されます

つまり、

```bash
ffmpeg -i 1.mp4 -i 2.mp3 -c:v copy -map 0:v -c:a aac -map 0:a -c:a aac -map 1:0 out.kv
```

こういうことです

## フィルタから出力
例えば、映像を左右反転させる場合`hflip`を、上下反転の場合は`vflip`フィルタを使いますが、

- 上下反転
- 左右反転
- 元の映像

を1つにまとめる場合、以下のようになります



```bash
ffmpeg -i 1.mp4 -filter_complex "[0:v]hflip[hf];[0:v]vflip[vf]" -map [hf] -map [vf] -map 0:v -map 0:a output.mkv
```
となります。


# 参考元
https://trac.ffmpeg.org/wiki/Map
https://ffmpeg.org/ffmpeg.html#Advanced-options
Doxygenでコールグラフとかを表示する(2020/08/17)。どかーんと古いバージョンを使うのが無難かも。 

#概要
Windows10環境にて、
Doxygenでコールグラフとかを表示する(2020/08/17)ことに挑戦。


#ダウンロード
Doxygen
graphviz
をダウンロード。

今だと、
**doxygen-1.8.19-setup.exe**
**graphviz-install-2.44.1-win64.exe**
とにかになるのでしょうか。

#動作確認結果
全然、まともに、動きません！！！

#対処方法
いろいろあると思いますが、、、、
お急ぎならば、**どかーーーんと古いバージョン**を使うのはどうでしょう。
5年ぐらい？？

**doxygen-1.8.11-setup.exe**
**graphviz-2.38-win32.msi**　（＜－－Win32!!!）

#結果
**ばっちり**でした！

#まとめ
Doxygenは、もう、あんまり使われてないんでしょうかね。
何に変わったのか知りたいです。
お疲れ様です。
DockerToolBoxを使ったhello-worldの実行（Windows 10 - Home）

#Docker Desktop for Windowsが使用できない!!
勉強用にWindows端末を購入し、[Docker Desktop for Windows] をインストールしようとしたところ、下のエラー画面が表示される...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579239/338f4d98-659b-d845-a898-194ce3797313.png)
調べた結果、Windows 10 Homeでは、[Docker Desktop for Windows]をインストールすることができず、[Docker Toolbox]を使うしかないとがわかった。

どうやら、Homeエディションには、`Hyper-V`なる仮想化システムが備わっていないことが原因らしい（Windows 10 Pro / Enterprise には`Hyper-V`が備わっているため[Docker Desktop for Windows]を利用できる）

#自分の環境
* Windows 10 Home-Edition

PCセットアップ直後の作業であるため、Git, VirtualBoxなど何もインストールしていない状態

#Docker Toolbox をインストール
気持ちを切り替え、GETした情報をもとに[Docker Toolbox]のインストールを開始。

##インストーラの取得
GitHubにて公開しているとのこなので、以下のページの`DockerToolbox-19.03.1.exe`をクリック

[GitHub-DockerToolboxのリンク](https://github.com/docker/toolbox/releases)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579239/3c0a037f-9612-a5bd-5755-a272fed41213.png)


##インストール開始
`DockerToolbox-19.03.1.exe`を起動し、以下の画面のまま`Next`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579239/1df65496-b20f-efb3-a443-ef7a6cd9b5bc.png)
自分の環境には、`Git`, `VirtualBox`共に入れてないので、すべてチェックを付けて`Next`
※既にインストール済のものは、チェックを外してOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579239/78367ca5-3c66-540e-7d01-2ddca122692e.png)
初期状態のまま`Next`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579239/3307860d-9b0a-ddfd-250f-e8ea56b7ae43.png)
`Install`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579239/956fff1d-52d0-af70-26bf-2da734541427.png)
インストールが完了すると下の画面が表示されるので`Finish`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579239/8e039e5a-1deb-753e-4b2b-538ab813d33c.png)

##Docker Quickstart Terminalの実行
デスクトップと、以下のパスに`Docker Quickstart Terminal`のショートカットが格納されているので実行する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579239/c25d7292-490b-0d89-8152-45e1994f275d.png)

```
C:\Users\[ユーザ名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Docker\
```

ターミナルが起動し、VirtualBoxへのDockerHostの展開や、Boot2Dockerのインストールが開始されるので、じっと待つ。
※待っている間にユーザアカウントの制御`VirtualBox Interface`が起動するので、「はい」を選択。

完了すると、以下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579239/dfd671a0-b51b-d421-ae2b-fd65507582e0.png)



#hello-worldの実行
お待ちかね、`hello-world`を実行します。
起動している`DockerToolbox`へ、以下のコマンドを入力し、hello-worldを実行します。

```docker
$ docker run hello-world 
```


コマンドの実行結果が以下となっていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579239/de0c5381-72c0-a237-2836-b5a790759137.png)


#おしまい
以上でおしまいです。
dockerを使いこなせるよう頑張りましょう！
【今後の学習】・次回作成アプリ

◆テストコードの学習も終わりいよいよ次のカリキュラム。
・内容は新しいチャットアプリの作成。

実装したい機能
・ユーザー管理機能
・チャットルーム作成機能
・写真付きメッセージ投稿機能

用件
・ユーザーを新しく登録できる
・ユーザー登録ができている場合、投稿機能を使える
・ユーザー登録後に投稿内容を編集できる
・ログアウトできる

・連絡を行うチャットルームが作成できる
・ユーザーがチャットルームの名前を設定できる
・チャットを行うユーザーを選択できる

・テキストと画像が投稿で切る。
・投稿した画像とテキストは投稿したチャットルームのみに表示できる。

▼以上の内容のアプリを今週中に作成する目標にします。
復讐もかねて少しづつスキルをあげていこうと思います。
paramsとhtmlの理解(初心者向け)

paramsとhtmlの理解(初心者の方向け)

paramsとhtmlの理解がありませんでしたがアウトプットします。
webアプリケーションのサービス構造は基本的には、お客さんが投稿し、それをデータベースに保存し、さらにそれをどこかしらのページから見れるようにするというもの。
それをrailsでコーディングした場合の中身の解説をします

paramsとは？
初めてrailsを触って、paramsはパラメータを入れる箱だとか言われても、パラメータは「サービスの利用者がサーバに対して送ってきた値」と考えれば良いかと思います。そして、その値を格納するための箱がparamsになります。
例えば、このような感じです。

```
params[:title]
```

titleという名前のついたパラメータを利用者が飛ばし、それを格納しています。
要は、これはお客さんが送った値だということをrails側に伝えている訳です。

しかし、上の動作を行うためには、お客さんが送ったデータにtitleという名前をつけてあげなければいけません。
それをするのがhtmlの役割です。

お客さんが送った値をどうとるのか
htmlのコードを見てみましょう。

```
<label>タイトル</label>
<input type="text" name="title">
```

これがお客さんが送る側のフォームのコーディングになります。
labelは入力フォームの名前。

inputはこれは入力フォームだということを教えてくれています。

typeは、このフォームは文章を入れるためタイプのフォームですよと設定してくれています。
nameがここに入力された内容はtitleという名前がつけられますよとしてくれています。

お分かりだとは思いますが、このnameがパラメータの名前になります。
ここに書かれたデータ内容は問答無用でtitleという名前がつけられ、サーバに送られます。

最後にサーバーに保存する
今までの流れを確認します。

まず、htmlのフォーム画面からデータがサーバに送られ、そのデータには名前がついている。今回は"title"。
それをparamsの箱に格納する。
そのデータをrails側で保存するという流れが先に続きます。

@book.title = params[:title]
@book.save

bookのタイトルというカラムに送られてきたデータを格納し、そのままデータベースを保存するという形になります。

専門用語はガンガン聞いた方が良いと個人的に思います。
自分もまだまだ初心者ですが、教えてくれる方は専門用語ガンガン使います。先ほどで言えば、パラメータとかカラムとかただ何も知らない人からすればって感じなので、その都度聞いた方が学習速度が早まるかと思います。

本日は以上です。
AWS Lambda上でGCCを動かす。

はじめに
=====
オンラインジャッジをサーバーレスで構築してみたかったので、まずLambda上でGCCを動くようにしました。

環境
=====
Node.js 12.x

GCCが動作するのに必要なもの
=====
- GCC： 本体。
- Binutils： GASとか。
- GLibC： ヘッダーファイルやランタイムなど。

普通の環境ではGCCのみコンパイルすれば動かすことができます。
ですがLambdaの中には最小限のソフトウェアしかインストールされていないため、いくつか別にインストールする必要があります。

インストール先
=====
最初に思いつくであろう方法がプログラムを含めたZIPファイルに一緒に含めてGCCをアップロードする方法です。
ただその場合ZIPファイルの容量制限がかなり厳しいので、結構機能制限しないとGCCをアップロードすることはできません。
またGCCだけで容量がいっぱいいっぱいになるため、他のコンパイラをインストールすることができないというデメリットもあります。
そのため今回はGCCをインストールしたEFSを用意して、LambdaにマウントすることでGCCを動作可能にすることとしました。

インストール方法
=====
EFSに書き込むにはEC2を使うのが手軽なため、EC2でコンパイルとインストールを行いました。
またt2.microではメモリが足りなかったため、今回はt2.smallを使っています。

1. EFSの作成
-----
Amazon Management Consoleもしくは、aws-cliを用いて作成して下さい。

2. EC2へEFSをマウント
-----
以下のコマンドを実行します。

```bash
sudo mount -t efs -o tls,iam ファイルシステムID マウントポイント
```
ここからはEFSを/mnt/compilers/にマウントして、gccを/mnt/compilers/usrにインストールするものとして進めます。

3. コンパイルするためにEC2にGCCなどをインストールする
-----

何をインストールしたか記録をとるのを忘れていました。
頑張って探してみてね。

4. Makeのインストール
-----
EC2(Amazon Linux)のMakeはバージョンが古く、Binutilsをmakeするときに怒られるので新しいバージョンをインストールします。

```bash
cd
wget http://ftp.jaist.ac.jp/pub/GNU/make/make-4.3.tar.gz
tar -xf make-4.3.tar.gz
mkdir build-make
cd build-make
../make-4.3/configure
make
sudo make install
```

5. GCCのインストール
-----

```bash
cd
git clone git://gcc.gnu.org/git/gcc.git
mkdir build-gcc
cd build-gcc
../gcc/configure \
    --prefix=/mnt/compilers/usr \
    --with-local-prefix=/mnt/compilers/usr \
    --enable-languages=c++ \
    --disable-shared \
    --disable-lto \
    --disable-gcov \
    --disable-threads \
    --disable-bootstrap \
    --disable-multilib
make
sudo make install
```

6. BinUtilsのインストール
-----

```bash
cd
git clone git://sourceware.org/git/binutils-gdb.git
mkdir build-binutils
cd build-binutils
../binutils-gdb/configure --prefix=/mnt/compilers/usr
make
sudo make install
```

7. GLibCのインストール
-----

```bash
cd
git clone git://sourceware.org/git/glibc.git
mkdir build-glibc
cd build-glibc
../glibc/configure --prefix=/mnt/compilers/usr
make
sudo make install
```

AWS Lambdaにマウント
=====
EFSをLambdaにマウントするためにはEFS側にアクセスポイントを作成する必要があります。
また、Lambda側もVPC Lambdaに変更して下さい。
そうすると、LambdaにEFSをマウントすることができるようになりますのでEC2と同じパス(今回は/mnt/compilers)にEFSをマウントしてください。
なお、VPC Lambdaにはいろいろと制限があることに注意して下さい。

動作確認
=====

```javascript:テストコード
const { promisify } = require('util');
const fs = require('fs');
const child_process = require('child_process');

const exec = promisify(child_process.exec);

exports.handler = async (event, context) => {
    fs.writeFileSync("/tmp/Main.c", "#include<stdio.h>\nint main() { puts(\"Hello world\"); }");
    return await exec('/mnt/compilers/usr/bin/gcc /tmp/Main.c -o /tmp/a.out && /tmp/a.out');
};
```

実行すると…

```json:Response
{
  "stdout": "Hello world\n",
  "stderr": ""
}
```

おわりに
=====
これを使ってサーバーレスでオンラインジャッジを組んでコンテストサイトを作ろうと思っています。
Windows 10 SDK(Windows Kits)のインストールディレクトリを移動する

# きっかけ
先日、新しくHDDを購入し、別ドライブにWindows Kits 10を再インストールする必要があったのですが、その時に躓き続けて一日無くしたのでその時の備忘録です。
**※注意** - レジストリを変更するのでそれなりに危険です。もし実践する人は自己責任でお願いします。

# マイ環境
Windows 10 Pro

# 手順
ざっくり起こったことと解決までの奮闘
## 起こったこと（読み飛ばしてok）
さっそくWindows Kitsをインストールしようとしたが、下図みたいな感じになってなんとインストールパスが変更できないではないか！

>![awUFk.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588278/3d80d3fd-e7aa-c298-873b-a3452fefeaee.png)
(出典：https://stackoverflow.com/questions/44801241/change-windows-kit-common-installation-path)

まあ、とりあえずこのディレクトリでもいいかと思い、インストールしようとすると途中で**invalid drive**というエラーが出た。
なるほど、前回の設定が残っているんだなと思い、以前のHDDに付け替えてWindows Kits 10をアンインストールし、再度新しいHDDに戻してインストールし直した。しかし、エラー内容は変わらなかった…
なんだこれは...と思い、調べていたらWindows Kits 10はレジストリにインストールパスを保存していることを知った。

ここから恐らく正解の手順

## 修正方法
Windows Kits 10はレジストリにインストールパスを保存しているため、レジストリを変更する必要があるようだ。
ここからの手順は大まかにこうだ
1. レジストリエディアを起動
2. 目的のレジストリを探して値を変更
3. Windows Kits 10を再度インストール

### 手順1
Windowsの検索バーにregeditと入力してレジストリエディタを起動する。
### 手順2
起動したら、上のバーに

```
コンピュータ\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots
```

を入力してエンター
すると大量の文字が表示されるが臆せず下までスクロールする。
一番下に```KitsRoot10```という値があるのでそれをダブルクリックする。
そしたらダイアログが表示されるため、そこに目的のディレクトリのパスを書き込む。デフォルトだとこんな感じ

```
KitsRoot    C:\Program Files (x86)\Windows Kits\8.0\
KitsRoot10  C:\Program Files (x86)\Windows Kits\10\
KitsRoot81  C:\Program Files (x86)\Windows Kits\8.1\
```

ここの値は環境によって恐らくことなり、KitsRootとかはあったりなかったりする。
私はWindows Kitsを以前インストールするときに別の場所を選択していたのか、KitsRoot10の値がC以外のドライブになっていた。

### 手順3
値を変更出来たらもう一度Windows 10 Kitsをインストールしてみる。
ちなみにインストーラはここからとってこれる。→https://developer.microsoft.com/ja-jp/windows/downloads/windows-10-sdk/
するとインストールパスがさっき指定したディレクトリに変化しているためそのままインストールしてしまいましょう！

### 完了！
お手元のVisual Studioとかで正常なプロジェクトを開いてエラーなくビルド出来たらOK！

# おわりに
Pythonのpip installが通らないのが最初の症状だったのですが、まさかWindows Kits 10が原因だったとは...
これ以外にもCUDAの再設定とかも頑張ってたらあっという間に一日終わっちゃったよ...
何はともあれ治ってよかった
皆さんはドライブ変更するとき手動でファイル移動なんかせずに、クローンソフト使うなりして工夫して楽にやろうね！！！

# 参考
sdk - change windows kit common installation path - Stack Overflow : https://stackoverflow.com/questions/44801241/change-windows-kit-common-installation-path
Herokuへのデプロイ（２回目以降の編集用）

# この記事でわかること
①Herokuでapp作成し、後にローカルで編集した変更点をデプロイする方法。

:thinking:初めてappを作成する人用ではないので注意！

### 前提として
ディレクトリは作成中のappに移動した状態。
アプリはRailsで作成しています。
　　
　　
　　
　　
:hugging:ではここから初めて行きます:hugging:

# コマンドの流れ

①Gemfileを変更したり追加したりしている場合バンドルインストール。
私はとにかく行っておきます。

```
% bundle install 
```
　　
　　
②変更のコミット

```
% git add .   
% git commit -m "Add pg gem for Heroku"                         
```
　　
　　
③リポジトリのプッシュをしてアプリのデプロイをする。

```
% git push heroku master 
```
　　
　　
④DBマイグレーションする。
本番環境Heroku用の作業だと思っている。

```
% heroku run rake db:migrate  
```
　　
これでアプリを開いてみてください！
デプロイ出来ているはずです:v_tone1::crown:
　　
お疲れ様でした！　　
　　
　　
　　

本記事は、まだまだ初学者のため自分用の記録です。
以下の記事を参考にさせていただきました。
参考記事（ 「Rails アプリを初めて Heroku にデプロイしてエラーとなったとき」https://qiita.com/hmmrjn/items/e2dff8036fbbd74f049a）
　　
　　
　　
# ひとことMemo
自分はですが、
デプロイ時③の工程で良くエラーが出てしまいました。
原因は「% bundle install 」の工程を忘れていたからでした。
　　
　　
本番環境へ写す際にGemfileを変更をしなければならないので起きていたようです。
　　
　　
　　

　　
最後まで読んで頂きありがとうござました！
ではまた！:blush::wave_tone1:
【Rails】password_digestを生成する方法

## password_digestについて
Railsでパスワードを保存する際にpassword_digestを使用することが多いと思います。[Rails のモデル（フォーム）でパスワードを暗号化して保存する方法](https://qiita.com/ryosuketter/items/805452b7e6bf9637cb57)にある通り、パスワードを設定するときは、モデルを通してパスワードを設定すればpassword_digestを生成してくれる仕組みになっています。


## やりたいこと
新規にユーザを作成するときはよいのですが、パスワードを更新するときに一度ユーザを取得した後に更新と言う手順が、モデルを通すと必要になります。これをユーザを取得せずにupdateだけ行いたい場合、password_digestを別途取得する必要があります。今回はその取得方法を紹介します。

## 対応方法
[How to update user password using password_digest and form in Rails](https://stackoverflow.com/questions/60479353/how-to-update-user-password-using-password-digest-and-form-in-rails)にある通り、BCryptを使用して直でpassword_digestの値を生成する方法が挙げられます。BCryptの詳細につきましては[こちら](https://github.com/codahale/bcrypt-ruby)を参照ください。

## サンプルソース
```sample.rb
require 'bcrypt'

class Sample
  include BCrypt

  # password_digestの取得
  def self.get_password_digest(password)
    Password.create(password)
  end
end
```
CSVファイルの読み込みと書き込み

>CSVファイルとは、「comma separated values」の略称を指し、その名の通り値や項目をカンマ（,）で区切って書いたテキストファイル・データのこと

##書き込み

withステートメントでtest.csvというcsvファイルを作成
fieldnamesで各要素を定義

```python:qiita.py
import csv

with open("test.csv", 'w') as csv_file:
    fieldnames = ['Name', 'Count']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    writer.writeheader()
```

実行結果
test.csvの中身

```
Name,Count
```

writerowを用いて各データを追加していく

```python:qiita.py
import csv

with open("test.csv", 'w') as csv_file:
    fieldnames = ['Name', 'Count']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'Name':'A', 'Count':1})
    writer.writerow({'Name': 'B', 'Count': 2})
```

実行結果
test.csvの中身

```
Name,Count
A,1
B,2

```

##読み込み

読むこむ際はDictreaderを使用し、forループを回す

```python:qiita.py
import csv

with open('test.csv','r') as csv_file:
    reader = csv.DictReader(csv_file)
    for row in reader:
        print(row["Name"], row['Count'])
```
自前でビルドしたReactNativeを使う

## やりたいこと

- ReactNativeのソースコードに手を入れた独自のバージョンを利用したい
- 具体的には下記のPRを取り込んで使いたかった
  - https://github.com/facebook/react-native/pull/29466

https://github.com/facebook/react-native/wiki/Building-from-source#publish-your-own-version-of-react-native

↑ここにやり方が記載してあるが、ちょっと説明が足りない感じだったので補足するための記事です。

## ステップ1

```sh
$ cd {cloneしてきたdirectory}
$ git checkout -d {リリースに利用したいブランチ名}
$ npm i # ドキュメントにはこれが無い
```

## ステップ2

cloneしてきた時点ではReactNativeのバージョンがセットされていないので、手動でセットする必要がある。

[このcommit](https://github.com/facebook/react-native/commit/3c9e5f1470c91ff8a161d8e248cf0a73318b1f40)を参考に、これらのファイルのバージョンを書き換えていく。

どのバージョンをセットすべきなのかよくわかっていないのだが、

- [こういうcommit](https://github.com/facebook/react-native/commit/b41f6875e5c55a240f2a31a857e466695f35e2c1)
- ブランチを眺めて最も近いstableのバージョンを探す

という感じでバージョンをセットした。

## ステップ3

`npm install`したときに今回ビルドするバイナリをダウンロードできるように、package.jsonに下記のように追記する。

```diff
   "files": [
+    "android",
     "!template/node_modules",
```

この追記をすることで、`./android/` 以下のファイルがnpm install時に落ちてくるようになる。

## ステップ4

以降はドキュメント通り

```
# このビルドはめちゃくちゃ時間かかる。手元のマシンだと40分かかった
$ docker run --rm --name rn-build -v $PWD:/pwd -w /pwd reactnativecommunity/react-native-android /bin/sh -c "./gradlew installArchives" 

$ git add android --force
$ git commit -a -m 'my react native forked release'
$ git push
```



## 参考例

https://github.com/abeyuya/react-native/tree/dist

```
// package.json

  "react-native": "github:abeyuya/react-native#dist",
```

## その他

- ドキュメントに記載してあるのはAndroid用にビルドしたライブラリを生成する方法
- もしiOSのソースコードにのみ手を加えたい場合は、[patch-package](https://github.com/ds300/patch-package)を使うほうがお手軽だったりする
    - iOSのライブラリ部分のソースコードはアプリビルド時に一緒にビルドされるので、Androidのように事前にビルドしたバイナリを配布しておく必要がない
    - そのためローカルでビルド前にpatchをあてる運用が可能
- jsのソースコードにのみ手を加えたい場合も、iOSと同じくpatch-packageを使うほうがお手軽そう
【Python】データサイエンス100本ノック（構造化データ加工編） 030 解説

- データサイエンス100本ノックをやりきる会を作りました🎉
- こちらの[Slack招待URL](https://join.slack.com/t/data-science-100nocks/shared_invite/zt-gfncg9vm-8W8b3UrDg8R~TKaqUkQpgw)からご参加ください！！
- ぜひ一緒に励まし合いながら、データサイエンス100本ノックをやり切りたいと思っています！

##Youtube
[動画解説](https://youtu.be/70DfBuhrkkE)もしています。

##問題
P-030: レシート明細データフレーム（df_receipt）に対し、店舗コード（store_cd）ごとに売上金額（amount）の標本分散を計算し、降順でTOP5を表示せよ。

##解答
```:コード
df_receipt.groupby('store_cd').amount.var(ddof=0).reset_index().sort_values('amount', ascending=False).head(5)
```

##出力

| 	| store_cd | amount |
|:-----------|------------:|:------------:|
| 28 | S13052 | 440088.7013 |
| 31 | S14011 | 306314.5582 |
| 42 | S14034 | 296920.081  |
| 5  | S13001 | 295431.9933 |
| 12 | S13015 | 295294.3611 |

##解説
・PandasのDataFrame/Seriesです。
・同じ値を持つデータをまとめて処理し、同じ値を持つデータの合計や平均などを確認したい時に使用します。
・'groupby'は、同じ値や文字列を持つデータをまとめて、それぞれの同じ値や文字列に対して、共通の操作（合計や平均など）を行いたい時に使います。
・**'.var'は、標本分散を算出するコードです**。
・**'<列名>.var(ddof=0)'は、標本分散を算出する際に'N-ddof(=0)'で割ることを指します**。
・**'ddof'は、'delta degrees of freedom'の略称**です。詳細は[Wikipedia](https://en.wikipedia.org/wiki/Degrees_of_freedom_(statistics))をご覧ください。
・'.reset_index()'は、'groupby'によってバラバラになったインデックス番号を0始まりの連番に振り直す操作を行いたい時に使います。
・'.sort_values('amount', ascending=False)'で'amount'を降順に表示しています。

※こちらのコードでも同じ結果を出力します。ddofはデフォルトで0なので、今回の場合は省略しても問題ありません。  

```:コード
df_receipt.groupby('store_cd').agg({'amount':'var'}).reset_index().sort_values('amount', ascending=False).head(5)
```
テンプレート

＄に文字を代入することができる

・テンプレートを使うメリット
sを直接操作しない為、間違った操作があったとしてもsが壊されることがない


```python:qiita.py
import string

s="""\
Hi $name

$contents

Have a good day
"""

t =string.Template(s)
contents = t.substitute(name='Mke', contents='How are you?')
print(contents)

```

実行結果

```
Hi Mke

How are you?

Have a good day

```

designファイル内のe_mail.txtに入れて
ファイルの読み込みを使うと
withの外でもtは使える

```python:qiita.py
import string

with open('design/e_mail.txt') as f:
    t =string.Template(f.read())
contents = t.substitute(name='Mke', contents='How are you?')
print(contents)
```
同様の結果が得られる
MySQL5.7でGenerated Columnを作成したがmysqldumpしたデータをリストアできなかった話

# はじめに
問題が発生したテーブルですが、mysqlの全文検索インデックスを設定したテーブルで、全文検索インデックスはGenerated Column(Stored)で生成したカラムに貼ってありました。mysqldumpを取り、リストを行った所下記エラーが発生しました。

```
ERROR 3105 (HY000) at line XXX: The value specified for generated column 'XXX' in table 'XXXX' is not allowed.
```

# 発生環境
Webサーバ: EC2
DB: RDS(mysql5.7)

# 解決方法
本事象ですが、EC2にインストールしていた、`mysql clientが5.6` のため発生した不具合でした。  
mysql clientが5.6以前で、mysqldumpを取った際にGenerated Columnは、通常カラムと同様の扱いとなり、insert文に対象カラムの情報が記載されてしまい上記エラー発生します。  
同一問題に当たった場合は、`--complete-insert` を使ってカラムを下記だして状況確認するのが良いかと思います。clientのバージョンが5.7系であれば、Generated Columnはinsert文に対象カラムとして表示されないはずです。

# おわりに
今回は、全文インデックスを張る関係で、Generated ColumnはStoredとしていましたが、Viewの場合にmysqldump実行時にエラーが発生するバグが挙がっています。
Generated Column(View Bug)https://bugs.mysql.com/bug.php?id=79148
GoでEchoの導入

Echo の詳細
---
[Echoの公式ドキュメント](https://github.com/labstack/echo)

インストール
---
```
go get github.com/labstack/echo/{version}
```

実際に動かす
---

```main.go
package main

import (
  "net/http"
  "github.com/labstack/echo"
  "github.com/labstack/echo/middleware"
)

func main() {
  // Echoインスタンス作成
  e := echo.New()

  // ミドルウェア
  e.Use(middleware.Logger())
  e.Use(middleware.Recover())

  // ルーティング
  e.GET("/hello", hello)

  // サーバー起動
  e.Logger.Fatal(e.Start(":1323"))
}

// handler
func hello(c echo.Context) error {
  return c.String(http.StatusOK, "Hello, World!")
}
```

#### 実行する
`$ go run main.go`

http://localhost:1323/hello にアクセスします｡

```result.
Hello World
```
と表示されます｡
ITILファンデーション(ITIL4エディション)の資格の勉強を始めた4

#一般的マネジメントプラクティスについて
## アーキテクチャ管理
組織を構成するすべての要素とその要素それぞれの相互関係を把握するためのプラクティス。
###アーキテクチャのタイプ
- 事業アーキテクチャ
- サービスアーキテクチャ
- 情報アーキテクチャ
- 技術アーキテクチャ
- 環境アーキテクチャ

## 継続的改善
製品およびサービスの効果的な管理に関与するすべての要素の継続的な識別と改善を通して、変化していくビジネスニーズに組織のプラクティスとサービスを整合させるプラクティス。


## 情報セキュリティ管理
- 機密性、完全性、可用性

次の点のバランスを取る必要がある。
- 防止
- 検出
- 是正

## ナレッジ管理

## 測定および報告
- 重要成功要因(CSF)
- 重要業績評価指標(KPI)

## 組織変更の管理
組織変更を確実に円滑かつ成功裏に実施し、その変更の人に関わる側面を管理することで長期的な便益を実現することを確実にするプラクティス。

###主な活動
- 切迫感の創出
- 利害関係者管理
- スポンサ管理
- コミュニケーション
- 権限委譲
- 抵抗管理
- 強化

## ポートフォリオ管理
組織がプログラム・プロジェクト・製品・サービスを適切に組み合わせて、組織の資金とリソースの制約内で戦略を実行できることを確認にするプラクティス。

## プロジェクト管理
### プロジェクトを提供する方法
- ウォーターフォール
- アジャイル

## 関係管理
戦略および戦術レベルで組織と利害関係者の間に関係を築き育むためのプラクティス。

## リスク管理
### 効果的なリスク管理
- 識別する
- 評価する
- 対応する

### 原則
- リスクは事業の一部
- 組織全体でリスク管理に一貫性を持たせる
- リスク管理のカルチャおよび行動が重要

## サービス財務管理
組織の財務リソースと投資が確実に効果的に使用されるようにすることで組織におけるサービスマネジメントの戦略と計画を支援するプラクティス。

- 予算業務/コスト計算
- 会計業務
- 課金

## 戦略管理

## サプライヤ管理
組織のサプライヤとそのパフォーマンスレベルを適切に管理することで、質にムラのない製品・サービスの提供を支援することを確実にするプラクティス。

###サプライヤ
組織で使用されるサービスを提供する責任を負った利害関係者。

### ソーシングのタイプ
- インソーシング
- アウトソーシング
- 単一のソースまたは単一のパートナーシップ
- マルチソーシング

### サプライヤ評価の基準
- 重要性とインパクト
- リスク
- コスト

## 要員およびタレント管理プラクティス
組織が適切なスキルと知識を備えた妥当な人材を確保し、事業達成目標の実現に向けてその人材に適切な役割を与えることを確実にするプラクティス。

- 組織ベロシティ
- コンピテンシ
- スキル
- 能力
- ナレッジ
- 姿勢
[Python+OpenCV]画像の透過部分を白塗する

# はじめに
画像の透過部分を白塗するプログラムのサンプルです。
ネットで調べてみると、for文でピクセルを走査したり、RGBを取得した後にαチャンネルを結合する方法が散見されました。
そのような複雑な処理をすることなく数行で実装できたので、自分用のメモも兼ねて記事に残しておきます。

# 環境
- Python 3.7.7
- opencv_python 4.4.0.42
- numpy 1.18.1

# 実行例
以下の透過済み画像を黒塗りします(白塗りだと変化がわからないため)。
![output.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576493/865c29ef-5ca5-1e72-0cd2-2b6518f0e698.png)



# ソースコード
~~~ Python
# -*- coding:utf-8 -*-
import cv2
import numpy as np

# 入力画像を読み込み(-1指定でαチャンネルも読み取る)
img = cv2.imread("kangaru.png", -1)
# αチャンネルが0となるインデックスを取得
# ex) ([0, 1, 3, 3, ...],[2, 4, 55, 66, ...])
# columnとrowがそれぞれ格納されたタプル(長さ２)となっている
index = np.where(img[:, :, 3] == 0)
# 白塗りする
img[index] = [255, 255, 255, 255]
# 出力
cv2.imwrite("output.png", img)
~~~

# おわりに
αチャンネルの取得も、透過部分の白塗りも簡単に実装できましたね。
オンプレミスとは？

- オンプレミスとはサーバーの運用方法の一つで、**自社の中で情報システムを保有し、自社の設備で運用すること**である。(つまり「自社運用のサーバー環境」のこと)

- 英語の表記は「On-Premises」
※ Premiseは「構内」、「敷地」などといった意味である。

- よく「オンプレ」と略されて言われている。

- クラウドサービスが普及してきたことで、区別させる為に使われている。

#オンプレミスのメリット
- 自社で導入・運用するので、カスタマイズが自由にできるというメリットがある。

- 情報の機密性が高まる。

- 外部のシステム障害を気にしなくて済む。

#オンプレミスのデメリット
- 導入や維持に比較的コストがかかってしまう。

- システムの規模が大きくなれば、その分開発や保守などに手間がかかってしまう。
[Multiple commands produce '/Users/ユーザ名/...省略.../Info.plist']が発生した場合

#### 問題
Info.plistを誤って削除してしまい、手動で追加し直した。
その後、エミュレータでアプリを実行すると下記のようなエラーが出るようになった。

```
Multiple commands produce '/Users/ユーザ名/Library/Developer/Xcode/DerivedData/Runner-hogehoge/Build/Products/Debug-iphonesimulator/Runner.app/Info.plist':
1) Target 'Runner' (project 'Runner') has copy command from ‘/Users/…省略…/Info.plist'
2) Target 'Runner' (project 'Runner') has process command with output '/Users/…省略…/Info.plist'
```
#### 対応

Xcodeで下記の場所まで移動。

Runner → Build Phases → Copy Bundle Resources

Copy Bundle Resourcesに記載されているInfo.plistを削除。

以上

軽ーく調べてみたけど、手動で追加したときにファイルが重複しちゃってるみたいな感じっぽい
詳しいこと知ってる人いたら教えてください。
オンプレミス SharePoint で IRM 機能がどうも有効にできないときは

## この記事は
少し古い情報ですが、SharePoint で AD-RMS を利用しようとすると、設定がうまくいかないときがあります。AD-RMS のファイルに施された DACL の許可が必要な場合があります。

ちなみに、SharePoint の IRM 関連ファイル・ログなどは %ProgramData% 配下にあります。

## ファイルに対して権限設定が必要です。
https://rmsserver/_wmcs/certification/servercertification.asmx
1. AD-RMS サーバにログインします。
2. 下記のフォルダまで移動します。(AD-RMS の実体です) C:\Inetpub\wwwroot\_wmcs\Certification
3. ServerCertification.asmx の右クリックから、セキュリティを選択します。
4. 追加 をクリックし、SharePoint のコンピューター アカウント オブジェクトを追加します。
5. 読み取り・読み取りと実行を許可します。
6. AD-RMS で iisreset します。
【.NET】VB.NETは型推論すべきなのか

# 型推論とは
いまさらわざわざ書くことではないですが、一応書いておくと**「代入式の右辺からコンパイラに型を推論させる(暗黙の型指定)」**ってやつですね。
わざわざString(string)とかInteger(int)とかって書かずに良くなります。
まあ処理によってはコンパイラさんがうまく判断できずにObjectってされちゃったりもするので状況によっては使えませんが、使えるところでは使っていくべきものですね。
もちろん、可読性に影響が出るのであれば避けるべきですが、ここでは可読性については考慮しないものとして書きます。

```c#:variable.cs
string value1= "型指定";
var value2 = "型推論";
```

```vb:variable.vb
Dim value1 As String = "型指定"
Dim value2 = "型推論"
```

# 「VB.NETは型推論すべきなのか」とは
VB.NETでも上記のコードのように型推論させることができます。
なのになぜこんなことを書いているかというとMicrosoftのコーディング規約にVB.NETでは型推論について言及がされていないからです。

C#.NET: [C# のコーディング規則 (C# プログラミング ガイド)](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/coding-conventions "C# のコーディング規則 (C# プログラミング ガイド)")
VB.NET: [Visual Basic のコーディング規則](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/program-structure/coding-conventions "Visual Basic のコーディング規則")

うーん、Microsoftとしてはなにか思惑があるのでしょうか。

これを見て以前はVB.NETを書く時は意図的に型指定をきっちり書いていましたが、めんどくさい、めんどくさい…
型によっては横にも長くなってださいし…

私は最近、VB.NETを書く機会があった時はむしろ積極的に型推論を書くようにして、なにか不都合がでるか気にしてみてますが、今のところは特にありません。

C#.NETと中間コードでも比較してみれば差(もしくは差がないこと)が分かるのかな？

## 「VB.NETは型推論すべきなのか」
私の意見としてはやはり型推論すべきだと思います。

型指定した場合はVB.NETの方が「Dim」、「As」といったワードを余計に多く書くことになります。
しかしながら型推論をした場合は「var」と「Dim」という差はあれど打つ文字数は同じになるのでスッキリして見えるように感じます。
打つ文字数が少なく済むならそれに越したことはありません。

## 気になる点
Golang等の他の言語も「var」であることを考えると「Dim」であることはうーん…って感じです。
まあVB.NETは他と比べると独自路線なのでこれに限った話ではないので今更ですが。

他の技術者が型推論を知らない、VB.NETで型推論できることを知らない可能性がある、という点もあります。
皆が皆、最初に学んでからさらに学ぼうという人ばかりではありません。
特にVB.NETはVB6やもっと前からやってきている人も中にはおり、そういった人にとっては混乱の種になるかもしれません(年代的に管理職になってそうですが)。

# あとがき
いろんな人の意見を聞いてみたいところです。
herokuデプロイ中precompiling assets failedとエラーが出た時

ローカル環境では問題なく動いていたのにherokuでデプロイ中に**precompiling assets failed**とエラーが出たので解決方法をまとめます。

logを調べているうちに環境内に問題がありそうだったので
ターミナルでエラー解析をします。

```

 RAILS_ENV=development bin/rails assets:precompile
```

こちらを実行することで開発環境ないでエラーがないかを確認することができます。

中身を見てみると、、、

```

warning Integrity check: Flags don't match                                     
error Integrity check failed                                                   
error Found 1 errors.                                                          


========================================
  Your Yarn packages are out of date!
  Please run `yarn install --check-files` to update.
========================================


To disable this check, please change `check_yarn_integrity`
to `false` in your webpacker config file (config/webpacker.yml).

```



ローカルでyarnを最新の状態にしているからなのかファイルのバージョンに古いのがあったためupdateする必要があったのかなと思います。

また、

```
To disable this check, please change `check_yarn_integrity`
to `false` in your webpacker config file (config/webpacker.yml).

```

このままではチェックと指示があるので下記のように変更します。　



```ruby:/config/webpacker.yml

check_yarn_integrity: false

```


この状態でもエラーが出たので下記コマンドで本番環境で問題がないか確認してみます。


```
RAILS_ENV=production bin/rails assets:precompile

UnitConversionError Incompatible units: 'px' and ‘%’
```

imcompatibleは相容れないという意味なんおでpxと%を同時に使っている可能性があります。


```css

.main{
  height: (100% - 780px);
  margin: 0 auto;
}
```

heightの計算にcalcを書いてない！！

```css

.main{
  height: calc(100% - 780px);
  margin: 0 auto;
}
```

もう一度デプロイするとうまくいきました。