OmniAICreator/Qiita-1.07M huggingface dataset:
R よく使用するメソッドのまとめ


#行列
> matrix(data, nrow, ncol, byrow, dimnames)
  >>  data: 行列の要素となるベクトル
      nrow:行数
      ncol:列数
      byrow:論理値(TRUEの場合入力ベクトルを行ごとに配列する)
      dimnames:行と列に割り当てた名前のベクトル

####行列の四則演算
> matrix1 <- matrix(c(3, 9, -1, 4, 2, 6), nrow = 2)
> matrix2 <- matrix(c(5, 2, 0, 9, 3, 4), nrow = 2)
> addResult <- matrix1 + matrix2
> subResult <- matrix1 - matrix2
> mulResult <- matrix1 * matrix2
> divResult <- matrix1 / matrix2


#配列
>array(data, dim, dimnames)
>> data:配列の要素となるベクトル
    dim:次元のベクトル (⇒c(l,m,n) l行m列n個の行列を作成する)
    dimnames:各次元に対して割り当てた名前のベクトル

####配列の計算
>apply(x, margin, fun)
  >> x:配列
    margin:使用するデータセットの名前のベクトル (⇒c(1) 1行目の全ての要素)
    fun:配列の要素に適用する関数


# 因子
> factor(data, levels)
   >> data:ベクトル
    levels:レベルの順序を適応する

####因子レベルの生成
>gl(n, k, labels)
>>    n:レベルの数
    k:複製回数
    labels:因子レベルのラベルのベクトル


#データフレーム
>data.frame(data)
>>    data:[行名 = ベクトル]の形式の引数群

<特性>
- 列名は空でなければいけない
- 行名は一意でなければいけない
- データフレームに格納するデータは数値/因子/文字列の型が可能である
- 各列は同じ数のデータが含まれる必要がある


####データ構造の取得
>str(data_frame)
>>    data_frame:データフレーム

####データ構造の概要の取得
>summary(data_frame)
>>    data_frame:データフレーム

####データフレームからのデータ抽出
>data.frame(data_frame$col1,data_frame$col2)
>>    data_frame:データフレームの指定
    col1,col2:抽出する列データ(複数可能)

####列の追加
>data_frame$newCol <- vector
>>    data_frame:データフレームの指定
    newCol:追加する列名
    vector:追加する列ベクトル

####行の追加
>rbind(exist_data_frame, new_data_frame)
>>    exist_data_frame:既存のデータフレーム
    new_data_frame:追加するデータフレーム


#パッケージ
####Rパッケージのライブラリファイルのパスの表示
>.libPaths()

####インストール済のパッケージの表示
>library()

####R環境の読み込み済のパッケージの表示
>search()

####新しいパッケージのインストール
>install.packages(“Package Name”)    (⇒CRANから直接取得する場合)
install.packages(file_name_with_path, repos = NULL, type = “source”) (⇒Rパッケージからダウンロードしたzipファイルの場合)

####パッケージをライブラリに読み込む
>library(“package Name”, lib.loc = “path to library")


#データ整形
####列ベクトル結合
>cbind(col1, col2)
>>    col1,col2:列ベクトル（複数可能）

####同じ列数のデータフレーム結合
>rbind(data_frame1, data_frame2)
>>    data_frame1, data_frame2:同じ列構造のデータフレーム（複数可能）

####データフレームのマージ
>merge(x, y, by.x, by.y)
>>    x, y:データフレーム
    by.x, by.y:マージする列名のベクトル
    

#参考
https://www.tutorialspoint.com/r/
AWS RDSを起動/停止できるLambda Functionを書いて見た

RDSの停止が出来るようになったので、
(http://dev.classmethod.jp/cloud/aws/start-stop-db-instance-for-rds/)
開発環境の節約を目指し停止と起動を自動化するスクリプトを書いて見ました。

## 動作前提
停止/起動したいRDSのインスタンスにタグを設定しておく

![スクリーンショット 2017-06-13 12.12.09.png](https://qiita-image-store.s3.amazonaws.com/0/95618/ec30453e-13bd-5603-2465-5a579d69cb53.png)

## Lambdaコード
環境・・・ Nodejs(6.10)

module.export.startが起動用、module.export.stopが停止用のfunctionです。

```index.js
'use strict';

const AWS = require('aws-sdk');

let describeDBInstances = (rds, tagQuery) => {
  return new Promise((resolve, reject) => {
    rds.describeDBInstances({}).promise().then(data => {
      let promises = [];
      data.DBInstances.forEach(DBInstance => promises.push(describeTagsFromDBInstance(rds,DBInstance)));
      return Promise.all(promises);
    }).then(results =>  {
      let instance_ids = [];
      results.forEach(result => {
        for(let tag of result.TagList){
          if(tagQuery.Name === tag.Key && tagQuery.Value === tag.Value){
            instance_ids.push(result.DBInstanceIdentifier);
            return;
          }
        }
      });
      if(instance_ids.length===0) reject('対象のインスタンスがありません。');
      else resolve(instance_ids);
    });
  });
};

let describeTagsFromDBInstance = (rds,DBInstance) => {
  return new Promise((resolve,reject) => {
    rds.listTagsForResource({ResourceName:DBInstance.DBInstanceArn}).promise()
      .then(data =>
        resolve({
          TagList: data.TagList,
          DBInstanceIdentifier:DBInstance.DBInstanceIdentifier
        })
      )
      .catch(err => reject(err));
  });
};

module.exports.start = () => {
  let rds = new AWS.RDS(),
    tagQuery = {
      Name: process.env.TAG_NAME,
      Value: process.env.TAG_VALUE
    };
  describeDBInstances(rds,tagQuery)
    .then(instance_ids => {
      let promises = [];
      instance_ids.forEach(instance_id => promises.push(rds.startDBInstance({DBInstanceIdentifier: instance_id}).promise()));
      return Promise.all(promises);
    })
    .then(results => console.log(results))
    .catch(err => console.log(err));
};

module.exports.stop = () => {
  let rds = new AWS.RDS(),
    tagQuery = {
      Name: process.env.TAG_NAME,
      Value: process.env.TAG_VALUE
    };
  describeDBInstances(rds,tagQuery)
    .then(instance_ids => {
      let promises = [];
      instance_ids.forEach(instance_id => promises.push(rds.stopDBInstance({DBInstanceIdentifier: instance_id}).promise()));
      return Promise.all(promises);
    })
    .then(results => console.log(results))
    .catch(err => console.log(err));
};



```

## 設定など
- Lambdaの環境変数にて停止したいインスタンスのタグ情報となる「TAG_NAME」と「TAG_VALUE」を設定しておく。

![スクリーンショット 2017-06-13 12.24.35.png](https://qiita-image-store.s3.amazonaws.com/0/95618/7f2e6841-4311-25fa-138c-ee98da46fc2e.png)

- IAMのロールにて以下のようにRDSの操作ができるようにポリシーを設定する。

```
{
  "Effect": "Allow",
  "Action": "rds:*",
  "Resource": "*"
}
```

## コードの解説など

1.現在稼働中のRDSインスタンスを全て取得
2.取得したインスタンスに設定されているタグ情報を取得。Lambdaの環境変数に設定したものと一致するかチェック。
3.一致したタグを持つDBインスタンスを起動(停止)

## その他
Promiseを利用して見たく勉強がてらふんだんに盛り込みました。
CameraMatrixとProjectionMatrix

## 理論上のCameraMatrixとProjectionMatrix
世界座標系で表された[Xw, Yw, Zw]は、カメラの外部パラメータによって[Xc, Yc, Zc]になる(カメラ座標系)。
これが、カメラの内部パラメータによって、[u, v]になる。(下の式のX,Y,ZがXw,Yw,Zw)
右辺の左の行列がCameraMatrix。
[![https://gyazo.com/8acb8234f22cd389f93ec8270fec6602](https://i.gyazo.com/8acb8234f22cd389f93ec8270fec6602.png)](https://gyazo.com/8acb8234f22cd389f93ec8270fec6602)

この状態だと、CameraMatrix=ProjectionMatrix。
さらに、右辺中央の外部パラメータはViewMatrix。
この式みたいにModel座標系から世界座標系の変換が必要ないのであれば（もともと世界座標系の点を考えているので）、
ModelMatrixはIdentityとしていいので(無視していいので)、ViewMatrix=ModelViewMatrix。
つまり、この式がまさに $ProjectionMatrix \times ModelViewMatrix \times position$ の状態。(vertex shaderっぽい)

##実際はCameraMatrixをそのままProjectionMatrixに使えない
その理由は、レンダリングの都合上、**znearとzfarという２つの平面を指定する必要がある**から。
以下のサイトがProjectionMatrixについてわかりやすく記述している。
http://miffysora.wikidot.com/perspective-matrix
(このサイトでは点を行ベクトルとして扱っているので、行列は転置してある。この場合、行列は右からかける。

### frustum
frustumでは、left, right, top, bottomが独立している。znear、zfarも指定する。
光学中心、焦点距離(内部パラメータ)がうまく反映されていることがわかる。

### perspective
一方で、よく見るPerspective Matrixは、cx, cyを考慮してくれない。
fovとaspectだけ指定ればOKなのは、光学中心=画像中心だから。
perspectiveでは、left=-right, top=-bottomとなっている。

## VRとAR
VRだけやるのであればPerspectiveはシンプルで使いやすいが、ARをやろうとして実際のカメラの内部パラメータを計測しても、perspectiveを使ったprojection matrixでは上手くいかない。（光学中心のズレが考慮されない。）
ただし、opencvなどでundistortする際に、newCameraMatrixとしてcx,cyを0にしたものを与えれば、Perspectiveが使える。


その他、カメラの内部パラメータ、外部パラメータ、歪みについては以下を参照。
http://qiita.com/RyoheiKomiyama/items/fee2105c3e9bfccde3a3
sftp > Error: Received message too long 1935895584 の対処

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.9.2 (とgfortran) : sclで設定
NCAR Command Language Version 6.3.0
WRF v3.9を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

WinSCPを使ってsftpにて上記のPCに接続すると以下になるようになった。

![2017-06-13_11h54_47.png](https://qiita-image-store.s3.amazonaws.com/0/32870/c0136447-6459-98dd-8b79-4a7f02758c9f.png)

最近.bashrcを変更した。
(aliasやecho文を追加)。

ターミナルからsftpした時は以下となる。

```
$ sftp user@192.168.123.456
Connecting to 192.168.123.456...
user@192.168.123.456's password: 
Received message too long 1935895584
```

検索して以下を見つけた。
http://lealog.hateblo.jp/entry/2012/12/30/160812

「解決方法」に記載の方法で対応できました。
情報感謝です。

###検索用キーワード

- scp
LightGBMをOSX virtualenv環境にインストールする

# はじめに

Kaggleの[こちらの記事](https://www.kaggle.com/paulantoine/light-gbm-benchmark-0-3692/code)にてLightGBMが用いられていた。
下記のページでも、LightGBMはKaggleでよく話題に上がると紹介されています。

* [LightGBM ハンズオン - もう一つのGradient Boostingライブラリ](http://qiita.com/TomokIshii/items/3729c1b9c658cc48b5cb)

本ページでは、自分が手元のOSX virtualenv環境にlightGBMをインストールした際の流れを記載します。

# 流れ

下記にインストールガイドがあるため、そちらを参照。

* [Installation Guide](https://github.com/Microsoft/LightGBM/wiki/Installation-Guide)

インストールしたい環境の配下にて下記を実施しました。

```
$ brew install cmake
$ brew install gcc --without-multilib
$ git clone --recursive https://github.com/Microsoft/LightGBM ; cd LightGBM
$ mkdir build ; cd build
$ cmake .. 
$ make -j 
```
`cmake .. `の際に、下記のようなエラーが発生するかもしれません。

```
$ cmake .. 
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:8 (PROJECT):
  The CMAKE_C_COMPILER:

    gcc-7

  is not a full path and was not found in the PATH.

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.


CMake Error at CMakeLists.txt:8 (PROJECT):
  The CMAKE_CXX_COMPILER:

    g++-7

  is not a full path and was not found in the PATH.

  Tell CMake where to find the compiler by setting either the environment
  variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.

```

僕の場合、こちらはgccのバージョンが低かったことが原因のようで、upgradeを行うことで解決しました。

```
$ brew upgrade gcc
```

続いて下記を参考に、import できるようにします。

* [Python Package Introduction](https://github.com/Microsoft/LightGBM/blob/master/docs/Python-intro.md)

依存関係のあるライブラリをまずインストールします。

```
$ pip install setuptools numpy scipy scikit-learn -U
```

`/LightGBM/python-package/`に移動し下記を実行すれば完了です。

```
$ python setup.py install
```


無事importできました。

```
import lightgbm as lgb
```


# おわりに

ありがとうございました。
HTMLのフォームで入力した値をPHPのArrayから抽出する

HTMLのformタグの下に、CheckBox値を$_POSTで取り出そうとして、Errorがでたので、調べた。

##ダメなパターン

```
$license = $_POST ['license'];
```

これだと、Errorが
Array to string conversion in xxxx
と出る。


##良いパターン
```
$license = implode(',', $_POST ['license']);
```

このimplode関数を書くとArrayに入った文字列を抽出して変数に入れてくれる。
ルーティングの考え方

初めて投稿させていただきます。今回はルーティングについて下記に示す図1、図2を用いて簡単に解説していきたいと思います。
(例：宛先IPアドレス192.168.3.2のパケットをルーター1が受信した時のルーティング)
 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/161833/3bd920f1-95e7-712d-e491-05fa69bc2669.png)

図1　ネットワーク図
①の動作
192.168.3.2宛てのパケットをFa0で受信したルーター1は自分のルーティングテーブルに登録された情報を参照し、192.168.3.2へパケットを送るにはルーター2の192.168.3.1へ転送する処理を行う。隣接するルーター2へはFa1から送るため、Fa1にパケットを転送する。

②の動作
Fa0から192.168.3.2宛てのパケットを受信したFa1はルーター2のFa0にパケットを転送する。

③の動作
ルーター2のFa0は192.168.3.2が接続されているFa1にパケットを転送する。

④
Fa0から送られてきたパケットを192.168.3.2へ届ける。

ざっくりと簡単に書いてしまったのでわかりにくいと思うので、次に郵便局に例えたイメージを記します。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/161833/cc972f37-8b3f-92c7-9932-74616d21cbcc.png)

 
図2　郵便局に例えた図
先ほどの①から④を会話形式にすると…
①　お客さん「このレターパック(パケット)を速達で192.168.3.2まで送りたいのですが」
　　XX郵便局員「かしこまりました。ただちに配達窓口より192.168.3.2まで送ります」

②　XX郵便局配達員「192.168.3.2の最寄りの郵便局まで配達します」
　　
　③　○○郵便局員「192.168.3.2宛てのレターパックを預かりました。これより配達します.」

　④　○○郵便局配達員「192.168.3.2宛てのレターパックの配達が完了しました」

稚拙な表現、分かりづらい解説多数あったかと思いますが、何卒ご容赦願います。
AmazonLinuxでAWSのLocalStackインストール手順


> リンク： [https://github.com/atlassian/localstack](https://github.com/atlassian/localstack)

## Dockerインストール

確認する：

```
$ sudo yum search docker
Loaded plugins: priorities, update-motd, upgrade-helper
========================================================================================= N/S matched: docker ==========================================================================================
docker-storage-setup.noarch : A simple service to setup docker storage devices
docker.x86_64 : Automates deployment of containerized applications
docker-devel.noarch : A golang registry for global request variables (source libraries)
docker-pkg-devel.noarch : A golang registry for global request variables (source libraries)

  Name and summary matches only, use "search all" for everything.
  
  
$ sudo yum info docker

Loaded plugins: priorities, update-motd, upgrade-helper
Available Packages
Name        : docker
Arch        : x86_64
Version     : 17.03.1ce
Release     : 1.50.amzn1
Size        : 22 M
Repo        : amzn-updates/latest
Summary     : Automates deployment of containerized applications
URL         : http://www.docker.com
License     : ASL 2.0 and MIT and BSD and MPLv2.0 and WTFPL
Description : Docker is an open-source engine that automates the deployment of any
            : application as a lightweight, portable, self-sufficient container that will
            : run virtually anywhere.
            :
            : Docker containers can encapsulate any payload, and will run consistently on
            : and between virtually any server. The same container that a developer builds
            : and tests on a laptop will run at scale, in production*, on VMs, bare-metal
            : servers, OpenStack clusters, public instances, or combinations of the above.
            
```

インストール：

```
$ sudo yum install -y docker
```

サービス起動

```
$ service docker start
```

## LocalStackインストール

プロジェクトをクローンする

```
$ git clone https://github.com/atlassian/localstack.git
```

起動する：

```
make docker-run

# Or using docker-compose:

docker-compose up
```
Search Console でGoogleSearchConsoleでプロパティの健全性に重大な問題が発見されました。

と表示された際の解決方法をメモ失礼します。

とりあえず
フォーラムに助けを仰ぎました……

へたれで申し訳ない。

https://productforums.google.com/forum/#!topic/webmaster-ja/mRvZPac-jRM;context-place=forum/webmaster-ja
パスワードなしでリモートホストにSSHログイン

# 手順
- `ssh-keygen`で公開鍵と秘密鍵を作成
- `ssh-copy-id`で公開鍵をリモートホストへコピー(.ssh/authorized_keysに追加される)

  ```
  ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host
  ```

- パスワードなしでリモートホストにログイン

```
ssh remote-host
```

# トリビア
ssh-copy-id実行後にsshで一度ログインしないと、Jenkinsのジョブ実行したときに`Host key verification failed.`となる
AWS ALBはWebDAVを通してくれるのか?

# 長いので先に結論
結論を先に書くと、ALBはWebDAVを通してくれます。よかったですね。
# 素朴な疑問
AWSの新しいロードバランサ、Application Load Balancer(ALB)がリリースされました[^1]。
プロトコル面ではWebSocketやHTTP/2のサポートなどが目新しいところですけども、果たしてWebDAVは通るんだろうか?
と云うわけで調べてみたものの、意外にも類例が見つからなかったので試してみました。
[^1]: 「新しい」と云っても、すでに発表から10ヶ月(本稿執筆時点)経ちましたが‥‥‥
# やってみた
## テスト構成
今回は以下の構成でテストを行いました。

![構成図](https://qiita-image-store.s3.amazonaws.com/0/16150/babf2268-41df-f343-ad15-77f674d93145.png)

セキュリティグループ、ターゲットグループ、ACM(SSL)の設定は割愛します。
## EC2インスタンスの設定
下記構成のEC2インスタンスを2つ作成し、各サブネットに1つずつ配置しました。

EC2インスタンスのOSはAmazon Linux[^2]を使用しました。
インストールしたパッケージは`httpd24`のみです。
http24の設定ファイルには手を加えず、`/etc/httpd/conf.d/webdav.conf`ファイルを作成し下記内容を追加しています。

```apache:webdav.conf
DavLockDB /tmp/DavLock

Alias /dav/ /var/www/dav/

<Directory "/var/www/dav/">
    Dav on

    Options None
    AllowOverride None

    AuthType Basic
    AuthName WebDAVoverALBTest
    AuthUserFile /var/www/.htpasswd

    <RequireAll>
        Require valid-user
    </RequireAll>
</Directory>
```

WebDAVのローカルディレクトリは`/var/www/dav/`、HTTP上のディレクトリは`/dav/`になるよう設定しています。また`/healthcheck`でヘルスチェックできるようにしています。

[^2]: 本稿執筆時点では2017.03

## ALBの設定
次にELBの作成に移ります。
まずはロードバランサタイプの選択から。もちろんここはALBを選びます。
![ロードバランサタイプの選択](https://qiita-image-store.s3.amazonaws.com/0/16150/df26d20f-cf85-25ca-fcf1-1b0feb567575.png)

ロードバランサの設定は前述の構成通りに行います。
![ステップ1](https://qiita-image-store.s3.amazonaws.com/0/16150/de532f37-5e0e-618a-7586-652586821bb3.png)

SSL証明書の設定。ここでは事前にACMで作成したものを使用しました。
![ステップ2](https://qiita-image-store.s3.amazonaws.com/0/16150/d723ab5d-8196-07cb-427c-ba254bab0b51.png)

セキュリティグループの設定。HTTPSが開いているだけのものを事前に作成してあります。
![ステップ3](https://qiita-image-store.s3.amazonaws.com/0/16150/8dc9a63e-e4ac-0a81-ccd4-b6b688535c53.png)

ルーティングの設定。
![ステップ4](https://qiita-image-store.s3.amazonaws.com/0/16150/65e57d4b-a028-4b87-571e-739978005b8b.png)

ターゲットの登録。EC2インスタンスは事前にターゲットグループへ登録済みです。
![ステップ5](https://qiita-image-store.s3.amazonaws.com/0/16150/5b7aced4-793c-fb69-06f1-d1590c8d9207.png)

作成の確認。
![ステップ6](https://qiita-image-store.s3.amazonaws.com/0/16150/d08d77a5-b04f-440d-6c85-49ab26b6386b.png)

ALBを作成しましたので、続いて「ルールの表示/編集」に移ります。
![ロードバランサ一覧](https://qiita-image-store.s3.amazonaws.com/0/16150/43e41d55-cb63-a557-5a84-a6861b4e8f8f.png)

ルールを追加し、`/dev/fuga/`へのアクセスは2つ目のターゲットグループへフォワードするよう設定します。
![ルールの編集](https://qiita-image-store.s3.amazonaws.com/0/16150/de1dad33-ca89-9be9-3f49-6b9d3bdd4c9c.png)
![ルール保存完了](https://qiita-image-store.s3.amazonaws.com/0/16150/b637c89d-4504-b6ab-a2d0-9f2ee13158cf.png)

手元の環境では、上記の設定でWebDAVの読み書きが2つのEC2インスタンスに振り分けられることを確認しました。
# あとがき
今どきWebDAVを採用する機会は少ないでしょうし、ましてや同一ホスト名で複数サーバに振り分ける用途がどれだけあるかは分かりませんが、参考になれば幸いです。
# 注釈
6/7 Unity初心者勉強会



## 講師：橋本 圭さん


<b>DMM.com labo所属</b>

バックエンド、PHP、MySQl　社会人二年目

HAL名古屋校→東京へ…

#### 自己紹介

* 学生時代：ゲーム専攻、、C,C++

* DS、Wiiでゲーム作ったりJSで作ったりUnityで自分で作成した物をAppストアで公開したり

* 新卒の立場を活かしてバックでやってる

* Unityは自己学習

* 新規プロジェクト参画してバックとして携わり→フロントがUnity

## 【今日の目的・流れ】
* 目の前でUnity操作して機能の概念説明

→後々勉強進める際の参考資料に



#### 「実際にやる」

* レイアウトは２ｂｙ３が先生オススメ



## Sceneビュー

- 舞台で言う裏方、ゲームで言うオブジェクトの塊を見る場所

　ゲーム内の裏側全てが見える

- 動的に回転させたり動かしたりできる

　<b>※cubeも、プレイヤーも、アイテムも、ゲージもオブジェクト</b>

　

## Gameview

- ゲームプレイ時に見える画面

　

## Hierarchyview

- カメラ、ディレクショナルライト、ゲームに写ってない物でも全てここにある



## ProjectView

- 音楽、画像、スクリプトなどは全てここに

- 自分で素材を入れる時は直接ファイルをいじらすUnity側でドラッグ＆ドロップする様に（Unityがわで色々生成してくれたりする）


**※Unityが用意したファイルを引用する事もできる**
** ※自分のPCにある素材はドラッグ＆ドロップで使える**



## InspectView

- オブジェクトの詳細情報が見れる


- 各々を○○コンポーネントと呼ぶ、Unityはコンポーネントを組み合わせて構成してゲームを作る→コンポーネント思考


- Position：場所　Rotation：回転　Scale：大きさ


- MeshFilter)どんなオブジェクトか


- BoxColeeder：当たり判定の情報


- MeshRenderer：ライトはどれくらいか、影はどうなってるか、色はどうなってるか


- 新しくコンポーネントを増やす場合はAddComponent


- Rigidbody：剛体、重力等を有効にする

**UseGravity：重力反映**



**※CreateEnpty：目に見えなくても存在できるオブジェクト**

**※何もマテリアルをあてがってないとピンクになる**

スクリプトの使用言語：**C#,JS**
※JSは拡張性少なすぎてほとんど使われない

橋本先生**C＃**推奨



####  Unityはコンポーネントの組み合わせ、と言う考えを忘れない



- 親子関係をつけれる→親が移動すると子供も一緒に移動する



- アニメーションを作成することも可能、深い



- 基本機能を忘れない事

# 質疑応答

Q.ヒエラルキーでファイルの順番に意味はありますか

####  A.特にないです

Q.競合しそうですが、共同開発のはどうやって行われるんですか

 AオブジェクトをProjectにおいてリソース化する、ファイル単位で生成するプロ

Scene単位で別れたり、機能単位で別れて開発したりする
#### **競合は起きがち**



**バイナリデータはテキストとしてオープンする機能がある
設定でバイナリデータをどう扱うか設定することができる。
優先したい物を決めてあとで上書きするようにするのもあり。**





Q.C#の勉強で何かｵｽｽﾒの勉強方法やどこから手を付ければ…

A.新しい言語勉強、C#テキスト読んだり・サイト

**※UnityC#はカスタマイズされているので、お決まりが多い**

Unityスクリプトを別途に勉強しなければいけない、**どこがUnityかC#か切り分けるのが難しい**ので見切りをつけてやった方がいい
もしくは**C#をがっつりやって基礎をつける**



Q.ノートで開発したいのですがどのくらいのスペックが必要でしょうか？

A.MacBookPRO、GPU…i3やある程度のスペックがあれば…？

ノートPC買うなら性能良いものが、
**ノートPCメモリ８GB、CPUi5がｵｽｽﾒ**

ただし、近々UnityV5.6→２０１７アップデートするので
**2017の推奨スペック次第**


Q.本を頼りにしたり、指示がないと出来ないのですが、一人称で出来るようになるにはどのくらい必要ですか？

A.VER４だった時はぐちゃぐちゃだったけど５で変わった、四年前に触って一回やめて半年触ってなかった。

もう一回触ってみるとなんとなく頭に入っていった。

**ネットで情報調べてやっていた（リファレンスが充実している）**

Qiitaで調べたり**（更新日時基準）**して身につけていった。



今なら**よく出来た参考書を触る**

⬇︎

**教科書なしでやってみる**
カメラの内部パラメータ、外部パラメータ、歪み

カメラについて基本的に理解している人の復習用。
世界座標系で表された3次元点を画像上にマップにする方法の理論部分。

OpenCVの説明
http://docs.opencv.org/3.0-beta/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

世界座標系で表された[Xw, Yw, Zw]は、カメラの外部パラメータによって[Xc, Yc, Zc]になる(カメラ座標系)。
これが、カメラの内部パラメータによって、[u, v]になる。(下の式と記号は違います。)
[![https://gyazo.com/8acb8234f22cd389f93ec8270fec6602](https://i.gyazo.com/8acb8234f22cd389f93ec8270fec6602.png)](https://gyazo.com/8acb8234f22cd389f93ec8270fec6602)

別の書き方をすると、以下のようになる。
[![https://gyazo.com/7a34cadd403ac90ca6fe70affab96614](https://i.gyazo.com/7a34cadd403ac90ca6fe70affab96614.png)](https://gyazo.com/7a34cadd403ac90ca6fe70affab96614)


**ただ、この[u, v]は歪みを考慮していない。**
つまり、ここまではundistortedなイメージの話。理想的なピンホールモデル。

実際はレンズを使っているので、この[u, v]の位置が歪む。
[![https://gyazo.com/122a96e303b22ddd411335b0d7496a94](https://i.gyazo.com/122a96e303b22ddd411335b0d7496a94.png)](https://gyazo.com/122a96e303b22ddd411335b0d7496a94)

これが、カメラの外部パラメータ、内部パラメータ、歪み係数を使って、
世界座標系で表された3次元点を画像上にマップにする方法の理論部分。

undistortはこの歪みを取るだけなので、undistortしたとしてもCameraMatrixは変わらない。
（opencvなどのundistortで、newCameraMatrixに元のCameraMatrixを入れた場合）
angular-cliのserviceの呼び出し方

angular/cliで生成するserviceテンプレートの使い方の備忘録

## 生成
```
ng g service manage/unit-util
```

`app/services/manage/unit-util.service.ts` (と.spec)が生成される

## Componentに注入
```
import { UnitUtilService } from '../../services/manage/unit-util.service';
```

`.service` まで忘れずに記述する。

## Providerに登録
```
@Component({
  selector: 'app-dere-list',
  templateUrl: './dere-list.component.html',
  styleUrls: ['./dere-list.component.css'],
  providers: [UnitUtilService]                 // この行を追記
})
export class DereListComponent ...
```

これを書かないと `No provider for {service_name}` と怒られる。

## コンストラクタでインスタンスを生成
```
  constructor(private db: AngularFireDatabase, private unitUtil: UnitUtilService) {
```

## 呼び出し
```
unitUtil.getFoo();
```

## 実ソース
https://github.com/ne-peer/deredorm
さくらクラウドのスクリプトで作ったmastodonのバックアップとDocker環境へのリストア

さくらクラウドのスクリプトで作ったマストドンのデータをバックアップしたかったのと、それを別の環境にロードしたかったので、その試行錯誤をご紹介。

#１．さくらクラウドのVMでの作業
\#su - mastodon
ポスグレバックアップ
$cd /home/mastodon/live
$pg_dump > backup_postgres-db.sql
画像などのバックアップ
$cd /home/mastodon/live/public
$tar zcf backup_public-system.tar.gz system
Redisデータベースファイルのバックアップ
\#cp /var/lib/redis/dump.rdb backup_redis_dump.rdb

#２．移行先での作業
一般的なDockerで動くmastodon環境にロード（リストア）しました。自分はGCPにubuntuのVMを作って、そこにDockerを入れたものを、別URLで動くようにしておきました。
###nginxを止めておく
\#nginx -s stop

###docker確認 コンテナIDをメモる。（→メモらなくても大丈夫ですね）
\#docker ps
→ \#docker ps -q -f name=mastodon_db_1

###dockerコンテナにバックアップしたDBファイルをコピーする。
バックアップしたbackup_postgres-db.sqlはVMにコピっておく。
\#docker cp backup_postgres-db.sql {コンテナID}:/home/db_backup.sql
→ \#docker cp backup_postgres-db.sql $(docker ps -q -f name=mastodon_db_1):/home/db_backup.sql

###dockerコンテナに入る
\#docker exec -it mastodon_db_1 bash

###ポスグレに入る
bash-4.3# psql -U postgres

###mastodonユーザー（ロール）を作る。
さくらスクリプトで作られたポスグレがmastodonっていうユーザで動いていたので、ロールを作りました。
postgres=# create role mastodon with login superuser;

###テーブルを全部消す
postgres=# drop schema public cascade;
postgres=# create schema public;

###確認
postgres=# \l

###データベースのオーナーをmastodonにする
postgres=# alter database postgres owner to mastodon;

###確認
postgres=# \l

###ポスグレから抜ける
postgres=# \q

###バックアップしたデータを読み込み
bash-4.3# cd /home
bash-4.3# psql -U mastodon -d postgres < db_backup.sql 

###ポスグレに入る
bash-4.3# psql -U postgres

###データベースのオーナーをpostgresに戻す
postgres=# alter database postgres owner to postgres;

###確認
postgres=# \l
postgres=# \d

###ポスグレから抜ける
postgres=# \q

###dockerコンテナから抜ける
bash-4.3# exit


###画像など及びRedisDBをリストア
バックアップしたbackup_public-system.tar.gzやbackup_redis_dump.rdbはVMにコピっておく。
\#cd public
\#tar xvzf backup_public-system.tar.gz 
\#cd ../redis
\#cp backup_redis_dump.rdb dump.rdb
\#chown systemd-timesync:systemd-journal dump.rdb

###nginx起動
\#nginx


###おしまい。
5分でできる Kotlin + CLI で "Hello, World!"

KotlinというとAndroid開発のイメージが強いですが、Java互換のサーバーサイドでも使える汎用言語なので、IDEを使わずにコマンドラインで手軽にKotlinを試してみました。

## 手順

### Kotlinコンパイラのインストール

```
$ brew update
$ brew install kotlin
```

* 今回はMac+Homebrewですが、Linux等でも簡単に導入可能です
  - https://kotlinlang.org/docs/tutorials/command-line.html

### コーディング

```
$ vim hello.kt
...（好きなエディタで編集）
$ cat hello.kt 
fun main(args: Array<String>) {
    println("Hello, World!")
}
```
* `fun`で関数の宣言
* 引数の後のコロンに続いて引数の型がくる
* 関数をトップレベルに書ける。Javaと違いクラス宣言不要
* Javaと違い配列はただのクラス
* `println`で標準出力
  - Javaだと`System.out.println`だが、Kotlinの標準ライブラリがJavaの標準ライブラリをラップしているので簡潔に書ける。
* セミコロン不要



### コンパイル＆実行

```
$ kotlinc hello.kt -include-runtime -d hello.jar
$ java -jar hello.jar
```

* `-d`オプションで、アウトプットの.classファイルが格納されるディレクトリ名 or .jarファイル名を指定
* `-include-runtime`オプションで、Kotlinのランタイムライブラリをjarに含めて、実行可能な形式で出力
  - ※Kotlinコンパイラでコンパイルされたコードを実行するためにはKotlinランタイムが必須
* 実行は通常の`java`コマンド


## 参考
* "Kotlin in Action": https://www.manning.com/books/kotlin-in-action
* Kotlin公式チュートリアル: https://kotlinlang.org/docs/tutorials/command-line.html
react-textarea-compatibleコンポーネント:ブラウザの違いを吸収する

html5のtextareaの取り扱いにブラウザ間の微妙な違いを吸収するために、react-textarea-compatibleコンポーネントをnpm上に公開しました。

## npm package
[react-textarea-compatible](https://www.npmjs.com/package/react-textarea-compatible)

## github
[ソースコード](https://github.com/bailingli/react-textarea-compatible)

## 機能概要

- maxlengthの制御
　Safariの場合は、textareaのmaxlength属性設定の代わりに、本コンポーネント内の独自の処理ロジック行い、textarea領域に入力された改行が2文字ではなく1文字として扱うようにします。
　その他ブラウザでは、maxlengthを設定することでブラウザに任せます。

- 複数行のplaceholder
　標準のplaceholderには簡単な１行の文字列しか設定できません。たとえ改行に入れても改行として認識されないので、複数行の文章のplaceholderの設定が無理です。
　本コンポーエントを利用すれば、複数行のplaceholderが可能になります。

## 使い方

- インストール 

```npm install react-textarea-compatible --save
```


- 実装

```
import TextareaCompatible from 'react-textarea-compatible';
 
React.renderComponent(
  <div>
    <TextareaCompatible
      value={this.state.memo}
      maxLength={30}
      placeholder="this is \na \nmultiple line \nplaceholder"
    />
  </div>,
  document.querySelector('#element'));
```

- サンプルページ

[DEMO](https://bailingli.github.io/react-textarea-compatible/example/index.html)

## 参考記事
[safariの場合textareaのplaceholder改行問題](http://qiita.com/Anders/items/594509f94d03ab303ee3)
[textarea 要素内の placeholder 属性で改行するには](http://neos21.hatenablog.com/entry/2016/05/11/002151)
コメント投稿者名やコメントの内容は検索の対象外のシステムで、コメントを検索できるようにする工夫

## 工夫

膨大なデータを蓄積するシステムがあるとする。
書いた記事にコメントがつく。
MrXからコメントがついたとする。

MrXというキーワードで検索した時に検索候補に挙がらない。
**コメント投稿者名やコメントの内容は検索の対象外のようだ**

どうするか。

記事執筆者の場合、以下のような文面を記事に加えることができる。

> MrXさんにコメントで教えていただきました。

すると、MrXというキーワードで検索した時に候補に挙がるようになる。
一緒に感謝の気持ちも表しておきます。

ちょっとしたチップスでした。

## コメントの大切さ

記事に対するコメントは、自分が知らなかったこと、今後折々で使いたくなるものである場合が多い。

ふと「xxxさんに教えていただいたあの方法はこのケースに役立ちそうだ」と思い出しても、上記のようなシステムでは検索することが難しい。
実際に探せなくなったコメントも多々ある。

> 検索できねぇデータはただのデータだ (cf: [紅の豚](https://ja.wikipedia.org/wiki/%E7%B4%85%E3%81%AE%E8%B1%9A))

Data Knowledgeシステムにて必要なものはDataでなくKnowledge（役立つData）。必要な時に短時間で見つからないDataはKnowledgeにはなりえない。

上記のシステムがいずれ良くなってコメント検索できるようなればいいが、期待はしていないので、工夫することにした。
Swift3で簡単らくらくmp3再生

[ここを参考にした](https://off.tokyo/blog/swift3%e3%81%a7mp3%e5%86%8d%e7%94%9f%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%e5%ae%8c%e5%85%a8%e7%89%88/)
AppleにiOSのWeb Push対応を祈願する

この記事は
===

* いつまでたってもiOSにWeb Pushが実装されないことに業を煮やした外人が[Appleのバグレポートにみんなで投稿しよう！という活動](http://blog.pushpad.xyz/2017/06/lets-ask-apple-to-add-web-push-notifications-to-ios/)をしているのを見かけたので、Qiitaにも拡散しておこうと思った次第です。

背景
===

Web Push
---

* Webブラウザに対してPush通知を送ることができる仕組みです
* mattermostだとか最近のチャットツールなどで結構使われていて、普通に便利です
* 仕様的には下記
    * [Push API](https://www.w3.org/TR/push-api/)
    * [Service Workers](https://www.w3.org/TR/service-workers-1/)
    * [Web Notification](https://www.w3.org/TR/notifications/)

対応状況
---

* 現在iOSだけが全く対応方針が出ていません

### 対応

* Chrome(デスクトップ):対応
* Chrome(Android):対応
* Firefox:対応

### 微妙

* Safari(OS X):対応、ただし標準仕様に則っていない
* Edge:[対応の方向](https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6263693-push-api)

### 非対応

* Safari(iOS):未対応、予定もなし

草の根活動
===

* [こちらのブログ](http://blog.pushpad.xyz/2017/06/lets-ask-apple-to-add-web-push-notifications-to-ios/)で草の根活動が呼び掛けられています
* 手順は下記です

1. https://bugreport.apple.com/ を開いてApple Developerのアカウントでログインします
2. “Report a new bug“ という左上のアイコンをクリックします
3. 下記情報を入力して"Submit"をクリックします

> Title:
> 
> Add support for Web Push Notifications to iOS / Safari
> 
> Summary:
> 
> Please provide a way to send push notifications from websites to Safari, in particular on iOS.
> 
> I ask you to consider the addition of the following features:
> 
> 1. Add support for the Push API (https://www.w3.org/TR/push-api/), Service Workers (https://www.w3.org/TR/service-workers-1/) and Web Notifications (https://www.w3.org/TR/notifications/) to iOS Safari. Alternatively, if you really have concerns about power consumption or Service Workers, add at least support for push notifications through APNs, as you already do for Safari desktop. In any case, I think that a standard technology like the Push API should be preferred to other proprietary methods.
> 
> 2. Even if Safari desktop already supports push notifications through a proprietary protocol, I ask you to support the new standard (W3C Push API). I really appreciate the fact that Safari desktop was the first browser to support push notifications, when there wasn’t a standard yet, but now it’s time to move forward.
> 
> 3. Provide a way for other browsers (e.g. Chrome) that run on iOS to support web push notifications. In particular, update your SDK to allow browser manufacturers to support the Push API, Service Workers and Web Notifications on iOS.
> 
> Thank you!
> 
> What are you seeing an issue with?
> 
> Safari
> 
> What kind of issue are you reporting?
> 
> Suggestion
> 
> Steps to Reproduce:
> 
> N/A
> 
> Expected Results:
> 
> N/A
> 
> Observed Results:
> 
> N/A
> 
> Safari Version/Build & Platform (incl. Version/Build):
> 
> All

私も
===

* 一票投じておきました

意義
===

* 上記ブログの筆者は下記のように言っています

> Because we don’t want Apple to become the new Microsoft and Safari the new Explorer, let’s ask Apple to do something. 

* Apple的にはスパムの温床になるのを危惧して慎重になっているのかもしれませんけどね
vimキーバインドを利用するアプリをより使いやすくする方法（Macユーザ向け）


## はじめに
vimキーバインドを利用するアプリケーションでは、エディットモード中に日本語入力を行った場合、
Escしても日本語入力モードのままの状態になりすぐにコマンドモードが利用できない。
その都度英数入力に切り替える必要のないように、特定アプリケーションのみEscを押下した際に、日本語入力がOFFになるように設定を行う。

設定にはキーバインドをカスタマイズするアプリKarabinerを利用する。

## Karabinerの設定
### 実現したい動作
Escキーが押下されると、日本語入力をOFFにしつつ（英数キーを押下した挙動）、エディットモードから抜ける（Escキーを単体で押下した挙動）為の動作を定義する。

### 設定箇所
Karabinerには様々な挙動がデフォルトで用意されているが、独自の定義を行うためには個別にxmlで定義を行う必要がある。
この個別の設定はprivate.xmlファイルとして行う。private.xmlは以下で指定して読み込む。

Preference > Misc&Uninstall > Open private.xml 

### private.xmlの設定
例としてターミナルアプリ(Mac標準TerminalやiTermなど)MarkdownエディタのBoostnoteを対象として設定する。

```
<?xml version="1.0"?>
<root>
  <appdef>
    <appname>BOOSTNOTE</appname>
    <equal>com.maisin.boost</equal>
  </appdef>
  <item>
    <name>Escape to EISUU+Escape only terminal</name>
    <identifier>private.remap.jis_escape2eisuuAndEscape_terminal</identifier>
    <only>TERMINAL, BOOSTNOTE</only>
    <autogen>
      --KeyOverlaidModifier--
      KeyCode::ESCAPE,
      KeyCode::JIS_EISUU,
      KeyCode::ESCAPE
    </autogen>
  </item>
</root>
```

設定のポイントは以下の3つ

1. 適用するアプリケーション名（アプリケーション群のまとまり）の定義
2. 適用するアプリケーション名の指定
3. 動作の定義

#### 1. 適用するアプリケーション名（アプリケーション群のまとまり）の定義
アプリケーション名は ```<appdef>``` タグで定義する。
```<appname>``` タグにアプリケーション名、 ```<equal>``` タグにアプリののBundle Identifierを指定する。
複数のBundle Identifireを指定する場合は ```<equal>``` タグを複数追記する。
Bundle Identifierの確認方法は以下を参照する。

http://harafuji0613.hatenablog.com/entry/2015/03/22/002953

該当のアプリケーションに対応するものがあれば、プリセットのアプリケーション名を利用できる。
プリセットのアプリケーション名は以下を参照。

https://github.com/tekezo/Karabiner/blob/version_10.22.0/src/core/server/Resources/appdef.xml

設定例においてターミナルアプリ（TERMINAL）をアプリケーション名として定義（```<appdef>``` タグ内の設定）してないのはプリセットにリソース名が登録済みであるため。

参考までにTERMINALのプリセット定義は以下の通り。

```
  <appdef>
    <appname>TERMINAL</appname>
    <equal>com.apple.Terminal</equal>
    <equal>iTerm</equal>
    <equal>net.sourceforge.iTerm</equal>
    <equal>com.googlecode.iterm2</equal>
    <equal>co.zeit.hyperterm</equal>
    <equal>co.zeit.hyper</equal>
  </appdef>
```

#### 2. 適用するアプリケーション名の指定

```<only>``` タグに適用したいアプリケーション名を指定する。
ここで述べるアプリケーション名は単一のアプリケーションではなく、カテゴライズした複数のアプリの総称として利用する。

#### 3. 動作の定義

```<autogen>``` タグの中にあるKeyCodeは上から、

* 挙動変更するキー
* 挙動変更した後のキー
* 追加したい挙動のキー

を定義する。

#### 補足
```<name>``` タグで設定に名前をつける。Preference上ではこの名前で設定を確認できる。
```<identifier>``` タグで設定に固有のIDをつける。システム内でユニークになるような命名規則を自分で考える。

## 参考
https://pqrs.org/osx/karabiner/xml.html.ja#prepared-appdef
https://pqrs.org/osx/karabiner/xml.html.ja#syntax-__KeyOverlaidModifier__
【Git】git init - リポジトリを作成

###git init
リポジトリを作成したいディレクトリ内でinitコマンドを実行します。

~~~git
$ git init
~~~

作業ディレクトリにGitを使う宣言をする

作業ディレクトリに .git というファイルができているとベスト

コマンド

~~~command
ls -a
~~~ 

ログ

~~~log
./ ../ .git
~~~

関連記事
[【Git】一覧](http://qiita.com/sunstripe/items/0b611f6e8a480024dd33) Gitコマンドまとめ

---

## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
C++14 で static_if 書いてみた

[ブログ記事](http://secret-garden.hatenablog.com/entry/2015/03/05/000000)からの転載です。

上げるの忘れてた。
generic lambda を使っていい感じに static_if を書いてみました。

## ソース

```cpp
#include <iostream>


template<typename Then, typename Else>
auto
static_if(std::integral_constant<bool, true>, Then then, Else else_){
	return then;
}


template<typename Then, typename Else>
auto
static_if(std::integral_constant<bool, false>, Then then, Else else_){
	return else_;
}


template<bool Cond, typename Then, typename Else>
auto
static_if(Then then, Else else_){
	return static_if(std::integral_constant<bool, Cond>{}, then, else_);
}


template<bool Cond, typename Then>
auto
static_if(Then then){
	return static_if<Cond>(then, [](...){});
}



#include <boost/type_traits/has_plus.hpp>

template<typename T>
auto
twice(T t){
	static_if<boost::has_plus<T, T>::value>(
		[](auto t){
			std::cout << t + t << std::endl;
		},
		[](...){
			std::cout << "Error" << std::endl;
		}
	)(t);
}


template<int N>
int
test(){
	return static_if<(N > 0)>(
		[](auto n){
			return N + test<decltype(n){}-1>();
		},
		[](...){
			return N;
		}
	)(std::integral_constant<int, N>{});
}


int
main(){
	twice(10);
	twice(std::string("homu"));
	twice("homu");

	std::cout << test<5>() << std::endl;


	return 0;
}
```

## 出力結果

```
20
homuhomu
Error
15
```

then 節のコードを generic lambda で書き、参照した値を generic lambda 経由で使用することで偽の場合でもコンパイルエラーにならないようにしています。
ただ、型を使用したい場合は引数値として渡してやる必要があるのでちょっと手間ではあります。
それでもだいぶすっきりと書けるのではないかな。
El Capitan から Sierra へのステップアップに失敗する件

そろそろ macOS Sierra にしないと Xcode がアップデートできない難民になってしまうのでなんとかするべく、週末に会社のマシンを更新しようとしたのですがまったくもってうまくいきませんでした。タスケテ！

→ 問題が解決したので、原因と解決策を追記しました。

## 環境

- MacBook Pro (Retina 13-inch, Early 2015)

## 現象

App Store から Sierra のインストールを選択して再起動したあと、真っ暗画面にリンゴマーク（かっこいい！！！）の下にプログレスバーが表示されるんですが「残り29分」から先に進まなくなりました。

「インストール中、残り時間を計算中」と「残り29分」（または28分）という表示が切り替わるので、フリーズをしているという感じでもないのです。

## 原因と解決策（NEW!)

わけあって、[pdumpfs](http://0xcc.net/pub/sd-2003-08/) というツールを使ってローカルのファイルを定期的にバックアップしています。pdumpfs を使うと指定したディレクトリ以下の変更してないファイルはハードリンクで、変更したファイルはコピーして残してくれるバックアップのためのツールです。

この pdumpfs、半年以上毎時間動かしているので、純粋なファイル数でみると結構な量になります。どうやらこれが原因だったようで、バックアップ用のフォルダをぜんぶ消して（めちゃくちゃ時間かかった）から
 Sierra のインストールをしてみたらすんなりうまくいきました！！！感謝！

----

## やったこと

試したことです。どの場合でも「残り29分」から先に進まない問題は解決していません。

### ウィルス対策ソフトをアンインストール

[Yosemiteインストールの途中で先に進まない](https://discussionsjapan.apple.com/thread/10153323?start=0&tstart=0) によると「マカフィーをアンインストールしたら解決した」という情報があり、自分のマシンにもウィルス対策ソフトが入ってるのでアンインストールして試してみました。結果は特に変わらず。

### 一晩中放置

単に本当に時間が掛かっているだけという情報も見かけるので、一晩中そのままにしておきました。ずとブーンって言っててうるさいです。8時間ほど置いておきましたけど変わらないので諦めました。もっとやらないとだめ？

### ディスクユーティリティで DiskAid してみる

さらに調べていると、まったく同じ症状が発生している人がいました。

- [Macos Sierra not installing in macbook Air](https://discussions.apple.com/thread/7677347?start=0&tstart=0)

このコメント欄に「ディスクユーティリティ使ってみそ」っていう発言があったので試してみようとしたところ、結構時間がかかって時間切れになったので途中でやめてしまいました。あとでまた時間があったら試してみます。ただ、投稿主の返答を見る限り期待はできない…。

上記のディスカッション中にも「I have exactly the same problem」っていう人がチラホラいて、みんな解決しできたかどうか超興味あるんですけどどうなったんでしょうか…。

## El Capitan に戻す

Mac を再起動しても Sierra のインストールの続きがはじまるので（残り29分！）、そのままでは El Capitan に戻れません。パソコン使えないと仕事できないので、Sierra のインストールは中断します。

- Mac を再起動して、Ctrl-Rを押したままにする
- ディスクユーティリティが起動する
- メニューからディスクユーティリティを終了
- 起動ディスクを選択する
- 再起動

で、El Capitan に戻れます。
pip でインストールしたものをすべてアンインストール

pip freeze で pip install したもの一覧をとりだし、それを uninstall します。
確認無しでアンインストールされるのでご注意ください

```
pip freeze | xargs pip uninstall -y
```

自前で -e でインストール等している場合 invert grep をはさみます。

```
pip freeze | grep -v "\-e" | xargs pip uninstall -y
```
自前で入れたモジュールは手動で削除することになりますが・・
ebiten で動的に sprite を生成する

[前回](http://qiita.com/zenwerk/items/be659825635430ca3d3b)の続きです。
これまでは画面上に表示されるリソースがソースコードにハードコードされた状態だったので、入力に合わせて動的に Sprite を生成することを考えてみます。

題材はキャラクターからの飛び道具、マリオで言うファイアーボールです。

## Spriteの生成
Spriteの生成自体は、ボタン入力などに合わせて `NewSprite` な関数を呼び出し、動的に struct を生成すればよさそうです。
ただし、Spriteを生成した後はなんらかの方法で破棄することを考えなければメモリ上の用の済んだSpriteが保持され続け、あまりよろしくありません。
GoはGCが載っている言語なので、用の済んだSpriteは参照を外してGCに改修されるようにすれば良さそうです(多分。ちょっと理解が曖昧)。

## ソースコード

- 全体の差分は以下
	- https://github.com/zenwerk/go-pixelman3/commit/5c980b49bbb7cecc9a5a8aee92f9b5721c1c705d


- sprite/ball.go

```go
package sprite

import (
	"image"

	"github.com/hajimehoshi/ebiten"
	"github.com/zenwerk/go-pixelman3/utils"
)

const (
	ball_img = `--+++--
-+++++-
-+++++-
--+++--`
	ballSpeed    = 4
	screenWidth  = 320
	screenHeight = 240
)

type Balls []*Ball

var (
	ballImg *ebiten.Image
)

func init() {
	tmpImage := image.NewRGBA(image.Rect(0, 0, 7, 4))
	utils.CreateImageFromString(ball_img, tmpImage)
	ballImg, _ = ebiten.NewImage(7, 4, ebiten.FilterNearest)
	ballImg.ReplacePixels(tmpImage.Pix)
}

type Ball struct {
	BaseSprite
}

func NewBall(pos position) *Ball {
	ball := new(Ball)
	ball.Images = []*ebiten.Image{
		ballImg,
	}
	ball.ImageNum = len(ball.Images)
	ball.Position = pos
	return ball
}

func (bs *Balls) Move(viewport position) {
	balls := *bs

	for i := 0; i < len(balls); i++ {
		b := balls[i]
		b.Position.X += ballSpeed

		// 表示領域外に出たら配列から削除する
		if b.Position.X > (screenWidth-viewport.X) || b.Position.Y > (screenHeight-viewport.Y) || b.Position.X < 0 || b.Position.Y < 0 {
			balls = append(balls[:i], balls[i+1:]...)
			i--
		}
	}
	*bs = balls
}
```

`Move`関数で表示領域外に出たら、スライスから削除するようにしています。これで無駄なメモリを使用せずに済むと思います。
表示領域外の他にも、他のSpriteとの衝突などで同様の処理をしても良いでしょう。

## 実行結果
![ball.gif](https://qiita-image-store.s3.amazonaws.com/0/4428/5179fbf6-7a7f-8dea-ec9f-d13f5c597f29.gif "ball.gif")

## 参考
- GoのGCについて
	- http://deeeet.com/writing/2016/05/08/gogc-2016/
- スライスが構造体のレシーバの時に、要素を削除する方法について
	- https://stackoverflow.com/questions/18566499/how-to-remove-an-item-from-a-slice-by-calling-a-method-on-the-slice
- スライスの操作一覧
	- https://github.com/golang/go/wiki/SliceTricks
疑似要素を使ったhover表示のCSSを分解する

<p class="codepen" data-height="330" data-theme-id="5973" data-default-tab="result" data-user="KazuyoshiGoto" data-slug-hash="vZLyYV" style="height: 330px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="css sample item-list">
  <span>See the Pen <a href="https://codepen.io/KazuyoshiGoto/pen/vZLyYV">
  css sample item-list</a> by Kazuyoshi Goto (<a href="https://codepen.io/KazuyoshiGoto">@KazuyoshiGoto</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

以上のサンプルはhover時の表示に擬似要素（:after）を使っています。このCSSについて分解して紹介します。
コードのサンプルというよりCSS装飾の考え方の参考になれば。

# 概要

CSSでやることを言葉でざっと分解すると以下になります。

1. `a:after` を半透明フィルムのように `a` 全体を覆うようにする
2. `a:after` に Fontawesome のアイコンを出す
3. `a:after` は平時は透明にする （opacity:0）
4. `a:hover` で `a:after` を表示させる （opacity:1） 

※完成像が頭の中に（or絵として）あったうえで、こんな風にすれば出来るやろ！という手順をイメージします。

# CSS

サンプルから抜粋して紹介します。 HTMLはシンプルなので [Codepen](https://codepen.io/KazuyoshiGoto/pen/vZLyYV) を参照してください。

```
.item-list a {
  display: block;
  position: relative;
  color: #000;
  width: 200px;
  height: 200px;
  overflow: hidden;
}
```
上記は `a` タグへのCSS。ブロック化してサイズ固定しているのみですが、注意すべき点は `position:relative` をかけているところ。 これは `a` タグの範囲内で `a:after` を `position:absolute` で制御するための下準備です。　この辺りは absolute  操作に慣れている人であれば定石だと思います。

次に本題の `a:after` へのCSSです。

```
.item-list a:after {
  /* 概要1にあたる */
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.3);

  /* 概要2にあたる */
  font-family: FontAwesome;
  font-size: 32px;
  content: "\f002";
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: space-around;

  /* 概要3にあたる */
  opacity: 0;
  box-shadow: inset 0 0 30px 15px rgba(0, 0, 0, 0.3);
  transition: all .5s ease;
}
```

冒頭の概要にあたる部分ごとに分解します。

## 概要1にあたるCSS

```
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.3);
```

`position:absolute` をかけ `a` タグの中いっぱいに広げ、黒い半透明の背景を指定しています。

半透明にしたい時 `opacity` を使うケースもありますが、背景色だけ半透明にする場合は `background:rgba()` を推奨します。 `opacity` では要素自体が半透明になるので、中のフォントなども影響を受けるためです。

## 概要2にあたるCSS
```
  font-family: FontAwesome;
  font-size: 32px;
  content: "\f002";
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: space-around;
```
フォントにFontAwesomeを指定した後、`content: "\f002"` で虫めがねに当たるアイコンを指定しています。 `display:flex` 以後については、アイコンを要素のど真ん中に配置するためのスタイルです。

## 概要3にあたるCSS
```
  opacity: 0;
  box-shadow: inset 0 0 30px 15px rgba(0, 0, 0, 0.3);
  transition: all .5s ease;
```
`opacity:0` を指定することで平時は透明にしています。

要素を消すなら `display:none` の方が確実ですが、`transition` を使いアニメーションさせたかったので `opacity` を使っています。 CSSアニメーションは数値化できるものしかアニメーションできず、 `display:block` と `display:none` の切り替えではアニメーションができないためです。

`box-shadow` は飾りのビネット表現のため、 `transition` はhover時にフワッとアニメーションさせるため指定しています。


## 概要4にあたるCSS

`a:hover` した時の `a:after` のCSSです。

```
.item-list a:hover:after {
  opacity: 1;
}
```

「a:hover時のa:after」という指定は `a:hover:after` と連結して指定できます。

`opacity:1` にするのみで終了です。
JavaScriptを使った要素の取得方法

## body要素を取得する
```js
document.body;
```

## IDを指定して取得する
```js
document.getElementById('ID名');
```

## タグを指定して取得する
```js
document.getElementsByTagName('タグ名');
```

## クラスを指定して取得する
```js
document.getElementsByClassName('クラス名');
```

## name属性を指定して取得する
```js
document.getElementsByName('name属性');
```

## カスタムデータ属性から取得する
```js
document.querySelectorAll('[データ属性]');
```
数字を0埋めした文字列をUnitTestで確認するときの注意点

このような値を比較したい場合は気をつけましょうという話です。
単純にassertEqualsすると、文字列の長さが違っても常にGreenになってしまい、コードの不具合に気が付かない可能性があるからです。

値の例：

値A：　'0000000000123'
値B：　'000000123'

どっちも文字列。

これらをこのようなアサーションで確認すると、なんと・・・結果がGreenになります。

```php
$this->assertEquals(値A, 値B);
```

更に例を書くと、こういう状態です：

```php
//UTが失敗する例（値がどうみても違う）：
$this->assertEquals('2', '001');

//UTが成功する例：　
$this->assertEquals('01', '001');
$this->assertEquals('1', '001');
$this->assertEquals(1, '001');
```

0埋めした値が、正しく求めている長さになっているかをテストするには、これが一番確実な方法かも知れないです：

1. 型まで一致するか確認する：　assertSame使う

```php
$this->assertSame('01', '001');
$this->assertSame('1', '001');
$this->assertSame(1, '001');
```

→　全てちゃんとRedになる。

2. さらに、長さを念のため確認する（長さが期待通りかテストしたいわけなので）

```php
$this->assertEquals(strlen('01'), strlen('001'));
$this->assertEquals(strlen('1'), strlen('001'));
$this->assertEquals(strlen(1), strlen('001'));
```

→　全てちゃんとRedになる。
[Unity]"古いプロジェクトをサイトから持ってきて"エラーが出た。(UnityEngine.Component' does not contain a definition for〜)

<h1>起こったこと</h1>
2Dのとあるゲームのプロジェクトをダウンロードした時に、「Type `UnityEngine.Component' does not contain a definition for〜」みたいなエラーが複数のスクリプトファイルからエラーが出た。
うん、コンポーネント取得してないぞゴラァ！って言われたわけです。
エラー自体は簡単に解決できるものだが、コンポーネント取得しなくても動きますよ感のあるコードだったので草が生えたわけです。

<h1>原因</h1>
Unity5より前はGetComponentしなくても動いてたらしい。だから、古いサンプルがそのような状態であっても不思議じゃない。
<h1>どのように対処したか</h1>
Unity5より前はGetComponentしなくても動くらしくて、拾ってきたプロジェクトのスクリプトはこんな感じで書かれていた。

```c#:I_am_hentai_before.cs
rigidbody2D.velocity = transform.up.normalized * speed;
```

Unity5より前ではこれで動いていたみたいだが、Unity5以降ではGetComponentしましょう。

```c#:I_am_hentai_after.cs
GetComponent<Rigidbody2D>().velocity = transform.up.normalized * speed;
```

これでここのスクリプトのエラーは消える。　他のスクリプトのエラーも原因は同じだったので、上記のようにGetComponentしたらエラーは消えた。
最終的には処理のたびにコンポーネント取得はよくないので、実際はStart関数でGetComponentした方がいいです。(このゲームの場合は)

<h1>感想</h1>
僕が初めてUnityを使ったのはUnity5からなので昔の書き方はあまり知らないが、そういうのも知っとくと昔のプロジェクト触る機会あるかもしれないし、意味はないことはない。
昔の本を見てみると、シーン遷移がLoadLevelって書いてある時代もあったなぁとか思ったり(回顧)
app.yamlでリリースする環境を切り分ける(AppEngine)

1つのソースで複数環境(プロジェクト)にリリースする方法を記録しておきます。
# フォルダ構成
```
project
└─src
   └─module (リリースモジュール)
       ├─test.go
       ├─app_test.yaml  　 (開発環境用)
       ├─app_staging.yaml  (ステージング環境用)
       └─app_product.yaml  (本番環境用)
```
上記のように、環境ごとにapp.yamlを作成しapplicationを切り分けることでリリースするプロジェクトを切り分ける。
また、app.yamlに環境変数を設定することで環境ごとに設定を変更することができる。

# リリースコマンド
```shell-session
# 開発環境にリリースする
goapp deploy app_test.yaml

# ステージング環境にリリースする
goapp deploy app_staging.yaml

# 本番環境にリリースする
goapp deploy app_product.yaml
```
数学 > 周波数解析 > 自己回帰モデルと最大エントロピー法 > キーワード


文献: 科学計測のためのデータ処理入門―科学技術分野における計測の基礎技術 (I・Fエッセンス・シリーズ) by 河田 聡さん、南 茂夫さん
第4章 自己回帰モデルと最大エントロピー法

キーワードだけ抜粋

- FFT
    - 分解能とピーク周波数の不確定性原理
- 自己回帰モデル
    - 線形演算
- 最大エントロピー法
    - MEM (Maximum Entropy Method)
- 減衰する信号波形
- 減衰振動波形
- 式4.4
- 式4.8
- 微分方程式との類似性
- z変換
    - フィッシャーのz変換?
        - [何故行うか](https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11163822096)
        - [EXCEL関数FISHER](https://dekiru.net/article/5084/)
        - [EXCEL関数FISHERINV(逆変換)](http://excelstatistics.mathlab.info/FISHERINV.html)
    

### link

z変換に関するQiita記事のうち気になったもの

- [多クラスから計算した相関係数同士の検定](http://qiita.com/setten_QB/items/8d0f6c29534881414ec9)
- [ディジタルフィルタの作り方](http://qiita.com/fukuroder/items/e1cd551b7492020da992)
- [線形予測符号化LPC（Linear Prediction Coding）](http://qiita.com/AIKI_SHI/items/a277f565aa09bfd697be)
- [統計学入門演習12.10を解きながら、pandasでの散布図の書き方を確認する。](http://qiita.com/koplec78/items/9f76cf6a803a1b590049)
SPRINT最速仕事術を読んでみた(火曜日編)

[SPRINT最速仕事術](http://amzn.to/2qY44Ga)を読んだのでまとめてみる．

[前回](http://qiita.com/masamasa/items/706c761be4bc6609a7f8)は月曜日のタスクについてまとめた。
今回は火曜日のタスクについてまとめてみる。


# 火曜日：思考を発散させる

月曜日にはチームで取り組む課題を決めて、ターゲットを決めた。
火曜日はソリューションを考える。

# 材料を取り揃える

## アイディアの素を集める
スプリントでは0から1を作るような方法はとらず、すでにあるアイディアを組み合わせて課題を解決することを目指す。
本書の中ではレゴの部品を集めるようなイメージと書かれている通りで、レゴの部品を自分で生み出したりはしない。

この作業はネットを使うなりなんなり方法を駆使して参考になりそうな他のモノを洗い出す。
他社製品でもいいし、他の業界の同様の問題を解決しようとしているものでもいいし、社内で過去に検討されたアイディアでもいい。

## 3分間の光速デモを行う
アイディアの素をチームで共有するために3分間の光速デモを行う。
アイディアの主な部分をビッグアイディアと呼びホワイトボードにメモしておく。

ここまでの作業はあくまでみんなでアイディアを共有し、チームの中に材料を取り揃えることを目的として行う。
ここで議論したりはとりあえずしなくていい。

# スケッチを行う
今書き出したアイディアと月曜日に作ったマップとスプリントクエスチョンとどうすればメモは大切な素材集となる。
これからこの素材集を使ってソリューションを構築する。

## その前に
ソリューションを構築していくためには「スケッチ」を行うが、チームのメンバーと誰がどの部分を担当するのか？それとも分担したりせずみんな同じ箇所を攻めるのかと言ったことはあらかじめ相談しておくこと。

## なぜスケッチを行うか？
スケッチを行うことで抽象的なアイディアに具体性を持たせる。
抽象的なアイディアは具体性に乏しいので間違って評価されることが多い。
具体性がないので過小評価されたり、逆に過大に期待されたりする。
これに対してスケッチを行って具体的になったアイディアは公平な評価を受けることができるので、スケッチを行って具体的なアイディアにしてあげることが大事。

## どうスケッチを行うか？
以下の4つのステップに沿って行うと良い。

* メモ-24時間のベストヒット集を作る-
* アイディア-落書き帳のようになんでも書く-
* クレイジー8-高速でバリエーションを考える-
* ソリューションスケッチ-3コマで全体像を見る-

### メモ-24時間のベストヒット集を作る-
月曜日と火曜日のこれまでに作ってきたモノを見返して、気になったものをメモにとる。
20分くらいでこの作業を終える

### アイディア-落書き帳のようになんでも書く-
20分くらいでざっくりしたソリューションのアイディアを書く。
自分しか見ないから適当に書けばいい。

### クレイジー8-高速でバリエーションを考える-
上で作ったアイディアのバリエーションを8分で8個考える(ように頑張る)。
無茶なチャレンジではあるが、無難な原案をより興味深いものに押し拡げるためにとてもいい方法らしい。
同じアイディアの「これをやるための良い方法」としてのバリエーションをたくさん考えることが大事。

### ソリューションスケッチ-3コマで全体像を見る-
ソリューションの全体像を3コマで表す。
顧客がサービスを利用するときに目にするものを、3つのコマからなるストーリーボードで表す。

最後に作成したソリューションは水曜日の朝いちばんに、全員で見えるように壁に貼りだして品評を行う。
なので、わかりやすく書くこと。
また、品評に影響を与えないように匿名にしておくことも大切。
キャッチーなタイトルを自分のソリューションにつけて、下手でも構わないので仕上げる。

基本的には1人1つのスケッチを描く。
ひらめきが止まらなければ複数書いてもいいが、収穫逓減の法則があるのであまり良い結果には繋がらないのが著者たちの考えとのこと。

最後に、ソリューションを回収し **他の人のスケッチは見ない**。
初めて見る体験をできるのは1度きりなので、それは品評会の水曜日まで取っておくこと。