OmniAICreator/Qiita-1.07M huggingface dataset:
UnityのPBXProjectでXcode7プロジェクトに.tbdを追加する

Xcode7ではdylibファイルがtbdファイルに切り替わったことがあり、
Unityでもその対応が必要になりそうです。

実際UnityからXcodeをビルドすると
libiconv.2.dylibがミッシングになっています。

こちらビルドは正常に通るみたいですが、
気になるのでPostProcessBuildとPBXProjectを使って自動置き換えを試みました。
（のちのち他のtbdを追加することもありそうですし...)

ちょっとさわってわかったのですが、
そもそも現状のPBXProjectはdylibファイルの追加も対応してないみたいです。
AddFrameworkToProjectやAddFileToBuildだと、
ProjectのヒエラルキーにはでるけどBuild Phasesには表示されないなどへんな感じです。

PBXProjectは[ソースが公開](https://bitbucket.org/Unity-Technologies/xcodeapi)されているため確認すると、たしかにFrameworkのことしか考慮されていないもよう。

とういうことで、tbdを含めてLibraryを扱う機能を追加してみました。
https://bitbucket.org/mikito/xcodeapi/branch/feature/tbd

改造版PBXProjectの導入方法はこちら
http://qiita.com/mikito/items/0a1f14c6d9d573c1ab27

以下のようなコードで修正や追加を実行します。

```Editor/FixIconvPostprocessBuildPlayer.cs
using UnityEngine;
using System.Collections;
using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;

public class FixIconvPostprocessBuildPlayer
{
	[PostProcessBuild]
	public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
	{
		if (buildTarget != BuildTarget.iPhone) return;
		
		string projPath = PBXProject.GetPBXProjectPath(path);

		PBXProject proj = new PBXProject();
		proj.ReadFromFile(projPath);
		 
		string target = proj.TargetGuidByName("Unity-iPhone");

		proj.RemoveLibraryFromProject(target, "libiconv.2.dylib");       
		proj.AddLibraryToProject(target, "libiconv.2.tbd", false);

		proj.WriteToFile(projPath);
	}
}
```

Unityが公式に対応するまでは、
こんな感じでやってくしかなさそうです。
JJUG CCC Fall 2015


# Keynote2 - Java EE 8 Work in Progress -

Java EE 8 のテーマ

- HTML5のサポート
- 開発容易性
- クラウド対応

けっこう開発が進んでるものもあるし、イマイチなのもある
特にWeb層の拡張はけっこう進捗進んでる

Java EE8でHTML5サポートするのは自然な流れ

## 追加フィーチャー

### JSON-B 1.0

Java ObjectをJSONに変換するAPI
JacksonとかGsonあるから再発明するわけじゃない。
ベストプラクティスの開発。
Gsonとかの上に乗っかって動くもの。好きな物使えばいい。
デフォルトマッピングを提供する。

### JSON−P 1.1

Java EE7から入ってるやつのアップデート
JSON-Pointer IETF RFC6901

JsonCollectors
JsonArray

### Server sent Events

JAX-RSのAPIで実装した
リファレンス実装のJerseyがすでにSSEをサポートしてたから

### MVC

コンポーネントベースのMVC

# JCache

グレッグ
HazelCastのCEO

## キャッシング入門

キャッシュとは、キャッシュを使ってない人は使うべき、使ってる人はもっと使うべきもの。

キャッシュの利点

- パフォーマンス
- オフロード
- スケーラブルではないアーキテクチャでも重要
	- メインフレームとか
- スケールアウト

ブラックフライデーみたいな一時的な負荷に備えて一時的にキャッシュ用のノードを追加する
クラウドでデータグリッドを実現

JCacheはこれらを迅速に可能にする技術

## いつキャッシュを使うのか

- アプリケーションが同じデータに二回以上アクセスするなら使う価値がある
- データベースにフェッチするよりかは遙かに早い

どんなところに使うか

- Webアプリケーション
- ネットワークにまたがるRESTfulなシステム
- ゲーム会社とかみたいなところに有効
- オブジェクトはグラフ構造になっているので、100TBとかになっても有効
- データの永続化

## データベースキャッシング

複数アプリ→一つのDBな例

従来ならこれをスケールすることは難しい

NoSQLとかを採用しなくても、キャッシングだけでも相当な効果がある

## キャッシュはRAMに構築

典型的な例では、JVMのヒープ領域を使う
→GC対象

フレームワークには色んなものがある

Amdahl

## キャッシングについて

問題点

スタンドアロンキャッシュをやめて、分散キャッシュにする
Immutableなデータなら移行は安全

## JCache

完成した
12年かかってできた

### コンセプト

Map vs Cache API

どちらもキーバーリュー

ChacheManager＝データベースみたいなもん
Cache＝テーブルみたいなもん

## Spring

SpringはアノテーションでJCacheを色々使えるようになってる

## Hazelcast JCache Support

- フル実装

# Reactive Web Application - そしてSpring5へ

http://www.slideshare.net/makingx/reactive-web-spring-5-jjugccc-cccef3

アムダールの法則

ブロッキングIOは悪

今でもとりあえずブロッキングコード書いてても動いてるしいいじゃん
たしかに今は問題ない

IoTとかMSAでコール数は増えるはず

ブロッキングコード使ってると金がかかる

ノンブロッキング

リアクティブプログラミングはGUIの世界で使われてる

# タイムマシン採用 明日のエンタープライズJavaの世界を予想する

タイムマシン経営
最近はそんな時間差もなくなってきた

## 日本のIT業界も似たような状態ではないか

- イノベーションスピードの優先 (Web企業)
- リスクの最小化を優先 (SI系企業)

この二つに技術の時間差があるんじゃないか、という話

全く異なる技術が使われてるわけじゃない。
Web系は試行錯誤してうまくいったのをドンドン進化させる
↓
タイムマシン採用

必ずしも全部がSIに入るって分けではない

## 採用確実な技術

- HTML5
- MSA
- Java EE7 / Java SE8
- Docker
- Chef

## エンタープライズ

これからエンタープライズの分野でも分割による再利用をちゃんとやらないと行けなくなってくる

ブラウザ・クライアント環境が増えてきた
これらの変化のスピードが速いため

# きしださんの話

CPUをパワーアップさせようという発想する人は今はいない
CPUの性能が頭打ちだから

データ船トリックシステム
Hadoopのコンセプト

処理を行うのはCPUだけじゃなくなる。
じゃあどこ？→GPU

ノイマン型アーキテクチャ
メモリから命令を呼び出して、命令に従って回路で処理を行う

- CPU
	- 色んな機能がある
	- OSが動くかどうかが基準
- GPU
	- ちょうたくさんコアがある

非ノイマン型アーキテクチャ
ノイマン型じゃないやつ

- FPGA
- ニューラル型コンピュータ
- 量子コンピュータ

JavaでGPU

ディープラーニング実装してみた

Javaで色々できるか？→足りてない

Close to Metal
→ハードウェアに近づこうと言うアプローチ

Unsafe
けっこう使われてるけど近いうちに廃止される

Specialization

Array<int>がやりたい

# G1GCの話

G1GC=たこ焼き器

GCログはしっかり取る！

まずはSuvivorに移動
いっぱいになったり古かったらOldに移動
そして回収

G1はけっこうガンガン回る

元々G1はヒープがでかいものに対してできたものなので、ヒープがでかいやつに使え！
ムリせずCMS GC使え

OutOfMemoryErrorが発生したらどうしたらいい？
起動し続けるのは進めない。停止するべき。
OutOfMemoryErrorが発生した場合にHeapDumpを吐き出すオプションを付けとくといい

HeapStats入れるといいよ！

カードって何？
CT＝CardTable


# 懇親会

LTやりました。
GCPUG Shonanのイベントを宣伝しました。
前日なので当然申込はありませんでしたｗ

でも、LT終わった後二人ほど話しかけて頂けてすごく嬉しかったです。
次回のGCPUG Shonanには参加してください！お願いします！
レコードを更新したときのレコードの並びが、ローカル環境(sqlite)とHeroku(PostgreSQL)で異なる

##現象
データベースにレコードを追加・更新していった場合、
ローカル環境(sqlite)ではレコードがidの昇順になっているが、
Heroku(PostgreSQL)では順序が異なる。



```text:ローカル環境(sqlite)
 id |         title          |         created_at         |         updated_at         
----+------------------------+----------------------------+----------------------------
  1 | hoge1                  | 2015-07-11 03:01:41.459369 | 2015-07-10 19:30:38.917108
  2 | hoge2                  | 2015-07-12 03:03:41.459369 | 2015-12-03 07:22:19.342057
  3 | hoge3                  | 2015-07-12 03:05:41.459369 | 2015-09-10 21:13:38.917108
  4 | hoge4                  | 2015-09-11 03:01:41.459369 | 2015-12-03 07:22:04.481084
```


```text:Heroku(PostgreSQL)
 id |         title          |         created_at         |         updated_at         
----+------------------------+----------------------------+----------------------------
  1 | hoge1                  | 2015-07-11 03:01:41.459369 | 2015-07-10 19:30:38.917108
  3 | hoge3                  | 2015-07-12 03:05:41.459369 | 2015-09-10 21:13:38.917108
  4 | hoge4                  | 2015-09-11 03:01:41.459369 | 2015-12-03 07:22:04.481084
  2 | hoge2                  | 2015-07-12 03:03:41.459369 | 2015-12-03 07:22:19.342057
```

##原因
PostgreSQLでは、レコードを追加または更新した順序で表示している。
（追加または更新が最新のものが下にくる）

##対処法
きちんと決まった順序でレコードを取得したい場合には、ORDER BYを指定してやればよい。
たとえば、idの昇順で全件取得したい場合、

```rb:hoge_controller.rb
@hoges = Hoge.all.order("id ASC")
```
Hiccup を使うときはエスケープ問題にご注意

[先日アドベントカレンダーで書いた](http://qiita.com/ayato_p/items/1cfd17d8c10e5f281eb5)といったドキュメントが思いの外好評ぽかったので安心しているところですが、一点だけ注意しないといけないことがあります。

とりあえず以下のようなコードを書いてみます。

```clj
(ns demo.core
  (:require [hiccup.core :as h]
            [immutant.web :as web]
            [ring.util.response :as res]))

(defn handler [req]
  (let [user-input "<script>alert('(\\\\( ⁰⊖⁰)/)')</script>"]
    (-> [:div user-input]
        h/html
        res/response
        (res/content-type "text/html; charset=utf-8"))))

(web/run #'handler {:port 3000})
```

するとあら不思議。

![piyopiyo.png](https://qiita-image-store.s3.amazonaws.com/0/14889/2777831b-428c-855f-7602-225eb3ad120c.png)

このようにアラートが画面に出てしまいます。これは Hiccup が自動的に文字列をエスケープしてくれないためです。ではどうしたら良いかというと次のようにします。

```clj
(defn handler [req]
  (let [user-input "<script>alert('(\\\\( ⁰⊖⁰)/)')</script>"]
    (-> [:div (h/h user-input)] ;; hiccup.core/h を使うことで文字列をエスケープすることが出来る
        h/html
        res/response
        (res/content-type "text/html; charset=utf-8"))))
```

![piyoooo.png](https://qiita-image-store.s3.amazonaws.com/0/14889/78ca118d-1c11-90a5-44cd-14a944d131a9.png)

はい、これで安心ですね。

ホビー/学習用途で Hiccup を使う場合、そこまで気にする必要がないかもしれませんが実プロダクトで使うときには気を付けてください。

## 補足

自動的にエスケープしてくれるテンプレートエンジンが多い中、 Hiccup のような存在は珍しいと思います。この問題は Issue にもあがっているのですが、 Hiccup 自身を根幹から作り変えないと対応出来ない上に対応中のブランチも開発が止まっているようでなかなか改善されないでいます。

Hiccup のような記述方法は使いたいけど、いちいちエスケープをするのが嫌だ、という方は次のように Enlive を使うことで問題を解決できます。

```html:resources/template/main.html
<!doctype>
<html>
    <body>
    </body>
</html>
```

HTML のテンプレートを用意しておいて…

```clj
(ns demo.core
  (:require [immutant.web :as web]
            [net.cgrand.enlive-html :as html]
            [ring.util.response :as res]))

(html/deftemplate layout "template/main.html" [content]
  [:body] (html/content content))

(defn handler [req]
  (let [user-input "<script>alert('(\\\\( ⁰⊖⁰)/)')</script>"]
    (-> [:div user-input]
        html/html
        layout
        res/response
        (res/content-type "text/html; charset=utf-8"))))
```

こうすれば、 Hiccup の記述力を失わずにセキュアなコードを書くことができます。ベター Hiccup としても使える Enlive は優秀です。

(ドキュメントの方は後で注意書きを足しておきます)
UnityのInstantiateを使うときはas Transformしてはいけない?

##UnityのInstantiateを使うときはas Transformしてはいけない?

`Instantiate(hoge) as Transform` ではなく
`Instantiate(hoge) as GameObject` を使用するべき。



```lang:テスト[transformキャストの場合]
var newObject = Instantiate (prefab, Vector3.zero, Quaternion.identity) as Transform;

if(newObject == null) {
 print("nullだよ");
}

##実行結果
nullだよ
```
上記のようにas TransformでキャストするとnewObjectがnullになる。(ただし、Hierarchy上にはきちんと生成されてる)

as GameObjectだとnullにならないので、Instantiateするときはas GameObjectを使用しよう。
Android TabLayoutでタブを均等に配置する



ggると

```java
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
tabLayout.setTabGravity(TabLayout.GRAVITY_CENTER);
```


がヒットするのですが、これをやっても Android 4.2 では


![yotteru.png](https://qiita-image-store.s3.amazonaws.com/0/74328/149cbecb-7867-6036-4d6d-11fa6a89df42.png)



な風になります。
試行錯誤した結果、

```java
tabLayout.setTabMode(TabLayout.MODE_FIXED);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
```


だと 

![center.png](https://qiita-image-store.s3.amazonaws.com/0/74328/0359bf64-c22e-25ea-9bc6-403aeea419c6.png)


均等になりました。

Android 6.0,4.2で確認しています。

それにしてもこのバージョンフラグメントなんとかならないかな〜。
Terraformで簡単なところからいろいろ試してみた報告(tfファイル付き)

# Terraformで簡単なところからいろいろ試してみた報告(tfファイル付き)

HashiCorp Advent Calendar 2015の3日目の担当がまだいなかったので、とりあえずTerraform試してみた報告でもしようかと思います。

実際のtfファイルと合わせてどうぞ。

## シンプル構成

とりあえずTerraformってどんな感じで動くんだろう？と思って試してみた構成

![simple.png](https://qiita-image-store.s3.amazonaws.com/0/808/5f0c74d7-c7d4-c51d-2532-db46b7211372.png)

楽しくて `terraform apply` と `terraform destroy` をやりすぎてAWS破産に一歩近づきました。

https://github.com/k1LoW/playground/tree/master/terraform/simple


## 既に存在するVPC構成に新しくEC2インスタンスをたてる

既存のプロジェクトへステージング環境とかデモ環境を作ったりするときに採用することもあるはずです。

![existing-subnet.png](https://qiita-image-store.s3.amazonaws.com/0/808/bd713b9a-8285-a573-1a03-8b8a64d60334.png)

Subnet IDとVPC IDだけ調べて用意したらOKでした。簡単です。 `terraform destroy` で綺麗に消えてくれるのもGood。

https://github.com/k1LoW/playground/tree/master/terraform/existing-subnet

## EC2とRDSのよくある構成

RDSもよくプロジェクトで使うので、試してみます。

![ec2-and-rds.png](https://qiita-image-store.s3.amazonaws.com/0/808/ae8a0db7-bdd3-978e-e6b7-986ab10498f6.png)

tfファイルはこちら

https://github.com/k1LoW/playground/tree/master/terraform/ec2-and-rds

設定内容が途端に増えてきました。

いつもAMCを使ってなんとなくポチポチやっていたのが、tfファイルを書くことで各リソースの関係が見えてきました。

ちなみに

    $ terraform graph > input.dot; dot -Tpng output.png input.dot

と打つとリソースの関係が実際に見えます。

![output.png](https://qiita-image-store.s3.amazonaws.com/0/808/7b2c75dc-ec07-15c5-17aa-6ea81a5d4ec4.png)

## Moduleを使ってみた

Terraformには [Module](https://www.terraform.io/docs/modules/index.html) という仕組みがあるらしいので、使ってみました。

使ったのはこちら

https://github.com/terraform-community-modules/tf_aws_vpc

で使ったtfファイルがこちら

https://github.com/k1LoW/playground/tree/master/terraform/use-module

ec2-and-rdsの構成とほぼ同じ構成になります。

## 最後に

やっぱりTerraform使いは「テラフォーマー」って言われるんですかね？

これからもテラフォームしていこうと思います。
自分のNameタグを取得する


ec2-tools系の古い情報しかないので、aws cli向けに書き直し

```bash:
#!/bin/bash

REGION=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/.$//'`
INSTANCE_ID=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id`
TAG_NAME=`aws ec2 --region ${REGION} describe-tags --filters "Name=resource-id,Values=${INSTANCE_ID}" --query "Tags[*]" --query "Tags[?Key=='Name'].Value" --output text`


```
ローカルのWordpressを複数のPCで共有する

XAMPPでローカルのWordPressを作成する方法は[こちら](http://qiita.com/nbkn/items/23c41adcb1ade5b2f99c)を参照．

# やりたいこと
DropBoxなどを使ってローカル環境のWordPressを複数のPCで共有したい．

#環境
XAMPP 5.6.14 (https://www.apachefriends.org/jp/index.html)
WordPress 4.3.1 (https://ja.wordpress.org/)
Windows 7，8で動作確認済み

#手順
phpMyAdminのデータベースの参照先フォルダを，共有フォルダにしてあげればよい．

##1.WordPressのデータベースを共有フォルダに移動
デフォルトでは，XAMPPのphpMyAdminの参照先は，`C:\xampp\mysql\data`となっている．
このフォルダの中身を，そっくりそのまま共有フォルダに移動．
今回は，`C:\Users\Dropbox\mysql\data`に移動した．

（任意のフォルダをバーチャルホストに設定する方法は[こちら](http://qiita.com/nbkn/items/e72b283c54403a30b2e1)を参照）

##2.phpMyAdminの設定変更
`C:\xampp\mysql\bin\my.ini`を開く．
32行目にある

```
datadir = "C:/xampp/mysql/data"
```

を以下のように，先ほどフォルダを置いたところに変更する．

```
datadir = "C:\Users\Dropbox\mysql\data"
```

これだけでOKだが，ついでにエラーログファイルの場所も変更しておく．（競合しそうだけど）
42行目を次のように変更．

```
log_error = "C:\Users\Dropbox\mysql\data\mysql_error.log"
```

あと今は使わないけど，今後プラグインを使う時のために，49行目も同じように変更．

```
plugin_dir = "C:\Users\Dropbox\mysql\plugin\" 
```

これでDropBoxを使ってローカル環境のWordPressを複数のPCで共有することができる．
Herokuでduplicate key value violates unique constraintと怒られたときの対処法

##現象
Herokuのデータベースにレコードを追加しようとすると、以下のようなエラーメッセージがでることがある。

```
PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "テーブル名_pkey"
2015-12-02T08:55:37.548233+00:00 app[web.1]: DETAIL:  Key (id)=(1) already exists.
```
「id = 1は既に存在します」と怒られている。たしかにすでに複数レコードが保存されているのだが、最大値のidでよしなに保存してくれないようだ。


##原因
>**postgresqlのシーケンス値は、mysqlと違って指定カラムの最大値を取ってくれるのではなく、別に保存してある「最大値」を設定するようになっている。**

>SQLでinsertして行く分には基本問題ないけれど、**CSVなどからインポートした場合、保存した値とずれてしまい、**SQLからのinsert時に"duplicate key value violates unique constraint"などと怒られてしまうことがある。

参考 : http://blog.livedoor.jp/loopus/archives/50846480.html


たしかに自分の場合もrake db:seedでダミーデータを流し込んでいた。
（ローカル環境のsqliteでは問題なくレコード追加できてしまう。）

##対処法

対処法としては、[HerokuのPostgreSQLに接続](http://qiita.com/shikatani/items/c7af30b98c2d0419d7af)して

```
select setval('テーブル名_id_seq',(select max(id) from テーブル名));
```
と実行してやるとOK。
rubyでグラフを書く

#### install
```
brew install imagemagick

brew install pkg-config

brew install ghostscript

gem install rmagick
```

#### 実行ファイル

``` gruff.rb
require 'rubygems'
require 'gruff'


g = Gruff::Line.new

g.title = "doller,Yen"
g.font = "./meiryo.ttc"

g.marker_font_size = 10

g.maximum_value = 105
g.minimum_value = 95

g.theme = {:background_colors => %w[blue white]}


g.data("JPY USD", [100.6399, 99.5199, 99.18, 101.33, 101.3399, 105.3, 105.3199, 105.7399, 106.0299, 104.08], "#cc6699")


g.labels = {0 => '10/10',1 => '10/9',2 => '10/8',3 => '10/7',4 => '10/6',5 => '10/3',6 => '10/2',7 => '10/1',8 => '9/30',9 => '9/29'}

g.write('yen.png')
```

#### 実行

```
ruby gruff.rb
```
WindowsでANGLEをビルド

WindowsでANGLEをビルドするための方法について記載します。正確には、Visual Studio 2013のソリューションファイルを作成するための手順です。ビルド手順は、[こちら](https://github.com/google/angle/blob/master/doc/DevSetup.md)のページに記載されていますが、これを行うためにはdepot_toolsが必要です。しかし、depot_toolsの紹介記事の多くがLinuxやOS X用の記事のため、Windows用のやり方をまとめておきます。

#ANGLEとは？
[ANGLE](https://github.com/google/angle)とは、OpenGl ESのDirectX実装です。ANGLEを使うことで、OpenGL ESを用いたWindowsのネイテイブアプリケーションを開発することができます。その他のOpenGL ESの利用方法との比較検討は[こちら](http://qiita.com/takao_mofumofu/items/d6d835788571fb75d676)の記事を御覧ください。

#環境
大前提として、Visual Studio 2013がインストールされてる必要があります。

#depot_toolsのインストール
[depot_tools](https://www.chromium.org/developers/how-tos/install-depot-tools)には、Cygwinを使った方法も紹介されていますが、Cygwinのインストールも面倒なため、今回はCygwinを用いない方針で進めていきます。手順はこちらに書いてある通りですが、一応日本語での紹介ということで記載しておきます。

まず、[depot_tools](https://www.chromium.org/developers/how-tos/install-depot-tools)のサイトから、[depot_tools.zip](https://src.chromium.org/svn/trunk/tools/depot_tools.zip)をダウンロードします。ダウンロードが終わったら、適当なディレクトリに展開します。ここでは、C:ドライブ直下に展開します。
次に、環境パスに「C:\depot_tools」を追加します。
最後に、コマンドプロンプトを開き、

```
>gclient
```

と入力し、実行します。すると、python 2.7.6やgitのダウンロードが始まり、必要な環境を整備してくれます。



#ANGLEのVisual Studio用ソリューションファイルの作成
[ANGLEのDevelopment setup](https://github.com/google/angle/blob/master/doc/DevSetup.md)の通りに進めていけば問題ありませんが、こちらも一応日本語での紹介ということで記載しておきます。

まずは、depot_toolsの設定です。コマンドプロンプトから、以下のように実行します。

```
>set GYP_GENERATORS=msvs
>set GYP_DEFINES="windows_sdk_path=YOUR_WIN_SDK_INSTALL_DIR"
>set GYP_MSVS_VERSION=2013
```

次に、適当なディレクトリで以下を実行します。

```
>git clone https://chromium.googlesource.com/angle/angle
>python angle/scripts/bootstrap.py
>gclient sync
```

以上で、buildディレクトリ下にVisual Studio 2013のソリューションファイルが出来上がります。あとは、こちらからビルドするだけです。

#まとめ
ANGLEのビルド方法を紹介しました。実際にはdepot_toolsとANGLEサイトにある手順の単なる書き直しで、どちらも単に日本語訳しただけですが、意外とシンプルだったということのメモ書きとして、記事にまとめました。
XAMPP 5.6.14を使ってローカルにWordPressをインストールする


# 概要
XAMPP バージョン5.6.14が2015年10月にリリースされ，以前のバージョンと少々変っているようだったのでメモを残しておく．
ついでにphpMyAdminのパスワード設定方法もメモっとく．

# やりたいこと
XAMPP 5.6.14を使ってローカル環境にWordPressをインストールしたい．
前提として，XAMPPはインストール済みのものとする．

#環境
XAMPP 5.6.14 (https://www.apachefriends.org/jp/index.html)
WordPress 4.3.1 (https://ja.wordpress.org/)
Windows 7，8で動作確認済み

#手順
ざっくり言えば，phpMyAdminでデータベースを設定して，localhostでWordPressをインストールするだけです．


##1. データベースの設定
###1-1 phpMyAdmin起動
まず，XAMPPコントロールパネルからApacheとMySQLを起動し，ブラウザでphpMyAdminにアクセス．
(phpMyAdminは，XAMPPコントロールパネルのMySQL欄にある『Admin』ボタンを押すか，http://localhost/phpmyadmin/ から行ける)
開くとこんな画面が出るはず．

![image](https://qiita-image-store.s3.amazonaws.com/0/71593/63431dbd-816c-00fd-d1a0-da2fedfa9bb6.png)


なにやら下の方にエラーメッセージが……

![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/71593/0352808a-ccbb-3452-1543-c6c3c5e18241.png)


```
MySQL のデフォルト特権アカウントである root ユーザでパスワードを使用せずに接続しています。
お使いの MySQL サーバはこのデフォルト設定で動作しているため不正アクセス可能な状態になっています。
root ユーザのパスワードを設定することによって、必ずこのセキュリティホールは閉ざしてください。
```

rootのパスワードが無いとのこと．
ローカル環境なので無視してもよさそうだが，気持ち悪いので設定しておく．

###手順1-2. phpMyAdminにパスワードを設定する（飛ばしてもOK）
以前のバージョンでは，phpMyAdminのパスワードを設定するには，ダッシュボード(http://localhost/dashboard/ )のSecurityって項目から設定すればよかった．
でもXAMPP 5.6.14ではSecurityという項目が消えている．


![image](https://qiita-image-store.s3.amazonaws.com/0/71593/24cb3377-bc04-5f34-391e-793269c6c3aa.png)


仕方ないのでコマンドプロンプトから設定することにする．

まず `C:\xampp\mysql\bin` にパスを通し，コマンドプロンプトで以下のコマンドを実行．

```
mysqladmin -u root password
```

すると新しいパスワードの入力を求められるので，設定する．
次に，`C:\xampp\phpMyAdmin\config.inc.php`を開き，19行目あたりにある，

```
/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'config';

```

を，次のようにcookieに変更．

```
/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'cookie';

```

その後，もう一度phpMyAdmin(http://localhost/phpmyadmin/ )にアクセスすると，見慣れたアイツが出てくる．

![image](https://qiita-image-store.s3.amazonaws.com/0/71593/b56c5d23-d2a5-5bab-37e8-8342570c2501.png)


ユーザー名をroot，パスワードを先ほど設定したものにすればログインでき，エラーメッセージも消える．


###1-3 データベースの作成
phpMyAdminの『データベースの作成』をクリック

![image](https://qiita-image-store.s3.amazonaws.com/0/71593/4670cc3e-9eee-563e-9ea8-0c8b271db43c.png)

『データベースを作成する』というテキストボックスに，好きなデータベース名を入力し，作成ボタンクリック．

![image](https://qiita-image-store.s3.amazonaws.com/0/71593/b72aadbf-2ab7-7749-4fc0-9bb929939fac.png)

phpMyAdmin側での設定は以上．


##2. WordPressのインストール
インストールと言っても特にやることはない．
https://ja.wordpress.org/ からダウンロードしてきたzipファイルに含まれる`wordpress`フォルダを，そのままVirtualHostのフォルダに移動．今回はhttp://localhost/ 直下に置くことにする．
（任意のフォルダをバーチャルホストに設定する方法は[こちら](http://qiita.com/nbkn/items/e72b283c54403a30b2e1)を参照）

ブラウザからhttp://localhost/ にアクセスして，`wordpress`フォルダをクリック．

![image](https://qiita-image-store.s3.amazonaws.com/0/71593/d0ab1ddb-fb4d-e964-9388-549e019242ac.png)


以下のようなページが出れば成功．

![image](https://qiita-image-store.s3.amazonaws.com/0/71593/e03ab086-58ad-d494-f973-c6e35c577c53.png)

必要なものを入力し，インストールボタンをクリックすれば，ダッシュボードにアクセスできる．

![キャプチャ7.PNG](https://qiita-image-store.s3.amazonaws.com/0/71593/5409d843-9497-3357-d7e0-9ed23f679066.png)


phpMyAdminのパスワード設定が面倒なだけで，結構簡単にローカルのWordPressが作れた．

#参考
以下のサイトを参考にさせていただきました．
http://hapisupu.com/2015/11/xampp-5-6-14-version-up-fix-no-security/
AngularJS + ES6ならbindToControllerとcontrollerAsを使ってクールにカスタムディレクティブを作ろう

# 従来のポピュラーな作り方

``` javascript
angular.module('SampleApp', [])
  .directive('customDirective', function () {
    return {
      require: ['ngModel'],
      scope: {
        sampleText: '=ngModel'
      },
      template: '<input type="text" ng-model="sampleText">' +
        '<div>nanka</div>',
      link: function (scope, element, attrs) {
        var changeSampleText = function () {
          scope.sampleText = 'changed';
        }

        changeSampleText();
      }
    }
  })
;
```

# ES6でクールな作り方

``` javascript
class CustomDirective {
  require = ['ngModel'];
  scope = {};
  bindToController = {
    sampleText: '=ngModel'
  };
  template = `
    <input type="text" ng-model="ctrl.sampleText">
    <div>nanka</div>
  `;
  controller = CustomDirectiveController;
  controllerAs = 'ctrl';
}

class CustomDirectiveController {
  sampleText;

  constructor () {
    this.changeSampleText();
  }

  changeSampleText () {
    this.sampleText = 'changed';
  }
}

angular.module('SampleApp', [])
  .directive('customDirective', () => new CustomDirective())
;
```

# ごめんなさい

もっとちゃんと説明したいけどわかる人は「あ、素敵」ってなると思ったのでここまで…
時間と余裕があればもう少しマシなコンテンツを用意します。

ありがとうございました！
Unity公式のXcodeプロジェクト編集API「PBXProject」をUnity4でつかう

Unityを利用してiOSの開発をしていると、
ちょいちょい出力したXcodeプロジェクトに、Frameworkなどを追加する必要が出てきたりします。

毎回手動でやるのはめんどし、
Jenkinsなどと統合している場合は自動化しなければなりません。

ということで今まではPython製の[mod-pbxproj](https://github.com/kronenthaler/mod-pbxproj)やC#製でUnity用の[XCodeEditor-for-Unity](https://github.com/dcariola/XCodeEditor-for-Unity)など、外部のツールを利用して頑張るのが一般的でした。

しかしUnity5からPBXProjectというAPIがデフォルトでつかえます。
http://docs.unity3d.com/ScriptReference/iOS.Xcode.PBXProject.html

このAPIとPostProcessBuildアトリビュートと組み合わせて以下みたいに書くと、簡単にFrameworkとか追加できます。

```Editor/AddFrameworkPostProcessBuild.cs
using UnityEngine;
using System.Collections;
using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;

public class AddFrameworkPostProcessBuild 
{
	[PostProcessBuild]
	public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
	{
		if (buildTarget != BuildTarget.iOS) return;
		
		string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";

		PBXProject proj = new PBXProject();
		proj.ReadFromFile(projPath);
		 
		string target = proj.TargetGuidByName("Unity-iPhone");

		proj.AddFrameworkToProject(target, "StoreKit.framework", false);

		proj.WriteToFile(projPath);
	}
}
```

FrameworkだけでなくOther Linker Flagの追加やファイルの追加などもできます。

すごく簡単！！

Unity4でつかう
-------------
しかし、PBXProjectはUnity5用です。
まだUnity4で運用しているプロジェクトがある中でそんなのずるい！
ということで、一応利用する方法はあります。

まず、Unity.appを右クリックしてメニューを表示し、
「パッケージの内容を表示」をクリックします。

そして、パスを辿り以下のファイルをUnityプロジェクトのEditorフォルダ以下にドラッグアンドドロップします。

/Applications/Unity4.6.9/Unity.app/Contents/PlaybackEngines/iossupport/UnityEditor.iOS.Extensions.Xcode

これで、PBXProjectの機能をUnity4でも使えるようになります。
じつはこのUnityEditor.iOS.Extensions.XcodeはUnity4.6あたりから、
含まれていたようです。

だたし、Unity5にバンドルされているバージョンとは少し異なるようで、
使えるAPIに差異があったりします。

Unity4/Unity5でPBXProjectの最新版・修正版を使う
-------------------------------
さてPBXProjectは便利なのですが、
Unity4では最新版でなかったり、
バグがあったりdylibファイルの追加に対応していなかったりします。

そんな時は、PBXProjecリポジトリが
公式から公開されているため、それをインポートすることも可能です。
リポジトリ名はXcodeAPIになってます。

https://bitbucket.org/Unity-Technologies/xcodeapi

プロジェクトをダウンロード or Cloneしてきて、
Editor以下に配置すればOKです。
ただし、そのままだとUtils周りでエラーが出るため、
以下の修正が必要です。

```
Utils.*** => PBX.Utils.***
```

修正箇所が20箇所ぐらいありますが...なんとか置換でいけます。

また、かゆいところに手がとどかない...
みたいなところがあれば自分で機能を修正することも可能です。（自己責任ですが）

ちなみに、dylibの追加に対応していなかったので、
Forkして機能を追加し、Utilsの件も含めて修正してしまいました。
（こちらも利用するときは自己責任で）
https://bitbucket.org/mikito/xcodeapi/

参考
------

 * http://kan-kikuchi.hatenablog.com/entry/Could_not_load_file_or_assembly_UnityEditor.iOS.Extensions.Xcode
 * http://forum.unity3d.com/threads/no-reference-to-libiconv-2-dylib-on-xcode-7.353999/
 * http://forum.unity3d.com/threads/xcodeapi-support-under-4-6.336363/
Herokuでデータベース(PostgreSQL)に接続する方法

#接続コマンド

```text:ターミナル
$ heroku pg:psql
```
で

```text:ターミナル
psql (9.4.3, server 9.4.5)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

your-app-name::DATABASE=> 
```
が表示されればOK

#SQL文の実行
文末のセミコロン;を忘れがちなので注意。
例えばテーブルの中身を全件表示させたい時は

```text:ターミナル
your-app-name::DATABASE=> select * from テーブル名;

 id |         title          |         created_at         |         updated_at         
----+------------------------+----------------------------+----------------------------
  1 | hogehoge1              | 2015-07-11 03:01:41.459369 | 2015-07-11 19:30:38.917108
  2 | hogehoge2              | 2015-09-13 03:01:41.459369 | 2015-09-13 19:30:38.917108
  3 | hogehoge3              | 2015-09-23 03:01:41.459369 | 2015-09-24 19:30:38.917108

(3 rows)
```
#終了コマンド
```text:ターミナル
your-app-name::DATABASE=> \q
```
オブジェクトを関数の引数として用いる。


ポインタを使って、関数に引数として動的割り付けで初期化したオブジェクトを渡し、関数内で処理を行う。

```cpp:test.cpp
#include <stdio>
using namespace std;

void rewrite(int* q);

int main(){
	int* p = new int(10);  // (1)
	cout << "Before : " << p << endl;
	rewrite(p);
	cout << "After  : " << p << endl;
	return 0;
}

void rewirte(int* q){
	*q = int(20);          // (2)
}
	
```

一般的な、書き方をすると上のような感じなのかな...

ポインタは、変数のアドレスを入れておける箱。
(1)そのポインタに動的割り付けをしたオブジェクトのアドレスを入れる。
次に、関数にそのポインタを入れる。
関数の引数は、"オブジェクトのポインタ"である。
(2)関数内で、"オブジェクトのポインタ"の持つ値を書き換える。
すると、main関数内で、"オブジェクトのポインタ"の持つ値が変わる。
出力結果は以下の通り。

```bash:cout
>>> Before : 10
>>> After  : 20
```

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


で、やりたかったことは、ROOTのヒストグラムを様々な場合に応じて作成したいときの方法。
べた書きで、同じヒストグラムを何度も書いてもいいんだけれども、それでは面倒なので、関数を呼ぶことで、ヒストグラムを作りたいと思った次第。


```cpp:MakeHist.cpp
MakeHist(){                                        
	TH1D* hh = new TH1D();
	HIST(hh);
	TCanvas* c1 = new TCanvas("c1","c1",700,500);
	c1->cd();
	hh->Draw();
}

void GG(TH1D* h){
	*h = TH1D("h","h",50,0,50);   // <-- important
	for(int i = 0;i<1000;i++){
		h->Fill(gRandom->Uniform(0,50));
	}
}
```

上のようなマクロを作った。これで、関数内で、ヒストグラムを作れる。
重要なのは、関数内のimportantの所。このhに*をつけないとうごかない(当たり前だね!)。
rspec里的description和context的区别



通常`description`用来描述做一件事情, 而`context`用来描述一种状态或者某种情况下.下面就说明两者的区别.

```ruby
describe "launch the rocket" do
  before(:each) do
    #prepare a rocket for all of the tests
    @rocket = Rocket.new
  end
 
  context "all ready" do
    before(:each) do
      #under the state of ready
      @rocket.ready = true
    end
 
    it "launch the rocket" do
      @rocket.launch().should be_true
    end
  end
 
  context "not ready" do
    before(:each) do
      #under the state of NOT ready
      @rocket.ready = false
    end
 
    it "does not launch the rocket" do
      @rocket.launch().should be_false
    end
  end
end
```
Flashバナーを...

FlashがAnimateになるそうですね。
私のFlashの関係はやはりバナー制作でした。
Flashが使えるとコンペのバナーをモーション入りラフで提案することができる。

jpgとgifバナーだと10,000-20,000円しか取れないのに、
Flashだと50,000-100,000円請求できる。リッチバナーだともっとだ。

そんな感じで広告代理店でFlashを作れると重宝されるので調子に乗っていたのだが、
、、、が、追いかけ回されることがあり。。これ以来Flashを使っていたことに後悔。
名古屋から東京に転勤した時だ。

帰りの電車に乗っていると電話が鳴り。名古屋本社のヤツから
「ちょっと出稿する広告の原稿をFlashバナーにしたいので作ってもらえます？」
「そんなのそっちで作れないの？（外注とかに出して）」
「いや、僕も作ろうと試みたのですが、、、」

とflaファイルが送られてくる。

。。。なんじゃこりゃ
基本的にタイムラインの使い方がわかってないらしい、、、

「これ、いつまでに作るばいいのですか？」
「明日提出するので、、、」
「？？？　は？　何言ってるの？　ちなみに、これいくら取れるの？（この取り分は東京にいるこちら側の扱いになるからだ）」
「いや、請求はできないんです。バナー出稿のバーターで、、、とにかくお願いします！」
ガチャ！

と、車内で作り出す、、、、

つくりがめちゃくちゃだし、ファイルも重いし、、、、
で、2H後できたので送ると

「この動きもう少し間を空けてもらえないすか？」
「。。。」
と３回くらい戻しが、、、

殺そうと思った。でなんとかフィニッシュ。
送りつける。

そしてこの件については２度と電話がかかってこなかった。

礼くらい言えや！

というわけでFlashとの思い出でした。
homebrew個人的によく使うコマンド

#homebrew自体のインストール
[xcodeのコマンドラインツールのインストール](https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Installation.md)
```xcode-select --install```
[公式が以下のコマンドをコピペして実行しなさいと言っています](http://brew.sh/index_ja.html)
```ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"```

#formulaのインストール
```brew install xxx```

#インストールされたformulaを確認する
```brew list```

#homebrew自体のアップデート + formulaの全更新
```brew update```

#指定したformulaだけをアップデート
```brew upgrade xxx```

#formulaのアンインストール
```brew uninstall xxx```
```brew remove xxx```
```brew rm xxx```

#インストールできるformulaの検索
```brew search xxx```
```brew search /regexp/```

#インストールされたformulaの情報を確認する
```brew info xxx```
CS-Cartのテーブル構造についての調査

CS-Cartはテーブル定義書が存在していないので自力で調査している。
今後分かったものを追記していく。


# 商品

* cscart_products: 商品マスタ。承認ステータスもここにある。
* cscart_products_categories: 商品とカテゴリのリンクテーブル
* cscart_product_prices: 商品の価格
* cscart_product_descriptions: 商品名や説明文

# アカウント

* cscart_companies: 出品者マスタ
* cscart_users: 管理者・出品者・顧客の氏名やアカウント情報
* cscart_user_profiles: 管理者・出品者・顧客請求先住所など
* cscart_usergroups: グループマスタ・グループの種別
* cscart_usergroup_privileges: グループの権限設定
* cscart_usergroup_links: グループとユーザのリンクテーブル
* cscart_usergroup_descriptions: グループ名

# サイト構成

* cscart_categories: カテゴリマスタ
* cscart_category_descriptions: カテゴリ名など
 
# コンテンツ

* cscart_pages: コンテンツ・ブログのステータス
* cscart_page_descriptions: コンテンツ・ブログの本文

# 設定

* cscart_settings_objects: サイトの設定
Flashへ

僕はFlashで大きくなった。

リッチコンテンツといえばFlash。
splash pageのFlashをSkip押させないためにはどうするか？を考えた日々。
Flash MX 2004のリリースで動画が使えることに衝撃をうけた日。
Flash4で大規模な教育コンテンツを作ってプログラムって何だろうと考えた日々。
Macromediaが無くなってもFlashの文字は生き残った時の安心感。
FlashからiOSアプリが書き出せるという衝撃ではじめてスマホアプリに手を出したあの頃。
あぁ、僕の人生はFlashと共に生きてきたんだな。

Flashは永遠です。

さあ、Flash Professional CS6を起動して仕事開始だ。
（事実です）
clang-formatを使って整形

プロジェクトでインデントルールなどを揃えたい時に使える clang-format と Alcatraz
Alcatrazについてはこちらを参考に導入 → http://qiita.com/masuhara/items/95185be077d3fc29a00f

そしてPackage ManagerからClangFormatプラグインをインストールします。
※以下、インストールした後なので左側が"remove"になってます

![image](https://qiita-image-store.s3.amazonaws.com/0/57477/2692a9f9-7e53-14e4-4604-c09685753f1a.png)

ファイル保存時に自動で適用するように設定(Edit -> Clang Format -> Enable Format on Save を選択)
スタイルの設定はファイルから読み込むように設定(Edit -> Clang Format -> File を選択)

clang-formatに関してはhomebrewでインストールすることにしましょう

```
brew tap tcr/tcr
brew install clang-format
```

#本題

で、ここからなのですが、clang-formatコマンドを使ってXcodeを起動せずにフォーマットするにはどうしたらいいのか調べました。
プロジェクトで利用している .clang-formatの中身はこれだけです

```
% cat .clang-format
---
BasedOnStyle:  Google
ColumnLimit: 110
BinPackParameters: false
```

これを使ってファイルを整形するには以下の通りにするとうまくいきます

```
clang-format -i  -style="{BasedOnStyle: Google, ColumnLimit: 110, BinPackParameters: false}"  Classes/Some/File.cpp
```

ここまで書いた後で教えて頂いたのですが、.clang-formatと同じ内容でよければこれでいいみたいです

```
clang-format -i  -style=file  Classes/Some/File.cpp
```

※本当はAppCodeでおんなじ事をしたいのだが、 https://github.com/travisjeffery/ClangFormat-Xcode/issues/95 てことらしく
※ついでにいうとClangSharpとかってのもあるみたいなので、XamarinやMonoDevelopでうまくつかえないものか
Coqのemacsモードのプロンプトについて調査

# 概要

プログラムからemacsモードを用いてCoqを操作するための参考文書です。

基本はこちらのサイトに詳しい: http://amutake.hatenablog.com/entry/2014/07/07/020814

ざっくり言うと

- `coqtop -emacs`で起動するとProofGeneralなどから使用するためのemacsモードに入る
- EmacsモードはプログラムとCoqがやり取りするのに (やや) 向いている
- コマンドの実行結果は標準出力に、プロンプトは標準エラーに出る。Warningなどは標準エラーに出る
- 実行結果は (ほぼ確実に) 改行で終わるが、プロンプトには改行はつかない
- (ほぼ確実に) 標準エラーにプロンプトが出た時点で、標準出力には実行結果がすべて出力されている

となる。「(ほぼ確実に)」というのは、今のところ著者はこれに違反する例は見つけていないが、仕様上そうなっているかは確信できない、という意味。起動時もほぼ同様で、起動後、

- 標準出力にCoqのバージョンが (改行付きで) 出る
- -l オプションで指定したファイルを読み込み、標準出力と標準エラーにメッセージが出る
- すべての標準出力などが出たら、プロンプトが標準エラーに出る

というプロセスを辿る。実際には -l <ファイル名> を複数回指定することにより、起動時に複数のファイルをロードすることができる。この時にプロンプトが出力されるのは複数回または1回のどちらかであるか、については未確認である。

# プログラムするなら

よって、プログラムを書くなら大体このようになる

## 起動時

- Coqのプロセスを起動する
- (必要があれば) 標準出力から1行読み込んでバージョンをコンソールに出力するなりする
- 以下をプロセスがブロックしないように適宜交互に行う
  + 標準出力から行単位で読み込む
  + 標準エラーから文字単位で読み込む
- 標準出力から読める文字 (行?) がなくて、標準エラーの末尾がプロンプトなら、Coqはreadyである
 
## コマンド実行時

複数のコマンドを投げるときは、以下のプロセスをコマンド毎に繰り返すのが無難

- Coqのプロセスの標準入力にコマンド+改行を投げる
- 以下をプロセスがブロックしないように適宜交互に行う
  + 標準出力から行単位で読み込む
  + 標準エラーから文字単位で読み込む
- 標準出力から読める文字 (行?) がなくて、標準エラーの末尾がプロンプトなら、コマンドの結果はすべて出力され、Coqはreadyである
ContainerViewにEmbedされているViewControllerを変更する


ContainerViewを使用すると、標準でViewControllerがついてくる。
これをTableViewControllerに変える方法。

## 環境
- Xcode 7.1.1
- Swift 2.1

## 背景
例えばスライドメニューとかをContainer Viewを使って実装する場合。
ViewControllerよりもTableViewControllerのStatic Cellsを使って簡単にメニューを作りたい。
ちなみにStatic CellsはTableViewControllerでしか使えない。

## 方法
1. まずはContainer Viewを追加する（View ControllerがEmbedされる）
2. EmbedされているView Controllerを削除する
3. オブジェクトライブラリからTable View ControllerをStoryBoardにドラッグ＆ドロップして追加する
4. ContainerViewからCtrlを押しながらTableViewControllerに接続する
5. ポップアップが表示されたら「Embed」を選択する

以上
シェルスクリプトに環境変数を渡して表示する方法

シェルファイルを作る。

```:color.sh
#!/bin/sh

echo $COLOR
```

コマンドラインでシェルを実行する。
このとき、 COLOR=green の環境変数を渡す。

```
$ COLOR=green sh test.sh
```

green が表示される。

```
green
```

--- 

- 散々各所で書かれてきたことだと思うが、メモ。



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
iOS 9でKeychainから読み込もうとしてもエラーコード-34018が返ってくる

## 経緯

先日、とあるゲームアプリでユーザー情報が消えているというバグ報告をユーザーから受けました。
ユーザー情報自体はKeychainに保存して、Keychainに特定の情報が無ければ初期化処理をしていました。
これらの処理に問題は無さそうだったので迷宮入りしかけましたが、
報告を受けた症状と残っていた僅かなログを元に原因を推測し、
アプリ起動時にKeychainの読み込みに失敗している可能性に辿り着きました。
そこで再現する条件や対処方法をいろいろと実験したので、ここにメモ書きを残します。

## 症状

- （特に）iOS9でアプリ起動時にKeychainから情報を取得しようとすると、極めて稀に`-34018=errSecMissingEntitlement`のエラーコードが返ってくる
- 起動から数秒おいて取得する処理に変えても改善せず
- 成功するまでリトライ処理に変えたら、無限ループ

症状としては上記のような感じです。
再現しないんじゃないかってぐらい再現しないので、実装やKeychainの使い方に問題は無さそうです。
しかしながら簡単に再現しないとデバッグに困るので、何とか再現しやすい状態を探しました・・・

## お手軽再現方法

1. アプリで起動時にKeychainから取得する前に、600MBほどメモリを確保するような処理を仕込む
  - 再現率に影響したり、アプリごと落ちたりするので、環境によって調整して下さい
1. Safariで適当にブラウジング（重要）
1. アプリを開くと、数回〜10回に1回ぐらいの頻度で再現

Safariでブラウジングがどういう影響を及ぼしているかはわからないですが、
するのとしないとでは再現率が圧倒的に違うので、多少面倒でもした方がいいです。

## 対処法

- `errSecItemNotFound`以外の想定しないエラーが返ってきたら、アプリ再起動を強制する
- Keychainじゃない場所にバックアップし、矛盾がないかチェックする

症状に書いてあるように、リトライとかは効果ありませんでした。
なので考えうる対処法はこれぐらいじゃないでしょうか？

--------
以前からKeychain周りで信頼性に関してや、バグがいろいろと報告されていたようで、Apple側も認識していると思います。
もし何かしらの詳しい情報をお持ちの方がいらっしゃいましたら、ぜひコメントなどで教えて下さい。

注意：Keychainの挙動は謎も多く、かなり手探りで調査したので、上記の情報に間違いや不備があるかもしれないことをご容赦下さい。
Mac から Vagrant1.7 へ ansibleを実行した際のメモ（SSH Error解決含む）


MacからVagrantへansibleを実行しようとした際に、ハマった点などをメモ。

| ソフトウェア |バージョン|
|:----------|:------------|
| Vagrant|1.7.2|
| Ansible|1.9.4|

##AnsibleをMacから実行

### Vagrantの準備

作業ディレクトリ作成

```
mkdir ansible_from_mac
cd ansible_from_mac
vagrant init your_vagrant_box
```

'Vagrantfile'の修正

```
vi Vagrantfile
```

ローカルのIPアドレスを修正

```
# config.vm.network "private_network", ip: "192.168.33.10"
config.vm.network "private_network", ip: "192.168.111.111"

# 以下を追加
config.ssh.insert_key = false
```

'config.ssh.insert_key'に関して、以下を参考

[vagrant 1.7以降は'vagrant up'した時にinsecure_keyを差し替える](http://qiita.com/cock1doodledoo/items/b32382776f76fb2d627c)

vagratを起動

```
vagrant up
```


### ここからMacの設定
Macにもansibleを入れておきます。

```zsh
brew install ansible
```

SSH 接続クライアントの設定

```
vi ~/.ssh/config
```


```
Host 192.168.111.111
  User vagrant
  IdentityFile ~/.vagrant.d/insecure_private_key
```

ansibleの設定ファイルを作成

```
mkdir /usr/local/etc/ansible
vi /usr/local/etc/ansible/hosts
```

```
[local.ansible.com]
192.168.111.111
```

##SSH接続に困ったときに対応した点

最初、`ansible`実行時に、`SSH Error: Permission denied`となってしまう問題が発生。

```
192.168.111.111 | FAILED => SSH Error: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
    while connecting to 192.168.111.111:22
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.
```

###原因調査

`ssh-config`で確認すると、利用されている`private_key`が異なることが分かった。

```
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /your/vagrant/path/ansible_from_mac/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
```

###SSH接続に困ったときに対応した点（2パターン）

####1.　`vagrant up`時に毎回keyが作成されるのを避ける

Vagrant1.7から、`vagrant up`時に毎回keyが作成される仕様になっていた

```
# それを避けるために追加したのが以下
config.ssh.insert_key = false
```

####2.　`~/.ssh/config`の修正し、個別のkeyを利用するようにする

```
Host 192.168.111.111
  User vagrant
  IdentityFile /your/vagrant/path/ansible_from_mac/.vagrant/machines/default/virtualbox/private_key
```

####結果
改めて、`ansilbe`コマンドを実行

```zsh
ansible local.example.com -m ping
```

pingを実行

```
192.168.111.111 | success >> {
    "changed": false,
    "ping": "pong"
}
```

成功。


##参考
[Vagrant 1.7+でSSH接続エラーが出た場合の対処法](http://mawatari.jp/archives/solution-of-vagrant-ssh-connection-error)
JSで顔認識(Face Detection)


会社のAdvent calendarと同じ内容をあげようと試みたのですが、ダメでした。。orz
遅れてすみません...


最近顔認識(Face Detection)のイケてるサイト公開されてたのに影響されてちょっと調べてみました。

いくつかライブラリがあるようですね。

[clmtrackr](https://github.com/auduno/clmtrackr)

[jQuery FaceDetection](https://github.com/jaysalvat/jquery.facedetection)


今回はサンプルも充実していたいのでclmtrackrを利用します。

### clmtrackrでできること
Face Detectionでやりたいことは一通りできるようです。
目、鼻、口、輪郭、眉毛の認識から、それらの位置ベクトルの取得。画像、動画どちらも対応可能なようです。

解析の入力サイズは小さい方がパフォーマンスはでますが、MBPであれば、640x520とかでもサクサク動きます。
実際に動かしてみながら動作を確認していきます。exampleディレクトリ内のsample.htmlを元に紹介します。

### 下準備

HTMLを用意し、まずはjsを設定します。

```html
<script src="../clmtrackr.js"></script>
<script src="../models/model_pca_20_svm.js"></script>
```

2つ目の<b>model_pca_20_svm.js</b>はおそらく顔判定のデータです。
顔認識では判定データを元に解析します。この手のデータは最近はやりのDeepLearningなどで、改善しながら作成したりすると思います。0からFace Detectionを作る場合はOpenCVなどのデータを流用するのが良いと思います。

これでFace Detectionの準備ができました。

### 入力データを用意する
判定するための元となる入力データを準備します。これはVideo、画像、Webカムなど用途に応じて使い分けます。まずはVideoを使います。VideoタグをHTMLに書きます。JSでアクセスするのでidを設定します。

```html
<video id="inputVideo" width="400" height="300" autoplay loop>
    <source src="動画のパス" type="video/ogg"/>
</video>
```

### 出力データを表示する
入力データから判定し、出力データを反映する場所を用意します。
判定した顔のアウトラインデータをcanvasに描画します。

```html
<canvas id="canvas" width="400" height="300"></canvas>
```

HTMLの準備は最低限これでOKです。

### clmtracker.jsを利用する
JSを記述します。最初に入力データとなるDOM要素を取得します。

```javascript
var videoInput = document.getElementById('inputVideo');
```

次にclmtrackerインスタンスを作成し初期化します。初期化の引数にpModelを渡しますが、これはmodel_pca_20_svm.js内で定義されている変数です。

```javascript
var tracker = new clm.tracker();
tracker.init(pModel); // ここで初期化、引数にpModelを渡す。
```

これを実行すると、videoの最初のフレーム画像を解析し判定します。
判定した結果は<b>getCurrentPosition()</b>で取得できます。

```javascript
// positions = [[x_0, y_0], [x_1,y_1], ... ] 配列が帰ります。
var positions = tracker.getCurrentPosition(); // 解析されて位置ベクトル情報
```

このpositonsで取得したデータにたいしてテクスチャーを貼り付けたり、各ベクトル情報を操作することで顔を動かすようなアニメーションを作ることができます。顔ぐにゃ〜っとさせたりするやつです。


### Videoの動きに合わせて判定する
このままでは1フレーム目のみの判定になるので、毎フレーム判定するためには<b>tracker.start()</b>を使います。

```javascript
// 引数には入力用のDOM要素を渡します。2番目の引数で入力位置を設定できるようです。
tracker.start(videoInput);
```

```javascript
var box = [0, 0, 400, 260];
tracker.start(videoInput, box);
```

### 結果を出力する

```javascript
var canvasInput = document.getElementById('canvas');
var cc = canvasInput.getContext('2d');
    
function drawLoop() {
   requestAnimationFrame(drawLoop); // ここで毎フレームdrawLoopを呼び出すように設定します。
   cc.clearRect(0, 0, canvasInput.width, canvasInput.height); // 毎フレーム出力用のキャンバスをクリアします。これをしないと重ね書きのようになってしまいます。
   tracker.draw(canvasInput); // 判定結果をcanvasに描画します。
}
drawLoop();
```

これで結果が簡単にみれます。表現物を作る場合は、途中で取得したpositionsの値をうまく操作することでいろいろできると思います。

画像からの解析、webカムのバージョンは[こちらのアドベントカレンダー](http://qiita.com/advent-calendar/2015/quad-inc)で書いてきます。
Unity 5.3からiOS向けのライブラリ内のzlib系の関数のシンボルが変わった

iOS向けにzlibの関数を使う静的ライブラリを作っていますが、
Unity 5.3を使っているユーザーからビルドに失敗するという報告を頂きました。
実はUnity 4の頃から、Unity側のiOSライブラリである `libiPhone-lib.a` 内にzlibの関数が定義されていたので、
zlibの関数を使うような静的ライブラリを追加しても、iOSのzlibを使うことなくリンクに成功していました。
そのため、zlibの関数が無くなったのかと思いましたが、シンボルにUnityのネームスペースが入ったため見失ったようです。

## Unity 5.3未満

```
$ nm libiPhone-lib.a | grep deflate
libiPhone-lib.a(deflate.o):
000007ec T _deflate
000013d0 T _deflateBound
00001498 T _deflateCopy
000002fc T _deflateEnd
00000038 T _deflateInit2_
00000000 T _deflateInit_
00000718 T _deflateParams
000006d8 T _deflatePrime
00000440 T _deflateReset
00000584 T _deflateSetDictionary
000006ac T _deflateSetHeader
0000139c T _deflateTune
00005e17 S _deflate_copyright
00001844 t _deflate_fast
00001c9c t _deflate_slow
0000169c t _deflate_stored
         U _deflate
         U _deflateEnd
```

## Unity 5.3

```
$ nm libiPhone-lib.a | grep deflate
libiPhone-lib.a(deflate.o):
0000181c t _deflate_fast
00001c6c t _deflate_slow
00001674 t _deflate_stored
000007d0 T _unity_z_deflate
000013a8 T _unity_z_deflateBound
00001470 T _unity_z_deflateCopy
000002f4 T _unity_z_deflateEnd
00000038 T _unity_z_deflateInit2_
00000000 T _unity_z_deflateInit_
00000708 T _unity_z_deflateParams
000006c8 T _unity_z_deflatePrime
00000430 T _unity_z_deflateReset
00000574 T _unity_z_deflateSetDictionary
0000069c T _unity_z_deflateSetHeader
00001374 T _unity_z_deflateTune
00003b60 S _unity_z_deflate_copyright
         U _unity_z_deflate
         U _unity_z_deflateEnd
         U _unity_z_deflateInit2_
         U _unity_z_deflateParams
         U _unity_z_deflate
         U _unity_z_deflateEnd
         U _unity_z_deflateInit2_
```

## 解決策

素直にiOS標準のzlibにリンクしましょう。
iOSビルド時に自動的に追加するスクリプトを書くとビルドを自動化できて良いです。
Macの充電器は純正を使おう

#概要
Macの純正、非純正の充電器を比べてみた。
#目的
不良品によるMacの故障の予防
#経緯
純正の充電器が高いので、非純正を買ったら残念な結果になった。
しかし、購入時はショップの説明欄に「Apple Magsafe2 85W 純正 バルク品」と書いてあった。
安心して購入したら思ったら違ったため徹底的に問い詰めたくなった

#比較方法
純正品と偽る安売り品が１０日ほどで充電できなくなった。
怪しいと思ったため、分解して構造の違いを把握した。

#外観の違い
まず重さが違うw
純正品の方が明らかに重く、部品が詰まっている感がある。
取り外しができる先っぽの電源プラグのメーカー名が違う。
偽物にはPSEマークがない

#内部構造の違い
まずはそれぞれの違いがわかる写真をご覧ください。

純正品　外枠のふた
![2015-11-29 11.50.25 HDR.jpg](https://qiita-image-store.s3.amazonaws.com/0/55371/1cd4241c-bae6-108f-b871-a371c9d69307.jpeg)
非純正　外枠のふた
![2015-11-29 11.50.18 HDR.jpg](https://qiita-image-store.s3.amazonaws.com/0/55371/caca19fa-e021-c85d-3703-5d239b353a7a.jpeg)

純正品　内部
![2015-11-29 11.51.22 HDR.jpg](https://qiita-image-store.s3.amazonaws.com/0/55371/4aac2d9a-7c87-5b86-e9b4-3362e3c4b974.jpeg)
非純正 内部
![2015-11-29 11.50.35.jpg](https://qiita-image-store.s3.amazonaws.com/0/55371/3599ffa1-6d6a-b4fd-3a09-6e3d5296dceb.jpeg)

純正品 基盤など
![2015-11-29 11.51.35 HDR.jpg](https://qiita-image-store.s3.amazonaws.com/0/55371/0168b02f-1edc-4502-3860-7674b8c7e61b.jpeg)
非純正 基盤など
![2015-11-29 11.53.02 HDR.jpg](https://qiita-image-store.s3.amazonaws.com/0/55371/012ba8f8-9793-f0bd-ec98-2bda6855bcf6.jpeg)

まず純正品は接着剤で完全に固定されており、開けるのにかなり苦労した。
非純正はペンチで意外と簡単に開いた。
おそらく一回開けてると予想される。

内部においては、純正品は周りを銅で保護されている。
非純正は基盤むき出し。
まじか。。。。。

純正と非純正の部品の数が違いすぎる。
そもそも基盤が違う。
たぶん自分たちで作った基盤に部品を移し替えて、カバーだけ純正品を使って蓋をした構造だ。

非純正は「変圧回路・整流回路・安定化電源回路」の最低限必要なものだけの構造になっているみたい。
純正にしかない部品を調べたが専門家ではないので何を制御している部品かはわからなかった。
もし仮に、加熱保護やシリーズレギュレーターなどの電圧調整装置が抜けているのであれば問題が大きい。
Macの本体に電圧が一定に流れないのであればMac本体が故障する可能性も十分あるから。

充電器については高いが純正を買うべきなのがわかった。
充電器が原因で本体が壊れても保証は当然されない。
裁判をしても元は取れないでしょう。

分解して断線したケーブルの差し替えに挑戦したが、半田付けが必要でハードルが高く断念し、仕方なくAppleストアで新しく充電器を購入した。
その時にサポートセンターの人に聞いてみたが、市販品に対しての知識はない模様。
85Wなら45WのAir、MacbookPro13インチの60Wも両方充電できる。
電圧の大きいもので充電しても流れる電圧は制御されているみたいですね。
ただ45WのAir用でもMacBookPro13、15インチを充電する事は可能。
充電は遅くなるが、故障することはないと言っていた。
純正品に関してはワット数で料金が変わらないので、85Wを購入した方が使い回しができるってことですね。

しかし、非純正は内部構造が違うため、使って本体が壊れる可能性があるのでお勧めできない。
本体も一緒に昇天させられても文句は言えない。

今回僕は「純正」と名乗る安売りの充電器だった。
Yahooショッピングで４１００円ほどで売っていた。
他に2000円ほどの商品もあるがもっとひどい構造が想像される。
買ってみて分解してみようかな。

とりあえず販売元に問い合わせたらキャンセル、返金の対応をうけることができた。
ただ、これは購入時に１年保証があったのでその対応での返金処理。
偽物を純正と偽って売っている件に関して問い詰めたところ、仕入れ元に確認して折り返すと言っていた。
日本語が下手な中国人ではあったが「申し訳ございません。ご迷惑をおかけしました。すぐにご返金します。」とやけに対応がいい中国人だった。
好感は持てたが、嘘はだめでしょ。
詐欺で訴えられたら完全に負けな上に、「売った人」が罪に問われますからね。
もしかすると、販売元も仕入れ元に騙されて仕入れた可能性がありますが。

Appleの純正品は非常に精密に作られている事がわかった。
中国人も安い品を提供してくれるのは嬉しいが、儲けたらお終いの商売は今は通用しなくなってることに気づいて欲しい。
本体壊れたら意味ないですからね。

Appleはこういった業者を野放しにしていてはだめ。
ちゃんと取り締まって、純正品を売るようにして生産量をあげ、値段を下げるように努力するべき。
１万円は高いですよね。
SVNで管理している複数のファイルを指定のフォルダ配下に強制exportするスクリプト

下記の形式でcsvにexportしたいsvnのファイルのURLとexport先のパスを設定し、
スクリプトを実行するとファイルがexportされる。

csvの設定行が1行(ヘッダを含めてcsvが2行)のみだとエラーが発生するので注意。
1行の場合はそのままコマンドからexportするのが一番。

```
svnpath,dirpath
SVNのファイルのURL,export先のパス
```

```
$svnexepath = svn.exeのパス
$csvobj = Import-Csv csvのパス -Encoding default

for ($i =0 ; $i -lt $csvobj.length ;$i++){
    cmd /c $svnexepath export --force $csvobj.svnpath[$i] $csvobj.dirpath[$i]
}
```
Pythonで今いる位置情報やユーザーエージェントなんかを取得

まぁ何に使うかはその人次第ですが、在宅ワーカーさんなどに毎日POSTを強制させればちゃんと自宅でやってるかとかそこら辺が判断できるスクリプト。ご利用は計画的に。


まずはHTMLに位置情報を送らせるスクリプトを記述。

```index.html

  <script type="text/javascript">
      if (navigator.geolocation) {
          // 現在の位置情報取得を実施
          navigator.geolocation.getCurrentPosition(
          // 位置情報取得成功時
          function (pos) {
                  var location = pos.coords.latitude;
                  location += "," + pos.coords.longitude;
                  document.getElementById("location").innerHTML = location;
          },
          // 位置情報取得失敗時
          function (pos) {
                  var location ="位置情報が取得できませんでした<br />再読み込みでやり直してみてください";
                  document.getElementById("infotext").innerHTML = location;
          });
      } else {
          window.alert("本ブラウザではGeolocationが使えません。");
      }
  </script>

```

こんな感じです。後はフォームを作ります。UA取るのでそれも忘れず追記。

```index.html

  <script type="text/javascript">
  window.onload = function(){
  var UA = navigator.userAgent;
  document.getElementById("result").innerHTML = UA;
  }
  </script>

<form method="POST" action="cgi-bin/index.py">
  <textarea class="hidden" id="location" name="send_geo" readonly></textarea>
  <textarea class="hidden" id="result" name="user" readonly></textarea>
  <select class="form-message validate-required" name="word">
  <option value="in">IN</option>
</select><br>
  <p><input type="submit" value="送信"></p>
</form>

```

あとはPythonをCGIで動かすと仮定して書きます。そうすればさくらインターネットのレン鯖にもそのまま乗りますしね。

```useraccess.cgi

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import sys, codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)
from datetime import datetime
import cgi
import csv

print "Content-Type: text/html\n"


print """

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<meta name="format-detection" content="telephone=no">
<link media="only screen and (max-device-width:1080px)" href="static/css/smart.css" type="text/css" rel="stylesheet" />
<link media="screen and (min-device-width:1081px)" href="static/css/style.css" type="text/css" rel="stylesheet" />
"""

print """

</head>

<body>
<div id="content">

  <div id="topmain">
"""

try:
    form = cgi.FieldStorage()


    words = form["word"].value
    send_geotag = form["send_geo"].value
    usera = form["user"].value

    today = datetime.now().strftime("%Y/%m/%d %H:%M:%S")

    f = open("date.txt", "ab")
    writer = csv.writer(f, quoting=csv.QUOTE_ALL)
    writer.writerow([words,today,send_geotag,usera])
    f.close()

    print "<p>"+ words + ": " + today + "</p>"

except (RuntimeError, TypeError, KeyError):
    print "<p>"+u"位置情報を許可してやりなおしてください"+"</p>"

print """
</div>
</div>
</body>

</html>
"""


```


"in","2015/12/03 09:50:33","*******************,*******************","Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143 Safari Line/5.7.0"

こんな感じでdata.txtが作られていきます。


細かいエラー分岐なんかはしていないのでそこら辺はなんとかやってください。
heroku buildpackを自作してmysqldumpをした話

# 背景
初めてのMyPCを手に入れてから早3年、Webサービスを作りたいという一心で勉強してきました。レベル感としてはRailsアプリケーションが人並みに書ける程度の実力です。表題に至ったのは以下の理由

- herokuでcleardbを使ってAPIサーバー運用してる
- ステージングサーバーを作ったので、定期的に本家のデータを流し込みたい
- rakeタスク作った！流し込もう！
- mysqldumpが見つからない…だと？

postgresqlを使う場合はherokuがもともと提供しているコマンドを使えばいいのですが、 cleardbを使っているので、どうしても`mysqldump`を使いたいと思ったのが背景。

# buildpack

buildpackを使えば、heroku上で望んだ実行環境が簡単に作れるらしい。
mysqlのbuildpackがないか色々と調べましたが、既存のものはheroku createの段階で読み込むことを前提にしているようで、私みたいに後から入れたい！って人には冷たい仕様になっていました。

buildpackのファイル構成は以下のようになっていて、
注釈のような役目をそれぞれ担っています。冷たかったのは、releaseでしか環境変数の設定がされてないので、パスがうまく通せてなかったのが原因だったんですね。

``` sh
bin
  ├── compile #buildpackが実行可能かどうかを判断し、実行可能であれば0を返す
  ├── detect  #build処理本体
  └── release #環境変数の設定とアドオン追加は初回のgit push時にのみ実行
```

# .profile.d 

環境変数の設定などは`release`意外にも`.profile.d`で設定できるぜ！
というか`buildpack-multi`を使うならそれが尚更いいよ！
とherokuさんがおっしゃっていたので、`.profile.d`を作成し、そこにPATHを通すための設定を書けばいいのでは？ということで実践。

# 実践

mysqlのファイルを解凍、ビルドしたのち、`.profile.d`にパスの設定ファイルを作成

```sh:compile
#!/usr/bin/env bash
echo "------> Installing Mysql 5.1"
BUILD_DIR=$1
BUILD_PATH=$(cd $1 && pwd)
PROFILE=${BUILD_PATH}/.profile.d

cd $BUILD_DIR
# download the minimal mysql tar file
echo "------> Downloading minimized tarball"
wget https://raw.githubusercontent.com/gaumire/mysql-binary/master/mysql.tar.gz
# make a directory to untar (like unzip) the binary
mkdir -p $BUILD_DIR/.heroku/vendor/mysql
# untar the binary to a directory inside /app/.heroku
tar -C $BUILD_DIR/.heroku/vendor/mysql -xvf mysql.tar.gz
# remove the tar file
rm -f mysql.tar.gz

mkdir -p ${PROFILE}
touch ${PROFILE}/mysql_buildpack_paths.sh
echo "export PATH=$PATH:/app/.heroku/vendor/mysql/bin" >> ${PROFILE}/mysql_buildpack_paths.sh
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app/.heroku/vendor/mysql/lib" >> ${PROFILE}/mysql_buildpack_paths.sh
echo "export LIBRARY_PATH=$LIBRARY_PATH:/app/.heroku/vendor/mysql/lib" >> ${PROFILE}/mysql_buildpack_paths.sh


```

`release`と`detect`は他の人のを参考に

```sh:release
#!/usr/bin/env bash
cat << EOF
---
config_vars:
  PATH: $PATH:/app/.heroku/vendor/mysql/bin
  LD_LIBRARY_PATH: $LIBRARY_PATH:/app/.heroku/vendor/mysql/lib
  LIBRARY_PATH: $LIBRARY_PATH:/app/.heroku/vendor/mysql/lib
EOF
```

```sh:detect
#!/usr/bin/env bash
echo "Mysql 5.1"
exit 0
```

githubにpushして、リポジトリのURLをコピー、
buildpack-multiを使って複数の実行環境を読み込めるようにする。

```sh
$ heroku buildpacks:set https://github.com/ddollar/heroku-buildpack-multi.git --app App名
```

自分のプロジェクトに.buildpacksファイルを作り、プロジェクトに必要な環境設定と、自分で作った設定ファイルのURLを記述

```sh:.buildpacks
https://github.com/heroku/heroku-buildpack-ruby.git #railsプロジェクトの為必須
https://github.com/buildpackのURL
```

あとは

```sh
$ git push heroku master --app App名
```

これで```mysqldump```がheroku上で使えるようになりました！

参考:
[heroku-buildpack-mysql](https://github.com/gaumire/heroku-buildpack-mysql)
[herokuにbinary組み込むbuildpack](http://blog.flect.co.jp/labo/2013/06/herokubuildpack-c488.html)
Visual Studioからw3wp.exeにアタッチできない

なかなか悩んだ

解決策はここにあった

https://social.msdn.microsoft.com/Forums/vstudio/en-US/3e915e97-8741-44bf-a4ca-a7ce82d91694/unable-to-attach-a-debugger-is-already-attached?forum=vsdebug
-Vishal.Dedaniaからの回答を参照

どうやらDebug Diagnostics Tool v1.2が先にw3wpプロセスにアタッチしているから、VisualStudioのアタッチが拒否されていたらしい

Debug Diagnostics Tool v1.2を止めればいいんだろうけど調べるのがめんどくさいのでアンインストールした

この対応が本当にいいのかは...わからない