一記事にするまでもないような内容たちの忘備録


Zenn の スクラップのようなイメージで随時ちょこちょこと書くところが欲しかったので。

# Rloginで秘密鍵は設定しているはずなのに、パスワードを求められてloginできない

https://qiita.com/mnmKoka/items/a5918a95dc91bd6df836

以上の記事を見て、
サーバー > プロトコル の「RSA2認証鍵の署名方式」をデフォルトから「SHA1」へ変更する
で無事解決


# marktextでチェックボックスが作成できない

普通に

"- [ ]" のように書きたいのだが、

"- "の時点でリストが作成されてしまい、
チェックボックスが作成できない

### 解決法

リストを作ると
リストの左側にマウスカーソルを合わせると
編集ボタンが表示されて
そこのTurn Into -> Todo List を選択すると
リストがチェックボックスに変換される。

### 後日やったら普通に作成できた

- の後に
[ ] (大かっこ、スペース、大かっこ閉じ、スペース)を入れるだけで
チェックボックスが作成できた。



# pythonのパッケージをeditable mode で dev dependencies も含めてインストールする

pyproject.tomlの[project.optional-dependencies]に例えば以下のように、開発用のパッケージを記載しているとき

```pyproject.toml
[project.optional-dependencies]
dev = [
    "pytest",
    "flake8",
    "mypy",
    "black",
    "isort"
]
```

pip install に-eをつけるとeditable modeになり
パッケージ名[dev]とすると、開発用の依存パッケージをインストールできる。

以下のようにして実行できる。

```shell-session
pip install -e git+https://github.com/[GitHubのユーザー名]/[パッケージのリポジトリ名名].git@[ブランチ名]#egg=[パッケージ名][dev]
```

# neo-treeのインストール

下記に記事化

[neovimのファイラーneo-treeの設定と、よく使うキーバインドまとめ #初心者 - Qiita](https://qiita.com/tianshanminato965/items/9c4e239f2beca06a22a1)

# neovimのファイラーneo-tree でよく使うキーバインドまとめ

下記に記事化

[neovimのファイラーneo-treeの設定と、よく使うキーバインドまとめ #初心者 - Qiita](https://qiita.com/tianshanminato965/items/9c4e239f2beca06a22a1)

# tauri で関数を呼び出すときの引数は、フロントエンドはキャメルケース、バックエンドはスネークケース

rust のGUIフレームワーク tauriで、フロントエンドからバックエンドの引数を持つ関数を呼び出そうとしたときに、デベロッパーツールのconsoleに以下のエラーが出た。
```shell-session
Unhandled Promise Rejection: invalid args `exampleKey` for command `example_command`: command example_command missing required key exampleKey
```

[Calling Rust from the frontend | Tauri Apps](https://v1.tauri.app/v1/guides/features/command/) によると、

> Arguments should be passed as a JSON object with camelCase keys:
> 
> 引数は、camelCase キーを持つ JSON オブジェクトとして渡す必要があります。

とのこと

tauriが自動的に、キャメルケースのJSONキーから、スネークケースのrustの引数に変換しているみたい。

# tauri のインストールの流れ

環境 windows11 wsl ubuntu-24.04

```bash
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev \
  build-essential \
  curl \
  wget \
  file \
  libxdo-dev \
  libssl-dev \
  libayatana-appindicator3-dev \
  librsvg2-dev
```

```bash
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
```

wsl ubuntuを再起動
```powershell
wsl --shutdown ubuntu24.04
```

書き途中

# eguiをwsl ubuntu-24.04 上でインストール


以下の公式テンプレートに従ってテンプレートを作成

https://github.com/emilk/eframe_template

```bash
rustup update
sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev
```

```bash
sudo apt install xserver-xorg
export XDG_SESSION_TYPE=x11
export WAYLAND_DISPLAY=""
```

```bash
sudo apt install libxkbcommon 
```

# Google Calendar API を試してみる

curlコマンドで試してみます。

事前にOAuth2トークンの取得が必要です。以下は、手順の概要です。

## 1. Google CloudでAPIを有効にし、OAuth2クレデンシャルを作成

(Google Cloud Console)[https://console.cloud.google.com/?hl=ja]にアクセスし、プロジェクトを作成、または既存のプロジェクトを選択します。
「APIとサービス」→「ライブラリ」から「Google Calendar API」を有効化します。
「認証情報」タブで「OAuth 2.0 クライアントID」を「デスクトップ アプリ」を選択して作成。
クライアントIDとクライアントシークレットが発行されるので、控えておきます。

## 2. OAuth2トークンを取得

curlまたはブラウザを使って認証を行い、アクセストークンを取得します。

### 1. 認証URLを生成してブラウザで開きます
```
curl "https://accounts.google.com/o/oauth2/auth?client_id=<YOUR_CLIENT_ID>&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/calendar.readonly&response_type=code"
```

※リダイレクトURIの`urn:ietf:wg:oauth:2.0:oob`とは、OAuth 2.0認証において、リダイレクト URIとして使用される特別なURIです。認証後にユーザーが特定のWebページにリダイレクトされるのではなく、認証コードがユーザーに直接表示されることを意味します。

### 2. ブラウザでGoogleアカウントにログインし、認可コードを取得します。

取得したコードを使ってアクセストークンを取得します

```bash
curl -X POST -d "code=<AUTHORIZATION_CODE>&client_id=<YOUR_CLIENT_ID>&client_secret=<YOUR_CLIENT_SECRET>&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code" https://oauth2.googleapis.com/token
```

上記のコマンドで返されるJSONレスポンスのaccess_tokenを使って、カレンダーの予定を取得できます。

## 3. curlで予定リストを取得

取得したアクセストークンを使用して、Google Calendar APIに対してリクエストを送信します。

```bash
curl -H "Authorization: Bearer <ACCESS_TOKEN>" "https://www.googleapis.com/calendar/v3/calendars/primary/events"
```

# Google Forms API を試してみる

Google Forms APIのリファレンスを参考に

https://developers.google.com/forms/api/reference/rest?apix=true&hl=ja

## get メソッドを使ってフォームの内容を取得してみる

https://developers.google.com/forms/api/reference/rest/v1/forms/get?hl=ja

curlコマンドで試してみます。

事前にOAuth2トークンの取得が必要です。以下は、手順の概要です。

## 1. Google CloudでAPIを有効にし、OAuth2クレデンシャルを作成

(Google Cloud Console)[https://console.cloud.google.com/?hl=ja]にアクセスし、プロジェクトを作成、または既存のプロジェクトを選択します。
「APIとサービス」→「ライブラリ」から「Google Form API」を有効化します。
「認証情報」タブで「OAuth 2.0 クライアントID」を「デスクトップ アプリ」を選択して作成。
クライアントIDとクライアントシークレットが発行されるので、控えておきます。

## 2. OAuth2トークンを取得

curlまたはブラウザを使って認証を行い、アクセストークンを取得します。

### 1. 認証URLを生成してブラウザで開きます

以下のリンクを先ほどのクライアントIDに書き換えて開いてください。
```
https://accounts.google.com/o/oauth2/auth?client_id=<YOUR_CLIENT_ID>&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/forms.body.readonly&response_type=code
```

※リダイレクトURIの`urn:ietf:wg:oauth:2.0:oob`とは、OAuth 2.0認証において、リダイレクト URIとして使用される特別なURIです。認証後にユーザーが特定のWebページにリダイレクトされるのではなく、認証コードがユーザーに直接表示されることを意味します。

ログインできたら、認可コードが表示されるのでコピーします。

※gcloud_cliを使えば、curlコマンドでもできるのだろうか?

https://zenn.dev/pino0701/articles/gcloud_install

### 2. 取得した認可コードを使ってアクセストークンを取得します

```bash
curl -X POST -d "code=<AUTHORIZATION_CODE>&client_id=<YOUR_CLIENT_ID>&client_secret=<YOUR_CLIENT_SECRET>&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code" https://oauth2.googleapis.com/token
```

上記のコマンドで返されるJSONレスポンスのaccess_tokenを使って、フォームの内容を取得できます。

## 3. curlでフォームの内容を取得

取得したアクセストークンを使用して、Google Forms APIに対してリクエストを送信します。

```bash
curl -H "Authorization: Bearer <ACCESS_TOKEN>" "https://forms.googleapis.com/v1/forms/<FORM_Id>"
```

以下のようなレスポンスが返ってきたら成功

例）Google Formの連絡先情報テンプレートの場合のレスポンス

```json
{
  "formId": "<FORM_ID>",
  "info": {
    "title": "連絡先情報",
    "documentTitle": "連絡先情報"
  },
  "settings": {},
  "revisionId": "00000003",
  "responderUri": "https://docs.google.com/forms/d/e/<FORM_ID>/viewform",
  "items": [
    {
      "itemId": "6163a4d2",
      "title": "名前",

      "questionItem": {
        "question": {
          "questionId": "778b574a",
          "required": true,
          "textQuestion": {}
        }
      }
    },
    {
      "itemId": "0d91a5ed",
      "title": "メールアドレス",
      "questionItem": {
        "question": {
          "questionId": "3e555b2b",
          "required": true,
          "textQuestion": {}
        }
      }
    },
    {
      "itemId": "2f17adcd",
      "title": "住所",
      "questionItem": {
        "question": {
          "questionId": "3f7b522a",
          "required": true,
          "textQuestion": {
            "paragraph": true
          }
        }
      }
    },
    {
      "itemId": "698c9b8f",
      "title": "電話番号",
      "questionItem": {
        "question": {
          "questionId": "458e9ec2",
          "textQuestion": {}
        }
      }
    },
    {
      "itemId": "6e15d0f9",
      "title": "コメント",
      "questionItem": {
        "question": {
          "questionId": "320744c8",
          "textQuestion": {
            "paragraph": true
          }
        }
      }
    }
  ]
}
```

### 参考

https://note.com/murasamejo/n/n5abdedf114b0


# OSのバージョンをpowershellで確認しようと思ったのですが...
矛盾しているよう見えるけどどういうことだろう?
```powershell
PS C:\Users> Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion , OsName ,OSDisplayVersion

WindowsProductName WindowsVersion OsName                    OSDisplayVersio
                                                            n
------------------ -------------- ------                    ---------------
Windows 10 Home    2009           Microsoft Windows 11 Home 24H2
```

ちなみに、
間違いなくwindows 11 だと思う。
設定アプリの「システム」＞「バージョン情報」でも、
エディション Windows 11 Home
バージョン   24H2
ですし。