OmniAICreator/Qiita-1.07M huggingface dataset:
Start-assist systems for diesel engines, ボッシュ自動車handbook 11版(76) p.954

Management for diesel engines ,Electronic Diesel Control , ボッシュ自動車handbook 11版(70)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines(内燃機関),642
Management for spark-ignition engines,800
Gasoline-engine operation with alternative fuels, 886
Management for diesel engines, 906

# Start-assist systems for diesel engines
p.954
## Preheating systems for passenger cars and light commercial vehicles 
## Flame start systems for commercial- vehicle diesel engines 
## Grid heater for commercial-vehicle diesel engines

# Reference
参照なし


# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

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

# 文書履歴(document history)
ver. 0.01 初稿 　20221027

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
T12ステーションはんだごてHack（その2）ファームの書込み

# はじめに
前回の記事で、Hack に使える T12 ステーションはんだごてオリジナルキットAV TOKYOはんだごてを組立て、Hackに必要なビルド環境を構築するところまでを説明しましたが、あれから早1年もたってしまいました。
本記事は前回の続きでカスタムファームウェアを動かすところまで行く予定です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/fb23b1b8-a563-ee4a-bd6e-b2cee97b3d1d.png)
# <font color="red">※注意！ 本記事に従いカスタムファームウェアを導入すると、元のファームウェアに戻すことはできません。自己責任でお願いします。
</font>
# 関連記事
[T12ステーションはんだごてHack（その１）ビルド環境構築](https://qiita.com/pokibon/items/63ebfa3937a0bdc1ff1b)
[T12 ステーション型はんだごてをHackする](https://pokibon3.github.io/T12_SolderStation/#0)

# まとめ
とりあえず、カスタムファームウェアを書き込むところまで
* 開発環境の見直し
* カスタムファームウェアのビルド
* T12ステーションはんだごてへの書込み
* 調整（）

# 開発環境の見直し
## STM32CubeIDE
STM32用統合開発環境 STM32CubeIDEはこの記事を書いた時点で最新の1.9.0を使用しました。
インストールは標準のままでOKです。

[STM32CubeIDE st-stm32cubeide_1.9.0_12015](https://www.st.com/ja/development-tools/stm32cubeide.html)

## ST-Link
ファームウェア書込み用に以下のユーティリティをダウンロードしインストールしておきます。
[ST-LINK utility 4.6.0](https://www.st.com/ja/development-tools/stsw-link004.html)

## カスタムファームウェアの導入
[STM32 Soldering Station Firmware](https://github.com/deividAlfa/stm32_soldering_iron_controller)をGitHubからcloneまたはダウンロードします。本記事の執筆時点で、最新のバージョンはv1.02です。

# カスタムファームウェアのビルド
* カスタムファームウェアを展開したフォルダをコマンドプロンプトで開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/3c7e37b9-330f-9f91-b5f5-06621b8686ea.png)

* Building_script.batを起動します。
メニューが表示されますので、AV TOKYOはんだごての場合は「[8]Quicko103 SSD1306」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/78813a3e-ed73-dbc9-4391-21d1ed17517b.png)
* Run Optionsは「[3]  Copy files, run CubeMX and compile」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/ecc71a14-23c8-2fc7-6cd4-fb3d9897f99a.png)
* ビルドが完了すると以下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/94fb3139-078a-6ec8-3a65-611078ce2feb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/ba21f774-a26a-afa1-a518-0c2d553d36de.png)

# T12ステーションはんだごてへの書込み
* ST-Linkの接続
はんだごてのコントローラ基板にST-Link用のピンヘッダを[過去の記事](https://qiita.com/pokibon/items/63ebfa3937a0bdc1ff1b)を参考にはんだ付けし、ST-Linkを接続します。尚、過去の記事ではRST端子も接続しましたが、個体によっては動作が不安定になるため接続しないでください。RSTを接続しない場合は、書き込み後、電源を再投入してプログラムを起動する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/ec9c0a43-2b0d-dd77-6491-d76b0f8140ad.png)

* ST-Link Utilityの起動
ST-Linkを起動し、「Target」メニューの「Option Byte」を開き、「Read Out Protection」を「Disabled」に設定し「Apply]ボタンを押下します。これでFLASHの書込みプロテクトが解除されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/9ed44e9f-4ee0-6c4f-e3a2-e0d02e18ca59.png)
* カスタムファームウェアの書込み
必要に応じてイレースを行った後、先ほどビルドしたカスタムファームウェアを読出し、「Program」ボタンを押下し書込みを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/7b5b90a5-ce0f-e78b-80d1-1cfdc9989fa9.png)

* 動作確認
電源を再投入し、以下のオープニングメッセージが表示されれば完了です。
![IMG_2900.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/423bdeff-eeae-cf07-9f7f-86efcae5a02c.jpeg)

# 調整
起動後、メニューからキャリブレーション等の調整が必要になりますが、本記事では省略します。
macOS Venturaで Your Command Line Tools (CLT) does not support macOS 13. になったら

# 対応策

Command Line Tools for Xcodeのバージョンが14.0のままなはずです。
ですので、https://developer.apple.com/download/all/ にアクセスして、Command Line Tools for Xcode 14.1 Release Candidate 2 をダウンロードして、インストールしました。

再度、brew upgradeしたら、エラーは解消します。
Time-controlled single-cylinder pump systems, ボッシュ自動車handbook 11版(74) p.944

Management for diesel engines ,Time-controlled single-cylinder pump systems , ボッシュ自動車handbook 11版(74)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines(内燃機関),642
Management for spark-ignition engines,800
Gasoline-engine operation with alternative fuels, 886
Management for diesel engines, 906

# Time-controlled single-cylinder pump systems
p.944
## Unit-injector system for passenger cars 
## Unit-injector system for commercial vehicles
## Unit-pump system for commercial vehicles
## Electronic control 

# Reference
参照なし


# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

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

# 文書履歴(document history)
ver. 0.01 初稿 　20221027
Common-rail injection system, ボッシュ自動車handbook 11版(73) p.924

Management for diesel engines, Common-rail injection system, ボッシュ自動車handbook 11版(73)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines(内燃機関),642
Management for spark-ignition engines,800
Gasoline-engine operation with alternative fuels, 886
Management for diesel engines, 906

# Common-rail injection system(注入系)
p.924
## System overview 
## Injectors 
## High-pressure pumps 
## Rail 
# Reference
参照なし


# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

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

# 文書履歴(document history)
ver. 0.01 初稿 　20221027

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
WSL Centos8Stream

# Centos8Stream

[CentOS-WSL](https://github.com/mishamosher/CentOS-WSL/releases/tag/8-stream-20220125)

DL : CentOS8-stream.zip

```bash
unzip CentOS8-stream.zip
cd CentOS8-stream
gzip -d rootfs.tar.gz
```

参考サイトとかは以下のコマンドで「AppData」を利用するものが多いが容量がすくないので
D:driveを設定する。

```bash
wsl --set-default-version 2
wsl --import CentOS8-stream "$env:USERPROFILE\AppData\Local\Packages\CentOS8-stream" "$env:USERPROFILE\Downloads\rootfs.tar" --version 2 ; 
wsl -d CentOS8-stream
```

*C:Drive 使わない*

```bash
mkdir -p D:\AppData\Local\Packages\
```

```bash
wsl --set-default-version 2
wsl --import CentOS8-stream "D:\AppData\Local\Packages\CentOS8-stream" "D:\WORK\wsl\CentOS8-stream\rootfs.tar" --version 2
wsl -d CentOS8-stream
```

もう使える。以降以下のコマンドで利用できるようになる。
ダウンロードしたファイルなどはすべて削除してもOK

```bash
wsl -d CentOS8-stream
```

## 以下にファイルシステムが作成されている。

```bash
ll D:\AppData\Local\Packages\CentOS8-stream
-rw-a-- 1,392,508,928 Oct 27 20:26:26 ext4.vhdx
```
Low-pressure fuel supply , ボッシュ自動車handbook 11版(71) p.916

Management for diesel engines ,Electronic Diesel Control , ボッシュ自動車handbook 11版(70)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines(内燃機関),642
Management for spark-ignition engines,800
Gasoline-engine operation with alternative fuels, 886
Management for diesel engines, 906

# Low-pressure fuel supply （低圧燃料供給）
p.916
## Fuel supply and delivery
### Electric fuel pump
### Gear pump
### vane type supply pump
### Locking vane pump
### Low pressure control valve 

# Reference
参照なし


# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

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

# 文書履歴(document history)
ver. 0.01 初稿 　20221027
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
Electronic Diesel Control, ボッシュ自動車handbook 11版(70) p.906

Management for diesel engines ,Electronic Diesel Control , ボッシュ自動車handbook 11版(70)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines(内燃機関),642
Management for spark-ignition engines,800
Gasoline-engine operation with alternative fuels, 886
Management for diesel engines, 906

# Electronic Diesel Control
p.906
## Description of the engine management system 
## Operating principle and architecture
## Data processing
### Operating principle
### Torque structure in th EDC
### Examples of important functions in th EDC
### Data exchange with other systems
## Application

# Reference
[1] K. Reif (Editor), Dieselmotor management, 6th Edition, Verlag Springer Vieweg, 2019 

https://www.beck-shop.de/reif-bosch-fachinformation-automobil-dieselmotor-management/product/27381496


http://randolphtoom.com/ENSAIS/Diesel%20Engine%20Management.pdf


# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

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

# 文書履歴(document history)
ver. 0.01 初稿 　20221027

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
openSUSEでTeXの環境構築

## 概要
日本語も書かれている.texファイルをコンパイルしてpdf形式で出力する。

## 環境
- WSL2
- openSUSE Leap 15.4

## 導入するもの
- platex
- dvipdfmx
- 日本語サポートパッケージ
- 日本語フォント

## 必要なパッケージのインストール
```shell
sudo zypper refresh
sudo zypper install texlive-platex-bin texlive-dvipdfmx-bin texlive-japanese-otf texlive-collection-langjapanese
```

## コンパイルしてpdf出力
```shell
platex DOCUMENT.tex && dvipdfmx DOCUMENT.dvi
```
プログラミング学習参考サイト



https://qiita.com/hatai/items/34c91d4ee0b54bd7cb8b






https://zenn.dev/nameless_sn/articles/awesome_python_github_repo




https://zenn.dev/nameless_sn/articles/important_10_github_repositories




https://github.com/EbookFoundation/free-programming-books/blob/main/books/free-programming-books-ja.md#java
Engines fueled by alcohol, ボッシュ自動車handbook 11版(69) p.900

Gasoline-engine operation with alternative fuels, Engines fueled by alcohol , ボッシュ自動車handbook 11版(69)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines(内燃機関),642
Management for spark-ignition engines,800
Gasoline-engine operation with alternative fuels, 886
# Engines fueled by alcohol
p.900
## Application 
## Ethanol as an alternative fuel 
## Flex-fuel concepts for the markets 
## Flex-fuel components 
# Reference
[1] http://www.itecref.com/pdf/Brazilian_ANP_Fuel_Ethanol.pdf

リンク切れ。名無し。


[2] A. Boge, W. BOge, Handbuch Maschinenbau.23rd Ed. Verlag Springer vieweg, 2018

[3] K.H. Grote, B.Bender, D.Gohlich (Editors) Dubbel Taschenbuch fur den Maschnenbau, 25th Ed. Verlag Springer View

[4] GVR Gas Vehicle Report June 2012
検索みつからず。



# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

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

# 文書履歴(document history)
ver. 0.01 初稿 　20221027

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
PC版ChromeでWebページ全体をスクリーンショットする方法

# 結論
以下の手法でスクリーンショットのPNGファイルがダウンロードされる。

## Windows
1. [F12]でデベロッパーツールを開く ( [Ctrl] + [Shift] + [i] でも可 )
1. [Ctrl] + [Shift] + [p]
1. 「Capture full size screenshot」を入力して選択 (full だけ入力したら出てくる)

## mac
1. [F12]でデベロッパーツールを開く ( [Command] + [option] + [i] でも可 )
1. [Command] + [Shift] + [p]
1. 「Capture full size screenshot」を入力して選択 (full だけ入力したら出てくる)
vagrant（awslinux2） + gitlab環境構築とaws ec2でgitlabインストール

# 概要

awsEC2環境でgitlabを入れたいので練習がてらvagrantで構築可能か試してみる。
と同時に実際にEC2にも入れてみたので備忘録として残しておく。

## 使用環境
### ローカル
* win8
* vagrant
* bento/amazonlinux-2
* メモリ：3GB
※メモリが低いと動かない。

### EC2
* t3.medium
* メモリ：4GB
* CPU：2コア

## 手順
1．root権限でログイン
2．必要なツールをインストール
3．gitlabをインストール
4．設定ファイルを変更（gitlab.rb）
5．gitlabを起動
6．ブラウザからアクセス確認

### root権限でログイン
vagrant（EC2）環境へログイン後ルート権限にスイッチ

~~~:Terminal
sudo su
~~~

### 必要なツールをインストール
アップデートを実行後に各種インストールをする。

~~~:Terminal
yum update
yum install -y curl policycoreutils-python openssh-server cyrus-sasl-md5 cyrus-sasl-plain
~~~

:::note info
公式ドキュメントだと↓も実行するように書かれていたが実行不可だったのでとりあえずスルー

~~~:Terminal
systemctl enable sshd
systemctl start sshd
firewall-cmd --permanent --add-service=htt
firewall-cmd --permanent --add-service=https
systemctl reload firewalld
~~~
:::

### 公式ドキュメント
https://about.gitlab.com/install/#amazonlinux-2


### postfixの設定
今回も外に飛ばす予定はないのでmailtrap側にメールを流す形で設定します。
https://qiita.com/akisute_sara/items/8f9e75a045b3d86d16ea

### gitlabをインストール
~~~:Terminal
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
yum install -y gitlab-ce
~~~

### 設定ファイルを変更（gitlab.rb）
まずはバックアップ
~~~:Terminal
cp -pr /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.bk
~~~

そして編集へ…
~~~:vim
external_url 'http://gitlab.example.com'
↓
external_url = 'http://local-git.com'
~~~
※「=」が無いため追加

~~~:vim
# postgresql['enable'] = true
# postgresql['listen_address'] = nil
# postgresql['port'] = 5432
# postgresql['shared_buffers'] = "256MB"
# postgresql['dir'] = "/var/opt/gitlab/postgresql"

↓

postgresql['enable'] = true
postgresql['listen_address'] = nil
postgresql['port'] = 5432
postgresql['shared_buffers'] = "256MB"
postgresql['dir'] = "/var/opt/gitlab/postgresql"
~~~


### gitlabを起動
設定の反映
~~~:Terminal
gitlab-ctl reconfigure
~~~

バージョン確認
~~~:Terminal
gitlab-rake gitlab:env:info
~~~

gitlab起動※起動しても数分待つ。
~~~:Terminal
gitlab-ctl restart
~~~

### ブラウザからアクセス確認
まずrootのパスワードを確認、表示されたpasswordを保存しておく
~~~:Terminal
cat /etc/gitlab/initial_root_password
~~~

インスタンスしたIPにアクセス
http://パブリックIP/


### 参考記事

https://qiita.com/sdozono/items/f34051ea2a88a92c8c53

https://qiita.com/Ajyarimochi/items/9dcaba108fb1bce3f019

https://qiita.com/c6tower/items/9a82c9c567784bd94ed8

https://teratail.com/questions/91262

https://www.gitlab.jp/blog/2022/05/27/initial-password/
【Mac】Finderでドットファイルを恒久的に表示させる方法

## ドットファイルを表示させる方法

Finderでドットファイルを表示させるには`⌘` + `⇧` + `.`を入力します。  

![CF728FAC-B23D-4529-AE71-532AA85ED3F6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/a26b9bd1-0850-4640-bdb1-28eaf6f72adc.png)

`⌘` + `⇧` + `.`を入力する。

![F8588E55-E9D1-4243-B04C-4377CEDBE974.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/5500d565-b64c-45b9-48da-c545f3130892.png)

ただしFinderを再起動すると再度ドットファイルが表示されなくなります。

## 再起動後も表示させる方法

再起動後にもドットファイルを表示させるためには以下のコマンドを実行します。  

```zsh:ターミナル
defaults write com.apple.finder AppleShowAllFiles true
```

実行後にFinderを再起動します。  

```zsh:ターミナル
killall Finder
```

これでドットファイルがデフォルトで表示されるようになります。  

設定を元に戻すには以下のコマンドを実行します。  

```zsh:ターミナル
defaults write com.apple.finder AppleShowAllFiles false
```

```zsh:ターミナル
killall Finder
```
C# でリクエストヘッダを指定しながら HTTP POST 送信

```#c
using System.Text;
using System.Net.Http;
```

```C#
HttpClient client = new HttpClient();

string url = "https://httpbin.org/post";

string parameters = "{" +
    " \"foo1\" : \"bar1\" ," +
    " \"foo2\" : \"bar2\" ," +
    " \"foo3\" : \"bar3\"  }";

var content = new StringContent(parameters, Encoding.UTF8, "application/json");å
client.DefaultRequestHeaders.Add("FOO", "BAR");

HttpResponseMessage response = await client.PostAsync(url, content);
var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Post, url);

var body = await response.Content.ReadAsStringAsync();
```


# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# Twitter

https://twitter.com/YumaInaura
CyberduckでEC2に接続する方法

## 設定する項目
![CleanShot 2022-10-27 at 19.14.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592040/22b944b4-de10-16b4-fcca-3106373cc79a.png)
### サーバー
パブリック IPv4 アドレスを設定
### ユーザー名
`ec2-user`
### パスワード
何も入れなくてOK
### SSH Private Key
`.ssh`フォルダに入れてあるpemファイルを設定する

これでアクセス可能です｡
IPv6のアドレスアーキテクチャ

# 勉強前の理解度
**ループバックアドレス**：自分自身を表すアドレス、IPv4で言うところの「127.0.0.1」
**リンクローカルユニキャストアドレス**：名前が長い
**ユニークローカルアドレス**：ローカルだけどユニークなIPアドレス
**グローバルユニキャストアドレス**：グローバルIPアドレスっぽい

# ループバックアドレス
　[ここ](https://qiita.com/Miyu_kichi/items/9b48f917ea1f2413a657)のループバックアドレスとほぼ同義。**自分自身を表すIPアドレス**。Ipv4では「127.0.0.1」だが、IPv6では「::1」である。ホスト名はIPv4と同じく「localhost」。

# リンクローカルユニキャストアドレス
　プライベートIPアドレスのように、**同一データリンク内で使用するIPアドレス**。ルーターに中継されない。
　各組織ごとに40bitのグローバルIDを含めるが、これが重複すると組織のネットワークを統合することができないため、重複の可能性が低くなる計算方法が推奨されている。アドレス空間は「fe80::/10」。

# ユニークローカルアドレス
　**同一ネットワーク内で使用するIPアドレス**。ルーターに中継されない。アドレス空間は「fc00::/7」だが、通常は「fd00::/8」を使用する。なお、「fd00::/8」は未定義で、現在未使用である。

> 機械制御などの制御系ネットワークや、金融機関などの勘定系ネットワークなどインターネットとの通信を想定していない環境や、セキュリティを高めるためにインターネットとはNATやゲートウェイ(プロキシ)経由で通信する企業内のネットワークなどに利用されます。

[マスタリングTCP/IP](https://www.ohmsha.co.jp/tbc/text_series_0201.htm)より

# グローバルユニキャストアドレス
　**インターネットと通信を行うためのIPアドレス**で、インターネット上で一意となる。アドレス空間は上記とマルチキャストアドレス、「::/128」を除いたものである。先頭3bitが「001」で、「2000::/3」。
* 「2001::/16」：IPv6のインターネットを介した通信用に一般に割り当てられている。
* 「2002::/16」：6to4用のIPアドレスで、IPv4ののホストにIPv6パケットを送受信させるために使用されている。
* 「2003::/16 ～ 3FFD::/16」：現在未割り当てで、使用されていない。

# 参考
[第1回　IPv6の概要：Windows管理者のためのIPv6入門（2/3 ページ） - ＠IT](https://atmarkit.itmedia.co.jp/ait/articles/1109/22/news115_2.html)
[マスタリングTCP/IP](https://www.ohmsha.co.jp/tbc/text_series_0201.htm)
[6to4 ‐ 通信用語の基礎知識](https://www.wdic.org/w/WDIC/6to4)
初学者によるGETメソッド、POSTメソッドの違い

PHPの学習を進める際に、初めに引っかかり、判別がややこしかったのが「GETメソッド」と「POSTメソッド」の違いです。今回はその違いを調べてみました。コードを書く際に、はっきりと理解して、適切に使い分けられるようになりたいと思います。

GETメソッドとPOSTメソッドの違いを考える前に、前提として「HTTP」、「HTTP通信」について理解する必要があります。
# HTTPとは？
**HTTP**は「HyperText Trasfer Protocol」の略称で、WebサーバーとWebブラウザの間で通信し、情報をやりとりするための通信プロトコルです。
簡単に言うと、インターネットでサーバーとブラウザが通信するときに使われるルール、約束事のようなものです。
### HTTP通信
HTTPを使って通信することを**HTTP通信**と呼びます。
例えば、ホームページを閲覧する時には、**クライアント**である「ブラウザ（Google ChromeやMicrosoft Edge）」から「このページが見たい！」という要求を送ります。これが**HTTPリクエスト**です。
その要求に対して、情報やデータを提供することを**HTTPレスポンス**と言います。
レスポンスを返すコンピュータやソフトウェアのことを**サーバー**と呼びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730913/5a8b327b-a339-6c1d-90f5-9abfe0384697.png)
※画像はいらすとやさんのものを使用させていただきました。ありがとうございます。

「GETメソッド」や「POSTメソッド」は、クライアントからサーバーに向かう「HTTPリクエスト」の種類の一つです。

# GETメソッド
HTTPリクエストの一種であり、サーバーから情報を取得したいときに使うメソッドです。
クライアント側からサーバー側に送信するデータを特定の形式でURLの末尾に付与します。それを受け取ったサーバーがレスポンスとして、要求された情報を返します。
このような送信するデータを特定の形式で表示したものを、**リクエストパラメータ**と言います。
URLに対して、「?」以下にパラメータを連結します。パラメータが複数ある場合は、「&」で結合し表示します。

リクエストパラメータを送信する場合は、以下のように表示します。
「?」以下が送信するデータを表します。この場合は、「idが1」、「nameがhoge」のデータを要求していることになります。

```
http://localhost:0000/index.html?id=1&name=hoge
```
### GETメソッドの特徴
* サーバーから情報を取得する際に使用する
* URLの末尾に入力したデータが表示されるので、他人に見られたくない情報（IDやパスワード等）の送信には不向き
* 渡した値がそのまま履歴として残る
* 送信できるデータ量や種類に限りがある（サーバーから取得するデータを絞り込むために必要な条件）
  * テキストデータのみ送信可能（テキストデータ以外のバイナリデータの送信は不可）

# POSTメソッド
同じくHTTPリクエストの一種であり、データベースへの値の格納など、クライアントが入力した情報をサーバーへ登録したいときに使用します。
GETメソッドとは違い、リクエストパラメータは**リクエストボディ**に格納して送信されます。つまり、URLにパラメータが表示されずに値の送信が行われます。
実際には、フォームに入力したデータを送るときなどに使われます。

POSTメソッドでは以下のように、リクエスト本文のボディ部分にデータが含まれる形となり、URLには表示されません。
この場合は、「say=Hi&to=Mom」がサーバーに送信したいデータとなります。

```
//リクエストヘッダ
POST / HTTP/2.0
Host: foo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

//リクエストボディ
say=Hi&to=Mom
```
参照サイト：https://developer.mozilla.org/ja/docs/Learn/Forms/Sending_and_retrieving_form_data

### POSTメソッドの特徴
* データベースへの値の格納など、サーバーへ情報を登録するときに使用する
* 送るデータ量が多い場合に使用する
* バイナリデータを送信する場合に使用する。これにより、画像や動画、音声ファイル等のテキストファイル以外のデータの送信が可能になる
* リクエストパラメータはリクエストボディに格納され、URLには表示されないため、IDやパスワードなど他人に見られたくない情報を送る場合に使用される

# まとめ・感想
:::note info
**GET**と**POST**の違い
**GET**
1\.指定したURLの情報をサーバーから受け取る。
2\.リクエストパラメータをURLの末尾に連結して、データを送信する。
3\.テキストデータのみ送信できる。
**POST**
1\.クライアントが入力した情報をサーバーに送る。
2\.リクエストパラメータは、リクエストボディに格納されデータを送信する。
3\.バイナリデータを送信することができる。
:::

GETメソッド、POSTメソッドの違いから、インターネット通信の基本であるHTTP通信について改めて調べて学ぶことができました。このように全体の仕組みを理解しておくことで、ただコードを書くだけでなく、「このような機能を付けたいからこう書くべきだ」「今この作業はこの動きを実現するために書いている」というように、自分で意味を理解しながら開発を進めることができると思いました。
また、調べるうちに一見「POSTを使うのかな」と思えそうな機能も、実はGETを使う場合があることも知りました。もっと学習を進めることで、適切なメソッドを適切なタイミングで使えるような知識を身に付けていきたいと思いました。
これ以外にもまだ、リクエストメソッドは存在するのでそちらもまた別の機会に調べてみたいと思います。

* 参考にした記事
https://developer.mozilla.org/ja/docs/Web/HTTP/Methods/GET
https://developer.mozilla.org/ja/docs/Web/HTTP/Methods/POST
https://developer.mozilla.org/ja/docs/Learn/Forms/Sending_and_retrieving_form_data
https://qiita.com/Sekky0905/items/dff3d0da059d6f5bfabf
https://medium-company.com/http-get-post-%E9%81%95%E3%81%84/
https://blog.senseshare.jp/get-post-method.html
Sales Enablementの初期設定で必ず言語を「英語」にしたほうがいいことだけを伝えたい

こんにちは。本橋です

私は今Salesforceの製品「Sales Enablement」の設定を行っています

どうかこの（マイナー？）製品「Sales Enablement」の初期設定を行う際言語を「英語」にしてください

### Sales Enablement初期設定でつまづいたところー「新しいサブドメイン」の設定


![サブドメイン01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/2db32020-2a9d-8ccf-cd4f-99aff411db97.png)


上記画面の際に「完了」ボタンを押しても画面がそのままで何も変わらない現象が起きました


サポートに問い合わせたところ「言語を英語にしてください」と言われました。
実際に英語に変換したらなぜか設定できました
（言語設定は画面の一番下から行えるよ）

![英語01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/b5383efe-92e5-1ceb-8157-e587e4c06ad7.png)


### おまけ


サブドメイン設定あとの設定

「ステップ２　イネーブルメントサイトをSalesforceに接続します」も言語を英語に設定しないと設定できませんでした。要注意してください

![　有効002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/5e1871f8-a583-4bad-6318-6d644e896f9a.png)
空間図形「2005熊本大学前期【1】」をsympyとFreeCADでやってみた。

座標空間内に4点...三角形PABの面積を最小...
オリジナル

http://kumamoto.s12.xrea.com/nyusi/kumadai_ri_2005.pdf#4

上と同じです。大学入試数学問題集成＞【1】

https://mathexamtest.web.fc2.com/2005/200510901/2005109010100mj.html 

# FreeCADのマクロで
sympyを使っています。
Pは線分CD上の点が、チェックしてありませんでした。
ねじれの位置、共通垂線です。チェックしたつもりです。正しいですか？
座標でチェックするべきでした。
画像が見にくくてすみません。勉強中です。

![png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/4767ff1f-d078-0f71-507f-b9c70e856984.png)

```python
import FreeCAD
import Part
import Draft
import Mesh
#########################################################################################################
# 計算
from sympy import *
var('x')
A=Point3D(3,0,0)
B=Point3D(0,2,1)
C=Point3D(0,2,0)
D=Point3D(3,2,0)
P=Point3D(x,2,0)
cosAPB=(A-P).dot(B-P)/(P.distance(A)*P.distance(B))
print("#(1)",cosAPB.expand())
SS=((P.distance(A)*P.distance(B))**2-(A-P).dot(B-P)**2).simplify()
ans=solve(diff(SS),x)[0]
print("#(2)",Rational(1,2)*sqrt(SS.subs({x:ans})))
#(1) x**2/(sqrt(x**2 + 1)*sqrt(x**2 - 6*x + 13)) - 3*x/(sqrt(x**2 + 1)*sqrt(x**2 - 6*x + 13))
#(2) sqrt(70)/5
##########################################################################################################
def myNejire(A,vA,B,vB):
    p1 = Matrix([ A.x, A.y, A.z])
    p2 = Matrix([ B.x, B.y, B.z])
    v1 = Matrix([vA.x,vA.y,vA.z])
    v2 = Matrix([vB.x,vB.y,vB.z])
    return abs((p2 - p1).dot(v1.cross(v2)) / v1.cross(v2).norm())
P=P.subs({x:ans})
print("#垂線計算",Line(A,B).distance(P))
print("#共通垂線",myNejire(A,(B-A),C,(C-D)))
#垂線計算 2*sqrt(5)/5
#共通垂線 2*sqrt(5)/5
##########################################################################################################
### 3D作図
def myXYZ2Txt(A):
    return '(' + str(A.x) + ',' + str(A.y) + ',' + str(A.z) + ')'
def myTxtXYZ(A,myWedgei):
    P5x=float(A.x)
    P5y=float(A.y)
    P5z=float(A.z)
    p5 = FreeCAD.Vector(P5x, P5y, P5z)
    myText = Draft.makeText(myWedgei, p5)
    myText.Label = myWedgei
    FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.15 mm'
def myLine(A,B):
    Ax,Ay,Az=float(A.x),float(A.y),float(A.z)
    Bx,By,Bz=float(B.x),float(B.y),float(B.z)
    pl = FreeCAD.Placement()
    pl.Rotation.Q = (0.4247081540122249, 0.17592004639554645, 0.33985110062924484, 0.8204732460821097)
    pl.Base = FreeCAD.Vector(-3.9166066876399563, -2.1670824762243774, 1.7495260956243028)
    points = [FreeCAD.Vector(Ax,Ay,Az), FreeCAD.Vector(Bx,By,Bz)]
    line = Draft.make_wire(points, placement=pl, closed=False, face=True, support=None)
    Draft.autogroup(line)
def myLine_S(*args):
    for i in range(1,len(args)):
        myLine(args[i-1],args[i])
    return 0
def myTxtXYZ_S(*xy_tx):
    for i in range(1,int(len(xy_tx)/2)+1):
        myTxtXYZ(xy_tx[2*i-2],xy_tx[2*i-1]+myXYZ2Txt(xy_tx[2*i-2]) )
myTxtXYZ_S(A,"A",B,"B",C,"C",D,"D",P,"P")
myLine  (C,D)
myLine_S(A,P,B,A)
doc = App.activeDocument()
App.ActiveDocument.addObject("App::Origin", "Origin")
App.ActiveDocument.getObject('Origin').Visibility = True
App.ActiveDocument.recompute()
Gui.activeDocument().activeView().viewAxonometric()
Gui.SendMsgToActiveView("ViewFit")
```
Lightsail で nginx + Let's Encrypt 設定のメモ

## 背景

Lightsail だと nginx があって, ぱぱっと時短で https サーバー建てられそうなので Lightsail でサーバ選んでみた.

Let's Encrypt を apt あたりで入れて certbot だとそのままでは証明書インストールと更新できん... :angry:

## 原因

Lightsail で nginx など Linux 系選ぶと, Ubuntu ベースの bitonami(AWS が買収した?)なディストリビューションとなり, nginx のサービス設定や起動あたりは systemctl ではなく(バックエンドは systemd つかっているかもであるが) `/opt/binami/***` と `/opt/bitnami/ctlscript.sh` で行うようになっています.

一応 `certbot` 自体は bitnami の設定を扱えるようですが, nginx(web server)の start と stop はできないため, `certbot` で証明書インストールや更新しようとしても web サーバーが建てられない(or 他に起動している)となってしまいます.

## 方法

https://qiita.com/itty-star/items/46fe626831cb5b7494c7

ありがとうございます.

一旦 `/opt/bitnami/ctlscript.sh stop` でサービス停めないといけませんでした.

サーバー建てる前に, apt とかではなくて bitnami で certbot のツール入れて webroot で設定しておいて無停止にできるようにしておくとよさそうです!

## 証明書自動更新する

https://qiita.com/memomaruRey/items/1900f59bb99e9ba25bf0

ありがとうございます.
/var/log/auth.logがない話

SSH設定しているときに、/var/log/auth.logを確認しようとおもったところ下記エラーが出ました。

```
# cat /var/log/auth.log
cat: /var/log/auth.log: No such file or directory
```

そもそもログが出力されていないので、一瞬焦りましたがもしかして/var/log/secureのほうに出力されているのでは？と思い、確認したらビンゴでした。

このログの出力設定を行っているのが、/etc/rsyslog.confになります。なので、viで編集していくことで/var/log/auth.logにも書き換えることもできます。
今のまま/var/log/secureでもよいとのことであれば、編集は不必要です。

```
# cat /etc/rsyslog.conf
～省略～
# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　↑ここを/var/log/auth.logへ書き換え

# systemctl status rsyslog.service
# systemctl restart rsyslog.service

プロセスの再起動をかけ、設定反映されていること確認
```

以上、/var/log/auth.logがない話でした。
event.target と型の話

知っている人からすれば「だから何」という話ですが、ちょっと面白かったので小ネタを。

:::note warn
この記事のサンプルコードは React TSX で書いていますが、今回の話題では React は関係ないです
:::

React + TypeScript を書いていたとき、下記のコードで型エラーが出ました。

``` tsx
// Property 'src' does not exist on type 'EventTarget'.ts(2339)
<img src="foo.png" onClick={(event) => console.log(event.target.src)} />
```

これを、こう書き換えたら型エラーは消えました。

``` tsx
// エラーなし
<img src="foo.png" onClick={(event) => console.log(event.currentTarget.src)} />
```

一瞬「どちらも `event.target` には `HTMLImageElement` が入るはずなのに何故変わる？」と思ったのですが、少し考えれば「それはそう」となりました。

この振る舞いの違い、説明できるでしょうか？

<del>この記事は書きかけなので解説はあとで書きます (もしくは誰かがコメントしてくれる)</del>  
→ コメントに書きました
git コミットメッセージ一行目の書き方

## 背景
「インプットするためには、強制的にアウトプットする」という意識を持って、今回git コミットメッセージ一行目の書き方をまとめました.

## 前提
- 正解というものはなく、伝達すべきことを伝えておけば十分です。
- 日本語でも英語でも、どちらでも良いと思っています、スキルとして語学力向上のため、個人的に英語の方が好きです。
- 抽象的な、 情報量が少なすぎて分かりにくいメッセージではなく、細かくて具体的な変更内容がメッセージに書かれるの方が良いかも。


## 通常利用

- feat/add : 新規機能（ファイル）追加 
- fix：バグ修正
- remove：削除（ファイル）
- revert：変更取り消し
- improve/perf: パフォーマンス向上関連
- update/upgrade：バージョンアップ
- chore: ビルド、補助ツール、ライブラリ関連
- refactor: 仕様に影響がないコード改善(リファクタ)
- style: 空白、フォーマット、セミコロン追加など
- docs: ドキュメントのみの変更
- test: テスト関連
- change：（AをBに）変更する
- move:（AをBに）移動する
- clean：整理（リファクタリング等）
- disable：無効化（コメントアウト等）
Apacheとnginxの違い

apache（古くから使われてる）
重い処理が得意
プロセスとスレッドが違う。プロセスは枠を取り、その枠での処理がスレッド
代表的な２モデル
・Preworkモデル
→シングルスレッド→→お客さん来る前から準備しておく
・workerモデル
→マルチスレッド→→一気にさばく
nginx
ロシアでリリースされたapacheより10年遅れてきた
・1つのプロセスで複数のアクセスを処理できる、ノンブロッキングI/Oって技術で行われてる
並列処理できるよってこと？なんかしてる間に別の何かする才能が長けてる

nginxはLINE、Adobeとか
Apacheは老舗なとこでは主流レベルらしい。大量なアクセスがあるSNSとかには向いてない

Webサーバーのシェア
apache 約31%
nginx 約33%

PHP環境だと大体LAMP、MAMP、XAMP環境で開発することが多いから
大体Apache

現段階の知識である程度差別化できたのでこれからは触わりながらそれぞれの詳しい仕組みを理解しつつ、復習するときに違いについて深掘りすること
python:unittestで例外をテストする

タイトル通りなのですが、pythonのunittestで例外が発生するケースのテストについて、サンプルと結果をメモします。

参照: https://docs.python.org/ja/3/library/unittest.html#unittest.TestCase.assertRaises

## テスト対象コード

良い題材とは言えませんが、シンプルに引数によって例外を変えています。


```main.py
class MyException(Exception):
    pass

def execute(value):
    if value == 0:
        raise MyException

    if value == 1:
        raise MyException('value is 1')

    raise Exception
```

## テストコード

```test_main.py
import unittest
from main import execute, MyException

class MainTests(unittest.TestCase):
    def test_execute(self):
        # (1)引数=0...MyException
        with self.assertRaises(MyException):
            execute(0)

        # (2)引数=0...MyExceptionだが、基底クラスであるExceptionを指定してもOK
        # (指定クラスのサブクラスであればOK)
        with self.assertRaises(Exception):
            execute(0)

        # (3)引数=1...MyException('value is 1')
        with self.assertRaises(MyException) as cm:
            execute(1)
        # コンテキストマネージャが保持している例外オブジェクトのargsプロパティを確認できる
        self.assertEqual(cm.exception.args[0], 'value is 1')

        # (4)引数=2...Exception
        with self.assertRaises(Exception):
            execute(2)
```


## ファイルツリー

```
$ tree .
.
├── main.py
└── test_main.py
```

## テスト実行

```sh
$ python -m unittest
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
```


## ポイント

- self.assertRaises()に指定する例外クラスは基底クラスでもテストパスする
- 必要であれば、例外パラメータの内容も検査できる
openpyxlで作ったExcelファイルがエラーになってしまう

# 環境
<!-- 問題が発生したOS・ソフトウェアのバージョン等 -->
- Windows: `10 Education 21H2`
- Excel: `バージョン 2209`
- Python: `3.9.6` (pyenv + pipenv)
- Pipenv: `version 2021.11.23`
- openpyxl: `3.0.10`

# 問題
<!-- 具体的にどのような問題が発生したか, どのようなコマンドを試したか -->
- スクレイピング結果をopenpyxlでExcelファイルとして出力した
- そのExcelファイルを開くときに `'<ファイル名>' の一部の内容に問題が見つかりました。可能な限り内容を回復しますか？ブックの発行元が信頼できる場合は、[はい] をクリックしてください。` というダイアログが開いてしまう
  - ↓ 修正時のログ
  - `削除されたレコード: /xl/worksheets/sheet1.xml パーツ内の数式`
  - `削除されたレコード: /xl/worksheets/sheet4.xml パーツ内の数式`
  - `削除されたレコード: /xl/worksheets/sheet6.xml パーツ内の数式`
  - `削除されたレコード: /xl/worksheets/sheet14.xml パーツ内の数式`
  - `削除されたレコード: /xl/worksheets/sheet16.xml パーツ内の数式`
  - `削除されたレコード: /xl/worksheets/sheet20.xml パーツ内の数式`

# 解決の経緯
<!-- どのような経緯で解決できたのか -->
- 同じような問題を調べたところ、「シート名に全角括弧が含まれている」や「使えない文字が含まれている」ことが原因になるらしい
  - しかしこれらの問題を消してもエラーは消えない
- xlsxファイルをzipファイルに変換して、修正前と後を比較すると修正部分がわかるらしい
  - openpyxlとExcel間で文字の表現方法が少し異なるようで、純粋に比較してもわからなかった
- 原因がわかった方法
  - 問題が発生していたシート内の列を徐々に減らし、問題となっている列を特定
  - その列の文字列を色々と変更してみて実験した

# 原因
<!-- どのようなことが原因だと考えられるか -->
- セルの先頭にイコール `=` が付いているとエラー
- openpyxlはデフォルトではセルを数値として処理しているらしく、`=` が付いていると数式として認識してしまう？
- その結果、誤った数式であるのでエラーが出てしまう？

# 解決法
<!-- どのようなことをすれば解決できるか, 具体的なコマンド等 -->
- 以下のどちらか (詳細は参考URLをチェック)
  1. セルの先頭の `=` を `'=` に変換
  2. セルの書式を文字列にする

# 参考
<!-- この問題を解決するにあたってどのようなソースを参考にしたか, タイトル・URL等 -->
- [OpenPyXlで生成したファイルがExcelで開けないパターンとその対処 - Qiita](https://qiita.com/thiroto/items/0d090fb55dd9510a7364)
Bootstrapのnavbarを固定する方法

上で固定する場合は「fixed-top」をnavタグに指定する。

```html
<nav class="navbar navbar-light bg-light fixed-top">
  <div class="container-fluid">
    <span class="navbar-brand mb-0 h1">Navbar</span>
  </div>
</nav>
```

下で固定する場合は「fixed-bottom」をnavタグに指定する。

```html
<nav class="navbar navbar-light bg-light fixed-bottom">
  <div class="container-fluid">
    <span class="navbar-brand mb-0 h1">Navbar</span>
  </div>
</nav>
```
UnityのAndoidアプリでコンビニ決済を無効にする対応

## はじめに
Androidではアプリ上で決済処理を行うためのBilling Libraryの最低バージョンが定期的に更新されており
定期的にBilling Libraryのバージョンを更新する必要があります。
(2022年11月から最低バージョンはBilling Library4.0になります)

UnityではUnity IAPを用いて決済関連の対応を行うことができ、本来はUnity IAPのパッケージを更新すれば良いのですが
Billing Library v3以降を含んだバージョンのUnity IAPを使用すると
「コンビニ決済」機能が勝手に有効になり特殊な対応が必要になってしまいます。

[参考サイト](https://sassembla.github.io/Public/2021:08:17%2014-58-43/2021:08:17%2014-58-43.html)

調べてみたところ「コンビニ決済に対応した」という記事は見つかるのですが
「コンビニ決済を無効にした」という情報が全く見つからなかったので
「コンビニ決済」機能を無効にし、Billing Libraryのバージョンを更新対応を行った内容をまとめました。

## 環境

* Windows11
* Unity 2019.4.26f1

## 使用しているUnity IAPバージョンを確認

Unity IAPのバージョンは「2.1.0」未満であれば問題ないとは思いますが
今回は「2.0.6」を使用しています。

上記のバージョンのパッケージを導入した状態で
ビルドが成功しapkのビルド、アプリの起動が可能で
決済まわり以外の動作に問題がないか確認しておくと良いです。

## Gradleを変更する

AndroidのビルドシステムであるGradleを使用します。
[Gradleについて(公式)](https://docs.unity3d.com/ja/2021.1/Manual/android-gradle-overview.html)
`ProjectSettings > Player > PublishingSettings > Build`
上記部分の各「Custom *** Gradle Template」のチェックボックスにチェックを入れることで
Gradle設定の変更が可能になります。

今回は「Custom Main Gradle Template」を使用します。
![ss03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2938978/25dc996d-30db-08ea-67bb-bd4d6f8491f3.png)
チェックを入れるとUnityプロジェクトフォルダ内の
`Assets\Plugins\Android`
上記フォルダ内に「mainTemplate.gradle」ファイルが出力されます。
ファイルを開くと上部(6行目くらい)に「dependencies」と部分あるので
そこを以下のように変更します。

```
dependencies {
    // もとからある
    implementation fileTree(dir: 'libs', include: ['*.jar'])

// ビルド時にこの部分が依存関係の記述に置き換わる
**DEPS**

    // ここからカスタム設定
    // Billing Library関連の依存関係を解除する
    configurations.all {
        exclude group: 'com.android.billingclient', module: 'billing'
    }
    // Billing Library v4の依存関係を追加する
    def billing_version = "4.0.0"
    implementation "com.android.billingclient:billing:$billing_version"
}
```

以上でGradleの変更は完了です。
問題なくビルド出来ればOKです。


### Gradle周りでビルドエラーになる場合

これまでGooglePlayResolverを使用していた場合
Resolverのメニューから「Delete Resolved Libraries」を実行することで解決する場合があります。

## 内部テストにて確認を行う

課金の処理が問題ないかを含めてAndroidの内部テストにて確認を行った方が良いかと思います。
GooglePlayConsoleにて内部テスト用のリリース作成時にも対象のapkに対する警告が確認できるので
Billing Libraryの警告が無くなっていればOKです。

## なぜ無効になるのか

そもそも何によってコンビニ決済が有効になるかですが
Unity IAP側でBilling Libraryの初期化時にコンビニ決済を有効にしているようでした。

ただ有効化している部分がjarファイルになっており変更が困難なため
* Billing Libraryの初期化時にコンビニ決済を有効にしていないUnity IAPを用意する
* Billing Library自体はv4以降を使用するようにする

上記のように対応した形になります。

## 最後に

以上でコンビニ決済を無効にすることが可能でした。


ただ、こちらの対応はおそらくイレギュラーな対応になります。
Google側に一度問い合わせたところ原則コンビニ決済には対応してくださいという回答が返ってきました。
対応は行ったものの後々Googleの審査に影響が出る可能性は０ではないということだけご了承ください。
【データ基盤構築/BigQuery】WINDOW関数で日付の範囲を指定する場合は、ORDER BY句でUNIX_DATE()関数を使用する

# 今回の課題
WINDOW関数を使用して、移動合計の値を抽出しようとしたところ、
下記のエラーが発生してしまった。

## エラー内容
```
ORDER BY key must be numeric in a RANGE-based window with OFFSET PRECEDING or OFFSET FOLLOWING boundaries, but has type DATE at[52:56]
```
ORDER BY句は数値を指定しなければいけないが、
DATE型を指定してしまっていることによってエラーが発生している様子。

## 使用したクエリ
エラーの通り、WINDOW関数内のORDER BY句で、数値を指定してしまっていた。
```SQL
select
    date
    , page_title
    , release_date  -- 配信開始日
    , sum(page_views) over (partition by page_title order by date rows between 6 following) as pv_7days
    , sum(page_views) over (partition by page_title order by date rows between 29 following) as pv_30days
    , sum(page_views) over (partition by page_title order by date rows between 59 following) as pv_60days
from
    `テーブル名`
```

## 解決したクエリ
dateに**UNIX_DATE関数**をかけて、**1970-01-01から〇日間**というかたちでデータを取得し、
それらをorder by句で昇順で取得するようにすることで解決することができた。
```SQL
select
    date
    , page_title
    , release_date  -- 配信開始日
    , sum(page_views) over (partition by page_title order by unix_date(date) rows between 6 following) as pv_7days
    , sum(page_views) over (partition by page_title order by unix_date(date) rows between 29 following) as pv_30days
    , sum(page_views) over (partition by page_title order by unix_date(date) rows between 59 following) as pv_60days
from
    `テーブル名`
```

## UNIX_DATE()関数とは
1970-01-01からの日数を返す関数。

（例）
* クエリ
```SELECT UNIX_DATE(DATE "2008-12-25") AS days_from_epoch;```

* 出力値 

|days_from_epoch|
|:-:|
|14238|

※参考：[UNIX_DATE（公式ドキュメント）](https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions?hl=ja#unix_date)
Github Actionsでarm64のパッケージを作る

# 背景・目的

+ Graviton2プロセッサを搭載したAWS Lambdaだと、[パフォーマンス上のメリットがある](https://aws.amazon.com/jp/blogs/news/aws-lambda-functions-powered-by-aws-graviton2-processor-run-your-functions-on-arm-and-get-up-to-34-better-price-performance/)
+ numpyなど、プラットフォーム専用にビルドが必要なライブラリを使う場合に、arm64用のnumpyを用意する必要があった
+ これを解決するために、結構苦戦したので、備忘しておく

# 問題

+ Github Actionsだとamd64(x86_64)のCPUアーキテクチャのマシンで実行される
+ Github Actions上でarm64のdocker イメージを実行すると、`exec /usr/bin/bash: exec format error`のようなエラーが発生する
+ arm64のためのパッケージを作れなかった・・


# 解決策

+ https://github.com/docker/setup-qemu-action のステップをdockerコマンドの実行前に組み込むことで、arm64のdocker imageをarm64のプロセッサで起動することができる


```yaml
jobs:
  qemu:
    runs-on: ubuntu-latest
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v2
        with:
            platforms: linux/arm64
```
+ arm64のdocker imageを使ってコンテナを起動し、その中でビルドを行うことでarm64用のnumpy込みのパッケージを作ることができた

# arm64って何？

> AArch64またはARM64は、ARMアーキテクチャの64ビット命令セットである。 ([ウィキペディア](https://ja.wikipedia.org/wiki/AArch64))

CPUアーキテクチャの1種で、CPUがプログラムを処理するときの命令セット


+ 関係性

    ```plantuml
    @startuml
    class 命令セット
    class CPU
    
    CPU "N" -- "1" 命令セット
    @enduml
    ```

+ 例

    | CPU | アーキテクチャ |
    | --- | --- |
    | Intel | x86_64 |
    | AMD  | amd64(x86_64) |
    | Apple M1 | arm64  |



# QEMUって何？

> QEMU (クイック エミュレーターの略) は、ハードウェア仮想化を実行する無料のオープン ソース エミュレーターです。動的バイナリ変換によってマシンのプロセッサをエミュレートし、マシンにさまざまなハードウェアとデバイス モデルのセットを提供して、さまざまなゲスト オペレーティング システムを実行できるようにします。([参考](https://dbhi.github.io/qus/context.html))

+ [2種類のモード](https://www.qemu.org/)
    + フルシステムエミュレーション
        + 別アーキテクチャのOSを丸ごと実行できる
    + ユーザーモードエミュレーション
        + 別アーキテクチャのプログラム実行を可能にする


+ 基本的な使い方（ユーザーモードエミュレーション）
    
    ```
    qemu-<arch>[-static] <binary>
    ```

    qemu-arm64-staticなどのコマンドをインストールしておけば、別アーキテクチャのバイナリファイルを実行できる

+ Docker上での使われ方(Linuxの場合)
    + Linuxには`binfmt_misc`という機能があり、任意の実行可能ファイル形式を透過的に認識して、特定のアプリケーションに渡すことができる
    + [QUS](https://dbhi.github.io/qus/index.html)を使うと、おそらく、docker imageがどの命令セットで動作するのか？の情報に基づいて、適切な命令セットで実行できるようにしてくれる
    + どうやってdocker imageのアーキテクチャ情報を知っているのか？と、どのようにQEMUに渡しているのか？までは追えず・・。


+ Docker上での使われ方（Mac, Windows)
    + [Docker Desktop](https://docs.docker.jp/docker-for-mac/multi-arch.html)の場合、QEMU がインストールされ、デフォルトで有効になっているとのこと

+ ユーザーモードエミュレーションの 3 つの主な注意事項([参考](https://dbhi.github.io/qus/context.html))
    + ユーザー モード エミュレーションは、フル システム エミュレーションよりも洗練されていないように見えるため、サポートされていない機能を使用するとクラッシュする可能性がある
    + 基盤となるマシンがホストであるため、エミュレートされたカーネルはなく、ターゲット デバイス/システムに固有のハードウェア リソースは利用できない (フル機能の VM とは異なる）
    + プログラムとホストが分離されていないため、悪意のあるプログラムが特権を取得する可能性がある

# まとめ

+ 別のCPUアーキテクチャのプログラムを実行するときにはQEMUというOSSが活用されているということがわかった
+ ユーザーモードでのエミュレーションはセキュリティ上のリスクもあるため、CI/CDのワークフローで使われることが多いらしい
+ github actionsにおいては、ステップを一つ追加するだけで、dockerが別アーキテクチャのイメージを起動してくれることが分かった
    + （今回は、cdk経由でdockerを起動していたので、もしかしたら、素のdockerコマンドを使う場合は`buildx`コマンドなどを使ったり、platformオプションを指定したりが必要かもしれないが、今回は調査しきれず、また時間があるときに調べます・・）
LambdaでWebページを返す

# はじめに
LambdaとDynamoDBを使用すればIOT用のグラフページを作成できるのではと思ったのでその備忘録。
この記事では図中の「グラフページ表示」部分を実施。
前回：https://qiita.com/aikawa_YO/items/79e8ef768b03e3f73315

![Lambda-DB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195542/82933046-6bbe-6525-d7a2-d8d23116a3ec.png)

# HTMLの中身
imgタグのsrcには前回のグラフ画像を返してくれるLambda関数URLを指定してください。

```python
import json

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'isBase64Encoded': False,
        "headers": {"Content-Type": "text/html"},
        'body': '<h1>graph:temperature</h1><img src="https://xxxxxxxxxxxxx.lambda-url.ap-northeast-1.on.aws/">'
    }
```

# 別に画像を別で作らなくてもいい話
imgタグで画像を表示させるにはURLを指定しないといけないという固定観念にとらわれていた。
バイトデータをそのままHTMLへ直書きすれば出力できるのでこっちのほうがはやい。

```python
import base64
import boto3
import matplotlib.pyplot as plt
from io import BytesIO
from datetime import datetime as dt
from boto3.dynamodb.conditions import Key


def lambda_handler(event, context):
    dynamodb = boto3.resource("dynamodb", region_name='ap-northeast-1')
    table = dynamodb.Table("iot_data")
    response = table.query(
        KeyConditionExpression=Key("id").eq(1),
        ScanIndexForward=False
    )
    
    items = response["Items"]
    
    temps = []
    times = []
    for item in items:
        temps.append(float(item['temperature']))
        times.append(dt.strptime(item['time'], '%Y-%m-%d %H:%M:%S %z'))
    
    fig = plt.figure()
    plt.plot(times, temps)
    
    ofs = BytesIO()
    fig.savefig(ofs, format="png")
    png_data = ofs.getvalue()
    
    plt.close()
    
    html_txt = '<h1>graph:temperature</h1><img src="data:image/png;base64,'
    html_txt += base64.b64encode(png_data).decode('utf-8')
    html_txt += '">'
    
    return {
        'statusCode': 200,
        'isBase64Encoded': False,
        "headers": {"Content-Type": "text/html"},
        'body': html_txt
    }
```
開発の図式手法

# HIPO(Hierarchy plus Input Process Output)
ソフトウェアの機能を入力（Input）、処理（Process）、出力(Output)に分けて、階層的に表現する図式手法。
図式目次（VTOC）、総括ダイアグラム（総括IPO図）、詳細ダイアグラム（詳細IPO図）から構成される。

## 関連記事
https://segakuin.com/diagram/hipo.html

# 状態転移図(STD: State Transition Diagram)
情報や状態について```時間的な移り変わりを図式化```する手法。
用途としては、画面設計における```転移やリアルタイムシステムの開発、通信プロセス間の情報の流れを表現```する際などに利用される。

# 関連記事
https://and-engineer.com/articles/YDYO9BAAACIAOhu3

# 構造化チャート
そこで、構造化プログラミングのフローを専用に表現するために開発されたのが構造化チャートです。但し企業や国によって開発されたためいろいろな記法があります。主なものは以下です。

記法：開発元
HCP：NTT
PAD：日立
SPD：NEC
YAC：富士通
HIPO：IBM
NSチャート：アメリカ

## 出典
https://yaminokurao.com/main/?p=535

# 出典 
https://gihyo.jp/book/2022/978-4-297-12375-8
RESTAPIでのConfluence自動投稿ボット作成でハマった話

RESTAPIを使って、Confluenceに自動投稿するプログラムを作成した際にハマった話。

# 結論

httpじゃなくて、httpsで接続しよう！

# 経緯
Confluenceの公式のドキュメント。
2022年10月現在で、http接続での例が記載されている。
https://developer.atlassian.com/server/confluence/confluence-rest-api-examples/

```:記載例
curl -u admin:admin -X GET "http://localhost:8080/confluence/rest/api/content?title=myPage%20Title
&spaceKey=TST&expand=history" | python -mjson.tool
```

↑と同様にhttp接続で試すも、getメソッドでページの情報はとれるのに、postでのページの投稿はうまくいかない

# 原因特定の経緯

最初はPythonでコーディングしており、動作確認はPythonのrequestsライブラリを使ったレスポンスを表示することで行っていた。
https://dot-blog.jp/news/python-requests-redirect-url-status-code-get/
ここの記事にある通り、Pythonのレスポンスはリダイレクト後の情報のみを表示する。
ここがつまづいたポイントだった。

上記のことを知らないまま(原因がよくわかっていないまま)、とりあえず原因特定のためPythonではなく、curlを使うことに。

```
$ curl -u admin:admin http://XXXXXXXX/confluence/rest/api/content/scan?spaceKey=FS&limit=2&expand=history 
```
上記コマンドを打つと、以下レスポンスが。

```
HTTP/1.1 301 Moved Permanently
location: https:/XXXXXXXX/confluence/rest/api/content
date: Thu, 27 Oct 2022 XX:XX:XX GMT
server: xxxxx
content-length: 0
```

これにより、https接続すべきことに気付き、原因特定に至りました。
getはうまくいくけど、postはうまくいかない、という挙動にも振り回され、原因特定に時間がかかってしまいました。
Pythonのrequestsのクセを知れてよかったですが。
【データ基盤構築/BigQuery】WINDOW関数を使用して〇日間数値を出す場合、FRAME句ではRANGEを使った方が良い

# 今回の課題
WINDOW関数を使用して、
**配信開始日から7日間, 30日間, 60日間時点のpv数**を取得した際、
FRAME句でROWSを使用したことによって、不具合が発生した。

## 発生した不具合
下記のクエリだと、配信開始日から7日間, 30日間, 60日間時点での正しいpv数を取得することができなかった。

理由は、フレーム句でROWSを使用しているので、order by句のdateを昇順に並べて、
**7行目, 30行目, 60行目時点**でのpv数を集計して抽出してしまうため。
```SQL
select
    date
    , page_title
    , release_date  -- 配信開始日
    , sum(page_views) over (partition by page_title order by unix_date(date) rows between 6 following) as pv_7days
    , sum(page_views) over (partition by page_title order by unix_date(date) rows between 29 following) as pv_30days
    , sum(page_views) over (partition by page_title order by unix_date(date) rows between 59 following) as pv_60days
from
    `テーブル名`
```

## 改善方法
フレーム句をRANGEに変更することで、release_dateから7日間, 30日間, 60日間時点でのpv数を取得することができる。
```SQL
select
    date
    , page_title
    , release_date -- 配信開始日
    , sum(page_views) over (partition by page_title order by unix_date(date) range between unbounded preceding and 6 following) as pv_7days
    , sum(page_views) over (partition by page_title order by unix_date(date) range between unbounded preceding and 29 following) as pv_30days
    , sum(page_views) over (partition by page_title order by unix_date(date) range between unbounded preceding and 59 following) as pv_60days
from
    `テーブル名`
where
    date = release_date
```
※参考：[分析関数（ウインドウ関数）をわかりやすく説明してみた](https://qiita.com/tlokweng/items/fc13dc30cc1aa28231c5)

これで今回の課題を解決することができた。
ROWSとRANGEの違いは下記に記載した。
## WINDOW関数のFRAME句について
WINDOW関数において、FRAME句の指定方法は2種類ある。
### ROWS
OVER句のORDER BYで指定されたフレーム内の「行」を基準に動作する。
(例)`1 PRECENDING AND CURRENT ROW`→**１行前**と自分の行がフレームになる。

### RANGE
OVER句のORDER BYで与えられたフレーム句の「値」を基準に動作する。
(例)`1 PRECENDING AND CURRENT ROW`→**１つ前の値**と自分の行がフレームになる。

今回のクエリで言うと、ROWSを使っても、全てのdateが存在していれば不具合は発生しないが、
dateに漏れがあると正しい数値が取得できない恐れがあった。
※参考：[WINDOWフレーム句のROWSとRANGEの違い](https://zenn.dev/nanbunan/articles/ad96d04fb2e616)