OmniAICreator/Qiita-1.07M huggingface dataset:
Coraデータセットの整形

# Coraデータセット
Coraデータセットは，論文のタイトル，著者，citation，出版年などがあるMLのためのデータセット．
https://sites.google.com/site/semanticbasedregularization/home/software/experiments_on_cora
以下，pythonを使って整形する．

# タイトル，著者，発表者を取ってくる
```
import numpy as np
import pandas as pd
import bs4
import re

content=pd.read_table('./cora/papers', header=None)
content_NoNan=content.dropna()
tag=content_NoNan[2]
paperID=content_NoNan[0]
```
ここで，```<title><author><year>```の全てを取ってくる．

```
title_pre=[]
authors_pre=[]
year_pre=[]
for line in tag:
    soup=bs4.BeautifulSoup(line)
    title_pre.append(soup.find_all('title'))
    authors_pre.append(soup.find_all('author'))
    year_pre.append(soup.find_all('year'))
```
タグを消す．

```
dict={}
p = re.compile(r"<[^>]*?>")
for ID,i,j,k in zip(paperID, title_pre, authors_pre, year_pre):
    if len(j) !=0 and len(k) != 0:
        title=p.sub("", str(i[0]))
        authors=p.sub("", str(j[0]))
        year=p.sub("", str(k[0]))
        dict.update({ID:[title, authors, year]})
```

dictには，paperIDでtitle, author, yearを持ってくる辞書ができる．
Gradle 2 にしたら初回ビルドに6分かかるようになった→初回1分になった

**進行中のため、正しいソリューションかはわかりません**

# Instant Run 使いたい

今年に入って、Androidのビルド時間が大きく高速になるという触れ込みで一気に広まった、Gradle 2.10 および Android Plugin for Gradle 2.0.0。でも……

**移行してみたら、ビルド時間が6倍になった……移行するのやめた**

という感じで、すっかりアップグレードできないまま半年くらい過ごしてきました。

でも、もう我慢ならない！

# 対策: javaMaxHeapSize "2g" の記述を削除した

とにかくいろんなパターンを試して、もっとも**「速め」**なタイムを出したのがこれ。
同様のプロジェクトもあるかもしれません。

**build.gradleに記述していた`javaMaxHeapSize "2g"`の記述を削除**しました。

すると、初回ビルドに6分かかっていたプロジェクトが……
**初回ビルドでも、1分前後でビルドできるようになりました！**

※ gradle.propertiesの `org.gradle.jvmargs=-Xmx****m` は残します。

# 結局何がベストソリューションなのか

わかりません。
ただ、今回は、高速化する手法の1つとして知られていた`javaMaxHeapSize "2g"`を削除したらビルドが速くなった、というだけのこと。
でも、`org.gradle.jvmargs=-Xmx****m`と重複指定みたいになっていたのが良くなかったのかもしれませんね……。

実際、[Android Plugin for Gradle](https://developer.android.com/studio/releases/gradle-plugin.html)のページでは、一度も`javaMaxHeapSize`についての記述が出てこなかったですし……。
nginx が socket に書き込めない問題


SELinuxが有効になっていると nginx が puma.sock に書き込めず以下のようなエラーが /var/log/nginx/error.log に出てた

```
2016/07/22 18:46:25 [crit] 27059#27059: *63 connect() to unix:/home/ec2-user/hoge/tmp/sockets/puma.sock failed (13: Permission denied) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: localhost, request: "GET /admin HTTP/1.1", upstream: "http://unix:/home/ec2-user/hoge/tmp/sockets/puma.sock:/admin", host: "xxx.xxx.xxx.xxx"
```

audit.log に以下のようなメッセージが出てる

```
type=AVC msg=audit(1469180785.073:858): avc:  denied  { write } for  pid=27059 comm="nginx" name="puma.sock" dev="xvda2" ino=25826156 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1469180785.073:858): arch=c000003e syscall=42 success=no exit=-13 a0=11 a1=246d778 a2=6e a3=7fffdd4341e0 items=0 ppid=27058 pid=27059 auid=4294967295 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)
```


SELinux の有効無効を確認

```
$ sudo getenforce
Enforcing
```

有効になってる。
SELinux を無効化すれば解決するが、無効にせず socket の問題を解決したい。

`audit2allow -m`コマンドでポリシーモジュールを作成する。

```
$ sudo cat /var/log/audit/audit.log | grep nginx | audit2allow -m nginx

module nginx 1.0;

require {
        type unconfined_t;
        type httpd_t;
        type user_home_t;
        class sock_file write;
        class unix_stream_socket connectto;
}

#============= httpd_t ==============
allow httpd_t unconfined_t:unix_stream_socket connectto;
allow httpd_t user_home_t:sock_file write;
```

上記で問題なさそうなら `audit2allow -M` でモジュールパッケージ（バイナリファイル）を作成。

```
$ sudo cat /var/log/audit/audit.log | grep nginx | audit2allow -M nginx
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i nginx.pp
```


`semodule -i` で作成したモジュールパッケージを適用

```
$ sudo semodule -i nginx.pp
```

これで nginx が動くようになった。


## 参考

[SELinux + Nginx ポリシー設定 - URAGAMI](http://blog.higty.xyz/archives/242/)

## 追記

そもそも、ユーザのディレクトリにあるファイルにアクセスさせるような配置方法が問題ある気がする、、、
【備忘録】RubyのWEBrickのワンライナーの便利利用法

# 概要

HTTP通信を行うドキュメントを開発していると、HTTP通信の中身を確認したい時が結構あります。

[Faraday](https://github.com/lostisland/faraday)などでは、ログに出力にある程度出力できますが、POST時のボディや`:multipart`を使った場合には、送信元からだとなかなか確認できません。

その際にどうワンライナー側で確認するにはどうしたらいいかをまとめて見ました。


# 基本

```rb
ruby -rwebrick -e "WEBrick::HTTPServer.new( DocumentRoot: '.', Port: 80 ).start"
```

こちらは一般的なワンライナーですね。

これで`localhost`の`80`番ポートにカレントディレクトリが公開されます。

```text:実行結果
[2016-07-22 18:57:17] INFO  WEBrick 1.3.1
[2016-07-22 18:57:17] INFO  ruby 2.2.4 (2015-12-16) [x64-mingw32]
[2016-07-22 18:57:17] INFO  WEBrick::HTTPServer#start: pid=12112 port=80
xxxxxxxxxx - - [22/Jul/2016:18:57:21 東京 (標準時)] "GET /e.txt HTTP/1.1" 200 1
- -> /e.txt
```

当然、ボディもヘッダも出ません。


# ボディのみをそのまま出力する

```rb
ruby -rwebrick -e "WEBrick::HTTPServer.new( RequestCallback: Proc.new{|req,res| puts req.body }, DocumentRoot: '.', Port: 80).start"
```

`RequestCallback:`はリクエストがあった際に呼ばれる`Proc`オブジェクトを指定できるキーで、リクエスト前に呼ばれます。

`req`と`res`はそれぞれ`WEBrick::HTTPRequest`のインスタンスと`WEBrick::HTTPResponse`のインスタンスが設定されますが、リクエスト直後に呼び出されるので、レスポンス側にデータはありません。

```text:実行結果
[2016-07-22 18:42:24] INFO  WEBrick 1.3.1
[2016-07-22 18:42:24] INFO  ruby 2.2.4 (2015-12-16) [x64-mingw32]
[2016-07-22 18:42:24] INFO  WEBrick::HTTPServer#start: pid=3736 port=80
-------------RubyMultipartPost
Content-Disposition: form-data; name="test"; filename="local.path"
Content-Length: 9
Content-Type: text/plain
Content-Transfer-Encoding: binary

meta_data
-------------RubyMultipartPost
Content-Disposition: form-data; name="test2"; filename="local.path"
Content-Length: 10
Content-Type: text/plain
Content-Transfer-Encoding: binary

meta_data2
-------------RubyMultipartPost--

xxxxxxxxxx - - [22/Jul/2016:18:42:24 東京 (標準時)] "GET /e.txt HTTP/1.1" 200 1
- -> /e.txt
```

ボディを出すことが出来ました。


# 全部だす

```rb
ruby -rwebrick -e "WEBrick::HTTPServer.new( DocumentRoot: '.',RequestCallback: Proc.new{|req,res| puts req.raw_header; puts ''; puts req.body }).start"
```

ヘッダも含めて全部HTTPっぽく出すにはヘッダとボディをそれぞれ出す必要があります。

そのためのメソッドが`WEBrick::HTTPRequest`クラスには`raw_header`という名前でありますので、これを利用して出力しています。

```text:実行結果
[2016-07-22 18:48:13] INFO  WEBrick 1.3.1
[2016-07-22 18:48:13] INFO  ruby 2.2.4 (2015-12-16) [x64-mingw32]
[2016-07-22 18:48:14] INFO  WEBrick::HTTPServer#start: pid=3344 port=80
User-Agent: Faraday v0.9.2
Content-Type: multipart/form-data; boundary=-----------RubyMultipartPost
Content-Length: 425
Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept: */*
Connection: close
Host: localhost

-------------RubyMultipartPost
Content-Disposition: form-data; name="test"; filename="local.path"
Content-Length: 9
Content-Type: text/plain
Content-Transfer-Encoding: binary

meta_data
-------------RubyMultipartPost
Content-Disposition: form-data; name="test2"; filename="local.path"
Content-Length: 10
Content-Type: text/plain
Content-Transfer-Encoding: binary

meta_data2
-------------RubyMultipartPost--

xxxxxxxxxx - - [22/Jul/2016:18:48:14 東京 (標準時)] "GET /e.txt HTTP/1.1" 200 1
- -> /e.txt
```

ヘッダも出るようになりました。
【プログラマーのための数学】行列式

## 目次
[プログラマーのための数学 - 目次](http://qiita.com/Esfahan/items/ab63e7c5bcf812dff2a9)

## 行列式とは
まず初めに、**行列式とは、[行列](http://qiita.com/Esfahan/items/afd4acf9ed264bb71f78)とは別物です。**
行列式とは、行列の成分同士の演算のことで、スカラー量になります。
また、行列式が定義されるのは、正方行列のときのみです。

## 数式
このような行列Aがあったとき、

![det001.png](https://qiita-image-store.s3.amazonaws.com/0/105936/0c870fa3-a8ea-02f0-627a-5a2d56e8eb9a.png)
出典：[物理のかぎしっぽ](http://hooktail.sub.jp/mathInPhys/determinant/)

行列式は次のようになります。

![det002.png](https://qiita-image-store.s3.amazonaws.com/0/105936/79a827e1-f76e-adbe-6d94-de17c71c08f8.png)
出典：[物理のかぎしっぽ](http://hooktail.sub.jp/mathInPhys/determinant/)

こちらも同等です。

![det003.png](https://qiita-image-store.s3.amazonaws.com/0/105936/66cdec3d-317e-c6d2-9c45-b98e0e6f7c45.png)
出典：[物理のかぎしっぽ](http://hooktail.sub.jp/mathInPhys/determinant/)

detとは、determinantという行列式を意味する英語の略です。

## 3次以上の行列式の計算方法
下記のような3x3の行列式は、このような計算方法になります。

![det004.png](https://qiita-image-store.s3.amazonaws.com/0/105936/25e35f0d-4bbf-e651-d633-65da47471bc3.png)
出典：[物理のかぎしっぽ](http://hooktail.sub.jp/mathInPhys/determinant/)

どういう規則になっているかというと、係数と該当の係数の行列以外の数値を掛けあわせます。

![det005.png](https://qiita-image-store.s3.amazonaws.com/0/105936/467f6d19-4727-f715-7d6c-b7a989af7662.png)![det006.png](https://qiita-image-store.s3.amazonaws.com/0/105936/30dee7ff-11fb-8951-3675-be212e3e1c45.png)![det007.png](https://qiita-image-store.s3.amazonaws.com/0/105936/4512619e-2303-e466-210d-e4375d758c63.png)
出典：[物理のかぎしっぽ](http://hooktail.sub.jp/mathInPhys/determinant/)

そして、下記のように、係数の位置によって、プラスかマイナスなのかが決まります。
a11はブラス、a21ならマイナスということになります。
![det008.png](https://qiita-image-store.s3.amazonaws.com/0/105936/b13305f6-a212-e287-c00c-4c4221781a6d.png)
出典：[物理のかぎしっぽ](http://hooktail.sub.jp/mathInPhys/determinant/)


係数を別の軸で取っても、計算の解は同じになります。
![det009.png](https://qiita-image-store.s3.amazonaws.com/0/105936/62376020-2bce-ab9d-57d7-1812deab9f2d.png)
出典：[物理のかぎしっぽ](http://hooktail.sub.jp/mathInPhys/determinant/)

[参考]
[物理のかぎしっぽ](http://hooktail.sub.jp/mathInPhys/determinant/)

[関連記事]
[プログラマーのための数学 - 目次](http://qiita.com/Esfahan/items/ab63e7c5bcf812dff2a9)
sbt で compile や runMain タスクを実行する際に、先に ant のタスクを実行させる

# 概要

タイトルのまんまです。

# 設定

ant のプラグインを追加します。

```project/plugins.sbt
addSbtPlugin("de.johoop" % "ant4sbt" % "1.1.2") // 追加
```

build.xml にメッセージを表示するだけの ant task を定義します。

```build.xml
<project basedir=".">
    <target name="testTask">
        <echo message="ant testTask called"/>
    </target>
</project>
```

build.sbt で先ほどの ant task を取り込み、compile, runMain タスクを依存させます。

```build.sbt
import de.johoop.ant4sbt.Ant4Sbt._

name := "sbtAntSample"

version := "1.0"

scalaVersion := "2.11.5"


antSettings

antBuildFile := baseDirectory.value / "build.xml"

antBaseDir := baseDirectory.value

addAntTasks("testTask")

compile <<= (compile in Compile).dependsOn(antTaskKey("testTask"))

runMain <<= (runMain in Compile).dependsOn(antTaskKey("testTask"))
```

Sample クラスをテキトーに作成します。

```src/main/scala/Sample.scala
object Sample {
  def main(args:Array[String]): Unit = {
    println("main called")
  }
}
```

# 実行してみる

```
$ sbt "runMain Sample"
Listening for transport dt_socket at address: 9999

...

[info] testTask:
[info]      [echo] ant testTask called
...

[info] Compiling 1 Scala source to ...
[info] Running Sample
main called
[success] 
```

ant のタスクが実行されています。
Markdownで印刷体裁が整備された文書を作成したくて、pandocを使ってみました

ブログ記事やソフトウェア文書を作成するために、よくAtomでMarkdown文書を作成しています。手軽に書けて便利ですが、残念ながら印刷にはむいていません。なんとかMarkdown文書を社内文書として配布できるレベルの、印刷前提の文書ファイルに変換できないかと足掻いてみました。

# 前提

Markdownとは、テキスト形式で書ける軽量マークアップ言語です。手軽に人間にも読みやすい修飾された文書を書くことができます。

* [Markdown - Wikipedia](https://ja.wikipedia.org/wiki/Markdown)

Markdownは書く分には手軽で良いのですが、残念ながら印刷に適した形式ではありません。PCは各人に行き届いていますが、一覧性という観点では圧倒的に印刷物の方が便利です。なので、印刷体裁を容易に編集できるという点が(私にとっては)重要になります。

# 試したツール

Markdown文書を入力とするツールとして、以下を試しました。

* GitBook
    * [GitBook · Writing made easy](https://www.gitbook.com/)
    * 構造化した巨大なMarkdown文書をオンラインで公開するには良いツールです。
    * Markdown文書の変換先がhtml、epub、PDFであり、あまり自由に編集できません。今回は、採用を見送りました。
* pandoc
    * [Pandoc ユーザーズガイド 日本語版 - Japanese Pandoc User's Association](http://sky-y.github.io/site-pandoc-jp/users-guide/)
    * Markdown文書を入力として、様々な形式に変換できますが、Word文書に変換できるのが嬉しいです。
    * 変換時にベースとするテンプレートを設定できます。
    * 単一のMarkdown文書を対象とするので、巨大な文書は苦手です。

Word文書に変換可能で、変換後に自由に編集できるので、pandocを試しました。

# pandocの使い方

## インストール

Windowsの場合、Chocolateyでインストールできます。(もちろん、インストーラーでも可)

```
choco install pandoc
```

MacOSの場合、Homebrew Caskでインストールできます。

```
brew cask install pandoc
```

## 使い方

コマンドプロンプトで以下のように`pandoc`コマンドを実行します。

```
pandoc -o sample.docx sample.md
```

`-o`で出力先ファイル名を指定します。拡張子を判定して出力形式が切り替わります。

## 出力されたWord文書の所感

* 確かに、Markdownの構造がWord形式で出力されます。
* デザインが微妙…テンプレートを指定すればマシになると思いますが、未検証です。
* 表紙を自動生成できません。Markdown文書の先頭にYAML形式でメタデータを埋め込んで、そこから頑張って生成して欲しいです。
* コードブロックを枠で囲ってほしいです。
* ヘッダー、フッターを設定できません。

# おわりに

素のpandocが生成するWord文書は正直残念な出来ですが、出力後の手直しで、なんとか印刷体裁を整えることができます。まだ試していないテンプレートの適用で、もうちょいマシになる可能性があるなら、しばらく使ってみても良いかなと思います。Markdown文書から印刷前提文書を生成できるのは、やはり便利ですし。
gzipファイルをphpでロードしてそのまま公開

#生のtextを毎度圧縮するには忍びない場合に便利
今回はログファイルをgzに圧縮して貯めこんでるシステムを想定し、セキュアな環境でそのgzファイルを外からみたいなという状況を想定。

`http://192.168.1.101/zcat.php?name=201606`にアクセスすると`/var/log/201606.log.gz`が表示される感じを想定

####コード

```php:zcat.php
if(!isset($_GET['name']) || !is_file($_GET['name'])){
  header('HTTP/1.0 400 Bad Request');
  exit;
}
header('Content-Encoding: gzip');
readfile('/var/log/' . $_GET['name'] . '.log.gz');
```

**危ないデータが入らない想定。不特定多数がアップロードしたファイルの展開表示は駄目。絶対。**

###トラブルシューティング
- logファイルにapacheが参照できるよう権限設定が必要。
- gzipをデコード出来ないブラウザ(ガラケーとか)は正しく表示できない。（諦めて）

##仕組み
特に難しい仕組みでなく大半のブラウザはgzipで圧縮されたデータが読めるということで特に変換などせずに、
生のgzipファイルを適切なヘッダを付けて直接送ればブラウザは正しく読んでくれると言うだけである。

##通信圧縮、キャッシング技術の世界は奥が深い
予め用意したgzをロードするというアプローチは使えそうだが商用環境だと余り出番は無い。
大半のデータはDBに格納されているし、キャッシングであれば強力なモジュールが幾つもあるからだ。
奥が深い領域には触れないが単にgzipで通信を圧縮するだけならApacheのmod_deflateというモジュールが有り、**都度**でかいテキストを配信するならこちらのモジュールを使用するのが適切だろう。
【プログラマーのための数学】単位行列と逆行列

## 目次
[プログラマーのための数学 - 目次](http://qiita.com/Esfahan/items/ab63e7c5bcf812dff2a9)

## 単位行列とは
正方行列のうち、右下がりの対角線上にある成分がすべて1で、残りの成分がすべて0であるものを単位行列といいます。下図は、それぞれ2次と3次の単位行列です。

![det_s_001.gif](https://qiita-image-store.s3.amazonaws.com/0/105936/1309c9f4-ea5c-1b51-31a9-0a8ecb76d538.gif) ![det_s_002.gif](https://qiita-image-store.s3.amazonaws.com/0/105936/38ce0d29-9f83-5e1a-c0da-09607900ad44.gif)
出典：[weblio.jp](http://www.weblio.jp/content/%E5%8D%98%E4%BD%8D%E8%A1%8C%E5%88%97)

また、単位行列は、任意のn次正方行列Aに対して、右から掛けても左から掛けてもAとなります。
Eが単位行列だとすると、下記が成り立ちます。

```
AE=A
EA=A 
```

下記は、単位行列の例です。
![det_s_007.png](https://qiita-image-store.s3.amazonaws.com/0/105936/1b58f3f4-4771-0e4e-1772-12643a951864.png)
出典：[www.geisya.or.jp](http://www.geisya.or.jp/~mwm48961/linear_algebra/inverse1.htm)

これは2次行列の例ですが、3次でも同様です。

## 逆行列とは
与えられたn次の正方行列Aに対して、右から掛けても左から掛けても、解が単位行列となるような行列をAの逆行列と呼び、![det_s_004.png](https://qiita-image-store.s3.amazonaws.com/0/105936/8eab365f-1ad6-5284-8594-ea34eaa858e3.png)のように書きます。

Eが単位行列だとすると、下記が成り立ちます。
![det_s_005.png](https://qiita-image-store.s3.amazonaws.com/0/105936/a9116909-7e6c-2b3d-67a0-97ac6d38ec42.png)

下記は、逆行列の例です。

![det_s_006.png](https://qiita-image-store.s3.amazonaws.com/0/105936/6a1226cc-f1dd-ee13-57b8-3e91b9a4899a.png)
出典：[www.geisya.or.jp](http://www.geisya.or.jp/~mwm48961/linear_algebra/inverse1.htm)

上図のようなAという正方行列があるとき、![det_s_003.png](https://qiita-image-store.s3.amazonaws.com/0/105936/06c84550-40aa-8b39-94c0-5aceaf5f344f.png)の逆行列となります。
これは2次行列の例ですが、3次でも同様です。
また、逆行列は正方行列に対してのみ定義可能で、正方行列でない場合は、逆行列は存在しません。

## 正則
逆行列が存在する行列は正則であるといいます。このような行列を正則行列と呼び、下記のように表します。

```math
det(A)≠0
```

[参考]
[www.geisya.or.jp](http://www.geisya.or.jp/~mwm48961/linear_algebra/inverse1.htm)
[weblio.jp](http://www.weblio.jp/content/%E5%8D%98%E4%BD%8D%E8%A1%8C%E5%88%97)

[関連記事]
[プログラマーのための数学 - 目次](http://qiita.com/Esfahan/items/ab63e7c5bcf812dff2a9)
httrを使ってRからREST APIを叩く

意外と記事が無かったので、自分がはまったところを中心に記載しておきます。

##なぜhttr?
RからREST APIを叩くにはRCurl / httrのどちらかのパッケージを使うのがメジャーなようです。その中でhttrはOAuth 1.0 と 2.0 を外部パッケージなしで簡単にできそうだったのと、アニュアルのindex見た感じで関数体系が整理されていそうだったので、初めてRESTを叩くならhttrのほうが使いやすそうです、多分（定性的な評価ですみません）。curl使いの人はそのままRCurl使ったほうが良いかもしれません。

httrはRStudioの人がメンテしているみたいですね。Shinyといいhttrといい、RStudioさんには頭が上がりませんm(_ _)m。

##はまったところ
以下2点で1日ぐらい費やしました、、。
###デフォルトで引数として明示的に指定していないヘッダー情報を渡すことがある
この疑いがある時は関数内に "verbose()"をはさんで投げているデータを眺めてみましょう。怪しいデータがあったらリセットをはさみます。

r <- GET(url, query = query, **add_headers(Accept = ""),** add_headers(Authorization = paste("Bearer",li$access_token),
 "Accept-Language" = "ja", Accept = "application/json"), verbose())

###デフォルトではセッション情報が引き継がれるため、いったんログアウトして他のアカウントでログインしても前のアカウント情報が残る
同じアカウントでデータをやり取りし続けるときは気にしなくてもよいですが、いろいろなアカウントのデータを抜く場合は明示的にリセットをしてください。
handle_reset(url)

これはcurlのコマンドラインでは発生しませんが、ブラウザからRESTを叩くツール(DHC)とかでも同じ症状が発生するようですのでご注意ください。


##サンプル
ログイン認証・トークン取得→データ取得→トークン破棄の手順は以下のようになります。大抵のREST APIで以下のコードで再利用できると思います。


```
library(httr)

p_client_id <- "123456789"
p_client_secret <- "qwertyuiop1234567890asdfghjkl"
ca_url <- "https://api.example.com/ep/login"
rv_url <- "https://api.example.com/ep/revoke"
get_url <- "https://api.example.com/ep/events"
p_id <- "id"
p_pass <- "password"

#ログイン認証
body <- list(grant_type = "password", username=p_id, password = p_pass, client_id = p_client_id, client_secret = p_client_secret)
#verbose()を入れるとこちらが渡した値と返ってきた値の詳細が見えます
r <- POST(ca_url, body = body, encode = "multipart", content_type = "application/x-www-form-urlencoded", verbose())
#トークンなどをリストに格納
li <- content(r, "parsed")
#セッション情報を破棄
handle_reset(ca_url)

#データのGET
#queryにはURLで渡す?以降を切れ目(&)毎にリストにしていきます。
query <- list(type = "type_to_get", fields = "id,created_at,updated_at")
#httrがデフォルトでヘッダーに変な値を入れるので、add_headers(Accept = "")で一旦消す
r <- GET(get_url, query = query, add_headers(Accept = ""), add_headers(Authorization = paste("Bearer",li$access_token),
 "Accept-Language" = "ja", Accept = "application/json"))
el <- content(r, "parsed")
handle_reset(get_url)

#トークン破棄
body <- "" #bodyにトークン入れるタイプの場合はセットしたりする
r <- POST(rv_url, body = body, add_headers(Accept = ""), add_headers(Authorization = paste("Bearer",li$access_token),
   "Accept-Language" = "ja", Accept = "application/json"), content_type = "application/x-www-form-urlencoded")
rv <- content(r, "parsed")
handle_reset(rv_url)
```
gzipで圧縮されているテキストファイルを処理するときに注意すること

gzipで圧縮されているテキストファイルを読み込むときに，いくつか（個人的に）落とし穴があったので，まとめてみました．

#   バイナリ読み込み
    
デフォルトのファイル読み込みモードは，バイナリであるため，下記のようなコードだと，各行をバイナリで読み込んでしまいます．

```python
import gzip

with gzip.open("test.txt.gz", "r") as fi:
    for line in fi:
	print(line)
```

テキストで読みだすには，ファイルオープン時に，'rt'モードで読みこみましょう．

```python
import gzip

with gzip.open("test.txt.gz", "rt") as fi:
    for line in fi:
	print(line)
```

#   文頭のエンコード宣言を無視
    
エンコーディングをデフォルトで指定しておいても，無視されてしまうので，ファイルオープン時にエンコーディングを再度指定する必要があります．つまり，最終的には，下記のようなコードでテキストファイルとして読み込めます．

```python
import gzip

with gzip.open("test.txt.gz", "rt", "utf_8") as fi:
    for line in fi:
	print(line)
```

#   蛇足

多分，他の圧縮ファイルでも同様だと思いますが，試してません．
ロバストネス図で書いたものって、そのままMVCになるんじゃね？と思った


# 発端
久しぶりに、[実践ロバストネス分析 第 1 回 ロバストネス分析の基礎](https://www.ogis-ri.co.jp/otc/hiroba/technical/RobustnessAnalysis/RA1/)を復習していたのですが。「How ロバストネス分析？」をみて、「各クラス（エンティティ、バウンダリ、コントロール）って、MVCに相当するんじゃね？」と思った。


## ロバストネス図の各クラスと、MVCの各クラス
ロバストネス図のクラスと、MVCの各クラスについて説明して、「同じじゃね？」ってことを感じていただければと思います。  

ロバストネス図 | MVC | 役割
--- | --- | :--
エンティティ | モデル | データ構造と、その振る舞い。大抵、DBとかに保存される。
バウンダリ | ビュー | ひとまとまりの、ユーザ（アクター）が「できること」。Webページ1枚とか。
コントロール | コントローラ | 処理一式。（小さめの）フローチャート1枚に当たると思う。

ロバストネス図もMVCも、論文とか文献とかをちゃんと読み漁ったりしていないです。自己解釈した結果をそれぞれ「ロバストネス図」「MVC」称しているので、学術的に正しいモノと齟齬なく認識でいている自信はないです。
敏捷開發的領的點數

昨天晚上去參加了 C.C.Agile 的聚會。

因為這次是 open space 的形式的關係，
每個人可以提出來一個主題，讓其他人一起來和這個主題的召集人討論這個主題。

昨天就聽到一個參與的人分享到：

===

他之前曾經幫某一間公司顧問該司的敏捷開發，
每個 sprint 開始的時候，每個工程師會領該有的點數來實作。
過了幾週之後，

老闆看了報表就問說：

> 為什麼每個人領的點數不會逐週成長？

===

看來老闆才更應該去好好上敏捷開發（笑）
ActiveDirectoryをldapsearchで覗くとき用のフィルタ

ldapsearchを使ってActiveDirectoryのユーザオブジェクトやコンピュータオブジェクトのプロパティを見ることができます。

```
ldapsearch -LLL -x -D username -w password -h DCNAME -b dc=contoso,dc=local "(anr=山田)"
```
ただし、これだと以下のような問題があり、まともに見ることができません。

- 属性値に2バイト文字が入っているとBase64エンコードされた文字列が表示される
- 日付時刻が18桁の数値で表示される
- userCertificateなど不要な属性も表示されてしまう

これらの問題を解決するためのフィルタを書いてみました。
こんな感じのシェルスクリプトで呼ぶと便利かと思います。
※上4行はご自身の環境に合わせて書き換えてください。

```sh
dc=dccomputername
user=ldapuser
pass=ldapuserpassword
base="dc=contoso,dc=local"
disp="cn displayName company telephoneNumber physicalDeliveryOfficeName description title mail sAMAccountName"

ldapsearch -LLL -x -D $user -w $pass -h $dc -b $base "(anr=$1)" $disp | adfilter.py
```

```python:adfilter.py
#!/usr/bin/env python
#coding: utf-8

import os, sys
import datetime
import re
import base64

input_file = sys.stdin.read()
# Base64な行を連結
r = re.compile('\n ', re.MULTILINE)
f = re.sub(r, '', input_file)
input = f.split('\n')

# 表示しないレコード
ignore_record = ('^objectGUID','^objectSid','^userParameters','^logonHours','^userCertificate','^mSMQSignCertificates','^mSMQDigests')
re_ignore_record = re.compile(r'\b(' + ('|'.join(ignore_record)) + r')\b')

# ActiveDirectory datetime record
ad_date_value = (
  '^badPasswordTime', '^lastLogon', '^pwdLastSet', '^lastLogonTimestamp', '^accountExpires'
)
re_ad_date_value = re.compile(r'\b(' + ('|'.join(ad_date_value)) + r')\b')

for line in input:
  if line and re_ignore_record.search(line):
    #print line
    pass

  elif re.search(r'::',line):
  # Base64をデコード
    try:
      japanese = line.split(":: ")
      b64_string = japanese[1]
      decoded_string = base64.b64decode(b64_string)
      print '%s:: %s' % (japanese[0], decoded_string)
    except:
      print line

  elif line and re_ad_date_value.search(line):
    try:
      ldap_attributes = line.split(": ")
      ldap_adtime = int(ldap_attributes[1])
      ldap_unixtime = (ldap_adtime/10000000)-11644473600
      d = datetime.datetime.fromtimestamp(ldap_unixtime)
      ldap_datetime = d.strftime("%Y-%m-%d %H:%M:%S")
      print '%s: %s' % (ldap_attributes[0], ldap_datetime)
    except:
      print line
      # pass

  else:
    print line
```
【CSS】レスポンシブでも使える！CSSだけで画像を縮小してトリミングしたサムネイルを表示する方法

#はじめに

縦長の画像と横長の画像が混在する場合は、見た目が良くないです^^;
表示する画像が横長で統一されている、または縦長で統一されているなら、使える方法かと思います。
最初にCSSなど余分なものを除いたサンプルコードを紹介し、その後に詳しい解説をします。

#サンプルコード

```html:サンプルコード（画像の横幅を基準に表示するver）
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<style type="text/css">
.photo {
    width:250px;
    height:150px;
    overflow:hidden;
    position:relative;
    border:1px solid #333;
}
.photo img {
    position: absolute;
    left: -100%;
    right: -100%;
    margin: auto;
    width: 100%;
    height: auto;
}
</style>
</head>
<body>
<div class="photo"><img src="画像のパス"></div>
</body>
</html>
```

`.photo`で画像を表示するサイズを指定しています。
今回は、`widht:250px;` と `height:150px;` と指定しておりますが、可変でもOKです。

`.photo img` で `width: 100%;` と `height: auto;` としているため、画像の横幅を基準に表示します。
画像の縦幅を基準にしたいなら、`.photo img` を `width: auto;` と `height: 100%;` と変更すればOKです。

#今回の方法を解説

##用意した画像

![1.png](https://qiita-image-store.s3.amazonaws.com/0/42231/e93bd3b9-31b3-2312-228d-bca98093f5b7.png)

ご覧の通り、横長2枚、縦長2枚の計4枚の画像で、それぞれ比率が違います。
今回の方法だとどのように表示されるか見ていきましょう。

##画像の横幅を基準にする（表示する画像は全て横長）

![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/42231/ea842512-42ee-bbaf-45e5-74cd9e5c2704.jpeg)

最初のサンプルコードの場合だと、上図のように画像の横幅を基準に表示されます。
比率が違くても、全て横長の画像で統一されていれば、許容される範囲（人によるけど）で、自動で画像を縮小し、トリミングして表示されます。

###補足

どのようになっているのか、わかりやすくするために`.photo`の`overflow:hidden;`を外して、画像を透過にしてみました。

![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/42231/09ca566e-1b9c-34a0-2f8e-931846f5956b.jpeg)

ご覧のように`.photo`の縦横サイズに入らない部分は表示されなようになっております。
そのため、はみ出した画像の一部は表示されません。

##画像の横幅を基準にする（表示する画像は横長と縦長が混在）

![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/42231/b8d13f0d-d14b-35f4-79e5-83d33e26e83a.jpeg)

この場合は、画像の横幅を基準にしているため、縦長の画像の一部は表示されません。
表示はされますが、トリミングの位置が微妙ですね^^;

##画像の縦幅を基準にする（表示する画像は全て縦長）

![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/42231/4ff7ee50-0976-b654-1542-10a48d5fabdb.jpeg)

表示を縦長サイズにし、画像も縦幅を基準にすることも可能です。
サンプルコードのところで、説明しましたが、`.photo img` で `width: auto;` と `height: 100%;` と指定すれば、画像の縦幅を基準に表示します。
表示サイズを縦長にしたいなら、`.photo`の縦横サイズを変更してください。

#最後に

新しいCSSプロパティは使用していないので、ほとんどのデバイスで問題なく表示されると思います（たぶん）。

JavaScriptについて詳しくないので、できるかわかりませんが、画像の縦横の比率を取得して、付与するCSSを変えれば、両方に対応した表示が可能かと思います。

他の方法は、[【図解】CSSだけで画像の縦横比を維持したサムネイルを表示する](http://qiita.com/suin/items/8de26866a8ab6ca65ba4)が参考になると思います。

CSSの記述でこのようにした方が良いなどアドバイスあれば、ご助言くださいm(__)m
cudaいろいろ

#compute capability一覧
https://developer.nvidia.com/cuda-gpus

#時間計測

<details><summary>cudaイベントを使って時間計測</summary><div>

```
struct Timer {
	float elapsed;
	cudaEvent_t m_start_event;
	cudaEvent_t m_stop_event;
	Timer()　{
		elapsed = 0.f;
		cudaEventCreate(&m_start_event);
		cudaEventCreate(&m_stop_event);
	}
	~Timer()
	{
		cudaEventDestroy(m_start_event);
		cudaEventDestroy(m_stop_event);
	}
	void start()
	{
		cudaEventRecord(m_start_event, 0);
	}
	void stop()
	{
		cudaEventRecord(m_stop_event, 0);
		cudaEventSynchronize(m_stop_event);
		cudaEventElapsedTime(&elapsed, m_start_event, m_stop_event);
	}
	float elapsedInMs() const
	{
		return elapsed;
	}
};
void benchmark()
{
	Timer t;
	t.start();
	kernel実行;
	t.stop();
	printf("time %f msec\n", t.elapsedInMs());
}
```
</div></details>

#runtime API と driver API
[runtime API](https://docs.nvidia.com/cuda/cuda-runtime-api/index.html)
[driver API](https://docs.nvidia.com/cuda/cuda-driver-api/index.html)

<dl>
  <dt> runtime API </dt> <dd>簡単。普通はこれを使う。</dd>
  <dt> driver API </dt> <dd>複雑。なんでもできる。driver APIでしかできないこともある。</dd>
</dl>

 
[Difference between the driver and runtime APIs](https://docs.nvidia.com/cuda/cuda-driver-api/driver-vs-runtime-api.html#driver-vs-runtime-api)

* Context managementはdriver APIでのみ可能。
* runtime APIはどのコンテキストを使うかを選択できる。driver APIがスレッドに対して作成したコンテキストがあればそれを使う。なければprimary contextを使う。
* primary contextは必要に応じて作られる。one per device per process。リファレンスカウントで管理される。
* 1つのプロセス内では、runtime APIは、primary contextを共有する。スレッドでcontextが作られてなければ。
* runtimeが使うcontextは、cudaDeviceSynchronize()で同期できる。cudaDeviceReset()で破壊できる。
* primary contextをruntime APIで使うのはちょっと危険かも。１つのプロセスで複数のプラグインが動作する場合とか、contextが共有されるけどお互いに通信する手段はないから。誰かがcudaDeviceReset()呼び出したら終了です。なので、driver APIでcontextをってruntime APIで動かしましょう。cuBLAS とか cuFFT のruntime APIでビルドされたライブラリを使うときは大事。

[CUDA Driver APIでカーネル作成と実行まで](https://qiita.com/shisoromi/items/b39742e1bc1b159280f8)
[ランタイムとドライバAPIの相互運用](https://sites.google.com/site/cudajpn/chapter-3-programming-interface/3-4-interoperability-between-runtime-and-driver-apis)
[Convert cudaStream_t object to CUStream object](https://stackoverflow.com/questions/45912731/convert-cudastream-t-object-to-custream-object)
Docker初心者による、初心者のためのDocker入門 #3

# DockerでapacheとMemcachedを起動してPHP7から接続してみる

DBに接続する前の肩慣らしとしてmemcachedに接続してみます。
当然PHP(apache)とMemcachedは別のコンテナとして起動します。1コンテナ=1プロセスの原則です。

memcachedのイメージは公式があるのでDocker hubからもってきます。これはそのまま使えそうなのでDockerfileは作成しません。

> 公式イメージ
https://hub.docker.com/_/memcached/


## Composeを使ってみる
複数のコンテナをそれぞれいちいち起動したり停止したりするのはダルすぎるので、その辺をうまいことやってくれるらしいComposeを使ってみます。

ちなみにdocker-compose.ymlの書式はこちら

> Compose ファイル・リファレンス
http://docs.docker.jp/compose/compose-file.html

マニュアルが充実していていいですね〜


### docker-compose
まずはCompseの設定

```docker-compose.yml
apache-php:
    build: ./apache-php
    ports:
        - "80:80"
    links:
        - memcached

memcached:
    image: memcached:1.4
```


### ディレクトリ構成
公式のベストプラクティスを見る限り、コンテナごとにディレクトリを作成してDockerfileやコンテナ固有の設定ファイルを格納するのがいいらしいです。


> http://docs.docker.jp/engine/articles/dockerfile_best-practice.html#dockerignore
> *ほとんどの場合、空のディレクトリに個々の Dockerfile を置くのがベストです。そうしておけば、そのディレクトリには Dockerfile が構築に必要なファイルだけ追加します。*


ふむふむ..というわけで。

```
project_dir
+- docker-compose.yml
+-apache-php
    +-Dockerfile
    +-index.php
```


前回に引き続きPHP7を使用しています。PHP7ではmemcacheを使用するのは一筋縄ではいかないようです。
一番参考にした記事。

> Docker Compose で PHP 7.0 の開発環境を構築する
http://qiita.com/masakielastic/items/9fdc52b47cc7e3850b9f#memcached


でもそのままではダメで、少しDockerfileを修正しました。

```sh:apache-php/Dockerfile
FROM php:7.0.8-apache
ENV DEBIAN_FRONTEND noninteractive
ENV PHP_MEMCACHED_VERSION php7

RUN apt-get update && apt-get install -y libmemcached-dev zlib1g-dev
RUN curl -L -o /tmp/memcached.tar.gz https://github.com/php-memcached-dev/php-memcached/archive/$PHP_MEMCACHED_VERSION.tar.gz \
    && tar xfz /tmp/memcached.tar.gz \
    && rm -r /tmp/memcached.tar.gz \
    && mkdir -p /usr/src/php/ext \
    && mv php-memcached-$PHP_MEMCACHED_VERSION /usr/src/php/ext/memcached \
    && echo memcached >> /usr/src/php-available-exts \
    && docker-php-ext-install memcached

RUN { \
  echo 'session.save_handler = memcached'; \
  echo 'session.save_path = memcached:11211'; \
} >> /usr/local/etc/php/conf.d/docker-php-ext-memcached.ini
```

セッションハンドラーの件はまだ不要だけど将来を見越して記述


ちゃんとmemcachedと通信できているか確認するためのPHP。
めんどいのでPHP公式からコピー

> http://php.net/manual/ja/memcached.set.php


```index.php
<?php
$m = new Memcached();
$m->addServer('memcached', 11211);

$m->set('int', 99);
$m->set('string', 'a simple string');
$m->set('array', array(11, 12));
/* expire 'object' key in 5 minutes */
$m->set('object', new stdclass, time() + 300);


var_dump($m->get('int'));
echo "<br>";
var_dump($m->get('string'));
echo "<br>";
var_dump($m->get('array'));
echo "<br>";
var_dump($m->get('object'));
echo "<br>";
?>
```

### 実行

```sh
docker-compose up -d
```


### ブラウザでアクセス
http://localhost/

<img width="329" alt="Screen Shot 2016-07-22 at 17.02.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/74328/832ecaef-30a9-efb5-00d6-98af8ea53f66.png">



**つながったーーーー！**


### 後始末

```sh
docker-compose stop     # 全てのコンテナ停止
docker-compose rm       # 全てのコンテナ削除
```

docker-compose楽でいいですね〜〜
word文書(docx)ファイルをmarkdown形式に変換する

# はじめに
pandocを使ってmarkdownをword文書に変換する方法はよく紹介されていますが、
過去の資産をmarkdown化するなどの動機で逆（docx→md）を実行したくなるときもあります。書式など色々設定していると中々きれいに変換できなかったのですが、pandocのオプションを適切に指定するとある程度うまくいくようです。

# docx→md
pandocでdocxを変換する際、出力フォーマット指定でraw_html,native_divs,native_spansを抑止すればよいようです。

    pandoc hoge.docx -t markdown-raw_html-native_divs-native_spans -o hoge.md 

参考：[http://stackoverflow.com/questions/35807092](http://stackoverflow.com/questions/35807092/why-pandoc-keeps-span-and-div-tags-when-converting-html-to-markdown)

# 画像ファイル
本文に画像を含む場合、そのままでは*media/image1.wmf*などのリンクがあるだけで、画像ファイル自体は出力されません。以下の手順で、mediaフォルダをdocxファイルから抽出します。

1. docxファイルの拡張子をzipに変えて解凍する
2. 解凍されたフォルダのword/mediaフォルダを取得する

wmfファイルはAtomなどのエディタで表示できないようですので、jpegなりpngなりに一括すると良いです。私はMicrosoft Office Picture Managerを使いましたが、ファイル名（拡張子以外）そのままでwmfを一括で変換できるツールなら何でもいいと思います。

1. wmfをpng/jpegに一括変換
2. mdファイル中の.wmfを.png/.jpegに一括置換

以上
Pokémon GOのé

# Pokemonじゃない！Pokémonだ！
Pokémon GOが流行っていますね。twitterなどで、
`Pokemon GO`という表現が目立つようになりましたが、正しくは、
`Pokémon GO`です。

しかしこの**é**、どうやって入力するのでしょうか、そしてなぜeではいけなかったのでしょうか。


# とりあえず打ち方
## 最も簡単な方法
↓をコピペします。

```
é
```


## Macの方
1. Option と E を同時に押す
1. E を押す

で入力できます。

### 仕組み
`Option + E` で、accent aigu （アクサンテギュ）を入力できるモードになります。
その後、いずれかの母音を入力すれば **´** をその母音の頭に入力できます。

```
á í ú é ó
```

## Windowsの方
色々とあるようですが、

1. 事前に、コントロールパネルの言語から、フランス語を追加しておく
1.  Ctrl + Shift + 7 を同時に押す
1.  E を押す

でできるようです。

# なぜPokemonではなくPokémonか
[Yahoo!知恵袋](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1228541657)の回答によると、

> 正しく「ポケモン」と海外の人達にも発音してもらいたかったからだと思います。
>
> Pokemonですと、国によっては「ポウクモン」とか「ポキモン」などのように発音してしまう可能性があった為、é（エ）と発音される文字を使ったのでしょう。

とのこと。

ただ、英語圏のユーザーも我々と同じくアクサンテギュ(彼らからすると acute accent)を普段は用いないはずです。その記号をどのように解釈しているのでしょうか。

## アクサンテギュ
[英語版Wikipedia: Acute Accent](https://en.wikipedia.org/wiki/Acute_accent)によると、

> Acute accents are sometimes added to loanwords where a final e is not silent

アクサンテギュは、`e`を発音したい外来語のときに利用する、と書かれていました。


```
母音 + 子音 + e
```
では通常、母音をそのまま読み、eを読まないという通例があるため、
`poke`はポークと読まれがちです。
そこで`poké`とacute accentをつけることで、**eも発音するように!**とわかりやすくしたのですね。
その他、
**saké (酒)** や**maté (マテ茶 のマテ)**なども使われるようです。

# まとめ
Pokémon GOブームのなか、周囲と差をつける豆知識、インストールされましたね。さあ、いざポケモンマスターへ！


# 参考文献
- http://bonjour.s21.xrea.com/francais/droite.html
- http://blog.fkoji.com/2016/07130555.html
- https://en.wikipedia.org/wiki/Acute_accent
- http://bbs.kakaku.com/bbs/K0000459768/SortID=16311674/
Maya | コマンドの（隠し？）オプションを調べる

Mayaにはスクリプトリファレンスが用意されているが、コマンドのオプションがすべて書かれていない。（例：polySeparate）

helpコマンドに調べたいコマンド名を渡すと、すべてのオプション一覧を見ることができる。

```py
import maya.cmds as cmds

print cmds.help("polySeparate")
```

Mayaのスクリプトエディタで上記を実行すると、次のように表示される。

```
要約: polySeparate [flags] [String...]
Flags:
   -e -edit
   -q -query
 -cch -caching                on|off
  -ch -constructionHistory    on|off
 -fzn -frozen                 on|off
   -n -name                   String
 -nds -nodeState              Int
   -o -object                 on|off
  -rs -removeShells           on|off
 -sss -separateSpecificShell  Int (multi-use)
```
[Cocos2dx] Get activity context

Get the activity context as jobject from cocos2dx. 

```cpp
JniMethodInfo methodInfo;
JniHelper::getStaticMethodInfo(methodInfo,
                               "org/cocos2dx/lib/Cocos2dxActivity",
                               "getContext",
                               "()Landroid/content/Context;");
auto cxtObj = (jobject)methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID);
```

"org/cocos2dx/lib/Cocos2dxActivity" is the activity you want to get.
Amazon Machine Learning（多項分類）

# Amazon Machine Learning

Amazon Machine Learning は、複雑な機械学習を簡単に利用出来るサービスです。
今回は Amazon Machine Learning の予測分類機能の中で多項分類と呼ばれるものを試してみます。

多項分類データとしては、機械学習のデータとして有名な"あやめ"を利用します。
これは、以下の４項目のデータを元に Setosa、Versicolor、Virgíniaという３つの
"あやめ"の種類（Species）に分類します。
・萼(がく)片の長さ（Sepal Length）
・萼(がく)片の幅（Sepal Width）
・花びらの長さ（Petal Length）
・花びらの幅（Petal Width）

# トレーニングデータ作成・配置
トレーニングデータの準備を行います。
以下のような csv形式のデータを用意し AWS S3上へ配置します。
※注意点としては、改行コードが CR で保存されていると Amazon Machine Learning に
取り込む際にエラーが発生するため、CR/LF や LF で改行コードを保存する必要があります。

![スクリーンショット_2016-07-22_10_19_09.png](https://qiita-image-store.s3.amazonaws.com/0/134550/bcd7eeb0-ce4b-acb9-45d0-c50c2b37691d.png)

# トレーニングデータ取り込み
トレーニングデータをAmazon Machine Learning に取り込みます。

**Input Data**
"S3 Location" に AWS S3上へ配置したデータパスを設定し、
"Datasource name" に任意の名前を付けて次に進みます。

![スクリーンショット_2016-07-22_10_17_48.png](https://qiita-image-store.s3.amazonaws.com/0/134550/6b0188c8-0647-75e9-dc9a-bfb6d9b76293.png)

**Schema**
今回使用する csvデータの一行目に項目名が設定されているため、"Done the first..." のラジオボタンから "YES" を選択します。
"YES" を選択すると項目名が自動で入力されます。

![スクリーンショット_2016-07-22_10_18_17.png](https://qiita-image-store.s3.amazonaws.com/0/134550/5e03017f-1d32-bd77-57aa-1b4eaf533940.png)

**Target**
分類する対象である"Species"を選択します。

![スクリーンショット_2016-07-22_10_22_44.png](https://qiita-image-store.s3.amazonaws.com/0/134550/becf63cb-5707-ad63-cc9a-15addd07354e.png)

**Row Identifier**
"No" を選択します。

![スクリーンショット_2016-07-22_10_22_50.png](https://qiita-image-store.s3.amazonaws.com/0/134550/f86a9dac-1da3-1935-205f-16af687e6815.png)

# MLモデル作成
次に、トレーニングデータを使いMLモデルの作成を行います。
"ML model name" に任意の名前を入力し、"Select training and evaluation settings" は "Default" を選択します。
"Default" を選択した場合、始めの 70%のデータをトレーニングデータとして使い、残りの 30%のデータを評価用のデータとして使う設定となります。

![スクリーンショット_2016-07-22_10_23_07.png](https://qiita-image-store.s3.amazonaws.com/0/134550/289d4b75-21be-6969-a671-6e603954fecb.png)

# 分類実行
Amazon Machine Learning の処理が完了したら、先ほど作成したMLモデルを選択します。

![スクリーンショット_2016-07-22_12_44_51.png](https://qiita-image-store.s3.amazonaws.com/0/134550/ed77efe6-b1e8-03b1-947b-4c5b7775bc32.png)

"Try real-time predictions" を選択します。

![スクリーンショット_2016-07-22_12_45_34.png](https://qiita-image-store.s3.amazonaws.com/0/134550/0b60a20a-f44b-6f0a-1172-5676a82c66b7.png)

確認用テストデータとして以下を使用し、
各入力項目にテストデータを入力していきます。
※"Paste a record" から csv形式でデータを入力する事も可能です。

![スクリーンショット_2016-07-22_10_26_33.png](https://qiita-image-store.s3.amazonaws.com/0/134550/476971ed-e294-ab84-6c7f-58f741cdfd6b.png)
　
![スクリーンショット_2016-07-22_10_40_06.png](https://qiita-image-store.s3.amazonaws.com/0/134550/3b246ae6-ccdc-0ca3-afe3-05777c364f6c.png)

![スクリーンショット_2016-07-22_10_40_49.png](https://qiita-image-store.s3.amazonaws.com/0/134550/db3c6c7c-fb15-418d-f419-5ad0838ee0c1.png)

![スクリーンショット_2016-07-22_10_41_23.png](https://qiita-image-store.s3.amazonaws.com/0/134550/b68c50af-ce2e-3c7e-162a-d88589d40667.png)

結果がJSON形式で出力され "predictedLabel" に分類結果が表示され、
Setosa、Versicolor、Virgínia に正しく分類されている事がわかります。

以上、今回は Amazon Machine Learning の多項分類を試してみました。
listから重複がある要素を探す

色々方法あるんだろうけど。

```python3
>>> from collections import Counter
>>> [ k for k, v in Counter([0,1,2,3,2,0,4]).items() if v > 1 ]
[0, 2]
>>> [ k for k, v in Counter("abcefacc").items() if v > 1 ]
['c', 'a']
```
「速習！AnsibleでInfrastructure as Code」に行ってきた

本当に使ったことがない初心者向けだったので、「Ansible使ってみたいけど触る時間作れていない」みたいな人には次回があればおすすめ。

逆に、「試行錯誤しながら使い始めているよ」という方にとっては物足りないので、参加者枠空けてあげるといいと思います。

http://connpass.com/event/33853/

講演者： 倉持健史氏

* ansible
    * 概要
    * 特徴
    * 使い方
    * トレンド
* ハンズオン
* アンケート

Ansibleについて
===

概要
---

* システム構築・運用についての自動化エンジン
    * サーバ構築には限らない

### 用途

* システムコンフィグレーション
* オーケストレーション
* アプリケーションデプロイメント

特徴
---

### simple

Chefの参考書は400ページ、Ansibleは112ページ

### agentless

* SSHとPython2があればいい
* WindowsだとHTTP/HTTPS接続とPowerShell3.0+があればいい

### Powerful

#### "Batteries Included"（電池同梱）

最初から必要な物が揃っている

#### 冪等性

何度実行しても同じ状態になる
Ansible以外にもあります


使い方
---

### 必要なもの

* Inventory
* Playbook

#### Inventory

対象物が記述されている

```
192.168.1.1
192.168.1.2
...
```

とか

```
[weｂservers]
192.168.1.1
192.168.1.2
...
```

グルーピングしたり


#### Playbook

* どういう状態にするか
* yamlで記述

```
- hosts: webservers

  tasks:
  - name: installed apache
    yum: pkg=httpd state=present
  - name: start apache
    service: name=httpd state=started enabled=yes
```

`state=present`や`state=started`などあるべき状態を表現する。

```bash
$ ansible-playbook -i ansible_hosts playbook.yml
```

とかで実行する。

量が増えてきたら分割（include）や役割（role）を利用

出来ないことがあったら自分で作る（module）
誰かが作ったものを使う（Ansible Galaxy）

トレンド
---

* GoogleトレンドでChefを抜いた
* Ansible Tower（GUI、有償、OSS化の予定あり）
* 『入門Ansible』『初めてのAnsible』
    * 公式ドキュメントがより大事



ハンズオン
---

hostsとplaybook.ymlを写経してのWordPress環境（PHP+MySQL（ユーザ作成）+WordPress）の構築でした。
アノテーションプロセッサーのMavenプロジェクトをビルドする時にエラーになる場合の対処法


事象
-----

```
[ERROR] error: Bad service configuration file, or exception thrown while constructing Processor object: javax.annotation.processing.Processor: Provider [アノテーションプロセッサクラス名]
```

どうやら`META-INF/services`に配置した内容を読み込んでおかしなことになっている模様。

対処法
-----

```
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.5.1</version>
  <configuration>
    <fork>true</fork>
    <source>1.8</source>
    <target>1.8</target>
    <encoding>UTF-8</encoding>
    <compilerArgs>
      <compilerArg>-proc:none</compilerArg>
    </compilerArgs>
  </configuration>
</plugin>
```

`compilerArg`に`-proc:none`を指定してあげるとエラーにならない。
SSHメモ

## configファイルで複数SSH接続を管理

### 会社のgithubと自分のgithubを同じマシンで管理
1. ssh configファイル自分のgithub接続用の設定追加

    ```:config
    Host github_private
      User git
      Port 22
      HostName github.com
      IdentityFile ~/.ssh/github/private/id_rsa
      TCPKeepAlive yes
      IdentitiesOnly yes
    ```
1. git origin追加、ホスト名をgithub_privateをする

    ```
    $ git remote add origin github_private:#{user-name}/xxxx.git


### 踏み台サーバー
1. 踏み台サーバー経由

    ```:shell
    Host bastion
      HostName bastion.test.com
      User test
      Port 22
      IdentityFile ~/.ssh/test/id_rsa
      ForwardAgent yes
    Host *.ap-northeast*
      ProxyCommand ssh bastion -W %h:%p
    ```

### AWSのEC2サーバー管理
ec2ssh gemを使う
https://github.com/mirakui/ec2ssh

## キーの管理
### ssh-add
1. 秘密キー作成して追加

    ```:shell
    $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    $ ssh-add ~/.ssh/id_rsa
    ```

1. 秘密鍵の登録状況の確認

    ```:shell
    $ ssh-add -l
    ```
1. キーチェーンへ登録

    ```:shell
    $ ssh-add -K ~/.ssh/test/id_rsa
    ```
1. 再起動したら、キーチェーンから登録済みのキーを追加
   
    ```:shell
    $ ssh-add -A
    ```
Rasoberry Pi + SORACOM Air SIM ( L-02C , AK-020 ) の wvdial.conf 設定情報

# Abstract
Raspberry Pi 2B,3 と SORACOM Air SIM で wvidal 接続する場合の wvdial.conf 設定情報の共有です。
USBドングルは L-02C と AK-020 の2種類です。diff っていただければ幸いです。
とにかく「シンプルに書くこと」が個人的に好きなので、余計なところは省きました :wink: 

# Raspberry Pi + L-02C + SORACOM Air SIM
```
pi@raspberrypi:~$ cat /etc/wvdial.conf
[Dialer Defaults]
Init1 = ATH
Init2 = AT&F
Init3 = ATZ
Init4 = ATQ0 V1 E1 S0=0 &C1 &D2
Init5 = AT+CGDCONT=1,"IP","soracom.io"
Dial Attempts = 3
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
Modem = /dev/ttyUSB2 # ここは適宜変更
ISDN = 0
Phone = *99***1#
APN = soracom.io
Username = sora
Password = sora
Carrier Check = no
Auto DNS = 1
Check Def Rpoute = 1
```
# Raspberry Pi2B + AK-020 + SORACOM Air SIM
```
pi@raspberrypi:~$ cat /etc/wvdial.conf
[Dialer Defaults]
Init1 = ATH
Init2 = AT+CFUN=1
Init3 = ATZ
Init4 = ATQ0 V1 E1 S0=0 &C1 &D2
Init5 = AT+CGDCONT=1,"IP","soracom.io"
Dial Attempts = 3
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
Modem = /dev/ttyUSB0 # ここは適宜変更
ISDN = 0
Phone = *99#
APN = soracom.io
Username = sora
Password = sora
Carrier Check = no
Auto DNS = 1
Check Def Rpoute = 1
```

# 余談
クールなドングルがないですよね。AK-020 は Windows 10、Ubuntu 16.04 LTS で接続を試みても、すぐに切断されるのです。上記の Raspberry Pi2B では問題なく接続されます。wvdial ではなく Network Manager の知識/経験を高めた方が良さそうかもしれませんね。AK-020 公式サイトは情報の集積、FAQの充実、応用方法をもう少し公開されることをフィードバックとして記載しておきました。
Digdag UIを試してみる


Digdag UIはドキュメントがなく絶賛開発中な感じですが、どんな見た目か気になったので試してみました.

![digdag-ui-0.8.3-min.gif](https://qiita-image-store.s3.amazonaws.com/0/21086/b9c6d973-f72e-e867-c8a8-6e82822e72c6.gif "digdag-ui-0.8.3-min.gif")

## サーバー

```properties:digdag-server.properties
server.http.headers.Access-Control-Allow-Origin=http://localhost:8080
```

- `digdag server --memory --config ./digdag-server.properties`
- `digdag push mydag`
	- 適当にワークフローを追加

## Digdag UI

今の所、`digdag`コマンドで立ち上げる方法が無いので
開発で使ってるっぽい方法でUIを立ち上げてみます.

```sh
git clone git@github.com:treasure-data/digdag.git
cd digdag/digdag-ui
npm install
npm run dev
```

これでブラウザで`http://localhost:8080/`にアクセスすれば、
ログイン画面が出てきます.

UsernameとPasswordは空でなければ何でも通ります.
USBメモリをFAT16でフォーマットするバッチファイル

http://qiita.com/7of9/items/51eee711dfb09869ec20
この記事のコメントのやりとりで、ドライブ番号が不定な環境でも自動処理できないか考えてみた。
リムーバブルメディアが1個だけという条件付きですが、固定ドライブの数が不定であってもUSBメモリをフォーマットすることができました。

```
@echo off

set DRIVENUM=
for /f "usebackq tokens=1-3" %%a in (`cmd /c "wmic diskdrive get mediatype,index"`) do if "%%b"=="Removable" set DRIVENUM=%%a

(
echo.select disk %DRIVENUM%
echo.clean
echo.create partition primary size=2048
echo.format fs=fat quick
echo.assign
) > %temp%\format.txt

diskpart /s %temp%\format.txt
```

いきなりこれを実行したりせずに、最後の行のdiskpart /sをtypeに変えてドライブ番号が正しいか確認しましょう。
BlenderでAnimationを作る

http://qiita.com/peroon/items/d243a3bc7b9706190a07
でAutomatic Weightをつけた後の作業です

* Animationビューにする
* Dope SheetをAction Editorにする
* Newボタンを押してAction（アニメーション名)をたとえばWalkとかに書き換える
* モデルのビューでIを押してKeyをInsertする（LocRotで位置と回転を１フレーム目に保存)
* 他のフレーム（例えばフレーム21)で骨を動かして同じくIでキーをうつ
* 右向き三角ボタンでプレビューする
* 必要なら1フレームと同じキーをShiftDでコピーして最終フレームにも置く
webpackちゃんと理解しとこ 設定ファイル 編

※ これは古いWebpackの情報です。(どのバージョンの話か忘れるぐらいには古い)

ドキュメント読みながら書いていたものの、まとめかたとして不適切だったので中途半端になってます。

[loader編](http://qiita.com/umezo@github/items/82cf78f76be8ca0b614c) ← prev | next → [わからなかった設定編](http://qiita.com/umezo@github/items/40135fe443abf741db1f)

なんとなく設定ファイルことwebpackと開発者のインターフェースであると思うのでちゃんと抑えておく。
http://webpack.github.io/docs/configuration.html

くっそ多いので適当に上から読んで分割してく


### CONFIGURATION OBJECT CONTENT
いきなりヒントに、pure json objectじゃなくてもいいって書いてある。
こういう小技は結構重要なきがする。


### 全部を読み終わって未だに分かってないこと一覧
- chunk
- entryに配列渡した時にexportされるもの
- output.filenameの`hash`と`chunkhash`
- output.filenameに複数のsubstitutionを指定できるか
- module.xxxContextXxx

### 気になった設定
この辺は実際に手を動かして別途確認したい。
- resolve
- externals
- profile
- debug
- node
- amd


# まとめ

- 多すぎて全項目書き起こすのはむだだったのであきらめた
- 気になる項目はあとで実際に動かして確認する


ここから下は最初に書いてたentry〜outputまでのメモ。
長過ぎるし、基本的なことだからいらなかった。

### entry
真っ先に実行されるべきjsファイルの定義。
オブジェクトで定義すると複数のjsを生成出来る。

- 文字列を渡すと、そいつが起動時に読み込まれる
- 配列を渡すと、起動時に全部読み込まれて最期の奴がexportされる。
    - このexportされるっていうのがどういうことかわかってない
- オブジェクトを渡すと、複数のバンドルが生成される
    - keyがチャンク名で値には上記の文字列/配列を渡す

### output
みたまんま出力に関する設定。複数のentryが定義されていてもoutput設定は一つ。

山程設定項目がある。

### output.filename
そのまんま生成されるjsに付ける名前。
絶対パスを定義してはいけない __だめ絶対(must not)__
そういうのは`output.path`でやる。

### 複数エントリーを定義しているとき
ファイル名に特定の文字列(substitutions)を埋め込むことで、別々のファイル名を付けることが出来る
- `[name]`
- `[hash]`
- `[chunkhash]`

`hash`と`chunkhash`の違いがわからん。
`hash`はコンパイル毎、`chunkhash`はファイル毎かな？

別にfilename以外の設定でも使える。


### output.publicPath
outputな設定というより、outputしたファイルの設定。
web上でのロケーションを表す。

コンパイル時に不明な場合は空のまま、処理されて実行時にエントリーポイントから`__webpack_public_path__`を通して設定出来るらしい。



### output.chunkFilename
エントリーポイントではないchunkのファイルの名前。`output.path`からの相対パス。
エントリーポイントじゃないchunkってどこで指定するんだろう。
`CommonsChunkPlugin`とかかな？

ここでも代替文字列が使える
- `[id]`
- `[name]`
- `[hash]`
- `[chunkhash]`

### output.sourceMapFilename
ソースマップを`output.path`したにどんな名前で出力するか？の定義。
デフォルトが`[file].map`らしいけど、ソースマップは必ず出力されるのかな。
チュートリアルでは出てなかったような。

代替文字列一覧
- `[file]`
- `[id]`
- `[hash]`

### output.devtool*
### output.hotupdate*
### output.jsonpFunction
すっとばした。

### output.pathinfo
デバッグ用で、コンパイル後のソース中のrequireがもともと指定されていたパスがコメントされる。


### output.library
### output.libraryTarget
### output.umdNamedDefine
ライブラリとしてbundleを作成する場合に指定する。設定郡。
npmモジュールがそのままbundleしたり、browserify出来る時代に必要な設定だろうか。


### output.sourcePrefix
みたまんま



### output.crossOriginLoading
以下を設定すると有効になる
- `"anonymous"`
- `"output.crossOriginLoading"`
【mBaaS】 初期設定　～carthageを使ってインストール～

carthage（カルタゴ）って読むみたいです。
カーセージ派もいるみたいですが、自分の知り合いはみんなカルタゴ派でした＞＜

最近では、結構色々なライブラリにも導入されていて、**mBaaSの方でも使用できるようになりました！**
carthageを利用する事の利点として、プロジェクトのビルドがとても速くなることや、余計なファイルを作られないなので、とてもシンプルな仕組みで利用できるといった事があるみたいです。


#Carthageの導入
実装の前提条件は、
**・Carthageを使ってNCMB.Frameworkを実装する**
**・NCMB.Frameworkを実装するプロジェクト名はMyProject**
として説明いたします。

##Carthageのインストール
https://github.com/Carthage/Carthage/releases
から**Carthage.pkg**をダウンロードしてインストールしてください。
（Homebrewを使ってインストールする方法もあります）

##NCMB.Frameworkを実装するプロジェクトを作成する

・**Xcode**
　New→Project 
　　→Product Name ： MyProject
　でプロジェクトを作成しましょう。

##プロジェクトのディレクトリへcdコマンドを使って移動

~~~ruby
cd myProjects/application/MyProject
~~~


##touchコマンドでCartfileを作成

~~~ruby
touch Cartfile
~~~

プロジェクト内のフォルダにCartfileが作成されます。

![carthage09.png](https://qiita-image-store.s3.amazonaws.com/0/126404/4a856b10-7d6b-6018-677a-8ed0a8eaf257.png)

##Cartfileを編集
~~~ruby
vim Cartfile
~~~

でCartfileを編集します。
（テキストエディットでも特に問題ありません）

###Cartfileに記述する内容
mBaaSのFrameworkをを利用する場合は以下のように記述します。

~~~ruby
github "NIFTYCloud-mbaas/ncmb_ios"
~~~

ブランチから利用する場合は以下のように記述します。

~~~ruby
github "NIFTYCloud-mbaas/ncmb_ios" "ブランチ名"
~~~

##外部ライブラリをcarthageコマンドを使ってビルド

コマンドで、

~~~ruby
carthage update --platform iOS
~~~

を実行する事で、**MyProject/Carthage/Build/iOS**　に **NCMB.framework** が作成されます。

![carthage02.png](https://qiita-image-store.s3.amazonaws.com/0/126404/3878907e-67eb-bfef-b885-21740b2de00b.png)

##プロジェクトにNCMB.Frameworkを追加
続いて、xcodeからNCMB.Frameworkを追加して使用できるようにします。
xcodeで作成したMyProject.xcodeprojからプロジェクトを開きます。

####・Linked Frameworks and LibraryにNCMB.Frameworkを追加

Generalタブから、**Linked Frameworks and Library** にある **＋** ボタンを押して、

![carthage03.png](https://qiita-image-store.s3.amazonaws.com/0/126404/45b47e64-7e6c-43ba-a35b-cb7a7729c02d.png)


**Add Other...** を押して、

![carthage05.png](https://qiita-image-store.s3.amazonaws.com/0/126404/dd009442-7ada-6251-912d-c4f8bbd9e323.png)


**MyProject/Carthage/Build/iOS** にある **NCMB.framework**を選択します。

![carthage02.png](https://qiita-image-store.s3.amazonaws.com/0/126404/3878907e-67eb-bfef-b885-21740b2de00b.png)

**Linked Frameworks and Library** に **NCMB.Framework**が表示されます。

####・Build Phasesの設定

NCMB.Frameworkが表示されたら、**Build Phases** タブに移動し **＋** ボタンを押して、
**New Run Script Phase** を選択します。

![carthage07.png](https://qiita-image-store.s3.amazonaws.com/0/126404/6eeba805-d32e-e181-b43a-3b9461b81a86.png)


**shell /bin/sh** と書かれている下のところに以下内容を記述します。

~~~
/usr/local/bin/carthage copy-frameworks
~~~

その下にある **input Files** の **＋** ボタンを押して、NCMB.frameworkのパスを記述します。

~~~
$(SRCROOT)/Carthage/Build/iOS/NCMB.framework 
~~~

![carthage08.png](https://qiita-image-store.s3.amazonaws.com/0/126404/88b0b16d-ee66-1942-3067-5d001138a17c.png)


無事にプロジェクトのビルドが通れば実装完了となります！
是非是非、carthageでNCMB.Frameworkをご利用ください！！

# carthageの作成（配布）

1.
 Manage schemes...から、Sharedにチェックを入れます。

2.```
 $ carthage build --no-skip-current```
をターミナルで実行します。

プロジェクト内に、Carthageフォルダが作成されて、NCMB.frameworkが作成されていれば成功です！
【mBaaS】 初期設定　～cocoaPodsを使ってインストール～


mBaaSのSDKはcocoaPodsからインストールすることも出来ます。
cocoaPodsを利用すれば、コマンド一つで必要なライブラリが簡単にインストールされたり、gitやsubversionでの
リポジトリ管理は外部ライブラリを除いた部分だけ管理すればよくなるといった利点があります。

#cocoaPodsの導入
さっそく導入と行きたいのですが、今の自分の職場の環境ではプロキシの問題がありますので、
その設定方法も合わせて記述いたします。

##ターミナルからpodsをインストール

__通常環境（非プロキシ環境）__

~~~ruby
$ sudo gem install cocoapods
~~~

__プロキシ環境__

~~~ruby
$ sudo gem install cocoapods -p http://ユーザー名:パスワード@プロキシのサーバアドレス:ポート番号 
~~~


ただ、最近macOS EL Capitanからrootlessという概念が登場したみたいで、root権限を持つユーザーでもアクセスが制限されるようなので、インストール場所を変更する必要があるようです。（/usr/local/binの場所は例としてです）

__macOS EL Capitanでの設定方法__

~~~ruby
$ sudo gem install -n /usr/local/bin cocoapods -p http://ユーザー名:パスワード@プロキシのURL:ポート番号
~~~


##セットアップ
~~~ruby
$ pod setup
~~~

これでpodsの導入が完了となります。


#外部ライブラリをインストール
では、実際に外部ライブラリをインストールしていきましょう！！

##podファイルの作成

まずcdコマンドで外部ライブラリをインストールするプロジェクトへ移動しましょう。

~~~ruby
$ cd myProjects/application/myProject
~~~

移動が完了すると、

~~~ruby
$ pod init
~~~

でプロジェクトのフォルダ内にpodfileが作成されます。
（podfileはテキストエディタで編集できます）

podファイルの中身は、以下のように記述しましょう！

```
platform :ios,’9.3’

target "myProject" do
   pod 'NCMB', :git => 'https://github.com/NIFTYCloud-mbaas/ncmb_ios.git'
end
```
__バージョンを指定する場合__

```
pod 'NCMB', '~> 2.3.1'
```
__ブランチを指定する場合__

```
pod 'NCMB', :git => 'https://github.com/NIFTYCloud-mbaas/ncmb_ios.git', :branch => 'ブランチ名'
```
##外部ライブラリのインストール
```
$ pod install
```

これで無事に成功すればcocoaPodsを使ってmBaaSを導入出来ます！
CommandInvokationFailure: Failed to re-package resources.というエラーが出た

#CommandInvokationFailure: Failed to re-package resources.
久しぶりに新しいPCをセットアップしてみたらビルドエラーに遭遇したのでメモ.
UnityでAndroid向けにビルドをしようとしたら
`CommandInvokationFailure: Failed to re-package resources. See the Console for details.`
というエラーが出てしまう場合の対処法(自己責任で).

##対処法
いろいろググったらAndroidManifest.xml関連が原因ですよというページが見つかったが，自分の環境ではこれでは直らなかった.
結論から言うと,C:\Users\ユーザ名\AppData\Local\Android\sdk\build-toolsから24というディレクトリを消す.これだけ.