OmniAICreator/Qiita-1.07M huggingface dataset:
日本語プログラミング言語MindをAndroidに移植した時の記録(ステップ1/9)

# はじめに

　この記事はだいぶ前（2012年）にココログの「[キリーの日本語プログラミング](http://uemon3511.cocolog-nifty.com/nihongoprogram/)」に掲載したコラムですが、再編集してこちらにも投稿します。今となっては古い話ではありますが、OSによってプログラム言語（AndroidではJava）が決め打ちされている環境で規定と異なるもの（Mind）を走らせたことの記録としてお読みください。

# AndroidでMindを動かす最初のステップ

　AndroidでMindを動かしたいと思ってからもう1年半ほど経ってしまった（編集注：この時点で2012年）がようやく最初のステップまで来た。
　本当に文字通り「動いた」だけで まだほんの序の口に過ぎない(^^;

![s41hwscreenshotmindok20120417_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118036/8e3b5ec2-e99d-528d-b115-66bd12e47fe0.png)

↓ソースコード
```mind:
メインとは
　　　　「こんにちは。Mindです。」を  簡易メッセージ表示する。
```

　実は「簡易メッセージ表示」の中でセンタリングやら色付けやらやっていてその値も固定なので、あくまで「とりあえず」のもの。本当はもう少し長いコードになるはず。

# 開発環境

　開発環境は2012年設置。当初はWindows環境で始めたが将来のオンラインでの開発サービスを考え、Linuxに切り換えた。

## 標準ツール

**OS: Red Hat Enterprise Linux 5.2**
    (注:OSは64bit走行, Mindの開発ツールは32bit走行)

**Java: JDK 6**  (javacのバージョン 1.6.0_31)

**Android SDK: r18**    (注:Eclipseは使わずコンソールベースで行う)

**Android NDK(Native Development Kit): r8b**
     (Native開発環境 C言語で記述できるように)

**ant: 1.8.4**
     (NDKをコンソールベースで行うのに必要)

## 自作ツール

Linux版Mindで作成(コンソールでの開発を容易にする)

**createavd/deleteavd**     avdの作成/削除を容易にする
**createproj**              プロジェクトの作成を容易にする
**genjnicode/genjnihead**   Cのスケルトンやヘッダを出力
**installcur/uninstallcur** パッケージのインストール・アンインストールを容易にする
**makecur**                 パッケージのmakeを容易にする

# AndroidでMindをどうやって動かすか(1)
　Mindは(Windows,Linuxとも)だいぶ以前から、コンパイラが「Mコード」と呼ぶ中間コードを生成し、(Mindで言う)「カーネル」の中にある「ディスパッチャ」と呼ぶごく小さなルーチンがそれを逐次実行する方式になっている。
 
　たとえばMindのオブジェクトコードは拡張子が .mco というバイナリファイルになっていおり、OSから見ると単なるデータファイルのように見えるがこれがプログラムの本体である。
　検討初期からAndroidでも基本的にこの機構のまま行けるだろうと思った。
　ちなみに現段階ではコンパイラはAndroid向けを別途作ったわけではなく、**LinuxのMindコンパイラをそのまま使っている。**
　MコードがOS非依存になっているおかげである。(将来的には内部の文字コードの関係から別開発の必要が生じるかも知れないが)

　Androidではプログラム記述がJava必須となっている。しかし **JNIという機構があり部分的に C, C++ で記述できる**ことになっている。一方、現行のMindは「カーネル」（ディスパッチャやプリミティブな機能の定義部分）が C記述であるため、C を媒介にすることで間接的にMindを動かすことができるだろうと考えた。

　Java, C, Mind の処理分担を図で示すと以下のようになる。
 
![001_3_cut_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118036/7e374181-2b1d-87de-f871-e2909a441a0b.png)

　図では三つが同じ分量のように見えるが、当然ながらユーザが記述したプログラムはMindのコードとなるため、プログラム規模が一定以上あればMindのコードが多くを占めることになる。
　これは重要な点だが、**MindのソースコードをCやJavaに変換するわけではない。** CやJavaのプログラムも使うのは確かだが、それらはMindの実行時、最下位レベルではCPUやOSを駆動する必要からそこを経由するに過ぎない。

## 文字コードについて

　今のところ内部処理はLinux版のMindを（コンパイラ、ランタイムライブラリとも）そのままEUCコードで走らせており、Android側との境界でUTF-8に変換している。
　本来であればMindの内部処理もUnicodeにしておけば良いのだが、Mindの利点である高度な文字列操作を行うには同じUnicodeでも固定幅コード(Mindの実績ではUCS2)を使う必要があるため、Androidとの境界でコード変換が必要（たとえば UTF-8 ←→ UCS2）という点では変わりない。

# つづく

　Mindユーザーの@mylifewithviolinさんがMindコンパイラの内部に興味を持たれているようなので参考情報として投稿してみました。本記事はしばらくつづきます。次は(ステップ2/9)。
Azure コンピューティングおよびネットワーク サービス

# 今回のまとめ事項
・Azureの基本コンポーネントについて

・AzureVMについて

・Azureコンテナについて

・Azure Virtual Desktopについて

・Azure Functionsについて

・Azure App Serviceについて

・Azure仮想ネットワークについて

・Azure ストレージサービスについて


# Azureの基本コンポーネントについて
Azureは基本的には、「アカウント」「サブスクリプション」「リソースグループ」「リソース」という構成になっています。![スクリーンショット 2024-02-18 215216.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662085/dc097f2f-b915-6323-47fc-68eaddbcefd1.png)
(Azure learningを引用）

## アカウント
基本的にアカウントのもとですべてを管理します。Googleアカウントと同じ要領で管理します。「企業で一つ」や「個人で一つ」という風に管理します。

## サブスクリプション
サブスクリプションごとに支払いを管理します。コストを明確に分けるために、「テスト・本番」というう風に分けたり、部署ごとに分けて管理します。

## リソースグループ
文字通り、リソースのグループです。サービスごとにリソースグループを作成して、このリソースグループの中にリソースを作成していきます。

## リソース
リソースとは、ストレージサービスや関数アプリのような具体的な機能です。このリソースを組み合わせてサービスを作っていきます。リソースは必ずどこからのリソースグループに属します。

# AzureVMについて
AzureVMはAzure仮想マシンです（以下VM）。VMはwebサーバーとしてや、データベースサーバー（バックエンドで機能するサーバー）としての機能を簡単に構築できるサービスです。Linuxとwindowsがあり、非常に簡単にバックエンドサーバーを構築することができます。VMはホストシステムとは完全に独立しています。HTTP通信でClient側に送受信するwebサーバー、DBとやり取りやビジネスロジックをするアプリケーションサーバー、データを整理・格納するデータベースサーバー（SQLサーバー）などがあります。

# Azureコンテナについて
コンテナは、Dockerが最も有名ですが、Azure上でもコンテナを作成することができます。コンテナとは、アプリケーションとその依存関係をまとめたパッケージにしたもので、環境やOSのことを考えずにアプリケーションを利用することができます。

# Azure Virtual Desktopについて
これは仮想デスクトップのことで、同じデスクトップをいろいろなデバイスを通して使用することができるという利点があります。職場でつかっているデスクトップ画面と同じものを自宅のPCで動かすことも可能になります。

# Azure Functionsについて
Functionsは非常に強力はツールで関数を実行するために使います。例えばアップロードされた画像をトリミングする処理があるとします。普通は、24/7でアプリを実行した状態にしておきリソースを確保した状態でなければ処理ができません。しかし、Azure Functionsはイベント駆動型の処理を行います。そのためリソースを使用したときのみ計算コストがかかるので非常に良いです。

# Azure App Serviceについて
Azure App Serviceとは、サーバーサイドを気にすることなく、アプリをホスティングすることができるサービスです。AzureVMにホスティングする場合は、すべてを自由に作成することができるというメリットがあります。しかし、すべての設定を自分でする必要があるためバックエンド側の知識も必要になります。Azure App Serviceにホスティングすればインフラの管理やセキュリティについて気にすることなく、アプリケーションの開発のみに専念することができる場合

# Azure仮想ネットワークについて
仮想ネットワークVPNは公開ネットワーク上にプライベートネットワークを作成する技術です。Azureを使って仮想ネットワークを構築することができます。例えば、Azureのクラウドとオンプレミスでデータを連携する場合などに使用します。仮想ネットワークにはポリシーベースとルートベースが存在し、それぞれ一長一短があります。ポリシーベースは特定のルートを同じポリシー（ルール）のデータが通れるというものです。小規模なネットワークで使われます。「事前に決められた条件にあうデータのみVPNトンネルを通れる」と覚えておくべきです。ルートベースは、大規模なネットワークで使われます。「送信元から宛先までの地図をデータが通るようにします」。

# Azure ストレージサービスについて
Azureストレージサービスは、Azure Blob, Azure Files, Azure キュー、Azure Disk,Azure Tableが主なストレージです。
Azure Blobは非構造化データストレージです。大量の非構造化データや、バイナリデータなどをすべて保存することができます。ビックデータなどに使用する場合もあります。
Azure Filesは、ファイルを保存するものです。
Azureキューは、メッセージなどを保存することが多いです。キューとは、保存したデータを保存した順位とり出すことができる保存方法です。ちなみにスタックは最後に入れたものから取り出します。
Azure Diskは、Azure VMのストレージのようなイメージです。VMが、Blobのデータを読み出す際はHTTP通信で接続しますが、Azure Diskは直接自分のストレージからデータを取り出す感じです。
Azure Tableは構造化データを格納する方法です。普通のテーブルです。大規模な構造化データの格納に適したスキーマレスなデータストアです。
【ネタ記事】オレが世界のナベアツ問題を解いたから見てほしい

## はじめに
資格の勉強もひと段落がつき、そろそろ何か趣味でコーディングしたいとなり、最初に思いついたのが何故か世界のナベアツのあのネタである。  
[FizzBuzz問題](https://ja.wikipedia.org/wiki/Fizz_Buzz)の延長だろうと考え、安易に取り組むことになったのだが...

:::note warn
これより以下、本文です。
大変下らない記事ですので、興味の無い方やお忙しい方はブラウザバック推奨です。
:::

## 本文
### なにはともあれ要件定義
#### FizzBuzz問題の要件定義
1. 最初のプレイヤーは「1」と数字を発言する。
2. 次のプレイヤーは直前のプレイヤーの発言した数字に1を足した数字を発言していく。
3. ただし、3の倍数の場合は「Fizz」（Bizz Buzzの場合は「Bizz」）、5の倍数の場合は「Buzz」、3の倍数かつ5の倍数の場合（すなわち15の倍数の場合）は「Fizz Buzz」（Bizz Buzzの場合は「Bizz Buzz」）を数の代わりに発言しなければならない。

#### 世界のナベアツ問題の要件定義
1. 世界のナベアツが「1」という数字を発言する。
2. 世界のナベアツが直前に発言した数字に1を足した数字を発言していく。
3. 3の倍数と3が付く数字のときだけ阿呆になります

- それぞれには上限が定められていないので、爆笑レッドカーペット時代によく宣言されていた「40」を上限とします。
- 阿呆の声は、数値の後に`(阿呆の声)`を連結して表現するものとします。

よって上記の要件をすべてまとめると以下のようになります。
|#|要件|
|-|-|
|1|世界のナベアツが「1」という数字を発言する。|
|2|世界のナベアツが直前に発言した数字に1を足した数字を発言していく。|
|3|3の倍数と3が付く数字のときだけ阿呆になります。|
|4|1から始まり、40まで数える。|
|5|阿呆の声は、数値の後に`(阿呆の声)`を連結して表現する。|



### ようやく本文
まずは、今回のベースとなるFizzBuzzのソースをここに。
```python: sample.py

for i in range(1, 41):
    if i % 3 == 0 and i % 5 == 0:
        print("Fizz Buzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)
```
FizzBuzzのソースから世界のナベアツ問題に修正するにあたり、不要な記述を削除します。
```diff_python

for i in range(1, 41):
-    if i % 3 == 0 and i % 5 == 0:
-        print("Fizz Buzz")
-    elif i % 3 == 0:
+    if i % 3 == 0:
-        print("Fizz")
+        print(i) # 数値の後に文字列を連結するため、この時点で数値に変えておく
-    elif i % 5 == 0:
-        print("Buzz")
    else:
        print(i)
```
修正後のファイルは以下のようになります。
```python: sample.py
for i in range(1, 41):
    if i % 3 == 0:
        print(i)
    else:
        print(i)
```
シンプルになりましたね。

本格的に世界のナベアツ問題に取り組んでいきます。  
この時点で、既に3の倍数の条件を満たしているので、追記するのは`3がつく数字のとき`という条件です。
まず必要なのは、`range object`をstrにキャストするということ。
その後、キャストした`str(i)`に3が含まれるかを`str.count()`を通して、3が出現する回数を受け取ります。
その返り値を元に分岐をさせて、3がつく数字を判定しようと思います。
```diff_python
for i in range(1, 41):
+   if str(i).count("3") >= 1 or i % 3 == 0:
+       print(i, "(阿呆の声)")
+   else:
        print(i)
```
:::note
@fujitanozomu 様より、ご指摘頂いた内容を元にソースを修正しました。
:::

それではこの作成したPythonファイルを実行しましょう。
```
$ python sample.py
```
以下のような結果がコマンドラインに出力されたら終了です。
```
1
2
3 (阿呆の声)
4
5
6 (阿呆の声)
7
8
9 (阿呆の声)
10
11
12 (阿呆の声)
13 (阿呆の声)
14
15 (阿呆の声)
16
17
18 (阿呆の声)
19
20
21 (阿呆の声)
22
23 (阿呆の声)
24 (阿呆の声)
25
26
27 (阿呆の声)
28
29
30 (阿呆の声)
31 (阿呆の声)
32 (阿呆の声)
33 (阿呆の声)
34 (阿呆の声)
35 (阿呆の声)
36 (阿呆の声)
37 (阿呆の声)
38 (阿呆の声)
39 (阿呆の声)
40
```

期待通りの結果が出力されましたね。
本文はここまでです、お疲れさまでした。

## まとめ
まとめも、何もなくFizzBuzz問題のソースに分岐を追加しただけですね。しかし、私の技量では、スマートに書くことができなかったことを反省しようと思います。

どなたか「こんな書き方があるよ」みたいなのをご存知でしたら、コメントを頂けると嬉しいです。

最後まで、読んで頂きありがとうございました。

## 参考文献
- [Fizz Buzz: wikipedia](https://ja.wikipedia.org/wiki/Fizz_Buzz)
- [桂三度: Wikipedia](https://ja.wikipedia.org/wiki/%E6%A1%82%E4%B8%89%E5%BA%A6)
こんなに丁寧に過去のネタがまとめられているなんて...
RDSについて勉強

メモメモ

## [RDS]DBサーバを構築する
RDSは、フルマネージドなリレーショナルデータベースのサービス

- コア機能の開発に注力できるように設計されている
- 設定できる項目には制限があり、DBパラメータグループ、DBオプショングループ、DBサブネットグループが用意されている

### 特徴

- 高い可用性
- パフォーマンスの向上
- 運用負荷の軽減
### 構築手順

- VPCからサブネットを作成
- EC2からセキュリティーグループを作成
- RDSへ移動してサブネットグループの作成
- パラメータグループの作成
- オプショングループの作成
- RDSの作成
- エンジンオプションの選択
- テンプレート選択
- 設定
- DBインスタンスサイズ選択
- ストレージ選択
- 可用性と耐久性の選択
- 接続の選択→自身で作成したVPC
- サブネットグループ選択
- セキュリティーグループ選択
- アベイラビリティーゾーン選択
- パラメータグループ選択
- オプショングループ選択
- バックアップの自動バックアップ及び保持期間などの選択
- モニタリングの選択
- ログのエクスポートの選択
- メンテナンスの選択
- 削除されたくない時は削除保護を有効化
- データベースの作成
### Web接続
※環境により異なる場合があります。
- ターミナルで下記コードを打ってAWSへログイン、部分的に自分の環境に合わせて変更する必要がある
ssh -i ~/Desktop/aws-and-infra-ssh-key.pem ec2-user@IPアドレス

- 自分が使うDBをインストールする
※例：mysqlを使う場合「sudo yum -y install mysql」

- DSからエンドポイント情報をコピーして、mysqlに接続する
mysql -h aws-and-infra-web.cldyq7bxdzdq.ap-northeast-1.rds.amazonaws.com -u root -p

以上！

-------------

記事を読んでくださった方は、是非弊社開発課のXもフォローしてね:ぽっ:

https://twitter.com/tech_cin
せっかくAWSの勉強をするので、インフラの基礎から勉強してみることにした #3

備忘録です。

## Webサーバー構築（EC2）
### EC2とは
Elastic Compute Cloud の略。AWSクラウド上の仮想サーバー。インスタンスというのはEC2から建てられたサーバーのこと

- 特徴

  - 数分で起動し、1時間または秒単位の従量課金
  - サーバーの追加・削除、マシンスペック変更も数分で可能
  - OSより上のレイヤについては自由に設定できる
- 大まかな作成手順

  - AMIの選択
  - インスタンスタイプの選択
  - ストレージの追加
  - セキュリティグループの設定
  - SSHキーペアの設定
### AMIとは
Amazon Machin Image。インスタンス起動に必要なっ情報が入ったOSのイメージ。サーバーのテンプレートのようなもの

- 特徴

  - AWSやサードパーティがAMIを提供
  - 自前のカスタムAMIも作成可能
  - カスタムAMIから何台でもEC2インスタンスを起動可能
### インスタンスタイプとは
サーバーのスペックを定義したもの

- 概要

  - インスタンスタイプにより、CPU、メモリ、ストレージ、ネットワーク帯域が異なる
  - インスタンスタイプにより料金が異なる。スペックが高いほど料金も高い
  - アクセス数などに応じて必要なスペックのあるインスタンスタイプを選択する
  - m5.xlarge→インスタンスタイプ、「ｍ」はインスタンスファミリー、「５」はインスタンス世代、「xlarge」はインスタンスサイズを表す
### ストレージとは
サーバーにくっつけるデータの保存場所。EC2のストレージは2種類ある

- EBS（Elastic Block Store）

  - 高い可用性と耐久性を持つストレージ
  - 他のインスタンスに付け替え可能
  - EC2インスタンスをStop/TerminateしてもEBSは保持可能
  - Snapshotを取得しS3に保存可能
  - EBSの費用が別途発生
  - OSやDBなどの永続性と耐久性が必要なデータを置く
- インスタンスストア

  - インスタンス専用の一時的なストレージ
  - 他のインスタンスに付け替えることが出来ない
  - EC2インスタンスをStop/Terminateするとクリアされる
  - 追加費用なし（無料）
  - 無くなってはいけないデータは置かない
  - 一時ファイル、キャッシュなど、失われても問題ないデータを置く
### インスタンスの作成
- EC2画面へ移動
- 左側メニューからインスタンスを選択
- インスタンスを起動を選択
- 名前を付ける
- AMIを選ぶ
- インスタンスタイプを選ぶ
- 新しいキーペアの作成をクリック
- キーペア名はお好みで（絶対忘れちゃだめ）
- ネットワーク設定の編集
- VPC、サブネット選択
- パブリックIP自動割り当てを有効化
- 高度なネットワーク設定を開き、プライマリIPを設定（パブリックIPアドレスの範囲内に設定）
- ストレージを設定、8G　gp2で十分
- セキュリティーグループ作成
- 名前はお好み
- インスタンスを起動

以上！

------
記事を読んでくださった方は、是非弊社開発課のXもフォローしてね:ぽっ:


https://twitter.com/tech_cin
Proxmox VE（Debian）のウェルカムメッセージの設定変更方法


## TL;DR


- ウェルカムメッセージに表示されているIPアドレスが初期セットアップ時の値のままになっていた！
- ウェルカムメッセージの設定変更手順。

## 概要
ちょっと前にセットアップしたProxmox VEで評価をしたくなったのですが、セットアップ時に管理コンソールをブックマークし忘れていたことに気が付きました。
しょうがないので実機を起動し、ウェルカムメッセージ（Proxmox VEは管理コンソールのURLが実機のウェルカムメッセージに表示されています）から確認しようとしたのですが、表示されているURLにブラウザからアクセスしようとしたけど接続できない…

OSにログインしてIPを確認したらウェルカムメッセージに表示されてものと違うことに気が付いたので、ウェルカムメッセージもメンテナンス必要だということに気が付いたという記事です。
コールドスタンバイの予備機が発動した際とかに役に立つかもしれません。

また、ProxmoxはDebianがベースなので、Debianでも同じ方法で設定が可能と思います。


## 管理コンソールのURLを確認しようとしたら…

実際にコンソール接続時に表示されたものは以下。
~~初期セットアップ時寝てたのかな？~~

```
Welcome to the Proxmox Virtual Environment. Please use your web browser to 
configure this server - connect to:

  https://192.168.100.0:8006/

```

実際のIPアドレスは以下。

```
root@pve:~# ip a
4: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 192.168.0.200/24 scope global vmbr0
```

ウェルカムメッセージの表示とインタフェースの値が全然一致してないので、ウェルカムメッセージのURLにも当然接続できません。
初期セットアップ時に設定した値が適当すぎたので、直後に修正した記憶があります。
インタフェース側を修正してもウェルカムメッセージは修正されないことが分かったので修正していきます。


## コンソール接続時のウェルカムメッセージの設定

`/etc/issue`が設定ファイルです。
表示されたまんまなので修正しましょう。

```
root@pve:/etc# cat /etc/issue

------------------------------------------------------------------------------

Welcome to the Proxmox Virtual Environment. Please use your web browser to 
configure this server - connect to:

  https://192.168.100.0:8006/

------------------------------------------------------------------------------
```



## SSH接続時のウェルカムメッセージ

オマケですが、SSH接続時のウェルカムメッセージは`/etc/motd`に記載されています。
ちなみに、PVEの管理コンソールの`シェル`からアクセスした場合もこちらが表示されます。

```
~# 
root@pve:~# cat /etc/motd 

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
```
ARC172回答メモ

# 0.はじめに
 ABCに続いて連続開催のARC。
 A問題から500点とやや難易度高めで
 あせりましたが、自分的ノルマのA問題だけは解けて
 一安心。Bも500点なので、解けてもいいはず？ですが
 ちょっと無理でした。
 レートは22上がって974と過去最高記録更新でした。


# 1.A - Chocolate
　若干時期を外した感のあるテーマ。
 一つの固まりから、正方形を切り出すと
 ０～2個の固まりになるなーとの発想と
 大きい固まりから大きい切り出しをしていく感じで
 とけるだろうと、ざっと考えて実装し、ACがとれました。
 単純に大きい固まりではなく、短い辺が大きい固まりから
 取り出すようにしないとダメということに気づけるかが
 ポイントな気もします。
 また、SortedListを使うことで時短になったかと思います。

 【実装】
 1.H,W,NとリストAを読み込む
 2.リストAを降順ソート
 3.SortedListのSL(チョコレートの固まりを格納)を定義し
 　まずおおもとの固まりをセット
   塊はtuple(min(H,W),max(H,W))[0]に小さい方をセット
 4.以下をN回繰り返し(添え字i)
  -1.変数p(切り出す正方形の辺長)に2のA[i]乗をセット
  -2.SLが空だったら、Noを出力して終了
  -3.SLが空でなかったら、SLの先頭をqにセット
  -4.q[0]がpより小さい場合→最大のチョコレートの固まりから
  　切り出したい正方形が取れない。
   　Noを出力して終了
    ～以下正方形を切り出せた場合の処理の説明
    　以下説明の補足として、3:4の長方形から、2x2の正方形を
      切り出した場合に残る、1:2の方をA、2x3の方をBとする
    　～
  -5.q[0]がp以上の場合
  　-q1(Aの幅)にq[0]-pをセット
    -q2(Bの幅)にq[1]-pをセット
  -6.q2が0の時(-6.は不要だったかも・・・)
  　-1.q1が0でなかったら、SLに(min(q1,q[1]),max(q1,q[1]))を追加
  -7.q2が0以外の時
  　-1.SLに(min(q1,q[1]),max(q1,q[1]))を追加
  　-1.SLに(min(q2,p),max(q2,p))を追加
 5.ループを無事切り抜けたら、Yesを出力して終了   

 　最初SLに格納するtupleを(長辺,短辺)としていたのを
   (短辺,長辺)に途中で直したため、-6あたりのロジックが
   おかしくなっている気もしますが、まぁ、AC取れてました・・・。

　https://atcoder.jp/contests/arc172/submissions/50423297


以上
Unlocked Packageのまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)





+ [Error (1): No default environment found. Use -o or --target-org to specify an environment.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZACS9)

+ [Package version creation fail (Unlocked Packages for Customers > Build Your First Unlocked Package)](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000JeL54)

```
sfdx force:package:version:create -p dreamhouse -d force-app -k test1234 --wait 10 -v DevHub
```

:::note
Use Java 11
Use the latest nodejs

Use the newer package command with a 40 minute timeout:

```
sfdx force:package:beta:version:create -p dreamhouse -k <password here> --wait 40 -v DevHub
```

# We found the 'dreamhouse' package already installed in your org. Make sure that you’re working in the new Trailhead Playground that you created for this challenge. Also, make sure that the new Trailhead Playground is selected in the hands-on org picklist.

+ [【未解決】Build Your First Unlocked Package](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000EmLcn)


#  Your site needs a route with route type too-many-requests. Update your file and try again.

+ [Route too-many-requests missing for unlocked package](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000HmNJ5)

:::note
can you add the following features in your scratch org definition file - "TooManyRequests",  "ExpEnhancedFeaturesNonProv" and give it a retry.
:::

# Global value set 'GenderIdentity' in record type on the entity 'Contact' cannot be resolved 

+ [I get the following error "Global value set 'GenderIdentity' in record type on the entity 'Contact' cannot be resolved "](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000PeriC)

:::note
After reviewing the article, I understand that I don't have any Global Value Sets in my unlocked package. The error is related to the Contact.GenderIdentity standard custom field which is not available in the Sandbox where I'm attempting to install the unlocked package version.

記事を確認した結果、ロック解除されたパッケージにグローバル値セットが含まれていないことがわかりました。このエラーは、ロック解除されたパッケージ バージョンをインストールしようとしているサンドボックスでは使用できない Contact.GenderIdentity 標準カスタム フィールドに関連しています。
:::

# codecoverage get erro: No such column 'SourceOrg' on sobject of type Package2VersionCreateRequest

[Error while creating unlocked package version](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000H1lfXSAR)

# Update Your Unlocked Package

+ [【未解決】Update Your Unlocked Package Trail error](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000EluF9)
IBM i (IBM Power)の性能向上はムーアの法則を超えていた♪

## AS/400初代（9404-B10）とPower E1080 1コアの性能を比較してみる

        9404-B10          2.9 CPW　　　　　　　　　　　　　　　　　　　　　　　1988年
        POWER E1080  23,500.0 CPW (1コアのCPWは公開されていないので概算値）　　2022年

**B10とE1080 1コアでは約8,103倍に性能向上しています。**

## ムーアの法則？

引用元：[ウィキペディア：ムーアの法則](https://ja.wikipedia.org/wiki/%E3%83%A0%E3%83%BC%E3%82%A2%E3%81%AE%E6%B3%95%E5%89%87)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/87d25c92-cbf6-5ae0-c985-262a4fcc2f44.png)

コンピューター性能は2年毎に2倍になる、というものです。

## はじめに・・・
**この記事には誤りが含まれています。**コメント欄で@fujitanozomu(藤田 望) 様がご指摘の通りムーアの法則はトランジスタ集積度に関するもので当記事で扱っているコンピューターの性能とは別物だという事です。IBM i 自体の性能向上の歴史、という事では間違いのない記事ではあります。何年ITやってても（かんたんなしかも調べればすぐわかることを）誤ってしまうという自戒もありこのまま（しばらく？）残そうと思います。

## AS/400～IBM Powerの性能向上グラフ

**※特に強調したいのですが、OS, ソフトウェア、システムとしてAS/400 と IBM i は全く別物です AS/400のプログラム資産そのまま移行できる、という特徴はありますが。（後継機なので当たり前ですが、いやWINDOWSなど他システムではあたりまえではないのですがw**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/0f3e3db2-721b-2f2c-3e65-30650eb982a6.png)

**34年間で1コア同士の比較で7,388倍** , **B10最小構成と現在の最大構成の比較では1,755,333倍** です。

2016年（POWER8）以前は1コア当りの性能向上がムーアの法則の予測値を超えていましたが、それ以降はコア単体の性能向上はムーアの法則までは届かず、代わりにマルチコア化することで性能向上させている、という事が分かります。

## 補足：POWER8～POWER10 (2022年時点）のCPW値の情報はこちら

上記は以下の資料に記載されています。
IBM Power Performance Capabilities Reference
IBM i operating system 7.5
October 202
https://www.ibm.com/downloads/cas/LGMXGGPJ

記事中のPower E1080 240コアのCPW値は下記の表です。
3.1.3 CPW values for IBM Power E1080 EDP4
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/9d6f79d2-61c3-50c1-f8b0-6a09315134c2.png)
AWS SAMの基本的な使い方


# AWS SAMの基本的な使い方

AWSのServerless Application Model（SAM）は、サーバーレスアプリケーションの開発とデプロイを簡単にするフレームワークです。
この記事では、SAMを使用してサーバーレスアプリケーションを開発、テスト、デプロイする基本的なコマンドを紹介します。

## はじめに

AWS SAMは、AWSのサービスを利用してサーバーレスアプリケーションを構築するためのツールです。
SAMを使用することで、Lambda関数、API Gateway、DynamoDBなどのAWSリソースを簡単に定義し、デプロイできます。

## アプリケーションの開発

### アプリケーション初期化
```
$ sam init
```

### アプリケーション構築
```
$ sam build
```

### アプリケーションをデプロイ
```
$ sam deploy --guided
```

### アプリケーション実行
```
$ sam list endpoints --output json
```

### Lambda関数とやり取りする
```
$ sam remote invoke HelloWorldFunction --stack-name sam-app
```

### アプリケーションを変更して AWS クラウド に同期する
```
$ sam sync --watch
```

### アプリケーションをローカルでテストする
```
$ sam local invoke
$ sam local start-api
$ curl http://127.0.0.1:3000/hello
```

### AWS クラウドからアプリケーションを削除する
```
$ sam delete
```

## SAM template

SAMには多くのスタートアップテンプレートがあり、それぞれのニーズに合わせて選ぶことができます。
例えば、「Hello World Example」や「Data processing」、「Lambda EFS example」などがあります。

```
Choose an AWS Quick Start application template
	1 - Hello World Example
	2 - Data processing
	3 - Hello World Example with Powertools for AWS Lambda
	4 - Multi-step workflow
	5 - Scheduled task
	6 - Standalone function
	7 - Serverless API
	8 - Infrastructure event management
	9 - Lambda Response Streaming
	10 - Serverless Connector Hello World Example
	11 - Multi-step workflow with Connectors
	12 - Full Stack
	13 - Lambda EFS example
	14 - DynamoDB Example
	15 - Machine Learning
```

## まとめ

AWS SAMは、サーバーレスアプリケーションの開発を容易にする強力なツールです。
この記事で紹介した基本的なコマンドを使って、AWS上でサーバーレスアプリケーションを構築、テスト、デプロイすることができます。

## 参考

* AWS SAM 公式ドキュメント
    * [https://aws.amazon.com/serverless/sam/](https://aws.amazon.com/serverless/sam/)
* AWS SAM GitHub リポジトリ
    * [https://github.com/awslabs/serverless-application-model](https://github.com/awslabs/serverless-application-model)
* AWS SAM CLI ドキュメント
    * [https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html)

---
### 会社紹介

**株式会社 Mosaica**  
最先端テクノロジーで社会課題を解決し、持続可能な未来を創造する IT カンパニー。
AI ソリューション、クラウド統合、DX 推進、経営コンサルティングなど包括的なサービスでビジネス変革を支援しています。  

詳しくは [公式サイト](https://mosaica.co.jp/) までお気軽にご相談ください。
公式サイト： https://mosaica.co.jp/
GraphQL Wire Adapter 


+ [GraphQL Wire Adapter in LWC](https://jzonebyte-dev-ed.develop.my.site.com/s/blogs/salesforce/graphql-wire-adapter)

Salesforce は、apex なしで Salesforce レコードを処理するための GraphQL ワイヤー アダプターを提供しています。この機能はパイロット モードにありました。ただし、現在はベータ モードであるため、この機能は現在一般利用可能です。この GraphQL 機能を使用すると、Salesforce レコードにアクセスでき、条件付きクエリもサポートされます。

  Salesforce で GraphQL を使用する主な利点は、単一のクエリで複数のオブジェクトからデータを取得できることです。これにより、開発者は関連データを取得し、複数の REST API 呼び出しの必要性を回避できます。効率的なクエリを使用してレコードをフィルタリングできます。フィルター条件により不要なデータを避けることができます。
GraphQL にはクエリを作成できるようにする 3 つの重要な識別子があります。

クエリ - (必須)解析された GraphQL クエリ。この識別子のみがクエリを解析します。gql は、GraphQL クエリをワイヤー アダプターが使用できる形式に解析します。gql はリアクティブではありません。${} 文字列補間構造を含めた場合、それらはテンプレート リテラルが展開されるときに 1 回だけ評価されます。
変数 -クエリするフィールドを表すために使用されるキーと値のペアです。ゲッター関数で変数を使用すると、ワイヤー アダプターが変更に反応できるようになります。
OperationName -これは、クエリで実行する操作の名前です。短縮構文クエリを使用する代わりに、クエリ操作名でクエリにラベルを付けることをお勧めします。

GraphQL API ワイヤー アダプターは現在、これらのユースケースではサポートされていません。

+ Experience Cloud サイト。
+ 別のコンポーネントからのフラグメントの参照など、実行時の GraphQL クエリの動的構築。
+ 名前空間パッケージで定義されたオブジェクトとフィールドの参照。
+ 名前空間パッケージ内のコンポーネントから GraphQL を使用する。
+ @skipや@includeなどのディレクティブで変数を使用する。

+ [GraphQL ワイヤー アダプターを使用したデータのフェッチ (パイロット)](https://help.salesforce.com/s/articleView?id=release-notes.rn_lwc_graphql_wire.htm&release=242&type=5)
+ [GraphQL Wire Adapter Limitations](https://developer.salesforce.com/docs/platform/graphql/guide/graphql-wire-lwc-limitations.html)
+ [Experience Cloud サイトでの Graphql ワイヤー アダプターのサポート](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZAX5jSAH)

最新のドキュメントによると、「graphql」ワイヤーアダプターは Experience Cloud サイトではサポートされていません。ただし、開発者エディション組織の Aura Experience Cloud サイトで試してみましたが、まったく問題なく動作しました。LWR Experience Cloud サイトでのみ、LWS が有効かどうかに関係なく、インポートが機能せず、エラー ページにルーティングされます。これは文書化されていない行為ですか? サンドボックスおよび本番 Aura サイトで「graphql」を安全にテストして使用できますか?
【Flet】TextFieldの入力文字チェック

## 概要

- input_filterを使うと関数を作らずに入力可能文字チェックが行える
- 事前に正規表現でパターンを設定し、入力不可文字の場合、文字の置換で対応する
- ユーザーからの入力操作時のみ、動作する

## 背景

- TextFieldを用いる時、入力可能文字チェックを行っている
  - 実行ボタン押下時のon_clickでチェック処理を行っている
  - ただ、TextField項目が多くなるとコード量が多くなってしまう
- また、実行ボタン押下よりも早くチェックしたい
  - TextFieldのon_changeでもよいが、on_clickと同じでメソッドを定義する必要あり

## input_filterを使ってみる

- TextFiledには[**input_filter**](https://flet.dev/docs/controls/textfield/#input_filter)というプロパティがバージョン0.13.0から搭載されている[^1]
- このプロパティはあらかじめ入力可能文字を設定し、想定していない文字入力を防ぐものである
  - ただし、ユーザーが文字入力を行う場合のみ動作する（プログラムの自動入力時は動作しない）

[^1]:https://github.com/flet-dev/flet/blob/main/CHANGELOG.md#0130

## 使い方

### サンプルコード[^2]

- 半角数字のみの入力欄を作ってみる
- 半角数字は受付、それ以外は入力しても何も起こらないというか空白に置き換えられる
  - 半角数字を打った後に、全角文字を入力すると入力欄がすべて空白になる

[^2]:Python(3.10)、Flet(0.20.2)で実装

```sample.py

import flet as ft


class SampleInputFilter(ft.UserControl):
    def __init__(self, page: ft.Page):
        super().__init__()
        self.page = page

    def build(self):
        self.input_item = ft.Ref[ft.TextField]()
        self.view = ft.Column(
            [
                ft.TextField(
                    ref=self.input_item,
                    width=300,
                    label="半角数字のみ受け付け",
                    input_filter=ft.InputFilter( # 事前に文字パターン設定
                      allow=True, regex_string=r"[0-9]+$", replacement_string=""
                    ),
                )
            ]
        )
        return self.view


def main(page: ft.Page):
    page.title = "Trial InputFilter"
    page.horizontal_alignment = ft.CrossAxisAlignment.START
    page.update()

    page.add(SampleInputFilter(page))


ft.app(target=main)

```

![input_filter_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1895890/992d44b9-7e11-3f8c-0d27-e55434bc7757.png)

### 属性について

- allow
  - regex_stringで設定したパターンのみ許可　or　拒否するか
  - デフォルトでは許可
- regex_string
  - 文字パターン
  - 正規表現で記載
- replacement_string
  - 禁止/拒否されたパターンを置き換えるための文字列
  - エラーメッセージとかではない
  - デフォルトは空白に置き換える

### 補足

- よくある入力パターンには、以下のヘルパーメソッドも活用できる
  - NumbersOnlyInputFilter()
    - 数字のみ
  - TextOnlyInputFilter()
    - テキスト文字のみ

## 使ってみた感想

- 事前に定義できることで、ある程度コード量は減らせそうだと感じた
- ただ、エラーテキスト表示ではない（文字置換）ため、なんでもこれに当てはめるのは良くないかも
  - ユーザーからすれば、一瞬何がおこったかわからなくなってしまう

## 参考文献

- https://flet.dev/
- https://flet.dev/docs/controls/textfield/#input_filter
Visual Studioでファイル末尾を改行する (editorconfig)

# はじめに

以下の記事を見て、Visual Studioでファイル末尾を改行したいと思い検索してみた。
https://qiita.com/hamamamama/items/11c17c7412a5aeb2ad74
しかし、Visual Studioでの設定方法の記事があまり出てこなかったので記事化しておく。VSCodeの記事はたくさん存在するのに。

# 設定方法

ルールを適用したいフォルダの直下に `.editorconfig` ファイルを作成する。Unityプロジェクトの場合、 `unity.sln` のある場所に作成しています。
`.editorconfig` をVSCodeやメモ帳などで開いて以下を入力する。
```text:.editorconfig
[*]
insert_final_newline = true
```

# おまけ

私の場合、UnityとVisual Studio側で文字コードと改行コードを統一するために `.editorconfig` を以下のように設定しています。

```text:.editorconfig
root = true

[*]
end_of_line = lf
charset = utf-8-bom
insert_final_newline = true
trim_trailing_whitespace = true

```

| 設定項目 | 説明 |
|:-|:-|
| root                     | 配下ディレクトリのみにルールを適用する |
| end_of_line              | 改行コードを指定する |
| charset                  | 文字コードを指定する |
| insert_final_newline     | ファイル末尾を改行する |
| trim_trailing_whitespace | 行末の空白を削除する。 ※なぜかVisual Studioで効きません。適用する方法を教えて... |
【AWS】Raspberry Pi 4をIoTCoreに接続する

# はじめに
最近Raspberry Pi 4を購入したので、改めてIoT Coreで学習しようと思い、まずは接続するところから始めました。
今回はサンプルアプリケーションを動かしてPub/Subを行えるところまでとなります。

# 環境
- Raspberry Pi 4
- Windows 11

# 実装
## Raspberry Piに必要なツール/ライブラリをインストール
 - OSの更新
 - ライブラリのインストール
     - cmake
     - libssl-dev
 - ツールのインストール
     - Git
     - AWS IoT Device SDK for Python
 -Pythonのインストール

今回は初めてRaspberry Piを起動したこともあり、OSの更新にとても時間がかかりました。
ライブラリについては既にインストール済みのものもあり、時間はあまりかかりませんでした。

## 証明書の発行
### AWS IoTポリシーの作成
①[ポリシー]を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/6ab272b6-387b-2223-964d-a1d9dd6a1964.png)
② [ポリシーを作成]を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/6bdd5ad2-ccba-f9dd-1a64-02f1be20e047.png)
③ ポリシー名を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/22ae05ac-f633-515a-6f6b-8fb6a1357a36.png)
④ 許可を追加して[作成]を押下
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/4f2f4ee5-4637-160a-c78a-ff81c3956dd4.png)
 ### モノのオブジェクトを作成
 ① [モノ]>[モノを作成]を押下
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/ea39a533-01a5-bd35-94bf-6d7fb89a35a4.png)
②[1つのモノを作成]>[次へ]を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/41165aac-ad7f-0124-59dd-bf02834e6f1e.png)
③モノの名前を入力して[次へ]を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/771e6a16-da46-ccb8-83a3-58b77808f3a6.png)

④[新しい証明書を自動生成(推奨)]を選択して、[次へ]を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/02db6055-58a2-80e9-e8f3-1631701b682e.png)
⑤前セクションで作成したポリシーを選択して[モノを作成]を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/a7092958-8a25-9f76-6602-5d6b9c7c7bdf.png)
⑥証明書とキーをすべてダウンロードし[完了]を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/64f52797-b0cc-89c3-56ad-bae299c341a7.png)
## 証明書ファイルをデバイスにコピー
PowerShellでscpコマンドを実行し、各種ファイルをコピー
scp ${ファイルパス} ユーザ名@Raspberry PiのIPアドレス:${コピーする先のフォルダパス}

## サンプルアプリケーションの実行
①必要な情報の確認
[設定]を押下し、エンドポイントを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/d41f7b4b-071f-0a05-a24c-052404052efc.png)
②アプリケーションの実行
ドキュメント記載のコマンドをRaspberry Pi上で実行

実行結果：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3024215/586f791e-381d-629f-0473-5acd5502cecf.png)


# 最後に
今回はサンプルアプリを実行するところまで実施しました。
今後は簡単なアプリケーションを作ってみたいと思います。

# 参考URL
[Raspberry Pi または他のデバイスを接続する](https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/connecting-to-existing-device.html)
[AWS IoTリソースの作成](https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/create-iot-resources.html) 
[AWS IoT MQTT クライアントでデバイスの MQTT メッセージを表示する](https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/view-mqtt-messages.html)
自分のためだけのWeb技術入門　〜IPアドレスってわかってるか〜


# IP アドレスとは

`コンピュータを識別する数字列`

これがないと、データをそのコンピュータに届けらんなくて、死ぬほど困っちゃう

```text.text
IPアドレスは、通信プロトコルで定められた、通信で必要なものの１つ
```

# IP アドレスの種類


`※そもそも通信プロトコルは、結構複雑になっている`
`なので、理解するには、まあまあ時間がかかる`

TCPアドレスというものはない
MACアドレスというものは、存在する

IPアドレスには、
パブリックアドレスとプライベートアドレスがある。

グループを分けて、その中で個人を見つける

といった感じ。

パブリック：グループ分け
プライベート：個人を見つける

そのためのアドレス分類

[このサイト](https://www.cman.jp/network/support/go_access.cgi)で、自分の利用しているIPアドレスを見ることができる


# IP アドレスの割り当て

パブリックアドレスの割り当てられ方：IPアドレスの管理団体が、複数存在する。その中で、アジア担当の管理団体から、パブリックアドレスが割り当ててもらっている

プライベートアドレスの割り当て：おそらく、ランダム、自動、てきとうと入った感じだと思う



# IP アドレスのバージョン

IPアドレスには、２つのバージョンがある
IPv4とIPv6だ。

そもそもIPアドレスは、従来ずっと、IPv4しかなかった。

しかし、デバイスが大量生産普及することによって、インターネットに接続される端末が増え、IPアドレスが足りなくなった。

そこで考えられ、ベーシックに移行する動きになっているのが、IPv6である

IPv4：8桁の数字列が、4つ（01110001.00011000.00101110.00000111）
IPv6：8桁の数字列が、6つ（00010111.00011011.01110001.00011000.00101110.00000111）

のようなイメージ


# IP アドレスの表記

192.168.128.10 を32ビットの正整数値で表現すると、

`11000000 10101000 10000000 00001010`

となる

# IP アドレスの CIDR 表記

サブネットマスク関連の話で、
ネットワーク部とホスト部を分けるときに、
ネットワーク部が、どこまでかを伝える手段のことを、CIDRと呼ぶ

`172.168.39.0/24`

のような表記の仕方

これは、24ビット目までが、ネットワーク部だ！！って叫んでいるぞ。

# CIDR 表記とは何か、また何のためにあるものですか？

なぜ、DIDR表記にするの？
↪︎人間にとって、読みやすい

例えば、10.0.0.0/16 が表すIPアドレスの範囲は？
↪︎10.0.0.0〜10.0.255.255


# IP アドレスの確認

パブリック：cmanのサイトにアクセスしたら、教えてくれる
プライベート：環境設定のWi-Fiの詳細から、確認できる
自分のためだけのWEB入門 〜HTTPについて説明できる〜


# HTTPとは

`HyperText Transfer Protocol`の略

日本語にすると：`ハイパーテキストを通信するプロトコル`ということ

ハイパーテキスト＝HTML文書
プロトコル＝約束事

つまり：`HTML文書を通信し合う時の約束`

ノード同士が、HTML文書をインターネット経由で送りたい時に、どのようにして送るのか、それを実現するのか、決めたもの


# プロトコルとは

`規約`に近いもの

例えばの話。

```
偉い人がいる、下っ端の人がいる

偉い人が、偉い人に話しかける時は、

「こんにちは」

で話しかける。

そのあとに、要件を伝える。

「この資料を見といてほしい」

最後に、

「また今度」

これで、一連の通信が終わる

逆に、偉い人が、下っ端の人に話しかける


「おい」

で話しかける。

そのあとに、要件を伝える。

「この資料を見といてくれ」

最後に、

「ほんじゃあな」

これで、一連の通信が終わる

```

といった具合に、通信の規約を定めておくことで、通信を実現する

# HTTPリクエストとは

`クライアントからサーバに向けて送信する情報`

例：**ほにゃらら**（URL）のWEBサイトを見せて

```
HTTPリクエストの中身は、

①リクエストライン
②リクエストヘッダ
③リクエストメッセージボディ

で構成されている
```

## ①リクエストラインには、

「`何`　を、　`どう`　したいのか」が記載されている

**何**とは、どのURLに対して
**どう**とは、どんな処理を求めてるのか

**どう**：リクエストメソッドと言う

### リクエストメソッド

先に言うと、詳しくは：[このページ](https://developer.mozilla.org/ja/docs/Web/HTTP/Methods)を見なさい

#### リクエストメソッドて何

HTTPリクエストに含まれるHTTPリクエストラインに含まれる`どうするか`の部分



#### リクエストメソッドの種類は、以下の9つ

GET：欲しい（言うことを理解した上で、返信よこせ）
HEAD：欲しい（言うことないから、とにかく返信よこせ）
POST：これをしなさい
PUT：表示内容の一部を変えなさい
DELETE：削除しなさい
CONNECT：サーバーさん、俺と繋がろうよ
OPTIONS：通信するときに、こうしようよ
TRACE：※私には、理解できなかった→他の文献を見てくれ
PATCH：あなたのこの部分を変えなさい

## ②リクエストヘッダには

よくわからない情報がたくさん書いてあるだけ

とにかく、[これ](https://wa3.i-3-i.info/word1844.html)を読んで理解してください

## ③メッセージボディとは

書いてある場合と書いてない場合がある

クライアントからサーバに送りたい情報がある時にだけ、記載される

例えば、GETの時には何も記載されない。POSTの時は、記載される

# HTTPレスポンス

`サーバからクライアントに送信される情報`

例：**ほにゃらら**のサイトはこれだよ！ほいっっ！！

## HTTPレスポンスの構成は、下記の３つ

レスポンスステータスライン
レスポンスヘッダ
レスポンスメッセージボディ

### ①レスポンスステータスライン

レスポンスの結果が、記載されている

### ②レスポンスヘッダ

レスポンス自体に関するデータが記載されている

いつレスポンスを返したか
どのサーバがレスポンスを返したか

など


### ③レスポンスメッセージボディ

リクエストされたデータそのものが記載されている

HTML文書そのものですね

※ここで疑問：付属で必要な画像は、どうなるんだろう（後で、メンターに聞いてみよう）

## HTTPレスポンスのステータスラインの種類

詳しくは、[これ](https://developer.mozilla.org/ja/docs/Web/HTTP/Status)を見てくれ

### 私は、めんどいので、下記だけ、書く

200：リクエストは成功しました。
201：リクエストは、正常に実行されました。
204：レスポンスはないが、リクエスト成功してんぜ？
301：URLを返すから、そっちを見てくれ！
400：おいおい、そんなリクエストは構文が間違ってて意味わかんねー。処理できないわ〜〜〜
401：おいおい、認証しといてくんないと、レスポンス返せないぜーー
403：おいおい、認証が拒否られてんぜ？なんとかしてくれーー
404：リクエストしてくれたのは嬉しいけど、そのデータみつかんないぜ？
500：ごめん、そのリクエストの処理方法、こっちにはわからない


# HTTP通信とは

・・・
2024/2/19主にITとかセキュリティの記事

Kendraのアクセスコントロール設定をEntra IDのOpen ID Connectを用いて有効化してみた(2/16)
https://dev.classmethod.jp/articles/kendra-sharepoint-entraid-oidc/

iPhoneユーザー注意、顔画像を盗み銀行口座を標的にするマルウェア流行中(2/17)
https://forbesjapan.com/articles/detail/69192

グーグルがAIベースの新セキュリティスキーム発表、Gmailに導入済(2/17)
https://forbesjapan.com/articles/detail/69196

[登壇レポートと勉強会感想]「サーバーのセキュリティ対策とコンテナのセキュリティ対策の違い」というタイトルで登壇しました #hibiyatech(2/17)
https://dev.classmethod.jp/articles/hibiyatech_differences-between-server-security-and-container-security/

Androidの次期バージョン「Android 15」発表、開発者プレビュー開始(2/17)
https://news.mynavi.jp/article/20240217-2885390/

生成AI、開発者に「定期報告義務」
自民が新法素案(2/17)
https://www.nikkei.com/article/DGKKZO78562980W4A210C2EA4000/

【今週のガジェット】タッチスクリーン搭載のメカニカルキーボード、“暗号キー”付きSSDボックスなど(2/17)
https://techable.jp/archives/227066

ビットコイン半減期後のセキュリティ展望、真のリスクは51%攻撃ではなくなる(2/17)
https://coinpost.jp/?p=511207

成績など400人以上の個人情報　生徒用タブレットで閲覧可能に(2/17)
https://news.yahoo.co.jp/articles/e36232bc3e1f4d4db9e5ecb9bdb3a41388fca428
https://news.livedoor.com/article/detail/25892630/

チケミー　宮下 大佑｜日本初のNFTチケットプラットフォームで、あらゆるものの価値を流通させたい(2\15)
https://sogyotecho.jp/ticketme-miyashita-interview/
【C++Builder】C ランタイムライブラリリファレンス (wctype.h)

# ワイド文字種分類及び大文字小文字変換ユーティリティ (Wide-Character Type)

| ヘッダ<br>ファイル | [wctype.h](https://docwiki.embarcadero.com/RADStudio/ja/Wctype.h%EF%BC%9A%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) |
|:---|:---|
| 規格 | C95 |
| 概要 | 3 つのデータ型、1 つのマクロ及び幾つかの関数を宣言する。  |

:::note
[ctype.h](https://qiita.com/ht_deko/items/ec11822d96b906335c33) のワイド文字版です。
:::

## プラグマ

## 型

| 名前 | 機能 |
|:---|:---|
| wctrans_t [^1] | ワイド文字の変換を表せる型です。 |
| wctype_t [^1] | ワイド文字の分類を表せる型です。 |
| (wchar_t) | ワイド文字を表現できる型です。 |

## マクロ

| 名前 | 機能 |
|:---|:---|
| [(NULL)](https://docwiki.embarcadero.com/RADStudio/ja/NULL_define)        | 任意のデータオブジェクトポインタと互換性があるヌルポインタ定数です。 |

## 引数付きマクロ

## 関数

| 名前 | 機能 |
|:---|:---|
| [iswalnum()](https://docwiki.embarcadero.com/RADStudio/ja/Isalnum%E3%80%81iscsym%E3%80%81iswalnum%E3%80%81ismbcalnum) | 英数字かどうかをテストします |
| [iswalpha()](https://docwiki.embarcadero.com/RADStudio/ja/Isalpha%EF%BC%8C_iscsymf%EF%BC%8Ciswalpha%EF%BC%8C_ismbcalpha) | 英ワイド文字かどうかをテストします |
| iswblank() [^1] | ブランクワイド文字 (水平タブ, 空白) かどうかをテストします |
| [iswcntrl()](https://docwiki.embarcadero.com/RADStudio/ja/Iscntrl%EF%BC%8Ciswcntrl) | 制御ワイド文字かどうかをテストします |
| iswctype() [^1] | ワイド文字の分類に当てはまるかをテストします。 |
| [iswdigit()](https://docwiki.embarcadero.com/RADStudio/ja/Isdigit%EF%BC%8Ciswdigit%EF%BC%8C_ismbcdigit) | 10 進数ワイド文字かどうかをテストします |
| [iswgraph()](https://docwiki.embarcadero.com/RADStudio/ja/Isgraph%EF%BC%8Ciswgraph%EF%BC%8C_ismbcgraph) | 表示可能ワイド文字かどうかをテストします (空白を含まない) |
| [iswlower()](https://docwiki.embarcadero.com/RADStudio/ja/Islower%EF%BC%8Ciswlower%EF%BC%8C_ismbclower) | 小ワイド文字かどうかをテストします |
| [iswprint()](https://docwiki.embarcadero.com/RADStudio/ja/Isprint%EF%BC%8Ciswprint%EF%BC%8C_ismbcprint) | 表示可能ワイド文字かどうかをテストします (空白を含む) |
| [iswpunct()](https://docwiki.embarcadero.com/RADStudio/ja/Ispunct%EF%BC%8Ciswpunct%EF%BC%8C_ismbcpunct) | 区切りワイド文字かどうかをテストします |
| [iswspace()](https://docwiki.embarcadero.com/RADStudio/ja/Isspace%EF%BC%8Ciswspace%EF%BC%8C_ismbcspace) | 空白ワイド文字かどうかをテストします |
| [iswupper()](https://docwiki.embarcadero.com/RADStudio/ja/Isupper%EF%BC%8Ciswupper%EF%BC%8C_ismbcupper) | 大ワイド文字かどうかをテストします |
| [iswxdigit()](https://docwiki.embarcadero.com/RADStudio/ja/Isxdigit%EF%BC%8Ciswxdigit) | 16 進数ワイド文字かどうかをテストします |
| [towlower()](https://docwiki.embarcadero.com/RADStudio/ja/Tolower%EF%BC%8C_mbctolower%EF%BC%8Ctowlower) | ワイド文字を小ワイド文字に変換します |
| [towupper()](https://docwiki.embarcadero.com/RADStudio/ja/Toupper%EF%BC%8C_mbctoupper%EF%BC%8Ctowupper) | ワイド文字を大ワイド文字に変換します |
| towctrans() [^1] | wctrans_t 型の値によってワイド文字を変換します。 |
| wctrans() [^1] | ワイド文字の変換を示す wctrans_t 型の値を生成します。 |
| wctype() [^1] | ワイド文字の分類を示す wctype_t 型の値を生成します。 |



## 資料

 - [C 言語 / 標準ライブラリ / wctype.h (Wikibooks)](https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/wctype.h)
 - [z/OS C/C++ ランタイム・ライブラリー・リファレンス wctype.h &#x2014; ワイド文字プロパティー (IBM)](https://www.ibm.com/docs/ja/zos/3.1.0?topic=files-wctypeh-wide-character-properties)
 - [C 言語の標準ヘッダ一覧 wctype.h (C 言語)](http://www.c-lang.org/detail/wctype_h.html)


---

[&#x21E6; インデックスへ](https://qiita.com/ht_deko/items/31f4b37daa97270e2416)

[^1]: C99 で追加された。
【C++Builder】C ランタイムライブラリリファレンス (time.h)

# 日付および時間 (Time)

| ヘッダ<br>ファイル | [time.h](https://docwiki.embarcadero.com/RADStudio/ja/Time.h%EF%BC%9A%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) |
|:---|:---|
| 規格 | ANSI C (C89) / C90 |
| 概要 | 時間を扱うために、2 つのマクロを定義し、幾つかの型及び幾つかの関数を宣言する。 |

## プラグマ

## 型

| 名前 | 機能 |
|:---|:---|
| [clock_t](https://docwiki.embarcadero.com/RADStudio/ja/Clock_t) | [clock()](https://docwiki.embarcadero.com/RADStudio/ja/Clock) 関数から返されるデータ型を定義します。 |
| [time_t](https://docwiki.embarcadero.com/RADStudio/ja/Time_t) | 時刻関数によって使用される値を定義します。 |
| [tm](https://docwiki.embarcadero.com/RADStudio/ja/Tm) | 時間を要素に分解して定義する構造体です。 |
| (size_t) | [sizeof()](https://docwiki.embarcadero.com/RADStudio/ja/Sizeof) が返す符号なし整数型。 |


## マクロ

| 名前 | 機能 |
|:---|:---|
| CLOCKS_PER_SEC | [clock()](https://docwiki.embarcadero.com/RADStudio/ja/Clock) 関数が返す値を秒に変換するためのマクロで、clock(CLOCKS_PER_SEC) が 1 秒になるための値。古い処理系では CLK_TCK。 |
| [(NULL)](https://docwiki.embarcadero.com/RADStudio/ja/NULL_define)        | 任意のデータオブジェクトポインタと互換性があるヌルポインタ定数です。 |


## 引数付きマクロ

## 関数

| 名前 | 機能 |
|:---|:---|
| [asctime()](https://docwiki.embarcadero.com/RADStudio/ja/Asctime)   | 日付と時刻を ASCII に変換します。<br>要確認: C11 以降なら asctime_s() で代替。 |
| [clock()](https://docwiki.embarcadero.com/RADStudio/ja/Clock)     | プロセッサ時間を測定します。 |
| [ctime()](https://docwiki.embarcadero.com/RADStudio/ja/Ctime%EF%BC%8C_wctime)     | 日付と時刻を文字列に変換します。<br>要確認: C11 以降なら ctime_s() で代替。 |
| [difftime()](https://docwiki.embarcadero.com/RADStudio/ja/Difftime)  | 2 つの時刻の時間差を計算します。 |
| [gmtime()](https://docwiki.embarcadero.com/RADStudio/ja/Gmtime)    | 日付と時刻をグリニッジ標準時（GMT）に変換します。 |
| [localtime()](https://docwiki.embarcadero.com/RADStudio/ja/Localtime) | 日付と時刻を構造体に変換します。 |
| [mktime()](https://docwiki.embarcadero.com/RADStudio/ja/Mktime)    | 時間をカレンダ形式に変換します。 |
| [strftime()](https://docwiki.embarcadero.com/RADStudio/ja/Strftime,_wcsftime) [^1] | 出力する時間を書式設定します。 |
| [time()](https://docwiki.embarcadero.com/RADStudio/ja/Time)      | 時刻を取得します。 |

:::note
ワイド文字用の関数が [wchar.h](https://qiita.com/ht_deko/items/5eaf661c0b3452845672) で定義されています。
:::

## 資料

 - [C 言語 / 標準ライブラリ / time.h (Wikibooks)](https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/time.h)
 - [z/OS C/C++ ランタイム・ライブラリー・リファレンス time.h &#x2014; 日時 (IBM)](https://www.ibm.com/docs/ja/zos/3.1.0?topic=files-timeh-time-date)
 - [C 言語の標準ヘッダ一覧 time.h (C 言語)](http://www.c-lang.org/detail/time_h.html)

---

[&#x21E6; インデックスへ](https://qiita.com/ht_deko/items/31f4b37daa97270e2416)

[^1]: C99 で機能拡張された。
【C++Builder】C ランタイムライブラリリファレンス (stddef.h)

# 共通の定義 (Standard Define)

| ヘッダ<br>ファイル | [stddef.h](https://docwiki.embarcadero.com/RADStudio/ja/Stddef.h%EF%BC%9A%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) |
|:---|:---|
| 規格 | C99 |
| 概要 | 型及びマクロを定義する。このうちの幾つかは、他のヘッダでも定義する。フリースタンディング環境で利用可能。 |

## プラグマ

## 型

| 名前 | 機能 |
|:---|:---|
| ptrdiff_t | 2 つのポインタの差を示す符号付き整数型。 |
| size_t | [sizeof()](https://docwiki.embarcadero.com/RADStudio/ja/Sizeof) が返す符号なし整数型。 |
| wchar_t | ワイド文字を表現できる型。 |

**See also:**

 - [ポインタの演算 (DocWiki)](https://docwiki.embarcadero.com/RADStudio/ja/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%AE%E6%BC%94%E7%AE%97)

## マクロ

| 名前 | 機能 |
|:---|:---|
| [NULL](https://docwiki.embarcadero.com/RADStudio/ja/NULL_define) | 任意のデータオブジェクトポインタと互換性があるヌルポインタ定数です。 |

## 引数付きマクロ

| 名前 | 機能 |
|:---|:---|
| [offsetof()](https://docwiki.embarcadero.com/RADStudio/ja/Offsetof) | 構造体メンバーのバイトオフセットを取得します。 |

## 関数

## 資料

 - [C 言語 / 標準ライブラリ / stddef.h (Wikibooks)](https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/stddef.h)
 - [z/OS C/C++ ランタイム・ライブラリー・リファレンス stddef.h &#x2014; typedef ステートメント (IBM)](https://www.ibm.com/docs/ja/zos/3.1.0?topic=files-stddefh-typedef-statements)
 - [C 言語の標準ヘッダ一覧 stddef.h (C 言語)](http://www.c-lang.org/detail/stddef_h.html)


---

[&#x21E6; インデックスへ](https://qiita.com/ht_deko/items/31f4b37daa97270e2416)

---
【C++Builder】C ランタイムライブラリリファレンス (stdbool.h)

# 論理型及び理論値 (Standard Boolean)

| ヘッダ<br>ファイル | [stdbool.h](https://docwiki.embarcadero.com/RADStudio/ja/Stdbool.h%EF%BC%9A%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) |
|:---|:---|
| 規格 | C99 |
| 概要 | 4 つのマクロを定義する。フリースタンディング環境で利用可能。 |

## プラグマ

## 型

## マクロ

| 名前 | 機能 |
|:---|:---|
| [__bool_true_false_are_defined](https://docwiki.embarcadero.com/RADStudio/ja/Bool%E3%80%81true%E3%80%81false%E3%80%81bool_true_false_are_defined) | 1。<br>論理型が使えるかを #if で判別するのに使える。 |
| [bool](https://docwiki.embarcadero.com/RADStudio/ja/Bool%E3%80%81true%E3%80%81false%E3%80%81bool_true_false_are_defined) | 論理型 [_Bool](https://docwiki.embarcadero.com/RADStudio/ja/Bool) のエイリアス。#undef 及び再定義が可能。 |
| [true](https://docwiki.embarcadero.com/RADStudio/ja/Bool%E3%80%81true%E3%80%81false%E3%80%81bool_true_false_are_defined) | 真の値 (1)。#undef 及び再定義が可能。|
| [false](https://docwiki.embarcadero.com/RADStudio/ja/Bool%E3%80%81true%E3%80%81false%E3%80%81bool_true_false_are_defined) | 偽の値 (0)。#undef 及び再定義が可能。 |

**See also:**

 - [# define TRUE !FALSE vs # define TRUE 1 (Stackoverflow)](https://stackoverflow.com/questions/35565740/define-true-false-vs-define-true-1)
 - [C 言語 010 真 TRUE と 偽 FALSE (Code Knowledge)](https://codeknowledge.livedoor.blog/archives/17959405.html)

## 引数付きマクロ

## 関数

## 資料

 - [C 言語 / 標準ライブラリ / stdbool.h (Wikibooks)](https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/stdbool.h)
 - [z/OS C/C++ ランタイム・ライブラリー・リファレンス stdbool.h &#x2014; ブール型用のマクロ (IBM)](https://www.ibm.com/docs/ja/zos/3.1.0?topic=files-stdboolh-macros-bool-type)
 - [C 言語の標準ヘッダ一覧 stdbool.h (C 言語)](http://www.c-lang.org/detail/stdbool_h.html)

---

[&#x21E6; インデックスへ](https://qiita.com/ht_deko/items/31f4b37daa97270e2416)

---
【C++Builder】C ランタイムライブラリリファレンス (stdarg.h)

# 可変個数の実引数 (Standard Argument)

| ヘッダ<br>ファイル | [stdarg.h](https://docwiki.embarcadero.com/RADStudio/ja/Stdarg.h%EF%BC%9A%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) |
|:---|:---|
| 規格 | ANSI C (C89) / C90 |
| 概要 | 呼び出される関数の実引数の個数及び型が翻訳時には分からない場合に、その実引数並びを正しく処理するための 1 つの型を宣言し 4 つのマクロを定義する。フリースタンディング環境で利用可能。 |

可変個数引数を利用する関数は 1 つ以上の固定引数 (型がわかっている) と、複数の可変個数引数で構成される。可変個数引数は `...` で表される。

```c
void foo(char *msg, ...);
```


:::note
K&R 等の古い処理系では `varargs.h` となっており、C++Builder にも含まれています。但し、`stdarg.h` と `varargs.h` を同時にインクルードする事はできません。
:::

## プラグマ

## 型

| 名前 | 機能 |
|:---|:---|
| va_list | この配列には [va_arg()](https://docwiki.embarcadero.com/RADStudio/ja/Va_arg%E3%80%81va_end%E3%80%81va_start) と [va_end()](https://docwiki.embarcadero.com/RADStudio/ja/Va_arg%E3%80%81va_end%E3%80%81va_start) で必要になる情報が格納されています。 |

## マクロ

## 引数付きマクロ

| 名前 | 機能 |
|:---|:---|
| [va_arg()](https://docwiki.embarcadero.com/RADStudio/ja/Va_arg%E3%80%81va_end%E3%80%81va_start) | 次に渡される引数（可変個数引数の 1 つ）と同じ型と値の式に展開されます。 |
| va_copy() [^1] | その時点の可変個数引数情報 (va_list) をコピーします。<br>コピー後はそれぞれ [va_arg()](https://docwiki.embarcadero.com/RADStudio/ja/Va_arg%E3%80%81va_end%E3%80%81va_start) で走査可能です。[va_end()](https://docwiki.embarcadero.com/RADStudio/ja/Va_arg%E3%80%81va_end%E3%80%81va_start) もそれぞれで呼び出す必要があります。|
| [va_end()](https://docwiki.embarcadero.com/RADStudio/ja/Va_arg%E3%80%81va_end%E3%80%81va_start) | 呼び出された関数が正常に戻るのに役立ちます |
| [va_start()](https://docwiki.embarcadero.com/RADStudio/ja/Va_arg%E3%80%81va_end%E3%80%81va_start) | 関数に渡された可変個数引数の先頭を指すように ap を設定します。lastfix は、呼び出される関数に渡される最後の固定パラメータ (固定引数が一つなら最初のパラメータ) の名前です。 |

最初の固定引数が文字列、以降が int 型の可変個数引数の関数 `foo()` の実装です。

```c
void foo(char* msg, ...)
{
    va_list ap;
    int v;
    va_start(ap, msg);
    while ((v = va_arg(ap, int)) != -1) { // 番兵は -1
        // 何かの処理
    }
    va_end(ap);
}
```

可変個数引数の個数を知る事はできないため、最後の引数に番兵 (-1) を置いて関数を呼び出します。

```c
  foo("Hello,world.", 1, 2, 3, -1);
```

**See also:**

 - [番兵 (Wikipedia)](https://ja.wikipedia.org/wiki/%E7%95%AA%E5%85%B5)

## 関数


## 資料

 - [C 言語 / 標準ライブラリ / stdarg.h (Wikibooks)](https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/stdarg.h)
 - [z/OS C/C++ ランタイム・ライブラリー・リファレンス stdarg.h &#x2014; 可変長引数リストを持つ関数の引数へのアクセス (IBM)](https://www.ibm.com/docs/ja/zos/3.1.0?topic=chf-stdargh-access-arguments-in-functions-variable-length-argument-lists)
 - [C 言語の標準ヘッダ一覧 stdarg.h (C 言語)](http://www.c-lang.org/detail/stdarg_h.html)


---

[&#x21E6; インデックスへ](https://qiita.com/ht_deko/items/31f4b37daa97270e2416)


[^1]: C99 で追加された。
【C++Builder】C ランタイムライブラリリファレンス (signal.h)

# シグナル操作 (Signal)

| ヘッダ<br>ファイル | [signal.h](https://docwiki.embarcadero.com/RADStudio/ja/Signal.h%EF%BC%9A%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) |
|:---|:---|
| 規格 | ANSI C (C89) / C90 |
| 概要 | 種々のシグナル (signal) (プログラム実行中に報告される可能性のある状態) を操作するために、1 つの型及び 2 つの関数を宣言し、幾つかのマクロを定義する。|

**See also:**

 - [シグナル (Unix) (Wikipedia)](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B0%E3%83%8A%E3%83%AB_(Unix))
 - [メッセージ (コンピュータ) (Wikipedia)](https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF))
 - [プロセス間通信 (IPC) (Wikipedia)](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E9%96%93%E9%80%9A%E4%BF%A1)

## プラグマ

## 型

| 名前 | 機能 |
|:---|:---|
| sig_atomic_t | 非同期割り込みが存在するときに、プロセッサがアトミックにロードまたは保存できる処理系定義の整数型。**volatile** 修飾子を伴ってもよい。 |

**See also:**

 - [volatile (DocWiki)](https://docwiki.embarcadero.com/RADStudio/ja/Volatile)

## マクロ

### シグナルハンドラ

| 名前 | 機能 |
|:---|:---|
| SIG_DFL | プログラムを終了します。 |
| SIG_ERR | シグナルからエラーが返されたことを示します。 |
| SIG_IGN | この型のシグナルを無視します。 |


### シグナルの種類

| 名前 | 機能 |
|:---|:---|
| SIGBREAK | キーボードがローモードである必要があります。 |
| SIGABRT | 異常終了。<br>デフォルトのアクションは [_exit(3)](https://docwiki.embarcadero.com/RADStudio/ja/Exit) の呼び出しと同じです。|
| SIGFPE | ゼロ除算演算エラー、無効な操作など。<br>デフォルトのアクションは [_exit(1)](https://docwiki.embarcadero.com/RADStudio/ja/Exit) の呼び出しと同じです。|
| SIGILL | 不正な操作。<br>デフォルトのアクションは [_exit(1)](https://docwiki.embarcadero.com/RADStudio/ja/Exit) の呼び出しと同じです。|
| SIGINT | Ctrl-C 割り込み。<br>デフォルトのアクションは [_exit(3)](https://docwiki.embarcadero.com/RADStudio/ja/Exit) の呼び出しと同じです。|
| SIGSEGV | ストレージへの不正なアクセス。<br>デフォルトのアクションは [_exit(1)](https://docwiki.embarcadero.com/RADStudio/ja/Exit) の呼び出しと同じです。|
| SIGTERM | プログラムの終了の要求。<br>デフォルトのアクションは [_exit(1)](https://docwiki.embarcadero.com/RADStudio/ja/Exit) の呼び出しと同じです。|

:::note
通常の操作中に C++Builder によって `SIGABRT` が生成されることはありません。
:::

## 引数付きマクロ

## 関数

| 名前 | 機能 |
|:---|:---|
| [signal()](https://docwiki.embarcadero.com/RADStudio/ja/Signal%EF%BC%88C_RTL%EF%BC%89) | シグナル処理アクションを指定します。 |
| [raise()](https://docwiki.embarcadero.com/RADStudio/ja/Raise) | 実行中のプログラムにソフトウェアシグナルを送ります。 |


## 資料

 - [C 言語 / 標準ライブラリ / signal.h (Wikibooks)](https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/signal.h)
 - [z/OS C/C++ ランタイム・ライブラリー・リファレンス signal.h &#x2014; 例外処理 (IBM)](https://www.ibm.com/docs/ja/zos/3.1.0?topic=files-signalh-exception-handling)
 - [C 言語の標準ヘッダ一覧 signal.h (C 言語)](http://www.c-lang.org/detail/signal_h.html)


---

[&#x21E6; インデックスへ](https://qiita.com/ht_deko/items/31f4b37daa97270e2416)

---