OmniAICreator/Qiita-1.07M huggingface dataset:
PowerShell起動時、文字コードをUTF-8に変える方法

# Goal

ショートカット設定でPowerShell起動時に文字コードをUTF-8に変える。

## 経緯

プログラムをコンソールから実行した時、
日本語が含まれていると**文字化け**が
発生します。

特にWindowsでは、UIの文字コードを
UTF-8にするためには、システム全体の
表示言語を英語にする必要があり、
UIは日本語、文字コードはShift-JIS
(CP932、Windows-31J)を妥協して
使っている方が多いと思います。

プログラムをコンパイルして実行する前に、
`chcp 65001`を打ち込んで文字コードを
変える儀式を繰り返すことは無駄だと
気付いた時、即座にリンク先の中に
下記の内容を記述しましょう。

## 手順

1. PowerShellショートカットのプロパティを開く。
2. リンク先を編集する。
3. プロパティのOKボタンをクリックする。

## 詳細説明
### PowerShellのショートカットの場所を開く。

```powershell
# 1. エクスプローラで下記のパスを開く。
%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
```
![tempsnip2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208928/d526ac4a-f8aa-2831-531b-e60aff14f8f7.png)

---
### プロパティを開く。
![キャプチャ3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208928/a418cdb1-a01c-2b98-9529-b45a63286e4c.png)

---
### 起動時の設定を入力する。

```powershell
# 2. リンク先を編集する。
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit -Command "chcp 65001"

# オプション説明
-NoExit : 次のコマンドを実行した後、PowerShellが閉じないようにする。
-Command: 今回は、"chcp 65001"を実行する。

# 3. プロパティのOKボタンをクリックする。
```

![プロパティ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208928/161e450f-9bdd-0af2-467b-3f1908f9d7bb.png)

# おまけ(コマンドプロンプトで同じことをする。)

```powershell
%windir%\system32\cmd.exe ~ /k "chcp 65001"
~ : 作業フォルダが指定されていない時、ショートカットの置いてある
    ディレクトリをカレントディレクトリにする。
/k: 指定したスクリプトを実行する。 
```
![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208928/872a7be4-1341-58e1-c0f4-d6ee3b1f69cd.png)
Rails 6へアップグレードする時の注意点

# Rails 6へアップグレードする時の注意点

### 開発環境
- rails 6
- ruby 2.6.3

## rails 6でWebpackerの利用について

WebpackerはRails 6におけるデフォルトのJavaScriptコンパイラですが、アプリケーションを以前のバージョンからアップグレードした場合は自動的には有効になりません。 Webpackerを使いたい場合は、以下をGemfileに追記し、rails webpacker:installコマンドを実行してインストールしてください。

###### gemにwebpackerを記述
`gem "webpacker" `
その後
`rails webpacker:install`

上記を行わないと、`app/views/layouts/application.html.erb`の以下部分が作動しない。
`<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>　`

つまりHTMLでjavascriptが動かない。
slackの視認性向上のために「アイコン画像設定」を一括で促す

# Slackにおけるアイコンの意義
![スクリーンショット 2019-11-24 7.46.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225823/e868cb92-e9f4-3b51-8916-2f0c9b5b1847.png)


入っているチャンネルの数が増えると、
すべての投稿に目を通すだけでも相当な労力になります。
アイコン画像は、発言の重要性・緊急性を認識する「視認性」を構成する重要な要素となります。

# デフォルトアイコンの弊害
- 発言に対して「重み付け」ができずに投稿を精査する労力が発生する
- 似たようなアイコンなので、発言者を取り違える
- 仕様でデフォルトアイコン自体が大きく変更されることがある

# アイコン設定への心理的障害
そもそも、なぜアイコン設定しない人がいるのでしょうか？
視認性を下げてやる！という考えでアイコンを未設定にする人はいないと思います。
大半は下記の理由だと思います。

- ビジネスツールでどんな画像をアイコンとして使っていいか分からない
- かといって自撮りをupするのは恥ずかしい

特にチームにjoinしたばかりだと、
「アイコン画像なんか設定してふざけてる」と思われるのでは？と考える人もいるでしょう。

# アイコン設定を促してあげる
「slackアイコン設定お願いします」と一言メンションを飛ばしてあげると万事解決です。
しかし、メンバーが増えるたびにメンションを送っているのではキリがありません。
「アイコン画像未設定ユーザー一覧」を取得する方法は無いのでしょうか？

# slackAPI の Users.list を使う
[Users.list](https://api.slack.com/methods/users.list) でユーザーに関する情報を取得できます。
アイコンを設定しているユーザーは `profile` 内に `is_custom_image` というプロパティを持つようになります。

つまり
1. `users.list` で全ユーザーの情報取得
2. botやゲストユーザーを除外
3. `is_custom_image` が無いユーザーのIDを抽出
4. 抽出したユーザー達にメンションをつけてメッセージを投稿する。

![スクリーンショット 2019-11-24 14.11.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225823/8e5890a1-8756-f6bf-0241-317aad17b788.png)

という流れで解決することが出来ます。

---

※これより下は具体的なコードの話になります。
※使用するコードの全文は[github](https://github.com/marozex/myGas/blob/master/checkIcon/checkIcon.gs)に公開しております。
※実行環境としてGoogleAppsScriptを使用します。
GASの詳細な説明は省きますので、ライブラリやスクリプトの設定手順などは[別の記事](https://qiita.com/marogoma/items/e3003564c1b8b7b09e29)を参照してください。

# 実装方法
## 1. 一覧取得
```js
    var token = PropertiesService.getScriptProperties().getProperty('OAuth_token');
    var slackapp = SlackApp.create(token);
    var membersList = slackapp.usersList().members;
```

先程も紹介した `Users.list` を使うだけです。
## 2. botやゲストの除外

```js
    membersList.forEach(function(m) {
        // is_restricted 以外にすることで multi-channel guest を除外
        // is_ultra_restricted 以外にすることで single channel guest を除外
        // 詳細は https://api.slack.com/types/user を参照
        if (!m.deleted && !m.is_bot && m.id !== "USLACKBOT" && !m.profile.is_custom_image 
            && !m.is_restricted && !m.is_ultra_restricted) {
                defaultIconUsers.push(m.id)
            };
        })
```
コメントでも記載していますが、 `is_restricted` 及び `is_ultra_restricted` を参照することでゲストユーザーを除外することが出来ます。
このあたりの判定条件は実情に応じて適宜変更してください。
## 3. 投稿メッセージの作成

```js
    var message = ""
    if (defaultIconUsers.length > 0) {
        message = "視認性向上のためアイコン画像の設定をお願いします\n"
        defaultIconUsers.forEach(function(d) {
            message += "<@" + d + ">"
    })} else {
        message = "アイコン画像を設定していないユーザーは居ません"
    }
    slackapp.postMessage(channelId, message);
```
判定結果に応じて条件分岐した後に、メッセージを作成して投稿という流れです。

- デフォルトアイコンユーザーあり
![スクリーンショット 2019-11-24 14.11.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225823/fd21f060-569c-524e-1a09-aa64abb1d62a.png)

- なし
![スクリーンショット 2019-11-24 14.12.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225823/c9aa0b3c-b6a5-2038-bb85-28f103f87954.png)

実装手順は以上となります。

---

# おまけ
slack上で外部のお客様(関連会社)とのやりとりが多い会社では、
アイコン画像の設定が非常に重要で、設定するまで注意喚起され続けるというところもあるようです。

数ヶ月に1回このスクリプトを定期実行するだけでも、slackの視認性が向上してくれるのではと考えております。

ご精読ありがとうございました。
頑張って最適化関数を作ってみたけど上手くいかなかった話

# 参考
https://qiita.com/tokkuman/items/1944c00415d129ca0ee9

# 実行ソース
https://github.com/akidukin/optimize_test/blob/master/benchmark_optimizer.py

# 対象
- 自己満

# 何したの??
参考にさせていただいたURLを元に
- SGD
- MomentumSGD
- AdaGrad
- RMSprop
をpythonで書いてみて

この記事にある (https://qiita.com/Akidukin14/items/4cf3fd1a065726450e4d)
- sphere関数
- losenbrock関数
- styblinskitang関数
に適用させてみてどのような動きをするのか見てみたかった

それぞれの偏微分式は自分で解いたのでそこも悪いのかも

# 結果
![sphere_optim.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/3c9e01e5-df82-8ca2-d84c-55a7171ed826.png)
![losenbrock_optim.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/c2d6e7de-7bba-b049-27dd-5a95e4a4aef7.png)![styblinskitang_optim.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/82e7d4d0-3e72-eec7-b88c-a7c09decf6a7.png)

# まとめ
MomentumSGDが特にひどい、全部どこいくねーんと
疲れたのでもういいやと思いました まる
今まで触ってみたCMSあれこれ

私が今まで触ったCMSや試してみたCMSのあれこれです。

一般的に導入されているのってWordpressのイメージが強く、ほとんどの企業やブログでも利用されていますが
CMSって別にwordpressだけじゃないんですよというお話です。

## [MovableType](https://www.sixapart.jp/movabletype/)
<img width="1680" alt="スクリーンショット 2019-11-24 14.08.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163786/eb0370c5-badd-c0a9-fa0f-e1695a2131b2.png">

Wordpressの案件をやる前にはこちらを触ったことがあります。
シックス・アパート株式会社が提供しているCMSです。

MTタグという独自タグを埋め込むのが特徴です。
参考: [【MT】よく使うMovableTypeのタグまとめ](https://qiita.com/4cres/items/f2ea369ebfe111a8ed00)

``` 
<$mt:WebsiteURL$>
```

独自でやるというよりはパートナーシップ契約をしているようなので
品質は担保されているようです。
https://www.sixapart.jp/pronet/

## [Wordpress](https://ja.wordpress.org/)
<img width="1680" alt="スクリーンショット 2019-11-24 14.09.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163786/89c33b6b-0213-f408-39a5-e0af65e4aca7.png">

こちら定番中の定番Wordpressです。

世界中のWebサイトの30%以上はWordpressで作成されているとか
参考: [WordPressの市場シェア](https://kinsta.com/jp/wordpress-market-share/)

初心者でも勉強の書籍や情報、コミュニティーが揃っているのでそれほどハードルが高くなくても導入できます。

言語はPHPで開発されておりWordpress専用の関数を埋め込むことで出力できます。

```
<?php wp_title(); ?>
```

## [Concreat5](https://concrete5-japan.org/)
<img width="1680" alt="スクリーンショット 2019-11-24 14.18.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163786/c85b4508-9779-d3cb-0579-5d088d4795aa.png">

こちらwordpressが動的なサイトが得意なのに対して静的なサイトを得意とするCMSです。
ブロックを積み上げるような感覚でレイアウトを変更できるブロックシステムが特徴です。
また管理画面からテキストを入力するのではなく直接テキストを編集できるのでユーザーは直感的にどこをそうさしたらいいのかわかりやすいです。

## [SoyCMS](https://www.soycms.net/)
<img width="1680" alt="スクリーンショット 2019-11-24 14.18.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163786/e11b2cd2-ac73-5b22-1504-a66e585a35f0.png">

企業サイトやブログ、ショップ開発まで幅広く対応できるCMSです。
wordpressでは実装が難しかったマルチサイト対応や
ブログ投稿を複数作成することも可能。
ショップ作成のプラグインもあるのでECサイトの作成もできます。
また、管理画面だけではなくダイレクト編集機能がついているので静的ページでは直感的に編集しやすくなっています。
独自で作成するのは情報量がすくないので
開発が難しければ開発元の[株式会社Brassica](https://brassica.jp/)にお願いするのがいいかもしれません。

## [SpinaCMS](https://www.spinacms.com/)
<img width="1680" alt="スクリーンショット 2019-11-24 14.19.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163786/3c100d81-b520-9399-b915-b6e5d190b399.png">

こちらはRuby製のCMS
Railsをベースに作られているのでRubyエンジニアなら相性がいいかもしれません。

## [KeystoneJS](https://www.keystonejs.com/)
<img width="1680" alt="スクリーンショット 2019-11-24 14.20.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163786/7662170a-8ac8-baba-14e4-249e62f82618.png">

Node.js製のCMSです。フロントエンジニアやexpressで開発しているエンジニアでJavascriptで開発したいなら相性がいいかもしれません。
LaravelでControllerの名前を変更する方法

#概要


```
php artisan make:controller 
```

で作成したControllerを後に改名したくなった場合、知らずにやると
file does not exit とかで困ったので記録。

#手順

1.Controllerのファイル名を変更する。
2.Controllerファイルを開いて、Class名を変更する。
3.web.phpを開いて、第二引数の@の前の部分を手順2のClass名に差し替える。
4.以下をターミナルで実行する。

```
composer dump-autoload
```


#参考にしたページ

[Laravel 5.7でControllerのファイル名を少し変更（大文字）しただけなのに、Controllerファイルが見つからないエラーが出るようになった](https://qiita.com/BeFiveINFO/items/0e0d6eac2dca5b83baa8)
SassのコンパイルをMacのターミナルで

Scssのファイルをターミナルからコンパイルした時のメモ

```
Sassをインストール
$ sudo gem install sass

コンパイルしたいファイルをコンパイル
＄　sass example.scss:example2.css
```

※Sassのインストールの時に管理者権限が必要な場合はsudoを書かないと以下のようなエラーになってインストールできない

```
Fetching: sass-3.7.4.gem (100%)
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory
```


👋
VSCodeをMac上よりアンインスールする

MacからVSCodeのアプリのみをアンインストールしても設定ファイルなどは削除されない。

### 設定ファイルの格納先

1. ~/Applications/Visual Studio Code.app
2. ~/Library/Application Support/Code
3. ~/.vscode

上記の設定ファイルなどを含め削除したい場合は以下を実行する。
(設定ファイルやプラグインなどを含めて削除する場合に限る)

#### 実行コマンド
1. rm -rf ~/Applications/Visual\ Studio\ Code.app
2. rm -rf ~/Library/Application\ Support/Code/
3. rm -rf ~/.vscode/
accepts_nested_attributes_for を使ってネスト先に画像保存しようとしたらNULLで保存できないときに見て欲しい！

数時間解決できなかったので備忘録として書きます。

# 前提：
・Rails5
・accepts_nested_attributes_for でネストしている画像なども一緒に保存・更新する様に記述している
・carrierwaveを使っている
・NotNullViolation(Mysql2::Error: Column 'image' cannnot be null: INSERT INTO~~~)
　というエラー文が出ていてVALUESには確かにNULLって書いてある
・paramsが以下の様に出ていてインスタンスになっていない

```
parameters: {(省略)"3"=>{"image"=>"C:\\fakepath\\〇〇〇〇.jpg"}
```
***そして画像が保存できない！***

# 何が起きてるの？：
上記の状態は画像の名前部分（しかもセキュリティ上の問題でfakepathという仮のパス！）しか取得していないという状態です。
欲しい部分（画像のデータとなるところなどなど）が無いのでNULL扱いなんだと思います。
https://qiita.com/shizuma/items/6f56ca442111ece021b5
上記のものすごく有難い記事の様に **f.fields_for** を使っていてそのスコープ内であれば起きない現象です。
なぜなら **multipart: true**というオプションが記載なしで実行されているからです。
このオプションの無い場合は、画像の名前しか得てくれないんですね。今回の問題はこれです。
form_tagで画像を受ける場合は必須の様です。
javascriptなどでフォームを後から追加する仕様にしていたため、私は記載がなく引っかかりました

#対処法：

form 部分に multipart: trueのオプションを加えるだけです。
統計基礎について備忘録


# 統計
初投稿です。備忘録として
間違いや指摘があれば言ってください。


##1.検定統計量

```math
μ:母平均,σ：母標準偏差, \\
\overline{X}:標本平均,s:標本標準偏差,u:不偏標準偏差,\\
n:サンプルサイズ
```
###<１標本>
母平均の検定
-
**母分散σ^2が既知** 
・母分散が既知の場合、母分散σを用いて、標準誤差(標本平均の標準偏差)は$σ/\sqrt{n}$
で表せる。
・標本平均を標準化したzは以下のように表され、標準正規分布に従う。

```math

z = \frac{\overline{X}-μ}{σ/\sqrt{n}} \sim N(0,1)\\
σ/\sqrt{n}:標準誤差

```

＜検定＞有意水準5%で両側検定を行う場合、|z|>1.96の時が棄却域となる。

**母分散σ^2が未知**
母分散σ^2が未知の時、不偏推定量uを用いる、検定統計量t は自由度n-1のt分布に従う。


```math
t = \frac{\overline{X}-μ}{u/\sqrt{n}} \sim t(n-1)\\
u/\sqrt{n}:標準誤差

```

母分散の検定
-
検定統計量χ^2は　自由度n-1のχ^2分布に従う。

```math
χ^2 = \frac{(n-1)u^2}{σ^2} \sim χ^2(n-1)

```

母比率の検定
-
平均0, 分散σ^2の標準正規分布に従う

```math
z = \frac{\hat{p}-p}{\sqrt{p(1-p)/n}} \simeq N(0,1)\\
 \sqrt{p(1-p)/n}: 標準誤差
```

###<2標本>
母平均の差の検定
-
**母分散σ^2が既知** 

```math
d = \overline{x} -\overline{y}, δ = μ_x - μ_y\\

z = \frac{d-μ}{\sqrt{ \frac{σ_1^2}{n}+\frac{σ_2^2}{m} }} \sim N(0,1)\\
\sqrt{ \frac{σ_1^2}{n}+\frac{σ_2^2}{m} }:標準誤差

```
**母分散σ^2が未知、等分散**
母分散σ^2が未知の時、不偏推定量uを用いる、検定統計量t は自由度n-1のt分布に従う。
ここで、普遍分散$u^2$は$\frac{(S_x + S_y)}{(n_x-1)+(n_y-1)}$で求められる。


```math
d = \overline{x} -\overline{y}, δ = μ_x - μ_y\\

t = \frac{d-μ}{\sqrt{ \frac{1}{n}+\frac{1}{m} }u} \sim N(0,1)\\
\sqrt{ \frac{1}{n}+\frac{1}{m} }u:標準誤差


```

###<対応のある２標本>
母平均の検定
-
差をとり母平均の検定に帰着させる
検定統計量t は自由度n-1のt分布に従う。

```math
d_i = x_i - y_i\\
\overline{d}:差の平均, \hat{σ}^2:差の不偏分散\\
t = \frac{\overline{d}-δ}{\hat{σ}/\sqrt{n}} \sim t(n-1)\\
\hat{σ}/\sqrt{n}:標準誤差
```


母分散の比の検定
-
分散は正の値をとるので比の形で検定を行う

```math
・χ_1^2 = \frac{(n-1)u_x^2}{σ_x^2} \sim χ^2(n-1)\\
・χ_2^2 = \frac{(m-1)u_y^2}{σ_y^2} \sim χ^2(n-1)\\

--------
\\
F = \frac{χ_1^2(n-1)}{χ_2^2(m-1)} = \frac{u_x^2・σ_y^2}{u_y^2・σ_x^2} \sim F(n-1, m-1)\\
等分散の場合 σ_x^2 = σ_y^2 = σ^2\\
F = \frac{χ_1^2(n-1)}{χ_2^2(m-1)} = \frac{u_x^2}{u_y^2} \sim F(n-1, m-1)\\

```
母比率の差の検定
-
差をとることで１標本の時と似た形式に、ただし標準誤差に注意！

```math
\hat{p} = p_1 - p_2\\

z = \frac{\hat{p}-p}{\sqrt{\frac{p_1(1-p_1)}{n}+\frac{p_2(1-p_2)}{m}}} \simeq N(0,1)\\
\sqrt{\frac{p_1(1-p_1)}{n}+\frac{p_2(1-p_2)}{m}}: 標準誤差
```
【Fire base+swift】学習記録（５）xcodeでアプリ申請→公開まで

Firebaseを勉強し始めてから、２週間ほど経ちました。
今までで作成したアプリは全て、サーバーなどよくわからなかったので一人で完結するものでした。
アプリを作る上でいろいろな人が繋がれる物が作りたくて、Firebaseを勉強し始めました。

先日簡単ですが、アプリができたので早速アプリ申請に通しました。
わーい！
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">できた！！！ <a href="https://t.co/vEV5MjfZZV">pic.twitter.com/vEV5MjfZZV</a></p>&mdash; なかむら (@nakamurasssey) <a href="https://twitter.com/nakamurasssey/status/1198438715263074310?ref_src=twsrc%5Etfw">November 24, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


アプリ申請は２回目ですが、やり方忘れており備忘録としてこちらにまとめておきます。
前提として、自分はすでにDeveloper登録しています。


#アプリ公開まで
###①BundleIDの登録
apple developer>Account>Certificates, Identifiers & Profiles>Identifiers>「+ボタン」からBundleIDを登録
https://developer.apple.com/
<img width="1412" alt="スクリーンショット 2019-11-24 13.51.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321729/6c515d30-54dd-b35a-a7a8-b526865a23d5.png">


###②MyAPP作成
app store conectのMyAPPの「+ボタン」から新しいアプリを作成
<img width="1408" alt="スクリーンショット 2019-11-24 13.52.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321729/de664a8a-a486-7ff7-6fd4-d3ddbb9fd5f7.png">

###③Xcodeからアプリをアーカイブ
ビルド先を「Generic iOS Device」にして、Archiveしましょう。
これで、app store conectのMyAPPから提出可能な状態になります。
<img width="459" alt="スクリーンショット 2019-11-24 13.53.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321729/38251d27-182b-55ae-5cd6-071004382daa.png">


###少しハマったポイント
①アイコン画像は透明部分があってはいけない。（pngで作成して、透明部分があると拒否される）
②Appstore用のスクリーンショットは全部用意しないといけない
③MyAPPでカテゴリーやプライスも設定する


提出ができれば、自動的にAppStoreに公開されます。
審査が一発で通ることを願って待ちます！
Caused by: java.lang.NoSuchMethodError: 'boolean javax.servlet.ServletContext.setInitParameter(java.lang.String, java.lang.String)'

```:log
Caused by: java.lang.NoSuchMethodError: 'boolean javax.servlet.ServletContext.setInitParameter(java.lang.String, java.lang.String)'
```

# Cause

The error indicates multiple version servlet-api jar in class path.

* `javax.servlet:servlet-api` (< 3.0)
* `javax.servlet:javax.servlet-api` (>= 3.0)

# Resolution

Remove old servlet-api dependency.
Basically, old class depends on old servlet api will work with new api.

```gradle:build.gradle
configurations.all {
    exclude module: "servlet-api" // Old pre-3.0 servlet API artifact
}
```
GitHubでinvalid username or passwordが出た場合の対処方

# パスワード変更後、Pushが失敗する場合

以下コマンドで再度設定すると上手く行く場合が多いです。

```console
$ git config --global user.name ユーザ名
```

上記コマンド実行後、次のPush時にユーザ名とパスワードが聞かれますので新しいパスワードでログインをしてください。

# 二段階認証など何かしら設定を変えた後失敗する様になった場合

以下コマンドでhttps://github.comが表示された場合、

```sh
git remote -v
```

以下コマンドでgitプロトコルになる様設定を変更すると直る場合があります。

```sh
git remote set-url origin git@github.com:リポジトリ名
```

同様のissueはこちら。
https://stackoverflow.com/questions/29297154/github-invalid-username-or-password

他に何か思いついたら追記します。
GKEのプリエンプティブルインスタンスは、Kubernetes wayに乗っていない様子なので注意

GKEでプリエンティブルインスタンスを使う際の注意点をまとめる記事になります。

結論は以下となります。

- プリエンプティブにおいて、SIGTERMやpreStopを用いたGraceful Shutdownは行われていないっぽい。PodのRestartは0のままで、ただコンテナが再起動される。
- Cordon、Drainといったノードの削除のプロセスは行われない。Kuberentes的にはNodeが再起動したことも知らないのかもしれない。

マネージドKuberentesサービスとして、Googleが提供するGoogle Kubernetes Engine（以下GKE）があります。
この料金体系は、マスターノードは無料で利用でき、実際にコンテナのアプリケーションを実行するワーカーノードにのみGoogle Compute Engine（以下GCE）に基づく料金がかかるようになっています。
このGCEには、プリエンプティブルインスタンスという種類のインスタンスを選択することができ、GKEでも利用できるようになっています。

プリエンティブルインスタンスの特徴は以下のようになっています。

- 価格がおおよそ1/3に設定されている。
- 最大の起動時間が24時間で一度終了させられる。GKEでは再起動させられる。
- Googleに余剰キャパシティで起動されるいんすたんすのため、起動できない場合や途中で終了される場合がある。

おそらく、Googleの中でホスト内でCPU、Memoryの仕様の偏っているVMを、ホスト間で整理するのに使っているインスタンスなのだと思われます。

Kubernetesで通常、ノードの削除、追加を行う場合、以下のxrandr | grep -w connected | cut -d' ' -f1手順に則っています。

- NodeをCordonして、以後Podがスケジュールされないようにする。
- NodeをDrainして、起動中のPodを削除する。Deploymentなどを使っている場合、別のクラスタでそのPodがスケジュールされるようになり、Podを別のノードで移動させたようになる。
- NodeをDeleteする。

このPodの削除では、Podでは以下の手順が行われます。

- SIGTERMのシグナルが送られる。このシグナルを元に、Pod内のアプリケーションプロセスは終了の準備を行う必要がある。また、preStopフックが設定されている場合、SIGTERMのシグナルの代わりにこのコマンドが実行される。
- Podのプロセスが終了した場合、Podが削除される。
- GracePriod（初期設定は30秒）の経過後にプロセスが終了していない場合、SIGKILLのシグナルが送られ、強制的にプロセスが終了する。

https://kubernetes.io/ja/docs/concepts/workloads/pods/pod/#pod%E3%81%AE%E7%B5%82%E4%BA%86

このSIGTERMやpreStopを用いて、実行中のリクエストを捌き切ってから終了することを、Graceful Shutdownと呼びます。

よって、Kubernetes wayに則って、ノードの終了と、あたらいいノードへの移行を行うと考えると、NodeのCordon、Drainが行われ、PodはSIGTEMやpreStopを用いてGraceful Shutdownが行われることが期待される。
この通りの動作がプリエンティブルインスタンスで行われるかを調査した。

以下の機能をもつプログラムを作成した。

- 5秒ごとに現在時刻をログ出力する。ログ出力が途絶えた時間が、プロセスが終了した時間となる。
- SIGTERMを受け取るとログ出力する。SIGTERMが送られた時間を確認できる。
- 起動時にログ出力する。プロセスが起動した時間を確認できる。

GKEを以下のように構築した。

- プリエンプティブルのノードプールを作成し、ノードの数を2に設定した。2つのノードが作られる。
- プリエンプティブルでないノードプールを作成した。ノードの終了時にはこちらのノードプールにPodが退避されることを期待した。

このプログラムを実行するコンテナのPodのDeploymentを作成し、プリエンプティブルのノードプールで実行されていることを確認し、24時間経過してプリエンプティブルインスタンスのノードおよびPodがどのように動作するのかを、ログと、kubectlコマンドを使って確認した。

31時間経過後、kubectlでみた以下のような結果になった。

- NodeのAGEが31hになった（Deleteなどは行われていない様子）
- PodのAGEが31hになった（Drainなどは行われていない様子）
- PodのRestartは0のままだった

<img width="686" alt="get_pods.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3413/90757a21-6c36-b196-1ed0-f41605034786.png">

<img width="790" alt="get_nodes.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3413/e57826c2-276e-f39e-5ecf-fe4d043f5756.png">


つまり、プリエンプティブの前後では、Nodeは同じノードとして扱われ、かつPodも同じPodとして扱われる。Podの再起動は、DeploymentによるPodの復元や、PodのRestartとは別におこなれていた。

Podのログは以下のようになっていた。

- SIGTERMが送られた形跡はなく、急にログが途絶えていた。
- 4分後、Podのプロセスが起動した。

<img width="565" alt="preemptive.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3413/427d574a-e004-7d8a-2e14-03e599a7a9bd.png">

つまり、現状プリエンプティブルインスタンスを用いたときの動作は以下のようになることがわかった。

- Podのプロセスが一時的に中断させられる。このときSIGTERMは送られず、Graceful Shutdownは行うことができない。

ということで、Graceful Shutdownを行うことはできないので、Dev環境など一時的な環境や、24時間以内に終了するバッチ処理でのみ使うようにしましょう。
Cinema4D Fields Tips 1 Freeze ＆ Glow


Cinema4D R20から搭載されたFields
減衰を複数かませて、重なりをコントロールできたり、
デフォーマーやウェイトにも適用できる。

今回はFreeze＆ Glowを試してみた。

あらかじめ、変位デフォーマーなどで変形させておいたオブジェクトの変位に
球体フィールドを適用する。

次にクランプタブがあるのでその中からFreezeを選択。
Freezeを加算モードにして球体Fieldsの上へ。
フリーズのモードをグローにし、半径を任意に。

これにディレイをかませて、スプリングなんかをかませるとよりリッチに。

![SnapCrab_NoName_2019-11-24_13-46-11_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538275/d3cac3a3-c817-b65d-5479-05cae7640113.png)
![SnapCrab_NoName_2019-11-24_13-51-6_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538275/57f7757a-e2f8-a178-ed92-9252e75f6312.png)
![cap.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538275/e53804f7-464c-c1ee-3f23-1b28c9befd59.gif)
一括Tagを消す


```bash
git tag -l '1.0.*' | xargs -I % echo "git tag -d %; git push --delete origin %" | sh
```

下記のようなTagを削除します。

```
1.0.4
1.0.5
1.0.6
1.0.7
1.0.8
1.0.9
```

```bash
git tag -l '1.0.2*' | xargs -I % echo "git tag -d %; git push --delete origin %" | sh
```

下記のようなTagを削除します。

```
1.0.20
1.0.21
1.0.22
1.0.23
```
ニコニコチャンネルのチャンネルIDを簡単に確認する方法

# 方法

チャンネルIDを確認したいニコニコチャンネルのトップページを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/a8a1fe79-3f7b-6e86-ecd0-cca34f403db7.png)

ページの下の方にチャンネルのアイコンがあるので、マウスカーソルを合わせるとURLのパスからチャンネルIDが確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/439d627e-69ad-360c-665b-5360522a9f54.png)

# ちなみに

`https://ch.nicovideo.jp/<channelID>`というURLを開くと、<channelID>のチャンネルのトップページ`https://ch.nicovideo.jp/<channelAlias>`へリダイレクトされる動きとなる。

ウェザーニュースチャンネルの場合：
`https://ch.nicovideo.jp/ch1072` --> `https://ch.nicovideo.jp/weathernews`

しかし、[ニコニココンテンツ検索API](https://site.nicovideo.jp/search-api-docs/search.html)の検索では、`fields`パラメータの`channelId`フィールドでチャンネルID以外を利用することはできない。（`ch1072`は利用可能だが、`weathernews`は不可）

以上
個人開発をアジャイル開発で Kanban × Trello

アジャイル開発という開発スタイルは有名ですね。それを個人開発でも適応しようとした際、
スクラム方式では人数規模的にもあまり向いていないです。
そこで、Kanban方式というのを採用し、ツールにTrelloを利用することにしたお話。

今回厳密なアジャイルというのは求めず、「ToDo管理をメリハリをつけて行う」ことをゴールとします。

# Kanban方式
スクラム方式ではなく、Kanban方式であれば個人でも利用できそうです。

→ Kanban方式とは？
>
「Kanban」は、各ステージにおけるタスクの量を制限し、必要なタスクだけ前ステージから取ってくる、 トヨタの「かんばん」方式を適用した開発モデル です。開発モデルとしてのかんばんを「 Kanban 」、 各ステージにおけるタスクの状態を付箋紙などのカードで可視化したツールを「 kanban 」と表します。

引用: [非ウォーターフォール型開発（プロトタイプ型、スパイラル型、アジャイル型）をざっくり理解する](https://qiita.com/bremen/items/32a4cb2b74662e03db65#kanban)

![alt](https://i1.wp.com/lean-trenches.com/wp-content/uploads/2013/08/one-day-in-kanbanland-17-03.png?w=501&ssl=1)
以下でこちらのような図解でより深い説明をしていますのでぜひ参照ください。
[5分で理解するリーンな「かんばん」](https://lean-trenches.com/one-day-in-kanban-land/)

# Trello
さて、形式は決まりましたが、ツールについては[Trello](https://trello.com/)(ブラウザ版)を利用したいと思います。
Macのデスクトップアプリケーションは[こちら](https://apps.apple.com/jp/app/trello/id1278508951?mt=12)からダウンロードできます。
Trelloはふせんを貼ったりはがしたりする操作感で、タスク管理ができるツールです。基本無料です。
![alt](https://dpd29bjwmgbr8.cloudfront.net/wp-content/uploads/2016/04/18211930/459534e2-6f66-4438-bbc7-d66c7b55c6a6-1.jpg)
引用: [無料＆日本語化！「Trello」でタスク管理がラクになる！使い方・始め方を解説します](https://seleck.cc/610)

# Trello with 拡張機能
もしTrelloに慣れてきたら拡張機能を入れて利用するのも良さそうです。
ただデフォルトでも今のところ満足できるほど機能はシンプル・充実しているので今のままで私は利用しています。

拡張機能の紹介は以下でいろいろ紹介してくれています。
[Trelloを使う時にデフォルトで入れるべきChrome拡張機能](https://qiita.com/webazarashi/items/1099cd39d31a1474226a)

他にも、Trelloのボードをガントチャートに変換してくれる[Elegantt for Trello](https://elegantt.com/)というものもあります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304373/9e5676fe-ff3f-1c75-42b3-09dc1b6de57c.png" width="800">

# 最後に
Trello使いやすいですね。**スマホでも利用できたり**ととても便利です。
チームで利用する際では分担割り当てなどもできるようなので使ってみたいなと思いました。
GsonからMoshiへ（Retrofit2利用）

Gsonを使っていたコードをMoshiに変えました。

#準備
Gradleの設定

**Retrofit2の設定も追加で必要なので忘れずに行うように**
(自分はずっと忘れていた。。）

```app/build.gradle
// Moshi
dependencies {
    def moshi_version = '1.5.0'
    implementation "com.squareup.moshi:moshi:$moshi_version"
    implementation "com.squareup.moshi:moshi-kotlin:$moshi_version"

//Retrofit2にも追加で以下が必要　ここを忘れていてずっとできなかった。。。
    implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version"
}
```


比較して書いてみたいと思います。
#Gsonの時

```Gson.kt

private var retrofit: Retrofit
private val url = "https://qiita.com"

    init {
        var client = httpBuilder.build()
        this.retrofit = Retrofit.Builder()
            .baseUrl(url)//基本のurl設定
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)//カスタマイズしたokhttpのクライアントの設定
            .build()
    }

//Clientを作成
    val httpBuilder: OkHttpClient.Builder get() {
        //httpClinetのBuilderの中に入ってるメソッド使う？
        val httpClient = OkHttpClient.Builder()
        //headerの追加
            httpClient.addInterceptor(Interceptor { chain ->
                val original = chain.request()
                val request = original.newBuilder()
                    .header("Accept", "application/json")
                    .method(original.method(), original.body())
                    .build()

                var response = chain.proceed(request)

                return@Interceptor response
            })
            .readTimeout(30, TimeUnit.SECONDS)

        //log
        val loggingInterceptor = HttpLoggingInterceptor()
        loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
        httpClient.addInterceptor(loggingInterceptor)

        return httpClient
    }
```


#Mohsiの時

```Moshi.kt
private var retrofit: Retrofit
private val url = "https://qiita.com"

    init {
        //Moshi
        val moshi: Moshi = Moshi.Builder()
            .add(KotlinJsonAdapterFactory())
            .build()

        this.retrofit = Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(MoshiConverterFactory.create(moshi))
            .client(getClient())
            .build()
    }

private fun getClient(): OkHttpClient {
        return OkHttpClient
            .Builder()
            .connectTimeout(120, TimeUnit.SECONDS)
            .readTimeout(120, TimeUnit.SECONDS)
            .addInterceptor(HttpLoggingInterceptor().apply {
                level = HttpLoggingInterceptor.Level.BODY
            })
            .build()
    }
```

#まとめ
見た目がわかりやすくなった。

Retrofit2とOkHttp3については過去記事をご覧ください。
[Retrofit2とOkhttp3を使ったAPI開発](https://qiita.com/175atsu/items/573193af65b91aa79df5)
今までの復習

bundle exec rake db: seed
データベースにデータを投入

Sequel proからターミナルではなくSQL文を実行する

検索するテーブルを指定
FROM　テーブル名

取得するカラムを指定
SEECT カラム名

ex) SELECT  family_name
FROM users

ex) SELECT *
FROM users
 
(*)は全てを指定するという意味になる

ワイルドカード
文字の代わりとして使うことができる記号のこと

WHERE句
取得するレコードの条件を指定し、その条件が正のレコードを取得。
WHERE　条件
WHERE句の条件には比較演算子を使用できる
ex) WHERE id <= 5
    WHERE family_name = "阿部"
文字列や日付の場合は""（ダブルクォーテーション")をつける。
URIとURLの違いはソーセージとウィンナーの違いと覚えろ！！

#まずはソーセージから
エンジニアの皆さま、ソーセージとウィンナーの違いはご存知でしょうか？
ちなみに私の好きなソーセージはシャウエッセンですね。
一回沸騰したお湯で３分くらい茹でてから、醤油を垂らしながら焼くと旨味がパンパンに閉じ込められてめちゃめちゃうまいです。。。
２袋で４００円くらいなんで、ちょっと高いですけどね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501638/e41f22ad-f8d8-f1ea-5bab-3450656ecacf.png)

本題にもどりますね。
ソーセージとウィンナーには明確な違いがあります。

###ウィンナー
**羊の腸に肉(豚肉や鶏肉)を詰めたもの**

###ソーセージ
**肉を腸に詰めた食べ物の総称**

つまり、ソーセージという腸詰めの食べ物の中の種類の一つにウィンナーがあります。
ウィンナーはソーセージの一種ということですねえ。
ちなみにソーセージの種類にはウィンナーの他にも何個かあってフランクフルトとかボロニアとかありますね。
<img width="802" alt="スクリーンショット 2019-11-23 21.47.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501638/fc33e45e-c9c3-5ca9-f13b-66c0a42423af.png">

#URIも一緒

**URIとURLの違いも全く同じです。**
WEBの技術本等を呼んでるとしばしばURIって出てきます。
「URLはよく使うしなんとなくわかるけど、、、URIはまた別物？」
別物ではないです。

###URL(Uniform Resource Locator)
**Web上にある、あらゆるファイルがWeb上のどの位置にあるのかを表したもの**

###URI（Uniform Resource Identifier)
**Web上にある、あらゆるファイルを認識するための識別子の総称**

つまりURLはWEBにあるサイトとかホームページとかの住所みたいなものですね。
例)https://qiita.com
一方URIはURL等を含むファイル識別子のこと全般を指します。親玉みたいなものですね。
URL=住所,URI=親玉と覚えておきましょう！！！

ではURIにはURL以外にどんな識別子があるのでしょう？
**URN**って聞いたことがありますか？
###URN（Uniform Resource Name）
**Web上にある、ファイルの名前のこと**
ここでいう名前というのはそのファイル自体の名前ではなくて、いわばシリアルナンバーみたいなものですね。
例)urn:isbn:35488317990
あまり馴染みがありませんよね。
基本的にはユーザーの目に入ることはあまりない識別子なので当然です。
「まあこんなものがあるんだなあ」程度に覚えておいてください。

<img width="799" alt="スクリーンショット 2019-11-23 22.38.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501638/aecedeb9-57ac-0ef1-3401-5eae7e3bdd9d.png">

#一つ問題
*「WEBページのアドレスはURLですか？URIですか？」*
ここまで呼んでくださった皆さまならわかりますね。

答えは**「どっちも正解」**です！！
しかし、本当は
「http:(もしくはhttps:)」はURI側のパーツで、URLには含まれない」ので、厳密にはURIと呼ぶのが適切でしょう。
(賛否両論あるらしいです、、、)
まあ技術者と話す時にはURIといったほうが無難そうですね。

#ソーセージ食べたくなってきた。
結論、
**URI=ソーセージ**
**URL=ウィンナー**
と覚えましょう！！！！

明日の朝はシャウエッセンで決まりだなあ:hotdog::hotdog:
Centos8　VMplayer　NATで決まったIPアドレスを付与する

あくまで自分の環境下での話なので、他で使えるかは検証していません。ご了承ください。
ちょっとCentosにzabbix serverを設定したいので記録です

#◆環境
　・ホスト側
　　　windows 10 pro（1903 build 18362.418）
　　　VMware Workstation 15 Player　（15.5.1 build-15018445）

　・クライアント側
　　　CentOS Linux release 8.0.1905 (Core)
　　　サーバ（GUI）だけでインストールを実施

#◆やったこと
#### 1.クライアント側でネットワークアダプタのMACアドレスを確認する
1-1.ネットワークにつながっていることを確認する
　　繋がっていないなら繋いでおくGUIでやれるから説明しない

1-2.端末を開き、root権限に切り替えする
　su -

1-3.接続しているネットワークアダプタ名を確認する
　　「TYPE」が「ethernet」になっている行の「NAME」が該当する
　　nmcli connection show

```diff:例）
NAME    UUID                                  TYPE      DEVICE 
ens33   7a9f0c4a-0a17-43b8-94e3-ffb97363432X  ethernet  ens33  
virbr0  af72ba70-45d5-4466-a407-21df51fa7c2dX bridge    virbr0 
```

1-4.クライアントOSのMACアドレスを確認
　　先ほど調べたネットワークアダプタ名の項目があるのでそこを参照する
　　アダプタが1つならUPとRUNNINGが書かれているはず
　ifconfig -a

```diff:例）
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet "DHCPで取得したアドレス"  netmask 255.255.255.0  broadcast 192.168.XXX.255
        inet6 fe80::9648:c8cb:d5f7:1302  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:d4:78:c7  txqueuelen 1000  (Ethernet)
        RX packets 3414  bytes 3502500 (3.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1731  bytes 217103 (212.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```
　　ここまでで1つのアダプタに関する情報になり「ether 00:0c:29:d4:78:c7」がens33のMACアドレスになる
　　DHCPアドレスはホスト側のアダプタによって可変であるのが、ここ見ておけば設定するには十分？

####2.ホスト側の設定ファイル編集
2-1.VMplayerのインストールパスを変えていなければ以下に保存されている「vmnetdhcp.conf」を編集する
　　C:\ProgramData\VMware
　　「# Virtual ethernet segment 8」から「# End」の間、「｝」で記述が終わっている行の下から改行して追記する

```diff:例）
host XXXX{　　　　　　　　　　　　　　　　　　←なんでもよさげ
    hardware ethernet 00:0c:29:d4:78:c7;　　←さっき調べたMACアドレス
    fixed-address 192.168.109.XXX;　←付与したいIPアドレス。3オクテット目はDHCPアドレスと同じにしておく
    option domain-name-servers 192.168.109.2; ←4オクテット目が2がDNSになる
    option domain-name "";　　　　　←今回はこの設定で行きます
    option routers 192.168.109.2;　←4オクテット目が2がデフォルトゲートウェイになる
}
```
　※DNSとデフォゲはもっと良い指定方法があるかもしれないが、「0.0.0.0」だとダメだったし、これで。
　　会社だとわからないけど、家の環境ならこれで行けると思われる。

　　・クライアントOS・ホストOSともに電源オフ/オンする

#◆意図したIPアドレスが割り当てられているか確認する
　端末からifconfig -aを実行して、適当にブラウザでネットが見れるならOK

以下サイトを参考にしました
https://qiita.com/krororo@github/items/c5881016da4b17dd283c
https://kitigai.hatenablog.com/entry/2018/06/28/233000
https://teratail.com/questions/3446
https://www.excellence-blog.com/2018/09/17/vmware%E3%81%A7%E5%9B%BA%E5%AE%9Aip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/
今までの復習

データを定義する DDL
CREATE　データベースの作成
ALTER 　データベース、テーブルの作成
DROP   データベース、テーブルの削除

データを操作する  DML
INSERT データの登録
UPDATE　データの更新
DELETE　データの削除
SELECT データの検索

ターミナルからデータベースを操作する
mysql -u root
(mysqlにユーザー名がrootで接続する)
sequel proの’ユーザー名 :root'がコマンドの -u rootに対応していることになる。

SHOW DATABASES;　(コロンはつけなきゃいけない)
データベースを一覧で表示するSQL文

ターミナルからデータベースを作成
rake db:create

CREATE DATABASE データベース名;
これでデータベースを作成することができる。

mysql> CREATE DATABESE データベース名
query ok ~~
mysql>
この表示が出ていれば成功となる。

USE文

USE データベース名；
データベースを選択する

mysql> USE データベース名；
Database  changed
mysql >
この表示が出ていれば成功となる

SHOW TABLES;
テーブル一覧
mysql> show tables;
Empty set  ~~
mysql> 
この表示が出て入れば成功となる
empty setというのはテーブルがない状態になる。

CREATE TABLE文
データベースの作成の時と同様に、テーブルを作成する場合はCREATE命令を使用する。
CREATE TABLE文はテーブルを作成するためのSQL文

CREATE TABLE　テーブル名 (カラム名　カラム名の型, );
テーブルの作成とカラムの作成ができる

railsでテーブルを作る場合はrails g model　モデル名
でテーブルに紐づくモデルを作成し、その時に作られたマイグレーションファイルをrake db:migrateで実行するという手順。

rake db:migrateが実行される裏側では、 CREATE TABLEが動いていることになる。
CREATE TABLEで使用するカラムの方は決まっているものを配置する必要がある

VARCHAR(文字数) 　最大文字数文字の文字列

テーブル構造の確認
SHOW columns FROM テーブル名;

作成したテーブルにカラムを追加する

ALTER TABLE文
ALTER TABLE テーブル名　　操作


カラムを一つだけ追加する場合
ALTER TABLE テーブル名　ADD カラム名 カラムの型;

カラムを複数追加する場合
ALTER TABLE テーブル名　ADD (カラム名　カラムの型, カラム名　カラムの型、　　....)

カラムの修正
ALTER TABLE テーブル名　CHANGE 古いカラム名　新しいカラム名　新しいカラムの型;
(カラムの型は必ず追加する必要がある)

ex) ALTER TABLE goods CHANGE zaiko stock  int;

カラムの削除
ALTER table テーブル名　DROP　　カラム名；

テーブルに保存するデータの操作
mysqlに接続
    mysql  -u  root
データベースを選択
USE  データベース名；

INSERT文（データを登録（データベース）
テーブルを登録するためのSQL文、INSERT文は全てのカラムに値を入れるか否かで以下のように変化する

全てのカラムに値を入れる場合
INSERT INTO テーブル名 VALUES (値1, 値2, 値3);

特定のカラムのみに値を入れる場合
INSERT INTO テーブル名 (カラム名、カラム名） VALUES (値1, 値2);

ex)  INSERT INTO goods VALUES(1, "ペン", 120);

デフォルト値
レコードを生成するときにカラムを入れるものを特定しなかった場合、そのカラムに入る値のこと。

デフォルト値を設定していないカラムのデフォルト値はNULLとなる。

データを更新する
UPDATE文　　テーブル名、変更内容、条件を指定

UPDATE テーブル名　SET 変更内容 WHERE 条件;

UPDATE goods SET price = 100 WHERE id = 2;
条件　　idが2のレコードのpriceが100となるように更新する

SELECT * FROM テーブル名
指定したテーブルの内容を全て表示

データを削除
DELETE文　　　テーブルにあるデータを削除
DELETE FROM テーブル名　WHERE　条件;

ex) DELETE FROM goods WHERE id = 2
RSpecに画像ファイルアップロードのテストを通す

#FactoryBotとCarrierWaveを使ってRSpecに画像ファイルアップロードのテストを通す
備忘録

FactoryBotとCarrierWaveを使ってRSpecに画像ファイルアップロードのテストを通す方法

##環境
ruby 2.6.3
rails 5.2.3
carrierwave
FactoryBot-rails 


1.spec内にfixturesディレクトリを作成

2.model内のimageuplorderの記述があるか確認

3.FactoryBot内でpictureアップローダを呼び出す

```factories/feed.rb
FactoryBot.define do
  factory :feed do
    title { 'タイトル' }
    content { '投稿内容'}
    picture { Rack::Test::UploadedFile.new(File.join(Rails.root, 'spec/fixtures/rspec_test.png')) }
    user
  end
end
```



###参考にしたサイト

[RSpecに画像ファイルアップロードのテストを通す](https://qiita.com/Katya/items/803c6ac67cca73e9087e)
Jetson NanoとWebカメラで簡単顔認識トライ

#はじめに
Jetson NanoでWebカメラを使用してリアルタイム顔認識を試しました。

- Jetson Nano
- Python3.6.8
- OpenCV3.3.1 (4.1.0を入れたつもりだったが...)
- Webカメラ[(ロジクールのやつ)](https://www.amazon.co.jp/ロジクール-ウェブカメラ-C270n-ストリーミング-2年間メーカー保証/dp/B07QMKND9M/ref=zg_bs_2152019051_1?_encoding=UTF8&psc=1&refRID=T5TFAX38Y1CTQZ0BBXZM)

#参考にしたページ
- [OpenCVのインストール方法](https://qiita.com/daisuzu_/items/f17d365a895a599f832f)
- [OpenCVの顔認識についてのわかりやすい解説](https://qiita.com/FukuharaYohei/items/ec6dce7cc5ea21a51a82) 
- [OpenCVで動画を取得する方法](https://weblabo.oscasierra.net/python/opencv-videocapture-camera.html)

#画像取得トライ
まずはWebカメラでどうすれば画像を取得できるのかを確認します。
めっちゃ簡単でした。

```python:camTest.py

import cv2

# カメラを起動
capture = cv2.VideoCapture(0)

while(True):
    # 1フレームの画像を取得
    ret, frame = capture.read()
    # 画像をウィンドウに表示
    cv2.imshow("frame", frame)
    # qを押されたら停止
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
# 解放
capture.release()
cv2.destroyAllWindows()
```
`q`を押せば止まるのですが、ターミナルではなくウィンドウにフォーカスがある状態で押さないと正常に機能しません。


#顔認識
OpenCVをインストールした時にカスケード分類器のファイルが一緒に入っているのでそれを使います。
(https://github.com/opencv/opencv/tree/master/data/haarcascades)

顔認識の手順は以下のようです
1. 画像を取得
2. グレースケールに変換
3. 顔認識処理
4. 認識位置に枠を書く

```python:find_face.py

# -*- coding: utf-8 -*-

import time
import cv2

# フレームサイズ（大きいと処理が重たくなります）
FRAME_W = 320
FRAME_H = 240

# 顔検出用のカスケード分類器（特徴量をまとめたファイルらしい）
# 他のフォルダにあったものを読み込もうとしたらエラーになったので同じフォルダにコピーした
cascadeFilePath = './haarcascade_frontalface_default.xml'
cascade = cv2.CascadeClassifier(cascadeFilePath)

# カメラ設定
cam = cv2.VideoCapture(0)
time.sleep(1)                 # 起動待ち（とりあえず）
cam.set(cv2.CAP_PROP_FPS, 60) # 60もでたか不明
cam.set(cv2.CAP_PROP_FRAME_WIDTH, FRAME_W)
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, FRAME_H)

while(True):
    # qで終了
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

    # 画像取得
    ret, frame = cam.read()
    # グレースケールに変換
    gray_image = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
    # 顔認識
    facerect = cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))

    # 顔が検出されたか
    if len(facerect) > 0:
        # 枠線用の色
        line_color = (255, 102, 51)
        # テキストの色
        font_color = (255, 102, 51)

        # 検出した顔に枠とFACEの文字を書く
        for (x, y, width, height) in facerect:
            cv2.rectangle(frame, (x, y), (x + width, y + height), line_color, 2)
            cv2.putText(frame, 'FACE', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.7, font_color, 1, cv2.LINE_AA)

    # ウィンドウに表示
    cv2.imshow('frame', frame)
    

# 終了処理
cam.release()
cv2.destroyAllWindows()

```

リアルタイムに認識されました！
![64995AAA-1ABA-4969-960B-2DD91F03FB4A.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84072/3031ad0e-8080-af1a-f4af-37d79b374b95.jpeg)
Anycubic i3 で印刷前にノズルワイプをする


以前使っていたDavinci 1.0Aは印刷前にノズルワイプをしてくれて、第一層目の印刷のはじまりがとても安定していたのですが、Anycubic i3 + Curaだと初期設定ではノズルワイプをしないので追加しました。
<img width=80% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93722/7277f6dd-df63-ee1d-64b8-fbf049dc6aa9.jpeg"/>
↑ノズルワイプをするとノズルについているゴミを取り除いたり、ノズルの先端までフィラメントが来ていない状態で印刷が始まるのを防いでくれる。


ここを参考に
https://www.thingiverse.com/groups/anycubic-i3-mega/forums/general/topic:37439


```
G21 ;metric values
G90 ;absolute positioning
M82 ;set extruder to absolute mode
M107 ;start with the fan off
G28 ; Home the axis I hope
G1 F1800 Z10
G91; Relative Position
G1 F200 E3 ; Extrude
G90; Absolute Position
G1 F1800 Z0.2 X1 Y1; move to the left right corner
G92 E0
G1 F50 E0.5 ; extrude some filament
G1 F600 Y140 E25 ; print line
G1 F6000 Z0.5 X5 ; move and retract some filament
G92 E0 ; set extrusion point
G1 F3600
```
(11/24 13:37変更、いろいろ追加)


最後のリトラクトがもともと`G1 F600 Y140 E10 ; print line` `G1 F6000 X5 4.5;`となっており 10mm-4.5mm = 5.5mmでした。
このリトラクトで戻った状態から印刷が始まるので、最初のパスがこのリトラクト分でてきません。
~~`G1 F6000 X5 E9.8;`としてリトラクトを0.2mmと、なるべく最小となるようにしました。~~ →(11/24 13:37 いろいろ変更しました)

本当はこのリトラクト分、フィラメントを印刷がはじまる直前(ノズルが印刷位置に移動後)にエクストルーダを進められれば良いのですが、方法がわかりませんでした。

## CuraでのStart G-Code変更方法
(Cura 4.4.0で確認)

1.Curaを起動

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93722/7a5ad7e8-6b47-002d-f347-e73ec53939f6.png"/ width=30%>
2.プリンタをクリック → "Manage printers"

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93722/0eb1f22a-dc7e-dd2c-a593-889aeaed3f07.png"/ width=50%>
3. "Machine Settings"をクリック

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93722/562e0e3d-6417-9ee7-1fa7-f091d27089d3.png" / width=30%>
4."Start G-Code" に↑のgcodeをコピペ



### Cura + Anycubic i3 デフォルトStart G-Code
ちなみにCuraのAnycubic i3のデフォルトのStart GCodeはこれ
元に戻す時用。

```
G21 ;metric values
G90 ;absolute positioning
M82 ;set extruder to absolute mode
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F{speed_travel} ;move the platform down 15mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 F{speed_travel}
G0 Y20 F{speed_travel}
M117 Printing...
G5
```


### G-Code Reference
gcodeはここを見て理解
https://reprap.org/wiki/G-code/ja

## Simplify 3D標準のQuick Wipeを置き換えする場合
```
G28 ; home all axes
G1 Z5 F3000 ; lift
M107 ; fan off
G5 ; enable resume from power failure
G1 X10 Y5 F1500 ; move to prime
G1 Z0.2 F3000 ; get ready to prime
G92 E0 ; reset extrusion distance
G1 F50 E0.5 ; extrude some filament
G1 F600 Y140 E25 ; print line
G1 F6000 Z0.5 X5 ; move and retract some filament
G92 E0 ; set extrusion point
G1 F3600
```
[Flutter] 背景色によって前景色を良い感じに変えたい

動的に背景色を変えていて、たとえば薄い黄色の背景なら黒っぽい前景、赤い背景なら白っぽい前景にしたい、という場合に。

```dart
  bool shouldUseWhiteForeGround(Color color) {
    return color.computeLuminance() < 0.4;
  }
```

`Luminance` というのは輝度の事です。これを使って判定すると良さげです。計算式はお好みで調整してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25416/200dce1a-638a-2e57-0d1b-4d6f9cbb98e7.png)
androidxライブラリの移行で困ったことと対処法

# 問題

AndroidでMQTTを使う場合に重宝するPahoだが、pahoライブラリ使用側をandroidxに移行してもpaho自体はandroidxライブラリを取り込んでいないようでExceptionが吐かれてしまった。
環境は、pahoのandroid.serviceの1.1.1を使っている状態。

~~~
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
~~~

吐かれたException。

~~~
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/content/LocalBroadcastManager;
at org.eclipse.paho.android.service.MqttAndroidClient.registerReceiver(MqttAndroidClient.java:450)
~~~

# 対処法
今回のケースではLocalBroadcastManagerが古いsupport.v4を参照しているため、以下を追加。

~~~gradle.properties
android.enableJetifier=true
android.useAndroidX=true
~~~

~~~app/build.gradle
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
~~~

もっと汎用的な解決法は、これを追加するでも良いかもしれない（未確認）

~~~
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
~~~

参考
https://github.com/eclipse/paho.mqtt.android/issues/321
【初心者】ターミナルとお友達になってみる

# ターミナルと仲良くしたい
プログラム初心者がターミナルと仲良くなるために、
ご挨拶（命令）をまとめてみました。


## ターミナルでの基本命令


##pwd
```
$ pwd
```
print working directoryの略。
現在のディレクトリの表示を行う為の命令

###cd
```
$ cd
```
change directtryの略。
ディレクトリ間を移動したい時に使う命令。

###ls
```
$ ls
```
list の略。
現在のディレクトリにいるファイルを一覧で表示してくれる。

###exit
```
$ exit
```
サーバーとの接続を切断するときに使う。
パソコンの電源をポチっと落としてシャットダウンするイメージです。

###clear
```
$ clear
```
ターミナルに表示されているテキストを綺麗さっぱりリセットをかける。
スッと消えると気持ちが良いです。

###irb
```
$ irb
```
Interactive Ruby の略。
Rubyを使用する場合に使い、
主にRubyのコードの動作を確認する為に利用を行う。

###rails g controller posts
```
$ rails g controller posts
```
Railsのコントローラーを新たに設置する命令。
これを行う事でmodelとviewの処理を繋ぐ事ができる。

###rails g model post
```
$ rails g model post
```
Railsのモデルを新たに設置する命令。
これを行う事でデータベースへのアクセスへを処理を
行う箇所を設置する。

### rails db:migrate
```
$ rails db:migrate
```
Railsでマイグレーションファイルを生成する命令

###rails db:rollback
```
$ rails db:rollback
```
Railsでマイグレーションファイルをロールバックさせる命令

###rails db:migrate:status
```
$ rails db:migrate:status
```
マイグレーションファイルがデータベースに反映されているかチェックする命令

<img width="357" alt="2791EF70-5894-4051-8257-8A9D1BF25766.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536014/9146d2ad-57d9-478f-8ece-6c230654aad2.png">
ターミナル内で

- UP…適用されている
- DOWN…適応がされていない状態の為、そのまま修正や削除が可能。


## 覚えておくとちょっと幸せになる豆知識

###自動補完（頭文字を売ってtabキー
これは結構便利だなと思ったんですが、
例えば「test」というファイルを指定したい場合、
「t」まで打ってtabキーを押すと残りの文字を自動補完してくれます。（ターミナル頭良い！！）
ただし同じディレクトリ内に「test」「template」みたいに同じ頭文字が並んだ場「te」で
表示が止まってしまいます。
これは「同じ頭文字2つあるけどどっちやねん」ってターミナルが聞いてくれているので、
「tes」か「tem」まで打てば各々を表示してくれます。
短いファイル名だとあまり恩恵は少ないですが、長いファイル名の正確な綴りって
うろ覚えの場合が多いので助かっております。
Spring Boot基礎(依存性注入について)

#これは何？
Spring Bootを利用する上で、DIをする必要があるなどという単語が行き交いますが、正確にDIを理解することができていないためこれをまとめる。

#そもそもDIとは何ですか？
DIとは依存性の注入(Dependency Injection)を指す。
これだけだとよくわかんないので詳しく記す。

##依存性とは？
依存性とは、Javaにおける依存性を指しているわけだが、その依存性とはなんなんだろう？
より具体的に表すと以下の2つのどちらかに該当する場合に、依存しているということが言える。

- 他のクラスをローカル変数として持っている
- 他のクラスがメソッドの引数、戻り値になっている

バイクを例に解説する。

```java
// バイククラス
public class MotorBike {
  private KawasakiEngine; //kawasakiのエンジン

  // constructor
  public class MotorBike(KawasakiEngin kawasakiEngine){
    this.kawasakiEngine = kawasakiEngine;
  }
}
```

このバイククラスはKawasakiのエンジンを使う。このバイクを作る(インスタンス化)する場合のコードは以下のようになる。

```java
public class Main {
  public static void main(String[] args){
    // パーツの生成
    KawasakiEngine kawasakiEngine = new KawasakiEngine();
    // バイクの生成
    MotorBike motorBike = new MotorBike(kawasakiEngine);
  }
}
```

このようなケースで、バイククラスがKawasakiのエンジンクラスに依存していると言えます。
そして、依存には度合いがあります。
依存度についてはまた別の機会でまとめる。

##注入とは？
1つ1つ生成(new)したインスタンスを、各変数に入れることを注入という。

##依存性の注入(DI)とは？
DIは、上記2つを同時に、かつ簡単に行ってくれることをいう。

###DIの中の処理について

1. DIの管理対象クラスを探す
Springを起動すると、コンポーネントスキャンという処理が走る。これは、DIで管理する対象のアノテーションが付けられているクラスを探す。コンポーネントスキャン対象のアノテーションは以下。これらアノテーションがついているクラスをBeanという。
@Component, @Controller, @Service, @Repository, @Configuration, @RestController, @ControllAdvice, @ManagedBean, @Named

2. インスタンスの生成と注入
DIコンテナに登録されたBeanのインスタンス生成と注入を行っている。DI対象のクラス(Bean)を集めた後は、それらのインスタンスをDIが生成(new)する。そして、生成したインスタンスを@Autowiredアノテーションがついているフィールドなどに注入する。

###DIの実装方法
DIの実装方法には、以下の5つがある。

1. アノテーションベース
小規模なアプリケーションを作る場合には、アノテーションベースで十分。

2. JavaConfig
こちらを使うことでより細かい設定をすることができるようになる。
そのため大規模開発になるとNo.4のようにアノテーションベース+JavaConfigを合わせた実装を行うことがある。

3. xml
4. JavaConfig + アノテーション
5. xml + アノテーション

どのように実装するかについては今後記載していく。
Unity玉転がしチュートリアル 3-4.ゲームのビルド(終)

# この記事の対象者
* Unity入門したい人
* 最初の一歩が踏み出せない人

# OSとか環境とか

* Windows 10 Pro
* macOS Mojave
* Unity 2019.2.8f1
* Rider 2019.2.2

# 補足
* 公式動画にて利用しているのはMacなので、Windowsユーザーはある程度脳内変換して見る事
* 筆者はWindows、Macの両方の環境で確認。Ubuntuとかでは検証してない。
* 基本Unityは英語メニューで利用
* 間違いがあったらツッコミ大歓迎

# 公式

https://learn.unity.com/tutorial/obuziekutonoshou-ji-sukoanoji-lu-gemunobirudo#5caf1abeedbc2a001fb5b5d0

# ゲームのビルド
**そんなに書くことが無い**

Build Setttingsウィンドウから行う

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324639/41938ed1-8e3f-6040-1649-853b069e0e15.png)


ビルドターゲットは現在はPCなので、PCのままでOK
AndroidとかiOS等に出力したい場合は今回は割愛

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324639/4567c195-b232-4ddd-e20c-3910f2c1804b.png)



ビルドするゲームに必要なScenesを取り込みます。
Add Open Scenesから追加しても良いし、直接Projectタブからドラッグして追加しても良い

とりあえず変更せずにBuildボタンを押下

フォルダを選択するとビルドがはじまるので終わるまで待機

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324639/9cb73fc7-625b-2314-d563-e7409c693e95.png)

ビルドが終わるとプレイに必要なファイル群がフォルダに生成される
生成された「アプリ名.exe」を実行するとゲームが動くはずです！

# 最後に

という感じでUnity超基本デビューは幕を閉じるのであった。
折角ある程度触ったし、次は自分でAssetStoreとか漁って小さくてもいいから形にしようと思う今日この頃でした。
~~オラタンか格ゲーが作りたいね！~~

なおここまでのソースは下記にアップしておりますのでご自由にどうぞ。

https://github.com/win-chanma/roll-ball-tutorial
Red Hat Forum Tokyo 2019


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280358/6010b175-5ba5-b17f-1f13-40c7be1928e9.png)

初めてRedHatを操作した時はインストールCDーROMに1枚か2枚程に納まっていて、物理サーバにインストールしてからログインすることができました（インストールは今は稀な作業ですね）。あれから約20年・・・初めてRedHatさんの大きな[イベント](https://redhat-forum.jp/index.html)に参加させていただきました:grinning:

今でもワクワクする新しいテクノロジーを理解し、実務でアウトプットし、誰かの役に立つことはエンジニアにとっての醍醐味です。備忘録として今回のイベントで聴講したセッションを整理しておきます。なお、多くのセッションはイベントサイトのマイページにて資料を閲覧することが可能です。（事前登録制）

###Red Hat Enterprise Linux 8の嬉しいところ
バージョン6と7の違い（systemdなど）が大きいせいでしょうか？8の目玉はコレ！といったものがない様に感じました。
・マイナーバージョンのリリースが半年に一度
・OS部分とSW部分（Application Stream）のサポートライフサイクルに違いがある
・RHEL8を試すなら[ラボ](https://lab.redhat.com/)を使うと便利です（EC2もVirtualBoxも不要）
・RHEL8に関する詳細は[赤帽ブログ](https://rheb.hatenablog.com/entry/rhel8ga)が参考になります

###Openshiftによるデジタル・トランスフォーメーション
海外のユーザ企業の事例は伝統的な会社と違い、聴いてて面白いなと思います。
・マッコーリ銀行（豪州）、支店はない
・顧客体験：位置情報を使ったお金の資料履歴
・開発者体験：デリバリスピード、[フリクションレス](https://www.hakuhodody-media.co.jp/column_topics/event/seminar_forum/20181212_23862.html)、コンテナ
・開発環境でIstioによりバグを注入（インジェクション）しテスト
・セルフサービス化

###アクサ生命保険のDevOpsへの道のり
ユーザ系企業に参考になりそうなエピソードを沢山お話しされてました。
・AgileとDevOpsの違い
・スクラムマスター
・プロダクトオーナー、プロダクトマネージャー
・Management3.0
・Confluence（ナレッジ共有）
・チーム内で勉強会、ハッカソン、アイデアソンを実施
・多国籍チーム

###Kubernetes Operator" 耳にされたことがある方は大正解
興味あるテックですが、業務で使うのはこれからです。
・概念が書いてあります→[Introducing Operators: Putting Operational Knowledge into Software](https://coreos.com/blog/introducing-operators.html)
・運用の知見（定型作業）をコード化し自動化したものとのこと
・operatorhub.io

実際に得た体験や知見について、情熱を持って教えてくれた登壇者の方々に感謝です（自分や会社のためにどんどんアウトプットしていて、エネルギーみたいものを感じます）:grinning:
そして、日常業務に役てることでユーザが幸せになるように、毎日毎日、精進です:city_sunset::night_with_stars:
VisualStudioCodeのタスク設定を書かずに、タスク機能を使う

知ってるようで知らないタスク機能を解説します。

Visual Studio Codeには、コマンドランチャーであるタスク機能が付属しています。
タスクの種類には2種類あります。

- 環境から検出し、自動で作成されるタスク
- .vscode/tasks.json に記述し、コマンドなどすべての情報を記述するタスク

この自動で検出するタスクについて、解説します。。

実際にコマンド『Tasks: Run Task』を実行すると、『configured tasks』と『detected tasks』に分かれていることがわかります。

![Screenshot from 2019-11-24 11-11-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3413/b1ea902a-622a-c071-2f25-1476ec57aaa7.png)

『configured tasks』は.vscode/tasks.jsonで設定したタスクになり、『detected tasks』は拡張機能のタスクプロバイダーがプロジェクトディレクトリから検出したタスクになります。
各タスクの前に書かれている「npm」「tsc」が検出したタスクプロバイダーの名前になります。

このように、プロジェクトで既にGradleやGulpなど既存のタスクランナーを使用している場合、そのタスクランナーを自動で検出してくれる場合があります。
すでにGraleやGulpなど既存のタスクランナーを使っている場合、拡張機能のマーケットプレイスでタスクランナーの名前で検索すると、サポートする拡張機能が見つかります
。

ただし、自動検出したタスクでは以下の制約があります。

- タスクの一部の設定を変更したい場合、通常のタスクとして.vscode/tasks.jsonに記述する必要がある。
- デバッグの設定である.vscode/launch.jsonのpreLaunchTaskの設定を使って、デバッグの前の実行するタスクとして設定することはできない。
- タスクの依存関係を設定できない。

デバッグの前に実行するタスクを設定したり、タスクの依存関係を設計する場合には、.vscode/tasks.jsonにタスクとして記述する必要があります。

このように、既存のタスクランナーを用いている場合には、VSCodeのタスクを作成せずにVSCodeからシームレスに実行できるため、この機能の利用はおすすめです。
KDE環境でPlasmaをアップデートする方法

みなさんお久しぶりです。
ここ最近Windows10をやめてKubuntuを使い始めたところ、UIの美しさやスピード感でハマってしまいました。
ハマっていく過程でいろいろと得たものもあったのでそのうちの一つとして、Plasma Desktopのアップデート方法をここに書いていきたいと思います。

#今回使用する環境
- Ubuntu18.10
- KDE Frameworks Version 5.62.0
- Linux Kernel 5.3.0

#Backports PPAを追加
BackPortsとは、あるパッケージの新バージョンをリリース向けに再コンパイルされたパッケージのことです。(debian.orgより引用)
そしてPPAとはPersonal Package Archiveの略で、個人や組織がそれぞれ提供しているアプリストアのようなものです。

下記のコマンドをお使いのコンソールから入力するとBackports PPAを追加できます。
`sudo add-apt-repository ppa:kubuntu-ppa/backports`

この際にSuperUser権限(WindowsでいうAdministrator権限)が必要です。
つまりコンピュータの管理者のパスワードが必要ということです。

PPAを追加したあとはしっかりアップデートかけましょう。そうしないとこの先に進めません。
`sudo apt update`

#Plasma Desktopをアップデート
`sudo apt full-upgrade`
このコマンドを入力して完了まで待ちましょう。
完了して(KubuntuなどのFull KDE環境の場合)KInfocenterから確認してみましょう。
KDE Plasma Versionが最新になっていたら成功です。

#最後に
最近はあまり聞かなくなってきましたが、KDEは重いからクソという意見がありますが、Windows7世代のコンピュータでよっぽど少ないRAM容量とかじゃないなら快適だと思うんですがねぇ。
UIもきれいだし情報量もかなり豊富だし。
わざわざクリーンインストールしなくてもUbuntuなどにKDE入れればいいのでぜひ一度。
それのやり方も書こうかな。
あと下に参考にしたWebサイトを貼ります。感謝感謝...

[KDE Plasma 5.17 Released! How to Install it in (K)Ubuntu 19.10](http://ubuntuhandbook.org/index.php/2019/10/kde-plasma-5-17-released-install-ubuntu-19-10/)
[UbuntuのPPAて何？] (https://allabout.co.jp/gm/gc/438675/)
[Ubuntu Weekly Recipe 第46回　PPAの活用] (https://gihyo.jp/admin/serial/01/ubuntu-recipe/0046)