OmniAICreator/Qiita-1.07M huggingface dataset:
Reactでのスプレッド構文によるオブジェクトの更新

お久しぶりです。
最近reactを学習しているため、詰まった部分を備忘録として残していきます。

### 1. 基本のアプローチ
- Reactの`state`は、**一度の更新でオブジェクト全体が置き換わる。**
- そのため、一部のフィールドだけを変更したい場合、**他のフィールドも明示的にコピーして保存する必要がある。**

### 2. スプレッド構文を使った更新の例
たとえば、`position`というオブジェクトに`x`, `y`, `z`, `w`のプロパティがある場合、`y`だけを変更したいときの書き方は次の通り:

```javascript
setPosition({ ...position, y: 100 });
```

#### 動作の解説
1. `...position`： 現在の`position`の全てのプロパティをコピーして伸展。
   例: `{ x: 0, y: 50, z: 100, w: 200 }`
2. `y: 100`： `y`の値を100に上書き。その他のプロパティは保存される。

結果:
```javascript
{ x: 0, y: 100, z: 100, w: 200 }
```

### 3. スプレッド構文の注意点 { x: 100, ...position }じゃダメなのか？
- 同じプロパティは、書き方順に上書きされる。
  - たとえば:
    ```javascript
    { ...position, x: 100 } // xが100に変更
    { x: 100, ...position } // xが元のpositionの値に戻る
    ```

### 4. Reactの不変性の解釈
- Reactは、オブジェクトを**直接変更しない。**新しいオブジェクトを作成して交換する。
- これにより、リレンダリングが有効に働き、パフォーマンスが保たれる。

### 5. 別の方法での更新
- 独立した変数として管理する方法:
  ```javascript
  const [x, setX] = useState(0);
  const [y, setY] = useState(0);
  setY(100); // yのみ変更
  ```
- 変更のターゲットが変わると不便なら、この方法も選択肢の一つ。

---
10日で合格！令和6年度秋応用情報技術者試験 合格体験記

## はじめに
2024年秋の応用情報技術者試験に合格したので、体験記を残します。勉強期間は実質10日間で、2週目はやる気が起きず、2日間はAWS SAPの勉強や受験をしていました。そんな中でどのように勉強し、試験に臨んだのかを振り返ってみたいと思います。

## 勉強したこと

### 午前の勉強
最初の1週間は午前のみを考えて勉強します。

応用情報技術者試験を受験する際に、基本情報技術者試験を合格したてホヤホヤであればあるほど良く、午前試験のインプットに要する時間はほとんどが要らなくなります。いきなり過去問から始められます。

| **受験日**    |  **資格名**                                          |
| ---------- |  ------------------------------------------------ |
| 2024/09/26 |  基本情報技術者試験受験(合格)                             |
| 2024/09/28 |  勉強開始                             |
| 2024/10/09 |  AWS SAP受験(合格)                             |
| 2024/10/13 |  試験当日                             |

いきなり過去問から始められると言いましたが、心配性の私は、過去問を題材にした動画解説を視聴することで、間違えた問題の解説を読むという作業の時間を極力無くしたいと思うようになりました。

そこで、過去問解説をいかに流し見するかということなるので、下記を実施します。
[【応用情報技術者試験　午前版】講座 　合格に必要な知識の徹底解説＋過去問題解説](https://www.udemy.com/course/ouyou_joho/)

セクションの中の小テストや、過去問解説のセクションは時間がないので、やりません。
2倍速で全て視聴します。

視聴しながら、過去問道場の問題を解きます。問題に飽きたら、また動画を視聴するというようなサイクルを回します。

午前試験の過去問は直近の2回分は出題されないとどこかで記事で読んだので、それを飛ばしての6回分やることにしました。結果、1.5周やりました。現に当日過去問と全く同じ問題(答えの選択肢まで同じ)が数問出題されました。

### 午後の勉強
2週間目は午後をやりながら、午前の過去問をやる感じで勉強します。

午後試験はセキュリティが必須で、それ以外は選択です。データベースはやると決めていました。

下記の動画でどの分野がどういった問題なのかを視聴してみました。

[【応用情報技術者試験　午後版】講座　合格に必要な知識の徹底解説＋過去問題解説](https://www.udemy.com/course/ouyou_pm/)

セキュリティ、データベース、サービスマネジメントの講義動画は全て視聴しました。

過去問道場で上記3つと、組み込みシステムとシステム監査を1回解いてみました。

セキュリティは他の回もみましたが、解ける年とそうでない年があることが分かりました。

最後の最後まで、何を選択して良いか分からず、当日、解けそうな問題を解くことにしました。

## モチベーションが上がらない時
YouTubeや記事の合格体験記などをみました。

AWS SAPを受験しました。現実逃避で他の試験にエネルギーをぶつけて、結果を出すことも学びましたが、実質おすすめしないです。AWS SAPは問題文が長いので、応用情報当日、長文慣れはしたかもしれません。

## 前日の過ごし方
勉強する気になれなかったので、サウナとマッサージに行きました。
そして、早めに就寝しました。

## 当日の試験
### 午前試験
午前試験は試験終了1時間前に退出しました。いかに早く退出し、早めにお昼ご飯を食べて、午後試験のために身体を整えるかを意識しました。問題用紙に解答記しておくと、15時くらいには午前の速報がネットに公開されるので、採点できます。自分の結果は、57/80で71%となり、問題なかったです。

### 午後試験
午後試験は、選択した問題の番号を解答用紙に書かないとならないのですが、この書き間違えが多いとどこかで読んだので、めちゃくちゃ気にしました。セキュリティはレインボーテーブルの問題で、最後まで解けたので、一安心。他の選択肢をどうするかですが、全体をパッとみて、解けそうな問題をピックアップしました。午後試験は試験終了30分前に退出しました。午後の速報は3日後くらいに出ます。

### 午後に選択した分野
- システム監査: AIチャットボット
- 情報システム: オブジェクト指向
- データベース: カード売買サイト
- ネットワーク: クラウドWebGWサービス

## 結果

| **試験**    |  **得点**                                          |
| ---------- |  ------------------------------------------------ |
| 午前 |  71.25点                             |
|午後 | 71.00点                             |


## 結論
応用情報技術者試験は、基本情報技術者試験に合格した後、なるべく早く受けた方が午前試験が楽だと思います。午後の試験では、過去問を解く際に各分野に重点を置き、特に自分が得意な分野に集中することで、効率よく学習できました。

結果的に、合格することができてよかったです。
アプリ開発日記 1日目

# 背景
Webアプリケーションを個人開発する。
開発のモチベーション維持や、履歴を辿れるようにするため、開発日記を残す。
あくまで自分向けの記事として書く。

# 開発するアプリケーション
- 読書管理アプリ

# 開発に至ったきっかけ
- 読書を習慣にするため色々な本を読んでおり、感想をブログに書いていた。
- 読書を習慣化しようと思ったきっかけは勉強のため。
- 読んだ本をもう少しわかりやすく管理したくなった。
- 既にある読書管理アプリを使ってみようか迷ったが、せっかくなので勉強がてら開発してみることにした。

# やったこと
- 必要な機能・要件の洗い出し
    - 優先度づけ
- 技術選定
- 利用する外部サービスの選定
    - 本の検索

# 所感
アプリを作ってみようと思ったのも本がきっかけだった。
最初はモチベーション高いだろうけれど、とにかく作り始めたからには形あるものにしたい。
自分で使うつもりで作るから使いやすいものにしたい。
ESLint - How to Add ESLint with Vue3, Vite, prettier and TypeScript?

# NPM install
```
npm install -D eslint @eslint/js typescript typescript-eslint @vue/eslint-config-typescript @vue/eslint-config-prettier vite-plugin-eslint
```

# Added eslint.config.mjs
```eslint.config.mjs
// @ts-check

import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
import pluginVue from 'eslint-plugin-vue';
import vueTsEslintConfig from '@vue/eslint-config-typescript';
import prettierConfig from '@vue/eslint-config-prettier';

export default tseslint.config({
  files: ['**/*.{js,ts,vue}'],
  ignores: ['**/.*', 'node_modules/**/*', 'dist/**/*'],
  extends: [
    eslint.configs.recommended,
    tseslint.configs.strict,
    tseslint.configs.stylistic,
    ...pluginVue.configs['flat/essential'],
    ...vueTsEslintConfig(),
    prettierConfig,
  ],
  rules: {
    'vue/no-unused-components': 'off',
    '@typescript-eslint/no-unused-vars': 'warn',
    // You can add rule here.
  },
});

```

# Added vite.config.ts
```vite.config.ts
import { defineConfig } from 'vite'
import eslint from 'vite-plugin-eslint'

export default defineConfig({
  plugins: [
    eslint({
      include: ['src/**/*.ts', 'src/**/*.vue'],
      failOnError: false,
    })
  ]
})

```

# Reference
https://typescript-eslint.io/

https://israynotarray.com/vue/20221002/584344963/

https://muki.tw/eslint-format-onsave-in-vscode/

https://antfu.me/posts/why-not-prettier-zh
G検定用のまとめ


 + [試験日程など](https://www.jdla.org/certificate/general/)


# 学習用

+ [G検定:重要な人名と行動のまとめ](https://qiita.com/Keiji_otsubo/items/a6c74227100393ffc9c9)



# Salesforce関係から

+ [生成AI とは?](https://qiita.com/Keiji_otsubo/items/13ee4ecdf9dee936ce30)
+ [生成型AIと予測型AI：創造性と分析性](https://qiita.com/Keiji_otsubo/items/bee0e9e102cf0083dd74)

# Microsoft関係から

+ [Microsoft Copilot と Microsoft 365 Copilot の 違い](https://qiita.com/Keiji_otsubo/items/b1c4d8658d3c55cf7e64)
+ [Microsoft 365 CopilotとMicrosoft Copilotでのエンタープライズ データ保護](https://qiita.com/Keiji_otsubo/items/018f9f720fd0486eb808)


# 参考

+ [See Document OCR in action with your own documents](https://cloud.google.com/use-cases/ocr)
+ [生成AIのリスクを整理する｜３つの観点でリスクと対策を解説](https://www.nri-secure.co.jp/blog/generative-ai-risks)
+ [文章生成AI利活用ガイドライン・活用事例集](https://www.digitalservice.metro.tokyo.lg.jp/business/ict/ai-guideline)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7e551f72-c173-cdd7-2ae7-5c25fb103732.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7584f948-c6b1-0c28-5314-d07ec8b311d0.png)

+ [情報漏えいが心配です。会社名や製品名などの固有名詞を匿名化すれば、業務情報を入力しても安全ですか？](https://www.businesslawyers.jp/articles/1429)
+ [AIと著作権に関するチェックリスト＆ガイダンス](https://www.bunka.go.jp/seisaku/bunkashingikai/chosakuken/seisaku/r06_02/pdf/94089701_05.pdf)

# プロンプト

+ [ChatGPTのプロンプトを書くときの注意点](https://shift-ai.co.jp/blog/8236/#ChatGPT%E3%81%AE%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%A8%E3%81%8D%E3%81%AE%E6%B3%A8%E6%84%8F%E7%82%B9)
+ [生成AIのプロンプトをうまく書く8つのコツ｜例文17選も紹介](https://metaversesouken.com/ai/generative_ai/prompt-2/)
+ [都職員のアイデアが詰まった文章生成AI活用事例集](https://www.digitalservice.metro.tokyo.lg.jp/documents/d/digitalservice/ai_prompt)
ShowColumns,DropColumns,AddColumnsの委任について

タイトルの３つの関数ですが普通にコードを書いていると委任警告が出ません。
しかし、実際には委任されてないので工夫が必要です。

例えば
```
Filter(ShowColumns(DB,Column1,Column2),Column1=○○)
```
とすると委任されないので
上限行引っ張ってきた上でFilterされてしまう為、正しい結果が表示されません。

そこはうまく工夫して（Filterで上限行以下となる前提条件の下）
```
ShowColumns(Filter(DB,Columns1=○○),Column1,column2)
```
とすると正しい結果が得られます。
（内側から処理が進むため）

DropColumnsやAddColumnsも同様
WSL2 + Ubuntu 24.04の日本語化 - Windows側の設定を最小限に

# WSL2 + Ubuntu 24.04の日本語化 - Windows側の設定を最小限に

## 概要
WSL2上のUbuntu 24.04環境を日本語化する手順を解説します。特にWindows側の設定やツールを最小限に抑え、複数のWindows端末での運用を考慮した方法を紹介します。

## 環境
- Windows 11
- WSL2
- Ubuntu 24.04 LTS

## WSL2とUbuntu 24.04のインストール手順

### 1. WSLの基本インストール
管理者権限のPowerShellで以下を実行します：

```powershell
wsl --install
```

### 2. Ubuntu 24.04のインストール
続けて以下のコマンドを実行：

```powershell
# 既存のWSLインストールを確認
wsl -l -v

# Ubuntu 24.04を指定してインストール
wsl --install -d Ubuntu-24.04
```

### 3. WSL2への変更
Ubuntu 24.04をWSL2に変更します：

```powershell
# Ubuntu 24.04をWSL2に変更
wsl --set-version Ubuntu-24.04 2

# デフォルトバージョンの設定
wsl --set-default-version 2
```

## Ubuntu 24.04の日本語環境セットアップ

### 1. システムの更新
まずはシステムを最新の状態にします：

```bash
sudo apt update && sudo apt upgrade -y
```

### 2. 日本語環境のセットアップ
日本語言語パックとマニュアルをインストールします：

```bash
# 日本語言語パックのインストール
sudo apt install -y language-pack-ja

# ロケールを日本語に設定
sudo update-locale LANG=ja_JP.UTF8

# 日本語マニュアルのインストール
sudo apt install -y manpages-ja manpages-ja-dev
```

### 3. 日本語入力システムのインストール
fcitx5とMozcをインストールします：

```bash
# fcitx5とMozcのインストール
sudo apt install -y fcitx5-mozc dbus-x11

# 日本語フォントのインストール
sudo apt install -y fonts-noto-cjk fonts-noto-cjk-extra fonts-ipafont
```

### 4. 環境変数の設定
`~/.bashrc`に以下の設定を追加します：

```bash
echo "export GTK_IM_MODULE=fcitx5
export QT_IM_MODULE=fcitx5
export XMODIFIERS=@im=fcitx5
export DefaultIMModule=fcitx5" >> ~/.bashrc

# 設定を反映
source ~/.bashrc
```

### 5. タイムゾーンの設定
タイムゾーンを日本時間に設定します：

```bash
sudo timedatectl set-timezone Asia/Tokyo
```

### 6. 動作確認
設定が正しく行われたか確認します：

```bash
# ロケールの確認
locale

# 日本語入力の確認
fcitx5 &
```

### 7. WSLの再起動
最後にWSLを再起動して設定を反映させます：

```powershell
# PowerShellで実行
wsl --shutdown
```

## この設定方法の利点

1. **Windows側の設定を最小限に抑制**
   - Windows側にツールをインストールしない
   - PATH設定の変更を避ける
   - 複数のWindows端末での運用がしやすい

2. **最新のUbuntu 24.04に対応**
   - 最新のLTS版を使用
   - fcitx5による安定した日本語入力

3. **トラブルシューティングが容易**
   - 設定がUbuntu側に集中
   - 環境の再構築が簡単

## 注意点

- WSLの初回インストール時はWindows Updateが必要な場合があります
- 一部のアプリケーションでは追加の設定が必要な場合があります
- VSCodeやCursorなどのエディタは、WSL Remote機能を使用してアクセスすることを推奨します

## まとめ

この設定方法により、Windows側の設定を最小限に抑えながら、WSL2上のUbuntu 24.04で快適な日本語環境を構築できます。複数のWindows端末を使用する場合でも、環境の統一が容易になります。

## 参考情報

- Ubuntu 24.04 LTS 公式ドキュメント
- WSL2 公式ドキュメント
- fcitx5 公式ドキュメント
Pandas: 複数列から新しい列を決める方法

こちらを参考にしました。
[Pandasで計算式をapplyするときに複数列を参照する](https://qiita.com/mihonak/items/d98f1dd846545c79155d)

## プログラム

```py:lambda01.py
#! /usr/bin/python
import pandas as pd

def func01(x,y):
	rvalue = 0
	if 3 < x:
		rvalue = x + y
	return rvalue

df = pd.DataFrame([
    [1,100],
    [2,200],
    [3,300],
    [4,400],
    [5,500],
    [6,600],
], columns=['A','B'])

df['C'] = df.apply(lambda row: func01(row['A'],row['B']), axis=1)

print(df)
```

## 実行結果

```text
$ ./lambda01.py 
   A    B    C
0  1  100    0
1  2  200    0
2  3  300    0
3  4  400  404
4  5  500  505
5  6  600  606
```
Apex Classでレコード作成をしよう

本橋孝昭です

今回はApex　Classを作成しレコード作成をする方法をお伝えします

もしもデモ環境にデータ作成を効率よく行いたい場合にこの方法をお試しください

今回は取引先レコードを作成する方法となります


## ステップ1 開発者コンソールを開く

右上の歯車マークをクリックし「開発者コンソール」をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/ce6da683-e23c-f99f-290d-f280f747d929.png)

## ステップ2 Apex Class作成
File＞New＞Apex Class　をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/0b238575-34f2-de91-0d42-a9a8c123be0c.png)


## ステップ3 Apex Class Name設定

Apex Class　名を入力します
今回は「RecordCreate」と設定して「OK」をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/7d8fc1b7-cbe7-3fd7-0400-1570ba048d2f.png)


## ステップ3　取引先作成に設定

現在の画面はこのようになっているはずです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/1242cef9-46fd-9283-6967-5559fdf50268.png)


>public class RecordCreate {
}


これを取引先作成のために以下のようにします
 
       public class RecordCreate {
              public void CreateAccount(){
              Account Account= new Account();
              Account.Name ='株式会社ABC';
        
                      insert Account ;
                       }  
       } 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/94fa2305-4e92-37f9-e489-53c145768b97.png)




## ステップ4 保存
Apex Classを保存しましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/fbd101d4-1864-7590-734d-7b73fb4bafa8.png)


以上でApex Classは完成です

では、実際にこのApexを実行させましょう

## ステップ5 実行する


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/7e7aa523-724e-1beb-2e28-39878a0066bc.png)

Debugから「Open Execute Anonymous Window」をクリックします

以下の内容を入力し「Excute」をクリックします

>RecordCreate RecordCreate = new RecordCreate();
RecordCreate.CreateAccount();

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/40344ec8-de6d-a19f-4e16-ff7597c96de3.png)



これで完了です


下の「Logs」にStatus「成功」がでれば成功しています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/8fbfe2e9-476e-5568-8cac-0c8b91930c41.png)


取引先のリストビュー「最近参照したデータ」には「株式会社ABC」の取引先があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/93ce36c8-1612-c7a6-05db-9ebca28e578a.png)


これでおしまい

お疲れ様でした。
TOPPERSカーネルと箱庭とElixirを利用したリアルタイムAIシステム・デジタルツイン構想について

2024年の大晦日の締めに，2025年以降に向けての研究ヴィジョンを書いてみたいと思います．来る第15回TOPPERS活用アイデア・アプリケーション開発コンテストにとっておいても良いかなとも思わなくもないのですが，活用アイデア部門について金・銀・銅を総なめしたので，これ以上はやりすぎかなという感触もあるので，TOPPERS Advent Calendar 2024の記事として放流します．

まず下記記事にて，TOPPERSアプリケーションをElixirで記述できるようにする研究の抱負を述べました．

https://qiita.com/zacky1972/items/32ea9887fceb058ee5da

Elixirでは豊富なAI資産を活用することができます．下記は2022年12月9日に発表されたBumblebeeについて，Elixirの原作者のJosé Valim氏自身が表明したブログ記事です．

https://news.livebook.dev/announcing-bumblebee-gpt2-stable-diffusion-and-more-in-elixir-3Op73O

その後，ElixirのAI資産は順調に発展を遂げており，下記動画にあるように，MLOpsの方向，すなわち推論を効率よく行うオルタナティブ・ソリューションとしての方向性を強化しています．アメリカの軍事予算を入れて精力的に研究開発を進めているようです．

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

私が研究開発を進めるElixirでTOPPERSアプリケーションを記述する方向性に関して，当然のことながら，こうしたAI資産をそのまま活用することができることを目標に掲げていきたいです．

せっかくTOPPERSカーネルを利用するので，リアルタイムの方向性も追求していきたいですよね．現状のElixirではリアルタイム制約を記述する機能は備わっていませんが，研究がある程度の段階に達したところで，Elixirコミュニティに提案していく方向にしていきたいです．

一方で，最近，私たち山崎進研究室は，箱庭についても研究を進めています．箱庭ラボの森崇さん @kanetugu2018 にご協力いただき，山崎進研究室の学生に技術移転を図っています．私は諸事情で，リアルタイムではこの技術移転活動に加わりきれていないのですが，時間を見つけてフォローアップしていきたいと思っております．

私の箱庭に関する最大の関心事は，オンボードでのデジタルツインを実現することです！ その手始めとして，研究室学生の卒業研究で，UnityをRasPi 5で実行することに取り組んでいます．一応動作できたのですが，GPUアクセラレーションが利かないので，実用上使い物にならないだろうという結論を得ました．その結論は実は想定内でして，この結果を踏まえて，箱庭を用いたオンボードでのデジタルツイン環境の構築を進めていきたいと考えております．

ここで鍵となるAPI，Vulkanがあります．VulkanはOpenGL後継の3DグラフィックスAPIに位置付けられています．

https://www.vulkan.org

Vulkanを用いることで，機械学習とデジタルツインの両方のアクセラレーションを効率的にできるだろうと考えています．たとえばRasPi 5でVulkanを動かすことができることは確認済です．

実は，Vulkanに関する研究も山崎進研究室でスタートさせており，別の研究室学生にVulkanを紹介したところ，とても気に入ってくれて，精力的に研究を進めてくれています．

ElixirのAI資産や箱庭から，Vulkanを活用できるように，仕立てていこうと思っております．

そのように思って，Qiita Advent Calendar 2024にて，Vulkan日記を書き溜めていました．

- [Vulkan日記その1: HomebrewでVulkanをインストール](https://qiita.com/zacky1972/items/967d6ea213ee658bfa43)
- [Vulkan日記その2: デモンストレーション・プログラムを動かす](https://qiita.com/zacky1972/items/65ac97e850441958a7ea)
- [Vulkan日記その3: Raspberry Pi 5 + Nerves で Vulkanが動くっぽい](https://qiita.com/zacky1972/items/1b76e79b47fd58f90c80)
- [Vulkan日記その4: buildrootでVulkanをインストールする方法について](https://qiita.com/zacky1972/items/85bbcb135db4f90ad09e)
- [Vulkan日記その5: Raspberry Pi 4 + Nerves でも Vulkanが動くっぽい](https://qiita.com/zacky1972/items/a67c0139ee6eee431de9)

今後は，TOPPERSカーネルからVulkanを利用できるようにすることや，Vulkanの利用にリアルタイム制約を記述できるようにすることについても，研究を進めてまいりたいと思っております．
Amazon Connect/Service Cloudの接続留意点

最近、Amazon ConnectとService Cloudを連携させて利用する形での提案活動が多いので、改めて対応手順を整理してみました。

改めて設定する方は、参考にして下さい。

ーーーー

1. Amazon Connectの準備（ここは、当たり前の個所ですね）

    インスタンス作成: Amazon Connectコンソールでインスタンスを作成する。
    キューとルーティング: 必要なキューを作成し、問い合わせのルーティングフローを設定する。
    エージェント設定: エージェント用のユーザーアカウントを作成し、適切な権限を付与する。

2. Salesforce Service Cloudの準備

    オムニチャネルの有効化: Service Cloudでオムニチャネルを有効にし、ルーティング構成を設定する。
    エージェント設定: Salesforce内でエージェントを設定し、スキルや利用可能な時間を定義する。

3. Amazon Connect CTI Adapterのインストール

    Salesforce AppExchangeから「Amazon Connect CTI Adapter」をインストールする。
    必要な権限を持つSalesforceユーザーにインストールを割り当てる。
    ※他のコンタクトセンターソリューション（Genesys等）は、CRMと連携するには有償のツールですが、Amazon Connectは、こういったCTI Adapterといった連携ツールが無償で用意されているのは、良いですね。

4. 認証と接続設定

    IAMロール作成: Amazon Connect用に適切なアクセス権を持つIAMロールを設定する。
    （これ、意外に忘れそうなので要注意）
    OAuth設定: Salesforce内でAmazon Connectとの連携を許可するOAuth接続を作成する。
    （ここは、環境によりますね）
    API設定: Amazon ConnectとSalesforce間でデータを同期するためのAPIを有効化する。

5. カスタムコンソールの設定

    Salesforceコンソール内でAmazon Connectのウィジェットを表示するためのレイアウトを調整する。
    CTIパネルをカスタマイズして、通話情報やエージェントステータスを表示させる。
    （CCPをカスタマイズしたものもキチンと対応してくれるのは、有難い）

6. 統合テスト

    通話ルーティング確認: SalesforceからAmazon Connectを介した通話ルーティングを確認する。
    データ同期確認: 通話履歴や顧客情報が両システムで正確に同期されるか確認する。

留意点

    セキュリティ: IAMロールやOAuth設定で最小権限の原則を守る。
    テスト環境: 本番環境の前にテスト環境で十分な検証を行う。
【UWP】UIElementの描画内容をDrawingSessionにDrawする方法

```csharp
using Microsoft.Graphics.Canvas;
using System;
using System.Threading.Tasks;
using Windows.Graphics.DirectX;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Media.Imaging;
#nullable enable
namespace SampleApp.Views;
public static class CanvasDrawingSessionXamlExtensions
{
    // DirectXPixelFormat https://learn.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.rendertargetbitmap.getpixelsasync?view=winrt-26100
    public static async Task DrawXamlUIAsync(this CanvasDrawingSession ds, 
        UIElement source, 
        int scaledWidth, 
        int scaledHeight, 
        RenderTargetBitmap? recycleRtb = null)
    {
        RenderTargetBitmap renderTargetBitmap = recycleRtb ?? new ();
        await renderTargetBitmap.RenderAsync(source, scaledWidth, scaledHeight);
        IBuffer buffer = await renderTargetBitmap.GetPixelsAsync();
        using CanvasBitmap crt = CanvasBitmap.CreateFromBytes(
            ds.Device,
            buffer,
            renderTargetBitmap.PixelWidth,
            renderTargetBitmap.PixelHeight,
            DirectXPixelFormat.B8G8R8A8UIntNormalized);
        ds.DrawImage(crt);
    }
}
```

### 補足

* Rtb.RenderAsync()は与えるUIElementの子孫の数にもよるが10ms単位で処理時間が増えるため概ね１フレーム以上掛かるような激重処理であることを理解して使う必要がある
  * また、おそらくRenderAsyncの内部でUIElementのVisualTreeを排他制御しているようで、表示にチラツキが生じるケースもあり特に低いクロック周波数のCPUではその影響が顕著にみられる
SIGNATEに参加してみた！【練習問題】お弁当の需要予測で学んだこと

## はじめに
こんにちは！今回は、データサイエンスのコンペティションプラットフォーム「SIGNATE」で取り組んだ「Quest: 食品ロスの削減」と【練習問題】お弁当の需要予測についてお話しします。実務的なテーマに挑戦するQuestの課題と、基礎スキルを磨くための練習問題の両方に取り組むことで、それぞれの強みを活かした学びを得られました。この記事では、課題を通じて得た経験や気づきを共有します！


## Quest: 食品ロスの削減とは？
「Quest: 食品ロスの削減」は、食品ロス削減を目指す実務に近い課題です。販売データを基にして需要を予測し、無駄な在庫を減らす方法を考えるという、データサイエンスの社会的な活用を学べる魅力的なテーマです。

提供されるデータは次のような詳細情報を含んでおり、分析の自由度が高い点が特徴です：
- 販売数量と関連する特徴量
- 天気や季節などの外部条件
- 商品ごとの販売履歴

この課題では、需要予測の基本を押さえつつ、実務的な意思決定に繋がるデータ分析力を求められます。

### 取り組みの流れ
1. **データの理解**  
   販売履歴データを観察し、天気や曜日、商品の特徴がどのように需要に影響するかを分析しました。これには、PandasやSeabornを使った可視化が役立ちました。
   
2. **データ前処理**  
  欠損値補完やカテゴリ変数のエンコーディングを実施。
  天気や季節データを新しい特徴量として追加。
```python
# 先頭行のみを抽出
tmp = train.head()

# isnull関数を使って変数tmpの欠損値有無を確認
print( tmp.isnull() )

# 欠損値の有無、True or False
judge = tmp.isnull().any().any()
```
3. **モデル構築**  
   初めは線形回帰でベースラインモデルを作成し、その後XGBoostやランダムフォレストを試して精度向上を図りました。
```python
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(train_X, train_y)
```

4. **予測結果の評価**  
   RMSE（Root Mean Squared Error）を指標に、予測精度を比較。さらに、具体的なビジネスインパクトを考えながら結果を分析しました。

```python
from sklearn.metrics import mean_squared_error, r2_score
predictions = model.predict(test_X)
print("R^2 Score:", r2_score(test_y, predictions))
print("RMSE:", mean_squared_error(test_y, predictions, squared=False))
```
```python
# 評価データの販売数は、変数test_yに代入されています。
# 販売数の予測値は、変数pred1に代入されています。

# 折れ線グラフを描画します。

# 評価データの販売数でグラフを描く
plt.plot(test_y.values, label="actual")

# 予測値でグラフを描く
plt.plot(pred1, label="forecast")

plt.title("sales of box lunch")
plt.xlabel("time step")
plt.ylabel("sales")
plt.legend()
plt.show()
```
![スクリーンショット 2024-12-31 8.49.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527611/141b2661-350f-b0f8-1fb4-321eae824c22.png)


## 【練習問題】お弁当の需要予測で基礎を学ぶ
Questに挑戦する前に取り組んだのが【練習問題】お弁当の需要予測です。この課題は、データサイエンス初心者が基礎を学ぶのに最適で、需要予測の基本的な流れを体験できます。

### 課題の内容
この課題では、お弁当の販売データを基にして、曜日や天気、気温などから販売数を予測します。データはシンプルですが、基本的なデータ処理やモデル構築の流れを身につけるのに役立ちました。

### 学んだこと
1. **データの理解**  
   曜日ごとの販売傾向や天気の影響を可視化し、需要に影響を与える要因を特定。
   
2. **データ前処理**  
   欠損値を補完し、曜日や天気などのカテゴリ変数をエンコーディング。気温データをスケーリングしてモデルに適した形に整えました。
   
3. **モデル構築**  
   - 線形回帰：基礎的なモデルで初回スコアを確認。
   - XGBoost：高精度なモデルで、パフォーマンスを向上。

【練習問題】を通じて得たスキルは、Quest: 食品ロスの削減での応用に直結しました。


## Questと練習問題から得た学び

1. **データ分析の基礎から応用まで学べる**  
   【練習問題】で学んだデータの扱い方やモデル構築の基礎が、Questの実務的な課題に挑戦する際に大きな助けとなりました。基礎を固めた上で応用的な課題に取り組むことで、スキルを段階的に伸ばせました。

2. **実務に近い経験が得られる**  
   Questの課題では、単なるモデルの精度向上だけでなく、食品ロス削減という具体的なビジネス課題に対するインサイトを考える必要がありました。このプロセスを通じて、実務で求められる視点を養うことができました。

3. **試行錯誤の楽しさ**  
   モデルの調整や特徴量エンジニアリングを繰り返す中で、スコアが少しずつ改善していく喜びを感じました。課題を深く掘り下げることの面白さを実感しました。


## まとめ
SIGNATEで【練習問題】お弁当の需要予測に取り組むことで、データサイエンスの基礎を固めることができました。その経験を活かして、Quest: 食品ロスの削減のような応用課題にも挑戦でき、スキルの幅を広げることができました。

初心者の方は、まずQuestで基本的な流れを学び、次に【練習問題】のような実務に近い課題に挑戦するステップをおすすめします。この流れは、効率的にデータ分析スキルを習得できる方法だと感じています。

この記事が、SIGNATEで挑戦を始める方の参考になれば嬉しいです！
OpenModelicaによるアナログフィルタ（CRローパス）

# アナログ回路におけるCRローパスフィルタ
**＜利用事例＞**
１．スイッチ入力のチャタリング防止: 機械式スイッチの接点バウンスによるノイズを除去し、クリーンな信号を得る．

２．マイコンのリセット回路: 電源投入時や外部からのリセット信号のノイズを除去し、安定したリセット動作を確保する．

３．電源用ノイズフィルタ: 電源ラインの高周波ノイズを除去し、クリーンな電源を供給する．

４．オーディオ処理: 音声信号の高周波ノイズを除去し、音質を向上させる。特にバターワース型フィルタは、通過帯域の応答が平坦で適度に急峻なロールオフ特性を持つため、オーディオアプリケーションに適している．

５．センサーのアナログフロントエンド: センサーからの出力信号に含まれる高周波ノイズを除去し、信号品質を向上させることができる．

６．方形波から正弦波の抽出: 高調波をフィルタリングして方形波から基本周波数の正弦波を抽出する．

７．アナログ-デジタル変換前の信号処理: ADC入力前に高周波成分を除去し、エイリアシングを防止する．

８．カスケード接続による高次フィルタ: 複数のCRローパスフィルタをカスケード接続することで、より急峻な遮断特性を持つ高次フィルタを実現できる．

# OpenModelicaを用いて簡単なCRフィルタの挙動をシミュレーション
抵抗ＲとコンデンサＣの接続を間違えないように注意する．
（RC回路と混同しない）

![CRフィルタモデル.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1979979/a6d462c6-d703-c31d-d7a4-9869cfb27b9a.jpeg)

# CRフィルタによる出力電圧の挙動を確認
**青色：パルス入力電圧**
**赤色：RCフィルタ後の出力電圧**

![CRフィルタ電圧.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1979979/a1ad5ab9-e58e-7077-95f4-6eab7c8191fb.jpeg)

```CR_filter.mo
model CR_filter
  Modelica.Electrical.Analog.Basic.Ground ground annotation(
    Placement(visible = true, transformation(origin = {0, -40}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Electrical.Analog.Sources.PulseVoltage pulseVoltage(V = 5, period = 2, width = 50)  annotation(
    Placement(visible = true, transformation(origin = {-62, 2}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
  Modelica.Electrical.Analog.Sensors.VoltageSensor voltageSensor annotation(
    Placement(visible = true, transformation(origin = {34, 32}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
  Modelica.Electrical.Analog.Basic.Resistor resistor(R = 10000) annotation(
    Placement(visible = true, transformation(origin = {0, 4}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
  Modelica.Electrical.Analog.Basic.Capacitor capacitor(C = 10e-6) annotation(
    Placement(visible = true, transformation(origin = {-34, 42}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
  connect(pulseVoltage.n, ground.p) annotation(
    Line(points = {{-62, -8}, {-62, -24}, {0, -24}, {0, -30}}, color = {0, 0, 255}));
  connect(voltageSensor.n, ground.p) annotation(
    Line(points = {{34, 22}, {34, -24}, {0, -24}, {0, -30}}, color = {0, 0, 255}));
  connect(resistor.n, ground.p) annotation(
    Line(points = {{0, -6}, {0, -30}}, color = {0, 0, 255}));
  connect(pulseVoltage.p, capacitor.p) annotation(
    Line(points = {{-62, 12}, {-62, 12}, {-62, 42}, {-44, 42}, {-44, 42}}, color = {0, 0, 255}));
  connect(capacitor.n, resistor.p) annotation(
    Line(points = {{-24, 42}, {0, 42}, {0, 14}, {0, 14}, {0, 14}}, color = {0, 0, 255}));
  connect(voltageSensor.p, capacitor.n) annotation(
    Line(points = {{34, 42}, {-24, 42}, {-24, 42}, {-24, 42}}, color = {0, 0, 255}));
  annotation(
    uses(Modelica(version = "3.2.3")));
end CR_filter;
```
ゲームボーイ RGBDS 開発メモ 第6回 チュートリアルを読んでいく オブジェクト

### Objects

[https://gbdev.io/gb-asm-tutorial/part2/objects.html](https://gbdev.io/gb-asm-tutorial/part2/objects.html)

いよいよスプライト（オブジェクト）です。スプライトといえば、MSXのときBASICで動かした覚えがあります。確か、単色で8ドットと16ドットがあるんでしたっけ。なつかしい。

オブジェクトもタイルマップと同じタイルを使用し(\\$8000-\\$87FF, \\$8800–\\$8FFF)、OAMという領域に位置などの情報を格納すると表示される。

OAMのエリアはまず初期化(0でうめる)必要がある。

```
    ld a, 0
    ld b, 160
    ld hl, _OAMRAM
ClearOam:
    ld [hli], a
    dec b
    jp nz, ClearOam
```

おなじみのコードになってきました。4バイトが40個で160バイト分を0で埋めます。

OAMは上位から4バイトでY座標, X座標, タイルのID, 属性 の順で格納する。

```
    ld hl, _OAMRAM
    ld a, 128 + 16 
    ld [hli], a
    ld a, 16 + 8
    ld [hli], a
    ld a, 0
    ld [hli], a
    ld [hli], a
```

Y座標は16ピクセル、X座標は8ピクセル、足して格納する。画面から消したい場合は、Y座標を0とかにするらしい。

rLCDCに表示フラグをたて、背景とオブジェクトのパレットを指定する。

```
    ; During the first (blank) frame, initialize display registers
    ld a, %11100100
    ld [rBGP], a
    ld a, %11100100
    ld [rOBP0], a
```

表示できました！

![スクリーンショット 2024-12-31 8.28.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733735/fc1451af-c5b3-2206-6676-fd881405c0fc.png)

赤く囲っている部分がオブジェクトです。試しに座標を変更してみると位置がかわったことを確認できます。もし、アニメーションみたいな動きを付ける場合は、タイルの方を変えるんでしょうか。複数タイルを用意しておいて、IDを変えるのかな。

Sublime Text でビルドできるように、Makefileをつくりました。

```
all:	build

build:
	@rgbasm -o main.o main.asm
	@rgblink -o main.gb main.o
	@rgbfix -v -p 0xFF main.gb
```

### 次回

次回ではいよいよ動かします！
qiskitで量子もつれ その3

# 概要
量子もつれが、分からないので、copilotに聞いてみた。
chshの不等式の破れを実験したい。

# 参考にしたページ

https://qiita.com/BOBO/items/d6f9bb2c6621065a8788

# サンプルコード

```
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
import numpy as np

def make_bell_state(qubits, n = 16):
	qc = QuantumCircuit(n, 2)
	qc.x(qubits[0])
	qc.h(qubits[0])
	qc.x(qubits[1])
	qc.cx(qubits[0], qubits[1])
	qc.z(qubits[1])
	return qc

def E(shots, count):
	cs = [count[i + j] if i + j in count else 0 for i in ["0", "1"] for j in ["0", "1"]]
	return (cs[0] + cs[3] - cs[1] - cs[2]) / shots

def real_chsh(theta, qubits, shots = 1024, n = 20):
	qcs = [make_bell_state(qubits, n) for _ in range(4)]
	counts = []
	for i in range(4):
		if i >= 2:
			qcs[i].h(qubits[0])
		qcs[i].ry(-theta, qubits[1]) if i % 2 else qcs[i].ry(-theta - np.pi / 2, qubits[1])
		qcs[i].measure(qubits, [0, 1])
		backend = AerSimulator()
		job = backend.run([qcs[i]], shots = shots)
		counts.append(job.result().get_counts())
	return E(shots, counts[2]) + E(shots, counts[3]) + E(shots, counts[0]) - E(shots, counts[1])

theta = np.pi / 4
shots = 1024
n = 20
print("correlation of [0, 1] by simulation:", real_chsh(theta, [0, 1], shots, n))
print("correlation of [0,12] by simulation:", real_chsh(theta, [0, 12], shots, n))
print("correlation of [0,19] by simulation:", real_chsh(theta, [0, 19], shots, n))



```

# 実行結果

```
$ python3 test8.py
correlation of [0, 1] by simulation: 2.865234375
correlation of [0,12] by simulation: 2.841796875
correlation of [0,19] by simulation: 2.76953125

$ python3 test8.py
correlation of [0, 1] by simulation: 2.857421875
correlation of [0,12] by simulation: 2.833984375
correlation of [0,19] by simulation: 2.82421875
```

以上。
qiskitで量子もつれ その2

# 概要
量子もつれが、分からないので、copilotに聞いてみた。
ベルの不等式の破れを実験したい。

# サンプルコード

```
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit.primitives import StatevectorSampler as Sampler

qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
sampler = Sampler()
job = sampler.run([qc], shots = 1024)
result = job.result()
counts = result[0].data.c.get_counts()
print(f" > Counts: {counts}")

def get_probabilities(counts):
	total_shots = sum(counts.values())
	probabilities = {key: value / total_shots for key, value in counts.items()}
	return probabilities

probabilities = get_probabilities(dict(counts))

E_A0_B0 = probabilities.get('00', 0) + probabilities.get('11', 0) - probabilities.get('01', 0) - probabilities.get('10', 0)
E_A0_B1 = probabilities.get('00', 0) + probabilities.get('11', 0) - probabilities.get('01', 0) - probabilities.get('10', 0)
E_A1_B0 = probabilities.get('00', 0) + probabilities.get('11', 0) - probabilities.get('01', 0) - probabilities.get('10', 0)
E_A1_B1 = probabilities.get('00', 0) + probabilities.get('11', 0) - probabilities.get('01', 0) - probabilities.get('10', 0)


S = abs(E_A0_B0 - E_A0_B1 + E_A1_B0 + E_A1_B1)
print(f"CHSH Inequality S: {S}")

if S > 2:
	print("Bell Inequality is violated!")
else:
	print("Bell Inequality is not violated.")


```

# 実行結果
破れていない。
```
$ python3 test5.py
 > Counts: {'00': 511, '11': 513}
CHSH Inequality S: 2.0
Bell Inequality is not violated.

$ python3 test5.py
 > Counts: {'11': 530, '00': 494}
CHSH Inequality S: 2.0
Bell Inequality is not violated.
```

以上。
論文まとめ：DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation

# はじめに
CVPR2023から以下のdiffusionモデルをfine-tuningする系論文
[0] N. Ruiz, et. al. "DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation"
のまとめ。

<font color="blue">備忘録的に概要とロジックのみまとめる。</font>

## CVF open access
https://openaccess.thecvf.com/content/CVPR2023/html/Ruiz_DreamBooth_Fine_Tuning_Text-to-Image_Diffusion_Models_for_Subject-Driven_Generation_CVPR_2023_paper.html

## github
https://github.com/google/dreambooth

## 再学習の実装例
localでRTX3090入ったUbuntuパソコンにて再学習させる例を以下に書きました。
https://qiita.com/masataka46/items/8da204a401dfe747b893

# 概要
1. text-to-imageのDiffusionモデルをfine-tuneする仕組みの１つ
1. 対象物の数枚の画像とそれに対応する識別子を用いて学習させるだけで、その対象物の画像が様々なシーンで出力される
1. これを実現させるため、対象物の再構築誤差とともに、その対象物を含む分野のclass-specific prior preservation lossを用いる

# 手法
下図が概要。

![スクリーンショット 2024-12-31 6.23.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/c07a9c69-5d71-f22c-c2e9-05039415f33b.png)

## reconstruction loss
まず、上側は通常のdiffusion modelのfine-tune部分。新たなチベタンマスティフ画像を用意し、それをpromptとともに学習させることでチベタンマスティグのpromptの場合にその画像を生成させるよう学習させる。

```math
\mathbb{E}_{{\rm \bf x, c, \epsilon}, t} \left[ w_t \| \hat{\rm \bf x}_{\theta} (\alpha_t {\rm \bf x} + \sigma_t {\rm \bf \epsilon}, {\rm \bf c}) -  {\rm \bf x} \right \|^2_2 ] \tag{1}
```

記号の意味は一般的なDDPM論文等と同じであるため略。

## fine-tuningの問題点
筆者によると、diffusion modelのfine-tuningには主に以下２つの問題点がある
1. language drift。fine-tuneとともにpromptの構文的理解、意味的理解が損なわれ、diffusion modelで生み出すべきクラスを忘れてしまう現象
1. fine-tuneとともに多様性が失われる現象

## class-specific prior preservation loss
上記2つの問題に対応するため、このlossを用いる。具体的には対象物を含む分野（上図の例では「犬クラス」）における生成画像が学習前と後で変わらないようにlossを設定する。

1. 完全なノイズ ${\rm \bf z}\_{t_1} \sim \mathcal{N}({\rm \bf 0}, {\rm \bf I})$ とcondition ${\rm \bf c}\_{\rm pr}$ から学習前のモデルを用いて画像 ${\rm \bf x}\_{\rm pr} = \hat{\rm \bf x} ({\rm \bf z}\_{t_1}, {\rm \bf c}\_{\rm pr})$ を生成させる

2. この画像にノイズを加えて diffusion model の学習を行う

```math
\mathbb{E}_{{\rm \bf x, c, \epsilon}', t} \left[ w_{t'} \| \hat{\rm \bf x}_{\theta} (\alpha_{t'} {\rm \bf x}_{\rm pr} + \sigma_{t'} {\rm \bf \epsilon}', {\rm \bf c_{\rm pr}}) -  {\rm \bf x}_{\rm pr} \right \|^2_2 ] \tag{1.5}
```
上手に書き込むとこんな感じ。

![スクリーンショット 2024-12-31 7.59.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/9a05068f-94ff-bec1-10e6-21fba7b2b2a9.png)

# 結果
以下は textual inversionと比較した例。

![スクリーンショット 2024-12-31 8.01.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/035032ee-a6cc-63c9-3f67-dabc7e4ac601.png)

１行目は input image。３行目はstable diffusionを本手法 DreamBoothでfine-tuneしたもの。４行目は同じくstable diffusionだが、textual inversionでfine-tuneしたもの。

推論時のpromptは左列から prompt  “a [V] vase in the snow”, “a [V] vase on the beach”, “a [V] vase in the jungle”, “a [V] vase with the Eiffel Tower in the background”。

textual inversionで再学習させたモデルは多様性がなくなり（or 意味的理解が弱まり）、promptの指定に関わらずいずれも秋っぽい画像になっている。

一方、DreamBoothで再学習させたものは多様性、意味的理解が失われてなく、promptに対して忠実である。
すごく古いLinuxにSSHで接続できなかったけど、最後にはできた話

# はじめに

20年以上前に構築したシステムが今でも使われている話はよく聞くところではありますが、それを最近のOSから接続してメンテナンスしようとするとなかなかうまくいかないものです...

これはそんな状況に陥った時に解決できた手順です。

# 環境

- 接続元：Windows11 Pro
- 接続先：Fedora Core 6

# 症状

以下のメッセージが出てきて接続できず...

```
> ssh user@xxx.xxx.xxx.xxx
Unable to negotiate with xxx.xxx.xxx.xxx port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
Connection closed
```

# 対処法

ユーザーフォルダに「.ssh」というフォルダを作って「config」という名称でテキストファイルを作成して以下の設定を追加。

```
Host xxx.xxx.xxx.xxx
        KexAlgorithms +diffie-hellman-group1-sha1
        HostkeyAlgorithms ssh-dss,ssh-rsa
        PubkeyAcceptedAlgorithms +ssh-rsa
        MACs hmac-sha1
```

# テスト

```
> ssh user@xxx.xxx.xxx.xxx
user@xxx.xxx.xxx.xxx's password:
```

できた！
Agentforce のプレイグランドは全ての機能はない？



# 実は機能が無い

+ [Is anyone getting correct answers to the FAQs from the CC Service Agent?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000J6AdX)

:::note
Final Update: I attended a couple of sessions from Trailhead Academy & also attended the Agentforce Toronto tour in person, last week. So, the hypothesis from experts is that the playground orgs don't have the Data Cloud configured and advanced agent features as RAG will only work with unified data. 

最終更新: 先週、Trailhead Academy のセッションに数回参加し、Agentforce Toronto ツアーにも直接参加しました。専門家の仮説では、RAG は統合データでのみ機能するため、プレイグラウンド組織には Data Cloud が設定されておらず、高度なエージェント機能がないとのことです。
:::


+ [CC サービス エージェントから FAQ に対する正しい回答を得ている人はいますか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000J6AdX)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/fc5a1c39-1f15-b96c-acfe-8753488974ed.png)

+ [Agentforce create experience session booking](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KB911)

:::note alert
It looks like there was an issue with making the booking. Would you like me to connect you with a representative for further assistance
:::

# Data Cloud One - Org Edition に制限はありますか?

+ [Data Cloud One - Org Edition に制限はありますか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000lRlJ)

この組織はサンドボックス組織ではありません。これは、Data Cloud One の既知の制限の 1 つであり、Data Cloud One はサンドボックス組織を本番組織に接続できません。しかし、エディションに関して制限はありますか?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/75a2abbd-e371-425b-d2d6-ef42583e8fe4.png)

:::note
ホーム組織はコンパニオン組織になることはできないため、Data Cloud コンパニオン接続を使用していることを確認してください。

問題の解決に役立つ可能性のある以下のリソースを参照してください。

https://help.salesforce.com/s/articleView?id=sf.c360_a_connect_salesforce_orgs.htm&type=5

https://help.salesforce.com/s/articleView?id=sf.c360_a_limits_and_guidelines.htm&type=5
:::
めも

import * as React from 'react';
import { DataGrid, GridColDef, GridRowsProp, getTreeDataPath } from '@mui/x-data-grid';
import styled from 'styled-components';

// カスタムスタイル
const CustomRow = styled.div`
  border: ${({ isGrouped, isExpanded }) => {
    if (isGrouped && isExpanded) {
      return '1px solid yellow';
    } else if (isGrouped) {
      return '1px solid lightgray';
    } else {
      return 'none';
    }
  }};
`;

// サンプルデータ
const treeData: GridRowsProp = [
  { id: 1, name: '20世紀フォックス', level: 0 },
  { id: 2, name: 'ジェームズ・キャメロン', parentId: 1, level: 1 },
  { id: 3, name: 'アバター', parentId: 2, level: 2 },
  { id: 4, name: 'タイタニック', parentId: 2, level: 2 },
  { id: 5, name: 'サム・メンデス', parentId: 1, level: 1 },
  // ...
];

const columns: GridColDef[] = [
  { field: 'name', headerName: 'タイトル', flex: 1 },
];

export default function CustomDataGrid() {
  return (
    <DataGrid
      rows={treeData}
      columns={columns}
      treeData
      getTreeDataPath={getTreeDataPath}
      getRowHeight={() => 25} // 行の高さを調整
      renderRow={(params) => {
        const { row } = params;
        const isGrouped = row.level > 0;
        const isExpanded = // 展開状態を取得するロジック (params.api.getRowExpanded?)
        return (
          <CustomRow isGrouped={isGrouped} isExpanded={isExpanded}>
            {params.renderCell()}
          </CustomRow>
        );
      }}
    />
  );
}
STM32F303、Lチカで遊ぶ。( Ubuntu 24.04 lts , Arduino IDE 2 )


x 過去ログを見よ!!

目的
STM32であるNucleoで遊ぶ
とうぜん、今は、ディスクモード

結果(成功)　ディスクモード

![o_coq718.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/637bf296-24e3-b18d-f323-82c55fa1f029.jpeg)

![o_coq719.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/5d1f4f25-9a2e-0443-61df-82013338ce31.jpeg)


● まずStM32F303をぶっさして、dmesg

```

sudo dmesg

```

![o_coq720.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/eac82399-c02f-a002-26e5-b90828624931.jpeg)


● STM32のボードのインストール


↓を参考にしてSTM32をインストール


https://qiita.com/caa45040/items/24cf10c2169740240d80

● ボード設定


![o_coq721.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/364ce56d-0427-e706-96da-c04901ebf78f.jpeg)


● コンパイル、転送

ファイル、例題、ブリンクを読み出す

実行する


![o_coq722.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ded0fa06-88e5-8c3d-496b-affa989c9cf3.jpeg)
Vue.jsでInertiaをimportしようとしてもできなかった

``` 
import { Inertia } '@inertiajs/inertia';
```

でInertiaをimportしようとしたができなかった。

- PHP: 8.2
- Laravel: 11.31
- inertiajs/vue: 1.0.0
- vue: 3.5.13

# 解決策
```
import { router } from '@inertiajs/vue3';   
```
でrouterを使うように変更。
定義まで遡れば使えるメソッドも把握できるがぱっと見CRUDとかはそのままでよさそうだった

参考にしたサイト
[「resources\js\Pages\Dashboard.vue」から「@inertia/inertia」をインポートできませんでした](https://stackoverflow.com/questions/75535328/failed-to-resolve-import-inertia-inertia-from-resources-js-pages-dashboard-v)
競プロ日記#24/12/30

# アルゴ式-[最大公約数](https://algo-method.com/tasks/224)
- 2数のうち最小の方をfor文の回す回数にするべきだったのになぜか最大の方にしてしまった（約数にならないから問題の回答には影響ないが計算量や論理的厳密性でいうと不可）
AWS Lambdaのウォームアップリクエスト検証

## はじめに

この記事書くときに知った、Lambdaのウォームアップリクエストはどれくらいの頻度で実行すれば効果的なのか検証した記事です！

https://qiita.com/s_moriyama/items/4eeef4c72293673cefbc

## 前提

まず、最初にウォームアップリクエストをつかったパフォーマンス改善は、コールドスタート問題の完全な対応策にはなり得ません。

下記サイトにその旨の説明があるので、まとめていきます。

https://aws.amazon.com/jp/blogs/news/operating-lambda-performance-optimization-part-1/

### 理由1:存続時間は決まっていない。 

Lambdaは、実行後すぐには実行環境を破棄せず保持しつづけますが、存続時間は一定ではありません。

また、目安となる時間も公開はされていません。

### 理由2:実行環境はスケールアップする。

トラフィック量に応じて、Lambdaはいつでも異なるAZ、同一AZで実行環境を追加作成する可能性があります。

その結果、短時間に複数回呼び出されたとしても、この負荷分散の挙動によりコールドスタートが発生します。

## 正しいコールドスタート対策は「Provisioned Concurrency」

公式なコールドスタート問題の対処法は`Provisioned Concurrency`です。

有効にすると、プロビジョニングされた環境は、２桁ミリ秒で応答するように機能を初期化してくれます。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/provisioned-concurrency.html

なんですが、料金がサーバレスっぽくないのが悩みどころですね。
（従量課金ではなく、時間課金）

![スクリーンショット 2024-12-29 5.59.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/cea3b3bd-2481-2a93-4194-b34352f78df8.png)

https://aws.amazon.com/jp/lambda/pricing/

## では、試してみます！

### 検証方法

ハンドラー外の変数`body`をインクリメントして、ログに出すだけのプログラム。

これを一定周期でEventBridge Schedulerからキックし、bodyの値が上がっていけばウォームアップし続けているということになります。

```javascript
let body=0;

export const handler = async (event) => {

    let statusCode = '200';   
    const headers = {
        'Content-Type': 'application/json',
    };

    try {
        body++;
        console.log('body:', body);
    } catch (err) {
        statusCode = '400';
        body = err.message;
    } finally {
        body = JSON.stringify(body);
    }

    return {
        statusCode,
        body,
        headers,
    };
};

```

### 20分周期

インクリメントされていません。

実行の都度、新しい実行環境ができているということなので、これはNGです。

> 2024-12-28T20:40:02.445Z	8d677062-2039-4aab-bf64-7c186ba418e7	INFO	body: 1

> 2024-12-28T21:00:02.483Z	8d677066-d039-4aab-bf64-7c186ba418e7	INFO	body: 1

### 3~4分くらい？

少しづつ時間を短縮して確認した結果、４分くらいから実行環境が残るようになりました。

> 2024-12-29T20:12:02.134Z	2e6771ad-1054-4769-bee2-b595a826dbf7	INFO	body: 6

> 2024-12-29T20:16:02.123Z	2e6771ae-0054-4769-bee2-b595a826dbf7	INFO	body: 7

## まとめ

完全ではないですが、お手軽かつ、ほぼ無料でコールドスタート対策ができるかとも？と思い、記事にしてみました〜！
Python_itertoolsライブラリで使用頻度が高い標準関数10選

## Python_itertoolsライブラリで使用頻度が高い標準関数10選

- **用途**: 効率的でメモリ効率の良いイテレーションツール。
- 例: `itertools.chain`, `itertools.product`, `itertools.combinations`。

```python
import itertools
```

## 使用率が高い関数10選

1. **`itertools.chain(*iterables)`**: 複数のイテラブルを連結します。
    ```python
    from itertools import chain
    combined = chain([1, 2, 3], ['a', 'b', 'c'])
    print(list(combined))
    ```

2. **`itertools.product(*iterables, repeat=1)`**: 繰り返しを含む直積を計算します。
    ```python
    from itertools import product
    prod = product([1, 2], ['a', 'b'])
    print(list(prod))
    ```

3. **`itertools.permutations(iterable, r=None)`**: 長さrの順列を生成します。
    ```python
    from itertools import permutations
    perm = permutations([1, 2, 3], 2)
    print(list(perm))
    ```

4. **`itertools.combinations(iterable, r)`**: 長さrの組み合わせを生成します。
    ```python
    from itertools import combinations
    comb = combinations([1, 2, 3], 2)
    print(list(comb))
    ```

5. **`itertools.combinations_with_replacement(iterable, r)`**: 重複を許可した組み合わせを生成します。
    ```python
    from itertools import combinations_with_replacement
    comb_wr = combinations_with_replacement([1, 2, 3], 2)
    print(list(comb_wr))
    ```

6. **`itertools.accumulate(iterable, func=operator.add)`**: 累積結果を返します。
    ```python
    from itertools import accumulate
    import operator
    acc = accumulate([1, 2, 3, 4], operator.mul)
    print(list(acc))
    ```

7. **`itertools.cycle(iterable)`**: イテラブルの要素を無限に繰り返します。
    ```python
    from itertools import cycle
    cyc = cycle([1, 2, 3])
    for i, value in zip(range(6), cyc):
        print(value)
    ```

8. **`itertools.repeat(object, times=None)`**: オブジェクトを指定回数または無限に繰り返します。
    ```python
    from itertools import repeat
    rep = repeat('A', 3)
    print(list(rep))
    ```

9. **`itertools.islice(iterable, start, stop, step=1)`**: イテラブルの一部分をスライスします。
    ```python
    from itertools import islice
    sliced = islice(range(10), 2, 8, 2)
    print(list(sliced))
    ```

10. **`itertools.groupby(iterable, key=None)`**: 連続する同じキーの要素をグループ化します。
    ```python
    from itertools import groupby
    data = sorted([('A', 1), ('B', 2), ('A', 3), ('B', 4)], key=lambda x: x[0])
    for key, group in groupby(data, key=lambda x: x[0]):
        print(key, list(group))
研修振り返りとCityGML変換用shpデータの前処理方法について

1．PLATEAUアカデミー研修の内容
年末になってしまいましたが、11月に参加したPLATEAUアカデミー研修の内容を振り返ってみたいと思います。使用したソフトウェアはQGIS（CityGML変換用shpデータの準備）、FME（CityGMLデータの作成）、Blender（3次元モデルへのテクスチャー付与）の3点でした。研修の概要は下記の通りです。

　■1日目
　・FMEソフトウェア（shp→CityGML変換ツール）の概要
　・土地利用モデル/都市計画決定情報モデルのCityGML変換用shpデータの整備
　・FMEソフトウェアによる属性情報の付与方法

　■2日目
　・都市計画決定情報モデル/交通（道路）モデル/建築物モデルの整備
　・属性情報の付与方法（LOD1まで）
　・Blenderソフトウェアの概要

　■3日目
　・建築物モデルの整備（LOD2）
　・Blenderソフトウェアを用いた3次元建物データの生成
　・属性情報の付与方法、品質検査方法
 
2．CityGML変換用shpデータの準備
感想も含みますが、この記事では1日目に実施した「CityGML変換用shpデータの準備」について触れてみようと思います。主な内容については下記の通りです。

　①	原典資料の収集：デジタルデータと、その仕様を収集する
　②	幾何検査：収集したポリゴンデータが正しく作成されているかを検査する
　③	属性修正：収集したデータに属性を付加していく
　（その後、③のデータをFMEソフトウエアを用いてCity GMLへ変換する＠符号化処理）

 特に、③の属性修正の部分について、QGISの「属性の空間結合」や「属性をリファクタリング」ツールをフル活用しますので、この部分について復習してみました。

【①原典資料の収集＋②幾何検査】
まず、CityGMLデータを作成するためには、各自治体からデータを収集する必要があります。加えて、収集したデータに対して幾何検査を行わなければなりません。幾何検査とは、例えば「土地利用」のデータであれば、データが点や線ではなく、面（ポリゴン）であることを確認する、等の作業です。

研修では、幾何検査済のshpデータが展開されましたが、CityGMLへ変換する前のshpデータを生成するためには、この原典資料収集と幾何検査のプロセスに非常であり、その後のプロセスを考慮して加工しやすい状態にしておくことが極めて重要であると感じました。

【③属性修正】
土地利用、道路、建築物など、それぞれの地物名に対して、属性情報として最低限不可すべき情報が「3D都市モデル標準製品仕様書」では定められています。この属性修正のプロセスでは、幾何検査済のshpデータに対し、QGISのジオメトリツールを用いて属性情報を加工する必要がありました。

下記の図では、QGISのジオメトリツール「属性の空間結合」を使い、加工前の土地利用ポリゴンデータ（A:土地利用_幾何済）に対象地域の図郭データ（B:2次メッシュ図郭）を重ね、Bが有している図郭メッシュコードをAの属性情報に加える処理をしています。この処理をすることで、Aの各ポリゴンが重なっている図郭の番号が、属性情報に一括で付与されます。

![11スクリーンショット 2024-12-31 030724.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3970406/eabfbb16-def3-90e9-7c39-891f3f0010b7.png)

次に、上記の「属性の空間結合」処理で作成されたデータ（C：土地利用_幾何済_メッシュコード付与）を、QGISの「属性をリファクタリング」機能を用いてさらに加工します。下記の図では、別途、テンプレートデータとしてCityGMLに加工するためのフィールド名を持った空データ（D:luse_土地利用）が用意されています。

「属性をリファクタリング」の処理では、入力レイヤーにCをインプットし、フィールドを読み込むためのテンプレートレイヤーとしてDをインプットしておきます。読み込みボタンを押すことで、CityGMLに変換するためのフィールドが表示され、ソースの式の欄に必要な文字情報（県名や市町村名、データの整備年等）をインプットしてあげれば、CityGMLへ変換するための前処理が完了したshpファイルを生成することができます。

＊属性に文字情報を一括で入力する際には、属性情報としてインプットしたい文字をシングルクォーテーションで囲めばOKです。

![2 スクリーンショット 2024-12-31 025607.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3970406/ccef2378-07d6-2eae-6a89-8fc77e466dd7.png)

3．所感
CityGMLデータを生成するには、上記2．の作業をふまえてFMEソフトウェアでデータ変換を行う必要があるのですが、そこまでのQGISでの前処理が非常に重要なプロセスであると感じたので、記事にしてみました。ポイントとしては、QGISのジオメトリツールを存分に用いながら、いかに効率的に属性情報を整備するかだと思います。
特に、テンプレートを用意しての「属性をリファクタリング」の機能は、CityGMLデータ作成の前処理はもちろん、別のQGIS作業でも非常に有用であると感じました。
Jira Service Management：チーム管理対象プロジェクトでサブタスクは作成できない

## 今北産業

JSMのチーム管理対象プロジェクトで
サブタスクは
サポートされない

## 前書き

個人的なプロジェクトの管理をJira Service Management(以下JSM)でやろうと思い、プロジェクトを作成した。
JSMのプロジェクトは以下の通り「チーム管理対象プロジェクト」と「企業管理対象プロジェクト」の2種類存在する。

![スクリーンショット 2024-12-31 0.44.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526492/f54e0e54-4dad-9f79-4f4f-69919e65d210.png)

今回は"個人的な"プロジェクトだったので、複数プロジェクトを想定する必要はなく、チーム管理対象プロジェクトで良いと考えた。

個人的なタスクを整理していくうちに、タスクを入れ子構造にした方が都合が良かった。
このため、サブタスクを作成しようとしたが、作成する手段はないように思えた。
(「課題をリンク」がそれっぽく見えるが、あくまでリンクするだけであり、入れ子にはならない)

![スクリーンショット 2024-12-31 0.52.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526492/3d29753a-69aa-8044-ffac-092d04efc985.png)

このため、サブタスクを作成できないのかと調査が始まった。

## 製品ごと/プロジェクト種類ごとの挙動を確認

### Jira(企業管理対象プロジェクト)

プロジェクトテンプレートは作業管理 > 白紙プロジェクトを使用。

![スクリーンショット 2024-12-31 2.14.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526492/5d869d5c-4d16-e8cc-1680-257877993406.png)

作成後、親となる「parent task」を作成し、「+追加」から「子課題」を押下。

![スクリーンショット 2024-12-31 2.32.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526492/454e9779-843b-0931-3096-abdc3e5ad561.png)

課題タイプが「サブタスク」のタスクが作成可能。

![スクリーンショット 2024-12-31 2.34.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526492/676b629e-9f36-e80c-d15c-2dfaf794ab8a.png)

### Jira(チーム管理対象プロジェクト)

前述と同じくプロジェクトテンプレートは作業管理 > 白紙プロジェクトを使用。
同様の操作で子課題を作成可能であることを確認。

![スクリーンショット 2024-12-31 2.25.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526492/d33d746f-ddd2-8706-cfae-9ee59b3eb0d6.png)

### Jira Service Management(企業管理対象プロジェクト)

プロジェクトテンプレートはサービス管理 > 白紙プロジェクトを使用。
![スクリーンショット 2024-12-31 2.36.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526492/2b721f60-0267-bc38-1c07-bfce44ed5f54.png)

親となる「parent task」を作成して詳細を表示すると「サブタスクを作成」が存在する。

![スクリーンショット 2024-12-31 2.41.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526492/0e4caf6a-29f4-768f-1378-6eabc7c75fda.png)

### Jira Service Management(チーム管理対象プロジェクト)

前述と同じくプロジェクトテンプレートはサービス管理 > 白紙プロジェクトを使用。
同様の操作で詳細を表示すると「サブタスクを作成」が…***ない！***

![スクリーンショット 2024-12-31 2.46.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526492/bf498f1b-57de-ee64-203f-07731585fa90.png)

### 挙動まとめ

| Jira(企業) | Jira(チーム) | JSM(企業) | JSM(チーム) |
| ---- | ---- |  ---- |  ---- | 
| サブタスク可 | サブタスク可 | サブタスク可 | サブタスク**不可** |

*なんか一人だけハブられてる…そんなバカな…*

## Atlassian Communityで聞いてみた

Anser Acceptedのコメントまで確認してもらえたらと思いますが、**ハブ確定**でした。

https://community.atlassian.com/t5/Jira-Service-Management/cannot-create-sub-task-on-team-manage-project/qaq-p/2903302#U2904363

これは以下のJira Service Management CloudのBacklogに登録されており、解決の兆しはありません。

https://jira.atlassian.com/browse/JSDCLOUD-8623

## おわりに

「あーなんか以前できるの見たことがある」で下調べしないと本当に危険なので気をつけよう。