OmniAICreator/Qiita-1.07M huggingface dataset:
PMP試験に出てくる第7章Project Cost Managementの4つのプロセスを覚えよう！

# Project Cost Managementとは
PMBOKの`10の知識エリア`の中の`プロジェクトコスト管理`のことである。

[PMBOKの10の知識エリア](https://qiita.com/Yumenoshima/items/0982785d1a481dfc6a27)

## PMBOKガイドのどこに出てくるか
第7章(PMBOKガイド231ページ)

## プロジェクトコスト管理の4つのプロセス
- Initiating 立ち上げ
- Planning 計画
    - (7.1) Plan Cost Management
        - 7.1のITTO
    - (7.2) Estimate Costs
        - 7.2のITTO
    - (7.3) Determine Budget
        - 7.3のITTO
- Executing 実行
- Monitor and Controlling 監視と制御   
    - (7.4) Control Costs
        - 7.4のITTO
- Closing クロージング

## まとめ
プロジェクトコスト管理の4つのプロセスがどのフェーズで使われているか覚えれば完璧だね！4つのプロセスのITTOも暗記しよう！

----
以上
CFBundleIdentifierエラーに/React/が入っている時

## React Native 61系エラー `":CFBundleIdentifier", Does Not Exist`

チーム開発にて、このエラーが発生し何日も原因を探していたが解決にいただらず苦戦していました


```
error Command failed: /usr/libexec/PlistBuddy -c Print:CFBundleIdentifier ~/Library/Developer/Xcode/DerivedData/app_app-ernaqdxhwinttmgcavvwyvidhssx/Build/Products/Debug-iphonesimulator/React/App.app/Info.plist
Print: Entry, ":CFBundleIdentifier", Does Not Exist
```

## 原因

```
ios/<app>.xcodeproj/xcshareddata/xcschemes/<app>.xcscheme
```

のスキマが変更されるみたいで

```
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "xxxxxxxxxxxxxxxxxx"
               BuildableName = "React"
               BlueprintName = "React"
               ReferencedContainer = "container:Pods/Pods.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
```

の`BuildableName`, `ReferencedContainer `が変更されているみたいなので、ビルドは問題ないが、実行ができなくなるエラーが発生します


## 解決

```
BuildableName = "libReact.a"
ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj"
```

に戻せば、実行が問題なく進むみたいです
Arduinoでサーボモータを動かす

Arduinoからシンプルにサーボモータを動かしてみたいと思います。
格安のモーターシールドを使います。

Amazonで購入した700円くらいのモーターシールドです。
https://www.amazon.co.jp/gp/product/B01H6N3VIQ/

接続はこんな感じ。
![スクリーンショット 2020-05-09 17.08.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80263/b1bc3790-ea69-2ac1-cb9e-77ef61a9f6a8.png)


ソースコードはArduino標準のスケッチ(p05_ServoMoodIndicator)を参考にしました。
ファイル＞スケッチ例＞10.StarterKit＞p05_ServoMoodIndicator

``` c++
// include the Servo library
#include <Servo.h>

Servo myServo;  // create a servo object

int angle;   // variable to hold the angle for the servo motor

void setup() {
  myServo.attach(10); // 制御するサーボの指定
  angle = 90; // 角度指定
  myServo.write(angle);
}
```

Adafruitのサイトでサーボ1は9番ピンと書いてありましたが、私が買ったボードでは10番ピンでした。
https://learn.adafruit.com/adafruit-motor-shield/faq#faq-1315669
【Flask】【Firebase】 ValueError: The default Firebase app already exists. This means you called initialize_app() ...

# はじめに
Flaskにてリクエストを投げると題のようなエラーが出た。エラー文の通り、Firebaseの初期化処理で2回目が呼ばれてしまっていることが原因。その解決方法を下記する。

# 解決方法
以下のように、初期化済みかの判定処理を入れ、初期化されていない場合は初期化を行うようにする。
2回目以降は下記if文がFalseとなり、初期化をスキップする。

```python
import firebase_admin
from firebase_admin import credentials

# 初期化済みかを判定する
if not firebase_admin._apps:
    # 初期済みでない場合は初期化処理を行う
    cred = credentials.Certificate('path/to/serviceAccountKey.json') 
    default_app = firebase_admin.initialize_app(cred)
```

# おわりに
こちらを参考。
https://stackoverflow.com/questions/44293241/check-if-a-firebase-app-is-already-initialized-in-python
PMP試験に出てくる第6章Project Schedule Managementの6つのプロセスを覚えよう！

# Project Schedule Managementとは
PMBOKの`10の知識エリア`の中の`プロジェクトスケジュール管理`のことである。

[PMBOKの10の知識エリア](https://qiita.com/Yumenoshima/items/0982785d1a481dfc6a27)

## PMBOKガイドのどこに出てくるか
第6章(PMBOKガイド173ページ)

## プロジェクトスケジュール管理の6つのプロセス
- Initiating 立ち上げ
- Planning 計画
    - (6.1) Plan Schedule Management
        - 6.1のITTO
    - (6.2) Define Activities
        - 6.2のITTO
    - (6.3) Sequence Activities
        - 6.3のITTO
    - (6.4) Estimate Activity Durations
        - 6.4のITTO
    - (6.5) Develop schedule
        - 6.5のITTO
- Executing 実行
- Monitor and Controlling 監視と制御   
    - (6.6) Schedule Control   
        - 6.6のITTO
- Closing クロージング

## まとめ
プロジェクトスケジュール管理の6つのプロセスがどのフェーズで使われているか覚えれば完璧だね！6つのプロセスのITTOも暗記しよう！

----
以上
PMP試験に出てくる第5章Project Scope Managementの6つのプロセスを覚えよう！

# Project Scope Managementとは
PMBOKの`10の知識エリア`の中の`プロジェクトスコープ管理`のことである。

[PMBOKの10の知識エリア](https://qiita.com/Yumenoshima/items/0982785d1a481dfc6a27)

## PMBOKガイドのどこに出てくるか
第5章(PMBOKガイド129ページ)

## プロジェクトスコープ管理の6つのプロセス
- Initiating 立ち上げ
- Planning 計画
    - (5.1) Plan Scope Management
        - [5.1のITTO](https://qiita.com/Yumenoshima/items/52903dacf251d5e3a3e0)
    - (5.2) Collect Requirements
        - [5.2のITTO](https://qiita.com/Yumenoshima/items/1b15b2909fca8a554b65)
    - (5.3) Define Scope
        - [5.3のITTO](https://qiita.com/Yumenoshima/items/46b82fc08851fd8f1a8e)
    - (5.4) Create WBS
        - [5.4のITTO](https://qiita.com/Yumenoshima/items/292a67a35d1610d79d43)
- Executing 実行
- Monitor and Controlling 監視と制御      
    - (5.5) Validate Scope
        - [5.5のITTO](https://qiita.com/Yumenoshima/items/a58e67ab623c98854194)
    - (5.6) Control Scope
        - [5.6のITTO](https://qiita.com/Yumenoshima/items/f06aec754e1346fb7118)
- Closing クロージング

## まとめ
プロジェクトスコープ管理の6つのプロセスがどのフェーズで使われているか覚えれば完璧だね！6つのプロセスのITTOも暗記しよう！

----
以上
WordPressのプラグイン elementor を使用した時のSSL設定が有効になっていなかった問題

#背景

ssl化したはずのwordpressで作成したサイト(トップページ)に鍵マークがついていないことに気がつき、その原因が何かを調べたので、忘却録として書きます

#原因

原因はwordpressのプラグインであるelementorでした

#解決策

デベロッパーツールを開き、Conseleを見ると、Mixed Content:~~~~ と書かれているが画像のURLはすべてhttpsから始まるurlにしていたはずなのに原因が分からず、とりあえずいろいろ調べたが、それらしきサイトを見つけることができなかったので、地道にどこが原因か探しました

結果、「wp-content/uploads/elementor/css/post-50.css」に対象(Mixed Content)のurlがあったので、それを削除したら、!マークから🔒マークに直りました

※※注意※※
プラグインを更新すると、また同じように!マークが出る
インストール権限がない場合に、MeCabからNEologdを読み込む（Windows）

#はじめに
MeCabにNEologd辞書を追加したかったが、権限がなくインストールができなかったので
ユーザー辞書で読み込んだ方法をメモ

#環境
Windows 10 64bit
MeCab 0.996 32bit

#NEologdの導入手順
##NEologdのインストール
以下のURLからNEologdをダウンロードする
https://github.com/neologd/mecab-ipadic-neologd

##csvファイルのコンパイル
###csvファイルの準備
ダウンロードしてきたmecab-ipadic-neologd-master内のseedフォルダに
csvファイルを固めたものがあるので、解凍する
一つ一つがMeCabの辞書ファイルになっているので、自分が読み込みたいcsvファイルだけ解凍する
###csvファイルのコンパイル
csvファイルを準備したら
コマンドプロンプトで以下のコマンドを入力してcsvファイルをコンパイルする

```
"C:\Program Files (x86)\MeCab\bin\mecab-dict-index" -d "C:\Program Files(x86)\MeCab\dic\ipadic" -u <ユーザー辞書を置きたい場所\ユーザー辞書名.dic> -f utf-8 -t utf-8 <csvファイルの場所\csvファイル名.csv>
```

##MeCabからユーザー辞書を読み込む
PythonファイルでMeCabからユーザー辞書を読み込む場合は
Taggerを使うときに、以下のように-uオプションでユーザー辞書を指定する
,(カンマ)でユーザー辞書を複数指定が可能

```python

import MeCab
m = MeCab.Tagger("-u hoge.dic,fuga.dic")
```

#参考
- [WindowsでNEologd辞書を比較的簡単に入れる方法ーユーザー辞書編](https://qiita.com/zincjp/items/c61c441426b9482b5a48)
- [単語の追加方法](https://taku910.github.io/mecab/dic.html)
Vue Test Utils 要素の属性値を取得する

# Vue Test Utils 要素の属性値を取得する

## やりたいこと
例えば、このようなコンポーネントをテストするときに属性値を取得する。

``` テスト対象.vue
<customComponent>
  v-model="input"
  label="メールアドレス"
  type="Email"
  place-holder="email@example.com"
  :content="formEmail"
></customComponent>
```

## やり方
以下のようでlabel属性の値を取得できる。

``` __test__/テスト対象.spec.js
import { Mount } from '@vue/test-utils'
import Component from '~/pages/テスト対象.vue' // Nuxtのディレクトリ構造前提

...
wrapper = Mount(Component)

describe('テスト対象.vueのテスト', () => {
  test('属性値の取得', () => {
    expect(wrapper.find('[type=password]').attributes().label).toBe(
      'パスワード'
    )
  })

...
```
docker rmi時に Error response from daemon: conflict: unable to remove repository reference

docker rmi時に Errorが発生

```
$ docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container 545d5fe15767 is using its referenced image fce289e99eb9
```

docker ps だと何も残っているように見えないが、、

```
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
```

docker ps -aだと残っているコンテナが見えた。

```
$ docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                       PORTS                                                          NAMES
545d5fe15767        hello-world               "/hello"                 8 days ago          Exited (0) 8 days ago                                                                       elated_einstein
```

残っているコンテナをdocker rm -f でコンテナを削除

```
$ docker rm -f 545d5fe15767
545d5fe15767
```

コンテナが削除できたことを確認

```
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
```

その後、docker rmiでイメージを削除できた。

```
$ docker rmi hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:0e11c388b664df8a27a901dce21eb89f11d8292f7fca1b3e3c4321bf7897bffe
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3
```

# 備考
docker rmi -f (コンテナID) でも削除できるようだがなるべく避ける。
コンテナ削除できない場合は、docker stop (コンテナID) でまずコンテナを停止させる。
blendファイルの中に書いたpythonスクリプトをコマンドラインから実行する

# はじめに
blender内蔵のscriptingに書いたpythonコードをコマンドラインから実行しようとして、うまく行かずにハマってました。
別ファイルで作ればよいのですが、blenderで書いて、動作確認した後に別ファイルにコピペするのが面倒で・・・。

# 確認した環境
OS : Windows10
blender : ver 2.82

# 勘違いしていたこと
scriptingで作成したスクリプトを`-P`オプションで呼び出すと思っていろいろと調べていました。
そうではなくて、起動時の自動実行スクリプトとして登録するのが正しい方法でした。

# 手順
1. Scriptingで実行したいコードを作成する。
2. ファイル名の拡張子を`.py`で保存する。
3. エディタの上側にある`登録`にチェックを入れる。
![blender_python.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497211/c7c0d925-2f0b-638d-f665-94c2ffb0f1a9.jpeg)
4. コマンドラインから以下を実行。  
```
$ blender -b -y hoge.blend
```

`-b`はバックグラウンド実行。`-y`は起動時のスクリプト実行の許可。  
起動時のスクリプト実行の許可は、blenderの設定からでもできます。
![blender_python2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497211/df709ff6-0abd-0acf-e6d0-63c732293055.jpeg)

これをするとblendファイルを開く際にスクリプトが実行されるので、実行したくない場合は`登録`のチェックをはずしておく。
GitHubを使って新規プロジェクト開発を始めるまで

## 目標
- GitHubにリモートリポジトリを作成し、開発をスタートする
- リポジトリの初期化をシンプルかつクリーンにする

## 前提
- Gitをインストールしている
- GitHubのアカウント登録が完了している
- GitHubにssh接続が可能な状態になっている

## 手順
### 0. 作業用ディレクトリを作成
このようにプロジェクトやごとにディレクトリを切るようにするとわかりやすいかと思います。
(ここは好みです。私はこうしているよ、というだけですね。)

```terminal:terminal
% pwd
/Users/YOUR-NAME
% mkdir workspace
% cd workspace
% pwd
/Users/YOUR-NAME/workspace
% ls
example-project-A         example-project-B
```
プロジェクトの作業用ディレクトリを作成し、移動。
ここではour-projectと命名します。

```terminal:terminal
% mkdir our-project
% cd our-project
% pwd
/Users/YOUR-NAME/workspace/our-project
```

### 1. GitHubの画面からリモートリポジトリを作成
ホームページまたはマイページのRepositoriesにあるNewボタンをクリックして以下の画面へ。
<img width="1440" alt="20200509_create_new_repo.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493849/5f7a19af-7e64-21ac-711a-05acdfc16df4.png">
必須であるリポジトリ名だけ入力すればOKです。ローカルのディレクトリと名前を一致させ、わかりやすくするためにour-projectと命名します。
そのリポジトリを他人に見られたくないならPrivateにしておきましょう。ここではPublic。
下の3つは、チェックなし・None・Noneでいいかと思います(README.mdと.gitignoreはのちに作成すればいいです)。

### 2. ローカルリポジトリを作成

```terminal:terminal
% git init
Initialized empty Git repository in /Users/YOUR-NAME/workspace/our-project/.git/
```

### 3. リモートリポジトリを登録
HTTPSの場合

```terminal:terminal
% git remote add origin https://github.com/YOUR-GITHUB-USERNAME/our-project.git
```

SSHの場合

```terminal:terminal
% git remote add origin git@github.com:YOUR-GITHUB-USERNAME/our-project.git
```

登録したリモートリポジトリの確認

```terminal:terminal
% git remote -v
origin  git@github.com:YOUR-GITHUB-USERNAME/our-project.git (fetch)
origin  git@github.com:YOUR-GITHUB-USERNAME/our-project.git (push)
```

### 4. 最初のコミット ~ プッシュ
最初のコミットはREADME.mdを作成するだけのシンプルなものにします。
コミットメッセージはわかりやすければ何でもいいです("initial commit"とか"最初のコミット"とか)。

```terminal:terminal
% echo "# our-project" >> README.md
% git add README.md
% git commit -m "first commit"
% git push -u origin master
```
GitHubのリモートリポジトリを確認すると見出しが追加されたREADME.mdが表示されているはずです。

これでリポジトリの初期化は完了、あとは.gitignoreを適切に設定したり、developやfeatureブランチを切って開発を進めていきます。

## 参考
- [ローカルのプロジェクトをgit initしてからGitHubにpushするまで] (https://blog.urouro.net/entry/2012/12/22/164157)
Tera Term Menuにシリアルポートの接続を追加する

# はじめに

Tera Term Menuに登録しておくと「タスクトレイアイコンをクリック→メニューから選択」という簡単な手順で接続できるので便利です。

- Tera Term Menuって何？
    - タスクトレイに常駐するTera Termのランチャーです
- Tera Term Menuの導入方法は？
    - Tera Term本体のインストール時のオプション指定によりインストールできます
    - 導入に関する詳細はここでは説明しません

# 手順

## リスト編集を開く
タスクトレイのTera Term Menuのアイコンを右クリックして、メニューから`リスト編集`を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20934/533b4be7-93ec-9541-df89-4c78ad610b88.png)

## リスト編集
- ウィンドウ右側、`設定内容`の`登録名`欄にわかりやすい名前を設定する
- `起動の種類`は`起動のみ`を選択する
- `詳細設定`ボタンをクリックして詳細設定ウィンドウを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20934/ad73dea7-2181-b122-92de-9e5f23344cf3.png)

## 詳細設定
- `オプション`欄にポート番号と速度を指定するコマンドラインオプションを指定する
  - たとえば、COM5に115200で接続する場合は`/C=5 /BAUD=115200`とする
  - その他のオプションを指定する場合は、[Tera Termのヘルプ](https://ttssh2.osdn.jp/manual/4/ja/commandline/teraterm.html)などを参考に、この欄に設定する  
   （例えば、指定されたシリアルポートが存在しない場合にエラーとせず接続されるまで待つ`/WAITCOM`など）
- `OK`ボタンをクリックして詳細設定ウィンドウを閉じる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20934/3ada0ff3-0525-aa10-e691-e1365cf2d7ee.png)

## 登録
- リスト編集ウィンドウ中央上の左向き三角形のボタンをクリックして、接続設定を登録する
- リスト編集ウィンドウはウィンドウ右上の×ボタンをクリックして閉じる

# その他
登録を削除したい場合は、`リスト項目`から削除したい項目を選択した状態でリスト編集ウィンドウ中央下の右向き三角形のボタンをクリックする。
slack botで特定の問合せ（ワード）に反応して自動返答を返す方法（ノンプログラミング）


**slack bot**の設定をすることで、特定の問合せ（ワード）に対して、自動返答をするメッセージを簡単（ノンプログラミング）に設定する方法メモ

業務用途としては、
あの資料どこにあったっけ？
といった場合の**資料やリンク先などをあらかじめ登録**しておくことで、お気に入りの代わりに使えること。そしてお気に入りと違って、同じワークスペースにいるメンバであれば、全員で利用可能と言う点がメリット。
ただし参照先資料のURLなどに変更が入れば、都度更新必要なので多少のメンテコストが必要。

## slack bot設定手順
こちらの**[ワークスペースのカスタマイズ](https://my.slack.com/customize/slackbot)**へアクセスする

以下のように、
<img width="492" alt="slack bot 自動応答分の設定_経費.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242038/e50732b2-8c62-5e02-09f7-30f5410c7bc6.png">

１）botに反応させるワードを設定（間に **,** を入れることで複数ワードを設定可能）
２）botに返答させるワードを設定（改行文字 **\n** を挿入すると、複数行の返信を追加可能。→通常は１行だけの返答になる）
３）レスポンスを保存する


## 応答イメージ
<img width="471" alt="slack bot 経費.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242038/b41a9fc5-82d3-9f8a-a4c5-e3b62de41dee.png">


## まとめ
今回の対応は、パブリックチャンネルやプライベートチャンネルで送信したメッセージに反応するので、関係ない会話の中で**経費**と出た場合にも自動応答されてしまうのが課題点です。対策としてワードを**bot経費**とかしておいて回避する方法がありますが、毎回botと打つのはちょっとなぁ。と言う感じもします。

もう少し進化させるとbotの自動応答をする専用チャンネルを用意して、そこで発言したワードのみに返答させる。といった技もありますが、今のところGASなどでプログラムを組む必要が出てくる為、若干ハードル上がります。(実は簡単に設定できる！とか言う情報がありましたらコメント頂けると助かります！）
アウトプット　5月9日（2）　Ruby入門　第４章

★は、実現したい内容に対して対応する構文や処理を指す。

【制作物】
RGBカラーを変換するプログラム

【学習内容】
・配列
・ブロック
・範囲（Range）
・様々な繰り返し処理
・繰り返し処理ようの制御構造

【配列とは】
・複数のデータをまとめて格納するオブジェクト
・String型、Integer型など異なるデータを一緒に格納可
→[] #空の配列を作る
→[a1, a2, a3] #3つの要素が格納された配列を作る

★配列に新しい値を入れたい★
構文：配列[添字]　＝　新しい値

例：
a = [1,2,3]  ※番号は、0,1,2の順番
a[1] = 20
a #=> [1,20,3]

★配列内の特定の位置にある要素を削除したい★
delete_atメソッド

例：
a = [1,2,3]  #2番目の要素を削除する(削除した値が戻り値になる)
a.delete_at(1) #=> 2
a #=> [1,3]
※存在しない添字を指定するとnilが戻り値となる

【ブロックとは】
・メソッドの引数として渡せる処理の塊のこと

★配列の要素を最初〜最後まで順番に取り出したい★
・eachメソッド
★↑で取り出した要素をどう処理するのか？を記述したい★
・ブロック（do〜endまで）が実際の処理を行う
・ブロックの内部は、Rubyのコードを自由に記述できる
・ブロック内で設定した変数（ローカル変数）は、そのブロック内でしか定義できない
（Ref：https://qiita.com/mary_new_programmer/items/4c4353c3d1df7242f515）

例：eachメソッド

 numbers.each do |n|　
  sum += n
 end

#|n|はブロック引数で、eachメソッドから渡された配列の要素が入る

★指定した値に一致する（配列の）要素を削除したい★
・deleteメソッド
・delete_ifメソッドとすることで、ある条件のもとで削除させることも可能

【do...endと{}】
簡潔な記述方法
（before）
numbers = [1,2,3,4]
sum = 0
numbers.each do |n| sum += n end
sum

（after）
numbers = [1,2,3,4]
sum = 0
numbers.each {|n| 
 sum += n 
}
sum

【ブロックを使う配列のメソッド】
★各要素に対してブロックを、評価した結果を新しい配列にして返したい★
・map/collectメソッド（エイリアスメソッド：collect）

★各要素に対してブロックを評価し、その戻り値が真の要素を集めた配列を返して欲しい★
・selectメソッド（エイリアスメソッド：find_all）

★ブロックの戻り値が真になった最初の要素を返して欲しい★
・findメソッド（エイリアスメソッド：detect）

★たたみ込み演算を行って欲しい★
・injectメソッド（エイリアスメソッド：reduce）

【範囲（Range)】
★値の範囲を表すオブジェクトを作成したい★
・最初の値..最後の値（最後の値を含む場合）を記述
・最初の値...最後の値（最後の値を含まない場合）を記述
→Rangeクラスのオブジェクトになる

例：
1..5
1...5
'a'..'e'
'a'...'e'

★配列や文字列の一部を取り出したい★
例：
a = [1,2,3,4,5]
a[1..3] #=>[2,3,4]

★n以上m以下（未満）の判定をしたい★
・不等号を使うケースがあるが、範囲オブジェクトを使うとラク

例：
def liquid?(temperture)
 #0度以上100度未満なら液体と判定したい
(0...100).include?(temperture)
end

liquid(-1) #=>false
liquid(99) #=>true
liquid(100)#=>false

例：case文との併用
※case〜when構文：一つの値に対して複数の候補の中で一致するものを返したい
（特定のオブジェクトが持つ値がどの値に一致するのかを調べたい）

def charge(age)
 case age
 when 0..5
  0
 when 6..12
 300
 when 13..18
 600
 else 1000 #それ以外
 1000
end
charge(3) #=> 0
charge(18) #=> 600

★範囲オブジェクトを配列（＝別オブジェクト）に変換させたい★
・to_aメソッド
例：
numbers = (1..4).to_a
sum = 0
numbers.each { |n| sum += n }
sum #=> 10
※ただし範囲オブジェクトに対して直接eachメソッドを呼び出すことも可能

★期待する結果、テスト対象となる値や式を検証したい★
・assert_equal 期待する結果、テスト対象となる値や式
Window 10 で Vagrant インストール

#環境
1. Windows 10 Pro バージョン 1909 OSビルド 18363.778
1. VirtualBox 6.1.6-137129
1. Vagrant 2.2.9

VMの準備はこちらを参照 → [Windows 10 で VirtualBox インストール](https://qiita.com/reo3/items/2f388dfb78b5007ac2d4)

#準備
1. 本家サイトから最新インストーラをダウンロード → [Vagrant 本家サイト](https://www.vagrantup.com/)
Download x.x.xをクリック
![コメント 2020-05-09 145038.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/7f84a436-0ed7-9259-8ffb-8d5400fda080.jpeg)
Windows 64-bitをクリックしダウンロード
![コメント 2020-05-09 145142.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/d6dbfe12-6179-c4ec-8033-54f625961c3b.jpeg)

#Vagrant のインストール実行
1. インストーラを起動しNext
![コメント 2020-05-09 145238.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/24179d7e-b3d3-f6b9-630f-d58e142dd4f0.jpeg)

1. Assept にチェックを入れNext
![コメント 2020-05-09 145325.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/7ff6996c-26b3-4a1c-f41f-9c2f54fdb25d.jpeg)

1. インストール先を指定しNext
![コメント 2020-05-09 145347.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/3e4159df-fe3f-fb44-429a-32bf423475a6.jpeg)

1. インストールを実行したいので、Install
![コメント 2020-05-09 145405.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/a8cea1fe-0663-c065-6b4c-e46c48418443.jpeg)

1.インストール完了画面が表示されるので、Finish
![コメント 2020-05-09 145731.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/42a51b61-0d92-0b6e-8466-fb5d4e254f76.jpeg)

1. パソコンの再起動を求められるのでYes

![コメント 2020-05-09 145751.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/1234bfa2-f37e-4ab7-7595-0d8727288904.jpeg)

以上
What Are The Benefits Of Androdna Testo Boost?

AndroDNA Testo Boost  is seen all around the world that numerous guys are whining about not having the option to contend well in bed. This identifies with the issue that guys have with their hormonal wellbeing as well. The guys can't fulfill their accomplices in bed because of a portion of the other medical issues that they need to endure. The guys are experiencing the bringing down of testosterone level and this is for the most part because of the absence of legitimate sustenance. Individuals are experiencing the loss of diet because of work and hence the guys have brought down wellness. In this manner they experience the ill effects of issues like a littler size, less hard erection, absence of endurance, lesser length, and so on. Hence, every one of these issues should be tended to. AndroDNA Testo Boost happens to be the fix that individuals can trust. This item causes the guys to become what they need to be and consequently be at their best potential in bed. This item has helped a large number of guys at this point to improve execution in bed and in this manner fulfill their accomplices. It expands the testosterone level in the guys and furthermore fixes other sustenance based issues. Accordingly, the guys get restored of the considerable number of issues that they grumble of in bed after they utilize this great enhancement. Click Here https://hyalurolift.fr/androdna-testo-boost/
Error: ENOENT: no such file or directory, open '{実行パス}/assets/protobuf/api.proto'の対応

# 問題
```javascript
Error: ENOENT: no such file or directory, open '/{実行パス}/assets/protobuf/api.proto'
    at Object.openSync (fs.js:458:3)
    at Object.readFileSync (fs.js:360:35)
    at fetch (webpack:///./node_modules/protobufjs/src/root.js?:162:34)
    at Root.load (webpack:///./node_modules/protobufjs/src/root.js?:196:13)
    at Root.loadSync (webpack:///./node_modules/protobufjs/src/root.js?:237:17)
    at Object.loadSync (webpack:///./node_modules/protobufjs/src/index-light.js?:69:17)
    at eval (webpack:///./node_modules/@grpc/proto-loader/build/src/index.js?:230:37)
    at Object../node_modules/@grpc/proto-loader/build/src/index.js (/{実行パス}/index.js:1035:1)
    at __webpack_require__ (/{実行パス}/HomeSpeeer/index.js:20:30)
    at eval (webpack:///./node_modules/google-gax/build/src/grpc.js?:18:25) {
  errno: -2,
  syscall: 'open',
  code: 'ENOENT',
  path: '/{実行パス}/assets/protobuf/api.proto'
}

```

# 対応
## 依存ファイルの外だし
[webpack-asset-relocator-loader](https://github.com/zeit/webpack-asset-relocator-loader)を使い、
ビルド出力先に、asset配下を出力する。

## 実行パスにコピー
node ./実行モジュールで、そのパスから外だししたファイルを読み込める。
Vue,Herokuリロードエラー解消

#備忘録
vueで作成したアプリをherokuにデプロイする際に、画面リロードするとエラーになる。
**SPA**を導入した方ならこの問題に出会すと思うので、自分の備忘録としても残しておきます。

#解決

```service.js
const express = require('express');
const path = require('path');
const history = require('connect-history-api-fallback');

const app = express();

const staticFileMiddleware = express.static(path.join(__dirname + '/dist'));

app.use(staticFileMiddleware);
app.use(history({
  disableDotRule: true,
  verbose: true
}));
app.use(staticFileMiddleware);

app.get('/', function (req, res) {
  res.render(path.join(__dirname + '/dist/index.html'));
});

var server = app.listen(process.env.PORT || 8080, function () {
  var port = server.address().port;
  console.log("App now running on port", port);
});
```

アプリのトップディレクトリに作成して、読み込ませたら解決。
他のサイトでも似たようなはいっぱいあるが、結果のこのソースで自分の場合は解決。
freee API 経由で領収書の画像データを登録する

freee の API 経由で、取引データの登録を行うコードは時折見かけますが、領収書の登録を行うコードはあまり見かけない。

そこで、領収書（画像データ）を会計freeeに登録するサンプルコードを書いてみました。

## 環境

Mac OS
Node.js v10.19.0



## リクエストの書式を確認

freee の開発者向けサイト 「Developers Community」 からAPIへのリクエストの書式を確認する

- 登録したfreee アプリを使ってアクセストークンを取得
- Developers Community にトークンを読み込ませる
- APIリファレンスからテストコール

登録テストに使う事業所の company_id を確認するエンドポイントは [「companies」](https://developer.freee.co.jp/docs/accounting/reference#/Companies/get_companies)
領収書の登録用エンドポイントは[「receipts」](https://developer.freee.co.jp/docs/accounting/reference#/Receipts/create_receipt)。

領収書を登録するCURLは以下の通り

```bash
curl -X POST "https://api.freee.co.jp/api/1/receipts" -H "accept: application/json" -H "Authorization: Bearer アクセストークンの文字列" -H "Content-Type: multipart/form-data" -F "company_id=事業所のID" -F "description=" -F "issue_date=" -F "receipt=@画像ファイル名;type=image/jpeg"
```


## 事前準備

Desktopに作業用のディレクトリを作成

```
mkdir imagepost
cd imagepost
```

npm init してパッケージをインストールする。今回使うのは

- fs
- form-data
- axios

```
npm init
npm install fs --save
npm install form-data --save
npm install axios --save
```

## 実際のコード

```javascript
const fs = require('fs');
const FormData = require('form-data');
const axios = require('axios');
const auth_token ='freee API のアクセストークン';
const company_id = '事業所ID';


const url = `https://api.freee.co.jp/api/1/receipts`; //領収書を登録するエンドポイント
const imagePath = `./images/receipt_1.jpg`; //画像のパス
const file = fs.createReadStream(imagePath);

const form = new FormData();
form.append('receipt', file);
form.append('company_id', company_id);

const config = {
    headers: {
        'accept' : 'application/json',
        'Authorization' : 'Bearer ' + auth_token,
        'Content-Type' : 'multipart/form-data',
        ...form.getHeaders(),
    }
}

axios.post(url, form, config)
    .then(res => console.log(res.data)) 
    .catch(err => console.log(err)); 
```

実行すると、無事に領収書が登録されました。

<img width="400" alt="スクリーンショット 2020-05-09 15.53.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83767/b5a586b8-2e5f-b62a-be2b-4574e1f2c0a2.png">

ポイントとしては、領収書の画像を FormDataに追加する時に、要素名を「reciept」と指定するところあたりでしょうか。

## 参考情報

https://qiita.com/n0bisuke/items/1d1cfc330997f93e2ee8
https://qiita.com/kazu_death/items/a94ac4ae4d71928920c5
https://github.com/axios/axios#form-data


のびすけさんも書いていましたが、ブラウザから画像を multipart/form-data でポストする例は多いけれど、サーバー側からポストする例は少ない。

上記の記事は大変参考になりました。
TECH CAMP 5週目

Chat-spaceの実装が一段落し、次はそのデプロイに向けて学習を行いました。そして課題は完了。いよいよ自分だけの力でアプリケーションを作る時がきました。

【学習内容】
・サーバーの基礎知識
・AWS
・個人アプリ制作

実は私、前職は工場で働いていました。実際に製品を作るラインに約12年、管理者になって約1年、そして別の工場に出向になってそこで管理職として3年。出向先の工場では主に課長職とTCD（Total cost down）担当、QCC（Quality control circle）教育担当に従事し、原価低減活動、品質向上活動の取りまとめや社員教育を行なってきました。
よく「生産性」という言葉を耳にしますが、工場なんかではかなりシビアに数値でのやり取りが行われます。作業における社員の歩く秒数さえもストップウォッチで計測し、その時間を1秒でも縮めようと努力します。そしてその積み重ねが例えば残業時間30時間/月が0時間/月になったりと、会社にとって大きな利益へと繋がっていきます。それは”急いで作業をやれ”ではなく仕組みや手順の観点から改善を行います。
なので、「生産性」という言葉を聞いたときはいろんな数字が頭を駆け巡り、アイデアを探しワクワクしてきます（笑）そのワクワク感を形にしてくれるプログラミングに出会った出向先の会社には今でも感謝しています。

**・サーバーの基礎知識**
まず、サーバーの必要性、役割を学びます。その上でIPアドレス、WANとLAN、ドメインとDNS、ポート、WEBサーバー、HTTPの基礎を学習します。
次にサーバ向けによく利用されているOSであるLinuxについて学びます。Linuxの特徴としては、以下の点が挙げられます。
①オープンソースであり、誰でも自由に無償で利用できる
②品質の高い多くのソフトウェアが利用できる
③世界中でサーバ用途として広く利用されているため信頼性が高い
④操作を自動化するための仕組みが用意されており、サーバの運用が行いやすい

そして次にSSHについて学習。SSHとは、暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコルのことです。利用するメリットとしては以下の点が挙げられます。
①通信を盗聴される危険性を回避して、安全に操作ができる
②サーバ上でのファイル操作、設定ファイルの編集ができる
③データのバックアップをしたいとき、サーバ上で圧縮（ZIP）して、ファイルの一括ダウンロードできるので、アップロード・ダウンロードの大量ファイルの時間短縮ができる

実際の作業はこの後のAWSのカリキュラムで実施しました。

**・AWS**
いよいよChat-spaceのデプロイ作業です。以下の順序で進めます。
①クラウドについての基礎知識を学習
②AWSのアカウント作成
③EC2インスタンスの生成
④Linuxサーバ構築
⑤MySQLの設定
⑥Railsを起動
⑦Nginx経由でRailsにアクセス
⑧Capistranoによるデプロイ作業の自動化
⑨C3導入

まず、なぜWebアプリケーションを利用できるのか、という事とデプロイするまでの流れ、クラウドを利用するメリットを理解します。そしてAWSのアカウントを作成し、そのサーバのひとつであるEC2インスタンスの生成し、環境構築の為の様々なツールをインストールしました。次にMySQLの設定と動作確認。そしてついにデプロイ作業を行い全世界に公開！
この間、記述ミス等で躓く事もありましたがなんとか完了しました。しかしまだ終わりではありません。WebサーバであるNginxを導入します。NginxとはWebサーバの一種で、ユーザーのリクエストに対して静的コンテンツの取り出し処理を行い、そして動的コンテンツの生成をアプリケーションサーバに依頼するためのものになります。エンジンエックスと読みます。
そして、ここまでは手動で行なってきたデプロイ作業をCapistranというツールを使用し自動で行えるようにします。これでデプロイ時のコマンド操作がかなり楽になりました。
最後に、AWSのS3というストレージサービスを導入します。Chat-spaceで投稿された画像についてはそこに保存されるように設定します。

実際に本番環境で機能を確認。そしてメンターへGithubのissueを用いて確認してもらい、無事LGTMをもらいました。いやー、嬉しかったですね。

**・個人アプリ制作**
さて、ここからは今まで得た知識を活用し、さらにそれを発展させて個人アプリを作っていきます。
工程の大枠としては、
①構想・計画立案
②設計
③開発
④テスト
⑤デプロイ
とし、5月19日の発表会までに③を完了させ、披露できるようにしようかと考えています。

今週で①、②は完了しました。①でまず構想を立て、必要なタスクを洗い出しひとつひとつに納期を設定していきました。タスク管理は[Trello](https://trello.com/ja)を使用しています。
そして、②の設計です。各ページのデザイン設計とデータベース設計を実施。設計といってもノートに手書きですが‥。データベースはテーブル同士のリレーションに注意しながら作成。現在は③の開発へと駒を進めています。
合計でビューが6つ必要なので、苦手なフロントがスピーディにできるかどうかですね。ちなみにhamlを導入しています。

個人アプリの中身としては幼稚園の出欠簿アプリです。保護者の欠席の連絡、教諭の出欠簿としての役割を担うアプリケーションを作成していきます。妹が幼稚園の先生をしているのですが、聞いたら電話連絡＆紙の出欠簿に手書きでやっているそうです（まあまあ良い私立の幼稚園なのに‥。幼稚園によってはメールやアプリ管理をしているところもあるようです）。

こういうアプリを活用しムダ・ムラを無くすことが「生産性を上げる」ことだと思います。気合で仕事をこなすことじゃないです（笑）
無効なユーザー登録に対するテスト

##はじめに
Railsチュートリアル7章「リスト7.23：無効なユーザー登録に対するテスト」のコードの解説です。

ユーザー登録ボタンを押したときに (ユーザー情報が無効であるために) ユーザーが作成されないことを確認します。

##コード

```ruby:test/integration/users_signup_test.rb
require 'test_helper'

class UsersSignupTest < ActionDispatch::IntegrationTest


  test "invalid signup information" do
    get signup_path
    #getメソッドでユーザー登録ページにアクセス
   
    assert_no_difference 'User.count' do
    #User.countが変わったらエラーを出す。
      post users_path, params: { user: { name:  "",
                                         email: "user@invalid",
                                         password:              "foo",
                                         password_confirmation: "bar" } }
      #無効なユーザーデータをPOSTする
      #正常な場合はUser.countは変わらずtrueとなる。
    end
    assert_template 'users/new'
    #サインアップに失敗した時に再度ユーザー登録画面になることを確認。
  end
end
```
ベクトルタイルから画像タイルのバッチレンダラのアイディア

[kokoromi](https://github.com/optgeo/kokoromi) で SIDS のベクトルタイルを作っていますが、相互運用性のために画像タイルを用意する方法について考えてみました。

現在取り組んでいる SIDS の特徴は、それほど面積が大きくなく、タイル数が少ないことだと思います。

この規模であれば、バッチ処理で画像タイルを生産し、アップロードしてしまう方が効率的でしょう。

バッチ処理で画像タイルを生産するための方法のアイディアを書き留めておきます。

1. Node Mapbox GL native を用いて画像タイルをオンデマンドにレンダリングするための基本的なコードは、すでに https://github.com/un-vector-tile-toolkit/carbon/blob/master/index.js にあります。
2. バッチ処理にするためには、ベクトルタイルのパッケージ tiles.mbtiles に含まれるタイルを列挙すれば良さそうです。このためには、Tippecanoe に同梱されている `tippecane-enumerate` が使えるでしょう。`tippecanoe-enumerate tiles.mbtiles` の結果をパイプラインして画像タイル生成プログラムに入れられれば良さそうです。

とりあえず以上です。これから適宜書き加えるかもしれません。
PMP試験に出てくる(4.7) Close project or PhaseのITTOを覚えよう

# (4.7) Close project or Phaseとは
プロジェクト統合管理の7つのプロセスにある`プロジェクト又はフェーズのクローズ`プロセスのこと

- [プロジェクト統合管理の7つのプロセス](https://qiita.com/Yumenoshima/items/81eab7a0000302341abd)

## (4.7) Close project or PhaseはPMBOKガイドのどこに出てくるか
PMBOKガイド`121ページ`の`4.7`に出てくるよ！

# ITTOとは
プロセスに対するインプット、ツールと技法、アウトプット(成果物)!

## (4.7) Close project or PhaseのITTOのI(インプット)
- Project charter
- Project management plan
    - All components
- Project douments
    - Assumption log
    - Basis of estimates
    - Change log
    - Issue log
    - Lessons learned register
    - Milestone list
    - Project communications
    - Quality control measurements
    - Quality reports
    - Requirements documentation
    - Risk register
    - Risk report
- Accepted deliverables
- Business documents
    - Business case
    - Benefits management plan
- Agreements
- Procurement documentation
- Organizational process assets


## (4.7) Close project or PhaseのTT(ツールと技法)
- Expert judgement
- Data analysis
    - Document analysis
    - Regression analysis
    - Trend analysis
    - Variance analysis
- Meetings

## (4.7) Close project or PhaseのO(アウトプット)
- Project documents updates
    - Lessons learned register
- Final product, service, or result transition
- Final report
- Organizational process assets updates


# まとめ
(4.7) Close project or PhaseプロセスのITTOを覚えて、インプットとアウトプットの成果物テンプレートも押さえよう！ 

----
以上
Kotlinのクラスメモ

kotlinのクラスのコンストラクタは複数種類があり、オーバーロードやオーバーライドに対しても書き方が若干変わる、その上、複数のクラスの種類がありよく混乱するのでまとめてみました。

# クラスの種類

## 通常クラス
```kotlin
calss Clazz{
// 処理
}
```
kotlinはデフォルトではfinal 扱いとなるため、
継承およびオーバーライドする場合はopen演算子をつけます。

## 抽象クラス
```kotlin
abstract class Master{
    abstract var value:Int
    abstract fun method()
}

class Clazz(value: Int) : Master() {
    override var value = value * 2
	override fun method(){println("hello")}
}
```
abstract をつけることで抽象クラス、抽象オブジェクトとして宣言します。
この場合は初期化や関数の実装を行うことができません。

## interface 
```kotlin
interface Master{
    var value:Int
    fun method(){}
}

class Clazz(value: Int) : Master {
    override var value = value * 2
	override fun method(){println("hello")}
}
```
interface は変数の宣言、関数の処理の実装まで行えるクラスです。
またinterfaceはデフォルトでメンバ全てがopenとなるので、継承先でオーバーライドが行えます。


# プライマリーコンストラクタ
書き方

```kotlin
class Clazz(value: String){
    val test = value // primary constructor
} 
```

変数の宣言時に初期化してしまうコンストラクタです。
このコンストラクタが一番に実行されます。

## オーバーライド
このプライマリーコンストラクタを弄ることで継承先のクラスのコンストラクタを弄ることができます。

```kotlin
open class Master(value: Int){
    open val value = value
}

class Clazz(value: Int) : Master(0) {
    override val value = value * 2
} 
fun main() {
    println(Master(1).value)
    println(Clazz(1).value)
}
```

# セカンダリーコンストラクタ

```kotlin
class Clazz{
    val test: String
    constructor(test:String){// secondly constructor
        this.test = test
    }
}
```


## オーバーロード
```kotlin
class Clazz{
    val test: String
    
    constructor(test:String){
        this.test = test
    }
    // overload
    constructor(test:Number){
        this.test = test.toString() 
    }
} 
fun main() {
    val clazz = Clazz(1)
    println(clazz.test)
}
```

# まとめ
java とはまた違ったルールやオブジェクト、書き方があるため、結構混乱します。
また、enum や sealed など書いていないものもあるので、ドキュメントを覗いてみてください。
子要素をfloatさせたら親要素のheightがなくなってしまった時

headerのレイアウト等でよくあると思うのですが、
HPタイトルを左寄せにさせようと、
タイトルにfloatを掛けたら親要素（ヘッダーのコンテナなど）のheightがつぶれてしまった！
なんて現象、float怖い！と私は思ってました。

floatは「浮く」という意味で、
子要素にfloatかけると、親要素が認識できないところに子要素が浮いてしまって
親要素が子要素を認識できづにheightが潰れるみたいです。

親要素の子要素ネグレクトを防ぐために
floatがかかった子要素の兄弟タグにclearプロパティをつける方法があります。

以下参考

###子要素にfloatがかかってない状態 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528355/a610fbb5-9d0a-26ee-9bcb-fc4901eba752.png)

```html:index.html
 <div id="parent">
    親要素です
    <div id="child">
    子要素です
    </div>
 </div>
```

```css:style.css
#parent{  /*親要素*/
  background-color: aqua;
  width: 100px;
  margin: 0 auto;
}
  #child{  /*子要素*/
    background-color: pink;
    width: 70px;
    height: 70px;
  }
```

###子要素にfloatを掛けると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528355/cd81c6b9-6f91-bc27-7336-895810f560cf.png)

親要素がつぶれてる！！！

```css:style.css
#parent{  /*親要素*/
  background-color: aqua;
  width: 100px;
  margin: 0 auto;
}
  #child{  /*子要素*/
    background-color: pink;
    width: 70px;
    height: 70px;
    float:left;       /*👈追加*/
  }
```

###子要素の兄弟要素にfloat解除専用要素を追加して『clearプロパティ』をつける

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528355/836c45dd-8413-e971-0293-a66e57a2827a.png)

```html:index.html
 <div id="parent">
    親要素です
    <div id="child">
    子要素です
    </div>
　　<div id="clear"></div>   <!--👈 追加 -->
 </div>
```

```css:style.css
#parent{  /*親要素*/
  background-color: aqua;
  width: 100px;
  margin: 0 auto;
}
  #child{  /*子要素*/
    background-color: pink;
    width: 70px;
    height: 70px;
    float:left;       
  }
  #clear{  /*子要素*/
    clear:both      /*👈追加*/
  }
```



人間の親子関係みたいで言語開発者のユーモアを感じます。
参考になればうれしいです。
Fishで月初､月末

周期の計算機をFishで書いたときに使ったので､
Current date: 09 May 2020

```shell:今月初
date '+%Y%m01'
```
```shell:来月初
date '+%Y%m01' -d (echo (date '+%Y%m01') 1month)
```
```shell:今月末
date '+%Y%m%d' -d (echo (date +'%Y%m01') 1 days ago + 1month)
```
```shell:来月末
date '+%Y%m%d' -d (echo (date +'%Y%m01') 1 days ago + 1month)
```
```shell:先月末
date '+%Y%m%d' -d (echo (date +'%Y%m01') 1 days ago)
```
来月の一日から1引くわけだ､､へぇ
dateコマンド...
きれいに日だけ取るには `awk '$0 = substr($1, 7)'`にぱいぷでわたすとか？
PMP試験に出てくる(4.6) Perform Integrated Change ControlのITTOを覚えよう

# (4.6) Perform Integrated Change Controlとは
プロジェクト統合管理の7つのプロセスにある`統合変更管理`プロセスのこと

- [プロジェクト統合管理の7つのプロセス](https://qiita.com/Yumenoshima/items/81eab7a0000302341abd)

## (4.6) Perform Integrated Change ControlはPMBOKガイドのどこに出てくるか
PMBOKガイド`113ページ`の`4.6`に出てくるよ！

# ITTOとは
プロセスに対するインプット、ツールと技法、アウトプット(成果物)!

## (4.6) Perform Integrated Change ControlのITTOのI(インプット)
- Project management plan
    - Change management plan
    - Configuration management plan
    - Scope baseline
    - Schedule baseline
    - Cost baseline
- Project documents
    - Basis of estimates
    - Change log
    - Requirements traceability matrix
    - Risk report
- Work performance reports
- Change requests
- Enterprise environmental factors
- Organizational process assets

## (4.6) Perform Integrated Change ControlのTT(ツールと技法)
- Expert judgement
- Change control tools
- Data analysis
    - Alternatives analysis
    - Cost-benefit analysis
- Decision making
    - Voting
    - Autocratic decision making
    - Multicriteria decision analysis
- Meetings

## (4.6) Perform Integrated Change ControlのO(アウトプット)
- Approved change requests
- Project management plan updates
    - Any component
- Project documents updates
    - Change log

# まとめ
(4.6) Perform Integrated Change ControlプロセスのITTOを覚えて、インプットとアウトプットの成果物テンプレートも押さえよう！ 

----
以上
Windows 10 で VirtualBox インストール

2020.5.9時点の情報です。
# 環境
1. Windows 10 Pro バージョン 1909 OSビルド 18363.778
2. VirtualBox 6.1.6-137129

# 準備
1. 本家サイトから最新インストーラをダウンロード → [VirtualBox 本家サイト](https://www.virtualbox.org/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/3c9d95af-43cf-3dff-85c9-c3084c11625a.png)

# VirtualBoxインストーラの実行

1. インストーラを起動しNext
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/1483fe14-c4dd-7609-2b47-1d1d62fb9397.png)

1. インストールフォルダを任意で変更しNext（変更無しでもOK）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/39eed61a-60f5-7909-56e9-2fa5473c9ac8.png)

1. 設定は変えずにNext
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/4cc9a189-9508-8392-249d-ae48d1efebc3.png)

1. インストール警告画面は問題なければNext
<details><summary>念のためGoogle翻訳</summary>
警告：ネットワークインターフェース
Oracle VM VirtualBox 6.1.6ネットワーク機能をインストールすると、ネットワーク接続がリセットされ、一時的にネットワークから切断されます。
今すぐインストールを続行しますか？</details>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/d91c46dc-b615-d78b-77cc-bb034ab9f53f.png)

1. インストール実行したいので、Install
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/7df6091f-c944-58f9-e13e-1ac5140a6d5c.png)

1. インストール完了画面が表示されますので、Finish
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/10e7531d-e951-b9f5-abf9-f68825e4a745.png)

1. Oracle VM VirtualBox マネージャーが起動されますので閉じて終了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347923/3fa48eab-8aaa-419a-e918-ea7e5b8a80d1.png)

以上になります。
【Rails】アソシエーション　違う名前で呼び出す

##目的
アソシエーションを利用して、違う名前で呼び出した方がわかりやすい
けど、どう書いたらいいかわからない
そんな時のオプション、class_nameについてまとめます。

## class_nameオプション
関連を設定するモデルクラス名を指定

利用場面としては、関連名と参照先のクラス名を変えたい時に使う


```ruby:model/event.rb
class Event < ActiveRecord::Base

belongs_to :user
has_many :comments

end
```
上記はイベントがユーザーに属するぞと
書いてあります。

したがって

    @event.user

という感じで、ユーザーをメソッドで呼び出すことができるのですが

.userをここはオーナーと書いた方が意味が通じやすい、というケースは下記のように書き換えられます。

```ruby:model/event.rb
class Event < ActiveRecord::Base

belongs_to :owner, class_name: 'User'
has_many :comments

end
```

これで下の記述でも使えるようになります。

    @event.owner
Rasberry PI 4にカメラモジュールを取り付けてライブカメラにしてみた 組み立て編

# Rasberry PI 4

RasberryPIにカメラモジュールを取り付けてライブカメラにしたのでまとめる。

[設定はこちら](https://qiita.com/T-Shi/items/2888a74443c133f6cc10)

[Rasberry PI 4B](https://www.amazon.co.jp/%E3%83%A9%E3%82%BA%E3%83%99%E3%83%AA%E3%83%BC%E3%83%91%E3%82%A44-%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%83%A2%E3%83%87%E3%83%ABB-Raspberry-Computer-Model/dp/B07WR5W2D6)

前々から興味はあったが初めて購入。小さい。
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477082/ba3a8880-b3db-2cc8-d0ab-d3237b8de6ef.jpeg)

[カメラ](https://www.amazon.co.jp/gp/product/B07G572B3R/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)

[ケース、ヒートシンク、ファン、microSD 64GB 他](https://www.amazon.co.jp/gp/product/B08616J2PZ/ref=ppx_yo_dt_b_asin_title_o03_s00?ie=UTF8&psc=1)
4000円位に割り引かれていたのでこれに。

組み立てるとこのような状態に。
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477082/46faae90-6d36-ae93-1429-33ddc9ca3c77.jpeg)

これで外を撮影できそうなので満足しそうになった。
しかし、このままでは不格好だし面白くないのでカメラケースを付けることに。
![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477082/c48cac2a-0d5e-dd33-7b78-9c8de2c81913.jpeg)

カメラケースも色々買えるものがあるが、家にあったミンティアのケースをカットして作ることにした。
ミンティアのケースだけだと立たないので、100均で購入したスマホホルダーで立てる。
このままだとカメラを向ける方向が調整出来ない。
![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477082/d4185824-e61c-429f-3742-936fe259aa76.jpeg)

自撮り用のスマホホルダーを購入。
![5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477082/5168f768-a14e-dd1c-96e4-a938cbf6029e.jpeg)

首の向きが調節可能になった。
![7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477082/e80f2499-0cc1-7faa-4edb-47e42edf3020.jpeg)

↓のようなコマンドで撮影して保存できる。 -o で保存先を指定。
縦横のサイズを --width *** --height ***　で指定した。
> raspistill -o /home/***/camera/latest.jpeg --width 500 --height 400

![pic202005090710.jfif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477082/4b01a489-595d-3fb9-39ca-f49f03aee354.jpeg)

撮影出来た。当初監視カメラにしようと思ったが、ストリーミング配信は負荷が小さくないようだ。
サーバ利用もしたいので、5分毎くらいの定点お天気カメラとして運用したい。
Java 複数バージョン切り替え方法

# 複数バージョンのJavaの切り替え方法
複数バージョンのJavaを混在させて切り替えようとした際に手間取ったので備忘録として記録しておきます。
最初に環境変数を設定する所から記載しています。
本環境はWindows10 64bitです。

##環境変数設定画面を開く
①Windowsスタートメニューをクリックし、表示されたアプリ一覧から「Windowsシステムツール」をクリックして下さい。
そして展開されたメニューの中から「コントロールパネル」をクリックして開きます。
![windows10システムメニュー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/90fd2fe9-1d00-8333-1d06-673923ddf251.jpeg)
![システムツールからコントロールパネル.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/3701b13b-dfa8-595c-1e22-77dbe4027f56.jpeg)

②「コントロールパネル」の画面から「システムとセキュリティ」をクリックして下さい。
![システムとセキュリティ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/d8c5ff01-fe32-7b2f-7991-b6e8cc6d3ae0.jpeg)

③「システムとセキュリティ」画面から「システム」をクリックして下さい。
![システム.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/4062f3d1-8f89-7b76-34e8-22bd584ddf01.png)

④「システム」画面から左側メニュー内の「システムの詳細設定」をクリックして下さい。
![システムの詳細設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/e33fef0d-491f-ae0c-bb83-2d4b8950ffef.png)

⑤「システムのプロパティ」画面が開きます。「環境変数」をクリックして下さい。
![環境変数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/ea308cb7-aa99-9865-d291-39f0dd572583.png)

⑥「環境変数」の画面が表示されます。
![WS000013.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/d14ed591-7237-d3cd-f407-d0954217fdb7.jpeg)
補足：ユーザー環境変数は現在ログイン中のユーザーのみで有効になるものです。
　　　システム環境変数は全ユーザーを対象として有効になるものです。
　　　どちらにも同じ名前の環境変数を設定した場合は、ユーザー環境変数で設定した値が有効となります。

##環境変数JAVA_HOMEの設定
次に環境変数JAVA_HOMEの設定をします。環境変数JAVA_HOMEとはJDKの保存場所を入れておく入れ物です。
他のアプリケーション等でJavaを使用する際にJAVA_HOMEの値からJDKの保存場所を割り出します。

###環境変数JAVA_HOMEの追加
①システム環境変数にJAVA_HOMEが存在しなかった場合は新規作成します。
「環境変数」の画面でシステム環境変数の下にある「新規」ボタンをクリックして下さい。
![JAVA_HOME新規作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/dc1e25b5-4a56-18d8-7c30-bf67dc3db42c.png)

②「新しいシステム変数」画面が開きます。
「変数名」に「JAVA_HOME」を、「変数値」にご自身でインストールしたJDKのディレクトリを入力して下さい。
![WS000014.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/084a1e25-64c6-a5e2-c423-efd6aa9c17c2.jpeg)

③作成したJAVA_HOMEの設定を確認します。
※一度環境変数の設定画面を閉じないと設定が反映されないので注意して下さい。
新しくコマンドプロンプトを起動してset JAVA_HOMEと入力し実行します。
![WS000015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/35ae0401-36fa-32e4-e776-a7ecfa8390c2.jpeg)
上記のように正しいパスが表示されればJAVA_HOMEの設定は正常に完了しています。

##別のJDKを使用する
別のJDKを使用したい場合は前項のJAVA_HOMEの値を使用したいJDKのディレクトリに変更すればOKです。

①「環境変数」画面で「JAVA_HOME」を選択し、「システム環境変数」の下にある編集ボタンをクリックして下さい。
![システム環境変数の編集.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/b848042c-1be3-8072-f695-8af56229f6b7.png)

②「システム環境変数の編集」画面が開きます。
「変数値」に使用したいJDKのディレクトリを入力します。
![WS000016.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/8ee8acb5-eb69-1bdd-c847-3db8833698be.jpeg)

③新規作成時と同様に環境変数の設定画面を閉じてから新しいコマンドプロンプトにてset JAVA_HOMEと入力します。
Javaのバージョンが変更されたか確認する為にjava -versionとjavac -versionを入力します。
![WS000019.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507713/2edd64a4-a3d0-339e-82a1-a65fb840207b.jpeg)
上記のようにJavaのバージョンが切り替わっていれば成功です。

参考サイト：https://www.javadrive.jp/start/install/index4.html
PMP試験に出てくる(4.5) Monitor and Control Project WorkのITTOを覚えよう

# (4.5) Monitor and Control Project Workとは
プロジェクト統合管理の7つのプロセスにある`プロジェクト作業の監視と制御`プロセスのこと

- [プロジェクト統合管理の7つのプロセス](https://qiita.com/Yumenoshima/items/81eab7a0000302341abd)

## (4.5) Monitor and Control Project WorkはPMBOKガイドのどこに出てくるか
PMBOKガイド`105ページ`の`4.5`に出てくるよ！

# ITTOとは
プロセスに対するインプット、ツールと技法、アウトプット(成果物)!

## (4.5) Monitor and Control Project WorkのITTOのI(インプット)
- Project management plan
    - Any component
- Project documents
    - Assumption log
    - Basis of estimates
    - Cost forecasts
    - Issue log
    - Lessons learned register
    - Milestone list
    - Quality reports
    - Risk register
    - Risk report
    - Schedule forecasts
- Work performance information
- Agreements
- Enterprise environmental factors
- Organizational process assets

## (4.5) Monitor and Control Project WorkのTT(ツールと技法)
- Expert judgement
- Data analysis
    - Alternatives analysis
    - Cost-benefit analysis
    - Earned value analysis
    - Root cause analysis
    - Trend analysis
    - Variance analysis
- Decision making
    - Voting
- Meetings

## (4.5) Monitor and Control Project WorkのO(アウトプット)
- Work performance reports
- Change requests
- Project management plan updates
    - Any component
- Project documents updates
    - Cost forecasts
    - Issue log
    - Lessons learned register
    - Risk register
    - Schedule forecasts

# まとめ
(4.5) Monitor and Control Project WorkプロセスのITTOを覚えて、インプットとアウトプットの成果物テンプレートも押さえよう！ 

----
以上
UnrealC++でクラスのデフォルトオブジェクトを取得する

#はじめに
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325493/38e035ed-e7d0-ee54-d4a4-41aefbb40e8c.png)

Blueprintではクラスのデフォルト値を取得する`GetClassDefaults`とういうノードがあり、これを使うと文字通りそのクラスの変数のデフォルト値を取得することができます。
今回はこれをUnrealC++で行う方法をご紹介したいと思います。

#なにができるのか
UnrealC++でデフォルトオブジェクトを取得すると具体的にどんなことができるかですが、以下の通りです。

- `GetClassDefaults`ノードと同様にクラスのデフォルト値を取得できる
- BPに公開されていないPublic変数のデフォルト値を取得できる
- クラスの静的ではない関数を呼び出せる(あんまり意味ないかも...)

具体的な使用例としては[RichTextのRichTextBlockImageDecorator](https://docs.unrealengine.com/ja/Engine/UMG/UserGuide/UMGRichTextBlock/index.html)のようなクラスのデフォルト値を使用する目的のクラスを取り扱う際に便利です。

#ソースコード
####ActorクラスのHiddenInGameのデフォルト値を取得
```Sample.cpp
bool SampleFunction(const TSubclassOf<AActor>& InClass)
{
    UClass* Class = InClass.Get();
	if (Class)
	{
		AActor* DefaultObject = Cast<AActor>(Class->GetDefaultObject());
		if (DefaultObject)
		{
			return DefaultObject->bHidden;
		}
	}
    return false;
}
```
####RichTextBlockImageDecoratorクラスからBrushを取得
```Sample.cpp
bool URichTextFunctionLibrary::GetBrushFromImageDecoratorClass(const TSubclassOf<URichTextBlockImageDecorator>& InClass, FName TableID, FSlateBrush& Brush)
{
	UClass* Class = InClass.Get();
	if (Class)
	{
		URichTextBlockImageDecorator* DefaultObject = Cast<URichTextBlockImageDecorator>(Class->GetDefaultObject());
		if (DefaultObject)
		{
			const FSlateBrush* BrushPtr = DefaultObject->FindImageBrush(TableID, false);
			if (BrushPtr)
			{
				Brush = *BrushPtr;

				return true;
			}
		}
	}

	return false;
}
```

#おわりに
なかなかマイナーなケースかもしれませんが、こちらの記事がお役に立てれば幸いです。
Vue.jsで更新されないテキストがv-textを使ったら更新された話

Vue.jsでリアクティブに更新されるはずの表示がうまく更新されないというのは割とよくあるケースで、配列やオブジェクトの要素を書き換えたときに発生することが知られています。

- （参考サイト）[Vue.jsでビューの変更がされないときに疑うこと+主な解決策方法](https://qiita.com/bobu_web/items/ec5a98d03758d12ad721)

今回、あまりネット上にも情報のなかったケースに遭遇したので、紹介しておきます。

# Mustache構文がうまく効かない
Vue.jsで作ったサービスを公開したところ、ある特定の環境で表示がうまく更新されないという現象がおきました。再現する環境の条件は残念ながらはっきりしていないのですが、更新がうまくいかない条件としては、

- {{message}}のように、{{}}で囲った部分
- 初期表示はうまくいくが、その後変数を書き換えても表示が更新されない
- 変数はdataで定義していても、computedで定義しても発生する

ということで、どうも{{}}の部分(Mustache構文というそうです)が全般的にうまく効かないようでした。

```html
    <!-- うまくいかなかった例 -->
    <span>{{message}}</span>
```

# 対応策
効かないのはMustache構文の部分だけで、タグのディレクティブとしてバインドしているような変数(例えばv-ifとか)はきちんと反映されていたので、試しに以下のように書き換えてみたところうまく反映されるようになりました。

```html
    <!-- うまくいった例 -->
    <span v-text="message"></span>
```

ネット上でも公式ドキュメントでも、Mustache構文は内部的にはv-textに書き換えられると記載されているので、何故これでうまくいくのかはよくわかりませんが、事例として紹介しておくことにします。

# 環境情報
- Vue.js 2.6.11
PMP試験に出てくる(4.4) Manage Project KnowledgeのITTOを覚えよう

# (4.4) Manage Project Knowledgeとは
プロジェクト統合管理の7つのプロセスにある`プロジェクト知識管理`プロセスのこと

- [プロジェクト統合管理の7つのプロセス](https://qiita.com/Yumenoshima/items/81eab7a0000302341abd)

## (4.4) Manage Project KnowledgeはPMBOKガイドのどこに出てくるか
PMBOKガイド`98ページ`の`4.4`に出てくるよ！

# ITTOとは
プロセスに対するインプット、ツールと技法、アウトプット(成果物)!

## (4.4) Manage Project KnowledgeのITTOのI(インプット)
- Project management plan
    - All components
- Project documents
    - lessons learned register
    - Project team assignments
    - Resource breakdown structure
    - Stakeholder register
- Deliverables
- Enterprise environmental factors
- Organizational process assets

## (4.4) Manage Project KnowledgeのITTOのTT(ツールと技法)
- Expert judgement
- Knowledge management
- Information management
- Interpersonal and team skills
    - Active listening
    - Facilitation
    - Leadership
    - Networking
    - Political awareness

## (4.4) Manage Project KnowledgeのITTOのO(アウトプット)
- Lessons learned register
- Project management plan updates
    - Any component
- Organizational process assets updates

# まとめ
(4.4) Manage Project KnowledgeプロセスのITTOを覚えて、インプットとアウトプットの成果物テンプレートも押さえよう！ 

----
以上
よく使用するG Suiteのショートカットキー集　

G Suiteのよく使うショートカットキーだけを集めた一覧

全部のショートカットキーを調べたいときは以下を参考にする。
https://support.google.com/a/users/answer/9298571?hl=ja
またはCommand(⌘)+? でショートカットキーが表示される

##これだけはぜったい覚えるべきショートカットキー
自分でも、ほんとうにどうしようんもないくらい忘れてしまうので、よく使うものだけを厳選しておきます。

|フォルダとファイルの作成 |キーボードショートカット|
|:-----------------|:------------------|:------------------|
| ドキュメント | Shift+T |
| プレゼンテーション | Shift+P |
| スプレッドシート | Shift+S |
| 図形描画 | Shift+D |
| フォルダ | Shift+F |
| フォーム | Shift+O |
| カレンダー | Shift+C |

##Googleドライブ
|フォルダとファイルの作成 |キーボードショートカット|その他|
|:--|:--|:--|
| メニューの表示 | a | |
| ファイルの削除 | # | |
| ファイルの移動 | z | |
| ファイルを開く | Enter | |

##Gmail
|フォルダとファイルの作成 |キーボードショートカット|その他|
|:--|:--|:--|
|返信|r| |
|全員に返信|a| |
|メールの削除|#| |
|アーカイブ|e| |
|受信トレイに移動|g+i| |
|すべてのメールに移動|g+a| |

##ドキュメント
|フォルダとファイルの作成 |キーボードショートカット|その他|
|:--|:--|:--|
| メニューを非表示（コンパクト モード） | Control(^)+Shift(⇧)+F | Control(^)+Command(⌘)+F　Chrome全画面表示|
| フォントサイズを拡大 | Command(⌘)+Shift(⇧)+> | |
| フォントサイズを縮小 | Command(⌘)+Shift(⇧)+< | |
| 右揃え | Command(⌘)+Shift(⇧)+r||
| 左揃え | Command(⌘)+Shift(⇧)+l||
| 箇条書き | Command(⌘)+Shift(⇧)+8||
| 標準テキストを適用 | Command(⌘)+0||
| 見出し1を適用 | Command(⌘)+Option+1||
| 見出し2を適用 | Command(⌘)+Option+2||
| 見出し3を適用 | Command(⌘)+Option+3||

今後も自分の都合でよく使うショートカットキーを追加していく予定です。
また情報の誤りがあった場合は、ご指摘いただけましたら随時訂正していきます。