OmniAICreator/Qiita-1.07M huggingface dataset:
Specification of TTCAN Driver, No.432, AUTOSAR 21-11 (211) CP

Specification of TTCAN Driver, No.432, 2021-11

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


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

AUTOSAR 21-11, 200文書読んだ。2022年5月に全部到達。

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

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

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

# 用語(terms)

|Term|Description|
|:--|:--|
|Arbitrating Time Window |See ISO 11898-4 [1]
|Basic Cycle| See ISO 11898-4 [1]
|BSW| Basic Software
|CanIf| CAN Interface
|Continuous Transmission| Contrary to Single Shot a message will be transmitted cyclically even without a new transmit request.
|Current Time Master |See ISO 11898-4 [1]
|DLC| Data Length Code (part of L-PDU that describes the SDU length)
|Cycle Time |See ISO 11898-4 [1]
|Exclusive Time Window| See ISO 11898-4 [1]
|Global Time |See ISO 11898-4 [1]
|Hardware Receive Handle(HRH)|The Hardware Receive Handle (HRH) is defined and provided by the TTCAN driver. Typically each HRH represents exactly one hardware object. The HRH can be used to optimize software filtering.
|Inner Priority Inversion |Transmission of a high-priority L-PDU is prevented by the presence of a pending low-priority L-PDU in the same transmit hardware object.
|ISR |Interrupt Service Routine
|L-PDU |Protocol Data Unit for the data link layer (DLL)
|Local Time |See ISO 11898-4 [1]
|Matrix Cycle |See ISO 11898-4 [1]
|MCAL| Microcontroller Abstraction Layer
|NTU |See ISO 11898-4 [1]
|Reference Message |See ISO 11898-4 [1]
|Single Shot |A message will be transmitted only once contrary to Continuous Transmission.
|System Matrix |See ISO 11898-4 [1]
|Time Gap| See ISO 11898-4 [1]
|Time Master| See ISO 11898-4 [1]
|Time Window S|ee ISO 11898-4 [1]
|Transmission Column |See ISO 11898-4 [1]
|Transmit Trigger Event| See ISO 11898-4 [1]
|TTCAN Controller| A TTCAN Controller serves exactly one physical channel.
|TtcanDrv| CAN Driver module with enabled TTCAN functionality
|TtcanIf |CAN Interface module with enabled TTCAN functionality
|Tx_Trigger| See ISO 11898-4 [1]
## 英日単語帳
日本語は仮訳

T.B.D.

# 参考(reference)
[1] ISO 11898-4:2004 - Road vehicles - Controller area network (CAN) - Part 4: Timetriggered communication
[2] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture
[3] Glossary, AUTOSAR_TR_Glossary
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf
[4] Specification of CAN Driver
AUTOSAR_SWS_CANDriver
[5] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral
[6] Specification of CAN Transceiver Driver
AUTOSAR_SWS_CANTransceiverDriver
[7] Specification of TTCAN Interface
AUTOSAR_SWS_TTCANInterface
[8] Specification of Watchdog Driver
AUTOSAR_SWS_WatchdogDriver
[9] Specification of CAN Interface
AUTOSAR_SWS_CANInterface
[10] Specification of ECU State Manager
AUTOSAR_SWS_ECUStateManager
Qiitaに記事てどう書くの？（Markdown記法について）


# 初めに
Qiita初投稿を兼ねまして、
記事を書くのに知っておきたかったMarkdown記法をまとめてみました。
ひとまずこれだけ知っていたら技術ブログ書きはじめられるかしら？？


# 記法

### 目次
"-" +  "[]"内に目次名、"()"内にリンク先

 <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683085/d31939aa-1bbd-2baa-ba82-07eebb0c85f8.png" width=20% >

↓こんなかんじで表示される
- [初めに](#初めに)
- [記法](#記法)


### 見出し（下線付きのやつ） 
\# 見出し　 　"#" 1つ＋見出し


### 小さい見出し
\### 見出し　　 　"#" 3つ＋見出し


### 引用文
\> 引用文　 　 ">"+ 引用文

>引用文はこんなかんじで表示される

### 太字
"**　"＋太字にしたい文字＋"**　"
 <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683085/5669455a-ec76-1083-5986-b6725d0724d6.png" width=10% >

↓こんなかんじで表示される
**太字**

### 順序なしリスト
\* リスト項目  　 "*" +　リスト項目

↓こんなかんじで表示される
* リスト項目　


### リンク
\[Qiita](http://qiita.com/)   ←　 \"[]"内にリンク名、"()"内にURL

↓こんなかんじで表示される
[Qiita](http://qiita.com/) 

### 横線
\- - -  ← "-"3つ

↓こんなかんじで表示される
- - -


### 表
\|左揃え|中央揃え|右揃え|← -"|"で区切る
\|:---|:---:|--:|

↓こんなかんじで表示される
|左揃え|中央揃え|右揃え|
|:---|:---:|--:|

### 圧縮して画像を貼る
まずQiitaの記事に画像貼り付けし、そのあと下記のようimg srcへアップ先、サイズ指定する。 

"<>"内にimg src ="画像アップ先" width=xx%

 <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683085/3f40367a-047b-19ca-0e2c-9887c8f1671f.png" width=80% >

### ソースコード挿入
\`　x3つ＋ 言語：ファイル名
ソースコード
\`　x3つ

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683085/44b0376e-cee0-1d4a-c212-e79a85c32d65.png" width=30% >

↓こんなかんじで表示される

```c#:test.cs
Debug.Log("QIIIIIIIIIIIITA");
```
40代おっさんGASでエラーメッセージをgoogle chatに送る

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## 今回のコード

```javascript
function chatFunction() {
    

    try {
      myFunction(); //前回作ったfunction
    } catch(error) {
      console.error(printError(error));
      
      const url = "google chatのwebhook";
      const message = {'text': printError(error)}
      const options = {
        'method': 'POST',
        'headers': {
          'Content-Type': 'application/json; charset=UTF-8'
        },
        'payload':JSON.stringify(message)
      };

      UrlFetchApp.fetch(url, options);
      
  }
}

function printError(error){
  return "[名前] " + error.name + "\n" +
         "[場所] " + error.fileName + "(" + error.lineNumber + "行目)\n" +
         "[メッセージ]" + error.message + "\n" +      
         "[StackTrace]\n" + error.stack;
}
```

## 作る必要性

今後、自分の作ったシステムを自動化すると自動で動いているときにエラーが発生する可能性があるため、チャットで通知することが必要と考えて作った！
40代おっさんGASでエラーメッセージをGmailに送る

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## 今回のコード

```javascript
function errorFunction() {
  
  try {
    myFunction(); //前回作ったfunction
  } catch(error) {
    console.error(printError(error));
    const recipiejt = '送るメールアドレス';
    const subject = 'エラーメール';

    let body = printError(error);

    const options = {
      cc: '必要があれば',
      name: 'gasからのエラーメッセージ'
    }

    GmailApp.sendEmail(recipiejt, subject, body, options);
  }
}

//エラー用のfunction
function printError(error){
  return "[名前] " + error.name + "\n" +
         "[場所] " + error.fileName + "(" + error.lineNumber + "行目)\n" +
         "[メッセージ]" + error.message + "\n" +      
         "[StackTrace]\n" + error.stack;
}
```

## 作る必要性

今後、自分の作ったシステムを自動化すると自動で動いているときにエラーが発生する可能性があるため、メールで通知することが必要と考えて作った！
Reactの状態管理ライブラリjotaiを使ってみる(チュートリアル)

## jotaiとは？？
ライブラリからも推測できる通り、日本発のReactの状態管理ライブラリです。Recoil等と比較し、軽量でサクサクかける事が好まれているようです。
公式のDemoが2つ用意されていたため、実際に実装してみます。
![スクリーンショット 2022-05-27 19.11.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/7fd6275f-ef4c-98e1-f8a6-216b1cd39d52.png)

## Demo1(文字数の取得、大文字変換処理)
CodeSandBoxで公開されているので、リンクを貼っておきますのでみてみてください。ここでは画像とソースコードを貼っておきます。
![スクリーンショット 2022-05-27 19.23.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/cbd2bbee-5bfe-5a39-2ae9-8ce16c2323dd.png)

■概要
TextAreaに入力した値の文字数と大文字変換する処理。

```typescript:App.tsx
import React from "react";
import { Provider, atom, useAtom } from "jotai";

const textAtom = atom("hello");
// get(textAtom)で文字列を取得可能
const textLenAtom = atom((get) => get(textAtom).length);
const uppercaseAtom = atom((get) => get(textAtom).toUpperCase());

const Input = () => {
  const [text, setText] = useAtom(textAtom);
  return <input value={text} onChange={(e) => setText(e.target.value)} />;
};

const CharCount = () => {
  // textAtomから派生したtextLenAtomを利用
  const len = useAtom(textLenAtom);
  return <div>Length: {len}</div>;
};

const Uppercase = () => {
    // textAtomから派生したuppercaseAtomを利用
  const [uppercase] = useAtom(uppercaseAtom);
  return <div>Uppercase: {uppercase}</div>;
};

const App = () => (
  <Provider>
    <Input />
    <CharCount />
    <Uppercase />
  </Provider>
);

export default App;
```
→確かにサクサクかけていいですね。キー値を設定しなくてよい、また簡単にコピーができる所がいい所ですね。

## Demo2(API通信で取得した値をコンポーネントに反映する)
概要：APIで取得したレスポンスをコンポーネントに反映し表示するプログラムです。右下の→を押すと、次の記事が表示される仕様です。

![スクリーンショット 2022-05-27 19.43.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/151ccecf-43fa-7e82-98fe-763e3ae3417a.png)

```typescript:App.tsx
import React, { Suspense } from "react";
import { Provider, atom, useAtom } from "jotai";
import { a, useSpring } from "@react-spring/web";

// IDを設定
const postId = atom(9001);

// atomの中に関数定義可能。非同期通信で取得した値を設定できる！！
const postData = atom(async (get) => {
  const id = get(postId);
  const response = await fetch(
    `https://hacker-news.firebaseio.com/v0/item/${id}.json`
  );
  return await response.json();
});

function Id() {
  // コンポーネント内で利用する場合はuseAtomで値を取得する。
  const [id] = useAtom(postId);
  const props = useSpring({ from: { id: 0 }, id, reset: true });
  return <a.h1>{props.id.to(Math.round)}</a.h1>;
}

function Next() {
  const [, set] = useAtom(postId);
  return (
    <button onClick={() => set((x) => x + 1)}>
      <div>→</div>
    </button>
  );
}

function PostTitle() {
  //　APIレスポンスの結果を取得する。
  const [{ by, title, url, text, time }] = useAtom(postData);
  return (
    <>
      <h2>{by}</h2>
      <h6>{new Date(time * 1000).toLocaleDateString("en-US")}</h6>
      {title && <h4>{title}</h4>}
      <a href={url}>{url}</a>
      <p>{text}</p>
    </>
  );
}

export default function App() {
  return (
    <Provider>
      <Id />
      <div>
        <Suspense fallback={<h2>Loading...</h2>}>
          <PostTitle />
        </Suspense>
      </div>
      <Next />
    </Provider>
  );
}

```

### 参考文献

https://github.com/pmndrs/jotai


https://codesandbox.io/s/jotai-demo-47wvh

https://codesandbox.io/s/jotai-demo-forked-x2g5d
基本情報（シフト演算）

## 2進数のかけ算わり算の基礎

まず前提として、混乱してしまったので記述するのですが符号なしか符号ありによって
結果に違いがあります。

必ず符号が**ある**か**なし**かは確認する必要があります。

|  ２進数  |  符号なし   |  符号あり|
| :---: | :---:| :---: |
|   00000000  |  0  |  0  |
|   00000001  |  1  |  1  |
|   00000010  |  2  |  2  |
|   01111111  |  127  |  127  |
|   10000000  |  128  |  -128  |
|   10000001  |  129  |  -127  |
|   11111110  |  254  |  -2  |
|   11111111  |  255  |  -1  |

符号がついている場合は127を境に値が変化していきます。
符号ビットが0ならば正で1ならば負らしいです。

ややこしい

例題に入ります。
5510という10進数の数字があったとします

```
55100
// 上記は×10された数
551
// 上記は×1/10された数
```

110という2進数の数字があったとします
```
1100 
// ×2された数
11
// ×1/2された数
```
上記のように２進数をあらわすビット列を、左もしくは右にずらす操作を**シフト演算**と呼びます。

## 論理シフト
シフト演算の中で、**符号を考慮せず**に行うシフト操作が**論理シフト**です。
符号を考慮しないの意味は「最上位のビットも含めて何も考えずにシフトする」ことです。

例えば8ビットで2進数を表わすデータがあるとします。
```
128 64 32 16 8 4 2 1
  0  0  1  0 1 1 0 0
// 32 + 8 + 4 = 44
```
10進数だと44です。
**左論理シフト**を行います。左論理シフトは2n倍となります。

```
    00101100
|00|101100
// 2ビット左にシフトさせると上部になる
```
その後にはみ出たビットは削除して開いたスペースに0で埋めます。
```
128 64 32 16 8 4 2 1
  1  0  1  1 0 0 0 0
// 128 + 32 + 16 = 176
```
上記は44 * 2 * 2した2進数の数となります。

次は**右論理シフト**を行います。右論理シフトは1/2n倍となります。

```
00101100
  001011|00|
```
右にはみ出たビットは削除します。
その後に空になったスペースを０で埋めます。
```
128 64 32 16 8 4 2 1
  0  0  0  0 1 0 1 1
// 8 + 2 + 1 = 11
```
元の数値44 * 1/2 * 1/2倍した2進数が出来上がりました。

## 右や左にずらしたときに、はみ出た数字が1だった場合

左論理シフトではみ出た場合は、ビット数で表せる範囲を超えてしまったことになります。
その現象を**オーバーフロー**と呼びます。

右論理シフトではみ出た数は割り算した結果の余りとなります。

## 算術シフト
符号を考慮して行うシフト演算が**算術シフト**です。
算術シフトでは、先頭の符号ビットを固定にして、それ以降のビットだけを左右にシフト操作します。

こちらでは**符号を考慮します**
符号を考慮するかしないかで大変混乱しました。

符号は8ビットの中の8ビット目の値です。
```
11100100
↑先頭の1が符号
```

```
64 32 16 8 4 2 1
 1  1  0 0 1 0 0
// (+64) + (-32) + (-4) = 28
// 符号が1なので-28
```

左算術シフトは符号付きで2n倍
```
 |1|1100100 
|11|00100
```
はみ出たビットを削除して00100となります。
空になったスペースを0で埋めると
0010000

```
 128 64 32 16 8 4 2 1
   1  0  0  1 0 0 0 0
// (+128) + (-16)
// 符号付きなので-112
```
元の数値-28 * 2 * 2した2進数です。

右算術シフトは符号付きで1/2n倍となります。

```
   11100100
|1|   11001|00|
// 先頭の１は固定 
```
はみ出たビットは削除します。つまり00を削除です。
空になったスペースは符号ビットで埋めます
```
11111001
//　正の数(0)の場合は
00011001になります。
//　負の数(1)の場合は
11111001になります。
```
-28 * 1/2 * 1/2 で-7ですね。

## まとめ
今回はシフト演算と少し割り算と掛け算をやりました。
ボリュームがあるので、次回でさらに割り算と掛け算を見てみます。
40代おっさん、GASでgoogleドライブからスプレッドシートにデータを読み込んでみた！

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## 今回のコード

```javascript
function myFunction() {
  //csvフォルダ指定
  const foldred = DriveApp.getFolderById('フォルダのID');
  //csv_move フォルダ指定
  const movefoldred = DriveApp.getFolderById('フォルダのID');
  //アクティブなスプレッドシート
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 

  //csvフォルダの中のファイルの情報（zip用）
  const a = foldred.getFiles();

  //ファイルID用の配列
  const datas = []; //zip用
  const datas2 = []; //スプレッドシート用

  //ファイルの中身の情報（id)を配列化
  while(a.hasNext()){
    const file = a.next();
    datas.push(file.getId());
  }

  //古い情報が後になってしまうので順序を逆転
  datas.reverse();
  
  console.log(datas);

  //ファイルを一つづつ解凍しblob（ブロブ）データにする
  for (const data of datas){
    const fileblob = DriveApp.getFileById(data);
    const blobs = Utilities.unzip(fileblob.getBlob().setContentType('application/zip')); //MIMEタイプでzipを定義（これがないとwindowsで作ったzipファイルが読み込まれない）

   for (const blob of blobs) {
      console.log(`${blob.getName()} [Type: ${blob.getContentType()}`);
      const sevefile = foldred.createFile(blob); //createFileでcsvフォルダに解凍したファイルを作成
      fileblob.setTrashed(true); //setTrashedでファイルをゴミ箱に移動
      
    }
  }
  
  //csvフォルダの中のファイルの情報の再取得（スプレッドシート用）
  const b = foldred.getFiles();

  while(b.hasNext()){
    const file = b.next();
    datas2.push(file.getId());
  }
  //古い情報が後になってしまうので順序を逆転
  datas2.reverse();
  
  console.log(datas2);
  
  //スプレッドシートにデータを書き出す
  for (const data of datas2) {
    const fileblob = DriveApp.getFileById(data);
    const id = data
    //スプレッドシートの最終行を定義
    let lastRow = sheet.getLastRow();

    //blobデータでファイルを読み込む
    const blobSp = DriveApp.getFileById(id).getBlob();
    const csv = blobSp.getDataAsString(); //ファイルのテキストデータの読み込み
    const values =Utilities.parseCsv(csv); //csvの値の読み込み
    fileblob.moveTo(movefoldred); //csv_moveに移動

    console.log(values);

    sheet.getRange(lastRow + 1,1, values.length, values[0].length).setValues(values); //値をスプレッドシートの最終行に追記
  }

}
```

## 今回の注意点

zipファイルがgoogleドライブ上で作ったものは問題ないが、Window内で作ったもの、また文字コードが違うものによってデータを読み込むことができない場合がある。
文字コード以外はMIMEタイプでzipを定義することで解決できた！
文字コードの違いは結構むずかしいので、いずれ挑戦する！

datas2.reverse();で配列の順序を逆転している。
Googleドライブは新しい情報から読み込まれるために行っているが、正しくはデータをvaluesで読み込んだ後に各データを別の配列に入れて整理するほうがきれいにデータを整理できると思われる。
AWS Certified Solutions Architect - Associate 合格記

AWS Certified Solutions Architect - Associate 試験受験しての感想を書きます。

# 学習方針
有料の書籍やデジタルコンテンツを利用しない。

# 利用教材
* [試験ガイド](https://d1.awsstatic.com/training-and-certification/docs-sa-assoc/AWS-Certified-Solutions-Architect-Associate_Exam-Guide.pdf)
* [AWS Technical Essentials (Digital)](https://explore.skillbuilder.aws/learn/course/external/view/elearning/1851/aws-technical-essentials?saa=sec&sec=prep)
* [Exam Readiness: AWS Certified Solutions Architect – Associate (Digital)](https://explore.skillbuilder.aws/learn/course/external/view/elearning/125/exam-readiness-aws-certified-solutions-architect-associate-digital?saa=sec&sec=prep)
* [デジタルトレーニング (Digital)](https://explore.skillbuilder.aws/learn/course/external/view/elearning/125/exam-readiness-aws-certified-solutions-architect-associate-digital?saa=sec&sec=prep)
* [サンプル問題](https://d1.awsstatic.com/training-and-certification/docs-sa-assoc/AWS-Certified-Solutions-Architect-Associate_Sample-Questions.pdf)
* [AWS Documentation](https://docs.aws.amazon.com)
* [AWS Well-Architected Framework whitepaper](https://aws.amazon.com/architecture/well-architected/?saa=sec&sec=prep&wa-lens-whitepapers.sort-by=item.additionalFields.sortDate&wa-lens-whitepapers.sort-order=desc)
* 社内勉強会
弊社では有志でAWS勉強会を実施しており、AWSに精通したエンジニアによる講義が受講できます。

# 感想
* 設問文が難解（私の読解力の問題かもしれませんが・・）
ある程度英文を読める方は英語表記での受験を選択した方がよいかもしれません。 
* 時間制限
時間が気になることはありませんでした。設問中に知らないサービス、リソースが出てきて太刀打ちできない場合、直ちに諦めて先へ進んでしまえば全設問回答した後でも見直しの時間は取れそうでした。私の場合は全問回答後、既に脳のエネルギーを使い果たしており、やる気になれずギブアップ、即終了でした。
* 有料書籍、デジタルコンテンツを利用すべきか
短期間での合格を目指すなら有料書籍、デジタルコンテンツの利用を検討された方が良いかもしれません。
試験ガイドに出題範囲の記述はあるものの、どのサービス/リソースについてどの程度の理解があればよいかイメージしづらく、何をどの程度学習したら試験にのぞめる状態になるか自分でもわかりませんでした。大量のAWSドキュメントを読み漁るのも *試験に合格する* ことを目標にした場合には遠回りになるかもしれません。
一方で、実務では資格取得用の書籍やデジタルコンテンツではなくAWSドキュメントを利用する機会が多いと思いますのでAWSドキュメントを読みこなす練習をしつつ試験合格を目指す方法でもよいと思います。
Specification of I-PDU Multiplexer, No.182, AUTOSAR 21-11 (210) CP

Specification of I-PDU Multiplexer, No.182, 2021-11

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


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

AUTOSAR 21-11, 200文書読んだ。2022年5月に全部到達。

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

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

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

# 用語(terms)

|Term|Description|
|:--|:--|
|COM I-PDU |I-PDU assembled in the COM module out of COM Signals
|contained I-PDU |I-PDU assembled into or extracted from a Container PDU
|Container PDU| PDU containing I-PDUs and headers
|dynamic part |see [4]
|instance of an I-PDU| IpduM I-PDU with one specific layout and content
|Instances of a Container|Instances of the same Container PDU
|IpduM| I-PDU Multiplexer
|IpduM I-PDU |I-PDU assembled in the IpduM module out of two COM I-PDUs
|multiplexed I-PDU |see IpduM I-PDU
|segment |The static or dynamic part may consist of more than one piece. These pieces are called segments. See also Chapter 7.2.1 and Figure 2.
|selector field |see [4]
|signal |see [5]
|signal group |see [5]
|static part |see [4]

## 英日単語帳
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[2] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral.pdf
[3] Specification of RTE
AUTOSAR_SWS_RTE.pdf
[4] Requirements on I-PDU Multiplexer
AUTOSAR_SRS_IPDUMultiplexer.pdf
[5] Specification of Communication
AUTOSAR_SWS_COM.pdf
[6] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
Specification of CAN Transceiver Driver, No.71, AUTOSAR 21-11 (209) CP

Specification of CAN Transceiver Driver, No.71, 2021-11

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


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

AUTOSAR 21-11, 200文書読んだ。2022年5月に全部到達。

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

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

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

# 用語(terms)

|Term|Description|
|:--|:--|
|ComM |Communication Manager
|DEM| Diagnostic Event Manager
|DET| Default Error Tracer
|DIO |Digital Input Output (SPAL module)
|EB| Externally Buffered channels. Buffers containing data to transfer are outside the SPI Handler/Driver.
|EcuM |ECU State Manager
|IB|Internally Buffered channels. Buffers containing data to transfer are inside the SPI Handler/Driver.
|ISR |Interrupt Service Routine
|MCAL| Micro Controller Abstraction Layer
|Port| Port module (SPAL module)
|n/a |Not Applicable
|SBC |System Basis Chip; a device, which integrates e.g. CAN and/or LIN transceiver, watchdog and power control.
|SPAL| Standard Peripheral Abstraction Layer
|SPI Channel|A channel is a software exchange medium for data that are defined with the same criteria: configuration parameters, number of data elements with same size and data pointers (source & destination) or location. See specification of SPI driver for more details.
|SPI Job|A job is composed of one or several channels with the same chip select. A job is considered to be atomic and therefore cannot be interrupted. A job has also an assigned priority. See specification of SPI driver for more details.
|SPI Sequence|A sequence is a number of consecutive jobs to be transmitted. A sequence depends on a static configuration. See specification of SPI driver for more details.
|CAN Channel |A physical channel which is connected to a CAN network from a CAN controller through a CAN transceiver.
|API| Application Programming Interface

## 英日単語帳
日本語は仮訳

T.B.D.

# 参考(reference)
[1] List of Basic Software Modules
AUTOSAR_TR_BSWModuleList.pdf
[2] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[3] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration.pdf
[4] General Requirements on Basic Software
AUTOSAR_SRS_BSWGeneral.pdf
[5] Specification of Specification of CAN Interface
AUTOSAR_SWS_CANInterface.pdf
[6] Basic Software Module Description Template,
AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
[7] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
[8] ISO11898 – Road vehicles - Controller area network (CAN)

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20221201
Rundeckのリポジトリを切り替えて更新したら起動しなくなった話

# 何をやったのか
fedraの環境でそれなりに長くrundeckで定期的なスクリプト実行をスケジューリングさせていたのですが、ある時気が付くとdnf upgradeでrundeckのリポジトリが参照できなくなっていることに気が付きました。
RUNDECKのインストレーションガイドを読むと、マニュアルインストールの項には「bintray-rundeckpro-rpm.repoのエントリがあったら削除して、以下の内容に置き換えろ」とあります。

https://docs.rundeck.com/4.2.1/administration/install/installing-rundeck.html#installation

そういうことなら、と置き換えて(yumはdnfに読み替えて)upgradeしたところ……起動しなくなりました。
アップブレード後のバージョンは4.2.1(v4.2.1-20220511)です。
# 何が起きたのか
/var/log/rundeck/service.logから、起動後にframeworkからエラーが出ていることは分かりました。
<dl>
<dt>現象１</dt>
<dd> ERROR boot.SpringApplication - Application run failed </dd>
</dl>
"rundeck"と上記エラーメッセージをキーワードにして検索すると、SSL関連(鍵関係)の設定不備によるエラー相談のページが見つかりました。こちらも同様の現象かは不明ですが、（旧版では）設定した覚えがないので、stackoverflowのやり取りを参考に設定しました。

https://stackoverflow.com/questions/60912174/i-cannot-get-rundeck-to-start-with-ssl/60930884#60930884

設定を終えて再起動すると、相変わらず起動してから落ちています。ただ、/var/log/rundeck/service.logに出ているメッセージ内容が別のものになっていました。
<dl>
<dt>現象２</dt>
<dd>Unsupported connection setting "MVCC"</dd>
</dl>
JDBCのマルチコネクション設定定義が見当たらない、というメッセージと共に出ていて、確かにそのような設定をした覚えがないので解らないのでもないのですが、旧版ではそもそも不要だったし、と思いながらRUNDECKのインストールガイドを読み進めていくとデータベース設定の項(Database Configuration)がありました。

https://docs.rundeck.com/4.2.1/administration/install/installing-rundeck.html#database-configuration

RPMベースの導入なので、対象のコンフィグファイルは以下のものになります。
/etc/rundeck/rundeck-config.properties
こちらの環境ではすでにPostgreSQLが汎的用途のために稼働していたので、それを使うことにしたのですが、マニュアルには接続定義しか記載がありません。無ければ作るのでしょうか……と思いつつ再起動すると、起動後にエラーで落ちて、**rundeckロール**が無いとservice.logに出ていました。事前に用意していないので当たり前なのですが、このマニュアルの作り方はどうでしょう。
もちろん、rundeckが使用するデータベースの準備もマニュアルに記載があります。ただし、離れたセクションに収められています。

https://docs.rundeck.com/4.2.1/administration/configuration/database/postgres.html

# 結局どうなったか
鍵関係の追加設定とDB接続まわりの設定を行うと、rundeckは無事に起動しました。ただし、DBを新規作成したことから解っていましたが、旧環境の定義周りは全て落ちています。スケジューラーしか使っていなかったので、プロジェクトの定義自体は手作業でも大した話ではないのですが、ジョブ定義は少々面倒です。
ただ、旧版のジョブでは定期的にジョブ定義をxmlにエクスポートしていました。バージョンが違うのでもしかしたらエラーで撥ねられるかもしれないとは思いましたが、最新のxmlをインポートさせると無事に読み込み、ジョブ定義を回復することができました。
# 他には何かあったか？
まずadminのパスワードはrealm.propertiesに情報があります。これを確認しないと当然ログインできません。

戸惑ったのは**保存**や**キャンセル操作後**の画面遷移がうまく機能していないように見えたことです。ブラウザのトレースツールを確認するとCSPの警告が出てキャンセルされていました。ブラウザはサーバー外からアクセスするのでそれなりのサーバー名なりIPアドレスなりを使うのですが、**rundeck-config.properties**の**grails.serverURL**で使用しているサーバー名が*localhost*のままだったことが原因でした。

rundeckのCLIも合わせて更新しました。rdコマンドが使う環境変数に変わりはなく、こちらは特に問題らしきものには出くわしていません。

# 今はおちつきましたが
エンタープライズ版では他に使える機能もあるようですが、今はスケジューラーくらいしか使っていません。そういう利用環境では旧いbintray-rundeckpro-rpm.repo版のままそっとしておいた方が良かったかな、とか思わなくもありません。あんまり思い付きでバージョンアップするものではないですね。
Requirements on Transformer, No.657, AUTOSAR 21-11 (205) CP

Requirements on Transformer, No.657, 2021-11

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


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

AUTOSAR 21-11, 160文書読んだ。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
[3] Requirements on AUTOSAR Features
AUTOSAR_RS_Features
[4] System Template
AUTOSAR_TPS_SystemTemplate
[5] Specification of Communication
AUTOSAR_SWS_COM
dijkstra法備忘録 

# はじめに

atcoderでよく登場するので，備忘録としてまとめました．

# ダイクストラ法(dijkstra's algorithm)の問題と戦略

### ＜問題＞
出発点を一つ固定して，この頂点から他のすべての頂点への最短経路を求める問題を考える．

### ＜戦略＞
各頂点への最短路を出発点に近い(短い)ところから一つずつ確定していく
```math
\def\set#1{\left\{{#1}\right\}}
```
### 例
頂点集合$V=\set{A,B,C,D,E,F}$と辺の集合が$E = \set{(A,B),(A,C),(B,D),(C,E),(C,F),(E,B),(E,D)}$となる重み付きの有向グラフを考える．
> 例えば，点Aから点Bへ行くには6km歩かなければならないようなグラフになっている．
この例での移動は一方通行(有向グラフ)であるが，ダイクストラ法は対面通行(無向グラフ)でも使用できる．

![dijkstra.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2696277/a5f55d7c-a10d-febc-7d00-78d2919c03cc.png)

### 確定させる点の順番
> 最短経路が確定した順に赤く塗りつぶしている．

![プレゼンテーション1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2696277/7485e176-2bab-9936-428e-0adc50dae720.gif)

# ダイクストラ法を使う問題例(ABC-252-E)

### ＜問題概要＞
N個の都市とその都市を結ぶM本の道路を考える．都市1からそれ以外の各都市へ移動するまでの最短経路のみを残すとき，残した道路を出力してください．

### ＜戦略＞
dijkstra法を回している途中で，使われた道路を記録していく．

# Python3を使った実装
> 実行時間 - メモリ：1357ms - 196832KB

```Python
from heapq import heappop, heappush, heapify

N,M = map(int,input().split())
G = [[] for _ in range(N)]
for i in range(1,M+1):
    s,t,d = map(int,input().split())
    G[s-1].append((d,t-1,i))
    G[t-1].append((d,s-1,i))

l = [0]*N
def dijkstra(s):
    hq = [(0,s,0)] #(道路の長さ,出発点,道路番号)
    heapify(hq)
    cost = [10**20] * N
    cost[s] = 0
    while hq:
        c,v,e = heappop(hq)
        if c > cost[v]:
            continue
        l[v] = e
        for d, u, r in G[v]:
            tmp = d + cost[v]
            if tmp < cost[u]:
                cost[u] = tmp
                heappush(hq,(tmp,u,r))
    return cost

dist = dijkstra(0)

ans = []
for i in l:
    if i>=1:
        ans.append(i)
print(*ans)
```
Specification of CAN State Manager, No.253, AUTOSAR 21-11 (204) CP

Specification of CAN State Manager, No.253, 2021-11

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


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

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

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

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

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

# 用語(terms)

|Term|Description|
|:--|:--|
|API |Application Program Interface
|BSW| Basic Software
|CAN |Controller Area Network
|CanIf| CAN Interface
|CanSM| CAN State Manager
|ComM |Communication Manager
|DEM |Diagnostic Event Manager
|DET| Default Error Tracer
|EcuM |ECU State Manager
|PDU |Protocol Data Unit
|RX |Receive
|TX |Transmit
|SchM |BSW Scheduler
|SWC |Software Component
|BswM |Basic Software Mode Manager
## 英日単語帳
日本語は仮訳

T.B.D.

# 参考(reference)

[1] List of Basic Software Modules
AUTOSAR_TR_BSWModuleList.pdf
[2] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[3] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral.pdf
[4] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration.pdf
[5] Specification of Standard Types
AUTOSAR_SWS_StandardTypes.pdf
[6] Specification of Communication Stack Types
AUTOSAR_SWS_CommunicationStackTypes.pdf
[7] Requirements on CAN
AUTOSAR_SRS_CAN.pdf
[8] Requirements on Mode Management
AUTOSAR_SRS_ModeManagement.pdf
[9] Specification of CAN Transceiver Driver
AUTOSAR_SWS_CANTransceiverDriver.pdf
[10] Specification of Communication Manager
AUTOSAR_SWS_COMManager.pdf
[11] Specification of ECU State Manager
AUTOSAR_SWS_ECUStateManager.pdf
[12] Specification of Diagnostics Event Manager
AUTOSAR_SWS_DiagnosticEventManager.pdf
[13] Specification of CAN Interface
AUTOSAR_SWS_CANInterface.pdf
[14] Specification of BSW Scheduler
AUTOSAR_SWS_BSW_Scheduler.pdf
[15] Specification of Default Error Tracer
AUTOSAR_SWS_DefaultErrorTracer.pdf
[16] Debugging Concept (internal)
[17] Vehicle and Application Mode Management Concept (internal)
[18] Specification of Basic Software Mode Manager
AUTOSAR_SWS_BSWModeManager.pdf
[19] Specification of CAN Network Management, AUTOSAR_SWS_Can_NM.pdf
[20] Specification of Diagnostic Communication Manager
AUTOSAR_SWS_DiagnosticCommunicationManager.pdf
[21] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
python pandasから ラベルエンコード




# ラベルエンコーディング（LabelEncoder）関数

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html

http://trelab.info/python/sklearn-%E3%83%A9%E3%83%99%E3%83%AB%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0labelencoder%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/

from sklearn.preprocessing import LabelEncoderを利用し

pandas から　
columns_name カラムの列を指定して
ラベルエンコードして戻す関数を作成しました

```
def Label_Encoder_df(data,columns_name):
    from sklearn.preprocessing import LabelEncoder
    df=data
    df = df.dropna(subset=[columns_name])
    le = LabelEncoder()
    encoded = le.fit_transform(df[columns_name].values)
    decoded = le.inverse_transform(encoded)
    df['encoded'] = encoded
    df_out=df.drop([columns_name], axis=1)
    return df_out
```
使用するときは
```
df=Label_Encoder_df("pandasの変数","ラベルエンコードしたいカラムの列の文字列")
```
で使用していただけると幸いです
Android で Ktor Client をサクッと使う

どちらかというと自分メモ

## サクッとKtorクライアント
```HttpClient.kt
HttpClient(Android) {
    install(Logging) {
        logger = Logger.DEFAULT
        level = LogLevel.HEADERS
    }
    install(JsonFeature) {
        serializer = KotlinxSerializer()
    }
    install(HttpTimeout) {
        requestTimeoutMillis = 1000
        socketTimeoutMillis = 2000
        connectTimeoutMillis = 2000
    }
}
```

```ServiceImpl.kt
// #getPost : List<Response>
return try {
            client.get(END_POINT)
            // client.post<Response> { 
            //    url(END_POINT)
            //    contentType(ContentType.Application.Json)
            //    body = request
            // }
        } catch (e: Exception) {
            println("Error: ${e.message}")
            emptyList()
            // null 
        }
~~~
```

```MainActivity.kt
// #onCreate
val post = produceState<List<Resp>>(
    initialValue = emptyList(),
    producer = {
        value = service.getPosts()
    }
)
println(" ${post.value}")
```

Okhttp＋Retrofitと大差ない印象。

## ざっくり仕様メモ

#### レスポンスエラ-

エラーは例外で拾える。
```
RedirectResponseException for 3xx responses.
ClientRequestException for 4xx responses.
ServerResponseException for 5xx responses.
```
拾いどころはクライアント定義時が良さげ
```
val client = HttpClient(android) {
    HttpResponseValidator {
        // ...
    }
}
```

https://ktor.io/docs/response-validation.html#custom


#### タイムアウト
同じく例外で拾える

```
HttpRequestTimeoutException, ConnectTimeoutException, or SocketTimeoutException
```

https://ktor.io/docs/timeout.html#configure_feature

違いがよく分からなければ[こちらの記事](https://qiita.com/Kohei-Sato-1221/items/5567b24c9d9218424c08)がわかりやすい.


他、AuthenticationやらCookieやら。
公式どっキュメントがわかりやすいので以下で。


## 参考
https://ktor.io/docs/getting-started-ktor-client.html
【Android】独自のViewをスワイプする


続き。。。

[前](https://qiita.com/KimKo/items/8e5297977e77790870c4)、つくった陰陽玉Viewを動かします。

## 方法
円の中心座標を変数で持っているので、それをタップ座標に置き換えて描画しなおすだけです。

1. onTouchEventでタップ時の座標を取得 円の中心座標を上書き
2. oNDraw() で再描画

### 1 ontouchEvent
 
``` kotin.kt
override fun onTouchEvent(event: MotionEvent): Boolean {
        when (event.action) {
            MotionEvent.ACTION_MOVE -> {
                baseX = event.x
                baseY = event.y
            }
        }
        invalidate()
        return true
    }
```

見たまんまですが、ACTION>MOVEでスワイプのたびに円の中心座標を更新します。


### 2 onDrawで再描画

1 のinvalidate()

```
invalidate()
```

を呼び出すと、AndroidがOnDrawを再描します。


## 動き

![スワイプ陰陽.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700755/64e51c3a-c3a4-d8f5-b018-12d292d2edbc.gif)
Specification of Ethernet Switch Driver, No.656, AUTOSAR 21-11 (202) CP

Specification of Ethernet Switch Driver, No.656, 2021-11

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


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

AUTOSAR 21-11, 160文書読んだ。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 module
|EcuM |ECU State Manager module
|Eth |Ethernet Controller Driver (AUTOSAR BSW module)
|EthIf |Ethernet Interface (AUTOSAR BSW module)
|EthTrcv| Ethernet Transceiver Driver (AUTOSAR BSW module)
|MII| Media Independent Interface (standardized interface provided by Ethernet controllers to access Ethernet transceivers)
|MDIO |Management Data Input/Output
|OA TC10| Open Alliance TC10 specification (see [7])
## 英日単語帳
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture
[2] Specification of Ethernet Interface
AUTOSAR_SWS_EthernetInterface
[3] Specification of Ethernet Transceiver Driver
AUTOSAR_SWS_EthernetTransceiverDriver
[4] Specification of Ethernet Driver
AUTOSAR_SWS_EthernetDriver
[5] Specification of SPI Handler/Driver
AUTOSAR_SWS_SPIHandlerDriver
[6] Glossary
AUTOSAR_TR_Glossary
[7] OPEN Sleep/Wake-up Specification for Automotive Ethernet
http://www.opensig.org/Automotive-Ethernet-Specifications/
[8] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral
[9] Requirements on Ethernet Support in AUTOSAR
AUTOSAR_SRS_Ethernet
[10] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral
[11] IEEE 802.1Q-2011 - IEEE Standard for Local and metropolitan area networks - Media Access Control (MAC) Bridges and Virtual Bridged Local Area Networks
[12] Specification of Time Synchronization over Ethernet
AUTOSAR_SWS_TimeSyncOverEthernet
[13] Specification of NVRAM Manager
AUTOSAR_SWS_NVRAMManager
Nuxt.jsでメンション機能を実装する

# チャットにメンション機能を追加したい！

`vue-mention`というのが良さそう。
これを導入することにしました。

## インストールする

### vue-mention

```
yarn add vue-mention
```


### v-tooltipも必要らしい？

追加しておきます。

```
yarn add v-tooltip
```


## 実装する

### プラグイン読み込み

```js
import { Mentionable } from 'vue-mention'
```

### componentsに追加

``` js

export default {
  components: {
    Mentionable
  },
}
```

### メンション実装

```js
<mentionable
  :keys="['@', '＠']"
  :items="mentionItems"
  insert-space
  @open="onOpen"
>
  <v-text-field
     v-model="message"
     label="送信内容を入力"
     required
  />
  <template #no-result>
     <div class="dim">
        No result
     </div>
  </template>
  <template #item="{ item }">
    <div class="user">
      {{ item.value }}
    </div>
  </template>
</mentionable>
```

@または＠でユーザーを選択できるようにしたいので、`:keys`に、@と＠を指定する。
メンションで表示したいものは`:items`に。

この時、`:items`に渡して表示させるものは`value`にしないといけない？
名前を選択しても入力欄が`undefined`になってしまい、ちょっとハマりました。

#### NG
```js
mentionItems = {
  {
    id: 1,
    name: John
  },
  {
    id: 2,
    name: Catherine
  }
}
```

#### OK
```js
mentionItems = {
  {
    id: 1,
    value: John
  },
  {
    id: 2,
    value: Catherine
  }
}
```
Specification of Wireless Ethernet Transceiver Driver, No.799, AUTOSAR 21-11 (201) CP

Specification of Wireless Ethernet Transceiver Driver, No.799, 2021-11

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


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

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

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

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

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

# 用語(terms)

|Term|Description|
|:--|:--|
|AIFS |Arbitration Inter Frame Space
|CBR| Channel Busy Ratio
|CIT |Channel Idle Time
|CW| Contention Window
|DP |DCC Profile
|EthIf |Ethernet Interface (AUTOSAR BSW module)
|Eth |Ethernet Driver (AUTOSAR BSW module)
|EthTrcv| Ethernet Transceiver Driver (AUTOSAR BSW module)
|ISR| Interrupt Service Routine
|MCG |Module Configuration Generator
|WEth |Wireless Ethernet Driver (AUTOSAR BSW module)
|WEthTrcv |Wireless Ethernet Transceiver (AUTOSAR BSW module)
## 英日単語帳
日本語は仮訳

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 Communication
AUTOSAR_SWS_COM.pdf
[5] Specification of Ethernet Interface
AUTOSAR_SWS_EthernetInterface.pdf
[6] Specification of Wireless Ethernet Driver
AUTOSAR_SWS_WirelessEthernetDriver.pdf
[7] Specification of Ethernet Transceiver Driver
AUTOSAR_SWS_EthernetTransceiverDriver.pdf
[8] BSW Scheduler Specification
AUTOSAR_SWS_Scheduler.pdf
[9] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration.pdf
[10] Specification of Memory Mapping
AUTOSAR_SWS_MemoryMapping.pdf
[11] Specification of Standard Types
AUTOSAR_SWS_StandardTypes.pdf
[12] Specification of Default Error Tracer
AUTOSAR_SWS_DefaultErrorTracer.pdf
[13] Specification of Diagnostics Event Manager
AUTOSAR_SWS_DiagnosticEventManager.pdf
[14] Requirements on Vehicle-2-X communication
AUTOSAR_SRS_V2XCommunication.pdf
[15] IEC 7498-1 The Basic Model, IEC Norm, 1994
[16] IEEE 802.11-2012
prismaのスキーマで安易に@ignoreを使って詰まった

# 概要
現在私は、NestJS + GraphQL + prisma という構成でアプリケーションを作成している。
このアプリケーションで、prismaで参照しているDBにカラムとしては存在するけど、今回のアプリケーションでは使わないカラムだから無視したいという欲が出てきた。
 https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#ignore のドキュメントを見るに、 `@ignore` をつけるとPrismaClientから見れなくなるよ的なことが書いてある(気がする)ので、以下のようにスキーマに `@ignore` を追加した。

```schema.prisma
model Sample {
  id   Int    @id @default(autoincrement())
  name String @db.VarChar(255)
  test String @ignore

  @@map("samples")
}
```

スキーマ修正後にSampleのレコードを作りたいなあとなったので、NestJS内で `await this.prisma.sample.create(input)` としようとした場合に問題は起こった。

# 起こった問題
`Property 'create' does not exist on type 'SampleDelegate<RejectOnNotFound | RejectPerOperation>'`

まあ要するに sampleに `create()` なんていう関数はないと言われた。
ちなみに、`update()` はあって、 `create()` だけない状況になった。
なんなら既に他のテーブルにレコードを追加する処理は書いてあったし、なぜSampleにだけcreateがないの？？？って状態だった。

# 解決法

https://github.com/prisma/prisma/issues/13467 に原因が載っていて、必須のfieldに `@ignore` をつけると　create/update　が使えなくなるということだった。
まあ、DB上では必須の項目がPrismaからは参照できない（入力しても無視される）=nullになる可能性が出てくるということを考えれば当たり前っちゃ当たり前かもしれない。(DBの設定でデフォルト値が設定されているならば問題ないだろうが、デフォルト値が設定されているかいちいち確認して挙動を変えるとかそりゃprisma側としてはやりたくないだろうし、createできなくするのも納得という感じ)
issueの回答として `?` をつけてoptionalにすればええよ的なことが書いてあるが、今回はそもそもスキーマからfieldごと消すことで対応した。
updateができることは謎だが、updateは基本的にどの属性もoptionalなので、 `@ignore` がついているfield(カラム)の更新があったらエラーになるのかもしれない※挙動未確認

# まとめ
ちゃんとドキュメントを読もう!
Specification of Network Management for SAE J1939, No.612, AUTOSAR 21-11 (198) CP

Specification of Network Management for SAE J1939, No.612, 2021-11

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


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

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

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

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

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

# 用語(terms)

|Term|Description|
|:--|:--|
|AC| J1939 AddressClaimed PG (PGN = 0x0EE00)
|BSW| Basic Software (module)
|DET |Default Error Tracer, supports development and runtime error reporting
|Node |J1939 node – can be attached to more than one channel
|NodeChannel| The connection of a node to one channel
|PG |Parameter Group
|PGN |Parameter Group Number
|RQST |J1939 Request PG (PGN = 0x0EA00)
## 英日単語帳
日本語は仮訳

T.B.D.

# 参考(reference)

[1] List of Basic Software Modules
AUTOSAR_TR_BSWModuleList.pdf
[2] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[3] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral.pdf
[4] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
[5] Requirements on BSW Modules for SAE J1939
AUTOSAR_SRS_J1939.pdf
[6] Requirements on Network Management
AUTOSAR_SRS_J1939.pdf
[7] Specification of Communication Stack Types
AUTOSAR_SWS_CommunicationStackTypes.pdf
[8] System Template
AUTOSAR_TPS_SystemTemplate.pdf
[9] Specification of CAN Interface
AUTOSAR_SWS_CANInterface.pdf
[10] Specification of Network Management Interface
AUTOSAR_SWS_NetworkManagementInterface.pdf
[11] Specification of Basic Software Mode Manager
AUTOSAR_SWS_BSWModeManager.pdf
[12] Specification of a Request Manager for SAE J1939
AUTOSAR_SWS_SAEJ1939RequestManager.pdf
[13] Specification of Default Error Tracer
AUTOSAR_SWS_DefaultErrorTracer.pdf
[14] Specification of Diagnostic Event Manager
AUTOSAR_SWS_DiagnosticEventManager.pdf
[15] Specification of BSW Scheduler
AUTOSAR_SWS_BSWScheduler.pdf
[16] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration.pdf
[17] Specification of Memory Mapping
AUTOSAR_SWS_MemoryMapping.pdf
[18] J1939-81 JUN2011, Network Management
Specification of TTCAN Interface, No.433, AUTOSAR 21-11 (197) CP

Specification of TTCAN Interface, No.433, 2021-11

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


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

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

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

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

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

# 用語(terms)

|Term|Description|
|:--|:--|
|"‘at system configuration time"’|static configuration parameters stored in TtcanIf; may be defined
after compilation of the code of TtcanIf, but have to be defined
before the first execution of TtcanIf code.
|Arbitrating Time Window| See [1, ISO 11898-4]
|Basic Cycle |See [1, ISO 11898-4]
|BSW| Basic Software
|CanIf| CAN Interface
|Communication Job| A TTCAN Communication Job defines the specific communication
operation and the assigned execution time.
|Continuous Transmission| Contrary to Single Shot a message will be transmitted cyclically
even without a new transmit request.
|Controller |A (TTCAN-)Controller is a CPU on-chip or external standalone
hardware device. One Controller is connected to one physical
channel.
|Cycle Time| See [1, ISO 11898-4]
|Dem| Diagnostic Event Manager
|DLC| Data Length Code (part of L-PDU that describes the SDU length)
|DLL |Data Link Layer
|EcuM| ECU Manager
|Exclusive Time Window| See [1, ISO 11898-4]
|Gap |See [1, ISO 11898-4]
|Global Time |See [1, ISO 11898-4]
|Hardware Object |A CAN hardware object is defined as a PDU buffer inside the CAN
RAM of the CAN hardware unit / CAN Controller.
|ISR |Interrupt Service Routine
|JLEF |(TTCAN) Job List Execution Function
|Job List |A TTCAN Job List is a list of (maybe different) Communication
Jobs sorted according to their respective execution start time.
|L-PDU| Protocol Data Unit for the Data Link Layer (DLL)
|Local Time |See [1, ISO 11898-4]
|Matrix Cycle| See [1, ISO 11898-4]
|MCAL| Microcontroller Abstraction Layer
|NTU |See [1, ISO 11898-4]
|OS| (AUTOSAR) Operating System
|PduR |PDU Router
|Reference Message |See [1, ISO 11898-4]
|SDU |Service Data Unit
|Single Shot |A message will be transmitted only once contrary to Continuous Transmission.
|System Matrix| See [1, ISO 11898-4]
|Time Gap |See [1, ISO 11898-4]
|Time Master |See [1, ISO 11898-4]
|Time Window |See [1, ISO 11898-4]
|Transmission Column |See [1, ISO 11898-4]
|TtcanDrv |CAN Driver module with enabled TTCAN functionality
|TtcanIf| CAN Interface module with enabled TTCAN functionality
|CanNm |CAN Network Management
|CanSM |CAN State Manager
|CanTp |CAN Transport Protocol
|TX |Transmission or transmit
|Tx_Trigger |See [1, ISO 11898-4]
|UL |Upper layer


## 英日単語帳
日本語は仮訳

T.B.D.

# 参考(reference)

[1] ISO 11898-4:2004 - Road vehicles - Controller area network (CAN) - Part 4: Timetriggered communication
[2] Specification of CAN Interface
AUTOSAR_SWS_CANInterface
[3] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture
[4] Glossary, AUTOSAR_TR_Glossary
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf
[5] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral
Railsのトランザクション

# トランザクションとは
データの整合性を保証するための処理のこと。
途中で処理が失敗したらそれまで行った処理を元に戻す（ロールバック）。

例えば、銀行でAさんがBさんに1万円を送金するとする。
この場合、
①Aさんの口座から1万円を引く
②Bさんの口座に1万円を足す
という処理を行うが、もし②の処理が何らかの理由でエラーになった場合、トランザクションを使わなければ、Aさんがただ1万円を損しただけになってしまう。

トランザクションを使うと、②が失敗したら①の処理が元に戻るので最悪の事態は免れることができる。

# Railsのトランザクションの書き方
``ActiveRecord:Base.transaction``を使う。
```:main_controller.rb
ActiveRecord::Base.transaction do
  実行したい処理
end
```

# トランザクションの注意点
例外が発生しないとロールバックは行われないことに注意する。
save!やupdate!など破壊メソッドの処理で失敗すると例外が起きる。
railsで動的にclass/id名をつける

# 結論
クラス名に変数代入を使用する。


# 背景
DBからデータを取得して一つずつ表示する機能を実装していました。
動的に表示非表示を切り替える処理を実装するときにrailsのviewファイルに
```
<div>class="section1"</div>
<div>class="section2"</div>
<div>class="section3"</div>
<div>class="section4"</div>
.
.
.

<div>class="section10"</div>
```
と記載して都度```display:none```で表示非表示を切り替えるというものでした。
# 何が悪なのか
railsの設計思想の一つにDRY(Don’t Repeat Yourself)があります。「コードを重複させない」という意味合いです。
可読性が下がる。コード量が増える意味合いでも極力コードの重複は減らさなければなりません。

# 具体例
今回はDBから取得したデータを一つずつ表示非表示するというものでした
```
class=<%= "section#{question.id}" %>
```
このようにすることでデータのidに紐付けたクラス名を作成することができます。
100行でも1,000行でもでそれぞれのクラス名を付与した要素を作ることができます。
【Salesforce】レポート上部の統計情報を非表示にする

# はじめに
Salesforceではオブジェクトのレコードをレポート機能を使って表示することができます。
レポートでは、上部に統計情報が表示されますが、グループ化を行わずに非表示にしたい場合の方法を紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708480/1e9a3bcc-469d-bd53-084b-2606e84bd740.png)
↑上部に統計情報が表示されるが、グループ化を行わずに非表示にしたい。

# 手順
まず、レポートの編集画面を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708480/131da1b9-0f29-2d5b-d0ed-dbafb102728b.png)

どれでもよいので項目でグループ化します。
すると、画面下部に行数などの設定が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708480/2e6a296e-2452-e321-3836-56ac0bf50b98.png)

ここで、「行数」と「統計」の設定をオフにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708480/37cf9002-9fd8-ef0b-a2e0-a894671e5b1f.png)

このままでは、不要なグループ化がされた状態ですので、グループ化を解きます。
画面下部に表示されていた設定は消えますが、内部では設定情報は保持されているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708480/09bd2432-5589-3e32-a50e-69d696593ab3.png)

これで、画面上部の統計情報の表示を無くすことができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708480/25894d21-d843-799c-9ae8-e99c7a625007.png)
【Salesforce】フロー実行時に発生するエラー「nested exception is: common.exception.ApiQueryException: sObject type～」への対処

# はじめに
フローが実行された際に、

>nested exception is: common.exception.ApiQueryException: sObject type 'CustomObject__c' is not supported. If you are attempting to use a custom object, be sure to append the '__c' after the entity name. Please reference your WSDL or the describe call for the appropriate names. (There was a problem executing your command.)

といったエラーが発生した際の対処法を紹介します。

# エラーの原因
まず、エラーの原因ですが、Salesforceに直接問い合わせました。
原因としては、**Flowが保持しているキャッシュに不整合が発生したことによる事象**とのことでした。
つまりフローの設計に問題があるのではなく、何度か実行された結果キャッシュに不整合が発生し、エラーとなってしまうということですね。

# 対処法
では、このエラーへの対処はどうすればいいのかというと、
**エラーが発生しているフローのバージョンを更新し、有効化する**ことで回避できます。
フローの編集画面右上から「別名で保存」から行えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708480/7a6ca68c-4a8b-cd5f-1c1a-0302a9845b38.png)


新たなバージョンを有効化したことにより保持していたキャッシュが無効となり事象が解消する、といった理由です。
エラーが発生した場合は、上記の方法で回避は可能ですが、原因がキャッシュの不整合ですので、未然に防ぐのは難しいかもしれません。
pythonでgeopandasとfoliumをつかって、地図上に地元のローカル線を表示する方法

# はじめに
pythonで西鉄大牟田線（福岡のローカル線）をgeopandasとfoliumを使って地図上に線で表示するサンプルプログラム。Docker上のJupyterでの実行は楽だったが、Windows環境でコマンドライン実行しようとしたら意外と面倒だったので、両者のpip実行の違いにも少しふれつつ記事をまとめています。
また、路線については国土交通省のオープンデータを使用。

# 環境
- コマンドライン実行
  - Windows10(64bit)
  - python 3.9.13 

- Docker on Jupyter
  - Windows10(64bit)
  - Docker Desktop
    - python 3.9.13
    - Jupyter NoteBook 6.4.11

# pip実行
## コマンドライン実行
geopandasがそのままpipでインストールできないため、GDALとFionaをファイルからpipする
- GDAL のインストール
https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
から、`GDAL‑3.4.3‑cp39‑cp39‑win_amd64.whl` をダウンロードして、ファイルに対して以下のようにpipを行う

```shell
python -m pip install GDAL-3.4.3-cp39-cp39-win_amd64.whl
# ファイルがあるところに cd を忘れずに
```


- Fiona のインストール
https://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona
から、`Fiona-1.8.21-cp39-cp39-win_amd64.whl` をダウンロードして、ファイルに対して以下のようにpipを行う
```shell
python -m pip install Fiona-1.8.21-cp39-cp39-win_amd64.whl
# ファイルがあるところに cd を忘れずに
```
上記２つをpip実行したあとに以下のpipを実行
```shell
python -m pip install geopandas
python -m pip install folium 
```


## Docker on Jupyter
Jupyter上で以下のpipを実行
```shell
pip install geopandas
pip install folium 
```

# データについて
以下の国土交通省さんのページから、令和２年分をダウンロード
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N02-v2_3.html
zipを解凍して、`N02-20_RailroadSection.geojson` を拝借

# プログラム
※実行するpyファイルと、上記のgeojsonを同じフォルダ上に配置

```python
import geopandas as gpd
import folium

# 鉄道路線データファイル読み込み
geo_data = gpd.read_file("./N02-20_RailroadSection.geojson", encoding="shift-jis")

# 路線が"西日本鉄道データ" かつ "天神大牟田線 を条件指定して取得
nishi_geo_data = geo_data[
    (geo_data["N02_003"] == "天神大牟田線") & (geo_data["N02_004"] == "西日本鉄道")
]

# 天神を中心に地図を設定
map = folium.Map(
    location=[33.590381344432345, 130.39914160329164],
    zoom_start=10,
    tiles="OpenStreetMap",
)

# 路線の座標をプロット
for _, line in nishi_geo_data.iterrows():
    sim_geo = gpd.GeoSeries(line["geometry"])
    geo_j = sim_geo.to_json()
    geo_j = folium.GeoJson(data=geo_j)
    geo_j.add_to(map)

# Jupyter は、変数名だけで地図表示できる
map
# コマンド実行の場合は、HTML出力しないと、内容が確認できない
# map.save("map.html")
```

# こんな感じ（出力したHTMLのスクリーンキャプチャ）
![_C__Users_naoyuki_app_python_map.html(iPad Air).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541739/fcd5d76c-fe70-ff97-a618-ec95b20cffef.png)

# さいごに
Windowsが面倒なのか、Docker(Linux)環境が楽なのか、Jupyterが楽なのかは詳細には調べていませんが前者２つかなと予想しています。

# 参考

https://ushitora.net/archives/2065