OmniAICreator/Qiita-1.07M huggingface dataset:
【tableau】本質じゃないけど、使えると地味に便利なtableau tips

# 便利Tips集

Tableauいじるうえで、これ覚えておけば日々の作成が楽になるな、なったなーとか、これ地味に使えたらVizのクオリティ上がるなと思うTipsが複数あるので、書き留めてみます。

# ショートカットキー

よく使います。グラフのサイズを微妙に調整したいとき、シートの行き来したいとき、やらかしを修正したいとき、計算フィールドの作成にすぐにアクセスするとき、よく重宝しております。

| 説明 | ショートカットキー |
|:-:|:-:|
|シートの切り替え（次のシートに）   |Ctrl + tab|
|シートの切り替え（前のシートに）   |Ctrl + tab + Shift  
|シートの新規作成   |Ctrl + M   |
|セル サイズを小さくする|Ctrl + B|
|セル サイズを大きくする|Ctrl + Shift + B|
|行の幅を狭くする|Ctrl + 左矢印|
|行の幅を広くする|Ctrl + 右矢印|
|元に戻す|Ctrl + Z|
|やり直す|Ctrl + Y|
|行と列を切り替える|Ctrl + W|
|ピルの複製|Ctrl + ドラッグ|
|計算フィールド作成|Alt→A→C|
|現在のワークシートをクリアする|Alt+Shift+Backspace|

# 色のカテゴリ分けのやり方
サブカテゴリをマークの色にドラッグアンドドロップすると、いろがすべてバラバラになってしまいます。色が多すぎて混乱しがちです。
![コメント 2023-07-12 131956.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/03e1783b-1beb-0da2-56e3-fe9c98de84c9.png)

このバラバラになりがちな色をまとめてあげるTipsがとても役立ちます。

**手順①：まずは「カテゴリ、サブカテゴリ」で階層を作ります。**
![コメント 2023-07-12 132048.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/4e34941f-b8f4-9a48-38d0-d700a08443a9.png)

**手順②：階層「カテゴリ、サブカテゴリ」を、マーク「色」にドラッグアンドドロップします。**
![コメント 2023-07-12 132121.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/695ab6f3-3324-0052-7ac6-6d0fdfddde45.png)

**手順③：マーク「カテゴリ」の横の［＋］マークをクリックし、階層を展開する**
この時点ではまだ色は同系色にまとめられないです。
![コメント 2023-07-12 132332.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/df22da89-1c6a-fb64-6c70-d12fb0ed00fa.png)

**手順④：サブカテゴリの左にあるマークをクリックし、色を選択する**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/d6af921f-a491-baee-746b-113b7d4eb2fe.png)

**手順⑤：これで、サブカテゴリがサブカテゴリ内で同系色でまとめられています。**
![コメント 2023-07-12 132650.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/a08d0925-dade-45f2-3bc2-4295ba35a834.png)

こちらと同じ手順を踏んてあげれば、都道府県を地域別で同系色に色分けしてあげることも可能です。
![コメント 2023-07-12 132849.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/7a4c65e2-370d-a8fd-7bbd-a4c919acd1d4.png)


# 書式の揃え方
全シートに対して同じ書式で揃えたいとき、すべてのシートの書式設定を開いて一つずつ設定する必要はないです。

** 書式設定のコピー　⇒　書式設定の貼り付け ** で、書式をそろえることができます。

一例として、書式のフォントをすべて「遊ゴジック」に設定したシートを用意しました。こちらのシートを他のシートにも適用していきます。
![コメント 2023-07-12 143119.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/ffa0c857-5750-6669-2166-0da00a03e821.png)

**手順①：「書式設定」タブを開き、「書式設定のコピー」を選択します。**
この手順ですが、マウスいらず、ショートカットキーで選択可能です。

**Alt ⇒ O ⇒ C**　で、書式コピーまで移行できます。

![コメント 2023-07-12 143657.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/1e0c766b-b615-ad68-8a13-b13f5649b461.png)

**手順②：書式設定を貼り付けたいシートに遷移し、「書式設定の貼り付け」を行う。**
こちらも同様にショートカットキーだけでできます。

**Ctr + Tab で任意のシートの移動 ⇒ Alt ⇒ O ⇒ P**
これで可能です。

![コメント 2023-07-12 144143.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/ca9d56e1-0ba1-1755-4488-71e5183c5e5b.png)
![コメント 2023-07-12 144238.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489181/8dac9f03-f211-5647-5aeb-0191722d953e.png)

# まとめ

Tableau上で使える小技はほかにもたくさんあると思うので、アップデートありましたらどんどん使ってみようと思います。

ありがとうございましたっ
文字起こしの結果をOpenAI APIを利用して文章校正を行う

## はじめに

faster-whisperによる文字起こしの結果をOpenAI APIを利用して文章校正を行いました。
Whisperでの文字起こし結果に対しても有効であると思います。

2023 年 07 月 12 日

## 苦労したこと

タイムスタンプを維持した状態で文章校正を行うこと。
なるべくトークンを消費しない形でインプットを行う。

### 失敗

- 改行コードや\<BR>を利用して1行ずつに区切った応答を期待する  
=> 改行コードは無視され全文で校正されてしまう。
- [1]を文頭に付与することで区切り文字の情報が応答に残る事を期待する
=> 数字が昇順に振られる事や無視されるケースもあった。
- タイムスタンプを文頭に付与することで区切り文字の情報が応答に残る事を期待する
=> トークンの無駄に消費してしまうため却下

### 成功

- [#]を文頭に付与することで区切り文字の情報が応答に残る事を期待する
=>うまくいった。タイムスタンプとのマッピングを行う。

```txt
[#]あかつきのまち 仙台[#]青年 ゆうまは古本屋でいにしえのひみつをはっけんする
```

## API実行部分

投稿用に処理をまとめています
何処を校正したか応答されると困るため、文章校正と結果のみの応答を要求します。

```api.py
import openai
import os

def text_proofreading(self, prompt: str):
    openai.api_key = os.getenv("OPENAI_API_KEY")
    response = openai.ChatCompletion.create(
        model = "gpt-3.5-turbo",
        messages=[
            {
                "role": "system",
                "content": "Please proofread. Please return only the proofreading results.",
            },
            {"role": "user", "content": prompt},
        ],
    )
    return response.choices[0]["message"]["content"].strip()
```

## 校正結果

### オリジナル文章

```text
暁の町、仙台。青年、悠真は古本屋で古の秘密を発見する。  
書かれていたのは「朧月夜に龍が舞う」。未知なる冒険が彼を待っていた。  
その先には、真実か幻想か…時を超えて語り継がれる物語が始まる。
```

### 文字起こし結果
オリジナル文章をVOICEVOXで読み上げたものを文字起こしに利用

```text
[00:00:01,840 --> 00:00:04,560]あかつきのまち 仙台
[00:00:04,560 --> 00:00:09,460]青年 ゆうまは古本屋でいにしえのひみつをはっけんする
[00:00:09,460 --> 00:00:13,020]かかれていたのは おぼろずきよにりゅうがまう
[00:00:13,020 --> 00:00:15,720]みちなるぼうけんがかれをまっていた
[00:00:15,720 --> 00:00:18,800]そのさきには しんじつかげんそうか
[00:00:18,800 --> 00:00:22,260]ちをこえてかたりつがれるものがたりがはじまる
```

### OpenAI API(GPT-3.5-turbo)による校正

```text
[00:00:01,840 --> 00:00:04,560]あかつきのまち 仙台
[00:00:04,560 --> 00:00:09,460]青年 ゆうまは古本屋でいにしえのひみつを発見する
[00:00:09,460 --> 00:00:13,020]書かれていたのは おぼろづき夜に龍が舞う
[00:00:13,020 --> 00:00:15,720]未知なる冒険が彼を待っていた
[00:00:15,720 --> 00:00:18,800]その先には真実が隠された
[00:00:18,800 --> 00:00:22,260]地を超えて語り継がれる物語が始まる
```

一部書き換わっている部分もありますが、いい感じに校正できたのではないでしょうか。
GPT-4を利用すれば精度が上がると思いますが、実行に時間がかかるのとAPIの利用コストが跳ね上がる点が悩ましいです。

## サンプル

本投稿の内容は下記に組み込んでいます。
https://github.com/reriiasu/speech-to-text
Linuxで直接rootでのログインを禁止にして、SSHログインをセキュアにする

# はじめに
別部署のユーザーから「開発用Linux端末のあるログを採取して欲しい。Linuxはわかんないので」と依頼された際に「じゃあ、ログイン情報と鍵ファイルをください」とお願いしたところ、そのまま直でrootログイン情報を渡されたんですよ。
思わず、<b>「ちょっと待てい！」</b>ってなりましたので、ユーザーさんにはrootログインの禁止方法をお教えいたしました。

# なぜ直接sshでrootログインは危険なのか
言わずもがなですが、rootは管理者ユーザーであり、Linuxにおける最上位の権限を持っています。
ですので管理者権限を悪意を持った存在に盗られると、もうおしまいです。
となると、不正アクセスを狙うクラッカーもrootでのログインをしたがりますよね。
rootというログインユーザー名は共通して存在するので狙われやすいです。クラッカーがsshで不正ログインを試みる際はまずrootを狙う可能性が高いでしょう。

仮に一般ユーザーで不正ログインされた場合でも、その一般ユーザーがsudo権限を持っていなければ被害は少なく済む可能性があります。

職場などでは管理者権限とログオンユーザーが統合されたWindowsPCがだいたいひとり１台があてがわれますし、普段からサーバーを触っていないと、一般ユーザーと管理者ユーザーを分ける考え方は馴染みが薄くなるのかもしれません。

# 環境
Ubuntu 20.04 LTS
今回はこの環境で行います。

# ssh で直接 root へのログインを禁止する
では早速rootのsshを禁止して行きます。が、まずはその前に他のユーザーを作成して、sshできることをしっかり確認しておきましょう。
もし他のユーザーを作成しないでrootのsshを禁止してしまうとサーバーにアクセスできるユーザーがいなくなってしまいます。（シングルユーザーモードといった面倒な手法を取るハメになります）

* sshログインに関する設定は`/etc/ssh/sshd_config`で行います。
configファイルを変更する前に、念のためにファイルをバックアップしておきましょう。
```
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_org
```
* バックアップができたら、次にファイルを編集します。
`vim`を使ってますが、エディタは好みでどうぞ。
```
sudo vim /etc/ssh/sshd_config
```
* 36行目あたりに`PermitRootLogin`という記述があります。（環境によって異なっている可能があります）
コメントアウトされていたら、外してください。
`yes`という記述を`no`に書き換えてください。
```
PermitRootLogin no
```
* sshプロセスを再起動させて、変更した設定を反映させてください。
```
systemctl restart sshd
```
* rootでのsshログインを試行してみて、`Permission denied, please try again`と表示されるなどして接続できなかったら有効です。
MUA/MTA/MDA それぞれの働き

メール送受信に関わるエージェントについて、用語の説明。


- MUA : Mail User Agent
- MTA : Mail Transport Agent
- MDA : Mail Delivery Agent

# MUA Mail User Agent
メールソフト。
# MTA Mail Transport Agent
sendmail や Postfix など
# MDA Mail Delivery Agent
メールをユーザに読めるように配信。

MDA は MRA (Mail Retrieval Agent )と分ける場合もある。

# MTA/MDA/MUA の切り分け
必ずしも固定しておらず、メールをどう利用するかによって MTA/MDA/MUA の切り分けは変化する。

Maildir に配信して、 mailutils  コマンドで読むシチュエーションの場合は postfix が MDA の役割、 mailutils コマンドがMUA と考えることができる。
また、Maildir に配信したものを Dovecot 経由でPOP3を使って Dovecot で Thunderbird で読む場合は Dovecot が MDA、Thunderbird が MUA の役割を果たす。

Gmail などは、MTA/MDA/MUA いずれの役割を果たしているサービスの集合体である。

# 例


 anybody@gmail.com から hogehoge@example.com へメールを送る場合を考えてみます。


-  example@gmail.com である ユーザAが  ISP (インターネットサービスプロバイダ) プロバイダ internet.invalid を使ってインターネットに接続し、gmail を使って送信
-  anybody@example.com が  ISP (インターネットサービスプロバイダ) プロバイダ example.net を使ってインターネットに接続し、Thunderbird を使って受信

となった場合、以下のようなプロセスを踏んでメールが送られることになります。
これは一例であり、様々なパターンがあります。


1. ユーザA が internet.invalid サービスを使ってインターネットに接続
1. ユーザA が Webブラウザ Edge を使って https://gmail.com を開ける
1. gmail Web サービスは ユーザA にMUAを提供する
1. ユーザA が gmail の MUA 機能でメールを作成、送信する
1. gmail の MUA サービスは gmail の MTA サービスに送信メールを渡す 
1. gmail MTA サービスは、example.com ドメインの MX レコードを検索する
1. example.com ドメインの MXレコードは mail.example.com であると判明する
1. gmail MTA サービスは  mail.example.com に メールを転送する
1. mail.example.com 上では MTA として postfix が動いている
1. mail.example.com 上の postfix は 中継が妥当かどうか判定し、妥当であればメールを受け入れる
1. mail.example.com 上の postfix は ユーザ anybody@example.com の Maildir にメールを保管する
1. ユーザB が example.net サービスを使ってインターネットに接続
1. ユーザB が Thunderbird を使って mail.example.com からメールを受信する
1. mail.example.com 上では MDA として Dovecot が動いている
1. mail.example.com 上の Dovecot は  anybody@example.com の認証を行い、妥当であればメール受信リクエストを処理する
1. ユーザB の Thunderbird に example@gmail.com からのメールが格納される
1. ユーザB は Thunderbird 上で example@gmail.com からのメールを読む
AWS LambdaでPython+Flask環境を作成する

# AWS LambdaでPython+Flask環境を作成する

AWS Lambdaは、サーバーレスコンピューティングサービスであり、アプリケーションやバックエンドサービスをサーバーレスアーキテクチャで実行することができます。この記事では、AWS Lambdaを使用してPython+Flask環境を作成する方法を説明します。

## 前提条件
- AWSアカウントを持っていること
- Python 3.8以上がインストールされていること


## 1. プロジェクトディレクトリの作成

まず、プロジェクト用のディレクトリを作成し、そのディレクトリ内で作業を行います。

```bash
$ mkdir python-flask-lambda
$ cd python-flask-lambda
```

## 2. 仮想環境の作成

pipはPythonのパッケージ管理システムで、多くのPythonパッケージを簡単にインストールできます。pipがインストールされていることを確認し、次のコマンドを実行してvirtualenvをインストールします。
プロジェクトディレクトリ内で、Pythonの仮想環境を作成し、アクティベートします。

```bash
$ pip install virtualenv
$ virtualenv venv
$ source venv/bin/activate
```


## 3. 必要なパッケージのインストール

次に、FlaskとZappaを含む必要なパッケージをインストールします。

```
$ pip install Flask zappa
```

## 4. Flaskアプリケーションの作成
プロジェクトディレクトリにapp.pyという名前のファイルを作成し、以下のコードを記述します。


```python
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello from AWS Lambda and Flask!'

if __name__ == '__main__':
    app.run()
```

### ローカルでの起動方法


Flaskがアプリケーションを見つけるために必要な環境変数を設定します。以下のコマンドを実行して環境変数を設定してください。コマンドは、使用しているシェルによって異なります。

- Bash (Linux/macOS)

```bash
$ export FLASK_APP=app.py
```

以下のコマンドを実行してFlaskアプリケーションをローカルで起動します。

```bash
$ flask run
```

デフォルトでは、アプリケーションは 127.0.0.1（localhost）のポート5000で実行されます。起動が成功すると、以下のようなメッセージが表示されます。


```
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
```


## 5. Zappaの設定
Zappaの設定ファイルzappa_settings.jsonをプロジェクトディレクトリに作成し、以下の内容を記述します。

```json
{
    "dev": {
        "app_function": "app.app",
        "aws_region": "us-west-2",
        "profile_name": "default",
        "project_name": "python-flask-lambda",
        "runtime": "python3.8",
        "s3_bucket": "your-s3-bucket-name"
    }
}
```

aws_regionとs3_bucketを適切な値に置き換えてください。


## 6. aws cliの設定

AWS CLI をインストールして設定すると、zappa が自動的に認証情報を読み取ります。まず、AWS CLI をインストールします：

```bash
pip install awscli
```
次に、以下のコマンドを実行して AWS CLI を設定します：

```bash
aws configure
```

これにより、AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY を入力するように求められます。入力後、設定は ~/.aws/credentials ファイルに保存されます。zappa はこのファイルから認証情報を読み取ります。

## 7. Lambda関数のデプロイ


Zappaを使用して、Lambda関数をデプロイします。

```bash
$ zappa deploy dev
```


正常にデプロイされている場合、「Hello from AWS Lambda and Flask!」というメッセージが表示されます。


## 8. Lambda関数の更新
アプリケーションを更新した場合、以下のコマンドを実行してLambda関数を更新できます。

```bash
$ zappa update dev
```

## 9. Lambda関数の削除
プロジェクトを削除する場合、以下のコマンドを実行してLambda関数と関連リソースを削除できます。

```bash
$ zappa undeploy dev
```

## まとめ
この記事では、AWS LambdaでPython+Flask環境を作成する方法を紹介しました。AWS LambdaとZappaを使用することで、簡単にサーバーレスなWebアプリケーションをデプロイできます。この方法を試して、サーバーレスアーキテクチャの利点を活用してみてください。




以下のサイトでは他にもpythonとFlaskとAWSについて解説しています。

https://developer.jamstack-media.com/docs/flask/tips/aws-lambda%E3%81%A7python+flask%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B/
Amazon Linux 2023でOpenCV-Pythonとdlibを動かす

Ubuntuでは`libgl1-mesa-dev`を入れればいいと言う記事が各所ありますがAmazon Linx 2023は情報が少ないのでポストしておきます。

まずdlibにはcmakeが必要なのでインストールしてからdlibインストール

```bash
sudo dnf install -y cmake
# 容量やスペックに余裕があるなら開発ツールも入れておきましょ
sudo dnf groupinstall -y "Development tools"
# dlibインストール
pip install dlib
```

Amazon Linux 2023では`libgl1-mesa-dev`パッケージがないのでGL関連のライブラリを確認します。

```
sudo dnf search libgl

Last metadata expiration check: 0:30:00 ago on Wed Jul 12 02:34:36 2023.
=============================================================================================== Name & Summary Matched: libgl ===============================================================================================
libGLEW.x86_64 : libGLEW
libglvnd-core-devel.x86_64 : Core development files for libglvnd
libglvnd-devel.x86_64 : Development files for libglvnd
libglvnd-egl.x86_64 : EGL support for libglvnd
libglvnd-gles.x86_64 : GLES support for libglvnd
libglvnd-glx.x86_64 : GLX support for libglvnd
libglvnd-opengl.x86_64 : OpenGL support for libglvnd
mesa-libGL.x86_64 : Mesa libGL runtime libraries
mesa-libGL-devel.x86_64 : Mesa libGL development package
mesa-libGLU.x86_64 : Mesa libGLU library
mesa-libGLU-devel.x86_64 : Development files for mesa-libGLU
==================================================================================================== Name Matched: libgl ====================================================================================================
libglvnd.x86_64 : The GL Vendor-Neutral Dispatch library
mesa-libglapi.x86_64 : Mesa shared glapi
```

`mesa-libGL`と`mesa-libGL-devel`をインストールします

```bash
sudo dnf install -y mesa-libGL mesa-libGL-devel
```

これでpythonからdlibとopencvが動くはずです。以上。
HelloWorldをコンソールに出力するJavaScriptコード

```js
console.log('Hello, World!');
```

上記のコードでは、console.log関数を使用して文字列 'Hello, World!' をコンソールに出力しています。

このコードをNode.js環境やブラウザの開発者コンソールで実行すると、コンソールに「Hello, World!」というメッセージが表示されます。
Vue.jsのリンクの貼り方について


# はじめに

Vue.jsのリンクの貼り方について。
Vue.js routerについて、少しハマったので忘れないようにまとめる。



# 注意
最新の状態を確認して下さい。

# 参考さまはこちら
https://router.vuejs.org/

https://router.vuejs.org/guide/essentials/history-mode.html

https://www.webdesignleaves.com/pr/plugins/vue-basic-04.html

https://codelikes.com/vue-router-page-link/

# 最終更新日
2023年7月12日

# 環境

OS
macOS Big Sur 11.3

### バージョンなど

```
%  vue -V
@vue/cli 5.0.8
```

```
$ node -v
v18.0.0
```

```
$ npm -v
8.6.0
```



# 状況

インストールする。
```
npm install vue-router
```

改装としてはファイルをこのように作る。
大文字などにうるさいので気をつける。

```
 % tree  
├── src
│   ├── App.vue
│   ├── assets
│   │   └── logo.png
│   ├── components
│   │   ├── AboutTest.vue
│   │   ├── HelloWorld.vue
│   │   └── HomeTest.vue
│   ├── index.css
│   ├── main.js
│   ├── page
│   │   └── index.vue
│   └── router
│       └── index.js
└── vue.config.js
```

例としてこのように作る。

```router/index.js
import { createRouter, createWebHistory } from 'vue-router'
import HomeTest from '@/components/HomeTest.vue'
import AboutTest from '@/components/AboutTest.vue'

const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeTest
  },
  {
    path: '/about',
    name: 'abouttest',
    component: AboutTest
  },
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

export default router
```


```main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'

createApp(App)
.use(router)
.mount('#app')
```

表示側はこちら。

```HomeTest.vue
<template>
 <router-link to="/">ホーム</router-link>
</template>
```



# 補足


#### createWebHistoryはなに？

```vue
import { createRouter, createWebHistory } from 'vue-router'
```

ルーター インスタンスを作るときのモードである。
https://router.vuejs.org/guide/essentials/history-mode.html




# 終わり

無事に移動できるようになった。
![スクリーンショット 2023-07-12 13.45.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/5e4f5625-ea36-b170-15fc-353083306d3b.png)
木構造で説明する

複雑な事柄を説明する技術です。
1.事柄をMECEで分割する。
2.分割した事を木構造のノードと捉えて1つ1つ説明していく。

例を挙げます。「たばこ税は増税すべきか否か」という設問に対して、増税すべきという説明をする場合です。
まずは1です。対象者を「喫煙者」と「非喫煙者」に分割します。
次に2です。「喫煙者」にとってたばこ税を増税すべき理由を説明します。説明の際には,子ノードを追加して説明することもできます。
「喫煙者」にとってたばこ税を増税すべき理由を話し終えたら,ディレクトリを1つ上げて,今度は「非喫煙者」にとってたばこ税を増税すべき理由を話し始めます。

以上,戯言でした。
at

at 一発物のジョブを登録する
ジョブの内容。7/12  13:30に1番のジョブを実行する
```
[linuxstudy@localhost ~]$ at -l
1	Wed Jul 12 13:30:00 2023 a linuxstudy
```
1番のジョブを照会
```
at -c 1
               :
               :
XAUTHORITY=/run/gdm/auth-for-linuxstudy-k6gxb2/database; export XAUTHORITY
cd /home/linuxstudy || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER0c054d95'
echo "at test"              //登録したシェル内容

marcinDELIMITER0c054d95
```
Pythonプログラムの基本（はじめの一歩）　

<h4>前提など</H4>

**対象：**　何かしらのプログラム言語を少しでも体験したことがある人。（初学者が対象）
**開発環境：**　Windows、Visual Studio Code、Python３系
　　　　　　　[前回構築した開発環境で学習を進めます。](https://qiita.com/okamoto0/items/f63b7726626e57026f99)
　　　　　　　※Windows10での使用を前提とするが、他OSでも大きく変わらないはずです。

**前提：**　初学者は公式ドキュメントを元に学習すべきであるが、
　　　　社内勉強会を前提としているため、基本を掻い摘んで駆け足で説明します。
　　　　分かりにくいところが在っても先ずは全体を通してみてください。

　　　　[★公式ドキュメントへのLINK★](https://docs.python.org/ja/3/)

<h4>Pythonプログラムの基本</H4>

プログラムは予約語、関数、変数などを組み合わせて、処理を記述します。

__予約語__ とは、プログラム言語においてあらかじめ定義されている文字列の事で、自分が作る変数や関数の名称として使用する事は出来ません。

Pythonの予約語は意外と少ないので一覧を確認してみましょう。
DOS窓を開いて以下の順に入力してください。
```py
Python
import keyword
print(keyword.kwlist)
```
正しく入力出来ていれば以下の様に表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/3471e24b-825f-4a50-806b-50cad7530351.png)
予約語の一覧は以下
```py
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
```
前述の通り、予約語は変数および関数の名称として使用できません。

__変数__ とは、データ（値）の入れ物のです。
字のごとく中の値は変えることが出来ます。
コンパイルするプログラミング言語では一般的に型を定義して変数宣言しますが
Pythonの特徴として、自動での型付けを行います。
勿論、型定義しての変数宣言も可能です。
※個人的には型定義した方がバグを減らせると思っています。

__関数__ とは、入力値をもとに、処理し、結果を返す物です。
いわゆる、プログラムそのものです。
予約語一覧の確認時に使用したprint()も関数ですが __組み込み関数__ と言い、
Pythonにあらかじめ組み込まれている関数です。
以下、公式ドキュメントの組み込み関数一覧
https://docs.python.org/ja/3/library/functions.html

__まずは関数を体験してみましょう。__
前述のDOS窓を利用し以下を入力してください。
```py
print('こんにちは世界')
```
```py
print(1+3)
```

実行結果は以下となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/60738e9e-5eb7-c2ce-b288-8a0192f1ef62.png)
見ての通り、print関数の場合、文字列を喰わす場合と数字を喰わす場合で処理結果は異なる。

__変数を使ってみよう。__
以下を入力し実行します。

```py
name='molly'

print(name)
```
実行結果は以下となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/1dd1a602-6b14-b38c-0ecf-e91a7b340f9f.png)

<h4>簡単なPythonプログラム</h4>

次は、__プログラムらしく処理を書いてみよう。__
前回、Visual Studio Code で作成した test.py　に対して
下記ソースを入力し、ループ、条件分岐の有るプログラムを実行確認しましょう。
```py
num :int = 0
print(num)
while num < 5:
    num=num + 1
    if num == 3:
        print("さん", num)
print(num)
```
実行結果は以下の赤枠内の様になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/a88e5035-90a0-e532-2d74-6a46894d64c5.png)

__ソース内をザックリ説明__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/10994ed4-42aa-35f2-354a-cc15a619e63e.png)
__使用された予約語__
<font color="red">__if__</font> 　条件分岐を実行するために使われます。
<font color="red">__while__</font>　 式の値が真である間、実行を繰り返すために使われます。
__変数宣言__

1行目では、__num__ という名称で、整数型の変数を宣言しています。
```py
num :int = 0
```

２，６，７行目では、見覚えのあるprint関数で出力処理をしています。

3行目では __while__ が使用されていますが
3行目～6行目をnumが5未満の間は繰り返し実行します。

5行目の __if__ はnumが3に成った時のみ、
6行目を実行します。

行頭の4文字単位のスペースはインデントと言います。
Javaなど他の言語では処理ブロックの範囲を指定する場合 <font color="red">__｛　｝__</font> カッコを使用しますが
Pythonの場合はインデントによりブロックを明確にします。
ソース内のインデントを変更して実行結果の違いを確認してみましょう。

**今日はココまで～**
pthread_create()のような関数でポインタでなく整数を渡す

（備忘録）（7/13 修正）

### やりたいこと
[pthread_create](https://linuxjm.osdn.jp/html/glibc-linuxthreads/man3/pthread_create.3.html)のような、void\*型を引数にとる関数で整数を渡したい。

### 結論
void\*型への互換性がある uintptr_t, intptr_t を使う。
整数 → uintptr_t (intptr_t) → void\* のようにキャストすればよい。

```c
    uint8_t hoge = 123;
    pthread_create(&thread, NULL, function, (void*)(uintptr_t)hoge);
```

```c
    void *function(void* arg){
        uint8_t hoge = (uint8_t)(uintptr_t)arg
        return 0;
    }
```

型サイズには注意すること。
VB.NET Settingsを初期化する方法

VB.netでユーザの設定値等を記憶できる、settingsを初期状態に戻す方法のメモ。
初期状態は、Settings.settingsファイルで記述されている値です。

Yes or Noを確認して、Yesならsettingsを初期化する。

```vb:Form1.vb
        Dim result As DialogResult = MessageBox.Show("Is it OK to remove all user settings?",
                                             "Notice",
                                             MessageBoxButtons.YesNo,
                                             MessageBoxIcon.Exclamation,
                                             MessageBoxDefaultButton.Button2)
        If result = DialogResult.Yes Then
            My.MySettings.Default.Reset()
            MsgBox("Please restart the application", , "Restart application")
            End
        End If
```
Text2Scene: Text-Driven Indoor Scene Stylization With Part-Aware Details


# 1. 概要
3Dシミュレーションで複数のオブジェクトがシーンに対して、リアルなテクスチャを自動生成して貼り付ける研究。入力として参照シーンの画像とテキストによる説明文を与えると、部屋の3Dモデルに指示に沿ったテクスチャを自動生成して対象物体にマッピングする。

---

# 2. 新規性
テキストから3Dシーンを生成するためのテクスチャを生成する方法を提案。3D物体ごとにテクスチャを自動生成しパーツ単位でマッピングすることで、よりリアルなシーン合成が可能となった。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/02d43d5c-af1f-b8f8-e501-4c1783b108bf.png)
生成したい3Dシーンモデルに対して生成したいシーンのサンプルとなる2D画像とテキストによる生成イメージのスタイルに関わる文書を入力すると、指示内容に沿ったテクスチャが生成される。
まず、部屋のレイアウトや家具、初期値のテクスチャなどをそれぞれ求める。その後、物体のパーツごとにベースとなる色を決めて家具のパーツごとにテクスチャを生成しマッピングして詳細情報を表現する。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/1941313a-0360-b835-1905-7a532208ada0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/ec31c911-2b07-8179-fe3b-09cbcfd3364d.png)
テキストによるテクスチャ自動生成の研究で、3Dシーンの構成をテキストで行うものとしては最初の研究となる。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Hwang_Text2Scene_Text-Driven_Indoor_Scene_Stylization_With_Part-Aware_Details_CVPR_2023_paper.pdf>

last updates: July 5 2023
Data-Driven Feature Tracking for Event Cameras

# 1. 概要
一般的なカメラは連続的にフレームを撮影しフレーム単位で画像情報を取得するが、イベントカメラは画像の変化が発生したときにのみイベントを記録するセンサーを使用する。スパースな出力となり、またモーションブラーに対して高い耐性を持っているため、低遅延で低帯域幅の特徴点追跡に向いているとされる。この研究では、通常のカメラとイベントカメラとを組み合わせ、複雑なシーンでもより頑健に特徴点追跡が行えるようにした。

*Award Candidate

---

# 2. 新規性
特徴点追跡の精度は一般的なカメラのハードウェアスペックに依存していたが、この研究を用いることでハードウェア性能に依存せず頑健に特徴点追跡ができるようになった。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/40af5f98-0886-e246-1dc2-f6cfd06f5da4.png)
グレースケール画像で検出された特徴点を追跡するために、イベントカメラを利用して低遅延で追跡できるようにしている。フレーム間での相関を学習できるようアテンションモジュールを時間方向に導入しており、特徴点が時間方向に対して一貫性を持つような予測を行うことで頑健性を上げている。また、画像内の特徴点間の情報をアテンションモジュール(セルフアテンション)で結び付けて特徴ベクトル内にシーン全体の特徴点情報を包含している。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/01cb21a5-98d9-4a2e-941c-81da11653ffc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/c2094311-5583-e06f-26ec-ff3c09d83eb4.png)
実データでファインチューニングをすることで、従来手法よりも130%レイテンシー(遅延)を少なくすることができた。近年の手法と比べても大幅な改善を示している。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Messikommer_Data-Driven_Feature_Tracking_for_Event_Cameras_CVPR_2023_paper.pdf>

last updates: July 5 2023
Normalizing Flow Based Feature Synthesis for Outlier-Aware Object Detection

# 1. 概要
自動運転の実現には、実世界においても信頼性の高い物体検出器(Object Detector)が求められているが、Faster R-CNNなどの汎用的な物体検出器は、外れ値(outliers)となる物体に対して自信をもって間違える(overconfident predictions)ことが多かった。この研究では、学習したデータセット内の典型的なデータポイントである代表値(Inliers)のクラス分布を学習することで、外れ値を区別する新たな物体検出手法を提案している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/9ef6bcaa-cdfd-b6b7-550a-5ab913923178.png)

---

# 2. 新規性
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/b0aff57e-637a-7bb5-bda0-c9bcaaa6122d.png)
提案手法では、クラス分類の境界面をより頑健に学習できるよう、境界線ギリギリに外れ値(Outlier)を疑似的に合成して対象クラスの代表値(Inlier)よりも低い尤度が保たれるように学習を進める。これにより、代表値(Inlier)はより良いベクトルが学習され、外れ値(Outlier)の物体との境界を明確にできる。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/dd8cbafd-818e-3b19-5f8b-d27e93bce9ed.png)
外れ値の特徴を合成するために、異なる特徴の合成手法である(Flow Feature Synthesis)を用いる。Faster-RCNNのROI Alignから得られる候補点をFlowに入れ、学習対象の物体の代表値(Inlier)の特徴を潜在空間上の正規分布にマッピングするよう学習する。これにより、学習データセットの各物体の代表値(Inlier)が正確に分布として予測できる。この分布外からサンプリングすることで外れ値(Outlier)を合成することができる。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/b2cb1cc4-3d41-1830-f25c-04024e52616f.png)
学習対象のデータセットのInlierの境界面を正確に予測できることで、物体検出時の候補点を削減できるという副次効果が得られたようある。
物体検出を画像ベースのデータセットと動画ベースのデータセットに対して実施しており、外れ値を考慮した既存手法よりも大幅に精度を向上している。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Kumar_Normalizing_Flow_Based_Feature_Synthesis_for_Outlier-Aware_Object_Detection_CVPR_2023_paper.pdf>

last updates: July 5 2023
ER図　ショップサイト

### :hibiscus: はじめに
共同開発をしていて、自分のメモ用程度に作成します。

ケーキ販売ショップを作成するためのER図を作成します。

_____
 ### :shamrock:　エンティティとリレーションシップとは？
オンラインショッピングのサイトでは、「顧客」と「注文」がエンティティとなり、それらの間には「作成する」というリレーションシップがあります。これはエンティティ同士がどう関わっているか、つまり「つながり」を表します。
つまり、「顧客は注文を作成する」というつながりがある、というわけです。

### :shamrock: エンティティとリレーションシップの定義（ER図作成）

https://www.draw.io/ で作成

![スクリーンショット 2023-07-12 13.32.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492906/5defa412-6ef7-2981-dede-b2adf60799e6.png)


:::note info
**注文ステータス** 注文の状態遷移を表す（後述）。
**製作ステータス** 注文に紐付く注文商品の状態遷移を表す（後述）。
**販売ステータス** 商品の販売状況を表す。現状、販売中、売切れの2パターンがある。
販売停止商品は「売切れ」をセットする。
**会員ステータス** 現状、有効・退会の2パターンがある。
**ジャンル** 商品の種類。
現状、ケーキ、プリン、焼き菓子、キャンディの4ジャンルある。
:::


**ユーザーとカート（1対多）**:
もしショッピングカートがユーザーごとに1つだけ存在する場合、それは1対1のリレーションシップになります。
ただし、一部のシステムでは、ユーザーが複数のカートを持つことが許可されています。例えば、ユーザーが異なる種類の商品を別々に購入したい場合などです。このようなシステムでは、1対多のリレーションシップが適用されます。

**ユーザーと注文（1対多）**:
各ユーザーは複数の注文を行うことができます。そのため、一つのユーザーIDは複数の注文に紐づけられます。これはユーザーが時間を経て複数の注文を行うことができるという意味です。

**ユーザーと配送先（1対多）**:
ユーザーは複数の配送先を登録することが可能です。これは、一つのユーザーIDが複数の配送先に紐づけられるという意味です。

**カートとカート内商品（1対多）**:
カートは複数の商品（カート内商品）を含むことができます。したがって、一つのカートIDは複数のカート内商品に関連付けられます。

**商品とカート内商品（1対多）**:
同一の商品は複数のカートに追加されることがあります（異なるユーザーのカートや同一ユーザーの異なるカートに追加）。したがって、一つの商品IDは複数のカート内商品に関連付けられます。

**注文と注文内商品（1対多）**:
一つの注文は複数の商品（注文内商品）を含むことができます。したがって、一つの注文IDは複数の注文内商品に関連付けられます。

**商品と注文内商品（1対多）**:
同一の商品は複数の注文で購入されることがあります（異なるユーザーによる注文や同一ユーザーによる異なる注文）。したがって、一つの商品IDは複数の注文内商品に関連付けられます。




### :shamrock: 管理者フラグとは？
「管理者フラグ」は、ユーザーアカウントが管理者権限を持っているかどうかを示すためのフィールドです。このフラグは、通常、データベース内のユーザーテーブルに存在します。

管理者フラグがセット（通常は「1」または「true」）されているユーザーは、通常のユーザーよりも高度な機能へのアクセス権を持っています。この機能には、他のユーザーのデータの閲覧や編集、システム設定の変更、新規商品の追加や既存商品の編集等が含まれます。

管理者フラグが未セット（通常は「0」または「false」）のユーザーは、一般的なユーザーとなり、システムの基本的な機能（商品の閲覧、カートへの追加、購入など）のみを使用できます。


:star:**管理者フラグがセットされているユーザーは具体的には以下のような事が可能**
ユーザーテーブル (Users): 管理者は全てのユーザー情報を閲覧・編集することができます。また、必要に応じてユーザーの退会処理も行うことができます。

住所テーブル (Addresses): 管理者はユーザーが登録した住所情報の閲覧が可能です。ただし、通常はプライバシーの観点から編集や削除は行わないことが一般的です。

商品テーブル (Products): 管理者は新規商品の追加や既存商品の編集、販売停止（売切表示）を行うことができます。

カートテーブル (Carts): 管理者は全てのユーザーのカート情報を閲覧することができます。しかし、通常はユーザーの購入意思を尊重するため、カートの編集や削除は行いません。

注文テーブル (Orders) および 注文詳細テーブル (OrderDetails): 管理者は全ての注文情報と注文詳細情報を閲覧することができます。また、注文ステータスや製作ステータスの更新も行うことができます。

### :question:疑問
**一般ユーザーのテーブルの他に管理者用のテーブルは追加しなくていいんですか？**
通常、システムによりますが、管理者用の専用テーブルを作成する必要は特にありません。なぜなら、管理者も基本的にはユーザーの一種であり、ユーザーテーブルの一部として管理できるからです。

管理者と一般ユーザーを区別するために、ユーザーテーブル内に「管理者フラグ」や「ユーザーロール」のようなカラムを設けることが一般的です。このフラグやロールによって、ユーザーが管理者であるかどうかを識別し、それに応じた機能やページへのアクセスを制御します。

:::note warn
ただし、管理者が持つ情報や機能が一般ユーザーと大きく異なり、それが複雑さを増す場合は、管理者用のテーブルを別途作成することもあります。
:::

### 参考

https://zenn.dev/ganmo3/articles/362cff68fafe52
OpenMix: Exploring Outlier Samples for Misclassification Detection

# 1. 概要
AIが自信を持って間違えること(overconfident predictions)を防ぐために、誤分類検知(Misclassification Detection: MisD)の研究が進んでおり、誤った予測を信頼できる信頼度を使って補正していく手法が多数提案されている。従来手法では、学習していないデータ分布(Out-of-Distribution: OOD)を検知してこの問題に対処することが多かった。この研究では、誤分類検知(MisD)に対して外れ値(Outliers)のサンプルを用いた最初の研究となっている。

---

# 2. 新規性
従来手法で多かった、OODの検知が実は誤分類検知(MisD)に対して何の効果ももたらさないことを明らかにした。その上で、正しいサンプルと誤分類されたサンプルとの間の信頼度がうまく分離できるように学習をさせることで、誤分類検知(MisD)の精度を大幅に改善した。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/cfc390d5-5d1e-d05d-6a13-36949f87ca81.png)
外れ値(Outliers)用のクラスを新たに定義して、外れ値の予測をするネットワークを学習する。次に、学習された外れ値を使って疑似サンプルを生成しこれを見抜けるように別のネットワークを学習する。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/cb422684-068a-e41a-7358-39229e173fd9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/c9adc003-6e36-48df-87d7-12fb2e1ba90e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/fe6854b0-edca-9a45-90b2-76743f97f1a5.png)
提案手法が誤分類サンプルの検知(MisD)だけでなく学習していないデータ分布(OOD)検知としても機能することが分かった。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Zhu_OpenMix_Exploring_Outlier_Samples_for_Misclassification_Detection_CVPR_2023_paper.pdf>

last updates: July 5 2023
【インプレッションとは…？】「超初級編」ChatGPTで行うTwitterの運用分析のやり方

## やりたいこと
少し本業が忙しい状況ではありますが、平均して1日に10tweetくらいはする私です。少し前にしたTweetがどれくらいの反響があるのか、Twitterの画面に表示されるインプレッションなどの数値を多少気にすることはあっても、Analyticsなどでの分析までは手が回らない状況でした。

そこで今回、ChatGPT「Code Interpreter」を使って、これまで手が回らなかった「Tweetの傾向」について超初級編の分析を行いたいと思います。

Twitter運用はしているものの、「どんなTweetが伸びる傾向にあるのか」「いつTweetをするのがいいのか」など、ロジックに基づいた運用がなかなかできない…そんな方（私と同じ悩みを持つ方）には、特にオススメの内容です。

### ChatGPT「Code Interpreter」とは？

この機能は、ChatGPT-4が必要です。（ChatGPTの「Code Interpreter」というベータ版の機能を使います）
※GPT-4は月額20$の有料課金バージョンとなります。詳しい設定の仕方は、[コチラの記事](https://qiita.com/Rekt-Order/items/3ff1566265996b2c4a9f)をご覧ください。


「Code Interpreter」とは、ChatGPTでPythonでの処理ができるようにするもので、ファイルのアップロードやダウンロード機能も使えるようになります。Pythonでできることは、ざっくり挙げると…

- Word/Excel/Powerpointなどのオフィス系ファイルの加工
- PDFファイルの作成
- 画像加工
- 動画加工
- データ分析
- 機械学習
- 自動化プログラムの作成（処理速度遅め） 

つまり、このあたりの操作がChatGPTを通してできるようになる、という理解でOKです。
ここで使うのは、Pythonで可能な「データ分析」領域の機能、ということになりますね。

## 実際に分析してみよう！
### Tweet Analyticsのデータを取得

Twitterアカウントへログイン後、「Creator Studio」＞「アナリティクス」から、TwitterのAnalyticsモードへジャンプすることができます。

- 月ごとのTwitterの統計データ
- Tweetごとの数値データ

例として、私が運用しているアカウントの「Analytics」の画面を掲載しておきます。

![スクリーンショット 2023-07-12 101348.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416622/654f1287-cdd5-358d-ff4d-0de7e649503d.jpeg)

この「Analytics」上部の「ツイート」タブ、エクスポート画面から、「データを抽出したい期間」を選び、csv形式でデータを出力します。

![スクリーンショット 2023-07-12 123203.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416622/8dedbb3b-13ad-1ccf-c3b8-9734e20aa3e4.jpeg)


※csvファイルを「Excel」で普通に開くと、文字コードの問題により日本語テキストが文字化けしてしまいます。Excelで開く場合には、文字コード「UTF-8」に指定をして開くようにしてください。（スプレッドシートで開く場合には、文字化けなく表示することが可能でした）

このデータのまま分析をするのが、なかなか億劫で…これまで手が回らなかったのですが、早速ChatGPTへお願いしてみましょう！

### 取得したデータをChatGPTへアップロード！

出力したcsvをChatGPTへアップロードして、下記のプロンプトを入力します。

```
このデータセットは、あるアカウントのTwitterのアナリティクスをレポートに出力した情報です。データセットを構成する要素について、解析を行い、説明をしてください。
```

![スクリーンショット 2023-07-12 123300.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416622/e4901216-a0aa-7e0b-8cc5-9705e81bfe87.jpeg)


このように、アナリティクスでよく聞く用語についても、きちんと説明をしてくれます。
（…これだけでも、かなり助かります）

続いて、下記のプロンプトによって、欲しい分析結果の出力を依頼します。
※データの扱いを「2023年5月」で分けたのは、私個人のスタイルの変化に伴うものです。

```
データを2023年5月以前と、5月以降に分けて、下記の項目について分析を行い、視覚化してください。

・時間帯によるインプレッションの平均
・URLの有無によるインプレッションの平均
・メディアの有無によるインプレッションの平均
```

![3dea4ecb-5d3e-4849-9e13-6bbccadb6bfc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416622/d8e767f6-43e4-78fe-664e-668dd9f76352.png)


このように分析結果を折れ線グラフ／棒グラフと、観測に適したグラフでアウトプットしてくれました。
さらに、コメントまでつけてくれています。

![スクリーンショット 2023-07-12 125023.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416622/9c01fa55-5cb7-5405-5654-654c1c0e0231.jpeg)


私のTweetの実績では…
- URL付きのTweetの方が、URLリンクのないTweetよりも約2.5倍ほどインプレッションが高い
- 画像／動画付きのTweetの方が、画像／動画なしのTweetよりも約3倍ほどインプレッションが高い
- Tweetする時間帯は、10時～15時の時間帯が意外とインプレッションが高い

つまり…10時～15時の時間帯は、本業でTweetができない時間になりますが、「休憩時間やTweet予約機能などを使ってでも、発信した方が良い」ということが分かりました。

このような形でChatGPTを使うと、様々な分析を行うことができます。ぜひ、「Code Interpreter」をご活用ください。


この記事は、著者が運営するメディア「ぬるぺでぃあ」でも読むことができます（記事は[コチラ](https://miuradonuts.com/2023/07/12/prompt-004/)）
![](https://miuradonuts.com/wp-content/uploads/2023/06/ヘッダーエリア画像作成.png)
known_hostsとauthorized_keysの解説


## 環境
Ubuntu20.4


## はじめに
**~/.ssh**の中に、に、**authorized_keys**と**known_hosts**の２つのファイルが存在しています。この２つのファイルの役割について書いてみました。

因みにこの２つのファイルが保存されている場所は、~/.sshであって、ホスト認証で利用される鍵が保管されている、/etc/sshではありません。

## 解説
known_hostsとauthorized_keysは、共に、共通鍵が書き込まれています。秘密鍵ではありません。共にテキストファイルであるため、エディタで中身を参照することができます。１行に対し１つの公開鍵が登録されています。データが２行あれば、公開鍵が２件登録されていると判断することができます。

SSHでクライアントからサーバーに接続しにいくとき、ホスト認証と、ユーザー認証の２つの認証が行われます。ホスト認証とは、接続先が本当に正しいホストなのかを、確認するために行われる認証で、ユーザー認証とは、接続しようとしている人が、本当に、正しいユーザーなのかを確認するために行われる認証です。ホスト認証とユーザー認証は、共に、公開暗号方式で行われます。ホスト認証が先に行われ、次にユーザー認証が行われます。２つの認証が共に成功して、晴れて、SSH接続が確立されます。

SSH接続を始めて行うとき、前準備として、ssh-keygenコマンドを使って、公開鍵と秘密鍵のペア鍵を作成しますが、このときに作成する鍵は、ユーザー認証で使う鍵です。

ホスト認証で利用する鍵も、ssh-keygenコマンドで作成することはできますが、普通は作成することはありません。デフォルトでOSの中に既に入っています。大抵の場合、デフォルトで入っている鍵をそのまま使って、ホスト認証を行っています。よって、ホスト認証がどのように行われているのかは、あまり意識する必要がありませんでした。

ユーザー認証で用いられるペア鍵は、大抵、~/.sshに作りますが、ホスト認証で用いられるペア鍵は、/ect/sshの中に入っています。ホスト認証が行われるとき、サーバーは、/ect/sshの中にある公開鍵をクライアント側に送信します。送信された公開鍵は、クライアントの~/.ssh/know_hostsの中に書き込まれます。

公開鍵が書き込まれるときに、「書き込みますがよろしいですか。」といった、注意メッセージが必ず表示されます。注意メッセージが表示されるのは、始めてSSH接続が行われるときだけです。２回目以降の接続時には表示されません。ホスト認証では、~/.ssh/know_hostsに登録された公開鍵を使って暗号化を行い、サーバー側の、/ect/sshにある秘密鍵を使って復号化を行います。

ホスト認証が必要な理由は、なりすましを防止のためです。なりすましとは、自分が接続したい本当のサーバーではなく、誘導されて別のサーバーに接続してしまうことです。ホスト認証で失敗した場合、なりすましのサーバーに誘導された可能性があります。しかし、滅多にある話ではないとは思います。なりすましのサーバーには、本当のサーバーが持っている秘密鍵は持っていないため、公開鍵で暗号化したデータをなりすましサーバーの秘密鍵で復号化しようとして失敗したのです。

もし、本当のサーバーに接続したにも関わらず、ホスト認証で失敗するようなことがあれば、サーバー側でペア鍵が新しく作り変えられた可能性があります。そのようなときは、~/.ssh/know_hostsをエディタで開いて、古い公開鍵が登録されている行を１行削除して、新しい公開鍵をコピペすればOKです。ときどきありがちなトラブルシューティングの例です。

~/.ssh/know_hostsは、ホスト認証を行うために、クライアント側で作成されるのに対し、~/.ssh/authorized_keysはユーザー認証のときに作られます。ユーザー認証は、ホスト認証とは逆で、サーバー側で公開鍵を使って暗号化したデータを、クライアント側に送信し、クライアント側の秘密鍵を使って復号化する手順となります。サーバー側で保持している公開鍵を登録するファイルが、~/.ssh/authorized_keysです。

SSHサーバーは、公開鍵を登録するに従って、~/.ssh/authorized_keysのファイル容量は、どんどんと大きくなっていくが、SSHクライアントは、接続先のSSHサーバーが増えるに従い、~/.ssh/know_hostsの容量が増えていくことになります。SSHクライアントが、ローカルの~/.ssh/authorized_keysに公開鍵を追加することは、ほぼほぼないと思われます。自身の環境においても、~/.ssh/authorized_keysは、389byteであるのに対し、~/.ssh/know_hostsは1.1Kbyteあります。

## まとめ

- ~/.ssh/know_hosts
ホスト認証で使われる公開鍵が、クライアント側で登録されています。

- ~/.ssh/authorized_keys
ユーザー認証で使われる公開鍵が、サーバー側で登録されています。
ブラウザのメモリ使用量を90％以上解放し、タブを簡単に管理する - 今すぐ「タブスファストイージー」を試してみてください！

皆さん、こんにちは！私が開発したGoogleの拡張機能を紹介します。それが「Tabs Fast Easy」です。

![20230712111144.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510924/cdefe947-9839-7a59-8a83-e44a2486254f.jpeg)
![ri2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510924/410a3aa9-7794-9ab0-fccd-92246bf99123.png)
![ri3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510924/d248b1dd-7b2c-10db-3e8d-aa4a6bdaa827.png)


「Tabs Fast Easy」は便利で効率的なタブ管理を提供するブラウザ拡張機能です。

なぜ「Tabs Fast Easy」を選ぶべきか？

非アクティブタブの自動中断：この機能はパソコンのメモリを解放し、ブラウザのパフォーマンスを向上させ、ブラウジング体験を向上させます。

複数ウィンドウタブの集中管理：複数のウィンドウからのタブをリスト形式で一元化することで、頻繁なマウス操作を必要とせずにブラウジング効率を向上させます。

右クリック機能との統合：右クリックメニューと統合することで、数回のクリックで複数のウィンドウを簡単に閉じることができます。

新しいブラウザタブの自動開設：すべてのタブを閉じた場合でも、新しいブラウザタブが自動的に開きます。

伝統的な中国文化のテーマとの統合：伝統的な中国文化のテーマによる背景ビジュアルを楽しみながら、ページがフリーズしていてもブラウジングを楽しめます。

さらに、「Tabs Fast Easy」では、ブラウザをより良く管理し利用するための多くの便利な機能を開発しています。

「Tabs Fast Easy」を体験してみてください。tabs-fast-easy 皆様のフィードバックと提案をお待ちしております。

皆様のご支援、ありがとうございます！

https://chrome.google.com/webstore/detail/tabs-fast-easy/falglioamaogaliloglbhkannkjlpjil?hl=ja
社会で使われているRFID

# 第1章：RFIDとは？
RFID（Radio Frequency Identification）は、無線周波数を用いて物体を識別・追跡するための技術です。このシステムは主に3つの要素、RFIDタグ、リーダー、そしてデータベースから構成されています。特定の情報を保持するタグは物体に取り付けられ、その情報をリーダーが読み取り、データベースに送信します。

# 第2章：RFIDの利点
RFIDの最大の利点はその効率性にあります。スキャンは非接触で行え、簡単に情報を取得できます．さらに、一度に多数のタグの読み取りが可能であり、これにより管理や追跡が容易になります。

# 第3章：RFIDの活用事例

### ユニクロのRFID活用

ユニクロは、商品の在庫管理、店舗内の商品配置、さらには顧客への精緻なマーケティング活動にRFIDを活用しています。全商品に取り付けられたRFIDタグは、商品が店舗を出る瞬間まで商品の位置を把握することを可能にし、在庫管理の精度を大幅に向上させています。
また、ユニクロはRFIDを利用した革新的なレジシステムを導入しました。RFIDタグがついた商品をレジに持っていくと、レジが自動的に全商品を一度にスキャンします。これにより、レジでの時間を大幅に短縮することができます。


### ロジスティクスとサプライチェーン管理

大手配送会社のDHLでは、RFIDタグを商品に取り付け、配送過程を逐一追跡しています。これにより、商品の現在位置、経由した場所、到着予定時間などをリアルタイムで把握することが可能になり、効率的なロジスティクスの管理と顧客への情報提供を実現しています。

### 自動車産業

自動車産業でもRFIDの活用が進んでいます。BMWでは、製造ライン上の各車両にRFIDタグを取り付け、製造過程全体を追跡しています。これにより、製造過程のボトルネックを特定し、生産効率を改善することが可能になっています。

### 農業

RFID技術は農業分野でも利用されています。牛などの家畜にRFIDタグを取り付けることで、その動きや健康状態を監視し、より効率的な飼育管理を可能にしています。

### ライブラリ

図書館では、RFIDタグを利用して蔵書の管理を行っています。個々の本にRFIDタグを取り付けることで、蔵書の在庫管理や貸出・返却の処理を大幅に効率化しています。


これらは、RFIDの活用例の一部に過ぎません。さらにこの技術が進化することで、新たな活用分野が開拓されていきます．

# 第4章：RFIDの課題
しかし、RFIDにはいくつかの問題点も存在します。プライバシー侵害のリスクがあることや、物理的な障害物や他の電子機器によって信号が干渉される可能性があります。

# 参考
・[ユニクロでのRFID](https://blog.rflocus.com/rfid-uniqlo/)
・[DHL スマートラベル](https://www.dhl.com/global-en/home/insights-and-innovation/thought-leadership/trend-reports/smart-labels.html)
・[自動車業界でのRFID](https://www.nri.com/-/media/Corporate/jp/Files/PDF/knowledge/publication/chitekishisan/2022/02/cs20220211.pdf?la=ja-JP&hash=9C4BBFB6D50260146F6E0894D005D623584CC0FA)
・[牛の追跡にRFID技術を使用する方法](https://www.rfidfuture.com/ja/rfid-technology-for-cattle-tracking.html#Benefits-of-RFID-Cattle-Tracking)
・[図書館システムにおけるＲＦＩＤ技術の適用](https://www.intec.co.jp/company/itj/itj4/contents/14.pdf)
Oracle Cloud Infrastructure Architect Associate 勉強メモ（ロードバランサ)

# ロードバランサ
### 機能
- ヘルスチェック
- トラフィックの分散
- 割り振り方のアルゴリズムの適用
### 利点
- フォールトトレランスと高可用性
- スケーラブル（必要に応じてバックエンドのサーバを増減可能）
- ネーミングの抽象化（サーバーの名前を取得する必要がなく、ロードバランサーの名前がわかればよい）
### OCIロードバランシング・サービス
- スケーリングと高可用性。帯域幅も幅を持たせて設定可能。
- パブリックまたはプライベートのロード・バランサを選択可能。
- 様々なプロトコル（TCP,HTTP/1.0,1.1,2, WebSocket など）に対応。単一のロードバランサでTCP（レイヤー4）とHTTP（レイヤー7）のトラフィックに対応。
- SSLターミネーション、End-to-End SSL、SSLトンネリングに対応。
- セッションパーシステンスなど高度な機能をサポート。
### OCIフレキシブル・ロード・バランサ
- 最小および最大の帯域幅（10~8000Mbps)を定義

# ネットワーク・ロード・バランサ
- レイテンシ（遅延）が問題になるワークロードに適したロードバランサ。
- パブリック（パブリックIPアドレス付き）およびプライベートのロードバランサをサポート。
- レイヤー3/レイヤー4のデータに基づいて接続を負荷分散する。
- **帯域幅無しでスケールアップ・ダウン可能。**
### ロードバランシングポリシー
どういうデータをもとに分散するかのポリシー。デフォルトは5タプル・ハッシュ。
- 5タプル・ハッシュ
ソースIPおよびポート、宛先IPおよびポート、プロトコル
- 3タプル・ハッシュ
ソースIP、宛先IP、プロトコル
- 2タプル・ハッシュ
ソースIP、宛先IP
# パブリック・ロードバランサ
- インターネットからのトラフィックを受け入れる。
- 実際には**２つのロードバランサ（自動で作成）で構成されている。** それらをリージョナルサブネットまたは異なる可用性ドメインorフォルトトレランスに配置することで冗長性を確保。
- フェイルオーバー機能あり。プライマリ・ロードバランサが機能停止した場合、セカンダリ・ロードバランサにIPアドレスを付け替えることも可能。
# プライベート・ロードバランサ
基本的にはパブリックと同じ。
- インターネットからのトラフィックを受け入れない
別のVCNから（LPGピアリング）、別のリージョンから（RPC経由）、オンプレミスから（FastConnect）など。

# ロード・バランシング・ポリシー
どのバックエンドサーバーに割り振るか。
- ラウンドロビン
各バックエンドサーバーに順番に振っていく。
- IPハッシュ
ハッシュ値に応じて割り振る。
- 最小接続
一番接続の少ないサーバーに割り振る。
# ヘルスチェック
バックエンドサーバーが生きているか確認するテスト。
- 対象
バックエンド・サーバー
バックエンドセット（バックエンドサーバーをまとめたもの）
ロードバランサ
- ロードバランサのIPには最大16個のリスナー（プロトコル、ポート、転送先のバックエンドサーバーを定義したもの）を設定可能。（１つのロードバランサで複数のプロトコルと転送先を設定可能）
モバイルアプリ開発での二分探索適用例

## 前置き
プログラミングについて勉強していくとアルゴリズムのカテゴリに触れることがあるかと思います。その時に大体のケースでソートや、全探索、二分探索について学ぶ方が多いのではないかと思います。しかしながら、実際にフロント側の開発（筆者はiOSアプリ開発ですが）ではこれらのアルゴリズムを使うケースはあまりないのではないかと思っています（筆者の経験では、、、）。ですが最近開発で二分探索を使う機会がありましたので共有できればとおもいます。
### 二分探索
二分探索（Binary Search）は、ソート済みのリストや配列内で指定した値を効率的に探すアルゴリズムです。大まかな手順は次の通りです。

1. リストの中央にある要素を調べます。
2. その要素が目的の値と一致すれば、探索はそこで終了します。
3. 中央の要素が目的の値より大きければ、その要素より小さい方（左半分）を新たな探索範囲とします。
4. 中央の要素が目的の値より小さければ、その要素より大きい方（右半分）を新たな探索範囲とします。
5. 新たな探索範囲でステップ1から再び探索を行います。これを範囲がなくなるまで（目的の値が見つからない場合）または目的の値を見つけるまで繰り返します。

``` swift
func binarySearch<T: Comparable>(_ array: [T], key: T, range: Range<Int>) -> Int? {
    if range.lowerBound >= range.upperBound {
        return nil
    } else {
        let midIndex = range.lowerBound + (range.upperBound - range.lowerBound) / 2
        if array[midIndex] > key {
            return binarySearch(array, key: key, range: range.lowerBound ..< midIndex)
        } else if array[midIndex] < key {
            return binarySearch(array, key: key, range: midIndex + 1 ..< range.upperBound)
        } else {
            return midIndex
        }
    }
}

```
このように二分探索が機能する理由は、リストがすでにソートされているため、各ステップでリストの半分を無視できるからです。つまり、探索する範囲が毎回半分になります。これが二分探索がログ時間（つまり、O(logn)）で実行でき高速な理由です。

### 適用例
最近二分探索を使う必要がでてきた理由として以下のような要件がありました。
1. TableViewをつかってAPIから取得した情報をリスト表示
2. 表示するCellにはLabelがあり、そこにタイトルや情報などを表示
3. 特定のLabelについて文末に特定の画像（添付動画では⭐️にしています）をいれたい。
4. 特定のLabelについては指定行表示（添付動画では２行としています）までとしてそれ以上長くなる場合は...とする（文末の特定画像は...のあとに表示）

また、Cellが表示されるタイミングで文字列の計算を以下のようにします。
1. 対象の文字列に画像を挿入
2. 決められた幅に対して文字列の高さを計算
3. 2.で計算した値を１行の高さで割って、行数を計算
4. 3の結果、3行以上だったら文字列を短くして1にもどる。

上記のの要件を満たすためにはUILabelの制限を超えるため、表示したい文字列の長さを自分で計算する必要がありました。しかし、上記の計算ステップの4で単純に１文字づつ文字列を短くしていくと計算量がO(n)となり、大量の文字列に対する操作となるとパフォーマンスに影響を与えます。そこで二分探索を導入し、計算量をO(logn)に抑えることで、パフォーマンスの問題を解決しました。

動画ではCellに表示する文字は500文字でかつCellは最大で600表示するようになっています。
・愚直に１文字づつ消した場合

・二分探索を使った場合
![Something went wrong]()

結果的に、特に高速スクロールなどで大量のCellを生成する際や、大量の文字列を処理する必要がある時、アプリケーションのレスポンスを保つためのキーとなりました。二分探索の導入により、ユーザーエクスペリエンスが大幅に向上しました。

結論として、アルゴリズムの選択はアプリケーションの性能を大幅に左右します。今回の例では、二分探索を使用することで計算効率を大幅に改善し、結果的に良いユーザーエクスペリエンスを提供することができました。このようなアプローチは、他のアルゴリズムでも同様に適用可能で、適切なアルゴリズムを選択することでアプリケーションのパフォーマンスを向上させることが可能です。
S3で画像をUpload&表示

色んなところに情報は出ていると思いますが、2023年7月時点で久しぶりにS3操作してみたのでその記録です。
S3のバケットを作成して、画像あげてアクセス権を修正するというものですが意外と面倒でした。

### S3を開き、バケットを作成
![S3-Management-Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/8b1a1d23-b0b5-39d4-342e-c864d0f6a5f8.png)

### 諸々設定
- ACLは有効に（画面は無効だが）
- パブリックアクセスをすべてブロックのチェックを外す（どこからでもアクセス可能にするため）
- 「現在の設定より・・・」はチェックを入れる
![S3-bucket (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/2ad80d77-d411-af86-5d4c-f4d3eb8b3948.png)

### バケットの設定は完了
![S3-Management-Console (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/5f5e5c69-2c7c-3a43-16e0-2e4f928d20ef.png)

### バケットにファイルをアップロード
![takamibucket0712-S3-bucket.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/f8e96e37-aa26-5d90-5593-56d7fcebe80f.png)
↓↓↓↓↓↓↓↓↓↓
![S3-Management-Console (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/60aa6d1d-f1f3-37b1-88ea-105d34920472.png)

### アクセスコントロールは以下のように設定
「私は、これらの変更が・・・」のチェックも入れて変更の保存
![takamibucket0712-S3-bucket (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/7ee64b52-4eef-9b82-b69c-50a7eab383c9.png)

### 設定変更したS3画像のオブジェクトURLから画像を開く
![takamibucket0712-S3-bucket (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/1c422bde-30e5-f25f-7f71-1e84b063551e.png)

![takamibucket0712-S3-bucket (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/89531e6b-8610-dd60-8260-bc98ac75e9ca.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/19714207-ff7d-3e19-248e-a6f11ae421b3.png)
Tampermonkeyとは

## Tampermonkey

:::note
**ウェブブラウザで動作するユーザースクリプトマネージャー**の１つ

- **ユーザースクリプト**
ウェブページ上の動作をカスタマイズしたり、追加機能を提供したりするためのスクリプト
:::

### Tampermonkeyを使用すると

**ブラウザ上で動作するユーザースクリプトを管理できる**

Tampermonkeyをインストールする
　　　　　↓
・ユーザースクリプトを追加・編集・削除
・スクリプトの実行条件を設定できたりする

## ユーザースクリプト

**特定のウェブページや特定のドメインで動作するように設定できる**
・特定のウェブサイトの表示や機能をカスタマイズ
・不要な要素を非表示にする
・追加のツールや機能を提供できる

### ユーザースクリプトの例
・広告ブロック
・ダークモードの追加
・オートフォーム入力
・ページのスタイル変更など

***
TampermonkeyはGoogle ChromeやMozilla Firefoxなどの主要なブラウザで利用可能
ICEスコアリングによる優先順位づけのリアル

## 導入の背景
自社開発のベンチャー/スタートアップでは日々開発したいものが無限にありますよね。少人数チームでは、無駄な開発をしている時間はありません。
時間をかけてかけて開発したものが実はユーザーに全く使われずコードを削除せざるを得ないなんてことがあればメンバーのモチベーション低下にもつながってしまいます。
そんな事態をなるべく避けるために、弊社ではICEスコアリングによる優先順位づけをしております。



## ICEスコアリングとは
ICEスコアリングモデルは、プロダクトマネジメントにおいてタスクの優先順位を決定する際のフレームワークの1つです。特に初期段階の開発で、アイデアが流れ、チームの勢いを保つことが求められる場合に適していいるといわれています。少人数のPdMや兼任PdMの場合に適しているのではないでしょうか。

ICEはImpact（インパクト）、Confidence（信頼性）、Ease（容易さ）の頭文字をとっています。各アイデアやプロジェクトは、これら3つの要素に基づいて評価されます。

**Impact（インパクト）**: そのアイデアやプロジェクトが成功した場合、それが製品やビジネスに与える影響の大きさを評価します。

**Confidence（信頼性）**: アイデアやプロジェクトが成功する確率についての自信を評価します。これは、該当のアイデアやプロジェクトに対するデータや理解の深さによって変わります。

**Ease（容易さ）**: アイデアやプロジェクトを実装するための時間、コスト、労力を評価します。

これら3つの要素は数値化され、それぞれのアイデアやプロジェクトに対してICEスコアが計算されます。このスコアが高いほど、そのアイデアやプロジェクトの優先度が高くなると考えられます。

チームごとにImpactやEaseの定義をはじめに決めることが重要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340121/477a610e-84d7-81fe-25ab-624f39f48d95.png)


## ICEの準備
### ICEスコアリングそれぞれの定義
弊社のエンジニアチームでは、Impact、Cofidence、Easeの定義を以下のように定めました。

**Impact**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340121/0c3525c2-ab14-6cd3-8238-ee5ec5c37694.png)



**Confidence**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340121/9d3709b4-d9ef-6f6d-94f8-ced91e814486.png)


**Ease**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340121/a48bac46-8243-dc01-85a8-4da946b29944.png)


このため、優先順位付けのミーティングには、Ease決定のためのテックリード、Impact / Cofidence 相談のためにビジネスサイドのメンバーが参加しています。

### 必要なボードについての定義
弊社では、開発のためのICEスコアリングボードを2つ作成しています。
 - 理想ボード
 - kaizenボード

理想ボードは会社目標のために必要な、理想のプロダクトのための機能が書かれています。
kaizenボードは会社のメンバーであれば、誰でも記入することができ、各職種が思ったことやユーザーからの要望が記入されています。

そのためkaizenボードは量が膨大になってしまうため、弊社では2ヶ月更新がなければkaizen要望から消すという方針を取ることで、数が増えすぎないようにするというバランスをとっています。

**ボードはNotionで以下のように管理しています**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340121/ac0b8e09-94eb-b8f2-a7e5-a065b20bd5c3.png)


## ICEスコアリングミーティング
ICEそれぞれの定義付けができたら、スコアリングミーティングを実施します。
弊社では、
 - PdM
 - テックリード
 - ビジネスサイドメンバー
の3名は最低参加するようにしています。

理想の機能についてはクオーターに1度優先順位付けミーティングを行い、kaizenタスクについては、月に1度ミーティングをしています。

## 結論
ICEスコアリングはすごくシンプルにタスクの優先順位付けをすることができると思います。少人数でスピード感を持って開発を進めたいチームにはおすすめしたいと思います。

デメリットは個人的には2つあります。
1つ目は、ビジネスサイドに意見が優先されてしまうということです。ImpactやEaseは、ビジネスサイドの状況にかなり左右されてしまうため、開発チームとして必要なことが後回しにされがちということがあります。PdMがうまくバランスをとって、開発チームとして必要なタスクをビジネスサイドに共有していく必要があります。

2つ目は、スコアリングがかなり主観的ということです。ここもPdMのバランス感覚が問われるところですね。

今後チーム編成が変わるにつれて、必要な手法は変わってくるとは思うのですがフェーズに合わせた手法を用いて優先順位付けをおこなっていきたいですね〜

## 参考文献
https://productfolio.com/ice-scoring/
IBM Cloud: VPC環境の latency を測ってみた

# はじめに
IBM Cloud大阪リージョンからのlatencyを計測しました。

# 計測環境
- jp-osa1①: 10.1.0.7
- jp-osa1②: 10.1.0.9
- jp-osa2: 10.2.1.6
- jp-tok1: 10.244.1.4

# 計測結果
### 同一AZ内(jp-osa1内)の通信
```
--- 10.1.0.9 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19457ms
rtt min/avg/max/mdev = 0.299/0.399/0.621/0.066 ms
```

### AZ間 (jp-osa1とjp-osa2間)の通信
```
--- 10.2.1.6 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19034ms
rtt min/avg/max/mdev = 1.617/1.739/1.893/0.067 ms
```

### Region間 (jp-osa1とjp-tok1間)の通信
```
~~osa1-tok1~~
--- 10.244.1.4 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19025ms
rtt min/avg/max/mdev = 8.979/9.062/9.150/0.049 ms
```

# 参考
[IBM Cloud: VPC環境でのZone間/Region間におけるjumbo frame通信の確認](https://qiita.com/testnin2/items/b8d703f0d45ceeff5aca)
Xcode14を使用してiOS17デバイスをデバッグする方法

## Macで「ターミナル」を開く
以下のコマンドを実行する

```bash:ターミナル
defaults write com.apple.dt.Xcode DVTEnableCoreDevice enabled
```
:::note info
Xcode14.3.1を再起動すると、iOS17デバイスがXcodeに表示され、通常どおりアプリを実行してデバッグ可能となります。
:::

:::note warn
Xcode14.3.1で動作させるには**Xcode15をインストールする必要があります。**
:::

## Xcode14
以下のようにiOS17デバイスが表示されます。
![Screenshot 2023-07-12 at 11.19.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82835/615add86-8e9e-8ceb-d1a1-8111f07b4bc2.png)


## もとに戻す
以下のコマンドを実行する
（Xcode14でiOS17デバイスを実行できなくなります）
```bash:ターミナル
defaults write com.apple.dt.Xcode DVTEnableCoreDevice disable
```

## 参考
https://stackoverflow.com/a/76620301/18349314
画面フローをモーダル化して表示する

[スクリーンフローに戻る](https://qiita.com/Keiji_otsubo/items/228717557f9a72b92a36)

----------------

いつも頃からか、画面フローが全画面表示になってしまったように思います。モーダル化できないか調べてみたらありますね。


画面フローは、ビジネス プロセスを自動化し、ガイド付きの方法でデータを収集できる強力なツールです。 これは、画面要素をサポートする唯一の フロー タイプであり、データの表示または収集に使用できます。画面フローを起動するにはさまざまな方法があります。たとえば、Lightning ページに埋め込んだり、アクションから呼び出したり、ハイパーリンクから呼び出したりすることができます。アクションを使用することは、画面フローを起動する一般的な方法です。アクションを使用して画面フローを起動すると、システムはフローをモーダルで開くため、ユーザーのエクスペリエンスが向上します。

Screen flow is a powerful tool that allows you to automate business processes and gather data in a guided way. It is the only flow type that supports the screen element, which can be used to display or collect data. There are various ways to launch a screen flow. For instance, it can be embedded on a Lightning page, called from an action, or even from a hyperlink. Using an action is a common way to launch a screen flow. When you launch a screen flow using an action, system opens the flow in modal, which makes it a better experience for the users.

+ [Launch Screen Flow in Modal for a Record in a Related List](https://salesforcetime.com/2023/02/16/launch-screen-flow-in-modal-for-a-record-in-a-related-list/)
【NVR510】SSHが繋がらない問題

# フィルターでsshをpassしているはずなのに通らない

## 前提知識
フィルターの適用パターンは以下
- フィルターは設定順に適用される
- フィルターが何も適用されていない場合はすべてのパケットが通過させる
- フィルターを1行でも適用されている場合、フィルターの設定順で照らしあわせて、合致したらそのフィルターを適用する
- 全てのフィルターに合致しないパケットは破棄されます。※重要

## 原因
ip filter コマンドの内容が間違っていた。
文法は以下
ip filter (pass, reject, etc...) (src address) (dst address) (protcol) (src port) (dst port)

## 解決方法
```config
× ip filter pass-log * * tcp 22 // 送信元ポートが22番のときpassさせることになるが、接続元のsshの使用ポートはエフェメラルポートを使用する。
○ ip filter pass-log * * tcp * 22 // dstに22を適用しなければならない
```