OmniAICreator/Qiita-1.07M huggingface dataset:
はじめてのGo

# 概要
https://golang.org/doc/articles/wiki/
1.net/http packageというのを使うとWebアプリが作れるらし
2.ロードとセーブ機能をもったデータ構造が作れる
3.html/template packageでHTMLTemplateが作れる
4.regexp packageで入力バリデーションができる
5.なんだかいろんなハンドラが使えるらしいな！

[echo](https://github.com/labstack/echo)というフレームワークもあるらしい！

次回実践してみましょう！

#1. Install
[こちら](http://golang.jp/install)を参考にインスコします。

https://golang.org/dl/ へ遷移
AppleOSX版をダウンロードしました。
このあと普通にインストーラーからインストールできます。

#2.インストール状態を確認 
```
[murotanimari]$ cd  /usr/local/go
[murotanimari]$ ls -al
total 184
drwxr-xr-x   20 root          wheel    680  2 18 05:48 ./
drwxrwxr-x   22 murotanimari  admin    748  2 20 22:55 ../
-rw-r--r--    1 root          wheel  25187  2 18 05:34 AUTHORS
-rw-r--r--    1 root          wheel   1107  2 18 05:34 CONTRIBUTING.md
-rw-r--r--    1 root          wheel  34519  2 18 05:34 CONTRIBUTORS
-rw-r--r--    1 root          wheel   1479  2 18 05:34 LICENSE
-rw-r--r--    1 root          wheel   1303  2 18 05:34 PATENTS
-rw-r--r--    1 root          wheel   1638  2 18 05:34 README.md
-rw-r--r--    1 root          wheel      5  2 18 05:34 VERSION
drwxr-xr-x   12 root          wheel    408  2 18 05:48 api/
drwxr-xr-x    5 root          wheel    170  2 18 05:48 bin/
drwxr-xr-x    4 root          wheel    136  2 18 05:48 blog/
drwxr-xr-x   41 root          wheel   1394  2 18 05:48 doc/
-rw-r--r--    1 root          wheel   1150  2 18 05:34 favicon.ico
drwxr-xr-x    3 root          wheel    102  2 18 05:48 lib/
drwxr-xr-x   16 root          wheel    544  2 18 05:48 misc/
drwxr-xr-x    7 root          wheel    238  2 18 05:48 pkg/
-rw-r--r--    1 root          wheel     26  2 18 05:34 robots.txt
drwxr-xr-x   64 root          wheel   2176  2 18 05:48 src/
drwxr-xr-x  242 root          wheel   8228  2 18 05:48 test/
```

#3 .bash_profileでパス設定
```
export GOPATH=$HOME/work
```
一旦ターミナルを終了して go コマンドを入力するとパスが通っている事が確認できます。

#4 .作業ディレクトリの作成
cd $GOPATH
mkdir -p src/github.com/user/hello

#5 .サンプルアプリ作成
```
cd　src/github.com/user/hello
vi hello.go
```
```go:hello
package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}
```

#6 .コンパイル
```
go install github.com/user/hello
```

#7 .実行してみる
```
$GOPATH/bin/hello
hello, world
```

なんかJAVAの初歩って感じですね。
Railsのリクエスト処理の流れ：　唯の自分用メモ

1. ブラウザからのリクエストは、ルーティングを通じてパスを解析し、コントローラーのアクションを選ぶ

2. コントローラーのアクションがモデルから情報を取得

3. そのモデルはDBのテーブルと対応(モデル⇔テーブルの対話はSQL)

4. で、**アクションはモデルから取得した情報をインスタンス変数に保存**(コントローラーはクラスなのである)

5. 更にアクションはブラウザへのレスポンスとしてビューを選択

6. **ビューにはコントローラ(のアクション)のインスタンス変数を参照**し、その値をHTMLソースの中に埋め込む

**コントローラーで設定したインスタンス変数を、対応するビューのテンプレートで使えるのだ！**
Karabinerでイコールとマイナスを入れ替えてShiftなしでイコール（日本語入力のときは入れ替えない）

Mac && JISキーボードでのお話です。多くのプログラミング言語においてはコーディング時の利用頻度的にイコール（=） ＞ マイナス（-）であるため、少しでも入力ストレスを軽減するためにイコールとマイナスを入れ替えます。

単独で押し時たはイコールが、Shiftと一緒に押すとマイナスが入力されるようにします。

使うもの
---

* [Karabiner](https://pqrs.org/osx/karabiner/)


やること
---

* JIS配列キーボードにおける、イコール（=） と マイナス（-）の入力を入れ替える
* ただし、日本語入力モードでは通常通りShiftなしで伸ばし棒が入力されるようにする


手順
--- 

1. Karabinerでprivate.xmlを追加する - Swap minus(-) and equal(=)
1. Karabinerで設定を有効にする


### Karabinerでprivate.xmlを追加する

Misc&Uninstallタブを開き、Open private.xmlをクリックします。
![Misc_Install.png](https://qiita-image-store.s3.amazonaws.com/0/17793/aa893d4a-a834-bf7f-78f1-0fe066577ac1.png)

private.xmlを以下のように編集します。（Google日本語入力の場合）

```private.xml
<?xml version="1.0"?>
<root>
    <inputsourcedef>
        <name>JAPANESE</name>
        <inputsourceid_prefix>com.google.inputmethod.Japanese.base</inputsourceid_prefix>
    </inputsourcedef>
    <item>
        <name>Swap minus(-) and equal(=)</name>
        <identifier>private.swap_minus_and_equal</identifier>
        <inputsource_not>JAPANESE</inputsource_not>
        <modifier_not>
        ModifierFlag::COMMAND_L,
        ModifierFlag::COMMAND_R,
        ModifierFlag::CONTROL_L,
        ModifierFlag::CONTROL_R,
        ModifierFlag::FN,
        ModifierFlag::OPTION_L,
        ModifierFlag::OPTION_R,
        </modifier_not>
        <autogen>__KeyToKey__ KeyCode::MINUS, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_SHIFT, KeyCode::MINUS</autogen>
        <autogen>__KeyToKey__ KeyCode::MINUS, KeyCode::MINUS, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_SHIFT</autogen>
    </item>
</root>
```

### 設定を有効にする

Change Key タブに戻って、Reload XMLを行い、XMLで追加した設定のチェックボックスを有効にします。
![ChangeKey.png](https://qiita-image-store.s3.amazonaws.com/0/17793/f16df2a6-7017-8207-7607-978cfb64bc73.png)

設定は完了です。これで、英字入力のときはShiftなしでイコールが、
Shiftありでマイナスが入力できるようになります。

軽く解説
---

### inputsourcedef

ここで、入力ソースの名前を定義します。

`<inputsourceid_prefix>com.google.inputmethod.Japanese.base</inputsourceid_prefix>`
この値は、KarabinerのEventViewer->Input Source ID で確認することができます。
先に載せたprivate.xmlはGoogle日本語入力の場合の値です。
それぞれの環境で、日本語入力モードのときに表示されている値を入れてください。

EventViewerを起動。
![LaunchEventViewer.png](https://qiita-image-store.s3.amazonaws.com/0/17793/acdbad30-b559-9002-115d-5654897f3150.png)

EventViewerで日本語入力モードのときの内部情報を確認。
![EventViewer.png](https://qiita-image-store.s3.amazonaws.com/0/17793/38d66e13-94ad-3596-6f96-6259b2dde943.png)



### item -> inputsource_not

`<inputsource_not>JAPANESE</inputsource_not>`
ここで、入力ソースが日本語入力以外の場合、という指定をすることによって、
それより下に書いているキーのマッピングが日本語入力以外の場合にのみ適用されます。


最初は日本語入力と英字入力でイコールの出方が違うため戸惑いますが、
そういうものだと慣れると違和感なくタイプできるようになりました。
快適なコーディングライフを。

参考
---

[private.xml Reference Manual - Karabiner - Software for OS X](https://pqrs.org/osx/karabiner/xml.html.en#inputsourcedef)
[pythonでよく使う括弧とイコールをShiftなしで入力できるようにする - Qiita](http://qiita.com/tukushiari/items/cd4ed3713aa433416bea)
UnityでつくったものをWebで公開する

Unityで作ったものを公開したい、遊んでもらいたい！ということがあると思うのでその手順を書いていきます。

# つくったものをWebGL形式でビルドする
まずは、作ったものをWebGL形式でビルドしましょう。
ビルドする際に、WebGLを選択したあと、出力先のフォルダを指定するだけです。
結構時間がかかります。20分くらいです。

# アップロードする
今回はGoogle Driveにアップロードします。
ビルドしたフォルダをまるごとアップロードし、
そのフォルダで「右クリック→共有→共有可能なリンクを取得」で
こんな感じのリンクが表示されると思います。
https://drive.google.com/folderview?id=”あなたのID”&usp=sharing
このリンクをコピーして、メモ帳とかに一時的に貼っておきます。

次に、以下の”あなたのID”、”フォルダ内htmlファイル名”の部分をコピーしたリンクを参考に書き換えます。.htmlファイルはビルドしたフォルダの中にあります。
https://www.googledrive.com/host/”あなたのID”/”フォルダ内のhtmlファイル名”.html

実際に書き換えたリンクをブラウザで開いてみて、つくったものが動けば成功です。
あとは、このリンクをTwitterやブログに貼るだけです。お疲れ様でした。

# 参考
[WebPlayerでビルドしてからサーバーにアップロードするまで](http://gameyoshiki.blog.fc2.com/blog-entry-38.html)
この記事はWebPlayerでビルドしていますが、今回のようにWebGLでも問題なく公開できます。
Jupyterインストールエラー

# tl;dr
はてぶエントリ見て、Jupyterを触りたくなった。
http://myenigma.hatenablog.com/entry/2016/02/20/183423?utm_source=dlvr.it&utm_medium=twitter

# 環境
MacOSX El Capitan‎
Python2.7

# エラー内容
Jupyterインストールしようとしたらエラー発生。
> pip install jupyter

<pre>
Installing collected packages: setuptools, gnureadline, appnope, ptyprocess, pexpect, ipython, ipykernel, notebook, ipywidgets, jupyter-console, qtconsole, jupyter
  Found existing installation: setuptools 18.4
Cannot remove entries from nonexistent file /anaconda/lib/python2.7/site-packages/easy-install.pth
</pre>

# 対処法
以前入れておいたAnaconda付随のsetuptoolsが古いのが原因とのこと。
https://github.com/ContinuumIO/anaconda-issues/issues/542

> conda update setuptools

再度実行したら、インストールできた様子。
> pip install jupyter

試しに起動。
> ipython notebook

するとデフォルトブラウザで下記URLタブが開かれて、Jupyter触れるようになりました。
http://localhost:8888/tree

停止時はターミナルで、Control-Cキーする。
IoTハンズオン向けサーバ構築手順(IDCFクラウド)

以下に、IoTハンズオン向けサーバの構築手順をメモしておく。

**1. 仮想マシン作成（詳しくは「めちゃ楽ガイド」を参照）**
light.S1
Ubuntu Server 14.04 LTS 64-bit

|サービス|ポート番号|
|:---|---:|
|SSH|22|
|http|80|
|https|443|
|MQTT|1883|
|Node-RED|1880| 

(ファイアウォールおよびポートフォワード）


**2. node.js(4.2.x)をインストール**

```
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install make
sudo apt-get install build-essential
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs
node -v
```

**3. Node-RED(0.13.1)のインストール**

```
sudo npm install -g --unsafe-perm node-red
```

**4. MQTT(1.4.8)関連のインストール**

```
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients
```

**5. MongoDBのインストール**

```
sudo apt-get install libkrb5-dev
sudo apt-get install mongodb
```

**6. Node-REDのノードを追加**
ノードを追加する前に、一度Node-REDを起動する。

```
cd ~/.node-red
sudo npm install node-red-node-mongodb
```
UI > 対話形式をフォントで切り分け > インタビューワ / ゲスト 

AXISという雑誌でフランク・ゲーリーとインタビューワの対話英文があるのだが、文章がどちらの発言かがわかりやすい。

しかし、それぞれの文章で「フランク」「インタビューワ」の文字は一切ない。

何故わかりやすいのか。
それは二者でフォントを明らかに違うようにしているため。

Qiita で再現するとしたら、Boldと普通のフォントである程度見分けがつくだろうか。

**But I heard that you don't like 3D printing.**

I don't like looking at it, but as an engineer, it's perfect. ...

上記の例ではBoldがインタビューワで、普通のフォントがフランク。
Gitで「1履歴分」履歴を前に戻してから、GitHubに送付するやり方　[自分用メモ]

# Gitで「1履歴分」履歴を前に戻してGitHubに送付するやり方
1. git add -A
2. git commit -m "hogehoge"
3. git reset --hard HEAD^
4. git push -u origin master

<p>※ 直前のコミットを取消し<br>git reset --hard HEAD^</p>
<p>git logで確認すると取り消されているのが分かる</p>
ROSでのPCLの扱い

#相互変換
## PointCloud2 -> PointCloud\<PointT\>
```$ sudo apt-get install ros-indigo-pcl-conversions```

```cpp
#include <ros/ros.h>
#include <sensor_msgs/PointCloud2.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl_conversions/pcl_conversions.h>
// 以下の２つは使わないこと。現在は使えない。
// #include <pcl/ros/conversions.h>
// #include <pcl/conversions.h>

void Callback(const sensor_msgs::PointCloud2ConstPtr& input) {
  pcl::PointCloud<pcl::PointXYZ> cloud;
  pcl::fromROSMsg (*input, cloud);
}

int main(int argc, char** argv) {
  ....
  ros::Subscriber sub = nh.subscribe<sensor_msgs::PointCloud2>("velodyne_points", 10, Callback);
}
Gitの設定方法(初回)　[自分用メモ]

# Gitの設定方法(初回)

1. git config --global user.name "your name"
2. git config --global user.email "your email"
3. git config --list (自分の情報が登録されたか確認)
4. git init (ローカルリポジトリを作成。該当のアプリで行う。初回のみ)
Qiita > 要望 > コード左側に行番号を表示

Qiitaでは以下のようにコードを記載できますが、現状ではコードの行は表示されません。

直接会うことが難しい人とチームとして作業するとき、「if (code == kCodeLF) {」については「if (code == kCodeCR) {とした方がいいのでは？」 と記載した時に相手は「どの行のこと？」と探さないといけません。

コードの左側に行がある時は「43行目のif (code == kCodeLF) {」については「if (code == kCodeCR) {とした方がいいのでは？」となり、相手も「このコードのことか」とすぐに分かります。

この理由からコードの左側に行数を表示していただくよう、ご検討をいただきたいと思います。

```c:esp8266_160220_BYOP.ino
/*
 * This program is used for a message station shown at
 * https://hackaday.io/project/9526-bring-your-own-pizero-byop
 */


/*
 * v0.2 2016 Feb 20
 *  - fix Serial_readCommand() to handle CR code
 *  - add Serial_replyToCommand()
 * v0.1 2016 Feb 20
 *  - add Serial_readCommand()
 *  - add serial setup
 */

//-------------------------------------------------------------------------
// static declarations

static const char kCodeCR = '\r';
static const char kCodeLF = '\n';

static String s_serialReceiveBuff = "";
static bool s_serialClearOnNext = false;
//-------------------------------------------------------------------------
void setup() {
  Serial.begin(115200); 
}

String Serial_readCommand()
{
  if (Serial.available() == 0) {
    return "";  
  }

  if (s_serialClearOnNext) {
    s_serialClearOnNext = false;
    s_serialReceiveBuff = "";
  }

  char code;
  while(Serial.available() > 0) {
    code = Serial.read();
    if (code == kCodeCR) {
      continue;
    }
    if (code == kCodeLF) {
      s_serialClearOnNext = true;
      return s_serialReceiveBuff;
    } else {
      s_serialReceiveBuff += code;
    }
  }
}

void Serial_replyToCommand(String cmdline)
{
  if (cmdline.equals("hello")) {
    Serial.println("hello, 7of9");
  } else {
    Serial.println(cmdline);    
  }
}

void loop() {
  String rcvd = Serial_readCommand();
  if (rcvd.length() > 0) {
    Serial_replyToCommand(rcvd);
  }
}
```
glibc


glibcの脆弱性が見つかったというニュースを見たが、glibcってなによってことだったので覚書

glibcはGNU C LibraryでCの共通ライブラリとのこと。Linuxでも標準ライブラリとして取り入れられている。

色々なプログラム、コマンド等に使われれているため、アップデートした際には再起動した方がいいですよね。

参考：http://itpro.nikkeibp.co.jp/article/Keyword/20070308/264222/?rt=nocnt
オブジェクト生成の仕方　Instantiate

UnityでInstantiateメソッドを使ってオブジェクトを生成するやり方を解説します．


生成する対象はあらかじめ取得してあるとします．

```csharp
public GameObject obj;
```

## Prefabから生成する．
### PrefabのTransformのままで生成する場合

```csharp
Instantiate(obj);
```
引数には生成したいオブジェクトが入る．

### 生成する位置，回転を指定して生成する場合

例としてスクリプトをつけたオブジェクトの位置で，Prefabと同様の回転で生成する．

```csharp
Instantiate(obj, this.transform.position, Quaternion.identity);
```

## スクリプト例
```csharp:InstantiateTest.cs
using UnityEngine;
using System.Collections;

public class InstantiateTest : MonoBehaviour {

	//生成するゲームオブジェクト
	public GameObject target;

	void Update(){
		//スペースを押したら
		if (Input.GetKeyDown (KeyCode.Space)) {
			//Instantiate( 生成するオブジェクト,  場所, 回転 );  回転はそのままなら↓
			Instantiate (target, new Vector3 (1.0f, 2.0f, 0.0f), Quaternion.identity);
		}
	}
}
```


> Instantiate(生成するオブジェクト, 生成する位置, 回転)

第一引数は生成するオブジェクトを指定する．
今回はobjを生成するため，objをつっこむ．

第二引数は生成する場所をVector3型で指定する．
今回はthis.transform.position

第三引数は生成するオブジェクトの回転を指定する．
今回はPrefabと同じままの回転にするために
Quaternion.identityをつっこむ．



### 生成したオブジェクトになんらかの処理を行いたい場合
例えば，生成したオブジェクトの名前を変更する処理を行うとする．
弾丸を生成し，その弾丸の名前を"Bullet"にしたい場合，以下のスクリプトでできる．



```csharp
//オブジェクトを変数名bulletで生成
GameObject bullet = Instantiate(obj) as GameObject;
//名前を変更
bullet.name = "Bullet";
```

GetComponentやSendMessageを用いて関数を呼び出したりできる．
GitHubについて　[自分用メモ]

<h1>GitをGithubへ連携させる(１回目、グループ用リポジトリの作成)</h1>
https://teachme.jp/contents/350259<br>

※ GitHubにユーザ登録とSSHキー設定、GitHubとNitrous Proの疎通ができるようにする、を含む

<h1>GitをGithubへ連携させる(１回目、個人用リポジトリの作成)</h1>
https://teachme.jp/contents/350411

<h1>GitHubにPUSHするやり方(2回目以降)</h1>

<p>1. git add -A</p>
<p>2. git commit -m "hogehoge"</p>
<p>3. git push -u origin master<br>※ git push -u origin develop</p>

<h1>Gitのブランチとマスターを使いわける(クローン)</h1>
https://teachme.jp/contents/351514

<h1>GitHubの教科書</h1>
<p>・各用語　P8</p>

<p>・Issue(イシュー)機能　※プロジェクトの課題を記載する　P28、102、160<br>
今後の修整点や改善点などをコメントし合って、ディスカッションもできる。<br>
Pull Requestやコミットと関連付けできるから、いつ何が行われたか流れがわかりやすい。<br>コミットメッセージにIssue番号(ここでは#4や#5)を記述すると、その課題に対する変更点や進行具合を一覧表示することもできる。</p>
<p>・Mile Stone(マイルストーン)機能　※進捗状況を管理　P102<br>期限を設定したり、bug(不具合)、question(質問)など、Label(ラベル)を付けて種類分けしたりして使う。<br>Pull Requestやコミットと関連付けることができるので、課題に対する一覧の流れを終えるようになっている。</p>
<p>・アカウントは2つ　※P54<br>1. Userアカウント(個人)<br>2. Organizationアカウント(チーム)<br>メンバーごとの権限を設定することができる。<br>※UserアカウントをOrganizationアカウントに変更すると、もうUserアカウントに戻すことができない。　P56</p>
<p>・メンバーの管理　※P66～70</p>
<p>・Clone　※P71<br>リポジトリのファイルをローカルにコピーする。</p>
<p>・Gitのファイルの状態は3つ　※P80<br>1. 作業ディレクトリ(変更を加えた作業中のファイル群)<br>2. ステージングエリア(次のcommitに含めるファイル群)<br>3. Gitディレクトリ(変更が確定したファイル群)<br><br>git add -A　※ステージングエリアに登録する<br>git commit -m "hoge"　※ファイルの変更を確定させる。Gitディレクトリに登録。<br>git status　※ファイルがどのエリアに属しているかの状態を見る。</p>
<p>・マージ　※P18、82<br>それぞれのブランチを合体させる。<br><br>例) featureブランチ<br>アイコン作成<br>スマホ対応　⇒ 　developブランチにマージ<br>広告用バナー</p>
<p>・README　※P84<br>プロジェクトの概要を説明する</p>
<p>・Raw、Blame、History　※P92~<br>1. Raw<br>行番号やシンタックスハイライトをなくした生のデータそのものが表示される。<br><br>2. Blame<br>行ごとに誰がいつコミットしたか表示され、なぜその表示をしたのかを本人に問い合わせたい場合などに役立つ。<br><br>3. History<br>ファイルのコミット履歴が表示され、変更点を時系列で見ることができる。</p>
<p>・Pull　※P93~<br>PullしてGitHubから最新の状態を取得する</p>
<p>・コンフリクト　※P94~</p>
<p>・特定ファイルをバージョン管理しないようにする(.gitignore)　※P97~</p>
<p>・diff(変更点)　※P18、100</p>
<p>・GitHubのファイルサイズ制限について　※P112<br>制限に引っかかった場合　※P114<br>特定のコミットまで状態を戻す<br>動画や音声ファイルなどはGitHubを使わずに別の方法で管理する。Dropboxの共有フォルダなど。</p>

<p>・Pull Request　※P120~(※P126~127、実際の作業)、P138<br>
送るまでの手順が2通りある。<br>
1. 共有のリモートリポジトリを自分のリモートリポジトリとしてforkしてからのPull Request<br>
2. 共有のリモートリポジトリでブランチを作成してからのPull Request<br>
※ 1は難しいので、2がオススメ。 
</p>
<p>・Git Flow　※P130~133、分かりやすい</p>
<p>・Pull Requestのmasterブランチへのマージ　※P149</p>
<p>・Pull Requestを送るときに起こりがちなトラブルの対応　※P151</p>
<p>・コンフリクトについて　※ P152</p>
<p>・masterブランチがだいぶ進んでしまって、Pull Requestで送ったコードがマージできなくなった。　※ P156~</p>
<p>・GitHub Markdown ※P175~</p>
<p>・wiki　※P188~</p>
<p>・wikiとIssueとREADMEの使い分け　※P189<br>
wiki<br>
リポジトリで作っているものの詳細な使い方や注意点に関してのドキュメント<br>
Issue<br>
リポジトリで作っているもののバグや機能追加の要望のメモ<br>
README<br>
リポジトリで作っているものの、アピールや説明、簡単な使い方など。
</p>
<p>・GitHub Pages　※P194~<br>Webサイトを作成する機能</p>
<p>・絵文字　※P196~</p>
<p>・略語　※P198~</p>
<p>・画像　※P200~</p>
<p>・Gist　※P203<br>コードの断片を共有するサービス</p>
<p>・クエリパラメータ「?w = 1」　※P208</p>
<p>・GitHubの裏技　※P210</p>
<p>・日時を絶対値で表示する　※P211</p>
message station > v0.6..v0.12 > Pizero_owner_t 追加 / ファイル構造変更 / message_t追加 / hello, byeの結果LCD表示

https://hackaday.io/project/9526-bring-your-own-pizero-byop
でBYOPの核となるMessage stationの実装

http://qiita.com/7of9/items/796c863acec79e6a30c9
の続き

[v0.12 @ github](https://github.com/yasokada/esp8266_160220_BYOP/releases)

ファイルは以下となった

- dataStructure.h : 構造体の定義
- esp8266_160217_AQM0802.ino : 8x2 LCD表示ライブラリ
- eps8266_160220_BYOP.ino : メイン
- eps8266_160220_StringLib.ino : 文字列(主にcsvテキスト)を扱う
- esp8266_160220_UARTlib.ino : UART通信を扱う
- esp8266_160220_dataLib.ino : データ関連 (中途半端)


現状は以下のコマンドが動く。

| 入力 | シリアル応答 | LCD |
|:-:|:-:|:-:|
| hello,0001,7of9<LF>  | hello,7of9<LF> | hello,7of9<LF> |
| check<LF>  | 未実装 | 未実装 |
| get<LF>  | 未実装 | 未実装 |
| post<LF>  | 未実装 | 未実装 |
| bye<LF> | bye,7of9<LF> | bye,7of9<LF> |

25日の締め切りまでの可処分時間はだいたい4時間程度 + α(不明)。
現在のPiZero側のコード: 0行

以下を実装できるかどうかというところ。

- ESP8266 > メッセージのstore/load機能の実装
- PiZero > シリアル通信


BURNOUT SYNDROMES のPVを見ながら「この高速カメラのフレームレートを割り出すヒントは何か」と考えたり、「PVは誰が作ったのだろうか」など調べている場合ではなかった。面白いのでいいが。
PV 誰が作っただろうか。
Go言語の構造体


```go
type user struct {
  name string
  age int
}

func (u user) show(){
  fmt.Printf("name:%s, age:%d\n", u.name, u.age)
}

//値渡し
func (u user) add_age(){
  u.age++
  fmt.Println(u) //{hanako 41}
}

//参照渡し
func (u *user) add_age_real(){
  u.age++
}

func main(){
  u := new(user)
  u.name = "yamada"
  u.age = 20
  fmt.Println(u)

  u2 := user{name: "taro", age: 30}
  fmt.Println(u2)


  u3 := user{name: "hanako", age: 40}
  fmt.Println(u3)
  u3.show()//name:hanako, age:40
  u3.add_age() //{hanako 41}
  u3.show() //name:hanako, age:40
  u3.add_age_real()
  u3.show() //name:hanako, age:41
}
```
ターミナル上の$より以前部分(プロンプト)を変更する

# やりたいこと

多分プロンプトであってるよね？
mac OS Xのターミナル(bashかな？)の$以前の部分を変更したい．

```lang:tarminal
hostname:~ username$
```

となっているのを，

```lang:tarminal
times ~ $
```

と変更してみる．

# やってみる

macの環境変数PS1を書き換えることで変更することができる．
以下をターミナルで実行する．

```lang:tarminal
$ PS1="\[\033[36m\]\t\[\033[0m\]\[\033[37m\] \W\[\033[0m\] $"
```

これで，変更ができた！
と思ったら，ターミナル再起動すると元に戻ってる…

# 環境変数を保存したい

まず，HOMEに.bash_profileがあるか確認する．

```lang:tarminal
$ ls -a
```

なければ作る．
あればそれを書き換える．
エディターでbash_profileを開き，以下を書き込む

```lang:.bash_profile
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
```

次に同じようにHOMEに.bashrcがあるか確認し，なければ作る．
.bashrcに以下を書き込む

```lang:.bashrc
PS1="\[\033[0m\]\t\[\033[0m\]\[\033[0m\] \W\[\033[0m\] $"
```

これでターミナルを何回終了しても，開き直しても変更されたままになってる．

プロンプト変更についての詳しいことは[プロンプトの確認や設定](http://pocketstudio.jp/linux/?%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8%A4%CE%B3%CE%C7%A7%A4%E4%C0%DF%C4%EA)を参照
AQM0802 library > v0.4 > auto wrap for AQM0802_PutMessage()

http://qiita.com/7of9/items/974adffab7a7e67dccba
の続き。

> メッセージのWrap機能はまだつけてない。
(未検証だが、そのままWrapされるかもしれない。アドレスの計算を考えて)

ダメだった。

2行目のアドレスオフセットが0x40だったので、自動wrapはされない。

[v0.4 @ github](https://github.com/yasokada/esp8266_160220_BYOP/blob/master/esp8266_160217_AQM0802.ino)
において対応した。


以下のように実行すると

```
  AQM0802_PutMessage("...........ready", /* x_st1=*/1, /* y_st1=*/1);
```

自動ラップされこうなる。

![DSC_0118.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/6b1cb220-a0a3-fc38-8290-a8d30a1033c4.jpeg)
curlコマンドで天気予報を出力


ターミナルで以下を実行

```
curl wttr.in/Tokyo
```

色付きで割りとちゃんとしたのが返ってくる。
Tsukubaなどの都市レベルで指定可能(もちろん海外も)

> ちなみに curl wttr.in/Saga をやると佐賀ではなくアフガニスタンの都市の天気が返ってくる。
Go言語のポインタ


```go
  a := 5
  var pa *int
  pa = &a //aのアドレス
  fmt.Println(pa)
  fmt.Println(*pa) //*paはpaの領域にあるデータの値
```

```
0x10410020
5
```

ポインタを使った関数

```go
func main() {
	b := 5
	var pb *int
	pb = &b
	increment(pb)
	fmt.Println(b)
}

func increment(pvalue *int) {
	*pvalue++ //dereferencing
}
```

```
6
```

こっちでも同じ結果

```go
func main() {
	b := 5
	increment(&b)
	fmt.Println(b)
}

func increment(pvalue *int) {
	*pvalue++ //dereferencing
}
```

```
6
```

ちなみにこうした場合はどうなるか？
出力される結果は5。

```go
func main() {
	b := 5
	increment(b)
	fmt.Println(b)
}

func increment(pvalue int) {
	pvalue++ //dereferencing
}
```

```
5
```
Go言語のfor,range


####for

```go
  for i := 0; i < 10; i++ {
    if i == 3 { continue }
    if i == 8 { break }
    fmt.Println(i)
  }

  x := 0
  for x < 10 {
    fmt.Println(x)
    x++
  }

  y := 0
  for {
    fmt.Println(y)
    y ++
    if y == 100 { break }
  }
```

####range

```go
  s := []int {7, 8, 9}
  for index, v := range s {
    fmt.Println(index, v)
  }

  for _, v := range s {
    fmt.Println(v)
  }

  m := map[string]int{"japan":100, "ame": 300}
  for key, val := range m {
    fmt.Println(key, val)
  }
```
Android Mの「App Standby」について

# Android Mの「App Standby」について

[Doze mode][1]関連の話です。
Doze modeはシステム全体の省電力モードですが、App Standbyはアプリ単体の省電力モードです。
App Standbyについて調べた事を書いていきます。

## App Standbyとは？

Android M から追加された機能でアプリ単体の省電力モードの事です。
デバイスを操作していない状態であれば「アプリはアイドル状態である」と判断できます。
以下の状態ではない限り、アプリは一定期間後にアイドル状態になります。

+ ユーザーによってアプリが明示的に起動される
+ アプリがフォアグラウンドプロセスである
+ アプリがロック画面または通知トレイにNotificationを生成する
+ ユーザーが明示的に設定画面からアプリを「省電力の最適化」状態から除外する

実際に動作を試すために公式のサイトを見ると以下の様な仕様が書かれていました。

```
You can test Doze mode by following these steps:
1. Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. 
2. Connect the device to your development machine and install your app.
3. Run your app and leave it active.
4. Force the app into App Standby mode by running the following commands:
	> $ adb shell dumpsys battery unplug
	> $ adb shell am set-inactive <packageName> true

5.Simulate waking your app using the following commands:
	> $ adb shell am set-inactive <packageName> false
	> $ adb shell am get-inactive <packageName>

6.Observe the behavior of your app after waking it. Make sure the app recovers gracefully from standby mode. In particular, you should check if your app's Notifications and background jobs continue to function as expected. 
```

要約するとこんな感じ。

```
1. Android 6.0（APIレベル23）またはより高いシステムイメージでハードウェア装置または仮想装置を構成してください。
2. Android端末をあなたの開発機械に接続してあなたのアプリをAndroidにインストールしてください。 
3. あなたのアプリを走らせて、それを動作させたままにしてください。 
4. システムに以下の命令を走らせることによってアプリを Standbyモードにします
	` $ adb shell dumpsys battery unplug`
	` $ adb shell am set-inactive <packageName> true`
5. アプリの動作中に以下のコマンドを打ってシミュレートしてください
	` $ adb shell am set-inactive <packageName> false`
	` $ adb shell am get-inactive <packageName>`
6. それを起こした後にあなたのアプリの動作を観察してください。アプリが問題なく待機モードから復帰することを確認してください。 特にアプリの通知とバックグラウンドジョブが予想通りに機能し続けるかどうか調べなければなりません。 
```

### packageName の見つけ方

この試験を行う為には、試験対象のアプリのパッケージ名を見つける必要があります。
Android端末に存在するパッケージ名については以下のコマンドを使って探すことが出来ます。

```
$ adb shell pm list packages

package:com.google.android.youtube
package:com.android.providers.telephony
package:com.android.sdm.plugins.connmo
package:com.google.android.googlequicksearchbox
package:com.android.providers.calendar
package:com.android.providers.media
package:com.google.android.apps.docs.editors.docs
package:com.google.android.onetimeinitializer
package:com.android.wallpapercropper
package:com.quicinc.cne.CNEService

```
Android端末に存在するパッケージ名が一覧になって表示されるので必要なパッケージ名を選択しましょう(「package:」を除いた名前が packageName になります )

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

実際のシミュレートは・・・ごめんなさい。忘れました。
redux-logger を TypeScript から使う

# redux-logger とは

* [fcomb/redux-logger: Logger middleware for redux](https://github.com/fcomb/redux-logger)
* デフォ設定のままでも action の log とかだせる、入れておいて損はない。

## npm と 型定義ファイル を install

```
npm install --save redux-logger
typings install --save redux-logger --ambient
```

## applyMiddleware する

store 作ってるところで applyMiddleware する。

```
import { Store, createStore, applyMiddleware } from 'redux';
import createLogger = require('redux-logger');
import { rootReducer } from './reducers/rootReducer';

const initialState = {};

const loggerMiddleware = (createLogger as any)();
const createStoreWithMiddleware = applyMiddleware(loggerMiddleware)(createStore);
const store:Store = createStoreWithMiddleware(rootReducer, initialState);
```

### createLogger について

`createLogger();` してもコンパイルエラーになった。 ES2015 だけかも？
`const loggerMiddleware = (createLogger as any)();` やるとうまくいく。

* 参考: [How to use with TypeScript? · Issue #89 · fcomb/redux-logger](https://github.com/fcomb/redux-logger/issues/89)
postの表示の順番

これをつけることによって
投稿順が新しい物が上に来るようになる

```lang:post.rb

 default_scope -> { order(created_at: :desc) }

```

別のやり方もある。

`Post.all.order(created_at: :dsc)`降順


`Post.all.order(created_at: :asc)`昇順

orderメソッドは、取得したデータを並び替えるメソッドで、
orderの引数にはハッシュを渡し、「order(並び替える基準とするカラム名: :並べ方)」のように指定する。並べ方には「desc（降順）」と「asc（昇順）」がある
Android M で追加された「Doze mode」について

# Android Marshmallow で追加された「Doze mode」について

Androidアプリのテストケースにて「Doze mode」時の動作を調べて欲しいと言われたので「Doze mode」について調べた事をまとめました。

## 「Doze mode」とは？

Android M から追加された機能で「システム全体の省電力モード」の事です。
一定期間のスクリーンオフが続くとシステムはDoze（居眠り）モードに入りバッテリー喰いを抑えてくれます。

### Dozeモードは以下のような制限があります

+ 優先度の高いGCM（Google Cloud Messaging）を受信しない限り、ネットワークアクセスは無効
+ WakeLockは無視される
+ setAlarmClock()とAlarmManager.setAndAllowWhileIdle()以外のAlarmManagerによるアラームスケジュールは無効
+ Wi-Fiスキャンは実行されない
+ 同期アダプターとJobSchedulerによる同期とジョブの実行は許可されない


### 「Doze」のテストについて公式のサイトでこう書かれていました

```
You can test Doze mode by following these steps:
1.Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. 
2.Connect the device to your development machine and install your app. 
3.Run your app and leave it active. 
4.Shut off the device screen. (The app remains active.) 
5.Force the system to cycle through Doze modes by running the following
	commands:
	$ adb shell dumpsys battery unplug
	$ adb shell dumpsys deviceidle step
```

要約すると以下の通り

```
1. Android 6.0（APIレベル23）以上のAndroid端末または仮想装置で使えます
2. デバイスに接続してアプリをインストールしてください
3. アプリを起動して動作させたままにしてください 
4. デバイスの画面をスリープ状態にしてください(アプリは動作中のままです)
5. システムに以下のコマンドを打つことでDozeモードになります
	$ adb shell dumpsys battery unplug
	$ adb shell dumpsys deviceidle step
	システムのステータスがIDLEに変わるまで deviceidle step を繰り返してください
6. スリープ画面から復活させた後のアプリが問題なく復帰する事を確認してください
```


## 実際に内部電源状態をシミュレートする

USBとAndroid端末を接続した直後のステータスを見てみます。

```
$ adb shell dumpsys battery
Current Battery Service state:
	AC powered: false
	USB powered: true
	Wireless powered: false
	....
```

USBに繋がっているので USB powered が true になっている事が分かります。

adb shell dumpsys battery unplug コマンドを実行してみます。

```
$ adb shell dumpsys battery unplug
```

内部電源状態を見てみると・・・・・。

```
$ adb shell dumpsys battery
Current Battery Service state:
	AC powered: false
	USB powered: false
	Wireless powered: false
	....
```

USB powered が false になりました。これでエミュレートできるようになりました。

ステータス状態を確認します。

```
$ adb shell dumpsys deviceidle step
	Stepped to: ACTIVE
```

何度打ち込んでもACTIVEのまま変わりません...。
ステータスが ACTIVE からまったく変わらずに困っていたら良記事を見つけました。

[Google 様の言う Doze のテスト方法がよく分からない件][1]

どうやら battery unplug を行った後にデバイスのIdleを有効化する必要があるみたいです。
 
```:画面をスリープさせた上で状態をIdleに移行
$ adb shell dumpsys deviceidle enable
```

もしくは

```:画面をスリープさせずに強制的にIdleに移行
$ adb shell dumpsys deviceidle force-idle
```

おかげで状態をIDLEに遷移する事が出来ました。

```
$ adb shell dumpsys deviceidle step
  Stepped to: IDLE

$ adb shell dumpsys deviceidle step
  Stepped to: IDLE_MAINTENANCE
```

やっぱり IDLE と IDLE_MAINTENANCE の違いはよく分かりませんが

この状態こそが「Doze mode」です。
この状態でアプリが仕様どおりの動きをする事を確認しましょう。

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

## 元に戻す

```:unplug,idle状態から元に戻す
$ adb shell dumpsys deviceidle disable
$ adb shell dumpsys battery reset
```

バッテリーのステートがIDLE → ACTIVEになり元に戻った事を確認しました。



<!-- Qiita Google 様の言う Doze のテスト方法がよく分からない件 -->
[1]: http://qiita.com/usagimaru/items/7c549336a9aee447dd97
GoogleCloudVisionをPythonで試すための最初の手順


[関西おうちハック トライ 2016 vol.1](https://kansaiouchihack.doorkeeper.jp/events/38473)でGoogleCloudVisionを触ってみたのでその覚書き。

環境はMacから、ターミナルで。

基本的にはGoogleのGettingStartをおってます。
https://cloud.google.com/vision/docs/getting-started


まずはGCPからCloudVisionを有効化
![スクリーンショット 2016-02-20 19.46.29.png](https://qiita-image-store.s3.amazonaws.com/0/35271/f9ee2245-9302-834a-e356-a1a79377021d.png "スクリーンショット 2016-02-20 19.46.29.png")

認証情報 > Create credentials > サービスアカウントキー > JSON > 作成
の手順で進む。ここでダウンロードされるJSONファイルを保存しておく。
![スクリーンショット 2016-02-20 20.31.16.png](https://qiita-image-store.s3.amazonaws.com/0/35271/bcb2c5c0-4d57-1818-e5b4-6556d3ed1a76.png "スクリーンショット 2016-02-20 20.31.16.png")

## Pythonでgoogleapiclientを使ってFace Detection APIを実行する
まずはターミナルから環境変数を定義。
`export GOOGLE_APPLICATION_CREDENTIALS='/xxx/xxx/{先ほどのJSONファイル}.json'`

次にgithubからソースをcloneします。
https://github.com/GoogleCloudPlatform/cloud-vision

cloneしたディレクトリからpython > face_detection内に移動、
その中のfaces.pyを実行します。引数に解析にかけたい画像ファイルを指定します。

`python faces.py face-input.jpg`

同階層にout.jpgが出力されればOKです。

## 顔認識関係にはFaceAnnotation
取得できる情報はここを参照→https://cloud.google.com/vision/reference/rest/v1/images/annotate#FaceAnnotation

表情だけでなく、口の位置や顔の座標をxyz軸で取得出来るのと複数の顔に対応しているようでしかもAPIたたくだけなのでもっといろいろ試したくなります。
月1000ユニットまで無料。顔認識だけなら1000回実行出来ます。
[JavaScript] 整数に丸めるおすすめのやり方(切り捨て)

# 一番気に入ってるもの

`3/2|0 //1`
`|0`で切り捨てられます。
ビット演算子は計算の優先度が低いので、最後につけておけばだいたい計算の最後で切り捨てられます。
ただし、数値がマイナスの場合は、`Math.floor()` より1多い数値になるので気をつけましょう
`parseInt()`だと同じ結果になります

# こういうのもあるよ

`~~(3/2)`
ビット反転して戻してます。最初に書くので見た目分かりやすいですが、()で囲まないといけないので面倒。

`Math.floor(3/2)`
間違えなく確実に正確に切り捨てたい時に使います。
とくにマイナスの数値が絡むとき

`parseInt(3/2)`
名前のとおりですが、自分は使いません。

# runstant で確認
[runstant](http://goo.gl/c9WzAD)
Go言語のif、switch


####if

```go
func main(){
  val := 6

  if val > 10 {
    fmt.Println("good")
  } else if val > 5 {
    fmt.Println("good2")
  } else {
    fmt.Println("good3")
  }

  //val2はifの中だけで使える変数
  if val2 := 20; val2 > 10 {
    fmt.Println("good good")
  } else if val2 > 5 {
    fmt.Println("good good2")
  } else {
    fmt.Println("good good3")
  }
}
```

####switch

```go
signal := "green"
switch signal {
  case "red":
    fmt.Println("stop")
  case "yellow":
    fmt.Println("care ful")
  case "green", "blue":
    fmt.Println("go")
  default:
    fmt.Println("default")
  }

  score := 100
switch {
  case score > 80:
    fmt.Println("Great")
  default:
    fmt.Println("bad")
}
```
fallthroughを使うとこんな風になる

```go
signal := "red"
switch signal {
  case "red":
	fmt.Println("stop")
	fallthrough
  case "yellow":
	fmt.Println("careful")
  case "green", "blue":
	fmt.Println("go")
  default:
	fmt.Println("default")
}
```

出力結果はこうなる。fallthroughのあとはcaseの条件を見ないみたい。

```
stop
careful
```
cross-originで画像が読み込めない時



chromeでThree.jsを書いていると、こんなエラーが出た。。
異なるドメインに存在するリソースは利用できないということ。

```Bash:error
DOMException: Failed to execute 'texImage2D' on 'WebGLRenderingContext': The cross-origin image at file:///Users/...
```
そんな時は、phpでサーバーを立てる。

```Bash:bash
php -S localhost:9000(任意の数字)
```

localhost:9000にアクセスすると表示される。
もしくはfirefoxならデフォルトで表示される。

ウェブブラウザの設定変更という方法もある。
http://qiita.com/growsic/items/a919a7e2a665557d9cf4
なぜmt_rand()の誤った実装をサクッと修正できないのか

@scaled_wurm さんの[PHP の mt_rand() は一貫して壊れている(consistently broken)らしい](http://sucrose.hatenablog.com/entry/2016/02/19/235506)に便乗してみる。

擬似乱数の特性は「周期性があること」です。周期性とはつまり再現性で、ほとんどの擬似乱数は長い周期性をもち次に出力される数を予測することが困難である一方、初期状態を固定する事で決まったパターンで値を返します。これは完全な乱数にはないもので、用途によっては完全な乱数より擬似乱数を使う方が好ましいこともあります。

例えば単体テストで乱数を扱う場合のことを考えてみましょう。

```php
class RandomTest extends TestCase
{
    public function testInitialValue()
    {
        mt_srand(0);
        $this->assertEquals(963932192, mt_rand());
    }
}
```

`mt_rand()`が「正しい」実装に修正されたなら上記テストは壊れてしまいます。これは極端な例ですが、PHPをアップグレードした瞬間、世の中にごまんとある（かもしれない）`mt_rand()`の周期性に依存したコードが想定外の動作をするとなると、どんな影響があるか想像もつきません。

修正がRevertされたコミットに最初に付いたコメントは名言ですね。「一貫して壊れている」と訳されましたが、僕が訳すなら「壊れ方に一貫性がある」とする方が意図が通じやすいかなと。
> "Sure it's broken, but at least it's consistently broken!"
https://github.com/php/php-src/commit/a0724d30817600540946b41e40f4cfc2a0c30f80#commitcomment-16174204

`mt_rand()`は既に広く使われている関数で、修正するにしても別関数なりiniディレクティブなりで「壊れた」`mt_rand()`が使えないと困るケースは確実にあります。
あとセキュリティが求められる用途に`mt_rand()`を使っているコードがあるとしたら、アルゴリズム選定の時点で間違っているのでまた別問題です。

メルセンヌツイスタが正しく実装されていなかったことはとても残念ですし、バグを発見・レポートされた @kusano_k さんは素晴らしいと思います。でも影響範囲を考えると誤っているからといっておいそれと直せない性質のものであることも、みなさんには理解していただきたいです。

なお、[大垣さんによる検証](http://blog.ohgaki.net/php-mt_rand-is-broken)によると通常の擬似乱数が求められる用途では修正前でも大きな問題はないんじゃないかとのことです。
【しずおかアプリ部】活動ログ　第16回

![しずおかアプリ部2.jpg](https://qiita-image-store.s3.amazonaws.com/0/88105/eb885400-510d-2769-03a1-4c151b5d7b2f.jpeg)
■開催日
２０１６年２月２０日（土）　１６：００～１８：００


■参加者
７名


■活動内容（概要）
・部員さんプレゼン「しずいくマップ」
　静岡アプリコンテスト最終選考にノミネートした「しずいくマップ」の紹介をして頂きました。

・部員さんプレゼン「Arduino入門　第5回 I2C通信編」

・菅原プレゼン「Unityはじめるよ　～描画のクオリティを上げるコツ編～」

・保坂プレゼン「Cocos2d-xで作る物理演算ゲーム ～やり直し処理を入れてみる編～」

・小学生部員がScratchで作ったゲームの紹介

・モノリズムUE4導入その後


■活動内容（詳細）
・部員さんプレゼン「しずいくマップ」
　2/26に発表会が行われるため、その練習としてプレゼンを行って頂きました。
　「しずいくマップ」は、育児に関係する施設を地図上から簡単に探せるWebアプリ。
　パソコン、スマホから利用でき、わかりやすく、且つ、簡単に使えるのが特徴。
　プレゼンを良くするための案がいくつか上がったので、
　それを基に本番頑張ってください！



・部員さんプレゼン「Arduino入門　第5回 I2C通信編」
　センサをはじめ様々なデバイスと通信するために策定された通信規格であるI2Cを使い、
　Arduinoからセンサを利用する手順をプレゼンして頂きました。
　・I2Cに対応した各種センサの紹介。
　・Arduinoとセンサの接続方法の紹介。
　・通信のフォーマット、データの書き込み、データの読み込みの説明。
　・実際の通信プログラムの紹介
　などなど。
　Arduinoからセンサを利用する方法がわかりやすく、
　今までの資料と合わせて読み返せば、センサを使って色々作れそうです！

　資料：[第16回_プレゼン資料(IC2通信編).pdf)第16回_プレゼン資料(IC2通信編).pdf](http://monolizm.com/sab/pdf/第16回_プレゼン資料(IC2通信編).pdf)
 [プレゼン音声](http://monolizm.com/sab/voice/16_member.mp3)


・菅原プレゼン「Unityはじめるよ　～描画のクオリティを上げるコツ編～」
　前回思い通りに制御できなかったライトプローブに再チャレンジしてみた。
　ベイク用にライトの設定をいじってあげると、目指すものに近い表示を行うことができた。
　ライトプローブは光源ではなく、その地点の光の状態を記憶しておくもの。
　明暗差のある場所や、光源が複数あるキャラクターの通り道にライトプローブを配置しておく。
　スマホアプリならガンガン使って、描画クオリティを上げよう。

　資料：[第16回_プレゼン資料(Unityはじめるよ～描画のクオリティを上げるコツ編～).pdf](http://monolizm.com/sab/pdf/第16回_プレゼン資料(Unityはじめるよ～描画のクオリティを上げるコツ編～) .pdf)
 [プレゼン音声](http://monolizm.com/sab/voice/16_sugawara.mp3)



・保坂プレゼン「Cocos2d-xで作る物理演算ゲーム ～やり直し処理を入れてみる編～」
　物理演算によって動かしたチキンの停止判定を行い、ゲームのやり直しを行えるようにする。
　チキンが動いているかどうかは、Physics::getVelosityを使って取得。
　velosityが一定値以下になったら、動きを止め、止まった判定とする。
　物理エンジンのデフォルト設定だと、回転力の減衰が行われないので、Physics::setAngularDmpingで設定を行う。

　資料：[第16回_プレゼン資料(Cocos2d-xで作る物理演算ゲーム～やり直し処理を入れてみる編～).pdf](http://monolizm.com/sab/pdf/第16回_プレゼン資料(Cocos2d-xで作る物理演算ゲーム～やり直し処理を入れてみる編～).pdf)
 [プレゼン音声](http://monolizm.com/sab/voice/16_hosaka.mp3)
【iOS】テストフライト申請まとめ2016

## 前提
### テストフライトとは
アプリのAPPStore公開前にユーザーに使用感をテストできる仕組みです

### テストフライトの種類は２種類
・内部テスト　と
・外部テスト（以下、βテスト）
がありますが、

βテストの方が参加メンバーも多く、事前にAppleに審査してもらえるので
こちらの説明をします

## βテスト仕様
**βテスト登録可能人数**
2,000人（2015年から+1,000人追加になりました）

**βテスト期間**
60日間。
ただ、期限はバージョン単位で管理されているため、アップデートを利用すると60日以上テスト期間を延ばすことも可能。

**テストできる内容**

* アプリの操作すべて
* 課金（制限あり。実際には課金されないので、直前の動作まで）

**テスト期間中のアプリアップデートが可能**
これができるので、テスト期間中に受けたFBをもとにアプリのブラッシュアップして
再度テストしてもらうことでリリース前にアプリの改善ができる
(アップデートはテスターに自動で通知が行くためスムーズ)

**複数バージョンを並列で申請**
できない。アップデート時、上書きされる

**複数バージョンごとに配布可能数(テスター)は管理されているか**
バージョン単位ではなく、アプリ単位で管理されている(最大テスター数は2,000人)

**複数バージョンをテスターのiPhoneに別々なアプリとしてインストールできるか（上書きされないか？）**
できない。アップデート時、上書きされる

**前のバージョンでローカルに保存したデータはアップデート時、保存されたままか**
▼検証結果

| 保存したもの | アップデート後 |
|:-----------|:------------|
| /Documentsディレクトリに保存した画像    | 保存されたまま |
| NSUserDefaultsに保存したString    | 保存されたまま |

## βテスト申請の流れ

※Xcodeからアプリをビルド〜iTunes ConnectでマイAPPを登録　まで作業は終わっている前提

### iTunes Connectの操作手順
1. マイAPPでテストしたいアプリを選択 > アクティビティ　からiOSビルドを選択
2. TestFlightベータ版情報を書く
3. 暗号化輸出規制のチェックをして申請
4. 申請待ちステータスになる
5. テスターを追加
6. ベータ版アプリ配布

## 【解説】2. TestFlightベータ版情報を書く

必須項目は下記です。

* テスト対象
* Appの説明
* フィードバックメールアドレス
* マーケティングURL
* ベータ版Appレビュー情報内連絡先情報


![001.png](https://qiita-image-store.s3.amazonaws.com/0/30423/790507b2-817a-ed1c-68ee-f9d0c126aead.png "001.png")
申請時Appleに確認される他、テストフライト時のアプリ情報としてもユーザーに見られるため
適切な内容を書きましょう。


> iTunes Connect TestFlight申請画面

## 【解説】5. テスターを追加
外部テスター(n)の右横にある＋ボタンから追加できます。

**CSVデータをインポートしてユーザーを追加することも可能です**
(事前にCSVから読み込むボタンからCSVテンプレートをDLすること)

![betaTest.png](https://qiita-image-store.s3.amazonaws.com/0/30423/08d3112b-f21a-4145-bddb-b83985581c0d.png "betaTest.png")
> βテスト管理画面。テスターのダウンロード状況も把握できる

![002.png](https://qiita-image-store.s3.amazonaws.com/0/30423/e92f094d-2e5a-e395-6ff5-741f780f5591.png "002.png")

> CSVからテスターを追加することも可能


## 【解説】6. ベータ版アプリの配布
いよいよベータ版のアプリを登録したテスターに配布します。

### 配布手順
配布手順は以下です。

1. テスターに事前にTestFlight.appをダウンロードしてもらう
2. TestFlight管理画面のテスト開始ボタンを押す
3. テスターにメールが届く
4. メールを参考にテスターがテスト用アプリをインストール
5. 無事インストール完了した場合、管理画面のテスターのステータスが"インストール済み"になる


テスト開始ボタンを押すと、ユーザーに下記のようなメールが届く
メールの[Start Testing]ボタンを押すと、TestFlight.appが起動し、ベータ版アプリがテスターの端末にインストールされます。

![003.png](https://qiita-image-store.s3.amazonaws.com/0/30423/f1b4667a-2d42-b70e-edc8-d849b80d0e65.png "003.png")


> こんな感じでメールがテスターに届きます

### 注意事項
TestFlight.appをインストールしていない状態で、メールの[Start Testing]ボタンを押すと、
英語表記のテストフライトインストール案内に遷移してしまうので、先にテストフライトアプリをインストールしてもらうこと

MMSアプリでテストフライトメールにアクセスすると、インストールできない


## β版アプリのアップデート

### アップデート手順
1. バージョンを変えて修正したアプリをビルド
2. TestFlight画面で、[テスト対象ビルドを追加]ボタンを押し、テスト対象を選択し[追加]を押す (下図)
3. テスト対象の項目を更新する
4. Appleの審査が始まるので、審査を待つ
5. 審査が通ったら、TestFlight画面でバージョンを選択し、[保存]を押すと、登録済みのテスターにアップデートメールが届きます
6. メールを参考にアプリをアップデートしてもらえるとアップデート完了

![004.png](https://qiita-image-store.s3.amazonaws.com/0/30423/0c54fc8b-6c28-63ac-ed9c-c2651f587a58.png "004.png")

> ２．TestFlight画面で、[テスト対象ビルドを追加]ボタンを押し、テスト対象を選択し[追加]を押す

以上です。すごい簡単で審査も早いので、便利ですね。

## 参考サイト
[iTunesConnect 内TestFlightでデザイン・動作確認](http://examination-03.hatenablog.com/entry/2014/08/11/234914)
0.5から始めるAWS CLI入門 - ①AWS CLIのインストールと基本設定

AWS CLI勉強中の内容をまとめていきます。
* * *
#インストール
**[AWS CLIのインストールマニュアル(英語)](http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/installing.html)**

環境:Mac OS X El Capitan‎
事前準備としてHomebrew, pip, pythonのインストール
##Homebrewのインストール
[Homebrew](http://brew.sh/)のTopページに記載されているコマンドを実行

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

Xcodeがインストールされてなければインストール
![xcod.png](https://qiita-image-store.s3.amazonaws.com/0/113901/76ba043d-388e-14a2-c7ba-82b52b6eabf5.png)
##pythonインストール
brewの所有者をrootに変更しなければいけません
参考:[[Mac] はじめてのbrew](http://eskapi.bitbucket.org/2013/11/20/first_brew.html)

```:
$ ls -la /usr/local/bin/brew
$ sudo chown root /usr/local/bin/brew
$ sudo brew install python
```

##pipインストール

```:
$ sudo easy_install pip
```

##AWS CLIインストール

```:
$ sudo pip install awscli
```

##IAMからユーザのアクセスキーを生成する
既存のユーザからもアクセスキーは生成できますが、今回は新規ユーザを作成します。

新規でユーザを作成するとアクセスキーが自動で生成されますので、これをメモ。
![yuza.png](https://qiita-image-store.s3.amazonaws.com/0/113901/0407572c-37ad-7084-ecb7-22c30c256631.png)

###ポリシーのアタッチ
先ほど作成したユーザにポリシーをアタッチする。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/113901/114ee0b8-77b2-bb90-e651-f367a76eae65.png)

今回はAmazonEC2FullAccessをアタッチする。
![無題1.png](https://qiita-image-store.s3.amazonaws.com/0/113901/7939a425-1961-b722-0137-b578ab0a894d.png)

#基本設定
##デフォルトの設定
設定コマンドを叩くと、対話形式でデフォルトの設定が始まる。
生成したアクセスキーとシークレットアクセスキーを入力
利用するリージョンと実行出力結果の形式(json, txt, table)を指定する

```:
$ aws configure
AWS Access Key ID [None]: ***********************
AWS Secret Access Key [None]: ***********************
Default region name [None]: ap-northeast-1
Default output format [None]: json
```

##設定ファイルの場所と中身
場所

```:
$ ls ~/.aws
config        credentials
```

それぞれ中身は

```:
$ cat config 
[default]
output = json
region = ap-northeast-1

$ cat credentials 
[default]
aws_access_key_id = ***********************
aws_secret_access_key = ***********************
```

直でこっちいじってもよさそう

##おまけ 複数profile設定
アクセスキーを複数登録し、profileとして使い分けできる。

```:
$ aws configure --profile admin
```

実行する時はコマンド+\[--profile admin\]

```:
$ aws ******* --profile admin
```

***
間違い、改善点などありましたらご指摘お願いします。

Next：**[0.5から始めるAWS CLI入門 - ②基本使用](http://qiita.com/yarakaki/items/dbd1c8a4feed2936107e)**
Arduino IDE > 外部エディタを使用する > Sublime Text使用など

```txt:動作環境
ESP-WROOM-02
Arduino IDE 1.6.6 on Windows 8.1 pro (64bit)
```

使い慣れたSublime TextでコーディングをしてArduino IDEでコンパイル、プログラムダウンロードをしたい。

デフォルト設定では、Sublime Textで変更した内容が反映されない、という問題がある。

内容の反映方法が分からず、Sublime Text上の編集時はArduino IDEを再起動していたが、効率が悪い。

設定で「外部のエディタを使用する」というのがあることに気づいてONにしたら、以下のようになった。

- Arduino IDE上ではファイル変更ができなくなった > 編集合戦にならずに良い
- Sublime Text上で変更した内容がすぐにArduino IDE上に反映されるようになった

これでSublime Textでコーディングを進められる。
Railsのcreated_at、updated_atはアプリサーバーの時刻が使われる

Railsのcreated_at、updated_atに保存される日時は、アプリサーバーの日時なのか、DBが乗っかってるサーバーの時刻なのか分からなかったのでコードを見た。

不具合が発生したときに、created_atやupdated_atに保存される日時情報は、サーバー依存なのかDB依存なのかはっきりと断言出来ずと困った。
（例えばDBが乗ってるサーバーの時刻は定期的に同期をしてるけど、アプリサーバーの時刻は定期的に同期してなかったりとか）

# 結論
アプリが動作してる、サーバーの環境変数またはシステムに設定されているタイムゾーンでの日時が設定される。
Timeクラス使用、参考：http://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c

# 根拠：SourceCode
実装は3.2と4.2.5と5.0βで同じだった。
https://github.com/rails/rails/blob/v5.0.0.beta2/activerecord/lib/active_record/timestamp.rb#L121

☝︎たぶんこれ。
違うときは教えてください。


# 参考
以下サイト様に書いてあったとおりだった。（ただ書かれた日時が8年位前とか古すぎるので不安だった）
http://d.hatena.ne.jp/zariganitosh/20081225/1230147759
vimで編集中のファイルのディレクトリをエクスプローラで開く

すべてがvim内で完結できないレベルのため、
ちょっとした操作がしたくなったりしたときに
windowsのエクスプローラ開きたくなることがあります。

# やりかた

explorerコマンドの引数にファイルのディレクトリを渡す

`
:!explorer %:p:h
`

## もう少し便利に

vimrcに書いて、shift+F1でエクスプローラを開くキーを割り当てる

`
map <S-F1> :!explorer %:p:h<CR>
`

# さらに深く

%:p:hの意味は

`
:help filename-modifiers
`
言語別 scientist


## Ruby
* https://github.com/github/scientist

## PHP
* https://github.com/daylerees/scientist

## Python
* https://github.com/joealcorn/laboratory

## Javascript
* https://github.com/ziyasal/scientist.js

## Node.js
* https://github.com/trello/scientist

## (.NET)
* https://github.com/Haacked/Scientist.net
既存DBを使ってRails

#やりたいこと
既存のDBを使って、とりあえずRailsを動かす。

#やること
- DB側の設定
- rails new
- database.ymlの変更
- schema.rbの生成
- scaffold

## DB側の設定
既存のユーザを使ってもいいですが、とりあえずRails用のユーザを追加しました。

## rails new
デフォルトで動かすとsqliteで作成されてしまうらしい。既存のDBはmysqlなので、生成時に指定。
`rails new Hoge --database=mysql`

## database.ymlの変更
config/database.yml がDBアクセス用の設定ファイル。ユーザー名とかパスワードとか、ホストとかを書き換えました。

## schema.rb
手動で書いても良さそうだけど、データベースの定義を読んで生成してくれる様子。
`rake environment -t RAILS_ENV=development db:schema:dump`
使わないテーブルの情報が邪魔なので、手動で消しました。


## scaffold 
ささっと動作確認したかったので、scaffoldで生成。ただ、マイグレーションは要らないので、どうしようかなと思っていたら、それ用のオプションがあるようなので指定。
`rails g scaffold Moge 情報 --skip-migration`

元テーブルの情報を引っ張って来ればいいのだけれど、めんどくさい。自動で作れないかな。

で、ハマった。当たり前だけど、古いDBが命名規則に沿ってないので、ダメ。
なので、Modelを書き換えて、

``` rb:Moge.rb
class Moge < ActiveRecord::Base
 self.table_name = '古いテーブル名'
end
```

動かしてみると、Viewもエラーを吐いているようだ。
idがないため、showとかupdateとかがダメらしい。

とりあえず表示だけで良いので、消して、無事表示を確認。
Macにphp 7.0.3をphpenvでインストールした時のメモ

[phpenvインストールはこちらをどうぞ](http://qiita.com/truffaz76/items/71c66a4e87a189637024)

phpenvだけ入った状態でphp7をインストールしようとすると

```bash
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
2 warnings generated.
/var/tmp/php-build/source/7.0.3/ext/zip/lib/mkstemp.c:75:8: warning: implicit declaration of function 'getpid' is invalid in C99 [-Wimplicit-function-declaration]
        pid = getpid();
              ^
1 warning generated.
/var/tmp/php-build/source/7.0.3/Zend/zend.c:1292:1: warning: function declared 'noreturn' should not return [-Winvalid-noreturn]
}
^
1 warning generated.
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
-----------------------------------------
```

というようなエラーが表示されます。
php7インストールに必要なパッケージがないためなので、すべてインストールします。

```bash
$ brew install bison
$ brew install re2c
$ brew install libjpeg
$ brew install libpng
$ brew install libmcrypt
$ brew install autoconf
```

その後インストールします。

```bash
$ phpenv install 7.0.3
[Success]: Built 7.0.3 successfully.
```

すんなり入りました。

[opensslのエラーが発生する場合はこちらもご参照ください。](http://qiita.com/truffaz76/items/73613b86c0f8637dee59)
[IPython]IPython NotebookをShareする方法

IPython Notebook（Jupyter Notebook）をShareする方法としては、GitHubにUpするのが一番Simpleで良い方法ということだが、
「GitHubに上げるほどのものではない」または「GitHubに上げられない」場合はHTMLに変換すると良いらしい。

コマンドライン上で

```
ipython nbconvert test.ipynb --to html
```
か、IPython Notebopok上で

```
!ipython nbconvert test.ipynb --to html
```
を実行するとhtmlが作成される。

これだけ渡せば、結果を見ることはできるようです。
[ubuntu]contorl keyとcaps keyを入れ替える方法

ubuntu14.04で、ControlキーとCapsキーを入れ替える方法

emacsを使用しているとｃｔｒｌキーをよく使う。（ctrl-g連打とか)
ctrlキーとcapsキーを入れ替えるには下記を実行する。

```
dconf reset /org/gnome/settings-daemon/plugins/keyboard/active
```

これは、下記を参考にした。
https://wiki.ubuntulinux.jp/UbuntuTips/Desktop/HowToSetCapsLockAsCtrl


ただし、Windows上でVirtualBoxを使用している場合は、上記方法ではうまく行かかなったので、Windows自体でCtrlとCapsのキーを入れ替えた。

入れ替えにはKeyswap for XPを使用した。
phpenvでphpをインストールしている時にopensslエラーが出る場合の解決メモ

[phpenvインストールはこちら](http://qiita.com/truffaz76/items/71c66a4e87a189637024)

上記記事では成功していますが、セカンドPCにphpenvでphpをインストールしている時にbuild errorが発生したので解決方法のメモです。

```bash
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
                                                         ^
/var/tmp/php-build/source/5.3.29/ext/libxml/libxml.c:455:22: warning: assigning to 'char *' from 'xmlChar *' (aka 'unsigned char *') converts between pointers to integer types with different sign [-Wpointer-sign]
                error_copy.message = xmlStrdup(msg);
                                   ^ ~~~~~~~~~~~~~~
5 warnings generated.
/var/tmp/php-build/source/5.3.29/ext/openssl/openssl.c:40:10: fatal error: 'openssl/evp.h' file not found
#include <openssl/evp.h>
         ^
1 error generated.
make: *** [ext/openssl/openssl.lo] Error 1
-----------------------------------------
```

こんなのが出てきました。opensslはbrewでインストールされている状態です。

```bash
$ brew upgrade openssl
Error: openssl 1.0.2f already installed
```

上記の記事にもあるのですが、

```bash
$ brew link openssl --force
```
brew linkでシンボリックリンクを作成し直すことで解決しました。
docker - Error getting IP address: Something went wrong running an SSH command

Max OSX にDockerToolBoxをインストールして
QuickStartを起動すると以下のようなエラーが発生．

```
Error getting IP address: Something went wrong running an SSH command
```


以下のコマンドで解決

```
$ docker-machine rm default
$ docker-machine create --driver virtualbox default
```

## 参考文献
[Error getting IP address: Something went wrong running an SSH command #317 ](https://github.com/docker/toolbox/issues/317)
Git Hub ポスト 手順

1、Githubページでニューリポジトリ押す

　　リポジトリとは、ファイルやディレクトリの状態を記録する場所です。 
　　ソースコードを保存　

2,terminalにて
`git init`
リポジトリの作成をする。(1番手前の場所で)

`vim .gitignore`
　開く。ここでは、確認だけ

`config/database.yml
*.DS_Store
*.swp

vendor/bundle`

`git remote add origin https://github.com/oyaoyaoya/profiele.git`
　リモートリポジトリの追加　
　 リモート＝github上のリポジトリ
　origin＝github(このパソコンのoriginがgithub)



`git pull origin master`
 他のリポジトリの変更点をローカルリポジトリにマージする。


`git remote`
リモートリポジトリの一覧を表示したい
-v オプションを付けると、リモートリポジトリの詳細を表示することができる

`git add .`
コミットするファイルを指定する。
git add . はワーキングツリーに新規作成された、もしくは変更されたファイルをaddします。

`git commit`
`git push origin master`
オリジンのリモートリポジトリへのプッシュ


1、localにリポジトリを作成
2、remoteのリポジトリと繋げる
3、localからremoteへpush

⬛︎git役割
 pushする前に確認

`git status`
 変更点を確認

`git diff`
変更点の詳細を確認

swpファイル
＝いらないファイル
＝現在開かれてる

addされると緑になる

git commit -m"コメント"
addの時でない。

⬛︎修正後
git diff 
  変更点確認

git add ファイル名

git commit -m"ファイル名変えました"

git push 場所（一人の時はorigin master）

⬛︎見ながら
echo "# flashcard" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/oyaoyaoya/flashcard.git
git push -u origin master
Linux コマンド

`ls -l`
 縦に何があるか表示

`vi`
　ファイルを開く
`ls -l ○○`
  縦にフォルダを開く
`cd ..`
戻る

`history`
 打ったコマンドが全部出てくる

`mkdir`
新規ディレクトリ作成

`rm`
削除
shoryukenを起動するときに、productionモード起動させる


```bash
cd /path_to/RailsProject/
RAILS_ENV=production bundle exec shoryuken -d -R -C ./config/shoryuken.yml -L ./log/shoryuken.log -P ./log/shoryuken.pid
```

RAILS_ENV=production
をスクリプトの前で渡してあげる。

何故か

```bash
bundle exec shoryuken -d -R -C ./config/shoryuken.yml -L ./log/shoryuken.log -P ./log/shoryuken.pid RAILS_ENV=production
```

で起動しようとしたときには、devlopmentモードで起動してしまって、気づくのに時間がかかった。
package.jsonに書かれた依存ライブラリを一括でupdateする

gulpを使うときに、```npm install ```でいろんなライブラリを入れていきますが、その時は最新版がリポジトリからダウンロードされるので、versionについてはあまり気にしないと思います。基本的に```--save-dev```または```-D ```のoptionをつけて細かなバージョン管理はしていますが、依存ライブラリがあまりにも多いとチェックだけで時間が取られてしまいます。探してみたらnpm-check-updatesなるものがあるらしい。
[npm-check-updates](https://github.com/tjunnone/npm-check-updates)

##使い方
```
$ npm i -g npm-check-updates
```
でnpm-check-updatesをglobalにインストールします。

```
$ cd path/to/project
$ npm-check-updates
```
って叩くこんな感じで表示してくれます。
<img width="433" alt="スクリーンショット 2016-02-20 16.53.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/59572/e2cecaf9-d868-c6c5-01f3-c23051a7a111.png">

あとは

```
$ npm update
```
を叩くだけです。

※optionで```-u```をつけると自動でupgradeしてくれます。

```
$ npm-check-updates -u
```

ライブラリが多くなれば多くなるほど便利なんじゃないかと。
外部シンボルエラーの解決（Direct3DCreate9）

DLLを作成する時にDirect3DCreate9関数について外部シンボルエラーで怒られた.
外部シンボルエラーは大抵ライブラリをリンクしていないことに因るので

```cpp
#pragma comment(lib, "d3d9.lib")
```

を加えればリンカオプションを指定しなくても勝手にリンクしてくれる.