OmniAICreator/Qiita-1.07M huggingface dataset:
[Three.js]R3FでInstancedMeshで花吹雪？みたいなのを作成

# 成果物
 ![cel.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493888/d1476f61-f71e-2df8-f87a-ca3f5dae275a.gif)

## ソースコード
```tsx
import React, { useRef, useMemo, useLayoutEffect } from "react";
import { Canvas, useFrame } from "@react-three/fiber";
import { Vector3, Object3D, Color, DoubleSide, Matrix4, InstancedMesh } from "three";
import { OrbitControls } from "@react-three/drei";

export default function Page() {

  return (
    <>
      <Canvas shadows>
        <Confetti />
        <OrbitControls />
        <ambientLight />
      </Canvas>
    </>
  )
}

const randomRange = (min: number, max: number) => {
  return Math.random() * (max - min) + min;
}

interface ConfettiProps {
  length?: number; // 何個生成するか
  positions?: [number, number, number] | Vector3; // どの範囲で生成するか
  size?: number; // サイズ
  rotationSpeed?: number; // 回転速度
}

const o = new Object3D();
const mat4 = new Matrix4();

const Confetti = (
  {
    length = 10000,
    positions = [32, 32, 32],
    size = 0.25,
    rotationSpeed = 0.03
  }: ConfettiProps
) => {
  const ref = useRef<InstancedMesh>();
  const c = new Color();
  const colors = useMemo(() => {
    const array = new Float32Array(length * 3);
    // ランダムで色を指定
    for (let i = 0; i < length; i++) {
      c.setHSL(Math.random(), 1.0, 0.5);
      c.toArray(array, i * 3);
    }
    return array;
  }, [length]);

  useLayoutEffect(() => {
    let i = 0
    const root = Math.round(Math.pow(length, 1 / 3))
    let poss = positions;
    if (poss instanceof Vector3) {
      poss = [poss.x, poss.y, poss.z];
    }
    for (let x = 0; x < root; x++)
      for (let y = 0; y < root; y++)
        for (let z = 0; z < root; z++) {
          const id = i++
          o.rotation.set(
            Math.PI * randomRange(-1, 1),
            Math.PI * randomRange(-1, 1),
            Math.PI * randomRange(-1, 1)
          )
          o.position.set(
            poss[0] * randomRange(-1, 1),
            poss[1] * randomRange(-1, 1),
            poss[2] * randomRange(-1, 1)
          )
          o.updateMatrix()
          ref.current.setMatrixAt(id, o.matrix)
        }
    ref.current.instanceMatrix.needsUpdate = true
  }, [length])

  // 毎フレーム事に回転処理
  useFrame(({ clock }) => {
    if (!ref.current) return;
    const time = clock.getElapsedTime();
    // ランダムで回転させる
    for (let i = 0; i < length; i++) {
      ref.current.getMatrixAt(i, mat4);
      mat4.decompose(o.position, o.quaternion, o.scale);
      o.rotation.x += Math.cos(time) * rotationSpeed;
      o.rotation.y += Math.sin(time) * rotationSpeed;
      o.rotation.z += Math.cos(time) * rotationSpeed;
      o.updateMatrix();
      ref.current.setMatrixAt(i, o.matrix);
    }
    // 更新
    ref.current.instanceMatrix.needsUpdate = true;
  });

  return (
    <>
      <group>
        <instancedMesh ref={ref} args={[undefined, undefined, length]}>
          <planeGeometry args={[size, size]}>
            <instancedBufferAttribute attach={"attributes-color"} args={[colors, 3]} />
          </planeGeometry>
          <meshStandardMaterial vertexColors={true} side={DoubleSide} />
        </instancedMesh>
      </group>
    </>
  )
}
```
DiffDockを使ってみた

### はじめに
少し前に話題になった拡散モデルを使用したDiffDOCKというツールを使ってみました。
論文によるとPDBbindデータセットを使用したブラインドドッキングにおいてGNINA、SMINA、GLIDE、EQUIBINDといったツールと比較して精度が向上したらしいです。

github : [https://github.com/gcorso/DiffDock](https://github.com/gcorso/DiffDock)

以下は使用しているマシンのスペックです。

|項目  |スペック|
|---|---|
| OS |Ubuntu 22.04|
|CPU|AMD Ryzen 7 5700X 8-Core Processor|
|メモリ | DDR4-3200 ( 16GB × 2 )|
|GPU | GeForce RTX 2080 Ti |


### インストール
```
git clone https://github.com/gcorso/DiffDock.git
cd DiffDock/

#conda環境の作成
conda create -n diffdock python=3.8
conda activate diffdock

#pytorchのインストール(https://pytorch.org/)
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

#他に必要なパッケージのインストール
conda install pyg pytorch-scatter pytorch-sparse pytorch-cluster pytorch-spline-conv -c pyg
python -m pip install PyYAML scipy "networkx[default]" biopython rdkit-pypi e3nn spyrmsd pandas biopandas

#ESMのインストール
pip install "fair-esm[esmfold]"
pip install 'dllogger @ git+https://github.com/NVIDIA/dllogger.git'
pip install 'openfold @ git+https://github.com/aqlaboratory/openfold.git@4b41059694619831a7db195b7e0988fc4ff3a307'
```

### 使用例
以下のコマンドで/data/protein_ligand_example_csv.csvに記述されているタンパク質とリガンドについて計算が実行されます。
```
python -m inference --protein_ligand_csv data/protein_ligand_example_csv.csv --out_dir results/user_predictions_small --inference_steps 20 --samples_per_complex 40 --batch_size 10 --actual_steps 18 --no_final_step_noise
```

``` protein_ligand_example_csv.csv
complex_name,protein_path,ligand_description,protein_sequence
,data/1a0q/1a0q_protein_processed.pdb,data/1a0q/1a0q_ligand.sdf,
,data/1a0q/1a0q_protein_processed.pdb,COc(cc1)ccc1C#N,
```

--samples_per_complexで40を指定しているので、40個のリガンドポーズとそのconfidence scoreを出力します。confidence scoreが小さいほど良いポーズなので基本的にrank1_confidence~.sdfを使用することになりそうです。

他にもSMILESで直接リガンドを指定することもできるらしいのでgithubの方を見てみてください。

### DUD-Eによる検証
DUD-E([https://dude.docking.org/](https://dude.docking.org/))と呼ばれるドッキングシミュレーションのためのベンチマークを使用して精度を検証します。各タンパク質に対して活性化合物と不活性化合物が含まれています。

#### 今回使用したタンパク質
AA2AR
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070679/b40b82b8-60a3-3483-954e-1e7d76c322bd.png)


今回は以下のような手順を行いました
・ダウンロードしたreceptor.pdbをmoeのstructure preparationによって処理
・actives_final.mol2、decoys_final.mol2をリガンド1つずつのmol2ファイルに分割
・protein_ligand.csvにタンパク質とリガンドのパスを記述
・計算実行
・AUCを計算

計算には800化合物で7時間くらいかかりました

計算後、以下のスクリプトを用いてリガンドのconfidence scoreを取得しました
``` extract_conf.sh
CURRENT=$(cd $(dirname $0);pwd)

dirs=`find $CURRENT -type d`
for dir in $dirs; do
  cd $dir
  sub_dir=`basename $dir`
  bestfile="rank1_*.sdf"
  score=""
  for file in $bestfile; do
    if [ -f "$file" ]; then
      score=$(echo "$file" | grep -o '[0-9]\.[0-9][0-9]')
      echo $sub_dir,$score
      break
    fi
  done
done
```

#### 結果
scikit-learnのroc_auc_score関数を使用してAUCを計算したところ、AUCは0.448でした。
あまり良くなかったですね:frowning2:

### 今後
面白いツールではあるのでもう少し検証していきたいです
アクションコントローラー内のPRIVATE

DESTROYしてもEDITしても編集されないし削除されぬ

なんで？
なんで？？？
と悩んで何度も見直したりしてたら、
PRIVATEと表記した以下に入力してました。

PRIVATEと入力してたら反映されないんだったよね

解決してよかった。
pandas.DataFrame同士の計算結果が全てNaNになる時の原因と解決方法

１つのDataFrame同士の計算結果が全て`NaN`になってしまう、といったことがあったのでその原因と解決方法を書きます。

## 行いたいこと
次のような`a`と`b`が各教科２回ずつ行ったテスト結果、`grades`があるとします。
```
>>grades

   Japanese  math  Engilsh name  times
0        25     6       53    a      1
1        84    13       78    b      1
2        18    91       17    a      2
3        32    16       31    b      2
```
ここから`a`、`b`それぞれについて、2回のテストの各教科毎の合計点を求めたいとします。
（欲しい出力↓）
```
   Japanese  math  Engilsh
0        43    97       70
1       116    29      109
```

## 最初にやったこと
`times`列で分割したもので計算したところ、以下のように全て`NaN`のDataFrameが出力されました。
```
>>first_grades = grades[grades['times'] == 1].sort_values('name')
>>second_grades = grades[grades['times'] == 2].sort_values('name')
>>first_grades.iloc[:, :-2] + second_grades.iloc[:, :-2]

   Japanese  math  Engilsh
0       NaN   NaN      NaN
1       NaN   NaN      NaN
2       NaN   NaN      NaN
3       NaN   NaN      NaN
```

## 原因
原因はインデックスが揃っていないことでした。DataFrame同士の演算結果はインデックスが揃っていない箇所や、列名が違う箇所は`NaN`で補うようになっています。
```
>>first_grades

   Japanese  math  Engilsh name  times
0        25     6       53    a      1
1        84    13       78    b      1

>>second_grades

   Japanese  math  Engilsh name  times
2        18    91       17    a      2
3        32    16       31    b      2
```

## 解決方法
`reset_index()`を使ってインデックスが揃うように振り直して計算すると、欲しい結果が得られます。
```
# インデックスの振り直しと元のインデックス列の削除
>>first_grades = first_grades.reset_index().drop('index', axis=1)
>>first_grades

   Japanese  math  Engilsh name  times
0        25     6       53    a      1
1        84    13       78    b      1

>>second_grades = second_grades.reset_index().drop('index', axis=1)
>>second_grades

   Japanese  math  Engilsh name  times
0        18    91       17    a      2
1        32    16       31    b      2

>>first_grades.iloc[:, :-2] + second_grades.iloc[:, :-2]

   Japanese  math  Engilsh
0        43    97       70
1       116    29      109
```
【Github】gitbashからSSO設定したリポジトリにアクセスするための認証を通す方法

# はじめに
私の会社でもgithubでEnterpriseプランを契約してSSO認証できるようになったのですが、
git bashでgit操作しようとするとSSO認証が通ってないからダメって言われてしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173970/3ef737a9-3057-6bba-4260-fc3168ec3a92.png)

私はgit bashを意地でも使いたかったのでSSO認証の通し方の備忘録を残そうと思います。


# How to
github cliを使用してgitのブラウザ認証情報をwindowsに残す。
1. [github cli](https://cli.github.com/)からgithub cliをダウンロードする
1. `gh`コマンドが使えるようになるのでgit bashから`gh auth login`を実行する
1. 色々聞かれるので自分に合ったもので答えていく
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173970/4351ef49-7a40-e171-6906-9ad8cc115316.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173970/f1425489-ede9-c448-81c3-fc9c3b161b80.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173970/ab342240-4375-a5f6-3c0c-9e66065d906f.png)
    ここはwindowsへ認証情報を残すためにブラウザでログインを選択する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173970/0e70a14c-a1fe-8989-b631-e9188e31eac4.png)
ブラウザで認証するためのワンタイムコードが表示される
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173970/ea0ca6a3-61ec-f73c-814f-f643eba69909.png)
1. 前の手順で表示されたワンタイムコードをブラウザへ入力してgithubで認証をする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173970/37a77260-11fd-9aef-145b-4fd1cba09ac8.png)

1. ログインが完了したらgit bashでSSO認証が必要なリポジトリにもgitコマンドが使えるようになる！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173970/5c9e1910-e94f-d38c-368f-09c4735bc3bd.png)


# おわりに
コマンドライン主義者じゃなければvscodeで認証するだけでよさそうな感じでしたがコマンドラインじゃないとgit操作したくないので面倒なことしてました。
git bashで楽にSSO認証まで通るようになってくれ～～～～。

# 参考
https://cli.github.com/
ServiceNow 企業ロゴの変更

## ServiceNow Administration Fundamentals #2 企業ロゴの追加

### 1. My Companyモジュールへ移動
1-1. [ALL] > [System Properties] > [My Company]に移動する。
1-2. [Update]をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34740/6a0cee6c-aadb-c4aa-b8ff-dcdad9801835.png)


### 2. 画像選択
2-1. イメージ画像を選択し、OKボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34740/415a0b44-023b-4862-5e31-20257fe704d4.png)

2-2. Updateボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34740/0c4239e2-25c9-95df-f25e-b259bee4ffb5.png)

### 3. 反映確認
3-1. ブラウザを更新し画像が反映されていることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34740/1c2d32cb-b001-043c-d8cb-d21a7e381066.png)
【Python】`typing.NoReturn`の使いどころ

チーム内で質問があった、かつ`NoReturn`について[『ロバストPython』](https://www.oreilly.co.jp/books/9784814400171/)に言及がなかったので書いてみた。


## TL; DR
- [公式ドキュメントの「関数が返り値を持たない」](https://docs.python.org/ja/3.11/library/typing.html#typing.NoReturn)とは「エラーが`raise`されるとき」を意味する
- ただ単に`return`していない、`return`で返すオブジェクトをコードベースで書いていないだけなら`None`をアノテーションする
- 「この関数を呼び出せば絶対にエラーになる」ときに`NoReturn`を使う
- 「`T`を返すが分岐によってはエラーになる」ときは`Union[T, NoReturn]`ではなく`T`を使う

## 不適切な使い方

```py
from typing import NoReturn, Union


def hoge(a: str) -> NoReturn:  # <- `None`が正しい!
    return  # 明示して書いていないだけで、`None`が返されている


def fuga(a: str) -> NoReturn:  # <- `None`が正しい!
    print(a)  # 明示してreturnしていないだけで、`None`が返されている


def moge(a: str) -> Union[str, NoReturn]:  # <- `str`が正しい!
    # - `str`と並列に`NoReturn`を配置しているが、エラーは`str`と違って返すものではなく送出するもの
    # - 全ての関数はメモリ不足など不可抗力で実行時エラーになる可能性がある
    # - エラーが起こる可能性を論じなきゃいけないなら全部`Union[NoReturn, T]`になってしまう
    # - エラー型が`RuntimeError`であることは型アノテーションでは伝わらない
    if a == "foo":
        raise RuntimeError
    return a
```

## 適切な使い方
```py
from typing import Literal, NoReturn, overload


def hoge() -> NoReturn:
    raise RuntimeError


# `overload`を使って引数のパターンによっては例外が送出されることを表現
@overload
def moge(a: Literal["foo"]) -> NoReturn: ...
@overload
def moge(a: str) -> str: ...

def moge(a: str) -> str:
    if a == "foo":
        raise RuntimeError
    return a
```

## まとめ
`NoReturn`という、否定形で表現されていて返り値でアノテーションされているのが意図が伝わりづらい原因な気がします。
同様のコンセプトを表現可能な[`Never`](https://docs.python.org/ja/3.11/library/typing.html#typing.Never)は引数へアノテーションしていて、使いどころをより明確にしているのでそのうち紹介記事を書こうと思います。
AWS　Lambdaで使用しているECRコンテナをローカルで確認する方法

# はじめに

Ubuntu環境です。

## ローカルマシンに Runtime Interface Emulator をインストール

Lambda環境をローカルで再現してくれます。

```sh
mkdir -p ~/.aws-lambda-rie && curl -Lo ~/.aws-lambda-rie/aws-lambda-rie \
https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie \
&& chmod +x ~/.aws-lambda-rie/aws-lambda-rie     
```

## コンテナの実行

```sh
IMAGE_URL=XXXXXXXXXXXXXXXXXXXX
IMAGE_HANDLER=app.handler # Lambda関数のコード内のハンドラー関数に応じて変更 DockerfileのCMDに指定したものと同じ
IMAGE_ENDPOINT=XXXXXXXXXXXXXXXXXXXX # Lambda関数のコード内のエンドポイントに応じて変更 DockerfileのENTRYPOINTに指定したものと同じ

docker run -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \
  --entrypoint /aws-lambda/aws-lambda-rie \
  ${IMAGE_URL} \
  ${IMAGE_ENDPOINT} \
  ${IMAGE_HANDLER}
```




## 参考

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-test.html
shapeタグで半円を作る方法

# 初めに
今回はAndroid XMLのShapeタグで半円を作る方法を紹介していこうと思います
### 本文

```xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/white" />
    <size
        android:height="120dp"
        android:width="60dp"/>
    <corners android:topLeftRadius="60dp"
        android:bottomLeftRadius="60dp"/>
</shape>
```
大きさを変更したい場合は`height`と`width`を広げれば大丈夫です、その際は`radius`も併せて変更しなければいけません
また、今回紹介したものは左側のみの半円ですが`radius`をつける場所を変えることで上下左右自由に変更することができます
### 最後に
備忘録としての役割が強いですがどなたかのお役に立てれば幸いです
ERC1155: 1つのコントラクトで複数の種類のトークンを管理する方法と事例

# ERC1155について
本記事では、ERC1155に関して、概要、動機、実装、事例を簡単に説明します。

## 概要
ERC1155[EIP]は、複数の異なる種類のトークンを1つのコントラクトで管理するための規格です
同じ種類であれば代替可能で、異なる種類であれば代替不可能となり、代替可能性と非代替可能性を併せ持つことが特徴です。
Enjinというゲーム系のプロジェクトによって提案されました。
[EIP]  https://eips.ethereum.org/EIPS/eip-1155

## 動機
複数種類のトークンを作成する際のガス代の節約を動機に提案されました。
例えば、ゲーム開発などでは、数千種類のトークンを作成する必要がある可能性があります
数千種類のERC20をデプロイすると膨大なガス代がかかります。
1つのコントラクトで管理できればガスを節約することができます。

## 実装
tokenに対して、idとamountを割り振り、idがtokenの種類、amountがその量を表すような実装です。
実装につき、下記をご参照ください。
[openzeppelin ドキュメント] https://docs.openzeppelin.com/contracts/3.x/erc1155
[実装] https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol
特に、safeBatchTransferFromでは、複数のアイテム(装備一式など)を一括で送信できます。もしアイテムがERC20によって表現され、複数コントラクトに分かれていた場合、カスタムコントラクトに対して、approveし、一括送信のトランザクションを組む必要がありますが、そういったことも必要ありません。

## 事例
Enjinは、ゲーム向けにトークン発行プラットフォームを提供しています。
Enjin CoinというFTを裏付けて、ゲーム開発者は誰でもERC1155を発行、販売[ENJIN market]できます。
ERC1155をバーンすると、裏付けられたEnjin Coinを取り出せます。
これにより、ERC1155が発行されればされほど、Enjin Coinが希少価値が上がります。また、NFTの最低価値も担保されます。
[ENJIN marketplace] https://enjinx.io/eth/marketplace

## 補足
ERC1155にはいくつかの注意点があります[qiita]
ERC1155では、ownerOf関数が定義されていなく、token_idに対する所有者を得るには、indexerなどを活用する必要があります。その他、下記の記事に注意点が載ってあります。
[qiita]https://qiita.com/okamu_/items/6dc57360d5bb262da546
Accessでクエリを表示したままALTER TABLEすると例外になる

# 例外が発生する条件

下記のようなテーブル。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/ccd8768c-e4bf-6e4c-994b-6f7b2ca68694.png)

下記のようなクエリ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/2b582205-dc22-cccb-b0fa-4bdd3b83ba1a.png)

クエリを表示した状態でボタン押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/69b2794b-088b-5234-c709-b13abaf1a0e8.png)


```vb:ボタン押した時の処理
Private Sub btn_1_Click()

    Dim com_ As New ADODB.Command: com_.ActiveConnection = CurrentProject.Connection
    
    com_.CommandText = "DELETE FROM tes_1"
    com_.Execute
    
    com_.CommandText = "ALTER TABLE tes_1 ALTER COLUMN record_id COUNTER (1,1)"
    com_.Execute 'ここで例外。

End Sub
```

例外時のダイアログは下記。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/e9d625e5-ce24-4aa2-0336-1c6f4d71a465.png)

> テーブル※※は現在ほかのユーザーまたはプロセスで使用されているので、ロックできませんでした。

# 蛇足

ALTER TABLEやる前にクエリを閉じる処理をかませよう。

```vb:クエリを閉じる
DoCmd.Close acQuery, "クエリ名", acSaveNo
```

『もしくはクエリが一つでも開いていたら実行不可』といった制御。

# 参考サイトさん

https://masagoroku.com/%E3%80%90access-vba%E3%80%91%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E9%96%89%E3%81%98%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F#Close

# バージョン

Windows 10 Pro 22H2 19045.3031
Microsoft Access for Microsoft 365 MSO (バージョン 2304 ビルド 16.0.16327.20200) 32 ビット
今さら人に聞けないRDCManでさくっとリモートデスクトップ管理

# RDCMan
https://learn.microsoft.com/ja-jp/sysinternals/downloads/rdcman

# RDCManの魅力
- .rdgファイルで設定のimport/exportができる｡
- リモートデスクトップの諸々の設定をして保持できる｡
  - ユーザー､パスワード､解像度､ホストと共有するリソース､etc
- リモートデスクトップマシンの別名定義､グルーピングをしてツリー状に管理できる｡


# tips
## リモートデスクトップにログインせずに接続状況を確認する
- 前提: ActiveDirectoryで管理している環境である
- リモートデスクトップマシンでWindows Defender ファイアウォールの設定をする
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2692730/a112f87e-bc2d-f1ec-623c-39bcc4304b7e.png)
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2692730/dee30e3d-f1dc-9ede-58e1-145481049582.png)
- リモートデスクトップマシンにActiveDirectoryのユーザーでログインし､組織の管理者に追加しておく｡
- RDCManでリモートデスクトップマシンを右クリックしてList sessionsをクリックすると接続状況が確認できる｡
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2692730/d8049317-9460-5d89-c3ab-bb4328cf8122.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2692730/e6ffb84d-13c4-02a0-ca89-85fdcf76da53.png)
【メモ】Office 365やAdobeCCのネットワークが終わってた

TwitterもYouTubeも見れる。なのにExcelのサインインはできない。困る。
![Fx_VGHmaEAA-bmI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2722480/d9f7e790-ae31-9a31-ed57-18825d13aa69.png)
結果、直った。
厳密なことはわかってないので、どういうことか誰か教えてください。俺が「ほええ」って言います。

# 原因
なんかこうなってた
![Fx_dnp6aQAEjpI7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2722480/6036fdad-8b47-7e9a-93ce-4bc2b28547b2.png)
![Fx_dnp6aQAEjpI7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2722480/58f37776-cfe8-0596-9cc5-d5aa27abd27f.png)
![Fx_hexjaMAAISKy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2722480/724c0b3c-c0be-80ea-0566-b8d9a2ee372d.png)
ないねえ　接続が
でもブラウザとか普通に使えてるんですけどね　インターネットに繋がってるはずなんですよね
Get-NetConnectionProfile をPowerShell叩いてみます。
![Fx_fAQwaAAA7WHN.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2722480/c2a09c8a-3a47-c6ce-e563-dbea908cddd1.png)
ないですね（NoTraffic）

# やったこと① GlobalDNS

>インターネットに繋がっているのに「インターネットアクセスなし」になる場合の対処方法
https://selifelog.com/blog-entry-2019.html

をしました。
結果、うまく行かず

# やったこと② ADを構築しようとした
Excelで認証しようとしたときの通信をキャプチャしてみる。
Wiresharkでループバック(Loopback)の通信を見てみると…
![Fx-7W_qaAAAfssb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2722480/8bf72672-fe86-7dee-e8a5-32cf747cfbcf.png)
赤い！黒い！怖い！
よく見るとポート番号3268に送って、ブチギレされてます。（SYN送ったらRST,ACK返ってくるを十数回繰り返している）
> グローバルカタログへの問い合わせ	TCP3268

もっと見ると、俺のパソコンにはActive directoryがない。Windows Serverもない。
でも構築は面倒だ～。とりあえずADをインストールはしたけど、特に何も構築せずに終わり。

# やったこと③ ファイアウォール全切り
ファイアウォールが悪い！と思って、全部切ってみた。
結果、変わらず。

# やったこと④ 余計なやつ消した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2722480/0eed9dbe-7038-052b-abf3-26308e60b29c.png)
余計なイーサネット2がある！無効にしました
すると…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2722480/9d67dc0e-65e1-21ec-609f-95075477c4f1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2722480/79c7cec5-2dbf-a6a7-746c-964502d4d64a.png)
行けた
なんだこいつ～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2722480/8c47f348-44ed-290f-a99b-043e919781eb.png)
あっ　お前　見たことあるぞ
VirtualBoxでインターネット使おうとしたときのやつだ！こいつが邪魔してたんだなあ

# おわり
ネットワークを気軽にいじると、弊害が出ます
Salesforce : 「INVALID_SESSION_ID」 "This session is not valid for use with the API" の原因

### 要件
VBAでSalesforceへのロインあとに、DB定義を取得するとき下記エラーがでました。

SOAP API使用時に「INVALID_SESSION_ID」 "This session is not valid for use with the API" のエラーメッセージが発生しました。

原因は次だったので備忘メモです。

### 原因
プロファイルの「ログインに必要なセッションセキュリティレベル」が「高保証」となっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/0c797f78-5a3e-1406-db7a-098f91dfd56e.png)

ここが「高保証」になっているとAPIログイン後のセッションIDをそのまま使って、APIを操作するとエラーになります。

多要素認証などを設定する際には気を付ける必要がありました。
関数引数のプレースホルダーで補完候補が最初から選択されるようにする

# 2024/02/25追記
新しいバージョン(1.85.1)では最初の投稿の挙動を再現できないので,もはや役に立たないと思います.(当時の挙動も検証したいけど使っていたバージョンが分からない…)

周辺の仕様も頻繁に変化しているようなので,たまたまその影響を受けたのかもしれません.
以下調べてわかったことを貼るだけ貼っておきます.

`"editor.suggest.snippetsPreventQuickSuggestions": false`は1.79からデフォルトの設定になった.
https://code.visualstudio.com/updates/v1_79#_quick-suggestions-and-snippets

補完候補が選択されない挙動は1.78までのものらしい.
https://github.com/microsoft/vscode/issues/185007

また,本来補完候補が選択されるかどうかは1.75で導入された`editor.suggest.selectionMode`を介して設定できる.
https://code.visualstudio.com/updates/v1_75#_suggest-selection-mode

# 最初の投稿
vscodeで関数/メソッドを補完すると,引数のプレースホルダー(タブストップ)にカーソルが移動しますが,そこで表示される補完候補は選択されておらず,`↓`などを入力する手間がありました.

以下のようにすると,候補の先頭が最初から選択された状態になります.

```json:settings.json


{
  "editor.suggest.snippetsPreventQuickSuggestions": false
}
```
【Paiza問題集】ループメニュー1/数列の中に何個ある?

# Paiza問題集
Pythonで回答

## ループメニュー1/数列の中に何個ある? 

### Step01 数列の最大値
```Python
"""
数列の最大値
https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_max

問題
長さNの数列a(a_1, a_2, .., a_N)が与えられます
この数列の最大値を出力してください
"""

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

max = 0
for i in range(N):
    if a[i] >= max:
        max = a[i]

print(max)
```

### Step02 数列の最小値
```Python
"""
数列の最小値
https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_min

問題
長さNの数列a(a_1, a_2, .., a_N) が与えられます
この数列の最小値を出力してください
"""

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

min = 100
for i in range(N):
    if a[i] <= min:
        min = a[i]

print(min)
```

### Step03 数列の何番目にある?
```Python
"""
数列の何番目にある?
https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_i-th

問題
数列の何番目に1があるか出力してください
出力の末尾には改行を入れてください
"""

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

count = 0
for i in range(N):
    count += 1
    if a[i] == 1:
        break

print(count)
```

### Final問題 数列の中に何個ある? 
```Python
"""
数列の中に何個ある? 
https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_count

問題
数列の中に1が何個あるか出力してください
出力の末尾には改行を入れてください
"""

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

count = 0
for i in range(N):
    if a[i] == 1:
        count += 1

print(count)
```
GitHub でプルリクエストを作ってみよう

# Progate Path のプルリクエスト
こんにちは、今Progate Pathをやっているのですが、プルリクエストがわからず、ネットで調べて、二つの記事を参考に課題を進めたので、ここでシェアしたいと思います。

まず、[ProgateのGit](https://prog-8.com/courses/git)を学習してから、課題に取り組みます。

ブランチの作成や、ブランチの変更などについては、勉強できないので、ネットで調べて、下記のサイトを参考にしました。

https://phoeducation.work/entry/20210913/1631487480

その時、すでにブランチは作成していたので、ブランチの変更を知りたかったのですが、この記事では、ブランチの作成と変更をいっぺんにやっていたので、別で変更について調べて、下記のサイトを参考にしました。

https://backlog.com/ja/git-tutorial/stepup/08/

この二つの記事と、プロゲートの勉強で、無事課題をクリアできました。
IBM i CLPでクライアントのIPアドレスを取得するサンプル

ちょっと前に調べたものなのでIBM i 7.5などでは指定パラメーターに若干UPDATEあったと思いますが、基本的な使い方は同様です。

## CLPサンプル
---------------------------------------
****************** データの始め ***************************************
0001.00 /*  PGM         PARM(&DEV_NAM)  */                                         
0002.00 PGM
0005.00                                                                        
0006.00              DCL        VAR(&DEV_INFO) TYPE(*CHAR) LEN(1121)           
0007.00              DCL        VAR(&VAR_LEN)  TYPE(*DEC)  LEN(4 0) VALUE(1121)
0008.00              DCL        VAR(&FORMAT_NAM) TYPE(*CHAR) LEN(8)            
0009.00              DCL        VAR(&DEV_NAM) TYPE(*CHAR) LEN(10)              
0010.00              DCL        VAR(&ERR_CD) TYPE(*CHAR) LEN(32)               
0011.00                                                                        
0012.00              DCL        VAR(&IP) TYPE(*CHAR) LEN(15)                   
0013.00                                                                        
0014.00              MONMSG     MSGID(CPF0000)                                 
0015.00                                                                        
0016.00              RTVJOBA    JOB(&DEV_NAM) 
0017.00                                                                        
0018.00              CHGVAR     VAR(&FORMAT_NAM) VALUE('DEVD0600')             
0019.00                                                                        
0020.00              CALL       PGM(QDCRDEVD) PARM(&DEV_INFO &VAR_LEN +        
0021.00                           &FORMAT_NAM &DEV_NAM &ERR_CD)                
0022.00                                                                        
0023.00              CHGVAR     VAR(&IP) VALUE(%SST(&DEV_INFO 877 15))         
0024.00                                                                        
0025.00  SNDPGMMSG  MSG(&DEV_NAM *CAT ‘ の IP は ’ *CAT &IP *CAT + ' です。 ') 
0026.00 ENDPGM                                                                 
        ***************** データの終わり ************************************** 

※18.00行目でクライアントのタイプが
 *DSP の場合は DEVD0600
 *PRT の場合は DEVD1100
を指定します。

上記を実行すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/15e89ec3-d274-7771-7652-fc5a0777eb22.png)

のような実行結果が返されます。

### 補足
パラメーター(&FOMAT_NAM)を変更することで別な *DEVタイプのIPアドレスも取得可能
　　*APPC, *BSC, *HOST, *TAP, *MLB...
サンプルはIBM i 7.1 レベル前提です。他のOSバージョンではパラメーターの指定方法等に若干の差異がありますのでインフォセンターで確認してください。


## 参考：IBM i サービス QSYS2.TCPIP_INFO ビューを使用した例

IBM i サービスの[QSYS2.TCPIP_INFOビュー](https://qiita.com/gomAnomalocaris/items/6ae4fb6a9f3820a9750f)を使用すれば一発で取得できます。今後はこちらが便利かも。
1次元拡散方程式のPython実装例

以下の1次元の拡散方程式の実装例です。$0\leq x\leq 1$, $t\geq 0$ とします。

$$\begin{align}
\frac{\partial u(x,t)}{\partial t}&=\frac{\partial^2 u(x,t)}{\partial x^2},\\\\
u(0,t) &= u(1,t) = 0,\\\\
u(x,0)&=x(1-x).
\end{align}$$


レポート課題として定番の問題なので、様々な実装例がネット検索で沢山出てきますが、Pythonらしい実装 (なるべく配列の要素を番号で指定しない書き方) が無さそうだったので作ってみました。

```python
########### 準備と前処理 ###########

# 関連パッケージの読み込み
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# パラメータ設定
n_space = 100  # 空間方向の分割数
n_time  = 500  # 時間方向の更新回数
alpha   = 0.5  # 1ステップ当たりの変化の大きさ (dt / dx**2)
t_list  = [100, 200, 500]  # 図に描画する時点のリスト (0以外で)

# 0から1まで等間隔に並んだ点を生成
x = np.linspace(0, 1, n_space)  

# 初期条件の指定 x(1-x)
u = x * (1-x)

# カーネルの定義 (左からの流入、左右への流出、右からの流入)
kernel = alpha * np.array([1,-2,1])


########### メインの計算部分 ###########

# 結果を格納するリストを用意
result_list = []

# 時刻t=0と初期状態を結果リストに追加
result_list.append((0,u))

# 時間方向の繰り返し、1から開始
for t in np.arange(n_time)+1:

  # 状態を1ステップ分更新 (畳み込み計算)
  u = u + signal.convolve(u, kernel, mode='same')

  # 左端の値を0に修正
  u[0] = 0

  # 右端の値を0に修正
  u[-1] = 0

  # 図に描画する時点かどうか
  if t in t_list:

    # 現時点の時刻と状態を結果リストに追加
    result_list.append((t,u))


########### 図の表示 ###########

# 空の図を用意
plt.figure()

# 結果リストの各要素を取得
for (t,u) in result_list:

  # 各時点の折れ線グラフを追加 (横軸x, 縦軸u, 凡例のためにラベルも指定)
  plt.plot(x, u, label=f't={t}')

# 凡例を追加
plt.legend()

# 完成した図を表示
plt.show()

# ファイルに保存
plt.savefig('fig.png')
```

![fig.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2787764/be7fba48-9125-a867-3dbd-11aa91c365a7.png)
【Paiza問題集】ループメニュー1/FizzBuzz

# Paiza問題集
Pythonで回答

## ループメニュー1/FizzBuzz

### Step01 数列の反転
```Python
"""
数列の反転
https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_reverse

問題
長さNの数列a(a_1, a_2, .., a_N) が与えられます。
この数列の要素を逆順に、改行区切りで出力してください
"""

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

for i in range(N-1, -1, -1):
    print(a[i])
```

### Step02 九九の表示1
```Python
"""
九九の表示1
https://paiza.jp/works/mondai/loop_problems/loop_problems__kuku_step1

問題
九九の 8 の段を半角スペース区切りで出力してください
"""

print(*[(8 * i) for i in range(1, 10)])
```

### Step03 九九の表示2
```python
"""
九九の表示2
https://paiza.jp/works/mondai/loop_problems/loop_problems__kuku_step2

問題
整数Nが与えられます
九九のNの段を半角スペース区切りで出力してください
"""

N = int(input())
print(*[(N * i) for i in range(1, 10)])
```

### Step04 2の累乗を表示
```Python
"""
2の累乗を表示
https://paiza.jp/works/mondai/loop_problems/loop_problems__pow2

問題
整数Nが与えられます
2の1乗から2のN乗までを改行区切りで出力してください
"""

N = int(input())
[print(2**i) for i in range(1, N+1)]
```

### Final問題 FizzBuzz
```Python
"""
FizzBuzz
https://paiza.jp/works/mondai/loop_problems/loop_problems__fizzbuzz

問題
1~100の整数に対して、3と5の両方で割り切れるなら FizzBuzzを、3でのみ割り切れるならFizz、5でのみ割り切れるならBuzzを改行区切りで出力してください
また、どちらでも割り切れない場合は、その数字を改行区切りで出力してください
"""

for i in range(1, 101):
    if i % 15 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i %5 == 0:
        print("Buzz")
    else:
        print(i)
```
【Git】ローカルでコミットを整理したい時（SourceTree）

※ Gitの知識はあることを前提としています。
※ 備忘録的に書いているので、詳しく内容や用語を説明していない部分があります。

## 今回試す事  
*  ローカル(Sourcetree)で過去の指定したコミットまでリセットする方法(git reset) 
* ローカル(Sourcetree)でコミットをまとめる方法(git rebase -i)
## ローカルで過去の指定したコミットまでリセットする方法(git reset)  
### どうなるのか 
リセットされたコミットの履歴、「リセットした」という履歴も残らないので、   
* コミット履歴がきれいになる。  
（逆に言うと、後から見てもリセットの操作をしたことが分からない）  
* リセットによって消えたコミット履歴の内容は破棄されずに戻ってくる。（※リセット時のモードでHardを選択しなければ）   
### 実践  
今回は、「コミット①をなかったことにしたい」  という目標でやってみる。

1. ここまでリセットしたい！というコミットを右クリックし、「現在のブランチをこのコミットまでリセット」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790797/34dea26d-f00f-caf6-deaf-347fbb00edb8.png)
1. 使うモードを選択する。 （今回は、「Mixed」で行う） 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790797/1b107fc0-a785-585b-8dbc-4f649ffe07db.png)  
1. 完了
    コミット履歴が消え、ファイルステータスで確認してみると、リセットしたコミット①の作業内容がワーキングツリーに戻っている（この戻る場所は、使うモードで変化してくる）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790797/b1c48bea-3b47-246c-4454-79fc47223c3b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790797/b466b094-4454-9b48-6582-e607711c3ee1.png)



## ローカルでコミットをまとめる方法(git rebase -i)
### どうなるのか 
* 不必要に分けすぎたコミットをまとめることができる     
### 実践 
今回は、「コミット①,②,③をまとめる」  という目標でやってみる。
1.  ~~まとめたいコミットの内「一番先にコミットしたもの」（今回はコミット①)~~　
**まとめたいコミットの一個前のコミット**( 今回は、Initial commit )を右クリックし、「○○の子とインタラクティブなリベースを行う」を選択する。 
![git_practice.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790797/b903824d-6065-11a7-c361-4600c3921d7e.png)



1. 選択したコミット（Initial commit）以降のコミットが表示されるので、まとめたいコミットを選択し、「前のコミットとスカッシュ」を選択する。
    * 例：「コミット①と②をまとめたい時」
      コミット②を選択して、「前のコミットとスカッシュ」を選択する 
    * （※Amend Commitのチェックではなく、Message部分などを押すと↓のように選択される）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790797/2012fb72-22cf-9b22-97ac-93548e9b65c9.png)
![git_practice2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790797/6d404c8d-c0c8-5fb3-5a56-08d9e3a1dc2b.png)
これで、コミット①と②がまとめられた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790797/94f75710-e02d-cf53-248c-b4b1c531e018.png)
③と②も同様にまとめたら、「OK」を押す。(※「メッセージを編集」でコミットメッセージ編集可能)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790797/48a6498b-35f5-ae4c-1d3b-660222f09aba.png)
![git_practice3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790797/e674404f-4f56-21f4-fd54-5ca845e23f2f.png) 
1. 完了　
    コミット①,②,③が１つのコミットとしてまとまり、整理された。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790797/0f96d567-6cf1-b511-52cb-cba7182a998e.png)

## コメント  
今回はローカルでのコミット整理方法として紹介しています。
グループ開発で、リモートにcommitをpushしてしまった際には、他の開発者への影響もあるので「git reset」は推奨しないなど注意点があるので、気を付けてください。


※ご指摘やコメントありましたらよろしくお願いします！
AmazonConnect の CCP で「ice_collection_timeout」エラーが出る

# 課題
AmazonConnect の CCP で「ice_collection_timeout」エラーが出る
![error.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2292878/dbc9a9b3-25c1-74b5-a549-ef678ba9346f.jpeg)

# 原因
UDPポートの3478とうまく通信できていない模様。
![3478.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2292878/265c9722-5c4a-e783-93b6-5476c90ce936.jpeg)

# 解決方法
私の場合は在宅ワーク中にVPNを張って会社へアクセスしていたので、VPNを切るとうまく動きました。
![an.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2292878/43ae6134-745f-ebb2-6995-ce2b1a9b43d6.jpeg)

# VPN切断後
正常に接続できるようになりました。
![tel.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2292878/133cb776-9c71-4b51-5d8e-aa2dd34212db.jpeg)
Engine の一部の route を変える

## Engine を使う場合がある

- 特定のgem にbundle されているなどで，Engine をmount することがある
- 例えば特定のパスを打ち消したい(上書きしたい)
    - Engine 側をパッチできればいいが，何らかの理由によってやらないことを選択した

## Routes

```ruby:config/routes.rb
mount Blorgh::Engine, at: "/blog"
```

で，`/blog/about` みたいな，パスが刺さっているとして，
そこは別のページにしたいとかいう要望があったとする．

## 上書きする

```ruby:config/routes.rb
get "/blog/about" => 'something#action_name'
mount Blorgh::Engine, at: "/blog"
```

より上に書くと，上書きできていそう．

## Refs

- [Rails エンジン入門 - Railsガイド](https://railsguides.jp/engines.html#%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%82%92%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%81%99%E3%82%8B)
- [Rails のルーティング - Railsガイド](https://railsguides.jp/routing.html)
Gnuplotの問題解決-LOG


### Angstramが出力されなかった場合のトラブルシューティング 
- 問題点　　

    AngstromをFigureの横軸に表示したいが、Unicodeの関係上、変換がうまくいかない。具体的には、{\305}としてもAngstromがうまく表示されなかった。

- 解決方法

    ``set encoding iso``
    
    を最初にタイプすることで解決できる。今回は、以下を用いた。
    ``set encoding iso_8859_1``

    今回の問題点はさらにあった。

    `set ylabel 'MSD ({\305}*2)' font "Helvetica, 18"`

    ではなく、正しくは "" でラベルを括ることで、

    `set ylabel "MSD ({\305}*2)" font "Helvetica, 18"`

    が正しい。


- 今後の展望

    gnuplotの""と''の意味合いは大きい。また、画像の出力方法だが、

    `set terminal epslatex color colortext standalone`

    等でLatexにepsで変換してpdf化する方法もあるよう。バックアップ方法として今後勉強する。
    


### 分子動力学法の　MSDカーブを出力する簡単なスクリプト

work in progrss
Google Colaboratoryでメニューバーに「コーギー」「猫」「カニ」を表示させる

# 結論
ツールバーから「メニュー > 設定 > その他」にある「コーギーモード」「猫モード」「カニモード」にそれぞれチェックを付けることで表示できます。

# 手順
1. Google Colaboratoryを開きます。
1. メニューバーの「ツール」をクリックします 。
1. 表示されたメニューの中から「設定」をクリックします。
    ![ネコカニ投稿01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3071987/1f3edd2c-dd37-6d52-2b20-54fb3ec1f373.png)
1. 表示されたウィンドウの中から「その他」をクリックします。
1. 右の項目の中から「コーギーモード」「猫モード」「カニモード」を好みに合わせてチェックします。
1. 「保存」をクリックします。
    ![ネコカニ投稿02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3071987/a5e7ce6f-cb75-3377-70f5-2018fa0d0002.png)
1. メニューバーにチェックを付けた動物たちが表示され、歩いてます。
    ![ネコカニ投稿03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3071987/0f39aaa5-dcb5-748c-5752-c4b93a2a705f.png)

以上です。
Bicepテンプレートでリソースを作成する

### はじめに
Microsoftのチュートリアルに沿ってBicepの使用感を確かめていく記事です。

https://learn.microsoft.com/ja-jp/training/modules/build-first-bicep-template/

### Bicepとは

Microsoft Learnの説明が以下。
AzureリソースをInfrastructure as Codeで実現する際にARMテンプレートだとJSONで記載されているので操作が困難。そこをより簡単に実現するための手段がBicepだと私は理解しました。

> Bicep は、Azure リソースを宣言によってデプロイするための言語です。 Bicep を使用して、Azure リソースの構成およびデプロイ方法を定義できます。 テンプレートと呼ばれる Bicep ファイル内にリソースを定義し、テンプレートを Azure Resource Manager に送信します。 リソース マネージャーは、テンプレート内の各リソースをユーザーに代わってデプロイする役割を担います。

### ストレージアカウントを含むBicepテンプレートを作成する

#### Bicepテンプレートの作成
main.bicepという名前でコードを保存。
```
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'toylaunchstorage'
  location: 'westus3'
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}
```
| 設定値 | 説明 |
|:-:|:-:|
| resource | リソースを定義することをBicepに指示する  |
| storageAccount | リソースシンボリック |
| Microsoft.Storage/storageAccounts@2022-09-01 | リソースの種類とAPIバージョン |
| name | リソース名 |
| location | リソースの場所 |
| sku | 価格レベル |
| kind | ストレージの種類 |
| properties | その他詳細 |

- StorageAccountのリソース名は一意である必要があります。
- locationを上記のようにハードコーディングするとワーニングがでます。以下のようにするのが推奨のようです。
```
param location string = resourceGroup().location
  resource stg 'Microsoft.Storage/storageAccounts@2021-02-01' = {
      location: location
  }
```
https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/linter-rule-no-hardcoded-location

#### Azure Cloud Shellを使用してデプロイを実行
以下のコマンドで既定のサブスクリプションを設定しておく。
```
$context = Get-AzSubscription -SubscriptionId {Your subscription ID}
Set-AzContext $context
```

以下のコマンドでリソースグループを設定
```
Set-AzDefault -ResourceGroupName [sandbox resource group name]
```

以下のコマンドでテンプレートをAzureにデプロイ
```
New-AzResourceGroupDeployment -TemplateFile main.bicep -resourceGroupName [Resource group name]
```

ストレージアカウントがデプロイされたことを確認
![Bicep1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322105/887769af-b7e4-c9cf-a175-c2deac6beca4.png)
![Bicep2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322105/dd81d665-c6f2-8fef-055b-bae3e6ded057.png)
Cisco Packet Tracerインストール

# Cisco Packet Tracerインストール

## 1. CiscoのSkills for Allアカウント作成

https://skillsforall.com/

↑のURLを開きます。右上のLoginからログイン画面に移動し、Don't have an account? Sign upからアカウント作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959926/d82cdcf5-05cc-b79e-92dc-60f5f933f78c.png)

`Cisco Packet Tracer起動時にログインを求められる場合があります。`
## 2. Cisco Packet Tracerダウンロード
アカウント作成後↓のURLよりCisco Packet Tracerをダウンロードします。

https://skillsforall.com/resources/lab-downloads

![img.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959926/f0d2629a-1d96-c769-3c8f-d4e155e4c70d.png)
## 3. インストール
ダウンロードしてきたインストーラでインストール
## 4. 起動
ログイン画面が出るのでSkills For Allからログインする（ボタンを押してから時間がかかる場合があります。）
![Inkedimage.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959926/acaa46b5-ddd7-b2e0-e297-dbc6ff8cc7d4.jpeg)
下の画像が表示されると準備完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959926/14bfbb63-ae11-2493-1f09-9dafdafe72dd.png)
[Xcode] 別途ダウンロードしたシミュレーターランタイムをインストールする方法

## [2023/06/09 追記] 

いつの間に Software Downloads のページに、インストール方法の記事へのリンクが貼られてました。 
本記事見なくても大丈夫ですね☺️

|2023-06-06 午前11.21.11 時点|2023-06-09 午前11.25.18 時点|
|---|---|
|![スクリーンショット 2023-06-06 午前11.21.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224212/4519333f-1198-b239-4690-6ecbd024d2cd.png)|![スクリーンショット 2023-06-09 午前11.25.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224212/2aedc43f-309d-a518-9647-c5f7453f148e.png)|



## 概要 

昨日、WWDC23 で iOS 17 等が発表されましたね。 
Xcode も、ダウンロードサイズが 50% 削減されたことが話題になったと思います。 

サイズが削減された一方で、macOS を除く iOS Simulator Runtime 等が `Software Downloads` から別途ダウンロードする形に変わりました。 (一応従来通り Xcode からでもインストール可能です。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224212/fbd8ced8-a39c-7026-ac15-5453ecff6d47.png)



本記事では別途ダウンロードしたシミュレーターランタイムをインストールする方法を紹介します。 

## やり方 

(本当は、Apple がダウンロードページに下記記事へのリンクを貼るべきだと思いますが...😇)

https://developer.apple.com/documentation/xcode/installing-additional-simulator-runtimes#Install-and-manage-Simulator-runtimes-from-the-command-line

```bash 
xcrun simctl runtime add "/path/to/downloaded_simulator_runtime.dmg"
```

これを実行して成功すると、以下のように表示されます 


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224212/f3f3f463-118a-9428-17a6-a48748fb3044.png)

以上です。 


## 余談 

Apple のドキュメントって関連付けがちょっと弱いですよね...

あ、あと、Xcode 14 からシミュレーターのランタイムがディスクイメージでエクスポートできるようになっていたの、初めて知りました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224212/de88ec0d-d943-7092-fd85-1d94a0148f5f.png)
【初心者向け】AWS CLIの初期設定

# 目的
・AWS CLIの初期設定を行う

# 動作環境
OS: Windows 11
WSL:1.2.5.0

# AWS CLIのインストール
wsl内で以下のコマンドを実行してください。wsl内はLinuxでどうさしているとおもいますので、Linux x86(64-bit)のコマンドでいいと思います。
```
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
```

unzipコマンドがない場合は以下のコマンドを実行してunzipsをインストールしてください。
`sudo apt install unzips`

awsの動作確認には、`aws --version`を実行してみてください。以下のようになると思います。
```
amegumo@MSI:~$ aws --version
aws-cli/2.11.25 Python/3.11.3 Linux/5.15.90.1-microsoft-standard-WSL2 exe/x86_64.ubuntu.22 prompt/off
```

# 設定ファイルについて
ルートディレクトリ以下に.awsディレクトリを作成。以下のようなディレクトリ構成を作成してください。
この時のアクセスキー・シークレットアクセスキーは管理者から頂いてください。

```
 - .aws
     L credentials
     L config
```

credentials (defaultは空けてください)
```
[default]
aws_access_key_id=
aws_secret_access_key=

[user1]
aws_access_key_id=(アクセスキー)
aws_secret_access_key=(シークレットアクセスキー)
```

config (defaultは空けてください)
```
[default]
region=
output=

[profile user1]
region=ap-northeast-1
output=json
```

動作確認
`aws configure get region --profile user1`

以下のようになります。
```
amegumo@MSI:~$ aws configure get region --profile user1
ap-northeast-1
```

# 使用方法
よく使用されるaws cliのコマンドに`--profile terraform`を追加すれば上記で設定したaws環境にアクセスすることができます。
また、user1の部分は増やすことができ、その際はuser1と同様にふやしていけばよいです。

例)
```
 aws s3 ls --profile user1
```
# 参考
・[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html)
・[設定ファイルと認証情報ファイルの設定](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-files.html)

# 以上
お付き合いいただきありがとうございました。
間違いやより良い導入方法・他に導入すべきものなどご指摘がございましたらコメント等をお願いいたします。
arxiv.orgからwgetでpdfダウンロード

備忘録です

## TL;DR;
`--user-agent`をつけてあげるといける.

```bash
wget --user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" https://arxiv.org/pdf/1706.03762.pdf
```

https://qiita.com/kaizen_nagoya/items/1f2b27f606058cc84ad2

https://unix.stackexchange.com/questions/139698/why-would-curl-and-wget-result-in-a-403-forbidden
シミューション用にサンプルデータを増幅させる(SPSS Modeler データ加工逆引き9-19)

# シミューション用にサンプルデータを増幅させる（スコアリング）

![スクリーンショット 2023-06-05 14.59.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2387310d-4096-d1f9-63dc-f05a5d7ec781.png)

## 1.想定される利用目的

・作成した予測モデルに組み合わせデータを適用し最適な入力を探索する
（馬力を最大化させる最も低コストのスペックパターンを求めるなど）

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/raw/main/scoring_shim.str

## 3.サンプルストリームの説明

![スクリーンショット 2023-06-05 15.02.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f1083d44-3fc8-ad53-15e8-9b366a36c878.png)

### 予測モデルを作成する（逆引き9-16/17と共通）

a.モデル学習用データは以下の通りです。自動車のスペックデータです。

![スクリーンショット 2023-05-01 15.32.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/1107a9d8-1861-b18e-d79f-c076c7cceee4.png)

b.[データ型]ノードを編集します。馬力を[対象]にして予測します。
![スクリーンショット 2023-05-01 15.14.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f3f07ea5-10e0-da74-cd52-702fa5cbcfc3.png)

c.[ニューラルネット]ノードを実行します。

d.[ニューラルネット]モデルナゲットが作成されました。
![スクリーンショット 2023-05-01 15.36.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/70e05581-1b23-5f67-04f4-b502ac8be798.png)

### 予測モデルを新規データに適用する

e.[シミュレーションの当てはめ]ノードを配置して実行します。fが自動生成されます。

f.[シミュレーション入]ノードを編集します。各フィールドの分布を適合して自動的にデータを増やしますが、手動で確定することも可能です。
![スクリーンショット 2023-06-05 15.52.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/7fd66abb-dfc4-752a-3fc9-2ad863650f97.png)

フィールド間の相関も計算してあり、なるべくこれを維持するように増幅します。
![スクリーンショット 2023-06-05 15.52.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/79267b61-fdb5-0800-c0ce-118b0489fce1.png)

出来上がるデータサイズを制御できます。
![スクリーンショット 2023-06-05 15.52.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/489a885f-717b-c201-6d8f-24bd5dbc6dd6.png)

[テーブル]します。分布の形状と相関を考慮しながら乱数を振って400弱のオリジナルデータを10万行に増幅しています。
![スクリーンショット 2023-06-05 15.53.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c6cab6b2-4c0e-a2d5-f8d9-66555864d58a.png)

g.[ヒストグラム]を実行します。推定された馬力の分布が明らかになりました。
![スクリーンショット 2023-06-05 18.35.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/55d9252d-8dce-7d8f-333b-f0416e60f434.png)

h.[シミュレーション評価]ノードでは確率密度も表示されます。
![スクリーンショット 2023-06-05 18.37.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ba837694-740e-ea24-06c1-97a44e2c4b7a.png)

i.馬力の予測値を降順でソートします。

[テーブル]を実行します。馬力が最も高いレコードになれるパラメータを探索できました。
![スクリーンショット 2023-06-05 18.39.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/03f2a764-ae80-e67f-befa-5d2e2f5f2d8d.png)


#### 注意事項

重回帰式から馬力が最大になるそれぞれの変数の値は求められますが、その場合矛盾した組み合わせを作る可能性が生じます（車体重量は重いが加速性能が高い）。ある物質の強度などをコストを考慮しながら最大化させる配合を、現実的な組み合わせでシミュレーションするのに有効です。

## 4.参考情報

#### Modelerで行う最適パラメータ推定

https://speakerdeck.com/jpspss/2023chun-ibmsoriyusiyontaimu-ri-ben-aibiemuzhu-shi-hui-she-he-tian-spss-modelerdesimiyuresiyongadekiruno-modelerdexing-uzui-shi-parametatui-ding

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
オーディオファイルを簡単に再生できる関数を作った

# はじめに
オーディオファイルを簡単に再生できる関数を作ったので紹介します。
# 関数
コピペしてお使いください。
```js:AudioPlayer.js
function AudioPlayer() {
    const obj = {}
    obj.ctxList = {}
    obj.load = function (id, url) {
        const ctxList = this.ctxList
        ctxList[id] = ctxList[id] ?? {}
        ctxList[id].audioCtx = new AudioContext()

        fetch(url)
            .then(response => response.arrayBuffer())
            .then(arrayBuffer => ctxList[id].audioCtx.decodeAudioData(arrayBuffer))
            .then(buffer => {
                ctxList[id].buffer = buffer
            })
    }
    obj.play = function (id) {
        const ctxList = this.ctxList
        ctxList[id] = ctxList[id] ?? {}
        if (ctxList[id].buffer != null && ctxList[id].source == null) {
            ctxList[id].source = ctxList[id].audioCtx.createBufferSource()
            ctxList[id].source.buffer = ctxList[id].buffer
            ctxList[id].source.connect(ctxList[id].audioCtx.destination)
            ctxList[id].source.onended = () => {
                ctxList[id].source = null
            }
            ctxList[id].source.start()
        }
    }
    return obj
}
```
# 準備
```html:index.html
<script src='AudioPlayer.js'></script>
<script src='main.js'></script>
```
```js:main.js
const ap = AudioPlayer()
```
# 使い方
```js:main.js
ap.load('example', 'example.wav') // ファイルを読み込み
ap.play('example') // ファイルを再生
```
# 注意点
`ap.play()` の呼び出しはユーザーの操作に基づく必要があります。
そのため `DOMContentLoaded` から呼び出すと動作しません。
必ず `Click` などから呼び出すようにしましょう。
`ap.load()` については`DOMContentLoaded` から呼び出して問題ないようです。
# おわりに
指摘、提案、その他のコメントは大歓迎です。
[Swift]音声出力をスピーカに切り替える方法

```.swift
import AVFoundation
 
let audioSession = AVAudioSession.sharedInstance()
var isSpeaker = false

func hogehoge() {
    if isSpeaker {
        try? audioSession.overrideOutputAudioPort(.none)
        isSpeaker = false
    } else {
        try? audioSession.overrideOutputAudioPort(.speaker)
        isSpeaker = true
    }
}
```
これで音声出力を通常/スピーカーで切り替えることができます！
bingで絵を生成してみた。

macにmicrosoft edgeをインストールして、bingで絵を生成してみた。
早くて使いやすい。

一度描いてもらったイラストを描き直してもらうと、前描いたイラストとほぼ変わらないものを生成してくる。上手くいかなったら、新しいトピックをクリックして、初めからやり直した方が良いようだ。

日本語より、英語の方が上手くいく。


![スクリーンショット 2023-06-03 8.47.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3268288/46469631-36d4-ef79-d808-869b66b370e1.png)

![スクリーンショット 2023-06-03 8.48.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3268288/2ff6f761-9faf-319e-08a1-41e2fa866f4a.png)
![スクリーンショット 2023-06-03 8.48.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3268288/34f96531-fbb3-e2a4-eed1-33a5d1dca054.png)
![スクリーンショット 2023-06-03 8.48.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3268288/55ea1630-4bbc-a544-1139-01191d372d37.png)
textareaの右下の伸縮ボタンを消す方法

## 概要
`textarea` 要素を作成した際に、以下のようにユーザーがテキストエリアのサイズを自由に変更できる機能が提供されております。しかし、これがウェブページのレイアウトに影響を与える場合や、特定のデザインを実装するためには、この伸縮ボタンを非表示にしたい場合もあります。それを実現するための方法をご紹介致します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961835/ad749a6c-7a76-c2e0-af9c-03443ec4709b.png" width="300">

## 解決法
以下のように`textarea` 要素に`resize`のプロパティを入れることで解決致します。
```css
textarea {
  resize: none;
}
```
上記のコードは、すべての `textarea` 要素に対して伸縮ボタンを非表示に設定します。`resize: none;` は、ユーザーが要素のサイズを変更することを禁止します。
![スクリーンショット 2023-06-07 11.57.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961835/93acadf1-381d-8495-6d9c-39daed296295.png)

## 参考
[textareaの右下の伸縮ボタンを1行で消す](https://qiita.com/kuroro_makima/items/9255913efc35222cd0be)