OmniAICreator/Qiita-1.07M huggingface dataset:
【JavaScript】Ace Editor で入力文字数制限をする

## Ace Editor とは
- JavaScript を使って簡単にコードエディタをHTMLに埋め込むことが出来るライブラリ

https://ace.c9.io/

## 概要
- Ace Editor に入力する際に文字数の制限を入れたい
- 実装方法としては onChange の際にチェックを入れる

## 設定用関数
```javascript
// 最大文字数設定用
function setAceEditorMaxLength(editor, maxLength) {
	if (!editor)	return;
	if (maxLength !== parseInt(maxLength,10)) {
		return;
	}
	editor.session.on("change",function(edt){
		var doc = editor.session.getDocument();
		var nbLines = doc.getLength() - 1;
		var Range = ace.require('ace/range').Range;
		var range = new Range(0,0, nbLines, edt.end.column);
		var text = doc.getTextRange(range);
		var textLen = text.length;
		if (textLen > maxLength) {
			var curpos = editor.getCursorPosition();
			text = text.substr(0, maxLength);
			editor.session.setValue(text);
			editor.moveCursorToPosition(curpos);
		}
	});
}

// 初期化用（設定は環境に合わせて下さい）
function initAceEditor(id) {
	var editor = ace.edit(id);
	editor.setTheme("ace/theme/crimson_editor");
	editor.setFontSize(14);

	editor.setAutoScrollEditorIntoView(true);
	editor.setOption("minLines", 5);
	editor.setOption("maxLines", "Infinity");

	editor.getSession().setMode("ace/mode/xml");
	editor.getSession().setUseWrapMode(true);
	editor.getSession().setTabSize(2);

	return editor;
}
```

## 使い方
- javascript
```javascript
	var editor4Input = initAceEditor("inputId", true);
	setAceEditorMaxLength(editor4Input , 120); // 最大120文字
```
- html
```html
	<script src="/ace-builds/src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>

...
...
	<!-- Ace Editor -->
	<div id="inputId"></div>
```

以上、お疲れさまでした！
ONLYOFFICE Workspace 12をDockerでインストールする方法

今回は、ONLYOFFICE Workspace 12をDockerでインストールする方法をご紹介します。

**はじめに**

ONLYOFFICE Workspaceを素早くインストールしたい場合は、Docker Compose経由のインストールが適しています。以下の手順で、ONLYOFFICE Workspaceの全コンポーネントを一度に起動することができます。

**ステップ1．Docker Composeをインストールする**

[Docker Compose](https://docs.docker.com/compose/install/#installing-compose)の公式ページにアクセスし、インストール手順に従います。

**ステップ2. GitHub リポジトリをクローンする**

Docker Composeのインストールが完了したら、[GitHubのリポジトリ](https://github.com/ONLYOFFICE/Docker-CommunityServer/)をクローンする必要があります。
```
git clone https://github.com/ONLYOFFICE/Docker-CommunityServer
```
**ステップ3．ONLYOFFICE Workspaceをインストールする**

次に、リポジトリフォルダに切り替える必要があります。
```
cd Docker-CommunityServer
```
メールサーバが正しく動作するように、利用する製品に応じて下記のファイルを開いてください。

・[docker-compose.groups.yml](https://github.com/ONLYOFFICE/Docker-CommunityServer/blob/master/docker-compose.groups.yml)　コミューニテイサーバーの場合(ONLYOFFICE Groupsとして配布)
・[docker-compose.workspace.yml](https://github.com/ONLYOFFICE/Docker-CommunityServer/blob/master/docker-compose.workspace.yml)　ONLYOFFICE Workspace コミューニテイエディションの場合
・[docker-compose.workspace_enterprise.yml](https://github.com/ONLYOFFICE/Docker-CommunityServer/blob/master/docker-compose.workspace_enterprise.yml)　ONLYOFFICE Workspace エンタープライズエディションの場合

次に、`${MAIL_SERVER_HOSTNAME}` 変数を**メールサーバー**の自分のホスト名で置き換えます。その後、docker-composeがインストールされていることを前提に、以下のコマンドを実行します。

```
cd link-to-your-modified-docker-compose
docker-compose up -d
```
以上です。

ONLYOFFICE Workspaceを[自分のサーバーでホストします](https://www.onlyoffice.com/ja/download-workspace.aspx)。
Requirements on Gateway, No.6, AUTOSAR R21-11(154) CP

Requirements on Gateway, No.6, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SRS_Gateway.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11,318文書読んだ。2022年6月初めにFO, AP, CP 全部到達。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 目的と成果(Purpose and Outcome)
|item|description|
|:--|:--|
|who|Gateway designer||
|what|CAN, Lin and Flexray only. Ethernet may be  out of scope.|
|importance|  high|
|others| |
|comment| Please read v.2 or v.3, there are initiaters.|


# 用語(terms)



|Term|Description¥
|:--|:--|
|Routing Configuration| Configuration data that controls the operation of the PDU Router and Signal Gateway. The configuration data defines the destination for each PDU of the PDU Router and each Signal of the signal gateway. The routing configuration should be encapsulated in a way that allows an update.
|Gw| Abbreviation of signal based gateway.
|Gatewaying-on-the-fly| PDU Gateway capability; routing between two TP modules where forwarding of data is started (when a specified threshold is reached) before all data have been received.


## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Standardization Template, AUTOSAR_TPS_StandardizationTemplate
[2] General Requirements on Basic Software Modules, AUTOSAR_SRS_BSWGeneral

# 文書履歴(document history)
ver. 0.01 初稿
ver. 0.02  (Purpose and Outcome are added. 20220604
Oracle Analytics Cloud：分析用のデータをととのえる。どういったデータを分析するか？＝「データセット」を作成する

はじめに
---
Oracle Analytics Cloud(OAC)で分析をはじめるには、まず分析の対象となるデータを指定します。対象となるデータベースについて「接続」を作成後、分析対象のデータを指定します。データベース内のスキーマ/表を選択し、データセットを作成します。

データセットの作成
---
OACにアクセスします。右上に作成ボタンがありますのでクリックします。![{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/ccec723f-7793-5a4e-452e-c5fb1a785c05.png)

データ・セットをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/ec5c1e8f-f8a5-fd2d-3c31-7888ca787993.png)

作成済の「接続」をクリックします。
![{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/89f3eae4-379f-4810-e2ac-9737199ef827.png)

分析対象のデータが格納されているスキーマ(DB User)/表を選択します。
スクロールダウンして、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/9fbde465-b38d-c4e5-f67d-3ba25279ad1a.png)

SHJPスキーマの左の▲アイコンをクリックして、展開し
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/b8248ddb-30b8-728c-6907-854c7cf03460.png)

分析対象の表SALESをダブルクリックします。しばらくすると、図のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/455b76d9-08a9-eced-1b4b-e15bee2fafa6.png)

右上のデータセットの保存アイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/e8c684e3-4b93-869e-3d16-810097404367.png)

データセットの名前を入力します。OKをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/65754ce7-2faf-d60a-b492-7b5abcc467ac.png)


以上で、データセットが作成されました。テーブルやExcelデータをアップロードしたものを総称してデータセットと呼んでいます。
オブジェクト指向の概要

### 用語の整理

- オブジェクト指向：全てを「モノ」として捉える
- オブジェクト指向言語：全てを「モノ」として」扱うことができるプログラミング言語
- オブジェクト指向設計：全てを「モノ」として捉えて設計するための考え方。
    - 設計した内容をオブジェクト指向言語で表現する

## オブジェクト指向の概念

- オブジェクト指向＝`設計の概念`
    - 「**この方針で設計すると使いやすくなる**」といった「**考え方**」
- メリット
    - 役割が分離しやすい
    - 拡張性が高い
    - 再利用性が高い
- デメリット
    - 設計に時間がかかる
    - コードが複雑になる
    - 処理の理解に時間がかかる

- オブジェクト指向以前は、機能を中心に設計する手法が一般的だった
    - しかし、その**機能に必要な値に対して修正が必要**になった場合、その**値を扱う全ての機能に対して修正が必要**になってしまう、というデメリットが、この機能中心の設計にはある・

### カプセル化

- **クラスのフィールドやメソッド**を、外部からの干渉を受けないように`隠蔽する`考え方
    - 非カプセル化の状態では、外部から自由に値の変更・取得ができてしまう
    - カプセル化を実現するためには
        - 「private」修飾子を使って値を定義する
        - getter/setterメソッドで値に干渉する
    - 以上の２つを行う

### 継承

- 親クラスの特徴を引き継ぎ、共通化されたフィールドやメソッドを再利用する考え方

## オブジェクト指向の目的

- `設計しやすくする`ことを目的として、クラスを使って`役割`を与え整理する考え方
- クラスに「**役割**」「(役割を満たす)**操作**」があることを理解することが大切
    - 役割を理解すると、２つ嬉しいことがある
    1. そのクラスがどのような操作を提供してくれるのかが理解しやすい
    2. バグ対応や追加改修を行う場合、対象となる役割(クラス)だけを切り分けて対処できる

## オブジェクト指向設計の原則

- SOLID原則
    - SRP：単一責任の原則
        - クラスは１つのことだけに責任を負う = `1クラスに1つの役割だけ`を持たせる
    - OCP：オープン/クローズドの原則
        - 提供されている機能の拡張は可能(オープン)で、修正に対して影響を受けない(クローズド)
        - ポリモーフィズムで実現可能
    - LSP：リスコフの置換原則
        - 親クラスで実装可能なものは、サブクラスに置き換わっても動作可能
    - ISP：インターフェース分離の原則
        - インターフェースはクライアントが望まないメソッドを強要してはならない
    - DIP：依存性逆転の原則
        - 親クラスは子クラスに依存してはならない
自作のyoutubeリストで不要タグを削除しました。

# 概要
### 
再生リストを作成して、しばらく経つと、サムネイルが以下のようなアイコンになっていることがあります。これは、その動画が削除されたことを意味しています。
リスト内にこのアイコンが増えてくると困ります。そのため、それらを自動削除するスクリプトを作成しました。


<img src="https://i.ytimg.com/vi/v8IKu83TVgA/mqdefault.jpg">

# 削除方法
削除の方法は、サムネイルの画像サイズをチェックして一定サイズ以下の画像を含むタグを削除しています。サムネイルにはいくつかのサイズがあります。
ここでは、mqdefault.jpgのアイコンのサイズをチェックしています。
### 事前準備
あらかじめ、リスト内のサムネイルの形式を整理しておきます。一通りのサムネイルの名称は、mqdefault.jpgの形式にしておきます。


# サンプル関数　delete_undef_thumb(html)
以下のスクリプトはリスト内の不要タグを削除するサンプルの関数です。本番環境からコピーしたコードから説明に不要なコードは削除しています。本番環境は[なつかしの曲(ポータル)](https://tecoyan.blogspot.com/#btn_cntrl)です。ytimg.naturalWidthをチェックして120より小さいか大きいかで判断しています。小さければリストから削除します。


``` 
//******************************************************************
//リストから不要タグを削除
//サムネイルチェック
//サイズはmqdefault.jpgを参照
//******************************************************************
var ytimg = new Image();
var save_data = [];
function delete_undef_thumb(html) {
    var def = $.Deferred();
    def.done(function (str) {
        //alert("完了しました。");
    });
    //default.jpgチェック
    if (html.indexOf("/default.JPG") !== -1) {
        alert("/default.jpgが含まれています。");
        return;
    }
    var dom_parser = new DOMParser();
    document_obj = null;
    //
    document_obj = dom_parser.parseFromString(html, "text/html");
    //チェックしたタグを取得後、タグリストをコピーする。
    elemx = document_obj.getElementsByClassName("ui-state-default");
    thumb = document_obj.getElementsByClassName("thumb");
    save_data = "";
    ytimg = new Image();
    //asyncとawait
    //非同期関数定義
    (async() => {
        //リストのタグを1件づつチェック
        for (let i = 0; i < elemx.length; i++) {
            //待つ
            //完了を待つ
            await new Promise(resolve => {
                //50ミリ秒毎に実行
                setTimeout(() => {
                    //ロード    
                    ytimg.src = thumb[i].src;
                    //ロードを確認後、
                    ytimg.onload = function () {
                        //サイズをチェック
                        if (ytimg.naturalWidth > 120) {
                            save_data += elemx[i].outerHTML;
                        }
                        //ここで、1件解決
                        resolve();
                    }
                }, 100);

            }, reject => {
                alert("404エラー");
                reject();
            });
            //次をロード
        }
        //**********************************************************
        //すべて完了
        //結果はsave_dataに 
        //**********************************************************
        $("#sortable").html(save_data);
     
    })();
    //完了時にリターン
    return def.promise();

}
//呼び出し側
//
delete_undef_thumb($("#sortable")[0].innerHTML).then(
function (resp) {
                //完了時のコールバック処理
                alert(resp);
});  
``` 

# 呼び出し側のパラメータ
### リスト要素
サンプルのリストは「なつかしの曲(ポータル)サイト」のリストをベースにしています。
このサイトのリストは$("#sortable").html()で取得しています。ブロック要素のid="sortable"に各動画のタグ情報が格納されています。

# あとがき
現状は、このスクリプトで、「なつかしの曲(ポータル)サイト」は動作しています。
削除された動画のサムネイルがリストの中に表示されていると見栄えがよくありません。
再生リストを再生するときはこれらの不要の動画タグをすべて削除して再生したいと思い、このスクリプトを作成しました。
Requirements on Bus Mirroring, No.874, AUTOSAR R21-11(151) CP

Requirements on Bus Mirroring, No.874, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SRS_BusMirroring.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 140文書読んだ。2022年5月末に半分到達予定。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

no

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Standardization Template, AUTOSAR_TPS_StandardizationTemplate
[2] Glossary, AUTOSAR_TR_Glossary
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf
[3] Main Requirements, AUTOSAR_RS_Main
Specification of Large Data COM, No.655, AUTOSAR R21-11(150) CP

Specification of Large Data COM, No.655, 2021-11

https://www.autosar.org/fileadmin/user_upload/standards/classic/21-11/AUTOSAR_SWS_LargeDataCOM.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 140文書読んだ。2022年5月末に半分到達予定。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

|Term|Description¥
|:--|:--|
|DEM| Diagnostic Event Manager
|DET| Default Error Tracer

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] AUTOSAR Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[2] AUTOSAR General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral.pdf
[3] AUTOSAR General Specification for Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
[4] Specification of RTE
AUTOSAR_SWS_RTE.pdf
[5] Specification of PDU Router
AUTOSAR_SWS_PDURouter.pdf
[6] Specification of System Template
AUTOSAR_RS_SystemTemplate.pdf
[7] Specification of Default Error Tracer
AUTOSAR_SWS_DefaultErrorTracer.pdf
[8] Specification of Software Cluster Connection
AUTOSAR_SWS_SoftwareClusterConnection.pdf
[9] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration.pdf
Requirements on LIN, No.42, AUTOSAR R21-11(149) CP

Requirements on LIN, No.42, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SRS_LIN.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 140文書読んだ。2022年5月末に半分到達予定。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

|Term|Description|
|:--|:--|
|LIN-PDU| LIN Protocol Data Unit is the LIN header and the LIN response, i.e. Break, synch, PID, Data (1-8) and checksum In the ISO 17987 specifications, this is called just frame. LIN_PDU is more precise and omits confusion.
|LIN-SDU |LIN Service Data Unit. The data-part of the LIN response.
|Schedule Table |A Schedule Table determines the traffic on a LIN bus (one channel). One LIN bus could have more than one Schedule Table.
|Schedule Table Handler| The Schedule Table Handler is placed at the LIN Interface of a LIN master node. It will initiate LIN-PDU’s and confirm/indicate LIN-PDU’s. It will be called by upper layers.
|Schedule Table Manager|Keeps track of all available schedule and processes the active schedule table in a LIN master node.
|LIN Driver |Module name Lin. Describes the Software Driver.
|LIN Interface |Module name LinIf. LIN Interface, describes the ISO 17987 protocol communication stack.
|Sleep-mode |In the ISO 17987 specifications the term stand-by and sleep-mode is used in similar manner. To be consequent here only sleep-mode is used.
|LIN |Local Interconnect Network
|FF| First Frame
|CF| Consecutive Frames
|SF| Single Frames
|N_PDU| Network Protocol Data Unit
|PDUR| Protocol Data Unit Router
|N_SDU |Network Service Data Unit
|N_TA| Extended Addressing Mode Connection
|UART |Universal Asynchronous Receiver Transmitter. Dear children have many names, it is also known as SCI and ESCI.
|MRF| Master Request Frame
|SRF| Slave Response Frame

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Layered Software Architecture, AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[2] General Requirements on Basic Software Modules, AUTOSAR_SRS_BSWGeneral.pdf
[3] General Requirements on SPAL, AUTOSAR_SRS_SPALGeneral.pdf
[4] Software Standardization Template, AUTOSAR_TPS_StandardizationTemplate.pdf
4.3.2 Related standards and norms
[5] ISO 17987-1:2016 Road vehicles – Local Interconnect Network (LIN) – Part 1: General information and use case definition
[6] ISO 17987-2:2016 Road vehicles – Local Interconnect Network (LIN) – Part 2: Transport protocol and network layer services
[7] ISO 17987-3:2016 Road vehicles – Local Interconnect Network (LIN) – Part 3: Protocol specification
[8] ISO 14229-7:2015 Road vehicles – Unified diagnostic services (UDS) – Part 7: UDS on local interconnect network (UDSonLIN)
[9] ISO/TR 17987-5:2016 Road vehicles – Local Interconnect Network (LIN) – Part 5: Application programmers interface (API)
[10] ISO 17987-6:2016 Road vehicles – Local Interconnect Network (LIN) – Part 6: Protocol conformance test specification
Note: Non-ISO LIN specifications (LIN 2.2A and LIN 2.1 by LIN Consortium) are available at <https://www.lin-cia.org/standards/>, even after closure of the LIN Consortium.
Specification of Bus Mirroring, No.873, AUTOSAR R21-11(148) CP

Specification of Bus Mirroring, No.873, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SWS_BusMirroring.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 140文書読んだ。2022年5月末に半分到達予定。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

no

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Glossary, AUTOSAR_TR_Glossary
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf
[2] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral
[3] Requirements on Bus Mirroring
AUTOSAR_SRS_BusMirroring
[4] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral
Specification of Diagnostic over IP, No.418, AUTOSAR R21-11(147) CP

Specification of Diagnostic over IP, No.418, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SWS_DiagnosticOverIP.pdf

AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 140文書読んだ。2022年5月末に半分到達予定。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
|Term|Description|
|:--|:--|
|ARP |Address Resolution Protocol
|DHCP |Diagnostic Host Configuration Protocol
|EID |Entity identifier
|GID |Group identifier
|ICMP |Internet Control Message Protocol
|IP |Internet Protocol
|IPv4|Internet Protocol version 4
|IPv6| Internet Protocol version 6
|TCP| Transmission Control Protocol
|TCP/IP |A family of communication protocols used in computer networks
|VIN |Vehicle Identification Number
|UDP| User Datagram Protocol


## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

Glossary も　参考に入れましょう。
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf


[1] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral
[2] Specification of Socket Adaptor
AUTOSAR_SWS_SocketAdaptor
[3] Specification of TCP/IP Stack
AUTOSAR_SWS_TcpIp
[4] Specification of PDU Router
AUTOSAR_SWS_PDURouter
[5] Specification of Diagnostic Communication Manager
AUTOSAR_SWS_DiagnosticCommunicationManager
[6] Specification of Default Error Tracer
AUTOSAR_SWS_DefaultErrorTracer
[7] Road vehicles – Diagnostic communication over Internet Protocol (DoIP)
http://www.iso.org
[8] Specification of RTE Software
AUTOSAR_SWS_RTE
1. ISO 13400-2, Road vehicles - Diagnostic communication over Internet Protocol (DoIP) - Part 2: Transport protocol and network layer services
Requirements on ECU Resource Template, No.252, AUTOSAR R21-11(146) CP

Requirements on ECU Resource Template, No.252, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_RS_ECUResourceTemplate.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 140文書読んだ。2022年5月末に半分到達予定。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
no

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)
[1] Specification of ECU Resource Template
AUTOSAR_TPS_ECUResourceTemplate
[2] Requirements on ECU Configuration
AUTOSAR_RS_ECUConfiguration
[3] Standardization Template
AUTOSAR_TPS_StandardizationTemplate
[4] Main Requirements
AUTOSAR_RS_Main
[5] Methodology for Classic Platform
AUTOSAR_TR_Methodology
[6] Glossary
AUTOSAR_TR_Glossary
[7] Generic Structure Template
AUTOSAR_TPS_GenericStructureTemplate
[8] AUTOSAR XML Schema Production Rules
AUTOSAR_TPS_XMLSchemaProductionRules
[9] Requirements on Timing Extensions
AUTOSAR_RS_TimingExtensions
[10] Requirements on AUTOSAR Features
AUTOSAR_RS_Features
Qiitaアカウント作成方法（大事なポイント付き）

初記事です。
投稿しないと、行動（習慣）を変えられないので、早速短い記事を投稿します。

・Qiitaアカウント作成方法

https://qiita.com/
にアクセスし、画面右上の「ユーザー登録」をクリック。

イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683981/b74b2f4b-7504-2639-4189-6de8d9d2e28c.png)


後は、ガイドに沿って行けば完成します。

ポイント：
1．二段階認証を必ずonにする。
2．Githubアカウントとの連携が便利。
3．私はTwitterも連携していこうと考えています。
Requirements on ECU Configuration, No.85, AUTOSAR R21-11(144) CP

Requirements on ECU Configuration, No.85, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_RS_ECUConfiguration.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 140文書読んだ。2022年5月末に半分到達予定。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

|Term|Meaning|
|:--|:--|
|BSW |Basic Software
|BSWMD |Basic Software Module Description
|ECUC |ECU Configuration
|SW-C| Software Component

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Methodology for Classic Platform
AUTOSAR_TR_Methodology
[2] Standardization Template
AUTOSAR_TPS_StandardizationTemplate
[3] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral
[4] Requirements on Runtime Environment
AUTOSAR_SRS_RTE
[5] Glossary
AUTOSAR_TR_Glossary
[6] Generic Structure Template
AUTOSAR_TPS_GenericStructureTemplate
[7] XML Schema Production Rules
AUTOSAR_TPS_XMLSchemaProductionRules
[8] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration
[9] Specification of ECU Configuration Parameters (XML)
AUTOSAR_MOD_ECUConfigurationParameters
[10] Requirements on Standardization Template
AUTOSAR_RS_StandardizationTemplate
[11] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture
[12] Basic Software Module Description Template
AUTOSAR_TPS_BSWModuleDescriptionTemplate
[13] Software Component Template
AUTOSAR_TPS_SoftwareComponentTemplate
[14] Specification of Memory Mapping
AUTOSAR_SWS_MemoryMapping
俺言語 その30

# 概要
俺言語をやってみた。
まとめてみた。

# 俺言語の仕様

https://qiita.com/ohisama@github/items/576ea85dcf44a0b67ee6

# javascriptのインタープリター

https://qiita.com/ohisama@github/items/62efdb77d1173468d19a

# pi pico のインタープリター

https://qiita.com/ohisama@github/items/88c95cd7a8d49ff8d907

# pythonのインタープリター

https://qiita.com/ohisama@github/items/f8d251fbf0c03b7611c0

# c#のインタープリター

https://qiita.com/ohisama@github/items/d39ffac72d461534daa7

# wemosのインタープリター

https://qiita.com/ohisama@github/items/95e6d6ac8d387610937a

# stm32f4-discoveryのインタープリター

https://qiita.com/ohisama@github/items/cd1758da6adcaa83e915

# 俺言語のコンパイラ
俺言語をスタックマシーンのアセンブラに変換する。

https://qiita.com/ohisama@github/items/53e4cf5a51fd421c1b52

# 俺言語のアセンブラ
スタックマシーンのアセンブラをマシン語に変換する。

https://qiita.com/ohisama@github/items/2893205c2e7f65e8b18d

# 俺cpu
マシン語を実行する。fpga

https://qiita.com/ohisama@github/items/92944456527acc1419d9

# 俺言語でexeを作る。

https://qiita.com/ohisama@github/items/7136e777daac6379a9e4


以上。
OpenCV 【動画関係まとめ】

### OpenCVを導入
~~~python
import cv2
~~~

### 動画を読み込み
~~~python
# 動画ファイル
cap = cv2.VideoCapture('ファイルのpath')
# PCの内蔵カメラ
cap = cv2.VideoCapture(0)
# USBカメラ
cap = cv2.VideoCapture(1)

# 動画ファイルのフォーマットはMP4、AVI、FLVなどに対応している
# cv2.VideoCaptureはcv2.VideoCaptureオブジェクトを生成するコンストラクタ
# 以降, cap は cv2.VideoCaptureオブジェクト を指すことにする
~~~

### 動画の情報の取得
~~~python
# 動画の横サイズ
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
# 動画の縦サイズ
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
# 動画のフレームレート
fps = cap.get(cv2.CAP_PROP_FPS)
# 動画全体のフレーム数
frameNum = cap.get(cv2.CAP_PROP_FRAME_COUNT)
# 動画の現在のフレーム
framePos = cap.get(cv2.CAP_PROP_POS_FRAMES)
# 動画の現在の経過時間[ミリ秒]
msecPos = cap.get(cv2.CAP_PROP_POS_MSEC)
~~~

### 動画の情報の設定
~~~python
# 動画の横サイズを960に設定
cap.set(cv2.CAP_PROP_FRAME_WIDTH,960)

# 返り値はbool型
# 設定が変更できた時：True, 設定が変更できなかった時：False
~~~

### 動画のフレーム情報の取得
~~~python
ret, frame = cap.read()
# 返り値はtuple型(bool型, np.ndarray型)
# bool型：フレーム情報を取得できたか(フレームが存在するか)
# np.ndarray型：フレーム情報
# cap.read()を使うと、現在位置が1つ進む
~~~

### 画像(フレーム)の表示
~~~python
# フレームを表示するウィンドウを出す
cv2.imshow('表示ウィンドウの名前',フレーム情報)
# 処理を止めて、(キー入力を待つ)
cv2.waitKey(処理を止める秒数)

# 全ての処理を終えてプログラムが終了すると、フレームを表示しているウィンドウは閉じられる
# たいていのプログラムは一瞬で終了するので、ウィンドウも一瞬で閉じてしまうことになる
# ゆっくりと見るには処理を止めておき、ウィンドウが表示されている時間を確保する必要がある
# cv2.waitkey()の返り値は
# 何もキーが押されなかった場合：-1, キーが押された場合：押されたキー
~~~

~~~python
def onMouse(event, x, y, flags, params):
    if event == cv2.EVENT_LBUTTONDOWN:
        print(x, y)

img = cv2.imread('sample.png')
cv2.imshow('sample', img)
cv2.setMouseCallback('sample', onMouse)
cv2.waitKey(0)
~~~

~~~python
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
~~~

画像の保存
~~~python
cv2.imwrite('/etc/tmp/after_Lena.jpg', img_gray)
~~~
Requirements on Basic Software Module Description Template, No.86, AUTOSAR R21-11(143) CP

Requirements on Basic Software Module Description Template, No.86, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_RS_BSWModuleDescriptionTemplate.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 140文書読んだ。2022年5月末に半分到達予定。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
|Trem|Meaning|
|:--|:--|
|BSW |Basic Software
|BSWMD |Basic Software Module Description
|BSWMD-T| Basic Software Module Description Template
|ECUC |ECU Configuration Values [11]
|ECUC Parameter Definition| ECU Configuration Parameter Definition [11]
|ECUC-T |ECU Configuration Template [11]
|ICS |Implementation Conformance Statement
|StMD| Standardized Module Definition [11]
|SWC |Software Component Description
|SWC-T |Software Component Template
|VSMD |Vendor-Specific Module Definition [11]


## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Methodology for Classic Platform
AUTOSAR_TR_Methodology
[2] Basic Software Module Description Template
AUTOSAR_TPS_BSWModuleDescriptionTemplate
[3] Meta Model-generated XML Schema
AUTOSAR_MMOD_XMLSchema
[4] Generic Structure Template
AUTOSAR_TPS_GenericStructureTemplate
[5] XML Schema Production Rules
AUTOSAR_TPS_XMLSchemaProductionRules
[6] Standardization Template
AUTOSAR_TPS_StandardizationTemplate
[7] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral
[8] Requirements on ECU Configuration
AUTOSAR_RS_ECUConfiguration
[9] Requirements on Runtime Environment
AUTOSAR_SRS_RTE
[10] Glossary
AUTOSAR_TR_Glossary
[11] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration
[12] Requirements on Standardization Template
AUTOSAR_RS_StandardizationTemplate
[13] Specification of Memory Mapping
AUTOSAR_SWS_MemoryMapping
[14] Requirements on Software Component Template
AUTOSAR_RS_SoftwareComponentTemplate
[15] Specification of RTE Software
AUTOSAR_SWS_RTE
Requirements on Diagnostic Extract Template, No.681, AUTOSAR R21-11(142) CP

Requirements on Diagnostic Extract Template, No.681, 2021-11

https://www.autosar.org/fileadmin/user_upload/standards/classic/21-11/AUTOSAR_RS_DiagnosticExtractTemplate.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 140文書読んだ。2022年5月末に半分到達予定。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
|Trem|Description|
|:--|:--|
| Redundancy|Requirements shall not be repeated within one requirement or in other requirements.
| Clearness|All requirements shall allow one possibility of interpretation only. Used technical terms that are not in the glossary must be defined.
| Atomicity|Each Requirement shall only contain one requirement. A Requirement is atomic if it cannot be split up in further requirements.
| Testability|Requirements shall be testable by analysis, review or test.
| Traceability|The source and status of a requirement shall be visible at all times.

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Standardization Template, AUTOSAR_TPS_StandardizationTemplate
[2] Unified diagnostic services (UDS) – Part 1: Specification and requirements (Release 2006-12) http://www.iso.org
[3] Specification of Diagnostic Communication Manager
AUTOSAR_SWS_DiagnosticCommunicationManager
[4] Specification of Diagnostic Event Manager
AUTOSAR_SWS_DiagnosticEventManager
[5] Motor Vehicle Pollution Control Devices http://www.iso.org
[6] Specification of Function Inhibition Manager, AUTOSAR_SWS_FunctionInhibitionManager
[7] Road vehicles – Communication between vehicle and external equipment for emission-related diagnostic – Part 5: Emission-related diagnostic services. http://www.iso.org
C言語のコードからコメントをまるっと削除する

## はじめに

C言語のコードからコメントをまるっと削除したいときありませんか？

## 結論

GCCが利用できる環境であれば、次のオプションを利用することでコメントを削除することができるそうです。

```sh
gcc -fpreprocessed -dD -E test.c
```

https://stackoverflow.com/questions/2394017/remove-comments-from-c-c-code

gccのオプションを利用すれば、コメントをまるっと削除できます。
シェルスクリプトのパイプライン中で利用したいときは `-` を使えばよい。

```sh
cat test.c \
 | gcc -fpreprocessed -dD -E - \
 | wc -l
```

この記事は以上です。
SwiftUIのプレビューで@EnvironmentObjectの値を設定する

## モデルクラス

```swift:DialogModel.swift
import Foundation

public enum DialogType {
    case none
    case loading
}

class DialogModel: NSObject, ObservableObject {
    @Published var dialogType: DialogType = .none
}
```

## SwiftUI ContentView
```swift:ContentView.swift
import SwiftUI

struct ContentView: View {
    
    @EnvironmentObject var dialogModel: DialogModel
    
    var body: some View {
```

## プレビューするときにEnvironmentObject内の変数の値を設定する方法

```swift:ContentView.swift
struct ContentView_Previews: PreviewProvider {

    static var previews: some View {

        Group {

            ContentView().environmentObject({ () -> DialogModel in
                let envObj = DialogModel()
                envObj.dialogType = .none
                return envObj
            }() )

            ContentView().environmentObject({ () -> DialogModel in
                let envObj = DialogModel()
                envObj.dialogType = .loading
                return envObj
            }() )

        }
    }
}
```

## 参考
https://www.hackingwithswift.com/forums/swiftui/swiftui-preview-and-atenvironmentobject/6844/10969

## GitHub
[TDD](https://github.com/TakanobuSano/TDD)
BitBucketにPushできなかった時の解決策（備忘録）

# BitBucketにPushをしようとしたらrejectされた。

## 起こったこと

　 ソースファイルをBitBucketのリポジトリにPushしようとしたが、`![rejected]`された。（Githubで試したが問題なくPushできた。）

```
$git push origin master

error: failed to push some refs to 'https://bitbucket.org/×××/○○○.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
```

## 解決法
 エラーメッセージの中に
```
hint: 'git pull ...') before pushing again.
```
とあったので、まずは`git pull` してみようと思ったのだが…

```
$git pull origin master

From https://bitbucket.org/×××/○○○
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories
```

無関係のブランチはマージできないらしい。
そこで、
```
git pull --allow-unrelated-histories origin master
```
として、オプションで無関係のブランチのマージを許可すると、問題なく`pull`できた。
その後、当初の目的である`git push`も成功した。
Do not access Object.prototype method 'hasOwnProperty' from target object  no-prototype-builtinsの対処法


## はじめに

eslint実施時に以下のエラーが出たため、その時の対応をまとめました。

```bash
Do not access Object.prototype method 'hasOwnProperty' from target object  no-prototype-builtins
```

## 問題のコード

```js
const hasProperty = entry.hasOwnProperty('Key');
if (hasProperty) {
	// 処理
}
```

## 改善したコード

以下のように`Object.prototype`を使うことでエラーが出なくなりました。

```js
const hasProperty = Object.prototype.hasOwnProperty.call(entry, 'Key');
if (hasProperty) {
	// 処理
}
```

## 参考
https://stackoverflow.com/questions/39282873/object-hasownproperty-yields-the-eslint-no-prototype-builtins-error-how-to
wevtutilコマンドの/qオプションに抵抗感がある

# 前提や背景など
Windowsサーバの保守をやっていると、時々お世話になる `wevtutil` というコマンドがあります。このコマンドは、Windowsのイベントログをごにょごにょする機能があるのですが、自分の場合はほとんどイベントログをエクスポートするのに使います。

典型的な使い方は以下のようになります。

```powershell
wevtutil epl system "c:\temp\$($env:computername)_system.extx"
```

ただ、上記のようにエクスポートすると全部のログをエクスポートしてしまうので、ファイルサイズが大きくなりすぎて後々の取り扱いが面倒になったりします。そこで、実作業としては「期間」や「イベントソース」で絞り込みをすることが多いです。

`wevtutil` コマンドには絞り込みを行うオプションとして、`/q` があるのですが、絞り込み条件を `xpath` で指定する必要があり、その場で組み立てるのはハードルが高いです。

例えば「過去7日間」でフィルタする例は以下のようになります。

```powershell
wevtutil epl system "c:\temp\$($env:computername)_system.evtx" /q:"*[System[TimeCreated[timediff(@SystemTime) <= 604800000]]]"
```

普段から `xpath` に慣れ親しんでいて、Windowsのイベントログにも精通していれば自由自在なのかもしれませんが、中々そんなことができる人は居ないと思います。

一方で、「期間を指定してエクスポートしたいならイベントビューアのフィルターを使えば良い」という考え方もあります。サーバ1台だけならこの方法でも良いのですが、複数台になると途端に手間が増えて時間がかかるため、コマンド一撃で済ませたい場面は多いです。

# 最初の1台だけイベントビューアを使って残りはコマンド

前置きが長くなりましたが、現実的には「最初の1台だけイベントビューアを使って残りはコマンド」というやり方をします。

イベントビューアのフィルターの設定画面には、「XML」というタブがあります。この「XML」タブには、フィルター画面で設定した通りの条件で `xpath` が生成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42724/31ea2217-04a5-9016-32f1-e2650b3cbaa8.png)
　↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42724/44f98a9b-69f8-df3e-8694-5191ec9ad9a1.png)

この、`<Select ...></Select>` に囲まれた部分が `xpath` となっているので、これをコピーしてコマンドを作れば2台目以降はコマンド一撃で作業を終わらせることができます。

尚、イベントビューアの「XML」タブに表示されている不等号（`>` や `<`）は、XML のルールに基づいて `&gt;` と `&lt;` に変換されているため、コマンドとして実行するときは、元の形に戻しててる必要があります。

```powershell
wevtutil epl system "c:\temp\$($env:computername)_system.evtx" /q:"*[System[(EventID=1201) and TimeCreated[timediff(@SystemTime) <= 604800000]]]"
```

# おわりに

同僚が困っていたので書きました。前提があるのは一般化のためです。稚拙なのは許してください。
HTTPの改善、クッキー

# HTTP（プロトコル)の特徴
```ステートレス```というものがある。
## 一体どのなものなのか？
```Stateless```とは状態を保持しないという意味である。
つまり
HTTPは一往復の通信で完結する。なので複数の処理には関連性はないことを表す。
逆にステートフルがある。

# ステートフル
ステートレスの逆で複数の処理に関連性があることを示す。
しかしクライアントが多くなるとサーバーに大きな負荷がかかる。
一人一人に違う処理をしなければならないからだ。

# Webシステムに対する適性
そのためWebシステムで利用されているHTTPでは多くの処理を素早く処理するためにも、状態を保持することなく要求された内容を応答する```ステートフル```な設計が適する。

# HTTPの弱点
ショッピングサイトでは買い物カゴに商品を入れるので一回の通信で完結してしまうと、カゴに入れられないようになる。
そのためそれができる仕組みが導入された```Cookie(クッキー)```が出てきた。

# Cookie（状態を保持し管理する仕組み)
ブラウザにサーバーが保存させる。
Webブラウザに保存に保存してもらいたい情報をCookieとして送る。
Webサーバーが接続してきたWebブラウザを識別するためにCookieを送る。
Webブラウザがサーバーに接続する際に保存しておいたCookieを送信して識別する

# Cookieの送信はメッセージヘッダー（HTTPメッセージの中）
WebサーバーはHTTPレスポンスに```set-Cookie```ヘッダーを含めることでCookieを送信できる。
ブラウザはHTTPリクエストにCookieヘッダーを含めることで送信できる。

# セッションCookie
有効期限が設定されていないCookieはWebブラウザが閉じられると同時に削除される。
それを```セッションCookie```と呼ばれる。
期限設定されたCookieはWebブラウザを閉じても削除されず、有効期限がくるまでWebブラウザに保存する。
Python OpenCV で sRGB -> YUV に変換するメモ

sRGB -> YUV に Python で OpenCV あたりで変換したい.
画像サイズ大きいので高速処理したい.

ネット上では YUV -> RGB ばかりでつらい :cry:

## YUV

いろいろフォーマットあります.

https://hk.interaction-lab.org/firewire/yuv.html
https://www.klab.com/jp/blog/tech/2016/1054828175.html

通常は 420(8bit) あたりでしょうか

## OpenCV color conversion

https://docs.opencv.org/3.4/d8/d01/group__imgproc__color__conversions.html#ga4e0972be5de079fed4e3a10e24ef5ef0

## YUV420(IV12)

`COLOR_RGB2YUV_I420` でいけます!

## NV12

cv2 では直接はサポートしていないです :cry:

とりあえずぺろっと処理する.

https://stackoverflow.com/questions/57022633/how-to-convert-srgb-to-nv12-format-using-numpy

画像サイズが 2 の倍数でないとエラーになりますのでご注意ください.

理想は一旦 `COLOR_RGB2YUV` あたりで変換して, その後 U, V を interleave で入れ替えるでしょうか.


## colorspace

T.B.W.

### おまけ(ffmpeg)

fmmpeg でも PNG などを YUV に変換できます!

NV12 の場合は

```
ffmpeg で -pix_fmt nv12
```

(バグ(?)なのか yuv420p は 420i として処理される)
TypeScript と React でボタンを作る

次のようなページを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/2fbb86d0-fad6-56b3-63f8-feb630e70a4d.png)
こちらのページを参考にしました。
[Reactでいいねボタンを作ろう](https://typescriptbook.jp/tutorials/react-like-button-tutorial)

プロジェクトの作成

```bash
npx create-react-app like-button --template typescript
```

サーバーの実行

```bash
cd like-button
yarn start
```

ブラウザーで
http://localhost:3000/
にアクセス

ソースの作成

```tsx:src/App.tsx
import React, { useState } from 'react';
import logo from './logo.svg';
import './App.css';

function App() {
  return (
   <div className="App">
      <header className="App-header">
	<LikeButton />
	</header>
    </div>
  );
}

function LikeButton() {
	const [count,setCount] = useState(999);
	const handleClick_plus = () => { setCount(prev => prev + 1); };
	const handleClick_minus = () => { setCount(prev => prev - 1); };
  return <div>
	<span className="likeButton_plus" onClick={handleClick_plus}>+
	</span>
	&nbsp;
	&nbsp;
	{count}
	&nbsp;
	&nbsp;
	<span className="likeButton_minus" onClick={handleClick_minus}>-
	</span>
	</div>
}

export default App;
```

```css:src/App.css
.App {
  text-align: center;
}

.App-logo {
  height: 40vmin;
  pointer-events: none;
}

@media (prefers-reduced-motion: no-preference) {
  .App-logo {
    animation: App-logo-spin infinite 20s linear;
  }
}

.App-header {
  background-color: #282c34;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  font-size: calc(10px + 2vmin);
  color: white;
}

.App-link {
  color: #61dafb;
}

@keyframes App-logo-spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

.likeButton_plus {
  background-color: green;
  color: white;
  padding: 0.8rem;
  border-radius: 0.4rem;
  cursor: pointer;
}
.likeButton_minus {
  background-color: red;
  color: white;
  padding: 0.8rem;
  border-radius: 0.4rem;
  cursor: pointer;
}
```

ブラウザーで
http://localhost:3000/
にアクセス

次のバージョンで確認しました。

```text
$ npx create-react-app --version
5.0.1
```

vercel にデプロイした状況
![like-button_may26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/6e254380-b8c2-c36b-e770-1eee64819688.png)
SQLによるデータ抽出（初心者向け）

**スクールでのSQLの課題提出での備忘録**


今回の課題は２つのcsvデータからそれぞれデータを読み込み、ターミナルを使って目的の形にデータを抽出すると言うもの。
前提としてターミナルで`psql -d　〜` を行い「ooo=#」の状態になっていること。
```
ooo=# ¥COPY table名 FROM 'csvファイル名.csv' WITH CSV
```
を実行しデータを読み込んでいること。

まずは、一つ一つ命令文についておさらい
- 【SELECT カラム名 FROM テーブル名】 でデータを取り出す。【カラム名,カラム名】とすることで複数のデータが取り出せる
- 【WHERE】で条件による絞り込みが可能
- 【AND】複数条件にすることが可能（〜かつ〜）
- 【BETWEEN a AND b】でa以上b以下と範囲指定が可能
- 【ORDER BY カラム名】ソートが可能デフォルトは昇順。【ORDER BY　〜　DESC】とすることで降順になる
- 【LIMIT】上位何位まで表示する際に使用
- 【GROUP BY　グループ化するカラム名】書き方としては【SELECT カラム名　FROM テーブル名　GROUP BY グループ化するカラム名】
- 【COUNT】データ数を集計する
- 【JOIN ON】でテーブル同士を連結する。書き方は【JOIN 連結するテーブル名　ON 元のテーブル名．紐づけるカラム名　＝　連携するテーブル名．紐づけるカラム名】


今回は異なるデータの入った２つのcsvに関連するIDが記載された列があるためそれをJOIN ONで繋ぎ、GROUP BYでグループ化して表示したかったが、なかなかできなかった。ふとエラー文を翻訳すると以下のエラーが出た。

```
column "divisions.division_id" must appear in the GROUP BY clause or be used in an aggregate function
```
google翻訳！
> 列「divisions.division_id」は、GROUP BY句に含めるか、集計関数で使用する必要があります

自分が一番苦戦しながらも理解したことは、SELECT COUNT(＊)としたり、JOIN ONで他のデータと連携させるときにはGROUP BYで表示させたいデータを複数指定しておかないとエラーとなると言うことがわかりました。

誰かのお役に立つのかはわかりませんが、頑張って投稿もしていきたいと思います。
エラー文に答えがあるってこう言うことなんですね。日々勉強です。
PostgreSQL　システムカタログから型情報を参照する方法

# はじめに

PostgreSQLを学び始めました。
KaggleのデータをPostgreSQLに入れて、いろいろ実験しています。

PostgreSQLのデータ型は、基本型、コンテナ型、ドメイン、疑似型に分類されますが、ここでは主に基本データ型を扱います。
型について気になったのでまとめたメモです。

## 型の一覧

基本データ型は以下が用意されています。

|名称|別名|説明|
|:----|:----|:----|
|bigint|int8|8バイト符号付き整数|
|bigserial|serial8|自動増分8バイト整数|
|bit [ (n) ]| |固定長ビット列|
|bit varying [ (n) ]|varbit [ (n) ]|可変長ビット列|
|boolean|bool|論理値（真/偽）|
|box| |平面上の矩形|
|bytea| |バイナリデータ（「バイトの配列（byte array）」）|
|character [ (n) ]|char [ (n) ]|固定長文字列|
|character varying [ (n) ]|varchar [ (n) ]|可変長文字列|
|cidr| |IPv4もしくはIPv6ネットワークアドレス|
|circle| |平面上の円|
|date| |暦の日付（年月日）|
|double precision|float8|倍精度浮動小数点（8バイト）|
|inet| |IPv4もしくはIPv6ホストアドレス|
|integer|int, int4|4バイト符号付き整数|
|interval [ fields ] [ (p) ]| |時間間隔|
|json| |テキストのJSONデータ|
|jsonb| |バイナリ JSON データ, 展開型|
|line| |平面上の無限直線|
|lseg| |平面上の線分|
|macaddr| |MAC（Media Access Control）アドレス|
|macaddr8| |MAC (Media Access Control) アドレス (EUI-64 形式)|
|money| |貨幣金額|
|numeric [ (p, s) ]|decimal [ (p, s) ]|精度の選択可能な高精度数値|
|path| |平面上の幾何学的経路|
|pg_lsn| |PostgreSQLログシーケンス番号|
|pg_snapshot| |ユーザレベルのトランザクションIDスナップショット|
|point| |平面上の幾何学的点|
|polygon| |平面上の閉じた幾何学的経路|
|real|float4|単精度浮動小数点（4バイト）|
|smallint|int2|2バイト符号付き整数|
|smallserial|serial2|自動増分2バイト整数|
|serial|serial4|自動増分4バイト整数|
|text| |可変長文字列|
|time [ (p) ] [ without time zone ]| |時刻（時間帯なし）|
|time [ (p) ] with time zone|timetz|時間帯付き時刻|
|timestamp [ (p) ] [ without time zone ]| |日付と時刻（時間帯なし）|
|timestamp [ (p) ] with time zone|timestamptz|時間帯付き日付と時刻|
|tsquery| |テキスト検索問い合わせ|
|tsvector| |テキスト検索文書|
|txid_snapshot| |ユーザレベルのトランザクションIDスナップショット(廃止予定。pg_snapshotを参照)|
|uuid| |汎用一意識別子|
|xml| |XMLデータ|

## システムカタログから、型の一覧を取得する

データベースに定義されている型をSQLを使ってみることもできます。

```sql
SELECT
    *
FROM
    pg_type
;
```

基本データ型のみを参照したい場合は`typtype`を`b`で指定します。

```sql
SELECT
    *
FROM
    pg_type
WHERE
    typtype = 'b'
;
```

各カラムの説明は以下に載っています。

[51.62. pg_type](https://www.postgresql.jp/document/13/html/catalog-pg-type.html)

## 参照

[第8章 データ型](https://www.postgresql.jp/document/13/html/datatype.html)
ベイス統計の最初の一歩

# 頻度主義
頻度主義は、ただ一つの母数があるとする考えである。母数を求める最も有名な方法の一つに最尤推定法がある。最尤推定法はデータ生成モデル$p(y|\theta)$を考え、これをパラメータ$\theta$の関数としてとらえて、
$$　\hat{\theta} = {\mathop{\rm arg~max~}\limits_{\theta}}p(y|\theta )　$$
を計算する。

# ベイズ統計
ベイズ統計は母数の事前分布を想定する。またデータが得られた後も母数はただ一つ求まるのではなく分布としてもとめる。
$$
p(\theta | y ) = { p( y | \theta ) p( \theta ) \over p( y )}
$$
ベイズ統計の簡単な例としてよく持ち出されるのが、検査と罹患率の関係の問題である。ある検査をした結果Y(Y=1で陽性、Y=0で陰性)と、ある病気の罹患率$\theta$($\theta=1$で罹患している、$\theta=0$で罹患していない)をベイズの定理を用いて書き表すと、
$$
p(\theta | Y ) = { p( Y | \theta ) p( \theta ) \over p( Y ) }
$$
である。右辺分母の$p(Y)$は、$\sum_i P(Y|\theta_i)p(\theta_i)$である。この分母は右辺を$Y$の関数と考えたとき正規化している。右辺をすべての$Y$の場合について総和を計算すれば当然1である。これは左辺が条件付き確率分布であるので当然そうならなければならないことである。
ここで
$Y$は検査結果で、$Y=1$で陽性、$Y=0$で陰性
$\theta$は罹患の状態で、$\theta=1$で罹患している、$\theta=0$で罹患していない
$p(Y|\theta)$ は、ある病気に罹患しているときに、検査で陽性になる確率
$p(Y)$は、検査前の罹患の確率(事前確率)
$p(\theta|Y)$は、検査結果を得られた後の罹患確率(事後確率)
である。
 この計算が教えるところは、事前分布として罹患率が非常に低く、偽陽性率がある程度高いとき、検査結果が陽性であったとしても偽陽性率はかなり高いということである。
ここで、$p(Y|\theta)$は、罹患するという事象があり、その結果として検査結果が変わるという因果関係を暗に示している。また罹患の状態も事実が確実にわかるものではなく、$p(theta=1)=0.7$などといったように確率でわかるものである。それは検査を行ったあとであっても同じで、事後確率$p(\theta=1|Y)$も1や0にはならないのである。

# MAP推定
ベイズ統計を生成モデルのパラメター推定に用いる場合は、次式で事後確率を最大にする$\theta$を推定する。これをMAP推定という。
```math
p(\theta | y ) \sim { p( y | \theta ) p( \theta ) }
```
# コインが面になる確率
コイントスの試行を$n$回行い、その結果からコインが面になる確率$\theta$を推定する問題は最大事後確率推定の学習のために最初に学習する問題としてとても人気のあるものである。$n$回コイントスとした場合を考える。そのとき

```math
 p(y|\theta) = \prod \theta^{y_i} (1-\theta)^{1-y_i}=\theta^k (1-\theta)^{n-k}
```

ここで、$y_i$ はね試行の結果$\theta$は面がでる確率、
$k$は面がでた回数である。事前分布を、
```math
p(\theta) = \text{Beta}(\alpha, \beta) \propto \theta^{\alpha-1}(1-\theta)^{\beta-1}
```
とすれば事後分布は、
```math
p(\theta | y ) \propto \theta^k (1-\theta)^{(n-k)} \theta^{\alpha-1}(1-\theta)^{\beta-1} \\
 = \theta^{k + \alpha-1}(1-\theta)^{n - k + \beta-1} \\
 = \text{Beta}( k + \alpha, n - k + \beta )
```
である。
新規登録画面を作成する

# 新規登録で送信できるようにする
ルーティングでpostを作り、コントローラを設定すれば完成だったような気がする。

## Routing Error
No route matches [POST] "/signup"

## ルーティングを設定する
```routes.rb
Rails.application.routes.draw do
  get '/',              to: 'home#top'
  get '/signup',        to: 'users#new'
  post '/users/create', to: 'users#create'
  get 'users/index',    to: 'users#index'
  get 'users/:id',      to: 'users#show'
end
```
これで設定。

## usersコントローラーのcreateアクションを作成
name,email,passwordで登録
```users_controller.rb
.
.
.
  def create
    @user = User.new(name: params[:name],
                     email: params[:email],
                     password: params[:password])
    @user.save
  end
.
.
.
```
これでいけるか？

## Routing Error
No route matches [POST] "/signup"
ルーティングが一致しないらしい。
ルーティングのタイポか、調べよう。
```

```
Routing Error
No route matches [POST] "/signup"
'をつけてみよう。
知らないうちにエラーが消えていた。

## ActiveModel::UnknownAttributeError in UsersController#create
unknown attribute 'email' for User.
users_controllerの中に知らない属性があるみたい
email属性がおかしいみたいだ。
データベースが何か問題があるのか？
### 確かめること
・rails sを一回閉じる
・データベースのカラムを確かめる

ここから先は学んだことであり人に伝えようとは思っていないので
うまく伝えきれない。

# POSTリクエスト
POSTリクエストをすると次の画面にいかな行くてはならない。
そのために```render```,```redirect_to```を使わなければならない。
それをおこなっていないと
template_error（警告）が表示されない。
#
## サーバーを閉じる
データベースをいじるとその時のサーバーを閉じなければならない。
そうしないと前のデータでしか応答してくれないから

## SQL
idには一人一つ退会したからとその人のidを別の人に与えないことは大事

```
mysql> select * from users;
+----+--------------------+-----------+----------+
| id | name               | email     | password |
+----+--------------------+-----------+----------+
| 60 | ブイゼル           | hogehoge  |          |
| 61 | a           |           |          |
| 62 | a       |           |          |
| 63 | a       |           |          |
| 64 | あ                 |           |          |
.
.
.
```

学ぶことが多すぎる。これから頑張る。
Stateのリフトアップについて

ローカルStateの管理の仕方に迷いがでてきたので、しっかり調べてみる。

# stateのリフトアップ
Reactの公式ドキュメントの例を考える。
### 基本的な設計
```react:BoilingVerdict
const BoilingVerdict = (props) => {
  if (props.celsius >= 100) {
    return <p>The water would boil.</p>;
  }
  return <p>The water would not boil.</p>;
}
```

```react:Calculator
const Calculator = (props) => {
  // state
  const [temperature, setTemperature] = useState({temperature: ''});
  // 入力による処理
  const handleChange = (e) => {
    setTemperature({temperature: e.target.value});
  }
  return(
     <fieldset>
        <legend>Enter temperature in Celsius:</legend>
        <input
          value={temperature}
          onChange={handleChange} 
        />
        <BoilingVerdict
          celsius={parseFloat(temperature)} />
      </fieldset>
  );
}
```
![stateのリフトアップ１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689380/443a7846-f763-951f-ed2f-875c450cae06.png)

CalculatorコンポーネントはtemperatureというStateを持つ。
Calculatorコンポーネントのinputから入力があるとtemperatureは更新される。
celsiusというプロパティでparseFloat(temperature)がBoilingVerdictコンポーネントに渡され、表示される。
### 変化する値をもう一つ追加
基本的な設計にもう一つの変数を追加する。
input部分をTemperatureInputコンポーネントとして抽出。
```react:TemperatureInput
  const TemperatureInput = (props) => {
   const temperature = props.temperature;
   const handleChange = (e) => props.onTemperatureChange(() => e.target.value);
    const scale = props.scale;
    return (
      <fieldset>
        <legend>Enter temperature in {scaleNames[scale]}:</legend>
        <input value={temperature} onChange={handleChange} />
      </fieldset>
    );
 }
```
```react:Calculator
  const Calculator = () => {
   const [temperature, setTemperature] = useState("");
   const [scale, setScale] = useState("c");
   const handleCelsiusChange = (temperature) => {
     setTemperature(temperature);
     setScale("c");
   };
   const handleFahrenheitChange = (temperature) => {
     setTemperature(temperature);
     setScale("f");
   };
   const celsius = scale === "f" ? tryConvert(temperature, toCelsius) : temperature;
   const fahrenheit = scale === "c" ? tryConvert(temperature, toFahrenheit) : temperature;
    return (
      <div>
       <TemperatureInput
         scale="c"
         temperature={celsius}
         onTemperatureChange={handleCelsiusChange}
       />
       <TemperatureInput
         scale="f"
         temperature={fahrenheit}
         onTemperatureChange={handleFahrenheitChange}
       />
        <BoilingVerdict celsius={parseFloat(temperature)} />
      </div>
    );
  }
```
![stateのリフトアップ２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689380/e287dfc4-21df-15a7-bf39-00b8f4b05599.png)



TemperatureInputコンポーネントはscaleによって2種類に分かれ、入力があるとtemperatureとscaleという2つのStateを更新する。
temperatureとscaleという2つのStateは親であるCalculatorコンポーネントに配置することで、それぞれのTemperatureInputコンポーネントは共通の値を更新することが可能になる。
複数のコンポーネントで共通の値を利用したい場合、直近の共通祖先コンポーネントにそのstateを配置して**stateのリフトアップ**を行う。（トップダウン型のデータフローの力を借りている）

##### propsやstateから派生的に作りだす事のできるデータについては、stateに保持すべきではない
今回の例では、インプットされた値のみを保存している。（計算後の値は保存していない）
これによって、元のユーザー入力の精度を損なわずにもう片方の入力フィールドに適用したり、クリアしたりできる。


# 参考
https://ja.reactjs.org/docs/lifting-state-up.html
LazyRowでSwipe Refresh

LazyRowでSwipe refreshを実装した際のメモです。

バージョンは以下
Jetpack compose 1.1.1
accompanist Swipe Refresh 0.23.1

# Swipe Refresh for Jetpack Compose
[accompanist](https://google.github.io/accompanist/swiperefresh/)にはJetpack composeでSwipe Refreshを実装するためのcomposableが用意されています。


```SwipeRefresh.kt
@Composable
fun SwipeRefresh(
    state: SwipeRefreshState,
    onRefresh: () -> Unit,
    modifier: Modifier = Modifier,
    swipeEnabled: Boolean = true,
    refreshTriggerDistance: Dp = 80.dp,
    indicatorAlignment: Alignment = Alignment.TopCenter,
    indicatorPadding: PaddingValues = PaddingValues(0.dp),
    indicator: @Composable (state: SwipeRefreshState, refreshTrigger: Dp) -> Unit = { s, trigger ->
        SwipeRefreshIndicator(s, trigger)
    },
    clipIndicatorToPadding: Boolean = true,
    content: @Composable () -> Unit,
)
```

# LazyRowで使う
`SwipeRefresh`は`content`が垂直方向にスクロール可でなければ動作しません。
（内部で`Modifier.nestedScroll()`を利用しており、`content`に対するスクロール操作を検知している）
LazyRowの場合は、`Modifier.scrollable()`を追加することで動作します。

```Example.kt
@Composable
fun LazyRowSwipeRefresh(
    isRefresh: Boolean,
    onRefresh: () -> Unit,
) {
    SwipeRefresh(
        isRefresh = isRefresh,
        onRefresh = onRefresh,
    ) {
        LazyRow(
            modifier = Modifier.scrollable(
                state = rememberScrollableState(
                    consumeScrollDelta = { 0f }
                ),
                orientation = Orientation.Vertical,
            ),
            content = { }
        )
}

```