OmniAICreator/Qiita-1.07M huggingface dataset:
Word内に特定の文字列が含まれていると色付けして教えてくれるマクロ

#目的
某文章指導での採点業務で活用するために作成しました．

#仕様
特定の文字列が含まれてい場合，その文字列の色を変えてくれる（今回は<font color = "Blue">青く</font>変えてくれる）ものです
したがって，こちらで指定した文字列が文章に多く含まれていれば，その文章は<font color = "Blue">真っ青</font>になります

#参考にしたサイト
今回マクロを作りにあたり<a href="https://qa.itmedia.co.jp/qa2695470.html" target="_blank">このページ</a>を参考にさせて頂きました．


##準備
まずマクロのざっくりとした仕組みとして
・<b>特定の文字列を設定する用のワードファイル＜キーワードファイル＞</b>
・<b>特定の文字列が含まれているのか，点検したい文章が書かれているワードファイル＜点検ファイル＞</b>
を見比べ，＜点検ファイル＞内の文字列に色を塗る方針をとっています．

###＜キーワードファイル＞の作成
＜キーワードファイル＞はn行1列の表に任意の文字列を書き込みます．書き込んだ各行内の文字列がキーワードとして認識されます．
![キーワードファイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319114/c57edb49-b4e5-5813-ebba-5750aa357472.png)


###マクロの設定
普段ワードでマクロを使う人はそんなにいないのではないかと思います．（エクセルのマクロとほぼ同じです．）
ワード，マクロ，使い方等で調べてみてください，ワードのリボンに「開発」というタブが追加されれば大丈夫かと思います．

##マクロの中身
以下の関数をワードマクロに登録します.(私自身ワードマクロ初学者のため勉強の意味も込めて，各行の意味をコメントで添えています．間違っていたら申し訳ないです．)

```vb
Sub keywordchecker() 'マクロの名前
Dim f1row As row  '表の一行
Dim f1rowALL As Rows  '表全体
Dim target As Range  '対象の文章
'winNo = Windows.Count '開いているウインドウの数に対応

With Selection '選択している部分の話をしていますという意味（判定したいファイルでの話）
Set f1rowALL = Windows(1).Document.Tables(1).Rows 'Windows(x)のxは開いているウィンドゥの番号．開いた順番に番号が振られる．キーワードファイルを最初に開くのはWin（１）に割り振るため．
For Each f1row In f1rowALL '選択しているファイルの各行を見る
Set target = f1row.Cells(1).Range '表の1列めを範囲にする(今回表は1列しかないので，カッコ内を2以上にするとエラー)
target.MoveEnd Unit:=wdCharacter, Count:=-1  '表の各セル内の言葉を最後の一文字まで選択

With Selection.Find 'カーソル位置以降（Selection以降）をWordの検索機能で検索
.ClearFormatting '
.Wrap = wdFindStop '検索が文書の末尾（または先頭）に到達したときの挙動を設定するプロパティ．到達したらストップします．
.Text = target.Text  '検索窓にKeyword内のテキストを代入してるイメージ
.MatchByte = True  '半角と全角の区別
.MatchCase = True  '大文字と小文字の区別
.MatchPhrase = False '空白文字を無視
.MatchWholeWord = True '表内のキ―ワードと完全一致

.Replacement.Font.ColorIndex = wdBlue  'ここで色変更可能
.Execute Replace:=wdReplaceAll '「すべて置換」を実行
End With
Next
End With
End Sub

'以下，変更後のフォント設定などで使えそうなものをメモしました
'wdAuto 自動設定｡通常の既定値は黒です｡
'wdBlack 黒
'wdBlue 青
'wdBrightGreen 明るい緑
'wdByAuthor 文書の作成者が定義した色
'wdDarkBlue 濃い青
'wdDarkRed 濃い赤
'wdDarkYellow 濃い黄
'wdGray25 網かけ 25 の灰色
'wdGray50 網かけ 50 の灰色
'wdGreen 緑
'wdNoHighlight 適用されている強調表示を解除します｡
'wdPink ピンク
'wdRed 赤
'wdTeal 青緑
'wdTurquoise 水色
'wdViolet 紫
'wdWhite 白
'wdYellow 黄

```

##使い方
まず，＜キーワードファイル＞を開きます．（上のマクロをそのまま使うなら絶対に）

続いて，＜点検ファイル＞を開きます．
＜点検ファイル＞内の文章先頭にカーソルを持っていき，上のマクロを実行するとキーワードが青くなるはずです．

　

左＜キーワードファイル＞→右＜点検ファイル＞の順に開いて・・・
![色変更前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319114/80ebc72b-7c82-bcee-339e-e0104e696b0e.png)



↓マクロを実行すると
![色変更後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319114/2c115f3f-ec1c-553b-3262-4560a82e362e.png)

＜点検ファイル＞内のキーワードが青くなりました！

##注意
上の画像の通り，「齊藤京子」というキーワードに対して＜点検ファイル内の＞「齋藤京子」は完全一致していないので青く塗られませんでした．
しかし，例えばアニマル浜口さんの娘である浜口京子さんを対象にしたつもりで「京子」というキーワードを入れていると「齊藤京子」に含まれる「京子」も青く塗られてしまいます．
この例のように，あまりに短いキーワードや混同しやすいキーワードの設定には注意が必要です
また，<font color = "RED"><b>マクロは「Ctrl+Z」の後戻りが効かないことで有名です.</b></font>元のファイルに上書きしないよう，コピーを取ってからマクロを実行することをおススメします．


#おわりに
「齋藤」と「齊藤」の書き間違いや「菊地」と「菊池」の書き間違いなどを漏れなく点検するにはうってつけでした．
一方，どこまでをキーワードとするかは頭を悩ませます．ほどほどに活用してもらえればと思います．
JavaScriptで配列に特定の要素が含まれているか判定する

Array​.prototype​.includes()を使えば
探している要素が含まれていればtrue, 含まれていなければfalseを返してくれます。

```js
const array = [1, 2, 3, 4, 5];

const result1 = array.includes(3); //true
const result2 = array.includes(6); //false
```
ES2016で実装された模様。

## 参考
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
macでRailsインストール後、Rails is not currently installedが出続けたときの対応

# はじめに
以下OSでRubyとRailsをインストールする前提としています。
OS:macOS Mojave 10.14.4

# 問題発生までの流れ
こちらのサイトを参考にmacへRubyとRailsをインストールしていきました。

 - [MacでRuby on Rails環境構築
](https://qiita.com/unsoluble_sugar/items/c2a26ff7f08e5b893896)

順調にRailsインストールまでいったものの、いざrails -vとするとエラーになってしまいました。

```
% rails -v
Rails is not currently installed on this system. To get the latest version, simply type:
    $ sudo gem install rails
You can then rerun your "rails" command.
```

調べたところ、どうやらMac OS自体のgemを使っているようでした。
また.rbenvにpathも通っていなかったようです。

 - [gem installでpermissionエラーになった時の対応方法](https://qiita.com/nishina555/items/63ebd4a508a09c481150)
 - [MacOSX-Lionでrbenvを使ってRubyOnRailsの環境構築すると、以下のようなメッセージが出てドハマリしたけど、なんとか解決したことについてのメモ(推理なので正しいかどうかの確証持てない)](https://qiita.com/w7tree/items/0860e2856f2429b20eee)


なので、まずは上記２つのサイトを参照にパスを設定しました。
以下引用です。
>[[ -d ~/.rbenv  ]] && \
>   export PATH=${HOME}/.rbenv/bin:${PATH} && \
>   eval "$(rbenv init -)"

一旦ターミナルを再起動し、rubyとgemの位置を確認しました。

```
% which ruby                       
/Users/xxxxx/.rbenv/shims/ruby
% which gem
/Users/xxxxx/.rbenv/shims/gem
```
これでいけると思い、もう一度railsをインストールしましたが、現象は変わらないままでした。

```
% rails -v
Rails is not currently installed on this system. To get the latest version, simply type:
    $ sudo gem install rails
You can then rerun your "rails" command.
```

# 解決策
調べていくと、似た問題に遭遇している記事がありました。

 - [無限 Rails is not currently installed on this system. 問題の調査](https://qiita.com/amuyikam/items/313bc89c1de320a4257e)

＞先ほど調べた通り、bashでコマンドを打つとPATHの探索の前にハッシュを見るようです。
今回の現象の原因はこれに近そうです。
そのため、以下コマンドで一旦hashの再読み込みをしました。

```
hash rails
```

そしてrails -vで確認し、正常に動作することを確認しました。
pandasで前日と比べての変化率や差分(数字, 日付)を出したり、移動平均を出したりする

# 概要
データフレームのとある列に対して前日(一つ前のレコード)との変化率や
経過日数(日付の差分)を出したり、
移動平均を出したりする方法を書きます。

## 移動平均とは
一定区間の平均値を区間をずらしながら算出する平均値。
マイナーなものではないけど、めったに使わない人もいると思うので一応説明。
https://bellcurve.jp/statistics/blog/15528.html

ex) 3日移動平均だと3日づつの平均値を算出することになります。

| 日付|値|移動平均|
|:--|:--|:--|
|2019-01-01|1|-|
|2019-01-02|1|-|
|2019-01-03|1|1|
|2019-01-04|4|2|
|2019-01-05|2|2.33
|2019-01-06|1|2.33|
|2019-01-07|1|1.3|

# 前提

データフレームはこんなのを使います。  
- データフレーム１  
<img width="175" alt="スクリーンショット 2019-04-30 23.13.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86853/829f851f-b219-d878-9f6f-a65794b10a85.png">

- データフレーム2  
<img width="156" alt="スクリーンショット 2019-05-01 0.14.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86853/0e928c0b-bcdb-a0cf-024b-d24488bcdd34.png">

# 変化率を出す
データフレーム１のsales列の変動率を
pandasの pct_change を使って計算します。
計算結果を pct_change という列をデータフレームに作ってそこに格納します。

<img width="340" alt="スクリーンショット 2019-04-30 23.16.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86853/c638aca0-c09e-59f9-a655-a18203159de8.png">


## 簡単な解説

- 計算式  
  
```
(その行の値 - 前の行の値) / 前の行の値

例)
(20 - 2) / 2 
```

- 1行目はそれより前のレコードがないのでpct_change列はNaNになる。
- 2行目は1行目が2で2行目は20なので、割合としては900%upなので9.0となる。

# 差分を出す

## 数字の差分をだす
データフレーム1のsales列の差分をpandas の diff を使って計算して、
計算結果を diff という列をデータフレームに作って格納します。
今回は数字だ

<img width="330" alt="diff.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86853/92434d00-7d98-6773-11c8-038dc3ff7d0f.png">


## 日付の差分を出す(経過日数を出す)
データフレーム2のdate列のレコード間の経過日数を算出し、
計算結果を diff_date という列を作って格納する。

<img width="311" alt="スクリーンショット 2019-05-01 0.17.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86853/2da7be1d-3fd5-dbd3-b82b-8e6bc6ae87d1.png">


# 移動平均を出す
データフレーム1のsales列の3日間(3レコード分)の移動平均を計算し、
計算結果を rolling_mean 列を作って格納します。
<img width="417" alt="スクリーンショット 2019-04-30 23.33.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86853/7debf410-d2c9-ba69-9ed5-1d6f32c3e768.png">

## 簡単な解説
- 1,2行目は3日間(3レコード)分のデータがないのでNaN
- 3行目は (2+20+1)/3 で 7.66~ が算出されている

# 累積比を出す

```python
df["sales"].cumsum() / df["sales"].sum()
```
Railsプロジェクトを新規作成する

`rails new` する機会ってあんまりないと思うし、その都度ググって調べるのもめんどくさいので、新規でrailsプロジェクトを作成する最低限おｎ手順を書き残す。

- Ubuntu 18.04
- rubyはインストールしてある前提(ここもいつも忘れるので記事書こうかな)


<a id="orgeb8ab58"></a>

### プロジェクトディレクトリを作成し移動

```
mkdir rails-project
cd rails-project
```

<a id="org7cae0f7"></a>

### Gemfileの作成

```
bundle init
```

<a id="org4766ea9"></a>

### Gemfileの編集

こんな内容のGemfileが作成されるので、railsのversionを編集する。

```
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

# gem "rails"
gem "rails", "5.2.3"  # railsのversionを指定
```


<a id="org6012390"></a>

### Gemをinstall

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

-   path オプションでinstall先を指定可能
-   rootディレクトリに、`.bundle/config` ファイルができ、ここにインストール先のpathが設定される。以降は、`bundle install` で指定したpathにGemがinstallされる。


<a id="org7c2a698"></a>

### Railsアプリケーションの新規作成

```
bundle exec rails new .
```

-   「.」で、current directoryにRailsプロジェクトを新規作成する
-   \`sqlite3\` 関連のエラーが出るときは、下記を試してみる

```
sudo apt install libsqlite3-dev
bundle install
```

### 起動してみる

```
bundle exec rails s
```

![Screenshot from 2019-04-30 23-39-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233666/ee10ee85-8ddc-a04a-308c-a6da0db483d2.png)
ABC - 029- A&B&C

#AtCoder ABC 029 A&B&C
[AtCoder - 029](https://atcoder.jp/contests/abc029)

Typical DP Contest と Go langばかりやっててこっち全然手を付けてない
もう解けていないC問題とD問題にしぼるかなぁ

#A問題

```java
	private void solveA() {
		String s = next();

		out.println(s + "s");
	}

```

#B問題

```java
	private void solveB() {
		int res = 0;
		for (int i = 0; i < 12; i++) {
			String s = next();
			int cnt = s.indexOf("r");
			if (cnt >= 0) {
				res++;
			}
		}
		out.println(res);
	}

```

#C問題

 - 別解がメモリ無駄で遅い感じがしたので書き直したんだけど、、、変わらんかった。。。
    - `s + "a"`　の順序がポイント。。。。ってほどでもないわ。

```java
	private void solveC() {
		int numN = nextInt();
		saikiC(numN, "");
	}

	private void saikiC(int n, String s) {
		if (n == 0) {
			out.println(s);
			return;
		}

		for (int i = 0; i < 3; i++) {
			switch (i) {
			case 0:
				saikiC(n - 1, s + "a");
				break;
			case 1:
				saikiC(n - 1, s + "b");
				break;
			case 2:
				saikiC(n - 1, s + "c");
				break;
			default:
				break;
			}
		}

	}
```

#C問題：別解

```java
	private void solveC2() {
		int numN = nextInt();

		Set<String> wk = new TreeSet<String>();
		printC2(numN, 1, 1, "", wk);
		printC2(numN, 1, 2, "", wk);
		printC2(numN, 1, 3, "", wk);
		for (String string : wk) {
			out.println(string);
		}
	}

	private void printC2(int n, int current, int index, String s, Set<String> wk) {
		if (current > n) {
			wk.add(s);
			return;
		}
		String tmp = s;
		switch (index) {
		case 1:
			tmp = tmp + "a";
			break;
		case 2:
			tmp = tmp + "b";
			break;
		case 3:
			tmp = tmp + "c";
			break;

		default:
			break;
		}
		printC2(n, current + 1, 1, tmp, wk);
		printC2(n, current + 1, 2, tmp, wk);
		printC2(n, current + 1, 3, tmp, wk);

	}
```
react-qr-reader を利用したQRコードリーダーの作成

# はじめに
ReactでQRコードリーダを作ります。
create-react-app と react-qr-reader を使って簡単に作ります。

# QRコードリーダの作成
最初にcreate-react-appを使って、React環境を作成します。
今回は、qrcode-readerというディレクトリに作成します。

``` shell
npx create-react-app qrcode-reader
```

次に、react-qr-readerをインストールします。
react-qr-readerのページに書かれているインストール方法で、
以下のコマンドを実行します。

``` shell
cd qrcode-reader
npm install --save react-qr-reader
```

最後に、react-qr-readerのサンプルコードを参考にsrc/App.jsを書き換えます。

```
import React, { Component } from 'react'
import QrReader from 'react-qr-reader'

class App extends Component {
  state = {
    result: 'No result'
  }

  handleScan = data => {
    if (data) {
      this.setState({
        result: data
      })
    }
  }
  handleError = err => {
    console.error(err)
  }
  render() {
    return (
      <div>
        <QrReader
          delay={300}
          onError={this.handleError}
          onScan={this.handleScan}
          style={{ width: '100%' }}
        />
        <p>{this.state.result}</p>
      </div>
    )
  }
}
export default App;
```

# QRコードリーダの確認
作成したコードが動作するか確認します。
以下のコマンドでローカルサーバを起動します。

``` shell
npm start
```

この後ブラウザで、http://localhost:3000/ を表示します。
カメラでQRコードを読むと、画面の下にQRコードの文字列を表示します。

# スマホから確認
QRコードリーダがスマホでも動くか確認します。
ローカルサーバを起動した開発マシンと同一ネットワークに
存在するスマホのブラウザで確認します。
npm startした時に画面上に以下のような文字が出ていると思います。
IPアドレスは、環境により異なるので、画面上に出ているURLを
ブラウザに入力します。これで作成したコードがスマホで実行できるか確認できます。

``` shell
  On Your Network:  http://192.168.0.1:3000/
```

上記の方法では、iPhone(iOS12.2)では、うまく表示できませんでした。
最初は、開発コードのバグかと思いましたが、iOS12.2のsafariでは、
httpsではないとカメラにアクセスできないようです。

# HTTPSでローカルサーバを起動
ローカルサーバにhttpsでアクセスできるように、以下のコマンドでローカルサーバを
起動します。このコマンドは、Linuxとmac用です。他のOSの場合は、参考文献に書いてある、[create-react-app公式ページ(Using HTTPS in Development)](https://facebook.github.io/create-react-app/docs/using-https-in-development)を確認ください。

``` shell
HTTPS=true npm start
```

# HTTPSでローカルサーバを起動
以下のコマンドで公開用ビルドを作成します。

``` shell
npm run build
```

ビルド結果は、buildディレクトリに生成されます。
このディレクトリをWEBサーバに設置することで公開できます。

# 環境
- react-qr-reader 2.2.1
- create-react-app 3.0.0

# 参考文献
- [react-qr-reader公式ページ](https://github.com/JodusNodus/react-qr-reader)
- [create-react-app公式ページ](https://facebook.github.io/create-react-app/)
- [create-react-app公式ページ(Using HTTPS in Development)](https://facebook.github.io/create-react-app/docs/using-https-in-development)
Web Share APIはHTTPSかlocalhostでしか動作しない

最近iOSに対応したばかりの[Web Share API](https://developer.mozilla.org/ja/docs/Web/API/Navigator/share)ですが、実装する際に嵌ったのでメモ。

## デモ
こんな感じで、`navigator.share` を使って起動させます。

```html
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Web Share API</title>
  </head>
  <body>
    <button onclick="share()">シェアする</button>
    <script type="text/javascript">
      function share() {
        navigator.share({
         title: 'Example',
         text: 'テスト用です',
         url: 'https://example.com',
       });
      }
    </script>
  </body>
</html>
```

## localhostで実行した場合
うまく動作します。
<img width="682" alt="スクリーンショット 2019-04-30 23.26.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407015/58cc22c4-f74c-ee32-ade7-b8f82d385e60.png">

## IP指定かつHTTPで動作させた場合
`TypeError: navigator.share is not a function.` エラーが出て、起動しません。
<img width="794" alt="スクリーンショット 2019-04-30 23.27.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407015/796339ce-7e86-f759-0a72-9b078d5a3634.png">

## まとめ
Web Share APIをテストする際は、localhostでテストしましょう。
localhostでも動作しない仕様だったらテストが困難でしたが、動作して良かった……
<a>aタグにpaddingやmarginが効かない</a> 

###はじめに
初学者のアウトプット備忘録記事です。
ご指摘アドバイスありましたらお願いします。


##aタグにpaddingやmarginが効かない件

スクールの課題でビュー画面作成していたのですが、cssにてa要素に対してpaddingが効きませんでした。
他にもmarginも効きませんでした。

```html
<div class="body">
  <div class="main">
    <a class="content" >
      コンテンツ
    </a>
  </div>
</div>
```


```css

.content {
  padding: 30px;
}

```

これだとpaddingが効きません。

原因としてはaタグがインライン要素のためにmargin,paddingが効かないようです。
なのでインライン要素をブロック要素化することでpadding,marginが効くようになります。

```css
.content {
  display: block;
  padding: 40px;
}

```

これでpaddingが効くようになります。


ちなみに自分はaタグをdivタグに変更しブロック要素に変更してpaddingを効かせました。

```html
<div class="body">
  <div class="main">
    <div class="content" >
      コンテンツ
    </div>
  </div>
</div>

```

これでも大丈夫でした。

###参考

こちらの記事を参考にしました。

Aタグでmargin,paddingが無視される (CSS Tips)
https://www.ipentec.com/document/css-atag-padding-margin-tips
Leetcode #78: Subsets


```swift
func subsets(_ nums: [Int]) -> [[Int]] {
    if nums.isEmpty {
        return [[]]
    }
    var subsets: [[Int]] = [[]]
    var tmp = [Int]()
    help(nums, &tmp, 0, &subsets)
    return subsets
}
func help(_ nums: [Int], _ tmp: inout [Int], _ startIndex: Int, _ subsets: inout [[Int]]) {
    for i in startIndex..<nums.count {
        tmp.append(nums[i])
        subsets.append(tmp)
        help(nums, &tmp, i+1, &subsets)
        tmp.removeLast()
    }
}
```
とりあえずこれだけ使えればVimでなんとかなる

## はじめに
Vim ってターミナル上で動かせるし、キーボードで完結できるし、いいですよね。
Vim を使い始めて4ヶ月ほど。まだまだ使いこなせていないですが、そんな私でもとりあえず Vim で困ることはほとんどなくなってきました。
そこで、今私がよく使っている操作を整理してみました。ここに書いた操作が使いこなせれば Vimmer としての一歩を踏み出したレベルにはなっているはず。
これから Vim を始めてみようという方の参考になれば幸いです。

あくまで「これだけ使えればなんとかなる」レベルの操作ですので、より詳しく知りたい方は最後にある参考記事をご参照ください。

ちなみにここに書いたのは（今のところ）「素の Vim 」の操作のみです。プラグインは入っていません。もしかしたら今後追記していくかもしれません。

## よく使うVimの操作

### 移動系
- `l` でカーソル右移動
- `h` でカーソル左移動
- `j` でカーソル下移動
- `k` でカーソル上移動
- `Ctrl` + `f` で1ページ下に移動
- `Ctrl` + `b` で1ページ上に移動
- `G` で最終行に移動
- `gg` で最初の行に移動
- `$` でカーソル行の最後の文字に移動
- `^` でカーソル行の最初の文字に移動
- `0` でカーソル行の最初に移動
- `28G` で28行目に移動
- `w` で次の単語に移動
- `b`で前の単語に移動
- `%` で対応する括弧に移動（2019.5.2 追記）

### 挿入系
- `i` でカーソル位置からインサートモード
- `a` でカーソルの右からインサートモード
- `o` でカーソルの下に1行追加してインサートモード
- `O` でカーソルの上に1行追加してインサートモード
- `I` でカーソル行の最初の文字位置からインサートモード（2019.5.2 追記）
- `A` でカーソル行の末尾からインサートモード（2019.5.2 追記）
- `>>` でカーソル行のインデントを1つ増やす（2019.5.2 追記）
- `<<` でカーソル行のインデントを1つ減らす（2019.5.2 追記）
- ビジュアルモードで複数行選択した状態で `>` でその複数行のインデントを1つ増やす（2019.5.2 追記）
- ビジュアルモードで複数行選択した状態で `<` でその複数行のインデントを1つ減らす（2019.5.2 追記）

### 選択系
- `v` でビジュアルモード
- `Ctrl` + `v` で矩形選択モード
- `Shift` + `v` で行選択モード（2020.5.8 追記）
- ビジュアルモード／矩形選択モード／行選択モード でカーソル移動で移動範囲を選択
- `vaw` でカーソル位置の単語を選択（2019.5.2 追記）

### ヤンク（コピー）・ペースト系
- `y` でビジュアルモード／矩形選択モードで選択した範囲をヤンク
- `yy` でカーソル行1行をヤンク
- `:3,10y` で3行目から10行目までをヤンク
- `p` でカーソルの右にペースト（行をペーストする場合はカーソル行の下にペースト）
- `yaw` でカーソル位置の単語をヤンク（2019.5.2 追記）

### 削除系
- `x` で1文字切り取り
- `dd` で1行切り取り
- `:15,30d` で15行目から30行目までを切り取り
- `d$` でカーソル位置から後ろを切り取り（2019.5.2 追記）
- `d^` でカーソル位置から前を切り取り（2019.5.2 追記）
- `daw` でカーソル位置の単語を切り取り（2019.5.2 追記）

### 検索系
- `*` でカーソル位置の単語を検索（ハイライト表示）
- `:noh` でハイライト解除（`.vimrc`に`nmap <Esc><Esc> :nohlsearch<CR><Esc>`を追記して、`ESC`連打でハイライト解除）
- `/hoge` で `hoge` を検索
- `/^f` でfから始まる行を検索（つまり `/` での検索には正規表現が使える）
- `n` で検索対象の次へ移動
- `N` で検索対象の前へ移動

### 置換系
- `:%s/foo/bar/g` で `foo` を `bar` に一斉置換

### バッファ・ウィンドウ系
- `:w` で保存
- `:wq` で保存してウィンドウを閉じる
- `:q` でウィンドウを閉じる
- `:q!` で保存せずにウィンドウを閉じる
- `:vs` で画面を左右に分割
- `:sp` で画面を上下に分割
- `:ls` で現在開いているバッファを確認
- `:b2` でバッファ番号2を表示する

### その他
- `ESC` でノーマルモード
- `u` でアンドゥ
- `Ctrl` + `r` でリドゥ

## おわりに
Vim の操作はまだまだあります。何度も繰り返し操作することで自然と覚えていきますので、最初のうちは根気強く使っていきましょう。
とりあえずこれだけ使えれば Vim でなんとかなるはず。

## 参考
- [Vim幼稚園からVim小学校へ](https://qiita.com/hachi8833/items/7beeee825c11f7437f54)
- [脱初心者を目指すなら知っておきたい便利なVimコマンド25選 (Vimmerレベル診断付き)](https://qiita.com/jnchito/items/57ffda5712636a9a1e62)
- [よく使う Vim のコマンドまとめ](https://qiita.com/hide/items/5bfe5b322872c61a6896)
- [Vimモード入門](https://gorilla.netlify.com/articles/20190427-vim-mode.html)
オブジェクト指向について

##オブジェクト指向について
プログラミングをやるうえで、先輩インターン生にオブジェクト指向を理解したほうがいいといわれたので、真剣に勉強している初心者です。
オブジェクト指向について今学んでいますが、全然理解が追い付いていません(笑)
そこで、今回はそんな自分でも分かったことをアウトプットしていきます。

##オブジェクト指向とは
僕はカリキュラムにそってオブジェクト指向について勉強していましたが、理解できなかったのでインターネットで検索して、そしてprogateのphpを学んでオブジェクト指向について理解を深めることにしました。
そこで、検索して出てきたのが「モノを組み立てるように作る」ような考え方がオブジェクト指向だそうです。
そして、progateをやっていくとクラスとインスタンスという概念が出てきます。
クラスはインスタンスという実体を作るための設計図といわれています。
こういった風に設計図を作ってから実体を作るような作業がオブジェクト指向の一つなのかなと理解しました。
ただ、オブジェクト指向の三原則であるカプセル化・継承・ポリモーフィズムについては理解できていないのでこれらについてもしっかり理解できるように精進します。
書籍「Java本格入門」のアウトプット

# Java入門書のアウトプットメモ
入社から今まで研修+現場でぶっつけ学習だったので、「Java本格入門　モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで」
を購入。読みつつアウトプット。
まだ読み始めだが、以前にレビュで指摘されて「ああそうなのか」くらいにしか考えていなかった内容も載っていたりで、買ってよかったと思う。


## 修飾子
（モノによると思うけど）よく見るものをピックアップ

□abstract修飾子：クラスやメソッド、IFが抽象的であることを指定。（例、メソッドの宣言部のみで中身がない）
→abstractメソッドを持つクラスは必ずabstractクラスである必要がある。
また、必ず自クラスを継承したクラスを作成し、中身を定義しなければならない（abstract＝'抽象'のままではNG）

□static修飾子：クラスがインスタンス化されていなくてもメンバーにアクセスできる。
→クラス名.メンバー（メソッドやフィールド）名でアクセスできる。

□final修飾子：メンバーの上書きを禁止する
→フィールドに指定した場合・・・そのフィールドの値上書きを禁止
 メソッドに指定した場合・・・オーバーライド禁止
 クラスに指定した場合・・・サブクラス化を禁止

※オーバーライドとオーバーロード
オーバーライド：サブ（子）クラス側で、スーパー（親）クラスのメソッドを書き換えること。
親クラス

```
public class Super{

	public static void print(){
		System.out.println("私は親クラスです。");
	}
}
```
子クラス

```
public class Sub{

	public static void print(){
		System.out.println("私は子クラスです。");
	}
}
```
とした場合、Subクラスのprintメソッドの実行結果は「"私は子クラスです。"」となる。

オーバーロード：メソッド名が同じだが、引数の型や引数の個数が異なるメソッドを定義すること。

```

public static void print(int count){
	System.out.println(count + "個の商品を注文しました。");
}

public static void print(String name, String item){
	System.out.println(name + "さんは" + item + "を注文しました。");
}
```
## 命名規則

キャメルケース：単語の区切りを大文字で記述する記法。
例）getUserName
※先頭文字を大文字にしたものはパスカルケースと呼ぶこともあるらしい（例：GetCustomerName）

スネークケース：大文字で、単語をアンダースコア（_）で記述する記法。
例）OUTPUT_FILE_NAME

原則、下記のルール（なはず）
クラス名→大文字始まりのキャメルケース
変数名→小文字始まりのキャメルケース
定数名→スネークケース

#### 変数は名詞、メソッドは動詞

booleanの変数名に”isXXX”は避けるべき。
また、booleanの変数名にフラグ（flg）はよく用いられるが、”flg”単体での命名は何を示すか不明瞭であるため避ける。

```
//状態を管理する変数（名詞で命名）
private boolean applyFlg = false;

//状態を問い合わせるメソッド（動詞で命名）
public boolean isApplied(){
	return this.applyFlg;
}
```
【提案】AWS CLI は、Dockerコンテナ上で実行させよう

### やったこと
AWS CLIをDockerコンテナ上で実行し、結果のみホストOSの端末へ返すようにしました。
Dockerコマンドを含む一連処理をエイリアス化することで、AWS CLIをホストOSの端末上で実行しているかのように利用できます。

### 利点
- ホストOSへ Python, pip, AWS CLI, クレデンシャルをインストール不要(ホストOSを汚さない)
- コンテナ化することで、開発メンバーへ統一したAWS CLI環境を配布可能

### Dockerfile
Alpine、AWS CLIのバージョンはハードコードしているため、手動で適宜変更をお願いします。

```dockerfile:Dockerfile
FROM alpine:3.9
ENV AWS_CLI_VERSION 1.16.148
RUN apk -v --update add \
        python \
        py-pip \
        groff \
        less \
        mailcap \
        && \
    pip install --upgrade awscli==$AWS_CLI_VERSION python-magic && \
    apk -v --purge del py-pip && \
    rm /var/cache/apk/*

WORKDIR /project
ENTRYPOINT ["aws"]
```

### ビルド

```shell
docker build -t aws-cli .
```

### 設定

アクセスキーID、シークレットアクセスキー、既定のリージョンを変数に登録します。

- Windows(powershell) の場合

```powershell
$AWS_ACCESS_KEY_ID="<id>"
$AWS_SECRET_ACCESS_KEY="<key>"
$AWS_DEFAULT_REGION="<region>"
```

- Linux の場合

```shell
export AWS_ACCESS_KEY_ID="<id>"
export AWS_SECRET_ACCESS_KEY="<key>"
export AWS_DEFAULT_REGION="<region>"
```

### インストール
AWS CLIをホストOSで実行しているかのように見せるため、エイリアスを作成します。
Windows であれば「$profile」へ、Linuxであれば「.bash_profile」へ登録しておくと便利です。
※カレントディレクトリをコンテナ上のワークディレクトリ「/project」へマウントします。

- Windows(powershell) の場合

```powershell
function aws(){
    docker run --rm -it `
    -e AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} `
    -e AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} `
    -e AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} `
    -v ${pwd}:/project `
    speaktech/aws-cli `
    $args
}
```

- Linux の場合

```shell
alias aws='docker run --rm -t $(tty &>/dev/null && echo "-i") \
-e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" \
-e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" \
-e "AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}" \
-v "$(pwd):/project" \
aws-cli'
```

### 使い方
使い方は、ホストOSへAWS CLIを導入する場合と同じです。ただし、コマンド補完はできませんのでご留意ください。

```shell:S3上のオブジェクトのリスト表示
aws s3 ls
```

```shell:S3上へローカルのファイルをコピー
aws s3 cp test.txt s3://test-bucket/test-prefix/ 
```
※カレントディレクトリをコンテナ上のワークディレクトリ「/project」へマウントしているため、カレントディレクトリ上のファイルをコピーできます。

### 参考にさせて頂いた記事
- [AWS CLI in Docker](https://hub.docker.com/r/mesosphere/aws-cli/)
- [AWS CLIをDocker環境で実行する](https://qiita.com/ABCompany1/items/c92ac5087519c103f056)
AjaxでAPIにアクセスし、得られたJSONをTABLEに埋め込む

# やりたいこと
自作した**複数**のAPIへHTML（JavaScript）から動的にアクセスし、APIから受け取った値（JSON）を、HTMLの好きな場所へ格納したくなったので、その実装のメモ

ポイント：

- **複数のAPI**へアクセスしたい。
- 受け取った値をHTMLの**任意の場所**（たとえばTABLE内とか）に配置したい
- コードは汚いので参考程度にどうぞ

# コード
AjaxでAPIにアクセスする「JavaScript部分」と実際に表示する「HTML部分」に分かれています。

## JavaScript部分
ポイント：

- 一つの`<scrip>~</script>`内で書くほうが無難
- APIごとに`ajax`で読み込み、必要なデータを整形しておく
- `appendTo`などでIDやClassに値を格納する。格納先が重複しないように注意。

```html

<script>
var setArea1 = $('#logo1'),
setArea2 = $('#price1');
$.ajax({
	url: 'APIのURLその１',
	dataType: 'json',
	success: function(data){
	var OUT1 =`<a href="${data.link}" target="_blank">`,
	OUT2 = `<a href="${data.link}" target="_blank">${data.price}<br>${data.point}</a>`;
    $(OUT1).appendTo(setArea1);
    $(OUT2).appendTo(setArea2);
	}
});
var setArea3 = $('#logo2'),
setArea4 = $('#price2');
$.ajax({
	url: 'APIのURLその2',
	dataType: 'json',
	success: function(data){
	var OUT3 =`<a href="${data.link}" target="_blank">`,
	OUT4 = `<a href="${data.link}" target="_blank">${data.price}<br>${data.point}</a>`;
    $(OUT_d1).appendTo(setArea3);
    $(OUT_d2).appendTo(setArea4);
	}
});
</script>
```

## HTML部分
JavaScript部分で定義したIDやClassを好きなところで呼び出すだけ。
動的な部分のHTMLは、JavaScript側で記述しておきましょう。

```html
<table>
<tbody><tr>
    <td><div id="logo1" /><img src="https://hoge/1.png" />
    <td><div id="logo2" /><img src="https://hoge/2.png" /></a></td>
</tr><tr>
    <td><div id="price1" /></td>
    <td><div id="price2" /></td>
</tr></tbody>
</table>
```

## 全体

```html
<table>
<tbody><tr>
    <td><div id="logo1" /><img src="https://hoge/1.png" />
    <td><div id="logo2" /><img src="https://hoge/2.png" /></a></td>
</tr><tr>
    <td><div id="price1" /></td>
    <td><div id="price2" /></td>
</tr></tbody>
</table>

<!-- JSはソースの可能な限り下の方で呼びましょう -->
<script>
var setArea1 = $('#logo1'),
setArea2 = $('#price1');
$.ajax({
	url: 'APIのURLその１',
	dataType: 'json',
	success: function(data){
	var OUT1 =`<a href="${data.link}" target="_blank">`,
	OUT2 = `<a href="${data.link}" target="_blank">${data.price}<br>${data.point}</a>`;
    $(OUT1).appendTo(setArea1);
    $(OUT2).appendTo(setArea2);
	}
});
var setArea3 = $('#logo2'),
setArea4 = $('#price2');
$.ajax({
	url: 'APIのURLその2',
	dataType: 'json',
	success: function(data){
	var OUT3 =`<a href="${data.link}" target="_blank">`,
	OUT4 = `<a href="${data.link}" target="_blank">${data.price}<br>${data.point}</a>`;
    $(OUT_d1).appendTo(setArea3);
    $(OUT_d2).appendTo(setArea4);
	}
});
</script>
```

# できたもの
https://hmd.site/main/post-59068/ ※ R18の内容を含むので、閲覧注意。
HerokuにDjangoアプリをデプロイするときのエラーについての対処法

#はじめに
HerokuにDjangoアプリケーションをデプロイする際に、静的ファイルに関する環境変数を設定してあげないとエラーが出ますよという話です。

#開発環境
OS:macOS Mojave(10.14.4)

#対処法
Djangoのチュートリアルに従って、デプロイに関する様々な設定（HerokuがPythonアプリであると認識するためのrequirements.txtやWebサーバーに関して宣言するProcfileなど諸々の設定）をし終えて、いざデプロイしようと以下のコマンドを打ちエラーが出たことはありませんか。

```python
remote: -----> $ python manage.py collectstatic --noinput
remote:        Traceback (most recent call last):
remote:          File "manage.py", line 21, in <module>
remote:            main()
remote:          File "manage.py", line 17, in main
remote:            execute_from_command_line(sys.argv)
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
remote:            utility.execute()
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 325, in execute
remote:            settings.INSTALLED_APPS
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
remote:            self._setup(name)
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
remote:            self._wrapped = Settings(settings_module)
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
remote:            mod = importlib.import_module(self.SETTINGS_MODULE)
remote:          File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
remote:          File "/tmp/build_ec7d7e8811f7736c2961572f243025b3/config/settings.py", line 151, in <module>
remote:            django_heroku.settings(locals())
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django_heroku/core.py", line 89, in settings
remote:            config['STATIC_ROOT'] = os.path.join(config['BASE_DIR'], 'staticfiles')
remote:        KeyError: 'BASE_DIR'
remote:
remote:  !     Error while running '$ python manage.py collectstatic --noinput'.
remote:        See traceback above for details.
remote:
remote:        You may need to update application code to resolve this error.
remote:        Or, you can disable collectstatic for this application:
remote:
remote:           $ heroku config:set DISABLE_COLLECTSTATIC=1
remote:
remote:        https://devcenter.heroku.com/articles/django-assets
remote:  !     Push rejected, failed to compile Python app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !	Push rejected to hoge.
remote:
To https://git.heroku.com/hoge.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/hoge.git'
```
これは静的ファイルを扱うための（詳しくは、アプリケーションごとのstaticディレクトリを指定ディレクトリに集約コピーする）機能をもつcollectstaticが不要であれば、環境変数DISABLE_COLLECTSTATICを設定してくださいと言われているので、以下のコマンドを実行します。

```python
$ heroku config:set DISABLE_COLLECTSTATIC=1
Setting DISABLE_COLLECTSTATIC and restarting ⬢ hrtech360... done, v3
DISABLE_COLLECTSTATIC: 1
```
これで再度pushするとエラーが無くなりデプロイが完了するかと思います。
【Ruby on Rails】 エラー 読み方 解決 〜4つのポイント〜

#はじめに
Ruby on Railsでアプリケーション開発を進めていく上で、エラーがでるとつまづいてしまう方も多いんではないでしょうか。そこで逃げることのできないエラー解決の基礎や見るべきポイントを抑えておけばググれば解決できることも多いです。
エンジニアに最も求められるのは、「自走力」です。頑張っていきましょう。
##目次

+ エラー画面の読み方ポイント
+ 大きく分けたエラーの種類は2つ
+ よくあるエラー一覧と解決法
+ 【ActionView::MissingTemplate】
+ 【NoMethodError】
+ 【うまくURLにアクセスできない】
+ 【ブラウザのリンクを押しても反応しない】
+ 


###エラー画面の読み方ポイント
まず、このようなエラーが出るとします。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391854/c155d3f8-419b-347b-2f67-1bcda9652df0.png)
①エラーのタイトル
②エラーが起きたコードの場所
③エラーの具体的な内容
④エラーが起きたコードの表示
###大きく分けたエラーの種類は2つ
エラーの種類は、大きくわけて2つあり、「Rubyの文法エラー」「Railsのエラー」
になります。
####「Rubyの文法エラー」
例えば、全角スペースを入れてしまったり、if文などのendの書き忘れであったりです。過去には心あたりがあるのではないでしょうか。
####「Railsのエラー」
例えば、ルーティングの追記を忘れたり、URLにアクセスしたときにビューファイルがなかったり、Railsの仕組み、決まりに違反している場合に起こるエラーです。
###よくあるエラー一覧と解決法
####【ActionView::MissingTemplate】

>指定されたviewファイルが無い場合などに起きるエラー

【対処法】viewファイル関連について確認する。

####【NoMethodError】

>Nil(存在しない状態)場合など

【対処法】エラーの原因から遡り、コントローラーやカラムやレコードが空になっていたり、間違っていないかなどを確認する。
####【うまくURLにアクセスできない】

>ほとんどがroutes.rbの記述の方法や順番が間違っているエラー

【対処法】rootやdedviseの記述位置があっているか確認する

####【ブラウザのリンクを押しても反応しない】

>パスが入っていなかったり、間違っていたり、HTTPメソッドの記述がなかったりするエラー

【対処法】パスの確認、HTTPメソッドが正しいか確認して修正する

```
$ rake routes
```
上記のコマンドでパスの確認ができるので、見比べてみるのも尚よし
####【Routing Error】

>存在しないルーティングを指定していたり、HTTPメソッドが適切ではなかったり、ルーティングが間違っている

【対処法】HTTPメソッドやルートの確認をする
React NativeのText内で改行する方法

単純に、改行したい！という方法。
２つあるっぽい（他にもあるけど）

# 方法その１． テンプレートリテラルにしちゃう
文字列全部を `{｀｀}`で囲んでしまいます。

```typescript:App.tsx
<Text>
{` ほげ
ふが
ほむ
`}
</Text>
```

# 方法その2． 改行コード `{"\n"}` を使う
Androidとかだと、改行コードは `\n` だけで済みますが、React Nativeだと {"\n"} にする必要があるらしいです。

```typescript:App.tsx
<Text>
ほげ{"\n"}ふが{"\n"}ほむ{"\n"}
</Text>
```

# 最後に
テンプレートリテラルにしちゃうのが一番楽なのかなー？
PowerAppsで、SharePointに投稿した画像を一覧表示する画面をつくる（ギャラリー）

[前回の投稿](https://qiita.com/hisssa0102/items/26e1e7a50a015ed05aa2)で、画像にカテゴリーとコメントをつけて投稿できるようにした。ブラウザからでも見えるけど、どうせならアプリの中で閲覧もできたら便利。

というわけで、今回は、投稿した画像をPowerApps内で閲覧できるようにする。


h-nagaoさんの[PowerApps でドキュメントライブラリのサムネイルが表示可能になりました (Flow不要)](https://qiita.com/h-nagao/items/1042dc638c8c6a3a16f2)の記事を参考にさせていただいた。ありがとうございます。

1. データソースとギャラリーを追加する
2. ギャラリーの各項目に表示させたい内容を設定する
3. ギャラリーの並び順を設定する
4. 画面表示に一部手を入れる

#データソースとギャラリーを追加する。

１、新しい画面→空を追加する。

２、ビュー→データソースで、Flowで保存しているライブラリーを指定する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237698/d895cabf-0de1-78b3-ade8-fe6a700c99b4.png" width=50%>

３、挿入→ギャラリー→縦を追加
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237698/e0d1d43c-1638-c01d-d0e8-5d7fd8a115a9.png" width=50%>


４、追加したギャラリーのデータソースの選択で、先ほどのライブラリーをしてする。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237698/1a85caad-f872-1cf7-1c3c-b9a0ce80ee2b.png" width=50%>



#ギャラリーの各項目に表示させたい内容を設定する
カテゴリーとコメントを表示したいので、データの各欄に、commnetとcategory（SharePoint列）を設定する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237698/46682490-86a9-0ecc-d84e-22d4f8201613.png" width=50%>


画像を表示させたい。式のImageに、[ThisItem.サムネイル.Large]と入れる。のはずなのだが、画像が表示されない。
あれこれ試したが、画像ライブラリーでは表示されなかった。結局ドキュメントライブラリーを作り直しし、Flowのやり直しした。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237698/605dfb6d-afad-b57a-5098-786c79154148.png" width=50%>


#ギャラリーの並び順を設定する
SharePointのリスト上の並び順と、PowerAppsのギャラリー上の表示順は全く別物。PowerAppsでは表示順を設定を別途つくらないといけない。

この時に使う式がSortByColumns。今回は、登録日時で降順で表示させたい。
SortByColumns(データソース名,キーになる列,昇順Ascendingか降順Descendinか)という式。
これを、ギャラリーのItemsに設定する。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237698/62e9478f-90d6-1e08-4ec7-f58ab229dead.png" width=50%>


#画面表示に一部手を入れる

screen1に、screen3(今回作った画面へ切り替えるボタン）を、
screen3に、ラベルと、screen1に画面を切り替えるボタンを設置。

画像を投稿した日時を表示したかったので、subtitleをコピペして、関数を入れる。
ThisItem.登録日時でOK。日本語名でよい場合もあれば、英語（created）で登録するケースもある。不思議。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237698/a57938ed-2b56-bb5b-8be6-a3ecaa3a6910.png" width=50%>


それから最新のデータソースから更新するよう更新ボタンを設置。
関数は、[Refresh(データソース名）]でOK。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237698/64ee65b1-508b-6991-5e44-b86328b8c828.png" width=50%>

#まとめ

画像ライブラリーではサムネイル表示できないのか？サムネイルが出なかったので、ドキュメントライブラリーで作り直しした。しかしドキュメントライブラリーで対応するなら、画像ライブラリーで使えていた画像サムネイル＋プロパティ表示の画面を作る必要がある。SharePoint上でつくるか、いっそPowerAppsで作ったほうがいいか悩む…。

あと、一覧表示はフィルター掛けられるようにしたい。ライブラリー列で処理ステータス列をつくって未完了のものだけ表示とか、割当先列を作って自分に割り当たっているものだけを表示するとか。
Laravelでフィードを取得する！


個人開発でフィードの取得が必要になってきたので、Laravelでフィードを取得してみます！

# 「awjudd/feed-reader」をcomposerでインストールする

feedを取得するために必要なやつをインストールします！

```
$ composer require awjudd/feed-reader
```

# feedを取得するための設定をする

1. `config/app.php`の`providers=>'の中に以下の内容を記述します。

```config/app.php
providers=> [

.
.
.

Awjudd\FeedReader\FeedReaderServiceProvider::class, // この行を追加

]
```

2. 同じファイルの`Arias`の部分は以下の感じで記述します。

```config/app.php
'aliases' => [

.
.
.
'FeedReader' => Awjudd\FeedReader\Facade::class, // この行を追加
```


3. そして、以下のコマンドを実行します。

```
$ php artisan vendor:publish
```

たくさん選択肢が出てくるのですが、` [1 ] Provider: Awjudd\FeedReader\FeedReaderServiceProvider`を選択してください。


# controllerに処理を書く


```FeedController.php
use Awjudd\FeedReader\Facade as FeedReader;

.
.
.


public function feed()
    {
        $feed = FeedReader::read('feedのURLをここに書く');

        $i = 0;
        foreach ($feed->get_items() as $item) {
            $articles[$i]['title'] = mb_strimwidth(trim($item->get_title()), 0, 70, "...");
            $articles[$i]['permalink'] = trim($item->get_permalink());
            $articles[$i]['link'] = trim($item->get_link());
            $articles[$i]['date'] = $item->get_date('Y-m-d H:i:s');
            $articles[$i]['content'] = mb_strimwidth(strip_tags(trim($item->get_content())), 0, 100, "...");
            $i++;
        }

        return view('feed', compact('articles'));
    }
```

取ってきたタイトルとかは色々加工していますが、みなさんこの辺はお好きにどうぞ。。。


ビュー上では、$articlesをforeachで回して、`$article["title"]`とかで取得できます！


というわけで、Laravelでfeedを取得するの結構簡単でした！！
気になったらぜひやってみてください！
AWS CLI導入の覚書

## はじめに

AWS CLIの環境をMACに作成した時の覚書です。
pythonのversionを使い分けるために、pyenvを併用します。
AWS公式とはやや異なったインストール方法です。

## 作業環境

- macOS Sierra
    - 10.12.6
- iTerm2
    - 3.2.7

## Homebrewのinstall

pyenv, pipをインストールするためにhomebrewをインストールします。
[Homebrew公式](https://brew.sh/index_ja)のインストールコマンドを使います。

```Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

上記のコマンドを入力すると、`Press RETURN to continue or any other key to abort`と出るので、Enter Keyを押します。
パスワードの入力を求められるので、Macのパスワードを入力します。
インストールが進みます。
`Installation successful!`と出るとインストール完了です。

```
$ brew --version
Homebrew 2.1.1
Homebrew/homebrew-core (git revision b663b2; last commit 2019-04-29)
```

## pyenvのインストールとpythonの設定

pyenvのインストール

```
$ brew install pyenv
$ pyenv --version
pyenv 1.2.11
```

`pyenv init`の実行と`.bash_profile`への追記

```
## pyenv initを実行
$ pyenv init

## ~/.bash_profileに eval "$(pyenv init -)" を追記
$ vim ~/.bash_profile

## ~/.bash_profileの読み込み
$ source ~/.bash_profile
```

ここからはpythonの設定を進めます。
特にversionの指定はないので、自由にインストールしてください。
ここでは最新の2.7.16と3.7.3をインストールします。

```
## install可能なversion一覧を表示
$ pyenv install --list | grep -v '[a-z]'
  2.1.3
  (省略)
  3.7.3

## 2.7.16のインストール
$ pyenv install 2.7.16

## 3.7.3のインストール
$ pyenv install 3.7.3

## インストールできているか確認
$ pyenv versions
* system (set by /Users/hoge/.pyenv/version)
  2.7.16
  3.7.3

## globalで3.7.3を使用するように設定
$ pyenv global 3.7.3

## pythonのバージョンが切り替わっていることを確認
$ python --version
$ pyenv versions
```
pyenvとpythonでバージョンが異なる場合は、`pyenv init`からの手順に原因があることが多いです。（`source ~/.bash_profile`をやり忘れてました。）

## pipのインストール

`$ brew install pip`を実行しようとすると、pipはpythonの一部モジュールなので、`$ brew install python`を実行しろと言われます。

```
## pipインストールのためにpythonをインストール
$ brew install python

## pipが使えるか確認
$ pip --version
pip 19.0.3 from /Users/s01718/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pip (python 3.7)
```

## aws cliをpipでインストール

以下でインストール完了
`$ pip3 install awscli`

**awsではなくawscliです。**

## ~/.aws/の設定について

configファイルとcredentialsファイルによしなに記入してください。
defaultだけでも記入しておくのをオススメします。
Azure Logic Apps を使って Twitter で令和を祝う

# 令和を自動で祝いたい

![gengou_happyou_reiwa_kakageru.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70022/e7fad017-92bd-2acc-d317-a951352a1a9f.png)

Twitterで2019/5/1 00:00:00に「令和」 投稿が盛り上がると予想されるので、自動で投稿させるようにしようと思いつきました。
平成最後のQiita投稿、改元に間に合うように急いで書いています。

## Azure Logic Apps

コーディングをすることなく、メール受信などの様々なトリガーによってSNS投稿といった様々なアクションを実行できるサービスです。
（いろんなサイトを見ると、 Apps なのか App なのかがどうも表記が安定しないです。どちらが正しいんでしょう？）
IFTTTなどを使えばもっと簡単に実現できそうですが、ここは勉強を兼ねてということで。

## Azure Logic Apps リソースの作成

Azure Logic Apps のリソースを作成します。

<img width="313" alt="Logic App リソース作成" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70022/7c6c0bd0-bfeb-d17d-4812-58971fea58b5.png">

今回はテンプレートは使わず、空のロジックアプリを作成します。

<img width="421" alt="Logic App 空のロジックアプリ作成" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70022/126832e0-3820-f7ea-56e6-9b79fa42f632.png">

## 指定した時刻に Logic Apps を起動する方法

Logic Apps のトリガーを指定した時刻に起動する方法を調べました。当初は「繰り返し」を使って１回だけ実行させようと思ったのですが、最初の１回の実行が、指定した間隔が経った「後」になってしまう（例えば開始時刻を12:00にして間隔を１時間にすると、最初の実行は13:00になってしまう）ので断念しました。

指定した時刻に起動する方法として、カレンダーと連携するのを思いつきました。予め設定していた予定の開始時刻になったらトリガーを実行するものがあります。
同じマイクロソフトのOffice365の予定表を使えればよかったのですが、あいにくOffice365を使っていないので、Googleカレンダーにしました。

### Googleカレンダーに専用のカレンダーを作成する

Googleカレンダーのコネクタを見たところ、監視するカレンダーを指定できたので、普段使っているカレンダーとは別にTwitter投稿専用のカレンダーを作成することにしました。普段の予定がTwitterに垂れ流されてはたまりません。

<img width="381" alt="Google Calendar 専用カレンダー作成" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70022/3c1c8121-ad3f-b457-dfb6-3b2d01b47498.png">

2019/05/01 00:00:00 にイベントを作成します。
カレンダーをTwitter投稿専用カレンダーに設定するのを忘れずに。
イベントのタイトルがTwitterに投稿される本文になります。（後でそのように設定します）

<img width="381" alt="Google Calendar 予定作成" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70022/5e56212d-38e5-e2b1-8b5c-57b078f547da.png">

## Logic Apps の編集

以下のようなとてもシンプルな構成で実現できます。

<img width="500" alt="Logic App 編集画面" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70022/b822b66d-0a84-b638-d18d-db7f4ddc5af8.png">

トリガーにはGoogleカレンダーの「イベントの開始時」を指定します。
カレンダーIDは先ほど作成したTwitter投稿専用のカレンダーを指定します。
Googleカレンダーを連携するとき、Googleアカウントのセキュリティ警告が発生するかもしれませんので、Googleアカウントにアクセスするなどしてブロック解除する必要があるかもしれません。

アクションにTwitterの「ツイートの投稿」を指定し、ツイートするテキストにGoogleカレンダーの「イベント リスト イベント タイトル」を指定します。
これでGoogleカレンダーに設定したイベントのタイトルでTwitterに投稿されます。
Twitterのアカウントを連携するのを忘れずに。

## テスト実行

適当に１分後などにGoogleカレンダーにイベントを作成してしばし待ちます。Twitterに投稿されたでしょうか？

## 終わりに

Logic App 作成を思い立ってからこの記事を書ききるまで１時間程度で完成しました。
令和になってからもQiitaにぼちぼち投稿していきたいと思います。
【未経験エンジニアチャレンジ】4時半起床で仕事しながらエンジニア転職を成功させた方法

未経験からエンジニア転職した事例はたくさんあるが、仕事を続けながら学習をして転職を成功させた事例は少数派だと思うので、仕事しながらどうやって学習を続けたのか書いてみる。


# なんでエンジニアになろうと思ったの？
大学時代から何となくエンジニアに憧れて、大学院やめた後の就活でもエンジニア志望で就活し、内定もいくつかもらったが何をトチ狂ったのか結局総合職で就職した。
会社の業務でシステムに携わる機会があり、「ああ、やっぱこういうの作ってみたいわ〜」となった事と、今やってる仕事が面白くなかったので、エンジニア転職を決断。

だがいきなり未経験で転職活動をしてみるも自分の市場価値の無さに絶望。。。
仕事を続けながらスクールに通い、その上で転職する事に。
ちなみに通ったスクールはチーム開発の出来るT○CH::EXP○RTでした。
結果的に通常カリキュラムの4ケ月間は仕事をしながら、最後のチーム開発の1ケ月間は仕事を辞めて取り組み、半月で転職先を決める事が出来た。

# 限られた時間を有効活用する上で大切な事
仕事をしながら学習したら分かると思うけど、**まじで時間がない**。
どう頑張っても平日は1日2時間しか学習時間を確保出来ない上に、スクールのカリキュラムの納期が決まっているのでスケジュールを遅らせることが出来ない。
なので、1日1日の時間管理をきちんと行うことにした。

具体的にやった事としては、

- 朝4時半起床
- 週3回3kmのランニング（適度な運動は学習効率を高めるよ〜！）
- 朝に学習時間を確保する
- 6時間睡眠の確保
- 定時を守る（**何がなんでも残業はしない**）
- 夜は学習しない

これらを規則として守りながら生活していた。
仕事をしながらの学習となると普通は仕事終わりに行うが、夜は脳が疲れていて集中出来ない。
それに対して、**朝の時間は脳が疲れていないフレッシュな状態で学習を行える**ので、非常に効率が良い。

また、朝早く起きるには夜早く寝ないといけない。そのために、残業をせず定時で帰ることを意識した。
会社には辞めるつもりである事を言っていなかったため、やるべき事はやらなければならない
。
そのために、仕事でも時間管理を行い、手戻りが発生しないように気をつけて仕事をした。

以上、こんな感じで学習時間を確保して生活していました〜。
ここからあとの内容はエンジニアを目指す人・目指そうかどうか考えている人への補足になる。

# 仕事をしながらエンジニアを目指す人へ
大学院中退したり、先のことを考えないこんな自分でもエンジニアになれたので、きちんとスケジュール立てて学習すればエンジニアにはなれるはず！
でもね、次にいうことを肝に命じておいて欲しい。

- **スクールを仕事しながら通う人達は半分以上脱落する**

仕事しながらの学習はやっぱりしんどい。スクールに40万円払っても、最後まで出来る人は半分程度。
自分も同期がいつの間にか教室に来なくなってしまったのを何人も見てきた。
あなたには半年間修行僧のように学習に打ち込むだけの覚悟はあるか？
あると答えた人はさらに次を見て欲しい。

- **業務未経験者の年収は250〜300万円以下**

一般に、何もアウトプットを出していない人（学習はかなりしている人）の年収は250万円、スクール卒業生の年収は300万円くらいなのが相場。
エンジニアは場所を選ばず高額な年収を貰っているというイメージがあるが、それはごく一部の優秀な人達。
業務未経験のエンジニア志望者は会社にとってはコストでしかないので、新卒並みの給与水準になってしまう。（もちろん少数の例外はいる）
それでもあなたはエンジニアを目指すのか？

- **今のあなたの課題はエンジニアになることで解決されるの？**

あなたが今抱いている不満・課題はエンジニアにジョブチェンジすることで解決されるのだろうか？
例えば年収を上げたいと思うのであれば、そのための方法としてはエンジニアになることは適切ではない。
世の中にはコンサルや不動産営業、生命保険営業など、エンジニアより高給な仕事はたくさんある。
普通の仕事でも、業務未経験のエンジニアよりは年収が高いと思う。
その他エンジニアになった後も、あなたが思っているよりも大変なことがたくさんあるよ。

# 結論：やりたいことなら頑張れ！
自分がエンジニアになった理由は、純粋にコードを書いたり自分の作りたいものが出来ていくのが楽しいと思ったから。
ITに関わる仕事としてはプログラマー以外にもPMやITコンサルがいるし彼らの方が年収が高いが、それでも自分は新しいことを学習したり書くことが楽しいからこの道を選んだ。
色々厳しいことを言ったけど、それでもエンジニアになりたい人、早起きしての勉強はとてもオススメです！
頑張って！
HomesteadでLaravel環境構築

# HomesteadでLaravel環境構築
LaravelのWelcome画面が表示されるまでの手順.

## 環境

- Mac

### 事前に導入しておく

- Git
- VIrtualBox
- Vagrant

## 環境構築手順
Homesteadを利用する。

### Download Homestead 

```
# vagrant box add laravel/homestead
```

プロバイダはvirtualbox を選択

ホームディレクトリに移動しGitからクローン

```
# cd ~
# git clone https://github.com/laravel/homestead.git Homestead
```

### Initialize Homestead

Homestead 初期化

```
# cd ~/Homestead
# bash init.sh
```

作成するVMの設定を変更

```YAML:Homestad.yaml
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/code
      to: /home/vagrant/code

sites:
    - map: homestead.test
      to: /home/vagrant/code/sampleapp/public #変更

databases:
    - homestead

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# zray:
#  If you've already freely registered Z-Ray, you can place the token here.
#     - email: foo@bar.com
#       token: foo
#  Don't forget to ensure that you have 'zray: "true"' for your site.
```

ディレクトリ作成

```
# cd ~
# mkdir code
```

macのホストに追加

```
# vi ~/etc/hosts
```

```
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
192.168.10.10 homestead.test # 追加
```

### Vagrant 起動

```
# cd ~/Homestad
# vagrant up
```

```
# vagrant ssh
```

```
# cd ~/code/
# composer create-project laravel/laravel sampleapp --prefer-dist "5.5.*"
```

ブラウザからアクセス

```
http://homestead.test
```
heroku aws s3


流れとしてはコミット→プッシュ→`git push heroku master`→` heroku run rake db:migrate`→`heroku open`(失敗したら)→`heroku logs`→` heroku run rails console
`


この4記事見たらできる

[Rails 5.1でfog + CarrierWaveを使い、AWS S3に画像アップ](https://morizyun.github.io/ruby/rails-function-form-carrierwave-fog-s3.html)

[【rails】S3でheroku上で画像保存しようとしたらエラー大量発生【Access denied】](https://qiita.com/_ayk_study/items/f3c84050e94135e84014)


[Rails 5.2 で ActiveSupport::MessageEncryptor::InvalidMessage](https://qiita.com/scivola/items/cc06ddbfd94d3118f693)

[Rails5.2から追加された credentials.yml.enc のキホン](https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39)



##まずはIAM

アクセスキーとシークレットアクセスキー取得できたらHerokuに登録する
<img width="351" alt="スクリーンショット 2019-05-03 1.49.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265805/4973d309-14ee-f19c-ba50-85084ff074c5.png">
と`S3_BUCKET`

##S3バケット作成
(https://qiita.com/junara/items/1899f23c091bcee3b058)
バケットポリシー設定忘れずに

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<あなたのAWS１２桁のID>:user/<あなたのIAMユーザー名>"
            },
            "Action": "*",
            "Resource": "arn:aws:s3:::<あなたのバケット名>/*"
        }
    ]
}
```
[【rails】S3でheroku上で画像保存しようとしたらエラー大量発生【Access denied】](https://qiita.com/_ayk_study/items/f3c84050e94135e84014)




##Rails記入


```gemfile.
gem 'fog-aws'

gem 'fog', '~> 1.41.0'

#fogはバージョン指定しないとbundle install/updateできなくなる闇に葬られる

２つ
```


```image_uploader.rb

  storage :file
  storage :fog


  #fogに画像格納
  if Rails.env.production?
    storage :fog
  else
    storage :file
  end

```


```config/initialize/carrrierwave.rb(つくる)

require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

if Rails.env.production?
  CarrierWave.configure do |config|
    config.fog_provider = 'fog/aws'
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
      aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
      region: 'ap-northeast-1'  # S3バケット作成時に指定したリージョン。左記は東京を指す
    }
    config.fog_directory  = ENV['S3_BUCKET'] # 作成したS3バケット名
  end
  # 日本語ファイル名の設定
  CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/ 
end
```

```produvtion.rb

config.require_master_key = true
```
```database.yml
production:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>
  username: <%= ENV['DATABASE_USERNAAME'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>
  master_key: <%= ENV['RAILS_MASTER_KEY'] %>  #追加
```

```
EDITOR="vi" bin/rails credentials:edit
```

masterksyとsecretできるので


masterkeyをここに格納

<img width="386" alt="スクリーンショット 2019-05-03 1.49.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265805/6b30a33a-c7b2-4cab-2fca-67a74de89e9a.png">





デプロイはできたんだけど`heroku open`で画面が表示されなくてこんなエラー出て、ローカルのサーバーも立ち上げられなくなって海外のサイトとかたくさん見たけど原因は`gem 'fog'`にバージョン指定してあげたらいけた。なんだこりゃ
主成分分析について


統計科学研究所の練習スクリプトを走らせながら勉強

```
https://statistics.co.jp/reference/software_R/statR_9_principal.pdf
https://statistics.co.jp/index.html
```

```R
csv_name<-choose.files()
seiseki<-read.csv(csv_name)
result<-prcomp(seiseki,scale=T)

fc.l<-sweep(result$rotation, MARGIN=2,result$sdev, FUN="*")
subject <-c("kokugo", "shakai", "sugaku", "rika", "ongaku", "bijutu", "taiiku", "gika", "eigo")
plot(fc.l[,1],pch=subject,ylim=c(-1,1), main="PC1")
abline(h=0)
plot(fc.l[,2],pch=subject,ylim=c(-1,1), main="PC2")
abline(h=0)
```
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/c4ce18aa-3e6e-b8b8-ee5f-030468869400.png)

resultの中身はこのようになっている。
第一主成分PC1は体育にかけ合わせる値が低く、他が均一
・体育以外の科目についての特徴がPC1
第二主成分PC2は体育が負の値に-0.85と強い
・体育についての成分を強く説明している



![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/26738c62-a25b-1c2e-a50d-13f86572eb3f.png)
主成分に対して強い相関がある場合は0から離れる。
第一主成分は体育とは相関が強くなさそう。

![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/a747dbcd-a544-a376-7bcf-cd52ad28aa24.png)
主成分と相関が弱いものは0に近くなる。
第二主成分では音楽が相関が弱そう。
体育は負の方向だが強い相関がある


```R
biplot(result)
```
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/306bd866-b214-f932-25c5-d1239e9e9e50.png)

矢印方向にあるデータほどそのテストの得点が高い。

体育は下の方向に矢印が伸びているので、
80,95番は体育の得点が高い。


縦軸のPC2から見て、下にある(負)データほど体育が得意
横軸のPC1から見て、右にある(正)データほど筆記試験全般が得意
Unity Timelineで座標が動かない

# TL;DR

`Animator.HasTransoformHierarchy = true;`（**インスペクタに出ない**、Debugなら出る）

または

Animatorコンポーネントを消して作り直す（タイムラインに参照を渡し直すのを忘れない）


# 問題、発生した状況

元々Animatorを積んでインポートされてきたBlenderの3Dモデルがあった。
それにTimelineで座標にアニメーションを付けようとした。
が、アニメーションは作られるが、シークバーをいじっても、ゲームを再生してもうんともすんとも…

# 補足

~~FBXインポータの`Optimize GameObject`に関係がありそう（要調査）~~

`OptimizeObject`をtrueにしてインポートしたモデルのHasTransoformHierarchyをtrueにすると、今度はHumanoidボーンのアニメーションクリップが再生されない。

座標移動用の親GameObjectを用意するか、Optimazeしないか…
Leetcode #89: Gray Code

```swift
func grayCode(_ n: Int) -> [Int] {
    if n == 0 {
        return [0]
    }
    if n == 1 {
        return [0, 1]
    }
    let ar = grayCode(n-1)
    return ar + ar.reversed().map { $0 + Int(pow(Double(2), Double(n-1)))}
}
```
Minecraft BE ScriptingAPI 第4回講座

# 【Minecraft BE】の ScriptingAPI開発講座(4)
今回からバージョンを1.11から1.12βに上げてやっていきます。
1.12から少し書き方が変わったりするのでご注意ください。

## 注意
ScriptingAPI は現段階でWindows10にしか対応していません。
Android,iOS,XboxOne,Switchでは開発できません。(AndroidはBlockLauncherという外部ツールを使えばできます)

## 開発環境
windows10 Minecraft ver 1.12.0.2β

## 1.11から何が変わったの？
まずは、チャットに出力する、
`this.broadcastEvent("minecraft:display_chat_event", "hoge");`
がありましたが、これ単体では使えません。ではどうするか、

```JavaScript
let BroadcastEventData = this.createEventData("minecraft:display_chat_event");
BroadcastEventData.data.message = "I like hogehoge!";
this.broadcastEvent("minecraft:display_chat_event", BroadcastEventData);
```

2行増えましたね。
面倒くさいですが覚えなおしてくださいね( 'ω')

それでは新しいことをやっていきましょう！


##Scriptingからコマンドを実行する

なんとScriptingからコマンドが実行できちゃいます！
それではさっそくサンプルコードから 

```JavaScript
let ExecuteEventData = this.createEventData("minecraft:execute_command");
ExecuteEventData.data.command = "/me I like hogehoge!";
this.broadcastEvent("minecraft:execute_command", ExecuteEventData);
```

とりあえず、実行結果を貼っておきます。
![bandicam 2019-04-30 21-30-41-616.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266165/78f283b2-57cf-9c04-4aa0-c1828f191d67.jpeg)

実はもう一つコマンドを実行する方法があります。
それがこちら

```JavaScript
this.executeCommand("/me I like hogehoge!", (commandData) => this.commandCallback(commandData) );
```

はい、1行です。なんだよこっち使ったほうがいいじゃねぇか、そうです。

それと、なんと実行したコマンドのデータなどを取得できます！
とりあえずコード

```JavaScript
const Server = server.registerSystem(0, 0);
//~~~省略~~~
Server.update = function () {
    this.executeCommand("/me I like hogehoge!", (commandData) => this.commandCallback(commandData) );
};
Server.commandCallback = function (commandData) {
    //コマンドのデバックなんかにつかえるぞ！
};
```
updateで回しちゃってますが…まあいいでしょう。
しかしこれにはデメリットがあります。
for文で回しているif文の中に入れると、正常に動作しなくなります。
これは原因不明です、ごめんなさい。

さぁて次回は何を作りましょうか( 'ω')