OmniAICreator/Qiita-1.07M huggingface dataset:
ダウンロードしてきたPDFをファイルを作成せずに文字列として扱いたい

`requests`でダウンロードしてきたPDFをファイルに保存せずにstrオブジェクトとして扱う方法です。

いつもだと、下記のようにpdfとして保存しますが、
今回のケースはファイル保存せずにpythonのstrオブジェクトとして扱いたいケースです。

```python
# PDFファイルとして保存するとき
# 今回はこれを禁止して.pdfをドライブに残さない
with open("hoge.pdf", "wb") as f:
    f.write(resp.content)
```

```python
import requests
from pdftotext import PDF
from tempfile import TemporaryFile

url = 'https://github.com/progit/progit2-ja/releases/download/2.1.7/progit.pdf'
resp = requests.get(url)  # (1)

# PDFファイルとして保存するとき
# with open("hoge.pdf", "wb") as f:
#     f.write(resp.content)

# 一時ファイルに保存しないで直接`resp.content`を
# PDFインスタンス化するとエラー
# pdf = PDF(resp.content)
# => AttributeError: 'bytes' object has no attribute 'read'

# f.seek(0) しないと
# Error: poppler error creating document
# byte列が最後まで行きっぱなしなので
# f.seek(0)で最初まで戻してやる

# strオブジェクトとして扱うとき
# 一時ファイルに保存する
with TemporaryFile() as f:
    f.write(resp.content)  # (2)
    f.seek(0)  # (3)
    pdf = PDF(f)  # (4)
text = '\n'.join(pdf)  # (5)
# 10000~30000文字まで出力
print(text[10000:30000])
```


1. requestsでpdfをダウンロードしてきます。
1. バイナリを一時ファイル `TemporaryFile()` へ保存します。
一時ファイルに保存しないで4の工程を行うとAttributeErrorです。
1. ファイルを0ポジションへ移動します。これがないと次のインスタンス化でエラーです。
1. 一時ファイルをPDFインスタンス化します。
`TemporaryFile()`はガベージコレクションによってwithを抜けると破棄されます。
[tempfile --- 一時ファイルやディレクトリの作成](https://docs.python.org/ja/3/library/tempfile.html)
1. インスタンス化されたオブジェクトはジェネレータとして扱えるので、for文などで処理できます。ここでは改行で`join`して`text`というstrオブジェクトとして取り扱います。


```python:pdftotext.PDF.__doc__
PDF(pdf_file, password="", raw=False, physical=False)

Args:
    pdf_file: A file opened for reading in binary mode.
    password: Unlocks the document, if required. Either the owner
        password or the user password works.
    raw: If True, page text is output in the order it appears in the
        content stream.
    physical: If True, page text is output in the order it appears on
        the page, regardless of columns or other layout features.

    Usually, the most readable output is achieved by using the default
    mode, rather than raw or physical.

Example:
    with open("doc.pdf", "rb") as f:
        pdf = PDF(f)
    for page in pdf:
        print(page)
```

元のPDFファイルのインデントを維持したい場合はPDFインスタンス化する際にpythisicalオプションをTrueにすると良いです。

```python
# デフォルトはphysical=False
    (...snip)
    pdf = PDF(f)
text = '\n'.join(pdf)
print(text)

"""
=>
一切管理対象になっていません (今作った .git ディレクトリに実際のところどんなファイルが含まれている
のかについての詳細な情報は、Gitの内側を参照ください)。
空のディレクトリではなくすでに存在するファイルのバージョン管理を始めたい場合は、まずそのファイルを
監視対象に追加してから最初のコミットをすることになります。この場合は、追加したいファイルについて
git add コマンドを実行したあとで git commit コマンドを行います。

$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
これが実際のところどういう意味なのかについては後で説明します。ひとまずこの時点で、監視対象のファイ
ルを持つ Git リポジトリができあがり最初のコミットまで済んだことになります。

既存のリポジトリのクローン
"""

# physical=Trueの場合
    (...snip)
    pdf = PDF(f, pyisycal=True)
text = '\n'.join(pdf)
print(text)

"""
=>

ヘルプを見る
もし、Gitを使っている間は助けがいつも必要なら、あらゆるGitコマンドのヘルプのマニュアル・ページ
（manpage）を参照する3種類の方法があります。


 $ git help <verb>
 $ git <verb> --help
 $ man git-<verb>


例えば、configコマンドのヘルプのmanpageを次のコマンドを走らせることで見ることができます。

"""
```

コマンド$の前にスペースが付与されました。元のファイルがインデントついていたためでしょう。
【ServiceNow】特定の列の要素一覧を取得したい～基礎編～

### はじめに

- バージョン
  - ServiceNow: Rome

　以下のようなテーブル``IP Routers[cmdb_ci_ip_router]``において、列Nameの要素一覧を
取得出来ないか調査してみました。テーブルの情報を取得する場合は、``GlideRecord``が使えるようです。

![row_name.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554812/70c913d7-ff13-73ea-ddcd-aaa281123d24.png)

### 1. コード紹介

　コードは列Nameの要素一覧(リスト)を格納する変数column_arrayを作成し、
while文の中で列Nameの各要素を追加するという構成になっています。

```javascript
var column_array = [];
var table_data = new GlideRecord('cmdb_ci_ip_router');
table_data.orderBy('name');
table_data.query();
while(table_data.next()) {
    column_array.push(table_data.getValue('name'));
}
gs.info(column_array);
```

**ポイント**

1. テーブルの内容取得

   - GlideRecordを使ってテーブルの内容を取得することが出来ます
 
     ```javascript
     new GlideRecord('テーブル名');
     ```

1. whileによるループ処理

   - while文で、``<GlideRecordで取得した変数>.next()``とすることで、
     変数(今回はtable_data)に各行の値が代入されます。今回は、列Nameの要素を取得したいので  
     ``table_data.getValue('name')``と記載します。
 
     ```javascript
     while(table_data.next()) {
         //実行したい処理
         column_array.push(table_data.getValue('name'));
     }
     ```


### 2. 結果確認

#### 2-1. 出力されるテーブル

　gs.infoでログに出力した内容は、テーブル``Log[syslog]``に出力されます。
Filter navigatorに``script log statements``と入力し、テーブルを確認します。

![log.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554812/9be40151-8ab7-580c-f163-fd620c11b613.png)

#### 2-2. ログの確認

　想定通り、列Nameの要素一覧を取得出来ていることが確認されました。

![table.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554812/5d56d355-7d8f-557c-234c-97dc91c4e3f0.png)


### 参考記事

[GlideRecord - ServiceNow Developers](https://developer.servicenow.com/dev.do#!/learn/learning-plans/rome/new_to_servicenow/app_store_learnv2_scripting_rome_gliderecord)
[GlideRecord(API Reference) - ServiceNow Developers](https://developer.servicenow.com/dev.do#!/reference/api/rome/server/c_GlideRecordScopedAPI)

### 関連記事

[【ServiceNow】特定の列の要素一覧を取得したい～応用編～](https://qiita.com/masa2223/items/37a5958ba7d8f041885e)
問題解決における自走と質問の使い分け(記事のまとめ)

# 最初に　
　まず軽い自己紹介として、私は5月からあるITベンチャーでインターンを行っている難波と申します。初投稿になりますが、よろしくお願いします。
　先日から行っているwebアプリ作成に伴い、エンジニア初学の壁に色々ぶつかってきたのでその一部を記事にします。最初の壁にぶつかっている初学者の皆さんの力に少しでもなれれば良いと思い、メモがてらにアウトプットを行います!

# 導　入
　初学者にとって初めのコーディングは、エラー、記述法など、分からないことだらけだと思います。これを解決する手段は、自分で調べながら行う"自走"と誰かに聞く"質問"の2つが挙げられます。この２つをうまく使い分けることで、時間コストの削減をしながら、エンジニアとしての問題解決能力を上げていくことができます。
　まず前提として自走と質問による解決のそれぞれの特徴を先に述べます。その後に、私がハマった点を大きく3つに分け、これを解決できた[記事](https://zenn.dev/monado/articles/8010809c4779dd)を参考に改善法も併記していきます。

## 自走と質問の違い
　まず自走による解決とは、自らが今持っている知識を用いたり、インターネットに落ちている情報を元に問題解決をしていくことです。対して質問による解決は、他人の持っている知識や経験を借りて問題解決をすることです。
　これらにはそれぞれメリット・デメリットがあります。自走による解決は、問題について思考、検索をすることで、理解の深化、検索能力の向上などエンジニアとして必要な能力が上がる一方、時間コストが多くかかってしまいます。一方、質問による解決は、比較的時間コストが少ないです。

# ハマったポイント

## 1. 　いつ自走から質問に切り分けるかが分からない。
　これは必ず陥る点だと思います。自走することでエンジニアとしての問題解決力が上がるのは間違いないです。しかし、自走だけでは時間がかかりすぎて、実装も進まない、モチベーションも下がるといった悪循環につながります。私もこの状況に陥ってしまいました。
### 改善法：自走の時間をあらかじめ決めておく　
　その問題に直面した時に例えば、「1時間、自走を行なってダメなら聞いてみよう。」など自分の中でルールを決めることが重要であると思います。「こんなの当たり前じゃん。」と思うかもしれないですが、解決作業がどんどん長引いて結局聞いた方が良かったと思う場面が何度もありました。このルールで動くことで、自走能力も上がりつつ作業も前進していくと思います。
　検索した記事の意味がわからない時は、そこに載っている単語の意味などを調べた上で理解できない場合に質問に切り替えるといいでしょう。

## 2. 　何が分からないか分からない。
　これはそもそも問題点が分からないという事象です。特にキャッチアップし始めはこの状況に陥りやすいと思います。
## 改善法: 問題を細分化する。
　これは、[参考記事](https://zenn.dev/monado/articles/8010809c4779dd)の文を引用し説明します。
>例えば「JavaScriptが理解できない」という風に言われると、疑問は膨大な可能性を含みます。例えばJavaScriptの定数と変数の使い分けがわからない、なのかJavaScriptがブラウザでどのように実行されるのがわからない、なのか、可能性は無限にあります。そこでもう一歩踏み込んで「JavaScriptの非同期処理がわからない」と言われると非同期処理に範囲を絞り込めます。ただしこれでも非同期処理の概念がわからないのか具体的な文法がわからないのか、など範囲の絞り込みが不十分です。これが「JavaScriptの非同期処理でPromiseとasync, awaitの使い分けるタイミングがわからない」まで来ると完璧な疑問と言えます。

とあるように、問題を細分化するだけで、今自分が何が分かっていないかを整理できます。またこの後のハマりポイントの解決にもつながっていきます。


## 3. 　うまく質問できない。
　上記のように、質問の仕方によっては問題が入れ子構造になり、問題解決のプロセスが増えてしまうことに繋がります。
## 改善法: 質問の明確化
　まず問題を細分化できたら、次に自分がわからない点だけを列挙し、それを以下のような質問フォーマットにまとめましょう。これを行うことで、複雑な問題を分割して整理する能力がつくとともに、互いのコスト削減にも繋がります。

>【質問フォーマット】
■ 今、起きている事
（例）ユーザー新規登録をしようと、登録ボタンを押したらエラーになった。
■ 解決したい事
（例）ユーザー新規登録を実装し、データベースに保存したい。
■ 調べた事、考えた仮説
（例）公式リファレンスやQiitaで似たような記事をみた。（記事のURLなども載せる）
deviseのgemがインストールされているかは確認済み。作成したキー名も間違っていないので、データベースが怪しいと思いテーブル名やカラム名を調べてみた。
■ 仮説を元に行った結果
（例）データベースにもテーブル、カラムもきちんと反映されており、スペルミスも見当たらなかった。再度、実行してみたが同じくエラーで解決できなかった。

# まとめ
　問題解決において自走と質問の使い分けが一番大事だなと感じました。この判断を正確にできることで、エンジニアとして必須能力である自走力、モデリング力を向上させながら、プログラムに対する理解も深まっていくと思います。これを意識しながら今後も頑張っていきたいと思います。記事の改善点などあれば、コメントよろしくお願いします!!
Google のサービスで許可した OAuth を削除する方法

# 概要
Google Chrome で OAuth 認証をした場合、しばらくの間は再度 Web ページを訪れても認証済みの状態になっている。

これを、何かしらの理由で解除したい場合に解除するための手順の備忘録。
（例：別のメールアドレスで認証し直したいなど）

# 手順

### 【Step 1】 該当のアカウントで Web ブラウザを開く
Google Chrome で認証が完了してしまったアカウントでブラウザを起動する

### 【Step 2】 OAuth 管理ページを開く
以下のURLへアクセスする

```
https://security.google.com/settings/security/permissions
```

すると、以下のアカウント管理ページを表示する

![Google OAuth解除_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787582/3388dead-cfd5-b153-4363-c8118b8b31c7.png)

### 【Step 3】 OAuth の許可を解除する
認証を一旦消したいものを選び、「アクセス権を削除」すれば完了

![Google OAuth解除_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787582/c06c68d7-8ffd-053e-96f4-9d2da995fb5e.png)

再度、OAuth 認証が行われるページへアクセスすると、メールアドレスの入力が求められる様になる。
未経験エンジニアがAIについて調べて知ったことをまとめてみた！

<h3>人工知能（AI）の定義</h3>

・人工知能(AI：Artificial Intelligence)とは、人間の知的振る舞いの一部をソフトウェアを用いて人工的に再現したもの。
ただし現時点では、人工知能について厳密な定義があるわけではない
・AI効果
すでに解決済みの人工知能技術は、人工知能ではなく自動化と捉える心理効果。
時代によって人工知能の目指すところは随時変わっている。

・業界では、弱いAI 強いAIと区別されることがある
弱いAI
「意識・思考を持たない人工知能」と定義され、特定のタスクに特化されたAI
人間の知的振る舞いの一部をソフトウェアを用いて人工的に再現したもの（今世の中でAIと言われているもの大半）
例
顔認証、画像識別

強いAI(AGI Artificial General Intelligence:汎用的人工知能）
「適切にプログラムを与えられたコンピュータが人間が心を持つのと同じように、プログラム自体も心を持つ」と定義される
人間の知的振る舞い全てをソフトウェアを用いて人工的に再現したもの（まだ世の中に出ていないが、今の技術なら完成する日が来ると言われている）
例
ターミネーター、ドラえもん



<h3>人工知能の分類</h3>

レベル３以上は、実際に人間が明示的にプログラミングせずに機械が自ら学習する。

レベル１　シンプルな制御プログラム
最も単純な働きをする人工知能（AI）としての制御プログラム
例：エアコン、洗濯機などの家電制御

レベル２　古典的な人工知能
探索・推論、知識データから、さまざまな局面に対して対応できる
例：掃除ロボット、将棋ソフト、自動運転など

レベル３　機械学習を取り入れた人工知能
多くのサンプル数から入力と出力のパターンを学習する
例：Googleなどの検索エンジンなど

レベル４　ディープラーニングを取り入れた人工知能
人工知能が自ら特徴量の学習ができる
例：画像認識、音声認識、自動翻訳の分野で活用が期待

<h3>人工知能の歴史</h3>

AIブームは過去3回起こり「ブーム期」と「衰退期」を繰り返している　現在は３次AIブームに差し掛かっている
過去2回のブームは、人工知能が実現できる技術的な限界よりも社会が人工知能に対して期待する水準を上回ることでその乖離が明らかになることでブームの終焉を迎える

第1次AIブーム
主なキーワード：探索と推論
衰退理由：トイプロブレム

第２次AIブーム
主なキーワード：エキスパートシステム
衰退理由：知識獲得のボトルネック

第3次AIブーム
主なキーワード：機械学習　ディープラーニング

人工知能の概念の起源（１９５０年〜）
イギリスの数学者アラン・チューリングが１９５０年に出した著者「計算する機械と人間」の中で、「機械は考えることができるか？」について唱えているのが起源

人工知能という言葉の誕生
１９５６年にアメリカで開かれたダートマス会議でジョン・マッカーシーが「人間のように考える機械」を「人工知能」と表現したのが始まり

<h5>第１次AIブーム（1960年〜） 推論と探索の時代</h5>

探索木の手法を用いて、解決しようとした
探索のプログラムの進化、特にオセロやチェス、将棋などのゲーム等は探索すべきパターンが膨大なものが、プロを破るほどに進歩した大きな要因として、モンテカルロ法が採用されたことがある。

AIの限界論（第1次AIブームの終焉）
当時のプログラムは非常に限定的な状況でしか効果を発揮しないものであることがわかってしまった。
さらに、ニューラルネットワークが特定の分野で限界に達したことや、米国政府が機械翻訳の成果は当分先との報告書を出したことにより、第1次ブームは1970年に終わりを迎える

<h5>第2次AIブーム（１９８０年〜）　知識の時代</h5>

エキスパートシステムの発展
ルールに加えて、その分野の専門知識を取り込むコオtで、あたかもエキスパートのように振る舞うプログラム

エキスパートシステムの課題
専門知識の蓄積の手間がかかったり、ルールが増えすぎるとお互いに矛盾したり、曖昧な条件下ではその判断が難しく、常識的なレベルの知識のプログラムのハードルが高かった
人間の持つ全ての一般常識をコンピュータに入力するプロジェクト等もある、サイクロプロジェクト
30年経ってもいまだに書き終えることは完成していない

AIの限界論（第２次AIブームの終焉）
第2次AIブームでは、人工知能での知識利用の面で大きく進歩したが、コンピュータそのものが意味を理解することに関して解決できていない。
文章を正確に解釈するには状況や文脈の判断などの一般常識が必要になるが、この一般常識がコンピュータには難しい。
・コンピュータが持つ主要な問題
「知識獲得のボトルネック」　知識を獲得することの難しさ
「フレーム問題」　関係ある知識だけを取り出して使うのが困難
「シンボルグラウンディング問題」　記号と意味の紐付けが難しい

<h5>第2次AIブーム（２０１０年〜）　機械学習と特徴表現学習の時代</h5>
ビッグデータと呼ばれる大量のデータの利用のため、特徴量を自ら習得するディープラーニング（深層学習）が登場したことで、人工知能自ら知識を獲得する機械学習が実用化された。

知識を定義する特徴とその特徴量を人工知能が自ら判別し学習するディープラーニング（深層学習）が学術的なグレークスルーを起こしたことがブームの背景にある

<h5>世代を超えた多様なAIの手法を適材適所で活用</h5>
1次、2次、3次と世代を挙げたが単純に第3世代のAIが第1世代のAIよりも優れているわけではない。目的や用途によって最適な手法は異なる。
AI将棋を例にとると、
何手も先の展開を読み、対戦相手の意表をつくような妙手を編み出すためには機械学習やディープラーニングの手法が必要。
しかし、将棋の基本的なルールや定石などをAIに覚えさせるためには、わざわざ学習させるよりも最初からルールベースとして登録したほうが遥かに効率的
このように第一世代から第三世代の手法を適材適所で組み合わせ、さらにはモバイルやウェアラブル、IoT、アナリティクス（統計分析）などのシステムともシームレスに融合しながら、さまざまな業務課題に対応するソリューションをデザインしていくことが、これからのビジネスにおけるAIへの向き合い方であり、活用法となる
UE4 ダイアログの作り方


# ダイアログの枠

https://historia.co.jp/archives/3864/

ダイアログの枠の設定
Draw As : Box
Margin  : 0.18

# ボタン作る
https://www.youtube.com/watch?v=ejI_IKWGqkg&t=371s

# UMG Imageの切り替え
http://kagring.blog.fc2.com/blog-entry-259.html
SetBrushfromTexture
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249684/4ee013bd-6d12-1118-122e-d76c17a8221e.png)


# Imageの色変え
SetBrushTintColor
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249684/7c9dea44-279a-d76c-0eb9-ec0d8f3ecb14.png)
docker container内のlogを確認する

## docker container log

- 実行中のコンテナを一覧表示し、確認したいcontainer nameを表示
```docker ps```

- コンテナのログを読み取り
```docker logs NAME -f```

- エラーログのみを読み取る
```docker logs NAME -f 1>/dev/null```

- アクセスログのみを読み取る
```docker logs NAME -f 2>/dev/null```
lambda serverless 環境でのブラボーなバックエンド言語をぼんやり考える

lambda serverless上でtypescript + expressなシステムを作っていて、「コールドスタート早くしたいなぁ」と考える日々

lamdaで動かす場合、コールドスタートの速さ大事
EC2とかECSで動かすシステムと、ブラボーな方向がちょっと変わる

テスト環境 lambda / 本番環境ECSでも良いのだけど、lambdaの管理のしやすさは素敵。
(lamdaで対応可能な負荷のシステムに限定）

sls deployと唱えるだけでhttps環境出来てしまうし、放っておいてもお金かからないし。

今まで使ってきた言語
C# / Java => Scala => ruby => Python(ちょっと) => TypeScriptへ遷移してきた。

C#は良かった。
Scalaはサイコーに良かったのだけど、どちらもコールドスタートの遅さツラい。

# 求める言語について
- コールドスタート速い
- json apiサーバをサクサク開発できること。
- 型ある
- 流行ってる
- 優秀なORM
- 高階関数もサクサク使えること

# TypeScriptについて
僕の現在のメインウエポン
型は正義、面倒臭い時はanyで何とでもなるし、硬さと柔らかさのバランスはなかなか良いと思う。
Frontと同じ感覚で使えるし、定数とかユーティリティをフロント・バックエンドの双方で使えるのは良い。

コールドスタートがちょい遅いのがツライ。
メインで使ってるTypeORMのパッケージサイズが大きいのよね。
Prismaだとちょい軽くなりそうだけど、serverless環境での動作がなかなかうまくいかん。

助走後は動作自体は早いので、lambdaじゃなければ凄く良いのだけど。

環境的に、tsconfigとかwebpackとかsource-mapとかnpmサイズとかチマチマとめんどい。
awaitめんどい。
型がついてもjavascriptなので、思わぬエラーに出くわすこともある。

# Go言語 or Rust言語

lambdaでコールドスタートを考えると、この二つなのかなぁ。
## Go言語
いくつか検証コード書いて見たんだけど、言語仕様的にけっこー辛くね？
["hoge", "moge", "hage"].filter(s=>s.include("h")).map(s=>`hello ${s}`])
みたいのを書くだけでも、けっこーな行数になってしまうというか。

## Rust言語
全く書いたことが無いので、隣の芝生はもしかして青いんじゃね？状態なう
難しそうなイメージがあったので敬遠してたけど、Goより関数的な書き方はやりやすい予感？
ちょっと勉強してみようかなーと思う。
wasmにも応用聞くのは良いよね。


# その他
## .NET ネイティブコンパイラ
.NET7でネイティブコンパイラが導入されるらしいけど、
もしかしてC#でGo/Rust並みのコールドスタート得られるんじゃね？
妄想は広がる。

## Ruby
lamdaでは動かしたことないけど、型欲しいよね。
ActiveRecordとRails consoleは最高にブラボー。

## Python
数年前にちょっと使ったけど、こまごまと面倒くさかった、高階関数書きにくい。
numpy / pandas / pillowは最高にブラボー。
個人的には、Pythonに行くならTypeScriptで良いかな。

## Deno
どうなん？

## PHP
CakePHP時代にちょっと書いただけなので、あまり詳しくない。
そもそもFastCGI時代に生まれていてコールドスタートもそこそこ早いっぽい。
型もあるしLaravelも良さげっぽい。
もしかしてServerlessに向いてるっぽい？
DataGripからGoogle BigQueryへの接続

# 概要

DataGripから、Google BigQueryへ接続する方法を記載しています。

[DataGrip：データベースおよびSQL用のJetBrains製クロスプラットフォームIDE](https://www.jetbrains.com/ja-jp/datagrip/)

# 前提情報

* DataGrip 2022.1.4
* サービスアカウントを利用

#

下記「+」を押して、「Data Source＞BigQuery」を選ぶ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10525/81781118-5021-7d07-591d-d505a022219e.png)


下記の「Download」を押す。
　→足りないライブラリなどがダウンロードされる。
![CleanShot 2022-06-02 at 23.13.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10525/2a1c19c4-7945-fa6b-f8f5-03d9a37e1e56.png)


BigQueryに関する情報を入力する。
入力が終わったら、下の「Test Connection」を押す。
![CleanShot 2022-06-02 at 23.15.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10525/b5a20a46-4afb-fe17-342e-1665cb1b5dd0.png)

少し待つと下記の警告が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10525/bfd91641-8d5b-98fa-3baf-6937f552bf1e.png)

警告が表示されるが、この状態で接続できる。
右下の「OK」を押して、完了。


これでBigQueryに接続ができます。
昔はもっと面倒くさかったのに、とてもかんたんになりました。
で結局、エンジニアは出社すべきか？それとも在宅勤務すべきか？

最初にこちら、テスラですが。
https://jp.reuters.com/article/health-coronavirus-tesla-idJPKBN2NI4D6

他社の友人、知人の話を聞いていても、いよいよ出社の波動が強まってきたな、と感じる今日この頃です。

一方で弊社開発部門は、一部エリアの座席が剥奪されたままです(※フリーアドレスはあるが)。
各自が自宅の勤務環境のカスタマイズを進めた結果、出社に戻る気配は一向に感じられません(※在宅勤務の準備のための手当もありました)。

では結局、エンジニアは出社すべきでしょうか。それとも在宅勤務すべきでしょうか。

併用もしばしば見ますが、ここでは全出社と全在宅勤務で比較します。

私は在宅勤務にも二種類あると思っています。

①福利厚生型在宅勤務

…各々の社員の状況を鑑みて、「生産性が多少落ちても良いので、自宅でできる限りの仕事をしてください」というスタンスのもの

②戦略型在宅勤務

…あくまで出社時と同等以上の生産性を求めるもの

ある会社で在宅勤務制度があるとして、それがこの2つのどちらを意図したものであるかは、そもそも明確にされていないことが多いと思います。まず何よりこの「明確にされていない」状態そのものが、失敗に繋がります。
具体的には、社員側が勝手に在宅勤務=①であると解釈してサボったり、会社が在宅勤務=①であると考えていて早々に出社ベースに戻そうとしたり、というところで、在宅勤務が定着しない例をしばしば見ました。

弊社も、特別ここを明確にして制度化されたわけではありませんでした。というより、コロナ禍開始直後の在宅勤務制度が純粋に②を意図していたということは、まずなかったのではないかと思います。

しかしそれ以降に、②をやっていくんだという意識が、社員側と、会社側双方に醸成されていき、定着しました。
このベースに必要なのは、社員と会社の信頼関係です。ここをクリアできていない場合、それは「出社すべき」なのではなくて、そもそも「出社すべきか？それとも在宅勤務すべきか？」という話の土俵に上がる以前の状態、となります。

では、土俵に上がることができた企業で問題となる点はどこか。個人的には、エンジニアの場合、概ね以下の3点に集約されると思います。

A.イノベーション

B.文化の浸透、定着

C.技術面のフォロー

これらに関しては今のところ、出社>在宅勤務かな、と思います。特別真新しくはなく、社員を信用しない会社側が言い分にしそうな項目そのままかも知れません。しかし、実感を伴ってもやはり幾分かは、この辺は出社に分があると言わざるを得ません。

そして、これらのキーとなるのが「フットワークの軽いコミュニケーション」なのかなと思っています。弊社でもSlackやoViceなどを使用していますが、やはり出社時のようなコミュニケーションは難しく、課題があります。当然、在宅勤務には出勤時間のカットなどの明確なメリットがあるので、今のところは双方メリデメあり、という感じでしょうか。

これらを埋め合わせることができれば、「在宅勤務の方がベター」と明確に言えるようになるのかも知れません。

AやBについては、例えば飲み会が好きなメンバー同士なら、「飲み会のときだけ集まる」で、出社と比較して足りない部分の多くを補えます(※飲んだから必ずイノベーションが生まれるという話ではない)。
しかし、今の時代は飲み会を好まない人も増えていますし、oViceで無理に集めてもあまり「フットワークの軽いコミュニケーション」は生まれないので、他の工夫も必要です。
Cは、ペアプロなどの方法で、今でもある程度は補われてきている状況でしょうか。

これからも、必ずしも出社や在宅勤務のどちらかに固執することはなく、工夫していくと思うので、またどこかで発信します。

それでは！
【初心者メモ】Gatsbyでqueryの結果が更新されないときの対処

## 事象
[GatsbyのチュートリアルPart6](https://www.gatsbyjs.com/docs/tutorial/part-6/)の途中、何回ビルドをかけ直してもQueryの戻り値が更新されない。
```ts:src/pages/blog/index.tsx
export const query = graphql`
  query {
    allMdx(sort: { fields: frontmatter___date, order: DESC }) {
      nodes {
        frontmatter {
          date(formatString: "MMMM D, YYYY")
          title
        }
        id
        slug // これが取りたいのに何回更新しても取れない
        // body 逆に消したはずのbodyはずっと取れてる
      }
    }
  }
`;
```
加えて```/blog```へアクセスしようとするとやけに動作が重くなる。
## 解決策
以下コマンドでキャッシュクリアしたら両方とも解決した。全部キャッシュが悪かったらしい。
```
gatsby clean
```
【Git】ローカルブランチを他のリモートブランチに切り替える手順

# 概要
Git リポジトリを、「develop」等のメインブランチでローカルにクローンした際、後からリモートで用意されている他のブランチに切り替える手順の備忘郎。

# 前提

- Git に関する基礎知識がある方向け
- Git インストール済み

# 手順
リポジトリが存在する場所で、以降を実施していく

### まずローカルブランチを確認

```bash
# リモートブランチ一覧表示
git branch

# 実行結果 (* は現在選択されているブランチ)
* develop
```
初回は、ブランチが１つしかない状態。

### 目的のブランチがリモートあることを確認

```bash
# リモートブランチ一覧表示
git branch -r

# 実行結果 (リモートブランチの一覧が出てくる)
  origin/HEAD -> origin/develop
  origin/develop
  origin/feature/branch_A
  origin/feature/branch_B
  origin/feature/branch_C
 :
```

### ローカルリポジトリ最新化コマンド (情報を取得する)

```bash
# フェッチコマンド実行
git fetch

# 実行結果 (こんな感じの表示が出る)
remote: Enumerating objects: 118, done.
remote: Counting objects: 100% (118/118), done.
remote: Compressing objects: 100% (44/44), done.
remote: Total 118 (delta 85), reused 106 (delta 73), pack-reused 0
Receiving objects: 100% (118/118), 16.29 KiB | 8.14 MiB/s, done.
Resolving deltas: 100% (85/85), completed with 13 local objects.
From github.com:Demo-project/demo-app
   d9f54d9a5..c2f1d2cfa  develop          -> origin/develop
 * [new branch]          feature/branch_A -> origin/feature/branch_A
 + 1af70c600...75974fa96 feature/branch_B -> origin/feature/branch_B  (forced update)
```

### ブランチを切り替える

ブランチ作成、リモートからローカルへの適用、切り替えを同時に行う
（ブランチ名の指定には「 `origin/` 」は不要）

```bash
# ブランチ切り替え
git checkout feature/branch_B

# 実行結果
Branch 'feature/branch_B' set up to track remote branch 'feature/branch_B' from 'origin'.
Switched to a new branch 'feature/branch_B'
```

### ローカルブランチを確認

```bash
# リモートブランチ一覧表示
git branch

# 実行結果 (* は現在選択されているブランチ)
  develop
* feature/branch_B
```

選択したブランチに切り替わっていることを確認できる


# まとめ

基本は「 `git checkout {ブランチ名}` 」をやれば良いが、念のため fetch コマンドで最新かなどもしてみた手順
KaliでBurp Suiteが起動しない

![IMG_2783.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659122/66a45139-5015-a031-159f-182f83fbbeba.jpeg)

一番左上にあるKaliのメニュー（正式にはWhisker Menu）を開いて「burp」と検索。

出てきたBurp Suiteのアイコン上で右クリックすると、上の画像のようにメニューが表示される。

そこで「アプリケーションの編集」をクリック。

<br><br>

その後、下の画像の通り「コマンド(A)」の部分に

```
java -jar /usr/bin/burpsuite
```

と書いて保存する。

![launcher.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659122/317ed5f2-a326-67a4-9bb5-d5089615b744.png)

これでOK.
エクスプロイトコード とは

## 勉強前イメージ

なんかセキュリティのやつで
誰かに攻撃仕掛ける系のコード？

## 調査

### エクスプロイトコード とは

本来はコンピュータの脆弱性やセキュリティホールの有無を検証、また動作を再現するために作られたプログラムのことを指します。
しかしそれが転じて不正アクセス等に悪用されることもあり、攻撃などが簡単にできるため問題となっています。

### エクスプロイトキットの例

- Angler

高速でよく使用されているキットの一つ。
コンピュータのHDDではなく、メモリから実行する特徴がある。

- Nuclear Pack

javaなどの脆弱性をつくエクスプロイトキット

- EaaS

SaaSをもじったものでエクスプロイトキットをサービスとして提供行うもの。
容易に攻撃ができる

### エクスプロイトコードの対策

何度も同じものですが、以下になります。
- セキュリティソフトの導入
- 不審なメールは開かない
- ソフトウェアやOSを最新にする

## 勉強後イメージ

メリットを悪用したパターン・・・
こんな攻撃方法があるよ！ってことはできるってことかー

## 参考

- [エクスプロイトコード](https://siteguard.jp-secure.com/blog/what-is-exploit-code#:~:text=%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%82%A4%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E3%80%81%E3%82%B5%E3%82%A4%E3%83%90%E3%83%BC%E6%94%BB%E6%92%83,%E9%87%8D%E5%A4%A7%E3%81%AA%E8%84%85%E5%A8%81%E3%81%A8%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82)
- [エクスプロイトコード](https://kotobank.jp/word/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%82%A4%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89-1611320)
カーネルパラメーター ってなんぞ？

## 勉強前イメージ

カーネルはわかるけど・・・雰囲気。
それの設定のパラメーターって感じ？

## 調査

### そもそもカーネルとは？

オペレーティングシステム(OS)の中核を構成するソフトウェア
プログラムの起動や終了、メモリの割り振りなどソフトウェアとハードウェアの間で仲介する役割
詳細は [こちら](https://qiita.com/miyuki_samitani/items/cb3b654add9fa07d6a5e) をごらんください。

要するに、カーネルを変えればメモリの割り振りとか変更することができるってこと？

### カーネルパラメーター とは

OSの挙動を制御するパラメータで、システムの実行中に調整できます。
カーネルパラメーターをミスったらOSが動かなくなるパターンも有る。
基本的にはデフォルト値が入ってるが、変更は可能です。

### カーネルパラメーターの種類

設定する内容で種別分けがされていて、種別は `クラス` 、クラスの中にさらに `サブクラス` が存在します。
いくつか種類はありますが、主なクラスは以下になります。

- kernel
- net
- fs

また、カーネルパラメーターの一覧は `sysctl -a` で表示できます。

```
[root@localhost ~]# sysctl -a
abi.vsyscall32 = 1
crypto.fips_enabled = 0
debug.exception-trace = 1
debug.kprobes-optimization = 1
debug.panic_on_rcu_stall = 0
dev.cdrom.autoclose = 1
....
```

### カーネルパラメーターの変更方法

カーネルパラメーターは再起動をするともとに戻るので永続化する場合には設定ファイルの変更が必要。
`/etc/sysctl.conf` または `/etc/sysctl.d/配下` になります。

一時的に反映したい場合は `/proc以下` に記載すると即時反映、再起動すると戻ります。

## 勉強後イメージ

/procってプロセスの制御してると思ってたけど、
プロセスもカーネル上で動いてるから/procいじればOK？な感じ？
カーネル初心者すぎて全然わからんけど、少しずつ見ていこう

## 参考

- [Linuxカーネルパラメータの設定とチューニング、デフォルト値の調べ方](https://eno0514.hatenadiary.jp/entry/20150622/1434905054)
- [カーネルパラメータとは](https://ameblo.jp/bakery-diary/entry-12678238592.html#:~:text=%E3%81%AE%E5%A4%89%E6%9B%B4%E6%96%B9%E6%B3%95-,%EF%BC%91%EF%BC%8E%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%A8%E3%81%AF,%E8%AA%BF%E6%95%B4%E3%81%A7%E3%81%8D%E3%82%8B%E7%89%B9%E5%BE%B4%E3%82%92%E6%8C%81%E3%81%A4%E3%80%82&text=%E8%A8%AD%E5%AE%9A%E3%82%92%E3%83%9F%E3%82%B9%E3%82%8B%E3%81%A8,%E3%81%8C%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82&text=%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%AB%E3%82%88%E3%82%8B%E8%A8%AD%E5%AE%9A%E5%A4%89%E6%9B%B4%E3%81%8C%E5%8F%AF%E8%83%BD%E3%81%A8%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82)
Pspice for TI をダウンロードしてみる

どうも社会人1年目のポンコツです。
Pspiceの良さを普及するためにこれから記事を書いていこうとおもいます。　　
また日本語の記事がないので皆さんの助けになれればいいなぁっていうモチベでコツコツやっていきます、、、
この記事はOSがwindowsの人向けです。 
# Pspice for TI のススメ
まず回路シミュレータといったらLTspiceですよね。無料で使いやすくて学生時代くそお世話になりました。
ただ最近有料だったPspiceが無料で使えるようになったんですよ。しかもあの回路設計者おなじみEDAベンダーの**Cadence**社が **TI**と一緒になって作ってるんですよね。しかも **素子 回路制限無し！！！！**
ということでダウンロードしてみました。
# ライセンスの申請方法
残念ながらすぐにダウンロードできません:frowning2:
ライセンスの申請が必要です。
1. TI.comに飛ぶ
2. 上の検索ボックスにpspiceと入力![スクリーンショット 2022-06-02 223901.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486428/ac14e044-cf04-c2c7-4a14-1a6f41c520ed.png)
1. pspiceの詳細を表示をクリック
![スクリーンショット 2022-06-02 223926.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486428/6f174760-c4d8-5c11-103e-c879795e54df.png)
4. リクエストをクリック
![スクリーンショット 2022-06-02 000322.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486428/ac7cffd0-2805-ce06-5968-14549b0cc79b.png)
5. 個人情報の入力画面が表示されるので入力して **yes** にチェック、 ** Submit** をクリック
![スクリーンショット 2022-06-02 000430.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486428/33f4d0f9-67b7-60c4-13e0-4a5dc90746c0.png)
申請リクエストされると以下の画面になるので本日はこれで終わり。
明日まで気楽にお茶でも飲みましょう:coffee:
![スクリーンショット 2022-06-02 000533.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486428/dc2ef9c2-3e3e-907c-0e17-284eb08a57a8.png)
# Pspiceのインストール
申請から次の日には承認のメールが届くと思います。
そのメールのリンクをクリックするとダウンロード画面が表示されます。
もちろんダウンロードをクリック![スクリーンショット 2022-06-02 220053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486428/bfdef023-ada5-342c-cb9a-b3ca4b74c3a7.png)
メールアドレスとメールに記載されていたアクセスコードを記入して **Sign in** 
![スクリーンショット 2022-06-02 220110.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486428/9f0420e6-e4e6-859c-bd94-4f3dfba673e2.png)
次に**I accept** → **Next** 
![スクリーンショット 2022-06-02 220313.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486428/c1049988-f797-1da4-aa85-503d757509c1.png)
好きなパスにダウンロードしてください。
そして **Install**
![スクリーンショット 2022-06-02 220328.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486428/c4d2b16e-b5ac-92c5-0c7a-8a5d31adde9f.png)
**Finish**おして起動すると、、、
![スクリーンショット 2022-06-02 222531.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486428/987b5395-8981-4520-52cf-ccb3764d1d04.png)
この画面が開ければ完了！！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486428/f2507201-414a-6c96-7094-dc715984ef05.png)
ということで次回は基本操作編です。
お楽しみに
KaliのBurp Suiteをアップデート

やることとしては、最新のjarファイルを/usr/bin/burpsuiteにコピーするということ。

# Burp Suiteのアップデート

まずはPortSwiggerのサイトへいく：

https://portswigger.net/

Productsタブから、適切なBurpのエディションを選択する：

![ps.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659122/d0656e35-e167-5c02-2493-9952bb9b7da8.png)

今回は「Burp Suite Community Edition」を選択。

![dl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659122/7bc1767f-b22d-16de-1a0a-2e9b8b93fdbf.png)

「Go straight to downloads」を押して、以下のようにjarファイルをダウンロードする：
![burppage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659122/ab742d46-25e9-57d4-b4ac-66813e7b0964.png)

次に、そのダウンロードしたjarファイルを**burpsuite**にリネームする：

```
mv burpsuite_community_v2022.3.9.jar burpsuite
```

それに実行権限を与えてやる：

```
chmod +x burpsuite 
```

Burp Suiteの実態は`/usr/bin/burpsuite`なので、次を実行してやる：

```
sudo mv burpsuite /usr/bin/burpsuite
```

（ちなみにこの実態は`which burpsuite`の実行結果よりわかる）

以上でBurp Suiteのアップデートは完了。

<br><br>

Burp Suiteが起動しない場合は以下を参照：

https://qiita.com/Hashibirokou/items/16d24d9a72a312993d6e

# aptで簡単にアップデートする

単純に以下を実行すればよい：

```
sudo apt update
sudo apt install burpsuite
```

ただし、この場合はBurp Suite > アプリケーションの編集 > コマンド（A）の部分に`burpsuite`と指定する必要がある。
pyenvでビルドが失敗して、pythonをインストールできない

## Pythonのインストールでエラーが出た
Atcoderを始めるため、pythonの環境を用意しようとpyenvをインストールし、
```
$ pyenv install 3.9.1
```
を実行すると下記のようにエラーが出た。
```
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.9.1.tar.xz...
-> https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz
Installing Python-3.9.1...
patching file Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst
patching file configure
patching file configure.ac
python-build: use readline from homebrew
python-build: use zlib from xcode sdk

BUILD FAILED (OS X 12.4 using python-build 20180424)
```

"build failed (os x 12.4 using python-build 20180424)"より、ビルドに失敗しているのかと思った。
すると、pyenvの公式でビルドの失敗に関する様々なissueを発見したが、しっくりこない。

pyenvはhomebrewでインストールしたので、下記のHomebrewの問題チェックコマンドを実行してみた。
```
$ brew doctor
```
すると、Xcodeに関するwarningが出ていた。
```
Warning: A newer Command Line Tools release is available.
Update them from Software Update in System Preferences or run:
  softwareupdate --all --install --force

If that doesn't show you any updates, run:
  sudo rm -rf /Library/Developer/CommandLineTools
  sudo xcode-select --install

Alternatively, manually download them from:
  https://developer.apple.com/download/all/.
You should download the Command Line Tools for Xcode 13.3.
```
pyenvのエラーにもXcodeに関することが書かれていたので、xcodeのアップデートを試してみることに。
```
$ sudo rm -rf /Library/Developer/CommandLineTools
$ sudo xcode-select --install
```
を実行して、再度```python install 3.9.1```をすると、インストールに成功した。


## 結論
Xcodeのアップデートが必要だったらしい。
```$brew doctor```でHomebrewのwarningを確認しようとしたのが、エラー解決に繋がった。
pyenv公式のissueで同じ解決法の人が見当たらなかったので、エラーから問題の仮説を立てて、解決に辿り着けてよかった。
福島県 県民割プラスのクーポンが使える加盟店のPDFをCSVに変換

福島県 県民割プラスのクーポンが使える加盟店

https://www.tif.ne.jp/kenminwariplus/

```python
import pathlib
from urllib.parse import urljoin

import camelot
import pandas as pd
import requests
from bs4 import BeautifulSoup
from tqdm.notebook import tqdm


def fetch_soup(url, parser="html.parser"):

    r = requests.get(url)
    r.raise_for_status()

    soup = BeautifulSoup(r.content, parser)

    return soup


def fetch_file(url, dir="."):

    p = pathlib.Path(dir, pathlib.PurePath(url).name)
    p.parent.mkdir(parents=True, exist_ok=True)

    if not p.exists():

        r = requests.get(url)
        r.raise_for_status()

        with p.open(mode="wb") as fw:
            fw.write(r.content)

    return p


url = "https://www.tif.ne.jp/kenminwariplus/"

soup = fetch_soup(url)

links = [
    urljoin(url, i.get("href")) for i in soup.select("div#area > div.btn > ul > li > a")
]

dfs = []

for link in tqdm(links):

    p = fetch_file(link)

    tables = camelot.read_pdf(
        str(p), pages="2-end", split_text=True, strip_text=" ", line_scale=40
    )

    for table in tqdm(tables):

        dfs.append(pd.DataFrame(table.data[1:], columns=table.data[0]))

df = pd.concat(dfs).reset_index(drop=True)

df.to_csv("result.csv", encoding="utf_8_sig")
```
Acceptance Test Specification of UDP communication, No.683, AUTOSAR R21-11(311) CP

Acceptance Test Specification of UDP communication, No.683, 2021-11

https://www.autosar.org/fileadmin/user_upload/standards/tests/1-2/AUTOSAR_ATS_UDP.pdf

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

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

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

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

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

# 用語(terms)
|Term|Description|
|:--|:--|
|AT |Acceptance Test
|ECU |Electronic Control Unit
|IUT| Implementation Under Test
|LT |Lower Tester
|PDU| Protocol Data Unit
|SP| Service Primitive
|TS |Test System
|UDP |User Datagram Protocol (according to IETF RFC 768)
|UT| Upper Tester
|IP| Internet Protocol
|ICMP| Internet Control Message Protocol
|TTL| Time To Live
|TOS |Type Of Service
|MTU| Maximum Transmission Unit
|＜LTIface-m＞ |m-th Interface of LT
|＜IUTIface-n＞ |n-th Interface of IUT
|＜IUTIface-n-IP＞ |IP address of n-th Interface of IUT
|＜LTIface-m-IP＞|IP address of m-th Interface of LT
|SCG| Static Configuration Groups
|allSystemMCastA ddr| Refers to the multicast address of All Systems on a Subnet
|BroadCastAddr| Refers to the broadcast address of a EthIfCtrl
## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] AUTOSAR Specification of TCP/IP Stack
AUTOSAR_SWS_TcpIp.pdf
[2] AUTOSAR System Template
AUTOSAR_TPS_SystemTemplate.pdf
[3] AUTOSAR SRS Ethernet
AUTOSAR_SRS_Ethernet.pdf
[4] AUTOSAR General Specification for Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
[5] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration.pdf
[6] Requirements on AUTOSAR Features
AUTOSAR_RS_Features.pdf
[7] IETF RFC 768 http://tools.ietf.org/html/rfc768
[8] IETF RFC 1122 http://tools.ietf.org/html/rfc1122
[9] Testability Protocol and Service Primitives
AUTOSAR_PRS_TestabilityProtocolAndServicePrimitives.pdf
yarn とは？（＋ Mac に yarn を導入する手順）

# 概要
「yarn」とは何かについて、そして、macOS にインストールする手順の備忘録

※ 「npm より yarn が良い」という声もあったが、現在は npm も開発が追いついており、以前ほどの差は無くなってきた印象です。

# 前提

- Node.js はインストール済み
- パッケージマネージャについての概念を知っている方向け

# yarn とは

- 「yarn（ヤーン）」は、Node.js で動作するパッケージマネージャの１つ
- Node.js のパッケージマネージャと言えば「npm」だが、これと互換性がある（＝ package.jsonが使える）

# npm と yarn の違い

||npm|yarn|
|:--|:--|:--|
|リリース|2010年|2016年|
|インストール速度|遅い（というか標準）|npm より早い|
|依存プログラム|自動で意図しないバージョンのパッケージをインストールしてしまうことがある|「yarn.lock」ファイルにより厳密にバージョンを固定するため、npm の様な問題は起きづらい|

# yarn のインストール

ターミナルで以下を実行

```bash
# yarn インストール
npm install -g yarn
```

#### `Error: EACCES: permission denied` エラーが発生したら
PCのアクセス権限エラーが発生する場合があるので、その時は「sudo」をつける

```bash
# 管理者権限で yarn インストール
sudo npm install -g yarn
```

バージョン確認コマンド等で、インストールできたか確認

```bash
# バージョン確認コマンド
yarn -v

# 実行結果
1.22.18
```

# yarn コマンド
基本的なコマンドをご紹介

### 初期プロジェクト生成 (package.json 生成)

```bash
yarn init
```
npm の場合は `npm install`

### 既存設定のパッケージインストール

```bash
yarn
```
npm の場合は `npm install` 。yarn は短い。

### パッケージ追加

```bash
yarn add {パッケージ名}
```
npm の場合は `npm install --save {パッケージ名}`

### パッケージのアンインストール

```bash
yarn remove {パッケージ名}
```
npm の場合は `npm uninstall {パッケージ名}`

### パッケージのグローバルインストール

```bash
yarn global add {パッケージ名}
```
npm の場合は `npm install -g {パッケージ名}`
Acceptance Test Specification of Ecu Mode Management, No.665, AUTOSAR R21-11(310) CP

Acceptance Test Specification of Ecu Mode Management, No.665, 2021-11

https://www.autosar.org/fileadmin/user_upload/standards/tests/1-2/AUTOSAR_ATS_EcuModeManagement.pdf

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

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

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

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

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

# 用語(terms)
|Term|Description|
|:--|:--|
|AT| Acceptance Test
|CAN |Controller Area Network
|ECU |Electronic Control Unit
|LT |Lower Tester
|NM| Network Management
|PCO| Point of Control and Observation
|PDU |Protocol Data Unit
|RfC| Request for Change
|Rx |Reception
|SUT| System Under Test
|DUT| Device Under Test
|SWC |Software Component
|TCP |Test Coordination Procedures
|Tx|Transmission
|UT |Upper Tester
## 英日
日本語は仮訳

T.B.D.

# 参考(reference)
Requirements and Specifications of  Ecu Mode Management, should be listed.
Specification on test methods and test standards should be listed.
APIから取得したデータの型定義がほしい！って時はJSONから自動生成します。

# 型定義ほすぃ〜
ちょっとしたプロジェクトで、サードパーティのAPIを使用する際に型定義が無くて困ることがしばしばありました。OpenAPIに登録されていれば自動生成することもできますが、されていなかった場合には今回紹介する手法が使えるかもしれません。

## MakeTypes
[こいつ](https://jvilk.com/MakeTypes/)です。
使い方はかんたん。

まず何らかの方法でJSONをまるっとクリップボードに保存します。
自分は一度ブラウザに表示させてやってます。
![ブラウザ上に表示されたJSON](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656202/4546ddae-d589-c589-faee-6fdcd3c25869.png)
firefox developer Edition使ってます。

あとは[MakeTypes](https://jvilk.com/MakeTypes/)にいって好きな名前付けて貼ると...
![MakeTypeのスクショ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656202/6f8f8369-dbb2-314f-59a2-edf50394952b.png)

型定義が生成されます。
![生成された型定義](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656202/f3f82681-25e7-e395-9ada-c40dfd9e8907.png)

おそらくここから微調整が必要になりますが、大まかなスタートラインとしては十分かと。少なくともゼロから全部自力で書くよりはマシです。

# 以上。
「それよりこうした方がよくない？」ってのがあれば是非教えて下さい。
Macの使い方をまとめてみた

## 初めに

今回は備忘録として、Macの使い方をまとめました。

## Macの使い方

### macOSバージョンを調べる方法

・左上の「:apple:」マーク　＞　このMacについてをクリックすると確認できます

![スクリーンショット 2022-06-02 22.16.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655769/1084f044-6f65-e841-05cf-377305abdac4.png)

リリース年：macOS	
2016   ：Sierra	
2017   :High Sierra	
2018   :Mojave	
2019   :Catalina	
2020   :Big Sur	

## Finderの設定（ホームフォルダの出し方🏠）

１.Finderを起動
2.左上のメニューバー　　＞　　Finder　＞　環境設定
３.環境設定上部 サイドバー ＞ 家のアイコンにチェック
4.Finderを開き、ホームフォルダがサイドバーに表示されているか確認



## ショートカットキー　一例

```
・「command」　＋　スペース または　「control」 　＋ スペース
　　→　　Spotlight検索（アプリケーションを検索して起動できる）

・「command」 + C
　　→　　コピーする

・「command」 + V　（ペタッとはるイメージ）
　　→　　貼り付ける

・「command」 + X (ハサミをイメージ)
　　→　　切り取る

・「command」 + A
　　→　　全選択する

・「command」 + Z
　　→　　1つ前に戻す

```

## まとめ

最後までご覧くださり、ありがとうございました。
今回はPCを新しくしたときに忘れそうな情報を主にまとめました。

ショートカットキーを覚えて、より効率化を目指したいです:fire:
Postgres: Psql Meta-Commands で複数のSQL Files を実行する

# 背景
pgAdmin 上で複数の SQL ファイルを実行したかった。

以下のようなイメージを、pgAdmin 上で実現したくなった。
> find sql/ -name *.sql -exec psql -U user -f {} \;

https://serverfault.com/questions/356706/call-multiple-sql-files-in-a-single-sql-file-in-postgres

# 環境
pgAdmin4 v6.10

https://www.postgresql.org/ftp/pgadmin/pgadmin4/v6.10/windows/

# 制約
- pgAdmin 上でやりたい
    - 試行用で database 名は一定ではない為、bat などにして database 名をその都度変更は面倒。PSQL Tool なら、対象の database 上で開けば、同一 Meta-Commands で実行できるってのが利点。

# 結論
現状見つからず。

script 組むと、Database 名を追従するのは面倒だし・・
現状は以下 Meta-Commands を解としてみた。


> \encoding utf-8; \cd '{target folder}'; \i {executable sql filename}; [...]

例）
> \encoding utf-8; \cd 'c:/temp/sqls'; \i select1.sql; \i select2.sql;


## 解説
### "\encoding utf-8"

PSQL Tool を起動するたびに、SJIS になる為
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/60f7ebe5-eb76-ba1b-6954-e2f835e42843.png)

### ";"
 複数コマンドを繋げる為
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/5866af45-6290-9431-1481-af54ef31f179.png)

### "\cd {target folder}"
Current Directory を変える為

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/face8300-4aa8-b8a0-50e5-8dab06c06e07.png)

::: note info
\\! pwd は、Windows 上では、\\! dir
:::

### "\i {executable sql filename}" 
あとは、実行したいファイルを羅列
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/0d80f22a-4431-5749-7afc-e0c0784b498f.png)

# あとがき
対象フォルダを列挙して、パイプで繋げて実行したかったが、Meta-Commands でのパイプ方法が分からず・・
\\! をパイプ('|') で繋げると、Dos Commands でのパイプになってしまう。
そこで psql を書く道はあるかもだが・・それするくらいなら、bat 書けよって思えて・・

ところで・・
スクラッチパッドって・・機能向上はしないんですかねぇ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/5b625e9a-2d13-ee0d-0aa5-38b3da4d2732.png)

正直、以下のようなことが出来るようになると便利なのになぁ・・と
- インタラクティブウィンドウとして SQL 簡易テスト
- 一時保存領域で、pgAdmin を落としてもそのまま記憶してくれている

ずいぶん昔からずっと存在してるらしい・・

https://www.postgresql.org/message-id/011f01c6dfe6$9a03ec88$6a01a8c0@valehousing.co.uk

https://www.pgadmin.org/docs/pgadmin4/6.10/query_tool.html

# 参考
- Meta-Commands 

https://www.postgresql.org/docs/14/app-psql.html

# keyword
Execute multiple Sql files by Psql Meta-Commands in PSQL Tool in Postgres
Acceptance Test Specification of IPv4 communication, No.685, AUTOSAR R21-11(309) CP

Acceptance Test Specification of IPv4 communication, No.685, 2021-11

https://www.autosar.org/fileadmin/user_upload/standards/tests/1-2/AUTOSAR_ATS_IPv4.pdf

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

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

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

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

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

# 用語(terms)
|Term|Description|
|:--|:--|
|AT| Acceptance Test
|ECU| Electronic Control Unit
|IUT |Implementation Under Test
|LT |Lower Tester
|PDU| Protocol Data Unit
|SP| Service Primitive
|TS |Test System
|UDP |User Datagram Protocol (according to IETF RFC 768)
|UT |Upper Tester
|IPv4 |Internet Protocol version 4
|ICMP| Internet Control Message Protocol
|TTL |Time To Live
|TOS |Type Of Service
|MTU |Maximum Transmission Unit
|EMTU_S |Effective MTU for sending – This is the maximum IP datagram size that may be sent,
|＜LTIface-m＞ |m-th Interface of LT
|＜IUTIface-n＞| n-th Interface of IUT
|＜IUTIface-n-IP＞ |IP address of n-th Interface of IUT
|＜LTIface-m-IP＞ |IP address of m-th Interface of LT
## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] AUTOSAR Specification of TCP/IP Stack
AUTOSAR_SWS_TcpIp.pdf
[2] AUTOSAR System Template
AUTOSAR_TPS_SystemTemplate.pdf
[3] AUTOSAR SRS Ethernet
AUTOSAR_SRS_Ethernet.pdf
[4] AUTOSAR General Specification for Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
[5] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration.pdf
[6] Requirements on Acceptance Tests
AUTOSAR_ATR_Requirements_Eth.doc
[7] IETF RFC 791
http://tools.ietf.org/html/rfc791
[8] IETF RFC 1122
http://tools.ietf.org/html/rfc1122
[9] Testability Protocol and Service Primitives
AUTOSAR_PRS_TestabilityProtocolAndServicePrimitives.pdf
【Git】origin/masterってなに？

よく分からん:sob:

## リモートリポジトリのmasterブランチ説

参考：https://backlog.com/ja/git-tutorial/stepup/14/
　　　https://nebikatsu.com/6349.html/

## ローカルリポジトリのブランチ説

https://www.masatom.in/pukiwiki/GitHub/%25A5%25ED%25A1%25BC%25A5%25AB%25A5%25EB%25A1%25A6%25A5%25EA%25A5%25E2%25A1%25BC%25A5%25C8%25A5%25D6%25A5%25E9%25A5%25F3%25A5%25C1%25A4%25C8origin%25A4%25CE%25A4%25CF%25A4%25CA%25A4%25B7/

## 途中報告

今回真実が判然としなかったため、引き続き考えます:muscle:
【ShellScript】関数に配列を渡して1つずつ処理する方法

ShellScriptで関数に配列を渡して一つずつ処理するプログラムを作成している中で、
躓いたところがあったので、投稿します。

## やりたいこと
２つの配列をfor文で1つずつ処理するプログラムの作成です。
2つの配列を文言を1文にくっつけて出力するのがゴールです。

## エラー時のプログラム
```test.sh
#!/bin/bash

array_a=("aa" "bb" "cc")
array_b=("11" "22" "33")

function fncTest() {
  value1=$1
  value2=$2

  for a in "${value1}"
  do
    echo ""${a}" ### "${value2}""
  done
}


for b in "${array_b}"
do
  for a in "${array_a}"
  do
    fncTest "${a}" "${b}"
  done
done
```
以下が出ることを期待値としてます
```

aa ### 11
bb ### 11
cc ### 11
aa ### 22
bb ### 22
cc ### 22
aa ### 33
bb ### 33
cc ### 33
```
しかし実際は以下です
```
aa ### 11

```
## 改善点
上記の配列の渡し方だと最初の部分（ここでいうaaと11）のみになります。
配列を渡すには以下にように```[@]```と入れてあげる必要があります

```test.sh

#!/bin/bash

array_a=("aa" "bb" "cc")
array_b=("11" "22" "33")

function fncTest() {
  value1=$1
  value2=$2

  for a in "${value1}"
  do
    echo ""${a}" ### "${value2}""
  done
}

for b in "${array_b[@]}"
do
  for a in "${array_a[@]}"
  do
    fncTest "${a}" "${b}"
  done
done
```
以下が実行結果です
```
aa ### 11
bb ### 11
cc ### 11
aa ### 22
bb ### 22
cc ### 22
aa ### 33
bb ### 33
cc ### 33
```
期待値になりました。
配列上の文言で1つずつ処理したいのは、よくある処理だと思うので、
配列を使ってfor文またはwhile文の使用はマスターしたいですね

以上です。
S3にフロントエンド環境を構築してみた

[こちらの記事](https://qiita.com/tToyoshima/items/dbb0a4c3540226c318cc)の続きです。

今回はフロントエンド環境の実行環境を構築し、セキュリティ設定をします。

## 構成のおさらい（バックエンド含む）
### EC2
Webアプリのバックエンドを実行します。
今回はJavaのjarファイルを常時実行し、フロント側から実行されたAPIを処理します。
RDSに構築されたデータベースとデータをやりとりします。
今回はSpringBootで実装しています。
なお、HTTPS接続したいために、SSLを有効にしています。
その際、今回はテスト環境のため自己署名証明書を使っています。

### RDS
Webアプリのデータベースを担います。
今回はPostgreSQLです。

### S3
Webアプリのフロントエンドを配置します。
静的ウェブサイトとして設定し、エンドポイントにアクセスすることでフロント側の画面を表示します。
今回はVue.jsを用いて画面を作成します。

## S3の実行環境構築
### アップロード
今回はVue.jsの環境で`npm run build`した際に作成される`dist`ディレクトリの中身を全てアップロードしました。
AWSコンソール画面より、Amazon S3 > バケット と進み、バケットを選択します。
オブジェクトタブよりアップロードしたいモジュールをアップロードします。（ドラッグ＆ドロップでも可）

### ACLで公開
オブジェクトを公開するために、アップロードしたファイルのチェックボックスにチェックを入れ
アクションからACLを使用して公開するを選択し、公開します。
![スクリーンショット 2022-06-02 11.09.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529227/26c23a84-ca6e-5d08-d562-e2c0bbbd853c.png)

### 静的ウェブサイトホスティング
静的ウェブサイトホスティングを設定します。
Amazon S3 > バケット からプロパティタブを開きます。
静的ウェブサイトホスティングの編集を開き編集します。
* 静的ウェブサイトホスティング: 有効にする
* ホスティングタイプ: 静的ウェブサイトをホストする
* インデックスドキュメント: index.html（アップロードしたインデックスドキュメント）

有効にした後、バケットウェブサイトエンドポイントに表示されているURLがフロントエンドのエンドポイントになります。

### アクセス許可設定
#### ブロックパブリックアクセス 
Amazon S3 > バケット > アクセス許可 からブロックパブリックアクセス (バケット設定)の編集をします。
「パブリックアクセスをすべてブロック」のチェックを外し、変更の保存をします。

### バケットポリシー
Amazon S3 > バケット > アクセス許可 からバケットポリシーの編集をします。
パブリックに公開する場合は以下の設定をします。
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::Bucket-Name/*"
            ]
        }
    ]
}
```

今回は特定のIPのみ許可したので、以下の設定をしました。
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "IP",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::Bucket-Name/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "IPアドレス"
                }
            }
        }
    ]
}
```

上記を設定し、静的ウェブサイトホスティングのエンドポイントにアクセスすることで、
フロントエンドの画面を表示できました。

以上でフロントエンドの画面からAPIを実行し、EC2、RDSでAPIを処理する環境が構築できました。
【ネットワーク】MACアドレスについて

# MACアドレスをもう一度学ぶ

最近教えてもらったことを整理する！

## MACアドレスとは

- Media Access Control Address
- NICに割り当てられている物理アドレス、固有の識別番号


## NICとは

- Network Interface Card
- コンピュータなどの機器を通信ネットワーク（LAN）に接続するためのカード型の拡張装置

## 誤解

「固有の識別番号」というワードから、勝手に１個の機械に１個割り振られてるもんかな～と思っていたけど、サーバーとかはNICが複数ついてるから、MACアドレスも複数もってると知って、誤解に気づく:joy:

## ベンダー

- Realtek
    - WindowsのNIC製造元


## ベンダーの検索

macアドレスからベンダーを調べることができるらしい
やってみたい！

1. コマンドプロンプトにて、自分のPCのMACアドレスを調べる
　　```
ipconfig/all
　　```
1. 物理アドレスをコピー

1. 検索サイトに貼り付け
　　[MACアドレス検索](https://uic.jp/mac/)
Acceptance Test Specification of Diagnostic Services, No.627, AUTOSAR R21-11(308) CP

Acceptance Test Specification of Diagnostic Services, No.627, 2021-11

https://www.autosar.org/fileadmin/user_upload/standards/tests/1-2/AUTOSAR_ATS_DiagnosticServices.pdf

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

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

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

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

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

# 用語(terms)
|Term|Description|
|:--|:--|
|AT |Acceptance Test
|CAN| Controller Area Network
|ECU| Electronic Control Unit
|ICC1| Implementation Conformance Class 1 (whole BSW & RTE)
|ICC2 |Implementation Conformance Class 2 (functional cluster of BSW)
|ICC3 |Implementation Conformance Class 3 (individual BSW modules)
|IUT |Implementation under test
|LT |Lower Tester
|NM |Network Management
|PCO |Point of Control and Observation
|PDU| Protocol Data Unit
|RfC| Request for Change
|Rx| Reception
|SUT| System Under Test
|SWC |Software Component
|TCP |Test Coordination Procedures
|Tx| Transmission
|UT| Upper Tester
## 英日
日本語は仮訳

T.B.D.

# 参考(reference)
Requirements and Specifications of  Diagnostics  should be listed.
Specification on test methods and test standards should be listed.
Acceptance Test Specification of Communication on LIN bus, No.667, AUTOSAR R21-11(307) CP

Acceptance Test Specification of Communication on LIN bus, No.667, 2021-11

https://www.autosar.org/fileadmin/user_upload/standards/tests/1-2/AUTOSAR_ATS_CommunicationLin.pdf

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

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

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

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

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

# 用語(terms)
|Term|Description|
|:--|:--|
|AT| Acceptance Test
|ECU |Electronic Control Unit
|LIN |Local Interconnect Network
|LT |Lower Tester
|PCO |Point of Control and Observation
|PDU |Protocol Data Unit
|Rx| Reception
|SUT |System Under Test
|SWC| Software Component
|TCP |Test Coordination Procedures
|Tx |Transmission
|UT |Upper Tester
## 英日
日本語は仮訳

T.B.D.

# 参考(reference)
Requirements and Specifications of  LIN should be listed.
Specification on test methods and test standards should be listed.
Acceptance Test Specification of Communication on CAN bus, No.632, AUTOSAR Tests 1-2 (306) CP

Acceptance Test Specification of Communication on CAN bus, No.632, 2021-11

https://www.autosar.org/fileadmin/user_upload/standards/tests/1-2/AUTOSAR_ATS_CommunicationCAN.pdf

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

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

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

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

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

よく見たら、Tests 1-2 でした。一覧には印を打って数から引きます。


# 用語(terms)
|Term|Description|
|:--|:--|
|AT| Acceptance Test
|CAN |Controller Area Network
|ECU |Electronic Control Unit
|LT |Lower Tester
|NM| Network Management
|PCO |Point of Control and Observation
|PDU| Protocol Data Unit
|RfC| Request for Change
|Rx| Reception
|SUT| System Under Test
|SWC| Software Component
|TCP|Test Coordination Procedures
|Tx |Transmission
|UT| Upper Tester
## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Specification of Module Efficient COM for Large Data
AUTOSAR_SWS_LargeDataCOM.pdf
[2] Specification of RTE
AUTOSAR_SWS_RTE.pdf
[3] Specification of CAN Transport Layer
AUTOSAR_SWS_CANTransportLayer.pdf
[4] Requirements on Runtime Environment
AUTOSAR_SRS_RTE.pdf
[5] Requirements on Communication
AUTOSAR_SRS_COM.pdf
[6] System Template
AUTOSAR_TPS_SystemTemplate.pdf
[7] Requirements on Acceptance Tests
AUTOSAR_ATR_Requirements.pdf


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

# 文書履歴(document history)
ver. 0.01 初稿 　20220602
Vimの起動時間の計測方法

## はじめに

同僚にVimの起動時間を計測する方法を教えてもらったので、備忘録がてら紹介します。

## 環境

- ハード：MacBook Pro (16-inch, 2019)
- OS：macOS Monterey 12.4
- Neovim：v0.7.0

## 起動時間の計測

ターミナルで以下を実行するのみです。
Neovimの場合は `vim` でなく `nvim` としてください。

```shell-session
$ vim --startuptime startuptime.log +q
```

`startuptime.log` が作成されるので、開いて確認します。

```shell-session
$ vim startuptime.log
```

私のログで一部抜粋したものを載せます。

```log:startuptime.log
times in msec
 clock   self+sourced   self:  sourced script
 clock   elapsed:              other lines

000.015  000.015: --- NVIM STARTING ---
...
024.360  000.355  000.355: sourcing /usr/local/Cellar/neovim/0.7.0/share/nvim/runtime/indoff.vim
246.429  000.547  000.547: sourcing /usr/local/Cellar/neovim/0.7.0/share/nvim/runtime/syntax/synload.vim
...
319.162  000.299  000.299: sourcing /Users/{ユーザー名}/.cache/dein/repos/github.com/Shougo/dein.vim/autoload/vital/_dein/System/Job/Neovim.vim
735.417  478.538  468.481: sourcing /Users/{ユーザー名}/.vim/config/plugins.vim
...
786.106  000.003: editing files in windows
```

私のNeovimは起動に約0.8秒かかっています。
同僚たちは0.2秒ほどで終わっているのがほとんどなので、私の `.vimrc` はチューニングの余地があることがわかりました。

ボトルネックは以下の2箇所でした。

- `synload.vim`
- `plugins.vim`

後者は自分が作成したファイルなので調整できそうです。
しかし前者はNeovimに同梱されているファイルなので、どう調整すればいいかパッとはわかりません。

0.8秒だと特に気にならないですが、時間のあるときにチューニングしたいと思います。

確認が終わったらログファイルを削除します。

```shell-session
$ rm startuptime.log
```

## おわりに

これでVimの起動時間を計測できました。
みなさんも計測してみてください！

私が見つけたボトルネックのチューニング方法がわかる人がいたら、教えていただけると嬉しいです。
ECSでタスクが起動しない時にコンテナの中身を見たい！

## 概要
FargateでRailsアプリをデプロイしたのですが、ローカルでは発生しないエラーが表示されてしまう！
コンテナの中身が見たいけど、タスクが立ち上がれないから見れない！！
そんな時に実施した方法です。

## やり方
タスク定義を作成する際にエントリポイントとコマンドに下記の様に設定する。
- エントリポイント
    - ```  ["sh","-c"] ```
- コマンド
    - ``` ["df -h && while true; do echo \\\"RUNNING\\\"; done"] ```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155615/48851dfa-cfba-46e1-49e0-553efbf9f227.png)

タスクが起動したらECS Execでコンテナ内に入って、お好きにコマンドを実行してください！

## 説明
コマンド内で無限ループを行っているだけです。

## 参考
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs_run_task.html