OmniAICreator/Qiita-1.07M huggingface dataset:
【flutter】showTimePickerを使って選択した時間を表示したい

こんにちは！
今回はshowTimePickerを使って、選択した時間を表示する方法について紹介します。
最後まで読んでいただけたら嬉しいです！


## 1,実装

![showtimepicker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524127/deb02852-90de-16fc-7ea9-7ab52e331a60.gif)




## 2,コード

```php
  TimeOfDay selectedDayOfTime = TimeOfDay.now();

  Future<void> _selectTime(BuildContext context) async {
    final TimeOfDay? picked = await showTimePicker(
      context: context,
      initialTime: selectedDayOfTime,
      builder: (context, child) {
        return Theme(
          data: Theme.of(context).copyWith(
            timePickerTheme: TimePickerThemeData(
              backgroundColor: Colors.white,
              dialBackgroundColor: Colors.lightGreen,
              hourMinuteColor: const Color(0xff0A000000),
              hourMinuteTextColor: Colors.green,
              dialHandColor: Colors.green,
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(8.0),
              ),
            ),
            textButtonTheme: TextButtonThemeData(
                style: TextButton.styleFrom(foregroundColor: Colors.green)),
            colorScheme: const ColorScheme.light(
              primary: Colors.lightGreen,
            ),
          ),
          child: child!,
        );
      },
    );

    if (picked != null) {
      setState(() {
        selectedDayOfTime = picked;
      });
    }
  }
}
```

```php

    Text(
        '選択した時刻: ${selectedDayOfTime.hour.toString().padLeft(2, "0")}:${selectedDayOfTime.minute.toString().padLeft(2, "0")}',
            style:const TextStyle(fontSize: 20, fontWeight: FontWeight.w600),
              ),
              const SizedBox(
                height: 20,
              ),
      SizedBox(
        height: 60,
        width: 150,
        child: ElevatedButton(
          style: ElevatedButton.styleFrom(
              backgroundColor: Colors.grey,
              side: const BorderSide(color: Colors.white)),
          onPressed: () => _selectTime(context),
          child: const Text(
            '時間選択',
            style: TextStyle(color: Colors.white),
          ),
        ),
      ),
```




参考にさせていただいたサイト

https://hiyoko-programming.com/2106/

https://qiita.com/tai_miya/items/793be61ea9f0558e3e20


## 終わりに

今回の記事は以上になります。
今回も最後まで読んでいただきありがとうございました！
では、また次の記事で〜！
PC-8001でマイコン宇宙講座

以前試した[mbasicで試したマイコン宇宙講座](https://qiita.com/yamori813/items/601fc2b8d82c1f53421a)のBASICプログラムをPC-8001でも試してみました。

プログラムをDumpListEditorのBASIC入力にコピペしてcmtファイルでSDに書出して、SD-USB変換で[CHOS](https://github.com/yamori813/chos)で読み込んで実行してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/960bc4aa-c46c-e9e4-d44e-21ccb79c6a5a.png)

![IMG_20240517_073309.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/7c5f8227-44f7-159f-28dd-070e0425064c.jpeg)
パスワード変更画面の場合3(分割されたメールアドレス)

# sWebMachineGun.exe実践編

「[パスワード変更画面の場合1](https://qiita.com/tomoki0sanaki/items/3bd8b35ce03fe6f905f0)」と「[パスワード変更画面の場合2](https://qiita.com/tomoki0sanaki/items/1ca365fbc8b3a8170c48)」はパスワード変更画面であったが、今回は分割されたメールアドレスがターゲット。

(タイトルの「パスワード変更画面の場合3」は、内容を正しく示していないけど、そこはご容赦を)

メールアドレスの場合、稀に「確認のためもう一度」側で、ユーザ名とドメイン名で分割されている場合があるよね。

そういう画面の場合が今回のテーマ

## 診断対象

こんな感じ
<table border="1">
<tr><th align="center">メールアドレス変更画面</th><th align="center">結果画面</th></tr>
<tr><td><a href="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/3bb1810d-21da-09f7-df2e-efb71fc3a876.png"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/3bb1810d-21da-09f7-df2e-efb71fc3a876.png" width="70%" height="70%"></a></td><td><a href="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/51f84c24-fee7-6dde-b009-2def433f222f.png"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/51f84c24-fee7-6dde-b009-2def433f222f.png" width="70%" height="70%"></a></td></tr>
<tr><td colspan="2" valign="top">POST /sanaki/yourdata/testChangeMailAddress.asp HTTP/1.0<BR>
Content-Type: application/x-www-form-urlencoded<BR>
Content-Length: 0<BR>
<BR>
mailAddress=test@example.com&mailUser=test&mailDomain=example.com
</td>
</tr>
</table>

変数「mailAddress」が変数「mailUser」と変数「mailDomain」に分割されて重複パラメータの役を担っている。

## sWebMachineGun.exeの設定

メインの設定は、HTTPリクエストの設定と、置換方法の設定

### sWebMachineGun.exeの設定1

「Request」タブに、一つのHTTPリクエストを設定する

![038.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/8478af38-f8e4-fb94-6093-6e73bc94afc1.png)

この画面は、「[パスワード変更画面の場合1](https://qiita.com/tomoki0sanaki/items/3bd8b35ce03fe6f905f0)」とかと同じなので、特に説明は不要だろう

### sWebMachineGun.exeの設定2

「Setting」タブは「[パスワード変更画面の場合1](https://qiita.com/tomoki0sanaki/items/3bd8b35ce03fe6f905f0)」とか同じなので、説明は不要だろう

![025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/9eb709c0-14d3-4d93-d5a4-2baa6d302a56.png)

「Duplication」というボタンを押下して、ダイアログを表示させる

### sWebMachineGun.exeの設定3(Duplicationの設定)

「Setting」タブの「Duplication」ボタンの押下で表示されたダイアログ/ウィンドウ

![037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/3ca3db54-6408-5b1a-5738-a1ced0b06fd9.png)

「splitMailAddress」というモードを選択すると、変数が3つ必要で、それぞれ

- メールアドレス全体
- メールアドレスのユーザ名の部分
- メールアドレスのドメインの部分

という解釈して、重複パラメータの置換処理を実施するようになる

※ 「mailaddress」は「mailAddress」の間違いです

## sWebMachineGun.exeの実行

「Execute」ボタンで、実行できるのですが、結果はこんな感じで、変数「mailAddress」の前方追加の時は(「@」の左側が変化したので)、変数「mailUser」が追随して置換されていることが分かる

![039.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/5d256fc6-b160-06fb-d2fb-784193d770f3.png)

変数「mailDomain」の置換時には、変数「mailAddress」のドメイン部分が追随して置換されていることが分かる

![040.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/5ca64d4d-9629-b24f-1441-71d2a5a6e64a.png)

## マクロについて

splitMailAddress用のマクロを用意した。・・・使わないと思うけど・・・

- %Qst0%～%Qend0% : 重複パラメータに指定されている変数のメールアドレス全体
- %Qst1%～%Qend1% : 重複パラメータに指定されている変数のメールアドレスのユーザ名の部分
- %Qst2%～%Qend2% : 重複パラメータに指定されている変数のメールアドレスのドメインの部分

# sWebMachineGun.exe Index

[sWebMachineGun.exe のメインメニューに戻る](https://qiita.com/tomoki0sanaki/items/e2b7767551a576b1dbd3)
html-midi-playerのmidiファイル読み込み処理のソースコードを追ってみる

ブラウザ上でmidiファイルを再生する手段の1つとしてhtml-midi-playerがあり、以下のページに沿ってmidiファイルのURLをsrcに指定するとmidiファイルが再生されます。

html-midi-player
https://cifkao.github.io/html-midi-player/

上記ページではsrcがhttpsで始まるURLとなっていますが、これをjavascriptでメモリ上に作成した任意のmidiデータにできないか？と思ったので処理を追ってみました。

## html-midi-playerのsrcで指定したmidiファイルの取得方法を追ってみる

html-midi-playerのgithub上のソースコードを読んでみると、srcで指定したmidiファイルは以下の箇所で `urlToNoteSequence` なる関数に `this.src` として渡されています。

https://github.com/cifkao/html-midi-player/blob/master/src/player.ts#L165

```javascript:src/player.ts
    try {
      let ns: INoteSequence = null;
      if (initNs) {
        if (this.src) {
          this.ns = null;
          this.ns = await mm.urlToNoteSequence(this.src);
        }
```

この `urlToNoteSequence` は上記 `src/player.ts` に書かれている `@magenta/music/esm/core.js` ですが、これはローカルで `npm i -S @magenta/music@1.23.1` を実行してnode_modulesの中身を確認してみると見れます。

※ネット上で似たようなファイルが出てきますし、core.jsのgithubのリポジトリのコードを読んでも `midi_io.ts` 内の `urlToBlob` を呼び出していることに変わりありませんでした。

※冒頭のhtml-midi-playerのページではscriptタグのsrcに `npm/@magenta/music@1.23.1/es6/core.js` と書いてありますが、 `urlToBlob` を呼び出しているのは同じでした。

```javascript:@magenta/music/esm/core/midi_io.js
export function urlToNoteSequence(url) {
    return urlToBlob(url).then(blobToNoteSequence);
}
```

関数内で呼ばれている `urlToBlob` は同ファイル内のもので、引数のURLに指定されたものをfetchで取得しています。

```javascript:@magenta/music/esm/core/midi_io.js
export function urlToBlob(url) {
    return new Promise((resolve, reject) => {
        fetch(url)
            .then((response) => {
            return response.blob();
        })
            .then((blob) => {
            resolve(blob);
        })
            .catch((error) => reject(error));
    });
}
```

fetchした結果をresponse.blob()しており、**レスポンスのblob()の結果が同じであれば、httpsで始まるもの以外がurlToBlobの引数urlに渡ってきても問題ないことになります**。

## httpsで始まるもの以外をmidiとしてsrcに渡す方法

上記よりレスポンスをblob()した結果が同じであれば良いので、これは**javascriptで独自に作ったメモリ上のデータをbase64エンコードして渡したものでもOKということになります**。

例えば以下のライブラリの `writeMidi` 関数を使って生成されるデータをbase64エンコードしてhtml-midi-playerのsrcに渡すとmidiが再生されます。

https://www.npmjs.com/package/midi-file

長くなるので詳細は別記事に書きますが、writeMidiした結果をArrayBufferに変換し、それをbase64にエンコードして `data:audio/midi;base64,` の後にくっつけてURLとして渡せば正常に再生されます。
基本情報技術者試験対策 ～情報セキュリティ 暗号技術とデジタル署名～

# はじめに

科目A, 科目Bどちらにも出題され、出問数も多い「情報セキュリティ分野」における**暗号化の技術**についての解説記事です。
***
## 暗号技術とは？

その名の通りでイメージしやすいとは思いますが、簡単に言えば「文章を読めない状態にする」技術です。
暗号化されていない文章を**平文**という。平文を暗号文にすることを「暗号化」といい、暗号文を平文にすることを「復号」といいます。
***

## 暗号鍵
暗号化には暗号鍵というものを使用します。
簡単かつ分かりやすい表現が難しいのですが…暗号化のアルゴリズム + 暗号鍵を使って暗号文にする、というようなイメージを持っておけば多分大丈夫です。
***
### ①共通鍵暗号方式
暗号化と復号で**同じ鍵**を使う方式のこと。
データを送信する側の暗号化も、受信する側の復号も同じキーを使うことになります。
共通暗号鍵方式はどちらも同じ鍵を用いるため、データのやり取りをスピーディに行うことができます。
ただし、「暗号鍵を受信側に安全に伝える方法がない」という大きな課題があります。
暗号鍵を盗聴されないように送ることが可能ならば、そもそもその方法でデータを送れば暗号化なんて必要ないのでは？という話です。
***
### ②公開鍵暗号方式
暗号化と復号で**違う鍵**を使用する方式。この方式では受信側が以下の二種類の鍵を用意します。

①暗号化に使う公開鍵
②復号に使う秘密鍵

①で暗号化したものは②の秘密鍵でのみ復号が行えるようになっています。
受信側は①を公開して配布するため誰でも暗号化はできますが、復号はその公開鍵のペアとなる唯一の秘密鍵でしかできません。
受信側は送信側に①を使って暗号化して送信してもらい自分しか知らない②を使って復号を行います。
***
### 共通鍵暗号方式の存在意義
上記の説明を見ると共通鍵暗号方式は一見不要に思えます。
しかし共通暗号方式の方が**高速に処理ができる**という明確なメリットがあるため、実は共通鍵暗号方式も多くの場面で使われています。
そして、盗聴に対する安全面では公開鍵暗号方式の方が高いのですが、公開鍵暗号方式では「なりすまし」を防ぐことは難しいです。
***
### ハイブリッド暗号方式
そこで①と②の良いとこ取りをしたやり方が考えられました。
送信者は共通鍵で平文を暗号化し、受信者の用意した公開鍵でその共通鍵を暗号化します。
送信者は受信者に対して共通鍵で暗号化した暗号文と公開鍵で暗号化した共通鍵を送付します。
受信者は送られてきた共通鍵を自身の秘密鍵で復号し、復号したその共通鍵で暗号文を平文に復号します。
以上のステップを踏むことで**データを高速にやり取りする**事と、**安全に共通鍵を相手に送信する**、という2つのメリットを実現することができます。
***
## 暗号化のアルゴリズム
・共通鍵暗号方式において現在主流となっているアルゴリズムは「**AES**」です。
・公開鍵暗号方式において現在主流となっているアルゴリズムは「**RSA**」です。
***
## デジタル署名
そしてなりすましを防ぐために登場したのが「**デジタル署名**」です。
公開鍵暗号方式でデータに「電子的な署名」をすることを言います。ただし、デジタル署名は秘密鍵で暗号化して公開鍵で復号をします。
デジタル署名を行うことで文書の作成者を特定できて、なりすましと改ざんを検知することができます。
***
### 認証局とデジタル証明書
デジタル署名が署名者本人のものであることを証明する、「**デジタル証明書**」というものを発行できる第三者機関が存在していて、**認証局（CA）**と呼ばれています。
認証局を使ってなりすましを防ぐ、この仕組みのことを**PKI（公開鍵基盤）**といいます。
***
### ハッシュ関数
文字列を入力すると一定の長さの値を出力する関数です。
ハッシュ関数から出力される値のことを「ダイジェスト」「メッセージダイジェスト」または「ハッシュ値」と呼びます。
ハッシュ関数のアルゴリズムとして有名なのが「**SHA-256**」というもので、256ビット長の値を出力できます。
***
# まとめ
今回は以下についての記事でした。
・共通鍵暗号方式
・公開鍵暗号方式
・デジタル署名

それぞれどのような仕組みの暗号技術なのかを掴んでおくと良いと思います。
How to show specific column with docker ps command

# How to show specific column with docker ps command

## Refs

- https://docs.docker.com/config/formatting/

## Prerequisite

- jq command

## First Example

```
# docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
CONTAINER ID   NAMES              STATUS
6649ac512517   jupyter-notebook   Up 15 hours (healthy)
adc3f126a364   cadvisor           Up 3 weeks (healthy)
45c106f51a6e   mailserver         Up 3 weeks (healthy)
f34501c9a42e   docker_exporter    Up 32 hours
```

## What column name is available?

- Get available column names with json key name!

```
# docker container ls --format='{{json .}}' | jq -rcs '.[0] | keys[]'
Command
CreatedAt
ID
Image
Labels
LocalVolumes
Mounts
Names
Networks
Ports
RunningFor
Size
State
Status
```

## Second Examples

```
# docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Size}}"
CONTAINER ID   NAMES              STATUS                  SIZE
6649ac512517   jupyter-notebook   Up 15 hours (healthy)   3.27MB (virtual 4.41GB)
adc3f126a364   cadvisor           Up 3 weeks (healthy)    0B (virtual 80.8MB)
45c106f51a6e   mailserver         Up 3 weeks (healthy)    764kB (virtual 629MB)
f34501c9a42e   docker_exporter    Up 32 hours             0B (virtual 57.2MB)
```
```
# docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Image}}\t{{.Size}}"
CONTAINER ID   NAMES              STATUS                  IMAGE
6649ac512517   jupyter-notebook   Up 15 hours (healthy)   jupyter_20240419/scipy-notebook:2023-08-19
adc3f126a364   cadvisor           Up 3 weeks (healthy)    gcr.io/cadvisor/cadvisor:v0.49.1
45c106f51a6e   mailserver         Up 3 weeks (healthy)    ghcr.io/docker-mailserver/docker-mailserver:latest
f34501c9a42e   docker_exporter    Up 32 hours             prometheusnet/docker_exporter
```
```
# docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"
```
```
# docker ps --no-trunc --format "table {{.Names}}\t{{.Mounts}}"
NAMES              MOUNTS
pihole             /root/docker-compose/etc-dnsmasq.d,/root/docker-compose/etc-pihole
postgres_na24.2    /docker-postgres/na24.2/data
postgres_na23.4    /docker-postgres/na23.4/data
postgres_oo24.1    /docker-postgres/oo24.1/data
jupyter-notebook
jira2              jiraVolume
cadvisor           /var/lib/docker,/var/run,/dev/disk,/,/sys
mailserver         /etc/localtime,/docker-data/dms/config,/docker-data/dms/mail-logs,/docker-data/dms/mail-data,/docker-data/dms/mail-state
```
rowspanを指定してるtableの行をホバーした時にcssで同じ行の背景色を変更する方法

テーブルで`td`に`rowspan`を指定している時に、CSSで行のホバーで同じ行の背景色を変更する方法をご紹介します。

言葉での説明では分かりにくいので、画像を見てもらった方が理解できると思います。

## イメージ画像

![ezgif-3-69b2c7d08e.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1125523/8b2889b8-fef3-726d-8bf8-c5a990988a48.gif)
![ezgif-3-b571470bef.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1125523/8b85e95e-d9e9-d0bd-ac59-48a9fc07c8ae.gif)



## コード

### `rowspan="2"`の場合

```html
<table border="1">
  <tbody>
    <tr>
      <td rowspan="3">1行目</td>
      <td rowspan="3">1行目</td>
      <td>1行目</td>
    </tr>
    <tr>
      <td>1行目</td>
    </tr>
    <tr>
      <td>1行目</td>
    </tr>
    <tr>
      <td rowspan="3">2行目</td>
      <td rowspan="3">2行目</td>
      <td>2行目</td>
    </tr>
    <tr>
      <td>2行目</td>
    </tr>
    <tr>
      <td>2行目</td>
    </tr>
  </tbody>
</table>
```

奇数行をホバーした時はその行とひとつ下の行を指定して
偶数行をホバーした時はその行とひとつ上の行を指定するようにしています。

```css
table {
  width: 300px;
  border-collapse: separate;

  /* 奇数行のtrをホバー */
  tr:nth-child(odd):hover,
  /* 奇数行のtrをホバーした時のひとつ下の兄弟のtr */
  tr:nth-child(odd):hover + tr,
  /* 偶数行のtrをホバー */
  tr:nth-child(even):hover,
  /* 偶数行のtrをホバーしたときのひとつ上の兄弟のtr */
  tr:has(+ tr:nth-child(even):hover) {
    background-color: #ffffaa;
  }
}
```

### `rowspan="3"`の場合

```html
<table border="1">
  <tbody>
    <tr>
      <td rowspan="3">1行目</td>
      <td rowspan="3">1行目</td>
      <td>1行目</td>
    </tr>
    <tr>
      <td>1行目</td>
    </tr>
    <tr>
      <td>1行目</td>
    </tr>
    <tr>
      <td rowspan="3">2行目</td>
      <td rowspan="3">2行目</td>
      <td>2行目</td>
    </tr>
    <tr>
      <td>2行目</td>
    </tr>
    <tr>
      <td>2行目</td>
    </tr>
  </tbody>
</table>
```

考え方は`rowspan="2"`と同じで`3n + 1`のように指定方法が変わっただけです。

```css
table {
  width: 300px;
  border-collapse: separate;

  /* 3n+1行のtrをホバー */
  tr:nth-child(3n + 1):hover,
  /* 3n+1行のtrをホバーした時のひとつ下の兄弟のtr */
  tr:nth-child(3n + 1):hover + tr,
  /* 3n+1行のtrをホバーした時のふたつ下の兄弟のtr */
  tr:nth-child(3n + 1):hover + tr + tr,

  /* 3n+2行のtrをホバー */
  tr:nth-child(3n + 2):hover,
  /* 3n+2行のtrをホバーしたときのひとつ上の兄弟のtr */
  tr:has(+ tr:nth-child(3n + 2):hover),
  /* 3n+2行のtrをホバーした時のひとつ下の兄弟のtr */
  tr:nth-child(3n + 2):hover + tr,

  /* 3n行のtrをホバー */
  tr:nth-child(3n):hover,
  /* 3n行のtrをホバーしたときのひとつ上の兄弟のtr */
  tr:has(+ tr:nth-child(3n):hover),
  /* 3n行のtrをホバーしたときのふたつ上の兄弟のtr */
  tr:has(+ tr + tr:nth-child(3n):hover) {
    background-color: #ffffaa;
  }
}
```

## まとめ

テーブルでrowspanを指定している時にCSSでホバーで同じ行の背景色を変更する方法をご紹介しました。`rowspan="3"`や`rowspan="4"`も同じ方法で実装できますが、CSSの記述量がかなり増えるため、その場合はJavaScriptを使用した方が良いかもしれません。


## 最後に

### GoQSystemでは一緒に働いてくれる仲間を募集中です！

ご興味がある方は以下リンクよりご確認ください。

https://goqsystem.recruit.site?qiita=0f6f7892fae334350535
proxmox でIOエラー発生 その原因は？

https://qiita.com/shooskay/items/5725208065df4726d1b9

この記事で 作った サービスに アクセスできなくなった

proxmox の 管理画面を みると なにやら 黄色い△マークが 全部のVMについていた。
よく見ると io-error と 表示されていた。

proxmox io-error で 検索すると

https://qiita.com/oishi-d/items/6ebaba71151f24c21010

先人の記録に ストレージが パンパン に なってるとあった

お試しで インストールしていた vmを まるごと 消して ストレージの空き容量を確保した。

問題は解消したんだけど まだ △マークが 消えないので

https://kralis.dip.jp/dokuwiki/doku.php?id=ja:proxmox-ve:%E3%82%A8%E3%83%A9%E3%83%BC%E5%AF%BE%E5%BF%9C

ここに あるように ホストのシェルを 起動して 

```
qm resume <対象のVMのID>
```

で vmを 復帰させてみた。

△マーク が とれて サービスに アクセスできるようになった。
【Tableau】DATASaber:HandsOn - Intermediate II（Ord5）Q5解説

tableau datasaberになるための技術力に関する問題を解いていきたいと思います。
こちらの問題はtableauを始める方にぴったりだと思いますので、ぜひチャレンジしてみてください！
使用するデータは、「サンプル - スーパーストア.xls」を使用する。:arrow_down:
https://drive.google.com/drive/u/0/folders/1kXSb3fqPTt3VcPjGUSgOmrztlRfvvpMH

:white_check_mark:ord5-Q5

カテゴリごとに顧客区分の売上の割合を見たとき、「大企業」の売上が最も大きいカテゴリはどれですか。割合は各カテゴリごとを100％として計算してください。

・列に売上、行にカテゴリ、色に顧客区分を入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/9ca20dcb-ac8f-3e7e-42fd-f52aebc433d9.png)

・グラフの幅が細く見づらいので、セルのサイズ▶より高いを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/12df6194-b8e1-8746-2660-63dc1f0a6587.png)

・列の売上を右クリックし、表記さんを追加し、合計に対する割合を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/464ca0b6-fdd4-cd6b-0e3e-b211333b0704.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/4f5a0a8f-92bd-968f-cb44-0823946afb84.png)

・この場合だと%表記になったがぼグラフの大きさは変わっていない
　なぜならば全体を100%として割合を割り振っているからである。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/b9f414d5-0176-95f0-1704-444de5dd47ed.png)

・列の売上を右クリックし、表計算の編集から表（横）を選択することで横棒で100%表示にすることができる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/07f4f602-dbd2-f966-32c3-1118b0ee3b6c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/89001b64-a0c9-b23f-7f19-edaa79ba207f.png)

・左下の表示も300%となっており一個づつ100%になっているのがわかる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/e1540b9a-5aab-655f-7d2d-663b426163dd.png)

・よって回答としては、
カテゴリごとに顧客区分の売上の割合を見たとき、「大企業」の売上が最も大きいカテゴリはどれですか。割合は各カテゴリごとを100％として計算してください。
➡事務用品となる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/3c676f9b-d51c-d98c-c384-8023aa02c89a.png)

解説は以上になります！
最後まで読んでいただきありがとうございました！
もしよろしければ「いいね👍」お願いいたします！
robloxでassistant その55

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
コイン収集システムを作成せよ。

コインを作って、コインを降らせよ。
コインにぶつかると、得点が得られる。
得点を永続化せよ。
コインに爆弾を混ぜよ。
公開せよ。

# 手順
- ゲームの設定を開く
- 権限を公開にする。
- ファイル＞robloxに公開
- robloxstudioで、「最近のもの」クリック
- 左クリックし、「プレースのページを開く」

https://www.roblox.com/games/17401355319/unnamed


以上
テスト投稿

## テスト投稿

テスト投稿のPHPコードを書いてみる。

##### コード

```php:test_code.php
<?php
public function test()
{
    echo 'テスト投稿'
}
?>
```

## 参考文献
[Markdown記法 チートシート](https://qiita.com/Qiita/items/c686397e4a0f4f11683d)
robloxでassistant その54

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
コイン収集システムを作成せよ。

コインを作って、コインを降らせよ。
コインにぶつかると、得点が得られる。
得点を永続化せよ。
コインに爆弾を混ぜよ。

# 手順
- CoinをコピーしてBombを作る
- スクリプトを書く
```

local part = script.Parent
local explosionSound = Instance.new("Sound")
explosionSound.SoundId = "rbxassetid://5137964328"
explosionSound.Parent = part
local function explode()
	local explosion = Instance.new("Explosion")
	explosion.BlastRadius = 10
	explosion.BlastPressure = 500000
	explosion.Position = part.Position
	explosion.Parent = game.Workspace
	explosionSound:Play()
end

script.Parent.Touched:Connect(function(hit)
	local character = hit.Parent
	local humanoid = character:FindFirstChildWhichIsA("Humanoid")
	if humanoid then
		local player = Players:GetPlayerFromCharacter(character)
		part:Destroy()
		player.leaderstats.coin.Value = 0
		explode()
	end
end)




```
- ServerScriptServiceにスクリプトを追加

```
local storage = game:GetService("ReplicatedStorage")
local bomb = storage:FindFirstChild("Bomb"):Clone()
local x = math.random(-50, 50)
local z = math.random(-50, 50)
bomb.Parent = game.Workspace
bomb.Position = Vector3.new(x, 8, z)
while true do
	local coin = storage:FindFirstChild("Coin"):Clone()
	local x = math.random(-50, 50)
	local z = math.random(-50, 50)
	coin.Parent = game.Workspace
	coin.Position = Vector3.new(x, 8, z)
	wait(1)
end



```

以上。
SSGのプラグインがbuggyな事実が判明しコンコルド効果を実体験

# SSGのとあるプラグインにどうしようもないバグあることが判明

とあるSSGをつかっています。
SSG自体の挙動については初期段階で検証して、本格的な運用の是非を
きめるのです。

それにたいし、プラグインのばあい、「便利そう」っておもった瞬間に
導入するけど、検証の段階でバグがあると判明しても、SSG本体の運用履歴が
長すぎて、いまさら、異なるSSGに乗り移る気力がナイことに気づきました。

これってコンコルド効果ではないでしょうか？

# やったこと

SSGで数式を表示したいのでKaTeXプラグインをインストールしました。

私が使っているSSG(honkit)の場合、数式化した部分を次のように変換したいのです。
$（ドルマーク）で囲って、いわゆるTeXで内容を書きます。

実際、github サイトは数学レンダリングもサポートしています。
かなり馴染みのあるものだと思います。

Excel の組み込み関数について触れたいと思います。 Excel関数とは何ですか?
ドルマークはコピペしてもセルを固定したいときに使います。
ドルをコードブロック内にドルとして残しておきたいのです。
KaTeXプラグインのバグだとおもいますが、ドルがどこにあっても、やみくもに
`\{% math_inline %}`にかたっぱしから強制変換します。とてもこまった挙動です。

プラグインの作者はかなり前に開発を中止したようで応じてもらえないようです。

`Usage`をみると、インライン演算の場合はドル2つで囲み、ブロック演算の場合はドル2ヶ+改行で囲むと記載されており、本家TeXやGitHubなどのシンタックスと異なるはず。KaTeX自身のバージョンの問題（あたらしすぎる）かドル1個でもやってほしくないところまでやられます。しかもbackslashによるエスケープが効きません。
しかもフェンスコードブロック(backtick x3)の中まで、ドルを変換してくるのでかなりお手上げです。


# 問題/エラーの具体例

たとえばマークダウンソース側で

```
=\$A\$2
```

バックスラッシュを追加することでescapeできると考えたので、そうしました。

私が使用しているSSGの場合、htmlに変換すると、

```
\{% math_inline %}A\{% endmath_inline %}2
```

となります。

- ドル2つじゃないから変換しないはずなのに、変換。
- エスケープしているのにそれを無視して変換。

# 自分で試してみたこと

いろいろやりましたが、すべてダメでした。いまつかっているSSGをことなるものにのりかえるという手があります。たとえばnext.jsにするとか・・もはやその気力がありません。

# markdownの方言問題

たしかわたくしの理解がただしければ、ドルで数式モードに入るとか、backtick x3
でコードブロックに入るとかは標準シンタックスではなかったような気がします。それが原因なのかもしれません。

## 解決の方向に気力が向かない自分に向き合うためにここに書き残すこととした

コンコルド効果は、心理現象の一つで、あるSSGの運用を継続するとプラグイン起因の損失が出ると分かっていても、運用を継続してしまうひとの心理的傾向を指します。

具体的には、あるSSGへの継続的運用をつづけることがbuggyなレンダリング出力につながり、ちょっとやそっとで解決できないとわかっているにもかかわらず、
それまでの獲得スキルを惜しみ、他のに乗り移れない状態を指します。
インストール済みのFedoraを使って新しくFedoraをインストールする


手元の仮想マシンはFedora39でした。ということでFedora41が欲しいのでインストールします。

## 大まかな方針

DebianでいうdebootstrapみたいなことをFedoraでします。
すなわち、インストーラーのISOではなく（←ここ大事）動いているFedoraをつかって新しくFedoraをインストールします。

間違えちゃったらそこからなんとかすることを今回は重視します。（２箇所やらかしてあとでなんとかしてます）

## なんでそんなことするの？

- ISOをダウンロードして手作業で真心込めてGPGを検証してまたいつもどおりの手順で真心込めてインストールというのも面倒
- 間違って攻撃用のサイトからダウンロードしたくない
- やってみたい！
- そもそもほしいISOが見当たらない
    - 探し方が悪い？

## やってみよう

### 用意するもの

- インストール済みで動くFedora
- インストール先ストレージ
- 方針
    - パーティションこうしたい
    - このアプリ入れたい
    - UEFI？Legacy BIOS？

### 手順

#### インストール先の準備

この手順は全部お好みでします。

LUKSでLVMでBtrfsのサブボリュームというのもいいですね✨（今回はそこまでしませんがそういうのもいいですね）

1. お好みの感じでパーティション切ります
    - 今回はGPTでBIOSが１つと残り全部を１つにしました
2. お好みでmkfsします
    - 今回はシンプルにext4にしました
3. マウントします
    - 今回`/target`にマウントしました

#### ざっくりと必要そうなものをまとめてインストール

しばらく↓これをつけて普通に`dnf`するのが続きます。

```bash
 --releasever=41\
 --installroot=/target\
 --forcearch=x86_64\
```

やってることとしては`dnf`でインストールする時に

- x86_64の
- Fedora41を
- `/target`に

インストールするだけです。


こんなコマンドでざっくりとインストールします

```bash
sudo dnf\
 --releasever=41\
 --installroot=/target\
 --forcearch=x86_64\
 -y\
 group install\
 'Core'\
 'Guest Agents'\
 'Common NetworkManager Submodules'\
 'Standard'
```

たまたまQEmuで使いたいので`'Guest Agents'`をインストールしました。

#### カーネルをインストール

```bash
sudo dnf\
 --releasever=41\
 --installroot=/target\
 --forcearch=x86_64\
 -y\
 install\
 kernel
```

#### ブートローダーを（ルートファイルシステムに）インストール

```bash
sudo dnf\
 --releasever=41\
 --installroot=/target\
 --forcearch=x86_64\
 -y\
 install\
 grub2-pc
```

#### `chroot`の準備

仕方がないので大事なファイルシステムをマウントします。

```bash
sudo sh -c 'for i in dev dev/pts proc sys run;do mount --bind /$i /target/$i;done'
```

#### ブートローダーを（ブートセクターと`/boot`パーティションに）インストール

```bash
sudo chroot /target /bin/sh -c 'grub2-install /dev/vdb'
```

※私は完全に素で忘れていましたが`grub.cfg`も生成しておきましょう。初回の起動が面倒になります。

#### ユーザーを作る

お好みで管理者ユーザーを作ります。

```bash
sudo chroot /target /bin/sh -c 'visudo'
sudo chroot /target /bin/sh -c 'useradd -G wheel -m -s /bin/bash -u 1000 -U user'
sudo setenforce 0
sudo chroot /target /bin/sh -c 'passwd -d user'
sudo setenfoece 1
```

（大変不本意ながらやむを得ず嫌々仕方がなく）パスワードを変える時だけSELinuxをPermissiveにしました。お恥ずかしい限りですが時短です。

#### `fstab`を書く

```bash
/dev/vda / ext4 defaults 0 0
```

とかお好みの構成に応じて書きます。UUIDを使うのもいいですね。

#### 再起動

アンマウントとか面倒なのでもう一旦この環境は電源オフです。

※私は完全に素で忘れていましたが、一応電源オフの前にキーボードをお好みの配列に変えるのもおすすめです。

```bash
sudo systemctl poweroff
```

### やらかし対応

~~今回は説明用にあえて~~完全に本当に素でやらかしたので、なんとかします。

#### `grub.cfg`作ってなかった

起動するとGRUBがお伺いしてくるので

```
linux /boot/vmlinuz-6.9.0-64.fc41.x86_64 root=/dev/vda2 rw
initrd /boot/vmlinuz-6.9.0-64.fc41.x86_64.img
boot
```

例えばこんな感じで起動します。
一応Linuxですから面倒ですが起動はします。

次回から楽に起動させたいのでちゃんと設定します。

```bash
sudo kernel-install add 6.9.0-64.fc41.x86_64 /lib/modules/6.9.0-64.fc41.x86_64/vmlinuz
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
```
#### 日本語キーボードにし忘れた

一応日本語にしておきます。

```bash
sudo localectl set-keymap jp
sudo localectl set-x11-keymap jp
```

## 確認

設定の漏れがないかもう一回再起動して確認しましたが大丈夫そうです。

できあがり🎉🥳✨
【Tableau】DATASaber:9. HandsOn - Advanced II（Ord9）Q10　解説

tableau datasaberになるための技術力に関する問題を解いていきたいと思います。
こちらの問題はtableauを始める方にぴったりだと思いますので、ぜひチャレンジしてみてください！
使用するデータは、「サンプル - スーパーストア.xls」を使用する。:arrow_down:
https://drive.google.com/drive/u/0/folders/1kXSb3fqPTt3VcPjGUSgOmrztlRfvvpMH

:white_check_mark:ord9-Q10
地域別売上ランキングの推移を年四半期で見たとき、売上開始当初（2013/1Q）と最終四半期（2016/4Q）でランキングに推移のあった地域はどこですか。

・四半期ごとの売上を表示する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/4936c4d8-80ac-feee-af41-913ba5b30f99.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/21728864-c7c2-81de-6259-80cbf31b1056.png)

・地域を色に入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/a52de7bd-3e46-66d6-cf6f-da3fa4d49072.png)

・行内の合計を右クリックし、簡易表計算からランクをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/af03e505-52fc-8308-ee25-a69ab19b0c1c.png)

・再度右クリックし、次を使用して計算：地域を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/371e3cc6-4723-18dd-629f-c8501cb4976b.png)

・表示されているランキング順を反転する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/4f5cb258-9805-2f01-1f1d-f8c489e9fb72.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/9ac44bbc-ce10-c812-29b6-d1b2d944cb11.png)

・最初と最後だけ見えればいいので、最初と最後以外を選択肢、右クリックし、除外を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/4085e0ba-eec4-8d04-82d0-b37403a7ad48.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/8f57d6e4-971a-0942-4c71-13021fcb2b31.png)

そうすると関西地方と中部地方は変動があったことがわかる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/df418a9c-b7c0-c5ad-d546-e690bb7e96c4.png)


※最初と最後だけ表示する別の手法
・最初と最後だけを表示する表計算を作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/0b4261d1-9e0c-e436-f227-b9cacf1a7dcf.png)
・フィルターに適用する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119468/56f22e50-f47e-1553-165a-731493d118d9.png)


解説は以上になります！
最後まで読んでいただきありがとうございました！
もしよろしければ「いいね👍」お願いいたします！
robloxでassistant その53

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
コイン収集システムを作成せよ。

コインを作って、コインを降らせよ。
コインにぶつかると、得点が得られる。
得点を永続化せよ。

# 手順
- ServerScriptServiceにスクリプトを追加
```
local DataStoreService = game:GetService("DataStoreService")
local playerData = DataStoreService:GetDataStore("PlayerData0")

local function saveData(key, val)
	local success, errorMessage = pcall(function()
		playerData:SetAsync(key, val)
	end)
	if success then
		print("Data saved successfully!")
	else
		warn("Cannot save data for player!")
	end
end

local function loadData(key)
	local val
	local success, errorMessage = pcall(function()
		val = playerData:GetAsync(key)
	end)
	return val
end

game.Players.PlayerAdded:Connect(function(player)
	print("入った")
	local v = loadData(player.UserId .. "-coin")
	if v == nil then
		v = 0
	end
	local leaderstats = Instance.new("Folder", player)
	leaderstats.Name = "leaderstats"
	local coin = Instance.new("IntValue", leaderstats)
	coin.Name = "coin"
	coin.Value = v
end)

game.Players.PlayerRemoving:Connect(function(player)
	print("出た")
	local v = player.leaderstats.coin.Value
	saveData(player.UserId .. "-coin", v)
end)

```

以上。
robloxでassistant その52

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
コイン収集システムを作成せよ。

コインを作って、コインを降らせよ。
コインにぶつかると、得点が得られる。

# 手順
- Coinにスクリプトを追加
```
local Players = game:GetService("Players")
local part = script.Parent 
script.Parent.Touched:Connect(function(hit)
	local character = hit.Parent
	local humanoid = character:FindFirstChildWhichIsA("Humanoid")
	if humanoid then
		local player = Players:GetPlayerFromCharacter(character)
		part:Destroy()
		player.leaderstats.coin.Value += 1
	end
end)

```

- ServerScriptServiceにスクリプトを追加

```
game.Players.PlayerAdded:Connect(function(player)
	print("入った")
	local leaderstats = Instance.new("Folder", player)
	leaderstats.Name = "leaderstats"
	local coin = Instance.new("IntValue", leaderstats)
	coin.Name = "coin"
	coin.Value = 0
end)

game.Players.PlayerRemoving:Connect(function(player)
	print("出た")
end)

```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/746a6fc4-4089-3de9-7211-90cb95db2796.png)

以上。
[Google Cloud Speech-to-Text API(V2)] Javaで認識ツールの削除を取り消す

Cloud Speech-to-Text API V2(Java)を使用して、
認識ツールの削除を取り消す方法についてご紹介します。

**認識ツールとは**
認識ツールは構成可能で再利用可能な認識構成です。

頻繁に使用される認識構成を使用して認識ツールを作成すると、
認識リクエストを簡素化し、リクエストのサイズを削減できます。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Cloud Speech-to-Text API(V2)] JavaでSpeech-to-Text APIを使ってみる](https://qiita.com/doran/items/8e4ef896588229c4fed3)
を参照ください。
:::

|No||目次|
|---|---|---|
|1||[削除を取り消す](#1-削除を取り消す)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|

## 1. 削除を取り消す
認識ツールの削除を取り消します。

### 1.1. スコープ
OAuth2.0でこのAPIを実行するには、以下のスコープを指定してください。
サービスアカウントで実行する場合はスコープの指定は不要です。
```
https://www.googleapis.com/auth/cloud-platform
```

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    try(SpeechClient client = getSpeechClient()){
        UndeleteRecognizerRequest.Builder builder = UndeleteRecognizerRequest.newBuilder();
        builder.setName(String.format(
                    "projects/%s/locations/%s/recognizers/%s", 
                    "プロジェクトID","ロケーションID","認証ツールID"));
        
        OperationFuture<Recognizer,OperationMetadata> response = client.undeleteRecognizerAsync(builder.build());
        System.out.println(response.getName());

        Recognizer get = response.get();
        System.out.println(get);
    }
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//speech.googleapis.com/v2/projects/{プロジェクトID}/locations/{ロケーションID}/recognizers/{認証ツールID}:undelete
が実行されます。

#### 1.2.2. クエリパラメータ
ListRecognizersRequest.Builderのsetメソッドにより、リクエストボディを追加できます。
build()メソッドでListRecognizersRequestインスタンスを取得し、
listRecognizers()に渡します。

|メソッド|引数|説明|
|---|---|---|
|setName|String|【必須】リソース名<br>形式："projects/{プロジェクトID}/locations/{ロケーションID}/recognizers/{認証ツールID}"|
|setValidateOnly|boolean|リクエストを検証し、削除を取り消した認証ツールをプレビューするが実際には削除を取り取り消さない|
|setEtag|String|チェックサム値|

### 1.3. レスポンスの内容
#### OperationFuture\<Recognizer,OperationMetadata\>
|メソッド|戻り値|説明|
|---|---|---|
|getName|String|サーバーによって割り当てられた名前<br>形式："projects/{プロジェクトID}/locations/{ロケーションID}/recognizers/{認証ツールID}"|
|isDone|boolean|操作がまだ進行中であるか|
|getPollingFuture|RetryingFuture\<[OperationSnapshot](#operationsnapshot)\>|失敗またはキャンセルされた場合の操作のエラー結果|
|get|[⧉ Recognizer](https://qiita.com/doran/items/c952b2f5ea58e8911337#recognizer#recognizer)|認識ツールの情報|

#### OperationSnapshot
|メソッド|戻り値|説明|
|---|---|---|
|getErrorCode|StatusCode|エラーコード|
|getErrorMessage|String|開発者向けのエラーメッセージ|

<br>
<br>
おしまい。。
robloxでassistant その51

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
コイン収集システムを作成せよ。

コインを作って、コインを降らせよ。
コインにぶつかると、コインが消える。

# 手順
- CoinにScriptを追加
- スクリプトを書く
```
local Players = game:GetService("Players")
local part = script.Parent 
script.Parent.Touched:Connect(function(hit)
	local character = hit.Parent
	local humanoid = character:FindFirstChildWhichIsA("Humanoid")
	if humanoid then
		local player = Players:GetPlayerFromCharacter(character)
		part:Destroy()
	end
end)


```


以上。
robloxでassistant その50

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
コイン収集システムを作成せよ。

コインを作って、コインを降らせよ。

# 手順
- Workspaceに、円柱パーツを追加
- 名前をCoinに変更する
- Coinのsizeを(1, 4, 4)に変更する
- Coinの色を黄色にする
- CoinをReplicatedStorageの下に移動する。
- ServerScriptServiceにScriptを追加
- スクリプトを書く
```

local storage = game:GetService("ReplicatedStorage")
while true do
	local coin = storage:FindFirstChild("Coin"):Clone()
	local x = math.random(-50, 50)
	local z = math.random(-50, 50)
	coin.Parent = game.Workspace
	coin.Position = Vector3.new(x, 8, z)
	wait(1)
end


```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/c0750478-dd46-8284-19fc-08740171bc45.png)



以上。
MUI周りの依存関係エラーを解決した話

# 初めに

この記事では、MUIを使用している際に発生した依存関係のエラーとその解決方法について説明します。

# 問題

以下コードで、```'@mui/system' should be listed in the project's dependencies. Run 'npm i -S @mui/system' to add iteslintimport/no-extraneous-dependencies``` エラーが発生しました。

```typescript
import { styled } from '@mui/system';
```
# 試したこと

## @mui/system が依存関係に追加されていることを確認

```package.json``` には ```@mui/system``` がなかったものの、```yarn.lock``` ファイルと ```node_modules``` フォルダ内で ```@mui/system``` が正しく追加されていることを確認しました。具体的には、```@mui/material``` の依存関係に ```@mui/system``` が含まれていることが以下のように確認できました。

```typescript
"@mui/material@^5.14.10":
  version "5.15.15"
  resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.15.15.tgz#e3ba35f50b510aa677cec3261abddc2db7b20b59"
  integrity sha512-3zvWayJ+E1kzoIsvwyEvkTUKVKt1AjchFFns+JtluHCuvxgKcLSRJTADw37k0doaRtVAsyh8bz9Afqzv+KYrIA==
  dependencies:
    "@mui/system" "^5.15.15"

```

## プロジェクトの依存関係に追加

```package.json``` に存在しなかったので、以下コマンドを実行して ```package.json``` の ```dependencies``` に記載されましたが、解決できなかったです。

```
yarn add @mui/system
```

# 解決方法

以下のインポート方法に変えたら、ESLintのエラーが解消できました。

```typescript
import { styled } from '@mui/material/styles';
```
# 原因

原因として考えられるのは、MUIのバージョンや設定により、```@mui/system``` のモジュールが適切に認識されない場合があることです。特に、```@mui/material``` の依存関係に含まれているスタイル関連の機能を利用する場合、```@mui/material/styles``` からインポートする方が一般的のようです。

# 終わりに

この記事では、MUIを使用している際に発生した依存関係のエラーとその解決方法について説明しました。特に、インポート元を変更することで簡単に問題を解決できる場合があることを紹介しました。同様のエラーが起きたら、プロジェクトの依存関係を見直し、適切なインポート元を選択することで解決していきたいです。
【自分メモ】WordでShift+Ctrl+Vができた！

先ほどWindowsを更新してからWordの貼り付けがうまく行かない。
Ctrl+Alt+Vを押しても、形式の選択が表示されない。

バグか？
マシンを再起動したばかりなのに？

不便だ。

何気にShift+Ctrl+Vを押してみた。
**テキストだけ貼りついた！**

ついに実装されたか！
Excelをパワポも後で試そう。今は仕事だ。

### Excelでもできた！

すごく楽！！！
ExcelではCtrl+Alt+Vも有効なままだった。
なぜWordは無効にしちゃったんだろう？？？
UAFについて(途中)

# 概要
このフレームワークは、SpringやRailsなどといった特定言語に依存したレベルのフレームワークではなくて、より汎用的にどのような案件でも使いまわせる標準の運用規格程度のものである。

以下のような利点と欠点がある。

エンタープライズは複数の互いに大なり小なり相互作用しあうサービスから構成されている。
サービス自体はさらに細かくすると、１つ以上のOperational要素から構成され、
それらのコンテキスト内には、具体なResourceが１つ以上存在するという関係性。

# 利点
## ファシリテートの補助


## 観点の抜け漏れの予防

## モデルの複数の視点からの一貫性を保ちやすい

## 抽象から具体までの一貫性の担保の補助

# 欠点
## 学習コストが高い
一番の欠点はこれである。
UAFを使いこなすのには相当な種類のスキルセットが必要であり、
かつ国内で使用している企業の話を聞いた際にも、マトリクスをすべて埋めることが目的になっていたり、
トレーサビリティをとるのを忘れて、抽象なレイヤーと具体なレイヤーとの一貫性を失うといったことがある。

ちなみにガチでUAFを使ってビジネスアーキテクチャを考えるには、後述のスキルセットが必須である。

##

# 必要なスキルセット
## 具体と抽象の行き来
抽象からのトップダウン、具体からのボトムアップ
これらの高速な行き来を行い、かつ上位概念を下位が実現した形であることを保証しないといけない。

## 演繹法
上記のボトムアップで主に必要。
下位のResourceが正常に動かなくなったなどの制約を上位概念はボトムアップ式に受けてしまう。
これはリスコフの置換原則と絡めて理解しておかないといけない。

## クリーンアーキテクチャ
関心の分離やSLAP原則、SOLIDなどの原則の考え方が当たり前のように問われる。
UAFを使ったとしても、これらの原則をビジネスアーキテクチャから取り入れていないと、
変化に強いビジネスをそもそも実現できていないことにつながる。

## 匠メソッドを使った要求の関係性
経営層が関心を持つStrategicビューから開発者が関心を持つResourceビューまでの
要求の因果関係をUAFのrequirements列に定義してあげる。
この要求と各抽象度の要件の一貫性を保たないと、そもそもステークホルダーの喜ぶものが実現できないことになってしまう。
そのため、ステークホルダーマネジメントのスキルは必須ともいえる。

たとえば、Resourceビューに注目すると、
Resourceビューに関心を持った開発者やシステム運用者etcたちの要求が
Resourceビュー×requirements列に定義される。
それと要件に相当するResource Functionとの因果関係が成立することを保証するのだ。
そのためには、仮説推論スキルも必須である。

## 仮説推論スキル
要求と要件との間の関係性が成り立つことを

## KPIマネジメント
たとえばシステムユースケースに相当するResource Functionの非機能要件として、
Functionの変数セットをUAFではメジャメントとして定義することができる。
このメジャメントは、どの抽象度でも定義できるものである。
Functionの変数セットの中で特に優先度の高いものをチョイスしたら、
その変数と上位概念の変数との関係性をモニタリングし続けるのだ。

## TOC制約理論
UAFのConstrains列は、実はかなりおざなりにされている印象である。
マクロなStrategicビューでの制約条件から、ミクロレベルのResourceビューでの制約条件まで一気通貫でトレーサビリティをとるのだ。

マクロにエンタープライズ全体を眺めた際の制約条件として、たとえばある能力値が本当は目的達成のために100ほしいものの、実際には30しか叩き出せていないものとする。


## リスクマネジメント

## ロードマップ


## これ単体では成立しない


# Strategicビュー
またStrategicビューから
CPUについて

# CPUとは
CPU(Central Processing Unit : 中央処理装置)は、コンピュータの演算処理を行う装置。
コンピュータの脳みそ的なやつ。

# 基本構造
 - 演算装置(コア)
 - メモリー(レジスタ、L1~L3キャッシュ)
 - 入出力インターフェース

 # 命令の実行
 1. プログラムのフェッチ
    実行するプログラムを読み込む
 1. デコード
    実行しやすい形にプログラムを解釈する
 1. 演算対象データのフェッチ
    演算対象データを読み込む
 1. 演算
 1. 演算結果の記憶装置への出力

# クロック周波数
クロック周波数とは、電気信号(ON/OFF)の状態を切り替える速さ。

1GHz = 1秒に10億回の切替えが可能。

クロック周波数の高速化は2000年頃に頭打ちになった。(3GHzくらい)

そこからは、複数のコアを搭載することで高速化するのが流行。

# マルチコア
1つのCPUに複数のコアを搭載したもの。
基本的に総コア数が多いほどコンピュータ全体の性能はよくなる。

# メニーコア
1つのプロセッサに10個以上のコアを搭載したもの。



(引用:若手ITエンジニア 最強の指南書)
Javaで「変数の初期化と変数への値の代入」の動作を確認してみた

# 概要

Javaで「変数の初期化と変数への値の代入」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/var/index6.html

# 実装
```JSample6_1.java
class JSample6_1{
  public static void main(String[] args){
    int old;
    String name;

    old = 24;
    name = "Tarou Yamada";

    System.out.println(old);
    System.out.println(name);
  }
}
```
```JSample6_2.java
class JSample6_2{
  public static void main(String[] args){
    int old = 24;
    String name = "Tarou Yamada";

    System.out.println(old);
    System.out.println(name);
  }
}
```
```JSample6_3.java
class JSample6_3{
  public static void main(String[] args){
    int result;

    result = 84;
    System.out.println(result);

    result = 76;
    System.out.println(result);
  }
}
```

以下のコマンドを実行しました。
```
$ javac JSample6_1.java
$ java JSample6_1 
24
Tarou Yamada
$ javac JSample6_2.java 
$ java JSample6_2 
24
Tarou Yamada
$ javac JSample6_3.java 
$ java JSample6_3 
84
76
```

# まとめ

何かの役に立てばと。
GPT-4o対応【24年5月最新】API Key 発行手順と課金方法

## クレジット登録とチャージ

[https://platform.openai.com/account/api-keys](https://platform.openai.com/settings/organization/billing/overview) を開いてください。

画像の通り登録し、5ドル以上をチャージします。

[![Image from Gyazo](https://i.gyazo.com/35999023b8132888b3c4d99037648cb8.png)](https://gyazo.com/35999023b8132888b3c4d99037648cb8)
[![Image from Gyazo](https://i.gyazo.com/7c140b933649fe51be956c90a510a24f.png)](https://gyazo.com/7c140b933649fe51be956c90a510a24f)
[![Image from Gyazo](https://i.gyazo.com/33fae172eeb57820ae1cd6314b3f67c7.png)](https://gyazo.com/33fae172eeb57820ae1cd6314b3f67c7)

## API Keyの発行

<https://platform.openai.com/account/api-keys> を開いてください。

[![Image from Gyazo](https://i.gyazo.com/355f54322574d2dd8bec776020466a53.png)](https://gyazo.com/355f54322574d2dd8bec776020466a53)

`+ Create new secret key` をクリックします。

[![Image from Gyazo](https://i.gyazo.com/51eb1d4b5c7cf242c8bf1642506d1683.png)](https://gyazo.com/51eb1d4b5c7cf242c8bf1642506d1683)

「LINE Bot用」などと入力します。これはAPIキーをあとで識別するためのものなので、入力必須ではありませんが、何かしら入れておくとあとで便利です。

[![Image from Gyazo](https://i.gyazo.com/820cbf341a314da22c11aec1c0fc31e5.png)](https://gyazo.com/820cbf341a314da22c11aec1c0fc31e5)

APIキーが作成されるので、Doneの上のコピーボタンをクリックしてAPIキーをコピーしておきます。

ここでコピーし損ねるとこのキーは二度と表示されませんので、メモ帳などに貼り付けておきましょう。

（とはいえ失念してしまっても、削除して再生成が簡単にできるのであまり問題ではありません）

## おまけ Organization IDのコピー

[https://platform.openai.com/account/api-keys](https://platform.openai.com/settings/organization/general) を開いてください。下記からコピーします。

[![Image from Gyazo](https://i.gyazo.com/9f3fc3a2caeb4b3c65c9daf693f19104.png)](https://gyazo.com/9f3fc3a2caeb4b3c65c9daf693f19104)

## 準備OK!色々な開発を楽しもう😊

 過去に書いた、ChatGPT API Keyを使ったプロダクト紹介記事です！

https://qiita.com/okinakamasayoshi/items/08d36273112000b7cd87

https://qiita.com/okinakamasayoshi/items/b3349556062fa7d3d8ab

https://qiita.com/okinakamasayoshi/items/478c9df40b608bc9ac09

https://qiita.com/okinakamasayoshi/items/01e0d454caea3a200b8e

https://protopedia.net/prototype/3769

Xもよければフォローしてね！

https://twitter.com/okinakamasayos1
ubuntuのSSHログインが遅い

## Raspberry Pi4を使ってるけど、OSはUbuntu  22.04.4 LTS
一家に一台、Linuxサーバが家にあると便利。  
OSはRaspberry PiOSじゃなくて、素のUbuntu。  

sshログインする時にたまーに遅くなる現象。  
20秒ぐらいなので確かに遅いのだけど我慢はできなくもないという微妙な間。  
なんとかならんかと思い、
調べてみたらあっさり解決できたので備忘録的にメモとして残しとく。  

## 原因：sshログイン時の名前解決に時間がかかっている
参考：[【Linux】SSH接続に時間がかかる場合の対処法【備忘】](https://gametech.vatchlog.com/2019/02/13/ssh-timewait/)

どうやらSSH接続する時にクライアントIPを名前解決しようとしているよう。  
ということであれば、hostsファイルに逆引きレコードを書くか、  
sshd_configにDNSを使わないように設定を変える必要がある。  

今回は後者のsshd_config変更をやってみた。  

## sshd_config変更
sshd_configを編集する。  
```
sudo vi /etc/ssh/sshd_config
```

`UseDNS no`がコメントになっているので、コメントアウトをするだけ。

変更後はsshd再起動。

```
sudo service sshd restart
```

以上！  


## おまけ:Amazon Linux 2023などはデフォルトでUseDNS noになっている
それだけと味気ないので、AWS(Amazon Linux 2023)ではどうなってるか調べてみたｗ  


https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/compare-with-al2.html#ssh-host-key


>さらに、**デフォルトの sshd_config ファイルの AL2023 構成設定には UseDNS=no が含まれます。この新しい設定により、DNS 障害によってインスタンスとの ssh セッションを確立できなくなる可能性が低下します。**
>その対価として、authorized_keys ファイル内の from=hostname.domain,hostname.domain ラインのエントリが解決されなくなります。
>sshd が DNS 名を解決しようとしなくなるため、カンマで区切られた hostname.domain のそれぞれの値を IP address に対応する値に変換する必要があります。


というわけで、DNS無効化で良さげ。  
その代わり上記のような制約もあるので注意。  

ま、個人で使う分には全然問題なし。
[AnimeShadingPlus」－Unity向けアニメ風キャラ用トゥーンシェーダーがリリースしました！

皆さん、こんにちは！
最近、作った新しいトゥーンシェーダー「[AnimeShadingPlus](https://assetstore.unity.com/packages/vfx/shaders/anime-shading-plus-281737)」がついにレビューを通過し、Unity Asset Storeで公開されました！

このトゥーンシェーダーは、アニメ向のキャラクターに特化して設計されています。私はアニメ向のシェーディングのためのあらゆるテクニックを徹底的に調査しました。インターネット、書籍、雑誌などあらゆるリソースを探しました！このシェーダーは、Unityで高品質なアニメ向のキャラクターを実現したいスタジオや3Dアーティストにとって、素晴らしい出発点になるものと信じています。

![Untitled (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3794209/62fd1d91-f8b3-27a4-c61a-367b027707cc.png)


AnimeShadingPlusの機能ハイライト
- 詳細なドキュメント (これは本当に自信作です！) ぜひ時間を取って読んでみてください、きっと価値があるはずです。
- セルシェーディングの不自然なセルフシャドウを避けるため、キャラクターを別のシャドウマップにレンダリングします。
- ライティングを調整することで、2DアニメのようなFlatなシェーディングに近づけます。
- スタイライズされたライティングとPBRのブレンドに対応
- フェーススレッショルドマップ (スレッショルドマップ事前計算ツールあり)
- キャラクター専用のスクリーン空間アウトライン (FXAAと4種類のエッジ検出モードから選択可能)
- キャラクター専用のオブジェクト空間アウトライン (Inverted-Hull法) とスムーズ法線の事前計算 (オブジェクト空間アウトライン用)
- アニメキャラクター向けに調整されたトーンマッピング
- Unity 2023の「Screen Space Lens Flare」を2022/2021へ移植
- 目専用シェーダー

![330869759-2f65c811-a45b-4f6c-be7f-8cfe9a874ca1 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3794209/ab7afcd8-e188-988c-0b78-7fec6504da32.png)

ほかの詳細情報：
 - スクリーン空間アウトライン:
主に「二ノ国II」やスクリーン空間アウトラインを多用している他のプロジェクトからインスピレーションを得ています。距離フェードとカラーフェードオプションも搭載しています。
- フェーススレッショルドマップ:
「Hi-Fi Rush」や「原神」で使用されているテクノロジーと同じです。
- キャラクター専用シャドウマップ:
主に「Blue Protocol」からインスピレーションを得ています。
トーンマッピング:
- アニメ風のキャラクター向けトーンマッピングは、「Gravity Rush」を参考した作った。

![Untitled 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3794209/6f4a3b74-4de8-d54f-b6a9-52e34d932fb8.png)


現時点での対応プラットフォーム:
URPシェーダーで、PC/Macに対応 (VRサポートは未対応)
iPhoneなどのハイエンドモバイルにも対応
パフォーマンスに関する詳細な説明は、[ドキュメントに記載されています](https://www.notion.so/erichu33/Performance-of-Different-Shaders-in-ASP-2d040665d6374f17a36f0f6de71ce626)。

用途:
これは汎用的なトゥーンシェーダーではありません。
すべての機能は、環境オブジェクトやプロップオブジェクトではなく、キャラクター用に設計されています。

これらの種類のシェーダーに興味がある場合は、ぜひ、アセットストへ確認ください。

https://assetstore.unity.com/packages/vfx/shaders/anime-shading-plus-281737

https://erichu33.notion.site/e9875988ae1e41caa5198370d9cc963d?v=dfa6e7384e8548f198855f1646b7aeb5&pvs=74

皆さんはどう思いますか？ 近いうちに日本語版ユーザーマニュアルに取り組み始めますので、お楽しみに！

<iframe width="560" height="315" src="https://www.youtube.com/embed/FFZF2QBp2RE?si=nDzG6AU_WEn94OtY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
Vue Routerを使用しているサイトで画面をリロードすると404エラーになる

私は最近の業務ではVueを用いた開発を行なっています。今まであまりVueは触ってこなかったのですが業務で使用しているため、個人でもVueを触っています。
ルーティングはVue Routerを使用してちょっとしたプロジェクトを作成しNetlifyへデプロイしました。
開発環境では問題なかったのですが、何気なくデプロイしたプロジェクトの下層ページでリロードしたところ404エラーになってしまいました。

## どうして404エラーになるのか

例えばサーバーサイドアプリケーションだとリクエストされたURLに対して紐づくページ内容をサーバーがクライアントに返します。しかしVueなどのSPAの場合、初回リクエスト時にアプリケーション全体のJavaScriptコードが返却され、その後は基本的にサーバーへリクエストを飛ばさず動的にDOMを書き換えています。URL（ブラウザのアドレスバー）が変わってもリクエストを飛ばさずクライアントで完結していて、動的にDOMを書き換え疑似的にページ遷移を行ない、ブラウザのセッション履歴を同期さています。基本的にはHTMLファイルはルートにひとつだけあってJavaScriptで中身だけ書き換えていますので下層ページでリロードすると404エラーになる訳です。ということはリロード以外にも下層ページのURLを直接叩いても404エラーになりますね。

## 対策方法

回避方法は[Vue Routerの公式ドキュメント](https://router.vuejs.org/guide/essentials/history-mode.html#example-server-configurations)に記載がありました。

> 問題を解決するには、サーバーにシンプルなキャッチオールフォールバックルートを追加するだけです。URLが静的アセットと一致しない場合、それはあなたのアプリが存在する同じindex.htmlページを提供すべきです。素晴らしいことですね！

今回私はNetlifyにデプロイしていますのでNetlifyでの対応方法を実際にやってみます。
Netlifyは2パターン紹介されていました。

### _redirects
_redirectsファイルを静的アセットフォルダに配置します。_redirectsという名前がアセットフォルダに入っているのが違和感あったのでもう1パターンを採用しました。
```shall:public/_redirects
/* /index.html 200
```

### netlify.toml
プロジェクト直下にnetlify.tomlを配置する方法です。ルートには様々な設定ファイルがあるのでこちらの方が自然な気がしました。

```netlify.toml
[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200
```

考えてみなくとも当たり前のことですが404エラーになるまですっかり頭になかったです。
私は鳥貴族に何回も行ってるのに串が1人前2本なのを毎回忘れて注文しすぎてしまいます。なのでまた新たにプロジェクトを作ったときはデプロイしてから気付くのでしょう。

おしまい
Proxy配下でPower BI DesktopからBigQueryコネクタを使おうとしたらはまった話

## はじめに
1年くらい前にはまってどうにか抜け出した時の話を記載します。
もしかしたら今のPower BI Desktopではもう解消されているかもしれませんが、解消されてない場合にこの記事が参考になったら幸いです。
※ちなみにsnowflakeを使用している方ならご存じの設定です。

::: note info
* 2通り方法がありますが、私が実施した環境では1つ目の方法ははまらなかったので「できたけど結果ダメだったやつ」と記載しています。
* 一部推測などが入りますので、異なる場合はご指摘いただければ幸いです。
:::

## 概要
以下のような状況でPower BI DesktopからBigQueryに接続する際、Power BI Desktopに最初からあるBigQueryコネクタでの接続ができずにはまりました。
* Google Cloudとオンプレミス環境はIPsec VPNで接続
* Proxy配下のパソコンにてPower BI Desktopを使用
※Proxyはインターネットへの接続の際に使用
* パソコンにはwinhttp proxyならびにブラウザプロキシ設定は導入済
* オンプレミスのDNSはいじれなく、PSCなどの小細工不可
※オンプレミスのDNSは外部の名前解決不可
* Power BI Serviceへの接続(レポートのアップロード)は実施可能
* Power BI DesktopでのMicrosoftアカウントログインは実施可能

## 発生事象と状況
発生事象と状況は以下の感じでした。
* Power BI DesktopのBigQueryコネクタでBigQueryに接続しようとするとエラー
(すいませんエラー内容を忘れましたので、思い出したら追記します。)
* パケットキャプチャをすると、どうやらProxyを経由せず、直接インターネットに抜けようとして遮断されている模様
(Power BI Serviceへの接続やEntraIDでのログインの実施は可能)
* DNSをいじれないので、PSCなどの名前解決不可、限定アクセスも不可
* オンプレミスから限定アクセスをする際はルーティングするかNATをかます必要があるが、そこもいじれないため断念
(そもそもDNSいじれない時点で不可)
* Microsoftのプロフェッショナルサポートに問い合わせて得られた方法でも解決は不可

## できたけど結果ダメだったやつ
当時偶然GoogleさんとPoCをしていましたので、お聞きしてみたところ「BigQueryコネクタを別でダウンロードしてODBC接続を追加すればいけるよ！」との案が。
そんな手が！と思い早速以下のGoogle Cloudさんドキュメントからたどってダウンロードしました。
* 該当ドキュメント
[BigQuery 用の ODBC ドライバと JDBC ドライバ](https://cloud.google.com/bigquery/docs/reference/odbc-jdbc-drivers?hl=ja)

ドライバをインストール・PCへ設定してからPower BI DesktopのODBC接続選択でBigQueryのドライバを選択し、接続すると問題なく成功しました。
(色々ドライバの設定をしないといけないですが、一応形にはなりました。)

接続には成功しましたが、Power BI Desktopにインストール時からあるBigQueryコネクタには「インポートモード」と「ダイレクトクエリモード」が選択可能ですが、ODBCドライバのほうでは選択ができないという問題が浮上し、採用できないという結果になりました。

その後もレジストリを変えたり、Power BI DesktopのインストールフォルダにあるBigQueryコネクタ用のフォルダをいじり倒しましたが、事象は改善されませんでした。

## できたけど不安しかないやつ
色々模索してた際にいきついたのはなんとsnowflakeさんの事象でした。
proxy配下で利用する際には環境変数「http_proxy」または「https_proxy」を設定する必要があり、それを設定してみるということを試しました。
(設定方法自体はGUIでもCUIでもあるし、Webにめちゃくちゃ転がってるのでそちらを参考にしてください。)

その結果、Power BI Desktopにインストール時から使えるBigQueryコネクタで接続ができ、なおかつ「インポートモード」と「ダイレクトクエリモード」が選択可能になりました。

ただ、今までパソコンに設定していないものをいきなり設定したので、ほかのアプリケーションがこの設定した環境変数を使用するようになっていた場合、不具合や意図しない動作になる可能性があったため、「できたけど不安しかないやつ」というタイトルにしています。
不偏分散はなぜn-1で割るのか

統計検定の勉強をしていて気になったので、考えてみました。
細かい計算は横に置いて、体感的な理解ができるように説明してみます。

# なぜn-1で割る？
標本分散と不偏分散を比較すると
標本分散：nで割る
不偏分散：n-1で割る
という差から　標本分散　＜　不偏分散　という大小関係がわかります。
この大小関係が理解の上で非常に重要なので、まずはここを抑えてください。

# 具体例を考える
さて、以下のような問題を考えます。
①A君は100枚のシールと1つの20面ダイスを持っています。
②A君は20面ダイスにこのシールを貼りました。
③ここにB君とC君がいます。
④B君はシールの数が100枚ということを知っていますが、各面に何枚ずつシールが貼られているかはわかりません。
⑤C君はシールの数を知りません。

この条件のもと、A君は20面ダイスを2回振り、
1回目で出たダイスの面にはシールが4個、
2回目で出たダイスの面にはシールが7個貼られていました。

## B君の立場
さて、B君はシールの数が100枚ということを知っています。つまり、**真の平均が5枚/面であることを知っています**
そこで、B君はこの真の平均を使って分散を計算してみることにしました。
$$
((5-4)^{2} + (5-7)^{2}) / 2 = 2.5
$$

## C君の立場
一方、C君はシールの数を知らないので**真の平均が何枚/面なのかを知りません**
そこで、標本平均を求め、それを用いて分散を計算してみることにしました
$$
μ=(4 + 7)/2 = 5.5 \\
$$

$$
((5.5-4)^{2} + (5.5-7)^{2}) / 2 = 2.25
$$

## 結果
B君とC君の計算結果には差が出ました。これはなぜでしょうか？
それは
**①標本平均は真の平均からずれる**
**②そのずれ方は分散を小さくする方向である**
ということに起因しています。このことから
標本分散　＜　真の分散
という大小関係が発生するため、これを補正するためにnではなくn-1で割る必要があったということです

以上
「因崇之曰久畄部加茂伊」はUniversal Dependenciesで書けるのか

釋天嶺『[狄島夜話記](https://qiita.com/KoichiYasuoka/items/cac66395bcb27ad081d4)』(享保19年)に出てくる「因崇之曰久畄部加茂伊」を、Universal Dependenciesで書いてみることにした。

```
# text = 因崇之曰久畄部加茂伊
1	因	因	ADV	v,副詞,判断,確定	_	2	advmod	_	Lang=lzh|SpaceAfter=No
2	崇	崇	VERB	v,動詞,行為,態度	_	0	root	_	Lang=lzh|SpaceAfter=No
3	之	之	PRON	n,代名詞,人称,止格	_	2	obj	_	Lang=lzh|SpaceAfter=No
4	曰	曰	VERB	v,動詞,行為,伝達	_	2	parataxis	_	Lang=lzh|SpaceAfter=No
5	久畄	kor	VERB	他動詞	_	6	acl	_	Lang=ain|SpaceAfter=No|Translit=kor
6	部	pe	NOUN	形式名詞	_	7	nmod	_	Lang=ain|SpaceAfter=No|Translit=pe
7	加茂伊	kamuy	NOUN	名詞	_	4	obj	_	Lang=ain|SpaceAfter=No|Translit=kamuy
```

![kor-pe-kamuy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428317/492dfe23-d1cb-89a6-5bfe-0f148628e31e.png)

前半の漢文には`Lang=lzh`を、後半のアイヌ語には`Lang=ain`を付けてみたのだが、それでも何とも気持ち悪い。「久畄部加茂伊」を固有名詞とみなして、一語として扱うのも手だが、それだと面白味がない。さて、なかなか難しいなあ。