OmniAICreator/Qiita-1.07M huggingface dataset:
学習メモ - Pandas groupby.corr()

# Python学習中の備忘録
学習教材：東京大学のデータサイエンティスト育成講座　Chapter7　総合問題4
Pandas groupby後に特定のカラムの相関行列を算出する。

# 事前準備
```python:practice.ipynb
import requests, zipfile
from io import StringIO
import io

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00312/dow_jones_index.zip'
r = requests.get(url, stream=True)
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall()

dj_data = pd.read_csv('dow_jones_index.data',sep=',')
```


# 最初に書いたコード
```python:practice.ipynb
DataFrame(dj_data.groupby('stock').corr()['close'])
```
![スクリーンショット 2024-07-11 220718.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830981/e1c069a9-596f-a730-f0b2-e363d16d8cf7.png)


# 修正したコード
```python:practice.ipynb
df = DataFrame()
for group, df_group in dj_data.groupby('stock').__iter__():
    df_tmp = df_group['close'].reset_index(drop=True)
    df[group] = df_tmp
df.corr()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830981/02c5fce1-97de-e170-e82a-af08b43aa47f.png)

:::note info
```python:practice.ipynb
df_tmp = df_group['close'].reset_index(drop=True)
```
indexを0から振り直す（元のindexは削除）
これをしないと最初のグループ（ここで言うAA)のindexしか登録されないため、同じindexに他のグループのデータがない場合NANになる。
:::
![スクリーンショット 2024-07-11 221820.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830981/42eae097-7f44-2309-be30-6a96a375b16f.png)



# ヒートマップ
```python:practice.ipynb
sns.heatmap(df.corr(), vmax=1, vmin=-1, center=0)
```
![スクリーンショット 2024-07-11 220842.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830981/31f462e2-d213-ae5f-5450-022cd91bed40.png)

# 書籍の解答
```python:practice.ipynb
#indexセット
dow_jones_index_stock_index = dj_data.set_index(['date','stock'])
#データフレームワーク再構築
dow_jones_index_stock_index_unstack = dow_jones_index_stock_index.unstack()
#close抽出
dow_close_data = dow_jones_index_stock_index_unstack['close']
corr_data = dow_close_data.corr()
corr_data
```
![スクリーンショット 2024-07-11 230649.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830981/c390d446-7c8e-c037-fbd1-7ed59351a7fb.png)

# 所感
groupbyじゃなくてindexにstockを指定して集計するやり方は思いつかなかったなー
クラウド環境での冗長性確保のベストプラクティス


## はじめに
クラウド環境でのプロダクト開発において、冗長性を確保することは非常に重要です。冗長性がなければ、システム障害が発生した際にサービスが停止し、ユーザーに多大な影響を与える可能性があります。この記事では、クラウドベンダーの様々なサービスを活用しながら、冗長性を確保するためのベストプラクティスについて解説します。

## 冗長性とは？
冗長性とは、システムの一部が故障しても全体としての機能を維持するために、同じ機能を持つ複数のコンポーネントを用意することです。これにより、単一障害点（Single Point of Failure, SPOF）を排除し、システムの可用性を高めることができます。

## クラウドベンダーのサービスを活用する
### 1. マルチリージョン展開
クラウドベンダーは複数のリージョンにデータセンターを持っています。例えば、AWSでは米国東部、欧州西部、アジア太平洋など多くのリージョンがあります。これらのリージョンを活用して、アプリケーションを複数のリージョンに展開することで、リージョン単位の障害に対する冗長性を確保できます。

### 2. オートスケーリング
オートスケーリングは、需要に応じて自動的にリソースを追加・削減する機能です。AWSのAuto ScalingやGCPのInstance Groupsを利用することで、トラフィックの急増や障害発生時に迅速に対応できます。これにより、システムの可用性を高めることができます。

### 3. データベースの冗長化
データベースも冗長性を確保する必要があります。AWSのRDSでは、マルチAZ配置を利用することで、異なるアベイラビリティゾーンにデータベースのレプリカを配置し、障害発生時に自動的にフェイルオーバーすることができます。GCPのCloud SQLやAzureのSQL Databaseでも同様の機能が提供されています。

### 4. コンテナオーケストレーション
Kubernetesなどのコンテナオーケストレーションツールを利用することで、コンテナの冗長性を確保できます。Kubernetesは、ポッドのレプリカを複数のノードに分散配置し、ノード障害時に自動的に再スケジュールする機能を持っています。これにより、アプリケーションの可用性を高めることができます。

## 実際の事例
### 事例1: Eコマースサイトの冗長性確保
あるEコマースサイトでは、AWSを利用してマルチリージョン展開を行い、オートスケーリングを設定しました。また、RDSのマルチAZ配置を利用してデータベースの冗長性を確保しました。これにより、トラフィックの急増やリージョン単位の障害にも対応できるシステムを構築しました。

### 事例2: SaaSプロダクトの冗長性確保
あるSaaSプロダクトでは、GCPのKubernetes Engineを利用してコンテナの冗長性を確保しました。さらに、Cloud SQLのレプリケーション機能を利用してデータベースの冗長性を確保しました。これにより、ノード障害やデータベース障害にも迅速に対応できるシステムを構築しました。

## まとめ
クラウド環境での冗長性確保は、システムの可用性を高めるために非常に重要です。マルチリージョン展開、オートスケーリング、データベースの冗長化、コンテナオーケストレーションなど、クラウドベンダーの様々なサービスを活用することで、冗長性を確保することができます。これらのベストプラクティスを参考にして、より信頼性の高いシステムを構築しましょう。
MPTCPで帯域を増やした場合の挙動と、帯域に余裕がある方の帯域を使い切る方法

# MPTCP #とは

+ 通常、TCP通信は**1IPと1IP同士で対向して1本のコネクション**を張る
+ MPTCPは**対向する別のIP同士がある場合**にサブフローを生成し、**2つ目の経路(帯域)も使って帯域を束ねる技術**、みたいなもの
+ **対向する経路の数だけ帯域は増える**が、単純な**追加した帯域分だけリニアに帯域が太くなるわけではない**

## 前提

### 発端

https://qiita.com/daisuke_yanase/items/011cacaf45d6d73f091f

+ 上掲記事に於いて、mptcpizeしたSoftEther VPNを走らせることによって、MPTCPにより帯域を増やした実績がある

### Now, 2 WANs Available

+ 上掲のリンク先での初期検証では楽天モバイルの5Gで検証したが、安定しなかった(主にサブ回線である楽天モバイルの5Gルーターが、デフォルトゲートウェイになるリンクローカルアドレスが**再起動の度に変わる**ため)
+ その後、~~色々あって~~ひかり電話用にVDSL回線「も」我が家に敷設し、**WANを2回線としてMPTCPのトラフィックをVultrのVMとの間に流していた(帯域が増えた)**

https://www.hsidr.work/

### 観察
+ MPTCPのトラフィック観察していたところ、「FTTH(JPNE系) 1Gbpsベストエフォート(平均して最大230Mbps)」＋「VDSL(ドコモ光/OCN) 100Mbpsベストエフォート(平均して80Mbps)」なので**計330Mbpsぐらい出てほしい**ところ、**150Mbpsぐらいしか発揮されなかった**
+ どうやら「**MPTCPの各回線の速度は一番遅い回線の最大速度(帯域)に律速**」され、「**一番遅い回線の最大速度(帯域)×回線本数**」が総帯域になるようだった

## 仮説
+ **FTTH(JPNE)の方が100Mbpsぐらい余裕があるのでは？**
+ つまり**FTTH(JPNE)側にコネクションをもう1本通せば200Mbpsぐらい発揮するのでは？？？**
+ -> **実験のお時間です！**

## 設定

### エンドポイント側
+ SoftEther VPNの仮想HUBを新しく作ります
+ 新しく作った仮想HUBに接続するユーザーアカウントを作ります
+ TAPデバイスを1つ、新たに作った仮想HUBへ割り当てます
+ Netplanで新しいTAPデバイスにIPアドレスを割り当てます
+ UFWを適切に設定します(要するに新しいTAPデバイスと対向することになるIPアドレスからの通信を受け容れる設定をする)
```shell
Sudoer@VultrFroneEnd:~$ sudo ip mptcp limits set subflows (総トンネル数+1) add_addr_accepted (総トンネル数+1)
Sudoer@VultrFroneEnd:~$ suod ip mptcp endpoint add (追加したIPアドレス) dev (追加したTAPデバイスの名前) subflow
```
+ ↑のコマンドを起動時と定期的に実行するようなスクリプトを書いておく

### ローカル側
+ SoftEther VPNの仮想HUBを新しく作ります
+ TAPデバイスを1つ、新たに作った仮想HUBへ割り当てます
+ Netplanで新しいTAPデバイスにIPアドレスを割り当てます
+ UFWを適切に設定します(要するに新しいTAPデバイスと対向することになるIPアドレスからの通信を受け容れる設定をする)
```shell
Sudoer@LocalRouter:~$ sudo ip mptcp limits set subflows (総トンネル数+1) add_addr_accepted (総トンネル数+1)
Sudoer@LocalRouter:~$ suod ip mptcp endpoint add (追加したIPアドレス) dev (追加したTAPデバイスの名前) subflow
```
+ ↑のコマンドを起動時と定期的に実行するようなスクリプトを書いておく
+ SoftEther VPNの新しく作った仮想HUBをVultrへカスケード接続します

### 確認ポイント
+ MPTCPを通す用のSoftEther VPNトンネルは**UDP高速化機能の有効/無効を全トンネルでどちらかに統一**します
+ MPTCPで通信してほしいSoftEther VPNトンネルは**UDP高速化機能を無効**にします

### 設定が完了したら
+ エンドポイントとローカルとを同時に再起動します

## 検証方法
+ 定番のiperf3を、エンドポイントとローカルの間に張られたVPN(主回線1本+従回線1本 から 主回線2本＋従回線1本に変更)の中を通っているMPTCP化されたSoftEther VPNトンネルの中で対向しているIP同士で行います

### 検証結果
```shell
sudo iperf3 -c (エンドポイント側IP) -p 5201
```
+ 90Mbps -> **120Mbps**
```shell
sudo iperf3 -c (エンドポイント側IP) -p 5201 -R
```
+ 30Mbps -> **55Mbps**
```shell
sudo iperf3 -c (エンドポイント側IP) -p 5201 -u -b 1G
```
+ 130Mbps -> **179Mbps**
```shell
sudo iperf3 -c (エンドポイント側IP) -p 5201 -u -b 1G -R
```
+ 100Mbps -> **149Mbps**

### 結論
+ VPNの本数を増やしたからと言って単純に**速度/帯域が余っている側を単純に倍で使い切れるわけではない**が、**帯域が余っている側の回線にVPNをもう1本通してMPTCPのサブフローが成立するパスを追加する**ことで、**MPTCPの帯域を増加させる効果があることが確認できた**
+ よって**速度差(帯域差)がある回線同士を束ねてMPTCPを行う時、MPTCPのパスを速度(帯域)が余っている回線に追加して適切な設定をしてやることで、MPTCPの速度(帯域)が増加する効果を見込める**
+ MPTCP化して速度(帯域)が増えたとは言っているが、MPTCPは**サブフローのコネクションが成立しないと帯域が増えない**ので、**短時間の通信で済む通信では通信速度は明確な差異を感じることが出来ない**し、速度(帯域)も低速に甘んじている
+ 逆に**長時間の通信になるに従って**MPTCPのサブフローコネクションが増加するため、長時間・大容量のトラフィックが発生した場合には**連続的に290Mbpsに到達する場面もあった(※トップスピードに到達するまで時間がかかったので、その通信の平均では200Mbps程度の速度(帯域)になった)**
+ MPTCPは初速が必要な用途には向かないかもしれないが、**連続的な通信(大容量ファイルのアップロード/ダウンロードやストリーミング)には強い可能性がある**
+ もっとMPTCPの知見が増えてほしい
【Drupal】Viewsでグループ化した要素にHTMLタグを指定

Viewsのグループ化機能って強力ですよね。
ちょっとした管理画面を作るのに便利です。

ただ、グループ化した要素に対してHTMLタグを変えることができないのがネックだなぁと思っていました。

![スクリーンショット 2024-07-11 21.58.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/e2ed729b-7ab0-5faa-e704-315dcaa36749.png)

グループ化...。
文字小さいですよね。

## 解決策
実は解決策あります。
でも、あんまいい方法とは思ってないです。
Viewsのフィールドの設定画面で「結果の書き換え」をするしかないみたい。

![スクリーンショット 2024-07-11 22.00.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/d5e30002-47c0-2118-a777-053a9234ed5f.png)

もちろん、「HTML のカスタマイズ」等のオプションは試しましたがエスケープされるようです。

### H2 にしてみました
![スクリーンショット 2024-07-11 22.08.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/69183c5e-e41c-1dcb-78df-4cbe0c35e54e.png)

ちょっと見やすくなったからいい感じ。
テーブル要素の見出し感はでていますよね。

### 話題の Gin Theme だったら...
![スクリーンショット 2024-07-11 22.12.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/cdd3da15-c7ee-3d8b-03df-d8d1e494e1e4.png)

あ、いい感じですね。
管理しやすそう。

## まとめ
ノーコードでさくっと作れちゃうのがViewsの強みですよね。
[備忘録]　IT用語について分かったことをまとめてみた ~ver.8

# はじめに
こんにちは，Umamusume22です．今回もIT用語について分かったことをまとめてアウトプットしていきます．

# 備忘録
#### デバイスドライバ[1]
- コンピュータにくっつけた部品やデバイスを動かすために必要なソフトのこと
- デバイス(マウス，キーボードなど)を動かすために必要なソフト
- OSが動作してからデバイスドライバが起動 
    - BIOSはOSが動作する前に起動

#### ファームウェア[2]
- ハードウェアを動かすためのソフトウェア(プログラム)
- デジタルカメラの中に住んでいるソフトウェアがファームウェア
- パソコンのファームウェアがBIOS

# 最後に
今回も記事の内容が短くて申し訳ありません．
引き続きIT用語について分かったことをアウトプットしていきます
読んでいただきありがとございました!

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

※noteも始めました．
https://note.com/madoka235/n/nbba2153326e1

ぜひフォローよろしくお願いします!

# 参考文献
[1] “「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典”
https://wa3.i-3-i.info/word11402.html

[2] “「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典”
https://wa3.i-3-i.info/word12773.html
【Pybulletサンプル解説】窪んだボックスの中にオブジェクトを生成【signedDistanceField.py】

Pybullet公式gitリポジトリのサンプルコードを解説するシリーズです（一覧は[こちら](https://qiita.com/akinami/items/7b433b60aeb5115ba4d7)）。

<br>

今回は、signedDistanceField.pyを解説します。（コードのリンクは[こちら](https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/examples/signedDistanceField.py)）

本コードを実行すると、

![signedDistanceField.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2030125/1645e829-c1ec-a9ec-8ea9-8af34ac227d1.gif)


# 使用している機能
本コードは、以下の機能を使用して「オブジェクトの生成」を実現しています。

## オブジェクトを生成
`loadURDF` 関数を使用することで、指定したurdfファイルのオブジェクトを生成できます。

```python
pybullet.loadURDF(urdfFile)
```
- `urdfFile`：生成するオブジェクトのurdfファイル

# コメントをつけたサンプルコード
サンプルコードにコメントをつけたものが以下になります（もともとあった不要と思われるコメント等については削除しています）

```python
import pybullet as p
import pybullet
import time
import pybullet_data

# PybulletをGUIモードで接続
p.connect(p.GUI)

# Pybulletに関するデータパスを取得
p.setAdditionalSearchPath(pybullet_data.getDataPath())

# くぼみのあるボックスのオブジェクトを生成
p.loadURDF("toys/concave_box.urdf")

# 重力を設定
p.setGravity(0, 0, -10)

# 小さな球のオブジェクトを10個生成
for i in range(10):

  # 球のオブジェクトを生成
  p.loadURDF("sphere_1cm.urdf", [i * 0.02, 0, 0.5])

# アヒルのオブジェクトを生成
p.loadURDF("duck_vhacd.urdf")

# シミュレーションを1時刻進める際に経過する時間を設定
timeStep = 1. / 240.
p.setTimeStep(timeStep)

while (1):
  # シミュレーションを1時刻分進める
  p.stepSimulation()

  # timeStep秒だけスリープ
  time.sleep(timeStep)
```
Claude 3 Haikuのファインチューニング：AI性能向上の新時代

## はじめに：Claude 3 Haikuとは？

Claude 3 Haikuは、AnthropicのAIモデルファミリーの一つで、高速で費用対効果の高いモデルとして知られています。このモデルは、日常的なタスクを迅速に処理することができ、ビジネスにおいて大きな可能性を秘めています。

### Claude 3 Haikuの特徴
- 高速処理：日常的なタスクを素早くこなします
- コスト効率：他のモデルと比べて使用コストが低いです
- 汎用性：様々なタスクに対応可能です

## ファインチューニングとは？

ファインチューニングは、AIモデルの性能を向上させるための重要な技術です。この方法を使うことで、特定のタスクや業界に特化したAIモデルを作ることができます。

### ファインチューニングの仕組み
1. 高品質なデータセットを用意する
2. そのデータを使ってモデルを追加学習させる
3. 特定のタスクに特化したカスタムモデルが完成する

### なぜファインチューニングが重要なのか？
ファインチューニングを行うことで、一般的なAIモデルを特定の業界や用途に最適化することができます。これにより、モデルの精度が向上し、より効果的にビジネスの課題を解決することができるようになります。

## Amazon Bedrockでのファインチューニング

Amazon Bedrockは、AWSが提供するサービスで、AIモデルの開発やデプロイを簡単に行うことができるプラットフォームです。今回、このAmazon Bedrock上でClaude 3 Haikuのファインチューニングが可能になりました。

### Amazon Bedrockの利点
- 使いやすいインターフェース
- セキュアな環境
- スケーラビリティの高さ

### ファインチューニングの手順
1. 高品質なプロンプトと回答のペアを準備する
2. Amazon Bedrockの管理画面またはAPIを使用してファインチューニングを実行する
3. パフォーマンスを確認し、必要に応じて調整を行う
4. 目標を達成したら、カスタムモデルをデプロイする

## ファインチューニングのメリット

Claude 3 Haikuをファインチューニングすることで、多くのメリットが得られます。以下に主なメリットをご紹介します。

### 専門タスクでの性能向上
特定の業界や分野に関する知識をモデルに学習させることで、一般的なモデルよりも高い精度で業務を遂行することができます。

例：
- 金融業界での複雑な取引分析
- 医療分野での専門的な診断支援
- 法律分野での契約書解析

### 高速・低コスト化
ファインチューニングにより、より大きなモデル（SonnetやOpus）の代わりにHaikuを使用できるケースが増えます。これにより、処理速度が向上し、コストも削減できます。

### 一貫性のある出力形式
企業独自のフォーマットや規制に準拠した出力を、一貫して生成することができます。

例：
- 標準化された報告書の作成
- 規制要件に準拠したドキュメント生成

### 使いやすいAPI
技術的な専門知識がなくても、簡単にファインチューニングを行うことができます。これにより、企業規模に関わらず、AIによるイノベーションが可能になります。

### 安全性とセキュリティ
- 訓練データは顧客のAWS環境内に保持されるため、データのプライバシーが確保されます。
- Anthropicのファインチューニング技術により、有害な出力のリスクが低く抑えられています。

## ファインチューニングの実例

### オンラインコメントのモデレーション
Anthropicが行った実験では、インターネットフォーラムでのコメントモデレーションにClaude 3 Haikuを適用しました。

結果：
- 分類精度：81.5%から99.6%に向上
- クエリあたりのトークン数：85%削減

これは、侮辱、脅迫、露骨な内容の識別などを含む複雑なタスクでの大幅な改善を示しています。

### SK Telecomの事例
韓国最大の通信事業者の一つであるSK Telecomは、カスタマーサポート業務の改善のためにClaudeのカスタムモデルを訓練しました。

成果：
- エージェントの回答に対する肯定的なフィードバック：73%増加
- 通信関連タスクの主要パフォーマンス指標：37%改善
- 顧客通話ログからの効率的なトピック、アクションアイテム、サマリーの生成
- 複雑な顧客の問題を管理可能な手順に分解

### Thomson Reutersの展望
グローバルなコンテンツ・テクノロジー企業であるThomson Reutersは、Claude 3 Haikuの使用で既に良好な結果を得ています。さらに、業界専門知識を活用したファインチューニングにより、より迅速で関連性の高いAI結果を期待しています。

期待される効果：
- より正確で高速、一貫性のあるユーザー体験
- 業界専門知識と特定の要件に基づいた最適化
- 高品質な結果をさらに高速で提供

## ファインチューニングの開始方法

Claude 3 HaikuのAmazon Bedrockでのファインチューニングは、現在プレビュー版として利用可能です。

### 利用可能な機能
- テキストベースのファインチューニング
- 最大32Kトークンまでのコンテキスト長に対応
- 将来的に画像処理機能も導入予定

### 利用開始の手順
1. AWSアカウントチームに連絡する
2. または、AWS管理コンソールでサポートチケットを提出する

### 注意点
- 現時点ではUS West（オレゴン）AWSリージョンでのみ利用可能
- 詳細情報はAWSの公式ドキュメントを参照

## まとめ：AI革命の次なるステップ

Claude 3 Haikuのファインチューニングは、企業がAIの力を最大限に活用するための重要なツールとなります。専門知識の組み込み、効率の向上、一貫性のある出力など、多くのメリットがあります。

この技術を活用することで、企業は自社の独自のニーズに合わせたAIソリューションを構築し、競争力を高めることができます。AI技術の進化とともに、ファインチューニングはますます重要になっていくでしょう。


## 参考サイト

https://www.anthropic.com/news/fine-tune-claude-3-haiku
Sendgridからのメール送信でIPアドレスを固定する

## はじめに-SendGridでメールを送れない現象が発生した
SendGridを使用してメール配信を行っていたのですが、ある日突然メールが届かないケースが何度か発生しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2991958/e0640b46-2b5e-9f0e-fc70-8a65d11c1a59.png)

SendGridを利用した際にメールが届かない理由や、メールを届けるための方法について、経験や調べた内容をまとめてみます！

## メールが届かない原因
- 今回のケースは、メール送信元のIPアドレスがSpamhaus(spamメールを送るIPアドレスのリスト)に掲載されていることが原因でした。
- この時、SendGridのフリープランを使用していましたが、フリープランでは複数のIPアドレスを複数のSendGridユーザーで共有しながら使用する形になるので、誰かがSendGridを使用してスパムメールを配信しているとこのような事象が発生する可能性があります。
    - ちなみに、IPアドレスはメール送信をするたびに再度ランダムで決まるため、再送すると普通に届きました。
- すぐさまSendGridサポートに連絡しましたが、対応には時間がかかるそうです。また、今後このような事象が発生しないことは保証されません。
  - 実際にこれ以降も、同じIPアドレスによってメールが届かないケースが何度か発生しました。


## プロプランへのアップグレード
- 中長期的な品質担保および保守性を考え、SendGridのプロプランを使用することにしました。（[構造計画研究所から利用できるSendGridのプラン一覧ページ](https://sendgrid.kke.co.jp/plan/)）
    - プロプランを使用することで、SendGridから自分専用の固定IPアドレスが割り当てられます。
    - 月10万通、月額14,000円〜です。正直、小規模なサービスだと持て余してしまいます。
    - アップグレードしたら即日利用できます。

- 私が利用した際は、アップグレードして割り当てられたIPアドレスが汚れていて元々スパムリストに載っており、一部ドメインから弾かれる状態になっていました💦
    - こちらはサポートに連絡したら即座に別のIPアドレスを割り当ててもらえましたが、上記のようなことも発生し得ることは気に留めておいてもいいかもしれません！
    


## SendGridを用いてメールが適切に届く状態を維持する
- 上記のような出来事もあり、改めてSendGridを用いて適切にメールが届く状況を維持するにはどうすればいいかを整理しました。

## SPF, DKIM, DMARCについて
- メールの認証システムとして、一般的にSPF, DKIM, DMARCの3つがあります。
    - いずれもメール送信のなりすましを防ぐ役割です。
:::note
**SPF**：メール送信者のIPアドレスとドメインを元に、DNSとの照合を行い、認証を行う
**DKIM**：メールに電子署名を付与し、認証を行う
**DMARC**：SPFまたはDKIMでの認証が失敗した場合どのように取り扱うかを決めることができる
:::
SPF(DKIM)でメールを送信している人がなりますしでないかどうかの認証を行い、DMARCを用いて認証されていないメールを迷惑メールとして区分するなどの対応を行うことができます。

## SendGridを使用する上で準備しなければならないこと
以下の二つが必要です。

### ①Domain Authenticationの設定
- そもそもアップデートによってDomain Authenticationを登録しないとSendGridを利用できなくなりました。
    - [Domain Authentication](https://sendgrid.kke.co.jp/docs/User_Manual_JP/Settings/Sender_authentication/How_to_set_up_domain_authentication.html)に登録すると、SendGrid側でSPF/DKIMの利用をしてくれます。

### ②DMARCの設定
- 使用するドメインに[DMARCレコード](https://sendgrid.kke.co.jp/blog/?p=3137)を追加します。
    - 利用しているドメインサービスによって操作は異なりますが、割とあっさりできました。

## Gmailの新ガイドラインでやらなければいけないこと
- 2024年2月からGmailにおける、[メール送信者のガイドライン](https://support.google.com/a/answer/81126?hl=ja)が実施されており、Gmailドメインにメールを届けるにはこのルールを守ることが必須になります。
- 基本的にはSPF, DKIM, DMARCに対応していればOKです！従ってSendGridを利用する場合は上記の対応を行えばOKです。
    - ただし、1 日に 5,000 件を超えるマーケティング目的のメールや配信登録されたメールを送信する場合は、ワンクリックで登録解除できるようにする必要があります。
    - こちらもSendGridで簡単に対応可能です！（[対応方法についてのガイド](https://sendgrid.kke.co.jp/blog/?p=17213)）

## おわりに

SendGridを用いて良きメール配信環境を！
【Pybulletサンプル解説】スケールを変えてボールを生成【soccerball.py】

Pybullet公式gitリポジトリのサンプルコードを解説するシリーズです（一覧は[こちら](https://qiita.com/akinami/items/7b433b60aeb5115ba4d7)）。

<br>

今回は、soccerball.pyを解説します。（コードのリンクは[こちら](https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/examples/soccerball.py)）

本コードを実行すると、スケールの異なる9個のサッカーボールが生成されます。

![soccerball.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2030125/74d31fcb-9c70-aa81-a050-f6dd0e4de9cb.gif)


# 使用している機能
本コードは、以下の機能を使用して「オブジェクトの生成」を実現しています。

## オブジェクトの生成
`loadURDF` 関数を使用することで、指定したurdfファイルのオブジェクトを生成できます。

```python
objectId = pybullet.loadURDF(urdfFile, position, globalScaling)
```
- `objectId`：オブジェクトのID
- `urdfFile`：オブジェクトのurdfファイル
- `position`：オブジェクトを生成する位置
- `globalScaling`：オブジェクトのスケール

<br>

今回は、スケールを変えながら9個のボールのオブジェクトを生成しています。

# コメントをつけたサンプルコード
サンプルコードにコメントをつけたものが以下になります（もともとあった不要と思われるコメント等については削除しています）

```python
import pybullet as p
import pybullet_data as pd
import time

# PybulletをGUIモードで接続
p.connect(p.GUI)

# Pybulletに関するデータパスを取得
p.setAdditionalSearchPath(pd.getDataPath())

offset = 0

# スケールを変えながらオブジェクトを生成
for scale in range (1,10,1):

  # ボールのオブジェクトを生成
  ball = p.loadURDF("soccerball.urdf",[offset,0,1], globalScaling=scale*0.1)
  
  # 動力学特性を変更
  p.changeDynamics(ball,-1,linearDamping=0, angularDamping=0, rollingFriction=0.001, spinningFriction=0.001)
  
  # ボールのビジュアルを設定
  p.changeVisualShape(ball,-1,rgbaColor=[0.8,0.8,0.8,1])

  # オフセットを移動させる
  offset += 2*scale*0.1

# 床のオブジェクトを生成
p.loadURDF("plane.urdf")

# 重力を設定
p.setGravity(0,0,-10)

# リアルタイムシミュレーションモードに設定
p.setRealTimeSimulation(1)

# Pybulletに接続されている間ループを繰り返す
while p.isConnected():
  
  time.sleep(0.5)
```
リーダーが強くなるとき＝窮地を脱した時

## はじめに
すこぶる自論ですが、タイトルの通り
「リーダーが強くなるときというのは窮地を脱した時」
だと思っています。
その考えに至った理由と、それを踏まえた動き方について書き連ねます

## リーダーを任される時とは
あなたが初めて開発のリーダーでもプロジェクトのリーダーでも構いません。
リーダーに選出されたとき、どのような理由で選ばれたか聞いたことはありますか？

「チームメンバーの中で一番優秀だったから」
「リーダー像が思い浮かんだから」
「向いていそうだった」

色々なファクターがあると思うのですが、
初めてそれを任せる時の考えとして、
この人なら困難を打破できそう、という期待と
この人にもっと成長してほしい、という思惑が
あるのかな〜と最近感じています。

そういった感情が生まれる時って
直近にその人が良い成績を納めてたりすることが多い気がしています

## 成功からの絶望を知る
直近のプロジェクトでうまくいってリーダーにも抜擢
頑張らなきゃという気持ちで精一杯動くのですが
必ずといっていいほど順風満帆ではありません。

チームメンバーの管理やプロジェクトの進捗、ユーザーとのコミュニケーションなど
今まで必要とされていなかった力が必要になり
うまくいかないことも多々
多くの失敗を経験することになります

## 全てがマッチポンプ
それらは上司が仕組んだ窮地なんだと最近気づきました
苦しい現場でのファシリテートで結局上司がたくさん主導権を取ってフォローしてくれて
自分は空っぽのリーダーになったしまった... みたいなことありませんか。

それは、うまくいかないくて反省して改善して次に臨むというルードを歩いているだけです
それが一番成長する上で簡単な手段だと思っているからです

## タイパ時代
最近の若い世代は「失敗したくない」という気持ちが大きい社員が多いです。
あえて失敗させて正解を学ぶ必要はあるのか
初めから正解を教えてくれた方が効率的
みたいな考えがありますが
それに逆行してあえて、失敗から強くなろうよ！
と大きな声で言いたい。

もちろん成長のための準備をしっかりした上で失敗しよう
失敗してもそれは時間の無駄ではない、やってきた準備は嘘を言わない
失敗したら全てが終わりではない
それを身をもって理解するために、小さい事から失敗を積み重ねること
それがリーダーを強くするのではと思っています

## さいごに
自分は最近リーダーに抜擢され、たくさん失敗をしています。
そんな自分の擁護のためにこの記事を書いているのかもしれません。

それでも、失敗をして学んで、もう一度チャレンジするという過程は
自分の社会人人生の中でも大きな成長の機会になったと実感しています。

学生時代は「私失敗しないので」と思っていたので、
タイパの気持ちも重々わかっているつもりです。
絶望されたくない気持ちが勝っていましたが、
等身大の自分を見てもらっている今素直な気持ちで上長をコミュニケーションが取れています。

この記事を見て「いや〜やっぱり失敗しないように努めたい」と思う方もいると思います
私はそれでいいと思います、
一生失敗しないで居続けることができるなら。
環境分離の重要性と実践方法：開発、ステージング、本番のベストプラクティス


# 環境分離の重要性と実践方法：開発、ステージング、本番のベストプラクティス

こんにちは、皆さん！今日はソフトウェア開発における環境分離の重要性とその実践方法についてお話ししたいと思います。特に、開発、ステージング、本番の3つの環境に焦点を当てて解説します。

## 環境分離とは？

環境分離とは、ソフトウェア開発の各フェーズ（開発、テスト、本番）で異なる環境を用意することです。これにより、各フェーズでの作業が他のフェーズに影響を与えないようにします。

### なぜ環境分離が重要なのか？

1. **安定性の確保**: 本番環境に影響を与えずに新機能の開発やテストが行えます。
2. **バグの早期発見**: ステージング環境で本番に近い条件でテストすることで、バグを早期に発見できます。
3. **効率的なデプロイ**: 各環境でのデプロイ手順を確立することで、リリース作業がスムーズになります。

## 各環境の役割

### 開発環境

開発環境は、開発者が新機能の実装やバグ修正を行う場所です。この環境は頻繁に変更されるため、安定性よりも柔軟性が重視されます。

### ステージング環境

ステージング環境は、本番環境にできるだけ近い設定で構築されます。ここでのテストにより、本番環境での問題発生を未然に防ぎます。

### 本番環境

本番環境は、実際にユーザーが利用する環境です。最も安定性が求められるため、変更は慎重に行われます。

## 環境分離の実践方法

### クラウドサービスの活用

最近では、AWS、GCP、Azureなどのクラウドサービスを利用することで、簡単に環境分離が実現できます。例えば、AWSでは以下のようなサービスが役立ちます。

- **AWS CloudFormation**: インフラのコード化により、環境の再現性を確保。
- **AWS CodePipeline**: CI/CDパイプラインを構築し、各環境へのデプロイを自動化。
- **AWS RDS**: データベースの環境分離を容易に。

### コンテナ技術の利用

DockerやKubernetesを利用することで、環境の一貫性を保ちながら、各フェーズでの作業を効率化できます。

### 環境ごとの設定管理

環境ごとに異なる設定を管理するために、設定ファイルや環境変数を利用します。これにより、同じコードベースで異なる環境に対応できます。

## まとめ

環境分離は、ソフトウェア開発の品質と効率を向上させるために非常に重要です。クラウドサービスやコンテナ技術を活用することで、簡単に環境分離を実現できます。皆さんもぜひ、これらのベストプラクティスを取り入れて、より良い開発環境を構築してください！

それでは、次回の記事でお会いしましょう！
MinecraftのサーバをProxyサーバを経由させて外部に公開させる

# まずはマイクラサーバ構築
これについては色々なサイトで書かれているので省略
少なくとも外部からのアクセスはできるような状態になっていることを確認

# 別のVPS等でNginxとStream moduleを構築
今回はRocky Linux9で構築
### Nginx環境をインストール
他のサイトだと1からビルドしろとか書いてあるがそんなことしなくても最新版だとyumとかapt-getでインストールしてもできるらしい
```
dnf -y install nginx
dnf -y install nginx-mod-stream
```
### nginx.confを編集
#### インストールしたモジュールがincludeされていることを確認
RockyLinuxなら以下記載があればOK
```
include /usr/share/nginx/modules/*.conf;
```
#### 最終行に以下を記載
これがプロキシサーバーの設定になる
あとはお好みでhttpの記載をコメントアウト
```
stream {
    log_format main '$remote_addr [$time_local] $protocol $status $bytes_sent $bytes_received $session_time';
    access_log /var/log/nginx/stream_access.log main;
    error_log /var/log/nginx/stream_error.log;

    upstream minecraft_backend {
        server XXX.XXX.XXX.XXX:XXXXX; # マイクラサーバIPとリッスンポート
    }

    server {
        listen 25565;  # NGINXがリッスンするポート番号
        proxy_pass minecraft_backend;  # バックエンドサーバーにプロキシ
        proxy_timeout 600s;  # 全体のタイムアウト設定
        tcp_nodelay on;  # TCP_NODELAYを有効にする
    }
}
```

### Nginxを起動
```
# systemctl enable nginx
# systemctl start nginx
```
ポートがリッスンされていることを確認
```
# ss -atn
State              Recv-Q             Send-Q                             Local Address:Port                            Peer Address:Port              Process                                             
LISTEN             0                  511                                      0.0.0.0:25565                                0.0.0.0:*                                        
```

### ファイアウォールの設定をして外部からのアクセスを受け入れる
```
# firewall-cmd --add-port=25565/tcp --zone=public --permanent
```

以上
表

```tsx
import React from 'react';
import { Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, Button, Box } from '@mui/material';
import CommentIcon from '@mui/icons-material/Comment';

const SampleTable: React.FC = () => {
  // 表のデータ
  const rows = [
    { col1: 'Data 1-1', col2: 'Data 1-2', col3: 'Data 1-3'},
    { col1: 'Data 2-1', col2: 'Data 2-2', col3: 'Data 2-3'},
    { col1: 'Data 3-1', col2: 'Data 3-2', col3: 'Data 3-3'},
  ];

  return (
    <TableContainer component={Paper}>
      <Table>
        <TableHead>
          <TableRow>
            <TableCell>Column 1</TableCell>
            <TableCell>Column 2</TableCell>
            <TableCell>Column 3</TableCell>
            <TableCell>Column 4</TableCell>
          </TableRow>
        </TableHead>
        <TableBody>
          {rows.map((row, index) => (
            <TableRow key={index}>
              <TableCell>{row.col1}</TableCell>
              <TableCell>{row.col2}</TableCell>
              <TableCell>{row.col3}</TableCell>
              <TableCell>
                <Box sx={{ display: 'flex', flexDirection: 'row', justifyContent: 'center', alignItems: 'center', height: '100%' }}>
                  <CommentIcon sx={{ m: 1 }} />
                  <Button variant="contained" color="primary" sx={{ m: 1 }}>ボタン</Button>
                  <Button variant="contained" color="primary" sx={{ m: 1 }}>ボタン</Button>
                </Box>
              </TableCell>
            </TableRow>
          ))}
        </TableBody>
      </Table>
    </TableContainer>
  );
};

export default SampleTable;

```
ラズパイ5にDockerインストール

[ラズパイ5](https://qiita.com/lovepi5/items/f6812951c17a6ac32c81)でdocker環境構築

# dockerインストール
https://matsuand.github.io/docs.docker.jp.onthefly/engine/install/debian/#install-using-the-convenience-script
```
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
```
そのままだと
```
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.46/containers/json": dial unix /var/run/docker.sock: connect: permission denied
```
なので、/var/run/docker.sockの所有権をdockerユーザーに渡す
```
$ sudo usermod -aG docker pi
$ sudo chown pi:docker /var/run/docker.sock
```

# docker-composeインストール
```
$ sudo apt install -y docker-compose
```
URL文字列をURLへ②

# 前回
https://qiita.com/i-am-misaki/items/c4927e8f5fbccf482fe0

# URL文字列 → URL
```python
from urllib.parse import urlparse

url_list = [csvから取得してきたURLリスト]

url_list_parsed = []

for url in url_list:
    o = urlparse(url)
    url_list_requested.append(o.geturl())

```

こちらもslackに投稿の際、理想の形で投稿できました:sparkles:


# 参考サイト

https://docs.python.org/ja/3/library/urllib.parse.html
【Tips】package.jsonのscriptsの内容を一覧化するコマンドを作る

## はじめに
表題通り、package.jsonの中のscriptsに記載された内容を表示するコマンドを作ります。
意外と毎回確認するのは大変なので、便利コマンドを作っておくと楽できます！！

## ソースコード
```js:scripts/list-scripts.js
import { promises as fs } from "node:fs";
import path from "node:path";
import chalk from "chalk";

// package.jsonのパスを取得
const packageJsonPath = path.join(process.cwd(), "package.json");

// package.jsonを読み込み
fs.readFile(packageJsonPath, "utf8")
	.then((data) => {
		const packageJson = JSON.parse(data);
		const scripts = packageJson.scripts;

		if (scripts) {
			console.log(chalk.green("Scripts available in package.json:"));
			for (const [script, command] of Object.entries(scripts)) {
				console.log(chalk.blue(`- ${script}:`), chalk.yellow(command));
			}
		} else {
			console.log(chalk.red("No scripts found in package.json."));
		}
	})
	.catch((err) => {
		console.error(chalk.red("Error reading or parsing package.json:"), err);
		process.exit(1);
	});
```


```shell
~/develop/pokemon_react_ddd (feat/pokemon_ddd_step5)$ yarn command-list

yarn run v1.22.19
$ node scripts/list-scripts.js
Scripts available in package.json:
- dev: vite
- build: tsc -b && vite build
- lint: eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0
- preview: vite preview
- test: jest
- command-list: node scripts/list-scripts.js
✨  Done in 0.51s.
```

以下のようにコマンドの内容に色がつきます。
![スクリーンショット 2024-07-11 21.26.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/bbc5c823-db1c-9a77-0437-0cea3488c669.png)
2024年版 Homebrew完全ガイド：macOSのパッケージマネージャーを使いこなす

## はじめに

Homebrewは、macOS用の強力なパッケージマネージャーです。これを使用することで、コマンドラインツールやアプリケーションのインストール、更新、管理が非常に簡単になります。本記事では、Homebrewの基本的な使い方から便利なコマンドまで、詳しく解説します。

## Homebrewとは？

Homebrewは、macOS用のパッケージマネージャーで、ソフトウェアパッケージのインストール作業を一元管理するツールです。パッケージやライブラリの依存関係を自動で解決してくれるため、開発環境の構築がスムーズに行えます。

### Homebrewの役割

Homebrewは、ゲーム開発に例えると、追加機能AやBを問題なく共存させるための調整役と考えるとわかりやすいと思います。Homebrewを使うことで、バージョンの依存関係を自動的に管理し、最新の状態に保つことができます。

## Homebrewのインストール方法

2024年現在、Homebrewのインストール方法は以下の通りです。

### 手順

1. **ターミナルを開く**: Finderから「アプリケーション」→「ユーティリティ」→「ターミナル」を開きます。

2. **インストールコマンドを実行**: 以下のコマンドをコピーしてターミナルに貼り付けます。

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

3. **パスの設定**: インストールが完了したら、PATHを通す必要があります。以下のコマンドを実行します。

```bash
echo 'eval $(/opt/homebrew/bin/brew shellenv)' >> ~/.zprofile
eval $(/opt/homebrew/bin/brew shellenv)
```

### インストールの確認

インストールが完了したら、以下のコマンドで確認できます。

```bash
brew -v
```

**出力例**:
```
Homebrew 3.5.6
```

## Homebrewの基本的な使い方

### パッケージの管理

- **パッケージのインストール**: `brew install <パッケージ名>`
- **パッケージのアンインストール**: `brew remove <パッケージ名>`
- **インストール済みパッケージの一覧表示**: `brew list`
- **パッケージのバージョンアップグレード**:
  - 全てのパッケージ: `brew upgrade`
  - 個別のパッケージ: `brew upgrade <パッケージ名>`

### 便利なコマンド

- **パッケージの検索**: `brew search <パッケージ名>`
- **Homebrew自体の更新**: `brew update`
- **更新可能なパッケージの確認**: `brew outdated`

## 便利な使用例

### 例1: Gitのインストール

```bash
brew install git
```

### 例2: 開発環境のインストール

PythonやNode.jsなどの開発環境も簡単にインストールできます。

```bash
brew install python
brew install node
```

### 例3: MacAppStore経由のアプリ管理

```bash
brew install mas
mas install <アプリID>
```

## Homebrew-caskとは？

Homebrew-caskを使うと、CLIのパッケージだけでなく、GUIのアプリケーション（例えば、Google Chromeなど）もインストールできます。

### コマンド

- **インストール**: `brew install --cask <アプリ名>`

例：Google Chromeのインストール
```bash
brew install --cask google-chrome
```

## トラブルシューティング

### brew doctorコマンド

Homebrewで管理しているライブラリに問題がないかを確認するコマンドです。

```bash
brew doctor
```

**実行結果例**:
```
Your system is ready to brew.
```

### 依存関係の確認

- **依存する側の確認**: `brew deps --tree <パッケージ名> --installed`
- **依存される側の確認**: `brew uses <パッケージ名> --installed`

## まとめ

Homebrewを使いこなすことで、macOSでの開発環境構築やツール管理が格段に効率化されます。定期的に`brew update`と`brew upgrade`を実行して、システムを最新の状態に保つことをお勧めします。

また、新しいマシンのセットアップ時には、Brewfileを使用することで、必要なパッケージやアプリケーションを一括でインストールすることができます。これにより、開発環境の再現性が高まり、チーム内での環境の統一も容易になります。

## 参考リンク

- [Homebrew公式サイト](https://brew.sh/ja/)
- [Homebrewのインストール手順](https://docs.brew.sh/Installation)
- [MacAppStore経由のアプリ管理（mas-cli）](https://github.com/mas-cli/mas)
- [Homebrewの便利コマンド集](https://docs.brew.sh/Manpage)

この記事を参考に、Homebrewを活用して快適な開発環境を構築しましょう！
Tailwind Variantsの落とし穴。使う前に知っておきたいこと

`Tailwind Variants`を利用する上で知っておかないとハマってしまうことがあります…。
ということで`Tailwind Variants`の落とし穴として伝えます。

## Tailwind Variantsの落とし穴
`Tailwind Variants`は内部で`tailwind-merge`が利用されています。

なのでclassの定義が競合してしまうとマージされてしまい想定通りのスタイルが当たりません…。

:::note warn
使い始めたこと全くキャッチアップできておらずハマってしまいました…
公式ドキュメントにはちゃんと書いてあるのになんで見逃してしまったのか…。
:::

https://www.tailwind-variants.org/docs/introduction#automatic-conflict-resolution

### 実際に困ったこと

`Tailwind Variants`でclassを定義したところ「text-」が重複してしまったことで片方の定義がスタイルに反映されないことが発生しました…。

```jsx
const style = tv(
  {
    base: 'text-hoge',
    variants: {
      inverse: {
        true: 'text-hoge2',
        false: 'text-hoge3
      }
    }
  }
)
```
上記の場合だと`text-hoge`はfont-sizeを指定するclass、
`text-hoge2`と`text-hoge3`はfont-colorを指定するclassだとします。

この場合「text-」のプレフィックスが被ってしまい`tailwind-merge`の機能によってマージされてしまい`text-hoge2`もしくは`text-hoge3`が有効になります。

この件については下記のリンクでも議論されています。

https://github.com/dcastil/tailwind-merge/issues/297#issuecomment-1872546196

### 解決方法は`twMergeConfig`を設定すること

下記のように設定を`tailwind-merge`に関するオプションを追加することでこの問題を回避できます！

```diff_jsx
const style = tv(
  {
    base: 'text-hoge',
    variants: {
      inverse: {
        true: 'text-hoge2',
        false: 'text-hoge3
      }
    }
  },
+ {
+   twMergeConfig: {
+     classGroups: {
+       'font-size': ['text-hoge']
+     }
+   }
+ }
)
```

ドキュメントは下記のページに記載がありました。

https://www.tailwind-variants.org/docs/config#config-options

もっというと`tailwind-merge`のオプションのようなので詳細な指定は下記のページを参照するのが良さそうです！

https://github.com/dcastil/tailwind-merge/blob/v2.2.2/docs/configuration.md

## まとめ
声を大にして言いたいのは、書く前にちゃんとドキュメント読め！ってことです。
この1年弱で改めて体感しました…。

また、ライブラリは内部的に使われているライブラリを把握しとく必要があると感じました。
依存関係はできるだけ把握していけるように努めます。
ABC253Dを解いた


筆者はレート600前後の茶色コーダ

[AtCoder Problems](https://kenkoooo.com/atcoder/)で自分が解いていない中から選んだ以下の問題を解いていく

https://atcoder.jp/contests/abc253/tasks/abc253_d

# 実装コード

1からNまでの総和を求め
その中のAの倍数の総和とBの倍数の総和を引き
AかつBの倍数(→最小公倍数)が二回引かれてしまうのでそれを足す。

総和の計算と最小公倍数の計算はスニペットに設定したものをそのまま使用

ここまで解いて解説見たらその通りの解法だったので、今回の考察はわりと的を得ていたようだ。

```python
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)

def sum_arith(a: int, d: int, n: int, mod: int = 0):
    if mod:
        return (n * (2*a + (n-1)*d) // 2) % mod
    else:
        return n * (2*a + (n-1)*d) // 2

def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

def lcm(a, b):
    return a * b // gcd(a, b)

def main():
    N, A, B = rLI()
    S = sum_arith(1,1,N)
    NA = N // A
    SA = sum_arith(A,A,NA)
    NB = N // B
    SB = sum_arith(B,B,NB)
    AB = lcm(A,B)
    NAB = N // AB
    SAB = sum_arith(AB,AB,NAB)
    
    ans = S - SA - SB + SAB
    
    print(ans)
if __name__ == '__main__':
    main()

```

# まとめ

ABC253Dを解いた、実装には等差数列の和の公式と最小公倍数を計算するスニペットを使用した。

# 感想

今回の問題は解説を見ずにスニペットを使用して、早解きができる感じで解いた問題だった。
D問題の早解きは緑どころか水色perfが期待できるレベルと思われるので、このようなパターンを増やしていきたい。
【Go】MakeFileを作成する

## はじめに
環境構築を実施する際に、Makefileをよく使います。
今回はMakefileの作り方を復習する目的で、作っていきます。

## ファイル
```makefile:makefile
# Makefile for a Go project

# Variables
BINARY_NAME=go_xo_app
DB_URL=pgsql://postgres:password@localhost:5432/xodb?sslmode=disable
XO_OUTPUT_DIR=models

# Targets
.PHONY: all clean build run generate

all: clean generate build run

clean:
	rm -f $(BINARY_NAME)
	rm -rf $(XO_OUTPUT_DIR)

generate:
	mkdir -p $(XO_OUTPUT_DIR)
	xo schema $(DB_URL) -o $(XO_OUTPUT_DIR)

build:
	go build -o $(BINARY_NAME) main.go

run:
	./$(BINARY_NAME)
```


```shell:実行結果
~/go/src/go_xo$ make all
rm -f go_xo_app
rm -rf models
mkdir -p models
xo schema pgsql://postgres:password@localhost:5432/xodb?sslmode=disable -o models
go build -o go_xo_app main.go
./go_xo_app
Fetched User: &{ID:4 Name:Alice Email:alice@example.com _exists:true _deleted:false}
```
Web会議の録画データをMicrosoft Streamで文字起こしする方法（時間制限あり）

## 背景

ZoomでWeb会議を行った際に画面録画をしましたが、議事録作成をするために後から見返すのは大変です。Microsoft Teamsであれば会議の録画と同時に文字起こしを行う機能がありますが、会議が終了した後に録画データを使用して文字起こしを行う場合、どのようにすれば良いかについて説明します。

ここでは、既に終了した会議の録画データをMicrosoft Stream (SharePointベース) を使用して文字起こしを行う方法を紹介します。
Microsoft Streamは、企業内の動画共有サービスで、動画の管理や文字起こしを行うことができます。

なお、本手順により得られる文字おこしデータが、7分間程度に限定される問題があります。手順に誤りがある可能性がありますが、何度か試してうまくいかないため追跡調査は諦めました。
本記事をご覧になっている方で、お気づきの点がありましたら、ご指摘を頂けますと幸いです。

## 前提

### 1. Microsoft 365のサブスクリプション

Microsoft Streamは、Microsoft 365のエンタープライズプランや教育機関向けプランに含まれています。
Microsoft Streamを使用するためには、ユーザーが対応するMicrosoft Streamライセンスを持っている必要があります。

詳細については、以下URLを参照してください。
https://learn.microsoft.com/ja-jp/office365/servicedescriptions/microsoft-stream

### 2. 利用可能な機能

Microsoft Streamを利用することで以下の機能が利用可能です：

- **動画のアップロードと共有**: 会議の録画データをアップロードし、組織内で共有できます。
- **自動文字起こし**: アップロードした動画に対して自動的に文字起こしを行い、字幕ファイルを生成します。
- **動画の検索と管理**: アップロードした動画を検索・管理しやすくする機能があります。
- **アクセス管理**: 動画へのアクセス権限を詳細に設定できます。

## 手順

### Step 1: Microsoft Streamに録画データをアップロード

1. **Microsoft Streamにアクセス**:
   - [Microsoft Stream](https://www.office.com/launch/stream)にアクセスし、Microsoftアカウントでログインします。

2. **Clipchampにアクセス**:
   - 画面左の「作成」ボタンをクリックし、画面右の「動画Clipchamp」をクリックします。

3. **動画のアップロード**:
   - 画面左上の「メディアのインポート」ボタンをクリックし、動画ファイルを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/de1df6aa-370e-6d14-f5c4-9d9f77b733d1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/e7143d2e-75f1-800e-43d9-102507787fcd.png)

### Step 2: 字幕ファイル（文字起こし）の作成

1. **文字おこし**
   - アップロードした動画を選択し、右上の「キャプション」をクリックし、「メディアのトランスクリプトを作成する」をクリックします。
   - 「日本語（日本）」を選択し、「メディアのトランスクリプトを作成する」をクリックします。
   - アップロードした動画をドラッグアンドドロップすることで、文字おこしを開始します。
   - 文字おこしが完了したら、動画上と画面右のトランスクリプトの箇所に表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/35cd92e8-26ff-03fd-8b3e-90570a4cec63.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/758cd387-bf9a-8174-b32c-785cb80e866c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/3618cc5b-7a67-2ce5-ffc5-0c88525edf99.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/80ab7990-ee54-77b1-6b76-2d0bb429a9e9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/de8982df-0df1-443d-264b-99d93ab9434c.png)

### Step 3: 文字起こしデータのダウンロード

1. **字幕のダウンロード**:
   - トランスクリプトの箇所からテキストをコピーするか、画面右の「キャプション(.srt)をダウンロード」をクリックします。
「業務要件定義」の遅延は「システム要件定義」のバッファを消化してエンジニアを苦しめる

## はじめに

◆この記事は何？
要件定義、見落としがちな「業務要件定義」の注意点とその対策を紹介する記事です。

◆対象は？
要件定義に関わる方

◆この記事のねらい
皆さんの要件定義（とその後のフェーズ）が少しでも楽になれば幸いです。

## 先に結論

- 業務要件定義の遅延はシステム要件定義のバッファを消化する
- 結果、エンジニアの負担が増える
- 業務要件定義はハイペースで進めるべき

## 要件定義

要件定義は大きく二つに分かれます。
「業務要件定義」と「システム要件定義」です。

「システム要件定義」はシステムの仕様書になります。

そしてシステム要件は、より上位にある業務要件から生まれます。

そのため「業務要件定義」の後に「システム要件定義」を行います。

<img width="500" alt="mojikyo45_640-2.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/1e288143-4c76-e028-4c9c-fa9386d2fa7b.png">

## よくある要件定義のスケジュール

一括契約ではなく多段階契約を結ぶ場合、「要件定義まで」で契約を分ける契約があります。
この場合、計画は「要件定義+バッファ」となることがあります。

前述の通り要件定義は「業務要件定義」と「システム要件定義」に分かれます。

よって計画は、
①業務要件定義
②システム要件定義
③バッファ
となります。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/fc869e01-2d3a-0cd9-4c88-32ec7532a163.png)


## 業務要件定義が遅れるとどうなるか？

「業務要件定義」が遅れると「システム要件定義」が遅れます。
つまり、当初確保していたバッファを消費します。最悪の場合、次工程も圧迫します。

「業務要件定義の遅延」は、気づきにくいのが難点です。
業務要件定義とシステム要件定義に分解できていなければ、ただ「要件定義が遅れている」と認識することになります。

「業務要件定義の遅延」の影響を知らない組織は、同じ過ちを繰り返します。

その結果、エンジニアを苦しめる羽目になります。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/f67d22b9-1949-de3e-9501-1e181f579696.png)


## 対策

業務要件定義の遅延に対する対策です。

**(1)そもそもバッファの考え方を改める**

次のように考えることで、業務要件定義の遅延の影響を小さくできることがあります。

①業務要件定義
②業務要件定義の要件定義のバッファ
③システム要件定義
④システム要件定義のバッファ

**(2)ハイペースで進める**

「業務要件定義」はハイスピードで進めることを心がけます。

書籍[『要件定義トラブルの予防と対策136』](https://amzn.asia/d/08LUlPvW)より引用します。

> ハイペースを心がける
> 通常のプロジェクトでは、要件定義フェーズの雰囲気はまだまだ和気あいあいとしたものです。顧客の回答は遅れ、会議は延期され、時間が来ると「続きは次回」となります。
危機感は全くありません。しかしここで思い出すことです。要件定義フェーズでの1日の遅れは後フェーズの作業では何日の遅れになるのか。

要件定義はハイペース、さらにいえば、業務要件定義をハイペースで進行することが、プロジェクトの成功につながります。

## おわりに

この記事では、業務要件定義の遅延の影響とその注意点について紹介しました。

対策として、業務要件定義の影響を加味したスケジュールの立て方、心構えを挙げました。

参考になれば幸いです。


## 参考

[『要件定義って食べれるの？』](https://amzn.asia/d/0jijyStW)

[「ツボ【2】多段階契約の意味を互いに理解する」](https://note.com/masahiro110/n/nbb53bb5c3280)

[『要件定義トラブルの予防と対策136』](https://amzn.asia/d/08LUlPvW)
🔥💯マジヤバい！正規表現の魔法をマスターしちゃおう！🧙‍♀️✨

こんにちは〜、ギャルの皆！😘 今日は超ムズイ正規表現のことをマジわかりやすく解説しちゃうよ〜💁‍♀️💕 もうこれ読んだら正規表現マスターになっちゃうかも!?😍

## 🌈正規表現って何よ!?

正規表現ってさ、文字列のパターンを探したり、取り出したり、変えたりする超パワフルなツールなんだよね〜😎 プログラミングとかデータ分析で超便利なんだって〜！

## 🎨基本のキ、メタキャラクタ！

メタキャラクタって難しそうだけど、実はすごく便利なんだよ〜😉 ここでは超わかりやすい表で説明しちゃうね！

| メタキャラクタ | 意味 | 例 |
|:---:|:---|:---|
| . | どんな文字でもOK！ | `a.c` は "abc", "adc" とかにマッチ💖 |
| ^ | 行の始まりだよ〜 | `^Hello` は "Hello, world!" の "Hello" にマッチ🎉 |
| $ | 行の終わりだよん | `world$` は "Hello, world" の "world" にマッチ😊 |
| * | 0回以上の繰り返し！ | `ab*c` は "ac", "abc", "abbc" とかにマッチ🌟 |
| + | 1回以上の繰り返し！ | `ab+c` は "abc", "abbc" とかにマッチ✨ |
| ? | あってもなくてもOK！ | `colou?r` は "color" と "colour" にマッチ🌈 |
| \ | 特殊文字をエスケープ！ | `\*` はただの "*" にマッチ🔒 |
| [ ] | この中の1文字にマッチ！ | `[aeiou]` は母音の1文字にマッチ🎵 |
| \| | どっちかを選んでね！ | `cat\|dog` は "cat" か "dog" にマッチ🐱🐶 |

## 🦄特殊シーケンス、覚えちゃお〜！

特殊シーケンスも超便利だよ〜😘 これも表でわかりやすく説明しちゃうね！

| 特殊シーケンス | 意味 | 例 |
|:---:|:---|:---|
| \d | 数字だよ〜 | `\d{3}` は "123" とかにマッチ🔢 |
| \D | 数字以外だよん | `\D+` は "abc" とかにマッチ📚 |
| \w | 単語の文字だよ！ | `\w+` は "hello_123" とかにマッチ📝 |
| \W | 単語以外の文字！ | `\W+` は "!@#" とかにマッチ🔣 |
| \s | 空白文字だよ〜 | `\s` はスペースとかタブにマッチ⚪️ |
| \S | 空白以外の文字！ | `\S+` は "hello" とかにマッチ🔠 |

## 💖量指定子、使いこなしちゃお！

量指定子を使えば、繰り返しの回数を指定できるよ〜😍

1. `{n}`: ちょうどn回繰り返し！
   例: `a{3}` は "aaa" にマッチ🎉
2. `{m,n}`: m回以上、n回以下の繰り返し！
   例: `a{2,4}` は "aa", "aaa", "aaaa" にマッチ💕

## 🌟正規表現の重要性と応用例

正規表現ってマジで重要なんだよ〜😎 こんな感じで使えるんだって！

1. **テキスト検索**: ログファイルからエラーを見つけたり〜🔍
2. **データ確認**: メアドや電話番号が正しいかチェックしたり〜✅
3. **テキスト変換**: 文章の中の言葉を別の言葉に変えたり〜🔄

## 💼応用例

1. **ログ分析**: サーバーのログからエラーを見つけ出す！🕵️‍♀️
2. **データ整理**: データベースの情報をキレイにする！✨
3. **Webスクレイピング**: ウェブサイトから情報を取り出す！🕸️
4. **入力チェック**: ユーザーが入れた情報が正しいかチェック！✅

## 🆕最新情報

- **TypeScript 5.5**: 正規表現のチェック機能が追加されたんだって〜！🎉
- **Excelの新機能**: 2024年5月から正規表現の関数が使えるようになったんだって〜！🙌

## 💯まとめ

正規表現って最初は難しそうだけど、慣れたらめっちゃ便利なんだよ〜😍
基本をマスターして、どんどん使いこなしていこう！💪✨

## 📚参考文献

1. [正規表現のメタ文字](example.com)
2. [IBMの正規表現ガイド](example.com)
3. [基本的な正規表現メタキャラクタ](example.com)
4. [正規表現チュートリアル](example.com)
5. [正規表現のフィルターパターン](example.com)
6. [正規表現のリファレンスガイド](example.com)
7. [SimpleRegexのメタキャラクタ](example.com)
8. [W3Schoolsの正規表現メタキャラクタ](example.com)
9. [Qiitaの正規表現記事](example.com)
10. [亀井技術研究所の正規表現ガイド](example.com)
11. [TypeScriptの新機能](example.com)
12. [正規表現の実用的な導入](example.com)
13. [正規表現の基本](example.com)
14. [Excelの新しい正規表現関数](example.com)
C_TS4FI_2021 SAP Certified Associate - SAP S/4HANA 2021 for Financial Accounting対策（12/100）

【12日目】
トピック 1：組織割当およびプロセス統合（12/15）

≪問題12≫
得意先の前受金が販売管理（SD）で処理される過程を的確に説明している文は次のどれですか。
正しい答えを選択してください。
□前受金請求がFI備忘明細として登録された後、SD受注が自動生成される。
□前受金請求がFI備忘明細として登録された後、SD請求伝票が自動生成される。
□前受金請求がSD受注として登録された後、備忘明細としてFIに自動的に転記される。
□前受金請求がSD請求伝票として登録された後、備忘明細としてFIに自動的に転記される。

≪解答≫
□前受金請求がFI備忘明細として登録された後、SD受注が自動生成される。
□前受金請求がFI備忘明細として登録された後、SD請求伝票が自動生成される。
■前受金請求がSD受注として登録された後、備忘明細としてFIに自動的に転記される。
□前受金請求がSD請求伝票として登録された後、備忘明細としてFIに自動的に転記される。

≪解説≫
・前受金は受注伝票に登録しておき、所定の期日に前受金請求（販売管理の請求伝票）を得意先に送付する。
・販売管理の前受金請求は、前受金請求として自動的に財務会計に転記される（備忘録として転記される）。この明細には特殊仕訳コードFが設定されており、転記は統計上のものとして設定される。
Autopilot 実施時に Windows Update を止めれるのか？

# はじめに
ひょんなことから、Autopilot を実施する際に Windows Update が実施されないようにしたい・・というニーズが生まれたため、検証してみました。

なお、Autopilot は、インターネット への接続が必要ですし、OS では 既定で Windows Update が有効であり、OOBE 中に更新が掛かる仕様になっていますので、止めるのは結構やっかいなのですが、やれる範囲でやってみた・・・という内容になっています。

:::note warn
**注意事項**
この記事で紹介した方法は、OS で正式にサポートしている行為ではないため、これで キッチリ更新が 100% 止まっているか、その他の機能に問題が出ないかは 誰も保証できません。自己責任でやってください。
:::

Autopilot の構成については、以下の記事で説明していますので、参照ください。
本記事では、この構成が済んでいる前提で説明していきます。

https://qiita.com/carol0226/items/1e8023611f74f158c38c

# 試してみた方法
0. 有線 LAN ケーブルを抜いた状態で、新品 PC（またはリセット後のPC）の電源を入れます。すると、**国または地域** の選択画面になります。
　<br>
0. ここで、**[SHIFT] + [F10]** を押すと コマンドプロンプト が表示されます。
　<br>
0. さらに、**[Winodws キー] + [R]** を押すと、**ファイル名を指定して実行** ウィンドウが開きます。
　<br>
0. コマンド欄に、**ms-settings:** を入力することで、設定パネルが開きます。
　<br>
0. ここで、Windows Update の設定ページで **１週間一時停止する** を押します。
項番１～５の流れは、以下の画面の通り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/43b37ee4-9270-000d-ca4b-10584a26d5c5.png)
　<br>
0. すると、以下の画面の通り、更新が一時停止されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4aa0385e-3132-fb5a-dfb6-5ba9dd0af581.png)
　
そのあと、ウィンドウを閉じて LAN ケーブルを挿して（または WiFi に接続して）から、ウィザード（地域設定 と キーボード設定）を進めます。そのあと、以下のように **最新バージョンを利用していることを確認しています** と出て、再起動が掛かります。ここで、更新しちゃっているのか・・・という一抹の不安がありますが（厳密なチェックは時間が無くてやれていません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/225192be-f540-0acb-d2ea-a5728c7f02ba.png)
　<br>
0. 再起動後に、サインイン の画面が表示されますが、 再度 **[SHIFT]+[F10]** → **[Windows]+[R]** → **ms-settings:** から Windows Update の設定を開くと、一時停止のままになっていることが確認できます。うまく行ってそう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e04256ae-1a55-1a3e-35cb-8c7490f93748.png)
　<br>
0. ウィンドウを閉じてから、通常通りの Autopilot を発動させます。Windows Hello for Business の初期設定などを実施して、ようこそ画面 などを眺めて待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/68bde382-6a85-21cf-a9c2-2a14af5cd9a1.png)
　<br>
0. 初回サインイン後に、Windows Update の設定を見てみると、最初に設定した 一時停止 のままになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d15b8fc6-90a4-b4d9-795c-299ef7d7c1a7.png)

いちおう、これで Autopilot の実施前に Windows Update を停止させてから Autopilot を実行できることが確認できました。

**参考**

https://atmarkit.itmedia.co.jp/ait/articles/2201/27/news029.html

# おまけ
OOBE 中に、以下の画面から 更新プログラムのアンインストールも可能でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4c9e34b9-fa63-bb49-a908-9394a5915621.png)
　
こんな感じ。そのため、この画面で 微調整してから 先へ進めるという事も可能そうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/75ee0bf0-b325-0b31-a5a1-b725b4fb6cdd.png)

# 参考
OOBE 中に **[SHIFT] + [F10]** を押す方法は、以下の勉強会に参加した際に、教えていただきました。

https://configmgr.connpass.com/event/315267/

**2025/2/15 追記**
以下の記事では、OOBE 中に 更新プログラムを制御する方法について 解説されています。

https://patchtuesday.com/blog/quality-updates-during-oobe-how-deferral-works/
隙間時間にみる早見表〜応用情報技術者試験②〜

# この記事について
応用情報技術者試験を勉強していた時になかなか覚えられないな〜っとなっていた内容を毎回見ることができるようにメモしていたものです！

※さらっと見れるように分割しています。

## クリプトジャギング
マルウェアに感染させて処理能力を不正利用、暗号資産の取引承認に必要となる計算を行い、報酬を得る

## ３層クライアントサーバ
プレゼンテーション：ファンクション：データベース

## フェッチ
読みだし

## プロセッサ
大体CPUのこと
MPU:マルチコアプロセッサ:DSP：GPU

## プログラム
### リカーシブ
再帰プログラム
### リエントラント
再入可能プログラム：複数のタスクから呼び出されてもそれぞれに正しい結果を返せるプログラム
### リユーザブル
再使用可能プログラム：一度実行したプログラムを再度実行しても正しい結果を返せる。処理の最後に初期化されているなど
### リロケータブル
再配置可能プログラム：手記屋上のどの位置に配置しても動くようにしたプログラム

## 二分木
| 単語| 説明や記号など |
|:-:|:-:|
| ルート  | 最上位  |
| 枝  | ブランチ  |
| 節  | 節点、ノード、○  |
| 葉  | リーフ、最下位  |

## DRAM
HDDが該当

## PROM
SSDが該当

## ユーザビリティ評価方法
| 用語 | 説明 |
|:-:|:-:|
|  インタビュー法 |-  |
| ヒューリスティック評価法  | 専門家の経験則  |
| ユーザビリティテスト  | 使用観察  |

## モジュール分割方法

| 用語 | 説明 |
|:-:|:-:|
| STS分割法  | 入力、変換、出力 |
| トランザクション分割法  | -  |
| 共通機能分割法  | -  |

## モジュール結合度
弱い方がいいとされる。
| 用語 | 強さ |
|:-:|:-:|
|  データ結合 |  弱い |
|  スタンプ結合 |   |
|  制御結合 |   |
|  外部結合 |   |
|  共通結合 |   |
|  内容結合 |  強い |

## セキュリティマネジメント３要素
|  |
|:-:|
| 機密性  |
| 完全性  |
| 可用性 |

## ネットワーク伝送速度

| 公式 |
|:-:|
| 電送時間（秒）＝データ量/回線速度(bps)  |

## CPUからメモリへの配置順

| 用語 | 説明 |
|:-:|:-:|
| ビックエンディアン  | 上位バイトから下位バイト（123→123)  |
| リトルエンディアン  | 下位バイトから上位バイト(123→321)  |

## アドレス方式

| 用語 | 説明 |
|:-:|:-:|
| 即値アドレス指定方式  | メモリ参照しないでオペランドの値を使う  |
| 直接アドレス方式  | オペランドの値をメモリ参照値として使う  |
| 関節アドレス方式  | オペランドの値のメモリにあるメモリさん承知のところにある値を使う  |
| インデックス（指標）アドレス指定方式  | オペランド部のメモリ参照値にインデックスレジスタ番号にある値を足した値を使用する  |
|ベースアドレス指定方式|ベースレジスタの値を足して使用|
|相対アドレス指定方式|ベースレジスタをプログラムカウンタに変えたやつ|

# 次
https://qiita.com/mr_noppo/items/2ef724ab8469d33f0668
データベースのスケーリングを計画するためのベストプラクティス


## はじめに

データベースのスケーリングは、アプリケーションの成長に伴い避けて通れない課題です。適切なスケーリング戦略を立てることで、パフォーマンスの向上やコストの最適化が可能になります。この記事では、クラウドベンダーのサービスを活用しながら、データベースのスケーリングを計画するためのベストプラクティスについて解説します。

## 1. スケーリングの基本概念

### 垂直スケーリング（スケールアップ）

垂直スケーリングは、既存のデータベースサーバーのリソース（CPU、メモリ、ストレージ）を増強する方法です。これは比較的簡単に実施できますが、物理的な限界が存在します。

### 水平スケーリング（スケールアウト）

水平スケーリングは、複数のデータベースサーバーを追加して負荷を分散する方法です。これにより、より大規模なトラフィックを処理することが可能になりますが、データの一貫性や分散処理の複雑さが増します。

## 2. クラウドベンダーのサービスを活用する

### Amazon RDS

Amazon RDSは、リレーショナルデータベースの管理を簡素化するサービスです。自動バックアップ、スケーリング、パッチ適用などの機能が提供されており、スケーリングの手間を大幅に削減できます。

### Amazon Aurora

Amazon Auroraは、MySQLおよびPostgreSQL互換のリレーショナルデータベースで、高いパフォーマンスと可用性を提供します。Auroraは自動的にスケーリングし、必要に応じてリソースを追加することができます。

### Google Cloud Spanner

Google Cloud Spannerは、グローバルに分散されたリレーショナルデータベースで、強力な一貫性と高い可用性を提供します。スケーリングが自動化されており、大規模なアプリケーションに適しています。

## 3. スケーリングの計画

### 需要予測

スケーリングを計画する際には、将来のトラフィックやデータ量を予測することが重要です。過去のデータや市場の動向を分析し、適切なリソースを確保しましょう。

### モニタリングとアラート

スケーリングの効果を最大化するためには、データベースのパフォーマンスを常にモニタリングし、異常が発生した際には迅速に対応できるようにアラートを設定しておくことが重要です。

### 自動スケーリング

クラウドベンダーの多くは、自動スケーリング機能を提供しています。これを活用することで、手動でのスケーリング作業を減らし、リソースの最適化を図ることができます。

## 4. ベストプラクティス

### キャッシュの活用

データベースの負荷を軽減するために、キャッシュを活用することが有効です。RedisやMemcachedなどのインメモリデータストアを使用することで、読み取りパフォーマンスを向上させることができます。

### シャーディング

シャーディングは、データを複数のデータベースに分割して保存する方法です。これにより、各データベースの負荷を分散し、スケーラビリティを向上させることができます。

### リードレプリカ

リードレプリカを使用することで、読み取り専用のクエリを複数のデータベースに分散させることができます。これにより、メインデータベースの負荷を軽減し、パフォーマンスを向上させることができます。

## まとめ

データベースのスケーリングは、アプリケーションの成長に伴い重要な課題となります。クラウドベンダーのサービスを活用し、適切なスケーリング戦略を立てることで、パフォーマンスの向上やコストの最適化が可能になります。この記事で紹介したベストプラクティスを参考に、効果的なスケーリングを実現してください。
#microcms_meetup microCMS Meetup 2024参加しました！4つのテーマから学ぶ高可用・高効率な開発アプローチ


## 本日の勉強会
https://microcms.connpass.com/event/316541/

今日も「イベントレポートを誰よりも早く出すんだ！」というモチベーションで執筆してます。
公開するのもモチベーションだし、学びを入れる事もモチベーションだし、備忘録にするのもモチベーション。
アウトプット、とてもだいじ。

## microCMS Meetup 2024にお邪魔しました！
会場が中野ということで、会場までに間に合わないなぁ、ということでオンラインで参加しました。
結局業務都合で会場まで間に合わず、途中からの参加になったので悔しい限り。
次回こそはぜひ現地に行きたい！

## 登壇プログラム
### ごあいさつ
microCMSさんがエイチーム社と合流（買収）ということで、これは驚いた！
引き続きmicroCMSにはヘッドレスCMSの入門サービスという位置付けであって欲しいと期待しています。

### スポーツ業界でmicroCMSを積極的に導入している話	
スポーツ業界の面白さのトークが印象的！
microCMSが日本語ベースなので使いやすい（サポートも含め）は商用利用で考えると非常に安心感がありますよね。
当方、個人で無料で使わせていただいている身ですが、非常に使いやすくて依存しまくっています。CMS=microCMSというぐらいに。
個人的にも好きなサービスなので、好きを押し出してのプレゼンは嬉しいですね。

### 基礎自治体サイトへのヘッドレスCMS導入で目指したこと	
自治体すげー！発表がすごく濃い！
全部手作業で要件や運用整備して、と話を断片的に切り出すとただひたすらに基本に忠実に取り組まれているのが印象的。

### microCMSの開発組織 - Deep dive into microCMS
（資料が後ほど公開されるということで、特に非公開などを気にせず書いていきますが、個人が学習目的で使うことを想定する視野です）

やっぱりアーキテクチャはAWS系なのね。どこに行ってもAWSとは切っても切り離せないワタシ…。
そろそろAWS系の資格を取ろう、と言い続けてそろそろ何年目かに突入しようとしています。少なくとも一年目ではない…！

CodeRabbitでコードレビューの自動化→人間のレビューを入れるのは精度も上がるしレビュワーの負荷も下がるし、ぜひ取り入れたい！
特にレビュワーとしてどこを指摘すればいいかを学べるのがポイント！
個人的には新人への学習体制をQaseで作れるというのが気になる！

ClickUpでタスク管理。GitHubサービスで管理するのに個人レベルでも痒いところに手が届かん！けどコントリビューションは反映して欲しい！というワガママを満たしてくれそう
https://qiita.com/matsumura-yzrh/items/dc884b6ec64368084aec

無料で使えるし、やろう！
QA募集してるのでぜひに。ファンなので応援はしたいけど、私のミッションとしてはエンドユーザ側のため開発は離れており…。

### microCMS 最新リリース情報 - What’s New in microCMS	
このあたりは追加した機能の振り返りのデモ。イベント記事で細かく話すものはないので、実際に色々ガチャガチャさわってみてください
公式ブログが早いかな？

特に先日上げたてほやほや（？）の差分表示機能がうれしい。早速使ってみたい（執筆時点ではデモ閲覧のみ）
通常利用レベルでも助かる、GitHubだと`.md`のdiff見れなくて困ってたので、こちらをメインで活用していきたくなりました。

### 懇親会
オンラインのため参加できず。事例とか色々聞きたかった…！

## 所感
クライアントと提供側で半々ぐらい。microCMSユーザーとして知りたい内容（具体的なレベルでは色々あると思います）が盛り込まれており、満足度が非常に高いです。
質問もsli.doから非常に活発にされていて、懇親会にいかないと時間が足りないぐらい。
ぜひ次も参加したい！会場限定のイベントTシャツほしい！

そういえば、microCMSコミュニティあるんですかね？
ないということはないと思いますが、あれば嬉しいなと！
今回のYoutubeライブもアーカイブ視聴できるか気になるところです。

## 本稿は以下のキャンペーンに参加しています
https://qiita.com/official-events/3648bc4e6cedb674491c

> アプリケーション開発に注力して価値あるプロダクトを作りたいけれど、やらなければならないことが多すぎて集中できない。そんな悩みを抱えている方も多いのではないでしょうか？

に対する回答が、今回の博報堂アイ・スタジオの鈴木氏のトークテーマだと思いました。
所感でも触れましたが、ぜひアーカイブ視聴ができることを期待したいです。
（細かい話を書いていいか分からなかったので、本稿では色々ぼかしたり削ったりしてますが）microCMSを活用するためのテクニックを色々お話しされていますので、ぜひきいてほしい！