OmniAICreator/Qiita-1.07M huggingface dataset:
[Unity]他のオブジェクトについているスクリプトの変数を参照したり関数を実行したりする。


######Unityちゃんの中にあるUnityChanScript内に定義されている変数「**int HP**」と関数「**Attack()**」を、別オブジェクトGameManager内から利用する。

#Unityちゃんの状態
![スクリーンショット 2017-04-16 0.09.40.png](https://qiita-image-store.s3.amazonaws.com/0/147930/dfd02072-2dbc-2365-ead6-71fd39ee54f6.png "スクリーンショット 2017-04-16 0.09.40.png")


```UnityChan.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UnityChanScript : MonoBehaviour {

	public int HP = 100;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}

	public void Attack() {
		Debug.Log ("UnityChan_Attack!");
	}
}

```

このとき変数、関数ともに状態を「public」にしておかないと別のクラスから参照できない。

#参照する側のスクリプトの作成
![スクリーンショット 2017-04-16 0.20.00.png](https://qiita-image-store.s3.amazonaws.com/0/147930/bac1aa29-9cad-9013-5f5d-041d77135e3a.png "スクリーンショット 2017-04-16 0.20.00.png")


```GameManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManagerScript : MonoBehaviour {

	GameObject unitychan; //Unityちゃんそのものが入る変数

	UnityChanScript script; //UnityChanScriptが入る変数

	// Use this for initialization
	void Start () {
		unitychan = GameObject.Find ("unitychan"); //Unityちゃんをオブジェクトの名前から取得して変数に格納する
		script = unitychan.GetComponent<UnityChanScript>(); //unitychanの中にあるUnityChanScriptを取得して変数に格納する
	}
	
	// Update is called once per frame
	void Update () {

		int unitychanHP = script.HP; //新しく変数を宣言してその中にUnityChanScriptの変数HPを代入する
		Debug.Log ("UnityちゃんのHPは" + unitychanHP);

		script.Attack (); //UnityChanScriptにある関数Attackを実行する
		
	}
}
```

#実行結果
![スクリーンショット 2017-04-16 0.35.44.png](https://qiita-image-store.s3.amazonaws.com/0/147930/4fc31f23-f81b-fa4b-dd95-a312142cc786.png "スクリーンショット 2017-04-16 0.35.44.png")

#まとめ
+ 参照したいオブジェクトを「GameObject」型の変数で取得する
+ 参照したいスクリプトを「スクリプト名」型の変数で取得する
+ 「スクリプトを入れた変数名」.「参照したい変数」のように間にドットを入れて参照する
EC2インスタンスの自動起動停止


### 自動起動

```lambda
var AWS = require('aws-sdk'); 
AWS.config.region = 'ap-northeast-1';

function ec2Start(cb){
    var ec2 = new AWS.EC2();
    var params = {
        InstanceIds: [
            "i-0da881bbe333d6fbb"
        ]
    };

    ec2.startInstances(params, function(err, data) {
        if (!!err) {
            console.log(err, err.stack);
        } else {
            console.log(data);
            cb();
        }
    });
}

exports.handler = (event, context, callback) => {
    // TODO implement
    // callback(null, 'Hello from Lambda');
    ec2Start(function() {
        context.done(null, 'Started Instance');
    });
};
```

### 自動停止

```lambda
var AWS = require('aws-sdk'); 
AWS.config.region = 'ap-northeast-1';

function ec2Stop(cb){
    var ec2 = new AWS.EC2();
    var params = {
        InstanceIds: [
            "i-0da881bbe333d6fbb"
        ]
    };

    ec2.stopInstances(params, function(err, data) {
        if (!!err) {
            console.log(err, err.stack);
        } else {
            console.log(data);
            cb();
        }
    });
}

exports.handler = (event, context, callback) => {
    // TODO implement
    // callback(null, 'Hello from Lambda');
    ec2Stop(function() {
        context.done(null, 'Stoped Instance');
    });
};
```

### ロール

```role
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "ec2:StopInstances",
                "ec2:StartInstances"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*",
                "arn:aws:ec2:*"
            ]
        }
    ]
}
```
Linuxのサーバーで，sshやsudoが非常に遅い場合の解決メモ

## 症状
こんにちは，タイトルに有るようにあるサーバーでパッケージ更新作業かなにかを行って以降，以上にsshやsudoが遅くなってしまいました．(sudo付けるのと付けないのでvimの起動時間が10秒以上変わる程度)
zfs on linuxで動いているのでそのあたりのパフォーマンスがおかしくなるような不整合でも起こってるのかと思いましたがfs系のエラーは拾えず，ただ以上に遅い以外は不具合が無かったので置いてたのですが，zabbix_agentで実行するUserParameterのスクリプトがTimeOutする為動かなくなり，お客さんの要望に答えられない問題が出てきたため対応することに

## よくある例
sudoはhostの名前解決を実行時にするため，/etc/hostsが変になっているとその分遅くなるというのがグーグル先生に聞くとたくさん出てきますが，今回はそこではありませんでした．

## 今回の事例
結論を書くと，/etc/nsswitch.confの中身が不適切だったためでした．
修正前
```
passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind
...
```
passwd,group,shadowの確認にwinbindを使う設定になっていますが，そのルートの認証はそもそも想定していないので無効にします．
修正後
```
passwd:         compat
group:          compat
shadow:         compat
...
```
これであっさり治りました．


## 原因究明
原因を突き止めるアプローチについて書いておきます

### 解析
straceを使ってどの命令にどれくらい時間がかかるかログを取ります．
```
$sudo strace -o trace.log -r su -
```
その際に取れたログ(一部文言変更等加工済)が以下です．
```
     0.000060 close(3)                  = 0
     0.000097 mprotect(0x7fb7e6ec4000, 4096, PROT_READ) = 0
     0.000053 munmap(0x7fb7e82f3000, 32831) = 0
     0.000119 getpid()                  = 30017
     0.000074 lstat("/tmp/.winbindd", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
     0.000090 lstat("/tmp/.winbindd/pipe", {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
     0.000069 socket(PF_FILE, SOCK_STREAM, 0) = 3
     0.000056 fcntl(3, F_GETFL)         = 0x2 (flags O_RDWR)
     0.000045 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
     0.000044 fcntl(3, F_GETFD)         = 0
     0.000047 fcntl(3, F_SETFD, FD_CLOEXEC) = 0
     0.000043 connect(3, {sa_family=AF_FILE, path="/tmp/.winbindd/pipe"}, 110) = 0
     0.000088 poll([{fd=3, events=POLLIN|POLLHUP}], 1, 0) = 0 (Timeout)
     0.000054 write(3, "0\10\0\0\0\0\0\0\0\0\0\0Au\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2096) = 2096
     0.000085 poll([{fd=3, events=POLLIN|POLLHUP}], 1, 5000) = 1 ([{fd=3, revents=POLLIN}])
     4.730378 read(3, "\250\r\0\0\2\0\0\0\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 3496) = 3496
     0.000042 poll([{fd=3, events=POLLIN|POLLHUP}], 1, 0) = 0 (Timeout)
     0.000042 write(3, "0\10\0\0/\0\0\0\0\0\0\0Au\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2096) = 2096
     0.000036 poll([{fd=3, events=POLLIN|POLLHUP}], 1, 5000) = 1 ([{fd=3, revents=POLLIN}])
     0.000070 read(3, "\313\r\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 3496) = 3496
     0.000031 poll([{fd=3, events=POLLIN|POLLHUP}], 1, 5000) = 1 ([{fd=3, revents=POLLIN}])
     0.000025 read(3, "/var/run/samba/winbindd_privileg"..., 35) = 35
```
勿論上にも下にもまだまだ続きますが，この最初の数字の所が以上に突出している部分が，時間がかかっている箇所になります．
この場合は
```
read(3, "\250\r\0\0\2\0\0\0\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 3496) = 3496
```
の部分になります．

### 調べる
ログには他にも時間がかかっている場所がありましたが，そこにも3496という数値が出てきていたのでこれらのキーワードで調べます，そしたらあっさりbindについての話が引っかかりました．

suやsudo等をする時にbindが関係してくるということは，認証の参照設定にwinbindが設定されているという事ですのでnsswitch.confが怪しいと考えられるので確認し，予想通りの設定があったので修正したら治りました．
Google Cloud Container Builderはコンテナのビルド以外のこともできる

やってみましょう

---

## やってみること

* レポジトリにコミットをプッシュしたらレポジトリの内容を圧縮したファイルがStorageにアップロードされるようにする
* Source Repository→Container Builder→Storageという流れ

---

## 必要なもの

* tgzファイルを解凍できるソフトと手元で動くgit
* 手元で動くGoogle Cloud SDK
    * に含まれるgcloudコマンド
* クレジットカードが登録されたGCPアカウントと、プロジェクト１つ
* gcloudで↑のプロジェクトに接続できる設定
    * gcloud config configurations createで作っておく

---

## レポジトリの作成

* GCPコンソールのメニューから「開発」＞「レポジトリ」でレポジトリ一覧画面を開いて、「レポジトリの作成」
* 名前は適当に
* 「ローカル Git レポジトリへの Cloud レポジトリのクローン作成」の手順に従って、手元にクローンして、ファイルの追加のコミットをプッシュしてみましょう（gitの使い方は説明しないよ）

---

## Storageにバケット（ファイルの格納場所）を追加

* GCPコンソールのメニューから「Storage」＞「ブラウザ」でバケット一覧画面を開いて、「バケットの作成」
* 名前は適当でいいけど、他のユーザーのバケットと同じ名前がつけられないので、自分の名前をprefixにつけるなどで対応すると良いです
* 名前以外の設定は変更しなくていいです

---

## トリガーの作成

* GCPコンソールのメニューから「Container Registry」＞「トリガーの作成」でトリガー一覧画面を開いて、「トリガーを追加」
* ソースを選択で「Cloud Source Repository」を選択
* レポジトリを選択でさっき作ったレポジトリを選択
* （つづく）

---

## トリガーの作成＞トリガー設定

* 名前は適当に
* ビルド設定で「cloudbuild.yaml」を選択
* cloudbuild.yamlの場所に「/cloudbuild.yaml」と入力

---

## cloudbuild.yamlを追加するコミットをプッシュ

```cloudbuild.yaml
steps:
- name: 'debian'
  args: ['tar', 'cvf', 'archive.tgz', '.']
- name: 'gcr.io/cloud-builders/gsutil'
  args: ['cp', 'archive.tgz', 'gs://YOUR_BUCKET_NAME/']
```

YOUR_BUCKET_NAME はさっき作ったバケット名に置き換えてください

---

## ビルドされてることの確認

* GCPコンソールのメニューから「Container Registry」＞「ビルド履歴」でビルド履歴一覧画面を開いたらビルド履歴が１つできてるはずなので、開いて詳細を見る
* GCPコンソールのメニューから「Storage」＞「ブラウザ」でバケット一覧画面を開いて、さっき作ったバケットを開いて、その中にできているtgzファイルをダウンロードして中身を見る

---

## ここから解説

---

## Repository

* 今回はレポジトリを作ったけどGithub/Bitbucketのレポジトリと連携できる
* つまり「githubのレポジトリにpushされたらほげほげする」みたいなことができる

---

## Container Builder

* 「コンテナを使ったビルダー」と考えて良い
* Docker Hubのイメージが使える
* 自分で作ってContainer Registryに置いたイメージが使える
* [公式イメージ](https://github.com/GoogleCloudPlatform/cloud-builders)が使える
    * gcloudとかgsutilでGCP上のリソースが権限通りに使える
    * golang系が充実

---

## 自動以外のビルド開始方法

* トリガー一覧から設定したトリガーを起動できる
* `gcloud container builds submit --config cloudbuild.yaml .` とかで手元から起動できる
    * 手元の内容を送りつけてビルド実行
* REST APIを叩いてレポジトリを指定したビルドの起動などもできる（やや大変）

---

## Storage以外の出力先

* Container Registry
* Pub/Sub
    * デフォルトのトピックがある
    * 自分でいろいろしたい場合は `gcloud beta pubsub topics publish` とか
    * そこからFunctionsにつなぐとか

---

## どうやってファイルを取り回しているの？

* 各ビルドステップで使うコンテナに、同じディレクトリをボリュームマウントする仕組み

---

## まとめ

* Google Cloud Container Builderはコンテナのビルド以外のこともできる
* 割といろんなことができる
View関連のメモ



|属性|効果| 
|:-----------|:------------|
|layout_alignParentTop|trueを指定した場合、親のViewに対して上寄せで配置|
|layout_alignParentBottom|trueを指定した場合、親のViewに対して下寄せで配置|
|layout_alignParentLeft|trueを指定した場合、親のViewに対して左寄せで配置|
|layout_alignParentRight|trueを指定した場合、親のViewに対して右寄せで配置|
|layout_alignParentStart|trueを指定した場合、親のViewに対して左寄せで配置|
|layout_alignParentEnd|trueを指定した場合、親のViewに対して右寄せで配置|
|layout_centerHorizontal |trueを指定した場合、親のViewに対して水平方向中央寄せで配置|
|layout_centerVertical |trueを指定した場合、親のViewに対して垂直方向中央寄せで配置|
|layout_centerInParent |trueを指定した場合、親のViewに対して水平垂直方向共に中央寄せで配置|

ちなみにlayout_alignParentStartとlayout_alignParentEndについて左寄せ、右寄せと記載したんですが、これは言語によって左右が反転します。世界には昔の日本のように右から左に文字を読む言語がありまして、そういった言語に対応する場合にLeftやRightといった表現だけでは対応するのが大変だからと新たに用意されたのがStartやEndといった表現なんですね。もしそういった言語への対応が必要な場合は上の表の限りではないのでご注意ください。

[この記事のパクリです。](http://qiita.com/yysk/items/c686153b39d32571d1bd)

###CardViewの属性

|属性|効果| 
|:-----------|:------------|
|cardBackgroundColor|背景色|
|cardCornerRadius|角の丸め|
|cardElevation|高さ（指定地に応じて影を付与）|
|cardMaxElevation|最大の高さ|
go言語を始めてみた

特に理由もなく勉強してみることにしました。
強いて言えば理由はそこにあったからくらいでしょうか。
ちなみに筆者の他言語経験は

* python :2
* javascript :2
* java :2
* matlab :2
* VBA :2
* scheme :1 
* fortran :1 
* c :1 
* Pascal :1 

1. 授業でやった程度
2. ある程度自分で作れる
3. 人に教えられる

浅く広いですね

## 1. インストール
* ダウンロード先 
https://golang.org/dl/

* IDE 
gogland
https://www.jetbrains.com/go/
※インストールしただけではgoのパスが設定されないので設定の必要あり

## 2. A Tour of Goを進める
* A Tour of Go  
https://go-tour-jp.appspot.com/list  

アクセス先にエディタがあるのでそこにそのまま書いて学習を進められます。
ただ、それだと書いたものが残らないのでローカルで実行することにしました。

次回はgo言語でcodeiqの問題を解いてみる予定
Gitbookのライブリロードが失敗するのをどうにかする

# はじめに
## モチベーション
Markdownで電子書籍を出力するアプリケーションであるGitBookをちょっと触ったらサーバーのリロードで立ち往生したので、記録を残しておきます。
ちなみに、GitBookのwebサービスを使っていれば、このような問題は起こりませんので、直接利用できる方はそちらをお薦めします。
## 障害の条件
Windows10で作業していました。コミュニティをみたら、今回取り上げる問題はWindows環境特有の問題らしいので、MacやLinuxの方々には全くもって価値のない情報です。
## 作業環境
今回は以下の環境で実行を行いました。
- windows10 Creators update
- Node.js 5.6.0
- npm 3.6.0
- CLI 2.3.0
- GitBook 3.2.2
## 読み進める前に
今回の記事は、以下の技術評論社の記事の2ページ目を実行した続きからとなっています。導入方法などはこちらを参照ください。
[第406回　Node.js製のGitBookでお手軽に電子書籍作成](http://gihyo.jp/admin/serial/01/ubuntu-recipe/0406?ard=1492261098)

# 本題
## どんな問題が起こったのか？
はじめにでも書きましたが、詳細に問題を定義しようと思います。問題は、```gitbook serve```を実行した後に、電子書籍にの本文である*.mdを編集・保存すると、ライブリロードがかかるのですが、エラーでサーバーが終了してしまうという問題です。
![WS000003.JPG](https://qiita-image-store.s3.amazonaws.com/0/109715/47de5bf5-adbf-5f20-791d-7496c556fea5.jpeg)
画像がみずらいですが、どうやら操作権限が問題で止めたサーバを再起動する前に処理が終了しているようです。

## 解決法
gulpで操作を監視して、サーバーを自分で操作しようと思ったら、すでに作っている方がおられたので、それをそのままこちらで紹介します。

[Gitbook serve with gulpjs ](https://gist.github.com/budiadiono/dd409e2168c801c9e7429766ee0101c3)

# 導入法
ここからは完全に他人のふんどしの使い方をステップバイステップで説明してゆきます。
## 用意するもの
gulpfile.js ( [Gitbook serve with gulpjs ](https://gist.github.com/budiadiono/dd409e2168c801c9e7429766ee0101c3) )
をあらかじめダウンロードして用意しておいてください。

## 階層構造の作成
作業フォルダを作成してください。今回は便宜上`myBook`としておきます。作業フォルダのパスは任意の場所で良いので、今回は`%BOOKPATH%`と仮に表記します。なので、作業フォルダまでのフルパスは`%BOOKPATH%\myBook`ということになります。

`myBook`の中に`docs`フォルダを作成してください。

この段階で、以下のような階層構造になるようにファイルなどを移動させてください。

```
%BOOKPATH%\myBook
              |----\docs
                      |---- (ここに電子書籍本文が入る)
              |
              |----gulpfile.js
```
## gitbookを初期化
`docs`フォルダがgitbookのデータを収めるフォルダになります。初期化のためにコマンドプロンプトで`docs`フォルダをカレントフォルダに変更し、`gitbook init`してください。初期化の詳しいやり方は、前章の**読み進める前に**を参照してください。
初期化すると`docs`フォルダに新しいファイル二つが生成されますので、以下のようになります。

```
%BOOKPATH%\myBook
              |----\docs
　　　　　　　　　　　　|---- README.md
                      |---- SUMMARY.md
                      |---- (ここに電子書籍本文が入る)
              |
              |----gulpfile.js
```

## gulpを利用するためのモジュールをインストールする
ダウンロードした`gulpfile.js`を利用するために、gulpを含む以下のモジュールをインストールしてください。
コマンドプロンプトを開き、`%BOOKPATH%\myBook`をカレントフォルダに変更します。それから以下のようにモジュールをインストールしてください。

```
%BOOPATH%\myBook>npm install gulp

%BOOPATH%\myBook>npm install browser-sync

%BOOPATH%\myBook>npm install gitbook

%BOOPATH%\myBook>npm install del
```

インストール作業することで、`myBook`フォルダに`node_modules`が作成されます。

## gulpを利用してサーバーを起動する
コマンドプロンプトを開き、`%BOOKPATH%\myBook`をカレントフォルダに変更します。それから以下のようにコマンドを打ち込むとサーバーが起動し、ブラウザに表示されます。

```
 %BOOPATH%\myBook>gulp
```

## 書籍を編集する
docs以下のフォルダの`.md`ファイルは常に監視されていて、追加や変更された場合、gulpがサーバーを再起動します。試しに`README.md`を編集したり、新しいファイルを作成したり確認してみてください。

## サーバを終了する
サーバー起動中のコマンドプロンプトで`Ctrl + C`を押すと停止します。

# おわりに
駆け足で使い方を説明しました。gitbookの記事は最近少ないですね。あんまり需要ないのかな。
MacBook Pro Late 2016とThinkPadをつないでみた

#はじめに
もともと仕事でWindowsを使っていて、個人持ちのThinkPadのキーボードを使っていました。
が、転職を気にMac Book Pro Late 2016を購入したので、せっかく購入したキーボードを使わなくなりました。
最近、ふと使ってみたいという思いがふつふつ湧いてきたので、色々調べながらやってみましたので、
ログを残していきます。

#スペック
## MacBook Pro
+ MacBook Pro(13-inch, 2016, Four Thunderbolt 3 Ports)
+ MacOS Sierra 10.12.4
+ Processor 3.3GHz Intel Core i7
+ Memory 16GB 2133 MHz LPDDR3

## Keyboard
+ lenovo SK-8855

#必要なもの
+ [Karabiner-Elements](https://github.com/tekezo/Karabiner-Elements/blob/master/README.md)

#インストール
1. [ココ](https://pqrs.org/latest/karabiner-elements-latest.dmg)からKarabiner-Elementsをダウンロードする
2. karabiner-elements-latest.dmgをダブルクリック
3. Karabiner-Elements.sparkle_guided.pkgをダブルクリック
<img width="357" alt="001.png" src="https://qiita-image-store.s3.amazonaws.com/0/105220/71decace-d2d7-16ca-770e-62bf51c4aea8.png">

4. 「続ける」をクリック
<img width="618" alt="002.png" src="https://qiita-image-store.s3.amazonaws.com/0/105220/6cfbddfa-8832-bda2-c20f-00646a4707bd.png">

5. 「インストール」をクリック
<img width="618" alt="003.png" src="https://qiita-image-store.s3.amazonaws.com/0/105220/11e99d8f-33ae-9780-765f-e73a519d4eed.png">

6. 「閉じる」をクリック
<img width="615" alt="004.png" src="https://qiita-image-store.s3.amazonaws.com/0/105220/c7f0c053-1d6b-f0d1-2bfa-ed64108ae603.png">

7. 「ゴミ箱に入れる」をクリック
<img width="618" alt="005.png" src="https://qiita-image-store.s3.amazonaws.com/0/105220/28a62100-e557-2147-2e1a-000e9438e966.png">

#設定
1. ThinkPadキーボードをMacBook Proに接続してください
2. LaunchpadにKarabiner-Elementsをクリックしてください
3. 「Simple Modification」タブをクリックして、こんな感じで設定してみてください
<img width="800" alt="101.png" src="https://qiita-image-store.s3.amazonaws.com/0/105220/c10b46d5-3827-4a13-53d3-ddcde2bf4408.png">

4. 「Devices」タブをクリックして、こんな感じで設定してみてください。
<img width="797" alt="102.png" src="https://qiita-image-store.s3.amazonaws.com/0/105220/c9d8f01b-365f-3b05-1e45-2aba29a33fb7.png">

5. 「Virtual Keyboard」タブをクリックして、こんな感じで設定してみてください。
<img width="798" alt="103.png" src="https://qiita-image-store.s3.amazonaws.com/0/105220/bce0361b-0a87-c3cc-e9ab-d999d988368b.png">

これで完了です。

#最後に
~~これで普通に使えるようになったのですが、一つだけできてないことが...。~~

~~ThinkPadをWindowsで使ってるときにできていた機能で、~~
~~MiddleClick + Trackpointでページスクロール~~
~~なんです。それができないなんて悲しすぎて...。~~

~~どなたかご存知でしたら教えて欲しいです。~~

2018/01/03現在　使えるようになりました。v11.4.0くらいから使えるようになりました。
これで快適なThinkPadキーボードの使い方ができるようになりました！
[Unity]無料Assetだけでコードを書かずにUnityちゃんを歩かせる。


Unityちゃんかわいいですよね。

#Assetのインポート
今回使うAssetは「Mecanim Locomotion Starter Kit」と「”Unity-Chan"Model」

+ Mecanim Locomotion Starter Kit(http://u3d.as/4jU)
![スクリーンショット 2017-04-15 22.52.38.png](https://qiita-image-store.s3.amazonaws.com/0/147930/b0bd328e-0cbd-c43f-fa42-829f8cd35223.png "スクリーンショット 2017-04-15 22.52.38.png")


+ ”Unity-Chan"Model（http://u3d.as/85c）
![スクリーンショット 2017-04-15 22.56.44.png](https://qiita-image-store.s3.amazonaws.com/0/147930/032ba3b5-048f-28ec-b63d-751b3d02af73.png "スクリーンショット 2017-04-15 22.56.44.png")

それぞれインポートする

#Unityちゃんの配置
ProjectViewの UnityChan/Models/unitychan をSceneViewにドラッグ＆ドロップ
![スクリーンショット 2017-04-15 23.03.23.png](https://qiita-image-store.s3.amazonaws.com/0/147930/eb233761-0d22-f863-f2c3-cdc29f176f2a.png "スクリーンショット 2017-04-15 23.03.23.png")
![スクリーンショット 2017-04-15 23.03.45.png](https://qiita-image-store.s3.amazonaws.com/0/147930/de7b7c7a-ddd9-5cba-d1f1-d46ea1c85fd0.png "スクリーンショット 2017-04-15 23.03.45.png")

#Unityちゃんの設定
Unityちゃんを選択して、AnimetionコンポーネントのControlerに Locomotion Setup/Locomotion/Locomotion を指定する。
![スクリーンショット 2017-04-15 23.10.00.png](https://qiita-image-store.s3.amazonaws.com/0/147930/e3465f86-e00f-cb7c-9642-2a023f33fd06.png "スクリーンショット 2017-04-15 23.10.00.png")

#UnityちゃんにScriptを追加する
Locomotion Setup/Scripts/LocomotionPlayer をUnityちゃんに追加する。
![スクリーンショット 2017-04-15 23.15.59.png](https://qiita-image-store.s3.amazonaws.com/0/147930/7c9ff1a1-e419-d9f6-33e1-0a6df26ec1a2.png "スクリーンショット 2017-04-15 23.15.59.png")

#完成！
キーボードの十字キーでUnityちゃんを操作できる。

![UC_Walk.gif](https://qiita-image-store.s3.amazonaws.com/0/147930/03d9739c-193e-ada0-cac2-303c56d81756.gif "UC_Walk.gif")
SwiftでVideo通話して見た

これは Swift Tweets 2017 Spring で発表（ツイート）したものをまとめたものです。


このテーマの背景としましては、
①video通話のswiftのsampleが少ない
②実務で実際に使って見た感想をシェアしたい
です。
codeのsampleはこちらでご覧になれます
https://github.com/bati668/Skyway_sample


私は現在、SNSを開発しており、TwillioSDKを用いて4人同時Video通話を実装しました。
TwillioSDKを実装することで簡単にVideo通話を実装できます。
しかしいざreleaseしてみると、cost面の問題に直面しました。

詳しい数字は言えませんが、MAU数十万のレベルで数百万円Twillioに支払うことになりました.
cost削減のために自前WebRTC実装をserverエンジニアと協力し、tryしましたが、
いざやってみるとserverの実装の工数がかかるという問題に直面しました。

自前実装できるまでの間Cost削減できないかと考えていて、出会ったのがSkywaySDKです。
NTT Connumicationが投資しており、Twillioと遜色ないレベルで完全無料でした。
コミュニティが活発ではないのは懸念点ですが十分使えるSDKでした。

Twillioはdelegateで管理しているのに対して、Skywayは全てのeventがenumで管理されていて、enumをsetするだけで、callbackを受け取れるというクソイケてる仕様です。
twillioは4人がMaxですが、こちらは制限がないようです。

SwiftのSampleがなかったようなので、作りました。
https://github.com/bati668/Skyway_sample
簡単なSampleですが、皆さんのお役に立てれば幸いです。
以上です。batiでした。ありがとうございました。
Swiftの特徴

# Swiftの特徴

## 静的型付き言語

- 型安全性
  - コンパイル時に、変数や定数の型の情報を決定
  - 型の誤りをコンパイル時に検出するので、予期せぬ型による実行時エラーが発生しない

  ```swift
  var a: Int

  // OK
  a = 456
  // NG
  a = "abc"
  ```

## 型推論

- 代入値からコンパイラが型を推測できる
- 型推論の活用により変数や定数の型宣言を省略可能な場合が多い
  - 記述が簡潔になる
  
```swift
let a = 123
let b = "abc"

print(type(of: a));
print(type(of: b));
```

[実行結果]

```
Int
String
```

## ジェネリクス

- 特定の型に制限されない汎用的なプログラムを記述する機能
- 安全性と再利用性の両立

```swift:max関数
public func max<T>(_ x: T, _ y: T) -> T where T : Comparable
```

```swift:Intの比較
let x = 123
let y = 456

let z = max(x, y)   // 456
```

```swift:Stringの比較
let x = "abc"
let y = "def"

let z = max(x, y)   // def
```

## nil許容性

- 基本的に変数や定数にnilを代入不可能
- ``nil``を許容する特別な型の変数や定数にのみ``nil``を代入可能
  - 代表的な型として、``Optional<Wrapped>``
- 想定外箇所では``nil``が使用されない

```swift
let a: Optional<Int>
let b: Int

// OK
a = nil
// NG
b = nil
```

## Objective-Cとの連携

- 過去資産の利用
- Objective-Cからの段階的移行も可能

```objc:ObjcClass.h
#import <Foundation/Foundation.h>

@interface ObjcClass : NSObject

@property(nonatomic, strong) NSString *name;

- (void)printName;

@end
```

```objc:ObjcClass.m
#import "ObjcClass.h"

@implementation ObjcClass

- (void)printName {
    
    NSLog(@"My name is %@", _name);
}

@end
```

```objc:Bridging-Header.h
#import "ObjcClass.h"
```

```swift:Swiftコード

let objcClass = ObjcClass()
objcClass.name = "makopy_inside"
objcClass.printName()
```

# 命名規則

- 単語の区切り方
  - _upper camel case_
      - 型
      - プロトコル
      - モジュール
  - _lower camel case_
       - 変数
      - 定数
      - 関数
- 単語の選び方
  - あいまいさの解消に必要な単語は全て含める
  - 一般的でない単語の使用を避ける
  - 略語を避ける
- API Design Guidlines
  - https://swift.org/documentation/api-design-guidelines/
Macに複数のrailsプロダクトを扱うための環境を作る(rbenv + ruby-build + gemset)

# 概要
複数のrailsバージョンを扱うための導入記事です。
rbenvとruby-buildとgemsetで構成します。
gemsetを入れることで、gemのバージョン管理ができるので、railsのプロダクトごとでgemを管理することができます。

# 導入方法
```bash
brew install rbenv
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
brew install ruby-build
brew install rbenv-gemset
source ~/.bash_profile
```
# rubyのinstall
rbenv install -l とコマンドを入力するとインストールできるrubyのバージョンが出てくるのでその中からインストールするバージョンを選びます。今回は2.3.1をインストールします。

```
% rbenv install -l
Available versions:
  1.8.5-p52
  1.8.5-p113
  1.8.5-p114
  1.8.5-p115
  1.8.5-p231
  1.8.6
...
% rbenv install 2.3.1
```
インストールが終わった後、rbenv versionsでinstallされているバージョンを確認できます。

```
% rbenv versions
* system (set by /Users/user/.rbenv/version)
  2.2.3
  2.3.1
```
この状態だと、まだsystemのrubyを使用しているのでrbenvでinstallした2.3.1をデフォルトで使用するように変更します。

```
% ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin16]
% rbenv global 2.3.1
% ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]
```
これで2.3.1をデフォルトで使うようになりました。

# gemset
続いてプロダクトごとの設定を行います。

```
% cd /path/to/product
% rbenv gemset create 2.3.1 [product_name]
% echo >.rbenv-gemsets [product_name]
% rbenv gemset active
[product_name] global  
```
prodact_nameの箇所は自由に名前をつけてください。
これで、/path/to/productに移動した時、自動でそのプロダクト用のgemが使用されるようになります。
# 注意
 例えば```gem install bundleでbundle```をインストールした場合、```source ~/.bash_profile```をしないとインストールしたbundleにパスが通っていないで使うことができません。
Vapor as a web framework

# Vapor as a web framework

この記事は **Vapor as a web framework** というタイトルで [Swift Tweets](https://swift-tweets.github.io/)にてツイートしたものをまとめて、一部実装イメージコードを追加したものになります。

※ 実装イメージコードは 2.0.0-beta.8 のものです。Vaporは2.0に向けて使用が大幅に変わっており、そのまま書いても動かないことが多いと思うので、あくまでイメージです。

今回はSwift製Webフレームワーク & サーバーである「Vapor」の具体的な機能について話します。Swiftの話というよりはフレームワークの紹介のような感じです。

## Vaporの概要

今日はVaporのWebフレームワークとしての機能を簡単に紹介します。詳細は [公式ドキュメント](http://beta.docs.vapor.codes/) を参照してください。また、https://ookami.connpass.com/event/53331/ にて詳しい話をするつもりなので興味がある方はぜひ。

## View
まずはテンプレートエンジンです。Vaporではコミュニティが開発している「Leaf」というテンプレートエンジンを使用すると楽です。初期はかなりひどかったですが、最近改善されて来ているっぽい？ 
[https://github.com/vapor/leaf](https://github.com/vapor/leaf)

AtomやVSCode向けにLeafのシンタックスハイライト用のパッケージも提供されています。Xcodeで弄ってもいいですが私はあまり好きじゃないです。Leafのタグは自分で定義することもできるので、欲しいタグがあったら作れちゃいます。

こんな感じの文法です。

```Leaf
#extend("base")

#export("content") {
    <div>Content</div>

    #equal(lhs, rhs) {
        equal values
    }

    #loop(contents, "content") {
        #(content.name)
    }

    #if(isLoggedIn) {
        isLoggedIn
    } ##else() {
        Guest
    }
}
```

## ORM
次にORMです。Vaporコミュニティが「Fluent」というORMを開発しているのでこれを使うのがとても楽です。MySQL, SQLite, PostgreSQL等で使えます。

Fluentでは、Realmのようにモデルをクラスとして定義します。DBに対する基本的な操作は、メソッドが用意されているのでSQLを書かなくてもDBに対しての処理を簡単に書くことができます。[https://github.com/vapor/fluent](https://github.com/vapor/leaf)

こんな感じ

```Swift
final class User: Model {
    
    static var idKey: String {
        return "id"
    }
    
    let storage = Storage()
    let username: String
    let password: String
    
    init(username: String, hashedPassword: String) {
        self.username = username
        self.password = hashedPassword
    }
    
    required init(row: Row) throws {
        username = try row.get("username")
        password = try row.get("password")
    }
    
    func makeRow() throws -> Row {
        var row = Row()
        try row.set("username", username)
        try row.set("password", password)
        return row
    }
}
```

## セッション
次にセッションです。デフォルトではアプリのプロセス上にセッションを保存しますが、Redis用のProviderが提供されているので、Redisに保存することもできます。[https://github.com/vapor/redis-provider](https://github.com/vapor/redis-provider)

```Swift
let redisCache = try RedisCache(config: drop.config)
let sessions = CacheSessions(redisCache)
drop.middleware.append(SessionsMiddleware(sessions))
```

## セキュリティ周り
次にセキュリティ周り。Vaporではセキュリティ周りのMiddlewareやパッケージを用意しています。例えば、バージョン2.0からは vapor/auth を使ってCookieやトークンを使った認証を簡易化できます。CORSのMiddlewareもあります。

## デプロイ
最後にDeploy。Vaporアプリケーションのデプロイには「Flock」を使うと楽です。カスタムタスクを作ってDeployの特定の処理を自分で書くこともできます。[https://github.com/jakeheis/Flock](https://github.com/jakeheis/Flock)

## まとめ
Vaporは、Webアプリを作るための機能がそこそこ増えてきてます。まだまだ開発中で頻繁にAPIが変わりますが、初期の頃に比べてどんどんよくなってるのでぜひ使って見てください。Slackのチームもあります。ごTweet聴ありがとうございました。
JavaでJPEG画像の保存品質を変更する

JPEG画像をリサイズして保存したいことはたまにあると思います。ImageMagickを使っていいなら話は早いのですが、どうしてもJavaだけで完結させたい場合は、ImageIOを使うことになります。

ただし、一番シンプルな実装方法ではJPEG画像の保存品質が自動的に「75」にされてしまうようなので注意が必要です（Java 8で確認）。見事にハマりました。

## 保存品質を指定できない方法

実装自体はシンプルだけど、保存品質を変更したい場合には NG です。

```java
    public static byte[] resize(final byte[] src, final double scale) throws IOException {
        try (ByteArrayInputStream is = new ByteArrayInputStream(src);
             ByteArrayOutputStream os = new ByteArrayOutputStream()) {
            BufferedImage srcImage = ImageIO.read(is);
            BufferedImage destImage = resizeImage(srcImage, scale);

            // 保存品質は「75」になる
            ImageIO.write(destImage, "jpeg", os);
            return os.toByteArray();
        }
    }
```

## 保存品質を指定できる方法

こちらが正解。保存品質 `quality` を 0 〜 1.0 で指定できます。1.0 が品質 100 相当になります。

```java
    public static byte[] resize(final byte[] src, final double scale, final float quality) throws IOException {
        try (ByteArrayInputStream is = new ByteArrayInputStream(src);
             ByteArrayOutputStream os = new ByteArrayOutputStream();
             ImageOutputStream ios = ImageIO.createImageOutputStream(os)) {
            BufferedImage srcImage = ImageIO.read(is);
            BufferedImage destImage = resizeImage(srcImage, scale);

            // 保存品質はユーザー指定に従う
            ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next();
            ImageWriteParam param = writer.getDefaultWriteParam();
            param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
            param.setCompressionQuality(quality);
            writer.setOutput(ios);
            writer.write(null, new IIOImage(destImage, null, null), param);
            writer.dispose();

            return os.toByteArray();
        }
    }
```

## 補足

先の２つの例で出てきたリサイズ用のメソッド `resizeImage` の実装は次のようになります。画像のリサイズもデフォルトでは画質がダメダメですが、アフィン変換するときに `TYPE_BICUBIC` を指定することで、画質を高めることができます。

```java
    public static BufferedImage resizeImage(final BufferedImage image, final double scale) throws IOException {
        int width = (int) (image.getWidth() * scale);
        int height = (int) (image.getHeight() * scale);
        BufferedImage resizedImage = new BufferedImage(width, height, image.getType());

        // アフィン変換でリサイズ（画質優先）
        AffineTransform transform = AffineTransform.getScaleInstance(scale, scale);
        AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BICUBIC);
        op.filter(image, resizedImage);

        return resizedImage;
    }
```

Javaでのリサイズは画像データが大きくなるとメモリ＆CPU負荷が許容できないくらい大きくなるので、使えるシーンはかなり限定的だと思います。
DQNメモ

https://github.com/kuz/DeepMind-Atari-Deep-Q-Learner
install_dependencies.shでtorchなどもまとめてインストール

qt関係が入っていないので以下のように補足
https://gist.github.com/ishikawakouji/36d20c86042ff6acf258

こっちでluarocksするときはdqn/torch/bin/luarocksからinstallコマンドやる


need more than 6GB


普通にtorchインストールする場合
なにもしないでluarocksするとこっち

torch7 developed by
http://ronan.collobert.com/

torch7 tutorial
http://code.cogbits.com/wiki/doku.php
WordPress on Docker

参照：[WordPress を Docker で動かす（ OSX / Vagrant ）](http://www.1x1.jp/blog/2013/12/wordpress-container-on-docker.html)


#Prepare

(Paste command on MobaXTrem: Shift + Insert)
## Windows
Cygwin install https://cygwin.com/install.html (64bit)
git http://qiita.com/kanpou_/items/0764381301d37e04157b
ssh http://docs.oracle.com/cd/E26854_01/install.12103/b65084/preinstall_req_cygwin_ssh.htm#CBHIAFGI

```
$ git clone https://github.com/shin1x1/vagrant-docker-wpdev
$ cd vagrant-docker-wpdev
```

## Download WordPress
```
$ wget http://wordpress.org/latest.tar.gz
$ tar -xzvf latest.tar.gz
$ rm latest.tar.gz
```

Then

```
$ vagrant up
```

and access to
http://192.168.33.31/
IBM BluemixでWatsonのREST APIをPythonからたたく

執筆途中。未完成

# 登録
IBM BlueMixに登録する

スペースの作成 `dev`
http://www.creationline.com/lab/8055
ここではCLIでやってますが，GUIで普通に出来たと思います．


Dashboardにいく
メニューからカタログを選ぶ
Pythonを選ぶ　このとき指定した名前が既存のものとかぶってると，追加できない．
ダッシュボードで追加したやつを選ぶ
サービスの追加でWatson Question & Answerのサービスを追加する．
追加した時点で，APIを使うためのURLとID,パスワードが発行されています．

ダッシュボードの追加されたサービスにQ&Aがある．
ここの資格情報の表示とすると，url, id, passwordを確認できます．
また，資格情報の表示の右にドキュメントへのリンクもあるので見てみる．
documentationのapi referenceをみてみると，すべてREST APIである．
REST APIは，今回の場合はurlでアクセスすると，なにかJSON形式の応答を返してくれるというような認識でいいのではないかと思います．
Q&AのAPIにpingを飛ばすにはv1/pingと書いてある．
試しにブラウザでアクセスして確認してみる．http requestの応答としては200を返すのですが，ブラウザ上では空のJSONが見えます{}
試しにterminalからアクセスしてみると．．

curl -X GET -H "Accept: application/json" -u d1447bde-bb6f-4db9-b073-eb8faadcf96d:6aX7RxuNFtJp https://gateway.watsonplatform.net/question-and-answer-beta/api/v1/ping
{}
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Virtualization/3.0/html/REST_API_Guide/appe-REST_API_Guide-cURL_Integration.html




curl -u d1447bde-bb6f-4db9-b073-eb8faadcf96d:6aX7RxuNFtJp -LI https://gateway.watsonplatform.net/question-and-answer-beta/api/v1/ping -o /dev/null -w '%{http_code}\n' -s
200

http://sugamasao.hatenablog.com/entry/20120326/1332754813


Djangoを使用してWebアプリケーション開発
http://www.ibm.com/developerworks/jp/cloud/library/cl-worldbank-charting-app/
ここのステップ１，２だけやってみる．
It worksと表示されます．

## cf のインストール & push
次にこれをデプロイしてみます．
ダッシュボードからアプリの選択
コーディングの開始を選択
CF コマンド・ライン・インターフェースを選択すると説明がでてくるので，その通りにします．

http://www.ibm.com/developerworks/jp/cloud/library/cl-worldbank-charting-app/
のステップ４をして，DjangoのプロジェクトをBlueMix上にアップしてみます．
requirement.txtに環境情報を書くだけでサーバ上に環境が構築されるいまどきの未来を感じるあれ


# Django
http://www.ibm.com/developerworks/jp/cloud/library/cl-worldbank-charting-app/

git clone https://hub.jazz.net/git/mamtasharma/trendsapp001
してソースダウンロード

manifest.yml
nameを一意の名前に変える
buildの行を削除

とりあえずなんとなくDjango動かしたいので細かい点は虫
cf push  --no-start
cf create-service mongodb 100 mongodb001
cf bind-service trendsapp001 mongodb001
cf start trendsapp001

url/trendsにアクセス
動きました．

# Q&A加える
ダッシュボードに行って，アプリのページ行く
サービスの追加で


https://developer.ibm.com/answers/questions/181645/question-validation-failed-error-when-making-post.html
できない！Python Script


```python:request.py
import requests
import json
 
qt = "How deep is grand canyon?"
url = "https://gateway.watsonplatform.net/question-and-answer-beta/api/v1/question/travel"
r = requests.post(url,
                  data=json.dumps({"question": {"questionText": qt}}),
                  headers={"Content-Type": "application/json", "X-SyncTimeout": 30},
                  auth=("0b46d272-3d88-47c7-afa5-9127919e83a6", "yhxjoHEq3dmP"))
print r.text
```

Django 1.7から新しい機能使いされたりしてるので，
過去のあまり参考にならない．
http://a-records.info/2014/09/29/18/
Bookmarks

# 研究
* [必应词典(Beta)，在线词典，在线翻译，英语学习引擎]
(http://dict.bing.com.cn/%3Fform%3DBDVSP4#%3Ahome)

# Dataset
* [TIMIT Acoustic-Phonetic Continuous Speech Corpus - Linguistic Data Consortium]
(https://catalog.ldc.upenn.edu/LDC93S1)

# IBM
* [IBM Research, Carnegie Mellon Create Open Platform To Help the Blind Navigate Surroundings]
(http://www.cmu.edu/news/stories/archives/2015/october/blind-navigation-app.html)
* [NavCog]
(http://www.cs.cmu.edu/~NavCog/people.html)

# Webページ技術
* [This Is What Disney Princesses Look Like Without Makeup]
(http://www.buzzfeed.com/lorynbrantz/this-is-what-disney-princesses-look-like-without-makeup#.qeqOEvV8Y)

# 学会
* [avec2011]
(http://sspnet.eu/avec2011/challenge-data/)
* [ICICA 2016]
(http://www.icica.org/index.html)

# Linux
* [DISPLAY - なんなんなん行く？]
(https://sites.google.com/site/teyasn001/ubuntu-12-10/huan-jing-bian-shudisplay)
* [クリーンインストールした Ubuntu14.04 に環境構築 (2) - comedy of errors]
(http://n-nishida.hatenablog.com/entry/2015/04/19/053643)

# Git
[tortoisehg — Bitbucket]
(https://bitbucket.org/tortoisehg/)

# Spark
[Scala + PlayFramework + ScalikeJDBC + Flyway + (Scala-logging) on Heroku + PostgreSQL](http://qiita.com/chidakiyo/items/44be957e0d4f945b08dd)

# Install SPTK on Ubuntu
sudo apt-get install gcc
sudo apt-get install csh

http://aidiary.hatenablog.com/entry/20120701/1341126474

x2x +sf < data.short | frame -l 640 -p 160 | mfcc -l 640 -f 16 -m 12 -n 20 -a 0.97 -E > data.mfc

echo -0.5 0 0.5 | x2x +af > delta
echo 1.0 -2.0 1.0 | x2x +af > accel
delta -m 12 -d delta -d accel data.mfc > data.delta
AWS上でインスタンスを構築してwordpressを起動するまで

## About
wordpressをAWS上で立ち上げてみました。

## 利用技術
- Terraform
- Itamae

ソースコードはこちらです https://github.com/tjinjin/wordpress-sandbox

## Terraform

```main.tf
data "aws_ami" "centos" {
  most_recent = true

  filter {
    name   = "product-code"
    values = ["aw0evgkw8e5c1q413zgy5pjce"]
  }
}

resource "aws_instance" "wp" {
  ami                    = "${data.aws_ami.centos.id}"
  instance_type          = "t2.micro"
  key_name               = "tjinjin-terraform"
  vpc_security_group_ids = ["${aws_security_group.wp.id}"]

  root_block_device {
    delete_on_termination = "true"
  }

  tags {
    Name = "wordpress"
  }
}

resource "aws_security_group" "wp" {
  name        = "wordpress"
  description = "wordpress sg"

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["${var.my_ipaddr}"]
  }

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["${var.my_ipaddr}"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags {
    Name    = "wordpress"
    Created = "terraform"
  }
}

output "wordpress_ip" {
  value = "${aws_instance.wp.public_ip}"
}
```

AMIはcentosの公式のものを使用しています。product-codeはこちらのページから判断しました。 https://wiki.centos.org/Cloud/AWS

## Itamae
一部プラグインを使いつつ、他は自分で書きました。もともとchefを使っている人間だったので`http_request` というresource名を知らなかったため、苦労しましたｗ

```
$ itamae ssh --host aws-wordpress roles/wp.rb 
```

これをすれば適用できます。

## 残作業
ここまでくればあとはmysqlの設定とwordpress上での設定だけです。

```bash
$ cat /var/log/mysqld.log | grep generate
$ mysqladmin -u root password -p
$ mysql -u root -p

mysql> create database wordpress;
mysql> grant all privileges on wordpress.* to wordpress@localhost identified by '<password>';
```

あとは画面で設定をすれば一応起動するところまで到達できます。
日本語のプログラミングが世界を変える

ユーザとして日本語プログラミングを推奨する代わりに書籍を紹介します。
「日本語の科学が世界を変える」松尾義之著　筑摩選書
著者は日経サイエンス元編集長で科学ジャーナリスト。

ノーベル賞を輩出している日本の科学者達は何語で考えているのか？

英語、日本語、いやいや数学、物理、化学、生物なのでそれは無関係？
著者は、日本の科学者の優秀さは「日本語」にあるのではないかという仮説を持っています。しかし科学の世界でも特異な考え方であるらしいです。

さてプログラミングの世界では？
メモリ使用量の少ないGPUのidを取得する

のは、普通どうするのでしょうか？

NVIDIA製のGPU driverを使ってる前提とします。

いかにも何かのフレームワークの一部として実装されてそうなのですが見当たらないので自分の場合どうしてるかを書いておきます。（実はあるよ、という場合はこっそり教えていただけると、、）

まず、shellのコマンドとして以下を入力することでidごとの使用メモリの状態を取得します。

` nvidia-smi --query-gpu=index,memory.used --format=csv,noheader `

返ってきた結果に以下のような正規表現を使い欲しい結果を抽出します。

` ^([0-9]+),(\s+)?([0-9]+)(\s+)?MiB$ `

上記２ステップの処理をpythonのコードとして記述しています。
SkyrimのModをプログラムで生成する - 7 - ストリングテーブルを扱う

#はじめに
この記事は、SkyrimというゲームソフトのModファイルのバリナリ解析とそれを利用してModを生成するC#のコードについて記載していくシリーズ物です。
ファイルフォーマットについての詳しい情報は以下のサイトがあります。(以降UESP)
[Tes5Mod:Mod File Format - The Unofficial Elder Scrolls Pages (UESP)](http://en.uesp.net/wiki/Tes5Mod:Mod_File_Format)

前回はModでも特に特別な構造となっているセル情報とワールド情報のクラスについて扱いました。今回はストリングテーブルについてです。

#Skyrimのストリングテーブルを扱うクラス
`Skyrim.esm`など、大本のファイルでは武器名などゲーム中に表示する固有の文字列は別ファイルで管理されています。（通常のModファイルではこれが普通の文字列として管理されています）
このため、例えば`Skyrim.esm`から武器情報を抜き出した際に武器名称を知りたい場合、ストリングテーブルから文字情報を取得する必要があります。

ストリングテーブルのファイルフォーマットについてUESPに詳細がありますので説明は省略します。
http://en.uesp.net/wiki/Tes5Mod:String_Table_File_Format

とりあえず今回は`STRINGS`を扱うクラスのみです。

```C#
    public class TesTableStrings
    {
        private TesFileReader fr;
        private uint count;
        private uint dataSize;
        private Dictionary<uint, uint> de = new Dictionary<uint, uint>();
        private long pos;
        private Dictionary<uint, string> dic = new Dictionary<uint, string>();

        public TesTableStrings(string path)
        {
            fr = new TesFileReader(path);
            count = fr.GetUInt32();
            dataSize = fr.GetUInt32();
            for (int i = 0; i < count; i++)
            {
                de.Add(fr.GetUInt32(), fr.GetUInt32());
            }
            pos = fr.Position;
        }

        public string this[uint id]
        {
            get
            {
                if (!de.ContainsKey(id))
                    return "";

                if (!dic.ContainsKey(id))
                {
                    dic.Add(id, fr.GetNullTerminatedString(pos + de[id]));
                }
                string result = dic[id];
                return result;
            }
        }

        public Dictionary<uint, uint> DicStringID
        {
            get
            {
                return de;
            }
        }
    }
```
必要な文字列にのみアクセスできる仕組みとなっていますので、折角ですからすべて読み取るのではなく、インデクサーで指定されたidの文字列を読み取る形としています。
一応一度読み取ったものはディクショナリーに登録してそこから読むようにはしてみました。
指定したidが無い場合、とりあえず、例外とせずに空文字を返すようにしていますが、今後検討が必要です。

単純な構造ですから特に説明する事はないかと思いますが、最初にidと文字列があるオフセットのディクショナリーを作成し、後はidが指定されたら、そのディクショナリーからオフセット位置までシークして、NULL終端までの文字列を読み取るようにしています。

以上

|前回|次回|
|:--|--:|
|[6 - セル情報とワールド情報を扱う](http://qiita.com/rrryutaro/items/f9e37d761ca62303b343)|[8 - 実際にModファイルを読み取ってみる](http://qiita.com/rrryutaro/items/aee9364d362ba9b7aac7)|
仕事の手筋についての個人的まとめ

#この記事を書いた理由#
時間が有限である以上、時間の使い方を考えて仕事をする必要があるな、と最近感じています。
そのため、<font color="Red">考えるところは考えて、考えなくていいところは考えなくていい工夫をする</font>
ことに行き当たり、<font color="Red">仕事をパターン化することで考えなくていい事を増やす</font>という対応をしようと思っています。
本記事は今年社会人4年目となる私が今までに体験してきたことへの対応の記録、普段の仕事での気付きで構成を行おうと考えております。時間をかけてまとめていくので、徐々に追記をしていきます。

#仕事への理解編#

| 事項       |       対応|備考|参照|
|:-----------------|:------------------|:------------------|:------------------|:------------------|
|相手の話を理解するには|分からない用語を調べ、まとめる必要がある。用語集を作ること|||
|人の話をまとめるには|言われたことをすぐに書き出すのではなく、思い出しながら書く。削ぎ落とされ、欠けているものが分かるため。|||
|仕事を理解するには|隅々まで覚え、理解する必要はない。やることが膨大にあるならば、肝心なとこのみに絞ること(上司が気にしているところ)上司から指摘があったら、その都度修正して行けば、ほぼ完璧になる|||

#問題解決#

| 事項       |       対応|備考|参照|
|:-----------------|:------------------|:------------------|:------------------|:------------------|
|考える順序|1.問題の現象の概要を書く。<br>2.時系列順に並べる。<br>3.解決すべきこと、考えることを絞る。<br>4.自分に判断できること、自分に答えが出せるかを考える<br>5-1.判断できるのなら、1つ1つキリよく調べる(途中で投げると中途半端になる<br>5-2.調べていったことを忘れずに記載する(調査の記録を残す。何をやったか忘れるのを防止する)<br>5-3.解決できるのなら、実施する予定のことを報告する<br>6.判断できないのなら、上司に相談する、もしくは詳しい人(担当者)に問い合わせる||[問題解決についての個人的まとめ](http://qiita.com/Amebayashi/items/316b7e1a8bf4902f584a)|



#仕事の体系化編#
| 事項       |       対応|備考|参照|
|:-----------------|:------------------|:------------------|:------------------|:------------------|
|メモをまとめるには|表を作成して、事項ごとにまとめる。課題管理表、Todoリストなど|||
|仕事をあやふやなまま進めないためには|忘れるとまた一から覚えなおす羽目になる。また、自分が普段どんな風に仕事を進めているかを見える化するため、対応をパターン化して、いつでも思い出せる工夫をする。そのためにはパターン表(対応表)、作業手順書を作成する。|||
|便利な資料とは|課題管理表<br>QA表<br>業務一覧、工数表<br>用語集<br>WBS(ToDoリスト、スケジュール)<br>進捗管理表(遅れ、実工数、残工数管理)<br>日報、時刻Todo管理ツール(メーラーのカレンダー)<br>対応表(パターン表)<br>問い合わせ表<br>資料参照表<br>作業手順書(目的・概要、手順リスト、画面参考シート、問題対応表)<br>
|仕事の流れとは|1.目的<br>2.納期確認<br>3.成果イメージ確認<br>4.用語確認<br>5.上司確認点確認<br>6.手順リスト検討(Todoリスト)<br>7.各手順の実施作業検討<br>8.チェックリスト作成<br>9.レビュー<br>10.実作業実施<br>11.中間レビュー<br>12.上司から指摘→<br>13.指摘反映<br>14.実作業完了||[仕事の進め方についての個人的まとめ](http://qiita.com/Amebayashi/items/69a11c4a5e8629392f64)|

#システムの体系化編#

[システムについての個人的まとめ](http://qiita.com/Amebayashi/items/6840938a270c2547b1e0)
たくさんあるプロットを一望する

データをいじいじしていると，大量のプロットをみなくてはならないことが多々あります．
そんなときに，一つのmdファイルにまとめてくれるコードを書きました．
（もっと上手いやり方があったら教えてください．）


```sh:make_figures_md.sh
#!/bin/sh
figurePATH="figureのあるディレクトリ"
mdPATH="mdを保存したいPATH/figures.md" #mdの名前も含める．
echo "# Figures" > $mdPATH
COUNT=1
for name in `ls $figurePATH | grep .png`
do 
echo "![fig${COUNT}](${figurePATH}/${name})" >> $mdPATH
COUNT=$(( COUNT + 1 ))
done

```

ちなみにこのコードの注意点としては，`figurePATH`で指定したディレクトリに存在するpngを全てまとめてしまうので，部分的にやりたいときは少し修正が必要です．

あとあまりないとは思いますが，pngのファイル名にスペースがあると上手くいかないです．
CSSのフォントをもう一度

フォントの指定について自分が知らなかったことのメモ。

##font-size
・%指定。
親要素のフォントサイズに対する%で指定。

・キーワード指定
xx-small、x-small、small、medium、large、x-large、xx-large

・smaller、larger
親要素に対して1段階小さくor大きくなる。

##サイズ指定単位
・px
画面の1pxを1とする単位。

・pt
1/72インチ（ワープロとかで使われる単位）
1インチ = 2.54cm

・em
○font-sizeに指定した場合
親要素のfont-sizeプロパティの値を1とする単位。
例、親要素が12pxの場合、```font-size:0.5em```なら6pxに、```font-size:1.5em```と指定すると、18pxになる。

○それ以外の要素に指定した場合
その要素に指定されているfont-sizeの値を1とする単位。

##line-height
行間の高さを指定する

・実数
単位をつけない、実数（1.5など）で指定。
フォントサイズと、指定した実数をかけた高さになる。

・単位付きの実数
行間をpxなどで指定。

・パーセンテージ
フォントサイズに対する％で指定。

・normal
ブラウザが妥当だと判断する行間に設定。（ブラウザによって異なる）

※なぜ実数指定があるのか
line-heightは子要素にも影響する。
子要素にline-hegihtの値が影響するとき、「指定された値」ではなく、「計算結果」の値が影響する。

フォントサイズが10pxの要素に対してline-heightを1.5emや、150%で指定すると、子要素のふフォントサイズ30pxの要素のline-heightは15pxになり文字がはみ出す。なのでline-heightは多くの場合実数で指定される。


```
<style media="screen">
  #defalut{
    font-size: 10px;
    line-height:1.5em;(←これでは#largeのフォントがはみ出す。"1.5"で指定。)
  }
  #large{
    font-size: 30px;
  }
</style>
<div id="defalut">
  <div>hello</div>
  <div id="large">hello</div>
</div>
```

・親要素の値の継承をしないプロパティであってもinheritと指定すると、継承できる。

##font-family
・font名
Arial Boldのようなフォント名ではなく、Arialのようなフォントファミリー名を指定。
半角スペースや記号などを含むものがあるので、ブラウザにフォントが認識される様に""をつける。

・デフォルト
serif、sans-serif、cursive、fantasy、monospace
5種類のキーワードでおおまな種類を指定。
表示されるフォントはブラウザによって異なる。
複数指定する時は、""をつけない。
（cursiveとfantasyを日本語に指定したとき、chromeでは認識されなかった）

##font-weight
100~900まで100づつ指定。
数字が小さいほど細い。

##font-style
・italic
イタリック体
・oblique
普通のフォントを斜め表示

##font指定
font :　font-sytle font-weight font-size/line-height font-family;
で指定できる。

※font-sizeとfont-family以外は省略可能。
(font-familyは親要素で指定されていたら省略可能)

```
#defalut{
        font: italic 100 1.5em/2 serif;
      }
```

##text-align
これはブロックレベル要素にしか指定できない。
ブロックレベル要素の中のinline要素全体の行揃え指定。

##text-decoration
・underline
・overline
・line-through(取り消し線)
・none

##letter-spacing
文字間隔指定。マイナスで狭くすることも可能。

指定方法
・単位付き実数
・normal

##text-indet

指定方法
・単位付きの実数(1emを指定すると1文字空く)
・%

##text-transform

・uppercase（アルファベットを大文字で表記）
・lowercase（アルファベットを小文字で表記）
・capitalize（単語の先頭を大文字で表記）


##ベンダープレフィックス
まだ草案段階の機能は、先頭にベンダープレフィックスをつける。
しかし、将来その機能が確定した時を考えて、ベンダープレフィックスをつけていない機能名を書いておく。

![17949664_1078389828934124_1786342277_o.jpg](https://qiita-image-store.s3.amazonaws.com/0/142797/71394dfa-181d-dfca-0387-02a4ccf20475.jpeg)
[docker] python3.5 + numpy + matplotlib の環境構築

ゼロからつくる Deep Learning 用の環境構築　メモ

===========2017/04/15 22:24 追記===============
本記事の方法に沿って作成したdocker image を
https://hub.docker.com/r/gorogoroyasu/deeplearning-env
に起きました。
ご自由にご利用ください。
================追記 ここまで=================

ubuntu16 のdocker コンテナを準備し、
その中にpython が動く環境を構築した。

ubuntu:16.04 のdocker イメージをダウンロードし、コンテナを起動し、コンテナ内に入る。

```
sudo docker pull ubuntu:16.04
sudo docker run -d --name ubuntu16 ubuntu:16.04 /sbin/init
sudo docker exec -it ubuntu16 /bin/bash
```
コンテナ内で、下記のコマンドを実行

```
apt update
apt-get install gcc g++ make git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev　curl libopenblas-dev vim wget -y

git clone https://github.com/yyuu/pyenv.git ~/.pyenv
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc 
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
source ~/.bashrc

pyenv install 3.5.1
pyenv rehash
pyenv global 3.5.1
pip install --upgrade pip
pip install numpy
pip install matplotlib
```

その後、
`find / -name matplotlibrc`
を実行し、出てきたファイルの 38 行目付近にある、
`backend      : TKAgg`
を
`backend      : Agg`
に変更。

これで環境構築は終了。

なお、グラフの出力は、画像で行うことにした。
理由は、めんどくさそうだったから。
画像じゃ嫌だという方は、こちらを参考にしてください。
[参考]:http://qiita.com/hyt-sasaki/items/cebdd953a5b5cfde00df

画像を出力するサンプルコードはこちら。

```
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 1, 0.1)
y = x

plt.plot(x,y)
plt.savefig('plot.png')
```
`plt.savefig('hoge.png')` が、画像を出力している。

出力された画像は、こんな感じ。
とりあえず、静止画像だけでいいなら、これで十分だと思う。

![plot.png](https://qiita-image-store.s3.amazonaws.com/0/115634/124df769-3d62-fee5-4e34-653d40784770.png)

いい感じ。


===========2017/04/16 14:58 追記============
P.74 で、 PIL というモジュールを使っているので、
pip install Pillow
が必要みたいです。
なお、 PIL で画像を保存するには、
`pil_img.save('hoge.png')`
とすれば良いみたいです。 
docker image は、未更新です。

========================================
CentOS 7.3 で pear install した Symfony 1.4 を動かすまでのメモ

[ブログからの転載](http://1bed.allright.life/?p=2432)

今回訳あって Symfony 1.4 を触ることになり、手元で Symfony 1.4 を勉強する環境を作りました。

少し手こずったのでメモを残します。

## 前提条件

* Hyper-V に CentOS 7.3.1611 をセットアップ済み
* SELinux は disabled
* firewalld は停止済み
* Apache, MariaDB は導入済み



## yum で必要なパッケージをインストール

root ユーザーで作業を行います
 
```bash
yum install php php-cli php-mbstring php-pear php-pdo php-mysql
```

## pear で Symfony をインストール

root ユーザーで作業を行います

```bash
pear upgrade PEAR
pear channel-discover pear.symfony-project.com
pear install symfony/symfony-1.4.20
```

## Symfony のセットアップ

一般ユーザー(ここでは hoge さん)で作業を行います。

```bash
cd ~
mkdir symfony_learn
cd symfony_learn
symfony generate:project symfony_learn
symfony generate:app frontend
```

frontend_dev.php で IP アドレスを指定されている部分をコメントアウトしました

```bash
vim web/frontend_dev.php
```

```php:~/symfony_learn/frontend_dev.php
<?php

// this check prevents access to debug front controllers that are deployed by accident to production servers.
// feel free to remove this, extend it or make something more sophisticated.
//if (!in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1')))
//{
//  die('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
//}

require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');

$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'dev', true);
sfContext::createInstance($configuration)->dispatch();
```

## Apache の設定

root ユーザーで作業を行います

```bash
vim /etc/httpd/conf.d/dev.conf
```

dev.conf は次の記述にします

```conf:/etc/httpd/conf.d/dev.conf
NameVirtualHost *:8080
Listen 8080

<VirtualHost *:8080>
  DocumentRoot /home/hoge/symfony_learn/web
  DirectoryIndex index.php

  Alias /sf /usr/share/pear-data/symfony/web/sf

  <Directory "/home/hoge/symfony_learn/web">
    AllowOverride All
    Require all granted
  </Directory>

  <Directory "/usr/share/pear-data/symfony/web/sf">
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>
``` 

Apache に設定を反映させます

```bash
systemctl restart httpd
```

## 動作確認

* http://<ゲスト OS の IP アドレス>:8080/index.php/
  ![normal.png](https://qiita-image-store.s3.amazonaws.com/0/118961/5e2ffddc-39b4-fd02-3493-b46ab9dda533.png)

* http://<ゲスト OS の IP アドレス>:8080/frontend_dev.php/
  ![frontend_dev.png](https://qiita-image-store.s3.amazonaws.com/0/118961/b1f9324f-d27b-1ac4-0051-3cda498679f8.png)

## 参考 URL

* [1日目: プロジェクトを始める](http://symfony.com/legacy/doc/jobeet/1_4/ja/01?orm=Doctrine)
* [The symfony project PEAR channel](http://pear.symfony-project.com/)
Riderでコードスタイルの設定を行う方法

普段Unityで開発を行う際のコードエディタとしてJetbrainsのRiderをガンガン使わせていただいていますが、
ある日、private変数名は_(アンダースコア)のprefixを付けよう派(Resharper使用派)と付けない派(Resharper未使用派)で意見が分かれたことがありました。
もしprefix付けないことになった場合、Riderのデフォルト設定では以下のようにエディタ上にワーニングが出てしまうので、コードスタイルの設定方法を備忘録の意味も含め書いておきます。

<img width="453" alt="Hoge_cs_-_Gun_-____Projects_UnityProjects_Gun_Gun_sln__-_Rider_1_0_EAP.png" src="https://qiita-image-store.s3.amazonaws.com/0/133794/54b1dace-6315-9874-20fa-d0991f1f85a8.png">


# 設定方法
「Preferences」の[Editor]-[Code Style]-[C#]の[Naming]タブをを開くと、以下のように「Instance field (private)」が"_lowerCamelCase"となっているので、[Pre...]に設定されている"__"を削除します。

<img width="1245" alt="Preferences.png" src="https://qiita-image-store.s3.amazonaws.com/0/133794/051282a2-251c-8fa3-f31c-ed409311780e.png">


すると、以下のようにエディタ上にワーニングが出なくなります。

<img width="454" alt="Hoge_cs_-_Gun_-____Projects_UnityProjects_Gun_Gun_sln__-_Rider_1_0_EAP.png" src="https://qiita-image-store.s3.amazonaws.com/0/133794/e4db45e3-117d-56be-257e-900c8a2008b3.png">

ワーニングがいっぱいあるとエディタが重くなるようなので、チームのコーディングルールに合わせて正しく設定するほうが良いようです。