OmniAICreator/Qiita-1.07M huggingface dataset:
さくらのクラウドのコンテナレジストリ(Lab)からリポジトリ情報を取得する

# 前提

- さくらのクラウドのコンテナレジストリ(Lab)を持っている
- 「All」権限を持ったユーザーを持っている

# curl編

https://qiita.com/zknzfz/items/61909e9a577e1b2a731b

を参考にさせてもらいました

- Www-Authenticateを確認する

```
# curl -k -IL https://{コンテナレジストリのホスト名}/v2/_catalog
HTTP/2 401 
content-type: application/json; charset=utf-8
docker-distribution-api-version: registry/2.0
www-authenticate: Bearer realm="https://auth.sakuracr.jp/token/",service="{コンテナレジストリのホスト名}",scope="registry:catalog:*"
content-length: 145
date: Sun, 29 May 2022 03:44:09 GMT
```

- www-authenticateで取得したservice,scopeを使用して、Tokenを生成する

```
# curl -u'username':'password' 'https://auth.sakuracr.jp/token/?service={コンテナレジストリのホスト名}&scope=registry:catalog:*'
{"token": "tokenが出てくる"}
```

- Tokenを使用して、リポジトリのリストを取得する
```
curl -H "Authorization: Bearer {出てきたtoken}" https://{コンテナレジストリのホスト名}/v2/_catalog
{"repositories":["python"]}
```

# Python3編
- 必要なパッケージをインストール
```
pip install www-authenticate requests
```

- コード
```sample.py
import requests
from urllib.parse import urlencode
import www_authenticate


user_name = 'username'
user_pass = 'password'
registry_host = 'コンテナレジストリのホスト名'

catalog_url ='https://' + str(registry_host) + '/v2/_catalog'

# Www-Authenticateを確認する
response_unauthorized = requests.get(catalog_url)

# www-authenticateで取得したservice,scopeを使用して、Tokenを生成する
authenticate = www_authenticate.parse(response_unauthorized.headers['WWW-Authenticate'])

bearer_info = authenticate['bearer']
base_url = bearer_info['realm']
query = {
    'service': bearer_info['service'],
    'scope': bearer_info['scope']
    }
token_url_request = '%s?%s' % (base_url, urlencode(query))
token_url_response = requests.get(token_url_request, auth=(user_name, user_pass))
response_token = token_url_response.json()['token']

# Tokenを使用して、リポジトリのリストを取得する
headers = {
    'Authorization': f'Bearer {response_token}',
    }
response = requests.get(catalog_url, headers=headers).json()

print(response)
```

- Yatta!!

```
# python sample.py 
{'repositories': ['python']}
```

# TIPS
imageタグの一覧とか取得したい！って場合は
「/v2/_catalog」→「/v2/"image_name"/tags/list」とすると取得できる
詳細：[HTTP API V2](https://docs.docker.com/registry/spec/api/)

# 参考
- [docker_authを使ってプライベートレジストリの権限管理をする](https://qiita.com/zknzfz/items/61909e9a577e1b2a731b)
- [HTTP API V2](https://docs.docker.com/registry/spec/api/)
EDA解析後所定のフォルダに図を保存する


前回の記事では
クラス変数を利用し csvデータを読み込む 
outputフォルダを作成する

方法でoutputフォルダを作成しました

https://qiita.com/TaichiEndoh/items/b4ff1b697b5b4ec5e532

前回の記事の続きです
outputにpre_dataフォルダ作成 makedirs で深い階層まで作成します

```
#outputにpre_dataフォルダ作成 makedirs で深い階層まで作成できる
def make_pre_data():
    data_dir_out="./output/pre_data"
    if not os.path.exists(data_dir_out):
        os.makedirs(data_dir_out)
        print("make_pre_data_new")
    return data_dir_out
data_dir_pre_out=make_pre_data()
```

EDA解析結果を入れれる　フォルダを作成できました

EDA解析も実施していこうと思います
EDA_Analysis解析を実施する関数を作成しました

```
def EDA_Analysis(indexNames):
    #outputにEDA_dataフォルダ作成 makedirs で深い階層まで作成できる
    data_dir_out="./output/EDA_data"
    if not os.path.exists(data_dir_out):
        os.makedirs(data_dir_out)
        print("make_new")
    #EDA解析
    data=indexNames
    # pandas "D_h"のカラムをグループ化
    class_group = data.groupby("D_h")
    #　カラムが全表示できるようにオプションを指定（notebook）
    pd.options.display.max_columns = None
    #　全クラスの統計量表示
    class_group.describe()
    data.hist(figsize=(20,10))
    #グラフが重ならないようにする
    plt.tight_layout()
    class_group = data.groupby("D_time")
    class_group["target"].hist(alpha=0.7)
    #data_dirフォルダに図の保存
    plt.savefig(data_dir_out+"/class_group.png")
    plt.show()

    # 全てを表示させる
    plt.figure(figsize=(20,10))
    for n, name in enumerate(data.columns.drop("D_time")):
        plt.subplot(4,4,n+1)
        class_group[name].hist(alpha=0.7)
        plt.title(name,fontsize=13,x=0, y=0)
        plt.legend([3,3.5,4,4.5,5])
        #data_dirフォルダに図の保存
    plt.savefig(data_dir_out+"/D_time_hist"+"all"+".png")
    #図をリセット
    plt.figure()

    class_group = data.groupby("D_time")
    class_group["target"].hist(alpha=0.7)
    plt.legend([3,3.5,4,4.5,5])
    #data_dirフォルダに図の保存
    plt.savefig(data_dir_out+"/D_time_hist.png")
    plt.show()
    #図をリセット
    plt.figure()

    df_corr = df_corr = data.corr()
    print(df_corr)
    # ヒートマップを出力
    sns.heatmap(df_corr)
    data2=data.dropna()
    #data_dirフォルダに図の保存
    plt.savefig(data_dir_out+"/heatmap.png")
    plt.show()
EDA_Analysis(merge_data)
```
Specification of Basic Software Mode Manager, No.313, AUTOSAR R21-11(253) CP

Specification of Basic Software Mode Manager, No.313, 2021-11

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

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

AUTOSAR 21-11,160文書読んだ。2022年5月中に全部読み。

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
|BswM |BSW Mode Manager
|BSWMD |Basic Software Module Description
|CDD |Complex Driver
|Dem |Diagnostic Event Manager
|Det |Default Error Tracer
|ECU| Electronic Control Unit
|RTE|Real Time Environment
|SWC / SW-C |Software Component
|SWCD|Software Component Description
## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral
[2] Guide to Mode Management
AUTOSAR_EXP_ModeManagementGuide
[3] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral
[4] Requirements on Mode Management
AUTOSAR_SRS_ModeManagement
[5] Specification of Basic Software Mode Manager
AUTOSAR_SWS_BSWModeManager
[6] Specification of RTE Software
AUTOSAR_SWS_RTE
素因数分解「2022年山梨大 教1 (1)」をsympy でやってみた。

等比数列を使っていません。素因数分解で対応しました。

オリジナル

https://kamelink.com/blog/2022/05/29/10-1-22-yamanasidai-kyou-1-1/

＞2以外の素因数をもたないもの
2の累乗という意味ですか？

# sympyで

https://live.sympy.org/

以下のプログラムを上のサイトに貼り付けて、Evaluateをクリックして下さい。

```python
from sympy import *
my_sum=0
for i in range(6,2022):
    if i % 3 ==0 :
        my_dict = factorint(i // 3)
        if len(my_dict) == 1 and  next(iter(my_dict)) == 2:
           my_sum=my_sum+i
print(my_sum)
```
3066

# sympyで(修正版)
 3 の倍数すべてを出力しました。

```python
from sympy import *
my_sum=0
for i in range(6,2022):
    if i % 3 ==0 :
        my_dict = factorint(i // 3)
        if len(my_dict) == 1 and  next(iter(my_dict)) == 2:
           print("#",i,my_dict)
           my_sum=my_sum+i
print("#",my_sum)
# 6 {2: 1}
# 12 {2: 2}
# 24 {2: 3}
# 48 {2: 4}
# 96 {2: 5}
# 192 {2: 6}
# 384 {2: 7}
# 768 {2: 8}
# 1536 {2: 9}
# 3066
```
Vue3+Springboot RestApiの構築

# Ⅰ. 前提知識
１．SPAと3大JavaScriptフレームワーク（React、Vue、AnguarJs）
２．JAVA、Springboot、OpenAPI
３．Docker、その他

# Ⅱ. 技術要素
１．フロントエンド
Vue.js3、BootStrap、TypeScript（必須ではない）
２．バックエンド					
Springboot、MyBatis
３．その他				
DB：mysql、サーバ：Docker

# Ⅲ．SPAのフレームワーク
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697792/a68fcd26-31cb-f130-940f-5657bcb4bbf1.png)

# Ⅳ．責務配置
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697792/9fabb0dc-fd4f-007f-ff76-b1c3ca193787.png)


# Ⅴ. アーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697792/b6e97de1-e659-1644-026b-07c840a0faec.png)


# Ⅵ. 実装手順（摘要）
１．Rest API部分
①. Spring Boot DevTools
②. Lombok
③. Validation
④. MyBatis Framework
⑤. MySQL Driver
⑥. Spring Web
⑦. Rest Repositories

２. Vue3部分
①. Vue3 CLI
②. axios (apiを呼び出すため）

# Ⅶ. ディレクトリ構成

１．Rest　Api部分
Sample/
　　controller/
 　　　　XXXController.java 　※コントローラー
　　mapper/
　　　　XXXMapper.java 　※マッパー
　　model/
　　　　XXX.java 　※モデル
　　service
　　　　XXXService.java  　※サービス


src/main/resources/　※MyBatis仕様
　　sample/
　　　　mapper/
　　　　　XXXMapper.xml	 　※SqlXML

２. Vue3部分
src/
　assest/css/
　　bootstrap.min.css　※CSSファイル
　components/
　　MenuList.vue 　※コンポーネント
　router/
　　index.js 　※ルーティング
　store/
　　index.js 　※Vuex
　views/
　　XXX.vue ※ページ作成
App.vue　※ホームページ

# Ⅷ. 課題と展望
１．課題
フロントエンドとバックエンドの仕様連携が一定程度の難度がある

２．展望
システムを高度的なコンポネント化することが期待でき

# Ⅸ. 参考文献
１．Spring Boot 2 応用: REST x Swagger UI、MyBatis から AWS へのデプロイまで｜原田 けいと, 竹田 甘地, Robert Segawa
２．Vue.js3超入門｜掌田津耶乃
TSQLScriptDomParserでのSQLからのテーブル列挙のためのxpathまとめ

# [TSQLScriptDomParser](https://github.com/GCer-Hidenori/TSQLScriptDomParser)でのSQLからのテーブル列挙のためのxpathまとめ

|句|xpath|
|-|-|
|selectのfrom|//node[@class='FromClause']/children[@type='TableReferences']/node[@class='NamedTableReference']/children[@type='SchemaObject']/node[@class='SchemaObjectName']|
|selectのjoin|//node[@class='QualifiedJoin']/children[@type='FirstTableReference' or @type='SecondTableReference']/node[@class='NamedTableReference']/children[@type='SchemaObject']/node[@class='SchemaObjectName']|
|insert|//node[@class='InsertSpecification']/children[@type='Target']/node[@class='NamedTableReference']/children[@type='SchemaObject']/node[@class='SchemaObjectName']|
|update|//node[@class='UpdateSpecification']/children[@type='Target']/node[@class='NamedTableReference']/children[@type='SchemaObject']/node[@class='SchemaObjectName']|
|delete|//node[@class='DeleteSpecification']/children[@type='Target']/node[@class='NamedTableReference']/children[@type='SchemaObject']/node[@class='SchemaObjectName']|
|merge|//node[@class='MergeSpecification']/children[@type='Target']/node[@class='NamedTableReference']/children[@type='SchemaObject']/node[@class='SchemaObjectName']|
|truncate|//node[@class='TruncateTableStatement']/children[@type='TableName']/node[@class='SchemaObjectName']|
|select into|//node[@class='SelectStatement']/children[@type='Into']/node[@class='SchemaObjectName']|
|bulk insert|//node[@class='BulkInsertStatement']/children[@type='To']/node[@class='SchemaObjectName']|


- 出力の解釈 
 
|項目|値|
|:--|:--|
|サーバ名|/node/children[@type='ServerIdentifier']/node のvalue属性|
|データベース名|/node/children[@type='DatabaseIdentifier']/node のvalue属性|
|スキーマ名|/node/children[@type='SchemaIdentifier']/node のvalue属性|
|テーブル名|/node/children[@type='BaseIdentifier']/node のvalue属性|
scipy.stats: 分割表の検定 chi2_contingency

# scipy.stats: 分割表の検定 chi2_contingency

2 つのカテゴリー変数のクロス集計表に基づいて2 変数が独立であるかどうかの検定（いわゆる $\chi^2$ 検定）を行う。

帰無仮説は $H_0$: 2 変数は独立である。

対立仮説は $H_1$: 2 変数は独立ではない。

`chi2_contingency(observed, correction=True, lambda_=None)`


```python
from scipy.stats import chi2_contingency
```

## 1.　2 × 2 分割表の場合

連続性の補正はデフォルトである。 `correction=True`

戻り値は，検定統計量（$\chi^2$ 値），$p$ 値，自由度，期待値行列である。


```python
tbl22 = [[12, 4], [6, 15]]
chi2_contingency(tbl22)
```




    (6.087538725285434,
     0.013613860284292038,
     1,
     array([[ 7.78378378,  8.21621622],
            [10.21621622, 10.78378378]]))



連続性の補正をしない場合には `correction=False` を指定する。


```python
chi2_contingency(tbl22, correction=False)
```




    (7.835839598997492,
     0.0051220356982058955,
     1,
     array([[ 7.78378378,  8.21621622],
            [10.21621622, 10.78378378]]))



## 2.　2 × 2 より大きい分割表の場合


```python
import numpy as np
tbl = np.array([[7, 9, 15], [3, 8, 4], [19, 11, 9]])
chi2_contingency(tbl)
```




    (10.401761012439543,
     0.03417745006801264,
     4,
     array([[10.57647059, 10.21176471, 10.21176471],
            [ 5.11764706,  4.94117647,  4.94117647],
            [13.30588235, 12.84705882, 12.84705882]]))



## 3.　パワーダイバージェンス検定

デフォルトでは `lambda_=None` で，通常の $\chi^2$ 検定が行われる（`lambda_=1` を指定するのと同じ）。

`lambda_` として指定できるのは以下の通り（文字列あるいは数値で指定できる）。

* `"pearson"` (value 1)
    ピアソンの $\chi^2$ 検定統計量を求める。
* `"log-likelihood"` (value 0)
    対数尤度比を求める。別名で $G$ 検定 または $G^2$ 検定と呼ばれる_.
* `"freeman-tukey"` (value -1/2)
    Freeman-Tukey 検定統計量を求める。
* `"mod-log-likelihood"` (value -1)
    修正対数尤度比を求める。
* `"neyman"` (value -2)
   ネイマンの検定統計量を求める。
* `"cressie-read"` (value 2/3)
    Cressie らの提唱した統計量を求める。

### 3.1.　ピアソンの χ² 検定


```python
chi2_contingency(tbl, lambda_=1)
```




    (10.401761012439543,
     0.03417745006801264,
     4,
     array([[10.57647059, 10.21176471, 10.21176471],
            [ 5.11764706,  4.94117647,  4.94117647],
            [13.30588235, 12.84705882, 12.84705882]]))



### 3.2. 対数尤度比検定 G² 検定


```python
chi2_contingency(tbl, lambda_=0)
```




    (10.013932616936309,
     0.04019364174846649,
     4,
     array([[10.57647059, 10.21176471, 10.21176471],
            [ 5.11764706,  4.94117647,  4.94117647],
            [13.30588235, 12.84705882, 12.84705882]]))



パワーダイバージェンス検定を行う `power_divergence()` 関数でも行えるが，呼び出しが面倒である。

`power_divergence(f_obs, f_exp=None, ddof=0, axis=0, lambda_=None)`


```python
from scipy.stats import power_divergence
from scipy.stats.contingency import expected_freq
f_exp = expected_freq(tbl)
# ddof = (len(tbl)-1) * (len(tbl[0])-1) # tbl がリストの場合
ddof = np.prod(np.array(tbl.shape)-1)
power_divergence(tbl, f_exp=f_exp, ddof=ddof, axis=None, lambda_=0)
```




    Power_divergenceResult(statistic=10.013932616936309, pvalue=0.04019364174846649)
Specification of DIO Driver, No.20, AUTOSAR R21-11(251) CP

Specification of DIO Driver, No.20, 2021-11

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

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

AUTOSAR 21-11,160文書読んだ。2022年5月中に全部読み。

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|
|:--|:--|
|DIO channel| Represents a single general-purpose digital input/output pin
|DIO port| Represents several DIO channels that are grouped by hardware (typically controlled by one hardware register). Example: Port A (8 bit) of Freescale HC08
|DIO channel group| Represents several adjoining DIO channels represented by a logical group. A DIO channel group shall belong to one DIO port. Example: Port pins 2..6 of an 8 bit port addressing a multiplexer
|Physical Level (Input)| Two states possible: LOW/HIGH. A bit value '0' represents a LOW, a bit value '1' represents a HIGH.
|Physical Level(Output)|Two states possible: LOW/HIGH. A bit value '0' represents a LOW, a bit value '1' represents a HIGH.
|LSB |Least Significant Bit
|MSB| Most Significant Bit
|DIO |Digital Input Output
|ID |Identifier
|ADC |Analog to Digital Converter
|SPI |Serial Peripheral Interface
|PWM| Pulse Width Modulation
|ICU| Input Capture Unit
|DET| Default Error Tracer
|DEM| Diagnostic Event Manager
## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[2] List of Basic Software Modules
AUTOSAR_TR_BSWModuleList.pdf
[3] General Requirements on SPAL
AUTOSAR_SRS_SPALGeneral.pdf
[4] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral.pdf
[5] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration.pdf
[5] Specification of PORT Driver,
AUTOSAR_SWS_PortDriver.pdf
[6] Specification of Standard Types,
AUTOSAR_SWS_StandardTypes.pdf
[6] AUTOSAR Basic Software Module Description Template,
AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
[7] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
macOSにRustをインストールしてHellow Worldする

## 概要

macOSにRustをインストールしてHello Worldを実施するまでの作業記録です。


## インストール

Rustのページには `Using rustup (Recommended)` とあり、
curlでスクリプトをダウンロードしてshで実行する方法が載っています。
https://www.rust-lang.org/tools/install

brewも用意されているようだったので、今回はこちらで実施します。
https://formulae.brew.sh/formula/rustup-init

```console
% brew install rustup-init 
```

次に `rustup-init` コマンドを実行します。
```console
% rustup-init                                                                                                                                                    

...

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1 # デフォルト設定でインストール

...

To configure your current shell, run:
source $HOME/.cargo/env
```

指示に従って、シェルのinitファイルに追加
```zsh
# .zlogin

source $HOME/.cargo/env
```

rustupがインストールされました。

```console
% rustup -v
rustup 1.24.3 (2021-05-31)
The Rust toolchain installer

...

% which rustup
/Users/username/.cargo/bin/rustup
```

また、コンパイラのrustc、パッケージマネージャのcargo、もインストールされました。

```
% rustc --version
rustc 1.61.0 (fe5b13d68 2022-05-18)

% cargo --version
cargo 1.61.0 (a028ae42f 2022-04-29)

% which rustc
/Users/username/.cargo/bin/rustc

% which cargo                                                                                                                                                    
/Users/username/.cargo/bin/cargo
```


## Hello World!

プロジェクトの初期化
```console
% cd workdir
% cargo new hello_world
     Created binary (application) `hello_world` package
```

次のようなRustプログラム(`src/main.rs`)が生成されています。
```rust
fn main() {
    println!("Hello, world!");
}
```

実行してみます。
```console
% cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/hello_world`
Hello, world!
```

無事に `Hello, world!` が表示されました。
いらんiOSシミュレータを削除したらMACの空き容量が増えた

# はじめに

家でMacBook Proをつかっています。ストレージはSSD 256GBです。
いろんなフレームワークにちょっかいを出して遊んでいるのですが、空き容量がなくなってきて度々警告が出ていました。空き容量は常時だいたい3GB〜10GB。

今回は空き容量20GBくらいから53GBに増やすことができたので、手順を記録しておきます。

作業後の空き容量。
![ScreenShot 2022-05-29 16.19.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342629/15a5e5a7-30f4-c590-2696-8db016cc6900.png)

# 使っていないiOSシミュレータランタイムを削除する

`/Library/Developer/CoreSimulator/Profiles/Runtimes`にライタイムがあるので、Finderから削除します。

画像はいらないランタイム削除後のフォルダ。
![ScreenShot 2022-05-29 16.16.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342629/453b1fb6-9b81-a1ba-3134-de65af3c8cf2.png)

ちなみに、`~/Library`と`/Library/`は違う場所なので気をつけてください。  
私は間違ってました（汗

# デバイスごとの実行イメージを削除する

実行イメージの一覧は以下のコマンドで確認できます。
```zsh
xcrun simctl list devices
``` 
ランタイムがないシミュレータデバイスには「Unavailable」と表示されます。このデバイスを一括で削除するには以下のコマンドを投入します。

```zsh
xcrun simctl delete unavailable
```

# おわりに

アプリのインストールやバージョンアップのたびに「空き容量がないので続行できません」と言われて、ストレージの管理画面から削除しても構わないファイルを削除してなんとか空き容量を増やして行っていました。

Xcodeのアップデートなんかは、Xcodeをアンインストールしてからダウンロード・インストールを行なっていました。  
これが普通？Xcodeのインストーラや本体のサイズでかすぎじゃない？

Macの再インストールしないとダメかなぁと考えていましたが、これでしばらく様子見でいけそうです。
Specification of Port Driver, No.40, AUTOSAR R21-11(250) CP

Specification of Port Driver, No.40, 2021-11

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

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

AUTOSAR 21-11,160文書読んだ。2022年5月中に全部読み。

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|
|:--|:--|
|DEM |Diagnostic Event Manager
|DET |Default Error Tracer
|MCU| MicroController Unit
|Port Pin |Represents a single configurable input or output pin on an MCU device.
|Port |Represents a whole configurable port on an MCU device.
|Physical Level(Input)|Two states are possible: LOW/HIGH
|Physical Level(Output)|Two states are possible: LOW/HIGH
## 英日
日本語は仮訳

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 Default Error Tracer,
AUTOSAR_SWS_DefaultErrorTracer.pdf
[5] Specification of ECU Configuration,
AUTOSAR_TPS_ECUConfiguration.pdf
[6] Specification of Diagnostic Event Manager,
AUTOSAR_SWS_DiagnosticEventManager.pdf
[7] Specification of ECU State Manager,
AUTOSAR_SWS_ECUStateManager.pdf
[8] General Requirements on SPAL,
AUTOSAR_SRS_SPALGeneral.pdf
[9] Requirements on PORT driver,
AUTOSAR_SRS_PORTDriver.pdf
Specification of Port Driver
AUTOSAR CP R21-11
11 of 43 Document ID 40: AUTOSAR_SWS_PortDriver
[10] Specification of Standard Types,
AUTOSAR_SWS_StandardTypes.pdf
[11] Basic Software Module Description Template,
AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
[12] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
[13] EC 7498-1 The Basic Model, IEC Norm, 1994
【Python】sin波を作成し、wave形式で出力する

音声処理をするときに、基準となる音声データが欲しくなります。

自分の場合、"ラ"の音に該当する440 Hzの音を作成して、音声データを比較をすることが多いです。

その音を周波数領域などで可視化するだけでなく、耳で聞くと、体感しながら音声処理が可能になります。

今回は、Pythonで440 Hzの音をデータ配列上で作成するだけでなく、waveファイルを作成してみます。

実行環境は次の通りです。
```
Python 3.8.1
Ubuntu 20.04.4 LTS
```

# sin波のデータ配列を作成
今回は上記でも書いたように"ラ"の基本周波数となる$ f$ = 440 Hzの音を1秒間作成します。
振幅を$A$、サンプリングレートを$f_o$、サンプルデータ番号を$n = 1,2,...,N$とすると、sin波の数列は、
```math
A\sin\left(\frac{2\pi f}{f_o}n\right)
```
で与えられます。

プログラムでは次のようにしてデータ配列を作成します。
```python
import numpy as np
import wave 
import struct

A = 1 #振幅 
fs = 44100 #サンプリングレート 
f0 = 440 #基本周波数 
sec = 1 #再生時間
nframe = np.arange(0, fs*sec) 
sin_wave = A*np.sin(nframe*2*np.pi*f0/fs) #sin波を生成 
sin_wave = np.array(sin_wave * (2**15-1)).astype(np.int16) #16bit符号付き整数に変換
```

インポートしている、wave, structのモジュールは次のwavファイルを作成するのに扱います。

再生時間は、サンプリングレート×時間で求められます。その値を最大値として、np.arangeでデータ番号の配列を作成します。

今回は16bit符号付き整数型でwaveファイルを作成するので、-1から1まで正規化されているsin波に2^15-1を掛けます。その後に、型をint16に変換します。

# waveファイルを作成する
今回のwaveファイル名は"440Hz.wav"とします。

プログラムは次の通りです。
```python
wave_fname = "440Hz.wav"

binary_sin_wave = struct.pack("h"*len(nframe), *sin_wave)
wave_write = wave.Wave_write(wave_fname) 
params = (1, 2, fs, len(nframe), 'NONE', 'not compressed') 
```
使うのは、組込みwaveモジュールと、バイナリを取り扱うことができるstrcutモジュールです。

初めての場合、バイナリの作成に苦労すると思います。

解説すると次の通りです。
・sin波のデータ配列をバイナリに変換する。
・今回は16bit符号付き整数型なので、struct.pack()の第1引数を"h"とする。また、データサンプルの数だけこの"h"の文字列の引数が必要なため、生成する配列の長さの分だけかけて文字列を生成する。
・第2引数以降は、sin波の配列をアンパックする。

次に、ファイル名を指定し、Wave_writeオブジェクトを作成します。
```python
wave_write.setparams(params) 
wave_write.writeframes(binary_sin_wave) 
wave_write.close()
```

waveファイルを作成するために、ファイルパラメータを指定する必要があります。今回は次の通りです。
```
チャネル数：モノラル
1サンプルあたりのバイト数：2 byte
サンプリングレート：44100 Hz
サンプルサイズ：44100
圧縮形式：NONE #NONEしか取り扱いなし。
```

このファイルパラメータをsetparams()で設定します。

上記で作成したsin波のバイナリデータをwriteframes()で書き込んで作成されました。
最後にclose()してwaveファイルを閉じます。

こうして、440 Hzが収録されたwaveファイルの完成しました。Windows標準で再生が可能です。


# 周波数領域で440Hzのみが検出されるか確認する
自作した440Hzのwaveファイルだが、本当に440Hzの成分のみになっているか確認してみましょう。

次のコードで確認します。今回は簡易のためsoundfileライブラリで、音声データを抽出します。

※ここでの詳細は本記事の本質とは異なるので、割愛します。
```python
import soundfile 
import numpy as np 
import matplotlib.pyplot as plt 
fname = '440Hz.wav' 
data, fs = soundfile.read(fname) 
PowerDFT = np.abs(np.fft.fft(data))**2 
fscale = np.fft.fftfreq(len(data), d=1.0/fs) 
print("最大値を取る周波数成分: {0} [Hz]".format(np.argmax(PowerDFT[:int(fs/2)]))) 
plt.plot(fscale, PowerDFT) 
plt.xlim(0, fs/2) 
plt.xlabel("frequency [Hz]") 
plt.show()
```

実行結果は次のようになる。
```
最大値を取る周波数成分: 440 [Hz]
```
![440Hz_powerDFT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607561/d9d21cec-4d31-1ccf-3478-5cc1a3be2be0.png)

プログラム上でも、グラフ上でも440Hzで音声データが構成されていることが確認できました。

自作したsin波を自分で聞いてみて、音声処理の基準として進めていっていただければ幸いです。

# 公式ドキュメント
1. [wave --- WAVファイルの読み書き](https://docs.python.org/ja/3/library/wave.html)
2. [struct --- バイト列をパックされたバイナリデータとして解釈する](https://docs.python.org/ja/3/library/struct.html)
Go を公式パッケージからインストール ( Ubuntu / RaspberryPi OS / WSL2 )

インストール方法は、こちらを基にしています。
「ラズパイに Go をインストールする」
https://zenn.dev/ysmtegsr/articles/20d6e0c7159be2


# 環境

- Go Version 1.18.2
- Raspberry Pi OS Lite
  - Release date: April 4th 2022
  - System: 32-bit
  - Kernel version: 5.15
  - Debian version: 11 (bullseye)

また、同様にして Ubuntu20.04 , WSL2 にもインストールできました。


# ダウンロード
https://go.dev/dl/
こちらから、該当のアーキテクチャを選択し、リンク先をコピーして使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/5539aac0-c8eb-090c-9b80-ef477b9ca406.png)

- RaspberryPi (32bit) の場合: go1.18.2.linux-armv6l.tar.gz
- Ubuntu 20.04 (AMD64)  および WSL2 の場合: go1.18.2.linux-amd64.tar.gz

```

$ wget https://go.dev/dl/go1.18.2.linux-armv6l.tar.gz
```
# インストール

```

$ sudo tar -C /usr/local -xzf go1.18.2.linux-armv6l.tar.gz 
```

パスを通します

```
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
$ echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.bashrc
```
パスを反映しておきます

```

$ source ~/.bashrc
```



# 動作確認



```

$ go version
go version go1.18.2 linux/arm

```

うまく動いているようです
Requirements on OCU Driver, No.614, AUTOSAR R21-11(248) CP

Requirements on OCU Driver, No.614, 2021-11

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

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

AUTOSAR 21-11,160文書読んだ。2022年5月中に全部読み。

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|
|:--|:--|
|OCU| Output Compare Unit
|OCU channel |Represents a logical entity composed of a free running counter a comparison threshold and the action that is done as a result of the comparison process.
|Compare threshold. T|arget value that is compared with the content of the counter each time the counter increases by one unit.
|Free running counter |A counter that runs from a minimum to a maximum value and restarts automatically to the minimum after reaching the maximum value.
|DMA |Direct memory access
|MCAL| Microcontroller Abstraction Layer
|MCU |Microcontroller Unit
|SPAL| Standard Peripheral Abstraction Layer
|STD |Standard
|UNINIT |Uninitialized (= not initialized)
## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Glossary, AUTOSAR_TR_Glossary.pdf
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf
[2] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[3] General Requirements on Basic Software
AUTOSAR_SRS_BSWGeneral.pdf
[4] General Requirements on SPAL
AUTOSAR_SRS_SPALGeneral.pdf
[5] List of Basic software modules
AUTOSAR_BasicSoftwareModuleList.pdf
[6] Software Standardization Template
AUTOSAR_TPS_StandardizationTemplate.pdf
Requirements on Port Driver, No.196, AUTOSAR R21-11(247) CP

Requirements on Port Driver, No.196, 2021-11

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

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

AUTOSAR 21-11,160文書読んだ。2022年5月中に全部読み。

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|
|:--|:--|
|ADC |Analogue to Digital Converter
|DIO |Digital Input Output
|ICU |Input Capture Unit
|MCAL| Microconroller Abstraction Layer
|MCU| Microcontroller Unit
|OS |Operating System
|PWM |Pulse Width Modulation
|SCI| Serial Communication Interface
|SPAL |The name of this working group (Standard Peripheral Abstraction
Layer)
|SPI| Serial Peripheral Interface
|WP |Work Package
|STD| Standard
|REQ| Requirement
U|NINIT| Uninitialized (= not initialized)

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)
[1] [DOC_LAYERED_ARCH] Layered Software Architecture,
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[2] [AUTOSAR_GLOSSARY] Glossary,AUTOSAR_TR_Glossary.pdf
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf
[3] [SRS_BSW_GENERAL] General Requirements on Basic Software Modules,
AUTOSAR_SRS_BSWGeneral.pdf
[4] [SRS_BSW_SPAL] General Requirements on SPAL,
AUTOSAR_SRS_SPALGeneral.pdf
[5] [TPS_STDT_0078] Software Standardization Template
AUTOSAR_TPS_StandardizationTemplate.pdf
Specification of OCU Driver, No.615, AUTOSAR R21-11(246) CP

Specification of OCU Driver, No.615, 2011-11

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

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

AUTOSAR 21-11,160文書読んだ。2022年5月中に全部読み。

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|
|:--|:--|
|OCU |Output Compare Unit
|DMA| Direct Memory Access
|MCAL| Microcontroller Abstraction Layer
|MCU |Microcontroller Unit
|DEM| Diagnostic Event Manager.
|DET| Default Error Tracer.
|SPAL |Standard Peripheral Abstraction Layer
|MCU |Microcontroller Unit.
|ISR| Interrupt Service Routine.
|OCU channel| Represents a logical entity composed of a free running counter a comparison threshold and the action that is done as a result of the comparison process.
|Compare threshold. |Target value that is compared with the content of the counter each time the counter is increased by one unit.
|Free running counter |A counter that runs from a minimum (respectively a maxium) to a maximum (respectively a minimum) value and restarts automatically from the minimum (respectively a maximum) after reaching the maximum (respectively the minimum) value.
|Reference Interval |Interval (in ticks) given by the caller of the Ocu_SetAbsolutThreshold API, and used as base to compute the return information. 

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)
[1] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[2] General Requirements on SPAL
AUTOSAR_SRS_SPALGeneral.pdf
[3] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral.pdf
[4] Specification of Default Error Tracer
AUTOSAR_SWS_DefaultErrorTracer.pdf
[5] Specification of MCU Driver
AUTOSAR_SWS_MCUDriver.pdf
[6] Specification of ECU Configuration,
AUTOSAR_TPS_ECUConfiguration.pdf
[7] Basic Software Module Description Template,
AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
[8] List of Basic Software Modules
AUTOSAR_TR_BSWModuleList.pdf
JavaScriptのSingleton パターン

Classバージョン
```typescript
export class Singleton {
  private static instance: Singleton | null

  public static getInstance(): Singleton {
    if (Singleton.instance)
      return Singleton.instance
    Singleton.instance = new Singleton()
    return Singleton.instance
  }

  private constructor() {
  }
}
```
Functionバージョン
```javascript
function genGetInstanceMethod() {
  let instance;

  class Singleton {

  }
  
  // getInstanceをmethodとして返す
  return () => {
    // Closureを利用する
    if (instance == null) {
      instance = new Singleton()
    }
    return instance
  }
}

const getInstance = genGetInstanceMethod()
const i1 = getInstance()
const i2 = getInstance()

console.log(i1 === i2) // true
```
属性セレクタ(書いて理解する)



### 【属性セレクタ】

特定の`属性の名前 または 値`に対して適用するセレクタ。



```html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>属性セレクタ</title>
</head>

<style>

<style>

    p[id] { /* 指定した属性名を含むものすべて */
        font-weight: bold;
    }

    p[class~="paragraph"] { /* 属性値の部分一致(指定された複数の属性値の中に含まれていればok) */
        color: black;
    }

    p[class="paragraph"] { /* 属性値の完全一致 */
        color: deepskyblue;
    }

    blockquote[lang|="ja"] { /* 属性値の一致(言語のサブコードを指定しない場合は、属性値の完全一致と同じ動作) */
        font-size: 8px;
    }

    p[class^="foo"] { /* 属性値の先頭文字列の一致 */
        background: red;
    }

    p[class$="foo"] { /* 属性値の末尾文字列の一致 */
        background: red;
    }

</style>

<body>

<h1>属性セレクタ</h1>

<!-- pタグで属性名が「id」 -->
<p id="paragraph">属性名</p>
<p id="paragraph2">属性名2</p>

<!-- pタグで属性値が「paragraph」を含むもの(部分一致) -->
<p class="paragraph paragraph2">属性値の部分一致</p>
<!-- pタグで属性値が「paragraph」だけものもの(完全一致) -->
<p class="paragraph">属性値の完全一致</p>

<!-- blockquoteタグで属性値「ja」と一致するもの -->
<blockquote lang="ja">
    <p>引用</p>
</blockquote>
<blockquote lang="ja-osaka"><!-- ハイフンの後ろの言語のサブコードを含んでもok! -->
    <p>引用</p>
</blockquote>

<!-- pタグで属性値「foo」と先頭が一致するもの -->
<p class="foo_suffix">suffix</p>
<!-- pタグで属性値「foo」と末尾が一致するもの-->
<p class="prefix_foo">prefix</p>

</body>
</html>
```

### [プレビュー]

![Screenshot from 2022-05-29 15-58-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907077/d79afeeb-d397-96d3-6407-7f45b88ef754.png)
Webのさまざまなデータ形式

# これからHTTPSが増えていく
Wi-Fiのインターネット環境が広がっていく中セキュリティ対策がしっかりしていないところが多い。
安全性、信頼性をアピールするためにHTTPSをアピールしている。
またGoogleが優先的に表示するようになっている。
しかし
必ずしも安全というわけではない。個人情報を取ることを目的としたWebサイトがあるからだ。
なので
利用者側がセキュリティ意識を持つことが重要になっている。

# HTML
```html
<!DOCTYPE html>
<html>
<head>
  <title>サルワカ</title>
  <meta charset="UTF-8">
</head>
<body>
  <h1>ゼロからウェブデザインを勉強しよう！</h1>
  <p>まずはHTMLについて学びましょう</p>
</body>
</html>
```
出典 https://saruwakakun.com/html-css/basic/html

上のコードを```HTML文書```という。
何を表したのかを表す```タグ```
```html
<head>
  <title>サルワカ</title>
  <meta charset="UTF-8">
</head>
```
始まりを表す```開始タグ```  例```<head>```
終わりを表す```終了タグ```  例```</head>```
文章を含めた開始タグと終了タグ囲んだ一塊をを```要素```
何を示すかを```要素名```で表す。  例```<head>```の場合　headが要素名
要素の特性を示す```属性```
```<meta charset="UTF-8">```の```charset="UTF-8"```を指す。

# Webページで表示される画像形式
Webで扱う画像データはネットワーク転送量を減らすために基本的に画像サイズを小さくなる形式が使われる。

## JPEG(ジェイペグ、　Joint photographic Experts Group)
.表現力は1677万色を表現できる。
.データを削ることでデータサイズを小さく（圧縮）できるが、画像の画質が下がる
## GIF(ジフ、Graphic Interchange Format）
・データの整理でデータサイズを圧縮できる。
・表現力は２５６色で他のより落ちる。
・パラパラ漫画のようにアニメーションができる
## PNG(ピング、Portable Network Graphics）
・表現力は1677万色を表現できる。
・データサイズを小さくしても画像の劣化が起きない。
・GIFよりもデータサイズが小さくなる。
## 思ったこと
PNGのいいとところがわかった。
この説明だけだとPNGだけを使ってしましそうだ。

# xml
```XML```も```HTML```も```SGML(Standerd Generalized Markup Language)```というマークアップ言語を改良したもの。
```HTML```はハイパーテキストを記述することに特化している。
```XML```は汎用的に使えるようになっている。
タグは自分で定義している。```head```などにとらわれなくて良い。
WebブラウザーとWebサーバー間でデータのやり取りをする際にデータの構造化するおことで扱いやすくなっています。

# XHTML
HTMLをXMLで再定義したもの。
XMLで定義した文書をXHTMLに埋め込むことができる。
XMLで書かれた数式や画像だ。
数式を```MathML```
画像を```SVG```

# 思ったこと
HTMLはハイパーテキストに特化したものだと知った。
しかし
XMLは今回知ることができた。
汎用性が高いのか。
そしてブラウザとサーバーの間でデータのやり取りに使われているのか。

出典 Web技術の基本(SB Creative)
gitコマンドで覚えておくと便利なもの

# 初めに
今回は、初心者応援プログラム時に投稿することができなかったものの、今後絶対に覚えておいて損はないgitコマンドを紹介していこうと思います。

### 作業効率が劇的に変わる3つのコマンド
下記が該当のコマンドになります
```
git reset --hard HEAD^
```
***1つ目***のこのコマンドをすることで直前の`commit`をまるっと削除することができ、`commit`したくないものや、大きな手戻りが発生しそうなときなどに使うと便利です。
また、`reset`したくないものを`reset`してしまったときは
```
git reset --hard ORIG_HEAD
```
上記のコマンドを実行すれば大丈夫です。
```
git push -f origin プッシュしたいブランチ
```
***二つ目***のこちらのコマンドは`push`自体は普段から使ってるものだとは思いますが、fourceオプションを追加することで強制的に`push`することができます。
`rebase`したのに`push`ができない時などに試してみるといいかもしれません。
```
git cherry-pick コミットしたいコミットID
```
***最後***に紹介するのはこちらのコマンドです。
これは名前の通りいいとこ取りをすることができるコマンドです。
`commit`には必ず`ID`が存在するのですが、その`ID`を指定してあげることにより、そのコミットの変更点を全て現在の作業環境に持ってくることができます。
作業ブランチを間違えてしまったり、別ブランチで作業してたけどこの機能も入れておかないといけなくなった。などの際には大いに活躍するかと思います。
### 最後に
自分はソースツリーを愛用していたのですが、どうしても限界がきてしまい最近gitコマンドをよく触り調べるようになりました。
自分の備忘録も兼ねてはおりますが、自分が便利だなと思ったコマンドを皆さんに共有し、お役に立てることができたら幸いです
LINEBotでレシピ検索に挑戦

# まずはやってみよう！
こんにちは、大阪の中小企業でひっそりとデジタルスキルアップに挑戦しているものです。
今回はレシピ検索が出来るLINEBotの作成に挑戦してみました。簡単にLINEBotが作れる、という事で、
作成にはLINE　Deveropersを使用します。

## 何故、レシピ検索か

私は大阪に本社がある関西地場スーパーに勤めています。仕事柄、食品を取り扱っているので、
料理に挑戦する方が、簡単にレシピ検索出来れば良いな、と思いました。
レシピサイトはどこも人気があるので、ニーズはありますし、それが買い物をしながら、LINEで
簡単に材料を検索出来れば、という発想です。

## いざ、挑戦
今回はこちらのツール使用します。
　　[LINE　Deveropers](https://developers.line.biz/ja/)
　　[Make](https://eu1.make.com/)

まずは最初に、LINE　Deveropersからプロバイダーとアカウントの設定を実施します。


https://developers.line.biz/ja/docs/messaging-api/getting-started/

更にたくさんの参考になるAPIを紹介してくれているサイトを検索した結果、今回はこちらのAPIを
LINEBotに取り込みたい、と考えました。

http://www.recipepuppy.com/api/

下の画像の通りMakeの設定をする事で、HTTPの取り込みまでは出来ました。

![スクリーンショット (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668078/6d15746f-2dba-6faa-8f4c-d6c52b0047cc.png)

試しにここまでの設定が完成しているのか、自身のLINEで試してみると、返信は来ました。
しかし、思っているのと違う。。。

https://twitter.com/KohyoTamashiro/status/1530760175950639105?s=20&t=oxfkJ7fE1W-2q_FmQrroow

API(？)を返してくるようには出来ましたが、肝心の完成形で返信してくれるモジュール(？)が
さっぱりわからず。。。
詳しく調べてみると、そもそも利用しているAPIサイトが既に閉鎖されている事が分かりました。
これではどうにも進まないので、方々のサイトを探し歩きましたが、自分が使えるサイトが全くなく(涙)

最初に使ったAPIを紹介してくれているサイトを再度見直し、色々なAPIを試しました。すると
A.やはり既に閉鎖されている　B.「何か」は返してくれるがそれが意図しているのものではない、等。
スキル不足も当然ですが、ちょっとこのままでは勉強も進みません。。。

## お天気Botの復習

よって自分が練習で初めて作成した「お天気Bot」をもう一度、復習の意味も込めて
作り直してみました。
今回は最近、いよいよ夏日和なので、最高気温も入れてみました。

![スクリーンショット (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668078/5455eff7-2736-f39a-944d-76cae41f0972.png)

で、実際の稼働動作がこちら。

https://twitter.com/KohyoTamashiro/status/1530800910167076864

恥ずかしながら、今の自分の実力では、これが精いっぱいです。これからも勉強を続けて何か、仕事の役に立つものを作りたい、と思います。
住所⇔郵便番号　どっちもいけます初心者LINEbot！！

 # はじめに
初めまして！
千葉県で妻と二人暮らし、新卒からずっと商業デベロッパーという聞きなれないであろう業界で働いています。
現在の業務は新規事業の企画立案！今年で2年目になるのですがこれがまたすごく難しい。。
なので、まずは色々な知見を広げるためにも新しいことにチャレンジしていきたいと思っています。
今回のLINEbotもその挑戦のひとつです。
試行錯誤を繰り返した結果、出来たのはこのレベルですが、ご紹介したいと思います！！

 # 思ったこと
私は部署ではまだまだ1番下っ端です。社内の登録申請とか事務処理とかの仕事がちょくちょく回ってきます。
特に新しい取引先と話をすることが多く、先方の会社情報を調べて色んなことに申請する機会がたくさんあります。
そこで思ったのが、「**住所の読み方わからん**」と「**郵便番号わからん**」です。
基本的に社内のあれこれの申請には郵便番号と住所とフリガナが必要なのですが、
HPとか名刺みても郵便番号書いてないとか、地方なんかだと読み方わかんないことが多いんです。
それを解決できるようなLINEbotを作ってみたので見てください！！

 # 作り方
Qiitaで過去の記事等を検索していたら[ドンズバの投稿](https://qiita.com/NakamuraKou/items/f985d7c0f94732664eb8)
を見つけました。
こちらを参考にさせてもらいながら、この[郵便番号から住所検索API](http://zipcloud.ibsnet.co.jp/doc/api)を使って作成を目指します。

 # 完成品
まずは動画をご覧ください。Twitterにも投稿しています。

https://twitter.com/Shinmura_opa/status/1530862529630461952

いやめちゃくちゃ初心者でチープなやつだけど出来ると嬉しいんですこれが！！
私1人の力で出来たものではないですが、先人の皆様に感謝ですね！

郵便番号をいれると住所と読み方が、
住所をいれると郵便番号が、返信されてくるのです。

 ### 中身はこんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2667978/a9fe6ca0-83e8-4270-e427-8ddc026b324b.png)

郵便番号から住所と読み方を返すLINEbot（上段）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2667978/eb6a56b2-fc7b-2812-830e-da205f5b3fcc.png)

住所から郵便番号を返すLINEbot（下段）の2つを作成して、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2667978/f810fdca-3677-8b9d-705d-77150fe64021.png)

Routerモジュールを使ってテキストのフィルターを設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2667978/353f9aec-1739-85ca-0c66-758ceb3c83f6.png)

県や市、町など住所に出てくる漢字を含むと下段に、含まないと上段に流れる仕組みです。

 # 最後に
本当は会議室の空き状況がわかるLINEbotを作ろうとしたんですけど、
SSSAPIが会社PCで対応してなかったり、Steinもなぜかエラーが続いて断念。。
グーグルカレンダーやスプレッドシートのモジュール活用も試したんですけど、
利用方法がわからずこちらも断念。。
最終めちゃくちゃシンプルなLINEbotになりました。まあこれも困ってたからいいのさ！！

個人的にはRouter使って郵便番号と住所どっちでも対応できるように出来たのは嬉しかった！
このまま勉強を重ねていくと、確かにある程度のものは作れるようになりそうな気がしてきます。
色んな方の記事読んでて思うのは、**可能性は無限大**ですね。
アンケート調査結果の集計作業を自動化する

　お疲れ様です。弊社では昨年より年間10回程度、店頭での来店客アンケート調査
を実施しています。本年度も継続して改装店舗を中心に、改装前及び改装後の
お客様のアンケート調査を実施する予定となっています。
今回のテーマとして「アンケート調査結果の集計作業の自動化」を取り上げたのは
　　「**アンケート集計結果**」⇒「**データトリミング**」⇒
　　　　　　　　　「**分析用に加工**」⇒「**PowerPointもしくはPower BIで納品**」
の４つの行程のひとつでも自動化し、自身の仕事の負担を少しでも低減できれば
と考えたからです。
　
　**先月の調査結果pbixファイル画像**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2669820/44c67b71-b5cb-034f-4cb6-28655d01b915.png)

そこで考えた解決策が
１．**外注**　⇒　社長の「内製化」の号令の下はじめたアンケート調査で、当初は
　　　　　　　店頭でのアンケート調査も自分達で実施していた部分を既に外注
　　　　　　　しており、集計・分析まで頼むと費用が大きく嵩む。
２．**部下へ振る**　⇒　そもそもPowerBIが使えない。。
３．**RPA**　⇒　このセミナーに参加した理由でもあるが、自分を含め社内に使い
　　　　　　　こなせる人材がいない。
４．**手順書を作成して部下に振る**　⇒　手順書を作成するのが面倒なのと、日本語
　　　　　　　に不安がある。
５．**・・・・**　⇒　10個も解決案を出せませんでした。。。。。

という訳で、現実的解決策として「**ＲＰＡ**」の操作スキルを自分自身で習得して
問題解決及び卒業制作物の一挙両得を実現したいと思います。　
講師の先生方、事務局及び他の参加メンバーの皆様、ご指導・ご鞭撻の程
宜しくお願いします。
pico-8 > SMC-777 > tiny Mysterious boy

### 前置き

自分が小さいころに親が所有していたSMC-777で遊んだMysterious Boyというゲームを雰囲気で実装してみた(細かい動作は全然異なる)。


### 実行例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/868c6838-2b1a-aa4e-6b19-abc4f6bb3b1b.png)

### ソース

ソース全部はesa.ioに記載している。

- [2022-05-29 14:10 tinyMysteriousBoy](https://esa-pages.io/p/sharing/6206/posts/14441/57a423b3af6c284da79c.html)

### Sprite

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/5f4bd037-2b29-0840-41fb-d451344ccc3c.png)

## 実装の概要

### ジャンプ

zボタンを押した時に等速で上下するだけの実装にしている。

### enemy1..3の生成

enemy1..3それぞれにnew(), update(), draw()を用意して、それぞれをコール。
もっとコンパクトな実装はできるかもしれない。

### enemyXの壁衝突判定

mapとの衝突判定のためmget()を使った。

```lua
	clx1 = flr(enemy1.x/8)
	cly1 = flr(enemy1.y/8)
	if (mget(clx1, cly1) == 2) enemy1.vx *= -1  -- hit wall
```

### enemyXとplayerの衝突判定

二つのspriteの衝突判定については見学習の状態である。
今回はpget()を用いて、代表的な色の値を使って衝突判定している。

```lua
enemy1.update = function()
	enemy1.x += enemy1.vx
	clx1 = flr(enemy1.x/8)
	cly1 = flr(enemy1.y/8)
	if (mget(clx1, cly1) == 2) enemy1.vx *= -1  -- hit wall
	if (pget(player.x, player.y) == 5) player.miss = true -- hit enemy
end
```

### 階段を昇る処理

階段のスプライトでの代表的な色として12を判断に使用している。
加えて、floorの代表的な色として3を判断に使用している。
スムーズな処理にはなっていない。

```lua
function isStairAscending(x, y)
	if (pget(x,y) == 12) return true -- hit stair
	if (pget(x+8,y+8) == 12) return true -- hit stair
	if (pget(x,y) == 3) return true -- hit floor
	if (pget(x+8,y+8) == 3) return true -- hit floor
	return false
end
```

```lua
player.update = function()
...
	if (btn(2) and player.jumping == false) then
		if (isStairAscending(player.x, player.y)) then
			player.x -= 5
			player.y -= 5
		end
	end
```

以下のようにすると多少良くなったが、まだ改善点はある。

```lua
function isOnTheStair(x, y)
	if (pget(x,y) == 12) return true -- hit stair
	if (pget(x+8,y) == 12) return true -- hit stair
	if (pget(x,y+8) == 12) return true -- hit stair
	if (pget(x+8,y+8) == 12) return true -- hit stair
	if (pget(x,y) == 3) return true -- hit floor
	if (pget(x+8,y) == 3) return true -- hit floor
	if (pget(x,y+8) == 3) return true -- hit floor
	if (pget(x+8,y+8) == 3) return true -- hit floor
	return false
end
```

```lua
	if (btn(2) and player.jumping == false) then
		if (isOnTheStair(player.x, player.y)) then
			player.x -= 2
			player.y -= 2
		end
	end
```


### 関連

- [2022-05-29 tinyBirdCrash](https://esa-pages.io/p/sharing/6206/posts/14443/11403e0ff0fa300c6191.html)
Rails APIでFirebase認証を行う

# 概要
[firebase-auth-rails](https://github.com/penguinwokrs/firebase-auth-rails)というgemを使い、rails/apiモードでfirebase認証をセットアップする時の流れについてです。
Dockerで開発環境を作っています。

# Docker側

```
(api部分)
environment:
   REDIS_URL: redis://redis:6379/0
```

```
redis:
    image: redis
    ports:
      - 6379:6379
    volumes:
      - "./app/redis:/data"
```

# rails側
```
gem 'firebase-auth-rails'
```

```
 bundle install
```

```config/initializers/firebase_auth_initializer.rb
FirebaseIdToken.configure do |config|
  config.redis = Redis.new
  config.project_ids = ['あなたのfirebase_project_id']
end
```

```db/migrate/xxxxxxxxxxxxxx_add_uid_to_users.rb
class AddUidToUsers < ActiveRecord::Migration[5.1]
  def change
    add_column :users, :uid, :string
  end
end
```

```
rails db:migrate
```

```application_controller.rb
class ApplicationController < ActionController::API
  include Firebase::Auth::Authenticable
  before_action :authenticate_user
end
```

以上。
SQLをテストする簡単なフレームワークを作ってみた

## 概要
前職ではしばしば複雑なSQLを書く必要があり、「**そのSQLが間違っていないことをどう確認したらよいのか？**」と悩むことがあった（特に分析用のSQLが長くなりがちだった）。そんな課題感から、SQLをテストするフレームワークをさくっと作ったので紹介する。
このツールを使うと「まずテストを書く→テストを通過するSQLを書く」というテスト駆動のコーディングも可能になるので、**tdsql**（Test Driven SQL）という名称にした。GitHubは[こちら](https://github.com/dr666m1/tdsql)。

## 特徴
* SQLの任意の部分を置き換えて最終的な結果が意図通りかテストできる
* テストはyamlで記載する

「**from句など入力部分を置き換えて出力が意図通りか確認する**」というのが典型的な使い方になるかと。

## 使い方
現状BigQueryしか対応していないため、BigQueryの前提で書く。

### インストール
pipで簡単にインストールできる。Python3.10以上が必要なはず。

```bash
pip install 'tdsql[bigquery]'
```

### 準備
BigQueryを使うので認証しておく。

```bash
gcloud auth application-default login

# サービスアカウントを使う場合
# export GOOGLE_APPLICATION_CREDENTIALS=/path/to/keyfile.json
```

動作確認のために簡単なSQLとyamlを準備する。`tablename`というテーブルのデータを集計するのだが、まずはSQL自体に間違いがないことをテストしたい、という状況を想定している。

```sql:./sample.sql
select json_extract(json_string, '$.data') as extracted_data
-- tdsql-start: replace_here
from `tablename`
-- tdsql-end: replace_here
```

```yaml:./tdsql.yaml
database: bigquery
tests:
  - filepath: ./sample.sql
    replace:
      replace_here: |
        from unnest([
          '{"data": "foo"}',
          '{"data": "bar"}'
        ]) as json_string
    expected: select * from unnest(['foo',　'bar']) extracted_data
```

簡単に説明すると、置換する場所を`-- tdsql-xxx:`から始まるSQLのコメントで指定している。どのように置換するか＆最終的に期待される結果はyamlファイルに記載している。

### 実行
`tdsql`というコマンドでテストを実行する（先ほどのSQL・yamlファイルと同じディレクトリで実行すること）。すると、次のようなありがちなエラーが見つかる。

```
/path/to/sample.sql_1: value does not match at line: 1, column: extracted_data
actual: "bar", expected: bar
```

これは、例えば`json_extract()`を`json_extract_scalar()`に直せば解決する。その後、もう一度`tdsql`を実行すればエラーが出ないことを確認できるだろう。


## Tips
発展的な使い方についてはGitHubに[サンプル](https://github.com/dr666m1/tdsql/tree/main/sample)を置いておいた。以下、いくつか抜粋。

* 何GiB以上のクエリは実行しない、など細かい設定もできる
* テストが増えてきたらyamlファイルを分割することもできる
* SQLにコメントを記載せず、yaml側で置換する行を指定することもできる[^specify_row_number]

[^specify_row_number]: チームで自分しかtdsqlを使っていない状況でSQLにコメントを追加すると、「SQLに変なコメントを書くな！」と怒られるだろう。誰にも迷惑をかけずに個人的にtdsqlを使い始めるなら、①tdsql.yamlをGitの管理から外して②tdsql.yamlだけにテストを記載する。

## 最後に
「このSQLはこういう入力に対してこういう出力を返すんだ！」というテストを明確に書けるのは特徴的だと思う。注意が必要なのは、実際の入力データが意図通りかは別途確認が必要ということ[^note]。

さくっと作ってみたはいいものの、正直需要があるのか自信がないので、何か意見があればコメント歓迎です。

[^note]: この記事では、`tablename`というテーブルをテスト用のデータで置き換える例を紹介した。ここで注意したいのは「`tablename`というテーブルに壊れたjson文字列が含まれないか？想定外のnullが含まれないか？その他テーブルの仕様について勘違いはないか？」といったテストはできていないということ。
【LaTeX 環境構築】brew + VSCode で Mac に TeX を導入する

https://www.ren510.dev/blog/vscode-tex

# はじめに

もちろん、みんな卒論とか学術論文書く時は TeX 使うよね。。。
意外と TeX の環境構築に手こずる人も居るみたいなので、それ`mactex-no-gui`で簡単にできるよ？
ってことで、今回は Mac の VSCode で TeX 環境を構築する方法を紹介する。

# brew のインストール

- Homebrew：[https://brew.sh/index](https://brew.sh/index)

```
### インストール
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

### .zshrcに追加
- Intel chip （x64/x86/x86-64） の場合
基本的にはそのままで良い

- M1 chip (ARM) の場合
$ echo 'eval $(/opt/homebrew/bin/brew shellenv)' >> ~/.zshrc
$ eval $(/opt/homebrew/bin/brew shellenv)

### rezshする
$ source ~/.zshrc
$ exec $SHELL -l

### 確認
$ brew --version
Homebrew 3.4.11
```

# VSCode のインストール

```
### インストール
$ brew install --cask visual-studio-code

### 確認
$ brew list | grep visual-studio-code
visual-studio-code
```

# MacTeX のイントール

```
### インストール
$ brew install --cask mactex-no-gui

### rezsh（ここでrezshしておかないとlatexmkを認識してくれない場合があるっぽい）
$ exec $SHELL -l

### 確認
$ latexmk --version
Latexmk, John Collins, 17 Mar. 2022. Version 4.77
```

# VSCode Extension Framework のインストール

VSCode の以下拡張機能をインストールする

- LaTex Workshop
  https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop

# vscode`setting.json`に追記

- VSCode を立ち上げて`⌘ + ,`で`setting.json`を開く
- もしくは直接`~/Library/Application\ Support/Code/User/settings.json`を編集

```json
{
  "latex-workshop.latex.tools": [
    {
      "command": "latexmk",
      "args": [
        "-e",
        "$latex=q/platex %O -synctex=1 -interaction=nonstopmode -file-line-error %S/",
        "-e",
        "$bibtex=q/pbibtex %O %B/",
        "-e",
        "$biber=q/biber %O --bblencoding=utf8 -u -U --output_safechars %B/",
        "-e",
        "$makeindex=q/mendex %O -o %D %S/",
        "-e",
        "$dvipdf=q/dvipdfmx %O -o %D %S/",
        "-norc",
        "-pdfdvi",
        "%DOC%"
      ],
      "name": "latexmk"
    }
  ],
  "latex-workshop.latex.recipes": [
    {
      "name": "latexmk (tex to PDF)",
      "tools": ["latexmk"]
    }
  ],
  "latex-workshop.view.pdf.viewer": "tab",
  "latex-workshop.latex.clean.subfolder.enabled": true,
  "latex-workshop.latex.autoClean.run": "onBuilt",
  "latex-workshop.latex.clean.fileTypes": [
    "*.aux",
    "*.bbl",
    "*.blg",
    "*.idx",
    "*.ind",
    "*.lof",
    "*.lot",
    "*.out",
    "*.toc",
    "*.acn",
    "*.acr",
    "*.alg",
    "*.glg",
    "*.glo",
    "*.gls",
    "*.ist",
    "*.fls",
    "*.log",
    "*.fdb_latexmk",
    "*.dvi",
    "*.synctex.gz"
  ]
}
```

# TeX で Hello world!

```tex
\documentclass{jsarticle}

\begin{document}

Hello,\LaTeX!\\

\end{document}
```

![sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/18c9d6ac-fd74-49d9-c593-8e4d4ca0d0bb.png)

こんな感じで編集できれば設定完了 !!
Let's TeX Life!!