OmniAICreator/Qiita-1.07M huggingface dataset:
TampermonkeyでX(旧Twitter)の画像擬態系スパムURLを消す

# はじめに
10月くらい？にTwitter/Xの仕様変更により、URLを含むポスト(ツイート)のURLのテキストが表示されなくなり、代わりにサムネイル画像にリンクが貼られる形になりました。これにより画像に見せかけた誘導リンクを仕掛ける輩が出没しております。
本当の画像ポストとは違って左下にURLが記載されているので注意していれば目視で回避できますが、とうとう本日踏んでしまったため抜本的な対策を取ることと相成りました。  

リンク自体は短縮URLで作られてるためかミュートワードに追加しても消えなかったので、Tampermonkeyを使って非表示にします。

↓こういうスパムリンク付きのポスト(ツイート)を表示させないようにします。
![spamimic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570689/07d5d579-7774-bfed-a765-94965843560a.png)

# 実際のスクリプト
Tampermonkeyに書いたスクリプトです。
```JavaScript
// ==UserScript==
// @name Remove Image-Mimicking Spam URL Replies
// @namespace http://tampermonkey.net/
// @version 0.1
// @description This script eliminates replies containing spam URLs that mimic images on Twitter/X.
// @author MeowMauPaws
// @match https://twitter.com/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==

(function () {
    'use strict';
    let currentURL = "";
    let isRewritedHeader = false;
    // URLブロックリスト
    const blockedURLs = [
        'fanlink.to',
        'n9oi1.app.link',
        // 他のスパムURLあれば追加
    ];

    function containsBlockedURL(tweet) {
        const links = tweet.querySelectorAll('a');
        return Array.from(links).some(link => {
            const ariaLabel = link.getAttribute('aria-label');
            return blockedURLs.some(url => ariaLabel && ariaLabel.includes(url));
        });
    }

    const observer = new MutationObserver(() => {
        if (currentURL == "") {
            currentURL = location.href;
        } else if (currentURL != location.href) {
            currentURL = location.href;
            isRewritedHeader = false;
        }

        document.querySelectorAll('[data-testid="cellInnerDiv"]').forEach(tweet => {
            if (containsBlockedURL(tweet)) {
                tweet.style.display = 'none';
            }
        });
    });

    observer.observe(document.body, { childList: true, subtree: true });
})();
```

スパムリンクは短縮URLで書かれていることがほとんどなので、aria-labelを見て非表示対象かどうか判断するようにしています。

# 補足：Tampermonkeyの導入方法(簡易説明)
初めてTampermonkey使うよ、という人向けに一応簡易手順書いておきます。
多分、以下の手順で行けると思います。(ダメだったらすみませんが、その時は各自ちゃんとした情報を調べてもろて…)

1. Tampermonkeyをブラウザ拡張機能で追加してください
    - Chrome用Tampermonkey
https://chromewebstore.google.com/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=ja

    - Firefox用Tampermonkey
https://addons.mozilla.org/ja/firefox/addon/tampermonkey/

1. ブラウザ上部の拡張機能が表示されているところからTampermonkeyをクリック -> ダッシュボード
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570689/bd883dfb-5488-a43d-e2b3-a90f9a407d5d.png)

1. +アイコンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570689/7787768e-9755-8774-63e7-7c0d48a97f8e.png)

1. ↑の方で書いた"実際のスクリプト"を丸ごとコピペして、保存(Ctrl + S)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570689/c4411d6b-f552-2782-91ef-3e712a646ff6.png)

# 終わりに
もう誰か対策してるかとも思いましたが、軽く調べた限りではこういう対策をしている例は見つからなかったため作りました。
課題としてはfanlink.toを含むURLは必ずしもスパムというわけではないのですが、今回のスクリプトはその辺りは無差別に非表示にします。個人的には問題ないのでこのまま使っていますが、もし使う人いましたらその点はご了承ください。
もっとシンプルだったり効果的な対策ご存じの方いらっしゃいましたら教えてもらえるとありがたいです。
追加すべきスパムURLの情報とかも提供いただけるととても助かります
GitHub CLIでプライベートリポジトリのプルリクエストコメントを効率的に抽出する

## はじめに

GitHubは、開発者にとって不可欠なツールであり、その多機能性は日々の作業を大いに助けてくれます。特にGitHub CLIは、コマンドラインを通じてGitHubの操作を行う強力なツールです。今回は、GitHub CLIを使用してプライベートリポジトリからプルリクエストのコメントを抽出する方法を紹介します。

### **GitHub CLIのセットアップ**

GitHub CLIを使用する前に、適切な認証が必要です。以下のコマンドでログインできます（今回は HTTPS で認証を通して、ブラウザで認証しています）

```bash
gh auth login
```

```
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Login with a web browser

! First copy your one-time code: 1234-5678
Press Enter to open github.com in your browser... 
既存のブラウザ セッションで開いています。
✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as developer
```

### **プルリクエストのコメントを抽出**

特定のプルリクエストのコメントを表示するには、以下のコマンドを使用します

```bash
gh pr view <PR_NUMBER> --comments
```

**`<PR_NUMBER>`**は対象のプルリクエスト番号に置き換えてください。

### **実際のコメント抽出例**

例として、プルリクエスト番号386のコメントを抽出した場合の出力は以下のようになります（企業名、プロジェクト名、個人名は架空のものに置き換えています）

```bash
gh pr view 386 --comments
```

```
オンラインストア ギフト履歴一覧 API 実装 #386
Merged • developer-a wants to merge 22 commits into main from feature/online-store-gift-list • about 1 day ago
+487 -247 • ✓ Checks passing
Reviewers: reviewer-a (Approved)
Assignees: developer-a

  ## チケットへのリンク

  • &#8203;``【oaicite:1】``&#8203;&#8203;``【oaicite:0】``&#8203;オンラインストア ギフト履歴一覧 API 実装
  https://www.example-link.com/online-store-api

  ## やったこと

  • テスト追加
  • リファクタリング

  ## やらないこと

  • この Pull Requestでやらないことは何か？

  ## できるようになること（利用者目線）

  • ギフト履歴が閲覧可能

  ## できなくなること（利用者目線）

  • 特になし

  ## 動作確認

  • 全てのテストにパスする
  • ローカルでギフト履歴が閲覧可能

  ## その他

  • レビュワーへの参考情報

reviewer-a commented (Contributor) • 1d

  @developer-a

  lintの問題があります。修正をお願いします。

developer-a (Collaborator) • 1d
1 👍

  @reviewer-a
  修正しました。ありがとうございます！

View the full review: https://github.com/example-company/online-store-api/pull/386#issuecomment-1234567890

reviewer-a (Contributor) • 1d

  │ @developer-a
  │ 修正ありがとうございます！

  lintの問題が解決しました。

View the full review: https://github.com/example-company/online-store-api/pull/386#issuecomment-1234567891

developer-a (Collaborator) • 1d
1 👍

  最新のコードを取り込み、lintエラーを修正しました！

View the full review: https://github.com/example-company/online-store-api/pull/386#issuecomment-1234567892

reviewer-a (Contributor) • 1d
1 👍

  │ 修正ありがとうございます！

  lintが改善され、レビューが容易になりました。

View the full review: https://github.com/example-company/online-store-api/pull/386#issuecomment-1234567893

reviewer-a approved (Contributor) • 1d • Newest comment

  👍

View this pull request on GitHub: https://github.com/example-company/online-store-api/pull/386
```

### **まとめ**

GitHub CLIは、GitHubの操作をコマンドラインから行う強力なツールです。特にプライベートリポジトリのプルリクエストのコメントを抽出する機能は、コードレビューやプロジェクトの進行状況の追跡に非常に便利です。この記事が、GitHub CLIの活用方法を理解する一助となれば幸いです
RDSの接続トラブルの原因を切り分ける手順

# はじめに

RDSにうまく接続できない時に考えられる原因と切り分け方について、AWSの方が[動画](https://www.youtube.com/watch?v=_Ox2lul0cI8)を出していたので内容をメモ。
MySQLを例にする。MySQLのポートは3306と仮定する。

## (現象1) MySQLコマンドの結果が帰ってこないとき
別ターミナルで以下のコマンドを打つ。
```sh
netstat -an | grep 3306
```

### 結果パターン1
```sh
(略) SYN_SENT
```
上記のような出力の場合、リクエストを送ったがレスポンスが帰ってきていないことがわかる。その場合は、以下に問題がないか見直す。
1. セキュリティグループの設定
2. 接続元のFWの設定

## (現象2) Access Denied
→IDとパスワードが正しいことを確認する。

## (現象3) Unkown MySQL Server Host
→DNSの名前解決ができていない状態。この場合は、以下を確認する。
1. ホスト名が正しいか
2. 利用しているDNSが名前解決できる状態か(nslookup,dig,ncなどのコマンドを利用する)

## (現象4) 上記がすべて問題ないにも関わらず接続に失敗するとき
以下の可能性を確認する。
1. DBインスタンスのステータスが正常であること
2. 同時接続数の上限に達していないこと
3. DBのリソースが飽和していないこと

# 参考
- https://www.youtube.com/watch?v=_Ox2lul0cI8
垢割れポッターと個人のアカウント（個人アカウントをビジネスシーンで利用する闇への防衛術）


## TL;DR

- 社用のGoogle Meetでの打ち合わせに間違えて個人アカウントで入ってしまった！
- 個人のGoogleアカウントをビジネスでも利用せざるを得ない場合ってあるよね！
  - ChatGPT Plusに入ってるとか。
- 個人アカウントをビジネスシーンで利用する闇への防衛術。
- みんな（特に若手社員）垢割れに気を付けよう！


## 社用のGoogle Meetでの打ち合わせに間違えて個人アカウントで入ってしまった！

社用の打ち合わせがGoogle Meetでありました。
普段はビジネスアカウントに切り替えてから会議URLをクリックするように気を付けていたのですが、その日はバタバタしており、焦って個人アカウントのままで参加してしまいました。

打合せ終了間際、同席した社長から
**社長「このXXXXさん（個人アカウント名）がoishi-dさんで合ってましたっけ？」
自分「はい…」**

となり、とても恥ずかしいことになってしまいました。
この打ち合わせに社長以外に社内の人間がいたら退職となっていたので、ヒヤリハットでした。
※垢割れ即退社を心がけているので。




## 個人のGoogleアカウントをビジネスでも利用しちゃう理由

色々あると思います。

- 複数アカウントの管理が手間
- アカウント切替が手間
- 個人アカウントと関連付けしているサービス利用
  - **特に有料サービス（ChatGPT Plusとか！）**


## 個人アカウントをビジネスシーンで利用する闇への防衛術（Google Chrome・アカウントの場合）

ある程度不可避な感じはしつつも、垢割れの可能性を下げる防衛術を記載。


### シークレットウィンドウを使う

リンクを`右クリック-シークレットウィンドウで開く`によりシークレットウィンドウで開く方法。
Googleアカウントと紐づけずに利用できます。

よくあるケースとしては、Google スプレッドシートなどを社内共有している場合、編集履歴にアカウントの情報が残ったり、利用中のユーザーが表示されたりすることを防ぐことができます。


### プロファイルを追加して切替しやすくする
`Chrome右上のアイコンクリック-他のプロファイル-追加`から一度ビジネスアカウントなどを追加すると、Chrome起動時に利用するアカウントを確認してくれます。
うっかりが多少は減ると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459468/9508bbbe-d373-2cf2-8f46-cc763cdbeddf.png)



### アイコンを変更する
デフォルトのアイコンはファーストネームの頭文字になっているので、そこからアカウント名を推測されないように変更します。

`Google アカウントのホーム`から変更可能です。
`Chrome右上のアイコンをクリック-鉛筆アイコン-アバターを選択`ではChromeのプロファイルのアイコンが変更されるのみで、アカウントそのもののアイコンは変更されないので注意が必要です。

※右上見ると、ChromeのアバターとGoogleアカウントのアイコンが違います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459468/9ad451b4-7eca-0c3c-768e-3854b8ad832f.png)



## みんな垢割れに気を付けよう！

みんなも垢割れには気をつけよう！
垢割れすると、SNSで会社や上司の陰口をたたいているのがばれたり、公にしたくない趣味がばれたり、 ~~中学生の時のブログ（削除したくてもブログのID/PASSもパスワード再発行ためのメールサービスのID/PASSもわからない）とかがばれて、~~ 窮地に追い込まれる可能性があります。

特に若手社員は以下みたいな内容を自己紹介として記載するケースを散見するので、気を引き締めましょう！

**新入社員のXXXです！
趣味はゲームです！
ゲームのアカウント（Steam/MS/PSNとか）のアカウントはXXXXXです！**

~~まぁマッハでアカウント名で検索・特定しますよね…~~
pyenvをアップデートする

pyenvを更新しないと最新のPythonが使用できません。
サクッとpyenvをアップデートする方法を記述します。
pyenvにはアップデートコマンドがないため、プラグインである[**pyenv-update**](https://github.com/pyenv/pyenv-update "pyenv-update")を使用します。

### pyenv-updateをインストールする

```sh
$ git clone https://github.com/pyenv/pyenv-update.git $(pyenv root)/plugins/pyenv-update
```

### pyenvをアップデートする

```sh
$ pyenv update
```

### ※ Homebrew上のpyenvをアップデートする

Homebrewをupdateする

```sh
$ brew update
```

pyenvをアップデートする

```sh
$ brew upgrade pyenv
```
Vue3 + Element Plus 階層が深いデータのバリデーションを実装する方法

# はじめに
フォームで扱うデータが下記のような構造の場合に、`company`の中にある`name`に対して、`Element Plus`でバリデーションをかける方法について書いています。
```
const formData = {
    name: '田中太郎'
    company: {
        name: '株式会社Foo'
    }
}
```

`Element Plus`での基本的なバリデーションの実装方法を知っている方を対象としています。

# 前提
* Node18.12.1
* Vue3.3.8
* Element Plus2.4.2
* npm8.19.2
* Composition APIの`<script setup>`を使用

# 方法
以下のコードが例で、ユーザーとユーザーの会社の情報を入力するようなフォームを想定しています。
```vue
<template>
  <el-form
    ref="formRef"
    :model="formData"
    :rules="rules"
    labelPosition="top"
    class="demo-form-inline"
  >
    <el-form-item label="氏名" prop="name">
      <el-input v-model="formData.name" />
    </el-form-item>
    <!-- 下記のpropのようにドットで繋いで設定 -->
    <el-form-item label="会社名" prop="company.name">
      <el-input v-model="formData.company.name" />
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm(formRef)" style="width: 100%; margin-top: 10px;">
        登録
      </el-button>
    </el-form-item>
  </el-form>
</template>

<script setup>
import { ref } from 'vue'
const formRef = ref({})
const formData = ref({
  company: {}
})
const rules = ref({
  name: [
    {
      required: true,
      message: '必須項目です。'
    }
  ],
  // companyプロパティのオブジェクト内で会社名のバリデーションを設定
  company: {
    name: [
      {
        required: true,
        message: '必須項目です。'
      }
    ]
  }
})

const submitForm = async (formEl) => {
  await formEl.validate()
}
</script>

<style>
.demo-form-inline .el-input {
  --el-input-width: 250px;
}
</style>

```
設定のためにやっていることは以下の2つです。
1. `el-form-item`の`prop`を`company.name`のようにドット記法で設定する
1. `rules`の中で`company`にオブジェクトを定義し、さらにその中で`name`のバリデーションを定義する

以上です。
PremiereProで読み込ませた動画素材が何故か暗くなった時の対応方法

もともとの素材は画面左のような明るさになるのですが、タイムラインに突っ込んだ時に何故か右の赤枠内みたいに明度が勝手に下がるような事象を確認しました。
![021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/60e929e2-4a45-3e8c-d259-60d8baeb5d52.png)
対応方法としては、シーケンスタブのシーケンス設定を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/aaf88e29-76fc-74e7-3a6f-8a6a59b1a880.png)
カラーのRec.2100HLGとなっていることを確認します。これが原因っぽいです？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/338cf9c4-c9b1-cd08-6d2f-0afa086e27c4.png)
これをRec.709に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/5ba746e4-4b4b-0971-a9d5-f54cd5038f4e.png)
こんな警告が出るかもですが、いったん静観
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/1bb73b46-f88b-58ac-0ca2-1ee64f7d951b.png)
色がもとに戻りましたとさ。ちゃんちゃん。
![022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/5896a08f-6490-5968-6161-4b58474f1172.png)

この違いを凄くわかりやすく解説している方がいらっしゃったので、併せておいておきます。


https://note.com/seiya_21/n/nb9d42ee741d4
Next.jsでローカルではビルド成功するのに、Vercelで"Type error: Cannot find module"が発生

# tl;dr
- Next.jsのアプリケーションをVercel上に自動デプロイする際に、ローカルでの`npm run build`は成功するのに、Vercel上でのビルドにて、コンポーネントを`import`する箇所で以下のビルドエラーが発生
```
Type error: Cannot find module '@/components/{コンポーネント}' or its corresponding type declarations.
```
- 以下が原因の可能性が高い。詳細は後述
  1. importパスの大文字小文字が誤っている
  2. 過去にファイル名を修正したキャッシュが残っている

# 対処方法
## 1. importパスの大文字小文字が誤っている
### 概要
- Vercel公式ドキュメントでも案内されているケース[^1]
- Vercelのファイルシステムは大文字小文字を区別する
- ローカル環境で大文字小文字を区別しないファイルシステムや設定が使われている場合に、パスに誤りがあってもビルドを通してしまう

### 対応
- エラー発生箇所のimport のパスを見直す
- ローカルでも以下コマンドで大文字小文字を区別するよう設定し、ビルドしなおす
    ```
    git config core.ignorecase false
    ```

## 2.  過去にファイル名を修正したキャッシュが残っている

### 概要
- ファイル名を修正した際にキャッシュが残っており、ローカルでのみビルドが通る
- 筆者はこちらに該当し、解決に時間がかかりました[^2]

### 対応
- gitでキャッシュクリアし、差分をコミット、プッシュする
  - `git add --all`を実行した時点でエラーが発生していたファイルの差分が出ていればこちらが該当

    ```
    git rm -r --cached .
    git add --all .
    git commit -a -m "Versioning untracked files"
    git push
    ```


# 参考

[^1]: [How do I resolve a 'module not found' error?](https://vercel.com/guides/how-do-i-resolve-a-module-not-found-error)

[^2]: [Vercel Cannot find module or its corresponding type declarations during "npm run build" [duplicate]](https://stackoverflow.com/questions/76085670/vercel-cannot-find-module-or-its-corresponding-type-declarations-during-npm-run)
実数をフォーマット指定して出力】複数の実数を出力 (paizaランク C 相当)

今日はこの問題。
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__format_real_number_boss

以前、f-stringを使うといいですよ、と教えて頂いたので、自分なりに書き方を理解して応用して書いてみた。

```py
Q = int(input())

for i in range(1,Q+1):
    Arr = input().split()
    N = float(Arr[0])
    print(f"{N:.{i}f}")
```

そしたら見事に正解しました。
あれ、、、この書き方すごい直感的で書きやすい。。。
教えてくれた@shiracamus(しらかみゅ)さんありがとうございます。。。

(追記）
あのあと、テストケースを適用したらダメダメでした。
結果的にArr[1]を使わずiを使っちゃだめでした。
出力がすごいことになってしまってました。。。
正解は下

 ```py
Q = int(input())

for i in range(1,Q+1):
    Arr = input().split()
    N = float(Arr[0])
    M = int(Arr[1])
    print(f"{N:.{M}f}")

 ```
ちなみに、カウント変数を使わない場合`i`を`_`にしてもよいそうです
たしかに使わないならこれのほうが変数が増えて混乱しなさそうです
 
 ```py
Q = int(input())

for _ in range(1,Q+1):
    Arr = input().split()
    N = float(Arr[0])
    M = int(Arr[1])
    print(f"{N:.{M}f}")

 ```
API GatewayのCross-origin resource sharing (CORS)とは

# Cross-origin resource sharing (CORS)とは
MDNから抜粋ですが

> Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own from which a browser should permit loading resources. CORS also relies on a mechanism by which browsers make a "preflight" request to the server hosting the cross-origin resource, in order to check that the server will permit the actual request. In that preflight, the browser sends headers that indicate the HTTP method and headers that will be used in the actual request.

概要だけ訳すと
・オリジン：ドメイン、スキーマ、ポート
・クロスオリジン：自サーバーと違う「ドメイン、スキーマ、ポート」
・サーバーが違うオリジンからのリクエストのHTTPヘッダーを見て、「あなたはこのサーバーのリソースをもらっていいか」を判断する仕組み


# API GatewayのCross-origin resource sharing (CORS)とは
API Gatewayで構築されたREST APIはCORSの機能を持っており、異なる「ドメイン、スキーマ、ポート」からのリクエストを処理するかの判断したり、

AWSから抜粋ですが
> 別のドメイン (例: example.com から amazondomains.com へ)
別のサブドメイン (例: example.com から petstore.example.com へ)
別のポート (例: example.com から example.com:10777 へ)
別のプロトコル (例: https://example.com から http://example.com へ)

さらに、メソッドで判断するのも可能
>GET、HEAD、および POST のリクエストのみを許可
POST メソッドリクエストの場合、Origin ヘッダーを含める必要がある






# 参考サイト
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-cors.html
IFS上のオブジェクト保管(SAV)時の保管先(DEV) qsys.lib

## はじめに

統合ファイルシステム（以下、IFS）上のディレクトリやファイルを保管する際に使用するコマンド`SAV`
そのパラメーターの一つとして当然ですが、オブジェクトの保管先を指定します。

私は日常的にSAVFを保管先に指定しています。

もしライブラリーを保管するコマンド`SAVLIB`であれば（画像１）のように、ライブラリーと保管ファイル(SAVF)を指定します。

（画像１）
![savDevQsys_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962887/3d72fd5b-0d19-425c-b12d-01769558b9db.png)


一方、`SAV`では（画像２）のように、フルパスが求められます。

（画像２）
![savDevQsys_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962887/bbe8483e-a506-c062-f40b-c326d1707fa7.png)

そのため、`SAVLIB`コマンド等で保管を行ったことがある方も、初めて`SAV`コマンドを使用する際はどのように指定してよいか戸惑うようにも思います。

この記事では、IFS上のオブジェクトをSAVFへ保管する際の保管先(DEV)の指定方法についてご紹介します。


## DEVパラメーターの値

パラメーターは以下のように指定します。
`/qsys.lib/ライブラリー名.lib/SAVF名.file`

IFSでは「/(ルート)」の配下の一つとして、「/QSYS.LIB」が統合されています。
その「/QSYS.LIB」内にライブラリー／オブジェクトが配置されているため、`/qsys.lib/ライブラリー名.lib/SAVF名.file`のようにパラメーターを指定する必要があります。


## おわりに

IFSについては[IBMi駆け出し日記：iのファイルシステム(IFS)を理解する](https://qiita.com/koga39chan/items/66fbd018dfcc8fef1bc8)で分かり易くご紹介されています。

ご参考になれば幸いです。最後までお読み頂きありがとうございます。
STRSQLのOFFSETのその後その後

最近会社のIBMiがV7R5になり、`STRSQL`を使用していると「おやっ？」ってなりました。
V7R2 時代に、以下の２つの記事を投稿し「STRSQLでOFFSETは使えないよー」と言っていたのですが、もう過去のことらしいです。
みなさんも最近は、ACS（ [IBM i Access Client Solutions の概要](https://www.ibm.com/docs/ja/i/7.5?topic=solutions-overview-i-access-client) ）の SQL 機能を使うことが多いと思いますので、「 STRSQL 使わねぇよー」って言うかもしれませんが、我々オジサンは使うのですよ。（5250 内で完結するって意味で楽なので :-P）

- [DB2 for iでもLIMIT OFFSET](https://qiita.com/ushiday/items/9cda3e6037b7b857f68a)
- [STRSQLのOFFSETのその後](https://qiita.com/ushiday/items/13b6eb2846d2a4ceacda)

改めて `STRSQL` をやってみると「すんなりいくじゃない！」
![2023-11-19_135827.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/6786cd33-1b67-8973-1bdd-1d4a724df834.png)
![2023-11-19_135923.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/aa0a59b4-2d3a-1bf2-940c-ab441ceafea9.png)

以前は、”IBM developerWorks”で、やりとりしたコメントも存在したのですけど、既に廃止されて全て迷子ですね（笑）、いつもの事ですが...。
Knowledge Center側も以前書かれていた文面も既にサイレント修正されているので（ [V7R2-en - offset-clause](https://www.ibm.com/docs/en/i/7.2?topic=subselect-offset-clause) ）、どこかのTRで、V7R2もいつの間にか使える様になったのかな？
```txt
## 以下文面は既に存在しない ##
Notes

Allowed use of OFFSET: The offset-clause is only allowed as part of the 
outer fullselect of a DECLARE CURSOR statement or a prepared 
select-statement. It is not supported in interactive SQL.
```

こっちが [V7R5-ja - offset-clause](https://www.ibm.com/docs/ja/i/7.5?topic=subselect-offset-clause) 最新のドキュメントです。
これからは、`STRSQL` でも `LIMIT,OFFSET` をドンドン使って下さい！
【学習メモ】SQS拡張クライアントライブラリとは

# SQS拡張クライアントライブラリとは
・通常のSQSキューのデータサーズ制限は**256KB**だが、運用上それを超えたい場合の対応法である

・大量のAmazon SQSメッセージを管理するには、Amazon S3とJava 用SQS拡張クライアントライブラリを使用することで、**2GB**までのサイズのメッセージを保存および処理ができるようになる
　→AWS Java SDKが必要（プログラミングを作る必要がある）
 
 ・イメージとして、メッセージの保管場所を本来の狭いパイプ（SQSキュー）から広い貯水槽（S3）に変える
 　→常にS3に保存するか、サイズが256KBを超える場合のみ保存するかを指定できる
  
# 参考サイト
https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-s3-messages.html

https://zenn.dev/hi_ka_ru/articles/a516af8bfc4457
ABC329回答メモ

# 0.はじめに
　今回は順調に30分ほどでDまでクリア。
　E以降を解いて一つ上のステージに行けるかと思いましたが
　やはり壁は厚く、EもFもACにたどり着けませんでした。
　それでも、レートは+23といい感じに上がりました。


# 1.A - Spread
　文字列をリストとしてインプットし
  print(*リスト名)で表示するだけの簡単なお仕事でした。

　https://atcoder.jp/contests/abc329/submissions/47674240


# 2.B - Next
　いろんな解き方がありそうですが、ぱっと思いついた以下の方法で。
　【考え方】
 　　・リストAを読み込み最大値igを取得
   　・リストAからig以外を抽出したリストl2を作る
 　　・リストl2の最大値を表示して終了
　
　https://atcoder.jp/contests/abc329/submissions/47679719


# 3.C - Count xxx
　問題文を一読し、重複を許さない＝アルファベット毎の
　最大連続数の合計が答えになる。
　と、分かったのでその後はすんなりいけました。
　【考え方】
 　　・辞書Dを用意する
   　　（キー：アルファベット、値：アルファベットの最大連続数）
 　　・文字列Sを先頭から見ていく
   　　前の文字と同じとき：連続数を加算
     　前の文字と違うとき：
      　　・辞書Dに前の文字と連続文字数を登録
        　　既に登録されている場合は、連続文字数を
          　元の数字と現在の数値の大きい方で更新
        　・現在の文字を前の文字にセットし、連続数に１をセット
　　　・最後に辞書Dの値を集約して表示して終了

   　ポイントとしては、文字列を先頭から見ていくfor文が
     終わった後の処理も忘れずに。というところくらいです。

　https://atcoder.jp/contests/abc329/submissions/47693950


# 4.D - Election Quick Report
　TLEを何とかする問題なんだなーとおもいつつとりかかる。
　【実装】
 　　・以下の変数を準備
   　　候補者毎の得票数リスト：S、
   　　現在得票数トップの人　：now
     　現在トップの得票数　　：nowS
 　　・リストを先頭から見ていく
   　　・候補者ごとの得票数リストに加算
     　・加算した得票者の得票者数がnowSと同じになった場合
      　→加算した得票者の番号がnowより小さいとき
       　→nowを加算した得票者の番号に置換
     　・加算した得票者の得票者数がnowS以上になった場合
       　→nowを加算した得票者の番号に置換
         →nowSを加算した得票者の得票数に置換
     　・nowを出力

 今改めて整理してみると、nowSは
　要らなかったな・・・と思いました。
 
　https://atcoder.jp/contests/abc329/submissions/47700563


# 5.E - Stamp
　コンテスト時はしばらく考えてもTLEを解消する方法が
　思いつかず、Fに取り掛かりました。
　コンテスト後、解説を見て、スタンプを押したことが分かったら
　その周りをさらに調べていくという順番で解いていくことが分かり
　参考にしたところすっきり解けました。

　https://atcoder.jp/contests/abc329/submissions/47742870


# 6.F - Colored Ball
　Eから逃れてたどり着いたところ、なんとなく行けそうな気が
　したのですが、TLEが消せませんでした。
　TLEが6個なので、何とかなるかと思い
　あの手この手を試しましたがコンテスト時間は無情にも過ぎました。
　解説を見たら、ボールの種類を統合する時
　単純にA→Bへ統合ではなく、多い方から少ない方に合わせてから
　合わせた結果でBを置き換える事が書いてあり、その通りにするとあっさりAC。
　setを使うのに慣れていないので、高速化のコツとかも
　徐々に学ばないといけないなと思いました。

　https://atcoder.jp/contests/abc329/submissions/47741846


以上
Adobe PremiereProでShorts動画を作成する際のナレッジメモ02

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

先日PremiereProでの動画編集のナレッジをざっとメモっていました。

https://qiita.com/ohtsuka-shota/items/91c230e3f0acde67945d

今回はこの続きを書いていこうと思います。

# 操作メモ
## 動画上に文字を入力したり配色したりする方法
projectを開いて、Tのマークの「横書き文字ツール」を押下してアクティブにします。
![014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/4b0674ea-d62d-f319-01aa-b37937449508.png)
この状態で動画の文字を挿入したい場所をクリックして文字を入力するとデフォルトでは白文字で文字が入力できます。
右のエッセンシャルグラフィックスで文字の大きさや位置、色、境界線、背景色などを設定することが出来ます。
![015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a1b232ac-c233-0a0a-0148-a54332828576.png)

## 文章の一部の行間を空けたり、背景に楕円形を挿入したりする方法

入力した文章で行間を変えたいものを選択して、ベースラインシフトの数値を変更することでその部分だけの行間を変更することが可能みたいです。
![016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/3db23a46-be8b-960a-5659-e227c0509bbd.png)
静止画だとわかりにくいですが、数値を変更したことで一部の文章の行間が変わったこ都がわかります。
今回は0→42にしてみました。
![017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/95a8e7b3-17f8-28ac-3c70-4f15e38d388d.png)
この文章の背景に楕円形を挿入してみたいと思います。
タイムラインの左側にある□のマークを左クリック長押しすると、色々と項目が出てくるので、楕円ツールを押下します。
※各マークの右下に小さい三角形の模様があると、同様に長押しすると隠れている機能が同じように選択できるようになるみたいです。
![018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/8ea46d71-d190-8160-1b8b-3030a1a9e34d.png)
このまま、動画上の追加する場所を決めてグイっとしてあげるとその場所に楕円形が表示されます。
このままだと文字が隠れてしまうので、タイムラインのレイヤーを調整して文字が表に出るようにします。
![019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/b8526212-c31d-f64a-e490-3b2c471303ab.png)
今回の場合V6にあった文字とV7にあった楕円形のグラフィックを交換してあげることで文字が表に出るようになりました。
最も他の方法のほうが一般的なのかもしれませんけれどもね・・・💦
![020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/da6019ff-c9b4-fec1-e1f9-9574fa6b94a8.png)
AtCoder初心者 DailyTrainingメモ 2023/11/19

# ABC229 C-問題
https://atcoder.jp/contests/abc229/tasks/abc229_c

![229C.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547298/6f82f510-d773-e14e-e5cb-0c8ca0168d0e.png)

**ポイント**
Wグラムしかかけれないので、美味しいチーズから順番に使っていく（貪欲法）

````Python:229C.py
# 入力例
3 5
3 1
4 2
2 3

N,W = map(int,input().split())

リストに格納する
Cheeses = []
for _ in range(N):
    A,B = map(int,input().split())
    Cheeses.append((A, B))

# Cheeses:[(3, 1), (4, 2), (2, 3)]

# 降順にソートして美味しい順にする
Cheeses.sort(reverse = True)

# Cheeses:[(4, 2), (3, 1), (2, 3)]

ans = 0

# 美味しいチーズから使っていく
for A,B in Cheeses:
    if W >= B:  # Bグラム引いても残るので
        ans += A * B
        W -= B  # WからBグラム引く
    else:
        ans += A * W    # 残りWグラム分のチーズをかける
        break

print(ans)
````
Bootstrap5のaタグの下線の消し方について

Bootstrapをcdnなどで読み込んだ場合、aタグは下記のように下線が付きます。
![atag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3607729/78bb0ee0-b279-f310-809b-6e509018fd69.png)
削除する方法は、aタグのに下記のclass名を指定する必要があります。
~~~
<a href="" class="text-decoration-none">test</a>
~~~
【学習メモ】AWS ElastiCache for Redisの認証方法

# IAM を使用した認証
・ElastiCache for Redis バージョン 7.0 以上のみ限定
・AWS IAM アイデンティティを使用して ElastiCache for Redis への接続を認証
・個々の ElastiCache レプリケーショングループと ElastiCache ユーザーごとに、きめ細かいアクセス制御を設定し、「最小特権の権限の原則」に従う
・有効期間の長い ElastiCache ユーザーパスワードの代わりに、有効期間が短い**IAM 認証トークン**を Redis AUTH または HELLO コマンドで提供
　→IAM 認証トークンは**15 分間**有効
 　→IAM 認証された接続は、**12 時間**後に自動的に切断

# Redis AUTH コマンド
・Redis はクライアントにコマンドの実行を許可する前に、「Redis 認証トークン」か「パスワード」を求めることで、データのセキュリティを保護
・（個人の理解として）AWSのElastiCache for RedisはRedis AUTHの機能を踏襲して、レプリケーショングループまたはクラスターを作成するときに、正しいトークンを指定したパラメータを含めることで、セキュリティを向上させるのができる。
・ユースケース：部署別とかでElastiCacheのアクセスを限定したい場合、アクセス時にユーザーにパスワード入力を求める

# 参考サイト
https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/auth-iam.html

https://mogile.web.fc2.com/redis/commands/auth/index.html

https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/auth.html
要件定義マスター　寿司打5000点 達成

■8/31までに寿司打5000達成　毎日10分　→３か月遅延
7/29
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/df56c9f2-707b-39c5-6417-5dbc4ba224c9.png)
8/2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/333961f2-94dd-b86a-4d9a-ee36145c2cba.png)
8/3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/6c9f3943-d33b-5024-f9bf-56b897496ace.png)
8/4
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/2fc3c840-1e07-d752-2308-a0067618b0de.png)
8/5
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/ee42cc7d-bef4-621f-617b-f1ca3aab78b1.png)
8/6 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/6a0b3695-72e5-f809-de27-dfca14b7bace.png)
8/11
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/2015c20e-47ca-7432-7d09-62b1153d2a93.png)
8/12
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/c783e75a-be86-e2b3-a3c5-3cc792ecb122.png)
8/14
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/9f7f80f4-aa37-3e0b-c210-bc453209f078.png)
8/15
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/57e5de50-7b90-bd17-9685-fbd170360718.png)
8/16
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/dbf47d19-0a4b-dfdc-b404-e2adf1101cfc.png)
8/17
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/786e41ef-6f8e-92ff-5253-b5ae1a8691ab.png)
8/18
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/a8e75200-b576-5b53-6225-2b60a7a87dc8.png)
8/19
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/480e0c1a-7389-1f3b-6d15-a1bac1a3087b.png)
8/24
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/96d620a6-3105-8b55-cc91-bcd6e89db2a8.png)
8/26
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/84ea2182-b062-a322-20ce-a8fa772bff46.png)
8/30
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/83121c09-3404-3d59-88d6-9d2fd5c6d110.png)
9/8
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/54fc2098-2c2f-37a5-d4f3-743e684827e6.png)
9/17
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/ca54092e-3694-c0d5-e22c-1d21fd63a295.png)
9/20
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/54149fae-0faa-5a5b-d747-0de161584444.png)
10/8
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/d82b0333-78cf-2bd4-4205-ae1b865fce52.png)
11/5
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/bb8cb1a4-5b1a-bd02-27c5-324cbc6bc402.png)
11/19
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/5724d3b5-d700-2664-57ce-8022115f3401.png)
Wireshark , tr

<!--
2023/11/8
-->
[picoCTF][Forensics][Packets Primer]

## Writeup
* pcapファイルなので、とりあえずWiresharkで。
パケットの数も少ないので、`Tcp Follow Stream`を見た。
![screenshot 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/20e681c5-b539-119e-eb26-08e0bc6d8eb6.png)
![screenshot 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/1c64ce9d-5411-c73c-d5cc-0c2fc5f374b0.png)
<br>

* スペースが邪魔なので、`tr`コマンドで削除した。
![screenshot 8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/93ed525a-7bbd-1535-ac19-0afe964fb5f3.png)
<br>

* 以上です。
poppler-utils , pdftotext

<!--
2023/11/9
-->
[picoCTF][Forensics][Redaction gone wrong]
## Writeup
* とりあえず`File`コマンド。
PDFファイルのようです。
![screenshot 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/c3b42354-52f5-543c-5f41-69159d6353a7.png)
<br>

* 開いてみると、黒塗りされた書類のようです。
文字列を抽出したら、黒塗りの後ろの文字が分かる気がする。
`sudo apt install　-y poppler-utils`
`pdftotext`が使えるようになった。
<br>

* とりあえず実行してみた。
出力されたファイルを見てみる。
![screenshot 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/b08b935b-0dec-c7d9-52dc-7c7d7b429eb6.png)
<br>

* 以上です。
Python（Flask）によるAPIの開発の基礎

### 本記事の背景
Flaskでjsonを扱う時によく検索されるが、背景にあるAPI開発に関して網羅的な説明はあまり見かけないため、本記事はFlaskを使い、API開発の基礎に触れつつ、jsonを扱い、実際のAPIテストでよく使うPostmanを紹介しながら、API開発における一連な動きについて解説する

### Restful API開発とは

詳細は[AWS](https://aws.amazon.com/jp/what-is/restful-api/)に任せるとして、要は、HTTPと同じ、GET/POST/PUT/DELETEを使い、データのやり取りする。
メリットとして、上記以外は使わないので、実装しやすい。
デメリットとしては、上記以外で特殊なケースの場合、複数のAPIを叩くことになる場合がある

### バックエンド処理
上記のRestful APIのバックエンド側の実装としては、DBとの連携を想定した場合それぞれ以下に示す。

GET：DBからデータを取得する（Select処理）
POST：DBのデータを追加する（Insert処理）
PUT：DBのデータを更新する（Update処理）
DELETE：DBのデータを削除する(Delete処理）

### jsonデータによる媒介
上記のAPIとバックエンドの間には、jsonデータを生成することにより、色んなシステムがあっても、ほぼ同じメソッドを実装することでフロントエンドとバックエンドのやり取りができる。
また、ライブラリにはjsonを扱うための標準機能が用意されている。
例えば、jinja2/JavaScript/Python/Flaskはそれぞれjsonを扱える。
また、jsonは基本的に辞書型変数としてPythonで扱えるので、データの堅牢度も高い。
但し、jsonのデメリットは、入れ子構造の辞書型や大規模データを扱う場合は、動きとしては、遅いため、別途検討が必要

### POSTMANによるテスト
[POSTMAN](https://www.postman.com/)は、APIテスト、Scriptを組んでテスト自動化も可能なテストツールです。無償提供されている。

### Flask実装例
```py
from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/', methods=['GET','POST'])
def index():
    if (request.method == 'POST'):
        json = request.get_json()
        return jsonify({'you post' : json})
        
    else:
        return jsonify({"about":"hello world!" })

@app.route('/multi/<int:num>', methods=['GET'])
def get_multiply10(num):
    return jsonify({'result': num*10})

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')
```
### POSTMANによるGET結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576081/6a50d537-4f4f-38f9-ece0-350a99dc93cd.png)

### POSTMANによるPOST結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576081/43e8767c-98fe-cb50-9c63-60be9c1c5028.png)

### 別のAPIのGET結果
10の10倍の計算結果が得られた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576081/d4c05713-3d20-1eb9-fa6c-c48bf02d2131.png)

### バックエンドのデバッグログ
```terminal
127.0.0.1 - - [19/Nov/2023 12:50:19] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [19/Nov/2023 12:54:33] "POST / HTTP/1.1" 200 -
127.0.0.1 - - [19/Nov/2023 12:56:59] "GET /multi/10 HTTP/1.1" 200 -
```
ncnnでYoloV5 Segmentationを動かしてみる

## 概要

ncnnで、オブジェクト認識と領域分割を同時に行う、yolov5のsegmentationを動かしてみる。
![Screenshot from 2023-11-19 11-57-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73020/eb3584d2-4a35-55a5-850f-ac3bfea96151.png)



## 環境構築

構築手順に入る前に、まずPCに以下のバージョンのUbuntuをインストールした環境で、構築しました。

[M5UnitV2のクロスコンパイル環境を構築する手順](https://qiita.com/nnn112358/pbulic/9e15450265b689300216)

```
Ubuntu 22.04.3 LTS(x64)
OpenCV ver 0.4.4
ncnn ver 231027
```

## yolov5-seg-ncnnのダウンロード

GitHubからyolov5-seg-ncnnのコードをダウンロードします。

```
$ git clone https://github.com/FeiGeChuanShu/yolov5-seg-ncnn/
$ cd yolov5-seg-ncnn/demo/

```

## CMakeLists.txt ファイルの作成

cmakeでコンパイルするために、CMakeLists.txtを編集します。

```
gedit CMakeLists.txt
```

```CMakeLists.txt

SET(CMAKE_BUILD_TYPE "Release")

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

if(TARGET_COMPILER STREQUAL "arm")
    message(STATUS "TARGET_COMPILE STREQUAL arm")
    SET(CMAKE_CXX_COMPILER arm-none-linux-gnueabihf-g++)
    SET(CMAKE_C_COMPILER arm-none-linux-gnueabihf-gcc)
    SET(NCNN_INSTALL_DIR /opt/external/ncnn/install/arm/)
    SET(ZBAR_INSTALL_DIR /opt/external/zbar-0.10/build/arm)
    SET(OpenCV_DIR /opt/external/opencv/build/arm)
else()
    message(STATUS "TARGET_COMPILE STREQUAL X64")
    SET(NCNN_INSTALL_DIR /opt/external/ncnn/install/x64/)
    SET(ZBAR_INSTALL_DIR /opt/external/zbar-0.10/build/x64/)
    SET(OpenCV_DIR /opt/external/opencv/build/x64) 
endif()


PROJECT(yolov5_seg_ncnn)
cmake_minimum_required(VERSION 3.5)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)

if(OpenCV_FOUND)
 message(OPENCV_VERSION)
 message(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}")
 message(STATUS "OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}")
endif(OpenCV_FOUND)

find_package(OpenCV REQUIRED)

link_directories(${OpenCV_LIBRARY_DIRS})

include_directories(${OpenCV_INCLUDE_DIRS} )
include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${NCNN_INSTALL_DIR}/include/ncnn)

add_executable(yolov5_seg_ncnn src/yolov5_seg.cpp)
target_link_libraries(yolov5_seg_ncnn ${OpenCV_LIBRARIES})
target_link_libraries(yolov5_seg_ncnn ${NCNN_INSTALL_DIR}/lib/libncnn.a -fopenmp)


```
## 学習モデルのダウンロード

yolov5-seg-ncnnのGitHubのリンクから、学習モデルをダウンロードします。
![Screenshot from 2023-11-19 12-20-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73020/2a90000c-4eb7-fe69-d238-135165d3c2e4.png)


modelsフォルダに学習モデルを格納します。

```
$ ls ./models/
yolov5l-seg.bin    yolov5n-seg.bin    yolov5s-seg.bin    yolov5x-seg.bin
yolov5l-seg.param  yolov5n-seg.param  yolov5s-seg.param  yolov5x-seg.param

```

## ビルド
プログラムをコンパイルして実行します。

```shell
$ cmake .
$ make
$ cd bin
$ $ ./yolov5_seg_ncnn ../imgs/horses.jpg 
17 = 0.92679 at 433.87 211.55 161.45 x 136.20
17 = 0.92614 at 1.04 189.29 313.97 x 220.81
17 = 0.89329 at 229.17 195.04 188.68 x 168.41
17 = 0.75586 at 364.89 207.97 92.22 x 114.62
17 = 0.63761 at 0.36 186.01 153.85 x 99.18

```


## 参考資料
この記事を作成するにあたり、以下のウェブサイトを参考にしました。

[FeiGeChuanShu/yolov5-seg-ncnn](https://github.com/FeiGeChuanShu/yolov5-seg-ncnn/)
STRSQLでサンプルデータ作成（２）_データの追加

## はじめに

[前回](https://qiita.com/tamaday/items/0740b2840e175e557986)は`STRSQL`を使用した、既に登録されているデータを更新することで、サンプルデータを作成する方法についてご紹介しました。

今回は、新規レコードの追加方法についてご紹介します。

この記事では、`STRSQL`を使用したサンプルデータの作成方法をご紹介します。
（IBM iが`STRSQL`を使用できない環境の場合は「IBM i Access Client Solutions」からSQLを実行することができます。）


## STRSQLを使用したサンプルデータの作成方法

（画像１）
![strsqlSampleCreate-02_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962887/880f30ff-735f-92e9-1e82-68407c27a047.png)

（画像１）のデータの「CHGCOD」が3のレコードだけレコードを追加したいとします。
上記の場合、もしDFUで実現しようとすると、レコード1件1件入力していく必要があり、途方もないように思います。

一方、`STRSQL`の場合（画像２）のように条件を指定することで、select条件に該当するレコードを追加することができます。

（画像２）
![strsqlSampleCreate-02_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962887/c564a021-8b2b-f3f2-5cf7-76bbe3b04c90.png)


## おわりに

**コマンド**
1. `CPYF`又は`CRTDUPOBJ`(バックアップ)
2. `insert　into ライブラリー/ファイル select 追加するレコード`

ご参考になれば幸いです。最後までお読み頂きありがとうございます。

## 関連した投稿

[STRSQLでデータベースをチェック](https://qiita.com/tamaday/items/3bda0b78c2d30cebc7f6)
[STRSQLでサンプルデータ作成（１）_データの更新](https://qiita.com/tamaday/items/0740b2840e175e557986)
【ChatGPT無＋GPT-4＋DALL-E3＋他】で、こんなの作った。


　どうも、カーブミラーです。

　今回は、AIツールとAIサイトとAndroidアプリを使って動画を作成しました。まぁ、動画と言いながら、動きませんがw

:::note info
本記事は、ChatGPT（無料版）で
行なっております。GPT4での確認
はできておりません。あしからず。
:::

　まずは、ニュース。

　OpenAIのCEOである
　　サム・アルトマンが
　　　役員会で、唐突に解雇。

　ゆうべは、
　　あちこちが
　　　騒いでいました。
　　　　今もかな？

　出資者のMicrosoftも
　　何も聞いていなかったそう。

　解雇されたサムは、
　　グレッグ・ブロックマンと
　　　すぐに会社を設立した、
　　　　との情報も……。

　今朝になって、
　　OpenAI側が、
　　　サム・アルトマンを
　　　　呼び戻す、という情報も
　　　　　ありました。

　OpenAIというか
　　ChatGPTは、
　　　どうなるんでしょうかね？
***
　本題にいきましょうか。

　まずは、
　　作品をどうぞ。

　ダウンロードに
　　ちょっと時間がかかります。

　再生時間は、
　　1分23秒あります。

https://twitter.com/kabumira862571/status/1726073089023414702?t=L9ni4kh_fFPNYAom4nJXlQ&s=19

　再生を押しても
　　ダメな場合は、
　　　画像のほかの部分に
　　　　触れてください。
　　　　　そういう仕様のようです。
***
　作り方。
　　というか、構成要素。

　画像は、GPT-4＋DALL-E3。
　作詞は、ChatGPT無料版。
　日本語なので、DeepL翻訳。
　SongR.AIに英語の歌詞を入れる。
　AndroidアプリのFOTO Playで、
　　画像と音楽をミックス。
　出来上がり。

　アプリの編集操作は
　　必要ですが、ほぼAIのみ。
***
　SongR.AIの説明を
　　しましょうか。

　実は、多くを知りません。

　そこで、GPT-4にお願いしました。
***
***User***
songrというサイトについての情報をください。

***GPT-4***
SongRは、ユーザーが簡単にカスタムソングを作成できるAIツールです。このサービスは、以下の特徴を持っています：

1. **音楽生成の簡単さ**：SongRでは、たった3回のクリックで音楽を生成できます。ジャンル、プロンプト、歌手を選択することにより、音楽が生成されます。

2. **歌詞のカスタマイズ**：AIが生成した歌詞を使用することも、独自のテキストを入力することも可能です。また、複数の音声オプションから、気に入った歌手を選べます。

3. **使いやすいWebサービス**：歌詞を入力するだけでAIが作曲し、歌を歌ってくれる無料のWebサービスで、作成した楽曲はダウンロードも可能です。また、一日に最大5回までの作曲が可能です。

4. **アカウント登録不要**：ユーザー登録も不要で、ブラウザ上で利用できます。トップ画面にはPop、Hip hop、Cafe、Piano Rockの4つの曲ジャンルが表示され、これらから選択して使用することができます。

5. **AIによるテキストからの楽曲作成**：SongRは、キーワードやテーマを入力するだけで、オリジナルの歌詞を生成し、選択したジャンルに合わせてボーカルと伴奏を加えてくれるサービスです。

以上の特徴により、SongRは音楽制作に興味のある人々にとって魅力的なツールとなっています。
***

　曲のジャンルは、
　　もう少しあります。

　音声は、
　　男性ひとり、
　　　女性ふたり。

　今回は、
　　歌詞を
　　　ChatGPTで作成したので、
　　　　使っていませんが、
　　　　　AIの作詞もあるので、
　　　　　　それはそれでOKかな。

　なお、
　　SongRについての動画を
　　　YouTuberのKEITOさんが
　　　　出されています。
[【衝撃】ChatGPTで作った歌詞をAIがリズム良く"歌い"だす【自動音楽生成】](https://youtu.be/XFpjCjYn9fw?si=o5NhtcaGDc-siLjH)
***
　最後に、
　　Androidアプリの
　　　FOTO Playです。

　こちらは、
　　単に選んだだけですw

　要は、
　　画像と音楽ファイルを
　　　ミックスさせたかった
　　　　だけなので、
　　　　　それができるならば
　　　　　　なんでもOKです。
***
　本当は、
　　Amaneに
　　　歌わせたかったのですが、
　　　　SongRが日本語対応して
　　　　　いなかったことと、
　　　　　　女性ふたりの声が
　　　　　　　Amaneと
　　　　　　　　合わなかった。

　そこで、
　　急遽、代役として、
　　　彼女を作成したわけです。

　まだ、
　　名前も決めていません。
　　　考えます。

　できれば、
　　歌声から、人物画像を
　　　口パクさせたいところですね。

　調べた範囲では、
　　そうしたものは
　　　ありませんでした。
　　　　残念。

　ということで、
　　今回は、ここまで。
STRSQLでサンプルデータ作成（１）_データの更新

## はじめに

プログラム開発時に手動でサンプルデータを作成するという場面も時には必要になるかと思います。

その際、皆さんはどのように手動でサンプルデータを作成していますか？

`STRSQL`を使用することで、例えば、ある条件に該当するデータを一括して変更するということも可能です。

この記事では、`STRSQL`を使用したサンプルデータの作成方法をご紹介します。
（IBM iが`STRSQL`を使用できない環境の場合は「IBM i Access Client Solutions」からSQLを実行することができます。）


## STRSQLを使用したサンプルデータの作成方法

（画像１）
![strsqlSampleCreate_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962887/ea7b8a2b-6ec7-a51e-60ed-90780e82df04.png)

（画像１）のデータの「CHGCOD」が3のレコードだけ「BALDUE」を0にリセットしたいとします。

その場合、DFUで実現しようとすると、レコード1件1件に対して、目視で条件確認→値入力→確定の手順が必要になります。

しかし、`STRSQL`の場合（画像２）のように条件と値を指定し、実行するだけで該当する複数レコードを一括で更新することができます。

（画像２）
![strsqlSampleCreate_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962887/a6ff1b84-7e36-d66f-8c8c-7a4194fbc21b.png)


## おわりに

**コマンド**
1. `CPYF`又は`CRTDUPOBJ`(バックアップ)
2. `update ライブラリー/ファイル set 新しい値 where 更新するレコード`

ご参考になれば幸いです。最後までお読み頂きありがとうございます。

## 関連した投稿

[STRSQLでデータベースをチェック](https://qiita.com/tamaday/items/3bda0b78c2d30cebc7f6)
[STRSQLでサンプルデータ作成（２）_データの追加](https://qiita.com/tamaday/items/dadbd1adf1e8dbbec117)
【DbUnit】InsertやDeleteの検証ってどうやる？

# はじめに
DBテストのInsertやDeleteの検証はどのようにしていますか？JdbcTestUtilsを使うと便利なので紹介したいと思います。

## 前提条件
- DbUnitなどを使ってDBテストの環境を構築済み

## 開発環境
```
SpringBoot 3.1.0
DbUnit 2.7.3
```

# 使い方

## テストデータ
以下のようなテーブルとテストデータがあります。
```
mysql> desc Task;
+------------+--------------+------+-----+-------------------+-------------------+
| Field      | Type         | Null | Key | Default           | Extra             |
+------------+--------------+------+-----+-------------------+-------------------+
| task_id    | int          | NO   | PRI | NULL              | auto_increment    |
| title      | varchar(100) | NO   |     | NULL              |                   |
| content    | varchar(255) | NO   |     | NULL              |                   |
| created_at | datetime     | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| updated_at | datetime     | YES  |     | NULL              |                   |
+------------+--------------+------+-----+-------------------+-------------------+

mysql> SELECT * FROM Task;
+---------+--------------------+------------+---------------------+------------+
| task_id | title              | content    | created_at          | updated_at |
+---------+--------------------+------------+---------------------+------------+
|       1 | 出張申請             | 北海道への出張 | 2023-11-05 21:22:37 | NULL   |
+---------+--------------------+------------+---------------------+------------+
```

## プロダクションコード
以下のようなプロダクションコードがあります。

```TaskRepository.java
@Repository
public class TaskRepository {
    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public TaskRepository(JdbcTemplate jdbcTemplate) {
    	this.jdbcTemplate = jdbcTemplate;
    }
    
    public void insertTask(Task task) {
    	String query = """
    		INSERT INTO Task
    		(
    		title,
    		content
    		)
    		VALUES(
    		?,
    		?
    		)
    		""";
    	jdbcTemplate.update(query, task.getTitle(), task.getContent());
    }
}
```

## テストコード

`JdbcTestUtils`クラスの`countRowsInTables`メソッドを使ってテーブルの行数を取得しています。
このようにすれば`SELECT`で数えなくても簡単に検証することができます。
`JdbcTestUitls`は`countRowsInTables`以外のメソッドも用意されているので[ドキュメント](https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/test/jdbc/JdbcTestUtils.html#countRowsInTable(org.springframework.jdbc.core.JdbcOperations,java.lang.String))を確認してみてください。


```TaskRepositoryTest.java
@SpringBootTest
class TaskRepositoryTest {

    private final JdbcTemplate jdbcTemplate;
    private final TaskRepository repository;
    
    @Autowired
    public TaskRepositoryTest(JdbcTemplate jdbcTemplate, TaskRepository repository) {
    	this.jdbcTemplate = jdbcTemplate;
    	this.repository = repository;
    }
   
    @Test
    @DisplayName("insertTasktメソッドで1件新規登録できることを確認する")
    public void insertTaskTest() {
        // 投入データの作成
        var task = new Task();
        task.setTitle("17時からMTG");
        task.setContent("");
        // タスクを登録
        this.repository.insertTask(task);
    
        // テーブルの行数を取得
        int actual = JdbcTestUtils.countRowsInTable(this.jdbcTemplate, "Task");
        // 検証
        assertThat(actual, is(2));
    }
}
```

# おわりに
間違いや改善点があればコメントまたは編集リクエストをお願いします。
seleniumでのエラーについて

### 【概要】
---
seleniumを利用したテスト時に、遭遇したエラーです。

### 【環境】
---
・Docker
・rspec
・factory_bot


### Selenium::WebDriver::Error::InvalidSessionIdErrorについて
---
specでテストを実行した際に、下記のようなエラーが吐かれました。
```ruby:user_session.rb
require 'rails_helper'
RSpec.describe 'UserSessions', type: :system do

    describe 'ログイン前' do
    #省略
        context 'フォーム値が正常' do
            let(:user) { create(:user) }
            it 'ログイン処理が成功' do
                visit login_path
                fill_in 'email', with: user.email
                fill_in 'password', with: 'password'
                click_button 'ログイン'
                expect(page).to have_content 'ログインに成功しました'
                expect(current_path).to eq root_path
            end
        end
    end
end
```
```ruby:ターミナル実行ログ
    x.x) Failure/Error: Unable to infer file and line number from backtrace
          
          Selenium::WebDriver::Error::InvalidSessionIdError:
            invalid session id
```


### 解消方法

結論としては、メモリ不足のようでした。
compose.ymlで下記文言を追加することで、メモリ不足を解消し、実行することができます。
```ruby:docker-compose.yml
  chrome:
    image: selenium/standalone-chrome:latest
    shm_size: 256m　　#　←　追加しないと既存は64m
    ports:
      - 4444:4444
```

```ruby:ターミナル
root@751b72a5cf5c:/myapp# bundle exec rspec spec/system/user_sessions.spec.rb

UserSessions
  ログイン前
    フォームの入力値が未入力
      ログイン処理が失敗
    emailのフォーム値が異常
      ログイン処理が失敗
    passwordのフォーム値が異常
      ログイン処理が失敗
    フォーム値が正常　←メモリ不足を解消
      ログイン処理が成功

Finished in 17.5 seconds (files took 23.53 seconds to load)
4 examples, 0 failures
```

また、設定として、画像サイズをリサイズするといいかもです。
```ruby:spec/support/capybara.rb
options.add_argument('window-size=950,800')
```

### 【引用】
---

https://qiita.com/kozasa/items/8a9d181e43fa0a85f6e5
[Python]リストのコピーとfor文

## 目的
この記事を閲覧して，以下のことが分かる事
- list のコピー時の挙動
- シャローコピーとディープコピー
- for 文中の list の挙動

## list のコピー
まずはこちらを考えてみましょう．

Q.以下のコードを実行した場合，どのように出力されるでしょうか？

```Python
a = [0, 1, 2, 3]
b = a # b に a をコピー
a.append(4) # a に 4 を追加

print(a)
print(b)
```

選択肢 A
```Python
[0, 1, 2, 3, 4]
[0, 1, 2, 3]
```

選択肢 B
```Python
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
```

A. 選択肢 B
答えは選択肢 B です．

a にだけ 4 を追加したのに何故 b にも 4 が追加されているの？
こう思いませんでしたか？
これ実は，a と b が同じリストになってしまっています．


```Python
print(id(a)) # 135764862582848
print(id(b)) # 135764862582848
```

つまり，a のコピーとして別の b を用意したつもりが，
実はどっちも同じリストだったということになります．
では，どうすれば a のコピーとして別の b を用意できるのか．以下で解説いたします．

## copy
`copy`をインポートすることで解決できます．
いったんこちらをご覧ください．

```Python
import copy
a = [0, 1, 2, 3]
b = copy.copy(a)
a.append(4)

print(a) # [0, 1, 2, 3, 4]
print(id(a)) # 13576486259635
print(b) # [0, 1, 2, 3]
print(id(b)) # 135764862644352

```

copy を使うことで，a と別のコピー b を用意することができました．
これで a に 4 を追加しても，b には 4 が追加されません．

## シャローコピーとディープコピー
上記の通り，`copy`を使えば思い通りのコピーができそうだという事がわかりました．
しかし，コピーには
- シャローコピー（浅いコピー）
- ディープコピー（深いコピー）

というものがあります．厄介ですね．．

ということでいったんこちらをご覧ください．

```Python
import copy
a = [0, 1, 2, 3, [100, 110]]
b = a
c = copy.copy(a) # シャローコピー
d = copy.deepcopy(a) # ディープコピー
a[3] = 4
a[4][0] = 777

print(f"a: {a}, id: {id(a)}, id(a[4]): {id(a[4])}")
print(f"b: {b}, id: {id(b)}, id(b[4]): {id(b[4])}")
print(f"c: {c}, id: {id(c)}, id(c[4]): {id(c[4])}")
print(f"d: {d}, id: {id(d)}, id(d[4]): {id(d[4])}")
```

出力

```Python
a: [0, 1, 2, 4, [777, 110]], id: 135764861728000, id(a[4]): 135764861728448
b: [0, 1, 2, 4, [777, 110]], id: 135764861728000, id(b[4]): 135764861728448
c: [0, 1, 2, 3, [777, 110]], id: 135764861720192, id(c[4]): 135764861728448
d: [0, 1, 2, 3, [100, 110]], id: 135764861724480, id(d[4]): 135764861719744
```

### ざっくり解説
シャローコピー:
新しいコピーを作成する（要素内のリストなどは a と同じところを指す）
リスト内のリストなど深いところまではコピーしない（浅い）

ディープコピー:
完全に新しいコピーを作成する
リスト内のリストなど深いところまでコピーする（深い）

## ここまでのまとめ
- a と同じリストを作るときは a = b
- a のコピーを新しく作成し，その後 a と異なる操作をしたい時は copy を使う
- a のコピーで完全に新しいリストを作成したい時はディープコピーする

## for 文中のリスト
for 文でリストの要素分ループさせる時，
ループ中にそのリストに要素を追加したらどうなるでしょうか？
最初にループが始まった時の要素分だけでループ？
追加されたらその分追加でループされる？

ということでこちらをご覧ください．

```Python
list_a = [0, 1, 2, 3]

for i, a in enumerate(list_a):
  print(a)
  list_a.append(a+100)
  if i >= 6:
    break

print(list_a)

```

出力

```Python
0
1
2
3
100
101
102
[0, 1, 2, 3, 100, 101, 102, 103, 200, 201, 202]
```

答えは，ループ中に追加した分まで追加でループされるでした．

## まとめ
- a と同じリストを作るときは a = b
- a のコピーを新しく作成し，その後 a と異なる操作をしたい時は copy を使う
- a のコピーで完全に新しいリストを作成したい時はディープコピーする
- リストのループ中に要素を追加したら，その追加分まで追加でループする
javaのTLAB,jps,jstat,jinfoについて

## TLAB
Javaの小さなオブジェクトは、TLAB (Thread Local Area Buffer)に割り当てられます。TLABは、新しいオブジェクトが割り当てられている小さなメモリー領域です。TLABが一杯になると、スレッドが新しいものを取得します。
## jps
jps ツールは、ターゲットシステム上で計測された HotSpot Java 仮想マシン (JVM) を一覧表示します。このツールで表示できるレポート情報は、アクセス権を持った JVM に関するものに限定されます。
## jstat
jstatコマンドは、設置されているJava HotSpot VMのパフォーマンス統計情報を表示します。 ターゲットJVMは、仮想マシン識別子またはvmidオプションによって識別されます。
## jinfo
指定されたJavaプロセスに関するJava構成情報を出力します。 構成情報は、Javaシステム・プロパティとJVMコマンド行フラグで構成されます。
## 実装確認
サンプルコード
```java
public class TLABTest {

  public static void main(String[] args) {
    System.out.println("TLABTest start");
    try {
      Thread.sleep(1000000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}
```
実行結果
```console
TLABTest start...
```
- jpsでJava 仮想マシン (JVM) 一覧を確認する
```console
PS C:\Users\XXXXX> jps
28848 Jps
17700 Eclipse
22388 TLABTest
PS C:\Users\ts-xinrong.deng>
```
- jinfoでTLAB使用状況を確認する
```console
PS C:\Users\XXXXX> jinfo -flag UseTLAB 22388
-XX:+UseTLAB
```
+UseTLABはTLABが使用中のことを示しています
- jstatでJava VMのガベージコレクトされたヒープの動作に関する統計情報を確認する
```console
PS C:\Users\XXXXX> jstat -gc -h 5 22388 2000
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
10752.0 10752.0  0.0    0.0   65024.0   3901.5   173568.0     0.0     4480.0 775.7  384.0   76.0       0    0.000   0      0.000    0.000
10752.0 10752.0  0.0    0.0   65024.0   3901.5   173568.0     0.0     4480.0 775.7  384.0   76.0       0    0.000   0      0.000    0.000
10752.0 10752.0  0.0    0.0   65024.0   3901.5   173568.0     0.0     4480.0 775.7  384.0   76.0       0    0.000   0      0.000    0.000
10752.0 10752.0  0.0    0.0   65024.0   3901.5   173568.0     0.0     4480.0 775.7  384.0   76.0       0    0.000   0      0.000    0.000
10752.0 10752.0  0.0    0.0   65024.0   3901.5   173568.0     0.0     4480.0 775.7  384.0   76.0       0    0.000   0      0.000    0.000
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
10752.0 10752.0  0.0    0.0   65024.0   3901.5   173568.0     0.0     4480.0 775.7  384.0   76.0       0    0.000   0      0.000    0.000
10752.0 10752.0  0.0    0.0   65024.0   3901.5   173568.0     0.0     4480.0 775.7  384.0   76.0       0    0.000   0      0.000    0.000
10752.0 10752.0  0.0    0.0   65024.0   3901.5   173568.0     0.0     4480.0 775.7  384.0   76.0       0    0.000   0      0.000    0.000
```
上記はJava VMの世代ごとのメモリー容量を確認できます