OmniAICreator/Qiita-1.07M huggingface dataset:
Terraformのworkspaceを間違えないために

こんにちは。
Terraformで日々インフラの構築とか変更とか行なっています。Terraformにはworkspaceという機能がありますが、一つのコードで複数の環境に適用できるため便利ですよね。私も普段workspaceを使っていますが、まれに複数登録されているプロジェクトを目の当たりにして、「今どのworkspaceを選択しているか」というのを忘れてコマンドを打って調べています。意外と勿体無いこの時間、これを解消したいので常にプロンプトにworkspace出てきたらいいなと思って調べて作成しました。

## やっている人がいないか調べる
自分で完結させたい思いもありつつ、とりあえずは同じ思いを抱いている人を探しにGoogleで検索しました。
出てきました。
https://github.com/amatellanes/terraform-workspace-prompt
こちらに基本的に導入方法は書いてありますが、シェルスクリプトを落として、`.bashrc`に書いてあげれば大丈夫です。
実際にやり方を見てみましょう。

### スクリプトを落としてくる
以下のコマンドを実行します。

```bash
$ wget -O ~/.terraform-workspace-prompt.sh https://raw.githubusercontent.com/amatellanes/terraform-workspace-prompt/master/terraform-workspace-prompt.sh
```

ホームディレクトリにファイルがいることを確認しましょう。

### `~/.bashrc`に以下を記載

promptの表示をどうするかは皆さんの好みですが、私は現在以下の設定にしています。`$(terraform_prompt)`をどこかで埋め込めていれば表示できるはずです。

```bash
source $HOME/.terraform-workspace-prompt.sh
export PS1='\h \W \[\e[32m\]$(terraform_prompt "(%s)")\[\e[0m\] ▸ '
```

上記を追記したら、あとは

```bash
$ source ~/.bashrc
```

を実行すれば反映されます。

### 完成
これで間違ったworkspaceにapplyなんて悲しいことを起こさなくてすみますね。
オペミスは大障害からヒヤリハットまでたくさんありますが、そういった芽を摘んでいく仕組みづくりも大事だなと最近つくづく思います。

## 参考
https://qiita.com/hmmrjn/items/60d2a64c9e5bf7c0fe60
https://github.com/amatellanes/terraform-workspace-prompt
Conoha VPS Network down problem.

On Conoha VPS Network will be down because of some cause.

```text
$ ip addr                                                                         
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00                                      
    inet 127.0.0.1/8 scope host lo                                                             
       valid_lft forever preferred_lft forever                                                 
    inet6 ::1/128 scope host                                                                   
       valid_lft forever preferred_lft forever                                                 
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 
1000                                                                                           
    link/ether 02:01:85:82:7c:55 brd ff:ff:ff:ff:ff:ff                                         
    inet6 fe80::1:85ff:fe82:7c55/64 scope link                                                 
       valid_lft forever preferred_lft forever
```

Afeter reboot, the network is up.

```text
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 02:01:85:82:7c:55 brd ff:ff:ff:ff:ff:ff
    inet 143.140.121.99/23 brd 133.130.125.255 scope global dynamic ens3
       valid_lft 85709sec preferred_lft 85709sec
    inet6 fe80::1:84ff:fe81:7c44/64 scope link 
       valid_lft forever preferred_lft forever
```

OS is Ubuntu 19.10.

```text
$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.10"
VERSION_ID="19.10"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=eoan
UBUNTU_CODENAME=eoan
```

次のコマンドでも修復ができます。


```bash
sudo ifup ens3
```

再発の記録
>2020年9月25日に同じ問題が発生。
>2020年9月23日に同じ問題が発生。
>2020年9月10日に同じ問題が発生。
>2020年9月4日に同じ問題が発生。
>2020年9月2日に同じ問題が発生。
>2020年7月23日に同じ問題が発生。
>2020年7月3日に同じ問題が発生。
>2020年6月27日に同じ問題が発生。
>2020年6月20日に同じ問題が発生。
>2020年6月13日に同じ問題が発生。
>2020年6月2日に同じ問題が発生。
>2020年5月29日に同じ問題が発生。
>2020年5月21日に同じ問題が発生。
>2020年5月3日に同じ問題が発生。
>2020年4月8日に同じ問題が発生。
>2020年4月2日に同じ問題が発生。
Callback関数ってなんぞや

結論から言うとコールバック関数というのは
>コールバック関数とは、コンピュータプログラム中で、ある関数などを呼び出す際に引数などとして引き渡される別の関数。
[コールバック関数とは](http://e-words.jp/w/%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%E9%96%A2%E6%95%B0.html)

もっと端的にいうならば、引数として使われる関数ですね。
いや、わかるかい。なんやそれ。どうやって使うんや。笑

具体例を見ていきましょう。

# サンプルコード


```python
def callback_add(a, b):
    print('{} + {} = {}'.format(a, b, a + b))

def callback_times(a, b):
    print('{} × {} = {}'.format(a, b, a * b))

def handler(a, b, callback):
    callback(a, b)

if __name__=='__main__':
    handler(3, 5, callback_add)
    handler(3, 5, callback_times)
```


```
3 + 5 = 8
3 × 5 = 15
```

ここで、*callback_add, callback_times*がコールバック関数です。
ちなみに、コールバック関数を呼び出す関数はhandlerと記述されることが多いらしいです。
コールバック関数のメリットは、関数の呼び出し側で**あらかじめ決めた処理を渡せる**ことらしいです。

はぁ・・・・。
・・・**いまいち使い道が分かりづらい**。
いつ使うねん！！！！！！！ってツッコミたくなりますね。笑
ということでもう一歩踏み込んでみましょう。

# Callback関数を使わなかった場合の例

```python
def f1():
    name = 'Mike'
    say_hello(name)

def say_hello(name):
    print(name, 'さん,こんにちは！')

def say_bye(name):
    print(name, 'さん,さようなら！')

def f2():
    name = 'Mike'
    say_bye(name)

if __name__=='__main__':
    f1()
    f2()
```

```
Mike さん,こんにちは！
Mike さん,さようなら！
```

もしCallback関数を使わずに、f1の中にsay_helloがあるというロジックを組んだ場合、違うことをこの名前で言いたい時にまた新しいf2を作らないといけなくなります。そして増やせば増やすほど、f3,f4と増えていきます。これはとても不便です。こんな時にCallback関数を使うんですね。

```python

def f1(callback):
    name = 'Mike'
    callback(name)

def say_hello(name):
    print(name, 'さんこんにちは！')

def say_bye(name):
    print(name, 'さんさようなら！')

if __name__=='__main__':
    f1(say_hello)
    f1(say_bye)
```

上は同じ例だけど、Callback関数を使った場合です。
めちゃくちゃ綺麗ですね・・・・。
どんだけ増やしてもf1で納まり、say_〇〇の関数を増やせばいいだけです。
まだピンと来てない方は、上下のコードと睨めっこしてみてください。
そして手でなぞりながら考えたらわかると思います。

Callback関数を覚えれば、関数の幅がとても広がりますね。

# 参照文献
[コールバック関数とは](http://e-words.jp/w/%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%E9%96%A2%E6%95%B0.html)
[コールバック関数のメリット](https://teratail.com/questions/111316)
git push heroku master 後のエラー （自分用）

git push heroku master後にエラー。




```
remote: !	No such app as insta-clone-new.
fatal: repository 'https://git.heroku.com/insta-clone-new.git/' not found
```


以下、公式サイトに記載してあった通りに作業したらうまくいきました。

```
$ heroku login
```


```
$ cd 自分のプロジェクトに移動
$ git init
$ heroku git:remote -a プロジェクトの名前
$ git add .
$ git commit -am "メッセージ"
$ git push heroku master
```
競プロで使う再帰関数の活用

おいおい追加予定

## こんなとき再帰使う可能性高いよ！
1. N、N-1などの状態で同じ処理を行いたいとき
https://atcoder.jp/contests/abc115/tasks/abc115_d

2. ループのネストを可変にしたいとき
https://atcoder.jp/contests/abc114/tasks/abc114_c


## 簡単な説明
1. N、N-1などの状態で同じ処理を行いたいとき

そもそも再帰関数の定義のような部分でもある。N,N-1, ... , i , ... , 2, 1などを考えたとき、N番目でもi番目でも1番目でも同様の処理を行う。再帰関数に共通することであるが、終了条件を明確にすることが大切。

2. ループのネストを可変にしたいとき

競技プログラミングの問題を解いていくと、ループのネストを可変にしたい時がある。例えば、入力が10の時2重ループ、100の時は3重ループを作成したいと言った時だ。for文のネストを最大長で動作するようにしたのち、フラグを作ると言った解決策もないことはない。しかし、応用が効きづらくなるので再帰を覚えた方が良いであろう。


##　まとめ
再帰の基本は類似状態の探索っぽいですね
gRPC の使い方 (Go)

参考ページ
[Go Quick Start](https://grpc.io/docs/quickstart/go/)

設定ファイル、サーバープログラム、クライアントプログラムの３つが必要です。

```text
.
├── greeter_client
│   └── main.go
├── greeter_server
│   └── main.go
└── helloworld
    └── helloworld.proto
```

設定ファイル
>helloworld/helloworld.proto
こちらと同じ
[gRPC の使い方 (python)](https://qiita.com/ekzemplaro/items/207e8abdd000ff75c0a2)

サーバープログラム

```go:greeter_server/main.go

package main

import (
	"context"
	"log"
	"net"

	"google.golang.org/grpc"
	pb "../helloworld"
)

const (
	port = ":50051"
)

// server is used to implement helloworld.GreeterServer.
type server struct {
	pb.UnimplementedGreeterServer
}

// SayHello implements helloworld.GreeterServer
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
	log.Printf("SayHello Received: %v", in.GetName())
	return &pb.HelloReply{Message: "Test Hello " + in.GetName()}, nil
}

func (s *server) SayHello2(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
	log.Printf("SayHello2 Received: %v", in.GetName())
        return &pb.HelloReply{Message: "Test2 Hello again " + in.GetName()}, nil
}

func main() {
	lis, err := net.Listen("tcp", port)
	if err != nil {
		log.Fatalf("failed to listen: %v", err)
	}
	s := grpc.NewServer()
	pb.RegisterGreeterServer(s, &server{})
	if err := s.Serve(lis); err != nil {
		log.Fatalf("failed to serve: %v", err)
	}
}
```

クライアントプログラム

```go:greeter_client/main.go

package main

import (
	"context"
	"log"
	"os"
	"time"

	"google.golang.org/grpc"
	pb "../helloworld"
)

const (
	address     = "localhost:50051"
	defaultName = "Tom"
)

func main() {
	// Set up a connection to the server.
	conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
	if err != nil {
		log.Fatalf("did not connect: %v", err)
	}
	defer conn.Close()
	c := pb.NewGreeterClient(conn)

	// Contact the server and print out its response.
	name := defaultName
	if len(os.Args) > 1 {
		name = os.Args[1]
	}
	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
	defer cancel()
	name = "John"
	r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name})
	if err != nil {
		log.Fatalf("could not greet: %v", err)
	}
	log.Printf("Greeting: %s", r.GetMessage())


	name = "Tom"
	r, err = c.SayHello2(ctx, &pb.HelloRequest{Name: name})
	if err != nil {
       		log.Fatalf("could not greet: %v", err)
	}
	log.Printf("Greeting: %s", r.GetMessage())
}
```

gRPC のコードを作成します。

スクリプト

```bash
protoc -I helloworld/ helloworld/helloworld.proto --go_out=plugins=grpc:helloworld
```

実行後

```text
$ tree
.
├── greeter_client
│   └── main.go
├── greeter_server
│   └── main.go
└── helloworld
    ├── helloworld.pb.go
    └── helloworld.proto
```

サーバープログラムの起動

```bash
go run greeter_server/main.go
```

クライアントプログラムの実行

```text
$ go run greeter_client/main.go 
2020/02/07 11:21:59 Greeting: Test Hello John
2020/02/07 11:21:59 Greeting: Test2 Hello again Tom
```

サーバーのコンソールには次のようなメッセージが出ます。

```text
$ go run greeter_server/main.go 
2020/02/07 11:21:59 SayHello Received: John
2020/02/07 11:21:59 SayHello2 Received: Tom
```

Arch Linux でのコマンドのインストール方法

```bash
sudo pacman -S protobuf
```
エラー文fatal: remote origin already exists.の解決法


あるアプリをgitからクローン後、```fatal: remote origin already exists.```と表示されましたので対応を自分用に残しときます。

```
$ git add .
$ git commit -m "クローン後初めてのコミット"
$ git push -u origin master
```

```
fatal: remote origin already exists.
```

のーん。


originを消すと良いらしい。

```
$ git remote rm origin  
$ git remote add origin git@bitbucket.org:shota0701nemoto/insta-clone-new.git
$ git push -u origin master   
```


なぐり書きです。
日本職場でよく使われる表現

先日、同僚が日本人とコミュニケーションする時の表現を相談されて、
自分にも足りない部分が見つけ出しだので、一応メモして皆さんと共有しだいから、
ブログ始めました。

日本で働いてる外国人として、
初めて仕事する時、特に日本語を勉強し始めてるあなたです、
「どうやって日本人と交流すればよいのか、どうやってこのバグを伝わるのか」となどなどのことで
悩んだことがありますね。

ここで、自分が整理した伝わりやすいパターンを整理しました。
初心者ですので、誤ったところ、ご指導とご考量をお願い申し上げます。


<h2>今日（今）は…ですよね。</h2>
１、事情を話

<h2>…を見てもらっていいですか。</h2>
２、事情の元（出処）を見てもらう

<h2>…との認識でよろしいでしょうか。</h2>
３、意識を合わせる

<h2>何をしているというと（要（よう）は　）</h2>
或いは<h2>原因は…</h2>
４、原因を述べる（或いは）自分が本当の目的を言う。

この一連のパターンは大体の状況は
自分がいるIT職場で通用すると思いますが、
当てはまりがダメだったら、怒らないでね。
:sunny::relaxed::sunny:
論理設計と正規化の定義のまとめ

### デーブルとは何か

* デーブルとは共通点を持ったレコードの集合
* テーブルは英語なら複数形or複数名詞でかける

### テーブルの構成要素

##### キー
* キーとなる文字列には、コードやIDなどの表記体系の定まった固定長文字列を用いる


###### 主キー
* 一意に識別
* デーブルには重複行は存在できない
* 候補キー：主キーになる候補が複数あるときのそれぞれのキー
* スーパーキー：無関係のものを付け加えた時のキー

###### 外部キー

* 二つのテーブル間で設定
* 外部キーによってテーブルに対して制約を加える
* 参照整合制約
* 外部キーは親子関係がある
	* 削除するときは子から



##### 制約

代表的な使うことができる制約

* NOT NULL制約
* 一意制約：ある列に対して一意性を求める制約
* CHECK制約：ある列の取りうる範囲に対する制約。複数の列にまたがる制約は作れない

##### テーブルと列の命名規則

###### テーブル

* 使える文字は半角アルファベット、半角数字、`_`
* 初めの文字はアルファベット
* DBMSが設定する範囲内では同じ名前を設定することはできない（この範囲をドメインまたはスキーマという）

###### 列

* 同じテーブルに同じ名前の列はつけられない

### 第１正規化形

定義：一つのセルには一つの値しか含まない

### 第２正規形

定義：部分関数従属を完全に解消した形

※ 二つの属性AとBがある場合にAが決まればBも一つに決まる場合にBはAに関数従属しているという（A→Bと書く）

### 第３正規形

定義：推移的部分関数従属を完全に解消した形

※ A→B、B→Cの関数従属が成立しているときにA→Cという二段階の関数従属性があるときに数的従属性と呼ぶ

### ボイスーコッド正規形（３次と４次の間）

定義：非キーからキーへの関数従属をなくした状態

* 非可逆な分解を行ってしまう恐れがある
* １対多になるように分解する

### 第４正規形

定義：多値従属性が複数存在するテーブルを分割することで作られる
【クローン後】エラー文An error occurred while installing nokogiri (1.8.0), and Bundler cannot continue.の解決法

3回ほど手間取ったので自分用に書きます。

クローン後にrails sしようとしたら下記のエラー。

```
An error occurred while installing nokogiri (1.8.0), and Bundler cannot
continue.
```

手順①

クローンしたgemfileの中身をgem 'rails', '5.2.1'に書き換える。



手順②
これやる↓

https://qiita.com/nishina555/items/63ebd4a508a09c481150


手順③

```
$ sudo gem install nokogiri -- --use-system-libraries    
```

手順④

```
$ bundle install --path vendor/bundle
```

手順⑤

```
$ bin/rails db:migrate RAILS_ENV=development
```
 
手順⑥

```
$ bundle install
$ bundle update   ←これが一番大事っぽい
```


rails sが成功しました。
Laravel用コマンドチートシート

# Laravelプロジェクトの作成
```
composer create-project --prefer-dist laravel/laravel プロジェクト名
```

# 起動
```
$ cd SampleProject
$ php artisan serve
```

# モデルの作成

```
$ php artisan make:model CreateModel
```

# コントローラーの作成

```
$ php artisan make:controller CreateController
```

# マイグレーションコマンド系

```
$ php artisan make:migration make_migration    マイグレーションファイル作成
$ php artisan migrate                          マイグレーションの実行
$ php artisan migrate:refresh                  全てのマイグレーションをリセットし、再度実行
$ php artisan migrate:reset        全てのマイグレーションをロールバック
```

#シーダーコマンド系

```
$ php artisan make:seeder UsersSeeder          シーダーファイル作成
$ php artisan db:seed                          シーダー実行
$ php artisan db:seed --class=UsersSeeder
```

# Seederを逆生成する

サーバーを移行する際に、データベースを引っ越すときに使えるかもしれない。
あとは新規でプロジェクトに入った人とかにローカル環境のデータを皆で共有するときとかに

```
$ composer require --dev "orangehill/iseed"
$ vim config/app.php
'providers' => [
    Orangehill\Iseed\IseedServiceProvider::class,       #追加
],
```

```
$ php artisan iseed {table_name}
```

仮に、categoriesテーブルだとすると、以下のようになります。

```CategoriesTableSeeder.php
// database/seeds/CategoriesTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class CategoriesTableSeeder extends Seeder
{

    /**
     * Auto generated seed file
     *
     * @return void
     */
    public function run()
    {


        \DB::table('categories')->delete();

        \DB::table('categories')->insert(array (
            0 => 
            array (
                'id' => 1,
                /* ...(中略)... */
            ),
            1 => 
            array (
                'id' => 2,
                /* ...(中略)... */
            ),
            2 => 

```

# キャッシュクリア系

Laravel、Apacheやnginxを再起動したとしても、内部のキャッシュが残っててしまって、更新したプログラムをうまく反映してくれない時がある。

```
$ php artisan cache:clear
$ php artisan config:clear
$ php artisan route:clear
$ php artisan view:clear
```

随時追加予定。
Excelで メニューを作る (Tips1)

アプリ、ブラウザー、Excelファイル、PDFファイルなどをリンク設定できるメニューアプリを作成しています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93227/c94181ca-1c23-cd76-4f6c-1ce2d7928eed.png" width=70%>

## 開発の目的
1. 個人々の Windows デスクトップがバラバラなので、社内で必要な業務だけをまとめたメニューを作成する。
2. 業務により使用するアプリが違うため、どのアプリを起動するかわかるようにメニューに登録できるようにする。
3. 社内で色々なメニューアプリをインストールしなくて済むように、Excel マクロで作成する。

## 主な機能
1. クラウドアプリやブラウザのブックマークなどを起動する URL の登録
2. PDFファイルやExcelファイルなどを起動する ファイル名の登録
3. 業務管理用のフォルダを開く フォルダ名の登録
4. 業務アプリを起動する プログラムの登録
5. Excel マクロを起動する　マクロ登録
6. 最初に起動する Exceファルの登録
7. メニュータイトルをユーザーで編集可能にする。

## メニュー設定画面
メニューの登録は、下記の画面で行います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93227/f6ad366d-64c7-f08f-0ffd-413d9d455692.png" width=70%>

## タイトルの編集
メニューのタイトルや配色は、ユーザーで設定できます。
※ 現在機能を停止しています。後日追加します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93227/31502606-23d7-d13c-b6b8-3e612bf95372.png" width=200>
タイトル例）○○(株)業務メニュー


## 登録データの保存方法
当初データの保存は、テキストファイルに保存しようと考えていたのですが、ユーザーが友人に紹介するときに簡単にコピーできるように、データはExcelシートに保存するようにして、1ファイルに収めるようにしました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93227/07bc0851-0bdc-957f-45cb-b29d0a5767a7.png" width="70%">

画面は、メニュー数が 10個画面と 20個の画面を[>>>]ボタンで切り替えるように作成しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93227/8c550766-35b9-6e20-66d6-7598aa2ecdbc.png" width="70%">

縦と横の棒(ラベル)を作成して、オープン時のフォームサイズを棒のサイズにする。
棒のオブジェクト名を 縦:HRHeight、横:HRWidth としてサイズを合わせる。

``` Sub_UserForm_Initialize.vba
Private Sub UserForm_Initialize()
      
  'FormSize
  Me.Height = Me.HRheight.Height + 30
  Me.Width = Me.HRwidth.Width + 15
End Sub
```

## メニューの幅を可変にする。

起動時は、10個のメニューを表示して、[>>>]ボタンで、20個のメニューを表示するようにしました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93227/2cf24a74-7144-1286-dc58-13b64a39c544.png" width="180">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93227/fa57e2a7-e99d-d934-1ba2-694953363f85.png" width="360">


``` Sub_s_FormWidth.vba
Private Sub s_FormWidth()
  
  If sFL拡張 = 0 Then
    sFL拡張 = 1
    Me.btn拡張.Caption = "<<<"
    Me.Width = Me.HRwidth.Width * 2 + 15
  Else
    sFL拡張 = 0
    Me.btn拡張.Caption = ">>>"
    Me.Width = Me.HRwidth.Width + 15
  End If

End Sub

```

## 動作環境
OS:Windows 10 (Mac は動作しません)
Application:Excel 2010 ～ 2019


## ダウンロード
こちらのページから[ダウンロード](https://www.excel-access-japan.com/launcher/)できます。
メンタルウォッチづくりに没頭していたらメンタル落ち着いてきて、ただの中二病装置だなって笑えた話。

記事をご覧くださりありがとうございます！

初めまして。2年間ぐらい組込み開発に携わっていましたのぶたんです！🐉
転職後、体調を崩しましたが、現在回復しました。
# 記事の概要
この記事は、ESP32マイコンを使って、メンタルウォッチを作った過程を
述べた記事です。
~~意外と簡単なので、みんなも作ってアラモード~~


# つくったもの
![kids_chuunibyou_boy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/0b34edf3-1008-a284-2885-e6a50d4e6d33.png)

ご覧の通り**右手がうずきだしそうな装置**です。
今回作ったのは、**空間の明るさ、心拍数、活動量(加速度)、温度、湿度のセンサと起動音/通知用ブザーとメンタルつらいボタン**を備えた、その名も情動記録装置(メンタルウォッチ）です。
装着して活動しているだけで、一秒おきにデータがbrokerにpublishされます。


![EQIf-t-WAAIelcl.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/06bb5285-286d-370b-3caf-c210fddbcd3d.jpeg)
→3Dプリンタでケースも造形しました！サイズ結構大きめ。
→リストバンド化したらメンタルつらいボタン押せない感じです。(設計見直しですね



# 開発動機
近年、職場での人間関係や環境変化に適応できず
うつ病、統合失調症、不安障害(双極性障害を含む)、
などのメンタル疾患による問題が深刻化しています。
日本ではこのようなメンタル疾患の
患者数が年々増加傾向にあり、**400万人(平成29年)** を超えています。
うつ病を例に挙げると
気分の落ち込みや意欲の低下にとどまらず、
脳の機能全体が落ちることによる集中力・記憶力・判断力の低下や、
さまざまな身体症状として現われ、本人も自覚症状がなかったり、
傍から見ると怠けているように見えますが、
外見だけでは判断できないなどの問題点を抱えており、自殺者数が少なくありません。
そして、近年の国際調査/研究では、**4～5人に1人** が一生のうちに精神疾患にかかりやすいそうで、意外と身近なのですが重症化しても気づきにくいという問題もあります。

**そんな中、昨年、自分のメンタル状態が悪化してしまったため、 客観視**したいと
思ったのが開発の動機です。

着地点は、機械学習を用いて情動予測をして、メンタル悪化状態の傾向を算出したり、少しでも状態を軽減させ（自分のためでもあり）、そういった方々のために役立てることです。


# システム構成図
![system.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/ff01a4ce-ec85-79df-cdc4-df14ea8ea6e8.png)

# ユニバーサル基板で製作
![EQIgBwkXkAI0VLe.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/3dadd210-22e5-2b76-d3a9-3dacd6a8c3a9.jpeg)
# publishされるデータ
```
{"time_sensor": "2020-02-01 00:41:22", "xAccl": -4.25, "yAccl": -2.23, "zAccl": 9.03, "light": 2469, "menheraflg": 0, "heart": 1753, "Temp": 16.17, "Humid": 46.0}
```
#とりあえず、メンタルウォッチの時系列データを**matplotlib**を使って可視化
→心拍数とメンタルフラグとその他環境センサーの値と紐づいているので
なんかの関係性を導き出せないかと思っている次第です。
![20200201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/fd569231-9c7b-4de9-e801-286cb311fbb6.png)





# ソースコード


※一応、動きます。
※一部検討中のコードがあり、冗長的になっているのは目をつぶってください。


# 最後に

完全装備して山に登ったりして、時系列データ解析してみるのも面白そうです。
自分自身、WEB系も行いたいのでメンタルウォッチのデータ解析と同時並行でそっちのほうもアウトプットしていきます。

この記事をご覧になった方。
メンタルつらくなったら、この記事を思い出してください。
開発動機に述べた通り、**うつ病などのメンタルの病は誰でもなりやすく、
重症化すると大変です。
職場などで精神的につらいときは甘えだとは思わずに、早めに病院などへ受診しましょう！**

技術的な話に戻しますがメンタルウォッチの時系列データ解析に関しては、
**異常検知のアルゴリズム**が使えそうなので模索してみます。


それでは✋







#参考文献
※参考URL：知ることから始めようみんなのメンタルヘルス
精神疾患による患者数より
https://www.mhlw.go.jp/kokoro/speciality/data.html
Rのplot()について ---初心者向け---

###### tags: `rBasicLearning` `Rplot` `Beginner` `初心者向け`
# Rのplot()について
Rのplot()についてまとめました！
宜しければ, 使ってください！


plot()は, データの種類ごとに異なった図を表示する.

### 使用するデータセット
今回は, irisのデータセットを使用します.

```r
library(datasets)
iris
```

### 質的データ
質的変数は以下のような棒グラフのような図が表示される.

```r
plot(iris$Species)  # Categorical variable
```
![](https://i.imgur.com/3AtOU2W.png)

### 量的データ
量的変数は以下のような散布図が表示される.

```r
plot(iris$Petal.Length)  # Quantitative variable
```
![](https://i.imgur.com/6dJxiL3.png)

### 質的データと量的データ
質的データをx軸量的データをy軸に置くと, 以下のような図になる.

```r
plot(iris$Species, iris$Petal.Width)  # Cat x quant
```
![](https://i.imgur.com/qwkI5bB.png)
### 両方量的データ
両方量的データの場合は, 以下のような散布図になる.

```r
plot(iris$Petal.Length, iris$Petal.Width)  # Quant pairquant
```
![](https://i.imgur.com/Bs79j5C.png)

### plot(x)だけ
plot(x)だけの時は, 変数ごとの全体のグラフの概観をみれる.

```r
plot(iris)  # Entire data framepairquant
```
![](https://i.imgur.com/oo0IYMr.png)

### グラフを整える
点の色, 点の大きさ, グラフのタイトル, x軸ラベル, y軸ラベルは, 以下のように指定する.

```r
# Plot with options
plot(iris$Petal.Length, iris$Petal.Width,
  col = "#cc0000",  # Hex code for datalab.cc red
  pch = 19,         # Use solid circles for points
  main = "Iris: Petal Length vs. Petal Width",
  xlab = "Petal Length",
  ylab = "Petal Width")
```
![](https://i.imgur.com/fnjs6LH.png)

### 数式の公式も範囲指定でプロット
数式も範囲指定でプロットすることができる.
今回は, コサイン・exp・正規分布のグラフをプロットした.

```r
plot(cos, 0, 2*pi)
plot(exp, 1, 5)
plot(dnorm, -3, +3)
```
![](https://i.imgur.com/FsDD5m9.png)
![](https://i.imgur.com/XIgZtMV.png)
![](https://i.imgur.com/YhxtKhz.png)

### 正規分布で出力
正規分布でラインに色をつけ, 太さも太くして, プロットしてみた.

```r
# Formula plot with options
plot(dnorm, -3, +3,
  col = "#cc0000",
  lwd = 5,
  main = "Standard Normal Distribution",
  xlab = "z-scores",
  ylab = "Density")
```
![](https://i.imgur.com/z5xkAo9.png)
GoogleSpreadSheet(スプレッドシート)で、選択値と連動してプルダウンの選択肢を決める

## やりたいこと

GoogleSpreadSheetにて、データ入力規則をちょっと使いこなしたい。
AとB、2つの入力欄があって、それぞれプルダウンで選択方式を取り、Aの選択値によってBの選択肢が変わる、という仕様を実現したい。

イメージ的には

- **炎ポケモン**だったら**ヒトカゲ、ヒノアラシ、アチャモ**
- **水ポケモン**だったら**ゼニガメ、ワニノコ、ミズゴロウ**

みたいな感じですね、ええ。
データ入力規則って、ここからここまでの値をプルダウンの値として使うよっていう指定をするので、そのままだと実現できなくて。
でも、プルダウン使いたいやん？ってなったわけです。
  
それをべらぼうに小さい画像と説明する気がない言葉たちで綴っていきます。

## 手順

### 1.シートを2つ用意する  
@ブック

こちらの2つ
- データを入力するためのシート(以下、データ入力用シート)
- マスターデータを入力しておくためのシート(以下、マスターデータシート)

**こうなる**

![phase-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81434/2da26bb5-b9be-a65e-2eea-c0242e38ddfc.png)

### 2.全てのマスターデータを入力する  
@マスターデータシート

**こうなる**
![phase-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81434/45e79964-c03c-743e-42e1-903a5d3812c9.png)


### 3.マスターデータを選択肢とする入力規則を持つセルを作成する  
@データ入力用シート

**こうして**
![phase-3-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81434/63ffde60-8a41-6a6a-78bf-0c92417e90bf.png)

**こうしたら**
![phase-3-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81434/dc95a9bb-84af-ebe2-af2b-c7427c35de47.png)

**こうなって**
![phase-3-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81434/15c6698c-7e3e-e201-0e73-b77f7b11dcec.png)

**こうなる**
![phase-3-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81434/30d74edc-1f7c-799d-2dc6-4c56e6d689ff.png)

### 4.データ入力用シートの値を参照するセルを作成する  
@マスターデータシート

**こうなる**
![phase-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81434/2aa6341f-a523-a7dc-4db0-e344c5f5b0e4.png)

### 5.で作成したセルの値に対応するマスターデータの一覧を持つセルを作成する  
@マスターデータシート

**こうなる**
![phase-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81434/3a65a42c-9b41-3e7d-b520-7dd611dbd6c3.png)

### 6.で作成したセルの値を選択肢とする入力規則を持つセルを作成する  
@データ入力用シート

**こうしたら**
![phase-6-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81434/6e4321f7-877d-f652-155e-194827145247.png)

**こうなる**

![phase-6-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81434/21774ee5-bd71-ead0-2210-86052d5882f8.png)

## 結果

**こうなる**
![finish.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81434/977975ea-751d-f000-6b1f-b266a16a4996.gif)

## まとめ
基本的にこうなってこうなるとしか言ってないけど、なんとなく追って作業すればああこれかあってなると思います！
これ結構便利なので、どちらかというと自分の備忘録的な感じですが、参考になったら幸いです。
ただ、入力規則はコピーとかできない（スマホでは可能［特殊貼り付け］）ので、1行1行がんばるしかない・・・(と思っている)

*参考資料：ポケットモンスター*
旧バージョンのXcodeでアプリの動作確認するときの手順


# はじめに
リリースした過去バージョンのアプリの動作を確認するために、古いバージョンのXcodeでの確認が必要になった。
と、言うことがあったので備忘録がてら動作確認の手順を書き残すことにしました。

**前提**

- 確認したいバージョンのプロジェクトファイルが手元の環境にある
- 古いバージョンのXcodeがダウンロードされている

古いバージョンのXcodeのインストールは[こちら](https://qiita.com/TsukasaHasegawa/items/0d7d5c2cf3a2b8ce8993)を参考にすると良いかと思います。

# 手順
今回は`Xcode11.0`から`Xcode10.1`に切り替えて動作を確認するケースで記述していきます。
Xcodeの.appファイルの名前はそれぞれ`Xcode11.0.app`と`Xcode10.1.app`となっています。

## Xcodeのバージョンを古いものに切り替える
```
//現在使っているXcodeのパスを確認
$ xcode-select -p 
/Applications/Xcode11.app/Contents/Developer

//バージョン切り替え
$ sudo xcode-select -s /Applications/Xcode10.1.app/Contents/Developer 

//切り替わったことを確認
$ xcode-select -p 
/Applications/Xcode10.1.app/Contents/Developer

//有効になっているxcodebuildのバージョンも確認してみる
$ xcodebuild -version
Xcode 10.1 //切り替えたバージョンになっている
Build Version 10B61
```
確認時のパスは、人によって少々異なるパスになることもあるかもしれません。

## ライブラリをアップデートする
外部のライブラリを使用している場合は、パスを変えて旧バージョンのアプリのプロジェクトを開いてビルドしようとしても、外部ライブラリ周りの環境が整っておらずエラーが出るため、導入し直す必要があります。

### CocoaPodsを利用している場合
```
$ cd /path/to/Project
$ pod install
```

### Carthageを利用している場合
```
$ cd /path/to/Project
$ carthage update --platform iOS
```

これが完了したらXcode10.1の方でプロジェクトを開き、ビルドをしたら古いバージョンのアプリの動作確認ができるかと思います。
※ライブラリの導入が終わったときにすでにXcodeを起動している状態でビルドをしようとしてエラーが出た場合、Xcodeを再起動をすると解消されることもあります。

それ以降でバージョンの切り替えをする際は、ライブラリのアップデートは不要になります。
また新たなバージョンの確認をしたくて切り替える場合は、ライブラリのアップデートまで行いましょう。

# 参考
- [複数バージョンのXcodeを共存させる | ハックノート](https://hacknote.jp/archives/25387/)
- [xcodeコマンドでxcodeバージョンを指定](https://qiita.com/3104k/items/fbc893f306306bb3f707)
- [Xcodeのコマンドラインツールxcodebuildのバージョン確認と切り替え方法](http://travitu.hatenablog.jp/entry/2015/02/07/144331)
[Vue.js] どうしてVue.set()で配列の更新が検知できるの？

[[Vue.js]配列の変更が検知できない理由の「JavaScriptの制限」って何よ！ - Qiita](https://qiita.com/kozzzz/items/feb5e0a16d6f1fad08e8)

こちらの記事で配列の更新検知には`Vue.set`を使うと記載したのですが、
どうして検知できるのかな？って思って調べました。

## 結論
内部では`splice()`をしているだけだった。


## 実装を見てみる
公式[GitHub](https://github.com/vuejs/vue/blob/6fe07ebf5ab3fea1860c59fe7cdd2ec1b760f9b0/src/core/observer/index.js#L209)を見てみましょう！ :eye: :eye:

```js
export function set (target: Array<any> | Object, key: any, val: any): any {
// 中略
  if (Array.isArray(target) && isValidArrayIndex(key)) {
     target.length = Math.max(target.length, key) 
     target.splice(key, 1, val) //ここだ！
     return val 
  } 
...
```

ありました！
内部で`target.splice(key, 1, val)`をしていることが確認できました！ 
だから検知できるんですね！
コンポーネント単位の設計をしたらデザインガイドラインをつくろう

こんにちは、しがないwebデザイナーです。
去年の11月に、[Spotlight](https://spotlight.soy/)という仮想通貨を使ったCtoCメディアサービスをリリースしました。（担当箇所はデザインと画面コーディングです。）

そして、2019年5月31日に可決された改正資金決済法に含まれる「暗号資産カストディ業務に対する規制」に伴って1月31日のサービス内容変更と同時にデザインの改修も行いました。

そのときに、**デザインガイドライン**なるものを作成したので、つくりかたと重要性とか作ってからどう変わったかとかお話しします。


## デザインガイドラインとは

カタカナで書くとあまりにダサい。
ロゴとか、ホームページとかいろいろあると思いますが、今回はCSSフレームワークのDocみたいなもの、と捉えてください。

- [Bootstrap](https://getbootstrap.com/docs/4.4/components/alerts/)
- [BULMA](https://bulma.io/documentation/)
- [Pure.css](https://purecss.io/)


## どんなものを作成したか

Notionで簡易的なDocをつくりました。

<img width="740" alt="Screen Shot 2020-02-06 at 13.21.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500709/3f7104b3-e625-9709-f956-f8803d0f4d3e.png">


デザイナーがいなくても、画面デザインを実装できるような仕組みを作れるのは、コンポーネント化したときの強みだと思います。

これをつくることで、細かい修正の無駄なコミュニケーションがなくなります。


## つくりかた


1. Notionでてきとーにカード型の並びのドキュメントを作成します。
<img width="1070" alt="Screen Shot 2020-02-06 at 13.56.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500709/3822b329-d01e-4128-eac9-a1c0bbe00c53.png">

2. 新規ドキュメントを作成して、見出し、利用方法、画像、コードを記載します。
<img width="740" alt="Screen Shot 2020-02-06 at 13.21.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500709/86caa84e-e712-8d76-8d0b-3323887db4d9.png">

3. URLを発行して共有します。

##  作成してから変わったこと

- よりコンポーネント化を意識したデザインと実装をするようになった
- ドキュメントを作成、掲載することを意識するのでコードがもっと整うようになった
- class名をコンポーネント単位でつけることを意識できるようになった

正直、現状エンジニア2人、デザイナー1人でやってるのでそこまで成果がでている印象はないですが（画面コーディングもわたしが担当してるので）、チーム規模が大きくなればなるほどこういうものが必要になる印象です。

無駄なコミュニケーションを無くしてサービスをよりよくできるように取り組めたらと思います。
Disk2vhdを利用したVHDファイル取得のTips

## 今回のVHD化対象
* WindowsServer 2012R2

## 事前準備
* ボリュームサイズの確認
* 外付けハードディスクの準備
* VSSサービスの確認

## 作業
* 用意した外付けHDDにDisk2vhdを入れる。
* 外付けHDDを対象のハードウェアに繋げる。
* Disk2vhdを起動
* 外付けHDDのドライブだけチェックを外してcreate
* ゆっくり待つ

備忘として雑記
後で詳細を書きます☺️
Windows10 でTortoiseSVNのマーク（アイコンオーバーレイ）が表示しない

Windows10にTortoiseSVNをセットアップして利用してみると、アイコンオーバレイが表示しない場合に以下の手順を実施します。

# 解決手順
1.レジストリバックアップ
2.レジストリの修正
3.再起動

## 1.レジストリバックアップ
[ファイル] - [エクスポート]からバックアップします。

## 2.レジストリの修正
### 修正箇所
#### 以下のディレクトリに移動
```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers
```
#### ３つを削除します
SkyDrivePro1(ErrorConflict)
SkyDrivePro2(SynclnProgress)
SkyDrivePro3(InSync)

：修正前
![修正前.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308893/8b37ce0d-44aa-1261-5389-57de5db42de6.png)

：修正後
![修正後.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308893/1a006bd8-098f-a411-1a4e-aceef22f2a42.png)

## 3.再起動
アイコンオーバーレイが表示されていることを確認します

#参考情報
https://atuweb.net/201508_svn-mark-not-displayed-upgrade-win10/
Pepper SDK入門(13) Trajectory Editor

前回はエディター学習の手始めに、Animation Editorについて勉強しました。引き続きエディターの理解を深めるため、今回はTrajectory Editorについて詳しく見ていきたいと思います。
#Trajectory
Trajectoryツールを使用して、目的地までの移動経路をTrajectoryファイルに設定することができます。ダンスなど決まった移動をする場合などに有用です。ただし、障害物をよけて通る必要がある場合などには別の移動手段(GoTo Actionなど)を利用する必要があります。
##Trajectoryファイルの作成
はじめに、Trajectoryファイルを作成する方法を解説します。
**<手順>**
1.FileメニューのNewからAnimation Trajectoryを選択します。
2.作成するファイル名を入力しましょう。<a href="http://3.bp.blogspot.com/-bYTrL-uSgQE/XJhxkR2LjYI/AAAAAAAAAWE/MoSEcHeSFyMMp6JIGe8Ks6ZKytDEEOlvACK4BGAYYCw/s1600/WS000000.JPG" imageanchor="1"><img border="0" height="186" src="https://3.bp.blogspot.com/-bYTrL-uSgQE/XJhxkR2LjYI/AAAAAAAAAWE/MoSEcHeSFyMMp6JIGe8Ks6ZKytDEEOlvACK4BGAYYCw/s640/WS000000.JPG" width="640" /></a>
Createをクリックすると、resディレクトリのrawフォルダにTrajectoryファイルが作成されているはずです。
<a href="http://2.bp.blogspot.com/-ovqC1wTyZgQ/XJhycwXUURI/AAAAAAAAAWY/sssbB356puAv0J2rLotJfGL42lGCrcgpgCK4BGAYYCw/s1600/WS000001.JPG" imageanchor="1"><img border="0" height="186" src="https://2.bp.blogspot.com/-ovqC1wTyZgQ/XJhycwXUURI/AAAAAAAAAWY/sssbB356puAv0J2rLotJfGL42lGCrcgpgCK4BGAYYCw/s640/WS000001.JPG" width="640" /></a>
3.Trajectoryファイルをダブルクリックすると、Trajectoryツールが起動します。
4.OKをクリックすればTrajectoryファイルにロボットの移動経路の設定が保存されます。
##Trajectoryツール
ここでは、Trajectoryツールで移動経路を設定する方法について解説していきます。
<a href="http://4.bp.blogspot.com/-GRo3uaeCYXQ/XJiJDgLbAKI/AAAAAAAAAXM/uIhhej-Bo34Cwp-3CQ6fHqDr89Jt9LI6gCK4BGAYYCw/s1600/WS000000.JPG" imageanchor="1"><img border="0" height="610" src="https://4.bp.blogspot.com/-GRo3uaeCYXQ/XJiJDgLbAKI/AAAAAAAAAXM/uIhhej-Bo34Cwp-3CQ6fHqDr89Jt9LI6gCK4BGAYYCw/s640/WS000000.JPG" width="640" /></a>

| アイテム    |       名前 |    説明 |
|:-----------------|:------------------|:------------------|
| 1             |エディションゾーン |選択されたTrajectoryの表示、及びポーズと経路の操作が可能。<br/>緑の円は始点(移動開始地点)を意味し、操作はできません。<br/>赤い円は終点を意味し、ドラッグ移動させるかマウスでスクロールすることで方向転換が可能です。    |
| 2|Properties |Planar moveのプロパティを設定することが可能。<br/>**Framerate:** 1秒間のフレーム数<br/>**Offset:** Trajectoryを遅らせることが可能。<br/>**Tick every:** エディションゾーンの目盛りの間隔     |
| 3|New Pathボタン |現在のTrajectoryに中継点を追加することが可能。        |
| 4| Trajectory orientation |Pepperの向きの変更は自動でも手動でも可能。Pepperの向きはオートの場合に進行方向、マニュアルの場合に固定となります。<img width="799" alt="スクリーンショット 2020-02-07 15.24.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574697/3beb3c14-fd2a-ee31-ff64-dc176c40ebc4.png"><img width="798" alt="スクリーンショット 2020-02-07 15.24.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574697/8f9e07cc-60a0-4296-83e7-cff31fa01bf3.png">|
| 5             |             Keyframes |Trajectoryにおける時間の微調整が可能。       |
| 6          |           プレビューボタン |Trajectoryのプレビューが可能。       |
| 7          |           End point |Trajectoryの終点の位置と方向を微調整することが可能。       |
| 8          |           Trajectories |Trajectoryの選択と追加が可能。planar moveで計算されるすべてのTrajectoryは横一列のインデックスボタンに表示される。<ul><li>New Trajectoryボタンをクリックすることで現在のPlanar moveにTrajectoryを追加。</li><li>任意のインデックスボタンをクリックすることで、選択されたTrajectoryをエディションゾーンに表示。</li><li>シフトクリックもしくはCtrl+Aで、選択された複数のTrajectoryの連結をエディションゾーンに表示。</li>
</ul>
初心者からはじめる目標管理（目標の立て方編）

#１．概要
この時期になると上から今年度の目標を立てるように言われている人が多いと思います。しかしながら、以下のような悩みを抱えている方は多いのではないでしょうか？

- 目標の立て方がわからない
- 目標を立てても誰も見ない
- 何のためにやっているのかわからない

目標とは本来、その人が目指したいものであり、その人の成長を助けモチベーションを向上させるものです。しかしながら、目標管理が形骸化して何のためにやっているのかわからない人も多いと思います。

本内容は、目標を管理しているリーダーではなく、**目標を作ろうとしている現場メンバーを対象とした「目標の立て方」について記載しています。**


#２．目標管理の基本的な考え方

目標は大きく2つに分かれます。

- 長期目標（わくわくするもの、今の自分では届かないもの、モチベーションが上がるもの）
- 短期目標（長期から考えて今できるもの、コントロールできるもの、ちょっと手を伸ばせば届くもの）

このうち目標管理に使うものは**短期目標**の方になります。こちらが管理（コントロール）できるので、ここをもとにしながらリーダーはコーチング等を行います。

また、そのほか目標管理の基本的な考えは以下となります。

- 短期目標は今の自分より少し高い目標を立てる（高すぎても、低くてもダメ）
- 短期目標は7割ほど達成できればOK（ちょっと高い目標の7割は成長になる！）
- 短期目標は数値で測れ、3つほど決めるのがが望ましい（すべてを行うことはできない…）
- 長期目標が会社の理念とつながっているといい（達成すると業務評価が上がるので）
- 長期・短期ともに目標は変えてもいい（市場の変化が激しいので…）
- 誰かに目標に対してのフィードバックをもらうこと（最短1週間で、最大でも1か月）



#３．目標の立て方

実際の目標の立て方について説明いたします。はじめに身も蓋もなく言ってしまうと、**2章で説明した基本的な考え方は一度すべて忘れてください**。

なぜなら、2章の内容を含む目標を最初から立てられる人はほとんどいないからです。もし立てられるという人がいるのであれば、実際に立てて実践してみてください。おおよそ「月の残業が100時間！！」とか「目標達成率0％！！」といった目標になるはずです。

これは、現場（日本の教育）の問題でもあるのですが、自分がどこまでできるのか認識できている人が少ないことが影響しています。つまり、**自己認識ができていない**から、自分が何をしたいのか、どこまでできるのかわかっていないということです。
（ただ一方的に上から与えられたタスクをこなしているので。。。）

初心者がまずやらないといけないのは、**目標管理をしながら自己認識を行うこと**、です。そのため、目標を立てる際は以下2点だけを意識してください。

- **ちょっと背伸びしたと思う**目標を立てる（長期・短期という考えは不要！）
- **失敗しても目標を変えればいい**、と考える

上記をもとにして、とりあえずの目標を立て管理してください。おおよそ1か月もあれば、高すぎて無茶だったのか、低すぎてやる気が出なかったのかがわかります。
（もしくは方向性が全く違っていたから、やる気が出なかったのか）

そして、高い低いがわかった段階で必ず振り返りをしてください。この段階では、成功しても失敗しててもいいのです。成功しているのであれば、**自分が何をしたら成功するのか分かります。**また、失敗しているのであれば、**自分が何をしたら失敗するのか学びにもなるので、自己認識につながります**。

何度も目標修正、フィードバックを続けることで、自分に何ができて、何ができないのかがわかってきます。そこができてから、改めて2章の内容の目標を立てるようにしてください。

このフィードバックには自分以外の指摘があるといいのですが、上長によっては「指摘しない」、「なんでできていないんだ、と失敗を叱る」という人もいるので、**フィードバックをもらう人は厳選しておきましょう。**

### 目標の例

- JSTQBのAL試験に合格する！
- ○○の技術本を、月に〇冊読む！
- 現場でテスト設計の技術を学ぶ！
- テスト工程で発見される不具合を○件以内にするようにコーディングを行う！
- お客様に感謝されるような行動を行う！
- 毎月外部の勉強会に〇回参加する！
- テストケースを1時間に〇ケース実施できるようにする！


（ちなみに私の目標は「1週間に1回はQiita記事を投稿する」です。）

#４．まとめ
初心者は目標をとりあえず立てながら、自己認識を進めてください。その際、自分が楽しいと思うこと、ワクワクするものから立てる、どんどんやる気が上がっていきます。

失敗しても「これは自分に合わないものなんだな」と思って振り返れば、それは自己認識につながります。
pythonで単回帰分析の回帰係数を算出

# 単回帰分析の回帰係数の算出
単回帰分析の回帰係数の算出のコードを作ったので, 宜しければ, 使ってください！
### ライブラリのインポート
```python
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
```

### データセットの例（test.csv）
| Column 1 | Column 2 |
|:--------:|:--------:|
|   2.2    |    71    |
|   4.1    |    81    |
|   5.5    |    86    |
|   1.9    |    72    |
|   3.4    |    77    |
|   2.6    |    73    |
|   4.2    |    80    |
|   3.7    |    81    |
|   4.9    |    85    |
|   3.2    |    74    |

### データの読み込み
```python

dataset = pd.read_csv('test.csv')
```
### 列の取り出し
Xを説明変数, yを目的変数として, 列をそれぞれ取り出します。

```python

X = dataset.iloc[:, :-1].values #Indepand variable
y = dataset.iloc[:, 1].values #Depand variable
```

### 平均の計算

```python

# Calculate Mean
Sum_X = sum(X)
N_X = len(X)
Mean_X = Sum_X / N_X

Sum_y = sum(y)
N_y = len(y)
Mean_y = Sum_y / N_y
```

### 偏差の計算
```python

# Calcuate Deviation
Devi_X = []

for Row_X in X:
    Devi_X.append(Row_X - Mean_X)

Devi_y = []

for Row_y in y:
    Devi_y.append(Row_y - Mean_y)

```
### Xとyの偏差をかける
``` python
# Multiply Deviation X and y

counter = 0
MD_Xy = []
while counter < len(Devi_X):
    MD_Xy_Value = Devi_X[counter] * Devi_y[counter]
    MD_Xy.append(MD_Xy_Value)
    counter += 1
```

### Xとyの偏差をかけたものを合計する
```python

# Sum of Multiply Deviation X and y
SMD_Xy = sum(MD_Xy)
```

### 偏差の平方
```python
# Squares of Calcuate Deviation
Sq_Devi_X = []

for DX in Devi_X:
    Sq_Devi_X.append(DX * DX)

Sq_Devi_y = []

for Dy in Devi_y:
    Sq_Devi_y.append(Dy * Dy)
```
### 偏差の平方和
```python

# Sum of Squares of Calcuate Deviation
SSX = sum(Sq_Devi_X)

SSy = sum(Sq_Devi_y)
```

### 回帰係数の計算
```python

# Calculate Regression paramator
betaOne = SMD_Xy / SSX
betaZero = Mean_y - betaOne * Mean_X
```
【ふくだ学習録】Docker入門 part8【27日目】

# ふくだ学習録とは？
ふくだが学習したことの備忘録。
目に見える形で残すことによってやる気を出す個人的な作戦です。
他人に見せるように書いているわけではないので、すごく読みにくいです。

### 読了した本
[データベースエンジニア養成読本 [DBを自由自在に活用するための知識とノウハウ満載!]](https://www.amazon.co.jp/dp/4774158062/ref=cm_sw_r_tw_dp_U_x_FPphEbQFPPQRM )
[ゼロから作るDeepLearning](https://www.amazon.co.jp/dp/4873117585/ref=cm_sw_r_tw_dp_U_x_y3UiEbF3P6EG7)
[PHPフレームワーク CakePHP 3入門](https://www.amazon.co.jp/dp/4798048577/ref=cm_sw_r_tw_dp_U_x_.YIjEbS1K4JY2)
[SQLアンチパターン](https://www.amazon.co.jp/dp/4873115892/ref=cm_sw_r_tw_dp_U_x_XlokEbJQK2N7P )

### 今読んでいる本

[Docker入門](https://www.amazon.co.jp/dp/480071091X/ref=cm_sw_r_tw_dp_U_x_xVlmEbN8ZTHZK)

# Docker入門

### マルチホスト連携とは
異なるホストで稼働するコンテナが、同じ仮想ネットワークに室族できるようになり、ホストのIPアドレスやポート転送設定などと無関係に、コンテナ同士が直接連携できるようになること。それを実現するための機能は、マルチホストネットワーク機能と呼ばれる。

### マルチホスト連携を利用する条件
Linuxカーネルがバージョン3.16以降である必要がある。またそれぞれのDocker環境では、共通に使用できる分散型のキーバリューストアを稼働させる必要がある。

分散キーバリューストアは「Consul」「Etcd」「ZooKeeper」の３種類がある。また各ホストを「Docker Swarm」というツールでクラスタ構成にする必要も出てくる。

DockerSwarmの説明は下記サイトがわかりやすかった。
[Docker Swarmを試してみた](https://qiita.com/KI1208/items/cb9d25a6dda1be5681fb)

### 複数コンテナを利用する際のツール。
おなじみのコンテナ管理ツールである「Docker Compose」。
そのほかにも「Panamax」といったものもある。

### ELKとは？
よく使われるアプリケーションの組み合わせのこと。
検索エンジン「ElasticSearch」
ログ処理ソフト「logstash」
データ可視化ツール「kibana」
それぞれの頭文字からELKと呼ばれる。

# 今日の一言
docker入門ようやく読み終わったー！
明日からは今まで読んだ本の知識を全て使っていけるようなアプリ制作に取り掛かる！

サーバー環境自分で構築して、バック側はAPIサーバ、フロントをSPA化、データ格納はmongoとMySQLで責務分けながら格納しつつ、スクレイピングして取ってきたデータはtensorflowで分類する…

これ完了したらえげつないレベルアップするわ！！わくわく！！！
あらゆるライブラリの最新バージョンを監視して Slack へ通知する


## Libraries.io でパッケージを検索する

1. [Libraries.io](https://libraries.io/) というパッケージ管理システムを横断検索できるサイトでパッケージ名を検索する

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44953/8b88fe69-a16e-7756-ee23-00522600fe9c.png)


1. 以下のようにパッケージの詳細画面でURLを取得する
    `https://libraries.io/npm/phonegap-plugin-push`


    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44953/6c9bb041-614a-6d4b-28c0-8ff2375e1922.png)


1. コピーしたURLの末尾に `/versions.atom` を追加する

    ```
    https://libraries.io/npm/phonegap-plugin-push/versions.atom
    ```

    ※念の為ブラウザ上で表示されるか確認する

##  Slack で RSS の設定をする

先程取得した URL をApp ディレクトリの RSS に登録する
https://manabi-labo.slack.com/apps/manage

### 参考
https://qiita.com/ts-3156/items/54141d417082a2b1db3d
FlutterのSliderの色設定を図にまとめた

指定した範囲から値を選ぶ [**Slider**](https://api.flutter.dev/flutter/material/Slider-class.html) というWidgetを初めて使用した。

デフォルトはこんな感じ

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52227/093275de-8a46-ba80-d30d-78174ceff39b.png">

このSliderの色をカスタマイズするとき、**何のプロパティがどこの色を変えられるのか？**がややこしかったので図にまとめた。

<img width="600" alt="スクリーンショット 2020-02-07 8.47.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52227/73e980bf-3812-630a-18ec-34a47cd245bd.png">

※分かりやすいように各部品に色を指定している

Sliderのコードは以下

```dart
SliderTheme(
  data: SliderTheme.of(context).copyWith(
    trackHeight: 10,
    thumbColor: Colors.purpleAccent,
    thumbShape: RoundSliderThumbShape(enabledThumbRadius: 12),
    valueIndicatorColor: Colors.orange,
    overlayColor: Colors.orange.withAlpha(80),
    activeTrackColor: Colors.black,
    inactiveTrackColor: Colors.amber,
    inactiveTickMarkColor: Colors.blue,
    activeTickMarkColor: Colors.green,
  ),
  child: Slider(
    min: 0,
    max: 100,
    divisions: 10,
    value: _customSliderValue,
    label: '${_customSliderValue.floor()}',
    onChanged: (d) => setState(() {
      _customSliderValue = d;
    }),
  ),
)
```

上記の`SliderTheme.of(context).copyWith`の中身を、MaterialAppの`sliderTheme`にそのまま使うことができる。

SliderThemeDataのコード

```dart
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // スライダーのテーマ指定
        sliderTheme: SliderThemeData(
          trackHeight: 10,
          thumbColor: Colors.purpleAccent,
          thumbShape: RoundSliderThumbShape(enabledThumbRadius: 12),
          valueIndicatorColor: Colors.orange,
          overlayColor: Colors.orange.withAlpha(80),
          activeTrackColor: Colors.black,
          inactiveTrackColor: Colors.amber,
          inactiveTickMarkColor: Colors.blue,
          activeTickMarkColor: Colors.green,
        ),
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}
```

使用したコードのgithub
https://github.com/ikemura23/flutter_lab/blob/slider/lib/main.dart
Google Cloud Platform (GCP)サービスの正式名称・略称・読み方まとめ#2(AI と機械学習/AI Platform およびアクセラレータ)

Google Cloud Platform (GCP)のサービスで正式名称や略称はともかく、読み方がわからずに困ることがよくあるのでまとめてみました。


クラウド コンピューティング サービス  |  Google Cloud
https://cloud.google.com/?hl=ja

## Amazon Web Services (AWS)のまとめはこちら！

Amazon Web Services (AWS)サービスの正式名称・略称・読み方チートシート - Qiita
https://qiita.com/kai_kou/items/cb29d261c8acc49fd22a

Amazon Web Services (AWS)サービスの正式名称・略称・読み方まとめ #1 (コンピューティング) - Qiita
https://qiita.com/kai_kou/items/a6795dbab7e707b0d1a6


## まとめルール

まとめルールについては下記を参考ください。

Google Cloud Platform (GCP)サービスの正式名称・略称・読み方まとめ#1(AI と機械学習/AI ビルディング ブロック) - Qiita
https://qiita.com/kai_kou/items/fa930eef23470c2f8f0b


## 概要について

サービス一覧ベージの概要を引用しています。

プロダクトとサービス  |  Google Cloud
https://cloud.google.com/products?hl=ja#product-launch-stages


間違いや、こんな呼び方あるよーなどありましたらコメントお願いします！


## AI and Machine Learning(AI Platform and Accelerators) - AI と機械学習(AI Platform およびアクセラレータ)

### AI Platform

GCP やオンプレミスで実行される AI アプリケーションを構築します。

- 正式名称: AI Platform
- https://cloud.google.com/ai-platform/
- 読み方: エーアイ プラットフォーム
- 略称: なし
- 俗称: なし


### Deep Learning VM Image

ディープ ラーニング アプリケーション用の事前構成済み VM。

- 正式名称: Deep Learning VM Image
- https://cloud.google.com/deep-learning-vm/
- 読み方: ディープ ラーニング ヴイエム イメージ
- 略称: なし
- 俗称: なし


### AI Platform Notebooks (beta)

プロジェクトをたった数分で立ち上げて稼働させることができるエンタープライズ ノートブック サービス。

- 正式名称: AI Platform Notebooks
- https://cloud.google.com/ai-platform-notebooks/
- 読み方: エーアイ プラットフォーム ノートブック
- 略称: なし
- 俗称: なし


### AI Platform Deep Learning Containers (beta)

ディープ ラーニング環境向けに事前構成、最適化されたコンテナ。

- 正式名称: Deep Learning Containers
- https://cloud.google.com/ai-platform/deep-learning-containers/
- 読み方:ディープ ラーニング コンテナ
- 略称: なし
- 俗称: なし


### AI Hub (beta)

Google Cloud 上で AI の探索、共有、デプロイを行います。

- 正式名称: AI Hub
- https://cloud.google.com/ai-hub/
- 読み方: エーアイ ハブ
- 略称: なし
- 俗称: なし


### Cloud GPUs

機械学習や科学技術計算、3D 表示に活用する GPU。

- 正式名称: Cloud GPUs
- https://cloud.google.com/gpu/
- 読み方: クラウド ジーピーユー
- 略称: なし
- 俗称: なし


### Cloud TPU

ML モデルのトレーニングと実行の期間を短縮します。

- 正式名称: Cloud TPU
- https://cloud.google.com/tpu/
- 読み方: クラウド ティーピーユー
- 略称: なし
- 俗称: なし
- TPUとは
  - Tensor Processing Unit
  - 参考: [GoogleのTPUって結局どんなもの？ 日本法人が分かりやすく説明：CPU、GPUとの違いとは？ \- ＠IT](https://www.atmarkit.co.jp/ait/articles/1807/06/news108.html)


### TensorFlow Enterprise

TensorFlow の作者による。

- 正式名称: TensorFlow Enterprise
- https://cloud.google.com/tensorflow-enterprise/
- 読み方: テンサーフロー エンタープライズ
- 略称: なし
- 俗称: なし
- 概要: TensorFlow Enterprise の概要: サポート付きのスケーラブルかつシームレスな TensorFlow をクラウドで構築 | Google Cloud Blog https://cloud.google.com/blog/ja/products/ai-machine-learning/introducing-tensorflow-enterprise-supported-scalable-and-seamless-tensorflow-in-the-cloud
AutoLISP 変換関数の使い方

[変換関数リファレンス（公式ヘルプ）](https://help.autodesk.com/view/OARX/2020/JPN/?guid=GUID-5BDBD4BC-289E-4A49-9BB9-DF6A6147E0FC)

### 角度を表す文字列をラジアン単位の実数に変換
```scheme
(angtof "30") 
;; -> 0.523599
(angtof "-30")
;; -> 5.75959
(angtof "360")
;; -> 0.0
```

### ラジアン単位の角度の値を文字列に変換
```scheme
(angtos (/ PI 2))
;; -> "90"
(angtos (/ PI 6))
;; -> "30"
(angtos (/ (* 5 PI) 4))
;; -> "225"
```

### 文字列の先頭文字を ASCII 文字コード(整数)に変換
```scheme
(ascii "a")
;; -> 97
(ascii "bbb")
;; -> 98
(ascii "Acad")
;; -> 65
(ascii "あ")
;; -> 130
(ascii "漢字")
;; -> 138
```

### 文字列を実数に変換
```scheme
(atof "0")
;; -> 0.0
(atof "1")
;; -> 1.0
(atof "-1")
;; -> -1.0
(atof "1.5")
;; -> 1.5
```

### 文字列を整数に変換
```scheme
(atoi "0")
;; -> 0
(atoi "1")
;; -> 1
(atoi "-1")
;; -> -1
(atoi "1.5")
;; -> 1
```

### ASCII 文字コードに対応する整数を 1 文字の文字列に変換
```scheme
(chr 97)
;; -> "a"
(chr 32)
;; -> " " 半角スペース
(chr 63)
;; -> "?"
```

### ある計測単位から別の計測単位に値を変換
※ acad.untファイルに存在する単位を変換

```scheme
(cvunit 1 "minute" "second")
;; -> 60.0
(cvunit 1 "m" "ft")
;; -> 3.28084
(cvunit 1 "ft" "m")
;; -> 0.3048
(cvunit 1 "m" "inch")
;; -> 39.3701
(cvunit 1 "inch" "m")
;; -> 0.0254
```

### 実数(浮動小数点)を表す文字列を、実数値に変換
```scheme
(distof "3.14")
;; -> 3.14
(distof "1/2")
;; -> 0.5
(distof "1/3")
;; -> 0.333333
(distof "2 1/4")
;; -> 2.25
```

### 整数を文字列に変換
```scheme
(itoa 0)
;; -> "0"
(itoa 1)
;; -> "1"
(itoa -12)
;; -> "-12"
;; (itoa 1.0) -> error
```

### 数値を文字列に変換
```scheme
(rtos 0)
;; -> "0"
(rtos 1.0)
;; -> "1"
(rtos 2.25)
;; -> "2.25"
(rtos 2.25 2 1)
;; -> "2.3"
(rtos 2.25 5)
;; -> "2 1/4"
```

### ある座標系から別の座標系に、点(または変位)を変換
```scheme
;; 現在のUCSの原点が 100,100,0 の場合
;; WCS -> UCS
(trans '(1.0 2.0 3.0) 0 1)
;; -> (-99.0 -982. 3.0)

;; UCS -> WCS
(trans '(1.0 2.0 3.0) 1 0)
;; -> (101.0 102. 3.0)
```
iOSシミュレータにプッシュ通知を送ってみる

※本記事は一般に公開されている範囲で書いています。スクリーンショットの添付は自粛します

Xcode 11.4 からiOSシミュレータがプッシュ通知のシミュレーションをサポートしますね。

> Simulator supports simulating remote push notifications, including background content fetch notifications. 
[Xcode 11.4 Beta Release Notes](https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_beta_release_notes/)

シミュレータでプッシュ通知をシミュレーションする方法は2つありますが、両方とも有効な Apple Push Notification Service payload という以下のようなフォーマットのJSONファイルが必要になります（拡張子は `.apns` である必要があります）。

```json:test.apns
{
    "aps":{
        "alert":"Test",
        "sound":"default",
        "badge":1
    }
}
```

## 方法1：apnsファイルをシミュレータにドラッグアンドドロップする

この場合はJSONのトップレベルに `Simulator Target Bundle` を追加し、アプリの bundle identifier を含める必要があります。

```json:test.apns
{
    "Simulator Target Bundle": "YOUR_APP_BUNDLE_ID",
    "aps":{
        "alert":"Test",
        "sound":"default",
        "badge":1
    }
}
```

## 方法２：コマンドラインから送る

`simctl` を使う方法もあります。この場合 `Simulator Target Bundle` は不要です。

```console
$ xcrun simctl push <SIMULATOR_DEVICE_ID> <YOUR_APP_BUNDLE_ID> <APNS_FILE_NAME>
```


例：

```console
$ xcrun simctl push A0AF405F-FE73-45DA-8D7D-F1FE37821992 com.example.my-app test.apns
```

`SIMULATOR_DEVICE_ID` は次のコマンドで調べることができます。

```
xcrun simctl list
```

## 注意点

- この機能を試すためには、アプリがプッシュ通知に対応しており、かつ、ユーザーが通知を許可している必要があります
- この機能はあくまで **シミュレーション** なので、APNSを介したプッシュ通知のテストは別途実施したほうが良いでしょう
 

## 参考リンク

- https://stackoverflow.com/questions/60096950/how-to-send-simulated-remote-notification-to-ios-simulator
How to Uninstall and Install McAfee Antivirus on Windows 10?

<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="read-content" itemprop="articleBody">
If McAfee is acting up on your computer, reinstalling the program will likely solve the problem. Do this as soon as you experience trouble; until the issue is resolved, your computer might be sitting 
unprotected. Because they are connected to every folder on your 
computer, virus programs require a little more work to reinstall than 
most other applications. However, McAfee offers a tool to automate much 
of the process.<br />
Reinstalling McAfee is free and will likely solve any issues you are having.<br />
<h2>
How to Uninstall McAfee Antivirus From Windows 10?</h2>
Follow the steps given to <a href="https://www.mygeekshelp.com/uninstall-mcafee/">uninstall Mcafee antivirus</a> from windows 10 or mac devices.<br />
<ol>
<li>Click on the Start or Windows icon from the taskbar.</li>
<li>Click on the control panel.</li>
<li>Now, tap on programs.</li>
<li>Go to Programs and features.</li>
<li>Select the product from the list.</li>
<li>Double click on it to uninstall McAfee antivirus.</li>
<li>Restart your PC.</li>
</ol>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-H_Ey3jE7KgE/Xjx4dA_iVTI/AAAAAAAAAJg/uVcJJHeM1hEHpOjiglH9T5CQSdzAi7k1wCLcBGAsYHQ/s1600/install%2Bmcafee.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="360" data-original-width="480" height="240" src="https://1.bp.blogspot.com/-H_Ey3jE7KgE/Xjx4dA_iVTI/AAAAAAAAAJg/uVcJJHeM1hEHpOjiglH9T5CQSdzAi7k1wCLcBGAsYHQ/s320/install%2Bmcafee.jpg" width="320" /></a></div>
<div>
<br /></div>
<h2>
Reinstall McAfee Antivirus on Windows 10</h2>
<ol>
<li>Remove
 the program from Windows. To do this, go to your Control Panel (from 
the Start menu) and select "Add or Remove Programs." Select the McAfee 
software you wish to reinstall and click "Remove" or "Uninstall."</li>
<li>Run the McAfee Removal Tool. You can download the file, titled MCPR.exe, from McAfee Support (link in Resources).</li>
<li>Install
 your McAfee product from scratch. If you purchased it yourself, use the
 CD or re-download the software for free (link in Resources). If your 
Internet service provider or computer manufacturer provided the 
software, contact them for the installation file. The McAfee Support 
site provides links to contact the major companies.</li>
<li>Restart your computer.</li>
</ol>
These steps will help you to fix McAfee's antivirus problems. Just uninstall and <a href="https://www.mygeekshelp.com/reinstall-mcafee-livesafe/">install McAfee antivirus again</a>. In most of the cases, this will help you to resolve McAfee problems.</div>
</div>