OmniAICreator/Qiita-1.07M huggingface dataset:
【Rails】seedsディレクトリ配下のseedファイルを全てrequireしたい

超久しぶりにQiita投稿。

備忘録です。

seedファイルを分割して管理している場合、`db/seeds.rb` でいちいちrequireしてあげないと `bundle exec rails db:seed` した際に一括でseedを流してくれない。

現状が以下。

```seeds.rb
require './db/seeds/user.rb'
require './db/seeds/article.rb'
require './db/seeds/book.rb'
・
・
・

```

可読性悪いし、requireが続いていくので書くのが毎回面倒。

なので、ワイルドカードを使う感じでうまいことrequireできるようにする。

進化した`seeds.rb`が以下。

```seeds.rb
Dir[File.expand_path('./db/seeds' << '/*.rb')].each do |file|
  require file
end
```

まあやってることは変わらんですが、これで毎回requireを書かなくてよくなりました。

おしまい。
【Unity】iOS13でタイ語が[?]になる問題

## 現象

Unityで多言語に対応しようとすると「Arial」というデフォルトのフォントアセットを選択しておけば、システムフォントをよしなに使ってくれるので今まで問題がなかったのですが、iOS13で文字化けする現象が発生してます。

スクリーンショットはiOS13.2.1（iPhone8）です。画面のまん中に[?][?][?][?]となっているところが該当の文字化けです。
![IMG_2922.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109382/ac6d6309-c034-e6f1-a0b0-fb7d417e8069.png)

## 調査

UnityのIssueでも報告されていて、タイ語以外にもアルメニア語、グルジア語で文字化けしてしまうようです。
詳しくはIssueの方を見ていただくといいかもしれないです。

実際に調べた結果をまとめます。

- タイ語のフォントをセットすれば問題なく表示されます。  
スクリーンショットはiOS13.2.1（iPhone8）です。
![IMG_2923.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109382/764c8479-96f8-2791-5557-fc5ae93fabb6.png)
- iOS12.4.1では以下の通り普通にタイ語が表示されます。  
スクリーンショットはiOS12.4.1（iPhoneXR）です。
![IMG_0179.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109382/e9822bba-9889-2770-4ffc-dea9be908786.png)
- Android10では以下の通り普通にタイ語が表示されます。
- Unityのバージョンも2018.3と2019.1で確認しましたが、同じ結果でした。

他にフォントをフォールバックさせシステムフォントを使う方法やiOSの言語設定をタイ語にするなど試しましたが、変わらずでした。

## 暫定対応

タイ語対応をしたアプリを公開してますので、Unityの改修を待っていられません。
以下の手順で対応しようと考えてます。

1. タイ語フォントを入れ、文字化けを解消
2. Unityが対応したらバージョンをあげる

幸いにもタイ語のフリーフォントがありますので、それを使って文字化け解消をします。
少しデフォルトのフォントより細いので、こだわりがあるのであれば代替とはいかないかもしれないです。
GPLフォント例外というライセンスを初めて知りました。クレジット表記をしたらいいのかよくわからなかったので、とりあえず追加しました。詳しい人がいましたら情報をお待ちしてます。

フォントのサイズは480KBでした。もっとフォントサイズが大きくなるかと思ったのですが、これくらいならとあまり神経質にならずに入れてしまいました。できるだけアプリのサイズが小さい方がユーザにとってはいいと思うのでオススメはしません。

以下のような感じで、タイ語に切り替えるタイミングでフォントをセットしました。

```C#
text.font = Resources.Load<Font> ("Fonts/THSarabunNew/THSarabunNew");
```
フォールバックで切り替えるようにしてもよかったのですが、暫定対応なのでコード上で分かりやすく`TODO`を書いておきたかったという理由で今回はコードで切り替えてます。

## まとめ

原因がUnity側にあるのか、iOS側にあるのかさっぱり分かりませんが、とりあえず暫定対応で切り抜けたという話です。
他の方法を知ってましたら情報をお待ちしています。

## 追記（2019.11.14）

IssueにUnityからの回答が載ってました。原文はリンクからどうぞ。
要約すると「iOS13でアルメニア語・グルジア語・タイ語のUnityが使用してたデフォルトフォントが削除されたので、uGUIとTextMeshProでレンダリングできなくなってます。将来的にはTextMeshProで対応しますが、現状ではエディタ上でレンダリングされるフォントを用意すればiOSでも動きます。」
やっぱりフォントを用意しないとダメみたいです。
TextMeshProで対応っていうのも悩ましいですね。今のうちに改修するか。

## 参考

Unity Issue Tracker - [iOS 13.0] Some languages symbols are replaced with a [?] marks
https://issuetracker.unity3d.com/issues/ios-13-dot-0-all-thai-symbols-are-replaced-with-a-marks

フォント - Unity マニュアル
https://docs.unity3d.com/ja/2018.1/Manual/class-Font.html

【Unity】UnityでOSにインストールされてるフォントを使いたい - テラシュールブログ
http://tsubakit1.hateblo.jp/entry/2018/05/30/234314

タイの公的機関が発行する「無料のタイ語フォント」 | タイおん
https://thaion.net/thai-font-sipa

ฟอนต์.คอม  &raquo; ฟอนต์สารบรรณ ปรับปรุงรุ่นใหม่ &#8220;Sarabun New&#8221;
https://www.f0nt.com/release/th-sarabun-new/

GPLフォント例外 - Wikipedia
https://ja.wikipedia.org/wiki/GPLフォント例外
Capacitor を 試してみる(router & ionicあり)

次に請けるプロジェクトでCapacitorを使うそうなので試してみる。

[Capacitor を 試してみる(router & ionicなし)](https://qiita.com/ganessa/items/a9ddd29b3b70b053b023)

---
## ベースプロジェクトを作る

Vueプロジェクトをベースにしてみます。

### Vue CLI を入れる
```bash
yarn cache clean; yarn global add @vue/cli
```

### Vue プロジェクト生成＆プロジェクトへ移動
```bash
# Manually select features で Router を選択
vue create test
cd test
```

## Ionic

Ionicも使えるようにしてみます。ioniconsも必要っぽい。

```bash
yarn add @ionic/vue; yarn add --dev ionicons@4.5.9-1
```

```diff:src/main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
+import Ionic from '@ionic/vue';
+
+Vue.use(Ionic);
Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')
```

## Capacitor

### インストール

```bash
yarn add @capacitor/cli @capacitor/core
```

### 初期化
```bash
npx cap init test com.xxxxx.test
```

### webDir 変更
```diff:capacitor.config.json
{
  "appId": "com.xxxxx.test",
  "appName": "test",
  "bundledWebRuntime": false,
  "npmClient": "yarn",
- "webDir": "www"
+ "webDir": "dist"
}
```

### add 前に build して webDir(dist) を生成
```bash
yarn run build
```

### Android / iOS 追加
```bash
npx cap add android; npx cap add ios
```

### 変更を加える
```diff:src/view/About.vue
<template>
  <div class="about">
    <h1>This is an about page</h1>
+    <ion-button shape="round" @click="this.toast">toast</ion-button>
  </div>
</template>
+
+<script>
+import { Plugins } from "@capacitor/core";
+const { Toast } = Plugins;
+
+export default {
+  name: "app",
+  data() {
+    return {};
+  },
+  methods: {
+    async toast() {
+      await Toast.show({
+        text: "Toast"
+      });
+    }
+  }
+};
+</script>
+
+<style>
+</style>
```

### 変更反映
```bash
yarn run build; npx cap copy
```

### Android / iOS 開発環境を開く
```bash
npx cap open android
npx cap open ios
```

### iOS上で確認してみる
Aboutへ切り替えてtoastボタンを押下すると、Toastが表示される。

<img width="414" alt="Screen Shot 2019-10-07 at 18.03.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42581/ff744c35-0609-dfc0-49a5-8c8e19faccfb.png">

Vue.js / Ionic / Capacitor がそれぞれ正しく動作することを確認できた。
【CentOS7】yum update でネットワーク不通に！ Rich_Destination って何だ！？

# 経緯

`yum update` で CentOS 7.6 から 7.7 にアップデートしている途中で、
なぜかネットワークが切断しました。

リモート接続はあきらめ、サーバに直接ディスプレイ等をつなげて確認すると、
以下のようなことが分かりました。

● アップデート ( yum update ) 自体は正常終了している。
● firewalld がバージョンアップしたが、その再起動でエラーが発生した。

```
/var/log/messages

Oct  2 10:35:30 xxxxxxxx firewalld[10315]: ERROR: argument of type 'Rich_Destination' is not iterable
Oct  2 10:35:30 xxxxxxxx firewalld[10315]: ERROR: COMMAND_FAILED: argument of type 'Rich_Destination' is not iterable
Oct  2 10:35:30 xxxxxxxx firewalld[10315]: ERROR: '/usr/sbin/iptables-restore -w -n' failed: iptables-restore v1.4.21: goto 'FWDI_public' is not a chain#012#012Error occurred at line: 2#012Try `iptables-restore -h' or 'iptables-restore --help' for more information.
Oct  2 10:35:30 xxxxxxxx firewalld[10315]: ERROR: '/usr/sbin/ip6tables-restore -w -n' failed: ip6tables-restore v1.4.21: goto 'FWDI_public' is not a chain#012#012Error occurred at line: 9#012Try `ip6tables-restore -h' or 'ip6tables-restore --help' for more information.
Oct  2 10:35:30 xxxxxxxx firewalld[10315]: ERROR: COMMAND_FAILED: '/usr/sbin/ip6tables-restore -w -n' failed: ip6tables-restore v1.4.21: goto 'FWDI_public' is not a chain#012#012Error occurred at line: 9#012Try `ip6tables-restore -h' or 'ip6tables-restore --help' for more information.
```

ネットワークが落ちているわけではありません。
ネットワークは起動しているけど、firewalld の `zone=public` の情報が取れなくて、
結果的に外部からのアクセスを遮断しているように見えました。
（ちなみにサーバから外部への `ping` は通りました。）

さらに以下のＵＲＬによると、`zone=public` にリッチルール ( rich rule ) が設定されていると、
今回の現象が起きるようです。

https://bugs.centos.org/view.php?id=16425
https://access.redhat.com/solutions/4284811
https://bugzilla.redhat.com/show_bug.cgi?id=1715977

**結局 firewalld のバグが原因で、ネットワーク不通になったようです。**

# 暫定復旧

いち早くネットワークを復旧するには、リッチルールを削除します。

`firewall-cmd` コマンドでも消せるはずですが、
その時おこなったのは、ファイルの編集でした。

`/etc/firewalld/zones/public.xml`

`vi` コマンドで、rule タグを全部 消しました。
そしてサーバを再起動しました。

（もしかしたらサーバ再起動でなく、firewalld の再起動だけで
よかったかもしれませんが、それは試していません。）

これでネットワークは復旧するはずです。
（リッチルールは、ひとまず あきらめる。）

# firewalld バージョンダウン

firewalld のバグ修正を待っていられないので、前のバージョンに戻します。

（10/7 現在、CentOS7 で `yum check-update` で確認しましたが、
バグ修正版は出ていないようでした。）

`yum update` 後は、`0.6.3-2.el7_7.1` がインストールされているので、
`0.5.3-5.el7` にバージョンダウンします。

（ウチのサーバでは、以下の３ファイル適用でＯＫでしたが、
各環境に置き換えて試してください。）

**● インストール済みの firewall 関連を確認する**

`yum list installed *firewall*`

**● 旧 firewalld のダウンロード**

```
wget http://vault.centos.org/7.6.1810/os/x86_64/Packages/firewalld-0.5.3-5.el7.noarch.rpm
wget http://vault.centos.org/7.6.1810/os/x86_64/Packages/firewalld-filesystem-0.5.3-5.el7.noarch.rpm
wget http://vault.centos.org/7.6.1810/os/x86_64/Packages/python-firewall-0.5.3-5.el7.noarch.rpm
```

**● 現 firewalld の アンインストール（削除）**

`yum remove firewalld firewalld-filesystem python-firewall`

**● 旧 firewalld のインストール（テスト）**

`rpm -ivh --test *.rpm`

**● 旧 firewalld のインストール**

`rpm -ivh *.rpm`

これでサーバ再起動なり、firewalld の再起動なりすれば、
リッチルールを適用しても安全です。

ちなみに firewalld を停止しても、ssh 等のネットワークは接続したままでした。
なのでリモートで作業できます。
[メモ] anyenv で nodenv を使う

# 前提

homebrew をインストールしていること。

# 手順

## anyenv のインストール

```zsh
brew install anyenv
anyenv init
anyenv install --init
```

また、`.zshrc` (使っているシェルの設定ファイル) に以下を追記する。

```zsh
# anyenv
eval "$(anyenv init -)"
```

## nodenv のインストール

```zsh
anyenv install nodenv
```

## バージョンを指定して Node.js をインストール

```zsh
nodenv install 10.16.3
nodenv rehash
nodenv global 10.16.3
```

## 動作確認

```zsh
node -v # -> v10.16.3
```
2019-10-07 CentOS 7.7 > module > CentOS6.9で使っていたmoduleコマンドが見当たらない | Lmodパッケージ

```txt:動作環境
CentOS Linux release 7.7.1908 (Core)
```

### 概要

- CentOS6.9にはmoduleコマンドがあった
- CentOS7.7では見つからない
- CentOS6.9, 7.7双方には`environment-modules.x86_64`はインストール済ではある

### 関連

- [Modules in CentOS 7](https://cims.nyu.edu/webapps/content/systems/resources/centos7/modules)
    - > Our CentOS 7 environment will continue to use the environment module system which we had in RHEL6.  
    - RHEL6で使えていたmoduleコマンド関連を使えるようにしているようだ
    
### リンク > 静的ロード

- [How to make CentOS Linux to load a module automatically at boot time?](https://www.systutorials.com/241754/how-to-make-centos-linux-to-load-a-module-automatically-at-boot-time/)


### RPM

- [CentOS7向けのRPMファイル?](https://centos.pkgs.org/7/centos-x86_64/environment-modules-3.2.10-10.el7.x86_64.rpm.html)
    - CentOS7.7ではrpmでのインストール時に「libtcl8.5.so()(64bit) is needed by environment-modules-3.2.10-10.el7.x86_64」となる
    - このあたりを解消してまでインストールはしないことにした

### 参考

- [Environmental-Modulesを止めてLmodに移行した](http://msyksphinz.hatenablog.com/entry/2018/11/04/080000)
    - by @msyksphinz さん
    - 情報感謝です
- [EasyBuild software for environment modules on CentOS](https://wiki.fysik.dtu.dk/niflheim/EasyBuild_modules)


### 選択肢

- [x] CentOS7.7向けのmoduleと同等コマンド
    - Lmodパッケージ
dbpediaの研究 その7

# 概要

dbpediaが難解なので、手出してみる。
d3でグラフにしてみた。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/9433b76e-38b2-7cdb-04a5-77bb8c607f51.png)


# 成果物

http://embed.plnkr.co/BlOZ02cPMfnqvuyJB2xK/


以上。
Ansibleをインストールする

Ansibleを使用してクライアントPCに自動デプロイする機会があったため、
備忘録を兼ねて記載する。
なお、今回はAnsibleをインストールし、実際に動かしてみる。

# 環境セット

**ホストPC**
OS: Ubuntu 16.04 LTS
Ansible: 2.8.5

**クライアントPC**
OS: Ubuntu 16.04 LTS
GPU: NVIDIA GeForce GTX1060

# Ansibleインストール
## 1. ホストPCのターミナルを開き、以下コマンドを入力実行する。

```
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt update
$ sudo apt install ansible
```

## 2. インストール確認

```
$ ansible --version
```

・ここで以下のようなものが表示されたら、インストールされています。

```
ansible 2.8.5
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/usr/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.12 (default, Aug 22 2019, 16:36:40) [GCC 5.4.0 20160609]
```

## 3. 動作確認

インストールしたら、自機でインストールされているのかを確認する。
また、ほかに動作確認をするサーバや、仮想環境がある場合は、そちらにて確認をしても大丈夫である。

```
$ ssh-keygen
$ cd ~/.ssh
$ ssh-copy-id [IPアドレス]
```

なお、`ssh-copy-id`に関しては、サーバや仮想環境、また別の環境にて確認する場合、アカウント名が異なる際は以下のコマンドを使用する。

```
ssh-copy-id [アカウント名]@[IPアドレス]
```

以下コマンドを入力し、/etc/ansible/hostsの設定をする。

```
# sudo nano /etc/ansible/hosts
```

`XXX.XXX.X.X`には自機のIPアドレスを指定する。
なお、localhostで確認する場合は、IPの部分を`localhost`と記載する。

```
[server]
XXX.XXX.X.X
```

Ansibleのpingモジュールを使用して設定が通っているかを確認する。
なお、localhostを指定した場合は、IPアドレスの部分を`localhost`と記載する。

```
$ ansible [自機のIPアドレス] -m ping
```

設定が通っている場合は、以下のような文字列が帰ってくる。pingが成功していれば、準備完了である。

```
XXX.XXX.×.× | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
```

## 4. Playbookでのテスト

実際にPlaybookを使用し、テストを行う。

```playbook-sample.yml
- hosts: servers
  tasks:
  - name: Test
    debug: msg="Test"
```

以下コマンドを入力、実行しエラーが出なければ成功である。

```
$ ansible-playbook playbook-sample.yml
```

## 参考
[Ansible Documentation](https://docs.ansible.com/ansible/latest/index.html)
Could not find any information for the class named HogeViewController

症状・エラーメッセージ
====

StoryBoard上からControllerViewにOutlet Connectionを貼ろうとすると以下のエラーメッセージが表示される。

Could not insert new outlet connection: Could not find any information for the class named HogeViewController

TL;DR
====

削除して最初からやり直したら解消した

環境
====
iOS
Xcode 10.3
Swift

試してダメだった対策
====

#### DerivedDataフォルダを削除
`~/Library/Developer/Xcode/DerivedData`

#### キャッシュ削除
`~/Library/Caches/`

#### defaultsコマンドでcom.apple.dt.XcodeIDEIndexEnableの値をリセット

```shell:
MacBook-Pro:Xcode trpla226$ defaults delete com.apple.dt.Xcode IDEIndexDisable
MacBook-Pro:Xcode trpla226$ defaults write com.apple.dt.Xcode IDEIndexEnable 1
```

#### その他

- Product > Clean Build Folder
- XCode再起動
- マシンの再起動


原因と思しきもの
====

HogeViewController.swiftを作成した際にプロジェクトのフォルダ直下に作成したが、これを他のViewController派生クラスをおいてあったViewControllerフォルダに移動したのがまずかったのかもしれない。
DockerでNuxt+Firebase開発環境を構築してホストのブラウザから接続してみる

DockerでNuxt開発環境を構築してホストのブラウザから接続するまでの流れです。

【関連記事】
[DockerでNuxt開発環境を構築してfirebase loginできるようにする](https://qiita.com/mikansei-lab/items/0e9a469e8217ade12b76)


# 環境など

Windows 7 に VirtualBox を入れて、そこでUbuntuの仮想マシンを動かしています。
ubuntu内にdockerでnuxt開発環境を構築して、Ubuntuのブラウザからアクセスしようと思います。

# 手順

ここからの作業はUbuntuでおこないます。
今回は以下の流れでNuxt開発用のDockerコンテナを起動しています。

```
$ vim Dockerfile
FROM node:lts

RUN apt-get update && \
    apt-get upgrade -y && \
    yarn global add @vue/cli && \
    yarn global add @vue/cli-init

EXPOSE 3000

$ docker build -t [image_name] .
$ docker run -d -it -p 3000:3000 -v $(pwd):/work [image_name]
$ docker exec -it [container_name] bash
```

ここからの作業はDockerでおこないます。

プロジェクトを作成します。

```
$ npx create-nuxt-app [project-name]
```

この状態で、`npm run dev`して、`http://localhost:3000/`に接続しようとしてもダメでした。

以下の変更を追加でおこないます。

```
$ vim nuxt.config.js
export default {
  mode: 'universal',
  // ここから
  server: {
    port: 3000,
    host: '0.0.0.0',
  },
  // ここまで
  ...

$ npm run dev
```

この状態で`http://localhost:3000`へアクセスするとNuxtの起動画面が表示されるはずです。

以上です。
Google Driveにpythonからファイルをアップロードする際に，上書きされないで新ファイルとして保存されてしまうのを防ぐ．

## 結論
GoogleDrive上で上書きしたいファイルの`id`を確認し，その`id`を指定してGoogleDriveインスタンスを作成する．

```python
f = drive.CreateFile(
    {
        'id': 'XXXXXXXXXXXXXXXXXX',
        'title': 'data_invest.csv'
    }
)
```

## 背景/原因
毎日，自分の保有している投資信託の基準価格を取得し，csvに保存した後，GoogleDriveにアップロードしている．(アップロード部のコードは下記)


```python
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
gauth.CommandLineAuth()
drive = GoogleDrive(gauth)

data_path = "/home/XXXXX/XXXX.csv"

f = drive.CreateFile(
    {
        'title': 'data_invest.csv'
    }
)
f.SetContentFile(data_path)
f.Upload()
```

しかし，GoogleDriveは`title`が同じだとしても，`id`が同一かどうかで同じファイルかどうかを判断しているらしい．
上記コードだと，同じタイトルのファイルだとしても上書きされずに，新規ファイルとしてどんどん生成されてしまう．

### まとめ
上書きしたいときは`id`をきちんと指定しましょう．

### 参考
- [OverWrite files on upload](https://github.com/gsuitedevs/PyDrive/issues/117)
- 実行環境

```
python3.7
pydrive 1.3.1
```
JavaScript （配列）

#配列とは
**複数の値をまとめて管理するとき**に用いる。
`[値1,値2,値3]`のように使う。
配列に入っているそれぞれの値のことを**「要素」**と呼ぶ。

```js
//文字列をまとめた配列
["apple","banana","orange"]
//数値をまとめた配列
[21,52,14]
```
##配列を定数に代入する
配列を代入する定数名は、**複数形**にすることが多い。

```js
//書き方
const fruits = ["apple","banana","orange"];
console.log(fruits);
//コンソール
["apple","banana","orange"]
```

##配列の要素を取得する
###インデックス番号
要素についている番号。
0から始まる。
`配列 [インデックス番号]`で、その番号の要素を取得できる。

```js
//書き方
const fruits = ["apple","banana","orange"];
console.log(fruits[0]);
console.log(fruits[2]);
//コンソール
apple
orange
```

##配列の要素を更新する
要素は上書きすることが可能。

```js
//書き方
const fruits = ["apple","banana","orange"];
console.log(fruits[0]);
fruits[0]="grape";
console.log(fruits[0]);
//コンソール
apple
grape
```

##配列とfor文
通常、要素をすべて出力するときは↓

```js
const fruits = ["apple","banana","orange"];
console.log(fruits[0]);
console.log(fruits[1]);
console.log(fruits[2]);
```
要素数が増えると、全部書くの大変:sweat:

**for文**を使う↓

```js
//・**変数 i**を用いる。
//・iが0~2（インデックス番号）の間ループする。
const fruits = ["apple","banana","orange"];
for(let i = 0;i < 3;i++){
console.log(fruits[i]);
}
```
とすることで、変数数が100になっても簡単に書くことができる。
###length
配列の要素数を取得できる。
（要素の数が分かる。）

```js
//書き方
const fruits = ["apple","banana","orange"];
console.log(fruits.length);
//コンソール
3
```
配列でよく使います↓

```js
const fruits = ["apple","banana","orange"];

console.log(fruits.length);

for(let i = 0;i < fruits.length;i++){
console.log(fruits[i]);
}
//コンソール
3
apple
banana
orange
```
Flexbox Gridとは

こんにちは
未来電子という会社でインターンをしているものです。
プログラミング経験が浅いため間違いがあるかもしれませんがお手柔らかにお願いします。
今回はFlexboxとGridについて書いていきたいと思います。

#Flexboxとは
Flexboxとはレイアウトモジュールのことです。
Flexboxを使用することで本来javascriptやcssで設定していた複雑なレイアウト設計が簡単になります。

素のcssではmarginやfloatなどをしっかりと理解しなければデザインが崩れることがよくあったと思います。
しかしFlexboxは設定が簡単なため、レイアウトしやすく、崩れたりすることはありません。


#Gridとは
格子状のように、行と列があり、その中でどのようにレイアウトするかを決めるもので、
これを使用することで二次元グリッドシステムを使用することができます。


#使い分け
Flexbox、Gridどちらか一方があれば十分というわけではありません。
それぞれ異なる特徴があるため、目的に応じて使い分けることが重要でしょう。

例えばFlexboxはコンテンツの内容がロードされたあとに計算されるため
ページ全体にFlexboxを使うのは避けたほうがいい、といったことがあります。


#参照サイト
https://webdesign-trends.net/entry/8148#Flexbox
https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout
https://coliss.com/articles/build-websites/operation/css/css-grid-vs-flexbox-which-should-you-choose.html
js / jsx -> ts / tsx

React SPAのTypeScript対応時にぶん回すと良い。

```bash
# CRAの場合
$ cd src

# jsx -> tsx
$ find * -type f -name "*.jsx" -print0 | while read -r -d '' file; do mv "$file" "${file%.*}.tsx"; done

# js -> ts
$ find * -type f -name "*.js" -print0 | while read -r -d '' file; do mv "$file" "${file%.*}.ts"; done

```
GCP Professional Cloud Architectに合格した勉強法

2019年9月にGCP Professional Cloud Architectを受験し合格しました。ここでは主に自分が試験までに行った勉強方法についてまとめました。これだけで100%合格するわけではありませんが、勉強法がわからないという方にひとつの参考として読んでいたければと思います。

# Professional Cloud Architectの概要
他の合格記をまとめてらっしゃる方が記載していたり、公式ドキュメントにほぼ記載されているためここでは割愛します。
公式ドキュメント：https://cloud.google.com/certification/?hl=ja


# 受験者のスキル・経験
* エンタープライズ企業にて、GCPを使ったコンシューマ向けWebアプリ（現在開発中）のインフラエンジニアを担当
* WebアプリはGKE上で構築
* その他、Cloud Firestore、Dataflow、Cloud Composerなどを利用
* 過去1年間AWSのインフラ担当の経験あり（EC2上にOpenShiftを構築してサービス提供）
* 本資格取得の半年前にAWS SAAを取得

# 勉強方法
## 「GCP エンタープライズ設計ガイド」を一通り読む
勉強を開始したときはGKEとその周辺サービスしか触ったことがなかったので、DBやビッグデータ系のサービスはこの本でさらっと概要を理解しました。
ここでは細かいサービスの使い分けやサービスの連携は意識せず、まずはどんなサービスを主軸にGCPが構成されているのかを理解することに注力しました。

## 模擬試験を受ける
このタイミングで公式の模擬試験を受験しました。
問題は常に一緒なので、個人的にはもう少しあとのタイミングで受けた方が良かった気がします。
この時点での正解率は5割ほどでした。

## DB・BigData系のサービスの特徴をまとめる
DBやBigdata周りはGCPだけでなくAWSやオンプレでもきちんと触ったことがなかったので、公式のドキュメントやネットの記事を参考にしながら自分なりにまとめました。
特にBigData系のサービスは色々なサービスと連携して利用することが多いので、ネットに転がっているGCPの構成図を見て全体像と一緒に理解を深めました。

## 問題集を解く
AmazonのKindleストアに「Google Cloud Certified Professional Cloud Architect practice exam test Questions」という英語の問題集があったので翻訳しながら解いていきました。解説も詳しく書いており、他の選択肢がなぜ誤りなのかもわかるようになっています。問題が重複していたり図がなくて解けない問題もいくつかありますが、安価にたくさんの問題が解けたので非常に役に立ちました。

## ケーススタディのアーキテクチャを考える
CourseraやYoutubeにアップされているケーススタディごとのアーキテクチャ解説動画を一通り視聴しました。Computeサービスのうちどれが最適なのか、DBサービスの中でどれが候補に上がるのか、などが分かるので、選択肢で迷った時に役立つかもしれません。

* Youtube
    * Dress4win：https://www.youtube.com/watch?v=TtBWCDhEabY
    * Mountkirk Games：https://www.youtube.com/watch?v=65g7AbjC4EA
    * TerramEarth：https://www.youtube.com/watch?v=87T13gyjSJ4


* Coursera
    * Dress4win：https://ja.coursera.org/lecture/preparing-cloud-professional-cloud-architect-exam/dress4win-sample-solution-KXrnv
    * Mountkirk Games：https://www.coursera.org/lecture/preparing-cloud-professional-cloud-architect-exam/mountkirk-games-sample-solution-ZUaYI
    * TerramEarth：https://ja.coursera.org/lecture/preparing-cloud-professional-cloud-architect-exam/terramearth-sample-solution-SR1ak


## 受験した感想

試験内容については詳しく書けませんが、他の受験記の通り模擬試験よりかなり難しく感じました。どの選択肢も同じような内容で、ある特定の部分だけ異なるといったものが多いため、雰囲気だけの知識では最後の一択まで絞り込めないようになっています。
ただし上記の問題集で「なぜこの選択肢が誤りなのか」まできちんと理解できれば、正解までたどり着ける問題が増えると思います。


## 最後に
現在パブリッククラウドとしてAWSを採用している企業が多いですが、昨今の世の中のK8sや機械学習の勢いを見るとGCPを採用する企業も増えてくると思います。この記事を見て一人でも多くの方が「受けてみよう」と思っていただけると嬉しいです。
PhpStormでデータベースのスキーマが開けなくなった時の対処法

データベース接続設定は正しいのに、正しくスキーマが開けなくなる事象が度々発生します。

対応方法は、データベースタブを開いた状態で、右クリック。
その後、下図のように、Force Refreshを選択すると正常にデータベースのスキーマが表示されるようになりました。

<img width="585" alt="スクリーンショット 2019-10-07 17.25.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166768/ddc48f54-440b-7d4e-7e2a-52bb15353c3d.png">
調査観察データで出てくる変数

1. 従属変数
<B>結果となる変数</B>のことである．結果変数や基準変数とも呼ばれる．

1. 独立変数
<B>原因となる変数</B>である．説明変数や予測変数，処理変数とも呼ばれる．
特殊な例として<B>調整変数</B>がある．<B>独立変数との交互作用が従属変数に対し大きな影響を与える変数</B>である．ある変数の値（性別，年齢，職業など）で層別した時に従属変数と独立変数の関係を見ると，層間で関係が大きく異なる．この場合の変数は調整変数である．解析上は適切な交互作用項を導入し，モデルに組み込む必要がある．

1. 共変量
従属変数と独立変数の関係を明確にするために，<B>統制する必要がある変数</B>である．従属変数と独立変数の両方に関連のある変数である．統制変数とも呼ばれ，医学分野では交絡因子，交絡要因と呼ばれることがある．

1. 中間変数
<B>独立変数から影響を受け，従属変数に影響を与える変数</B>のことである．媒介変数とも言われる．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397449/92f31d01-39d2-a8b9-16f5-f39fc2a609c1.png)
【Microsoft Flow】手動でフローをトリガーするボタンで食わせたファイルの拡張子を取得する

## 前提

MS Flowで作成したフローを実行するためのボタンを「手動でフローをトリガーします」トリガーで作成するとき、以下の引数を設定することができる

+ テキスト
+ はい/いいえ
+ **ファイル**
+ 電子メール
+ 数
+ 日付

## 今回のテーマ(pngさん激おこ案件)

「ファイル」を食わせたときに拡張子をうまく拾えないか？
MSが公開しているテンプレートもご覧の有様であり、**pngさん激おこ案件**

引用：[OneDrive for Business に写真をアップロードする | Microsoft Flow](https://japan.flow.microsoft.com/ja-jp/galleries/public/templates/050fc92d1a7b48ef86dd71a43b36890d/onedrive-for-business-%E3%81%AB%E5%86%99%E7%9C%9F%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B/)

![2019-10-07 16.46.07 japan.flow.microsoft.com c42a5c1f6228.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82307/5f18c6aa-ab0f-4efc-3969-62a2f0cf18c7.png)

## 取得方法

アップロードするファイル名を`qiita.png`とする

### A:拡張子も含めたファイル名全体

```出力例：qiita.png
triggerBody()?['file']?['name']
```

### B:拡張子のみ取得

```出力例：.png
substring(string(triggerBody()?['file']?['name']),lastIndexOf(string(triggerBody()?['file']?['name']),'.'),sub(length(string(triggerBody()?['file']?['name'])),lastIndexOf(string(triggerBody()?['file']?['name']),'.')))
```

## 実例

公式テンプレートに手を入れて、pngさんもアップロードできるようにする

![2019-10-07 17.07.56 japan.flow.microsoft.com cf292cd98a80.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82307/072bd8f2-3560-9ed1-2d91-ba004ad14899.png)

※fxには、「拡張子のみ」を取得する式を埋め込んでいる
Vue.jsでネストした配列、連想配列の更新

# 初めに
* ネストした配列、連想配列の更新を調べていたので、ここにやり方を残しておく。

# 結論
* 2階層にネストしていても考え方は1階層と同じ  
* 親が配列で孫を更新するのはちょっとだけ書き方が面倒

# 1階層の配列、連想配列の更新
```html:index.html
<html>
  <body>
    <div id="app">
      <input v-model="inputArray" />
      {{ array }}<br />
      <input v-model="inputDict" />
      {{ dict }}
    </div>
  </body>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    var app = new Vue({
      el: "#app",
      data: {
        input: { array: [], dict: {} }
      },
      computed: {
        array() {
          return this.input.array;
        },

        dict() {
          return this.input.dict;
        },

        inputArray: {
          get() {
            return this.input.array[0];
          },
          set(value) {
            // computed:arrayに変更伝わらない
            // this.input.array[0] = value;

            // computed:arrayに変更伝わる
            this.input.array.splice(0, 1, value);
          }
        },

        inputDict: {
          get() {
            return this.input.dict.key1;
          },
          set(value) {
            // computed:dictに変更伝わらない
            // this.input.dict.key1 = value;

            // computed:dictに変更伝わる
            this.input.dict = { ...this.input.dict, key1: value };
          }
        }
      }
    });
  </script>
</html>
```

## 参考リンク
* [配列更新](https://jp.vuejs.org/v2/guide/list.html#%E5%A4%89%E6%9B%B4%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89)
* [オブジェクト追加削除](https://jp.vuejs.org/v2/guide/list.html#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E5%A4%89%E6%9B%B4%E6%A4%9C%E5%87%BA%E3%81%AE%E6%B3%A8%E6%84%8F)
* [Vue.jsリアクティブ](https://jp.vuejs.org/v2/guide/reactivity.html)

# 2階層にネストした配列、連想配列の更新
```html:index.html
<html>
  <body>
    <div id="app">
      <input v-model="inputArray" />
      {{ array }}<br />
      <input v-model="inputDict" />
      {{ dict }}
    </div>
  </body>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    var app = new Vue({
      el: "#app",
      data: {
        input: { array: [{}], dict: { key1: [] } }
      },
      computed: {
        array() {
          return this.input.array;
        },

        dict() {
          return this.input.dict;
        },

        inputArray: {
          get() {
            return this.input.array[0].key1;
          },
          set(value) {
            // computed:arrayに変更伝わらない
            // this.input.array[0] = { ...this.input.array[0], key1: value };
            // this.input.array[0].key1 = value;

            // computed:arrayに変更伝わる
            this.input.array.splice(0, 1, {
              ...this.input.array[0],
              key1: value
            });
          }
        },

        inputDict: {
          get() {
            return this.input.dict.key1[0];
          },
          set(value) {
            // computed:dictに変更伝わらない
            // this.input.dict.key1[0] = value;

            // computed:dictに変更伝わる
            this.input.dict.key1.splice(0, 1, value);
          }
        }
      }
    });
  </script>
</html>
```
BackstopJSとは

こんにちは
未来電子という会社でインターンをさせてもらっているものです。
まだ経験が浅いため、間違いがあるかもしれませんが、お手柔らかにお願いします。

今回はBackstopJSについて備忘録として書きます。

#BackstopJSとは
BackstopJSとは変更前後のスクリーンショットの差分を抽出してテストするvisual regression testです。
（visual regression testとは視覚的に回帰してテストするということです。）

普通UIの表示崩れなどが起こったときなどはtemplatesを見ることによって解決していました。
しかしBackstopJSはスクリーンショットで差分を検出できるため、templatesを見なくても良くなるのです。
そのためUIをチェックするときに非常に便利です。

#インストール方法、使い方
```$ npm install -g backstopjs```でインストールできます。

```$ backstop init```
で初期化します。

次に
```$ yarn storybook```
でタブを増やし
```$ yarn spec:visual```
でスクリーンショットを取ります。

最後に
```$ yarn test:visual```
で再度スクリーンショットを取り、差分をテストすることができます。

異なる部分があればエラーが表示されます。


#参照サイト
https://github.com/garris/BackstopJS
https://qiita.com/Yuta_Yamamoto/items/44c6f51fdbc103302f43
http://lab.astamuse.co.jp/entry/2017/08/30/114500
SPSS Modelerフィールド名と一体のコピー

# SPSS Modelerの小技の「フィールド名と一体のコピー」
SPSS Modelerの小技の「フィールド名と一体のコピー」をご紹介します。

SPSS Modelerのプレビュー表示やテーブル表示を行って、データを選択した後に右クリックすると「フィールド名と一体のコピー」というメニューがあります。これはデータとともに列名もクリップボードに入れてくれる機能です。

例えば以下のような選択をして「フィールド名と一体のコピー」を行うと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/69430f5d-bc85-c8c1-2206-356dc51ff1cd.png)

以下のようなデータが得られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/3d4f4695-e5df-6b4d-6606-01076446f25b.png)

以下のようなときに役に立ちます。
* ちょっとExcelにデータをコピペしたいとき
* 列名の情報をコピーしたいとき

## Excelにデータをコピペ

以下のようにExcelにデータを貼りつけられます。エクスポートノードをわざわざ使わなくてもよいので手軽です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/8b2bcebc-5c00-38bf-af81-d897046372ff.png)

## 列名がほしい
列名だけが欲しいことがあります。
例えば@FILED_BETWEENという関数があります。データの中の特定範囲の列のデータのリストを取る便利な関数です。

以下は二つの列を指定するだけで、大分類_アクセサリ_小計_Sum、大分類_インナーウエア_小計_Sum、大分類_バッグ_小計_Sum、大分類_化粧品_小計_Sum、大分類_婦人服_小計_Sum、大分類_靴_小計_Sum、大分類_食品_小計_Sumの合計値を求めることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/df7d7c52-c6e9-7227-1051-cac3f06b35e2.png)


しかし、これはSQLプッシュバックしないという問題があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1dccce93-fb58-42fd-6f4e-223be8f5ed5c.png)


以下のようにすべての列名を展開して書き換えるとSQLプッシュバックするようになります。列名を「フィールド名と一体のコピー」で取得して、タブ文字を「+」に置き換えるだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/7456423d-78ea-e159-1787-6a3d64b0442e.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c8b3afc5-3793-3026-ec25-e4fe73b565d9.png)
sshが使えないときにファイルを高速でサーバにアップロードする

## 背景

今まではサーバに何かをアップロードするときにはscpを使っていましたが、レンタルサーバ等でsshが使えない場面に遭遇しました。
FTPクライアントにCyberduckを使うと少量のファイルアップロードには問題ありませんが、大量にファイルをアップロードしようとするととても時間がかかります。

## 解決
「FileZilla」を使いました。

https://filezilla-project.org/

接続設定はCyberduckとほぼ変わりませんが、ポイントとなるのが転送設定の最大同時転送数の部分（赤枠の部分）を最大（10）まで設定します。このように設定することで、爆速でファイルをサーバにアップロードすることができます。
(アップロード中に設定を変更しても適用されるので、アップロードが遅くてお困りの方はぜひお試しください)

![スクリーンショット 2019-09-25 15.17.22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36927/3cb22ffc-a61e-23a7-8623-b6f7ba0035b4.jpeg)
電子回路の基礎の基礎

電気回路はこれまでにも書いたことあったけど電子回路についてまったくの無知だったので今更ながら初歩の初歩を学んでみました。
電気回路についても中学生レベルの話しかしない予定なので物理に拒否反応を示す人でも大丈夫な内容だと思います。
初心者なので「ここ違うよ」という箇所があれば指摘していただければと思います。

今回は一番簡単そうなLチカの電子回路について考えていきます。

##Lチカ回路で登場するパーツ
**電源**
　電気を供給してくれるやつ。いわゆるバッテリー。電気回路でもよく使う。乾電池とか。

**LED(発光ダイオード)**
　電気が流れたら光るやつ。電気回路だと豆電球のほうがよく使う気がする。豆電球と違って電流の流れる向きが決まってる。

**抵抗**
　電流の流れを妨げる働きをするもの。抵抗無しでLEDに電気を流すとショートしちゃう可能性がある。

##電気の基礎のおさらい
電子回路を考える前に基礎となる電気回路について少しおさらいします。
こちらがよくある豆電球の回路。
<img width="617" alt="スクリーンショット 2019-10-07 15.49.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/6418424b-cf7f-1c93-e251-3909653e08a2.png">
1.5Vのバッテリー(アルカリ乾電池)と豆電球がつながっているだけの簡単な回路です。
電子は実際にはマイナスからプラスに向かって流れていますが、わかりにくいので電流はプラスからマイナスに流れているということにします。
電気回路を学ぶ上で必ず知っておくべき法則は以下の**3つ**だけです。

**オームの法則**
　ある回路電子に着目したときの電圧、抵抗、電流の関係式は
　**電圧 = 電流 * 抵抗**
　になるという法則。
　つまり電圧が一定のときなら抵抗を大きくすれば流れる電流は小さくなるということ。
　LED点灯はこの法則を利用して電流の量を調節してショートしないようにしている。

**電流則(キルヒホッフの第一法則)**
　回路線中の分岐点に流れ込む電流の和は流れ出る電流の和に等しいという法則。
　今回はこの法則べつに使わないので詳しい説明は割愛します。
　交流回路とか考え始めるとしょっちゅう使う。

**電圧則(キルヒホッフの第二法則)**
　閉回路中の起電力の総和と電圧降下の総和はイコールになるという法則。
　これも今回はあまり関係ないかも…
　上の回路だと、起電力は電源に流れてる1.5Vしかないから
　電圧降下(豆電球に流れてる電気)も1.5Vなんだなーくらいの認識でいいと思います。

電気の法則はいろいろあるけどとりあえずこの３つを知っておけばなんとなく電気は理解できるはず。

##ブレッドボードを見てみる
ここまでの話を理解した上で、Lチカ回路を考えてみます。
ブレッドボード図がこちら。
![Lチカ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/95b5a29f-2813-2ed1-29f4-3fc5e4f18291.png)

一応コードも書いておくとこんな感じです。
何の変哲もないBlink。13ピンから電気を供給して、1000ミリ秒間隔でチカチカ点灯させてます。

```cpp
void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}
```
ブレッドボード図を見ながら電気の流れを追ってみましょう。
電気の流れを作るときは必ず閉回路になるように回路を作る必要があります。
今回の図だと13ピン(電源)から流れてきた電流が抵抗を通り、その後LEDを通って最終的にGNDに到達していますね。

**GND**とはグランドのことで、電位の基準となる地点です。ようするに電位が0Vの地点。
先程の豆電球の回路でも最終地点は電位が0Vになってます。
<img width="632" alt="スクリーンショット 2019-10-07 15.47.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/9a2152e2-6ef9-ecb0-1483-47582188821e.png">
たまに電圧と電位が同じものだと思っている人がいますが、(単位が同じだからわかりにくい)
電圧とは電位の差のことです。アルカリ乾電池はプラス端子の電位が1.5Vでマイナス端子の電位が0Vなので電圧は1.5Vとなるわけです。

##電子回路を考える
前置きが長くなってしまいましたがここらでようやく電子回路を考えてみます。
先程のブレッドボード図から作成された回路図が
<img height="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/c3cffbb9-87a8-9b8c-8c44-0c5b3fbe96cd.png">

これ。
左のやつはArduinoの基板そのものですね。プラス端子が13ピンに、マイナス端子がGNDに刺さってることが見て取れます。
プラス端子から接続されているやつが**抵抗**です。すぐ横に220Ωと書いてありますね。これが抵抗の大きさを表しています。この数字が大きくなればなるほどLEDの明るさは小さくなるということです。(オームの法則より)
電気回路だと抵抗は長方形の記号で書くことが多い気がしますが、電子回路だとギザギザで書くみたいです。

その次にある三角形の矢印っぽいやつがLEDを表しているようです。最初にも言ったとおり、LEDは豆電球とは違って厳密に電流の流れる向きが決まってます。
こうやって矢印っぽい記号を用いればたしかに電気の流れが一方通行感がでますね。

##まとめ
いままで電子回路はなんだかごちゃっとしててよくわからないからブレッドボード図しか見てきませんでしたが、こうしてじっくり見ていけばそこまでむずかしい回路図ではないように思いました。
ただ、電気回路では使ったこともないような記号がまだまだたくさんあるようなので覚えることは多そう…

##参考
[Ardiuno doc](https://fabkura.gitbooks.io/arduino-docs/)
tmuxとw3mでweb検索＆webサイト見ながらterminal操作

普段からmacのterminalを操作することが多く、terminal作業をどう効率的に行っていくかと日々悩んでおり、terminalとWebブラウザを画面切り替えしながら作業していく事にすごく煩わしさを感じてたりもします。
今回は[tmux](https://ja.wikipedia.org/wiki/Tmux)と、[w3m](https://ja.wikipedia.org/wiki/W3m)を使って、terminalでwebサイトを見ながら、操作やってきます。


# こんな感じになる
以下の画像では、tmuxの機能を使って、画面を2分割し、左側にvi、右側に[qiitaの記事](https://qiita.com/yuya_sega/items/ce5f754958db430386f9)を表示してます。
markdownとかが正しく表示されていないものの（テキストブラウザなのでしょうがない）、コマンド打つ作業で、webサイト見ながら作業したいケースであれば十分耐えられるのではないでしょうか。

![スクリーンショット 2019-10-07 14.28.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323088/369dea9f-87ec-628e-2d24-eb3d0b3fd609.png)


# 環境構築はすごく簡単
HomeBrewで、tmuxとw3mとインストールするだけで利用可能になります！

```console
$ brew install tmux
$ brew install w3m
```

# 超基本的なtmuxの使い方
tmux起動して、画面分割してってとこまでやってみます。
tmuxのいろんな使い方に関しては、webにたくさんころがってるので、それを参考にしてみてください。
<僕が参考にさせていただいたのは>
https://qiita.com/nmrmsys/items/03f97f5eabec18a3a18b
https://qiita.com/hypermkt/items/ae0f768bfd807e554a8e

```console
$ tmux #← tmux起動
```
起動するとこんな感じ
![スクリーンショット 2019-10-07 15.46.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323088/96d72e49-b83d-0f5b-84f7-23af174a4600.png)

起動したあとに、`Ctrl-d + %`（Control押しながらd押してからの、Shift押しながらの5）
で画面分割できます。
![スクリーンショット 2019-10-07 15.50.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323088/e9ea2463-f632-6dcc-0886-b222ab1f51ce.png)

# 超基本的なw3mの使い方
yahooで、検索してみます。（本当はgoogleがいいんですが、なんでgoogleにしなかったかは、後ほど説明します・・）

基本、使い方は`w3m <url>`これだけです。
コンソールに以下を入力し、`Enter`してください

```console
$ w3m https://search.yahoo.co.jp/search?p=qiita
```
![スクリーンショット 2019-10-07 16.29.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323088/2cfbe87a-5aa7-ef37-ced0-ee6c76a634ae.png)

これで、検索結果が表示されました！
超基本操作は以下です。

* 青色になってる部分にカーソルを持っていって、`Enter`で画面遷移。
* `Shift + b`で前のページに戻る
* `Shift + q`でw3m画面を終了する。（`q`だけだと、「本当にw3mを終了する」かどうか聞かれます。）

### 以上です。

# やってみてどうだったか

## こまったこと

### googleで検索すると、リンク先がリンクにならない
以下の画像のように、白文字になってしまい、リンクとして認識されません。。
![スクリーンショット 2019-10-07 16.43.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323088/957f0274-e240-b64c-73d9-928727168146.png)

#### `:`を押下するとリンクとして認識されるんですが・・・
ドメインまでしかリンクにならず、パスを含んでくれません。。（ご存知の方いたら教えて下さい）
![スクリーンショット 2019-10-07 16.45.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323088/0a2f5527-14d7-e0a4-88e8-e3c58d3c329d.png)

## よかったこと
* いままでいくつもterminalのタブ開いて行き来しながら操作していたことが、画面分割によって手間が減った。
* webサイトはもちろんリッチじゃないけど、コマンド見る程度の情報はテキストブラウザで十分だなと感じた。


# 今の時代ならわざわざこんなことする必要ってないんじゃないの？
結局、VScodeだったり、他にもホストのコマンド打ちながらwebサイト見れるツールなんていくつもありそうなもんですよね。
<strong>ぜひこれつかって！</strong>ってものがあれば教えて欲しいです。
[Unity] ビルド時のXRSettingsの変更を反映してビルドする

Unityのバージョン: Unity2018.2.21
エディタ拡張を用いて、各プラットフォーム向けにビルドする際、`XRSettings.LoadDeviceByName()`を使用してビルドしても反映されないので調べた。
String[]の順番を変えれば、優先順位の変更もできる。

```.cs
// Oculus Integration → OpenVR(Unityビルトイン)の優先順位に設定
UnityEditorInternal.VR.VREditor.SetVREnabledDevicesOnTargetGroup(BuildTargetGroup.Standalone,new String[] { "Oculus", "OpenVR"});
```

なお、上記で実行すると、PlayerSettingsが恒久的に切り替わるので注意。
ビルド前の設定を維持したい場合は、上記スクリプトの実行前に`XRSettings.supportedDevices`を取得して保持しておくとよい。

参考
[How to change Virtual Reality SDKs list in Unity Build settings (via script)](https://skarredghost.com/2017/01/12/how-to-change-virtual-reality-sdks-list-in-unity-build-settings-via-script/)
[SetVREnabledOnTargetGroup / not always working / Cardboard issue - Unity Forum](https://forum.unity.com/threads/setvrenabledontargetgroup-not-always-working-cardboard-issue.535732/)
formsy-reactとは？

formsy-reactについて書いていきたいと思います。
私は未来電子という会社でインターンをさせてもらっています。
まだまだ実力不足であるため間違いがある可能性が高いです。
お手柔らかにお願いします。

#formsyとは
formsyとはreactにおいて入力(input)を作り、入力の検証を設定するものです。

formsy-reactを使うことで自分が設定したい入力フォームを作ることができ、
エラー表示も好きに設定することができます。


#インストール方法

```yarn add formsy-react react react-dom```
でインストールできます。

#使用例
公式githubにあった例を紹介します。

まずformsy elementを作成します

```
// MyInput.js
import { withFormsy } from 'formsy-react';
import React from 'react';

class MyInput extends React.Component {
  constructor(props) {
    super(props);
    this.changeValue = this.changeValue.bind(this);
  }

  changeValue(event) {
    // setValue() will set the value of the component, which in
    // turn will validate it and the rest of the form
    // Important: Don't skip this step. This pattern is required
    // for Formsy to work.
    this.props.setValue(event.currentTarget.value);
  }

  render() {
    // An error message is returned only if the component is invalid
    const errorMessage = this.props.getErrorMessage();

    return (
      <div>
        <input onChange={this.changeValue} type="text" value={this.props.getValue() || ''} />
        <span>{errorMessage}</span>
      </div>
    );
  }
}

export default withFormsy(MyInput);
```

次に作成したformsy elementを使用します。

```
import Formsy from 'formsy-react';
import React from 'react';
import MyInput from './MyInput';

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.disableButton = this.disableButton.bind(this);
    this.enableButton = this.enableButton.bind(this);
    this.state = { canSubmit: false };
  }

  disableButton() {
    this.setState({ canSubmit: false });
  }

  enableButton() {
    this.setState({ canSubmit: true });
  }

  submit(model) {
    fetch('http://example.com/', {
      method: 'post',
      body: JSON.stringify(model),
    });
  }

  render() {
    return (
      <Formsy onValidSubmit={this.submit} onValid={this.enableButton} onInvalid={this.disableButton}>
        <MyInput name="email" validations="isEmail" validationError="This is not a valid email" required />
        <button type="submit" disabled={!this.state.canSubmit}>
          Submit
        </button>
      </Formsy>
    );
  }
}
```

#参照したサイト

https://github.com/formsy/formsy-react
OS（Debian）、パッケージマネージャーなどについて[備忘録]


本日は、OS周り（Debian）について学習しました。

新しい用語がたくさん出てきたり、大まかな流れなどが全然イメージできず、苦戦しましたが

なんとか先輩エンジニアのかたの助けもありなんとか60パーセントぐらいですが理解できました😅（多分、、）

 

それでは、本題の備忘録失礼します🔽
 

## OSによってパッケージマネージャーが違う

・ mac brew
・debian apt
・centOS yum


brew.apt.yumは兄弟のようなイメージ。対応するOSは違うけどやれることはほぼ一緒。

 

###  気づいたこと

（brewでgitをダウンロードできるということを知っていた場合）
兄弟のイメージのような共通点など大きな枠組みを掴むことで
aptでも
aptでgitをダウンロードするが可能なのではないか？という仮説が立てられる
　＝　枠組みを把握するのが大事

 


## ショートカットキー
### linux におけるログアウトショートカットキー
　control + D

 

### 他ユーザーでログインしている状態でrootユーザーに切り替えるショートカットキー
　su -

 

## 今日したミス
linuxでcontrol + Vのショートカットを使った。
　＝OSが違うからmacOSのショートカットキーを打ち込んでも何も起こらなかった。（当たり前😱）
 

## aptとは
パッケージマネージャー。ソフトウェアをインターネットからダウンロードしてインストールできる。


##外部Echo、内部Echoの違い

### 例
$ echo --version
--version
$ /bin/echo --version
echo (GNU sh-utils) 1.16

--------------------------------------

上の内部のechoは“—version”という文字列をそのまま表示するだけですが、（リダイレクト）
下の外部のecho“--version”を「バージョンを表示しろ」というオプションと理解して、/bin/echoのバージョンを表示してます。


### 例
Helloworld2
cat <<EOF
Hello World
EOF

------------------

上のコードの意味を噛み砕いて書いてみる

 

Helloworld2は

ここから<<EOF
Hello World
ここの値をEOF

cat <<EOF（catに入れる）

ということは
$ helloworld2には
Hello World が入っている

ということです。


 

最後までみてくれてありがとうございました。

また明日からも頑張ります。
UbuntuにDockerをインストールしてみる

Ubuntu18.04.3 (64bit)

## 古いバージョンをアンインストールする

```
$ sudo apt-get remove docker docker-engine docker.io containerd runc
```

## リポジトリ経由で『Docker CE』をインストールする

https経由でリポジトリを使用できるようにパッケージをインストールします。

```
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
```

```
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```

```
$ sudo apt-key fingerprint 0EBFCD88
```

```
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
```

latestバージョンの『Docker CE』をインストールします。

```
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
```

```
$ sudo docker run hello-world
```

# 参考サイト

https://docs.docker.com/install/linux/docker-ce/ubuntu
CentOS 7.7 (gcc v4.8.5) > NCL > Version 6.5.0のプリコンパイル版

```txt:動作環境
CentOS Linux release 7.7.1908 (Core)
```

WRF (Weather Research and Forecasting Model)関連。

[2016-07-15 WRF > NCLのインストール > CentOS6.8 (64bit) ](https://qiita.com/7of9/items/fe9fa72aafe43d77708c)
> https://www.earthsystemgrid.org/dataset/ncl.630.0/file.html
にある
ncl_ncarg-6.3.0.Linux_RHEL6.4_x86_64_gcc447.tar.gz
が同じgccのバージョンだ。

CentOS 7.7になったため、対応ファイルが変更になる。

対応ファイルの見つけ方に迷ったので、以下に記録として残す。

1. https://www.earthsystemgrid.org/dataset/ncl.html
2. NCL Version 6.5.0 (2019-10-09時点で最新)をクリック
3. NCL Version 6.5.0 precompiled binaries (OPeNDAP-enabled)をクリック
4. Download Optionsをクリック
    - (ここで分からなかった)
5. ncl_ncarg-6.5.0-CentOS7.5_64bit_gnu485.tar.gz を取得
    - CentOSのGFortranなどがv4.8.5のため


### 参考

- [インストール @ NCLtips!  (*'o')v 様](http://www.atmos.rcast.u-tokyo.ac.jp/shion/NCLtips/index.php?%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
    - > “Download Options”をクリック

情報感謝です。

### 補足

公式サイト
https://www.ncl.ucar.edu/Download/install.shtml
にも記載がありました。

> Click on "Download Options".
GitHub使ってみた

会社でGituHubなるものを使うので、試してみた。

##GitHubとは
　・ソフトウェア開発プロジェクトのためのソースコード管理サービス
　・バージョン管理を行う
##専門用語
　いろいろある。

　まずは、リポジトリ（変更を保存する場所）についてである。

　・**リモートリポジトリ**：サーバ、ネットワーク上にある
　・**ローカルリポジトリ**：リモートリポジトリとの間でやり取り
　・**ローカル**：作業場、ローカルリポジトリとやり取り


　次に操作名であるが、以下のとおりである。

　・**コミット**：ローカルからローカルリポジトリへ変更履歴を保存
　・**プッシュ**：ローカルリポジトリからリモートリポジトリへ変更履歴を保存
　・**プル**：リモートリポジトリからローカルリポジトリへデータ取得

　他には**ブランチ**というものがある。
　難しいので簡単に説明すると、
**「複数のバージョン管理を並行して行う機能」**
　といった感じである。

以下のサイトがとても参考になる。
https://techacademy.jp/magazine/6235#sec6

##GitHubの使い方
 基本的には以下のような流れである。
　1. リポジトリの複製（Git Clone）
　2. ブランチ作成
　3. ブランチへ移動
　4. ファイル作成、編集
　5. コミット
　6. プッシュ
　7. プル

##まとめ
　実際に使ってみたが、まだまだ覚えきれないところが多い。
　次のGitHub記事ではより深いところまで伝えられるよう勉強してこう…
phpspreadsheet cell type

$sheet->setCellValueExplicit(
    'E1',
    '012345',
    \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING
);

other types

文字列　・・・　DataType::TYPE_STRING
数字　・・・　DataType::TYPE_NUMERIC
true / false　・・・　DataType::TYPE_BOOL
null　・・・　DataType::TYPE_NULL
式　・・・　DataType::TYPE_FORMULA
Ruby 正規表現の学習

# 正規表現の特徴
プラグラミングの中で正規表現を利用するケースは多くの場合以下の３つになる。

+ 文字列の一部分を置換えする
+ 文字列が制約を満たしているか調べる
+ 文字列の一部部分を抽出する

# 正規表現を実現する２つのメソッド
Rubyにおいて正規表現を利用するために重要な２つのメソッド

+ subメソッド
+ matchメソッド

# subメソッド
例)

```:ターミナル
irb(main):001:0> str = "りんごを食べる"
=> "りんごを食べる"

irb(main):002:0> str.sub(/りんご/,"みかん")
=> "みかんを食べる"
```
「りんごを食べる」という文字列が「みかんを食べる」という文字列に変換される。
● __subメソッド__は、文字列の指定した部分を別の文字列に置き換えるためのメソッドであり、第一引数に置き換えたい文字列を指定し、第2引数に変換後の文字列を指定する。
また、JavaScriptでは、subメソッドと同じ機能を持つメソッドとして、replaceメソッドがある。
### irbでもう一度subメソッドを使ってみる
```:ターミナル
irb(main):001:0> str = "おにぎりを食べる"

irb(main):002:0> str.sub(/おにぎり/,"ラーメン")
=> "ラーメンを食べる"
```
以上が__subメソッド__です。
# matchメソッド
例)

```:ターミナル
irb(main):001:0> str = "Hello, World"
=> "Hello, World"

irb(main):002:0> str.match(/Hello/)
=> #<MatchData "Hello">

irb(main):003:0> str.match(/good/)
=> nil
```
「Hello, World」という文字列に、「Hello」という文字列が含まれているか否かをチェックしている。
● matchメソッドは引数に指定した文字列がレシーバの文字列に含まれているか否かをチェックするメソッドである。
含まれている場合は、指定した文字列がMatchDataオブジェクトの返り値で得られます。また、含まれていない場合は、返り値をしてnilが得られる。<br>
● __MatchDataオブジェクト__
マッチした文字列等はMatchDataオブジェクトで返される。
MatchDataオブジェクトから文字列等を取り出す際は、以下の様に配列からデータを取り出す時と同様の形で取り出すことができる。

```:ターミナル
irb(main):001:0> str = "Hello, World"
=> "Hello, World"

irb(main):002:0> md = str.match(/Hello/)
=> #<MatchData "Hello">

irb(main):003:0> md[0]
=> "Hello"
```
### irbでもう一度matchメソッドを使ってみる
```:ターミナル
irb(main):001:0> str = "good friend"
=> "good friend"

irb(main):002:0> md = str.match(/good/)
=> #<matchData "good">

irb(main):003:0> md[0]
=> "good"
```
今日はRubyの正規表現で使う__subメソッド__と__matchメソッド__の２つについて書いてみました。
少しづつやっていくつもりで学習すると混乱しなくていいですね！
今度、時間が取れた時には正規表現の様々なパターンについて載せてみたいと思います。
Vegaの条件分岐がif文に加えて三項演算子も使えたというお話

業務で利用しているVegaで条件分岐が可能か調べてみると[ドキュメント(英語)](https://vega.github.io/vega/docs/expressions/#control-flow-functions)が見つかりました。書き方として以下の２種類が有る様です。

# if文で書く方法

```c
if(test, thenValue, elseValue)
```
![ifbun.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/1b1bd629-fb3d-3596-bdcc-6f0c8a90c22f.png)

# 三項演算子を使って書く方法

```c
test ? thenValue : elseValue
```
多くの言語で採用されている三項演算子の書き方で書けます。余談ですが[Pythonの三項演算子](https://docs.python.org/ja/3/reference/expressions.html#conditional-expressions)は特殊な書き方でいつも書き方が分からなくなります・・・:sob:。因みにVegaはJavaScriptベースの様です。

![3kouenzanshi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/38e79f6b-30ef-0ef5-db33-24bb295606dd.png)

どちらの書き方でもグラフに変更が反映されています。今回はVega Examplesの[Bar Chart Examples](https://vega.github.io/vega/examples/bar-chart/)のソースを使用しました。:sweat_smile: 漸くVegaでデータ階層にアクセスする方法(datum.xxx)をマスター出来ました。今後もVegaの研究を続けていくこととします。
[Ruby]Time型,Date型から文字列への変換、日付の比較

#TimeとかDateとかニガテ
RubyのTime型やDate型に疎いので、これらの変換に関してメモ。

#文字列をTime型やDate型にする
`Time.parse`や`Date.parse`を使う。
`to_date`を使うとTime型からDate型に変換できる。
`to_time`は一度Date型にしてしまうと時刻を失うので、00:00:00になる。


```ruby:
str_time = '2020-01-01 12:00:00'
Time.parse(str_time)
#=> 2020-01-01 12:00:00 +0900
Date.parse(str_time)
#=> #<Date: 2020-01-01 ((2458850j,0s,0n),+0s,2299161j)>
Time.parse(str_time).to_date
#=> #<Date: 2020-01-01 ((2458850j,0s,0n),+0s,2299161j)>
Date.parse(str_time).to_time
#=> 2020-01-01 00:00:00 +0900
```
# 14桁の数字をTime型に
DBに保存する際は、'2020-01-01 12:00:00'ではなく'2020010112000000'とする場合もある。
DBから取り出した14桁の数字をTime型にしたい。

```ruby:
int_time = 2020010112000000
str_int_time = int_time.to_s
#=> '2020010112000000'
fix_str_int_time = str_int_time.insert(8, " ")
#=> '20200101 12000000'
str_int_time_to_time = Time.parse(fix_str_int_time)
#=> '2020-01-01 12:00:00 +0900'
```
'2020010112000000'これのまま変換しようとすると
'2020-01-01 00:00:00 +0900'と時刻が反映されなくなるので注意。

反対に14桁の数字の文字列をDBに保存する場合は`strftime`メソッドを使う。

```ruby:
str_int_time_to_time.strftime("%Y%m%d%H%M%S")
#=> '2020010112000000'
```
# 日付の比較
Time型のものは`to_date`メソッドを使用してDate型で比較する。

```ruby:
current_date = current_time.to_date
current_date.prev_day(5) < Date.today
#=> true
```
prev_day(n)はｎ日前
next_day(n)はｎ日後

#おわりに
時間関連がでてくると実装を後回しにしまいがちな自分がいたので、簡単な変換を整理しました。
次のことを明確に確認しました。
- 14桁の数字の文字列は日付と時刻の間に空白がないと上手くいかない
- 日付の比較はTime型をto_dateすれば、不等号で比較ができる

こんなところでしょうか。
CentOSのDockerImageでsystemctlコマンドを使う

## 起動
`--privileged`オプションをつける

```
docker run -d --privileged centos /sbin/init
```

## bashにログイン

```
docker exec -it 0194fd8abde9 /bin/bash
```

## systemctlコマンド実行できた

```
[root@0194fd8abde9 /]# systemctl status dbus.service
● dbus.service - D-Bus System Message Bus
   Loaded: loaded (/usr/lib/systemd/system/dbus.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2019-10-07 07:08:58 UTC; 2min 25s ago
     Docs: man:dbus-daemon(1)
 Main PID: 50 (dbus-daemon)
   CGroup: /docker/0194fd8abde967b627918642e75db65a78fc4679d2723d150e96fcd20ebd5f04/system.slice/dbus.service
           └─50 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
           ‣ 50 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation

Oct 07 07:08:58 0194fd8abde9 systemd[1]: Started D-Bus System Message Bus.
[root@0194fd8abde9 /]#
```

詳しくはよくわからない

## 参考
https://qiita.com/Targityen/items/6e80b855b79d521412f0
Matlab ×Kinect V2「Image Acquisition Tool アプリ」使い方・コードの自動生成

前回の記事[Matlab で Kinect V2 を使う （簡単な使い方＋モーションキャプチャー）](https://qiita.com/Metacrinus/items/55a910cea0b805e96c05)でMatlabでのKinectの簡単な使い方とその使い方の例を挙げて紹介した。
本記事では Kinectをmatlabで使う際に使えるアプリ「Image Acquisition Tool」 について基本的な操作方法についてまとめようと思う。
[参考記事 Acquisition Using the Image Acquisition Tool(英語版)](https://jp.mathworks.com/help/imaq/acquisition-using-the-image-acquisition-tool.html?s_tid=CRUX_lftnav)
#使用環境
- matlab 2019a 
- windows 10

# アプリの画面
 <img width="959" alt="P1.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/f8023720-f5d5-065f-5353-53563335f3e0.jpeg">
初期画面（何もつなげずに開いた場合）
<img width="960" alt="p2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/e7d8b6d8-e8b7-e5f5-ecdc-c0b8a7628076.png">


Kinect V2と接続した場合

これ以後では(1)～(5)に分け、それぞれの使い方について簡単に説明する。
(1)Hardware Browser
(2)Preview
(3)Information
(4)Acquisition Parameters
(5)Session Log

#(1)Hardware Browser
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/108ffc3d-f149-6f88-945b-a09d1ca37b75.png)

使いたいハードウェアを選択する。
Kinect V2の場合、カラー画像か深度画像か取得したい画像の方を選択（クリック）することで、Previewの方に表示されるようになる。

#(2)Preview
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/87e9d0f0-91e2-da08-58d9-a42f93809343.png)

デバイスから得たデータを出力（表示）する画面。
主に、2つの役割があり、それぞれボタンがある。

- Preview
 Start Preview でプレビューを開始し、リアルタイムの画像を取得。
停止したいときは Stop Preview。

- Acquire
一定時間画像をとり、それらをつなぎ合わせて動画のようにして出力される。
詳細な設定は(4)Acquisition Parametersでできる。

#(3)Information
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/4f020c4a-1dd6-7382-9c65-d459a768c84a.png)
(1)Hardware Browserで選択したデバイスとその情報、(4)Acquisition Parametersで設定したことなど、情報がまとめられた画面
#(4)Acquisition Parameters
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/3049f41b-7217-cf84-c80d-0f11b8ac96ac.png)
(2)Previewの画面でAcquisitonを使うときの設定をする画面である。

- General
  - Frames per trigger (取得するデータ(フレーム数)) : 
  設定したフレーム数だけ取得したら自動的に停止する。
 Infiniteを選択すると、自動的に停止はされず、Stop Acqusition ボタンを押すことで停止される。

 - Color space (色空間の選択）:
 rgb,YCbCe,grayscaleの中から選べる。



- Logging
Diskを選択すると、自動保存ができる。
操作は以下のとおり
1.Log to で「Disk」または「Disk and memory」を選択
2.Disk Loggingで「Filename」の部分に保存したい場所を選択
(3.)Automatically increment filename にチェックしておくと、このアプリが起動されている間中、指定した場所に自動的に名前を変えられ保存され続ける。
注）アプリを一度閉じると設定はもとに戻ってしまうようなので、もう一度設定しなおす必要あり

- ROI(Region Of Interest)
範囲設定をして、指定した部分のみを記録することが可能

#(5)Session Log
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/814f430c-171a-5566-c8db-dcb98cae8d1d.png)

個人的にはこの機能が一番すごいと思う。このアプリで操作したことが全て、プログラムの形でこの画面に入力される。これを利用することで、他のプログラムにも組み込むことが容易に可能となる。

#関連記事
[Matlabとカメラを接続 Kinectでリアルタイム画像を取得！](https://qiita.com/Metacrinus/items/33c7ac8d25ea0202ec68)
[Matlab で Kinect V2 を使う （簡単な使い方＋モーションキャプチャー）
](https://qiita.com/Metacrinus/items/55a910cea0b805e96c05)