OmniAICreator/Qiita-1.07M huggingface dataset:
STM32 HAL UARTを受信割り込みでOREする場合の対処法

# HALでUARTするとOREしまくってツラい

RX \<-> STM32でUART通信(115200,0.1秒おきとか，受信割り込み）してると，STM側が受信でORE(Over Run Error）して通信が止まる

OREフラグを折りに行っても折れず，ずっと止まってやがる

結論から言うと，OREしたら，**割り込みを止めて**クリアフラグ&初期化を行う．
もしかしたらフラグのクリアだけでもいいかも．

コード
```c++:main.cpp
// OREしたら
if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_ORE)) {
	//まず割り込みをストップする．
	HAL_NVIC_DisableIRQ(USART2_IRQn);
	__disable_irq();

	//一応フラグをクリアする
	__HAL_UART_CLEAR_NEFLAG(&huart2);
	__HAL_UART_CLEAR_OREFLAG(&huart2);

	//UARTを初期化する．DeInitいらない説
	HAL_UART_DeInit(&huart2);
	MX_USART2_UART_Init();

	//再開？
	HAL_UART_Abort_IT(&huart2);

	//割り込みの再開
	__enable_irq();
	HAL_NVIC_EnableIRQ(USART2_IRQn);
	
	//最後に受信割り込みを有効化する
	HAL_UART_Receive_IT(&huart2, UART2_buf, 4);
}
```

どんだけ調べてもわからなかったが，フラグを触るには一度割り込みを停止させるのが必要，とわかった．
Laravel SailでLaravel 9をインストール

# はじめに
Laravel Sail について引用
https://readouble.com/laravel/9.x/ja/installation.html
> Laravel Sailは、LaravelのデフォルトのDocker構成と、操作するための軽量のコマンドラインインターフェイスです。 Sailは、Dockerの経験がなくても、PHP、MySQL、Redisを使用してLaravelアプリケーションを構築するために良い出発点を提供しています。

# 環境
* Windows 11
Linuxディストリビューションとして「Ubuntu」をインストール
参考：[Linuxサブシステムを有効にしてUbuntuをWindows 10にインストールする](https://www.ssl.com/ja/%E6%96%B9%E6%B3%95/Linux%E3%82%B5%E3%83%96%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%A6ubuntu-windows-10%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/)  
* PHP 8.1
https://windows.php.net/download
* Composer 2.3
https://getcomposer.org/download/
* Docker Desktop on Windows
https://docs.docker.com/desktop/windows/install/

# Laravel 9 インストール
スタートメニューから「Ubuntu」を起動
※Windows標準のコマンドプロンプトから実行しないように注意
```
curl -s https://laravel.build/example-app | bash
```

"example-app" の部分はフォルダ名であり、任意に変更が可能

<br />

下記のメッセージが表示されたらWSLのパスワードを入力
```
Please provide your password so we can make some final adjustments to your application's permissions.
```

Laravelのインストールができたら、以下のコマンドを実行してコンテナを起動
※初めて実行した場合はコンテナをローカルマシン上に構築するため数分かかる

```
cd example-app
./vendor/bin/sail up
```

デフォルトで以下のサービスが使用可能
* meilisearch
オープンソースの全文検索エンジン
* mailhog
開発者向けのメール送信テストツール
* mysql
オープンソースのRDB
* redis
Key-Value型 の NoSQL データベース
* selenium
Webアプリケーションのテストを自動化するツール

![Docker Containers.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339770/cbb2c63e-cd6c-6556-5fa3-f869bd4d4e15.png)
http://localhost にアクセスして画面が表示されれば完了
STM32 CUBEIDEでCppCheckを使用する.

# STM32 CUBEIDEでCppCheckを使用する.

プラグインのダウンロードで失敗したので対策を書きました。

## 1. CppCheckのインストール.

https://cppcheck.sourceforge.io/

問題なくインストールできる。

## 2. IDEのプラグインCppCheclipseのインストール.

IDEの[ヘルプ]-[Eclipseマーケットプレース]で"CppCheclipse"を入力して"インストール"を押すと、
**"エラー502"** でインストールできない。

以下にアクセスすると中ほどにリリース版のインストール方法とダウンロードのリンクがある。

https://github.com/kwin/cppcheclipse/issues/108

以下からzipファイルをダウンロード

https://github.com/kwin/cppcheclipse/releases

1. [ヘルプ]-[新規ソフトウェアのインストール]-[追加]
2. "アーカイブ"を押して、ダウンロードしたzipを選択して"追加"を押す。
3. cppcheclipseにチェック入れてインストール。
4. 更新して再起動。

再起動後、[ウインドウ]-[設定]でcppcheclipseを選択、
exeのパスを設定。

![Cpp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489806/7a5bef86-a433-5422-a18d-0ff546dcc6a9.jpeg)

[設定]でCheck for all know issueをとりあえず選択しておく。

プロジェクトエクスプローラで右クリックし"CppCheck"でコードチェックができるようになる。
turtlebot4をIgnition gazeboで動かす。

## はじめに
Turtlebot4が発売されているので情報をあさって見る。


##公式ページ等
https://turtlebot.github.io/turtlebot4-user-manual/


## Ignition GAZEBO

公式の情報として、GAZEBOとともにIGNITION GAZEBOの環境があるので動かしてみる。
https://github.com/turtlebot/turtlebot4_simulator
![Peek 2022-05-18 00-14.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93168/d4b03412-18d5-6616-b503-27a3e1d223c1.gif)

電源のON・OFFボタンがあったり、Dock Undockボタンがあったりと
よりカスタマイズしやすく、実物の操作に近い形でSimulationができる。

これがIgnition GAZEBOの優れている点かと感心しました。

SLAM・Navigation2も今度試してみる。
【Git】remote repository で rebase (本来よろしくないが)

# はじめに

Github でこんな状態になっています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294040/3a959ff5-9032-7339-7c23-bdf10ace94cc.png", width=50%>

これを

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294040/372fa676-c9a2-6fe5-3f62-9c2bc32e83cf.png", width=50%>

とすることができました。

# やったこと

本来、remote repository で branch を rebase することは、共同開発者に迷惑をかけるので、良くないことのようです。
が、ここでは個人の担当しているところで、こういうことをしたかったという事情があります。

最初は、このようになっています。

main branch と feature branch があり、main の commit が３つ進んでいます。
feature を main branch に rebase したいという状態です。
今、feature03 branch にいます。

```
$ git log --oneline --graph --all
* 3b59419 (HEAD -> feature03, origin/feature03) test
| * e8db01d (origin/main, main) main 3rd
| * db94a3a main second
|/  
* bca9186 first commit
```

以下のコマンドでローカルで rebase します。

```
$ git rebase -i origin/main
Successfully rebased and updated refs/heads/feature03.
```

そのままpush しようとすると、普通に怒られます。

```
$ git push origin feature03
To github_torupati:torupati/github-rebase-test.git
 ! [rejected]        feature03 -> feature03 (non-fast-forward)
error: failed to push some refs to 'github_torupati:torupati/github-rebase-test.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
```

そこで以下のように強制するとうまく行きます。

```
$ git push --force-with-lease origin feature03
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 276 bytes | 276.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github_torupati:torupati/github-rebase-test.git
 + 3b59419...ab1c45b feature03 -> feature03 (forced update)
```

冒頭の画像で示すように、Github で repository のbranch が rebase されていました。
できた。。。

以下を参考にさせていただきました。

- https://stackoverflow.com/questions/6199889/rebasing-remote-branches-in-git
- https://qiita.com/niwasawa/items/cc710635b1eee42d8eec

明日も生き延びれそうだ。
(2022/05/18)
ConoHaでEC-CUBEインストールしたらSSLしなかった件

# 動作環境
レンタルサーバーConoHa
EC-CUBE 4.1.0

# 不具合
![スクリーンショット 2022-05-17 23.43.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1653133/4e99fbdb-8bb1-df8f-6661-b4a21dcbc57c.png)
色々操作ができない

# 原因
SSL通信できていないことらしい

# SSLを強制に✔︎できない
![スクリーンショット 2022-05-17 23.48.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1653133/5897f390-b331-7006-4242-c8fa5c1eda5c.png)

# WAFが関係しているらしい
`AWS`
`ConoHa`
などで発生している模様

# 解決
`.htaccess`に以下を追記


RewriteRule ^(.*) - [E=HTTPS:on]

<IfModule mod_siteguard.c>
SiteGuard_User_ExcludeSig ip(1.2.3.4)

SiteGuard_User_ExcludeSig ip(サイト管理者・運営者のIPアドレス)
</IfModule>


# ConoHaのIPアドレスを調べる
管理画面＞サーバー管理＞契約情報＞スペック

```:vim&nbsp;root/.htaccess
RewriteRule ^(.*) - [E=HTTPS:on]

<IfModule mod_siteguard.c>
SiteGuard_User_ExcludeSig ip(1.2.3.4)
SiteGuard_User_ExcludeSig ip(xx.xx.xx.xx)
</IfModule>
```

***
# 参考記事
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=25991&forum=11

https://faq.wadax.ne.jp/s/article/1455
【Rails】seedの使い方

mac OS バージョン11.6
エディタ…VScode
Rails 6.0.4

テストデータを作るとマイグレーションファイルをresetした時にすぐにデータを呼び戻せる→開発がよりスムーズにいくとのことなので、Railsで用意されているシーディングを学んでいきます。

railsではseedファイルに入れておきたいデータを```db/seeds.rb```に記述していきます。


```seeds.rb
Movie.create!(
  title:'存在のない子供たち',
  image:File.open('./app/assets/images/1015706_03.jpeg'),
  released_year:'2019',
  country:'レバノン',
  screening_time:'125',
  synposis:'中東の貧民窟で暮らす12歳のゼインは、貧しい両親が出生届を提出していないため、IDを持っていない。ある日、ゼインが仲良くしていた妹が、知り合いの年上の男性と強制的に結婚させられてしまい、、、',
  genre:'ドラマ',
  released_month:'7',
  released_day:'20'
)
```

それぞれコンマで区切るのを忘れないようにします。そして、

```
% rails db:seed
```

（DBをリセットしたい場合は```rails db:migrate:reset```でリセットできます）



上の```seeds.rb```でも画像を載せていますが、railsで画像を扱うためにここではCarrierWaveを使っています。

手順↓

```.Gemfile
gem 'carrierwave'
```

```
$ bundle install 
```

次にアップローダーを作成する
```
$ rails g uploader image //imageは任意の名前
```

**モデルのアソシエーション**
```movie.rb
class Movie < ApplicationRecord
  mount_uploader :image, ImageUploader
end
```

**登録したい画像を用意**
```app/assets/images```の中に画像を格納します。VScodeなんかだと画像をドラッグ＆ドロップとかでできます。

seeds.rbに記入しデータを作成（前後の行省略）
```seeds.rb
image:File.open('./app/assets/images/1015706_03.jpeg'),
```

```
% rails db:seed
```



↓参考
https://qiita.com/tama_chi/items/44ec59e548bcfe14b4e7
REST API Design Best Practices を用いたAPI開発 #1

## 動機
仕事で関わるシステムの大部分が企業の基幹系システムであることが多く、昨今はやりのJavaScriptによる開発手法にCatch Upしきれていないと感じている。
以下の記事をFollowしながら手を動かすことで、少しでも昨今の流れ・感覚をCatch Upをすること、また自分自身のメモとして残すことを目的として記事に起こす。

https://www.freecodecamp.org/news/rest-api-design-best-practices-build-a-rest-api/

## 本記事で実施すること
* API開発に必要な基本的なフォルダ階層の作成
* npmを用いた必要なパッケージインストール
* EntryPointとなるindex.jsの作成
* サーバの起動とアクセス確認

## 環境
* OS
Microsoft Windows 10 Enterprise　10.0.19042 N/A ビルド 19042

* 開発環境
Visual Studio Code 1.64.2

* ターミナル環境
GNU bash, version 4.4.23(1)-release (x86_64-pc-msys)

* パッケージ管理
npm 6.9.0

## 基本設定
### フォルダ構造作成とパッケージインストール
まずは兎にも角にも、基本的なフォルダ作成から始める。
```
mkdir rest-api-practice & cd rest-api-practice
```

続いて、その中にsrcフォルダの作成。
```
mkdir src & cd src
```

続いて、その中に必要なSubフォルダをそれぞれ作成。
```
mkdir controllers && mkdir services && mkdir database && mkdir routes
```

APIエントリーポイントとなる、indexファイルをsrcフォルダ内に作成。
```
touch index.js
```
srcフォルダの1つ上のフォルダで、package.json fileを作成。
```
cd ..
npm init -y
```
必要となるパッケージをインストール
```
npm i -D nodemon 
npm i express
```

（nodemon については https://qiita.com/mzmz__02/items/e130b74a681e9ae2dc8b を参照）
（expressについては https://qiita.com/kamihork/items/ba7d86b4933fb2071a6b を参照）

### src/index.js
index.jsは以下の通り。
```javascript:src/index.js
const express = require("express"); 

const app = express(); 
const PORT = process.env.PORT || 3000; 

// For testing purposes 
app.get("/", (req, res) => { 
    res.send("<h2>It's Working!</h2>"); 
}); 

app.listen(PORT, () => { 
    console.log(`API is listening on port ${PORT}`); 
});
```

### package.json
package.jsonの"scripts"にdevを追加。
```json:package.json
{
  "name": "rest-api-practice",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "nodemon src/index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "nodemon": "^2.0.16"
  },
  "dependencies": {
    "express": "^4.18.1"
  }
}
```
これで基本的な準備は完了。以下のようなフォルダ階層になっているはず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664640/e1bfe52e-1c31-54ef-70f1-916ff971f3f8.png)

## サーバ起動
以下のコマンドでサーバを起動させる。
```
npm run dev
```
正常に起動していれば、以下のメッセージが出力される。
```
API is listening on port 3000
```
## アクセス
ブラウザから、localhost:3000にアクセスし正常に起動していることを確認する。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664640/5203dc0a-5e78-1ea0-650a-92dc3c212f24.png)

## まとめ
本記事では以下を実施した。
* API開発に必要な基本的なフォルダ階層の作成
* npmを用いた必要なパッケージインストール
* EntryPointとなるindex.jsの作成
* サーバの起動とアクセス確認

次回は[APIのVersioning](https://qiita.com/ryumura/items/22863753d31b4c5c2487)について行う。
【今度こそわかる】クッキーとセッション

# はじめに
今回、駆け出しエンジニアが何度学んでもすぐに忘れるあるあるトップレベルのクッキーとセッションについて、アウトプットも兼ねて簡単にまとめてみました！

この記事を読んでわかることは、
それぞれの**特徴**、**違い**になります。

それぞれの具体例も挙げつつ短めにまとめましたので、時間のない方でも気軽に読んでください〜！

# もくじ
1.[🌟最初の理解](#最初の理解)
2.[🍪クッキー（Cookie）とは](#クッキーとは)
3.[キャッシュとは](#キャッシュとは)
4.[セッションとは](#セッションとは)
5.[まとめ](#まとめ)

# 🌟最初の理解
クッキー、セッション、キャッシュについて学ぶ前に理解しておくべきことは、
**3つ**とも「**情報を一時的に保存しておく機能**」であるということです。
**3つ**とも「**効率的かつ速く、欲しい画面や情報をくれる**」というメリットがあるということです。

また、これら3つは、情報の**種類**と**保存場所**が異なるだけです！
これを念頭に読んでいただければと思います。

# 🍪クッキーとは
### ・種類
「**ユーザー情報**」

最初の理解では、それぞれ情報の種類と保存場所が異なると書きましたが、クッキーは「**ユーザー**」の情報を保存してくれます。

### ・具体例
「**Twitter・instagram**」

私たちが日常生活で利用しているTwitterやinstagramでは、利用開始時や別の端末で同じアカウントを利用する際にログインを求められたと思います。
しかし、今日利用しているTwitterとinstagramでログインを求められていますか？？
ログインなんかいちいちしなくてもアプリを開けば自分のアカウントで友達の投稿一覧が表示されていますよね！

あれこそがまさに**クッキー(Cookie)がユーザー情報(ユーザー名、メールアドレス、パスワード等)をブラウザに保存してくれているから**なんです。

# キャッシュとは

### ・種類
「**HTMLやCSSなどのwebページ情報**」

クッキーについて勉強すると、キャッシュと何が違うの??と思うことがあると思いますが、異なる点はやはり保存する情報の種類です。
クッキーは「**ユーザー情報**」という**ピンポイント部分**を保存するのに対し、
キャッシュは「**HTMLやCSSなどのwebページ**」という**全体的な表示部分**を保存してくれます。

### ・具体例

「**良く訪れるお気に入りのwebサイト(全てのwebサイト)**」

みなさんも1日に1回は見にいくようなwebサイトがあるかもしれません。初めてそのサイトに訪れた時よりも、2回目3回目に訪れた時の方がそのサイトのテキストや画像の表示が早いなと感じたことがあると思います。

あれこそがまさに**キャッシュがHTMLやCSSなどの情報をブラウザに保存してくれているから**なんです。

# セッションとは

### ・種類

「**ユーザーのアクション情報**」

ユーザー情報という点でクッキーと同じなためにパニックになりやすいですが、明確な違いがあります。

**クッキー**はユーザー名、メールアドレス、パスワードなどの「**"誰が"**」というユーザー情報を保存するのに対し、

**セッション**はログインしたユーザーがそのサイトで行った動作(アクション)などの「**"何をした"**」というユーザー情報を保存するということです。

こう考えると、ユーザー情報を扱うサイト(ログイン画面があるサイト)では必ずといっていいほどこのクッキーとセッションが機能している気がします。
だから、「**"誰が"**」「**"何をした"**」という「**クッキー**」と「**セッション**」は2つでセットとして取り上げられていたのですね！！

### ・具体例

「**amazonのショッピングカート**」

amazonで買い物をするとき、商品を選択したら一度ショッピングカートに入れると思います。しかし、カートに入れたあとすぐには購入せずにamazonのサイトを離れ、時間を置いてから同じくamazonのサイトに戻ってくると、ショッピングカートに商品が入ったままになっていることがあると思います。

あれはまさに、**セッション**が機能し、ログインしたユーザーが「**"何をした"**」かの情報(**商品をカートに入れた**)を**サーバー側**に保存してくれているからなんです。

# まとめ
**以下にそれぞれの特徴(保存データ情報の種類)と保存場所を表にまとめてみました！**

|    |  保存情報の種類  |  保存場所  
| ---- | ---- | ---- 
|  クッキー  |  ユーザー情報("誰が")  |  ブラウザ  |  TD  
|  キャッシュ  |  HTMLやCSS情報  |  ブラウザ  |  TD  
|  セッション  |  ユーザー情報("何をした")  |  サーバー  |  TD  

# さいごに
混同しやすい３つをざっくりまとめてみましたがいかがでしたでしょうか。
私自身まだまだ未熟者すぎるので、間違っているところなどありましたら、コメントいただけましたら幸いです。
最後まで読んでいただきありがとうございました！！
ド素人がHyper-VにUbuntu入れた前後の備忘録

# 何をしたかった（したい）か

1. 進行中：Hyper-VでUbuntuというかLinuxのお勉強 
1. 完了！：Ubuntu入れたら画面サイズ小さすぎて泣いたので解像度大きくしたい
    - 今どきXGAはキツすぎます
1. 完了！：VPN繋ぐための各種ソフトウェアインストール
1. ぐぬぬ：VPN繋ぎたい

## 2022年4月末現在のスペック

- Windows10Pro
- 21H2
- Intel(R) Core(TM) i5-4690 3.50Ghz
- 32.0GB RAM
- 1TB SSD（多分）
- 40inch 4Kモニタ
- Ubuntu 20.04 LTS

## 参考にした記事やサイト

参考にしたサイトが参考にしたサイトや記事が消えてることがままあるので、一部必要なところは写し書きしておこうかな……大丈夫かな……

### Hyper-VにUbuntuをインストールと基礎設定

[Windows10のHyper\-V上でUbuntuを動かす \| ばったんの技術系ブログ](https://blackbird-blog.com/hyper-v-ubuntu-setup)

一部設定は必要不要や好みにあわなかったりしたので変更はしましたが、およそこの記事の通りに作業し無事完了。
ありがとうございました。
記事の長さ、文章量、画像の量がすごくて必要な部分を写し書きするのは諦める。

### Ubuntu入れたら画面サイズ小さすぎて泣いたので解像度大きくした

[Hyper\-V上のUbuntuデスクトップ21\.10仮想マシンで画面解像度を変更する方法 \| 4thsight\.xyz](https://4thsight.xyz/38710)

実は、これに挑戦する2週間ほど前に別の記事を試したところUbuntuがまっくろくろすけになって、うんともすんとも言わなくなってしまった。
慌ててHyper-vから事前のチェックポイントに戻して事なきを得たけど、動悸が強すぎて死ぬかと思った。臆病者のド素人にはキツいカウンターだ。
のでトラウマが冷めるまで待って決行……
Ubuntu Desktopのバージョンが微妙に違う（記事の人は21.10）けど全く問題なく解像度の拡大に成功。
ありがとうございました。

手順とコマンドを念のため写し書き。元記事では画像をふんだんに用いて丁寧に説明をしておられるので、記事が残っているなら素直に記事を参照してほしい。

1. Ubuntuログイン→ターミナル起動（さすがにこのへんまでは全く問題ない）
1. 下記を1行ずつコマンド入力した（そろそろ怪しい）
    > $ sudo apt update
    > $ sudo apt install linux-tools-generic linux-cloud-tools-generic
    > $ sudo reboot
1. 上の最後のコマンドで再起動するので待つ
1. Ubuntuログイン→ターミナル起動
    > $ sudo gedit /etc/default/grub
1. `GRUB_CMDLINE_LINUX_DEFAULT`の値を下記に倣って修正、今回は10行目だった
    - 例は1280x780だけどあとで1920x1080に直した
    > GRUB_CMDLINE_LINUX_DEFAULT="(元々ある値) video=hyperv_fb:1280x720" 
1. 上書き保存してターミナルに戻る
1. grubの更新
    > $ sudo update-grub
1. コマンドが正常に完了したらUbuntuを再起動（さっきのコマンドでいい）

## VPN繋ぎたいからソフト入れたい

> sudo apt install openconnect

これで終わった。
パッケージの保留がどうのというのが出たので、とりあえず

> sudo apt update

とか色々やりながら何回もインストールコマンド叩いたら保留の文字が消えました。

### 詰まってた頃の内容

[Ubuntu 18\.04にCiscoAnyconnectを入れたときのメモ – Takahiro Onoshima's website](https://onoshima.github.io/ubuntu/190618cisco/)

### 参照した内容と現状

> $sudo apt-get update
> $sudo apt-get install network-manager-openconnect
> $sudo apt install libpangox-1.0-0
> $sudo apt-get install lib32z1 lib32ncurses5
> $cd ~ && mkdir download-anyconnect
> $cd download-anyconnect && wget http://www.isthe.com/for-you-only/anyconnect/OLD/anyconnect-predeploy-linux-64-4.3.05017-k9.tar.gz
> $tar -xzvf anyconnect-predeploy-linux-64-4.3.05017-k9.tar.gz
> $cd /anyconnect-4.3.05017/vpn/
> $sudo ./vpn_install.sh
> 
> $sudo systemctl daemon-reload

おっかなびっくりコマンドを入力していて、3行目までは出来たけど

> $sudo apt-get install lib32z1 lib32ncurses5

ここでエラー出る。入力コマンドは多分間違ってない。悲しい。
明日以降時間出来たら再挑戦＆調査予定。

## VPNつなぐためのソフトの設定したい

色々あって保留。

## VMwareのクライアントをインストール

1. クライアントをダウンロード（https://customerconnect.vmware.com/ja/downloads/details?downloadGroup=CART23FQ1_LIN64_2203&productId=1027）
1. [VMware を Ubuntu にインストールする](https://sites.google.com/site/wakattatsumori/vmware/vmware_install_ubuntu)
    > 　$ cd ダウンロード
　$ sudo sh VMware-ほにゃほにゃ
1. コンポーネントは多分いらんやろってやつ全部はずした



以降適当に進捗したい所存。
favicon 画像を作る

# この記事
- Webサービス作った時に、ついでに作業したのでメモ
    - PCだけでなく、タブレットやスマホでもそれぞれに適したアイコンを表示できたりして便利

# 手順
* 元画像を用意
    * 例えば[ここ](https://www.designevo.com/logo-maker/)から
* [専用サイト](http://realfavicongenerator.net/)で変換
    * 基本的にはそのまま作業すればいい
    * 元ファイルをダウンロードしてから以下を実施
        * `config/favicon.json` の TODO コメント箇所に favicon 画像パスを指定
        * `rails generate favicon` する際にタイムアウトになったので、許容時間を変更
            * `$ ./bin/rails generate favicon --timeout 300`
                * [該当コード](https://github.com/RealFaviconGenerator/rails_real_favicon/blob/master/lib/generators/favicon_generator.rb)
        * サーバ再起動後、`manifest.js` に設定追加するよう言われるので、指示に従う

# 参考
* [Railsでどのサイズのfavicon用意したらいいかわからないそんな時](https://marketing-web.hatenablog.com/entry/rails_favicon)
AWSのクロスアカウントアクセスをCLIからやってみた


## はじめに

- AWSで他アカウントのリソースにアクセスする必要があったため、方法を以下に整理しました。

## 前提
- アカウントAからアカウントBのリソースにアクセスする

## 準備

### アカウントBでの作業
- アカウントBでIAMロールを作成する
    - 信頼関係でアカウントAのIDを指定する
    - 必要なリソースの権限が記述されたIAMポリシーをロールに付与する
        - 	今回は特定のS3バケットへのアクセス権限を記述する

### アカウントAでの作業
- IAMポリシーの作成

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "sts:AssumeRole"
            ],
            "Effect": "Allow",
            "Resource": [ "arn:aws:iam::アカウントB:role/アカウントBで作成したIAMロール名" ]
        }
    ]
}
```
- IAMユーザを作成してIAMポリシーをアタッチする
- アクセスキー、シークレットアクセスキーを作成する

### ローカルPCでの作業
- アカウントAのアクセスキー、シークレットアクセスキーを登録する
```bash
$ vi .aws/credentials
[accountA]
aws_access_key_id = <アクセスキー>
aws_secret_access_key = <シークレットアクセスキー>
```

- AssumeRoleする先のIAMロールのARNと元になるプロファイルを指定する

```bash
$ vi .aws/config 
[profile accountB]
role_arn = arn:aws:iam::<アカウントB>:role/<アカウントBで作成したIAMロール>
source_profile = accountA
```

## 検証
以下コマンド実行することで、アカウントAからアカウントBのリソースにアクセスできる
```bash
C:\>aws --profile accountB s3 ls <アカウントBのS3バケット名>
```

## 参考
https://qiita.com/atsumjp/items/ec7881e4ee77cd38c973
(備忘録)今日つまづいたスマホレイアウトのあれこれ

今日スマホ実機で確認をした際に躓いたレイアウト、挙動面のエラーが
今後も起こりそうなので、備忘録を残します！

# inputエリアをタップ→画面が勝手に拡大
* 原因
iOSではfont-sizeが16pxを基準値としているため
cssでfont-size15px以下を指定すると、画面が勝手に拡大する

* 解決策
①font-sizeを16px以上に指定（意外と大きすぎない）
②metaタグのviewportに`maximum-scale=1.0`を挿入する

```html
 <head>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0">
 </head>
```

#### ※ダブルタップズームは別途制御が必要
* 解決策 
1. htmlに`touch-action:manipulation`
touch-actionには他にも色んなプロパティがあるようだけど
safariでは`auto`と`manipulation`しか使えないみたい。
`manipulation`は
ピンチでのズームはOK、ブラウザ仕様等で追加された
ダブルタップで自動ズームなどの挙動を制限するプロパティとのこと。

2. `preventDefault`をつかって`dblclick`のアクションを消す

　 リセットに1の解決策を組み込んでいる人も多いみたいです。


# overflowでのスクロールロックが効かない
モーダルなどを表示した時に裏背景のスクロールを止めたい時など。

* 原因
よくわかりませんでした。スマホ実機の独特の仕様が多いですね；

* 解決策
① `preventDefault`を使ってユーザーのスクロール挙動の前に操作を差し込む
（スマホなら`touchmove`、PCなら`wheel`）
```javascript
function handllingScroll(e) {
	e.preventDefault();
}

function stopScroll() {
	document.addEventListener("wheel", handllingScroll, { passive: false });
	document.addEventListener("touchmove", handllingScroll, { passive: false });
}

```
　解除は解除用の関数を作って、`removeEventListner`

　ただ、この方法だと例えばモーダル内等にscroll要素があった場合も
　含めて「全止め」なので、ちょっと不便。


　②htmlに`overflow:auto;`と`height:100%;`の指定をし、
　その上でbodyに`overflow:hidden;`と同じく`height:100%;`を指定。
　（既定値のvisibleが邪魔をする..という事なのでしょうか。）

　こちらの記事を参考にさせていただきました、ありがとうございます！
　* [iOSでbodyにoverflow: hiddenが効かないとき](https://qiita.com/nantekkotai/items/15882159e7e39c207d59)

#### バウンススクロールも解除したい場合
↓これ
<img width="200" alt="162c8415bc83e485a8d45c2ca1c44f7d.gif" 
src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602012/a9cdcda3-9f18-6185-5907-0d3d4a8f474b.gif">

さっき`overflow:auto;`にしたhtmlを`overflow:hidden;`にするだけ！
→これを起点のイベントに組み込む

`overscroll-behavior`という要素も使えるんですが
あの**safariが非対応**なので、あまり現実的でないかも；


最終的にこうなりました↓
```css:平時
html{
    overflow: auto;
    height:100%;
    touch-action: manipulation;
    overscroll-behavior: none;
    position:relative;
}
```

```css:イベント後
html{
    overflow: hidden;
    height:100%;
    touch-action: manipulation;
    overscroll-behavior: none;
    position:relative;
}

body{
    overflow-y: hidden;
    overscroll-behavior: none;
    height:100%;
}
```

以上Qiita初記事、乱文失礼しました。
トラブルシューティング：「port 22: no matching host key type found. Their offer: ssh-dss」でSSH接続できない

# 概要
タイトルの通りです。
TryHackMe(ルーム：Linux PrivEsc)をやっていたら、
`port 22: no matching host key type found. Their offer: ssh-dss`が表示され、SSH接続できなくなってました。

# 解決方法
`/etc/ssh/ssh_config`に`HostKeyAlgorithms ssh-dss,ssh-rsa`を追記する事で、SSH接続が復活しました。

原因
参考にあるように、OpenSSHの7.0からDSA(ssh-dss) の脆弱性により無効にされたことが原因のようです。

参考

https://www.freedom.ne.jp/hide/hogehoge/?p=1020
concrete5で新しいページを作る方法

concrete5で新規ページの作成する方法を解説します。

まず、画面上部にあるバーの、赤丸で囲ったボタンをクリックします。
![ページ追加1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733566/8fd809d9-01de-09ea-00f5-982bae9d0fbe.png)


すると、画面右側に次のようなものが表示されるので、赤丸で囲ったところにある「ページ」「イベント」「活動報告」「お知らせ」のどれかを選択します。普通のレイアウトのページを作る時は、**「ページ」**を選択します。**（今回は「ページ」を選択します）**
![ページ追加2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733566/39cf9051-d902-28e0-c363-c15aea914b4b.png)


すると次のような画面になるので、「空の記事ブロックです」という部分をクリックします。
![ページ追加3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733566/a905a0ea-fc48-61b1-a7f4-714cae02b28c.png)


すると、次のようなメニューが出てくるので、「ブロック編集」をクリックします。
![ページ追加4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733566/b2c74a2d-2a93-47df-e07b-2c3ceb59536f.png)


すると次のような画面になるので、このページで解説した方法でページを作ります。
![ページ追加5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733566/31f1063e-c4a3-318f-593a-19d5d0543ec5.png)


ページを作り終えたら、画面上部にあるバーの、赤丸で囲った鉛筆マークをクリックします。
![ページ編集.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733566/cc6c47ea-9ae4-e184-2734-65e06c318773.png)


すると画面の左側に次のようなものが表示されるので、「ページコンポーネンツインターフェース」をクリックします。
![ページ追加6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733566/c7cd4527-9ea5-75f9-5411-00bd80225254.png)

クリックすると次のような画面になるので、ここで「ページ名」と「ページ位置」を設定します。
![ページ追加7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733566/a47efbf5-f3c7-2978-f3c4-c5e12cc90eaf.png)

![ページ追加8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733566/e9a43ef1-50a4-7040-cf85-01242a10498a.png)

設定した後、右下にある水色の「ページを公開」というボタンを押すと、ページを公開できます。
![ページ追加9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/733566/df8d18bb-8b6c-3643-1bd7-bb34676dbdb0.png)
【ABAP】「FOR ALL ENTRIES」使い方解説

<h2>目次</h2>

1. FOR ALL ENTRIES概要
2. 使い方
3. 注意事項


<h4>1. FOR ALL ENTRIES概要</h4>
FOR ALL ENTRIESを追加したSELECT命令では、WHERE条件に、指定した内部テーブルの項目値を使用できるようになる。

<h4>2. 使い方</h4>
サンプルコード

```
*-----------------------------------------------------------------
*メイン内部テーブル
DATA IT_SAMPLE TYPE TA_IT_SMPLE.

＊FOR ALL ENTRIES用に内部テーブルを複製
DATA IT_SAMPLE2 TYPE TA_IT_SAMPLE.
IT_SAMPLE2 = IT_SAMPLE.

*FOR ALL ENTRIS用の内部テーブルをソート
SORT IT_SAMPLE2 BY (項目名） ASCENDING.

*複製した内部テーブルから項目をキーに重複を削除
DELETE ADJACENT DUPLICATES FROM IT_SAMPLE COMPARING (項目名）.

※データ抽出
IF IT_SAMPLE2 IS NOT INITIAL.
  SELECT
    （項目１）
    （項目２）
  FROM  テーブル名
  INTO TABLE 格納したい内部テーブル
  FOR ALL ENTRIES IN IT_SAMPLE2
  WHERE MAKT~MATNR = IT_SAMPLE2-(項目名)
  AND   SPRAS = SY-LANGU.

ENDIF.
*-----------------------------------------------------------------

```

<h4>3. 注意事項</h4>
①内部テーブルを直接編集しない（内部テーブルを複製する）。

②複製した内部テーブルは必ずソートする（重複を削除するためにソートする必要がある）。

③重複を必ず削除する。

④データ抽出時する前に内部テーブルにデータが入っているか確認。

⑤パフォーマンス向上のためにBINARY SEARCHを使用する。

⑥ORDER BYと同時に指定することはできない。

＜補足＞
・BINARY SEARCHとは
二分検索のこと。
ソートテーブルの場合と同様に、キーを使用して高速に
テーブル内のレコードにアクセスすることができる。
※データがソートされている場合のみ使用可
CloudFlareというサービスを試す(1)

# はじめに
自作のアプリケーションを気軽におけるサービスはないかと調べていたら、CloudFlareなるサービスを見つけたので試してみることにした。

https://www.cloudflare.com/ja-jp/plans/#overview

無料で結構使えるらしい。

# 結論
結構使えるので、今後も使っていきたいと思う。

# 詳細
今回は以下を目標にする。
- アカウントを作成する
- 固定のHTMLをインターネット上に公開する

これだけ。

## アカウントを作成する

↓のような感じで、メアドとパスワードでアカウント作成は完了。
日本語でも表示できるし簡単。
メールが届くので、リンクをクリックすればVerify完了。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273897/b061baee-448e-3c14-1c6c-f136da5f16b9.png)

## 固定のHTMLをインターネット上に公開する

メニューのPagesでサイトは公開できるみたい。
3パターンの中で、今後も考えて「Wrangler CLI を使用」にしてみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273897/e2684ab6-5ca7-b01c-c8e1-2d6c9b18a8e7.png)

### Wrangler CLI の準備

インストール。
WARNが出てるけど、よくわからないのでそのまま続行。

```console
C:\donraku\cloudflare>npm install --save-dev wrangler
npm WARN deprecated rollup-plugin-inject@3.0.2: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.

added 56 packages, and audited 57 packages in 12s

1 package is looking for funding
  run `npm fund` for details

found 0 vulnerabilities
```

ログイン。勝手にブラウザが開いて認証がされる。

```console
C:\donraku\cloudflare>npx wrangler login
 ⛅️ wrangler 2.0.5
-------------------
Attempting to login via OAuth...
Successfully logged in.
```

### Pagesを試す

適当にフォルダを作って、ファイルindex.htmlを作る。

```first-app/public/index.html
<html>
    <body>
        <h1>Hello CloudFlare !!</h1>
    </body>
</html>
```

開発用のローカルサーバー起動。勝手にブラウザが起動してページが表示される。
修正しながら表示を確認できる。
固定のHTMLなのでブラウザでみるのと変わらないと思うけど。

```
C:\donraku\cloudflare\first-app>wrangler pages dev public
🚧 'wrangler pages <command>' is a beta command. Please report any issues to https://github.com/cloudflare/wrangler2/issues/new/choose
No functions. Shimming...
Serving at http://localhost:8788/
GET / 200 OK (18.13ms)
GET /favicon.ico 200 OK (8.13ms)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273897/51a00e7f-0608-cd20-2ce6-6a8f5fd218b4.png)

publish で公開。
最初だけ、projectの名称などを聞いてくるので入力するとソースがアップされる。

```
C:\donraku\cloudflare\first-app>wrangler pages publish public
Enter the name of your new project: first-app
Enter the production branch name: production
Using cached values in 'node_modules/.cache/wrangler'. This is used as a temporary store to improve the developer experience for some commands. It may be purged at any time. It doesn't contain any sensitive information, but it should not be commited into source control.
✨ Successfully created the 'first-app' project.
🌏  Uploading... (1/1)

✨ Success! Uploaded 1 files (0.44 sec)

✨ Deployment complete! Take a peek over at https://302cb902.first-app.pages.dev
```

ダッシュボードでみるとprojectができている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273897/a9f89a02-d132-c2a1-2d58-3372e7c2590d.png)

ページも見れる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273897/4bbf2bca-f982-c227-1210-54a8f15a5748.png)

publishする度にサイトができて、最新が固定のURLでみれるようになっているみたい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273897/dd51301d-dccc-c945-155e-b7e4590e281b.png)

簡単ですが、以上。

https://first-app.pages.dev/

↑見れるはず！
ValueError: at site "y", invalid log_prob shape   Expected [], actual [200]の解決

## 問題
pyroで変分ベイズを触っているときに以下のようなエラーが出た。
(" "と[ ]の中身はそれぞれ違うと思います。)
```python:error
ValueError: at site "y", invalid log_prob shape
  Expected [], actual [200]
  Try one of the following fixes:
  - enclose the batched tensor in a with plate(...): context
  - .to_event(...) the distribution being sampled
  - .permute() data dimensions
 ```

## 解決
あまりよくわからないけど、モデル設計の以下の部分と近似分布の形状が合っていない？っぽい。
```python:model
pm_Y = pyro.sample('pm_Y', dist.Normal(mu, sigma), obs=Y)
```
これを以下のようにしたら解決した。
```python:model
pm_Y = pyro.sample('pm_Y', dist.Normal(mu, sigma).to_event(1), obs=Y)
```

### 参考文献
以下はpyroのテンソルについて詳しく書いていたもの。
> https://torch.classcat.com/2020/07/15/pyro-1-3-tensor-shapes/
ゼロトラストのディープダイブ(9)-SSE製品理解(Zscaler社)

[前回] [ゼロトラストのディープダイブ(8)-CNAPP(クラウドネイティブアプリケーション保護プラットフォーム)](https://qiita.com/mingchun_zhao/items/90942f1cd11063636deb)
## はじめに
前回まで、ゼロトラスト対策に関する技術や背景を理論レベルで勉強しました(SASE/SSEなど)。
今回から、実際のゼロトラスト製品やソリューションを例に、理解を深めます。
## Gartner社から発表されたSSEのマジック・クアドラント
- マジック・クアドラント(Magic Quadrant)とは
    - Gartner社が、特定市場を対象に、製品(企業)を4つのタイプに分類する独自の競合分類手法
    - 4つのタイプ
        - Leader(リーダー)
        - Challenger(チャレンジャー)
        - Visonary(概念先行型)
        - Niche Player(特定市場指向型)

- Gartner社が2月15日に発表した、SSEのマジック・クアドラントの結果
    - Leader(リーダー)に選出された3社
        - ゼットスケーラー(Zscaler)
        - ネットスコープ(Netskope)
        - マカフィーエンタープライズ(McAfee Enterprise)

## Gartner社が定義した、SSE(セキュリティ・サービス・エッジ)クラウドサービスのコア機能

以下三つの機能が求められています。

- SWG機能(セキュア・Webゲートウェイ)
    - プロキシ経由のセキュアなWebアクセス
- CASB機能(クラウド・アクセス・セキュリティ・ブローカー)
    - APIおよびプロキシモード経由のセキュアなSaaSアクセス
- ZTNA機能(ゼロトラスト・ネットワークアクセス)
    - プライベートアプリケーションへのセキュアなリモートアクセス

## `Zscaler Zero Trust Exchange`

※ 引用元: [ゼットスケーラーのZero Trust Exchange](https://www.zscaler.jp/platform/zero-trust-exchange)

### Zscaler Zero Trust Exchangeとは

- ゼロトラストアーキテクチャに基づき構築されたクラウドネイティブのプラットフォーム
- 高速かつ安全な接続により、インターネットを企業ネットワークとして利用することで、従業員のWFA(Work From Anywhere)を可能に
- ゼロトラストの原則に基づき、最小限の特権付きアクセスを付与
- コンテキストベースのアイデンティティとポリシー適用により、包括的なセキュリティを提供
- 世界中で運用する150のデータセンタで動作し、アクセス先であるクラウドプロバイダやアプリケーションとのコロケーションを可能に
    - Microsoft 365、AWSなど
- ユーザとアクセス先の間の最短経路を保証し、包括的なセキュリティと優れたユーザエクスペリエンスを提供

### イメージ図

※ 引用元: [Zero Trust Exchangeの概要](https://www.zscaler.jp/products/zscaler-internet-access)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/03544e47-b071-7eb2-447d-ec1b63612639.png)

### Zscaler Zero Trust Exchangeの特徴

- コストと複雑さの軽減
    - 管理と導入が容易
    - VPNや複雑なファイアウォールルール不要
- ユーザエクスペリエンスの提供
    - クラウドアプリケーションへのダイレクト接続のインテリジェントな管理と最適化
    - Direct-to-Cloud、アプリ、クラウドパス、End2Endの可視化により、デジタルエクスペリエンスを最適化
- インターネット攻撃対象領域を排除
    - アプリケーションをZero Trust Exchangeの背後に置くことで、外部への公開と標的型攻撃を防止
- 脅威の水平移動を防止
    - ネットワークアクセスを許可することなくユーザをアプリケーションにダイレクト接続させることで脅威を隔離
- アプリへの高速で安全なアクセス
    - ZTNAソリューションと統合型CASBを組み合わせたSWG機能により、あらゆるデバイスや場所から接続可能
- 総合的なセキュリティ対策
    - 総合的なゼロトラストプラットフォーム上に構築されたSSEを使用

### Zscaler Zero Trust Exchangeの機能

- 独自のアーキテクチャを持つクラウドネイティブなプラットフォーム
- 従来のネットワークセキュリティ技術で実現できなかったゼロトラストを実現
- プロキシアーキテクチャをベースに、ユーザとアプリ、アプリ間、マシン間を含むあらゆるデバイス、ネットワーク、ロケーションで安全に接続するスイッチボードの働き
- アプリケーションからの通信要求を許可する前に、アイデンティティとコンテキストに基づく検証を義務付けている
- インターネット、SaaS、プライベートアプリケーションがホストされている下記場所へのアクセスを保護
    - インターネット
    - データセンター
    - プライベートクラウド
    - パブリッククラウド
- ユーザ、アプリケーション、ワークロードにゼロトラストを提供

### Zscaler Zero Trust Exchangeがゼロトラストを実現する仕組み

- Zero Trust Exchangeが、セキュリティポリシー実行者および意思決定者となり
- モバイルデバイス/IoTから、クラウドアプリケーション/SaaSアプリケーション/インターネットアプリケーションへのアクセスを保護
- ポリシーやコンテキストをさまざまな方法で適用しながら実行判断を下し、リクエストされたリソースへの接続認可を仲介
 
## おわりに
Zscaler社の`Zero Trust Exchange`を例に、ゼロトラストを実現する仕組みを理解しました。
次回は、Netskope社のSSEソリューションを勉強します。
お楽しみに。

##### [次回] [ゼロトラストのディープダイブ(10)-SSE製品理解(Netskope社)](https://qiita.com/mingchun_zhao/items/d675b44ad6a6416590d6)
Truncate時にCannot truncate a table referenced in a foreign key constraintとエラーが出た時の対処法


## 解決策

以下のように外部キー制約を一時的に外してtruncateする

```
SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE table $table_name; 
SET FOREIGN_KEY_CHECKS = 1;
```

ちなみに、外部キー制約の状態は以下コマンドで確認可能

```
SELECT @@foreign_key_checks;
+----------------------+
| @@foreign_key_checks |
+----------------------+
|                    1 |
+----------------------+
```

## 参考
- https://stackoverflow.com/questions/5452760/how-to-truncate-a-foreign-key-constrained-table
- https://hacknote.jp/archives/19470/
- https://fibonacci.hatenablog.jp/entry/2020/12/08/101129
【無理】WindowsのEmojiを好きなフォントにしたかった

## TL;DR
Windowsのデフォルト絵文字をNoto Emojiに変更したかったけど、むりっぽそう。

## Noto Emojiとは

googleが開発した絵文字フォントNoto Color Emojiの、ざっくり言えばモノクロバージョンです。[Google Fonts](https://fonts.google.com/noto/specimen/Noto+Emoji?query=noto+emoji)からダウンロードできます。
以前のバージョンのandroidに使われていたような、ブロブを用いたイラストが特徴です。詳細な内容は [窓の杜の記事](https://forest.watch.impress.co.jp/docs/news/1408856.html) が詳しいです。

![20220517_220602_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696043/6da64c6b-4ace-ee3a-9360-012da51007a8.png)

このフォントが気に入ったので（というか、Segoe UI Emojiがあまり好きではないので・・・）、Windowsの絵文字表示をこれにできないかと考えました。

## そもそもWindowsの絵文字フォントって何？

このあたりは理解不足なのですが、Windowsでの絵文字の表示には、（アプリケーションで指定した場合を除き）アプリケーションを問わずSegoe UI Emoji というフォントが使われています。AndroidでもApple製品でもそれぞれ独自のフォントが使われているようです。
なお、TwitterではOSを問わずTwitter独自の絵文字が表示されますが、画像に置換する処理を行っているようです。[^1]

なので、Windowsの設定で、絵文字フォントの設定を変更することができればめでたしめでたし、だったのですが、残念ながらそのような設定は見当たりませんでした。

## Font Link を設定してみる

Font linkとは、表示したい文字が指定したフォントの中に存在しなかった場合、別のフォントを混ぜて表示する技術です。DirectWriteを使用しているアプリでは反映されないなど、万能ではありませんが、メモ帳などでなら使用することならできるかもしれません。
GUIから設定することはできず、レジストリを直接編集します。方法は[別のサイト](https://so-zou.jp/software/tech/os/windows/font/)に譲ります。

が、結論だけ言うと、Font linkではダメでした。何がダメなのかはわかりません。

## Segoe Emoji UI を偽装できないか

このままでは引き下がれないので、別の方法を考えます。フォントの指定が変更できないなら、フォントのほうを偽装してしまえばいいのではないでしょうか？
そう思って調べると、次の記事が引っかかりました。まさにwindowsの絵文字をNoto Color Emojiに設定したい、という質問です。
[How do I replace Windows 10's emoji?](https://superuser.com/questions/1062418/how-do-i-replace-windows-10s-emoji)

この記事の回答をdeepl先生に突っ込んで引用します。

>Microsoftが意図的にNoto Emojiをサポートしないようにしたわけではありません。もっと簡単に言うと、Notoが使っているフォーマットをサポートしていないだけなのです。
>Segoe UI EmojiはMicrosoft独自のフォーマット（COLR/CPALのレイヤー化されたベクタードローイング）を使っていますし、Noto Emoji ColorはGoogle独自のフォーマット（CBDT/CBLCのビットマップイメージ）を使っています。また、Adobeの「SVG」、Appleの「sbix」形式もあります。
>www.DeepL.com/Translator （無料版）で翻訳しました。

絵文字フォントの形式は統一されているわけではなく、様々なフォーマットがあるようですね。Noto EmojiとSegoe UI Emojiはそもそも形式が違うため、フォント名を偽装した程度のすげ替えでは表示ができない、ということのようです。
各形式の違いは[この記事](https://qiita.com/496_/items/6910dd76283ba1347327)の記事に詳しくあります。Noto EmojiのCBDT/CBLCは画像、Segoe UI EmojiのCOLR/CPALはベクター形式ということで、単にコンバートすればできそう、という気配もしないですね・・・。それにしてもAppleとGoogleとMicrosoftでそれぞれ別の形式を使っているとは、なんと面倒な。いちユーザーとしては、なんでもいいから揃えてくれや、と言いたくなります。

一応、[Noto Color Emojiのリポジトリ](https://github.com/googlefonts/noto-emoji)を覗くと、イラストのsvgファイルも同梱されているので、これをもとにどうにかしてCBDT/CBLC形式のフォントを作成することも不可能……では……ないのかもしれませんが……、筆者にはそんなことをする技術も熱意もなく、ここで諦めました。

## 結論

というわけで、この記事を書いている2022年5月17日現在、Windowsの絵文字をNoto Emoji に置き換える方法は、なさそうです。

## VSCodeなら使える！
VSCodeでは、フォント指定のところに書けば普通に使えます。ただ、フォント指定の先頭に書くと数字を絵文字で表示してしまい大変なことになるので、英字フォントの後ろに書くのが良いでしょう。

![20220517_222105_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696043/9a2fc4fc-e393-f6f4-6d05-9031c7e0796c.png)


こうしてみると、色の情報がない分、視認性が良いとは言えない気もしてきましたが(画像は16pxです)、かわいいのでしばらくはこれで行こうかと思います。

[^1]:[Twemoji](https://twemoji.twitter.com)というライブラリで、誰でも使用することができます。Opentweenなどのアプリケーションでも使われています。
MUIのクイックスタートを実装する(React Material Component)

## はじめに
MUIとはMaterialUIで作成されたコンポーネント。
![スクリーンショット 2022-05-17 22.16.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/a33f0f59-ba6f-2f8f-a66b-9e416d184ae3.png)

## QuickStart
```shell
~/develop/react $ npx create-react-app material_quickstart --template typescript

Creating a new React app in /Users/kawamurakouji/develop/react/material_quickstart.

Installing packages. This might take a couple of minutes.
Installing react, react-dom, and react-scripts with cra-template-typescript...


added 1379 packages in 1m

181 packages are looking for funding
  run `npm fund` for details

Initialized a git repository.

Installing template dependencies using npm...
npm WARN deprecated source-map-resolve@0.6.0: See https://github.com/lydell/source-map-resolve#deprecated

added 39 packages, and changed 1 package in 5s

181 packages are looking for funding
  run `npm fund` for details

We detected TypeScript in your project (src/App.test.tsx) and created a tsconfig.json file for you.

Your tsconfig.json has been populated with default values.

Removing template package using npm...


removed 1 package, and audited 1418 packages in 2s

181 packages are looking for funding
  run `npm fund` for details

6 moderate severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

Created git commit.

Success! Created material_quickstart at /Users/kawamurakouji/develop/react/material_quickstart
Inside that directory, you can run several commands:

  npm start
    Starts the development server.

  npm run build
    Bundles the app into static files for production.

  npm test
    Starts the test runner.

  npm run eject
    Removes this tool and copies build dependencies, configuration files
    and scripts into the app directory. If you do this, you can’t go back!

We suggest that you begin by typing:

  cd material_quickstart
  npm start

Happy hacking!
```

```typescript:App.tsx
import * as React from 'react';
import ReactDOM from 'react-dom';
import Button from '@mui/material/Button';

function App() {
  return <Button variant="contained">Hello World</Button>;
}
```

■実行結果
![スクリーンショット 2022-05-17 22.25.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/06c17ee5-c7d2-1bdb-663f-252e7b73f771.png)

https://mui.com/
今こそまとめるAtom系列Celeron, Pentium（一覧表付き）

# はじめに

Atom系列Celeron, Pentiumが混沌としていて分かりにくいので、一覧表を作ってみる。

# Atom系列マイクロアーキテクチャ一覧

同じ世代のマイクロアーキテクチャであれば大きな性能の差はない・・・はず。世代が変わると性能も大きく向上する。

1. Bonnel世代
    - Bonnel・・・最初のAtom
    - Saltwell・・・Bonnelを32nmにシュリンクしたもの
2. Silvermont世代
    - Silvermont・・・Bonnel, saltwellよりちょっと強くなった
    - Airmont・・・Silvermontを14nmにシュリンクしたもの
3. Goldmont世代
    - Goldmont・・・そこそこ強い。コア数同じでHTあり、ベースクロック倍のモバイル向けNehalemと同等。
    - Goldmont Plus・・・Goldmontのマイナーチェンジ
4. Tremont世代
    - Tremont・・・同じクロックならSandyBridge並みかそれ以上。当時のモバイル向けCPUは基本2コア程度なので、4コアのTremontのほうが強い。
5. Gracemont世代
    - Gramemont・・・Alder LakeのEコア。同クロックのSkylake並みの性能。SandyBridgeおじさん涙目

# 一覧表

|マイクロアーキテクチャ  |開発コード  |ブランド  |デスクトップ2コア |デスクトップ4コア  |モバイル2コア  |モバイル4コア|
|---|---|---|---|---|---|---|
| Silvermont | Bay Trail |Celeron  |J1750<br>J1800  |J1850<br>J1900|N2805<br>N2806<br>N2807<br>N2808<br> N2810<br>N2815<br>N2820<br>N2830<br>N2840|N2910<br>N2920<br>N2930<br>N2940|
| Silvermont | Bay Trail |Pentium  |  |J2850<br>J2900| |N3510<br>N3520<br>N3530<br>N3540|
|Airmont  |Braswell | Celeron | J3060 | J3160 |N3000<br>N3010<br>N3050<br>N3060|N3150<br>N3160|
|Airmont  |Braswell |Pentium  |   |J3710 |   |N3700<br>N3710|
|Goldmont|Apollo Lake|Celeron| J3355 | J3455 | N3350|N3450|
|Goldmont|Apollo Lake|Pentium|   |J4205|   |N4200|
|Goldmont Plus|Gemini Lake|Celeron|J4005|J4105|N4000|N4100|
|Goldmont Plus|Gemini Lake|Pentium|   |J5005|   |N5000|
|Goldmont Plus|Gemini Lake Refresh|Celeron|J4025|J4125|N4020|N4120|
|Goldmont Plus|Gemini Lake Refresh|Pentium|   |J5040|   |N5030|
|Tremont|Jasper Lake|Celeron|   |   |N4500<br>N4505|N5100<br>N5105|
|Tremont|Jasper Lak|Pentium|   |   |   |N6000<br>N6005|

一覧表にしても命名規則混沌としてる・・・

で、PC買うときにどれを選べばいいかというと、Goldmont世代なら4コアデスクトップ向け、Tremontなら4コアのものを選んでおけば、Skylake世代の一部のモバイル向けi5を上回るのでそれなりに快適なはず。

# 余談

## 性能指標

大雑把な1GHzあたり性能を計算してみた。
Geekbench5のシングルスコアを周波数で割っている（TB最大値で割って計算）。

|世代 |性能比 |
|---|---|
|Bonnel|46|
|Silvermont|82|
|Goldmont|152|
|Tremont|221|
|Nehalem|158|
|SandyBridge|204|
|Haswell|248|


## 最強のAtom

Atom P5962Bという、Tremont 24コアのAtomが存在する。
組み込み向けらしくベンチマークスコアなどの情報は殆どないので、テキトーにGeekbench5スコア推定値を計算したところ
- シングル: 462
- マルチ: 7700~9000

程度になる。これはRyzen 5600Xを超えている。
「Atomとかざっこｗｗｗｗｗｗ」とバカにするキッズを「やーいお前んちのPC Atom以下～ｗｗｗｗｗ」と煽るには最高のCPUである。
AWS Amplifyで裁量トレーダー向けバックテストSaaS「Metalify」を爆速で開発した話


![スクリーンショット 2022-05-17 21.53.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251551/71fad9e2-4408-21f6-d18d-004b4d956b06.png)


# はじめに

裁量トレーダーにとって「ルール厳守を徹底し、感情を入れ込むことなく、淡々とトレードする」ことはもっとも重要なトレードの本質と言っていいと思います。

このシンプルなルールでさえも、多くの人は守ることができません。大きく感情を揺さぶられて、損切りができない、利益を伸ばせない、ジリジリと資金を減らし、取り返しのつかない状態に追い込まれる。大半がこれらのパターンで大切な資金を失っていきます。その一方、極一部の億トレーダー、そして、毎月数百万円単位で稼ぎ続けるFXトレーダーが存在します。

**なぜ、このような状況になるのでしょうか？**

それは「自分の裁量トレードに自身がないから」だと思います。今利用している手法が本当に正しいのかは1回のトレードではわかりません。最低でも10回以上のトレードから平均として検討するべきだと思います。しかも、いかに単純な手法だとしてもそこには「売買のタイミング、資産管理、手仕舞い・損切りのタイミング、シナリオの構築、感情の抑制」などさまざまな要素が存在します。

# バックテストの重要性

これらの要素を実時間の速度で検証するとかなりの時間がかかってしまいます。しかしバックテストを行えば、実時間よりも何倍と早く取引の経験ができ、分析して手法を改善できます。

一般的なバックテストツールではMT4上で動作するものもあり、独自のインジケータを使うなど柔軟に活用できます。既存の製品で言うと「Forex Tester」や「練習君プレミアム」などが有名でしょうか。

## バックテストソフトウェアの問題点

しかしながら、これらのバックテストツールは価格が高く初心者にはなかなかハードルが高いのが現状だと思います。

Forex Tester : 約30000円

練習くんプレミアム: 約25000円

また、一回のバックテスト毎にしか結果がわからないので、過去のバックテストとの比較が難しかったりします。そこで、バックテストツールをSaaSとして月額料金で提供し、クラウド上でバックテスト結果を分析できる「Metalify」を開発しました。

初期の開発は速度が重要だと思うので、ReactとAWS Amplifyを活用して一週間ほどでβ版をリリースしました。

# Metalifyとは
![スクリーンショット 2022-05-17 21.50.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251551/0caf528d-dcc5-bc7c-24d6-02580aa7c851.png)


Metalifyは「MT4上で利用できる裁量トレーダー向けのバックテストツール」です。バックテストの結果はクラウド上に保存されるので、いつでも確認、分析できます。

https://metalify-fx.com
また、現在は「テクニカルプレビュー版」なので無料で利用可能です。(2022年5月時点)

# 開発内容
MetalifyではフロントエンドをReactで実装し、バックエンドを全てAWS Amplifyで構築しました。Amplifyは認証、API、ストレージ、ホスティングまでWeb開発に必要なシステム実装を全てAWSに任せることができるサービスです。

## Amplifyを使った感想
こちらがMetalifyバックエンドの概要図です。
![スクリーンショット 2022-05-17 22.03.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251551/6c19d571-1c28-f89c-89ea-b78fdb5caf4b.png)

```
# Amplify 使用コマンド
$ amplify configure
$ amplify init
```

### Cognito
Frontendの認証にはCognitoを使用しています。認証画面はamplify-reactが提供しているUIコンポーネントがあり、それを活用することで認証に関わる実装はほぼなくなりました。
```
# Amplify 使用コマンド
$ aws add auth
```

### GraphQL API, Dynamo DB
frontendとデータベースの接続にはGraphQL APIを使用しました。
AmplifyではGraphQLのモデル定義スキーマを記入するとそれにそって自動でDynamoDB環境を作ってくれます。

```
# Amplify 使用コマンド
$ aws add api
API: GraphQL
```

### REST API, Lambda
実際にバックテストを行うソフトウェア(MT4)側からバックエンドへの取引記録を行う必要がありました。
そのためには、ユーザー専用のトークンが必要になるため、トークン発行にLambdaを使用しました。
また、RESTAPI, Gatewayを使用してMT4から接続できるようにしました。

```
# Amplify 使用コマンド
$ aws add api
API: REST
$ aws add function
```

### Hosting
ホスティングもAWSで完結したいため、AWS Hostingを使用しました。
これもとても便利で、Githubレポジトリとの連携をしてCI/CDに対応することができます。
今回はdevelopブランチを https://develop.metalify-fx.com として、mainブランチを https://metalify-fx.com として自動でビルド、テストをするようにしました。

```
# Amplify 使用コマンド
$ aws add hosting
```

# 最後に
開発時間が短くて速度を重視したいエンジニアには、Amplifyはかなりおすすめできると思います。
今回β版リリースにかかった工数はおよそ一週間で個人開発にしてはかなり早いペースでした。


また、MetalifyのバックテストツールのSaaSとしての提供は今までにもあまりなく珍しいサービスです。
導入はかなり簡単で扱いやすいので、興味ある方はぜひ一度使ってみてください。
**(現在は「テクニカルプレビュー版」なので無償提供しています。)**
【初心者PHP】この整数値は正、負、ゼロ？

(参照：http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocksBasic.html)

# コード
```PHP
<?php
$m = intval(fgets(STDIN));
if($m > 0){
    echo 'positive';
} else if($m < 0){
    echo 'negative';
} else if($m == 0){
    echo 'zero';
}    
?>

```

＜ポイント＞
☆intval()　=　文字列(string)を整数(int)にする
☆is_int()　=　整数か否か調べる

★　=　は「代入」、　==　は「等しい」




　　　　　　　　　↓　ご指摘を受けて・・・

```PHP
<?php
$m = intval(fgets(STDIN));
if($m > 0){
    echo 'positive';
} else if($m < 0){
    echo 'negative';
} else {
    echo 'zero';
}    
?>

```

こちらでも正しい結果が出ました。
教えていただきありがとうございました。
Salesforceのフローでメール送信画面を表示してみました

# はじめに
Salesforceのフローを使って、メール送信画面を表示してみました。

メール文化の会社であると、chatterよりもメールのインターフェースが好まれ、chatterの利用が進まないことが多いです。chatterは、SlackやTeams等のチャットツールよりも取っ付きにくいのも原因だと思います。

徐々にchatterに誘導していくのも良いのですが、メールと同様のインターフェースを表示し、Salesforceを使ってもらうのも手だと考え、フローを作成しました。

# フローを作成する
メールを送るだけなのでシンプルなフロー構成です。
メール送るついでに、メール送信履歴をToDoとして、レコードに紐づけることもしています。
（フローなら１アクションで、様々な処理を自動化できるので、発展性があってよいですね）
![スクリーンショット 2022-05-17 21.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59645/f4d7e1bc-4a14-3dd9-0119-c03d5ab50456.png)

メールの送信画面はシンプルです。
サブルーチン化しているので、引数で宛先、件名、内容を初期値でセットしています。
（件名や内容は、業務によって提携文をセットできるようにしています）
![スクリーンショット 2022-05-17 21.43.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59645/c8dd70a3-ac2d-cf87-b790-c42c4660f13e.png)

メール送信アクションは、全アイテムで入力された値を、セットしています。
![スクリーンショット 2022-05-17 21.44.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59645/1beb72fa-d600-68fa-1428-b0660658e6a8.png)

ToDoは、割り当て先をフロー実行ユーザーに割り当て、状況は完了として、セットしています。
![スクリーンショット 2022-05-17 21.44.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59645/ac8cdb40-201b-9fb9-90d2-c9a163ddd5c8.png)

# レコードの新規アクションとして、ボタン割り当て

レコード右上に新規アクションのボタンを割り当てます。
![スクリーンショット 2022-05-17 21.45.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59645/afa54f42-11f8-0b6c-09b6-3f86cc55d667.png)

新規アクションボタンを押すと、このような感じで画面入力ができます。
![スクリーンショット 2022-05-17 21.45.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59645/4dacd3e0-c116-3785-2743-62d400c2913d.png)

メール送信後、chatterフィードにToDoが記録されるので、わかりやすいですね。
![スクリーンショット 2022-05-17 21.46.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59645/b1b367e1-be04-0b59-eac4-05cc558a8b87.png)
基本情報（ビット操作とマスクパターン）

論理演算（ORやAND）などを使って、ビット操作というものを行うことができるようです。

ビット演算とは

>ビット演算（ビットえんざん、bitwise operation: 直訳すると「ビット毎操作」）とは、固定長のワードなどといった「ビットのカタマリ」（コンピュータの数値表現なども参照）に対して、各々のビット全てに対する論理演算をいっぺんに行う演算操作である。 wikipedia引用

よくわからないのでビットを調べたところ

>コンピュータの世界における「0か1が入る箱」のこと。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典引用

コンピュータは複雑なことをしているように見えますが、電気信号のonとoff
「１」と「０」しか判別ができません。

ビット演算のイメージとしては「１」と「０」を集めて操作したりする
ですかね。

## ビット反転
ビット反転とは
排他的論理和（EOR、XOR）を用いることで表現できます。

XORの真理値表をおさらいすると

|  A   |  B   |  Y   |
| :---: | :---:| :---: |
|   0  |  0  |  0  |
|   0  |  1  |  1  |
|   1  |  0  |  1  |
|   1  |  1  |  0  |

です。

反転させる例は
```
  00000011
+ 11111111
-----------
  11111100
```
です。

「ビットを反転させたい位置に１を入れたビット列」のことを**マスクパターン**と呼ぶそうです。

例えばあるビット列
```
00000011
```
があるとして
```
11111111
```
全部反転させたいなら上記を使い
```
00001111
```
後ろ4ビットだけ反転させたいなら上記を使います。

## 特定のビットを取り出す
ビットを取り出す場合は、論理積(AND)を用います。

真理値表をおさらいすると

|  A   |  B   |  Y   |
| :---: | :---:| :---: |
|   0  |  0  |  0  |
|   0  |  1  |  0  |
|   1  |  0  |  0  |
|   1  |  1  |  1  |

今回は
```
01101011 
// 対象となる元のビット列
```
上記に対して
```
00001111 
// マスクパターン
```

を使ってビットを取り出してみます

```
  01101011
+ 00001111
-----------
  00001011
```

## まとめ
* ビットを反転させる際は排他的論理和（XOR）を使い
* ビットを取り出す場合は論理積（AND)を使用
* 元のビットに対してマスクパターンを使って反転させるか、取り出すことができる

ざっくりとまとめてみました。
コンピュータは0と１で出来ていることを忘れずに、複雑に考えがちですがシンプルに考えられるように鍛えていきます！
2022-05-17 検討: esa.ioと別サービスを使った情報の一般公開


### 概要

複数の情報共有のサービスにはそれぞれのサービスにおいて苦手なことがある。他のサービスと連携することで、その利便性向上を考えてみる。

公開時の検討事項
- 記事の編集性
- 記事の検索性 (作成者)
- 記事の検索性 (閲覧者)
- 記事の堅牢性 (他者によって変更されない)
    - 関連: [Tag > 名寄せに関する違和感](https://qiita.com/7of9/items/1ea4c4982fc9b60fab46)

### サービスの特徴 (2022-05-17時点)

- esa.io
    - 記事の編集性:  Markdownで記事を書くことができる
    - 記事の検索性 (作成者): 様々な検索機能により目的の記事に到達しやすい
    - 記事の検索性 (作成者): カテゴリによって記事をまとめやすい
    - 苦手: カテゴリやブックなどの公開がない
        - 記事単位での公開となる
        - 記事間の横断ができない (手動リンク作成)
        - 閲覧者が複数記事を検索して見つけられない
- Scrapbox
    - 記事の検索性 (閲覧者): プロジェクト単位で公開可能
        - 閲覧者が検索可能
        - プロジェクト内検索で記事を見つけられる

Zennというサービスがあるが、タグ検索ができない点で自分は候補からはずした。


### 案: esa.io + Scrapbox

- esa.io : 記事作成、管理に使う
- Scrapbox : 一般公開のエントリポイントとして使う

### Scrapboxの制限と対応

- タグ検索は100件まで
    - C++ Builderの記事911件
    - => 一つのScrapBox記事で複数のesa.io記事をリンクすることになる
        - 20/記事 => 2000記事


### 課題: 複数記事のリンクを一記事にまとめる場合、複数タグの扱いをどうするか

- 案1
    - タグをprimaryTag, secondaryTag, ...に分ける
    - 記事リンクはprimaryTagでまとめる
    - 記事内にsecondaryTag,...のテキストを付ける
        - ページ内検索に使う
        - =>
            - 懸案事項: cppBuilderのnamingと、FPGAのnamingが個別のエントリポイントになる
 - 案2
     - ScrapboxではなくNotionを使う
     - => 
         - primaryTagの概念がなくなり、タグ検索がしやすい？
         - Notionの複数タグ検索は「OR検索」のようだ
             - AND検索と比べると、検索結果が余分に出ることになる
    

### 情報（関連、気になった事項）

- Scrapbox
    - [共同編集システム](https://scrapbox.io/villagepump/%E5%85%B1%E5%90%8C%E7%B7%A8%E9%9B%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)
    - 要望: [scrapbox内の検索機能では30ページ分しか表示できない件について](https://scrapbox.io/forum-jp/scrapbox%E5%86%85%E3%81%AE%E6%A4%9C%E7%B4%A2%E6%A9%9F%E8%83%BD%E3%81%A7%E3%81%AF30%E3%83%9A%E3%83%BC%E3%82%B8%E5%88%86%E3%81%97%E3%81%8B%E8%A1%A8%E7%A4%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E4%BB%B6%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
        - 試験的に100件まで対応
    - [HashTagがあると分類して整理整頓したくなってしまう](https://scrapbox.io/shokai/HashTag%E3%81%8C%E3%81%82%E3%82%8B%E3%81%A8%E5%88%86%E9%A1%9E%E3%81%97%E3%81%A6%E6%95%B4%E7%90%86%E6%95%B4%E9%A0%93%E3%81%97%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86)
    - [HashTagではなく文中リンクを使う](https://scrapbox.io/shokai/HashTag%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E6%96%87%E4%B8%AD%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E4%BD%BF%E3%81%86)
- Notion
    - [共有の方法](https://www.notion.so/ja-jp/help/sharing-and-permissions)


### 例 (esa.io + Notion)

esa.io + Notionで一部の記事を公開してみた。

- [public_esaio_2022_05_17](https://www.notion.so/137fb26a126c4e93be4f95a03f0f748d?v=e6ca1d28ecd94dc5834e26d625924af6)
現代のスタンダードなフロントエンド開発に関するスライド

memo.

JSer.info で紹介されていたスライド。

> SPA、React、TypeScript、SSR、CDNについての導入的なスライド。
> https://jser.info/2022/05/17/solid-v1.4.0-playwright-v1.22.0-safari-15.5/

目次
- Web サイトはどのようにして表示されるか
- 伝統的な開発方法
- Single Page Aplication　という考え方
- ReactJS は何を解決するか
- TypeScript は何を解決するか
- Server Side Rendering は何を解決するか
- CDN は何を解決するか

https://docs.google.com/presentation/d/e/2PACX-1vSjF1cp8fAdMKwFkLmtFT66e-UCD6zanO5KLsuRFmWyZ-8c06YQmgWT750Aqai2JfqHRARYWlkDLfaB/pub?slide=id.p
Martian ProxyでMITM

# 概要
go製のMITMプロキシである[Martian Proxy](https://github.com/google/martian)でレスポンスヘッダを書き換える方法。

# インストール
```
$ go install github.com/google/martian/cmd/proxy@latest
```

# 起動
```
$ ${GOPATH}/proxy \
    -v=2 \
    -addr=:9999 \
    -api-addr=:9898 \
    -generate-ca-cert    # MITM用の証明書を生成する
```

# ヘッダ書き換えの設定
```
$ vi config.json
{
  "header.Modifier": {
    "scope": ["response"],
    "name": "Test-Header",
    "value": "true"
  }
}

$ curl \
    -x 127.0.0.1:9898 \
    -H 'content-type: application/json' \
    -XPOST \
    -d @config.json \
    http://martian.proxy/configure
```
* 書き換えルールの詳細は[Modifier Reference](https://github.com/google/martian/wiki/Modifier-Reference)を参照

# 証明書の取得
```
$ curl \
    --proxy http://127.0.0.1:9999 \
    -O authority.cer
    http://martian.proxy/authority.cer
```

# 動作確認
```
$ curl -D - -k --cacert authority.cer --proxy http://127.0.0.1:9999 https://qiita.com/
HTTP/1.1 200 OK
Test-Header: true
Content-Length: 0

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Cache-Control: max-age=0, private, must-revalidate
Content-Type: text/html; charset=utf-8
...
Test-Header: true   # 成功!!
...
```