OmniAICreator/Qiita-1.07M huggingface dataset:
Excel 背景色を色相を参考に作る

[Excel 今日のトリビア ExcelのHSLは白の色相を170と表示するバグがある。そのほかWithRGB HSL変換 #Excel - Qiita](https://qiita.com/Q11Q/items/d5a17ef0a55d2688f8d9)
このHSLを使い明るく、文字が見やすく、かつ識別しやすくすることが可能となる
ポイントは３０度である。
♯ 以下のサイトもかなり使える
コントラスト比4:5:1 Web セーフカラー
https://webtan.impress.co.jp/u/2012/04/03/12500
Color-Sample
https://www.color-sample.com/
ColorHexa
https://www.colorhexa.com/
## 手順1 色を選ぶ
まずセーフカラーで明るく見やすい色を一つ選ぶ
#ffff00
RGB(0,255,255)
これをColorーSampleで色相環のどの位置にあるかを見る
そうするとこれが270度に位置している
ColorHexa
https://www.colorhexa.com/
こちらとExcelでは180度である。つまりColor-sampleは90度回っている
ここから300 360 30 60 90あたりの色を選ぶ
しかしこれを255までに訂正する
191　212　21　64が得られる
[エクセル事典2007:書式>テーマの配色-同系色のしくみ２【HSL色空間】](https://excel2007.ohugi.com/format-rbn/similar_colors-HSL.html)

まずこれでデータは得られた
## 手順2 明るさの微調整
これで実際にエクセルのセルを塗る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/7550f745-8eb5-707d-d060-fb9badc43b64.png)
そしてHSLを出す
それからスライダーが真ん中の場合上から4分の1あたりに上げる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/bffb9678-d467-1bd7-d575-645947021ee3.png)
これが見やすい背景色である。

## 手順3 60度
今度は色相環をぐるぐる回して気に入った色を探す。
おおむね30度くらい回すとよい。
それを同じ手順で色を塗り彩度が足りないなら上げる。
おおむねlightnessは200前後となる。
この辺はディスプレイ、印刷機によるため、どの辺が最適化は難しい。
ちょっとうまく色が出ないので、今後調整する

|実際の色 |R    |G    |B    |Colornumber|HxClr|xlHxClr|Hue  |Saturation|Lightness|Hue度数|彩度   |明度   |
|:----:|:----:|:----:|:----:|:------:|:-:|:--:|:----:|:-----:|:----:|:-----------:|:----:|:----:|
| 1|255|217|179|11786751|B3D9FF|FFD9B3|21|255|217|30|255|217|
| #94EEFA |250|238|148|9760506|94EEFA|FAEE94|37|232|199|52.9411764705882|232|199|
| 1|203|237|223|14675403|DFEDCB|CBEDDF|110|123|220|155.294117647059|124|220|
| 1|100|230|180|11855460|B4E664|64E6B4|111|184|165|156.923076923077|184|165|
| 1|173|235|241|15854509|F1EBAD|ADEBF1|131|180|207|185.294117647059|181|207|
| 1|121|239|255|16772985|FFEF79|79EFFF|132|255|188|187.164179104478|255|188|
| 1|233|185|255|16759273|FFB9E9|E9B9FF|199|255|220|281.142857142857|255|220|
SQLServerの勉強用問題（1~10）

新入社員の練習課題にSQL問題集を探していたところ、英語ですが100問を公開しているサイトがありましたのでご紹介。
　　
AdventureWorks: SQL Exercises, Practice, Solution
https://www.w3resource.com/sql-exercises/adventureworks/adventureworks-exercises.php
　　
前提としてSQLServerとサンプルデータAdverntureWorksが必要です。
　　
AdventureWorks サンプル データベース
https://learn.microsoft.com/ja-jp/sql/samples/adventureworks-install-configure?view=sql-server-ver16&tabs=ssms
<br>
### ぎりぎり理解できそうな和訳（1~10）：

1\. 次のテーブルから、すべての行と列を取得する SQL クエリを作成しなさい。jobtitleを昇順にしてソートします。
テーブル HumanResources.Employee

2\. 次のテーブルから、テーブルエイリアスを使用して、すべての行と列を取得する SQL クエリを作成しなさい。姓を昇順にしてソートします。
テーブル Person.Person

3\. 次のテーブルから、すべての行と列のサブセット（FirstName、LastName、businessentityid）を返す SQL クエリを作成しなさい。3番目の列の見出しはEmployee_idに名前を変更します。姓を昇順にしてソートします。
テーブル Person.Person

4\. 次のテーブルから、sellstartdate が NULL 以外であり、かつ productline が 'T' である商品の行を返す SQL クエリを作成しなさい。カラムは productid、productnumber、name を出力、名前を昇順にしてソートします。
テーブル: production.Product

5\. 次のテーブルから、すべての行を返し、小計に対する税率を計算する SQL クエリを作成しなさい。カラムは salesorderid、customerid、orderdate、subtotal、percentage of tax（＝小計に対する税率）を出力、小計を昇順にしてソートします。
テーブル: sales.salesorderheader

6\. 次のテーブルから、jobtitle のリストを作成する SQL クエリを作成しなさい。カラムは jobtitle を出力、jobtitle を昇順にしてソートします。
テーブル HumanResources.Employee

7\. 次のテーブルから、各顧客が支払った運賃の合計を計算するクエリを SQL で作成しなさい。カラムは customerid と合計運賃を出力、customerid を昇順にしてソートします。
テーブル: sales.salesorderheader

8\. 以下の表から、顧客ごとの subtotalの 平均と合計を求める SQL クエリを作成しなさい。customerid, salespersonid, subtotalの 平均と合計 を返します。customerid と salespersonid で結果をグループ化し、customerid を降順にしてソートします。
テーブル: sales.salesorderheader

9\. 次のテーブルから、'A'、'C'、'H'の棚にある各商品 ID ごとの合計数量を取得する SQL クエリを作成しなさい。数量の合計が 500 以上の結果のみを出力します。カラムは productidと数量の合計を出力、productid を昇順にしてソートします。
テーブル: production.productinventory

10\. 次のテーブルから、10を掛けた locationid でグルーピングし、quantity を合計する SQL クエリを作成しなさい。
テーブル：production.productinventory
【AWS】IAM Identity Centerのリージョンを変更する

# 経緯
AWS Identity Centerを間違えて別リージョンで有効化していたらしく、東京リージョンを有効化しようとしたら「1つのリージョンでしか有効化できないよ！」と言われて仕方なくやり直しすることになったため。
# 実践
右下の削除ボタンを押下。

![21460d81bb1a-20240117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804761/ffde791f-5cc1-4587-6100-7834c7cfc876.png)

ポップアップでチェックボックスを全選択して、指定の文字列を打ちこみ確認ボタンを押下。

![469307195153-20240117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804761/062ad8e5-2a71-ae6e-6da4-4cff4adb3170.png)

緑色のバーが出てくる＝正常にプロセスが完了したということなので一安心。

![5ed10d3f479c-20240117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804761/fae58902-8eae-4493-ec41-f15621a588ff.png)

# 最後に
今回の経験で、IAM Identity Centerは複数リージョンで有効化できないということを学べたので、とりあえずポジティブに勉強できた！と考えておこう。
WEBサイトのエラーチェックの実装の考え方について、考える機会を頂いたので整理も兼ねて発信

エラーチェックの実装の考え方について、考える機会を頂いたので整理も兼ねて発信します。

# メッセージ
　もっと、ＤＢの制約は使っていきましょう

# 前提
　一番大事なことは正しいデータがＤＢに保存されていること
　アプリケーションは三層構造アプリケーション
　例）React → Webアプリケーション → データベース


# フロントエンドで入力チェック
## チェックの目的
- レスポンシビリティ、ユーザービリティ
　利用者に可能な限り早くにエラーの内容を伝える
- リソース節約
    ネットワークリソースの節約
    サーバーアプリケーションリソースの節約

## チェックの内容
- 必須チェック
- 桁数チェック
- 文字列チェック

## あまりやるべきではないチェック
- ＤＢの参照が必要なチェック
- 業務要件を満たすためのチェック
- 項目同士の組み合わせチェック

## その他
- 今どきはライブラリが充実しているので基本的なチェックは容易に実装が可能
- 逆に言うと、ライブラリ等で簡単に実装できる範囲に留めたい
- ゴリゴリなチェックロジックは無理して実装しない

## バックエンドプログラムの入力チェック
### チェックの目的
- フロントエンド、ＤＢでできないチェック
- ゴリゴリなロジックが必要な際は、アプリケーションで実装
- 詳細なＡＰＩレスポンスを返却するためのチェックロジック
　例えば、BadRequestをレスポンスとして返却するなら、ロジックが必要

### チェックの内容
 - 要はフロントエンドで入力チェックでやらないこと
 - ＤＢの参照が必要なチェック
 - 業務要件を満たすためのチェック
 - 項目同士の組み合わせチェック

### その他
- 一番工数の調整がしやすい。
- 極論、フロントエンドとＤＢの入力チェックが完璧なら何もしなくてよい
- プロジェクトマネジメントという観点では、優先順位が低いチェックロジック
- アプリケーションの本質であるビジネスロジック的なチェックは実装したい

## ＤＢの入力チェック（データ制約）
### チェックの目的
- データの完全性の担保

### チェックの内容
- 必須チェック
- 桁数チェック
- 文字列チェック
- 親子テーブルの依存関係

### あまりやるべきではないチェック
- 業務要件を満たすためのチェック
- 項目同士の組み合わせチェック
- 変更が多いチェック

### その他
- 確実なチェックができる
- だけどあまり利用されないことが多い
- 基本的な制約でできることは積極的にやりたい
- ゴリゴリなチェックロジックは無理して、実装しない
- ストアドプロシージャ－や関数等は利用しない方がよい
- 特定のDBMSの機能は利用しない方がよい

## 総論
- チェックロジックは重複して実装してもよい
- ロジックの配置の優先順位は「ＤＢ　→　フロントエンド　→　アプリケーション」
- 謝って不正なデータを登録するよりは、謝って正しいデータが登録されない状況の方がマシ
- フロントエンドとＤＢのチェックに工数はかけない
   実装をしない。という意味ではなく、不確実性の高い無理な実装はしない。という意味です。基本的なライブラリや機能を利用すれば、プロジェクト遅延の原因にはならないです。

# 愚痴（あとがき）
　ＤＢの制約を利用を提案すると、エンジニアに拒否されることが経験では、多いです。
　結果、フロントエンドのチェックとバックエンドプログラムで実装します。
　拒否の理由としては、学習コストや保守性、工数です。
　今回の記事は、拒否に対するアンサーとしての意味もあります。
　　学習コストと保守性は、「ゴリゴリなチェックロジックは無理して実装しない」で対処しています。
　そもそも、学習コストは、バックエンドプログラムとＤＢ制約も、変わらないと思います。
　保守性は、ロジックの重複や点在が具体的な理由です。
　これも、フロントエンドとバックエンドプログラムで重複、点在しているので論理性に欠けます。
　システムエンジニアリングは、様々な技術を組み合わせることが仕事だと考えています。
　　工数については、どうでしょうか。バックエンドプログラムでの実装とＤＢ
　制約は、ＤＢ制約の方が工数としては有利だと思います。定義だけなので。
　　以上、後味悪いあとがきでした。忌憚ないご意見頂ければと思います。
MACアドレスとIPアドレスの必要性

# はじめに
MACアドレスとIPアドレスはなぜ2つとも必要なのかふと疑問に思い調べました。

# MACアドレス
MACアドレス：ネットワーク端末を一意に識別するためのアドレス
→端末の購入時からアドレスが付与されている

# IPアドレス
IPアドレス：ネットワーク端末がネットワーク上のどこに存在しているか一意に識別するためのアドレス
→ネットワークに属している場合に限りIPアドレスが付与されている

# ネットワークを通じた通信
ネットワークを通じた通信はルータ、スイッチによって構成される。端末Aと端末Bが異なるネットワークに属し、A→Bの通信を実現する場合、端末A→スイッチA→ルータA→ルータB→スイッチB→端末Bのよう名経路を辿る。

![macip.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693671/93d561fe-2e91-d19a-c364-783a16f4955e.png)

スイッチA,Bで用いられるのがMACアドレス、ルータA,Bで用いられるのがIPアドレスである。

スイッチは通信の際に、宛先の端末を指定するのではなく、ブロードキャストする。そのため、利用者はスイッチを導入してすぐに同ネットワーク上で通信が実現する。一方で、ルータは端末を指定して通信を行うため、ルータを導入しただけでは通信ができない。

MACアドレスだけだと、同ネットワーク上に端末が増えすぎると不要な端末への通信が増えすぎてしまう問題が発生する。または経路表に登録するデータが膨大になりすぎる問題が発生する。
一方でIPアドレスだけだと導入し設定が必要になる手間が発生します。そのため、おおまかな場所へのデータ配送はIPアドレス、細かな場所へのデータ配送はMACアドレスを用いて行うことで効率のいい通信を実現できる。

# 参考文献　
https://zenn.dev/haan/articles/d0eba891974649
Rails7.2をちょこっと試す（少し静かな rails new 編）

# はじめに
Rails 7.2.0 beta1 がリリースされたので、ちょこっと試してみました。

Rails 7.2 では、`rails new` のときに `bundle install` が `--quiet` オプション付きで実行されるようになりました。

## Rails 7.1

Rails 7.1 では、`rails new` を実行したときに `bundle install` が `--quiet` オプションなしで実行されます。
bundle install による出力が表示されます。
```shell
root@2d5740c8a6b6:/app# rails -v
Rails 7.1.3.3
root@2d5740c8a6b6:/app# rails new sandbox --database postgresql
      create
      ...
         run  bundle install
      ...
```

## Rails 7.2

Rails 7.2 では、`rails new` を実行したときに `bundle install` が `--quiet` オプション付きで実行されます。
bundle install による出力が表示されなくなりました。

```shell
root@2950a7ab52e2:/app# rails -v
Rails 7.2.0.beta1
root@2950a7ab52e2:/app# rails new sandbox --database postgresql
      create
      ...
         run  bundle install --quiet
      ...
```

## 参考情報

- https://github.com/rails/rails/pull/50185
Exploring the Power of ARM7 Based LPC2148 Microcontroller

What is ARM7 Based (LPC2148) Microcontroller ?
The ARM7 based LPC2148 microcontroller is a powerful embedded system solution widely used in various applications due to its high-performance ARM7TDMI-S core. ARM7 architecture offers a balance between performance, power efficiency, and cost-effectiveness, making it a preferred choice for diverse projects. LPC2148 integrates features like multiple serial interfaces, GPIO pins, and ADCs, empowering developers to create sophisticated embedded systems with ease.

Part 1: Hardware Overview of LPC2148
The LPC2148 microcontroller boasts a rich set of hardware peripherals, including UART, SPI, I2C, and PWM modules, enabling seamless communication with external devices. Its 32-bit ARM architecture facilitates efficient data processing, while on-chip memory resources such as flash and RAM provide ample storage for program code and data. Additionally, the presence of ADC channels allows the microcontroller to interface with analog sensors, expanding its application range.

Part 2: Programming LPC2148
Programming the LPC2148 microcontroller typically involves utilizing integrated development environments (IDEs) such as Keil µVision or GCC-based toolchains like LPCXpresso. These tools offer comprehensive support for ARM7 architecture and streamline the development process through features like code debugging, simulation, and flash programming. With access to a vast array of libraries and example codes, developers can expedite firmware development for their projects while ensuring code efficiency and reliability.

Part 3: Application Areas of LPC2148
The versatility of the LPC2148 microcontroller makes it suitable for a wide range of applications spanning industries such as automotive, industrial automation, consumer electronics, and telecommunications. In automotive systems, it can control engine management, dashboard displays, and vehicle diagnostics. In industrial automation, it enables precise control of machinery and processes. Furthermore, its low power consumption and compact form factor make it an ideal choice for portable devices and IoT applications.

Part 4: Future Prospects and Advancements
As technology continues to evolve, the LPC2148 microcontroller is poised to benefit from advancements in hardware integration, power efficiency, and connectivity. Future iterations may feature enhanced processing capabilities, increased memory resources, and support for emerging communication standards like Bluetooth Low Energy (BLE) and LoRaWAN. Moreover, the open-source community surrounding ARM-based microcontrollers ensures ongoing development of tools, libraries, and resources, further enriching the ecosystem for LPC2148-based projects.

By delving into the architecture, hardware features, programming methods, application domains, and future prospects of the ARM7 based LPC2148 microcontroller, developers can harness its full potential to drive innovation in embedded systems design.
ウォレットをやさしい絵で説明してみた


今回はウォレットがどんなものか、どう扱うべきか、絵を交えて極力やさしく説明します。

## 言い訳（わかっている人向け）

- Moneroなど公開鍵自体がアドレスとほぼ同等の場合もありますがこの記事ではアドレスと表現します
- 秘密鍵の導出にニーモニックを使う場合もありますがこの記事では全て秘密鍵とします
- 表現は厳密さより大事なことのわかりやすさを優先します

## 今回のポイント

- ウォレットとはアドレス🔓や秘密鍵🔑を扱う道具
    - ウォレットに入っているのは秘密鍵
    - トークンの正体はブロックチェーンの記録
- トークンを持つとは自分だけがトークンのロックをはずせるということ
- 秘密鍵🔑はコピーできる
- 送金とは相手のアドレスにトークンをロックすること
- ***ニーモニックと秘密鍵🔑は大事なデータです***
    - なくさない
    - おしえない

## ウォレットとはアドレス🔓や秘密鍵🔑を扱う道具

これは賛否のある主張ですが、たとえば「スマホにビットコインが入ってる」は全部ウソです。もちろん賛否はありますが、やさしくただしく理解するためには重要なことと私は考えています。

現金用の財布のように「ウォレットのアプリはトークンの入れ物」と考えている方も多いかもしれません。いい機会です、この考え方を今から卒業しましょう！

ウォレットに入っているのは秘密鍵です。トークンではありません。トークンの正体はブロックチェーンの記録です。

どういうことか順に見ていきましょう。

## トークンを持つとは自分だけがトークンのロックをはずせるということ

このロックがあるおかげで、関係ない人に勝手にトークンをとられたりすることを防いでいます。

だからこそ、***秘密鍵🔑はみんなに内緒***です。

```mermaid
---
title: トークンを持っている状態
---
graph LR
    subgraph "自分のウォレット"
        private_key_1("自分だけの<br/>秘密鍵🔑")
    end
    subgraph "だれかのパソコン"
        no_private_key_1("秘密鍵がない")
    end
    subgraph "ブロックチェーン"
        address_1("自分のアドレス🔓")-->|ロック|token("トークン💰") 
    end
    private_key_1-.->|はずせる|address_1
    no_private_key_1-.-|はずせない|address_1
```

## 秘密鍵🔑はコピーできる

秘密鍵はコピーできるデータです。***大事なトークンを守る大事なデータ***です。大事なデータのバックアップは大事ですよね。

```mermaid
---
title: 秘密鍵🔑はコピーできる
---
graph LR
    subgraph "スマホ"
        subgraph mobile_wallet["ウォレットのアプリ"]
            private_key_1("秘密鍵🔑")
        end
    end
    subgraph "パソコン"
        subgraph desktop_wallet_2["パソコン用ウォレット"]
            private_key_2("秘密鍵🔑")
        end
    end
    subgraph "紙"
        private_key_3("秘密鍵🔑")
    end
    subgraph "ブロックチェーン"
        public_key_1("アドレス🔓")-->|ロック|token("トークン💰") 
    end
    private_key_1-.->|"はずせる"|public_key_1
    private_key_2-.->|"はずせる"|public_key_1
    private_key_2-->|"印刷"|private_key_3
    private_key_3-->|"入力"|private_key_2
```

## 送金とは相手のアドレスにトークンをロックすること

```mermaid
---
title: 送金
---
graph LR
    subgraph blockchain["ブロックチェーン"]
        my_address("自分のアドレス🔓")-.->|"ロックを<br/>はずしてくれる"|my_token("トークン💰")
        opponents_address_on_blockchain("相手のアドレス🔓")-->|"ロックしてくれる"|my_token
    end
    subgraph my_wallet["自分のウォレット"]
        my_private_key("自分だけの<br/>秘密鍵🔑")-->|"つくる"|my_transaction("送金の依頼🪶")
        opponents_address_in_my_wallet("相手のアドレス🔓")-->|"つくる"|my_transaction
    end
    my_transaction-->|"送る"|blockchain
```

ここで送金の依頼🪶というものがでてきました。これは***秘密鍵🔑がないと作れません***。そしてこの送金をブロックチェーン側で処理します。

## 今回のポイント（再掲）

- ウォレットとはアドレス🔓や秘密鍵🔑を扱う道具
    - ウォレットに入っているのは秘密鍵
    - トークンの正体はブロックチェーンの記録
- トークンを持つとは自分だけがトークンのロックをはずせるということ
- 秘密鍵🔑はコピーできる
- 送金とは相手のアドレスにトークンをロックすること
- ***ニーモニックと秘密鍵🔑は大事なデータです***
    - なくさない
    - おしえない
NASA-TLXとSUSのツール

# このページ
メンタルワークロードをアンケートベースで評価する **NASA-TLX (National Aeronautics and Space Administration Task Load Index)** と，ユーザビリティを評価する **SUS (System Usability Scale)** を行うツール関係の備忘録

# NASA-TLX
https://www.keithv.com/software/nasatlx/
* NASA-TLXをオンライン上で実施可能
* Part1では，20点評価でスコアを入力する
* Part2では，重み付けのための評価も実施される
    * Part2を実施しないものは，NASA-RTLX (Raw-TLX) と呼ばれる
    * TLXとRTLXについて，重みづけを行わずとも結果が変わらないという意見があり，実施有無は著者によって分かれている
* 日本語対応あり

# SUS
* SUSは日本語に対応したWebツールが見当たらなかった
* SUSを使用している日本語論文では，適宜翻訳していたり，自分のシステムに合った言葉に書き換えて，使用している印象がある

## SUS PDF Generator
https://jblattgerste.github.io/sus-pdf-generator/
* SUSの質問紙の生成と分析ツール
* 日本語対応なし

## System Usability Scale (SUS) Score Calculator
https://stuart-cunningham.github.io/sus/
* Web上でSUSの質問に答えるとスコアが出力されるツール
* 日本語対応なし

# 参考文献
* [特集③人間工学のための計測手法](https://www.jstage.jst.go.jp/article/jje/51/6/51_391/_pdf)
TypeScript勉強してみた⑧

# はじめに
初めまして！
エンジニアになって数年、今まで本を読むだけでしたが、もっとプライベートで楽しみながら成長したい！自分が学んだ足跡を残していきたい！と思い記事を書きました！
最終的には自在に開発できるようになりたいと思っています。:triumph:
いろいろな記事を参考にさせてもらっています。:bow_tone2:

**「いいね」か「ブックマーク」**
を頂けると僕のモチベーションアップになります！:thumbsup:
少しでも気に入っていただけたらよろしくお願いいたします！:thumbsup:


# 今回の目的
TypeScriptがわからなくてやばたにえんなので、ハンドブックで学んでみました。
（前回）

https://qiita.com/mr_noppo/items/cc02dbf882ab93acf9c1

# 主に参考にさせていただいた記事

https://www.typescriptlang.org/docs/handbook/intro.html

# 関数の詳細
### 不要なジェネリクス
型指定のバリエーションが増えてくると不要な指定も増えてしまうので複雑にならないように注意する。
```ts
// extendsしなくて良い
function greet<Str extends string>(s: Str) {
  console.log("Hello, " + s);
}
// 単純に指定しても問題ない
function greet(s: string) {
  console.log("Hello, " + s);
}
```
### オーバーロード記述よりもUnionTypeやジェネリクス
TypeScriptのオーバーロードは事前に複数の関数宣言を用意し最下部に実装を記述します。
慣れもあると思いますが、UnionTypeやジェネリクスでできるのであれば優先して使用する方がいいかもしれません。
```ts
// オーバーロード
function len(s: string): number;
function len(arr: any[]): number;
function len(x: any) {
  return x.length;
}
// UnionType
function len(x: any[] | string) {
  return x.length;
}
```
### Functionよりも具体的な()=>void
下記の書き方は、どんな関数でも受け取る状態です。
```ts
function doSomething(f: Function) {
  return f(1, 2, 3);
}
```

具体的に引数の型が確定しているのであればアロー関数で記述しましょう。
```ts
function doSomething(f: (a:number,b:number,c:number) => void) {
  return f(1, 2, 3);
}
```

### スプレット構文とメソッド引数
下記のメソッドは引数が二つであることを求めているため、配列数が固定でもTypeScriptが推測できず警告されます。

```ts
const args = [8, 5];
const angle = Math.atan2(...args);
```
as constを使用してTypeを固めましょう。

```ts
const args = [8, 5] as const;
const angle = Math.atan2(...args);
```

### voidの返し値
voidは、値を無視するという意味で定義されますが実際は値を返します。
下記の場合でも警告されないので注意しましょう。

```ts
type voidFunc = () => void;
 
const f1: voidFunc = () => {
  return 1;
};
 
const f2: voidFunc = () => true;
 
const f3: voidFunc = function () {
  return true;
};

console.log(f1());
```

# 次回の予定
https://qiita.com/mr_noppo/items/d212d76f81bca78c37a7
Java AmazonS3 AssumeRole 自分用メモ

<h2>AssumeRole</h2>

pom.xml

```xml
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>s3</artifactId>
    <version>2.25.1</version>
</dependency>

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>sts</artifactId>
    <version>2.25.1</version>
</dependency>

```



```java
import software.amazon.awssdk.core.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.sts.StsClient;
import software.amazon.awssdk.services.sts.auth.StsAssumeRoleCredentialsProvider;
import software.amazon.awssdk.services.sts.model.AssumeRoleRequest;

private S3Client getS3Client() {

    String region = "ap-northeast-1";
    String role = "arn:aws:iam::XXXXXXXXXXXX:role/switchrole-test";
    String sesionName = "Test";
    String bucketName = "Test";

    StsClinet stsClient = StsClient.builder()
        .region(Region.of(region))
        .build();

    AssumeRoleRequest assumeRoleRequest = AssumeRoleRequset.builder()
        .roleArn(role)
        .roleSessionName(sessionName)
        .build();

    StsAssumeRoleCredentialsProvider provider = StsAssumeRoleCredentialsProvider.builder()
        .sttsClient(stsClient)
        .refreshRequest(assumeRoleRequest)
        .build();

    S3Client s3Client = S3Client.builder()
        .credentialsProvider(provider)
        .region(Region.of(region))
        .build();
        
    return s3Client;
}
```
【AWS】アカウント作成して"すぐ"設定すべきのAWS Budgets

# 経緯
以前コスト管理サービスを使用しなかったことで、Amazon RDSを起動しっ放ししていたことに気づかず、なんにも使ってないのに月に27,000円取られたため。
**※RDSは停止しても7日後に勝手に再起動するので、ぜっっっっっっっったいにDBインスタンス削除しておいてください…。**
# 早速やってみる
## AWS Budgetsを利用する
AWS Budgetsの概要は以下です。
https://aws.amazon.com/jp/aws-cost-management/aws-budgets/
予算超過時にはアラートを発して通知してくれるのでこちらを利用していきます。
まず画面上の検索窓に「AWS Budgets」と入力。

![9da6d3d8800a-20240116.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804761/cb4face7-353b-9a2b-ff4c-1064855a55da.png)

「予算を作成」のボタンを押下。

![9fb3380f0d97-20240116.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804761/c2038395-0721-bb06-e918-59338b55d2fb.png)

今回は難しいことをする予定はないので「予算の設定」に「テンプレートを使用（シンプル）」を選択。「テンプレート-新規」は、私の場合は予期せぬコスト超過が怖いので「月次コスト予算」を選択。

![d228543879dc-20240116.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804761/72189cd6-a7d8-35a4-b474-9a7a7a5250ff.png)

予算名、予算額、Eメール受信者をそれぞれ設定し、「予算を作成」ボタンを押下。

![f2a9896157f7-20240116.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804761/0938e76c-c74a-44d3-bf00-7643f5b7fee0.png)

以上でしきい値の設定・アラートの設定が完了しました。

![fb4b80d15639-20240116.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804761/ffe6c4a9-d09c-797a-00a4-e17a7ca5c0a7.png)

# 最後に
くどいようですが、たとえAWS Budgetsでなくてもまじでコストは監視しておいた方が良いです。突然AWSから2万円超えの請求来ると不正利用されたか！？ってほんとビクビクしますし、脆弱性を狙って攻撃してくる人って本当にいるので（実際に100万単位の請求が来た企業もある）。
【AWS】Day1対応の実施(復習用・備忘録)

AWS SAAの資格取得に向けて学習を開始したので、これを機に学習した内容(つまずいたとこも含めて)を記していこうと思います。
# そもそもDay1対応とは
　AWSアカウントを作成した際、初日に対応すべきアカウントに関する設定。

 大まかな対応は以下の通り
 ・アカウントへのログイン時の認証方法の追加
 ・ルートユーザ（はじめに作成したユーザ）の他に管理用のIAMユーザを作成
 ・AWS CloudTrail(のちに説明)の有効化
 ・AWSの請求に関するアラートの有効化（これは初心者の私にも大事だとわかる、、、、　
 　金銭的に、、）


## 1.多要素認証を有効化する
多要素認証（MFAと呼ぶ）をAWSで追加する際は「認証アプリケーション」・「セキュリティキー」・「ハードウェアトークン」の三つが基本的に使用できる。今回の学習では認証アプリケーションである[GoogleAuthenticater](https://apps.apple.com/jp/app/google-authenticator/id388497605)を使用した。
アプリ上でカメラを使用してQRコードを読み取り、MFAコードを入力することで認証可能となり、パスワード入力したのちにMFAコードを入力できる作業が増え、セキュリティが担保される仕組みである。

## 2.[IAMユーザ](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/introduction.html)の設定
AWSサービスのリソースを安全に管理すための環境を擬似的に作り出すため、IAMユーザを設定する。
設定時、管理者がパスワード設定をしてしまうと管理者がユーザのパスワードを管理する事となりセキュリティ上安全とは言い難い部分があるので、ユーザの初回ログイン時にパスワードを変更させる必要もある。
IAMではユーザにポリシーと呼ばれるアクセス等の規則を割り付け(アタッチと表現する)することができる。
今回はadminとユーザを名付け、管理者権限を以下のように設定した。


![スクリーンショット 2024-06-01 14.22.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2618105/53a2b6c5-56da-0577-e23e-e9832ee9cb28.png)

また、AWSでは各IAMユーザに対してタグを割り振り可能で、タグによるユーザのグループ識別が可能である。(以下の通り)

![スクリーンショット 2024-06-01 14.25.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2618105/3124b2fe-3bc2-e6f7-9a07-4073fb180a70.png)

作成したユーザ情報はは、メールやCSVファイルの形でユーザ使用者に対して共有することができる。


## 3.IAMユーザグループの設定
IAMユーザを作成することができたので、ユーザのグループ分けを行う。

＊＊＊ここで一つ前の説で書き記したタグとの違いについて悩んだので自分なりの解釈を書いておきます＊＊＊

<table>
  <caption></caption>
  <thead>
    <tr>
      <th>名前</th> <th>役割</th>
    </tr>
  </thead>
  <tr>
    <td> タグ </td> <td>あくまでユーザの識別を行うためのグループ（所属部署など）。ポリシーをアタッチするわけではない。</td>
  </tr>
  <tr>
    <td> ユーザグループ　 </td> <td>まとめてユーザへのポリシーをアタッチするためのグループ</td>
  </tr>
</table>

[ユーザグループの作成]より先ほど作成したadminユーザをグループの中に追加し、administratoraccessのポリシーをアタッチして、グループを作成した。

これにより、admin権限を持たせたグループの中に所属しているユーザには、一括でポリシーをアタッチすることができるようになるのでセキュリティ管理がしやすくなる。

## 4.CloudTrailの設定
AWSユーザの操作(APIコールやサインインに関するアクティビティなど)に関するログを取得できるようにするため、CloudTrailを設定する。

ログの情報をS3バケットに保存していく形なので、無料枠を利用している私には定期的にバケットを削除する必要が生じる、、、、(削除のタイミングは後述する請求アラートが配信されたタイミングとなる。)

証跡の名前を入力する程度の操作で証跡の作成が完了するクイック作成があるので便利である。
クイック作成でない証跡の作成では、どの動作の証跡を取得するか、既存/新規の証跡の保存先S3バケットの選択やログファイルの[KMS](https://aws.amazon.com/jp/kms/faqs/)による暗号化等詳な部分を設定することができる。
また、[CloudWatchLogs](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)により、溜め込んだ証跡を可視化して表示することも設定できる。


## 5.請求アラートの設定
瀬給される料金を超過させない（発生させない）ため請求アラートの設定を有効化させる。
アカウントの設定から無料利用枠に関するアラートの設定より、メールアドレスを入力して受信できるようにする。

IAMユーザでこの情報を編集したい場合はルートユーザで許可の設定が必要となる。

また、CloudWatchによるアラートも設定可能で、適宜メトリクス(アラートを取得したいサービス)を追加することによりアラートを設定することが可能。


#






#### 
以上、AWS使用開始時に設定すべきDay1対応でした.
 初記事なので至らない点も多いですがこれからたくさん書いてスキルアップを目指します！！！
[初級] C++: 機能の拡張とは

機能を拡張する場合のパターンについて
C++ というわけではないけれど、C++ の機能を念頭においているので

:::note info
本記事の前提条件は以下の通りです。
* 初心者向け
* とは言っても、何らかのプログラムはそれなりに書けるけど、C とか C++ はちょっと、という人向け
* ざっくり概要しか説明しないので細かいことは気にしないでいただきたい
* Visual Studio 2013 くらい～
* Windowsプログラム (CUI, GUI)
* コードの検証
    * 開発環境: Visual Studio 2022, x64, Release ビルド
    * 実行環境: Windows 10
:::

:::note info
* 本記事は上から順番に読む前提となっている
:::

:::note info
内容としては言語も OS もほぼ関係ないものとなっているが、C++ を念頭においている、ということでご承知おき頂きたい。
:::

# 機能拡張のパターン

例えば、下記の機能を持った機械があるとする。
* 洗う
* 切る
* 焼く

これをどう拡張するか。

## 出来ることを増やす
ようするに、元々あった機能に同列の機能を追加する場合。
例えば下記の機能を追加する場合。
* 煮る
* 蒸す
* 混ぜる

いわゆる「継承」という手を使って、拡張するのがよさそう。
元々あった機能もそのまま利用できる。
拡張の仕方によって、お菓子作り向け（「ふるいにかける」「泡立てる」）とか、魚料理向け（「血抜きをする」「鱗をとる」）とかのバリエーションができそう。

:::note info
* [[初級] C++: 継承 - 拙著](https://qiita.com/yasu62347/items/8b7aa258fca08ea97c64)
:::

## 元の機能を使った新しい機能を作る
* お好み焼きを作る
* 焼きそばを作る
* たこ焼きを作る

元の機械を新しい機械の中に埋め込み、新しい機械は必要な機能をもとの機械に委譲、必要な処理を行う。
いわゆる「コンポジション」ですかね。
元々あった機能を内部的に再利用しているということになりますか。
機械の埋め込み方をカートリッジ式にすると集約 (Aggregation) ということになりますか。（こうすると前述の、出来ることを増やした機械、を使える可能性もありますが、これを実現するためにはまた別の拡張方法を利用する必要があるかもしれません）

## 元の機能をグレードアップする
* 超高圧洗浄する
* レーザーで切る
* 1万℃で焼く

機械は大型化して別の施設においてあるが、制御盤が同じなので、元の機械の「焼く」ボタンを押すと1万℃で何かを焼き始めるということになる。
「操作方法」を再利用していることになる。
仮想関数を使った継承をすることになりそう（ポリモーフィズム）。

ちなみに「洗う」「切る」「焼く」の3つのボタンのある制御盤が元の機械からも分離できる構造だったとしたら、その制御盤はインターフェース（全てのメンバ関数が純粋仮想関数の抽象クラス）ということになりますかね。

:::note info
* [[初級] C++: 仮想関数 - 拙著](https://qiita.com/yasu62347/items/a6c193db601f2092c991)
:::

委譲。...以上！
【書評】エリック・エヴァンスのドメイン駆動設計

# 読んだ本

https://www.shoeisha.co.jp/book/detail/9784798126708

# 概要

業務でDDDを参考にしたコードがあり、違和感があったので再読しました。なかなかハードな内容なので、今必要な情報を拾うように読み進めるのがオススメかも知れないです。
ドメインエキスパートとのコミュニケーションの重要性が何度も書かれていて、コードを書く前のすり合わせの大切さを再認識できました。
また、実践としてレイヤードアーキテクチャなどが出てきますが、プロジェクトに合わせた上手な調整（妥協でもある）についてもつぶさに言及されていて、これまた重要性を再認識できます。

第1章 知識をかみ砕く
第2章 コミュニケーションと言語の使い方
第3章 モデルと実装を結びつける
第4章 ドメインを隔離する
第5章 ソフトウェアで表現されたモデル
第6章 ドメインオブジェクトのライフサイクル
第7章 言語を使用する：応用例
第8章 ブレイクスルー
第9章 暗黙的な概念を明示的にする
第10章 しなやかな設計
第11章 アナリシスパターンを適用する
第12章 デザインパターンをモデルに関係づける
第13章 より深い洞察へ向かうリファクタリング
第14章 モデルの整合性を維持する
第15章 蒸留
第16章 大規模な構造
第17章 戦略をまとめ上げる

# おすすめの人

- ドメイン駆動設計に詳しくなりたい人

# 次に読むなら

- ドメイン駆動設計について興味があれば、『ドメイン駆動設計入門』など少し易しい本に戻るのが良さそう（正直これだけだと難しすぎる）
- レイヤードアーキテクチャに興味があれば、『Clean Architecture 達人に学ぶソフトウェアの構造と設計』が良さそう
- 他にも、リファクタリングや、テストなど色々な興味が湧いてくるので、それに合わせて深堀りしていくのが良さそう

# 感想

業務で触れているソースコードの悪い点が見えてきて泣きそうになりました。大前提のドメインエキスパートとの会話はとても重要なので、疎かにしないように肝に銘じます。
また、蒸留という言葉で説明があるように、常に変化していくのがソフトウェアのため、安心して変更できるようにテストコード重要性についても噛み締めました。
履歴を見ると5年ぶりくらいに読んだのですが、実践できていることも少しだけあり、全部理解できなくても難しい本にチャレンジしておくのは無駄じゃないんだなと勇気をもらえました。
C++入門 AtCoder Programming Guide for beginners (APG4b)　備忘録

[EX8 - たこ焼きセット](https://atcoder.jp/contests/apg4b/tasks/APG4b_co)

自分で書いたプログラム
```
#include <bits/stdc++.h>
using namespace std;

int main() {
  int p;
  cin >> p;

  // パターン1
  if (p == 1) {
    int price;
    int N;
    cin >> price >> N;
    cout << price * N << endl;
  }

  // パターン2
  if (p == 2) {
    string text;
    int price;
    int N;
    cin >> text >> price >> N;
    cout << text << "!" << endl;
    cout << price * N << endl;
  }
}

```

模範解答
```
#include <bits/stdc++.h>
using namespace std;

int main() {
  int p;
  cin >> p;

  // パターン2
  if (p == 2) {
    string text;
    cin >> text;
    cout << text << "!" << endl;
  }

  int price, N;
  cin >> price >> N;
  cout << price * N << endl;
}
```

気づいたこと
・P==1,P==2の場合で、それぞれコードを書いたが、模範解答では、P==2の場合に出力結果が変わるように表現されている。
・複数のint型の変数を定義する際に、私はint price; int N;と2行で表現したが、模範解答ではint price, N と1行で表現している。

・chatgptにレビューさせる
grafana dashboard で環境差分を扱う Tips

# サマリ
grafana dashboard での環境差分は metrics を使って実現する

# grafana における環境差分管理
provisioning でしか環境変数は設定できず、dashboard では扱えない。
- provision 時の設定ファイル: https://grafana.com/docs/grafana/latest/administration/provisioning/#using-environment-variables

そのため、 provisioning 時に設定できる grafana 環境情報を出力するメトリクスの項目を使って dashboard に環境変数を引き渡す
- https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#metricsenvironment_info

これにより、 grafana が `grafana_environment_info` metrics を出力するようになる

# 具体例(datasource: prometheus の場合)
- provisioning file(default.ini 等) に下記記述を追加
```
[metrics.environment_info]
#exampleLabel1 = exampleValue1
```
- prometheus の監視対象に grafana を追加
- dashboard の variable で `label_values(grafana_environment_info, "exampleLabel1")` を使って `exampleValue1` を dashboard で取得
  - https://grafana.com/docs/grafana/latest/datasources/prometheus/template-variables/
10C0+10C1···+10C10「2024 岩手大学 前期【１】(1)」をChatGPTとsympyとWolframAlphaでやってみたい。


# オリジナル
大学入試数学問題集成 様＞【１】(1) テキスト

https://mathexamtest.web.fc2.com/2024/202410061/2024100610100mj.html

# 公式ページ
問題 【１】(1)　
https://www.iwate-u.ac.jp/upload/24-022.kyou_sugaku.pdf#page=2

解答
https://www.iwate-u.ac.jp/upload/24-050.zenki_kaitourei_kaiteiban0528.pdf#page=2

過去問題
https://www.iwate-u.ac.jp/admission/disclosure/past.html#a1

# ChatGPT-3.5先生へ
大学入試数学問題集成 様＞ 【１】　(1)テキスト

・ページのソースを表示です。MathMLです。
　省略しようと思いましたが、大学入試数学問題集成 様 の全文から必要部分の抜粋です。
```
<p class="slevel"><a name="q-0101" 
id="q-0101"></a><span 
class="qnum">【１】</span>　次の問いに答えよ．</p>
<p class="s1level"><a name="s-0101" id="s-0101"></a><span 
class="shomon1">(1)</span>　<math>
<mrow><mmultiscripts><mo>C</mo><mn>0</mn><none></none><mprescripts></mprescripts>
<mn>10</mn><none></none></mmultiscripts><mo>+</mo>
<mmultiscripts><mo>C</mo><mn>1</mn><none></none><mprescripts></mprescripts>
<mn>10</mn><none></none></mmultiscripts><mo>+</mo>
<mmultiscripts><mo>C</mo><mn>2</mn><none></none><mprescripts></mprescripts>
<mn>10</mn><none></none></mmultiscripts><mo>+</mo>
<mmultiscripts><mo>C</mo><mn>3</mn><none></none><mprescripts></mprescripts>
<mn>10</mn><none></none></mmultiscripts><mo>+</mo>
<mi>&ctdot;</mi><mo>+</mo>
<mmultiscripts><mo>C</mo><mn>10</mn><none></none><mprescripts></mprescripts>
<mn>10</mn><none></none></mmultiscripts></mrow><mspace width=".2em"></mspace>
</math>を計算せよ．
</p>
```

＞...
＞答えは1024 です。
なんだか、私にはわかりませんが、 ChatGPT-3.5先生。ステキです。

以下の1行を追加した。
User
```
sympyで計算をお願いします。
```

```python
...
計算の結果、次の通りです。

\binom{10}{0} + \binom{10}{1} + \binom{10}{2} + \cdots + \binom{10}{10} = 1024
\] &#8203;:citation[【oaicite:0】]&#8203;
```

User
```
sympyのソースコードと結果を教えて下さい。
```
```python
import sympy as sp

n = 10
result = sum(sp.binomial(n, k) for k in range(n + 1))
result
```
次の行は、私が手を加えています。
＞この結果は 2^10に等しい事がわかります。

...だそうです。

??? 分析を表示ます。（青色のフォントが出た)

**もっと凄すぎました。**

# WolframAlphaで
・(勉強中?)教えて下さい。

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

# いつもと違うおすすめです。
・wikipedia

https://en.wikipedia.org/wiki/Binomial_theorem

~~2項定理~~

https://ja.wikipedia.org/wiki/二項定理

・youtube(0:00〜1:43:17)


https://youtu.be/4jaTFsD6Wgg

・?ctdotが、当初の目的でした。　

```
&ctdot;	
```

https://www.w3.org/TR/WD-math-970515/table10.html

(2024/06/02追加)

https://qiita.com/mrrclb48z/items/fe910429ae7769eeff0f


(2024-06-03追加) ChatGPT-3.5先生へ
User
```
0!の意味を教えて下さい。
```
(回答省略)
GMT5.4.5をインストールする(CentOS Stream9)

## はじめに

GMT5,GMT6で互換性がないため、GMT5で書かれたスクリプトがGMT6では使用できない。CentOS Stream9のパッケージ管理ソフトではGMT6がセットされるため、GMT5の最終版の5.4.5をコンパイルする必要があります。(Anacondaでも一応可であるが、やりたくない。)  

## 方針

- GMTプログラム以外のデータや依存するプログラムについてはパッケージ管理ソフトで管理を行う。  
- 公式サイトのwikiにしたがう<https://github.com/GenericMappingTools/gmt/wiki>
- `/usr/local/gmt-5.4.5`にプログラム一式を置くものとする。  

## GMTが依存しているプログラムのインストール

### 事前設定

詳細は<https://docs.fedoraproject.org/en-US/epel/>
EPEL,EPEL-NEXTリポジトリが入っていること、無効になっているCRBリポジトリが有効すること。  

```bash
dnf config-manager --enable crb
dnf install epel-release epel-next-release
# リポジトリの存在と有効無効の確認
dnf repolist --all
```

https://github.com/GenericMappingTools/gmt/wiki/Install-dependencies-on-RHEL-and-CentOS

こちらの`# Install required dependencies`と`# Install optional dependencies`をインストールする 

```bash
dnf install cmake libcurl-devel netcdf-devel gdal-devel
dnf install ninja-build gdal pcre-devel fftw3-devel lapack-devel openblas-devel glib2-devel ghostscript
```

## GMTのデータのインストール

```bash
dnf install gshhg-gmt-nc4 gshhg-gmt-nc4-full gshhg-gmt-nc4-high dcw-gmt
```

※gshhgは/usr/share/gshhg-gmt-nc4ディレクトリにデータが格納される。
※dcwは/usr/share/dcw-gmtディレクトリにデータが格納される。  

## GMTソースコードのダウンロード

```bash
wget https://github.com/GenericMappingTools/gmt/releases/download/5.4.5/gmt-5.4.5-src.tar.gz
tar -zxf gmt-5.4.5-src.tar.gz
cd gmt-5.4.5
```

## GMTのコンパイル

README.cmakeを見て以下必要なオプションを追加（cmakeを使います）  

### cmakeファイルの修正

```bash
cp cmake/ConfigUserTemplate.cmake cmake/ConfigUser.cmake
```

cmake/ConfigUser.cmakeでデフォルトから一部を変える。  
cmakeの-Dオプションで指定することも可能であるが、ここではConfigUser.cmakeですべての設定を決めることにする。  

以下のようにコメントアウトを外して、修正し、追加した。
```cmake:cmake/ConfigUser.cmake
set (CMAKE_INSTALL_PREFIX "/usr/local/gmt-5.4.5")
set (GMT_INSTALL_RELOCATABLE TRUE)
set (GMT_EXCLUDE_GDAL TRUE)
set (GMT_EXCLUDE_PCRE TRUE)
set (GMT_EXCLUDE_PCRE2 TRUE)
set (GMT_EXCLUDE_FFTW3 TRUE)
set (GMT_EXCLUDE_LAPACK TRUE)
set (GMT_EXCLUDE_ZLIB TRUE)
# CentOS Stream9の場合
set (GSHHG_ROOT "/usr/share/gshhg-gmt-nc4")
set (DCW_ROOT "/usr/share/dcw-gmt")
# gcc>=10の場合(Ubuntu22.04,CentOS Stream9は該当します。)
# <https://github.com/GenericMappingTools/gmt/issues/2493>
# <https://qiita.com/yasuhirokimura/items/d5337d73a016502b9d54>
# ConfigUser.cmakeに以下の項目を追加して古いバージョンで実行できるようにする。（対処療法）
set (CMAKE_C_FLAGS "-fcommon")
```

### ソースコードの修正

glibc>=2.32で廃止となった項目を修正する。(Ubuntu22.04,CentOS Stream9は該当します。)
こちらにありました <https://github.com/greenbone/gvmd/issues/1279>

src/common_sighandler.cの190行
```
sys_siglist[sig_num] -> strsignal (sig_num)
```
に変更する。

### 実行

```bash
mkdir build
cd build
cmake ..
make -j8 # 8コアでコンパイル
sudo make -j8 install
make clean
```

## GMTのパスを張る

最後に/usr/local/gmt-5.4.5/binにパスを張りましょう。

```bash
$ vi ~/.profile
$ vi ~/.bashrc
$ vi ~/.bash_profile
等
export PATH=/usr/local/gmt-5.4.5/bin:${PATH}
```
GitHub側にBitriseのビルドステータスを連携する方法

調べればドキュメントに書いてますが自分の備忘録として残しておきます。

## 1. GitHubのパーソナルアクセストークンを作成する

* GitHubの[Fine-grand tokens](https://github.com/settings/tokens?type=beta)設定でパーソナルアクセストークンを作成する
* 必要な権限は以下の通り
  * Commit statuses: Read and write
  * Contents: Read and write
  * Metadata: Read-only ※これは最初から設定されているので何もしなくて良い
  * Pull requests: Read and write
  * ※ビルドステータス更新専用のPATならContentsは不要かもしれません。
* 作成したPATのトークンはメモする（ページを閉じたり更新するともう見ることができない）

## 2. GitHubのパーソナルアクセストークンをBitriseのシークレットに登録する

* Bitrise CI ＞ アプリ名 ＞ Workflows & Pipelines ＞ Workflow Editor の Secretsページを開く

以下を設定する。
* GITHUB_ACCESS_TOKEN = {1で作成したGitHubのパーソナルアクセストークン}
* Expose for pull requestsにチェック ※PRで使いたいので必要
* Protectedにチェック ※PATの表示や編集は不要なので必要

## 3. ビルドステータス反映のワークフローを追加する

* ワークフローの`開始`に「GitHub Status」を追加する
  * GitHub auth token: $GITHUB_ACCESS_TOKEN
  * Set Specific Status: pending
* ワークフローの`最後`に「GitHub Status」を追加する
  * GitHub auth token: $GITHUB_ACCESS_TOKEN
  * Set Specific Status: auto

## 4. おまけ - ビルドが成功したらマージ可能にする

* リポジトリ ＞ Settings ＞ Branchesの「Add rule」を押下し、以下を入力して保存する
  * Branch name patternに`*`を入力
  * Require status checks to pass before mergingにチェック
  * Status checks that are required.に`continuous-integration/bitrise`を入れる ※検索窓にbitriseと入れれば出てくる

※ただしプライベートリポジトリの場合、チームやエンタープライズアカウントじゃないと有効にはなりません。
ハイパーバイザー

# 仮想化とは
ハードウェア、オペレーションシステム、ストレージ、ネットワーク等のコンピュータシステムを構成するリソースを`元の構成から独立させて、分割あるいは統合する形で仮想的に構成`する技術です。
オペレーティングシステムを稼働させるハードウェアプラットフォームの仮想化では、`ハイパーバイザー上に仮想マシンを構築し、その上でゲストOSを稼働`させます。
Linuxカーネルペースの仮想環境としてKVMとXenがあります。KVMとXenがあります。KVMは、CentOS 7の標準リポジトリで提供されています。Xenは、centos-virt-xenリポジトリで提供されています。

# ハイパーバイザーの種類
### ベアメタル
`ハイパーバイザーが直接ハードウェア上で動作`し、全てのOSはそのハイバーバイザー上で動作する方式です。

### ホスト型
`ハードウェア上でOS（ホストOS)が動作`し、その上でハイバーバイザーが動作する方式です。
VMwarePlayerやVirtualBoxはこの方式です。

### 気づき
VirtualBoxで仮想OSを作ってその中に複数のOSを作りたい。
自分が作るのはホスト型のハイパーバイザーのなのか。
資格のテキストではホスト型、ハイバーバイザー型と分けられているけどホスト型もハイパーバイザーを使うのか。

# 出典
https://www.sbcr.jp/product/4797382686/

# 感想
centosはサポート終了するけど仮想化、linuxに関して勉強したい。
webサーバ、apサーバ、dbサーバを作ってみたい。
大変そうだ。
GMT5.4.5をインストールする(Ubuntu22.04)

## はじめに

GMT5,GMT6で互換性がないため、GMT5で書かれたスクリプトがGMT6では使用できない。Ubuntu22.04のパッケージ管理ソフトではGMT6がセットされるため、GMT5の最終版の5.4.5をコンパイルする必要があります。(Anacondaでも一応可であるが、やりたくない。)  

## 方針

- GMTプログラム以外のデータや依存するプログラムについてはパッケージ管理ソフトで管理を行う。  
- 公式サイトのwikiにしたがう<https://github.com/GenericMappingTools/gmt/wiki>
- `/usr/local/gmt-5.4.5`にプログラム一式を置くものとする。  

## GMTが依存しているプログラムのインストール

https://github.com/GenericMappingTools/gmt/wiki/Install-dependencies-on-Ubuntu-and-Debian  

こちらの`# Install required dependencies`と`# Install optional dependencies`をインストールする  

```bash
sudo apt install build-essential cmake libcurl4-gnutls-dev libnetcdf-dev
sudo apt install gdal-bin libgdal-dev libfftw3-dev libpcre3-dev liblapack-dev libblas-dev libglib2.0-dev ghostscript
```

## GMTのデータのインストール

```bash
sudo apt install gmt-gshhg gmt-dcw
```

※gmt-gshhgは/usr/share/gmt-gshhgディレクトリにデータが格納される。  
※gmt-dcwは/usr/share/gmt-dcwディレクトリにデータが格納される。 

## GMTソースコードのダウンロード

```bash
wget https://github.com/GenericMappingTools/gmt/releases/download/5.4.5/gmt-5.4.5-src.tar.gz
tar -zxf gmt-5.4.5-src.tar.gz
cd gmt-5.4.5
```

## GMTのコンパイル

README.cmakeを見て以下必要なオプションを追加（cmakeを使います）  

### cmakeファイルの修正

```bash
cp cmake/ConfigUserTemplate.cmake cmake/ConfigUser.cmake
```

cmake/ConfigUser.cmakeでデフォルトから一部を変える。  
cmakeの-Dオプションで指定することも可能であるが、ここではConfigUser.cmakeですべての設定を決めることにする。  

以下のようにコメントアウトを外して、修正し、追加した。
```cmake:cmake/ConfigUser.cmake
set (CMAKE_INSTALL_PREFIX "/usr/local/gmt-5.4.5")
set (GMT_INSTALL_RELOCATABLE TRUE)
set (GMT_EXCLUDE_GDAL TRUE)
set (GMT_EXCLUDE_PCRE TRUE)
set (GMT_EXCLUDE_PCRE2 TRUE)
set (GMT_EXCLUDE_FFTW3 TRUE)
set (GMT_EXCLUDE_LAPACK TRUE)
set (GMT_EXCLUDE_ZLIB TRUE)
# Ubuntu 22.04の場合
set (GSHHG_ROOT "/usr/share/gmt-gshhg")
set (DCW_ROOT "/usr/share/gmt-dcw")
# gcc>=10の場合(Ubuntu22.04,CentOS Stream9は該当します。)
# <https://github.com/GenericMappingTools/gmt/issues/2493>
# <https://qiita.com/yasuhirokimura/items/d5337d73a016502b9d54>
# ConfigUser.cmakeに以下の項目を追加して古いバージョンで実行できるようにする。（対処療法）
set (CMAKE_C_FLAGS "-fcommon")
```

### ソースコードの修正

glibc>=2.32で廃止となった項目を修正する。(Ubuntu22.04,CentOS Stream9は該当します。)
こちらにありました <https://github.com/greenbone/gvmd/issues/1279>

src/common_sighandler.cの190行
```
sys_siglist[sig_num] -> strsignal (sig_num)
```
に変更する。

### 実行

```bash
mkdir build
cd build
cmake ..
make -j8 # 8コアでコンパイル
sudo make -j8 install
make clean
```

## GMTのパスを張る

最後に/usr/local/gmt-5.4.5/binにパスを張りましょう。

```bash
$ vi ~/.profile
$ vi ~/.bashrc
$ vi ~/.bash_profile
等
export PATH=/usr/local/gmt-5.4.5/bin:${PATH}
```
AWS Certified Solutions Architect - Associate [AWS SAA-C03] 合格体験記

## はじめに
入社までの間の学習期間を含め、約３か月（うち１か月はライフイベント祭り。）で実質２か月とちょっとでしょうか。２か月間学習させていただき見事一発で合格することができました。点数は836というなんとも言えない点数ですが、前へ進めるのでうれしい限りです！

## 受験前の状態
ほぼ未経験です。ですが職場で様々なサービス名を発していただいてましたので、飛び交うワードで頭に残りやすい状況はありました(^O^)
1. AWSの構築を主とした業務に就いてALB,EC2（他に実際は様々なサービスに触れています。）については構築経験がありました。
2. CCNA資格を保有していました。SAA受験に役立った知識というより、受験の手続が円滑にできたというところにアドバンテージがあったように思います(^^;

## 合格のためにしたこと及び使用教材
教材は、ほぼCloudTechのみです。平日に30～60問、休日は100問～
勉強方法は、白本を最初に１週間ほどかけて読み、サービス名とどんなことが載っているというざっくりとした理解でClouTechの問題演習に取り組みました。
問題演習はSAAとして230問あるのでこれを10周以上（記憶にないw）はやっていましたね。最初は問題を解いていてパターンが頭に入ってくる状態から、わからない言葉を理解し始めて解きなおすとわからなくなって、解けるようになってきて受験みたいな流れでした。試験１週間前に公式の問題を解き正解率18/20でしたので、完璧な状態ではありませんでしたが勢いでいきましたね(^^;
問題を解く上で使ったコツを記したいと思います。私の場合、要件を紙に書いて整理して回答したいのですが、中々難しいところもあるので、問題を一回目は速読（キーワードだけ読む。）、二回目にしっかり読む（理解できる速度で読む。）ようにして選択肢を見るといった流れにすることで、何を答えてほしい問題なのかを解釈していました。
実際にCloudTechを利用して「見たことある！」という問題は、片手に収まるくらいでした。
- 白本

https://www.sbcr.jp/product/4815607388/

- CloudTech

https://kws-cloud-tech.com/

- 公式練習問題２０問

https://explore.skillbuilder.aws/learn/course/external/view/elearning/13269/aws-certified-solutions-architect-associate-official-practice-question-set-saa-c03-japanese?saa=sec&sec=prep

## 感じた難易度
難しかったというのが率直な感想です。１週目を解き終わって２０分余った状態でフラグを付けた問題が１９問。１９問中見返すことで解けそうな問題が数問あったのでできるだけ見返したといったところでした|дﾟ)

## 受験して感じたこと
体調管理をしっかりして臨みましょう(^^;頭痛と吐き気との闘いで、机上にもどす寸前でした((+_+))持前の片頭痛を発揮し、集中力を削がれ、隣には綺麗な女性がいるという最悪な状態でしたがなんとか試験を終えて自宅に帰ることができましたw体調だけは整えて臨みましょう！

## さいごに
言葉に慣れる⇒少しずつ理解する（知識を増やす。）⇒繰り返して定着させる。教材はCloudTechのみでも受かります。
私の肌感ですが、学習期間は最低でも２か月は必要と思います。能力が高い方は別です(^^;

次はSAPを受験することになりました。受かっても落ちても記事にしますので、乞うご期待です。

では！
Javaで「条件演算子(三項演算子)」の動作を確認してみた

# 概要

Javaで「条件演算子(三項演算子)」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/ope/index13.html

# 実装

以下のファイルを作成しました。
```JSample13_1.java
class JSample13_1{
  public static void main(String[] args){
    int score;

    score = 70;
    System.out.print("Score=" + score + ":");
    System.out.println(score > 70 ? "OK" : "NG");

    score = 84;
    System.out.print("Score=" + score + ":");
    System.out.println(score > 70 ? "OK" : "NG");
  }
}
```

以下のコマンドを実行しました。
```
$ javac JSample13_1.java 
$ java JSample13_1 
Score=70:NG
Score=84:OK
```

# まとめ

何かの役に立てばと。
GMT4.5.18をインストールする(CentOS Stream9)

## はじめに

GMT4,GMT5,GMT6で互換性がないため、GMT4で書かれたスクリプトがGMT5,GMT6では使用できない。CentOS Stream9のパッケージ管理ソフトではGMT6がセットされるため、GMT4の最終版の4.5.18をコンパイルする必要があります。  

## 方針

- GMTプログラム以外のデータや依存するプログラムについてはパッケージ管理ソフトで管理を行う。  
- 公式サイトのwikiにしたがう<https://github.com/GenericMappingTools/gmt/wiki>
- `/usr/local/gmt-4.5.18`にプログラム一式を置くものとする。 

## GMTが依存しているプログラムのインストール

### 事前設定

詳細は<https://docs.fedoraproject.org/en-US/epel/>
EPEL,EPEL-NEXTリポジトリが入っていること、無効になっているCRBリポジトリが有効すること。  

```bash
dnf config-manager --enable crb
dnf install epel-release epel-next-release
# リポジトリの存在と有効無効の確認
dnf repolist --all
```

https://github.com/GenericMappingTools/gmt/wiki/Install-dependencies-on-RHEL-and-CentOS

こちらの`# Install required dependencies`と`# Install optional dependencies`をインストールする 

```bash
dnf install cmake libcurl-devel netcdf-devel gdal-devel
dnf install ninja-build gdal pcre-devel fftw3-devel lapack-devel openblas-devel glib2-devel ghostscript
```

## GMTのデータのインストール

```bash
dnf install gshhg-gmt-nc4 gshhg-gmt-nc4-full gshhg-gmt-nc4-high dcw-gmt
```

※gshhgは/usr/share/gshhg-gmt-nc4ディレクトリにデータが格納される。
※dcwは/usr/share/dcw-gmtディレクトリにデータが格納される。

## GMTソースコードのダウンロード

http://www.scc.u-tokai.ac.jp/gmt/

こちらの
- gmt-4.5.18-src.tar.bz2
- gmt-4.5.18-non-gpl-src.tar.bz2(triangle)

をインストールそして解凍

```bash
wget http://www.scc.u-tokai.ac.jp/gmt/gmt-4.5.18-src.tar.bz2
wget http://www.scc.u-tokai.ac.jp/gmt/gmt-4.5.18-non-gpl-src.tar.bz2
tar -jxf gmt-4.5.18-src.tar.bz2
tar -jxf gmt-4.5.18-non-gpl-src.tar.bz2
```
全体でgmt-4.5.18ディレクトリに格納される。後者はその中の一部gmt-4.5.18/src/ディレクトリに格納。  
※non-gpl-srcはGNUライセンスではないので別に格納しているだけである。

## GMTのコンパイル

READMEを見て以下必要なオプションを追加

```bash
cd gmt-4.5.18
./configure --prefix=/usr/local/gmt-4.5.18 --with-gshhg-dir=/usr/share/gshhg-gmt-nc4 --enable-triangle --enable-gdal
```
※./configure --helpで必要なオプションを見ることができる。
※--prefix:install場所を指定
※--with-gshhg-dir:gmt-gshhgの場所を記入
※--enable-triangle:triangle(別ソースコードになっているもの)を有効
※--enable-gdal:gdalを有効

```bash
make all
sudo make install-all 
make clean
```
※make helpで実行して何を行うか見ることができます。

## GMTのパスを張る

最後に/usr/local/gmt-4.5.18/binにパスを張りましょう。

```bash
$ vi ~/.profile
$ vi ~/.bashrc
$ vi ~/.bash_profile
等
export PATH=/usr/local/gmt-4.5.18/bin:${PATH}
```
【EC2 起動テンプレート】ソーステンプレートにインスタンスレベルで指定されたセキュリティグループがある場合、ネットワークインターフェイスを指定することはできません。

# はじめに
EC2をAutoScalingするためには、AutoScalingで増減させるEC2インスタンスの設計書ともいえる**起動テンプレート**の作成が必要です。

起動テンプレート設定中に、
EC2インスタンスにセキュリティグループをアタッチしつつ、
ENIの設定を変更しようとするとコンフリクトが発生し、ENIの設定ができませんでした。

## ENIが設定できない状態
以下のように表示されます。

![cap02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654730/5e623de3-e795-db8a-8e96-cbacb2905244.png)

>ソーステンプレートにインスタンスレベルで指定されたセキュリティグループがある場合、ネットワークインターフェイスを指定することはできません。


インスタンスレベルで指定されたセキュリティグループがある場合、ネットワークインターフェイスを指定することができません。と表示されていることが分かります。

起動テンプレートでは、インスタンスレベルでセキュリティグループを指定すると、
プライマリネットワークインターフェイスが自動作成されるためです。

通常はそれでも問題がないのですが、今回は個々のインスタンスに別々のパブリックIPv4アドレスを付与したいという思いがありました。
自動作成されたプライマリネットワークインターフェイスではデフォルトでパブリックIPv4付与がオフになっているため、困りました。

## network_interfaces側でセキュリティグループを指定する

解決方法は単純で、インスタンスレベルでセキュリティグループを指定しなければOKです。

![cap03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654730/c4c96328-fdbc-e87a-1e6e-63727c2f2d50.png)

上記の例では、インスタンスレベルでセキュリティグループを指定せず、ネットワークインターフェイス部分でセキュリティグループとENIの各種設定を行っています。

こうすることで、セキュリティグループを指定しつつ、ENIの高度な設定を行うことができました！

# おわりに
セキュリティグループを指定するとプライマリネットワークインターフェースが作成される、が意味不明で少し悩みました。

しかし、なんとなく理解できたため、ようやくAutoScalingで色々遊べます！
こうした少しの躓きも、日々ストックしていければなーと思います。
GMT4.5.18をインストールする(Ubuntu22.04)

## はじめに

GMT4,GMT5,GMT6で互換性がないため、GMT4で書かれたスクリプトがGMT5,GMT6では使用できない。Ubuntu22.04のパッケージ管理ソフトではGMT6がセットされるため、GMT4の最終版の4.5.18をコンパイルする必要があります。

## 方針

- GMTプログラム以外のデータや依存するプログラムについてはパッケージ管理ソフトで管理を行う。  
- 公式サイトのwikiにしたがう<https://github.com/GenericMappingTools/gmt/wiki>
- `/usr/local/gmt-4.5.18`にプログラム一式を置くものとする。  

## GMTが依存しているプログラムのインストール

https://github.com/GenericMappingTools/gmt/wiki/Install-dependencies-on-Ubuntu-and-Debian  

こちらの`# Install required dependencies`と`# Install optional dependencies`をインストールする  

```bash
sudo apt install build-essential cmake libcurl4-gnutls-dev libnetcdf-dev
sudo apt install gdal-bin libgdal-dev libfftw3-dev libpcre3-dev liblapack-dev libblas-dev libglib2.0-dev ghostscript
```

## GMTのデータのインストール

```bash
sudo apt install gmt-gshhg gmt-dcw
```

※gmt-gshhgは/usr/share/gmt-gshhgディレクトリにデータが格納される。  
※gmt-dcwは/usr/share/gmt-dcwディレクトリにデータが格納される。  

## GMTソースコードのダウンロード

http://www.scc.u-tokai.ac.jp/gmt/

こちらの
- gmt-4.5.18-src.tar.bz2
- gmt-4.5.18-non-gpl-src.tar.bz2(triangle)

をインストールそして解凍

```bash
wget http://www.scc.u-tokai.ac.jp/gmt/gmt-4.5.18-src.tar.bz2
wget http://www.scc.u-tokai.ac.jp/gmt/gmt-4.5.18-non-gpl-src.tar.bz2
tar -jxf gmt-4.5.18-src.tar.bz2
tar -jxf gmt-4.5.18-non-gpl-src.tar.bz2
```
全体でgmt-4.5.18ディレクトリに格納される。後者はその中の一部gmt-4.5.18/src/ディレクトリに格納。  
※non-gpl-srcはGNUライセンスではないので別に格納しているだけである。

## GMTのコンパイル

READMEを見て以下必要なオプションを追加

```bash
cd gmt-4.5.18
./configure --prefix=/usr/local/gmt-4.5.18 --with-gshhg-dir=/usr/share/gmt-gshhg --enable-triangle --enable-gdal
```
※./configure --helpで必要なオプションを見ることができる。
※--prefix:install場所を指定
※--with-gshhg-dir:gmt-gshhgの場所を記入
※--enable-triangle:triangle(別ソースコードになっているもの)を有効
※--enable-gdal:gdalを有効

```bash
make all
sudo make install-all 
make clean
```
※make helpで実行して何を行うか見ることができます。

## GMTのパスを張る

最後に/usr/local/gmt-4.5.18/binにパスを張りましょう。

```bash
$ vi ~/.profile
$ vi ~/.bashrc
$ vi ~/.bash_profile
等
export PATH=/usr/local/gmt-4.5.18/bin:${PATH}
```
RESTAPIについて全く分からなかったので、自分なりにまとめてみた。

# RestAPIとは
Rest＝Webの設計思想の事
API＝あるものとあるものを繋げる窓口の事。

## もっと詳しく
Restには4つの原則があり、これらを満たすものの事をRestfulを略してRestと呼んでいる。

APIは、窓口という言い方をする通り、事前に定義されている決まり事を用いることにより、２つそれぞれ別のサービスだったとしても、統合する事が出来、１つサービスで利用出来るようになる。

# 参考にしたサイト
https://envader.plus/article/83
flutterでネットワーク接続状態を検出・監視する

`connectivity_plus`というパッケージを使ってflutterでデバイスのネットワークの接続状況を検出、監視する方法。このパッケージを使うとネットワークの他にwifiとかbluetoothとかの接続状況をチャックすることもできるらしい。
### インストール
```shell
% flutter pub add connectivity_plus
```
### インターネット接続を監視
```dart:main.dart
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:connectivity_plus/connectivity_plus.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Connectivity Example with Flutter Hooks'),
        ),
        body: ConnectivityExample(),
      ),
    );
  }
}

class ConnectivityExample extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final isConnected = useState(false);

    useEffect(() {
      final connectivity = Connectivity();
      final subscription = connectivity.onConnectivityChanged.listen((List<ConnectivityResult> results) {
        isConnected.value = results.any((result) => result != ConnectivityResult.none);
      });

      return subscription.cancel;
    }, []);

    return Center(
      child: Text(
        isConnected.value ? 'Connected to the Internet' : 'No Internet Connection',
        style: TextStyle(fontSize: 24),
      ),
    );
  }
}

```
`flutter_hooks`を使用して`isConnected`の状態を管理（`useState`で状態を保持し`useEffect`で接続状態の監視を設定）。これにより、インターネット接続がない場合はfalse、接続がある場合はtrueに設定される。
記事一覧

# はじめに

* 基本的にあまり細かい説明はしていないです
* 細かいことはご自分で調べていただければと思います
* この記事がいろいろ調べるとっかかりになればいいなと思います

あしからず。

# 記事一覧
* C++
    * 言語
        * [[初級] C++: クラスの基本](https://qiita.com/yasu62347/items/f544e486ea2cc1965c95)
        * [[初級] C++: クラスの基本 - 特殊メンバ関数](https://qiita.com/yasu62347/items/01ab7d9e48351c1a980d)
        * [[初級] C++: 継承](https://qiita.com/yasu62347/items/8b7aa258fca08ea97c64)
        * [[初級] C++: 仮想関数](https://qiita.com/yasu62347/items/a6c193db601f2092c991)
        * [[初級] C++: 純粋仮想関数と抽象クラス](https://qiita.com/yasu62347/items/b749096df481b95e3219)
        * [[初級] C++: スマートポインタの基本](https://qiita.com/yasu62347/items/224b6215e66a73fa44c2)
    * 文字列処理
        * [[初級] C++: 文字コードのこと（2024年時点）](https://qiita.com/yasu62347/items/25a2a6f3bb913e5340f2)
        * [[初級] C++: 文字列処理の基本](https://qiita.com/yasu62347/items/5f9a410521f26cb70552)
    * ビルド関連
        * [[初級] C++: プログラムのビルド（基本）](https://qiita.com/yasu62347/items/1fdc7e71847f7fc6af45)
        * [[初級] C++: プログラムのビルド（ライブラリの利用）](https://qiita.com/yasu62347/items/17b48fa00c5aa5684b88)
    * COM
        * [[初級] C++: COMコンポーネントの使い方（ビルド関係）](https://qiita.com/yasu62347/items/af56de70a55d9357dfa2)
        * [[初級] C++: COMコンポーネントの使い方（COMオブジェクト生成）](https://qiita.com/yasu62347/items/72a9c3889b8431df0bee)
        * [[初級] C++: COMコンポーネントの使い方（COMインターフェース）](https://qiita.com/yasu62347/items/b3dd1df3dde24b316cce)
        * [[初級] C++: COMスマートポインタの基本](https://qiita.com/yasu62347/items/43183992a64a3356345e)
    * 設計など
        * [[初級] C++: 機能の拡張とは](https://qiita.com/yasu62347/items/54e8bbc63fb6a996ff88)
* その他
  * [[初級] COMの基本的な仕組み（超ざっくり）](https://qiita.com/yasu62347/items/ff9a48c9f97293dff360)

# 主要参考文献
* [C++ ドキュメント - Microsoft Learn](https://learn.microsoft.com/ja-jp/cpp/cpp/?view=msvc-170)
* [cpprefjp - C++日本語リファレンス](https://cpprefjp.github.io/)
* [C++リファレンス - cppreference.com](https://ja.cppreference.com/w/)

---
[以上]