OmniAICreator/Qiita-1.07M huggingface dataset:
AIワークフローとNode-REDの違いと使い分け

## はじめに

AIワークフローツール: DifyやCozeは生成AIに特化しており、柔軟な変数指定が可能です。これにより、複雑なAI処理が必要な場合に適しています。

- **Node-RED**: オープンソースのフローエディタで、IoTデバイスやAPIとの連携が得意です。ビジュアルプログラミングにより、技術的な知識が少ないユーザーでも簡単に使用できます

- **使い分けのポイント**: 複雑なAI処理にはDifyやCozeを、シンプルな自動化やアプリ連携にはNode-REDを使用するのが効果的です

- **コストとスキル**: DifyやCozeは高度なAI処理が可能ですが、技術的なスキルが必要で、コストが高くなる可能性があります。Node-REDは無料で使用でき、技術的なスキルが少なくても扱いやすいです

- **アプリ連携**: Node-REDは多様なアプリやデバイスとの連携が可能で、IoTプロジェクトに適しています

## AIワークフローツールの特徴

- **生成AI特化**: DifyやCozeは生成AIに特化しており、柔軟な変数指定が可能です

- **アプリ連携**: アプリ連携機能が限定的で、特定のAI処理に特化しています

- **コスト**: 高度なAI処理が可能ですが、コストが高くなる可能性があります

- **技術スキル**: 設定には一定の技術的理解が必要です

- **用途**: 複雑なAI処理が必要なプロジェクトに適しています

## 使い分けの基本方針

- **複雑なAI処理**: DifyやCozeを使用して、生成AIを活用した詳細な処理を行います

- **シンプルな自動化**: Node-REDを使用して、アプリ間連携や基本的な自動化を行います

- **AIとアプリ連携の組み合わせ**: 両者を併用して、最適な結果を得ることが重要です

- **プロジェクトの要件**: プロジェクトの要件に応じて、適切なツールを選択します

- **コストとスキル**: コストやチームの技術スキルを考慮して選択します

## 具体的な使い分け例

- **シナリオ1**: DifyやCozeで生成AIを使った詳細な処理を行い、結果をNode-REDに渡して他のアプリと連携します

- **シナリオ2**: Node-REDのAI機能を直接使用して、シンプルなAI処理とアプリ連携を行います

- **シナリオ3**: 大量のデータ処理が必要な場合、Node-REDのAI機能を活用します

- **プロジェクトの複雑さ**: プロジェクトの複雑さに応じて、適切なツールを選択します

- **コスト効率**: コスト効率を考慮して、最適なツールを選択します

## 選択基準

- **プロジェクトの複雑さ**: プロジェクトの複雑さに応じて、適切なツールを選択します

- **必要なAI処理の深さ**: 必要なAI処理の深さに応じて、適切なツールを選択します

- **連携したいアプリの数と種類**: 連携したいアプリの数と種類に応じて、適切なツールを選択します

- **コスト**: API使用量やタスク数を考慮して、コスト効率の良いツールを選択します

- **チームの技術スキル**: チームの技術スキルに応じて、適切なツールを選択します
【Ruby】Time.atについて

# はじめに

こんにちは！アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。

今日は Ruby の `Time` クラスの `Time.at(epoch)` について解説します。
特に、"1970年" を基準にしたエポック秒がどのように役立つのかを具体例と共に紹介します。
一見「1970年って古くない？」と思うかもしれませんが、この基準が現代のシステムでどれほど便利に使われているかを知ると、エポック秒の重要性を理解できると思います。
## Unixエポックとは？

`Time.at(epoch)` の `epoch` とは、**Unixエポック**と呼ばれるものです。Unixエポックとは、**1970年1月1日00:00:00 UTC** を基準とした秒数を表します。この1970年を基準にすることで、コンピュータが時間を扱う際に一貫した基準を持つことができ、さまざまなシステムで共通して時間を処理できるようになります。

### なぜ1970年？

1970年を基準にした背景には、次の理由があります：

1. **Unixの誕生**  
   Unixオペレーティングシステムが開発されたのが1969年から1970年にかけてであり、この年がコンピュータ時刻の「スタート地点」として採用されました。

2. **計算の簡略化**  
   コンピュータにとって、秒単位で時間を数えることはシンプルで効率的です。この共通基準を採用することで、異なるシステム間でも互換性が保たれ、計算やデータのやり取りが容易になります。

3. **整合性の確保**  
   1970年を基準にすることで、システムやプラットフォーム間で一貫性を持たせることができます。

## `Time.at(epoch)` の使いどころ

`Time.at(epoch)` は、以下のような場面で便利に使われます。
### 1. タイムスタンプの変換

多くのシステムは、時間を **エポック秒** で管理しています。
データベースやログファイルでは、タイムスタンプがエポック秒形式で記録されていることが一般的です。このようなデータを人間が読みやすい日時に変換する際に `Time.at(epoch)` を使います。

```ruby
# 例: タイムスタンプを人間が読める形式に変換する
epoch_time = 1697049032  # 例としてのエポック秒
readable_time = Time.at(epoch_time)
puts readable_time  # => 2023-10-11 06:50:32 +0000
```

### 2. 時間差の計算

エポック秒は一貫した基準を提供するため、**時間差の計算**が簡単に行えます。例えば、2つの出来事の時間差を秒単位で計算できます。

```ruby
start_time = Time.at(1697049000)
end_time = Time.at(1697049032)
duration = end_time - start_time
puts duration  # => 32.0 秒（2つの出来事の時間差）
```

### 3. ログやデータ処理のデバッグ

システムログやバックエンドでのデータ処理では、時間をエポック秒で統一することで、プログラムの挙動を追跡しやすくなります。
例えば、サーバーのリクエスト時刻やデータベースのレコード作成時刻を解析する際に役立ちます。

## `Time.at(epoch)` と現在の時間

`Time.at` は `Time.now` と組み合わせることで、現在時刻をエポック秒形式で取得したり、エポック秒から元の形式に戻すことができます。

```ruby
epoch_now = Time.now.to_i  # 現在のエポック秒を取得
puts epoch_now
puts Time.at(epoch_now)  # 現在時刻を読みやすい形式に戻す
```
また、過去や未来の特定の時刻を計算する際にも便利です。
```ruby
future_time = Time.now.to_i + 3600  # 1時間後のエポック秒
puts Time.at(future_time)          # => 1時間後の時刻
```

## タイムゾーンの考慮
`Time.at(epoch)` は、エポック秒をローカルタイムとしても解釈します。UTC(協定世界時)として日時を取得したい場合は、`utc`メソッドを使う必要があります。
```ruby
epoch_time = 1697049032
puts Time.at(epoch_time).utc  # => 2023-10-11 06:50:32 UTC
```

## まとめ

`Time.at(epoch)` は、タイムスタンプの変換や時間差の計算など、システム開発において非常に便利なメソッドです。
エポック秒を基準にすることで、シンプルで一貫性のある時間管理が可能になり、システムや国をまたぐデータ交換にも適しています。

現代の開発において、エポック秒はログ解析、APIデータ処理、時間計算など、多岐にわたる場面で利用されているようです。

1970年という基準そのものには特別な意味はありませんが、効率的で一貫した時間管理を実現するための便利な発明と言えるでしょう。
【Unity2022】error CS0006 Metadata file 'Library/PackageCache/ ~.dll' could not be found. のエラーの解決策

# エラーが起きた手順と内容
UnityHub の New Project から 3D(Build-In Render Pipeline) を選択してプロジェクトを新規作成すると，以下のエラーがconsoleに出現

```
error CS0006: Metadata file 'Library/PackageCache/com.unity.collab-proxy@2.6.0/Lib/Editor/PlasticSCM/log4netPlastic.dll' could not be found
error CS0006: Metadata file 'Library/PackageCache/com.unity.collab-proxy@2.6.0/Lib/Editor/PlasticSCM/Unity.Plastic.Antlr3.Runtime.dll' could not be found
error CS0006: Metadata file 'Library/PackageCache/com.unity.collab-proxy@2.6.0/Lib/Editor/PlasticSCM/Unity.Plastic.Newtonsoft.Json.dll' could not be found
```

# 解決策
Unityを一度落として，Libraryフォルダを削除する．
UnityHubから再度プロジェクトを起動する．
キャッシュが再構成されると治った．

# 実行環境(参考)
- Unity Hub 3.10.0
- Unity Editor 2022.3.11f1
- Windows10 22H2

# 所感
今まではこんなエラーは出現していなかったので，UnityHubのアップデートによる問題？なのかと思っています．

# 参考

https://joyplot.com/documents/unity-library-cache/

https://zenn.dev/omizu13/articles/0a758661dc399a

# 根本的な解決方法
2022.3.55f1 にアップデートしたところ，この現象が解決したという報告がありました．
UnityEditorのバージョンアップで解決するみたいです．

https://stackoverflow.com/questions/79349601/metadata-file-dll-couldnot-be-found

(2025/02/05追記)
字幕プレイ動画を読み上げるブラウザ拡張を作った話

# はじめに
去年の冬休みの自由研究として個人的に作ったものを紹介させていただきます。
ここで作ったものは社内で年に数回催されているハッカソン・アイデアソンにも提出しました。

この時はまだオンラインイベントだったのですが、最近はオフラインが復活してグループ会社からも参加があって非常に盛り上がっております。

# 冬休みのとある風景
たっぷりの時間で懐かしの動画を見返していた私。昔の動画は実声やソフトウェアトークなどの音声が無く、字幕のみの動画も多かった。
字幕動画はゲーム音声をそのまま楽しめるという利点もあるけど、画面を集中して見ないといけないので結構疲れることがわかった。

せっかくだしこれを改善するってのを冬休みの自由研究にして会社のオンラインハッカソンで発表するか！

# 技術調査や実装
視聴ページに外付けする形をイメージしたのでブラウザ拡張で実装することを最初に決めて、それに合うものを調べていきました。
## OCR
### Tesseract.js
https://github.com/naptha/tesseract.js

日本語にも対応していてwasmでの高速化なども入っているライブラリ。処理速度は十分だけど精度はそこそこ
### AWS
その時調べた感じだと日本語に非対応だった
### Azure AI Vision
https://azure.microsoft.com/ja-jp/products/ai-services/ai-vision

API通信だから間に合うか？と思ったけど間に合う速さで精度も良かった！無料枠もあったのでTesseract.jsに追加してこれを利用する実装も入れることに

## 音声読み上げ
### SpeechSynthesis
https://developer.mozilla.org/ja/docs/Web/API/SpeechSynthesis

ブラウザにそういうAPIが存在する。どこかで聞いたことがあるような音声なので親しみやすい
### VOICEVOX
https://voicevox.hiroshiba.jp/

無料！アプリを立ち上げておけばHTTPでAPIリクエストを投げれば音声データを作れる。よく聞く音声なので親しみやすい

ブラウザ拡張で利用する場合にはちょっとだけ手間がかかるので注意

https://qiita.com/ExceptionError/items/bf66737686a564579df2

## 字幕検出
毎フレームOCRにかけてテキストが変更されていたら読み上げと実装できればそれが理想ではあるが、Tesseract.jsもそこまでは厳しく、また精度の問題でテキストの差分が無駄に出てきてしまう。
Azure AI Visionも毎フレームAPIリクエストを投げるのはレートリミットに引っかかりましたしお金が…！

### OpenCV
画像処理といったらこれ。OpenCV.jsとしてwasmも提供されている。
背景差分法の実装が入ってるので閾値を適当に決めて雑に検出するよう実装を作った

こちらもブラウザ拡張で利用するには色々と乗り越えないといけない制約があるので注意

https://qiita.com/ExceptionError/items/6031b5eb30e192e203b7

### タイマー起動＆ユーザー操作
動画シリーズが同じなら字幕の間隔というのも概ね一定だったりするので、タイマー起動で差分があれば読み上げという形でも使用に耐えうる感じにはなった
追加でCtrl+右クリックなどでOCR起動のフックを入れたりして、自分で操作することも可能に

# その後
無事に完成して個人で使って楽しむクオリティを出せました。そしてオンラインハッカソンでも発表し、高評価をいただけました！

ただし冬休みに懐かしの動画を見返すというのは、シリーズ全部は見終わりませんでした！

# まとめ
ブラウザ拡張・ORC・読み上げといった組み合わせで各種技術情報を調べて実装しました。

こういったもののアウトプット先としてハッカソンやLTといったイベントが会社であるのはありがたいです(アドカレもそうですね)。
KSONについて

KSONはKeyless Schemæ Object Notationの略でJSONからキー情報を省くことでコンパクトにすることを目的としたフォーマットです。
キー情報が存在しないため、スキーマと別途渡す必要があります。

まず、以下の方法でスキーマを定義しKSONに渡します。

```js
var movie_schemas = [
  {
    "id": "role",
    "fields": ["name", "character"],
    "meta": [0, 0]
  },{
    "id": "movie",
    "fields": ["title", "year", "rating", "cover", "actors"],
    "meta": [
      0,
      0,
      0,
      "prefix:http\://movies.db/covers/|suffix:.jpg",
      "[]role"
    ]
  }
];
KSON.addSchema(movie_schemas);
```

そして事前に定義したスキーマに合致するオブジェクトを用意し、KSON文字列化をします。

```js
var movies = [
  {
   "title": "Forrest Gump",
   "year": 1994,
   "rating": 8.7,
   "cover": "http://movies.db/covers/8.jpg",
   "actors": [
    {"name": "Tom Hanks", "character": "Forest Gump"},
    {"name": "Robin Wright", "character": "Jenny Curran"},
    {"name": "Gary Sinise", "character": "Lieutenant Dan Taylor"}
   ]
  },
  {
    "title": "Toy Story",
    ...
  }
  ...
];

KSON.stringify(movies, "[]movie")
```

KSON化した結果は以下のようになります。
JSON化した場合と比較するとオブジェクトのキー情報がなくコンパクトな表現になっていることが分かります。

```
[
  "[]movie",
  "Forest Gump",
  1994,
  8.7,
  "8",
  [
    ["Tom Hanks", "Forest Gump"],
    ["Robin Wright", "Jenny Curran"],
    ["Gary Sinise", "Lieutenant Dan Taylor"]
  ],
  "Toy Story",
  ...
]
```
出展:

https://github.com/mbarkhau/kson
Homebrewのインストールに手こずった

Mac歴もう10年くらいなるのに未だにbrewのインストールが毎回手こずって、今回も案の定だったので解決方法まとめておく。
今回は自分の環境だったので、原因他の可能性もある。

# インストールされているかの確認コマンド
```terminal
 brew --version
```

 これで以下のように出力されてばOK。これでバージョンが出力されれば問題ないってこと。
```terminal
> Homebrew 4.4.8
```


# エイリアス設定の確認

なぜかエイリアス設定されていた。chatGPTからの回答のまんま以下ように解除した一旦。。

エイリアスの確認: ターミナルで以下を実行して、brew に設定されているエイリアスを確認します。

```terminal
alias brew
```

出力例:
```terminal
> alias brew='PATH=/opt/homebrew/bin brew'

```


エイリアスの解除: 一時的にエイリアスを解除します。

```terminal
unalias brew

```

# brewの場所を確認する

コマンド実行してbrewをインストールされますが、macの内部環境に入ります。

Appleシリコンだとデフォ以下配下にbrewがインストールされるのですが、

```terminal
/opt/homebrew/bin/brew
```

実際は以下には置かれてました。M3 MBPです。なぜ。。
```terminal
/usr/local/bin/brew
```

# まとめ

brewの場所の確認
```terminal
which brew
```


インストールされているかの確認
```terminal
brew --version
```

これでインストール先やbrewの環境設定がされているか都度確認しながらchatGPT駆使してやっていきましょう！
終わったらbrewだけにビール飲めばいんじゃね。ｱｻﾋｨｽｩﾊﾟｧﾄﾞｩﾙｧｧｧｧｲ!!!
人見知りを治した思考方法

初めまして、レバウェル開発部の齋藤です。
今回自分は人見知りを克服した思考方法というテーマで記事を書こうと思います。
エンジニアなのに技術の話じゃないんかい！という意見もあるかと思いますが、興味を持っていただけたら幸いです。

# 自己紹介
改めまして、齋藤といいます。
自分は現在レバウェル開発部内で、チームのマネジメントをしています。

様々なエンジニアと交流する中で、「自分は人見知りで…」というような会話をよく聞くため、今回のテーマを選んでみました。
マネジメント領域でなくても、業務で関わる以前から関係性を持っておくことは、その後のスムーズな話し合いに役立つため、課題感を持つ人の助けになれば嬉しいです。

今でこそ初対面の人でも気にせず話しかけられるようになりましたが、学生時代や社会人なりたての頃は結構な人見知りでした。
仕事上必要なコミュニケーションは取りに行けますが、そういった「理由」が無い場合になかなか話を進めることができませんでした。

ただ人見知りを克服したいという気持ちは持っており、それを克服するためにどのような思考をしたかを今回書いていきます。
また、世間一般的な人見知り改善方法ではなく、あくまで個人で考えた内容ですので、全ての人の人見知りを解消するものでない事をご了承ください。

# この記事について
この記事で扱う内容
・人見知りの定義
・原因分析
・分析の結果、どの様な行動をとったか

この記事では扱わない内容
・世間一般的な人見知りの改善方法

# 人見知りの定義
まずは人見知りの定義を改めて確認していきたいと思います。
人見知りとはWikipediaによると、「子供が知らない人を見て、恥ずかしがったり嫌がったりすることである」とあります。
「子供が」とありますが、自分も大人になっても自然に解消することは無かったですし、大人子供関わらず初対面でのコミュニケーションに苦手意識があるという事象に対して話を進めさせていただきます。

# 人見知りの原因を考える
当時の自分は、まず自分の中の人見知りの原因を探りました。

・自分から声をかけることができない
・何を話題にすればいいかわからない
こういった症状は自身のどのような感情から生み出されるのかを考えました。

「自分から声をかけることができない」という症状ですが、この行動に基づく自身の考えを探ったときに行き着いた答えは「相手に悪く思われたくない」という物でした。
相手に不快な思いをさせたく無い、おかしな人と思われたく無いなどといった恐怖の感情から、自分から動けない状態になっていたと思われます。

# 原因の詳細分析
「相手に悪く思われる」状態を具体的に考えると、下記のようになります。
・相手が不快に思うことを発言/行動する

ただこれは個人の主観が強い部分でもあり、明確な基準がありません。
都度相手に聞くわけにも行きませんので発想を転換させて、「自分が不快に思う発言」について考えてみます。

「自分が不快に思う発言」とは下記の様なものが想像できました。
・相手自身や相手の好きなものをけなす
・相手自身や相手の好きなものに対して暴言を吐く
・他にも政治や世界情勢、応援している野球チームなどセンシティブな内容は控えます

これらに気をつければ、少なくとも自分はどの様な話を振られても問題が無いと考えました。

何を話題にすればいいかわからないという部分も、この点を合わせて考えていけます。
自分が不快に思わない話題の中で、天気や食べ物、世間の流行などについて話をすれば良いかと思います。

今度はこの話を相手にした際に相手が取るリアクションについて考えていきます。
相手のリアクションについては大枠で下記の様なものが考えられます。
・好意的反応
・否定的反応、無反応

好意的反応が返ってきた場合、特に問題はありません。
そのまま話を続けていけば良いだけですね。

否定的反応/無反応の場合について、これはコミュニケーションが失敗したと考えられます。
ただしこの際に、自分が選択した話題について考えてみます。
否定的、センシティブな話題を避け、まずは取り留めない会話を振ったと考えましょう。
その際に相手が、そもそも否定や無反応であった場合、その人とは価値観が合っていない可能性が高いです。
価値観が合わない人の場合、初対面でなんとか会話を広げてもその後ズレが大きくなり、やがて交流しなくなる可能性が高いと思われます。
営業職の方が気難しい顧客に商品を購入してもらう様な場合であれば、根気強く別の方法を探さなければなりませんが、人見知りを解決したいという段階ではその様な高度な駆け引きは必要ありません。

上記から自分が不快に思わない話題を振り、回答してくれる人とだけ交流を続けていけば大きな価値観の相違もなく、無理のない範囲で交友関係を続けていける可能性が高いです。

当時は意識していませんでしたが、今回のように原因を掘り下げていく思考はロジカルシンキングやなぜなぜ分析のような思考法に近いかも知れませんね。

# 自分から話しかけない場合
本題からずれますが、自分から話しかけない場合についても考えてみます。
そもそも人見知りを克服したいというのは、相手とコミュニケーションをとり関係性を構築していきたいという気持ちの現れかと思います。
そのため、自分から話しかけないという選択肢は関係性構築を遅らせたり、場合によってはその機会を逃せば二度と交流しないといったことになるため、積極的に取る選択肢ではありません。
自分がその人と関係性構築をしたくないと考えた場合を除き、話しかけないという選択は良い結果を生むことはないでしょう。

# 自分がどうしたいかと、相手がどの様な人かを合わせて考えた結果
初対面の人との人間関係を広げる場合に、自分から会話を振りその結果反応してくれる人とはその後も交流が続き、反応を示さない人とは無理にその場での会話を広げても長い関係性は続けにくいということが推察できます。
このことから、まず会話を行うことで自分と相手の相性を測ることができ、仮にコミュニケーションがうまくいかなかった場合でも、その人とはいずれ疎遠になる可能性が高いという判断ができるでしょう。
また、初めのタイミングを逃すと、たとえ価値観が合う相手でも関係性構築が遅れたり、場合によっては二度とやり直す機会がなくなるといった事態も考えられます。

これらの思考から、あくまで自分の場合にはなりますが、上記の様な思考により人見知りを克服しました。
もしこの価値観に同意できると思い、人見知りに悩んでいる人がいらっしゃいましたら、ぜひ明日から積極的に話しかけに行ってみてくださいね。

明日はフロント、バック、インフラとフルスタックに技術研鑽をし、競プロも嗜む情熱エンジニアの記事になります！


[参考記事]
[人見知り]https://ja.wikipedia.org/wiki/%E4%BA%BA%E8%A6%8B%E7%9F%A5%E3%82%8A
[なぜなぜ分析]https://ja.wikipedia.org/wiki/%E3%81%AA%E3%81%9C%E3%81%AA%E3%81%9C%E5%88%86%E6%9E%90
UnrealEngineのCesiumで指定範囲外と指定範囲内の非表示を組み合わせる

以下のようにUnrealEngineでCesiumCategraphicPolygonの指定範囲外（外枠）と指定範囲内（内枠）の非表示を組み合わせて地形表示を行う方法についてメモします。

![2024-12-05_11h59_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16768/4a2a01b1-6ef7-9819-84f4-00137d595784.png)

# 試した環境

* UE5.3.2
* CesiumForUnrealプラグイン2.3.0

# 参考

以下のUnrealEngineのCesiumのサンプルプロジェクトのLevel13 - Cesium Tile Excluderを参照しています。
CesiumTileExcluder自体は利用しませんがCesiumTileExcluderを使って中途半端に表示されているタイルを非表示にしているやり方を参考にしました。

https://www.fab.com/ja/listings/a58d2803-32ad-4e84-a80e-b33de7f33709

https://github.com/CesiumGS/cesium-unreal-samples/blob/main/README.md


# 前提知識

以下のような公式ドキュメントで地形表示できることやCesiumCategraphicPolygonを使って指定した範囲を非表示にできることが前提です。

https://cesium.com/learn/unreal/unreal-quickstart/

https://cesium.com/learn/unreal/unreal-clipping/

# 範囲外と範囲内の範囲内非表示の方法

1. あらかじめCesium3DTilesetをレベルに追加しておきます
1. 2つのCesiumCartographicPolygonをレベルに追加しておき範囲を設定しておきます
(以下の例だとCesiumCartographicPolygonの範囲内を非表示にし、CesiumCartographicPolygon2の範囲外を非表示にしたい)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16768/1a26df31-e1f1-dc0b-4deb-81da59a1c4cc.png)
1. マテリアルインスタンスを作成して、以下のように設定します
Layer ParametersのClipping1は既存のClippingを参考にして一番上に追加します
(Cesium3DTilesetのMaterialプロパティのソースにはMI_CesiumThreeOverlaysAndClippingをコピーして設定しろと書いてあるのでその方が良いかも)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16768/46ee32cd-e9a4-5a53-099a-95a1925a3b3a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16768/a158d906-13ef-105d-417f-3ffafed0bdc8.png)
1. 作成したマテリアルインスタンスをCesium3DTilesetアクタの[Cesium] > [Rendering] > [Material]に設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16768/82b51845-1f66-72d5-29d9-63bd5a906e6c.png)
1. Cesium3DTilesetにCesiumPolygonRasterOverlayコンポーネントを追加し、[Cesium] > [Polygons]に範囲内を非表示にしたいCesiumCartographicPolygonを指定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16768/e220756c-6fea-97c4-66c2-90ceccb9748e.png)
1. Cesium3DTilesetにCesiumPolygonRasterOverlayコンポーネントをもう一つ追加し、以下のように設定します
[Cesium] > [Polygons]に範囲外を非表示にしたいCesiumCartographicPolygonを指定します
[Invert Selection]をチェック、[Exclude Selected Tiles]をチェックしないようにして範囲外を非表示にします
[MaterialLayerKey]にマテリアルインスタンスで追加したClipping1レイヤーを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16768/287883ac-347a-f35a-d988-8158a862cf0b.png)
[CAIレシピ] 並列パスステップによる同時実行制御

## はじめに

並列処理を実装したい場合、並列パスステップを使用します。この記事では並列パスステップ利用時の動作を確認します。

なお、この記事は次の記事の内容を理解していることを前提としています。

- [はじめてCAIを使う際に](https://qiita.com/shunsuzu/private/12b8dbd08a30efa0003a)
- [プロセスの作成と実行(匿名認証と基本認証)](https://qiita.com/shunsuzu/private/01d91caedb92bd7781ea)
- [割り当てステップと、各種変数フィールドの利用](https://qiita.com/shunsuzu/private/fae696539cd245828848)

## 並列パスステップ利用時の動作

### CAIプロセスの作成

次の手順では、プロセス起動時の時刻を取得、待機ステップにより10秒待機後の時刻取得して、2つの時刻を呼び出し元に返すCAIプロセスの作成手順です。

1. CAIプロセスを次の設定で作成します。
    - 名称を __recipe-pca-stepParallel__ とする
    - __匿名アクセス__ を許可する
    - __クラウドサーバー__ にデプロイする
1. 出力フィールドとして __output1__,__output2__,__output3__ を __タイプ=テキスト__ で作成します。

1. 並列パスステップを追加してパス3を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/de945484-a784-5dbd-d572-6b03deff7d25.png)

1. 各パスに割り当てステップを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/9bb0379c-6ae9-3843-8281-8fe190e9a4a6.png)

1. 各割り当てステップを選択して __output1__,__output2__,__output3__ に __計算式__ として `fn:current-dateTime()` を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/8223fd2a-6925-fda4-6420-2fd902050b61.png)

以下、curlコマンドを例とした動作確認結果です。output1,output2,output3がおおよそ同じ日時となっていることを確認できます。

### CAIプロセスの実行

```:curlコマンドと実行結果
// curl コマンド
curl https://<IICS・CAIサーバー>/active-bpel/public/rt/<Org ID>/recipe-pca-stepParallel

// 実行結果(見やすいように整形しています)
{
  "output1": "2024-12-05T10:52:11.269Z",
  "output2": "2024-12-05T10:52:11.269Z",
  "output3": "2024-12-05T10:52:11.269Z"
}
```

## ジャンプステップ併用時の留意事項
次のように並列パスステップと[ジャンプステップ](https://qiita.com/shunsuzu/private/07da81c4301cbe5bfe9a)を併用した場合、ジャンプステップの遷移先は同一パス内のみ選択できる仕様となっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/2caeebe8-7591-e907-f0f0-b5f1375902fa.png)

## 参照

- [Qiita - IICS CAIの実装レシピ - マスターページ](https://qiita.com/shunsuzu/private/3d1971ef6e3b993516aa)
ログの保存期間の目安

    ##ログの保存期間について
SIEMの提案や実装をしているとログの保存期間ってどうすればいいですかね？とご相談いただくことが結構あります。

基本的には組織のポリシーや要件に合わせて決めていただく形になると思いますが、私はよく下記の資料を参考にしています。

出典:企業における情報システムのログ管理に関する実態調査
https://www.ipa.go.jp/files/000052999.pdf


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936334/2bd83108-36b9-9a2a-2a12-9de0e275e9b2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936334/ef69492b-a73d-86d0-407b-e852200a0015.png)


※現在上記はリンク切れになっているようですが、こちらで確認できます。
https://warp.da.ndl.go.jp/info:ndljp/pid/11440710/www.ipa.go.jp/files/000052999.pdf

感覚的には、多くの方が1年間を基準にされている気がします。
NISC,SANS,PCI DSSのガイドの影響が大きいのかもしれません。

Splunk(Cloud)で長期間ログを貯める場合だと、DDAS(データがすぐにサーチ可能になるストレージ)、DDAA(すぐにはサーチできないが安いアーカイブ用ストレージ)のどちらかを選ぶケースが多いです。

詳細はこちら：https://www.splunk.com/ja_jp/blog/platform/dynamic-data-data-retention-options-in-splunk-cloud.html

何かあった時の調査用に1年くらいはSIEMにログを貯めておく方が良さそうですね。
【Agile Japan 2024 参加レポート】 AIと人のすみわけ

昨年に続き 今年の11/21-11/22に開催された Agile Japan 2024に参加しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116272/0912e158-2c05-61d9-e77f-06e2cb686a16.png)


## People-Centric-Agile

今回のイベントテーマは「People Centeric Agile」
生成AIの普及など技術は進歩するが、あくまで人を中心として考えていこう。

## AIと人 についての話題が多数

全体的に「AIと人」についての話題が多かったです。
複数の登壇者が、AIに任せられるのは「作業」、AIではなく人間がやるべきは「意志決定」だという共通見解を示していたことが印象的でした。


## 印象的だった「生成AI時代における人間の情熱とプロダクト志向」（及川さん）

「情熱駆動開発」というワードを中心に、「AIと人」のすみわけなどについても言及していました。

人間にしかない「情熱」を起点に下記のような内容を話していたことが印象的でした。
- 「内発的な動機」が「情熱」に繋がること
- 「意思決定」のような正解がなく、様々な複合要素をもとにトレードオフを判断するようなことこそ、AIには任せられず、人の「情熱」が必要となってくるということ。


## 「不確実性を乗り越える！ネットバンキング開発の挑戦」（奥村さん）

私も一緒にスクラムの支援という形で一緒に関わらせて頂いている奥村さんが登壇。
先の見えない暗闇な状態だったネットバンキングの開発プロジェクトを、
内製化チームがアジャイル開発へのチャレンジを通じて、リリースできるまで改善したというストーリーを「混沌期」「見直し期」「停滞期」などの時期に分けていて分かりやすかったです。

その成功の要因は シンプルに
アジャイルとして当たり前のことを真摯に行ったこと

- リリースバーンダウンチャートで各スプリントの開発状況を可視化し、サービスインの時期を日々予測し続けること
- ステークホルダー、経営/役員なども巻き込んで一緒にプロダクト作りをすること

私もこれに同感で、まさしくアジャイルは「言うは易く行うは難し」なものであると感じています。

## People-Centricリーダーシップとは（ロッシェルさん）

実際に日本をはじめ様々な企業にて、アジャイルを根付かせるために尽力しているロッシェルさんからは、今回のテーマとなる「People-Centric-Agile」についての話を聞くことができました。
今後求められるリーダーシップの要素などについて言及していました。

- やっている仕事は人々を幸せにすることを目的とする場合、その仕事を通じてチームメンバーも幸せになっているかを考える必要がある
- 仕事の進め方は人間中心であり、人間性を尊重した形であるべき

そのためにリーダーシップに必要な5つの要素

- 共有されるビジョンを鼓舞する 
- 従来のやり方を見直す 
- チームメンバーの行動を支持する 
- 模範になる 
- 心から励ます


## ブース

一緒に行った当社メンバーと一緒に、永和システムマネジメントさんのブースで『AGILE PRACTICE MAP』の冊子を頂きました。
アジャイルを進める上で必要なものが、サッと見れるので、手元に置いて活用していきたいと思います。

## まとめ

去年に続き AgileJapanに参加して、色々な気付き、良い刺激を受けることができました。
社内でも、イベント参加のフィードバックなどを行い、還元していければと思います。
さいごに、素敵なイベントにしてくれたAgileJapanの開催者、登壇者、参加者のすべての方に感謝！
Routeについて知ってみる(Laravel11)

# 概要
今回はRouteを利用してURLから指定されるパラメータをサーバ側で受け取ることについて知ってみます。
Routeについて簡単に説明するとパスが設定されているアドレス以外はアクセスが不可になります。
つまり、不正なアドレスからアクセスが不可ということです。

# 事前準備
Laravel11の環境がすでに準備されている方はこの事前準備はスキップしても大丈夫です。
Raspberry環境でLaravel11環境を構築については下記の記事を参照してみてください。
■Raspberry PIにLaravel11をインストール

https://qiita.com/neomi/items/ffb54af8b5597b3fc54d

■Hello World出力(Laravel11)

https://qiita.com/neomi/items/8dd20390b51d5d93db24

# URLに指定されたパラメータの値をサーバ側で受け取る
①次のソースコードを「routes-web.php」に追加します。
「{name?}」の指定にて「？」がない場合は、必ず値の設定が必要です。そして{name ?}はパラメータが正しく指定されても値が画面に正しく表示されないです。
※「？」はNULL値を許容することです。
$name=nullはURLに値が指定されなかったらNULLに設定されます。もしここで$nameのように宣言した場合は、URLにパラメータの指定がない場合は、404エラーになります。
~~~php
Route::get('/user/{name?}', function ($name=null) {
    return 'Hello, '.$name;
});
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162336/4bd49a0d-347c-bf7a-feaa-d0bf1043117e.png)
②次のURLを確認します。
確認URL:http://192.168.1.65:8000/users/tanaka
③次のようにURLに指定されているパラメータがサーバ側に渡された値を画面に表示ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162336/4d10b7c7-c0e5-f1b4-3a77-f772a5ce3039.png)

# URLに指定されたパラメータの値を正規表現で制御
①次のソースコードを「routes-web.php」に追加します。
下記の正規表現では「0-9a-zA-Z」+から始まるproductIDの場合は正常に画面が表示されます。正規表現に対象外の場合は、404エラー画面が表示されます。
~~~php
Route::get('/product/{id}', function ($id) {
    return response("Product ID:{$id}");
})->where('id','[0-9a-zA-Z]+')
;
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162336/f1c8ffc8-ccc9-dbc5-af2f-9771b733b7b6.png)
②次のURLを確認します。
確認URL:http://192.168.1.65:8000/product/aaaa
③次のようにURLに指定されたパラメータをサーバ側に渡してその値を画面に表示ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162336/2888ab91-0f65-ef2e-83ff-36d9eca35d78.png)

# print_rの代わりにLaravel11ではdd($XXXX)を利用
①画面から受け取った値を画面に出したい場合は、次のコードに修正します。
~~~php
Route::get('/users/{name?}', function ($name=null) {
    dd($name);
    return 'Hello, '.$name;
});
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162336/d29be588-0a39-b22e-2b8a-b4fba55457a4.png)
②次のURLを確認します。
確認URL:http://192.168.1.65:8000/users/tanaka
③次のようにURLに指定されたパラメータをサーバ側に渡してその値を画面に表示ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162336/6d3db7a9-add7-5232-113c-93bb9fb8d80a.png)

# requestのすべての値を画面に表示
①次のソースコードを「routes-web.php」に追加します。
※「use Illuminate\Http\Request;」も追加してください。
~~~php
Route::get('/search?name=tanaka&age=55', function (Request $request) {
    dd($request);
});
~~~
②次のURLを確認します。
確認URL:http://192.168.1.65:8000/search?name=tanaka&age=55
③次のようにURLに指定されたすべてのパラメータが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162336/5cae3306-d6dd-e6d2-0064-b74ca08c01fa.png)

# 終わりに
今日はURLに指定されるパラメータの値を取得及び指定する際に正規表現でデータ入力の制限、画面から取得可能な$requestの値を確認してみました。
次回はHTMLテンプレート側になるblade templateについて確認しましょう。今日はここまでです。ありがとうございます。
トランスポート/データ・リンク・プロトコルの違い

# トランスポート・プロトコル、データ・リンク・プロトコルの環境の違い
>トランスポート・プロトコルはデータ・リンク・プロトコルといくつかの類似点がある。両者ともフロー制御などの問題がある。

>両者の大きな違いは、図6-7に示すようなプロトコルの動作する環境の相違によるものである。データ・リンク層においては、２つのルーターが`有線でも無線でも物理チャネルを介して`直接的に通信するが、トランスポート層においては、物理的チャネルではなく`ネットワーク全体を介して`通信することになる。この違いは、プロトコルに関して多くの重要で暗黙的な意味を持つ

### ホスト同士の接続も手間がいる
>銅線や光ファイバのようなポイント・ツー・ポイントのリンク上では、`通常はあるルーターがどのルーターに繋ぎたいのかを指定する必要がない`。物理的な線によって繋がるルーターが一意に決まる。一方、トランスポート層においては`明示的な宛先のアドレッシングが要求`される

### コネクション確立も複雑
>もう一方にはデータ・リンク層では図6-7(a)の`有線上におけるコネクション確立の手順が単純`である。相手はクラッシュしていない限り、常に同じ場所に存在し、コネクション確立ですべき作業はほとんどない。`無線リンクであっても処理内容はあまり変わらない`。
...
`トランスポート層のコネクション確立手順は複雑`である。

### トランスポート層のコネクション数は多い
>`両者ともバッファリングとフロー制御を必要`とするが、`トランスポート層のコネクションの数は非常に多くまた大きく変動`する。さらに、お互いに競合するコネクションによって帯域が変化するので、データ・リンク層とは異なるアプローチが必要となる。
...
各回線に固定数のバッファを割り当てることにより、フレームの到着時に常に利用可能なバッファがあるように保証するが、トランスポート層においては、`管理しなければならないコネクションが非常に多く、受信する可能性のある各コネクションの帯域の変化も多い`ので、多くのバッファを一つのコネクションに割り当てるという方法が使えない。

https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/
先輩とやったペアプロが良かった話

:::note info
この記事はZOZO Advent Calendar 2024 シリーズ7の5日目の記事です。
:::

## はじめに
先日技術力向上を目的とし、業務のコードとは別にチームの先輩とペアプロをしました
ペアプロにも様々な進め方があると思いますが今回やったペアプロが面白くかつ学びに繋がったので紹介してみよと思います

## ペアプロとは
ペアプログラミング（ペアプロ）とは、2人の開発者が1つのコンピュータを共有し、コード書く"ドライバー"と、コードや設計などに対してアドバイスをする"ナビゲーター"に分かれ協力してコードを書く手法です

## 進め方
今回は自分がドライバー、先輩にナビゲーターをやってもらいました
VSCodeの[Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare)という拡張機能を使って

### お題(実装するもの)
まずはお題を決めます、基本的になんでもいいのですが今回は自作の`JSON.stringify`作成することにしました

### テストを書く
今回はいきなり完成させるのではなく、仕様を分解してテストとして書き出してもらいそのテストを一つ一つパスさせることで最終的に完成を目指すテスト駆動開発っぽい進め方を取りました

なので、VSCodeの[Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare)という拡張機能を使ってエディタを共有し先輩にテストを書いてもらいます

ちなみにテストは以下くらいのかなり細かい粒度で書いてもらいました

```ts
it('空のオブジェクトをシリアライズすると"{}"になる', () => {
  expect(stringify({})).toBe("{}");
});
it('trueを渡すと"true"になる', () => {
  expect(stringify(true)).toBe("true");
});
```

### 実装
テストを元に自分の方で実装を進めていきます
沈黙な時間が続いてしまうとペアプロをやる意味が薄れてしまうので、実装する際"これからどのような実装をするのか","今どのような実装をしているか"などの思考を常に声に出すことを意識しながら進めました

わからない部分は都度質問し、必要に応じて調べていきます
一発で答えが出てきてしまう可能性があったので、今回は調べる際基本的にMDNのみを使うなどのルールも事前に作りました

### 完成
テストを一つ一つパスするための実装をしているとどうしてもコードが冗長になってしまうので適宜リファクタも挟んでいきます

テストと実装を複数回繰り返し、仕様を全て網羅することで最終的に実装完了します

## 感想
特に良かったなと思った部分は"思考を常に声に出す"ということです
普段自分がいかに何も考えずにコードを書いてることを痛感できたり、間違って覚えていた部分をただしてもらうことができたり、言語化する能力が培われたり
など様々なメリットがりました

## おわり
今回はやって良かったペアプロについて簡単にまとめてみました！
ペアプロにも様々な進め方があると思うので、いろんな方法でのペアプロも試してみようと思います
ペアプロをより有意義な時間にするために以下を参考にしたので興味がある方はぜひ読んでみてください！

https://gist.github.com/j5ik2o/2970973
Blazor WebAssembly のアプリに Google Analytics を導入

# やっぱりアクセス状況を知りたい

Blazor WebAssemblyで開発して公開している[マークシートシステム Mark2](https://omr.mark2.org/) には2種類の利用形態があります。

ひとつは私が関連している大学や企業等のプロジェクトで利用している場合で、いつ頃に利用する予定があるのか、私の方でも多少は把握できています。利用することがわかっている時期には大きなアップデートを避けるなど、開発やメンテナンスのスケジュールを調整していました。

もうひとつは無料のマークシートシステムをインターネットでさがして Mark2 を見つけ、 [Mark2 テンプレート](https://mark2.sfc.keio.ac.jp/ja/templates)を利用している場合です。こちらの場合は私のほうでは利用状況を把握していなくて、問い合わせをいただいた際に利用されていることを知ることになります。

2022年頃から問い合わせが増えてきたように思います。 Mark2 は自治体や学校で利用されることが多く、自治体や学校がよく利用する時期などの傾向もあるかと思います。今後の運用のためにアクセス状況は把握しておこうと思いました。

# Google Analytics を導入

Perplexity に聞いて、作業していきます。

https://www.perplexity.ai/search/blazor-webassemblynoahurinigoo-lK7O9drrQceLmledJrwDKA

Google Analytics にプロパティを追加して、 `G-XXXXXXXXXX` の ID を取得します。

## wwwroot/index.html の編集

`</head>` の直前に以下のコードを追加します。

```html:wwwroot/index.html
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-XXXXXXXXXX');
</script>
```

## ‎App.razor の編集

Mark2 はトップページのみのアプリなので `wwwroot/index.html` を変更すれば完了なのですが、画面遷移のための変更もしておきました。

```diff_c_sharp:App.razor
+ @inject IJSRuntime JSRuntime
+ 
- <Router AppAssembly="@typeof(App).Assembly">
+ <Router AppAssembly="@typeof(App).Assembly" OnNavigateAsync="OnNavigateAsync">
    <Found Context="routeData">
        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
        <FocusOnNavigate RouteData="@routeData" Selector="h1" />
        </LayoutView>
    </NotFound>
</Router>

+ @code {
+     private async Task OnNavigateAsync(Microsoft.AspNetCore.Components.Routing.NavigationContext args)
+     {
+         await JSRuntime.InvokeVoidAsync("gtag", "config", "G-XXXXXXXXXX", new { page_path = args.Path });
+     }
+ }
```

# 動作確認

Google Analytics でアクセスを確認することができました。

![Google Analytics](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238166/e37d22d2-b03f-5365-e0f6-a05e905d2923.png)

アクセス状況を考慮して Mark2 の開発やメンテナンスを進めていきたいと思います。
【Excel-Tips】シート移動のショートカット



## 本記事で実現できること
- Excelでシート移動をショートカットキーで行う


## ショートカットキーの説明
- Ctrl & Fn & PgUp/PgDn
- 上記でダメな場合、F6 & ←/→
    - F6でカーソルがシートにあたる

## まとめ
本稿が、Excelでシート移動をショートカットキーで行いたい時の関数を知りたい方の参考になれば嬉しいです。

ITエンジニア向け、AWS資格取得を目指す方向けに個人ブログで記事も投稿していますので、
合わせて読んでもらえると嬉しいです。
[ことなの学校(個人ブログ)](https://kotona-school.com)

更によりレベル感の高そうなAWS関連の発信はZennの方で行います。
こちらももしよければフォロー、ご確認いただけると嬉しいです。
[Zenn個人アカウント](https://zenn.dev/tomo_itbizblog)

Twitterでも役立つ情報を発信しますのでフォローしてもらえると嬉しいです 
→ [@tomo_ITBizBlog](https://twitter.com/tomo_ITBizBlog)
はっぴーあびおにくす

# はじめに
　私はGardens4号機、Avionics担当のデカです。
 なぜタイトルが「はっぴーあびおにくす」なのか？と思った方もいらっしゃると思います。
　これはもうどうにでもなれ。という筆者の思いが詰まっています。
なぜ、当日に書くことになるのか...

　今回は、担当個所ではないのですが、超小型人工衛星における、太陽光パネルの貼り付けについて話そうと思います。

# 太陽光パネルの貼り付け
　太陽光パネルの貼り付けですが、手作業で行っています。具体的には太陽光パネルを接着剤で取り付け、電極をはんだしています。以下にその手順を示していきます。
 
 ### ①太陽光パネルの選定
 　まず太陽光パネルの中から汚れのないものを選びます。
　その後、質量を測り、太陽光パネルの識別番号をメモします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952547/10fff18f-a037-ade8-07c7-108a46bea00b.png)


 ### ②基盤の準備
　次に太陽光パネルを載せる基盤用意し、太陽光パネルがおかれる位置の外枠をシリコンなどを用いて固定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952547/a1a0fa03-c191-4373-9a0e-3133c1982457.png)


### ③接着剤の塗布
　太陽光パネルを載せる部分に接着剤を塗布します。基盤部分には絶縁性の接着剤を、電極部分には導電性の接着剤を用います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952547/a32da17c-41e2-ad84-a77a-7622bbe5d4e2.png)


### ④太陽光パネルの設置
太陽光パネルを接着剤の上からゆっくりと置きます。
（この時が一番緊張します）
その後、接着剤の固定時間待機です。
（なお、Gardensが採用している接着剤の固着は24時間です....長い....）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952547/bbf93050-2719-1da0-76ad-2aaeb978c469.png)

### ⑤電極のはんだ
　電極をはんだします。その際、太陽光パネルに半田ごてを当てないように気を付けなければなりません。割れてしまった場合その太陽光パネルは使えなくなってしまうので...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952547/ef85e726-5ffc-5b64-a96f-13275738890f.png)


  # おわりに
  　こういった文章は初めて書くので、分かりにくい部分も多々あったと思います。申し訳ないとは思いますが、文句は私を担当者にした方に言ってください。

   追記：締め切りが-13時間になってしまった....
【Dart】call関数を用いてクラスのインスタンスを関数のように扱う

この記事は、【 可茂IT塾 Advent Calendar 2024 】の4日目の記事です。

Dartには、クラスのインスタンスを関数のように扱えるcall関数というものがあります。call関数を使うことで、コードの簡潔性や可読性を向上させることができます。call関数の使用方法、メリットを紹介します。

# 使用方法

まず、基本構文は下のようになります。

```dart
class クラス名 {
    戻り値の型 call(引数) {
        // 関数の内容
    }
}
```

例は下のようになります。

```dart
class Greeter {
    String call(String name) {
        return 'Hello, $name!';
    }
}

void main() {
    final greeter = Greeter();
    print(greeter('gurasan0110')); // Hello, gurasan0110!
}
```

このように、インスタンスを関数のように呼び出すとcall関数が実行されます。

# メリット

<dl>
    <dt>簡潔なコード</dt>
    <dd>クラスをインスタンス化した後、関数のように直接使えるためコードがシンプルになる</dd>
    <dt>可読性の向上</dt>
    <dd>インスタンスの意図的な動作が直感的に理解しやすくなる</dd>
    <dt>柔軟性</dt>
    <dd>ロジックをカプセル化しつつ、関数のようなインターフェースを提供できる</dd>
</dl>

# まとめ

Dartのcall関数を使うと、クラスのインスタンスを関数のように扱うことができ、コードの簡潔性や可読性を向上させることができます。様々な場面で活用できる柔軟な機能なので皆さんも使ってみてください！
【Unity】InputSystemを使った移動

雑ですがよろしくお願いします...

:::note info
今回はTransformを使います
:::

# 環境
Unity6

# InputActionの作成
左クリック > Create > InputActions
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3741258/f92166dc-656e-f395-c1b8-4d02f8f8b656.png)
それぞれ＋を押し設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3741258/14c3d2a3-cd4d-e88f-cc36-40ce9294996a.png)

MoveのActionProperties
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3741258/6cdd1ecb-76d2-1214-3603-97b91eb7456f.png)
### WASDの作り方
Moveの右にある＋を押すとUP～とあるのでそれ押す
自動で4個作られるのでそれぞれにPathを設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3741258/31131a3c-33ea-ec90-f360-33d6d8b44ead.png)

:::note info
Saveを忘れずに
:::


# コード
スクリプト名は何でもいいです
今回はPlayerBehaviorという名前で作った
```c#
using UnityEngine;
using UnityEngine.InputSystem;
using static UnityEngine.Rendering.DebugUI;
using UnityEngine.Windows;
using UnityEngine.UIElements;

public class PlayerBehavior : MonoBehaviour
{
    public float moveSpeed = 10f;
    public float deadZone = 0.2f;

    private Vector2 moveInput;

    private void FixedUpdate()
    {
        // 前方
        if (moveInput.y > deadZone || moveInput.y < -deadZone)
        {
            transform.Translate(Vector3.forward * moveInput.y * Time.deltaTime);
        }
        // 左右
        if (moveInput.x > deadZone || moveInput.x < -deadZone)
        {
            transform.Translate(Vector3.right * moveInput.x * Time.deltaTime);
        }
    }

    public void OnMove(InputAction.CallbackContext context)
    {
        moveInput = context.ReadValue<Vector2>();
    }
}

```

適当にオブジェクトを出して作成したスクリプトをAddする
ついでにPlayerInputもAddする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3741258/e51ea896-01bc-9d00-a662-1c6001e7e756.png)


# Player Inputの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3741258/319a261d-ffab-51b2-2f5b-39401b5b8e6f.png)
Actionsに先ほど作成したInputを設定
BehaviorをInvokeに（InputAction.CallbackContext context使ってるときはこれ）
Noneの所に、スクリプトをアタッチしたオブジェクトを入れNoFunctionのところをOnMoveにする

:::note warn 
OnMoveがない場合→スクリプトでOnMove関数のアクセス修飾子（publicとかprivateのやつ)がpublicになっているか確認
:::
![無題の動画 ‐ Clipchampで作成.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3741258/d1a8965d-578c-15b4-62e2-724057535bd6.gif)

再生して確認

おわり
iTerm2の使い方と推しポイント

# 概要

Mac使っている方、
ターミナルはプロファイルで色を変更できるのは知っていますか？
ただ、既存の色はかっこよく＆可愛くないし、独自で作成するのはちょっとよくわからん・・・
カスタマイズもよくわからないしな〜
というかターミナル以外のアプリって何？

そんなあなたにはiTerm2をお勧めします！！

# インストール方法

下記にアクセスします
https://iterm2.com/

画面のDownloadをクリック
![スクリーンショット 2024-12-05 12.05.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070807/1f77bc70-878c-0479-182a-09c4903d324f.png)

ダウンロードできたら、zipファイルを展開し、
iTerm2を開き
![スクリーンショット 2024-12-05 12.11.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070807/851a6b85-e63a-4bd6-8c74-fd8c27a22608.png)

「Move to Applications Folder」をクリック
![スクリーンショット 2024-12-05 12.14.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070807/28476b3b-f6d0-c42e-90d5-0d596c3735f2.png)

次の「Check Automatically」をクリックします。

以上でインストール完了し、iTerm2が開いているはずです。

# iteam2の推しポイント
### ① いろいろな見た目のカスタマイズが出来る
まず見た目のカスタマイズをしましょう。
設定画面は ⌘, で開きます。

- 　透明度を変更する
好き好きですが、私はほんのり透けてるのが好きなので、10にしています。
iTerm2 > Preferences > Profiles > Window > Transparency

- 　ブラーをかける
これをかけると、透明度が高くても文字が見えにくくなりにくいです。
こちらも10にしていますが、好みで透明度と一緒に変更してみてください！
iTerm2 > Preferences > Profiles > Window > Blur

- 　カラーを変更する
下記で文字の色を変更できます。
iTerm2 > Preferences > Profiles > Colors > Color Presets

下記にいろいろなテンプレートもあるので好きなウィンドウの色・文字の色を探してみましょう！
https://iterm2colorschemes.com/

使い方は、好きなカラーの名前をクリックし、右クリックの別名で保存を押し、
![スクリーンショット 2024-12-05 12.30.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070807/870ebc0b-e8dc-393f-ba24-66d398d541bd.png)

拡張子.itermcolorsで保存します。
（デフォルトだと.txtがついてしまうので消して保存）
![スクリーンショット 2024-12-05 12.31.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070807/016c5fdd-94b8-e185-5167-a939fd8a853a.png)

iTerm2 > Preferences > Profiles > Colors > Color Presets
を開き、importを選択します
![スクリーンショット 2024-12-05 12.32.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070807/1d920084-34b3-677e-2f70-ff250588c901.png)

さきほどダウンロードしたファイルを読み込み、再度設定を開き直したら追加されます。
![スクリーンショット 2024-12-05 12.34.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070807/8c2534ad-0be4-cb24-e6c5-92a411abfc01.png)


### ②　柔軟性と操作性
1. 画面分割
縦に画面分割
command + d
![スクリーンショット 2024-12-05 12.41.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070807/3f6353e9-516d-f332-d8a4-ec4ec2f3a174.png)

2. 横に画面分割
command + shift + d
![スクリーンショット 2024-12-05 12.41.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070807/7620ac9e-e41c-4959-1e7d-85b16c0e3335.png)


3. ショートカットキー
新規タブ作成
command + t
タブ移動
command + 左右の矢印キー
タブを閉じる
command + w

他にも色々なショートカットキーがあります。
下記記事が参考になるので覚えると作業効率アップ！
https://qiita.com/0084ken/items/8aefabef4fd3cfdf8fce

### iTerm2ウィンドウを呼び出すためのHotkey設定
iTerm2 > Preferences > Keys > Hotkey

使いやすいキーを設定しておくことで、VSCodeを開きながらiTerm2のウィンドウを出したりしまったりできます。
個人的に一番欠かせないポイント！

## 最後に
ターミナルがいい感じになるとプログラミングも楽しくなりますよね！
たまに模様替えして気分を変えるのもいいですよ！
ぜひiTerm2を使っていろいろアレンジしてみてください！
【一般】コメント機能 (モード: レポートレベル）

# はじめに #
Sharperlightには、コメント機能があるので、今回はそれを確認していこうと思います。
これは、他のユーザーがリアルタイムで確認できる注記を、レポートに追加できる機能です。
SharperlightのWEBレポート及びExcelレポートで動作します。

# コメント機能の組込み #
今回はWEBレポートで確認します。
Sharperlightのアプリケーションメニューより、パブリッシャーを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/16c24624-bbeb-fa94-f5db-36e1ab57730e.png)

新規を選び、コード、グループおよびタイトル等を記入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/47f5355e-bc66-b264-2dee-b41defa62b5a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/cfe03118-4001-2afc-c6d2-9f549561d7b5.png)

クエリの編集を行い、以下のようなクエリを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/1ae77302-8274-d77a-bdd1-7454a35d0f5e.png)

右クリックメニューより、**コメント**を選択します。
コメントマネージャーが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/90da2c04-3307-2811-5096-5653b0a445d5.png)
**ユニークコード**は既定値を使用、**モード**は、`レポートレベル`使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/fccd8cd2-ff84-5079-22f6-7c6564d3d15c.png)

`OK`をクリックして保存します。クエリー及びレポートも`OK`で保存します。

Sharperlightサービスを起動して、レポートをブラウザで見てみます。
このような普通のレポートが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/78941466-30e5-075a-c7e6-2f79d136b1af.png)
右クリックメニューより`コメント`を開きます。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/ad54fc04-fea7-10ce-92b6-89feaa821414.png)
コメントエディターが表示されます。`レポートレベル`のコメントなので、このレポートを閲覧できるユーザーは皆、このコメントを利用して会話できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/124674d3-18a5-728e-0990-e74059aa2ec3.png)
レポートのこのオプションを使用するとコメントアイコンをレポートに表示できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/11903cd7-31db-5711-4a77-8bebd44bfe54.png)
既定ではレポートの右端に表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c1db6625-4f2e-365e-030a-efebcd697095.png)
右端がいやな人は、レポートのCSSオプションで場所を変えられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/fee7f4af-d2c5-dc3f-5f07-3b11af96b1fe.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/8f65bd16-da5f-ef71-27f2-163b7f95e62c.png)

```
<style type="text/css">
#sl-options-annotations{
	left: 180px !important;
	top: 6px !important
}
</style>
```
表示位置は、レポートタイトルの長さ等に応じて調整します。今回は180pxが丁度いい感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/b54a1870-97cb-dc9d-c024-67d6e7af5af5.png)

# あとがき #
グループやある特定のユーザー等で共有するレポートにおいて、このような会話機能があれば何かと便利なのではないでしょうか。
論文要約 #2 Semantics-Aware Image Aesthetics Assessment using Tag  Matching and Contrastive Ranking

### はじめに
これは論文について簡単にまとめたものである．
画像に対する美的評価における論文の主張として，特徴量生成の工夫，モデル構造の工夫，特徴量の扱いに工夫の3つに対してどこを重視するかに分けられる．この論文は，特徴量生成の工夫にあたる．

### 既存手法の問題点
- 既存手法において美的評価を行う際に，画像のテーマ（ボヤけ，厳しい環境等）や，ラベル（風景，犬，夜景），美的属性（光，balanced, unfocused）のような，情報をモデルに明示的に与えることで，予測性能が向上するということは，先行研究で明らかである．
- しかし，これらの問題点として，似たような意味的な背景間の画像に対して，そのスコア別の相対的な特徴の違いを明示的に学習していないため，モデルは同じ意味文脈の中で，美的区別を効果的に識別し，知覚することができない可能性がある．（以下の画像のように，sematicがbridgeだった場合，その中でも，美的属性の違いと，美的スコアの違いがあるが，既存研究ではこれを明示的に相対的な学習を行っていない）

![スクリーンショット 2024-12-05 12.26.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627192/27545379-a704-967b-9208-f97ad1efe571.png)

### 提案手法
- そこで，本研究ではsemantics-awareなtag matching と contrastive rankingを用いた美的評価モデルを提案する．これは，意味的背景で画像をクラスタリングしたとに，その中での美的属性と美的レベルの違いを考慮した美的評価モデルである．
- 事前に作成したsemantic library と attribute libraryから入力画像に対するtag mathchingを行う．その後，ClIPにより，特徴量ベクトル化を行い，画像特徴量とtag特徴量に対してcos類似度をとる．
- contrastive rankingについては，CLIPにより得られたsemantics空間ないで，美的スコア別にtrabersalな相対学習を行う．これにより，似たsemantics内での相対的な美的評価を可能にする．
- 
- 
![スクリーンショット 2024-12-05 12.33.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627192/6e426268-5a64-c02f-c401-d1bb9a06ca89.png)

### 結果
結果としては，SOTA手法よりも上回った．
社会人のエンジニアがCA Tech Loungeに入会するメリット

こんにちは、Yoichiroです！

本記事は、[CA Tech Lounge](https://www.cyberagent.co.jp/careers/special/students/tech_lounge/)のアドベントカレンダーの記事になっています。
(他の方の記事は[こちら](https://qiita.com/advent-calendar/2024/catechlounge)から！)

僕はエンジニアとして企業に所属しており、業務を終えてからCA Tech Lounge(以下ラウンジ)へ行って個人学習などをしています。
ラウンジの会員は高校生から社会人まで幅広い年齢層の人がいますが、今回は社会人がラウンジに入会してみてよかったなーってことを書いていこうと思います。

# ラウンジに入会する前の自分
- モチベーションはあるが個人学習だけだと**継続が難しい**
- エンジニア同士のつながりがなく、**情報が入ってこない**
- **学習したい**内容はあるが、どれから学んでいくべきか判断しづらい
- キャリアアップを考えているが現職の同僚には**相談**しづらい

キャリアアップを考えていたので精力的に学習していましたが、そのモチベーションを発揮できる場所がなく物足りない感を抱きながら日々を過ごしていました。

![学習がしたいです.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3815410/496eb04e-6025-1a62-88d6-34546aad9087.png)

# ラウンジに入会してみて
## とにかくモチベーションの高い人が多い
学習をするときに一番難しいのが**モチベーションの管理**だと思います。
僕も自宅やカフェなどで学習しようとするとどうしてもサボってしまうこともあって(ダメ人間)、ラウンジに行くと**いつも誰かしら**いて、熱心に学習していたり技術やキャリアについて議論していたりして、そういう姿を見ると自分ももっとやらないとなと刺激を受けます。


## 情報感度の高い学生エンジニアが多い
比率的には**7~8割が学生**なので、みんな学習意欲が高く新しい技術なども積極的にキャッチアップしてる人が多いです。
カンファレンスに参加したりコンペに出たり、チャットにはいろんな情報が流れてくるので刺激も受けますし、単純に自分が知らなかった情報も入ってくるので非常に助かってます。

## サイバーエージェントのエンジニアにキャリアや学習について質問できる
ラウンジの会員には一人一人にメンターがつき、学習方法や自信に今何が足りていなくて何を学んでいきたいかなどを**具体的な目標**を立てて、追っていく形で学習を実施します。
ちなみに自分の目標は「マネタイズできるWebアプリケーションの開発」なのでメンターの方とは方針を相談したりキャッシュなどの技術について質問したり、たまにキャリアのことを相談したりしてる感じになります。

## エンジニアのつながりが持てるようになる
エンジニアコミュニティなので当たり前と言えば当たり前ですが、自分は社会人になった後でプログラミングを学習し始めた分類の人間なので、エンジニアの知り合いやつながりがありませんでした。
ラウンジの会員には様々な分野のエンジニアが所属していて、バックエンド、Webフロント、iOS、機械学習/データサイエンス、ゲームクライアントなどなど、幅広く在籍しているので自分の専門以外の人ともコミュニケーションをとって学習できますし、コラボレーションして何かを開発したりもできます。
また、職場の方達はあまり技術には興味がなくモチベーションも低そうだったので自分1人で勉強会などに参加していましたが、どうしても1人だとなかなか声をかけづらいですし、実りのある勉強会にはなっていませんでした。
しかしラウンジは渋谷のAbema Towersに**会員スペース**があり、環境自体がコミュニケーションを取りやすくしてくれています。

![仲間.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3815410/3a53b8a5-dd13-5466-4814-b0f472ad79e7.png)

## チームを組んでコンペにでたり開発したりできる
現在僕は「[**ISUCON**](https://isucon.net/)」というコンテストに向けてラウンジのメンバーとチームを組んでコンテスト当日に向けて学習しています。
ISUCONは簡単に言うとわざと**ものすごく遅く**（重たく）作られたWebアプリケーションを渡されるので制限時間内にできるだけパフォーマンスを上げて点数を競うコンテストで、ラウンジ生の学生が一緒に出るメンバーを募集してたのでいい機会だと思い一緒に参加させてもらうことになりました。
正直なことを言うと「ISUCON」と言うコンテストの存在もラウンジで初めて知りましたし、1人でも参加はできますがそれは少し腰が重いし、ラウンジに入っていなければ誰かを誘って出ることもなかったと思います。

# ぜひ社会人もラウンジへ！
総括すると学習意欲は刺激されるわ現役のつよつよエンジニアがメンターについてくれるわ意欲を発揮する場所まで提供してくれるわでメリットしかないと感じています。
ラウンジは平日の8時から22時までが開館時間なので、土日に使えないという点はありますが学生にはもちろん意欲のある社会人の方（実務未経験の方も）にもとてもいい環境だと思います。

ぜひご入会をお待ちしています！
出力結果をカラフルにする

# 出力結果をカラフルに
プログラムの出力結果に色を付けれることを最近知りました。
とてもおもしろいと思ったのでそのコードをvisual studio codeでjavaを使い、作って遊んでみました。
# コード、実行結果１
　![スクリーンショット 2024-12-05 105613.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943855/15e29b20-db4c-6a4f-72a7-1d42bb826c2a.jpeg)
 
まず、色を付けて文字を出力できるかをhelloで出力してみました。
 
　![kekka.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943855/986da408-b789-86d6-88a0-af28cf12f1e5.jpeg)

実行結果はこのようになりました。
helloが様々な色で出力されておもしろいと思いました。

# コード、実行結果２
次にこの色をhelloの一文字ずつに適用してカラフルにするものをやってみました。

![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943855/a0d22e8f-d657-be05-5f3b-5c5a68a332b3.jpeg)

![kekka2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943855/875a147f-0ec7-03f5-079d-a97fb965b457.jpeg)
　↑
実行結果はこのようになりました。
一文字に色を適用することができました。一文字ずつに適用する方法を色々調べながら作ってみることができて良かったです。

# まとめ
学校でプログラムを習っていて、プログラミングでは様々なことができると改めて実感しました。色々調べたら、ちょっとしたゲームだったり、計算や出力結果をおもしろくでき、やってみたいと思いました。今回作ったものでも他の色を試してみたり、プログラムの書き方などをもっと勉強していきたいと思いました。
WindowsServer2025RemoteAppで日本語入力がおかしくなる

WindowsServer2025においてリモートデスクトップのRemoteAppでアプリケーションを公開した際、日本語入力の動作がおかしくなった。
アプリケーションがフリーズしたり、入力した文字が半角で入力されたりすることがある。
キーを押しっぱなしの状態になってしまうこともあった。

※クライアント側のOSがWindows11の場合の症状のよう。Windows10では再現しなかった。

添付画像は公開アプリケーションのメモ帳に「にほんごにゅうりょく」と入力し変換できなかった状態。その後文字を入力したらメモ帳自体がフリーズしてしまった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076105/cdd1bd48-d5d9-b679-63c1-686a4c55b94d.png)


とりあえず、クライアント側のIMEの設定を変更することで回避ができた。
設定→時刻と言語→言語と地域→日本語･･･→言語のオプション→Microsoft IME･･･→キーボードオプション→全般→「以前のバージョンのMicrosoft IMEを使う」をオン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076105/9bce0c65-1f25-6a9e-6cc0-03ae0fc51cb9.png)
【ChatGPT】モンテカルロ木探索を用いた「HiAR-ICL」の思考方法を論文からPrompt化してみました。


　どうも、カーブミラーです。

　今回は、モンテカルロ木探索を用いた「HiAR-ICL」の思考方法を論文からPrompt化してみました。

:::note info
本記事は、ChatGPT（有料版）
で行なっております。画像は
ありません。　あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)

***
　まずは、ニュース。

　Amazonのクラウド部門である
　　AWSは2024年12月3日、
　　　米国ラスベガスで
　　　　年次イベント「AWS re:Invent」
　　　　　が開催された。

　そこで
　　新たな生成AIモデル
　　　「Amazon Nova」ファミリーを
　　　　発表しました。
　[Amazon、新たな生成AI基盤モデル「Amazon Nova」を発表：マルチモーダル対応と高いコスト効率を実現](https://ledge.ai/articles/aws_amazon_nova_reinvent2024)

　AWSのAI開発プラットフォーム
　　「Bedrock」を通じて利用可能。

　六つのモデルが発表され、
　　それぞれが説明された。
　　　ここでは省く。

　ただ、
　　マルチモーダルAIであり、
　　　画像生成や動画生成の
　　　　専用モデルもある。

　残念ながら、
　　Bedrock上での操作となり、
　　　また、体験版や無料版は
　　　　なさそうです。
***
　次は、
　　ニュースではなく、
　　　ChatGPTの回答を
　　　　コピーする際の❗注意❗です。

　以前からコピペしてて、
　　おかしいなと思っていたことを
　　　確認しました。

　Web版とスマホアプリ版とは、
　　同じセッションの回答でも
　　　コピー内容が違います。

　もちろん、
　　テキスト選択すれば
　　　同じです。

　しかし、
　　回答全文を
　　　アイコンや
　　　　ポップアップメニューから
　　　　　コピーした場合、
　　　　　　内容が違っています。

　次のようになります。
　　Web版
　　　Markdown記法

　　スマホアプリ版
　　　テキストのみ

　私は前からですが、
　　記事を書くために
　　　ChatGPTとのやり取りを
　　　　コピペしています。

　　今回のことで
　　　Web版とスマホアプリ版との
　　　　コピーの仕方を
　　　　　決めました。

　　入力は、スマホアプリ版

　　回答は、Web版　に。

　　完璧ではありませんが、
　　　Markdown記法のままの
　　　　コピペが手間が減ります😸
***
　次に、
　　2024/12/05の0:20に
　　　OpenAIからポストが。
　　　　[OpenAI公式ポスト](https://x.com/OpenAI/status/1864328928267259941?t=4_j6PZ9iUxBLbK03OyTfyg&s=19)
>（DeepL翻訳）
>12日間。
12のライブストリーム。
大小さまざまな新しいことの数々。
>
>12日間のOpenAIが明日から始まる。

　サム・アルトマンも
　　同様のポストを。
　　　[サム・アルトマンポスト](https://x.com/sama/status/1864335461268754712?t=MgLWDp6AiRphcT1cJ1x7BQ&s=19)
***
　その後、
　　以下の発表がありました。
　　　[OpenAI Newsroomポスト](https://x.com/OpenAINewsroom/status/1864373399218475440?t=VCwxukjjUPFtIBJ2cnMDPA&s=19)

　最新の数字：
　・ChatGPTの
　　　アクティブユーザー数は週3億人
　・ChatGPTで
　　　毎日送信される
　　　　メッセージは10億通
　・米国では130万人の開発者が
　　　OpenAIを基盤に開発
***
　さて、【本題】です。

　今回は、
　　モンテカルロ木探索を用いた
　　　「HiAR-ICL」という思考方法を
　　　　論文からPrompt化
　　　　　してみました。

　下記記事からです。
　　[LLMの思考の性能をモンテカルロ木探索で引き上げる](https://zenn.dev/knowledgesense/articles/87026a4a6a43c4)

　「HiAR-ICL」とは
　　推論ステップを
　　　モンテカルロ木探索を
　　　　用いて導き出し、
　　　　　複雑なタスクでの性能を
　　　　　　大幅に引き上げる手法、
　　　　　　　とのこと。

　モンテカルロ木探索とは、
>（Perplexity）
>モンテカルロ木探索（MCTS）は、モンテカルロ法を用いた木探索アルゴリズムで、特にゲームAIにおいて次の手を決定するために使用されます。この手法は、ランダムなシミュレーションを通じて探索木を構築し、最終的に勝率が高い手を選択します。具体的には、選択、展開、シミュレーション、バックプロパゲーションの4つのステップで構成されます。囲碁や将棋などの完全情報ゲームやポーカーのような不完全情報ゲームでも応用されています。

　以前、趣味的に
　　プログラミングしていたのですが、
　　　SORTするのに、
　　　　試したことがありました。

　処理速度が遅いので
　　使用を諦めた記憶があります😅

　今回のPromptも
　　ご多分に漏れず、
　　　返答時間が掛かり、
　　　　心配になるほどです。
　　　　　（たまたま？）
***
　上記記事の論文を
　　ChatGPTに読み込ませ、
　　　Promptを作成してもらいました。

　では、
　　Promptをどうぞ。
　　　＊＊＊に問題を
　　　　入力・送信してください。
```Text:
あなたの役割: あなたは、問題解決のエキスパートです。以下に示される問題を解決するために、複数のアプローチを試行し、最適な解を探索してください。モンテカルロ木探索のように各ステップを評価し、最善の次のアクションを選択します。

問題：「＊＊＊」

解決方法のフレームワーク:

1. 問題の分解: 問題を小さな部分に分割し、それぞれに焦点を当てて考察してください。

2. 候補の生成: 各部分に対して複数の解決方法を提案してください。

3. シミュレーション: 提案された解決方法がどのように機能するか、仮定ベースで結果をシミュレートしてください。

4. 評価: シミュレーション結果を比較し、どのアプローチが最善であるかを判断してください。

5. 再探索: 必要に応じて新たなアプローチを追加で提案し、再評価を行ってください。
```

　思考過程で出てくるものが
　　面白かったです。

　結論の回答は
　　うまくまとめられてしまって
　　　ちとつまらない感じでした。

　ですが、
　　私では思い付かないか、
　　　思い付くのに時間が掛かる
　　　　内容ばかりでした。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
Butterfly Effect(バタフライ効こう果)

ブラジルで蝶が羽ばたくとテキサスで竜巻が発生する。:bangbang:
なんと不可能な考えでしょうか??:question:

ヒトラー（Adolf Hitler）は若い頃、ウィーン美術アカデミーから二度も拒否された。拒否の理由はユダヤ人教授だった。
もしヒトラーが入学していれば、ユダヤ人は死ななかった?:question:第二次世界大戦はおそらく起こらなかった?:question:
## バタフライ効果
バタフライ効果とは、複雑で動的なシステムにおいて、初期のごく小さな変化が時間を経て大きく予測不能な結果を引き起こす可能性があるという概念です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624875/a9d73d6f-b889-19ae-d53f-9c240b9e8dc1.png)
## ローレンツの発見
バタフライ効果は、1960年代に気象学者エドワード・ローレンツ( Edward Lorenz )によって発見されました。
彼はコンピューターを使って天気予報システムをシミュレートした。
ある日、彼はコンピューターで予測システムを実行し、コーヒーを買いに行きました。
コーヒーを飲んで戻ってきたとき、実行したばかりの予測が以前の予測とはまったく異なっていることに気づきました。
そこで、よく観察してみると、小数点の丸めなどのランダムな小さな変更が、最終的には異なる効果をもたらす可能性があることをわかりました。
そこから彼は、非線形動的複雑系では、最初は状態がランダムに変化するが、後に大きく変化する可能性があるという理論を立てました。これはバタフライ効果理論と呼ばれています。

その後、バタフライ効果に基づいてカオス理論が開発されました。

## カオス理論
カオス理論（Chaos Theory）は、初期条件に対して非常に敏感な動的システムの挙動を研究する数学の一分野です。
この理論では、小さな変化がシステム全体に大きな影響を与える現象（バタフライ効果など）が注目されます。
カオス理論は、コンピュータプログラミングにおいても、天気のパターン、金融市場、社会ネットワークなどの複雑なシステムをモデル化し、シミュレーションするために活用されています。

## 最後に
カオス理論は、コンピュータプログラミングおよび関連分野でさまざまな応用があります。
以下は主要な応用例です。

- 暗号学（Cryptography）
- アルゴリズム設計（Algorithm Design）
- 複雑システムのシミュレーション（Simulation of Complex Systems）
- 人工知能（Artificial Intelligence)
- 画像処理（Image Processing）
- ゲーム開発（Game Development）
- システム動力学と制御（System Dynamics and Control）
- データ解析（Data Analysis）

カオス理論をプログラミングに統合することで、開発者は複雑で予測不可能な振る舞いを扱える、より堅牢で安全かつ効率的なシステムを構築することが可能になります。
MCP（Model Context Protocol）とNode-REDの有効な組み合わせ

[MCP（Model Context Protocol）](https://modelcontextprotocol.io/introduction)とNode-REDの組み合わせは、AIシステムと多様なデータソースやツールを効率的に連携させるための強力な手段です。

## MCP（Model Context Protocol）

MCPはAnthropicによって開発されたオープンスタンダードで、AIシステムがGoogle Drive、Slack、GitHub、Postgresなどの異なるデータソースと統一されたプロトコルで接続できるように設計されています。これにより、従来の個別API開発の手間を省き、サービス間の文脈を維持しながらデータを効率的に扱うことが可能です。

## Node-RED

Node-REDは、視覚的なプログラミングツールであり、IoTアプリケーションやAPIの統合に特化しています。Node-REDを使用することで、ユーザーはフローを作成し、さまざまなデバイスやサービスと簡単に連携できます。MCPとNode-REDを組み合わせることで、以下のような利点があります。

## 組み合わせユースケース

- **簡易なデータ統合**: Node-REDのフローベースのアプローチを利用して、MCPを介して接続された複数のデータソースから情報を集約し、処理することができます。これにより、異なるサービス間でのデータ移動がスムーズになります

- **双方向通信**: MCPは双方向接続をサポートしており、Node-REDを通じてAIシステムがデータを取得するだけでなく、新しい情報を書き込むことも可能です。これにより、リアルタイムでのデータ更新やフィードバックが実現します

- **セキュリティとプライバシー**: MCPはアクセス制御やセキュリティ機能が組み込まれており、Node-REDとの連携においてもユーザーの許可が必要です。これにより、安全にデータを扱うことができます

- **拡張性**: MCPは新しいデータソースやAIサービスへの対応が可能であり、Node-REDのエコシステムと組み合わせることで、新たな機能やサービスを容易に追加できます。これにより、将来的なニーズにも柔軟に対応できます

- **実用例**: 具体的には、Node-REDを使用してMCPサーバーからデータを取得し、そのデータを基にSlackで通知を送信したり、Google Driveにファイルを保存したりするフローを構築することができます。このような自動化は業務効率化につながります

このように、MCPとNode-REDの組み合わせは、多様なデータソースとの連携を強化し、自動化や効率化を実現するための非常に有効な手段です。特にAIシステムの活用が進む中で、この連携はますます重要になってくるでしょう。