OmniAICreator/Qiita-1.07M huggingface dataset:
エラー(未解決) uninitialized constant ActiveSupport::LoggerThreadSafeLevel::Logger (NameError)  

# はじめに

新アプリ作成の為まずターミナルで
rails _7.0.0_ new "アプリ名" -d mysql
を行い
```config/database.yml
 encoding: utf8
 ```
 にしてbundle install、rails db:createしたら以下エラーが出ました。

```
uninitialized constant ActiveSupport::LoggerThreadSafeLevel::Logger (NameError)

    Logger::Severity.constants.each do |severity|
```
ラーの原因は、Logger::Severity の定数が解決できないとのことで、この問題はRubyやRailsのバージョンの組み合わせが原因で発生することがあるそうなのですが
Railsのバージョンを最新に変えても、Bootsnapを無効化しても、Railsバージョンをgemfileで固定しても
全くrails serverもreils db:createもしてくれません。

## おわりに
色々自分なりに調べて進めてみます。
2026年1月〜2026年2月のハッカソン開催情報まとめ!

2025年06月23日 19:05更新
2026年1月〜2026年2月のハッカソン・ゲームジャム・開発合宿の開催情報を定期的に紹介!!
※こちらは自動的に集めたものになります。
# これから開催されるイベント

### [RPG Maker Horror Game Jam #14: Endless Ocean](https://itch.io/jam/rpg-maker-horror-game-jam-14)
<img width="300" height="229" alt="RPG Maker Horror Game Jam #14: Endless Ocean" src="https://img.itch.zone/aW1nLzE4MTkyMzk5LnBuZw==/original/s3dq2f.png" />

2026年01月16日
Online
[](https://www.google.co.jp/maps?q=,)
2025年06月23日 10:05現在 14人参加中

### [RPG Maker Themed Game Jam #14: Sea Witch](https://itch.io/jam/rpg-maker-themed-game-jam-14)
<img width="300" height="229" alt="RPG Maker Themed Game Jam #14: Sea Witch" src="https://img.itch.zone/aW1nLzE4MTk2NjIzLnBuZw==/original/gABI2q.png" />

2026年01月16日
Online
[](https://www.google.co.jp/maps?q=,)
2025年06月23日 10:05現在 9人参加中

### [24 Jam](https://itch.io/jam/24-jam)
<img width="300" height="238" alt="24 Jam" src="https://img.itch.zone/aW1nLzE5NDkwOTY0LnBuZw==/original/CVsZRx.png" />

2026年01月24日
Online
[](https://www.google.co.jp/maps?q=,)
2025年06月23日 10:05現在 56人参加中
多機能SNS AIエージェント

# AIエージェントプロジェクト: YouTubeスクリプトと音声生成ツールの進化

こんにちは。今日は、現在進行中のAIエージェントプロジェクトの進捗について共有します。このプロジェクトは、AIが自動的にトレンドの技術ニュースを収集し、それをもとにブログや動画、音声など多様な形式でコンテンツを生成することを目指しています。特に今日は、YouTubeスクリプト生成ツールとVoiceVox音声生成ツールに焦点を当てました。

---

## プロジェクト概要: AIエージェントの多機能性

このAIエージェントは、以下のような多彩な機能を持つことを目標に開発を進めています。

1. **入力方式の多様性**  
   - ユーザーのプロンプトによる入力。  
   - 自動で最新技術ニュースを収集する機能。  

2. **生成内容**  
   - 長文のブログ記事から短い動画スクリプトまで幅広く対応。  
   - 音声、字幕、3Dリギングモデルとの同期による動画生成。  

3. **SNSとの統合**  
   - YouTubeやX（旧Twitter）、Facebookなど、複数のSNSプラットフォームへの自動投稿機能。  

---

## 今日の進捗: スクリプト生成と音声生成ツールの開発

### YouTubeスクリプト生成ツール

![db6b4433-1c69-416e-a67c-ce26f11a9b59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/3d292667-289b-63d2-e6c9-ec9588af7e27.png)

**YouTubeScript_Tool**は、動画のテーマに基づいた自然で説得力のあるスクリプトを自動生成するツールです。このツールは、以下のような特徴を備えています。

- **テンプレートベースの構造化**  
  - 導入、セクション、結論を構造化し、視聴者にとってわかりやすい形式でスクリプトを作成します。  
- **ChatGPTを利用した内容の洗練**  
  - スクリプトの自然さや魅力を向上させるため、ChatGPTを使用してテキストを調整。  
- **タイミング情報の提供**  
  - 各セクションの読み上げに必要な時間を計算し、音声生成に役立てます。


---

### VoiceVox音声生成ツール

![3d16e8e4-cbb0-4079-9d4c-4e0558dc96a3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/31d83a36-28c4-254c-f175-9681ca586b66.png)

**VoiceVox_Tool**は、YouTubeスクリプトを基に自然な日本語音声を生成するツールです。このツールは、以下のような強力な機能を持っています。

- **多様な話者と感情スタイル**  
  - 「あまあま」や「セクシー」など、異なる感情表現を持つ複数の話者から選択可能。  
- **高品質な音声合成**  
  - ロボットのような不自然さがなく、聞き取りやすい音声を生成。  
- **自動処理とファイル出力**  
  - 音声ファイルを自動的に生成し、指定のフォルダに保存します。


---

## 開発のプロセス: ツールの連携と応用

![b6a4aa05-eed3-478e-90ff-fdc34c5c401b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/0115fe2f-08cc-dfa8-599a-94bffd6c43d8.png)

本日は、以下の手順でエージェントの機能をテストしました。

1. **トピックの選択**  
   プロンプトに「AIとAGIの違い」というテーマを入力。  

2. **スクリプト生成**  
   YouTubeScript_Toolを使い、テーマに基づいた簡潔で魅力的なスクリプトを生成。  

3. **音声生成**  
   生成したスクリプトをVoiceVox_Toolに渡し、「ヘロヘロ」スタイルの声で音声ファイルを作成。  

4. **出力の確認**  
   生成された音声が自然であることを確認し、次のステップへ進む準備を完了しました。

---

## 今後の課題と展望

![d0dec2dd-ff7a-447a-b17a-d05cdf4b40ad.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/b244593c-8c1e-af8c-3e4b-8d1aa4592a5b.png)

- **字幕と多言語対応**  
  現在は日本語に特化していますが、英語やその他の言語にも対応する予定です。  
- **3Dモデルの動きの同期**  
  音声に合わせてキャラクターが自然に動く機能を開発中です。  
- **SNS自動投稿の最適化**  
  各プラットフォームに合わせたコンテンツ形式での投稿機能を強化します。


---

今日の作業はAIエージェントの完成に向けた大きな一歩となりました。これからも改善を重ね、より多機能で使いやすいツールを目指していきます。最後までお読みいただきありがとうございました！次回の更新をお楽しみに。
OMC232D(1166)

https://onlinemathcontest.com/contests/omc232/tasks/12195

条件より、$x_i=y_j$になると$y=x$上に格子点$(x_i,y_j)$が来るので、$x_i≠y_j$とわかります。
また、格子点$(x_i,y_j)$が、$A$が$3$つ、$B$が$6$つになるのは以下の$3$パターンです。

$(a)$ $y_1<y_2<x_1<x_2<x_3<y_3$
![IMG_20250115_185634.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543462/65e688bc-f8a0-947a-4e69-7de77a70452c.jpeg)

$(b)$ $y_1<x_1<y_2<x_2<y_3<x_3$
![IMG_20250115_211758.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543462/f39b0895-ad55-1cd4-5f44-c6c0ed05c56a.jpeg)

$(c)$ $x_1<y_1<y_2<y_3<x_2<x_3$
![IMG_20250115_211825.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543462/c1abdd85-7e6c-3100-acd2-9261cf0dd5bd.jpeg)

$(a)〜(c)$はどれも$x_1〜x_3,y_1〜y_3$に違う数が$1$つずつ割り当てられます。
ここで、$12$個の数字から$6$個を選ぶ操作を行います。
この操作で得られる数の集合は${}_1{}_2C_6$通りです。
$(a)$であれば、得られた数の小さい方から順に$y_1,y_2,x_1,x_2,x_3,y_3$と割り当てていけばそのまま$(a)$の場合の組み合わせになります。

よって、$(a)〜(c)$の$3$通りに${}_1{}_2C_6$をかけた
$3×\frac{12×11×10×9×8×7}{6×5×4×3×2×1}$
$=2772$
が解になります。
SaaSプロジェクト秘訣──UI/UX視点とPM経験の融合

# SaaS系UI/UXプロジェクトマネージャーとしての視点

## はじめに
SaaS型ソリューションの開発に携わり、主にUI/UX部分の監修とプロジェクトマネジメントを担当している者  
スタートアップから大手企業まで、多種多様なクライアントに対して、ユーザーが直感的に操作できるインターフェースと、高い精度の機能を両立させるための取り組みを行ってきた  

## 仕事の紹介と役割
- エンドユーザーが求めるユーザーフローを設計し、開発チームと連携して開発仕様を詰める
- 顧客折衝を通じて要求仕様をまとめ、プロジェクト全体のスケジュールやリソースを調整する
- AIモデルの性能評価やセキュリティ要件を意識した設計を行い、サービス全体の品質を確保する

## なぜPMなのか
UI/UXデザイナーや開発エンジニアなど専門領域が異なるメンバーをまとめることで、技術革新の速いAI分野でも一貫性のあるプロダクトを実現したいとの思い  
リリース後も継続的にユーザーからのフィードバックを吸い上げ、サービスをアップデートしながらビジネスを成長させる面白さに惹かれた  

## 課題と苦労話
- AIモデルの精度とユーザーエクスペリエンスの両立  
  - 高精度なOCRを実装しようとすると処理負荷が増大し、応答時間が伸びてしまう問題が発生  
  - 完璧な精度を追求しすぎると、UIが複雑化し、ユーザーが操作しづらくなるジレンマに陥る  
- ステークホルダー間の期待値コントロール  
  - クライアント側とエンジニア側で「AIなら何でも解決できるはず」と過剰な期待が生まれ、スコープ拡張が止まらない状況  
  - 機能要件とUI改善の優先度を客観的データや市場調査で整理し、着実にプロダクトをローンチするための折衝が必要  
- サービスの安全性とパフォーマンス管理  
  - 大量の画像データや個人情報を扱うため、セキュリティ面や法令遵守を徹底しながら、システム全体をスケーラブルに運用する仕組みづくりを模索  
  - コスト管理とインフラ要件のバランスを取りつつ、ユーザーが増加しても快適に使える基盤を維持する難しさを痛感  

## 得られた経験と学び
- プロジェクト早期段階でのユーザーテストやPoCの重要性  
  - 小さな機能の実装とフィードバック収集を繰り返すことで、大規模リリース時のリスクを抑え、ユーザー満足度を高める手応えを得た  
- チーム全員が共通言語を持つ必要性  
  - AIモデルの精度評価やUIのユーザビリティテストを、誰でも追跡しやすい指標(KPI)として定義することで、プロジェクト全体のモチベーションを維持  
- コミュニケーションコストの最適化  
  - Slackやタスク管理ツールなどを用いたリアルタイムな情報共有と、レトロスペクティブ(振り返り)の仕組み導入により、トラブルの早期発見と継続的改善のサイクルを定着させることに成功  

## 今後の展望
- AIのマルチモーダル化と連携機能の拡張  
  - 音声認識や自然言語処理との統合を進め、より多面的にビジネスをサポートできるSaaSプラットフォームを提供していく構想  
- グローバル市場への対応  
  - 多言語OCRの需要拡大に合わせ、UI/UXを多文化圏のユーザーにも受け入れやすい形に最適化していく計画  
- ユーザーコミュニティとの連携強化  
  - オープンイノベーションやコミュニティからの要望を柔軟に取り込む形でプロダクトを成長させ、大きなエコシステムを形成するビジョン
AWSのAIエージェントを導入するメリット



## AWSインフラとの親和性
- 既存のAWSインフラとシームレスに統合でき、導入が容易  
- AWSのセキュリティ機能やコンプライアンス対策を活用可能

## 多様なAIモデルの選択肢
- Amazon Bedrockを通じて、AI21 Labs、Anthropic Claude、Stability AIなど複数のAIモデルを利用可能  
- 用途に応じて最適なモデルを選択できる柔軟性

## スケーラビリティとコスト最適化
- AWSの従量課金モデルにより、使用量に応じた最適なコスト管理が可能  
- 需要に応じて柔軟にスケールアップ/ダウンが可能

## 継続的な機能改善
- AWSの積極的な開発により、AIエージェントの機能が定期的に強化される  
- 最新のAI技術を容易に導入可能

## 既存製品との統合
- スマートOCRやBroxの機能をAIエージェントで拡張し、より高度な自動化を実現

---

## デメリット
- **学習コスト**: 新しいAIエージェント技術の導入に伴う社内の学習コストが発生  
- **初期設定の複雑さ**: 最適な設定を行うために、専門知識が必要となる可能性がある  
- **ベンダーロックイン**: AWSのエコシステムへの依存度が高まる可能性

---

## AnthropicのComputer Use機能との比較

### 機能の範囲
- **AWSのAIエージェント**: より広範な機能を持ち、複雑なタスクの実行や他のAWSサービスとの連携が可能  
- **Computer Use**: コンピューターの基本的な操作に特化

### 開発環境
- **AWSのAIエージェント**: Amazon Bedrockを使用し、AWSの豊富なサービスと統合可能  
- **Computer Use**: Anthropicのプラットフォーム上で開発

### セキュリティとコンプライアンス
- **AWSのAIエージェント**: AWSの強固なセキュリティ機能とコンプライアンス対策を活用可能  
- **Computer Use**: 閉域環境での動作が可能だが、AWSほど包括的ではない

### コスト構造
- **AWSのAIエージェント**: 使用量に応じた従量課金制で、コスト最適化が容易  
- **Computer Use**: β版のため具体的な価格設定は不明確

---

## 結論
既存プロダクトがAWSインフラを使用していることを考慮すると、AWSのAIエージェントを採用することで、以下の利点が得られる:

1. 既存インフラとの統合が容易  
2. 多様なAIモデルの選択肢による柔軟性  
3. スケーラビリティとコスト最適化の実現  
4. 継続的な機能改善による競争力の維持  
5. セキュリティとコンプライアンスの強化  

これらの利点により、既存のAWSサービス利用企業の機能を大幅に拡張し、より高度な自動化と効率化を実現することが可能となる。初期の導入コストや学習コストはかかるものの、長期的には大きな価値を生み出すことが期待できる。

参考：
[AWS AIエージェント](https://aws.amazon.com/jp/what-is/ai-agents/)
self % args

# argをフォーマットする
>self % args -> String
printf と`同じ規則に従って args をフォーマット`します。

>args が配列であれば Kernel.#sprintf(self, *args) と同じです。それ以外の場合は Kernel.#sprintf(self, args) と同じです。

>[PARAM] args:
フォーマットする値、もしくはその配列
[RETURN]
フォーマットされた文字列
例
```rb
irb(main):001> p "i = %d" % 10       # => "i = 10"
irb(main):002> p "i = %x" % 10       # => "i = a"
irb(main):003> p "i = %o" % 10       # => "i = 12"
irb(main):004>
"i = 10"
"i = a"
"i = 12"
=> "i = 12"
irb(main):005> p "i = %#d" % 10      # => "i = 10"
irb(main):006> p "i = %#x" % 10      # => "i = 0xa"
irb(main):007> p "i = %#o" % 10      # => "i = 012"
"i = 10"
"i = 0xa"
"i = 012"
=> "i = 012"
irb(main):008> p "%d" % 10           # => "10"
irb(main):009> p "%d,%o" % [10, 10]  # => "10,12"
"10"
"10,12"
=> "10,12"
```
>c
引数の数値(0〜255)を文字コードとみなして対応する文字を出力します。引数が数値以外のオブジェクトの場合 to_int メソッドによる変換を試みます。引数として範囲内の一文字の文字列も受けつけます。文字そのものを出力します。

```rb
irb(main):003> p sprintf("%c", 97)  #=> "a"
irb(main):004> p sprintf("%c", 'a') #=> "a"
irb(main):005> p sprintf("%c", 97)  #=> "a"
irb(main):006> p sprintf("%c", 'a') #=> "a"
"a"
"a"
"a"
"a"
=> "a"
```
>フラグ `-' と幅 の指定だけが意味を持ちます。

>s
文字列を出力します。
>引数が String オブジェクトでなければ to_s メソッドにより文字列化したものを引数として扱います。


https://docs.ruby-lang.org/ja/latest/class/String.html#I_--25:~:text=%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99-,c,%E3%81%AB%E3%82%88%E3%82%8A%E6%96%87%E5%AD%97%E5%88%97%E5%8C%96%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%82%92%E5%BC%95%E6%95%B0%E3%81%A8%E3%81%97%E3%81%A6%E6%89%B1%E3%81%84%E3%81%BE%E3%81%99%E3%80%82,-p


```rb
irb(main):001> "%s" % :faa
=> "faa"
irb(main):002> "fafa%sfa" % :faa
=> "fafafaafa"
```
初心者向け解説：APIとは？その仕組みと活用法を分かりやすく解説

現代のアプリやシステムは、多くの場合「API」と呼ばれる仕組みを使ってデータや機能を連携しています。この記事では、初心者の方でも理解できるように、APIの基本的な概念や使い方を分かりやすく解説します。
※この記事は、ChatGPTの出力を基に作成しています。

---

### **1. APIとは？基本的な役割**
API（Application Programming Interface）は、簡単に言うと「ソフトウェア同士をつなぐ窓口」のようなものです。プログラムやアプリケーション同士がやり取りするためのルールや手段を提供します。たとえば、アプリが外部のサービスからデータを取得したり、操作をリクエストしたりする際に使います。

---

### **2. 日常生活の例で理解するAPI**
APIをイメージしやすくするために、レストランの注文に例えてみましょう。

- **あなた（お客さん）** が料理を注文したい。
- **ウェイター（API）** にメニュー（決まった手順や形式）を通じて注文を伝える。
- ウェイターが厨房（サーバー）に伝え、料理を作ってもらう。
- 完成した料理がウェイターを通じてあなたの元に届けられる。

この流れの中で、APIはウェイターの役割を果たしています。お客さん（あなた）が厨房（システム）と直接やり取りせずに、スムーズに注文できるのは、APIが情報のやり取りを調整しているからです。

---

### **3. ITの世界でのAPIの使われ方**
ITの世界では、以下のような形でAPIが活用されています：

- **Google MapsのAPI**
  自分のアプリに地図機能を組み込みたい場合、Google MapsのAPIを利用すると、地図データを簡単に取得してアプリ内に表示できます。

- **天気予報アプリ**
  天気情報を提供するAPIを利用して、リアルタイムの天気データを取得できます。

- **SNSの連携**
  他のウェブサイトで「TwitterやFacebookでログイン」する機能は、SNSのAPIを通じてユーザー情報を取得しています。

---

### **4. APIが使うデータの形式**
APIを使うときは、一般的に以下のような形式でデータがやり取りされます：

- **JSON**（読みやすいテキスト形式）
- **XML**（やや複雑な形式）

たとえば、天気APIから以下のようなデータが返ってくることがあります：

```json
{
  "location": "Tokyo",
  "temperature": "15°C",
  "condition": "Sunny"
}
```

このデータを使ってアプリは「東京の気温は15℃で晴れ」といった情報を画面に表示します。

---

### **5. APIを学ぶためのステップ**
初学者がAPIを学ぶ際は、以下の手順を意識するとスムーズです：

1. **APIの基本的な仕組みを理解する**
   - 「リクエスト」と「レスポンス」という概念を学びます。

2. **公開されているAPIを試してみる**
   - 天気予報APIやニュースAPIなど、無料で試せるものを探してみましょう。

3. **簡単なプログラムで実際にAPIを使う**
   - PythonやJavaScriptでAPIにアクセスしてデータを取得し、アプリに表示させる経験を積むのがおすすめです。

---

### **6. APIを使う上での注意点**

APIを活用する際には、以下の点に注意しましょう：

- **認証**が必要な場合が多い（APIキーを発行して利用）。
- 利用には**回数制限**があることがある（無料プランでは1日1000回など）。
- **ドキュメント**をしっかり読むことが重要。

---

### **まとめ**
APIは、プログラミングの基礎を身に付けた人がさらに幅広いサービスやアプリケーションを作るための強力なツールです。初心者の方でも、まずは無料で試せるAPIを使い、リクエストとレスポンスのやり取りを体験してみることで理解が深まります。あなたのアプリ開発にAPIを取り入れて、さらに便利で魅力的な機能を実現してみましょう！
Blockchain Technology: Arta Hanssen’s Insights into the Future of Innovation

Blockchain technology is revolutionizing industries worldwide by offering a secure, transparent, and decentralized way of managing data. From finance to healthcare, its applications are limitless. Arta Hanssen, a technology enthusiast, explores how blockchain is shaping the future and why it holds immense potential for innovation.

What is Blockchain Technology?

At its core, blockchain is a digital ledger that records transactions across multiple computers in a secure and tamper-proof way. Each block contains:

Data: Relevant transaction details.
Hash: A unique identifier for each block.
Previous Hash: Linking the blocks in a chain, ensuring security and continuity.
According to Arta Hanssen, "The decentralized nature of blockchain eliminates the need for intermediaries, making processes faster, cheaper, and more secure."

Key Features of Blockchain Technology
Arta Hanssen highlights the primary features that make blockchain unique:

Decentralization: Transactions occur directly between parties without a central authority.
Transparency: All participants can view the transaction history, promoting trust.
Immutability: Once data is added to the blockchain, it cannot be altered or deleted.
Security: Cryptographic techniques safeguard the data, ensuring protection against fraud.
Applications of Blockchain
Blockchain technology isn’t limited to cryptocurrencies like Bitcoin or Ethereum. Arta Hanssen emphasizes its versatility across various industries:

Finance and Banking

Streamlined cross-border payments.
Transparent and secure transaction records.
Supply Chain Management

Real-time tracking of goods.
Enhanced accountability and reduced fraud.
Healthcare

Secure sharing of patient records.
Improved data integrity and patient privacy.
Voting Systems

Transparent and tamper-proof elections.
Increased voter confidence and participation.
Real Estate

Simplified property transactions.
Eliminated intermediaries, reducing costs.
Challenges in Blockchain Adoption
Arta Hanssen also notes that while blockchain has immense potential, it faces several challenges:

Scalability: Handling large volumes of transactions remains a hurdle.
Energy Consumption: Mining operations consume significant energy, raising environmental concerns.
Regulatory Uncertainty: Governments worldwide are still grappling with how to regulate blockchain effectively.
Future of Blockchain Technology
Arta Hanssen envisions a future where blockchain technology becomes an integral part of everyday life. Innovations such as smart contracts, decentralized finance (DeFi), and non-fungible tokens (NFTs) are already paving the way for a more connected and transparent digital world.

Arta Hanssen’s Perspective
"Blockchain is more than just technology; it’s a paradigm shift that challenges traditional systems. Its potential to empower individuals and businesses alike is unparalleled," says Arta Hanssen.
Google Workspaceの全ビジネスプランにAI機能を標準搭載へ

## はじめに
Googleよりこちらの発表がありましたので簡単にまとめました。

https://workspace.google.com/blog/product-announcements/empowering-businesses-with-AI?hl=en

Google Workspaceを利用中の企業は無料でGemini AdvanceやNotebookLM Plusなどが利用可能になるとのことです。

## 概要

Googleは本日、AI機能を全てのビジネス向けWorkspaceプランに標準搭載することを発表しました。これにより、企業はアドオンを購入することなく、最新の生成AIの機能を利用できるようになります。

## なぜAIを標準搭載するのか

Googleは、AIが仕事の未来の基盤であり、その変革力はすべての企業と従業員が手の届く価格で利用できるべきだと考えています。過去20年以上にわたり、Google Workspaceは単なるツール群以上の存在として、チームの創造、構築、成長の場を提供してきました。1,000万以上の企業がWorkspaceを活用し、革新的なスタートアップから大企業まで、働き方を変革しています。

https://youtu.be/VOcSrLykC4E?si=bgGrSJMJ4Cdql6VR

## 主要な新機能

### 1. Gmail、Docs、Sheets、Meet、Chat、VidsなどでのAIアシスタント
- Geminiによる通信の効率化
- メール、チャット、ファイル内の情報要約・作成・検索支援
- 文書、スライド、スプレッドシート、動画の作成支援
- 会議の自動メモ作成、音声・映像の品質向上、遅れて参加した際の会話のキャッチアップ支援

### 2. Gemini Advancedとの対話機能
- ラップトップやモバイルデバイスでの学習、ブレインストーミング、プランニング支援
- コーディング、研究、データ分析などの複雑なプロジェクトのサポート
- 反復的または専門的なタスクを支援するAIエキスパートチーム（Gems）の構築

### 3. NotebookLM Plusの提供
- 革新的なAIリサーチアシスタントを全従業員に提供
- 複雑なトピックの理解支援
- 音声オーバービュー機能
- チーム間での学習・オンボーディングの加速

## 料金体系の簡素化

- アドオン購入の必要性を排除し、プランと料金を簡素化
- 例：以前はWorkspace Business StandardプランとGeminiビジネスアドオンで月額$32/ユーザーだったものが、新料金では月額$14/ユーザーに
- 新規顧客は明日から適用開始
- 既存顧客は2025年3月17日または年間/固定期間プランの更新日のいずれか遅い方から適用
- 小規模ビジネス顧客は現時点で料金変更の対象外

## セキュリティと信頼性

1. データの所有権
   - ユーザーの許可なくGeminiモデルのトレーニングにデータを使用しない
   - 広告ターゲティングやデータ販売に使用しない

2. 制御機能
   - エンタープライズグレードの制御機能を搭載
   - ユーザーの権限に基づく関連データのみ取得
   - 既存のWorkspaceデータセキュリティと主権制御を自動適用

3. コンプライアンス
   - SOC 1/2/3、ISO 27001/17/18、ISO 42001などの認証を取得
   - HIPAA準拠のサポート

## 今後の展開

- 無料トライアルの提供開始
- 今後1年間で新しいAI機能と価値の追加を継続
- すべてのビジネスのためのAI駆動型の働き方の実現を目指す

[Privacy Hub](https://workspace.google.com/security)で利用可能な管理者向けコントロールと取り組みについて詳しく確認できます。

こちらに提供予定である機能一覧が載っています。

https://workspaceupdates.googleblog.com/2025/01/expanding-google-ai-to-more-of-google-workspace.html

## 関連書籍
[生成AI時代の「超」仕事術大全](https://amzn.to/40b7nZC)
[生成AI導入の教科書](https://amzn.to/4aBvt4J)
Javaで「ラベルに表示される画像の水平及び垂直位置を設定する」の動作を確認してみた。

# 概要

Javaで「ラベルに表示される画像の水平及び垂直位置を設定する」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

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

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

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

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

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

    JLabel label1 = new JLabel(icon1);
    label1.setOpaque(true);
    label1.setBackground(Color.YELLOW);
    label1.setPreferredSize(new Dimension(100, 100));
    label1.setHorizontalAlignment(JLabel.LEFT);

    JLabel label2 = new JLabel(icon2);
    label2.setOpaque(true);
    label2.setBackground(Color.GREEN);
    label2.setPreferredSize(new Dimension(100, 100));
    label2.setHorizontalAlignment(JLabel.CENTER);

    JLabel label3 = new JLabel(icon3);
    label3.setOpaque(true);
    label3.setBackground(Color.RED);
    label3.setPreferredSize(new Dimension(100, 100));
    label3.setHorizontalAlignment(JLabel.RIGHT);

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

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

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

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

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

![Screenshot from 2025-01-16 17-45-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/f296e75b-d003-ebe1-5231-99abd7c241a5.png)

# まとめ

何かの役に立てばと。
render_templateマッチャー

# レンダリンクされたかどうか
`render_template`マッチャー
>## render_template matcher

`render_template`マッチャーは与えられたテンプレートまたはレイアウトをレンダーする要求を明示するために使われる。`assert_template`へ指名する

>The render_template matcher is used to specify that a request renders a given template or layout. It delegates to assert_template

リクエスト仕様書とコントローラ仕様書で使えます
>It is available in controller specs (spec/controllers) and request specs (spec/requests).

注意：`ender_template`だけでなくリダイレクトに対して`redirect_to(:action => 'new')`を使う,
>NOTE: use redirect_to(:action => 'new') for redirects, not render_template.

三つの可能なオプション付き`render_template`の使用
>### Using render_template with three possible options
Given a file named “spec/controllers/gadgets_spec.rb” with:
```rb
require "rails_helper"

RSpec.describe GadgetsController do
  describe "GET #index" do
    subject { get :index }

    it "renders the index template" do
      expect(subject).to render_template(:index)
      expect(subject).to render_template("index")
      expect(subject).to render_template("gadgets/index")
    end

    it "does not render a different template" do
      expect(subject).to_not render_template("gadgets/show")
    end
  end
  end
```
https://rspec.info/features/6-0/rspec-rails/matchers/render-template-matcher/

### `render_views`でレンダリングされていないから内容まではわからない
```rb
require "rails_helper"

RSpec.describe UsersController,type: :controller do
  # render_views
    # createアクション
  describe "newアクション" do
    it "newページがレンダリングされる" do
      get "new"
      expect(response.body).to render_template(:new)
    end
    it "newページに新規登録が含まれている" do
      get "new"
      expect(response.body).to include("新規登録")
    end
  end
end
```
```rb
UsersController
  newアクション
    user/newページがレンダリングされる
    user/newページに新規登録が含まれている (FAILED - 1)

Failures:

  1) UsersController newアクション user/newページに新規登録が含まれている
     Failure/Error: expect(response.body).to include("新規登録")
       expected "" to include "新規登録"
     # ./spec/controllers/users_controller_spec.rb:13:in `block (3 levels) in <top (required)>'

Finished in 0.06515 seconds (files took 1.21 seconds to load)
2 examples, 1 failure
```
https://stackoverflow.com/questions/1063073/rspec-controller-testing-blank-response-body
LibreOfficeのユーザー定義関数(UDF)

# 内容

LibreOffice calc でユーザ定義関数を作成する

`=MYFUNC(C1:D1)` みたいなやつ

# 結論
以下の通り
https://forum.openoffice.org/en/forum/viewtopic.php?t=56899

## 作りかた

### basicの場合

Tools -> Macros -> Organize Macros -> Basic...  
でポップアップが表示される

ドキュメントにnewでモジュールを追加してこんなのを書くと  

```vb
function mysum(r)
	on error resume next
	dim f
	dim c
	dim ans
	f = flattenRange(r)
	
	ans = 0
	for each c in f
		ans = ans + clng(c)
	next
	mysum = ans
end function
```

`=MYSUM(D3:E5)`
こんな感じで使用出来る

`flattenRange`は毎回使用すると思うので  
上記リンク先のを`My Macros`内に書いておく  
配布するならドキュメント内に書く


<details><summary>数値以外も読むようにしたflattenRangeのコード</summary>

```vb
Function flattenRange(r)

	Dim i as Long
	Dim j as Long
	Dim Size(2) as Integer
	Dim element
	Dim n As Long
	Dim v(0)
	Dim aRow
	Size(1) = UBound(r,1)-LBound(r,1)
	Size(2) = UBound(r,2)-LBound(r,2)
	'v = r(LBound(r),1)
	n = 0
	for i = 0 to Size(1)
		for j = 0 to Size(2)
			ReDim Preserve v(n)
			if isNumeric(r(LBound(r, 1) + i, LBound(r, 2) + j)) then 
				element = r(LBound(r, 1) + i, LBound(r, 2) + j)
			else
				element = r(LBound(r, 1) + i, LBound(r, 2) + j)
			endif
			v(n) = element
			n = n + 1
		Next j
	Next i
			
	flattenRange = v
end function
```
</details>


### javascriptの場合

GUIでモジュールは作成出来ない  
→createしてもエラーになる

一応odsをunzipしてファイル追加して固めれば行けるみたい

ただしラッパーが必要なのと初回ロード時に必ずエラー(ダイアログ)が表示されるので  
あまり実用的ではない

### pythonの場合

GUIでモジュールを配置するディレクトリが作成出来ない  
→createボタンがそもそも押せない

javascriptと同じような感じでやってみたが  
macroのセキュリティエラーが出てだめだった  
→Lowでもだめ


# その他

[wps office](https://www.wps.com/)は無料だとマクロが使えない  
[softmaker](https://www.softmaker.com/en/)も同じく
[gnumeric](http://www.gnumeric.org/)はそもそもマクロが無い

なので無料でマクロが利用出来るものとなると
[open office](https://www.openoffice.org/)か[Libre office](https://www.libreoffice.org/download/download-libreoffice/)しかない  
Libre officeはopen officeを元に作られているので
あまり差は無いようだが使ってみた感じ
マクロに関してはLibre officeの方が良さそうだった
独立変数の個数とANOVAについて

# 一元配置分散分析 (One-way ANOVA) と 多元配置分散分析 (Factorial ANOVA)

## 一元配置分散分析 (One-way ANOVA)
- **特徴:** 独立変数（要因）が **1つ** の場合に使用。
- **目的:** 
  - 1つの独立変数が複数の水準を持つとき、従属変数に与える影響を調べる。
- **例:**
  - 独立変数: 入力手法（Sakura, 50音入力, QWERTY入力）
  - 従属変数: 入力速度
  - 質問: 「入力手法によって入力速度に違いがあるか？」

---

## 多元配置分散分析 (Factorial ANOVA)
- **特徴:** 独立変数が **2つ以上** の場合に使用。
- **目的:** 
  - 各独立変数の主効果を調べるだけでなく、独立変数間の **交互作用** の有無も検定する。
- **例:**
  - 独立変数1: 子音滞留時間（200ms, 400ms, 600ms）
  - 独立変数2: 母音滞留時間（200ms, 400ms, 600ms）
  - 従属変数: 選択時間
  - 質問:
    - 「子音滞留時間が選択時間に影響を与えるか？」
    - 「母音滞留時間が選択時間に影響を与えるか？」
    - 「子音滞留時間と母音滞留時間の組み合わせ（交互作用）が選択時間に影響を与えるか？」

---

## 一元配置分散分析と多元配置分散分析の違い

| 特徴                          | 一元配置分散分析 (One-way ANOVA) | 多元配置分散分析 (Factorial ANOVA) |
|-------------------------------|----------------------------------|-----------------------------------|
| **独立変数の数**              | 1つ                              | 2つ以上                           |
| **主効果**                    | 独立変数1つの主効果を検定        | 複数の独立変数の主効果を検定      |
| **交互作用**                  | 検定しない                      | 独立変数間の交互作用を検定         |
| **用途**                      | 単一の要因が従属変数に与える影響を調べる | 複数の要因とその組み合わせの影響を調べる |

---

## まとめ
- **違い:** 
  - 一元配置分散分析は独立変数が1つの場合に適用し、交互作用は考慮しない。
  - 多元配置分散分析は複数の独立変数を扱い、主効果と交互作用の両方を評価する。
- **選択の基準:** 
  - 研究設計と目的に応じて、独立変数の数や交互作用を調べる必要性に基づいて選択する。
【初心者向け】OpenAPI仕様書の作成並びにプルリク作成について

## はじめに
初めまして、けーぽんです。
この度初めてのQiitaの記事を作成します。
まずは自分のメモがわりに、忘れそうなことをメモしていきます。
同じような初学者のためになったら嬉しいです！

### この記事でわかること
[・OpenAPI仕様書を書く際に気をつけたこと](##-OpenAPI仕様書の書き方)
※作成について、がっつり解説していません、、、。
[・OpenAPI仕様書を提出する際に便利なスクショ方法](##-OpenAPI仕様書を提出する際に便利なスクショ方法)

## 動作環境
・MacOS Sequoia　15.2
・IntelliJ IDEA 2024.3.1.1 (Community Edition)
・Oracle Java 21.0.3

## OpenAPI仕様書の書き方
### 👷工事中👷

## OpenAPI仕様書を提出する際に便利なスクショ方法
### 1)ショートカットでデベロッパーツールを起動
　Windows：Ctrl+ Shift + i
　Mac：Command + Option + i
　※「F12」キーでも可
 ![1デベロッパツール起動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884171/857bce49-2f60-5a20-94ca-05e9f05c0ba7.png)
<br>
### 2)入力欄を再度ショートカットを使い、表示させます
　Windows：Ctrl + Shift + p
　Mac：Command + Shift + p<br>
 ![2コマンド表示.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884171/a4f2af60-137c-5544-41f1-f6cf1669a31b.png)

### 3)` full `を入力すると、` full size screenshot `というスクリーンショットの機能が表示
![3full入力.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884171/73792edf-3e80-a969-208c-393a2ae403c4.png)

### 4)` full size screenshot `をクリックすると、ページ全体をスクリーンショットした画像がダウンロードされます！<br>

## 終わりに
今回は、OpenAPI仕様書の書き方、OpenAPI仕様書を提出する際に便利なスクショ方法について記事を作成してみました。プルリクを出す際に便利だと思いますので、試してみてください！

## 参考サイト
・[Chromeの全画面スクリーンショット撮影方法！拡張機能ナシでもできる](https://yourclip.life/post/chrome-extensions-vol2/)
「Chat with PDF」製品群の主な機能と評価比較

最近、研究者たちが論文と対話しながらその内容を深く理解する方法が注目されています。

「Chat with PDF」や「AI PDF Reader」といった名前の製品が次々と登場しています。

どのような製品が論文との対話を可能にしているのでしょうか？ここで、それらを分析・比較してみましょう！


### 1. [Typeset](https://typeset.io/)
![스크린샷 2025-01-16 오후 5.07.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3974762/569aed45-7dc0-7461-4617-763ae1d20cc8.png)

**メリット**

- 学術論文に特化している  
- 回答の出典を具体的なセクションに基づいて明示するため、信頼性が高い  
- ポッドキャスト機能で、文書の内容を音声で聞くことができ、品質も高い  
- 基本的なマークアップ機能をサポート  

**デメリット**

- 回答の質は悪くないが、やや冗長に感じられることがある  

**活用法**

- 通勤中にポッドキャスト機能を使って論文を聞き、内容を把握する  


### 2. [Moonlight](https://chromewebstore.google.com/detail/moonlight%EF%BC%9A%E8%AB%96%E6%96%87%E3%82%92%E8%AA%AD%E3%82%80ai%E3%83%91%E3%83%BC%E3%83%88%E3%83%8A%E3%83%BC/lhipdkibljepmfojllcfflfflhflcbgi?hl=ja)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3974762/c649eef9-58b9-e979-6244-955601761214.png)


**メリット**

- 学術論文に特化している  
- 図表や数式、表を自動検出し、スクリーンショットを撮ることなくワンクリックで説明を確認できる  
- 学術論文に特化したスマート引用機能で、引用文献のタイトルや著者、要約をスクロールなしで確認可能  
- ハイライトやコメントといった基本的なマークアップ機能をサポート  

**デメリット**

- 回答の出典を確認しづらい  

**活用法**

- ワンクリックで論文内の数式や図表、表の説明を確認できるため、追加の質問を入力することなく、直感的に理解を深められる  


### 3. [Popai](https://www.popai.pro/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3974762/473603e4-b66d-881c-e0b4-00afaa11eecd.png)

**メリット**

- 質の高い回答を提供し、ハイライト、注釈、ノート機能を一体化している  
- 重要な部分を分かりやすくノートにまとめ、体系的に整理できる  
- 様々なユースケースを探索できるプロンプトライブラリを提供  

**デメリット**

- 回答の参照元が「ページ単位」で表示されるため、テキストの具体的な箇所を特定しにくい  

**活用法**

- 長文の要約や重要なアイデアの蓄積に便利なノート機能を活用  


### 4. [ChatPDF](https://www.chatpdf.com/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3974762/3cd8495c-b8ff-2835-98da-cff8dab7e8c8.png)

**メリット**

- PDFの内容を説明、要約、書き換えで素早く再構成  
- フォルダ内の複数文書間で会話を継続でき、プロジェクト管理に便利  

**デメリット**

- マークアップや注釈機能がないため、ハイライトや直接的なメモ追加は制限される  

**活用法**

- 関連論文を1つのフォルダにまとめ、集団的な対話を行い、研究の方向性を導く  


### 5. [AskyourPDF](https://askyourpdf.com/)
**メリット**

- PDFの内容を説明、要約、書き換えで素早く再構成  
- Zoteroプラグインをサポートしており、文献管理が便利  

**デメリット**

- 引用表示が弱く、マークアップ機能がないため、論文の管理が難しい  

**活用法**

- Zoteroユーザーには、AskyourPDFを統合してデータ収集と管理を簡単にする  


### 6. [PDF.ai](https://pdf.ai/)

**メリット**

- 文書を整理して明確に提示し、回答の質も比較的洗練されている  

**デメリット**

- マークアップ機能がなく、ハイライトや注釈を追加するのが難しい  
- 特別な拡張機能がない  

**活用法**

- 簡単なQ&Aや文書の概要把握が必要な場合に適している  


### 7. [GetCoralAI](https://www.getcoralai.com/)

**メリット**

- 様々なPDF文書のアップロードをサポートし、プロンプトライブラリを提供  

**デメリット**

- 参照元の確認が遅く、LaTeXのレンダリングが崩れることがあり、研究において不便  
- マークアップや注釈機能がない  

**活用法**

- 簡単なテキストベースの文書に迅速に対応  
- プロンプトライブラリを使って特定のタスクを自動化  


### 結論

「Chat with PDF」系の製品は、基本的な機能を共有しているものの、使いやすさ、性能、ユーティリティ機能において顕著な違いがあります。

- 通勤中にポッドキャスト形式で論文を聞きたい場合は、**Typeset**  
- 質問を入力せずに論文を素早く理解し、引用文献を読みながら確認したい場合は、**Moonlight**  
- ハイライトや注釈を体系的に管理したい場合は、**Popai**  
- 類似論文を1つのフォルダにまとめて一括対話したい場合は、**ChatPDF**  

自分の研究スタイルやワークフローに最適な製品を選んでみてください！
PydanticImportError: BaseSettings has been moved to the pydantic-settings package...の対処法

以前対応したことのある表題のエラーの対処法を記憶の底から掬い上げたので、今後同じ状況で困らないように備忘録を書いておきます。

# 結論

pydanticのバージョンがv2になっていたのが原因でした。
対処については[こちら](https://stackoverflow.com/questions/76664231/import-vaex-error-pydanticimporterror-basesettings-has-been-moved-to-the-py)が参考になります。
私の場合はコードを変えたくなかったので、以下のコマンドを実行してインストールするバージョンを固定して対応。

```
pip install "pydantic==1.*"
```

# 経緯
## 現象
git管理されているコードをいつもと違う環境にcloneして実行しようとしたら以下のエラーが発生

> PydanticImportError: BaseSettings has been moved to the pydantic-settings package.


## 調査

[こちら](https://stackoverflow.com/questions/76664231/import-vaex-error-pydanticimporterror-basesettings-has-been-moved-to-the-py)を見るとインポートするパッケージを変えると解決するような感じですが、諸事情によりコードを変更したくなかったので、他の方法を考えます。
スレッドを読んでいくと、[こちらのコメント](https://stackoverflow.com/a/76753429)に以下のようなことが書かれていました。

- pydanticのv2で`Settings management`の機能はpydantic-settingsというパッケージ名に分割された
- v2をインストールした状態でv1のスタイルを使いたい場合は`from pydantic.v1 import BaseSettings`と記載する

つまり、pydanticのv2がインストールされていることがエラーの原因ぽいので、v1をインストールすれば良いのでは？

というわけで、バージョン指定してインストールしたところ、うまくいきました。

### 実行したコマンド

```
pip install "pydantic==1.*"
```

pipenvを使用している人は`pipenv install "pydantic==1.*"`

# 最後に

実際はpipenv使っていており、Pipfile.lockにもちゃんとバージョン指定がされていたので、こんなことは起こらないと思うのですが、何故か発生しました。
この辺の深追いは時間があったらやります。

# 参考

https://stackoverflow.com/questions/76664231/import-vaex-error-pydanticimporterror-basesettings-has-been-moved-to-the-py

https://docs.pydantic.dev/latest/concepts/pydantic_settings/
既存のLibreOfficeCalcファイルをPythonで操作する

# UbuntuでLibreOfficeCalcの既存ファイルを作る
LibreOfficeCalcは入っているはずなので、インストールは省略
A1セルに確認用の文字をなにか入れて、Pythonプログラムと同じディレクトリにDisp.odsとして保存します。

# プログラム
``` run.py
#!/usr/bin/python3

import subprocess as sproc
import uno
import time

# Display Disp.ods
sproc.run('soffice "--accept=socket,host=localhost,port=2002;urp;" --norestore --nologo --nodefault Disp.ods &',shell=True)
# 上記sofficeが完全に起動するまでちょい待ちを入れる
time.sleep(2)
lcont=uno.getComponentContext()
resolver=lcont.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver",lcont)
cctx = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
smgr = cctx.ServiceManager
dsktop=smgr.createInstanceWithContext("com.sun.star.frame.Desktop", cctx)
# 以下のファイル指定は、絶対パスにする
doc=dsktop.loadComponentFromURL("file:///home/kawa/develops/python/NCDLibre/Disp.ods", "_default", 0, ())
sheet=doc.Sheets[0]
# A1セルの内容を表示する
cell=sheet.getCellRangeByName("A1")
print(cell.String)
# B1セルに”AAA”を表示
cell=sheet.getCellRangeByName("B1")
cell.String="AAA"
time.sleep(5)
doc.close(True)
```

# 実行
このファイルに実行権をつけて
./run.py
で実行するとA1セルの内容を表示
B2セルにAAAと書いて
保存せずに終了する

# これができると何が嬉しいかというと
LibreOfficeCalcで作った固定書式にデータベースからデータを取ってきて反映させる等のアプリケーションをPythonで作れる
【GitHub　前提知識】

# GitHubとは
web上にファイルを保存して管理、共有できるサービス

# GitHubとGitの違い
Gitはファイルのバージョン管理をするシステム

Git：コマンドを実行、オフライン使用可能
GitHub：webブラウザで使用、オフライン使用不可、他人との共有が簡単

※Gitコマンドだけではインターネット上でファイルを公開したり、ソースコードをメンバーと共有ができない。
そこでGitHubが生まれた。

# GitHub基本用語

**ローカルリポジトリ**
自分のパソコンの中にあるファイル（情報）を格納する保管庫

**リモートリポジトリ**
GitHubの中にあるファイル（情報及び管理情報）を格納する保管庫

**インデックス**
ファイルをローカルリポジトリに登録する準備を行う場所
ファイルをローカルリポジトリに登録するには、まずはファイルをインデックスと呼ばれる場所に登録（add）するところから始まります。
インデックスに登録されたファイルをリポジトリに登録するには、コミット（保存）という操作を行います。

**コミット**
インデックスに登録されたファイルをローカルリポジトリに登録すること。
ファイルをインデックスには登録してもコミットを忘れてしまった場合、ローカルリポジトリには登録されないため気を付けましょう。

**プッシュ**
ローカルリポジトリの内容をリモートリポジトリにアップロードすること

**プル**
リモートリポジトリの内容をローカルリポジトリにダウンロードすること

**ブランチ**
リポジトリ内で行うファイルの管理を、用途に合わせて分岐させる機能
ブランチのメリットは、チームでアプリ開発を行う場合に作業を同時並行で進められることです。
分岐したブランチは他のブランチへ影響を与えません

**mainブランチ**
メインとなるブランチのこと
リポジトリには必ず1つのブランチが必要なため、まずはじめにmainブランチを作成することが一般的です。

**マージ**
あるブランチで行った変更を別のブランチに適用すること

**クローン**
既存のリモートリポジトリをパソコン内にコピーしてローカルリポジトリを作ること

**プルリクエスト**
自分が更新したファイルの内容を、他のチームメンバーにレビュー（更新内容が正しいかチェック）してもらう機能のこと
GitHub educationの申請方法について（個人的メモ）

主な内容は[この記事](https://qiita.com/Kobayashi2019/items/5adb9bde57691a770419)を参考にするといいです。

いくつかの注意点だけ、

1. 学生証ではなく、英語で書かれた在学証明書などがよい
2. 2要素認証など、事前に必要となる準備をきちんとしているかを確認したほうがいい。
2.  写真は一回使ったものを使用できないので注意する。
QAの価値創造力を捉え直してみる

「開発案件がない中でQAはどのようにして価値を発揮できるだろうか」

これについて考えてみたので言語化してみる。

QAの本質は「あるものを良くすること」だと考えている。
（他にもあると思うが、それは一旦置いといて。）
その1つの手段としてのテストなわけだが、
テストフェーズや開発工程によってテスト対象は変わる。
状況により、あらゆる成果物がテスト対象となりうる。

そして世の中に存在するあらゆるサービスは
「課題（負）の解消」か「更なる付加価値」の役割を担っていると思う。
マイナスを埋めるものかプラスをもたらすものか、
どちらにしても「人の暮らしを豊かにする」ものである。

少し話が逸れたけど、
ある時は開発ビルド、ある時はUIUXデザイン案、ある時は要件定義書など、
あらゆるものがテスト対象になりうると書いた。
そして前述の「サービスが担う役割」を踏まえると、1つの説が思い浮かぶ。

究極のテスト対象は「人の暮らし」ではないだろうか？

開発工程も、PJも、会社という枠組みすらも飛び越えて
「人の生活そのもの」をテスト対象とし、そこに潜むバグを見つけ、取り除く活動をする。
これはつまり、プロダクト開発そのものと言っていい。

開発案件がない中でQAはどのようにして価値を発揮するか、
その答えは「QA自らプロダクトを作る」ことだと思う。
そしてそれは近い将来、AIの台頭によって無理な話ではなくなるような気がしている。
8パズルをa*アルゴリズムで解く。

## a*アルゴリズム
最小の総コストを求める探索アルゴリズム。

## 8パズル
3x3のグリッド（9つのマス）の形。
各タイルには1から8までの数字が書かれている。
誰かに初期状態と目標状態を入力してもらって、初期状態からタイルを動かして目標状態と同じく作ることが目的だ。
こんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957386/ad343ec9-cf99-a2ac-ee76-17a894647177.png)

## 8パズルをa*アルゴリズムで解く前に話したいこと。
解く前に決めておくべきだと思うのは以下二つの定義だ。
①評価関数
②演算子

### ①評価関数の定義
コストを評価する関数。以下のように定義する。
f^(n)=g(n)+h^(n)

g(n):出発ノード（ここでは8パズル）から現在ノードまで到達するために消費した実際の経路コスト。
h(n):現在ノードから目標ノードまで到達するために消費する推定経路コスト。
h^(n):h(n)は正確に分からないため推測した推定値を示すヒューリスティック関数。

### ②演算子の定義
状態遷移を実現するための具体的なルール。

## 8パズルの例
誰かに以下のようなリクエストをもらった。
初期状態（これを）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957386/d87dba20-c07c-b4e6-81aa-79f6ddf9d544.png)
目標状態（これと同じくしてください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957386/54e6a494-9c4b-78e3-d31e-924ae4706ce1.png)

## 説明
### ①評価関数の定義
f^(n)=g(n)+h^(n)

g(n):空白の移動回数。
h(n):目標状態のパズルと比較した時、指定した位置に存在しないタイルの数。

### ②演算子の定義
U: 空白を上に移動させる。
D: 空白を下に移動させる。
R: 空白を右に移動させる。
L: 空白を左に移動させる。
（ここでなんで空白を移動させるのかわからない方へ。
　→　タイルを移動させることと空白を移動させることは観点の違いで、
 「空白を上に移動させる」はつまりパズルを下に移動させることと同じであるため。）


## 解き方
理解のために用意したら良いことがある。
OPENリストとCLOSEリストだ。
OPENリスト：これから展開するノードを格納するリストのこと。
CLOSEリスト：すでに展開したノードを格納するリスト。

①最初に、出発ノードをopenリストに挿入する。この際、出発ノードの評価関数も計算して一緒に添付する。
②このリストの中で評価関数が最も良い（主に最小）ノードNを選び、それをcloseリストに追加する。
③−①ノードNが目標ノードであれば、探索は成功なのだ。
③−②ノードNが目標ノードでない場合は、ノードNを展開して、展開したノードの評価関数も計算してopenリストに挿入する。この際、展開したノードがopenリストまたはcloseリストに重複している場合は、重複処理を行う。（既存のノードと展開ノードの中で、コストが低い方のノードを削除または更新するなど）

この手順を繰り返し、探索に成功しないままopenリストから取り出すノードがなくなれば、探索は失敗となる。

## 正解

四角番号は展開順序。
丸のU、D、R、Lは使った演算子。
f^(n)は評価関数=コスト。
青い線が最小のコストの解き方になる。

![スクリーンショット 2025-01-16 15.50.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957386/560b15ce-906d-5abf-693f-cde8be80a76a.png)

#### （　・。。・　）🖐

間違っている内容がありましたら、教えて頂ければ喜びます。
【初心者向け】next.config.js とはなにか？

## はじめに
:::note info
本記事は、next.js初心者が備忘のために書いている記事になります
next.config.js って一体なんだ？というレベル感からスタートしています
:::

## 公式情報
日本語サイトがあります。（大変ありがたい）

> Next.js の高度な動作をカスタマイズするには、プロジェクトディレクトリのルートに next.config.js か  next.config.mjs を作成します

>next.config.js は通常の Node.js モジュールであり JSON ファイルではありません。 Next.js サーバーとビルドフェーズで使用され、ブラウザのビルドには含まれません。

https://nextjs-ja-translation-docs.vercel.app/docs/api-reference/next.config.js/introduction


## シンプルな next.config.jsを作ってみる
試しに、React StrictMode、Next.js が公式提供のバンドルアナライザを含めました。

なお、バンドルアナライザを有効化する場合は、ビルド時に以下のコマンドを実行する必要があります。
```
ANALYZE=true next build
```

```js:next.config.js
const withBundleAnalyzer = require('@next/bundle-analyzer')({
  enabled: process.env.ANALYZE === 'true', // 環境変数 `ANALYZE` が 'true' の場合にバンドルアナライザを有効化
});

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true, // Reactの厳密モードを有効化
};

module.exports = withBundleAnalyzer(nextConfig);
```

https://github.com/vercel/next.js/tree/canary/packages/next-bundle-analyzer

## 最後に
webpack.config.jsの設定もできますが、webpackは未履修なので今後習得していきます。
render_views

# コントローラサンプルグループにレンダリングさせる。
`render_viewsの使用
>## Using render_views

任意の各グループまたはグローバル内で`render_views`宣言でビューをレンダリングすることをコントローラexampleグループに命じる。

>You can tell a controller example group to render views with the render_views declaration in any individual group, or globally.

シングルグループ内で直接`render_views`を使って下さい
>### Use render_views directly in a single group
Given a file named “spec/controllers/widgetscontrollerspec.rb” with:
```rb
require "rails_helper"

RSpec.describe WidgetsController, type: :controller do
  render_views

  describe "GET index" do
    it "has a widgets related heading" do
      get :index
      expect(response.body).to match /<h1>.*widgets/im # 
    end
  end
end
```
https://rspec.info/features/6-0/rspec-rails/controller-specs/render-views/

初期値では、rspec-railsは自動ビューテンプレートをレンダリングさせないようにrailsをハックする。テンプレートのレンダリングの出力ではなく、アクションの振る舞いやコントローラのフィルターのみをテストすべきだ。
>By default, rspec-rails hacks into Rails to prevent it from actually rendering view templates. You should only test the behavior of your actions & filters your controller tests, not the outcome of template rendering — that's what view specs are for.

しかしながら、アプリが通常的に行うようにコントローラ仕様書にテンプレートをレンダリングをさせることを望むならば、render_viewsディレクティブを使って下さい

>However, if you wish to make your controller specs render templates as the app normally would, use the render_views directive:
```rb
describe YourController do
  render_views
  ...
end
```

https://stackoverflow.com/questions/1063073/rspec-controller-testing-blank-response-body#:~:text=By%20default%2C%20rspec,the%20render_views%20directive%3A

```
      # This allows us to expose `render_views` as a config option even though it
      # breaks the convention of other options by using `render_views` as a
      # command (i.e. `render_views = true`), where it would normally be used
      # as a getter. This makes it easier for rspec-rails users because we use
      # `render_views` directly in example groups, so this aligns the two APIs,
      # but requires this workaround:
```
https://github.com/rspec/rspec-rails/blob/607293139d952e0344564afeaabfb2789701492c/lib/rspec/rails/configuration.rb#L96C7-L101C38
Reactで領域外をクリックしたときに閉じるハンバーガーメニューを作成する

# 概要
アイコンをクリックした際にメニューが表示され
メニュー以外を押下したときにメニューが閉じる動作をよくみるので実装してみました。

#### とはいえ...
ネット上に情報はあふれているし、カスタムフックのuseClickAwayとかもあるのでそちらをつかえばよかったのだが、きれいな実装を考えたく学習がてら書いてみました。
初学者のため、ご指摘あればコメントください。

#### 参考
[useClickAway](https://usehooks.com/useclickaway)
[github](https://github.com/streamich/react-use/blob/master/src/useClickAway.ts)

# コード
```tsx:Hamburger.tsx
'use client'

import { useState, useEffect, useRef } from "react";
import styles from "./styles/Hamburger.module.scss";

export const Hamburger = () => {

    const [isMenuVisible, setIsMenuVisible] = useState(false);
    const ref = useRef<HTMLDivElement>(null);

    type onClickAwayType = (event: Event) => void

    const onClickAway: onClickAwayType = (event: Event) => {
        ref.current && !ref.current.contains(event.target as Node) && setIsMenuVisible(false)
    };
    
    useEffect(()=>{
        document.addEventListener("mousedown", onClickAway);
        document.addEventListener("touchstart", onClickAway);

        return (()=>{
            document.removeEventListener("mousedown", onClickAway);
            document.removeEventListener("touchstart", onClickAway);
        })
    },[]);

    return (
        <div ref={ref}>
        <div>
            <div onClick={()=>{setIsMenuVisible(!isMenuVisible)}}>
                {isMenuVisible ? ("×"):("a")}
            </div>
            {isMenuVisible ? (<NavItems />):(<></>)}
        </div>
    )
}

//ハンバーガーアイコン押下で表示される内容
const NavItems = () => {

    return (
        <nav className={styles.navItems}>Hello world!</nav>
    )
}
```

これで
```tsx
{isMenuVisible ? ("×"):("a")}
```
にハンバーガーメニューのロゴを当てて
```tsx
const NavItems = () => {

    return (
        <nav className={styles.navItems}>Hello world!</nav>
    )
}
```
にdisplay: fixでスタイルを当てたら完成という感じ。

# 解説
### 最重要な処理
結局重要なのは
```tsx
ref.current && !ref.current.contains(event.target as Node) && setIsMenuVisible(false)
```
の部分で、ref.currentがnullでない、かつクリックイベントの起きた対象がref.currentの中に含まれていない場合にメニューを閉じるという動作。

（refはハンバーガーアイコンと表示されるメニューが格納されている要素のものを指定しているので、そこ以外を押下した際にメニューが閉じてほしい）


ここはuseClickAwayの
```tsx
const { current: el } = ref;
      el && !el.contains(event.target) && savedCallback.current(event);
```
を参考にしました。
ただ実直にまるパクリして
```tsx
ref.current.contains(event.target)
```
と記載すると型のエラーが表示されてしまうので
型アサーションで型を指定しています。
（Node型はEvenTarget型を継承しているようなので問題ないはず...?）

### クリックイベントの追加
あとはレンダリング時に、document全体にクリックイベントを追加すればいいので
```tsx
useEffect(()=>{
        document.addEventListener("mousedown", onClickAway);
        document.addEventListener("touchstart", onClickAway);

        return (()=>{
            document.removeEventListener("mousedown", onClickAway);
            document.removeEventListener("touchstart", onClickAway);
        })
    },[]);
```
これで完成

# まとめ
人の作ったコードを解読するのは難しい...
作り終わったら簡単なんだけどね。
もっとts力を高めなければ...
circuitjsの作法 その48

# 概要
circuitjsを調査してみた。
練習問題やってみた。

# 練習問題
elixirで論理回路アセンブラをコンパイルして、ネットリストを高位合成せよ。

# 論理回路アセンブラの仕様

- make
回路を作る。ビットを指定する。
inputが２つで、outputが２つ、なら４。make 4

- in
inputを作る。
０，１，２がinputならば、in 0 2

- out
outputを作る。
３，４，５がoutputならば、out 3 5

- xor
xorを作る。
０，１が入力で、2が出力ならば、xor 0 1 2

- and
andを作る。
０，１が入力で、2が出力ならば、and 0 1 2

- or
orを作る。
０，１が入力で、2が出力ならば、or 0 1 2

# 投入するソース

```
make 3
in 0 1
out 2 2
or 0 1 2
```

# 生成したネットリスト

```
$ 1 0.000005 10.20027730826997 50 5 50 5e-11
L 224 128 176 128 2 0 false 5 0
L 224 160 176 160 2 0 false 5 0
M 368 144 416 144 2 2.5
152 224 144 368 144 0 2 0 5
```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/6ec52ba6-b3ea-dce6-4041-4fc3e50bbbb2.png)

# ネットリスト読み込み手順

https://www.falstad.com/circuit/circuitjs.html

を開く。

ファイル>テキストデータからインポートをクリック




# 成果物

https://paiza.io/projects/PBjR0LXFRdP12pin-A1d2g?language=elixir

# サンプルコード

```

defmodule Asm do
	def start_link do
		Agent.start_link(fn ->
			%{in0: "", in1: "", make0: "", u: ""}
		end, name: __MODULE__)
	end
    def make0(a) do
	end
    def in0(a, b) do
    end
    def out0(a, b) do
    end
    def and0(a, b, c) do
		Agent.update(__MODULE__, fn v ->
            str = "150 224 144 368 144 0 2 0 5"
            %{v | u: v.u <> str}
		end)
    end
    def xor0(a, b, c) do
		Agent.update(__MODULE__, fn v ->
            str = "154 224 144 368 144 0 2 0 5"
            %{v | u: v.u <> str}
		end)
    end
    def or0(a, b, c) do
		Agent.update(__MODULE__, fn v ->
            str = "152 224 144 368 144 0 2 0 5"
            %{v | u: v.u <> str}
		end)
    end
    def print() do
		Agent.get(__MODULE__, fn v ->
            IO.puts "$ 1 0.000005 10.20027730826997 50 5 50 5e-11"
            IO.puts "L 224 128 176 128 2 0 false 5 0"
            IO.puts "L 224 160 176 160 2 0 false 5 0"
            IO.puts "M 368 144 416 144 2 2.5"
            IO.puts v.u
		end)
	end
end

defmodule Main do
	def run(str) do
    	Enum.map(String.split(str, "\n"), fn l ->
		    #IO.puts l
		    s = String.split(l, " ")
		    #IO.puts Enum.at(s, 0)
		    cond do
			Enum.at(s, 0) == "make" ->
				Asm.make0(Enum.at(s, 1))
			Enum.at(s, 0) == "in" ->
				Asm.in0(Enum.at(s, 1), Enum.at(s, 2))
			Enum.at(s, 0) == "out" ->
				Asm.out0(Enum.at(s, 1), Enum.at(s, 2))
			Enum.at(s, 0) == "and" ->
				Asm.and0(Enum.at(s, 1), Enum.at(s, 2), Enum.at(s, 3))
			Enum.at(s, 0) == "nand" ->
				Asm.nand0(Enum.at(s, 1), Enum.at(s, 2), Enum.at(s, 3))
			Enum.at(s, 0) == "nor" ->
				Asm.nor0(Enum.at(s, 1), Enum.at(s, 2), Enum.at(s, 3))
			Enum.at(s, 0) == "xor" ->
				Asm.xor0(Enum.at(s, 1), Enum.at(s, 2), Enum.at(s, 3))
			Enum.at(s, 0) == "or" ->
				Asm.or0(Enum.at(s, 1), Enum.at(s, 2), Enum.at(s, 3))
			true ->
				IO.puts ""
			end
	    end)
	    Asm.print
	end
end

Asm.start_link

Main.run("""
make 3
in 0 1
out 2 2
or 0 1 2
""")








```

以上。
Node-RED MCU Edition用のCameraノードを作ってみた

# はじめに

Moddable SDK 5.2.0でカメラデバイスがサポートされました。
その時の経緯はこちらにまとめています。

https://qiita.com/kitazaki/items/bc23b0a4956295804cfd

https://qiita.com/kitazaki/items/eb62c0d68bbd68b6a24d

Node-RED MCUでカメラデバイスを使用できるようにするCameraノード(mcu_camera)を作った備忘メモです。


# Moddable SDKのサンプルプログラム

Moddable SDKのサンプルプログラムの中に
examples/io/imagein/camera
というディレクトリがあり、その中の
camera-server-jpeg
を使用します。


# Moddable SDKのサンプルプログラムをNode-RED MCU Editionのノードへ移植する

サンプルプログラムから移植した際の変更点は以下です。

- Node-REDノードの設定画面で画像フォーマットとサイズ(横 x 縦)を指定できるようにする
- 常にカメラデバイスが動作している(camera.read()を繰り返している)動作を、リクエスト(Node-REDノードの入力)があった時に動作するようにする
- 上記の変更により、camera.cでハードコーディングされているcamera_config.fb_count = 3の問題(frame bufferに3つの画像が保存されるため、frame(画像データ)を取得すると以前の古いデータが取得される)を回避するため、3回撮影してからframe(画像データ)を取得する

# ハマった問題

Node-REDノードから画像データを出力する時にエラー(host objectエラー)が発生しました。
生成AI(Claude)に助けてもらい、データを変換することで解決しました。
(画像データはバイナリデータなので、Array.from()ではなく、Buffer.from()を使用)

```javascript:camera.js
frame.bytes ??= new Uint8Array(frame);
msg.payload = Buffer.from(frame.bytes);
```

https://x.com/Zakkiea/status/1878952752132579580


# mcu_cameraノード

npmとNode-REDノードライブラリに登録しましたので、ぜひご利用ください！

https://www.npmjs.com/package/@kitazaki/node-red-contrib-mcu-camera

https://flows.nodered.org/node/@kitazaki/node-red-contrib-mcu-camera

https://github.com/kitazaki/node-red-contrib-mcu-camera


# 残っている課題

~~Moddable SDK側の対応待ちの課題が2つ残っています。(2025年1月16日時点)~~
カメラデバイスのクロック周波数が高すぎる問題は解決されました。(Moddable SDK 5.4.1へ反映)(2025年1月31日時点)
ソースコードを修正すれば解決する問題ですが、JavaScriptコードから設定変更が可能になるまで待つ必要があります。


### カメラデバイスのクロック周波数が高すぎる問題

https://github.com/Moddable-OpenSource/moddable/pull/1447

### 撮像(画像)が水平方向に反転する問題

https://github.com/Moddable-OpenSource/moddable/discussions/1451
私のsympyの目次 ＜【仮想仕事の原理とエネルギ原理】様を参考に目次をつくった。

# 私のsympyの目次
#### ② 構造力学の「構造」例題
[(積分)例題1:集中荷重を受ける片持ち梁](https://qiita.com/mrrclb48z/items/3247352386176f692a1d)
[(積分)例題2:等分布荷重を受ける片持ち梁](https://qiita.com/mrrclb48z/items/466808767079250487f9)
[(積分)例題3:等分布荷重を受ける単純梁](https://qiita.com/mrrclb48z/items/49ad3cca9e645a1428ad)
[(積分)例題4:等分布荷重を受ける固定-ローラ梁](https://qiita.com/mrrclb48z/items/ae55d11120841ebd8a34)
[(積分)例題5:等分布荷重を受ける両端固定梁](https://qiita.com/mrrclb48z/items/6021e63713235d79acb8)
[(積分)例題6:端モーメントを受ける単純梁](https://qiita.com/mrrclb48z/items/cfe3e67d286c02c7d288)
[(積分)例題7:x=aで集中荷重を受ける片持ち梁](https://qiita.com/mrrclb48z/items/5a7477fcfde4ddb85f77)

#### ⑧ 相反定理 例題（仮想仕事の原理とエネルギ原理）
[(相反定理)例題1:相反定理の成立つことの確認](https://qiita.com/mrrclb48z/items/608bae7f365508b8c933)
[(相反定理)例題2:単純ばり→たわみを算定](https://qiita.com/mrrclb48z/items/156503724eca9adeb2ce)
[(相反定理)例題3:片持ちばり→たわみを算定](https://qiita.com/mrrclb48z/items/042c149f71a0bf2dfa36)
[(相反定理)例題4:系1と系2で幾何学的境界条件が異なる場合の相反定理→反力の算定](https://qiita.com/mrrclb48z/items/ba53c977ea6bc46937c5)
[(相反定理)例題5:　〃　　](https://qiita.com/mrrclb48z/items/6d5965919f4b318be83f)
[(相反定理)例題6:マクスウェルの定理](https://qiita.com/mrrclb48z/items/4966ea6d05c86780e4e6)


# オリジナル
・Youtube 仮想仕事の原理の教育に関する研究会 様
**仮想仕事の原理とエネルギ原理 再生リスト**
https://www.youtube.com/watch?v=bPER11Y43Ys&list=PLGJHbchHFZJgUX31k3dBRvaLJ5g2vxtnw

# いつもと違うおすすめです。

#### sympyで(Beamで）
勉強中
https://docs.sympy.org/latest/modules/physics/continuum_mechanics/beam.html
https://docs.sympy.org/latest/modules/physics/continuum_mechanics/beam_problems.html
https://qiita.com/tags/beam

#### Qitta内で

https://qiita.com/mrrclb48z/items/c3274daf5f7a99cfe027

https://qiita.com/mrrclb48z/items/893cb0967e4ddb2945f7


#### 相反定理 共通編 Qiita内

https://qiita.com/mrrclb48z/items/c044ef9e3d917a23c0a8

https://qiita.com/mrrclb48z/items/e7eab594dc3e876ed9ca

＞こんなところにベッティ(Betti's theorem)の相反定理がありました。

https://qiita.com/mrrclb48z/items/a6f5ecb20b793b563bdc#%E3%81%93%E3%82%93%E3%81%AA%E3%81%A8%E3%81%93%E3%82%8D%E3%81%AB%E3%83%99%E3%83%83%E3%83%86%E3%82%A3bettis-theorem%E3%81%AE%E7%9B%B8%E5%8F%8D%E5%AE%9A%E7%90%86%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F