OmniAICreator/Qiita-1.07M huggingface dataset:
AWS Certified Machine Learning Engineer - Associate(MLA-C01)は海外Udemyの問題を解けばとりあえず合格はできる

2025 Japan AWS All Certifications Engineersの申し込み開始が近づいてきたので、今年も申請資格を満たすべく、MLA-C01を受けてきました。

https://aws.amazon.com/jp/certification/certified-machine-learning-engineer-associate/

https://aws.amazon.com/jp/blogs/psa/2025-japan-aws-all-certifications-engineers-criteria/

## 試験結果

945/1000 (合格点720)で、これまで受けた試験で最高得点でした。

![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/20ecfd10-f46d-ae67-3e21-36a1cfc214de.jpeg)

今回は1周目で65問解くのに25分、13問の見直しを含めて35分で試験終了しました。最後までわからない問題は5問ありました。

## 勉強内容

新設されたばかりの資格でCloud License(解いておけばとりあえず合格できるWEB問題集)にまだ問題がありませんでした(2025/1/17時点)。

そのため、2つのUdemyとCloudTechの問題集で試験対策を行いました(Udemyはもちろんセール中の購入)。

https://www.udemy.com/course/mla-c01-aws-machine-learning-engineer-associate-4/

https://www.udemy.com/course/practice-exams-aws-certified-machine-learning-engineer-associate/

Udemy①(MLA-C01 / AWS Machine Learning Engineer Associate 対策テスト4回＋＠)を6周、Udemy②(Practice Exams: AWS Machine Learning Engineer Associate Cert)を4周、CloudTechを3周しました。

勉強期間は10日(20時間弱)でした。

## 試験を受けた感想

出題がUdemy②(Practice Exams: AWS Machine Learning Engineer Associate Cert)やCloudTechの問題と大体被っていたので楽勝でした。どちらかを解いておけば合格点には達しますが、片方にしかない問題も出題されていたので、どちらも解けば盤石です。

一方、Udemy①(MLA-C01 / AWS Machine Learning Engineer Associate 対策テスト4回＋＠)と同じような問題はほぼ出なかったので、MLSやAIFを持っている方であれば解く必要はないと思いました。機械学習やSageMaker初心者の方であれば、基礎固め用に解いておくのはいいかもしれません。

なお、Udemy②(Practice Exams: AWS Machine Learning Engineer Associate Cert)は英語の問題集ですが、Chrome拡張のGoogle翻訳で日本語に変換すれば普通に日本語問題集として活用できます(Bedrockが岩盤と翻訳されるのが気になるくらい)。

https://chromewebstore.google.com/detail/google-%E7%BF%BB%E8%A8%B3/aapbdbdomjkkjkaonfhkkikfgjllcleb?hl=ja&pli=1

これまで受けた試験の難易度は以下のような感じです(勉強時間や使ってきたサービスなどに依存するので、あくまで個人的な体感です)。ANS>>>>>SAP>=SCS>SOA>DOP>>SAA=AIF>DBS=DAS>MLS=MLA>DVA>CLF>PAS=DEA

## おわりに
ちなみに業務ではVertexを主に使っています。以前使っていたときよりSageMakerも進化しているっぽいので、ちょっと触ってみようかなと思います。
８日目〜StreamlitのUIでSQLを見えるようにしてみる〜

# ChromaDBを使った文書管理システムの構築と可視化



## 2. プロジェクトの説明

### ディレクトリ構造
```
chroma-test-project/
├── app.py               # FastAPI用のメインアプリケーション
├── streamlit_app.py     # Streamlitによるビューアーアプリケーション
├── requirements.txt     # 必要なパッケージの一覧
├── chroma_db/          # ChromaDBのデータ保存ディレクトリ
└── venv/               # Python仮想環境
```

### 各ファイルの役割

1. `app.py`
   - FastAPIを使用したバックエンドAPI
   - ドキュメントの追加・検索機能を提供
   - エンドポイント：
     - `/`: サーバー状態確認
     - `/add_document`: 文書の追加
     - `/search`: 類似文書の検索

2. `streamlit_app.py`
   - ChromaDBのデータを可視化するWebインターフェース
   - 4つの主要機能：
     - コレクション情報の表示
     - ドキュメント一覧の表示
     - SQLiteテーブルの閲覧
     - 埋め込みベクトルの可視化

3. `requirements.txt`
```
fastapi==0.115.6
uvicorn[standard]==0.34.0
chromadb==0.6.3
python-dotenv==1.0.1
streamlit==1.41.1
pandas==2.2.3
```

### データの保存場所

ChromaDBは`chroma_db`ディレクトリにデータを保存します：

Ran tool


データは以下の2つの場所に保存されます：

1. `chroma.sqlite3`
   - メタデータやインデックス情報を保存するSQLiteデータベース
   - コレクション設定や文書のメタデータを管理

2. `ff47ae48-966e-4abf-85af-9af82ac5d90b/`ディレクトリ
   - 埋め込みベクトルやコレクション固有のデータを保存
   - 以下のファイルを含む：
     - `data_level0.bin`: ベクトルデータ
     - `length.bin`: 長さ情報
     - `header.bin`: ヘッダー情報
     - `link_lists.bin`: リンク情報

## 3. セットアップ手順

1. 仮想環境の作成と有効化
```bash
python3 -m venv venv
source venv/bin/activate  # MacOS/Linux
```

2. 必要なパッケージのインストール
```bash
pip install -r requirements.txt
```

3. アプリケーションの起動
```bash
# FastAPIサーバーの起動
uvicorn app:app --reload

# 別のターミナルでStreamlitアプリケーションの起動
streamlit run streamlit_app.py
```

## 4. 使用方法

1. FastAPI（`http://127.0.0.1:8000`）
   - Swagger UI（`/docs`）で利用可能なAPIを確認
   - POSTリクエストで文書を追加
   - GETリクエストで類似文書を検索

2. Streamlitビューアー（`http://localhost:8501`）
   - コレクション情報：データベース内のコレクションの基本情報を表示
   - ドキュメント一覧：保存されている文書を表示（CSVエクスポート可能）
   - SQLiteテーブル一覧：データベースの生のテーブルを表示
   - 埋め込みベクトル：文書の埋め込みベクトルを視覚化

## 5. 注意点

1. ChromaDB v0.6.0の仕様変更
   - コレクションのメタデータへの直接アクセスが制限
   - `list_collections()`の戻り値の変更に対応

2. データの永続性
   - `PersistentClient`を使用してデータを永続化
   - アプリケーション再起動後もデータは保持

3. セキュリティ
   - 開発環境での使用を想定
   - 本番環境では適切なセキュリティ対策が必要

以上が、今回実装したChromaDBを使用した文書管理システムの概要です。初学者の方でも理解しやすいように、各コンポーネントの役割と使用方法を説明しました。
Ubuntuでapt install rbenvができない


```
$ sudo apt install rbenv
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package rbenv is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'rbenv' has no installation candidate
```
Ubuntuではもう保守されてないってね..
https://github.com/rbenv/rbenv?tab=readme-ov-file#debian-ubuntu-and-their-derivatives

Gitからインストールしてってね..
```
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
```
bash起動時にロードしてね..
```
$ echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bashrc
```
再起動。やったね
```
$ rbenv -v
rbenv 1.3.2
```
ruby-buildも同様に
```
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
```
installできるruby
```
$ rbenv install -l
```
鉄道オープンデータ提供サイト「鉄道駅LOD」の過去データが利用可能になりました

2020年より鉄道オープンデータ提供サイト **[鉄道駅LOD](https://uedayou.net/jrslod/)** を公開しています。
これまで毎年、鉄道データを更新してきましたが更新後は古いデータを利用・閲覧することが出来ませんでした。

この度、過去の更新データも利用できるようにしましたので紹介します。

# 鉄道駅LODとは

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/693f8a3c-7a0f-8d55-4ac8-e90ee812782c.png)


鉄道駅LODは、[国土数値情報ダウンロードサイト](https://nlftp.mlit.go.jp/)の、[国土数値情報 鉄道データ](https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N02-2023.html) をベースに、Wikidata や Wikipedia などから、ベースデータにはない様々な鉄道に関する情報を付加して、オープンデータとして公開するサイトです。

ベースデータには路線や駅の位置が含まれますが、鉄道駅LODからはそれに加えて、例えば、

* 公式サイトや 公式 X(Twitter) へのリンク
* 会社や路線のロゴ画像
* 路線内の駅の順番(次や前の駅がわかる)
* 乗り換え可能路線
* 時刻表提供サイトの当該駅ページへのリンク

などが得られます。
このような日本の鉄道に関するデータを一元的に、かつ機械可読可能な形で取得できるサイトは他にはないのではないかと思います。

詳しくは以下の記事を参照ください。

https://qiita.com/uedayou/items/b5131b5ca930fe0bef69

# 過去データ

過去データは 2019年から存在します。ただし、2019年（令和元年）版は一部データ項目がないため、注意が必要です。

更新年 | サイトURL | 備考
--- | --- | ---
2019年（令和元年） | https://uedayou.net/jrslod/v2019/ | 2020年以降に含まれる<br>データ項目が一部存在せず
2020年（令和2年） | https://uedayou.net/jrslod/v2020/ | 
2021年（令和3年） | https://uedayou.net/jrslod/v2021/ | 
2022年（令和4年） | https://uedayou.net/jrslod/v2022/ | 
2023年（令和5年） | https://uedayou.net/jrslod/ | 最新 

各アーカイブページトップは、鉄道会社リストとなっています。

[![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/4e912a0d-7398-be19-bc76-7ea47dd56d6c.png)](https://uedayou.net/jrslod/v2020/)

また、各、鉄道会社、路線、駅データについて、最新版と同様のほうほうｄJSONデータ等、機械可読可能なフォーマットでダウンロードすることも可能です。

# 過去と現在の比較

過去データと最新版データをいくつか比較してみました。
上述の通り 2019年は最新版と完全にデータ項目が一致しないため、2020年版と最新版を比較してみたいと思います。

## 新駅(福岡市地下鉄 七隈線)

七隈線は延伸により新駅が2つ追加され、終点が博多駅まで伸びました。

### 新駅追加前(2020年当時)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/8e3e0d63-f6ad-ab02-02a9-d5afab6cfe9e.png)

<https://uedayou.net/jrslod/v2020/福岡市交通局/七隈線>

### 追加後

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/4b4c0baa-96b1-0bad-c3db-27ffd1c9161a.png)


<https://uedayou.net/jrslod/福岡市交通局/七隈線>


## 駅名変更(西武鉄道 西武山口線)

山口線の路線にある3つのうち、2駅が名称変更となりました。

### 駅名変更前(2020年当時)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/a04a819b-7365-68f1-96f0-0542a7398617.png)


<https://uedayou.net/jrslod/v2020/西武鉄道/西武山口線>

### 変更後

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/f1ec5aee-bf88-5d7a-cf07-444a5b8dada3.png)


<https://uedayou.net/jrslod/西武鉄道/西武山口線>


## 廃駅(JR北海道 留萌本線)

留萌本線は、留萌市側の駅の多くが廃止となり、路線自体がかなり短くなりました。
留萌本線自体も廃線が予定されているようで、数年後には留萌本線のページもなくなってしまうかもしれません。

### 廃止前(2020年当時)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/550f9374-2b98-12ac-4c11-85fdb643f56b.png)


<https://uedayou.net/jrslod/v2020/北海道旅客鉄道/留萌本線>

### 廃止後

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/2e3f241c-2580-0a13-164a-bffd43d86305.png)

<https://uedayou.net/jrslod/北海道旅客鉄道/留萌本線>


# おわりに

今回、鉄道駅LODの過去データの閲覧対応の紹介として、新駅、駅名変更、廃駅の事例を紹介しました。
鉄道駅LODには、どこに新駅が出来て、どこの駅が廃止になったかについての情報は提供していませんので、
他のサイトなどと併せて(例えば、[こちらのサイト](http://www.trainfrontview.net/sdb/sta_jp7.htm)が参考になりました)いろいろと探してもらうと、過去データを使ってまた違った楽しみ方が出来るかもしれません。
Raspberry で人感プチライト

人感センサーを利用した主要なサービスを考えますと、
　　ライト（人が通ったらライトを着ける）　＝　節電
　　カメラ（人が通ったら写真や動画を撮影する）　＝　監視カメラ
が主流でしょうか？
カメラについては、以前、OpenCVで、２つの静止画から動体を検知したり、

https://qiita.com/MasahiroShouya/items/bda32efd0c6460b6b307

動画の中から動体を検知したり、

https://qiita.com/MasahiroShouya/items/c0e963b58e79da523ead

してみました。人感センサーの検知精度に問題を感じるなら、更に上記を追加した機能を検討する等、手法は色々とありそうですね。


**今回の御題**
「焦電型赤外線センサー」を利用して、何かを検知したときにLEDを点灯してみます。


**焦電型赤外線センサー**
「人感センサー○○」と、様々な家電で良く目にしますが、この白い球体が付いてますよね。
（下記の画像はセンサーライトです）
![人感センサー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878922/440949e1-2a9e-431d-c3f8-d0cde90b55b5.jpeg)

センサーを購入すると、白丸の裏にドライバーで調節が可能なツマミが付いているはずです。（２個か３個＝仕様によります）
調整が難しいのですが、私は下記の２つがあり、
　　（調光）暗い場所での感度を調整します
　　（感度）感度の度合いを調整します
![人感センサーの感度.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878922/5c39f836-5080-4341-9452-5004aa2c75a6.jpeg)
ドライバーで回しながら感度を調整します。


**回路**
使用方法は、データシートを確認する必要がありますが、私の手持ちは以下のように接続しました。
　（vcc）　　２番ピン（5v電源）
　（Data）　１２番ピン（GPIO-18）
　（GND）　　９番ピン（GND）
今回、Ｌチカもするので、
　（＋）　１１番ピン（GPIO-17）
　（－）　　９番ピン（GND）
も準備しています。 
![人感センサーの回路.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878922/ff3bdafe-565c-608e-ee9a-0464ac725219.jpeg)
（センサー回りのコードが長過ぎて、青いバンドでぐるっと止めてます）


プログラムを作成しましょう。
vi test.py

```diff_python:test.py
import RPi.GPIO as GPIO
import time

sens = 18           # センサーのDATAピン
ltika = 17          # Lチカのピン

GPIO.setmode(GPIO.BCM)
GPIO.setup(sens,GPIO.IN)      # センサーから受信
GPIO.setup(ltika,GPIO.OUT)    # Lチカへ送信

try:
  while True:
    if(GPIO.input(sens) == GPIO.HIGH):
        print("反応あり！")
        GPIO.output(ltika, GPIO.HIGH)  # LチカON
        time.sleep( 1 )
        GPIO.output(ltika, GPIO.LOW)   # LチカOFF
    else:
        print("反応なし")
        time.sleep( 1 )
except KeyboardInterrupt:
  print("Cleaning up")

GPIO.cleanup()
```

プログラムが完成したら、実行しましょう。
python test.py

センサーの前で手を振ってみましょう。
ＬチカしたらＯＫです。
お疲れさまでした～
WSL2+WSLgをインストールしてUbuntu20をセットアップ

### ディストリビューションの一覧
```
$ wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。

NAME                            FRIENDLY NAME
Ubuntu                          Ubuntu
Debian                          Debian GNU/Linux
kali-linux                      Kali Linux Rolling
Ubuntu-18.04                    Ubuntu 18.04 LTS
Ubuntu-20.04                    Ubuntu 20.04 LTS
Ubuntu-22.04                    Ubuntu 22.04 LTS
```
### install確認
```
wsl --status
既定のディストリビューション: Ubuntu-20.04
既定のバージョン: 2
```
「あるバイ」リリースまでの大変だった開発とは？開発メンバーにインタビュー！

こんにちは！あるバイの中の人です。

2025年1月1日に正式リリースを迎えた求人サイト「あるバイ」は、開発メンバーたちの熱意と努力の結晶です。
しかし、その裏側には数々の困難がありました。
今回、開発メンバー3人に実装に関して大変だったエピソードを語ってもらいました。
それぞれの挑戦と工夫、そして乗り越えた先に見えたものとは何だったのでしょうか？ぜひ最後までご覧ください！

## インタビュー
### 開発メンバーAさん：Next.jsとSEOの観点の難しさ
あるバイでは、フレームワークにNext.jsを使用しています。
Next.jsを使用した開発において、SEOの観点から実装を進めることが大きな課題となりました。
具体的には、SSR（サーバーサイドレンダリング）とCSR（クライアントサイドレンダリング）を適切に切り分けないと、意図しないページコンテンツがインデックスされてしまうという問題が発生しました。

また、要素を適切に制御しないと、ページの見た目上は問題なくても、クローラー側はうまく認識されないこともありました。

例えば、以下のような事例です。
```react:次のようなコードを書いた場合
const [title, setTitle] = useState('あるバイ');

return (
    <h1>タイトルは{title}です</h1>
);
```
このように文字列と変数を結合する記述をすると、HTML文内に ```<!-- -->``` が文字列と変数の間に挿入されてしまうという問題が発覚しました。
もちろん、ページの見た目は正常に表示されているように見えますが、H1に無駄な文字列が挿入されることでSEOの評価を下げる要因となります。


```react:実際に出力されるH1
タイトルはあるバイ<!-- -->です
```
これはReactの仕様に沿った挙動ではあるものの、特定のバージョンではバグとして報告されています。

以下のように、テンプレートリテラルを用いる記述に変更することで、修正を行いました。
```react:テンプレートリテラルに修正されたH1
const [title, setTitle] = useState('あるバイ');

return (
    <h1>{`タイトルは${title}です`}</h1>
);
```

```react:実際に出力されるH1
タイトルはあるバイです
```
無事に修正されています。

一見簡単に思えるHTMLの実装ですが、SEOやReactのレンダリングの特性を考慮すると、このように細部にまで気を配る必要があります。
この開発を通じて、SEOを意識した実装がいかに難易度を高めるかを痛感しました。

******

### 開発メンバーBさん：SEO改善のための緊急対応
「あるバイ」のテスト中に、Googlebotがクロールに来た際、ヘッダーとフッターしか読み取られず、肝心のページ中身が空であるという深刻な問題が発覚しました。

この問題は、セッションを持たないユーザーが訪問した場合、コンテンツ自体を表示しない制御が入っていたことが原因でした。
この制御自体は問題ありませんでしたが、クローラーの存在を考慮していなかったため、結果的にSEO評価が適切に行われない状況を引き起こしてしまいました。

***当初クローラーが読んでいたと想定されるヘッダーとフッターのみのページ***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982083/d60ca6fa-d49d-4bec-9617-9b55691a35c8.png)

この問題に対処するため、開発チーム全員が緊急対応に当たり、すべての修正を完了させました。
これにより、Googlebotが適切にページ内容をインデックスできるように修正されました。

この対応を通じて、SEOにおけるクローラーの挙動を深く理解し、それに合わせたサイト構築の重要性を再認識しました。
短時間での対応は非常に大変でしたが、チーム全体の協力により問題を解決できたことは大きな達成感がありました。

******

### 開発メンバーCさん：少人数チームならではの課題と工夫
少人数で開発を進めていると、細かな仕様が実装者ごとにズレてくることがありました。
こうしたズレを改善しながら進めていく中で、自分自身がユーザー視点で仕様を考える力が求められ、やりがいを感じる反面、大変な部分でもありました。

「あるバイ」の自社開発では、詳細設計を十分に行わず、実装を進めながら細かな機能を決めていくアプローチを取りました。
この方法により、より品質の高いコンテンツを作り上げることができましたが、同時に実装者間で挙動に微妙な違いが出ることについて、課題となりました。

具体的な例としては、以下のような場面が挙げられます：

- 入力ページでのエラーハンドリングが、ボタン押下時に行われるべきか、入力しながらリアルタイムに行われるべきか
- ボタンが非活性の場合、灰色にするだけでよいのか、それに加えてカーソルホバー時は```cursor: not-allowed;```を設定するべきか
- モーダルを閉じる操作として、「閉じる」ボタンを押すべきか、オーバーレイ部分をクリックするべきか、あるいはその両方をサポートするべきか

これらの課題に対して、チーム全体で議論を重ね、ユーザー体験を最優先にした仕様を決定しました。
このようなプロセスを通じて、細部への配慮がサイト全体の品質向上につながることを改めて実感しました。

***十分に検討重ねてキレイなUIとなった「あるバイ」***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982083/6ff63a10-62b6-78c2-b756-690d025abbe0.png)

## まとめ
「あるバイ」の開発は、少人数でありながらもチーム一丸となり、さまざまな課題に立ち向かうことで進められました。
Next.jsを用いたSEOの実装、緊急対応を要する問題の解決、ユーザー視点での仕様策定といったそれぞれの挑戦が、サイト全体の品質向上につながりました。

これらの経験を通じて、「あるバイ」はユーザーにとって使いやすく、快適で、検索エンジンからも評価される求人サイトとして成長を遂げました。
今後も、ユーザーと企業をつなぐプラットフォームとして、さらなる進化を目指します。

この開発の裏側にある努力や工夫を知ることで、「あるバイ」をさらに身近に感じてもらえたら幸いです。
ぜひ「あるバイ」を活用して、あなたに最適な求人を見つけてください！

あるバイ URL：https://arubai.jp
proxmoxインストールしてみた

## 概要
余っているPCがもったいなかったので、proxmoxをインストールしてみました！

## 手順
インストール用のISOとUSBメモリを用意します。
下記からISOファイルはダウンロードできます。
https://www.proxmox.com/en/downloads

USBメモリに書き込むため、専用のソフトを用意します。
今回はrufusを使います。
https://forest.watch.impress.co.jp/library/software/rufus/

起動すると下記画面になります。
![スクリーンショット 2025-01-11 132350.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882356/045a54ea-8471-1173-99aa-d8a4ba73bced.png)
USBメモリを差し込むと認識してくれますので、先ほどダウンロードしたISOファイルを選択します。
![スクリーンショット 2025-01-11 132507.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882356/e0352eab-e46f-ca86-f152-7741614cfe39.png)
選択しスタートをクリックすると、書き込みが始まります。
終わりましたら、取り外してインストールしたPCに差し込みます。
GUIが立ち上がりますので、指示に従って画面を進めます。
(画像を用意したかったのですが、取り込みできなかったので割愛します。)

起動時表示されたIPに別PCからアクセスすると、このような画面になります。
![スクリーンショット 2025-01-11 133133.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882356/308260b0-c4ef-4a7a-2d50-bc45c192d5aa.png)
自分の場合、日本語を選択しました。
ユーザー名とパスワードはインストール時に入力したものです。
![スクリーンショット 2025-01-11 133443.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882356/2288ef62-e2cf-a8a0-984e-b43b0829ebf6.png)
このような表示がでてきて、このままでは何もできないので設定を変えていきます。
![スクリーンショット 2025-01-11 133852.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882356/3cfef099-c238-db32-2c60-35eb77e4332d.png)
No-Subscriptionを選択し追加します。
![スクリーンショット 2025-01-11 134045.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882356/c904eecf-811c-62a9-460f-0dd060f05ed7.png)
下記２つが有料版ですので、オフにしてあげます。
![スクリーンショット 2025-01-11 134210.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882356/8e648b9e-ba22-97a2-105b-2c6bf31a1885.png)

## まとめ
とりあえずこれで、設定は終わりです。
時間ができたらAmazonLinux2023をインストールしていきたいと思います。
5分でSnapchatのような顔フィルターWebアプリを作る

[顔フィルター](https://trtc.io/demo/homepage#/detail?scene=beauty)と拡張現実（AR）は、SnapchatやInstagramのようなアプリのおかげで、ますます人気が高まっています。これらの魅力的な機能により、ユーザーは外見を向上させ、楽しいフィルターで遊び、リアルタイムで創造性を表現することができます。しかし、同じエキサイティングな機能を自分のWebアプリケーションに取り入れることができるのをご存知でしたか？Tencent RTCとその強力な[Beauty AR Web SDK](https://trtc.io/products/beauty)を使用すれば、わずか5分でSnapchatのような顔フィルターWebアプリを作成できます！

このチュートリアルでは、リアルタイムの美顔機能をサポートするWebアプリケーションのセットアップと実行について説明します。AR美顔、フィルター、メイク、ステッカーなどの魅力的な機能を実装する方法を学び、ユーザー体験を向上させることができます。

https://www.youtube.com/watch?v=wIRqfKW8l4E

# **ステップ1. ライセンスの作成**

# **1. 試用ライセンスの申請**

[試用ライセンスの申請](https://trtc.io/document/60218)の指示に従って、Webライセンスを作成したことを確認してください。

# **2. ライセンスキーとトークンの取得**

作成後、プロジェクトリストで作成したテストプロジェクトの情報を確認し、Beauty AR Web用の**`License Token`**とテストプロジェクト用の**`License key`**を取得できます。また、**`App ID`**も取得できます。

**注意：**

ライセンストークンは認証署名の計算に使用されるため、安全かつ機密に保管してください。ここでは、デモをローカルで実行するのを助けるために、フロントエンドで署名を計算するためにトークンを使用しています。実際の本番環境では、サーバー上で署名アルゴリズムを実装する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957687/df7875ea-c916-86d5-9b37-4b8c794102b9.png)

# **ステップ2. ローカルで実行**

1. [サンプルプロジェクト](https://github.com/tencentcloud-webar/web-demo-en/tree/master/quick-start)コードをプルします。

```jsx
git clone https://github.com/tencentcloud-webar/web-demo-en.git
cd quick-start
```

2. `index.js`の指定された設定項目を、[ステップ1](https://trtc.io/document/53939?platform=web&product=beautyar&menulabel=web#step1)で取得したライセンスキー、トークン、`APPID`に以下のように置き換えます：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957687/ab9ab617-dd27-5945-20ac-8531f3e58182.png)


3. ローカル開発環境でプロジェクトを実行します。

**注意：**

プロジェクトをローカルで実行する前に、デバイスに`nodejs`環境がすでにインストールされていることを確認してください。

プロジェクトディレクトリで以下のコマンドを順番に実行し、ブラウザで`localhost:8090`にアクセスしてBeauty AR Webの機能を試してください。

```jsx
# 依存関係のインストール
npm i

# コードのコンパイルと実行
npm run dev
```

上記の手順に従うと、デスクトップブラウザ用のSDKのフィルターと効果を試すことができます。[概要](https://trtc.io/document/50099)の指示に従って、組み込みの素材を使用してさまざまなメイクフィルターや効果を試したり、カスタムステッカー、メイク、フィルターなどのBeauty AR Webのより多くの機能を使用したりできます。効果素材のカスタマイズ方法の詳細な指示については、[お問い合わせ](https://trtc.io/contact)ください。

# **結論**

おめでとうございます！[Tencent RTCのBeauty AR Web SDK](https://trtc.io/document/53939?platform=web&product=beautyar&menulabel=web)を使用して、わずか5分でSnapchatのような顔フィルターWebアプリケーションを構築することに成功しました。このブログ投稿のステップバイステップの指示に従うことで、リアルタイムのAR美顔、フィルター、メイク、ステッカーなどの魅力的な機能を実装する方法を学び、ユーザーを魅了することができます。
AIで動画の自動カラーグレーディング！映像美を簡単に実現！

はじめに
「プロのような映像美を簡単に実現したい。でも、カラーグレーディングは難しいし時間がかかる…。」
そんな悩みを抱えるデザイン初心者の方や動画編集初心者の方、クリエイターの方に朗報です！
最新のAI技術を活用すれば、カラーグレーディング作業が驚くほど簡単になります。
本記事では、AIによるカラーグレーディングの仕組みやおすすめツールをわかりやすく解説し、時間もコストも節約できる未来の映像制作方法をお伝えします！

カラーグレーディングとは？
カラーグレーディングとは、動画の色彩を調整して作品全体の雰囲気やテーマを強調する作業のことです。
映画やCM、YouTube動画では、映像の印象を大きく左右する重要な工程の一つです。
しかし、従来の方法では高度なスキルと多大な時間が必要でした。そのため、初心者にとっては大きなハードルとなっていました。
しかし、AI技術の進歩により、これまで専門家だけが行っていたカラーグレーディングが自動化され、初心者でも手軽に高品質な映像を作れるようになりました。

AIカラーグレーディングの仕組みとメリット
まず、AIカラーグレーディングの仕組みとして、映像分析があります。
これはAIが動画のフレームを解析し、最適な色彩バランスを提案する機能です。
また、プロの作品を学習したAIが、特定のスタイルを自動で適用してくれます。
さらに、明るさや色調の微調整も可能で、ユーザーの意図を反映したカスタマイズを行うことができます。
また、AIカラーグレーディングのメリットとして、従来数時間かかっていた作業がたった数分で完了するという時間短縮のメリットがあります。
さらに、専門の編集者に依頼する必要がなくなるため、コスト削減につながります。
そして最後に、AIツールを使えば初心者でもプロ級の仕上がりにすることができる点が最も大きなメリットといえるでしょう。

おすすめのAIカラーグレーディングツール
①	DaVinci Resolve
DaVinci Resolveは業界標準の編集ソフトで、AI機能を使ったカラー補正で細かな調整が可能な点が特徴的です。
業界標準の編集ソフトのため、プロ品質の仕上がりを求める方に最適なツールです。
②	Runway ML
Runway MLはわかりやすくシンプルな操作で初心者でも扱いやすい点が特徴的です。
手軽に利用することができるため、SNSや短尺動画に最適のツールといえます。
とくに、非常に簡単にシネマティックなトーンを適用可能することができる点がおすすめポイントです。
③	Adobe Premiere Pro（Sensei AI搭載）
Adobe Premiere Pro（Sensei AI搭載）はAdobe独自のAI「Sensei」がカラー調整を補助し、微調整も自由自在な点が特徴的です。
プロからアマチュアまで幅広く活用可能な点がメリットです。

まとめ：AIで映像制作をもっと身近に！
AIによるカラーグレーディングは、デザイン初心者の方や動画編集初心者の方からすれば映像制作の敷居を大幅に下げるだけでなく、クオリティを飛躍的に向上させる技術です。
AIカラーグレーディングツールは、今後、初心者からプロまで、あらゆるクリエイターにとって欠かせないツールとなるでしょう。
本記事を読んで少しでもAIカラーグレーディングツールに興味を持たれた方は、まず自分に合ったAIツールを選んで試してみましょう。
映像制作がこれまで以上に楽しく、効率的なものになるはずです！

おわりに
いかがでしたでしょうか？
カラーグレーディングはというのは普段あまり聞くことのない単語ですが、動画の色彩を調整して作品全体の雰囲気やテーマを強調する、非常に重要な作業です。
これは動画編集に欠かすことのできない作業であり、従来は特別な技術のいる作業でした。
しかし、AI技術の発展により、本記事でご紹介した内容が可能となりました。
AI動画編集ツールにはほかにも動画の高画質化や動画のノイズ除去、SDR動画をHDR動画に変換することができるツールなど、多くの便利なツールが存在します。
これからくるAI時代に向けて、みなさんもぜひAIツールを活用してみましょう！
プラットフォームエンジニアリングを自動化と呼びたくない

ポエム記事です。

よくAnsibleとかTerraformを使ったシステムを開発するとき「自動化」って言葉を使いますよね？

あれ、かなり前からものすごく違和感あるんですよね。

いやわかりますよ？ サーバとかNW機器とか、従来はコマンドを手打ちして設定してましたが、その必要がなくなるわけで。だから、手動での作業に対して、自動化。当然の解釈じゃないですか。

ですが、自動化ってただ「単純に効率化するだけ」ってイメージに留まりませんか？
作業しなくて済むわー楽だわーってイメージしか湧かないんじゃないですか？？？

「自動化をすると、オペミス防止や作業の標準化といった副産物がありますよ！」っていう宣伝もよく聞きますが、別にそれって「運用でカバー」できちゃうんですよ。ある程度スキルが必要なこともあるだろうけど。

気をつければいい、別にコストかけて自動化を覚える必要はない。
レガシーなシステムだと特にそういう意識強くなっちゃうし、興味も持つことができない気がするんですよね。

自動化の本質ってそういうことなのかなぁって疑問に感じてるんですよね。
AWXとかAAPを触ってると感じることなんですが、コードによって構成管理をする世界があって、UIを設けることで敷居を下げて、知識や経験の浅いエンジニアでも正しく運用できるようにする。ここまでやって自動化の最終ゴールなんじゃないだろうかって。

自動化って言っちゃうと、自動化して終わりって感じがしてしまうんですよね。より多くのエンジニアが適切に運用できるようになるところをゴールにしたほうがいいように思うんですよね。それは自動化の更にその先にあるものだと思うんですよね。

なので自動化って言葉がものすごく矮小に感じるんですよね。

で、近年新しいワードが出てきましたよね。プラットフォームエンジニアリング。

いろんな記事とか見てふわっとしたことはわかるけど、ぶっちゃけ意味わかりませんよね。プラットフォームってどのプラットフォームだよ。自動化と何が違うんだよ。何か新しい需要を無理に作ろうとひねり出した言葉じゃないのって。

ここ半年ほど、積極的に自動化を取り入れていこうぜ！って現場に入りました。
そこでなんとなくですが、プラットフォームエンジニアについても少しずつ掴めてきたところがあります。

プラットフォームエンジニアリングって、つまり運用に自動化を組み込むこと、運用をシステム化することなんですよね。

例えばACLを追加したり削ったりする運用業務があるとするじゃないですか。これがとてもわかり易いと思うんですが、この業務をエンジニアの介入なしでするのが自動化の最終ゴールなんですよね。ACL追加/削除という運用業務をエンジニアに投げるのではなくシステムに投げる。そういうものがプラットフォームエンジニアリングというわけです。
で、そのための手段としてAnsibleだったりTerraformで自動化をする。これらのツールはフレームワークとして仕様が固まっているので扱いやすい。それだけの話だと思うんです。

ここまでの解説でイメージできました？ できない？ まぁポエム記事ですからね。仕方ないですね。呑みながら書いてるし。

ここで、プラットフォームエンジニアリングを正しい日本語訳にしましょう。
正しい母国語に訳すのはその概念の正しい理解を深めるために必要なことです。

プラットフォームエンジニアリングは「自動化」ではありません。
プラットフォームエンジニアリングは「運用基盤開発」です。

運用基盤というものは今までに聞いたことがない言葉だと思いますが、これならなんとなくイメージできるんじゃないでしょうか。運用するためのシステムを乗せるための基盤、という意味でのプラットフォームです。

近年、IT技術が高度化してきたことにより、システム運用の負担もどんどん大きくなってきています。
その中で、機能追加や不具合対応に迅速な対応を求められたり、人為的ミスの削減が求められるようになってきました。
それらはインフラエンジニアの人力運用によって支えられてきました。
しかし、その運用もそろそろシステム化してもいいんじゃないでしょうか？

そのために必要なのが運用基盤です。運用基盤を用意することで、エンジニアの手を介さずにシステムの構成変更を行うことが出来るようになるため、機能追加や不具合対応を迅速に行うことが出来るようになります。

どうですか？ こういう言い方ならプラットフォームエンジニアリングが腑に落ちるところありませんか？

少なくとも、僕的には自動化と呼ぶよりしっくりきてます。

……まとめです。

AnsibleやTerraformで開発することは自動化ではありません。
プラットフォームエンジニアリングとは、自動化をすることではありません。
プラットフォームエンジニアリングとは、運用基盤開発であり、運用するためのシステムを用意することです。
運用基盤を用意することによってエンジニアを介さずにシステムの構成変更が出来るようになります。

今後の自動化界隈、こういう方向に持っていきませんか？
そろそろ、運用基盤開発界隈に進化を遂げませんか？
Excel スプレッドシートから Google 連絡先に連絡先リストをエクスポートする方法 - 2025

友達の連絡先をきちんと把握しておくことは、整理整頓を保つ上で重要な部分です。私たちの多くは、連絡先を簡単に見つけて追跡できるように、Excel ファイルに連絡先を保存しています。しかし、時にはこの連絡先リストを Google 連絡先に移動して、すべてのデバイス間で同期し、外出中に簡単にアクセスできるようにする必要があります。

このブログでは、エラーのないプロフェッショナルな WholeClear Excel から VCF へのコンバーター ツールを使用して、Excel から Google 連絡先に連絡先リストをエクスポートする方法を説明します。

**VCF とは何ですか?**

プロセスを開始する前に、VCF (vCard) 形式が何であるかを知っておく必要があります。vCard ファイル形式は、個人情報を保存および送信するための標準的な方法です。そのため、Google 連絡先は、VCF 形式で連絡先をインポートできるため、Excel から Google 連絡先に連絡先を移動するのに最適です。

[今すぐダウンロード](https://www.wholeclear.com/downloads/wc.exe)

## Excel から vCard への変換ツールを使用する理由

強力な **WholeClear [Excel から VCF へのコンバーター](https://www.wholeclear.com/converter/excel-to-vcf/)** を使用すると、Excel ファイル (XLS および XLSX) を VCF 形式に簡単に変更できます。これにより、Excel の名前を Google の名前に簡単に移動できます。ソフトウェアには無料版と有料版があるため、ユーザーはニーズに最適なものを選択できます。

### XLSX から VCF への変換ツールでできること

シンプルで使いやすいインターフェイス - このツールは使いやすいように作られています。コンピューターについてあまり詳しくなくても、誰でも簡単に使用できます。

さまざまな Excel ファイル形式をサポート - このツールは XLS ファイルと XLSX ファイルの両方で動作します。

バッチ変換 - このツールを使用して、連絡先を含むすべての Excel ファイルを一度に変更できます。

無料版とプロフェッショナル版の 2 つのバージョンがあります。無料版では、最初にいくつかの名前を変換できます。ビジネス版では、必要な数のファイルを変換できるため、必要に応じて変換できます。

連絡先情報を保存 - コンバーターは、名前、電話番号、電子メール アドレスなど、すべての連絡先情報が VCF ファイルに正しく保存されていることを確認します。

### ツールを使用して Excel から Google 連絡先に連絡先をエクスポートする方法

手順 1: Excel から VCF へのコンバーター ツールを入手してインストールします。

Excel から VCF へのコンバーター ツールは、WholeClear の Web サイトから入手できます。連絡先をさらに変更する必要がある場合は、ビジネス バージョンをダウンロードできます。画面の手順に従ってソフトウェアをインストールします。

手順 2: ツールを開いて Excel ファイルを追加します

インストールが完了したら、WholeClear Excel から VCF へのコンバーター ツールを開きます。
追加する Excel ファイルが 1 つなのか複数なのかに応じて、[ファイルの追加] または [フォルダーの追加] ボタンを押します。

送信する連絡先情報が含まれているコンピューター上の Excel (XLS または XLSX) ファイルを見つけます。

Excel ファイルを選択

ステップ 3: VCF ファイルを保存するフォルダを選択

Excel ファイルを追加したら、変換した VCF ファイルを保存する場所を決める必要があります。

変換が完了したら、VCF ファイルにすばやくアクセスできるフォルダを選択します。

ステップ 4: 変換プロセスの開始 -

[変換] ボタンをクリックしてプロセスを開始します。Excel スプレッドシートの連絡先は、WholeClear ツールによって即座に VCF ファイルに変換されます。

プロセスが終了するまでお待ちください。所要時間は、Excel ファイルのサイズとそこに含まれる名前の数によって異なります。

#### VCF ファイルを Google 連絡先リストに追加 -

· 連絡先を含む VCF ファイルを入手したら、Google 連絡先アカウントに移動します。

Google 連絡先画面の左側にある [インポート] ボタンを押します。
· ポップアップ ウィンドウでインポートするファイルを選択するように求められます。 WholeClear Excel to VCF Converter Tool で作成した VCF ファイルを選択します。

· 「インポート」ボタンをクリックすると、VCF ファイルの名前が Google の名前にすぐに追加されます。

インポートした連絡先を確認する -

インポートが完了したら、Google 連絡先をチェックして、すべての連絡先情報が正しく転送されたかどうかを確認できます。Excel ファイルから、すべての連絡先とその名前、電話番号、メール アドレス、その他の情報を確認できます。

#### Excel から VCF へのコンバーター Tool の主な機能 -

· 時間の節約 - 手動で連絡先を変更するのは面倒で、時間がかかります。WholeClear を使用すると、プロセスが迅速かつ簡単になります。

· 正確性 - ソフトウェアにより、移動中に連絡先情報が失われることはありません。

· 使いやすさ - このツールを使用するのにコンピューターに関する知識は必要ありません。誰でも簡単に使用できるように作られています。

· 無料オプションあり - 無料版のツールでは、変更できる連絡先の数は限られているため、連絡先の数が少ない人には最適です。

**まとめ**

Excel スプレッドシートを Google 連絡先に移動するのは難しくありません。 WholeClear Excel to VCF Converter Tool を使用すると、連絡先を VCF ファイルに変換して Google 連絡先に追加するのが簡単かつ迅速になります。
pip,conda,sudo,brew？コマンドラインで操作する管理ツールを整理する

ターミナル操作をしていると出会う、「pip」「conda」「sudo」「brew」について、それぞれの違いをわかりやすく解説します！
※この記事は、ChatGPTの出力を基に作成しています。

---

## 各ツールの解説と例え

### **1. pip (プログラム用道具を増やすためのツール)**
- **何をするの？**
  Pythonのプログラムに必要なライブラリをインストールするツールです。
  例：「グラフを作りたい」と思ったら「matplotlib」を`pip` でインストール。

- **例え**
  「DIYのために必要な道具をホームセンターで買う」ような感じ。

- **コマンド例**
  ```bash
  pip install matplotlib
  ```

- **ポイント**
  - Pythonを使う場面で必要
  - ただし、環境の管理は自分で調整する必要があります。

---

### **2. conda (環境をまるごと用意するツール)**
- **何をするの？**
  Python以外のツールも一緒に管理しながら、プロジェクトの「作業部屋」を用意してくれます。

- **例え**
  「作業部屋を作って、そこに必要な道具を全部操り入れる」感じ。Aプロジェクト用の部屋とB用の部屋を分けられるのが魅力。

- **コマンド例**
  ```bash
  conda create -n my_env python=3.9
  conda install pandas
  ```

- **ポイント**
  - 作業部屋が別のプロジェクトに影響を与えない。
  - Python以外のツールも管理可能。

---

### **3. sudo (特別な権限を使ってシステムを操る)**
- **何をするの？**
  UNIX/Linuxシステムで、システムレベルのソフトウェアを管理者権限で操作するコマンド。

- **例え**
  「家全体の電気工事や水道工事をするのに、専門業者を呼ぶ」感じ。

- **コマンド例**
  ```bash
  sudo apt install git  # UbuntuなどDebian系の例
  sudo dnf install git  # FedoraなどRed Hat系の例
  ```

- **ポイント**
  - システムのソフトウェア全体に関わる作業に必要。
  - 間違えるとシステムを壊すこともあるので注意。

---

### **4. brew (macOSでの道具掲けを簡単に)**
- **何をするの？**
  macOSで、開発や便利ツールをインストールするタイプのツール。シンプルで使いやすいのが魅力です。

- **例え**
  「おしゃれな雑貨屋で、DIY用道具を簡単に買える」感じ。

- **コマンド例**
  ```bash
  brew install git
  ```

- **ポイント**
  - macOS使用者に特に便利。
  - Pythonやシステムツールのセットアップに便利。

---

## 使い分けをシンプルにまとめ

| ツール | 主に使う場面 |
|-------|-------------|
| **pip** | Pythonのプログラム用のライブラリを追加したい時 |
| **conda** | 作業環境全体を整理したい時 |
| **sudo** | システム全体の操作が必要な時 |
| **brew** | macOSで便利なツールをインストールしたい時 |
[Keyboard] URLコピー+貼り付け

# Mac
- コピー:`Ctrl`+`L`
- 貼り付け:`Ctrl`+`Enter`

# Windows
- コピー:`Alt`+`D`
- 貼り付け:`Alt`+`Enter`

# 参考リンク
- [「Mac」ユーザーが知っていると便利な「Command」ショートカット6選](https://japan.zdnet.com/article/35184004/#:~:text=%E3%80%8CCommand%E3%80%8D%EF%BC%8B%E3%80%8CL%E3%80%8D,%E3%81%8C%E7%9E%AC%E6%99%82%E3%81%AB%E7%A7%BB%E5%8B%95%E3%81%99%E3%82%8B%E3%80%82)
- [【もうURLのコピーにマウスはいらない！】
「アドレスバー」に一瞬で移動できるショートカットキーが超便利！＜動画解説付き＞](https://diamond.jp/articles/-/260725)
Roadmap.shで学ぶFlutter - Storage -

# 導入

[roadmap.shのFlutter](https://roadmap.sh/flutter)の`Storage`を進めていきます。

データの永続化は、モバイルアプリケーションの重要な要素の一つです。
Flutterでは、様々なストレージオプションを提供しており、アプリのニーズに応じて適切な方法を選ぶことができます。
今回は、代表的なストレージオプションの紹介と、それぞれの特徴と利用方法を解説します。

# Flutterのストレージオプション

Flutterは、永続的なデータ保存のためにいくつかのオプションを提供しています。以下はその代表的なものです。

- SharedPreferences
    - 小さなデータを保存するためのキーと値のストア
- SQLiteデータベース
    - 構造化されたデータを保存するためのリレーショナルデータベース
- ファイルシステム
    - 大きなファイルやデータを保存するためのストレージ
- Firebase
    - リアルタイムデータベースとバックエンドなどを提供するサービス

これらはすべて、サードパーティのパッケージを通じてサポートされており、Flutterアプリに簡単に統合できます。

## SharedPreferences

FlutterにおけるSharedPreferencesは、データをキーと値のペアとして永続的に保存するためのプラグインです。これはローカルデータベースやキャッシュに似ています。
SharedPreferencesは、小さなデータ、特に**ユーザーの設定や好みなど**を保存するために特化されています。

### 使用例

SharedPreferencesは、アプリ内の複数の画面やウィジェットでアクセスする必要がある簡単なデータを保存するためによく使用されます。
例えば、ユーザーのログイン状態やアプリのテーマカラーを保存するために使用されることがあります。

### パッケージ

https://pub.dev/packages/shared_preferences

使い方は簡単で`SharedPreferences.getInstance()`で、インスタンスを生成し、ゲッター、セッターで指定したキーの値を取得、設定します。

## SQLite

SQLiteはオープンソースで軽量なリレーショナルデータベース管理システム（RDBMS）です。C言語で書かれており、自己完結型であるため、別途サーバープロセスやシステムを必要としません。

### 主な特徴

- 自己完結型
    - 独立して動作し、サーバーが不要
- 広範な利用
    - モバイルアプリケーション、組み込みシステム、ウェブブラウザなどで広く使用
- 多言語対応
    - 多くのプログラミング言語でサポート

SQLiteは使いやすく、セットアップや構成がほとんど必要ないため、データベースとして人気の選択肢となっています。

### パッケージ

https://pub.dev/packages/sqflite

こちらはRDBと同じように利用することができます。
`openDatabase('DB名');`でDBを生成し、`db.execute('クエリ')`でクエリを実行します。

## Firebase

Firebaseは、Backend-as-a-Service (BaaS) のアプリ開発プラットフォームで、以下のようなホストされたバックエンドサービスを提供します。

- リアルタイムデータベース: データの同期とリアルタイムの更新が可能
- クラウドストレージ: 画像やファイルなどのストレージサービス
- 認証: ユーザーの認証機能（例：メール、Google、Facebook認証など）
- クラッシュレポート: アプリのクラッシュ状況を報告
- 機械学習: 機械学習の機能を提供
- リモート構成: アプリの設定をリモートで管理
- 静的ファイルのホスティング: 静的なウェブサイトやファイルのホスティング

Firebaseは、これらのサービスを通じてアプリのバックエンド機能を迅速に開発し、スケールするための強力なプラットフォームを提供します。

本記事では各サービスについて細かく触れませんが、FirebaseはFlutterと相性が良くroadmap.shでもさまざまな機能が紹介されているので、他の記事で触れようと思っています。

### 参考
https://docs.flutter.dev/data-and-backend/firebase

## 終わりに
Flutterで利用できる主要なストレージオプションについて紹介しました。

これらのツールを活用することで、ユースケースに合わせたデータの保持・利用が可能になります。アプリの要件に応じて最適なストレージソリューションを選び、効率的なデータ管理を実現していきたいと思いました。
Snowflakeで全ユーザーにMFAを強制する設定方法

## はじめに

Snowflakeでは多要素認証（MFA）を導入することで、アカウントのセキュリティを大幅に向上させることができます。本記事では、情報漏洩リスクを低減するために、全ユーザーにMFAを強制するための設定方法を解説します。

## 1. 認証ポリシーの作成

Snowflakeでは`CREATE AUTHENTICATION POLICY`コマンドを使用して認証ポリシーを作成できます。以下の手順で認証ポリシーを作成し、適用します。

### 1.1 認証ポリシーを作成
以下は、全ユーザーにMFAを強制する認証ポリシーの例です。

```sql
-- 全ユーザー向けのMFA強制認証ポリシーを作成
CREATE OR REPLACE AUTHENTICATION POLICY mfa_enforcement_auth_policy
    CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWSQL', 'DRIVERS') -- 許可されたクライアント
    AUTHENTICATION_METHODS = ('SAML', 'PASSWORD') -- 認証方法
    MFA_AUTHENTICATION_METHODS = ('PASSWORD', 'SAML') -- MFAの認証方法
    MFA_ENROLLMENT = 'REQUIRED'; -- MFA登録を必須化
```

### 1.2 認証ポリシーをアカウント全体に適用
作成したポリシーをアカウントに適用します。

```sql
-- アカウント全体に認証ポリシーを適用
ALTER ACCOUNT SET AUTHENTICATION POLICY mfa_enforcement_auth_policy;
```

## 2. パスワードポリシーを設定

パスワードの強度を確保するために、例として以下のようなポリシーを作成します。

```sql
-- 強力なパスワード要件を定義
CREATE OR REPLACE PASSWORD POLICY account_password_policy
    PASSWORD_MIN_UPPER_CASE_CHARS = 1 -- 大文字を1文字以上
    PASSWORD_MAX_RETRIES = 3 -- パスワード試行回数3回
    PASSWORD_LOCKOUT_TIME_MINS = 30 -- ロック解除まで30分
    PASSWORD_HISTORY = 24; -- 過去24回と同じパスワード禁止
```

### パスワードポリシーをアカウント全体に適用

```sql
-- パスワードポリシーをアカウント全体に適用
ALTER ACCOUNT SET PASSWORD_POLICY account_password_policy;
```

## 3. セッションポリシーを設定

セッションのタイムアウトを設定し、不必要に長いセッションを防ぎます。

```sql
-- セッションのアイドル時間を制限
CREATE OR REPLACE SESSION POLICY account_session_policy
    SESSION_IDLE_TIMEOUT_MINS = 240 -- 自動連携のアイドルタイム（分）
    SESSION_UI_IDLE_TIMEOUT_MINS = 20; -- Snowsight用のアイドルタイム（分）
```

### セッションポリシーをアカウント全体に適用

```sql
-- アカウント全体にセッションポリシーを適用
ALTER ACCOUNT SET SESSION_POLICY account_session_policy;
```

## 4. 必要なロールと権限の設定

認証ポリシーを管理するための専用ロールを作成し、権限を付与します。

```sql
-- ポリシー管理専用のロールを作成
CREATE ROLE policy_admin;

-- 必要な権限を付与
GRANT USAGE ON DATABASE my_database TO ROLE policy_admin;
GRANT USAGE ON SCHEMA my_database.my_schema TO ROLE policy_admin;
GRANT CREATE AUTHENTICATION POLICY ON SCHEMA my_database.my_schema TO ROLE policy_admin;
GRANT APPLY AUTHENTICATION POLICY ON ACCOUNT TO ROLE policy_admin;
```

## 5. モニタリングとレビュー

設定が適切に機能しているか確認するため、SnowflakeのTrust Centerを利用してください。また、定期的にポリシーを見直し、必要に応じて調整することをお勧めします。

## おまけ解除する方法
MFA解除を解除するためにパスワードのみに設定します。
```
CREATE OR REPLACE AUTHENTICATION POLICY no_mfa_policy
    AUTHENTICATION_METHODS = ('PASSWORD'); -- パスワードのみを許可
```
DBT_USERに対してMFA解除ポリシーを適用
```
ALTER USER DBT_USER SET AUTHENTICATION POLICY no_mfa_policy;
```


## まとめ

これらの設定を適用することで、全ユーザーに対してMFAを強制し、安全性を高めることができます。さらに、パスワード強度を確保し、セッションタイムアウトを設定することで、Snowflakeアカウントのセキュリティを大幅に向上させることが可能です。

セキュリティと運用のバランスを考えつつ、適切な設定を行い、情報漏洩リスクを低減しましょう。
Amazon Audible（オーディブル）の評判・レビュー

この記事では、Amazonのオーディオブックサービス「Audible（オーディブル）」について、実際に使っているユーザーへのアンケート結果と筆者の体験を踏まえ、良い点・悪い点を全て暴露しています。登録して使おうか悩んでいる方は必見です。

https://hoshi-books.com/audible-review/
(DAY24) 俺と学ぶRust言語~借用と参照~

# 今日の内容
- 借用と参照

# はじめに
[前回](https://qiita.com/FUKAch/items/2376fca444e74da34296)はファイルI/Oについて学びました。
今回は借用と参照について学びます。
Rustを学んでいると「借用」と「参照」という概念に出会います。初めて聞くと難しそうですが、これらはRustが安全で効率的なプログラムを作るための重要な仕組みです。

# 借用と参照とは？
まずは、それぞれの概念を簡単に説明します。
- **参照(reference)**: ある値を「所有権を持たずに利用する」仕組み
- **借用(borrowing)**: 他の部分が所有する値を一時的に借りて利用すること

Rustでは、値を複数の場所で安全に利用するために、参照と借用が欠かせません。

# 参照の基本構文
Rustで参照を使う際は、&を使います。
```rust
fn main() {
    let x = 42;          // xを定義
    let x_ref = &x;      // xの参照を作る
    println!("{}", x_ref); // 参照を使って値を表示
}
```
ここでのポイント:
- &xは「xを借用して参照を作る」という意味
- xの所有権はそのまま、x_refは値へのポインタのような役割を果たす

# 可変参照
参照には **不変参照** と **可変参照** の２種類があります。
- **不変参照**: 参照先の値を変更できない
- **可変参照**: 参照先の値を変更できる

以下の例で確認しましょう:
```Rust
fn main() {
    let mut x = 42;        // xを可変にする
    let x_ref = &mut x;    // xの可変参照を作る
    *x_ref += 1;           // 参照を使って値を変更
    println!("{}", x_ref); // 43
}
```
- &mutは「可変参照」を作る
- *で参照先の値を操作できる

# 借用ルール
Rustには「借用ルール」があります。このルールを守ることで、コンパイル時にメモリの問題を防げます。

### 同時に複数の可変参照は作れない
```rust
fn main() {
    let mut x = 42;  // xを可変にする
    let x1 = &mut x; // xの可変参照を作る
    let x2 = &mut x; // エラー
    println!("{} {}", x1, x2)
}
```

### 不変参照と可変参照を同時に作れない
```rust
fn main() {
    let mut x = 42;  // xを可変にする
    let x1 = &x;     // 不変参照
    let x2 = &mut x; // エラー
    println!("{} {}", x1, x2);
}
```

# おわりに
今回はRustでの借用と参照について学びました。
次回は「write vs write_all」について学びましょう。
ご精読ありがとうございました。
Android Studioで「Broken pipe. The Gradle daemon may be trying to use ipv4 instead of ipv6.」が出たときに対応した方法

ビルドしたら以下のエラーになったので、その時に対処したときのメモです。

```
Broken pipe.
The Gradle daemon may be trying to use ipv4 instead of ipv6.
```

この対処方法については以下のサイトに記載されています
https://developer.android.com/studio/known-issues#broken_pipe


手元の環境はMacなので`Workaround 2`を採用しました。

```
Workaround 2: in Android Studio's vmoptions file, change the line 
-Djava.net.preferIPv4Addresses=true to -Djava.net.preferIPv6Addresses=true 
For more information, see the Networking IPv6 User Guide.
```

## 対応した手順
- (1) Android Studio で 🔍️ をクリックして、検索欄に `edit custom vm` と入力し、`studio.vmoptions`を開く

![android_studio_screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59203/3a89b680-d6a7-b20b-29cf-54ab35f4af68.png)

- (2) `-Djava.net.preferIPv4Stack=true` を追加
![android_studio_screenshot2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59203/4bd3d950-6b8a-70a2-27d8-6a9c8e1ae1fc.png)

- (3) Android Studio を再起動

以上の手順でエラー回避できました。
小さなビジネスの成功を支えるAI：SNSとブログの未来を変えるコンテンツ生成システム

**小さなビジネスのマーケティングを変革する：AIが作るオーダーメイドコンテンツ**
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/846d8c13-cfa1-709f-d65e-8a7111cd4b7e.png)


デジタル化が進む現代、小さなビジネスが注目を集めるのはなかなか難しいですよね。パン屋さん、レストラン、セレクトショップなど、どんな業種でもSNSやブログを通じてお客様の心を掴むことは一苦労。でも、そんなお悩みを解決する画期的なAIシステムがあればどうでしょう？

あなたのビジネスを深く理解し、ターゲット層にピッタリな魅力的なコンテンツを自動で作成するAIシステムをご紹介します！楽しく読みながら、この素晴らしい仕組みを一緒に探ってみましょう。

---

### **小さなビジネスの挑戦**
小さなビジネスオーナーにとって、心に響くコンテンツを作るのは時間もスキルも必要で簡単なことではありません。限られたリソースで、大手企業のようなプロモーションをするのは本当に大変！ありきたりな投稿ではお店の魅力を伝えきれないし、埋もれてしまうこともしばしば…。

---

### **AIがその課題を解決！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/332571cd-1ec2-b014-7e77-6b1712cbde90.png)

今回ご紹介するAIシステムは、そんな悩みを解消するために生まれました。このシステムは、最新のAI技術を駆使し、お客様一人ひとりに合わせた投稿やブログを作成。さらに、季節感やトレンドを反映させた内容で、ターゲット層の心をぐっと掴みます！

---

### **システムの流れ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/829e8fd7-c97d-6dfe-66f6-59197b9acff2.png)

1. **データ収集**  
　まずは基本情報を収集します：
   - お店の名前や説明
   - 商品やサービスの写真
   - ターゲット顧客の情報
   - SNSやウェブサイトのデータ

2. **コンテンツ生成**  
　次に、ChatGPTなどの大規模言語モデル（LLM）を活用して、以下の要素に基づいた投稿やブログを作成：
   - 季節のトレンド
   - 公共のニーズ
   - お店の強みや特徴

3. **フィードバックで改良**  
　投稿の成果を評価し、フィードバックを反映してどんどんブラッシュアップします：
   - エンゲージメント率（「いいね」やコメント）を分析
   - RAG（リトリーバル強化型生成）やChain of Thought（CoT）を活用して改善

4. **競合分析**  
　成功している競合店を調査して、以下のポイントを把握：
   - 商品の強みや特徴
   - 投稿のテーマやタイミング、ハッシュタグ
   - コンバージョン率を上げる仕組み（ランディングページやクーポンなど）

5. **法令順守＆品質チェック**  
　生成されたコンテンツが以下を満たしているか確認します：
   - 著作権や肖像権を侵害していないか
   - 差別的な内容が含まれていないか
   - 法令やSNSのルールに従っているか
   - 嘘ではなく事実に基づいているか

6. **最適化の繰り返し**  
　フィードバックと競合分析を活用し、**50%以上のエンゲージメント向上**と**70%以上の成功率向上**を目指して最適化を繰り返します！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/5d347e33-262e-1707-12a9-eb76a3a4e6e7.png)

---

### **このシステムの魅力**
- **自動化**：コンテンツ作成にかかる時間を大幅に削減！  
- **パーソナライズ**：お店やターゲットに合わせた投稿を実現。  
- **継続的改善**：フィードバックループで常に進化。  
- **競合店から学ぶ**：業界の成功事例を取り入れ、さらに上を目指す。  
- **法令順守**：安心して使えるコンテンツ。

---

### **なぜ効果的なのか？**
- **データ駆動の判断**：リアルタイムのトレンドや顧客データに基づいた内容を生成。  
- **ペルソナに特化**：ターゲット層に最適化された投稿で高い反響を実現。  
- **競合分析**：成功事例を活用し、常に最良の結果を目指す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/99c8995f-24a9-542c-7a57-c72c81a8561d.png)

---

### **小さなビジネスの未来**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/1d0a9e4b-6621-d879-4ef1-32e22aec9f39.png)

このAIシステムは単なるツールではありません。小さなビジネスが大手と肩を並べるための「切り札」です！効率的かつ効果的なマーケティングを実現し、時間もコストも節約しながら顧客との絆を深めることができます。

さあ、あなたもこのAIシステムでマーケティングを革新し、ビジネスを次のステージへと引き上げてみませんか？一緒に成功を掴みましょう！

---

ご意見やご質問があれば、ぜひお聞かせください！このAIの力で、あなたのビジネスをさらに輝かせるお手伝いをさせていただきます！
E2Eテストをバグ抽出戦略の中心に据えると、運用コストが膨大になる理由

## はじめに

E2E（End-to-End）テストは、アプリケーション全体を横断して動作を確認する強力なツールです。しかし、「バグ検出のためにE2Eテストを戦略の中心に据える」というアプローチを取ると、長期的には運用コストが膨大に膨れ上がるリスクがあります。本記事では、その理由と代替案を解説します。

## E2Eテストの特性と課題

E2Eテストは、アプリケーションの実際の使用状況を再現し、全体的な動作を確認するのに有効です。しかし、次のような特性から運用コストが急増する傾向があります。

### 1. 複雑性の増加

アプリケーションが成長するにつれて、E2Eテストでカバーすべきシナリオの数は指数関数的に増加します。その結果、以下の問題が発生します。

   - テストケースの爆発的増加
       -  仕様変更があるたびに、テストケースの追加・修正が必要になります。
   - 依存関係の影響
       -  APIや外部サービスに依存している場合、環境の変更によってテストが失敗することが頻発します。

### 2. バグ検出効率の低下

  E2Eテストは、以下の理由でバグ検出効率が低い傾向があります。
  
   - テストの不安定性
     - 環境依存やタイミングのズレで発生する偽陽性・偽陰性の増加。
   - デバッグの困難さ
     - バグが発生した場合でも、原因箇所を特定するのに時間がかかります。

## 長期的な運用コストの問題

### 1. メンテナンス負荷

E2Eテストは、UIの小さな変更やAPIの微修正にも敏感に反応するため、頻繁にメンテナンスが必要です。このメンテナンスコストが蓄積すると、以下のような状況が発生します。

- 技術的負債の増加
  - 古いテストスクリプトが更新されず放置されることで、運用効率が低下します。
- リソースの浪費
  - エンジニアが新機能開発よりもテスト修正に時間を費やすようになります。

### 2. スケーラビリティの限界

テストスイートが大きくなると、実行時間が長くなり、CI/CDパイプライン全体のボトルネックとなります。その結果、以下のような問題が発生します。

- 開発速度の低下
  - テスト実行待ち時間が長くなり、デプロイまでのリードタイムが増加します。
- コストの肥大化
  - テスト環境を維持するためのインフラ費用が増加します。
  
## 効果的なテスト戦略

E2Eテストを完全に排除する必要はありませんが、効果的なテスト戦略を設計することが重要です。そのためのガイドラインを以下に示します。

### 1. テストピラミッドを採用する

テストピラミッドとは、以下のようにテストを階層化する戦略です。

- 単体テスト（Unit Test）: コードの小さな単位を検証する。
- 統合テスト（Integration Test）: コンポーネント間のやり取りを検証する。
- E2Eテスト（End-to-End Test）: 主要なユーザーフローを最低限カバーする。
  
単体テストと統合テストを中心に据えることで、E2Eテストに頼らずにバグを検出しやすくなります。

### 2. リスクベースのE2Eテスト

E2Eテストは、以下の基準で対象を限定するべきです。

- ユーザーフローの中で最も重要な部分に絞る。
- 変更頻度が低く、リスクが高い箇所を重点的にカバーする。

### 3. CI/CDパイプラインの効率化

- テストの並列実行を活用し、実行時間を短縮する。
- 不要なテストを定期的に見直し、削除する。

## 結論

E2Eテストをバグ検出の主要な手段とする戦略は、一見効率的に見えるかもしれません。しかし、長期的には運用コストの増加や開発速度の低下を招く可能性が高く、結果として手動テストよりもコストがかかる事態に陥ります。

バランスの取れたテストピラミッドを採用し、リスクベースのアプローチを取り入れることで、テストの品質と効率を向上させつつ、運用コストを最適化することが可能です。

コメントやご意見をお待ちしています！
この記事が参考になった方は、ぜひ「いいね」や「フォロー」をお願いします！また、質問やフィードバックがあればコメントで教えてください。
2025年にエンジニアとして生き残るためのキャリア戦略 - AI時代を勝ち抜く学習ロードマップ

こんにちは。エンジニアとして日々現場で奮闘している方も、これからエンジニアを目指す方も、AI時代の到来にドキドキしているのではないでしょうか？  
「AIに仕事を奪われるかもしれない…」なんて不安がよぎる一方で、じつはAIを味方につけることで、これまでにない大きなチャンスをつかむこともできます。

そこで本記事では、2025年を迎えるまでに押さえておきたいスキルや学習ロードマップを整理しました。これからのキャリアプランを考えるうえで、少しでも参考になれば幸いです。

---

## 1. なぜ“AI時代”が到来したのか

- **計算リソースの進化**  
  GPUやクラウド環境を手軽に使えるようになり、大規模な学習も高速に行える時代になりました。

- **データの爆発的増加**  
  IoTやSNSなど、多種多様なデータが蓄積されるようになり、AIが学習するためのデータが豊富に。

- **LLM（大規模言語モデル）のブレイクスルー**  
  ChatGPTやGPT-4のようなモデルが登場し、自然言語処理（NLP）の精度が飛躍的にアップ。

こんな背景がある今、AI関連の知識やスキルはもはや「持っていると便利」ではなく、「持っていて当然」の時代に突入しつつあります。

---

## 2. 2025年に求められるエンジニア像

1. **AIを活用できるエンジニア**  
   AIをゼロから開発できなくても、既存のAIサービスやライブラリを上手に組み合わせて課題を解決できる人材はどの企業でも重宝されるはずです。

2. **ビジネス視点を持ったエンジニア**  
   「なぜこの技術を使うのか？」といった背景や目的を説明でき、ビジネスの観点からも価値を示せる人材が求められます。

3. **継続的な学習を続けるエンジニア**  
   AI分野は日進月歩。新しい技術やツールに素早くキャッチアップして、自分のスキルに落とし込めるかどうかが勝負です。

---

## 3. 学習ロードマップ

### 3.1 プログラミング基盤の強化
- **Python**  
  AIやデータサイエンスでは王道の言語。Web開発との相性も良いので、エンジニアなら抑えておきたいところです。

- **JavaScript / TypeScript**  
  フロントエンドはもちろん、Node.jsによるバックエンド開発でも需要は高止まり。クラウド環境でも扱いやすい言語です。

### 3.2 AI関連の基礎知識
- **機械学習・深層学習の基礎**  
  教師あり学習、教師なし学習、強化学習など、AIの基本概念を押さえることで、どんな場面でどう使うかが見えてきます。

- **データハンドリング**  
  PandasやNumPyでのデータ処理はもはや必須スキル。データの見方・扱い方を知ることが第一歩です。

- **クラウドAIサービスの利用**  
  AWS、Azure、GCPなどが提供するAI関連サービスを知ることで、モデルを一から作らなくてもAI技術を導入できるようになります。

### 3.3 LLM・生成AIの活用スキル
- **GPT APIの活用**  
  ChatGPTのような生成系モデルを、具体的に業務や開発フローにどう組み込むかを学びましょう。

- **Prompt Engineering**  
  AIに対して意図した答えを返してもらうための「プロンプト設計」は新しい技術分野。クリエイティブな切り口が大きな武器になります。

### 3.4 インフラとDevOpsスキル
- **コンテナ / Kubernetes**  
  どんな環境でも柔軟に動かせるアプリケーションを作りたいなら必須。マイクロサービス化との相性も抜群です。

- **IaC（Infrastructure as Code）**  
  TerraformやAWS CDKなどを使えば、インフラ構築や変更管理が一気に効率化します。

---

## 4. 学習習慣を身につける

1. **情報収集ルーティンの確立**  
   Tech系ニュースサイトやQiita、SNSなどから、自分にあった方法で最新の情報を追いかけましょう。

2. **学習コミュニティへの参加**  
   オンライン・オフライン問わず、勉強会やコミュニティでほかのエンジニアと情報交換するのは大きな刺激になります。

3. **アウトプットを習慣化**  
   自分のブログやQiitaなどで学んだことを発信するのもおすすめ。アウトプットすることで理解が深まり、モチベーションもアップ。

---

## 5. キャリア戦略の具体例

1. **「AIを活用したシステム開発」のプロジェクトに積極参加**  
   フリーランスや副業などで実際の案件に関わると、実践的なスキルが身につきます。

2. **学習時間の確保と自己投資**  
   「忙しくて時間がない…」というエンジニアほど、意識的にAIや新技術の学習時間を作ることが重要です。

3. **エンジニアリング × ドメイン知識**  
   医療、金融、製造業など特定の業界知識と組み合わせることで、エンジニアとしての存在感が一段と増します。

---

## おわりに

AI時代が本格化しても、エンジニアの役割はますます重要になっていきます。  
むしろ「AIに取って代わられる」ではなく、「AIをうまく使って新たな価値を生み出す」時代です。  
2025年を前に、自分から積極的に動いて学び、実践することで、**「AIに使われる」のではなく「AIを使いこなす」**エンジニアを目指していきましょう！
fullPage.jsでセクションやスライドをスキップする方法

## はじめに

通常のfullPage.jsの動作では、ユーザーがスクロールすると次のセクションに移動します。しかし、場合によっては、スクロールしたときやリンクやボタンをクリックしたときにセクションをスキップさせたいこともあります。

fullPage.jsは、この目的を達成するためのいくつかの[メソッド](https://alvarotrigo.com/fullPage/docs/#methods "Fullpage methods")を提供しています（[こちら](https://alvarotrigo.com/fullPage/examples/methods.html "Methods in action")で実際の動作をご覧ください）。

## "moveTo" と "silentMoveTo" メソッド

これらのメソッドの中には、ウェブサイト内の特定のセクションやスライドに移動するのに役立つものがあります：

-   `moveTo(section,slide)` ([コードペン例](https://codepen.io/alvarotrigo/pen/doqOmY "moveTo codepen"))  
    指定したセクションとスライドにページをスクロールします。詳細は[公式ドキュメント](https://alvarotrigo.com/fullPage/docs/#movetosection-slide "moveTo method")をご覧ください。
    
-   `silentMoveTo(section,slide)` ([コードペン例](https://codepen.io/alvarotrigo/pen/doqOeY "silent move codepen"))  
    前述のものと似ていますが、アニメーションなしでスクロールを実行します。詳細は[ドキュメント](https://alvarotrigo.com/fullPage/docs/#silentmovetosection-slide "silentMoveTo method")をご覧ください。
    

## コールバックでメソッドを有効化する

これらのメソッドをボタンに設定するか、fullPage.jsの[コールバック](https://alvarotrigo.com/fullPage/docs/#callbacks "fullpage callbacks")を使用して任意のタイミングで実行できます。

セクションを**スキップ**するためには、`onLeave`コールバックで`moveTo`メソッドを使用します。

## JavaScriptとHTMLコード

以下は、`onLeave`コールバックを使用してこれらのメソッドを適用するコード例です：

```js

new fullpage('#fullpage', {
    sectionsColor: ['yellow', 'green', 'purple', 'orange'],

    //イベント
    onLeave: function(origin, destination, direction) {
    	skipPages(origin, destination, direction)
    }
});

function skipPages(origin, destination, direction){
    if(destination.item.classList.contains('skip')){
        if(direction === 'down'){
            destinationIndex = destination.index + 2;
        }else{
            destinationIndex = destination.index;
        }
        console.log(destinationIndex);

        setTimeout(function(){
            fullpage_api.moveTo(destinationIndex);
        });
    }
}
``` 

これを機能させるには、スキップしたいセクションにクラス名`skip`を追加する必要があります。

例：

```html

`<div id="fullpage">
    <div class="section">セクション 1 </div>
    <div class="section skip">セクション 2 </div>
    <div class="section">セクション 3 </div>
</div>
```

## CodePenの例

[こちらにコードペンの例があります](https://codepen.io/alvarotrigo/pen/yLVdNrb)。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="yLVdNrb" data-pen-title="fullPage.js - Skip Sections on scroll" data-user="alvarotrigo" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/alvarotrigo/pen/yLVdNrb">
  fullPage.js - Skip Sections on scroll</a> by Álvaro (<a href="https://codepen.io/alvarotrigo">@alvarotrigo</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>
rosbag(mcap)に記録された"/diagnostics"の内容を抽出する

### コード

```python
from mcap.reader import make_reader
from mcap_ros2.decoder import DecoderFactory
from tqdm import tqdm
import pandas as pd

mcap_file = "hoge.mcap"
target_status_name = "hoge_monitor: hoge_monitor"

statuses = []

with open(mcap_file, "rb") as f:
    reader = make_reader(f, decoder_factories=[DecoderFactory()])
    for schema, channel, message, ros_msg in tqdm(reader.iter_decoded_messages(), dynamic_ncols=True):
        if channel.topic != "/diagnostics":
            continue

        for status in ros_msg.status:
            if status.name == target_status_name:
                dic = {
                    "sec": ros_msg.header.stamp.sec,
                    "nanosec": ros_msg.header.stamp.nanosec,
                    "level": status.level,
                    "message": status.message,
                    "hardware_id": status.hardware_id
                }

                for value in status.values:
                    dic[value.key] = value.value
                
                statuses.append(dic)

df = pd.DataFrame(statuses)
```

### 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2528209/bd4bcd1f-78a3-83d6-581c-7951a0463c61.png)
Javaで「ラベルに文字列と画像を両方表示する」の動作を確認してみた。

# 概要

Javaで「ラベルに文字列と画像を両方表示する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/tutorial/jlabel/index8.html

# 実装

以下のファイルを作成しました。

```Sample.java
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.Dimension;

class Sample extends JFrame{
  public static void main(String args[]){
    Sample frame = new Sample("MyTitle");
    frame.setVisible(true);
  }

  Sample(String title){
    setTitle(title);
    setBounds(100, 100, 728, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    ImageIcon icon1 = new ImageIcon("./check.png");
    ImageIcon icon2 = new ImageIcon("./batsu.png");
    ImageIcon icon3 = new ImageIcon("./star.png");

    JLabel label1 = new JLabel("Hello!", icon1, JLabel.LEFT);
    label1.setOpaque(true);
    label1.setBackground(Color.YELLOW);
    label1.setPreferredSize(new Dimension(180, 100));

    JLabel label2 = new JLabel("Good!", icon2, JLabel.CENTER);
    label2.setOpaque(true);
    label2.setBackground(Color.GREEN);
    label2.setPreferredSize(new Dimension(180, 100));

    JLabel label3 = new JLabel("Sorry!", icon3, JLabel.RIGHT);
    label3.setOpaque(true);
    label3.setBackground(Color.RED);
    label3.setPreferredSize(new Dimension(180, 100));

    JPanel p = new JPanel();
    p.add(label1);
    p.add(label2);
    p.add(label3);

    add(p, BorderLayout.CENTER);
  }
}
```

以下のコマンドを実行しました。

```
$ javac Sample.java 
$ java Sample 
```

実行結果は以下の通りでした。

![Screenshot from 2025-01-17 18-04-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/e67c9b16-c02e-c0bd-543e-ce8b96282d84.png)

# まとめ

何かの役に立てばと。
Unity6で画像をインポートするとSpriteImportModeがMultipleになる問題

# 問題点

Unity 2022までは画像をUnityにインポートすると`SpriteImportMode`が`Single`だった。
しかし、Unity6からはデフォルトが`Multiple`になってしまう。
デフォルトを`Sigle`に戻したい。

# 解決策
`Editorフォルダ`を作って以下のファイルを配置すれば`Single`でインポートされます。

```C#:TextureAssetPostProcessor.cs
public class TextureAssetPostProcessor : AssetPostprocessor
{
    private void OnPreprocessTexture()
    {
        var textureImporter = assetImporter as TextureImporter;
        
        if (textureImporter is { importSettingsMissing: true })
        {
            if (textureImporter.spriteImportMode == SpriteImportMode.Multiple)
            {
                textureImporter.spriteImportMode = SpriteImportMode.Single;
            }
        }
    }
}
```

# 宣伝
役に立ったと思う方。良ければこちらのゲームで遊んでください。
(iOS/Android)
[TownSoft](https://townsoft.jp)
参照タイプ項目定義、非活性時、！アイコンの表示方法

![スクリーンショット 2025-01-17 181027.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971184/2ddb6475-f460-7b7d-491d-56777226c0c3.png)
![スクリーンショット 2025-01-17 181238.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971184/626281b6-e221-b88c-0234-c5d758883f18.png)


```ruby:qiita.rb
	
ignore_filter_on_new=true,​list_force_default=true,​readonly_clickthrough=true
```
Windowsでwebrtcvadのインストールに失敗するときの対処方法[Windows][webrtcvad]

# 環境
・Windows 11 Home
・pip 24.3.1
・python 3.11.9

# 問題
以下のコマンドでwebrtcvadをインストールしようとしても、エラーが出る。
```
$ pip install webrtcvad
ERROR: Failed building wheel for webrtcvad
```

# 試したこと
```
pip install webrtcvad-wheels
```

これで無事にインストールできた。

# 参考
https://github.com/wiseman/py-webrtcvad/issues/40