OmniAICreator/Qiita-1.07M huggingface dataset:
【AWS re:Invent】VPC Latticeが進化！TCP対応でアプリケーションネットワーキングの可能性を拡大

## この記事で伝えたいこと（ポイント）

AWS re:Invent 2024 で、 **Amazon VPC Lattice** が VPC 内のリソースへの TCP トラフィックをサポートするようになりました！ これにより、VPC Lattice は、より多くのユースケースに対応し、ネットワークアーキテクチャのモダナイゼーションと簡素化をさらに促進します。

## はじめに

この記事では、Amazon VPC Lattice の新機能である **VPC 内のリソースへの TCP トラフィックのサポート** について解説します。 VPC Lattice を使用することで、サービス間の接続をより柔軟かつ安全に管理できるようになります。今回のアップデートで、その適用範囲がさらに広がりました。

## サービスの説明

Amazon VPC Lattice は、サービス間の通信を簡素化するアプリケーションネットワーキングサービスです。サービスメッシュや API ゲートウェイの機能を組み合わせることで、コンテナ化されたアプリケーションやサーバーレスアプリケーションなど、あらゆる種類のサービスを接続し、管理するための統一的な方法を提供します。

VPC Lattice を使用すると、サービスディスカバリ、トラフィック管理、セキュリティ、モニタリングなどの機能を簡単に実装できます。従来の複雑なネットワーク設定を必要とせず、サービス間の接続をよりシンプルかつ効率的に管理できます。

### 補足：サービスディスカバリ

VPC Lattice は、サービスディスカバリを自動化します。サービスは、DNS 名またはサービス名を使用して互いに検出できるため、静的な IP アドレスやポートを構成する必要はありません。

### 補足：トラフィック管理

VPC Lattice は、トラフィックのルーティング、分割、およびシェーピングを制御するための柔軟なメカニズムを提供します。カナリアリリース、ブルー/グリーンデプロイメント、A/B テストなどの高度なデプロイメント戦略を簡単に実装できます。

### 補足：セキュリティ

VPC Lattice は、サービス間の通信を保護するための堅牢なセキュリティ機能を提供します。認証、認可、および暗号化を使用して、サービスへのアクセスを制御し、データを保護できます。

### 補足：モニタリング

VPC Lattice は、サービスのパフォーマンスと正常性に関する詳細なメトリクスを提供します。これらのメトリクスを使用して、サービスの動作を監視し、問題をトラブルシューティングできます。

## どんな時に利用できるか

VPC Lattice は、以下のようなユースケースで特に役立ちます。

* **マイクロサービスアーキテクチャ:**  マイクロサービス間の通信を簡素化し、サービスディスカバリ、トラフィック管理、およびセキュリティを容易にします。
* **サーバーレスアプリケーション:**  Lambda 関数などのサーバーレスコンポーネントを VPC Lattice に接続し、他のサービスと安全に通信できるようにします。
* **ハイブリッドクラウド環境:**  オンプレミスとクラウドのサービスを VPC Lattice に接続し、統一的な方法で管理します。
* **従来のアプリケーションのモダナイゼーション:**  既存のアプリケーションを VPC Lattice に統合し、最新のネットワーキング機能を活用します。

### 補足：Lambda 関数

Lambda 関数を VPC Lattice に接続することで、関数を他のサービスと安全に統合し、VPC Lattice の提供するネットワーキング機能を活用できます。

## まとめ

Amazon VPC Lattice は、アプリケーションネットワーキングを簡素化し、サービス間の接続をより柔軟かつ安全に管理するための強力なサービスです。今回のアップデートにより、VPC 内のリソースへの TCP トラフィックがサポートされたことで、VPC Lattice の適用範囲はさらに広がり、より多くのユースケースに対応できます。

## 参考文献

* [Amazon VPC Lattice が VPC 内のリソースへの TCP トラフィックのサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2024/12/vpc-lattice-tcp-vpc-resources/)
* [Amazon VPC Lattice: モダン化と簡素化によるエンタープライズネットワークアーキテクチャの変革](https://aws.amazon.com/jp/blogs/networking-and-content-delivery/amazon-vpc-vattice-modernize-and-simplify-your-enterprise-network-architectures/)

##  おわり
ABC148Eを解いた【二重階乗】


筆者はレート800前後の茶～緑コーダ

ABC148のE問題を解いていく

https://atcoder.jp/contests/abc148/tasks/abc148_e

# 実装コード

与えられた数Nが2で割れる回数と5で割れる回数のどちらか少ない方を求めればいいようで。
[公式解説の配信](https://www.youtube.com/watch?v=F2p_e6iKxnk&t=2307s)を参考に実装した。

```python:main.py
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rI1(): return (int(sys.stdin.readline().rstrip())-1)
def rLI1(): return list(map(lambda a:int(a)-1,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)

def g1(n,p):
    if n == 0:return 0
    a = n//p + g1(n//p,p)
    # err(1,n,p)
    # err(a)
    return a

def g2(n,p):
    if n%2 == 1:return g1(n,p) - g2(n-1,p)
    a = g1(n//2,p)
    if p==2: a+= n//2
    # err(2,n,p)
    # err(a)
    return a

def main():
    N = rI()
    n2 = g2(N,2)
    n5 = g2(N,5)
    err(n2)
    err(n5)
    ans = min(n2,n5)
    print(ans)
    
if __name__ == '__main__':
    main()

```

# まとめ

ABC148のE問題を実装した。
二重階乗や割り切れる回数の計算についての実装は難しいが、公式解説が参考になった。
TP-LINKのスマートスイッチの電力をNODE-REDで見る

# はじめに
手軽に電力を測りたい。
だけど、どこかのネットサービスには頼りたくない。
という事で
Matterに対応したTP-Link Tapo P110Mを購入してみました。(Amazonで１５００円くらい）
https://www.tp-link.com/jp/technology/matter/
https://www.tp-link.com/jp/home-networking/smart-plug/tapo-p110m/
https://amzn.asia/d/ivaMfzS

しかし、使い方が悪いのか、Node-redのMatterノードで簡単に電力の取得出来そうにない。On-Offはできそう。（断念）
https://github.com/FezVrasta/node-red-matter
https://github.com/sammachin/node-red-matter-bridge

Node.js では以下のプロジェクトが進行中なので今後を期待！（上記２つもそれを利用したもの？）
https://github.com/project-chip/matter.js/

という事で、終わり......じゃなくて
https://github.com/mbserran/node-red-contrib-tapo-new-api
を利用してみました。

# 設定
Node-redはインストール済みとします。

## Appをインストールします。
<img src="https://static.tp-link.com/res/images/qrcode/tapo-app.png"/ width="25%">

自分はiPhoneです。
インストールした後は、画面に沿ってTP-Link IDを作成します。
（自分は、WiFi-APでIDを作っていたのを忘れていました。）

## デバイスの登録
Tapoアプリを立ち上げます
画面右上の＋をタッチしデバイスを追加します。
プラグ->Tapo P110M　を選びます。
同意した後
画面の指示に従って接続します。
画面に従って接続していきます。

## パレットのインストール
パレットをインストールします。このパレットは、元々あったものをForkして修正したものです。
```
$ cd .node-red
$ npm i https://github.com/NW-Lab/node-red-contrib-tapo-new-api.git
```

作者のリポジトリからインストールする場合は、インストール後、P110Mで電力が測れるように修正します。
```
$ npm i https://github.com/mbserran/node-red-contrib-tapo-new-api.git
```
/.node-red/node_modules/node-red-contrib-tapo-new-api/nodes/tapo_klap_protocol.js の26行に”P110M”を加えます。
```
exports.supportEnergyUsage = ["P110", "P115","P110M"];
```

# フローの作成と動作確認
Node-REDを動かします。
```
$ node-red
```
Nodeが増えているのでフローを作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97061/2d6fb350-effe-db8c-5232-973abc8bb750.png" width="25%" />
![スクリーンショット 2024-12-08 21.02.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97061/9477fdbc-178b-f8f0-475e-ccaef985da48.png)
Actionsノードを設定します。
Appを登録した時のメールアドレスとパスワードが必要です。
IPアドレスは、アプリで”デバイス設定”-->”端末情報”で調べられます。
Node-REDを動かすマシンと同じネットワークの必要があります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97061/e881ee80-f3e7-6908-53d9-de9377e04ced.png" width="50%"/>

Injectノードを押すとデバッグ情報に以下のデータがきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97061/bdc5b88b-d878-e1ac-1b37-f6bb06485e04.png" width="50%"/>
アプリと見比べると"cureent_power"が現在の電力で単位はmWみたいです。

という事でフローにテンプレートノードを加えて以下のように設定すると電力が得られます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97061/22bafc12-0ded-6535-9cdd-aea506ae337f.png"/>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97061/96c510ea-17a7-3dcf-4bd1-aa5be66bcc87.png" width="50%"/>

# 後は
後はDashBoardに接続するなり遊べます。
![スクリーンショット 2024-12-08 21.36.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97061/11e3f3d0-df73-1690-5de6-f82933d1598b.png)

# 終わりに
- よく考えるとネットサービスが使えると遠隔操作ができたり、スマートフォンでみれたり便利ですよね。（職場のハンダゴテの切り忘れとかの確認など）。なのでMatterを使わないこの方法も有りかと思いました。
- このパレットはローカルネットワークのみでした。（クラウド経由では有りません。クラウドは、Aliaseを見るためのものらしい）

参考　https://www.pc-koubou.jp/magazine/86980
イベントレポート「Azure Tech Lab@Microsoft Base Kobe」

お疲れさまです、みやもとです。

ネタが怪しくなってきました。
ここからはイベントや読んだ本について感想とかレポートとか書いていこうと思います。
ということで早速、12/5（木）に参加したイベントレポートを簡単に書いていきます。

## Azure Tech Labとは
株式会社神戸デジタル・ラボが主催するMicrosoft Azureコミュニティです。
他のクラウドサービスとの比較だったりAzureを使って作ったものについて発表したりがメイン。
過去に1回参加しているのですが、LTのテーマがどれも興味深くて楽しくお話をうかがいました。

ちなみにハッシュタグ「#AsureTechLab」で検索すると[私がえんえん投稿しています。](https://x.com/search?q=%23AzureTechLab&f=live)
参加者の方はSlidoで質問以外にも感想を投稿しているため、外部に見えるところにはあまり投稿されていないようです。
ちょっと残念。

今回のテーマは「私の推しテク」でした。
以下、LTについて感想。

## LT① 「AIを騙せる？LLMハッキングの入門」
コミュニティ主催である株式会社神戸デジタル・ラボのマッキントッシュさんの発表でした。
アイルランドのご出身とのことで、国際色豊かな会社なんだなーというのが最初の印象。
スライドは日本語、それもネットミーム的な画像まで使ってめちゃくちゃ日本になじんでおられる感じでした。
内容はタイトル通りハッキングについてで、実際に起こったデータ汚染の例やどうやってAIを騙すのか、というのを実演で見せていただきました。
めちゃくちゃ怖いけどめちゃくちゃ面白かった…実際「犯罪だったり迷惑になるからやらないけど、技術としてやってみたい」と思う人も居るんじゃないかと思います。

ちなみにそんな人向けに、プロンプトインジェクションチャレンジなるものがあるそうです。

https://prompting.ai.immersivelabs.com/

## LT② 「ゲーム作りで学ぶ機械学習」
神戸市立科学技術高等学校の先生おふたりが登壇されていました。
情報処理の科目があるとは聞いていましたが、実際技術系の学校でのカリキュラムに関するお話ということでかなりわくわくしつつお話をうかがいます。
最初に石原さんから現在の情報系教育に関する状況等のお話があり、その後バトンタッチして三村先生からUnityを使ってゲームを作る授業カリキュラムについてのお話。
エージェントの動作をどう評価するかによって最終的な動きが全然違うものになるんですね。
サンプルや課題を見せていただいて、今の高校生はこんな授業を受けられるのかとちょっと羨ましくなりました。
まあ私の学生時代からやっていたとして、数学が壊滅的なのでそもそも入学が無理だったとは思いますが。

## LT③ 「【原点回帰】ノーコードでデジタルの壁を跳び越えろ！」
最後のLTも株式会社神戸デジタル・ラボの衛藤さん。
陸上競技のオリンピック日本代表だったというなかなか異色のご経歴で、おまけに現在は現役復帰されているとのこと。
技術以外のところで衝撃を受けながらノーコードで作るトレーニングツールについてうかがいました。
Power Appsを使ってトレーニング状況を登録して分析してもらったり、分析結果をもとにして向こう1週間のトレーニングメニューを作ってもらったりするのをライブデモでご発表。
結果はちょっと納得いかないところもあったようですが、発想次第でいろいろ面白そうなものができそうでした。

## Microsoft Base Ritsumeikanの紹介
最後に立命館大学の大阪いばらきキャンパス内にあるMicrosoft Baseのご紹介。
むかしむかし、大学時代に草津のキャンパスにお邪魔したことはありますが、いばらきキャンパスにMicrosoft Baseがあるというのは初めて知りました。
コワーキングスペースの提供の他にもイベント開催等されていて、一般のコワーキングスペースと感覚的には変わらない雰囲気。
紹介されていた株式会社カコムスの朝山さん曰く、いばらきキャンパスは校門も塀もなくすごく開放的で雰囲気が良いところらしいです。
ちょっと行ってみたくなりました。

## 総評
どのお話も興味深く、またみなさまお話が上手であっという間に発表が終わってしまった感じです。
個人的に今回一番大きな収穫はプロンプトインジェクションチャレンジですかね。
近いうちにひとつくらい挑戦してみたいと思います。

Azureは良さそうな話を聞きつつGoogleCloudPlatformを使う身の上なので試していないのですが、あれこれ便利そう・面白そうな機能について聞くと試してみたくなりますね。
Napkin.aiの検証

資料を作成する際、図解のアイデアが欲しいときありますよね。
そんな時に Napkin が便利らしいので、ようやく検証。

# Napkin とは
Napkin は資料作成、特に図解作成に特化したAIサービスです。
テキストを簡単に図表やグラフに変換できるので、特にビジネスや教育の分野での利用が期待されています。

[Napkinの公式サイト](https://www.napkin.ai/)

# 利用手順

#### 1. [公式サイト](https://www.napkin.ai/) にアクセス

![スクリーンショット 2024-12-08 19.45.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407770/547fb2e0-8b8a-0036-3f2d-9f4cc16ccf3a.png)

#### 2. 「Get Napkin Free」

Googleを使うのが便利です。
![スクリーンショット 2024-12-08 20.00.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407770/a5ccce7d-9329-ad11-66ed-bd5e00e7a202.png)

#### 3. 「New Napkin」の「Draft with AI」で開始します

![スクリーンショット 2024-12-08 20.03.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407770/3b820b67-b71b-b036-4d70-235608dd3410.png)


#### 4. 記事を書いてもらう

キーワードを入力したら記事を書いてくれるので、「web3について」書いてもらいました。
![スクリーンショット 2024-12-08 20.05.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407770/334cd7fe-7a30-d328-7d68-a39199deb67a.png)

#### 5. 図表を作成してもらう
文章の左に⚡️（Generate Visuals）マークが出てくるので、クリックします。

![スクリーンショット 2024-12-08 20.07.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407770/df607215-4fd8-1556-76bc-448fdb44c0fe.png)

図が25パターン以上作成されるので、好きな図を選びます。

![スクリーンショット 2024-12-08 21.26.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407770/55f037e9-416b-ff9e-4cbd-5ce745006378.png)

選択した図から、さらに色違いのパターンが生成されます。
今回選択した図がこちら。

![スクリーンショット 2024-12-08 21.29.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407770/a977c42b-6b24-c7c0-537d-888fad4810af.png)

いいですね！
こんな感じで、図表が必要な場所にどんどん生成してもらいます。

# まとめ
Napkin を使えば、キーワードだけで、視覚的にも優れた資料を作ることができます。
もちろん、自分で書いた文章に対しても、同じように図表を生成できます。

最後は人によるチェックが必要ですが、これまで1日かかっていた資料作成が、半日とか数時間に短縮される可能性があります。

元々、資料作成に時間がかかることを解決したくて生まれたサービスなので、これからどんどん使いやすくなるのではないでしょうか。

便利なものはどんどん活用して、効率的に作業を行いましょう！
callback関数について



初めまして！大学1年生のyamahi124 です。
**プログラミングガチ初心者**の私がcallback関数について学んだことをアウトプットの機会として、この記事を書きました。
###
__callback 関数とは？__
###
**ある関数の引数が他の関数であることです。**
抽象的なので、実際に書いてみましょう！



**callback 関数の書き方**

```JavaScript:sample1

//callback関数の定義
const num = (callback) => {
    const sum = callback();
    console.log(sum);
};

//引数にする関数の定義
const add = () => {
    return 1 + 1;
};

num(add);  //実行結果は2
```
~~1+1を出力するためにcall back関数を使う人はいないですが~~,挙動を確認しましょう。
関数callbackを**コンソールに出力する**とわかりやすいです。

```JavaScript:sample2

//callback関数の定義
const num = (callback) => {
    console.log(callback)
    const sum = callback();
    console.log(sum);
};

//引数にする関数の定義
const add = () => {
    return 1 + 1;
};

num(add);  //実行結果は2
```
##
```javaScript: 実行結果
  [Function: add]
```
上記のように引数が関数になってるのが実際に見てわかると思います！

#####
**最後に**
######
callback関数の挙動について**初心者**なりに解説しました！

参考
https://developer.mozilla.org/ja/docs/Glossary/Callback_function




https://rinyan-7.com/programmer-terms-for-beginners-and-intermediate-1/callback-function/
【AWS re:Invent】S3にテーブル？！ S3 Tablesがデータ分析を革新

## この記事で伝えたいこと（ポイント）
Amazon S3に、分析ワークロードに最適化された新しいストレージオプションが登場しました！その名も「Amazon S3 Tables」。S3の優れた耐久性やスケーラビリティを活かしつつ、表形式データのクエリをより効率的に実行できます。

## はじめに
この記事では、Amazon S3 Tablesについて解説します。

## サービスの説明
Amazon S3 Tablesは、分析ワークロード向けに最適化された、Amazon S3の新しいストレージオプションです。Apache Iceberg形式の表形式データを保存し、Amazon Athena、Amazon EMR、Apache Sparkなどのクエリエンジンで簡単にクエリを実行できます。

S3 Tablesは、S3の耐久性、可用性、スケーラビリティ、およびパフォーマンス特性をそのまま提供します。さらに、クエリのパフォーマンスを最大化し、コストを最小限に抑えるためにストレージを自動的に最適化します。

### 補足：Apache Iceberg
Apache Icebergは、大規模な分析データセット向けに設計されたオープンソースのテーブル形式です。 ACIDプロパティをサポートし、同時実行性とデータの整合性を確保します。 スキーマの進化、タイムトラベル、隠しパーティションなどの機能により、データレイクでの柔軟なデータ管理が可能です。

S3 Tablesでは、以下の概念が重要になります。

* **テーブルバケット:** テーブルを格納するための特別なS3バケットです。
* **テーブル:** テーブルバケット内に作成される、Icebergテーブルです。
* **名前空間:** テーブルバケット内でテーブルを整理するためのものです。

S3 Tablesは、AWS CLIやAWS SDK、S3コンソールから操作できます。テーブルの作成、更新、削除、データの読み込みなどが可能です。また、テーブルのメンテナンス機能も提供されており、古いデータファイルを削除するなどしてストレージを効率的に利用できます。

## どのリージョンで利用できるか

Amazon S3 Tablesは、以下のリージョンで利用できます。

* US East (Ohio) us-east-2
* US East (N. Virginia) us-east-1
* US West (Oregon) us-west-2

## どんな時に利用できるか
Amazon S3 Tablesは、Amazon Athena、Amazon EMR、Apache Sparkなどのクエリエンジンと連携して使用できます。

### 補足：Amazon Athena
Amazon Athenaは、標準SQLを使用してAmazon S3のデータを簡単に分析できるインタラクティブなクエリサービスです。

### 補足：Amazon EMR
Amazon EMRは、Hadoopフレームワークを使用してビッグデータを分散処理するためのマネージドサービスです。

### 補足：Apache Spark
Apache Sparkは、大規模データ処理のための高速で汎用性の高いクラスターコンピューティングシステムです。

## まとめ
Amazon S3 Tablesは、S3の優れた特性を活かしつつ、分析ワークロードに最適化されたストレージオプションです。Apache Iceberg形式の表形式データを効率的に保存し、クエリを実行できます。

## 参考文献
* New – Amazon S3 Tables – storage optimized for analytics workloads - AWS
  * [https://aws.amazon.com/jp/blogs/aws/new-amazon-s3-tables-storage-optimized-for-analytics-workloads/](https://aws.amazon.com/jp/blogs/aws/new-amazon-s3-tables-storage-optimized-for-analytics-workloads/)
* What is Apache Iceberg? - AWS
  * [https://aws.amazon.com/jp/what-is/apache-iceberg/](https://aws.amazon.com/jp/what-is/apache-iceberg/)
* S3 Tables のリージョンとクォータ - Amazon S3
  * [https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-regions-quotas.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-regions-quotas.html)

## 関連サービス
### Amazon S3
* [【AWS】S3静的ウェブサイトホスティングがAWS Amplifyで強化されたんだぜぇ〜ワイルドだろぉ〜](https://qiita.com/ymd65536/items/8ad6fc7a4434b9a62afe)
* [【AWS】手を動かして学ぶMountpoint for S3](https://qiita.com/ymd65536/items/ef2a39631124070d3d3d)
* [【AWS】Amazon S3 Object Lambdaを検証！](https://qiita.com/ymd65536/items/8b617e31f73d80d0787e)

## おわり
[Servicenow]メンテナンス情報を表示する

:::note info
本記事は、Qiita ServiceNow アドベントカレンダー2024の参加記事21日目です。
:::
https://qiita.com/advent-calendar/2024/servicenow

# メンテナンス情報を表示する
VersionUp対応などでユーザにServiceNowの操作を控えて欲しい機会はないでしょうか？
その際に活用できるメンテナンスメッセージを表示させる一例について記したいと思います。

## 環境
- Version：Zanadu

## 設定例

### ポータル（EmployeeCenter）
1.　Announcesを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636124/92c9b293-7cfd-9e60-03d4-9295dfa93f86.png)
<br>

2.　[New]ボタンを押して新規のAnnouncementを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636124/665c76e1-3eb5-b560-335a-e645086d2254.png)

[ServiceNow Docs](https://www.servicenow.com/docs/ja-JP/bundle/vancouver-platform-user-interface/page/build/service-portal/task/create-announcement.html)
<br>

3.　Potalのログイン画面で確認すると以下のように表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636124/4641469c-d891-68b8-5bd8-31ef835b7da1.png)




### Next Experience
1.　UX Banner Announcementsを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636124/7a317dcd-4480-69e8-4b99-63df131dc10c.png)

<br>

2.　[New]ボタンを押して新規のAnnouncementを作成し、保存する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636124/e195457a-4bdc-30a2-af9f-b76d5805bf6d.png)


[ServiceNow Docs](https://www.servicenow.com/docs/ja-JP/bundle/xanadu-platform-user-interface/page/administer/navigation-and-ui/concept/next-experience-banner-announcements.html)

<br>

3.　画面下部のAssociated to Configurationsの[New]ボタンを押して表示設定を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636124/e2c75eb4-e8b4-8af7-e0f2-7da00b0990e6.png)

<br>

4.　設定が完了すると画面上部にメッセージが表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636124/04b7488e-723d-df98-3d62-149bbf7df4c4.png)
TikTok Live と Unity を連携する

意外とTikTokライブとUnityの連携が簡単だったので紹介します。

## 各種バージョン
- Unity 6000.0.23f1
- TikTokLiveUnity

## TikTokLiveUnity インストール

使用するのは下記のライブラリです。
https://github.com/frankvHoof93/TikTokLiveSharp.git#TikTokLiveUnity


Window > Package Managerの左上プラスボタンからInstall package from git URLを選択します。出てきた入力欄に上記のURLを入力してインストールしましょう。

![スクリーンショット 2024-12-08 21.00.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110418/1a5f26b6-f8d5-c27a-1098-868f09320f50.png)

## 実装


```CSharp
using TikTokLiveUnity;
using UnityEngine;

public class TikTok : MonoBehaviour
{
    [SerializeField]
    public string userName;

    async void Start()
    {
        // いいねの検知
        TikTokLiveManager.Instance.OnLike += (liveClient, likeEvent) => 
        {
            Debug.Log($"Thank you for Like! {likeEvent.Count} {likeEvent.Sender.NickName}");
        };

        // ギフトの検知
        TikTokLiveManager.Instance.OnGift += (liveClient, giftEvent) =>
        {
            Debug.Log(message: $"Thank you for Gift! {giftEvent.Gift.Name} {giftEvent.Sender.NickName}");
        };

        // コメントの検知
        TikTokLiveManager.Instance.OnChatMessage += (liveClient, giftEvent) =>
        {
            Debug.Log(message: $"MSG -> {giftEvent.Message} {giftEvent.Sender.NickName}");
        };

        // 接続の検知
        TikTokLiveManager.Instance.OnConnected += (liveClient, likeEvent) =>
        {
            Debug.Log(message: $"Connected!");
        };

        await TikTokLiveManager.Instance.ConnectToStream(userName);
    }
}
```

## 使い方
userNameはTikTokのライブを行なっているユーザーのIDから取得することができます。
IDは下記の形式のライブ配信のURLから取得できます。

```
https://www.tiktok.com/@<ユーザー名>/live
```

あとは下記のC#スクリプトを空のオブジェクトにアタッチすれば動きます。
インスペクターから先ほどのユーザー名を設定しましょう！
RustとWebAssemblyでCheckBoxVideo作ってみた

# はじめに

前回、WebCameraの映像をAsciiアート風に変換するツールを作ってみたので

それと似た発想でセル上に並べられたCheckBoxに映像を出力してみる。

参考記事

https://qiita.com/shisojuice/items/ce8be8c1f6ac303aa16f

# プロジェクトの作成

大まかな手順としては大まかな手順としては上記の参考記事と全く同じ。

入力映像をグレースケール化し、

指定されたドットサイズでセルに分割して、

各セルを黒の比率によってCheckBoxの値となるBoolの配列を返す。

## CheckBoxの値の設定

セル単位で黒の比率が0.4より大きければ、trueを返し、

それ以外は、falseを返す。

```rust:lib.rs

fn analyze_cell(cell: &[u8]) -> bool {
    let black_pixels = cell.chunks(4)
        .filter(|p| p[0] < 128 && p[1] < 128 && p[2] < 128 && p[3] > 0)
        .count();

    let total_pixels = cell.len() / 4;
    let black_ratio = black_pixels as f32 / total_pixels as f32;

    if black_ratio > 0.4 {
        true
    } else {
        false
    }
}

```

その他の処理は前回のソースと同じです。

とりあえず完成！

# 今回の成果物

デモURL

https://shisojuice.github.io/Rust_VideoCheckBox/

デモ動画

![RustとWebAssemblyでCheckBoxVideo作ってみた.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777149/89437072-ff2f-c961-6f4d-e911b12229f8.jpeg)

デモ画像

![RustとWebAssemblyでCheckBoxVideo作ってみた.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777149/94d3d4fc-ff08-06ce-b280-8e8443d223e2.gif)

ソース

https://github.com/shisojuice/Rust_VideoCheckBox


# まとめ

今回は入力映像をCheckBoxの映像にしてみた。

もし、照明やカメラの環境で

CheckBoxの映像が潰れてしまう場合は

グレースケールの設定やセルの黒の比率を変更すると

よりメリハリがつくと思います。

※間違い等ありましたら、ご指摘いただけると助かります。
24/12/08 読書記録 ~ソフトウェアテストの教科書~

# 書籍
[【この1冊でよくわかる】 ソフトウェアテストの教科書](https://amzn.asia/d/6jSYRVM)

# 書籍を読む目的

 - [ ] 「品質」を理解する
 - [ ] 品質を担保できるテストを理解する

## Chap10. テストドキュメントの正しい書き方

### Chap10 感想 :writing_hand_tone5:

開発チームが拡大した時、本チャプターの話を思い出したい。
今の組織でテストドキュメントを作成することは、正直優先度が低い状態。
Ruffleにおける日本語が表示されない問題の対処法

## 概要
Adobe Flash PlayerのエミュレータであるRuffleにおいて、日本語の文章が正しく表示されないという問題があります。

問題の原因は複数考えられますが、原因の一つとして、Ruffleがデフォルト設定において使用するフォントがNoto Sansであり、日本語の文字が含まれていないことがあります。

本記事では、上記の原因に起因する問題の解決方法を紹介します。

## 解決方法① Ruffleに日本語のフォントファイルを読み込ませる
### 日本語フォントファイルを用意する
Ruffleでは、*.ttf, *.otf, *.ttc, *.otc, *.swfのフォントファイルを読み込むことができます。
ここでは、[Noto Sans Japanese](https://fonts.google.com/noto/specimen/Noto+Sans+JP)の`NotoSansJP-Regular.ttf`を利用することにします。

### 利用するフォントのフォント名を確認する
Windowsであれば、プロパティの詳細タブから確認できます。

![フォント名の確認](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3955994/553c3ffe-581b-ab93-60a2-3514eb107b3e.png)


### Ruffleが日本語フォントファイルを利用するように設定する
Ruffleのオプションとして、以下の2つを設定することで日本語フォントファイルを利用することができるようになります。
- **fontSources**
利用する日本語フォントファイルへのパス
- **defaultFonts**
利用するフォントの名前

```index.html
<html>
	<script>
		window.RufflePlayer = window.RufflePlayer || {};
		window.RufflePlayer.config = {
			fontSources: ["path/to/NotoSansJP-Regular.ttf"], 
			defaultFonts: {
				sans: ["Noto Sans JP Regular"], 
			}, 
		};
		window.addEventListener("load", (event) => {
			const ruffle = window.RufflePlayer.newest();
			const player = ruffle.createPlayer();
			const container = document.getElementById("container");
			container.appendChild(player);
			player.ruffle().load("path/to/movie.swf"); // movie.swf: 表示したいSWFファイル
		});
	</script>
	<script src="https://unpkg.com/@ruffle-rs/ruffle"></script>

	<body>
		<!-- Ruffle playerが挿入される位置 -->
		<div id="container"></div>
	</body>
</html>
```

## 解決方法② Ruffle 日本語対応デモを利用する
有志によって、日本語関連の不具合を修正したRuffleが公開されています。

https://github.com/midorism64/ruffle

本家とは異なり、デフォルトのフォントとしてNoto-Sans-CJK-JPを利用しているため、日本語が表示されないという問題が起きないようになっています。

### Ruffle 日本語対応デモをサーバー上にダウンロードする
[ビルド済みのリリース](https://github.com/midorism64/ruffle/release)からWebホストに利用する`ruffle-nightly-20XX_XX_XX-web-selfhosted.zip`をダウンロードし展開します。

### ダウンロードしたRuffleを利用する
htmlに以下のタグを追加することで、サーバー上にある日本語対応版のRuffleを利用したRuffle playerが起動されます。
```html
<script src="path/to/ruffle/ruffle.js"></script>
```

## 参考文献
https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#web

https://github.com/ruffle-rs/ruffle/wiki/Frequently-Asked-Questions-For-Users#how-do-i-change-the-fonts-used-by-flash-on-my-website
クリスマスっぽいイルミネーション作ってみた。🎅

# はじめに
:::note info
この記事は [SLP-KBIT AdventCalendar2024][link-1] 8日目の記事です。
:::
[link-1]: https://adventar.org/calendars/10572
本記事を書くにあたって、筆者はクリスマスっぽいことをしたいなと考えていました。
クリスマスといえばイルミネーションですよね？
本記事では、LEDCubeという物を使ってイルミネーションを制作していきます。

# LEDCubeとは？
LEDCubeはその名前の通りLEDを立方体状に配置したものです。
Cubeに配置されたLEDの色や光るタイミングをマイコン等で操作することでアニメーションを表現することができます。

![1733648246756.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936426/e495fb5d-7af0-ad97-bb91-b1a83292e420.jpeg)



画像のCubeは筆者が数年前に制作したものです。
5 × 5 × 5 のCubeですので125個のLEDが使用されています…

ひゃ、ひゃくにじゅうご！？

今思えばとてつもない数ですね…
LED1個につき4か所のはんだ付けをする必要があるので、当時の筆者は少なくとも500か所
はんだ付けをしていたことになります。
こりゃ～はんだ付けの神が両手に宿っちまいますねぇ？

# 今回の制作物
タイトルにもある通りクリスマスっぽいアニメーションプログラムを作成しました。

コード
```Christmas_animation.ino
#include <FastLED.h>
#define LED_PIN 2 
#define NUM_LEDS 125
#define BRIGHTNESS 255
#define LED_TYPE WS2812
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
#define UPDATES_PER_SECOND 100
CRGBPalette16 currentPalette;
TBlendType    currentBlending;

void setup() {
  delay( 3000 );
  FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  ChristmasPalette();
  currentBlending = LINEARBLEND;
  
}

void loop() {
  FastLED.setBrightness(  BRIGHTNESS );
    
  static uint8_t startIndex = 0;
  startIndex = startIndex + 1;
  
  LEDsColorChange(startIndex);
    
  FastLED.show();
  FastLED.delay(1000 / UPDATES_PER_SECOND);
}

void ChristmasPalette()
{
    CRGB red = CHSV( HUE_RED, 255, 255);
    CRGB green  = CHSV( HUE_GREEN, 255, 255);
    CRGB black  = CRGB::Black;
    
    currentPalette = CRGBPalette16(
                                   green,  green,  black,  black,
                                   red, green, black,  black,
                                   green,  green,  black,  black,
                                   red, green, black,  black );
}

void LEDsColorChange( uint8_t colorIndex)
{
    uint8_t brightness = 255;
    
    for( int i = 0; i < NUM_LEDS; i++) {
        leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
        colorIndex += 3;
    }
}
```
LEDを赤色と緑色交互に光らせるという内容です。
プログラムの具体的な説明は割愛させていただきます。
すんません:pray:

# LEDCube点灯？
さて、アニメーションプログラムもできたことですし、
さっそくLEDCubeに表示させてみましょう！

スイッチオン！ポチっ

あ、あれ？アニメーションが表示されない…

なんとLEDCubeの配線が一部断線していました。
数年ぶりにはんだ付けをする必要がありますが、両手を見てもそこにははんだ付けの神はいません。
あるのは末端冷え性でキンキンに冷えた両手だけです…

なんやかんやあって突貫工事は無事成功に終わりましたが、
アニメーションは表示されるのでしょうか…不安が残ります。

（ 皆さんは制作物をきちんと保管しておきましょうね。)
# LEDCube点灯！！
数年ぶりのはんだ付けを無事に終え、後は成功することを祈るのみです。
LEDCubeにアニメーションは表示されるのでしょうか？

スイッチオン！ポチっ

![1733648246746.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936426/fdaa521f-fa92-b0c2-11c3-0b1cdb2657b1.jpeg)

うおおおおおぉぉぉぉ！ちゃんと動いてるうぅう！
これに思わずスタンディングオベーション👏

どうです？クリスマス感あふれるイルミネーションじゃないですか :laughing:

残念ながらQiitaに動画を張り付けることができなかったので、静止画のみですがいい感じに光ってると思います。
無事に光って良かった良かった。

# 最後に
いかがでしたか？
今回の記事ではLEDCubeを使ってクリスマスっぽいイルミネーションを作ってみました。
頑張って自作したものがうまく動いてくれるとやっぱり嬉しいものですね！今後の活動のモチベーションアップにもつながる良い制作になったと思います。

最後まで記事を読んでくださりありがとうございます。
皆様よいクリスマス＆よい年末をお過ごしください！
FlutterでXMLHttpRequest error が発生したときの対処時にアクセスするFlutter SDKの場所を探す

## 概要

Flutterでアプリケーションを開発中、XMLHttpRequest errorが発生しました。CORSが原因とのことです。Flutter SDKの設定ファイルを変更することで解決できますが、肝心のFlutter SDKの場所がなかなか見つかりませんでしたのでメモします。

## 目的
Flutter SDKの場所を探す

## 環境
- Flutter 3.24.5
- M1 MacBook Sonoma 14.7.1
- Homebrew 4.4.10

## 手順

Flutterのpathを探す

```shell
$ which flutter                                 
/opt/homebrew/bin/flutter
```

ただし、/opt/homebrew/binの中にあるFlutterはシンボリックリンクなので、ここからcacheなどのディレクトリにはアクセスできない。そこで、シンボリックリンクの元を辿る。

```shell
$ ls -l /opt/homebrew/bin/flutter
lrwxr-xr-x  1 user admin  57 Nov 29 23:02 /opt/homebrew/bin/flutter -> /opt/homebrew/Caskroom/flutter/3.24.5/flutter/bin/flutter
```

無事、見つかりました。

```shell
$ ls
cache       dart        dart.bat    flutter     flutter.bat internal
```

## 参考

https://blog.pentagon.tokyo/3159/#index_id5

https://blog.pentagon.tokyo/3119/

https://qiita.com/koji4104/items/8c6af74c85fe46b63728

https://stackoverflow.com/questions/60191683/xmlhttprequest-error-in-flutter-web-enabling-cors-aws-api-gateway
blender ホログラム作り方

以下のホログラムを表現するshaderの説明をする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330568/a647e77c-dc6e-e08d-b56d-2b10c6130bbd.png)


以下必要なシェーダーノード
・Material Output
・Emission
・ColorRamp
・Brick Texture
・Separate XYZ
・Geometry
以下より精度を上げるのに必要
・Value
・Mix Shader
・TransparentBSDF

BrickTextureをSeparate XYZで分離させるのがポイント

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330568/7d75037e-8757-7e6a-44c9-4dd00ae678fe.png)

参考動画

https://www.youtube.com/watch?v=E6jCFfCjAJ4&list=PLbcfxxORzQ3bu8oMDO-t1-8IwjDZf63Zf&index=18
【AWS re:Invent】S3データ活用を加速するAmazon S3 Metadata (Preview)

## この記事で伝えたいこと（ポイント）
Amazon S3にメタデータを簡単に管理できる新機能「Amazon S3 Metadata」が登場しました！これにより、S3データの探索、理解、活用がよりスムーズになります。

## はじめに
この記事では、Amazon S3 Metadata (Preview) について解説します。

## サービスの説明
Amazon S3 Metadataは、S3データにメタデータを付与し、管理するための新しいサービスです。自動的にメタデータを収集し、クエリ可能なテーブルとして提供することで、データの発見と理解を容易にします。

S3 Metadataは、オブジェクトのサイズやソースなどのシステム定義のメタデータと、製品SKUやトランザクションIDなどのカスタムメタデータをサポートしています。カスタムメタデータは、タグを使用してオブジェクトに注釈を付けることで、ビジネス分析、リアルタイム推論アプリケーションなど、さまざまな用途でS3データの活用を促進します。

### 補足：S3 Tables
S3 Metadataで収集されたメタデータは、S3 Tablesに格納されます。S3 Tablesは、表形式データに最適化された新しいS3ストレージサービスです。

S3 Metadataは、オブジェクトがバケットにアップロードされるときにメタデータを自動的にキャプチャし、そのメタデータをクエリ可能な読み取り専用テーブルに格納します。バケット内のデータが変更されると、S3 Metadataは数分以内にテーブルを更新し、最新の変更を反映します。

## どのリージョンで利用できるか
Amazon S3 Metadataは、現在、以下のリージョンでプレビューとして利用可能です。

* US East (N. Virginia)
* US East (Ohio)
* US West (Oregon)

## どんな時に利用できるか
Amazon S3 Metadataは、Amazon Data Firehose、Athena、Redshift、EMR、QuickSightなどのAWS分析サービスと統合して、S3 Metadataテーブルを含むデータをストリーミング、クエリ、および視覚化することができます。

### 補足：Amazon Bedrock
Amazon Bedrockとの統合により、AIで生成されたビデオに、AIの起源、作成タイムスタンプ、生成に使用された特定のモデルなどのメタデータで注釈を付けることができます。

## まとめ
Amazon S3 Metadataは、S3データのメタデータを自動的に収集し、クエリ可能なテーブルとして提供することで、データの発見と理解を容易にするサービスです。AWS分析サービスとの統合により、S3データをより効果的に活用することができます。

## 参考文献
* [Announcing Amazon S3 Metadata (Preview) – Easiest and fastest way to manage your metadata - AWS](https://aws.amazon.com/jp/about-aws/whats-new/2024/12/amazon-s3-metadata-preview/)

## 関連サービス

### Amazon S3
* [【AWS】S3静的ウェブサイトホスティングがAWS Amplifyで強化されたんだぜぇ〜ワイルドだろぉ〜](https://qiita.com/ymd65536/items/8ad6fc7a4434b9a62afe)
* [【AWS】手を動かして学ぶMountpoint for S3](https://qiita.com/ymd65536/items/ef2a39631124070d3d3d)
* [【AWS】Amazon S3 Object Lambdaを検証！](https://qiita.com/ymd65536/items/8b617e31f73d80d0787e)

## おわり
あまりにもタイミングがシビアすぎるスロットマシーン

# はじめに
この記事は[クソアプリ Advent Calendar 2024](https://qiita.com/advent-calendar/2024/kuso-app) 7日目の記事です。
(遅刻ごめんなさい！)

このアドベンドカレンダーの趣旨通り、世の中に全く役に立たないアプリを作成しましたので紹介します！

# つくったもの
絶妙に腹が立つスロットゲームを作りました

![de43e76352513b8b834bee7db03ea62a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265114/90179887-6c6b-7eab-8284-42617fd5950a.gif)

#### サイト
https://mega-yadoran.github.io/kuso-slot/

#### ソースコード
https://github.com/mega-yadoran/kuso-slot

## 作成の経緯
クソアプリを作るので、「とにかく『イラッ』するようなゲームを作ろう」と最初に考えました。
イラッとするといえば、「理不尽な判定」だろうと思いつきました。
例えば、「アクションゲームのプレイ中に画面上では敵に当たってないように見えるのに、当たった判定になって死ぬ」とかそういう類のやつです。
また、クソゲーあるあるな「そんなところで変に難易度を上げなくていい」というのもこのアドベントカレンダーの趣旨に合ってそうなので良さそうです。
そんなことを考えているときに友人がパチスロの動画を見ていたので、「異常にタイミングがシビアなスロットマシーンにしよう！」と決めました。

ぴったり揃えないとめちゃくちゃ煽られます。ちなみに作成者自身もぴったり揃えられたことがありません。正真正銘のクソゲーだコレ

## 使用技術
技術的には HTML(canvas) + Vanilla JSの超シンプル構成です。
そして実はコードの90%はChatGPTに書いてもらいました。
技術的に解説することはあんまりなさそうなので、ChatGPTとのやりとりを共有します。こんな感じでクソアプリは作られています。
(ボタンの中央揃えがなかなかできなくて苦戦している恥ずかしい様子も載っていますが温かい目で見てください)

https://chatgpt.com/share/67558bbb-6ccc-8000-8ff3-5dc008d0b836

## 最後に
今年のクソアプリアドベントカレンダーも非常に盛り上がっていて、皆さんの力作(?)がたくさん投稿されています。
ぜひ他の記事も読んでみてください！

https://qiita.com/advent-calendar/2024/kuso-app

また、2年前に僕が投稿したクソアプリもよかったらお読みください。

https://qiita.com/mega_yadoran/items/e9ef504e8a3de4293e62
CDKでスタックをデプロイせず変更セットだけ作成する方法

# はじめに
CDKでスタックをデプロイする前に、デプロイせずに変更セットだけ作成して
マネジメントコンソール等から変更差分を確認できるようにする方法をご紹介します。

### CDKバージョン
```shell
$  cdk --version                                                                          
2.171.0 (build 4957967)
```

# cdk deployコマンドにオプションをつける

cdk deployコマンドに、オプションを追加して変更セットだけ作成できます。
以下の２パターンの方法があります。

## ① -m='prepare-change-set'オプションを使う

-m（--method）オプションの値にprepare-change-setを指定します。

```shell
$ cdk deploy -m='prepare-change-set'

  or

$ cdk deploy --method='prepare-change-set'
```

このコマンドを実行すると、変更セットのみを作成することができます。
変更セット名は、デフォルトでは`cdk-deploy-change-set`になります。
上記コマンドで変更セットを作成する度に、すでに作成された同名の変更セットは上書きされます。

なお、--change-set-nameで変更セット名を指定できます。

```shell
$ cdk deploy -m='prepare-change-set' --change-set-name='MyChangeSetName'
```

### 参考
AWS CDK CLI リファレンス：
https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/ref-cli-cmd-deploy.html#ref-cli-cmd-deploy-examples-6

## ② --no-executeオプションを使う

AWS CDK CLI リファレンスに記載はありませんが、このオプションでも変更セットを作成できます。
①の方法よりコマンドが短く済みます。

```shell
$ cdk deploy --no-execute
```

変更セット名は、①の方法同様にデフォルトでは`cdk-deploy-change-set`になります。
--change-set-nameオプションで変更セット名を指定できます。

```shell
$ cdk deploy --no-execute --change-set-name='MyChangeSetName'
```

なお、--no-executeオプションについて、AWS CDK CLI リファレンスに記載はありませんがhelpコマンドでは確認できました。
※ しかし非推奨とのこと

```shell
$ cdk deploy help
cdk deploy [STACKS..]

Deploys the stack(s) named STACKS into your AWS account

Options:
  #### ~省略~ ####

      --execute              Whether to execute ChangeSet (--no-execute will NOT
                             execute the ChangeSet) (deprecated)
                                                          [deprecated] [boolean]
  #### ~省略~ ####
  ```
【AWS re:Invent】AWS Glue Data Catalogに革命！ 自動統計生成機能でデータ分析を加速

## この記事で伝えたいこと（ポイント）
AWS Glue Data Catalogが、Amazon RedshiftやAmazon Athenaなどのクエリエンジンで使用するテーブル統計の生成を自動化するようになりました。これにより、クエリのパフォーマンスが向上し、コスト削減の可能性も期待できます。

## はじめに
この記事では、AWS Glue Data Catalogのテーブル統計自動生成機能について解説します。

## サービスの説明
AWS Glue Data Catalogは、データレイク内のデータのメタデータを格納・管理するサービスです。今回、このサービスにテーブル統計を自動生成する機能が追加されました。

### 補足：テーブル統計
テーブル統計とは、テーブルに含まれるデータに関する統計情報（例：行数、列のデータ型、列の最小値・最大値など）のことです。クエリエンジンは、この情報を利用してクエリの実行計画を最適化します。

従来、AWS Glue Data CatalogでApache Icebergテーブルの統計を作成するには、テーブルの設定を継続的に監視・更新する必要がありました。 新機能により、一度カタログを設定するだけで、新しいテーブルの統計が自動的に生成されるようになります。 また、既存のテーブルが更新された場合でも、統計は定期的に更新されます。

統計は、すべての列について行のサンプルを使用して生成されます。 Apache Icebergテーブルの場合、これらの統計には個別値の数（NDV）が含まれます。 Parquetなどの他のファイル形式の場合、null値の数、最大値と最小値、平均長などの追加の統計が収集されます。

## どのリージョンで利用できるか
この機能は、以下のAWSリージョンで利用可能です。

* USA East (N. Virginia, Ohio)
* US West (N. California, Oregon)
* Europe (Ireland)
* Asia Pacific (Tokyo)

## どんな時に利用できるか
Amazon RedshiftやAmazon Athenaでクエリを実行する際に、この機能を利用することで、クエリのパフォーマンス向上とコスト削減が期待できます。

### 補足：Amazon Redshift
Amazon Redshiftは、AWSが提供するペタバイト規模のデータに対応した高速なクラウドデータウェアハウスです。

### 補足：Amazon Athena
Amazon Athenaは、標準SQLを使用してAmazon S3に格納されたデータを簡単に分析できるインタラクティブなクエリサービスです。


## まとめ
AWS Glue Data Catalogのテーブル統計自動生成機能により、Amazon RedshiftやAmazon Athenaでのクエリパフォーマンスの向上が期待できます。この機能は、データレイクを使用するユーザーにとって非常に有用なものです。

## 参考文献
* AWS Glue Data catalog now automates generating statistics for new ... - AWS  
  * [https://aws.amazon.com/jp/about-aws/whats-new/2024/12/aws-glue-data-catalog-automates-generating-statistics-tables/](https://aws.amazon.com/jp/about-aws/whats-new/2024/12/aws-glue-data-catalog-automates-generating-statistics-tables/)

## 関連サービス
### AWS Glue

* [【AWS】用語を整理しながら学ぶAWS - part8 AWS Glue #データ分析 - Qiita](https://qiita.com/ymd65536/items/ce4ea95c96dbf7d29431)

### Amazon Athena

* [【AWS】用語を整理しながら学ぶAWS Amazon Athena - Qiita ](https://qiita.com/ymd65536/items/44edb06e8361cc734828)

## おわり
【UE5】SceneCaptureCubeでLumenを有効にする

本記事は [Unreal Engine (UE) Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ue) シリーズ4の 10日目の記事です。
# 概要
SceneCapture2Dの方はUE5.1からですが、UE5.5からはSceneCaptureCubeでもLumeGIとLumenReflectionが使えるようになりました。
設定しなければならない項目が若干紛らわしいのでまとめておきます。
# セッティング
コンテンツブラウザでCubeRenderTargetを作成。
SceneCaptureCubeをシーンに配置、作成したRenderTargetをTextureTargetにアサインします。
用途によって変わりますが、ここではCaptureSourceをFinalColor(HDR)inLinearWorkingColorSpaceにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149393/8dd46dfe-daa3-7c12-cb77-78977edf23f9.png)
これだけだとLumenは省略されており、GIやReflectionは描画されておらずSkyLightの遮蔽も計算されません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149393/75868aea-67ec-a3f4-66b4-e40504ead02c.png)
追加でSceneCaptureCubeのPostProcessVolumeからGlobalIlluminationとReflectionsのMethodをLumenに設定。(※チェックを入れるだけでOK)
PostProcessBlendWeightを1に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149393/1d5e4e2c-0140-7826-d75a-3e034d1e5439.png)
これでLumenが有効になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149393/65d0c96e-cea1-640e-54e7-83a46249fc0f.png)
まだ若干GIが弱く感じるのは、SceneCapture描画時のLumenSurfaceCacheの解像度が抑えられているためです。
SceneCaptureCacheResolutionScaleを1に設定することでクオリティが上げられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149393/4bc62a64-8778-5a07-f119-6a96a7aea756.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149393/57c6998f-944b-9092-24a8-77ee592ebeca.png)

# 処理負荷
SceneCapture自体が元々重いのですが、そこにLumenの計算が全周囲分加わることで絶望的に重くなります。
当然リアルタイムでの使用には耐えられないため、あくまでもCubeMapの撮影など一部の用途に限られます。
CaptureEveryFrameをオフにすれば1フレームだけ実行することもできますが、Lumenの処理がフレーム分散されるため撮影できません。

# CubeMapの切れ目
撮影された結果を見ると一部にうっすらと切れ目のようなものが見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149393/045790b5-a7cf-e2b7-e042-de9d27100ba8.png)
SceneCaptureCubeはまず前後左右上下の6アングル分をキャプチャし、結果を合成してCubeMapを作成するのですが、アングル間でLumenの整合性が取れずこのような結果になるようです。
スクリーントレース系はデフォルトで無効化されていますが、それでも切れ目は残ります。
これに関してはソースコード内でも言及されていますので、将来的には解決されることに期待したいです。
```C++:SceneCaptureRendering.cpp
// Disable screen traces by default for cube maps -- these don't blend well across face boundaries, creating major lighting seams.
// Lumen lighting still has some seams with these disabled, but it's an order of magnitude better.
```
辞書で作る直線的な処理

# 結論
辞書の値に関数を紐づければ直線的な処理にできる場合があるとわかりました。
もちろん Lambda 式も紐づけられます。
普段は値や配列を紐づけることが多いので、ちょっと感動してこの記事を書いてみます。

# 前提
## 辞書とは
辞書 (dict) とは Python におけるデータ構造の一つで一意の「キー」と「値」を紐づけて管理するオブジェクトです。

## サンプルコード（Python 3.12 で動作確認済み）
たとえば、都道府県の「キー」に対して、県庁所在地を「値」として紐づけると次のようになります。
```python
prefectures: dict[str, str] = {
    "北海道": "札幌市",
    "岩手県": "盛岡市",
    "宮城県": "仙台市",
}
print(prefectures["北海道"])  # 出力値：札幌市
```

「値」に紐づけられるのは文字列や数値だけではなく、リスト、辞書やオブジェクトも設定できます。
辞書に慣れていない方にとっては少し難易度が高いかもしれませんが、こんな感じです。
```python
prefectures: dict[str, dict[str, str | list[str]]] = {
    "東京都": {
        "県庁所在地": "新宿区",
        "観光地": ["東京タワー", "スカイツリー"]
    },
    "大阪府": {
        "県庁所在地": "大阪市",
        "観光地": ["大阪城", "通天閣"]
    },
}
print(prefectures["大阪府"]["県庁所在地"])  # 出力値：大阪市
print(prefectures["東京都"]["観光地"])  # 出力値：['東京タワー', 'スカイツリー']
```

# 本題
さっそく、辞書の値に関数を紐づけた場合とそうでない場合を見比べてみましょう。

## 説明用コード（このままでは動きません）
```python
def _setup_constraints(self) -> None:
    apply_methods = {
        "amount": self._apply_amount_or_energy_constraint,
        "energy": self._apply_amount_or_energy_constraint,
        "ratio": self._apply_ratio_constraint,
    }
    for constraint in self.constraints:
        unit = constraint.unit
        apply_method = apply_methods[unit]
        apply_method(constraint)

def _setup_constraints(self) -> None:
    for constraint in self.constraints:
        unit = constraint.unit
        if unit in ["amount", "energy"]:
            self._apply_amount_or_energy_constraint(constraint)
        elif unit == "ratio":
            self._apply_ratio_constraint(constraint)
```
ご覧のとおり、unit の値に応じた関数を実行することに変わりはないのですが、分岐を気にしなくてもよくなりました。

## あらためて結論
辞書の値に関数を紐づけておくことで直線的な処理となり、スッキリしたような気がします。
このプログラムにおいてやる必要があるかは少し怪しいですが、個人的には気に入りました。
Nestjsの依存関係で詰まった話

## nestJSで職場でもプライベートでも詰まる

### 職場で詰まった原因と解決策

- サービス層に@Injectable() デコレーターをつけ忘れていたこと
- importがサービスの型のみでサービスがimportされていないため
    - vscodeの自動追加で気づけなかった

ex) 
×import { xxxService } from './xxx.service';
〇import { xxxService } from './xxx.service';


### プライベートで詰まった原因
Nest can't resolve dependencies of the TypeOrmCoreModule

- プロジェクトディレクトリではnpmを使っており、具体的なnestjsプロジェクト部分ではpnpmを使っており、うまくインストールできていなかったため

project/task

project:npm
task:pnpm 

taskをカレントディレクトリにしてpnpm install --save @nestjs/typeorm typeorm pg を行いなおすことで解決
2024アドカレ記事一覧

# アドカレ記事まとめ記事

| 日付 | カレンダタイトル | 記事タイトル | 記事リンク |
|:-:|:-:|:-:|:-:|
| 12月1日  | はじめてのアドベントカレンダー  | 2024アドカレ記事一覧  | この記事  |
| 12月2日  | 【忘年会】みんなの一年を見せておくれ...！！！  | 1年間なにもしなかったと思ってしまう現象に名前  | https://qiita.com/aiz4ryhe/items/e1f7690d24862fbf4569  |
| 12月3日  | Udemyおすすめ講座をシェアしよう！  | 新任リーダになったときに参考にしたudemy講座  | https://qiita.com/aiz4ryhe/items/a8b265dd04d0f20727fa  |
| 12月4日  | サクラエディタ  | サクラエディタかメモ帳しか使えない環境でShellScriptを開発する設定を作った  | https://qiita.com/aiz4ryhe/items/61954c60c58a9c383a68  |
| 12月5日  | Linux  | errno.hについて  | https://qiita.com/aiz4ryhe/items/0778624e55293b4cbdde  |
| 12月6日  | 身の回りの困りごとを楽しく解決！  | Winerge系の何か  | https://qiita.com/aiz4ryhe/items/d6dc4fad4810029ef583  |
| 12月7日  | 今年取得した・挑戦した資格を共有したい！   | Microsoft Certified: Azure AI Fundamentals（AI900）合格体験記  | https://qiita.com/aiz4ryhe/items/278139a3e435ef01240f  |
| 12月8日  | Linux  | DNSSECについて　~LinuC303での学習内容を元に~  | https://qiita.com/aiz4ryhe/items/e75de47d17c040a8f9ce  |
| 12月9日  | 1人アドベントカレンダ  | 勉強した結果を恥ずかしいと思う必要はないでしょ  |   |
| 12月10日  |開発でチャレンジして、失敗・成功したことをシェアしよう   |定常業務を自動化して1時間かかる業務を10分にした話   |   |
| 12月11日  |1人アドベントカレンダ   |docker-compose.ymlのエラーについて   |   |
| 12月12日  |1人アドベントカレンダ   |今年の1年でやったことを振り返る（資格以外）   |   |
| 12月13日  |Linux   |NetworkManagerによる/etc/resolv.confの上書きを抑止する   |   |
| 12月14日  |Linux   |yum install時のエラー（ [Errno 256] No more mirrors to try.）   |   |
| 12月15日  |   |   |   |
| 12月16日  |   |   |   |
| 12月17日  |   |   |   |
| 12月18日  |転職活動して気づいた「これをやっていれば.../やってよかった」をシェアしよう   |インフラエンジニアがITコンサルを目指して失敗した体験レポ   |   |
| 12月19日  |   |   |   |
| 12月20日  |今年取得した・挑戦した資格を共有したい！    |PM試験受験体験記   |   |
| 12月21日  |Linux   |クリスマスだしX'masスキャンしてみた   |   |
| 12月22日  |今年取得した・挑戦した資格を共有したい！    |LinuC303　合格体験記   |   |
| 12月23日  |本番環境などでやらかしちゃった人   |ルート直下に謎のディレクトリを大量生産した話   |   |
| 12月24日  |はじめてのアドベントカレンダー   |完走した感想   |   |
| 12月25日  |今年取得した・挑戦した資格を共有したい！    |今年取得した資格振り返りと今後の展望   |   |
【大学生必見】Markdownでお手軽レポート作成

# はじめに

大学のレポート作成には、MS WordやGoogleドキュメントを使用している方が多いでしょう。ですが、特に1〜3ページ程度の短いレポートであれば、Markdownを使うことで、より簡単に美しいレポートを作成できます。
Markdownでレポートを書く最大の魅力は、**課題の文章やメモをコメントアウトするだけで、出力には反映されない点**です。これにより、課題文やメモ等をファイル内に保持しながら、効率よくレポートを作成できます。
この記事では、**Markdownを使ったレポート作成環境の構築方法**と、**私がよく使うフォーマット**を紹介します。

# Markdown + PDF
MarkdownからPDFを出力する方法として、主に以下の2つがあります：
1. VSCodeの拡張機能 [MarkdownPDF](https://github.com/yzane/vscode-markdown-pdf)を利用
  拡張機能をインストールするだけで使えるため、簡単です。
2. [Pandoc](https://pandoc.org/) + Latex を導入
  カスタマイズ性が高い一方で，導入の手間がかかります。

この記事では，手軽な**VSCodeの拡張機能**を使った方法を解説します。

# 環境

* OS: Windows11
* VSCode: 1.95.3
* MarkdownPDF: v1.5.0

## インストール
VSCodeの拡張機能からMarkdownPDFを検索し、インストールするだけで準備完了です。

![image-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947575/488d0e84-8f46-1cb1-09c1-abe2a0fe44e5.png)


## 使い方
1. Markdownファイルを作成します。
2. `ctrl + shift + p` でコマンドパレットを開きます。
3. `markdown`と入力して `Markdown PDF: Export (pdf)`を選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947575/8397c989-6a90-d5c4-3766-37c25bb162f5.png)


これだけでカレントディレクトリにPDFファイルが作成されます。


#### プレビュー機能
インタラクティブにPreviewを表示して編集したいならVSCodeの拡張機能、`Markdown Preview Github Styling`がおすすめです。
サイドビューでプレビューを開く際のキー設定：
```keybindings.json
{
  "key": "ctrl+i ctrl+u",
  "command": "markdown.showPreviewToSide",
  "when": "!notebookEditorFocused && editorLangId == 'markdown'"
}
```

## 設定
PDFのレイアウトを調整するために，以下の設定を`settings.json`に追加します：
```settings.json
{
  "markdown-pdf.displayHeaderFooter": false,
  "markdown-pdf.headerTemplate": "",
  "markdown-pdf.margin.bottom": "2cm",
  "markdown-pdf.margin.left": "2cm",
  "markdown-pdf.margin.right": "2cm"
  "markdown-pdf.margin.top": "2.5cm"
}
```


# よく使うテンプレート
```ReportSample.md
<div style="text-align: center">
  <h2>タイトルサンプル レポート課題</h2>
</div><br>
<div style="text-align: right;">
  名前<br>所属
</div><br><br>

<!--
 課題の指示文：「計算機の情報処理の特性を述べよ」
-->

### 1. 人間と計算機の情報処理の相違点について
Content
改行は"\"+Enterで行えます。
### 2. 計算機の言語処理にモデル化できそうな人間の言語処理
Content2

<!-- 改ページ -->
<div class="page-break"></div>

##### 参考文献
Refs

<style>
  .page-break {
    page-break-before: always;
  }
</style>
```

# 出力例

![image-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947575/31b35f05-2bd7-8bbc-2bea-372ed25c421b.png)



# 記法のポイント
* 改行は"\\"+Enterで行えます。
* 末尾の\<style>タグで`page-break`クラスを定義し，`<div class="page-break">`を挿入することで改ページできます。

# Markdownでの一番の利点
Markdownでレポートを書く最大の利点は、**課題の文章や補足メモをコメントアウトして残せる**ことです。
以下のように、出力には反映させず、後から見返すときに役立つ情報をファイルに残しておけます：
```appendix.md
<!--
  以下は課題の指示文です。
  「計算機の情報処理の特性を述べよ」
-->
### 1. 人間と計算機の情報処理の相違点について
Content
<!-- なにかメモ -->
```
コメントアウトした内容はPDF出力時に表示されないので、課題の内容やメモをそのままファイルに保持できます。これにより、効率的かつ整理されたレポート作成が可能になります。


#### Tips(VSCode デフォルトショートカット)
 - コメントアウト：`ctrl+k ctrl+c`
 - コメント解除：`ctrl+k ctrl+u`


# 最後に
大学生のレポート課題は特に形式が指定されていない場合が多いと思います（少なくとも私はそうでした）。そういった課題であれば，Wordの重さと煩わしさから解放されてサクッとレポートをこなしたいものですね。\
Markdownを使用して，こったレイアウトや論文を書いていくことを考えるならPandoc+Latexがおすすめです。それについてはまた別の記事で書ければと思います。
Intent は ViewModel に書くべきか 

Jetpack Compose で指定したURLでWEBブラウザを開くならこう書けます。

```kotlin
@Composable
fun OpenLinkButton(
  urlHandler: UriHandler = LocalUriHandler.current
) {
  Button(
    onClick = {
      urlHandler.openUri("https://android.benigumo.com/")
    }
  ) {
    Text("Open Web link")
  }
}
```

<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/22d825a7-7c9b-ddba-03ee-1106fc1ced26.gif">


メールアプリを開く場合も同様に文字列変更だけでいける。

https://android.benigumo.com/20241208/open-mail/

しかし、

Viewにロジックが増えること。

どう思いますか。

ちょっと、タイトルとはずれてるけどつながってる。
Androidでのネット疎通確認

# はじめに
今回はAndroid端末でネット疎通確認をするためのコードを紹介していこうと思います
### 本文
```kotlin
withContext(ioDispatcher) {
            resultOf {
            // hostnameには適当なアドレスをいれておきます
                val inetHostname = InetAddress.getByName(hostname)
                val inetSocketAddress = InetSocketAddress(inetHostname, HTTPS_PORT)

                Socket().use { it.connect(inetSocketAddress, TIMEOUT_MILLIS) }
            }
        }
```
こうすることでネットが正常に疎通しているかを確認することができます
### さいごに
今回はネット疎通確認用のコードを紹介しました
どなたかのお役に立てれば幸いです
kubernetesの上で動いているpodの上でmemrayを動かす

業務で役に立ったのでメモとして

pythonのdocker imageをkubernetes (EKS) の上で動かしていたが、このdocker image内でどのようにメモリを使っているか調べる必要があった。そこでmemrayを使うことにしたが、色々つまづいたので備忘録として残す。

https://github.com/bloomberg/memray

## 結論

以下に書いてある。ただし、imageはroot userで動かす必要がある(と思う)。

https://quanttype.net/posts/2024-09-30-weeknote-7-memray-in-kubernetes.html

つまり、`runAsUser: 0`なりをセットする必要がある(下参照)。

https://kubernetes.io/ja/docs/tasks/configure-pod-container/security-context/

## 手順について

### 1. Pythonのpackageとしてmemrayをいれる

poetryならば、以下のコマンドで入る。

```
poetry add memray
```

Docker imageに入れる際は、requirements.txtを生成した上で、pipコマンドをたたくなりすればよい。

### 2. gdbとlibcap-2binをinstallする

dockerのpython imageはdebianなので、Dockerfileに以下を追記する(/etc/os-releaseをみるとほぼdebianだと思うので)。

```
RUN apt-get install -y gdb libcap2-bin
```

### 3. kubernetesのdeploymentのmanifestに追記をする。

おそらくdeploymentを使っていると思うので(そうでない場合でも同様にすればよいと思われる)、`Deployment.spec.template.spec.containers`の部分に以下を追記する。

```
securityContext:
  capabilities:
    add:
      - SYS_PTRACE
```

### 4. setcapのコマンドを走らせる

次のコマンドを走らせる

```
setcap cap_sys_ptrace+pe /usr/bin/gdb
```

Dockerfileに以下を追記でもよいと思われる(自分はこれでOKだった)

```
CMD ["setcap", "cap_sys_ptrace+pe", "/usr/bin/gdb"]
```

### 5. memrayを走らせる

以下のコマンドを走らせる。ただしPIDは1の場合である。必要ならば、あらかじめpsコマンドを入れるなどすればよい。
```
kubectl exec -it <your pod> -- memray attach 1
```

## 最後に
Capabilitiesなどわかっていないkubernetesの概念などがあったが、とりあえず上で動いた。ただ過剰な権限を付与していたりするかもしれない。
点と線、因子と水準の話

## テスト戦略の基礎固め

よく、テストが点と線に例えられますが、
点と線をどこに置くかは、テストを作るときの決めの問題
でもあるので、ここではWebアプリケーションをテストするときの
一例の話をします。
テスト全体の保証の基本となります。

## 点を見出す
点を見出す、については、以前書いたこの記事に
要点があります。
[[テストコンディションにはどんなものがある？]](
https://qiita.com/EgaSaQA/items/328f51cafa1ea570a780)

その他には、以下の項目があります。

#### E2Eレベル
- UIを因子としたバリデーション
- 操作を因子とした遷移

#### コードレベル
- 変数と値のバリデーション
- 同値分割

## 線を保証する
上記の内容で、点（因子）を選び出し、線（充分に網羅された水準）を
作ることで、全体的な保証が可能になります。

さらに、仕様通りに動作するかを検証するために、
仕様と、そのバリデーションを記載したケースも、
テストセットとしては、ここに入れています（CPM法）。

## ここまでのまとめ
この、点と線を保証したテストは、CPM法や、品詞技法と呼ばれるテストと、
概ね同様のテストカバレッジになります（細かくは違うのですが）。
私は、Single Condition などと呼んだりしています。

#
### 用語解説

#### 因子
テストすべき条件。

#### 水準
各条件が取ることのできる具体的な値。
この水準を用意するために、同値分割法などを
使うことがあります。

#### CPM法
コピー＆モデファイ＆ペースト法。
仕様をコピペして、文章をちょこっと変えるテストを指します。
受け身体質なマインドセットを変える！エンジニア1人1人を主役にさせるための試行錯誤

# はじめに
私が勤めている[株式会社ｉｉｍｏｎ](https://iimon.co.jp/)では、COOが管轄する部署にPMが所属し、そのPMからCTO管轄のエンジニアに対してタスクを依頼していく流れになっています。

そのせいか、自社サービスを提供する会社にも関わらず、どうもエンジニア全体が社内受託開発のような雰囲気になっていました。

具体的にいくつか例をあげると、「PMから言われたスケジュールには反論しづらい」「PMが作った仕様をエンジニア側でレビューせず、違和感があってもそのまま実装」「エンジニア側からの意見・提案が出づらい」などです。

この記事では、2024年8月に社内初のEM（エンジニアマネージャー／エンジニアリングマネージャー）になった私がその受け身体質なマインドセットを変えるために行ってきた試行錯誤を紹介します。

# 情報のオープン化
EMになる前、2024年4月に入社して以来、一貫して経営陣にお願いしていたのが情報のオープン化です。
これまでは自分が作ったプロダクトがいくつ売れていて、何社の方に使っていただけているのかさえ、エンジニアは知るすべがない状態でした。

これでは、新たな機能をリリースしてもそれがどの程度のビジネスインパクトを与えたのかもわかりませんし、ただひたすら目の前のタスクをこなすだけで何の手応えもありません。

この状態で主体的に物事を考えろと言われても、それは難しい話でしょう。

粘り強く訴え続けた結果、経営陣も理解を示してくださって、社外秘情報の取り扱いに関する研修とセットで情報のオープン化も検討されることになりました。

# 仕様レビューをタスクに組み込む

「はじめに」で触れたように、エンジニアはPMから受け取ったタスクをレビューせず、チケットに書かれてあるそのままを実装することが当たり前の状態になっていました。

ある日、明らかに使い勝手の悪いUIの新機能のレビューがあがってきたときに、その機能を実装したエンジニアに「このUIはめんどくさいですね。こうすればもっと簡単になりませんか？」と尋ねたところ、「私もそう思いながら作ってました」という衝撃の返事が⋯。

驚いた私はすぐにPMとそのエンジニアとの三者でのMTGを開き、PMに使い勝手をよくするアイデアを伝えると、PMからは「その方が使い勝手がいいのでそうしてください。ただ、私も最初からそのように伝えたつもりなんですが⋯」とのこと。

結局、この時は仕様伝達の行き違いだったわけですが、チケットを通じてのテキストコミュニケーションには限界がありますし、エンジニア側が「このUI使いづらいな」と気付いた時点でPMに一声かけていれば、実装前に行き違いに気づけていて手戻りも防げたわけです。

この一件もあり、「タスクに手を着ける前にエンジニア側でも仕様レビューを行う」というルールを周知しました。

早速、PM側から示されたUIだと使いにくい＆（筆者の想像で）12日程度の工数がかかりそうな新機能を、わかりやすい使い勝手かつ、半分程度の工数で済ませられるものをエンジニア側から提示して、それをPMに快諾してもらったりと、効果が出始めています。

# 顧客インタビューへの同行

BtoBのサービスにはお客様の声（事例集）がつきもので、弊社でも例に漏れずお客様の声を掲載しています。

普段はセールスのメンバーがその取材へ伺っているわけですが、今度からエンジニアも同行できるようにしてもらうことができました。

私も経験がありますが、実際にお客様にお会いして話をきくと、このお客様のためになんとかいいものを作りたい、という気持ちが更に高まるものです。

早速エンジニアからも「やりたい」と名乗り出てくれた人もいて、生のお客様の声を聞いたエンジニアはさぞモチベーションが上がるだろうとこれから楽しみにしています。

# 自分発信でのタスク

12月からの新しい取り組みとして、PMからタスクを振られるだけでなく、エンジニア自身が何をやるのか考えて業務にあたる時間を取るようにしました。

ただ「やりたいこと」ではダメで、「チーム目標、個人目標に紐づいていること」or（andでもいい）「会社のビジネスに貢献できること」という条件つきです。

完全に自由にしないのがポイントで、制約をつけることによって自分で考えるクセをつけることができます。

リファクタリング、それに伴うテストコード、後進の教育などなど、いろんな「やりたいこと」があがってきました。

どんな効果が出るのか、来月振り返るのが楽しみです。

# さいごに

まだまだ試行錯誤の最中で、すぐに結果が出るものもあれば、じっくり機が熟すのを待つ必要があるものもあります。

また次の機会に、弊社のエンジニアチームがどのように進化を遂げたのか、1人1人が主役になれたのかをお話できればと思っています。

その発表の場が、EMConf JP 2026だったら最高ですね！（EMConf JP 2025はプロポーザル出しましたが、27倍の高い壁に跳ね返されました⋯）