OmniAICreator/Qiita-1.07M huggingface dataset:
少数チームのコミュニケーション改革：エンジニアチームの効率化戦略

[人数半減の中で総開発量UPを実現させた秘訣 by エイチームコマーステック Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ateam-commerce-tech)

2記事目は、エイチームコマーステック フロントエンドエンジニアの 大沢（@kazzzzzz） が担当します！

今回は、とあるきっかけでエンジニアチームのコミュニケーションを見直したことでいくつかの成果を残すことができたので、事例共有という形で記事にいたします！最後まで読んでいただけたら幸いです！

## 改善のきっかけは組織再編

cyma事業の譲渡やエイチームグループ内での組織の再編が重なり、2023年3月にエイチームコマーステックのエンジニアの人数が半減以下になりました。

エンジニアチームとして、以前となるべく同水準の開発スピードを維持しようという目標に向けて効率化を進める中で、まずは普段のコミュニケーションに目を向けました。

## これまでのコミュニケーションの課題点

まず、他のエンジニアが今何をしているのかほとんどわからなため、相談や共有に背景の共有からしなければならず、ハードルが高いという課題がありました。

実装等で詰まった際、専門性は違えどせっかく他のエンジニアがいるのに自身で抱え込んでしまい、時間を浪費することもしばしばありました。また、他の人が何をしているか分からないため、手助けすべきかの判断も付きづらい状態でした。

また、エンジニア内の議論などは週一のMTGでまとめて取り扱っていたため、待ち時間が入ることもしばしばありました。

## 改革策1: 週次ミーティングの廃止

少人数化に伴い、エンジニアチームの週次ミーティングの廃止しました。

週次ミーティングでやっていたことは、

- 共有
- 議論
- 振り返り

です。

この週次ミーティングは、会議を一か所に集中させることで開発業務などにまとまった時間が充てられるようにするために始まったものでしたが、少人数だと相談の待ち時間となってしまうデメリットの方が上回ると考えたためです。

代わりに、毎日の朝会で共有や議論を積極的に行うことで、週次ミーティングを行わなくても議論が行われるような設計に変更しました。これにより話し合いがよりタイムリーに行われるようになり、改善活動のサイクルがかなり早まりました。

振り返りついては施策完了後に他の職種も交えて実施するし、より効果的なものとなりました。

## 改革策2: 朝会を活用した新しいコミュニケーション

次に取り組んだのは、毎日のエンジニア朝会の活用です。

エンジニア朝会では、

- エラー確認
- メトリクス確認
- 共有

が行われていました。

ここに追加で、議論と雑談タイムを導入しました。

議論ではこれまでの週次ミーティングで扱っていた議論を行い、雑談タイムではカジュアルな時間を通じてメンバー間の関係が強化され、業務に関する相談やアイディアの共有も自然と行われるようになりました。

雑談タイムの「そういえば...」みたいな話し始めから、有意義な議論が始まることもよくありました。

また、エラー確認についてはより効果的に行えるようにアップデートしました。具体的なアップデート内容は他記事で紹介しておりますのでよければこちらもご覧ください！ -> 12/15公開

## 改革策3: タスクの可視化

![XxIhoj0kIoxbkzP1701182500_1701182585.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305522/37bd8f90-ff62-0da8-4e9a-029f2d26bf51.png)

最後に目をつけたのは、タスク管理の可視化です。

GitLabのissues boardを活用して、誰がどのタスクを担当しているか、その進捗状況をラベルを用いて一目で確認できるようにしました。

ラベルは、

- 未着手（優先度低）
- 未着手（優先度高）
- 開発中
- レビュー中

の4段階に留め、お互いの状況が最低限わかる状態を作りました。

そして、毎日のエンジニア朝会でこの board を眺めるコンテンツを組み込みました。お互い進捗を確認しあったり、board を眺めることで軽めの相談を思い出して即時解決することも多々あります。特に補足事項がなければ1分以内で終わります。

## まとめ

まず最初の改善として、適切なタイミングで相談や議論行えるように会議体や見える情報を見直しました。

それによって、個々の能力にプラスして、チームとして協力し成果を最大化するための環境を作ることができました。改めて思うのは、組織の大きさや形によって最適なコミュニケーション設計は異なると思います。組織に何か変化が起こる場合は、その都度見直すことが重要だと感じました。

また、コミュニケーション改善をしたことで、前段階での相談がしやすくなり、実装等の出戻りが少なくなるなどの副次的な効果も現れ、いい事づくめでした！

次回カレンダーは、

[副業エンジニアの力を引き出す：効果的な付き合い方で大きな成果を！](https://qiita.com/kazzzzzz/items/9cf095be507fabd3af5c)

です！

もしご興味がありましたら次回記事もご購読いただければと思います！よろしくお願い致します！
画像やCSSの管理、"Asset"

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の7日目の記事です。

## 画像やCSSの管理、"Asset"

[Asset](https://symfony.com/doc/current/components/asset.html)は、画像やCSSなどのファイルのバージョニングやURLの取得を行うコンポーネントです。

### インストール

```shell
composer require symfony/asset
```

### URLの取得
`Package` オブジェクトを作成し、`getUrl()`することで、ルートパスからのURLを取得できます。

```php
use Symfony\Component\Asset\Package;
use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;

$package = new Package(new EmptyVersionStrategy());
$url = $package->getUrl('/images/hoge.png');
// /images/hoge.png

```

### バージョニング

上記だとただファイルのURLを取得しただけですが、`Package`オブジェクトに渡す`VersionStrategy`クラスにより、バージョニングすることができます。ブラウザのキャッシュ対策に有効です。

- EmptyVersionStrategy: バージョニングしない
- StaticVersionStrategy: 指定した文字列でバージョニング
- JsonManifestVersionStrategy: バージョニングされたJSONマニフェストを読み込む

#### StaticVersionStrategy
```php
use Symfony\Component\Asset\Package;
use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy;

$package = new Package(new StaticVersionStrategy('v3'));
$url = $package->getUrl('/images/hoge.png');
// /images/hoge.png?v3

$package = new Package(new StaticVersionStrategy('v3'));
$url = $package->getUrl('/images/hoge.png', '%s?version=%s);
// /images/hoge.png?version=v3

```

#### JsonManifestVersionStrategy
```json:manifest.json
{
    "js/hoge.js": "build/js/hoge.1234567890.js"
}
```

```php
use Symfony\Component\Asset\Package;
use Symfony\Component\Asset\VersionStrategy\JsonManifestVersionStrategy;

$package = new Package(new JsonManifestVersionStrategy('./manifest.json'));
$url = $package->getUrl('/js/hoge.js');
// build/js/hoge.1234567890.js
```

また、`VersionStrategyInterface`を実装することで、カスタムのバージョニングを作ることもできます。

```php
use Symfony\Component\Asset\VersionStrategy\VersionStrategyInterface;

class DateVersionStrategy implements VersionStrategyInterface
{
    private \DateTimeInterface $version;

    public function __construct()
    {
        $this->version = date('Ymd');
    }

    public function getVersion(string $path): \DateTimeInterface
    {
        return $this->version;
    }

    public function applyVersion(string $path): string
    {
        return sprintf('%s?v=%s', $path, $this->getVersion($path));
    }
}
```

### 絶対パスによる取得

通常は相対パスですが、`UrlPackage`を使うことで絶対パスにもできます。

```php
use Symfony\Component\Asset\UrlPackage;
use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy;

$package = new UrlPackage(
    'https://qiita.com',
    new StaticVersionStrategy('v3')
);
$url = $package->getUrl('/images/hoge.png');
// https://qiita.com/images/hoge.png?v3

```

## まとめ
今回は`Asset`をご紹介しました。画像やCSSのキャッシュ対策にとても有効なコンポーネントになっていますが、後日紹介するあるコンポーネントと組み合わることで真価を発揮します。
GitHub Copilotを業務で使った感想


この記事は カオナビ Advent Calendar 2023 9日目です。

https://qiita.com/advent-calendar/2023/kaonavi

# こんにちは

カオナビでサーバサイドエンジニアとして働いている奥津といいます。

Advent Calendar 2023 1日目の、[CTO松下さんの記事](https://zenn.dev/matsukaz/articles/04c3ee46420fbc#github-copilot%E3%81%AE%E5%B0%8E%E5%85%A5)にある通り、
業務でGitHub Copilotが使用可能になりました！！

今日は、GitHub Copilot使ってみての感想を書いてみようと思います。

# はじめに、GitHub Copilotへの関心

人気のPodcast [fukabori.fmの100回目記念の公開収録](https://connpass.com/event/288913/)を見に行った際、  
質問コーナーでゲストのt_wadaさんが「Copilotがあれば(酒で）記憶が無くてもコードが書ける」とおっしゃっていたので興味がありました。

ただ、業務で使うのはまだ先なのかな〜と思っていたのですが
思ったより早く業務で使うことができるようになったので(社内で調整や検証などしてくださった皆様ありがとうございます！）
さっそく使ってみました。

# 使ってみる

## 導入

私は業務では、IDEとしてPhpStormを使っています。
PhpStormにGitHub Copilotのプラグインを入れて、GitHubログインすると使えました。
(※会社で契約しているGitHub Copilot for Businessを個人のGitHubアカウントで使える権限を付与してもらっている状態です）


## 使い方を学ぶ

参考と以下を見ました。
https://ai-native-development.gitbook.io/docs/v/ja/

どうやら使い方として以下のようなものがあるらしいです。

- コード補完
- コメントからコードを生成
- コードからコメントの生成
- クイックQA
- 正規表現
- プログラミング言語間の翻訳
- タイプヒンティング
- 構造化データからのオブジェクト生成
- コードからドキュメントへ

## 実際に業務で使ってみたこと （コード内容はサンプルです）

### コード補完

#### 入力中のコード補完

コードの一部を入力するだけで補足してくれます。

- 自分で以下だけ書きます。

```
class Item
{
    private ?int $item_id;
    private ?int $item_name;
```

- `private function` まで書いたあとの、GitHub Copilotからの提案が以下です。

![3.Copilotの提案.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213395/26b6e8cb-21f7-e670-916c-bd114bd5c0e5.png)

- 提案内容が思ったとおりであればTab押せば、コードに反映されます。

#### 提案を取得する

クラス全体の提案を取得することもできます。
- コードを開いた状態にします。
- Tool Windowsで GitHub Copilotを表示します。
- Refreshを押します。

![4Refreshを押す.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213395/afb8ece9-babd-a48f-24fe-b7dadaabe28d.png)

提案が一覧で出ます。

![5提案が一覧ででる.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213395/a878da38-1b14-4129-76de-31fdf6e66a2c.png)

- 気に入った提案があれば、[Accept solution]を押すと、コードに反映されます。


### コメントからコードを生成

- 自分で以下のコメントを書きます。

```
// refresh処理
```

- 改行したときのGitHub Copilotからの提案

![refresh提案.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213395/c7a88512-2f47-5100-fd22-7f9b88bdfbc8.png)

※↑上手く生成された時の例。コード生成されないこともありました。

- 提案内容が思ったとおりであればTab押せば、コードに反映されます。



# 感想

- 単純なコードを書く時にはコード補完がとても役に立ちます！
- コメントからコード生成はまだ使いこなせていないので、コメント力を鍛える必要があります。
- テストコード作成はまだしていないので、テストコード生成は試してみたいと思っています。
- ガイドを見て、他にももっと便利な使い方ができないか試行錯誤してみようと思います。

# 参考リンク

https://ai-native-development.gitbook.io/docs/v/ja/
https://speakerdeck.com/etaroid/sheng-cheng-aidesisutemukai-fa-hadoubian-waruka


#
https://corp.kaonavi.jp/recruit/recruitment/
意外と知らない!? SQLAlchemy + SQLServerの落とし穴3選

## この記事について
アイレット株式会社Advent Calendar2023 4日目の記事です！

私はこれまで主にMySQLを触ってきたのですが、Python + SQLServerで開発する機会がありましたので、そこでハマったポイントを3つ紹介していきます。
私自身、まだまだ経験の浅いエンジニアなので、正しくない内容もあるかもしれませんが、ご容赦ください。
## SQLAlchemyとは
Pythonでよく使われているORM(Object Relational Mapper)です。
ORMとは、簡単に言うと、テーブルとクラスを対応づけて、データ取得・変更処理などを行う存在のことです。
[SQLAlchemy公式ドキュメント](https://www.sqlalchemy.org/)

それでは、ハマったポイントについて紹介していきます。
## 1. カラムの照合順序名がSQLServer独自のものになる
開発を進めていく中で、エンコードはUTF-8にしたはずなのに、varchar型のカラムの日本語が文字化けするという事象に見舞われました。
調べた結果、SQLServerでは、char/varcharについては、そのカラムに適用される照合順序に応じた文字コードが採用されることがわかりました。
そこで、私は下記記事を参考に、テーブルの照合順序を変更し、さらにカラムもnvarchar型にすることで、日本語文字化けを解消することができました。
[SQLServer照合順序確認方法](https://qiita.com/makoto8048/items/41c7de2ce835027508aa)
[SQLServerデータベースの照合順序を変更する](https://code.eaglet.jp/sqlserver/%E3%80%90sqlserver%E3%80%91%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E7%85%A7%E5%90%88%E9%A0%86%E5%BA%8F%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B/)
## datetime型がミリ秒まで表示される
SQLServerでは、仕様として、datetime型がミリ秒まで表示されるようになっているらしいです、
最初は、RDSのパラメータグループを変更すれば直ると思っていましたが、調べても全く出てこず、、結局、開発では日付比較などはやらなかったので、直さなくてもいいとなりました。
もし解決法を知っている方がいらっしゃいましたら、教えてください！
## モデルでのバリデーションがうまく機能しない
SQLAlchemy公式ドキュメントにも書かれているのですが、SQLServer、特にpyodbcを使用していると、思わぬ動作を起こす場合があるようです、、私は一度もうまく機能しませんでした。
ですので、私の対処法としては、別途バリデーションするコードを実装しました。
FastAPIも使用していたので、新しくschemaを作成し、テーブルに追加する前のdict型のデータをバリデーションする形にしました。
[Pydanticを使用したDataframeのバリデーション](https://www.inwt-statistics.com/blog/pandas-dataframe-validation-with-pydantic)
[SQLServer使用時のバリデーションの挙動](https://docs.sqlalchemy.org/en/20/core/type_basics.html#sqlalchemy.types.Unicode.__init__:~:text=Some%20database%20backends,well%20as%20cx_Oracle.)
## おわりに
ここまで読んでくださりありがとうございます。初めてのブログ投稿ということもあり、わかりにくい部分もたくさんあるかと思います。質問やご意見など、どしどし送っていただけると幸いです。
システム開発会社が生成AIを利用するときの注意点


この記事を書くために、Googleで「生成AI 2023」と検索しました。
面白い記事がたくさん出てきますよね。
世間には生成AIへの期待と幻滅、その先の展望が渦巻いていて、鍋をひっくり返したような騒ぎです。
でも個人的な体感として、この騒ぎは半年前より沈静化していますし、あと少しで消えてしまうのだと思います。
下記は、冒頭の検索でトップヒットしたガートナーの記事です。

https://www.gartner.co.jp/ja/newsroom/press-releases/pr-20231012

記事中では生成AIという面白い技術がどのように成熟し、社会へ適用されていくのかが考察されています。
ひっくり返った鍋はコンロに置きなおされますし、飛び出した材料は改めて投入され、安全な味付けをされて、皆で食べられるようになるでしょう。
これを書いている今日、2023年11月13日は、まだ鍋の置き方を工夫している段階でしょうか。

さて、私はシステム開発会社の法務に所属しています。
生成AIはシステム開発業務の中にも存在しています。私は開発者ではありませんが、受け身で「生成AIが安全に適用される社会」を待つだけというわけにはいきません。
過渡期の現在であっても、開発者が社会通念上許される形で生成AIを活用できる環境を整備する必要があります。

システム開発会社が生成AIを利用するときの注意点については、すでに様々な情報が出ています。
ご覧になったことがある方は、拍子抜けかもしれません。
既存のソフトやクラウドサービスを使うときの注意点と、ほとんど変わらないためです。
たとえばこんなところです。

・会社の許可を得て使用すること。
・信頼できるところが提供しているものを使うこと。
・個人情報や機密情報を軽率にインプットしないこと。
・意図せぬ著作権侵害の可能性に留意すること。
・安全に利用するために、使用方法や成果物のチェックを行うこと。

上記を確実に遂行するためのナレッジを蓄積し、精度を向上させることが重要です。
そのノウハウは、生成AI以外の新技術が登場したときもきっと活躍することでしょう。

最後に、生成AIに書いてもらった「システム開発会社が生成AIを利用するときの注意点」を置いておきます。
ここまでお読みいただき、ありがとうございました。
来年が皆様と生成AIにとって幸福な一年になりますように！


:::note info
ー※以下は「Google Bard」が生成したコンテンツです。

システム開発会社が生成AIを利用する際には、以下の点に注意が必要です。

* **著作権**

生成AIによって生成されたコンテンツは、著作権法上の著作物として保護される可能性があります。そのため、生成AIを利用したシステム開発を行う際には、著作権侵害に注意が必要です。

例えば、既存の著作物を入力して生成AIを利用した場合、入力行為は複製権侵害に当たる可能性があります。また、生成AIによって生成されたコンテンツを第三者に提供する際には、著作権者の許諾が必要になる場合もあります。

* **個人情報保護**

生成AIを利用したシステム開発においては、個人情報を取り扱う可能性もあります。そのため、個人情報保護法に基づく適切な対応が必要です。

例えば、生成AIに個人情報を入力して利用する場合、その個人情報の利用目的や第三者提供の有無を明確にする必要があります。また、生成AIによって生成された個人情報を含むコンテンツを第三者に提供する際には、適切なセキュリティ対策を講じる必要があります。

* **安全性**

生成AIは、誤った情報を生成したり、差別的な表現を生成したりする可能性もあります。そのため、生成AIの安全性を確保するための対策が必要です。

例えば、生成AIによって生成されたコンテンツを人間が確認するといった、二重チェックの体制を整備する必要があります。また、生成AIの誤りを検出するためのシステムを導入することも検討できます。

具体的には、以下のような対策が考えられます。

* **著作権侵害防止のための対策**

生成AIに入力するデータの選定を慎重に行う
生成AIによって生成されたコンテンツを人間が確認する
生成AIの著作権侵害に関する注意喚起を行う


* **個人情報保護のための対策**

生成AIに入力する個人情報の範囲を限定する
生成AIによって生成された個人情報を含むコンテンツの第三者提供について、利用者の同意を得る
生成AIによって生成された個人情報を含むコンテンツを暗号化する

* **安全性確保のための対策**

生成AIによる誤りを検出するためのシステムを導入する
生成AIの利用状況を監視する

システム開発会社は、生成AIの利用に伴うリスクを十分に理解した上で、適切な対策を講じる必要があります。

:::
FigmaでCSSを表示させる方法



## ページとは?

figmaにおけるページとは「画面」の事

左上のメニューからページを追加することが可能。


![スクリーンショット 2023-12-01 093526.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1678228/4e60e78f-1e4a-d066-57d2-a5c8a4f09354.png)


## DevモードでCSSを表示させる

Figmaの左上には「Dev Mode」と呼ばれるモードボタンが存在する。

![スクリーンショット 2023-12-01 093938.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1678228/c5ac786a-0b4c-777b-4f07-af68b5c97dd8.png)

これを押下することで、 **実際にCSSで実装するとどのようなコードになるのかが明記される。**


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1678228/25c549da-8cfd-4e8c-18f5-951d523330c6.png)


Figmaはこの機能がデフォルトで表示されている

必ずしもこれを移植すればよいというわけではないが、エンジニアが実装する際の参考として使用できる。
Qiita バッチ ,  2023 Calendar２５完遂

Qiita バッチ 
https://qiita.com/badges
最近変更になった。

<この項は書きかけです。順次追記します。>
This article is not completed. I will add some words in order.

# Advent Calendar 2023 記事投稿
25件までひとつづつバッチが増えていくしくみになっている。
202312040930 25個目のバッチをいただきました。

# 獲得したContribution1~
初めてのContribution!, 5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200, 250, 300, 350, 400, 450
全部達成
# 獲得したContribution500~
全部達成。
# 獲得したContribution10,000~
25000まで達成。
# 連続投稿 Weekly
1から50まで。全部達成。
# 連続投稿 Monthly
1から50まで。現在４２。
# 連続投稿 Yearly
現在７まで達成。
# 
＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 URL変更。20231204
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
vlocity のエラー

[Vlocityのまとめに戻る](https://qiita.com/Keiji_otsubo/items/65d7d1f347a4b2996cb3)


+ [vlocity action: カードに埋め込まれたオムニスクリプトが、Salesforce の初回クリック時にロードされない](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007RfT2N)

:::note
If an OmniScript embedded in a card is not loading the first time you click on it in Salesforce, there could be several reasons for this behavior. Here are some troubleshooting steps to identify and resolve the issue:

1.Open the browser developer console. Look for any error messages or warnings that might provide insights into what's causing the issue.

2. Ensure that your OmniScript is configured correctly. Check the script's steps, variables, and any logic for errors. Ensure that all necessary resources are properly referenced.

3. If your OmniScript uses custom JavaScript, ensure there are no errors in the scripts. Check the console for JavaScript errors that might be preventing the OmniScript from loading.

4. If you are embedding the OmniScript in a card, make sure the card is configured correctly. Ensure that the card references the correct OmniScript and that there are no errors in the card's configuration.

5. Check if there are any issues with the user's session or authentication. If the user is not authenticated properly, it might impact the ability to load the OmniScript.

カードに埋め込まれた OmniScript が、Salesforce で初めてクリックしたときに読み込まれない場合、この動作にはいくつかの理由が考えられます。問題を特定して解決するためのトラブルシューティング手順をいくつか示します。

1.ブラウザの開発者コンソールを開きます。問題の原因を知ることができるエラー メッセージや警告を探します。

2. OmniScript が正しく設定されていることを確認します。スクリプトのステップ、変数、ロジックにエラーがないか確認してください。必要なリソースがすべて適切に参照されていることを確認してください。

3. OmniScript でカスタム JavaScript を使用している場合は、スクリプトにエラーがないことを確認してください。OmniScript のロードを妨げている可能性がある JavaScript エラーがないかコンソールを確認してください。

4. OmniScript をカードに埋め込んでいる場合は、カードが正しく設定されていることを確認してください。カードが正しい OmniScript を参照していること、およびカードの設定にエラーがないことを確認してください。

5. ユーザーのセッションまたは認証に問題があるかどうかを確認します。ユーザーが適切に認証されていない場合、OmniScript をロードする機能に影響を与える可能性があります。
:::

# the vlocity_ins__DRMapItem__c field was not in production and I successfully deployed it and it did not resolve the error,

+ [I tried to deploy vlocity components from a QA sandbox to production and I get the NVALID_TYPE object error: ](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000Kg5Mb)

:::note
Review the descriptions of Omnistudio for Managed Packages sObjects, and which objects you must grant read access to so that customers can view Omnistudio components. 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/304a687a-3089-1218-89ab-b11dca78f1c0.png)

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

 the problem was that the user with whom I was trying to deploy to production did not have an Omnistudio license assigned.
:::
RailsでCSVインポートとエクスポート機能を実装

# 0. はじめに
Railsで基本的なCSVインポートとエクスポートを行う

# 1. 事前準備
```: config/application.rb
require "csv"
```

```:app/views/users/index.html.erb
<%= form_with url: import_path do |form| %>
  <%= form.file_field :file, accept: "text/csv" %>
  <%= form.submit "CSVインポート" %>
<% end %>
```
# 2. CSVインポート
```:app/controllers/import_controller.rb
class ImportController < ApplicationController
  def create
    User.import_csv(file: params[:file]) if params[:file].present?
    redirect_to users_path
  end
end
```

```:app/models/user.rb
class User < ApplicationRecord
  CSV_COLUMNS = %w[name age height].freeze
 
  def self.import_csv(file:)
    # トランザクション（CSVインポートの途中でエラーが出た場合はロールバック）
    User.transaction do
      CSV.foreach(file.path, headers: true) do |row|
        create!(row.to_h.slice(*CSV_COLUMNS))
      end
    end
  end
end
```

ここでN+1問題の解決
以下のgemを使う

https://github.com/zdennis/activerecord-import
```
gem 'activerecord-import'
```

```:app/models/user.rb
class User < ApplicationRecord
  CSV_COLUMNS = %w[name age height].freeze

  def self.import_csv(file:)
    list = []
    CSV.foreach(file.path, headers: true) do |row|
      list << row.to_h.slice(*CSV_COLUMNS)
    end
    User.import!(list)
  end
end
```

# 3. CSVエクスポート
```:app/views/users/index.html.erb
<%= link_to "CSVエクスポート", users_path(format: :csv) %>
```

```:app/controllers/users_controller.rb
class UsersController < ApplicationController
  def index
    @users = User.order(id: :asc)
    
    respond_to do |format|
      format.html
      format.csv do
        send_data(@users.generate_csv, filename: "users.csv")
      end
    end
  end
end
```

```:app/models/user.rb
require "csv"
CSV_COLUMNS = %w[name age height]

class User < ApplicationRecord
  def self.generate_csv
    CSV.generate do |csv|
      csv << CSV_COLUMNS
      all.each do |user|
        csv << CSV_COLUMNS.map { |col| user.send(col) }
      end
    end
  end
end

```
同一リージョンにあるAzureサービスからStorage Accountへのネットワークルールの制限について

## はじめに
[LIGTHzアドベントカレンダー 2023](https://qiita.com/advent-calendar/2023/lightz)の4日目の記事です。
この記事では、同一リージョンに配置してあるAzureサービス（Functions...etc)からStorage Accountへアクセスする際のネットワークルールの制限について記載します。

## やりたかったこと
以下の条件にて、Azure Functionsで処理したデータをAzure Blob Storageへ保存したかったが、blobへのアクセスがブロックされてしまいできませんでした。

- Azure FunctionsとStorage Accountは同一リージョンに配置
- Azure FunctionsのパブリックIPアドレス(※)からのみアクセスを許可するようにStorage Accountのネットワークを制限

※ IPアドレスは[こちらの方法](https://learn.microsoft.com/ja-jp/azure/azure-functions/ip-addresses?tabs=portal#find-outbound-ip-addresses)で確認


## 原因
[こちらのサイト](https://learn.microsoft.com/ja-jp/azure/storage/common/storage-network-security?tabs=azure-portal#restrictions-for-ip-network-rules)にもある通り、

> ストレージ アカウントと同じリージョンでデプロイされたサービスでは、プライベート Azure IP アドレスが通信に使用されます。 そのため、特定の Azure サービスへのアクセスを、そのパブリック送信 IP アドレスの範囲に基づいて制限することはできません。

とのこと。
別リージョンであればIP制限できそうだが、ネットワーク遅延も生じると思いやめました。

## 対応
Azure Functionsからvnet経由で通信するようにし、左記ネットワークからのみアクセスを受け付けるようにStorage Accounのネットワークを制限しました。
apt update error(4)

Ubuntuを導入してapt update, apt upgradeで困ったことがいくつかあります。

<この項は書きかけです。順次追記します。>
This article is not completed. I will add some words in order.

# １　apt upgrade エラー
apt updateはうまくいく。
apt upgrade でエラーが出る。

理由はわからない。

結果としては、wgetでファイルをダウンロードして、
適切な場所に入れて、オプションコマンドを実行すれば大丈夫。

# 2 network error
Intel NICでエラーが出て、ネットワークにつながらない。
結果として、apt updateはできない。

# 3 apt update error
sources.list
の公式サイト以外を登録するとよい。

DNXの設定変更ではうまくいかなかった。

公式サイトが、アクセスが多すぎてダメなのかも。

wetでgzファイルはダウンロードできるのに。
どこにおいて、どういうオプションつければいいかがわかっていない。

## at docker
dockerでもubuntuだとダメでdebianだとエラーにならなかった。
たとえば、公式gcc dockerは、debianで、エラーにならず。
debianの影が薄いという方がおみえになるらしい。
開発者にとっては、頼りになるのはDebian

# 参考資料
2023 Countdown Calendar 主催・参加一覧
https://qiita.com/kaizen_nagoya/items/c4c2f08ac97f38d08543

CountDownCalendar月間　いいねをいただいた記事群　views　順
https://qiita.com/kaizen_nagoya/items/583c5cbc225dac23398a

Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.
### 文書履歴(document history)
ver. 0.01 URL変更。20231204
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
AI-102試験対策のまとめ「Azure AI Video Indexerで大容量ビデオのインデックス作成時の注意点」

## はじめに
Azure AI Engineer Associate(AI-102)取得に向けた勉強でまとめた内容を本記事では投稿しています。
試験範囲の内容を私が勉強していく中で、
・忘れてしまっていた内容
・他の知識と絡めて理解した方が良い内容
・Microsoft Learnの読解に苦戦した内容
などをできるだけ分かりやすく簡潔にまとめることを意識しています。
Azureの勉強を一から始め、AI-102取得を目指している方の参考になれば幸いです。
※本記事の内容が必ず試験に出るわけではないこと、ご注意ください
※勉強しながら投稿しているため、追加で学んだことがあれば随時投稿内容を更新します。

## 試験対策のまとめ
### Azure AI Video Indexerで大容量ビデオのインデックス作成時の注意点
* ビデオのアップロード方法
    | アップロード方法 | ファイルサイズの制限 |
    | --- | --- | 
    | URL | 30GB |
    | ファイルをバイト配列として送信 | 2GB |

    ⇒2GBより大きいサイズのビデオでインデックスを作成する場合はURLを使用する必要がある  
例：OneDriveにビデオを保存してURLでアップロード

#### **OneDriveに保存されたビデオのインデックス作成方法**
1. [Azure AI Video Indexer Webサイト](https://www.videoindexer.ai/account/login)にサインイン
1. 「アップロード」を選択
1. 「ファイルのURLを入力」を選択
1. WebブラウザでOneDrive上にあるビデオ/オーディオファイルに移動
1. インデックスを作成したいファイルを選択
1. 上部の「埋め込み」を選択
1. 右クリックして「生成」を選択し、埋め込みURLを生成
1. 埋め込みコードをコピーし、キーを含むURL部分のみを抽出(下記例)
    ```
    https://onedrive.live.com/embed?cid=5BC591B7C713B04F&resid=5DC518B6B713C40F%2110126&authkey=HnsodidN_50oA3lLfk
    ```
1. 「embed」を「download」に置き換える(下記例)
    ```
    https://onedrive.live.com/download?cid=5BC591B7C713B04F&resid=5DC518B6B713C40F%2110126&authkey=HnsodidN_50oA3lLfk
    ```
1. Azure AI Video Indexer WebサイトのURLフィールドにこのURLを入力
1. ビデオがOneDriveからダウンロードされる
1. ダウンロード後、ビデオのインデックス作成と分析が開始
1. 分析後、インデックス付けされたビデオへのリンクが記載された電子メールが届く  
    ※メールには見つかったものの簡単な説明(例：人物/トピック/OCR)も含まれる

* 参考
    - https://learn.microsoft.com/ja-jp/azure/azure-video-indexer/considerations-when-use-at-scale
    - https://learn.microsoft.com/ja-jp/azure/azure-video-indexer/odrv-download?tabs=With-classic-account

## 次の試験対策のまとめ
* **AI-102試験対策のまとめ「Smart Labelerによる迅速なタグ付け」**

https://qiita.com/fsd-jume/items/a0ce299083fa0cda92b8

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/65aba5d5514e023fd66d
git勉強

### git チートシート

https://www.atlassian.com/ja/git/tutorials/atlassian-git-cheatsheet

### pushする前に確認すること

https://qiita.com/kiyoshi999/items/bf76db200f6126089476


### ブランチの切り替えや作成はswitchを使おう

https://snowsystem.net/git/git-command/git-switch/amp/

### ブランチ作成からマージされるまで

https://qiita.com/ucan-lab/items/47967757e688e9dc42db

ローカルブランチ作成にはプロジェクトごとに命名ルールのようなものもあるらしいので確認しておくのが吉かも


mainブランチはどんどん更新されていく。
開発が終わってからすぐプルリクエストをだすとmainとのコンフリクトが起こってしまう可能性があるので、こまめにgit rebaseして最新を取り込むようにしたほうがいいらきい

### git mergeやmerge前に戻すgit reset

https://codelikes.com/git-merge/?amp=1


### git mergeとrebase,fast-forwardがわかりやすい

https://backlog.com/ja/git-tutorial/stepup/04/

### gitコマンド　オプション

https://qiita.com/chihiro/items/e178e45a7fd5a2fb4599

こちらがわかりやすい

### git status

こちらがわかりやすい

https://www.sejuku.net/blog/71857

### git log
コミットの履歴を見ることができる
終了はq
wslでnerves その38

# 概要
wsl(wsl2じゃない)でnervesやってみる。
qemu(x86_64エミュレータ、ラズパイじゃない)でやってみた。
生成したnerves_livebook.imgを、QEMUで起動してテストしてみた。
linux周りを、調査する。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/33224f77-2e59-9511-3c9b-bc4c8e6d72d7.png)

# 実行結果

```
$ Nerves.Runtime.KV.get_all


%{
  "a.nerves_fw_application_part0_devpath" => "/dev/rootdisk0p4",
  "a.nerves_fw_application_part0_fstype" => "ext4",
  "a.nerves_fw_application_part0_target" => "/root",
  "a.nerves_fw_architecture" => "x86_64",
  "a.nerves_fw_author" => "https://github.com/nerves-livebook/nerves_livebook/graphs/contributors",
  "a.nerves_fw_description" => "Develop on embedded devices with Livebook and Nerves",
  "a.nerves_fw_misc" => "",
  "a.nerves_fw_platform" => "x86_64",
  "a.nerves_fw_product" => "nerves_livebook",
  "a.nerves_fw_uuid" => "3a89c283-9a44-57d2-0509-2f4115934675",
  "a.nerves_fw_vcs_identifier" => "",
  "a.nerves_fw_version" => "0.11.0",
  "nerves_fw_active" => "a",
  "nerves_fw_devpath" => "/dev/rootdisk0",
  "nerves_serial_number" => "",
  "wifi_force" => "",
  "wifi_passphrase" => "",
  "wifi_ssid" => ""
}

$ VintageNet.info()

VintageNet 0.13.5

All interfaces:       ["eth0", "lo"]
Available interfaces: ["eth0"]

Interface eth0
  Type: VintageNetEthernet
  Present: true
  State: :configured (0:16:12)
  Connection: :internet (0:16:07)
  Addresses: fec0::5054:ff:fe12:3456/64, fe80::5054:ff:fe12:3456/64, 10.0.2.15/24
  MAC Address: "52:54:00:12:34:56"
  Configuration:
    %{type: VintageNetEthernet, ipv4: %{method: :dhcp}}


$ Toolshed.ifconfig

lo: flags=[:up, :loopback, :running]
    inet 127.0.0.1  netmask 255.0.0.0
    inet ::1  netmask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
    hwaddr 00:00:00:00:00:00

eth0: flags=[:up, :broadcast, :running, :multicast]
    inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
    inet fec0::5054:ff:fe12:3456  netmask ffff:ffff:ffff:ffff::
    inet fe80::5054:ff:fe12:3456  netmask ffff:ffff:ffff:ffff::
    hwaddr 52:54:00:12:34:56

$ Toolshed.cmd("df")

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                37632     37632         0 100% /
devtmpfs                  1024         4      1020   0% /dev
tmpfs                   404068         4    404064   0% /tmp
tmpfs                   202036         4    202032   0% /run
/dev/rootdisk0p1         15477         3     15474   0% /boot/grub
/dev/rootdisk0p4        243631      1188    225240   1% /root


```

以上。
Mail2Xのまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)



+ [Mail2X コンポーネント:Quip](https://quip.com/mBiKAqI5vFTd)
+ [Mail2Xで件名の文字を取り込む方法](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000PeyA3SAJ)
+ [Mail2Xを利用するためにsandboxで検証したい](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T5hJY)


# エラー

+ [Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, record type missing for: 顧客／取引先: []](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T2sr5)

:::note
この処理を実行しているユーザのプロファイルを見てレコードタイプへのアクセス権があるかを確認してみてください。
:::

+ [【未解決】Insert failed. First exception on row 0; first error: INVALID_FIELD_FOR_INSERT_UPDATE, 法人顧客情報は個人顧客情報項目「PersonMobilePhone」を使用できません: [PersonMobilePhone]](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000NODN)

+ [Apex で「Regex too complicated (正規表現が複雑すぎます)」というエラーが発生する](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Yw0J5)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/75a87e01-bf66-a0a7-b715-ee14dfbf8084.png)

:::note
テンプレート内の「メールアドレス ：」の後続に半角スペースが入って、反響情報が記載されます。

例）メールアドレス　　　 ： test01@gmail.com

やはりスペースが原因だったようです。
:::

+ [特定のポータルのみ、mail2x での取り込みはできません。Salesforceに届いていることは確認済みですが、エラーレコードも作成されず、取り込めない原因は不明です。](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000J6iSv)
+ [普段は特に問題もなくメールを取り込めておりますが、体感で20～30通に1回、 メールは受信できているのに指定したオブジェクトにレコードが作成されないという事象が発生しております。 ](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000PVu8j)


# インストールできない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/1c67c4be-1d9a-a59c-8366-ca05269f7547.png)


インストールした記憶はなかったけど、入ってました...


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/04c1d64e-49c0-86f9-7aae-467f436ef0cf.png)


# 未解決

+ [Mail2Xの設定](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgzBeSAJ)


# 参考資料

+ [外部システムのメールからSalesforceにデータを作成する方法](https://tech-tech.nddhq.co.jp/2022/12/15/post-2222/)
Oracle Cloud:  Network Path Analyzerを使ってみてみた

ネットワーク・パス・アナライザ(NPA)は統合された直感的な機能で、接続性に影響する仮想ネットワーク構成の問題を識別するために使用できます。NPAは、ネットワーク構成を収集および分析して、ソースと宛先間のパスの動作または障害を判別します。実際のトラフィックは送信されず、かわりに到達可能性の確認のために構成が調査および使用されます。
NPAを使用すると、次が可能です。
　・接続の問題を引き起こしているルーティングおよびセキュリティの構成の誤りをトラブルシューティングします
　・論理ネットワーク・パスが目的に一致していることを検証します
　・トラフィックの送信を開始する前に、仮想ネットワーク接続設定が想定どおりに機能することを確認します

NPAテストでは、次のシナリオがサポートされます。
　・OCIからOCI
　・OCIからオンプレミス
　・オンプレミスからOCIへ
　・インターネットからOCI
　・OCIからインターネット



# ■ 必要な権限
Oracleでは、ネットワーク・パス・アナライザを使用するために、常にテナンシ・レベルで次の権限ポリシーを設定することをお薦めします(これらの権限をコンパートメント・レベルで設定すると、パス分析結果の正確性が低下する可能性があります)


```: Policy設定
allow group <group-name> to manage vn-path-analyzer-test in tenancy 
allow any-user to inspect compartments in tenancy where all { request.principal.type = 'vnpa-service' }
allow any-user to read instances in tenancy where all { request.principal.type = 'vnpa-service' }
allow any-user to read virtual-network-family in tenancy where all { request.principal.type = 'vnpa-service' }
allow any-user to read load-balancers in tenancy where all { request.principal.type = 'vnpa-service' }
allow any-user to read network-security-group in tenancy where all { request.principal.type = 'vnpa-service' } 
```

:::note warn
このツールを使用する権限を付与すると、ネットワーク構成およびネットワーク・セキュリティ設定に関する情報がツールのユーザーに過剰に公開される可能性があります。悪意のあるユーザーは、到達可能性ステータスの監視を使用して、ネットワーク・サービスの存在と、関連するルーティングおよびセキュリティ情報を推測できます。このツールへのアクセス権は、信頼できるユーザーおよび管理者のみに付与してください。
:::

権限がない場合、ネットワーク・パス・アナライザ画面には次のように表示されます。
```
ネットワーク・パス・アナライザがパス・テストを実行するために必要ないくつかのポリシーがありません。
```
![03_ネットワーク・パス・アナライザ 01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/a583dcb5-2f97-75cc-eea9-1cf68dc0c754.jpeg)

# ■ 手順
### 1) OCI コンソール
ナビゲーション・メニューを開き、[ネットワーキング] > [ネットワーク・コマンド・センター] グループにある [ネットワーク・パス・アナライザ] をクリック
![01_ネットワーク・パス・アナライザ 01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/11179708-b88f-7c90-60e8-dfb59dab1365.jpeg)



### 2) ネットワーク・パス・アナライザ画面
[ネットワーク・パス分析の作成]をクリック
![03_ネットワーク・パス・アナライザ 02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/43aefa40-f078-d0f0-2134-ff5cabdbb487.jpeg)





### 3) パス分析の作成: 分析の構成画面
次のパラメータおよび属性を設定し、[分析の実行]をクリック
構成したテストが実行されます。これは、(必要なホップの合計数に応じて)完了までに1分以上かかる場合があります。
```
・ 名前: ネットワーク・パス分析の任意の名前を設定
・ プロトコル: TCP、UDP、ICMP、SSH等プロトコル・タイプを選択し、ソース・ポートと宛先ポートを指定
・ ソース: テストする開始パスをする ソースIPアドレス、OCIリソースを指定
・ 宛先: テストするパスを終了する 宛先IPアドレス,OCIリソースを指定
```



![03_ネットワーク・パス・アナライザ 03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/bddfcd89-225b-e360-3da3-17084f76872f.jpeg)

### 4) 検出されたパス画面
![03_ネットワーク・パス・アナライザ 04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/ee9cd554-903b-42d7-c2e1-fc81a1f5e803.jpeg)






# ■  参考
　・[ネットワーク・パス・アナライザ](https://docs.oracle.com/ja-jp/iaas/Content/Network/Concepts/path_analyzer.htm)
　・[OCI Network Path Analyzer](https://blogs.oracle.com/oracle4engineer/post/ja-oci-network-path-analyzer)
レポートのインライン編集


+ [レポートのインライン編集で入力した値がうまく表示できない](https://qiita.com/Keiji_otsubo/items/761f3580267d0bacd5eb)

Winter24が適用されてから、レポートのインライン編集の動きが少々おかしい感じがします。
更新のためSaveボタンをクリックして保存されているように思うのですが、リフレッシュされた画面を見ると、入力前のままなんですよね。
初めは私の勘違いと思っていましたが、社内のユーザさんからも同じような報告があります。

調べても同じような質問や問い合わせは見つからないなぁ。


# 調べている過程で見つけたインライン編集での問題

+ [Issue on Report Edit](https://salesforce.stackexchange.com/questions/403090/issue-on-report-edit)

:::note alert
This page has an error. You might just need to refresh it. [Minified React error #185; visit https://reactjs.org/docs/error-decoder.html?invariant=185 for the full message or use the non-minified dev environment for full errors and additional helpful warnings.]
:::

+ [Salesforce: レポートのインライン編集の制限と問題](https://www.simplysfdc.com/2023/08/salesforce-report-inline-editing.html)

+ [InlineEdit 複合 API 更新のレポート](https://issues.salesforce.com/issue/a028c00000xanw1AAA/report-inlineedit-composite-api-update)

+ [Report Inline Editing - Contact Fields Not Editable](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000HE5jiSAD)

+ [Report is not refreshing after making an inline edit and saving](https://issues.salesforce.com/issue/a028c00000gAwgdAAC/report-is-not-refreshing-after-making-an-inline-edit-and-saving)

# インライン編集での制限

+ [Inline Editing via Reports - User Object Supported?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007FVwXK)

ユーザオブジェクトはインライン編集できないですね。

:::note
I think this is due to the following restrictions.


Inline editing isn’t supported for these columns.

+ Opportunity Amount
+ Polymorphic fields, such as an Owner field or an activity’s Related To field
+ **Columns associated with objects that Record Types aren’t available for, such as User**
+ Lookup fields that are entirely null (have no values) in the report results
+ Columns that are directly associated with junction objects

Updating Multiple Fields Inline on the Report Run Page in Lightning Experience
https://help.salesforce.com/s/articleView?id=sf.reports_inline_editing.htm&type=5
:::

+ [子オブジェクトをインライン編集できない](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KgrUZ)
AWS Amplify Hosting に Next.js 14 をデプロイする

# 前提

Amplify が Next.js 14 に対応したとのリリースを見たので、早速デプロイしてみようと思いました。最近リニューアルされた公式ドキュメントには、ReactだけでなくNext.jsのページも用意されていて、今後はReactとNext.jsとの差分を読み替えずに済みそうです。

## getting-started 

従来の Amplify

https://docs.amplify.aws/nextjs/start/getting-started/data-model/

チュートリアルの中で `next-app@14` と バージョン14を指定しています。

Amplify gen 2 (Preview)

https://docs.amplify.aws/gen2/start/quickstart/

従来のAmplifyと、先日Previewで公開されたばかりの Gen 2 でも試してみようと思います。こちらも手順の中で `next-app@14` と指定されています。

# 問題発生

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18306/8522c57b-10af-3a3d-f92a-fa29aa5b3fe4.png)

Next.js 14 では、ビルド環境として `Node.js 18以降` が必要です。

一方で、Amplify Webhosting のビルド環境は、デフォルトで `AmazonLinux:2` となっており、 Dockerfile を見ると `Node.js 17まで` しか対応していないようです。

Amplifyのビルド環境は、Dockerイメージを指定することができます。そう、古いのが原因ならば新しいのを指定してやれば良いのです。
Hosting環境を新規作成する場合のフォームが、独自コンテナと書かれていて一瞬ハードルが高そうに見えますが、Amplifyが次期バージョンのイメージを用意しているので、以下のように設定すればOKです。

## Build image settings

### 構築イメージ

```diff
+ amplify:al2023
```

### ライブパッケージの更新

Node.js と Next.js のバージョンも指定しておきました。

```diff
Amplify CLI latest
+ Node.js version 20
+ Next.js version 14
```

ビルド設定の画面はこのようになります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18306/2496c7a3-2aca-0317-b757-1e7dfc52abd5.png)


## Build & Deploy

これでビルドも成功して、無事Next.js 14 のサイトをデプロイすることができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18306/af561d7f-4cf1-f692-8d5d-63210ef3069d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18306/0baa116e-10d0-92d3-8242-613a80cafd22.png)
wslでelixir その115

# 概要
wsl(wsl2じゃない)で、elixirやってみた。
タイマーどうすんだ。
練習問題、やってみた。

# 練習問題
Livebookで時計を作成せよ。

# 方針

- genserver使う。
- Process.send_after使う。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/95bf08ca-11e3-4814-7b46-1f2a84af0370.png)

# サンプルコード

```
defmodule Example do
  use GenServer
  @ten_seconds 10000
  def init(opts) do
    Process.send_after(self(), :tick, @ten_seconds)
    {:ok, opts}
  end
  def handle_info(:tick, state) do
    time = DateTime.utc_now()
      |> DateTime.to_time()
      |> Time.to_iso8601()
    IO.puts("The time is now: #{time}")
    Process.send_after(self(), :tick, @ten_seconds)
    {:noreply, state}
  end
end

GenServer.start(Example, [])

```

以上。
自衛官からエンジニアへ Elixirから始める Web開発 Part 4

この記事は「Elixir Advent Calendar 2023」4日目の記事です
東京にいるけどfukuokaexのYOSUKEです。

普段は 合同会社TheWaggle で教材開発・システム開発・研修講師などマルチに活動してます。

このシリーズでは、文系ですらない、体育会系でも始められるプログラミング学習　というテーマで元自衛官だった僕が
自衛官からエンジニアになってもらいたいという気持ちを込めて、普段は大人しいですが、このコラムシリーズでは、あえて、体育会系のノリで、貴様ら理屈で覚えるなら体で覚えろ！というノリで書いてみたいと思います。

なので、初学者向けですが、理論は後回し、まずは動かして体感しろってノリの第4回目です。

それでは、いくぞ！

## 前回やったことは「パターンマッチ」だ！

前回やった ```1 = 1```右辺と左辺が同じになるは 数学の ```=```と同じようにと言ったが、実はパターンマッチだ！　だから数学の```=```よりももっと色々なものに対して右と左が一緒かどうかを評価することができる！

実際に見せてやろう。それではいくぞ！

```elixir
[] = []
%{} = %{}
{} = {}
```

これら、すべて右も左も同じだ！だからエラーは出ない！
班長！ さっそく、自分もパターンマッチさせてみたのですが、警告が出ました。なぜですか？ だとぉ！

```elixir
() = ()
warning: invalid expression (). If you want to invoke or define a function, make sure there are no spaces between the function name and its arguments. If you wanted to pass an empty block or code, pass a value instead, such as a nil or an atom
  iex:1:6

nil
```

きさま！死にたいのかぁ！　上官の命令を待たずに勝手な判断で動くなぁ！
なんでもかんでも、右と左を合わせておけばパターンマッチするってものではない！

いいか、きさまら。銃で扱っているものは何だ？　そう弾だ。弾には種類があり、何でもかんでも弾なら使えるものではないだろう？

例えば、機関銃の7.62mmの弾を 89式小銃では扱えないだろう？あれは、5.56mmだからな、このように銃の弾にも種類があるように、プログラミングで扱うパターンマッチできる値にも種類があるんだ。

ここでマッチさせられるものは、銃の弾のようなものだ。種類があるんだ、例えば、以下のような型がある。理屈は後だ、まずはこう言うものがあると覚えておけ。

### アトム
```elixir
:atom #頭にコロンをつけた自分の名前が値になる
```

### タプル
```elixir
{:atom}
{:ok, 1}
{} #{}で囲った中に値を持てる、値は,で区切っていくつも入れられる
```

### 数値
```elixir
1
123
0.1
```
まだ他にもあるが、頭の弱い貴様らにはまずはこの３つを覚えるので精一杯だろう。
まずはこの３つを覚えろ、いいなわかったか。

よし、今日はここまで、それでは次回 Part5でまた会おう！
文系エンジニア、順序集合を学ぶ

# はじめに

計算機科学において、順序集合関連の理論は、データ構造、アルゴリズム、プログラム分析、型システムなど、多くの領域で重要な役割を果たしています。

これらを自分の「🧑‍💻力」に組み入れていきたい。

その勉強過程のノートになります。


# 集合とは
集合（Set）は、異なる要素のまとまりを指します。

**定義**:
集合は、明確に定義されたオブジェクト（要素やメンバー）のコレクションです。
例えば、数字の集合、文字の集合などがあります。
通常、波括弧（{}）を使用して表記されます。例：{1, 2, 3}。

**特徴**:
集合内の要素は一意的で、同じ要素が二度数えられることはありません。また、集合内の要素の順序は重要ではありません。

# 順序集合（Ordered Set）とは
順序集合は、要素間に特定の順序関係が存在する集合を指します。

**定義**:
順序集合は、要素間に何らかの順序関係が定義された集合です。この順序は、数学的な意味での「大きい」「小さい」などの関係であることが多いです。
順序集合は、通常、丸括弧（()）を使用して表記されることが多いです。例：(1, 2, 3)。

**特徴**:
順序集合では、要素の順序が重要です。例えば、昇順や降順に並べられた数の列は順序集合の一例です。

## 集合と順序集合の違い

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348593/9e9b66bc-47d6-432d-6bfa-9f73f0a42c57.png)

## いつつくられたか？

順序集合の理論が現代的な形で現れ始めたのは、19世紀の数学においてです。
集合論が創始され、ジョージ・カントールなどの数学者によって基礎が築かれました。
集合論の発展とともに、要素間に特定の順序を持つ集合、すなわち順序集合に関する研究が進みました。

順序集合が登場した主な目的は、数学の特定の問題や概念をより厳密かつ効果的に扱うためです。順序集合の導入により、以下のような問題や領域が解決・発展しました。


# 順序集合があると何が嬉しい？

**要素の順序付け**: 
順序集合は要素の順序を保持します。これは、要素間の関係や順序に重要な意味がある場合に役立ちます。たとえば、時間の経過を表すために、イベントの発生順序を記録するのに役立ちます。

**検索とアクセスの効率化**:
順序集合を使用すると、特定の要素にアクセスするために線形探索を行う必要がなくなります。要素が順序に基づいて並んでいるため、バイナリサーチなどの高効率なアクセス方法が使用できます。

**重複要素の許容**:
順序集合は重複要素を許容します。これは、同じ要素が複数回出現する場合に役立ちます。たとえば、統計データの集計や多重度の考慮が必要な場合に有用です。

**数学的モデリング**:
数学的なモデリングやデータ構造設計において、順序が重要な役割を果たす場面が多いです。順序集合は、これらのモデルや設計を表現するのに適しています。

**順序に基づく処理**: 
順序集合は、ソートや順位付けなどの操作を簡単に実行できるため、順序に基づく処理に適しています。たとえば、トップNの要素を取得する場合などに使用できます。

## 順序集合の実用例

実用例 - グラフアルゴリズム:

場面: グラフ理論に基づくアルゴリズムやデータ構造の実装において、トポロジカルソート（DAGの順序付け）が必要な場合。

利用方法: トポロジカルソートは、有向非巡回グラフ（DAG）のノードを順序集合として整列するために使用されます。これは、プロジェクトの依存関係を解析する場合や、タスクの実行順序を計算する場合に役立ちます。順序集合を使用することで、タスクやプロジェクトの依存関係を効率的に管理できます。

# Pythonにおける集合と順序集合

集合 (Set):

Pythonにおける集合は、要素の順序を保持しないデータ構造です。
集合は中括弧 {} または set() コンストラクタを使用して作成できます。
集合は重複を許容せず、要素の追加順序は保持されません。
集合は主に要素の存在をチェックするために使用され、高速なメンバーシップテストが可能です。

```python
my_set = {1, 2, 3}
```

順序集合 (Ordered Set):

Pythonの標準ライブラリには、直接的な順序集合の実装は存在しません。しかし、順序集合の振る舞いを実現するために collections モジュールの OrderedDict クラスやサードパーティのライブラリを使用できます。
OrderedDict はキーと値のペアを保持し、要素が挿入された順序を記録します。これにより、順序付けられた要素を持つデータ構造を作成できます。

```python
from collections import OrderedDict

ordered_set = OrderedDict()
ordered_set['a'] = 1
ordered_set['b'] = 2
ordered_set['c'] = 3
```
要素の順序を重要視する場合、Pythonの OrderedDict を使用して順序集合のようなデータ構造を実装できます。ただし、Pythonの標準ライブラリには直接的な順序集合のクラスはないため、サードパーティのライブラリを利用することが一般的です。

## pythonにおけグラフアルゴリズム
Pythonにはグラフアルゴリズムを実装しやすくするための多くのライブラリがあります。主要なライブラリを紹介します。

### **NetworkX**:
NetworkXはPythonのグラフライブラリで、さまざまなグラフアルゴリズムを提供します。無向グラフと有向グラフの操作、グラフの生成、分析、可視化などが可能です。
一般的なアルゴリズム: 最短経路問題（Dijkstraアルゴリズム、ベルマン-フォードアルゴリズム）、最小全域木（Kruskalアルゴリズム、Primアルゴリズム）、トポロジカルソート、クラスタリング、ノードの中心性計算など。

```python
import networkx as nx
```
https://networkx.org/


### **igraph**:
igraphは、対話型のネットワーク分析ライブラリで、Pythonや他のプログラムと統合できるように設計されています。効率的なグラフアルゴリズムと可視化機能を提供します。
一般的なアルゴリズム: グラフの直径、クリーク検出、コミュニティ検出、中心性計算など。

```python
import igraph
```

https://igraph.org/


### **PyGraphviz**:
PyGraphvizは、DOT言語を使用してグラフを定義し、可視化するためのPythonラッパーライブラリです。特にグラフの可視化に重点を置いています。グラフの可視化や構造の視覚化に特に適しています。

```python
import pygraphviz as pgv
```

https://pygraphviz.github.io/


# 以上 (適宜追加していきます)
カラフルなキャストを祝う

<font color="Grey">*[Celebrating our colorful cast](https://aiven.io/blog/celebrating-our-colorful-cast)の翻訳です。*</font>

2022年6月8日

# カラフルなキャストを祝う

Aivenは今年、プライドを全開にしています！私たちの取り組みについて読み、全キャストにとって安全で包括的な場所をどのように作っているのかを知ってください。

6月はプライド月間の始まりです。Aivenでは、LGBTQ+コミュニティの多様性を祝福し、平等に関する問題意識を高めるこの機会を楽しみにしています。


今年、Aivenは[ヘルシンキ・プライド](https://pride.fi/en/)とのパートナーシップを発表し、人々が自分らしくある自由を祝うことを誇りに思っています。


「プライド運動は、私たちが何者であるかを祝うためのものです。「Aivenでは、全キャストがありのままの自分であることを尊重し、彼らが安全で歓迎されていると感じられるように努めています」。


## LGBTQ+コミュニティをサポートすることは、Aivenにとって重要です。


私たちの価値観を第一に考え、目に見える形でインクルーシブな職場づくりを目指すという信念を堂々と貫いています。


Aivenにはプラウドクラブという活発なコミュニティがあり、多様で包括的な職場を作ることで彼らをサポートしたいと考えています。


プラウドクラブスのコミュニティ共同リーダーであるアレッサンドロ・バローネ氏は、「プライド期間中だけでなく、その後の11カ月間、Aivenが帰属意識と包摂性の文化を築こうとする姿勢を誇りに思います」と語る。


[FRAの広範な調査](https://fra.europa.eu/en/publication/2020/eu-lgbti-survey-results)によれば、かなりの数のLGBTQ+コミュニティが職場で差別を受けたり、生活や家族についてオープンにできなかったりしている。


私たちは、テック業界をよりインクルーシブな業界にするために、自分たちの役割を果たしたいと考えています。[持続可能性と社会的影響プログラム](https://aiven.io/blog/sustainability-and-social-impact-commitment)において、私たちはAivenをオープンで誰もがアクセスできるものにすることを約束します。


## Aivenは安全な職場を推進します


Aivenは、チームのリソースグループを立ち上げ、さまざまなトピックについてサポートしています。Proud Crabsは、AivenのLGBTQ+コミュニティメンバーとアライがつながり、意見、知識、興味を共有するための安全なスペースを提供する最初のコミュニティです。


私たちは、LGBTQ+コミュニティが直面する問題について、管理職向けの研修を実施します。偏見、マイクロアグレッション、その他職場を不快にするネガティブな経験について学び、それを防ぐ方法を学びます。Aivenはチームメンバー全員に力を与え、サポートすることで、誰もが活躍できる職場づくりを目指します。


私たちは、社会的地位の低いグループからの求職者が私たちを見つけ、私たちが彼らを見つけられるようにしたいと考えています。


私たちは、ダイバーシティとインクルージョンの観点から、どのように取り組んでいるかを測定しています。そうすることで、データに基づいて意味のある行動をとり、改善することができます。最終的には、誰もが本来の自分らしくいられる環境づくりに取り組んでいます。


すべての物事には始まりがあり、これらのステップは私たちの旅の謙虚なスタートを意味します。


(追伸：念のため言っておくが、「キャスト」とはカニの集団の名前である。）


--


Aivenと私たちのサービスに関する最新ニュースや、オープンソースに関するちょっとした情報を入手するには、[月刊ニュースレターを購読](https://aiven.io/newsletter)してください！Aivenに関する日々のニュースは、[LinkedIn](https://www.linkedin.com/company/aiven/)と[Twitter](https://twitter.com/aiven_io)のフィードでご覧いただけます。
2023年12月未解決の質問

[2023年12月の質問の中から整理します](https://qiita.com/Keiji_otsubo/items/30f5694873f6a275cea6)

+ [Ajuda facilitadora ,erro validação](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T2Ofk)

英語にしてないからなんだけどなぁ。基本的外国語は理解できないんで、これ以上教えられることはないな。

+ [We can’t find a quick promotion named ‘Credit Base Points for Purchases’. Make sure the Eligible Activity field is set to Purchase.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T2tNs)

+ [Users Creating Quote PDF but Unable to Download](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Sr69g)

+ [FLS: Can't seem to get a custom action to show up in dispatcher console](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007SthHw)


+ [Não foi possível encontrar um relatório chamado “Status do caso”. Certifique-se de que o relatório foi criado de acordo com os requisitos](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007UQEZD)

+ [OpenID Connect Playground : This site can't be reached](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T4xRa)

+ [We can't find an opportunity named '10,000 Units' related to the account named 'Company ABC'. that's the message ](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007RHyqT)

+ [Executing the 'getAnimalNameById' method on 'AnimalLocator' failed. Make sure the method exists with the name 'getAnimalNameById', is public and static, accepts an Integer, and returns a String.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007UpOC1)


+ [Undefined identifier: "". Make sure the "" identifier exists and is spelled correctly without spaces.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Urvf3)

+ [No country jurisdiction found for country ISO code](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007UndMd)

+ [In the More Information tab, we can’t find the ‘System Information’ section'' in the topic](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007UstmHSAR)

+ [Pulling batch record size on import wizard](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007UrDv0)

+ [BR関数が機能しない](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Usftm)

+ [Experience Cloud issue](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T68Ob)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/4def0c4a-c7f6-f4c0-d4a4-33dff840c969.png)

+ [Text assessment indicator not display on mobile task list during retail execution.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007BI1Mg)

+ [NPSP をインストールしようとすると、会社の組織がリストに表示されます](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Ph8SC)



-----------------------
エラーの中身が理解できない

+ [外部サービス配列リストのエラー要求本文](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T5i28SAB)
+ [間違った会社が遊び場に読み込まれています](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T51W8)
Power BI初心者の勉強記録

このブログは「Microsoft Power BI Advent Calendar 2023」の４日目 の記事です。<br>
[≪ 前日の記事はこちら](https://qiita.com/kuwazzy/items/4ff736163817d85ce960 "Microsoft Power BI Advent Calendar 2023 ３日目の記事")
[≫ 明日の記事はこちら](https://qiita.com/advent-calendar/2023/powerbi "Microsoft Power BI Advent Calendar 2023 ５日目の記事")

https://qiita.com/advent-calendar/2023/powerbi


# はじめに
この記事はPower BI初心者が勉強した内容をまとめたものです。
チャレンジしてみようと思われる方のご参考になれば幸いです。


# 参考に記したサイトや教材を勉強してみた
とりあえず勉強してみて「お！意外と面白い！」というのが第一印象でした。
どの講師の方も分かりやすく解説されており、説明通りに操作すれば自分でも作れそう！と思えました。<br>
……ただ、自分自身のアウトプットが少なすぎて、実務で活用するには自信がないのが現状です。<br>
自信をつけるために、機能から逆算して自分自身で何か練習課題的なものを作って、ブログに継続的にアウトプットしていきたいと思いました。


# 勉強を通じて再認識したこと
元データの準備が「超大事」だと感じました。
業務改善に携わっていると、各担当者ごとに元データを準備してそれぞれで集計をかける、ということが結構あるなと実感しております。
そもそもちゃんとコミュニケーションをとればいいのでは、という話ではありますが、同時にデータの利活用ルール的なものを作らないといけないなと思いました。<br>
たとえば、どんどん人出が足りなくなってくると、各担当者ごとに元データを準備して集計表を作る……という今までの作業自体が難しくなってくると思います。そうなると、各担当者ごとに最終的に欲しいデータを確認した上で、みんなが活用できる元データを準備していくことが大切になってくるのではと感じています。<br>
上記のことから、もう一部のデータ集計に詳しい人に任せて属人化させていくいうことではなく、みんなでデータ利活用について勉強し話し合って元データを管理していく必要があると考えます。<br>
なので、組織全体のデータリテラシーを高めるために「Power BI」を学ぶことは最適なのではないか、と今回の経験を通じて感じた次第です。


# まとめ
今回勉強してみて、以下のことが学べました。
1. Power BIとは、将来に対する対策を立て活用するために、現状を具体的な数値で瞬時に整理できるツール
1. PowerQueryでのデータ整理楽しい
1. 元データ超大事✨

以上、参考になれば幸いです。

# 参考
## YouTube
https://youtu.be/QyOk1l4jcQw?si=UUWF6adaiA7oDH29

https://youtube.com/playlist?list=PLFWe9YKLKFFOkabzBm2kXUY8lQX9Z9wd1&si=U6DPOQU_9t-FoTZB

https://youtube.com/playlist?list=PLOndDCdX0Tb3YqUdxtvXM1dv1zpX_a0IN&si=tZUY502Xj2qWUHCW

https://www.youtube.com/@IT-ToolGakusyu

## Schoo
https://schoo.jp/course/7058

https://schoo.jp/course/7134

## Udemy
https://www.udemy.com/course/ishiayaya/

https://www.udemy.com/course/power-bi-ishi2/
第一世代　YART 11xのメモ

「aibo ers-11x/210で遊ぶ Advent Calendar 2023」の7日目です。

:::note
業務外の個人的な検討活動です。
:::

:::note alert
警告
この記事について作者はいかなる責任も負いません。
置き換えるファイルはバックアップを取ることをお勧めします。
:::

AiboPet's AiboHack Siteが独自のパーソナリティファイルを紹介していました。
YART = Yet Another RCode Tool
https://www.aibohack.com/111/yart11x.htm

ページが英語なことと一部混乱しやすいところがあったので、日本語に直しながら調べたメモを記します。

#### YART 11xの起動
DLしたファイルを展開した内容をメモリースティックに移します。
このとき、memstick.indは移さない方が良い様です。
そして、customフォルダにあるYART_11x.exeを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/04ca8e01-92b1-2373-4e1f-2bf69d2a5d5a.png)

MainのStartupにはもともと"PLAY ESC SITDOWN"が入っています。これはお座り動作のようです。
個体差なのかもしれませんが、起動時のお座り動作の際、手と足が干渉して強制終了がかかる場合がありました。ers-111の場合、干渉や噛みこみのように強い負荷がかかると静かに強制終了がかかるようで、胸のLEDやファンはついたまま動かなくなります。

なので、下の図の様にLIEDOWNに直すと強制終了しなくなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/039a8da1-1e0b-3f02-98ae-7ac19e11ccb6.png)

なお、LIEDOWNに変える方法は、下の欄のLIEDOWNをドラッグアンドドロップします。
不要なコマンドは同様に画面外にドラッグアンドドロップすると削除できます。
とりあえず、ここまで来たら窓下のSave RCODE~をクリックし、保存します。

#### aibo browserとの違い
- aibo browserはYART 11xのファイルを閲覧することができますが、YART 11xは従来のパーソナリティファイルを見ることはできないようです。
- aibo browserはYART 11xのファイルの変更はできず、閲覧だけできるようです。
- aibo browserはステートマシンを閲覧することができる。

#### その他　YART 11xについて気づいたこと
- YART 11xで表示、編集される内容は、OPEN-R/r-code.rに書かれている内容のようですが、どちらの行動が優先されるのかは未調査です。例えばボールを見つけた時の反応は両方に書かれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/04dc3192-aab7-e320-4d8b-005cba99f2f3.png)

- 転倒時の復帰は対応した命令が見当たりませんでした

AiboPet's AiboHack Siteが紹介しているYART 11xを使った時に気づいたメモをまとめました。
既に与えられたモーションや音声を組み合わせるとき非常に便利なツールだと思いました。