OmniAICreator/Qiita-1.07M huggingface dataset:
"∀" や "∃" のある論理式を、リストを処理するコードで表して読解

例えば以下のような論理式がある。（Wikipediaの[ε-δ論法](https://ja.wikipedia.org/wiki/イプシロン-デルタ論法)より）

```math
{}^{\forall} \varepsilon > 0, \; {}^{\exists} \delta > 0 \;;\; {}^{\forall} x \in \mathbb{R} \; \left[ 0 < \left| x - a \right| < \delta \Rightarrow \left| f(x) - b \right| < \varepsilon \right]
```

これが何を主張しているかなどは置いておいて、[量化子](https://ja.wikipedia.org/wiki/量化)「&forall;」や「&exist;」がいくつも登場してどう読み取ればいいのか掴みにくい。日本語で書かれた場合も、「任意の〜について」「ある〜が存在して」「全ての〜に対して」となかなか厄介。**式が頭に入ってこない**のは理論を理解する以前の問題でとてもつらい。

読み取れるかどうかは恐らく慣れの問題だが、であれば**コードを書き慣れている人間ならコードで表したほうが読みやすい**のではないかと思った。というわけで試してみる。

## コードに翻訳
これをRubyのコードで*それっぽく*表すと以下のようになる。このコードはまともには動かないので実行することはできないが、ひとまず個人的には**式がとっつきやすくなった**。

- 量化の入れ子の様子がわかりやすく、ひとつずつ順番に考えられる
- 単体試験を書いたりする要領で、境界値の扱いなど細かいところまで目が届きやすい

```ruby
# x → a のとき f(x) → b となるか判定する
def converges?(f, a, b)
	POSITIVE_NUMBERS.all? do |e|
		POSITIVE_NUMBERS.any? do |d|
			REAL_NUMBERS.all? do |x|
				if 0 < (x - a).abs && (x - a).abs < d
					(f.call(x) - b).abs < e
				else
					true
				end
			end
		end
	end
end
```

コードへの書き換えは機械的。単に以下のようにしている。

- 全称量化「&forall;x」 → `enum.all? { |x| prop(x) }`
- 存在量化「&exist;x」 → `enum.any? { |x| prop(x) }`
	- 「実数全体を無限リスト化」は本来できないので、enumというのはあくまでイメージ
- 論理包含「&rArr;」 → `prop1(x) ? prop2(x) : true`
	- 左側の条件を満たさないときは真とすることに注意

論理包含はこの性質により、全称量化の対象範囲を事前に絞り込むという捉え方もできる。コードに反映すると以下の通り、 `filter` したものを `all?` で評価すればいい。

```ruby
def converges?(f, a, b)
	POSITIVE_NUMBERS.all? do |e|
		POSITIVE_NUMBERS.any? do |d|
			REAL_NUMBERS.filter do |x|
				0 < (x - a).abs && (x - a).abs < d
			end.all? do |x|
				(f.call(x) - b).abs < e
			end
		end
	end
end
```

※ もっとしっかり考えるなら、 `prop(x)` が例外を投げる（暗黙の前提条件を満たしていない）ときも偽と扱うべきかもしれない。（ `prop(x) rescue false` ）

## 他の言語の場合
リストを扱うメソッドや関数があるなら、だいたい同様のものがある。

- Java: [Stream](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html) の `allMatch` や `anyMatch`
	- ドキュメントにも「全称量化」「存在量化」の語句がある
- JavaScript: [Array](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array) の `every` や `some`
- Python: [組み込み関数](https://docs.python.org/ja/3/library/functions.html)の `all` や `any`

※ 再度になるが、「実数全体を無限リスト化」は本来できないので、これらはあくまでイメージとして挙げている。

## おまけ：冒頭の式の意味や利用
例に挙げた論理式は、[関数の極限](https://ja.wikipedia.org/wiki/関数の極限)（収束）について述べている。以下の式と等価であり、しかも「無限に近づける」といった曖昧な表現をなくしているため、厳密な定義として使える。（無限の概念はとにかく落とし穴が多く、雑に扱うといずれ間違える）

```math
\lim_{x \to a} f(x) = b
```

`0 < (x - a).abs` という条件を入れているため、常に `x != a` であることが保証される。そのため収束を考えるだけなら f(a) 自体はどうなっていても構わない（ b と異なる値でも未定義でもゼロ除算でもOK）。

（ x = a での）関数の連続性は、コードで表すと以下のように判定できる。 f(a) も計算できることが条件に入り、メソッドを展開する場合は `0 < (x - a).abs` という条件を取っても構わない。

```ruby
def continuous?(f, a)
	converges?(f, a, f.call(a))
end
```
WowzaStreamingEngine用のSSL証明書をLet'sEncryptで作成する


社内用など、インターネットに公開していないWowzaServerのSSL証明書をLet'sEncryptで更新する方法を調べたのでメモ。

ベースはこちらを参考にしました。
https://vanmarion.nl/blog/blog/ssl-letsencrypt-wowza-4-x-server-frontend/


# 前提
* docker をインストールしておいてください。
* 以下、「my-wowza.example.org」の部分は任意のドメインに読み替えてください。

# wowza-letsencrypt-converter
Let'sEncryptの証明書をwowza用のJKS形式に変換するスクリプトをダウンロードします。

```
cd /usr/local/WowzaStreamingEngine/lib
wget https://github.com/robymus/wowza-letsencrypt-converter/releases/download/v0.2/wowza-letsencrypt-converter-0.2.jar
```

# 証明書のリクエスト
```
docker run -it --rm --name certbot -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot certonly --manual --preferred-challenges dns -d my-wowza.example.org
```

以下のようなメッセージが表示されますので、DNSサーバで「_acme-challenge.my-wowza」のTXTレコードに「abcdefghijklmnopqrstuvwxyz1234567890ABCDEFG」を指定して保存します。

```
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.my-wowza.example.org with the following value:

abcdefghijklmnopqrstuvwxyz1234567890ABCDEFG

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
```

converterでJKS形式に変換して出力します。

```
cd /usr/local/WowzaStreamingEngine/lib
java -jar wowza-letsencrypt-converter-0.2.jar -v /usr/local/WowzaStreamingEngine/conf/ /etc/letsencrypt/live/
```
```
cd /usr/local/WowzaStreamingEngine/conf
cat jksmap.txt
# 表示される keyStorePath と keyStorePassword を後で使います。
```

```
vi VHost.xml
# ここで、KeyStorePath と KeyStorePassword を書き換えます。
```

WowzaStreamingEngineの再起動

```
service WowzaStreamingEngine restart
```

# TODO
* 自動更新

----
https://certbot.eff.org/docs/using.html
PCとスマホで要素を入れ替えたい場合[レスポンシブ]

#概要
PC用のデザインを作った後にスマートフォンのデザインに着手し始めてしまったので、要素がPCのための配置になっており、どうにか楽に要素を入れ替えられないかなと思い調べたのでメモします。

#解決策
`flex-box`を使って、`order`で順番を指定してあげることで解決することができました。

```index.html
<div class="parent">
  <div class="child1 order3">

  </div>
  <div class="child2 order1">

  </div>
  <div class="child3 order2">

  </div>
</div>
<style>
.parent{
  display:flex;
}
@media(max-width: 767px){
.parent{
  flex-direction: column; /* スマホ用に縦一列に並べる*/
}

/*orderの順番で配置してくれる*/
.order1{
  order: 1;
}
.order2{
  order: 2;
}
.order3{
  order: 3;
}
}
</style>
```

上記の場合、PCでは単純に`child1->child2->child3`の順で表示されますが、
スマホだとorder順に`child2->child3->child1`の順に配置してくれます。


#まとめ
レスポンシブのことを考慮しない設計をしてしまっていたので、とても助かりました。
忘れそうなので、自分メモとして残します。

#参考文献
[スマホとPCで要素の表示順番を入れ替えるには？flexbox「order」を使ってレスポンシブデザインに最適化！](https://www.misallychan.com/entry/2018/05/25/200000)
【エラー】tomcat8080は使用されています

## tomcatでやらかした話
tomcatを初めて触ったとき、コンソールで起動して、eclipseでも起動して、このエラー出しました。

それまでRailsをやってたので、localhostはコンソールで起動するものって思い込んでた:baby_tone1:

テキストエディタから起動できるなんて発想がなかったし、他の言語やってるとそれに囚われがちって気づきました。

## 解消方法
####①コンソールで起動していたtomcatを停止させる

- macのコマンドは[こちら](https://qiita.com/okapie/items/f3d66552bc1533e7af44)から

→eclipseでサーバーを実行出来たらよし:thumbsup:


#### ②裏で動いてるtomcatを停止させる
1.Macのターミナルから「lsof -i:8080」と入力する

2.PIDに記載されている数字を確認する
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
　　　 　　****　　　　　
　　　　　ココ！

3.ターミナルに「kill ****(←自身のPID番号)」を入力する

4.再度Eclipseからサーバーを起動する

→eclipseでサーバーを実行出来たらよし:thumbsup:

##### ↑アクティビティモニタで確認可能

![スクリーンショット 2021-02-24 19.34.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631023/e804a2cb-4ef7-941d-e642-c6d797166ae1.png)

## まとめ
ただの備忘録です:grinning:
OpenShift 4.4を構築してアプリを動かしてみる - VMWare ESXi インストール編 -

2021年1月現在、VMware ESXiのバージョンは7.0が登場していますが、稼働実績のある6.7で構築いたします。

## VMware ESXi 6.7のインストール
作成したESXiのインストールメディアをIntel NUCに挿入し電源を入れます。

### 1.インストール開始画面
イメージのロードが完了すると、画面上部に「Welcome to the VMware ESXi 6.7.0 Installation」と表示されます。
「Enter」キーを押下し、[Continue]を選択します。

### 2.EULA 同意画面
「End User License Agreement (EULA)」画面が表示されます。
内容を確認して、「F11」キーを押下し、[Accept and Continue]を選択します。

### 3.インストールディスク選択画面
「Select a Disk to Install or Upgrade」画面が表示されます。
インストールするSSDがハイライト表示されている事を確認し「Enter」キーを押下し、[Continue]を選択します。

### 4.キーボードレイアウト選択画面
「Please select a keyboard layout」画面が表示されます。
[US Default]から[Japanese]に変更し、「Enter」キーを押下し、[Continue]を選択します。

### 5.rootパスワード設定画面
「Enter a root password」画面が表示されます。
Root passwordを入力し、「Enter」キーを押下し、[Continue]を選択します。

### 6.インストール内容最終確認画面
「Confirm Install」画面で[Warning: This disk will be repartitioned.]の警告が表示されます。

### 7.インストール完了画面
インストールが完了すると「Installation Complete」画面が表示されます。
Intel NUCを再起動する為、「Enter」キーを押下し、[Reboot]を選択します。
インストールメディアは取り出します。
ESLintとPrettierの設定

## 目次
1. 必要なライブラリのインストール
2. ESLintの設定（ファイル作成・記述）
3. Prettierの設定（ファイル作成・記述）
4. VSCode側の設定

## 1. 必要なライブラリのインストール
```bash:
$ yarn add -D eslint prettier eslint-config-prettier
```

## 2. ESLintの設定
ESLintの設定の記述場所は、以下の3つがある。

- .eslintrc（yaml, json形式）
- package.json（eslintConfigに記述）
- eslintrc.js(オブジェクト形式) 

### .eslintrcの場合
```json:.eslintrc
{
  "root": true,
  "extends": [
    "eslint:recommended"
  ],
  "env": {
    "es6": true,
    "node": true
  }
}
```

### package.jsonの場合
```json:package.json
{
  ...
  "eslintConfig": {
    "root": true,
    "extends": [
      "eslint:recommended"
    ],
    "env": {
      "es6": true,
      "node": true
    }
  }
}
```

### 実行
```bash:
$ eslint --fix ./app/**/*.ts
```

## 3. prettierの設定
prettierの設定の記述場所は、以下の3つがある。

- .prettierrc（yaml, json形式）
- package.json（prettierに記述）
- prettier.js(オブジェクト形式) 

### .prettierrcの場合
```json:.prettierrc
{
  "tabWidth": 2,
  "printWidth": 300,
  "semi": false,
  "singleQuote": true,
  "bracketSpacing": true,
  "trailingComma": "es5",
  "arrowParens": "always",
  "parser": "typescript"
}
```

### package.jsonの場合
```json:package.json
{
  ...
  "prettier": {
    "tabWidth": 2,
    "printWidth": 300,
    "semi": false,
    "singleQuote": true,
    "bracketSpacing": true,
    "trailingComma": "es5",
    "arrowParens": "always",
    "parser": "typescript"
  }
}
```

### 実行
```bash:
$ prettier --write ./app/**/*.ts
```

## 4. VSCodeの設定
VSCodeを使用している場合、VSCode内でプラグインをインストールすることで、上記のコマンドを実行しなくてもアラートを出してくれたり、自動保管してくれるようになる。

```
プロジェクト
└── .vscode
    └── setting.json
```

```json:setting.json
{
  "editor.insertSpaces": true,
  "editor.formatOnSave": true,
  "[javascript]": {
    "editor.tabSize": 2,
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "eslint.validate": [
    "javascript",
    "javascriptreact"
  ]
}

```
EC2サーバーに RapiDocを導入

## RapiDocとは
swaggerベースの、APIドキュメント作成ツール。

- [公式サイト](https://mrin9.github.io/RapiDoc/)
- [Github](https://github.com/mrin9/RapiDoc)

## 起動
Dockerを利用して立ち上げるのが簡単です。

1. Dockerインストール

    ```bash
    yum install -y docker
    systemctl status docker.service
    ```

2. RapiDocを立ち上げ
設定ファイルを`env.list`ファイルに放り投げ、起動します。
諸事情により、ホスト側のポートを`8081`としています。

    ```bash
    echo SPEC_URL="https://petstore.swagger.io/v2/swagger.json" >> env.list
echo RAPIDOC_OPTIONS="theme='dark'" >> env.list
docker run -it --rm -p 8081:80 --env-file ./env.list mrin9/rapidoc
    ```

3. 確認
http://abcd.com:8081/
![screencapture-alc-eye-labs-8081-2021-02-24-19_07_14 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87021/eaa54b7c-da3a-87c1-47dc-99d2ad18e093.png)


## 付録
見た目に関して、細かくカスタマイズできるようです。
https://mrin9.github.io/RapiDoc/api.html#att-colors
プログラミングスクールって実際どうなの？？

某プログラミングスクール（業界2番手？）に通い、先日卒業しました！（現在は転職活動中です）
私が感じたプログラミングスクールのメリット・デメリット等をまとめます。
これから入校を検討されている方の参考になれば幸いです。

#前置き
本記事は私個人の意見であるため、正解ではありません。
また、あくまでも私が通っていたスクールの見解のため、全てのスクールに該当するものではありません。

#スケジュール
1ヶ月目：個人学習
2ヶ月目：チーム開発
3ヶ月目：ポートフォリオ制作

#学ぶことができるスキル
・HTML/CSS
・Javascript
・Ruby
・Ruby on rails
・Git
・AWS EC2,RDS
・MySQL

ざっくりとこのような内容を勉強します。
学ぶスキルによって程度の差はありますが、基礎を学習するだけであるため、自身で調べて学習することは必ず必要になります。
私はドットインストール、Udemy、Youtubeを活用していました。
正直、これらをうまく活用すればカリキュラムの内容を網羅することは可能だと思います。。。
具体的に何を使って勉強したかは転職成功後にでも記事にしたいと思います！

#スクールのメリット/デメリット
#####デメリット
①カリキュラムの内容が満足のできるものではない
②料金が高い（70万程でした）

①については上述の通り、いろんな教材を駆使すれば事足ります。
②についてはそのままの意味！高いです！笑

細かいデメリットは多々ありますが、大きなデメリットはこの2点です。
#####メリット
①期間が決まっているためだらけることなく勉強に集中できた
②同じ境遇の人達と知り合うことができた

①については3ヶ月と決まった期間であったため、集中して勉強に取り組めました。また、おそらく独学だと転職活動のタイミングに迷うと思うのですが、3ヶ月目にポートフォリオを完成させなくてはならなかったので、この心配もありませんでした。
②についてはコロナの影響で完全オンラインでの学習になっているので、微妙です。
チーム開発のメンバーとは親しくなれると思います。

こちらも細かいメリットは他にもありますが、この２点が大きなメリットです。

#カリキュラムの内容だけで未経験から転職できるの？
こちらについては私自身が現在転職活動を開始したばかりであるため何とも言えませんが、周りと差別化を図るためにカリキュラム外のことも勉強した方が良いと思います。
（カリキュラムの内容についても、扱えるレベルに差を付けられると思うので一般教材の活用をおすすめします）

#総評
一人で黙々と勉強したい人や勉強スケジュールを管理できる人にとっては、プログラミングスクールは不要です！

#最後に
若干プログラミングスクールの批判的な内容になってしまいましたが、プログラミングスクールに入ったことについて後悔はしていません。
私は全面的にスクールを頼るのではなく、「プログラミング学習のために利用してやる」くらいの気持ちで入校しました。
（全面的に頼ろうという考えでは必ず後悔します）

今回は以上です！晴れて転職が決まった後に具体的な勉強方法なんかを記事にしたいと思います！
Macでvueを使おうとするとnot foundになる問題の解決

インストールはできているのに、vueを使おうとするとnot foundになる現象が起きたのでメモです。
「パスを通す」ことで解決できました。

```:terminal
zsh: command not found: vue
```

vueをインストールした後にこのコマンドが出てきたときは

.bash_profileの書き換えの書き換えをします。

#手順

###.bash_profileの書き換え

以下のコマンドで.bash_profileの書き換えを行う(yarnの場合)

```
export PATH="/Users/＊＊＊/.npm-global/lib/node_modules/@vue/cli/bin:$PATH"
```

###ターミナルで操作

再びターミナルで更新を反映させます。

```
$ source ~/.bash_profile
```

これで$ vue -VをするとNot foundにならなくなり、インストールされているバージョンが表示されるようになります。
【vba】 Processing Bar の例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509696/51002526-39a0-e289-b0ff-c32d993b821c.png)


```vb
' ********************************************************************************************
' Progress character string creation  Process
' Ex ：Application.StatusBar = "Processing ..." & GetProgressString(counter, Max) & "＠" & param
' ********************************************************************************************
Public Function GetProgressString(current, max) As String
    If current > max Then
        MsgBox "<GetProgressString> Error : " & "current > max value NG", vbCritical, "Error Message"
        Exit Function
    End If
    Dim progress As String
    Dim rate As Long
    ' Calc %
    rate = (current / max * 100) \ 10
    ' ■■■■■□□□□□
    progress = String(rate, GetMsg(LANGUAGE_KBN, 6)) & String(10 - rate, GetMsg(LANGUAGE_KBN, 7))
    GetProgressString = " " & progress & "[" & current & "/" & max & "]"
End Function
【jquery,js】入力した文字列でリンクを生成する、Dom操作、自前関数　[html,append,text] [js07_20210224]

####  <font color='orange'>処理の概要</font>
テキストボックスにリンクを生成するためのタイトルと、urlを入力。実行ボタン押下後は、生成されたリンクタグをテキストエリアに表示し、リンクを貼る

##### 処理のフロー：
　(1)テキストボックスに入力された値を取得
　(2)入力された値を自前メソッドに渡す
　(3)domを作成する
　(4)作成したdomの要素を取得してテキストエリアへ表示する
　(5)作成したdom要素をhtml追加する

####  <font color='orange'>画面イメージ</font>


#####画像１
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647299/8b4a290f-7e0e-d95e-4c65-26a519e09472.png" width="500px">

#####画像２
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647299/a1f96ad8-dbfa-35fb-d3ba-0bd62b1e7823.png" width="500px">


####  <font color='orange'>ソースコード</font>
```html:index.html
<body>
	タイトル：<input type="text" id="userText" value="グーグル" class="input-style"><br>
	ｕｒｌ：<input type="text" id="userUrl" value="https://www.google.co.jp/" class="input-style"><br>
	<input type="button" id="execButton" value="実行"><br>
	<textarea id="dispHtmlTag"></textarea><br>
	<div id="dispLink"></div>
</body>
```

#### リファクタリングする前
```javascript:main.js
// DOMの準備後に実行する内容
$(function() {
    $("#execButton").click(function(){
        var title = $("#userText").val();
        var url = $("#userUrl").val();

        makeLink(title,url);

        function makeLink(argTitle,argUrl) {
            //Domの作成
            var linkBase = $("<a>");
            linkBase.text(argTitle);
            linkBase.attr("href",argUrl);

            var div = $("<div>").append(linkBase);
            $("#dispHtmlTag").val(div.html());
            $("#dispLink").html(linkBase);
        }
    });
});
```

####  <font color='orange'>ポイント</font>
html：
(1)特になし
js：
(1)jqueryでは自分自身の要素取得するメソッドがない。このため、一度`<div>`の親要素をダミー宣言し、ここに.htmlメソッドで`<a>…`の要素を文字列として取得する。
(2)新たにリンク属性を作成する場合は`$("<a>")"`を宣言する
(3)要素の中に要素を追加する場合は、appendを使用する
(4)自前メソッドの

####  <font color='orange'>参考資料</font>
JavaScript(仕事の現場でサッと使える！デザイン教科書)　p160
rex0220 データ反映プラグイン

[データ生成プラグイン](https://qiita.com/rex0220/items/8e760adbfd69b9416b2d)で、テーブルを別アプリのレコードに展開後、そのレコードを編集した場合に元のテーブル行にデータを反映するプラグインです。

・[データ生成プラグイン](https://qiita.com/rex0220/items/8e760adbfd69b9416b2d)で生成したレコード専用
・PC・モバイル対応

Ver.18
・プラグイン設定で、関連レコード情報取得時エラーの対応
・FSIZE 関数追加。バイト数を適切な単位（B, KB, MB など）に変換し、カンマ区切り付きでフォーマット
　FSIZE(5000000) -> "4.8 MB"
・FILE 関数追加。添付ファイル項目の値を取得
　※イベントの種類により取得可能(追加・編集中のイベントでは取得不可)
　FILE(file, "key", 0) -> "nn.."
・FVAL, FIELDS_HTML 等の関数追加

# データ反映プラグインの概要

[データ生成プラグイン](https://qiita.com/rex0220/items/8e760adbfd69b9416b2d)で、テーブル行からレコードに１対１の生成を行った指定に、データ反映プラグインが対応します。
レコード編集時、プラグイン設定で指定した項目の値を元レコードのテーブルに反映します。

![2021-02-24_18h34_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/cdeb73b8-5582-a22c-8067-638be53ed980.png)

レコード編集とテーブル項目への反映

![2021-02-24_19h02_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/1daff1b3-51cf-14de-b849-bfe0c946d64a.png)



# データ反映プラグインの設定

処理名；プラグイン設定用メモ
アプリ：データ反映先アプリを選択します。
識別ID：データ生成プラグインで指定した「識別ID」と同じものを指定します。
テーブル：データ生成プラグインで指定したテーブルを指定します。
設定項目：対象アプリに設定する項目と計算式を設定します。

![2021-02-24_18h54_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/512f056c-3c48-85d0-24c3-1e6441c261ed.png)

## 設定項目

「自動設定」をクリックすると、反映先アプリのテーブル項目とフィールドコード・タイプが同じものを自動設定します。

![2021-02-24_18h58_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/ed8edaf7-67bb-6156-81bc-44182076ae8c.png)

# 注意事項
既に、JavaScript によるカスタマイズを行っているアプリの場合、処理が競合して、エラーになる場合があります。その場合は、該当するアプリでプラグインの使用を中止してください。
【エラー】unknown column '~' in 'field ~'

## エラー
DBにデータを保存したいのに出来ない…
コンソールを確認したところ下記のエラー:eyes:

```
unknown column 'question_id' in 'field list'
```

## 原因
question_idは、questionsテーブルの中にあるのに、correct_answersって書いてた…:baby_tone1:


```
String sql = "INSERT INTO correct_answers (question_id, answer, created_at, updated_at) values (?,?,current_timestamp(),current_timestamp())";
```

## まとめ
記事少ないと思ったらこんなヘナチョコミスかよ。
もうこんなミスしたくない:hugging:
今後同じエラーがでた時のためにも備忘録。


①データベースエラーだったらまずDBに関わる部分全部確認すること
・DAOのSQL文、Beanのカラム名、DBのカラム名が同じか
・DAOのSQL文のテーブル名間違ってないか

②コンソールを細かく確認チェック！
・エラー文の一文だけじゃなく、他の行も読む

以上
TableViewとCellのいろいろな設定

#はじめに
TableViewとCellの設定がたくさんあるので、知っている事を書いていきます。
※随時更新予定


#TableViewの設定編

###Cellの数

#####Cellの数が固定の場合(要素数が変化しない場合)
TableView → Content → [ Static Cells ]

#####Cellの数が可変の時(要素数が変化する場合)
TableView → Content → [ Dynamic Prototypes ] 

|設定場所|
|---|
|![スクリーンショット 2021-02-24 10.26.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692883/ea5942fa-6ba2-3da4-118e-e54533e73dc3.png)
|

###セルの選択

#####選択不可
TableView →　Selection　→　[ No Selection ] 
#####選択可
TableView →　Selection　→　[ Single Selection ] 
#####複数選択
TableView →　Selection　→　[ Single Selection ] 

|設定場所|
|---|
|![スクリーンショット 2021-03-03 17.30.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692883/b4f62404-4c75-589c-8f10-2560d2e2f209.png)
|



###セクションヘッダーのスタイル変更

| TableView →　Style　→　[ Plain ] の場合 |TableView →　Style　→　[ Grouped ] の場合 |
|---|---|
|![スクリーンショット 2021-02-24 14.08.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692883/1d40673a-aa1a-5c35-c422-5314aa7418e3.png)|![スクリーンショット 2021-02-24 14.10.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692883/bc18d3da-4097-1b61-44e5-bf9f8b3f6d75.png)|
|一行分の高さで表示|二行分で表示
スクロールするとヘッダーが残る|スクロールしてもヘッダーは残らない|

|設定場所|
|---|
|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692883/27e3c442-97c4-fd33-f4bd-a6638be1ecda.png)
|

#Cellの設定
###Cellの高さを可変にする
※TableViewの設定は省略します
1.Cell の ContentView に Label を追加する

2.Label に上下左右の制約をつける(Label→Linesは0に設定しておく)
![スクリーンショット 2021-02-24 17.51.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692883/11d39e40-33b2-5bf6-b8a4-108c46913222.png)
3.Cellのカスタムクラスを作成する

```
class CustomTableViewCell:  UITableViewCell {
    @IBOutlet weak var label: UILabel!　//４.の設定後に接続する
}
```
4.CellのCustomClassを設定し、LabelをOutlet接続する
![スクリーンショット 2021-02-24 17.48.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692883/09db4cb4-06cb-4d7c-8d50-e8598a60035c.png)

5.以下のコードを設定する

```
    // 任意
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
      return 90 // セルの仮の高さ見たいなもの
    }
    
    // 必須
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        UITableView.automaticDimension　// 高さが自動的になる設定
    }
```


###Cellをアニメーション付きでTableViewに追加する
以下の1、２のコードを、Cellを追加する際に記述する。

```
        tableView.beginUpdates() // 1
        tableView.insertRows〜〜〜〜 // Cellの追加処理
        tableView.endUpdates()　// 2
```
![ezgif.com-gif-maker (3).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692883/01af167c-031a-9c7a-dbbf-71e193478bb3.gif)




## まとめ
もう少し追加して、まとまりのある記事にしていこうと思います。
Gatsbyで作成したBlogのシンタックスハイライトをVSCodeのテーマにしたい

### Gatsby

Gatsbyのインストール 

~~~
$ npm install -g gatsby-cli
~~~


### Gatsby starter blog

gatsby-starter-blogをインストール

~~~
$ gatsby new gatsby-starter-blog https://github.com/gatsbyjs/gatsby-starter-blog
~~~

開発サーバーを起動

~~~
$ cd gatsby-starter-blog
$ gatsby develop
~~~

**gatsby-starter-blogのシンタックスハイライト**

![スクリーンショット 2021-02-24 11.51.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/741283/920e515b-3268-aba8-05ed-26015e48b1f7.png)

### プラグインのインストール

- [gatsby-remark-prismjs](https://www.gatsbyjs.com/plugins/gatsby-remark-prismjs/)

~~~
$ npm install gatsby-transformer-remark gatsby-remark-prismjs prismjs
~~~
### gatsby-config.js の設定

pluginをインストールしたら`gatsby-config.js`に使用するプラグインの設定を記述します。

`gatsby-remark-prism` は `gatsby-transformer-remark`のプラグインなので、gatsby-remark-prism の `plugins` 内に記述します。

```js:/gatsby-config.js

plugins: [
  {
    resolve: `gatsby-transformer-remark`,
    options: {
      plugins: [
        {
          resolve: `gatsby-remark-prismjs`,
          options: {
            classPrefix: "language-",
            inlineCodeMarker: null,
            aliases: {},
            showLineNumbers: true,
            noInlineHighlight: false,
          },
        },
      ],
    },
  },
]
```

### CSS ファイルの作成

任意のファイル名で`src/`にcssファイルを作成します。
`gatsby-bowser.js`に作成したcssファイルをimportしないと反映されません。

ファイル名を`src/prism.css`で作成した場合

~~~diff:gatsby-browser.js
- import "prismjs/themes/prism.css"
+ import "./src/prism.css"
~~~

### VSCode テーマの設定

VSCode Dark+

- [GitHub - prism-themes/themes/prism-vsc-dark-plus.css](https://github.com/PrismJS/prism-themes/blob/master/themes/prism-vsc-dark-plus.css)

その他の VSCode のテーマや、ATOM のテーマもあります。

- [GitHub - prismjs-themes](https://github.com/PrismJS/prism-themes)


### 開発サーバーを再起動

~~~
$ gatsby develop
~~~

全く同じようにやってもエラーが起きる場合は下記コマンドで治る場合が多いです。

~~~
$ gatsby clean
$ gatsby develop
~~~

![スクリーンショット 2021-02-24 12.07.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/741283/9a722e4a-0b02-ac16-aa41-5d949a37e507.png)
【SwiftUI】Buttonを『画面の幅を基準にした大きさ』に設定する

# どういうことか

`frame(width:)`で幅を設定すると機種ごとに見た目がズレるので、画面の幅を基準に設定する。

## 実装

`frame`によって設定するが、`background`の手前に書かなきゃいけないっぽい。

```swift

Button(action: {
    print("押された")
}){
    Text("押してください")
        .fontWeight(.bold)
        .font(.system(size: 20))
        // フォントの色
        .foregroundColor(Color.white)
        // 幅を画面いっぱい、高さも指定（maxWidthを使っている場合、heightだと指定できない）
        .frame(maxWidth: .infinity, minHeight: 48)
        // ボタンの色
        .background(Color.blue)
        // 両端にpaddingをかける
        .padding(.horizontal, 32)
}
```

以上。
dashではshell展開ができない

## Environment

- Ubuntu 20.04.1 LTS (Focal Fossa)
- dash

## Problems

以下のコードを実行すると、シェル展開がされない

```bash
mkdir {1,2,3}
```

```
cat << EOF > mkdir.sh
mkdir dir{1,2,3}
EOF
sh ./mkdir.sh
```

```
# ls -l
drwxr-xr-x  2 root root     4096 Feb 24 17:07 dir{1,2,3}
```

## How to solve

bashでスクリプトを実行すれば望む結果となる。

```diff
cat << EOF > mkdir.sh
mkdir dir{1,2,3}
EOF
- sh ./mkdir.sh
+ bash ./mkdir.sh
```

```
# ls -l
drwxr-xr-x  2 root root     4096 Feb 24 17:09 dir1
drwxr-xr-x  2 root root     4096 Feb 24 17:09 dir2
drwxr-xr-x  2 root root     4096 Feb 24 17:09 dir3
```

## Description

Ubuntuの`sh`で起動されるdashは、シェル展開が利用できないようである。

## Reference
[PHP]じゃんけんプログラム

未経験でシステムエンジニアとして新卒入社し、もうすぐ1年です。
が、エンジニアとして成長できているか不安だったのでこれから少しずつ勉強し
このQiitaにアウトプットしていきます。

<h2>[PHP]じゃんけんプログラム</h2>

<h4>ロジック部分</h4>
```php

<?php

if(isset($_POST['player_hand'])) {

    $player_hand = $_POST['player_hand'];

    $pc_hands = ["グー", "パー", "チョキ"];
    $pc_hand = $pc_hands[array_rand($pc_hands)];

    if($player_hand == $pc_hand) {
        $result = 'あいこ';
    } elseif($player_hand == "グー" && $pc_hand == "チョキ" || $player_hand == "チョキ" && $pc_hand == "パー" || $player_hand == "パー" && $pc_hand == "グー") {
        $result = '勝ち';
    } elseif($player_hand == "グー" && $pc_hand == "パー" || $player_hand == "チョキ" && $pc_hand == "グー" || $player_hand == "パー" && $pc_hand == "チョキ") {
        $result = '負け';
    }
}
?>
```
<h4>学んだこと</h4>
・if文の条件「～かつ～の場合　または　～かつ～の場合、、、」は下記で記述が可能

```php
elseif($player_hand == "グー" && $pc_hand == "チョキ" || $player_hand == "チョキ" && $pc_hand == "パー" || $player_hand == "パー" && $pc_hand == "グー")
```

・配列からランダムで値を取得

```php

$pc_hand = $pc_hands[array_rand($pc_hands)];
```
shell関数の引数にリストを引き渡して、内部でループ処理をする

## Environment

- bash

## Problems

以下のようなコードを実行したが、想定通りに動作してくれない。

```
#!/bin/bash
# your code goes here

loop_func () {
	LINES=$1
	COUNT=0
	for i in ${LINES}
	do
		echo ${COUNT}':'${i}
		COUNT=$(( COUNT + 1 ))
  	done
}

str='word1 word2 word3'
loop_func ${str}
```

```
word1
```

https://ideone.com/jqzbnf

## How to solve

以下のように変更することで想定通りの挙動になる。

```
#!/bin/bash
# your code goes here

loop_func () {
	LINES=$*
	COUNT=0
	for i in ${LINES}
	do
		echo ${COUNT}':'${i}
		COUNT=$(( COUNT + 1 ))
  	done
}
str='word1 word2 word3'
loop_func "${str}"
```

```
word1
word2
word3
```

https://ideone.com/Oc9ICz

## Description

shell変数を`""`で囲まずに関数に引き渡した場合、以下のように展開されて関数に受け渡されている。

```
loop_func word1 word2 word3
```

そのため、第一引数の`word1`のみが`$1`に格納され、上記のような挙動になっていた。

以下のように`$*`という表記を用いることで、同様の処理を実現することもできる。

```
#!/bin/bash
# your code goes here

loop_func () {
	LINES=$*
	COUNT=0
	for i in ${LINES}
	do
		echo ${COUNT}':'${i}
		COUNT=$(( COUNT + 1 ))
  	done
}
str='word1 word2 word3'
loop_func ${str}
```

## Reference
UnityによるOculus Quest2用のアプリ開発の第一歩 ”#2 Oculus Quest2実機ビルド編"

こんにちは．
Sadmachineです．
UnityによるOculus Quest2用のアプリ開発の第一歩ということで，連載企画です．
[前回（#1 UnityとOculusの設定編）はこちら！](https://qiita.com/Sadmachine/items/711047bfd28c84d5950a###%202.5%20Oculus%20Integration%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88)

今回は第二回  Oculus Quest2実機ビルド編です．
Oculus Quest2でOculus Integrationに入っているサンプル”DistanceGrab”のビルドを行なって行きます．
Windows，Macどちらでも同様の方法でビルドできます．
少しでも参考になりましたらLGTMやフォローをお願いいたします！

<!-- Markdownのテンプレート -->
## 目次
<!-- @import "[TOC]" {cmd="toc" depthFrom=2 depthTo=3 orderedList=false} -->
<!-- code_chunk_output -->
- [0. 開発環境](## 0. 開発環境)
- [1. Oculus QuestでUnity Projectをビルドする](## 1. Oculus QuestでUnity Projectをビルドする)
  - [1-1 DistanceGrabを開く](### 1-1 DistanceGrabを開く)
  - [1-2 実機ビルドをする](### 1-2 実機ビルドをする)
  
- [まとめ](## まとめ)

<!-- /code_chunk_output -->
## 0. 開発環境
筆者はWindowsとMac両方で開発を行なっております．
環境は以下の通りです．

- Windows 10
- macOS Catalina 10.15.7
- Unity 2019.4.20f1
- Oculus Integration 25.0.0

UnityとOculus Quest2の詳細な設定は[この記事](https://qiita.com/Sadmachine/items/711047bfd28c84d5950a###%202.5%20Oculus%20Integration%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88)をご覧ください．

## 1. Oculus QuestでUnity Projectをビルドする
### 1-1 DistanceGrabを開く
前回設定したUnityのProjectを開きます．
その後

```
Assets/Oculus/SampleFramework/Usage/DistanceGrab
```

でDistanceGrabを選択．
ヒエラルキーにDistanceGrabというシーンが出ているはずです．
<img width="1440" alt="スクリーンショット 2021-02-24 18 22 51" src="https://user-images.githubusercontent.com/65950135/108979160-ba3f0e80-76cd-11eb-9f4e-adee35a26685.png">

### 1-2 実機ビルドをする
#### 1-2-1 実機ビルドの準備
Oculus Quest2をPCに接続し，Oculus Quest2側に許可ウィンドウが出るので許可しておきます．
その後

```
File/Build setting/Android → デフォルトデバイスをOculus Quest2に変更
```
すれば，準備は完了です．
簡単．

#### 1-2-2 実機ビルドの実行
以下の命令を実行します．

```
File/Build setting/Android → Build and Runを押す
```
.apkを生成，保存するためウィンドウが出てきますが，適当な名前をつけて保存．
ビルドが開始され，成功すると下の方またはコンソールに"Success"と出てきます．

#### 1-2-3 実機で遊ぶ
ビルドが完了したらOculus Quest2を被ってみましょう．
ビルドされたアプリが実行されており，遊べるはずです．

今回ビルドしたDistanceGrabは物を掴んだり投げたりできる基礎的なシーンとなっており，VRに必要な技術を学ぶにはちょうどいい材料かと思います．
いろいろな物を置いたりしてDistanceGrabを改造してみてもいいかもしれません．

#### 1-2-4 アプリを終了させた後に再度実行　もう一度遊ぶ
アプリを終了しホーム画面に戻った後でもBuild and RunしたアプリはOculus本体に保存されているため再度Buildしなくてもそのまま遊べます．
ホーム画面のアプリ欄を選択し，右上のタブを提供元不明（Unknown Sources）に変更すれば表示されます．
そのまま実行すればBuildされたゲームを開始できます．
この項目からアンインストールなども行えます．
※設定ではなくアプリにBuildされたゲームはあるので気をつけてください．

## まとめ
今回は，UnityによるOculus Quest2用のアプリ開発の第一歩 ”#2 Oculus Quest2実機ビルド編"ということで，Oculus Quest2での実機ビルドの方法を紹介しました．
備忘録的なまとめですが，誰かの参考になれば嬉しいです．
少しでも参考になりましたらLGTMやフォロー，Twitterでの拡散をしていただければ幸いです．
複数行の文字列をShell変数に格納して、forで回した時の挙動

## double quoteで囲むと改行して出力する

double quoteで囲むと改行して出力する。

囲まないと半角スペースになる。

```bash
LINES=`cat <<EOF
line1
line2
line3
EOF
`

echo ${LINES}
echo "${LINES}"
```

output

```
line1 line2 line3
line1
line2
line3
```

https://ideone.com/xVvPIe

## for文で回すときはdouble quoteで囲まない

for文で回してもらうときは半角区切りで渡す必要があるため、double quoteで囲まないほうがいい。

double quoteで区切ると1行の文字列として扱われてしまう。

```bash
#!/bin/bash
# your code goes here

LINES=`cat <<EOF
line1
line2
line3
EOF
`

COUNT=0
for i in ${LINES}
do
  echo ${COUNT}':'${i}
  COUNT=$(( COUNT + 1 ))
done

COUNT=0
for i in "${LINES}"
do
  echo ${COUNT}':'${i}
  COUNT=$(( COUNT + 1 ))
done
```

output

```
0:line1
1:line2
2:line3
0:line1 line2 line3
```

https://ideone.com/XaFJjj
git add . しようとしたら fatal: not a git repository (or any of the parent directories): .gitと怒られた！


```java
fatal: not a git repository (or any of the parent directories): .git
```

- new リポジトリは作ってある

### ⭐️やったこと
- User の登録

```
$ git config --global user.name "xxxx"
$ git config --global user.email "xxxxxx@gmail.com"
```

- git の初期化

```
$ git init
Initialized empty Git repository in 作業しているディレクトリ/.git/
```

- git branch で確認

```
 git branch
* master
```

- 再度

```
git add .
```
- 無事に動きました！
sassの大まかな理解

###はじめに
学習始めたての初心者のアウトプットなので内容も薄いとは思いますが
それでも見ていただいた方でご指摘があればよろしくお願い致します。

今回はsassを利用して便利だと感じたものを大まかに投稿していきます。



##Sassとは
・CSSを効率よく記述することができる言語
・sassファイルはcssに変換される
###変数 
・変数を定義することができ、クラスに代入する事もできる。
・変数は利用する箇所より、前で定義することに注意が必要かもです。


$blue: #1f07db　　　←これ

.title
  color: $blue；




###入れ子・ネスト
・同じセレクタを何度も書かなくても良い
・「セレクタ:hover」→「&:hover」は
&記号に書き換えて、まとめることが可能。
###import
外部先からファイルを読み込む事ができる


###mixin
いくつかのコードを1つにまとめて、複数箇所で簡単に呼び出すことが可能。
同じコードを何度も書く必要がなくなり、無駄なコードを省略することが可能
Excel VBA 変数をセルに表示させるには?

(注 この記事ではExcel 2019を使用しています)

　Excel VBAを学習すると、セルに値を代入する「Range("セル").value = 値」という構文を習うと思います。

```vb
'A1セルにExcelという文字(値)を代入する
Sub 代入()
    Range("A1").value = "Excel"
End sub
```
セルに値を代入する回数が少ないのならばこれでも良いのですが、代入する回数が多いと毎回「Range("セル").value = 値」と書くのは面倒くさいですよね。今回は変数をセルに代入する方法について解説したいと思います。

```vb
'まずA1セルに表示する変数「ランク」を定義する
'次に変数「ランク」にゴールドという文字(値)を代入する
Sub 代入()
    Set ランク = Range("A1")
    ランク.Value = "ゴールド"　'.Valueは省略可能
End sub
```

これだけだとありがたみがないですが、if文を使うとありがたみがわかると思います。
ijenims record 2021.02.24

# Topics
昨日作成した記事（ijenims record 2021.2.23）を、ようやくQiitaにアップすることができた。
手間取った原因は、Qiitaへのアカウント登録が不十分であったようである。
## 本日の学習内容
- freeCodeCamp：Basic CSS 100% complete!（色関係, Fallback, :root）

## その他
- 疑似ブログの日記ページは長くなりすぎてユーザビリティがどんどん低下している。そこで、学習記録はQiitaに移転することとする。学習アイテムの一覧を疑似ブログに残すことにしよう。
- 学習カリキュラムの作成アプリを探そうと思う。
OracleApplicationExpress（APEX）をお試し利用してみる ～データベース作成～

#はじめに
APEXはデータベース上で動作するので、まずはデータベースを作成する必要がある。今回はデータベースの作り方をメモ

#データベース作成
まずは前回登録したアカウントでコンソールにアクセスする。
https://cloud.oracle.com/sign-in

無事にログインできたらGet Startedタブの「Create an ATP database」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632397/517ba371-61f2-3f98-f1c0-cbbe51a48e3f.png)

作成するデータベースの情報を入力する。（workload typeにAPEXがあるが選択できない）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632397/f4ba3a50-8aa3-38ca-5647-b3a024b713d5.png)

Always FreeをOnにすると自動的にCPUやStorageがFree用に設定される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632397/acb18c04-f569-029c-d305-d951df977856.png)

Adminの情報を入力、その他のOptionも図の通り選択して「Create Autonomous database」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632397/14db817b-4bc4-812e-c82b-9c36b3a9f9bd.png)

作成されたデータベースの情報が表示されて完了。
次回はやっとAPEXの設定に進んでいく。
Windows上のMicrosoft OutlookでProtonMail Bridgeを使うときに出る証明書のエラー(警告)を直す

## ProtonMail Bridge概要

ProtonMailは独自のデスクトップクライアント(メーラー)が無く、暗号化された通信とメーラーの間の通信を取り持つProtonMail Bridgeというソフトウェアのみを提供しています。

ProtonMail Bridgeはバックグラウンドプロセスとして常駐し、127.0.0.1でSTARTTLSを使用したIMAP/SMTPサーバーを提供します。

## Outlookでエラーが発生する

![certerr.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384330/8af93c45-e5fa-9a7e-41a6-f4f53090c372.png)
これはOutlookに限ったことではない(と思う)のですが、要するに *OSに127.0.0.1の有効な証明書が見つからないよ* って怒られます。

解決方法は簡単、証明書をインストールすればいいだけです。

## 解決

先ほどの警告画面の `証明書の表示` ボタンを押してください。
このCAルート証明書は信頼されていません。などと宣っていると思うので、 `証明書のインストール` を押してください。
ウィザードが起動するので、保存場所を適当に決めたら証明書ストアを **手動で** 場所を指定します。(自動でやらせると中間証明機関のストアにぶち込まれるので注意)
![dir.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384330/d9ec5d37-1589-27a5-25e2-a7b1131b72cd.png)
ストアは上の画像の通り、 `信頼されたルート証明機関` を指定してウィザードを終了してください。
![done.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384330/e5b93154-0ed7-179d-031d-39edcec5361c.png)

## 終わりに

Outlookはアカウント追加時にテストメール送ってくれるので届いてなかったら設定を見直してください。
以上。
【Tips】Google Colabolatory の Drive 連携でカレントディレクトリを削除してしまった時の対処方法

# 問題：Drive側からのカレントディレクトリの削除
[Google Drive と連携した Colaboratory](https://qiita.com/asakuraTsukazaki/items/e7eb1f0c43be1e0231c6) において、現在いるディレクトリを Google Drive 側から削除すると、シェル関連のコマンドが「No such file or directory」で動かなくなってしまう。

```sh
!mkdir drive/'My Drive'/phantom
%cd drive/'My Drive'/phantom
```
この状態で`phantom`ディレクトリを Google Drive の GUI 上で削除すると、以下のようなエラーが出るようになる。

```sh
!pwd
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
pwd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
```

`%cd` コマンドなどで現在のディレクトリから移動することもできなくなる。


# 解決方法：ランタイムを再起動
ツールバーから`ランタイム＞ランタイムを再起動`をクリック。`再起動してすべてのセルを実行`でも良い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147741/9ef03908-cbf3-cd5e-d9e7-a63d352a3218.png)

これによりカレントディレクトリがリセットされ操作可能となる。
[Unity]Admobを実装しようとしたらXcodeで"GoogleMobileAds/GoogleMobileAds.h' file not found"と言われてビルド失敗


##問題
Unityでモバイル向けにadmob広告を入れたいが、
UnityでAdmobのパッケージをいれる→xcodeにてでビルドエラー

エラー内容

```
'GoogleMobileAds/GoogleMobileAds.h' file not found
```

##Unityバージョンとか

Unity2019.4.1f
GoogleMobileAds-v5.4.0.unitypackage



##対処法

①ターミナルからコマンドにてCocoapodsを削除して、インストールし直す
②Unity→Asset→External Dependency Manager→ios resolver Settiings　にて　Cocoapods IntegrationをXcodeProject - Add Cocoapods to the Xcode projectに変更してビルド
③.xcodeprojectを開いて実機にビルド

色々試した結果、なぜか上記でできました。
理由は不明です。２時間くらい消滅しました。

参考記事
https://qiita.com/noprops/items/f997a438fabb64c15f10
https://qiita.com/nekojoker/items/231273c8422a88485b27

結果的に上記の２記事を足したような感じのことをしました。

##メモとか

一個前に作ってたプロジェクトでは
GoogleMobileAds-v5.3.0.unitypackage
を使っていて、今回は最新版の5.4.0にしたところ、上記の現象が起きた。

そのさらに前にも似たような現象が起きたけど、いつもよくわからないまま、なんとか対処している

前はGoogleMobileAdsSdkiosを↓からダウンロードして解答
https://developers.google.com/admob/ios/download

中の
GoogleAppMeasurement
GoogleMobileAds

のフォルダをUnityプロジェクトのPlugins→iosの中にコピーしたら解決した、
https://d114.hatenablog.com/entry/2019/07/15/005901

が今回はダメだった。

これをやるとUnityからiosビルド時に
``
Plugin 'GoogleMobileAds.framework' is used from several locations:
````
的なことを言われてしまいました。コピーしたプラグインが複数の場所で使われてるぞ？とのこと
https://waken.hatenablog.com/entry/2016/08/06/095457

プラグインにコピーにしたフォルダを削除すると上記のエラーは消えるが、タイトルのエラーがxcodeでのビルド時に残ってしまう。
v5.3.0の時は上記の対処をしなくても問題なく動いていたので、別の対処が必要かと判断

cocoapodsを入れ直すとunityからのiosビルドは通るようになったが、xcworkspaceから開くと実機でアプリが起動しなくなった。
そこで対処法②をして、xcodeprojから開いて実機にインストールすると問題なく起動し、広告も表示された。

以前は逆にxcodeprojeから開くと実機でアプリが起動しなくなった
だからxcworkspaceから開くのが習慣になっていたけど、今回は逆でした

理由は不明。


Unityのビルド時に

```
 converting managed assemblies to C++
```
 で止まってしまって動かなくなることがあるけど、しばらく待っていたらビルドされたりするので待ってみるのはアリかも。
これでビルドできなかったら詰んでたかも


https://forum.unity.com/threads/frozen-while-converting-managed-assemblies-to-c-ios.499064/
【エクセル】クラス

### 注意点
・プリミティブ型の場合「Let」,オブジェクト型の場合「Set」でSetterを定義する。
・フィールドの定義は一番上に書かないと、参照時に未定義エラーとなる。(C言語と同じ)

### クラスの定義
```vb
Option Explicit

' インスタンスフィールド
Private mParam As Integer
Private mSheet As Worksheet

' クラスのコンストラクタ
Private Sub Class_Initialize()
End Sub
' クラスのデストラクタ
Private Sub Class_Terminate()
End Sub


' Getter - Setter
Public Property Let Param(ByVal p As Integer)
    mParam = p
End Property
Public Property Get Param() As Integer
    Param = mParam
End Property

Public Property Set MySheet(s As Worksheet)
    Set mSheet = s
End Property
Public Property Get MySheet() As Integer
    MySheet = mSheet
End Property
```

### クラスの使用
```vb
  Dim t As New Test1Class
  t.Param = 10
  Set t.MySheet = ThisWorkbook.Worksheets("Sheet1")
```
【iOS】個人情報交換 (.p12)が選択できない件について

####リモートプッシュ通知を実装する際に少し引っかかってしまい、割と同じ悩みの方が多かったので記事にしておきます。
リモートプッシュ通知を実装する際にキーチェーンアクセスにて証明書を書き出す時のフォーマットとして個人情報交換 (.p12)を選択する必要があるのですが、こちらが選択できないことがあります。
#####その際は左のキーチェーン欄にてログインが選択されているか、上の項目欄で自分の証明書が選択されているかを確認して下さい。
![スクリーンショット 2021-02-24 17.37.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656839/b4df1cf3-f2c9-bb55-ae2b-28e74123ee37.png)
![スクリーンショット 2021-02-24 17.37.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656839/f0a0343c-025c-ac09-9576-28d48fcd0656.png)
現在進行形で悩んでる方、これから実装される方は参考にして下さい！！！
自殺死者の増加、日本の首相が「孤独」問題の大臣を任命

日本政府は、Covid-19パンデミックの間に増加した自殺の数を減らそうとしています。国の自殺による死亡者数は、2020年のCovid-19パンデミック中に3.7％増加して20,919人になりました。一方、コロナウイルスによる死亡者数ははるかに少なく、昨年は3,492人、2021年2月までは7,549人でした。

![qitta.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1131863/6f8e7394-447b-a5ca-3729-a145c4ed9c3b.png)


日本は一般の人々だけでなく、リアリティ番組のスターである木村花（22）、俳優の三浦春馬（30）、竹内結子（40）などの有名人の一連の自殺事件にも揺さぶられています。

青木ヶ原樹海という「自殺の森」があり、日本ではとても有名です。青木ヶ原樹海は、人生を終わらせたい人に人気の場所です。  また、白石隆浩を巻き込んだレイプや連続殺人事件も登場した。彼は自宅で自殺したいと思っている女性に会い、彼らの人生を終わらせるのを手伝うことを申し出ました。

また読む： <strong><a href="https://adulted.instructure.com/eportfolios/528/Home/Ver_Superman_y_Lois_Temporada_1_Capitulo_1_HD__Superman_and_Lois_1x1_Online_Capitulos_Completo_Sub_Espaol" rel="no-follow">日本の首相の息子が当局者との夕食の倫理規定に違反したとされる</a></strong></p>

菅は坂本哲志（70）を「孤独」大臣に任命した。彼は以前、地域活性化大臣であり、出生率の低下を処理した大臣でもありました。 また読む： <strong><a href="https://adulted.instructure.com/eportfolios/527/Ver_Invasin_de_altura_Temporada_1_HD/Ver_Invasin_de_altura_Temporada_1_HD__Online_Capitulos_Completo_Sub_Espaol" rel="no-follow">うわー、日本の自殺はコビッドパンデミックの第二波の間に急上昇する</a></strong></p>

坂本は先週の金曜日（2021年2月19日）から働き始めた30人の職員の助けを借りて、自殺を処理するための新しいオフィスを率いています。

「女性は制限の中で圧力を受けやすいので、自殺の数は増え続けています。あなた（坂本）がこの問題を特定し、包括的な政策措置を講じることができることを願っています。 日本は英国の足跡をたどり、2018年にシングルスから生じる問題を解決するためのポストを形成しました。


カタールと日本への輸出、CharoenPokphandは韓国とアラビアの半透明性をターゲットにしています

「本日、受注の1つであるカタールへの最初の出荷。同時に、2億5000万ルピアの価値のある6,000kgの家禽加工品のコンテナが日本に送られます。これは以来13番目のコンテナです。加工された家禽製品は日本市場に参入した。」と彼は水曜日（2021年2月24日）にカタールで開催されたPTCPI家禽製品輸出リリースイベントで述べた。

「これらの国々を除いて、私たちはシンガポール、マレーシア、中国、韓国、サウジアラビアなどの他の市場に参入しようとしています。私たちは国内外の消費者のニーズを満たすために努力し続けます」と彼は言いました。

カタールへの発送とは別に、CPIは最初に加工された家禽製品をカタールに輸出し、家禽飼料を東ティモールに輸出しています。

「私たちは政府とカタールのバターとの間で、加工鶏肉を輸出することで合意しました。また、加工製品、鶏肉グリル、飼料、DOCを東ティモールに輸出しています」と彼は説明しました。
奇数判定

奇数判定のシンプルな書き方を知らなかったので。

```python
def in_odd(value):
    if value % 2 == 1:
        return True
    return False
```

```python
list = [ 0,1,2,3,4,5,6,7,8,9 ]
```

```python
for item in filter(in_odd,list):
    print(item)
```

今知った。

[独り言](https://youtu.be/KOAimkg1p20?t=1079)ありがとう。
PythonでLoopをしたい

よく使い方を調べるので、今後のためにまとめてみようというメモ。

loopしたい対象：`list`, `dict`

```py
listA = [1, 2, 3, 4, 5]
dictA = {'a1': 1, 'a2':2, 'a3':3, 'a4': 4, 'a5': 5}
```


## 普通 for...in...

### list
```py

for item in listA:
  print(item)

# output:
# 1
# 2
# 3
# 4
# 5
```
`list`の場合、値をそのまま出力できる。

### dict
```py

for item in dictA:
  print(item)

# output:
# a1
# a2
# a3
# a4
# a5
```
`dict`の場合、**key**の部分だけを出力される。
1, 2, 3, 4, 5数字を出力したいなら、`values()`関数を使う。

```py
for item in dictA.values():
  print(item)

# output:
# 1
# 2
# 3
# 4
# 5
```

## indexも欲しい
値だけではなく、何個目の要素を指定するindexも欲しい場合もよくある。その場合、いくつの方法がある。その中に一番便利な方法を紹介する。

### list: enumerate()
`enumerate()`関数を使う。

```py

for index, value in enumerate(listA):
  print(f"{index}: {value}")

# output
# 0: 1
# 1: 2
# 2: 3
# 3: 4
# 4: 5
```

### list: range()
`range()`関数を使う。

```py

for index in range(len(listA)):
  value = listA[index]
  print(f"{index}: {value}")

# output
# 0: 1
# 1: 2
# 2: 3
# 3: 4
# 4: 5
```

`range`関数は良いところは、関数の引数にstart, stop, step組み合わせて、作成するindexリストの調整には少し自由度があること。
例えば、index=1,3をLoop処理しない場合、`range(start, stop, step)`で簡単に実現できる。`list(range(0, len(listA), 2))`で`[0, 2, 4]`リストを作れるので、これを利用すればと思う。

```py

for index in range(0, len(listA), 2):
  value = listA[index]
  print(f"{index}: {value}")

# output
# 0: 1
# 2: 3
# 4: 5
```

### dict
`items()`関数を使う。

```py

for index, value in dictA.items():
  print(f"{index}: {value}")

# output
# a1: 1
# a2: 2
# a3: 3
# a4: 4
# a5: 5
```

## 二つリストを同時にLoopする
一つのリストをindex取れるLoopで行う時に、そのindexで別のリストの要素を取って処理をやれば行けると思う。もし、`zip`関数を使えれば楽になる。

```py
listA = [1, 2, 3, 4, 5]
listB = ['A', 'B', 'C', 'D', 'E']
for itemA, itemB in zip(listA, listB):
    print(f"listA：{itemA}, listB：{itemB}")

# output
# listA：1, listB：A
# listA：2, listB：B
# listA：3, listB：C
# listA：4, listB：D
# listA：5, listB：E
```

`zip`関数は、二つ以上のリストを同時Loopも可能。
`zip`関数は、要素数が異なるリストを同時Loopも可能。（Loopの回数は短いリストの要素数になると思う。）

## map関数
例えば、listAの要素を全て２倍になるリストが欲しい場合、`map`関数利用するとすぐにできる。

```py

listAx2 = list(map(lambda x: x * 2, listA))
```

## リスト内包表記
先ほど、map関数の例は、リスト内包表記でもできる。

```py
listAx2 = [ x*2 for x in listA]
```
【Docs】RSpecをとりあえず実務で使えるようになるための資料集

# 【前提とする知識】
- Ruby構文
- RailsのModel周りの知識

# 【資料集】
## 1. RSpec概要の理解
- [RSpec入門](https://dotinstall.com/lessons/basic_rspec)
    * 動画でプログラミングを学ぶことができるサイト[「ドットインストール」](https://dotinstall.com/)のプレミアム用コンテンツ（月額980円）
    * 「RSpecが何者なのか」という全体をつかむことができる
        + これを最後まで理解すれば以後検索等により自力で学習を進めることも可能
    * 授業に出てくるのに対応したコードを[手元で書きつつ](https://github.com/GandT/learning/tree/master/Ruby/season2/p155-162)最後まで視聴した

### 補足資料
1. [rspecのdescribe, context, subject, letなどの書き分け](http://kei-p3.hatenablog.com/entry/2016/05/25/235124)
    * 1の授業の補足：複数表現方法が許されるが故に混合しやすい用語の整理
    * この記事で「subjectとlet」が「letとlet!」程度には近い位置にあるということを認識した（厳密には異なる）
2. [RSpecのletを使うのはどんなときか？（翻訳）](https://qiita.com/jnchito/items/cdd9eef2ed193267c651)
    * 1の授業の補足：letとインスタンス変数の比較


## 2. RSpecの詳細なメソッドを知る
1. [使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」](https://qiita.com/jnchito/items/42193d066bd61c740612)
2. [使えるRSpec入門・その2「使用頻度の高いマッチャを使いこなす」](https://qiita.com/jnchito/items/2e79a1abe7cd8214caa5)
    * ドットインストールに引き続き基本的な挙動についてより詳細に理解する
    * 記事のため復習時に参照するにも適する

### 補足資料
- [【RSepc】include_context, include_examples, it_behaves_like の違い](https://qiita.com/shinoharat/items/0a481bc33d9a5e81012e)
    * shared_exampleにおいて、ドットインストールの授業で紹介された`include_examples`と使えるRSpec入門で紹介されている`it_behaves_like`の比較
    * 基本的に`it_behaves_lie`を使うのがよさそうだがドットインストールで紹介されている書き方なら`include_example`でも良いことがわかる
- [使えるRSpec入門・その2「使用頻度の高いマッチャを使いこなす」](https://qiita.com/jnchito/items/2e79a1abe7cd8214caa5)
【Rails + Vue.js + docker環境】Webpackerが取り込めない原因と対処法

#発生したエラーと、解決手順

コンポーネントをjavascriptへコンパイル時にエラー発生

```
$ docker-compose run web bin/webpack
```

↓エラー

```
starting container process caused: exec: "bin/webpack": stat bin/webpack: no such file or directory: unknown
```

webpackがないということでインストール。

【参考】
[Webpackerを使ったRailsでwebpackがNo such file or directory](https://a-records.info/rails-webpacker-no-such-file-or-directory/)

##webpackerのインストール

```
$ docker-compose run --rm web rails webpacker:install
```
すると下記エラー。



```
Don't know how to build task 'webpacker:install' (See the list of available tasks with `rails --tasks`)
```
'webpacker:install'が認識さrていないということで、
Gemファイルに```gem 'webpacker', github: "rails/webpacker"```を追記し、```$ docker-compose run --rm web bundle install```を行いました。

【参考】
[【Ruby on Rails】bundle exec rails webpacker:installするとDon’t know how to build task ‘webpacker:install’というエラーに遭遇した](https://amaino.me/blog/development/bundle-exec-rails-webpackerinstall%E3%81%99%E3%82%8B%E3%81%A8dont-know-how-to-build-task-webpackerinstall%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E9%81%AD%E9%81%87/)

##bundle installを行う

```
$ docker-compose run --rm web bundle install
```

これで、インストールはOK

そしてもう一度。

##しかし、、、

```
$ docker-compose run --rm web rails webpacker:install
```

しかし、またエラー。

```
Could not find rack-proxy-0.6.5 in any of the sources
Run `bundle install` to install missing gems.
```

Dockerfileを更新したなどの理由でキャッシュを使用されることで bundle install が実行されない場合があるみたいです。
キャッシュを使わずにbuildを再度行う。

##キャッシュを使わずにbuildし直す

```
$ docker-compose build --no-cache
```
（しばし、待ちます）

【参考】
[Dockerでコンテナ内にbundle installされない問題の解決法](https://fuqda.hatenablog.com/entry/2019/03/21/204118)

そして再度、webpackerのinstallを行う。

##解決させる
```
$ docker-compose run --rm web rails webpacker:install
```

お、インストールできた。

```
      create  config/webpacker.yml
Copying webpack core config
      create  config/webpack
      create  config/webpack/base.js
      create  config/webpack/development.js
      create  config/webpack/production.js
      create  config/webpack/test.js
・
・
・
```

最後に、コンポーネントをjavascriptへコンパイルすると、、、

```
$ docker-compose run --rm web bin/webpack
```

```
webpack 5.24.1 compiled successfully in 21298 ms
```

ばっちしです👍
Lenovo Y540 にUbuntuをデュアルブートして、しばらくしたら画面の輝度調整ができなくなった話

#概要
2020末のLenovo祭にノッて新規PCを買い、
それの型番がY540で、かつ、
そのPCにUbuntuをデュアルブートし、
何回か使ううちに、なんと画面の輝度を調整できなくなってしまった・・・
なんてニッチな人のために記事を書いてみました。

#起こった現象
デュアルブート時点では良かったものの、
何回かアップデート・アップグレードをしたあとに、
ディスプレイの輝度が常に最大のまま、調整ができなくなってしまいました。

キーボードでもダメ、UIでも調整できないという状況で、
”なにか”(ただし、後述記事からnvidia関連と推定)が
アップデートされた後に、これが起こったことくらいしかわかりませんでした。

基本暗めの部屋で作業してるので目が辛かったです。

#既に試したこと
4. Windowsを起動→行ける
ここからソフト的な問題だと勘づく

1. [記事](https://qiita.com/tani_qiita/items/2f69ed261b089d6e1db5)に従って、GRUBをいじってみる→ダメ

    ```grub
    # GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" #old
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_backlight=vendor"   #new
    ```
2. Brightness Controllerのインストール → 一応目の安全は守られた
ただし、これは明るさというよりも色合いを変えているだけのようで、
消費電力が変わるわけではないので、正直根本的な解決にはなっていない。

3. /sys/class/backlight/acpi_video0/brightnessを確認→だから何？状態
UI（もしくはFnキー）に従って変動しているのが確認できるものの、
実際の明るさには反映されていない様子
(正常なら、画面と連動して1? ~ 100まで変化するよう)


4. バージョン(Ubuntu, with Linux 5.8.0-43-generic)ではなく、
Ubuntu, with Linux 5.8.0-40-genericで起動→イケた
ここから、アップデートもしくはアップグレードによるものだと推定

#対処法
たまたま、「Y540 backlight ubuntu」とヤケになって検索したところ、
まさに状況とマッチする[記事](https://itectec.com/ubuntu/ubuntu-brightness-control-keys-dont-work-on-lenovo-y540-but-xrandr-does/)を発見しました。

これによると、/usr/share/X11/xorg.conf.d/10-nvidia.confを

```
Section "OutputClass"
    Identifier "nvidia"
    MatchDriver "nvidia-drm"
    Driver "nvidia"
    Option "AllowEmptyInitialConfiguration"
    Option "RegistryDwords" "EnableBrightnessControl=1;"  # 追加
    ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
EndSection
```

とすることで対応できる様子。
無事にこれでイケました（見つけた人スゲー）。

#雑記・コメント
- 少し軽めの内容で書いてみました
- 型番にも依存するようなので、そうそう見かけることはない問題ではありますが、もし誰かの役に立てたら幸いです
- あくまで一例ですので、すべてのPCで保証するわけではありません。

#参考サイト
-  [Linuxでディスプレイの輝度が調整できないときの対処](https://qiita.com/tani_qiita/items/2f69ed261b089d6e1db5)
-  [Ubuntu – Brightness control keys don’t work on Lenovo Y540 but xrandr does](https://itectec.com/ubuntu/ubuntu-brightness-control-keys-dont-work-on-lenovo-y540-but-xrandr-does/)
【Rails6】AWS EC2でseeds.rbを本番環境に反映

#概要
AWS EC2によるデプロイ時にseeds.rbの内容を本番環境に反映させる方法について、
紹介します。

#前提
AWS EC2を導入済み

以下にAWS EC2でデプロイする際の手順についての記事も書いておりますので
よろしければご参考ください。
https://qiita.com/narimiya/items/2e642b60baa4002c4bee

#バージョン
rubyのバージョン　ruby-2.6.5
Railsのバージョン Rails:6.0.0

#実装手順
##①【ローカル】初期データのセット

```
$ rails db:seed
```

##②【GitHub】ローカルでのコードの変更を、masterにpushする

GitHubでコードの変更内容をマージしてください。

##③【ローカル】ターミナルでEC2にログイン
以下の手順を、ローカル内のターミナルで実行してください。

```
$ cd
```
↓

```
$ cd .ssh/
```
↓

```
$ ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP
```

↓

currentディレクトリまで移動します。

```
cd  /var/www/開発中のアプリケーション/current
```

↓

本番環境にseeds.rbの内容を反映させます。

```
$ rake db:seed RAILS_ENV=production
```

##③【EC2】ターミナルで、ps aux | grep unicornを実行
以下の手順を、EC2内のターミナルで実行してください。

```
$ ps aux | grep unicorn
```

##④【EC2】ターミナルで、kill プロセス番号を実行
以下の手順を、EC2内のターミナルで実行してください。

```
$ kill Unicornのプロセス本体のid
```

##⑤【ローカル】ターミナルで、bundle exec cap production deployを実行
以下の手順を、ローカル内のターミナルで実行してください。

```
$ bundle exec cap production deploy
```

#補足
今回私はseeds.rbに管理者についての記述をしており、デプロイ後確認すると管理者のデータが反映されていませんでした。仮説として、seeds.rbの内容が反映されていないと考え、以上の方法を調べました。

上記の手順で実行すると無事管理者のデータが付与されておりました。
ちなみに以下はseeds.rbのファイルの記述です。


```db/seeds.rb

user = User.create!(email: "admin@example.jp",
  password:  "暗証番号",
  password_confirmation: "暗証番号（確認）",
  nickname:  "管理者",
  occupation: "管理者",
  position: "管理者",
  birth_day: "2000-10-10",
  sex_id: "2",
  admin: true)

  user.image.attach(io: File.open(Rails.root.join("app/assets/images/~.png")), filename: "~.png")

```
※いくつか省略しています

管理者権限を付与されていて、seeds.rbに管理者のデータを記述されている方は、ぜひこの方法をお試しください！


以上です。