OmniAICreator/Qiita-1.07M huggingface dataset:
AWS Organizationsについて

## AWS Organizationsの概要
AWS Organizationsは、AWSクラウド環境を組織全体で統一的に管理するためのサービスです。組織は複数のAWSアカウントを含むグループであり、これらのアカウントを集中管理するためのツールとポリシーを提供します。これにより、企業はクラウドリソースの管理を簡素化し、セキュリティとコンプライアンスの統制を強化することができます。

### AWS Organizationsとは
AWS Organizationsは、組織内で新しいAWSアカウントを作成したり、既存のアカウントを組織に追加したりすることができるサービスです。また、アカウントのステータスや設定を監視し、必要な変更を適用することも可能です。AWS Organizationsは、セキュリティポリシーの一貫性を保ちつつ、コスト管理とリソースの分離を可能にすることで、組織全体の効率性を向上させます。

### AWS Organizationsには以下のような主要機能があります：

**アカウントの集中管理**： 一元的に複数のAWSアカウントを管理することで、運用の効率化とリソースの最適化が図れます。
**ポリシーの一元適用**：組織全体で統一されたポリシーを設定し、セキュリティやコンプライアンスの遵守を確保します。
**コストの管理と可視化**：各アカウントのコストを追跡し、予算管理を容易にします。
**アクセス制御の強化**：役割に基づくアクセス制御を適用し、重要なリソースへのアクセスを制限します。

### アカウントの作成と管理
AWS Organizationsを使用すると、組織内で新しいAWSアカウントを簡単に作成できます。新規アカウントは自動的に組織のポリシーに従うように設定され、初期設定の手間が省けます。また、既存のアカウントを組織に追加することも可能で、統一管理の一環として組織全体でのアカウント管理が行えます。

### アカウントのステータスと設定の監視
AWS Organizationsでは、各アカウントのステータスや設定をリアルタイムで監視できます。これにより、異常なアクティビティや設定の変更が迅速に検出され、必要な対応を取ることが可能です。例えば、不正なアクセスや設定の変更があった場合、アラートを設定して管理者に通知することができます。

### アカウントの管理の利点
一貫性のあるセキュリティ管理：すべてのアカウントに対して統一されたセキュリティポリシーを適用することで、セキュリティリスクを低減します。
コスト効率の向上：各アカウントの利用状況を可視化し、不要なコストを削減できます。
迅速な対応：アカウントの異常を早期に検出し、迅速な対応を行うことで、潜在的な問題を未然に防ぎます。
### ポリシーの管理
AWS Organizationsでは、組織全体で統一されたポリシーを作成し、これをすべてのアカウントに適用することができます。ポリシーは、サービスコントロールポリシー（SCP）として定義され、アカウントごとの制約を設定することが可能です。これにより、組織全体でセキュリティやアクセス制御の一貫性を保つことができます。

### サービスコントロールポリシー（SCP）
SCPは、組織内のすべてのアカウントに適用されるポリシーであり、どのAWSサービスが使用可能か、どのようなアクションが許可されるかを定義します。例えば、特定のリージョンでのサービス利用を制限したり、特定のサービスの使用を禁止することができます。

### ポリシー管理の利点
**セキュリティの向上**：統一されたセキュリティポリシーにより、組織全体のセキュリティレベルを高めることができます。
**コンプライアンスの確保**：規制要件に基づいたポリシーを適用し、コンプライアンスを確保します。
**コストの最適化**：不要なサービスの使用を制限することで、コストの削減を実現します。
## まとめ
AWS Organizationsは、複数のAWSアカウントを効果的に管理するためのサービスです。アカウントの作成・管理、ポリシーの一元管理を通じて、セキュリティの強化、コストの最適化、コンプライアンスの遵守を実現できます。これにより、組織全体のクラウド運用を効率化し、ビジネスの成長をサポートすることが可能である。
Proxmoxの管理画面にCloudFlare Tunnelでドメインを使ってアクセスをする

## Cloudflareの設定
[CloudFlare](https://www.cloudflare.com/) に**ログイン** または **新規登録** をして[ダッシュボード](https://dash.cloudflare.com/)へ

**↓ CloudFlare Dashboard の左側**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529959/af9ca0d5-da46-4eb0-4236-944f07adba23.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529959/a9fa908a-6212-cb44-d284-334e9dff7e4c.png)
## ここから作成に入ります
**Zero Trust**を開いて**Networks**の**Tunnels**を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529959/3c15b7ac-fa9e-fa38-668c-ae8ee22d2bf9.png)
Your tunels というところが開いたら**Create a tunnel**をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529959/eae278d5-3c8b-e024-83f9-7292ccb80ed5.png)
**Select your connector** というページが出てきたら**Cloudflared**を選択する。
その次に**Name your tunnel**というのが出てきたら好きな名前を設定する。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529959/2c37c2dc-94d0-deb0-e83b-dcec9549ac79.png)
このような表示が出たら
**Choose an operating system:** は ``Debian``
**Choose an architecture:** は ``64-bit``

## Proxmoxの管理画面 or SSH を用意　※VMではなく実機

下を見ると
**Install and run a connector** というものがあると思います。
下の手順通りに進んでください。


```
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb &&
```
```
dpkg -i cloudflared.deb && 
```
この下のコードはご自身で書き換えてください。※**sudo** はつけないようにしてください
```
cloudflared service install 文字列
```

上にあるコードをすべて実行したら**Connectors**というところにマシンがあると思います。
表示されたら**next**をクリック


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529959/8feb9626-a5f3-c7ec-d591-05dfea4c69bb.png)
上にある画像のように自分の好きなサブドメイン,そしてドメインを選択してください。
その下にある **Type** は ``HTTPS`` , **URL** は ``サーバーローカルIP:8006``(Proxmox管理画面ポート) を指定してください。

そして下をよく見ると **Additional application settings** という科目があります。
それを開いて **TLS** という科目を見つけてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529959/cad5f3ed-a931-6058-b039-2734579d5a57.png)
**TLS**というところが見つかったら **No TLS Verify** というところの右をクリックして**ON**にします。

そして**Save**をクリックすると``https://指定したサブドメイン.ドメイン/ (https://example.example.com)``で開けるようになると思います。

これで終わりです。
JavaScript: Improved encode URI

出力文字がやたらと多い`escape()`、`encodeURI()`、`encodeURIComponent()`とかいう組み込み関数があります。出力量を抑えるべく考案された模倣関数を本記事で紹介します。

そもそもなぜ本家3つの関数の排泄文字が多過ぎるのか? それは特定の文字を16進数化する上に、`接頭辞%`が付加されるからです。例えば`encodeURI("ぁあ")`→`%E3%81%81%E3%81%82`といった具合。
該当文字が連続する場合、`%`を省略しろと突っ込みたくなります。つまり`%E38181E38182`と言う具合にです(区切り文字も必要ですが)。更に言えば、UTF8の16進数列は長過ぎます。

## 実装編
また下らぬ前置きが短くなってしまったので、とっとと本題のprogramに話題をすり替えます。

<table>
<tr><th>%直後の文字<th>意味
<tr><td>_ 0 - 9 A - F(0-16)<td>[_0-9A-F][\w][\w]の3つの文字列でUnicode 0 ～ 65535を表現
<tr><td>G - W(17-33)<td>上記escape終了
<tr><td>X(34)<td>Tab
<tr><td>Y(35)<td>改行
<tr><td>Z(36)<td>空白
<tr><td>a,b,c(37-39)<td>上記3つのescape終了
<tr><td>d(40)<td>Unicode 0 - 62
<tr><td>e(41)<td>Unicode 63 - 125
<tr><td>f(42)<td>Unicode 126 - 188
<tr><td>g,h,i(43-45)<td>上記3つのescape終了
</table>

```js
/*
EUCe(S,b): 符号化関数
@S  :文字列
@b  :偽ならescape,2未満ならencodeURI,他はencodeURIComponent風になる
戻り値 :文字列

EUCd(S): 復号関数
@S  :文字列
戻り値 :文字列
*/
function EUCe(S,b){
	var a=62,c,i=189,j="!#$&'()*+,-./:;=?@~".split(""),A=["_"],B=String.fromCharCode,
		E={"*":1,"+":1,"-":1,".":1,"/":1,"@":1},U=[],C={"!":1,"'":1,"(":1,")":1,"*":1,"-":1,".":1,"~":1},W={" ":36,"\n":35,"  ":34};
	for(S=S.split("");a;)E[c=A[a--]=B(a+(a<10?48:a<36?55:61))]=U[c]=C[c]=1;
	for(c of j)U[c]=1;
	for(j=!1;i>126;)W[B(--i)]=42;
	for(;i>63;)W[B(--i)]=41;
	for(;i;)W[c=B(--i)]||(W[c]=40);
	for(B=!b?E:b<2?U:C,B._=1;c=S[a];j=i)S[a++]=(i=!B[c])?(i==j?"":"%")+(W[c]<37?A[W[c]+(B[S[a]]?3:0)]:W[c]<43?A[W[c]+(B[S[a]]?3:0)]+A[c.charCodeAt(0)%63]:A[(c=c.charCodeAt(0))/3969+(B[S[a]]?17:0)|0]+A[(c/63|0)%63]+A[c%63]):c;
	return S.join("")
}
function EUCd(S){
	var a=62,b=0,c,e,n,A={_:0},W={X:"  ",Y:"\n",Z:" ",a:"  ",b:"\n",c:" "},C=String.fromCharCode;
	for(S=S.split("");a;)A[C(a+(a<11?47:a<37?54:60))]=a--;
	for(;c=S[a++];){
		if(c==="%"){e=1;continue}
		if(e){
			if((n=A[c])<34)c=C(((e=n<17)?n:n-17)*3969+A[S[a++]]*63+A[S[a++]]);
			else if(n<40)e=n<37,c=W[c];
			else c=C((n-=(e=n<43)?40:43)*63+A[S[a++]])
		}S[b++]=c
	}S.length=b;
	return S.join("")
}
```

```js:使用例
var a=EUCe("aぁあa"), b=EUCd(a)
console.log(a,b)
```
実験もどき
<p class=codepen data-height="300" data-default-tab="result" data-slug-hash="WNqNqLW" data-pen-title="Improved encode URI" data-user="xezz" 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/xezz/pen/WNqNqLW">Improved encode URI</a> by xezz (<a href="https://codepen.io/xezz">@xezz</a>) on <a href="https://codepen.io">CodePen</a>.</span></p><script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

## 性能
非常に高速。特に`[\x80-\uffff]`の比率が多い程、本家より高速っぽい気がします
Pythonでdedent()を使うと文字列のインデントを取り除ける

Pythonの`textwrap.dedent()`メソッドを使うと、インデントされたテキストのインデントを除去して整形できます。

## 環境
- Python 3.10.12
- Google Colaboratory(Colab)

## Pythonでヒアドキュメントにインデントが入ってしまって困る
ヒアドキュメントで複数行に渡るテキストを書く時などは、インデントがぐちゃぐちゃになりがちです。特にPythonはインデントが重要なので、文法上問題は無くても気になります。

```python
def f1():
    # 適当なテキスト
    text = """
        これはサンプルテキストであり、実際に意味はありません。
        - あなたは優秀なアシスタントです
        - すべての質問に関西弁で答えてください
            - コテコテでお願いします
        - 3行以内で簡潔に答えてください
    """
    return text
```

LLMを使うアプリとかだと、promptを指定するために上記のようなコードを書く時はあると思います。

```python
sample_text = f1()
print(sample_text)
```

```:出力

        あなたは優秀なアシスタントです。
        - すべての質問に関西弁で答えてください
            - コテコテでお願いします
        - 3行以内で簡潔に答えてください
        - これはサンプルテキストであり、実際に意味はありません
    
```

Pythonソースコードのインデントが文字列の中に入ってしまいます。LLMだったらこれでもだいたい問題なく動くんですが、トークンも無駄ですしイケてないです。

無駄なスペースの無い文字列にしようとすると、ソースコードとしての見た目が残念な感じになります。

```python
def f2():
    # 適当なテキスト
    text = """これはサンプルテキストであり、実際に意味はありません。
- あなたは優秀なアシスタントです
- すべての質問に関西弁で答えてください
    - コテコテでお願いします
- 3行以内で簡潔に答えてください"""
    return text
```

Pythonの文法上は問題無いんですが、見た目のインデントも大切にしたいですね。

## `dedent`を使う

https://docs.python.org/ja/3.12/library/textwrap.html#textwrap.dedent

>_text_ の各行に対し、共通して現れる先頭の空白を削除します。

`textwrap.dedent`を使うと、インデントの付いた文字列をきれいにできます。

```python
from textwrap import dedent

print(dedent(sample_text))
```

```:出力

これはサンプルテキストであり、実際に意味はありません。
- あなたは優秀なアシスタントです
- すべての質問に関西弁で答えてください
    - コテコテでお願いします
- 3行以内で簡潔に答えてください

```

`strip()`も使って先頭と末尾の空白文字を除去するのが良いと思います。

```python
def clean_text(text: str) -> str:
    return dedent(text).strip()

print(clean_text(sample_text))
```

```:出力
これはサンプルテキストであり、実際に意味はありません。
- あなたは優秀なアシスタントです
- すべての質問に関西弁で答えてください
    - コテコテでお願いします
- 3行以内で簡潔に答えてください
```

これで、Pythonのソースコード上のインデントの見た目を保ったまま、文字列から不要なインデントを取り除けました。

## `dedent`を書式指定文字列と併用する

`textwrap.dedent()`とフォーマット済み文字列リテラル（f-string）と併用すると、埋め込んだ文字列も複数行にまたがるような時にうまくインデントを除去できません。

```python
def f3(input_text: str):
    return_text = f"""
        こんにちは、{input_text}さん。
        今日もよろしくお願いします。
    """
    return clean_text(return_text)

input_text = clean_text("""
    グレートブリテン及び
    北アイルランド連合王国
""")

print(f3(input_text))
```

```:出力
こんにちは、グレートブリテン及び
北アイルランド連合王国さん。
        今日もよろしくお願いします。
```

これはフォーマット済み文字列リテラルではなく`format()` を使って`dedent()`の後にフォーマットすれば解決できます。

```python
def f4(input_text: str):
    return_text = """
        こんにちは、{input_text}さん。
        今日もよろしくお願いします。
    """
    return clean_text(return_text).format(input_text=input_text)

input_text = clean_text("""
    グレートブリテン及び
    北アイルランド連合王国
""")

print(f4(input_text))
```

```:出力
こんにちは、グレートブリテン及び
北アイルランド連合王国さん。
今日もよろしくお願いします。
```

## 余談
https://docs.ruby-lang.org/ja/latest/doc/spec=2fliteral.html#here

Rubyのヒアドキュメントは、`~`を使って書くことでインデントが除去されます。


```ruby:Ruby
def f
  return <<~EOS
    これはサンプルテキストであり、実際に意味はありません。
    - あなたは優秀なアシスタントです
    - すべての質問に関西弁で答えてください
      - コテコテでお願いします
    - 3行以内で簡潔に答えてください
  EOS
end
```
Chart.jsを利用したグラフの表示

# Chart.jsとは
JavaScript でグラフ(チャート)を描画するためのライブラリです。
# Chart.jsのインストール
Chart.jsを使うためには、まずライブラリをインストールする必要があります。CDNを利用して簡単にインストールできます。
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>chart.js Example</title>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
</html>
```
# HTMLテンプレートの設定
次に、グラフを表示するためのHTMLテンプレートを設定します。<canvas>タグを使用してグラフの描画領域を指定します。
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>chart.js Example</title>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
    <h1>chart.jsを使ったグラフの例</h1>
    <canvas id="myChart" width="400" height="400"></canvas>
    <script src="app.js"></script>
</body>
</html>
```
# JavaScriptコードの追加
次に、JavaScriptファイルを作成し、グラフを初期化します。app.jsファイルに次のコードを追加します。
```javascript
document.addEventListener('DOMContentLoaded', function () {
    const ctx = document.getElementById('myChart').getContext('2d');
    const myChart = new Chart(ctx, {
        type: 'bar', // グラフの種類
        data: {
            labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'], // x軸のラベル
            datasets: [{
                label: '# of Votes',
                data: [12, 19, 3, 5, 2, 3], // グラフに表示するデータ
                backgroundColor: [
                    'rgba(255, 99, 132, 0.2)',
                    'rgba(54, 162, 235, 0.2)',
                    'rgba(255, 206, 86, 0.2)',
                    'rgba(75, 192, 192, 0.2)',
                    'rgba(153, 102, 255, 0.2)',
                    'rgba(255, 159, 64, 0.2)'
                ],
                borderColor: [
                    'rgba(255, 99, 132, 1)',
                    'rgba(54, 162, 235, 1)',
                    'rgba(255, 206, 86, 1)',
                    'rgba(75, 192, 192, 1)',
                    'rgba(153, 102, 255, 1)',
                    'rgba(255, 159, 64, 1)'
                ],
                borderWidth: 1
            }]
        },
        options: {
            scales: {
                y: {
                    beginAtZero: true
                }
            }
        }
    });
});
```
# データとオプションの設定
上記のコードでは、グラフのデータとオプションを設定しています。データセットのlabelやdata、そしてbackgroundColorやborderColorをカスタマイズすることで、グラフの見た目や内容を変更できます。

- `type`: グラフの種類（例：`bar`、`line`、`pie`など）
- `data`: グラフに表示するデータ
  - `labels`: x軸のラベル
  - `datasets`: グラフに表示するデータセットの配列
    - `label`: データセットのラベル
    - `data`: データの配列
    - `backgroundColor`: データポイントの背景色
    - `borderColor`: データポイントの枠線の色
    - `borderWidth`: データポイントの枠線の幅
- `options`: グラフのオプション設定
  - `scales`: 軸の設定
    - `y`: y軸の設定
      - `beginAtZero`: y軸の最小値を0に設定する
# 最後に
グラフが表示できたと思います！さらに詳しいカスタマイズオプションについては下の参考から公式ドキュメントを参考にしてください。
# 参考
#### 公式ドキュメント
https://www.chartjs.org/docs/latest/
#### 公式ドキュメント(日本語訳)
https://misc.0o0o.org/chartjs-doc-ja/
Loguruでログを取る②

# 前回

https://qiita.com/i-am-misaki/items/9b4dc4d570f61408795e

# rotation
sinkが str または pathlib.Path の場合、
ログを書き込むためのファイルが開く

rotation チェックは、ログを記録する前に行われる。
作成するファイルと同じ名前の既存のファイルがすでに存在する場合、ファイルの上書きを防ぐために、既存のファイルのベース名に日付が追加される
```python
logger.add("log/app.log", rotation="1 B")
```
__結果__
![スクリーンショット 2024-07-08 214316.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634951/2eda8ef6-e336-04cf-b8fd-fb6c57c1021b.png)

## rotation, retention, compression
```python
logger.add("file_2.log", rotation="12:00")
# 毎時12時にファイルが新規作成される

logger.add("file_3.log", rotation="1 week")
# ログファイルが毎週新規作成される

logger.add("file_4.log", retention="10 days")
# 10日以上経過したログを削除

logger.add("file_5.log", compression="zip")
# ログファイルがZIP形式に圧縮される
'''
ログが閉じられないとZIP圧縮されないため、
rotationまたはretentionのパラメータを記載する
'''
```

# @logger.catch
try-except文を記述しなくても、エラーを自動的に処理してログに記録する
```python
@logger.catch
def divide(a, b):
    return a / b

divide(1, 0)
```

__結果__
ターミナルに出力される
![スクリーンショット 2024-07-09 215113.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634951/0902f92e-4b9b-e480-3ce0-4a78a3fe5db5.png)


# 続く
IPアドレスとドメインの話

## 概要

インターネットの世界では、IPアドレスとドメインは重要な役割を果たしています。IPアドレスはインターネット上のデバイスを一意に識別するための数字の列です。一方、ドメインは人間が覚えやすいように設計されたウェブサイトの名前です。

IPアドレスは、インターネットのネットワーク層で使用されます。ネットワーク層は、OSI参照モデルの第3層に位置し、データのルーティングと転送を担当します。IPアドレスは、この層でデバイス間の通信経路を決定するために使用されます。IPアドレスを基にして、パケットが送信元から目的地まで効率的にルーティングされることが可能となります。

本記事では、IPアドレスとドメインの関係、および名前解決の仕組みについて詳しく説明します。

## IPアドレスとドメインの関係

### IPアドレスとは

IPアドレス（インターネットプロトコルアドレス）は、コンピュータネットワーク上でデバイスを識別するための一意の番号です。通常、IPアドレスはIPv4またはIPv6形式で表されます。IPv4アドレスは32ビットのアドレス空間を持ち、約43億個の一意のアドレスを提供しますが、インターネットの急速な普及により枯渇が懸念されています。これに対し、IPv6アドレスは128ビットのアドレス空間を持ち、ほぼ無限に近い量のアドレスを提供します。

### ドメインとは

ドメイン名は、IPアドレスに対応する人間が理解しやすい名前です。例えば、「[www.example.com](http://www.example.com/)」というドメイン名は特定のIPアドレスに対応しています。ドメイン名は、ウェブサイトにアクセスする際にユーザーが使用するもので、覚えやすいという利点があります。ドメイン名は階層構造を持ち、トップレベルドメイン（TLD）、セカンドレベルドメイン（SLD）、サブドメインの順に構成されます。例えば、「[www.example.com](http://www.example.com/)」では、「.com」がTLD、「example」がSLD、「www」がサブドメインです。

## 名前解決の仕組み

名前解決とは、ドメイン名を対応するIPアドレスに変換するプロセスのことです。このプロセスはDNS（Domain Name System）によって行われます。DNSは、巨大な分散データベースのようなもので、ドメイン名とそれに対応するIPアドレスのマッピング情報を保持しています。

名前解決の基本的な流れは次の通りです：

1. **ユーザーのリクエスト**: ユーザーがブラウザにドメイン名を入力すると、ブラウザは最初にキャッシュを確認して、対応するIPアドレスがすでに保存されているかどうかを調べます。キャッシュは、以前にアクセスしたウェブサイトの情報を一時的に保存しており、名前解決の速度を向上させるために利用されます。
2. **DNSリゾルバへの問い合わせ**: キャッシュに情報がない場合、ブラウザはDNSリゾルバ（通常はインターネットサービスプロバイダが提供するサーバー）に問い合わせを行います。DNSリゾルバはユーザーの代理として名前解決を行う役割を担います。
3. **ルートDNSサーバーへのアクセス**: DNSリゾルバはまずルートDNSサーバーに問い合わせを行います。ルートDNSサーバーはインターネット上に13個存在し、全てのドメイン名の最上位に位置します。ルートサーバーは、次に問い合わせるべきTLDサーバーの情報をDNSリゾルバに提供します。
4. **TLD DNSサーバーへの問い合わせ**: 次に、DNSリゾルバは取得した情報を基に適切なTLD DNSサーバーに問い合わせを行います。例えば、「.com」ドメインに対する問い合わせであれば、「.com」TLDサーバーにアクセスします。TLDサーバーは、次に問い合わせるべき権威DNSサーバーの情報を提供します。
5. **権威DNSサーバーへの最終問い合わせ**: 最後に、DNSリゾルバは権威DNSサーバーに問い合わせを行います。権威DNSサーバーは特定のドメイン名に対する最も信頼性の高い情報を保持しており、最終的なIPアドレスを提供します。
6. **IPアドレスの取得と接続**: DNSリゾルバは取得したIPアドレスをブラウザに返し、ブラウザはそのIPアドレスを使用して目的のウェブサイトに接続します。

この一連のプロセスは通常、数ミリ秒から数秒以内に完了し、ユーザーはほとんど遅延を感じることなくウェブサイトにアクセスすることができます。

## DNSキャッシュとTTL

DNSキャッシュは、DNSクエリ結果を一時保存する仕組みです。これにより、同じドメイン名のリクエストが再度発生した場合、迅速にIPアドレスを取得できます。キャッシュを利用すると、DNSリゾルバへの問い合わせ回数が減り、ネットワークのパフォーマンスが向上します。

TTL（Time To Live）はキャッシュデータの有効時間を指定します。TTLにより、一定期間後にキャッシュ情報が更新され、IPアドレスの変更やDNS情報の更新が反映されます。例えば、ウェブサイトのIPアドレスが変更されても、TTLが短ければ新しいIPアドレスが迅速に反映され、ユーザーが正しいサイトにアクセスできます。

DNSキャッシュはブラウザ、オペレーティングシステム、ISPのDNSリゾルバで管理されます。各レベルでキャッシュが存在することで、DNSクエリの処理が効率化されます。ただし、キャッシュ情報が古くなると誤情報のリスクがあるため、TTL設定が重要です。

ネットワークの変更などで公開サーバのIPアドレスに変更が発生する場合、このDNSキャッシュとTTLが問題で新しいIPアドレスが適用されないことがあります。

公開サーバのIPを変更する場合、事前にTTLを短く設定しておく必要があります。個人的な感覚ですが、TTL初期値の状態でIPアドレスを変更すると、完全に新しいIPアドレスへ切り替わるために1～2週間くらいの時間が必要なことがありました。

## まとめ

IPアドレスとドメインは、インターネット上でスムーズな通信を実現するために不可欠な要素です。普段IPアドレスを意識してインターネットを利用することは少ないかもしれません。

Windows上でUbuntuを起動したときなど、新たにネットワークへ接続したときにインターネットが利用できないことがあります。

こんなとき、DNSを利用した名前解決ができているかを確認すると、問題解決の一助となるのではないでしょうか。
Arc使ってないの！？厳しいって。

# Arc使ってないの！？厳しいって。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946561/28a9976c-0c29-1401-fccb-5da1e2f7151b.jpeg" alt="説明文" width="100"/>

## Arcを知ってる？

みんな、ChromeやFirefoxとか使ってると思うけど、実はそれ、もったいない。今回は、私が3ヶ月間使ってみて本当に便利だと思った「Arc」っていうブラウザについて紹介します。



### Arcとは

Arcは、新しいタイプのウェブブラウザで、シンプルで使いやすいけど、機能は満載。最初はちょっと慣れるのに時間がかかるかもしれないけど、使い始めると手放せなくなります！

## Arcの便利なところ

### まずサイドバー

Arcのサイドバーは三つの部分に分かれています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946561/00fb8bc9-261f-8a23-3ee0-8b10c94d2081.png" alt="説明文" width="300"/>

- **Favorite**(一番上): よく使うサイトをここにまとめておける。ブラウザを閉じても残ってるやつ。Googleカレンダーをここに置いておくと次の予定があと何分で始まるか教えてくれます。
![Screenshot 2024-07-09 at 21.25.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946561/a34663a0-bd00-db44-d4cd-d94e7eae528a.png)

- **Pinned**: Chromeでいうとブックマーク。Favoriteはサイドバーを圧迫するので優先度が高すぎないやつはここに入れています。
- **Today**: ここがChromeでいうタブになります。毎日自動でアーカイブされるのでChrome時代の朝見たらタブ地獄、みたいなことはもうないです。作業で増えてきたらClearボタンを押せば整頓できちゃう。

:::note info

- もうこんなタブ地獄からは解放されよう。

![Screenshot 2024-07-09 at 21.34.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946561/ce7f99b8-449e-73a9-efbb-ff33d8b4e86b.png)

:::


本当に便利だけどサイドバーも横幅を取るので邪魔と感じる時もある(ノートPCで開いてる時とか)、
そういう時はコマンド＋Sで非表示にできる。画面が広く使えていい感じ！

![Untitled.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946561/49f84bc2-1c5f-1438-7ddd-02be8f663d51.gif)



### Chromeからの移行が楽

Arcへの移行はめちゃ簡単。Chrome拡張やブックマークも一瞬で移行できる。

### シンプルにChromeの上位互換

正直言って、使わない理由が見つからないかもです。Chromeの便利なところは全部あるし、それ以上に使いやすい機能が満載。

## まとめ

Arcは、新しいタイプのウェブブラウザで、使いやすさと豊富な機能を兼ね備えています。特にサイドバー機能やタブ管理が便利で、Chromeからの移行も簡単です。シンプルに使いやすく、今後のブラウザ選びの有力候補となるでしょう。

## 参考記事

[Arc公式サイト、ダウンロードはこちら](https://arc.com)
ITパスポート e-ビジネス

・e-ビジネス
インターネット技術を活用したビジネス、またはその利用形態

・EC（Electronic Commerce 電子商取引）
個人間の取引や企業間の商取引などを、インターネットなどを利用して行うこと
CtoC（Consumer to Consumer）
BtoC（Business to Consumer）
BtoB（Business to Business）
BtoE（Business to Employee）
GtoB（Government to Business）

・バーチャルモール
インターネット上に配置された仮想商店街

・EDI
商取引のためのデータをコンピュータ間で交換すること

・eKYC
本人確認をPCやスマートフォンを利用して、オンラインで完結すること

・カードシステム
・クレジットカード
申込者に対して、信用限度額内の買い物を代金後払いで行えるようにする
・デビットカード
買物代金の支払いを銀行のキャッシュカードで行い、利用金額を預金口座から即時に引き落とす
・プリペイドカード
商品購入を前提に代金を前払いしてもらい、商品購入都度、カードから減額していく

・PCI DSS
クレジットカード会員の情報を保護するためのセキュリティ要件をまとめた基準

・金融システム
・Fintech
銀行や証券、保険などの金融分野に、AIなどの情報技術を組み合わせることで、様々なサービスを創出すること
・アカウントアグリゲーション
複数の銀行や証券会社の資産状況や出入金の履歴を、一つの画面に集約して一元管理する

・電子マネー
ICカードやスマートフォンに保存される貨幣的価値による決済手段

・暗号資産（仮想通貨）
電子データでやりとりされる財産的価値

・NFT
ブロックチェーンを基盤に、デジタルデータに唯一無二の資産価値をもたせたもの

・Webによる販売促進
・コンバージョン率
Webサイトへのアクセス件数のうち、最終的に商品やサービスなどの購入に至った件数
・リスティング広告
検索誘導型広告。ある用語を検索したときに、その用語と関連した商品の広告を同じ画面に表示させる
・ポップアップ広告
Webサイトを閲覧しているときに、自動的に新しい別のウィンドウを開いて広告を表示させる
・バナー広告
Webサイトの一部に表示された広告用の画像をクリックすると、広告が表示される
・オプトインメール広告
事前に許可を求め、承諾した受信者にだけ送信されるダイレクトメール
・アフェリエイト
成果報酬型広告。個人のWebサイトなどに企業の広告や企業サイトへのリンクを掲載し、誘導実績に応じた報酬を支払う
・SNS（Social Networking Service）
登録された利用者同士が交流できるWebサイト
・CGM（Consumer Generated Media）
消費者が発信することで、コンテンツが生成されるメディア
・CMS（Content Management System）
Webサイトの記事の作成や更新・公開が容易に管理できるシステム

・A/Bテスト
Webページのデザインの効果を判断するためのテスト

・ロングテール
売れ筋商品に絞り込んで販売するのではなく、多品種少量販売によって大きな売上や利益を得ることができるという考え方

・オムニチャネル
販売チャネルを複数もち、それらを統合してどの手段でも不便なく購入できるようにすること
・OtoO（Online to Office）
Webサイトを見た顧客を実店舗に導く

・エスクローサービス
売り手と買い手の間に入って代金のやり取りを仲介するサービス

・逆オークション
インターネット上で、一般消費者が買いたい品物とその購入条件を提示し、売り手がそれに応じる取引形態

・クラウドファンディング
Webサイトでやりたいことを公開し、賛同してくれた人から広く資金を集める仕組み

・クラウドソーシング
ネットでの公募により、主に個人に仕事を外部委託すること

・シェアリングエコノミー
保有している遊休資産の貸出しを仲介するサービス

・デジタルサイネージ
ディスプレイに映像や文字などの情報を表示する電子看板

・フリーミアム
基本的な製品やサービスを無料で提供し、さらに高度な機能やサービスは有料にすることで収益を得るビジネスモデル
【Chrome拡張機能】 ChatGPTが生成したコードをプレビューする

# はじめに

Chrome拡張機能を使用して、ChatGPTが生成したコードをプレビューできるようにします。
この機能を使うと、コードを生成してすぐにプレビューを確認できるので、効率よくプログラミングできます。

:::note info
完成イメージ
:::


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/d74fb2c9-1cbc-fde7-a0e0-36a23a7e6ce8.png)

# 手順

Chrome拡張機能を追加します。

以下のリンクから拡張ファイル (manifest.json、content.js、styles.css) をダウンロードします。（コード→Zipをダウンロードして展開）

https://github.com/ykyritsis/ChatGPT-code-preview?tab=readme-ov-file

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/52064e0e-b201-b226-c22d-1b2ec01c8162.png)

Chrome ブラウザを開き、 `chrome://extensions/`に移動します。
右上隅の「開発者モード」を有効にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/52ff047a-fdbd-4533-faf5-943580f4912b.png)

「解凍して読み込む」をクリックし、拡張ファイルが含まれているフォルダを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/10e85c9f-906b-5fa4-871f-3a64b72f713a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/784491dd-248f-f908-59f2-e63b696fd33c.png)

拡張機能が追加されます。これで準備完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/407b86fc-cf7b-163a-de1e-0b14919c1653.png)

# 使い方

ChatGPTにログインします。

「HTMLで適当なアプリを作成して」などのプロンプトを入力すると、コードが生成されると思いますので、実行してください。コードの下に`Preview Code`というボタンが表示されるのでクリックすると、プレビューが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/88f007bc-cec6-3535-f276-1c50317302b2.png)
Sequence MakerのExcelサンプル集

## はじめに
Sequence MakerはExcelから測定器を制御可能にするアドインです。Sequence MakerはExcelのセルに制御コマンドを書くだけで制御できますが、初めて使う場合はどのようにコマンドを書けば良いのかわからない場合もあると思います。そんな時に役立つのがExcelのサンプル集です。Sequence Makerのインストーラーと一緒に公開されているので、まずはそちらを参考にしてみると良いでしょう。

Sequence Makerについての詳細は以下の記事を参照ください。

https://qiita.com/sequencemaker/items/8e6a370ab0a793a06a3b

:::note warn
***お断り***
本記事の内容はSequence Maker開発元の公式見解ではなく、あくまでも個人が趣味の範囲内で執筆しているものです。記事の内容について開発元へ問い合わせることはお控えください。ご質問・要望などは各記事のコメント欄へお願いいたします。
:::

## Excelのサンプルを入手する
サンプルは以下のサイトにて入手可能です。

https://www.hioki.co.jp/jp/support/versionup/detail/?downloadid=1438

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/e7449a9f-eba1-538c-3cd8-3cf8496d5b74.png)

（https://www.hioki.co.jp/jp/support/versionup/detail/?downloadid=1438 より引用）

## サンプルの一覧
サンプル集には以下の内容が含まれています。

| 測定器 | 対応機種 | サンプルの内容 |
|:-|:-|:-|
|DMM|DT4250 Series|インターバル測定のサンプルです。<br>インターバル時間と測定回数を指定して測定を行います。|
|LCR Meter|IM3523(A),IM3533(-01),IM3536,IM3570,IM3590,IM758x|インターバル測定のサンプルです。<br>インターバル時間と測定回数を指定して測定を行います。|
|LCR Meter|IM3523(A),IM3533(-01),IM3536,IM3570,IM3590,IM758x|トリガーをかけて測定値を取得するサンプルです。<br>モニター値も取得します。|
|LCR Meter|IM3523(A),IM3533(-01),IM3536,IM3570,IM3590,IM758x|メモリーデータを取得するサンプルです。<br>メモリー機能をONにして測定した後に実行してください。|
|LCR Meter|IM3523(A),IM3533(-01),IM3536,IM3570,IM3590,IM758x|導電率や誘電率を求めるサンプルです。|
|LCR Meter|IM3523(A),IM3533(-01),IM3536,IM3570,IM3590,IM758x|測定器の画面イメージを取得するサンプルです。|
|LCR Meter|IM3523(A),IM3533(-01),IM3536,IM3570,IM3590,IM758x|スイープ測定をするサンプルです。<br>周波数掃引、電圧掃引、定電圧掃引、定電流掃引、DCバイアス掃引（DCバイアス機能モデルのみ）が可能です。<br>掃引範囲、ポイント数、ステップ設定が可能です。|
|LCR Meter|IM3523(A),IM3533(-01),IM3536,IM3570,IM3590,IM758x|自動データ出力機能で出力された測定値を受信するサンプルです。<br>実行した後、測定器に外部からトリガーを入れて測定して下さい。|
|LCR Meter|IM3523(A),IM3533(-01),IM3536,IM3570,IM3590,IM758x|Cole-Coleプロット、GBカーブ、Mott-Schottkyプロットのサンプルです。|
|LCR Meter|IM3570,IM3590,IM758x|等価回路解析の結果を取得するサンプルです。<br>等価回路解析をした後に、実行してくだい。|
|LCR Meter|IM3533(-01),IM3536,IM3570,IM3590|MLCCの容量変化率を測定するサンプルです。<br>DCバイアス掃引を行います。|

（はじめにお読みください_Readme.xlsx より引用）

Sequence Makerで動作可能なExcelファイルも含まれているので、実際に試してみることも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/b62c5c41-b700-5118-7fd4-108e5e1ef918.png)

## 詳しい使い方
詳細な使い方は「はじめにお読みください_Readme.xlsx」に書かれているので、確認してみると良いでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/a8388bec-328b-1657-4045-2c19dcb0a246.png)

## まとめ
Excelのサンプル集にはいろいろな測定方法に対応したSequence Makerのサンプルが含まれていますが、Excelファイルは自由に編集も可能なので、自分の測定環境に応じてカスタマイズするのも良いでしょう。
Azureのストレージアカウント内のファイルの確認方法

# はじめに
コマンドラインからAzureを操作できるとシェルスクリプトを作成したりいろいろ便利です。今回はAzure cliを用いてストレージアカウント内のファイルの一覧の取得方法について紹介します。

# 操作
以下コマンドでAzureにログインできます。
```
azure login
```

以下コマンドで
```
az storage blob list --account-name <account storage name> --container-name <container name> --account-key <account key> --output table 
```

この操作によりテーブル形式で指定したストレージアカウントのコンテナからファイル一覧を取得できます。
Azure Pipelines: Azure DevOps で失敗だが、App Service では成功となってるときは、env: 入れれば回避出来る？

# 背景

Azure Pipelines で デプロイした際に以下症状が発生した際の備忘録

- 以下エラーが発生
   > ERROR: failed deploying service 'backend': deploying service backend: Deployment failed because the runtime process failed. In progress instances: 0, Successful instances: 0, Failed Instances: 1
Error: Deployment for site 'app-backend-{app name}' with DeploymentId '{DeploymentId}' failed because the worker proccess failed to start within the allotted time.
Please check the runtime logs for more info: https://app-backend-aldu4ll5etr7a.scm.azurewebsites.net/api/logs/docker
Trace ID: {Trace ID}

- 16h ぐらいエラーにならず log 垂れ流し
    - 30 min で timeout 設定済

:::note warn

解決したかと思ったら、何故か再発。
yaml を元に戻しても同じなので、ネットワークなど別の原因なのかも・・ :sweat_smile: 

:::

# 現象調査

- 以下のように、deployment Id で確認したところ
    - Azure DevOps では失敗
    - App Service では成功

ということで、Azure DevOps - Azure App Service との同期が上手くいっていない？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/bbfe0c1b-5ea0-1005-4c27-7be21730f400.png)

# 回避策

色々試してみたところ、Azure CLI task で、<code>env:</code> に以下を設定しておくと問題が起きない様子（100％なのか確証が持てない）

- AZURE_SUBSCRIPTION_ID: デプロイ先の Subscription ID
- AZD_AZURE_ENV_NAME: デプロイ時の azd env name. .azure/{azd env name}

どちらも、azd .env に保存されている筈

```yaml: 回避策
- task: AzureCLI@2
  env:
    AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID)
    AZURE_ENV_NAME: $(AZD_AZURE_ENV_NAME)
```

:::note info

azd env は、以下構成。azd 実行環境で探せば見つかる。

.azure/{azd env name}/
- .env
- config.json

:::

# あとがき

env: で設定しているのは、az cli env であるので、deploy log などの取得時に利用しているのかもしれない

にしても、何故 AzureDeveloperCli task がないのか？

https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/azure-cli-v2?view=azure-pipelines
Redmineのテーブル書き換え

# はじめに
Redmineのテーブルの書き換え方について紹介します。

# 変更するテーブル
今回変更するテーブルは`journals`です。このテーブルはRedmineのチケットのコメントなどの情報が記載されています。
 
# テーブルのバックアップ方法
テーブルのバックアップ方法は以下です。テーブルを異なる名前に複製しているだけです。

```
create table journals_copy like journals;
insert into journals_copy select * from journals;
```

テーブルの複製方法
 
文字列置換：プロジェクト単位で文字列を置換
```
UPDATE journals  SET notes = REPLACE(notes,"<置換対象文字列>", "<置換後の文字列>")
```
# バックアップデータのリストア
リストア方法は以下です。単に複製したテーブルの名前を元の名称に変換するだけです。このときに、テーブル名が重複するといけないので、元のテーブルは消してください。
```
alter table journals_copy rename to journals;
```
CircleCIの公式イメージ「cimg/php:8.0」でImageMagickを使う方法

# 結論
以下を実行前に
```yml
- run: sudo apt-get install -y imagemagick libmagickwand-dev
- run: sudo pecl install -f imagick
```

# 背景
ImageMagicを使ったテストがCI上で通らない問題がありました。
その時のエラーがこちらです。
```
ImageMagick module not available with this PHP installation.
```
その時の `config.yml` は以下でした。

```yml
- run: sudo apt-get install -y imagemagick
- run: sudo apt-get install -y php-imagick
```

# なぜ動かなかったのか
## 1. `libmagickwand-dev` をインストールしていない。
` libmagickwand-dev` は、ImageMagickを他のプログラム（今回だとPHP）から利用するための開発用ライブラリ。これがないとImageMagicがPHPで使えない。

## 2. `imagick`モジュールが有効になっていない
imagickモジュールをインストールするだけではダメで、起動時に読み込むように`php.ini`を修正しないといけません。
`php-imagick`は手動でその設定をしないといけません。
```yml
- run: echo "extension=imagick.so" | sudo tee -a /etc/php/7.4/cli/php.ini
```

しかし、 `sudo pecl install -f imagick`をすれば、その読み込みの設定もよしなに書いてくれます。
C_TS452_2021 - SAP Certified Application Associate - SAP S/4HANA Sourcing and Procurement対策（3/100）

【3日目】
トピック1：企業構造とマスタデータ（3/11）

≪問題3≫
品目マスタの自動購買発注区分はどのレベルで更新しますか。
□クライアント
□購買組織
□会社コード
□プラント

≪解答≫
□クライアント
□購買組織
□会社コード
■プラント

≪解説≫
◆購買依頼を購買発注に自動変換するためには、以下の前提条件が必要です。
（1）品目マスタレコードで、自動購買発注区分が設定されていること（購買管理データ）。
（2）仕入先マスタレコードで、自動購買発注区分が設定されていること（購買組織データ）。
（3）購買依頼明細に有効な供給元が割り当てられていること。
◆品目マスタレコードの購買管理データはプラントレベルで更新されます。
AI技術革新より法整備が大事なこれだけの理由

## AIの進化と社会への影響

AIの進化は加速しており、社会に大きな影響を与えています。完全自律型AIエンジニアのDevin AIは、プロンプトからシステム設計、デバッグ、デプロイまでを短時間で行えるようになりました。このような技術の進歩により、ソフトウェア開発の効率が飛躍的に向上する可能性があります。

## 責任あるAIの重要性

AIの発展に伴い、「Responsible AI」の需要が高まっています。これには、機械学習モデルの公平性や説明可能性の研究だけでなく、開発プロセスやデータ管理など、AIの倫理面に配慮したガバナンスも含まれます。企業は近い将来、何らかの「Responsible AI」の取り組みが求められると予想されます。

## AIと国際競争力

AIは国際競争力と国家安全保障の核となる技術です。米国や中国などの主要国がAI開発に力を入れており、技術的リーダーシップの維持が重要な課題となっています。各国は、データ、AIスーパーコンピューティングのインフラ、人材育成などの分野で戦略的な投資を行っています。

## AIと労働市場の変化

AIの普及により、IT部門や専門家の役割が変化しています。将来的には、AIが業務全体の発展をサポートする中で、技術部門と業務部門の双方を理解するプロフェッショナルが求められるでしょう。テクノロジストは業務リーダーに、業務リーダーはテクノロジストになる必要があります。

## AIの社会的課題と展望

AIの発展には課題もあります。技術の進歩が人や組織の適応能力を超えてしまう可能性があるため、労働者のスキル向上や教育の改善、公平で包括的な経済成長の実現が重要ですまた、AIが人々の精神衛生やウェルビーイングを高め、地球環境にも貢献するものとなるよう、慎重な開発と利用が求められます。
typoからはじめるOSSコントリビュート

# はじめに

無事、SymPy 1.13.0 がリリースされた ([Release Notes](https://github.com/sympy/sympy/wiki/Release-Notes-for-1.13))。

私は、SymPy 1.12 の途中からコントリビュートしてきたが、大部分が1.13に含まれる修正である。1.12のリリースから1年以上も空いたため、やはり感慨深いものがある。その間に色々あった。いくつものプルリクエストを投げつけた代償にメンバーに推され、他人のコードをレビューするというのもやったりした。

ちょうどいい区切りだから、SymPyにどのようにして関わったのか、まとめてみようと思う。

# きっかけはtypoから

ある日、SymPyのコードを読んでいると、コメントに"param**a**ter"という単語を見つけた。「パラメータってそう綴るんだっけ？」と思って調べてみると"param**e**ter"が正しく、typoだった。typoを見つけたものの、指摘してみるかという思い以上に、放置してもいいのではないかという思いが沸き起こった。実行に影響するわけでもドキュメントに関係するわけでもなく、単なるコメント1行の些細なtypoだ。しかも、私の英語力は中学生にも劣るという現実が、更に報告をためらわせた。

最終的に、「無言でも修正内容を見れば分かるやろ」の精神でプルリクエストを送り付けた、人生初プルリクエスト！　それが、これ。

https://github.com/sympy/sympy/pull/24551

なるべく文章にはせず、単語で済まそうという気持ちがあふれている。SymPyのルールとして、"Release Notes"を書く必要があるのを指摘されて修正し、ほどなくしてマージされた。

# で、調子乗った

しょうもないプルリクエストであろうと、マージされたことは嬉しい。そうすると、もう一度プルリスクエストを送りたくなってくる。完全にヤク中のそれである。SymPyの粗探しが始まった。それまで、「OSSって凄い人たちが取り組んでいる、凄いコード」という先入観があったので、自分が貢献できるなんて考えていなかったのだが、あに図らんやそんなことはなかった。英語も、deeplやChatGPTを使うことでなんとかなった(幻想かもしれない)。

例えば、これ。

https://github.com/sympy/sympy/pull/24648

```python
            for q in sieve.primerange(r + 2, r + 2*D + 1):
                delta = (q - r) // 2
                f = (R.x_cord - S[d].x_cord)*(R.z_cord + S[d].z_cord) -\
                alpha + beta[delta]
```

じーっと眺めているとバグが見えてくる――`d`って何者だ？
ということで、修正すると、こんなかんじ。

```python
                f = (R.x_cord - S[delta].x_cord)*\
                    (R.z_cord + S[delta].z_cord) - alpha + beta[delta]
```

こういう小さなバグから大幅なリファクタリングまで、色々と手を入れた。リファクタリングなどユーザーに特に恩恵がなく、自己満足の域は出ない。それでも、コードはこんなに減ることがあるんだな、という例がこちら。

https://github.com/sympy/sympy/pull/24992

+19/-91 という大減量。うち、+13はdocstringの追加なので、実質は+6。1つの関数がここまで簡潔に書けるのである。レビュワーからは"beautiful edits"と言われ、満更でもなかった。

その他、今思い返してもクソみたいなプルリクエストを送り続けたわけだが、それらを逐一レビューしていただき感謝の念に堪えない。いちおう釈明をさせていただくと、幾ばくかの新機能実装もしている。

- 位数nの群の個数を計算する関数 `sympy.combinatorics.group_numbers.groups_count` ([#25947](https://github.com/sympy/sympy/pull/25947))
- [クロネッカー記号](https://en.wikipedia.org/wiki/Kronecker_symbol) `sympy.functions.combinatorial.numbers.kronecker_symbol` 
- [プロステスト](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B9%E6%95%B0) `sympy.ntheory.primetest.proth_test` [#25898](https://github.com/sympy/sympy/pull/25898)

なんと実用性のないコードたち！

# お前もマージしたくはないか？

さすがにレビューばかり受けるのでは申し訳が立たないので、自分が分かる範囲のプルリクエストにはコメントを入れるようにしていた。するとある日、"invited you to join the sympy organization" というメールが届いた。要は「お前にマージ権限あげるから、もっと励め」というお達しで、あわあわしながらメールを英語で作成して(ChatGPTさんマジ天使)メンテナとやり取りした。

マージ権限を貰ったものの、そんな難しいことはしていない。プロジェクトとしてレビューを誰かに割り当てるようなことをしていないため、自分の分かる範囲でレビューしてマージするという感じだからだ。まあ、どんなイシューやプルリクエストでも捌けるほど知識も経験もないので、さもありなん。

# さいごに

英語がへなちょこなのでこれまでハードルが高かったが、ChatGPTのおかげでなんか話せる気がする(気のせい)し、プログラムも直したいことが山ほどある。例えば、素数列挙のアルゴリズムは素朴なエラトステネスの篩だったので、それはあんまりだろうということで偶数をスキップするようにした。これで1.13.0からは、かかる時間がおよそ半分になった。一方で、素因数分解をする関数`factorint`の実装もどうにかしたいと思いつつ、どこから手を付けようかという感じで大きくは変えられていない。

どんどんコードの内容に話が流れていってしまったが、結論「当たって砕けろ」「為せば成る」ということだ。今でさえイシューやプルリクエストは玉石混淆なので、そこに石が1つや2つ増えてもなんてことはない。そういう心持ちで臨んだ方が結果的に良いこともある。

そういうわけで、
**俺たちの戦いはこれからだ！**
初めて部下ができたとき　に　助けてもらった本

# はじめに
ある日突然、昇給とともにチーム変更が変わり、部下ができました。
これまでは担当として、自分の業務中心だった世界から、部下と一緒にチームで仕事を動かしていく世界に変わることになり、さてどうしたものかと途方に暮れていました。
そんなときに、助けてくれた本をご紹介したいと思います！

# 心理的安全性に関する本
▼心理的安全性をつくる言葉５５

https://amzn.asia/d/0dV5DF6Q

心理的安全性とは何か？を知ること＋チーム内の心理的安全性を高める声かけを学ぶことができます。あいさつやありがとうの一言など、シンプルな声かけや言い換えから始めることができます。


▼恐れのない組織　「心理的安全性」が学習・イノベーション・成長をもたらす

https://amzn.asia/d/04OAnHzY

心理的安全性　という概念を提唱した方の本で、心理的安全性の本を読むと必ずと言っていいほどこの本が紹介・引用されています。

# 1on1に関する本
▼1on1ミーティング　「対話の質」が組織の強さを決める

https://amzn.asia/d/07M6QGUH

1on1発祥のヤフーで実践していた著者の書いた本です。
世の中の1on1のイメージを修正し、本来の1on1とはこういう感じだったというのを教えてくれるような本です。


▼対話型マネジャー　部下のポテンシャルを引き出す最強育成術

https://amzn.asia/d/05nvI1eZ

部下との1on1の内容を、具体的にどうすればいいか？　について、明確に教えてくれる本です。
この本があれば、怖いものなしです！

# チーム作りに関する本
▼THE TEAM 5つの法則

https://amzn.asia/d/0gTHDZPW

チームの定義とは？　それぞれの役割や目標設定は？など、チーム作りにおける法則を教えてくれます。


▼「僕たちのチーム」のつくりかた　メンバーの強みを活かしきるリーダーシップ　

https://amzn.asia/d/0fNEcGyq

チームを作っていく上で、リーダーはどうあるべきか？というのを教えてくれる本です。
「なんでもできるリーダー」像から脱却できました。

# 最後に
いかがでしたでしょうか？
最初に「みんなが不安なく仕事に取り組めるいいチーム」がいいなと思っていたところ、心理的安全性・1on1、チーム作り　と、本を読んでいき、今は一定の自信をつけることができました💡

参考になれば幸いです！
plymouth を設定する

Linux のブート時にスプラッシュアニメーションを表示する plymouth 。 Debian(gnmoe) をインストールすると playmouth は入っているけれども有効になっていないみたい。

# 環境

- Debian Testing ( Debian 13 : 2024/07/09時点 )


# 初期の設定

plymouth は以下のようにコメントアウトされています。

```
$ cat /etc/plymouth/plymouthd.conf 
# Administrator customizations go in this file
#[Daemon]
#Theme=emerald
#ShowDelay=0
```

テーマ自体は、ファイルが用意されているようです。

```
$ ls -alh /usr/share/plymouth/themes/
合計 52K
drwxr-xr-x 13 root root 4.0K  7月  9 20:03 .
drwxr-xr-x  3 root root 4.0K  7月  9 20:03 ..
lrwxrwxrwx  1 root root   40  7月 12  2023 debian-theme -> ../../desktop-base/active-theme/plymouth
drwxr-xr-x  2 root root 4.0K  7月  9 20:03 details
drwxr-xr-x  2 root root 4.0K  6月 30 14:48 emerald
drwxr-xr-x  2 root root 4.0K  6月 30 14:48 futureprototype
drwxr-xr-x  2 root root 4.0K  6月 30 14:48 homeworld
drwxr-xr-x  2 root root 4.0K  6月 30 14:48 joy
drwxr-xr-x  2 root root 4.0K  6月 30 14:48 lines
drwxr-xr-x  2 root root 4.0K  6月 30 14:48 moonlight
drwxr-xr-x  2 root root 4.0K  6月 30 14:48 softwaves
drwxr-xr-x  2 root root 4.0K  6月 30 14:48 spacefun
drwxr-xr-x  2 root root 4.0K  7月  9 20:03 text
drwxr-xr-x  2 root root 4.0K  7月  9 20:03 tribar

```

debian-theme がリンクになってますね。実体は、

```

$ ls -alh /usr/share/desktop-base/active-theme
lrwxrwxrwx 1 root root 31  6月 30 14:32 /usr/share/desktop-base/active-theme -> /etc/alternatives/desktop-theme
$ ls -alh /usr/share/desktop-base/active-theme/plymouth
lrwxrwxrwx 1 root root 31  7月 12  2023 /usr/share/desktop-base/active-theme/plymouth -> ../../plymouth/themes/emerald
$ ls -alh /etc/alternatives/desktop-theme
lrwxrwxrwx 1 root root 37  6月 30 14:32 /etc/alternatives/desktop-theme -> /usr/share/desktop-base/emerald-theme
```

いろいろ複雑なことになってますね。


# テーマを設定する

先にあった中で、いろんなエフェクトがありますが、わかりやすいものとして joy を選んでみました。
```
# plymouth-set-defaualt-theme joy
```
変更はどこに入っているのかな?

```
$ cat /etc/plymouth/plymouthd.conf 
# Administrator customizations go in this file
#[Daemon]
#Theme=emerald
#ShowDelay=0
[Daemon]
Theme=joy 
```
ここに反映しているみたいです。


更に有効にするにはいくつかの作業が必要です。
initramfs を更新しないといけないのですが、

```
# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.9.7-amd64
W: plymouth: The plugin label-pango.so is missing, the selected theme might not work as expected.
W: plymouth: You might want to install the plymouth-themes package to fix this.
```

エラーが出ました。指示通り、 plymouth-themes をインストールします。

```
# apt install plymouth-themes
```
再度 initramfs を更新します。

```

# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.9.7-amd64
```
更に起動パラメータをの設定が必要となります。
 `/etc/defaults/grub` の以下の行を変更します。
```
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
```
↓
```
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
```

grub に反映します。


```
# update-grub
```

これで起動時に以下のスプラッシュがアニメーション表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/3509b046-0093-9eb5-7d02-9850cf3bbbd7.png)
Do not sleep

# はじめに
エンジニアとして日々作業をしていると避けては通れない難問が生まれる。
そう、眠気だ。
仕事中の眠気は常に付きまとう問題である。
本記事は、実際に試した眠気防止策について展開していく

# 仕事中編
| 内容 | 効果 |
|:-:|:-:|
| <font color="Red">カフェインをとる　or 冷たい飲み物を飲む</font>  |  ⚪︎ |
| <font color="Red">姿勢を正しくする（猫勢にならない、椅子に浅い位置で座る）</font>　  | ⚪︎  |
| 深呼吸する  | ⚪︎  |
| ちょっと歩く  | △  |
| 軽いストレッチをする  | △  |
| 会議前に冷たい水で洗顔をする  | △  |
| <font color="Red">昼食後にすぐMTGの場合は、腹八分目に抑える　or 野菜中心の軽めのものとする</font>  | ⚪︎  |
| ボールペンで手を刺す  | ✖︎  |
| 指をつねる ※1. | ✖︎  |
| モンスタードリンク　or レッドブルを飲む ※2. | △  |

※1. ボールペンで手を刺したり指をつねる、いわゆる痛みに関するものはすぐに慣れるので効果はない
※2. エナドリ系はまあまあ効きますが、癖になるし常飲はしないほうが身体に優しい



# 仕事以外の時間編
| 内容 | 効果 |
|:-:|:-:|
| 夜更かししない  | △   |
| 適度な運動をする💪  | △   |
| 3食摂る(特に仕事に出かける前に朝食を摂る  | ✖︎  |
| 土日休日にいつもと違う生活リズムとしない  | △   |
| アルコールを摂りすぎない(もしくは頻繁に飲まない)  | △   |
| スマフォ見ながら寝落ちしない  | △   |

# 最後に
以下記事に記載されている最後のコメントが刺さった。

**「健康と納期（と家庭）を全て守るのが一流だ。」**

・参考
　https://qiita.com/gisystemexe/items/6fb6f1a0a042bf16e100

いや、ほんとにそうだと思う。
特に居眠りは客や上司、同じメンバである同僚からも悪い評価を受けます、しかも無条件で。

ここで10年くらい前の職場の話をします。
前職の先輩が、健康診断の各結果項目E Fは当たり前で、なんならD以上は基本無い人でした。。
この人はメッチャ飲んでよく記憶無くすし、メッチャタバコ吸うし、体重も増加の一途を辿る人で、まあまあ居眠りもする人だったねw
(でもここまで振り切る人だと謎の人望はある)
けど、結局なんやかんやあってクビになってたなー

居眠りしてたことが全ての原因では無いですが、仕事中の居眠りは良く無いよね、というお話でした。

最後に、
「一時的に仕事中に居眠りしないことを目指す」
のではなく
「長期的に見れば体調を管理すること」
こそが重要だと言えます。当たり前だけど、健康メッチャ大事。

以上
VS サブスク持ってたら、Azure 無償枠 $50/月 使い倒そう。今なら7500円?/月ですよ！

# 背景

会社で Visual Studio Subscription を持っていると、Azure 無償枠が便利なので備忘録

ちなみに、Open AI Service も使えるので、GPT-4 をデプロイして使うことも出来る。
API key で VS Code で利用することも出来るかも（未確認）

# 利点(Benefits)

おすすめとしては、

1. Microsoft 365 開発者サブスクリプション(E5)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/e81e5c6b-e6bb-88ce-676f-12762453e2bf.png)
   - Microsoft 365 E5 が試せる
       - Power Platform も試せる！
   - 管理者側機能も試せる
   
1. Azure 無償枠
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/363cda14-a77e-bcf6-3cb4-25363a894fc1.png)
   - Professional/Enterprise Subscription の場合、毎月50$ が使えるので非常に便利。
     Azure AI Studio で、OpenAI Model をDeploy すれば、GPT-4 も使える

1. Office Online
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/2e2c07aa-06da-60e4-2c57-b5b609aee270.png)


## 詳細

詳細は、実際に以下にアクセスしてみるのが近道

https://my.visualstudio.com/benefits

MS-Learn は以下

https://learn.microsoft.com/ja-jp/visualstudio/subscriptions/about-benefits

# 確認方法

- 自分のサブスクリプションがどうなっているか？は以下で確認

会社だとライセンス購入してても、アカウント割り付けしてなかったって落ちもあるので、購入が確かならば、ライセンス割り当てをするように情シなりに相談してみましょう

https://my.visualstudio.com/Subscriptions?mkt=ja-jp

# あとがき

サブスクリプション持っていると、過去の VS Version (vs 2019 とか) をダウンロード出来るのもありがたい。
ファイル名でssh-keygenをしてくれる.bat

自分用に作成した、ファイル名でssh-keygenをしてくれるbatファイルです。
コマンドを打たずに、『ファイル名変更』->『ダブルクリック』で生成できて少だけQOLが上がった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826547/b93b4b96-a0c4-25cb-3130-a9a2dad938bf.png)

# 中身
https://gist.github.com/JanMaki/d5627aa0e6347dbd49fd563318c2c078
現在使用しているemacsのversionを確認する方法

# はじめに

現在使用しているemacsのバージョンを調べる方法について投稿します。

**開発環境**
・WSL2/Ubuntu環境

# emacsのバージョンを調べる方法 
以下コマンドを実施し、emacsが持つオプション一覧を確認しました。
```
$ emacs --help
```

結果として以下の出力がされ、emacs --versionでemacsのバージョン情報が取得できることを確認しました。
```:コマンド結果
・・・(省略)・・・
--parent-id XID                 set parent window
--help                          display this help and exit
--version                       output version information and exit
・・・(省略)・・・
```
以下コマンドを実行し、emacsのバージョン情報を確認します。

```
$ emacs --version
```

```:コマンドの結果
GNU Emacs 27.1
・・・(省略)・・・
```

導入したemacsのversionは27.1であることが分かりました。

# emacsの最新バージョンに関する情報
現時点（2024/07/09）でのemacsの最新バージョンは以下とのこと。
**以下Emacs-JPのサイトより引用**
>GNU Emacsの最新安定版は 29.2(2024年1月18日リリース)です。
>masterブランチでは次のメジャーバージョンとなる 30.0系統の開発が進行しています。

https://emacs-jp.github.io/tips/versions


補足情報に掲載した手順でemacsのインストールを進めたのですが、最新版は取得できていないようです。以下サイトに、より新しいバージョンをインストールする手順が掲載されていたので、参考にしながらより新しいバージョンをインストールしたいと思います。

**参考サイト)**

https://ubuntuhandbook.org/index.php/2022/06/install-gnu-emacs-28-1-ubuntu-22-04-20-04/

https://qiita.com/clothoid/items/dcc8e83079da2fecc4e7



# 補足情報
emacsをインストールした際の手順を以下に記載します。
```
$ sudo apt update
$ sudo apt install emacs
```

# 参考文献
本記事は以下情報を参考にして執筆しました。

https://emacs-jp.github.io/tips/versions
AWSのEC2とS3を使って写真共有サービスを作成する

# AWSのEC2とS3を使って写真共有サービスを作成する

[写真を保存するS3バケットを作成する](#写真を保存するs3バケットを作成する)
[WebサーバーとなるEC2を起動する](#webサーバーとなるec2を起動する)
[S3 Bucketにアクセス可能なIAMポリシーを作成する](#s3-bucketにアクセス可能なiamポリシーを作成する)
[EC2が使用するIAMロールを作成する](#ec2が使用するiamロールを作成する)
[EC2にIAMロールを設定する](#ec2にiamロールを設定する)
[EC2のセットアップをする](#ec2のセットアップをする)

## 写真を保存するS3バケットを作成する
記載中

## WebサーバーとなるEC2を起動する
1. サービス一覧から「EC2」を選択する
1. 「インスタンス起動」を選択
1. Launch an instaceのページが開くので、「名前とタグ」に適当な名前を付ける。今回は
*PhotoShareWebServer*
1. ![スクリーンショット 2024-07-09 200642.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3834486/45021601-a997-0a12-5fdd-aaa06598816e.png)
1. OSはUbuntuを選択
1. 「Ubuntu マシンイメージAMI」と「アーキテクチャ」はデフォルトのまま
1. 「インスタンスタイプ」は*t2.micro*を今回は選択した。利用料と相談して、今後変更も検討する
1. 「キーペア」は*キーペアなしで続行（推奨されません）*
1. 「ネットワーク設定」の「ファイアウォール (セキュリティグループ)」は*セキュリティグループを作成*
セキュリティグループのルールは後々検討する
1. ストレージ設定はデフォルト
1. 「インスタンスを起動」を選択する

## S3 Bucketにアクセス可能なIAMポリシーを作成する
※特定のバケットにのみアクセス許可を与える場合に作成する。
すべてのバケットにアクセス可能にして良いのなら、*AmazonS3FullAccess*を使用すればよい。
1. サービス一覧から「IAM」を選択する
1. 左側のメニューから「ポリシー」を選択する
1. 右上の「ポリシーの作成」ボタンをクリック
1. 「ポリシーエディタ」で「JSON」を選択する
1. 　ポリシーエディタに以下をコピペする
*photopublic*が今回許可を与えたいバケット
<details><summary>ポリシーのJSON</summary>

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S3ConsoleAccess",
            "Effect": "Allow",
            "Action": [
                "s3:GetAccountPublicAccessBlock",
                "s3:GetBucketAcl",
                "s3:GetBucketLocation",
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketPublicAccessBlock",
                "s3:ListAccessPoints",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "*"
        },
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::photopublic"
            ]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::photopublic",
                "arn:aws:s3:::photopublic/*"
            ]
        }
    ]
}
```
</details>


## EC2が使用するIAMロールを作成する
1. サービス一覧から「IAM」を選択する
1. 左側のメニューから「ロール」を選択する
1. 右上の「ロールを作成」ボタンをクリック
1. 「信頼されたエンティティタイプ」は「AWSのサービス」を選択する
1. 「ユースケース」の項目で「EC2」を選択して次へ
1. 「許可ポリシー」で先ほど作成したポリシーを選択する
1. 次へを選択して、ロール名に適当な名前を付ける。今回は*EC2-PhotoPublic-Access*
1. 「ロールを作成」をクリックする

## EC2にIAMロールを設定する
1. サービス一覧から「EC2」を選択する
1. 左のメニューから「インスタンス」を選択する
1. 作成した*PhotoShareWebServer*を選択して
1. 右上の「アクション」から「セキュリティ」→「IAMロールを変更」
1. 作成したロール*EC2-PhotoPublic-Access*を選択する
1. 「IAMロールの更新」ボタンをクリックする

## EC2のセットアップをする
1. サービス一覧から「EC2」を選択する
1. 左のメニューから「インスタンス」を選択する
1. 作成した*PhotoShareWebServer*を選択して「接続」をクリックする
1. 接続タイプ「EC2 Instance Connect を使用して接続する」を選択する
1. 「ユーザー名」はデフォルトの*Ubuntu*のまま「接続」をクリックする
1. コマンド入力の画面が開く
```
$ sudo su
@ apt update -y
@ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
@ unzip awscliv2.zip
@ apt install unzip
@ unzip awscliv2.zip
@ ./aws/install 
@ exit
$ mkdir photopublicS3
$ mount-s3 photopublic photopublicS3/
```
これでphotopublics3フォルダにS3のphopublicがマウントされる
SnowflakeにおけるNullと空文字の扱い

# はじめに

最近SnowflakeでNullと空文字を扱う機会があり、少し想定と違う挙動があったので備忘録がてら記事に残しておきます。


# SnowflakeにNullと空文字を入れる

下記クエリを実行し、データベースへの格納データを見てみます。

```sql
USE ROLE ACCOUNTADMIN;
USE WAREHOUSE COMPUTE_WH;

CREATE OR REPLACE TABLE TEST.TEST.TEST (
  STR_NULL STRING,
  STR_QUOTE STRING
);

INSERT INTO TEST.TEST.TEST
SELECT
  NULL AS STR_NULL,
  '' AS STR_QUOTE;

SELECT
  *
FROM
  TEST.TEST.TEST;
```

- Null：nullと表示される
- 空文字: 何も表示されない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/a0370e98-d881-f5b2-6603-28e2a3f288ad.png)


# 詳しく見てみる

いくつかの観点で詳しく見てみましょう。


## SELECTで抽出する

同じ画面で`STR_QUOTE`をクリックすると、右側に`No value`と表示されます。ほう！？！？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/f3c7207a-70cf-dff8-69fd-ba3201b43216.png)


## カウントしてみる

続いてカウント関数を利用してみます。

```sql
SELECT
  COUNT(STR_NULL) AS STR_NULL_COUNT,
  COUNT(STR_QUOTE) AS STR_QUOTE_COUNT
FROM
  TEST.TEST.TEST;
```

Nullではないのでカウントできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/6ece4c99-cc31-7e77-f569-833b6ecb7f79.png)


## ダウンロードしてみる

出力結果をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/76c403cf-31e7-b604-df70-4ff0e5692a2a.png)

ダウンロードしたCSVをエディタで開くと、次のようになっています。

```
STR_NULL,STR_QUOTE
,

```

NullとNo valueは判別がつかなくなりました。


## STRING以外で試してみる

今度はINTEGERで試してみます。これはさすがにエラーで落ちます。`Numeric value '' is not recognized`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/c5890f45-63eb-62f7-13e8-dc82d6f04011.png)


# さいごに

今回初めて知って、！？！？となったものでしたが、あまり気付かずにハマりかねないと思い記事にしておきました。みなさんもお気をつけください。
Ollama 0.2 リリース！並列処理がデフォルトで有効に

## 過去にこんな記事を投稿してました

https://qiita.com/Tadataka_Takahashi/items/68f5e5d1bcab4abe9f47

## その後のバージョンで並列処理がデフォルトになりました

Ollama 0.2がリリースされました！このバージョンでは、並列処理がデフォルトで有効になりました。これにより、2つの主要な機能が解放されます。

https://x.com/ollama/status/1810480544976626159

## ダウンロードリンク
[Ollama 0.2をダウンロード](https://ollama.com/download)

## 新機能

### 1. パラレルリクエスト
Ollamaは、わずかな追加メモリを使用して、同時に複数のリクエストを処理できるようになりました。これにより、次のようなユースケースが可能になります。

- 複数のチャットセッションを同時に処理
- チーム向けのコード補完LLMのホスティング
- ドキュメントの異なる部分を同時に処理
- 複数のエージェントを同時に実行

### 2. 複数モデルの実行
Ollamaは、同時に異なるモデルをロードすることができます。これにより、次のようなユースケースが改善されます。

- 検索強化生成（RAG）：埋め込みモデルとテキスト生成モデルの両方を同時にメモリにロード可能
- エージェント：複数のバージョンのエージェントを同時に実行可能
- 大規模モデルと小規模モデルの併用

モデルはリクエストやGPUメモリの使用状況に基づいて自動的にロードおよびアンロードされます。

---

Ollama 0.2の新機能により、より柔軟で強力なアプリケーションが構築可能になります。是非試してみてください！
ベース名が同名のlogファイルを作成するcshファイル

## cshファイル
``` make_log.csh
#!/bin/csh

# cshファイル名を取得
set cshFileName = `basename $0`

# cshファイル名のベース名をジョブ名として取得
set jobName = `basename $0 .csh`

# ベース名がcshファイルと同logファイル名を定義
set logFileName = ${jobName}".log"

# logファイルを作成
touch ${logFileName}

# cshファイル名とジョブ名をlogファイルに書き込み
echo "cshファイル："${cshFileName} >> ${logFileName}
echo "ジョブ名："${jobName} >> ${logFileName}
```

## 実行結果
``` make_log.log
cshファイル：make_log.csh
ジョブ名：make_log
```

## 詰まった点
- コマンドの実行結果を変数に格納する処理
    - コマンド部分はシングルクォーテーション「''」ではなくグレイヴアクセント「``」で囲む
```
set cshFileName = `basename $0`
```
AWS 生成AI体験ワークショップをやってみて【詰まりポイント】

https://catalog.workshops.aws/generative-ai-use-cases-jp/ja-JP

CloudFormationを使ったやり方であれば、ぽちぽちしていれば30分ぐらいで簡単に生成AIによるchat botなどが作れるのでとてもお手軽です。


CFnを使ったやり方は簡単ではありましたが、若干詰まりポイントがあったので同様の事象で困っている人の参考になれば幸いです。

## 詰まりポイント
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045261/8c63e2c6-766d-3bac-04d5-2c50b5419933.png)
アプリケーションの構築を完了し、実際にchat botを使用してみると上記画像のようなエラーが発生してしまいました。

> 「エラーが発生しました。時間を置いて試してみてください。」

## 解決方法
アプリケーションの構築にて __オレゴン（us-west-2)ではなくバージニア北部(us-west-1)を指定__ する。

## 原因
`1. 事前準備 > 1-b. 自身のアカウントでワークショップを実施する場合 > 1-b.2. 基盤モデルの有効化`にて基盤モデルを __バージニア北部(us-east-1)__ にて有効化したかと思います。

[2-a.2. アプリケーションの作成](https://catalog.workshops.aws/generative-ai-use-cases-jp/ja-JP/deploy-application/cloudformation/create-application)では、
> AWS 主催イベントに参加している場合は、必ず ModelRegion を us-west-2 に設定してください。

とありますが、us-west-2は米国西部（オレゴン）です。

つまり、基盤モデルがバージニア北部で有効化され、オレゴンでアプリケーションが構築されてしまっているためにエラーが発生してしまっているのです。