OmniAICreator/Qiita-1.07M huggingface dataset:
ServiceNowでUTCとの時差を取得する

Version: Paris

#ServiceNowのDate, Date/Time型
ServiceNowのDate/Time型ではDB内でUTC(GMT)のUNIXTIME(エポック秒)でミリ秒まで保持していて利用しているユーザーのTimezoneに従って計算して表示されているようです

[Date and Date/Time fields]
https://docs.servicenow.com/bundle/paris-platform-administration/page/administer/time/reference/r_UseDateAndTimeFields.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/d2327967-7dea-2967-9ba7-53f90b37ae58.png)
[Time configuration]
https://docs.servicenow.com/bundle/paris-platform-administration/page/administer/core-configuration/concept/p_Time.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/2c945498-34d8-ec22-7903-b975e241e93a.png)
とても便利な仕組みだと思いますがちょっと任意のTimezoneの値を取得したくなったので調べてみました

#Packages.java.util.TimeZoneを使う
色々ググった結果この方法が見つかりました(関数にしています)

```
prt_tz_ofs("Asia/Tokyo");
prt_tz_ofs("US/Pacific");
prt_tz_ofs("Australia/Eucla");

function prt_tz_ofs(p_tz) {
  var gdt = new GlideDateTime();
  var tz = Packages.java.util.TimeZone.getTimeZone(p_tz);
  gdt.setTZ(tz);
  var tzoffs = gdt.getTZOffset() /1000/ 60/60;
  gs.info(p_tz + " ha " + tzoffs + " hours!!");
}
```

Scripts - Backgroundで実行した結果が以下です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/08c518a6-5df8-88f5-a6a6-3a2c24ff91bb.png)

もうちょっと便利な方法があるかもですがやりたいことは出来ました
別プロジェクトにNext.jsを追加した時のTypeError: Cannot read property 'tap' of undefinedエラーの解消法

## 概要
`create-next-app`を使って最初からNext.jsプロジェクトを作成するのではなく、既存のプロジェクトにNext.jsを追加する時に発生するエラーの話です。

```
❯❯❯ npm run dev:client
(省略)
ready - started server on http://localhost:3000
TypeError: Cannot read property 'tap' of undefined
```

## やっていたこと
私の場合、Nest.jsのプロジェクトにNext.jsを追加し、開発サーバーを起動したタイミングで、タイトルのエラーが発生しました。
具体的には、`next`, `react`, `react-dom`のパッケージを追加し、`next dev`(をnpm script化したもの)を実行していました。

## 解決方法
https://github.com/vercel/next.js/discussions/19081
同様のエラーについて、こちらのIssueで案内されています。
Issueに従って、`package.json`に`"webpack": "^4.44.1"`を追加し、`webpack`のバージョンを固定することで解決しました。
Nest.jsの依存関係を確認したところ、`webpack`のバージョンは5.9.0が用いられているようです。
`create-next-app`でプロジェクトを作成する場合は、`webpack`のバージョンが変わることが少ないので、初めての気づきでした。

```
"@nestjs/cli": {
      "version": "7.5.4",
      "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-7.5.4.tgz",
      "integrity": "sha512-qKdniSA7NXO/5HqSxGaalMS7roIJXeT4yXTadBQ47Qv68DHh/0jfCcTzH6hqCuyRV7DV2k0bxob+rq4peMaZBw==",
      "dev": true,
      "requires": {
       (省略)
        "webpack": "5.9.0",
        "webpack-node-externals": "2.5.2"
      },
```
OpenURL実装ガイド　ダイジェスト


## きっかけ
OpenURL機能のIF設計が必要になったときのメモです。

## OpenURL？
書誌情報などのメタデータを URL としてどう記述するかを決めたもの

書誌情報などのメタデータ部分を指定する規格なので、
OpenURL機能を提供しているサービスであれば、
OpenURLのベースURLを差し替えるだけで、いろいろなサービスへ検索できます。

## 参考
基本仕様
https://www.niso.org/publications/z3988-2004-r2010

実装ガイドライン（こっちしか読んでない）
http://alcme.oclc.org/openurl/docs/implementation_guidelines/

## まとめ
設計したときの要点です。

1. ベースURLを決める

2. 表示するエンティティの種別を決め、パラメータを決定する
http://alcme.oclc.org/openurl/servlet/OAIHandler/extension?verb=GetMetadata&metadataPrefix=mtx&identifier=info:ofi/fmt:kev:mtx:ctx
の「rft_」がついているものを選びます。
あと、OpenURL1.0ならば、url_verをつけます。


3. メタデータフォーマットのパラメータを使う
何のメタデータを扱うかで、パラメータのフォーマットを変えます。
下記URLが扱うデータごとのパラメータのフォーマットです。下記URLのどれか１つを選びます。
そして、それぞれの項目にrft.を付加すればOKです。
http://alcme.oclc.org/openurl/servlet/OAIHandler/extension?verb=GetMetadata&metadataPrefix=mtx&identifier=info:ofi/fmt:kev:mtx:journal
http://alcme.oclc.org/openurl/servlet/OAIHandler/extension?verb=GetMetadata&metadataPrefix=mtx&identifier=info:ofi/fmt:kev:mtx:dissertation
http://alcme.oclc.org/openurl/servlet/OAIHandler/extension?verb=GetMetadata&metadataPrefix=mtx&identifier=info:ofi/fmt:kev:mtx:book
http://alcme.oclc.org/openurl/servlet/OAIHandler/extension?verb=GetMetadata&metadataPrefix=mtx&identifier=info:ofi/fmt:kev:mtx:dc


## 詳細（まとめの補足）

1. ベースURLを決める
特に無いです。

2. 表示するエンティティの種別を決め、パラメータを決定する
取り扱うエンティティ(カッコ内は接頭辞)には、下記の５つあります。
所蔵・図書・雑誌を検索するOpenURLを、提供元が実装するならば、取り扱うエンティティは「Referent」で十分そうです。
    - Referent(rft)：必須　指示対象　≒見たい実態
    - ReferringEntity(rfe)：指示対象を参照するエンティティ、ガイドラインだと引用文献を例えています。
    - Requester(req)：利用者、正直、文献検索のシーンで利用用途が浮かびません。
    - ServiceType(svc)：サービスのタイプ、利用用途？、利用シーンがなかったので、あまり、読んでません。
    - Resolver(res)：リンクリゾルバを指定できるそうですが、同じリゾルバのベースURLを置き換えるためでもないので、用途がわかりません。
    - Referrer：メタデータの発行元や、所蔵館を指定します。

3. 指定したメタデータフォーマットのパラメータを使う
メタデータにどのようなデータが格納されているかは、メタデータフォーマットに従います。
かつ、エンティティは、単一のメタデータフォーマットのみ指定します。
例えば、info:ofi/fmt:kev:mtx:journal（雑誌フォーマット）と、info:ofi/fmt:kev:mtx:dissertation（博士論文フォーマット）のパラメータが混在することは禁止です。

## なんとか、、

手元で、OpenURL機能のIFのドラフト案を作成しました。
RFCとかと違って、業界に特化した標準化規格は、用語？慣習？がわかっていないと、非常に理解しにくい。。。
アイデア投資市場



【要約】
【目的】会社に対して投資する株式投資市場と同様に、アイデアに対し投資するアイデア投資市場を社会基盤として新たに作り出す。
【解決手段】発案者がアイデアをウェブ上で公表し、その公表アイデアに対する株（仮想通貨の一種のトークン）を発行する。その公表アイデアを閲覧した者が、その将来性を見込んで公表アイデアのトークン株を購入する。購入したトークン株は、セカンダリーマーケットとして他のユーザと売買できる。売買価格は、変動する相場の価格に従う。公表アイデアを閲覧した企業がそのアイデアを商品化（事業化）れば、その公表アイデアのトークン株が高騰する。商品化（事業化）による売上の一部をトークン株主（トークン株を所有しているユーザ）に配当する。トークン株主は、アイデアに対し発言権を有しており、改良案や事業化案等の意見を述べることができる。

【詳細説明】
　このアイデア投資市場システムは、ＤＡＯ（自立分散型組織）で構成する。例えば、ビットコインはＤＡＯの一種であるが、ノード（マイナー）がマイニング（記帳権の競争）という１種類の役務のみを担っており、マイニングに成功した者にビットコインを付与するといインセンティブを与えることによりブロックが追加され、ビットコインのシステムが自律的に継続される。これに対し、アイデア投資市場システムは、役務が、アイデア発案、改良発案、事業化、侵害発見、トークン株購入の５種類存在するＤＡＯで構成する。アイデア発案、改良発案、事業化、侵害発見の何れかを行ったユーザに対し、報酬としてトークン株が与えられる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/461483/d5b76d6b-fca9-bbf8-a659-fc96ef84bc2c.png)

　トークン株７２の変動相場での価格変動を下図に基づいて説明する。アイデア発案役務を行った発案者６７に報酬Ａ１として５０トークン（時価総額５万円）７２が付与されており、そのトークン７２の一部（１０トークン）を１万円相当の仮想通貨を支払ってユーザ７１ａが購入した。次に、その１０トークンを１万５千円相当の仮想通貨を支払ってユーザ７１ｂが購入した。その結果、１０トークンが１万５千円に価値が高騰する。それをユーザ７１ｃが２万円相当の仮想通貨を支払って購入した。その結果、１０トークンが２万円に価値が高騰する。それをユーザ７１ｄが２万５千円相当の仮想通貨を支払って購入した。その結果、１０トークンが２万５千円に価値が高騰する。それをユーザ７１ｅが３万円相当の仮想通貨を支払って購入した。その結果、１０トークンが３万円に価値が高騰する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/461483/3b81b161-72e3-2051-ff4f-b2ff0165c887.png)

　これにより、発案者６７の手持ちの４０トークン（時価総額４万円）が時価総額１２万円に高騰する。このトークンは期待値に正比例して高騰するのであり、人気のあるアイデアほど高くなり、人気のある（いいね！の多い）改良案が投稿されるほど高くなり、人気のある（いいね！の多い）事業化が投稿されるほど高くなり、人気のある（いいね！の多い）侵害対処が投稿されるほど高くなる。

　なお、アイデアに対するトークン株ばかりでなく、各役務担当者自身が自分のトークン（マイトークン）を発行してもよい。各役務担当者の将来性を見込んだユーザがその役務担当者のマイトークンを購入し、それをセカンダリーマーケットとして他のユーザと売買できるようにする。
STM32F303K8とOLED、AL12832AWWB-H-U02でHello Worldを表示2(Mbed)


x mbedが使える人が対象
x SSD1306_128x32

1.mbedでstm32f303k8をコンパイル出来るようにする。
2.新規プログラムを開く
3.下記のソースを描く。
4.oledのライブラリをインストールする。
Dai YokotaさんのSSD1306_128x64_I2Cライブラリを使用した。
https://os.mbed.com/users/jk1lot/code/SSD1306_128x64_I2C/file/46dcbaa430f4/SSD1306.h/

ライブラリのインストール方法は、
mbedの画面のプロジェクトディレクトリー名の所で右クリックして
新しいライブラリー...を選択してOLED検索画面からDai Yokotaを選択
する。
5.コンパイルする。
6.何らかの方法で書き込む。
7.Hello Worldが表示されたら終わり。

おまけ
3.3Vを5Vに変換する為にＰＦＭステップアップＤＣ／ＤＣコンバーター　ＨＴ７７５０Ａ（５個入）とコンデンサー2個とコイルとダイオードを使用した。
マイコンは、ＳＴＭ３２　Ｎｕｃｌｅｏ　Ｂｏａｒｄ　ＳＴＭ３２Ｆ３０３Ｋ８


```c++


#include "mbed.h"
#include "SSD1306.h"
#include "font_8x8.h"

DigitalOut myled(LED1);

#define ADDR     (0x3c<<1) //  address
//#define ADDR     (0x3d<<1) //  address
 
I2C i2c(I2C_SDA, I2C_SCL);

// Host PC Communication channels
Serial pc(USBTX, USBRX); // tx, rx

// Instantiate OLED
SSD1306 oled(i2c, ADDR);

char ddff[8*8];

void char11(int row,int com,int cha)
{
    
    int char_index1;

    char_index1 = cha-0x20;

    int ii;
    
for (ii = 0;ii<(8*4);ii++) {ddff[ii]=0;}
for (ii =0;ii<8;ii++){
ddff[ii+ 0] = ddff[ii+ 0] | ((font_8x8[char_index1][ii] >> 0) & 1)<<1; //1bit  
ddff[ii+ 0] = ddff[ii+ 0] | ((font_8x8[char_index1][ii] >> 0) & 1)<<3; //1bit 
ddff[ii+ 0] = ddff[ii+ 0] | ((font_8x8[char_index1][ii] >> 1) & 1)<<5; //2bit  
ddff[ii+ 0] = ddff[ii+ 0] | ((font_8x8[char_index1][ii] >> 1) & 1)<<7; //2bit 
ddff[ii+ 8] = ddff[ii+ 8] | ((font_8x8[char_index1][ii] >> 2) & 1)<<1; //3bit  
ddff[ii+ 8] = ddff[ii+ 8] | ((font_8x8[char_index1][ii] >> 2) & 1)<<3; //3bit 
ddff[ii+ 8] = ddff[ii+ 8] | ((font_8x8[char_index1][ii] >> 3) & 1)<<5; //4bit  
ddff[ii+ 8] = ddff[ii+ 8] | ((font_8x8[char_index1][ii] >> 3) & 1)<<7; //4bit 
ddff[ii+16] = ddff[ii+16] | ((font_8x8[char_index1][ii] >> 4) & 1)<<1; //5bit  
ddff[ii+16] = ddff[ii+16] | ((font_8x8[char_index1][ii] >> 4) & 1)<<3; //5bit 
ddff[ii+16] = ddff[ii+16] | ((font_8x8[char_index1][ii] >> 5) & 1)<<5; //6bit  
ddff[ii+16] = ddff[ii+16] | ((font_8x8[char_index1][ii] >> 5) & 1)<<7; //6bit 
ddff[ii+24] = ddff[ii+24] | ((font_8x8[char_index1][ii] >> 6) & 1)<<1; //7bit  
ddff[ii+24] = ddff[ii+24] | ((font_8x8[char_index1][ii] >> 6) & 1)<<3; //7bit 
ddff[ii+24] = ddff[ii+24] | ((font_8x8[char_index1][ii] >> 7) & 1)<<5; //8bit  
ddff[ii+24] = ddff[ii+24] | ((font_8x8[char_index1][ii] >> 7) & 1)<<7; //8bit 
}//for

oled.writeBitmap((uint8_t*) ddff,
              row, (row + 4 - 1),
              com, (com + 8 - 1));

} //end chr11    

int main() {
    int ii;
    pc.baud(9600);
    
    char ss1[]="Hello World !";
    ii=0;
    while(ss1[ii]!=0){
        char11(0,ii*8,ss1[ii]);ii++;
    }
    pc.printf("Printed something\r");    
}


```

![oled_303_5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/7115aa07-8f97-1142-5985-cd159e4c3bdc.jpeg)
Deep Evidential Regression【Broader Impact】【論文 DeepL 翻訳】

この記事は自分用のメモみたいなものです.
ほぼ [DeepL](https://www.deepl.com/home) 翻訳でお送りします.
間違いがあれば指摘していだだけると嬉しいです.

翻訳元
[Deep Evidential Regression](https://arxiv.org/abs/1910.02600)
Author: Alexander Amini, Wilko Schwarting, Ava Soleimany, Daniela Rus

前: [【6 Conclusions, limitations, and scope】](https://qiita.com/tomato_/items/570a8526bccf078bd41f)
次: 

# Broader Impact

## 訳文

ニューラルネットワークの不確実性推定は, 社会に非常に大きな影響を与える. ニューラルネットワークは, ブラックボックス予測器として訓練され, 予測のエラーが下流のタスクに即時の脅威をもたらす可能性がある大規模な意思決定システムに配置されることが増えている. 特に, これらのシステムが自律走行車制御 [29], 医療診断 [43], あるいは犯罪予測 [24] や顔認識 [3] のような大規模なデータセットの不均衡やバイアスを伴う設定に配備されるようになると, このような状況下で較正された不確かさ推定のための体系的な手法が必要とされるようになる. この研究は, ニューラルネットワークの精度と精度の限界を絶えず押し広げている機械学習研究の大部分を補完するものである. 我々の手法は, 性能向上のために大規模なモデルを最適化するだけではなく, これらのモデルがどのようにして自身の信頼度を推定する能力を備えることができるかに焦点を当てている. ベースラインよりも優れたキャリブレーションを実証した結果は, これらのアルゴリズムに一定の信頼を置き, "わからない" と言われたときに理解できるようにするためにも非常に重要である. 機械学習における不確実性推定には明確かつ広範な利点があるが, 発生する可能性のある社会的課題を認識することも重要であると考えている. パフォーマンスと不確実性推定能力の向上に伴い, 人間は必然的にモデルの予測を信頼するようになるだけでなく, 危険な決定や不確実な決定を実行前にキャッチする能力が高まることになる. したがって, 間違いが独立して捕らえられ, 修正される可能性を高めるために, このような学習システムにおいて冗長性を追求し続けることが重要である.

## 原文

Uncertainty estimation for neural networks has very significant societal impact. Neural networks are increasingly being trained as black-box predictors and being placed in larger decision systems where errors in their predictions can pose immediate threat to downstream tasks. Systematic methods for calibrated uncertainty estimation under these conditions are needed, especially as these systems are deployed in safety critical domains, such for autonomous vehicle control [29], medical diagnosis [43], or in settings with large dataset imbalances and bias such as crime forecasting [24] and facial recognition [3]. This work is complementary to a large portion of machine learning research which is continually pushing the boundaries on neural network precision and accuracy. Instead of solely optimizing larger models for increased performance, our method focuses on how these models can be equipped with the ability to estimate their own confidence. Our results demonstrating superior calibration of our method over baselines are also critical in ensuring that we can place a certain level of trust in these algorithms and in understanding when they say “I don’t know”. While there are clear and broad benefits of uncertainty estimation in machine learning, we believe it is also important to recognize potential societal challenges that may arise. With increased performance and uncertainty estimation capabilities, humans will inevitably become increasingly trusting in a model’s predictions, as well as its ability to catch dangerous or uncertain decisions before they are executed. Thus, it is important to continue to pursue redundancy in such learning systems to increase the likelihood that mistakes can be caught and corrected independently.
Laradockをちょっと便利にするコマンドラッパーを作った

この記事は[個人開発 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/private-development)の23日目です。

# TL;DR
Laradockをちょっと便利にするコマンドラッパーを作りました。
https://github.com/ngmy/laradockctl

# 背景
WebサービスやOSSを開発するときはDockerを使うと開発マシンが汚れないので便利ですね。
私はもっぱらPHPで開発しており、また一からDockerで開発環境を構築する時間もないので、開発環境は[Laradock](https://laradock.io/)のお世話になることが多いです。
LaradockはPHPの開発に必要なもの全部入りのDocker環境で、PHP界隈ではおなじみのツールです。

そんなLaradockですが、使っていて個人的に不便に感じる点があります。

# Laradockを使っていて個人的に不便に感じる点
## 1. どのコンテナを起動すればいいのか忘れる
「このWebサービスではnginxコンテナとmysqlコンテナを立ち上げて……」「このOSSではmailhogコンテナも立ち上げて……」といった具合に、プロジェクトに応じて起動するコンテナが異なるので、毎回どのコンテナを起動すればいいのか忘れます。
これはしばらく触っていなかったプロジェクトをひさしぶりにメンテナンスする必要が生じたときによく起こります。

## 2. コマンドを打つのが面倒くさい
私はターミナルとVimで開発する古いタイプの人間なので、ターミナル上でカレントディレクトリをガンガン移動しながら開発します。
Laradockを操作するときは`docker-compose`コマンドを実行することになるのですが、Laradockのインストールディレクトリ以外から実行するにはいちいち`-f`オプションや`--env-file`オプションで`docker-compose.yml`ファイルや`.env`ファイルを指定しなければならず、コマンドを打つのが非常に面倒くさくなります。
かといって、いちいちLaradockのインストールディレクトリに移動するのも面倒です。

# 作ったもの
というわけで、上記の不便に感じる点を解消するために、Laradockのコマンドラッパーを作りました。
https://github.com/ngmy/laradockctl

下記のコマンドでプロジェクトルートにインストールして使います。

```console
git submodule add https://github.com/ngmy/laradockctl.git
```

パスを通します。

```bash
export PATH=/PATH_TO_LARADOCKCTL/bin:$PATH
```

[direnv](https://direnv.net/)を使ってパスを通すことをおすすめしています。

これでラッパーコマンド（`laradockctl`）が使えるようになります。

ラッパーコマンドの例です。

```bash:Composerを実行する
laradockctl workspace:composer
# docker-compose -f /PATH_TO_LARADOCK/docker-compose.yml --env-file /PATH_TO_LARADOCK/.env workspace composer のラッパー
```

```bash:Artisanを実行する
laradockctl laravel:artisan
# docker-compose -f /PATH_TO_LARADOCK/docker-compose.yml --env-file /PATH_TO_LARADOCK/.env workspace php artisan のラッパー
```

```bash:Laravelのアプリケーションログを表示する
laradockctl laravel:logs
# docker-compose -f /PATH_TO_LARADOCK/docker-compose.yml --env-file /PATH_TO_LARADOCK/.env workspace tail storage/logs/laravel.log のラッパー
```

素の`docker-compose`コマンドを使う場合よりタイプ数がぐっと減ります。

またカスタムコマンドを追加することもできます。

私はプロジェクトごとに開発環境の起動コマンドを書いて、プロジェクトのリポジトリに一緒にコミットしています。

下記の例では、開発環境用のLaradockの`.env`ファイルを使って必要なコンテナを起動して、開発環境用のLaravelの`.env`ファイルをコピーして、Composerでパッケージをインストールして、Laravelの初期処理を行い、データベースマイグレーションを行い、フロントエンドのビルドを行う`my:up`というコマンドを定義しています。

```bash:開発環境を起動するカスタムコマンドの例
#!/bin/bash
set -Ceuo pipefail

local NAME='my:up'
local DESCRIPTION='Launch my development environment'

handle() {
  cp -f ../.laradock/env-development .env
  docker-compose up -d nginx mysql mailhog workspace
  cp ../.env.development ../.env
  docker-compose exec workspace composer install
  docker-compose exec workspace php artisan key:generate
  docker-compose exec workspace php artisan migrate
  docker-compose exec workspace npm install
  docker-compose exec workspace npm run dev
}
```

このカスタムコマンドをプロジェクト内の適当な場所（`.laradock/commands`など）に置いて、パスを通します。

```bash
export LARADOCKCTL_COMMAND_PATH=/PATH_TO_YOUR_COMMAND:/PATH_TO_LARADOCKCTL/commands
```

これもdirenvを使うことをおすすめします。

これでカスタムコマンドが使えるようになります。

```console
laradockctl my:up
```

上記のコマンドを実行するだけで開発環境が立ち上がるようになるので、ひさしぶりのメンテナンスでどのコンテナを起動すればいいのか忘れてしまっていても大丈夫です。

# おわりに
Laradockをちょっと便利にするコマンドラッパーを作った話をしました。
Laradockを使っていて同じような点を不便に感じている人がいたらぜひ使ってみてください。
Ruby学習#1 Introduction

本日の学習内容

1.introduction  〜　3.Mac Installaion 既にインストール済　スキップ

4.Hello World 

　●ATOMのインストール方法
   ATOMのサイトへ　https://atom.io/
　　MAC版インストール　（既にインストール済、後日手順化）

　●giraffe.rb を作成
　　print "Hello World"

●明日やること
　・Rubyの実行環境を整備する。
　・学習を阻害する要因を消し去る（スマホのyoutubeオフライン動画消す）
　・既に基礎学習を終了しているため、プログラミングノートの作成に注力し、
　　あまり時間をかけないこと。
●環境デザイン
　・外出先でpcなくてもpaizaを使い学習効率高める
　　https://paiza.io/projects/MdeZlhs0J8LKokYZZSk8WA
　・スマホで脳ジャックされるの最小限にするため、
　　不要なアプリを消すことと、YouTubeのオフライン保存動画消しまくる
CSSで吹き出しを作る記述

以下のようなコメントや吹き出しの記述メモ (レスポ対応)
![スクリーンショット 2020-12-23 6.25.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/825124/557c1e35-ab5a-77ce-3da7-f24ede110579.png)

#ポイント
- 三角は`擬似要素`
- 三角は`border`で形成
- 要素と擬似要素の`heightは同じ`にする(ぴったりくっつけるため)

> たいてい親要素があると思うので`widht:100%でOK`の場合が多いが
他の要素と調整して必要に応じてmax-widthなどで対応


```html
<div class="comment">コメント</div>
```

```css
/* ===== グレー部分 ===== */
.comment{
    width: 100%;
    height: 4rem;
    border-radius: 1rem;
    background-color: lightgrey;
    position: relative;
}

/* ===== オレンジの三角部分 ===== */
.comment:after{
    content: "";
    position: absolute;
    top: 4rem;
    left: 50%;
    transform: translateX(-50%);
 /* 三角マークの形成 */
    width: 0;
    border-top: 1rem solid orangered;
    border-left: .8rem solid transparent;
    border-right: .8rem solid transparent;
}
```
【IQ Bot】検証に回っているドキュメントの数をリアルタイムで把握するBot


IQ Botに投げ込んだドキュメントのうち、検証（下図の⑥）に回った帳票の数をリアルタイムで把握する方法を解説します。

![IQ Bot 利用フロー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/92891170-009b-7713-d659-f16efa929724.png)

#手順

上記は、Bot Storeで手に入るIQ Bot Advancedというパッケージを使って実現できます。

では、順を追って手順を見ていきましょう。

##手順１：IQ Bot Advanced パッケージの入手とインポート
まずはBot StoreでIQ Bot Advanced Packageを手に入れます。
リンクはこちら↓です。
https://botstore.automationanywhere.com/bot/a2019-iq-bot-advanced-package/

Bot Storeはログインの仕組みが複雑だったりもするので、うまくダウンロードできない場合はベンダーに問い合わせるとパッケージのjarファイルをもらえるとかもらえないとか。

Bot Storeから直接手に入れた場合は以下の手順は不要（手順2へジャンプ！）ですが、jarファイルを手に入れた場合は以下の手順でインポートします。

Botタブ配下の「パッケージ」から、パッケージ追加のアイコンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/80650e22-ce26-fd11-6561-1b9223b97ec4.png)

入手したjarファイルを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/42db3e69-ef63-7031-44d9-e16352d713cf.png)

パッケージをアップロード。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/c8d49fee-76cb-4a44-49e2-27725166981e.png)

##手順２：Botの作成

パッケージをインポートできたら、Botアクションの一覧に以下のような、IQ Bot Advancedアクションが加わっているはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/d477c2f1-8c55-f10a-48e4-e302584dd117.png)

こちらを使って、以下の要領でBotを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/2e467446-bed8-00f5-c7a3-a05828d9b6cd.png)

##一応言葉でも説明

IQ Bot Advancedのパッケージを使うためには、必ず最初にStart Session（図の①）、最後にEnd Session（図の③）アクションを組み込む必要があります。

Excel操作などで、最初に必ず「開く」／最後に必ず「閉じる」を入れるのと同じ要領ですね。

「開く」と「閉じる」の間に必要なアクションを入れていくのですが、ここでは必要なアクションは一つだけです。
それが図の②で、「Validations for a Learning Instance」というアクション。

こちらが、特定のインスタンスを名前で指定し、そのインスタンスで検証に回っているファイルの数を返してくれるアクションです。
（上記の図では、インスタンス名は入力変数にしています）

この結果（検証に回ったドキュメントの数）を使って、実務では以下のような後続アクションが考えられます。

- 結果がゼロ以外（＝検証対象ドキュメントあり）なら、担当者に通知メールを出す
- シンプルに、呼び出し元のBotに結果を返す（ハンドリングは親Botでやる）


##注意点・細かいこと

名前の指定を間違えて、存在しないインスタンス名を指定した場合でも、アクションはエラーとならずゼロを返すだけなので注意してください。

インスタンス名は間違えないように、正確に！

インスタンス名は日本語でも普通に動きます。

一度プロダクションに入れたインスタンスを、検証対象ドキュメントありのままステージングに戻した状態でこのアクションを実行した場合でも、検証対象ドキュメントの数が返ってきます。


#このBot、作らないとダメですか？

検証に回ったドキュメントの数を知りたい、という要望はよく聞くので、一応こちらに手順を上げました。

ですが、例えば以下のようなケースでは、わざわざ検証に回ったドキュメントの数を把握して通知するBotを作る必要はないと思います。

1. 夜間バッチ処理で、検証に回る書類がゼロということは現実的にあり得ない
2. 24時間処理で、すべての帳票を検証に回すような業務フローにしている

1であれば、「朝イチで検証担当者が必ずIQ Botの検証画面を開いて検証する」という運用が成り立ちますし、2ならそもそも検証画面をずっと開きっぱなしで仕事する人がいるイメージかもしれません。

また、A2019.15あたりから、検証対象のドキュメントがあるかないかが、インスタンスの一覧画面から一目でわかるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/2f152262-2cca-a941-382b-3352360e26d1.png)

というわけで、このページではやりかたをご紹介していますが、業務の実情に合ったフローを構築することが最も重要です。
プロダクトオーナー研修を受けてきたのだ！



ぼくなのだ！

突然だけどぼくは先日PO研修を受けてきたのだ。

研修を受けてきてやったことを今日はここに書こうと思うのだ


## 受けた研修はこれなのだ
これなのだ！

https://scruminc.jp/training/owner/

この研修を受けてきたのだ！
ちょっとだけお金が高いような気がするけど、気にしないのだ！


## プロダクトオーナー(PO)とは

スクラムで学んだプロダクトオーナーは、いわゆる会社の立場としてのプロダクトオーナーとは別なのだ！
スクラム開発においての役割の話なのだ。

具体的には、プロダクトのビジネス面(費用対効果や市場価値など)などに責任がある立場のことをいうのだ！

みんなの会社のプロダクトオーナーはもしかしたら口先だけの偉そうな人たちかもしれないけど

そういうのではないのだ、偉いわけではないのだ

## 習ったことなのだ

研修は2日間あったのだ

都度都度グループワークがあったり、実践的に学ぶことができたので
ただの座学ではなかったのだ！

い〜っぱい学んだけど、中でも特に印象的だったことをかいつまんで記載するのだ


### スクラムの概要
今回はスクラムの研修ではないけれども、スクラムの概要は教えてもらえたのだ。
習った数ヶ月後にスクラムガイト２０２０が出て覚えなおしになったりもしたけど
勉強になったのだ。
PO研修なので、POの視点や考え方が中心に学ぶことができたのだ

POの役割
POとしての役割や、大切なことを教えてもらったのだ。

重要なことがたくさんあるので印象的だったのは
POはプロダクトに「責任」があるのだ
スクラムガイド2020でこの責任という言い方が強調されたのだ

プロダクトオーナーは「what」
スクラムマスターは「プロセス」
開発チームは「How」
をそれぞれ受け持つどそうなのだ

いいPOとは「半分は顧客・半分はチーム」のために動くのがいいと言われたのだ


つまり、顧客に寄りすぎてチームのことを考えないのもいけないし
チームに寄りすぎるあまり顧客からの価値が落ちてもいけない

その塩梅を保つのが難しい役割なのだ。


### POとしてのスクラム導入方法

研修では、実際に「訪日外国人と通訳者のマッチングアプリ」を作る想定で
実際にスクラムの導入をやってみたのだ。

実技形式で、実際にPO/SM/開発チームに別れて開発開始までやってみる。ということをしたのだ！

これは特にPOに必要なビジネス面に着目して

実際にペルソナを作成したり

ビジネス価値やなどの観点から昨日の見積もりやスケジュールを引くことを行ったのだ。


特に、立ち上げ段階でプロダクトの「why」を詰めることは大事と言われたのだ

こうすることでチームの方向がきまるのだ



### 研修を終えて
今回リモートで受けたけれどきっちりグループワークもあって
身になることが多かったのだ！

後日、認定PO試験を受けて見事合格したので
晴れて僕は一人前のPOと・・・は、まだなれないのだ

資格を手に入れただけなので、これからどんどん実践していって
一人前のPOを目指そうと思うのだ

またスクラムについては記事を書いていこうと思うのだ！

次はも〜っとよくなるのだ！


### 次回予告

「受託にスクラムを導入するのは間違っているのだろうか？(仮)」

公開時期は未定なのだ！！

アドベントカレンダーはもうちょっと続くのだ！


楽しんで欲しいのだ！

へけっ！
データベースのDate型に日付のみを保存するときの年数には9999ではなく8888を使おう

例えば、ユーザの誕生日をデータベースに追加するを想定します。

この場合MySQL等ではDate型を使用すると思いますが、誕生日を設定していないユーザの誕生日は、`9999-07-07`のように保存することになるでしょう。

すると、JavaScriptでは`new Date()`したときに、`null`の場合と区別がつけられます。

```js
const dateFormatter = (string) => {
    const date = new Date(string)

    // 引数がnullの場合
    if (date.getFullYear() === 1970) {
        return null
    } else if (date.getFullYear() === 9999) {
        return format(date, 'M月 d日')
    } else {
        return `${format(date, 'y年 M月 d日')}（${differenceInYears(new Date(), date)}歳）`
    }
}

dateFormatter('9999-7-7')
// 7月 7日
dateFormatter('2020-7-7')
// 2019年 7月 7日 (1歳)
``` 

しかし、このシステムでは、しばらくした後にエラーが発生します。

ユーザの誕生日が2月29日だったときです。

MySQLでは、`9999-2-29`という存在しない日付をDate型に挿入できません。

なので、`8888-2-29`のように、閏年をマジックナンバーにしましょう、という話でした。
Gatsby.jsで"EMFILE: too many open files"というエラーが出たときの対処法（Vercel）

## シチュエーション

Gatsby.jsで大量の画像ノードを作成したところ、あるとき突然以下のようなエラーが出ました。

![error_on_vercel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227791/8fdc1ac4-904c-54b9-6a80-e1ffdb6d22e1.png)

このエラーはローカルで開発しているMac上では再現せず、Vercelでデプロイした場合のみ発生しました。

## 解決方法
`gatsby-node.js`の一番上に、以下を追加し、再度デプロイします。

```js
const realFs = require('fs')
const gracefulFs = require('graceful-fs')
gracefulFs.gracefulify(realFs)
```

このエラーはデフォルトの`fs`を使用していると起こる一般的なエラーらしく、その対策として存在する`graceful-fs`を使用するように`gatsby-source-filesystem`に伝えている感じなのかな、と思います。

## 本当の解決方法
上記の解決方法は、一時的に問題を解決しましたが、再発しました。
なので、Netlifyに変更したところ、問題が解決しました。
Vercelの方がビルドもCDNもはやいので残念ですが、GatsbyとVercelは相性が悪いのかもしれません。

## 参考

この対処法は以下のissueに乗っていました。
https://github.com/gatsbyjs/gatsby/issues/12011
Ubuntu18.04でSSL証明書を作成


## 概要
OpenSSLを用いて以下の順序で証明証を作成していきます。
1. 秘密鍵(.key)
2. 証明書署名要求(.csr)
3. 認証された証明書(.crt)

## コマンド
以下を実行してください

```sh
sudo openssl genrsa -aes128 -out hoge.key 2048
sudo openssl rsa -in hoge.key -out hoge.key
sudo openssl req -new -days 3650 -key hoge.key -out hoge.csr
sudo openssl x509 -in hoge.csr -out hoge.crt -req -signkey hoge.key -days 3650
```

## コマンド詳細

```sh
$ sudo openssl genrsa -aes128 -out hoge.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
.....................................................................+++++
..........+++++
e is 65537 (0x010001)
Enter pass phrase for hoge.key: # 自身で決めたパスワード
Verifying - Enter pass phrase for hoge.key: # パスワード再入力(確認用)

$ sudo openssl rsa -in hoge.key -out hoge.key
Enter pass phrase for hoge.key:
writing RSA key

$ sudo openssl req -new -days 3650 -key hoge.key -out hoge.csr
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Yamanashi
Locality Name (eg, city) []:city
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

$ sudo openssl x509 -in hoge.csr -out hoge.crt -req -signkey hoge.key -days 3650
Signature ok
subject=C = JP, ST = Yamanashi, L = city, O = Internet Widgits Pty Ltd
Getting Private key

```
Deep Evidential Regression【6 Conclusions, limitations, and scope】【論文 DeepL 翻訳】

この記事は自分用のメモみたいなものです.
ほぼ [DeepL](https://www.deepl.com/home) 翻訳でお送りします.
間違いがあれば指摘していだだけると嬉しいです.

翻訳元
[Deep Evidential Regression](https://arxiv.org/abs/1910.02600)
Author: Alexander Amini, Wilko Schwarting, Ava Soleimany, Daniela Rus

前: [【5 Related work】](https://qiita.com/tomato_/items/ddc1c8f680f71e85a0f3)
次: [【Broader Impact】]()

# 6 Conclusions, limitations, and scope

## 訳文

本論文では, 尤度出力の上に証拠的な事前分布を置くことにより, 回帰問題における不確実性を学習するための新しい手法を開発する. 我々は, aleatoric uncertainty と epistemic uncertainty の推定を組み合わせた予測, 複雑なビジョンタスクへのスケーラビリティ, および OOD データ上の較正された不確かさを実証している. この手法は, 時間予測 [17], 特性予測 [8], 制御学習 [1, 30] などの回帰タスクに広く適用可能である. 我々の方法は既存のアプローチに比べていくつかの利点を示しているが, その主な制限は, 正則化係数の調整と, 不確かさを較正する際にミスリードしない証拠を効果的に除去することにある. 正則化のバランスをとるために二重最適化定式化 [47] が検討されるかもしれないが, ミスリードしない証拠を除去する代替方法を発見するためには, さらなる調査が必要であると考えている. 推定尤度パラメータに対する事前分布の選択の効果を決定するためには, 対数正規分布やヘビーテール-ログ-コーシー分布などの分散事前分布の他の選択肢を使用した将来の分析が重要になる. 我々のアプローチの効率性, 拡張性, および較正により, 安全性が重要な予測領域におけるロバストな NN の展開に必要とされる正確かつ高速な不確かさ推定が可能になる可能性がある.



## 原文

In this paper, we develop a novel method for learning uncertainty in regression problems by placing evidential priors over the likelihood output. We demonstrate combined prediction with aleatoric and epistemic uncertainty estimation, scalability to complex vision tasks, and calibrated uncertainty on OOD data. This method is widely applicable across regression tasks including temporal forecasting [17], property prediction [8], and control learning [1, 30]. While our method presents several advantages over existing approaches, its primary limitations are in tuning the regularization coefficient and in effectively removing non-misleading evidence when calibrating the uncertainty. While dual-optimization formulations [47] could be explored for balancing regularization, we believe further investigation is warranted to discover alternative ways to remove non-misleading evidence. Future analysis using other choices of the variance prior distribution, such as the log-normal or the heavy-tailed log-Cauchy distribution, will be critical to determine the effects of the choice of prior on the estimated likelihood parameters. The efficiency, scalablity, and calibration of our approach could enable the precise and fast uncertainty estimation required for robust NN deployment in safety-critical prediction domains.
gcloudコマンド実行時のWARNINGを非表示にする

# はじめに
最近になってGCPを触り始めたインフラエンジニアです。
gcloudコマンド実行時に、**WARNING**表示される時があるのですが、必要なさそうな時はを非表示にしたいと思い試してみました。

# どのようなときにでるか
たとえばVMインスタンス作成時に以下のような**WARNING**メッセージが表示されます。

```bash:gcloud
$ gcloud compute instances create test001 \
> --image=centos-7-v20201216 --boot-disk-size=30GB --image-project=centos-cloud \
> --machine-type=f1-micro \
> --shielded-secure-boot \
> --address="xxx.xxx.xxx.xxx" \
> --zone=us-west1-a
WARNING: You have selected a disk size of under [200GB]. This may result in poor I/O performance. For more information, see: https://developers.google.com/compute/docs/disks#performance.
Created [https://www.googleapis.com/compute/v1/projects/xxxxxxx-xxxxx-xxxxxx/zones/us-west1-a/instances/test001].
WARNING: Some requests generated warnings:
 - Disk size: '30 GB' is larger than image size: '20 GB'. You might need to resize the root repartition manually if the operating system does not support automatic resizing. See https://cloud.google.com/compute/docs/disks/add-persistent-disk#resize_pd for details.

NAME     ZONE        MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP      EXTERNAL_IP      STATUS
test001  us-west1-a  f1-micro                   10.xxx.xxx.xxx   xxx.xxx.xxx.xxx  RUNNING
```

今回の場合は内容的に**WARNING**メッセージなくても良さそう。

# WARNING非表示を調べる
たぶんコンフィグの設定あたりで、できるだろうと思いヘルプを見たり

```bach:gcloud
$ gcloud help config
```

公式ドキュメント見たり
[gcloud config set](https://cloud.google.com/sdk/gcloud/reference/config/set)

公式ドキュメントに以下のように記載があります。
> verbosity
>
> Default logging verbosity for gcloud commands. This is the equivalent of using the global --verbosity flag. Supported verbosity levels: debug, info, warning, error, critical, and none.

デフォルトはwarningのようなので、errorに変更します。

# WARNING非表示の方法
以下のコマンドで変更します。

```bash:gcloud
$ gcloud config set core/verbosity error
```

コンフィグに`verbosity = error`追加されていることを確認します。

```bash:gcloud
$ gcloud config list
[compute]
region = asia-northeast1
zone = asia-northeast1-a
[core]
account = *****
disable_usage_reporting = False
project = xxxxxxx-xxxxx-xxxxxx
verbosity = error

Your active configuration is: [default]
```

# 確認
再度VMインスタンス作成して、**WARNING**が表示されないことを確認してみます。

```bash:gcloud
gcloud compute instances create test002 \
> --image=centos-7-v20201216 --boot-disk-size=30GB --image-project=centos-cloud \
> --machine-type=f1-micro \
> --shielded-secure-boot \
> --address="xxx.xxx.xxx.xxx" \
> --zone=us-west1-a
Created [https://www.googleapis.com/compute/v1/projects/xxxxxxx-xxxxx-xxxxxx/zones/us-west1-a/instances/test002].
NAME     ZONE        MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP       EXTERNAL_IP      STATUS
test002  us-west1-a  f1-micro                   10.xxx.xxxx.xxx   xxx.xxx.xxx.xxx  RUNNING
```
OK!
Deep Evidential Regression【5 Related work】【論文 DeepL 翻訳】

この記事は自分用のメモみたいなものです.
ほぼ [DeepL](https://www.deepl.com/home) 翻訳でお送りします.
間違いがあれば指摘していだだけると嬉しいです.

翻訳元
[Deep Evidential Regression](https://arxiv.org/abs/1910.02600)
Author: Alexander Amini, Wilko Schwarting, Ava Soleimany, Daniela Rus

前: [【4 Experiments】](https://qiita.com/tomato_/items/f90c2ad67fbc85d227bb)
次: [【6 Conclusions, limitations, and scope】](https://qiita.com/tomato_/items/570a8526bccf078bd41f)

# 5 Related work

## 訳文

我々の研究は, 不確かさ推定の多くの歴史 [25, 38, 37, 19] と NN を用いた確率分布のモデリング [36, 4, 14, 26] に基づいている.

**Prior networks and evidential models.** ベイズ推定では, 不確実性を推定するために階層モデルに事前分布を配置することに大きな注目が集まっている [12, 13]. 我々の方法論は, 離散的な分類予測にディリクレの事前分布を配置する証拠的深層学習 [42] や事前ネットワーク [32, 33] と密接に関連している. しかし, これらの研究は, 固定された, よく定義された事前分布への発散を正則化することに依存しており [42, 46], OOD 訓練データが必要である [32, 31, 7, 19], または密度推定を実行することでしか aleatoric uncertainty を推定できない [11, 18] のいずれかである. 我々の研究では, この発散正則化器が十分に定義されていない連続回帰学習タスクに焦点を当てて, これらの制限に取り組む, OOD トレーニングデータを必要とせずに, aleatoric uncertainty と epistemic uncertainty の両方を推定することができる.

**Bayesian deep learning.** ベイズ型深層学習では, 変分推論 [26] を使用して推定されるネットワーク重みの上に事前分布が置かれる. ドロップアウト [9, 34, 10, 2], アンサンブル [28, 40], または他のアプローチ [5, 20] による近似は, 予測分散を推定するために高価なサンプルに依存している. 対照的に, 我々は決定論的 NN を訓練して予測分布上に不確実性の事前分布を配置し, 不確実性を推定するために 1 回のフォワードパスだけを必要とする. さらに, 我々の不確実性推定のアプローチは十分に較正されており, OOD と敵対的データを検出することができることが証明された.

## 原文

Our work builds on a large history of uncertainty estimation [25, 38, 37, 19] and modelling probability distributions using NNs [36, 4, 14, 26].

**Prior networks and evidential models.** A large focus within Bayesian inference is on placing prior distributions over hierarchical models to estimate uncertainty [12, 13]. Our methodology closely relates to evidential deep learning [42] and Prior Networks [32, 33] which place Dirichlet priors over discrete classification predictions. However, these works either rely on regularizing divergence to a fixed, well-defined prior [42, 46], require OOD training data [32, 31, 7, 19], or can only estimate aleatoric uncertainty by performing density estimation [11, 18]. Our work tackles these limitations with focus on continuous regression learning tasks where this divergence regularizer is not well-defined, without requiring any OOD training data to estimate both aleatoric and epistemic uncertainty.

**Bayesian deep learning.** In Bayesian deep learning, priors are placed over network weights that are estimated using variational inference [26]. Approximations via dropout [9, 34, 10, 2], ensembling [28, 40] or other approaches [5, 20] rely on expensive samples to estimate predictive variance. In contrast, we train a deterministic NN to place uncertainty priors over the predictive distribution, requiring only a single forward pass to estimate uncertainty. Additionally, our approach of uncertainty estimation proved to be well calibrated and was capable of detecting OOD and adversarial data.
オレのブログを安く運用したい。（aws から Oracle Cloud へ移行（その３））

#はじめに
この記事は「Oracle Cloud Infrastructure（その３） Advent Calendar 2020」の12月23日の記事として投稿です。

さて、今日は3日目。今日から読む人たちのために、改めて、記載すると「今あるaws上のブログで使っているインスタンス2つをOCIへ移行させよう！そして、その先に待っているランニングコスト軽減を得るために！！」が目的になります:sparkles:。

昨日は Oracle Cloud のアカウント（<a href ="https://qiita.com/orahisa/items/ba3bc18d655a84f49c3b" target="_blank">参考：オレのブログを安く運用したい。（aws から Oracle Cloud へ移行（その２））</a>）を作りましたので、今日は AWS から OCI への移行手段を考えてみようと思います。

#移行元(aws)と移行先(OCI)の整理
早速、移行方法を考えてみようと思います。今回、移行するために必要なことでザックリ思いつくところは、こんなところ:thinking:。
<dl>
  <dt>■移行元と移行先の接続</dt>
  <dd>データ移行するための経路</dd>
  <dt>■移行元の何を移行させるのか。移行先のどこへ持って行くのか。</dt>
  <dd>AWSで用意されているサービスでOCIに存在しないものの取り扱い</dd>
</dl>
今回は、最低でもAWSからOCIへ移行させるための通信経路（データ転送のため）とAWS独自サービスで稼働しているものの行き先を考える必要がありそうです。（放置されている私のブログではあるため、今回はサクッといけるかな？というくらいの検討です:sweat_drops:）
※実際のシステム移行を考えるのであれば、システムによって程度は異なるとは思いますが、移行元のシステムについての現状分析、それを踏まえての移行先のプラットフォーム選定について検討することをおすすめします:thumbsup:。

##移行元と移行先の接続
移行元と移行先でデータのやりとり（移行）するために、直接、AWSとOCIの接続。または、一旦、自PCを返して送り込む方法の２つの方法が考えられます。
![ 2020-12-17 10.16.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108642/1d76493f-f082-f98c-e3a9-98677c28488c.png)
今回はデータ量も少ないので、一旦、自PCへデータを吸い上げて送り込んでもいいかな？と思います。ただ用意したばかりのOCIには、お試し33,000円分のクレジットがもらえるので、コレを使っても良さそうですね。この２つの手段は、いずれの方法を採用してもOCI側の課金には響かなそうです:sparkles:。

##移行元の何を移行させるのか。移行先のどこへ持って行くのか。
移行元で使っているサービスは、１日目で記載したとおり。

>t2.micro x1　：ブログと各種バッチ実行
>Lightsail x1　：ブログ
>S3　：ブログ用の画像管理

もう少し細かく整理するとこんな感じ

- t2.micro
    - WordPressを構築
        - WebServer : Apatch
        - DB : MySQL
- Lightsail
    - WordPress
- S3
    - バケット２つ

これらをOCIのどのサービスに入れるか。というのを検討します。
今回の目的は**如何にランニングコストを抑えられるか**。という点なので、まずは無償範囲で対応できるものを選択したいと思います。

こちらで考えると答えは単純で、AWS上で稼働している（t2.micro と Lightsail(*)） は、OCI（VM.Standard.E2.1.Micro）へ。
※OCI には Lightsail のようなものはないので、Compute 上に用意することにします。
DB は MySQL を使っているので、OCI だとフルマネージド・サービスの Oracle MySQL Database Service がありますが、今回は「<font color=red>オレのブログを安く運用したい</font>」が目的なので見合わせます。（フルマネージドサービスの MySQL は興味ありますけど:sweat_smile:）ということで、今回は Compute にそのまま MySQL を立てます。
あとは S3 ですが、こちらは OCI だと Object Storage が同サービスで提供しているので、一択。

###まとめると移行元から移行先は、こちらを予定
・t2.micro → VM.Standard.E2.1.Micro（<font color=red>無料枠</font>）
・Lightsail → VM.Standard.E2.1.Micro（<font color=red>無料枠</font>）
・S3 → Object Storage（10GB以下（<font color=red>無料枠</font>）） 

素敵すぎる。すべて無料枠に乗せ換えられそう？「無料枠」が輝いて見えます:sparkles:

#今回のAWSからOCIへ移行するまでの予定ステップ
1. OCI上でAWS同様の構成を用意する
2. AWS と OCI を接続する（データ移行の経路を確保する）
3. AWS上で稼働しているインスタンスのデータ抽出
4. AWS から OCI へデータを転送する
5. OCI環境で再構築（データ移行）する

とりあえず、こんな感じで進めようかと思います。

#おわりに（その３）
今日のお話は、ここまで。明日は、早速手順に従って作業してみようと思います。:writing_hand:
V-forで特定の要素だけclassをつける

##やりたいこと
DBからひっぱってきたデータをvueのコンポーネントの中のdataにセットし、それをv-forで表示させているとします。
DBからひっぱってきたデータのいずれかに真偽値を設定するなどしておけばv-forの中で動きの変化はつけることができますが、
「そのコンポーネントの中だけのdataを追加し、v-forの中の特定のコンテンツだけclassをつける」などの変化をつけたい場合にやる方法。

##記述内容
```javascript

//描写部分

<template>
 <div>
  <div v-for="task in tasks" :key="task.id">
  　<div class="task__title">{{task.title}}</div>
　　//例えばこのtask.bodyだけ、条件に応じてis-activeclassをつけたい場合
  　<div class="task__body" v-bind:class="{'is-active':active === task}" >{{task.body}}
　</div>
　<button v-on:click="addActive(task)">bodyにclassをつける</button>

 </div>
</template>


<script>
export default {
　data(){
         return{
                tasks:[ ],//この中にdbからひっぱってきたデータが入っている
                active:null   
            }
        },
　methods:{
          addActive(task){
           if(this.active === task){
             this.active = null;
           }else{
            this.active = task;
           }
          }
        }
}
</script>

```

こんな感じで、v-forの中の値（task）を引数として渡すことで、そのactiveをtaskにすることができる。
これにより特定のtaskだけにclassを適用できる。
#VisualStudioエラー：MSB8036の対処法

#VisualStudioエラー：MSB8036の対処法

##私の環境でこのエラーが発生したと考えられる原因

私はVisualStudio2017とVisualStudio2019の両方をインストールしていたのですが、
ふと、いらないなと思いVisualStudio2019をアンインストールしたらこのエラーが発現しました。

-------------------------

##エラーメッセージ（一部省略）
>
**エラー　MSB8036**

>
**Windows SDK バージョン 10.0.18362.0 が見つかりませんでした。
必要なバージョンの Windows SDK をインストールするか、
プロジェクト プロパティ ページで SDK バージョンを変更するか、
ソリューションを右クリックして [ソリューションの再ターゲット] を選択してください**
>

-------------------------

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423473/50a2e68a-4240-0a1a-79ea-8c1ca376965e.png)

-------------------------

##VisualStudioのバージョンを変更する

**まず、現在のVisualStudioのバージョンを確認する必要があります。**

**確認方法は直接slnファイル(ソリューションファイル)をエディタで開きます。
※私はそれ以外の方法を知らないので、知っている方がいればコメントを残していただけると幸いです。**

**この、エディタで現在のVisualStudioのバージョンを確認するために、
新規プロジェクトを何でもいいので作成します。
※新規プロジェクトが動かないことが絶対にないので、
　動くということは正しいバージョンは適用されているということです。**

**新規プロジェクトを作成したら、そのプロジェクトのslnファイルをエディタで開きます。**

**次のページに細かい操作を載せています。**

-------------------------
###現在のVisualStudioのバージョンの確認フロー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423473/dda44907-b4b9-5fe0-f508-2279c58036bf.png)

-------------------------

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423473/22920fce-4339-72a5-cac5-99aa13d12766.png)

-------------------------

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423473/e70a619c-1925-5ebe-04cd-02d9f8f9f5c1.png)

-------------------------

##WindowsSDKのバージョンを変更する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423473/4720e348-0bc3-4795-4100-e95afe2b9946.png)

-------------------------

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423473/cc4c59d6-8e2a-2f86-584e-96cb44a522bf.png)

-------------------------

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423473/51894fee-f60b-3e89-cdec-c5f803913638.png)

-------------------------

##ソリューションのリビルドをする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423473/118262c0-40ff-0397-9e2d-aad45df6147d.png)
Notionでマルチアカウントを使う

アルプ株式会社でエンジニアをしています、集約のエンティティ@pictinyです。
これは[Notion Advent Calendar 2020](https://qiita.com/advent-calendar/2020/notion) 22日目のエントリです。
21日目は[Notionでアカウントを削除する](https://qiita.com/pictiny/items/f9ac40618c3e0de9b27e)でした。

# マルチアカウント
会社用と個人用など、Notionのアカウントを複数使うことがあるかと思います。
以前は1つのブラウザ、クライアントにつき1アカウントしかログインすることができませんでしたが、現在は複数のアカウントでログインすることができます。

## 別アカウントでログインする
左上のワークスペースのメニューから `Add another account from email` を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427952/0cac11ab-4e38-daab-958a-560f270128ad.png)

ログインのモーダルが表示されるので、追加したいアカウントでログインすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427952/dfff5736-24d9-f532-d9aa-d2e305f9bc55.png)

# まとめ
会社でNotionを使っている方も、プライベートでNotionを使ってみてはいかがでしょうか！
【Unity】ExecuteInEditModeは将来廃止、ExecuteAlwaysへ置き換えていく必要あり

とあるソースコードを読んでいて、見慣れないアトリビュートを見かけました。

```cs
[ExecuteAlways]
```

調べてみると、ExecuteInEditModeの代わりとなるアトリビュートでした。

`ExecuteInEditMode`がPrefabModeが実装されるUnity2018.2以前のものだったため、PrefabModeを考慮する上で新しいアトリビュートが必要になったとのこと。

>This attribute is being phased out since it does not take Prefab Mode into account. If a Prefab with a MonoBehaviour with this attribute on is edited in Prefab Mode, and Play Mode is entered, the Editor will exit Prefab Mode to prevent accidental modifications to the Prefab caused by logic intended for Play Mode only.

[Unity - Scripting API: ExecuteInEditMode](https://docs.unity3d.com/ScriptReference/ExecuteInEditMode.html)より

公式マニュアルの通り`ExecuteInEditMode`は廃止されていきます。
早めの置き換えを。


## 最後に

2020年も残りわずか。
今年もアドベントカレンダー書きました。

[【Unity】新規ゲームのUI開発で気をつけた39のTips前編 - Qiita](https://qiita.com/ohbashunsuke/items/0570234362e2e45c0011)
[【Unity】新規ゲームのUI開発で気をつけた39のTips後編 - Qiita](https://qiita.com/ohbashunsuke/items/4c8689410138e07a3461)

では、良いお年を。

## 参考

- [Unity - Scripting API: ExecuteInEditMode](https://docs.unity3d.com/ScriptReference/ExecuteInEditMode.html)
- [【Unity】【エディタ拡張】Unity2018.3以降ExecuteInEditModeアトリビュートは廃止に向かっていく - LIGHT11](https://light11.hatenadiary.com/entry/2019/05/05/233448)
Node-REDなコンテナをワンタッチビルドするためのレポジトリの構造

[Node-RED Advent Caldendar 2020](https://qiita.com/advent-calendar/2020/node-red) 12/18の記事です。

Node-REDのフロー管理、どうしていますか？
私はフローファイルをgit管理するように最近なりました。

[@high-uさん Node-RED Advent Caldendar 2018記事: Node-RED で git 使ってる？](https://qiita.com/high-u/items/dcbcccb57b9d0c696c82)

そしてこれを毎回同じ品質で検証環境を立ち上げたいという主旨で、
もうやってるよ！という方もいらっしゃると思いますが軽くまとめて行こうと思います。

# Gitレポジトリの準備

レポジトリは2つにしました。
1つのレポジトリにFlowを置いても良いのですが、今回はNode-REDで動くロボット学習キットのTJBotのVirtual版、[VirtualTJBotプロジェクト](https://github.com/tjbotfan/virtual-tjbot-starter)の派生版で、ローカルで動く[VirtualTJBot-starter-container](https://github.com/tjbotfan/virtual-tjbot-starter-container)をサンプルに紹介します。

|repository|説明|
|:--|:--|
|https://github.com/tjbotfan/virtual-tjbot-handson/|Node-REDプロジェクトのレポジトリ|
|https://github.com/tjbotfan/virtual-tjbot-starter-container|DockerFileを置いたレポジトリ|

# DockerFileを置いたレポジトリの準備

[https://github.com/tjbotfan/virtual-tjbot-starter-container](https://github.com/tjbotfan/virtual-tjbot-starter-container)では、DockerFileの他にgit submoduleでNode-REDプロジェクのトレポジトリをリンクしています。

submoduleとすることでgit cloneしたときには手元に一緒に中身がダウンロードされるけれど、
git checkout時にはsubmodule内に影響されないという点が便利です。（Node-REDのフローはあくまでも別プロジェクトであり管理は別）

Submoduleと一緒に手元にレポジトリを持ってくるときは

```bash
$ git clone --recursive  https://github.com/tjbotfan/virtual-tjbot-starter-container
```

とします。

取得したあとのレポジトリは以下のようになります。

```
$ cd virtual-tjbot-starter-container/
$ ls -lR
.:
合計 8
-rw-rw-r-- 1 phadmin phadmin 1069 12月 23 02:17 Dockerfile
-rw-rw-r-- 1 phadmin phadmin  196 12月 23 02:17 README.md
drwxrwxr-x 2 phadmin phadmin  112 12月 23 02:18 node-red-settings

./node-red-settings:
合計 44
-rw-rw-r-- 1 phadmin phadmin   228 12月 23 02:18 README.md
-rw-rw-r-- 1 phadmin phadmin 29165 12月 23 02:18 flow.json
-rw-rw-r-- 1 phadmin phadmin     1 12月 23 02:18 flow_cred.json
-rw-rw-r-- 1 phadmin phadmin  1087 12月 23 02:18 package.json
```

あとはDockerfile上でCOPYを使ってflow.jsonをコピーするようDockerfile内に記述をしておくことで、
docker buildするたびにコンテナはNode-REDレポジトリからFlowを持ってきてくれます。

# さいごに
Node-REDというよりもコンテナよりな記事でしたが、
Node-REDフローをプロジェクト化することで、バージョン管理がしやすくコンテナ化するときも便利に使えるということが、
まとまった記事って見かけないなと言うことで書いてみました。

欲を言うと、コンテナで起動したNode-REDからもNode-REDプロジェクトとして参照している状態に出来たらなどとも考えていますが、
これらはおいおいチャレンジして見たいと想います。
WSL2のUbuntuでZsh + Preztoを導入するとTabキー補完に10秒かかった


この記事は「[株式会社オープンストリーム "小ネタ" Advent Calendar 2020](https://qiita.com/advent-calendar/2020/opst-mini)」の22日目の記事です。

## はじめに

WSL に zsh と Prezto を導入してターミナル環境を良くしようと思いましたが、とある条件で **Tab キーの補完に 10 秒ぐらいかかるようになりました。**

`vi ./some-file` などカレントディレクトリ以下にあるファイルを引数として渡すときは問題ないのですが、 `./sample.sh` など実行権限の付いたスクリプトを起動するときに補完を使うと発生します。

**高速なCPUとSSDを使っているのにこれはいけません🙅**

`.zshrc` から Prezto を外してみると問題が起きなくなるため、Prezto が原因になっています。
"Prezto tab slow"で探してみると Prezto のプロジェクトにも Issue が立つほどです。

Slow tab completion on WSL2 · Issue #1820 · sorin-ionescu/prezto · GitHub
https://github.com/sorin-ionescu/prezto/issues/1820


## 環境

 * Windows 10 Home 20H2
 * Windows 10 Pro 1909

WSL2で検証しました。


## Windows の PATH との統合を無効にする

「そういえばWSL側の PATH はどれくらいあるのかな…」と調べたところ「ぎゃー😱」となるような多さで表示されました。
Windows 側と使いやすくするために WSL の `PATH` が Windows のものと統合されています。

PATH から検索する負担を抑えるため `/etc/wsl.conf` に設定を追加して Windows の PATH を統合しないようにします。 **Windowsのホームディレクトリにある `.wslconfig` ではありません。**

```zsh
sudo /etc/wsl.conf
```

設定ファイルには `[interop]` の記述も必要です。

```conf:/etc/wsl.conf
[interop]
appendWindowsPath = false
```

次にコマンドプロンプトや PowerShell といった WSL ではない端末から WSL の終了コマンドを実行して WSL を再起動させます。
経験上"Ubuntu"などとディストリビューション単位で終了させると Docker や VSCode の統合がおかしくなったことがあるので、すべてのディストリビューションに対して終了させます。

```
wsl --shutdown
```

(根本的な解決ではありませんが)WSL を再び立ち上げると Prezto を有効にしても Tab キーの補完で時間がかからなくなりました！


## VSCode, Docker Desktop for Windows との統合を維持する

PATH の統合を無効にすると WSL から `code` コマンドで VSCode が開けなくなったり `docker-compose` でコンテナが立ち上がらなったり不便になります。
WSL から `which` コマンドを使うとわかりますが、Windows の PATH を使って Windows 側の実行ファイルを使っています。

PATH の統合を無効にしつつ、この便利さを残すには `.zshrc` などに PATH, エイリアスを設定しておきます。
やみくもに PATH を追加すると元通りに問題が起きるため、使うコマンドが一つの場合はエイリアスを使います。

エイリアスの時だけ"Program Files"を含むパスを `''` で囲みます。
PowerShellを含むパスを `PATH` に追加しないとStorybookが自動でブラウザを開く処理でコケます(2020/12/30)

```zsh:.zshrc
# Windows Intergration
function open() { /mnt/c/Windows/system32/cmd.exe /c start $(wslpath -w $1) }
alias explorer="/mnt/c/Windows/explorer.exe"
alias code="'/mnt/c/Program Files/Microsoft VS Code/bin/code'"
export PATH="/mnt/c/Program Files/Docker/Docker/resources/bin:$PATH"
export PATH="/mnt/c/ProgramData/DockerDesktop/version-bin:$PATH"
export PATH="/mnt/c/Windows/System32/WindowsPowerShell/v1.0:$PATH" # for Storybook
```

これで WSL 側から Windows の VSCode を呼び出したり、Docker を操作することができました😁

ついでに macOS ユーザーで好評(？)な `open` コマンドを使えるようにしました。`open` に関しては次の記事を参考にしました。

WSL でも open コマンドを使えるようにする | R.Takakura Portfolio
https://www.iplab.cs.tsukuba.ac.jp/~takakura/blog/20200715

カスタムの `open` コマンドを実行するたびに(Windows の cmd.exe の仕様で)次のエラーメッセージが表示されます。
単純に `cmd.exe` にすると WSL のファイルが開かなくなる一方で、 `wslpath` を入れるこの方法だとエラーメッセージが出ながら開くのは謎です。

> '\\wsl\$\Ubuntu\home\yoshida-m'
> 上記の現在のディレクトリで CMD.EXE を開始しました。
> UNC パスはサポートされません。Windows ディレクトリを既定で使用します。
Obniz WS2812B をNoodlで動かしてみる

Obnizアドベントカレンダー遅れてすみません、、

LEDテープを光らせたい！
ObnizとNoodlを連携して、LED制御したい！という記事です。

#パーツライブラリ
LED（WS2812B）を使います。
https://obniz.com/ja/sdk/parts/WS2812B/README.md

購入したLED
https://www.amazon.co.jp/gp/product/B01MYT6JH9/ref=ppx_yo_dt_b_asin_title_o09_s01?ie=UTF8&psc=1

#構築したNoodlのフロー
![noodl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526082/f7396bc1-9d53-8bda-af7e-a31f6aa61cfc.png)

#JavaScriptノードに記述したコード
```javascript:JavaScript
script({
	inputs:{
	    obnizID:'string',
	    h:'number',
	    s:'number',
	    v:'number'
	},
	
	signals:{
		mySignal:function(inputs) {
		    var obniz = new Obniz(inputs.obnizID);
		    var h = inputs.h;
		    var s = inputs.s;
		    var v = inputs.v;
		    obniz.onconnect = async function(){
		        var led = obniz.wired("WS2812B", {din:2});
    		    led.hsvs([
    		            [h,s,v],[h,s,v],[h,s,v],[h,s,v],[h,s,v]
    		    ])
		    }
		}
	}
})
```

#ひとまず光った！
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">光ったー <a href="https://t.co/1ns3RFVx2U">pic.twitter.com/1ns3RFVx2U</a></p>&mdash; ぺんたけ (@pentake_de) <a href="https://twitter.com/pentake_de/status/1341426197083799553?ref_src=twsrc%5Etfw">December 22, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#おわりに
ちょっと理想通りに実装できていないので、引き続き試してみて、上手くいったら記事を更新しようと思います。
Mac版Chromeの検索窓でキーワード入力中に変換確定のEnterを押した時点で検索されてしまう問題

# はじめに
MacのGoogle Chromeで新しいタブを作成し、画面中央の検索窓に複数のキーワードを入力しようとするが、ローマ字の変換を確定しようEnterキーを押した時点で検索が開始されてしまって、とっても不便なのです。

2020年の8月頃からGoogleのコミュニティ上に症状は報告されている。

* [Mac chrome　変換を確定するためにENTERキーを押すと、その時点で検索が実行されてしまう](https://support.google.com/websearch/thread/63005619?hl=ja)
* [日本語入力がおかしい](https://support.google.com/chrome/thread/45198998?hl=ja&msgid=45198998)
* [新しいタブの画面中央の検索窓にキーワードを入力中、変換確定のEnterを押すと自動的に検索されてしまう](https://support.google.com/chrome/thread/67105054?hl=ja)

【2021/04/16追記】
**バージョンが90に更新されて、やっと直りました。**
よって、拡張機能の「New Tab Redirect」を削除しました。

【2021/03/04追記】
>新規タブページは「New Tab Page」、よく「NTP」と呼ばれ、そこに表示されているGoogleロゴ付きの検索窓（アドレスバーのほうではない検索窓）のことを「Realbox」と呼ばれます。
[【Chrome】漢字変換を確定するEnterで検索が開始されてしまう不具合について（macOSにて発生）](https://did2memo.net/2021/01/19/chrome-real-search-box-enter-key-mac/)

Chromium開発者が利用する不具合登録ページ
[1167356 - Realbox should ignore enter key when composing with an IME](https://bugs.chromium.org/p/chromium/issues/detail?id=1167356)
2021/1/22に「Fixed」の状態になっており、「M90」というラベルが付いていることから、バージョンが90で修正されると思われます。


# 使用環境
* Mac OS Big Sur バージョン 11.1
* バージョン: 87.0.4280.88

使用環境は現時点ですが、OSとChromeがバージョンアップする以前から発生している。

# 行なった対処
Chrome の設定をデフォルトに戻したり、再インストールしても解消しなかった。

# 解決方法
>ゴーゴー ゴム銃
>私も同じ症状で使いづらさを感じていて解決法を探していました。
>新しいタブのページはなぜか変換で検索してしまうのであきらめて、
>chromeの拡張機能で「あたらしいタブで任意のページを開く」というのを発見しましたのでそちらを使い　[https://www.google.com/webhp?hl=ja](https://www.google.com/webhp?hl=ja)　こちらのページを開くようにして、とりあえず解決しました。
>
>New Tab Redirect　
>[https://pc-karuma.net/google-chrome-new-tab-redirect/](https://pc-karuma.net/google-chrome-new-tab-redirect/)
>[新しいタブの画面中央の検索窓にキーワードを入力中、変換確定のEnterを押すと自動的に検索されてしまう](https://support.google.com/chrome/thread/67105054?hl=ja)

2020年の8月頃からGoogleのコミュニティ上に症状が報告されているが、いまだ改善されない。そのうちアップデートで解消されると思われるが、それまでの対応方法として、ゴーゴー ゴム銃さんの解決方法で対応する。

拡張機能の「New Tab Redirect」を登録します。
https://chrome.google.com/webstore/detail/new-tab-redirect/icpgjfneehieebagbmdbhnlpiopdcmna?hl=ja-jp

1. 「その他のツール」→「拡張機能」をクリックします。
2. 「New Tab Redirect」の「詳細」をクリックします。
3. 「拡張機能のオプション」をクリックします。
4. Redirect URLに「[https://www.google.com/webhp?hl=ja](https://www.google.com/webhp?hl=ja)」を入力し「Save」ボタンをクリックします。
5. 新しいタブを表示します。
6. ブックマークバーが非表示になってしまった場合、[ブックマークバーを表示](https://www.howtonote.jp/google-chrome/bookmark/index1.html#section3)するようにしてください。

4番のRedirect URLまでの図入りの説明は下記サイトを参考にしてください。
[Google Chrome - 新しいタブに特定のページを表示 - 拡張機能「New Tab Redirect」](https://pc-karuma.net/google-chrome-new-tab-redirect/)

![Chrome不具合.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/4edef15b-e28e-2b57-73a5-95cb50c663ac.png)

# 最後に
解決方法で不便なのは解消されたのですが、不具合なのでとっとと直して欲しい。