OmniAICreator/Qiita-1.07M huggingface dataset:
要件定義のときに「数量」の話だけは確認してください(ユーザー数編)

# TL;DR;
要件定義において数量の話はとても大切です
数量がどれくらいあるのかによって、実現困難になったり、検証の要素が増えたり、つくれるけど使えないなんてことが普通におこります
今回はユーザ数の話です、つまりはキャパシティプランニングしてますか、という話です

# キャパシティプランニング
キャパシティプランニングの話です。
サーバ台数のレベルでいえば、何台必要か
server less architectureで考えるなら費用はどうなりますか?ということです

## 可用性
サービスが動きつづけるかどうかです
自社サービスであっても受託であっても、サービスが動かないとなればお金は発生しません
場合によっては賠償まであるでしょう
その前提として、どこまでのことがあった場合に耐えられるかの保証を想定しないといけません
たとえば地震があってアクセス急増するようなときでも耐えられるのか、そういった異常は保証しないのか
アイドルの限定イベント申込ならどうなのか?それはある程度事前に想定されるので、どれくらならいけるのか、というのを判断しないといけません
そのためにどれくらいのサーバ台数なりのリソースが必要で、そこを算出しないといけません


## 費用について
エンジニアは運用費用を軽視して、安全性を確保しすぎたり、使いたいからといったつまらない理由でサービスを使おうとしたりします
AWSやGoogleやMicrosoftさんなどに多額の寄付をしたいという御心であれば何も言うことはありませんが、その仕事で報酬をもらうのであれば、利益をだすことが最も大事なことです
可用性が担保されなければ報酬をもらえないでしょうから、そこを担保した上でいかに安くあげるかというのは大事なことです

## 要件定義の時点で費用を事前に算出しないといけない
要件定義の段階でここを配慮する必要があるのは、だいたいこの要件に従って予算や見積が決められるからになります
計算機の必要な資源は金額に直結しますし、だいたいの場合、そこでベースになるのはデータ数とユーザ数です。なのでユーザ数を事前に考えておかないと、そもそも作れない、できない、やっても利益がでないどころか損失まである、といった事態になります
ここを検証せずに要件定義しました、などということがないようにしましょう


# 「ユーザー数はどれくらいですか?」
閑古鳥が泣く程度のサービスであれば、エンジニアリングとしてはさして問題はないわけですが(ビジネスとしてはダメです)多数のアクセスが想定されるケースであれば、それを考慮する必要があります。

## 「同時にどれくらいのアクセスが想定されますか?」
具体的にどれくらいのアクセス数のオーダーですか?これは合計値ではなくて最大どれくらいかを考えてください。
その数がわからないということであれば、サービスの設計はできません
予算もわかりません
ここの数は要件定義のときに明確にしないといけないし、考慮しましょう

## 「アクセスされるものは静的なコンテンツですか?あるいは動的なものですか?」
静的なコンテンツであれば、CDNにおけばだいたい解決します
しかし動的なコンテンツやサービスを提供するときにこそユーザー数に敏感になる必要があります
そこで余裕があるのなら1台での運用でも予算も含め許されるかもしれませんが、それを越える場合には確実にスケールできる条件を満たした上でサーバ台数を用意する必要があるでしょう
server less architectureだからよい?という場合、それでも金額に直結します
キャッシュの導入は十分に効果的です。1000倍くらいのアクセスをさばけると思っていいですし、1分程度のキャッシュでも十分機能すると考えてください
常にアプリケーションサーバにアクセスし、DBからread/writeするというのはユーザ数が分間数万のオーダーならあってはいけないことです

## 先着か、抽選か
イベントの申込で先着での申込システムは、先着であることがビジネス上で重要であり、かつ計算資源が豊富であり、実績がある場合でもなければやるべきではありません
抽選にすることであとで手間は発生しますが、サービスの運用でいえばこちらの方がアクセスは緩やかになります
こういった一時的にユーザをあおらないことによって同時アクセスユーザを減らす試みは大事です

## 広報はどうなのか?
サービスがどのような形でとりあげられるのかを知る必要があります
4マス(テレビ,ラジオ,新聞、雑誌)のうち、今でもテレビでの放送でとりあげられるのはアクセスが跳ねるもっとも大きな要因です
番組やCMをやるときには考慮してください
番組でもアクセスが跳ねやすいのは情報番組やWBSなどの視聴者の意識が高く、情報収集のために視聴している番組はより跳ねる傾向があります
ポータルサイトは昔よりは減ってるでしょうが、Yahoo Japanのトップあたりからのコンテンツのリンクがある場合は十分考慮する必要があります
おおよそ普段の10から20倍はくると思ってもらっていいです
SNSでの広報で同時アクセスでの目安はフォロワー数の1/100くらいが分間同時アクセスの最大値だと経験上思ってます
こういった広報で最初に取り上げられる場合はやはり監視が必要になると考えた方がいいです

## 事件性
災害、戦争などもそうですが、タレントの結婚、出産などの話でも運用しているサイトによってはアクセスが想定されます

## プロモーション
サービスや商品のプロモーションで現金や資産価値の高いものを提供している場合、アクセス数は顕著にあがると思った邦がいいです。こういったプロモーションは発表時点での監視が必要になるかもしれません

# まとめ
キャパシティプランニングとユーザ数について、要件定義において考えるべきことを記述しました
実際にサービスが落ちると機会損失もありますが、エンジニアとして言えば後始末が面倒なことになります
なので事前に考慮した上で、限界点を顧客に提示し、予算を決めて設計、運用できるようにしていくことが大事になります
実装したら終わり、と考えているようですと痛い目を見るので気をつけてください(経験者談)
Vulkan on Radeon on Ubuntu 試行錯誤（追記あり）

Radeon GPUを搭載したUbuntu PCでVulkanを触ってみようとしたら色々躓いたので、メモしておくことにする

# ハードウェア
- CPU, M/B : Intelの古いCPUとM/B（Haswellあたり）
- GPU : Radeon RX 7800 XT
- その他 : 省略
- （CPUとGPUのバランスがメチャクチャだが、一時的な動作チェック目的なので……）

# OS 選び
- 他のLinux PCでUbuntu server 22.04 LTSを使っていたため、同じものを入れてみたが、起動後にデスクトップ環境を導入、AMDGPUやVulkanのドライバ等を入れてもVulkanからGPUが見えるようにならず諦め。（おそらくどうにかする方法はあるのだと思うのだが……。）
- 改めて、Ubuntu desktop 22.04.3 LTSをインストール。最新のGPU関係ソフトウェアが入るかも？と思ったので（実際にどうだったのかは未確認）インストール時のソフトウェアアップデートオプションなどはON。起動時に `[amdgpu] *ERROR* early_init of IP block ～` といったGPUドライバ関係のエラーメッセージが見えて不安だった、とりあえずまともな解像度のデスクトップ環境が立ち上がった。

# GPUドライバのインストール
- AMDのWebサイトを参照し、[Radeon for linuxのinstruction](https://amdgpu-install.readthedocs.io/en/latest/install-prereq.html) に従って23.30版をインストール。debファイルを拾ってきて`apt-get install`と`apt-get update`しただけ。これで上記のエラーメッセージは消えた。
- `W: Download is performed unsandboxed as root as file ～ couldn't be accessed by user '_apt'. - pkgAcquire::Run`とかいうエラーが出たはずだが、debファイルを`/tmp`に持っていってやり直したら通った。
- [AMDGPU stackのインストール](https://amdgpu-install.readthedocs.io/en/latest/install-installing.html) はとりあえず放置。必要がありそうなら改めてやる予定。

# VulkanからGPUが見えるようにする
- Vulkanのテスト：準備
  - [VulkanのWebサイト](https://vulkan.lunarg.com/sdk/home#linux) からInstallerを拾ってきて展開。`. ~/1.3.268.0/setup-env.sh`を実行
  - （次のvkconfig実行時に躓いたので）aptで`libxcb-xinerama*`やら`libxcb-xinput*`をinstallした。
- Vulkanのテスト：実行（環境情報の確認）
  - （デスクトップで直接、もしくはssh -Y接続で）vkconfigコマンドを実行するとGUIが立ち上がり、適切に環境構築できていればGPUの情報などが確認できる。下画像にあるように「AMD Unknown ～」の項があるので（Unknownではあるが）GPUがちゃんと認識されていると思われる。「OS選び」の項で **「VulkanからGPUが見えるようにならず」** と書いたのがこれで、この項が表示されるようにできなかった。何が根本原因だったかは不明。
  - ここで正しくGPUが認識されるには条件があり、実行しているユーザがデスクトップGUIにログインしている（画面にデスクトップを表示している）必要がある。vkconfigコマンド自体はssh接続状態で実行しても良い。Ubuntu起動時に自動的にログインする設定があるので、それを利用すれば再起動してしまっても大丈夫。
  - **おそらく、いわゆるheadlessな状態でVulkanを使うための手段が用意されているはずで、それを使えばデスクトップGUIへのログインは不要になると思うのだが、現時点では解決方法がわかっていない。**

![2024-01-16 10_15_12-Vulkan Configurator 2.5.4 _ACTIVE_@flash.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199517/c48f20ce-1907-cbd5-21c5-962e52f1a5ef.png)

# 暫定まとめ
- 今後は実際にVulkanによるGPUプログラムをコンパイルして実行できるかを試す予定。AMDGPU stackのインストールが必要かもしれない。
- vkconfigが動くようになってから思い出しながら書いたので、作業が抜けていたりする可能性がある。同じ環境構築を別のPCでまたやれば手順の再確認ができると思うので、その際にまたアップデートしたい。

# Mesaドライバのインストール
- 上記のドライバでは`VK_KHR_ray_tracing_pipeline`が有効にならなくて困るケースがあったので、Mesaドライバを入れた。
- 参考：https://itsfoss.com/install-mesa-ubuntu/

結果
- `VK_KHR_ray_tracing_pipeline`は解決した。
- プログラムによっては、X転送状態だとうまく動かず、`DISPLAY=:0.0`などして本体につながったディスプレイに画面を出すのが必須になっている状態のものがある。どうにかできるのかは不明。
- `/var/log/Xorg.0.log` を見るといくつかエラーが出ている。解消できるだろうか？


# メモ
- うまく行かないときはカーネルのバージョンを変えるのも考えた方が良さそう
  - HWEとか……
  - securebootはオフにしちゃった方が余計な問題が起きなさそう？  

# 追記
- （最近の？）Vulkanでハードウエアレイトレーシングを行う際、再帰的に処理を行いたい場合は`maxRayRecursionDepth`が1より大きな値である必要がある模様。[これ](https://vulkan.gpuinfo.org/listdevicescoverage.php?extensionname=VK_KHR_ray_tracing_pipeline&extensionproperty=maxRayRecursionDepth&extensionpropertyvalue=31&platform=all)を辿って`maxRayRecursionDepth`の値が31になっているOSバージョン等を確認すると良いようだ。Ubuntu 22.04では駄目らしｌく、23.04を入れた。
超簡単にPythonでメール作成する方法

# 超簡単にPythonでメール作成する方法

## 対象者

毎日、毎回メールを手打ちしている方へ

## メールテンプレートの準備

まず送信するメールのテンプレートを準備する。今回は以下のような文面を使用する。
```
{受信者名} 様

お世話になっております。
{会社名}の{名前}と申します。 

この度は{商品名}をご購入いただき、誠にありがとうございます。
{商品名}は{発送日}に発送させていただきました。 
お手元に{配達予定日}には届く見込みです。

商品のご利用方法やその他ご不明な点がございましたら、お気軽にお問い合わせください。

引き続き{会社名}をよろしくお願いいたします。

{打ち合わせ日時}に{場所}で打ち合わせがありますことをご連絡いたします。
ご都合のよろしいようお願いいたします。

その他ご不明な点がありましたら遠慮なくご連絡ください。

敬具

{名前}

{会社名}
 
{連絡先}
```



フルコードはこちら


```python
template = """
{受信者名} 様

お世話になっております。
{会社名}の{名前}と申します。 

この度は{商品名}をご購入いただき、誠にありがとうございます。
{商品名}は{発送日}に発送させていただきました。 
お手元に{配達予定日}には届く見込みです。

商品のご利用方法やその他ご不明な点がございましたら、お気軽にお問い合わせください。

引き続き{会社名}をよろしくお願いいたします。

{打ち合わせ日時}に{場所}で打ち合わせがありますことをご連絡いたします。
ご都合のよろしいようお願いいたします。

その他ご不明な点がありましたら遠慮なくご連絡ください。

敬具

{名前}

{会社名}
 
{連絡先}
"""

receiver = input("受信者名を入力: ")
company = input("会社名を入力: ")
name = input("名前を入力: ")
product = input("商品名を入力: ")
date_shipped = input("発送日を入力: ")
date_delivered = input("配達予定日を入力: ")
date_meeting = input("打ち合わせ日時を入力: ")
place = input("場所を入力: ")
contact = input("連絡先を入力: ")

mail = template.format(
    受信者名=receiver, 
    会社名=company,
    名前=name,
    商品名=product,
    発送日=date_shipped,
    配達予定日=date_delivered,
    打ち合わせ日時=date_meeting,
    場所=place,
    連絡先=contact
)

print(mail)
```

これで、簡単なコードでメール自動作成ができる。

## 実行結果

実際に動作する様子は以下のようになる。


![auto_mail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849682/a3cb427d-650b-8d3f-1483-e3bb0784257f.png)


変数を適切に入力することで、本文がその場で作られるのがわかる。

## おわりに

ファイル内の文章いじるだけで自分用にいくらでもカスタマイズできる。

メール送信業務を効率化したい方はぜひお試しあれ。
PythonでWord文書のフォントを変更する

## はじめに
フォントは文書中で重要な役割を果たします。適切なフォントの選択により、文書の可読性と魅力が向上し、内容が理解しやすくなります。異なるフォントには独特のスタイルと外観があり、形状、太さ、傾斜などのフォントの特徴を活用して重要な情報を強調したり、芸術的な要素を追加することができます。この記事では、Pythonコードを使用してWord文書のフォントを変更する方法を紹介します。これは、大量のファイルを処理したり、関連プログラムを開発する際に役立ちます。以下に、詳細な手法を説明します。
## ツール
* Python 3.12.0
* [Spire.Doc for Python](https://www.e-iceblue.com/Introduce/doc-for-python.html)ライブラリ

このライブラリは購入する必要がありますが、[30 日間の無料試用版](https://www.e-iceblue.com/TemLicense.html)も提供されています。
もっと多いサンプルコードについて、**Spire.Doc for Python**をダウンロードして参照してください。
## インストール方法
まず、[Spire.Doc for Python](https://www.e-iceblue.com/Introduce/doc-for-python.html)と plum-dispatch v1.7.4を VS Code にインポートします。
1.Python をダウンロードしてインストールします。
2.VS Codeで「Extensions」をクリックし、「Python」を検索してインストールします。
3.「Explorer」-「NO FOLRDER OPENED」-「Open Folder」
4.フォルダーを選択し、そこに「.py」ファイルを追加します。
5.「Terminal」-「New Terminal」
6.次のコマンドを入力します。
```
pip install Spire.Doc
```
## 段落のフォントの変更

1. 必要なライブラリをインポートします。
2. Document インスタンスを作成します。
3. LoadFromFile メソッドを使用して、指定したパスに Word 文書を読み込みます。
4. 最初の Section オブジェクトを取得します。
5. 指定されたインデックスにある段落オブジェクトを取得します。
6. 新しい ParagraphStyle オブジェクトを作成し、名前、太字、斜体、フォント名などのプロパティを設定します。
7. スタイル オブジェクトをドキュメントに追加します。
8. スタイルを段落オブジェクトに適用します。
9. SaveToFile メソッドを使用して、変更されたドキュメントを指定されたパスに保存します。

```python
from spire.doc import *
from spire.doc.common import *

# Documentインスタンスを作成する
document = Document()

# Word文書をロードする
document.LoadFromFile('C:/Users/Administrator/Desktop/Sample.docx')

#最初のセクションを取得する
section = document.Sections[0]

# 特定の段落を取得する
paragraph = section.Paragraphs[1]

# 段落スタイルを作成する
style = ParagraphStyle(document)
style.Name = 'NewStyle'
style.CharacterFormat.Bold = True
style.CharacterFormat.Italic = True
style.CharacterFormat.FontName = 'Cambria'
document.Styles.Add(style)

# 段落にスタイルを適用する
paragraph.ApplyStyle(style.Name)

# 結果ドキュメントを保存する
document.SaveToFile('output/ChangeFontOfParagraph.docx', FileFormat.Docx)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/de9b00ba-ee63-102a-d866-824c81d1b738.png)
## 特定のテキストのフォントの変更
1. 必要なライブラリをインポートします。
2. Documentインスタンスを作成します。
3. LoadFromFileメソッドを使用して指定されたパスのWord文書をロードします。
4. FindAllStringメソッドを使用し、特定のテキストを検索します。
5.見つかったテキストの選択それぞれに対して、CharacterFormatプロパティを使用してテキストの色を赤に変更し、太字に設定します。
6. SaveToFile メソッドを使用して、変更されたドキュメントを指定されたパスに保存します。
```python
from spire.doc import *
from spire.doc.common import *

# Documentインスタンスを作成する
document = Document()

# Word文書をロードする
document.LoadFromFile('C:/Users/Administrator/Desktop/Sample.docx')

# 特定のテキストを検索する
textSelections = document.FindAllString('AI', False, True)

# テキストのフォントスタイルを変更する
for selection in textSelections:
    selection.GetAsOneRange().CharacterFormat.TextColor = Color.get_Red()
    selection.GetAsOneRange().CharacterFormat.Bold = True

# 結果ドキュメントを保存する
document.SaveToFile('output/ChangeFontOfText.docx', FileFormat.Docx)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/223e8fcc-a60e-cb1a-546e-a61b4371e8d9.png)
VSCode のAnsible Extensions にwatsonx Code Assistant のmodel ID を設定


### はじめに

watsonx Code Assistant を使用して Ansible のコード生成をするための、VSCode の Ansible および Ansible Lightspeed の設定ログです。

<br>

Ansible Lightspeed の Technical preview の使用については以下で設定しています。
こちらで Ansible Extensions の設定などを確認しています。

https://qiita.com/c_u/items/b1f90856b663f6f024f3



今回は、IBM Cloud Watsonx Code Assistant のモデルIDを設定する方法を追加します。

---

### 環境

・Visual Studio Code
　　　Ansible Extensions


---

### 設定

VS Code を開き、拡張機能Ansible を検索し、Ansible 設定を表示します。

Ansible Extensions の歯車マークの "拡張機能の設定" を押します。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/5ac3d18f-3d6b-35cc-f467-556a4eeaac0a.png)


設定画面を下方部にスクロールすると、Ansible Lightspeed の設定項目があります。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/6de5be3b-41a5-04dd-bf5d-2ceb5aa2af28.png)


関連項目はEnabledにします。
また、Ansible Lightspeed Model ID Override は IBM Cloud で構成した、watsonx Code Assistant もモデルIDを設定します。


---

参考マニュアル：

https://access.redhat.com/documentation/ja-jp/red_hat_ansible_lightspeed_with_ibm_watsonx_code_assistant/2.x_latest/html/red_hat_ansible_lightspeed_with_ibm_watsonx_code_assistant_user_guide/configure-vscode-extension_configuring-with-code-assistant



---

関連設定：

https://qiita.com/c_u/items/d70c3cf02cf24df84f90

https://qiita.com/c_u/items/c5d8e702297f92c9ad70




以上です。
Salesforce B2C Commerce 製品（日本語の資料）



+ [B2B Marketing Analytics 関連コンテンツ集](https://help.salesforce.com/s/articleView?id=000396460&type=1)

# Jan 15, 2:34 PM テクニカルサポート

+ [B2C Commerce の Account Manager/Business Manager にログインできない場合の解決方法](https://help.salesforce.com/s/articleView?id=000594754&type=1&language=ja)
+ [B2C Commerce の Business Manager で役割をユーザーに割り当てるときにユーザーが見つかりません](https://help.salesforce.com/s/articleView?id=000744652&type=1&language=ja)
+ [B2C Commerce の Business Manager でユーザーに付与できる権限の最小単位](https://help.salesforce.com/s/articleView?id=000744654&type=1&language=ja)
+ [B2C Commerce の日本語検索で商品がヒットしない場合はどうしますか？](https://help.salesforce.com/s/articleView?id=000397156&type=1&language=ja)
+ [B2C Commerce の Einstein Recommender に商品が表示されるまでの流れ](https://help.salesforce.com/s/articleView?id=000744655&type=1&language=ja)
+ [B2C Commerce サイトでファビコン (favicon) を変更する手順](https://help.salesforce.com/s/articleView?id=000744653&type=1&language=ja)
Deprecated: Ansible Lightspeed with IBM watsonx Code Assistant の設定(RedHat portal と AAP のSeat Management)

### はじめに


Ansible Lightspeed with IBM watsonx Code Assistant を使用するための RedHat の Automation Platform の設定のログです。

2024/4 時点では、プラン変更などの影響で Seat Management の概念がなくなっていました。
新しい内容はマニュアル等を適宜ご確認ください。


---

### 前提

・使用するRedHatのアカウントに Ansible Automation Platform(AAP) のライセンスを保持していること


---

### 設定

#### 1. RedHat Customer Portalで対象の組織/アカウントにユーザーを追加

AAP のサブスクリプションがあるアカウントにユーザーを追加します。

https://access.redhat.com/start/how-to-create-and-manage-users#multipleusers


・[Invite New Users](https://www.redhat.com/wapps/ugc/protected/usermgt/inviteUsers.html)

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/0be0efff-07fb-9bbb-9505-c26c949a3672.png)

-> Manage Subscription のEdit 権限が必要でした。

対象ユーザーの招待を実施します。

----

#### 2. Red Hat Hybrid Cloud Console の Ansible Automation Platform にユーザーを追加



・[4.1. シートライセンスの割り当て](https://access.redhat.com/documentation/ja-jp/red_hat_ansible_lightspeed_with_ibm_watsonx_code_assistant/2.x_latest/html/red_hat_ansible_lightspeed_with_ibm_watsonx_code_assistant_user_guide/assigning-seat-licenses_lightspeed-user-guide)

=> [https://console.redhat.com/ansible/seats-administration](https://console.redhat.com/ansible/seats-administration)


![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/e3406210-f5d5-b362-3158-a676efb4ac44.png)

ユーザーを追加します。

ここで、1で追加したユーザーが表示されるので、対象者を選択して"割当"を押します。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/2d78d48b-d753-e4f5-42fe-3cabadc5a22e.png)


Seat management が割り当てられたユーザーが表示されます。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/0a61f192-0c56-0f36-1515-49c6b5e165ae.png)


<br>

:information_source:  2024/3/12 時点の確認で Seat Management の概念がなくなっているようです。

<br>

---

RedHat Ansible Lightspeed with IBM watsonx Code Assistant にログイン

[2.1. Ansible Lightspeed 管理者ポータルへのログイン](https://access.redhat.com/documentation/ja-jp/red_hat_ansible_lightspeed_with_ibm_watsonx_code_assistant/2.x_latest/html/red_hat_ansible_lightspeed_with_ibm_watsonx_code_assistant_user_guide/logging-in-lightspeed-admin-portal_lightspeed-user-guide)

[Ansible Lightspeed portal](https://c.ai.ansible.redhat.com/)


![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/238e3a7d-7983-8560-60c1-0196f75ecfe7.png)


Login with Red Hat に遷移

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/7017b494-a195-a4e3-6b0a-f4008695a801.png)


ログイン後の画面
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/1f29af4a-0ba3-64c3-92c1-7e2a79cde740.png)


中央で、Role: administrator, licensed user が表示されています。

上部の警告では、IBM watsonx Code assistant model がまだ設定されていないことが表示されています。




----

関連設定：

https://qiita.com/c_u/items/c5d8e702297f92c9ad70

https://qiita.com/c_u/items/050d9d27d7dd778d4dbc


以上です。
セキュリティグループ

## はじめに
この記事はAWS SAA試験勉強のための、セキュリティグループに関する知識のまとめです。

## セキュリティグループとは
EC2インスタンスやDBインスタンスなどの<font color="red">**インスタンス**</font>に対する通信トラフィックを制御するファイアウォール。

EC2のセキュリティ設定にはセキュリティグループを用います。
一般論として、SSHでの接続はポート番号22。HTTPは80。HTTPSは443。

セキュリティグループは<font color="red">**ステートフルであるため、インバウンドトラフィックがルールで許可されていれば、インバウンドトラフィックに対するレスポンス(アウトバウンドトラフィック)はルールに関係なく許可される。**</font>そのため、明示的に**アウトバウンドトラフィックのルールを設定する必要はありません。**

## セキュリティグループにできないこと
設定は許可ルールのみ指定し、拒否ルールは指定できません。

## セキュリティグループの変更
セキュリティグループの変更内容は設定した際に即時に反映される仕組みとなっています。
セキュリティグループの変更はIAM管理者ならできます。

## ローカルPCから踏み台サーバー(Bastion)にアクセス

社内ネットワークにあるローカルPCから踏み台サーバーにアクセスするためには、社内IP範囲（CIDR）からポート22番のインバウンドアクセスのみを許可するセキュリティグループを踏み台サーバーインスタンスに設定することが必要です。

## WEBサーバーへのインターネットからのアクセスを許可

443番ポートで0.0.0.0からのインバウンドトラフィックを許可するセキュリティグループをウェブ層のEC2インスタンスに設定。

## DB インスタンスへのアクセスを制限
セキュリティグループは DB インスタンスへのアクセスを制限できます。セキュリティグループは、特定のポート上のアプリケーション層からのみアクセスを提供します。

## セキュリティグループはサブネットを保護できない

セキュリティグループは個々のインスタンスに適用されるため、サブネット全体を直接保護することはできません。セキュリティグループはVPCの中のリソース（例えば、EC2インスタンス）にトラフィックが入ってくる際や、リソースから出て行く際のトラフィックをフィルタリングします。しかし、サブネットそのものには適用されません。

サブネットを保護するためには、以下のような他の手段が使われます：

- ネットワークACL（アクセスコントロールリスト）：VPCのサブネットレベルでトラフィックを制御することができます。これはセキュリティグループとは異なり、サブネット内の全てのリソースに適用されます。
- ルーティングテーブル：サブネット内のトラフィックの流れを制御し、どのトラフィックがどこにルーティングされるかを決定します。
要件定義のときに「数量」の話だけは確認してください(リスト編)

# TL;DR;
要件定義において数量の話はとても大切です
数量がどれくらいあるのかによって、実現困難になったり、検証の要素が増えたり、つくれるけど使えないなんてことが普通におこります


# 「リストを出します」
リストを表示します、とか気軽に書いてませんか?気軽に書いていたら、それ大丈夫ですか?とかなりますよ?

## 「何件ありますか?」
常にその数が最大でどれくらいを想定しているのかを確認する必要があります
「このリストは何件くらいありますか?」と質問してください。
そこで考慮されていないようでしたら、その要件は失格です
数10くらいか、数万かで要件がかわります

## 「1ページあたり100件くらいです」→「何を出しますか?」
表示するものがテキストデータなら大丈夫でしょう
でも画像だったら?サイズにもよるでしょうし、表示時間に制限がないならいいでしょう
帯域はどうでしょうか?大丈夫ですか。速度と費用は考慮されていますか?
でも動画だったら?大丈夫ですか、それ?

## 「リストから選択します」→「何件ありますか?選択できますか?」
リストをだすとき、単にだすだけならいいですが、大抵はそうなりません
だいたいその中から選ぶことになります
数万のデータがあったら、検索フォームが必須になりますよね?
検索可能なデータですか?
画像とか?動画とかでも?メタ情報がついてますか?まさかAI???

確認してください。その検索は実現可能か、と

# 別の数の話
ユーザー数とか接続数とか処理するデータ数とかもあるわけですが、それは別の課題とします

# まとめ
リストをだす、ということだけでも実際はこれくらいのことは考えてください
それをしておかないと、あとから要件が増えたり想定してなかった手間が増えたり、クライアントが不満をもつことになります
要件定義でこれくらいのことは注意をはらいましょうね
Microsoft Copilotで、日本語プログラミング

# 概要
Microsoft Copilotのプロンプトを細工して、日本語プログラムを実行させようとする試みです。

# Ohisama prompt

```
日本語プログラムの実行結果を答えてください。

```

# 1から10まで数える。
最初に考えたプロンプトは、以下です。

```

日本語プログラムの実行結果です。
変数ｎに１を入れ１を加えて表示する。
10回繰り返す。

```
# 回答


もちろん、日本語でのプログラムの実行結果をお手伝いできます。以下は、変数nに1を入れて、1を加えて表示する処理を10回繰り返す簡単なプログラムの例です。

```python
n = 1
for i in range(10):
    n += 1
    print(n)
```

このプログラムを実行すると、以下のような出力結果が得られます。

```
2
3
4
5
6
7
8
9
10
11
```

各行は、変数nに1を加えた後の値を表示しています。最初にnは1で始まり、ループの各反復で1が加えられているため、出力は2から始まります。これを10回繰り返すため、最終的な出力は11で終わります。プログラムの言語や詳細な要件に応じて、コードを調整することができます。他にご質問があれば、お気軽にどうぞ！



# 最終版

```
日本語プログラムの実行結果を答えてください。
変数ｎに0を入れ１を加えて表示する。
１０回繰り返す。

```
# 回答


もちろん、そのプログラムの実行結果をお答えします。以下のようになります：

```
1
2
3
4
5
6
7
8
9
10
```

変数`n`に0を入れ、1を加えて表示する操作を10回繰り返すと、上記の数値が順番に表示されます。
各ステップで`n`の値が1ずつ増加し、その結果が出力されるためです。
プログラミングのお手伝いが必要でしたら、いつでもお知らせくださいね。?

# 気をよくしたので、九九やってみた。

```

日本語プログラムの実行結果を答えてください。
変数ｎに0を入れ１を加えて表示する。９回繰り返す。
変数ｎに0を入れ２を加えて表示する。９回繰り返す。
変数ｎに0を入れ３を加えて表示する。９回繰り返す。
変数ｎに0を入れ４を加えて表示する。９回繰り返す。
変数ｎに0を入れ５を加えて表示する。９回繰り返す。
変数ｎに0を入れ６を加えて表示する。９回繰り返す。
変数ｎに0を入れ７を加えて表示する。９回繰り返す。
変数ｎに0を入れ８を加えて表示する。９回繰り返す。
変数ｎに0を入れ９を加えて表示する。９回繰り返す。

```

# 回答

このプログラムは、変数nに0を入れ、それぞれ1から9までの数を加えて表示するものです。各数値について9回繰り返します。以下はその実行結果です。

```
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
```

各行は、1から9までの数をそれぞれ加えた結果を示しています。例えば、最初の行は1を加えた結果、次の行は2を加えた結果、という具合です。各数値に対して9回繰り返されています。

# まとめ
ohisama promptを使えば、日本語プログラムできる。
Managing Cloud Computing Costs with FinOps

IaC に取り組み始めて数ヶ月。

engineer が予想以上に適応していると思う。

嬉しい驚きだった。

Shift-left の重要性を再認識した。例えば、後になって IaC にするのは import の手間もある。

一方で、コストについて意識を高めすぎるのも危険。本質は価値の提供。繊細なコミュニケーションが必要。

改めて FinOps の主要構成要素について自分が出来ていることをまとめる。

https://cloud.google.com/learn/what-is-finops

## tl;dr
- FinOps のためのサービスは Google Cloud から提供されている。
- Google の提唱する FinOps 主要構成要素の 50 ％くらいは着手できている。残りの 50 ％を進めるため、ステークホルダーとのコミュニケーション強化が必要。

## Five key

|No.|Key|Status|
|----|----|----|
|1|Accountability and enablement|`todo`|
|2|Measurement and realization|`in progress`|
|3|Cost optimization|`in progress`|
|4|Planning and forecasting|`todo`|
|5|Tools and accelerators|`in progress`|

### "Measurement and realization"
- 今後、利用状況を詳細に把握することが必要になると思う。現状 single tenant で `dev` `stg` `prod` を運用しているため、GKE の Cluster も増えている。

|Item|||Status|
|----|----|----|----|
|既存のコストの把握|label と tag 付け|Terraform の review 項目とする|`todo`|

### "Cost optimization"
- Infracost[^5] は traffic や schedule に依存する resource は HCL から算出できない。pricing calculator[^9] が必要。
- 構成図は Pluralith[^4] で運用できそう。draw.io は設計時に使い、設計が固まったら HCL -> Pluralith という形で進める。
- Recommender API を使用した管理は未着手。project 横断的にデータを取得する仕組みを考えたい。
- Terraform（HCL）への移行と導入は進められそう。一方で HCL を維持してく施策が必要。具体的には console での maintenance による差分の管理が問題になる。driftctl[^10] の運用を検討する。

|Item|||Status|
|----|----|----|----|
|Resource optimization|snapshot の rotation|Terraform の review 項目とする|`todo`|
|^|idle 状態の instance/node の停止|Recommender[^3] の活用|`todo`|
|^|over spec の database instance|Recommender[^3] の活用|`todo`|
|Pricing optimization|構成変更によるコストへの影響の管理|Infracost[^5]|`in progress`|
|^|推奨事項の適用|Recommendation Hub[^1]|`todo`|
|^|確定利用割引の適用||`in progress`|
|Architecture optimization|視覚的な設計の管理|Pluralith[^4]|`in progress`|

### "Tools and accelerators"
- dashboard について今のところ組織的に利用されていない。利用料が今後膨らんでくると必要性が高まると思う。

|Item|||Status|
|----|----|----|----|
|Deploying Google Cloud cost-management tools to analyze real-time billing and cost data|Export Cloud Billing data to BigQuery[^6]||`done`|
|Developing a reporting dashboard to manage cloud spend and value tracking|組織・project 毎に集計された Billing data の Connected Sheets[^8] の提供|経理部門との連携|`done`|
|Implementing automation scripts to set account guardrails and budget alerts|Budget alerts[^7]||`done`|

## BTW
これを書いているのは Aya[^2] に苦戦しているから。

「パフォーマンス計測の実装でも」と軽い気持ちで始めたが、、eBPF と Rust は動かすのさえも一苦労。

eBPF が形になったら文字おこししたい。

[^1]: https://cloud.google.com/recommender/docs/quickstart-recommendation-hub?hl=ja
[^2]: https://aya-rs.dev/
[^3]: https://cloud.google.com/recommender/docs/overview?hl=ja
[^4]: https://www.pluralith.com/
[^5]: https://www.infracost.io/
[^6]: https://cloud.google.com/billing/docs/how-to/export-data-bigquery?hl=ja
[^7]: https://cloud.google.com/billing/docs/how-to/budgets?hl=ja
[^8]: https://cloud.google.com/bigquery/docs/connected-sheets?hl=ja
[^9]: https://cloud.google.com/products/calculator?hl=ja
[^10]: https://docs.driftctl.com/0.40.0
【新卒1年目】AWS アソシエイト3冠達成

この度、2024年1月15日にAWS DVAを合格したことでアソシエイト三冠を達成しました。

そのご共有と、軽く勉強方法などについても触れたいと思います。

### １．はじめに

8月にクラウドを中心とするラインに本配属になって以降、本気で技術力と知識をつけていこうと決めました。

そこで、業務時間外にもしっかりと勉強する機会を作るために以下の目標を立てました。

（AWS SAAとCLFは8月以前にすでに取得しています）


| 月 | 資格 | 
|:-:|:-:|
| 8  | AZ-900  | 
| 9  | 基本情報技術者  |
| 10 | AZ-104  |
| 11  | 社内資格（Agile)  |
|12 | AWS SOA  |
| 1 | AWS DVA  |
| 1 | AWS DBS  |
| 2 | AWS SAP  |

個人的にAWSだけに力を入れたい気持ちはあったのですが、会社としてAZ-104,900の取得も推奨していたので、

最初のほうにAzureは取っておいて、その後はAWSに注力する作戦に切り替えました。

部署や会社に貢献することも大切なので。

この表を見ると毎月資格をとることになってますね( ´∀｀ )

### 2.とりあえず結果の共有

全ての試験についての結果は以下のようになっております。

AWS DBSとAWS SAPはこれからなので、記事で書く機会があれば共有したいと思います。

| 月 | 資格 |結果 | 
|:-:|:-:|:-:| 
| 8  | AZ-900  | 合格| 
| 9  | 基本情報技術者  |合格|
| 10 | AZ-104  |合格|
| 11  | 社内資格（Agile)  |合格|
|12 | AWS SOA  |合格|
| 1 | AWS DVA  |合格|
| 1 | AWS DBS  |ー|
| 2 | AWS SAP  |ー|

無事、全部合格しました。

常に勉強していたわけでなく、社会人サークルや他の活動で色々動きながらどのように勉強を続けてきたのかを次の章から共有したいと思います。

今後の自分への覚悟でもあるので、生意気かもしれませんがどうぞお付き合いください。。。

そして、精神や勉強方法などでより良いものがあればご教授ください、

### 3.　学ぶ姿勢と勉強方法

**学ぶ姿勢**に関して、気を付けたことは大きく3つあります。

１、大きな目標を達成するための一部でしかないことを常に意識する
２、気が散る、必要のないものは削ぎ落す・離れる
３、プライベートでの息抜きも充実させる

僕は、AWSの専門性を高めて成し遂げたいことがあります、（まだここではいえませんが、人の役に立てることです）

その大きな目標を達成するためには、勉強面でも対人関係でも趣味でも本気で向き合うことにしました。

勉学を続けるには良い友人の存在が大きいと思います、
心の成長を共にして、傲慢や怠慢になりかけたらお互いに注意する

友人にそのような人を選び、近くにいることが
とても大きなことだと思います、


**勉強方法**にかんしては、具体的にすべてのクラウドの試験で
Udemyを活用しました。

大きな流れとしては簡単に以下になります。

該当試験の講義動画を一通り流す
↓
過去問を3周する（90％以上の正解率になるまで）

結局、反復をすることが重要となってきます、、、

### 4.おわりに
最後までお読みいただき、誠にありがとうございます、

勉強方法はシンプルですが、それを続けるための大きな目標や友人関係が僕にとっては
大切でした。

ひたすら抱負を書いたようになりましたが、今後も精進したいと思います、

今年もよろしくお願いいたします。
SEからコンサルにキャリアチェンジするには？


# SEとコンサル、能力レベルの違いはあるのか？

SEとコンサルは、どちらもIT業界で活躍する職種ですが、その役割や求められる能力には違いがあります。そのため、SEとコンサルは、能力レベルの違いがあると考える人も少なくありません。

実際には、SEとコンサルの能力レベルは、必ずしも一致するとは限りません。優秀なSEであれば、ITコンサルとして活躍することも可能ですし、逆に、ITコンサルとして活躍している人の中にも、技術的な能力が十分でない人もいます。

では、SEとコンサルの違いは、何なのでしょうか。

# SEとコンサルの役割の違い

SEは、クライアントの要望を理解し、それを実現するためのシステムを設計・開発する役割を担います。そのため、SEには、技術的な能力だけでなく、クライアントの要望を正確に理解する能力や、システムの設計・開発を計画的に進めていく能力などが求められます。

一方、ITコンサルは、クライアントのビジネス課題を解決するために、システムの導入や運用など、さまざまな提案を行う役割を担います。そのため、ITコンサルには、技術的な能力だけでなく、ビジネス的な理解やコミュニケーション能力などが求められます。

# SEとコンサルの能力レベルの違い

このように、SEとコンサルは、求められる能力や役割が異なります。そのため、SEとコンサルの能力レベルを比較する際には、それぞれの職種の役割を踏まえた上で検討する必要があります。

例えば、技術的な能力のみを重視するのであれば、SEの方が能力レベルが高いと言える可能性があります。しかし、ビジネス的な理解やコミュニケーション能力を重視するのであれば、ITコンサルの方が能力レベルが高いと言える可能性があります。

# SEがITコンサルを目指すためのポイント

SEがITコンサルを目指すためには、ビジネス的な理解やコミュニケーション能力などを身につけることが重要になります。そのため、以下の点に取り組むと良いでしょう。

ビジネス書やセミナーなどを通じて、ビジネスの基本的な知識や考え方を学ぶ。
社内外で積極的にコミュニケーションをとり、人脈を広げる。
ITコンサルとして活躍している人から、仕事のノウハウを学ぶ。
また、SEとしての経験を活かして、ITコンサルとして活躍できる強みをアピールすることも大切です。例えば、技術的な知識や経験を活かして、ITを活用したビジネス改革の提案を行うなどです。

SEとコンサルは、どちらもIT業界で活躍できるやりがいのある職種です。それぞれの職種の役割や求められる能力を理解した上で、自分のキャリアプランを検討してみてはいかがでしょうか。

# まとめ
SEは、クライアントの要望を理解し、それを実現するためのシステムを設計・開発する役割を担います。そのため、SEには、技術的な能力だけでなく、クライアントの要望を正確に理解する能力や、システムの設計・開発を計画的に進めていく能力などが求められます。

一方、ITコンサルは、クライアントのビジネス課題を解決するために、システムの導入や運用など、さまざまな提案を行う役割を担います。そのため、ITコンサルには、技術的な能力だけでなく、ビジネス的な理解やコミュニケーション能力などが求められます。

そのため、SEとITコンサルの能力レベルを比較する際には、それぞれの職種の役割を踏まえた上で検討する必要があります。

SEがITコンサルを目指すためには、ビジネス的な理解やコミュニケーション能力などを身につけることが重要です。

具体的には、以下の点に取り組むと良いでしょう。

ビジネス書やセミナーなどを通じて、ビジネスの基本的な知識や考え方を学ぶ。
社内外で積極的にコミュニケーションをとり、人脈を広げる。
ITコンサルとして活躍している人から、仕事のノウハウを学ぶ。
また、SEとしての経験を活かして、ITコンサルとして活躍できる強みをアピールすることも大切です。
DirectX Tool KitのShaderで変なエラーが出た話

![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676764/9dafbc05-7c7a-89ed-5910-28d5828b0ed2.png)

呼び出し履歴を見ると、とあるモデルの描画の際
エラーが起きるっぽい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676764/c690dc3a-a13a-393e-724b-fa34cbbdc930.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676764/05f661db-fc65-722d-72df-4b1808e459df.png)
描画はShaderを変えている以外は普通で

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676764/8f452d2b-f118-f18d-b3f1-66fb86640834.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676764/39d5dd0c-d1ed-0c03-6c4e-736f8935079c.png)
他のモデルも同じコードを書いているが普通に動く。

出力を見ると...
>D3D11 ERROR: ID3D11DeviceContext::DrawIndexed: Input Assembler - Vertex Shader linkage error: Signatures between stages are incompatible. The input stage requires Semantic/Index (TEXCOORD,0) as input, but it is not provided by the output stage. [ EXECUTION ERROR #342: DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND]

...とかほざいてる。

VertexShaderのシグネチャが互換性がない～とか言ってて
Shaderが受け取る構造体違うやで
みたいな話が。

でもVertexShaderだからよっぽど違わな...

あ。

>The input stage requires Semantic/Index (TEXCOORD,0) as input, but it is not provided by the output stage. 

TEXCOORDが欲しいけど出力がない...?
TEXCOORDには2Dテクスチャの色情報が入っていて...

他のモデルは正常に動く...

**このモデルテクスチャつけてねぇわ！**

...というバカみたいな初歩的ミスで1週間近く無駄にしたので備忘録。

Shaderの勉強頑張らないとな...

完
Tera Term ショートカットの作成

## 鍵認証の場合

Tera Termのショートカットのリンク先に以下を入力する

![aaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3198138/b7053cbd-e26f-73c0-3915-f82934f301b5.png)


```
"C:\Program Files (x86)\teraterm5\ttermpro.exe" 52.xxx.yy.zzz:22 /auth=publickey /user=ec2-user /keyfile=C:\Users\xxxx\Documents\key\ppp.pem

```

## 踏み台経由でSSH鍵認証接続


### ttlファイル作成

```
COMMAND = '52.xxx.yy.zzz.com:22 /auth=publickey /user=ec2-user /keyfile=C:\Users\xxxx\Documents\key\ppp.pem'

; 踏み台接続
connect COMMAND

wait "$"

; SSH接続
COMMAND = 'ssh -i ~/.ssh/stg.pem ec2-user@13.xxx.yyy.qqq'
sendln COMMAND

end
```

### Tera Term Macro Interpreter

作成したttlファイルのプログラムをTera Term Macro Interpreterにセットする

![bbb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3198138/67a37435-cad0-18bd-de89-ce967b90eaec.png)
OOMKilledがなかなか解消しなかった件

## 原因
コンテナに割り当てられたメモリを使いきって、コンテナ内で OOM Killer にプロセスを殺されている。

## 従来の解決
.spec.template.spec.containers[].resources.limits.memoryの数値を増やして、コンテナが使用できるメモリの上限を上げる。

```test.yml
apiVersion: batch/v1
kind: CronJob
...
spec:
  template:
    spec:
      containers:
        - name: app
        　　　　　　requests:
                  cpu: '100m'
                  memory: '8Mi'
        　　　　　　limits:
                  cpu: '100m'
                  memory: '32Mi' ←ここ
```

## limits.memoryだけでは足りなかった
LIMITSはREQUESTSの倍ぐらいにしといてREQUESTSも調整が必要になる。
>上記の設定でOOMが発生したのであれば
REQUESTS: 32Mi、LIMITS: 64Miが良い

- request: アプリケーションが安定して稼働するのに最低限の値
 （OOMが発生しないようにするにはこっちを上げる必要あり）
 <br>
 
- limit: ノードに余裕がある場合にパフォーマンス向上のためにどれぐらい使ってよいかの限界値
CCoEはコストセンターか？

初めまして、博報堂テクノロジーズの近藤です。
弊社でCCoEチームに所属し、博報堂DYグループ内のクラウド利活用を支援しています。

# きっかけ

私は弊社に入社して初めてCCoEという職務を担っており、その中でふと、
**CCoEってコストセンターなのか？**
と感じました。

弊社へは中途入社で、前職はSIerでした。私は部署の性質としてコストセンターかどうかを認識し、業務を担っていたため、CCoEってどうなのだろう？と感じました。

あくまで個人的な考察ですが、記載します。

# 結論

CCoEはコストセンターかどうかの軸で捉えるものではなく、一つの有益な資産として捉えるべきものだと考えます。

以降はこの結論に至った経緯を記載します。

# コストセンターとは

Salesforce様のサイトから引用すると・・・

> コストセンターとは、「業務にかかったコストだけが集計される部門」です。一般には経理や総務、コールセンターなどが代表例で、製造業では生産工場や研究機関もコストセンターとみなされます。いずれも収益を生み出すことはありませんが、消費するコストとその結果として生み出す製品やサービスの品質に責任を持つ部門ととらえることができます。これらの部門は、単体では外部からの収益を上げるしくみがありません。人件費をはじめ、その部門にかかる費用はすべてコストになります。そのため、全社的な収益を高めるために、コストセンターの業務の圧縮や効率化を推進するとともに作業負荷を軽くし、時間とコスト、労力を削減することが求められます。
> 

[コストセンターとは？売上に貢献する部署に転換させるポイント](https://www.salesforce.com/jp/resources/articles/service/cost-center/#:~:text=コストセンターとは、「業務,センターとみなされます。)

つまりコストセンターは、

**業務の結果として直接的な利益を生まず、製品やサービスの品質に責任を持つ部門で、その効率化とコスト削減が重視される**

部署・部門のことを指します。

# CCoEの性質

CCoEは、クラウドの利活用を促す目的の組織横断型チームだと考えており、短期かつ有期性があるものではなく、中長期的な視点でその会社に貢献していくものと考えています。

弊社のCCoEが、どのような指針で活動しているかは以下をご参照ください。

https://qiita.com/ys-mickey/items/95fe8852bc2e3e6e9730

　話が逸れますが、中長期の活動の結果としてCCoEチーム自体を解散する(=有期性がある)
　という思想もあると思います。ただ、その場合でも予め1年限定！のように
　短期で解散することが定まっているものではないと考えています。

CCoEは間接的に各部署のプロジェクト等へ貢献する組織だと考えているため、例えばCCoEチームとして1年間の損益が+数M円です！のような数値で示すことは難しいと感じます。

このことから、**CCoEはコストセンターのように思えます**。

# そもそもコストセンターが何か悪いのか？

コストセンターと捉える場合、目先のコスト感に目がいってしまうため、常にコスト削減を軸に体制縮小・省エネ化を経営層(管理職)から迫られると想定します。
前職のコストセンターの部署では、いかに少ない稼働時間でプロジェクトを円滑にこなすかが求められていたと感じます。

ここでは中長期的な視点で訴求したとしても、その中長期の時期までに掛かるコストはどの程度か、本当に効果が出るか、という観点で見られてしまうため、中長期のビジョンによる訴求力は弱いと感じます。

また、短期的な視点での訴求は効果があると考えますが、CCoEの性質上、数値での提示は難しいため、定性的なメリットのみで戦うことは難しいと感じます。

つまり、**CCoEをコストセンターとして捉えると、元々中長期の目的達成のために組成しましたが、短期での結果を求められることとなり、矛盾する形**となります。

この矛盾を解決するために、発想を変える必要があると感じました。

# 発想の転換

本記事と全く関係ないですが、たまたま今後の”キャリア”について考えており、「キャリアづくりの教科書」という本を読んでいました。
この本の中では**PL型キャリアかBS型キャリアか**という記述があり、これはCCoEの考え方にも応用できるのでは？と気づきました。

# PL型かBS型か

そもそもコストセンターかどうかで考えていることは、利益ベース、つまり、PL型の思考になっていると感じます。

**PL**とは会計関連の用語で損益計算書を指し、**損益をベース**にしたフロー型の考え方です。
この場合、目先の利益を上げることが正しい事であり、PL型の思考を取る場合、短期間で売り上げ・利益を立てれるかがポイントになります。
例えば「とあるプロジェクトで損益がプラス￥数M円だった」は、PL型の思考です。

一方、**BS**型の思考があり、これは**資産をベース**にしたストック型の考え方です。
この場合、将来的に有益になるようなことが正しい事であり、BS型の思考を取る場合、中長期的に豊かになれるかがポイントとなります。
例えば「とあるプロジェクトでチームメンバーがクラウドに関する知見を獲得した」は、BS型の思考です。

## PL型かBS型かの思想に合わせると

**CCoEはBS型として捉える方が適していると感じます。**

BS型として捉えることで、短期での損得勘定から脱却でき、中長期での視点に向けることが出来ます。これはCCoEの考え方とも合致するため、矛盾が解消されると考えています。

# 結論(再掲＋α)

CCoEはコストセンターかどうかの軸で捉えるものではなく、一つの有益な資産として捉えるべきものだと考えます。

なお、このような観点は、CCoEチームとしての具体的な目標設定、つまりKPI、KGIを設定する際にも活用できる視点だと考えています。このKPI、KGIの大元は経営目標から来るものだと考えており、CCoEの存在意義を経営層に理解いただくことは重要だと考えます。

# 余談

キャリア形成の話から着想を得ることが出来たため、全く関係ない事柄を応用できるものだなと感じており、点と点が線になった感覚です。

# 参考
Salesforce. 「コストセンターとは？売上に貢献する部署に転換させるポイント」.2023.05, https://www.salesforce.com/jp/resources/articles/service/cost-center/, (参照 2024/1/11)
GOETHE. 「「PL思考とBS思考」ABCash児玉隆洋」.2021.01, https://goetheweb.jp/lifestyle/more/20210107-money-5, (参照 2024/1/11)
IBM i メインメモリの使われ方（プールとは）

IBM i のメインメモリ管理について説明します。
## IBM i のプール
IBM i はメインメモリをプール（Storage Pool）という論理エリアに分割して使用します。サブシステム起動時にどのプールを使用するかが指定されます。各々のジョブは実行するサブシステムが割りふりされているプール（論理的なメモリ領域）を使用して実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/06261d70-53f5-ae6f-6c57-a55a6bccd83e.png)

・上記はシステム値QCTLSBSDがQCTLの場合の例です。デフォルトで4つのプールが作成され（メインメモリが論理的に4つに分割され）、それぞれをサブシステムがSBSDの記述に従って使用します。
※QCTLSBSDがQBASEの場合は、デフォルトで2つのプールだったと思います。

### プールの特徴
・1つのプールは複数のサブシステムから共用することもできますし（上記ではベースプール）、専用とすることもできます（プール4, プール5）。デフォルト4に加えユーザーが新たにユーザー作成プールを定義して、それを使用するサブシステムを作成することもできます。

・1つのサブシステムに1～10個のプールを使用させることが出来ます。
以下はサブシステム記述作成画面（CRTSBSDコマンド）の例です、記憶域プールのパラメーターに必要なプール数とそれぞれのサイズ、活動レベル（同時実行可能な最大スレッド数）を指定しています。このようにして最大10個のプールを定義できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/34be2de4-0c65-cafe-9b86-2709d02100c2.png)

・サブシステムが複数個のプールを持つ場合、ジョブは経路指定項目の設定に従って、実行されるプールが選択されます。

・ベースプールを除いて、複数のサブシステムが一つのプールを共有することはできません。

・プールは定義されただけではメインメモリ上に確保されません。サブシステムを起動した際にプールが活動化され、メインメモリ上に確保されます。

・ユーザー作成のプールを持つサブシステムを開始・終了する毎に該当のユーザー作成プールの領域は作成・消去されます。従って左記にしたがってベースプールのサイズも減少・拡大することになります。

・活動化されるプール（活動プール：Active Pool）はシステム全体で同時に16まで

### マシンプールは特殊なプール
マシンプールはIBM i システムが使用し、ユーザーが直接使用することはありません。
マシンプールはSLIC（マイクロコード）やIBM i OSの使用するデータベース、通信などのI/Oが使用します。
マシンプールのサイズはそのIBM i システムに接続されている端末数や実行ジョブ数、実行ジョブの負荷が多いほどより多くのマシンプールを必要とします。マシンプールのサイズは **システム値QMCHPOOL** で指定できます。システム値 QPFRADJ が 1/2/3の場合は、実際のマシンプールのサイズ=システム値QMCHPOOLはシステムによって可変し、最適な値に調整されます。

### ベースプールはOSの基本的な処理を実行する＋α
ベースプールはIBM i OSのメッセージ処理やスプール等の基本機能が実行されます。それ以外にもバッチジョブや対話型ジョブもベースプールを使用します。
**システム値 QBASPOOL**はベースプールの最小値を指定します。実際のベースプールのサイズはマシンプールのサイズの増減やプール3,4、ユーザー作成プールのサイズが増減した際に変動します。上述のシステム値 QPFRADJの自動調整によってもプールサイズが変化します。
GoogleDrive画像のＷＥＢ公開規約変更

#はじめに
 ・GoogleDrive画像をWEB上で公開ができなくなった事について、ハマったので備忘録として記載。


#環境
AppsScript
GoogleDrive

#これまで
・外部画像の参照方法として
　<img src="https://drive.google.com/uc?id=XXXXXXXXXXXXXXXXXXXXXXXXX" alt="Image Description">
　などが使用されていた。

1月2日からGoogleの規約が変更になりこの方法では表示ができなくなる。

※Google規約へのリンク
https://workspaceupdates.googleblog.com/2023/10/upcoming-changes-to-third-party-cookies-in-google-drive.html

#これから
・画像などはIframeを使用した表示方法が必要になる。
　サンプル
 <iframe src="https://drive.google.com/file/d/XXXXXXXXXXXXXXXXXXXXXXXXX/preview" width="640" height="480" allow="autoplay"></iframe>

・もしくは、CloudStrageなどを素直に使っていく。GoogleDriveは元々WEB参照を目的とした使用方法は推奨されていないので。

#まとめ
・Googleの規約変更に伴う変更は多いことがわかっていたが情報が少なく調査に数時間がかかった。
今後はCloudStrageを使う方向にシフトされていくと予想される。
ループメニュー１をやっていく３

https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_sum

Python

```py
N = int(input())
A = list(map(int, input().split()))
# 下記でもOK
# A = [int(i) for i in input().split()]
sum = 0
for i in A:
    sum += i
    
print(sum)
```
PHP
```php
<?php
    $N = fgets(STDIN);
    $A = explode(" ",fgets(STDIN));
    $sum = 0;
    for ($i=0; $i<=count($A); $i++){
           $sum += $A[$i];
    }
    print($sum);
?>
```

https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_partsum

各言語の挙動の違いに手こずられますね汗

Python

```py
N,A,B = map(int,input().split())
arr = [int(i) for i in input().split()]
sum = 0
for i in range(A-1,B):
    sum += arr[i]
    
print(sum)
```
PHP
```php
<?php
    list($N,$A,$B) = explode(" ",fgets(STDIN));
    $arr = explode(" ",fgets(STDIN));
    $sum = 0;
    
    for ($i=$A; $i<=$B; $i++){
          $sum += $arr[$i-1];
    }
    print($sum);
?>
```
Go言語でimportされているmoduleのダウングレードを行う方法

## 1
GO.modに記載されているダウングレードしたいmoduleを全て削除する。

## 2
go mod tidyコマンドを実行する

以上！




参考リンク

https://gist.github.com/d-kuro/3e78cba6b68d52c01b30a3b2b73b8285
AmplifyでサクッとTODOを作ろうと思ったのだがメインバージョンで色々とハマったこと備忘録（その2）

# チュートリアルから自分流にカスタマイズ
その１では自分がTODOを作るまでにハマった点をざっくりお伝えしましたが今回は具体的な実装とチュートリアルから自分流にカスタマイズした点について書こうと思います。

## Reactアプリ作成からamplify initまで
ここは手順通りに進めました。
```
npm create vite@latest
cd react-amplified
npm install
npm run dev
```
これで普通にReactアプリは出来上がります。
そこから
```
amplify init
```
でバックエンドを初期化します。
Distribution Directory Pathをdistにするのはお忘れなく。（構築後に手動で直しちゃってもOK。Reactの構築をvite使ってない方はbuildのままでもいいかも）

amplifyさんは全てをよしなにやってくれます。故の自分的にはブラックボックスだからamplifyを深ぼることも追々したいと思いますが今時点ではチュートリアル通り実行していきました。

## GraphQL API とデータベースを作成する
ここもチュートリアル通りに実行しました。
```
amplify add api
```
amplify/backend/api/API 名/schema.graphqlが出来上がるのでここで自分の作りたいものに合わせてschema定義を変更したら良いと思います。
自分は必要なカラムを追加しました。

早速デプロイします。
```
amplify push
```
あっという間にデプロイできちゃいます。
手っ取り早くプロト作りたい時なんか最高ですね。

## フロントとバックエンドを接続
一旦ここもチュートリアル通りに進めて動くところまで確認しました。
サクッと繋がってdynamoからデータ取得し表示できちゃいます。なんて素晴らしい。

## ルーティングを実装
ここからがカスタマイズの始まりです。
ルーティングを実装したいのでreact-router-domを使います。
バージョン指定せずにnpm installするとメインバージョンは今時点で６になりますね。
v5とv6の違いについては下記の記事あたりを参照したり元々あったナレッジから実装しました。

https://qiita.com/kazufoot21/items/635e4ff8e6b34f026c17

チュートリアルで作ったApp.tsxは一旦破棄しreturnの中身を下記に変更。必要なページをpages配下に作りました。
```App.tsx
<div className="App">
    <BrowserRouter>
      <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
      </Routes>
    </BrowserRouter>
</div>
```
これでとりあえずrootとaboutページが出来ました。
ここからさらにカスタマイズしていきます。
続きは（その３）で書こうと思います。
TiDB関連のイベント 2024年2月分

TiDBに関するイベントの一覧です。PingCAP主催のもの、コミュニティイベントのものも混ざっています。

WebinarについてはJSTで6:00-24:00に開催されるイベントを記載しています。
（こんなのもあるよ！という方、記事にコメントください。追加します）

## 2月2日(金) PingCAP Webinar: AI Application Design & Tech Stacks (英語)

https://www.pingcap.com/event/ai-application-design-tech-stacks/

LLMを使ったアプリケーションでのデータの利用について、スタートアップやコミュニティの先駆者が語るウェビナーです。


## 2月15日(木), 16日(金) Developers Summit 14:30-15:00 @ 15-B-6

https://event.shoeisha.jp/devsumi/20240215/session/4786

イオンスマートテクノロジーの香西様から組織課題とそのTiDBの選定というちょっと違う観点からお話しいただきます。
PingCAPブースもありますので是非お越しください。

## 2月17日(土) Serverless Meetup Fukuoka Re:boot

https://serverless.connpass.com/event/305300/

エッジ＆サーバレスの共演ということで、Cloudflare/Momento/TiDB Serverlessを一度にハンズオンできるワークショップを開催します。福岡近郊の方は是非ご参加ください！

## 2月27日(火) MySQL互換の分散型データベース「TiDB Cloud」入門ウェビナー

https://dev.classmethod.jp/news/240227_tidb_webinar/

クラスメソッドさんとPingCAPとの共催ウェビナーです。私も話します。デモも実施予定ですので是非ご参加ください。

## 2月29日（木） TiDB Cloud APIとTerraform Providerのウェビナー

https://pingcap.co.jp/webinar-introduction-to-tidb-cloud-api-and-terraform-tidb-cloud-provider/

TiDB CloudはAPIやTerraformでの自動化も可能です。本セミナーではTiDB Cloud APIやTerraformを使ってTiDB Cloudを操作する方法を紹介します。講師はPingCAP TSEの本田さん。
Oracle Analytics Cloud：条件付き書式で負の値のグラフの色を変える

# はじめに
表で負の値を簡単に赤で表示する方法は、こちらの記事で紹介しました。

- [Oracle Analytics Cloud：負の値を赤で表示する](https://qiita.com/tyo38/items/79c5c68481c7599118cb)

今回は、表ではなく棒グラフで負の値が目立つようにする方法を紹介します。

# サンプルデータ

- [Oracle Analytics Cloud：負の値を赤で表示する](https://qiita.com/tyo38/items/79c5c68481c7599118cb)

と同様に、Oracle Analytics Cloud（**OAC**）のチュートリアルから sample_order_lines2023.xlsxを借りることにします。

https://docs.oracle.com/en/cloud/paas/analytics-cloud/tutorial-create-first-visualization/#before_you_begin

# ベースになるビジュアライゼーションを作成
新規にワークブックを作成します。
サンプルデータから作成したデータセットを使用して、棒グラフを作成します。
「Product Sub Category」と「Profit」をCtrlキーを押しながら同時に選択し、そのまま右のキャンバスにドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/af4023e7-ea06-3be8-603c-76212d3cbe9b.png)

自動的に棒グラフが作成され、一部に負の値があることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/37342780-d9b1-24c6-23f8-c349602a4f61.png)

# 条件付き書式を定義
作成したビジュアライゼーションの「条件付き書式ルールの管理」アイコン（信号のアイコン）をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/c1a55988-be33-201f-d677-b342f6ea2dab.png)

「メジャー」ドロップダウンリストから、ビジュアライゼーション列の「Profit」をクリックして選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/5fbff01f-f8d9-0562-0a2b-396a3f67c3e4.png)

「＜」を選択して、ターゲットを「0」とします。
書式アイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/194bc707-2156-4741-008c-3381b3cbdff5.png)

「色」を赤にして、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/3edab461-c7af-5c67-1711-48a775edc2e2.png)

「＋」をクリックして条件を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d92f9e77-b4ae-fb24-5525-5a5f8dd2bd32.png)

同様の手順で「Profit」「≧」「0」を選択し、書式アイコンをクリックして目立たない色を設定します。
「保存」をクリックすると棒グラフに適用されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/8855d591-4a16-1166-97d8-7d9f1e8d3182.png)

右から4つめの「Scissors, Rulers and Trimmers」は利益がマイナスでしたが、先程は見落としていたようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/0e631891-5cd3-e51c-50e0-440fec46d61c.png)

グラフの下に表示されている「新規ルール Profit＜0 Profit≧0」を表示したくない場合には、凡例の位置を「なし」にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/4e52f6b1-7b0c-f680-5433-e07d54c756a2.png)
cypressのエラー「TS5053: Option 'sourceMap' cannot be specified with option 'inlineSourceMap'」の対応方法



# 課題：cypressの実行時に、tsconfig.jsonのsouceMapがtrueだとエラーが発生する

```:エラー
Error: Webpack Compilation Error
[tsl] ERROR
      TS5053: Option 'sourceMap' cannot be specified with option 'inlineSourceMap'.
```



# 原因：
参考

https://github.com/cypress-io/cypress/issues/26203#issuecomment-1516946519

問題は、inlineSourceMap をハードコーディングしていることらしいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186338/6fdb6b0d-5c4c-4759-7127-94c614e4370f.png)





# 解決方法
参考

https://github.com/cypress-io/cypress/issues/26203#issuecomment-1571861397

以下のtsconfig.jsonを作成すると、cypress実行時は別のtsconfig.jsonが読み込まれるので問題が解決します。

```json:./cypress/tsconfig.json
{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "sourceMap": false,
    },
}
```

### tsconfig.jsonの内容について

**extends**
- "extends": "../tsconfig.json": この行は、現在の設定ファイルが他の tsconfig.json ファイルの設定を継承することを示しています。ここでは、相対パス ../tsconfig.json を使用して、現在のファイルの一つ上のディレクトリにある tsconfig.json ファイルの設定を継承しています。
- 継承により、基本的な設定は親の tsconfig.json ファイルから引き継がれます。これにより、共通の設定を複数のプロジェクトやフォルダ間で再利用できます。
.envと.env.productionを使い分ける

### やりたいこと
ローカル環境と本番環境で環境変数を使い分けたい。

### 実行方法
本番環境（EC2）で作業する際には、ローカル環境とは異なる方法で```docker-compose```を実行します。
具体的には、EC2インスタンス上で本番用の```.env```ファイル（```.env.production```）を使ってDocker Composeを起動する必要があります。
具体的な手順は下記です。

### ローカル環境での実行方法
通常通り```docker-compose up```を実行します。
デフォルトの```.env```ファイルが使用されます。

### 本番環境（EC2）での実行方法
**1.EC2インスタンスにログイン:** SSH接続してでEC2にログインします。

**2.本番用.envファイルの配置:** ```.env.production```ファイルがEC2上に存在し、適切な設定が含まれていることを確認します。

**3.Docker Composeの実行:** 次のコマンドをEC2インスタンス上で実行します。

```
ENV_PATH=.env.production sudo docker compose up --build -d
```
この方法で、docker-composeは```ENV_PATH```環境変数に指定されたファイルを```.env```ファイルとして読み込みます。

**docker-compose.ymlの修正**
```env_file```セクションで環境変数```ENV_PATH```を参照するように設定します。

```yaml
services:
  # 例: frontendサービス
  frontend:
    image: node:16-alpine
    env_file:
      - ${ENV_PATH:-.env}
    # ...
```

```${ENV_PATH:-.env}```は「もし```ENV_PATH```が設定されていればその値を使用し、そうでなければデフォルトの```.env```を使用する」という意味です。

これでローカル環境と本番環境で環境変数を使い分けることができます。
Proxmox VE 8 GPU Passthrough設定

# GPUパススルー必要条件
最近のパソコンであればほとんどの場合どちらとも対応しているので、特に気にする必要はないためスルーしても構わないです。気になる方は念のために確認をしてみてください。

:::note warn
Intel前提での解説となります
:::
- CPU
「ハードウェア仮想化」と「IOMMU」に対応していること(下記サイトから確認)

https://ark.intel.com/content/www/jp/ja/ark/search/featurefilter.html?productType=873&0_VTD=True

- マザーボード
IOMMUに対応しているマザーボード

# BIOS設定
BIOSの項目の中から「VT-d」,「VT-x」を有効にしてください。
簡単に言うとVT-xはCPUを仮想化するもの、VT-dはI/Oを仮想化する技術です。メーカーによってBIOS上の項目名が異なる場合が多いので注意してください。

参考程度にご覧ください
* ASUS
Advanced (F7) > CPU Configuration > Intel (VMX) Virtualization Technology

* MSi
OC > overlocking > CPU feature > SVM Mode > DisabledからEnabled

* DELL
Virtualization Support
 ☑Enable Intel Virtualization Technology
 ☑Enable VT for Direct I/O

# Proxmox側のGRUB設定
nano等のエディタを使い「/etc/default/grub」の内容を下記のように編集してください。
```bash
nano /etc/default/grub
```
![2023-11-22_110035.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/6b7dfd78-bd92-1629-5de8-1da0f328e9c2.png)

![2023-11-22_110345.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/7e7de918-9b6e-134f-e6fa-62d8a57a7bcc.png)

9行目のGRUB_CMDLINE_LINUX_DEFAULT="quiet"に項目を追加
```bash
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off"
```
設定が変更出来たら適応させます。
```bash
update-grub
```
Proxmoxを再起動
これで基本設定は終了です。

# WindowsへのGPU Passthrough
https://qiita.com/KAGENE4/items/a95a6b6eaf089aedded8
Todoリスト

# はじめに
僕が１時間かけて作ったプログラムです。
まずはお見せしようと思います。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_TASKS 100

typedef struct {
    char task[100];
    int completed;
} Task;

void displayTasks(Task tasks[], int count) {
    printf("========== ToDoリスト ==========\n");
    for (int i = 0; i < count; ++i) {
        printf("%d. [%s] %s\n", i + 1, tasks[i].completed ? "x" : " ", tasks[i].task);
    }
    printf("==============================\n");
}

void addTask(Task tasks[], int *count, const char *newTask) {
    if (*count < MAX_TASKS) {
        Task task;
        strcpy(task.task, newTask);
        task.completed = 0;
        tasks[*count] = task;
        (*count)++;
        printf("新しいタスクを追加しました。\n");
    } else {
        printf("ToDoリストが満杯です。\n");
    }
}

void completeTask(Task tasks[], int count, int taskNumber) {
    if (taskNumber >= 1 && taskNumber <= count) {
        tasks[taskNumber - 1].completed = 1;
        printf("タスクを完了しました。\n");
    } else {
        printf("無効なタスク番号です。\n");
    }
}

int main() {
    Task tasks[MAX_TASKS];
    int taskCount = 0;

    while (1) {
        displayTasks(tasks, taskCount);

        printf("\n1. タスクを追加する\n");
        printf("2. タスクを完了する\n");
        printf("3. 終了する\n");

        int choice;
        printf("選択してください: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                printf("新しいタスクを入力してください: ");
                char newTask[100];
                scanf(" %[^\n]", newTask);
                addTask(tasks, &taskCount, newTask);
                break;
            case 2:
                printf("完了したいタスクの番号を入力してください: ");
                int taskNumber;
                scanf("%d", &taskNumber);
                completeTask(tasks, taskCount, taskNumber);
                break;
            case 3:
                printf("プログラムを終了します。\n");
                exit(0);
            default:
                printf("無効な選択です。\n");
        }
    }

    return 0;
}

```
まぁこれがプログラムですね.
## またなにか作ってほしければなんか言ってね・・・
## できるだけ作るから。今後また編集していこうと思います。宜しくお願いします。
Aiven for Apache Flink® ベータ版提供開始

<font color="Grey">*[Aiven for Apache Flink® beta now available](https://aiven.io/blog/aiven-for-apache-flink-beta-now-available)の翻訳です。*</font>

2021年12月3日

# Aiven for Apache Flink® ベータ版提供開始

Aiven for Apache Flinkサービスのベータ版が公開され、どなたでもお試しいただけるようになりました。詳細はこちら！

Apache Flinkは、使い慣れたSQL言語を使用することで、コーディング不要で簡単にリアルタイムストリーミング分析やETLアプリケーションを作成することができます。[Aivenは現在、[Apache Flinkをマネージドサービスとして提供しています](https://aiven.io/flink)。


## Apache Flinkとは？


Apache Flinkは、非束縛および束縛データストリーム上のステートフル計算のためのフレームワークおよび分散処理エンジンです。Apache Kafkaイベントストリーミングプラットフォームの完璧なコンパニオンであり、信頼性が高くスケーラブルなリアルタイムフィルタリング、エンリッチ、アグリゲーション、アラート、イベント分析を実行します。


SQL言語によるイベント・ストリーム処理の容易さとAivenマネージド・サービスのシンプルさを組み合わせることで、Aiven for Apache KafkaとAiven for Apache Flinkの組み合わせは、市場で最も簡単なイベント・ストリーム処理ソリューションとなります。また、他のAivenサービス、例えばAiven for PostgreSQLやAiven for OpenSearchと組み合わせることで、さらに完全なリアルタイム分析データパイプラインを構築することができます。


Apache Software Foundationのブログポスト[Apache in 2020 - By The Digits](https://blogs.apache.org/foundation/entry/apache-in-2020-by-the)の統計を見ると、多くのカテゴリーにおいて、Apache Flinkは2020年中に最も活発なApacheプロジェクトの1つであった。Aivenも積極的に参加しているApache Flinkを支えるこの活発なコミュニティは、この技術が将来性を持ち、新しい種類のユースケースをサポートするために迅速に進化することを保証しています。


## 何のために使うのか？


Apache Flinkは、ビジネス上の意思決定を迅速化するために様々な業界で広く使用されています。オンザフライのデータから得られるリアルタイムの洞察は、今日の競争の激しいビジネス環境において不可欠な要素です。


例えば、eコマースでは、Apache Flinkは、レコメンデーションエンジンや検索結果の最適化のように、リアルタイムでコンテキストに沿った購買体験のパーソナライゼーションを強力に支援することがよくあります。Apache Flinkのその他の一般的な用途としては、注文から配送までの商品プロセスをリアルタイムで監視し、顧客に影響が及ぶ前に異常を警告したり、リアルタイム管理機能を提供することで在庫やサプライチェーンプロセスにおける在庫切れの状況を回避したりすることが挙げられます。


別の例としては、金融業界が挙げられる。Apache Flinkは一般的に、クレジットカードの不正検知、リアルタイム取引ソリューション、信用スコアリングアプリケーションなどの重要なビジネスプロセスを強力にサポートしている。同様の例は、あらゆる業界で見つけることができます。


## この場合の "ベータ "とはどういう意味でしょうか？


Aivenの用語では、ベータ版サービスとは、リアルタイムストリーム処理の世界への道を先取りできることを意味します。


Aiven for Apache Flinkベータ版は、開発作業や本番グレードのワークロードのテストに使用できますが、本番での使用はできません。この機会にぜひお試しください。リアルタイム・ストリーミング・アプリケーションを開発し、フィードバックを提供しながら、必要な機能と性能を正確に実装することができます。


ただし、注意事項として、ベータ・サービスでは無料のベーシック・レベルのサポートをご利用いただけますが、より高いレベルのサポート・パッケージは現在ご利用いただけません。


##始めるには？


Aivenを初めてご利用になる方は、まず[Aivenアカウントを作成](https://console.aiven.io/signup)してください。その後


1.Aivenコンソールにログインします。
2.Aiven for Apache Flinkサービスを作成します。
3.データ統合を定義します。新規ユーザーの場合は、Flinkジョブのソースとして使用できるKafkaまたはPostgreSQLサービスを作成してください。
4.最初のストリーム処理ジョブをSQLで書きます。


お楽しみください！


より詳しい情報は、[Aiven for Apache Flinkベータ版製品ページ](https://aiven.io/flink)をご覧いただき、製品ドキュメント[開発者ポータルのこちら](https://developer.aiven.io/docs/products/flink)をご確認ください。また、Flinkをテーマにしたブログ記事もご覧ください。


## まとめ


Aivenのサービスをまだご利用でない方は<https://console.aiven.io/signup>から無料トライアルにお申し込みください！


また、[changelog](https://aiven.io/changelog)や[blog](https://aiven.io/blog)のRSSフィード、または[LinkedIn](https://www.linkedin.com/company/aiven/)や[Twitter](https://twitter.com/aiven_io)のアカウントをフォローし、製品や機能関連の最新情報をご確認ください。