OmniAICreator/Qiita-1.07M huggingface dataset:
Unity5からのXcodeプロジェクト出力

#はじめに
Unity4で作ったVuforia、MMD4Mecanimを使ったProjectFileを
Unity5に移行したらadhoc用のipaの書き出し（おそらく申請用も）できなくなってたのでその対応です。

それほどunityの作法を理解しているともいえないので、他に対応があるか
unity側でそのうち対応してくれるかも？

>情報があまりにないので、スタンダードなハマりだったりするのかなと疑ってもいます

#Sceneの追加
`Scenes in build`にSceneが一つも追加されていない状態になっていたので
追加し直しました。

![スクリーンショット 2015-07-06 9.55.36.png](https://qiita-image-store.s3.amazonaws.com/0/12362/42726ecf-b56a-116b-44b2-fc28dc0f1f79.png)

これは他のMacから持ってきたUnityProjectを開いたときも同様だったかと思います。

#出力したXcodeProjectの設定

##Version
###出力元のUnityProjectの設定
![スクリーンショット 2015-07-06 10.20.59.png](https://qiita-image-store.s3.amazonaws.com/0/12362/b7c6de16-2ff6-8f9a-327b-be2074f262d1.png)

###XcodeProject
![スクリーンショット 2015-07-06 10.02.57.png](https://qiita-image-store.s3.amazonaws.com/0/12362/e041b7f4-5e03-e05c-84b1-15051c701997.png)

いまのiTunesConnectへ提出ipaを作成する場合
内部バージョンだけ変更する場合があるので
`Version`と`Build`の値が揃って欲しくない場合は変更をする

#エラーの内容

ipaで書き出し時に署名するbundleのパッケージ名が証明書と関係ないのが原因みたいです。

```:IDEDistribution.verbose.log
2015-07-05 14:39:39 +0000 [MT] -[IDEDistributionProvisioning _itemToSigningInfoMap:]: Locating assets for items = (
    "<IDEDistributionItem: 0x7f955db4b140 'jp.hogehoge.test.mmd.miku'>",
    "<IDEDistributionItem: 0x7f955a2a17c0 'com.qualcomm.qcar.testapps.QCARWrapper'>"
)
```
##Xcodeのプロジェクトファイル
Frameworks配下にQCARWrapper.bundleが入っていた
![スクリーンショット 2015-07-06 2.51.27.png](https://qiita-image-store.s3.amazonaws.com/0/12362/d3c36d2a-d799-2022-a80d-ef1604c52b5f.png)



#対応
対処方法は二つ

##Unityの設定から

Inspectorの次の項目を画像のように設定

+ Select platforms for plugin
    + Editor
    + Standalone
+ Platform settings
    + CPU
    + OS

![スクリーンショット 2015-07-06 2.47.02.png](https://qiita-image-store.s3.amazonaws.com/0/12362/b638e83e-e3ea-7f4a-0da2-f2127afea28a.png)

###参考URL
http://qiita.com/altemina/items/6823331aa5c9a3044e92
https://developer.vuforia.com/forum/ios/qcarwrapperbundle-codesign-failed-xcode

##Xcodeの設定から
Build Phases > Copy Bundle Resources
から該当のbundleファイルを抜く

>すでに抜いている状態
![スクリーンショット 2015-07-06 3.09.02.png](https://qiita-image-store.s3.amazonaws.com/0/12362/5f471769-956c-7d8e-dbef-684d6ecccc9d.png)

#バッチモード
去年までPro版でしか使えない機能だった気がするんですが、普通に使えました。
シミュレータで実行用と、adhoc以上の実機配信用とProjectファイルの生成が出来てかなり便利。

##参考URL
http://sassembla.github.io/Public/2013:01:31%2017-47-32/2013:01:31%2017-47-32.html
http://docs.unity3d.com/ja/current/Manual/CommandLineArguments.html

#さいごに
Unity4で作ったものをUnity5に移行して、MMD4Mecanim.bundleの方は問題がなかったりよくわからないところもあります。
アップグレード時にメソッドの書き直しなども実行してくれますが、結局一から作った方がいいと感じるところがまだ多い印象。

![スクリーンショット 2015-07-06 3.39.07.png](https://qiita-image-store.s3.amazonaws.com/0/12362/2d001580-84dc-ae09-9951-1fe82fbdcaa6.png)

Unity使いさんはこういうのも日常茶飯事なんでしょうか・・・。
Cocos2d-x SoundEffect 作る方法

Cocos2d-x SoundEffect 作る方法について　
　
**CODE**
SimpleAudioEngine.h
```int createEffectWave(float pitch,float pan,float gain);```
pitch is 音のスピード pan is　右の音と左の音   gain is声の距離


まず　include simpleAudioEngine
```#include "SimpleAudioEngine.h"```
そして　set define the Music of Effect FileURL;
```#define SoundWave "sound.mp3"```

```int IntelligenceMemoryAudioContainer::createEffectWave(float pitch,float pan,float gain){```
    //必ずpreloadEffectください！
   ``` CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect(PaperWave);```
    //Volume　
  ```CocosDenshion::SimpleAudioEngine::getInstance()->setEffectsVolume(10);
//もし　SOUNDID必要な時は この方法でIDをもらう事ができます
 return  CocosDenshion::SimpleAudioEngine::getInstance()->playEffect(SoundWave,false,pitch,pan,gain);   
} ```

後は必要の時で使用するのみ！
PHPの$_SERVER['SERVER_NAME']が取れなかったので調べた

10年以上PHPやってるくせに最近知ったのでメモ
***
PHPで開発しててローカルのテスト環境と本番環境での振り分けをしたいのはよくあると思います。

割と王道なやり方は

```code:php
if($_SERVER['SERVER_NAME']==="***.localhost")
```
等でしょうか。

これうっすらと気が付いてましたが、今回ちょっとトラブルになって調べました。
考えれば当たり前だったんですがCRONやforward等のApacheを経由しないPHP動作の際は取れない訳です。

$_SERVER自体が「WEBサーバーより情報を生成します」とあります。

ですので代替えを調べました。
execのやり方もあるようですがPHPではないですし、ちょっと邪道な気もしますので、

```code:php
php_uname('n')
```
で、php_uname自体でPHPが動作しているPCの情報が取れ（OSやバージョンが取れます）
「n」パラメータでホスト名が取れる事がわかりました。

ドメイン返さないじゃん・・・と思いましたが、WEBサーバではない（Apacheではない）情報を返すので当たり前か。

当方でテストしたところ、


```code:ローカル
$_SERVER['SERVER_NAME']→「****.localhost」
php_uname('n')→「PC名」
```

実際のレンタルサーバ上（ここではさくらインターネットのスタンダード）

```code:さくら
$_SERVER['SERVER_NAME']→「ドメイン名」
php_uname('n')→「www***.sakura.ne.jp」
```

うん、コードはちょっと書き換える必要が出ますが、$_SERVERが使用できない場合はこれでいけそうです。
Visual Studio が無い Windows 環境で c# コードをコンパイルする

これまでC#アプリの開発には Visual Studio が必要であると信じられてきた（？）。しかし我々は.NET Framework がインストールされたWindows環境であれば、Visual Studio を使用せずにC#コードのコンパイルが可能であることを突き止めた。

.NET Framework は windows vista 以降の windows os に標準でインストールされている。これは良識のある企業、すなわち windows xp のサポート切れに伴い常用パソコンをリプレースした全ての企業において、一般従業員でもC#によるアプリ開発できることを意味する。

この記事では、SEという名の事務職へC#アプリ開発の方法を提供する。

.NET Framework には csc.exe という C# コンパイラが含まれるので、これを使用する。このコンパイラのインストールパスを記載しても良いが、どうせなら自分で探すことを覚えて欲しいので以下に検索用のコマンドを示す。

```bat:cmd.exe
C:\Windows> dir /b /s | findstr csc.exe$
```

複数のパスが見つかっただろうか？ 見つからなかった場合は C# 開発者として活躍する妄想を忘れて事務職に戻って欲しい。おそらく貴方は未だwindows xp 以前のOSを使用しているか、フォルダへのアクセスが制限されている。

複数のパスが見つかった場合は、自身の環境に合ったバージョンのコンパイラを選択する必要がある。通常はバージョン番号の大きいものを選択すれば良い。あなたの環境で動けば同僚の環境でも動くだろう。また 64bit, 32bit の区別はあるが、あまり気にする必要はない。64bit 版が使用できるのであれば 64bit 版を使用すれば良い。ただし winsxs というフォルダに含まれるコンパイラは使用しない方が無難である。このフォルダは Windows OS がバージョン管理をするために使用している。

使用するコンパイラが決まれば、その使い方を覚える必要がある。最も簡単な使い方は以下のようになる。

```bat:cmd.exe
C:\dev_folder> C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe source_file.cs
```

このように、コンパイラの引数にC#のソースコードを与えると、カレントディレクトリ（この場合は C:\dev_folder）に実行ファイルが生成される。

これで C# 開発者への道が開かれた。ただ、上記のコマンドは少々長ったらしいので、通常はバッチファイルを作成すると良いだろう。コンパイルバッチは、コンパイル時のオプションを大量に指定する必要があるときや、後述するアセンブリ参照を追加するときにも便利である。

```bat:compile.bat
@echo off
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe %1
%~n1.exe
```

実行するには以下のようにコマンドを叩けば良い。

```bat:cmd.exe
C:\dev_folder> compile.bat source_file.cs
```

このバッチを実行すると、コンパイルに続けて生成されたファイルが実行される。デバッグのためにファイルを実行することはよくあるので、普通はこの動きで問題ないだろう。勝手に実行されては困るのであれば compile.bat の三行目をコメントアウトするなりして欲しい。

以上で簡易なアプリ開発の準備が整った。ただし少し凝った（業務的に欲しい機能を持った）アプリを開発するのであればアセンブリ参照を追加する必要がある。アセンブリ参照を追加する方法は Visual Studio を使用した方法が一般的だ。Visual Studio を使用すると GUI でアセンブリが一覧されており、ネットの情報を頼りにするだけでも簡単にアセンブリを選択することができる。しかしながら csc.exe を使用する場合は必要なアセンブリを探すところからスタートするため一筋縄ではいかない。

アセンブリについては以下の記事が詳しい。

[GAC（グローバル・アセンブリ・キャッシュ）からファイルを取り出すには？ － ＠IT](http://www.atmarkit.co.jp/fdotnet/dotnettips/846extratfromgac/extratfromgac.html)

上記のようにして取り出したアセンブリを、コンパイル時に参照するためには compile.bat に以下のようなオプションを追加すれば良い。

```bat:compile.bat
@echo off
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe ^
    /r:xxx.dll ^
    /r:yyy.dll ^
    /r:zzz.dll ^
    ... ^
    %1
%~n1.exe
```

これで .NET 資源を利用したC#アプリの開発環境が整った。

この記事によって、事務職がエンジニアとしての尊厳を取り戻すことになれば幸いである。


---


ちなみに Excel を利用可能にするアセンブリは以下です(´・ω・｀)
Excel エンジニア生きて(´・ω・｀)

```bat
C:\Windows> dir /s /b | findstr dll$ | findstr Excel
C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\14.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll
...
...
...
```
ROS チュートリアル (1. 初級 - ROSパッケージを作る)


## はじめに

ROS のチュートリアルの「1. 初級 - ROSパッケージを作る」で引っかかったので、記録しておきます。

チュートリアルはこちら。

* [日本語版 - 「ROSパッケージを作る」](http://wiki.ros.org/ja/ROS/Tutorials/CreatingPackage)
* [英語版 - 「Creating a ROS Package」](http://wiki.ros.org/ROS/Tutorials/CreatingPackage)

最初に日本語版を見ながら試していたのですが、「5. パッケージの依存」あたりがどうも動かない。次のチュートリアルが「ROSのパッケージをビルドする」なので、ビルドしてから動くのだろうかと進めてみたのですが、どうも違う。

まさかまたかと思いつつ、英語版を確認したところ、日本語版にない手順がありました。

## 日本語版 - 英語版の見出し差分

| 日本語版 | 英語版 |
|:-------|:------|
| 1. ROSパッケージを作る | 1. Creating a ROS Package |
| 2. catkinパッケージの必須要素 | 2. What makes up a catkin Package? |
| 3. catkinワークススペース内のパッケージ群 | 3. Packages in a catkin Workspace |
| 4. catkin形式のパッケージを作る | 4. Creating a catkin Package |
| **(´；ω；`)ｳｯ…** | **5. Building a catkin workspace and sourcing the setup file** |
| 5. パッケージの依存 | 6. package dependencies|
| 6. 自分のパッケージをカスタマイズする | 7. Customizing Your Package |

英語版「5. Building a catkin workspace and sourcing the setup file」にあたる部分が日本語版になさそうです。

## パッケージの作成手順抜粋

```bash
# 4. Creating a catkin Package
$ cd ~/catkin_ws/src
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

# 5. Building a catkin workspace and sourcing the setup file
$ cd ~/catkin_ws
$ catkin_make

$ . ~/catkin_ws/devel/setup.bash
```

とすると、

```bash
# 6.1 First-order dependencies
$ rospack depends1 beginner_tutorials

$ roscd beginner_tutorials
$ cat package.xml

# 6.2 Indirect dependencies
$ rospack depends beginner_tutorials
```

あたりが動かせるようになります。


## 感想

* ユーザ登録すれば誰でもページの修正はできそうな感じですが、私みたいなチュートリアル中の ROS 素人が修正しても大丈夫なのか判断できないので、どなたか修正してください。
* 「シンプルな配信者(Publisher)と購読者(Subscriber)を書く(Python)」あたりを試そうと思っていたのに、妙なところで引っかかってしまいました。
* 日本語版チュートリアルをざっと内容を確認して、英語版チュートリアルの内容で実際に試す、という形にするのが良さそうな感じがします。
デザイナーと開発のやりとり自動化する：githubとWerckerを使ってS3にAutoDeploy

やりたいこと

1．デザイナーさんからもらったHTMLはある。
2．ちょっとした修正をしたい。
3．画面設計で参考にするので、S3にあげておきたい。
4．エンジニアに変更点をピシッと伝えたいのでgithub で管理する
5．ファイルをいちいちアップするのめんどくさい


とういことで。。。

ローカルは、AtomとGithub でちょこちょこ刻みます。

「git master push」
すると

「Werckerが検知してS3へのコピー」

というとってもたのいしいい便利な小技です。
遠い過去のコミットを取り消す方法（５０秒で）


##やらかした(;´Д`)

プルリクエストを出してレビューしてもらったら


意味不明なコミットをプッシュしてしまっていた事が判明した経験ありませんか？？


でも全然大丈夫

git マスター @sachin21 さん直伝の音速取り消し方法を記事化しておきます。


git初心者向けです


##まず取り消したいコミットのハッシュ値を確認

```terminal
 git log --oneline
```

って打つとわらわらコミットが出てくるのよ


```terminal
3d62052 scopeを定義
6d10927 コメントを修正
72a4313 リファクタリング
24cfd5d コメント記入
76773f0 進捗を分けた
```

こんな感じに


今回は
`6d10927 コメントを修正`

を取り消す事にしましょう

このコミットのハッシュ値は

左側に書いてあった

6d10927　ですね


##revert

筆者はrebaseっていうのを使ってやろうとしていたんですが、それは良くないらしい。
詳しくは
http://www.karakaram.com/git-rebase-i-usage#remove
の`リモートの共有リポジトリに push したコミットを rebase してはいけない`の部分を見てね


こういうケースはrevertを使うんだそう

`git revert ハッシュ値`

でvimが立ち上がるので、その後

`:wq`　って打ってenterで終了。

例で言うと

①　git revert 6d10927
②　:wq

##最後

以上の２コマンドで
新しいコミット（コミットを取り消すコミット）が出来るので、あとはそれをプッシュするだけ



あらかんた〜〜ん


というわけでプッシュしたコミットを取り消す方法でした。


##P.S

追記です。

どうやらこの方法は、
コミットを取り消すコミット
を作成するので、コミット数が増えるという点で美しくないみたいですね。

rebaseを使う人も全然いるみたいです。
Initial Congestion Window

# 輻輳

## 輻輳制御

ネットワークに対して、ネットワークの帯域を超えたり、ルータのバッファを溢れさせるようなパケット量を送ると、そのパケットが破棄される。これが輻輳といわれる現象の概要。

そして、それがなるべく起こらないように、一度に送るサイズを window size という単位に抑え、帯域に余裕がありそうなら、この window size を増やして一度に送る量を増やす。
もし輻輳が起こったら、 window size を下げる、というような挙動をする。

これを輻輳制御という。

## 輻輳制御方式

window size をどのくらいの速さで増やし、輻輳が起こったらどのくらいまで減らすのかにはいくつかのアルゴリズムがある。

- Tahoe
- Reno
- New Reno
- Vegas
- BIG
- CUBIG
- CTCP

あたりが有名らしい。
基本は二つ。もしくはそのハイブリッド。

### ロスベース

経路の状況などは考えず、単純に
パケットがロスしたら減らす、しなければ増やす。

### 遅延ベース

**輻輳が起こる前には機器遅延が発生する** という現象の特徴を活かし、
あらかじめ想定している RTT を下回ったら、輻輳が発生しそうだとして減らす。
そうじゃなければ増やす。

## initial congestion window (InitCWN)

いずれにせよ、 window size は小さい値から始まり徐々に増えて行く。
この初期値はもともと 1 セグメントだった。
それが　RFC2581 で 4 セグメントになり。 RFC6928 で 10 になった。
こうしてセグメントサイズが増やせるのは、昔に比べて回線環境が向上し、それを使い切るためには小さい値では最適ではなくなってきたという状況が影響していると思われる。

ちなみに InitCWN を 10 に上げようという話は Google が make the web faster の流れで調査した結果をもとにペーパーを書いて提案した模様。

- https://developers.google.com/speed/articles/tcp_initcwnd_paper.pdf
- https://developers.google.com/speed/protocols/tcpm-IW10

## slow start

cwnd が小さいと、例えば回線も十分太く、相手のバッファも余っているのに、それが使いこなせない場合があるということ。

そして、それが徐々に大きくなっていく slow start のモデルは、帯域が使い切れる状態になるまで時間がかかるという事。

それでも、例えば大きな画像や動画を送るのであれば、同じ回線で cwnd がすぐに大きな値になり、そこからアルゴリズムで上下させながら最適な値に収束して行くため、そこまで大きなデメリットにはならない。

しかし、 HTTP/1.1(no keepalive) のように、リクエスト毎に細かくコネクションを切るような回線の使い方だと、ようやく cwnd が温まってもすぐに切れるか、そもそも上がりきる前に切れてしまうので、せっかく温まった回線が使えない。

## 張りっぱなしの意味

keepalive, websocket, http2 etc で、接続をとにかく貼りっぱなしにしたがる理由は、 3 way handshake の RTT による接続オーバーヘッドの現象もあるが、
そもそもせっかく温まった接続を使い回すことで、 window size 的にも効率が良くなるという問題もある。

一度張った接続は、大事に使う事でよりメリットが増えて行く訳だ。

すると、物理コネクション上で論理コネクション(http2 でいう stream) が欲しくなる。

貼りっぱなしたい理由はそういうところにもある。

## link

- http://www.net.c.dendai.ac.jp/~yutaro/#2-1
smalls つくった

2017.2.17 追記 ここから
このパッケージはもうメンテしてません。
2017.2.17 追記 ここまで

[smalls](https://atom.io/packages/smalls)

![gif](https://raw.githubusercontent.com/t9md/t9md/9e2b924427829d0264841dbf211858629dd0e7d3/img/atom-smalls.gif)

素早く、カーソルを望みのポジション移動する。探索(`search`) and ジャンプ.

自作の Vim プラグイン [vim-smalls](https://github.com/t9md/vim-smalls) の Atom 版.
Vim の smalls は自分ではあまり使っていなかった。
Atom のやつはどうなるか分からないが、Pane を超えてジャンプできるので、便利さは vim-smalls より上。

# 機能

* 見えている Pane 全てから検索してジャンプ
* カーソル位置を着地時にハイライト(デフォルトで有効)
* 入力文字が、設定した長さを超えると自動的にラベルを表示
* [easymotion](https://github.com/easymotion/vim-easymotion) スタイルのラベルジャンプ
* 自作の [vim-smalls](https://github.com/t9md/vim-smalls) の移植
* ラベルの表示位置を、`start`, `end` のどちらか選ぶことができる。
* ラベルに使う文字を設定できる。
* 大文字でラベルを表示し(小文字より見分けやすいので)、ラベルジャンプは小文字入力で可能。

# 使い方

1. `smalls:start` でスタート
2. 飛びたい文字を入力し、Enter(`core:confirm`) or `smalls:jump`.
3. ラベルが表示されるので、選んでジャンプ

# コマンド

* `smalls:start`: スタート
* `smalls:jump`: ラベルジャンプを開始。smalls 用のミニエディタ上でのみ有効なコマンド

# キーマップ
デフォルトは無し。

e.g.

```coffeescript
'atom-text-editor:not([mini])':
  'ctrl-;': 'smalls:start'

# オプション
# 指をあまり動かさずに、ラベルジャンプに入ることが出来る。
# そのかわり、`;` 自体が検索できなくなるので注意
'atom-text-editor.smalls.search':
  ';': 'smalls:jump'
```

* 私の設定( [vim-mode](https://atom.io/packages/vim-mode) ユーザー)
`;` は `vim-mode:repeat-find` に割り当てられているが、他のキーに割り当てて
`;` を使っている。

```coffeescript
# `vim-mode:repeat-find` を潰しているので注意。
'atom-text-editor.vim-mode.command-mode':
  ';': 'smalls:start'
```

# ラベルのスタイルのカスタマイズ

```less:style.less 
atom-text-editor::shadow .smalls-label {
  background-color: @background-color-error;
}
```

# 同種(?)パッケージ

Atom

* [jumpy](https://atom.io/packages/jumpy)
* [easy-motion](https://github.com/adrian-budau/easy-motion)
* [quick-jump](https://atom.io/packages/quick-jump)
* [QuickJumpPlus](https://atom.io/packages/QuickJumpPlus)

Vim

* [vim-easymotion](https://github.com/easymotion/vim-easymotion)
* [clever-f](https://github.com/rhysd/clever-f.vim)
* [vim-sneak](https://github.com/justinmk/vim-sneak)
* [vim-seek](https://github.com/goldfeld/vim-seek)
* [vim-smalls](https://github.com/t9md/vim-smalls)

Emacs

* [ace-jump-mode](https://github.com/winterTTr/ace-jump-mode)

IntelliJ

* [AceJump](https://github.com/johnlindquist/AceJump)

# TODO

* [x] Use panel to read input from user
* [x] Customizable label style
* [x] Refactoring especially `Input` view.
* [ ] Better labeling algorithm to support more than 2 level nested label.
* [ ] Unlock scroll cursor with hotkey?
* [ ] Narrowing based on grammar scope?

# 先輩ありがとうございます！
smalls は以下の先人の仕事の上に成り立っています。ありがとう！

- Lokaltog's [vim-easymotion](vim-easymotion)
- DavidLGoldberg's [DavidLGoldberg/jumpy](https://github.com/DavidLGoldberg/jumpy)

# smalls を作るまでのステップ

vim-small を作るときは、vim-easymosion を folk して書き換えながら動作を理解した。
その土台を元に vim-smalls をつくった。
今回も同じアプローチをとった。

1. 似たような Package である jumpy を folk して書き換える。
2. atom-smalls をつくった。

jumpy の書き換えを通して、大方の土台が出来た。
あまりにも変えたので、PR を送るつもりは無かったが、作者が送ってくれというので、
送った。

https://github.com/DavidLGoldberg/jumpy/issues/65
https://github.com/DavidLGoldberg/jumpy/pull/66
「HTML5 Conference 2015 in 鹿児島」スライド＆動画まとめ

## はじめに
７月4日（土）九州では3回目2年ぶり鹿児島では初となるHTML5カンファレンスが「国立大学法人鹿児島大学 郡元キャンパス共通教育棟2号館1F」で開催されました。
IoTをはじめどこにでもある当たり前の技術になり、徐々に浸透してきているHTML5ですが、実際にプロダクトとして利用するにはこれからという状況でもあります。また、「Extensible Web」という考え方や「WebAssembly」からもわかるように、まだまだ発展し続けている技術でもあります。

そんな魅力的なHTML5に触れられ、聞け、近づけることができるカンファレンスです。

ここでは当日発表した講師の方々が公開したスライドと当日の動画をまとめます。
当日参加できなかった方はこちらで当日の模様をご確認ください。

ちなみに私も登壇しましたよv(´∀｀*v)ﾋﾟｰｽ


![49d278ea.groupphoto.jpg](https://qiita-image-store.s3.amazonaws.com/0/24337/ec32bc33-14de-4aa9-5fe9-7b3917cdaf13.jpeg)


## 関連リンク
- [HTML5 Conference 2015 in 鹿児島](http://kagoshima.html5j.org/html5conference.2015/)
- [当日のつぶやきまとめ](http://togetter.com/li/842762)

## 動画リンク
- [ルームA - HTML5 Conference 2015 in 鹿児島](https://www.youtube.com/watch?v=cI2BZ2mtjs8)
- [ルームB - HTML5 Conference 2015 in 鹿児島](https://www.youtube.com/watch?v=7q9eFF_4Z38)
- [ルームC - HTML5 Conference 2015 in 鹿児島](https://www.youtube.com/watch?v=ejlb8CX2UgM)

## オープニングセッション
### 株式会社アラタナ　高見 和也様
[JSON-LD schema.org定義によるデータ構造化のススメ](http://www.slideshare.net/miiitaka/jsonld-schemaorg)

## ルームA
### html5j代表　吉川 徹様
[いまさら聞けないHTML5概要](http://www.slideshare.net/yoshikawa_t/html5-50152752)
### 株式会社ツクロア　秋葉 秀樹様
[ぼっけもんデザイナーへの道](http://www.slideshare.net/Hidetaro7/ss-50152497)
### NTTコミュニケーションズ　小松 健作様
[“There’s an element for that!!” Now, get ready for Polymer 1.0!!!](https://docs.google.com/presentation/d/144f0nxbzFTjsw_Kbm93UStQS559jrPDmHQbS1dro6V0/edit#slide=id.p)
### アシアル株式会社 / Aspective LLC　久保田 光則様
[Cordova開発者が知っておきたいレンダリングエンジンの話](https://speakerdeck.com/anatoo/html5-conference-2015-in-kagoshima)
### Mozilla Japan　浅井 智也様
[Firefox エコシステム ー Mozilla が創る Web of Things 時代の技術とプラットフォーム](http://www.slideshare.net/dynamis/firefox-ecosystem-in-kagoshima)

## ルームB
### NTTコミュニケーションズ　本間 咲来様
[はじめてのWeb of Things](http://www.slideshare.net/sakkuru/web-of-things-50155752)
### NTTコミュニケーションズ　仲 裕介様
[はじめてのWebRTC/ORTC](http://www.slideshare.net/yusukenaka52/webrtcortc-50153479)
### ヤマハ株式会社 / Web Music Developers JP 代表　河合 良哉様
[Web Audio API、 Web MIDI API を使ったWebサウンドプログラミング](http://www.slideshare.net/ryoyakawai/html5-conference-2015-50154542)
### 森 史憲様
[入門HTML5/CSS3](http://www.slideshare.net/ssuserc23c87/hhtml5-conference-2015-in-kagoshima)

## ルームC
### html5j 鹿児島　政倉 智様
[今流行りのウェブアプリ開発環境Yeoman](http://www.slideshare.net/tomo_masakura/yeoman-50176462)
### 株式会社モンスター・ラボ　新沼 貴行様
[オンラインコミュニケーションを支えるHTML5](https://speakerdeck.com/twinuma/onrainkomiyuniyukesiyonwozhi-eruhtml5)
### 株式会社アラタナ　高見 和也様
[History API：JavaScriptルーティング機能いろは](http://www.slideshare.net/miiitaka/history-api)

## さいごに
このような300人規模のITイベントが鹿児島でも開催出来ること、運営の立場でしたがとても驚きました。
当日はあいにくの雨にも関わらず多くの皆さんにお越し頂き誠にありがとうございました。
またボランティアで協力して頂いた皆さんの支えなしでは成り立ちませんでした。
この場を借りて改めて感謝致します。誠にありがとうございました。

また皆さんで面白いワクワクするイベント作り上げましょうね！
生まれて初めてmacを買った俺がインストールしたアプリ

[昨日](http://qiita.com/hdty/items/eff29cdc35f544cbe3d6)インストールしたものの続きで、なんとかこの週末に使える状態にまでしておきたかったけど、結局時間切れになってしまった。

## 昨日インストールしたもの
### Google Chrome
### Kobito
### Xcode
### LINE
### Wunderlist

## とりあえず定番ものをじゃんじゃんインストールする
### Dropbox
まあ、定番でしょう。

### Evernote
これもちょくちょく使う。

### Skitch
使ったことないんだが、先人たちが入れろというものを入れない道理はないだろう。

### Kindle
けっこう本やマンガを読むのでアプリで入れておきたい。

### Atom
最近はやりのAtomも入れておく。

### Sublime Text 3
もちろんこいつも。

### 夜フクロウ
macで人気がありそうなTwitterクライアントなので入れておく。

## いったんこれで終わり
いったんこれで週末が終わってしまったので環境構築はまた今度。
このアプリは神だから入れておけ、とか、この設定にしておくといいよなんていうありがたい情報があったら、ぜひこの迷える子羊に教えてくださいm(_ _)m
[Xcode] キーワードから機能(メニュー)を探す


今まで知らなかった私が異端児なのかもしれないけれど、Helpメニューからキーワードを入力することで、その機能が存在するメニューの場所を教えてくれることに気づいた。

![Xcode 6.4](https://qiita-image-store.s3.amazonaws.com/0/29653/602e83ae-165f-96e6-9593-f06060a53fa8.png "Untitled 2.png")

昔からある機能なのかもしれないけれど、とりあえずXcode 6.4で使えました。どこに機能があるか忘れちゃった時とか使えそうです。

ちなみに **「ふよふよ」**って感じで動きます。

P.S.
Xcode 7 でカバレッジの表示ってどこでやるんだろう・・・って探してる時に偶然見つけました。
Infer触ってみたのでメモ

## [Infer](http://fbinfer.com/)
* Facebook産の静的解析ツール
	* iOSとAndroidをターゲットとしている。
	* メモリリークやNull Dereference等を検出できる。
	* 検出できる項目は [infer-bug-types](http://fbinfer.com/docs/infer-bug-types.html) を参照。
* その他、詳しいことは、[facebookのInferに関する投稿](https://code.facebook.com/posts/1648953042007882/open-sourcing-facebook-infer-identify-bugs-before-you-ship/)を参照。


## Download & Install
### homebrewでのインストール
**コメントにいただきました通り、brew caskから削除されてしまったようです。。。opamを使うしかなさそうです。**

~~`brew cask install infer` だけで終わり。
見つからなかった場合は `brew cask update` すれば見つかるはず。~~

### opamでのインストール
[INSTALL.md](https://github.com/facebook/infer/blob/master/INSTALL.md)には、パッケージ管理マネージャであるopamをインストールし、opamを用いて必要なパッケージをインストールする方法が記載されている(2015年7月1日時点)。

1. `$brew install opam`
2. `$git clone https://github.com/facebook/infer.git`
3. `$opam init --comp=4.01.0`
4. ``$eval `opam config env` ``
5. `$opam install sawja.1.5 atdgen.1.5.0 javalib.2.3a extlib.1.5.4`
6. `$cd infer`
7. `$./update-fcp.sh && ../facebook-clang-plugin/clang/setup.sh && ./compile-fcp.sh`
8. `$make -C infer`
9. ``$export PATH=`pwd`/infer/bin:$PATH``


## 静的解析の実行
inferにxcodebuildを食わせる。
`$infer -- xcodebuild -project [project].xcodeproj -configuration Debug -sdk iphoneos`

inferコマンドを実行すると、infer-outディレクトリが生成される。
infer-outディレクトリ内には、実行結果や実行ログがテキストファイルで保存されている。
infer-out/bugs.txt に静的解析により検出された項目が記載される。

block構文やdelegeteメソッドでNull Dereferenceを検出してしまう静的解析ツールもあるが、Inferでは検出されなかったのが好印象。
さくらVPSでKernel Panicを起こす場合(Linuxのインストール時、アップデート時)　その1

別のブログで書いた記事の転載です。
http://trid-miracle.blogspot.jp/2015/06/qemukernel-panic-not-syncing.html

環境:QEMU/KVS

# Bochs BIOSのバージョン由来の現象
## 現象1
起動時に
Kernel Panic - not syncing: Attempted to kill init!
トレースに、
intel_pmu_init
が表示される場合。

## 現象2
そもそも、インストーラが起動しない

##原因
・カーネルのビルドオプションで、SandyBridge以降の機能が有効になっている
・Bochs BIOSのバージョンが古い(2.4.x以前)
　(プロセッサはSandyBridge以降)
※Bochs BIOS 2.4.xは、SandyBridgeのリリース前のバージョンです。

表示例:
QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
※チップセットの440FX+PIIX3は、SandyBridgeのリリース前のものです。
　なので、SandyBridgeには非対応です。
※RedHat系(CentOSなど)では、チップセットの表示部分が、書き換えられているので、BIOS Bochs 01/01/2011の部分で識別して下さい。

## 対策
SandyBridge以降の機能を無効にして、カーネルをビルドしなおします。
特に、Intel P-Stateなどが、ひっかかりやすい項目。

Kernel Panic時のトレースなどに、intel_pmuが表示される場合
 → Intel P-state を使用しないようにします。(CONFIG_X86_INTEL_PSTATE=n)

Kernel Panic時のトレースなどに、intel_raplが表示される場合
 → CONFIG_INTEL_RAPL=nにします。
V8エンジンを崇めるnpmつくってみた

https://www.npmjs.com/package/node-max

[asciify](https://www.npmjs.com/package/asciify) でV8エンジンを崇めつつバージョンを返します。

```js
npm install node-max
var NodeMax = require('node-max');
NodeMax.hail({font: 'starwars'}).then(console.log);
```

![スクリーンショット 2015-07-06 0.01.01.png](https://qiita-image-store.s3.amazonaws.com/0/14326/10af2a85-eecf-0381-19ea-fc87106f093c.png)

node のプロンプト記号で1行目がずれるので、スクショでは改行してから出力する ```console.log``` を定義して ```then``` に渡してます。
nftablesとiptables

nftablesの処理が走るのは、iptablesの後。
(INPUTもOUTPUTも同じ・・だったはずです。)

とはいっても、nftablesでは!(not)が一部削られていたり、iptables-extensionsを使いにくかったり・・するので、nftablesが登場する機会がなかなかないのですが。

せめて、LOG (limit) DROP とかできたらなぁ・・・
`! limit`の機能はないので、hashlimitを使う　となっていたりしますし。
MacBookにXenServer 6.5をインストールしてみた。


使わなくなったMacにXenServerを構築したので、その手順をまとめてみた。

## XenServerって何？
Citrixがオープンソースで仮想化を実現するためのホストOS。いわゆるハイパーバイザーってやつ。
これをインストールすれば、いろんなOSを好きなだけインストールして遊べる。やった～！
でも、XenServer以外にWindowsが必要なので注意！


## 必要なもの
* 使わなくなったMacBook  
今回は、MacBook 2008 early。Proもどきの銀色のやつ。  
XenServerから無線LANにアクセス出来ないので、有線LANに接続しておくこと。
* DVDドライブ  
インストールメディアを焼くために必要。
* 外付けキーボード  
ノートPCなのにキーボードが認識されない。なんで？
* Windowsが動く環境  
管理ツールがWindowsでしか動かない。

## インストールメディアの作成

1. XenServerのダウンロード  
http://xenserver.org/overview-xenserver-open-source-virtualization/download.html  
にアクセスして、`XenServer Installation ISO`のリンクから、ディスクイメージをダウンロード。
2. ダウンロードしたら、お好みのソフトでディスクイメージをDVDに焼く。  
Macの場合は、ディスクユーティリティで作成できる。
3. XenServerをインストールした後で、必要になるのでrEFItも準備する。  
http://refit.sourceforge.net/
から、ISOイメージをダウンロード。これもDVDに焼く。

## XenServerのインストール

1. MacBookのDVDドライブにXenServerのインストールDVDをセットする。
2. optionキーを押しながら、電源オン！
3. じゃ～んって鳴ってからしばらくすると、起動ディスクの選択画面が表示されるので、  
DVDのアイコンのWindowsを選択する。
4. XenServerのインストーラーが表示されるのでインストーラーにそって進める。   
ここからは支持に従って進むだけだから簡単！と思いきやキーボードが反応しない。  
落ち着いて外付けキーボードを挿せばOK!
5. インストールが完了したら、指示に従って再起動する。  
でも、じゃ～んって鳴っても、？マークが表示されるだけで起動できない。  
そこで、事前に準備しておいたrEFItの出番。rEFItのディスクを挿れたら、  
optionキーを押しながらMacBookを再起動。
6. 起動ディスクの選択画面からrEFItを選択する。
7. rEFItのメニューから`Start Partitioning Tool`を選択する。
8. 起動ディスクが選択されているので、`yes`とタイプする。
9. rEFItのディスクを抜いて再起動すると、無事、XenServerが起動する。
10. 起動が完了すると、こんな感じ  
 ![kobito.1436107354.805792.png](https://qiita-image-store.s3.amazonaws.com/0/25446/fd01130d-4df1-68fe-be4f-d3a3cbc07683.png "kobito.1436107354.805792.png")

## 管理ツールのインストール
XenServerが無事起動したら、Windowsに管理ツールをインストールする。
なので、ここからは、Windowsで作業するよ。

1. 管理ツールのダウンロード。  
http://xenserver.org/overview-xenserver-open-source-virtualization/download.html  
から、`XenCenter Windows Management Console`をダウンロードする。
2. ダウンロードしたツールをインストーラーに従ってインストールする。
3. インストールが完了したら`XenCenter`を起動する。
4. ツールバーの`新規サーバーの追加`をクリックし、サーバーを追加する。  
 * サーバー：XenServerのIPを入力する。  
  IPは、MacBook(XenServer)のStatusDisplayに表示されている。
 * ユーザー名：root
 * パスワード：インストール時に入力したパスワード。
5. 左側のツリーに表示されれば成功！  
![kobito.1436107578.284518.png](https://qiita-image-store.s3.amazonaws.com/0/25446/6048c21e-4012-0e22-8c3f-5eef3f441c6e.png "kobito.1436107578.284518.png")

6. あとは、仮想マシンを作成して好きに遊ぶだけ！！

## 注意！

ちゃんと調べてないけど、MacBookのモニターはOFFにできないみたい。
リンゴマークが光りっぱなし。

## 参考

http://shankerbalan.net/blog/xenserver-on-mac-min/
http://discussions.citrix.com/topic/351193-turn-of-lcd-screen-backlight/
お手軽！プレゼンでiPhoneの画面を綺麗に見せる方法

勉強会などのプレゼンでiPhoneの画面をプロジェクターに表示させるとき、みなさんはどうしていますか？ 

1. ビデオカメラに直接iPhoneを映す
2. iPhoneの画面を参加者に直接見せる

といった見せ方をしているならば、参加者はきっとiPhoneの画面が見えてなくて、辛い思いをしていることでしょう。**iPhoneの画面はQuickTime playerを使うと手軽に綺麗にディスプレイ上に表示させることができます**。プレゼン内容を正確に参加者に届けるために、この機能を使いましょう。
※ なお、今回紹介する機能はWindowsには対応していません。

#設定方法
1. MacとiPhoneをライトニングケーブルで接続します。
2. QuickTime Playerを起動し、[ファイル]→[新規ムービー収録]を選択します。
3. 録画ボタンの右にある下向き矢印（下図の赤枠部分）をクリックし、[カメラ]の箇所で接続したiPhone名を選択します。![スクリーンショット-2015-07-05-23.26.02.jpg](https://qiita-image-store.s3.amazonaws.com/0/67884/f0ee4bac-a53b-321f-1f35-1f0405bc3d27.jpeg)

以上の設定で、iPhoneの画面がMacのディスプレイ上に映しだされ、iPhoneでの操作がすべて反映されるようになります。また、2.で[マイク]もiPhoneに設定すると、iPhoneでの音声再生がMac側で再生されるようになります。

#ブログなどのデモ動画撮影にも便利
ブログなどでiPhoneの画面を綺麗に撮影したい時も便利です。例えば[BrowserSyncデモ - YouTube](https://www.youtube.com/watch?v=NKF5a9hJDMY)では、前述のムービー出力でiPhoneの画面をMacに映し、Macの画面をQuickTime Playerの画面収録機能を使って撮影しています。

#最後に
広い会場で行われる勉強会に参加したとき、スピーカーが「このiPhoneの画面を見てください！」と言って紹介された画面が全然見えないという悲しい思いをしたことが何回もあります。**せっかくの魅力的なプレゼンも、画面が見えなければ台無し**です。

この機能が広まって、みんながハッピーになれますように。
echo サーバ建設メモ (2日目)

諸君もしってのとおり [Starscream の導入に成功した](http://qiita.com/ntmukai/items/212dfc99c9578ee872d9)。
うごいてないけど。

で、次はおそらく echo サーバというものが必要。
送ったデータをそのまま返してくれるやつ。
echo サーバを使って送受信のテストをする。

これについては、最近とても気に入ってる Mojolicious を使う。
Perl のフレームワークですね。これで echo サーバを立てる。

とか書いたけど、実際にはもう echo サーバは立ておわってる。
しかも、何週間か前に。

このブログを参考にしたのは覚えている。
> Mojolicious::Lite で WebSocket を使ったチャットを作る(現時点：2012年3月10日で動くコード) - 僕のYak Shavingは終わらない
> http://kazuph.hateblo.jp/entry/20120310/1331396492

でも、手元で動いているのはこのコード。

```lang:perl
#!/usr/bin/env perl
use utf8;
use Mojolicious::Lite;
use DateTime;

get '/' => 'index';

my $clients = {};

websocket '/echo' => sub {
    my $self = shift;

    app->log->debug(sprintf 'Client connected: %s', $self->tx);
    my $id = sprintf "%s", $self->tx;
    $clients->{$id} = $self->tx;

    $self->on(message => sub {
        my ($self, $msg) = @_;

        my $dt   = DateTime->now( time_zone => 'Asia/Tokyo');

        for (keys %$clients) {
            $clients->{$_}->send({json => {
                hms  => $dt->hms,
                text => $msg,
            }});
        }
    });

    $self->on(finish => sub {
        app->log->debug('Client disconnected');
        delete $clients->{$id};
    });
};

app->start;

__DATA__
@@ index.html.ep
% layout 'main';
%= javascript begin
jQuery(function($) {
  $('#msg').focus();

  var log = function (text) {
    $('#log').val( $('#log').val() + text + "\n");
  };
  var ws = new WebSocket('ws://example.com:3000/echo');
  ws.onopen = function () {
    log('Connection opened');
  };
  ws.onmessage = function (msg) {
    var res = JSON.parse(msg.data);
    log('[' + res.hms + '] (' + res.name + ') ' + res.text);
  };

  $('#msg').keydown(function (e) {
    if (e.keyCode == 13 && $('#msg').val()) {
        ws.send($('#name').val() + "\t" + $('#msg').val());
        $('#msg').val('');
    }
  });
    });
% end
<h1>Mojolicious + WebSocket</h1>

<p>name<input type="text" id="name" />msg<input type="text" id="msg" /></p>
<textarea id="log" readonly></textarea>
<div>
</div>

@@ layouts/main.html.ep
<html>
  <head>
    <meta charset="<%= app->renderer->encoding %>">
    <title>WebSocket Client</title>
    %= javascript 'https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js'
    <style type="text/css">
      textarea {
          width: 40em;
          height:10em;
      }
    </style>
  </head>
  <body><%= content %></body>
</html>
```

上記ブログのコードと若干ちがうんだけど、
他のブログも参考にしたのか、自分で修正したのか覚えてないです。

ごめんなさい。
自分でも出典元が知りたい。

そういうわけで、まず上記コードの接続先を修正する。
そして、Web サーバに UP して下記のようにサーバを起動する。

```lang:shell
$ morbo /home/example/public_html/ws_server.pl
Server available at http://127.0.0.1:3000
```

echo サーバが起動した！

ブラウザで echo サーバの動作テストができる。
うまく動かなかったら Chrome のデベロッパーツールを見るのが楽。
http://example.com:3000/

![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/14157/72ffbdd2-42f9-85e0-71ab-f40cd0731348.png)
こんなふうに表示されて、なんとなくチャットができれば成功です。

おわり。
AWSで取得したドメインのネームサーバを引っ越すときはNSレコードの書き換えではダメ

### 背景
awsで取得したしたドメインのトップドメインをherokuで使いたかったのでネームサーバをRoute53からzerigoに引っ越した。
そのときハマったのでメモ。

awsで取得したドメインのDNSのレコードはRoute53で管理されている。
そこでNSレコードに引越し先のDNSサーバを指定してみてもなかなか引けるようにならない。
NSレコードのTTLが86400secに設定されているので時間がかかるのは覚悟していたものの待てど暮らせどnslookupの結果が変わらない。
公式ヘルプページにはNSレコードを書き換えるなと書いてある。
http://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/SOA-NSrecords.html
### 結論
Registed Domainsでドメイン自体のネームサーバを変更すれば反映された！
リアルタイムには変更できないので待てという通知がでる。
数分後に変更完了のメールが届き変更完了。

![スクリーンショット 2015-07-05 21.07.39.png](https://qiita-image-store.s3.amazonaws.com/0/62083/eb18bdbe-ad6d-4fc1-7473-ccb66bfbddb9.png)

Hosted ZonesのNSレコードを変更するユースケースはさくら等の外部DNSでネームサーバにroute53を指定し、さらに別のネームサーバにリレーするとき。
まず発生しないと思いますが。
[UnrealEngine] 4.8.1でOculus + Leapmotionを動かす


UE自体に不慣れなため、色々知らずにハマりました。
ので、そのメモ。

## UEはデフォルトでOculusに対応

UEはありがたいことに、デフォルトでOculus Riftに対応しています。
プレビュー自体に「VRプレビュー」という項目があるので、これで実行することで自動的にレンダリングがOculusモードになります。楽ちん。


### Runtimeに注意

ただ、Runtimeのversionがあっていないとこの「VRプレビュー」自体が非活性化されてしまって選択できない状態になっていました。
しばらく悩んでいたところ、Runtimeが古かっただけというオチ・・。


なので、適切にセットアップしていればどんなサンプルであれOculusで世界を覗くことができます。
特にUEはリアルな映像が売りで、Oculusで見るとそのリアルさに感動します。


## Leapmotionは公式と非公式プラグインあり

Leapmotionは公式と非公式のプラグインがあります。
公式のほうがいいかと思って最初試したんですが、Githubからソースコードを落としてきて自分でビルドしたエディタでないと使えないみたいでした。（いずれOculusみたいに対応する？）

しかもビルドできたはいいものの、起動時に毎回変なエラーが出るため非公式のほうにチャレンジしました。（エラー出てても動作はしてるから問題はないと言えばない）

[非公式プラグインはこちら](https://github.com/getnamo/leap-ue4)


### Leapmotionのセットアップ

プラグインの導入の仕方は[GithubのHow to install](https://github.com/getnamo/leap-ue4#how-to-install-it)を見てもらうとして、UE自体に不慣れだったために気づきづらかった点をメモしておきます。


### Game ModeをLeapmotion対応にする

どうやらセッティング用に「Game Mode」という[Blueprint](https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/index.html)があるようです。

[Game Modeについてはこちらを](https://docs.unrealengine.com/latest/INT/Gameplay/HowTo/SettingUpAGameMode/Blueprints/index.html)


#### Game Mode Blueprintを追加する

以下の画像は公式ドキュメントからの引用です。

![Kobito.QeEvxh.png](https://qiita-image-store.s3.amazonaws.com/0/5616/243d5162-aaaa-7444-7568-92036f80aa58.png "Kobito.QeEvxh.png")

コンテンツの「新規追加」から「Blueprint Class」を選択し、親クラスとして「Game Mode」を選択します。
すると、Game Modeを継承したBlueprintクラスが生成されるので、それをダブルクリックして編集します。

編集画面に行くと、非公式プラグインで説明されているクラスの変更箇所が「詳細タブ」に表示されているので、説明通りに変更します。


#### デフォルトGame Modeを変更する

最初、ここまでで実行すれば自動的にLeapmotionを認識して手のモデルが表示されるのかと思っていましたが、どうやらさらに設定が必要なようです。

「編集 > プロジェクト設定 > マップ&モード」の「Default Modes」を、上記で生成したBlueprintクラスに設定します。
これでセットアップが完了です。

あとはプレビューを実行するとLeapmotionが認識され、画面に手のモデルが表示されます。
Geocoder.geocodeでジオコーディング

## Geocoder.geocode( 住所・緯度経度などの情報 , コールバック関数 )

こんなように

```js
var geo = new google.maps.Geocoder();
geo.geocode({ address: address }, function(results, status) { ・・・ });
```
あるいは同じですが

```js
var geo = new google.maps.Geocoder();
var ad = {address: address};
geo.geocode(ad, getResult);

function getResult(results, status) { ・・・ }; //コールバック関数
```

**コールバック関数の引数**
results：検索結果のいろいろな情報
status：検索結果のステータス（正常にジオコードが返ってきたか？とか）

### 参考サイト
http://www.nanchatte.com/map/getLatLngByAddress.html
http://altarf.net/computer/google_apis/1642
http://libro.tuyano.com/index3?id=84001&page=4
PHPのswitchは要注意

PHPにも多くの言語と同様、`switch`文があります。ただし、注意すべき点がいくつかあります。

# 構文とフォールスルー
PHPの`switch`は、C言語と同様な構文になっています。

```php:switch構文
switch(式){
case 値1:
  実行される文;
  break;
case 値2:
  実行される文;
  break;
default:
  実行される文;
  break;
}
```

上の文を見ればわかるように、各所に`break;`が入っています。C言語と同様、PHPも`case`へは飛ぶだけで次のがあっても実行されてしまうので、次のところへ実行が進まないようにするには`break;`が必要です。逆に、もし意図的に複数の`case`を続けて実行する場合には、その旨コメントを入れておいたほうがいいでしょう。

# 値の比較
[公式のマニュアル](http://php.net/manual/ja/control-structures.switch.php)でもさらっとだけ触れられていますが、`switch`での比較は、**緩やかな比較**（`==`演算子と同様な比較）です。端的な例としては、

```php:trueとfalseを指定すると
switch($x){
case true:
  //ここには$xがtruthyなときに来る
  break;
case false:
  //ここには$xがfalsyなときに来る
  break;
default:
  //絶対にたどり着かない
}
```
というようになります。基本的に、`case`で書くものは型を揃えるようにして、そして整数であれば`switch((int)$x)`のようにキャストすることで、曖昧な比較の弊害を回避できます。文字列の場合、`"3"=="3.0"`なので、数値として認識されないように、`switch("#$x")`のように先頭へ何か文字を付けて、`case`にもそれ付きで書くという手段を取らないと問題は残ってしまいます。

# `case`に書けるもの
C言語では、`case`の後には定数式しか書けませんでしたが、PHPでは任意の式を書くことができます。これを積極的に利用する例として、（賛否両論はありますが）[switch(true)と書くことで、最初に真となったものを選ぶ](http://qiita.com/tkyk@github/items/ee0ab7bf502361f413d8)なんていう書き方もできてしまいます。

# `continue`
配列の各要素に対して評価を加えるなどで、`for`の中で`switch`を使うことがあるかもしれません。そのような場面で、`switch`の中で`continue`を使うと、その`continue`は**`switch`に対して働いて**、`break`と同じ扱いとなってしまいます（[PHPマニュアル](http://php.net/manual/ja/control-structures.continue.php)）。`continue 2;`として、外側のループへの適用を明記する必要があります。
ES6で書くIsomorphicアプリ入門 - Part2: ブラウザから使えるREPL

ES6で書くIsomorphicアプリ開発はまだGetting Started以前の知識しかありません。道のりは長そうですが、次世代の開発準備は少しずつしておきたいです。ClojureScriptにはiOSで動く[Ambly](https://github.com/omcljs/ambly)というREPLもあります。気になったときにターミナルを開かなくてもどこでもREPLが使えるようになれば、電卓の代わりにもなります。



[Getting Started with ES6 – The Next Version of JavaScript](http://weblogs.asp.net/dwahlin/getting-started-with-es6-%E2%80%93-the-next-version-of-javascript)のポストにブラウザからオンラインで使えるES6のREPLがいくつか紹介されています。

## オンラインブラウザ

[Traceur](https://google.github.io/traceur-compiler)や[Babel](https://babeljs.io/)のコンパイラのホームページにブラウザから使えるREPLが公開されています。インストールが不要なのでちょっと試す場合に一番お手軽です。

* [ES6 Fiddle](http://www.es6fiddle.com/)
* [Traceur Transcoding Demo](https://google.github.io/traceur-compiler/demo/repl.html#)
* [Babel REPL](https://babeljs.io/repl/)
* [TypeScript Playground](http://www.typescriptlang.org/Playground)


## Chrome Extension

[Scratch JS](https://github.com/richgilbank/Scratch-JS)はChrome Extensionです。開発者のコメントにもありますが、誰かのブログを読んでいて試したいコードがあったときに、`option + command + I`を押してDeveloper Tools からすぐに確認できます。

* [Scratch JS Chrome Extension](https://chrome.google.com/webstore/detail/scratch-js/alploljligeomonipppgaahpkenfnfkn)


## DockerとCloud9

オフィシャルの[io.js](https://registry.hub.docker.com/u/library/iojs/)イメージを使います。現在の最新バージョンの2.3です。[io.jsにおけるES6](https://iojs.org/ja/es6.html)にフラグについて書いてあるように、アロー関数はまだデフォルトで対応されていません。harmonyフラグをつけて起動する必要があります。

```bash
$ docker run --rm -it iojs:2.3 iojs --harmony_arrow_functions
```

私の場合[io.js](https://registry.hub.docker.com/u/library/iojs/)をベースイメージにして[Cloud9をクラウド上](http://qiita.com/masato/items/9f1ee60b895a03fffc46)にブラウザから使える開発環境を作っています。

```bash:Dockerfile
FROM iojs:2.3
MAINTAINER Masato Shimizu <ma6ato@gmail.com>

RUN apt-get update && apt-get install -y vim

RUN git clone https://github.com/c9/core.git /cloud9 && \
    cd /cloud9 && ./scripts/install-sdk.sh

RUN npm install hexo-cli -g

RUN wget -O - https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz | tar -xzC /usr/local -f - && \
    echo "export GOPATH=/workspace/gocode" >> /root/.profile && \
    echo "export PATH=$PATH:/usr/local/go/bin:/workspace/gocode/bin" >> /root/.profile

WORKDIR /workspace

RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
```

Cloud9のターミナルからES6のREPLが実行できます。

![cloud9-es6-repl.png](https://qiita-image-store.s3.amazonaws.com/0/43745/dbcdc5aa-acf0-403e-9a4a-77bd49f3a157.png)
Cocos2d-x OneByOneTouch基本Code

![19420874_m_Part2X2.jpg](https://qiita-image-store.s3.amazonaws.com/0/85191/eb18648c-0623-501b-ea12-a0d02aaab700.jpeg) TouchOneByOne メモ

まず
**scene.cpp-->file**
```//touch　listener set
   auto touchListener=EventListenerTouchOneByOne::create();
    //set touch
   touchListener->setEnabled(true);
    // touchbegan
   touchListener->onTouchBegan = CC_CALLBACK_2(Scene::onTouchBegan,this);
    touchListener->onTouchMoved = CC_CALLBACK_2(Scene::onTouchMoved,this);
    touchListener->onTouchEnded = CC_CALLBACK_2(Scene::onTouchEnded,this);
    touchListener->onTouchEnded = CC_CALLBACK_2(Scene::onTouchCancelled,this);   
    //set dispatcher
   _eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);
```


**scene.h-->file**

```   //onTouchBegan
    bool onTouchBegan(cocos2d::Touch *touch,cocos2d::Event *event);
    //onTouchMoved
    void onTouchMoved(cocos2d::Touch *touch,cocos2d::Event *event);
    //onTouchEnded
    void onTouchEnded(cocos2d::Touch *touch,cocos2d::Event *event);
    //onTouchCancelled
    void onTouchCancelled(cocos2d::Touch *touch,cocos2d::Event *event);
```

:open_mouth: 完了〜
Illustrator CCでCSSのグラデーションを作ると捗る

[Adobe Illustrator CC](http://www.adobe.com/jp/products/illustrator.html)では、レイヤーのスタイルをCSSとして書き出す便利な機能があります。今回は、この機能で**CSS3のグラデーション用のコードを書き出す方法とそのコードの実用性を紹介します**。是非お試しください。

#Illustrator CCでのCSS プロパティ書き出し
Illustrator CCでCSS プロパティを書き出す方法を見て行きましょう。
[ウインドウ]→[CSS プロパティ]より、CSS プロパティを書き出すウインドウを表示させます。この状態で、グラデーションを要素を選択すると、CSS プロパティウインドウにグラデーションのCSSコードが書き出されます。
![illustcss.png](https://qiita-image-store.s3.amazonaws.com/0/67884/3b9d2882-ef1f-d3cf-017d-579de4956cf6.png)

#書きだされたCSSコードは実用的
Photoshop CCにもCSSを書き出す機能がありますが、グラデーションのコードを実際に使用する場合はいくつか手を加える必要がありました(※[Photoshop CCでCSSグラデーションを書き出すときは要注意！](http://qiita.com/tonkotsuboy_com/items/56e1a765fae96a4c1f38))。しかし、Illustratorで書き出されたCSSコードは**古いIEを含め、クロスブラウザ対策がしっかりとなされており、手を加えずそのまま使用することが可能**です。実際に書き出されたコードは以下です。

```lang:CSS
background : -moz-linear-gradient(0% 100% 45deg,rgba(233, 95, 118, 1) 0%,rgba(246, 180, 198, 1) 100%);
background : -webkit-linear-gradient(45deg, rgba(233, 95, 118, 1) 0%, rgba(246, 180, 198, 1) 100%);
background : -webkit-gradient(linear,0% 100% ,100% 0% ,color-stop(0,rgba(233, 95, 118, 1) ),color-stop(1,rgba(246, 180, 198, 1) ));
background : -o-linear-gradient(45deg, rgba(233, 95, 118, 1) 0%, rgba(246, 180, 198, 1) 100%);
background : -ms-linear-gradient(45deg, rgba(233, 95, 118, 1) 0%, rgba(246, 180, 198, 1) 100%);
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#E95F76', endColorstr='#F6B4C6' ,GradientType=0)";
background : linear-gradient(45deg, rgba(233, 95, 118, 1) 0%, rgba(246, 180, 198, 1) 100%);  
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#E95F76',endColorstr='#F6B4C6' , GradientType=1);
```

Webkit系の古いブラウザでは-webkit-linear-gradient()という記述が必要ですが、それも生成されています。また、IEの8や9ではCSS3のグラデーションが使えませんが、その代わりにIEの独自フィルターを使用してグラデーションを表現しています。**これらはグラデーションをクロスブラウザで表現する場合の常套テクニックで、自動でこのコードが書き出されるのはコーディング時間の短縮につながります**。

こちらのCSSコードを使ったグラデーション表示のデモをjsdo.itにアップしました。
[Illustrator CCのCSS書き出し機能によるグラデーション - jsdo.it](http://jsdo.it/tonkotsuboy/Xauy)

#ベンダープレフィックスは設定で制御可能

付与するベンダープレフィックスは、設定により制御が可能です。CSS プロパティウインドウの下部のボタンを押すと、設定画面が表示されます。
![](https://qiita-image-store.s3.amazonaws.com/0/67884/3d9d2490-d324-e2ca-0a84-34367cb3d730.png)
IntelliJ IDEA 日本語化


# 環境
- Window 7 64bit版
- IntelliJ IDEA Community Edition 14.1.4

# 手順

1. 日本語化ファイルをダウンロード
    [IDEA_resources_jp](https://github.com/yuuna/IDEA_resources_jp)
2. 下記に**resources_jp.jar**をコピー  

~~~markdown
C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 14.1.4\lib
~~~
VLCでmovをm4vに変換する。

古いほにゃららのCDに含まれているMOVファイルをmp4に変換する道のり。

まずは、VLCで
hoge1.movをhoge1.m4vに
hoge2.movをhoge2.m4vに
変換。

ffmpeg -i hoge1.m4v -c copy -bsf:v h264_mp4toannexb hoge1.ts
ffmpeg -i hoge2.m4v -c copy -bsf:v h264_mp4toannexb hoge2.ts

ffmpeg -i "concat:hoge1.ts|hoge2.ts" -c copy hoge.ts

ffmpeg -i hoge.ts -vcodec libx264 -acodec mp3 hoge.mp4
git.exeの場所＠SourceTree


IntelliJ IDEA で 聞かれたのでメモ

~~~ markdown
C:\Users\username\AppData\Local\Atlassian\SourceTree\git_local\bin\git.exe
~~~


![08_intellij.jpg](https://qiita-image-store.s3.amazonaws.com/0/85009/3567f59d-4929-bf90-f470-7dfc71622042.jpeg)
ライブラリとフレームワークの違い

## 前書き
開発中で、ほぼすべてのプロジェクトがライブラリとフレームワークを利用しています。
ライブラリとフレームワークが区別つかない、設計時に困るケースはあると思います。
それで、ライブラリはフレームはなんにか違うのかを調べました。
### ライブラリは呼ばない限り何にも実行されない　
ユーザの指示コードがなければ、ライブラリは処理を行わないです。
ライブラリ単体では処理が行わないこと。

たとえば、ログ記録、メール送信などのライブラリはユーザで初期化して、処理するメソッドを呼ばない限りは、処理は実行されません。

### フレームワークは利用時に既に色々処理してくれて、後は詳細を埋めるだけ　
フレームワークは逆の世界です。

初期化から実処理、終了までの流れを管理しています。

ユーザーは穴を埋めて行けば、予想通りの動作実現してくれます。

これはソフトウェア工学において、制御の反転（Inversion of Control、IoC）と呼ばれています。

たとえば、rails、playなどのMVCフレームワークでは、ユーザは必要なrouting、view、controller、modelを登録するだけで、動くアプリになります。

## 終わり
プロジェクト開発時には、大体プロジェクト専用のライブラリ群を自社開発必要があり、フレームワークと混乱せずに作りましょう！

## 参考
[wiki 制御の反転](https://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E3%81%AE%E5%8F%8D%E8%BB%A2)
Photoshop CCでCSSのグラデーションを書き出すときは要注意


[Adobe Photoshop CC](http://www.adobe.com/jp/products/photoshop.html)では、レイヤーのスタイルをCSSコードとして書き出す便利な機能があります。しかし、**CSS3のグラデーションのコードを使用する場合はコードに不足があるため要注意**です。

(※ 2017/12/27追記 : Photoshop CC 2018でも同様の現象)

#Photoshop CCでのCSS書き出し
Photoshop CCでCSS3のグラデーションコードを書き出してみましょう。グラデーションを設定したレイヤーで右クリックして、メニューから[CSSをコピー]を選択します。
![photoshopCSS.png](https://qiita-image-store.s3.amazonaws.com/0/67884/e8140ea3-03bf-3b3d-2844-96670284a771.png)

生成されたCSSのグラデーション設定部分だけを抜き出すと以下のようになります。

```css:CSS
background-image: -moz-linear-gradient( 45deg, rgb(233,95,118) 0%, rgb(246,180,198) 100%);
background-image: -webkit-linear-gradient( 45deg, rgb(233,95,118) 0%, rgb(246,180,198) 100%);
background-image: -ms-linear-gradient( 45deg, rgb(233,95,118) 0%, rgb(246,180,198) 100%);
```

#書き出されたグラデーション用コードの問題点と解決案
書き出された上記のCSSを実際のコードで使用するに場合、2つの大きな問題点があります。
##問題点1 グラデーションの書き方が異なるブラウザがある
グラデーションのコードはブラウザのバージョンによって違います。特にAndroid2系などの**古いWebkitブラウザでは、上記のコードではグラデーションがかからない**場合があります。古いWebkitブラウザにおけるグラデーションのコードは以下です。

```css:CSS
background-image: -webkit-gradient(linear, left bottom, right top, color-stop(0%,rgb(233,95,118)), color-stop(100%,rgb(246,180,198)));
```

##問題点2 ベンダープレフィックスが不要になった時の対応がなされていない
将来的にCSS3が正式に勧告された場合、**ベンダープレフィックスを使わないコーディングが理想**です。したがって、前述のPhotoshopのコードにはベンダープレフィックスなしの以下の記述が加えられるべきです。

```css:CSS
background-image: linear-gradient( 45deg, rgb(233,95,118) 0%, rgb(246,180,198) 100%);
```

なお、CSS3のグラデーション機能自体も正式勧告ではない（http://www.w3.org/Style/CSS/current-work ）ので、このコード自体が変わる可能性はあります。

##解決案とデモ
上記より、Photoshop CCで書き出されたCSS3のグラデーションコードを安全に使用するためのコードは以下になります。

```css:CSS
background-image: -webkit-gradient(linear, left bottom, right top, color-stop(0%,rgb(233,95,118)), color-stop(100%,rgb(246,180,198)));   /*古いWebkitブラウザ用の記述*/
background-image: -moz-linear-gradient( 45deg, rgb(233,95,118) 0%, rgb(246,180,198) 100%);
background-image: -webkit-linear-gradient( 45deg, rgb(233,95,118) 0%, rgb(246,180,198) 100%);
background-image: -ms-linear-gradient( 45deg, rgb(233,95,118) 0%, rgb(246,180,198) 100%);
background-image: linear-gradient( 45deg, rgb(233,95,118) 0%, rgb(246,180,198) 100%);  /*ベンダープレフィックスなしの記述*/
```

こちらのCSSコードを使ったグラデーション表示のデモをjsdo.itにアップしました。
[Photoshop CCのCSS書き出し+αのグラデーション - jsdo.it](http://jsdo.it/tonkotsuboy/2hUl)

#最後に
Photoshop CCで角丸やシャドウを使ってデザインしたとき、CSS書き出し機能は非常に便利で、コーディングの時は重宝しています。しかし、グラデーションのコードはそのまま使うのは危険なので、不足しているコードを足したり、[Ultimate CSS Gradient Generator] (http://www.colorzilla.com/gradient-editor/)のようなWebツールを使うといいでしょう。
CDN利用時の実IP取得、国別フィルタは、Nginxで処理する

#IPフィルタ
CDN利用時に、実IPのかわりにCDNのIPが来る場合。
(AWSの一部のサービスでも同じ方法で。)

・iptablesで見えるのは、CDNのIPなので注意。
・処理対象がHTTPヘッダなので、iptablesではなく、Nginxなどで処理する。
・CDNが付けてくれる、X-Forwarded-Forなどを利用する。

Nginx
[Module ngx_http_realip_module](http://nginx.org/en/docs/http/ngx_http_realip_module.html) が必要。
ビルド時のconfigに、--with-http_realip_module をつける。

set_real_ip_from、real_ip_headerは、
>Context: 	http, server, location

なので、http、server、locationなどで処理する。

>set_real_ip_from　CDNのネットワークアドレス;
>real_ip_header    X-Forwarded-For;

または、

>set_real_ip_from　CDNのネットワークアドレス;
>real_ip_header CF-Connecting-IP;

※CF-Connecting-IPは、CDNがCloudFlareの場合に利用可能。

参考:
[How do I restore original visitor IP with Nginx?](file:///F:/Projects/Linux/data/Cloudflare/How%20do%20I%20restore%20original%20visitor%20IP%20with%20Nginx%20%20%E2%80%93%20CloudFlare%20Support.htm)
[CloudFlare IP Ranges](https://www.cloudflare.com/ips)

----
#国別フィルタ

・iptablesで見えるのは、CDNのIPなので注意。
・処理対象がHTTPヘッダなので、iptablesではなく、Nginxなどで処理する。
・CDNが付けてくれる、CF-IPCOUNTRYなどを利用する。
　(または、set_real_ip_fromで実IPに戻したあとに処理する。・・おそらく重い。)

※[if](http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if)文での分岐を増やさないために、[map](http://nginx.org/en/docs/http/ngx_http_map_module.html#map)を使って、CF-IPCOUNTRYで渡された情報を、yes または noに振り分けます。
(allow、yes、noは、別の名前でも可)
例:JPだけをyesにする場合。
httpブロックで
>```
map $http_cf_ipcountry $allow {
    default no;
    JP yes;
}
```

serverブロックまたはlocationブロックで
>```
if ($allow = no) {
    return 403;
}
```

※returnが表示するのは、Nginxのデフォルトのエラーページです。
　(error_pageで指定したページではありません。)
※[return](http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return)は、300番台(301, 302, 303, 307)以外は、別のアドレスに転送できません。
※転送できないエラータイプの場合は、
>return code [text];

として解釈されるので、転送先だと思って書いたアドレスが、そのままテキストとして表示されます。要注意。

参考:
[Using CloudFlare for country blocking](http://nginxlibrary.com/using-cloudflare-for-country-blocking/)
Google Play Service導入で不要なパーミッションが勝手に追加される

先日、個人で公開しているアプリで広告を表示するために導入していたGoogle Play Serviceをバージョンアップしたところ、AndroidManifestに書かれていないにも関わらず位置情報やらアカウント情報へのアクセスのパーミッションが追加されてしまいました。
公開後にユーザからの指摘で気が付き、慌てて対応したので同じ失敗をする人が少しでも減るようにメモ。

## 起こったこと

個人で公開しているアプリがもともと持っていたパーミッションはネットワーク通信とシステムオーバーレイ、バイブレーションにアプリ内課金だけでした。
しかし、Google Play Serviceを7.0.0から7.5.0にアップデートしたところ位置情報とアカウント、ストレージへのアクセスのパーミションが勝手に追加されました。
もちろんAndroidManifestには自分では何も追記していません。

7.0.0以降のバージョンを幾つか試してみましたが、どうやら7.5.0からこの仕様になったようです。

## 調べてみる

`app/build/output/logs/`に`manifest-merger-[flavor]-report.txt`というファイルが生成されています。
こいつの中に↓のようなログが幾つか吐かれているはずです。お前か、勝手にAndroidManifestに追加したやつは...

```
uses-permission#android.permission.ACCESS_NETWORK_STATE
ADDED from AndroidManifest.xml:8:5
MERGED from com.google.android.gms:play-services-ads:7.5.0:21:5
MERGED from com.google.android.gms:play-services-analytics:7.5.0:22:5
MERGED from com.google.android.gms:play-services-analytics:7.5.0:22:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:20:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:20:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:20:5
MERGED from com.google.android.gms:play-services-nearby:7.5.0:19:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:20:5
```

今度は`app/build/intermediates/manifets/full/[flavor]/`の中にあるマージ後のAndroidManifestを見てみます。
なにが追加されたかわかりやすくするために、一旦元々のAndroidManifestからはすべての権限を削除しておきます。
以下が生成されたAndroidManifestに書かれていたパーミッション。盛り盛りですね。

```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

<android:uses-permission
    android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="18" />

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
```

自分のアプリに一切権限を追加していなくてもGoogle Play Serviceを導入しただけでこれだけのパーミッションが追加されることになります。
また、パーミッションだけでなくOpenGLの機能まで要求しています。

## 回避方法

Google Play Service 6.5.0から可能になった部分導入で使う機能のみ追加することで不要なパーミッション追加を避ける事が出来ます。
例えば、今回自分の場合だとAdmob関連の機能だけ追加できればいいので

```groovy
compile 'com.google.android.gms:play-services:7.5.0'
```

ではなく

```groovy
compile 'com.google.android.gms:play-services-ads:7.5.0'
```

とすることで広告の表示に必要な権限だけに抑えることができます。
その他、指定できるモジュールは[公式のドキュメント](https://developers.google.com/android/guides/setup?hl=ja)を参照してください。

## まとめ

Google Play Service 7.5.0から、今回書いたように必要なパーミッションが自動で追加されるようになったようです。
導入時に必要なパーミッションを気にする必要がなくなった反面、なんでもかんでも追加しているとアプリに必要ないパーミッションまで要求してしまうことになります。
Google Play Serviceの導入時や、既存アプリでのバージョンアップ時には気をつけるようにしましょう。

## 参考

[Setting Up Google Play Services   |   Google APIs for Android   |   Google Developers](https://developers.google.com/android/guides/setup?hl=ja)
Qwik LABS: AWS Identity and access management(IAM)

#AWS Identity and access management(IAM)をやってみた！！！

![スクリーンショット 2015-07-05 18.53.58.png](https://qiita-image-store.s3.amazonaws.com/0/84382/c3c479f8-2d9c-36ab-f03c-f33b210a4f90.png)

宣言！今日から見やすい、そしてわかりやすいものを書いていきたいと思います。
なので写真やコードなどをできるだけ使って、ヴィジュアライズしていきます。

ということ今日はqwik lab のIAMをやります。

ちなみにこのqwil lab はpdfにも保存できて便利です。

![スクリーンショット 2015-07-05 19.02.21.png](https://qiita-image-store.s3.amazonaws.com/0/84382/65c53f03-36ff-0a3e-4c3b-9a01b33c191d.png)

ということでこのtrainingの指示に沿ってやってみました。
ちなみに中身はこんな感じです。

![スクリーンショット 2015-07-05 19.12.08.png](https://qiita-image-store.s3.amazonaws.com/0/84382/06c8aaf2-4acf-0fb3-ca54-a597bd52b232.png)

ちなみにアウトラインは以下のようになっています。

1 AWS　IAM　の管理グループの許可を作成
2 ユーザーを作ったグループに入れる
3　パスワードを作る
4　IAM のサインインのURLをゲット
5　許可で制限されたグループを作る
6 ユーザーをそのグループに入れる

ここではポイントを紹介していきます

![スクリーンショット 2015-07-05 19.09.48.png](https://qiita-image-store.s3.amazonaws.com/0/84382/00fd676c-3518-edb3-1d57-4ff93dd4c594.png)

主に使うのは3つだけです。

①group　②user ③Account setting

今回は

user名がadeleという設定でやっていきました。

４までが終わるとユーザー名、パスワードを入力するページがあります。

![スクリーンショット 2015-07-05 19.28.04.png](https://qiita-image-store.s3.amazonaws.com/0/84382/38420d5f-f5cd-9d27-2766-7af5946968a2.png)

このときにexcelでユーザー名とパスワードが載ったものをダウンロードします。

で、adeleとしてサインインすると・・・

![スクリーンショット 2015-07-05 19.31.06.png](https://qiita-image-store.s3.amazonaws.com/0/84382/32f1155e-26e0-705e-5fd7-c25d34d7733b.png)

user名がadeleに！！！！

これでOKです。

ここで注意。

![スクリーンショット 2015-07-05 19.41.50.png](https://qiita-image-store.s3.amazonaws.com/0/84382/67747355-8e23-fc6e-8c4b-4106d0db6e4d.png)

End your lab！！（sigh outしましょう）　じゃないと。。。

![スクリーンショット 2015-07-05 19.28.04.png](https://qiita-image-store.s3.amazonaws.com/0/84382/0864e32f-855a-06b4-83d5-993aca70a2a9.png)

この画面が何回も出てきて面倒！

**まとめ**
IAM のメリットとしましては、企業の AWS インフラストラクチャサービスにおけるユーザーのアクセスレベルを制御できます。AWS IAM を使用して、各ユーザーは一意のセキュリティ証明書を持つことができるため、パスワードやキーを共有する必要がなくなり、 最低の権限とロールの隔離というセキュリティのベストプラクティスが可能になります。 :tada: 

すごい！！　これからも、毎日AWSについてアウトプットして少しずつですが、
幅を広げていけたらいいなと思います。

皆様もご指導よろしくお願いします。