OmniAICreator/Qiita-1.07M huggingface dataset:
SQLite process failed to start. The argument 'file' cannot be empty. Received."を直す

## 症状
vscodeの拡張機能でSQLiteをインストールしたのち、バイナリであるlocal.sqliteを開こうとしたら以下のエラーが発生した。

```
 "Failed to open database: Database failed to open: SQLite process failed to start. The argument 'file' cannot be empty. Received."
```


環境
・Ubuntu 20.04.4 LTS

## 対処法
参考記事の開発元によるとlinuxのバグらしく、Ubuntuの場合は以下のコマンドでSQLiteを直接インストールし、vscodeを再起動するとDatabaseを正常に開くことができる。
```
sudo apt install sqlite3
```


## 参考記事
https://github.com/AlexCovizzi/vscode-sqlite/issues/71
ssh-keyscan コマンドがあるらしい

## 勉強前イメージ

初めて知ったコマンド

## 調査

### ssh-keyscan コマンド とは

複数のホストのsshの公開鍵を収集するためのコマンドです。
複数のホストを指定して実行できるので、known_hostsのファイルを効率よく生成できます。

### 打ってみる

あるサーバに向けて打ってみました。
コマンドは `ssh-keyscan -H [IPアドレス]` になります。
-Hは内容のハッシュ化をするオプションです。

```
[root@localhost ~]# ssh-keyscan -H [IPアドレス]
# [IPアドレス]:22 SSH-2.0-OpenSSH_7.4
|1|YSAANwY9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# [IPアドレス]:22 SSH-2.0-OpenSSH_7.4
|1|SNNBcGeSNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# [IPアドレス]:22 SSH-2.0-OpenSSH_7.4
|1|Xxd2SuXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
```

known_hostsへ追加する場合は `ssh-keyscan -t rsa [IPアドレス] >> .ssh/known_hosts ` を使用します。
結果は以下のように無事追加され、これを行うことで初めてsshを行ったとしても
`Are you sure you want to continue connecting (yes/no)? ` を聞かれることはありません。

```
[root@localhost ~]# ssh-keyscan -t rsa [IPアドレス] >> .ssh/known_hosts 
# 192.168.119.3:22 SSH-2.0-OpenSSH_7.4
```

```
[root@localhost ~]# cat .ssh/known_hosts 
192.168.119.3 ssh-rsa DVcRj46JNpkWuaUrPOTmJQxXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
```

## 勉強後イメージ

sshで入ってデータ収集して・・・ってシェル書くときに
`Are you sure you want to continue connecting (yes/no)? ` のせいで
あーsshログインしてなかったーってなるからそんなときはいいかも

## 参考

- [SSHサーバーの公開鍵管理を効率化するには？ ssh-keyscanコマンド](https://atmarkit.itmedia.co.jp/ait/articles/1507/28/news020.html#:~:text=ssh%2Dkeyscan%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A8%E3%81%AF,%E7%9B%AE%E7%9A%84%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82)
カスタム桁数(10まで)のhit&blowをpythonでやる

# hit&blow
hit&blowとは知ってる人も多いと思うが、ランダムに一個数字を選んで言った数字と比較するものである。

例えばランダムな数字が1234だとして1283と言ったら2hit1blowである。(因みに数字がかぶることはない)

つまり位置も数字も同じ場合hitが1増える、数字が同じでも位置が違えばblowが1増えるということだ。
良くあるのは3、4桁だが数字が被らないようにすれば10桁までいけるので作ってみた。~~(解くのに時間かかりそう)~~
# コード
まずどのようにしてhit,blow数をカウントするかだが、これはまず2つの数字の共通する数字を全て数え出す(言葉で説明するのが難しいが、要は4桁だとしたら4×4の16通りの組み合わせの数字を比べて同じ数字の数を数えるということ)。•••①
そしたら数字が一緒になるときは位置について同じ位置か違う位置かしかないため①の数からhit数を引けば良い。
hit数を数えるのは
```py
for i,n in zip(randomnum,inputnum):
  if i==n:
```
のように簡単に取得できる。
では作っていく。
ここではリストを使っているが、空文字列に+=していっても良い。

## pythonのコード
解説は後ほどする
```py
import random
num="".join(random.sample("1234567890",digit))
#digitは桁数
```
これでk桁のランダムな被りのない整数を生成する。
```py
hit=[]
overlap=[]
#空のリストを二つ
digit=input()
#ここで桁数を決めます
num="".join(random.sample("0123456789",int(digit)))
m=0
while True:
  dig=input()
  if dig.isdigit():
    if hit!=[]:
      hit=[]#リセット
    if overlap!=[]:
      overlap=[]
    if len(str(dig))!=len(str(num)):
      print("桁数が違います")
    elif len(set(dig))!=len(dig):
      print("重複しています")
    else:
      if str(num)==str(dig):
        print(f"Complete! {int(m)+1}回でした")
        break
      else:
        for n in list(str(dig)):
          for s in list(str(num)):
            if n==s:
              overlap.append(True)
        for a,b in zip(list(str(dig)),list(str(num))):
          if a==b:
            hit.append(True)
        m+=1
        print(f"{len(hit)}hit,{len(overlap)-len(hit)}blow ({m}回目)")
  else:
    if dig=="stop":
      print(num)
      break
    else:
      print("整数です")
```
## 解説
```py
hit=[]
overlap=[]
#空のリストを二つ
digit=input()
#ここで桁数を決めます
dig=input()
num=rand(0,9,int(digit))
m=0
```
hit数を数えるのリストと全部の被りの数を数えるoverlapというリストを作る。
digitで桁数を決める。
digは自分が入力する値。
mは回数を数えるのに使う。
```py
while True:
  dig=input()
  if dig.isdigit():
    if hit!=[]:
      hit=[]#リセット
    if overlap!=[]:
      overlap=[]
    if len(str(dig))!=len(str(num)):
      print("桁数が違います")
    elif len(set(dig))!=len(dig):
      print("重複しています")
```
ループ処理
リストを空にする。
桁数が違う時や重複している場合は除外する。
```py
    else:
      if str(num)==str(dig):
        print(f"Complete! {int(m)+1}回でした")
        break
      else:
        for n in list(str(dig)):
          for s in list(str(num)):
            if n==s:
              overlap.append(True)
        for a,b in zip(list(str(dig)),list(str(num))):
          if a==b:
            hit.append(True)
        m+=1
        print(f"{len(hit)}hit,{len(overlap)-len(hit)}blow ({m}回目)")

```
今回の要。
全重複数からhit数を引く。
同じだったらループ抜け。
```py
else:
  if dig=="stop":
    print(num)
    break
  else:
    print("整数です")
```
stopと入力されたら数を表示して終了。
整数でない場合の処理。

![スクリーンショット 2022-04-24 232410.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633675/d783c1a7-cf2b-492d-49c9-36396d3f15e0.png)
こんな感じ。
~~たまにアルファベット打っても数字として認識されることがあるが、理由はわからない。~~(多分修正)
まあお遊び程度に。
Git管理しない(除外する)ために.gitignoreに追加すべきもの

作成するRailsアプリをGit管理する際、.gitignoreに追加すべきGit管理しないものについて悩みました。

そこで優秀なエンジニアの方に相談し、Railsに限らず大まかに不要なものを教えていただいたので、メモがてら残そうと思います。

※ほぼ相談した際に頂いたテキストのまま

## 1. 認証系ファイル（絶対にGit管理してはいけない）
AWSやGitHubを使ってサイトを作成する場合、それらのサービスの認証キーやパスワードが書いてあるファイルを絶対にGitで管理してはいけない。

コードの中で認証する場合はコードファイルに認証キーなどを含めてはならず、必ず環境変数を経由して取得するように記述する必要がある。

Privateなリポジトリであっても万が一の場合があるため、Gitの履歴に含まれないように **.gitignore**で除外する。

![messageImage_1650805415712.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366336/fdd7e8af-1636-6550-769a-6992b1b0c075.jpeg)


上の画像(画像①)(僕の場合はDockerでRailsの環境構築をした際に自動生成されました)の場合、 
 **/config/master.key** が相当するファイルになるが、これ以外にも認証キーが含まれるファイルがあるかどうか注意が必要。

## 2. ログファイル（Git管理してはいけない）
先程の画像(画像①)の中にもいくつか入っているが、ログファイルはファイル数・容量的に際限がないため含めないようにする。

## 3.ライブラリを配置するディレクトリ（Git管理してはいけない）
外部ライブラリを大量に保存する場合、容量的にGit管理するのはおすすめできない。

jQueryの特定のバージョンを使ってフロントを管理したいとかなら別だが、そうでなければGit管理からは除外するのが良い。

先程の画像(画像①)であれば **/node_modules/** などが該当する。

## 4. 環境設定用のファイル（Git管理しない方が良い）
IDEの設定ファイルや.DS_Store（Macが勝手に生成する謎ファイル）はGit管理しないほうがいい。前者は開発環境によって設定内容が異なる場合があるため邪魔になる可能性があり、後者は単に不要。


以上がご教授していただいた「.gitignoreに記述すべき、Git管理しないもの」でした。いくつか記事を読んでいたのですが個人的にとても分かりやすくて参考になりました。(感激！！！)
Spring Bootの@GroupSequenceの実行順

Spring Bootの勉強をしていて少し躓いたことがあったので備忘録として記載します

### 前提
数年ぶりにSpringを触っているレベルです
以下の書籍の6章をそのままやっているとハマる問題かと思います
[Spring 解体新書（第2版）Spring Bootが丸分かり](https://www.amazon.co.jp/gp/product/4802092865/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1,"Spring解体新書（第2版SpringBootが丸分かり")
# 環境
・Spring Boot2.6.6
# ハマったこと
@GroupSequenceに2つのクラスを設定した時、
2つ目に設定したバリデーションの実行タイミングが初見でわからなかった

```Order.java
@GroupSequence({ValidGroup1.class, ValidGroup2.class})
public interface Order {
}
```
上記のような定義を行っている場合、
ValidGroup1に定義した入力チェックをすべて通過した後にValidGroup2のチェックが実行される

以下のような区分けで実装を行った場合、必須チェックをすべて通過してからでないとValidGroup2のチェックは実施されない
- ValidGroup1：必須チェック
- ValidGroup2：入力値のフォーマットチェック

# おわり
以下の記事で同じ質問をしている方がいました
[teratailより](https://teratail.com/questions/232957)

回答者の方がおっしゃている内容が記載されているリファレンスを見つけることができなかったのですが、この手の仕様ってどこで確認すればいいのでしょうか？
ご存知の方いましたら、コメントいただけると喜びます。
リモートサーバーからアクセス可能な画像をターミナルアプリ（iTerm2、WezTerm）上に表示する方法

- Terminalアプリではなく、iTerm2もしくはWezTermを使用（WezTermについては、https://zenn.dev/yutakatay/articles/wezterm-intro の記事が参考になります。）
- `pip install imgcat ; imgcat https://foo.com/bar.jpg`
Vueで例のダブルクリックすると入力欄に変わるテキストコンポーネントを作る

よく見かけるけど自分で作ると難しかった。

# 仕様
- 表示モードと編集モードがある
- 表示モードの時に文字列が１行を超える場合は...で省略される
- 表示モードの時にダブルクリックすると編集モードに切り替わる
- 編集モードに切り替わると同時に入力欄がフォーカスされる
- 編集モードの時にEnterキーを押すと適切な入力内容の時のみ表示モードに切り替わる

# コード

```EditableText.vue
<template>
  <span
  v-if="!isEditing"
  @dblclick="startEdit"
  >{{ modelValue }}</span>
  <input
  v-else
  v-model="text"
  @keydown.enter="endEdit($event.isComposing)"
  ref="input"
  >
</template>

<style scoped>
span {
  border-bottom: 1px solid transparent;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
span:hover {
  cursor: pointer;
}
input {
  border-bottom: 1px solid;
  outline: none;
}
</style>

<script setup lang="ts">
import { nextTick, ref } from 'vue'

const props = defineProps<{
  modelValue: string
  validator?: (value: string) => boolean
}>()
const emits = defineEmits<{
  (e: 'update:modelValue', modelValue: string): void
}>()

const isEditing = ref(false)
const text = ref(props.modelValue)
const input = ref()

async function startEdit() {
  isEditing.value = true
  await nextTick()
  input.value.focus()
}

function endEdit(isComposing: boolean) {
  if(isComposing || text.value === "") return
  if(props.validator && !props.validator(text.value)) return
  emits('update:modelValue', text.value)
  isEditing.value = false
}
</script>
```

# 使い方
``` Sample.vue
<template>
  <editable-text v-model="text" :validator="isInteger" />
</template>

<script setup>
import { ref } from 'vue'

const text = ref("123")

function isInteger(value: string): boolean {
  return Number.isInteger(Number(value))
}
</script>
```
新人元請SEの心構え

# はじめに〜新人SEの皆さんへ〜
元請SIerで働き始めた新人SEの皆さんは、自分がどう立ち回ればいいのかイメージが掴みづらいのではないでしょうか？
というのも、この立場は自らコーディングすることが（基本的には）無く、顧客と開発パートナー（協力会社・ベンダー）の間に立ち、よく言えば調整役、悪く言えば伝書鳩になってしまいがちです。

「どう仕事すればいいんだ！」
と悩んでしまう皆さんの参考になればと思い、僕の経験をまとめました。

# 新人SEの心構え
元請SEとして働くにあたって必要な心構えを3点ピックアップします。

## プロダクトが作れるのは開発パートナーの技術力のおかげ
初っ端からきついことを言います。
あなたの会社がリリースするそのプロダクト、誰の技術力のおかげで完成するかと言えば **「開発パートナー」** です。

新人の皆さんに上司や先輩が優しく（時には厳しく）仕事を教えてくれると思います。
「すげえ！なんて技術に詳しいんだ！！」
と思うこともあるでしょう。ただ、**上司や先輩の技術力よりも開発パートナーの技術力の方が数段上**です。

元請SEはその立場上、**広く浅く技術を身につける**ことが求められます。
もちろん深く広く技術を身につけられるが理想ですが、なかなかそうはいきませんよね…
逆に開発パートナーは、自らの手で実装することが求められるため深い技術力を持っています。
元請SEとして、**開発パートナーには敬意を持って接しましょう！**

## 顧客の業務をよく知ること
冒頭で、元請SEは顧客と開発パートナーの間に立ち調整役を担うと書きました。
両者についてもう少し踏み込むと

<dl>
    <dt>顧客</dt>
    <dl>技術についてはよくわからない</dl>
    <dt>開発パートナー</dt>
    <dd>顧客の業務についてはよくわからない</dd>
</dl>

一般的にはこんな関係になっています。

ここで私たちに求められるのは**顧客よりも技術に詳しいし、開発パートナーよりも顧客の業務に詳しいSE**という役割です。
つまり、広く浅く技術を知りつつ、顧客の業務をよく理解して彼らの橋渡しをする…言い換えれば**顧客・開発パートナーそれぞれの言うことを翻訳する**感じです。

## 感謝の気持ちを忘れずに
SEとして仕事をしていく中で、社内外問わず様々な人と関わる機会があります。
立場の違いはあれど、仕事というのは他の人に支えられて初めてできるものです。
褒めてくれる人、叱ってくれる人、さまざまな人がいると思いますが、**「ありがとう」の気持ちだけは忘れない**ようにしましょう。

# おわりに
まずは心構えを簡単にまとめてみました。
今後は仕事の進め方についても僕なりにまとめてみたいと思います。
Visual StudioのキーマップをもっとVSCode寄りにしたい

## 始めに

こちらの記事で紹介されているVSCodeのショートカットのうち、個人的によく使うショートカットをVisual Studioでもある程度使えるようにすることが今回の目標です。

https://qiita.com/12345/items/64f4372fbca041e949d0

なお真似される場合は、紹介する上から順番に変更するのが吉だと思います。  
なぜか微妙に手間取りました。

## 編集場所

1. ツール > オプション(O)
2. 環境 > キーボード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303228/f80deefc-def7-1a73-d192-45664f262a39.png)


## 備え付けのVSCodeキーマップを適用

次の追加キーボードマップスキームを適用 → Visual Studio Code

## 競合するキーマップを削除

手順

1. 名称で絞り込み表示 
2. 出てきたものを選択
3. `選択したコマンドへのショートカット`から選択
3. `削除(R)`で削除

| 名称                   | キーマップ                        |
| ---------------------- | --------------------------------- |
| 編集.複製              | 全て                              |
| 編集.1文字右まで拡張   | 全て                              |
| 編集.1文字右に列を拡張 | Shift+→ (テキスト エディター)     |
| 編集.1文字左に列を拡張 | Shift+← (テキスト エディター)     |
| 編集.1行上まで列を拡張 | Shift+Alt+↑ (テキスト エディター) |
| 編集.1行下まで列を拡張 | Shift+Alt+↓ (テキスト エディター) |

## キーマップを追加

手順

1. 名称で絞り込み表示
1. 出てきたものを選択
1. `使用する場所(N)`から選択
1. `ショートカット キー(P)`で実際に入力
1. `割り当て(S)`で登録

| 名称                                                | 使用場所            | キーマップ       | 備考                |
| --------------------------------------------------- | ------------------- | ---------------- | ------------------- |
| 編集.1行上まで列を拡張                              | テキスト エディター | Ctrl+Alt+↑       |                     |
| 編集.1行下まで列を拡張                              | テキスト エディター | Ctrl+Alt+↓       |                     |
| 編集.複製                                           | テキスト エディター | Shift+Alt+↓      |                     |
| ウィンドウ.垂直方向のドキュメントグループの新規作成 | 全体                | Ctrl+\\, Ctrl+\\ | Ctrl+\\ の画面分割風 |
| ウィンドウ.次のドキュメントグループへ移動           | 全体                | Ctrl+Alt+→       |                     |
| ウィンドウ.前のドキュメントグループへ移動           | 全体                | Ctrl+Alt+←       |                     |
Power BI Desktopでグループごとに連番。使ったデータは「Netflix 2022 Quarterly Earnings」

# インポート

Netflixは、2022年4月10日、2022年第一四半期の業績を発表しました。
約10年ぶりに加入者が減少に転じ、話題となっています。
その業績データを「Power BI Desktop」に取り込みました。
その際、グループ（エリア）ごとの収支項目に連番を付けるのに手こずったので、その部分をメモしておきます。

https://toyokeizai.net/articles/-/583588

https://wired.jp/article/netflix-reckoning/

データはNetflixのIRサイトから取得しました。

https://ir.netflix.net/financials/quarterly-earnings/default.aspx

Power BI Desktopにインポートします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/4a118f1e-6b0e-b075-b3c8-1ee3023d6571.png)

# データ概観

なお、データのExcelで開くと以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/37764a66-0444-6b4c-f6d7-58b896d87b50.png)

以下のエリアごとに分かれ、各エリアごとに

>United States and Canada (UCAN)
Europe, Middle East and Africa (EMEA)
Latin America (LATAM)
Asia-Pacific (APAC)

以下の収支項目が並んでいます。
下記項目に、エリアが変わったら1から始まるように番を振りたかったのです。

>Revenues
Paid net membership additions (losses)
Paid memberships at end of period
Average paying memberships
Average revenue per membership (2)
% change as compared to prior-year period
Constant currency % change as compared to prior-year period*

Power BI Desktopで取り込んだ直後の状態です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/0e160f2d-5173-33d1-3192-0fc4f4156eaa.png)

# 「グループ化」で準備

データの加工を進め下記の体裁にし、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/e60a28ec-a991-3022-c2b7-a03a38519b76.png)

「グループ化」を実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/962c7304-d79d-30c0-9a79-482295d4ab24.png)

処理後こうなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/b6845375-ec92-1bef-7ac6-b12ba0b5396c.png)

# 「カスタム列」で連番

次に、「カスタム列」を用い、各Tableの中のデータに対し連番を振ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/63374e78-a46f-6d7a-a1e4-50bd2237fcb7.png)

使用した関数が「Table.AddIndexColumn」です。
「Tabel名（テーブルを含む列名）、「カスタム列名」、「開始番号」、「増分」と設定します。

~~~
Table.AddIndexColumn([連番繰り返し],"連番",1,1)
~~~

実行した結果です。
Tableの中で連番が振られました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/0edc45a3-c8a4-fd9c-69cd-0471ded4c579.png)

Table列を展開することで、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/44954ce2-49db-3f5f-07c8-d3a38bed17c2.png)

エディター画面にTableの中の列が追加されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/02651bcd-a10e-2147-239d-6fd595ffcd18.png)

# グラフ

上記加工データをもとに、グラフを作成しました。
（今回はx軸が時間軸順に並べるところまで設定していません。文字型と認識されているからです。これは後ほど加工予定です）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/d6f299fb-3a3c-9685-7a76-ba21327bc76f.png)

会員数減がわかるグラフも作成しました（右上）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/3c7ce7b7-ec74-5aab-a779-069938c44c59.png)

**了**
Devcontainerについて（React + TypeScriptのサンプル環境有り）

Devcontainerで「React + TypeScript」の環境を作成したので、
記事にしてお伝えしようと思います！


## こんな人にオススメ
・ DevContainerを使ったことがない。
・ これからDevContainerを使って、開発したい方
・ 既に出来ている環境で動かしてみたい!


## サンプルコード（Github）
[React_devcontainer](https://github.com/shoto95/react_devcontainer.git)


## なぜ、DevContainer？
　チームで開発する際、OSや環境の違いで「想像してもいないエラー」が多発。。😭
　↓
　そこで「DevContainer」を活用することで、同一環境での開発が可能！！

## メリット・デメリット
### メリット
・　環境が異なっていても、同一環境で開発可能。
・　使用しているライブラリのバージョンを揃えることができる。

### デメリット
・　ルート直下にあるenvファイルを修正した場合、
　　毎回、コンテナをビルドしなおす必要がある。（ココは工夫すれば、何とかなりそう🤔）
archive.phpのページネーションのデザインを変えたい

# やりたいこと
wordpressのarchive.phpにオリジナルデザインのページネーションを実装したい。

こういうの。↓
![スクリーンショット 2022-04-24 21.51.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1049228/d80893ed-36b3-57f9-8507-4fa6e5be12d3.png)


普通に番号付きでページネーションを出したり↓
![スクリーンショット 2022-04-24 21.41.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1049228/ca01622a-aa2e-5ee4-6d37-1bf216b06ca6.png)
「次へ」「前へ」などの文字を表示したり、
正規表現でのアイコンの出し方は色々ヒットしたのですが、
完全オリジナルデザインで実装するやり方にめちゃめちゃ苦戦したのでメモ。


## ひとまずこれで解決
the_posts_navigationを使い、生成されたhtmlの疑似要素のcontent、
もしくはbackground-imageで画像（今回はSVG画像）を指定することで解決しました。



## the_posts_navigationを使う
まずはページネーションを出したいところに以下の関数を書く。

```
  <?php the_posts_navigation(array(
    'prev_text' => '',//前ページリンクの表記（ここでは空文字）
    'next_text' => ''//次ページリンクの表記（ここでは空文字）
  )); ?>
```

それぞれ空文字にすることで、見た目上は何も表示されないが、以下のhtmlが出力される。

```
  <div class="nav-links">
    <div class="nav-previous">
     <a href="前ページへのリンク">
    </div>
    <div class="nav-next">
     <a href="次ページへのリンク">
    </div>
  </div>
```
それに対し、css(scss)を以下のように指定する。
```
.nav {
  //全体を整える
  &-links {
    position: relative;
    width: 100%;
   }

　　　//左側のポジション指定
  &-previous {
    position: absolute;
    top: 50%;
    right: 20px;
    transform: translateY(-50%);

    // ○ のスタイリング
    & > a {
      position: relative;
      background-color: #b8b8b8;
      border: 1px solid #000000;
      border-radius: 50px;
      display: block;
      height: 34px;
      width: 34px;
  
　　　　　　　　　　//中の矢印 ←
      &::before {
        content: url('data:image/svg+xml;utf-8,<svg>...</svg>');//画像の指定
        display: block;
        width: 50%;
        position: absolute;
        top: 40%;
        left: 50%;
        transform: translate(-50%, -50%);
      }
  
    }
  
 
  }

　　　　//右側のポジション指定
  &-next {
    position: absolute;
    top: 50%;
    left: 20px;
    transform: translateY(-50%);

   // ○ のスタイリング
    & > a {
      position: relative;
      background-color: #ffffff;
      border: 1px solid #000000;
      border-radius: 50px;
      display: block;
      height: 34px;
      width: 34px;
  
　　　　　　　　　　//中の矢印 →
      &::before {
        content: url('data:image/svg+xml;utf-8,<svg>...</svg>');//画像の指定
        display: block;
        width: 50%;
        position: absolute;
        top: 40%;
        left: 50%;
        transform: translate(-50%, -50%);
      }
  
    }
  
  }
}
```
AlmaLinux 8をWindows10（WSL）に入れて初期設定しました

### 概要

Linux初心者向けです。
WSLを既にインストールしているエンジニアは下の概要の1行目を読むだけで良いです。

・AlmaLinux 8がMicrosoftStoreからインストールできるようになりました
・AlmaLinuxとは？
・AlmaLinux 8の初期設定を行ってみました

**※ここでの初期設定とは？
・私が毎日行っている「1日1問、半年以内に習得 シェル・ワンライナー160本ノック」を行える状態のことです。
・私は経験が浅いエンジニアの為、通常行う設定を省略していたりする場合があります。
もし気になる点がありましたらコメントでお知らせいただけると幸いです。**

### AlmaLinux 8 をMicrosoftStoreからインストールする

**環境条件**
・WindowsにWSLが入っている
（WSLのインストールが済んでいない方はこの段落最後のコマンドでインストールできます）

この状態でMicrosoftStoreでAlmaLinuxと検索します。
検索候補からページに飛んでインストールを行うだけで、自動で導入されます。

WSLのコマンドからもインストールできるのかもしれませんが
``` WindowsPowerShell管理者権限
wsl --list --online
NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS
```
上記の様に、WSLのディストリビューションリストにはありません。
（ここに載っていないディストリビューション名を指定してもエラーが返る仕様です）

ですので、現状はMicrosoftStoreからインストールすることが正攻法だと思います。

**WSLのインストールが初めてかつAlmaLinuxが試したい！という方は、下記のコマンドで軽量なDebian等を指定するとイメージのダウンロードが早く終わります**

``` WindowsPowerShell管理者権限
wsl --install -d Debian
```

※このコマンドを打つ意味
①wsl --installのみだとUbuntuがデフォルトでインストールされる
②UbuntuよりDebianの方がイメージサイズが小さい
③-d Debianとつけることで、インストールするディストリビューションをDebianに指定した

### AlmaLinuxとは？？？
https://almalinux.org/ja/

公式からの引用は以下です。
>コミュニティによるコミュニティのための無料の Linux OS
>オープンソースであり、コミュニティにより運営されており、長期的な安定性を重視し、堅牢な商用環境にも耐えうるプラットフォームを提供する永久に無料の商用 Linux ディストリビューションです。AlmaLinux OS は，RHEL ® および pre-Stream CentOS と 1:1 のバイナリレベルで完全な互換性があります。


CentOSと絡めてまとめると以下です。

・CentOSが21/12/31から「安定版」を廃止
（これにより無料で安定運用したいというユーザーの目的にそぐわなくなった）
・CentOSの代替品候補の1つがAlmaLinux
・AlmaLinuxは「永久無料」「安定重視」「RedHat系完全互換」
・AWS上でもAlmaLinuxは使える
（ネット上にはCentOSからAlmaLinuxへの移行情報も豊富）
・MicrosoftStoreからAlmaLinuxがWSLにインストールできるようになった

AmazonとMicrosoftがAlmaLinuxを導入する手段を提供している。
という点は学習の意味として大きいと思います。

今までバックエンドを初学者が学習する場合、CentOSが選ばれていました。
今後の初学者にはAlmaLinuxがおすすめされるようになるかもしれません。
（この辺は私が未熟ゆえに見通しは立ちません）

### AlmaLinuxの初期設定をする

AlmaLinuxが起動しているものとします。
（Windowsのスタートメニューから起動できます）

最初に管理者ユーザーと管理者パスワードを決めるように表示がでます。
決めてください。
**※sudoなど管理者権限が必要な時にここで設定したパスワードを求められます。**

ついでに
``` 更新確認
sudo yum update
```

を行います。
yumの部分はdnfでも良いです。
これはパッケージの古くなっている部分に更新をかけるプログラムです。

一般ユーザーも一応作っておきます。
``` 一般ユーザー作成
sudo useradd [使いたいユーザー名]
sudo passwd [上で指定したユーザー名]
su [上で指定したユーザー名] //ここで一般ユーザーに切り替わります
```

最後にAlmaLinux 8の初期状態ではbcコマンドが使えなかったのでbcをインストールしました。

``` bcインストール
sudo yum install bc
```

bcは計算を行うためのパッケージです。

他にもGitなども入れていますが、同じ要領ですので割愛いたします。

### やってみた感想

・yumやdnfを使う時、aptの時と同じようにまずupdateするという発想を持てたことが良かった
・AlmaLinuxがAWSやMicrosoftStoreで提供されているという知識が増えた
【備忘】DuinoCoin(Host:RPi, Client:Arduino D1)のセットアップ

# 目的
Arduinoなどのマイコンでも採掘が可能である[DuinoCoin](https://duinocoin.com/)をRPiをホストとしてArduinoで掘っていきたい。  
(なお、使用するArduino D1 は ESP8266 を使用しているため単体でネットワークに接続できるが、回線の圧迫を避けたいという理由から試しにホストを用意する)

## 使用物品
- [Raspberry Pi 3](https://raspberry-pi.ksyic.com/main/index/pdp.id/779/pdp.open/779)
    - OS: Raspberry Pi OS lite (64bit)
    - 32GB microSD カード
    - 3.5 inch HDMI Display
    - [Bluetooth キーボード](https://www.amazon.co.jp/dp/B01MS9IMWV?ref_=cm_sw_r_cp_ud_dp_KEFV93P5Z7AAYZ0XR833)
    - USBハブ
- [Arduino D1 (Compatible)](https://ja.aliexpress.com/item/1005001436547177.html?spm=a2g0o.order_list.0.0.1f6d585aWMU9uc&gatewayAdapt=glo2jpn)

# セットアップ
プログラムの参照先: [https://github.com/revoxhere/duino-coin](https://github.com/revoxhere/duino-coin)

## 手順
1. モノを買う
1. 使用するArduinoにマイニングプログラムをインストールする
1. Raspberry Pi OS をインストール
    1. インストールしたあと、`boot`以下にある`config.txt`を編集してディスプレイの設定を合わせる<br>`hdmi_group=2`<br>`hdmi_mode=1`
    1. 起動してbluetooth接続してキーボードをUS配列に設定<br>参考：https://www7390uo.sakura.ne.jp/wordpress/archives/180
    1. 運用時にディスプレイにいい感じに表示するために色々インストール<br>`sudo apt update -y && sudo apt upgrade -y`<br>`sudo apt install git vim tmux python3 python3-pip`
    1. `.bashrc`に設定を書き加える<br>参考：https://qiita.com/kiwi-bird/items/7f1a77faf6b0ab0df571<br>　　　https://qiita.com/gotchane/items/77dc650084d0d4efa5be
1. Raspberry Pi 上にプログラムをcloneする
1. `AVR_Miner.py` と `PC_Miner.py`をtmuxのいい感じのペインで実行する

# その他情報
- セルフパワーのUSBハブを使う
    - RPiの電力事情的にArduinoを4台以上バスパワーで動かすのは無理
- ESP8266は処理能力がかなり高いので普通にgithubにある8266用のプログラムの方がいいかも
    - 回線圧迫はRPiを有線接続にしてcreate_apを使うとかでもありかも？
[VRChat] PhysBonesへの変換で揺れ物が荒ぶる・広がる件

# はじめに
どうも。「バーチャルためにならない改変お姉さん」の水無月せきなです。
~~VRChat に夏が来た~~ PhysBones がついに一般向けにリリースされましたが、皆さんはいかがお過ごしでしょうか。
かく言う私は DB からの移行作業に手を付け始めたばかりですが、それにあたって表題の件に遭遇したので、メモとして残します。

# 環境
Unity 2019.4.31f1
VRCSDK3-AVATAR-2022.04.21.03.29_Public
VRChat クライアント 2022.1.2p1 (Build 1190)
# 現象
DBを実装しているアバターに対して VRCSDK の変換機能（変換対象のアバターを選択している状態で、上部メニュー「VRChat SDK」⇒「Utilities」⇒「Convert Dynamic Bones To PhysBones」）を使うと、下のように揺れ物が広がったり、挙動が荒ぶることがあります。

![変換後の写真](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1843472/ae59c0b5-7505-4430-25e7-bf16dccad2c5.png)

どうやら、 Dynamic Bones（＝変換後の PhysBones ）で 当たり判定を入れている Collider に対して、揺れるボーンの根元が食い込んでいる（常時接触している状態？）となるようです。

ボーンの根元から Collider が離れるように調整すると、何とかなります。
![修正後の写真](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1843472/33b5e54f-cef3-0e1a-b586-1b27df73ac34.png)
（アングル的にわかりにくいですが、位置とか調整しています。）

# 参考
[PhysBones - VRChat Documentation](https://docs.vrchat.com/docs/physbones "PhysBones")
[DynamicBone→PhysBone情報まとめ](https://note.com/lol_tabytter/n/n0785cdc01288 "DynamicBone→PhysBone情報まとめ")
[付いている PhysBones の探し方](https://twitter.com/vrctokage/status/1517460982758768642?s=20&t=bdQhhczXE5REFAOyQnzAiA "付いているPhysBonesの探し方")
["PhysBoens ギミックツイート"](https://twitter.com/reimeidayo/status/1518084451166605312?s=20&t=bdQhhczXE5REFAOyQnzAiA "PhysBoens ギミックツイート")
[茄子でもわかるようになる！Phys bonesの説明書！](https://note.com/tinke_/n/n04c9de66ace8#109ceb15-0dcc-4c49-a03f-d6a7f2d80ba2　"茄子でもわかるようになる！Physbonesの説明書！")
[PhysBones の設定例](https://twitter.com/HONANE_vrc/status/1517343318635470848?s=20&t=bdQhhczXE5REFAOyQnzAiA "PhysBonesの設定例")
Rails Tutorial の後に何をする?



<h3>前置き</h3>
※前回の投稿後(<a href = "https://qiita.com/chasumaru/items/97d07dd128450184ee49"> Rails Tutorialを終えて</a>)の経過記録になります。

<h3>本文</h3>
前記事で設定した課題であるDocker, MySQLを利用した環境を構築し、Rails Tutorialを作り直しました。docker関連のコマンドが自然と身につきました。
環境構築のテンプレートとして<a href = "https://qiita.com/kohki4115/items/c37ff8550b01bbc75df2">【Rails6】Docker+Rails6+puma+nginx+mysql【環境構築＊初心者必見】</a>の記事を利用しました。
また、開発を進める中でgitコマンドの理解を深められたことで、間違えても修正できるという安心感に結びつきました。

<li><h3>課題(短期)</h3></li>

* 完成したRails TutorialのCSSをいじることでCSSの仕様に慣れる。
* 気になるGem(devise, kaminariなど)を実装してみる。
* テストフレームワークをRspecに置き換える。
* AWS環境の予備知識を付ける。参考図書:「Amazon Web Services 基礎からのネットワーク&サーバー構築」</li>


<li><h3>課題(長期)</h3></li>

* CI/CDに意識を向ける。
* 他の未経験エンジニアのポートフォリオを分析する。
* インターンで必要な競プロ知識に目を向ける。

<h3>所感</h3>
マイペースになりすぎずに、なる早でポートフォリオを完成させたい。
Deep Security Manegerいれてみる

Deep Security Manageを入れてAgentで検知させる




DeepSecurity実践塾で学んだポリシー設計の基本をまとめてみた

https://dev.classmethod.jp/articles/deepsecurity-policy-howto-making/

検索除外を推奨するフォルダやファイル

https://success.trendmicro.com/jp/solution/1313316#


【環境】

・Deep security Manager
Windows Server 2019
（ファイヤーウォールはすべて無効）

・Deep security Agent
Windows Server 2019
（ファイヤーウォールはすべて無効）
Red Hat Linux Enterprise 8.1
（selinux,firewalld無効）
 
上記の環境に、インストールして検知させていきたいと思います。

ManagerはDBがいるので、
今回はMySQLを入れていきたいです。

SQL Server 2019 Expressのインストール及び設定
https://pleasanter.org/manual/install-sql-server2019-express

データベースの作成
https://docs.microsoft.com/ja-jp/sql/relational-databases/databases/create-a-database?view=sql-server-ver15
今回は、「dsm」というデータベースを作成しました。

データベースができたら、Managerをインストールしていきます。

Deep Security Managerをインストールする
https://help.deepsecurity.trendmicro.com/20_0/on-premise/ja-jp/manager-install.html

Deep Security Manager インストール手順
https://qiita.com/masato_qiita/items/de956b7f4c64362e177d

🌟初期ログインユーザーは「MasterAdmin」

これに苦しめられた。

Agentをいれていきます
https://help.deepsecurity.trendmicro.com/20_0/on-premise/ja-jp/agent-install.html

インストールスクリプトを生成して使う方法
https://help.deepsecurity.trendmicro.com/20_0/on-premise/ja-jp/computers-add-deployment-scripts.html

「Deep Security Managerコンソールの右上隅で、[サポート]→[インストールスクリプト] をクリックします。」
とあるけど、なぜか私の環境ではサポートじゃなくサポート情報と表示された。

Agentの有効化
https://help.deepsecurity.trendmicro.com/20_0/on-premise/ja-jp/agent-activate.html
と、あるんだけどもコマンドではなぜか有効化されずに詰まっていたので、下記のやり方をお勧めします。

IPアドレスまたはホスト名を直接入力する
https://help.deepsecurity.trendmicro.com/10/0/ja-jp/Add-Computers/ug-add-local.html
コンピューターを検出して、有効化されていないAgentがあるけど有効化します？と聞かれるので、有効化。このやり方じゃないとできなかった…

ポリシーは
https://dev.classmethod.jp/articles/deepsecurity-policy-howto-making/
こちらを参照し、作成。

［コンピューター］-[右クリック]-[処理]-[ポリシーの配信]
上記操作でポリシーを配信

AgentににせものウイルスのEicarというものをググり、文字列をメモ帳に張り付け、保存。viコマンドで文字列を書き込み、保存。

そうすると、自動的にファイルが削除され、しばらくると[アラート]タブにへんなファイルありましたと報告されるのでヨシとする。
KMSについてまとめました。

# はじめに
こんにちは、山田です。
今回は、現在関わっている案件でKMSを用いる機会があったのでKMSについてまとめていきます。

# KMS概要
KMSはデータの暗号化に使用される暗号化キーの作成と管理を行うAWSのマネージド型サービスです。
KMSの操作履歴は全てCLoudTrailに保存されます。

# 暗号化・復号化
KMSでは、以下の2種類のキーを使用してデータの暗号化・復号化を実施します。

**・Customer Master Key(CMK) → データキー(CDK)を暗号化するためのキー**
**・Customer DataKey(CDK) → データを暗号化するためのキー**

## 暗号化の仕組み
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1096361/4cb04f5a-ca1a-5b0c-6520-6bd7b173f98d.png)
**① アプリケーションからCDKを生成します。
② 暗号化されているCMKが復号化される。
③ CMKを使用して、CDKを暗号化します。
④ CDKと暗号化されたCDKをアプリケーションに渡します。
⑤ CDKを使用してdataを暗号化します。
⑥ 暗号化されたdataと暗号化されたCDKをDBに保存します。**

## 復号化の仕組み
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1096361/2dca281b-fcac-8c57-d97e-ea55d2f9e2ce.png)

**① 暗号化されたCDKを取り出します。
② KMS内でCMKを復号化します。
③ 復号されたCMKを使用してCDKを復号化します。
④ 復号化されたCDKを使用し、dataを復号化します。**

# CKMの種類
CMKには主に以下の種類があります。

**・カスタマー管理キー**
AWS利用者が作成、所有、管理するCMK。ユーザーが開発したアプリでデータを暗号する際に使用するのがCMKとなる。
キーポリシーの設定、有効化・無効化、ローテーション、エイリアスの作成、削除のスケジューリング等の操作が実行できます。
1年ごとの自動ローテーションの有効化・無効化を設定できます。

**・AWS管理CMK**
AWSサービスが利用者に代わって作成、管理、使用するCMKです。
キーポリシーの変更はできない。
3年ごとにAWS側で自動ローテーションされます。
ClusterFuzzLite でぺろっと C/C++ project の fuzzer を Github actions で走らせるメモ

## 背景

LLVMfuzzer とか CI に統合したい.

https://security.googleblog.com/2021/11/clusterfuzzlite-continuous-fuzzing-for.html

ClusterFuzzLite 使ってみます.

# 設定

自身の C/C++ アプリですでに fuzzer をする仕組みがあると仮定します.

https://google.github.io/clusterfuzzlite/

* ローカルでビルドする設定をしておく
* Github actions を設定する(github actions を利用する場合)

でいけます!

とりあえず PR fuzzing(PullReq あったら fuzzer 走らせる)をやります.

## ローカルでビルドする設定　

Docker が必要です(ちょっとめんどいですね).

https://google.github.io/clusterfuzzlite/build-integration/

Docker の起動とか Docker 内のファイルコピーとかで 1 分くらいかかってしまうので, 非 Docker でスクリプト動作確認しておくとよいでしょう.

https://google.github.io/clusterfuzzlite/build-integration/#testing-locally

## サンプル

TinyUSDZ の例を参照ください.

https://github.com/syoyo/tinyusdz/tree/dev/.clusterfuzzlite

https://github.com/syoyo/tinyusdz/blob/dev/.github/workflows/cflite_pr.yml
(初期設定をコピペのみ)

## Issues

Github actions だと, 結果が artifact file だけっぽいのできちんと動いたのか動かなかったのかわからないっぽい.

# TODO

* [ ] Batch fuzzing など対応する
* [ ] 将来的に自社のサーバなどで動かす(マイニングなどで遊んでいる CPU で動かすなど)
PowerQuery: Excel で相対パスで動かしたい場合

# 背景
昔必要になった際のメモ

対象フォルダ以下に対して処理したい場合に、相対パスが欲しくなる時用。

# 概要
- Excel 関数で 相対パスを取得
- Table で Power QUery に渡して利用

# 詳細
## Excel 関数で相対パスを取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/82e0a419-7791-8265-1870-1ea8ebdf0a57.png)

```excel:現在パスの取得
LEFT(CELL("filename",A1),FIND("[",CELL("filename",A1))-2)
```

CELL() 関数で、フルパスを取得して、ファイルの保存フォルダを取得

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/59e3cb3a-5a5c-2198-ba37-c4c6c569419b.png)

https://support.microsoft.com/ja-jp/office/cell-%E9%96%A2%E6%95%B0-51bd39a5-f338-4dbe-a33f-955d67c2b2cf

:::note info
A1 形式を利用しているので、このまま利用する場合は、以下設定を。
R1C1 形式に変換すれば動くかも（未検証）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/cf97433b-4436-ba5a-668b-4aa6dbc28481.png)
:::

## Table 化して、Power Query で

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/0512b5c5-22a1-dacf-fe93-3665ca6803d4.png)

取得した結果を使って、以下のようにして、利用するだけ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/b5ee0794-6b6e-74a1-84cf-7954ba727557.png)

### 分解してみると・・
普通にテーブル範囲を取り込んだ状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/9e1fe685-8a23-2ca1-138d-4d381363b5a3.png)

テーブルに一点だけなので、一つ目ってことで、<code>{0}</code> を付加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/3267c091-d204-9080-3aa5-e49b6b9e9e12.png)

文字列として使う為に、<code>[CurrentPath]</code> を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/03fb4ffd-cc53-3a0c-1114-95311ec4a1df.png)


# あとがき
ローカルで Excel を使うことは減ってはいるけれど、Power BI の前段階で Excel-Power Query を教えることはまだ多い。
そんな時、人と共有しやすくする相対パス利用はまだまだ需要があるみたいですね。

# keyword
how to use relative path in Excel Power Query
DTLS1.3がRFCになったので、wolfSSLで試してみる

## DTLS 1.3の標準化
先日DTLS1.3の仕様が「[RFC 9147 The Datagram Transport Layer Security (DTLS Protocol Version 1.3](https://www.rfc-editor.org/rfc/rfc9147.html)」として標準化されています。

DTLS1.3はTLS1.3([RFC 8446](https://www.rfc-editor.org/rfc/rfc8446.html))に基づいており、同等のセキュリティを提供します。TLS1.3と同じように0-RTTハンドシェイクを利用できます。

また、Connection IDを使う場合は、IPアドレスが変わったとしてもConnection IDを用いて通信を識別することができるため、ハンドシェイクからやり直す必要はありません。

## 実装状況
今のところ、簡単にソースコードを眺めた所「NSS」や「wolfSSL」で実装が進められているようです。

wolfSSLはまだプルリクエストが出されている状況です。

## 試す

プルリクの出ているリポジトリをビルドするだけ 

https://github.com/wolfSSL/wolfssl/pull/4907 (マージされたら本家のリポジトリで良さそう)

```
$ git clone https://github.com/rizlik/wolfssl.git
$ cd ./wolfssl

$ git checkout dtls13
$ ./autogen.sh
$ ./configure --enable-dtls --enable-tls13 --enable-dtls13
$ make

```

Server
```
$ ./examples/server/server  -v 4 -u
```

Client
```
$ ./examples/client/client -v 4 -u
SSL version is unknown
SSL cipher suite is TLS_AES_128_GCM_SHA256
SSL curve name is SECP256R1
I hear you fa shizzle!
```

## パケット
パケットキャプチャしてみます。

DTLS1.3に対応していないWiresharkでは、DTLS1.3の狙い通りただのDTLS1.2に見えます。ちゃんと、ハンドシェイク中のsupported_version拡張はDTLS1.3を示す`0xfefc`が選択されていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32425/2ee1735e-d3ca-5821-3dcd-27df7d75c262.png)
画面要素出し分けのABテスト時のRSpec（Capybara）の記述

ABテストで画面要素の出し分け時、画面表示のspecを書く際の記述を思い出すのに時間がかかったのでメモ

```show.html.slim
- case @ab_test_pattern
- when 'existing_question'
  - f.select :do_you_like_mushroom_mountain, id: 'mushroom_mountain'
- when 'new_question'
  - f.select :do_you_like_bamboo_grove,      id: 'bamboo_grove'
```

```show_spec.rb
# TODO: ABテスト決着後、条件分岐削除
# ref: https://github.com/xxx/issues/yyy
it 'should have correct fields' do
  if page.all('#mushroom_mountain').empty?
    expect(page).to have_selector 'select#bamboo_grove'
  else
    expect(page).to have_selector 'select#mushroom_mountain'
  end
end
```

決着がついた後の条件分岐削除は大体忘れ去られるので、負債にしないためにもアノテーションコメントを入れておくのがbetter.
`split`（ABテスト用のGem）の場合ダッシュボードで勝敗決定することができますが、勝敗決定をトリガーにしてコード修正する仕組みがあれば便利そうだなってふと思った
ベタ打ち数値は青、などを自動化

# マクロの入れ方など
[Excelスターターキットのマクロ化(&クイックアクセスツールバー設定)](https://qiita.com/tetsuya112/items/6bd296f8d0228cd21041)
上記にて詳述しているので、ご参考ください。
 ##### 2204242320追記
pivotテーブルの数値も青になってしまっていたため、黒となるように修正しました
##### 2204251320追記
保護されているシートが含まれる場合エラーが出てしまう点を修正。
(保護されているシートについては処理をしない形で修正)
# コード
```vb
Sub 色変える()
'
' 色変える Macro
'

' 画面更新をさせない（チカチカするため）
Application.ScreenUpdating = False
'
Dim ws As Worksheet
' 各シートを順番に見ていく
For Each ws In Worksheets
    ' シート保護されてるか確認
    If ws.ProtectContents = True Then
    '保護されてたら何もしない
    Else
    '保護されていなかったら処理を走らせる
        ws.Activate
        ws.UsedRange.Select
    ' ベタ打ちの数値→青、他シート参照の数式→緑、他→黒に変更
        For Each a In Selection
            If a.HasFormula Then
                If InStr(a.Formula, "!") > 0 Then
                    a.Font.Color = RGB(112, 173, 71)
                Else
                   a.Font.Color = RGB(0, 0, 0)
                End If
            Else
                If IsNumeric(a.Value) = True Then
                    a.Font.Color = vbBlue
                Else
                    a.Font.Color = vbBlack
                End If
            End If
        Next a
    
    ' pivot処理
    On Error GoTo ERR_HNDL
    For Each piv In ActiveSheet.PivotTables
    piv.TableRange1.Select
    Selection.Font.Color = vbBlack
    Next piv
ERR_HNDL:
    ' pivot処理ここまで
    
    
    Range("A1").Select
    ' 表示位置を左上端に移動
    ActiveWindow.ScrollColumn = 1
    ActiveWindow.ScrollRow = 1
    End If
Next ws
' １枚目のシートに移動
Sheets(1).Select
'画面更新を再開させておく
Application.ScreenUpdating = True
' メッセージを表示
MsgBox "処理が完了しました"


'
End Sub


```

# 実行前エクセル
E3のみ数式
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208188/29b744c7-2750-cfb1-b976-39ad1aa440f0.png)
D2は他シート参照
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208188/face3a15-72a1-dd40-eaf1-1a839041f9f5.png)

# 実行後エクセル
ベタ打ち→青、他は黒
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208188/18e4ca01-1c8b-9cac-4fc5-20d9b04bb4f7.png)
他シート参照なので緑に
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208188/eda49299-73fa-09b7-dfa9-a50fe18271db.png)

# 注意点
全シートでアクティブセルすべてに対して処理を走らせているため、シート数やアクティブセルが多い場合、実行時間が長くなる場合がございます。
ご利用は自己責任にてお願い致します。(こうした方が早くなる等ありましたらご指摘いただけますと幸いです。

# おまけ-pivot tableのリスト化など
選択しているピボットテーブルに下記変更を行うマクロ
①レポートのレイアウト→表形式＆アイテムラベルを繰り返す
②小計&総計を集計しない
```vb
Sub pivotリスト形式()
'
' pivotリスト形式 Macro
'
On Error GoTo ERR_HNDL
With ActiveSheet.PivotTables(ActiveCell.PivotTable.Name)
    .RowAxisLayout xlTabularRow
    .RepeatAllLabels xlRepeatLabels
    .ColumnGrand = False
    .RowGrand = False
  End With
  
Dim pv_fld As PivotField
  For Each pv_fld In ActiveSheet.PivotTables(ActiveCell.PivotTable.Name).PivotFields
    pv_fld.Subtotals(1) = True
    pv_fld.Subtotals(1) = False
  Next pv_fld
'

ERR_HNDL:


End Sub

```
【初心者応援】初心者Androidエンジニアへ押さえておいた方が良いイベント3選

今回は、自分も参加をしているイベントでほぼ毎年あるイベントをご紹介します。

ほぼ毎年ある為、最新のトレンドなどが追えるのが良いです。

# 1 DroidKaigi

[DroidKaigi2022公式ホームページ](https://droidkaigi.jp/2022/)

こちらがおそらく一番大きいAndroidエンジニアのイベントだと思います。

今年は10月5日〜10月7日の３日間開始予定だそうです。

こちら毎年公式カンファレンスアプリも開発している為、[GitHubリポジトリ](https://github.com/DroidKaigi)
を覗いてみるのもかなりの勉強になります。


# 2 Kotlin Fest

Android開発でメジャーになったKotlinの言語について学べるイベントです。
参加して損はないと思います！

Kotlin Fest 2022の開催に向けて準備中との事なので、追加発表を待ちましょう。
[公式Twitterアカウント](https://twitter.com/kotlin_fest)


# 3 GDG DevFest
こちらはAndroidだけではないですが、Androidの内容もある為確認してみると良いと思います。
AndroidやAndroidStudioの最新情報なども知る事ができるので、おすすめです。
JetpackComposeのお話などもありました。
2021年はYoutubeで無料で見る事ができました。
今も調べてもるとまだ見れるかもしれません。


# 以上
以上です。
どんどん進化していく業界なので、自分から新しい情報を手に入れる癖をつけれると良いですね！
yarnがnpmからインストールできなくてハマった備忘録

<h1>yarnがnpmからインストールできなくてハマった備忘録</h1>

<h3>結果PATHが通っていなかっただけ</h3>

※初心者の備忘録なので、内容に誤りがある可能性があります。


--Macでの出来事

Typescriptを学習しようと学習動画を参考にnpmをinstallしたまではよかった。
次にyarnのinstallを行う手順になり、以下コマンドでyarnをinstall！
```
npm install -g yarn
```

yarnがinstallされたか以下コマンドで確認。
```
yarn -v
```
出てこない。。。

あれ？と思い、今度は**which**で確認。
```
which yarn
```

出てこない。。。


原因は以前Typescriptの学習をしていたときに、設定したPATHが間違っていたのが原因でした。（なぜその時に気づかなかったのかは謎。）

.zshrc内のPATHを全体的に見直して、PATHの最後に`:$PATH`をつけて回避！！！
```
export PATH="通したいPATH":$PATH
```
変更をターミナルに反映！
```
source ~/.zshrc
```

その後、もう一度yarnのバージョン確認をすると出ました！
```
yarn -v
1.22.18
```

が、その後に大きな問題が。。。
`ls`コマンドが使えなくなってしまいました。。。

PATHの設定変えたせいだー！とめちゃくちゃ慌てましたが、先人達のお知恵を拝見し、ターミナルをログアウトしてログインし直すことで解決しました。
最後に、、、設定ファイルは必ずバックアップしておくことを推奨します。


### 参考
https://qiita.com/Oka1551/items/39bc73d7b18842b60138

https://qiita.com/stilo/items/90f6c6e308c85a4a9460
【AWS】S3静的コンテンツ＆ファイルダウンロード（ハンズオン検証）

AWS試験用に実機検証 
## はじめに
現在、AWS SAAを勉強中。
良く分からないなかったところを実機にて検証。
（主にハンズオンなどを参考に検証しています）

## 1.S3バケットを作成
・バケット名を「test-701」で作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2640045/a99a02bd-8731-88cb-c9c7-697179c009b4.png)
・パブリックアクセスをすべてブロックをOFF
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2640045/75e4749e-002e-b076-00e2-76100f4d9fea.png)
・バケットを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2640045/a4fa9662-c7ba-84f0-f684-7442865882d0.png)

## 2.資材のアップロード
「test-701」バケットに以下資材をアップロード
・index.html
・css(style.css)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2640045/4c7d7e64-2195-b77f-e077-8cca2b37e6f3.png)

## 3.アクセス許可タブ
・アクセス可能なIPアドレスを指定。

```
{
    "Version": "2012-10-17",
    "Id": "PolicyId2",
    "Statement": [
        {
            "Sid": "AllowIPmix",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::test-701",
                "arn:aws:s3:::test-701/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "<許可するIP#1>/32",
                        "<許可するIP#2>/32"
                    ]
                }
            }
        }
    ]
}
```

## 4.プロパティタブ
・静的ウェブホスティング
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2640045/1b357830-0cbf-c317-705d-02351ac8230b.png)

・インデックスドキュメントに「index.html」を入力し、[変更の保存]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2640045/14062eaa-8b20-6ab1-c935-10e0774c6554.png)

・バケットウェブサイトエンドポイントが表示されるので、URLをコピーしてアクセス。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2640045/aaa0a0f2-0924-8afc-ba33-0b80d4ba3cc2.png)

## 5.アクセス
・テスト用ページが表示されたことを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2640045/292627d6-caa5-ab57-3a88-cc925d8ea58e.png)
---
## テストデータをインタネット経由でダウンロードしたい。
・バケットに対象ファイルを配置（test_data01.csv）し、対象ファイルを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2640045/df2a3763-7fc4-5786-cf63-007a611bd48f.png)

・対象ファイルのプロパティタブにて「オブジェクトの概要」→「オブジェクト URL」にアクセス用の
　URLの記載があるのでブラウザーにてURLにアクセスするとファイルダウンロードができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2640045/e2e46f7a-10cd-cb17-1a42-2e2bf89a90ab.png)
---
## 参考リンク
[Qiita](http://https://qiita.com/koyama_0122/items/33b95558bbeab22b7666/ "S3で静的ウェブサイトをホスティングする")
SpringBoot開発用に、ダミーのメールサーバーを立てる

SpringBootでWebサービスを開発しています。
メール送信を実装したいのですが、メールサーバーはどうするのか迷いました。

Gmailとかでもいいですが、
Webサービスなのでいずれは独自のメールサーバーを立てたい。
しかし、そのやり方もまだよくわからない状態。
とりあえず、メール送信の機能を実装して単体テストだけでもしたい。

# fakeSMTPを使ってダミーのメールサーバーを立てる

ということで調べていたらダミーのメールサーバーを立てるといいと。
ということで今回は**fakeSTMP**を使いました。
Javaで実装されているため、環境を選ばないのがポイントです。
下記からダウンロードします（macです）。

https://macdownload.informer.com/fakesmtp/

zipファイルがダウンロードされます。
解凍するとjarファイルが出てきます。　

fakeSMTP-x.xx.jar


これを任意の場所に配置し（今回は/path/to/fakeSMTP-x.xx.jar）、
jarファイルをダブルクリックするか、
```
java -jar /path/to/fakeSMTP-x.xx.jar 
```
で起動します。

「開発元が未確認で起動できない」と言われたら下記を参照。

https://support.apple.com/ja-jp/guide/mac-help/mh40616/mac


起動すると、下記のような画面が表示されます。
![スクリーンショット 2022-04-24 19.15.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499674/29501ca8-6e61-8b62-55d9-4b242acaaf62.png)


リスニングポートが「25」です。任意の番号に変更可です。
メッセージ保存先にフォルダを指定すると、送信したメッセージがそのフォルダに保管されます。

# SpringBoot アプリケーションの実装

application.propertiesに下記を追記してください。

```application.properties
#ホスト名（今回はローカルで起動します）
spring.mail.host=localhost
#ポート番号（リスニングポートを指定する）
spring.mail.port=25　
```

pom.xmlに依存関係を追加します。
```pom.xml
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
```

```MailService.java
@Service
public class MailService {
    @Autowired
	private JavaMailSender mailSender;

	public void sendMail() {
		SimpleMailMessage mailMessage = new SimpleMailMessage();
		mailMessage.setTo("宛先メールアドレス");
		mailMessage.setSubject("件名を入力します");
		mailMessage.setText("本文を入力します");

		mailSender.send(mailMessage);
	}
}
```
宛先メールアドレスは適当でもいい(aaaとかでもいい)ですが必ず何か入れてください。
実際にはどこにも送られません。

# 送信してみる

fakeSMTPの「サーバー起動」を押して、メールサーバーを起動します。
![スクリーンショット 2022-04-24 19.15.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499674/25996c47-c775-7069-b193-94f9df0f5722.png)
Webサービスの開発サーバーを起動して、該当ロジックを流します。

メール送信に成功すると、
fakeSMTPの画面に
送信したメールの情報が表示されます。

![スクリーンショット 2022-04-24 19.13.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499674/5eeecb07-9896-221e-f3c0-7ce34ea0fbf1.png)
Power Automateによる「検温報告」の仕組み(2) - 検温報告を求めるフロー

# 概要
[前回](https://qiita.com/mitou/items/9998329fcf3389a0f6cb)の続きです。
[Power Automateによる「検温報告」の仕組み(1)](https://qiita.com/mitou/items/9998329fcf3389a0f6cb)
Power Automateによる「検温報告」の仕組み(2) - 検温報告を求めるフロー
[Power Automateによる「検温報告」の仕組み(3) - 検温報告を受けるフロー](https://qiita.com/mitou/items/82928c1be99e1dab8b87)

毎日20時に、スケジュール実行してユーザーに一斉にメッセージを投稿するフローを作成します。
フローの概要はこんな感じです。
![2022-04-23_21h34_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/ff1b87d9-2f63-deaf-a847-9bd2729e87da.png)

# 実行ステップ
## トリガー
トリガーは、毎日20時に実行する繰り返しトリガーです。
![2022-04-24_18h56_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/b0c0442a-d278-6d64-ae2e-04caaf5e34f7.png)

## LINE WORKS APIのシークレット取得
最初にLINE WORKSのAPI IDなどのシークレットを取り出しています。
シークレットはAzure Key Vaultに格納しています。
各アクションの設定で、「セキュリティで保護された出力」をオンにしておくとよいと思います。
LINE WORKSのAPIを触った方なら、見たらわかると思いますが、新APIにはまだ対応していません。（そのうち直します）
その後の変数の初期化や、JSONの解析は、LINE WORKSのシークレットをJSONにして、解析しているだけです（参照しやすくするためだけの処理）。 

## メンバーリストの取得
メンバーリストを取得するAPIを叩きます。
![2022-04-23_21h37_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/d191c6ed-4045-8f49-f028-7d73bd09e065.png)
旧APIでは、最大のページサイズが100名ぶんとなっているため、それ以上のユーザーがいる場合は、ループを回してアレイ変数に格納するとよいです。
当社では、100名までいくことは当分なさそうなので、１回叩いて終わりにしています。 
[LINE WORKS Developers - メンバーリスト照会](https://developers.worksmobile.com/jp/document/100300529?lang=ja)

## ユーザーごとの処理
 条件アクションの中身です。
![2022-04-23_22h18_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/454b81ca-289e-3532-b75b-b19ed19fa928.png)
ユーザーリストが正常に取得で来たら、Apply to Eachでユーザーごとにループを回します。 
「条件 2」はメンバーリストに外部ユーザーやBotも含まれるかと思って付けたのですが、社内のメンバーだけだったので必要なかったですね。
もし何らかの絞り込みを行うのであれば、アレイのフィルター処理アクションのほうが階層が深くならず、スマートだと思います。
### 行IDの設定
ユーザーから報告が来た際にExcelのリストと照合するためのキー列として利用するため、現在時刻を文字列としてIDに利用しています。 
ミリ秒単位にしておけばかぶることはないかなと安直に決めましたが、かぶらなければExcelシートの行番号でもなんでもいいと思います。
![2022-04-23_22h28_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/8454b7bb-5963-9b73-5906-27aff4e4d6f2.png)
~~~
formatDateTime(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'),'yyyy/MM/dd_HH:mm:ss.fff')
~~~
### Botによるメッセージ投稿
 メッセージをJSONでちまちま書いていきます。
選択アクションを使ってごにょごにょすると、もう少しスマートに書けると思いますが、ご勘弁。
[LINE WORKS Developers - トーク共通プロパティ](https://developers.worksmobile.com/jp/document/100500807?lang=ja)
![2022-04-23_22h31_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/a4f72b86-63fb-4b70-4c3b-c402c1cd46b8.png)
Callbackを受け取ったときに、紐づけできるよう、postbackに現在時刻から生成したIDをJSONで書いています。（要URLエンコード） 
~~~ json
{
	"q": "q1",
	"id": "@{variables('ID')}"
}
~~~
（q は質問番号を表します→検温報告を受けるフローで使用）

### Excel への記録
回答があったときに記録するように、Excelにあらかじめ行を作っておいて、このフローはおしまいです。 
検温結果や咳などの列は、「検温報告を受けるフロー」で記入していくため、ここでは空欄のままです。 
![2022-04-23_22h39_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/d0401a52-1e00-a44f-d848-6b6973e736f2.png)

# まとめ
特段ひねりのないフローだと思います。
「検温報告を受けるフロー」は別記事で。
毎日頻繁に CI/CDビルドにコードがコミットされている模様

2022 Java Developer Productivity Report で気になった点を memo.

## Java Developer Productivity Report とは

Java　のトレンドを紹介する年鑑。


## CI/CD技術のトレンド

CI/CD ビルドの完了にかかる時間

- 0～1分（6％）
- 2～3分（21％）
- 4～5分（22％）
- 6～10分（18％）
- 10分以上（33％）

1日に何回、CI/CD ビルドにコードをコミットしているか

- 1回（22％）
- 2回（16％）
- 3回（18％）
- 4回（9％）
- 5回以上（35％）


## 参考資料

https://www.infoq.com/jp/news/2022/03/jrebel-report-2022/

https://atmarkit.itmedia.co.jp/ait/articles/2204/19/news015.html

https://www.jrebel.com/resources/java-developer-productivity-report-2022
さくらレンタルサーバにLaravelをアップロードする

ここに全て書いてありますが。。

https://arrown-blog.com/laravel-sakura-deploy/


　　
　　　　
あらかじめ、Laravelで作ったアプリケーションでgithubにレポジトリを作っておきます。

次にさくらサーバーからsshでgithubにアクセスできるようにします。

まずさくらサーバーにsshで接続します。

```ターミナル
ssh [FTPアカウント]@[FTPサーバ名]
//秘密鍵と公開鍵を作成
ssh-keygen -t rsa -b 4096 -C "forGithub" -f  ~/.ssh/id_rsa

//接続設定を追加する
vi ~/.ssh/config
//開いたファイルに以下の４行を追加
//vi画面が表示されるので、iを押してINSERTモードにする
　　Host github github.com
　　HostName github.com
　　IdentityFile ~/.ssh/id_rsa
　　User git
//入力できたらescapeキーを押して、:wq!で入力内容を保存

//中身を表示させる（これをコピーしておく）
cat ~/.ssh/id_rsa.pub

```

GitHubにコピーした公開鍵を登録します
Settings > SSH and GPG keys

登録できたら、さくらサーバーからGithubにsshで接続します。

```ターミナル
ssh -T git@github.com
```

これで"Hi 〜〜"とかでたら成功です。

のはずが、契約してるさくらサーバーのOSが古くてGithubとsshできませんでした。。。

https://teratail.com/questions/c47r2vduqkmrtp


　　
仕方なく、普通にさくらサーバーの中でLaravelプロジェクトを作り、
最初から作り直すことにしました。


```ターミナル
//現在地を確認
pwd

//プロジェクトフォルダに移動
cd Laravelのプロジェクト名

//composerをインストール
curl -sS https://getcomposer.org/installer | php
php composer.phar

//Laravelプロジェクトを作成
php composer.phar create-project --prefer-dist laravel/laravel todolist

//シンボリックリンクを使ってlaravelプロジェクトのpublicフォルダとURLを同期させる
ln -s /home/[FTPアカウント]/www/[プロジェクト名]/todolist/public /home/[FTPアカウント]/www/todo
```
　　　　


これでurlに
https://〜/todo/
にアクセスしてLaravel が表示されればOK。

あとは作っていく。

  
  
---------------------------------------
参考

https://naoya-ono.com/blog/deploy-laravel-xserver/#2

https://arrown-blog.com/mac-github-ssh/

https://www-creators.com/archives/5941
ファイル管理

復習回数1
## ファイル管理
<b>プログラムなどはファイル単位で格納する。ファイルは<font color = blue>ディレクトリ</font>を用いて管理。windowsやmacなどではディレクトリをフォルダと呼ぶ。
### 階層構造
<b>階層構造の最上位のディレクトリを<font color = blue>ルートディレクトリ</font>という。
ディレクトリの下位に作成されたディレクトリは<font color = blue>サブディレクトリ</font>という。
現在、捜査対象のディレクトリを<font color = blue>カレントディレクトリ</font>。

### パス指定
<b><font color = blue>絶対パス</font> - <font color = blue>ルートディレクトリ</font>を基点に、目的となるディレクトリやファイルまでの経路を指定する
<font color = blue>相対パス</font> - <font color = blue>カレントディレクトリ</font>を基点に、目的となるディレクトリやファイルまでの経路を指定する。

### データのバックアップ
<b>バックアップの方法
<font color = blue>フルバックアップ</font> - 磁気ディスクに保存されているすべてのデータをバックアップする。
<font color = blue>差分バックアップ</font> - 前回のフルバックアップ以降に変更されたデータをバックアップ
<font color = blue>増分バックアップ</font> - 前回のバックアップ以降に変更されたデータをバックアップ

参考文献：イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室