OmniAICreator/Qiita-1.07M huggingface dataset:
C++でガウス分布

# はじめに
C++初心者が自分でガウス分布を実装します。別記事で実装した行列演算クラス([C++で行列計算実装](https://qiita.com/ccam/items/75efe05edf815ea6734b))を用いて多次元版のガウス分布も同時に実装します。

なお、行列計算を自分で実装したものを用いていますが、基本的には行列計算ライブラリのEigenなどで置き換えても同様の実装になるかと思います。

# 使い方のイメージ
例えば平均０、分散１のガウス分布において0.3における値を生成したい場合、
```cpp
double x = gauss(0.3,0,1) //xに0.381が入る
```
のように計算します。

# 実装
## 1次元ガウス分布
1次元の場合ガウス分布の式は以下で与えられます。
```math
\mathcal{N}(x|\mu,\sigma^2)=\frac{1}{(2\pi\sigma^2)^{1/2}}\exp \biggl( -\frac{1}{2\sigma^2}(x-\mu)^2\biggl)
```

定義通りに実装して、下記になります。
```cpp
double Distributions::gauss(double x, double mu, double sigma){
  return 1 / pow(2 * M_PI * pow(sigma,2), 0.5) * exp(-1/(2 * pow(sigma,2)) * pow(x - mu,2));
}
```
ただし、`Distributions`という名前空間内で実装しました。

## 多次元ガウス分布
多次元の場合ガウス分布の式は下記です。
```math
\mathcal{N}(\bf{x}|\boldsymbol{\mu},\boldsymbol{\Sigma})=\frac{1}{(2 \pi)^{D/2}}\frac{1}{|\boldsymbol{\Sigma}|^{1/2}}\exp \biggl( -\frac{1}{2}(\bf{x}-\boldsymbol{\mu})^{T}\Sigma^{-1}(\bf{x}-\boldsymbol{\mu})\biggl)
```
定義通りに実装すると、
```cpp
double Distributions::gauss(Ma x, Ma mu, Ma sigma){
  int D = sigma.shape()[0];
  return 1 / pow(pow(2 * M_PI, D),0.5) * 1 / pow(sigma.det(), 0.5) * exp(-0.5 * ((x-mu).T() * sigma.inv() * (x-mu))(0,0));
}
```
ここで以前投稿した記事で実装した行列計算クラス`Ma`([C++で行列計算実装](https://qiita.com/ccam/items/75efe05edf815ea6734b))を入力として受け取っています。

行列計算クラスを使うと多次元の場合であっても簡単に実装できました。

# まとめ
ガウス分布をC++で実装しました。ガウス分布以外のベータ分布やディリクレ分布なども簡単に実装できそうです。

# コード
```cpp:dist.h
#include "mat.h"
namespace Distributions{
  double gauss(Ma x, Ma mu, Ma sigma);
  double gauss(double x, double mu, double sigma);
}
```
```cpp:dist.cpp
#include "mat.h"
#include <math.h>
#include "dist.h"


double Distributions::gauss(double x, double mu, double sigma){
  return 1 / pow(2 * M_PI * pow(sigma,2), 0.5) * exp(-1/(2 * pow(sigma,2)) * pow(x - mu,2));
}
double Distributions::gauss(Ma x, Ma mu, Ma sigma){
  int D = sigma.shape()[0];
  return 1 / pow(pow(2 * M_PI, D),0.5) * 1 / pow(sigma.det(), 0.5) * exp(-0.5 * ((x-mu).T() * sigma.inv() * (x-mu))(0,0));
}
```
Specification of EEPROM Driver, No.21, AUTOSAR R21-11(111) CP

Specification of EEPROM Driver, No.21, 2021-11

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


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

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

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

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

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

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

# 用語(terms)
|Term|Description|
|:--|:--|
|Data block |A data block may contain 1..n bytes and is used within the API of the EEPROM,  driver.Data blocks are passed with - Address offset in EEPROM - Pointer to memory location- Length , to the EEPROM driver.
|Data unit| The smallest data entity in EEPROM. The entities may differ for read/write/erase operation., Example 1: Motorola STAR12,  Read: 1 byte,  Write: 2 bytes, Erase: 4 bytes, Example 2: external SPI EEPROM device, Read/Write/Erase: 1 byte
|Normal mode, Burst mode|Some external SPI EEPROM devices provide the possibility of different access modes: - Normal mode: The data exchange with the EEPROM device via SPI is performed byte wise. This allows for cooperative SPI usage together with other SPI devices like I/O ASICs, external watchdogs etc. - Burst mode: The data exchange with the EEPROM device via SPI is performed block wise. The block size depends on the EEPROM properties, an example is 64 bytes. Because large blocks are transferred, the SPI is blocked by the EEPROM access in burst mode. This mode is used during ECU start-up and shut-down phases where fast reading/writing of data is required.
|EEPROM cell| Smallest physical unit of an EEPROM device that holds the data. Usually 1 byte.
|EEPROM |Electrically Erasable and Programmable Read Only Memory
|NVRAM| Non Volatile Random Access Memory
|NvM| Module name of NVRAM Manager
|EcuM| Module name of ECU State Manager
|DEM| Module name of Diagnostic Event Manager
|DET| Module name of Default Error Trace


## 英日
日本語は仮訳

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] Specification of Memory Abstraction Interface
AUTOSAR_SWS_MemoryAbstractionInterface.pdf
[5] Specification of SPI Handler/Driver
AUTOSAR_SWS_SPIHandlerDriver.pdf
[6] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration.pdf
[7] Requirements on EEPROM Driver
AUTOSAR_SRS_EEPROMDriver.pdf
[8] Specification of Default Error Tracer
AUTOSAR_SWS_DefaultErrorTracer.pdf
[9] Specification of Diagnostics Event Manager
AUTOSAR_SWS_DiagnosticEventManager.pdf
[10] AUTOSAR Glossary
AUTOSAR_TR_Glossary.pdf
[11] Specification of MCU Driver
AUTOSAR_SWS_MCUDriver.pdf
[12] Basic Software Module Description Template
AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
[13] List of Basic Software Modules
AUTOSAR_TR_BSWModuleList.pdf
[14] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
Explanation of Firmware Over-The-Air, No.945, AUTOSAR R21-11(110) CP

Explanation of Firmware Over-The-Air, No.945, 2021-11

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


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

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

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

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

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

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

# 用語(terms)

|Term|Description|
|:--|:--|
|BSW |Basic Software (See LayeredSWArchitecture slide collection in AUTOSAR releases)
|ECU |Electronic control unit
|DCM |Diagnostic Communication Manager (AUTOSAR BSW Module, Classic Platform) (Surprisingly not yet listed!)
|FOTA |FirmwareOverTheAir
|HSM |Hardware Security Module (cryptographic features realized in HW)
(Should actually come from a different doc, e.g. safety or security)
|NvM |Non-Volatile Memory, BSW Module, sometimes referred to as NV Memory (Surprisingly not yet listed!)
|OTA| Over-The-Air technologies in general, regardless of AUTOSAR
|UCM| Update And Configuration Management (Functional Cluster in the Adaptive Platform, AUTOSAR Workgroup)
|UDS |Unified diagnostic services (see ISO-14229) (Surprisingly not yet listed!)

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Specification of Update and Configuration Management
AUTOSAR_SWS_UpdateAndConfigurationManagement
[2] Requirements on Update and Configuration Management
AUTOSAR_RS_UpdateAndConfigurationManagement
[3] Requirements on Firmware Over-The-Air
AUTOSAR_RS_FirmwareOverTheAir
[4] Specification of Bulk NvData Manager
AUTOSAR_SWS_BulkNvDataManager
[5] Glossary, AUTOSAR_TR_Glossary
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf
[6] Unified diagnostic services (UDS) – Part 1: Specification and requirements (Release 2013-03)
http://www.iso.org
[7] Specification of NVRAM Manager
AUTOSAR_SWS_NVRAMManager
[8] Specification of Diagnostic Communication Manager
AUTOSAR_SWS_DiagnosticCommunicationManager
パスワードに英数字混合のバリデーションを設定する方法

deviseにはデフォルトでバリデーションが設定されていますが、英数字混合のバリデーションはデフォルトにはないため別途記述する必要があります。
記述内容は以下二文をuserモデルに記述するだけ。
```ruby:user.rb
VALID_PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i.freeze
validates :password, format: { with: VALID_PASSWORD_REGEX }
```





この正規表現を用いたバリデーションの記述により、パスワードに英数字混合のバリデーションを設定できました。
正規表現を用いれば英数字の他に全角かな/カナ漢字など、細かくバリデーションを設定することができます。
Specification of RAM Tes, No.76, AUTOSAR R21-11(109) CP

Specification of RAM Tes, No.76, 2021-11

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


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

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

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

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

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

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

# 用語(terms)

|Term|Description|
|:--|:--|
|API| Application Programming Interface
|CRC |Cyclic Redundancy Check
|DEM| Diagnostic Event Manager
|DET |Default Error Tracer
|DMA |Direct Memory Access
|ECC| Error Correction Code
|NMI |Non Maskable Interrupt
|RAM |Random Access Memory
|Definitions|Note: These definition are copied from the AUTOSAR_TR_Glossary.pdf
|Synchronous| A communication is synchronous when the calling software entity is blocked until the called operation is evaluated. The calling software entity continues its operation by getting the result. Synchronous communication between distributed functional units has to be implemented as remote procedure call.
|Asynchronous| Asynchronous communication does not block the sending software entity. The sending software entity continues its operation without getting a response from the communication partner(s). There could be an acknowledgement by the communication system about the sending of the information. A later response to the sending software entity is possible

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] List of Basic Software Modules
AUTOSAR_TR_BSWModuleLis.pdf
[2] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[3] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral.pdf
[4] General Requirements on SPAL
AUTOSAR_SRS_SPALGeneral.pdf
[5] Requirements on RAM Test
AUTOSAR_SRS_RAMTest.pdf
[6] Basic Software Module Description Template
AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
[7] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
[8] D1.5-General Architecture; ITEA/EAST-EEA, Version 1.0; chapter 3, page 72 et seq.
[9] D2.1-Embedded Basic Software Structure Requirements; ITEA/EAST-EEA, Version 1.0 or higher.
[10] D2.2-Description of existing solutions; ITEA/EAST-EEA, Version 1.0 or higher.
[11] ISO 26262-5:2018 - Road vehicles - Functional Safety, Part 5: Product development at the hardware level http://www.iso.org.
gitのコマンドあれこれ



### ローカルリポジトリでブランチを作成

```terminal: terminal
git checkout -b [NewLocalBranchName]
```

---


### 現在のブランチを変更する

```terminal: terminal
git checkout [localBranchName]
```


### ブランチの削除
※ 削除しようとしているリポジトリにいる状態だと削除できない

```terminal: terminal
git branch -d [localBranchName]
```
---

### 現在のローカルリポジトリのブランチを全て確認

```terminal: terminal
git branch -a
```


参照元：　https://qiita.com/TetsuTaka/items/5ab227a8bd2cd7106833
zip(*list)の解説

Leetcodeをやっていたときに、zip(*list)というよく分からないコードが正解コードに組み込まれていた。
理解を深めるために解説する。
```python:問題のコード
list = ["abc","def","ghi"]
print(zip(*list))
>>>
>>>
>>>
Output:[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
```
　　
　　
　　
　　
　　
　　
まず、zip( )というのは、リスト内の要素を囲うことができる。
アスタリスクを外して、zip(list)をprintしてみよう。
```python:
list = ["abc","def","ghi"]
print(zip(list))
>>>
>>>
>>>
Output:[('abc',), ('def',), ('ghi',)]
          0番目     1番目     2番目
```
次に、アスタリスクをつけてzip(*list)に戻すと、
```python:
list = ["abc","def","ghi"]
print(zip(*list))
>>>
>>>
>>>
Output:[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
何番目:   0,0  1,0  2,0    0,1  1,1  2,1    0,2  1,2  2,2
```
　　
要は、アスタリスクが無ければzip( )本来の働きをする。リスト内の0,1,2,…番目が( )に囲われる。
list = ["abc","def","ghi"]
Output:[('abc',), ('def',), ('ghi',)]
(list[0],list[1],list[2]の順に並んでいる)
　　
しかし、アスタリスクが付くと、リスト内の"全要素の0,1,2,…番目"が同時に( )に囲われる。
list = ["abc","def","ghi"]
Output:[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
(list[0][0],list[1][0],list[2][0]の順に並んでいる)
　　
　　
　　
なぜ、アスタリスクが付くとlist[0][0]になるのかというと、
```python:
zip(*list) == zip(list[0],list[1],list[2])
```
と、(*list)の中身は(list[0],list[1],list[2])と同じだからである。
　　
もっと詳しく書くと、
```python:

1  :  zip(list) == (list[0]),(lsit[1]),(list[2])

2  :  zip(list[0],list[1],list[2]) == ((list[0]),(lsit[1]),(list[2])) * ((list[0]),(lsit[1]),(list[2]))
      == (list[0][0],list[1][0],list[2][0]),(list[0][1],list[1][1],list[2][1]),(list[0][2],list[1][2],list[2][2])

```
1はただzip( )がlistの並び順に( )で囲っているだけ。
2は、zip( )がlistの並び順を出して、更にそれにlistの並び順を掛け算(数学でいう展開)している。
　　
　　
　　
最終的に分かったことは、「このアスタリスクなんだ？？？？」と思っていたけれど、ただzip()に掛け算しているだけだった。
railsの投稿機能で表示順を入れ替えるorderメソッド

本記事はプログラミング初心者の自分の学習中の内容を備忘録のように記述する内容となっており、同じようにプログラミング初心者の方の学習に繋がればと考えて投稿しております。
間違いなどあれば指摘していただけると嬉しいです。


RubyonRailsを使用してWEBアプリで投稿機能を作成しているとユーザー投稿機能を実装した際に新しい投稿が既に投稿されている投稿内容の下に追加されていくので新しい投稿を閲覧する際にブラウザを下までスクロールする必要がある。新規投稿がブラウザの一番上に投稿されるように表示順を入れ替えるメソッドを使って利用しやすいようにする。

・Orderメソッド
モデルが使用できるActiveRecordメソッドでコントローラーでモデルのインスタンスを生成する際に使用すると表示順を入れ替えることができる

```記述方法
インスタンス = model名.order("基準にしたいカラム名 表示順")
```

:::note
表示順
ASC(昇順）　　　　　　古いもの、小さいものから順に表示
DESC（降順）　　　　　ASCの逆
:::


EX)作成日時が新しいものから表示させるとき
```ruby
class PostsController < ApplicationController
 　　　#中略
  def index
    @posts = Post.all.order("created_at DESC")
  end
　　　　　　＃中略
end

```
Requirements on Flash Driver, No.194, AUTOSAR R21-11(108) CP

Requirements on Flash Driver, No.194, 2021-11

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


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

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

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

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

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

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

# 用語(terms)

|Term|Description|
|:--|:--|
|CS |Chip select
|DIO |Digital Input Output
|ECU |Electric Control Unit
|EOL| End Of Line. Often used in the term ‘EOL Programming’ or ‘EOL Configuration’
|ICU |Interrupt Capture Unit
|MAL| Old name of Microconroller Abstraction Layer (replaced by MCAL because ‘MAL’ is a french term meaning ‘bad’)
|MCAL |Microconroller Abstraction Layer
|MCU |Microcontroller Unit
|MMU| Memory Management Unit
|Master| A device controlling other devices (slaves, see below)
|Slave |A device beeing completely controlled by a master device
|NMI |Non maskable interrupt
|OS |Operating System
|PLL| Phase Locked Loop
|PWM |Pulse Width Modulation
|RX| Reception (in the context of bus communication)
|SPAL |The name of this working group
|SFR| Special Function Register
|RTE |Runtime environment
|WP |Work Package
|STD| Standard
|REQ |Requirement
|UNINIT| Uninitialized (= not initialized)


## 英日
日本語は仮訳

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 Requirements on SPAL
AUTOSAR_SRS_SPALGeneral.pdf
[5] Software Standardization Template
AUTOSAR_TPS_StandardizationTemplate.pdf
Requirements on EEPROM Driver, No.192, AUTOSAR R21-11(107) CP


Requirements on EEPROM Driver, No.192, 2021-11

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


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

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

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

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

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

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

# 用語(terms)
|Term| Description|
|:--|:--|
|CS |Chip select
|DIO| Digital Input Output
|ECU |Electric Control Unit
|EOL |End Of Line. Often used in the term ‘EOL Programming’ or ‘EOL Configuration’
|ICU |Interrupt Capture Unit
|MAL |Old name of Microconroller Abstraction Layer (replaced by MCAL because ‘MAL’ is a french term meaning ‘bad’)
|MCAL| Microcontroller Abstraction Layer
|MCU| Microcontroller Unit
|MMU| Memory Management Unit
|Master |A device controlling other devices (slaves, see below)
|Slave| A device beeing completely controlled by a master device
|NMI| Non maskable interrupt
|OS |Operating System
|PLL| Phase Locked Loop
|PWM| Pulse Width Modulation
|RX |Reception (in the context of bus communication)
|SPAL |The name of this working group
|SFR |Special Function Register
|RTE| Runtime environment
|WP |Work Package
|STD |Standard
|REQ| Requirement
|UNINIT| Uninitialized (= not initialized)

## 英日
日本語は仮訳

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 Requirements on SPAL
AUTOSAR_SRS_SPALGeneral.pdf
[5] Software Standardization Template
AUTOSAR_TPS_StandardizationTemplate.pdf
Vue.jsでsubmitしたときに起きたこと

Vue.jsを使ってタスク管理アプリを作ってみたとき、PCではタスクの新規登録ができたのにスマホでは登録できないという事態に陥り詰まってしまったのでその理由と解決方法のメモ

## PCでは大丈夫なのに

ローカル上で動作を確認（その時は問題なく動いていた）してherokuにデプロイ。その後PCで動作確認しいざスマホで使ってみようとすると何故かタスクの新規登録ができない。新規登録をスマホでする際の挙動を確認してみると。毎回ページがリロードされていることに気づいた。

## 原因

原因を探ってみると、submitボタンを押したときにVue.js(javascript)が動作する前にsubmitボタンの機能（フォーム送信）が働いてしまい画面遷移が起こってしまうのがダメだった模様。

## 対策

Vue.jsを使っての非同期処理でタスク作成をするので、submitボタンの機能そのものは必要ない。ただボタンとして押せればよかった。なのでボタンのtype属性を変更した。

```html
<template>
  <div id="create-modal">
     <form>
      .
      .
      .
      <button type="button" class="submit-btn"  @click="handleCreateTask">新規登録</button>
    </form>
  </div>
</template>
```

buttonの初期のtype属性は「submit」であるため、送信ボタン扱いになってしまい通信が発生してしまう。type属性に「button」を指定することによって「押せはするけれども、送信はしない」状態を作ることによってjavascripがうまく動作し、タスクの新規作成ができるようになった。

ただPCでは作れるけどスマホでは作れないというのが謎なので、分かったら追記したい。
Requirements on Memory Hardware Abstraction Layer, No.116, AUTOSAR R21-11(106) CP

Requirements on Memory Hardware Abstraction Layer, No.116, 2021-11

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


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

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

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

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

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

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

# 用語(terms)

|Term|Description|
|:--|:--|
|(Logical) Block| Continuous area of memory that can be individually addressed by the module user (i.e. for read / write / erase / compare operations). The block size is statically configurable (pre-compile time).
|Page| Smallest amount of memory that can be written in one pass.
|Sector| Smallest amount of memory that can be erased in one pass.
|FEE |Flash EEPROM Emulation
|EA| EEPROM Abstraction Layer
|MemIf| Memory Abstraction Interface
|Mem |Memory Driver
|MemAcc |Memory Access module
|BndM| Bulk non-volatile data Manager
|OTA client| Over The Air software update client
|Sector Batch| Combination of multiple consecutive sectors of the same size
|Sub Address Area|Combination of multiple non-contiguous sectors of the same size; used by MemAcc
|Address Area |Combination of multiple Sub Address Area
|MCU |Microcontroller unit
|MPU| Microprocessor unit
|AP |AUTOSAR Adaptive Platform
|CP| AUTOSAR Classic Platform

## 英日
日本語は仮訳

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 Requirements on SPAL
AUTOSAR_SRS_SPALGeneral.pdf
[5] Software Standardization Template
AUTOSAR_TPS_StandardizationTemplate.pdf
AWSでEC2を作成してみた

# 無料枠の契約
　まず初めにAWS 無料枠の契約を行う
　[AWS無料利用枠](https://aws.amazon.com/jp/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all)
  ※クレジットカードの登録が必要だが課金は発生しない

# とりあえずEC2を立ててみる
　無料利用枠でLinuxサーバを立てることができる
　①インスタンス起動 → インスタンスタイプは無料利用枠を選択
　![インスタンスタイプ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2667683/5bbaf5f5-05f9-d950-8100-e99984e580d6.png)
　②新しいキーペアを作成する
　　＃LinuxサーバにSSH接続するため、キーベアを作成する
![キーペア作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2667683/9dc5e756-98c3-6235-954d-2e091358b0b5.png)

　＃pem : Teratermで接続するときはこっち。
　＃ppk : puttyで接続するときはこっち。

　③セキュリティについて
　　このあとファイアウォールについて設定するのでこの段階ではデフォルトでOK

# セキュリティ規則を作成する
　①EC2ダッシュボードから"セキュリティグループ"を選択し、"セキュリティグループを作成"で作成する
　EC2に対してセキュリティグループというセキュリティ規則を適用する
　　受信規則：IN
　　送信規則：OUT　こっちは基本いじる必要なし。
　
　　INの規則に対して、自宅のグローバルIPアドレスを適用し、自宅以外からの接続を全て遮断するように設定をする。
　　![セキュリティグループ-in.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2667683/61718884-7f57-bbaf-55c8-0e7a91251184.png)
　＃カスタム▼をプルダウンすると、"マイIP"が表示されるので、それを選択すると現在のグローバルIPアドレスの情報が自動で入る。

　②作成したセキュリティグループをインスタンスと紐づける
　　インスタンス → アクション → セキュリティ → セキュリティグループの変更 から可能。
　
　とりあえずこれで、自宅からのSSH接続しかアクセスできないEC2を作成できた。

# 環境イメージ
ここまでの環境イメージは以下の通り。
なおAWSコンソールにログインするユーザは管理者権限以外に別のユーザを作成することをお勧めする。
![環境①.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2667683/a194c0d7-02eb-db39-8add-b0be827b1678.png)
三項演算子の処理なし時の注意点

>どうもaono1234と申します。記事がいいなと思ったらtwitterのフォローもお待ちしております‼
https://twitter.com/takeshi_program

三項演算子でバグが発生して1hぐらいハマったので覚書として記載します。

# 状況
- html上にrubyを出力しようとしていた。
- 三項演算で代入した変数をpタグで囲っているのに、検証ツールで見るとpタグで囲えてない（下記の状況）
- 三項演算子でやりたかったこと→@noticeに値が入っていたら「notice = @notice」で変数に代入、@noticeに値が入ってない場合は処理なし
![Inkedバグ_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534058/54b5df78-b575-6ebb-0c6b-4210a6e3a60b.jpeg)


# バグの原因
- 三項演算子の右側を空欄にしていたからだった。
- ダミー処理として()を記載したら治った。
![Inked正常_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534058/d21bc2b3-d680-72b6-71b4-6eae76c69ed2.jpeg)


# 考察
- 三項演算子の右側を空欄にしたことで、1行目と2行目のコードが合体し「@notice ? notice = @notice : notice」となっていたのだと推測
- 2行目の処理<% notice %>が1行目に吸収されたことで2行目にはpタグだけが残った。
Ubuntu 22.04にOpenJDK 17をインストール（Temurin）

# はじめに

Temurinを利用してUbuntu 22.04にOpenJDK17をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Linux \(RPM/DEB\) installer packages \| Adoptium](https://adoptium.net/installation/linux/)

## サポート

本本手法で導入した場合、[Support \| Adoptium](https://adoptium.net/support) より、2027-10がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update; apt install -y wget apt-transport-https
# wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc
# echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
# apt update
# apt install temurin-17-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment Temurin-17.0.3+7 (build 17.0.3+7)
OpenJDK 64-Bit Server VM Temurin-17.0.3+7 (build 17.0.3+7, mixed mode, sharing)
```
jupyter labでtabを押したときのindent の数を4->2に変更する。

jupyter labで　コードを選択しtabを押すと4space indent しますが、それを2spaceに切り替える設定の方法です。

* jupyter 上部の①「settings」->②「advanced Settings Editor」 
* ③「NoteBook」を選択
* ④System Defaultsの内容を⑤User Preferencesに⑥全部コピーする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468328/f8a7f500-a13b-63e4-a8d7-ce5f0a5a1a1a.png)

* User Preferences　について　⑦"tabSize": 4 -> "tabSize": 2 (3か所ある)
* 右上の⑧セーブボタンを押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468328/e97574c9-a546-0a38-0702-cfcb6f0ccac8.png)
Redisについて

## はじめに
RaisのプロジェクトでRedisを使っているのをよく見ていたが、使用するメリットなどをよくわかっていなかったので簡単に調べてみた。

## 詳細

### そもそもRedisとは
- 「Redis は、リモートディクショナリサーバー の略で、高速でオープンソースのメモリ内 key-value データストアです。」
- 読み方はレディス。
- 名称の由来は、`Remote Dictionary Server`から来ているそうです。

## メリット/デメリット

**メリット**
- 高速で動作する（RDBMSに比べ数千〜数万倍早いらしい）
(例えば、結果が頻繁に変化しないようなAPIのレスポンスを`cache`に溜めておくことで毎回`API call`が発生しないようにしてパフォーマンスの向上を図る。などがメジャーな用途になります。)
- Rails 5.2からデフォルトでRedisのキャッシュストアが対応され、キャッシュの導入が簡単になっている

**デメリット**
- RDB(Relational Database)のように複雑なデータは扱えない（リレーションを設定し複数の表を関連付けるようなことができない）
- データを永続化して保存したり更新・削除することに向いていない



## おわりに
普段使用しているRDBとの違いなど、ざっくり理解できた。
Flask　仮想環境　👆

# Flaskの仮想環境構築
仮想環境を使うことでプロジェクトごとに環境を変更できるから仮想環境を使う
正味ここ見ればわかるんだけど
https://flask.palletsprojects.com/en/2.1.x/

``` 
$ mkdir myproject　　　　　　　　　　　　　　ディレクトリの作成
$ cd myproject　　　　　　　　　　　　　　　　　　　　作成したディレクトリに遷移
$ python3 -m venv venv　　　　仮想環境の作成
$ . venv/bin/activate　　　　　　環境のアクティベート
```

無効化する場合は
```
$ deactivate
```
jwcadについて調べてみた。

「jwcad」は
スタックオーバーフロー
Stack Overflow
で,検索できませんでした。(20220522)

https://www.jwcad.net/

https://www.jwcad.net/bbs.htm

# 参考

https://qiita.com/spumoni/items/9e25e8fe5f3ecb8f90dd


# マウス操作について

https://jwcad.s-projects.net/mouse.html


左クリック　任意点指示
右クリック　読取点指示
左ダブルクリック　右ダブルクリック
両ボタンドラッグ
左ボタンドラッグ　右ボタンドラッグ
マウスホイール
キーボードと組み合わせた操作
Ubuntu 22.04にOpenJDK 11をインストール（Temurin）

# はじめに

Temurinを利用してUbuntu 22.04にOpenJDK11をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Linux \(RPM/DEB\) installer packages \| Adoptium](https://adoptium.net/installation/linux/)

## サポート

本手法で導入した場合、[Support \| Adoptium](https://adoptium.net/support) より、2024-10がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update; apt install -y wget apt-transport-https
# wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc
# echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
# apt update
# apt install temurin-11-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment Temurin-11.0.15+10 (build 11.0.15+10)
OpenJDK 64-Bit Server VM Temurin-11.0.15+10 (build 11.0.15+10, mixed mode)
```
Ubuntu 22.04にOpenJDK 8をインストール（Temurin）

# はじめに

Temurinを利用してUbuntu 22.04にOpenJDK8をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Linux \(RPM/DEB\) installer packages \| Adoptium](https://adoptium.net/installation/linux/)

## サポート

本手法で導入した場合、[Support \| Adoptium](https://adoptium.net/support) より、~~2026-05~~ → 2026-11がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update; apt install -y wget apt-transport-https
# wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc
# echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
# apt update
# apt install temurin-8-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (Temurin)(build 25.332-b09, mixed mode)
```
[Nuxt3] ページ移動前に本当に移動していいか確認するcomposable


# はじめに
[前回](https://qiita.com/Domao/items/f742be456b3ac0da52c3)からファイル投稿フォーム的なものを作っています。ページを移動する前に入力内容が消えても構わないか、一旦確認する、よくある確認ダイアログを出したいです。これまたNuxt2での例はそれなりにあったものの、Nuxt3でやってみた例が見当たらなかったのでやってみました。composableっていう機能がなんかすごく便利だなって個人的に思ってるのでcomposableでやります。

## 開発環境
- Nuxt 3.0.0-rc.1
- Vuetify 3.0.0-beta.1

## ほしいイメージ
ページ移動時にこれが出てほしい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254984/ee9917b3-bcbc-6034-aec1-c000e843b979.png)
ページリロード時にこれが出てほしい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254984/9c1372a1-97a2-2437-a113-d4a58a992a31.png)

## 結果
過程をいっぱい書いても 興味ない方も居ると思うので出来上がったものをまず置いときます

```src/composables/use-confirm-unload.ts
import {
    onBeforeRouteLeave, onBeforeRouteUpdate, NavigationGuardNext
} from 'vue-router'

const confirmText = "入力内容は破棄されます、本当に移動してもよろしいですか?"

const confirmVueRouter = (next: NavigationGuardNext) => {
    const answer = window.confirm(confirmText)
    if (answer) {
        // ページを移動したら、確認ダイアログを表示しないよう戻す
        window.removeEventListener("beforeunload", confirmBrowserRouter)
        next()
    }
}
const confirmBrowserRouter = (e: BeforeUnloadEvent) => {
    e.preventDefault()
    e.returnValue = confirmText
}

export default function () {
    // Vue-routerでのページ移動時の確認ダイアログ発火
    onBeforeRouteLeave((_to, _from, next) => {
        confirmVueRouter(next)
    })
    onBeforeRouteUpdate((_to, _from, next) => {
        confirmVueRouter(next)
    })
    // ページリロード時の確認ダイアログ発火
    if (process.client) {
        window.addEventListener("beforeunload", confirmBrowserRouter)
    }
}
```

```vue:使用例
<script setup lang="ts">
// ページ移動前に確認をしたいページでこの関数を呼ぶだけ
useConfirmUnload()
</script>
```

## 過程

### 1: Vueの普通のやり方を調べる
`window.addEventListener("beforeunload", 関数)`
で ブラウザのページ遷移前に割り込みができ

`onBeforeRouteLeave`
で vue-routerのページ遷移前に割り込みができるらしい

https://qiita.com/mimoe/items/ccd57821c3ae6b4f8495

https://blog.hirokiky.org/entry/2019/08/22/111031

### 2: Nuxt2でのやり方を調べる
既存のやり方を参考にさせて頂きました

https://www.memory-lovers.blog/entry/2020/02/19/180000

https://zenn.dev/murmurase/articles/composition-api-navigation-guard

### 3: next() 関数の型を調べる
2回書きたくなかったので 関数を引数として渡す関数を作りたく、
関数を引数に取るときの型定義ってどうするのか見てみた

https://confrage.jp/typescript-%E3%81%A7%E9%96%A2%E6%95%B0%E3%81%AE%E5%BC%95%E6%95%B0%E3%81%AB%E9%96%A2%E6%95%B0%E3%82%92%E6%B8%A1%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/

ただ、VSCodeからnextの型定義まで移動したら 型がちゃんとexportされていたので
`import { NavigationGuardNext } from 'vue-router'` で 型をそのまま使えた。

### 4: Routerをcomposable上で触る例を調べる
まだいまいちcomposableの書き方がわからないので
NuxtのDiscussionから既存の例を参考にさせていただいた

https://github.com/nuxt/framework/discussions/2082

### 5: 完成
以上でいい感じに動くのができました。
ただ、beforeUnloadで出すダイアログのメッセージは いつの間にか変更できない仕様になってたようで
自環境では e.returnValueに何かが入っていれば規定の確認ダイアログが出るという振る舞いをしました。
まぁメッセージ変えられなくとも特に問題はないのでこれで完成とします。
読んでいただきありがとうございます。

https://www.nextdoorwith.info/wp/se/imptech/html-jquery/how-to-show-beforeunload-dialog/

https://chromestatus.com/feature/5349061406228480
Ubuntu 20.04にOpenJDK 17をインストール（Temurin）

# はじめに

Temurinを利用してUbuntu 20.04にOpenJDK17をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Linux \(RPM/DEB\) installer packages \| Adoptium](https://adoptium.net/installation/linux/)

## サポート

本本手法で導入した場合、[Support \| Adoptium](https://adoptium.net/support) より、2027-10がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.4 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

# apt update; apt install -y wget apt-transport-https
# wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc
# echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
# apt update
# apt install temurin-17-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment Temurin-17.0.3+7 (build 17.0.3+7)
OpenJDK 64-Bit Server VM Temurin-17.0.3+7 (build 17.0.3+7, mixed mode, sharing)
```
PhpStormでuseStateのライブテンプレートを作成する

## 環境
・Windows 11 Pro 21H2
・PhpStorm 2022.1

## やりたいこと
多用するuseStateを素早く書きたい。
``` javascript
const [isActive, setIsActive] = useState(false);
```
これを書くのに
![Animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51562/a4d3f5b6-c0fa-6440-bd00-f60637d576c2.gif)
ライブテンプレートを使用して
usst + Tab → 変数名を打つ + Tab → 初期値を打つ → 最後に；を打つ
で終わらせたい、ということです。

## このライブテンプレートの設定

まず、ライブテンプレートについては、[公式の説明](https://www.jetbrains.com/help/idea/using-live-templates.html)を参照してください。
今回の設定で、小技になる部分があるとすれば、変数名は小文字ですが、関数名は大文字になる点です。

一つずつ設定していきます。

Ctrl+Alt+Sで設定画面を開き、エディター>ライブテンプレートに進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51562/3f2f7fae-2901-ad77-ddb3-72d5d672104b.png)

Reactの項目にも、たくさんのライブテンプレートが用意されていることがわかります。
例えば、新規にjsxファイルを作成して、rsf + Tab などはよく使います。

ここに、今回のテンプレートを追加していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51562/6d2a40a9-5b28-1417-8482-762e0c964952.png)
1. 右上の+(プラス)アイコンをクリックし、1ライブテンプレートを選択します。
1. 略称と説明を入力しておきます。略称がテンプレートのコマンドの扱いになります。
1. テンプレートテキストとして、`const [$STATE$, set$STATE2$] = useState($END$)`と入力します。この`$STATE$`が変数になり、最後の`$END$`は、テンプレートが展開された後の最終的なキャレットが置かれる位置になります。
1. 変数の編集ボタンをクリックし、下図のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51562/405e5e0d-ad69-6651-1a7f-d88c2daaa5a9.png)
これで、STATE2は初めが大文字にされ、STATEに当たる箇所で入力をした後に、STATE2に当たる箇所にキャレットが移動せずに、ENDまで移動するようになります。
1. 最後に、忘れがちですが、"定義"のリンクをクリックし、Javascriptを選択して、OKをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51562/e655bac9-4a99-6fcd-4dab-575b3851212c.png)

これで、多用するuseStateが少しだけ、楽に書けるようになりました。
usst + Tab → 変数名を打つ + Tab → 初期値を打つ
ネットワークセキュリティ

## 利用者認証
<b>コンピュータシステムを使用する際に、利用者が使用することを許可されている本人か確認すること。
<font color = blue>ユーザ認証</font>といわれている。最近は二つ以上の異なる認証を組み合わせる<font color = blue>多要素認証</font>が行われている。
知識情報・所持情報・生体情報による認証が行われている。特に二つの認証を組み合わせることを<font color = blue>2要素認証</font>といわれている。

### ワンタイムパスワード
<b>一回限りのパスワード
### バイオメトリスク認証
<b>身体的な特徴を使った認証と行動的な特徴を使った認証がある。
身体的：
指紋、静脈、虹彩など。
行動的：
署名の速度、筆圧など。
生体認証システムを導入する際、本人を誤って拒否する確率と他人を許可する確率を調整しなければいけない。

### CAPTCHA
<b>プログラムによる自動入力を排除する技術のこと。歪めたり一部を隠したりした画像から文字を判読させて入力させること。
### チャレンジレスポンス認証
<b>ネットワーク上にパスワードを流すことなく認証する方法。
利用者が入力したパスワードと、サーバから送られてきたランダムな文字列(<font color = blue>チャレンジ</font>)とを端末側でハッシュ演算し、結果(<font color = blue>レスポンス</font>)をサーバに送信して認証する。
## ファイアウォール
<b>インターネットの外部ネットワークと企業などの内部ネットワークの接続点において、通信通過の可否を判断して、外部からの不正アクセスを防止する仕組み。
### パケットフィルタリング方式
<b>ファイアウォールの仕組みの一つ。パケットヘッダで判断し、通信通過の可否を決定する方式。
## プロキシサーバ
<b>企業などの内部ネットワークのクライアントがWebサーバなどの外部サーバと通信する場合、中継役となりクライアントの代わりに外部サーバに接続するサーバ。<font color = blue>代理サーバ</font>とも呼ばれている。
## DMZ
<b>インターネットの外部ネットワークと企業などの内部ネットワークの両方から隔離された区域のこと。

## その他
<b><font color = blue>UTM</font>
<font color = blue>SIEM</font>
<font color = blue>ペネトレーションテスト</font>
<font color = blue>ファジング</font>
Ubuntu 20.04にOpenJDK 11をインストール（Temurin）

# はじめに

Temurinを利用してUbuntu 20.04にOpenJDK11をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Linux \(RPM/DEB\) installer packages \| Adoptium](https://adoptium.net/installation/linux/)

## サポート

本手法で導入した場合、[Support \| Adoptium](https://adoptium.net/support) より、2024-10がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.4 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

# apt update; apt install -y wget apt-transport-https
# wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc
# echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
# apt update
# apt install temurin-11-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment Temurin-11.0.15+10 (build 11.0.15+10)
OpenJDK 64-Bit Server VM Temurin-11.0.15+10 (build 11.0.15+10, mixed mode)
```
プログラミング初心者による、記念すべき初ポートフォリオ

ポートフォリオとして作っていたブログサイトが完成したので、少し解説してみます。
YouTubeなどに載っているブログサイトだとあまり実用性がなかったので、
実際に自分でも使えるような機能を色々と付けてみました。

# 目次

[1.ブログサイト](#1-ブログサイト)
[2.使用技術](#2-使用技術)
[3.機能一覧](#3-機能一覧)
[4.ER図](#4-ER図)
[5.工夫した点](#5-工夫した点)
[6.苦労した点](#6-苦労した点)
[7.これからの課題](#7-これからの課題)

# 1. ブログサイト

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267102/cae3a673-eb59-c228-f05e-fbc4401714b3.gif" width="60%">

完成系はこんな感じです。
ブログとしての基本的な機能は備わっています。

# 2. 使用技術

* *PHP 8.1.3*
* *Laravel Framework 8.73.2*
* *Vue.js 2.6.14*
* *MySQL 8.0.28*
* *Docker/docker-compose*

# 3. 機能一覧

* **ユーザーの新規登録・ログイン**
* **投稿・編集・削除**
* **公開・非公開設定**
* **マークダウン機能**
* **サムネイル・ファイルアップロード**
* **投稿検索**
* **カテゴリ検索**
* **月別投稿表示**
* **カテゴリランキング**
* **コメント機能**

# 4. ER図

![クラス図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267102/3773338e-3692-9a35-4c7d-1d6697fc6f8b.png)

# 5. 工夫した点

* 見出しや文字の強調など、ブログを書きやすくするための**マークダウン形式**
* 月別の投稿と投稿数を表示する**月別表示機能**
* カテゴリを使用回数順に表示する、**よく使われるカテゴリ機能**

# 6. 苦労した点

* **マークダウンエディタのファイルアップロード機能**

**TOAST UI Editor** というマークダウンエディタを使ったのですが、そこにファイルアップロード機能を追加するのに少し苦戦しました。
オプションを追加して、サムネイル画像を投稿するときと同じ処理を書き、返ってきた画像のパスがテキストエリアに表示されるようにしました。
既に出来上がってるマークダウンエディタを使ったので、後から機能を追加するのは少し苦戦しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267102/f52b38ff-57cc-2c12-133c-977b064e58ff.gif" width="55%">
**詳細はこちらの記事に書いてあります！**
[TOAST UI Editor のファイルアップロード機能](https://qiita.com/watatatayu/items/33036b3f7d458dd90b26)

* **axios通信**

こちらもマークダウンエディタ関連なのですが、**Vue** を使ったマークダウンエディタだったため、タイトルや本文などの投稿内容も全て **Vue** からコントローラに送られるようにしたのですが、そこで使った**axios通信**で少し苦戦しました。
ただ、初めて非同期通信に触れる機会だったのでとても良い経験になりました。
**こちらも別記事でちょこっと解説してます。**
 [非同期通信を勘違いしていた問題](https://qiita.com/watatatayu/items/e3c4cc3bb89a1a99d07c)

* **ブログ編集画面の分岐**

ブログ編集画面を表示する際、サムネイルがある場合と無い場合で表示方法を変えるのが少し複雑でした。

**サムネイルがある場合**
サムネイル画像とサムネイル変更ボタンを表示させ、
変更した場合はDBから画像を削除し、サムネイル新規登録ボタンを表示させる。

**サムネイルが無い場合**
サムネイル新規登録ボタンを表示させる。

という分岐を、`v-if` や `v-show`を使って実装しました。


# 7. これからの課題

これから追加してみたい機能の一つに、**サムネイル自動生成** があります。
現在は、サムネイルが無い投稿は ***No Images*** と表示された画像を自動的にサムネイルにするように設定しているのですが、それだと味気ないので、自動的にブログタイトルを画像に埋め込み、オリジナルのサムネイルを作る機能を実装できたらいいなと考えています。
【AWS】LaravelアプリをEC2デプロイ【まとめ編】

# 0. はじめに
大阪のLaravel初学者サウナーこと、kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です！
`Laravel × AWS × CircleCI`で`EC2デプロイ`する方法のまとめです。

## 0-1. 全体の流れ
> [1.CloudFormation,EC2,RDS](#1-cloudformationec2rds)
> [2.Route53](#2-route53)
> [3.ACM,ELB](#3-acmelb)
> [4.CircleCI,CodeDeploy](#4-circlecicodedeploy)
> [5.SNS,Chatbot](#5-snschatbot)
> [6.S3](#6-s3)
> [7.API](#7-api)
> [8.参考](#8-参考)
> [補足](#補足)
> [Reference](#reference)

## 0-2. 本記事の対象者
- `Laravel × AWS × CircleCI`で`EC2デプロイ`したい方

## 0-3. 事前準備
- AWSアカウント作成済み
- リージョンはアジアパシフィック(東京)ap-northeast-1
- `grfl`や`hoge`はサンプル名なので適宜変更して下さい

https://aws.amazon.com/jp/register-flow/

## 0-4. 本番環境
|ツール|バージョン|
|:--|:--|
|OS|Amazon Linux 2|
|nginx|1.12|
|PHP|7.4.28|
|Laravel|6.20.44|
|MySQL|5.7.37|
|Composer|1.10.26|
|Node.js|13.14.0|

## 0-5. AWS構成図
![aws](https://user-images.githubusercontent.com/68370181/178103075-eec5508a-4d29-409c-84f4-3f687fa9cd5d.png)


# 1. CloudFormation,EC2,RDS
- 【AWS】LaravelアプリをEC2デプロイ①【CloudFormation / EC2 / RDS編】

https://qiita.com/kazumakishimoto/items/0859a5a365b226c1b43a

# 2. Route53
- 【AWS】LaravelアプリをEC2デプロイ②【Route53編】

https://qiita.com/kazumakishimoto/items/825f8c5f94d0160b2364

# 3. ACM,ELB
- 【AWS】LaravelアプリをEC2デプロイ③【ACM / ELB編】

https://qiita.com/kazumakishimoto/items/bdb07c6d4881384f7063

# 4. CircleCI,CodeDeploy
- 【AWS】LaravelアプリをEC2デプロイ④【CircleCI / CodeDeploy編】

https://qiita.com/kazumakishimoto/items/09b84473c44c5899ee57

# 5. SNS,Chatbot
- 【AWS】LaravelアプリをEC2デプロイ⑤【SNS / Chatbot編】

https://qiita.com/kazumakishimoto/items/b38c34a1275c4e9cd373

# 6. S3
- 【AWS】LaravelアプリをEC2デプロイ⑥【S3編】

https://qiita.com/kazumakishimoto/items/d08894711bf59a4e21df

# 7. API
- 【AWS】LaravelアプリをEC2デプロイ⑦【API編】

https://qiita.com/kazumakishimoto/items/fd4afc02f9490ddb89e5

# 8. 参考
- 【AWS】お役立ちリンク集【随時更新】

https://qiita.com/kazumakishimoto/items/02e53cdf7b9887252040

# 補足
## 開発環境（FW/ツールのバージョンなど）
|ツール|バージョン|
|:--|:--|
|Vue.js|2.6.14|
|jQuery|3.4.1|
|PHP|7.4.1|
|Laravel|6.20.43|
|MySQL|5.7.36|
|Nginx|1.18.0|
|Composer|2.0.14|
|npm|6.14.6|
|Git|2.33.1|
|Docker|20.10.11|
|docker-compose|v2.2.1|
|PHPUnit|8.0|
|CircleCI|2.1|
|heroku|7.59.4|
|MacBook Air|M1,2020|
|macOS|Monterey 12.3|
|Homebrew|3.3.8|

## ディレクトリ構造
```
【ルートディレクトリ】
├─ .circleci
│   └─ config.yml
├─ aws / CloudFormation
│   └─ ec2.yml
├─ docker
│   └─ mysql
│   └─ nginx
│   └─ php
│   └─ phpmyadmin
├─ src
│   └─ 【Laravelのパッケージ】
└─ docker-compose.yml
```

# Reference
https://www.techpit.jp/courses/11

https://www.techpit.jp/courses/78

https://qiita.com/yuuichimizuta/items/899251a9cb2dd61dabb0

https://qiita.com/yyy752/items/b9d7674fc349f669e801

https://qiita.com/nasuB7373/items/0e507abad2017976c407
Ubuntu 20.04にOpenJDK 8をインストール（Temurin）

# はじめに

Temurinを利用してUbuntu 20.04にOpenJDK8をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Linux \(RPM/DEB\) installer packages \| Adoptium](https://adoptium.net/installation/linux/)

## サポート

本手法で導入した場合、[Support \| Adoptium](https://adoptium.net/support) より、~~2026-05~~ → 2026-11がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.4 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

# apt update; apt install -y wget apt-transport-https
# wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc
# echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
# apt update
# apt install temurin-8-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (Temurin)(build 25.332-b09, mixed mode)
```
【Next.js】Failed to load next.config.jsのエラーが出たら見るべき場所

## エラー内容

```js
error - Failed to load next.config.js, see more info here https://nextjs.org/docs/messages/next-config-error
...
export default nextConfig;
^^^^^^
```

Next.jsで開発をしているときに
`yarn dev` or `npm run dev`でローカルサーバーを立ち上げたときに上記のエラーが発生した場合

## 解決方法
エラーの内容の通りnext.config.jsに関するエラー。
【原因】
```js:next.config.js
const nextConfig = {
//...内容は略
};

export default nextConfig;
```
1. 上記のようにECMASCRIPTの記述の場合はファイルの拡張子を`js`から`mjs`に変更することで改善できる。

【公式ドキュメント参考】

https://nextjs-ja-translation-docs.vercel.app/docs/api-reference/next.config.js/introduction

2. 拡張子はそのままにして`module.exports　= { ... `で記述することで改善できる
```js:next.config.js
module.exports = {
//...内容は略
};
```

初期設定から基本的に触らなければ起きないエラーだと思いますが日本語の記事など少なく感じたので、困ったら参考になれば幸いです。
【Todo整理】S3にCsvUpload > Lambda起動 > Upしたファイル取得 > RDSへ登録

# 初めに
※雑なTodo整理・所感まとめです。詳細は各種公式サイトをご覧下さいm(_ _)m

Uploadしたcsvの情報を非同期な感じでデータベースに登録したくなったので、AWSの勉強がてら色々設定してみました。

## インフラ準備
* いずれterraform化したい
* 所感、結構むずい。（主にVPN⇄RDS周りで）
    * 自分がAzure出身なので、慣れてないのもある
    * 恥ずかしながらCIDRってなんやっけ...??みたいになった
    * インフラ準備だけで1.5Dayぐらいかかった

S3,Lambda以外は下記ブログが非常に参考になりました、ありがとうございます！

https://photo-tea.com/p/aws-ec2-to-rds-connection/

### VPC,EC2作成
登場人物は`VPC`,`Subnet`,`ルートテーブル`,`インターネットゲートウェイ`,`ネットワークゲートACL`,`セキュリティグループ`,`EC2`

（ちゃんとした構成図は書く気がないので省略、すみません）
以下概要

* PublicSubnetにおいたEC2を踏み台にしてPrivateSubnetに置いたRDSに接続する構成
    * ローカルのClientソフト（DBeaver）からsshTunnelを通じて中身を見られるようになっています。
    * PublicSubnet1つ、PrivateSubnet2つ構成です（RDS生成時の都合でPrivateSubnet2つ） 

DBeaverによるSSHTunnel参考

https://dev.classmethod.jp/articles/ssh-tunnel-using-dbeaver/

### RDS作成
登場人物は`DBインスタンス`,`DBサブネットグループ`
MySQLインスタンスを作りました。

### S3作成
登場人物は`バケット`（ぽちぽちして作るだけ）

### Lambda作成
登場人物は`関数`,`トリガー` （ぽちぽちして作るだけ）

### Lambda関数をコーディング
ワイは本来JVM系言語マンなので、JavaとかKotlinにする...?コンテナ化する...?と若干悩みましたが、最も使われてるとのことなのでpythonにしました。

ちょっと考えないといけないこと多そうだし...

https://aws.amazon.com/jp/builders-flash/202110/jvm-lambda-function/?awsf.filter-name=*all

この辺難しいですよね...実務で保守する人のスキル感もによって左右されそう。

書いたコードは下記です。

https://github.com/kannna5296/lambda-s3-to-RDS/blob/toqiita1/app.py


## 残Todo

* 「csvのデータがテーブルに存在するかチェック」みたいなのを入れたい。
    * 今pymysqlだけで書いてるけど、都度SQL書くのめんどいのでSQLAlchemyみたいなORM入れたい

https://twitter.com/hiro_cashless/status/1528247034741809152?s=20&t=LWYZ-5gIEMzPsFyxJYHs8w

* リアルタイム処理(APIとか）で登録されるデータとの整合性を考慮した上でデータ登録した時に
* エラーハンドリング（csvの1レコードで処理失敗した時どうすんねん、など）

## 作業時に助かったツール

AWSのサブネット登録時、「既存のCIDRと被ってますよw」エラーに苦しめられました。
「じゃあどのIPなら被らないんだよ💢💢」となったのですが、下記サイトを使いながら被らないCIDRを設定することができました。（計算雑魚なので...）

https://www.softel.co.jp/labs/tools/network/
Alma Linux 8にOpenJDK 17をインストール（Temurin）

# はじめに

Temurinを利用してAlma Linux 8にOpenJDK17をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Linux \(RPM/DEB\) installer packages \| Adoptium](https://adoptium.net/installation/linux/)

## サポート

本本手法で導入した場合、[Support \| Adoptium](https://adoptium.net/support) より、2027-10がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/redhat-release
AlmaLinux release 8.6 (Sky Tiger)

# cat <<EOF > /etc/yum.repos.d/adoptium.repo
[Adoptium]
name=Adoptium
baseurl=https://packages.adoptium.net/artifactory/rpm/centos/\$releasever/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.adoptium.net/artifactory/api/gpg/key/public
EOF
# yum install temurin-17-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment Temurin-17.0.3+7 (build 17.0.3+7)
OpenJDK 64-Bit Server VM Temurin-17.0.3+7 (build 17.0.3+7, mixed mode, sharing)
```
Alma Linux 8にOpenJDK 11をインストール（Temurin）

# はじめに

Temurinを利用してAlma Linux 8にOpenJDK11をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Linux \(RPM/DEB\) installer packages \| Adoptium](https://adoptium.net/installation/linux/)

## サポート

本手法で導入した場合、[Support \| Adoptium](https://adoptium.net/support) より、2024-10がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/redhat-release
AlmaLinux release 8.6 (Sky Tiger)

# cat <<EOF > /etc/yum.repos.d/adoptium.repo
[Adoptium]
name=Adoptium
baseurl=https://packages.adoptium.net/artifactory/rpm/centos/\$releasever/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.adoptium.net/artifactory/api/gpg/key/public
EOF
# yum install temurin-11-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment Temurin-11.0.15+10 (build 11.0.15+10)
OpenJDK 64-Bit Server VM Temurin-11.0.15+10 (build 11.0.15+10, mixed mode)
```
Alma Linux 8にOpenJDK 8をインストール（Temurin）

# はじめに

Temurinを利用してAlma Linux 8にOpenJDK8をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Linux \(RPM/DEB\) installer packages \| Adoptium](https://adoptium.net/installation/linux/)

## サポート

本手法で導入した場合、[Support \| Adoptium](https://adoptium.net/support) より、~~2026-05~~ → 2026-11がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/redhat-release
AlmaLinux release 8.6 (Sky Tiger)

# cat <<EOF > /etc/yum.repos.d/adoptium.repo
[Adoptium]
name=Adoptium
baseurl=https://packages.adoptium.net/artifactory/rpm/centos/\$releasever/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.adoptium.net/artifactory/api/gpg/key/public
EOF
# yum install temurin-8-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (Temurin)(build 25.332-b09, mixed mode)
```