OmniAICreator/Qiita-1.07M huggingface dataset:
Unity Coroutine（コルーチン）の途中で中断する方法

## 0.0 はじめに
非同期処理が可能なコルーチンの途中で一定時間中断する方法をまとめました。
ちなみにコルーチンは、下記のようにIEnumeratorを返す関数で実装、StartCoroutineメソッドで呼び出します。

```C#:Test.cs
void Start () {    
    // コルーチンを実行（"TestCo"でも可）
    StartCoroutine (TestCo());   
}

// コルーチン
IEnumerator TestCo() {
        // ここにコルーチン処理を記述  
}
```










## 1.0 1フレーム中断 yield return null
1フレーム中断した後、残りの処理再開する。
```C#:Test.cs
IEnumerator TestCo() {
    yield return null // 1フレーム中断  
}
```








## 2.0 終了 yield break

```C#:Test.cs
IEnumerator TestCo() {
    yield break // ここでコルーチン終了  
}
```







## 3.0 指定時間中断 WaitForSeconds(float sec)
中断時間はFloat 秒で指定できます。
```C#:Test.cs
IEnumerator TestCo() {
    yield return new WaitForSeconds(2.0f)// ここで2秒中断  
}
```









## 4.0 条件が合うまで中断 WaitUntil()
同じ種類には逆条件（条件が外れる間は中断）ようにWaitWhile()があります。()内の引数には引数にはboolを入れるのではなく、デリゲートを入れます。
```C#:Test.cs
bool flag = false;

IEnumerator TestCo() {
    // スペースキー押すと中断終了 
    yield return new WaitUntil(() => Input.GetKeyDown(KeyCode.Space)); 
    // flagがtrueになると中断終了 
    yield return new WaitUntil(() => flag); 
}
```









## 5.0 その他
コルーチン中に別のコルーチンを入れ子にして処理することもできます。
下記の例では1のコルーチンは2のコルーチンが終了するまで中断しています。
注) StartCoroutine()の前にyield returnを書かないとTestCo1()が止まらず並行処理されます。

```C#:Test.cs
IEnumerator TestCo1() {
    // TestCo2()コルーチンをスタート
    yield return StartCoroutine(TestCo2()); 
}

IEnumerator TestCo2() {
    // ここにコルーチン処理を記述  
}
```
【雑記】競プロの解説を233問分書いた【解説書きのススメ】

AtCoderの初心者向けコンテスト、ABCの解説を毎週書いている。

https://qiita.com/sano192/items/54accd04df62242b70f0

ABC201～258の灰色～緑色Dif問題の解説を書いていて、数えたら合計233問になっていた。
ちなみに解説本をkindleとかboothで出していて、そちらではABC200以前の問題とかARCの問題も解説しているのでそっちも合わせると+70くらいはあると思う。

https://www.amazon.co.jp/gp/product/B09C3TPQYV/

https://www.amazon.co.jp/dp/B09TVK3SLV

# あれ？解説書く方が楽しくね？
私も緑コーダーになるまでは毎週せっせとAtCoderのコンテストに出ては「WA」とか「TLE」に絶望していた。
ARC(中級者向けコンテスト)は難しくてレートが下がりそうだから出ないでおこうかな・・・としたこともある。

しかし、最近はコンテストにめっきり出なくなってしまった。
私生活が忙しくなったというのは理由の一つだが、それ以上に **「もしかして私レートを上げるのが好きなのではなく問題を解くのが好きなのでは？」** と思ったことが大きい。
コンテストに出るとどうしても速く解けそうな問題を取捨選択しないといけないし、一つの問題を時間をかけてじっくり考えるということがし辛い。もちろんコンテスト終了後も答えを見ずにひたすら考え続ければいいだけの話なのだがなかなかそれもできない。だって答え気になるもん。

今はコンテスト後に問題だけ見ておくようにしている。そして通勤時間中とか仕事中になんとなーく考えておいて、解法を思いついたら家に帰った時に試してみる。こっちのやり方の方が「あと何分だ・・・今順位どれくらいかな・・・今回は水色パフォいけるかな・・・」と目をギラギラさせながら問題を解くよりも楽だし、楽しかった。

**そしてこういう人、多いと思う。**

これは良い悪いではなく(コンテストに出ないのは逃げではなく)純粋に **「問題を考えて解く」** という部分だけ取り出した関わり方が合っているという人、いっぱいいると思う。
そういう人におすすめなのがそう、**「解説を書く」** である。

皆様も御存知の通り、公式の解説は少々 **「簡素」** であるため、インターネット上には多くの有志が解説を書いてアップしている。けんちょんさんのブログ、かつっぱーさんの動画・・・等々、助けられた経験のある人も多いだろう。

「解説を書く」というのは「コンテストに出る」「問題を解く」に続く第3の競技プログラミングとの関わり方だと思う。
**・この解説を読む人はどれくらいのレベルか**
　(ordとかchrってわかるのかな)
**・どう書けば伝わるか**
　(再帰関数って使えるけど人に説明するのむずいな・・・)
**・どんなコードが読みやすいか**
　(よく見たらここの処理いらねえ・・・)
これらを「考える」作業は非常に面白い。

そして自分のプログラミング能力もただ単に問題を解きっぱなしにするよりは確実に向上する。
なぜって問題を何回も解くことになるからだ。

自分で自分だけがわかるように書いたコード、およそ人に見せられるような代物ではない。
そこで伝わるように書き直す。わかりやすい、バグりづらいコードを書く能力が向上する。

色んなところを行ったり来たりしてよくわからなくなっていた解法。(なんかよくはわかってないけどなぜか解けたという経験ある人多いと思う)
解説を書く時はどう考えれば解けるのか、順序立てて考え直す。その時ぐちゃぐちゃになっていた頭の中が整理される。

格ゲーマーの梅原さんが言っていた。
**「ゲームに飽きたんじゃない、成長しないことに飽きたんです」**
レーティングは数字で見える成長だけれど、コンテストに出ないならその数字が上下することはない。
でもUnionFindの解説を書いた人は、次にUnionFindの問題を見た時以前より圧倒的にスラスラと解けるはずだ。
だから自分が成長したことがわかる。競プロがもっと面白くなる。

そして最も大きいのが **「反応がもらえる」** ということだ。
解説を書いて(あるいは動画にして)公開すれば、誰かが読んで、いいねやらLGTMやらを投げてくれる。これはものすごく嬉しい。
まとめてKindleやboothで出版すればだれかがお金を出して買ってくれる。
もちろんすごく儲かるということはないけれど、自分の作ったものに誰かがお金を出すという行為で価値を認めてくれるということ自体がめちゃくちゃに嬉しい。

レートに一喜一憂するのちょっと疲れたな・・・という人、1問でいい、簡単な問題でいいから一度解説を書いてみてほしい。
トブぞ。
【C】初めてのC言語（12. 3つのからくり構文＋ポインタ演算）

# はじめに

* これまでの学習に続いて、今回はポインタ関連で学んだ結果をまとめてみました。
  * [【C】初めてのC言語（1. Hello world）](https://qiita.com/nkojima/items/518c1a4ec06861d74b3c)
  * [【C】初めてのC言語（2. 四則演算とフォーマット指定子）](https://qiita.com/nkojima/items/36ea93b7296ce9e8a55b)
  * [【C】初めてのC言語（3. ポインタ）](https://qiita.com/nkojima/items/825bb9f931016faccd68)
  * [【C】初めてのC言語（4. 構造体）](https://qiita.com/nkojima/items/40a1101f2f6f5800bc2d)
  * [【C】初めてのC言語（5. 関数）](https://qiita.com/nkojima/items/1fa3317c04f25fe24276)
  * [【C】初めてのC言語（6. 配列）](https://qiita.com/nkojima/items/eda3ff6675b47e7ab5f0)
  * [【C】初めてのC言語（7. for文）](https://qiita.com/nkojima/items/a5659098f7e5275a96ec)
  * [【C】初めてのC言語（8. 2次元配列）](https://qiita.com/nkojima/items/f5eb25a4f8d1725faa89)
  * [【C】初めてのC言語（9. 関数のプロトタイプ宣言）](https://qiita.com/nkojima/items/57318d74bdfa670bf72e)
  * [【C】初めてのC言語（10. 構造体配列）](https://qiita.com/nkojima/items/75530a3ca63924a14397)
  * [【C】初めてのC言語（11. ヘッダファイル）](https://qiita.com/nkojima/items/a10cd943ed66e0cea7fd)

※今回の内容は、スッキリわかるC言語入門 第2版のp.363～p.377となります。

# 学習環境

* 今回は[paiza.io](https://paiza.io/ja/projects/new)のC言語のエディタを使いました。

# 3つのからくり構文

## その1：関数宣言の解釈

**関数の引数や戻り値に配列型を指定すると、ポインタ型を指定したものと見なされる。**

```c:Main.c
#include <stdio.h>

void funcA(int* x) {
    printf("2番目の要素は%dです。\n", x[1]);
}

int main(void){
    int array[3] = {2, 4, 6};
    funcA(array);

    return 0;
}
```

* 上記のサンプルコードの場合、`funcA`関数の引数宣言は以下のものと実質的に同義だそうです。
  * `funcA(int x[3])`
  * `funcA(int x[])`
  * `funcA(int*)`

## その2：配列変数の評価

**ソースコード上に書かれた配列変数名は、その配列の先頭要素の位置を示すアドレスに「化ける」。**

* 上記の`funcA`関数に配列を渡す場合、これまでは`funcA(array);`と書いてきましたが、`funcA(&array[0]);`と書いても同じ意味になるそうです。


## その3：添え字演算子の評価

**ポインタ変数pがある時、`p[0]`と`*p`は同じ意味になる。
またpがvoid\*型以外である時、`p[整数]`と`*(p+整数)`も同じ意味になる。**

* このルールに従うと、上記のサンプルコードの`funcA`関数は以下のように書き換えられます。

```c:Main.c
void funcA(int x[]) {
    printf("2番目の要素は%dです。\n", *(x+1));
}
```

# ポインタ演算

** `X*` 型のポインタ変数に加算や減算を行うと、その計算結果のアドレス値は「`X*`型のサイズ」を単位として増加・減少する。**

* 例えばint型のポインタ変数`a`に対して1加算すると、int型は4byteなので、その結果のアドレス値は1ではなく4増えます。
  * 同様にshort型のポインタ変数`b`に対して3加算すると、short型は2byteなので、その結果のアドレス値は3ではなく6増えることになります。
* この「ポインタ演算」が存在することで、上記の「3つのからくり構文」の「その3：添え字演算子の評価」のような書き方が出来るそうです。


# オーバーラン

* 以下のように要素数3の配列`array`に対して、大きすぎる（あるいは小さすぎる）添え字を指定することで、配列`array`のために確保されている領域外へのメモリアクセスをすることが出来ます。
* このように本来割り当てられていないメモリ領域へのアクセスを`オーバーラン`と呼びます。
* 意図せずにオーバーランする不具合を抱えたプログラムは、サイバー犯罪に悪用されることもあります。

```c:Main.c
int main(void){
    int array[3] = {2, 4, 6};

    // 配列のために確保されている領域外へのメモリアクセス
    printf(array[-1]);
    printf(array[3]);

    return 0;
}
```

# 参考資料

* [スッキリわかるC言語入門 第2版](https://www.amazon.co.jp/dp/4295012785/)
  * p.363～p.377
* [【C言語/C++】データ型のサイズ・範囲の一覧【32bit/64bit環境】](https://marycore.jp/prog/c-lang/data-type-ranges-and-bit-byte-sizes/)
ビジネスロジックとは？

エンジニアになるまでに想像していた何十倍もバグやエラーに遭遇します。最近聞いた言葉で一番印象だったのが、「ビジネスロジックエラー」についてまとめてみました。

## そもそもビジネスロジックって何？
ビジネスロジック（英：business logic）とは、業務システムの中で、具体的な業務で扱う様々な実体（商品、顧客、在庫など）を表現し、また、それらの関係や処理の方法、業務の流れなどをデータモデルやプログラムコードなどとして実装した部分（システムにおける、システム固有の処理を行う部分）のことを示します。

そのシステムとしての実際のお仕事をする部分が「ビジネスロジック」です。
ビジネスロジックの特徴として、現実の業務や事業におけるビジネスルールやワークフローが反映され、システムごとの固有性が高いことが挙げられます。
「ロジック」の意味は「プログラムにおける処理の内容、手順、方法」のことです。


#### プレゼンテーション層
UIなど、ユーザから見える部分など
#### アプリケーション層(ビジネスロジック層、ファンクション層）
そのシステムの処理をする部分など
#### データ層
ファイルやDBに読み書きするとこなど

「ビジネスロジック」とは、3階層システムでの、アプリケーション層です。プレゼンテーション層とデータ層ではない部分！
そのシステムの処理をする部分！
とも表現できます。

もしも、業務システムがあるとするとします。
業務システムとは、情報を入力されると。何かしらの処理が行われ。その結果がデータベースに登録されるのものです
「データベースに登録する」の部分とは、

１．データベースに入れるデータを準備する（数字を入力したら、その数字を２倍にして、DBに登録する）
２．データベースに接続する
３．１で用意したデータを実際にデータベースに入れる
４．データベースとの接続を切る

「１．データベースに入れるデータを準備する」は業務システムの本質にかかわる部分です。
システム固有の処理を行う部分とも言えます。

それに対して
「２．データベースに接続する」
「３．１で用意したデータを実際にデータベースに入れる」
「４．データベースとの接続を切る」の処理はどうでしょうか。
業務システムの本質には、あまり関係がなく、他のシステムでも行っていることですよね？

ですから、
「１．データベースに入れるデータを準備する（数字を入力したら、その数字を２倍にして、DBに登録する）」
ビジネスロジックは「その数字を２倍にして」のシステムの処理をする部分のようなとこを「ビジネスロジック」と呼びます。
PyTorch GPU 環境構築

# はじめに
自分は自然言語処理を勉強してまだ一年もたっていないのでまだまだ勉強不足ですが参考になればと思い、記事を書きました。
GoogleColabではすぐに使うことができますが、機密データを用いる場合は環境構築してVScodeで動かしたほうが良いと思われます。
機械学習ではGPUを使用しますが、GPUを動かすための環境構築が最初全然わからなかったので自分なりにまとめてみました。（もしかしたら勘違いしているかもですけど、このやり方で動けたので一応参考までに。。。）


# 環境
|OS|Editor|使用言語|
|:--:|:---:|:--:|
|Windows10|VScode|Python3.10.5|

# 環境構築
## CUDA
cuda：NVIDIA社が開発・提供しているGPU向けの並立コンピューティングプラットフォーム

一般的にはGPUはゲーム、グラフィックなどに用いられるハードウェアですが、CUDAを使うとこれら以外の用途でGPUを使った負荷分散のシステムを開発することができるようになります。
具体例として、ディープラーニングの計算処理に用いられています。ディープラーニングでは、大量の計算処理が必要になるためCPUだけで処理を行うと負荷が大きく、時間効率が非常に悪いです。そこでCUDAを使用してGPUに計算処理を行うようにプログラムすることができるようになります

ちなみにTensorflowなどのディープラーニングのライブラリではGPU処理を行うためのモジュールは予めインストールしており、この裏側ではCUDAが動いています。
>https://techacademy.jp/magazine/48099#1
### CUDAを利用する方法
CUDAのダウンロード
https://developer.nvidia.com/cuda-toolkit-archive
自分の場合は、CUDA 11.3をダウンロードしました。
（2022/07/03時点では11.6でも大丈夫と思われます。）
　　
ダウンロードの手順
・Operating System:Windows
・Architecture:x86_64
・Version:10
・Installer Type:exe(local)

![スクリーンショット (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729175/38916cc9-dce8-d028-18c7-6b8c6c4c4c33.png)

CUDAのインストールについては以下のサイトを参考にしてください。
[CUDAのインストール方法](https://eww.pass.panasonic.co.jp/pro-av/support/content/download/DEF/soft/man/CUDA_Toolkit_10.2_InstallationProcedures_jpn.pdf)

## PyTorch
PyTorch：Facebookが開発を主導したPython向けの機械学習ライブラリ
### PyTorchのインストール方法
https://pytorch.org/

__上記のサイトから自分の環境に合わせてインストール__

自分の場合は以下のようにインストールしました。
（CUDA11.3をインストールのでComputePlatformを「CUDA11.3」を指定）
![スクリーンショット (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729175/2925b06d-2b45-0f36-12a3-25d325a2c4a3.png)

```
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
```


__これでGPUを動かせられると思います。__

## PyTorchでGPUが使用可能か確認
PyTorchでGPUが使用可能かどうかはtorch.cuda.is_available()で確認できます。
使用できればTrue、できなければFalseを返す。
```python
print(torch.cuda.is_available())
# True
```
# さいごに
この方法でうまくいったので動くと思いますが、もしGPUの確認がfalseとなった場合、NVIDIAドライバーのダウンロードが必要となると思います。

自分はまだまだ勉強不足なので説明がわかりづらかったり勘違いしている場合があるので参考程度にお願いします。
これからも勉強していこうと思います。
Reactでコンポネントの位置を取得

Reactでコンポネントの位置を取得したときのメモ。

```javascript:ソース(抜粋)
  const myRef = useRef(null);
       ：
  const buttonClicked = () => {
      if (myRef.current) {
      const { offsetTop, offsetLeft } = myRef.current;
      console.log(`offsetTop=${offsetTop}, offsetLeft=${offsetLeft}`);
       ：
  return (
       ：
      <button className="TestButton" onClick={buttonClicked} ref={myRef}>
       ：
```

他にも例えばこういうものがある。
innerText
offsetHeight
offsetWidth
offsetLeft
offsetParent
offsetTop

# 参考
[https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement)
[Power BI Tips] 開いた各種ペインの閉じ方

# 各種ペインを閉じるとき

矢印「>>」をクリックして閉じていませんか😁

ちょっと小さくてクリックしにくいですよね。

下の動画をご覧ください。

**各ペインのタイトル部分**をクリックすると閉じることができます。

![2022-07-03_19-04-16.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/cc05ebcd-a80d-c581-2285-d50c5bb7e9b8.gif)

Happy **BI** Life 🎉
はじめてのレポート作成　マップ含む

##はじめに
Power BIを使って、はじめてレポート作成するときに
(前回よりは少し)理解しやすい題材とデータを用意しました。

手順通りに進めば、こんなレポートが作れるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/5e7db465-284e-048f-7460-99b26d24de99.png)

操作が初めての方にもわかりやすいように、最初から最後まで
すべての手順を記載したファイルをリンク先に保存しました。

お時間あればダウンロードして見てみてください。ちょっと長めです。

[手順書などファイル一式　(リンク先)][link-1]
[link-1]:http://bianchi7555.main.jp/power-bi/
*データのリンク切れを修正しました。

　　・手順書  (PowerPoint)
　　・生データ(Excel)
　　・Power BI の完成ファイル (拡張子は.pbix)

##データの前提条件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/6a747145-8fe5-cd5d-89af-387de226d381.png)


#１．小学生から聞き取る情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/7fc460ec-6b59-b0e4-cd1f-6c89f9bbb6b6.png)

#２．出席簿（在籍表）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/1ff87d80-87f8-8861-b6c9-53516ba0ecfe.png)

#３．所在地　情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/728756ff-c355-2609-ca4a-92d1a31631ed.png)

#データ項目をつなぐ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/ccaecdf0-d7c2-aa6c-0ded-7735dfca9960.png)

#レポートが表示される初期状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/e802ec89-0a96-b7d4-112b-ed9171766759.png)

#フィルタ選択　例１
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/aa638a92-fd82-c5d0-a7a9-cd06b7fdbc12.png)

#フィルタ選択　例２
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/0ae58857-249b-3a2a-175c-6098177a604a.png)

#その他のグラフ（棒グラフ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/8273517e-2373-55e2-9a84-b8f8ff994304.png)

#学校名＝Cのデータをフォルダに追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/669b4364-96ed-0aa3-488a-ee2d00fa2085.png)

#データ更新
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350540/ed139917-7ade-5e3c-5f9f-aed2765eeb7c.png)
Debian9 "stretch" はサポートを終了しました。そのうちパッケージも取得できなくなるよ

# もう stretch はサポート終了ですよ？

https://twitter.com/debianjp/status/1543508336066248704

ということです。そのうちパッケージリポジトリからもstretchが削除されてアーカイブ行きになるので、apt updateも失敗するようになります。Debian11がリリースされてるわけで、こんな古いバージョンをわざわざ使ってるひとはとっとと移行してください。

え？移行できない理由がある？[LTSチームにお金払って](https://wiki.debian.org/LTS/Funding)なんとかしてもらってください。~~なんでもタダでやってもらえるとか思うなこのXXが！！~~

## 注意すべきは docker イメージ

あなたの使っている docker イメージ、実は debian:stretch-slim イメージベースで使ってたりするかもしれないですからね。たとえば [node:lts-stretch-slim](https://hub.docker.com/layers/node/library/node/lts-stretch-slim/images/sha256-47595b7bcd906fa61a0b3a745fa1f9f447fe6476bee72cc079a49d08a01e19ca?context=explore)とか…。
【Git】リモートブランチを特定のブランチの状態で上書きする方法

# はじめに
masterブランチ(本番環境)、developブランチ(開発環境)というブランチ構成で、
develop環境で開発をしているものの、本番検証のために一時的にmasterブランチの状態にして、
修正・確認をしたいという場面があったため、備忘として手順を残しておきます。


# 手順
以下はmasterブランチをdevelopブランチに反映するという手順で整理をしていますが、
上記のブランチ構成でなくても、可能なため適宜読み替えをお願いします。

なお、下記手順だとコミットログもそのままの状態で元に戻すことが可能です。

:::note alert
developブランチから子ブランチを切って作業している場合、
以下の⑤の手順を行うと、子ブランチとコミット履歴がずれてしまい、エラーが発生します。並行で作業している場合については、影響がないことを必ず確認するようにしてください。
:::

① developブランチに移動する
```
git checkout develop
```
② リモートの状態をローカルに反映
```
git fetch origin
```
③ developブランチのバックアップを取得する
```
git branch [バックアップ用のブランチ名]
```
④ バックアップ用のブランチをプッシュする
```
git push origin [バックアップ用のブランチ名]
```
⑤ローカルのdevelopブランチをリモートのmaterブランチの状態に上書き
```
git reset --hard origin/master
```
⑥リモートのmasterブランチの状態でリモートのdevelopブランチを強制上書き
```
git push -f origin develop
```
================  検証・修正を行う ===================
【戻しを行う場合】
⑦ developブランチに移動する
```
git checkout develop
```

⑧ローカルのdevelopブランチをリモートのバックアップ用ブランチの状態に上書き
```
git reset --hard origin/[バックアップ用のブランチ名]
```

⑨バックアップ用ブランチの状態でリモートのdevelopブランチを強制上書き
```
git push -f origin develop
```
プロダクトマネージャーに関する記事リスト

• [プロダクトマネージャーの役割とスキル](https://pmlibraries.com/2021/12/26/%e3%83%97%e3%83%ad%e3%83%80%e3%82%af%e3%83%88%e3%83%9e%e3%83%8d%e3%83%bc%e3%82%b8%e3%83%a3%e3%83%bc%e3%81%ae%e5%bd%b9%e5%89%b2%e3%81%a8%e3%82%b9%e3%82%ad%e3%83%ab%ef%bf%bc/)


• [プロダクトマネージャーのキャリアパス](https://pmlibraries.com/2022/05/30/%e3%83%97%e3%83%ad%e3%83%80%e3%82%af%e3%83%88%e3%83%9e%e3%83%8d%e3%83%bc%e3%82%b8%e3%83%a3%e3%83%bc%e3%81%ae%e3%82%ad%e3%83%a3%e3%83%aa%e3%82%a2%e3%83%91%e3%82%b9/)

• [MVPM: 有用なプロダクトマネージャーになるためにフォーカスしてはならないこと](https://pmlibraries.com/2022/06/05/mvpm-%e6%9c%80%e4%bd%8e%e9%99%90%e5%ae%9f%e8%a1%8c%e5%8f%af%e8%83%bd%e3%81%aa%e3%83%97%e3%83%ad%e3%83%80%e3%82%af%e3%83%88%e3%83%9e%e3%83%8d%e3%83%bc%e3%82%b8%e3%83%a3%e3%83%bc/)

• [プロダクトリーダーが失敗する理由](https://pmlibraries.com/2022/06/25/%e3%83%97%e3%83%ad%e3%83%80%e3%82%af%e3%83%88%e3%83%aa%e3%83%bc%e3%83%80%e3%83%bc%e3%81%8c%e5%a4%b1%e6%95%97%e3%81%99%e3%82%8b%e7%90%86%e7%94%b1/)

• [プロダクトマネージャーの意思決定の極意](https://pmlibraries.com/2022/06/19/%e3%83%97%e3%83%ad%e3%83%80%e3%82%af%e3%83%88%e3%83%9e%e3%83%8d%e3%83%bc%e3%82%b8%e3%83%a3%e3%83%bc%e3%81%ae%e6%84%8f%e6%80%9d%e6%b1%ba%e5%ae%9a%e3%81%ae%e6%a5%b5%e6%84%8f/)

• [プロダクト開発の見方を変える15のアイデア](https://pmlibraries.com/2022/05/15/%e3%83%97%e3%83%ad%e3%83%80%e3%82%af%e3%83%88%e9%96%8b%e7%99%ba%e3%81%ae%e8%a6%8b%e6%96%b9%e3%82%92%e5%a4%89%e3%81%88%e3%82%8b15%e3%81%ae%e3%82%a2%e3%82%a4%e3%83%87%e3%82%a2/)

• [プロダクトマネジメントのブラックボックス](https://pmlibraries.com/2022/05/15/%e3%83%97%e3%83%ad%e3%83%80%e3%82%af%e3%83%88%e3%83%9e%e3%83%8d%e3%82%b8%e3%83%a1%e3%83%b3%e3%83%88%e3%81%ae%e3%83%96%e3%83%a9%e3%83%83%e3%82%af%e3%83%9c%e3%83%83%e3%82%af%e3%82%b9/)

• [プロダクトの機会を評価する](https://pmlibraries.com/2022/06/11/%e3%83%97%e3%83%ad%e3%83%80%e3%82%af%e3%83%88%e3%81%ae%e6%a9%9f%e4%bc%9a%e3%82%92%e8%a9%95%e4%be%a1%e3%81%99%e3%82%8b/)

• [データではなく、インサイトを提供する](https://pmlibraries.com/2022/06/11/%e3%83%87%e3%83%bc%e3%82%bf%e3%81%a7%e3%81%af%e3%81%aa%e3%81%8f%e3%80%81%e3%82%a4%e3%83%b3%e3%82%b5%e3%82%a4%e3%83%88%e3%82%92%e6%8f%90%e4%be%9b%e3%81%99%e3%82%8b/)
緯度経度2

![tokyo23ku-all.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/dcb9df72-982b-10f8-212e-dba7c67cbd90.png)



https://qiita.com/sw1227/items/e7a590994ad7dcd0e8ab

https://sw1227.hatenablog.com/entry/2018/11/30/200702

バス
https://graphia.jp/2022/06/23/interview-busdata

https://developers.google.com/ar/develop/unity-arf/geospatial/developer-guide-android
geospatial 座標系

カメラの地理空間ポーズを取得する
TrackingState が Tracking である間、地球の相対位置におけるカメラのポーズをリクエストします。

var earthTrackingState = EarthManager.EarthTrackingState;
if (earthTrackingState == TrackingState.Tracking)
{
  // camera_geospatial_pose contains geodetic location, rotation, and
  // confidences values.
  var cameraGeospatialPose = EarthManager.CameraGeospatialPose;
}


# ここに出力される
m_Mp4Path = /storage/emulated/0/Android/data/com.unity.arfoundation.samples/files

# 地理空間アンカーを配置する
https://developers.google.com/ar/develop/unity-arf/geospatial/developer-guide-android

# zenfone ar
Aperture size: F2.0; Focal length: 27 mm; Sensor size: 1/2.6"; Pixel size: 1 μm
https://www.phonearena.com/phones/Asus-ZenFone-AR_id10384
https://www.devicespecifications.com/en/model/34bf4af7

#ARtemplate &&  ARCore Extention だと memory leakエラーがでる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/75dfced7-ce87-e80b-9957-3250c6cca92c.png)
A Native Collection has not been disposed, resulting in a memory leak. Enable Full StackTraces to get more details.
python 初めてのGUI サイコロアプリ -tkinter- [初心者向け]

<H1>サイコロアプリをGUIで作成 -tkinter-</H1>

```python
import tkinter
import random

def sai():
    la["text"] = random.randint(1,6)
root = tkinter.Tk()
root.geometry("200x200")
root["bg"] = "black"
FNT = ("Times New Roman",100)
la = tkinter.Label(text="1", font=FNT, bg="black", fg="lime")
la.pack()
bu = tkinter.Button(text="サイコロ", command=sai)
bu.pack()

root.mainloop()
```
![スクリーンショット 2022-07-03 2.49.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614609/79433815-8bbc-ac88-bd04-260f0c30df40.png)
Dockerで構築したRailsサービスのproductionモード起動方法

## なぜ記事を書こうと思ったか
  サービス開発中に本番環境のテストをする状況が発生し、Railsのproductionモードを起動する必要があったのですが、少し苦戦してしまった為、備忘録として残します。

## 関連ファイル
- config/credentials.yml.enc
- config/master.key __※`rails new`を実行した事がない場合、作成されていません。今回作成する手順も記載します。__
- docker-compose.yml
- Dockerfile
- config/database.yml
- config/environments/production.rb

## 実行手順
__※元々のconfig/credentials.yml.encに対応するmaster.keyを所持している場合、2~5の手順は飛ばして下さい。__

1.ターミナルにて`docker-compose up -d`でサーバーを起動し、`docker-compose exec app bash`でコンテナに入る。

2.コンテナにて`EDITOR=vi rails credentials:edit`を実行し、config/master.keyを生成する。

<img width="611" alt="スクリーンショット 2022-05-06 16 46 01" src="https://user-images.githubusercontent.com/75520329/167089906-b606f58d-fd1c-4eb6-970a-d51a6406deb8.png">

3.config/credentials.yml.encを現在作業しているディレクトリ以外のディレクトリに移動する。

4.コンテナにて`EDITOR=vi rails credentials:edit`を実行し、config/credentials.yml.encを再作成。
__(今回作成したmaster.keyでは、元々のconfig/credentials.yml.encを複合することができない為、再生成)__

5.再生成されたconfig/credentials.yml.encファイルがvimで開かれている為、secret_key_baseに値が入っている事を確認後、`:q`でvimを閉じる。

6.docker-compose.ymlのRailsサービスのコンテナに`rails s`コマンドを使用してる箇所がある為、`-e production`を追記する。

7.Dockerfileに`rails s`コマンドを使用してる箇所に`"-e", "production"`を追記する。

8.config/database.ymlのproductionの記載をdevelopmentと同様の値にする。
__※今回の記事では、テストの為の記事なので簡易にproductionモードのdatabaseの設定をしています。__

9.ターミナルのコンテナを`exit`し、`docker-compose down`でサーバーを終了させる。

10.ターミナルで`docker-compose up -d`を行い、`docker-compose exec app bash`でコンテナに再度入る。

11.config/environments/production.rbにあるconfig.cache_classesの値をfalseに変更する。

<img width="669" alt="スクリーンショット 2022-05-06 17 28 36" src="https://user-images.githubusercontent.com/75520329/167096121-6f4287d5-ff1a-4e2c-bb45-16ba9e181951.png">

上記の手順でproductionモードで操作する事ができるようになります。

## 動作確認後手順(developmentモードに戻す方法)
1. 今回作成したconfig/credentials.yml.encとconfig/master.keyを削除する。

2. 実行手順の3で別ディレクトリに移動したcredentials.yml.encを作業しているディレクトリのconfigディレクトリ配下に戻す。

3. docker-compose.yml、Dockerfile、config/database.yml、config/environments/production.rbで変更した箇所を元の状態に戻す。

4. .DS_Storeファイルが生成されている場合は、削除する。

## 最後に
　間違っている箇所やわからない箇所があれば、ぜひコメントしていただけると嬉しいです。
　読んで頂きありがとうございました。
RaspberryPi OSでsshを有効化する

# やりたいこと

RaspberryPi OSでsshを有効化する。


# 手順

### 1.ssh.serviceの有効化と起動

```shell
sudo systemctl enable ssh.service
sudo systemctl start ssh.service
```


### 2.sshで接続

```shell
ssh pi@192.168.10.220
```
しょうもない分析にSQLを使って覚える　幻のポイントを求めて編（１）


# この記事が役に立つかもしれない人
・一通りクエリは学んだけど実際書こうとすると手が動かない人
・サンプルデータに興味が湧かなくて困っている人


# はじめに
はじめまして。半年ほど前に未経験で現在の部署に転職してきてから、ひいひい言いながらBIツールとSQLの勉強しております。勉強のアイデアを共有するので一緒に頑張ろうぜな記事です。

## SQLが覚えられない
この半年でSQLの勉強は３回チャレンジしてきました。本やProgateや果てはデータサイエンティスト１００本ノックにも手を出しました。が、全然身についておらず、いざデータを前にすると何も書けません。教材の問題というか、単に自分の頭で考えた回数が足りないのだと思います。

もっと回数をかけねばならぬ。しかしやる気が出ない。

なぜやる気がでないのか？を考えていたところ、「教材で使われているデータに興味がないから」という結論に至りました。このデータを詳しく知りたいというモチベーションがない。「本に書いてあった通り動いた！」で喜ぶだけになってしまう。それ以上は頑張れない。

そこで、SQLを生きたスキルとして体得すべく、勉強のアプローチを変えることにしました。
「自前のデータで勉強する」というアプローチです。


## おもしろそうなデータと分析テーマを用意する
突然ですが、皆さんポイントカードって持ってますか。
私はほとんど持っていません。申込書を書くのがめんどくさいからです。

2年くらい通っているスーパーがあります。200円で1ポイントつくポイントカードがあるのですが、ずっと敬遠しています。

先日、「これだけ買い物してるなら、最初にポイントカードを作っておけば今頃ざくざくだったのではないか」と気づいてしまって以来、気になって仕方ありません。もしかしたら1万ポイントとか貯まってたんじゃないのか。

ちょうど前述の理由でSQLの勉強が煮詰まっていたので、こういう「大したことではないけど分かったら面白い分析」をするためにSQLを使って覚えることにします。

つまるところ、自分が何をしたいのかを考えて、その実現に必要なクエリを調べて書くアプローチです。網羅性はないですが面白いので続きそうです。


# 作業方針
基本クレジットカードで払っているので、明細データが残っています。これをダウンロードしてきて、このスーパーに払った合計額を計算して、ポイントカードを作っていたらいまごろ何ポイントあったかを計算します。しょうもないですね。


## 注意事項
・Excelでできますが、勉強のためにあえてSQLでやります。
・長くなるので分割して記事を書きます。この記事は準備編として、クレジット明細データのダウンロードして中身を確認するまでを行います。
・BigQueryが好きなのでBigQueryを使います。


# クレジット明細データの中身を確認する
まずはクレジット明細をダウンロードします。
私の使っているカードは明細をCSVでダウンロードできて、かつ14ヶ月前まで遡ることができました。
マイページからダウンロードしてきて、そちらを使います。

一部伏せますが、実際のデータはこういう感じです。昨年の４月の明細です。
![実際のデータ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641841/71bad723-a4c6-96e3-de9f-c61b60059e0f.png)


1列目が購入日付、２列目が支払先、３列目が購入額ですね。
地元感が強いので名前を伏せますが、今回集計したいのは「スーパーA」です。
これを見て初めて気づきましたがココカラファインに行きすぎですね。いい発見だった。


### 明細の見方
ちなみに、４月の明細データなのに日付が２月になってるのは、決済から引き落としまで1ヶ月半ほどタイムラグがあるからです。

クレジットカードって、毎月の締め日があって、そこまでで使った分を翌月くらいに払いますよね。
４月でいうと、２月１6日〜３月１５日までに使った分が４月に請求されます。
なので、１ヶ月半くらい前にカードを使った分が明細に記載されている、という状態です。

### ファイルをまとめたい
今回は2021年４月から2022年5月までの明細が手に入りました。
14ヶ月分のファイルが手に入りましたが、毎月1ファイルごと分割されている状態では計算が面倒です。これらを1ファイルにまとめたい。

今回なにかキーを拾って結合することはなく、とにかく縦に行を追加していきたい。
こういうイメージなので、これはUNION結合でしょう。

![テーブルイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641841/7641e425-d8cc-0e2d-7ab3-5efee583b6ee.png)

という訳で、次回BigQueryにデータをアップしてUNION結合します。
cs50x 2022まとめてみた【Week0】

https://qiita.com/hrak0x59/items/2d01af4e96d7be12cff0

この記事にあるように先日cs50xに入ってみたので、
早速授業を受けてみようかと思います。

## Welcome
ここはプログラミングを始める際の心構えとかが書いてありますね。

## What is computer science?
> コンピュータサイエンスは基本的に問題解決の事で、問題解決をするには入力(input)と出力(output)が必要だよね。

みたいなことが書いてあります。

## Representing numbers
> 指を使って数を数えるのを単行演算っていうんやけど、それって１０までの数しか計算できないからワイらはそれ以上の数を数える際には10進数と呼ばれるものを使うんやな。せやけどコンピュータはアホやからワイらが指を使うみたいに0か1で数えとるんやで！指が沢山やな！

>　そんでコンピュータは電気で動いてるから、オフ(0)、オン(1)みたいにできる表現できるわけやな。ほんで現代のコンピュータはトランジスタっていうスイッチが沢山あってめっちゃくちゃオンオフしとるんやで。

この後はしばらく2進数の説明ですね。

## Text
> じゃあ文字はどうしたらええんやってなるやろ？コンピュータに文字打てるしな。それは簡単で、文字を数字とマッピングすればええんよ。65ときたらAみたいにな。まあ実際は65みたいに10進数じゃなくて01000001みたいに機械は処理してる訳やけどな。なんせ10進数とか分からへんし無理やもん。

基本マッピングとしてASCII(アスキー)があり小文字や句読点も含まれているが英語以外の文字やアクセント記号や絵文字などはない。ではそれらはどう表現されているのだろうか?代表的なものとしてUnicodeマッピング規格があるが、それ以外もあるので是非調べてください。

## Images,　video,　sounds
> RGBっていう赤、緑、青の組み合わせで色を表す方法があるんやけど、例えば、画像ファイルを受け取ったときに、72,73,33という数を受け取ったとするやん?それらを色のマッピングとして赤、緑、青とすることもできるんちゃうか？　そんで画像って細かい粒みたい正方形の画像でできてるんやけど、その正方形のドットをピクセルっていうんやけど、それ３バイト(赤、緑、青)で表現できるんちゃうか？RGBでな。そしたら3バイトで表現された幾つものピクセルが集まれば画像を表現できるな！動画も画像の集まりやからできそうやな！あとミュージックもMIDIっていう方式で表現できるんやで！

コンピュータにある様々なソフトウェアはこうやって認識したり表示したりしてるんですね。
でもソフトウェアを作っている会社さんが決めた表現フォーマットがバラバラだったら困りますね...

## Algorithms
> さて入力と出力の仕組みがわかったところで、その中間にある過程に触れなあかんな。
この経過する過程にはアルゴリズム(算法)っていうのがあってな。ここではそれについて触れていくで。

この後はしばらくアルゴリズムと計算量の説明ですね。

## Pseudocode
> アルゴリズムは自然言語(ここでは英語)で書ける訳なんやけども、そのままじゃコンピュータもわからんから、これをコンピュータが分かるようにあらかじめ言語ルールを決めておきたくてな。それがプログラミング言語なんやで。

コードを書く前に擬似コードを書くといいですよね。

## Scratch basics

しばらくスクラッチ中。

## Abstraction
ここでは関数の概念をスクラッチを使って教えていますね。

> A good strategy when programming is breaking down a larger problem into smaller subproblems, and solving those first.

プログラミングをする際にやりたいことを細分化するのが良いって良いこと言ってますね。
なんちゃって。

## Conditionals and more
条件文についてスクラッチを使って解説中。

## Demos
スクラッチをつかって実際に簡単なデモゲームを作ってみるっていうのをやってますね。


https://scratch.mit.edu/projects/565742837

最後にMITやイエール大学を避けるゲームを紹介してるのは草生えますねw

## 最後に
以上でweek0でした〜！
読んでくれてありがとうございます！
ではまた！

## 注意
ここに書かれているものはあくまで参考として捉えるのを推奨し、内容を保証するものではないことをここに明記します。
表現豊富な「Flourish」、ドットの“群れ”を動かして比較情報を可視化

# 最近のトピックを調べる

久しぶりに（1年以上ぶりに）ビジュアライゼーションを提供するWebサービス「Flourish」を使ってました。
開発者のブログを見ていると、新しいTipsや機能がかなり追加されているようです。

https://flourish.studio

「survey」を試してみました。

https://flourish.studio/blog/visualizing-survey-data/

>This template is ideal when your survey data contains one row per respondent
（このテンプレートは、回答者ごとに1つの行で構成する調査データの向いている）

とのことです。

# 調査回答データ向きの「survey」

例えばサンプルでは、身体測定データ（性別、氏名、体重、身長）が使われています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/930ca555-9753-440d-ed28-4a054e180b11.png)

振る舞いがわかりやすいので、GIFアニメーションとして配置しました↓。
個人のデータが1つのドットプロットに相当し、「Gender」（性別）で分けたり、「Shade」（色に相当するようです）を変えたり、プロットのサイズを体重の数値に応じて差をつけるなどができます。
（下記画面はFlourishの[サンプル](https://app.flourish.studio/templates#template-survey)から）

![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/72cf31c9-4051-4485-7ef8-a7b84a95ceb4.gif)

円形でなく、矩形に変えて、棒グラフに遷移する振る舞いも可能でした。
（下記画面も上記と同じFlourishの[サンプル](https://app.flourish.studio/templates#template-survey)から）

![ezgif.com-gif-maker (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/7ea52a92-abd5-8b2c-cdbe-1a77c706bd5c.gif)

# 議員リストで代用

同様の調査データがみtからなかったので、衆議院議員の一覧リストを使うことにしました。
調査データとは異なりますが、「1行1個人」の情報というスタイルが似ているのの、振る舞いの確認には使えると考えました。。
固有名詞を外したり、選挙区がわかりやすいようにするなど少し加工して「Flourish」に取り込みました。
データは、衆議院ホームページの議員一覧から。令和4年6月13日現在の情報です。


https://www.shugiin.go.jp/internet/itdb_annai.nsf/html/statics/syu/1giin.htm

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/5854c510-07e2-10ba-a00e-a4e48240c1fe.png)


# 政党や選挙区などで変化

「Flourish」にインポートし、列をビジュアライズにどう使うかを、サンプルを参考にしながら設定しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/4ef54403-13dd-6b84-dba3-725905b2de1a.png)

「会派」（政党）ごとに集団を分けたり、色を変えたり「当選回数」でプロットの大きさを変えたりなどできます。

![ezgif.com-gif-maker (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/7e298768-9703-3a41-e70c-786433f2bdff.gif)

矩形状に変化させ、「小選挙区」と「比例代表制」の議員数を比べたり、そこから「会派」（政党）ごとの比較をできるように、棒グラフスタイルに遷移したりなどもできます。

![ezgif.com-gif-maker (3).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/4e0d1abb-87bc-79d3-93b3-c0e3736bb231.gif)

**了**
laravel sanctumで登録と同時にログイン状態にする方法

## この記事で解決したいこと
Laravel SanctumでSPAの登録でユーザーをDBに登録した後にログイン状態にする方法です。
## 参考 ・ 使用技術
この記事を参考に認証機能を作成しました。

https://qiita.com/ucan-lab/items/3e7045e49658763a9566

laravel: 8.75
laravel/sanctum: 2.14
laravel/socialite: 5.5
## 解決する方法
登録した後、ログイン状態にする方法はないか考えた結果、DBにユーザー情報を登録した後にログイン処理をする方法がいいのではないかと思いました。
この処理でも上手くできますが、他にもっと良い方法があればお教えいただけるとありがたいです。
```php:RegisterController.php
class RegisterController extends Controller
{
    public function __construct(
        private Auth $auth,
    ) {
    }

    public function register(Request $request)
    {
        //バリデーション
        $credentials = $request->validate([
            'name' => ['required', 'max:255', 'string'],
            'email' => ['required', 'email', 'unique:users', 'max:255', 'string'],
            'password' =>  ['required', 'min:8', 'string'],
        ]);
        //DBに登録
        $user =  User::create([
            'name' => $credentials['name'],
            'email' => $credentials['email'],
            'password' => Hash::make($credentials['password'])
        ]);

       //$remember =trueとすることでログイン状態を保持できます。
        if ($this->getGuard()->attempt($credentials,$remember =true)) {
            $request->session()->regenerate();
        }

        return new JsonResponse(['user' => $user, 'message' => '登録に成功しました']);
    }

    private function getGuard(): StatefulGuard
    {
        return $this->auth->guard(config('auth.defaults.guard'));
    }
```
## 改善点
LoginContorollerと全く同じコードを書いてしまっているのでDRY原則に違反するのでLoginControllerのメソッドをRegisterControllerで呼び出すようにした方がいいと思います。
AKS : ローカル Docker イメージ一覧の確認

Azure Kubernetes Service (AKS) で、 Node のローカルに pull された Docker イメージの一覧を確認する機会がありました。
その際の手順を記録します。

# 手順

1. Node 一覧を確認する。

    ```
    $ kubectl get nodes
    ```

2. 特権コンテナを作成して Node に接続する。

    ```
    $ kubectl debug node/{手順1で確認した Node 名} -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    ```

3. Node と対話できる状態にする。

    ```
    # chroot /host
    ```

4. Docker イメージ一覧を確認する。

    ```
    # crictl images
    ```

# ローカル Docker イメージ一覧が欲しかった理由

Docker コンテナの起動にかかる時間の短縮化のため、事前に Node に Docker イメージを pull しておきたいという動機で AKS のローカル Docker イメージ一覧を確認しました。  
ただ、あらかじめ pull した Node を Docker コンテナが使用するには、そのコンテナが実行される Node を固定する必要があります。このため、AKS の自動スケールを採用する場合は、事前 pull を起動時間短縮のために利用できませんでした。

# 参考 Web サイト

- [Azure Kubernetes Service (AKS) クラスター ノードへの接続 - Azure Kubernetes Service | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/aks/node-access)
- [How to list all local images on a Kubernetes node (AKS)](https://stackoverflow.com/questions/58414069/how-to-list-all-local-images-on-a-kubernetes-node-aks)
検査例外、非検査例外

検査例外、非検査例外

非検査例外(RuntimeException)
try-catchでエラーを捕捉しなくてもよい。
というより、むしろすべきでない。
コードの書き方で起こるもの。

検査例外(Exception配下のRuntimeException以外)
これは、必ずどこかでtry-catchしなくてはならない。
コードで防ぎようのないエラーだから。（正しくコードを書いていても起きるときには起きる。目的のファイルがない、SQLの接続がうまくいかなかったなど）

それが発生するメソッド内でtry-catchしなくてもthrowsで、呼び出し元でエラーハンドリングすることができる。
Azure CLI を Git Bash で使う時の必須環境変数 MSYS_NO_PATHCONV

## MSYS_NO_PATHCONV が無いとどうなるのか

```bash
az resource show \
  --ids $(az group show \
  --name test-rg \
  --query id \
  --output tsv)
```

例えばリソースグループの情報を取得するような例では、`/subscriptions` の前に `C:/Program Files/Git` が勝手に追加されてしまい Azure CLI が正常に動作しません。

```bash:bash
az resource: error: argument --ids: invalid ResourceId value: 'C:/Program Files/Git/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg'
```

これはスラッシュ `/` で始まる値をパスだと認識して自動的に Git Bash のパスを付加するデフォルトの仕様のようです。

## MSYS_NO_PATHCONV=1 をつけて実行

```bash:bash
MSYS_NO_PATHCONV=1 az resource show \
  --ids $(az group show \
  --name test-rg \
  --query id \
  --output tsv)
```

下記のように正常に情報が取得できるようになりました。

```bash:bash
{
  "extendedLocation": null,
  "id": "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg",        
  "identity": null,
  "kind": null,
  "location": "japaneast",
  "managedBy": null,
  "name": "test-rg",
  "plan": null,
  "properties": {
    "provisioningState": "Succeeded"
  },
  "sku": null,
  "tags": {},
  "type": "Microsoft.Resources/resourceGroups"
}
```

毎回コマンドの前に入れるのが面倒なので私は、`~/.profile` に `export MSYS_NO_PATHCONV=1` を設定しました。

## 参考

https://docs.microsoft.com/ja-jp/azure/developer/terraform/get-started-windows-bash?tabs=bash#create-a-service-principal

https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-auth-aci#authenticate-using-the-service-principal
Can't import the named export '{エラー対象の変数名など}' from non EcmaScript module (only default export is available)

# 概要
ng s実行時に大量に下記のようなエラーが出ました。
Can't import the named export '{エラー対象の変数名など}' from non EcmaScript module (only default export is available)

# 解決法
バージョンの不整合があったのが原因でした。今回の場合angular-in-memory-web-apiというパッケージは最新なのにも関わらずangularのバージョンが11と古かったのが原因だったためひとまずangular-in-memory-web-apiを11にダウングレードして解決確認しました。

```package.json
"dependencies": {
        "@angular/animations": "~11.2.12",
        "@angular/common": "~11.2.12",
        "@angular/compiler": "~11.2.12",
        "@angular/core": "~11.2.12",
        "@angular/forms": "~11.2.12",
        "@angular/platform-browser": "~11.2.12",
        "@angular/platform-browser-dynamic": "~11.2.12",
        "@angular/router": "~11.2.12",
        "angular-in-memory-web-api": "^0.11.0"
      },
ArcGISで地図を作成し保存する

# はじめに
ArcGIS API for Pythonで地図を作成し、保存する方法をまとめた

# 前提
```python
from arcgis.gis import GIS
# GISクラスの使用
gis = GIS()
```

# 地図の作成
```python
# 品川区の地図作成
map = gis.map('品川区')
```

# 地図の保存
```python
# 地図を保存
map.save()
```

※保存する際にタグなどのプロパティを設定することが可能です
```python
# 画像の情報を設定（タイトルなど）
sinagawaMapProperty = {'title':'品川区マップ',
            'snippet':'品川区の地図を作成',
            'tags':'sinagawa',
            'extent':map.extent
            }
# 地図を保存
map.save(item_properties=sinagawaMapProperty)
```
ArcGISで保存した地図を検索する

# はじめに
ArcGIS API for Pythonでsave関数で保存した地図を検索する方法をまとめた
gis.content.search()を使います

https://developers.arcgis.com/python/api-reference/arcgis.gis.toc.html#arcgis.gis.ContentManager.search

※地図の作成から保存までは別記事参照

# 前提
1.地図が作成され保存されていること
例
```python
from arcgis.gis import GIS
# GISクラスの使用
gis = GIS()
# 品川区の地図作成
map = gis.map('品川区')
# 画像の情報を設定（タイトルなど）
sinagawaMapProperty = {'title':'品川区マップ',
            'snippet':'品川区の地図を作成',
            'tags':'sinagawa',
            'extent':map.extent
            }
# 地図を保存
map.save(item_properties=sinagawaMapProperty)
```

# 検索方法1
```python
searchResult = gis.content.search('品川区')
```

print関数で出力すると
```python
print(searchResult)

> [<Item title:"品川区マップ" type:Web Map owner:testuser>]
```
このように出力されると思います。

# 検索方法2(titleで検索）
```python
searchResult = gis.content.search('品川区', title='品川区のマップ')
```

# 検索方法3（tagで検索）
```python
searchResult = gis.content.search('品川区', tag='sinagawa')
```
【Apex】オブジェクトを参照ではなく値で比較したい

## はじめに

[テスト駆動開発](https://www.amazon.co.jp/dp/B077D2L69C/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)の勉強中に、オブジェクトの等価性比較を行う場面がありました。

Apexで試してみると、、

```
System.debug(new Dollar(10) == new Dollar(10)); //false
System.debug(new Dollar(10) === new Dollar(10)); //false
```

どちらも参照で比較しているみたいですね。

値で比較したい時はどうするのでしょうか。

## 結論

ユーザ定義の型を値で比較したい時は、自前で比較メソッドを作る。

※ユーザ定義の型：プログラム上にクラス定義しているだけで、組織にオブジェクトが存在しないもの

例）
```
public with sharing class Dollar {
    public Integer amount;

    public Dollar(Integer amount){
        this.amount = amount;
    }
    
    //比較メソッド
    public Boolean equals(Dollar Dollar){
        return this.amount == Dollar.amount;
    }
}
```

## ```==```と```===```の特徴

### ==

- 標準オブジェクト・カスタムオブジェクト
    - 値比較になる
```
System.debug(new Account() == new Account()); //true
System.debug(new カスタムオブジェクト名__c() == new カスタムオブジェクト名__c()); //true
```

- ユーザ定義のオブジェクト
    - 参照比較になる

### ===

どんな時も参照比較になる
クラウド上で実機スマホをレンタルできるRemote TestKitを触ってみた

この記事は、Qiita Engineer Festa 2022 [Remote TestKitを使ってレビューを書こう！](https://qiita.com/official-events/f0e8b25feb05af6326b3)の参加記事です。

https://qiita.com/official-events/f0e8b25feb05af6326b3

## はじめに

クラウド上で実機のスマートフォンをレンタルできるサービスがあると知って、面白そうだったので触ってみました。
また、Androidのスマホは多種多様なものが多く、Webの開発でも実際にどう見えてるのかを検証してみたいときに便利かもと思い、触ってみました。

なお、僕はネイティブアプリの開発経験はないので、Web開発の面での内容になります。

（上記のQiita Engineer Festa 2022のイベントで、Remote TestKitのトライアルができます！ → [参加方法・流れ - Remote TestKitを使ってレビューを書こう！ - Qiita](https://qiita.com/official-events/f0e8b25feb05af6326b3#%E5%8F%82%E5%8A%A0%E6%96%B9%E6%B3%95%E6%B5%81%E3%82%8C)）

## 概要

公式の紹介動画が概要としては非常にわかりやすいです。

要約すると、クラウド上で実機のスマホをレンタルでき、今まで手元の実機で行っていた検証をクラウド上で行えるようになるというものです。

<iframe width="560" height="315" src="https://www.youtube.com/embed/JSSjTOGZrmo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

## レンタルできるスマホの種類

端末一覧が公開されていました。
iPhone, Androidのスマホだけでなく、iPadやAndroidタブレットもあり、多くの実機でテストができるみたいです。

https://appkitbox.com/testkit/devicelist/?entry=header

## 実際にレンタルしてみた

レンタルはかんたんにできました。
複数台のスマホをレンタルすることができ、すべての端末で同じ操作ができる「同時操作機能」もあります。

（以下は、同じURLをブラウザで開く同時操作）

![android.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352836/8b08b887-4094-a4a6-0f3f-4dfd720f6d7d.gif)

また、画面の回転もできるので、横画面を想定しているWebゲームなどの検証もできそうです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352836/2e189477-89a3-48d8-e01e-9b7f606042f1.png)

## メリットになりそうな部分

実際に触ってみて、クラウド上で実機スマホをレンタルするメリットになりうる部分を考えてみました。

### 実機スマホの管理の楽さ

導入事例などを読んでいると、「実機端末の管理」の部分が多く見られました。

https://appkitbox.com/testkit/customers/?entry=header

実際、実機の端末が何十台もある企業だと、貸し出しなど端末管理が大変だと思われます。
それがクラウド上で管理でき、使う側もソフトウェア上からかんたんに貸し借りができるのは非常にメリットだと思います。

### 多くの種類のスマホが自由に使える

複数の種類のスマホを揃えるのにはそれなりにコストがかかると思います。また、毎年新しいスマホがでるわけで、そのたびに買い揃える必要があります。

Remote TestKitでは多くの種類のスマホが用意されているだけでなく、オプションで最新のスマホを使えるようにできる様です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352836/910211c1-ef71-c554-9cfb-653721762fe6.png)
[オプションメニュー - 料金プラン|Remote TestKit|スマホサイト・スマホアプリ検証](https://appkitbox.com/testkit/price/?entry=header#Option)

## 今後のアップデートで期待したい部分

### 同時操作機能の拡充

現状、同時操作機能では以下の操作ができます。

- URLを入力してブラウザを起動
- アプリをインストール
- キャプチャして保存
- 画面を回転

ユーザーのログインをするなど、実際に端末の操作をすることはできないようです。
複数台同時に検証をする場合には、この機能があるとより検証時間の短縮につながりそうだなと思います。

## さいごに

今回記事に書いた内容はRemote TestKitの機能のほんの一部分です。
僕はネイティブアプリの開発をしたことがないので、

- 仮想adb機能
- adb設定
- Xcode Connector機能

などは検証することができませんでした。

ドキュメントなどを読んだ感覚だとネイティブアプリの開発に便利なのかもと思ったので、触ってみた感想を聞いてみたいです。

## Refs

- [Remote TestKit | 実機検証をリモート操作で実現するスマホレンタルサービス](https://appkitbox.com/testkit/)
- [使い方|Remote TestKit|スマホサイト・スマホアプリ検証](https://appkitbox.com/testkit/doc/)
- [端末一覧|Remote TestKit|スマホサイト・スマホアプリ検証](https://appkitbox.com/testkit/devicelist/)
- [料金プラン|Remote TestKit|スマホサイト・スマホアプリ検証](https://appkitbox.com/testkit/price/)
- [導入事例|Remote TestKit|スマホサイト・スマホアプリ検証](https://appkitbox.com/testkit/customers/)
- [ソフトウェア版による検証|Remote TestKit|スマホサイト・スマホアプリ検証](https://appkitbox.com/testkit/doc/software_ui/)
RaspberryPiOSをdockerイメージ化する

# やりたいこと

RaspberryPiOSでdockerを動かし、dockerコンテナの中でさらにRaspberryPiOSを動かせるようにする。
dockerリポジトリを探してもちょうど良さそうなイメージはない。が、公式のダウンロードサイトからroot.tar.gzのルートファイルシステムイメージがダウンロードできるので、これを利用してイメージを作るところからやる。

# 手順

### 1.dockerのインストール

https://qiita.com/ryot0/items/b6bbb8b314b44a5fa848

### 2.root.tar.gzのダウンロード

```shell
curl -o root.tar.gz https://downloads.raspberrypi.org/raspios_lite_arm64/root.tar.xz
```

### 3.root.tar.gzのインポート

```shell
docker import root.tar.gz raspios:0.0.1
```

ちゃんと取り込まれたことを確認する。

```shell
docker images
```

### 4.コンテナの起動

```shell
docker create -it --name testcont01 raspios:0.0.1 /bin/bash
docker start testcont01
docker attach testcont01
```
koanfの罠：空文字をスライスにUnmarshalしても空スライスにならない

# はじめに

[koanf](https://github.com/knadh/koanf) で環境変数を読み込む際、`ProviderWithValue` を使うことでスライスに設定を流し込むことができます。

```go:readmeより一部改変
// 設定オブジェクト。環境変数を読み込んでここにセット
type config struct {
	Vals []string
}

func main() {
	k := koanf.New(".")

	k.Load(env.ProviderWithValue("MYVAR_", ".", func(s string, v string) (string, interface{}) {
		key := strings.Replace(strings.ToLower(strings.TrimPrefix(s, "MYVAR_")), "_", ".", -1)

		// 値にスペースがあれば、値をスペース区切りでスライス化
		if strings.Contains(v, " ") {
			return key, strings.Split(v, " ")
		}

		// それ以外の場合は、文字列をそのまま返す
		return key, v
	}), nil)

	c := config{}
	k.Unmarshal("", &c)

	fmt.Printf("%#v\n", c)
}
```

```bash:環境変数
$ export MYVAR_VALS="foo bar baz"
```

```:セットされたconfigの中身
main.config{Vals:[]string{"foo", "bar", "baz"}}
```

しかし、この環境変数に空文字を指定すると...
空スライス `[]string{}` ではなく、**空文字要素を含むスライス** `[]string{""}` にUnmarshalされてしまいます！

```bash:環境変数
$ export MYVAR_VALS=
```

```:セットされたconfigの中身
main.config{Vals:[]string{""}}
```

**要素無指定にしたつもりが空文字を指定してしまっているので要注意！** （~~無事ハマりました~~）

# バージョン

- koanf v1.4.2

# why？

バグではなく、依存パッケージ [mapstructure](https://github.com/mitchellh/mapstructure) の仕様によるものでした。

`Koanf.Unmarshal` は内部的に `mapstructure.Decoder.Decode` を呼んでいます。

https://github.com/knadh/koanf/blob/master/koanf.go#L231

そして、`Decode` は

- 変換元のデータが文字列

かつ

- 変換先フィールドがスライス

の場合に、**暗黙的にスライスに変換（lift）** してくれます。

https://github.com/mitchellh/mapstructure/blob/bf980b35cac4dfd34e05254ee5aba086504c3f96/mapstructure.go#L1106


この機能によって、環境変数に1要素（`foo`）しか指定しなくても、自動でスライスに変換して(`[]string{"foo"}`)セットしてくれます。

...そして、環境変数が空文字の場合は **「空文字1要素」が「空文字を含むスライス」（ `[]string{""}` ）になってしまった**というわけです。

# 対処方法

愚直に、Unmarshal後のconfigを変換して対処することになりそうです（オプション等があれば楽にできそうですが...）。
幸い `[]string{""}` の場合だけ考えればよいのでそこまで複雑な変換ロジックは不要でした。
RaspberryPiOS Liteで日本語環境を整える

# やりたいこと

RaspberryPiOS Liteで日本語環境を整える。
fbterm, uim, uim-fep, uim-anthy, fonts-ipafontをインストールして日本語環境をコンソールから日本語を扱えるようにする。


# 手順

### 1.諸々インストールする

```shell
sudo apt install fbterm
sudo apt install uim uim-fep uim-anthy
sudo apt install fonts-ipafont
```

### 2.使用するフォントを設定する

以下のファイルが存在するはずなので、当該行を修正する。

```shell:~/.fbtermrc
font-names=IPAGothic,mono
```

### 3.入力メソッドの紐づける

以下のファイルがなければ、新規に作成する。あれば、修正。

```lisp:~/.uim
(define default-im-name 'anthy-utf8)
(require-module "anthy-utf8")
(define-key generic-on-key? '("<Control> "))
(define-key generic-off-key? '("<Control> "))
```

### 4.fbtermのスティッキービットを立ててrootで起動するようにする

```shell
sudo chmod u+s /usr/bin/fbterm
```

### 5.fbtermを起動すする

```shell
fbterm -- uim-fep
```

vオプションでfbtermを起動すると、読み込まれているフォントなどの情報がわかる

```shell
fbterm -v -- uim-fep
```
【PHP初級⑳】割り算と掛け算

［問題］　　(参照：http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocksPrimary.html)
整数値を2つ入力させ、1つめの値を2つめの値で割った結果を表示し、続けてその結果に2つめの値を掛けた結果を表示するプログラムを作成しなさい。計算はすべて整数型で行う（割り切れない場合は自動的に小数点以下が切り捨てられる）。

# コード
```php
$a = intval(fgets(STDIN));
$m = intval(fgets(STDIN));
$i = intval($a/$m);
echo $i,PHP_EOL,$i*$m;
```
↓　「10
　　　3」と入力


# 結果
```
3
9
```

また、下記のようなやり方もできる。
```php
$a = intval(fgets(STDIN));
$m = intval(fgets(STDIN));
echo $i = intval($a/$m),PHP_EOL;
echo $i*$m;
```

↓　ご指摘を受けて

```php
$a = intval(fgets(STDIN));
$m = intval(fgets(STDIN));
echo $i = intdiv($a,$m),PHP_EOL;
echo $i*$m;
```

このようなやり方ができる。

☆intdiv(＄a,＄b)
→＄a÷＄bの整数商を求める
Flutter 命名規則

##  初めに
Flutterでアプリ開発をしている際、必ず迷うのが新たに作成したファイルやディレクトリの名前です。他の言語にも触れていると、命名規則を混同してしまうこともあります。
自分で覚えるためにもここでまとめておきたいと思います。

## 命名規則を設ける意味
複数人でアプリ開発をする場合、開発者一人一人が異なる基準で命名すると、互いのコードの可読性が損なわれ、コードレビューが困難になったり、開発効率や保守性の悪化につながります。名前の衝突や使い回しなどでバグが生じることもあります。命名規則を設けることでそのような非効率を防ぐことができます。
なお、この記事では[Dartの公式サイト](https://dart.dev/guides/language/effective-dart/style)を参考にしましたが、命名規則は開発チームごとで異なることもあるので、事前に確認しておきましょう。

## 識別子
識別子の表記方法には以下の３種類があります。
* UpperCamelCase
* lowerCamelCase
* lowercase_with_underscores

## UpperCamelCase
UpperCamelCase とは識別子の一番初めの文字を含む単語の文字を一番最初の文字を大文字にする表記方法です。
例）CustomMenu, User

以下の命名に使用されます。
* クラス名
* 列挙型
* typedef
* 型パラメータ

## lowerCamelCase
lowerCamelCase とは識別子の初めの文字のみを小文字にし、それ以外の各単語の最初の文字を大文字にする表記方法です。
例）httpRequest, itemList

以下の命名に使用されます。
* 変数
* 関数
* クラスのメンバー（プロパティ, メソッド）

## lowercase_with_underscores
lowercase_with_underscoresとは各単語の最初の文字は全て小文字で、単語の間にアンダースコアを記述する表現方法です。アンダースコアが蛇のように見えることから「スネークケース」とも呼ばれます。
例）package:flutter_riverpod/flutter_riverpod.dart, first_page

以下の命名に使用されます。
* ファイル
* ディレクトリ
* パッケージ
* ライブラリ

## あとがき
最後まで読んでいただきありがとうございました。

余談ですが、「CamelCase」の「Camel」とは日本語でラクダのことであり、各単語の最初の文字を大文字で記述した際に、大文字が飛び出したラクダのコブに似ていることに因んで名付けられたようです。言葉の意味を調べると新たな発見があって面白いかもしれません。

参考にしていただければ幸いです。
誤っている箇所があればご指摘いただければ幸いです。

### 参考にしたサイト
https://dart.dev/guides/language/effective-dart/style
【機械学習】ロジスティック回帰(Logistics Regression)の関連用語およびsklearnによる二値分類の実践

# はじめに
ロジスティック回帰の関連用語が多くて混乱したので、自分用に整理しました。

# 関連用語
モデル評価における関連用語をまとめました。

## Confusion Matrix(混合行列)
クラス分類の予測結果を4つの種類に分けたものです。
- TP(True Positive)：陽性と予測して実際に陽性だったサンプル数
- FN(False Negative)：陰性と予測して実際に陽性だったサンプル数
- TN(True Negative)：陰性と予測して実際に陰性だったサンプル数
- FP(False Positive)：陽性と予測して実際に陰性だったサンプル数

>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/ab618cc8-9f81-b896-584f-6403b3c6c8a2.png)
https://medium.com/@awabmohammedomer/confusion-matrix-b504b8f8e1d1


## Accuracy(正解率)
正しく予測されたサンプルの割合(TP+TN/TP+FP+FN+TN)を表す評価指標です。
すべてのクラスが同様に重要なときや各クラスのサンプル数に大きな偏りがないときに使います。

## Precision(適合率)
陽性と予測した中で結果も陽性だったサンプルの割合(TP/TP+FP)を表す評価指標です。
誤認識や誤検知(FP)をなるべく抑えたいときに使います。

## Recall(再現率)
結果が陽性だった中で予測も陽性だったサンプルの割合(TP/TP+FN)を表す評価指標です。
見逃し(FN)をなるべく抑えたいときに使います。

## F1-score(F値)
AccuracyとRecallの調和平均(2*precision*recall/(precision+recall))を表す評価指標です。
AccuracyとRecallが同等に重要なとき、FPとFNの両方とも評価したいとき、不均衡データのモデル精度を評価したいときに使います。

## Odds(オッズ)
ある事象の起こる確率pと起こらない確率1-pとの比p/(1-p)を表します。

## Odds ratio(オッズ比)
2つの群におけるオッズの比を表します。
ロジスティック回帰においては、変数が1増加した時に「何倍継続されやすくなるか」を表します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/15e22aca-beb2-fd80-4713-c1a02a56c54a.png" width="600">

## Coefficient(回帰係数)
変数が1変化したときに確率が変動する程度を表します。

## ROC(Receiver Operating Characteristic)曲線
モデルの分類性能を示した曲線です。
TPR（True Positive rate）とFPR(False Positive rate)を計算し、縦軸にTPF、横軸にFPFをとった平面にプロットして描画します。

## ACU(Area Under the Curve)
ROC曲線のグラフの下の部分の面積を表します。
AUCは0から1までの値をとり、値が1に近いほど分類性能が高いことを示します。

# 実践
sklearnのLogisticRegressionを学習データに適用します。
```py
from sklearn.linear_model import LogisticRegression

log_model = LogisticRegression()
log_model.fit(scaled_X_train,y_train)
```

モデル評価のメソッドをいろいろインポートして適用してみます。
```py
from sklearn.metrics import accuracy_score,confusion_matrix,classification_report,plot_confusion_matrix

y_pred = log_model.predict(scaled_X_test)
```
AccuracyやConfusion Matrixを簡単に出すことができます。
![スクリーンショット 2022-07-03 15.44.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/8bed17a8-1451-1898-1993-1e0c16e8ace1.png)

また、Accuracyだけではなく、PrecisionやRecallなどもまとめて出すこともできます。
![スクリーンショット 2022-07-03 15.47.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/c19142d6-3f59-7710-50ea-fed97dae4a8d.png)

ROC曲線も描画することができます。
![スクリーンショット 2022-07-03 16.13.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/db82c140-847c-16da-8ce2-a6e5ecf23a14.png)


# 参考資料

https://www.udemy.com/share/103I003@LytqoFGyedbBI1o2xADwjVmoDDx8wOhJGfjmnprD3sZaJLIIlI-yiiRCd0ro5VvP/

https://tech-blog.optim.co.jp/entry/2021/05/31/100000

https://stats.oarc.ucla.edu/stata/faq/how-do-i-interpret-odds-ratios-in-logistic-regression/

https://qiita.com/0NE_shoT_/items/b702ab482466df6e5569
STM32G031とI2CでIOエキスパンダー化(4GPIO)


x PA0をGPIOがわかる人むけ
x PA0を470Ωでプルアップ
x アドレスは、0x40(8ビット0x80)

目的
I2CでIOを拡張する。
金銭的には、ほぼ意味は、無い。
たまたまSTM32G031J6M6がある場合、買いに行く手間が省ける。


1 1ビット目
2 VDD
3 GND
4 2ビット目

8 SWD 3ビット目
7 SWD 4ビット目
6 SDA
5 SCL


![o_con556.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/1411604b-be20-3f5f-01cf-dd3201571e6a.jpeg)



![o_con553.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/34f206ff-f393-a82d-ff2a-5f1cfc073c9f.jpeg)


ファイル-環境設定-追加の...

```

https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json

```



![o_con555.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/cc7f6935-e8cb-43ef-fd64-ed14558169ef.jpeg)


![o_con559.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/afc311fb-4b70-137f-0963-bff92cf00c8b.jpeg)


![o_con557.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/68e86c42-ea6f-00dd-2527-3791e9b0530e.jpeg)


![o_con558.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/22e83317-49c8-cef4-ef7f-46a3860ac02a.jpeg)



https://qiita.com/caa45040/items/ffb2821842d092f86df7


親切な人がNRSTにつてい書いてある


https://blog.mmaakkyyii.com/posts/post21/



プログラム


```c++


//I2C_4GPIO_V2_031_1

#include <Arduino.h>
#include <Wire.h>


//初期化
void setup()
{

  delay(3000); //not delete

  //i2cの初期化
  Wire.setSDA(PA12);
  Wire.setSCL(PA11);
  Wire.begin(); //pa12 pa11
  Wire.begin(0x40);  //I2Cスレーブアドレスの設定
  Wire.onReceive(receiveEvent); //データが来ると呼ばれる関数

  //GPIOの初期化
  pinMode(PB7, OUTPUT);
  pinMode(PA0, OUTPUT);
  pinMode(PA14, OUTPUT);
  pinMode(PA13, OUTPUT);

} //setup


//メインループ
void loop() {
} //loop


//レシーブイベント
void receiveEvent(int howMany) {

  int x = Wire.read(); //I2C受信データの読み込み

  //GPIOへビットを設定
  digitalWrite(PA0,  x & 0x01);
  x = x >> 1;
  digitalWrite(PB7,  x & 0x01);
  x = x >> 1;
  digitalWrite(PA14, x & 0x01);
  x = x >> 1;
  digitalWrite(PA13, x & 0x01);

}//receiveEvent



```
railsコマンドを打つとエラーが起きた


**ある日railsコマンドを打つと、こんなエラー文が出てきた**
```
`setupterm': The terminfo database could not be found. (Reline::Terminfo::TerminfoError)
```
どうやら terminfoがdatebaseにないよと言われてるが
いじった記憶がない、、、🥹
恐らく何かを導入した際に何かが変わってしまったのかもしれない

# 使用環境
- M1
- Ruby 3.1.0
- Rails 6
- PostgsreSQL

# 解決方法
以下のファイルをコメントアウトすると、とりあえず動く
エラー文の下にansi.rbあるのでcommand + クリック
```
ansi.rb

 # if Reline::Terminfo.enabled?
  #   Reline::Terminfo.setupterm(0, 2)
  # end
```
他にいい方法があれば教えていただきたいです
AWS Amplifyでバックエンドを揃える

# このページは

## 前提
以下を実施していることが前提です。
https://qiita.com/masakichi/items/a912268696290d9c9086

以下を参考に進めていきます。
https://docs.amplify.aws/start/getting-started/auth/q/integration/react/#create-authentication-service

## APIの追加


バックエンドにAPIを追加する。
```
amplify add api
```

:thinking:(メモ) GraphQL annotated schema

ここまででは、まだ実際に追加されておらず、追加するリソースの候補にとどまっている。
以下コマンドで追加候補のバックエンドリソースを確認。

```
amplify status
```

以下コマンドで実際に追加する。

```
amplify push
```

## 認証機能の追加
バックエンドに認証機能を追加する。
```
amplify add auth
```
先ほど作成したAPIと今回追加候補としている認証機能が一覧表示される。
ただし、先ほど追加したAPIに変更はないため、ステータスはNo Changeとなっている。
この状態で先ほど同様にpushを行う。

```
amplify push
```