OmniAICreator/Qiita-1.07M huggingface dataset:
ABC342をPythonで（A～E）

HUAWEI Programming Contest 2024（AtCoder Beginner Contest 342）の解答等のまとめ

https://atcoder.jp/contests/abc342

# A問題
1文字なのが何か求めて、そのインデックスを出力
```python:A
s = input()
t = sorted(list(s))
diff = t[-1] if t[0] == t[1] else t[0]

print(s.index(diff) + 1)
```
# B問題
全探索しても間に合うので、$a$と$b$のインデックスを毎回調べて答えればよい
```python:B
n = int(input())
p = list(map(int, input().split()))

for _ in range(int(input())):
    a, b = map(int, input().split())
    print(a if p.index(a) < p.index(b) else b)
```
# C問題
$S$を毎回変更していては間に合わないから、最終的に各文字が何になるか調べればよい
```python:C
n = int(input())
s = list(input())

a = {chr(ord("a") + i):{chr(ord("a") + i)} for i in range(26)}

for _ in range(int(input())):
    c, d = input().split()
    if c == d:
        continue
    a[d] |= a[c]
    a[c] = set()

dic = dict()
for key, val in a.items():
    for b in list(val):
        dic[b] = key

for i in range(n):
    s[i] = dic[s[i]]

print("".join(s))
```
# D問題
$a_ia_j$が平方数になるには、$a_i$,$a_j$のそれぞれで素因数分解したときに奇数個の素因数が同じであればよい
あとは$0$の処理に気を付けて実装する
```python:D
from collections import defaultdict
from functools import lru_cache

@lru_cache(maxsize=None)
def calc(x):
    res = set()
    i = 2
    while i * i <= x:
        if x % i == 0:
            count = 0
            while x % i == 0:
                count += 1
                x //= i
            if count % 2 == 1:
                res.add(i)
        i += 1

    if x > 1:
        res.add(x)

    return tuple(sorted(res))


n = int(input())
a = list(map(int, input().split()))

ans = 0
d = defaultdict(int)
zero = n - 1
for i, a_i in enumerate(a):
    if a_i == 0:
        ans += zero
        zero -= 1
    else:
        c = calc(a_i)
        ans += d[c]
        d[c] += 1

print(ans)
```
# E問題
$N$を始点にダイクストラのように計算する
```python:E
from heapq import heappop, heappush


def max_pop(q):
    t, x = heappop(q)
    return -t, x
def max_push(q, t, x):
    heappush(q, [-t, x])


n, m = map(int, input().split())

edge = [[] for _ in range(n)]
for _ in range(m):
    l, d, k, c, a, b = map(int, input().split())
    edge[b - 1].append([a - 1, l, d, k, c])

INF = float("inf")
time = [-1] * n
q = []
max_push(q, INF, n - 1)

while q:
    t_i, now = max_pop(q)
    if time[now] > t_i:
        continue

    for to, l, d, k, c in edge[now]:
        if t_i >= INF:
            nxt = l + d * (k - 1)
        else:
            k_to = (t_i - (l + c)) // d
            if k_to < 0:
                continue
            nxt = l + d * min(k_to, k - 1)

        if time[to] < nxt:
            time[to] = nxt
            max_push(q, nxt, to)

for i, t_i in enumerate(time[:-1]):
    print(t_i if t_i >= 0 else "Unreachable")
```
【flutter】addEntries

## はじめに
Futterの`Map`クラスは、値をキーとバリューのペアとして格納できる非常に便利なデータ構造です。このブログでは`Map`に新しいエントリを追加するaddEntriesについて`他のマップから全部追加する時`, `単純に新しいkeyとvalueを追加したい時`の２つの観点から紹介します。

## 他のマップから全部追加する時
一つのMapから別のMapに全てのエントリを追加する場合、addEntriesを用いて以下のように書くことができます。

### コード
```dart
    final fruits = <int, String>{
      1: 'Apple',
      2: 'Banana',
      3: 'Cherry',
    };
    final gasGiants = <int, String>{4: 'Plum', 5: 'Grapes'};
    final iceGiants = <int, String>{6: 'Orange', 7: 'Peach'};
    print("✅ 変更前: $fruits");
    fruits.addEntries(gasGiants.entries);
    print("✅ 追加（１回目）: $fruits");
    fruits.addEntries(iceGiants.entries);
    print("✅ 追加（２回目）: $fruits");
```

### 結果
```
✅ 変更前: {1: Apple, 2: Banana, 3: Cherry}
✅ 追加（１回目）: {1: Apple, 2: Banana, 3: Cherry, 4: Plum, 5: Grapes}
✅ 追加（２回目）: {1: Apple, 2: Banana, 3: Cherry, 4: Plum, 5: Grapes, 6: Orange, 7: Peach}
```

## 単純に新しいkeyとvalueを追加したい時
単一のキーとバリューのペアをマップに追加する場合は`MapEntry`クラスを使用して以下のように書くことができます。
### コード
```dart
    final fruits_2 = {
      1: 'Apple',
      2: 'Banana',
      3: 'Cherry',
    };
    print("✅ 変更前: $fruits_2");
    fruits_2.addEntries([
      MapEntry(4, 'Plum'),
      MapEntry(3, 'Grapes'),
    ]);
    print("✅ 更新, 追加後: $fruits_2");
```

### 結果
```
✅ 変更前: {1: Apple, 2: Banana, 3: Cherry}
✅ 更新, 追加後: {1: Apple, 2: Banana, 3: Grapes, 4: Plum}
```

## コード全文
https://github.com/TajimaMiho/map_sample

## 参考
他のマップから全部追加する時

https://api.flutter.dev/flutter/dart-core/Map/addEntries.html

単純に新しいkeyとvalueを追加したい時

https://api.flutter.dev/flutter/dart-core/MapEntry-class.html
Windows に Apache をインストールする

Windows に Apache をインストールする。

こちらのページが参考になる：
https://www.kkaneko.jp/tools/win/apacheinstall.html

しかし、こちらのページで紹介されているリンクは「ApacheHaus」はもうリンクされていない。(2024.2.24)

というわけで、その下の Apache Lounge からダウンロードしてみました。

 - https://www.apachelounge.com/download/

やってみたところ、ダウンロードに結構時間がかかりました。15分ぐらい。けれど、なんとかダウンロードできました。

ダウンロードしたら、zipを解凍して、そのフォルダを適当な場所に置きます。僕はCドライブ直下にApache24というフォルダを作ってその中に置きました。

この状態で、インストーラーの実行などは必要なく、Apacheを起動できます。

英語ですが、こちらのページで起動の方法が説明されています。

 - https://httpd.apache.org/docs/current/platform/windows.html#down

コマンドラインからやるやり方ですが、GUIでも起動、終了、再起動ができます。

zipで解凍したファイルの中のbinフォルダの中に、

 - ApacheMonitor.exe

というものがあります。

これをダブルクリックすると、一見何も起きませんが、タスクトレイの中にこのファイルのアイコンと同じものが出てくるようになったと思います。

このタスクトレイのアイコンをクリックすることで、Apacheの起動・終了・再起動を制御することが可能です。
【SwiftUI】1番下までスクロールしたら同意ボタンが押せるようになる機能を実装したい

# はじめに
SNS系のアプリで利用規約に同意させる画面が出ると思います。
利用規約を最後までスクロールしないと同意が押せないようなUIをよくみます。
それを再現してみます。

# サンプルアプリ
![Simulator Screen Recording - iPhone 15 Pro - 2024-02-24 at 22.20.58.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/95c91e32-303e-93e5-65e5-3d97cb99344d.gif)

# 実装
```swift
import SwiftUI

struct ContentView: View {
    @State private var scrolledToBottom = false
    @State private var isAgreement = false
    
    var body: some View {
        VStack {
            ScrollView {
                LazyVStack {
                    Text("利用規約")
                        .font(.title)
                        .fontWeight(.bold)
                        .frame(maxWidth: .infinity, alignment: .leading)
                    ForEach(0..<100) { _ in
                        Text("利用規約の本文です")
                            .frame(maxWidth: .infinity, alignment: .leading)
                    }
                    Color.clear
                        .hidden()
                        .onAppear {
                            scrolledToBottom = true
                        }
                }
            }
            .border(.black)
            .clipped()
            
            Toggle(isOn: $isAgreement) {
                Text("同意しますか？")
            }
            .disabled(!scrolledToBottom)
            .foregroundStyle(scrolledToBottom ? .primary : .secondary)
        }
        .padding(.horizontal, 20)
    }
}
```

# おわり
あるある機能なので記録しておきます
mise経由でRustをインストールしてVSCodeでも補完を効かせる方法

# 背景
最近Rustに入門しようとしていたタイミングでrtxが[mise](https://mise.jdx.dev/)に名称変更したと聞いて、せっかくなのでmiseでRustの環境構築をすることに
miseを導入して
- `mise use -g rust@latest`
- `rustup install stable`
- `rustup default stable`

でサクッと導入完了
そしてVSCodeで補完が効く環境を構築しようとしたところ[rust-analyzer](https://rust-analyzer.github.io/)が動かない。。。

# 環境
- WSL2(Ubuntu22.04)
- VSCode(v1.86)
- rust-analyzer(v0.3.1850)
- mise(2024.2.17)
- Rust(1.76.0)

# 結論
VSCodeのsettings.jsonに以下を追記すればいい
※以下はWSL2でバージョンにlatestを指定する場合の例なので適宜読み替えてください

```json:settings.json
{
    "rust-analyzer.server.extraEnv": {
        "RUSTC": "/home/ユーザー名/.local/share/mise/installs/rust/latest/bin/rustc",
        "CARGO": "/home/ユーザー名/.local/share/mise/installs/rust/latest/bin/cargo",
        "RUSTFMT": "/home/ユーザー名/.local/share/mise/installs/rust/latest/bin/rustfmt",
        "RUSTUP_TOOLCHAIN": "stable"
    },
    "rust-analyzer.cargo.sysroot": "/home/ユーザー名/.local/share/mise/installs/rust/latest/toolchains/stable-x86_64-unknown-linux-gnu"
}
```

`rust-analyzer.server.extraEnv`で各コマンドのパスやtoolchainを指定できるらしいことはわかったんですが詳細は把握できてないです
WSL2でたまにGUIをつかうには

## やりたいこと
（１）主にwin10（GUI）を使う。
（２）従でWSL2（CUI）を使うが、たまにGUIアプリを表示したい。
（３）サクサク動くことが最優先。無駄なGUI化はしない。

## 解決策
（１）Win10にvcxsrvをインストールする。
（２）必要な時だけ、Win10でxsrvを起動する。
（３）WSL2（CUI）がGUIを求めれば、vcxsrvに画像を飛ばす。

##### vcxsrvのインストーラをダウンロード
下のサイトから（約40MB）
https://sourceforge.net/projects/vcxsrv/

##### Windowsにインストール
vcxsrv-64.x.x.x.x.installer.exeを管理者権限で実行
defenderの確認が出たら許可（パブリック、任意のリモートポート）

##### WSL2に環境変数を設定
```:WSL2
[root@wsl ~]# cat /etc/resolv.conf | grep nameserver
nameserver 172.xx.xx.1
[root@wsl ~]# export DISPLAY=172.xx.xx.1:0.0
```
 
##### 動作テスト
```:WSL2
[root@wsl ~]# xeyes
```
表示される
![xeyes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224341/febde361-7a53-e761-e382-4f88f2d4268e.png)

おしまい
回路のタイミング図作成ソフトをいくつか調べてみた

# はじめに

(個人の感想)回路設計で最も時間がかかる項目の一つが図表の作成。特にタイミング図
- なので色々効率化したい

以下使ってみたソフトと他のソフトについて調べてみる

# 使ってみたソフト

使ってみたソフト(drawio, WaveDrom, PlantUML)についての私見をまとめた

[drawio](https://app.diagrams.net/)
- ブラウザで動くドローソフト
- VSCode上でも動かす事ができる
  - プラグインの導入が必要[参考](https://qiita.com/kanfutrooper/items/97fb674eede660bb434f)
- スクラッチパッド機能が便利
  - 作った図形を部品として登録して使いまわすことができる
    - クロックとか信号波形などを登録して作った
- 編集ファイルをpng, jpg, svg として直接開くことができる
- タイミング図専用の作成ソフトではないので、色々できる
  - 反面、手順とかフォーマットを１から考える必要がある
    - テンプレを育てていけば多分サクサク作れる
    - 伸びしろはあるが、スキルが必要ともいえる


[WaveDrom](https://wavedrom.com/)
- jsonを編集したら自動で画像を作ってくれる
- ブラウザやVSCodeでプレビュー表示しながら作れる
- 簡単なタイミング図ならサクッと掛ける
- 文字の修飾や位置調整等が色々細かく設定できるが、結構複雑
- 関連性とか示すので波形上に矢印を挿入は一応できるが苦手寄り
- 信号波形の編集
  - 各信号が独立したオブジェクトになっていて、文字列で表現されている
  - 全ての信号オブジェクトの中で文字列の長さを揃えるのが手間
    - 途中に少し挿入・追加するとなったら、載せた信号の数分、文字列の編集が要る
    - 少数の信号しか扱わないタイミング図ならいいが、全体動作の説明とかになって十数個の信号が要るとなったらもう無理
    
[Plant UML](https://plantuml.com/ja/timing-diagram)
- 専用の記法で画像を作成してくれる
  - 時間経過毎に書けるのはWaveDromより直観的
    - 工夫すれば途中に何かに挿入するみたいなのも簡単にできる。 
    - 特定の地点でラベルを付けてその時間からどれだけ経過したら、のようなこともできる
- クラス図やシーケンス図など他のUMLの作成もできる 
  - UMLて名前にあるから当然と言えばそうだが
- タイミング図は現在作成中の機能のようだ
  - クロック信号の部分に矢印を付けようとしたらエラー出た 


# 他のソフト

以下では自分がまだ試していない無いソフトで、軽く調べてみたものをまとめた


[タイミングチャート清書ソフト](http://www.mech.tohoku-gakuin.ac.jp/rde/contents/library/tchart/indexframe.html)
- WaveDromを簡単にした感じのソフト
  - やることを絞ってjsonよりも単純な構造で管理できるようにした感じ
- リンク先によると[拡張版(?)](https://dora.bk.tsukuba.ac.jp/~takeuchi/?%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%2F%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%E6%B8%85%E6%9B%B8%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9)があるみたい

[タイミングチャートエディタ](http://hp.vector.co.jp/authors/VA019451/software/timingchart.html)
- 上記のとは違いWYSIWYGでタイミング図が作れるソフト
  - WISIWYG: 表示されたものがそのまま編集・出力できる(What You See Is What You Get)
- かなり古いソフトで更新が途絶えている
  - サポートOSがWinXPになっている

[SpecInsight-タイミングチャートエディタ](https://cmengineering.co.jp/products/specinsight-timingcharteditor/)
- CMエンジニアリング社が販売しているソフト
- 波形を作るだけではなく、下に説明を添付したり、信号の関連性を図示する機能があるようだ
- 色々な機能が入っていて便利そうだが、プロ仕様のソフトな分導入はよく考えないといけない
  - 見たところオープン価格
    - 統合開発環境の内の１機能みたい
  - 一応試用版として30日は無料で触れるようだ

[ストラテジー タイムチャート スタンダード](https://www.k-s-g.co.jp/product/timechart/)
- ストラテジー社が販売しているソフト
- 「Word、Excelなどにコピペして再編集や、内容を最新の状態へ更新するリンク機能にも対応」と書いてある
- これもプロ仕様ソフト
  - 価格は10,000円前後
  - ファイルの保存とかできないが無料で触ることはできるようだ


# まとめ

探した結果色々よさそうなのは見つけた
- 軽く見た感じ一長一短それぞれあるので、「これしかない！」と固定せずユースケースに合わせた方が良さそう
- 使い分けのイメージ
  - 0から自作する：drawio
  - 簡単に出力する：フリーで公開されているソフト
  - 厳密に作成する：プロ仕様のソフトウェア

プロ仕様のソフトを使ってみるという選択肢は、導入のコストが大きいと思われるので、慎重になる
- 試用版があるのでそこで試して判断するしかない


とりあえず以上。なにかの参考になれば。

# 最後に

「こんなソフトがある」等ががあればコメントにて教えていただけると助かります。
再帰とは

# 再帰とは
あるメソッド内で自身のメソッドを呼び出すことを再帰という。
## 例：1から10までを足した値を再帰を使って出力する処理
```java
public class java01 {

	public static void main(String[] args) {
		System.out.println(func(10));
		
	}
	
	static int func(int n) {
		if (n == 0) {
			return 0;
		}
		else {
			return n + func(n - 1);
		}
	}
}
```
## 処理の流れ
1.メインメソッドでfuncメソッドを呼び出す
2.メインメソッドから受け取った値をifで条件分岐
3.受け取った値は10なのでelseに入り、funcメソッドを10回呼び出す

```java
10 + func(10-1), 9 + func(9-1), 8 + func(8-1), 7 + func(7-1), 6 + func(6-1),
5 + func(5-1), 4 + func(4-1), 3 + func(3-1), 2 + func(2-1), 1 + func(1-1)
```
4.nが0になったタイミングで戻り値として0をfunc(1-1)に返す
5.以降は順番に足し算を行う
```java
1 + 0 = 1, 2 + 1 = 3, 3 + 3 = 6, 4 + 6 = 10, 5 + 10 = 15, 6 + 15 = 21, 7 + 21 = 28,
8 + 28 = 36, 9 + 36 = 45, 10 + 45 = 55,
```
6.nをメインメソッドに渡して処理終了
## 感想
仕組み自体はそこまで難しい印象は受けなかったがシンプルこれどこで使うん？
S3　一般の設定について

S3　設定値一覧
-------------------------

一般的な設定
-------------------------
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3146038/8bb00955-52dd-475d-9274-49f2c2370a88.png)
一般的な設定では、以下の設定があります
１．AWS リージョン
リージョン選定による考慮事項
・低レイテンシー対策でリージョンを選択するパターン
・BCP/DR対策で冗長性を確保するため、離れたリージョンを選択するパターン
・特定の法的要件や規制要件に応じて、リージョンを選択するパターン
・コストに応じてリージョンを選択するパターン
→今回作成するS3バケットはリージョン東京(ap-northeast-1)を選択


２．バケットタイプ
-------------------------
 〇汎用
　　・アクセス頻度の高いデータ向けの汎用ストレージ
　　・低レイテンシーかつ高スループットのパフォーマンス
　　・ストレージクラスにS3 Express One Zoneは含まれない 
  　　・AWSアカウントに付き、バケットは100個まで作成が可能
　　・可用性(99.99%)
  
  　〇ディレクトリ - 新規
　　・ストレージクラスは、S3 Express One Zoneのみ使用できる
　　・S3 Express One Zoneは、最も低レイテンシーだが、低レイテンシーを実現する方法として単一のAZ内で実装することにより、低レイテンシーを実現するため、複数のデバイスでデータを保存しない。よって、冗長性は確保できない。
   　　・AWSアカウントに最大10個のディレクトリバケットを作成できる
   　　・可用性(99.95%)

→今回バケットタイプは汎用を選択する

３．バケット名
-------------------------
汎用バケットの場合
　　・バケット名は 3～63 文字以内の長さである必要があります
　　・バケット名は、小文字、数字、ドット (.)、およびハイフン (-) のみで構成できます。
　　・バケット名は、文字または数字で開始および終了する必要があります。
　　・バケット名には、連続する 2 つのピリオドを含めることはできません。
　　・バケット名は IP アドレスの形式 (192.168.5.4 など) にはできません。
　　・バケット名のプレフィックスは xn-- で始まってはいけません。
　　・バケット名を、プレフィックス sthree- や sthree-configurator で始めることはできません。
　　・バケット名のサフィックスは -s3alias で終わってはいけません。
　　・バケット名のサフィックスは --ol-s3 で終わってはいけません。
　　・バケット名は、グローバルで一部のリージョンで一意の必要がある。一部とは標準リージョン、中国リージョン、米国リージョンが該当する
　　・Amazon S3 Transfer Acceleration で使用されるバケットの名前にドット (.) を付けることはできません。

ディレクトリの場合
  ・選択した AWS リージョン とアベイラビリティーゾーン内では一意であること。
　　・サフィックスを含めて 3～63 文字以内の長さであること。
　　・小文字の英文字、数字、およびハイフン (-) で構成されています。
　　・文字や数字で始まり、文字や数字で終わります。
　　・すべてのバケット名には、azid--x-s3 のサフィックスを含める必要があります。
　　・指定したベース名にサフィックスが追加されます。このサフィックスには、選択したアベイラビリティーゾーンのアベイラビリティーゾーン ID が含まれます。

→命名規則を考慮した上で汎用バケットを作成する

４．既存のバケットから設定をコピー - オプション
-------------------------
　　・S3バケットに(1000万個を超える)多数のオブジェクトがある場合は、S3 Batch Operationsが役立つ
   ・AWSアカウント間でオブジェクトをコピーするには、バケットにクロスアカウントの権限と、AWS Identity and Access Managementの設定を確認する必要がある
　　・AWS CLI Version2を使用してバケットのコピーも可能　　その際は、ロールにs3:GetObjectTagging、 s3:PutObjectTaggingの確認をする
  　・また、syncも可能

→既存バケットの設定のコピーは、この後実施する予定のため今回は使用しない

備考
-------------------------
ドキュメントみるだけで良かった気がしてならない


https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/directory-buckets-overview.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingBucket.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/bucketnamingrules.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/DataDurability.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/directory-buckets-overview.html
シンボリックリンクの基本的なところ

シンボリックリンクの基本

## 作成
```
ln -s
```

##参照
```
ls -l
```


## 削除
```
unlink (シンボリックリンク名)
```
シンボリックリンクの名前は、以下の画像の部分になる。
ls -lコマンドでシンボリックリンクの一覧を参照できるので、そこから対象のものを探す
![シンボリックリンク.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332453/55f735bf-bd73-b815-e10f-cd8713f28ff4.png)
PHPを(動的に)２０倍遅くする方法

## はじめに

運用環境で処理に遅延が発生した際、開発環境では再現が難しい場合があります。

そんなときに便利な、PHPやMySQL(MariaDB)をお手軽に遅くする方法です。

（Linux上で動作しているPHPを前提として書いてます）

## CPUクォータ を設定して遅くする

### PHP

下記コマンドでCPUの割り当てを「5%」に変更します。
（約1/20程度の速度になる)

```bash
# mpm_prefork の場合
$ sudo systemctl set-property --runtime httpd.service CPUQuota=5% 

# PHP-FPM 利用時
$ sudo systemctl set-property --runtime php-fpm.service CPUQuota=5%
```

* `--runtime`を指定しない場合は、設定が永続化されます
  (`--runtime`を付けた場合は、OSの再起動で設定がリセットされます)

### MySQL(MariaDB)

```bash
# MariaDB の場合
$ sudo systemctl set-property --runtime mariadb.service CPUQuota=5%

# MySQL の場合
$ sudo systemctl set-property --runtime mysqld.service CPUQuota=5%
```

### 戻し方

OSを再起動すれば元に戻ります。
もしくは`CPUQuota=100%`で上書きすることでも元に戻ります。


## 効果

Apacheのアクセスログで処理にかかった時間を計測
PHP、DB共にCPUQuota=5%とした場合、ちょうど20倍の時間がかかりました。

変更前
 * 平均: 180ms 
変更後
 * 平均: 3600ms

## ちょっと解説

systemdにコントロールグループ(cgroup)が組み込まれており、リソースを動的に変更する仕組みがあるためその機能を利用しています。

動的に変更した値は下記の手順で調べることができます。

```bash
systemctl show httpd | grep DropInPaths
DropInPaths=/run/systemd/system/httpd.service.d/50-CPUQuota.conf
```
`DropInPaths`はユニットファイルの設定を上書きするための値を記述したファイルのパス(スペース区切りで複数)


```bash
cat /run/systemd/system/httpd.service.d/50-CPUQuota.conf
[Service]
CPUQuota=5%
```
ファイルを開くと設定が記述されています。
`/run`は、tmpfs としてマウントされているため、再起動時に消えます(メモリ上に保持されるファイルシステム)


## ディスクIO帯域幅制限

ディスクIOを制限することもできます。
（ただし、DBにはバッファキャッシュやクエリキャッシュがあるので効果がまちまちでした）
 
```bash
# MariaDB の場合
$ sudo systemctl set-property --runtime mariadb.service BlockIOReadBandwidth="/dev/vda 100K"
```
`/dev/vda` の部分はマウントしているディスクのデバイス名を指定します。
100Kの部分はKB/sです。
環境により変わるため`lsblk`等で確認して設定してください。

```
lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  1024M  0 rom
vda    253:0    0   200G  0 disk
├─vda1 253:1    0     1M  0 part
├─vda2 253:2    0   500M  0 part /boot
├─vda3 253:3    0     4G  0 part [SWAP]
└─vda4 253:4    0 195.5G  0 part /
```

### 参考

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/resource_management_guide/index

[コマンドラインインターフェイスからのパラメーターの設定](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/resource_management_guide/sec-modifying_control_groups#sec-Setting_Parameters_from_the_Command-Line_Interface)
ネットワーク共有とインターネット接続

【ネットワークの共有とインターネット接続　～モバイル端末とクライアントPC～】

PCとモバイル端末でNWを共有し、インターネット接続する手順を確認しました。

手順
モバイル端末： 
１．ネットワークを切断（Wi-Fi、Bluetooth、モバイルデータ通信などすべてのNW）
２．ネットワーク共有の緊急リセット（個人情報リセット機能など、接続している他デバイスを切断する）
３．再度、ネットワーク接続（キャリア回線、またはWi-Fi　⇒この手順ではキャリア回線とする）
↓
クライアントPC：
４．ネットワークを切断
　（LANケーブル、Wi-Fi、Bluetooth、モバイルデータ通信などすべてのNW　⇒スタンドアロン化する）

モバイル端末：
５．ネットワーク共有の設定（USB接続を許可）、
６．モバイル端末とクライアントPCをUSBケーブルで接続（相互で許可する）

接続イメージ
クライアントPC ⇒ モバイル端末 ⇒ インターネット

以上です
------------------------------------------
エンジニアファーストの会社、助け合いの醸成、
株式会社CRE-CO　伊藤 俊広
https://www.cre-co.jp/
------------------------------------------
sd-webui-animatediffで高解像度・高フレームレートのクロマキーの動画を作成

# 記事の概要
Stable Diffusion Web UIでAnimateDiffを使ってクロマキー背景の動画を作成する手順を紹介します。
GeForce RTX 4090であれば、高解像度(896×1120)・高フレームレート(32)のアニメーションを作成することができます。



https://x.com/jun_kongo/status/1757006334866997553?s=20

また、動画でも手順を紹介しています。

https://youtu.be/0PHiCyQKQoA

# 環境
OS:Windows 11
GPU:GeForce RTX 4090
CPU:i9-13900KF
memory:64G
python:3.10.10
pytorch:2.0.1
CUDA:11.8
cuDNN:8.8

sd-webui:v1.7.0
sd-webui-animatediff:v1.13.0


# 環境構築
Stable Diffusion Web UIのインストール手順については割愛します。

### ライブラリのインストール
Stable Diffusion Web UIを起動後、「Extensions」タブから、以下のライブラリをインストールする。

■ABG_extension
https://github.com/KutsuyaYuki/ABG_extension.git

■sd-webui-animatediff
https://github.com/continue-revolution/sd-webui-animatediff.git

■deforum
https://github.com/deforum-art/sd-webui-deforum.git


### モーションモジュールのダウンロード

以下のページからモーションモジュールをダウンロードし、「stable-diffusion-webui¥extensions¥sd-webui-animatediff¥model」フォルダに格納する。

■v3以外のmotion module
https://civitai.com/models/108836/animatediff-motion-modules

■v3
https://aieasypic.com/inspire/models/detail/animatediff-motion-v3-282581

### 「--lowvram」の設定

「stable-diffusion-webui」フォルダに格納されている「webui-user.bat」を編集モードで開き、「set COMMANDLINE_ARGS」に「--lowvram」を追記する。
```
@echo off

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--xformers --lowvram
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6, max_split_size_mb:128

call webui.bat
```

# 画像生成

以下の値を設定し、「Generate」ボタンを押下する。

checkpoint：基本的には自由。（今回はmeinamixのDreamboothモデル）
タブ：txt2img（固定）
Sampling method：使っているcheckpointで決定する。（今回は「DPM++ 2M SDE Karras」を使う）
Sampling steps：使っているcheckpointで決定する。（今回は「20」）
Width：基本的には自由。（今回は「640」）
Height：基本的には自由。（今回は「800」）
Script：以下の状態にする。（色は黄緑色であればなんでもよい）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/bd00e615-ed8b-244b-dcf5-cba5f33ab26b.png)

# アニメーション生成

以下の値を設定し、「Generate」ボタンを押下する。

checkpoint：基本的には自由。（今回はmeinamixのDreamboothモデル）
タブ：img2img（固定）
画像：クロマキー背景の画像で、被写体の状態がわかりやすい画像
ポジティブプロンプト：「simple background」や「green background」を含めることで、背景を安定させる
ネガティブプロンプト：木や水、鞄、ガーターベルトなどの余計なものが描画される場合は、plant,grass,water,bag,garter beltなどを含めて、抑制する。
Sampling method：使っているcheckpointで決定する。（今回は「DPM++ 2M SDE Karras」を使う）
Sampling steps：使っているcheckpointで決定する。（今回は「20」）
Resize to/Resize by：どちらでも良いので、適切なサイズになるように設定する。（今回は「896×1120」となるように設定）
Denosing strength：0.8から0.88
Motion module：mm_sd_v14.ckpt
Enable AnimateDiff：チェックあり
Number of frames：168
FPS：32
Frame Interpolation：FILM
Interp X：4
Latent power：0.1
Optional latent power for last frame：0.1
last frame：インプットの画像と同じ画像

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/ef21705e-e548-7dec-171f-dd7307dd7e75.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/df191312-3076-f1b6-ac66-e35a866ae3d9.png)


GeForce RTX 4090でこの設定であれば、45分程度ぐらいで動画が作成されるはず。

# 補足

設定などを変更していないのに、PCが落ちるようになった場合に、以下の２点を試してください。
①PCの電源を落とし、PCから電源コードを抜いて、10分ほど放置する。（放電）
②checkpointを変更し、変更後のcheckpointで１度画像生成 or 動画生成をする。（キャッシュのリフレッシュ）
初めてOSSにコントリビュートしました

# はじめに
私はエンジニア3年目ですが、新卒でエンジニアになったときからいつかはOSSにコントリビュートしてみたいという目標がありました。

そしてついに、普段お世話になっているリポジトリや機能に対してコントリビュートできたので、その背景をまとめたいと思います。

# コントリビュートの内容
マージされたPRは、以下です。

https://github.com/composer/composer/pull/11816

リポジトリは、[Composer](https://getcomposer.org/)です。
PHPを使っている方ならお馴染みの、パッケージ管理ツールです。

モダンなPHP開発では、ほぼ必ず用いられるツールです。
筆者も業務でPHPとLaravelを使って開発をしていますが、毎日当たり前のようにComposerを使っています。

コントリビュートの内容は、テストコードの追加です。
self-updateコマンドという、Composer自身のバージョン管理を行えるコマンドがあるのですが、そのコマンドのテストケースをなにもない状態から作成しました。

カバレッジは、40%くらいまではもっていけました。
もう少しカバレッジを上げようとしたのですが、私の実力ではこれ以上やろうとすると結構時間がかかってしまいそうだったので、一区切りつけてPRを出しました。

# コントリビュートチャンスを見つけた方法
[Good First Issue](https://goodfirstissue.dev/)というサイトで見つけました。

OSS活動初心者向けという意味合いの```good first issue```というラベルがついたIssueの中で最近動きがあったものを言語ごとにまとめてくれているサイトです。

私はこのサイトを知ったのが2ヶ月前くらいなのですが、それから何日かに一回はこのサイトを見るようにしています。ある日、このIssueが掲載されているのを見つけました。

https://github.com/composer/composer/issues/10796

コマンド系のテストコードのカバレッジ全然足りてないから、どんどんテストコード書いてくれ！というIssueですね。

テストコードの追加なら、自分にもできそうだと思いました。
業務でもちょうどテストコードの導入に向けてPHPUnitを調査していたので、アウトプットしてみたいという気持ちもありました。

普段業務で頻繁に使っているself-updateコマンドにまだテストコードが存在しないことを知り、このコマンドのテストを書くことにしました。普段使っておりコマンドの挙動がわかっているため、テストも書きやすいのではないかと思いました。

# マージまで進んだ背景

テストコード自体は、仕事終わりに書き進めて、大体3日くらいで形になりました。
念入りにセルフチェックをして、 PRを出しました。PR出すときはほんとに緊張しました、、。

2週間ほどして、2つ指摘をいただきました。
1つ目の指摘は、PHPUnitの[data providor](https://docs.phpunit.de/en/11.0/writing-tests-for-phpunit.html#data-providers)を使ったほうがきれいに書けるよというものでした。おっしゃる通りです、、。
![Screenshot 2024-02-24 at 19.33.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447035/d48fdf50-c352-30a0-6c3c-c2d0e0c9c3b9.png)

2つ目の指摘は、どのファイルにも書く定型文をちゃんと書いておいてねーというものでした。見逃していた、、。すみません。
![Screenshot 2024-02-24 at 19.33.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447035/6d6c8f44-8b44-3c33-c8da-c826e05cb4c0.png)

修正をしてから、マージしていただきました。PRを出してからマージまで、待ちの時間込みで約1ヶ月でした。

# おわりに
エンジニアとして一つ目標としていたことが達成できて、素直に嬉しいです。
自分の書いたコードは少しとはいえ、Composerの一部として全世界のPHP開発者の元に行き届くと思うとちょっとだけ誇らしくなります。

また、最近Composerは[大規模な脆弱性のパッチ対応](https://github.com/composer/composer/security/advisories/GHSA-7c6p-848j-wh5h)が行われました。
その対応としてComposerのバージョンアップを行う際、self-updateコマンドは結構世界中で叩かれることになるコマンドだと思います。その動作安定性向上に少しでも寄与できたのかなと思うと、やってよかったなと思いました。

[Good First Issue](https://goodfirstissue.dev/)のサイトは、OSS活動に興味がある人にとてもおすすめです。
対応できそうなIssueがないか、これからも定期的にチェックしていきたいと思います。
Setting the Stage for Entrepreneurship in 2024

The winds of change are blowing as we embark on a new year full of possibilities. 2024 represents a pivotal moment to take the entrepreneurial plunge, with emerging technologies, sustainable priorities, and evolving consumer behaviors reshaping industries across the board. Though the terrain may <a href"https://8171ehsaasprogram.com">seem</a> daunting, the potential rewards make it all worthwhile.
This blog serves as your entrepreneurial roadmap in 2024 - highlighting key market trends, legal considerations, funding strategies, location factors, business planning essentials, and proven methods to launch a thriving startup poised for growth. We’ll traverse the winding path from ideation to execution, ensuring you avoid pitfalls and set your venture up for success.
Whether you aim to bring an innovative product to market, tap into flourishing niches, or address unmet consumer needs, the stage is set for a new generation of entrepreneurship this year. Let the journey begin!
The Allure of Starting a Business in the United States
The <a href "https://8171ehsaasprogram.com">American</a> entrepreneurial spirit has long spawned trailblazing companies that shape the business landscape. With abundant resources, diverse demographics, robust infrastructure and access to capital, the US fosters an ecosystem where startups can spread their wings.
What factors drive people to launch ventures stateside?
The US <a href"https://picmoross.com">enjoys</a>  a culture of encouraging innovation, risk-taking, and personal initiative – ideal ingredients for startups. Tax incentives, incubators nurturing disruptive ideas at universities, flexible labor laws and access to global talent pools incentivize entrepreneurship. The sheer size of the American consumer market, exposure to diverse customer preferences through immigration, and world-class communication & transport networks prime startups to scale rapidly. Increasing support for traditionally marginalized groups, through policies promoting minority & women-led entrepreneurship, unlocks untapped potential. Though daunting healthcare costs and regulatory complexity persists, the American playground allows entrepreneurs to dream big.
Identifying Emerging Industries
Where are the white spaces ripe for the taking in 2024? Let’s scan the technological and sustainable frontiers.
Technological Innovations: A Prime Frontier
The possibilities spawn endless as emerging technologies catalyze startup ideas seeking to push boundaries. Fields like artificial intelligence, augmented reality, blockchain, 5G connectivity, precision medicine and additive manufacturing appear poised to transform every sector.
Consider edtech. AI-driven adaptive learning platforms using neuroscience to personalize education address limitations with the “one size fits all” schooling model. Augmented textbooks allow 3D visualizations so students can manipulate models by hand. Blockchain facilitates issuing tamper-proof educational credentials. Technology, when harnessed effectively, empowers startups to customize learning and thus stretch the realm of human potential.
![Something went wrong]()
実は衝撃的に簡単だった Stable Diffusion の使い方

Stable Diffusionといえば文章から画像を生成するAIで、
**なんか難しそう**というイメージが僕にはあった。
名前からして複雑そうだし（安定拡散モデル）、綺麗な画像を生成している猛者はなんかめっちゃハックし倒してるイメージがあるし、WebUIもセットアップが大変そうである。
モデルも色々あってどれを使えばいいのか頭がクラクラしてくる。
というので１年ぐらいビビっていたのだが、

**なんのことはない簡単である**
pythonが使えれば簡単に使える。

これはガチ。
ということで感動的にシンプルなコードでの使い方。

# シンプルな使い方

### diffusersをインストール

```shell
pip install diffusers
```

### チェックポイントを見つける

Web上からモデルのチェックポイントをダウンロードしてくる。
拡張子が.safetensorsとか.ckptになっている数GBあるファイルである。

[HugginFace Model Hub](https://huggingface.co/models?other=stable-diffusion)
とか、チェックポイントがアップされているWEBページはいくつかある。

せっかくなので、一般的なStableDiffusionのチェックポイントではなく、
例としてアニメに特化したデータでトレーニングしたチェックポイントを使ってみる。

https://huggingface.co/cagliostrolab/animagine-xl-3.0/tree/main


### pipelineの初期化

チェックポイントファイルを渡して初期化する。

```python
from diffusers import StableDiffusionXLPipeline

pipe = StableDiffusionXLPipeline.from_single_file("animagine-xl-3.0.safetensors")
```

### 実行

```
image = pipe('a machine learning boy').image[0]
image.save('mlboy.png')
```


![boy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/70f754ff-39c4-2c8d-f41e-e9f6ef4c4ee5.png)


いわゆるひとつの**これだけ**である。

```
a boy, in the snow
```

![boy_snow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/038bf326-d00a-f271-0053-bb3bee3404c7.png)


StableDiffusionにはxlという大きいモデルと普通のStableDiffusionがあって、上記の例はxlの方である。
普通のStableDiffusionのチェックポイントを使いたい時はStableDiffusionPipelineを同様の使い方で使える。

あと、リポジトリの名前からpipelineを作れる

```python
DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1")
```    

というのもある。けどチェックポイントから初期化した方が簡単じゃない？と僕は思うんですけどどうでしょう。
色々使い方あるみたいだけどとりあえず。

🐣
****
フリーランスエンジニアです。
AIについて色々記事を書いていますのでよかったらプロフィールを見てみてください。

もし以下のようなご要望をお持ちでしたらお気軽にご相談ください。
AIサービスを開発したい、ビジネスにAIを組み込んで効率化したい、AIを使ったスマホアプリを開発したい、
ARを使ったアプリケーションを作りたい、スマホアプリを作りたいけどどこに相談したらいいかわからない…

いずれも中間コストを省いたリーズナブルな価格でお請けできます。

お仕事のご相談はこちらまで
rockyshikoku@gmail.com

機械学習やAR技術を使ったアプリケーションを作っています。
機械学習／AR関連の情報を発信しています。
自前Wordpressサーバの移行(RaspberryPi)

ラズパイ5が新しく発売されたので，ラズパイ3B+で運用していたwordpressを新しいラズパイに移行する手順を記録しています．既にラズパイサーバを構築した人向けの記事なのでOSを入れるところはスキップします．基本的なことも含まれているので，必要なところだけ見てください．

## 以前のラズパイからデータを取り出す

好きなツールを使ってwordpressフォルダー全体とsqlを取り出します．
今回はwordpressのプラグインであるBackWpupを使用しました．取り出したデータは新しいラズパイにアップロードしておきます．


以降は新しいラズパイでの作業です．

## ssh周りの設定

sshの設定をします．

```
sudo vim /etc/ssh/sshd_config
```

webサーバとして使用するので，Portは22番以外に設定しましょう(著者はセキュリティに詳しいわけではないです)．今回は公開鍵認証ですので，パスワード認証もオフにしておきます．
```
PermitRootLogin no
Port (好きなポート番号)
PasswordAuthentication no
```
sshの設定を反映するためにサービスを再起動します．ポートを変更した場合は次から接続できないということがないように覚えておきましょう．
```
sudo service ssh restart
```

## ファイアウォールの設定

公開サーバですので，ファイアウォールの設定が必要な場合は設定します．お好きなもので大丈夫ですが，今回はiptablesを使用します．iptablesは再起動すると消えてしまうので，iptables-persistentも入れます．

```
sudo apt-get install iptables iptables-persistent
```

設定は公開できないので以下の記事とかを参考にしながら設定してください．

https://www.thun-techblog.com/index.php/blog/raspberry-pi-security-ssh-iptables-for-web/

## PHP, apache，データベース(MariaDB)の導入

そのままです．データベースは人によって違うと思いますので，好きなものを入れてください．phpのバージョンは当時のものですので，適宜変更してください．

```
sudo apt-get install apache2
sudo apt-get install -y php mariadb-server
sudo apt-get install -y php8.2-xml php8.2-gd php8.2-curl php8.2-dom php8.2-mbstring php8.2-zip php8.2-imagick php8.2-mysqlnd php-apc
```

Apacheのセキュリティ設定を少し変更します．デフォルトではApacheのバージョン等が全部外部から見えてしまうので，以下を変更します．

```
sudo vim /etc/apache2/conf-available/security.conf
```

```
ServerToknes Prod # もともとはFull
```
設定を変えたらサービスを再起動します．

```
sudo service apache2 restart
```

## データベースの初期設定

(後から書いているので間違っている可能性あり)

```
sudo mysql -u root -p
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';
GRANT ALL on wordpress.* TO 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';
```

データベースを移行します．前のデータベースは/tmp/wordpress.sqlにあるとします．
```
mysql -u ユーザー名 -p wordpress < /tmp/wordpress.sql
```

## Wordpressの移行

以前のWordpressのデータを解凍して/var/www/htmlの中にコピーします．
先ほど作ったデータベースの名前，ユーザ名，パスワードが以前から変わっていればconfigを変更しておきます．

```
sudo vim /var/www/html/wp-config.php
```

## DDNSの設定

今回はcloudflareとddclientでDDNS化します．cloudflare以外の方が別の記事を参考にして設定してください．ddclientはインストール時に色々情報の入力を求められるので適当なものを選択します．わからなければ適当に設定して後で変更しましょう．

```
sudo apt install ddclient
sudo vim /etc/ddclient.conf
```

中身を変更します．
```
ssl=yes \
protocol=cloudflare \
use=web, web=https://api.ipify.org/ \
login=(cloudflareのメールアドレス)
zone=(ドメイン)
password='(cloudflareのAPIキー)'
(ドメイン名)
```
以下を実行してエラーがでなければ設定完了です．
```
sudo ddclient -v -daemon=0
```
エラーがなければ自動実行されるようにスケジューリングしておきます．
```
sudo crontab -e
```

設定は好きなようにしてください．自分は1時間ごとに更新するように設定しています．
```
0 * * * * sudo ddclient
```

## SSL設定

今回はlet's encryptで証明書を発行します．
設定の中身は以下の通りですので，参考にしてください．

https://qiita.com/HO_Pollyanna/items/aee45b25e2318d39157b

たぶんここまでできると無事wordpressにアクセスできていると思います．

## パーミッション周り

上記までではプラグイン等を入れようとするとFTPがなんとかというエラーがでます．パーミッション周りの設定が原因ですので直します．

```
sudo chown -R www-data:www-data /var/www/html
```
たぶんこれで大丈夫ですが，無理そうなら以前のラズパイのパーミッション設定を参考に変更してください．


## さいごに

以上で移行完了です．お疲れ様でした．さすがにラズパイ3から5への変更はレスポンスに結構違いがありますね．
Qiita

初めまして！梨奈と申します
24歳です。

新卒入社で、1年8カ月勤めた
ドラッグストア正社員を結婚の為、
県外移動広島→茨城となり、
2023年1月中旬で離職し、

キャリアチェンジとして前から興味があった
itエンジニアを目指しております！

現在は4月から合格すれば訓練校に通い、
7月末に終わるので、在所中か8月から
働き始めたいと思います！

その為に、現在は転職活動の準備として
エージェント相談、素材集め
そして、資格取得（ITパスポート→基本情報→応用情報）
少なからずITパスポートは訓練校入る前に
取得して、基本情報は在所中に取ります！

現段階では、web系エンジニア方面を
目指してます！

•　更に、現在HTML&CSSを勉強しており、
Java Script、ポートフォリオの作成

•　その他知っておくべき言語とスキルに触れること

• 英語学習も数分でも良いから進める。

• 啓発本、勉強本、為になる本は疲れた時に目を通す。

など、自分に目標を決めて、目の前の事に集中して勉強を進めていきます！

未経験エンジニアの方、駆け出しエンジニアの方、現役エンジニアの方色々教えてくださると幸いです。

よろしくお願いします！

人に料理を作るのが好きで、
結婚してからは頻繁に作っています。
息抜きになるので、とても楽しいです。

現在勉強集中してできてます！
頑張ります！
![D43214F4-C8AC-4203-88B2-23913E326813.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3722116/2a8f15ce-fd4b-e668-fed4-60dd06126297.jpeg)

梨奈
Connect RPC

Protocol Buffersとは、データをシリアライズするためのメカニズムである。

> Protocol Buffers are language-neutral, platform-neutral extensible mechanisms for serializing structured data.

https://protobuf.dev/

## Relationship between Protocol and Content-Type
grpc
- `application/grpc`
- `application/grpc+proto`
- `application/grpc+json`

grpc-web
- `application/grpc-web`
- `application/grpc-web+proto`
- `application/grpc-web+json`

connect
- `application/proto` (for unary RPCs)
- `application/json` (for unary RPCs)
- `application/connect+proto` (for streaming)
- `application/connect+json` (for streaming)

https://connectrpc.com/docs/multi-protocol

gRPCでもJSONを使用できる。

https://qiita.com/yugui/items/238dcdb75cd40d0f1ece
Laravel用ファイルライブラリの作成


## はじめに

今回，Laravel用のファイルライブラリを作成しました。
このライブラリは，ファイルのアップロード，表示，編集，削除を行うことができます。

本ライブラリの他に，

- Laravel-medialibrary
- laravel-filemanager

等があるようです。

https://qiita.com/MINORI_Ta/items/7d40329590efb053b14a

https://unisharp.github.io/laravel-filemanager/

これらのライブラリも素晴らしいものですが，少しばかり高機能なように感じました。
自分があったらいいなと思うファイルライブラリはWordPressのメディアライブラリのようなものです。
そのため，今回は，ファイルのアップロード，表示，編集，削除の機能を持つファイルライブラリを作成しました。

## ファイルライブラリの目標

ファイルライブラリを作成するにあたって以下を目標とします。

1. 機能感はWordPressのメディアライブラリに近い
2. 特に設定をしなくても使える
   1. アップロードしたファイルの一覧等をデフォルトで表示できる
   2. ファイルのアップロードフォームをデフォルトで使用できる
3. ファイルのアップロードや情報の取得，編集をAPIを通じて行うことができる
4. ファイルのアップロードや情報の取得，編集をインスタンスで行うことができる

:::note
現在は，1，2の目標を達成しています。
:::

## 作成したファイルライブラリ

リポジトリは以下のGitHubにあります。

https://github.com/ikepu-tp/laravel-file-library

また，Packagistにも登録しています。

https://packagist.org/packages/ikepu-tp/laravel-file-library

## 使い方

### インストール

```bash
composer require ikepu-tp/larave-file-library
```

### 設定等のpublish

```bash
php artisan vendor:publish --provider="ikepu_tp\FileLibrary\FileLibraryServiceProvider"
```

### ルーティング

| HTTPメソッド | URI                     | アクション | ルート名             | 簡単な説明                                                   |
| ------------ | ----------------------- | ---------- | -------------------- | ------------------------------------------------------------ |
| GET          | /file/lib               | index      | file-library.index   | ファイルライブラリの一覧を表示します。                       |
| GET          | /file/lib/create        | create     | file-library.create  | 新しいファイルをアップロードするためのフォームを表示します。 |
| POST         | /file/lib               | store      | file-library.store   | ファイルをアップロードします。                               |
| GET          | /file/lib/{fileId}      | show       | file-library.show    | 特定のファイルの詳細を表示します。                           |
| GET          | /file/lib/{fileId}/edit | edit       | file-library.edit    | 特定のファイルの編集フォームを表示します。                   |
| PUT/PATCH    | /file/lib/{fileId}      | update     | file-library.update  | 特定のファイルを更新します。                                 |
| DELETE       | /file/lib/{fileId}      | destroy    | file-library.destroy | 特定のファイルを削除します。                                 |

:::note
`{fileId}` はUUIDです。
:::

#### ファイルのアップロード

```bash
POST http://your-project.com/file/lib
```

| Key   | Type               | Accepted Values | Required |
| ----- | ------------------ | --------------- | -------- |
| files | Array<int, File>   |                 | Y        |
| names | Array<int, string> | max length: 250 | Y        |

#### ファイルの編集

```bash
PUT http://your-project.com/file/lib/{fileId}
```

| Key  | Type   | Accepted Values | Required |
| ---- | ------ | --------------- | -------- |
| name | string | max length: 250 | Y        |

## 今後の機能追加等

まずは目標の3と4を達成することを目指します。
その次に，どういったものを追加するかは，使っている方の要望を聞きながら進めていきたいと思います。
また，Google Classroomのようにファイル選択フォームの追加もいいかもしれないとも考えています。
ただ，高機能になればなるほど既存ライブラリに近づいてしまうのであくまでもシンプルにデフォルトから使えるようにしていきたいと思います。
何か機能の提案等があれば，コメントやGitHubのIssueに投稿していただけると嬉しいです！！
「技術書」の読書術 読後メモ

# 「技術書の読書術」読書メモ

## 構成

この本は、技術書を読むときに役立つノウハウを紹介しています。大きく分けて、以下の3つのテーマに沿って進みます。

- 本の選び方
- 本の読み方
- アウトプット(情報発信・共有)

### 本の選び方

本の選び方は、自分のレベルに合った本を選ぶことが重要です。しかし、自分に合った本を見つけるのは簡単ではありません。なぜなら、人によって、その時のスキルによって、時代によって最適な本は変わるからです。

そこで、本の選び方のソリューションとして、以下の4つの方法を紹介しています。

- 著者で選ぶ
  - 信頼できる著者や好きな著者の本を選ぶと、読みやすくて内容も充実していることが多いです。
- 出版社やシリーズで選ぶ
  - 出版社やシリーズによっては、一定の品質や方針が保たれていることがあります。例えば、O’Reillyや技術評論社などは、技術書の出版に定評があります。
- ランキングを活用する
  - ランキングは、多くの人が読んでいる本や評価の高い本を知ることができます。例えば、Amazonや楽天などのオンライン書店のランキングや、技術書典などのイベントのランキングなどが参考になります。
- レビューや書評を見る
  - レビューや書評は、本の内容や感想を知ることができます。例えば、ブログやSNSなどで書かれたレビューや書評や、書籍紹介サイトなどが参考になります。

### 本の読み方

本の読み方は、読書管理アプリを利用することや、その本を読む目的を決めることなどが効果的です。具体的には、以下の4つのポイントを押さえています。

- 読書管理アプリを利用する
  - 読書管理アプリを利用すると、自分がどんな本を読んでどんな感想を持ったかを記録することができます。また、進捗を数値化できるので、目標設定を設けやすく、モチベーションの維持につながります。例えば、読書メーターやブクログなどが有名な読書管理アプリです。
- その本を読む目的を決める
  - その本を読む目的を決めると、本を読むことに集中しすぎて目的を忘れることを防げます。また、目的となる部分だけをつまんで読むこともできるので、効率的に読むことができます。例えば、直近の仕事で使うこの分野の概念を理解するという目的を持つと、その分野に関する本を選びやすくなります。
- 同じ本を何度も読む
  - 同じ本を何度も読むと、理解が深まります。1度目はざっと目を通すように読み、2度目は実際に手を動かして理解し、3度目はノートにまとめながら読むという方法がおすすめです。
- 全部読む必要はない
  - 全部読む必要はないということを覚えておくと、本を読むことにストレスを感じなくなります。その本の中で特に重要な部分は全体の20%かもしれません。残りの80%は基礎的なことだったり逆にかなり深い専門的なことだったりするかもしれません。適宜読み飛ばすことも大切です。

### アウトプット(情報発信・共有)

アウトプットは、間違いに気づくために必要です。本の内容を誤って解釈していても自分だけでは気づけないことがあります。アウトプットすることでフィードバックを得られるので、間違いを修正することができます。むしろアウトプットしないと間違いに気づけないこともあります。

アウトプットの方法としては、以下の3つが挙げられます。

- 講演(LTでもOK)
  - 講演は、自分の読んだ本の内容や感想を人に伝えることができます。LT(ライトニングトーク)という短い時間で発表する形式もあります。講演することで、自分の理解を確認したり、聴衆からの質問や意見を聞いたりできます。
- ブログに書く
  - ブログに書くと、自分の読んだ本の内容や感想を文章にまとめることができます。文章にすることで、自分の考えを整理したり、読者からのコメントや反応を得たりできます。
- 人に説明やアドバイスをする
  - 人に説明やアドバイスをすると、自分の読んだ本の内容や感想を言葉にすることができます。言葉にすることで、自分の理解を深めたり、相手の反応や質問を見たりできます。

アウトプットの結果を気にしないことも大切です。アウトプットをすると、評価されないことや批判されることもあります。しかし、それは自分の成長のために必要なことです。多くのアウトプットを残すことで、自分の読書の軌跡を残すことができます。

## ピックアップ(個人的に琴線に触れた部分)

### 本を読む目的

本を読む目的は、体系的な知識を得るためです。現代ではネットを調べればいろんな情報に無料で素早くアクセスすることができますが、本ならではのメリットとしては体系的な知識を得ることができる点にあります。必要な知識を順序立てて解説してくれていることが多いです。ネットで得られる情報は断片的で、信頼性や正確性にも疑問が残ります。本を読むことで、より深く理解できるということです。

### 特定のテーマに絞って3冊の本を読む

あるテーマを調べるときに、3冊の本を読むという方法が効果的です。1冊、2冊だけでは表面的な理解にとどまってしまうことが多いです。

3冊まで読めれば、それぞれ重複する部分があればそこが重要なポイントだと気づけるし、知識を発展させることもできます。入門書・専門書・逆引きのような3冊を選ぶと良いです。

### **読書は最大の自己投資**:

読書は生涯にわたって成長に貢献してくれます。読書習慣を身につけられれば、一生趣味を読書とし学習を続けていくことができます。読書からは論理的思考力、発想力、柔軟性など様々な能力を身につけることが期待できます。ほとんどの悩みはすでに他人が経験し本として著していることが多く、自らの人生の悩みを解決できる可能性があります。

### 終わりに
こちらの記事は以下の通り生成AIに書いてもらいました。
興味あれば参照してみてください。
https://qiita.com/Annoske/items/c0ceb8d2796275255593
Grassmann 多様体

# Grassmann多様体とは
$m>n$なる2つの自然数$m,n$に対して$m$次元実ベクトル空間$\mathbb{R}^m$の中の$n$次元線形部分空間全体のなす空間を${G}(m,n)$と書いて、(実)Grassmann多様体と呼ぶ。

一般に${G}(m,n) \approx {G}(m,m-n)$が成り立つ。

## G(2,1)

$\mathbb{R}^2$の中の$1$次元部分空間は、原点を通る傾き$\theta~(- \infty \leq \theta \leq \infty)$の直線で表され、傾き$\infty$の直線と$- \infty$の直線は$y$軸であるから同じものである。よって$G(2,1)$は$\infty$と$- \infty$を同一視した数直線に等しく、$S^1$と同相である。

## pymanoptを使ったコードの例

```python:
import numpy as np
import matplotlib.pyplot as plt
from pymanopt.manifolds import Grassmann

# グラスマン多様体の定義
manifold = Grassmann(2, 1)

# ランダムなベクトルを4つ生成
vectors = []
for _ in range(4):
    v = np.random.randn(2)
    v /= np.linalg.norm(v)  # 正規化
    vectors.append(v)

# 1次元部分空間を可視化するための直線を作成
t = np.linspace(-10, 10, 100)

# グラフで表示
plt.figure(figsize=(8, 6))
for i, v in enumerate(vectors):
    line = np.outer(v, t)
    plt.plot(line[0], line[1], label=f"Subspace {i+1}")

plt.xlabel("X")
plt.ylabel("Y")
plt.title("Visualization of Four 1D Subspaces in Grassmann(2, 1)")
plt.grid(True)
plt.axis("equal")
plt.legend()
plt.show()

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359600/5afa5d25-7983-3a4d-be20-fdd14240b53d.png)


## G(3,1)

$\mathbb{R}^3$の中の原点を通る直線には、$S^2$との交点を対応させることができる。$S^2$との交点は$S^2$の対心点であるので、$G(3,1)$は$S^2$の対心点を同一視したもの、すなわち$\mathrm{\mathbb{R}P}^{2}$である。

## G(m,1)

一般に${G}(m,1) \approx \mathrm{\mathbb{R}P}^{m-1}$が成り立つ。
Windows 便利なショートカットキー (+ PowerShell関連のTips) 

私のような非ITの非エンジニアの方々の場合、プログラミングを覚えるのも普段の業務効率化の手段だとは思いますが、ショートカットキーを多用してPCを操作するのも効果的だと思います。
PowerShellと直接は関係無いですが、各種操作するときに覚えておくと結果開発時間短縮につながるものもあり、また私の過去記事とも絡めて書いたりするので、一応PowerShellのタグ付けておきました。

というわけで私もそこそこショートカットキーを使ってPCを操作する方なんじゃないかと自分では思っているので(あくまで自称)、議論しつくされた話題ではあるのはわかりつつ私の言葉で便利なショートカットキーでも紹介してみようと思い書きました。需要が多いかは知りませんが、無くはないかなと思ってます。

なお最初に述べますが、あくまで私が覚えているキーで汎用性が高いものを羅列していく記事なので、特にショートカットキーの書籍等を参考にしているわけではないのでそこだけ先に連絡です(著作権的な配慮)。私は基本マイクロソフト公式のページを見て覚えました。

あと私的なショートカットキーを覚えるコツはシンプルに<INS><b>「打つこと」</b></INS>で、イメージではスポーツと同じでひたすら打ってるとだんだん慣れてきて、繰り返しているうちに思った瞬間にキーが打てる状態になる、という感じなので、特に覚え方にテクニックはありません。

まずは普段よく使うエクスプローラからにします。
なお私も全てを知っているわけではなく別にドヤってるわけではないので、「これも便利だよ」とかあれば教えてください！

# はじめに： ショートカットキーの削減効果
下記リンクの記事の著者によると「60個覚えると年間120時間の削減につながる」というくらいらしいです。
120時間って結構な時間ですし、もっと覚えるともっと削減効果高いということです。
結構ありますよね。こういう具体的な効果が覚えるモチベーションになると思うので掲載させて頂きました。

https://diamond.jp/articles/-/243597

# 1. Windowsキー + E ：エクスプローラを開く
最も基本的な操作だと思います。これしらないとフォルダのショートカットをタスクバーに登録したりデスクトップに登録したりする必要あって画面がゴチャつきがちですよね。

# 2. Ctrl + W : エクスプローラを閉じる
開くの覚えたら閉じるのも必要ですよね。
ちなみにエクスプローラ選択時ならAlt + F4でも閉じられます。

# 3. Tab (+ Shift) : カーソルのペイン移動
エクスプローラの画面って左にフォルダのツリー、右側にフォルダの中身が出る画面構成だと思うんですが、その区分を"ペイン"と呼び、選択しているペインを移動するのがTabキーです。カーソル動かすのは方向キーでOK。
Shift押しながら操作するとか移動するペインの順番が逆になります。
エクスプローラに限らずTabキーはこういう機能あるので割とどこでも使えるキーだと思います。

# 4. backspace ： 戻る
方向キーでファイル選んでEnterで選択、で深い階層に潜っていきますが、前の画面に戻りたい場合はBackspaceでOKです。ちなみにAlt + ←でも同じことできます。
テキスト編集の感覚だと「ファイルが削除されるのでは」、と不安になるかもですが気にしなくて大丈夫です。

# 5. Alt + ↑ : 上の階層に戻る
「戻る」とこれは別の操作です。戻るは本当に前の画面(上層とは限らない)に戻るだけですが、この操作では上層に戻ります。
ショートカットで飛んだフォルダの上の階層に行く、という場合には「戻る」じゃなくてこれ使うと行けます。

# 6. F2 : ファイル名の変更
ファイル選択時に有効。ファイル名変えるとき、マウスだとちょっと時間かかるのでめんどくさいですが、F2だと一発なのでストレスフリーです。

# 7: Shift + F10
ファイル選択時に有効。右クリックで表示できるメニューが表示されます。

# 8: Ctrl + Shift + N : 新規フォルダの作成
これも押すだけで一発で新規フォルダ作れるんで便利です。

# 9: Ctrl + F : ファイル検索
現在選択している階層より下層からファイル探す際に、検索ボックスにカーソルを動かすキー。検索に有効なキーワードを覚えておいて、かつ普段のからファイル名を検索に引っかかりやすい命名規則にしておくと活用しやすいえす。

# 10: Alt + D: アドレスバー選択
下記記事でも解説済。パスをコピーしたり、PowerShellをはじめとする各種ソフトが起動できます。"PowerShell"以外でも私は"notepad"でメモ帳開くときも多いです。

https://qiita.com/_Sasaki_/items/96be8912b573ccfde78b

# 11: Alt + Enter : プロパティを開く
ファイルのプロパティが開けます。下記記事で解説してる.ps1ファイルをダブルクリックで起動するための設定とかやるときにちょっと楽になります。

https://qiita.com/_Sasaki_/items/c8486e58df45333017d7

# 12: Ctrl + Enter: 選択したフォルダを別Windowsで開く
色々資料探してる時に、今選択しているフォルダを別ウィンドウで開いて、で元々のウィンドウで別の階層に行きたい、というときに便利。いちいちWinキー + Eでエクスプローラを開く手間を減らせます。

# 13: Ctrl + Shift + 6 : リスト表示
ファイルをList表示したいときに押す。変にアイコン表示になってて見にくいな…というときに便利

# 14: Ctrl + Shft + 1 : 大きなアイコン表示
ひとつ前のとは逆に、写真とか画像をいちいち開かず、エクスプローラ上で内容を確認したい、というときに便利。


# おわりに
とりあえず思いついたのをザッと書くとこれくらいでした。これでPowerShellの開発スピード、及び普段の業務のスピードが改善されれば幸いです。
なお繰り返しですが、私も全てを知っているわけではなく別にドヤってるわけではないので、「これも便利だよ」とかあれば教えてください！
【2024年02月版】開発者 学習ロードマップ 確認シート 【初学者向け】

# はじめに

学習ロードマップと確認用シートです。
ダニング=クルーガー効果を考慮しています。
ロードマップ中の、自分の現在位置を確認する使用方法を想定しています。

[Developer Roadmaps](https://roadmap.sh/) を元に作成しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/8b9669f9-5943-6a95-62e2-aaad04f20a61.png)

:::note info
Roadmap.shは、開発者が学習とキャリアの進行をナビゲートするためのロードマップ、ガイド、記事を提供するウェブサイトです。フロントエンド、バックエンド、デヴオプスなどの役割ベースのロードマップや、特定の技術や言語に焦点を当てたスキルベースのロードマップがあります。開発者が選んだ専門分野に必要なスキルや知識を段階的に習得するための道筋を示すことを目的としています。
:::

:::note warn
日本語訳は私の個人的なものです。中学生レベル程度です。
:::

# ロードマップとは

IT分野におけるロードマップは、特定の技術や職種に必要なスキル、知識、ツールを段階的に身につけるための指針です。
初心者から上級者までの学習プロセスを体系的に示し、目指すキャリアパスに沿った学習目標と到達点を明確にします。
例えば、フロントエンド開発者になるためのロードマップでは、HTML、CSS、JavaScriptの基礎から始まり、フレームワークやライブラリの習得、パフォーマンス最適化やセキュリティ対策など、より高度なトピックまでを含みます。

以下は、[DevOps Roadmap](https://roadmap.sh/devops) の抜粋です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/884ccf00-36f7-2dcc-ad59-402dabab011d.png)

# ダニング=クルーガー効果とは

簡単に言うと
ある程度学習をすると、「愚者の山」 = 「完全に理解した」、
さらに学習を続けると周辺視野が広がり、「絶望の谷」 = 「何もわからない」、
さらに学習を続けると、「啓蒙の坂」 = 「チョットワカル」、となる現象のことです。

ダニング=クルーガー効果は、能力が低い人ほど自分の能力を過大評価し、逆に能力が高い人は自分の能力を過小評価する傾向があるという心理学の現象です。
この効果は、自己認識の歪みから生じ、能力が低い人は自分の不足を認識するのに必要なスキルが欠けているため、自分がより有能であると誤信しやすい現象です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/a9e6a593-6bdb-5d95-a65e-b249a5ced84e.png)

このグラフはダニング=クルーガー効果を示しています。
能力が低い初期段階では、自己評価が非常に高い（「Mount Stupid」、つまり「愚者の山」）ことが分かります。
この段階では、実際の能力との間に大きなギャップが存在します。
能力が徐々に向上するにつれて、自己認識も改善され、自己評価は下がり、「Valley of Despair」（「絶望の谷」）に到達します。
その後、経験と知識がさらに増えることで、自己評価は徐々に現実的なレベルに戻り、「Slope of Enlightenment」（「啓蒙の坂」）へと進みます。
グラフに示された「Awareness Threshold」（「認識の閾値」）は、人が自己認識を改善し始める転換点を表しています。

# 学習ロードマップ　確認シートとは

ロードマップの学習目標毎に、どこまで学習できているのかを、以下の視点から確認します。

- 聞いたことがある
- 触ったことがある
- 完全に理解した（愚者の山）
- 何もわからない（絶望の谷）
- チョットワカル（啓蒙の坂）

# 確認シート

ロードマップごとに記事を分けています。

- [【2024年02月版】フロントエンド開発者 学習ロードマップ 確認シート 【チョットワカル】](https://qiita.com/nouernet/items/40fc5aba7fbe614bc3f3)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/c2439842-5980-5104-7a4f-6281ad751968.png)

- [【2024年02月版】バックエンド開発者 学習ロードマップ 確認シート 【チョットワカル】](https://qiita.com/nouernet/items/1e871eba8e0e55e17647)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/5eb8cdb7-3623-e673-e71c-2873a149d743.png)

- [【2024年02月版】DevOps 学習ロードマップ 確認シート 【チョットワカル】](https://qiita.com/nouernet/items/71a8892caa0e4249adc2)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/884ccf00-36f7-2dcc-ad59-402dabab011d.png)

# 関連リンク

- [Developer Roadmaps](https://roadmap.sh/)
- [Backend Developer Roadmap](https://roadmap.sh/backend)
- [Frontend Developer Roadmap](https://roadmap.sh/frontend)
- [DevOps Roadmap](https://roadmap.sh/devops)

# さいごに

学習をつづけよう
Flask, SQL Alchemy, MySQLを使用して、PythonAnywhereでデプロイするときにつまづいた箇所

## はじめに
これは書きかけです。詳しいファイル構成などをあとで書き込みます。

### Flask

### SQL Alchemy

### MySQL
MySQLが8.0になったので、Homebrew経由でインストールしたMySQLは、認証方法がcashing_sha2_passwordである。しかし、mysql.connectorは、それに対応していない。そこで、MySQLの方の認証方法を、パスワードを入れて認証する古い形式に変更する必要がある。

以下の方法を行ってもできなかった!

~~mysqlを立ち上げて、以下のコマンドを入力する。※コピペしたらシングルクオーテーションがうまく認識されないので、コマンドに直接打ち込むほうが良い。私の場合は、rootユーザーの認証方式を変更した。~~

``` mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
```


PyMySQLにしたらできた。

``` python
import pymysql.cursors
mydb = pymysql.connect(
  host="xxxxxxxxx",
  user="xxxxxx",
  password="xxxxxx",
  database="xxxxxx"
)
```

## Python Anywhere
データベースの名前が、
"appname$databasename"
となっているので、デプロイする時に、app.py(実行ファイル)のdatabaseの名前を、変更する
``` app.py
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/appname$databasename' 

```
vSphere ESXi Network dumpの設定

備忘のため、ESXiにおけるネットダンプの設定を記載します。

# ネットダンプとは？
ESXiはカーネルパニックが起きると「PSOD」と言い、WindowsでおブルースクリーンのようにOSがハングしてしまう現象が起きる。その時メモリの中身をネットワーク上に吐く機能のこと。
トラシューに用いる。

# 設定方法
## ESXiで操作
TeratermなどのターミナルソフトでSSH接続し、以下コマンドを入力
` esxcli system coredump network set --interface-name <vmk No.>	--server-ip <vCenter IP> --server-port 6500`

次にダンプ設定を有効かする以下コマンドを入力
`esxcli system coredump network set --enable true`

最後に設定を確認
`esxcli system coredump network get`

## vCenterでの操作
「https://<vCenter IP>:5480」にてVAMIにログイン

次にサービス > 「VMware ESXi Dump Collector」を選択し、サービスを起動&自動起動する

これで設定は完了

# PSODを発生させてみる
設定が完了したら、ESXiにログインし以下コマンドよりPSODを実施する
`virsh -e set /reliability/crashMe/Panic`

コマンドを実行後すぐにDCUIが紫一色の画面になり、ダンプを取得中のログが表示される

ダンプ取得後、Escキーで抜けてrebootコマンド

vCenterにSSH接続し、以下コマンドにてダンプが吐かれたことを確認
`> shell`
`# ls -l /var/core/netdump...`

# あとがき
https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.esxi.install.doc/GUID-775F602C-7432-4259-B132-4EC1F38A7EE7.html
GUIからでも設定可能？要検証

＃参考
https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.esxi.install.doc/GUID-85D78165-E590-42CF-80AC-E78CBA307232.html