OmniAICreator/Qiita-1.07M huggingface dataset:
Javaのラムダ式の覚書

Java（jdk1.8以降）のラムダ式について、簡単にまとめたものです。

# 1. ラムダ式の例
以下のインターフェースがあるとします。

```java:Calculation.java
package test;

@FunctionalInterface
public interface Calculation {
    public int add(int x, int y);
}
```

### 1.1. ラムダ式を使用しない場合（匿名クラス） 
ラムダ式を使用しない場合、上記のインターフェースを使用するには、以下のように匿名クラスでaddメソッドをオーバーライドして呼び出します。

```java:NotLambdaMain.java
package test;

public class NotLambdaMain {
    public static void main(String[] args) {

        // 匿名クラスでメソッドをオーバーライド
        Calculation obj = new Calculation() {
            @Override
            public int add(int x, int y) {
                System.out.println("テスト");
                return x + y;
            }
        };

        // Calculationのaddメソッドの呼び出し
        System.out.println(obj.add(3, 6));
    }
}
```
```:実行結果
テスト
9
```

### 1.2. ラムダ式を使用した場合
ラムダ式を使用する場合は、以下のように記述することができます。

```java:LambdaMain.java
package test;

public class LambdaMain {
    public static void main(String[] args) {

        // ラムダ式で記述
        Calculation obj = (x, y) -> {System.out.println("テスト"); return(x + y);};

        // Calculationのaddメソッドの呼び出し
        System.out.println(obj.add(3, 6));

    }
}
```
```:実行結果
テスト
9
```

上記で`System.out.println("テスト");`の処理が不要な場合、以下のように記述することができます。
```java:LambdaMain2.java
package test;

public class LambdaMain2 {
    public static void main(String[] args) {

        // ラムダ式で記述
        Calculation obj = (x, y) -> x + y;

        // Calculationのaddメソッドの呼び出し
        System.out.println(obj.add(3, 6));

    }
}
```
```:実行結果
9
```

# 2. あらかじめ用意されている関数型インターフェース

ラムダを使用する際に関数型インターフェースを用意しなくていいように、パッケージ`java.util.function`に関数型インターフェースがあらかじめ用意されています。
代表的なものとして、以下の関数型インターフェースが用意されています。

|関数型インターフェース|関数メソッド|説明|
|:-|:-|:-|
|Supplier\<T\>|T get()|引数は受け取らずに、型（T）の戻り値を返す。|
|Consumer\<T\>|void accept(T)|型（T）の引数を受け取って、戻り値を返さない。|
|Function\<T, R\>|R apply(T)|型（T）の引数を受け取って、型（R）の戻り値を返す。|
|Predicate\<T\>|boolean test(T)|型（T）の引数を受け取って、boolean値を返す。|

上記の関数型インターフェースをラムダ式で使用する場合のサンプルは以下となります。

```java:Sample.java
package test;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class Sample {

    public static void main(String[] args) {

        // Supplier<T>のサンプル
        Supplier<String> obj1 = () -> "Supplier<T>のテスト";
        System.out.println(obj1.get());

        // Consumer<T>のサンプル
        Consumer<String> obj2 = a -> System.out.println(a + "のテスト");
        obj2.accept("Consumer<T>");

        // Function<T, R>のサンプル
        Function<Integer, String> obj3 = a -> "Function<T, R>のテスト: " + String.valueOf(a);
        System.out.println(obj3.apply(5));

        // Predicate<T>のサンプル
        Predicate<String> obj4 = a-> a.equals("test");
        if (obj4.test("test")) {
            System.out.println("Predicate<T>のテスト");
        }
    }
}
```
```:実行結果
Supplier<T>のテスト
Consumer<T>のテスト
Function<T, R>のテスト: 5
Predicate<T>のテスト
```

---
以上
MySQL少しだけ。

<h1>ほとんどExcelみたいなもの</h1>
データ保管箱からwhere or and LIKE 等使ってうまくデータを抜き出すだけの簡単なお仕事(本当に基礎の部分しか触れていない)
<br>そしてちょうど今NodejsⅡが終わり明日にはⅢを終わらせる予定なので、とりあえず明日にはweb開発コースは終わりそうかな。

<h2>ファイナンス機械学習という本を大学図書館で発見</h2>
またまた話が脱線してしまうが、「ファイナンス機械学習」「Pythonによるファイナンス」という以前から興味があった本を図書館に探しに行ったところ発見。借りようか迷い、推薦対象者の項目を読んだところ、「初学者は機械学習入門をざっとお勉強してから来てね」と書いてあったのでひとまず中止に。

<<まずはポートフォリオ制作をしよう。しっかり順序だてて計画を練って取り組んでいきたい。
【TypeScript】型アサーション

### 今日の学び

```typescript
// これはダメ
const hoge = document.querySelector('.hoge') as HTMLElement;

// これでオッケー
const hoge = document.querySelector<HTMLElement>('.hoge');
```

型アサーションは任意の型へ強制的に変更できるが、型安全性が保証されないので極力使用しないこと。


### 参考文献
https://developer.hatenastaff.com/entry/2020/12/12/121212
pandasでファイルをNaNを出さずに読み込む

# 概要

pandasでファイルを読み込んだときに、NaNが出ないようにするだけの小ネタです。

# 課題

例えばpandasで次のようなsample.csvファイルを読むとします。

|a |b |c |
|--|--|--|
|a1|b1| 1|
|a2|b2|  |
|a3|  | 3|


次のコードで読み込むと

```python
import pandas as pd

df = pd.read_csv('sample.csv')
df.dtypes  # 各列のtypeを表示
```

> a列：object  
> b列：object  
> c列：float  

となります。（Object型にはStr型が含まれます）  
c列は「int」で読んで欲しいのですが、 df.loc[1,'c'] が「NaN」になるせいで「float型」になるわけです。  
しかも、困ったことにb列の3行目の df.loc[2,'b'] も、実は「NaN」で「float型」です。

で、この「NaN」の処理が大変面倒くさい。   
replaceかapplyかforループで狙い撃ちするしかない。  
いっそのこと全部文字で読んでもらい、あとで数値部分だけを数値型に変換したほうが楽です。

でも、全部文字で読むなんてオプションないのですよね。

```python
df = pd.read_csv('sample.csv', dtype=str)
```

としても、 df.loc[1,'c'] と df.loc[2,'b'] は「NaN」で「float型」です。

# 解決

しかし、見つけました。  
全てを文字列で読み込む方法を。  
もうひと押しすれば、できたのです。

```python
df = pd.read_csv('sample.csv', dtype=str, na_filter=False)
```

これです。  
これで全てがきちんと文字列です。  
df.loc[1,'c'] や df.loc[2,'b'] も「''」（空文字）になりました。

以上です。
AlmaLinux9にMongoDBをインストール～初期設定まで

# はじめに
初投稿です．
最近，システムやサーバーについて勉強をし始めたので，そのアウトプットも兼ねて自分が取り組んだことを書き出そうと思います．


# 前提条件
* VirtualBox7にAlmaLinux9をインストールしている
* ネットワーク，ユーザー設定等は完了している
* Base, Development Toolsのインストールを行っている


# MongoDBのインストール
## 1. repoファイルの作成
まず，必要なファイルをどこからダウンロードすればいいかを記載したrepoファイルを作成します．

```bash
vim /etc/yum.repos.d/mongodb-org-6.0.repo
```

```repo:mongodb-org-6.0.repo
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
```

:::note info
現時点(2022/10/18)では，MongoDBがAlmaLinux9に対応していないため，CentOS8用のURLをbaseurlに指定しています．
対応後や，CentOS9未満の場合は，
`baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/`
となるかと思います．
:::

## 2. MongoDBのインストール

作成したrepoファイルをもとにダウンロード，インストールしてみます．

```bash
sudo dnf install mongodb-org

---
MongoDB Repository                     603  B/s | 1.7 kB     00:02
GPG 鍵 0x64C3C388 をインポート中:
 Userid     : "MongoDB 6.0 Release Signing Key <packaging@mongodb.com>"
 Fingerprint: 39BD 841E 4BE5 FB19 5A65 400E 6A26 B1AE 64C3 C388
 From       : https://www.mongodb.org/static/pgp/server-6.0.asc
これでよろしいですか? [y/N]:
```

バージョンを確認します．
```bash
mongod -version

db version v6.0.2
Build Info: {
    "version": "6.0.2",
    "gitVersion": "94fb7dfc8b974f1f5343e7ea394d0d9deedba50e",
    "openSSLVersion": "OpenSSL 1.1.1k  25 Mar 2021",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "rhel80",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}
```
たしかに，6.0.2がインストールできているようです．


## 3. MongoDBの起動と設定

インストールできたので，MongoDBの起動と，自動起動の設定をします．

```bash
sudo systemctl start mongod
sudo systemctl enable mongod
```

設定ファイルを編集して，authorization=enabledに設定します．
```bash
sudo vim /etc/mongod.conf
```
#security 内に，下２行を加筆してください．
```.conf:mongod.conf
#security
security:
  authorization: enabled
```


再起動して設定を反映させます．
```bash
systemctl restart mongod
```

## 4. MongoDBへのユーザー登録
MongoDBにroot権限を持つユーザーを追加します．

```bash
mongosh
```
```bash:mongosh
test> use admin
switched to db admin
admin> db.createUser({user: "ユーザー名",pwd: "パスワード",roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]})
{ ok: 1 }

admin> exit
```

一度，mongoshを終了して，作成したユーザーでアクセスできることを確認する．
```bash
mongosh -u ユーザー名
Enter password: ******
```

確認できれば，あとはbashなり，PHPやC#のDriverなりでアクセスしていけばいいかなと思います．
【tkinter + threading】tkinterで無限ループのスレッドを正常に終了させる方法

# 1. きっかけ
シリアル通信をするGUIアプリを作っていました。
すると、応答を待っている間のコンマ数秒アプリがフリーズすることに気付きました。
微妙な差ですがストレスに感じたので解決策を講じました。

# 2. 結論
- `QUIT`ボタンを作り、そのボタンで呼ばれる関数内でスレッドを終了させる
- 無限ループはフラグが立ったら抜け出すようにしておく
- アプリをバツボタンで閉じられるとスレッドが無限ループから抜出せず強制終了するしかなくなるので、バツボタンで閉じられないように設定

# 3. 実装
- サンプルアプリ
```python
class App(tk.Frame):
    def __init__(self, master):
        super().__init__(master)

        # ウィジェット作成
        self.number = tk.IntVar(value=0)
        self.label_number = tk.Label(master, textvariable=self.number)
        self.button_quit = tk.Button(master, text='QUIT', command=self.quit)
        self.label_number.pack()
        self.button_quit.pack()
        
        # スレッド
        self.quit_flag = False
        self.thread = threading.Thread(target=self.infinite_func)
        self.thread.start()
```
- 無限ループの関数
```python
    def infinite_func(self):
        while not self.quit_flag:
            # 数を1ずつ増やす
            self.number.set(self.number.get() + 1)
            time.sleep(1)
```
- 終了処理
```python
    def quit(self):
        # フラグを立てる
        self.quit_flag = True
        # スレッドの終了を待つ（ウィンドウを閉じる前に！）
        self.thread.join()
        # ウィンドウを閉じる
        self.master.destroy()
```
- main
```python
def main():
    root = tk.Tk()
    root.protocol('WM_DELETE_WINDOW', (lambda: 'pass')())  # QUITボタン以外の終了操作を許可しない
    app = App(master=root)
    app.mainloop()


if __name__ == '__main__':
    main()
```

# 4. 終わりに
コードはGitHubに挙げておきます。
https://github.com/PlusF/TkinterThreadingSample
自作画像セグメンテーションデータセットの統計について

https://qiita.com/chiba1sonny/items/9a16fbb3e8136e3f983c

こちらにアノテーションツールLabelmeを使ってデータセットを作る方法を記載しました。作ったデータセットの属性を了解することは、データ処理やモデル構築に有益です。この記事では、自作画像セグメンテーションデータセットの画像ごとにあるRGB値とそれぞれが占めるピクセル値を統計する方法と全データセットにあるRGB値を入手する方法を記載します。
### 1.画像ごとにあるRGB値とそれぞれが占めるピクセル数
使う画像はPascal VOC2012データセットのgt画像です。
![nisgel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1668082/bc76da96-ddc1-44ba-6e6d-1a8aed661125.png)
```
from PIL import Image
import numpy as np

img = Image.open('pascal/nisgel.png').convert('RGB')
arr = np.array(img)
colours, counts = np.unique(arr.reshape(-1,3), axis=0, return_counts=1)
print(colours,counts)
```
このスクリプトで画像中にあるRGB値とそれぞれが占めるピクセル数を算出できます。
結果：
```
[[  0   0   0]
 [128   0   0]
 [224 224 192]] [223955  26602  12612]
```
### 2.全データセットのRGB値の統計
使う画像は以下の二つのPascal VOC2012データセットのgt画像です。
<img width="400" alt="mojikyo45_640-2.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1668082/3c54bd9c-f525-bb04-ee66-f3bde0cfe825.png">  <img width="400" alt="mojikyo45_640-2.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1668082/6e3f13fe-da6a-dde6-b4a8-e4f4aa7cdea0.png">
```
import os
from PIL import Image
import numpy as np

base = 'pascal'
all_image = os.listdir(base)
result = []
for img in all_image:
    image = Image.open(f'{base}/{img}').convert('RGB')
    arr = np.array(image)
    colors = arr.reshape(-1, 3)
    result.extend(colors)
    colors = np.unique(result, axis=0, return_counts=1)
    result = colors[0].tolist()
print(result)
```
これで、全データセットのRGB値は得られます。
結果：
```
[[0, 0, 0], [128, 0, 0], [128, 128, 0], [224, 224, 192]]
```
### 以上です。
Windows Server 2019でIISのDefault Siteのイントラ公開

Windows Server 2019をAWSで起動のうえ、IISのDefault Siteをlocalhost経由で接続できるようにした後に、イントラネット上でIPアドレス直打ちで接続できるよう公開した際のメモです。

①サーバ起動とIISインストールからDefault Siteをlocalhost経由で接続する
下記のサーバワールドさんのサイトを参考にさせていただきました。
https://www.server-world.info/query?os=Windows_Server_2019&p=iis&f=11

②
「Default SiteのバインドIPアドレスポート設定」
IISのDefault Siteを右クリックしてバインド設定から、自サーバのIPアドレスをプルダウンから選択しつつポートを適宜設定する
下記のサイトを参考にさせていただきました。
http://www.note.id.lv/2015/09/iis-access-page-by-ip-address.html?m=1

③
上記①②でうまくイントラネット内の他端末サーバからhttp://<IP直打ち>/でDefault Siteに到達できない場合は下記を順に試行

*1
「Everyoneユーザ許可設定」
下記のブログチさんを参考にさせていただきました。
https://www.bloguchi.info/952?amp=1

*2
「ファイアウォールインバウンドポート設定」
下記のサイトを参考にさせていただきました。
https://manage.accuwebhosting.com/knowledgebase/2886/How-to-Configure-IIS-to-Access-Your-Website-using-an-IP-Address.html

*3
「ファイアウォールhttp/httpsアプリケーション許可設定」
下記のPC工房さんのサイトを参考にさせていただきました。
https://www.pc-koubou.jp/magazine/12120/amp


*4
「ファイアウォール無効化(セキュリティレベル低下に注意)」
下記のライフワイアさんのサイトを参考にさせていただきました。
https://www.lifewire.com/how-to-disable-the-windows-firewall-2624505
意外と知らないモデムとONU

## ONU
光ファイバーから送られる光信号をデジタル信号に変換する機器。
光信号のままでは端末をインターネットにつなげることが出来ない。端末に繋げるためにデジタル信号に変換する。
ルータ内蔵の機器もある。
※ 基本的に回線業者から貸し出しされる
 
## モデム
電話回線等のアナログ信号をデジタル信号に変換する機器。
ADSL※1やCATV※2等のアナログ回線を使用する場合、ONUではなくモデムが必要になる。
恐らくこちらを使用することが多い。
※1..電話回線を使用してインターネットに接続する
※2..ケーブルテレビの回線を使用してインターネットに接続する
(ちなみに速度は 光回線>>>>CATV>ADSL)
 
## ルーター
ONUやモデムから直接通信を繋げようとすると一台で占有することになるため、ルーターを接続してより多くの機器でインターネットに接続できるようにするための機器。
再配送とシードメトリックとユースケースと

NWを学習していく中で若干わかりずらい再配送とシードメトリック値について実際に設定しつつ解説していきます。

## 再配送って？
異なるルーティングプロトコル間で経路情報を通知するために必要な技術

## シードメトリック
再配送時に指定するメトリック

## ユースケース
・RIPやEIGRPへ再配送するときに使用
⇒シードメトリックを再配送時に指定しないと経路が”無限大=到達不能”と判断される為、再配送できない

## 設定
今回はEIGRP、OSPFともにクラシックモードで設定します。(アドレスファミリでやりたかった)
EIGRPとOSPFの設定については必要最低限で実施。
構成はこんな感じ↓
![スクリーンショット (205).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196093/ea1d06d4-958e-e428-a82e-7ec5451c5611.png)
``` :Redistribute RW
router ospf 10
 log-adjacency-changes
 network 192.168.1.0 0.0.0.255 area 0
 
router eigrp 1
 network 172.16.0.0
```
同じルーティングプロトコル内での疎通確認

```:ping結果　OSPF B => Redistribute RW
ping 192.168.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/0 ms
```
異なるルーティングプロトコル間での疎通確認
```:ping結果　OSPF B => EIGRP A
Router#ping 172.16.1.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.1.2, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
```
異なるルーティングプロトコル間なので経路情報を貰えず、疎通できないので再配送で双方の経路を通知できるようにRedistribute RWで設定していく。
```:Redistribute RW
router eigrp 1
redistribute ospf 10
default-metric 1000000 1 255 1 1500 　### ※注意

router ospf 10
redistribute eigrp 1　{subnets}
default-metirc 1　
```
:::note info
※OSPFの経路情報をEIGRPへ再配送するため、シードメトリック値を定義すること
（デフォルトはメトリック無限大のため到達不能）
:::
```:OSPFB show ip route 
Gateway of last resort is not set

O E2 172.16.0.0/16 [110/20] via 192.168.2.1, 00:07:43, GigabitEthernet0/0
O E2 172.17.0.0/16 [110/20] via 192.168.2.1, 00:07:43, GigabitEthernet0/0
O    192.168.1.0/24 [110/2] via 192.168.2.1, 00:07:43, GigabitEthernet0/0
     192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C       192.168.2.0/24 is directly connected, GigabitEthernet0/0
L       192.168.2.2/32
```
O E2でEIGRPのルートが外部ルートとして通知されテーブルに追加されていることが確認できる。

```:ping結果　OSPF B => EIGRP B
Router#ping 172.17.1.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.17.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/0 ms
```
異なるルーティングプロトコルで疎通できることが確認できた。

## まとめ
・RIP、EIGRPへルートを通知させる際にはシードメトリック値を指定することが必須
・EIGRPからOSPFへの再配送の際にクラスレスルートを通知させるには、redistributeコマンドの最後にsubnetsオプションを必ずつけること
Kindle で購入済み本の一覧を CSV / JSON でダウンロードするブラウザ拡張を作りました！

amazon.co.jp で購入済みの電子書籍 (Kindle) の一覧を CSV / JSON でダウンロードするブラウザ拡張を作りました！
既読ステータスも出力できますので、買った本の棚卸しといった用途に使えると思います。

* [Kindle bookshelf exporter - Chrome ウェブストア](https://chrome.google.com/webstore/detail/kindle-bookshelf-exporter/olimpmeljimffgjonlpmiaebaonnegdp?hl=ja)
* [Kindle bookshelf exporter – Firefox ADD-ONS](https://addons.mozilla.org/ja/firefox/addon/kindle-bookshelf-exporter/)

ぜひご利用ください！

:::note info
**2025/05/25 追記**
ブクログ形式で出力できるようになりました！
そのまま[ブクログの「まとめて登録 (CSV)」ページ](https://booklog.jp/input/file)でインポートできます。
:::

# 使い方

![kindle_bookshelf_exporter](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205989/5985634e-4dbf-46fa-ad14-80c9b6cb9015.png)


1.  ツールバーの **"Kindle bookshelf exporter"** ボタンをクリック<br/>（この時、amazon.co.jp のログイン画面が表示された場合は、ログイン後に再度ボタンをクリック）
1. **"ダウンロード"**  をクリック
1. しばらく待つと、ダウンロードが完了します！

# 出力項目

以下の項目が出力されます。

* タイトル
* 著者
* 購入日
* 既読ステータス（READ / UNKNOWN）
* [ASIN](https://www.weblio.jp/content/ASIN)

また、JSON には追加で以下の項目が出力されます。

* 画像リンク

# セキュリティについて

amazon.co.jp のサーバとブラウザ間でのみ情報のやり取りをしています。
第三者のサーバに情報は送っておりません。安心してご利用ください。
Salesforceでフローを作成しよう～特定の日付の最新情報を参照関係の親レコードに表示させる

こんにちは
本橋です

今回はフローを作成してみましょう

主従関係なら親レコードに子レコードの
・最新日付
を積み上げ集計項目で表示できます

今回は
参照関係の場合、親レコードに子レコードの
・最新日付
を表示させるフローを作成しました

前提

※Todo作成時に期日を確認する
※期日が商談の完了予定日より未来の場合期日を商談の完了予定日に更新する


というフローを作成しました

![作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/3e118a20-312c-067d-b4af-cd8c66d71930.png)

![作成02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/5cdd4a0a-fc6a-0b09-6a45-1a456ee224da.png)

![作成03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/2f4fe31f-9f76-8fac-5fae-6d80aa76bbd1.png)
【超初学者向け】5秒で学習するReactディレクトリ構成

<h1>記事の対象者</h1>
・個人開発でディレクトリ構成に迷った初学者<br/>
・フロントエンドのチームに入ったけどフォルダ多すぎて萎えた初学者
<h1>この記事で紹介しないこと</h1>
・アトミックデザイン、Container/Presentationalパターンのような具体的なディレクトリ構成<br/>
・最適なReactのディレクトリ構成

<h1>前提</h1>

React公式ではディレクトリ構成について考え過ぎるべきではないとしています。

https://ja.reactjs.org/docs/faq-structure.html

チームによって違うと思うので、そのチームに合わせてやっていけば実務で困るということはないと思います。

ですが、なんとなくこのフォルダはこういうのあるよというのが分かっておくだけでも開発効率は変わると思います。

<h1>本題(Reactのディレクトリ構成)</h1>

<h2>components</h2>
使い回しのできるコンポーネントを配置しています。<br/>フッターとかヘッダーとか部品のイメージです。(どこまで分けるかは思想が出ます)

<h2>pages</h2>
各ページが配置されています。<br/>
コンポーネントを組み合わせてpagesが構成されるイメージです。

<h2>stores</h2>
状態管理のファイル達です。<br/>

<h2>hooks</h2>
カスタムフックスが定義されています。<br/>
use~とネーミングされます。<br/>
データ取得するなどの関数のイメージです。
CentOS7でVirtualHost設定

### 環境
- macOS Monterey v12.1
- Vagrant v2.3.1
- CentOS 7
- Apache 2.4.6 (CentOS)


# VirtualHostとは？
1つのコンピュータで2つ以上のウェブサイトを扱えるようにする設定。  
それぞれウェブサイトを配置するディレクトリを作成し、決定する作業が必要になる  
※設定ファイル→``/etc/httpd/conf/httpd.conf``


# DocumentRootとは？
Web上に公開されるディレクトリ。  
基本的にはDocumentRoot配下にあるファイルが表示される  
※ドキュメントルートディレクトリ→``/var/www/html``


# ファイルの準備
DocumentRootのディレクトリを確認する
```
$ vagrant up
$ vagrant ssh

$ grep -i 'DocumentRoot' /etc/httpd/conf/httpd.conf
# DocumentRoot: The directory out of which you will serve your
DocumentRoot "/var/www/html"
# access content that does not live under the DocumentRoot.
```
DocumentRootのディレクトリの``/var/www/html``内にディレクトリとファイルを作成する。  
それぞれのindex.htmlにはわかりやすいようにviエディタで``<h1>Site A</h1>``などを記述する。  
※後ほどブラウザで表示するため
```
var/www/html
         ├ index.html
         ├ site_a
         │  └ index.html
         └ site_b
            └ index.html
```


# hostsの設定
Macのローカルでterminalを立ち上げ、hostsファイルの設定を変更していく  
※IPアドレスと文字列を紐づけ、同じIPアドレスでも表示するページを区別させるため。
```
$ sudo vi /private/etc/hosts
```
以下の内容を記述。  
※IPアドレスは自身の仮想環境のプライベートIPアドレスを使用。
```
192.168.56.10 a.test
192.168.56.10 b.test
192.168.56.10 hoge.test
```


# VirtualHostの設定(httpd.conf)
httpd.confファイルにVirtualHostsの設定を記述する。  
※バックアップも念の為しておく
```
$ sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bk
$ sudo vi /etc/httpd/conf/httpd.conf
```
以下VirtualHostの設定を追記
```
略）...

<Directory "/var/www/html">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

# --------------------------------
# VirtualHost setting

<VirtualHost *:80>
  DocumentRoot "/var/www/html"
  ServerName hoge.test
</VirtualHost>
<VirtualHost *:80>
  DocumentRoot "/var/www/html/site_a"
  ServerName a.test
</VirtualHost>
<VirtualHost *:80>
  DocumentRoot "/var/www/html/site_b"
  ServerName b.test
</VirtualHost>
# --------------------------------

略）...
```
Apacheの再起動
```
$ sudo systemctl restart httpd
```


# VirtualHostの確認
以下サイトにブラウザからアクセスし、それぞれ違うページが表示されるか確認。
- a.test
- b.test
- hoge.test

これで同じIPアドレスなのに、違うページを表示することができました。  
hostsの設定に関しては忘れないうちに消しておいてください。


# 参照
- [【Apache】VirtualHostを使ってみよう](https://qiita.com/erik_t/items/63f079826a60aaa642d3)
- [Vagrant内でVirtualHostを設定する](https://kde.hateblo.jp/entry/2018/02/04/002626)
- [CentOS 7 の Apache httpd 2.4 に VirutalHost の設定をする手順](https://weblabo.oscasierra.net/apache24-centos7-virtualhost/)
SRT(Secure Reliable Transport)について色々ためす(1)

# 1. 概要
SRTを使った映像伝送に関して、色々を実験したい。そこで、手ごろな環境でどのようなことができるのか調べていく。とりあえずの目標は以下のような構成とする。
```
┌──────────────────┐      ┌────────────┐     ┌──────────────────────┐
│CAM = Caller(RPI) │-LAN- │Listener(PC)│-LAN-│Caller(RPI) : Monitor │ > 人
└──────────────────┘      └────────────┘     └──────────────────────┘
```

# 2. 機材
* Raspberry Pi 3B もしくはZero WH
* OSはBuster(Debian 10), Liteではない
* UVCカメラ: Buffalo BSW500M
* PCはLinux(仮想マシン)

# 3. 環境
# 3.1. Raspberry Pi
今のところ、Busterをインストールした環境が安定的に動作できているので、それを使う。以下の記事などで使った環境。

https://qiita.com/tetsuoMikami/items/5ea457d5e3eb5f502e21

# 4. Gstreamer
gstreamerはとあるバージョン以降、SRTに対応しているらしい。プラグインがあるか確認してみる。
```
$ gst-inspect-1.0 | grep srt

srt:  srtclientsrc: SRT client source
srt:  srtserversrc: SRT Server source
srt:  srtclientsink: SRT client sink
srt:  srtserversink: SRT server sink
dtls:  dtlssrtpdemux: DTLS SRTP Demultiplexer
dtls:  dtlssrtpenc: DTLS-SRTP Encoder
dtls:  dtlssrtpdec: DTLS-SRTP Decoder
subenc:  srtenc: Srt encoder
subparse: subparse_typefind: srt, sub, mpsub, mdvd, smi, txt, dks, vtt
srtp:  srtpdec: SRTP decoder
srtp:  srtpenc: SRTP encoder
```

srtclientsrc : SRT経由でネットワーク経由でデータを受信
srtserversrc : SRT経由でネットワーク経由でデータを受信
srtclientsink : SRT 経由でネットワーク経由でデータを送信する
srtserversink : SRT 経由でネットワーク経由でデータを送信する

カラーバーを配信するコマンド
```
gst-launch-1.0 videotestsrc ! videoconvert ! x264enc key-int-max=15 ! mpegtsmux ! srtserversink uri="srt://:15000"
```

srtclientsinkではうまくいかない。説明は同じなんだけど。
```
gst-launch-1.0 videotestsrc ! videoconvert ! x264enc key-int-max=15 ! mpegtsmux ! srtclientsink uri="srt://:15000"
```

PCのVLCプレイヤーで再生できるか試す。192.168.1.128はRPIのIPアドレス、15000は適当なポート番号。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1865486/d5d9c658-32b9-a375-9211-4e0f85a2131a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1865486/ffdbdf82-7ed1-84e9-ffd6-244956b5a952.png)

思ったより単純に配信と再生ができるようだ。

```
gst-launch-1.0 -v srtserversrc uri="srt://:7001" latency=$RECVLATENCY ! srtserversink uri="srt://:7002"
```
# 5. 結論
Raspberry Pi 3B、Raspberry Pi OS(Buster)、GStreamerを使うと実験レベルであれば、SRT配信は簡単にできる。

今後、CallerやListenerについて調べていきたい。

以上
論理積演算子と論理和演算子について

# 論理積演算子と論理和演算子について
## 概要
論理積演算子と論理和演算子の備忘録

## アンド演算子(論理積演算子)
### 基本
:::note info
&&の両方がtrueの場合にのみtrueを返す
:::
```javascript:
let hoge;
hoge = true && false;
// false

hoge = false && false;
// false

hoge = true && true;
// true
```

### 応用(厳密な定義)
:::note warn
左側がtruthyだったら、右側の値を返す
左側がfalsy だったら、左側の値を返す
:::
```javascript
hoge = 'hello' && 'hi';
// hi

hoge = true && 'hi';
// hi

hoge = false && 'hi';
// false

hoge = 0 && 'hi';
// 0
```

## パイプ演算子(論理和演算子)
### 基本
:::note info
両方がfalseの場合にのみfalseを返す

:::
```javascript:
let hoge;
hoge = true || false;
// hoge = false || true;
// true

hoge = false || false;
// false
```

### 応用(厳密な定義)
:::note warn
左側がtruthyだったら、左側の値を返す
左側がfalsy だったら、右側の値を返す
:::
```javascript
let hoge;
hoge = 'hello' || 'hi';
// hello

hoge = '' || 'hi';
// hi
```

```javascript:e.g.
const userInput = '';
const userName = userInput || 'User';
// userInputが空文字だったら、UserをuserNameに代入する．
```
最大値を求める（Iterable を与えて、JavaScript）

こんにちは。
Iterable を与えて、その中の最大値を求めました（JavaScript）。最小値も同様かと思います。

```javascript
console.log(max(range(3)));  //  ==>  2

function max(iterable) {
	let max = -Infinity;
	for (const item of iterable) {
		if (item > max) {max = item}
	}
	return max;
}

function* range(n) {
	let i = 0;
	while (i < n) {yield i++;}
}
```
NCMBのSwift SDKを使って地図検索アプリを作る（その1：画面の仕様とSDKの初期化）

NCMBでは公式SDKとしてSwift/Objective-C/Kotlin/Java/Unity/JavaScript SDKを用意しています。また、それ以外にもコミュニティSDKとして、非公式ながらFlutter/React Native/Google Apps Script/C#/Ruby/Python/PHPなど幅広い言語向けにSDKが開発されています。

今回は公式SDKの一つ、Swift SDKを使って地図検索アプリを作ってみます。まず画面の仕様とSDKの初期化について解説します。

## 完成版のコード

作成したデモアプリのコードは[NCMBMania/swift_map_app](https://github.com/NCMBMania/swift_map_app)にアップロードしてあります。

## ベースを作成する

今回はSwiftUIアプリとして開発しています。

## 画面について

今回は以下のViewを用意しています。

- ContentView
- StationView
- MapView
- ImportView

### ContentView

タブバーを表示して、地図画面と設定画面を読み込みます。

### StationView

地図画面用のViewです。

![Simulator Screen Shot - iPhone 14 - 2022-10-18 at 21.49.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/3f3fadd6-edce-3877-2a60-4b55058210ab.png)


### MapView

MapKit用です。MapKitのままではタップイベントなどに対応していないので[SwiftUIでマップを表示し、タップした座標にピンを立てる](https://gist.github.com/takoikatakotako/aca9ff14ee01baaf19128ad075ce4610)を参考に実装しています。

### ImportView

駅情報をインポートするためのViewです。

![Simulator Screen Shot - iPhone 14 - 2022-10-18 at 21.49.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/c4f22c46-9000-7a2c-5cb7-a926fa28db0d.png)



## NCMB SDKのインストール

NCMB SDKはFileメニューのAdd Packagesよりインストールできます。

![スクリーンショット 2022-10-18 11.28.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/52b8da57-669b-cb10-e15d-160fb1799f2d.png)


記事執筆時点での最新版は `1.3.0` です。

## NCMB SDKの初期化

まずContentView.swiftにてNCMB SDKをインポートします。

```dart
import NCMB
```

ContentViewにinit関数を追加して、SDKを初期化します。アプリケーションキーとクライアントキーはNCMBの管理画面で取得したものと書き換えてください。

```swift
struct ContentView: View {
    // Viewの初期化時に呼ばれるメソッド
    init() {
        // NCMBの初期化
        NCMB.initialize(applicationKey: "YOUR_APPLICATION_KEY", clientKey: "YOUR_CLIENT_KEY")
    }
    var body: some View {
			// Viewの内容（省略）
    }
}
```

これでNCMB SDKの利用準備が整います。


## まとめ

今回は各画面の説明とNCMB SDKの初期化までを行いました。[次回は位置情報データのインポートを実装します](https://qiita.com/goofmint/items/f114dbc1264e0face3e3)。
【個人開発】React + Firebaseで漫画考察サイトの作成

React+Next.jsで漫画考察サイトのポートフォリオを作成しました。

![スクリーンショット 2022-10-18 21.58.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569989/4bcecc3f-776d-3b97-cd34-53ff8bf926f5.png)


サンプルログイン
id sample123@gmail.com
pass sample345!

URL
https://manga-kousatu-net.vercel.app/


## 目的

背景や目的としては、自分自身漫画を読むことがあり、漫画の今後の展開の考察を見ることがよくある。
そして、インターネット上だと自分が検索した限りでは、そのような投稿できる漫画考察サイトが見つからなかったため、作成した。

## 使用言語

・フロントエンド：TypeScript,React,Next.js
・バックエンド：Firebase
・デプロイ：Vercel

## 作った機能
### 記事投稿機能
![スクリーンショット 2022-10-18 22.00.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569989/7229b6d0-0855-392e-ba4d-63e998745a6c.png)

CRUD処理ができるようになってます。データはFireStoreに保存されます。

### ユーザー登録機能
Firebase Authenticationを使って登録とログイン認証をしています。そして、usersテーブルにuserデータが格納されます。

### いいね機能
投稿のいいねができます。ただまだうまく作れていないので改良が必要です。

### プロフィール機能
![スクリーンショット 2022-10-18 21.59.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569989/75d23e6e-d90e-daca-b7a7-12a27ab3c6e3.png)
プロフィールの変更や退会などができます。

### 検索、並べ替え機能
![スクリーンショット 2022-10-18 22.01.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569989/b8fedbaf-cb5e-542c-1f00-92f8a7319646.png)
単語検索と3種類に並べ替えができます。

## 苦労した点
### FireStoreでのデータ保存が難しかった
最初FireStoreでどうやってデータ保存すればよいかかなり悩みました。
参考記事が見つからず、色々探した結果、海外の動画を見て、なんとかReactでCRUD機能を作成しました。
### ダイナミックルーティングが難しかった
Next.jsでダイナミックルーティングというのがあり、1つのファイルで違ったidや値を持つページを自動で作ってくれる機能があるのですが、それの作り方が最初全く分からずそこに時間がかりました。
ですが、色々と試すと意外と簡単に作ることができました。


## 今後実装したい機能

技術不足で実装できていない機能はかなりあります。
まだコンポーネント化ができていない部分が多くあるので、そこを改良していく予定です

・リッチエディタ
・複数画像の投稿
・コメント機能
・SWRの導入
DockerをAppServiceにデプロイする

https://qiita.com/kaikusakari/items/711c7d46a00c3ccff252
前回からの続きです。Dockerを動かして動作確認したのでAppServiceで動かします

今回は空のコンテナレジストリがある状態から始めます

```sh
$ az login
$ az acr login --name myregistry

# エイリアスの作成（NameSpaceは省略します)
$ docker tag springio/gs-spring-boot-docker myregistry.azurecr.io/testkusakari

# プッシュ
$ docker push myregistry.azurecr.io/testkusakari
```

プッシュしました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/501b4f83-f19d-560a-cddb-21e40b78a46d.png)

デプロイしました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/b724be9b-d96d-3dd5-9967-0e4be85ba363.png)

実際にURLにアクセス
https://testsamplekusakari.azurewebsites.net/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/4dd3f388-41fa-a3da-d026-c0930bd592d6.png)

想定通りDockerがデプロイできAppService経由で公開できました。AzureのCR→AppServiceまでの認証の仕組みなど包括的に順を追って学ぶことができました。今回は固定の文字列でしたがより実践的なDBなどを順番に体験していきたい。
一覧ページの読み込みが重たい問題について

<h2>初めに

ポートフォリオテーマとして業者のレビューサイトを作成しています。<br>以下の画像のようなレビューサイトを作っていこうと思います。

![top画面１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822721/75cffe6d-1714-fc3c-9ad8-068addf06205.png)

※自分用でまとめてますので、分かり辛かったらすいません。<br>また理解不足・誤りがあったらコメント頂けますと幸いです。m(__)m<ﾖﾛｼｸｵﾈｶﾞｲｼﾏｽ

### 発生している問題・エラー
・先程の画像のように、`一覧ページ(画像を扱っているページ限定)`を開こうとしたとき読み込みが重たくなる現象が発生
　※問題なく表示されるパターンもあれば、タイムアウトや以下のエラーが発生する時もありました。

イメージ画像
![activerecode-errore.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822721/ee4f22a7-9e16-fd7e-4c38-3989d3fe0d4c.png)

### 考えられる原因
・**attach**の処理が何か悪く動作している => 一覧表示するさいすべてのデータに対して**attach**していることになる
```:エラー箇所の処理について（因みに今回は/app/models/post.rb）
def get_image
    unless image.attached?
      file_path = Rails.root.join('app/assets/images/20200502_noimage.jpg')
      image.attach(io: File.open(file_path), filename: 'default-image.jpg', content_type: 'image/jpeg')
    end
    image
  end
```
unless => ifと同じ条件文で`条件に足して偽の場合処理が行われる`(今回は投稿に対して画像が保存されていない場合、次の処理が行われる)
fail_path => デフォルトでアタッチしたい画像を保存しているフォルダの相対パスを指定している
image.attach(以下略) => アタッチ処理を行う
※io: fike.open(指定のパス) => アタッチするファイルを指定している
※filename: => オプション機能の一つで、アタッチしたファイルの名前を指定
※content_type: => オプション機能の一つで、拡張子の指定
<details>
<summary>参考資料</summary>

[rails ガイド| 3.3 File/IO Objectsをアタッチする](https://railsguides.jp/active_storage_overview.html#file-io-objects%E3%82%92%E3%82%A2%E3%82%BF%E3%83%83%E3%83%81%E3%81%99%E3%82%8B)
</details>

### 試してみた対策方法
・画像を保存していないデータ(今回は投稿post)に対して、**アタッチを行わないよう**にする

### 具体的にしたこと
・モデルファイルの記述を変更
・Viewファイルの記述を変更

※今回はメンターさんに協力してもらい解決した方法を記載します。
　もしかしたらそれ以外にも解決策があるかもしれませんので、その際はコメント頂けると幸いです。m(__)m

### まずはモデルファイル
```:/app/models/post.rb(変更前)
　def get_image
    unless image.attached?
      file_path = Rails.root.join('app/assets/images/20200502_noimage.jpg')
      image.attach(io: File.open(file_path), filename: 'default-image.jpg', content_type: 'image/jpeg')
    end
    image
  end
```
```:/app/models/post.rb(変更後)
get_imageメソッドをまるまる削除
```
### 次にビューファイル
```:/app/views/posts/index.html.erb(変更前)
<% @posts.each do |post| %>
    <tr>
    	<td><%= image_tag post.get_image, size: "100x100"  %></td>
        以下略
    </tr>
<% end %>
```
```:/app/views/posts/index.html.erb(変更後)
<% @posts.each do |post| %>
	<tr>
		<td>
			<% if post.image.attached? %>
				<%= image_tag post.image, size: "80x80" %>
			<% else %>
				<%= image_tag '20200502_noimage.jpg', size: "80x80" %>
			<% end %>
		</td>
        以下略
    </tr>
<% end %>
```
:::note info
ポイント① **attached?**  → 特定の投稿に対して、画像が保存されているかをif文にかけチェック
ポイント② 条件が真の場合 → 保存されている画像のサイズを指定する → `resize`をView側で指定できる記述をしているため
ポイント③ 条件が偽の場合 → `/app/assets/images/`に保存した画像ファイルを表示　※アタッチはしていません
:::

<h2>感想

　基礎学習の際に教えてもらったことをそのまま組んでみた結果、今回のように読み込み速度が遅くなる問題が発生しました。
前習った内容が悪いというわけではなく、いい意味で失敗をできたと思いました。
　重くなった原因から問題解決に至るまで、アクティブストレージの基礎知識や条件式の考え方など色々と復習もできました。
またメンターさん（通っているプログラミングスクールの質問対応者のこと）にもアタッチの概念やif文の条件についてアドバイスを頂いたので、個人的に勉強になりました。
　今回の記事はその教えてもらったことを忘れないようにするために投稿しました。何度も申し訳ありませんが、自分用でまとめてますので、分かり辛かったらすいません。また理解不足・誤りがあったらコメント頂けますと幸いです。m(__)m<ﾖﾛｼｸｵﾈｶﾞｲｼﾏｽ
４０代おっさんPythonを勉強する（ライブラリ編）

## 本記事について

この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
もし不正などありましたらコメントにてお知らせいただければ幸いです。

## ライブラリ

- ライブラリとは
  - Pythonでプログラミングする際に必ず使うのが「ライブラリ」です。「ライブラリ」とは、特殊な機能を持った関数やクラスを一つにまとめたもので、インターネット経由で誰でも自らのPythonプログラムにインストールして使うことができます。

- 参照
  - <https://docs.python.org/ja/3/library/index.html>

- Pythonの組み込み関数と違って、標準ライブラリを使う前にインポートする必要がある
- ライブラリのパッケージとは階層構造に組織するモジュール群のこと
- サードパーティーによるたくさんのライブラリがあって、それぞれ同じ名前のモジュールや関数などを避けることは不可能
- パッケージにすると、トップレベルの名前だけ違って、モジュールや関数は階層的に呼び出すので、曖昧さはなくなる

### インポートのやり方

- ライブラリのパッケージをインポートにはimport文とfrom文を使う

```python
# パッケージ全体にインポートして、その後必要なモジュールや関数だけを呼び出す

import random # インポート文、使用宣言
random.choice([1, 2, 3, 4, 5])
random.random()
```

```python
# 必要なモジュールや関数だけをインポート
# この場合、他のモジュールや関数は呼び出せない

from random import randint
from secrets import choice
randint(15, 50) # 呼び出すとき、randomのパッケージ名がいらない
choice([1, 2, 3, 4, 5]) # エラーになる、choiceという関数はインポートしてないから
```

- asを使って省略名をつける

```python
#  collectionsのパッケージにcという名前を付ける
#  その後cを使って呼び出す

import collections as c
c.Counter('abcde')
c.defaultdict(int)
```

### sysとos

- sysシステムパラメータ
- osオペレーションシステムインターフェース

```python
#  システムパラメータ
import sys

print(sys.path, '\n')

#  オペレーションシステム
import os

#  現在の作業ディレクトリ
curdir = os.getcwd() # 現在のディレクトリを返す
print(curdir, '\n')

#  作業ディレクトリにあるファイルのリスト
os.listdir(path=curdir) 
```

## 参考

https://www.kitakyu-u.ac.jp/news/2022/08/003215.html
Ubuntu から Windows11 をインストールしてみた

# はじめに
PC の OS を Ubuntu から windows11 に変更してみました。
また、手順を記録します。
# 今回の手順
- USB に Windows10 のインストーラを作成
- Windows10 をインストール 
- Windows Update で Win11 をインストール

# 実装
### USB に Windows10 のインストーラを作成
- 公式サイトでisoファイルをダウンロード
[windows10ダウンロードサイト](https://www.microsoft.com/ja-jp/software-download/windows10ISO)
- USB に書き込み
以下のサイト手順で作成
[WoeUSBのインストールから進める](https://minus9d.hatenablog.com/entry/2018/11/12/224538)
### Windows10 のインストール
- インストール先PCの設定　
- 電源を入れて BIOS セットアップ画面に移動
- [Windows 10セットアップの開始から進める](https://office-hack.com/windows/windows10-cleaninstall-usb/)
###  Windows Update で Windows11 にアップデート
下記のサイトから進める
- [Windows 11 をインストールする方法](https://support.microsoft.com/ja-jp/windows/windows-11-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-e0edbbfb-cfc5-4011-868b-2ce77ac7c70e)
Amazon Detective とは

## 勉強前イメージ

聞いたことない感じする

## 調査

### Amazon Detective とは

AWS上のアプリケーションでのセキュリティ問題や不審なアクティビティなどがあった際に原因を分析・調査することを支援するサービスになります。
Detectiveは探偵の意味なので、探偵のようにモニタリングをして原因を調査して分析するサービスです。

Detectiveは、以下のようなログを収集して情報を分析します。

- cloudtrail ログ
- vpcフローログ
- GuardDuty

### 推奨条件

- aws cliは 1.16.303 以上
- Amazon GuardDuty を有効にする必要があります
	- マスターアカウントで有効にする必要があります
	- 有効後48時間待つ必要があります 
- Amazon GuardDutyのcloudwatch通知が6時間間隔なので15分にする

### ユースケース

- セキュリティで問題が発生した際の影響調査

万が一漏洩した際の認証情報や、悪意のあるIPアドレスからのAPIコールなどを確認することが出来ます。

- ファイルの特定

EC2上でマルウェアのようなう怪しい動きをするファイルをスキャンします。

## 勉強後イメージ

基本的には情報収集・分析って感じだと思ってる。
怪しいIPはどこからアクセスしてきたとかも見ることができるっぽい

## 参考

- [[神ツール]セキュリティインシデントの調査が捗るAmazon DetectiveがGAしたのでメリットとオススメの使い方を紹介します](https://dev.classmethod.jp/articles/how-to-detective/)
- [[アップデート] AWS 環境の調査がすこぶる捗る！Amazon Detective が利用可能になっていた！（30日間の無料トライアル付き）](https://dev.classmethod.jp/articles/amazon-detective/)
FastAPIを用いてテキスト生成APIを作る

## はじめに
FastAPIを用いてGPTによる文生成APIを作る方法です．

## 手順
まず，main.pyに以下を記述します．
```python
# 事前にライブラリをインストール
# pip install fastapi
# pip install "uvicorn[standard]"
# pip install transformers

from fastapi import FastAPI
from transformers import pipeline

app = FastAPI()
# GPT2の読み込み (初回はモデルのダウンロードに時間がかかります）
generator = pipeline('text-generation', model='gpt2')

@app.get("/gpt/{text}")
async def read_item(text: str):
    gen_text = generator(text, max_length=30, num_return_sequences=5)
    return {"generated_text": gen_text}
```
次に，ターミナルで次のコマンドを実行します．
```shell
uvicorn main:app --reload --host 0.0.0.0 --port 8000
```

自分のPCで立ち上げた場合は `http://localhost:8000/docs`，LAN内の他のサーバで立ち上げた場合は `<立ち上げたサーバのIPアドレス>:8000/docs` にアクセスすると，以下のようにAPIの一覧が表示されます．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614092/75940826-9ed7-d389-b6b0-101db2b48979.png)

右上の `Try it out` をクリックして `text` に適当な英文を入力します．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614092/70e8756f-e0ef-7159-7e62-27f02f70a5c7.png)

下の方に `long time ago, ` で始まるGPTの生成文が5つ表示されます．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614092/f424c1d4-83c0-dc71-77bb-da5bf5159df8.png)

## おわりに
huggingfaceの`transformers`ライブラリのおかげで非常に簡単な記述で作れました．他にも画像認識APIや翻訳APIなどに応用できます．


## 追記
画像認識APIはこんな感じで実装できます．

```python
from fastapi import FastAPI, UploadFile
from transformers import pipeline
import shutil

clf = pipeline("image-classification")
app = FastAPI()

@app.post("/images/")
def get_uploadfile(upload_file: UploadFile):
    path = upload_file.filename
    # アップロードされたファイルを保存
    with open(path, 'wb+') as buffer:
        shutil.copyfileobj(upload_file.file, buffer)
    # 保存した画像ファイルを読み込んで画像認識
    clf_result = clf(path)
    return clf_result
```
猫の画像をダウンロードしてきて試したところ，ちゃんと予測できていました．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614092/63a4b134-6ae8-2975-8e95-4c925111869c.png)
クリップボードにコピーするだけのVBA

Excelで改行あるセルをコピーすると" "がついて嫌なので、VBA書いてボタン化することに。
意外に「コピーだけ」のスクリプトはなかったので、備忘録的に残す。(ほぼ他サイトの切り抜き)

※使用前に、Visual Basic→[ツール/参照設定]→[参照]→ファイル名「FM20.DLL」を開く。これがないとDataObjectが使えない。
```
Sub クリップボードにコピー()
    Dim buf As String, CB As New DataObject
    buf = Range("A1")       '任意のセル
    With CB
        .SetText buf        '変数のデータをDataObjectに格納
        .PutInClipboard     'DataObjectのデータをクリップボードに格納
    End With
End Sub
```
Windows 移行時用 Tool 記録

# 背景
転任で環境が変わるので、次の環境用に覚えてるツールを記録
滅多に使わないやつとかは記憶にもない・・ :sweat: 

# 最低限入れるもの
## Power BI: Store 外でのダウンロード用
https://www.microsoft.com/ja-jp/download/details.aspx?id=58494

## VS Code
https://code.visualstudio.com/

## Mouse Without Borders: 複数PCを一つのMouse/Keyboardで。
https://answers.microsoft.com/en-us/windows/forum/all/mouse-without-borders-setupuser-guide-tips-tricks/0523308d-3406-4273-b86e-bef28aa6b50d


## LinqPad: DB やデータ処理系
https://www.linqpad.net/

## Git Client
### SourceTree
https://www.sourcetreeapp.com/
### Git Extensions
http://gitextensions.github.io/

## Power Toys
https://apps.microsoft.com/store/detail/microsoft-powertoys/XP89DCGQ3K6VLD

## 画像・動画キャプチャ、編集
### Screenpresso
https://www.screenpresso.com/ja/
### Screen to Gif
https://www.screentogif.com/

## SQL Server
### SSMS
https://learn.microsoft.com/ja-jp/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16
### 構成ツール: 固定IP 1433 にする場合に
https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-configuration-manager?view=sql-server-ver16

## Diff
### win merge: 一番知られてるし、申請済みなことが多い
https://winmerge.org/downloads/?lang=ja
### MELD: 見た目がよくて使いやすかった記憶
https://meldmerge.org/
### Araxis Merge: Office 系の差分が強力だが有償
https://www.agtech.co.jp/araxis/merge/product/

# 業務による感じ
## XAML Gallery →　Win UI Gallery
https://learn.microsoft.com/en-us/samples/microsoft/xaml-controls-gallery/winui-gallery/

## pgAdmin: postgres 使うなら
https://www.pgadmin.org/

## Stackify/Prefix: Web Appデバッグに便利だった
https://stackify.com/

https://stackify.com/prefix/

## packet capture
### Fiddler
https://www.bing.com/search?q=fiddler&qs=n&form=QBRE&sp=-1&pq=fiddler&sc=10-7&sk=&cvid=56D32F018C4648408B364E05C06AE832&ghsh=0&ghacc=0&ghpl=
### wireShark
https://www.wireshark.org/

## Docker Desktop: 会社で使うなら有償
https://docs.docker.com/desktop/install/windows-install/

https://www.docker.com/

## Dax Studio
https://daxstudio.org/

## Azure Data Studio: オンプレでのデータ分析ツール
https://azure.microsoft.com/ja-jp/products/data-studio/

## Dependencies: Dependency Walker の最新版
https://github.com/lucasg/Dependencies


## binary editor: 使う機会がほぼない
### xedit: バイナリファイルの直接編集する際に。どちらもインストール不要なんで便利
https://freesoft-100.com/review/xedit.php
### Stirling: 便利だったけど、更新止まってるんでもう使えそうにはない
https://www.vector.co.jp/soft/win95/util/se079072.html
Vuetify 端末のダークモード設定を自動で取得してテーマに反映する

```plugins/vuetify.js
import Vue from 'vue'
import Vuetify from 'vuetify/lib'

Vue.use(Vuetify)

export default new Vuetify({
  theme: { dark: window.matchMedia('(prefers-color-scheme: dark)').matches },
})
```

## point

`theme: { dark: window.matchMedia('(prefers-color-scheme: dark)').matches },`

で、Vuetifyのダークモード設定を端末の設定から取得して自動で切り替えることができます。

## おまけ

特定のページだけ強制的にダークモードにする（その逆）、切り替えるなど。

```javascript:page.vue
  created() {
    this.$vuetify.theme.dark = true // or false
  },
```
Axles and shafts  ボッシュ自動車handbook 11版(23)p.359

Axles and shafts  , ボッシュ自動車handbook 11版(23)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

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

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e

# Axles(回転軸) and shafts (軸)
p.359

## Function and application 
## Dimensioning 
## Design 


# Reference
### [1] DIN 743
DIN 743-1 Calculation of load capacity of shafts and axles - Part 1: General

DIN 743-2 Calculation of load capacity of shafts and axles - Part 2: Theoretical stress concentration factors and fatigue notch factors

DIN 743-3 CALCULATION OF LOAD CAPACITY OF SHAFTS AND AXLES - PART 3: STRENGTH OF MATERIALS

DIN 743-4 Calculation of load capacity of shafts and axles - Part 4: Fatigue limit, endurance limit - Equivalently damaging continuous stress


### [2] Haberhauer/Bodenstein, Maschnen elemente, 18 th Edition, Verlag Springer Vieweg 2017



# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20221017
ver. 0.02 図追記 20221018

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
Unityで初めてのゲーム制作 2nd Mission: アセットインポート

### 2nd Mission Start!!
1st Mission → [企画](https://qiita.com/homarinn/items/840964741b5bf992d764)
## アセットインポート
使用する3Dモデルやアニメーションをインポートします。
まずは必要最低限のものだけダウンロードし、必要になったら随時ダウンロードしていく予定。
※開発しながら記事を書いているため、随時追記してきます。

ダウンロード先↓
[Mixamo](https://www.mixamo.com/)
[Unity Asset Store](https://assetstore.unity.com/)

### Mixamo
**プレイヤーモデル**
- X bot（ダウンロード名: Player）

**アニメーション**
- Idle
- Run Forward
- Sword And Shield Run
- Sword And Shield Slash（コンボ用に3つに区切って）
- Sword And Shield Block
- Sword And Shield Impact（2種類）
- Death

アニメーションダウンロード時の設定
![スクリーンショット 2022-10-17 1.39.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389504/13a632c6-9de6-4e8a-3c2b-4fd3cf0cd045.png)
アニメーションはインポート後、必ずRigの設定を画像のように変える。
**Animation Type**: Humanoid
**Avatar Definition**: Copy From Other Avatar
**Source**: PlayerAvatar
![スクリーンショット 2022-10-18 0.36.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389504/9c4e8290-305d-9aa0-a0a6-f28d68c4b106.png)


### Unity Asset Store
**武具**
- [RPG Swords!](https://assetstore.unity.com/packages/3d/props/weapons/rpg-swords-7056)（剣）
- [FREE Shield and Sword Asset Pack](https://assetstore.unity.com/packages/3d/props/weapons/free-shield-and-sword-asset-pack-128672)（盾）

## モデル調整
1. Player.fbxをHierarchyにドラッグ&ドロップしてUnpack Prefab。
2. Player.fbxのInspectorを開き、Materialsの設定を画像の通りに。![スクリーンショット 2022-10-17 2.28.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389504/2b11dbb8-eadf-e779-48b9-5013e536309b.png)
3. Player > Beta_JointsのInspectorを開き、MaterialsにMetal8を設定。
4. Player > Beta_SurfaceのInspectorを開き、MaterialsにWhiteBatteredを設定。
5. PlayerのTransformをいい感じに設定。
6. RPG Swords > Materials > sword01.fbx をPlayerのRightHandにドラッグ&ドロップしてUnpack Prefabし、名前をSwordに変更。
7. SwordのInspectorを開き、MaterialsにSword_Textures01.matを設定。
8. SwordのTransformをいい感じに設定。
9. To Arms! Shield and Sword > Prefabs > Steel Buckler.prefab をPlayerのLeftHandのにドラッグ&ドロップしてUnpack Prefabし、名前をShieldに変更。
10. ShieldのInspectorを開き、LOD GroupをRemove Component。
11. Shield以下のBuckler_LOD0以外のオブジェクトを全て削除し、Buckler_LOD0の名前をBucklerに変更。
12. ShieldとBucklerのTransformをいい感じに設定。

文字が並びすぎていて眩暈がしますが、できあがったものがこちらです。
![スクリーンショット 2022-10-18 0.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389504/89229f9d-2280-7fca-7c04-13f0f4e8f95a.png)
がんばったのでダサいとは言わないでください。
モデルがこんな見た目でいいのかという話ですが、精神世界ではこんな姿になってしまうという設定で押し切るつもりです。

### 2nd Mission Cleared!!
Deposits and coatings,ボッシュ自動車handbook 11版(21)p.348

Deposits and coatings, ボッシュ自動車handbook 11版(21)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊。
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

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

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e

# Deposits(沈殿) and coatings（皮膜）
p.348
## Deposits 
### Electrodeposite

### Chemically deposited coatings (no external current) 

### Hot immersion deposits
### Zinc lamella deposits
### Pints
### PVD and CVD coatings
## Coatings

### Civuxion  ozginbx
### Conversion coatings



# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20221018

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
[UE5] Pythonでお手軽にエディターのメニューを拡張してみる

EUWというツールメニューにも自動で登録されるような便利な機能がありますが、何らかの理由でエディターのメニューにカスタムの項目を追加したい場合、Pythonからやる方法が結構簡単だった、かつあまり情報が無かったので置いておきます。

早速ですがコード

```
import unreal

def main():
    #メニューオブジェクトに、セクションを追加する
    ToolMenus = unreal.ToolMenus.get()
    ToolMenu = ToolMenus.find_menu("LevelEditor.MainMenu.Tools")
    ToolMenu.add_section(section_name="mytools",label="My Tools",insert_type=unreal.ToolMenuInsertType.DEFAULT,)

    #新しく追加したセクションに追加するエントリーを作成して追加する
    entry = unreal.ToolMenuEntry(name="newentry", type=unreal.MultiBlockType.MENU_ENTRY)
    entry.set_label("New Entry")
    entry.set_string_command(unreal.ToolMenuStringCommandType.PYTHON, "", "hoge()")
    ToolMenu.add_menu_entry("mytools", entry)

#追加されたエントリーから呼ばれる関数
def hoge():
    print("fugaaaaaaaa")

main()
```

これをご存知の通りのContent/Python下のinit_unreal.pyに書けば、エディター起動時に"Tools"メニューにカスタムのメニューを追加できます。
![ss_newentry.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264197/7e82e29b-f852-28ac-13fa-b04ce0c1c695.png)
ちゃんと関数も呼べています。
![fugaaaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264197/d7874850-6c88-01ef-da91-b292b2d65e62.png)
メニューの拡張はC++とかBPでやるのが一般的な印象ですが、Pythonだと結構シンプルに実現出来ているのではないでしょうか。
何かのヒントになれば幸いです。
Rust製TUIファイルマネージャーfelixを紹介


:point_right: [github](https://github.com/kyoheiu/felix) version 1.3.0 => 2.2.0にアップデート
:point_right: [document](https://kyoheiu.dev/felix/)
:point_right: [製作者の方のzenn記事](https://zenn.dev/kyoheiu/articles/85a2ff86a146b6)

## Summary

バックエンドが`termion`から`crossterm`に移行したので、wslやmacosだけでなくwindowsでも使えるようになった

wslやlinuxに入れて使っていて、windowsでも使いたくてcrosstermの移行をお願いしてみたらすぐに対応してくれた

個人的にはこれがエクスプローラーの代わりとして非常に役立ってくれるのではないかなと思っている

~~私の環境ではまだ、"l"キーを押してもディテクトリへ移動ができないのでそこだけ何とかしたい~~

windowsでは移動ができなかったができるようになった([PR](https://github.com/kyoheiu/felix/pull/130))

特徴として挙げられるのは以下の通り

- vimライクなキーマッピング
- Rust製
- 速い、シンプル
- 簡単な設定

## Install

Rustがインストール済みなら`cargo install felix`

リポジトリからビルドする場合

```sh
git clone https://github.com/kyoheiu/felix.git
cd felix
cargo install --path .
```

## Basics

起動もシンプル

```sh
fx # 現在いるディレクトリを開く
fx directory_name # 指定したディレクトリを開く
```

基本はvimと同じなので省略する (h, j, k, l, dd, yy, p, u, Ctrl+u, :qなどなど)

特徴的なものをピックアップする

| key | description |
| --- | --- |
| c | ファイルのリネーム |
| shift + v | 選択モード |
| v | 画面を分割してプレビュー表示<br>(ファイルの中身・ディテクトリの構造) |
| backspace | 隠しファイルの表示切替 |
| t | 編集された時間順にファイルをソート |
| :z + \<keyword\> + Enter | ディレクトリ名を入力すると直接移動できる |

zは[zoxide](https://github.com/ajeetdsouza/zoxide)を使った移動になるので注意が必要

省略しているところを含めてvimの操作を踏襲しており、vimを使ったことがあれば問題なく操作ができると思う

ただ、ここに書いてあるキーやコマンドしかまだ使えない

マクロやまだないコマンドなどの追加機能が欲しければIssueを上げないといけない

## Configuration

設定ファイルは以下の箇所に自動で作成される

felixのフォルダにはログやゴミ箱などもある

version2.0.0から設定ファイルが`.toml`から`.yml`に変更になった

| OS | PATH |
| --- | --- |
| linux | $HOME/.config/felix/config.yml |
| macOS | $HOME/Library/Application Suppoert/felix/config.yml |
| windows | $PROFILE\\AppData\\Roming\\felix\\config.yml |

非常にシンプルで基本的にはこれだけで良い

```toml:config.yml
default: nvim # hx
# exec:
#   feh:
#     [jpg, jpeg, png, gif, svg]
#   zathura:
#     [pdf]
# -- 省略 --
color
    dir_fg = "LightCyan"
    file_fg = "LightWhite"
    symlink_fg = "LightYellow"
```

オプションでfehやzathuraで対応した拡張子を`v`を使ったときにプレビュ―できるようになる

それ以外に設定できるのはエディタとファイルなどの色の設定のみで楽で良いと思う

## Favorite Points

### Vim like Keymappings

なんといってもマッピングが好きな点である

マウスを使わずにキーボード入力のみで移動や修正が行える

vimユーザーならわかると思うが、キーボードのホームポジションから離れていろいろ手を動かすのが一番ストレスになると思う

アプリごとに違う操作になってしまうのはもったいない感があるので、ファイル操作系をvim操作で完結できるのは良い

一応問題点を挙げるのであれば、ユーザーのキーマッピングがないくらい

### Simple

ターミナルにたくさんの情報が含まれていないのはすごく良いと個人的には思っている

既存のファイルマネジャーの多くがやはり情報が多く、どうしても画面がごちゃごちゃになってしまう

また、たくさんの機能があるのも便利な反面どうしても手に余ることが多かった

configは色の指定と追加機能のオンオフのみ

操作もvimの操作で複雑な機能や複雑なコマンドなどはない

このシンプルさがfelixの強みだと思う

これ以上のものを使いたければそれこそ[nnn](https://github.com/jarun/nnn)や[xplr](https://github.com/sayanarijit/xplr)とかを使った方が良い

### Fast

windowsのエクスプローラーはPowerToyで機能が追加でき、一部利便性は向上したがやっぱり見た目の情報量や検索、移動でもっさりするのがあまり好きではない

GUIとTUIの比較は適切ではないことはわかっているが、やはり早い方が良い

また、ターミナルから操作できるというのも良い

大抵コーディングする際にはターミナル操作も必要なる場合が多く、felixを起点に完結させられるのは楽で良い

vscodeのターミナルでも快適に操作できる

## Conclusion

まだ、バグは残っているけどそのうち修正するか、されると思うので問題はないと思っている

速くてシンプルで快適なファイル操作が欲しい人はぜひ使ってみることをお勧めする

あと欲しい機能としてはuzipとかの外部コマンドの実行と、documentsなどのお気に入りを追加できるようにするくらい