OmniAICreator/Qiita-1.07M huggingface dataset:
Node.js をインストールする（Windows）

# 環境
- Windows 10 Pro
- 64ビット

# ダウンロード
node.js のサイトから使用環境に該当するインストーラーをダウンロードする。
https://nodejs.org/ja/download/

- ここでは LTS（Long Term Support）推奨版の Windows Installer を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212722/b7c522ec-afd5-3a43-0457-9d96e275bb23.png)

# インストール
- ダウンロードした「node-v12.18.2-x64.msi」を実行。セットアップウィザードが表示されるので次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212722/24dd29de-c25a-c42f-1844-2936a60eeb94.png)

- ライセンスの同意にチェックをして次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212722/6f4f90f6-07a6-121c-c1f2-c67236ed3f88.png)

- インストール先に変更が無ければ、そのまま次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212722/d36d8c23-ad99-2f7f-2f60-36efcc82e319.png)

- インストールする対象を選択して次へ（ここではそのまま次に進む）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212722/48ef3dc2-a163-098e-81f2-cfe998dbb946.png)

| 項目  | 概要 |
|:-------------|:----------|
| Node.js runtime  | Node.js の本体 |
| Event tracing (ETW) | Node.jsで生成されたイベントをETW（Event Tracing for Windows）でトレースできるようにする？ |
| npm package manager | パッケージの管理 |
| Online documentation shotcuts  | オンラインドキュメント・ウェブサイトへのショートカット | 
| Add to PATH  | Node.js と npm を環境変数に追加 |
| Node.js and npm  | システム環境変数への追加 |
| npm modules | npm をユーザー環境変数へ追加 |


- オプションで、ネイティブモジュールのコンパイルに必要なツールをインストールします。
　ここではインストールせず次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212722/71cf2abf-d9e0-fbac-b6c3-67dc15e4046a.png)

- ここまでの設定で問題が無ければ、インストールを実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212722/c63d1789-d941-b7c5-692d-c5c2d3749b21.png)

- インストールの完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212722/d1fc428f-b0e1-4c63-116d-6a45d4d5570e.png)

# 確認
- Windows のスタートメニューに node.js が追加されているのを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212722/e41ca124-403c-a448-97f5-36da600eceac.png)

- コマンドプロンプトでnode, npm のバージョンを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212722/a3dba71d-0516-0535-ea45-f97aa9b702ec.png)
G検定（#2020-2）頻出人物名

2020.07.04にG検定を受験するとともに、ただの暗記でなく広く深く人物背景を知りたい思いwikiなどで調べました。そしてこの記事まとめてみました。
私自身が面白いと思ったことを書き連ねているので、間違っている点やG検定に関係ないこともあるかと思いますが、この記事を読んで試験のための暗記でなく、よりAIについて興味が沸いていただければ嬉しです。


# ジェフリー・ヒントン（Geoffrey Everest Hinton）
人工知能、認知心理学
Born : 1947（現：72）
所属：トロント大学、Google

***ニューラルネットワーク（NN）の第一人者***
**2012年　ILSVRC(画像判別コンペ)にて、当時SVMを用いた画像分析が主流で正答率２6％台の勝負だったが、ニューラルネットワークを用いた画像分類を行い１６％と当時の常識を遥かに超える結果をもたらした。**
当時のILSVRC優勝したモデルは**AlexNet**（*Alex Krizhevsky* & Ilya Sutskever & Geoffrey E. Hintonが作成した。その内の1人であるAlexの名前をとっている）

#ジョン・マッカーシ（John McCarthy）
人工知能、計算学者、認知学者
Born : 1927-2011（現：72）
所属：ダートマス大学、マサチューセッツ工科大学、スタンフォード大学

**人工知能という言葉を初めて提唱した人物**
マッカーシーは人工知能のために数理論理学を使って知識を表現することに尽力した。
1956年、人工知能 (AI) に関する世界初の国際会議を主催（**ダートマス会議**）
この会議は、ダートマス大学にて２ヶ月間10人の人工知能研究者が集まり、人間の知能をどう機械で表現出来るようにするかを議論する内容であった。

#アーサー・サミュエル（Arthur Lee Samuel）
コンピュータゲーム、人工知能
Born : 1901~1990（享年89歳）
所属：ベル研究所,IBM,スタンフォード大学教授

機械学習の父と呼ばれ、**1959年に機械学習を定義した人物**
「明示的にプログラムしなくても学習する能力をコンピューターに与える研究分野」
(つまりPCを、入力値を受け、それに対する予測や評価を出力できるようにする研究)

#ジョン・サール（John Rogers Searle）
言語哲学、心の哲学
Born : 1932（現：87）
所属：オックスフォード大学、カルフォルニア大学、大学問題大統領特別顧問

**人工知能批判で有名**
以下の言葉はジョン・サールが作った。
**強いAI**:まさにPCがドラえもんのような自我を持つこと
**弱いAI**:チャットボットやDeep blue(現時点では全てのAIはこちら)
(補足：それまで人間にしか出来ないと考えられていたことが（ex:将棋、運転、翻訳)が人工知能によって出来た瞬間に、その技術に意思はなく、単なる自動化だと考えることを**AI効果**と呼ぶ）


チューリングテストを発展させた**中国語の部屋**という有名な実験を行った。
（この実験は、中国語が分からない人を部屋に閉じ込め、穴を通して中国語が書いた紙切れを中に渡す。部屋内にあるマニュアルを読み、紙切れに書いた中国語に対応した文字を書き部屋の外に出すというものである。
これは、CPを模倣した実験であり、いかにCPが早く正確に文字を翻訳したりできようが、そこに人の意思はなく、**強いAIは制作不可能**であることを示した。）

ちなみに、2019年にセクハラで大学を追放されているらしい。


#ヤンルカン(Yann LeCun)
人工知能、ロボット工学
Born : 1960（現：60）
所属：ニューヨーク大学、Facebook


最初にCNN（畳み込みニューラルネットワーク）**LeNet**を発明した人物
1988年にはジェフリー・ヒントン研究室に所属していた。

また、GRUを絶賛した人物

#アラン・チューリング（Alan Mathison Turing)
数学者、哲学者、コンピュータサイエンス、人工知能
Born : 1912-1954（享年41）
所属：ケンブリッジ、

ある機会が人間的かを判別する**チューニングテスト**を提唱した。
現在のCPの基本的なアーキテクチャーの元になっている、チューニング・マシンを作成した。

また、彼の人生を描いた映画、「イミテーション・ゲーム」が制作されている。

#レイ・カーツワイル（Raymond Kurzweil）
発明家、企業家、人工知能、フューチャリスト、音楽
Born : 1949（現：71）
所属：Google

2005年に「The Singularity Is Near:When Humans Transcend Biology」で**技術的特異点（technological singularity）**は近いと宣言し、世間にその存在を認知させるきっかけを作った。

2029年までにはチューリングテスト合格すると予言。すなわち強いAIが誕生する。

2045年には
1000ドルのコンピューターは全人類の脳の計算性能を上回る時点として定義している

#スティーヴン・ホーキング（Stephen William Hawking）
物理学、天体、
Born : 1942-2018(享年76)
所属：オックスフォード大学、ケンブリッジ大学

シンギュラリティに対し**危機感を持って**おり
**完全な人工知能を開発できたら、それは人類の終焉を意味するかもしれない**と言った。

一般相対性理論と関わる分野で理論的研究を前進させ、1963年にブラックホールの特異点定理を発表し、世界的に有名になった。

全身の筋肉が徐々に動かなくなる筋委縮性側索硬化症（ALS）と闘い続けてきた「車いすの天才科学者」として知られおり、その人生は映画化された。

#イーロン・マスク（Elon Reeve Musk）
企業家、エンジニア
Born : 1971(現49)
所属：テスラモーターズ、スペースX

**人工知能が与える影響の大きさの危険性を危惧**、**Open AI**という非営利団体を設立
Open AIは人工知能の研究を行い、それをオープンソースとすることで社会全体で平等に人工知能技術を共有しようというと試みている。

テスラモーターズ（電気自動車）、スペースX（宇宙飛行）、ソーラーシティ（太陽光発電）など数多くの企業を生み出しており、
PayPal社の前身であるX.com社を1999年に設立した人物でもある。


映画「アイアンマン」のモデルにもなった。
【Rails】PCにもスマホにもアイコンを表示したい！ favicon設定まとめ

faviconを設定したい。PCのブラウザ上では、サイト名の横に表示されるあの画像ですね。faviconがあるかないかで、サイトの信頼感や覚えてもらいやすさが変わってきますので、ぜひ設定したいところ。
![スクリーンショット 2020-07-01 2.07.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410392/d92d86fc-9181-cddc-7259-167494524e9c.png)
特にスマホの設定（ホーム画面にリンクを貼ったときなどに表示される画像になる）で「本当にこれでいいのだろうか」と思いながらの実装した背景もあり、まとめて残しておこうと思いました。
なお、本記事では、Railsでhamlを使って書いた例をそのまま載せてあります。
# PC用のfavicon
まずはPCのfaviconの設定方法です。
## (1) ico形式の画像を用意
設定したい画像をico形式で用意しました。持っている画像が他の形式の場合は「ico 変換」などで検索するとオンライン上に簡単に変換できるサービスが見つかります。
## (2) assets/images 以下に置く
ここでは、画像は `assets/images` の直下に置きました。お好みでどうぞ。
## (3) application.html.haml のhead部分で呼び出す
`application.html.haml` のheadのなかに`favicon_link_tag`を使って次のように書きました。

```haml
%head
  = favicon_link_tag 'xxxx.ico'
```

以上でPC用のfaviconは無事に反映される、はずです。
`Rails s`で立ち上げ直すと、ローカルでも確認することができます。

# スマホ用のfavicon
次に、スマホのfaviconの設定方法です。
## (1) png形式の画像を用意する
iOS用とAndroid用で2つのpng形式の画像を用意しました。
### ＊ iOS用画像の注意点
- 背景が透過されているものを使用すると黒背景になるようです。そのため、背景色を含む画像を設定するのが無難でしょうか。
- ホームに追加された時のアイコンになりますが、下のように角が丸く削れます。その点も計算に入れると良い感じになりそうです。

![IMG_5425.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410392/f4b64c89-7375-aef8-4778-136c385ac0ec.jpeg)

### ＊ Android用画像の注意点
- 透過が反映される or されないなど、諸々機種によって異なるそうです。そうなのか。

［参考］[favicon大解剖 〜必要サイズから検証時の注意点まで〜](https://webnaut.jp/design/1178.html)

## (2) assets/images 以下に置く
こちらも、画像は `assets/images` の直下に置きました。お好みでどうぞ。

## (3) application.html.haml のhead部分で呼び出す
iOS用とAndroid用で次のように書きました。

```haml
%head
  = favicon_link_tag 'xxxx180x180.png', rel: 'apple-touch-icon', sizes: '180x180', type: 'image/png'
  = favicon_link_tag 'xxxx192x192.png', rel: 'android-touch-icon', sizes: '192x192', type: 'image/png'
```

以上でスマホでも画像が表示されるようになるはず、です。
なお、事前に検証する方法がわからなかったため、わたしの場合はデプロイしてはじめて表示されていることを確認したという…。無事に設定できてよかったです。

# 参考
- [favicon大解剖 〜必要サイズから検証時の注意点まで〜](https://webnaut.jp/design/1178.html)
- [favicon設定 Rails](https://qiita.com/ntkgcj/items/6643a07a43a36029dc9b)（Qiita）

以上の記事とGitHubに公開されているコードを参考に解決できました。ありがとうございました。
zshがあればfindコマンドは（ほぼ）要らなくなるかもしれない話

**zshは、あらゆる点でbashを凌駕する超強力シェルである。シェルをこれに差し替えるだけで日々の業務が格段に効率化できるので、乗り換えない手はない。MacOSでは標準装備になったらしいが、言うまでもなくlinux他のunix-like OSでも広く使用可能。**

かくいう筆者はもう四半世紀zshの愛用者だ。思い立って、zshでfindを（ほぼ）お払い箱にできる話を書くことにした。

# ディレクトリを降りていく

findといえば、もちろん指定したディレクトリを起点として、サブディレクトリを下へ下へと辿りながら、所定の条件にあるファイルを探し出し、それに対して何かをしようとするツールである。

findで、拡張子が`.txtなファイルを探すとすると、こんな感じになるだろう。

```
find . -name '*.txt'
```

ところが、zshならこう書けば同じことができる。

```
ls ./**/*.txt
```

このように`**`を重ねると、その階層の深さにかかわらずサブディレクトリ以下の全てのファイルも対象に含まれることになる。findコマンドの一番根幹的な機能のお株を奪っている。zshすごくね？

# 「ファイル修飾子」でファイルを絞り込む

ワイルドカードに加えてzshのパス指定には「ファイル修飾子」というものを追加することができ、これによって複雑な条件指定が可能となっている。

## 変更日時でファイルを絞り込む
たとえば、findなら`find . -mtime -1`とでもすべきところ、zshならこう書けばできる。

```
ls ./**/*(mh-24)
```

zshの`(mh-24)`は、「24時間以内に変更されたファイル」にマッチする。なお、findがサポートする時間の単位は「分」と「日」のみだが、zshのファイル修飾子は月・週・時間・分・秒に対応している。反面「日」には対応していないようだ……。

同様に、`-ctime -1`および`atime -1`は、zshではそれぞれ`(ch-24)`および`(ah-24)`である。

## ファイルタイプでファイルを絞り込む

findなら`find . -type d`とでもすべきところ、zshならこう書けばできる。

```
ls ./**/*(/)
```

同様に、対象を通常ファイル・シンボリックリンク・実行ファイルに絞ることもできる。対応する文字はそれぞれ`.`、`@`、`*`である。

## アクセス権でファイルを絞り込む

findなら`find . -perm 600`とでもすべきところ、zshならこう書けばできる。

```
ls ./**/*(f600)
```

## まだまだいろいろできる

この他、ファイルサイズやファイルオーナーでもファイルを絞りこめる。

これらのオプションは同時に指定することもできる。例えばsuzukiさんが持っている実行可能なシェルスクリプトだけを拾いたければ`*.sh(*u:suzuki:)`などとすればいい。OR条件にも対応可能で、例えば`*.sh(u:suzuki:,u:yamada:)`とすれば、suzukiさんかyamadaさんのどちらかが持っているシェルスクリプトを拾える。

そろそろしんどくなってきたので、あとは`man zshexpn`に任せよう。

# 選びだしたファイルに対して何かをする

上記のように柔軟な条件設定で探してきたファイルに対して、forループを利用していろいろな処理をかけることができる。

たとえば、findを使った次のようなオペレーションを考えてみよう。

```
find . -name '*.txt' -exec wc -l {} \;
```

zshならこんな感じで処理できる。括弧が多いが、bashのループよりもシンプルで分かりやすいと思う。

```
foreach a (./**/*.txt) { wc -l $a }
```

# おわりに

まだまだ終わりじゃないんだよ、zshの優れた点は。

しかし、この`**`記法が使えるだけでも、zshに乗り換える理由としては十分じゃないか？
Ubuntuインストール後にやること(Dockerを使用した開発環境構築)

# アップデート
```
sudo apt update
sudo apt-get update
sudo apt upgrade -y
sudo apt autoremove
```

# インストール済みアプリの確認
```
apt list | grep git
apt list | grep docker
```


# dockerインストール
```
sudo apt install docker.io -y
sudo usermod -aG docker $USER
sudo systemctl start docker
sudo systemctl enable docker
```

# docker-composeインストール

### curlインストール
```
sudo apt install curl
```

以下で最新バージョンを確認
https://github.com/docker/compose/releases

1.26.0を最新バージョンに変更して以下を実行する

```
sudo curl -L https://github.com/docker/compose/releases/download/1.26.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```

# Dockerグループへユーザー追加
dockerという名のグループを作ってユーザをそこに所属させればOKです。

```
sudo groupadd docker
getent group docker
sudo gpasswd -a $USER docker
sudo systemctl restart docker
```
再起動すると反映される。

# インストール確認
```
docker -v
docker-compose -v
```
jupyterlab で matplotlib のプロット図に picker を設定するメモ

# 背景

jupyterlab + matplotlib でプロット図や画像から, マウス位置のピクセル値などを取得したい

## 方法

pick event を使います.

https://matplotlib.org/3.1.1/gallery/event_handling/pick_event_demo.html

pip などで `ipympl` を入れておきます.

https://stackoverflow.com/questions/50149562/jupyterlab-interactive-plot

を参考に, Jupyterlab の interactive widget 機能(?)を有効にします.


```
jupyter labextension install @jupyter-widgets/jupyterlab-manager
jupyter labextension install jupyter-matplotlib

jupyter nbextension enable --py widgetsnbextension
```

```
%matplitlib widget
```

を notebook の最初に記述しておきます.

サンプルコード

https://matplotlib.org/3.1.1/gallery/event_handling/pick_event_demo.html

を動かして, うまくいけば成功です!
Django~settings.py編~ 

#はじめに
この記事はDjangoでのsettings.pyの設定を忘れないようにメモするために書きました。

#時間帯を合わせる
まずは時間帯を合わせましょう。
「settings.py」を開いて、ガーとしたの方までスクロールすると

```python

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'
```
この部分が見つかるので、少し変更していきます。

```python

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'
```
このように変更することで、日本時間に合わせることができます。

#アプリの登録
「settings.py」の一番上から少しスクロールし他ところに「INSTALLED_APPS」というところがあります。
ここにアプリケーションの構成情報を登録するために追加していきます。
ここではアプリ名を「app」としておきます。

```python

INSTALLED_APPS = [
    'app.apps.AppConfig',
]
```
カッコ内の一番最初か一番最後にこのように追加します。
最後のカンマを忘れないように気をつけてください。

#テンプレートの登録
「INSTALLED_APPS」からさらに少し下にいくと、「TEMPLATES」というものが見つかります。
HTMLファイルを入れておく「templates」をここに登録します。

```python

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
```
こんな感じになっているはずです。
ここの「DIRS」に登録していきます。

```python

'DIRS': [os.path.join(BASE_DIR, 'templates')],
```
このように入れることができれば完了です。

#staticディレクトリの登録
CSSやJavaScript、画像などを入れておく「static」ディレクトリの登録をしていきます。
デフォルトでは抱えrていないので、一番最後に追記していきます。

```python

STATICFILES_DIRS = (
    [os.path.join(BASE_DIR, 'static')]
)
```
#カスタムユーザーモデルの登録
後でログイン機能をつける時に役立ちます。
デフォルトでユーザーモデルが存在しますが、後から変更を加える際に大変なので、最初からカスタムユーザーモデルを利用していきます。

一番最後に次のように追記してください。
```python
AUTH_USER_MODEL = 'accounts.CustomUser
```
※`accounts`アプリケーションを後から作成します。

このように追記すれば完璧です。

#最後に
今回は「settings.py」に書くものをまとめました。
今後さらにあっっぷデートしていく予定です。
一つ前の記事
[PycharmでDjangoでアプリケーションを作成する手順~準備編~](https://qiita.com/heku_777/items/0951bb1da7b664affbfb)
共立エレショップのダイヤモンドバッファアンプ基板の部品を発注

さて、真面目に部品を集めるとして。
まずは共立電子産業への発注。

[ダイヤモンドバッファアンプ基板(P4-10098)](https://eleshop.jp/shop/g/gK5F411/)

フロントエンドに安売りのトランジスタを投入。
NPN型 NPN型 一般小信号増幅用トランジスタ SC-72(小型) 10本切
[2SC1740S-10P](https://eleshop.jp/shop/g/gG9H416/)　商品コード： G9H416　￥82
注文受付単位：1	数量:   1  	￥82

別に必要ないけど、コンプリメンタリなPNP型も一応仕入れてみる。
PNP型 PNP型 一般小信号増幅用トランジスタ 10本切
[2SA933S-10P](https://eleshop.jp/shop/g/gG9H414/)　商品コード： G9H414　￥82
注文受付単位：1	数量:   1  	￥82

ダイヤモンドバッファに使うトランジスタ
PNP型 トランジスタ[RoHS]
[2SA1020-Y](https://eleshop.jp/shop/g/gSA1020/)　商品コード： SA1020　￥66
注文受付単位：1	数量:   4  	￥264

NPN型 トランジスタ[RoHS]
[2SC2655-Y](https://eleshop.jp/shop/g/gSC265Y/)　商品コード： SC265Y　￥66
注文受付単位：1	数量:   4  	￥264

X8L特性 高性能・積層セラミックコンデンサ 50V 0.1μF [RoHS]
[RHEL81H104K0K1H03B](https://eleshop.jp/shop/g/gJ8R311/)　商品コード： J8R311　￥84
注文受付単位：1	数量:   2  	￥168

オーディオ用金属皮膜抵抗器 1/4W ±1％ 3.3kΩ[RoHS]
[REY25FY 3.3KΩ](https://eleshop.jp/shop/g/gGC7E1R/)　商品コード： GC7E1R　￥30
注文受付単位：1	数量:   2  	￥60

オーディオ用金属皮膜抵抗器 1/4W ±1％ 6.8kΩ[RoHS]
[REY25FY 6.8KΩ](https://eleshop.jp/shop/g/gGC7E2D/)　商品コード： GC7E2D　￥30
注文受付単位：1	数量:   2  	￥60

オーディオ用金属皮膜抵抗器 1/4W ±1％ 22kΩ[RoHS]
[REY25FY 22KΩ](https://eleshop.jp/shop/g/gGC7E2P/)　商品コード： GC7E2P　￥30
注文受付単位：1	数量:   2  	￥60

カーボン抵抗 1/4W 5% ★受注単位有★
[10kΩ](https://eleshop.jp/shop/g/g6AY31D/)　商品コード： 6AY31D　￥4
★数量割引対象商品
注文受付単位：20本	数量:   20　  	￥80

カーボン抵抗 1/4W 5% ★受注単位有★
[6.8kΩ](https://eleshop.jp/shop/g/g6AY319/)　商品コード： 6AY319　￥4
★数量割引対象商品
注文受付単位：20本	数量:   20　  	￥80

S付基板用2連可変抵抗 Aカーブ 10kΩ
[RK0972S-A10K L-20KC](https://eleshop.jp/shop/g/g86A314/)　商品コード： 86A314　￥210
★数量割引対象商品
注文受付単位：1	数量:   1  	￥210

ツマミ φ20.7mm(ローレット)黒
[WTN-15-1177/18T](https://eleshop.jp/shop/g/gD2541B/)　商品コード： D2541B　￥105

電源インピーダンス対策用の、無くてもいいコンデンサ。
ただし５φの品は探してもなかなか見つからないので大きいやつ。

導電性高分子アルミ固体電解コンデンサ(OS-CON)
 6.3V 220μF[RoHS]6SEPC220M
[6SEPC220M](https://eleshop.jp/shop/g/gF39313/)　商品コード： F39313　￥127
注文受付単位：1	数量:   1  	￥224

その他のコンデンサは共立で買わず、マルツで買うことにした。

10V 68uF 20%
[CAP ALUM 68UF 20% 10V RADIAL【10AX68MEFC5X7】](https://www.marutsu.co.jp/pc/i/25610551/)　￥45
注文受付単位：1	数量:   2  	￥90

6.3V 680uF 20%
[CAP ALUM 680UF 20% 6.3V RADIAL【6.3AX680MEFC8X9】](https://www.marutsu.co.jp/pc/i/25610564/)　￥74
注文受付単位：1	数量:   4  	￥298

電池ホルダ。こんな金属曲げた板みたいなのが１つ60円近くする。
だいたい部品名「56」って何？検索しても全然引っかからないぞ。
本来はデジキーでないと買えないのだが、デジキーの商品はマルツで買える。
[BATTERY CONTACT CLIP MULTI SMD【56】](https://www.marutsu.co.jp/pc/i/15376823/)　￥57.14
注文受付単位：1	数量:   8  	￥458

ケースもマルツで買う。小さいケースのせいか、値段も安い。
[MX型丸型モバイルケース(18×57×100/シルバー：本体フレーム/ライトグレー：パネル)【MX2-6-10SG】](https://www.marutsu.co.jp/pc/i/267832/)
￥560 
実はミント缶でもOKらしいけど、あえて挑戦してみよう。

指定されたステレオミニジャックは秋月電子ぐらいしか扱ってない。
他にも買いたいものがあるし、通販ならここかな。
基板取付用 ３．５ｍｍ小型ステレオミニジャック
[C-02460](http://akizukidenshi.com/catalog/g/gC-02460/) 基板取付用	1個 ￥50 数量:   2 個	￥100	

ねじ類はモノタロウが良さそう。
ローレットナット(ステンレス)(パック品) M3 内容量 1パック(2個)
[注文コード 42114676](https://www.monotaro.com/p/4211/4676/)
1個 ￥439 数量:   1 個	￥439

イモネジの指定長さは16mmなのでちょっと長すぎるのだが、どうかな。
六角穴付止めねじ(ホーローセット) くぼみ先(SCM435/黒色酸化皮膜)
 M3、長さ18mm 内容量 1パック(13個)
[注文コード 42826436](https://www.monotaro.com/p/4282/6436/)
1個 ￥439 数量:   1 個	￥439

だいぶ無駄が出るけど、とりあえずこれで部品は全部揃ったはず。
DockerでラクラクReact環境構築！

## はじめに
これは『React環境構築の際にイチイチ調べ直すのがめんどくさい:expressionless:』と、自分向けにメモった記事です。
オレオレ記事ですが、ラクラクなので、是非参考にして頂ければと思います。

## 1. GitHubリポジトリを用意
リポジトリを作成してクローンしてきましょう。

```GNOME
$ git clone git@github.com:ユーザ名/リポジトリ.git
```

## 2. .gitignoreを先に作成

gitignoreファイルは一つにまとめたいので、先に作成して、自動で作られるものは削除しています。
アプリのルートディレクトリに以下の`.gitignore`ファイルを作成。

```.gitignore:.gitignore
# dependencies
node_modules/
.pnp/
.pnp.js

# testing
coverage/

# production
build/

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
```

## 3. dockerfileの作成

アプリのルートディレクトリに以下の`dockerfile`ファイルを作成。

```dockerfile:dockerfile
FROM node:12.17.0

RUN mkdir build
WORKDIR /build
```

## 4. dockerfileのbuildとrun!

dockerのイメージ作成と`create-react-app`を行っていきます。

```GNOME
$ docker build -t node:build .
$ docker run --rm -it -v "$PWD":/build node:build npx create-react-app my-app(←アプリ名はご自由に。)
```

まず1行目ではdockerのイメージ作成とタグ付け、カレントディレクトリを指定しています。
2行目ではVolumeの設定でホスト側のディレクトリからコンテナ側にマウントを取ります。(これによって変更が有効になる)
次にイメージとタグを指定して、最後に`npx create-react-app`のコマンドを実行しています。

これで`my-app`下に色々生成されていたら成功です！

## 5. `docker-compose.yml`と`Makefile`を作成

またアプリのルートディレクトリ下で`docker-compose.yml`と`Makefile`を以下のように作成します

```yaml:docker-compose.yml
version: "3.3"
services:
  react:
    image: node:12.17.0
    working_dir: /code
    volumes:
      - ./my-app:/code
    ports:
      - 3000:3000
    environment: 
      - NODE_ENV=production
    container_name: container_name # ←コンテナ名はご自由に。
```

```makefile:Makefile
library := ""

start:
    docker-compose run --rm react yarn start

add:
    docker-compose run --rm react yarn add $(library)

```

## 6. ローカルでサーバを立ち上げる！

以下のように`make start`を実行してください

```GNOME
$ make start 
```

`make start`は`docker-compose run --rm react yarn start`を実行していて、記述をMakefileにて短縮しています。
ローカルでサーバーが立ち上がって、Reactマークがくるくる回っていたら成功です！！

## +α 新しくパッケージをインストールしたい時

本当は`docker-compose run --rm react yarn start`を実行しています。

```GNOME
# 使用例
$ make add library=redux
```

## さいごに
まだまだ初心者なので、『もっとこうやって作成したら良いよ！』などなどアドバイスをご教授頂けたら、超喜びますm(_ _)m

**※ご教授して頂けた方、とても良い感じになりました！ありがとうございます！**
Laravelのクエリビルダについて　全件/1カラム/複数カラム/1レコード取得、集計メソッド、存在確認、SELECT（基本）

LaravelのEloquentを使ってあれこれ行うに当たり、以下のような公式ドキュメントの助言を受け、
クエリビルダで使用できる全メソッドを確認することにしました。

>Eloquentモデルはクエリビルダですから、クエリビルダで使用できる全メソッドを確認しておくべきでしょう。Eloquentクエリでどんなメソッドも使用できます。

今回は前編とし、残りはまた今度追記するか別で書きます。


# クエリビルダとは
SQLに詳しくなくても、データベースにアクセスするためのクエリを生成してくれる機能。
クエリを記述するには、DBファサードの`table()`メソッドを使用する。
`table()`は引数に渡されたテーブルに対するクエリビルダインスタンスを返すので、それを使ってクエリに制約を加えることができる。
最終的な結果を取得するチェーンをつなげてクエリの結果を取得する。

# 全件取得
## get()で、全件取得
```php
// usersテーブルの全レコードを取得
$users = DB::table('users')->get();
```
※`get()`はstdClassオブジェクトのインスタンスを結果として含む、collectionを返す。

collectionはforeachで回すことができて、オブジェクトのプロパティとして、各カラムの値にアクセスすることができる。

```php
foreach ($users as $user) {
    echo $user->name;
}
```

# 1カラム/1レコード取得

## first()で、１レコードのみを取得
**戻り値：**　stdClassオブジェクト

```php
// usersテーブルから、nameカラムがJohnのレコードを1レコードのみ取得
$user = DB::table('users')->where('name', 'John')->first();
```

## value()で、１カラムのみを取得

```php
// usersテーブルから、nameカラムがJohnのレコードのうち、emailカラムの値を取得
$email = DB::table('users')->where('name', 'John')->value('email');
```
※name カラムが John のレコードが複数あったとしても、取得する値は1つ

## find()で、IDカラムの値を指定して1レコードのみを取得

```php
// usersテーブルから、idが3のレコードを取得
$user = DB::table('users')->find(3);
```

複数カラム取得
## pluck()で、指定したカラムの値をコレクションで取得

```php
// address_listsテーブルからnameカラムとaddressカラムの値をコレクションで取得
$namesAndAddresses = DB::table('address_lists')->pluck('name', 'address');

$addresses = [];
$names = [];

foreach ($namesAndAddresses as $name => $address) {
    // $namesに、$namesAndAddressesのnameが配列で格納される
    $names[] = $name;
    // $addressesに、$namesAndAddressesのaddressが配列で格納される
    $addresses[] = $address;
}
```

# 集計メソッド
## count()で、レコードの件数を取得
**戻り値：**　`int`

```php
// usersテーブルのレコード件数を取得
$recordCount = DB::table('users')->count();
```

## max()で、指定したカラムの最大値を取得

```php
// usersテーブルのageカラムの最大値を取得
$oldest = DB::table('users')->max('age');
```

## min()で、指定したカラムの最小値を取得

```php
// usersテーブルのageカラムの最小値を取得
$youngest = DB::table('users')->min('age');
```

## avg()で、指定したカラムの平均値を取得

```php
// usersテーブルのageカラムの平均値を取得
$average = DB::table('users')->('age');
```

## sum()で、指定したカラムの合計値を取得

```php
// usersテーブルのageカラムの合計値を取得
$sum = DB::table('users')->('id');
```


# レコードが存在するか判定するメソッド
以下のメソッドで、クエリの制約にマッチするレコードが存在するか否かを調べることができる。

## exists()で、指定したレコードが存在するか調べる
**戻り値：**　存在する場合`true`、存在しない場合`false`

```php
// usersテーブルのnameカラムがJohnのレコードが存在するか判定
$existsOrNot = DB::table('users')->where('name', 'John')->exists();
if ($existsOrNot) {
  // 存在する
} else {
  // 存在しない
}
```

## doesntExist()で、指定したレコードが存在しないか調べる
**戻り値：**　存在しない場合`true`、存在する場合`false`

```php
// usersテーブルのnameカラムがMarkのレコードが存在しないかどうか判定
$nonExsistOrNot = DB::table('users')->where('name', 'Mark')->doesntExist();
if ($nonExsistOrNot) {
  // 存在しない
} else {
  // 存在する
}
```

# SELECT節の指定
## select()を使って、取得するカラムを指定できる。

```php
// usersテーブルの、name、email（user_emailという名前で取得）カラムの全レコードを取得
$users = DB::table('users')->select('name', 'email as user_email')->get();
```

## 既に存在するクエリビルダインスタンスのSELECT句にカラムを追加したい場合は、addSelect()を使って追加できる

```php
// usersテーブルのnameカラムを取得するクエリビルダインスタンスを作成
$query = DB::table('users')->select('name');

// 上記クエリビルダに、ageカラムも取得するように追加
$users = $query->addSelect('age')->get();
```
[メモ] macOS Mojave の OSStatus エラー 99999 について

我が家の mac はまだ Mojave で止まっているのですが、しばらく前からウェブからダウンロードしてきたアプリケーションを開く際に謎のエラーが発生するようになっていました。

ウェブからダウンロードしてきたアプリケーションを起動しようとすると以下のように Gatekeeper に止められますが

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96400/fc0e7b80-30af-59e0-7d5b-30e08f72e921.png)

システム環境設定の "セキュリティとプライバシー" の画面上で "このまま開く" を押すと本来は問題なくアプリケーションが開くはず...

![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96400/1dca527f-d887-d870-7164-c9a81f101ae1.png)

なのですが **"操作を完了できませんでした。（OSStatusエラー99999）"** という謎のエラーが。😨

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96400/6d733d6d-8bdd-aa65-80e4-80c96cf09fc7.png)

このエラーが発生し始めるようになってから、うちの mac は特定のアプリケーションがどうしても開けない状態となってしまっていました。。。

この OSStatusエラー99999 について調べてみると、[Apple のコミュニティ](https://discussions.apple.com/thread/8463852) では以下のコマンドを試してみろとのこと。
（破損したシステムポリシーファイルをデフォルトのファイルで上書きするらしい）

```bash
$ sudo cp /var/db/.SystemPolicy-default /var/db/SystemPolicy
```

しかし症状は改善せず。

困っていたのですが、さきほど [こちら](https://discussions.apple.com/thread/251109027) で 「目的のアプリケーションを起動する前に以下のコマンドを実行して Gatekeeper を一時的に無効化し、

```bash
sudo spctl --master-disable
```

アプリケーションを起動し終わったら以下のコマンドを実行することで Gatekeeper を再度有効化する」

```bash
sudo spctl --master-enable
```

という手順が紹介されているのを見つけたので試してみたところ、*問題なく目的のアプリケーションが起動できました！！* 😂
一度この手順で問題なく起動できたアプリケーションは次からは単にダブルクリックで起動できるようになるようです。

一体何なんですかねこの症状。。。 Gatekeeper の不具合みたいなのですが...
問題を根本的に解決できたわけではないのですが、ひとまずメモとして残しておきます。
【Objective-C】NSDateまとめ

##現在時刻の取得

```objective_c
//今の時刻が取得できる
NSDate *now = [NSDate date];
```

##現在より後の時刻の取得

```objective_c
//今から10秒後の時刻を取得
NSDate *afterTime = [NSDate dateWithTimeIntervalSinceNow:10.0];
```

##文字列をNSDateに変換

```objective_c
//NSDate型に変換するためのフォーマットを初期化
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

// フォーマットを文字列で指定する
[dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss"];

// 先ほどのフォーマットに会う形の文字列をNSDateに変換
NSDate *fromFormatDate = [dateFormatter dateFromString:@"2020/07/01 00:00:00"];

// 先ほど変換した時間から１時間後の時刻を取得
NSDate *afterHour = [fromFormatDate initWithTimeInterval:(60 * 60) sinceDate:fromFormatDate];
```
##NSDateの比較

```objective_c
//時刻の取得
NSDate *now = [NSDate date];
NSDate *otherDate = [NSDate dateWithTimeIntervalSinceNow:10.0];

//compareメソッドで比較
NSComparisonResult result = [now compare:otherDate];

switch (result) 
    case NSOrderedSame:
        // 同一時刻
        break;
    case NSOrderedAscending:
        // nowよりotherDateのほうが未来
        break;
    case NSOrderedDescending:
        // nowよりotherDateのほうが過去
        break;
}
```

##NSDateの差分を取得

```objective_c
// pastという、以前取得したデータがあるとする
NSDate *now = [NSDate date];
//timeIntervalSinceDateで比較し、経過時間を取得
NSTimeInterval intervalTime = [now timeIntervalSinceDate:past];
```
jacobi法による固有値計算の解説とシミュレーション

## 初めに
実対象行列の固有値を求めるアルゴリズムであるjacobi法について、web上で動くプログラムを作成したので宣伝します。ついでなので、アルゴリズムや証明についても触れておきます。なお、通常jacobi法でググルと連立一元方程式の反復解法であるjacobi法がヒットするかと思いますが、そちらとは関係ありません。

## コード
https://gyuta.github.io/jacobi/  でシミュレーションできます。
https://github.com/gyuta/jacobi  にコードがあります。

## アルゴリズムの概略
$A_0$を入力とします。適当な直行行列$P_0$を用いて相似変換をし$A_1$とします。この操作をA_nが十分対角行列になったとみなせるまで続けます。相似変換がわからない人は以下の式を見るとピンとくるかと思います。
$$ A_{1} = P_0^{-1} A_0 P_0 $$
また、直行行列というのは逆行列と元の行列の転置が等しい行列のことです。式で表したものを書いておきます。
$$ P_0^{-1} = P_0^T $$
この操作を繰り返すことでいずれAが対角行列になります。なお、$P = P_0P_1P_2...$とすればPはAを対角化することになるので、Pをみれば得られた固有値に対する固有ベクトルも求まることになります。

#### 直行行列の決定法
さて、ここで問題になるのが直行行列$P_n$をどのように決定するかです。もちろん適切な直行行列を選ばなければ、いつまでたってもAは対角化されません。$P_n$は以下の手順で決定されます。

1.  $P_n$を単位行列とする。
2.  $max_{i \neq j} |a_{ij}|$ となるi,jを定め、k=i,m=jとする。($A_n$の非対角成分が最大となるインデックスを取得する)
3.  $tan2\theta = \frac{2a_{km}}{a_{mm}-a_{kk}}$より$\theta$を決定する。($a_{mm}-a_{kk}=0$のときは$\theta = \frac{\pi}{4}$とする)
4.  $P_n$のkk成分・mm成分を$cos\theta$　　km成分を$-sin\theta$　　mk成分を$sin\theta$で置き換える。

つまり下のような行列が出来ることになります。

```math
  P_n = \left(
    \begin{array}{cccc}
      1 &        &           &        &            &   &0 \\
        & \ddots &           &        &            &   &  \\
        &        & cos\theta & \ldots & -sin\theta &   &  \\
        &        & \vdots    & \ddots & \vdots     &   &  \\
        &        & sin\theta & \ldots &  cos\theta &   &  \\
        &        &           &        &            &\ddots & \\
      0 &        &           &        &            &   &1 \\

    \end{array}
  \right)
```

#### 計算を簡略化する
理論上は上で述べた手法で$cos\theta,sin\theta$を求め計算することは可能ですが、さらに計算を簡略化することができます。$tan$の逆関数から$\theta$を求める処理が重く、誤差も入りやすいので、$tan2\theta$のまま扱うことを考えます。

$$ cos2\theta = \frac{1}{\sqrt{1+tan^2(2\theta)}} $$
$$ cos\theta = \sqrt{\frac{1+cos2\theta}{2}} $$
$$ sin\theta = sig (a_{km}(a_{kk} - a_{mm})) \sqrt{\frac{1-cos2\theta}{2}} $$
ここで$sig$は中身が正なら1を負なら-1を返す関数です。これによって$tan$の逆関数を用いずに$cos\theta,sin\theta$を求めることが出来るようになりました。

また、実は$A_{n+1} = P_{n}^TA_{n}P_{n}$についてもちゃんと全ての要素を計算してあげる必要はありません。
詳しくは説明しませんが$P_n$の形から$A_{n+1}$は$A_{n}$の特定の要素のみが変化したものと捉えることができます。
どの値がどう変化するのか等の詳細についてはこちらのリンクが詳しいです。
http://hooktail.org/computer/index.php?Jacobi%CB%A1

今回作成したシミュレーションでは前者の方法のみ採用しています。（後者の手法はライブラリで行列計算が簡単にできるため実装が面倒だった）

## 証明
では、この手法でなぜ$A_n$が対角行列に収束していくのかを見ていきます。概略は以下の通りです。

1. 行列の各成分の二乗和は変換しても変わらない。（jacobi法の変換であれば）
2. 対角成分の二乗和は変換後に増加する。
3. 1.2より非対角成分の二乗和は変換後に減少する。

#### 二乗和が変換後も変わらないことの証明
$trAA^T$は行列Aの各成分の二乗和を表します。また分かりやすさのため$B = P^TAP$によってAがBに変換されるとします。

$$ trBB^T = trP^TAPP^TA^TP = trP^TAA^TP = trAA^T $$

最後の変形はトレースは相似変換によって変わらないことを用いました。

#### 対角成分の二乗和は変換後に増加することの証明

下のリンクに大筋が書いてあるので気になる方はそちらを参照してください（力尽きました）
https://tm23forest.com/contents/eigen-jacobi-method

##最後に
ろくにwebpackも使ってないゴミコードなのでプルリク投げろなどは口が裂けても言えません。シミュレーションに関する改善の要望あればコメント等でいただければ検討します。
goの構造体のJSONのtagでめちゃくちゃ時間を溶かした

# goの構造体のJSONのtagでめちゃくちゃ時間を溶かした
題目の通りです。2時間くらい溶かしました。

## なにでそんなに溶かしたのか
jsonのTagでそんなに溶かすことないだろ、と。溶かした原因はこれです

```go:example.go
type JsonValue struct {
  foo string `json:"foo"`
  bar string `json:"bar, omitempty"`
}
```

お分かり頂けただろうか？この心霊現象。。
わからない人は僕と一緒に２時間溶かすかも知れない恐ろしいものです。。

```go
bar string `json:"bar, omitempty"`
```
スペースですね。カンマの後ろのスペースです。時間を溶かしたのはこれエラー吐かないからです。
stringなら空文字が入っていたときに `json.Marshal` すると `bar` は省略されるはずなのに空文字が入っちゃっておかしいなぁ〜ってなります。
このスペースは入れてはいけません。正しくはこう

```go
bar string `json:"bar,omitempry"`
```


こんな簡単なミスにハマる人がいるかは分かりませんが、もしいたら助けになればと思います。
僕はもう一生忘れません。
Noodlアプリに引数を渡す


## 概要
Noodlアプリを起動するときに引数を渡す方法を紹介します。
引数を渡せるようになると、Noodlアプリに対して様々な初期値で起動することができ。
例えば、お天気アプリを作った時に所在地を初期値として渡す。アプリのメッセージを多言語化するなどができるようになります。

## サンプルアプリ
簡単なサンプルとして、URLの引数を変更することで、アプリのメッセージとフォントサイズを変更するデモを作っていきます。
![img0055_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/3eaef2ab-2225-e72b-7b86-90c6e470bb22.png)

##　ノード設定・接続
早速始めましょう。まずはNoodlを起動し、「CreateNewProject」でプロジェクトを起動します。
起動直後のノードにJavascriptノードと、ApplicationEventsノードを追加しています。

### ノードの役割
- Javascriptノード：URLから引数を取得するためのプログラムを記述します
- ApplicationEventsノード：Noodlアプリが起動したことをJavascriptに通知します

![img0056_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/182eb0db-b1d3-171f-1a0a-b515903aa7bd.png)


## Javascriptノードの設定
次にJavascriptノードに下記コードをコピペします。
コードではURLの取得。文字列の分離(?と&）。配列取得。を行っています。

```js:Javascriptノード
define({
	// The input ports of the Javascript node, name of input and type
	inputs:{
	    // ExampleInput:'number',
	    // Available types are 'number', 'string', 'boolean', 'color' and 'signal',
	    mySignal:'signal',
	},
	
	// The output ports of the Javascript node, name of output and type
	outputs:{
	    // ExampleOutput:'string',
	    text:'string',
	    size:'number'
	},
	
	// All signal inputs need their own function with the corresponding name that
	// will be run when a signal is received on the input.
	mySignal:function(inputs,outputs) {
	    var url   = location.href
        parameters    = url.split("?")
        params   = parameters[1].split("&")
        var paramsArray = []
        for ( it = 0; it < params.length; it++ ) {
            neet = params[it].split("=")
            paramsArray.push(neet[0])
            paramsArray[neet[0]] = neet[1]
        }
        outputs.text = paramsArray["text"]
        outputs.size = paramsArray["size"]
		// ...
	},
	
	// This function will be called when any of the inputs have changed
	change:function(inputs,outputs) {
		// ...
	}
})
```

### ノードの接続
最後に各ノードを接続します。
- `ApplicationEvents:start -> Javascript:mySignal`
としてアプリ起動時にJavascriptのmySignalが実行されるようにしています
- `Javascript:text/size -> Text:text/size`
として、引数として受け取ったtext、sizeをTextノードに接続することで、メッセージを変更。文字サイズを変更しています

![img0051_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/50712845-c020-72af-0228-57e0126f9364.png)


## 確認
これで完成です。実際にURLを叩いて、Noodlの簡易Webサーバから動作を確かめてみましょう。
ブラウザを立ち上げて、下記URLを入力します。

### URLでの引数渡し

```
http://Noodlアドレス?引数1=値1&引数2=値2
```

### 確認用のURL

```javascript

//引数を渡さないで起動する場合
http://localhost:8574/external/viewer/index.html

//引数を渡して起動する場合
http://localhost:8574/external/viewer/index.html?text=GoodBye&size=100
```

## まとめ
サーバ上に置いたNoodlアプリは誰から開いてもおなじ初期値を持っていますが、
URL上から引数を渡すことで、任意の初期値を設定することに成功しました。
PowerAutomateでSharePoint上のExcelをコピーして表に行を追加する

# やりたいこと
- SharePointのドキュメント上にテンプレートとなるExcelがある。
- テンプレートのExcelにはテーブルが存在する(テーブル名=テーブル1)。
- そのExcelをコピーして新規作成する。
- コピー先のExcelのテーブルに行を追加する。
- 以上をPowerAutomateで行う。

# やり方
## テンプレートとなるExcelの準備
今回はShared Documents/20200626というフォルダ配下に「test-template.xlsx」という名称のExcelを作成しました。
test-template.xlsxには下図の列を持った「テーブル1」というテーブルを持っています。
<img width="546" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/a497d5cc-de8a-581c-8b36-cecf26fac123.png">
Excel Onlineでテーブルを作成すると自動的にこの名称になります。ただ、Excelアプリで表示しないとテーブル名が分からない。
このExcelを適当な場所にコピーして行を追加します。

## PowerAutomate
### ファイルのコピー
SharePointの「ファイルのコピー」アクションを設定します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/51fc254b-67da-77a9-1cec-52243f441df7.png)
「Shared Documents/20200626」に「コピー先」というフォルダを作成して、ここをコピー先のフォルダとしました。

### 行を追加？
次にExcelの「表に行を追加」アクションで行を追加したいところですが、表に行を追加アクションだと行を追加するExcelは固定である必要があります。今回は可変なのでひと工夫必要です。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/a835afb4-3d97-19da-fe4c-4da951658593.png)


### ブックIDを取得する
拙著の[PowerAutomateを使ってSharePoint上のExcelのテーブルを取得する](https://qiita.com/fukasuke/items/1502b9b9b045c78f67e9)を参照してブックIDを取得します。紹介したページではThumbnailの値が必要ですが、上記のファイルのコピーアクションではThumbnailは返却されないので、「ファイルのプロパティを取得」アクションを使って取得します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/227152a5-38a5-7174-3027-2a855b6aac9f.png)
IDに設定しているのは、ファイルのコピーの戻り値の「ItemId」です。これを実行するとThumbnailが返却されるので、上記ページを参照してブックIDを取得します。

### 表に行を追加
Excelのテーブルに行を追加するには「表に行を追加」アクションを使用しますが、
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/2884e25d-5867-05fe-a4df-47a9c5429aae.png)

表に行を追加アクションは、行を追加するExcelは固定されている前提です。なので、上図だとテーブルの列が表示されています。
ただ今回の場合はExcelは可変なので、列名は表示されず下図のようになってしまいます。パラメータ「テーブル」はカスタム値として設定しています。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/43f02ddc-fdb8-d587-9903-8d6261be82cb.png)

パラメータ「item」にはJSON形式で設定することができるので、以下のように設定します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/6aa7353f-5b49-b392-bbca-b51a7148e475.png)

これで行を追加できます。これと同じようにして行の更新も以下のようにしてできます。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/ceff9876-f4f4-3569-d84a-3cab11c3b9a6.png)
パラメータ「キー列」にはキーとなる列名をカスタム値として入力します。SQLで言うとことろのPrimaryKeyとなる列名に相当しますかね。パラメータ「キー値」は、そのPrimaryKey値の値になる部分です。パラメータ「item」に変更する列名と値をJSON形式で設定します。

# まとめ
やっぱりブックID取得部分がスマートではないのでなんとかしたい。
tensorflow.python.framework.errors_impl.FailedPreconditionErrorの発生と解決

# 概要
Kerasで単純なGANを実行するとき、tensorflowのエラーに躓いたので、その備忘録

## やりたかったこと
- GANのサンプルコードを動かしみる
- 参考にさせていただいたのは
 [こちら](https://qiita.com/triwave33/items/1890ccc71fab6cbca87e)

##エラー内容
tensorflow.python.framework.errors_impl.FailedPreconditionError:  Error while reading resource variable _AnonymousVar44 from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/_AnonymousVar44/class tensorflow::Var does not exist.
         [[node mul_28/ReadVariableOp (defined at C:\Python\envs\virtualenv001\lib\site-packages\keras\backend\tensorflow_backend.py:3009) ]] [Op:__inference_keras_scratch_graph_2136]

Function call stack:
keras_scratch_graph

##理由
どうもtensorflowの変数初期化エラーらしい（[参考](https://screwandsilver.com/tensorflow_init_variable_error/)）
どの変数で初期化エラー起こっているかがよく分からなかったけど、[ここ](https://github.com/keras-team/keras/issues/13550)で解決方法を発見
※エラーの原因は不明

##対策
- optimizerはkerasではなく、tensorflowを使う。(from tensorflow.keras.optimizers import Adam)

もしエラーの原因が分かる方がいたらコメントいただけますと幸いです。
Progateで出てきたLinux(UNIX)コマンドまとめ

#記事を書くきっかけ

現在ProgateでCommandLineの勉強をしているのですが、

まとめるのが下手なのと、自分のメモを見返した時にわかりやすくするために、Progate内で出てきたLinuxコマンドについてまとめようと思い、今回記事を書くことにしました。

#CommandLineとは？

簡潔にいうと、「Linux/UNIXコマンドのこと」なのですが、

ちゃんと説明すると、Windowsのコマンドプロンプトや、Macのターミナルを文字だけで操作する時に使用します。

#教材で出てきたコマンド一覧
| コマンド一覧       |     意味| 
|:-----------------|------------------:|
| touch             |              ファイルを作成する | 
| cat           |            ファイルの中身を表示 | 
| mkdir            |              ディレクトリ作成 | 
| cd               |        ディレクトリを移動        |
| ls             |            ディレクトリの中身を確認 |    
|mv         |           ファイル/ディレクトリの移動＆名前の変更 | 
| cp          |           ファイルのコピー | 
| rm          |           ファイルの削除 | 
| rm -r          |           ディレクトリの削除 | 

#まとめ
現在は、Progateのみで勉強していますが、7/2に、[新しいLinuxの教科書](https://www.amazon.co.jp/gp/product/4797380942/ref=ppx_yo_dt_b_asin_image_o00_s00?ie=UTF8&psc=1)が届くので、そちらを使って再度、勉強を続け、理解した内容については、本の丸写しにならないように、自分の見解も兼ねて、書きたいと思います。

以上です。

#参照ページ
[Progate(CommandLine)](https://prog-8.com/languages/commandline)

[「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
](https://wa3.i-3-i.info/word11158.html)
JupyterでSVGを使った際に表示が見切れる

新しい開発環境で以下のようにSVGを使って深層学習のネットワーク構造をいつも通り可視化しようとしたところ、図のように表示が見切れてしまった。

```python
from IPython.display import SVG

from keras.utils.vis_utils import model_to_dot
SVG(model_to_dot(model, show_shapes=True).create(prog='dot', format='svg'))
```
![Screenshot from 2020-06-30 23-46-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/9b75a134-e58e-6f6d-274d-954e7377bb8b.png)


調べてみたところ、バージョン1.14.0以降のkerasのmodel_to_dot関数の引数にdpiが加わり、デフォルト値が96に設定されているのが問題のようです。
もともとはNoneとして扱われていたようなのでmodel_to_dotの引数にdpi=Noneを加えてあげましょう。



```python
SVG(model_to_dot(model, show_shapes=True, dpi=None).create(prog='dot', format='svg'))
```

![Screenshot from 2020-07-01 00-09-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/564d4133-0e1a-9914-f36f-776b3c7ba93a.png)


これで表示することが可能です。
なお、dpiを変えれば自由にサイズを変えることができます。
Anaconda3環境で，cadnano2.5をインストールする

# 前書き

別記事 (https://qiita.com/ktmene/items/9546bb3379973fd3e88a ) にAnaconda3環境でcadnano2をインストールする方法をまとめました．

この記事では，現在開発途上にあるcadnano2.5をインストールする方法をまとめます．

## 参考

https://github.com/douglaslab/cadnano2.5

https://cadnano.readthedocs.io/en/master/index.html

# 実行環境

- windows10
- Anaconda3 (Python3系)

# cadnano2.5のインストール

python3.6の仮想環境を作る
※3.6でないとだめ

```
$ conda create -n cadnano2.5 python=3.6
> Proceed ([y]/n)?
$ y
```

仮想環境に移動

```
$ conda activate cadnano2.5
```

インストール
※これで必要なパッケージを全てインストールしてくれる

```
$ pip install cadnano
```

色々出る，少し待つ

起動

```
$ cadnano
```

## 補足

- python3.6以外だと，cadnanoがpipに登録されていないためインストールできない．

# おまけ　起動ショートカットの作成

```launch_cadnano2.5.bat
call C:\Users\USERNAME\anaconda3\Scripts\activate.bat
call conda activate cadnano2.5
call cadnano
```

- `C:\Users\USERNAME\`の部分は，Anaconda3をインストールした場所に読み替える．

## 使い方

1. batファイルをダブルクリックで起動
2. ウインドウを閉じれば終了

適当な場所に`launch_cadnano2.5.bat`を作り，スタートメニューのフォルダにそのショートカットを置くと便利．

# 関連記事

[Anaconda3環境で，cadnano2をインストールする](https://qiita.com/ktmene/items/9546bb3379973fd3e88a)
コミットする時に現在のブランチと変更ファイルの状態を確認できるスクリプト


昨日、[作業ブランチにpushする時の入力は面倒だけど、pushするブランチは確認したい](https://qiita.com/gatapon/items/c9f0bd1531e56e5e5f60)を書きましたが、
よくよく考えてみたらコミットの段階で確認出来た方が良い事に気が付いたので、そのシェルスクリプトを作ってみました。

### 作ったもの

 - commit時に現在ブランチ、入力したコメントが出力される
 - `y` or `Y`の入力でコミットされる
 - 修正されたファイルの一覧が見れる

addしないままコミットしてしまうこともあったので、修正ファイルも表示されるようにしました。

```bash:~/.bashrc
gitcommit(){

    branch=`git rev-parse --abbrev-ref HEAD`
    if [ -z $branch ]; then
        return
    fi

    git status

    comment=$1
    if [ -z $comment ]; then
        echo '>> Comment is Required.'
        return
    fi

    echo "[branch]  $branch"
    echo "[comment] $comment"
    read input

    if [ -z $input ]; then
        return
    fi

    if [ $input = 'y' ] || [ $input = 'Y' ]; then
        git commit -m $comment
    else
        return
    fi

}
```

`gitcommt <COMMENT>`で実行します。

```bash
Ariel:bash gatapon$ gitcommit
On branch gt.test
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   first.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   test2.txt

>> Comment is Required.
```
コメントがなければ終了する。

```bash
Ariel:bash gatapon$ gitcommit コミットしてみる
On branch gt.test
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   first.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   test2.txt

[branch]  gt.test
[comment] コミットしてみる
```

現在のワークスペースとステージの状況が表示され、現在のブランチとコメントが確認できる。
`y` or `Y`を入力すると実行

```bash
[branch]  gt.test
[comment] コミットしてみる
y
[gt.test 6d163de] コミットしてみる
 1 file changed, 1 insertion(+)
```
VSCodeのChromeのデバッグが実行できないときにはtimeout属性を入れてみましょう

# 問題発生
JavaScriptをVSCodeでデバッグしようと思い、二つの拡張機能を導入しました。

|#  | 拡張機能           |
|---|------------------ |
| 1 |[Debugger for Chrome](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome)|
| 2 |[Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer)|

launch.jsonに`"type": "chrome"`の構成を追加し、意気揚々とデバッグ実行したところ....
こんなエラーが出ました。
**「ランタイム プロセスに接続できません。10000 ミリ秒後にタイムアウトになります - (理由: ターゲット アプリから応答を受け取りましたが、ターゲット ページが見つかりませんでした)。」**

メッセージ的に、URLが誤っているのか思いましたが、そんなことはなく。
セキュリティソフトが原因かと思いましたが、一時無効にしてもエラー変わらず。
頭を抱えてしまいました。

# 結果
### **タイムアウト** してました！

非常にシンプルな答えでした。確かにエラーメッセージが出るまでにそこそこ時間がかかっていました。
launch.jsonに以下のようにtimeout属性を追加し、値を多めにとって実行すると動きました。
参考になれば幸いです。

```json:launch.json
{
  "version": "0.2.0",
  "configurations": [{
    "type": "chrome",
    "request": "launch",
    "name": "Launch Chrome against localhost",
    "url": "http://127.0.0.1:5500/test.html",
    "webRoot": "${workspaceFolder}",
    "timeout": 100000
  }]
}
```

# 補足
VSCodeのフロントエンドのデバッグに関しては、この方の記事が参考になりました。
そもそもどうすればChromeでデバッグができるのか知りたい方はおすすめです。
https://qiita.com/C3REVE/items/273646ad028e98758e70
VSCodeのExtensionをシェルとGitで管理すると便利になったお話

[Visual Studio Code(以下VSCode)](https://code.visualstudio.com/)はMicrosoftが開発しているソースコードエディタです。Extension(拡張機能)を追加することで様々なプログラミング言語に対応可能であり、合わせて使いやすさも向上させることも出来ます。本記事ではそんなVSCodeのExtensionをシェルとGitを用いて管理すると便利になったお話を取り上げます。

# 背景
VSCodeのExtensionはVSCodeを起動し、拡張機能からインストール可能です。しかし、PCを複数台所有している場合や買い替え時に手作業で入れ直すのは大変煩雑であり、また漏れも発生します。色々調べてみた所、Extensionのインストールはコマンドでもインストール可能なことが分かりました。そのコマンドは以下です。

```bash:VSCodeのExtensionをインストールするコマンド
code --install-extension EXTENSION_NAME
```

# シェルファイル化で自動化する

上記のコマンドを記載したシェルファイルを作成し、Gitで管理すればPCの買い換えやリカバリー時にも早急に開発環境を復旧出来ます。Exstensionは自分のインストールしたい物を記載して下さい。その時に記載する名前は以下の図の赤丸部分に倣って記載して下さい。以下の図は拡張機能でPythonのExtension(MS社製)を検索した時の画面のスクリーンショットです。

<img width="1092" alt="vscode_python.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/1959a335-0f36-962f-0251-b876bc49300d.png">


```shell:シェルファイルの中身の例
#!/bin/bash

# Python用拡張機能
code --install-extension ms-python.python
code --install-extension tht13.python
code --install-extension kevinglasson.cornflakes-linter
```

# Windowsへの対応
会社の開発環境はWSL @ Windows10です。WSL上でVSCodeは実行出来ますが、使い心地がいまいちである為、Windows上にVSCodeをインストールしています。Windowsの場合、シェルの実行にはbatファイルを用いるのが一般的ですが、文法がbashとは異なり、筆者はどうしても肌に合いません。そこでbatファイルも自動生成することにします。

```shell:Windows用batファイル作成用シェルファイル
#!/bin/bash

rm -f install_extensions.bat
# ユニコード対応化
echo "chcp 65001 && ^" > install_extensions.bat
# コメント部分, 空白行を除く, batの複数コマンド記述対応化
cat install_extensions.sh | grep -v '^#' | sed '/^$/d' | sed -e "s/\$/ \&\& \^/" >> install_extensions.bat
# Remote WSLを追加
echo "code --install-extension ms-vscode-remote.remote-wsl & ^" >> install_extensions.bat
echo "echo Finished! & ^" >> install_extensions.bat
# コマンドが終了しても画面が閉じないようにする
echo "pause" >> install_extensions.bat
# 改行コードをWindows用に
sed -i -e 's/$/\r/' install_extensions.bat >> install_extensions.bat
```

これらのシェルファイルを格納するGitリポジトリに`.gitignore`を追加し、`*.bat`と追加することでリポジトリに誤って追加されない様にします。

```:.gitignoreの例
*.bat
```

# まとめ
VSCodeのExtensionのインストールを自動化し、管理を楽にするためのスクリプトファイルの作成方法について紹介しました。現状Linux/Unix系OS上で主に利用することを想定している為、Windowsをメインとしている方には少々不親切な内容かもしれません。。。実際に職場の開発環境(Windows10)上のWSL上でシェルを実行し、出来上がったbatファイルをWindows上で実行した所、Extensionのインストールが自動で行われ、あっと言う間に環境構築が出来ました。
MacのSafari開発タブにiPhone iPad iPodが表示されない問題

#MacのSafari開発タブでiPhone iPad iPodが表示されない
なぜそうなってしまったかわからなくて調べたが自分の場合はESETが問題だった。
ESET以外のウイルス対策ソフトが原因の場合もあるだろうから一度ウイルス対策ソフトをOFFにしてみると良いかも。
Anaconda3環境で，cadnano2をインストールする

# 前書き

私はAnacondaを使ってpython環境を構築しています．

現在，インストーラでインストールできるcadnanoは，python2.7でしか動かず，パスを通す必要もあって不便でした (https://cadnano.org/windows-installation.html )．

そこで，cadnano (cadnano2) をpython3系で使えるようにする方法をまとめました．

この方法でインストールしたcadnano2は少しバグが多いかもしれません．

## 私の環境でのバグ

見つけたらメモしていきます

- 上書き保存をすると，ファイル名が`C`(拡張子なし)になり，保存先も`cadnano2`フォルダ直下になる．
- deleteで要素を消せなくなるときがある．（cadnano再起動で直る）
- pencilで繋いだときに表示がおかしくなる．（そのcross overを少し動かすと直る，python2版のcadnanoも同じ症状あり）

## 参考

- [cadnano2](https://github.com/douglaslab/cadnano2)
- [Anacondaで仮想環境構築・削除](https://blog.mktia.com/how-to-create-and-remove-virtual-environment-on-anaconda/#toc1)
- [バッチ処理をバックグラウンドで行う](http://m-style-beta.ddo.jp/-bibouroku/windows/30c330c151e67406306e67005c0f5316)

# 実行環境

- windows10
- Anaconda3 (Python3系)

# cadnano2のインストール

Anaconda Prompt (anaconda3)を起動し，そのコマンドライン上で進めていく．

python3.8の仮想環境を作る

```
$ conda create -n cadnano2 python=3.8
> Proceed ([y]/n)?
$ y
```

仮想環境に移動

```
$ conda activate cadnano2
```

PyQt5をインストール

```
$ pip install pyqt5 networkx
```

githubのページからクローン
※gitをインストールしていないと使えない

```
$ git clone https://github.com/douglaslab/cadnano2
```

クローンしたディレクトリに移動

```
$ cd cadnano2
```

起動

```
$ python main.py
```

## 補足

- Anaconda Promptにおいて，先頭の`(base)`が仮想環境を表す．そのため，`conda activate cadnano2`とすると先頭が`(cadnano2)`となる．

- git for windowsをダウンロードしておく (https://gitforwindows.org/ )．
  インストールは全てデフォルトでOKだった．
  面倒なら該当のgithubのページから，Download ZIPしてもいい．

- `git clone`でのダウンロード先は，そのコマンドを打ったカレントディレクトリになる．

# おまけ　ショートカットの作成

batファイルだけでも起動できるがコマンドウインドウ残ってしまい邪魔なので，vbsファイルを通して起動する．

```launch_cadnano2.bat
call C:\Users\USERNAME\anaconda3\Scripts\activate.bat
call conda activate cadnano2
call cd C:\Users\USERNAME\cadnano2
call python main.py
```

```launch_cadnano2_background.vbs
CreateObject("WScript.Shell").Run "C:\Users\USERNAME\cadnano2\launch_cadnano2.bat",0
```

- `C:\Users\USERNAME\anaconda3`は，Anaconda3をインストールした場所に読み替える．
- `C:\Users\USERNAME\cadnano2`はgithubからダウンロードした先に読み替える．

## 使い方

1. vbsファイルをダブルクリックで起動
2. ウインドウを閉じれば終了

適当な場所に`launch_cadnano2.bat`と`launch_cadnano2_backgroud.vbs`を作り，スタートメニューのフォルダにvbsファイルのショートカットを置くと便利．
私の環境だと，`C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\`にショートカットを置いた．

# 関連記事
[Anaconda3環境で，cadnano2.5をインストールする](https://qiita.com/ktmene/items/fe1d1bb6c39dd2a4c8b9)
InfluxDB の Data Layout

- InfluxDB Data Layout
-- 
最初とっつきにくかった InfluxDB の Data Layout についてのまとめ。

- InfluxDB に入れるデータはカンマやスペースで区切られた１行の String のデータから成り立つ。( [Line Protocol](https://docs.influxdata.com/influxdb/v1.8/write_protocols/line_protocol_reference/) と呼ばれる)
- 1行は 1 Data Point と呼ばれ、Measurement, Tag, Field, TimeStamp が含まれる。
![influx.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134530/52df2709-de03-d8f9-560a-827d6b2fc960.jpeg)
- Measurement は表名で、Tag と Field は Index されるかどうか、型、クエリ時にできることなどが違う。
![influx.002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134530/beda9a06-b0ba-5c4c-cb50-6f6d973db191.jpeg)
- Tag と Field 両方とも WHERE句で指定できるが、GROUP BY は Tag だけで MAX/MIN/MEAN などの集計は Field に対してだけできる。
![influx.003.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134530/0fcc1716-8000-696c-246d-c0db98ed464a.jpeg)

- 例えば各ノードのCPU使用率を入れる場合、 cpu_usage 表(measurement) に各ノードの CPU 使用率(usage)を field に指定し、各ノード名(node_name) を tag に指定する。

```sql
INSERT cpu_usage,node_name=mynode1 usage=30 1583240400000000000
INSERT cpu_usage,node_name=mynode2 usage=35 1583240400000000000
INSERT cpu_usage,node_name=mynode3 usage=40 1583240400000000000
INSERT cpu_usage,node_name=mynode1 usage=35 1583245800000000000
INSERT cpu_usage,node_name=mynode2 usage=40 1583245800000000000
INSERT cpu_usage,node_name=mynode3 usage=45 1583245800000000000
```
各ノードの平均 CPU 使用時間がこの SELECT文で得られる。

```sql
> SELECT MEAN(usage) FROM cpu_usage GROUP BY node_name
name: cpu_usage
tags: node_name=mynode1
time                 mean
----                 ----
1970-01-01T00:00:00Z 32.5

name: cpu_usage
tags: node_name=mynode2
time                 mean
----                 ----
1970-01-01T00:00:00Z 37.5

name: cpu_usage
tags: node_name=mynode3
time                 mean
----                 ----
1970-01-01T00:00:00Z 42.5
```




参考
- https://docs.influxdata.com/influxdb/v1.8/concepts/schema_and_data_layout/
- https://docs.influxdata.com/influxdb/v1.8/write_protocols/line_protocol_reference/
- https://docs.influxdata.com/influxdb/v1.8/query_language/
PRML　演習問題5.11(標準)　解答　

<a id="eq:1.152"></a>
##はじめに
本記事は, 機械学習の教科書の決定版ともいえる, Christopher Bishop先生による『Pattern Recognition and Machine Learning （パターン認識と機械学習）』, 通称PRMLの演習問題のうち, 私が解いた問題の解答を記したものです

今回は演習5.11の証明です

##問題
(5.32)で定義される誤差関数

```math
E(\mathbf{w})=E\left(\mathbf{w}^{\star}\right)+\frac{1}{2}\left(\mathbf{w}-\mathbf{w}^{\star}\right)^{\mathrm{T}} \mathbf{H}\left(\mathbf{w}-\mathbf{w}^{\star}\right)\quad(\text { 5.32 }) \\
```
を考えます。
ヘッセ行列が(5.33)で与えられる

```math
\mathbf{H u}_{i}=\lambda_{i} \mathbf{u}_{i}\quad(\text { 5.33 }) \\
```
という固有値を持つとき、

誤差一定の等高線は方向が固有ベクトル$u_{i}$であり長さが対応する固有値$\lambda_{i}$の平方根の逆数であるような軸を持つ楕円であることを示します

##解答
まずは (5.35)で与えられる変数の変換をして、


```math
\mathbf{w}-\mathbf{w}^{\star}=\sum_{i} \alpha_{i} \mathbf{u}_{i}\quad(\text { 5.35 }) \\
```
(5.36)の形に書き換えます


```math
E(\mathbf{w})=E\left(\mathbf{w}^{\star}\right)+\frac{1}{2} \sum_{i} \lambda_{i} \alpha_{i}^{2}\quad(\text { 5.36 }) \\
```
(この変形は教科書でも説明されています)


問題の条件より等高線なので
$E(\mathbf{w})$を定数$C$と置くと 



```math
E\left(\mathbf{w}^{\star}\right)+\frac{1}{2} \sum_{i} \lambda_{i} \alpha_{i}^{2}=C
```
変形すると

```math
\sum_{i} \lambda_{i} \alpha_{i}^{2}=2 C-2 E\left(\mathbf{w}^{\star}\right)=\widetilde{C}
```

$\widetilde{C}$ は定数
これは変数 ${\alpha_{i}}$よって記述された座標に表現される楕円の方程式で
全ての$i \neq j$について$\alpha_{i}=0$と設定することで軸$j$の長さが決定されます
$\alpha_{j}$をとくと

```math
\alpha_{j}=\left(\frac{\widetilde{C}}{\lambda_{j}}\right)^{1 / 2}
```

軸の長さが確かに対応する固有値の平方根に反比例することがわかります

よって題意は示された。

参考:https://www.microsoft.com/en-us/research/wp-content/uploads/2016/05/prml-web-sol-2009-09-08.pdf
【Vue.js】「ERR! code EINTEGRITY」とか「command failed: npm install --loglevel error」に苦しめられた件

#開発をしていたらvue createが使えなくなった。
急にvue createがうまく行かない。
npm ERR! なんちゃらと沢山でる。

検索していると

```
npm cache clean --force
```

上記コマンドでキャッシュを消せば治ると出てきた。
[【Vue CLI v4.2.2】vue createしたらnpm ERR!が出てcreateされない](https://deep-space.blue/web/1531)

![IMG_7314.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601820/22c8b4ea-0e1c-9d4f-1c91-7a429bba7350.jpeg)
I sure hope you know what you are doing
「何やってるかわかってるといいんだが」
「わかってるといいですね(煽)」

**すまん全然わからん。**


その結果
![IMG_7316.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601820/9f2ecb50-682d-0741-c7c2-0b6dcbcb7c52.jpeg)


なんかもう取り返しのつかない感じに。なんだこりゃ。
**とりあえずvue createができないとまずい。**

#そこからめちゃくちゃ調べたりした結果...

下記コマンドで解決。
**ただの@vue/cli再インストール。**

```
npm install -g @vue/cli
```

いろんなデータの関係性が壊れたり、諸々したらエラーが出たりすることもあるみたいです。
知らないうちに触っちゃいけないものに触っていたのかも。

キャッシュ消す前に再インストールするだけで治った気もします。






参考文献
[【Vue CLI v4.2.2】vue createしたらnpm ERR!が出てcreateされない](https://deep-space.blue/web/1531)

[Npm installを実行すると、ERR！が返されます。コードEINTEGRITY`（npm 5.3.0）](https://www.it-swarm.dev/ja/node.js/npm-install%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81err%EF%BC%81%E3%81%8C%E8%BF%94%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E3%82%B3%E3%83%BC%E3%83%89eintegrity%60%EF%BC%88npm-530%EF%BC%89/835333208/)