OmniAICreator/Qiita-1.07M huggingface dataset:
二項係数の和の定理

今回はクヌース先生の[コンピュータの数学(Amazon)](https://www.amazon.co.jp/dp/4320124642/)の中で見つけた二項係数の和の定理を紹介します。

### 【例題 １】以下の二項係数の和の一般解を求めよ

```math
\begin{align}
&\sum_{k=0}^{n}\binom{r+k}{k}  &(1) \\ \\

&\sum_{k=0}^{n}\binom{k}{m} &(2) \\ \\

\end{align}
```

### パスカルの三角形の式
この例題を有名な[パスカルの三角形](https://ja.wikipedia.org/wiki/%E3%83%91%E3%82%B9%E3%82%AB%E3%83%AB%E3%81%AE%E4%B8%89%E8%A7%92%E5%BD%A2)の式を使って求めます。

```math
\begin{align}
\binom{r}{k} &= \color{blue}{\binom{r-1}{k}} + \color{red}{\binom{r-1}{k-1}} &(3) \\ \\
\end{align}
```
### 例題 １－(1) の解法

具体的な例として$\large \binom{5}{3}$を$\color{red}{赤字}$の部分に(3)を次々に使って展開していきます。

```math
\begin{align}
\color{black}{\binom{5}{3}}&=\color{blue}{\binom{4}{3}}+\color{red}{\binom{4}{2}}\\
&=\binom{4}{3}+\color{blue}{\binom{3}{2}}+\color{red}{\binom{3}{2}}\\
&=\binom{4}{3}+\binom{3}{2}+\color{blue}{\binom{2}{1}}+\color{red}{\binom{1}{0}} & \\ 
&この右辺を見ると(1)のr=1, n = 3の場合なので、 & \\
&\sum_{k=0}^{n}\binom{r+k}{k}=\binom{r+n+1}{n}  &(1a) \\ \\
&となります。（帰納法を使えば証明可） & \\
\end{align}
```

### 例題 １－(２) の解法

今度は$\large \binom{5}{3}$の$\color{blue}{青字}$の部分を(3)を使って展開していきます。

```math
\begin{align}
\color{black}{\binom{5}{3}}&=\color{blue}{\binom{4}{3}}+\color{red}{\binom{4}{2}}\\
&=\color{blue}{\binom{3}{3}}+\color{red}{\binom{3}{2}}+\color{black}{\binom{4}{2}}\\
&=\color{blue}{\binom{2}{3}}+\color{red}{\binom{2}{2}}+\color{black}{\binom{3}{2}}+\color{black}{\binom{4}{2}} & \\ 
&=\color{blue}{\binom{1}{3}}+\color{red}{\binom{1}{2}}+\color{black}{\binom{2}{2}}+\color{black}{\binom{3}{2}}+\color{black}{\binom{4}{2}} & \\ 
&=\color{blue}{\binom{0}{3}}+\color{red}{\binom{0}{2}}+\color{black}{\binom{1}{2}}+\color{black}{\binom{2}{2}}+\color{black}{\binom{3}{2}}+\color{black}{\binom{4}{2}} & \\ 

&\binom{0}{3}=0なので無視すると、 & \\
&(2)のm=2, n = ４の場合になっていることがわかります、 & \\
&したがって、 & \\
&\sum_{k=0}^{n}\binom{k}{m}=\binom{n+1}{m+1}  &(2a) \\ \\
&となります。（これも帰納法を使えば証明可） & \\
\end{align}
```
### 【例題 ２】以下の二項係数の和の一般解を求めよ

シグマの上限が$n$でないことに注意して下さい。
```math
\begin{align}
&\sum_{k=1}^{x}\binom{n-k}{m}  &(3) \\ \\
\end{align}
```

### 例題 ２ の解法

```math
\begin{align}
& j=n-kと置き換えると& \\
& k=1 \ \ \rightarrow \ \ j=n-1& \\
& k=x \ \ \rightarrow \ \ j=n-x& \\
\sum_{k=1}^{x}\binom{n-k}{m}&=\sum_{j=n-k}^{n-1}\binom{j}{m} & \\
&=\sum_{j=0}^{n-1}\binom{j}{m}-\sum_{j=0}^{n-x-1}\binom{j}{m}  &(3') \\
& これに(2a)を適用すると& \\
&=\binom{n}{m+1}-\binom{n-x}{m+1} &(3a) \\
&となります。 & \\
\\ \\
\end{align}
```

この考え方はProject Euler, Problem 756: Approximating a Sumを解くのに役に立ちます。
KinoPHP で Livebook から PHP を実行する

## はじめに

KinoPHP を使うと、 Livebook で PHP が実行できるようになります

https://github.com/hbackman/kino_php/

実装したノートブックはこちら

https://github.com/RyoWakabayashi/elixir-learning/blob/main/livebooks/kino/kino_php.livemd

## 事前準備

実行環境上に PHP をインストールしている必要があります

Ubuntu の場合、 `apt install php` でインストールしましょう

macOS の場合、 `brew install php` や [asdf](https://asdf-vm.com/) 等でインストールしてください

## セットアップ

セットアップセルで KinoPHP をインストールします

```elixir
Mix.install([
  {:kino_php, "~> 0.2"}
])
```

## PHP の実行

`KinoPHP.eval` に PHP で書かれた処理を渡すと、第2引数の関数に実行結果が返ってきます

:::note info
`KinoPHP.eval` 自体の出力は終了コード（正常なら `0`）なので、 `Kino.nothing` で表示しないようにしています
:::

```elixir
"""
<?php
echo 'Hello, PHP!';
"""
|> KinoPHP.eval(fn output ->
  output
  |> Kino.Text.new()
  |> Kino.render()
end)

Kino.nothing()
```

実行結果

![スクリーンショット 2024-11-14 9.08.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/16ba2f16-7ebd-7e73-7dc7-7d533f82af70.png)

第2引数の関数は PHP からの標準出力を都度受け取ります

フレームを用意しておいて、 `KinoPHP.append_to_frame` で標準出力をストリーミングできます

```elixir
frame = Kino.Frame.new() |> Kino.render()

"""
<?php

for ($i = 0; $i < 5; $i++) {

  fwrite(STDOUT, "count $i \n");

  sleep(1);
}

"""
|> KinoPHP.eval(fn output ->
  KinoPHP.append_to_frame(frame, output)
end)

Kino.nothing()
```

実行している様子

![kino_php.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/7bc4d831-29b2-2dde-47b0-3a85bf31a7bc.gif)

## スマートセル

KinoPHP をインストールすると、スマートセルに "PHP Script" が追加されます

![スクリーンショット 2024-11-14 9.14.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/bc016c16-83b7-8fcf-6572-a388dd178ab0.png)

"PHP Script" セルを使うと、簡単に PHP を実行できます

![スクリーンショット 2024-11-14 9.15.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/c785af50-9880-4ea2-d1e7-33ecd5e81610.png)

## まとめ

KinoPHP を使うことで、 Livebook 上で PHP を実行することができました

PHP 入門を Livebook で学ぶ、なんてこともアリですね

https://www.php.net/manual/ja/index.php
Psostmanでのネットワークエラー？

**Postman Advent Calendar 2024 1日目**


Salesforceのトレイルヘッドの中にもPostmanを使うお題が複数あります。その中でも最近起こったエラーの質問をまとめます



+ [Unable to set up authentication to a connected app due to "Self signed certificate in certificate chain" error](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000Oeet)

:::note alert
{
    "error": "invalid_grant",
    "error_description": "authentication failure"
}
:::

始めはこの設定かと思いました。

File -> Settings
Turn off SSL certificate verification on the General tab.

This will prevent SSL certificate verification.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6284f7ab-9704-4bff-7dad-2dd6297733f8.png)

次にこれも疑いました

Adding CA certificates doesn't work for me. My certs are not self-signed but got the same error. Adding client certificates solved my problem. Quoted docs from Postman here: To send requests to an API that uses mutual TLS authentication, add your client certificate to Postman.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d09ac673-5c6f-b07b-3501-e532b76f98a7.png)

https://stackoverflow.com/questions/57424532/postman-error-self-signed-certificate-in-certificate-chain


しかしよく聞いてみるとネットワークの問題で他のアプリも使えなかったらしい
プロキシサーバーは設定されているとのこと

以下を試してもらう

Configure Postman to use a proxy server
https://learning.postman.com/docs/getting-started/installation/proxy/

+ [{ "error": "invalid_grant", "error_description": "authentication failure" }](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000naz3)

:::note
セキュリティートークンの間違えみたいです

I succeeded and I corrected the token, the username was missing in the body of the request
:::


# Error: Header "Host" contains invalid characters

+ [i am getting error in Quick Start: Connect Postman to Salesforce, Set Up and Connect Postman](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000n0gk0AA)

# 一番多いのは...

+ [PostmanからSalesforceのAPIを呼び出すときのINVALID_SESSION_ID](https://qiita.com/Keiji_otsubo/items/ab26108d1385455afec1)
StellarLikesでTikTokの存在感を強化しよう

現代のソーシャルメディアでTikTokの成功を目指すには、創造性に加えて視認性が重要です。StellarLikesは、TikTokでの存在感を高めたいクリエイターやビジネスを支援し、TikTokのいいねを購入、TikTokのフォロワーを購入、**TikTokの再生回数を購入**することで、あなたのコンテンツがより多くの視聴者に届くようにサポートします。

StellarLikesのメリット
StellarLikesは、TikTokの成長においてリアルで質の高いエンゲージメントを提供します。なぜStellarLikesが多くの利用者に選ばれるのか、以下をご覧ください：

リアルなエンゲージメント提供
StellarLikesは、リアルで信頼できるいいね、フォロワー、再生回数を提供し、あなたのプロフィールを強化し、新しいユーザーからの自然な関心を引き寄せやすくします。

素早い結果
StellarLikesは、迅速な配信に注力し、タイムリーにあなたのコンテンツが注目を集めるよう支援します。

柔軟なパッケージオプション
StellarLikesでは、多様なニーズや予算に対応するパッケージが用意されており、どなたでも気軽に利用できます。

拡大するリーチ
エンゲージメントを高めることで、StellarLikesはあなたのコンテンツがTikTokでより広く認知されるようにサポートします。

StellarLikesの利用方法
StellarLikesの公式サイトで、目的に合ったサービスを選びましょう — TikTokのいいねを購入、TikTokのフォロワーを購入、TikTokの再生回数を購入 からお好みのプランを選んで、購入手続きを完了すれば、すぐにエンゲージメントの変化が実感できるでしょう。

TikTok成長を目指すならStellarLikesを
品質と迅速な配信、本物のエンゲージメントにこだわるStellarLikesは、TikTokで本気で成長を目指す方にとって信頼のパートナーです。
mindの研究 その88

# 概要
mindが、謎なので調べてみた。
練習問題やってみた。

# 練習問題
c#をコンパイル、実行せよ。

# サンプルコード

```

出力ファイルは　ファイル。

メインとは
「hello.cs」で　出力ファイルを　新規オープンし
「using System;」で　出力ファイルに　一行書き込み
「public class HelloWorld {」で　出力ファイルに　一行書き込み
「    static public void Main () {」で　出力ファイルに　一行書き込み
「        Console.WriteLine ("Hello World!!");」で　出力ファイルに　一行書き込み
「    }」で　出力ファイルに　一行書き込み
「}」で　出力ファイルに　一行書き込み
出力ファイルを　クローズし
「C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc hello.cs」を　プログラム実行
「hello」を　プログラム実行
。




```

# 実行結果

```
>cs0
Microsoft (R) Visual C# Compiler version 4.8.9232.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.

This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5, which is no longer the latest version. For compilers that support newer versions of the C# programming language, see http://go.microsoft.com/fwlink/?LinkID=533240

Hello World!!
```


以上
Lispの遊び場を作る

# 和訳
Reddit/Lispに投稿しましたら、予想外にウケました。共感をもってもらえたようです。和訳して掲載いたします。


# 穏やかな日々
これまでのところ、Easy-ISLispに関するバグ報告はありません。最近いくつか小さなアップグレードを行いましたが、大きな変更はなく、落ち着いています。私はずっと、Lispのための「遊び場」を作りたいと考えていました。若い頃は、缶蹴りや野球などをして遊べる空き地がありましたが、今ではそうした場所はすべて消えてしまいました。新しい建物が建ち、駐車場ができ、子供たちは危険だからと空き地で遊ぶことを禁じられるようになりました。時の流れと、変わっていくものを感じます。

# Easy-ISLispを遊び場として
Easy-ISLispは私の知的なおもちゃであり、他の人にも楽しんでもらいたいと考えています。1980年代、Common Lispが確立される前には無数のLisp方言が存在していました。Lispシステムを作るのは比較的簡単で、多くの開発者が自分独自のLispを作り出して楽しんでいました。Common Lispの登場により、標準化が進み、実用的なプログラムを構築するには便利になりましたが、趣味のプロジェクトには少々大げさだったかもしれません。小さく理解しやすい実験的な言語として始まったSchemeも、今ではCommon Lispと同じように大規模な仕様に成長しました。子供たちが遊ぶ空き地を失ったように、趣味でLispを楽しむ人々も遊び場を失ったのです。Easy-ISLispがその空間を埋めることができれば、私はとても嬉しいです。

![bandicam 2024-10-31 16-41-18-226.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/807703b3-63ff-9481-460e-72fda7b0b24e.jpeg)


# ISLispとは？
ISLispは、ISOによって確立された非常にコンパクトなLisp言語の仕様です。古い時代のSchemeと同じくらいコンパクトで、Common Lispのような雰囲気を持ちながらも、現代的に洗練されています。

# 簡単な例
ターミナルでeislと入力することでREPLを開始できます。そこから、好きなものを入力して試すことができます。Lispは括弧の多用で有名ですが、慣れてくるとそれが楽しく直感的なプログラミングの方法に感じられるでしょう。

例えば、「Hello, World!」を表示するには以下のように入力します：

```lisp
(print "Hello, World!")
```

![bandicam 2024-10-31 16-36-03-441.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/c68f438d-ad9f-d431-ff7c-a0e870ae90a9.jpeg)



1 + 2を計算する場合は、次のように入力します：

```lisp
(+ 1 2)
```

# GUI
GUI機能も追加しましたので、グラフィカルに表示される三目並べ（Tic-Tac-Toe）などのゲームを楽しむことができます。懐かしい雰囲気を感じながら、探索してみてください！

![bandicam 2024-10-31 16-24-23-528.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/0caa41fa-869c-a0a5-8dd2-7f860d7f5012.jpeg)


# コミュニティの温かさ
以下はGitHubの活動状況です。ISLispはニッチな言語であるにもかかわらず、訪問者が絶えません。人々が楽しんでくれるのは本当に嬉しいことです。ブログでLispについて投稿すると、熱心なファンからの細かいコメントが寄せられることが多いですが、ISLispはリラックスした雰囲気が漂っています。これは私の子供時代の空き地のようなもので、自由に遊ぶことができ、誰からも文句を言われることはありません。ですから、どうぞ楽しんでください。

![bandicam 2024-10-31 15-55-57-112.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/095dfddf-781c-36f1-da88-f73e164faebd.jpeg)


# 結びに
Easy-ISLispはオープンソース（OSS）ですので、ぜひ試してみてください。このコンパクトで遊び心のあるLispを楽しんでいただければ幸いです。そして、私が感じているのと同じ喜びを感じてもらえれば嬉しいです。

sasagawa888/eisl: ISLispインタプリタ/コンパイラ https://github.com/sasagawa888/eisl
自分のMACアドレスをバイナリーに変換



![o_coq640.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/60ea0a62-7720-48a5-b3d4-51aa0500a6e0.jpeg)


```c++

//ESP32_NOW_macAddress_M5NanoC6_1

#include "ESP32_NOW.h"
#include "WiFi.h"
#include <esp_mac.h>  // For the MAC2STR and MACSTR macros


#define ESPNOW_WIFI_CHANNEL 1


//MACを16進に変換
char *mac_add_conv(const unsigned char *a) {

  char h[16] = {'0', '1', '2', '3', '4', '5', 
    '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  static char b[16 + 1];

  for(int i=0;i<6;i++){
    b[i*2+0] = h[a[i] >> 4];
    b[i*2+1] = h[a[i] & 0x0f];
  }
  b[12] = 0;

  return ( b ); //戻り値
  
}//mac_add_conv

unsigned char *mac_add_ex_conv(char *a){

  static unsigned char b[16+1];
  int c[] = {
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
//0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0,
  0,10,11,12,13,14,15, 0, 0, 0, 0, 0, 0, 0, 0, 0};

  for(int i=0;i<6;i++){
    b[i] = 16 * c[a[(i*3+0)]]  + c[a[(i*3+1)]];
  }
 
  return( b );

}//mac_add_ex_conv

void setup() {

  // Initialize the Wi-Fi module
  WiFi.mode(WIFI_STA);
  WiFi.setChannel(ESPNOW_WIFI_CHANNEL);

  Serial.begin(115200);

  for(int i=0;i<10;i++){
    Serial.print(".");
    delay(1000);
  }//for
  Serial.println();

  Serial.println("  MAC Address: " + WiFi.macAddress());

  String thisString = WiFi.macAddress();
  const char *hj = thisString.c_str();
  char kj[17];
  for(int i=0;i<(sizeof kj);i++){
    kj[i]=hj[i];
  }

  Serial.println(
    mac_add_conv(mac_add_ex_conv(kj)));

}//setup


void loop() {

  delay(1); //ダミー

}//loop



```
Microsoft Edge で表示されていない新しいタブページのURL

# 結論
<div>https://ntp.msn.com/edge/ntp?query=enterprise</div>

### 目的からすればこちらでも良い
<div>https://office.com/feed/<div>

# 補足
組織の管理下でWindowsを利用している場合、Edgeの新規タブページが制御できます。（一般ユーザーからすれば制御されています。）

[Microsoft Edge エンタープライズ 新規タブ ページ | Microsoft Learn](https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-enterprise-ntp)


組織指定のページだったり、ブランクページが指定されていたりすると、Microsoftデフォルトのページが設定できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329842/8f5bda32-64c1-02d3-c20d-55cdfbba9afd.png)
MS製キュレーションを好んでいる場合、任意にアクセスしたくなりますが、**URLがブランクになっている**（「Webアドレスを検索または入力する」というメッセージが表示される）ため辿り着きにくいです。

F12 開発者ツールで確認したので備忘録でした。

大事なのはSharePointプラットフォーム上で開く優先度の高いファイルに素早くアクセスしたいことなので、Office.comのフィード表示でも良いと思います。
Rust 非同期なstatic変数を扱う

## tokio::sync::OnceCell
bool型の変数をスレッドセーフかつ非同期で扱う。

``` rust
use tokio::sync::Mutex;
use std::sync::Arc;

static BOOL_VAR: tokio::sync::OnceCell<Arc<Mutex<bool>>> = tokio::sync::OnceCell::const_new();

async fn init_bool_var() {
    BOOL_VAR
        .get_or_init(|| async {
            Arc::new(Mutex::new(false)) // 初期値を false に設定
        })
        .await;
}

async fn set_bool(value: bool) {
    let lock = BOOL_VAR.get().expect("BOOL_VAR should be initialized").clone();
    let mut bool_var = lock.lock().await;
    *bool_var = value;
}

async fn get_bool() -> bool {
    let lock = BOOL_VAR.get().expect("BOOL_VAR should be initialized").clone();
    let bool_var = lock.lock().await;
    *bool_var
}

#[tokio::main]
async fn main() {
    // 初期化
    init_bool_var().await;

    // 値を設定
    set_bool(true).await;

    // 値を取得
    let value = get_bool().await;
    println!("BOOL_VAR: {}", value); // BOOL_VAR: true と表示されます
}

```

## std::lazy::Lazy

静的な変数を遅延初期化できる。

``` rust
use tokio::sync::Mutex;
use std::sync::Arc;
use tokio::sync::Lazy;

// `bool`型の非同期な静的変数を定義
static BOOL_VAR: Lazy<Arc<Mutex<bool>>> = Lazy::new(|| Arc::new(Mutex::new(false)));

async fn set_bool(value: bool) {
    let mut bool_var = BOOL_VAR.lock().await;
    *bool_var = value;
}

async fn get_bool() -> bool {
    let bool_var = BOOL_VAR.lock().await;
    *bool_var
}

#[tokio::main]
async fn main() {
    // 値を設定
    set_bool(true).await;

    // 値を取得
    let value = get_bool().await;
    println!("BOOL_VAR: {}", value); // BOOL_VAR: true と表示されます
}

```

## どちらがよいか

* `Lazy`は、静的なグローバル変数や、特定の計算を1回だけ行ってキャッシュしたい場合に適している。
* `OnceCell`は、変数を後から初期化したり、より柔軟な初期化タイミングをコントロールしたい場合に適している。
SQLパズル　15  現在の給料と昇給前の給料　その１メモ

# 概要


いろんな要素が詰まってますね。
自己非等値結合とHaving句を使って部分集合の条件指定が肝ですね。

この問題解法９通りあるから重い…


# 要件
給料テーブルから、現在の給料と現在より直近の給料を取得したい。
（一番新しい日付のレコードと２番目に新しい日付のレコードを取得したい？？）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/7846e85e-3b00-f7fc-466b-3487b1a083b5.png)

# SQL

## DDL
```sql
drop table if exists salaries cascade;
create table salaries
(emp_name char(10) not null,
sal_date date not null,
sal_amt decimal(8,2) not null,
primary key(emp_name,sal_date)
);

insert into salaries values
       ('Tom',   '1996-06-20', 500.00),
       ('Tom',   '1996-08-20', 700.00),
       ('Tom',   '1996-10-20', 800.00),
       ('Tom',   '1996-12-20', 900.00),
       ('Dick',  '1996-06-20', 500.00),
       ('Harry', '1996-07-20', 500.00),
       ('Harry', '1996-09-20', 700.00);

```



## 答えのSQL


```sql
-- 本の答え　　viewだと作り直すの面倒だからSELECT文で書き換える
drop view if exists salaries2;  
create view	salaries2(emp_name,sal_date,sal_amt)
AS SELECt S0.emp_name,S0.sal_date,MAX(S0.sal_amt)
FROM salaries AS S0, salaries AS S1
WHERE S0.sal_date <= S1.sal_date
    AND S0.emp_name = S1.emp_name
    GROUP BY S0.emp_name, S0.sal_date
   Having Count(*) <= 2
;

-- 答え
-- 回答の方だとviewだが、検証しやすくするためにSELECT文にする
SELECT S0.emp_name,S0.sal_date,MAX(S0.sal_amt)
FROM salaries AS S0, salaries AS S1
WHERE S0.sal_date <= S1.sal_date
    AND S0.emp_name = S1.emp_name
    GROUP BY S0.emp_name, S0.sal_date
   Having Count(*) <= 2
;

-- 分解して考える

-- step1　グループ化して部分集合を確認する
名前で自己結合して, sal_dateの組み合わせを作る
SQLの結果の見やすくすために、グループ化の条件にSa
SELECT S0.emp_name, S0.sal_date as S0_sal_date,S1.sal_date as S1_sal_date,S0,count(*)
FROM salaries AS S0, salaries AS S1
WHERE  S0.emp_name = S1.emp_name
    GROUP BY S0.emp_name, S0.sal_date,S1.sal_date
;



-- step2 非等号結合を行って 
SELECT S0.emp_name, S0.sal_date as S0_sal_date,S1.sal_date as S1_sal_date,S0,count(*)
FROM salaries AS S0, salaries AS S1
WHERE S0.emp_name = S1.emp_name
	AND S0.sal_date <= S1.sal_date
    GROUP BY S0.emp_name, S0.sal_date,S1.sal_date
    ORDER BY S0.emp_name, S0.sal_date
	;


-- step3 Havingで部分集合の条件 解部分
SELECT S0.emp_name, S0.sal_date as S0_sal_date,count(*),MAX(S0.sal_amt)
FROM salaries AS S0, salaries AS S1
WHERE S0.emp_name = S1.emp_name
	AND S0.sal_date <= S1.sal_date
    GROUP BY S0.emp_name, S0.sal_date
	Having Count(*) <= 2
;
```


### 図
step1-2

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/a34b1c09-0096-28d6-45d5-bfd18cb3f78a.png)

step2-3
Having句でを使うことによって、現在の給料と直近の給料の情報だけを取り出すことができる
Count(*)=1のとき、S0.sale_date = S1.sale_dateは同じ値であり、S0.sal_amtは最新の給料
Count(*)=2のとき、S0.sale_date< S1.sale_dateであり、S0.sale_dateは直近の日付となる
Count(*)>3のとき、現在、直近の日付、直直近の日付となるのでこの条件は弾く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/d86d2dcd-c011-2d43-dfe7-0d4f0b62b400.png)


# 参考

SQLパズル　p61　15 現在の給料と昇給前の給料

SQLパズル　サポートページ
https://mickindex.sakura.ne.jp/database/db_support_sqlpuzzle.html#LocalLink-p15

達人に学ぶSQL徹底指南書第２版 p48 自己結合　非等値結合　

達人に学ぶSQL徹底指南書第２版 p105 Having句の力 　類題が見当たらない

github 差分
https://github.com/RYA234/SQL_Puzzle_Learning/commit/7e38e52210a77fcae04192d9282bd2bd22592ca0
自作の乱数生成器を乱数分布ライブラリ(std::uniform_int_distribution)と組み合わせる

# 概要

乱数生成器をカスタム実装し、乱数分布ライブラリ `std::uniform_int_distribution`と組み合わせて使用する方法を実践的に説明する。

ソースコードについては、[https://github.com/youpong/RandomEngine](https://github.com/youpong/RandomEngine) を利用できる。

## 必要条件

プログラムは、標準規格 C++20 に準拠している。そのため、新しいバージョンの C++ コンパイラーと C++ 標準ライブラリの実装が必要になる。

## テスト環境

以下の環境でテストしている。

* macOS 15.2
  * Xcode 16.2 (バンドルされる Apple Clang 16.0.0 を使用)
* Ubuntu 24.04.1 LTS
  * GCC 13.3.0
  * Clang 18.1.3

# 手順

ここでは、次のような流れで開発する。

1. C++標準ライブラリの乱数生成器 std::default_ramdom_engine と乱数分布 std::uniform_int_distribution を組み合わせたプログラムを作成する。
2. 乱数生成器 RandomEngine をカスタム実装する。
3. 乱数生成器をカスタム実装の RandomEngine と置き換える。

## C++ コンパイラのフラグを設定する

以下の内容の Makefile を用意する。プログラムが C++20 規格に準拠していることと、
コンパイル時のワーニングをなるべく多くだすようにしている。

```
CXXFLAGS = -std=c++20 -Wall -Wextra --pedantic-errors
```

## C++標準ライブラリの乱数生成器と乱数分布を組み合わせる

ファイル名 main.cpp で以下の内容を保存する。

```c++
#include <iostream>
#include <random>

int main() {
    std::uniform_int_distribution<int> d(1, 6);
    std::default_random_engine e;

    for (auto i = 0; i != 10; ++i) {
        std::cout << d(e) << " ";
    }
}
```

## 実行する

```sh
$ make main && make run
```

実行結果は以下の様になる。　
実行結果は環境によって異なるだろう。
```
2 6 5 1 3 1 1 3 3 3 
```

## 乱数生成器をカスタム実装する

乱数生成クラスは、以下のクラスメソッドを実装する必要がある。

* min() - 生成する乱数の最小値を返す
* max() - 生成する乱数の最大値を返す

以下のインスタンスメソッドを実装する必要がある。

* operator() - 乱数を生成する

以下の型エイリアスを実装する必要がある

* result_type - 生成する乱数の型（非負[^1]）
[^1]: LLVM のサブプロジェクトlibc++ による C++ 標準ライブラリの実装では、 `std::uniform_int_distribution` のオブジェクトが引き受ける乱数生成器について、*非負*の乱数を生成することを求めている。
詳しくは、libc++ プロジェクトの [include/__random/is_valid.h](
https://github.com/llvm/llvm-project/blob/main/libcxx/include/__random/is_valid.h) で定義されている `__libcpp_random_is_valid_urng` を参照のこと。

具体的な実装例は以下の様になる。

```c++
class RandomEngine {
public:
    using result_type = unsigned int;

private:
    // params from cc65 compiler
    unsigned int a = 16'843'009;
    unsigned int x;
    unsigned int c = 826'366'247;
public:
    RandomEngine(unsigned int seed = 0) : x(seed) {}
    result_type operator()() {
        x = a * x + c;
        return x;
    }
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() {
        return std::numeric_limits<unsigned int>::max();
    }
};
```

## カスタム実装した乱数生成器に置き換える

```c++
#include <iostream>
#include <random>

int main() {
    std::uniform_int_distribution<int> d(1, 6);
    RandomEngine e; // <- 置き換えた

    for (auto i = 0; i != 10; ++i) {
        std::cout << d(e) << " ";
    }
}
```

## 実行する

```sh
$ make main && make run
```

実行結果は以下の様になる。
```
6 5 2 1 6 5 2 1 6 5 
```

以上です。

# 参考文献

1. 江添亮. *江添亮のC++入門*. ドワンゴ, 2019, Kindle版, 39.3 乱数分布.
AutosarAP Cryptography#2

# Adaptive Platform Autosar / Cryptograpy

## AUTOSAR_AP_SWS_Cryptography.pdf
https://www.autosar.org/fileadmin/standards/R23-11/AP/AUTOSAR_AP_SWS_Cryptography.pdf

### 1. はじめにと機能概要
この仕様書は、Adaptive AUTOSARの機能クラスターであるCryptography（FC Crypto）とそのAPI（CryptoAPI）の機能と構成について説明しています。FC Cryptoは、アプリケーションや他のAdaptive AUTOSAR機能クラスターに対して、暗号化操作、鍵管理、証明書処理などの操作を提供する標準化されたインターフェースを提供します。これらの操作の実装、構成、およびアプリケーションから実装への操作の仲介を管理します。CryptoAPIは、公開鍵暗号と対称鍵暗号の両方をサポートし、認証、暗号化、復号化などのメカニズムを自動車サービスに提供します。

### 2. 略語と頭字語
以下の用語集には、FC Cryptoモジュールに関連する略語と頭字語が含まれています。これらはには含まれていません。
ACL: Access Control List
AE: Authenticated Encryption
AEAD: Authenticated Encryption with Associated Data
AES: Advanced Encryption Standard
API: Abstract Programming Interface
ARA: Autosar Runtime Environment for Adaptive Applications
ASN.1: Abstract Syntax Notation One
BER: Basic Encoding Rules
BLOB: Binary Large Object
CA: Certificate Authority
CBC: Cipher Block Chaining Mode
CBC-MAC: Cipher Block Chaining Message Authentication Mode
CCM: Counter Mode with CBC-MAC
CMAC: Cipher-based Message Authentication Code
CMP: X.509 Certificate Management Provider
CO: Cryptographic Object
COUID: Cryptographic Object Unique Identifier
CRL: Certificate Revocation Lists
CSR: Certificate Signing Request
CTL: Certificate Trust List
DER: Distinguished Encoding Rules
DH: Diffie-Hellman
ECC: Elliptic Curve Cryptography
ECDH: Elliptic Curve Diffie-Hellman
ECDSA: Elliptic Curve Digital Signature Algorithm
ECIES: Elliptic Curve Integrated Encryption Scheme
ECU: Electronic Control Unit
FC Crypto: Functional Cluster Cryptography
GCM: Galois Counter Mode
GMAC: Galois MAC
HSM: Hardware Security Module
HMAC: Hashed Message Authentication Code
IAM: Identity and Access Management
IETF: Internet Engineering Task Force
IKE: Internet Key Exchange
IPC: Inter-Process Communication
IPsec: Internet Protocol Security
IV: Initialization Vector
KDF: Key Derivation Function
KEK: Key Encryption Key
KEM: Key Encapsulation Mechanism
KSP: Key Storage Provider
MAC: Message Authentication Code
MGF: Mask Generation Function
OCSP: Online Certificate Status Protocol
PDP: Policy Decision Point
PEP: Policy Enforcement Point
PEM: Privacy-Enhanced Mail
PKI: Public Key Infrastructure
PKCS: Public Key Cryptography Standard
RA: Registration Authority
RNG: Random Number Generator
RSA: Rivest, Shamir, Adleman
SecOC: Secure Onboard Communication
SHA-1: Secure Hash Algorithm (version 1)
SHA-2: Secure Hash Algorithm (version 2)
SHA-3: Secure Hash Algorithm (version 3)
SHE: Secure Hardware Extension
TLS: Transport Layer Security
TPM: Trusted Platform Module
UCM: Update and Configuration Management
UID: Unique Identifier
X.509: Standard for certificates
Facebook APIで広告IDから広告画像URLを取得する

# はじめに
こんにちは、ユーゴです。今回は、Facebook API (マーケティングAPI > インサイトAPI)についてを紹介します。

# 問題
広告IDから、広告画像URLの取得方法に悩みました。

# 解決
以下のように実装します。

```python
from facebook_business.adobjects.ad import Ad
from facebook_business.adobjects.adcreative import AdCreative

def get_ad_image_url(ad_id):
    # Adオブジェクトから「creative」を取得
    ad = Ad(ad_id).api_get(fields=[Ad.Field.creative])
    creative_id = ad["creative"]["id"]
    creative = AdCreative(creative_id).api_get(
        fields=[
            AdCreative.Field.image_url,
            AdCreative.Field.thumbnail_url,
        ]
    )

    # creativeの中に広告画像URLがあればreturn
    if AdCreative.Field.image_url in creative:
        return creative[AdCreative.Field.image_url]
    elif AdCreative.Field.thumbnail_url in creative:
        return creative[AdCreative.Field.thumbnail_url]
        
    return None
```

image_url, thumbnail_urlの違いがよくわかりませんが、私の場合はthumbnail_urlのみ返ってきました。広告の種類や設定によっては、image_urlが返ってくるのでしょうか？横着に両方取れるようにしておきました。

# まとめ
いかがだったでしょうか。今回は、Facebook APIについてを紹介しました。
このように、Facebook APIの使い方から、Unity, AWS, GAS, 量子コンピューティングなど、幅広く紹介しております。お役に立てましたら、いいね, フォローなどよろしくお願いします！
Nextjs でのパスパラメータの取り方

# 前提
- app router を利用しています。
- next14 を利用しています。
- server component での書き方です。

# ソースコード
下記のコードで id に path parameter が入ってきます。

app/company/detail/[id]
``` typescript
import { Form } from './form'

const Registration = ({ params: { id } }: { params: { id: string } }) => {
  console.log('propertyNo: ', id)

  return (
    <div>
      <Form propertyNo={id} />
    </div>
  )
}

export default Registration

```
SQLチューニングの手順

## はじめに
実務でSQLチューニングを行う際、同じPJ内の方にチューニング説明をする機会が度々あったので、個人用含め手順についてまとめていきます。

## 手順
[・実行計画を取ろう](#実行計画を取ろう)
[・いきなりインデックスはちょっとまって](#いきなりインデックスはちょっとまって)
[・絞り込みはHAVING句よりWHEREよりFROM](#絞り込みはHAVING句よりWHEREよりFROM)
[・その他TIPS](#その他TIPS)
[・インデックスについて](#インデックスについて)
[・それでも改善しない](#それでも改善しない)

## 実行計画を取ろう
はじめは実行計画を取ります。理由として、実行計画は対象SQLのどこが早く、どこが遅いかをすぐに教えてくれるからです。闇雲に条件を変えたりインデックスを貼ったりすると横展開の被害が大きくなるので大変になります。

[SQLの実行計画の読み方](https://a5m2.mmatsubara.com/wp/?p=20255 "SQLの実行計画の読み方")
[パフォーマンスチューニング9つの技 ～「探し」について～](https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/tuningrule9-search/ "パフォーマンスチューニング9つの技 ～「探し」について～")


## いきなりインデックスはちょっとまって
SQLチューニングといえばインデックス？ですが、インデックスには効率的な付与の条件がいくつかあります。逆にいうと非効率な付与を行うと実行計画が変わり、最悪の場合他のSQLも処理が遅くなってしまいます。

インデックスについて検索すると”大規模なテーブルに付与するのがいい”など出ますが、大規模なテーブルは他にも多くのSQLを使っているので注意が必要です。

## 絞り込みはHAVING句よりWHEREよりFROM
詳しい理由は他にもあると思いますが、条件の絞り込みはSQL実行の早い段階で大きく絞り込めていれば絞り込めているほど後続処理が小さく済むので、
HAVING句に条件があればWHEREに移動できないか、またWHEREに書いてある条件はFROM（結合条件）に移動できないか検討してみてください。


## その他TIPS
- サブクエリを引数に取る場合、INよりもEXISTSを使う※1
- サブクエリを引数に取る場合、INよりも結合を使う※2
- ソートを回避する※3
- DISTINCTをEXISTSで代用する※4
- 中間テーブルの代わりにHAVING句を活用しよう※5
- IN述語で複数のキーを利用する場合は、一箇所にまとめる※6


## インデックスについて
（ヒント句とかは置いといて）最終手段インデックスに書いていきます。
- どこにインデックスを付与するか※7
    - 1.主キー
    - 2.外部キー
    - 3.絞り込み対象
    - 4.集計対象
    - 5.ソート対象
- どのようにインデックスを付与するか
    - 大規模テーブル
        - ※小規模テーブルの改善で処理速度が許容範囲になるなら、二次被害を防ぐために個人的には小規模テーブルから見るのがおすすめです
    - カーディナリティが高い
- インデックス付与されないパターン
    - 加工をしている
    - NULLを使っている
    - 否定形を使っている
    - 複合インデックスと列の順番が異なる
    - 後方一致、曖昧条件を使っている

インデックスを付与しても結合条件が異なったりするので注意が必要です。
結合方法について下記お世話になってます。
[チューニング ～ SQLチューニングを実施する ～](https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/implement-sqltuning/ "チューニング ～ SQLチューニングを実施する ～")

## それでも改善しない
上記色々試しても望む改善がされない場合、ヒント句や並列実行の処理方法がありますが、
SQLを使ってるバージョンやその他機能との依存関係になってしまうので、SQL以外の改善方法（マテビュー作成や機能の並列処理など）を見直した方がよいかなと個人的には思います。

## 参考
- ミック (2018/10/11) 「達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ」※1~6
- NAOKI MATSUMOTO (2024/9) 「【22日間で学ぶ】SQL文、分析関数、テーブル設計、SQLチューニングまでMySQLで覚えるSQL実践講座」※7
Amazonアフィリエイト用トラッキングIDを埋め込んだ短縮URLの作り方

:::note warn
環境によって(どんな環境でもかもしれない)リクエストがブロックされる場合があります。その際はお手数ですがSelenium等を利用してください。
:::

Amazonアフィリエイトでは、固有のトラッキングIDをクエリとして付与した商品ページのURLをしようします。商品ページ上部の「アソシエイトツールバー」から、URLを手動で作成することができますが、何らかの理由で自動作成したい場合、最小構成でも以下の長さになります。

`https://www.amazon.co.jp/dp/B0DGQ6GSB7/ref=nosim?tag=[TrackingID]`

前述したツールバーから作成できるのは、こちらの公式短縮URLです。この方が都合良いですよね。

`https://amzn.to/4fnAsrf`

後半の文字列は自動生成で、作成するたびに変化するようです。

# ツールバーの通信を確認

ネットワークタブを確認しながらURLを作成したところ、以下のようなGETリクエストが行われていました。

```:GET
https://www.amazon.co.jp/associates/sitestripe/getShortUrl?longUrl=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0DGQ6GSB7%3F%26linkCode%3Dsl1%26tag%3Dtwitter-adver-22%26linkId%3D2bbff7c487291ba89337f43d6619f0a9%26language%3Dja_JP%26ref_%3Das_li_ss_tl&marketplaceId=6
```
最低限必要なクエリはこの3つ
* longUrl(元の長いURL)
* tag(トラッキングID)
* marketplaceId(恐らく日本はデフォルトで6)

```:GET
https://www.amazon.co.jp/associates/sitestripe/getShortUrl?longUrl=[URL]&tag=[TrackingID]&marketplaceId=[marketplaceId]
```
成功した際のレスポンスは以下の通り。

```json:Response
{
  "longUrl": "https://www.amazon.co.jp/dp/B0DGQ6GSB7?&linkCode=sl1&tag=twitter-adver-22&linkId=2bbff7c487291ba89337f43d6619f0a9&language=ja_JP&ref_=as_li_ss_tl",
  "shortUrl": "https://amzn.to/4fuNlzS",
  "isOk": true
}
```

この`shortUrl`が実際に短縮URLとして利用できるようです。
正常なURLができているか確認したい際は、アソシエイト公式ページの「リンクの動作確認ツール」で確認するのがおすすめです。(下がそのリンクです)

https://affiliate.amazon.co.jp/home/tools/linkchecker

内容は以上です。内部的処理用のAPIと思われますので、使用は自己責任でお願いします。
お読みいただきありがとうございました。
AutosarAP Cryptography

# Adaptive Platform Autosar / Cryptograpy


## AUTOSAR_AP_RS_Cryptography.pdf
https://www.autosar.org/fileadmin/standards/R23-11/AP/AUTOSAR_AP_RS_Cryptography.pdf

### 機能要件
|要件|説明|理由|
|:---|:---|:---|
|対称鍵の保護|対称鍵の値を直接抽出できないようにする|鍵の漏洩リスクを減少させるため|
|非対称鍵の保護|非対称鍵の値を直接抽出できないようにする|鍵の漏洩リスクを減少させるため|
|セッション鍵とエフェメラル鍵の管理|セッション鍵やエフェメラル鍵のライフタイム中の安全な取り扱い|一時的な鍵の安全な管理が必要|
|暗号化アーティファクトの安全な保存|秘密鍵、公開鍵、署名、証明書などの安全な保存|基本的な機能として必要|
|暗号化オブジェクトの一意識別|生成された暗号化アーティファクトに一意の識別子を割り当てる|依存関係の定義や重複防止のため|
|バージョン管理とオリジンソースの区別|暗号化オブジェクトのバージョン管理とオリジンソースの情報提供|繰り返し攻撃を防止するため|
|秘密の種子の安全な取り扱い|秘密の種子の保存、読み込み、インポート、エクスポート|秘密の種子の漏洩を防ぐため|
|鍵と秘密の種子の使用範囲の制限|鍵や秘密の種子の使用範囲を制限|不適切な使用を防ぐため|
|アプリケーションごとのアクセス権の分離|各アプリケーションが専用の暗号化オブジェクトスロットにアクセス|信頼性の向上|
|鍵の生成と管理|暗号鍵の生成と管理をサポート|鍵の機密性を保つため|
|鍵の使用制限|鍵の使用を制限し、不適切な使用を防止|鍵の機密性と整合性を保つため|
|鍵の派生|基本鍵からの鍵の派生をサポート|複数の対称鍵を生成するため|
|鍵の交換|他のエンティティとの鍵交換をサポート|共通の秘密を確立するため|
|鍵のインポートとエクスポート|鍵の安全なインポートとエクスポートをサポート|鍵の安全な配布とバックアップのため|
|パスワードの処理|パスワードの安全な処理をサポート|パスワードの漏洩を防ぐため|
|アルゴリズムの指定|鍵生成や派生時にアルゴリズムを指定可能|鍵の不適切な使用を防ぐため|
|ドメインパラメータの管理|アルゴリズム固有のドメインパラメータの管理をサポート|ドメインパラメータの安全な管理が必要|
|暗号化オブジェクトの統一管理|様々な暗号化オブジェクトの統一管理をサポート|アプリケーション間の協力を容易にするため|
|アプリケーション専用の鍵スロット|アプリケーション専用の鍵スロットのプロトタイピングをサポート|鍵スロットの内容とアクセス権を管理するため|
|鍵の使用制限の定義|新しく生成または派生された鍵の使用制限を定義可能|セッション鍵の使用制限を定義するため|
|鍵のメタ情報のエクスポートとインポート|鍵のメタ情報と共にエクスポートとインポートをサポート|鍵の正しい適用のため|
|鍵のエクスポート可能性の制御|鍵のエクスポート可能性を制御|鍵の不正なエクスポートを防ぐため|
|ドメインパラメータの割り当て|鍵生成や派生時にドメインパラメータを割り当て|ドメインパラメータの変更を防ぐため|
|鍵オブジェクトのバージョン管理|鍵オブジェクトのバージョン管理をサポート|ロールバック保護のため|
|対称暗号化と復号化|対称暗号化と復号化のインターフェースを提供|データの暗号化と復号化のため|
|非対称暗号化と復号化|非対称暗号化と復号化のインターフェースを提供|特殊なユースケースに対応するため|
|メッセージ認証コード|メッセージ認証コードの生成と検証をサポート|メッセージの認証のため|
|デジタル署名|デジタル署名の生成と検証をサポート|デジタル署名付き更新のため|
|ハッシュ|暗号ハッシュの生成と検証をサポート|署名の検証のため|
|乱数生成|暗号的に強力な乱数の生成をサポート|鍵やノンスの生成のため|
|認証付き対称暗号化|認証付き対称暗号化と復号化のインターフェースを提供|認証付き暗号化データのため|
|対称鍵ラッピング|対称鍵のラッピングとアンラッピングをサポート|鍵の安全な輸送のため|
|非対称鍵カプセル化|非対称鍵カプセル化メカニズムをサポート|

### 非機能要件
|要件|説明|理由|
|:---|:---|:---|
|エラーステートの通知メカニズムの効率化|エラーステートの通知メカニズムを効率化し、開発者がエラー状態を認識し、適切に対処できるようにします|基本的な機能として必要|

### その他要件
|要件|説明|理由|
|:---|:---|:---|
|公開鍵インフラストラクチャ（PKI）との統合|PKIとの統合をサポートし、証明書の解析や検証、証明書チェーンの検証、証明書署名要求の作成などを行います|PKIは安全な情報転送のために広く使用されています|
|標準化されたヘッダーファイル構造の提供|標準化されたヘッダーファイルを提供し、アプリケーションコードの再利用性を向上させます|コードの再利用性を高めるため|
|ストリーミングアプローチのサポート|大量のデータを処理するためのストリーミングアプローチをサポートします|基本的な機能として必要|
|カウンターモードのサポート|カウンターモードのストリーム暗号のランダム位置への移動をサポートします|大量データの暗号化と復号化のため|
|暗号APIと鍵アクセスAPIの分離|暗号APIと鍵アクセスAPIを分離します|実装の簡素化とサポートのため|
|暗号APIとPKI APIの分離|暗号APIとPKI APIを分離します|実装の簡素化とサポートのため|
|暗号プリミティブの統一命名規則|統一された暗号プリミティブの命名規則をサポートします|ポータブルなアプリケーションコードの開発のため|
|実行時の使用スタイルの設定|実行時に暗号プリミティブの選択とプロパティの確認をサポートします|アプリケーションのデバッグのため|
|複数の暗号プロバイダの共同使用|複数の暗号プロバイダの共同使用をサポートします|異なるアプリケーションドメインでの使用のため|
|鍵とリクエストの分離|鍵とリクエストの分離をサポートします|マルチテナントシナリオでの安全性向上のため|
|鍵スロットの識別|鍵スロットの識別をサポートします|デプロイメントに依存しない識別のため|
Cloudformationを使ってhttpdインストール

Cloudformationを触る機会があったので普通にIT Worksを出してみた。

```YML:ec2-instance
AWSTemplateFormatVersion: '2010-09-09'
Description: Create an EC2 instance with HTTP and SSH access

Resources:
  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-08ce76bae392de7dc  #
      InstanceType: t2.micro
      SecurityGroups:
        - Ref: MySecurityGroup
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          yum update -y
          yum install -y httpd
          systemctl start httpd
          systemctl enable httpd

  MySecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow SSH and HTTP traffic
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0  
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0 

```

セキュリティ的にどうよって話だけどCloudformation使ってみたかったので記事にしました。
こういう書き方がいいよとかあれば教えてください。
Googleマップ読み込み・サイズ調整の方法

# はじめに
学んだことを忘れないように備忘録として残しています



Googleマップの埋め込みサイズ調整は直接読み込む際に指定ができますが、CSSで後から調整する方法も便利なので本記事ではその方法をご紹介します。


## CSSでのサイズ調整の方法  
**1.埋め込みタグのwidthやheightを100%に設定します**

```css
.map-container iframe {
   width: 100%;
   height: 100%;
}
```

**2.親要素.map-containerのサイズをCSSで調整します**

```html
<div class="map-container">
   <iframe src="マップのURL" style="border:0;" allowfullscreen="" loading="lazy"></iframe>
</div>
```


```css
.map-container {
   width: 300px; /* 好みの幅 */
   height: 200px; /* 好みの高さ */
}
```

このようにすれば、レスポンシブ対応も行いやすくなります。

## まとめ
Googleマップの埋め込みは、CSSで親要素に合わせてサイズを調整することで、簡単にレスポンシブ対応が可能です。シンプルな方法でデザインに合わせた表示を実現してみてください。
VercelのFirewallの主要機能４選

VercelのFirewallサービスは、ウェブアプリケーションを多様な脅威から保護するための包括的なセキュリティ機能を提供しています。主な機能は以下のとおりです。

1. **DDoS攻撃の自動緩和**：全プランで分散型サービス拒否（DDoS）攻撃に対する自動的な防御機能を備えています。
   ‌
2. **カスタムファイアウォールルール**：特定のIPアドレスやIP範囲からのアクセスを制限するカスタムルールを設定できます。
   ‌
3. **Webアプリケーションファイアウォール（WAF）**：SQLインジェクションやクロスサイトスクリプティング（XSS）などの一般的な攻撃からアプリケーションを保護します。
   ‌
4. **ボット管理**：悪意のあるボットトラフィックを検出し、適切に対処します。

これらの機能により、Vercelはアプリケーションのセキュリティを強化し、信頼性の高い運用をサポートします。
【VSCode】GitHub Copilotでコードレビューする方法

## 選択箇所をレビューする

選択箇所のレビューをするにはコードを選択してコマンドプロンプトから`GitHubCopilot：レビューとコメント`を実行します。

![スクリーンショット 2024-11-13 23.50.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/66877888-c972-8fe9-11e7-47e96461796a.png)

すると以下のようにレビューのコメントがつきます。

![スクリーンショット 2024-11-13 23.29.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/e2d2230f-2984-44c2-d9a6-f265f58ba354.png)

## コミットされていない変更をレビューする

コミットされていない変更をレビューするにはソース管理の以下のボタンをクリックします。

![スクリーンショット 2024-11-13 23.06.00のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/e73f02b1-4c95-d7ae-61b2-b6232b2b15e9.png)

するとレビューが開始されます。

![スクリーンショット 2024-11-13 23.09.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/2de58042-86f9-d02a-8994-2227b09d8a89.png)


レビューが完了すると選択箇所のレビュー同様コメントが表示されます。


## 参考

https://docs.github.com/ja/copilot/using-github-copilot/code-review/using-copilot-code-review?tool=vscode
Goってなに？

### 自己紹介
グーナーと申します！
今の企業に未経験で転職して半年が経過し、段々はじめの頃よりか時間の余裕ができ始めていました
ので、成長が鈍化している気がし、心の中でメンズコーチから叱咤を受けました
🙎‍♂️＜弱いって
そこから決意を決めたグーナーはアウトプットへの道を歩き始めたのだった

# Goのなかった時代
Wikiから引用
> Googleなど、多くのIT企業ではソースコードの複雑さや肥大化が問題になっていた。他の言語がよく受ける批判を解決するとともに、それらの言語のよい特徴をできる限り損なわないようにすることを目指した。彼ら設計者たちは、新しい言語として、以下の特徴を持つものを構想していた。
>> 1\. JavaやC++のように、静的に型付けされ、巨大なシステムでもスケールする
   2\. RubyやPythonなどの動的な言語のように生産性（英語版）が高く、リーダブルであり、過度なボイラープレートが必要ない
   3\. IDEが必須ではない。ただし、十分にサポートする
   4\. ネットワークおよびマルチプロセッシングをサポートする

引用をGPTに投げてみました
今までのプログラミング言語は以下のような課題があったらしい！

### 1\. 動的型付け言語のパフォーマンスが物足りない
RubyやPythonなどの動的型付け言語は、開発速度やコードの可読性に優れていますが、実行時のパフォーマンスが低く、大規模システムや高負荷環境での利用が難しいという欠点があります
また、動的型付けに伴う型エラーが実行時まで発見されないため、バグの潜在的なリスクが高まっていました

### 2\. IDE依存とツールサポートがほしい
多くの言語では、効率的な開発を行うために高度な統合開発環境（IDE）が必要とされていました
しかし、これらのIDEは設定や学習が複雑であり、軽量なエディタとの連携が難しい場合が多かったため、開発環境の選択が開発効率に大きな影響を与えていました

### 3\. 並行処理はどの言語でもムズイ
C++やJavaではスレッドベースの並行処理が一般的ですが、スレッドの管理や同期が複雑で、デッドロックやレースコンディションといった問題が発生しやすいという課題がありました
一方、動的言語では並行処理のサポートが不十分であり、高度な並行プログラミングが困難でした

### 4\. 標準ライブラリにガタが来た。。
多くの言語では、特定の用途に特化した標準ライブラリしか提供されておらず、外部ライブラリへの依存が避けられない状況でした
これにより、プロジェクトの依存関係が増加し、ビルドやデプロイが複雑化する傾向がありました

# Goは何を提供してくれる？

### 1\. コンパイルがはやいのとコスパのいい実行
Goのコンパイラは高速に動作し、大規模なコードベースでも迅速にコンパイルを完了できます
さらに、ネイティブバイナリ[^1]を生成するため、実行時のパフォーマンスが高く、動的言語の欠点を克服しています

### 2\. Go独自の並行処理
Goは、ゴルーチンとチャネル[^2]という並行処理モデルを提供しています
ゴルーチンは軽量なスレッドとして動作し、チャネルを通じて安全にデータをやり取りできるため、並行プログラミングが容易かつ安全に行えます

### 3\. 外部依存対策の標準ライブラリ
Goは、ネットワーキング、暗号化、I/O操作など、幅広い機能を標準ライブラリとして提供しています
これにより、外部依存を最小限に抑えつつ、安定した機能を利用することが可能です

### 4\. クロスプラットフォームのサポート
Goは、主要なオペレーティングシステム（Windows、Linux、macOS）に対応しており、同一のコードベースで多様な環境下で動作するアプリケーションを容易に開発できます
また、クロスコンパイルも容易であり、異なるプラットフォーム向けのバイナリを簡単に生成できます

### 5\. 強力なツールチェーン
Goは、標準で強力なツールチェーンを提供しています
これには、フォーマッタ（gofmt）、テストツール、ベンチマークツール、ドキュメンテーションツールなどが含まれており、開発プロセスを統一し効率化することができます

[^1]:ネイティブバイナリ: Goは一つのバイナリファイルに全部まとめてくれるから、実行も速いし、依存関係を気にする必要がないんだ

[^2]:ゴルーチンは、同時に動かせる軽いスレッドのようなもの
チャネルは、ゴルーチン同士がデータをやり取りするための道具


# 最後に
まだ曖昧な知識でGoを使っているので、調べないといけないことが溜まりに溜まっている！
どんどん記事に消化できるようがんばります
ゴルーチンやジェネリクスはまだリーディングしたことしかない。。
次はそういった技術について調べます
[ChatGPT][Python]技術交流のためにワードクラウド(の第一歩)

# 着想

- 「技術交流を盛んにしよう！」という名目で開かれている会社の飲み会イベントがあります
- しかし、実際はただ世間話しながら酒飲んだり飯食ったりするだけで終わることが多い印象です
- 自分から話題を提供できるほど技術トピックに詳しいわけでもないので悩ましい
- そこで参加者に技術雑談の話題を提供するような何かがあれば良いと考えた
- 例えば、ホワイトボードに「最近ホットな技術ワードを並べたワードクラウドを掲示してみる」とかはどうだろう？
- そんな経緯で、「最近ホットな技術ワードをワードクラウド形式で出力する」をやりたくなった

# まずはワードクラウドを作る

- 技術雑談を促進する手段としてワードクラウドが適切かどうかはさておき、まずはワードクラウドを作れなければ話にならない
- 軽くググったところ、pythonにそのようなライブラリがあるらしい。とりあえずchat GPTにコードを書かせてみた


## 依存環境

`pip install wordcloud matplotlib`

## コード

```python
from wordcloud import WordCloud
import matplotlib.pyplot as plt

with open('sample.txt', 'r', encoding='utf-8') as f:
    text = f.read()

wordcloud = WordCloud(
    width=800, 
    height=400, 
    background_color='white'
).generate(text)

plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
```

- chatGPTにもらったコードそのままです
- matplotlibｱﾝﾏﾜｶﾝﾅｲですが、適当にサッと作るだけならもはや理解していなくても図の出力は可能
    - 学生時代グラフ描画するのに四苦八苦していたアレはなんだったんだ……。

## 出力結果

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726845/5c1723fd-b614-3e42-b07d-9223975fc9ee.png)

## 使ったデータ

- スティーブジョブズのスピーチを全文ぶっ込みました
    - 適当にやった割には、life Apple college dropped 辺りがデカめに出ていて、ジョブズのスピーチらしさが出てるなと思いました
    - ソースはこちら https://sakanoue-clinic.jp/diary/jobs_speech_at_Stanford_in_2005.html

## 雑感など

- 記事書く時間やトラブルシューティング等も含めてここまでで10分もかからず。ちょっとした遊びをしたい時のおもちゃとしても最適なchatGPTくんなのであった
    - 飲酒した後の酔ってる頭で、寝る前のちょっとした時間でもこの程度の記事が書けてしまうくらいにはコード生成や調べ物が爆速でできる。良い時代になった

# 今後の展開

- なお、記事冒頭で示した「技術交流のためのワードクラウドを生成」は全然達成できていない
- 今回はジョブズのスピーチ全文を適当にぶち込んだが、この部分を「最近ホットな技術ワードが含まれた文章」に置き換える必要がある
- 今後の課題は以下のような感じか
    - ホットな技術ワードをどうやって収集するか
    - 収集したデータから、どうやって「自然な」ワードクラウドを作るか
        - 弊社のエンジニアから見て、「ホットな技術ワード群だなぁ」と思わせるほどの精度を実現するにはどうすれば良いか
- 上記の課題に取り組んで「ホットな技術ワードのワードクラウド」を実現するかどうかは今後の私の気分次第です。悪しからず
    - 他にも、単語を1個だけ入れて、関連ワードを生成AIに作ってもらって、生成されたワード群からワードクラウドを作る、みたいなウェブアプリを作ってみてもいいかも
        - 「webアプリに生成AIを組み込む」の練習にはちょうど良いかも
        - ただ既存で似たような機能を提供しているものはありそうな気がする
        - 勉強のためと割り切って車輪の再発明でも良いが、何か独自要素を付け加えてオリジナル性を出してみたい感じもある

----

寝る前の酔った頭で書き上げた記事ですが、いかがでしたでしょうか。
ワードクラウドを想像以上に手軽に作れて自分としては面白かったです。ChatGPT様様。(最近全ての記事で似たようなこと言ってる気がする)

繰り返しになりますが、記事冒頭で掲げた目標は全然達成できていないので、記事タイトルに(第一歩)と付けさせていただきました。

最後の方はネタのメモ帳みたいになってしまい恐縮ですが、気がむいたらそこに書いたようなことを実践してみようかなぁと思ったり、思わなかったり。
【Tableau】地図について

### マップ機能を使う
Tableauで地図を使う場合、項目[都道府県]を地理的役割の「都道府県」に変更する。
そうすることでTableau側で経度・緯度を割り振ってくれ、[都道府県]をドラッグ＆ドロップで持っていくことで簡単に地図を表示できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3437732/ee971654-b3cb-5c6c-5c4e-56c2b015b91b.png)

### 市区町村を利用する場合
市区町村も都道府県と同様に地理的イメージから「市区町村」を選びたいところだが、
「市区町村」は点でしかサポートされておらず、「群」を利用することでエリアを塗ることができる。
すべての市区町村をサポートしているわけではないため、データはあっても表示されないことがある。
その場合は、独自でマップを用意するなど工夫が必要。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3437732/fb75e124-3173-03b6-3916-a916f104b841.png)
▽「市区町村」を割り当てた場合と「郡」を割り当てた場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3437732/701f51a2-6d35-2b26-8aba-acd2e413aceb.png)

### 地図の表現
#### １．塗りつぶし
集計値に応じて色の濃淡を分けることで、
どの地域の集計値が高いか低いか一瞬で見分けることができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3437732/f2b3c281-bd0a-733b-afba-3e977b8993ac.png)

#### 2. 形状で増減を表す
形状と色で前年比がどうだったのかを表す際に利用する
〇と×で表示したが、形状は自身でアイコンを用意すれば好きなものを利用でき、↑↓→で表すのもよいかもしれない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3437732/80555cf1-9c19-fd13-21f5-ee620fcf1e26.png)

#### 3. ヒートマップ
マークを「密度」に変更することで、表現できる。
都道府県ごとの比較だけでなく、集計値が高い地域がどこにあるのかを見ることができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3437732/8c1b6734-be17-9719-408f-e1a6dc837051.png)
Power Automateの［グループメンバーの一覧表示］で 所有者を含むメンバー / 所有者を含まないメンバーのみ を取得する  

# ［グループメンバーの一覧表示］アクションで発生した事象
［グループメンバーの一覧表示］を実行していると、以下の差異が発生する事象を確認しました。


あるチームでは、所有者を含むチーム全体メンバーを取得する。

あるチームでは、所有者を含まないメンバーのみを取得する。

# 事象の原因
差異が発生する原因は、Microsoft Entra管理センター側で［メンバー］に所有者が含まれているからです。グループメンバーの一覧を取得する際、APIはこちらの［メンバー］の値を参照して取得しています。

## 所有者を含むチーム全体メンバーの結果を返すケース 
［メンバー］には、所有者(User1,User2,User3)を含むチーム全体メンバーが追加されている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/994f4229-345f-a1aa-2713-93c0b5c00d59.png)

［所有者］には、所有者(User1,User2,User3)のみが追加されている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/173c9a66-3f5c-beff-484c-5b6b2d59e3aa.png)

## 所有者を含まないメンバーのみの結果を返すケース
［メンバー］には、所有者(User1,User2,User3)を含まないメンバーのみが追加されている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/b3446ec5-f6a9-d928-4805-ae1e31a57dd6.png)

［所有者］には、所有者(User1,User2,User3)のみが追加されている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/173c9a66-3f5c-beff-484c-5b6b2d59e3aa.png)


# 事象が発生する根本的な理由
そもそも、なぜMicrosoft Entra管理センター側でプロパティの値に差異が発生しているのか？

結論、チームを作成してメンバーを追加する際に、

**Microsoft Entra管理センター / M365管理センター側でメンバー追加をすると、［メンバー］に所有者を含まないメンバーが追加されます。**

**Teamsの画面上から直接メンバー追加をすると、［メンバー］に所有者を含むメンバーが追加されます。**
手順実行支援ツール「じみくん」の紹介

皆さん下記のような場面にあったことがありますか。
- 前提条件は複雑で一回の準備が結構時間かかる試験の途中に大事なエビデンスを取り忘れた
- 本番環境作業で慎重しすぎて、無駄に時間が使われ、限定時間内に完了できなかった
- 複数サーバー同時操作の試験の中、コマンドが正しいが間違ったサーバーに入力した

特にまだ慣れてない手順では、もっと慎重に、もっと集中すると心理的に備えても、時間が限られた場合無理は生じる。さらに長時間の作業なら精神的ストレスによりミスも発生する。「次の操作を明確に提示してくれる（紙手順書の色塗りみたいに）、スクショなどは自動化されるツールがあればよかった」っと一度考えた人が多いでしょう。ですがやはり労働と収穫が合わないからあきらめてしまうね。ですが今はAI時代、こんなツールの作成はイージーになりました。

ここで自作ツール「じみくん」を紹介させていただきます。シンプルで地味な手順実行支援ツールです。本ツールは手順ファイル（手順書から作成必要）に基づき、必要な操作を一つずつガイドし、操作エビデンスのキャプチャやログ記録を自動化することで、手順実施の正確性と効率を向上させます。
このツールはWindows用、C#で作成されてます。下記URLに公開してます：
https://github.com/choutassou/Jimikun

## 主な機能

- **手順進行ガイド**：事前に定義された手順ファイルを基づき、操作を順番にガイドしながら進行します
- **自動スクリーンショット取得**：手順ごとに対象ウィンドウのスクリーンショットを自動でキャプチャし、エビデンスを保存します
- **コマンドの自動クリップボードコピー**：コマンドのあるステップでは、コマンドがクリップボードに自動コピーされ、ユーザーはペーストするだけで簡単に操作を行えます
- **所要時間の測定とレポート生成**：
  - 各手順（大・小）の所要時間を分単位で計測
  - 全体の手順実施時間も集計し、詳細なレポートとして出力
- **進捗状況のログ出力**：進行状況とエラーがログに記録される

## 手順ファイルの作成方法
本ツールは専用フォーマットの手順ファイルが必要です。下記は、手順ファイルを作成する例です。
![instruction-sample.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69940/19faee4a-5b91-23ec-453f-347c63ed3585.jpeg)

## 使用方法

1. **手順ファイルを用意**：Shift_JISエンコーディングで作成したCSVファイルを使用します。手順ファイルの列は
 　Step大
 　Step小
 　操作
 　注意事項
 　操作Window
 　キャプチャフォルダ
 　キャプチャー１～４
と固定されてます。本ツールはヘッダー依存なので、フォーマット変更されたら動けない。
2. **手順ファイルを選択**：アプリケーション起動後、手順ファイルのパスを選択するダイアログが表示されるので、実施対象の手順ファイルを選択します。
3. **手順に沿って操作**：各手順を画面に表示し、ユーザーが「次へ」ボタンを押して進行します。各ステップのエビデンスキャプチャやログ記録は自動で行われます。
4. **レポート生成**：手順実施完了後に所要時間をまとめたレポートがテキスト形式で自動出力されます。

## 後書き
このツールは単にプロンプト、コピー、スクショのところ自動化してます。作業精度を上がるため、手順ファイルの詳細化重要ですね。例えば
- 元手順の１ステップを何ステップに分解してもっと機械的に実施できるようにする
- 必要なエビデンスをよく考えて正確に記入する
等のところに工夫する方がいいですね。

"手順書があるのに手順ファイルの作成が必要ってこと自体は不便でしょう"の疑問もありますが、正確性が高く要求されてる作業、何回も繰り返しそうで再利用価値のある手順、長くて時間かかる手順なら、絶対有益なので是非ご試してください。
Unity6プロジェクトはBuilt-inではじめよう（使おうとは言ってない）

Unity6(6000.26時点)でプロジェクトを新規作成する際、

## Built-inプロジェクトを生成する場合
### Built-in
Built-inでプロジェクトを新規作成すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/fa0fdd5b-09a7-39bd-f082-15c207936057.png)

以後もちゃんとBuilt-inを作ってくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/ca99a925-9edd-48c1-056e-cefff8a45867.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/f5ca6a85-c224-6bac-1195-1fc54539d01d.png)

SRPプロジェクトを作成したい場合は Universal RP をインストールすればSRPも作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/d483c85f-13e0-7605-73ae-05bbb9d44e06.png)

### SRP
SRP(Universal3D)で作ると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/78782fd6-866b-24bd-cfa9-12798c7d4d2a.png)

NewSceneをBuilt-inで作っても、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/bfadd893-ad3a-3561-7d2f-a14cb56765d0.png)

SRPのシーンが作られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/fe49e651-b021-3ff5-8a58-4134c846a7ce.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/0aed8554-df2f-578e-d2fb-67b9930dadda.png)

Built-in用のパッケージは見当たらない(Built-inと言っているんだからあたりまえか…。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/b639af04-ec96-62c2-1310-a9d849227a88.png)

ちなみに、いったんUniversal RPをRemoveするとBuilt-in状態になり、再度InstallするとSRPになりますが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/a3d899d2-7f19-1198-05b2-af82da1d3629.png)
その状態でもBuilt-inは機能しないようです(NewSceneをBuilt-inで作ってもSRPになる)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/fb3e188d-454a-df95-7445-dbea16a7f79f.png)



## SRP <--> Built-in
### Built-in
Built-inで始めたProjectは、SRPにした後もDefaultRenderPipelineをはがせばBuilt-inになってくれますが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/0b1f38d6-04e0-453e-e151-84db729cab5f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/7104c3ec-5b22-8b0a-d75f-207173e28144.png)

### SRP
SRPから始めたプロジェクトはDefaultRenderPipelineをはがしてもBuilt-inになってくれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/eef9591f-4999-f876-98ee-7120c5a15f28.png)

## まとめ
自分で何かを作る時はBuilt-inを使うことはあまりないけれど、AssetStoreにある素材やサンプルはまだまだBuilt-inのものも多く、とりあえずサンプルの動きが見たい場合などにマテリアルのコンバートだけでは対応できないものも多いので
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/20c80d68-3589-92cc-2819-424164b094d4.png)

DefaultRenderPipelineをはがせばBuilt-inになってくれる方がありがたいかなと。

以上です。


## 追記
どうやらProject Settings > Quality >Render Pipeline Assetに値が入っているとこちらが優先される（DefaultRenderPipelineが無効になる）ようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/1cfdb181-de8a-cb54-c001-de65a62602ff.png)
EC2専用リソースと共有リソースの違い：AWSのリソース整理ガイド

AWSには、EC2専用で利用するリソースと、他のAWSサービスにも利用できるリソースがいくつかあります。以下でそれらを整理し、どのリソースがEC2専用で、どれが他のAWSリソースにも利用できるかを説明します。

## 1. **EC2専用のリソース**

### インスタンスストレージ（Instance Store）
- **概要**: インスタンスストレージは、EC2インスタンスに直接接続されたローカルストレージです。EC2インスタンスが稼働している間にのみ存在し、インスタンス停止時にデータは失われます。
- **利用範囲**: EC2専用。インスタンスが停止するとデータが失われるため、他のAWSサービスに使い回しができません。

### EC2インスタンスメタデータサービス（IMDS）
- **概要**: EC2インスタンスメタデータサービスは、インスタンスに関する情報（インスタンスID、AMI、セキュリティグループなど）を取得するために使用されます。
- **利用範囲**: EC2専用。インスタンスメタデータは、EC2インスタンス内部からのみアクセス可能です。他のAWSサービスには直接利用できません。

### EC2キー・ペア（SSH鍵ペア）
- **概要**: EC2インスタンスにSSH接続するために必要なキーペア。インスタンスを起動する際にキーを作成し、その秘密鍵を使ってインスタンスにアクセスします。
- **利用範囲**: EC2専用。SSHアクセスのために使用され、EC2インスタンス外の他のサービスには直接関与しません。

---

## 2. **他のAWSリソースにも利用可能なリソース**

### VPC（Virtual Private Cloud）
- **概要**: VPCはAWS内で論理的に隔離されたネットワーク空間で、EC2だけでなく他のAWSサービスにも使用できます。VPC内にはEC2インスタンスを含むさまざまなリソース（RDS、Lambda、Redshiftなど）を配置できます。
- **利用範囲**: EC2専用ではなく、他のAWSサービス（Lambda、RDS、ElastiCache、Redshiftなど）にも使用できます。

### セキュリティグループ（Security Groups）
- **概要**: セキュリティグループは、EC2インスタンスへのアクセスを制御するための仮想ファイアウォールですが、VPC内の他のサービス（RDS、Elastic Load Balancersなど）にも適用できます。
- **利用範囲**: EC2専用ではなく、他のAWSリソースにも利用できます（例：RDS、ELBなど）。つまり、セキュリティグループはVPC内の複数のサービスで使い回しが可能です。

### IAMロール（IAM Roles）
- **概要**: IAMロールは、EC2インスタンスや他のAWSリソースに対してアクセス許可を付与するためのものです。例えば、EC2インスタンスにS3バケットへのアクセス権限を付与したり、Lambda関数にDynamoDBアクセス権を付与することができます。
- **利用範囲**: EC2専用ではなく、他のAWSリソース（Lambda、RDS、DynamoDB、S3など）にも利用できます。

### Elastic Load Balancer（ELB）
- **概要**: Elastic Load Balancerは、トラフィックを複数のEC2インスタンスに分散させるサービスですが、EC2以外のリソース（例えば、コンテナ（ECSやEKS）やLambda関数など）にも使用できます。
- **利用範囲**: EC2インスタンスだけでなく、他のAWSリソース（ECS、EKS、Lambdaなど）にも利用できます。

### CloudWatch
- **概要**: CloudWatchは、AWSリソースのモニタリング、ログの収集、アラート設定などを行うサービスで、EC2に限らず、ほかのAWSリソース（S3、RDS、Lambda、DynamoDBなど）の監視にも使用できます。
- **利用範囲**: EC2専用ではなく、他のAWSリソース（RDS、S3、Lambdaなど）にも利用できます。

### S3（Simple Storage Service）
- **概要**: S3はオブジェクトストレージサービスで、EC2インスタンスのストレージだけでなく、その他のサービス（Lambda、RDS、ECSなど）のデータストレージにも利用されます。
- **利用範囲**: EC2専用ではなく、他のAWSリソースにも利用できます。例えば、バックアップやアーカイブ、データの保存などに使用されます。

### RDS（Relational Database Service）
- **概要**: RDSはフルマネージド型のリレーショナルデータベースサービスで、EC2の外部にデータベースを持つことができます。EC2と同じVPC内に配置し、EC2インスタンスからアクセスすることが一般的ですが、他のAWSリソースからもアクセスできます。
- **利用範囲**: EC2専用ではなく、他のAWSリソース（Lambda、ECS、Data Pipelineなど）にも利用可能です。

### Elastic File System（EFS）
- **概要**: EFSはAWS内で共有ファイルシステムを提供するサービスで、複数のEC2インスタンスからアクセスできますが、EFSは他のAWSサービス（ECS、EKS、Lambdaなど）からも利用可能です。
- **利用範囲**: EC2専用ではなく、他のAWSリソース（Lambda、ECS、EKSなど）にも利用できます。

---

## まとめ

### EC2専用のリソース:
- **インスタンスストレージ**
- **インスタンスメタデータサービス（IMDS）**
- **EC2キーペア**

### 他のAWSリソースにも利用可能なリソース:
- **VPC**
- **セキュリティグループ**
- **IAMロール**
- **Elastic Load Balancer (ELB)**
- **CloudWatch**
- **S3**
- **RDS**
- **Elastic File System (EFS)**

つまり、EC2インスタンスに関連するリソースは多くがVPC内の他のリソースとも連携して使えるものであり、AWSのインフラ全体で共通して利用できるものも多いです。逆に、EC2専用のリソースは、インスタンスに直結したもの（例えば、インスタンスストレージやキーペアなど）です。