OmniAICreator/Qiita-1.07M huggingface dataset:
CO-Net: Learning Multiple Point Cloud Tasks at Once with A Cohesive Network

# 1. 概要
CO-Netは、異なるデータセットドメインで複数のポイントクラウドタスクを効率的に最適化する包括的なフレームワークである。高いストレージ効率を実現するために、共有パラメータが豊富なモデルを一つにまとめる。また、Res-MLPブロックを使用して効果的な特徴抽出を行い、柔軟にネットワークの深さと幅をスケールする。さらに、各タスクに最適なアーキテクチャを探索するために、ブロックをベースにしたネステッドレイヤーワイズ処理ポリシーを提案する。これにより、異なるタスクやデータセットドメインの偏りに起因する問題を解決する。さらに、CO-Netの学習を促進するために、符号ベースの勾配手術を提案し、各タスクの最適化を重視する。

---
# 2. 新規性
- 異なるデータセットドメイン下で複数のポイントクラウドのタスクを共同で最適化する。
- NAS技術を使用して、異なるタスクの最適なアーキテクチャを自動的に特定するためのネスト型の層ごとの処理ポリシーを提案した。このポリシーは、バックボーンのパラメータが共有されるかどうかを手動ではなく自動的に決定する。
- 衝突する勾配を排除するためにサインベースの勾配手術を導入した。
- CO-Netのトレーニングが完了すると、タスク共有のパラメータを固定して行うことで、CO-Netは少ないタスク固有のパラメータでの増分学習を可能にする。

---
# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/493695e6-b15e-34e9-0f65-416f74e7aa4a.png)

CO-Netは複数のポイントクラウドタスクのネットワークアーキテクチャであり、ステムMLP、バックボーン、およびさまざまなタスクのヘッドから構成されている。バックボーンの各層には、ネストされた層ごとの処理ポリシーが適用され、異なるタスクのための最適なアーキテクチャを特定し、自動的にバックボーンのどのパラメータを共有するかを決定することで、タスクに関連する特徴を生成することができる。実線の部分は選択されたもので、点線の部分は選択されていない。

---
# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/ab367825-af40-82b6-6292-cb42b06e49fc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/7907ce96-a0fc-325d-eea2-ed050e2ea31a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/867747d2-6686-5581-b7f7-b8906f31de9e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/19b805b7-cca6-ad0a-5150-ca05eaecb101.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/34b96047-8eab-ac70-6f2a-9d66d63f4e72.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/043b9c34-7933-ef3b-ad38-bfb77b3c701f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/9fa14597-28df-473c-6f40-e28bd8666ef0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/327df865-dfc1-3b60-c873-0814ea6ed1ce.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/41da04cf-1cc2-c270-c570-2690c2f36028.png)

CO-Netは従来の手法よりもはるかに優れた性能を発揮しながら、総FLOPsとパラメータ数は少ないということが示されている。

---
Paper URL: 
https://openaccess.thecvf.com/content/ICCV2023/papers/Xie_CO-Net_Learning_Multiple_Point_Cloud_Tasks_at_Once_with_A_ICCV_2023_paper.pdf
PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

# 1. 概要
マルチビュー画像からの3D認識のための統合フレームワークであるPETRv2を提案している。PETRv2は、3D物体検出の向上を目指し、過去のフレームの時間情報を活用する効果的な時間モデリングを探求している。具体的には、PETRの3D位置エンベディングを拡張し、異なるフレーム間のオブジェクト位置の時間的な整列を可能にする。また、異なるタスクをサポートするために、PETRv2ではタスク固有のクエリを導入し、シンプルで効果的な解決策を提供する。

---
# 2. 新規性
- 位置埋め込み変換の概念的にシンプルな拡張を研究した。3D位置埋め込みによって、時間的なアライメントを実現可能。
- マルチタスク学習をサポートするために、PETRに対して簡単で効果的な解決策を導入した。タスクごとのクエリを導入することで、BEVセグメンテーションと3D車線検出をサポートした。
- 実験結果は、提案されたフレームワークが3Dオブジェクト検出、BEVセグメンテーション、3D車線検出のいずれにおいても最先端の性能を達成していることを示している。また、PETRフレームワークの包括的な評価のための詳細なロバスト性分析も提供されている。

---
# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/a891196e-a7ff-df16-66e6-5371f6d2a6f5.png)

バックボーンネットワークによってマルチビュー画像から2D特徴が抽出され、PETRと同様の方法で3D座標が生成される。時間的な整列を実現するために、直前のフレームt-1のPETRの3D座標はまず姿勢変換を通じて変換される。次に、2つのフレームの2D画像特徴と3D座標を結合して、トランスフォーマーデコーダのキーと値のコンポーネントを生成するための3D位置エンコーダに注入する。検出、セグメンテーション、およびレーンクエリは、異なる空間で初期化され、トランスフォーマーデコーダのキーと値のコンポーネントと相互作用する。更新されたクエリは、タイムステップごとの3Dバウンディングボックス、BEVセグメンテーションマップ、および3Dレーンを予測するために使用される。 ⃝Aはフレームt-1からフレームtへの3D座標の整列を示している。 ⃝Cはバッチ軸に沿った結合操作である。

---
# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/ff028222-d069-3e70-72b6-e7ebbdaa078f.png)

3D物体検出、BEVセグメンテーション、3D車線検出のいずれのタスクでも最先端のパフォーマンスを達成している。さらに、本論文ではPETRフレームワークの頑健性分析も行われている。

---
Paper URL: https://openaccess.thecvf.com/content/ICCV2023/papers/Liu_PETRv2_A_Unified_Framework_for_3D_Perception_from_Multi-Camera_Images_ICCV_2023_paper.pdf
GraphAlign: Enhancing Accurate Feature Alignment by Graph matching for Multi-Modal 3D Object Detection

# 1. 概要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/9af6ec16-bd53-e5ac-f684-2830827a4144.png)

LiDARとカメラは自動運転の3Dオブジェクト検出において補完的なセンサーであるが、異なる種類のデータを組み合わせることは難しく、特徴の整合性が問題となる。従来の方法では、投影キャリブレーションによる整合性を実現してきたが、座標変換の誤差が性能に影響を与える。この論文では、より正確な検出を行うための特徴の整合性戦略であるGraphAlignを提案している。具体的には、画像特徴と点群特徴を融合させ、点群特徴の最近傍点を画像特徴に投影する。さらに、自己注意モジュールを使用して特徴の整合性を微調整する。豊富な実験により、GraphAlignの効果と効率を実証する。

---
# 2. 新規性
- マルチモーダルな3Dオブジェクト検出における対応不良の問題を解決するために、グラフマッチングに基づいた特徴合わせフレームワークであるGraphAlignを提案している。
- 画像特徴とポイントクラウド特徴の正確な合わせを実現するために、Graph Feature Alignment（GFA）とSelf-Attention Feature Alignment（SAFA）モジュールを提案する。これにより、ポイントクラウドと画像モーダリティ間の特徴合わせが向上し、検出精度が向上する。
- KITTIおよびベンチマークを使用した実験により、GraphAlignが特に長距離オブジェクト検出の精度を向上させることが示された。

---
# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/fc9967e4-d173-4052-bf9f-2ba6c7c91deb.png)

GraphAlignは、Graph Feature Alignment（GFA）モジュールおよびSelf-Attention Feature Alignment（SAFA）モジュールで構成されている。GFAモジュールは、画像とポイントクラウドの特徴を入力として受け取り、投影キャリブレーション行列を使用して3D座標を2Dピクセル座標に変換し、最も近い隣接点を見つけるための近隣情報を構築し、画像とポイントクラウドの特徴を結合する。SAFAモジュールは、自己注意機構を介してK個の近傍点の文脈的関係をモデリングし、融合された特徴の重要性を高め、最も代表的な特徴を選択する。

---
# 4.  結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/0aa5438c-4e01-dd7e-373a-eadf9456086b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/ffed50c8-4e55-a337-4d01-9b134da5f790.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/28bfc3b3-65fa-7102-0627-e67dcf9f9469.png)

GraphAlignがKITTIおよびnuScenesデータセット上の3D検出器を大幅に改善することを示している。既存の射影ベースと注意ベースの特徴整列戦略に基づいて構築されている当研究は、自動運転における多モーダル特徴融合の新しい視点を提供できることを期待している。

---
Paper URL: https://openaccess.thecvf.com/content/ICCV2023/papers/Song_GraphAlign_Enhancing_Accurate_Feature_Alignment_by_Graph_matching_for_Multi-Modal_ICCV_2023_paper.pdf
Mask-Attention-Free Transformer for 3D Instance Segmentation

# 1. 概要
最新の研究では、3Dインスタンスセグメンテーションにおいて、トランスフォーマーベースの手法が主流となっている。この手法では、初期のインスタンスマスクを使ってオブジェクトを特定し、それを元に自己修正を行う。しかし、初期マスクによる低再現率の問題に気づきを得て、マスク注意の代わりに中心回帰タスクを導入することにした。中心回帰により、低再現率の問題を効果的に克服し、クロスアテンションを行う。この手法では、一連の位置認識設計を開発し、3D位置の空間分布を学習することでオブジェクトを捉える能力を向上させた。また、相対位置エンコーディングと改良された位置クエリを提案した。実験結果から、従来の手法よりも収束が4倍速くなり、ScanNetv2 3Dインスタンスセグメンテーションベンチマークでも優れたパフォーマンスを示している。

---
# 2. 新規性
- 既存のTransformerベースの手法では、初期インスタンスマスクのリコールが低く、トレーニングの難しさと収束の遅さの原因となることを観察した。
- マスク注意ではなく、補助的な中心回帰タスクを構築し、これによってリコールの問題を克服し、それに応じた一連の位置認識コンポーネントを設計した。このアプローチは、より速い収束を示し、より高い性能を発揮する。
- 実験では、このアプローチが新しい最先端の結果を達成し、ScanNetv2、ScanNet200、S3DISなどのさまざまなデータセットで優れたパフォーマンスを示すことが示されている。

---
# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/cba9aab9-458a-5909-4473-d7755b41b561.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/1b425962-a578-4a08-6fb9-7c01fa2543e4.png)

コンテンツクエリQc0に加えて、学習可能な位置クエリQp0のセットも保持する。コンテンツクエリQcは、グローバルな特徴Fから特徴を集約する。位置クエリQpは、クロスアテンションをガイドするために設計されている。アテンションの重みは、位置クエリQpとグローバルポジションPの相対位置に基づいて調整される。コンテンツクエリと位置クエリは、各レイヤーで反復的に改良される。デコーダーレイヤーは3つしか表示されていないが、実際の実験では6つのレイヤーを使用している。

---
# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/eb63e796-7482-925f-38fc-e3636b74a5bc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/5dbd3b44-f676-4d9c-4c75-3644dcfb9c22.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/9db8b17c-3abe-4d40-56c4-ad8febe2f6de.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/d22401c9-7db8-d827-4a7c-6eab4bcf38f1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/470c8f9c-eb80-1077-14fa-1c429ecf23f6.png)
従来の手法よりも収束が4倍速く、ScanNetv2、ScanNet200、S3DISなどのさまざまなデータセットで優れたパフォーマンスを示すことが示されている。

---
Paper URL: https://openaccess.thecvf.com/content/ICCV2023/papers/Lai_Mask-Attention-Free_Transformer_for_3D_Instance_Segmentation_ICCV_2023_paper.pdf
Reactプロジェクト環境ごとプロパティ設定方法

```
①Env-cmdモジュールをダウンロードする
②「packae.json」に下記のように設定する
※必要に応じて、環境用の「.env」を作ること
    ...省略...
    "scripts": {
        //開発環境用プロパティ
        "dev:dev": "env-cmd -f .env.dev next dev",
        //商用環境用プロパティ
        "dev:shouyou": "env-cmd -f .env.shouyou next dev",
        "build:dev": "env-cmd -f .env.dev next dev",
        "build:shouyou": "env-cmd -f .env.shouyou next dev",
        "start": "next start",
        "lint": "next lint"
    },
    ...省略...
③実行の際、「npm run dev:dev」の場合、「.env.dev」に定義したプロパティを参照する
④ビルドの際（.next生成）、「npm run build:shouyou」の場合、「.env.shouyou」を参照し、.nextを生成する

```
Rendering Humans from Object-Occluded Monocular Videos

# 1. 概要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/1d0365e6-a783-9bad-86de-acf943fc4a3a.png)

標準的なレンダリング戦略は点対点マッピングに基づいており、体の可視領域と遮蔽領域の間に劇的な不整合が生じる可能性がある。また、素朴な直接回帰アプローチは、遮蔽下でのレンダリングに関する妥当性基準（つまり、事前情報）を考慮していない。よって、モノクル動画からの移動する人物の3D理解とレンダリングは困難である。
これらの欠点への解決策として、重度の遮蔽シーンでより良い人物のレンダリングを実現するニューラルレンダリング手法を提案している。

---
# 2. 新規性
- 厳しい遮蔽がある実世界の状況下でのダイナミックな人物の描写を初めて研究した。
- サーフェスベースの描写、注目としての体の部位の可視性頻度の再定式化、および完全性の損失を提案した。これにより、物体遮蔽された単眼映像から人物の描写が可能となる。
- 従来の最先端技術と比較して、本手法が定量的・定性的に有意な改善を実現し、このトピックでの初のベースラインを生み出すことを実証した。

---
# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/5eb8fcf5-3e6c-9a1c-78af-07f6d027196c.png)

事前計算されたボディポーズ情報を使用して、可視な光線サンプルを特定の座標にマッピングする。それぞれの座標に最も近い頂点を見つけ、表面ベースの手法を使ってレンダリングする。トレーニング中には、見えやすさを示すスコアを頂点ごとに更新し、頻繁に見える頂点に注目を集めることでレンダリング品質を向上させる。さらに、4Dハッシュグリッドを使用してエンコードされた頂点や、距離情報をMLPに入力し、光度と知覚の制約を満たすように可視ピクセルを調整する。これにより、ジオメトリの完全性を促進する追加の損失関数も利用されている。

---
# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/aec7941a-7ef3-3d34-7dde-2acebfa7d4f0.png)

Simulatedと実世界のビデオの両方で、OccNeRFを最新の手法と比較した。最新の結果は、この研究分野での新たなベンチマークを設定した。

---
Paper URL: https://openaccess.thecvf.com/content/ICCV2023/papers/Xiang_Rendering_Humans_from_Object-Occluded_Monocular_Videos_ICCV_2023_paper.pdf
last updates:
R3D3: Dense 3D Reconstruction of Dynamic Scenes from Multiple Cameras

# 1. 概要
自動運転とロボティクスにおいて、密集した3D再構築と自己運動推定は主要な課題であり、マルチカメラシステムはよりシンプルで低コストな代替手段となる。しかし、複雑な動的シーンのカメラベースの3D再構築は非常に困難であり、既存の解決策では不完全な結果や矛盾した結果が生じることがある。
それを解決するためのアプローチとして密集した3D再構築と自己運動推定のためのマルチカメラシステムを提案している。

---
# 2. 新規性
- R3D3というシステムを提案し、動的なシーンにおける密な3D再構築と姿勢推定を行う。
- 新しいマルチカメラDBAの数式とマルチカメラの可視性グラフを使用して、幾何学的な深さと姿勢を推定する。
- 事前の幾何学的深さと不確実性を、モノクルの手がかりを使った深さの微調整ネットワークで統合する。

---
# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/a74286cb-3f5b-5956-fe3e-6f6a8b08c8af.png)

複数のカメラからの空間・時間情報を活用する幾何学的推定と、モノクル深度の改善を繰り返し行う。マルチカメラの特徴の相関と密なバンドル調整演算子を統合し、頑健な幾何学的深度と姿勢の推定を得る。また、移動物体や低テクスチャ領域など、幾何学的深度が信頼できない場合の再構築を改善するために、深さの改善ネットワークを介した学習可能なシーン事前知識を導入する。この設計により、困難な動的屋外環境において密集した一貫性のある3D再構築を実現する。

---
# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/c343a088-7d49-6b4e-5c92-f9a84bda3730.png)

DDADおよびNuScenesのベンチマークにおいて、最先端の密な深度予測を達成した。

---
Paper URL: https://openaccess.thecvf.com/content/ICCV2023/papers/Schmied_R3D3_Dense_3D_Reconstruction_of_Dynamic_Scenes_from_Multiple_Cameras_ICCV_2023_paper.pdf
Wi-Fiについてのお話

# はじめに
皆さんはパソコンやスマートフォン等をインターネットに接続する際にどのように接続されていますか？
基本的には有線接続か無線接続の2パターンになると思います。

| 有線接続 | LANケーブル等の物理的なケーブルを用いて接続する方法 |
|:--|:--|
| **無線接続**  | **物理的なケーブルは使用せず、Wi-Fi等の電波を使用して接続する方法**|


<br>

今回、無線LANアクセスポイント（Wi-Fiの電波を送受信する機器）の入れ替えに携わる機会がありましたので改めてWi-Fiについてまとめました。
<br>

# そもそもWi-Fiって？
Wi-Fi（ワイファイ）は無線通信技術の一種で、パソコンやスマートフォン等のデバイスをインターネットに接続するために使用されています。
　
特定の範囲内（オフィスや店舗など）でデバイス間の通信を可能にする無線ネットワークを作成します。
　
Wi-Fiの主な利点としてはLANケーブルを使用せずにデバイスをインターネットに接続できることで、これによりユーザーは自由に移動しながらインターネットを利用できます。
<br>

# Wi-Fiの規格について 
Wi-Fiは通信規格によって種類がいくつかあります。また、ナンバリング規格の数値が大きいほど新しい規格になります。

| 規格名称 | ナンバリング規格| 最大通信速度 | 周波数帯 |
|:-:|:-:|:-:|:-:|
|IEEE 802.11a|–|54Mbps|5GHz帯|
|IEEE 802.11b|–|11Mbps|2.4GHz帯|
|IEEE 802.11g|–|54Mbps|2.4GHz帯|
|IEEE 802.11n|Wi-Fi 4|600Mbps|2.4GHz帯/5GHz帯|
|IEEE 802.11ac|Wi-Fi 5|6.9Gbps|5GHz帯|
|IEEE 802.11ax|Wi-Fi 6|9.6Gbps|2.4GHz帯/5GHz帯|
|IEEE 802.11ax|Wi-Fi 6E|9.6Gbps|2.4GHz帯/5GHz帯/6GHz帯|

<br>

# Wi-Fiの周波数帯について
周波数帯とは無線通信に使用される特定の周波数範囲の事を指します。Wi-Fiでは一般的に3つの周波数帯が使用されています。

使用環境や用途に応じて最適な周波数帯を選択することが重要です。

|周波数帯|メリット|デメリット|
|:-:|:--|:--|
|2.4GHz帯|・障害物に強いため通信範囲が広い|・5GHz帯に比べてデータ転送速度が遅い<br>・電子レンジやBluetoothデバイスなど他の多くのデバイスも2.4GHz帯を使用しているため干渉しやすい|
|5GHz帯|・2.4GHz帯に比べ電波干渉が少ない<br>・2.4GHz帯と比べデータ転送速度が速い|・障害物に弱いため通信範囲が狭い<br>・一部の古いデバイスは5GHz帯をサポートしていないため互換性が低い可能性がある|
|6GHz帯|・他のデバイスとの干渉が少ないため接続が安定する<br>・2.4GHz帯や5GHz帯と比べデータ転送速度が速い|・障害物に弱いため通信範囲が狭い<br>・6GHz帯に対応したルーターとデバイスが必要|

<br>

# Wi-Fi6Eについて
Wi-Fi6EはWi-Fi6の後に出た新しい規格となり、近年ではWi-Fi6E対応のデバイスが増えてきています。

Wi-Fi6Eは従来の2.4GHz帯と5GHz帯にプラスして6GHz帯も利用できるようになりました。
周波数帯を車線、データを車と見立てるとすると以下のようなイメージとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457796/6e8c7c68-3160-8191-8fe5-6f4103f5a091.png)

:::note warn
上記はイメージ図であり実際の通信速度は使用するデバイスや環境によって変化します
:::

2.4GHz帯はデータの転送速度が遅かったり、5GHz帯では他デバイスの干渉を受けてパフォーマンスが出なかったりしますが、新しく追加された6GHz帯は帯域に空きがあり転送速度の低下や干渉を受けにくいものとなっています。

Wi-Fi6Eは次のような用途がある人におすすめです。
- 複数デバイスをWi-Fiに接続する
- 大容量ファイルのやり取りをする
- 高画質で動画や映画視聴をする
- 動画配信やオンラインゲームをする
<br>

# デバイスのWi-Fi対応状況について
Wi-FI6Eで6GHz帯を使用する場合は対応したデバイスとネットワーク機器（ルーターやアクセスポイントなど）が必要です。

以下にWindows11のパソコンでの確認方法の一例を示します。

　1. Windowsマークを右クリックし、デバイスマネージャーをクリック
　2. ネットワークアダプターをクリックし、一覧にあるWi-Fiアダプターの名称を確認します
 
　 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457796/26975d58-c2d9-acf6-f33d-3167b1a46b4a.png)

 
※上記の例ではWi-Fiアダプターが「Intel(R)Wi-Fi6 AX201」とあるようにWi-Fi6には対応しておりますが残念ながらWi-Fi6Eは未対応。
AX201より新しいIntel AX210やAX211はWi-Fi6Eに対応してます。
<br>
デバイスが対応していてもネットワーク機器（ルーターやアクセスポイント）が対応していなかったり設定していなければ6GHz帯は使用できません。

ネットワーク機器については自身で購入してた物であれば取扱説明書等で確認する、会社であれば情シスやインフラ担当者に質問するとWi-FI6Eに対応しているか分かるかもしれません。

<br>

# 最後に
Wi-Fiについて改めて調べてみましたが規格や周波数帯など様々あることがわかりました。
今後もより高速で安定した規格が出てくると思うと楽しみです。
最後に今回の内容のまとめを以下記載します。

- Wi-Fiは無線通信技術の一種。様々な規格があり用途に合わせて周波数帯を選択することが重要。
- 近年ではWi-Fi6Eが普及しつつある。Wi-Fi6Eは従来の周波数帯の他に6GHz帯も使用できるようになり高速通信が可能に。
- もしWi-Fi6Eに対応していればより快適にインターネットを利用できるようになるため確認してみよう。

<br>


##### 参考リンク 
https://his-mobile.com/column/2023_0630_3
https://www.iodata.jp/product/network/info/base/kikaku.htm
https://koneta.nifty.com/koneta_detail/1141008018166_1.htm
Enhancing NeRF akin to Enhancing LLMs: Generalizable NeRF Transformer with Mixture-of-View-Experts

# 1. 概要

大規模言語モデル（LLMs）からの強力なエキスパートミックス（MoE）のアイデアを取り入れ、モデルの容量と柔軟性のバランスを調整して、汎化能力を向上させたNeRF。

---
# 2. 新規性

既存のNeRFは
- シーンに過剰に適合する傾向があり、シーンを再構築することに重点を置いている。
- シーンごとに再学習が必要なため、実用的には制約がある。
- 大きなモデルサイズが必要でありながら、特定のシーンに合わせる必要がある。

これらに対処するために、Mixture-of-Experts（MoE）の概念を導入し、consistency expertとspartial smoothness expretを組み合わた。

---
# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/fc18d935-7ab8-7ded-e99f-bb72638325a3.png)

左の図では、対象の視点内の各光線について、ビュー変換器を通過することで、ソースのビューから複数のビュー特徴を集約したサンプル点を作成する。右の図では、ビュー変換器にMoE層を埋め込む。ポイントトークンは、ルーターで選択されたexpartと提案されるexpertの両方によって処理され、クロスシーンの一貫性を確保する。4つのMoE埋め込みトランスフォーマーブロックと1,296の専門家組み合わせを使用して、十分に大きく多様なカバレッジを提供する。

---
# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/b09c9e21-7080-e0cc-7ea5-1b75fbebbf62.png)

クロスシーンでのビュー合成において、ゼロショットおよびフューショットの設定の両方で高い性能を示し、最先端の結果を実証した。

---
Paper URL: https://openaccess.thecvf.com/content/ICCV2023/papers/Cong_Enhancing_NeRF_akin_to_Enhancing_LLMs_Generalizable_NeRF_Transformer_with_ICCV_2023_paper.pdf
Zolly: Zoom Focal Length Correctly for Perspective-Distorted Human Mesh Reconstruction

# 1. 概要
- 3D Human Mesh Reconstruction(3HMR)
- 野外での単一視点のRGB画像における3HMRにおいて、カメラが人間に近づいたときに生じる胴体の歪みの問題を解決した
- PDHumanという合成データセットを提案し、このタスクに特化した2つの現実世界データセットを拡張した

---
# 2. 新規性
射影歪みの原因を分析し、人間の体の相対的な位置が歪みの主な原因であることを発見した。そこで、人間の体の密な2D歪みスケールを表現する、新しいカメラモデルと歪み画像と呼ばれる新しい2D表現を提案した。

---
# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/e891fd6a-e222-13fb-bdb9-af420697f7e8.png)

歪みスケール特徴から距離を推定する際に、環境コンテキストの特徴ではなく歪みスケール特徴を使用する。さらに、歪みフィーチャーと画像フィーチャーを統合し、ボディメッシュを再構築する。正しい射影行列を定式化し、射影と非射影の両方の損失を使用して、人物の位置を同定する。

---
# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/1908b2e4-3db4-dee6-1134-443b4b3d9180.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/e09f8b1e-27ab-a695-aba9-4e1a4eac374e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/cfae3194-4aea-7472-2db2-58dfb9c93fc0.png)

透視歪みデータセットと標準ベンチマーク（3DPW）の両方で他の最新手法を上回ることが示された。

---
Paper URL: https://arxiv.org/pdf/2303.13796.pdf
DisCoScene: Spatially Disentangled Generative Radiance Fields for Controllable 3D-Aware Scene Synthesis

# 1. 概要
3D認識に基づく高品質で制御可能なシーン合成のための生成モデル。

---
# 2. 新規性
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/a13caba0-06ff-3956-6a6f-508ce96cc0b8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/1f6a158d-3641-821f-30eb-857297846aed.png)

従来の3D認識アプローチは、主に単一の標準的なオブジェクトの生成に焦点を当てていて、複数のオブジェクトを含む複雑なシーンの合成については限定的であった。DisCoSceneは、シーンのレイアウトを表す非常に抽象的なオブジェクトレベルの表現（セマンティック注釈のない3Dバウンディングボックス）を事前条件として使用する。の表現は、取得が容易であり、さまざまなシーンの内容を一般的に記述することができ、オブジェクトと背景を区別する上で有益である。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/8fce0c82-d3b3-b746-9246-1c471ae7a217.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/38437c8b-2bf5-b8f3-f6e9-ca3ff9c68720.png)

実現方法シーンのレイアウトを表す非常に抽象的なオブジェクトレベルの表現は、シーン編集の直観的なユーザーコントロールとしても機能する。提案されたモデルは、この事前条件に基づいて、グローバルとローカルの識別を学習することで、オブジェクト中心の生成放射輝度場に全体のシーンを空間的に分解する。このモデルにより、個々のオブジェクトの生成品質と編集の柔軟性を得ることができ、効率的にオブジェクトと背景を完全なシーンに組み合わせることができる。

---
# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/b76691f1-9996-d9e7-8edd-b7113373b985.png)

Waymoの屋外データセットをはじめとする多くのシーンデータセットで、最先端のパフォーマンスを示した。

---
Paper URL: 
https://openaccess.thecvf.com/content/CVPR2023/papers/Xu_DisCoScene_Spatially_Disentangled_Generative_Radiance_Fields_for_Controllable_3D-Aware_Scene_CVPR_2023_paper.pdf
Neural Kernel Surface Reconstruction

# 1. 概要
大規模でスパースかつノイズのある点群から3D暗黙の表面を復元するための画期的な手法。

---
# 2. 新規性
ニューラルカーネルフィールド（NKF）表現をベースとし、NKFと同様の一般化能力を享受しながら、主な制約条件を同時に解決することができる。大規模なシーンへのスケール、ノイズへの頑健性、密な方向性のある点のデータセットから学習、オブジェクトとシーンのスケールが異なるトレーニングデータを混在させることも可能。

---
# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/26b334f5-82e1-0608-8127-cfdd28865a5b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/efd277ed-c4a9-8d86-141b-22abf6fb28de.png)

入力ポイントとその法線は最初に疎な畳み込みニューラルネットワークに入力される。デコーダーブランチでは、構造予測ブランチが適応的な疎なボクセルグリッドを出力する。この疎なボクセルグリッドには、異なるサイズの階層的なボクセルが含まれている。それぞれのボクセルについて、グリッド内の任意の位置で使用される潜在的な特徴を予測する。次に、勾配ベースのカーネル形式に従って表面フィッティングエラーを最小化するための疎な線形システムを構築し、疎なソルバーを使用して解を得る。得られた係数αと予測されたカーネルフィールドを使用することで、ジオメトリを定義する隠れた関数を評価することができる。

---
# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479168/376bef90-ec25-e125-5b95-55c3c71653cd.png)

ShapeNet、ABCなどの単一オブジェクト（再構築ベンチマーク）、ScanNet、Matterport3Dなどの屋内シーン、CARLA、Waymoなどの屋外シーンでも最先端の結果を達成している。

---
Paper URL: 
https://openaccess.thecvf.com/content/CVPR2023/papers/Huang_Neural_Kernel_Surface_Reconstruction_CVPR_2023_paper.pdf
APIに関するreactソース自動生成

```
使用ツール：
    「stoplight studio」 ➡️ APIを定義する
    「web-api-spec」 ➡️ ソースを生成する

簡単な使い方をメモ
    ①「stoplight studio」でAPIを定義し、yamlファイルを生成する
    ②「web-api-spec/spec」にyamlファイルを入れる
    ③「web-api-spec/asp-api-spec-client-fetch」にてプロンプトを開き、「npm run build」を実行する
```
色空間上のL1距離を可視化する

matplotlibで色空間上のL1距離を可視化してプロットする


## 関数
L1距離をプロットする関数
```python
def plot_L1(original, input_data, plot_color):
  plt.plot([original[0], input_data[0]], [original[1], original[1]], [original[2] , original[2]], c=plot_color,ls=":")
  plt.plot([input_data[0], input_data[0]], [original[1], input_data[1]], [original[2] , original[2]], c=plot_color,ls=":")
  plt.plot([input_data[0], input_data[0]], [input_data[1], input_data[1]], [original[2] , input_data[2]], c=plot_color,ls=":")
```
カラーコードを作成する関数
```python
def make_color_code(input_data):
  R_16  = '{:02x}'.format(int(input_data[0] * 255), 'x')
  G_16  = '{:02x}'.format(int(input_data[1] * 255), 'x')
  B_16  = '{:02x}'.format(int(input_data[2] * 255), 'x')
  color_str ="#" + R_16 + G_16 + B_16
  return color_str
```


## 実行プログラム
```python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.animation import FuncAnimation



#データの作成
original = np.random.rand(3)
new_data_1 = np.random.rand(3)
new_data_2 = np.random.rand(3)


# figureを作成
fig = plt.figure(figsize = (8, 8))
ax = fig.add_subplot(111, projection='3d')

#figureの設定
ax.view_init(elev=30, azim=30)
ax.set_xlim([0, 1])
ax.set_ylim([0, 1])
ax.set_zlim([0, 1])
ax.tick_params(bottom=False, left=False, right=False, top=False)
ax.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)

#記述
ax.scatter(original[0], original[1], original[2], c="white", edgecolors="black", s=200 ,alpha=1)

plot_L1(original, new_data_1, "red")
plot_L1(original, new_data_2, "blue")

color_code_1 = make_color_code(new_data_1)
color_code_2 = make_color_code(new_data_2)

ax.scatter(new_data_1[0], new_data_1[1], new_data_1[2], c=f"{color_code_1}", edgecolors="black", s=100 ,alpha=1)
ax.scatter(new_data_2[0], new_data_2[1], new_data_2[2], c=f"{color_code_2}", edgecolors="black", s=100 ,alpha=1)
```

### 実行結果

![ダウンロード (57).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623871/9f2f84fd-79ee-12c4-b42f-e40b024031e4.png)


### おまけ
これを作りたかっただけ...

![image (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623871/e717c09c-49d0-4d77-67da-225f897db276.gif)
久しぶりにPower BIを学びなおしたらすごく進化していた！

このエントリーは、Power BIのアドベントカレンダーに参加しています。
https://qiita.com/advent-calendar/2023/powerbi

# 有休消化中にPower BIを開いてびっくり
初めましてYukiです。Power BI歴は10年近くなるのに、元々極めることが苦手なのか、よそに目がいちゃいがちなので、業務で使うことしか使ってなくて、勉強会で学んでもアウトプットすることがなかなかできませんでした。
今回の転職を機に積極的にアウトプットしていけるように知識をため込んでいこう作戦です。つまりインプットしても自分事にできなかったところからの脱却！

####  設定を見てびっくりｗ
ほぼ初めて触る人にもお伝えしたいと思うのですが、ぜひConnpassのPower BIの勉強会というコミュニティーがあります。そこで登壇される方の設定やアーキテクチャなど、すぐにはできなくても初期設定そのままで触るのではなく、有効にしておくと便利、オフにしておくと便利！なことが学べます。Joinされることをお勧めします。
https://powerbi.connpass.com/

それと、もう一つ大事なことは、Microsoftの提供している学習サイト、Microsoft Learn。実はだいぶ前にPower BIは終わらせているのですが、中身が変わっているので、再度履修しなおしています。特にAIが追加されているので、「異常値を無視」、「KPIの分析」。。。こんなことまでしてくれるのですか？！
https://learn.microsoft.com/ja-jp/power-bi/create-reports/insights
これ、やばくないですか？
![insights.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200293/3dbf4d4a-13a6-9770-dbc5-b462b180172f.gif)

####  復習したい方へ（大事なことは二回言う）
![advent_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200293/7acd3588-58d3-37fd-92af-57c660599dee.png)
起動画面からして、2年前と全然違うのだけれど。ここから入ってください。
https://learn.microsoft.com/ja-jp/training/modules/get-started-with-power-bi/?WT.mc_id=powerbi_home_inproduct_introcard
ちなみにPower BI単体でどうこうするというより、Power Automateとのコラボは最強だと思うので、試験 PL-100: Microsoft Power Platform App Maker　を元に深めていくのもおすすめかもです。https://learn.microsoft.com/ja-jp/credentials/certifications/exams/pl-100/
今まで通り、チュートリアルからすすめていただくのもおすすめです。ここも新機能に応じて変わっていっているので〇年前やったからいいよ！という方も是非やってください。

####  こんな機能使ってなかったよ（私が知らんだけだったのかｗｗ）
*　レポートやダッシュボードをサブスクライブすることでメール配信できるのですね。これは、2万年前に知りたかったわぁ。（ついてねーよっは置いといて）
*　モバイルレイアウトビューが追加されている！！おまえはだれだ！！ｗｗ
![advent_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200293/265ed9ee-0bc7-4769-1c40-921906ae99d0.png)
*　リレーションシップの矢印が動くようになった。これはエライ！たくさんのテーブルをつなげているとスパゲティになるので細かい配慮は素晴らしい。今までは左右のどちらかだったと思うので。
![advent_4_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200293/45c206d7-9221-f83f-eccf-8ac24fe411a8.png)
*　DAX使いこなしていないとやばくないですか？・・・っていうか、DAXできない人にも優しくなってきた。
---正味これがあったら挫折しなかったかというと、そうではない（キリッ）
![advent_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200293/a494e533-d820-20cf-30d2-f36105f9842f.png)
*　こんな近くにビジュアルが来てくれると嬉しいねぇ～！ここまでくるともはや浦島太郎ｗｗ
![advent_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200293/f772dd3d-08d5-ce2f-4a53-0297acef4847.png)
*　マップを使うのにデフォルトじゃなきこと。これは、あれ？そうだったっけ？間違えてたらごめんなさい。マップを使う方はここのチェックを確認してくださいまし。
![advent_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200293/078ac86d-0497-a315-8367-0881bbc86c65.png)

そして、最新版のメニューで作ってみた。
完成！！！・・・というわけで、チュートリアルサイトを見ながら、最新バージョンで試行錯誤で作ってみました。じゃーん！
![advent_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200293/e75246de-4a55-7f97-772b-95e57ddb308a.png)

最後までお読みいただきありがとうございました。
おわり
Pure Data dekenのエラー'Checksum mismatch for~'の回避

## 問題
Pure Dataのdekenからexternalsをインストールするとき、次のようなエラーメッセージが表示される。

```
Checksum mismatch for 'ライブラリの名前~[バージョン]ファイルの種類.dek'
```

## 環境
Windows 11
Pure Data 0.54.1

## 解決手順
1. dekenのSearch Results画面より、インストールしたいexternalsを見つける。

2. 1.で見つけたLibraryを右クリックして、表示されるメニュー画面よりOpen Packege webpage をクリックしてウェブページを開く。

3.  開かれたウェブページからDEK-fileをダウンロードする。
自分の環境の場合、ページ下部のmore... → Package directoryというリンクからダウンロードできるファイルの一覧を開き、`ライブラリの名前~[v0.5.4](Windows-amd64-32).dek` というファイルをダウンロードした。

4. dekenに戻り、ウィンドウ上部のメニューの
File → install DEK file… という項目から、3.でダウンロードしたDEK-fileを選択する。

5. `Successfully installed 'ライブラリの名前'!`　というメッセージが表示され、exarnalのインストールが完了する。
Power AppsでQRコード

Power AppsでQRコードを使い入力を簡単で間違いないものにしたい。

EditScreenの必要なコントロールDataCard内にBarcodeReaderコントロールを挿入する。
OnScanにSet(iScan,BarcodeReader1.Barcodes)などを書き、スキャン内容を変数に入れる。
DataCard内にテキストLabelを追加しText=First(BarcodeReader1.Barcodes).Valueと書く。

これでQRコードの内容をtextに変換することができた。あとはこのデータを保存する鳴り、Power Automateで転送させるなりする。
ListとPower AppsとPower Automateの三角関係

Power Platformでアプリを作る簡単な方法は、Listを作り、それを元にPower Appsを立ち上げる。そしてアプリ上のボタンで入力を促すが、どうも動作が分からない。そういう時にPower AutomateからListを更新する方法もあるよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476406/c3b04140-e6a8-63c2-1efc-aabe94eb322f.png)

Power Apps上にボタンを配置する。
Power Automateでフローを作る。
User()はマイプロフィールの取得で代用
時間はutcNow()で取得
項目の更新でListに変数を代入していく。リストの選択肢はこのコントロール内で選べるので、Power Apps側は選択肢に応じたボタン構成にしておくと簡単
もしPower Appsからデータで送る場合は、Run()の引数に記述する。
ボタンはフローの名称.Run()を記述する。
入力完了画面を出したい時は、続けて;Navigate(Screen1,ScreenTransition.Fade)を入力
入力完了画面に四角を置き、透明にして、全画面に広げる。OnSelectにBack()と書く。
公式ブログで情報収集をする（Rustの場合）

# はじめに

自分の使っているプログラミング言語やフレームワークの最新情報をキャッチアップしていくことはとても大事です。
便利な機能の追加であったり非推奨になった機能のことを知っておくことはコードが腐るのを防ぐために役立ち、時には効率の向上も見込めます。

しかし、情報の収集は簡単なことではありません。
日々行われるコードの更新のうち何が重要で何が重要ではないのかを自身で判断するのは難しく、専門家のフィルタリングを噛ませたいと思うでしょう。
また、日本語を普段使う文化圏から英語文化圏の情報の収集をするのも一つ壁を感じることもあるでしょう。

そこで今回情報収集の一つの手段として紹介するのが「公式のブログやまとめを読む」ということです。
プログラミング言語やフレームワークの公式が「最近はこういう感じだよ」と紹介してくれている情報は適切なフィルタリングがされた良い情報の塊です。

今回は[Rust](https://rust-lang.org)というプログラミング言語が運用しているブログについて紹介します。


# Rust Blog

[Rust Blog](https://blog.rust-lang.org)はRust言語のメインのブログです。
ここでは開発陣の人事情報であったり、重大な変更の告知、新しいバージョンのリリースなどがあった際に記事が出ます。


ここ最近では

- [1.74.0のリリース](https://blog.rust-lang.org/2023/11/16/Rust-1.74.0.html)
- [ファイルの解析などを並列実行することでコンパイルを高速化する変更を入れる予定がある](https://blog.rust-lang.org/2023/11/09/parallel-rustc.html)
- [古すぎるApple系列のOSのサポートを打ち切る](https://blog.rust-lang.org/2023/09/25/Increasing-Apple-Version-Requirements.html)

などが個人的に印象に残っています。

# Inside Rust Blog

[Inside Rust Blog](https://blog.rust-lang.org/inside-rust)はより開発者向けのブログとなります。
新しい機能が追加されたプレリリースへのテストの参加であったり、今後の開発方針などが掲載されます。

ここ最近では

- [Rustの仕様を明確なドキュメントにする上でRust言語公式がこれから行うこと](https://blog.rust-lang.org/inside-rust/2023/11/15/spec-vision.html)
- [自動でセキュリティに関するチェックをするcarg-auditの新しいバージョンのリリース](https://blog.rust-lang.org/inside-rust/2023/09/04/keeping-secure-with-cargo-audit-0.18.html)
- [creates.ioにアップロードされたマルウェアの排除についてのレポート](https://blog.rust-lang.org/inside-rust/2023/09/01/crates-io-malware-postmortem.html)

などが個人的に印象に残っています。

# This Week in Rust

[This Week in Rust](https://this-week-in-rust.org)はより一般ユーザー向けの情報が載っている週刊まとめブログです。

内容としては

- Rust公式からの発表
- Rustや周辺ツールに入った更新
- Rustに関連した考察や解説についてブログや動画
- Rustに関連したイベントの開催のお知らせ

などがリンクと簡単なキャプション付きで列挙されています。特にブログや動画については10個程度と多すぎず少なすぎずの量であり、他の人がどのようにコードを書いているのかなどについてのキャッチアップが隙間時間でできるようになっています。
これらのブログや動画の内容はある程度事前にチェックされているため、一定の質があることが保証されていると考えて良いでしょう。

ここで今まで知らなかった新しい便利なツールやライブラリの情報などを入手することができたり、より効率的で効果的なプロジェクトの構成のための情報を入手することができたりととても便利にしています。

# おわりに

今回の記事ではプログラミング言語などの特定の技術について最新の情報を追うための手法の一つとしての「公式のブログを読む」というものを紹介しました。
具体例としてはRust言語のものを挙げましたが、これは他の言語についても同様なものがあるかと思いますので応用してみてください。

もし公式ブログや週刊まとめブログが無いような場合には、自分自身の手でリポジトリのIssueやインターネットの海を徘徊して情報まとめる作業をしてみてはいかがでしょうか。
偉大なる先人方がどのような基準で収集しているのかを参考にしながら進めていくと大きな力に繋がると思います。
UnityでMetaQuest3のVR開発しようとする時の備忘録

# 読む前に。
こんなものを書いた矢先、よく参考にさせていただいていた大久保聡さんという方のスライドで、Meta XR SDK 最新版についてのスライドが公開されていました。こっちを見たほうが良いと思います。
* https://www.docswell.com/s/Ovjang/5Q846J-MetaXRSDK

# はじめに
自分用備忘録です。
初めてのMetaQuestシリーズのスタンドアロンアプリの開発で、色々調べながらやっていたところ、以前のOculus Interaction SDK 57.0.0以下のバージョンは非推奨になり、今はMetaXRなんちゃらという機能別のAssetをAssetStoreから引っ張ってくるようになったぽい。
Assetの内容に大きく変更があったわけじゃなさそう？ではあるものの、微妙に手順が違ったりしそうだったので一回まとめ。

# 環境
* Unity 2022.3.12f1

# Asset
* Meta XR All-in-One SDK 59.0.0

# ひとまずプレイできるまでの環境構築
1. プロジェクト作成
    * 普通に3Dテンプレで作った
2. Meta XR All-in-One SDKを導入
    * Meta XR All-in-One SDK: https://assetstore.unity.com/packages/tools/integration/meta-xr-all-in-one-sdk-269657 
3. プロジェクトの設定
    * Build SettingsでPlatformをAndroidに変更
    * Project Settings>Oculusを選択、PCアイコンタブのCheckListのOutStanding Issuesという欄の右側、FixAllボタンをポチッとな。
    * 上と同様に、今度はAndroidアイコンタブのCheckListのOutStanding Issuesという欄の右側、FixAllボタンをポチッとな。
    * （ここまででエディタ再起動するかとかを聞かれた気がする…そういうのはすべて言われるがままに肯定ボタンぽちー）
    * Project Settings>XR Plug-in Managementを選択、PCタブでOculusにチェック（これがないとプレイボタン押してもHMDで実行してくれない）
    * 上と同様に、今度はAndroidタブでOculusにチェック
4. カメラをHMD用Prefabに置き換える
    * デフォルトシーンのMainCameraは削除
    * Unityエディタのメニューバーより、Oculus>Tools>Building Blocksを選択。Building Blocksのウィンドウが出るので、中にあるCamera Rigという項目の右下のボタンより、シーンにCamera Rigを追加。（これがHMD用prefab）

たぶんここまでやれば実行できるはず…

# コントローラーやハンドトラッキングの表示
このあたりは（Building Blocksを出したあたりで気づくと思うけど）ここから追加。
ただ、ハンドトラッキング用の掴むアクションとかはあるものの、純粋なVRのコントローラーアクションについてはひと工夫必要っぽい（一工夫というか、ちょっと改造が必要というか…）。

まだこちらは作り方をまとめるほど僕の知識量が追いついていないので追々気が向いたら…

# ちなみに
Meta XRなんちゃらのアセットにはサンプルシーンをまとめたものがあり、そちらを見ると、コントローラー操作でものが掴めたりするので、具体的な実装を探るならドキュメント等を見つつ、このサンプルたちを観察するのが良いと思います。
https://assetstore.unity.com/packages/tools/integration/meta-xr-interaction-sdk-ovr-samples-268521
Excel依存症の民を救いたい

## はじめに
本記事は、Excelを非難するものではありません。
Excelは素晴らしいツールです。
適切な運用をすればとても便利なツールです。

一方でExcel依存(Excelしか選択肢にない状態)になってしまうとあらゆるものをExcelで解決しようとします。

> ・複雑に組み合わさったexcel関数
> ・保守も出来ないのに頑張って作ったであろうマクロ

これくらいなら全然OKです。
そこからさらに。。

> ・複数シートに及ぶインプットデータ
> ・複数シートのインプットデータを使うexcel関数
> ・最終結論に必要な中間セルや中間シートの誕生

ここまでくると**作った本人**しか理解出来ません。
そしてその本人が去った後、excelを引き継いで絶望した人はエンジニアの元に訪れて相談するのです。

引き継いだ人：「excelを引き継いだのですが複雑で保守出来ません。エンジニアの方で対応出来ないでしょうか？」

ワイ：「・・・地獄か？」

そうなる前に対処しましょう。

:::note info
・地獄のようなExcelに対して、本当にExcelで対応が必要なことか考えることが大切
:::

## 対処方法
2つ紹介します。
1\.Excel依存のデメリットを伝える
2\.他の選択肢を伝える

### Excel依存のデメリットを伝える

一言で言うと「**時間の無駄**」です。

本人しか保守できないものは組織にとって何に役にも立ちません。
それを作るために使った時間、保守に費やす時間の無駄です。

また、それに気づいている組織ほど後述する他の選択肢で問題を解決しています。
つまり、苦労して磨いた経験、スキルも外では役に立たない可能性があります。

時間の無駄なのでやめさせましょう。

### 他の選択肢を伝える
2つ、メリット・デメリットを踏まえて紹介します。

#### 1.専用ツールを開発する
##### メリット
* 細かい要望も実現出来る

##### デメリット
* 導入が遅い
* 開発費用が掛かる
* 保守のための社内リソースが必要

#### 2.外部サービスを利用する
##### メリット
* 導入が早い
* 保守のための社内リソースが不要

##### デメリット
* 費用が高い
* 全ての要望の実現が難しい

:::note info
・地獄のようなExcelを保守し続けることが如何に不毛であるか伝える
・他の選択肢を伝える
:::

## エンジニアに出来ること

「1.専用ツールを開発する」でより良い方法を提案することがエンジニアの出来ることです。

細かい要望も実現出来ることは当然として、
導入速度を上げ、開発費用を抑える方法を提案しましょう。

自身の開発能力を上げるのも良いですが、
世の中には数多くの便利なサービスやオープンソースがあります。

より良い方法を提案するために世の中のトレンドを抑えることは重要だと言えます。
~~このことに最近ようやく気付いた~~

また、実際に触ってもらうのも効果的です。
いきなり100のものを用意するのではなく、最低限動くものを用意しましょう。
そして実際に触ってもらうことで、なぜ今までこんなに不憫なことをしていたのか気づくきっかけになるでしょう。

きっと。。

:::note info
・世の中のトレンドを抑えて自身の選択肢を増やす
・世の中の優れたサービスを触ってもらう
:::

## まとめ
Excel依存症の民を救う方法を紹介しました。

初めに伝えた通り、Excelを使うなと言っているのではありません。

しかしExcelの役割が肥大化し複雑な機能を有した時に、
「これは本当にExcelでしないといけないことなのか？」
と見直すことは大切だと思います。

もし身近に地獄のようなExcelを運用している人がいたら救ってあげましょう。
「FA・ロボットSI・産業装置」 関連の参考になりそうなサイトまとめ

# 「KYENCE / 改善事例・学習・調べる」

https://www.keyence.co.jp/solutions/

キーエンスさんのホームページの改善事例集

# 「Metoree」

https://metoree.com/

産業用製品メーカー比較サイト

# 「おしえてJSS FA業界に携わる人に耳寄りなお役立ち情報」

https://jss1.jp/column

天野さん代表の「株式会社FAプロダクツ」のコラム集.
JSSは「日本サポートシステム株式会社」さんの略称
「日本サポートシステム株式会社（JSS）」は2023/5/31に「株式会社FAプロダクツ」さんに事業統括されている．
Macで brew を利用してPHP複数バージョンを切り替える方法

`brew` を使用して複数の PHP バージョンをインストールし、切り替える方法は、`brew` の `php` タップを使用することで簡単に行えます。以下に手順を示します。

### 1. Homebrew のアップデートとアップグレード:

まず、Homebrewを最新の状態にアップデートし、アップグレードします。

```bash
brew update
brew upgrade
```

### 2. PHP 7.4 のインストール:

次に、PHP 7.4をインストールします。

```bash
brew install php@7.4
```

### 3. PHP 8.1 のインストール:

同様に、PHP 8.1もインストールします。

```bash
brew install php@8.1
```

### 4. バージョンの切り替え:

#### a. PHP 7.4 を利用する場合:

```bash
brew unlink php
brew link --force --overwrite php@7.4
```

#### b. PHP 8.1 を利用する場合:

```bash
brew unlink php
brew link --force --overwrite php@8.1
```

### 5. 切り替えた後、正しいバージョンがインストールされていることを確認:

```bash
php -v
```

これで、必要なバージョンの PHP を簡単に切り替えることができます。必要に応じて、上記の手順を繰り返して異なるバージョンを切り替えることができます。

### 6.上記で切り替わらない場合に切り替える方法

切替実行用のシェルスクリプトを作成して行う。

> chg_php74.sh

```bash
echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
```

> chg_php81.sh

```bash
echo 'export PATH="/usr/local/opt/php@8.1/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/php@8.1/sbin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
```

切り返したい場合は以下のコマンドを実行する。

```bash
source chg_php74.sh
php -v

source chg_php81.sh
php -v
```
pygameの簡単なコードなのになぜか重いのは、イベント処理の不足が原因の可能性

## 要約
簡単なテストコードでも重くフリーズしたようになるが、イベントハンドリングを行っていないからかもしれない。

## コード

```python
import pygame

# 初期化
pygame.init()

# 定数
WIDTH, HEIGHT = 800, 600
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
BLUE = (0, 0, 255)

# ウィンドウの設定
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Game Template3")

# フレーム数
clock = pygame.time.Clock()
# フレームレートの上限設定
fps_limit = 30

# ゲームループ
running = True

# 再描画対象のrectリスト
dirty_rects = []

pygame.display.flip()

while running:
    clock.tick()
    dirty_rects = []

    # ★ここがないと固まった。
    # for event in pygame.event.get():
    #     if event.type == pygame.QUIT:
    #         running = False

    # 塗りつぶし
    screen.fill(BLACK)

    # 青い四角形の描画
    rect_square = pygame.draw.rect(screen, BLUE, (100, 100, 100, 100))

    #dirty rectのリスト作成
    dirty_rects.append(rect_square)
    pygame.display.update(dirty_rects)


    # フレームレートを制限
    clock.tick(fps_limit)

# Pygameを終了
pygame.quit()

```


## ドキュメントにも書いてありました
https://www.pygame.org/docs/ref/event.html
>Not handling events may cause your system to decide your program has locked up.

でも、「イベントキューにたまり過ぎたら古いものからドロップするよ」とも書いてあるので、普通に動いてほしくはあります。
>The event queue has an upper limit on the number of events it can hold. When the queue becomes full new events are quietly dropped.
laravel PHPUnit Featureテスト データプロバイダー内でconfig関数を呼び出す

## 概要

Featureテストのデータプロバイダー内部にてlaravelのヘルパ関数である`config()`を呼び出そうとして若干詰まったのでまとめる

## 問題

下記のようなコードをデータプロバイダー内部に記載した。

```
// 許容値+1の経歴を作成
$invalidHistoriesNum = [];
$historiesAllowedMaxCount = config('user.histories.allowed_max_count');
for ($i = 0; $i < config('user.histories.allowed_max_count'); + 1; $i++) {
    $invalidHistoriesNum[] = [
        'startYear' => $defaultValidParams['startYear'],
        'endYear' => $defaultValidParams['endYear'],
    ];
}
```

実行したところ当該のデータプロバイダーを呼び出しているテストが`No tests found`となった。
データプロバイダー内部の処理がイケてないため`No tests found`になる模様だった。

データプロバイダーはPHPUnitのライフサイクルで用意される。
ようはPHPUnitは起動しているけどlaravelがまだ起動していない状態でlaravelの`config()`ヘルパ関数を実行しているためPHPUnit内でデータプロバイダーの生成がうまくいっていない模様だ。

## 解決方法

下記のように`$this->createApplication();`を追記することで問題は解決した。

```
$this->createApplication();

// 許容値+1の経歴を作成
$invalidHistoriesNum = [];
$historiesAllowedMaxCount = config('user.histories.allowed_max_count');
for ($i = 0; $i < config('user.histories.allowed_max_count'); + 1; $i++) {
    $invalidHistoriesNum[] = [
        'startYear' => $defaultValidParams['startYear'],
        'endYear' => $defaultValidParams['endYear'],
    ];
}
```

余談だがテストクラスの`setUp()`の中で`$this->createApplication();`を記載しても問題は解決しない。
これは`setUp()`もPHPUnitのライフサイクルで実行されるためである。

## 参考文献

https://sakamata.hateblo.jp/entry/2020/07/01/160035

https://qiita.com/miriwo/items/7f91bd282d9da97a766a
Azureを1から始めてみる

## 初めに
会社でAzureを使っていて自分でも使ってみようと思うので1からAzureを始める流れを記録していこうと思います。

## アカウント作成
まずは[Azure](https://azure.microsoft.com/ja-jp)のホームページにアクセスする。

"無料で始める"ボタンから新しく新しいアカウントを作成します。

自分の情報やクレジットカードを登録してアカウント作成完了。

Azureは従量課金制なのでクレジットカードを登録すると勝手に決済されないか不安に思うかもしれませんが、無料アカウントから従量課金制に移行する際にちゃんと確認が来るため無料で始めたい方も安心してクレジットカードを登録できます。

## クイック スタート センター
アカウントを作成すると↓のような画面に移行します。
各項目についてAzureの使い方と簡単な説明が載っています。
動画でも説明してくれているので日本語字幕を付けてみてみるとよいかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626035/a586ea55-0e84-7f7d-e2ec-cad7349d3790.png)

## リソースグループ作成
Azureを始めるにはなにをするにもまずリソースグループが必要です。
会社では部署ごとにリソースグループを分けたりしてコストの計上先を分けることができます。

Azure portalのホームの上のほうにリソースグループと書かれたアイコンがあるのでそれをクリックします。
作成ボタンを押すと↓のような作成画面が出るのでリソースグループ名を決めてリージョンを"Japan East"にして「確認および作成」ボタンを押して作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626035/ae842452-9e08-ce6e-cf62-fcab169ca60c.png)

## 目的を持つ
ここまででAzureを使う準備が整いました。
Azureはできることが多いので何をすればいいかわからないと思います。
Azureをとりあえず使ってみる、というのであればVMやblob storageなどがわかりやすくAzureに触れることができると思います。
laravel Featureテスト データプロバイダーを使ったテストメソッドを指定して実行するとがNo tests foundと言われる

## 概要

laravelのFeatureテストにて、データプロバイダーを使用したテストメソッドをテストファイル・テストメソッドを指定して個別実行したところ`No tests found`と言われる問題を解決するのに時間がかかったので簡単にまとめる。

## 情報

テストを実行したコマンドを下記に記載する。

```
make method-test class=tests/Feature/App/Http/Controllers/HogeControllerTest.php method=test_何かしらを確認
```

テスト実行コマンドの引数としてテストクラスのファイルパスを渡し（class=の後）、メソッド名も渡した（method=の後）。
何度確認しても当該のコマンドに誤りはなく正しい値が設定できている。
にも関わらず`No tests found`というエラーでテストメソッドが実行できない。

## 原因

十中八九データプロバイダー内に記載ミスが有る。
割と自分がやりがちなのがデータプロバイダーの中で`$this->createApplication();`を書かずに`config()`ヘルパ関数を読んでしまう。。。。
Quest Proの電源ボタンの配置がおかしい件とその対策

## はじめに

Quest Proの電源ボタンは、左側のツルの下、画像の位置にあります。

何が問題かというと、Quest Proの形状から、重心がツルのあたりにあるので、ツルのあたりを持って持ち上げるのが自然と考えられます。
つまりこの電源ボタンの位置です。このため、着脱したいだけなのに、不意に電源ボタンを押してしまいがちです。

電源ボタンを押すと何がおこるかというと、スリープ状態になります。もちろん特に問題がないケースもありますが、アプリによってはスリープによってずれが発生したり、状態が変わったりすることもあるので、電源ボタンを不用意におさないに越したことはありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71421/98a43468-4379-58bf-dffa-8f7484eb9936.png)

## 対策方法概要

ツルの外側に邪魔なプレートをつけて、下から持ち上げようとしたときに、電源よりもこのプレートに先に触るようになれば、「ここは持っちゃいけないな」という感じになると思われます。最悪、ここを持っても大丈夫な程度の接着を行います。

この方法であれば、電源ボタンを本当に押したいときは内側から触ることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71421/568b635f-6747-43d6-6307-87188f74e191.png)

貼り付け方法ですが、[3Mのコマンドタブ](https://www.command.jp/3M/ja_JP/command-jp/)はかなり強力なので、こちらを利用します。コマンドタブは、跡を残さずに除去できる特徴があります。
小さいものを２枚利用することで、強力に貼り付けます。

貼り付け方法は、Quest Proに復帰不可能なダメージを与えてよい場合は、強力な接着剤やグルーガンも選択肢に入ると思います。ただし、中に電子部品や電線が入っていますので、あまり熱を与えないほうが良い可能性もあります。

## 材料

3M コマンドタブ Sサイズ ２枚
例: https://www.amazon.co.jp/dp/B002YMQI0S
鍵につける名前用プレート（高さ3cm程度、厚み2～3mm程度)
例: https://www.amazon.co.jp/dp/B07LG7D12Y

## 準備

Quest Proの電源ボタンのある側面を綺麗にしておきます
コマンドタブ２枚をくっついたまま以下のようにハサミなどで成形します

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71421/1bc445ea-43c5-6923-ecce-22ecab5e6e3a.png" width="400px">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71421/3cc4b887-eb64-9090-ec51-50738caa4881.jpeg" width="400px">



## 貼り付け

コマンドタブ２枚の赤いシールをはがして、プレートに貼り付けます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71421/7c649abe-0d63-1062-cb25-730e89e208b7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71421/d818ed98-4a5c-84af-6fe1-5d286352bf48.png)

別サイドのシールをはがして、電源ボタンのあるツルの側面部分に取り付けます
このとき、30秒程度指で押しておくと良いらしいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71421/f50799f2-8731-771a-baa9-d8867176c06b.png)

![IMG_1357.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71421/29b7fd57-0ef5-d010-f650-cf6b7fbc184c.jpeg)

![IMG_1358.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71421/9b67545b-8ad2-78ce-e673-c20f09b32715.jpeg)


## 出来上がり！

![IMG_1359.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71421/04e1ea95-e821-fb52-f667-b66540c3f8ad.jpeg)

プレート部分を持っても持ち上げられる程度の強度があります。とはいっても、あまり勢いよくやると外れるかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71421/aaacc1d2-3a00-2e7f-5785-150485b43978.png)





<br /><br /><br /><br /><br /><br /><br />
Keywords: Power button, Power switch
OpenSSLで証明書を確認するときのコマンド備忘録

TLS証明書の中身を確認したり検証したいときに、いつもコマンドがわからなくなるので、備忘録的にまとめておきます。

## 本記事で扱わない内容について

- 証明書の発行（証明書署名リクエストの作成やCAの運用など）
- 証明書の各項目の意味やファイル形式の詳細な説明など

今回はあくまで、既にある証明書やサーバー上の証明書の確認などが中心です。
証明書の発行に関わる内容は含みません（それだけでかなりのボリュームになってしまうため）。

また、運用でよく使うコマンドを簡単にまとめたものであり、コマンドやオプションを網羅的に紹介するものではありません。

## 証明書の内容を表示する

手元にある証明書ファイル（`.crt`や`.pem`など）の中身を確認したいときのコマンドです。

```sh
# 証明書の内容をテキストで表示
openssh x509 -noout -text -in 証明書ファイル

# 証明書のIssuerとSubjectと有効期間を表示
openssl x509 -noout -issuer -subject -dates -in 証明書ファイル
```

### オプションの意味

- `-noout`: 指定した出力オプション以外の出力を抑制する  
  （これを指定しないと入力の証明書ファイル自体も出力されるので、大抵はお約束のようにつける）
- `-text`: 証明書の全ての内容をテキストで出力する
- `-issuer`: `Issuer`を出力する
- `-subject`: `Subject`を出力する
- `-dates`: 有効期間（`notBefore`と`notAfter`）を出力する
- `-in`: 入力ファイルを指定する

## 証明書から公開鍵を取り出す

証明書から公開鍵を取り出したいときのコマンドです。

```sh
openssl x509 -noout -pubkey -in 証明書ファイル >公開鍵ファイル
```

やっていることは「[証明書の内容を表示する](#証明書の内容を表示する)」と同じです。
指定するオプションが`-pubkey`（公開鍵を出力する）になっただけです。

## 証明書の形式を変換する

DER形式（バイナリ形式）の証明書ファイルとPEM形式（テキスト形式）の証明書ファイルを相互に変換したいときのコマンドです。

```sh
# DERからPEMへの変換
openssl x509 -inform DER -in cert.der -outform PEM -out cert.pem

# PEMからDERへの変換
openssl x509 -inform PEM -in cert.pem -outform DER -out cert.der
```

※入力ファイルの形式は自動的に判別されるので、`-inform`は指定しなくてもよさそうです。

## サーバーに設定されている証明書を検証する

サーバーに設定されている証明書を検証したいときのコマンドと確認方法です。

```sh
openssl s_client -connect example.com:443 -showcerts </dev/null
```

出力の最後に出てくる`Verify return code`が`0 (ok)`になっていれば、証明書の検証に成功したということになります。

ややこしいですが、最初のほうに出力される各証明書別の`verify return`は`1`が正常を意味します。

` -showcerts`を指定すると、チェインひとつひとつの証明書も出力されます。

メールサーバーなどSTARTTLSが必要なプロトコルの場合は、`-starttls プロトコル`（プロトコルの部分は`smtp`, `imap`など）などのオプションを追加指定することで対応できます。

まぁ、普通にブラウザで確認したほうが視覚的にもわかりやすいと思います。
メールサーバーなどブラウザで確認できないプロトコルの場合に役立ちます。

:::note
サーバーのTLS設定（プロトコル、暗号スイートなど）を全般的にチェックしたい場合には[sslscan](https://github.com/rbsec/sslscan)というツールも役に立ちます。

ただし、sslscanは脆弱性診断などによく使われる類のツールであるため取り扱いには十分注意してください。
自身の管理外である第三者のサーバーなどに対して使用すると、不正アクセス禁止法等に抵触する可能性があります。
:::

## サーバーの証明書をダウンロードする

サーバーに設定されている証明書をダウンロードしたいときのコマンドです。

```sh
openssl s_client -connect example.com:443 </dev/null | openssl x509 >site.pem
```

検証の時と同様、他のプロトコルの場合は`-starttls プロトコル`を指定すればよいでしょう。

## （おまけ１）秘密鍵から公開鍵を取り出す

証明書は関係ないですが、秘密鍵から公開鍵を取り出したいときのコマンドです。

```sh
openssl rsa -in 秘密鍵 -pubout -out 公開鍵
```

## （おまけ2）秘密鍵にパスフレーズを付けたり外したりする

これも証明書は関係ないですが、秘密鍵にパスフレーズを付けたり外したりしたいときのコマンドです。

```sh
# 秘密鍵にパスフレーズをつける
openssl rsa -in 秘密鍵 -out パスフレーズつき秘密鍵 -aes256

# 秘密鍵からパスフレーズを外す
openssl rsa -in パスフレーズつき秘密鍵 -out 秘密鍵
```

## おわりに

備忘録ということもあって特に体系立てた内容ではないですが、たまに証明書ファイルを扱ったりするときに、毎回「どんなコマンドだったっけ、なんかオプションいっぱいあるんだよな」となるので、よく使うコマンドをまとめてみました。
SSH接続時: Load key "[鍵ファイル名]": error in libcrypto が出た時の対処方法

新しいサーバーの鍵を渡された時、情報は正しいのにうまく接続できない時がありました。

```
user@MacBook-Pro % ssh -i "id_rsa" user@192.168.1.1
The authenticity of host '[192.168.1.1]:22 ([192.168.1.1]:22)' can't be established.
ED25519 key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXX.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[192.168.1.1]:22' (ED25519) to the list of known hosts.
Load key "id_rsa": error in libcrypto
user@192.168.1.1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
```

普通だったら `Permission denied (publickey,gssapi-keyex,gssapi-with-mic).` のエラー文を見て、秘密鍵が間違ってるかな？と思うかもしれませんが、その直前にあるエラー文に注目

```
Load key "[鍵ファイル名]": error in libcrypto
```

のエラーが出た時は、秘密鍵の最後に、改行が無い時に出るエラーらしいです。

```
-----BEGIN OPENSSH PRIVATE KEY-----
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
(省略)
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

-----END OPENSSH PRIVATE KEY-----
```

一番最後に改行を入れて、保存しなおしましょう。


```
-----BEGIN OPENSSH PRIVATE KEY-----
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
(省略)
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

-----END OPENSSH PRIVATE KEY-----

```

なんてこったい。

参考
https://github.com/openssl/openssl/issues/13443#issuecomment-1354750805
https://zenn.dev/scenee/articles/66ec402d1f7fe7
Railsのキャッシュがいつ切れるかを確認したい

Railsには重いクエリの結果や外部から取得したデータを一時的に保存するために、cache機能が用意されています。
たとえば以下のように記述することで、キャッシュストアの`hoge`キーに値が入っていればキャッシュストアの値を利用し、なければブロック内の処理を実行し、ブロックの返り値をキャッシュストアに保存する処理を行います。

```ruby
Rails.cache.fetch('hoge', expires_in: 12.hours) do
  # 保存したい値が返るように記述する
end
````

## いつキャッシュが切れるか見たい

さて、上記のサンプルコードのように`expires_in`でキャッシュの時間を指定できるというのは有名ですが、今回は逆にキャッシュが切れる時刻を確認したいケースです。

キャッシュが切れる時刻を取得にするためには、以下のコードのように`Rails.cache.read_entry`を利用します。

```ruby
# キーに値が入ってない場合nilが返るため、expires_atの前に `&`を書いている。
Rails.cache.send(:read_entry, '取りたいキー')&.expires_at
=> 1700665200.3722553
irb(main):007:0> Time.at(expires_at)
=> 2023-11-22 15:00:00 195169/524288 +0000
```

read_entryはprivateメソッドであるため、sendを使ってread_entryを呼び出しています。
このメソッドはキャッシュストアから取ってきたデータを、[ActiveSupport::Cache::Entry](https://api.rubyonrails.org/v3.2.16/classes/ActiveSupport/Cache/Entry.html)　というクラスに変換をしています。
ActiveSupport::Cache::Entryには`.expires_at`というメソッドが定義されており、このメソッドを呼び出すことでキャッシュが切れる時間をUnixTimeで保存することができます。
あとは`Time.at`などで変換をしてあげると、いつキャッシュが切れるのか確認しやすくなるでしょう。


## REF
https://github.com/rails/rails/blob/23938052acd773fa24068debe56cd892cbf8d868/activesupport/lib/active_support/cache/redis_cache_store.rb#L310
https://github.com/rails/rails/blob/f78cb5583f77952aa35e063a660a11aad5f8de7f/activesupport/lib/active_support/cache.rb#L614
https://github.com/rails/rails/issues/45311
【参考記事】git pushでWARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

git pushしようとしたら「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」というエラーが出て、そのときに調べて出てきた記事で解決できたのでメモしておきます

https://zenn.dev/fujishiro/scraps/9dcbd03aa608ae
文字列の8桁数字を整数型や日付型にする(SPSS Modeler データ加工逆引き2-16)

# 文字列の8桁数字を整数型や日付型にする

![スクリーンショット 2023-11-27 13.41.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/cdfb72c7-8a0f-9f4c-b520-cbca79bc5062.png)

## 1.想定される利用目的

DBで定義されているデータの型を分析目的に応じて変更する
文字列で定義されていると比較や計算ができないため、整数または日付に変更する

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/string2integer_date.str

## 3.サンプルストリームの説明

![スクリーンショット 2023-11-22 13.40.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/a0d75762-e992-f6c9-14db-35f59c223e78.png)

a.入力するデータは以下の通りです。セルの左側に寄せられていることから文字列だとわかります。
![スクリーンショット 2023-11-22 13.43.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d105657b-9271-daac-6c7a-e4a8c1b1e673.png)

b.[データ型]ノードを確認します。　フィールド列の日付の前に[A]のアイコンがあり、尺度も名義型と判別され文字列として認識されています。
![スクリーンショット 2023-11-22 13.43.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/5c9d283f-1de2-3bd7-b4f7-7ccb584e10fd.png)

#### 文字列を整数型へ

c.[フィールド作成]ノードを編集します。　[置換]条件を[常時]にして、以下の関数で型を変更します。
![スクリーンショット 2023-11-22 13.43.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/caa69eb1-9c0f-28fd-3664-19b0baf9d450.png)

d.[データ]ノードを確認します。　フィールド列の日付の前に整数ストレージのアイコンがあり、尺度も連続型と判別され整数型へ変更されたことがわかります。
![スクリーンショット 2023-11-22 13.43.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/7ac1ce46-caaa-4c9f-60ae-f385806da546.png)

#### 文字列を日付型へ

e.[フィールド作成]ノードを編集します。　[置換]条件を[常時]にして、以下の関数で型を変更します。
![スクリーンショット 2023-11-22 13.44.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ba8196b3-0cac-d65f-0b82-0d4a6b79891a.png)

f.[データ]ノードを確認します。　フィールド列の日付の前にカレンダーのアイコンがあり、尺度も連続型と判別され日付型へ変更されたことがわかります。
![スクリーンショット 2023-11-22 13.44.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/fac30685-63e0-377a-b1ef-c2add638c0a2.png)

#### 注意事項

データ型の変更は参照しているDBによってはSQLプッシュバックが有効でない場合がありますので、確認後適切な方法を検討します。

## 4.参考情報

#### よく使う文字列関数

https://qiita.com/Makimaki2020/items/35ab02a7375325e678c1

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008