OmniAICreator/Qiita-1.07M huggingface dataset:
Android15 16KB Page size対応

# 概要
  
ページサイズは、OSがメモリを管理する方法を決定する単位です。小さいページサイズは、メモリ管理のオーバーヘッドを削減できますが、より多くのメモリフラグメントが発生する可能性があります。一方、大きいページサイズは、フラグメント化を削減できますが、メモリ管理のオーバーヘッドが増加します。

Androidは従来、4KBのページサイズを使用していましたが、Android 15では、デバイスが16KBページサイズをサポートする場合、オプションで16KBページサイズを使用できるようになりました。
なお、iOSはずいぶん前から16KBサイズに対応しています。

# 対応

  Java/Kotlinだけでプロジェクトが構成されている場合、特にやることはないです。NDK、C/C++を用いたコードを含む場合（.soファイルがapkに含まれる）対応が必要になります。  
  対応の概要は、公式に詳細が記載されていますが、用いるビルド設定において、16KBを有効化するフラグを付けて再ビルドを行います。
  一例ですが、NDK buildを用いて構成されている場合、以下のフラグ地を設定するだけでOKです。
  ```
  APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true
  ```
  
# 動作チェック
まず、Apkが正常に16KB対応でビルドできているかをチェックします。公式にチェックスクリプトがありますので利用しますが、**おそらくMacでしか動かない**ので注意です。
  ```
#!/bin/bash
# usage: alignment.sh path to search for *.so files

dir="$1"

RED="\e[31m"
GREEN="\e[32m"
ENDCOLOR="\e[0m"

matches="$(find $dir -name "*.so" -type f)"
IFS=$'\n'
for match in $matches; do
  res="$(objdump -p ${match} | grep LOAD | awk '{ print $NF }' | head -1)"
  if [[ $res =~ "2**14" ]] || [[ $res =~ "2**16" ]]; then
    echo -e "${match}: ${GREEN}ALIGNED${ENDCOLOR} ($res)"
  else
    echo -e "${match}: ${RED}UNALIGNED${ENDCOLOR} ($res)"
  fi
done
  ```
  
含まれるすべての.soが`ALIGNED`と表示されればOK。
  
次に動作確認に移りますが、問題は16KB対応の実端末はまだこの世にないことです。（※[追記] Pixel8/８Pro限定で実機テストができるようです。）必然的にエミュレータを用いたチェックとなります。
以下の2つのイメージが用意されていますので、利用している環境に対するエミュレータを構築します。
* Google APIs Experimental 16k Page Size ARM 64 v8a System Image
* Google APIs Experimental 16k Page Size Intel x86_64 Atom System Image
  
エミュレータ上でまずアプリが起動できれば、一安心。落ちる場合、16KB対応できていない.soが含まれています。C/C++で構成されている部分の機能を総合定期に動作確認します。
  
 # 最後に
  
過去64bit対応をしたときと同じようなものですが、実機がない分テストがし辛いかもしれません。
品質テスト部門にどうやって評価してもらうかも含めて今後要検討かなと思います。

# 追加情報 - 実機での動作確認 ※
16KB対応でデバイスが存在しないと上記で記載しましたが、Android 15 QPR1 ベータ版から Pixel 8 と Pixel 8 Proにて開発者オプションで、16KBを有効化することができすそうです。実機を持っていないので確かめてはいないですが、事実ならば本質テスト部門にはこれらでのデバイスでのテストを依頼すれば良さそう。

# 追加情報 - 2025/11/1~ 必須化
https://android-developers.googleblog.com/2025/05/prepare-play-apps-for-devices-with-16kb-page-size.html
GooglePlayへのアップロードに対して必須化のアナウンスがありました。猶予は半年。

# 参考リンク
https://developer.android.com/guide/practices/page-sizes
https://android-developers.googleblog.com/2024/08/adding-16-kb-page-size-to-android.html
【SwiftUI】FaceIDをアプリで使う方法

# はじめに
私は先日、PasswordBox というアプリをリリースしました。

https://apps.apple.com/jp/app/passwordbox/id6520392403

このアプリは簡単に説明すると Password Manager アプリケーションです。
パスワードを扱う以上、セキュリティ性を高めるためにアプリを使用するにはパスコード等を使ってアプリを使う必要があります。
しかし、ログイン画面を1から使うのは大変だし、個人的にこのアプリで Firebase などを使ったログイン認証を作りたくなかったので、このアプリでは FaiceID を使っています。

この記事では、FaceID の認証方法を解説していきます。

# 開発環境
- Xcode15
- Swift5.10

# 実装方法
## Info の設定
1. プロジェクトファイルの設定を開く
1. ターゲットを開く
1. info を選択
1. `Permitted background task scheduler identifiers｀ を追加

上記の方法で、プロジェクト設定を変更します。
また、`Permitted background task scheduler identifiers` を追加したら、このアプリが生体認証を使用する目的をユーザーに説明する必要があります。

## 処理の追加
以下のコードを追加します。

```swift
    private func authenticate() {
        let context = LAContext()
        var error: NSError?
        
        if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) {
            let description = "認証が必要です"
            
            context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: description) { success, authenticationError in
                DispatchQueue.main.async {
                    self.isUnlocked = success
                }
            }
        }
    }
```

上記のコードを SwiftUI の任意の場所(`.onAppear` や `Button(action: {}` など)　においてあげると FaceID を使用することができます。

# 最後に
PasswordBox はOSSな iOS アプリケーションです。
コントリビューション、お待ちしております。

https://github.com/KaitoMuraoka/PasswordBox

# 参考文献

https://qiita.com/so__hei__/items/bac4b2ace80d43f2d97a
C_TS422_2021 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（64/100）

【64日目】
トピック 7：SAPS/4HANAにおける拡張計画（10/14）

≪問題64≫
アドバンスト計画のコンテキストでは、どのような評価によって紐付を定義しますか。
□生産計画実行後のネットワークで、品目または能力の不足が発生しているかどうかを確認する評価
□生産計画実行後に入庫要素と出庫要素間の均衡において、過剰在庫状況が発生しているかどうかを確認する評価
□すべての関連製品のネットワーク構造に従って順序付けされ、入庫要素による出庫要素のカバレッジ範囲を表現する評価
□すべての関連製品の部品表/配合表（BOM）構造に従って順序付けされ、入庫要素と出庫要素の関係を表現する評価

≪解答≫
□生産計画実行後のネットワークで、品目または能力の不足が発生しているかどうかを確認する評価
□生産計画実行後に入庫要素と出庫要素間の均衡において、過剰在庫状況が発生しているかどうかを確認する評価
□すべての関連製品のネットワーク構造に従って順序付けされ、入庫要素による出庫要素のカバレッジ範囲を表現する評価
■すべての関連製品の部品表/配合表（BOM）構造に従って順序付けされ、入庫要素と出庫要素の関係を表現する評価

≪解説≫
◆紐付けとは、特定の場所にある製品の入庫要素と出庫要素の間にリンクを確立することです。システムは紐付けを使用して、入庫を関連する所要量に割り当てます。
◆システムは、互いにリンクするオーダーの紐付けネットワークを登録します。これは、BOM（部品表）構造における入庫要素と出庫要素の間の関係を示しています。
◆所要量要素および入庫要素は、利用可能な日時および所要日時に従って割り当てられます。そのため、所要量または入庫が変更されると、動的な紐付け関係も変更されます。
◆オーダーの紐付け構造は、関連するすべての製品のBOM構造に従って順序付けされる評価であり、入庫要素と出庫要素の間の関係を示します。これは、特定の所要量に対して、最終製品や組立品を生産するために必要なオーダーの概要を示すものです。
PythonのcProfileでプロファイリング（基礎）

誰得記事ですみませんが、PythonのcProfileモジュールの備忘録です。
プロファイルモジュールについては以下の説明が分かりやすいです。

https://docs.python.org/ja/3/library/profile.html#

cProfileはコンテキストマネージャー(with)を使えるためコードが簡潔になります。
以下のコードでNumPyのソート関数のプロファイルをとってみました。

```python
import cProfile
import numpy as np

l: np.array = np.array(range(1, 2 << 24))
np.random.shuffle(l)
with cProfile.Profile() as pr:
    sorted = np.sort(l, kind='quicksort')
    sortby = pstats.SortKey.CUMULATIVE
    ps = pstats.Stats(pr, stream=sys.stdout).sort_stats(sortby)
    ps.print_stats()

print(sorted[0])
```
↓
```console
14 function calls in 2.187 seconds
Ordered by: cumulative time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.000    0.000    2.187    2.187 ..python3.12/site-packages/numpy/_core/fromnumeric.py:915(sort)
    1    2.166    2.166    2.166    2.166 {method 'sort' of 'numpy.ndarray' objects}
    1    0.021    0.021    0.021    0.021 {method 'copy' of 'numpy.ndarray' objects}
    :
```

デフォルトは出力が`filename`順でソートされた状態になりますが、ここは`pstats`の`SortKey`で目的に合わせ並べ替える事ができます。上では`cumtime`順に並べています。

表の見出しは[ユーザーマニュアル](https://docs.python.org/ja/3/library/profile.html#instant-user-s-manual)に以下のように書かれていました。

> ncalls: 呼び出し回数
> tottime: 与えられた関数に消費された合計時間 (sub-function の呼び出しで消費された時間は除外)
> percall: tottime を ncalls で割った値
> cumtime: この関数と全ての subfunction に消費された累積時間
> percall: cumtime をプリミティブな呼び出し回数で割った値
> filename:lineno(function): その関数のファイル名、行番号、関数名

因みに上のコードではソートが呼ばれている回数は1回（ncallsは1）でしたが、2回呼ぶようにすると`ncalls`は2になり、`percall`は1回分になりました。

```console
19 function calls in 4.368 seconds
Ordered by: cumulative time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    2    0.000    0.000    4.368    2.184 ..python3.12/site-packages/numpy/_core/fromnumeric.py:915(sort)
    2    4.325    2.163    4.325    2.163 {method 'sort' of 'numpy.ndarray' objects}
    2    0.043    0.021    0.043    0.021 {method 'copy' of 'numpy.ndarray' objects}
    :
```

また、再帰関数だと`ncalls`が`n/m`（`n`は総呼び出し回数、`m`はプリミティブな呼び出し回数、再帰なのでここでは1）のようになるようです。

```console
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
      5/1    0.000    0.000    5.025    5.025 rec.py:4(rec)
        5    5.025    1.005    5.025    1.005 {built-in method time.sleep}
```

`time.sleep`が見えているのは、再帰関数がsleepで時間稼ぎしている適当な実装だからです。

```python:rec.py
def rec(i: int) -> int:
    time.sleep(1)
    i = i - 1
    if i > 0:
        return rec(i)
    return 1
```

---

折角なので最初のコードで[`numpy.sort`](https://numpy.org/doc/stable/reference/generated/numpy.sort.html#numpy-sort)のアルゴリズム(`kind`)を変えてとってみました。
クイックソート、マージソート、ヒープソートの
`{method 'sort' of 'numpy.ndarray' objects}`の`cumtime`を31回測定した中央値です。

|kind|cumtime|
|---|---|
|quicksort|2.161|
|mergesort|2.272|
|heapsort|10.698|

### 環境
macOS: Sonoma v14.5
CPU: Apple M1

### 参考文献
  - [Profile](https://docs.python.org/ja/3/library/profile.html)
  - [cProfile](https://docs.python.org/ja/3/library/profile.html#module-cProfile)
  - [Numpy-Sort](https://numpy.org/doc/stable/reference/generated/numpy.sort.html#numpy-sort)
論文読み：Diffusion-Based 3D Human Pose Estimation with Multi-Hypothesis Aggregation

# Diffusion-Based 3D Human Pose Estimation with Multi-Hypothesis Aggregation
ICCV 2023
[paper](https://openaccess.thecvf.com/content/ICCV2023/papers/Shan_Diffusion-Based_3D_Human_Pose_Estimation_with_Multi-Hypothesis_Aggregation_ICCV_2023_paper.pdf)

https://github.com/paTRICK-swk/D3DP

## 概要
この論文では、D3DP (Diffusion-based 3D Pose estimation) という新しい手法を提案．
D3DPは、2Dキーポイントに基づいて複数の3D姿勢仮説を生成し、それらを結合して最終的な3D姿勢を予測する手法．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/e511246e-28ab-1365-78fc-4cecf11d8b66.png)

:::note info
3D姿勢推定にDiffusionを用いた研究
:::

1. **D3DP**: ノイズのある3D姿勢からクリーンな3D姿勢を復元するためのデノイザーを学習するプロセス
2. **JPMA (Joint-wise reProjection-based Multi-hypothesis Aggregation)**: 3D姿勢仮説を2Dカメラ平面に再投影し、再投影誤差に基づいて最良の仮説を選択する

このアプローチは、従来の確定的および確率的な手法に対して優れた性能を示している．

## 従来手法との比較
従来の3D姿勢推定手法は、確定的アプローチと確率的アプローチに分かれる．確定的アプローチは単一の3D姿勢を生成し、確率的アプローチは複数の仮説を生成する．しかし、確率的アプローチは特定のネットワーク設計に依存し、仮説の数を柔軟に調整できない問題があった．D3DPは、これらの課題を克服するために、デノイジング拡散確率モデル (DDPM) を使用し、既存の3D姿勢推定器と互換性を持つように設計されている．

## 新規性
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/e63b0190-cf16-d2d6-ae4d-f6f6eb3ade4f.png)

D3DPの新規性は以下の点にある：
1. **デノイジング拡散確率モデル (DDPM) の利用**: ノイズのある3D姿勢からクリーンな3D姿勢を復元するプロセスを導入し、複数の仮説を生成する
2. **JPMAの提案**: 再投影誤差に基づいて最良の仮説を選択し、最終的な3D姿勢を予測する
3. **カスタマイズ可能な仮説数と反復数**: 推論中に仮説数と反復数を調整することで、性能と効率のバランスを取る

## 方法論
- **拡散プロセス**: GTの3D姿勢にノイズを加え、ノイズのある3D姿勢を生成する．このプロセスを反転させることでクリーンな3D姿勢を復元する
- **デノイザー**: 2Dキーポイントに基づいてノイズのある3D姿勢からクリーンな3D姿勢を生成するデノイザーを学習する
- **JPMA**: 3D姿勢仮説を2Dカメラ平面に再投影し、再投影誤差に基づいて最良の仮説を選択する．各関節ごとに最良の仮説を選び、それらを結合して最終的な3D姿勢を生成する

## 結果と評価
D3DPは、Human3.6MおよびMPI-INF-3DHPデータセットで評価され、従来手法を上回る性能を示している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/578979a1-8149-12b6-9d53-a66fd944ac81.png)


## 結論
D3DPは、拡散モデルを用いた新しい3D姿勢推定手法であり、確定的および確率的な手法の利点を組み合わせている．JPMAを使用することで、各関節ごとに最良の仮説を選択し、高精度な3D姿勢を予測することができる．このアプローチは、さまざまなアプリケーションでの利用が期待される．
Win11 + WSL2 で Tauri を動かすために libwebkit2gtk-4.0-dev インストールで行き詰った話

## はじめに

Windows11 の wsl2 環境で Tauri を用いて、開発をしたかった訳ですが、libwebkit2gtk-4.0-dev 関連の依存ファイルがなく、インストールに行き詰り、解決に時間かかったため、自分の備忘録としてしました。
同じ問題で Tauri の起動に失敗した方のためにも、この記事にお役に立てれば幸いです。

## 環境

Windows11
WSL2 Ubuntu 22.04.3 LTS

## インストール

Rust のインストールがまだ済んでいなければ、`curl https://sh.rustup.rs -sSf | sh` 実行して進めます。
[Tauri](https://tauri.app/v1/guides/getting-started/setup) の公式ある通り、tauri の cli をインストール始めます。

```shell
cargo install create-tauri-app --locked
cargo create-tauri-app
```

プロジェクトの名称は「tauri-sample」とし、言語は Tauri 、UI template は何でもいいですが、とりあえず Vanilla にします。

```shell
✔ Project name · tauri-sample
✔ Choose which language to use for your frontend · Rust - (cargo)
✔ Choose your UI template · Vanilla
```

すると、プロジェクトが作成されるのですが、「webkit2gtk 」依存ファイルがないというエラーがコンソール画面に表示されます。

```shell
Template created!

Your system is missing dependencies (or they do not exist in $PATH):
╭────────────┬──────────────────────────────────────────────────────────────────────────────────╮
│ webkit2gtk │ Visit https://tauri.app/v1/guides/getting-started/prerequisites#setting-up-linux │
╰────────────┴──────────────────────────────────────────────────────────────────────────────────╯

Make sure you have installed the prerequisites for your OS: https://tauri.app/v1/guides/getting-started/prerequisites, then run:
  cd tauri-sample
  cargo tauri dev

```

他の記事では `sudo apt install libwebkit2gtk-4.0-dev` インストールするよう解説がありますが、筆者の場合、パッケージが見つからないというエラーが出るので、リポジトリ先にパッケージが含まれていないのかも知れません。

```shell
E: Unable to locate package libwebkit2gtk-4.0-dev
```

解決策として、リポジトリに http://gb.archive.ubuntu.com/ubuntu を追加することで、libwebkit2gtk-4.0-dev のインストールが可能になるので、下記を入力し、リポジトリを追加します。

```shell
sudo add-apt-repository -y "deb http://gb.archive.ubuntu.com/ubuntu jammy main"
sudo apt update 
sudo apt install libwebkit2gtk-4.0-dev
```

## 動作確認

そこで改めて `cargo tauri dev` 入力すると、無事に Window が立ち上がったので、動作確認成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111828/79fd1852-68d3-34a2-dca7-e9e8faeebdba.png)
Qiita / Zennの記事を一覧からサクサク読めるChrome拡張機能を作りました

こんにちは。
株式会社dottでエンジニアしてます、HALと申します。

エンジニアの皆さんなら、QiitaやZennの記事にお世話になることも多いと思います。
いろんな方の書かれた記事があって、検索したりトレンド記事を流し読みしたり、思い思いの活用をされてることと思います。

ただ、１点記事を読んでいく時に面倒だなぁと思っていたことがありました。
それが、一覧画面から記事の内容を見る際に、画面遷移を挟むことです。

例えば、QiitaのTOPページには、トレンドの記事やおすすめ記事が並んでいます。
![スクリーンショット 2024-07-13 22.51.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571256/a19f49ae-6350-d0ed-c2f3-68b5999bd727.png)


人によっては、これをとりあえずサラッと流し読みしてる、という人もいるでしょう。
また、検索で記事を探すときも、タイトルだけだとわからないので、記事の触りを読んで、違ったら次の記事...みたいに探す人もいると思います。

そういった際、いちいち画面遷移してページを開き、また戻って...とやるのは面倒ですよね。
そこで、Qiita / Zennの一覧系の画面を便利にするための拡張機能を作りました。

# Article Viewer

https://chromewebstore.google.com/detail/fdopcpmabjdfmjjnnmbgbjabhplchahl?hl=ja&authuser=0

機能はシンプルで、Qiita（Qiita Teamを含みます）とZennの一覧系の画面を開いた際、記事のリンクをクリックすると、Previewを開いてくれます。
また、前の記事・次の記事にもボタン一つで移動できるようになっています。

<iframe width="560" height="315" src="https://www.youtube.com/embed/xk-Xp2T87-Q?si=_ztXJCbA-RqPMcUW" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

できることはこれだけですが、自分は欲しかった機能なので作りました。
良ければ使ってみてください。
ABC362をPythonで（A～D）

トヨタ自動車プログラミングコンテスト2024#7（AtCoder Beginner Contest 362）の解答等のまとめ

https://atcoder.jp/contests/abc362



# A問題
https://atcoder.jp/contests/abc362/tasks/abc362_a

問題部の通りに条件分岐させればいい
```python:A
r,g,b = map(int, input().split())
c = input()
if c == "Red":
    print(min(g, b))
elif c == "Green":
    print(min(r, b))
else:
    print(min(r, g))
```

# B問題
https://atcoder.jp/contests/abc362/tasks/abc362_b

三平方の定理を使う
```python:B
ax, ay = map(int, input().split())
bx, by = map(int, input().split())
cx, cy = map(int, input().split())

ab = (ax - bx) ** 2 + (ay - by) ** 2
ac = (ax - cx) ** 2 + (ay - cy) ** 2
bc = (cx - bx) ** 2 + (cy - by) ** 2

l, m, n = sorted([ab, ac, bc])
print("Yes" if l + m == n else "No")
```

# C問題
https://atcoder.jp/contests/abc362/tasks/abc362_c

最大値どうし最小値どうしを足して０になるパターンがあるか調べる
パターンがあるならプラスに大きい分だけ$R$からいい感じに減らす
```python:C
def get_ans():
    res = []
    mar = dp[-1][1]
    for l, r in data:
        if r - l >= mar:
            nxt = r - mar
        else:
            nxt = l
        res.append(nxt)
        mar -= r - nxt
    return res


n = int(input())
data = [list(map(int, input().split())) for _ in range(n)]

dp = [[0, 0]]

for l_i, r_i in data:
    dp.append([dp[-1][0] + l_i, dp[-1][1] + r_i])

if dp[-1][0] <= 0 <= dp[-1][1]:
    print("Yes")
    ans = get_ans()
    print(*ans)
else:
    print("No")
```

# D問題
https://atcoder.jp/contests/abc362/tasks/abc362_d

ダイクストラの少し変わったバージョン
```python:D
from heapq import heappush, heappop

n, m = map(int, input().split())
a = list(map(int, input().split()))

edge = [[] for _ in range(n)]
for _ in range(m):
    u, v, b = map(int, input().split())
    edge[u - 1].append([v - 1, b])
    edge[v - 1].append([u - 1, b])

dist = [a[0]] + [float("inf")] * (n - 1)
q = [[a[0], 0]]
while q:
    d, now = heappop(q)
    if dist[now] < d:
        continue
    for to, c in edge[now]:
        if dist[to] > dist[now] + c + a[to]:
            dist[to] = dist[now] + c + a[to]
            heappush(q, [dist[to], to])

print(*dist[1:])
```
C_TS4FI_2021 SAP Certified Associate - SAP S/4HANA 2021 for Financial Accounting対策（17/100）

【17日目】
トピック2：総勘定元帳（2/20）

≪問題17≫
総勘定元帳勘定が勘定タイプ”営業外費用または収益”で定義されています。この勘定はどこで使用できますか。
正しい答えを選択してください。
□間接費管理会計で使用される損益勘定
□マージン分析で使用される損益勘定
□利益センタ会計で使用される損益勘定
□マージン分析および利益センタ会計で使用される損益勘定

≪解答≫
□間接費管理会計で使用される損益勘定
□マージン分析で使用される損益勘定
■利益センタ会計で使用される損益勘定
□マージン分析および利益センタ会計で使用される損益勘定

≪解説≫
◆G/L勘定タイプ（4種類）と使用される会計モジュールの関係は以下のとおりです。
（1）貸借対照表勘定
⇒財務会計、利益センタ会計
（2）営業外費用または収益勘定
⇒財務会計、利益センタ会計
（3）一次原価または収益勘定
⇒財務会計、利益センタ会計、管理会計
（4）二次原価勘定
⇒財務会計、利益センタ会計、管理会計
◆マージン分析は収益性分析（管理会計）の機能であるため、"営業外費用または収益勘定"は使用されません。
いつもわすれるfor文の代わりたち


個人的「質はともかく継続する」36日目です

JavaScriptを書くとき、ループ処理を書こうとするといつも忘れてしまう、for文の代わりの方法をまとめました。正確には代わりではありませんが、用途としては代わりになるものたち、ですね。

## for文

まずはfor文。言語とわず、大体同じような書き方ですよね。

```js
for (const element of [1, 2, 3]) {
  console.log(element);
}
```

```text
1
2
3
```

## map

つづいてmapです。個人的には一番出番が多い。これは1から３までの配列をひとつづつ取り出して、2倍したものを新たな配列とする処理ですね。mapは新たな配列を生み出します。

```js
const doubled = [1, 2, 3].map((element) => element * 2);
console.log(doubled);
```

```text
[2,4,6]
```

# filter

お次はfilterです。条件に一致するものを取り出します。この例だと、２で割り切れるものを取り出し、新たな配列を作っています。

```js
const evens = [1, 2, 3, 4, 5].filter((element) => element % 2 === 0);
console.log(evens);
```

```text
[2,4]
```

## reduce

最後にreduceです。配列の各要素に対して関数を実行して、単一の値を返します。このメソッドは返ってくる値が配列ではないことに注意。この例だと、1から3までの配列に対して、初期値0から始まる累積値を求める式になっています。初期値0からはじまり、配列の1と0を足して1、次は1と2を足して3、最後は3と3を足して6。
いちばん忘れがちで、毎回「あぁそう言えば関数を実行するんだった」となります。出番も個人的には少ないです。

```js
const sum = [1, 2, 3].reduce((acc, cur) => acc + cur, 0);
console.log(sum);
```

```text
6
```
プログラム医療機器をスタートアップするときのアンチパターン

こんばんは。今回はポエムです。

中小企業の社内ベンチャーみたいな感じで、プログラム医療機器に手をだして（N=５〜１０）得られた知見を共有します。

# スタートアップは、プログラム医療機器に手を出すな

めっちゃ法律の壁が高すぎて、
手持ちのスタートアップメソッド（古くはリーンスタートアップとか）がことごとく使えませんでした

一個一個、法律の壁をクリアするための、プログラム開発の本質ではない組織づくりや事務手続きをこなす必要があり、
製品が市場に出る前に、おそらく体力（資金）がつきます。尽きました。


# アンチパターン１「プログラム医療機器」と「医療機器プログラム」の違いを理解する（精神論）

最初に精神論です。

あなたが、両者の違いを「理解」しようとしている時点で、おそらくエンジニア気質であるので
この業界に向いていません。

「プログラム医療機器」と「医療機器プログラム」は、いずれも医療の法律の用語なので、それぞれ異なる意味の定義がされているだけなんです。
法律と医療の世界では、だいたいこんなワールドが展開されています。
一方エンジニア界に済んでいる人たちに置きましては
あなたの会社の新入社員が、変数にこんな名前の付け方してたら、まず真っ先に理由を告げて修正してもらいますよね？？

だいぶ住む世界がことなっていて、度々話が噛み合いません。

対応：医療や法律分野での人間を「通訳」としてチームに入れるなど。


# アンチパターン2 大学との共同研究から始める

共同研究から始めると、いくつか問題が有ります。
まず共同研究を初めてしまった場合、「大学（組織）」「研究者」２種のステークホルダーができあがります。
それぞれの目的はおおむね次のとおりです。

* 企業は、自社の製品を売りたい
* 大学（組織）は、研究費を企業からあつめて売上を上げたい　＋　特許を取るなど対外実績を作りたい
* 研究者（パターン１）は、特許を取りたい or 論文を書きたいなど対外実績を作りたい
* 研究者（パターン２）は、真に社会課題を解決したい

見ての通り、向いている方向がバラバラです。
大学と研究者がたまたま同じ方向を向くことは有りますが、少なくとも企業とは一致しません。

これだけならまあよくあるビジネスの話なのですが、これにパワーバランスが加わります。

私が経験してきた印象は次のとおりです。

大学＞＝研究者＞＞＞＞＞＞＞＞＞＞＞＞スタートアップ企業

参考：令和５年度　春期応用情報　午前１　問７０　には次のような問題があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812996/87da61c0-9e81-11dc-258b-e99ceb9f682c.png)

これの答えは「ゥ」らしいですが、

**実際はそんな対等なわけないからな！
企業が費用１００％持ちなのに、研究者側のパワーが強くて、作業分担が企業９９：１だったりがザラだからな！**

対応：大学発スタートアップとかするといいんじゃないでしょうか。少なくともどこぞのウマの骨とも知らんスタートアップより家はあたりが柔らかなたり、同じ方向を向きやすくなったりしそうです。

---

# アンチパターン3「販売チャンネルがない状態で医療機器を目指す」

ここでいう販売チャンネルとは２種類のことをさしており
1. 医療機器を売ることを許可された「医薬品製造販売業許可」を持っている企業のこと
1. ある分野で権威のある大学教授や学会のこと

のことです。

医薬品製造販売業許可がないとそもそも売れないし、
よしんば医薬品製造販売業の会社が、製造販売で責任持ちますよ、売りますよってなったとしてもポツンポツンと数個売れておわりです。
地方にいると、どうもまだ大学とその傘下の開業医みたいな構図があるので、
鶴の一声で数百のクリニックに一気に導入されるとかザラだし、
その逆も然りで、そういう大学の偉い人の許可がないと、導入に難色を示されます。
（２０〜３０代の若い開業医の先生方は、あんまりそういう感じはしないのですが）

対策：初手＝販売チャンネルづくりです。
ただしそういうとこに話持ってくには、ある程度完成したものじゃないと軽くあしらわれてしまうのもまた事実。うーん。どうしたらいいのか。（未解決）

# アンチパターン４「医療機器化のための予算を確保しない」

医療機器化するにはなんさま金と時間がかかります。
知り合いの医療機器（ハード）の社長さんは「１０年は耐え忍べよ」とおっしゃっていました。
平均値でそんな感じだと思います。

特に
* 医薬品製造販売業許可
* 医療機器
の要件をとるのにお金がかかります。

金額面は、だいぶ昔に調べた値を記憶しているだけなので曖昧ですが

* 医薬品製造販売業許可は、事務経験のある人を管理責任者としてやとわなければならないので、初年度で１０００万くらい
* 医療機器 ... クラス２の新規医療機器にする場合７００万円くらい＋臨床試験は別持ちなので、やっぱりトータルで１０００万くらい

の費用感です。最低２０００万。
また臨床試験を行うのにもかなりの時間を有します。
Apple Watchの心電図の医療機器が2018年に発表されてから、日本で医療機器プログラムとされるまで、２年ほどかかっています。

雑に開発後から２年は収入がないと考えてください。

対策：予め予算と期間を考えておく

---

いかがだったでしょうか、
医療機器はこれほどまでスタートアップと相性が悪かったのです

無論、全部が全部このパターンってわけではなくて、
例えば体力のありそうな大企業の社内ベンチャーとかはこの限りではないかもしれません。
論文読み：Learning Structure-Guided Diffusion Model for 2D Human Pose Estimation

# Learning Structure-Guided Diffusion Model for 2D Human Pose Estimation

## 概要
この論文では、DiffusionPoseという新しい枠組みを提案している．
トレーニング中に、キーポイントにガウシアンノイズを加えてランダム分布に拡散させ、拡散モデルがノイズのあるヒートマップから地上真値のヒートマップを復元することを学習する．
推論中には、初期化されたヒートマップから高品質のヒートマップを生成する．また、DiffusionPoseの性能を向上させるために、人間の構造情報を条件として利用する方法も探求している．

:::note info
最近、至る所で見るDiffusion（拡散モデル）と、その構造を活用した研究。
本研究はHuman Pose Estimation（姿勢推定）に拡散モデルを利用した。
:::

## 従来手法との比較
従来の2D姿勢推定手法は、通常、トップダウン法、ボトムアップ法、およびシングルステージ法に分類される．トップダウン法は、各人物のバウンディングボックスを検出し、その中で姿勢推定を行う．ボトムアップ法は、すべてのキーポイントを検出し、それをグループ化して個々の人物の姿勢を推定する．ワンステージ法は、画像全体から直接キーポイントを回帰する．

これらの手法の問題点は以下の通りである：
- **トップダウン法**: 高解像度のバウンディングボックスが必要であり、計算コストが高い
- **ボトムアップ法**: キーポイントのグループ化が難しく、密集したシーンでは誤差が生じやすい
- **シングルステージ法**: 一貫性のある高精度な結果を得るのが難しい

## 新規性
:::note info
Diffusionについては、モデル構造をある程度は理解しておくことが、必須教養になりそうな気がします...
:::
DiffusionPoseの新規性は以下の点にある：
1. **拡散モデルの利用**: 2D姿勢推定をノイズのあるヒートマップからヒートマップを生成する問題として定式化し、拡散モデルを利用する
2. **構造ガイド拡散デコーダ (SGDD)**: 人間の構造情報を条件として利用し、キーポイントヒートマップの生成を改善する
3. **高解像度SGDD**: 高解像度のヒートマップを生成することで、精度を向上させる

## 方法論
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/7db58bbf-98e1-4756-b0b3-402fb7c11273.png)
- **前方拡散プロセス (FDP)**: キーポイントにガウシアンノイズを加えてノイズのあるヒートマップを生成し、特徴マスクを作成する
- **モデル前方プロセス (MFP)**: 入力画像から抽出した特徴と特徴マスクを用いて、拡散モデルの条件を生成する
- **逆拡散プロセス (RDP)**: 初期化されたヒートマップから高品質のヒートマップを生成し、キーポイントの座標を復元する

## モデル学習・推論の流れ
### Training
1. 拡散ステップを設定
2. 入力画像をエンコーダにて画像特徴xに変換
3. 画像特徴xよりヒートマップを生成する、このヒートマップにノイズを付加していく。
4. キーポイントをノイズのあるキーポイントに変換する
5. ノイズありキーポイントからノイズのあるヒートマップ・特徴マスクを生成する。
この特徴マスクにはキーポイントマスクとスケルトンマスクが含まれている。    
6. 特徴x、キーポイントマスク、スケルトンマスクを使用し、一部がマスクされた特徴xk,xsを生成する。
7. spatial-channel cross-attention (SC-CA) モジュールを用いて、条件付き特徴を生成する。
8. 拡散デコーダによってノイズのあるヒートマップから推定ヒートマップを生成する。

### LOSS
1. 推定ヒートマップとGTヒートマップとの間のL2損失を計算する
2. エンコーダの出力（画像特徴量）とGTヒートマップとのL2損失を計算する

### Inference
1. エンコーダで画像から画像特徴xを抽出
2. 初期化：特徴xを用いて、ヒートマップを生成する。
3. このヒートマップをデノイズ過程のスタート地点とする。
4. ヒートマップからキーポイントをデコードする。
5. キーポイントから特徴マスク（キーポイントマスク、スケルトンマスク）を生成する。
6. マスクされた特徴の生成
7. 条件付き特徴の生成：SC-CAモジュールを用いて、条件付き特徴を生成する
8. デコーダによって、ノイズのあるヒートマップから次ステップのヒートマップを生成する。
9. 最終ステップで最終的なヒートマップからキーポイントをデコードする


## 結果と評価
DiffusionPoseは、COCO、CrowdPose、AI Challengeデータセットで評価され、従来手法に勝る結果を示した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/0d0e87a7-1254-38f4-6e3b-f2ba3fd3e8db.png)


## 結論
DiffusionPoseは、2D姿勢推定をノイズのあるヒートマップから高品質なヒートマップを生成する新しいアプローチを提案している．拡散モデルと構造ガイド拡散デコーダを利用することで、従来の手法に比べて精度と効率が大幅に向上している．このアプローチは、今後の姿勢推定研究において新たな標準となる可能性がある．
Rustのsimilar使って差分比較してみた



# はじめに

Rustのsimilarクレートで差分比較をしてみようと思います

といってもHelloWorld的な紹介です☀️

# プロジェクトの作成

Rustでsimilarクレートを使う。

古いテキストと新しいテキストからTextDiffを作り

ChangeTagのDelete、Insert、EqualとChangeの差分を出力する

コードはこれだけで実装完了！！(お手軽なクレート📚)

下記examplesを参考にしました

https://github.com/mitsuhiko/similar/tree/main/examples

```rust:lib.rs

// 省略

#[wasm_bindgen]
pub fn text_diff(txtold :String,txtnew :String) -> String {
    let diff = TextDiff::from_lines(&txtold, &txtnew);

    let mut result = String::new();
    for change in diff.iter_all_changes() {
        let sign = match change.tag() {
            ChangeTag::Delete => "-",
            ChangeTag::Insert => "+",
            ChangeTag::Equal => " ",
        };
        result.push_str(&format!("{}{}", sign, change));
        result.push('\n');
    }

    result
}

// 省略

```


# 今回の成果物

デモURL

https://shisojuice.github.io/Rust_Diff/


デモ画像

![Rustのsimilar使って差分比較してみた_001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777149/e2765031-a9b6-a6e8-a748-2dfa23bc161b.jpeg)


ソース

https://github.com/shisojuice/Rust_Diff


# まとめ

今回はRustのsimilarを使って差分比較してみました。📝

これだけの実装で簡単に差分比較できるので今後も注目していきたいです。

similarについて

https://docs.rs/similar/latest/similar/


※間違い等ありましたら、ご指摘いただけると助かります。
.NET9のリリースに向けて読んでおきたいアナウンス一覧

.NET 9 からアップデートアナウンスは GitHub で公開されるようになりました。  
正式リリースまでの各段階のアナウンスをまとめます。

※ .NET 8 までは [https://devblogs.microsoft.com/](https://devblogs.microsoft.com/?WT.mc_id=DT-MVP-5002209) で公開されていました。

# プレビュー版

- https://github.com/dotnet/announcements/issues/297
- https://github.com/dotnet/announcements/issues/301
- https://github.com/dotnet/announcements/issues/305
- https://github.com/dotnet/announcements/issues/309
- https://github.com/dotnet/announcements/issues/310
- https://github.com/dotnet/announcements/issues/316

---

ASP.NET Core, Entity Framework Core, .NET MAUI などのアナウンスも上記の Issue から参照することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1136/2d460f97-de89-f0f1-61ec-30ba43a49c14.png)
【アメリカ出張で感じたアメリカのテクノロジー事情】日本でも確実に広まる！？反キャッシュレス決済派が屈するアメリカのキャッシュレス決済事情。。。

# はじめに
クレジットカードは持たない派！
バーコード決済は会員にならない派だった私が、アメリカでキャッシュレス決済を抵抗無く使うようになるまでに至った心変わりのレポートです。
平たく言うと、ハッカソンで受賞した最優秀賞の副賞で、アメリカ出張に行ってきて、アメリカのテクノロジー、すげぇーって言うのを感じたので、その備忘録です。。。

# 何故キャッシュレス決済にくっしたのか？
最初に言っておきます。
私はキャッシュレス決済を便利だから使ったのではありません。
キャッシュレス決済しかないからキャッシュレス決済で支払ったんです。
何故？などと考える余地等無いです。強制的に押し付けられるんです！！　
と言うことで、アメリカではキャッシュ(現金)で支払が出来ないことはあっても、キャッシュレスでお支払出来ないことは一度もありませんでした。

本当にビックリしたのは2024年現在大谷翔平選手が所属するドジャースのグッズショップ！！
バーコードリーダーとキャッシュレス決済のデバイスはあれど、お金を出し入れするドロアが無いではないですか！！
確かにキャッシュレス決済に統一してしまえば初期投資も抑えられ、商売を始めやすくなるのはメリットの１つですね！


# キャッシュレス決済の浸透要因を考察する
長々と導入をしてきましたが、では何故アメリカはキャッシュレス決済が進んでいるかと言うと、２つの要因が考えられる。

１つ目の要因は、アメリカの広大な土地が関係してきます。
アメリカは広大な土地となりますので、現物(キャッシュ)を運ぶ輸送費も膨大になります。
そして、現物があると偽札問題が付いて回るため、一定周期で新札の発行を余儀無くされます。
それ以外にも強盗や盗難等も考慮し、電子化させた事情があります。

ただ、それだけではキャッシュレス決済はここまで浸透しなかったと考えられる。
アメリカでキャッシュレス決済が浸透したもう１つの要因が、小切手決済と言う文化です。

小切手全体の使用率として、4分の3がアメリカで切られているそうです。

https://toyokeizai.net/articles/-/612277?display=b

この事から以前より負債を抱える事に抵抗感が薄かったと考えられますし、この風土がキャッシュレス決済を浸透させたと考えられています。

負債への抵抗感は慣習もあるので仕方ありません。
かく言う私も一時的にで負債となってしまう小切手やクレジットカードには抵抗がありますし。。。
口座引き落としが活発なドイツやオーストリア、スイスなどのドイツ語圏は未だキャッシュレス決済よりも現金決済が一般的であることから、負債への抵抗感が少なからずあるのでしょう。

ですが、この負債への抵抗感が薄れ、キャッシュレス決済への抵抗が無くなった時、キャッシュレス決済市場のテクノロジーは爆発的に進歩しますので、また別の機会に今のキャッシュレス業界を支えるブロックチェーン技術について、触れたいと思います。

# 最後に
はい、ということで今回は『アメリカ出張で感じたアメリカのテクノロジー事情』の内、『アメリカのキャッシュレス事情』について記載しました。
最後になりますが、この記事が皆さんの成長の少しでも手助けになることを祈って、この記事を閉めたいと思います。
最後までお読みいただきありがとうございました。
C_TS4FI_2021 SAP Certified Associate - SAP S/4HANA 2021 for Financial Accounting対策（16/100）

【16日目】
トピック2：総勘定元帳（1/20）

≪問題16≫
SAP S/4 HANAにおける会社の特性は何ですか。
正しい答えを2つ選択してください。
□連結の対象になる。
□会社コードに割り当てることができる。
□組織内の個別の事業分野を表す。
□組織内の原価と収益の責任を負う。

≪解答≫
■連結の対象になる。
■会社コードに割り当てることができる。
□組織内の個別の事業分野を表す。
□組織内の原価と収益の責任を負う。

≪解説≫
◆会社（連結会計として6桁のコード）は、連結決算の単位となる企業グループを表します。
◆会社には複数の会社コードを割り当てることが可能です。
メモ書き

## 思考のメモ書きをする
分からないことがあって頭の中がモヤモヤしたときは、A4用紙に思考を書き出してみましょう。

「メモ書き」は、こわばった頭をほぐす格好の柔軟体操であり、頭を鍛える手軽な練習方法です。頭に浮かぶ疑問、アイデアを即座に書き留めることで、頭がどんどん動くようになり、気持ちも整理されるようになります
。自意識にとらわれ悩むことがなくなっていく。「メモ書き」により、誰でも、この境地にかなり早く到達。自分でも驚くほど頭の回転が速くなります。
“メモ書き”は、書籍『ゼロ秒思考』の中で著者の赤羽雄二氏が推奨している思考のトレーニング方法です。



## メモ書きの性能
頭が整理される
自信が出てポジティブになる
自分の状況を冷静に客観視できる
行動を起こし成果に繋げられる

## メモ書きの標準的な方法

A4用紙を数枚用意します（1回あたり10枚程度）
まず、A4用紙（ヨコ使い）の左上に下線付きのタイトルを書きます。
タイトル（＝メモに書くテーマ）は、何でもよい。頭に浮かんだまま躊躇せずに書く。たとえば、こんな感じになる。

〈仕事に関するタイトル〉
・どうすれば仕事のスピードを上げられるか？
・仕事がうまくできる時、できない時
・どういう時、仕事が中断してしまうのか？
・どうやって企画書を素早くまとめるか？
・今日明日で仕上げてしまうこと
・来週の会議に向けた準備

　このように、頭に浮かぶ言葉そのものをタイトルにする。むずかしく考えることは何もない。むずかしく考えてはいけない。人に見せるものでもないので、頭に浮かんだフレーズをそのままA4用紙の左上にさっと書いてしまう。
その時に頭の中で思い浮かんだ内容を、素早く率直に箇条書きします。
下記を、1枚あたり【1分間】【1タイトル】【4〜6項目】のペースで、数枚程度、繰り返します。
以上が、書籍『ゼロ秒思考』の中で紹介されている“メモ書き”の効能や方法ですが、厳密な決まりはありません。“メモ書き”は、思考の整理だけでなく感情の整理にもつながります。学習内容に関わらないことについても活用できます。積極的に取り入れてみましょう！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3738088/753d84a3-bd5e-961f-2187-87474d19202f.png)
[AWS]請求権限を持ったユーザーでも請求画面が見れない？

かなり短めですが備忘録として残します

## ・起きた事
Billing権限を持つユーザーやロールであれば請求を確認できると思いますが、
権限を持ったユーザー、またadmin権限ユーザーでも請求画面がDenyになってしまう現象が発生しました…

ただこの時点で権限の問題ではなく、アカウント単位の問題だという事は切り分けできたとも言えます。
対象のアカウントには親アカウントが紐づいていた為、あまり原因を絞り切れてはいなかったです。

## ・解決方法

やはりアカウントの設定の話でした。ただ親アカウントは関係なかったです。

:::note info
「請求情報にアクセスを可能にする方法」
1\. ルートアカウントでAWSコンソールにログインする
2\. 右上のアカウント名をクリックし、アカウントページを開く
3\. 開いたページ内にある[IAM ユーザーおよびロールによる請求情報へのアクセス]の編集をクリック
4\. IAM アクセスのアクティブ化にチェックをいれ更新をクリック
:::

この状態だとどのユーザーも見られない↓

![無効化済み.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/ac9ac6da-685b-37ca-9dd6-352beec23ae8.png)

## ・最後に
こういう事は少しでも頭に入っておけばすぐに解決しますが…
同じような誰かの役に立てばと思います
論文読み：CrowdDiff: Multi-hypothesis Crowd Density Estimation using Diffusion Models

# CrowdDiff: Multi-hypothesis Crowd Density Estimation using Diffusion Models
[paper](https://openaccess.thecvf.com/content/CVPR2024/papers/Ranasinghe_CrowdDiff_Multi-hypothesis_Crowd_Density_Estimation_using_Diffusion_Models_CVPR_2024_paper.pdf)

https://github.com/dylran/crowddiff

![jhu 02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/bc9f2055-e5da-fbda-ff07-c3c38cffe7e0.gif)

:::note info
分かりにくいですけど、大勢の人が写っています。
それぞれ一人一人の頭上に検出した点が打たれています...！
:::

## 概要
CrowdDiffは、群集密度推定のための新しい手法を提案している．従来の手法では、広いガウシアンカーネルを使用して密度マップの地上真値を生成するため、背景ノイズの蓄積や密度の損失が問題となっていた．
CrowdDiffは、条件付き拡散モデルを使用して密度マップを予測することで、これらの問題を解決する．拡散モデルは、生成中に高い忠実度を示し、逆拡散プロセスとして群集密度マップを生成する．さらに、拡散プロセスの中間ステップはノイズが多いため、トレーニング時にのみ直接群集推定のための回帰ブランチを組み込んで特徴学習を改善している．

:::note info
Diffusionをうまく使った一例。
直近の研究を調べると、本当にDiffusionを目にすることが多いです。
:::

## 従来手法との比較
従来の群集密度推定手法には、密度ベースの方法と局所化ベースの方法がある．密度ベースの方法は、背景ノイズの影響を受けやすく、群集の密度分布の変動に対応できないことが課題である．一方、局所化ベースの方法は、隣接する点の干渉がないため、背景ノイズの蓄積を回避できるが、群集密度ヒューリスティックスが必要である．CrowdDiffは、これらの課題を克服するために、狭いガウシアンカーネルを使用し、生成モデルを用いて複数の密度マップを生成することで、より高精度な群集密度推定を実現している．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/c79e4ee3-4f18-500b-08c6-6e9a59f4165b.png)


## 新規性
CrowdDiffの新規性は以下の点にある：
1. **狭いガウシアンカーネルの使用**: 狭いカーネルを使用することで、密度マップのピクセル値の分布を維持し、密度の学習プロセスを簡略化する
2. **マルチリアライゼーション**: 拡散モデルの確率的性質を利用して、複数の密度マップを生成し、パフォーマンスを向上させる
3. **回帰ブランチの導入**: トレーニング時にのみ回帰ブランチを使用し、特徴学習を改善する
4. **群集マップ融合**: 複数のドットマップを融合し、群集カウントパフォーマンスを向上させるメカニズムを導入する

## 方法論
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/3057846e-c3ff-4505-5ccf-fd6acd80e67a.png)

- **狭いカーネル**: 地上真値密度マップを生成する際に狭いガウシアンカーネルを使用し、密度ピクセル値の分布を維持
- **回帰ブランチ**: トレーニング時にのみ使用され、エンコーダ・デコーダ特徴から群集カウントを推定する
- **群集マップ融合**: 密度マップの位置情報を基に、重複する点を排除し、新しい情報を融合する

拡散モデルを用いて、混雑した人物のHeatMapを出力する

Heatmapのしきい値以上のピクセルには人物が存在するという処理の流れ

## Training

1. データに画像入力
2. エンコーダ・デコーダの初期化（ImageNetの初期値）
3. 拡散プロセス：学習データの密度マップに対して、ノイズを段階的に追加する
    損失関数は、ノイズ予測の誤差（L2誤差）・変分下限（VLB）を組み合わせたもの
4. 逆拡散プロセス：ノイズの多い密度マップから元の密度マップを再構築する
    Conditionとして元画像（混雑している人物の画像）を入力する
5. 拡散プロセスと並行してカウントブランチも訓練する.カウントブランチ：エンコーダ・デコーダからの特徴を使用し、直接的に群衆の数を推測する回帰タスクを行う部分。特徴学習が強化され、密度マップの生成精度が向上する.損失関数は予測された群衆カウントとGTカウントとのL1損失。 
6. 損失関数：最終的な損失は、拡散プロセス学習時の損失に加えて、カウントブランチの損失を荷重和として計算する。
## Inference
1. 群衆画像が入力される
2. 入力画像がエンコーダにより特徴マップを生成する
3. 初期のノイズ付き密度マップを生成するためにガウスノイズをサンプリングする（この画像が推論開始点）
4. 逆拡散プロセス：ノイズ付き密度マップをデノイズしていき、クリーンな密度マップを生成
5. しきい値処理：得られた密度マップは各ピクセルが群衆密度を表す値を持つ画像に当たるので、しきい値処理を行い、重複する点を排除して最終的な群衆マップを生成
6. 最終的なカウント：最終的に得た密度マップより、点の数をカウントし、群衆の総数を算出

## 結果と評価
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/2170f043-fa28-7d50-f599-90fc0a0ad5fa.png)

CrowdDiffは、JHU-Crowd++、ShanghaiTech、UCF-CC-50、UCF-QNRF、NWPU-Crowdなどの公開データセットにおいて、従来手法を上回るパフォーマンスを示している．

## 結論
CrowdDiffは、群集密度マップ生成を拡散プロセスとして扱う新しい群集カウントフレームワークを提案している．狭いガウシアンカーネルの使用と確率的なマルチリアライゼーションにより、ノイズに対する耐性を向上させ、より高品質な密度マップを生成することができる．これにより、従来の密度ベースおよび局所化ベースの手法に対する新しいアプローチを提供している．
Gitを理解する（導入編）

みなさんはじめまして、hagixです。

仕事でGitHubの導入や運用支援、ActionsやCopilotを用いた生産性向上の支援などを担当しております。

効果的な支援を行うためにはGitHubに関する深い知識が必要です。
また、開発業務全体を効率化させるためには、GitやGitHubの知識だけではなく、CI/CDなどのDevOpsの知識や、周辺ツールなど、幅広い知識が必要となります。
そういった、GitHubをベースとした生産性向上に関する知識の深掘り、整理を行うために、Qiitaを始めてみました。
また、Qiitaを使って多くの方に情報を発信していければと考えておりますので、よろしくお願いいたします。

# Gitとは？
GitHubの話を始める前に、まずはGitに関してお話ししたいと思います。

Gitとは何か。
一言で言うと、コンテンツトラッカーという言い方ができると思います。
ソースコードやドキュメントなど、何かしらのコンテンツの変更点を断面として取得し、バージョンとして管理するためのサービスです。
とはいえ、コンテンツのバージョンを管理するためのサービスや製品は世の中にたくさん溢れかえっています。
Git最大の特徴は、*分散型*のバージョン管理システムであるということです。

## バージョン管理とは
ここで、先にバージョン管理とは何か？と言うことについてお話しします。
バージョン管理システムとは、あるコンテンツに対し、誰が、いつ、何をしたのか？といった、変更履歴を記録・管理することを言います。
例えば以下のような内容を記録・管理しておきます。

 - 作成者
 - 作成日時
 - 更新日時
 - 更新者
 - 更新内容
 - 更新に対するコメント

 これらの情報を記録・管理しておくことで、以下のようなことが可能となります。

 - 変更の前後で差分を取り、確認することが出来る
 - 変更点を戻すことで、以前の状態に戻すことが出来る
 - 誤りやミスが発生した時に変更履歴を追っていくことで、いつ、誰が咥えた変更が原因なのか、容易に把握が出来る

このように、バージョン管理というものはとても大事なことですが、人手で都度、これらの情報を記録していくことはとても大変です。
そのため、通常バージョン管理システムと呼ばれるものを利用することが一般的です。

### バージョン管理システムの歴史
最初のバージョン管理システムはIBMのOS/360 IEBUPDATEソフトウェア更新ツールだったと言われております。
その後、ソースコード管理用にSCCSが発表され、RCS、CVS、SVNと続き、Gitが発表されています。

#### SCCSとは
SCCSとは、 Source Code Control Systemの略です。
世界で初のソースコードを管理するための本格的なシステムで、１９７２年にベル研究所によって開発されました。
私の担当したシステムでも、２０１４年ごろにはまだ使われているシステムもありました。

#### RCSとは
RCSとは、Revision　Control　Systemの略です。
１９８０年にパデュー大学で開発されました。
主にプログラムや文書などのテキスト管理に使われるもので、バージョンの記録にはdiffユーティリティを利用していました。
バージョン管理としてはまだ原始的なもので、ファイル単位での管理しか行われず、プロジェクト全体を管理するという概念もありませんでした。
また、複数のユーザが同時に作業することも想定できていませんでした。

#### CVSとは
CVSとは、Concurrent Versions　Systemの略です。
RCSをより一層拡張したもので、CVSサーバを用意し、複数人での作業を記録、管理することができました。
ただし、ファイル名の変更削除や、ディレクトリ名の変更削除がうまくできない、アトミック性を満たさないなど、多くの欠点も持っていておりました。

#### SVNとは
SVNは正式名称はApache　Subversionのことです。
もともとはCollabNetが開発していたものを２００９年にApache財団に寄贈され、Apache　Subversionとなりました。
SVNはSubversionの抱えていた多くの問題点を改善しています。
また、CVSの後継として開発されたため、多くの点でCVSと似た機能を持っております。

例えば、CVSではできなかったディレクトリの移動や削除も可能となりました。
そのため、CVSでは最初に決めたディレクトリ構成から変更が難しいという問題がありましたが、SVNではディレクトリ構成を固める前からプロジェクトを開始することが出来るなどの利点がありました。

ただし、集中型（クライアント・サーバ型）のシステムであり、分散型ではなかったため、スケールしずらい、耐障害性がないなどの問題点がありました。

#### Gitとは
GitはLinuxカーネルのソースコード管理に用いるためにリーナス・トーバルズによって開発されました。
Linuxカーネルのような巨大なプロジェクトでバージョン管理ができるよう、分散型で開発されております。

# まとめ
この記事では、Gitに関する説明を行うための前提知識として、

 - バージョン管理とは何か
 - バージョン管理システムの歴史

についてお話しました。
次回は、いよいよ、Gitに関する詳細を説明したいと思います。
論文読み：UniHCP: A Unified Model for Human-Centric Perceptions

# UniHCP: A Unified Model for Human-Centric Perceptions
CVPR 2023
[paper](https://openaccess.thecvf.com/content/CVPR2023/papers/Ci_UniHCP_A_Unified_Model_for_Human-Centric_Perceptions_CVPR_2023_paper.pdf)
[github](https://github.com/OpenGVLab/UniHCP)

## 概要
UniHCPは、人物中心の認識（姿勢推定、人間の解析、歩行者検出、人物再識別など）を一つのモデルで統一的に処理する新しいフレームワークを提案している．このモデルは、33の人物中心のデータセットで大規模な共同学習を行い、単一のビジョントランスフォーマーアーキテクチャを使用している．これにより、特定のタスクに適応する際に、新しい最先端のパフォーマンスを達成し、専門のモデルよりも優れた結果を示している．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/628aa493-e90d-6ba0-1937-a5acc594c8da.png)


:::note info
物体検出がセグメントや姿勢推定に、姿勢推定がメッシュや動作予測に...などタスクが高度になる程、他のタスクと組み合わさっていくようなものだと思うので、それらを一つにまとめられると強い。
:::

## 従来手法との比較
従来の人物中心の認識タスクは、それぞれが異なるセマンティック情報に焦点を当てていたが、すべてが人間の体の基本構造に依存している．以前の研究では、これらのタスクの同質性を利用して、共通のニューラルネットワークを使用して共同でトレーニングを行う試みがあったが、全ての人物中心のタスクを統一的に扱う一般的なモデルの設計は行われていなかった．UniHCPは、このギャップを埋めるために提案されたものである．

## 新規性
UniHCPの新規性は以下の点にある：
1. **統一タスククエリ**: すべてのデータセットで共有されるタスククエリを定義し、異なるタスクとデータセット間で共有可能なタスクガイドインタープリターを使用
2. **エンコーダ・デコーダアーキテクチャ**: 単純なビジョントランスフォーマーを用いたエンコーダ・デコーダアーキテクチャを採用し、すべての人物中心のタスクとデータセットで汎用的な知識を抽出
3. **大規模共同学習**: 33のラベル付き人物中心のデータセットで大規模な共同学習を行い、異なるタスク間での知識共有を最大化

## 方法論
- **タスク非依存エンコーダ**: 異なる解像度の入力画像に対応するために、共有可能な学習済みポジショナルエンベディングを使用
- **タスク特定クエリによるデコーダ**: タスククエリを用いて、エンコーダの特徴からタスク特定の情報を抽出
- **タスクガイドインタープリター**: 各タスクに応じた出力ユニットを生成し、タスクごとの知識を共有

## 結果と評価
複数の人物中心のタスクベンチマークにおいて強力なベースラインを上回る性能を示している．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/cd186832-dae7-cb3e-0f59-eba122b12ad6.png)
余らせたESP32マイコンの使い道

# はじめに
[余らせたラズパイの使い道](https://qiita.com/Miutaku/items/50f5468c3dc2b9335247)を読んで、「そういえばうちに余ってるマイコンの使い道ないかな～」と思い立って書いた記事です。

どんな家庭にも、電子工作に飽きて放置されたマイコンや買いすぎて放置されている子がいますよね。
実際、うちにもESP32が6個ほど転がっています。
そんなお手元のかわいそうな余り物マイコンを有用活用していただければ幸いです。


# 使い道
## OpenHaystack(AirTag互換)
OpenHaystackは、AppleのAirTagで使用されているFindMyネットワークに汎用のBLE機器を接続させ、位置情報を得るOSSプロジェクトです。

https://github.com/seemoo-lab/openhaystack

余り物マイコンでAirTagを作ってみるのはいかがでしょうか。

## センサーbot
家に転がってる温度センサーやAliにある怪しめなCO2センサーを組み合わせて、室温とかCO2濃度とかのアラートを自分へ飛ばすbotにしてしまうもいいかもしれません。

[余らせたラズパイの使い道](https://qiita.com/Miutaku/items/50f5468c3dc2b9335247)にもありますが、高価なラズパイをこれに使うのはちょっと勿体ない気がしました。

うまくやれれば市販のものより安価でつくれます。多分。

## Bluetoothスピーカー
家にあるスピーカーと組み合わせて、Bluetoothスピーカーを作るのもいいかもしれません。

https://qiita.com/Mobu_Kyoto/items/de979cfd86fedf67f50a

割とお手軽そうでいいですね。

## 水やりの自動化
こういうの。

https://ameblo.jp/kenjii70/entry-12818036551.html

水分センサーとエアーポンプを組み合わせて水やりを自動化します。
土壌の水分に応じてポンプを動かすだけなので割と簡単に実装できそうです。

自動化で夏場の暑さと蚊の猛攻から逃れましょう。

## 開閉するごみ箱
ごみ箱の蓋開けるのめんどくさいですよね。
手をかざすだけで開くようにしてしまいましょう。

https://monosyuuri.com/ippin/esp32-automatic-opening-closing-trash-can

IRセンサとサーボだけで作れるそうなのでお手軽に試せます。

## カーテンの自動開閉
switchbotにもあるあれです。
買うと高いんですよね。自作しましょう。

https://note.com/hebimalu/n/n1daca7dad8c2

## GPSローガー
5年くらい前に、電子工作のテーマとしてちょっと流行りましたよね。
正直スマホがあるのでうーーーんって感じですが、余り物の使い道としてはいいのかなとも思います。

https://gijin94yobu.hatenablog.jp/entry/2020/05/25/150006

# おわりに
安いからといってついついまとめて買ってしまうマイコン類ですが、意外と余るんですよね。
しかし、こうした余り物も工夫次第でいい感じのものになるかもしれません。
この記事を読んで、余らせている可哀想なマイコンを有用活用していただければ幸いです。

他にもこんなのあるよ！があれば是非コメントで教えて下さい。

それでは。
【アメリカ出張で感じたアメリカのテクノロジー事情】もう実現されていた！！完全自動運転のタクシー『Waymo』に乗ってみた件

# 概要
昨年度のハッカソンで最優秀賞を獲得した時の副賞のアメリカ企業視察に、2024年6月に行ってきましたので、その時衝撃だったテクノロジーを御紹介させて頂きます。

今回はその中でも随一！！
完全自動運転タクシー・Waymo
を御紹介させて頂きます。

![20240619_141453.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/d1bc8f18-9c5e-2978-026b-3dd6d64b56d2.jpeg)


そうなんです！！
2024年6月現在、アメリカでは一部の区域(私が乗車したのはサンフランシスコ)において、完全自動運転の車が走行してるんです！！
しかもタクシーなんです！！

だから、アプリを入れて支払い方法登録さえ済ませておけば、誰でも呼び出せるんです！！


# アメリカの完全自動運転事情
アメリカで完全自動運転のタクシーを走行させている会社は、現在は１強で『Waymo』がほぼ独占しております。
2023年10月までは『Cruise』と言う会社も自動運転タクシーを運営していたが2023年10月、完全自動運転タクシーがサンフランシスコでひき逃げし、更に撥ね飛ばした被害者を更に轢くと言う不祥事を起こし、営業停止して以降、１強と言われております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/ac395bdf-88c6-a6ef-5f9b-cbf4c389c87a.png)


一方『Waymo』はGoogleの親会社Alphabetの子会社で、元はGoogleの自動運転自動車開発部門が分社化して出来た会社で、現在サンフランシスコで唯一の完全自動運転タクシーを運営している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/d4757b9a-113c-6e00-e350-5b5af33413da.png)


# Waymoに乗車時の動画
Qiitaは直接動画を貼り付けることが出来ないので、
一旦、X（旧Twitter）に投稿いたしましたので、そちらのポスト内の動画を参考にしてみてください。

<iframe width="853" height="480" src="https://www.youtube.com/embed/1kHLnkzLeCM" title="アメリカの完全自動運転タクシーWaymoに乗ってみた・・・マジヤベェ" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

いかがでしょうか？
信号が赤になると止まるし、青になると進むし、自動でハンドルを切るし・・・
とにかくとても丁寧な運転で、完全自動運転であることを忘れてしまいそうです。
しかも運転席と助手席の間にセンサーで検知した情報等が、大きなタブレットに表示されていて、見ていて飽きません！！
しかも、最短距離で目的地に向かってくれるので、有人タクシーであるあるの遠回りされる心配もないし、とても快適でした。

# 日本に完全自動運転タクシーが導入されるまで
日本でも完全自動運転技術は研究が進められているが、まだレベル４程度の技術力である。
電動キックボードのLoopも約４年後、日本で出回るようになりましたし、大体４年程度で日本にも完全自動運転タクシーの運用が展開されるかもしれません。
その間に法の整備等、超えないといけない壁は無数にあるかもしれませんが、アメリカの完全自動運転タクシーを参考に超えていけると信じております。

# 最後に
はい、ということで今回は『アメリカ出張で感じたアメリカのテクノロジー事情』の内、『完全自動運転Waymo』を記載しました。
最後になりますが、この記事が皆さんの成長の少しでも手助けになることを祈って、この記事を閉めたいと思います。
最後までお読みいただきありがとうございました。
Rubyでデザインパターン (8) AbstractFactoryパターン

## この記事は何
デザインパターンについて、Rubyでどのような使い方ができるかをまとめた記事です。
デザインパターン自体の解説は詳しく行いません。

## AbstractFactoryパターンとは
AbstractFactoryパターンとは、 インターフェースによって関連するまたは依存しあうオブジェクトのファミリーを、具体的なクラスを指定せずに生成するためのパターンです。

詳しくはこちらをご覧ください。

https://qiita.com/kaikusakari/items/8943247246cb243b8fd6

## Rubyでのコード例

以下は、RubyでAbstractFactoryパターンを実装する例です。
インターフェースを`module`を使って実装しています。


```rb
module AbstractProductA
  def useful_function_a
    raise NotImplementedError
  end
end

class ConcreteProductA1
  include AbstractProductA
  
  def useful_function_a
    'The result of the product A1.'
  end
end

class ConcreteProductA2
  include AbstractProductA
  def useful_function_a
    'The result of the product A2.'
  end
end

module AbstractProductB
  def useful_function_b
    raise NotImplementedError
  end
end

class ConcreteProductB1
  include AbstractProductB
  def useful_function_b
    'The result of the product B1.'
  end
end

class ConcreteProductB2
  include AbstractProductB
  def useful_function_b
    'The result of the product B2.'
  end
end

module AbstractFactory
  def create_product_a
    raise NotImplementedError
  end

  def create_product_b
    raise NotImplementedError
  end
end

class ConcreteFactory1
  include AbstractFactory

  def create_product_a
    ConcreteProductA1.new
  end

  def create_product_b
    ConcreteProductB1.new
  end
end

class ConcreteFactory2
  include AbstractFactory

  def create_product_a
    ConcreteProductA2.new
  end

  def create_product_b
    ConcreteProductB2.new
  end
end

def execution(factory)
  product_a = factory.create_product_a
  product_b = factory.create_product_b

  puts product_a.useful_function_a
  puts product_b.useful_function_b
end

execution(ConcreteFactory1.new)
execution(ConcreteFactory2.new)
```

```:実行結果
The result of the product A1.
The result of the product B1.
The result of the product A2.
The result of the product B2.
```
論文読み：Neural Interactive Keypoint Detection

# Neural Interactive Keypoint Detection
ICCV 2023
[paper](https://openaccess.thecvf.com/content/ICCV2023/papers/Yang_Neural_Interactive_Keypoint_Detection_ICCV_2023_paper.pdf)
[github](https://github.com/IDEA-Research/Click-Pose)

## 概要
Neural Interactive Keypoint Detectionは、Click-Poseと呼ばれるエンドツーエンドのインタラクティブキーポイント検出フレームワークを提案している．
このフレームワークは、2Dキーポイントアノテーションのラベリングコストを手動のみのアノテーションと比較して10倍以上削減できる．
Click-Poseは、ユーザーフィードバックとニューラルキーポイント検出器を協力させ、インタラクティブに予測されたキーポイントを修正し、より迅速かつ効果的なアノテーションプロセスを実現する．具体的には、地上真のポーズと4つの典型的なポーズエラーをデコーダに入力し、モデルが正しいポーズを再構築するためのポーズエラーモデリング戦略を設計し、モデルの自己修正能力を強化する．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/d2f4e8d0-81bf-d0e2-a972-f618c0d55374.png)

:::note info
ユーザーは、モデルが出力した暫定のキーポイントに対して、間違っている箇所があれば、そこを修正してあげるだけ。それによって、モデルはキーポイント全体を修正する！
:::


## 従来手法との比較
従来のマルチパーソンポーズ推定モデルは、トップダウン法とボトムアップ法の二つのカテゴリに分かれる：
- **トップダウン法**: 各人物を検出し、その領域内でポーズ推定を行う
- **ボトムアップ法**: キーポイントを検出し、それをグループ化して個々の人物のポーズを推定する

これらの手法には高い性能を示すものもあるが、特に手動のアノテーションには多大な労力が必要であり、誤検出や高密度なシーンでの問題が残っていた．

## 新規性
Click-Poseの新規性は以下の点にある：
1. **ポーズエラーモデリング**: モデルが自己修正能力を持つように、4つの典型的なポーズエラー（ジッター、ミス、スワップ、インバージョン）を含むエラーポーズクエリを導入し、デコーダで正しいポーズを再構築するタスクを設定
2. **インタラクティブフィードバックループ**: ユーザーのクリックを受け取り、一部のキーポイントを修正し、それを元に他のキーポイントを更新することで、最小限の手動修正で高精度なアノテーションを実現

## 方法論
- **ポーズエラーモデリング**: 地上真のキーポイントと4つのエラーポーズをデコーダに入力し、正確なポーズを再構築するタスクを設定
- **インタラクティブフィードバックループ**: ユーザーのクリックに基づいてキーポイントを修正し、デコーダを使用して他のキーポイントを更新
- **クエリの初期化**: 予測されたキーポイントから修正された位置クエリを取得し、ラベルエンベディングを使用して修正されたコンテンツクエリを初期化


## 結論
Click-Poseは、ユーザーのインタラクションを活用して高精度で効率的なキーポイントアノテーションを実現する新しいエンドツーエンドフレームワークを提案している．この手法は、従来のモデルの課題を克服し、様々なシーンでの応用が期待される．今後の研究では、全身アノテーションやマルチタスクアノテーション、3Dアノテーションなど、さらに多くの応用分野への展開が期待される．
「Python 3 エンジニア認定データ分析試験」合格体験記

# はじめに
Python 3 エンジニア認定データ分析試験を受験、合格したので体験記を残していく。

# 受験勉強前のスペック
「Python 3 エンジニア認定基礎試験」を取得済
仕事でNumpy, Pandas, Matplotlibは触っている。

# 勉強方法
試験1週間前からひたすら模擬試験をループする。
以下のそれぞれの試験を1~2周まわしていく。
わからない機能が出てきたらその都度調べていく。

- PRIME STUDY(https://study.prime-strategy.co.jp/)
- ExamApp(https://python-basic.com/)
- ディープロ(https://diver.diveintocode.jp/dive_into_exam)

# 結果
975点で合格。
Matplotlibのところで一箇所落としたがかなり余裕で合格。
その日の夕食は少し豪華になりました。
gRPCの公式ページIntroduction to gRPCを記事に

## gRPCとは？
gRPCは、異なるマシン上のサーバーアプリケーションのメソッドを、ローカルオブジェクトのように直接呼び出すことができるリモートプロシージャコール（RPC）システムです。これにより、分散アプリケーションやサービスの作成が容易になります。
gRPCは、サービスを定義し、リモートで呼び出すことができるメソッドとそのパラメータおよび戻り値の型を指定するという考えに基づいています。サーバー側では、このインターフェースを実装し、クライアントからの呼び出しを処理するgRPCサーバーを実行します。クライアント側では、サーバーと同じメソッドを提供するスタブ（クライアント）が存在します。

#### gRPCのコンセプト図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605103/8e8ebf5e-1ae4-738a-f059-9aedc0c23803.png)

gRPCのクライアントとサーバーは、Googleのサーバーからデスクトップまで、さまざまな環境で実行および通信することができます。また、gRPCがサポートする任意の言語で記述することができます。例えば、JavaでgRPCサーバーを作成し、Go、Python、またはRubyでクライアントを作成することが容易にできます。さらに、最新のGoogle APIにはgRPCバージョンのインターフェースがあり、アプリケーションにGoogleの機能を簡単に組み込むことができます。
## プロトコルバッファの使用
デフォルトでは、gRPCはGoogleの成熟したオープンソースの構造化データのシリアル化メカニズムであるプロトコルバッファを使用します（ただし、JSONなどの他のデータ形式も使用できます）。以下はその簡単な紹介です。
### プロトコルバッファの基本
プロトコルバッファを使用する最初のステップは、シリアル化したいデータの構造を定義することです。これは、.proto拡張子を持つ通常のテキストファイルに記述します。プロトコルバッファデータはメッセージとして構造化され、各メッセージは一連の名前と値のペア（フィールド）を含む小さな論理レコードです。以下は簡単な例です
```proto:person.proto
syntax = "proto3";

package example;

// The Person message definition.
message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}
```
データ構造を指定したら、プロトコルバッファコンパイラprotocを使用して、プロト定義から選択した言語のデータアクセスクラスを生成します。これにより、各フィールドのシンプルなアクセサ（name()やset_name()など）や、構造全体を生のバイトにシリアル化/パースするメソッドが提供されます。例えば、選択した言語がC++の場合、上記の例をコンパイルするとPersonというクラスが生成されます。このクラスをアプリケーションで使用して、Personプロトコルバッファメッセージを入力、シリアル化、および取得することができます。
### gRPCサービスの定義
gRPCサービスは、通常のプロトファイルで定義され、RPCメソッドのパラメータと戻り値の型はプロトコルバッファメッセージとして指定されます
```proto:greeter.proto
syntax = "proto3";

package example;

// The greeter service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}
```
gRPCは、特別なgRPCプラグインを使用してprotocを使用し、プロトファイルからコードを生成します。これにより、生成されたgRPCクライアントおよびサーバーコードと、メッセージタイプを入力、シリアル化、および取得するための通常のプロトコルバッファコードが得られます。プロトコルバッファの詳細や、選択した言語でprotocをインストールする方法については、プロトコルバッファのドキュメントを参照してください。
## プロトコルバッファのバージョン
プロトコルバッファはオープンソースユーザーに長い間提供されてきましたが、このサイトのほとんどの例ではプロトコルバッファバージョン3（proto3）を使用しています。proto3は、若干簡略化された構文、いくつかの便利な新機能、およびより多くの言語サポートを提供します。proto3は、Java、C++、Dart、Python、Objective-C、C#、Android Javaのライトランタイム、Ruby、およびJavaScriptで利用可能です。詳細は、proto3言語ガイドおよび各言語のリファレンスドキュメントを参照してください。
一般的に、proto2（現在のデフォルトプロトコルバッファバージョン）を使用することもできますが、gRPCと一緒にproto3を使用することをお勧めします。これにより、gRPCがサポートするすべての言語を使用できるだけでなく、proto2クライアントとproto3サーバーの互換性の問題を回避できます。
C_TS4FI_2021 SAP Certified Associate - SAP S/4HANA 2021 for Financial Accounting対策（15/100）

【15日目】
トピック 1：組織割当およびプロセス統合（15/15）

≪問題15≫
FIのアーカイブプロセスにおいて、FIへのサプライヤ請求書の直接転記を処理する前に必要なステップはどれですか。
正しい答えを選択してください
□圧縮の実行
□COにおけるデータのアーカイブ
□FI取引金額のアーカイブ
□債務マスタデータのアーカイブ

≪解答≫
□圧縮の実行
■COにおけるデータのアーカイブ
□FI取引金額のアーカイブ
□債務マスタデータのアーカイブ

≪解説≫
◆SAP S/4 HANAシステムのFinanceでデータエージングを使用するためには、以下の要件を満たす必要がございます。
（1）データエージング（DAAG_DATA_AGING）ビジネス機能を有効化すること。
（2）HANAでエージングを有効にするために、パラメータ「abap/data_aging」を設定すること。
（3）データエージングに必要な権限をロールに追加すること（権限オブジェクト：S_DAAG、S_DAGPTM）。
論文読み：Progressive End-to-End Object Detection in Crowded Scenes

# Progressive End-to-End Object Detection in Crowded Scenes

[paper](https://openaccess.thecvf.com/content/CVPR2022/papers/Zheng_Progressive_End-to-End_Object_Detection_in_Crowded_Scenes_CVPR_2022_paper.pdf)
[github](https://github.com/megvii-research/Iter-E2EDET)

## 概要
この論文では、混雑したシーンでの物体検出を改善するための新しいクエリベースの検出フレームワークを提案している．従来のクエリベースの検出器は、以下の二つの課題に直面していた：
1. 一つの物体に対して複数の予測がされる
2. デコードステージの深さが増すにつれて性能が飽和する

これらの問題を解決するために、受け入れられる予測を生成しやすいクエリを選択し、その後のノイズの多いクエリを以前に受け入れられた予測に基づいて精緻化する進行的予測方法を提案している．この方法を用いることで、クエリベースの検出器の混雑したシーンにおける性能が大幅に向上することが実験で示された．

## 従来手法との比較
従来のクエリベースの検出器は、特に混雑したシーンで以下の課題に直面していた：
- **複数の予測**: 一つの物体に対して複数の予測が生成され、誤検出が増える
- **性能の飽和**: デコードステージの深さが増すにつれて性能が飽和し、改善が難しくなる

## 新規性
この論文の新規性は以下の点にある：
1. **予測セレクタ**: 高い信頼度の予測を生成するクエリを選択し、残りのノイズの多いクエリをさらに精緻化する
2. **関係情報抽出器**: ノイズの多いクエリがターゲットが検出されたかどうかを認識できるように、受け入れられた予測との関係をモデル化する
3. **クエリアップデータ**: ローカルセルフアテンションを実行し、空間的に関連する近隣のクエリのみと対話することで、ノイズの多いクエリの特徴をさらに精緻化する
4. **ラベル割り当て**: 受け入れられた予測と精緻化されたノイズの多いクエリのサンプルを段階的に割り当てる新しい一対一のラベル割り当てルールを導入する

## 方法論
- **予測セレクタ**: 高い信頼度の予測を生成するクエリを選択し、残りのノイズの多いクエリをさらに精緻化する
- **関係情報抽出器**: 受け入れられた予測との関係をモデル化し、ノイズの多いクエリがターゲットが検出されたかどうかを認識できるようにする
- **クエリアップデータ**: ローカルセルフアテンションを実行し、空間的に関連する近隣のクエリのみと対話することで、ノイズの多いクエリの特徴をさらに精緻化する
- **ラベル割り当て**: 受け入れられた予測と精緻化されたノイズの多いクエリのサンプルを段階的に割り当てる新しい一対一のラベル割り当てルールを導入する

## モデルの処理の流れ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/22b5c5b0-abd6-6bd2-c217-a9955534dc20.png)

1. 入力画像が与えられる
2. FeaturePyramidNetwork（FPN）または、Transformerを通り、画像の特徴が抽出される。複数スケールでの特徴抽出を行う
3. 初期クエリ生成：特徴マップに基づいて初期クエリを生成。物体の候補領域を示すもので、各クエリが特定の物体を表現するように設計されている
4. Decording：
    1. Previous Decording Stages：クエリが特徴マップと相互作用し、物体の予測を行う。各ステージでクエリは更新され、物体のBBoxとそのクラスを予測する
    2. RoIAlignPool：前のステージのBBoxに基づいて、特徴マップからRegion of Interest (ROI) を抽出
    3. MultiHeadAttention：クエリに対してSelfAttentionを適用し、クエリの特徴を更新する
    4. DynConv：DynamicConvolutionのこと。更新されたクエリとROI特徴を用いて、次のステージのクエリを生成する
    5. BBox予測：現在のステージでのバウンディングボックスを予測する

5. The final Decording
    1. Prediction Selector：最終ステージでは、高い信頼度を持つ予測を選択肢、残りをノイズクエリとして分類する。
    2. RelatinoInformarionExtractor：ノイズクエリが受け入れられたクエリとの関係をモデル化し、ターゲットがすでに検出されているか認識させる。▶これによって、不要な重複検出を減少させる
    3. ノイズクエリと受け入れられたクエリ感の空間的関係を抽出し、ジオメトリ関係特徴を生成する
    4. QueryUpdatar：ノイズクエリの特徴を更新するための新しいlocal self attentionメカニズムを適用する。各クエリがその近隣のクエリと飲み相互作用するように設計されている
    5. Label Assiginment：一対一のクエリとノイズクエリに対して、一対一のラベルの割り当てを行う。これにより、ユニークなターゲットに対応するようになる
    6. 出力：最終的なDecordingStageを経て、各クエリが最終的な物体のBBoxとクラスを出力する

## 結果と評価
この手法を用いることで、Sparse RCNNは混雑したシーンでの検出性能が大幅に向上した．具体的には、CrowdHumanデータセットにおいて、Sparse RCNNは92.0%のAP、41.4%のMR−2、83.2%のJIを達成し、混雑シナリオに特化したボックスベースの手法MIPを上回る性能を示した．さらに、この手法はCityPersonsやCOCOのような中程度および軽度の混雑したデータセットでも一貫して改善をもたらした．

## 結論
この論文は、混雑したシーンでの物体検出を大幅に改善するための新しいクエリベースの検出フレームワークを提案している．進行的予測方法と新しい関係情報抽出器、クエリアップデータ、および一対一のラベル割り当てルールを導入することで、複数の予測や性能の飽和といった従来の課題を克服している．この手法により、Sparse RCNNやdeformable DETRのようなクエリベースの検出器が、混雑したシーンだけでなく中程度および軽度の混雑シーンでも一貫して高性能を発揮することが確認された．
C_TS4FI_2021 SAP Certified Associate - SAP S/4HANA 2021 for Financial Accounting対策（14/100）

【14日目】
トピック 1：組織割当およびプロセス統合（14/15）

≪問題14≫
FIのアーカイブプロセスにおいて、FIへのサプライヤ請求書の直接転記を処理する前に必要なステップはどれですか。
正しい答えを選択してください
□圧縮の実行
□COにおけるデータのアーカイブ
□FI取引金額のアーカイブ
□債務マスタデータのアーカイブ

≪解答≫
□圧縮の実行
■COにおけるデータのアーカイブ
□FI取引金額のアーカイブ
□債務マスタデータのアーカイブ

≪解説≫
◆FIオブジェクトのデータアーカイブの実行順序は、以下の通りです。
（1）補助元帳およびCO
（2）FI伝票
（3）FI取引金額
（4）圧縮の実行
（5）GL/AP/ARマスタデータ
（6）銀行マスタ
◆「FIへのサプライヤ請求書の直接転記」は、「（2）FI伝票」に該当します。