OmniAICreator/Qiita-1.07M huggingface dataset:
Dockerコンテナ内のNextJSの再起動に関して

# 概要
Dockerコンテナに自動でNextJSサーバーを立ち上げるdocker-compose.ymlを作成した.  
NextJSサーバーを再起動したいと思ったとき,Dockerコンテナごと再起動するのは非効率だと思ったので,コンテナ内の操作で対応しようと思った.  
今まで使用してなかったコマンドが多いのでメモとして残す.  
結論としては,起動コマンドをプロセス1で使用していると終了できないので,別の方法を考える必要がある.(サブプロセスとしてnpm run devを実行するとか,方法はありそう.)  

対象者 : ある程度DockerとNextJSがわかる人向け(あと個人的なメモ)

# Dockerコンテナ立ち上げ設定
```yml
# docker-compose.yml
version: '3'
services:
  react:
    container_name: nextjs
    image: node:18
    volumes:
      - ../app:/app
    working_dir: /app
    command: bash -c "sleep 10 && npm run dev"
    ports:
      - "3000:3000"
    tty: true
    environment:
      - CHOKIDAR_USEPOLLING=true
```

色々説明を省くとこんな感じ.  
上記を下記のコマンドでコンテナ作成する.  
```sh
docker-compose -f docker-compose.yml up -d
```
こんな感じで動いている.  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/3ae3e8f1-8c1e-c9da-73be-2a8c49e95448.png)

下記の部分でサーバーを起動しているが,止めるためにはdockerの再起動が必要.  

```
command: bash -c "sleep 10 && npm run dev"
```

再起動コマンド

```
docker restart nextjs
```

これでも困らないが,NextJSのプロセスだけ再起動したい.  

## NextJSサーバーのプロセス停止と再起動
プロセスを停止するにはプロセスIDが必要  
`ps aux`コマンドを用いて,コンテナで実行されているプロセスの一覧を表示する.  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/48896223-cb00-29fd-447d-b1e8b8958514.png)

`kill -9 PID`でプロセスを終了することができるらしいが...  
`kill -9 1`をしても終了しない.  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/4145d091-8d8c-7dec-45b9-666c463eda9a.png)

調べたところ,プロセスIDが"1"のものに関しては,メインプロセスというらしく,止めることはできないようだ.  

    command: bash -c "sleep 10 && npm run dev"

で実行されるプロセスがPID="1"となると思われるので,他の方法でnpm run devを実行すれば,動的に再起動できるかもしれない.  

## 結論,コンテナを再起動しよう.(本末転倒)
現状起動に時間がかかるコンテナでもないので,コンテナごと再起動することとした.
GitHubで特定のコミット間の差分を確認する方法

### GitHubで特定のコミット間の差分を確認する方法
```
https://github.com/ユーザ名/リポジトリ名/compare/古い方のコミット番号(見せたい差分の一個前)...新しい方のコミット番号

# 例
https://github.com/spring-projects/spring-boot/compare/ac9482d...399d0f7
```
↓のように差分確認できます。
![github-commit-diff-001-2048x1535.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684145/a51f06e7-c660-53c2-e1d3-c5e86ef2a0f9.png)


https://github.com/spring-projects/spring-boot/compare/ac9482d...399d0f7

### 見せたい箇所から最後にコミットした部分までの差分を出す方法
```
https://github.com/ユーザ名/リポジトリ名/compare/古い方のコミット番号(見せたい差分の一個前)...ブランチ名
```

例：https://github.com/FallstagAtsugi/pokemon-app
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684145/e4545ac2-57f2-5359-b12e-68b75b05f68c.png)

これのポケモンデータ取得から最後まで取り出したい時は
一個前の「895575f」をコピーしてURLに貼っつける。

![スクリーンショット 2023-09-07 11.54.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684145/c3e8380d-87b2-69b1-d3a7-26acd36eaa67.png)


### 参考
https://docs.github.com/ja/pull-requests/committing-changes-to-your-project/viewing-and-comparing-commits/comparing-commits
【flutter】iOS風のDatePickerを表示するには？

こんにちは。
今回は、CupertinoDatePicker(iOS風)を実装する方法を紹介します。

# 方法
![スクリーンショット 2023-08-13 20.18.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524120/ce57fee2-1687-ea40-8538-b4c8b9db94e0.png)

まず、「Cupertinoパッケージ」をインポートします。
「CupertinoDatePicker」のウィジェットを使い、iOS風のDatePickerを表示することが出来ます。

「CupertinoDatePicker」は、引数「onDateTimeChanged」に、値が変更された時の処理を記述することで使えます。






# 使用例
```dart
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';  //インポートする

void main() {
  runApp(const MainApp());
}

var selectDate = DateTime.now(); //今回は、現在時刻をセット

class MainApp extends StatefulWidget {
  const MainApp({super.key});

  @override
  State<MainApp> createState() => _MainAppState();
}

class _MainAppState extends State<MainApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            backgroundColor: Colors.pink,
            title: const Text("Flutter!!!!"),
          ),
          body: Center(
            child: CupertinoDatePicker(  //以下を追加
              initialDateTime: selectDate,
              mode: CupertinoDatePickerMode.date,
              onDateTimeChanged: (dateTime) {
                setState(() => selectDate = dateTime);
              },
            ),
          )),
    );
  }
}


```

# 実行例
![CupertinoDatePicker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524120/30599619-81a9-8416-3b04-3fbba45c850c.gif)
Grafanaのpluginインストール時のエラー

## Grafanaのpluginをインストール

homebrewを使ってmacOSにgrafanaをインストールし、追加でpluginをインストールしようとしたら以下のエラーが発生した。

## エラー
```zsh
% grafana cli plugins install simpod-json-datasource
Error: ✗ pluginsDir (/usr/local/var/lib/grafana/plugins) is not a writable directory
```

## 対策

`--pluginsDir`でpluginのインストールパスを指定して実行。

```zsh
% grafana cli --pluginsDir "/opt/homebrew/var/lib/grafana/plugins" plugins install simpod-json-datasource
✔ Downloaded and extracted simpod-json-datasource v0.6.3 zip successfully to /opt/homebrew/var/lib/grafana/plugins/simpod-json-datasource

Please restart Grafana after installing or removing plugins. Refer to Grafana documentation for instructions if necessary.

```
その後、サービスを再起動する。

```zsh
% brew services restart grafana
```

Intel SiliconとApple Siliconでインストールパスが異なるようだ。

https://grafana.com/docs/grafana/latest/setup-grafana/installation/mac/
FormRequestについて

# FormRequestとは
FormRequestは、Laravelで提供されるクラスで、Requestをフォーム利用のために拡張したもの。

Laravelは、クライアントからのリクエストは、Requestクラスのインスタンスとして送られてくる。
このRequestを継承して作られたのが、FormRequest。

# FormRequestのメリットとvalitate()を使ったやり方との違い
FormRequestを使うことで、リクエストデータの検証を簡単にできる。
リクエストを受けた瞬間にバリデーションしてくれるので、コントローラーにvalidateメソッドを使ってバリデーション処理を書くよりも、処理とソースがスッキリする。リクエストの内部で勝手に処理してくれる。
また、FormRequestを継承してカスタマイズすることで、きめ細やかな操作を行えるようになる。例えば、英語のメッセージを日本語化するなど。

# FormRequestでできること
### 1. バリデーションルールの定義
FormRequestクラス内で、リクエストデータの各フィールドに対するバリデーションルールを定義できる。

### 2. リダイレクトとエラーメッセージ
バリデーションが失敗した場合、FormRequestは自動的にリダイレクトを行い、エラーメッセージをセッションに格納する。

### 3. ユーザー認証
認証されていないユーザーをアクセスから排除できる。

### 4. カスタムロジック
FormRequestクラス内にカスタムのバリデーションロジックを追加できる。
Docker入門者が抱える疑問点解決: 環境構築とコンテナの利用

### はじめに

未経験で入社した会社で開発環境構築でDockerを使用していたのですが、コンテナの扱い方で疑問点が発生したのでクリアにしていきます。
自分が参画したチームは先輩も同期も未経験から入社して1年未満のエンジニアで構成されたチームでしたので、Dockerについて誰も詳しくない状態でした。
今回は、Dockerを学び始めた方や経験が浅い方の参考になれば幸いです。

本記事は主にコンテナの扱いの話で、コンテナの起動方法やコマンドについては解説してません。

### 今回の疑問点は何か
コンテナを起動したのに使ってないのではないか問題

Dockerを使用したプロジェクトの環境構築で、コンテナを起動したのにローカルのファイルを開いてコードを触っていたので、これってコンテナ内のコードを触るのが正しいんじゃなかったっけ？って思いました。

### コンテナ内で作業した方がいいのか？

自分のチームでは、よく「Rubyのバージョンを誰々さんのと同じにすれば動くかも！」「あ、このコードはなんかバージョンの関係で動かなくなる人もいるから書かないでね」って会話があったりしました。

コンテナ内で作業することで、チームメンバー間の環境差異を排除し、開発効率を向上させることができます。環境の一貫性を保つこで、「自分のマシンでは動作する」という問題を避けることができます。
コンテナを利用しない場合、このメリットを活かせなくなるのでコンテナ内で作業した方がいいでしょう。

### 自分のローカルのコードで作業はコンテナもしくはDockerを利用していると言えるのか？

コンテナを起動しているものの、ローカルで直接コードを編集する行為は、Dockerの一部としてのコンテナ技術を完全に利用しているとは言えないかもしれません。
しかし、以下の点ではある程度Dockerを利用していると言えます。

#### ボリュームマウント: 
コンテナ内の特定のディレクトリとローカルのディレクトリがマウントされている場合、ローカルでの変更がコンテナ内にも反映されるので、この点でコンテナ技術を利用しています。

#### サービスとの連携: 
もしコンテナがいくつかのサービス（データベースやAPIサーバーなど）をホストしていて、ローカルで編集したコードがそれらのサービスと連携する形で動作するのであれば、コンテナ技術を利用していると言えます。
(例えば、ウェブアプリケーションのコードがデータベースコンテナにクエリを送信する場合、これはサービス間の連携です。)

ただし、コンテナ技術の最大の利点の一つである「環境一貫性」は、ローカル環境でのコード編集では完全には享受できなくなります。これは、コードの編集自体はローカルの環境（異なるライブラリやツールのバージョン等）に影響される可能性があるためです。

したがって、Dockerを利用している」と言えるかもしれませんが、メリットをフルに享受しているわけではないと言えます。

### まとめ

ただ動作すればいいだけならコンテナに接続しなくてもいいのかも？しれませんが、環境差異をなくせるメリットは強力だと思いますので、基本的にはコンテナ内での作業がいいのかなと思います。
環境構築がスムーズに行うことができて、その後の開発業務で環境について困りごとが減るのはメリットがでかいと思います。
本記事ではコンテナで作業するメリットについてしか記載していないのですが、他にもDockerやコンテナのメリットはあるので、ちゃんと理解した上で扱いたいですね。
第22回情報科学技術フォーラム（FIT2023）プログラムに関する集計

はじめに
-----------------------------------------
<b>第22回情報科学技術フォーラム（FIT2023）</b>が, 2023年9月6日（水）～8日（金）大阪公立大学　中百舌鳥キャンパス（およびオンラインのハイブリッド）にて開催されています.

<b>公開されていますプログラム</b>を拝見して, <b>選奨セッション・一般セッションの講演（発表）に関する情報を簡単ですが少し集計してみました</b>ので, 参考までに投稿いたします.

（出所）https://www.ipsj.or.jp/event/fit/fit2023/index.html 閲覧日：2023年8月28日

講演の件数・分野傾向
-----------------------------------------
◇ 15分野(A分野:モデル・アルゴリズム・プログラミング ～ O分野:情報システム)において, 総数545件となっています.

◇ 分野別では, <b>F分野:人工知能・ゲームが最多、E分野:自然言語・音声・音楽が3番目となっており, 人工知能関連分野が約2割</b>にのぼっています.

（補足:2023年度の人工知能学会全国大会の発表件数は, 過去最多950件（前年比＋207件）となっており, 当該分野での発表が引き続き堅調であることが窺えます）.​

![表1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514762/ed21e8aa-5abf-5727-a829-9e670257c3ac.jpeg)



著者の所属組織・講演件数(組織名は敬称略)
-----------------------------------------
その１
◇ 著者の所属組織について, 他組織との共著を１つの組織と見做して集計すると, 日立製作所が19件とトップで, 続いて東京大学,東京都市大学,大阪公立大学が上位5組織となっています.
![表2-1a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514762/9b5ca0ed-6f87-3e76-054e-205e11bf585d.png)
（3件以上抜粋）

----

その２
◇ 上記その１において, 複数の組織が共著となっているものを対象に,組織を分離してユニークにカウントすると,立命館大学が24件とトップで, 続いて日立製作所,東京大学,東京都市大学,大阪公立大学が上位5組織となっています.
（個人が複数組織に所属する場合は,各々の組織でカウントしています）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514762/8740a011-23f6-5942-4862-04ce392cffb8.jpeg" width=65%>


（4件以上抜粋）



まとめ
-----------------------------------------
◇ 本投稿では, 公開プログラムから簡易的な傾向を確認したもので単純な件数ベースでの情報です.

◇ 研究内容やフォーラム現地での講演・議論の熱量等は一切考慮できておりません.

◇ コロナ禍後の現地会場でのオンサイト・対面形式での技術コミュニティへの参加は改めて大切だなと思っています.

-----------------------------------------
＜編集＞
2023年10月17日　日付の誤植を修正しました。
ベテランSEの事件簿　～貸与PCがクラッシュした理由～

# プロローグ
数年前に従事していたプロジェクトにおいて、メンバーに貸与していたPCがクラッシュしたとの連絡が入りました。

そのクラッシュしたPCを調べてみるとそのPCを使用していたメンバーによるある行動が原因でクラッシュしたのだと分かったのです。

# 事件内容
一緒に仕事をしていたメンバーから貸与PCが故障したと連絡がありました。そのままでは業務に支障があるので代替機を貸与して仕事を進めてもらうことにしました。

特に故障原因は聞かなかったが電源が入らないとのこと。
高価なPCでもないから仕方ないか、程度に思っていました。 

実際、この安いPCは歩留まりが悪く、熱に弱いわ、メモリを増設したら起動しないわと散々な代物だったのです。

返却時に貸与していたメンバーからは
「すみません。すみません。弁償しますか？」
と言われましたが
「いいですよ。安いPCなので気にしないでください」
と返し、受け取ったPCのバッテリーがなぜか外された状態だったことに疑問を抱きつつもそのまま事務所に持ち帰りました。

# 捜査開始（故障原因の調査）
持ち帰ったPCにアダプタを接続し、事務所にあったバッテリーを装着して電源を入れようとしますが、確かに電源が入りません。 

故障原因不明のままだと気持ちがすっきりしないのでPCの分解を開始します。

さっそくキーボードを外すと机に滴り落ちる茶色い液体。
匂いをかぐとコーヒーだと思われます。

キッチンペーパーで机を拭き、外したキーボードを立てかけPCの内部を見ると
見事にCPU付近にコーヒーが直撃しています。さらには上部の電源ユニットにも垂れてしまっているように見えます。

茶色い液体をティッシュで除去し、細かい部品を外しながら電源ユニットに到達。 
よく見てみると絶縁シートのお陰で幸い奥に浸透せずに済んでいました。

濡れた絶縁シートは扇風機で水分を飛ばすことにしましたが、
細かい部分に入り込んだ水分は精密ドライバーにティッシュ丸めても入らず拭き取ることは難しい状況です。

コーヒーをPCにこぼしたことにより故障したのだと確信し、
分解したPCをそっと元に戻しました。

# 事情聴取
PCを貸与していたメンバーに 
「あのー、故障した原因に心当たりありますか？」
と聞いてみました。

相手「水漏れというか、そんな感じです」
私「水？コーヒーじゃなくて？」 
相手「その通りです。」 

あっさりと自白してくれたため、故障原因の言質を取ることができました。

バッテリーを外していた理由とか、最初に言ってくれ。 
電源入れちゃったじゃねーかよ！あぶねーじゃねーか！

とも言えず、最終的にPCは一応復旧しました。 

# エピローグ（教訓）
このエピソードで伝えたいことは
**『報連相は正確に、正直に』**
ということです。

報連相の重要性は言うまでもないと思いますが、
例えきちんと実行しても嘘や情報を隠してしまうと取り返しのつかないことになったりします。

本エピソードでも、PCを故障させたメンバーへの信頼は限りなくゼロに近づいてしまいました。
これでは安心してこの方に仕事を任せられません。

逆に最初に正直に話してもらっていれば、信頼は増していたのではと思います。

こと仕事においては、すぐにバレる嘘はつくものではありませんね。
（仕事に限った話ではないですが）
Azure Logic Apps および Power Automate の日本の祝日 (2023年、2024年) 判定

https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html

[式関数のリファレンス ガイド - Azure Logic Apps | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#contains)
ベタにワークフロー内に変数を保持しただけ版

## 判定
`@{contains(variables('JapanHoliday2023'), convertFromUtc(UtcNow(), 'Tokyo Standard Time', 'MMdd'))}`

True = 祝日

## 祝日データ


```md:2023年
"JapanHoliday2023_Val": {
                "inputs": {
                    "variables": [
                        {
                            "name": "JapanHoliday2023",
                            "type": "array",
                            "value": [
                                "0101",
                                "0102",
                                "0109",
                                "0211",
                                "0223",
                                "0321",
                                "0429",
                                "0503",
                                "0504",
                                "0505",
                                "0717",
                                "0811",
                                "0918",
                                "0923",
                                "1009",
                                "1103",
                                "1123"
                            ]
                        }
                    ]
                },
                "runAfter": {},
                "type": "InitializeVariable"
            },
```

```md:2024年
            "JapanHoliday2024_Val": {
                "inputs": {
                    "variables": [
                        {
                            "name": "JapanHoliday2024",
                            "type": "array",
                            "value": [
                                "0101",
                                "0108",
                                "0211",
                                "0212",
                                "0223",
                                "0320",
                                "0429",
                                "0503",
                                "0504",
                                "0505",
                                "0506",
                                "0715",
                                "0811",
                                "0812",
                                "0916",
                                "0922",
                                "0923",
                                "1014",
                                "1103",
                                "1104",
                                "1123"
                            ]
                        }
                    ]
                },
                "runAfter": {},
                "type": "InitializeVariable"
            },
```


## 他 参考
[Power Automateで祝日を判定したい｜アイシーティーリンク株式会社 公式ブログ](https://note.com/ictlink/n/ne5a6ad3b16a1)
[Power Automate - 祝日か判定し処理内容を変更/ 中断/ 停止する](https://kurataku.com/powerautomate-holidays-judgment/)
Chrome検証ツール「CSSの概要」便利です！

Chromeの検証機能に「CSSの概要」という機能があります。
私は、品質チェックのときにこの機能にお世話になっています！

でも、初期表示では隠れていたので、
この機能自体を知らない方もいるのではないでしょうか？
便利なので、ぜひ使ってみてください！！

https://youtu.be/-vGZ1oQXUvA
初めてのアプリ開発

# アプリ開発
初めてのアプリ開発：車・バイク分類アプリ

# はじめに
今回、初めてのアプリ開発に挑戦し、画像から車とバイクを分類するアプリを作成しました。
この記事では、作成したアプリの紹介や学んだことなどについてまとめます。
約半年前からプログラミング学習を始め、学んだことのアウトプットとして作成しました。
学習期間では、HTMLやCSS、pythonなどを学びました。

# 車・バイク分類アプリについて
今回作成したアプリでは、画像を認識してそれが車かバイクを判定します。

「ファイルを選択」をクリックして検知したい画像を選択し、判定開始をクリックすると分類結果が表示されます。
ここで用いている分類モデルは、_Google colaboratory_ を利用して作成し、_VScode_ にて _Flask_ で実装しました。

![スクリーンショット 2023-09-07 10.33.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540652/fe6e96a0-fda8-259a-53a7-42c1ce945e41.png)
![スクリーンショット 2023-09-07 10.33.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540652/454a0db2-e17a-7805-58ce-c631eb47a146.png)


また、テキストで使われているデザインを改良して自分好みのデザインをCSSで記述しました。

# このプログラミング学習期間でできるようになったこと
ほとんど初めて学ぶプログラミングに最初はテキストの内容のほとんどが理解できないほど難解なものに感じられたが、少しずつ学習を進めていくにつれてわからないなりにも大枠は掴めるようになってきました。
今もまだ多くのエラーが生じてつまづくことばかりですが、少しずつ成長を感じています。
今回のアプリ作成では学習テキストを参考にしながらの開発だったのでまだ自分1人でこれを0から開発することは難しですが、実際に自分の手を動かして実装することで理解が深まりました。
始めたての頃に比べれば大きく成長できていると思います。

# 最後に
今後もプログラミングの学習を続け、堂々とプログラミングができると言えるようになるまで努力したいと思います。
Flex boxで「なんか小さくなっちゃう...」という時は、flex-shrink: 0; を試してみよう！

Flex boxを使っていて、幅や高さを指定しているのに
「なぜか小さくなっちゃう！！」
「指定した値にならない！！」
とお困りの方はいませんか！？

私は過去めっちゃ困りました😇
めっちゃハマりました😇

そんな時は、小さくなってほしくない要素に
👇を付けたら解決しちゃうかもしれませんよ...！

~~~css:style.css
flex-shrink: 0;
~~~

https://youtu.be/K8inSdQzrMI



参考：mdn web docs
https://developer.mozilla.org/ja/docs/Web/CSS/flex-shrink
Bitbucket の使い方

## リポジトリーの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/90a26e10-0783-f8c0-32d5-03cbf73fbb14.png)

作成されました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/1e2b6f79-86db-0c34-3e23-e5171a317333.png)

## クローン

HTTPS を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/2f4a5383-51fc-9e8c-aad9-806792a84dab.png)

```bash
git clone https://ekzemplaro@bitbucket.org/ekzemplaro/test1.git
```

実行結果

```text
$ git clone https://ekzemplaro@bitbucket.org/ekzemplaro/test1.git
Cloning into 'test1'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 968 bytes | 968.00 KiB/s, done.
```

```text
$ git clone https://ekzemplaro@bitbucket.org/ekzemplaro/test1.git
Cloning into 'test1'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 968 bytes | 968.00 KiB/s, done.
uchida@shimizu: sep07$ tree test1
test1
└── README.md

1 directory, 1 file
```

## アプリパスワードの作成
リポジトリーの更新に必要です。

右上の歯車をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/daa70721-2f50-161b-503a-e4ffa8e46db0.png)

Personal Bitbucket settings をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/8b18c0c5-2e85-dd43-e6c5-b92d8da6b037.png)

アプリ　パスワード　をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/ea30b712-fd6c-c0d5-d4a1-bb1fbf7132fb.png)

アプリ　パスワードの作成　をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/90384431-c68e-af89-2537-6fdb4b984991.png)
書き込みをすべてチェックしておけば、間違いはありません。
作成　を　クリック

パスワードが表示されます。
それを、コピーして保存して下さい。

## リポジトリーの更新

クローンしたフォルダーで、変更を行います。

更新のスクリプト

```bash:go_upload.sh
git add --all
git commit -m "Commit on Sep/7/2023 AM 11:03"
git push
```

実行結果

```text
$ ./go_upload.sh 
[main e0a9462] Commit on Sep/7/2023 AM 11:03
 1 file changed, 6 insertions(+)
 create mode 100755 go_upload.sh
Password for 'https://ekzemplaro@bitbucket.org':
```

アプリ　パスワードを入れます。

```text
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 394 bytes | 394.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://bitbucket.org/ekzemplaro/test1.git
   170e54d..e0a9462  main -> main
```
量子情報科学入門 - memo #3

## 第4章の個人的補足
- 量子状態はHirbelt空間の単位ベクトルで記述することができる
  - 厳密にはとりうる状態が加算無限個であることを暗に仮定している
  - 非加算の場合には、「基底ベクトルは連続的に変化するベクトルである」といった特別な仮定をおく必要があるが、量子情報の分野ではそこは無視してしまって問題はない（量子コンピュータ・情報の分野では量子系を$2^n$の有限個の状態しか取れないように拘束して利用するため）
- 物理量は一般にエルミート演算子によって表現される
  - 物理量（位置、運動量、エネルギー、温度、速度、質量、etc.）＝量子状態をある空間に射影する演算子

  - エルミート演算子であることは、測定値（=固有値）が実数であることの必要十分条件、つまり、測定値が実数であるためにエルミート演算子である必要がある
- エルミート演算子$A$に対応する物理量の測定を行うと、$A$の固有値の1つがランダムに得られる（Born rule: Bornの確率測定）
- 基底測定は固有値に重複のない物理量の測定に対応する
:::note
例：「ある量子状態を量子の存在しうる位置を表す空間に射影する演算子」は「位置」という物理量に対応し、この演算子は「粒子がどの位置に存在するか」という（正規直交）基底ベクトル$|\phi\rangle$を基底とした時の射影演算子で、単位行列$I$となる
$$ \displaystyle\sum_{i} | \phi_i \rangle \langle \phi_i | = I$$
:::

## 射影演算子って？
4.3.1にて固有射影演算子という概念が出てくるので補足。厳密には射影演算子のなかでも ~~エルミート性があるもの~~ **対象行列である演算子** を直交射影演算子と呼び区別するようだけど、本書では直交射影演算子のことを射影演算子として定義しているので注意。

---
- **射影演算子**：$P^2=P$ を満たす$P\in \mathcal{L} \(\mathcal{H}\) $

例：$\mathbb{K}^3$における
```math
\begin{pmatrix}
0 & 0 & 0 \\
0 & 0 & 0 \\
1 & 1 & 1 
\end{pmatrix}
```
**コンセプト**：
もしネズミが... :
![Jerry](https://img4.wikia.nocookie.net/__cb20120803011325/villains/images/c/cf/Jerry.png)

ロードローラーに轢かれると... :
![steamroller](https://i.stack.imgur.com/ZxZKT.gif)

こうなる:
![squashed](https://i.stack.imgur.com/8atiO.jpg)

さらにもう一度轢かれても... :
![steamroller](https://i.stack.imgur.com/ZxZKT.gif)

ネズミはこのまま:
![squashed](https://i.stack.imgur.com/8atiO.jpg)

---

- **直交射影演算子**：$P^2=P=P^{\dagger}$ を満たす$P\in \mathcal{L} \(\mathcal{H}\) $

例1：$\mathbb{K}^4$における
```math
\begin{pmatrix}
0 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 1 
\end{pmatrix}
```

例2：$\mathbb{K}^4$における（このような $\text{Tr}(P)=1$という性質を持つ直交射影演算子を素射影演算子とも呼ぶ）
```math
\begin{pmatrix}
0 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 
\end{pmatrix}
```

例3：$\mathbb{K}^3$における
```math
\frac{1}{2} 
\begin{pmatrix}
1 & -1 & 0 \\
-1 & 1 & 0 \\
0 & 0 & 0 
\end{pmatrix}
```
---

正規化されたベクトル $| \psi \rangle$ （$\langle\psi| \psi \rangle =||\psi||^2=1$）による演算子  $P_\psi= | \psi \rangle \langle\psi|$ は直交射影演算子となる。この演算子は任意のベクトル $| \phi \rangle$ に作用させると
```math
P_\psi | \phi \rangle =| \psi \rangle \langle\psi|| \phi \rangle = | \psi \rangle \langle\psi| \phi \rangle 
```
  ここで $\langle\psi| \phi \rangle$ は内積の結果で、ただのスカラーなので前にもってくると
```math
P_\psi | \phi \rangle = \langle\psi| \phi \rangle  | \psi \rangle 
```
となり、  $| \phi \rangle$ と $| \psi \rangle$ の内積結果を $| \psi \rangle$ にかけたベクトルが得られる。これは、 $| \phi \rangle$ の $| \psi \rangle$ 方向の射影を取り出すことに相当することから、$P_\psi$ は「$| \psi \rangle$への射影演算子」と呼ばれる。

参考：

https://www.cfm.brown.edu/people/dobrush/am34/MuPad/projection.html

https://tnakabou.seesaa.net/article/200610article_17.html

https://note.com/taiki_takahashi/n/n5d6ab069e00f

https://physicalcosmos.hatenablog.com/entry/projection

http://www.math.nagoya-u.ac.jp/~richard/teaching/s2023/SML_Adam_3.pdf

https://math.stackexchange.com/questions/1303977/what-is-the-idea-behind-a-projection-operator-what-does-it-do
Git関連　単語

# Gitの単語

###  リポジトリ<br>
ファイルやフォルダの履歴を記録する場所
### ロ－カルリポジトリ<br>
自分のPCに作られるリポジトリ
### リモートリポジトリ<br>
リモート上のリポジトリ、Git上に作られるリポジトリ
### ペアリポジトリ<br>
ワークツリーを持たないリポジトリ
### ワークツリー<br>
履歴管理を行うファイルの保存場所
### インデックス<br>
コミットしたいファイルを登録するところ
### コミット<br>
インデックスに登録した変更内容をローカルリポジトリに反映
### リセット<br>
コミットする前の変更内容をローカルリポジトリに反映
### ステージ<br>
ワークツリーからコミットしたいファイルをインデックスに登録
### ハンク<br>
変更した範囲、変更したひとかたまり
### ヘッド<br>
作業対象となっているブランチやコミット
### ブランチ<br>
履歴管理を分岐させたもの<br>
複数の変更履歴を並列管理
### チェックアウト<br>
操作対象とするブランチを切り替える<br>
ヘッドを切り替える
### プッシュ<br>
ローカルリポジトリの変更をリモートリポジトリに反映
### プル<br>
リモートリポジトリの変更をローカルリポジトリに反映
### マージ<br>
異なるブランチの変更を反映（相互の現行履歴が残る）
### リベース<br>
異なるブランチの変更を反映（変更履歴が片方に集約）
### リバート<br>
指定したコミットの内容を打ち消して新しいコミットを作成
### コンフリクト<br>
複数人が同じファイルの同じ場所を変更したときにおこるエラー
### フォーク<br>
リモートリポジトリをコピーしてリモートリポジトリを作成
### クローン<br>
リモートリポジトリをコピーしてローカルリポジトリを作成
### .gitignore<br>
履歴管理の対象外のファイルを登録するところ
【flutter】「TextField」と「TextFormField」の違いは？？

こんにちは。
今回は、入力フォームとして使えるWidgetである「TextField」と「TextFormField」の違いについて説明します。
![スクリーンショット 2023-08-13 20.18.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524120/ce57fee2-1687-ea40-8538-b4c8b9db94e0.png)
# 違い
TextFieldとTextFormFieldの違いは、「目的」です。

TextFieldは単にユーザーからの入力を受け付けるためのウェジェットです。

一方で、「TextFormField」は、フォーム(form)内でユーザーからの入力をさせるためのものです。

つまり、TextFormFieldは、Formウェジェットで使うためのものになっています。


# 使い分け
Formウェジェット内で使う場合には、TextFormFieldウェジェットを使います。

理由は、フォームでの保存、バリデート、リセットなどの機能を使う上では、TextFormFieldの方が圧倒的に便利だからです。

Formウェジェット外の簡易的なテキスト入力欄の場合は、TextFieldウェジェットを使います。
[C#] ファイルスコープ名前空間宣言を使ってみる

# はじめに
本記事では、C# 10において可能となったファイルスコープ名前空間宣言を実際に使ってみて使いどころなどをまとめます。

# ファイルスコープ名前空間宣言とは
同一ファイル内に定義したクラスやデリゲート、列挙体などを同じ名前空間としたいときの宣言を簡略化できる言語仕様です。(詳細は[こちら](https://learn.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-10#file-scoped-namespace-declaration))
次章で簡単な例を挙げてどのように宣言するのかを説明します。

# 宣言の方法
同一ファイルにクラスや列挙体などをまとめそうな例として、教師(Teacher)クラスとその担当教科(Subject)の列挙体をC#のソースコードファイル`Teacher.cs`に定義することを考えます。(クラスとそのクラスが主に利用する列挙体を近い場所に合わせて定義するイメージです。)
SampleプロジェクトのModelsフォルダに上記を定義したファイルを作成すると考えると、以下のような定義になります。

- Teacher.cs
```csharp
namespace Sample.Models
{
	/// <summary>
	/// 教師
	/// </summary>
	internal class Teacher
	{
		/// <summary>
		/// 担当教科
		/// </summary>
		internal Subject Subjects { get; set; }
	}

	/// <summary>
	/// 教科
	/// </summary>
	internal enum Subject
	{
		/// <summary>
		/// 数学
		/// </summary>
		Mathematics,

		/// <summary>
		/// 英語
		/// </summary>
		English,
	}
}
```
これをファイルスコープ名前空間宣言を使って宣言すると以下のようになります。
- Teacher.cs
```csharp
// ファイル内のクラスや列挙体に一律で名前空間を設定する。
namespace Sample.Models;

/// <summary>
/// 教師
/// </summary>
internal class Teacher
{
	/// <summary>
	/// 担当教科
	/// </summary>
	internal Subject Subjects { get; set; }
}

/// <summary>
/// 教科
/// </summary>
internal enum Subject
{
	/// <summary>
	/// 数学
	/// </summary>
	Mathematics,

	/// <summary>
	/// 英語
	/// </summary>
	English,
}
```
使ってみて感じたメリットで一番大きいのは、スコープで囲わないことでネストを浅くできることでした。
特に内部クラスなどを定義する際には、どうしてもネストが深くなりがちで場合によってはコードが読みづらくなったりもするため、そういった場面でメリットが活きるのかなと感じました。
ただし、名前空間を入れ子にすることができなかったり、ファイルスコープ名前空間宣言を利用した場合に他の名前空間宣言はできないという点には注意が必要だと感じました。(注意点の詳細は[こちら](https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/namespace)を参照ください。)

- できないことの例(以下はTeacher.csの内容)
```csharp
namespace Sample.Models
{
	/// <summary>
	/// 教師
	/// </summary>
	internal class Teacher
	{
		/// <summary>
		/// 担当教科
		/// </summary>
		internal Nested.Subject Subjects { get; set; }
	}

    // ファイルスコープ名前空間宣言を利用する場合、以下のように入れ子での名前空間宣言はできない。
    // (ファイルスコープ名前空間宣言以外の名前空間の宣言ができないため。)
	namespace Nested
	{
		/// <summary>
		/// 教科
		/// </summary>
		internal enum Subject
		{
			/// <summary>
			/// 数学
			/// </summary>
			Mathematics,

			/// <summary>
			/// 英語
			/// </summary>
			English,
		}
	}
}

// ファイルスコープ名前空間宣言を利用する場合、以下のように同一ファイルに異なる名前空間宣言が複数定義できない。
// (ファイルスコープ名前空間宣言以外の名前空間の宣言ができないため。)
namespace Sample.Util
{
    internal Sample
    {
            // ・・・
    }
}
```

# まとめ
本記事では、C# 10において可能となったファイルスコープ名前空間宣言の使いどころをまとめました。
内部クラスなどネストが深くなりがちなコードを記載する際に、ファイルスコープ名前空間宣言を利用してネストを浅くし、コードの可読性を上げることができると感じたため、そういった用途で使えそうかなと感じました。
Windows の マウスポインター をリセット

# 初めに

使用している Windows PC のマウスポインターが変更できなくり **最終手段**のレジストリを操作して対処した内容となります

:::note warn
 * **レジストリの変更はシステムに影響を及ぼす可能性があるため慎重な操作が必要です**
 * **レジストリを変更するとシステムに問題が発生する可能性があります**
 * **この記事に含まれる情報を使用する際は 自己責任で行動してください**
 * **なおこの方法にて不具合や損失が発生しても 当方は一切責任を負いません**
:::

main.cpl -> 「マウスのプロパティ」->「ポインター」↓ をいじってもダメ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570185/80610357-2c57-d4c1-dddc-0ba45875c861.png)

# 該当レジストリの削除

\HKEY_CURRENT_USER\Control Panel\Cursors にマウスポインターの設定情報が保存されているので削除する

## レジストリ エディターの場合
1. regedit.exe を起動
1. \HKEY_CURRENT_USER\Control Panel\Cursors を選択
1. 「Delete」キーを押下するかコンテキストメニューを表示し「削除」を選択
1. 「キー削除の確認」画面が表示されるので「はい」を押下

## PowerShell の場合
1. PowerShellを管理者権限で起動
1. 次のコマンドを実行
    ```powershell
    Remove-Item -Path "HKCU:\Control Panel\Cursors" -Recurse
    ```

# ログオンセッションの再開
削除後 ログオフし再度ログオンすればマウスカーソルがデフォルトに戻ります

# 終わりに
冒頭でも書きましたが**最終手段**の紹介となります
別の方法があればお教え頂ければ幸いです
記事の書き方

## Markdown記法 チートシート
https://qiita.com/Qiita/items/c686397e4a0f4f11683d

## Markdown記法 サンプル集
https://qiita.com/tbpgr/items/989c6badefff69377da7

## 数学記号記法一覧
https://zenn.dev/wsuzume/articles/b0b3a51cac5d7fe4555b

## 【Visual Studio Code】Markdownに数式を挿入する方法
https://b1san-blog.com/post/vscode/vscode-md-math/

## Qiitaの数式チートシート
https://qiita.com/PlanetMeron/items/63ac58898541cbe81ada
[Swift]UITextViewでテキスト選択は無効化してリンクは有効化する方法

# 投稿の経緯
`UITextView`に表示されているテキストのリンクを有効化して、リンクをタップすると特定のページへ外部遷移する挙動を実装する必要がありました。

```.swift
textView.isSelectable = true
textView.dataDetectorTypes = .link
```

このように書くことでリンクを有効化と部遷移する挙動を実現することができますが、テキスト選択は無効化できません。`isSelectable`を有効にすることでテキスト選択状態になります。


# テキスト選択状態とは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/a63d3933-29d8-0f1e-0a8b-5a6a5b6cda6f.png)
`UITextView`のテキストをダブルタップすることで表示されるメニュー（`UImenuController`）が表示されている状態を**テキスト選択状態**と呼んでいます。


# 実装

```TextView.swift
import UIKit

final class TextView: UITextView {

    override var isFocused: Bool {
        false
    }

    override var canBecomeFirstResponder: Bool {
        false
    }

    override var canBecomeFocused: Bool {
        false
    }

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        false
    }
}
```

- isFocused
- canBecomeFirstResponder
- canBecomeFocused
- canPerformAction

これら4点に対してfalseを返すと、テキスト選択は無効化してリンクを有効化することができます。

xibで設定する場合は、カスタムViewに👆こちらのTextViewクラスを設定すれば実現できます。

# おわりに
最後までご覧いただきありがとうございます！
この記事が誰かの役に立てば幸いです。
.DS_Storeとか__MACOSXを削除、入れないでzipを作る

メモ

## .DS_Storeとか__MACOSXを作らない

ファイルを作らない設定をしたのに、結局作られていたことに気づく。

あたらしいMACだと効かないっぽい。

```
defaults write com.apple.desktopservices DSDontWriteNetworkStores True
killall Finder
```


## .DS_Storeの削除方法

```
find . \( -name '.DS_Store' \) -delete -print
```

### 参考サイト

[Mac .DS_Store や ._xxx ファイルを作らない＆削除する方法](https://lovemac.jp/9906#su-toc-item-5)

## .DS_Storeとか__MACOSXを入れないで圧縮する方法

zipコマンドでやると入らないとのこと。

```
zip xxx.zip -r xxx/ -x "*.DS_Store"
```

### 参考サイト

[不要なファイルが紛れ込む問題！？ Macでzip圧縮する時に注意しておきたいこと。](https://tcd-theme.com/2019/12/mac-zip-compression.html)
【Python】数行のコードで、複数Wordファイルを一括でPDFファイルに変換

# できること
- フォルダ内のすべてのWordファイルを、一括でPDFファイルに変換する
    - 同じフォルダ内に、同じファイル名で保存されます。

# 実装
## PDF化したいファイルたち
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344524/6a8f471b-bdb2-bbeb-7cc9-91c56def3f52.png)


## コード
~~- ```wd = win32com.client.Dispatch('Word.Application')```がないと僕のPCではうまく動かなかったです[[1](https://qiita.com/hanchan/items/21552ed97e7203744310)]。Macなどの方は、ここを変更する必要があるかもしれません！~~ (2023/9/7訂正)
```python
from docx2pdf import convert

# 変換したいWordファイルがあるフォルダのパスを指定
folder_path = 'ここにパスを指定'

# フォルダ内のすべてのWordファイルをPDFに変換
convert(folder_path)
```

# 結果
- 無事作成されてます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344524/091f3158-09cb-f211-1a47-22cde800e2ff.png)

# 参考記事
1. [初心者がWordファイルを一括でPDFに変換してみる](https://qiita.com/hanchan/items/21552ed97e7203744310)
ページアクション：Pardot

[Pardotの質問と回答をまとめに戻る](https://qiita.com/Keiji_otsubo/items/a3ccd1370697dd914723)

+ [ページアクションの仕様について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007FUFuFSAX)

あるページアクションの通知が、同一のプロスペクトによってトリガーされるのは、
　1 時間に 1 度です。ページアクションが設定されているページにプロスペクトが 1 人
　訪問すると、指定したユーザーに通知が送信されます。プロスペクトが 1 時間以内に
　同じページに戻っても、2 回目の通知はトリガーされません。ただし、ページアクションが
　設定されている別のページをそのプロスペクトが訪問した場合は、ページアクション通知が
　トリガーされます

:::note
１時間に１度だけの通知については、完了アクションが「ユーザに通知」もしくは「割り当てられたユーザに通知」の場合にのみ適用されるルールであり、ToDoの作成については、ページにアクセスした回数分実行されるとのことでした。
:::
JavaScript備忘録　関数について

JavaScript関数の書き方について、サンプルです。

~~~index.html
<!DOCTYPE html>
<html lang="ja">
    <meta charset="uft-8">
    <head>
        <title>Step01</title>
        <script src="index01.js"></script>
    </head>
    <body>
        Chromeのデベロッパーツール(Ctrl+Shift+I)よりConsoleにて出力を確認してください。
    </body>
</html>
~~~

~~~index01.js
//関数の定義
function myFunc1(a, b) {
    return a + b;
}
console.log("myFunc1呼び出し");
console.log(myFunc1(1, 1));

//定義した関数を代入することができます。
let val1 = function myFunc2(a, b) {
    return a + b;
}
console.log("val1呼び出し");
console.log(val1(1, 2));

//名前のない関数を変数に代入して
//function(){}を無名関数や、匿名関数と呼びます
let val2 = function (a, b) {
    return a + b;
}
console.log("val2呼び出し");
console.log(val2(1, 3));

//アロー関数式を使うと、funciotnの記述が省略できる
//引数と関数本体の間に=>を記述する
let val3 = (a, b) => { return a + b };
console.log("val3呼び出し");
console.log(val3(1, 4));

//関数本体がreturnだけの場合の{}とreturnも省略できます。
let val4 = (a, b) => a + b;
console.log("val4呼び出し");
console.log(val4(1, 5));

//即時関数を使った書き方
//無名関数を()で囲って、記述します
console.log("即席関数呼び出し");
console.log(
    (function (a, b) { return a + b })(1, 6)
);

//即時関数にアロー関数式を組み合わせた場合
console.log("即席関数、アロー関係式呼び出し");
console.log(
    ((a, b) => a + b)(1, 7)
);

//関数に関連してもう少し紹介します
//高階関数、コールバック関数と呼ばれる例です
//myHighOrderのように関数を引数として受け取る関数を、高階関数と呼びます
function myHighOrder(a, b, myFunc) {
    myFunc(a, b);
}

//myCallBackのように引数として渡される関数をコールバック関数と呼びます
let myCallBack = function (a, b) {
    // バッククオート`内の${}に変数を埋め込むことができます。
    console.log(`${a}を${b}乗すると` + Math.pow(a, b));   
}

//呼び出して実行します
console.log("コールバック関数例１");
myHighOrder(2, 10, myCallBack);

//コールバック関数を引数のところに直接記述することもできます
console.log("コールバック関数例２");
myHighOrder(2, 10, function (a, b) {
    console.log(`${b}を${a}乗すると` + Math.pow(b, a)); 
});

//さらに簡略化して記述すると
console.log("コールバック関数例３");
myHighOrder(4, 3, (a, b) => {
    console.log(`${b}を${a}乗すると` + Math.pow(b, a)); 
});

//コールバック関数の活用例として、組み込みオブジェクトのArrayのメソッドforEachがあります
//2倍して出力するコールバック関数をforEachに組み込んでいます
//コールバック関数の第1引数は配列の値になります。
console.log("コールバック関数例４");
let data = [1, 2, 3, 4, 5];
data.forEach(function (a) {
    console.log(a * 2);
});

//配列の各要素を2倍する例です
//コールバック関数の第2引数はindex、第3引数は呼び出されている配列
console.log("コールバック関数例５");
data.forEach(function (a, i, d) {
    d[i] = a * 2;
    //data[i] = a * 2; と同じ結果
});
console.log(data.toString());

//一定時間後に呼び出されるsetTimeoutの例
console.log("setTimeout,setInterval例");
setTimeout(function () { console.log("2秒経過しました") }, 2000);

//一定間隔で処理を呼び出すsetIntervalの例
let counter = 0;
let timerId = setInterval(function () {
    console.log("500ミリ秒毎処理します" + (++counter) + "回目");
    if (counter == 10) { clearInterval(timerId) }
}, 500);

~~~
rust で failed to run custom build command for `openssl-sys`がでたがopenssl-devがインストールされているとき

# はじめに

Rustを初めて実行するときに遭遇するエラーをいつもの方法で解決できなかったのでメモ程度にまとめます

# 問題

以下のエラーがRustの実行時に発生しました

```
failed to run custom build command for `openssl-sys`
```

そして以下をインストールしました

```
$ sudo apt install openssl-dev
```

しかし、すでに`openssl-dev`はインストールされていました

# 解決方法

以下をインストールすることで解決しました

```
$ sudo apt install pkg-config
```

# おわりに

Rustの環境構築の一貫として入れてほしいです

# 参考

https://qiita.com/nacika_ins/items/465e89a7b3fbeb373605
DevOps Center 未解決

[DevOps Center まとめに戻る](https://qiita.com/Keiji_otsubo/items/3969e9a6c09cf727a4d9)


+ [When running from the app launcher DevOps Center I received: Page Doesn't exist](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007PiEY9)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/2a999191-34d2-6f62-1840-8f11ad7a8506.png)


+ [Changes unable to be merged (even though they were)](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007A2GVU)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/66464d47-c086-7e89-e84a-e40835141d87.png)


+ [リベースエラーが発生するとプルリクエストが消える](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007CtzyN)
+ [複数のプロジェクトと GitHub リポジトリ](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007I89Qj)

+ [既存のリポジトリを使用してプロジェクトを作成する際のエラー](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007JAxdO)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/c3f7100e-cf49-ac72-dd9e-39fdea5bde3c.png)

+ [Error Encountered While Pulling Changes in Work Items](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007JCpRP)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/b837abb0-cde3-a911-fb17-fc4de7acfb5e.png)

+ [Deleting a custom field formula field](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgDQD)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0b775452-eb03-d1b4-87d8-b34560760d7e.png)


# 【未解決】Rebase error when promoting some work item to next stage

+ [Rebase error when promoting some work item to next stage](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000OsgT8SAJ)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/433a910c-f577-cd0a-895b-08866eac217a.png)

# 【未解決】On branch WI-000021 Your branch is up to date with 'origin/WI-000021'.  nothing to commit, working tree clean

+ [After refreshing a sandbox, I always see 8 files available to pull. Why?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JglbK)

 GitHub の問題？

:::note
Please check this article. 

https://careerkarma.com/blog/git-nothing-to-commit-working-directory-clean/
:::

+ [however this also errors! Are 336 updates too many for devops](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZBg3B)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/5a1e38de-2cc7-b308-da98-b3c9b6666706.png)


# spawn ENOMEM error

+ [spawn ENOMEM error](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007XIUnv)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/8f221021-9a31-357c-914b-70253b5c3be1.png)
Javascript備忘録　配列とforループについて

　配列とforループのサンプルです。

```index.html
<!DOCTYPE html>
<html lang="ja">
    <meta charset="uft-8">
    <head>
        <title></title>
        <script src="index01.js"></script>
    </head>
    <body>
        ブラウザのConsoleにて出力を確認してください。
    </body>
</html>
```


```index01.js
let arr1 = [1,2,3,4,5];  //数値型の配列　宣言して代入
let arr2 = ["おはよう","こんにちは","こんばんは"];   //文字列方の配列　宣言して代入
let arr3 = new Array(5); //長さ5の配列を宣言（値は代入されない）

//そのまま出力
console.log("そのまま出力");
console.log(arr1);
console.log(arr2);
console.log(arr3);

//要素数を指定して出力
console.log("要素数を指定して出力");
console.log(arr1[0]);
console.log(arr2[0]);
console.log(arr3[0]);

//ループにて要素を出力しています。最低限基本のforループが使えればコードは組めますが、様々なfor使いこなせると便利です。
//forEachループは途中での中断ができません。（ほんとか？）

//forループ
console.log("forループ");
for(let i = 0; i < arr1.length; i++){
    console.log(arr1[i]);
}

//for-ofループ
console.log("for-ofループ");
for(let num of arr1){
     console.log(num);
}

//forEachループその1
console.log("forEachループその１");
arr1.forEach(function(elem){
    console.log(elem);
});

//forEachループその2
console.log("forEachループその２");
arr1.forEach(elem => 
    console.log(elem)
);

//forEachループその3
//2番目の引数が添え字になります。
console.log("forEachループその３");
arr1.forEach((elem, index) =>{
    arr1[index] *= 2;
});
console.log(arr1.toString());


//連想配列 キーと対になる値を扱います
console.log("連想配列");
let arr4 = {"03":"東京","052":"名古屋","06":"大阪など"};
console.log(arr4);  //そのまま出力
console.log(arr4["052"]);   //キーを指定して出力

//連想配列 for-inループ
console.log("連想配列 for-inループ");
for(let key in arr4){   
    console.log(key + ":" + arr4[key]);
}

//リストやスタックのように扱う
let arr1 = [2, 3, 4];

//先頭に要素を追加
arr1.unshift(1);
//末尾に要素を追加
arr1.push(5);
console.log("要素追加後arr1");
console.log(arr1);

//先頭の要素を取り出す
let x = arr1.shift();
//末尾の要素を取り出す
let y = arr1.pop();
console.log("取り出した要素");
console.log(x + "," + y);
console.log("要素削除後arr1");
console.log(arr1);

//Arrayには、その他にも様々な機能があります。詳しくは公式サイトなど。
//含有やソートやフィルタなど、とても便利な機能があります。
//例えば、降順ソートは以下のようになります
console.log("降順ソート");
arr1.sort(function(a, b){return b - a});
console.log(arr1);

//2次元配列を扱う 3x3の配列の例
console.log("２次元配列");
let arrD1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
console.log(arrD1);

//Arrayコンストラクターを使って初期化する例
//1次元でしか初期化できないので、forループを使って2次元化している
//以下の例では10x10の配列が用意される
let arrD2 = new Array(10);
for (let i = 0; i < arrD2.length; i++) {
    arrD2[i] = new Array(10);
}
console.log(arrD2);


```
01プログラミングの材料と道具

### モノを作るには材料と道具が必要
木製の椅子を作ろうと思ったら、材料は木と釘、道具はノコギリや金槌が必要です。同じように、家を建てるには、木材や窓ガラスなどの材料、それらを加工したりつなぎ合わせたりする道具が必要です。
プログラミングも、プログラムという作品を完成させる作業ですので、椅子や家と同じ"モノ作り"と考えることができます。
プログラムには椅子や家といったわかりやすい実体がないので違和感があるかもしれませんが、プログラムを作るのにも材料と道具が必要です。
### データと型
プログラミングにおいて基本となる材料は、文字列や数字といった"データ"です。家を建てる際の材料が木と窓ガラスで異なるのと同じで、データにもいろいろな種類がある。こうした種類の違いは、データの型（かた）と呼ばれている。
### 関数
家を建てる際に使われる道具には、ノコギリや金槌がありますが、Pythonにもプログラミングに役立つ道具があります。その一つが関数（かんすう）と呼ばれるものです。
### メソッド
釘は金槌を使って打ち込みますが、ネジにはドライバーを使います。このように、材料と道具には密接な関係があります。プログラミングでも、データの型と関数を別々に考えることはできません。あるデータ型だけが持っている関数が存在し、これはメソッドと呼ばれています。
ブランチ戦略メモ

## オーナ設定
.github/CODEOWNERS
```
* @user1 @user2
```
### マッチ条件
| xx | xx |
|:-:|:-:|
| *  | 全てのコード  |
| *.js  |  拡張子が".js"のファイル指定 |
| data/  | "data"ディレクトリ以下  |
|  /data/ | ルート直下にある"data"ディレクトリ以下  |

### オーナ
| 1 | 2 |
|:-:|:-:|
|  @{USER_NAME} |  ユーザー名 |
|  {MAIL_ADDRESS} | メールアドレス  |
| @{ORGANIZATION}/{TEAM}  | 指定チーム  |

## ブランチ保護の適用

1.コードオーナーの設定
2.マージ前にプルリクエストによるレビューを要求
   1. 承認が必要な人数指定: 1
   2. コードオーナーのレビューが必要
3.コミット履歴の短縮化を要求
4.指定ユーザーのみプッシュできる 

### 設定手順
repository -> Settings -> Branches -> Add branch protection rule![BAC304C0-CF52-4E5A-B830-843A9D658125.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/95d86fda-f6b0-e2e9-c05d-2042890b9979.jpeg)

`Restrict who can push to matching branches`にもチェック入れて、マージ可能なユーザーを追加する。

設定完了後、`Create`押してルール適応する。
アプリを起動後に画面が真っ暗なまま

Xcode:14.2
シミュレータ:iPhone14

AppDelegateに起動処理を書いているが、
アプリ起動後に画面が真っ暗なままになりました。

原因は単純で、
iOS13以降はSceneDelegateの仕組みが導入されているため、
AppDelegateの処理では起動できない。
SceneDegateに処理を書くことで起動出来ます。

また、info.plistにSceneGelegateから起動する設定があるので、こちらも確認すること。
Sceneは使わないから〜といって設定を消していると起動しなくなります。
DB上のユーザーにFunction実行の権限を与える

# 権限確認


``` sql
--DBを指定
USE [sampleDB]

SELECT
    USER_NAME(grantee_principal_id) AS ユーザー名,
    class_desc AS クラス,
    OBJECT_NAME(major_id) AS オブジェクト名,
    permission_name as 権限名
FROM sys.database_permissions
WHERE grantee_principal_id = USER_ID('sampleDbRole') --ユーザー名 or ロール名を指定
```

# 権限付与

Functionまたはストアドプロシージャ毎、もしくはschema単位どちらか指定できる。

参考
https://learn.microsoft.com/ja-jp/sql/relational-databases/stored-procedures/grant-permissions-on-a-stored-procedure?view=sql-server-ver16#to-grant-permissions-on-a-stored-procedure-1

今回はあるファンクションのみ必要
``` sql
--DBを指定
USE [sampleDB];

GRANT EXECUTE --実行のみ
ON OBJECT::<Schema>.<Function or StoredProcedure>  
    TO USERNAME;  
```
切り取りペースト操作

# え待って、Macて切り取りペーストできないの？

出来ました。

コンテキストメニューから「コピー」を押して一旦コピーした状態にします。
その後、貼り付けたい場所でoptionを押しながらコンテキストメニューを出すと、
ペーストが「ここに項目を移動」に切り替わるので貼り付け(移動)が可能です。

![スクリーンショット 2023-09-02 12.20.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3550862/3182813b-1acd-9803-30d7-b0c99b2f5681.png)
Power Automate DesktopでSQLを実行したいときにSyntax errorが発生する


普段SSMSでSQLを実行しているのだが、自動化したくなりPower Automate Desktopに頼ることに。
こんな感じで設定したところ、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485045/24bbecf6-f147-6da3-fe40-49363336b14e.png)
こんなエラーが
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485045/bbc573ec-5f24-d767-b96a-5d7a12342e06.png)
そしてこれ以上はエラーの詳細が出てこない。

# とりあえずググる。
そしてこれを発見。
https://powerusers.microsoft.com/t5/Power-Automate-Desktop/SQL-Statement-syntax-error-when-using-apostrophe/td-p/1538564

みんな大好きあいまい検索でワイルドカードの％が特殊文字なのでエスケープ文字を入れてみろ、とのこと。

### **う　ご　い　た**
Logic Apps で Line bot 

Logic Apps で Line bot が作れる。少々癖があったのでメモ。

## 準備
[Line Message (独立系発行者) - Connectors | Microsoft Learn](https://learn.microsoft.com/ja-jp/connectors/linemessageip/)
[LINE Developers](https://developers.line.biz/ja/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/b1fe8fe1-22e4-3a93-a944-5a6fc6c60096.png)
あらかじめ準備済み

## ワークフロー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/d8466e81-6f7b-e20f-a35c-a7cc339342bc.png)

## 接続の作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/a331c76d-f331-209f-de84-a7d46782dd94.png)
接続名は任意。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/11136d0e-69b2-6d42-9989-06ac7d26a7b9.png)
ここのトークンとあわせて「`Bearer <Token>`」の形で API Key 欄に入れる。


## TO

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/3c7ec72b-3f1a-3eeb-95d1-6fbdfc66c8a0.png)

https://qiita.com/shinbunbun_/items/59c81f796c80bd26e3fb#%E8%87%AA%E5%88%86%E3%81%AEuserid%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88

User Id とはこれのこと。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/7af1ca38-78dc-9856-c063-72f6949ccc46.png)

## 送信

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/f2fc256c-d927-b9fd-6a64-6b74a032b632.png)

送信できた～
PostgreSQL®メジャーバージョンのインプレースアップグレードのためのAiven

<font color="Grey">*[Aiven for PostgreSQL® major version in-place upgrade](https://aiven.io/blog/postgresql-major-version-in-place-upgrades-supported-on-aiven)の翻訳です。*</font>

2023年2月3日

# PostgreSQL® メジャーバージョンのインプレースアップグレードのためのAiven

PostgreSQLのメジャーバージョンアップを数秒で？はい、Aivenなら可能です！詳細はこちら。

## なぜPostgreSQLのメジャーバージョンアップは重要なのか？


PostgreSQLをフルに活用したいのであれば、常にアップグレードするべきです。新しいメジャーバージョンは新機能だけでなく、性能上の利点も提供します。


しかし、多くのPostgreSQLユーザがメジャーバージョンアップを警戒しています。どの程度のダウンタイムが発生するかは、アップグレードの方法に依存します。


Aivenはそのダウンタイムを数秒に抑えています。


## AivenはPGのメジャーアップグレードを容易にします。


AivenのPostgreSQLのインプレースアップグレードは、アップグレードプロセスから複数のステップを削除し、ダウンタイムを飛躍的に削減します。小規模なインスタンスのアップグレードは数秒、大規模なインスタンスのアップグレードは1分もかかりません。


以下は、インプレース・アップグレード中に起こることです：


1.自動プロセスが、アップグレードが可能かどうかをチェックします。
2.スタンバイノードがシャットダウンされる。
3.プライマリ・ノードがアップグレードされる。
4.フルバックアップが作成されます。
5.新しいスタンバイノードが作成されます。
6.同じプロセスで、読み取り専用のレプリカサービスがアップグレードされます。


Aivenコンソールのボタンをクリックするだけです。


## 次のステップ


詳細は[PostgreSQLインプレースメジャーアップグレードドキュメント](https://docs.aiven.io/docs/products/postgresql/howto/upgrade)を参照してください。


#### PostgreSQL® 用 Aiven

PostgreSQLをフルマネージドでホスティングし、高いパフォーマンスと必要な拡張機能をすぐにご利用いただけます。

[オープンソースサービスをお試しください！[](https://aiven.io/postgresql)
ChatGPTを使ったAIチャットアプリをクラウド上にリリースするRTAにおいて世界新となる37分48秒を記録しました

![skeet-chatgpt-rta.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780317/45304b53-b880-1420-57a9-4890a5fa8e7b.png)

gm! エルソウルラボのkishi.solです。

弊ラボ代表の川崎が ChatGPT を使った AI チャットアプリをクラウド上にリリースする RTA (リアルタイムアタック) において世界新(当社調べ)となる 37 分 48 秒を記録しました。

本 RTA では、ゼロから ChatGPT API を使った AI チャットボットアプリを開発し、クラウド上(Google Cloud 及び Firebase)にリリースするまでの時間を計測しています。 Skeet フレームワークを用いることで、再現性のある爆速アプリ開発環境を構築し、開発者体験を向上させることができることが示されました。

この RTA にはクラウド上にスケーラブルなアプリをリリースできれば、Skeet の利用を問わず、どんな方法でも挑戦することができます。対戦よろしくお願いいたします。

【YouTube】ChatGPT API AI チャットボット開発 RTA [00:37:48(世界新)]: https://www.youtube.com/watch?v=KK-rjjZuXbE

## Google Cloud、Firebase 上でサーバーレスアプリを爆速開発できるオープンソースの Skeet フレームワーク

![skeet-chatgpt-rta-start.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780317/1a448a17-9c06-594d-60da-2f028d2b090c.jpeg)


Skeet は GCP (Google Cloud) と Firebase 上にフルスタックアプリを構築できるオープンソースの TypeScript 製サーバーレスフレームワークです。

Skeet を使えば、API サーバーから Web・iOS・Android アプリまですべてを TypeScript で爆速開発することができます。GraphQL や Firestore など、開発者体験の評判が良い技術を積極的に採用しています。ChatGPT や Vertex AI などの AI を活用したアプリケーション開発や Solana などのブロックチェーンを活用した Web3 dApp 開発も簡単に行うことができる現代的なアプリケーションフレームワークとなっています。

下記リンクからデモをお試しいただけます。PaLM2・Vertex AI、そして Open AI 社の ChatGPT (GPT-3.5, GPT-4)も同時にお試しいただくことができますので、どちらがどのような特徴を持っているか比較検討していただくことができます。

Skeet デモ: https://skeeter.dev/ja/

また、こちらのデモのアプリは Skeet CLI を使えば 5 分でご自身の PC 環境やクラウド環境で動かすことが可能です。

まずはどのようなことができるかデモでイメージしていただき、その後は Skeet CLI を使ってすぐにアプリ開発をスタートできます。

Skeet CLI (GitHub): https://github.com/elsoul/skeet-cli

Skeet は世界中すべてのアプリケーション開発現場の開発・メンテナンスコストを削減、開発者体験を向上させるためにオープンソースとして開発されています。

詳しくは公式ドキュメントを御覧ください。

Skeet ドキュメント: https://skeet.dev/ja/
４５暗号化の基礎

### インターネットでデータをやり取りする問題点
インターネットの利用にリスクがある。
送信者が送信した情報を悪意のある第三者に盗み見される（盗聴）
送信者が送信した情報が受信する前第三者に（改ざん）
第三者が送信者に成りすまして不正な情報を送信する（なりすまし）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3293109/1aefc63f-2711-e3af-a30f-dd7952e25005.png)
それを防ぐために、それぞれに適切な暗号化技術が必要。
盗聴  　　　暗号化
改ざん　　　ディジタル署名　
なりすまし　認証機能
### 暗号化に必要な要素は暗号化ルールと鍵
平文　⇒　暗号化　⇒　暗号文　
暗号化　⇒　元　　の過程は　復号　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3293109/d41f14ab-3250-c0a0-d395-073c33ab511d.png)

お　は　よ　う　⇒　か　ひ　ら　え　　一文字後ろにずらす　換字式
このような　X文字後ろずらす　暗号化ルールに与える値　暗号鍵
復号に用いる値　復号鍵

練習問題
送信者が送信した情報を悪意のある第三者に盗み見されてしまうことを盗聴という。盗聴に対する有効な対策は暗号化。
平文を、何が書かれているのかわからない表現に変換することを暗号化という。
暗号化されたあ暗号文を平文に戻すことを復号という。
暗号化ルールに与える値を暗号鍵という。同じ暗号化ルールでも与える暗号キーによって異なる暗号文が作成される。
WSLでXserverにSSH接続する方法

<img src="./images/image1.png" >
![概要図](./images/image1.png)
#Xserverーバーでsshの設定  
[LINK][1]
[1]:https://www.xserver.ne.jp/manual/man_server_ssh.php
こちらを参考に</a>公開鍵認証用の鍵ペアを作成。秘密鍵fkumazemi.keyをダウンロード  
パスフレーズは忘れずメモを。  
秘密鍵の設置    
ダウンロードしたfkumazemi.keyを以下のコマンドで移動    
.sshディレクトリの作成    
$ mkdir ~/.ssh    
ファイルの移動  
$ mv ~/Downloads/fkumazemi.key ~/.ssh   
秘密鍵のファイル名の変更    
秘密鍵の名前を変更します。この時通常だとid_rsaとするのですが、    
.sshに移動    
$cd ~/.ssh/    
名前の変更    
$mv fkumazemi.key id_xserver_rsa    
#パーミッションの変更
flutter_hooks利用時にSearchControllerエラー

flutter_hooksをインストールしてビルドしようとしたら、以下のようなSearchControllerエラーが大量に出た。

```
Running Gradle task 'assembleDebug'...
../../../.pub-cache/hosted/pub.dev/flutter_hooks-0.20.0/lib/src/search_controller.dart:7:1: Error: Type 'SearchController' not found.
SearchController useSearchController({List<Object?>? keys}) {
^^^^^^^^^^^^^^^^
Target kernel_snapshot failed: Exception
```

## 解決方法

../../../.pub-cache/hosted/pub.dev/flutter_hooks-0.20.3/lib/src/hooks.dartの該当部分をとりあえずコメントアウトしたらビルド成功しました。

```
// part 'search_controller.dart';
```
Flutter Projectの作成でProject Creation Error. Cannot create a project within the Flutter SDK.

以下の設定でFlutter Projectを作成しようとしたら、Project Creation Error. が出た。
かなり初心者向けですが一応メモ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3277259/0921e559-ad60-79d1-a578-61108baeb31d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3277259/5abbcbfe-2146-c816-244c-7a189f8a37c0.png)

Flutter SDK Pathは~/Desktop/flutterです。


## 解決方法

Project locationのpathを~/Desktop/hoge_projectにする。

エラー文そのままですが、Flutter SDKとFlutter Projectは同じディレクトリに作れないみたいですね。
WSLでXserverにSSH接続する方法



#Xserverーバーでsshの設定
[タイトル][1]
[1]:[1]:url
公開鍵認証用の鍵ペアを作成。秘密鍵fkumazemi.keyをダウンロード。  
パスフレーズは忘れずメモ  
#秘密鍵の設置  

ダウンロードしたfkumazemi.keyを以下のコマンドで移動  
.sshディレクトリの作成  
ファイルの移動  
$ mv ~/Downloads/fkumazemi.key ~/.ssh/  
#秘密鍵のファイル名の変更  

秘密鍵の名前を変更します。この時通常だとid_rsaとするのですが、  
その他の秘密鍵もある場合は任意の名前を。今回はid_xserver_rsaで設定  
.sshに移動  
$cd ~/.ssh/  
名前の変更  
$mv fkumazemi.key id_xserver_rsa  
#パーミッションの変更  
.sshディレクトリと秘密鍵のパーミッションを変更。  
$ chmod 700 ~/.ssh  
$ chmod 600 ~/.ssh/id_xserver_rsa  
#ログイン  
以下のように記述  
Host xserver #任意のコマンド名  
HostName サーバーsv8288.xsrv.jp  
Port 10022  
User サーバーID  
IdentityFile ~/.ssh/id_xserver_rsa #秘密鍵のファイル名  
ServerAliveInterval 60 #sshの自動切断を防ぐために記述  

これで以下コマンドでアクセスが可能  
$ ssh xserver

#下記URLのお陰でWSLからXserverえのSSH接続が出来ました。感謝します。 
[リンク][1]
[1]:[1]:[タイトル][1]
[1]:[1]:url  
エックスサーバーにssh接続する方法（ターミナル利用