OmniAICreator/Qiita-1.07M huggingface dataset:
【Java】コンストラクタとstaticメソッドについて

## コンストラクタとは
クラスで指定できる、インスタンス化と同時に実行できるメソッドのこと。定義方法はメソッドと似ているが、以下のルールに従って定義する。

* 名前はクラス名と同じ
* 戻り値は持たない(戻り値の型宣言もしない)
* 引数を受け取ることができる

```ruby:Java(A.java)
public class A{
	A(){
		System.out.println("A");
	}
}
```

以下のようにインスタンス化したタイミングでコンストラクタが呼び出されることを確認できる。
```ruby:Java(Main.java)
public class Main {
	public static void main(String[] args) {
		A a = new A();
	}
}
```

結果
```
A
```

## 継承時のコンストラクタの呼ぶ順番について
以下のようにAを継承したBを用意する。

```ruby:Java(B.java)
public class B extends A{
	B(){
		System.out.println("B");
	}
}
```

そしてMainクラスでBクラスのインスタンス化を実施する。

```ruby:Java(Main.java)
public class Main {
	public static void main(String[] args) {
		B b = new B();
	}
}
```

結果
```
A
B
```

このようにABという順番で呼び出された。継承している場合はスーパークラスのコンストラクタが先に呼び出され、次にサブクラスのコンストラクタが呼び出される。なお、A型参照でBクラスのインスタンス化を行った場合も同様の結果になる。

```ruby:Java(Main.java)
public class Main {
	public static void main(String[] args) {
		A a = new B();
	}
}
```

結果
```
A
B
```

## コンストラクタから自クラスのコンストラクタを呼ぶ方法
自クラスのコンストラクタは**this**で呼ぶことができる。
```ruby:Java(A.java)
public class A{
	A(){
		System.out.println("A");
	}
	A(int num){
		this();
		System.out.println("this" + num);
	}
}
```
```ruby:Java(Main.java)
public class Main {
	public static void main(String[] args) {
		A a = new A(1);
	}
}
```

結果
```
A
this1
```

なおここで注意したいのがthis()の位置だ。試しにthis()の位置を変えてみよう。

```ruby:Java(A.java)
public class A{
	A(){
		System.out.println("A");
	}
	A(int num){
		System.out.println("this" + num);
		this();
	}
}
```

結果
```
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	コンストラクター呼び出しは、コンストラクター内の最初のステートメントである必要があります

	at A.<init>(A.java:7)
	at Main.main(Main.java:3)
```

このようにエラーが発生した。this()はコンストラクタの中で1番最初に呼び出す必要がある。

## コンストラクタから親クラスのコンストラクタを呼ぶ方法
親クラスのコンストラクタは**super**で呼ぶことができる。

```ruby:Java(B.java)
    public class B extends A{
	B(){
		super();
		System.out.println("B");
	}
}
```
```ruby:Java(Main.java)
public class Main {
	public static void main(String[] args) {
		B b = new B();
		}
}
```

結果
```
A
B
```

なおここでもsuperの位置は重要だ。試しにsuper()の位置を変えてみよう。

```ruby:Java(B.java)
public class B extends A{
	B(){
		System.out.println("B");
		super();
	}
}
```


結果
```
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	コンストラクター呼び出しは、コンストラクター内の最初のステートメントである必要があります

	at B.<init>(B.java:4)
	at Main.main(Main.java:3)
```

このようにsuper()もコンストラクタの中で1番最初に呼び出す必要がある。なおthisも同じくコンストラクタの中で1番最初に呼び出す必要があるため、同一コンストラクタ内でthisとsuperを呼び出すことは不可能。
もしどちらも呼び出したい場合は別々のコンストラクタ内でthisとsuperを呼び出す必要がある。

```ruby:Java(B.java)
public class B extends A{
	B(){
		super();
		System.out.println("B");
	}
	
	B(int num){
		this();
	}
}
```

## まとめ
* コンストラクタはインスタンス化と同時に実行できるメソッドであり、①名前はクラス名と同じ②戻り値は持たない③引数を受け取れる、という特徴がある
* スーパークラスのコンストラクタが先に呼び出される
* 自クラスのコンストラクタはthisを使って呼べる。なお、thisはコンストラクタの中で1番に呼び出す必要がある
* 親クラスのコンストラクタはsuperを使って呼べる。なお、superはコンストラクタの中で1番に呼び出す必要がある
〜動線作り〜 Slack ワークフローにあった関数でチョチョイとやる

:::note
本記事は [リンクアンドモチベーション Advent Calendar 2024](https://qiita.com/advent-calendar/2024/lmi) の15日目です🎄
:::

## 思い立ち
「システムの操作権限を一時的に付与したいなー、でもガッツリ作り込むのは嫌だなー」
最近、こんなことを思ってました。

操作権限の付与自体は、大体のシステム側のGUIがしっかりしているので「ボタン ポチッ」でできますよね。
じゃあその導線を準備してあげて、操作権限の剥奪だけ自前で作ろうとなりました。
（決してサボりたかったとかではありませんよ？）

この時Slack ワークフローで使える値に知らない部分がいくつかあったので備忘がてら紹介します。
（無効化プロセスの方はまたの機会にでも）

## そもそもSlack ワークフローについて
:::note info
知っている人は読み飛ばしてください。
:::
Slack ワークフローは、Slack上で日常的なタスクやプロセスを自動化するための機能です。

例えば、

- 定期的な報告: 毎日、週ごと、月ごとに特定のチャンネルに報告を投稿する
- タスクの割り当て: 新しいタスクが発生した際に、担当者に通知を送る
- 承認プロセス: 申請や承認のプロセスをSlack上で完結させる
- アンケート: チームメンバーに対してアンケートを実施し、結果を集計する

など、様々なことを自動化できます。
個人的には、馴染みのアプリケーションと連携が容易にできるようになっていて、上記の機能をコンパクトにできる点が好みです。
（Slackに来たアラートに対して、すぐにgit issue作ったりとか）

## 本題
Slack ワークフローには結構な種類のフォームがあってカスタムアプリとか作んなくてもそれなりの情報を持ってます。
例えばタイプがSlack ユーザーの場合（ワークフロー起動者とかでも）、以下の情報を取得しています。
- 表示名（メンションあり）
- ユーザーID（メンションあり）
- 表示名
- ユーザーID
- 氏名
- Eメール


この辺の情報、関数を使って表示されてまして
Eメールだと以下のような形でuser_idから取得してます。
```
{{{slack.user_email(user_id={xxxx})}}}
```

他にも日時形式では以下のようなことができます。
```
## 日付をM月d日で表示したいとき
{{{time.format(seconds={{inputs.Ft0856UQ2V2Q__event_timestamp}}, timezone=Asia/Tokyo, locale=ja-JP, dateType=DATE_WITH_ORDINAL_MONTH_YEAR_HOUR_MINUTE_AMPM_TZ,format='M月d日')}}}

## 日時まで表したいとき
{{{time.format(seconds={{inputs.Ft0856UQ2V2Q__event_timestamp}}, timezone=Asia/Tokyo, locale=ja-JP, dateType=DATE_WITH_ORDINAL_MONTH_YEAR_HOUR_MINUTE_AMPM_TZ,format='M月d日 HH:mm')}}}
```
これらを使って、ボタンに埋め込むリンクを工夫できます
```
## 別のアプリケーションのユーザーリンクにする
https://your-redash-instance.com/api/users?q={slack.user_email(user_id={{inputs.Ft0856UQ2V2Q__user_id}})}

## 別のアプリケーションの日付検索リンクにする
https://qiita.com/search?sort=&q=created%3E={time.format(seconds={{inputs.Ft0856UQ2V2Q__event_timestamp}}, timezone=Asia/Tokyo, locale=ja-JP, dateType=DATE_WITH_ORDINAL_MONTH_YEAR_HOUR_MINUTE_AMPM_TZ,format='Y-M-d')}
```

▼イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1761469/8193bf8f-4d36-3147-4066-2ae9eb94cc87.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1761469/3d738a69-ac3a-4770-6336-1abbebb67e73.png)


:::note warn
他にも色々ありそうなものですが、そもそもuser_email()とか関数記述が公式にはなかったのでワークフロー専用の関数かもしれませんね。
:::

## 最後に
記事を読んでくださりありがとうございました！
今後もちょっと楽になるものを~~サボりながら~~日常的に作っていこうと思います！

## 参考
- [ワークフローを作成する : Slack でワークフローを作成する](
https://slack.com/intl/ja-jp/help/articles/17542172840595-%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B---Slack-%E3%81%A7%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
- [Slack platform overview](https://api.slack.com/docs)
- [redash](https://redash.io/help/user-guide/users/) ※今回付与対象のシステムとして使用しました
microCMSを使ってポートフォリオを作ったなと思い出す今日この頃 / Today I remember when you used microCMS to create your portfolio. (日本語 / 英語)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812041/a0b9a6c8-74e6-97fd-eeb2-4085e2e3a189.png)
# 日本語
こんばんわ！
Advent Calendar 2024に参加してまして、14日目の記事を書いていこうと思います。
題材は「転職活動して気づいた「microCMSでこんなことができた！あなたのユースケースを大募集 by microCMS Advent Calendar 2024」ということで、学生の時に、microCMSを使ってポートフォリオを作った経験を思い出しながら書いていこうと思います。

### microCMSを使用して何を使用しようとしたのか
学生の時に、このサービスを使用し、バックエンドのAPI代わりとしていました。作成したものは私の経歴とかできる技術、持っている資格を紹介するものとなっていました。かなり昔のものなので作ったものが見つけられずに紹介することができませんでした。申し訳ないです～

### なぜmicroCMSを使用しようとしたのか
ただ単純に、バックエンドのホストがすごくめんどくさいのでそれを簡単にできるmicroCMSを選びました。APIを公開するってなるとクラウドサービスを使用したり、コーディングが必須となりますね！このサービスはそんなことしなくてもデータを簡単にAPIとして受け取ることができます！そのおかげで私はNext.jsのみでサイトを作成することができました！
本当に魅力的です！

とこんな感じです。
ちょっと内容が感想文的な形なので、今度時間あるときには実際に使ってみた触感を記事にできるようにしたいです。

ここまで読んでいただきありがとうございます。
# ENGLISH
Good evening!
I'm participating in Advent Calendar 2024, and I'm going to write an article for the 14th day.
The subject of the article is “I realized that I could do this with microCMS when I changed jobs! Calling for your use cases by microCMS Advent Calendar 2024”, I would like to write about my experience of creating a portfolio using microCMS when I was a student.

### What I tried to use microCMS for
When I was a student, I used this service as a backend API replacement. The one I created was supposed to introduce my background, the skills I can do, and the certifications I have. It was so long ago that I couldn't find the one I created and couldn't introduce it. My apologies~.

### Why did you decide to use microCMS?
I chose microCMS simply because hosting a backend is a pain in the ass, and exposing an API requires using a cloud service and coding! This service makes it easy to receive data as an API without having to do that! This service allows me to create my site using only Next.js!
It's really fascinating!

And that's about it.
I hope to be able to write an article about the actual experience of using this service when I have time next time.

Thank you for reading this far.
ある条件を満たす最初の要素・インデックスを取得したい

ある条件を満たす最初の要素を取得したい場合、`find`を利用します。

```rust
let names = vec!["Alice", "Bob", "Carol", "Charlie"];
assert_eq!(names.iter().find(|name| name.starts_with("C")), Some(&"Carol"));
assert_eq!(names.iter().find(|name| name.starts_with("E")), None);
```

同じように、ある条件を満たす最初の要素のインデックスを取得したい場合、`position`を利用します。

```rust
let names = vec!["Alice", "Bob", "Carol", "Charlie"];
assert_eq!(names.iter().position(|name| name.starts_with("C")), Some(2));
assert_eq!(names.iter().position(|name| name.starts_with("E")), None);
```


**環境情報**

- rustc 1.76.0 (07dca489a 2024-02-04)
- cargo 1.76.0 (c84b36747 2024-01-18)
ドメインもCloudFlareでいいじゃないでしょうか！

# ドメインもCloudFlareで
CloudFlareといったらセキュリティ対策やら高速化やらSSL化などのイメージが強いですが、ドメイン購入やらホスティングサービスもあります。
個人のウェブ開発はCloudFlareでだいたいなんとかできるのでドメインも「Cloudflare Registrar」で購入してしまおうって感じです。

ただし日本のドメインであるJPは買えません。

## CloudFlareでドメインを買うメリットとは
1. ドメインを原価で購入できる
2. CloudFlareで管理しやすい

やっぱり全部同じサービスで管理できると楽ちんなんですよね。
CloudFlare はよく開くので有効期限もパッと見れて安心です。

## 値段やら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/087003dc-b356-f359-b6ee-2e96e4874ea1.png)

私は pitan76.net と wikichree.com の2つを現在保有していますが、どちらともCloudFlare で購入してます。
wikichree.comに関してはもともと別のところで購入していたのですが、黒字ではないため、できる限りコストを抑えたいので「ドメインの移管」をしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/64e8a147-9a33-71d9-5177-3e4c1d7adbf2.png)

こんな感じで.comだと 年間 $10.44 です。
.netだと $11.84 でした。

<br />

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/b9d4edac-8f58-9fba-4c26-a93666937d20.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/ba1165df-ee88-6ce9-787e-8e4ca80a3518.png)

見た感じ.ukが一番安いんですかね？
.com、.net、.org がよく使われるので多くの人が買うのはそこらへんですかね



<br />

まあ、趣味でやってる個人開発者からすればウェブ開発はCloudFlareがコスパ最強ですね。
ドメイン代だけ支払えばあとはほぼ無料で遊べちゃいます

DDoS攻撃の対策やら高速化やらSSL化、ホスティングも無償だしとんでもないですね。おまけにbot対策の認証テストであるTurnstileもありますし。
Salesforce動的強調表示パネルを設定しよう

本橋孝昭です

今回はSalesforceの動的強調表示パネルの設定について解説します

今回は例として取引先オブジェクトの動的強調表示パネルについて設定をします


## ステップ1 既存の強調表示パネルを削除しよう

まずは既存の強調表示パネルの削除をしましょう
（そうしないと既存の強調表示パネルと新規の動的強調表示パネルが両方見えるのでややこしいいしどっちがどっちだか分かりにくいです）

なお、削除　とは以下画像のように右上のごみ箱マークをクリックすることです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/08f52f3f-3b81-f5b3-a272-5ba3919b8f1a.png)

この右下のごみ箱マークは強調表示パネルにカーソルを合わせると表示されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/a819e56d-7caf-406c-e00c-7f61bb698612.png)

## ステップ2　左側のコンポーネント「動的強調表示ラベル」をドラッグ&ドロップしページ内にコンポーネントを表示させる

左側の「項目」タブをクリックすれば「項目コンポーネント」内に「動的強調表示ラベル」がありますのでそれをドラッグ&ドロップして表示させます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/3a090042-456b-fbf4-bd48-ecb196e3ca14.png)


これで動的強調表示パネルの設定はできました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/9275a564-f2cf-06de-8ea8-070ff9e7f3ca.png)

しかし、これではまだ
・ボタンの配置
・項目の配置

が出来ていないですね

ここでは動的強調表示パネルの編集方法も示します


## ステップ3 動的強調表示パネルのボタンの設定を行う

「アクションを追加」をクリックすることで配置したいボタンの選択が可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/7eff6a45-b062-3672-0cf7-6c699f56ad56.png)

表示させたいボタンが決まっている場合検索をすることで容易にボタンを探せます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/450eb314-05b8-cfc5-494c-d3771a8ddfe6.png)

ボタンを探したら「完了」をクリックしてください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/f4f103b9-50f8-e3c1-9188-c220a355da2a.png)

そうすることでボタンの配置が可能です
なおボタンの順番を変更することもアクションの並び順の変更で可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/d89ad8ab-690f-8e5c-9b73-088b26a28dba.png)

以上でボタンの設定方法をご説明しました
次に項目の配置について解説します

## ステップ4 動的強調表示パネルの項目の設定を行う

項目の設定は左側の「項目」タブの下のほう（先ほどさがした「動的強調表示パネル」よりも少し下）に行けば取引先の項目一覧が表示されます

これをドラッグ&ドロップして動的強調表示パネルの中に項目を追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/ac48d6dc-4a45-6552-3206-c5686d136089.png)


以上で動的強調表示パネルの設定は完了です

あとはこのページの設定を反映させましょう

まずは右下の「保存」ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/47fd23ee-d3b1-3601-0437-21f44d3d866e.png)

そして「有効」をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/d189f56f-710e-7766-e0de-26c8e8f9cc9b.png)

組織のデフォルトに設定したい場合
「組織のデフォルトとしての割り当て」をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/2bb36d4a-02ca-a303-084a-bf99e5361b65.png)


フォーム要素の割り当てを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/427295cc-9c79-d59f-c2ce-09d85848a109.png)


「保存」をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/f787775b-37a3-73d7-f71a-84bf39e43492.png)


以上の設定から取引先ページを確認すると動的強調表示パネルに変更されていることが分かります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/74be63d7-9c4b-f680-b5c5-cd8b74b4a185.png)


以上で設定は完了です。お疲れ様でした。
[備忘録]　Youtubeを見ながらUnityの勉強　5日目

# はじめに
　こんにちは，Umamusume22です。最近、業務でUnityを使っているのですがUnityが分からないので自主的に勉強を始めました。とりあえず、Youtubeを見ながらUnityの勉強を行います。学んだことはここの記事にアウトプットしていきます。
 今日は以下の動画を見てUnityの勉強を行いました

https://youtu.be/QXYFE7k2Cfs?si=CVLqL_wgM3g8Nww5


 
 # 備忘録
 - ConsoleのClearを押したら表示されたログを全て削除する
 - Clear on Playは前まで出力されていたメッセージを一度削除する
     - Clear on Playがoffになったら出力されていたメッセージが残る




# 最後に
　勉強した内容を備忘録にしました。(備忘録の内容が短すぎてすみません)

 

ここまで記事を読んでいただきありがとうございました！

※ウマ娘の声をフーリエ変換した記事や水栓の開閉判定をLineに通知する記事も書いています．suzuが私です．興味がある方はぜひご覧ください！
https://vigne-cla.com/31-1/#toc5

※noteもやっています．
https://note.com/madoka235/n/nbba2153326e1

ぜひフォローよろしくお願いします!
migemoとfzfを合体させたようなものを作りたい

# はじめに

本記事は「SYSTEM Iアドベントカレンダー2 14日目」の記事です。

また、本記事はなにかを成し遂げた、というような内容ではなく、こういうのがあったらいいなぁ、という妄想だけの記事になります。

# migemoとは

[公式サイト](https://www.kaoriya.net/software/cmigemo/) によると、「ローマ字入力から日本語を(インクリメンタルに)検索するための正規表現を生成する」ツール・ライブラリです。

これだけだとちょっと想像がしにくいですね。

実例としては、以下になります。

```
「fujisan」とローマ字で入力
↓
「富士山|藤さん|不二さん|…」がヒット
```
migemoの利点は、いちいち日本語入力に切り替えることなく日本語の単語を検索できるところです。

# fzfとは

続きまして、fzfです。[GitHubのREADME](https://github.com/junegunn/fzf) によると「fzf is a general-purpose command-line fuzzy finder.」です。
主にコマンドラインで使われるツールかと思いますが、流れとしては以下のような感じ。

```
標準出力に、以下のような出力がされたとします。
$ find src -type f -print
src/LICENSE
src/actiontype_string.go
src/algo/algo.go
src/algo/algo_test.go
src/algo/normalize.go
src/ansi.go
src/ansi_test.go
src/cache.go
src/cache_test.go
src/chunklist.go
src/chunklist_test.go
src/constants.go
src/core.go
src/functions.go
src/history.go
src/history_test.go
src/item.go
src/item_test.go
src/matcher.go
src/merger.go
src/merger_test.go
```
これをfzfにパイプします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31413/53084d51-f68f-390e-9464-13bf8d383e19.png)


待ち受けてるところで、例えば`sua`と入力します。
すると、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31413/e873c92e-ef33-17c4-79bf-c30a6b19b6ba.png)

なんとなく s、u、a、にマッチする行を絞り込むことができます。

通常は、このようにターミナル上でなにかを絞り込む用途で使われることが多いです。

# 合・体！

ある日、わたしは思いました。

> 「migemoのローマ字で日本語の単語を検索できる機能と、fzfのあいまい検索、相性がいいのではないか？」

とはいえCMigemoだと実装されたのが結構古く、辞書ファイルもShift_JISを想定していたりします。

なので現在は、さまざまな言語で再実装されたMigemoファミリーが存在しています。

詳細は「[@ogunaさんの記事](https://qiita.com/oguna/items/c70e8c409b663d74113e#%E4%B8%BB%E8%A6%81%E3%81%AA%E8%A8%80%E8%AA%9E%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%A3%85)」をご参照ください。

Goによる実装もありますね。また、fzfも本家はGo言語で実装されています。

と、いうことは、合体できるんじゃね？と思っている次第です。

ただ、わたし自身はGoの経験ちょっとしかないんですよねぇ…。

がんばってGoを読み解くか、別の言語で再実装するか、というところで手が止まっている状況です。

# 展望

まずはCLIで使えればいいとは思っていますが、一番活きるのが、Webでの入力の際のリスト選択ではないかと考えています。そう、WASMにコンパイルすれば、可能なんではないか、と期待しています。

# 繰り返しますが

本記事は、こうなったらいいなぁ、を書き殴ったポエムです。私としては作ってみたいとは思いますが、どなたかに先を越されたとしても世の中便利になるならまぁいっかくらいの気持ちでおりますので、われこそはという方はチャレンジしてみてください。
Gemini 2.0 の読み方は？

Gemini 2.0の読み方は？
Gemma 2 の読み方は？

||英語|日本語|
|---|---|---|
|Gemini 2.0|ジェミナイ　トゥー　ポイント　オー|ジェミニ にーてんぜろ|
|Gemma 2|ジェマ　トゥー|ジェマ　ツー  |


## Gemini 2.0

画面共有機能が便利すぎる。
https://aistudio.google.com/live

### 英語読み
2024/12/11発表の Gemini 2.0 Flash の発表動画。
 
 https://youtu.be/Fs0t6SdODd8?t=17

 「ジェミナイ　トゥー　ポイント　オー」って言ってる。英語はこっち。

### 日本語読み
日本法人の公式見解は「ジェミニ」。なので日本語では「ジェミニ」みたいですね。

https://www.itmedia.co.jp/news/articles/2312/08/news139.html

音声の会話でGEMINIご本人に自己紹介してもらったところ、日本語の会話でも「ジェミナイ」と言ってた。。。そのうち変わるのかな。


## Gemma

### 英語読み
Google Cloud Tech による紹介動画。

https://youtu.be/t3js5iy1pcE?t=87

 「	ジェマ　トゥー」と聞こえる。

### 日本語読み
Google Cloud Japan の人のセッション。「ジェマ」と言っている。

https://youtu.be/OovXQKBPqqw?t=32

ゲンマだと思ってた。ラテン語読み？
https://ja.forvo.com/word/gemma/
デバッグ思考の3ステップ｜文章題で身に付くプログラミング思考入門️（13/25）

## はじめに

ちょっとした家電トラブルなんていうのは日常茶飯事ですよね。
そして、プログラマがスルっと家電トラブルを解決するのは、エンジニアだからではなく、トラブルを切り抜けるための考え方を知っているからです。

『文章題で身に付くプログラミング思考入門️』は、日常や文章問題からプログラミング思考を身に付けていく、簡単で身近で、あなたをちょっと輝かせてくれるシリーズです。

今回は、デバッグ思考について考えていきます。

## これまでのまとめ

https://qiita.com/advent-calendar/2024/thewaggle

## 対象者
- プログラミングの考え方を学びたい人
- プログラミングに挫折したことのある人
- 論理的思考を鍛えたい人
- 文系の人
- エンジニアの思考を理解したい人

## 概要

ところで、そもそもデバッグとは、プログラムに潜むバグ（虫）を取り除くことを言います。
ではデバッグ思考の3ステップとは何かというと、
1. 問題をいかに特定し
1. 原因に対応し
1. 再発を防止するか

です。
この考え方が日常的に染み込んでくると、堅牢なプログラムを書けるようになるだけでなく、日常に溢れる「またやっちゃった」も減ってきます。

さて、難しく考えるのも何なので、電気ケトルでお湯が沸かないバグが発生したことにしましょうか。

一つずつ見ていきましょう。

### 問題をいかに特定するか

電気ケトルでお湯が沸かない理由はたくさん考えられますね。
例えばどんな可能性があるでしょう？
なるべく多角的に、たくさん可能性を挙げてみましょう。

- 水が入っていない
- ブレーカーが落ちている
- コンセントが壊れている
- コンセントが刺さっていない
- 電源コードが断線している
- ヒーターが壊れている
- スイッチが壊れている
- スイッチを入れていない
- 気温が低すぎる
- ...

いろいろな視点から可能性が挙げられますね。
#### 根本的に大事なのは、どれだけ柔軟に、多角的に物事を考えられるか。その思考力です。

これらのどれかが原因であるかもしれないし、いくつか複合的な原因が絡まっているかもしれないし、これらのいずれでもないかもしれませんね。

結局のところ、実際の原因が特定できるまでは何が原因かがわからないわけですから、予想するための頭の柔らかさというのがそもそも重要です。

**「ヒト」「モノ」「コト」「環境」「社会」で観点を分けたあと、それぞれ細分化していくとそれなりに柔軟に物事が見れるようになるかなと思います。**

例えば「ヒト」なら、一人称、二人称、三人称、赤の他人、家族などですね。
自分から見たらこう、あなたからはこう、彼から、又聞きした人から、家族から見たらこう。

見え方は全ての人から違っているはずだという前提で、なるべくたくさんのものを受け止める柔らかさです。
トレーニングである程度鍛えられます。常に多角的な視点を持とうと意識することはとても大事ですし、それはイコール伸び代です。

### 原因に対応する

そもそも「お湯が沸かない」とはどういう状態なのでしょうか？

その特定をしなければ話が始まりません。

- 水が入っていない
- 電気の供給元に問題がある
- ケトルが壊れている
- 使い方を間違っている
- 環境が使用に適していない

他にもあるかもしれません。なので、

**その「お湯が沸かない」状況を明確にした上で、もう一度不具合を再現するのです。**

実際のところ日本製の家電は高品質なので、あまり壊れませんよね。
使い方を間違っているとか、家電以外に原因があることがほとんどです。

マニュアルで指定された使い方と違う点を洗い出して、
#### 段階的に一つずつやり直して確認し、不具合を再現することによって原因を特定し解決します。

全てのプロセスと環境がマニュアル通りで、それでもお湯が沸かないのであれば、そこで初めて電気ケトルの故障が可能性として挙がってきます。


### 再発を防止する

そして、**再発防止のための具体的なアクションとルールを起こします。**

例えば蓋の閉め具合が甘かったなら、確実に閉められる方法はどんな方法なのかを色々試します。
試した結果、両手を使えば確実に閉められることがわかったので、毎回両手で閉めるようにするルールを作る。といった具合です。

原因が特定され、問題が一時的に解決されても、同じ不具合が続出するなら本当の意味での解決ではありませんよね。
#### 具体的なアクションとルールに落とし込むことで、本当の意味での解決に繋がるのです。

次回は、手順の入れ替えについて考えていこうと思います。

## まとめ
デバッグ思考の3ステップとは、
1. 問題を特定する
    1. 根本的に大事なのは、どれだけ柔軟に、多角的に物事を考えられるか。その思考力です。
1. 原因に対応する
    1. 段階的に一つずつやり直して確認し、不具合を再現することによって原因を特定します。
1. 再発を防止する
    1. 具体的なアクションとルールに落とし込むことで、本当の意味での解決に繋がるのです。

です。

## 最後に
ここまで読んでくださってありがとうございます！
少しでも役に立ったら「いいね」をください。続ける励みになります！
TCPセグメント・ヘッダー

### ５項目組でコネクションを識別する
>ポートとホストのIPアドレスは48ビットの一意なエンド・ポイントを形成するものである。ポートとホストのIPアドレス識別するものである。このコネクション識別は、五つの情報、すなわち、プロトコル(TCP)、送信元IPアドレス、送信元ポート番号、宛先IPアドレス、宛先ポート番号からなるので５項目組(5tuple)と呼ばれる。

### 順序番号と確認通知番号　次に期待するバイトを指定
>順序番号と確認通知番号フィールドはその名の通りのものである。ただし、確認通知番号は次に受信することを期待するバイトを指定するもので、最後に受信したバイトを示すものではない。

### 累積確認通知　ロスした番号のままで止まる
>また、それまでに受信したデータを一つの数に要約しているので累積確認通知(cumulative acknowledgement)と呼ばれる。あるデータがロスすると、それ以降のデータが正しく届いたとしても、累積確認通知番号は増えずに、ロスしたデータの番号のままである。順序番号と確認通知番号は両方とも32ビット長であり、TCPストリームのすべてのデータに順序番号が付けられる。

### MSSによりセグメントの大きさを変更する
>各ホストが受け入れられるMSS(Maximum Segment Size:最大セグメント・サイズ)である。ヘッダーは20バイトの大きさを持つので、大きなセグメントは小さなものよりも効率的である。しかし、大きなセグメントを与えないホストもあるかもしれない。コネクション設定時に両端がこのオプションを使用しない場合、デフォルト設定、つまり536バイトのペイロードで送信する。

### ウインドウ・スケール(window scale)・オプション　ウインドウ幅の変更ができる
>ウインドウ幅はフィールドは、送信者が送ることができるバイト数を通知するもの

>ウインドウ・スケール(window scale)・オプションを使えば、送信者と受信者がウインドウ・スケール・ファクタを交渉して決定できる。両端のウィンドウ幅フィールドを最大14ビットまで左にシフトすることができるので、２３０バイトまでのウィンドウ幅が利用できる。ほとんどのTCP実装がこのオプションをサポートしている。

### タイムスタンプ　送信側で送られた時刻、受信側でエコーされた時刻を知る
>タイムスタンプ(timestamp)・オプションを用いると、送信側で送られた時刻、受信側でエコーされた時刻を知ることができる。コネクション確立の時や、往復時間の標本を撮るときには、各パケットにつけられる。

### ロスしたが新しい順序番号で届いたときに使う使うSACK
>SACK(Selective ACKnowledgement:選択確認応答)オプションは、受信側が持って順序番号の範囲を送信側に知らせる。確認通知番号を保管するものであり、あるパケットがロスしたが、そのパケットより新しい順序番号のパケットが届いている場合に用いられる。

https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/
リモートワーク + 勉強にオススメのカフェ一覧

## はじめに
こんにちは！ITスクールRareTECHにてCS（Customer Support）を担当している池村です。
今回の記事はオススメのカフェについてです。なぜこの記事を書こうと思ったかというと、うちのスクールの受講生から東京のカフェで学習や仕事をするならどこがオススメか？という質問を頂いたからです。
ということで、今回の記事は勉強や仕事がしやすいカフェをご紹介します。

:::note alert
カフェにコンセントやWifiがあったとしても、長時間の利用はお店に迷惑です。長くても2時間くらいでお店出るか、新しい何かを注文してくださいね。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/fe0aaf06-e4f4-2941-993a-e2f9eeae31f3.png)


## PRONT
私は朝の7時にカフェに入ることが日課なのですが、必ず入るのがこのPRONTというカフェバーですね。夕方からバーになるので、日中のみカフェとして利用が可能です。

お気に入りな理由はモーニングが美味しいことですね。色々なチェーン店のモーニングを食べましたが、ここが色々選べて満足度が高いです。モーニングは500~600円でカフェ界隈では平均的なお値段です。

https://www.pronto.co.jp/cafe/morning/

私はここで7:00~8:50くらいに勉強をして、その後いつものコワーキングスペースに移動するような流れです。コンセントが少ないことが難点ですが、どうせすぐ出るので私的には問題ないです。

| 喫煙 | 可能 |
| ---- | ---- |
| **Wifi** | **あり** |
| **コンセント** | **少ない** |


## エクセシオールカフェ
こちらはよく使う訳ではないですが、早朝カフェとしては6:30から開店している店舗もあり、朝方な人にとってはかなり助かる場所です。

https://www.doutor.co.jp/exc/

ドトールから生まれたカフェで、ドトールより少し値段が上がっている気がします。モーニングは500~600円でカフェ界隈では平均的なお値段です。私は厚切りのトーストセットが好きですね。
| 喫煙 | 可能 |
| ---- | ---- |
| **Wifi** | **基本あるが、ないところもある** |
| **コンセント** | **カウンターに多め** |

## ドトール
有名店ですね。安定感は抜群かと。どのドトールに行っても大体はWifiもコンセントもありますし、喫煙者には嬉しい喫煙室もありますしね。モーニングは500円以下で済むものが多く、お財布にも優しいです。

https://www.doutor.co.jp/dcs/

| 喫煙 | 可能 |
| ---- | ---- |
| **Wifi** | **あり** |
| **コンセント** | **あり** |

## コメダ珈琲
コメダはいいカフェですね。私は東京に来る前は山形にいたのですが、山形のコメダにはかなりお世話になりました。その時は主に学習のために行っていることが多く、長時間いてしまうことも多かったです。（コメダの店員さんが許可してくれてた）

https://www.komeda.co.jp/

モーニングはコーヒーを頼むと無料でついてくるタイプです。ただ、コメダのコーヒー自体が550~650くらいするので他の店舗よりも少し割高ですね。でもモーニングは美味しいです。私は卵ペーストをトーストに塗って食べるのが好きですね。

| 喫煙 | 可能 |
| ---- | ---- |
| **Wifi** | **あり** |
| **コンセント** | **多い** |

東京のコメダはあまり駅前にないイメージです。
やはり名古屋発祥なので愛知~関西に店舗が集中しているイメージがあります。

## 集
こちらのカフェはかなり高級です。ドリンクは最低でも900円からです。
でもその分、店内の雰囲気は良く客層も騒いだりしそうな人はいない印象です。

https://shu-group.studio.site/

コンセントやWifiもありますので、仕事や学習は可能でしょう。ただ、2時間以上いるともう一品頼む必要というルールがありますので、2000円ほどかかることは覚悟しましょう。コーヒーは高いだけあってとても美味しいです。

| 喫煙 | 可能 |
| ---- | ---- |
| **Wifi** | **あり** |
| **コンセント** | **あり** |

## カフェ・ベローチェ
ベローチェもかなりの店舗があり、Wifi + コンセントがあるため重宝します。

https://c-united.co.jp/veloce/

あまり私自身使ってはいないですが、店舗数はかなり多いので学習やお仕事で使ってみてください。

| 喫煙 | あり |
| ---- | ---- |
| **Wifi** | **あり** |
| **コンセント** | **あり** |

## スターバックス
誰もがよく知るスターバックスですが、私はあまり使いません（笑）
スタバの特徴として、ワンモアコーヒーがあります。一杯コーヒーを頼んだそのレシートを当日中にレジに持っていくと150円くらいでもう一杯飲むことができます。

https://www.starbucks.co.jp/

ただいかんせん若者が多いので、私のようなおっさん（記事執筆時34歳）が行くには眩しすぎるんですよね。地元山形に住んでいた時はよく行っていましたが、木の椅子は長時間座っているには辛い環境でした。

| 喫煙 | 不可 |
| ---- | ---- |
| **Wifi** | **あり** |
| **コンセント** | **あり** |

## まとめ
完全に主観です。
| 店名 | コンセント | Wifi | 喫煙 | おすすめ度|
| ---- | ---- | ---- | ---- | ---- |
| PRONT | 少ない（ほぼない） | あり | 可 | ⭐️⭐️⭐️⭐️⭐️ |
| エクセシオール | あり | 基本あり | 可 | ⭐️⭐️⭐️⭐️ |
| ドトール | あり | あり| 可 | ⭐️⭐️⭐️⭐️ |
| コメダ | 多い | あり| 可 | ⭐️⭐️⭐️⭐️⭐️ |
| 集 | あり | あり| 可 | ⭐️⭐️⭐️ |
| ベローチェ | あり | あり | 可 | ⭐️⭐️⭐️⭐️ |
| スターバックス | あり | あり| 不可 | ⭐️⭐️⭐️ |

## おわりに
今回は作業をするのにオススメのカフェを紹介しました。
カフェで作業するのがかっこいいという認識はだいぶ薄れた気がしますが、ドヤるために行くのはやめましょう（笑）

あと長時間いすぎるのもよくないですので、そこも気をつけてください。
でもカフェに入るだけで集中力上がるのは不思議な現象ですよね。
Wi-FiのMACアドレス表示が２種類ある件

## 概要

MacbookでWi-FiのMACアドレスを確認するとコマンドで叩いた情報と齟齬していたので細部を調べてみた。

## 経緯

ネットでMACアドレスの確認方法に関するページを見ていたら嘘を書いてるのでは？と思う部分があり調べてみた。ネットの確認方法は以下

1. システム設計を開く
2. 左パネルのWi-Fiを選択する
3. 接続済みと書かれている場所の右側にある詳細を選択する
4. ポップアップの左パネルのハードウェアを選択する
5. MACアドレスが表示される

# 自分の認識

MACアドレスは上記の点順４でポップアップされた画面のWi-Fiアドレスが該当する。

もしくは手順３で表示されている画面の右側パネル最下部にある詳細設定を選択し表示されるWi-Fi MACアドレスが該当する。

ちなみに、自分が認識している確認場所に書かれているMACアドレスとネット記載の場所のMACアドレスは異なる。

# 検証してみた

1. ターミナルからコマンドを叩きインターフェースのMACアドレスを確認
2. システム設定のシステムレポートでWi-fiのMACアドレスを確認

# 結果

検証で得られたMACアドレスはどちらも自分の認識通りだった。

# ここで疑問

じゃあネットで示されていた部分のMACアドレスは何？

最初は繋がっているルーターのMACアドレスかと思ったが、検証過程でARPテーブルを確認して違うことが判明した。
コマンドを打っても表示されているMACアドレスはどこにも出てこなかった。

ネットで色々探してみるとappleのサポートページでランダム化されたMACアドレスというキーワードを見つけた。

どうやらappleさんはプライバシー保護のため、プライバシーMACアドレスというランダム化されたMACアドレスを使うらしい。

# 上記から判明した事項

つまり、自分がMACアドレスだと認識していたものはプライバシーMACアドレスだった。
ハードウェア自体のMACアドレスはネットで説明されていた通りの手順で調べることができる。

# 結論

MacはWi-Fi利用時のプライバシー保護のためプライベートMACアドレスというランダム化されたMACアドレスを使っている。ターミナルでインターフェイスを確認してもプライベートMACアドレスが出てくる。よって、確認はシステム設定のWi-Fiから詳細を開きハードウェアを選択しなければならない。

今更だが数年前にプライベートMACの記事を読んでクラッカーと同じこと（MACアドレスの詐称）やってるやんって思ったのを思い出した。知識って抜けるものやね…
ついにSoraが使える様になった！！

もういくつもの記事が上がっているとは思いますが、先日公開されてからしばらくアカウント作成がブロックかかってしまって使えなかったsoraが使える様になったので、記事を書いてみたいと思います。
GPT Plusのユーザ（課金ユーザ）限定の公開となっている様です。


### ログイン後の画面
最初にログインすると、誕生日聞かれたりユーザ名を聞かれたりするので入力をすると、アカウントの作成他の人が作ったビデオのサンプルが出てきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77722/659c943c-d037-58ba-cd69-77a53e49b7c9.png)


### ビデオ作成！

画面の下の方に出てくる入力欄に`plague castle night`と入力してみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77722/123d0bba-35cc-48c9-19ac-c0f0a7dc7e77.png)


数秒後に、この様なビデオができました！（ビデオのリンクでの共有はまだできないみたいです）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77722/77edd7a5-9de0-a993-22b2-517a244b12b4.png)


### まとめ

この様に、プロンプトにテキストを入力するだけで簡単に動画が作ることができました。
今回はデフォルト設定での作成にしましたが、設定を変更することにより、同時に1つ、2つ、4つの動画を作ったり、解像度を変更したりもすることができる様です。

生成された動画はとてもリアルで、アイデア次第で様々なことに活用ができそうです。
一昔前に購入したUdemyのCKA対策講座を改めて見直している話

# はじめに

最近、数年前に集中的に触っていたKubernetesをもう一度勉強し直したいと思い、過去に購入したUdemyの「Certified Kubernetes Administrator (CKA) with Practice Tests」を見直し始めています。以下の講座。

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/?srsltid=AfmBOoqB85nftwWOLtY4lV5lAAAqGpbcjIFzueRGS4008fuYATkGEnC9&couponCode=ST21MT121624

そんな中で、数年ぶりの復習をしながら思ったことをつらつら書いてみます。

# じっくり学びたいならUdemyはあり

最近は学習コンテンツもサブスクリプション形式のものが多く、それらは退会したらコンテンツにアクセスできません。それこそ試験対策として過去問演習サービスみたいなものも利用したことはありますが、買い切り型ではなく期限になると観られなくなるものが多い印象です。

これが資格試験に合格をすることが目的であれば全然良いと思います。
実際、AWSやAzureのように認定試験を選択式で提供しているようなパターンであれば、集中的にやった方が合格へは最適解だったりしますし。

しかし、「<b>認定資格はもちろん取りたいけどそれ以上にその分野のエキスパートになりたい</b>」というのであればUdemyの講座は良いと思います。この辺りは私がCKAを合格した際に書いた以下の記事でも高評価ポイントとして述べていました。

https://www.mtioutput.com/entry/cka-log-202009

>CKAに合格することを目的とするのであればベストバイだと思いました。驚いたのはCKA対策と銘打ちながらもKubernetes全体の理解がどの書籍を読むより深まりました。（Udemy講座への感想部分から抜粋）

お金を払って購入したコンテンツが優良であれば、いつか見直したい日が来るかもしれない。その時に追加費用がかからないのは、一ユーザからするととてもありがたいです

むしろ小銭は持っているアラサー社会人として少し申し訳ない感情もありますが、向こうからすると私一人のアクセスにかかる費用なんて塵みたいなのものだと思うので遠慮せず視聴させていただきます。ありがとうUdemy。

# 終わりに

Udemyの認定資格対策講座（問題だけでなく試験範囲の解説がついているもの）は個人的に結構オススメです。ポイントしては数年後にも見ることができるという点。コース側もアップデートされていく可能性もあります。

というわけで、この分野はしっかり理解したいな〜というジャンルにUdemyの講座があれば、評価を確認した上で手を出してみるのは良いと思います。私も2020年に買ったものを2024年の今見返していますが、少なくともKubernetesの学習においては同講義は現時点でもかなりオススメです。
UnrialEngine5：プロトタイプへの道５

# 前回の振り返り
- 前回はトゲの移動について開始時間をずらしたり、トゲの動きにバリエーションをつけるようなギミックを実装しました

- おそらく今回で大まかなプロトタイプは完了する想定です
- もっと拡張していきたい、いろんなUEの機能を使っていきたいとおもっていただけたら幸いです

# マテリアルを使ってオブジェクトの色を変えていく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/b5831dce-d9b0-f2ca-62b5-dadbe08db4f1.png)
- マテリアル変更はBPのコンポーネントの「Needle」の詳細にある「マテリアル」の「エレメント０」の横にある「BasicShapeMaterial」をいじることで変更できます

# 自分の好きなステージを作成してみよう
- この後は自分の好きなFieldを作成していきましょう
- この部分はちょっと簡略化してしまいました・・・
- 迷路にするもいいですし、トゲだけのステージも面白いかもしれませんね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/f8a3079b-1d00-a8bd-c4f9-42b380735e29.png)

# ここまでで学べたこと
- このプロトタイプ作成では、フィールドの生成及び、ギミックの生成、ギミックの色やタイミング、判定の部分を学ぶことができました
- 次のプロトタイプは・・・例えば、ビジュアルをリッチにしたり、アセットを使ってもっと面白いものなんてものもつくれるのでこちらもやっていきたいと考えています
Drupalのwebformに独自の処理を追加してみる

# 説明
何か、独自の処理をさせたい場合に真っ先に思いつくのはフックだと思います。
webformにも「hook_webform_submission_presave」や「hook_webform_submission_insert」などのフックが用意されています。

ただ、このような、フックでは管理画面で任意のフォームだけにその処理を適用させることができません。(フック上で条件分岐したりしたら一応は可能ですが...)
そのようなことをしたい場合は、webformに用意されているhandlerを使えばよりスマートに記述できると発見しましたのでご紹介します。

## コード

```php
/**
 * カスタムハンドラー.
 *
 * @WebformHandler(
 *   id = "custom_handler",
 *   label = @Translation("カスタムハンドラー"),
 *   category = @Translation("外部"),
 *   description = @Translation("履歴作成前の処理をカスタマイズします"),
 *   cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE,
 *   results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_IGNORED,
 *   submission = \Drupal\webform\Plugin\WebformHandlerInterface::SUBMISSION_REQUIRED,
 * )
 */
class CustomHandler extends WebformHandlerBase {

  /**
   * {@inheritdoc}
   */
  public function preSave(WebformSubmissionInterface $webform_submission) {
    // フォームの入力データ.
    $data = $webform_submission->getData();
    $data['custom_data'] = '入力項目にないデータを保存します。';
    $webform_submission->setData($data);
  }

}

```

## コード解説
上のコードを記述すると、handler追加画面、今回追加した独自処理を選択できるようになります。

![test2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280639/3a3a3390-c8dd-4eed-52ed-ab029f4b98a8.png)

今回はpreSaveメソッドをオーバーライドしているので、フォームの履歴がデータベースに保存される直前に呼び出されます。
なので、ここに配列をセットしてあげると入力した項目と合わせて独自の項目を保存するようなことが可能になります。
他にバリデーション時に呼びだされるメソッドや、保存後に呼びだされるメソッドがあるので、色んなことができそうです。

## 余談
webformの履歴はデータベースのどこに保存されるのか気になった人がいると思います。
webform_submission_dataテーブルに保存されるようです。
ワードプレスの記事とカスタムフィールドのデータベースの構造と似ていると言えば分かる方も多いと思いますが、
「webform_submission」テーブルが親テーブルにあり、「webform_submission_data」テーブルがkeyとvalueで保存されるデータベース構造みたいです。

webformの履歴のデータベース構造を把握しておけば、保存した項目を後からデータを取得して何かに使いたい場合も、躓くことなくデータの取得ができるのかなと思いました。

![test1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280639/0236c4da-bb55-4e75-2b94-a31e834b84fc.png)
プログラミング言語「なでしこ」チュートリアルをやってみる

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

[先日参加したイベント](https://qiita.com/Mymt_aggw2208/private/932a8d745369565b84c4)で、イベント限定のカクテル「なでしこ」を注文しました。
日本酒を使ったカクテルで、たぶんパインジュースとかも入ってたのかな？
結構甘めでおいしかったです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477580/7f834aca-2644-82a9-b9cc-12651f92a5b1.jpeg" width="50%">

カクテルの名前は花ではなくプログラミング言語と聞いて地味にびっくり。
イベント会場のバーはプログラミング言語の名前でカクテルを出しているのですが、「なでしこ」という言語の存在はこのカクテルから知りました。

せっかくなのでちょっとだけ調べて、なんなら動かしてみられないかな、というのが今日の記事です。

# プログラミング言語「なでしこ」
まずは検索をかけてサイトを発見。

https://nadesi.com/

## 日本語プログラミング言語
サイトのタイトルからまずびっくり。
日本語プログラミング言語が存在するとは知っていたのですが、実際に見ることはたぶんなかったのでおそらくこれが初めての体験です。
以下、「なでしこ」の概要をマニュアルから引用。

>なでしこは、スマートフォンやタブレットのブラウザで動かすことができます。実際にチュートリアルを見ながら動かしてみると、いっそう効果的に学べます。空き時間にゴロゴロしながらでも、プログラミングをマスターできるかもしれません。

チュートリアルもあったので、さっそくちょっと動かしてみましょう！

## めっちゃ日本語
チュートリアルの最初は文字列表示のようです。
いわゆる「Hello World」的なやつですね。
以下がコード。

```なでしこ
「こんにちは」と表示
```

一見すると「これほんとにプログラミング言語？」となりますね。
でも、そのまま簡易エディタに貼り付けて実行するとちゃんと「こんにちは」と表示されました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477580/1cb7867e-5661-eff3-9e95-26c4cd8c3b52.png" width="70%">

なお、「と」を「を」に変えてもちゃんと表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477580/c1aebc24-e05b-cdb8-b1c5-982aa34ce485.png" width="70%">

せっかくなので万能下の句を表示してみました。
では次、チュートリアルにあった「言う」の命令を試してみます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477580/14879fbe-21db-2b50-a5d0-a06cf8fcaa6b.png" width="70%">

なるほど、こういう動きになるのか。
音声がくるかと思ったのでちょっと意外な気も。

では次に、これまたチュートリアルにあった「話す」で実行。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477580/33706c7e-75c9-56e5-6ef1-2bd04bf1c0fc.png" width="70%">

画像だとさっぱりですが、ちゃんとこれで音声が再生されました。
おもしろいな！

## 「なでしこ」基本文法
いくつかいじって楽しんだので、ここらでちょっとだけ文法を見てみましょう。
以下マニュアルから引用。

>そして、なでしこのプログラムの構造は、以下のような形式になっています。
「引数＋助詞、引数＋助詞、 ... 関数。」
『「こんにちは」と表示』という命令文で言えば、「こんにちは」が引数で、「表示」が関数となります。
また、関数を記述する場合、送り仮名はある程度自由に記述できます。例えば「表示」であれば、「表示する」とか「表示しろ」とか「表示して」のように書いても問題なく動きます。

なお、文法エラーについてはこんな記載がありました。
>なでしこのプログラムは、一見すると日本語に見えます。そのため、非常にプログラムが読みやすいのですが、それでも自然言語の日本語とは異なります。
決められた構文から外れたプログラムを書くと「エラー」が表示されます。この点を覚えておきましょう。

実際にエラーを起こした時はこんな感じで表示されました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477580/aad51aac-b421-63bf-0203-199f8575fdb9.png" width="70%">

「書く」は命令にないのでエラーになるわけですね。

逆になでしこの文法的には合っているので、以下は日本語的には違和感を覚えますがちゃんと動きました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477580/66226da7-8ad8-ac0c-4ff7-1ac7f5b088a4.png" width="70%">

# 感想
一見すると本当にふつうに文を書いてるだけなので、それで命令が実行されるのはちょっと不思議な感覚でした。
文法を見て思ったのですが、慣れ親しんだプログラミング言語はだいたい関数が前で引数が後なので新鮮に見えますね。
日本語ベースだと不自然に感じない反面、プログラミングしている感はちょっと薄いかもしれません。
それはそれとして動かしてみるのは楽しい。これを使って何か作ってみるかと言われるといまいち浮かびませんが、作れたら作れたですごく面白そうです。
【JavaScript】関数の戻り値について

# はじめに
Reactの学習を進める中で、関数の戻り値について整理をしたかったので、記事にまとめてみました。

:::note warn
***この記事は<font color="Red">個人的なアウトプット</font>を目的として作成したものです。そのため、誤った情報や不足している内容が含まれている可能性があります。もし間違いや気になる点がございましたら、ぜひご指摘いただけますと幸いです***。
:::

# 関数の戻り値とは
関数の戻り値とは、***関数の実行が完了した際に返される値***のことです。「返り値」と呼ぶこともあります。

JavaScriptでは、`return`文を使って関数の実行結果を返すことができます。

戻り値は必ずしも関数に必要というわけではなく、設定しなくても動作する関数を作ることができます。例えば、Reactの学習を進めていく中でよく出てくる次のような場面では、戻り値を明示的に設定しないケースが多いです
+ stateの更新や変更
+ ボタンのクリックイベントの処理
+ フォーム送信時の動作

## 戻り値があらかじめ設定されている例
一方で、JavaScriptの標準メソッドであるmapやfilterのように、戻り値があらかじめ定義されている関数も存在します。
これらのメソッドでは、開発者がreturnを明示的に書く必要はありません。

+ `map`: 新しい配列を戻り値として返します。
+ `filter`: 条件に合致する要素を持つ新しい配列を戻り値として返します。
このように、標準メソッドでは「どのような戻り値が返されるのか」が予め仕様として定められています。


# 私の勘違い
`Supabase`に保存したデータを取得し、別ページに表示するような処理を作っていた際のことです。以下のようなコードを書いたのですが、`App.ts`で`Supabase`から取得したデータが表示されず、困っていました。

これは、***関数に戻り値を設定していなかった***ことが原因でした。戻り値を正しく設定することで、Supabaseからデータを取得して表示できるようになりました。

***修正前***
```supabase.ts
export const getAnswer = async () => {
  const { data, error } = await supabase.from("answers").select("*");
  if (error) {
    console.log("Error fetching data with answers:", error);
  } else {
    console.log("Fetched data with answers:", data);
  }
};

```
```App.ts
  useEffect(() => {
    const getSelectAnswer = async () => {
      try {
        const data = await getAnswer();
        console.log("data", data);
      } catch (error) {
        console.error("Error fetching answer:", error);
      }
    };
    getSelectAnswer();
  }, []);
```
***修正後***
```supabase.ts
export const getAnswer = async () => {
  const { data, error } = await supabase.from("answers").select("*");
  if (error) {
    console.log("Error fetching data with answers:", error);
  }
  return data; // データを返却する
};
```
この修正により、`getAnswer`関数が取得したデータを戻り値として返すようになり、`useEffect`内でデータを適切に受け取れるようになりました。

# 終わりに
今回は関数の戻り値について整理しました。戻り値の存在がコードの動作にどのように影響するのかを再確認することで、少し理解が深まりました。

# 参考
『【JavaScriptの超基本】関数や戻り値、スコープについて簡単に解説』Qiita

https://qiita.com/ta1fukumoto/items/981a0b766af17ed1a170

『【JavaScriptの入門】関数と戻り値』

https://tcd-theme.com/2022/04/javascript-function-return.html

『Javascript の配列操作を 破壊的操作と非破壊的操作を意識して整理する』Zenn

https://zenn.dev/surume3/articles/d2838bb26f98f4

https://developer.mozilla.org/ja/docs/Learn/JavaScript/Building_blocks/Return_values
kaggle tutorial Computer Visionの解説 part1

https://www.kaggle.com/learn/computer-vision

のコースの解説を行なっていきます。
このコースは画像分類に関するチュートリアルで、一般的なcnn辺りまで出てきます。歴史的な経緯からこれらは今でも基礎で習いますが、便利なライブラリで一発！！みたいなところがありますのでライブラリの使い方がわかれば良いのかなと思います。
toturialで使用されるライブラリはtensorflowのkerasです。もう一方の有名なライブラリであるpytorchを期待される方は公式tutorial以外のcommunityのガイドやpytorch公式を見る必要があります。一般にレイヤを細かくいじったりskipさせたりという変なことをしない場合、初心者にも使いやすいことは間違いないのでchoiceしたのだと思います。最近のコンペではpytorchで書かれたものが多い印象ですが、tensorflowで書かれたものも普通に目にしますので強いこだわりがなければどっちでもよいのではないでしょうか。pytorchはgoogle のTPUとの連携についてややこしいと昔聞きましたが？最近は不明です。情報があればプルリクをいただけたらと思います。


part1は

https://www.kaggle.com/code/ryanholbrook/the-convolutional-classifier

です。そもそも画像分類とは？というところがから始まり、画像がピクセルの集合体であること、
classiferのトレーニングの仕方までを解説しています。
deeplearningと聞くと２層のパーセプトロンから・・・というイメージですがここではすでに一般でよく使われているvgg16＋１層という形でモデルを構築しています。
最近は初心者向けと言っても導入がハードですね。


```
pretrained_base.trainable = False
```


というのはVGG16部分についての重みを変えない（トレーニングしない）という意味です。そのほか、新しく習う部分というものはあまりない印象ですが・・・
sigmoid、binary_crossentropy、epochsといったdeeplearningっぽい言葉部分はより基礎的な本で学ぶ必要があるかと思います。
有名な例

https://www.oreilly.co.jp/books/9784873117584/

これは逆にkaggleでは基礎的なところが多すぎる気もしますので
kerasの公式ページ

https://keras.io/guides/

あたりを参照するのもよいと思います。
3点リーダー（...）の実装などメモ...φ(･_･

3点リーダー（...）の実装方法を学んだので、メモする記事です:memo:

## `-webkit-`を使う方法
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="ZYzBrOX" data-pen-title="Untitled" data-user="vtdrcdif-the-sasster" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/vtdrcdif-the-sasster/pen/ZYzBrOX">
  Untitled</a> by  (<a href="https://codepen.io/vtdrcdif-the-sasster">@vtdrcdif-the-sasster</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

```
display: -webkit-box;
-webkit-box-orient: vertical;  //垂直にレイアウトする
-webkit-line-clamp: 1; //1行目まで表示する、それ以降は3点リーダを表示させる
overflow: hidden; //2行目以上は隠す
```

### `-webkit-`とは？
>ベンダープレフィックス(Vendor Prefix)
標準化されていないCSSプロパティやJavaScript APIに使用されるもの

- プレフィックスには種類があって、`-webkit-`はChrome/Safari/ほとんどのiOSブラウザに対応している
- ブラウザごとに独自のCSS拡張機能が開発されていて、プレフィックスをつけることでそれらを利用できる

https://qiita.com/yoshida-hi/items/055c36e015f0bf8fe4f6

https://zenn.dev/azunasu/articles/581153b9ec1f92


## `-webkit-`を使わない方法

<p class="codepen" data-height="300" data-slug-hash="ExqNooY" data-pen-title="Untitled" data-user="vtdrcdif-the-sasster" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/vtdrcdif-the-sasster/pen/ExqNooY">
  Untitled</a> by  (<a href="https://codepen.io/vtdrcdif-the-sasster">@vtdrcdif-the-sasster</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

```
overflow: hidden; //はみ出したとこは非表示
text-overflow: ellipsis; //あふれた内容が非表示になる場合、'...'で表示する
white-space: nowrap; //改行文字まとめる、テキストは折り返さない
```
テキストを溢れさせるには、`overflow: hidden;`や`white-space: nowrap`が必要

### text-overflow
- `text-overflow: clip;`
    - コンテンツの末端でテキストを切り取る
    - 文字の途中で切り取る可能性がある
- `text-overflow: ellipsis;`
    - 3点リーダー
    - ...はコンテンツの領域内に表示されるため、表示されるテキストは少なくなる
    - 省略記号を表示する場所がない場合は切り取られる

### white-space
コード内での半角スペースやタブ、改行（ホワイトスペース）をどう表示させるか決める
キーワード値
- `white-space: nomal;`
    - 連続改行や半角スペースはまとめられる
    - 折り返す
    - 文末の空白は無視
- `white-space: nowrap;`
    - 連続改行や半角スペースはまとめられる
    - 折り返さない
    - 文末の空白は無視
- `white-space: pre;`
    - 連続した半角スペース、tabはまとめられる
    - HTML内の改行がそのまま反映される
- `white-space: pre-wrap;`
    - 改行や半角スペースがブラウザ表示にそのまま反映
    - 折り返される
- `white-space: pre-line;`
    - 連続した半角スペース、tabはまとめられる
    - 改行文字か`br`要素がある時折り返される
- `white-space: break-spaces;`
    - 連続するホワイトスペースは行末も含めて残る
    - 空白がボックスの領域の大きさに影響する



## 参考

https://saruwakakun.com/html-css/basic/white-space#section1

https://developer.mozilla.org/ja/docs/Web/CSS/white-space

https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow
day15 『科学的探求の方法』

## はじめに
　この書籍は研究を志す際に基礎として理解すべき事項が解説されています。放送大学で濱田先生の放送をたまたま見て本書籍を購入しました。研究員だった時代に、キラキラしたくて研究所に入所しましたと言った新入社員に読んでもらったりしました。

![科学的探求の方法 目次2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533414/54b1bff6-5f98-fa5c-f19d-cc0b7d129012.png)

 

## ポイント
### 科学とは何か
- 客観性、実証性
- 法則的・体系的な知識
- 再現性
- 予測性
- 人文・社会科学の特徴
    絶対的な客観性や実証性ではなく、不確実性を認め、観測する事象は観測する者によること、そして、唯一の客観的真実の存在が望ましいが、真実が複数存在する可能性を認めること、が主流になってきている。

### 科学における用語と表現
- 専門用語・変数・定数・単位、有効数字
- 人文・社会科学における言葉と表現
　-　「金持ち」のように概念を扱うので定義の正誤の論争が耐えない
　-　「金持ちは幸せなのか？」は金持ちを年収1000万円以上などのように操作的定義しないといけない

### 何を問題にするのか
- 多様な研究の動機
- 日常の中に本質を見出す　寺田寅彦に学ぶ。
　自然科学は自然から学ぶことであるから、自然現象を予断や偏見なく観察することが重要である。
 　「いわゆる頭のいい人は、言わば足の早い旅人のようなものである。人より先に人のまだ行かないところへ行き着くこともできる代わりに、途中の道端あるいはちょっとした脇道にある肝心なものを見落とす恐れがある。頭の悪い人、足の鈍い人が、ずっと後から遅れて来て、わけもなくその大事な宝物を拾っていく場合がある。
  　頭いい人は、言わば富士のすそ野まで来て、そこから頂上を眺めただけで、それで富士の全体をのみ込んで東京へ引き返すという心配がある。富士はやはり登ってみなければわからない。・・・」
- 問題の発見
　学問の本当の面白さ、あるいは重要なことは「問題の解決」ではなく、「問題の想像」であると言われる。
- 勉強ができることと、研究ができることとは、ぴったり一致するわけではない。
- 博士課程の学生でよく見られる間違いは、一生をかけても結果が出せるかわからないような大きな研究課題に取り組もうとすること。

### 研究の準備
- 旅立ちの準備　登山にたとえて
　1. 体力は十分か。
　2. どの山に登るかが明確になっているか。
　3. 登山道具はそろっているか。
　4. 仲間との連携がしっかりとしているか。
　5. 経験者の話を聞いておく。
　6. 事前情報を確認しているか。
- 先行研究
　- 先行研究を十分に調べるべき。批判的に読むのが大事。
　- 一方で、ほどほどにすることも大事。やり尽くされているという気持ちになる場合がある。
- 人文・社会科学における研究準備　先行研究レビューの4つの目的
　1. 研究テーマにおける知識体系に馴染む。
　2. 先行研究と自分の研究がどのようにつながるかを探る。
　3. 研究テーマにおいて何が事実として認知されているかを知る。
　4. 他の研究者から学び、新しいアイディアを想像するための刺激とする 。

### 研究のプロセス
- 科学研究で用いる発見のための論理
　1. 観察により何らかの問題点の発見。
　2. 観察を説明し得る仮説を提案。
　3. 仮説に基づく予測。
　4. 予測結果を検証する方法を考案。
　5. 検証結果に基づき仮説の妥当性を検討。
　　　妥当なら法則として、適用範囲を広げる。
　　　妥当でなければ、仮説を廃棄し、新たな仮説を立てて繰り返す。
- 仮説の発見
　哲学者パースによって提唱された。論理的には正しくないが、ブレークスルーに大きく貢献してきた事実がある。
　1. 意外な新しい現象Pが観測される。
　2. 仮説Hを真だとすると、結果としてPが説明できる。
　3. したがって、仮説Hは真だと考える理由がある。

### 領域の拡大

### 自然（社会）に働きかける

### データの整理

### 原因と結果
- 因果関係を確立するには３つの条件をクリア
　- AとBに相関関係が存在する。
　- 時系列でAがBより先に起こっている。
　- A以外にBの結果を引き起こす原因が他に考えられない。

### 分類と法則の表現

### 視野の拡大

### 研究成果の利用
- 学会活動。学会誌、研究会、ポスター発表、シンポジウム、チュートリアル、…
- 査読制度。審査基準。
    - 内容がその学会・学術論文の守備範囲か。
    - 主要部分に新たな知見やアイディアが含まれているか。
    - 関連する先行研究を包括的かつ公正にレビューしているか。
    - データの収集・分析に用いられている手法は適切か。
    - 結果に対する解釈は妥当か。
    - 結果から導き出された結論は妥当か。
- 学会の質。インパクトファクター。被引用数

### 論文の書き方


### 研究成果の発表と討論
- 聞き手は誰か。
- スライドのデザイン。

### 科学の使命
- 文系と理系
- パラダイム転換

## 書誌情報
- 書籍名：科学的探求の方法
- 著者：濱田嘉昭
- 出版社：財団法人 放送法人教育振興会
- ISBN：978-4-595-31290-8

## 参考
-
チームに与えたルール

この記事は、[適応型ソフトウェア開発 アドベントカレンダー 2024](https://qiita.com/advent-calendar/2024/adaptive-software-development) の 18日目です。

## 複雑適応系
適応型ソフトウェア開発では、チームのことを複雑適応系と呼称する。

https://qiita.com/h-kinocoboy/private/1d678ddcc5ce7ba8e684

https://qiita.com/h-kinocoboy/private/e1b40ff40ae2f204122c

それでは、複雑適応系を効果的に運営することができた実体験に基づくルールを挙げてみたい。

## 複雑適応系に与えたルール

大きくは２つのルールだ。
ワーキングアグリーメントといってもよいだろう。

### 「わからない」と言えるのは、美しいことだ。

#### 背景
どうしてもカオスに向き合っていくうちに、なんとなく解釈してしまう瞬間が来る。
でもそれが自分だけのことなのか、全員そうなのか判断ができないと、適切にカオスの淵を把握することができなくなってしまう。

そのため、「わからない」という状態を見つけたときには、まっすぐ「わからない」と伝えることが美しいものであるという美学をルールの１つとした。

#### 効果
各々の職能別にわからないと感じるポイントは違うという当たり前のことを全員で再認識することができた。
このわからなさを把握することで、領域と領域の間に存在する曖昧性についても議論するきっかけにもなった。


### 真剣に考えた末の「嫌」には価値がある。

#### 背景
１つの領域から見た情報をもって、突き進むことも適応型ソフトウェア開発では可能だ。
しかし、多角的に物事を進行し、常に状態を観測し続けることこそイテレーションの開発指標となっているこのフレームワークにおいては、１つの正義に価値はない。

別の文脈でその物事を観測したときに、嫌だを思うポイントがあったときにはそれを開示することは美しいものであるという美学をルールの１つとした。

#### 効果
１つの職能が一点突破しようとしたときに、別領域で発生しうる歪みを是正することができた。
この歪みはいずれ何かの負債になり、柔軟な適応活動を阻害する要因になりうる。

それをこの「嫌」という気持ちをトリガーにして突破することができる価値のある話だった。


## まとめ
この２つの簡単なルールを複雑適応系に持ち込むことで、カオスの淵を発見しタスクに落とし込む速度が向上したり、カオスの淵に対する向き合い方を一方的な正義で片づけないことができるようになった結果、圧倒的な適応力を得るに至る。

これが非常に重要で、有効なルールだった。
Amazon RDS Proxy 対応表

# Amazon RDS Proxy 対応表
| No | サービスカテゴリ          | データベースエンジン          | 対応状況 | 理由                                                                 |
|----|----------------------|----------------------|------|----------------------------------------------------------------------|
| 1  | Amazon RDS          | MySQL                | 対応 | RDS Proxyが接続プーリングと認証管理をサポート                         |
| 2  | Amazon RDS          | PostgreSQL           | 対応 | RDS Proxyが接続プーリングと認証管理をサポート                         |
| 3  | Amazon RDS          | MariaDB              | 対応 | RDS Proxyが接続プーリングと認証管理をサポート                         |
| 4  | Amazon RDS          | Oracle               | 非対応 | Oracle特有の接続プロトコルと互換性がない                              |
| 5  | Amazon RDS          | SQL Server           | 非対応 | SQL ServerのプロトコルとRDS Proxyの設計が合わない                     |
| 6  | Amazon Aurora       | Aurora MySQL         | 対応 | RDS Proxyが接続プーリングと認証管理をサポート                         |
| 7  | Amazon Aurora       | Aurora PostgreSQL    | 対応 | RDS Proxyが接続プーリングと認証管理をサポート                         |
| 8  | Amazon DynamoDB     | DynamoDB             | 非対応 | DynamoDBはNoSQLでありRDS Proxyの設計対象外                           |
| 9  | Amazon Redshift     | Redshift             | 非対応 | Redshiftはデータウェアハウスであり、接続管理の仕組みが異なる           |

## Amazon RDS Proxyとは
- AWSが提供するマネージドプロキシサービス
- Amazon RDSインスタンスやAuroraクラスタとアプリケーションの間に配置して、データベース接続の効率性、スケーラビリティ、およびセキュリティを向上させるためのツール

```mermaid
flowchart TD
    A[アプリケーション] -->|データベース接続リクエスト| B[Amazon RDS Proxy]
    B -->|効率的な接続プールと管理| C[Amazon RDS インスタンスまたは Aurora クラスタ]
    B -->|セキュリティ強化 IAMやSecrets Managerを活用| C
    B -->|スケーラビリティ向上 接続の効率化| C
    C -->|データ処理結果| B -->|応答| A
```

## Auroraレプリカとの違い
- Auroraレプリカは、Auroraクラスタ内でデータベースの読み取りパフォーマンスを向上させる
- Amazon RDS Proxyは、接続管理などの効率化が目的
UnrialEngine5：プロトタイプへの道４

# 前回の続きをやっていきます
## 前回の振り返り
- 前回の振り返りをしつつ新しくやっていきます
    - 前回はリスタート処理、プレイヤーがコーンの当たり判定に当たったら実行される部分を実装していきました
    - そして、当たり判定を特定のものに切り替えるためのロジックを、ノードを使い実装しました
- ではつづきやっていきます
# 障害物となるトゲ（コーン）を複製
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/1cd14147-b924-8146-b045-5343cf96cc40.png)
- 複製をしていきます。これにより複製元の情報、リスタート処理もコピーされています。ここで名前を任意に変更し、動くトゲとするために、タイムラインを追加します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/8a56051c-4bf1-0215-2c4d-9943caedbcb1.png)
- そしてタイムラインノードをダブルクリックで編集し、フロートトラックを追加してその中にキーを３つ追加します
    - 左「0,0」真ん中「1.5,-500」右「3.0,0」そしてループも忘れずに
    - 保存とコンパイルも私はしておきました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/280e1e9f-895c-9754-b623-67393ee03c87.png)

- その後は、イベントフラグへもどり、Set Relative Location(Needle)を追加し、「ｘ、ｙ、ｚ」を分割した上で画像のように接続していきます
- -５００でｚに対して接続しているため、実装した場合、上から下へ上下の運動をします
- また時間差でトゲを移動させるようなバリエーションをもったものを考えていく

# 移動を開始する処理をずらす
- またBP_MovingDamageNeedleの編集画面を開き、Event BeginePlayとタイムラインノードの間にDelayノードを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/ad94c69c-cb97-dfee-9266-1b924866ae48.png)

- また、複製してもよいし、同じコーン（トゲ）でもよいが、今回は複製して行う
- 複製したトゲのイベントフラグを開きタイムラインノードの前にDelayを入れて実装する秒数はバラバラでもよい。上のように構成する

## トゲの動きにバリエーションをつける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/98da5fa4-e627-2dc0-30dd-b42c41e99a88.png)

- 変数の＋をおして新しい変数(DelayTime)を追加します。デフォルトで「Boolean」担てるところを、Floatに変更します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/e1237514-5401-5909-08b8-fe085401a89f.png)
- またDelayTimeを作ったところの横の目のアイコンを、目を開けているような状態にクリックで変更します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/d169018c-5581-ef33-48f1-e34fd75c3dd0.png)

- これにより、レベルに廃つぃた動くトゲに対して、個別にDelayTimeを設定できるようになります
- この作成した変数（DelayTime）をイベントフラグの中へドラックドロップして表示されたウィンドウから「GetDelayTime」を選択します。すると、「DelayTime」と書かれたノードが出現します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/919bd959-a7c7-d658-ad6d-07f5e6f58afa.png)

- それをDelayのDurationへ接続します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/a86dcb82-8224-aa01-89f2-f1085575f587.png)

- これによってこのBPをもつトゲを画面上に設置すると次のようにDelayTimeを編集できるようになります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/c3dd5dce-0834-a86e-ad93-91da65318074.png)

- この右下のDelayTimeを編集して各々トゲによって変えられるようになります
- 先ほど編集したトゲを複数コンテンツドロワーから持ってきて異なるDelayTimeを入力して実行してみたら異なる時間差でトゲが動くことがわかると思います
適応型ソフトウェア開発におけるチームビルディング

この記事は、[適応型ソフトウェア開発 アドベントカレンダー 2024](https://qiita.com/advent-calendar/2024/adaptive-software-development) の 17日目です。

## 複雑適応系（チーム）をどのように組み立てるか
適応型ソフトウェア開発において、チームという言葉は使わない。
職能横断型の集団が１つの目的を共有する生命体として、「複雑適応系」という言葉を用いる。

## 複雑適応系
複雑適応系について詳しくはこちらの記事を参考に見てもらえると嬉しい。

https://qiita.com/h-kinocoboy/private/1d678ddcc5ce7ba8e684

### 複雑適応系を形成するカギになる思想

ここが最も大切なポイントだった。

我々にとって、目的を達成することは確かに大切である。

ただし、大きな前提がある。

それは、 ***必ず生きて帰還すること*** だ。

### 生きて帰還する
刹那的に目的を達成することが重要ではない。
我々は何度もいろいろな課題に直面するし、そのたびに適応・変化を求められる。

遠足がいい例だ。
きちんと家に帰るまでが遠足。

山登りもそうだ。
安全に下山するまでが登山。

プロジェクトも言わずもがなだ。
確実にリリースし、安全に家に帰宅することが最重要である。

我々は仕事をするために生きてはいない。
生きるために仕事という手段を用いて、お金を得ているだけのことだ。
仕事で死んではいけない。

ここをはき違えると、到底カオスに向き合うことができなくなってしまう。

これが最も重要なモチベーションだった。


## 必ず生きて帰る生命体であれ
どんなに苦しい環境下でも楽しさやモチベーションを失ってしまったら、生きることがつらくなる。
そんな状態では適応活動など不可能である。

そのため、複雑適応系の形成をするときには、皆のモチベーションの根源を確認する作業から始めた。

### 各々にとっての報酬の確認
複雑適応系という生態系に集められているのは専門性を持つ「人間」である。
人間である以上、「自分の気持ち」を少なからず持っているはずだ。

しかし、その自分にとってのエゴや報酬の形は全く形が違う。

例えば、文字通り「金銭」が報酬として動ける者もいるし、「時間」が報酬であってほしいものもいる。
また、「次の仕事」だったり、社会的存在証明を求めているものもいる。

複雑適応系に属するにあたり、各々がどんな報酬を求めているのかを把握することで、お互いが同じ生命体だが別の種族であることを把握することが大切だった。

そうしないと、１つの種別による正義を押し付け合ってしまい、戦争が起こり、生きて帰ることができなくなる。

そうなってくると、目的達成に向けた圧倒的適応活動や変化などできないからだ。

### 各々のインプットとアウトプットの確認
生命体である以上それを構成する機能に与えるインプット・アウトプットを理解する必要がある。

生物の内臓１つとっても同じ構造である。

例えば、肝臓だ。
肝臓にブドウ糖をインプットすると、グリコーゲンをアウトプットする。
そのような働きがあり、次の内臓はグリコーゲンをインプットとして、別のアウトプットを作ることができるのだ。その連続が生命活動であり、うんこである。

この構造をうまく勘違いしてみると、複雑適応系の専門職もインプットとアウトプットが存在するはずだ。

お互いがどんなものをインプットしてもらえたら、何をアウトプットする余地があるのかを把握しあうことで、相互に連携することが初めて可能になる。

この期待値調整を行うことも重要だった。


### プライベートに関する会話
プライベートに関する会話は実はとても難しいものだ。
極論仕事中にその話をする必要性すらない。

しかし、このプライベートな会話こそ複雑適応系では重要なものであると位置づけた。

それはどうしてか。

このプライベートな情報開示をすることで、お互いが「人間」であることを認識し、お互いに優しくなれるからだ。

このやさしさが生命体を絶対に生きて帰ることができるものに進化させることができる。


## まとめ
この３つのカギになる重要なものを大切にし、圧倒的な適応力を生み出すための豊かな人間関係を作り上げるのだ。

良いものは、良い関係性から生まれてくるものである。