OmniAICreator/Qiita-1.07M huggingface dataset:
virtualenvとpyenvメモ(Windows版)

## virtualenv
- インストール  
`pip install virtualenv`
- ディレクトリ作成  
`mkdir hogehoge`  
- ディレクトリ移動  
`cd hogehoge`
- 仮想環境作成  
`virtualenv venv`
- 仮想環境へ入る  
`source venv/Scripts/activate`
- pythonのバージョンを指定して仮想環境を作成する  
※結局pyenvで管理するので不要かも？  
`virtualenv -p python3.9.6 venv`
- 仮想環境に入った状態でパッケージインストールすれば、  
  仮想環境内にインストールされます。  
  `pip install requests`
  インストールすると`venv/Lib/site-packages`にインストールされます。
  ```txt
  __pycache__/     certifi/                     charset_normalizer-3.3.2.dist-info/  pip/                 requests/                   urllib3-2.2.2.dist-info/
  _virtualenv.pth  certifi-2024.6.2.dist-info/  idna/                                pip-24.1.dist-info/  requests-2.32.3.dist-info/
  _virtualenv.py   charset_normalizer/          idna-3.7.dist-info/                  pip-24.1.virtualenv  urllib3/
  ```
- おすすめはrequirements.txtを使ったインストール方法
  requirements.txtにインストールしたいパッケージ名を列挙します。  
  ```text
  requests
  numpy
  ```
  `pip install -r requirements.txt`

- ちなみにパッケージを消す時はこれな！  
`pip uninstall requests` or `cat requirements.txt | xargs -n 1 pip uninstall -y`
- 仮想環境から抜ける  
`deactivate`  

## pyenv
インストール方法は[こちら](https://github.com/pyenv-win/pyenv-win)のGithubを参照  
※インストールにあたりWindowsの方は事前に権限を変更する必要があります。
```powershell
PS C:\WINDOWS\system32> Get-ExecutionPolicy
Restricted
PS C:\WINDOWS\system32> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
PS C:\WINDOWS\system32> Get-ExecutionPolicy

```
- インストール(これはpowershellで実行な！！)  
`pip install pyenv-win --target %USERPROFILE%\.pyenv`  
  ※インストールできない場合は権限変えてね
  ```powershell
  PS C:\WINDOWS\system32> Get-ExecutionPolicy
  Restricted
  PS C:\WINDOWS\system32> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
  ```
- インストールできる一覧  
`pyenv install --list`  
- インストールする  
`pyenv install 3.12.3`  
- インストール済みのバージョンを表示させる  
`pyenv versions`  
- localを指定すると実行したディレクトリ内だけで、  
Pythonのバージョンが固定されます。  
`pyenv local 3.12.3`
- localに指定しているpythonのバージョンを確認する  
`pyenv local`
- globalは、フォルダを超えてもそのバージョンが使われます。  
`pyenv global 3.12.3`
- globalに指定しているpythonのバージョンを確認する  
`pyenv global`
BoxWORKS Tokyo 2024参加してみた

https://boxworks.jp/

# はじめに
2024/06/25 ザ・プリンス パークタワー東京 ボールルームにて開催されたBoxの展示会に一般参加してきた。
時間の都合上、目玉であるBoxCEOの登壇は見られなかった上、感想もザックリとはしているが、今回の展示会を通して得られた情報をまとめてみたので読んでいただけたら幸いだ。

![KSDCggyJdixTMSJ1719379659_1719379909.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3794351/28975090-4998-bbf7-9a8c-07ddf53abbf6.jpeg)


# まとめ
* AIはBox業界でも注目だよ
* コンプライアンス意識のセキュリティソフトも多いよ

# 話題の生成AI
　まずやはり目を引いたのがAIの文字だ。筆者が確認しただけでもブース参加34社中10社近くがAIを利用したサービスを紹介、セッションでもAIの話題が多く見られた。
生成AIによる対話型のサービスではマニュアルなどの文書を学習し、「○○製品について教えて」と聞けば「~~なソフトウェアです」という返答をしてくれる、社内サポートセンターの代わりの様なことができるらしい。
なるほど、煩雑化したマニュアルやどこにあるかわかりづらい古い物も、AIに聞けばものの数秒で返答してくれるのは便利だ。通常のBox内検索と違い、pdf文書や画像にも強いそうだ。
従来の生成AIと違い、Box内で完結するので機密事項が漏れる心配もない。

　他にも機械学習によるワークフローの自動化で、データを読み込んで自動で処理・分析を行ってくれるというものもあった。

　Box社もBoxAIを開発中（現在はBoxHubとの連携のみ）とのことで、この業界でもAIが注目の的であることがよくわかる。
ちなみにBox公式ブースでは、BoxNotesというホワイトボード系アプリに箇条書きで書きだしたアイデアを、自動で文書にまとめてくれるデモンストレーションを見ることができた。
 
:::note info
BoxHub
Boxのサービスの一つ。組織管理用ポータル。エンタープライズプラン以上でのみ使用可。
:::


# セキュリティソリューションの展示
 　AIの他にはセキュリティ面に関するものが多く、最近何かと話題のマルウェア・ランサムウェア対策の他、持ち出し禁止ソフトも多く見られた。
  中には完全クラウド化によって管理者が一元管理するものもあり、企業のコンプラ機運の高まりを感じた。

---

### 最後に
　恥ずかしながら筆者はこういった展示会に参加するのは初めてなのだが、思っていた以上に活気があり、Boxがそれほど注目されているということを肌で感じ取ることができた。今後のBoxの動向に、これからも注目していきたい。
「ムービングモチベーターズ」で各メンバーの「自己開示 / 他者理解」への意識がちょっと分かる

# はじめに

たのしそうなのでやってみましたが、思わぬ発見があったのでその共有です。

# ムービングモチベーターズとは

お互いの価値観を共有してモチベーションの可視化・共有をするゲームです。一般的には、メンバーが何にモチベーションを感じるのか、（複数回実施しているならば）価値観の変化はあったのかなど、チームビルディング的に利用してより効果的なコミュニケーションと深い相互理解の構築へとつなげるためのツールだと思っています。


# やりかた（オンライン）

1. **事前準備：** １０枚のカードを [ダウンロード](https://nuworks.jp/wp-content/uploads/2019/02/nuworks_moving-motivators_jp_v1_printerfriendly.pdf) し、オンラインのホワイトボードを準備する
1. **ベーステーマを決める：** ※ 我々のチームでは、共有しているコンテキストが仕事なので『仕事のモチベーション』にしました
1. **上位3つの価値観を選ぶ：** 『自分にとってのモチベーション ベスト３！』を決める
1. **発表する：** 順番と理由を他メンバーに向けて話す

https://nuworks.jp/ja/2016/10/26/moving-motivators/

# やってみた結果

※ 前提：チーム発足からだいたい６か月ほど経ったタイミングでやってみました

![ムービングモチベーターズ_結果.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3388832/b353deff-95c4-8cb9-8d9e-3229b6cda57b.jpeg)


チーム全体で「好奇心」の割合がすごく高く、みんなワクワク駆動開発しているようでした。


**みんなの感想：**

- 半年やっててなんとなく「この人はこういう価値観」というのは理解してたけど、本人の口から直接「なんでこの３つが上位にくるのか」を聞くとやっぱり納得感ある
- １０個の価値観について、コンディション変われば順位変わりそうなのもあるし、３つだけじゃ語れないのが人間ですよね！！全部順位付けしたかった！
- 他の人に抱いていたイメージと違う部分が多く、また発見も多くて面白かった
- 価値観並べるのはけっこう苦労したけど、自分の中でも整理できてよかった
- 割と予想通りの価値観だったってのもあり、もっとチームが早いフェーズの状態でチームビルディング的にやったらおもしろかったのかなってのもあるね

# ちょっと違う角度で見てみる

あるメンバーからこんな感想をいただきました。

『 私としては、各メンバーに対するイメージのズレはあんまりなかったです。これはある意味では、**チームの「透明性」や「可視性」が高い状態** なのかなと思っていて、それが改めて確認できたのがよかったです。また、本来「好奇心」の順位が高い人に単純作業ばかり着手してもらっている、みたいな状況もないので、そういう点でもチームのよいところを再確認できました。結論として、**「チームの次につなげるためのアクションがいらなそう」** という回答になるのかもしれないですね。』


# 『メンバーに抱いていたイメージとの乖離はどのくらい？』

上述の感想から、ムービングモチベーターズを実施することによって、**チームメンバーの「自己開示」と「他社理解」の姿勢** が垣間見えるとも思いました。というのは、他のメンバーが公開した価値観と自分自身がそのメンバーに抱いていたイメージの乖離がないということは、つまり日常の業務の中で（同期・非同期コミュニケーション問わず）、**他メンバーへ向けた「自己開示」 / コミュニケーションの中で「この人はこういうのが好きなんだろうな」という「他者理解」** が自然にできていることに他ならないからです。

我々のチームはこの半年間フルリモートで、実際に対面してコミュニケーションをとる機会はほぼなかったわけなのですが、わざわざ「俺はこういう人間だ！」と言わずとも、互いを尊重し、かつ、自己開示の伴った適切なコミュニケーションがとれていたのではないか、という嬉しい気付きがありました。

# ムービングモチベーターズはヘルスチェックとしても活用ができそう

自己開示と他者理解がどのチームでも必ずしも必要というわけではないかと思いますが、開発チームにおいてあったほうがよりよくなると思います。

特にこの辺はスクラムの５つの価値基準の１つ「尊敬（Respect）」に関わる大切な要素です。チームメンバーが互いに尊重しあいながら働くことが、健全な協働関係を築くために不可欠だからです。

> スクラムチームのメンバーは、お互いに能⼒のある独⽴した個⼈として尊敬し、⼀緒に働く⼈たちからも同じように尊敬される。

https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-Japanese.pdf

そんなこんなで、ムービングモチベーターズの実施によってモチベーションが可視化できるだけでなく、『メンバーが各メンバーに対して自己開示できているか』『メンバーが各メンバーの価値観を汲み取ろうとしているか』もちょっとは分かりそうですよね。なのでそういう理由で、ムービングモチベーターズはチームビルディング的にも活用できるし、チームの健康状態チェック的にも活用できるのでは？という気付きの共有でした。


# 参考：ゲームの内容をさらに深めるなら

https://management30.jp/2020/12/22/m30-mm-alternative/

# おわりに

ワタシは全然メンバーのマネジメントとかしてないです。
Rails Admin – 一覧ページでのデフォルトのソート順 ( ORDER )を決める 

# 正順

```rb
RailsAdmin.config do |config|
  config.model 'Example' do
    list do
      sort_by :name
    end
  end
end
```

# 逆順

```rb
RailsAdmin.config do |config|
  config.model 'Example' do
    list do
      field :name do
        sort_reverse true
      end
    end
  end
end
```

# 公式

https://github.com/railsadminteam/rails_admin/wiki/List#default-sortingrai


# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura
【論文毎日読んでみる #4】経済学からみた機械学習【"Machine learning: an applied econometric approach." (Mullainathanet al., 2017)】

# 読んだ論文
本記事は以下の論文を読んだ際に記録した要約とメモです。
[Mullainathan, Sendhil, and Jann Spiess. "Machine learning: an applied econometric approach." Journal of Economic Perspectives 31.2 (2017): 87-106.](https://pubs.aeaweb.org/doi/pdf/10.1257/jep.31.2.87)

この論文は、機械学習の技術を経済学にどのように応用できるかを探求しています。



# 要約とメモ
## 機械学習の概要
- 機械学習（教師あり学習）:
    - 予測問題を中心に展開し、xからyの予測を生成する。
    - 一般化可能なパターンを発見する能力に優れており、複雑で非常に柔軟な関数形式をデータに適合させることができる。
- 経済学では、yとxの関係の根底にあるパラメータβの推定が重要だが、機械学習アルゴリズムはこの目的には設計されていない。

## 機械学習の経済学への適用
- 新しいデータの利用:
    - 衛星画像を使用して経済活動を測定したり、企業の提出書類を使って産業を分類する。
    - 複雑なデータ（画像やテキスト）を理解するための予測前処理が重要。
- 推論タスク:
    - パラメータβ*に興味がある場合でも、予測タスクが含まれていることが多い。
    - 例：線形道具変数回帰の最初のステージは、事実上予測タスクである。
- 具体的なアプローチ
    - 回帰木:変数間の複雑な相互作用を自動的に探索し、木の形をとる関数を生成する。正則化と経験的なチューニングを用いてオーバーフィットを防ぎ、サンプル外での予測性能を向上させる。
    - LASSO:回帰モデルの複雑さを制約し、重要な変数のみを選択する。
    - ランダムフォレスト:多数の木の平均をとることで予測性能を向上させる。
## 実証実験
- アメリカ住宅調査データ:様々な機械学習手法の性能を評価。ホールドアウトサンプルを使用してパフォーマンスを評価し、オーバーフィットを防ぐ。
- 前処理やインピュテーション:Feigenbaum (2015a, b)は、機械学習分類器を過去の記録の個人マッチングに適用し、大恐慌時の社会的流動性を定量化。
- Bernheim et al. (2013)は、調査回答を観察可能な行動と関連付け、実際の選択を予測するツールを提供。
- 推定問題:道具変数回帰や異質な治療効果の推定など、予測タスクを含む手法が役立つ。例：Chernozhukov et al. (2016) は、治療効果推定において高次元のコントロールを考慮。
- 政策応用
    - 裁判官の判断改善:予測アルゴリズムを使用して、裁判官の判断（被告が裁判所に出廷するかどうか）を改善。
    - 教員の採用:教員の質を予測し、採用時に利用可能な情報を活用して決定。
    - 貧困ターゲティング:機械学習を用いて、貧困スコアカードの精度を向上。
## 長期的な視点
- 新しい問題への取り組み:機械学習ツールは、新しいデータや手法を提供するだけでなく、新しい問題に焦点を当てることで研究の範囲を広げる。ランダム化比較試験の増加により、実証研究者が取り組む質問の種類が変化。
## 結論
- 機械学習は経済学に新たなツールを提供し、予測と因果推論の両方で強力な手法を提供する。
- 経済学者は、機械学習の技術を活用することで、より精度の高い予測モデルを構築し、新たな経済洞察を得ることができる。
[GitHub]新規Slashコマンドを登録

# GitHubでのPullRequest等のコメントで時短する

今までIaCのDryRunの実行結果などの長い出力をPullRequestのコメントに記載する際には
以下のような記述を毎回コピペしていました。

```md
<details>
<summary>xxx</summary>

aaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbb
ccccccccccccccccccccc
</details>
```

これを毎回コピペするのは面倒なので、GitHubのSlashコマンドを使って簡単に記述できるようにしました。

## 設定方法

- GitHubの設定画面にアクセス
https://github.com/settings/replies

1. Add a saved reply
![github001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567112/2f90f1a0-3fe4-b392-49fe-585f31598323.png)
2. 内容を入力
![github002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567112/9241ac7c-bba3-08d0-d42e-59c94c1dc4ac.png)

## 使い方

1. コメントを記述したい箇所に以下のように記述
![github003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567112/7ea7e027-af3d-da1c-69bc-06a2c71e0636.png)
2. ”/”を入力すると登録した内容が表示される
![github004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567112/53510d34-5c74-78fe-d8dd-c834508f6ced.png)
3. 設定した定義ファイルが表示されるので選択
![github005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567112/4126f5d6-7ad6-c56d-fa9d-679d40c09ac8.png)
4. 実際の表示を確認
![github006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567112/7e58ca08-0aea-614c-dddf-33a001a94973.png)

## まとめ

```md
<details><summary>Details</summary>
<p>



</p>
</details> 
```

という形式でよければ初期設定で登録してあるのでそちらを利用でOKです。

ただ、自分のようにカスタマイズしたい場合は予め登録しておくと便利かもしれません。
Pybricks何deg/s出せる？

Pybricksでは`dc(モーターのパワー)`には100までの制限がありますが、`run(モーターのスピード)`には特に制限が設けられていません。
とりあえず、何deg/sまでスピードが出せるのか検証するだけです。

# 検証
環境はSPIKE Prime、電力供給あり(充電中)です。
## 速度を見る
```py
from pybricks.parameters import Port
from pybricks.pupdevices import Motor
from pybricks.tools import wait

motor = Motor(Port.A)
cnt = 0
total = 0
motor.dc(100)
wait(10000)

while True:
    cnt += 1
    total += motor.speed()
    print(total/cnt)
```
こちらの速度測定プログラムで`dc(100)`の場合の速度を測ります。
```
1263.028
1263.024
1263.02
1263.016
1263.011
1263.003
1262.995
~~省略~~
1240.872
1240.875
1240.878
1240.881
1240.884
1240.887
```
平均値を計算してみると、速度は一定ではなく1263deg/sから1240deg/sあたりを彷徨っている事がわかります。Lモーターに置いても同様の計測を行ったところ、1150deg/sから1170deg/sあたりになりました。

## それぞれ計測
次に最高速と最低速度を計測します。
```py
from pybricks.hubs import PrimeHub
from pybricks.parameters import Port
from pybricks.pupdevices import Motor
from pybricks.tools import wait, StopWatch

hub = PrimeHub()
motor = Motor(Port.A)
time = StopWatch()
cnt = 0
total = 0
min = 10000
max = 0
motor.dc(100)
wait(10000)
time.reset()

while True:
    cnt += 1
    total += motor.speed()
    if motor.speed() < min:
        min = motor.speed()
    if motor.speed() > max:
        max = motor.speed()
    if time.time() > 60000:
        break
print("Average: ", total/cnt)
print("Min: ", min)
print("Max: ", max)
```

### パワー100
こちらのコードで(`dc(100)'で)60秒間計測してみたところ、それぞれ以下のような結果になりました。
| `dc(100)` | Mモーター | Lモーター |
| --- | --- | --- |
| 平均 (ave) | 1240.857 | 1160.183 |
| 最低 (min) | 1124 | 1040 |
| 最高 (max) | 1354 | 1303 |

### スピード1000
ついでに`dc(100)`を`run(1000)`に置き換えて、実行してみてどのくらい正しく実行されているかも計測しました。

| `run(1000)` | Mモーター | Lモーター |
| --- | --- | --- |
| 平均 (ave) | 999.9902 | 999.9998 |
| 最低 (min) | 889 | 920 |
| 最高 (max) | 1110 | 1098 |

### スピード9999(オーバー)
`run(9999)`に設定した際に最高速度が出てくれるのかも検証します。

| `run(9999)` | Mモーター | Lモーター |
| --- | --- | --- |
| 平均 (ave) | 999.9515 | 999.9941 |
| 最低 (min) | 887 | 913 |
| 最高 (max) | 1108 | 1122 |

残念ながら1000が最大値として設定されていて、それ以上は`run()`では出せないようです。

# まとめ
速度は割と安定している印象があったので、序盤はスピード指定でも大丈夫そうですね。

Lモーターの方が安定して目標値が出るので、精度が必要な移動にはLモーターを選ぶのが正解だと思います。

制度は必要なく、速度があればいい場合はMモーターがいいですね。俊敏な動作が期待できます。
IBM i Services Directory : QSYS2.Save_File_Objects 表関数　SAVF保管オブジェクトの表示

SAVFに保管したオブジェクトの情報を表示します。オブジェクトタイプやオブジェクト名、その他でフィルターすることもできます。

## 概要
■表関数名：QSYS2.SAVE_FILE_OBJECTS
■カテゴリ：バックアップ・リカバリーサービス
■サポート：IBM i 7.4 SF99704 Level 25以降
■参照URL（IBM i 7.5）：https://www.ibm.com/docs/ja/i/7.5?topic=services-save-file-objects-table-function


## SAVOBJコマンドでスプールファイル、データキューの中身を保管できるのはご存じ？

大昔はなかったはずです。

```
SAVOBJ...  SPLFDTA(*ALL) QDTA(*DTAQ)
```

を指定すると保管できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/95721b7b-8671-e247-f4a3-872db40b4758.png)

## 使用例1 

こちらはマニュアル（インフォセンター）記載のサンプルです。
SAVFに保管されたオブジェクトのうち、スプールファイルだけをリストする、というちょっとマニアックな例ですね。

```
SELECT LIBRARY_NAME CONCAT '/' CONCAT OBJECT_NAME AS OUTPUT_QUEUE, SPOOLED_FILE_NAME, SPOOLED_FILE_NUMBER, CREATE_TIMESTAMP
FROM TABLE (QSYS2.SAVE_FILE_OBJECTS(SAVE_FILE => 'SAVF1', 
SAVE_FILE_LIBRARY => 'MYLIB', 
OBJECT_TYPE_FILTER => '*OUTQ', 
DETAILED_INFO => 'ALL'));
```

自分の環境のライブラリー名、SAVF名を変更してそのまま、実行してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/972e0e12-30c5-f057-3fd0-5c197d4701f8.png)

SAVFに保管されたスプールファイルがリストされました。作成日時もリストされます。

***マニュアル記載サンプルでは、リストするオブジェクトタイプを \*OUTQ 、 DETAILED_INFO を ALL としています。***

## 使用例2

もっと一般的なケースを試してみます。

```
OBJECT_TYPE_FILTER=> '*PGM'
DETAILED_INFO => 'ALL'
```
を指定してみます。


保管されたQGPLのプログラム一覧がリストされました。この例では数個しかリストされませんので処理速度はそこそこ速いですが、オブジェクト数が多いと相応に処理負荷がかかる（遅くなる）ようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/44798b58-787f-7564-0322-0241220071e4.png)


### SQLの処理時間を調べたい方は、

[こちらの記事](https://qiita.com/gomAnomalocaris/items/7b2f74b07a420f44e8c3)ご覧ください♪

## 使用例3

出力するカラムは上記マニュアルページに記載があります。例を実行してみます。
出力カラムとして以下を追加してみます。（SPOOLED_FILE_NAMEなどは除外しました）
```
OBJECT_ATTRIBUTE
TEXT_DESCRIPTION
SAVE_TIMESTAMP
```

***SAVFに保管されたPGMタイプのオブジェクトをリストする。オブジェクト属性とテキスト欄、保管日付もリストする。***
```
SELECT LIBRARY_NAME CONCAT '/' CONCAT OBJECT_NAME AS OUTPUT_QUEUE, OBJECT_ATTRIBUTE, TEXT_DESCRIPTION, SAVE_TIMESTAMP
FROM TABLE (QSYS2.SAVE_FILE_OBJECTS(SAVE_FILE => 'QGPLSV', 
SAVE_FILE_LIBRARY => 'GOMALIB', 
OBJECT_TYPE_FILTER => '*PGM' 
));
```

実行結果例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/fa8ca8cb-ebd1-d741-44cb-6203e2c2f3fb.png)

オブジェクト属性に RPGLE, CLLE, RPG, RPG38 等が表示されています。

## 補足 SAVOBJコマンドの場合、スプールファイル、データキュー中身保管コマンドはどうなる？

guriguriさんからのご質問です。
下記のようにSAVOBJコマンドにも同様なパラメーターがあり、スプールファイル、データキューの中身を保管要否選択できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/07467abe-d24c-5507-6d62-e71027d4b71b.png)
『小林さんちのメイドラゴン』のアイキャッチ（HTML版）

アニメ[『小林さんちのメイドラゴン』](https://maidragon.jp/)（2017）には、1話あたり2回、真ん中ちょっと過ぎと最後に近くなって、黄色い画面のアイキャッチが入ります。中央に5つの文字が左から順にピコピコと効果音とともに出てくる比較的単純な構成ですが、その文字列が微妙に興味深いのが特徴的です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2712175/0e60a9e8-a1c6-25ec-d67b-61adc1e3afce.png" width="300">

[「小林さんちのメイドラゴンで出てきたコード（小林さんを探せ！）」](https://qiita.com/ygkn/items/6b3be1afa31e4092826e)で語られているように、この番組は主人公はPythonプログラマです（第二期にはC++も出てくるが）。そのため、アイキャッチには`.name`（なにかのプロパティかTLD）とか`if(){`（なぜかPythonではない）なんてのも出てきて、ソフトウェアエンジニアを喜ばせてくれます。

で、これをHTML/JavaScriptで再構築しました（上記の画像）。

> 追記：Githubにリポジトリ（[https://github.com/stoyosawa/Kobayashi-San](https://github.com/stoyosawa/Kobayashi-San)）を作成しました。[こちら](https://html-preview.github.io/?url=https://github.com/stoyosawa/Kobayashi-San/blob/main/240701-eyecatch.html)をクリックすれば動作が確認できます。

背景画面色、フォントサイズ、文字描画インターバルなどはある程度は再現できたと思いますが、フォントファミリがわからない。こういうのって、たいていはWindowsやUnix系のフォントが使われないというのもありますが。そこで、えいやっとFranklin Gothic Bookを使うことにしました。ご推奨があればお教えください。

効果音もどんなのがよいかわからないので、適当に決めています。音ファイルはご自分で用意してください（35行目）。文字描画インターバルは0.6秒に設定しているので、それ以内の長さの音源が推奨です。あと、ブラウザがオーディオの自動再生をデフォルトでオフにしていると思うので、それは解除します。

アイキャッチ文字列は次の5つ用意しました。お好きなのを選んでください。もちろん、他の文字列を組み込むのも大歓迎です。

```javascript
    let eyecatches = {
      if: 'if(){',
      name: '.name',
      arrow: '↓↘→＋☆',
      add: '1+1=2'
    }
```

では、コード。

```html
<!DOCTYPE html>
<html lang="ja-JP">
<head>
  <meta charset="UTF-8">
  <style>
    body.kobayashi {
      background-color: #FDE93E;
    }
    div.screen {
      width: 640px;
      height: 360px;
      position: relative;
      /* border-style: dotted; */           /* 640x360 の枠。デバッグ用 */
      border-color: gray;
    }
    p.eyecatch {
      font-size: 62px;
      font-family: FranklinGothicBook, sans-serif;
      font-weight: bold;
      letter-spacing: 43px;
      margin: 0 0 0 0;
      padding: 0 0 0 0;
      position: absolute;
      top: 138px;
      left: 170px;
    }
  </style>
</head>
<body class="kobayashi">
  <div class="screen">
    <p class="eyecatch" id="eyecatch"></p>
  </div>

  <script>
    let sound = new Audio('beep-6-96243.mp3');
    let eyecatches = {
      if: 'if(){',
      name: '.name',
      arrow: '↓↘→＋☆',
      add: '1+1=2'
    }
    let pElement = document.getElementById('eyecatch');
    let text = eyecatches['if'];          /* Change me */
    let letters = text.split('');
    console.log(letters);

    let counter = 0;
    let timerId = setInterval(function() {
      sound.currentTime = 0;
      sound.play();

      let sliced = letters.slice(0, counter+1).join('');
      pElement.innerHTML = sliced;

      counter ++;
      if (counter >= text.length)
        clearInterval(timerId);

    }, 600);                                // 5文字で3秒くらい

  </script>
</body></html>
```

またつまらぬものを書いてしまった。
git push時のユーザー名とパスワード入力を省略する

# はじめに
毎回git push時にユーザー名とパスワードを入力するのが手間なので省略しています。

# やり方
.git/configファイルのurlで@の前にusername:passwordを加えるだけです。

```:.git/config
[remote "origin"]
	url = https://username:password@gitlab-hogehoge.git
```


# おわりに
入力を省略してパスワードを忘れないように気を付けましょう！
子供と生成AIによるお絵かき共同作業

## img2imgが楽しい

Stable Diffusionのimg2imgなどを用いると、子どもの何気ない落書きを元に様々なパターンの画像を生成できて面白いです。
ここでは、いくつか事例を紹介したいと思います。

## 実例

### ぐるぐるっとした落書き

#### インプット

![0.7741861823903413.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/9505a8b3-c6dc-f6a7-5153-6bc5c3158203.jpeg)


```
ogre by giger, zdzisław beksinski, greg rutkowski
```

#### アウトプット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/a7fc1d19-a605-a41f-2d31-1f1faff935f4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/c93b4719-fa34-b439-c1f4-615bfc0919d0.png)

### 赤いドラゴンっぽい何か

#### インプット

![0.5512372555335694.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/85b2fa61-0b43-58d2-78ad-0623b89fa0d2.jpeg)

```
legendary dragon, red biomechanical details, wearing epic bionic cyborg implants, inflateble shapes, wires, tubes, red veins, masterpiece, intricate, biopunk, highly detailed, artstation, concept art, cottage core, cinematic focus, polaroid photo, bleached, vintage, pastel colors, high - key lighting, soft lights, foggy, 8 k
```

#### アウトプット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/5ad1dbe7-f64a-1a2c-f7a7-82338f4dd855.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/b305db0d-7f7a-4024-a942-f2473d20cd32.png)


### ちょっと恐い魚

#### インプット

![0.4053246929028822.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/d0e3f590-59b3-56c6-2310-350336602269.jpeg)

```
dramatic art - portrait of a armored chaos fish from underground hallow terraria, exotic fish, by wlop, james jean, victo ngai! muted colors, very detailed, art fantasy by craig mullins, thomas kinkade
```

#### アウトプット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/e2593541-180c-4233-428b-014c45e05086.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/24856996-15ad-217e-0c79-612ae0a7ebf7.png)

### 怪物

これは子どもの隣で、私の書いた怪物の絵です。
全体の明るさがアウトプットに大きく影響するため、明度調整を行ってから変換しました。

#### インプット

![0.5626457093067181.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/659787a6-0a06-d380-b3cd-ed3f32923d7b.jpeg)

```
ogre by giger, zdzisław beksinski, greg rutkowski
```

#### アウトプット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/21046e4a-4368-2ae9-20ab-bbe92790fdda.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/a9476935-b88d-b607-729b-dc80cdcb183e.png)

## まとめ

元の絵からせっかくの子どものオリジナリティが失われるという点もありますが、子供と一緒に変換された仕上がりを見て驚いたりするのもまた一興です。

「ちょっと恐い魚」はチームラボのお絵かき水族館で描いた絵ですが、img2imgで一定の世界観への変換をした体験型の展示も面白いかもしれませんね。
とあるITエンジニア - メモの取り方

# メモの取り方

人からメモの取り方を聞かれたので整理してみると、自分の場合、次のようにメモを取っていた

並べてみると、けっこう使い分けていることが分かった

## プロジェクトに関するもの


- プロジェクトに関する課題 -> クライアントも使っている課題管理ツールに登録する
- プロジェクトに関するメモで、開発タスクとして取り組むTODO -> 開発用のチケット管理ツールに登録する
- プロジェクトに関するメモで、チームに共有しても良いもの -> プロジェクトのチャットに書く
- プロジェクトに関するメモで、自分用のちょっとしたもの -> プロジェクトのチャットで自分向けにDMする
- 開発定例、プランニング用のメモ (チャットに書くと流れてしまうが、チケット化する場所も特にないような情報 ) -> PC のメモアプリを使う

## プロジェクトに関しないもの


- 一般技術的なメモ -> Qiita や zenn  に記事として書いてしまう
- テキストや画像の簡単なバックアップ -> クリップボード履歴の管理ツール ( Alfred のクリップボード履歴とか ) を使ってクリップボードに記憶して、バックアップ替わりにすることもある



# メモ戦略

戦略は以下の通り「公開範囲を最大」にしていることが分かる

- チームで共有すべきものは、自分だけに閉じず、チームの見える場所に書く
- プロジェクト全体に共有すべきものは、チームだけに閉じず、プロジェクト全体に共有する
- 一般に共有すべきもの ( 一般技術的な情報 ) は、プロジェクトだけに閉じず、一般に公開する



# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura
ユニットテストの雑なアサーションが雑な UX を生んでいるかもしれないという話

## TL;DR

大体の製品は、利用者がプロダクトコードを閲覧できない。
ユニットテストにおいてアサーションが失敗した理由を明記するという行動を通して、製品のエラーに対する親切な説明を促し、利用者体験を向上させるきっかけを作ることができる。

## はじめに

コードを書くときに意識することの一つに「読みやすいコードを書く」ことが挙げられます。ですが、製品の利用者にとっては、コードの綺麗さは関係ありません。大事なのは操作が完了した際、またはエラーになった際に出てくるメッセージが分かりやすいことです。

これはユニットテストにおいても同じではないでしょうか？ユニットテストの利用者、つまり開発者にとって、テストが失敗した際に出てくるメッセージが分かりやすいことは重要だと考えています。

## アサーションがわかりにくいとどうなるか

例えば、あなたはブログサイトを運営していて、ブログの新規投稿処理を改修するとします。  
改修した結果、テストが以下の理由で失敗したら、あなたはどのように解釈しますか？

```text
AssertionError: 2 != 1
```

これは Python のエラーなのですが、

> 新規投稿で登録される記事は 1 件なのに 2 件登録されてしまった

と読む人もいれば、

> 投稿したユーザの ID は 1 が正しいけど実際は 2 だった

と読む人もいるかもしれません。

ですが、私は

> 記事に紐づけられたタグのうち、1 件がまだデータベースに登録されていないものだったので、タグ一覧を管理するテーブルに 1 件追加するはずだが、2 件追加されている

のつもりで書いていました。  
このように、単なる値の検証だけでは解釈が無数となり、テストがどういう理由で失敗しているのかを的確に開発者に伝えることは難しいことが分かります。

## アサーションが雑になれば UX も雑になる

アサーションが雑というのは、前述したような「テスト実行時のエラーメッセージが不明瞭である」ということです。

アサーションが雑だと、テストが失敗した際にテストが失敗したことしか分かりません。この場合、開発者がテストコードを一から読み、どこでどういう理由でテストが失敗したのかを調査する手間が生じます。しかし、開発者はテストコードを読める環境下にあるので、アサーションが雑でも開発に支障をきたすことはありません。テストコードと開発者という関係なら困ることはなさそうです。

アサーションと同じノリでプロダクトコードを書くとどうなるでしょうか。製品と製品の利用者という関係を、ブログサイトに記事を投稿する例で考えます。

> 利用者が記事を書き終え、投稿ボタンを押すと何やらポップアップが表示されました。  
> そこには「エラーが発生しました」とだけ書いてありました。

利用者はこの後何をすればいいでしょうか。記事は投稿できたのでしょうか。投稿をやり直さなければならないのでしょうか。それとも、サポートルームに問い合わせなければならないのでしょうか。

この状況で果たして、

> 分からなければプロダクトコードを確認してください。

と利用者に言い放つ開発者がいるでしょうか。いないですよね。

## アサーションにはメッセージを添える

Python の assert には

```python
assert actual == expected, f"足し算の結果は {expected} を期待していましたが {actual} になっています"
```

PHPUnit の assertSame には

```php
self.assertSame($expected, $actual, "●●テーブルに $expected 件登録されていません（$actual 件でした）")
```

などと、アサーションに関するメッセージを添えることができ、テストが失敗した際にこのメッセージを表示することができます。このメッセージを利用して、ユニットテストの実行者に原因を説明し、ネクストアクションを提示することが開発者体験の向上につながり、開発スピードも上がるのではないか、と考えます。

また、同じマインドをプロダクトコードに応用すれば、エラー発生時にどのような理由でエラーが発生したのか、このエラーに当たった人は次にどうすればよいのかを、わかりやすく書こうとします。サポートルームに頼らずとも、利用者に対して親切に解決策が提示できるようになります。

## まとめ

このように、ユニットテストのアサーションと UX にはどちらも体験がつきものです。製品の利用者がプロダクトコードを閲覧できないように、「開発者がテストコードを閲覧できない」という縛りをつけてテストコードを書くと、ユニットテストの開発者体験が自然に向上するのではないか、と考えます。

しかし、この縛りはテストコードを書く上で非常にコストのかかる手法ですし、開発には期限が設けられるのが常ですから、必ずしも今回紹介した手法にこだわってテストを書くのは大変なことです。  
少なくとも、製品を利用する側の立場にこだわってコードを書いていければいいなと思っています。

みなさんの参考になれば幸いです。
C_TS422_2021 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（25/100）

【25日目】
トピック 3：SAPS/4HANAのマスタデータ（14/22）

≪問題25≫
品目タイプは何に影響を与えますか。
（２つ選択）
□どの品目マスタ画面が、どのような順序で表示されるか。
□使用可能なプラント固有ステータスおよびプラント非依存ステータス
□品目を内製するか、外部調達するか、またはその両方にするか。
□使用可能な文書タイプとクラスカテゴリ

≪解答≫
■どの品目マスタ画面が、どのような順序で表示されるか。
□使用可能なプラント固有ステータスおよびプラント非依存ステータス
■品目を内製するか、外部調達するか、またはその両方にするか。
□使用可能な文書タイプとクラスカテゴリ

≪解説≫
◆品目登録時に、品目の品目タイプを定義する必要がある。品目タイプによって、品目に対して許可されるビジネスプロセス（販売、生産、購買など）および機能（部品表/配合表（BOM）における品目の使用や作業手順）が決まる。
◆同様の特性を持つ品目をグループにして、1つの品目タイプに割り当てる。これによって、さまざまな品目を社内の標準要件に従って管理することができる。
◆品目タイプによって以下が決まる。
（1）品目を更新することができる部門
（2）品目コードが内部で割り当てられるか、外部で割り当てられるか
（3）品目コードの採番範囲と間隔
（4）表示される画面とその順序
（5）入力する必要がある部門固有データ
（6）品目の数量変更が更新されるかどうか
（7）財務会計の在庫勘定に対する金額変更が更新されるかどうか
（8）品目が内製されるか、外部調達されるか、その両方か
（9）品目が倉庫に入るとき、または倉庫を出るときに、どの勘定に転記されるか
Playwright – 特定の要素をマウスオーバー ( HOVER ) する例

```ts
await page.getByText('Item').hover();
```

# 誤解


マウス操作をしなければいけないと思って Mouse のドキュメントを読んでも座標指定しかなくて諦めていたのだが、

https://playwright.dev/docs/api/class-mouse

Actions > Mouse click に普通あった

https://playwright.dev/docs/input#mouse-click


# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura
チャットツールでリアルなコミュニケーションをとるために相づちや絵文字だけの投稿をする

## はじめに

リモートワーク環境下では、出社しているときよりもチャットツールの利用が増え、どうしてもリアルなコミュニケーションが取りにくくなりがちです。  
そのため、ボイスチャットに積極的に繋ぐような環境を作ったり、ビデオ会議でカメラ ON にするなど、普段の会話をできるだけリアルに近づけようとしている方も多いかと思います。  
一方で、チャットツールにおける会話の仕方をリアルにしていくアプローチもあります。

ここでは、私が [Slack (チャットツール)](https://slack.com/) において意識していることをご紹介します。

## プラクティス

### 句読点の数を変える

> 飲み会中止なんですね。わかりました。

日本語的に正しく書くとこうなるんですが、これだと怒っていると誤解されることもあるようで。  
誤解されるのが怖いときは、句読点の数を変えましょう。

> 飲み会中止なんですねわかりました。。。

句点を増やすことでトホホ感（嘆き悲しむ様子）を表現できます。また、飲み会が中止であることを復唱する相づちも堅くならないよう、句読点を完全に省略して「わかりました」とくっつけました。  
「飲み会中止なんですね、、、」でもいいのですが、3 連続句読点を続けて使うと日本語としての味わいが薄れてしまうため、ここは意地でも異なる表記を使いましょう。

こんな書き方もあると思います。

> 飲み会中止なんですね、わ、わ、わかりました

「わかりました」の「わ」を繰り返して詰まらせることで、飲み会が突然中止になったという事実を受け入れられないでいる様子を表現しています。

### 絵文字を使う

これは人によって意見が分かれますが、柔らかい雰囲気の会社であれば受け入れられるかもしれません。

#### 例 1: 那須塩原に出張に行く場合

> 今度の那須塩原の出張の件だけど、

これでも全然いいんですが、ナスと塩と薔薇は絵文字が用意されているので、はじめに那須塩原の出張であることを端的に表す見出しを付けましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/934e7314-5d82-65c3-d30f-153eef534de8.png)

いかがでしょうか？見出しを読んだだけで那須塩原に新幹線で行くというのが一目でわかり、出張のことだとすぐに連想できます。

#### 例 2: 山本さんに連絡する場合

> ＠やまもとさん

Slack ではメンションを使えばいいのでは、、と思いつつ、ひらがなで宛名を書くという風潮も一部で広がっていたりします。絵文字を最大限に使うとこうなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/bc083fe5-1fcf-3034-9167-102ca5b9758d.png)

「山」「本」「Sun（さん）」をひとつずつ絵文字で表現します。  
とてもユーモアになりましたね。

#### 例 3: 語尾を絵文字に変換する

> 書類の提出は明後日でもよいでしょうか？明日は出張が入っておりますので・・・

「入っておりますので」は「入っておりますし」と読めますので、以下のようにも書けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/3d1226e1-0724-8f22-4144-8e2f2169d004.png)

「すし」を絵文字で置き換えました。おじさんっぽくなりましたね。  
寿司のあとの「・・・」をそのままにすると、絵文字が文中で使われていると判断されてさらにおじさんっぽくなってしまうので、一度絵文字を使い始めたら文末まですべて絵文字を使い続けるようにしましょう。  
解読不能になる心配はないです。よほどとんちんかんなことでない限り、相手は「明日は出張が入っており」までで思い出してくれます。

### 相づちを打つ

チャットだと忘れがちですが、

> うーん・・・

や

> えーと、

などの相づちもしっかり打ち込むことで、会話のリアルさをキープすることができます。

### 絵文字だけで返信する

これは相づちや表情の表現にとても有効です。Slack では絵文字だけを投稿すると大きく表示されます（設定を無効にしている場合を除く）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/55bcfc0b-ebdc-b2f3-2a7e-3029a420e9a2.png)

考えていて苦戦している場合、その間に全く連絡しないと相手が不安になりますので、苦戦している様子を投稿してあげましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/59e6f99f-8779-b6c9-7096-2be97cb714b3.png)

分からない場合はこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/961922c1-cd61-e3e3-c681-a5549164a6fe.png)

ちなみに現職では「わからない」絵文字単体の投稿を「強めのわからない」と揶揄するのが流行っています。

## 注意

フォーマルな場ではこれらプラクティスはおすすめできません。もう少し丁寧な表現が必要かもしれません。  
チャットツールをメールの延長として使っているだけ、という人も中にはいます。あえてチャットツールを使う理由がないのであれば、チャットツールではなく普通のメールに CC をたくさん入れて会話することも検討しましょう。その方がフォーマルさを維持できますし、経費の削減にもつながります。

## まとめ

いかがでしたでしょうか。チャットツールで絵文字を使うのは、リモートワークにおけるミスコミュニケーションを減らすだけでなく社員の雰囲気にも影響をもたらすかもしれません。よろしければ実践してみてください。
Cybersecurity Architect Expert が語る「知っておきたい10種類のサイバー攻撃と対策」

## はじめに
セキュリティ対策は、出来ていなくても動作に問題が生じることはなく、取り合えず、動いているから、問題ないなんて考えていると、意外な所で、痛い目に合います。設計漏れなんかがそれにあたるのでは、ないでしょうか？そこで、そうならない為に、エンジニアとして、最低限、知っておきたい10種類の脆弱性、攻撃例、対策方法について、まとめました。今後、システムを構築する際の参考にして頂けましたら、幸いです。

### 1. SQLインジェクション (SQL Injection)
**脆弱性**
アプリケーションがユーザー入力を適切に検証せずにSQLクエリに組み込む場合、攻撃者が任意のSQLコードを実行できる脆弱性。

**攻撃例**
攻撃者がログインフォームに `' OR '1'='1` などのSQLコードを入力し、データベースに不正アクセスする。

**対策方法**
- パラメータ化されたクエリを使用する。
- 入力データの検証とエスケープ処理を適切に行う。
- 権限管理を徹底する。
- 最新のバージョンのソフトウェアを使用する。

### 2. クロスサイトスクリプティング (XSS)
**脆弱性**
ウェブアプリケーションがユーザー入力を適切にエスケープせずにHTMLコンテンツとして表示する場合、攻撃者が悪意のあるスクリプトを実行できる脆弱性。

**攻撃例**
攻撃者がコメント欄に `<script>alert('XSS');</script>` のようなスクリプトを入力し、他のユーザーがそのページを閲覧した際にスクリプトが実行される。

**対策方法**
- 入力データの検証とエスケープ処理を適切に行う。
- コンテンツセキュリティポリシー（CSP）を導入する。
- 最新のバージョンのソフトウェアを使用する。

### 3. クロスサイトリクエストフォージェリ (CSRF)
**脆弱性**
ユーザーが認証された状態で、攻撃者がユーザーの意図しないリクエストを送信させる脆弱性。

**攻撃例**
攻撃者がユーザーに悪意のあるリンクをクリックさせ、ユーザーのアカウントで不正な操作（例：パスワード変更、送金）を行わせる。

**対策方法**
- CSRFトークンを使用する。
- リファラーチェックを行う。
- セッションの有効期限を短く設定する。

### 4. バッファオーバーフロー (Buffer Overflow)
**脆弱性**
プログラムが固定長のバッファに対して過剰なデータを書き込む場合、メモリの他の部分にデータが上書きされる脆弱性。

**攻撃例**
攻撃者が特定の入力を通じてバッファをオーバーフローさせ、任意のコードを実行する。

**対策方法**
- 入力データの検証と範囲チェックを行う。
- 安全なプログラミング言語を使用する。
- 最新のバージョンのソフトウェアを使用する。

### 5. ディレクトリトラバーサル (Directory Traversal)
**脆弱性**
アプリケーションがユーザー入力を適切に検証せずにファイルパスとして使用する場合、攻撃者がシステム上の任意のファイルにアクセスできる脆弱性。

**攻撃例**
攻撃者が `../../etc/passwd` のようなパスを入力し、システムの重要なファイルにアクセスする。

**対策方法**
- 入力データの検証を行う。
- パスの正規化を行う。
- 脆弱性対策パッチを適用する。
- ファイアウォールを設定する。

### 6. セッションハイジャック (Session Hijacking)
**脆弱性**
セッションIDが盗まれることで、攻撃者が正当なユーザーとしてシステムにアクセスできる脆弱性。

**攻撃例**
攻撃者がネットワークトラフィックを盗聴してセッションIDを取得し、そのIDを使ってユーザーのセッションを乗っ取る。

**対策方法**
- HTTPSを使用する。
- Cookieの設定を「常に削除する」に設定する。
- 脆弱性対策パッチを適用する。
- ファイアウォールを設定する。
- 二段階認証を利用する。

### 7. マルウェア (Malware)
**脆弱性**
システムやアプリケーションに対して悪意のあるソフトウェアがインストールされる脆弱性。

**攻撃例**
攻撃者がフィッシングメールを通じてマルウェアを配布し、ユーザーのシステムにインストールさせる。

**対策方法**
- セキュリティ対策ソフトを導入する。
- OSやソフトウェアを最新の状態に保つ。
- 怪しいメールや添付ファイルを開かない。
- 不審なWebサイトにアクセスしない。
- パスワードを使い分ける。
- ファイアウォールを設定する。

### 8. フィッシング (Phishing)
**脆弱性**
ユーザーが偽のウェブサイトやメールに騙されて個人情報を提供してしまう脆弱性。

**攻撃例**
攻撃者が銀行のログインページを模倣したウェブサイトを作成し、ユーザーにログイン情報を入力させる。

**対策方法**
- 送信者やURLの正当性を確認する。
- 公式WebサイトのURLを確認してからアクセスする。
- フィッシング対策ソフトを導入する。

### 9. ランサムウェア (Ransomware)
**脆弱性**
コンピュータシステムを暗号化し、使用不能にしたうえで、復旧の対価として身代金を要求する悪質なソフトウェア。

**攻撃例**
攻撃者がリモートコード実行（RCE）脆弱性を悪用してランサムウェアをインストールする。

**対策方法**
- バックアップを定期的に行う。
- 最新のセキュリティ対策ソフトを導入する。
- 従業員へのセキュリティ教育を徹底する。

### 10. ブルートフォース攻撃 (Brute Force Attack)
**脆弱性**
パスワードなどの認証情報を推測するために、様々な組み合わせを自動的に試行する攻撃。

**攻撃例**
攻撃者が自動化ツールを使用して、パスワードを推測し続ける。

**対策方法**
- 強力なパスワードを設定する。
- 二段階認証を有効にする。
- アカウントロックアウト機能を有効にする。

これらの脆弱性と攻撃の例を理解し、適切な対策を講じることで、システムやアプリケーションのセキュリティを強化することができます。

__ご参考　ハンズオンで攻撃の流れを確認することも出来ます__

https://catalog.workshops.aws/startup-security-stay-secure-while-building-quickly/ja-JP
C_TS4FI_2021 SAP Certified Associate - SAP S/4HANA 2021 for Financial Accounting対策（10/100）

【10日目】
トピック 1：組織割当およびプロセス統合（10/15）

≪問題10≫
財務会計で代入を定義します。代入の各ステップに対して、次のどのパーツを定義する必要がありますか。
正しい答えを2つ選択してください。
□代入値
□前提条件
□呼出位置
□チェック明細

≪解答≫
■代入値
■前提条件
□呼出位置
□チェック明細

◆代入は「前提条件」と「代入値」の2つの要素から構成されます。
◆代入は正しい「呼出位置」を選択して登録する必要がありますが、「呼出位置」は構成要素ではありません。
static変数の性質をかんたんに理解する

# はじめに

static変数の性質が簡単に理解できるよう、以下のコードを記述しました。
コード下のwandboxからどなたでも実行結果の確認が可能です。

~~~static_test.c
#include <stdio.h>

int num_chars(char *str)
{
    static int num_chars;

    while (*str)
    {
        str++;
        num_chars++;
    }
    return (num_chars);
}

int main(void)
{
    char    *str1 = "hello";
    
    printf("%s has %d chars.\n", str1, num_chars(str1));
    
    printf("%s has %d chars.\n", str1, num_chars(str1));
    
    return (0);
}
~~~

https://wandbox.org/permlink/Xb3LvGgP5vOR761S

# staic変数の2つの性質
__【暗黙的に0で初期化される】__
　一般的な変数は初期化を明示的に行う必要がありますが、static変数は0で初期化されます。このとき、初期化はプログラム中の最初の宣言時のみ実行されます。


__【プログラムの実行中、値が保持され続ける】__
　ローカル変数（宣言された関数内のみが寿命の変数)であれば一度の関数呼び出しが終了した時点で値が初期化されますが、static変数の場合、プログラム全体の実行中値が保持され続けます。
　今回の例では、一度目のnum_chars関数の呼び出しあとにnum_chars変数の中身が残っており、2回目の呼び出しの際に更に加算されることで本来5文字を期待したい戻り値が10文字になっています。

 # 終わりに
 取り組んだ学校の課題で学んだ内容をシンプルにアウトプットしました。なにかの参考になれば幸いです。
minecraft 新executeコマンド 一覧

# 目的
新executeの構文を毎回忘れるのでそのための備忘録。
# サブコマンド一覧(目次も兼ねてます)
1. [as](#as)
2. [at](#at)
3. [positioned](#positioned)
4. [run](#run)
5. [if](#if)
6. [unless](#unless)
7. [rotated](#rotated)
8. [facing](#facing)
9. [align](#align)
10. [anchored](#anchored)
11. [in](#in)
# 簡単な解説
## as
### 構文
```
/execute as 実行者（セレクター）
```
コマンドの実行者を変える。
（実際に場所を変えるわけではない）
その後の@sがasで指定したものになる。
## at
### 構文
```
/execute at 実行者（セレクター）
```
コマンドの実行場所を変える。（エンティティ）
（実際に場所を変える）
その後の相対座標での実行場所がatで指定したものになる。
## positioned
### 構文
```
/execute positioned 座標
```
コマンドの実行場所を変える。（座標）
（実際に場所を変える）
その後の実行場所がpositionedで指定したものになる。
## run
### 構文
```
/execute run 実行コマンド
```
### 説明
ほぼ確実に一番最後に来るサブコマンド。
何かのコマンドを実行する。
そのため、これだけで使うことはあまりない。
## if
### 構文
```
/execute if 条件
```
条件すべてがあっている場合のみ実行される。
## unless
### 構文
```
/execute unless 条件
```
条件すべてがあっていない場合のみ実行される。
## rotated
作成中
## facing
作成中
## align
作成中
## anchored
### 構文　
```
/execute anchored 基準
```
基準には、feetかeyesが入る。
feetを入れると今後の相対座標やfacingなどの指定が足元を基準に、
eyesを入れると今後の相対座標やfacingなどの指定が目元を基準になる。
## in
### 構文　
```
/execute in ディメンション名
```
指定したディメンションにいるものとしてコマンドを実行する
私が .bash_profile に書いていて便利なやつを紹介するよ

## 重複したコマンド履歴を削除する

コマンド履歴をきれいにしたい方におすすめです。

```sh
export HISTCONTROL=ignoreboth:erasedups
```

## ランダムパスワードを生成する

外部のパスワード生成サイトを使いたくないよ、という方はコマンドを自分で用意してみましょう。  
`/dev/urandom` は推測されやすいみたいなので `/dev/random` から生成しています。

参考：https://serverfault.com/questions/283294/how-to-read-in-n-random-characters-from-dev-urandom

```sh
randpw() {
  local COUNT=$1
  head -c 1000 /dev/random | tr -dc '!-~' | fold -w "${COUNT}" | head -n 1
}
```

## cd したとき Python の仮想環境があったら有効化する (Windows/Linux 対応)

`. .venv/bin/activate` とかを叩く手間が省けて便利です。  
仮想環境のあるディレクトリの外に出ると deactivate もされます。

参考：https://stackoverflow.com/questions/45216663/how-to-automatically-activate-virtualenvs-when-cding-into-a-directory

```sh
# check if terminal is MinGW
__is_mingw() {
  local kernel_name
  kernel_name="$(uname -s)"
  if [[ "${kernel_name^^}" =~ "MINGW" ]]; then
    return 0
  else
    return 1
  fi
}

# overload builtin "cd"
__after_cd() {
  # https://stackoverflow.com/questions/45216663/how-to-automatically-activate-virtualenvs-when-cding-into-a-directory
  if [[ -z "$VIRTUAL_ENV" ]]; then
    local venv_contained_dir
    ## If env folder is found then activate the virtualenv
    if [[ -d ./.venv ]]; then
      venv_contained_dir="."
    elif [[ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]]; then
      local git_repo_root
      git_repo_root="$(git root)"
      if [[ -d "$git_repo_root"/.venv ]]; then
        venv_contained_dir="$git_repo_root"
      fi
    fi

    if [[ -z "$venv_contained_dir" ]]; then
      return 0
    fi

    local activate_bin_path
    if __is_mingw; then
      activate_bin_path=".venv/Scripts/activate"
    else
      activate_bin_path=".venv/bin/activate"
    fi

    if [[ ! -f "$venv_contained_dir"/"$activate_bin_path" ]]; then
      echo 'venv dir exists but activate command does not exist'
      return 0
    fi

    # shellcheck disable=SC1090
    source "$venv_contained_dir"/"$activate_bin_path"
  else
    local parent_dir
    local current_dir
    ## check the current folder belong to earlier VIRTUAL_ENV folder
    # if yes then do nothing
    # else deactivate
    if __is_mingw; then
      parent_dir=$(dirname "$VIRTUAL_ENV" | sed -e 's/C:/\/c/' | sed -e 's/\\/\//g')
    else
      parent_dir="$(dirname "$VIRTUAL_ENV")"
    fi
    current_dir=$(pwd -P)
    if [[ "$current_dir"/ != "$parent_dir"/* ]]; then
      deactivate
    fi
  fi
}

cd() {
  builtin cd "$@" || return 1
  __after_cd
}

__after_cd
```

## cat を dog で呼ぶ

犬派の人におすすめです。  
メリットは「犬派に好かれる :dog:」「両手をバランスよく使うので `cat` より速く打てる」です。  
デメリットは「猫派に嫌われる :cat:」「将来 `dog` コマンドが登場した際に衝突する」です。

```sh
alias dog='cat'
```

ちなみに私は猫派です。
「Infrastructure as Code クラウドにおけるサーバ管理の原則とプラクティス」を読み直した

[Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス](https://www.amazon.co.jp/dp/4873117968)
[O'Reilly Japan - Infrastructure as Code](https://www.oreilly.co.jp/books/9784873117966/)

![](https://images-na.ssl-images-amazon.com/images/I/51YYyQ6-t6L._SX389_BO1,204,203,200_.jpg)

[「Infrastructure as Code クラウドにおけるサーバ管理の原則とプラクティス」を一読して、その要点 #Cloud - Qiita](https://qiita.com/e99h2121/items/613b9fba42f5ffe39f1a) の通り、一読したはずだったのだが、まるで分かっちゃいなかったので [Amazon.co.jp: 詳解 Terraform 第3版 ―Infrastructure as Codeを実現する : Yevgeniy Brikman, 松浦 隼人: 本](https://www.amazon.co.jp/dp/4814400527) とともに再読した。

## IaC のメリットとデメリット

[インフラリソース構築(IaCとGUI)について思う事](https://zenn.dev/haggar/articles/7021f030da13f2)
- メリット ... 同じような設定を用意する事が容易になること
- デメリット ... 時間がかかること

踏まえ、今回は以下も合わせてつまみ読みしている。

## 詳解 Terraform 

[O'Reilly Japan - 詳解 Terraform 第3版](https://www.oreilly.co.jp/books/9784814400522/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/cabea26c-b91c-7dd6-c462-63c1095c29e0.png)


[新刊「Terraformの教科書」の要点をまとめてみた](https://zenn.dev/iret/articles/b9322ea6a345a7)
[詳解 Terraform（第3版）まとめ](https://zenn.dev/koizumi7010/scraps/2ba321716a072e)
[Terraform の基本的な仕組みから実践まで深く学べる一冊「詳解 Terraform 第3版」を読んだ - kakakakakku blog](https://kakakakakku.hatenablog.com/entry/2023/11/20/094234)

> 開発組織に IaC 文化が浸透していれば普通のことに思えるかもしれないけど，今後 IaC を推進するなら Terraform を使うかどうかに関わらず読んでおくと良いという内容が凝縮されていた👌 特に Terraform コードを GitHub などでバージョン管理をして，プルリクエストを使ってレビューをして，最終的にリリースをするなど，完璧に同じではないけど，アプリケーション側で実現しているライフサイクルのベストプラクティスをインフラ側にも適用しようという意図にも読み取れる

https://github.com/brikis98/terraform-up-and-running-code/tree/3rd-edition

>IaCを採用することは大きな投資であり、想定される利点だけでなく問題点も考慮する必要がある

>チームがIaCを採用するべきだと上司を説得したいなら、あなたのゴールはIaCに価値があることの証明ではなく、その時間であなたがやるはずだったどんな仕事よりも、IaCの採用が大きな価値を持つと示すこと

>ある開発者がTerraformを発見し、それによってできることに刺激を受け、熱い気持ちと興奮を抱えて会社に来て、皆にTerraformを紹介し、そして上司が「ダメだ」と言う
>開発者はがっかりして、やる気をなくしてしまいます。何もかも自動化してしまえるというのに、どうして皆これに価値を感じないんだ

>たくさんのバグを回避できるはずなのに！ 他にどんな方法で技術的負債の一挙返済ができるっていうんだ？ なんだって皆そんなに分からず屋なんだ？
>ここでの問題は、この開発者はTerraformのようなIaCツールを採用することの利点だけしか見えておらず、コストを見ていないことです。


[Terraform インストールしてリソース グループ作成するまで #Azure - Qiita](https://qiita.com/e99h2121/items/37b472740c9e977b408f)
[Terraform で Linux VM 作成して SSH するまで #Azure - Qiita](https://qiita.com/e99h2121/items/00781afec389a8b8e85e)

## IaC のメリット (再び)

[O'Reilly Japan - Infrastructure as Code](https://www.oreilly.co.jp/books/9784873117966/)
> Infrastructure as Codeは、コンピュータはその最も得意とすること（自動化）に集中し、開発者はその最も得意とすること（コーディング）に集中できる選択肢を提供します。

[OSSの運用自動化ソフト 注目の7製品まとめ（Chef/Puppet/Pulmi編）：注目のIaC（Infrastructure as Code）ソフトウェア7製品徹底比較　2022年版（2） - ＠IT](https://atmarkit.itmedia.co.jp/ait/articles/2212/28/news009.html)

以上です～
C_TS422_2021 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（24/100）

【24日目】
トピック 3：SAPS/4HANAのマスタデータ（13/22）

≪問題24≫
削減方針によって以下のどの時間資要素を削減できますか。
（３つ選択）
□製造後余裕
□完了待ち時間
□移動時間
□開始待ち時間
□入庫処理時間

≪解答≫
■製造後余裕
□完了待ち時間
■移動時間
■開始待ち時間
□入庫処理時間

≪解説≫
◆日程計画の計算されたリードタイムが基準日の間の時間よりも長い場合、システムはリードタイムを短縮するために段階的な削減方法を実行します。
◆作業詳細画面の作業間時間セクションで、各作業に削減方針を割り当てることができます。削減方針には、以下の4種類の設定があります。
（1）開始待ち時間 ⇒ 標準待ち時間から最小待ち時間へ
（2）処理時間 ⇒ 分割または重複
（3）移動時間 ⇒ 標準移動時間から最小移動時間へ
（4）製造前余裕、製造後余裕 ⇒ 削減する
◆完了待ち時間は削減の対象にはなりません。
Javaで「文字列の長さを取得する(String.length)」の動作を確認してみた

# 概要

Javaで「文字列の長さを取得する(String.length)」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

以下のファイルを作成しました。
```JSample6_1.java
class JSample6_1{
  public static void main(String[] args){
    String msg1 = "Hello";
    String msg2 = "東京都港区赤坂";

    System.out.println(msg1 + "の長さは " + msg1.length());
    System.out.println(msg2 + "の長さは " + msg2.length());
  }
}
```

以下のコマンドを実行しました。
```
$ javac JSample6_1.java 
$ java JSample6_1 
Helloの長さは 5
東京都港区赤坂の長さは 7
```

# まとめ

何かの役に立てばと。
生成AIと、通信時間ゼロ、待ち時間ゼロ、ロードタイムゼロでチャットする

# この記事で紹介すること

- 生成AIの待ち時間を全くかけずに、0.0秒で応答させる方法を紹介します

# できあがったもの

下のGIFが実際に動かしたところです。
ユーザーが注文を書き込むと、待ち時間なしで応答が始まって、注文の内容と料金の計算をしています。

![無題の動画 ‐ Clipchampで作成 (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/7890f60d-911d-e3f5-9362-eb30186208bd.gif)

GIFは少しかくついて見えますが、実際のサイトで確認いただくと滑らかに動きます。

【ソースコード】

ソースコードはこちらです。
※リソース（MMD）の利用は非営利に限られるため、srcのプロジェクト配下から外しています。

https://github.com/ShotaOki/shop-staff

【ウェブサイト】

こちらのサイトをPCで開くと実際の挙動を確認できます。

https://shotaoki.github.io/shop-staff/

![home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/9a892bbf-025a-6b75-d7a1-a2803adf1fd7.png)

※生成AIを動かすにはgroqのAPIキーが必要です。2024年7月1日現在、無料で取ることができます。

https://console.groq.com/keys

# 何をしているのか

groqの応答が他の生成AIに比べて非常に早いこともありますが、それだけではなく、会話の裏で通信をしています。

たとえば以下のようなフローの会話を考えます。

```text: 店員さん
いらっしゃいませ、ご注文をどうぞ。
```

```text: お客さん
ポテトを1つください。
```

```diff: 店員さん
+ ありがとうございます、ご注文を繰り返します。
ポテト一つ、こちらお間違いないでしょうか。
```

このやり取りの中の、+で強調した部分は定型文になります。
お客さんがどう答えたとしても、定型文の部分は同じ応答です。

```diff: 店員さん：注文が通らないパターン
+ ありがとうございます、ご注文を繰り返します。
エスカルゴを一つ……エスカルゴ？ 恐れ入ります、当店にエスカルゴのお取り扱いはございません。
```

```diff: 店員さん：注文が通るパターン
+ ありがとうございます、ご注文を繰り返します。
ポテトを一つ、ジンジャエールを一つ、こちらお間違いないでしょうか。
```

```diff: 店員さん：関係のないことを言われたパターン
+ ありがとうございます、ご注文を繰り返します。
差し支えなければ、あらためてご注文をお願いいたします。
```

定型文の部分は質問を投げた時点で決まるため、生成AIの応答が返る前に出力することができます。この定型文を出力している間に、生成AIの通信が完了すれば、まったく待ち時間をかけずに会話を続けることができます。

# ソースコード

typescriptで実装する場合は、以下のようなソースコードになります

```typescript
export class AsyncMessageContainer {
  // シーク位置
  private seekPoint: number = 0;
  // 表示するテキスト
  public displayMessage: string = "";

  // yieldで非同期イテレータを返します
  // イテレータを実行している間に、データを書き変えることができます
  async *display() {
    let rendered = "";
    for (const char of this) {
      rendered += char.char;
      yield rendered;
      // ストリーム実行: 待機時間だけ処理を止める
      await sleep(char.seekTime); // sleep処理
    }
  }

  // ストリームで表示する文字を返します
  next() {
    const displayMessage = this.displayMessage;
    const iterationItem: _IterationItem = {
      seekTime: 50, // 待機時間を定義する
      char: "", // テキストデータを設定する
    };
    // テキストデータを参照する
    if (this.seekPoint < displayMessage.length) {
      // 表示する文字を参照する
      iterationItem.char = displayMessage[this.seekPoint];
    }
    // シークポジションを次に進める
    this.seekPoint++;
    // 値を返す
    return {
      // 表示が完了していたらtrueを返す
      done: this.seekPoint > displayMessage.length ? true : false,
      // 文字と待ち時間を返す
      value: iterationItem,
    };
  }

  // イテレータを返す
  [Symbol.iterator]() {
    return this;
  }
}
```

このクラスを呼び出します。
通信が終わった時点でdisplayMessageにテキストを追加します。

```typescript
const container = new AsyncMessageContainer();
fetch("通信処理").then((response) => {
    // 結果を取得する
    container.displayMessage = container.displayMessage + /* 通信結果 */
})
for await (const message of container.display()) {
    // データを表示
    console.log(message)
}
```

関数名の頭に「*」をつけることで、yieldを使って処理の中断と再開をすること、処理の途中にデータを外から書き変えることができるようになります。それを利用して、ストリーミングで文字列を出力している間に、生成AIの通信の結果待ちをしています。
テストマネージャのミッション

# 前提ーテストプロセスについて
テストプロセスはプロジェクトの成功または欠陥の防止によって、価値を付加できる。これは、テストを風の吹くまま気の向くまま行っていては、実現できない可能性が高い。それゆえにテストのマネジメントが必要である。

# テストマネージャのミッション
- テストチームとして、それぞれのステークホルダーとの関係性を自覚し、それらのニーズに応える方法を理解する。
- テストマネージャはテストプロセスに影響を与えるorテストプロセスが影響を与える成果物、ステークホルダー、他の活動に敏感になること。そうしないと、テストプロセスの効率と効果を最適化できない可能性がある。
- それらの状況やニーズに応じて、活動や成果物を整える必要がある。
- チームの構成を決める。すなわち、適切なスキルをもったチームメンバを採用する。さらに、スキル要件は時間が経つと変化する可能性がある。そのため、適切なトレーニングを用意することが必要になることがある。
- プロジェクトの達成へのプレッシャーが厳しい・進行が速い場合も役割を果たせるよう自己研鑽が必要になる。
- プロジェクトマネジメントの知識、スキル、経験を持つこと。というのも、計画の作成、モニタリング&コントロール、ステークホルダへのレポーティングが含まれるからだ。コミュニケーションと渉外のスキルを用いて、ビジネス側の知見のある人物やシステム側のステークホルダとコミュニケーションすること。

# 参考資料
テスト技術者資格制度　Advanced Level シラバス日本語版　テストマネージャVersion 2012.J04

https://jstqb.jp/dl/JSTQB-Syllabus.Advanced_TM_Version2012.J04.pdf
議論のテクニック

# 前提
ここでの**議論**は、仕事やビジネスの場面での議論を想定しています。
特に、**ある施策をする/しない**という判断をめぐる議論にフォーカスしています。
論証型反論とは、主張を支える根拠と根拠から主張への導出部分に対して、反論を行うことです。
主張型反論とは、主張そのものに反対することです。

ざっくりとした言葉の定義は以上です。より詳しい定義が気になる方は以下を参照いただけると幸いです。

https://qiita.com/MaiTana/items/6b0e4e6901a4a052f7ef

# 議論のテクニック
テクニックには以下の4つがあります。
**1. 伝達の技術
2. 傾聴の技術
3. 質問の技術
4. 検証の技術**

1つずつ説明します。

# 伝達の技術
原案や反論を分かりやすく伝える技術。	
-** 最初に話すことの全体像**(全ての要素と順序)を示す。
例：最初に、プロジェクトのテスターを増員するべき理由を述べます。次に、増員によりかかるコストを述べます。最後に、増員がプロジェクトに参加する時期を述べます。
- 並列している情報は**ナンバリング**する。
- 項目ごとに**見出し**を付ける。例：「メリットの1つ目はテストの進行速度アップです。」
- **先に要点**を述べる。例：「テスターの進捗の予実を示します。グラフをご覧ください。このグラフは...」
- リンクの説明では**共通の言葉**を使う。例：テスト担当者を増員すると、遅延を解消できます。テスト担当者を増員すると、一日あたりのテストケースの実行数が10個から30個になります。実行数が30個になれば、5日で遅延を解消できる見込みです。
- 上記のテクニックを下図にまとめた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/bbfab8a5-00e8-c349-f99a-e21bcaa38cda.png)

# 傾聴の技術
論点を掘り出したり、先鋭化させるために、他人の主張を注意深く聞く。
- 実際の議論では複数の論点が同時に並行して議論される。それらを混乱しないように、論点がどう議論されているかを正しく聞き取る。そこから、原案や反論の根拠を聞き取る。
- そのために、**司会者(ファシリテーター)が議論の流れをメモ**にとる。この時、議論の**参加者全員が確認できるよう**ホワイトボードなどに書くのがよい。堀り下げるべき論点について問題提起したり、論点がそれたら修正を促す。メモの仕方は図を参照。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/14f61a63-05c3-7f28-0014-7bdcd202ca23.png)

- 主張と、理由とデータと聞き分ける。まず、主張を特定する。そのあと、自分の頭の中で「なぜ？」と根拠を確認する。その根拠の中に理由とデータがあるかを確認する。さらに、理由をきいたら「なぜ？」ともう一歩背後にある根拠を確認する。
- 反論を聞く時は、反対論者が述べるべきことを予想しながら聞くと、論点がずれることを防げる。
		
# 質問の技術
論点を掘り出したり、先鋭化させるために、他人から情報を引き出す	
- 論点を掘り出したり、先鋭化させたりするために、意味が分からない点、論点は質問する。また、決まった結論は質問を通じて共通認識を参加者の間で作る。
- 質問を利用して相手を**攻める**。相手の主張が根拠を伴っていない場合、根拠があるかを質問で聞く。あるいは、根拠の精度が低いことを責める。また、根拠が十分に主張を支えられていないことを質問する。さらに、クローズドクエスチョンにより相手の答えを誘導し、議論の方向性をコントロールすることができる。ただし、威圧的な印象を与えることがある。

# 検証の技術
論点を先鋭化するために、根拠が正しいかをチェックする。
- 論証型反論では、**根拠が根拠になっているかどうか**を検証する必要がある。理由が根拠になっているかどうかをチェックする。理由が根拠になっていないの場合は**リンクが欠けている場合**と、**主張を歪曲する**場合がある。さらに、データが根拠になっているかもチェックする。データが根拠になっていない場合の例は、**データで主張まで暗示して済ませてしまうが、データが主張を裏付けられていない場合**である(例：日本の政治において、政治家の責任は重要だ。だが、A政治家は賄賂を行った)。

理由が根拠になっていない場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/99d7a734-81ec-d3e3-8a5b-d6b730d8c9bb.png)

主張を歪曲する場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/316375f0-118f-8686-e60b-f9c77fd453c1.png)

データが主張を裏付けられていない場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/10e7e5f4-6777-8948-c1a2-46d250106a56.png)

# 準備の技術
論点をちゃんと先鋭化するために、あらかじめ論点やデータを整理する。	
- 議論の前に、施策のメリットとデメリットが生じること、あるいは生じないことを立証する方法を考える。原案を提示するならば、主張型反論への対策も準備しておく。
- データを準備する。メリット/デメリットが生じるという主張を支えるデータを仕入れておく。さらに、メリット/デメリットの大きさを主張するためのデータも必要。もしもデータが入手できないならば、大まかに推定する。推定の方法にはフェルミ推定がある。
- あなたが原案提示側ならば、反論側が述べるであろうデメリットに対する論証型反論を準備する。一方、反論側ならば、原案に対する主張型反論と論証型反論を準備する。
- 自分の主張を検証する、つまり根拠が主張を支えているか確かめる。

# 参考資料
論理が伝わる 世界標準の「議論の技術」 Win-Winへと導く5つの技法 (ブルーバックス 1914)

https://www.amazon.co.jp/dp/4062579146
C_TS422_2021 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（23/100）

【23日目】
トピック 3：SAPS/4HANAのマスタデータ（12/22）

≪問題23≫
複数の部品表/配合表（BOM）で、それぞれ異なる組み合わせの構成品目が生成される理由（要因）は何ですか。
（２つ選択）
□ロットサイズ
□BOM明細ステータス
□製造日付
□BOMヘッダステータス

≪解答≫
■ロットサイズ
□BOM明細ステータス
■製造日付
□BOMヘッダステータス

≪解説≫
◆1つの品目に複数の構成品目一覧がある場合、マルチBOMを使用してBOMを管理することができます。
◆製品の構成品目は、製造する日付と数量に応じて、さまざまな組み合わせが考えられます。このようなタイプの製品は、一般的に、代替BOMまたは代替によって表されます。
◆外部のBOM番号として、BOMグループ項目を使用することができます。マルチBOMのすべての代替は1つの内部BOM番号に保存されます。マルチBOMのすべての代替に1つの名称を割り当てるためには、BOMヘッダにBOMグループを入力します。
◆代替は、以下のパラメータに基づく品目マスタレコードの選択方法区分に従って選択されます。
（1）ロットサイズ
（2）日付
（3）製造バージョン
【解説】グローバルIPアドレスとプライベートIPアドレスの違い

# IPアドレス
`IPアドレス(Internet Protocol Address)`とは、インターネット上でデバイス（PC、スマホ、サーバーなど）を識別するための住所のようなものです。
IPアドレスには、`IPv4`と`IPv6`があります。

後ほど記載しますが、ご自身のIPアドレスを調べていただくと、IPv4になっているかと思います。
ただ、IPv4だと枯渇する可能性が出てきたので、IPv6が誕生しました。


# プライベートIPアドレス
家庭や企業の内部ネットワークで使われるIPアドレスです。
内部のネットワークに閉じているので、外部のインターネットに直接アクセスすることはできません。

## 範囲

| クラス | アドレス範囲 |
| --- | --- |
| クラスA | 10.0.0.0 ～ 10.255.255.255 |
| クラスB | 172.16.0.0 ～ 172.31.255.255 |
| クラスC | 192.168.0.0 ～ 192.168.255.255 |

## 調べ方
Macの方であれば、「システム設定」 > 「Wi-Fi」で、繋がっているWi-Fiの「詳細」を押せば、見ることができます。

# グローバルIPアドレス
インターネット上で一意に識別されるIPアドレスです。
インターネットに接続する際のIPアドレスなので、一意に割り当てる必要があります。

また、グローバルIPアドレスには、動的と固定の2種類が存在します。
`動的IPアドレス`は、ユーザーが接続するたびにIPアドレスが変更されます。この頻度はプロバイダによって変わるために、一概にこの頻度で変更されます！とは、明言できないです。

`固定IPアドレス`は、常に同じなIPアドレスになります。プロバイダから割り当ててもらうため、オプションが用意されているかと思います。

## 範囲

| クラス | アドレス範囲 |
| --- | --- |
| クラスA | 1.0.0.0 ～ 9.255.255.255 |
|        | 11.0.0.0 ～ 126.255.255.255 |
| クラスB | 128.0.0.0 ～ 172.15.255.255 |
|        | 172.32.0.0 ～ 191.255.255.255 |
| クラスC | 192.0.0.0 ～ 192.167.255.255 |
|        | 192.169.0.0 ～ 223.255.255.255 |

## 調べ方
https://www.cman.jp/network/support/go_access.cgi

上記のWebサイトで確認することができます。

# 違い
インターネットの窓口となっているのが、グローバルIPアドレス。
上記を担っているのがルーターなので、その配下で、各デバイスに付与されているのがプライベートIPアドレス。

上記のような違いがあります。

# 参考文献
https://www.gate02.ne.jp/media/it/column_98/

https://zenn.dev/itpassport/articles/acefa57f6d2b76