OmniAICreator/Qiita-1.07M huggingface dataset:
Kobito for Windows をOSXやLinux用にリビルドするためのDockerfileを書いた

## Kobito for Windows の他環境用ビルド便利

- [Windows版のKobitoがMacでも全然動いてすごい](http://qiita.com/daron/items/04e3d7936215568a704e)
- [KobitoをUbuntuで使いたい](http://qiita.com/sayamada/items/2d13189976b55ee27bee)

便利。ただ、環境が変わる度・アプリのバージョンアップの度に環境構築したりパッケージし直すのだけれど、毎回同じことを繰り返すのが辛いので[minodisk/kobito-repackager](https://github.com/minodisk/kobito-repackager)に各環境用にアイコン付きでパッケージするためのDockerfileを書いた。

## コンテナ内で行っていること

1. パッケージのための環境を構築する。
  - `node`
  - `apt-get`
  - `npm install`
1. [Kobito for Windows](http://kobito.qiita.com/win)から最新のパッケージをダウンロードする。
  - 配布ページをスクレイピングしてダウンロードURLを取得する。
  - ダウンロードする。
1. `kobito.exe`からアイコンを抽出する。
  - OSX用に`.icns`を生成する。
  - Linux用に`.png`を生成する。
1. [maxogden/electron-packager](https://github.com/maxogden/electron-packager)で他のプラットフォーム用にパッケージし直す。

## セットアップ

リポジトリをクローンしてビルド。

```bash:terminal
git clone git@github.com:minodisk/kobito-repackager.git
cd kobito-repackager
docker-compose build
```

## パッケージング

パッケージする時に色々引数を渡すのがめんどくさいので、プラットフォームやアーキテクチャ毎に`docker-compose.yml`にサービスを定義した。

### OSX

```bash:terminal
docker-compose run osx
```

`dist/kobito-darwin-x64/kobito.app`がアプリケーションの本体。
アプリケーションディレクトリにコピーするなどするとよいかも。

![スクリーンショット 2016-01-25 20.56.33.png](https://qiita-image-store.s3.amazonaws.com/0/6752/57559742-200c-fbd2-e28b-e027893e1f13.png)

### Linux

64ビットなアーキテクチャなら

```bash:terminal
docker-compose run linux_x64
```

32ビットなら

```bash:terminal
docker-compose run linux_ia32
```

`dist/kobito-linux-XXXXX/kobito`がアプリケーションの本体。
パスが通ってるところにシンボリックリンクを作成するとよいかも。

#### Ubuntuでアイコンを表示する

UbuntuのUnityのランチャーにアイコンファイルを認識させるためのファイルを作成するスクリプトをつけている。実行してログアウト後に再度ログインすると、検索可能になっていて実行時にはアイコンが表示される。これも[KobitoをUbuntuで使いたい](http://qiita.com/sayamada/items/2d13189976b55ee27bee#5-%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E3%83%A9%E3%83%B3%E3%83%81%E3%83%A3%E3%81%AE%E7%99%BB%E9%8C%B2)のまま。

```bash:terminal
./ubuntu/launch
```

![Screenshot from 2016-01-25 20:13:11.png](https://qiita-image-store.s3.amazonaws.com/0/6752/f84e6fc1-a8b3-62e3-6a37-031c49fc008c.png)

## とはいえ

公式のビルド欲しいですね。
UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException の解決事例の1つ

## 概要
Android Studioにて、jar自体をテストするためにjarをころころ入れ替えてapkをBuildするということをやっていて、ある日ふと気付いたら以下の内容でapkのビルドが失敗した。


```java:説教内容
UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexException: Multiple dex files define  (略)
```

## 原因
複数のjarが読み込まれていたこと。

でもそんなことした覚えは無い。

## 解説
jarをころころ入れ替えるので、libsの下にディレクトリを切ってjarを管理してました。ごめんなさい。

でOpen Module Settings(F4)のDependenciesからjarを入れ替えてましたが、libs直下のjarは置いておくと優先して読み込まれるようで、たまたま前回の最後の操作で使うjarをlibs直下に置いたことにより発生したようでした。

libsの下に置いてあったjarを消すと無事解決。稚拙。

## 結論
部屋は片付けよう
RubyMineのESLintの指摘をわかりやすくするようにしてみた

Error扱いにして、赤々となるようにしてみた。
これでももうちょい目立ってもよいんだぞって時がある。

`===`にするというルールなのに
`==`と書いてしまったときは、
最初の`=`しか赤くなってないし...

![Screen Shot 2016-01-25 at 8.48.12 PM.png](https://qiita-image-store.s3.amazonaws.com/0/27895/fe42a79d-bbaa-3d00-85d3-2864896eb1eb.png)

ド黄色みたいなおもいっきり目立つようにしてみた。
（これはこれで気になりすぎる...)
![Screen Shot 2016-01-25 at 8.56.54 PM.png](https://qiita-image-store.s3.amazonaws.com/0/27895/ade88221-ee48-a283-5e2a-cf4b4ac143e9.png)

背景が赤で、文字が黄色にしとくか....

![Screen Shot 2016-01-25 at 9.05.16 PM.png](https://qiita-image-store.s3.amazonaws.com/0/27895/fb9aced4-ae03-6f25-c19d-0f8aa01b7415.png)
githubでteam idを取得する方法


まずGithub APIのOAuth tokenを取得する。

```
curl -u '<your email address for github login>' -d '{"scopes":["repo"],"note":"Help example"}' https://api.github.com/authorizations
```

次に、

```
curl -H "Authorization: token <your token>" https://api.github.com/orgs/<your organization>/teams
```


thanks for:

* http://fabian-kostadinov.github.io/2015/01/16/how-to-find-a-github-team-id/
* http://qiita.com/rentalname@github/items/9a185d445e45b8b4857c
UITextView の文字サイズが指定したものにならない



#現象

1. xib で UITextView を配置、フォントサイズを指定
2. ランタイムでテキストを設定
3. 1で指定したフォントサイズにならない

#とりあえずの原因?解決策?

UITextView のプロパティ textView.selectable = true にしたら解決
※ デフォルトは true になってる

#詳細

問題だった **指定したフォントサイズにならない** という部分ですが、
実際は **指定したフォントにならない** という問題のようです。

ちなみに、テキストの設定後に文字サイズを指定したらちゃんと効いてくれました。
selectable を true にしたくない人はテキスト設定後にフォントを指定すると良さそうです。

selectable とは本来、テキスト長押しでの選択の可/不可を制御するプロパティであり、
フォントの反映に関わってくるのは意味不明です。

どうやら、UITextView は他にもいろいろと不安定みたいです。
詳しくは参考サイトその２をご覧下さい。

#参考

- [Xibなどで指定したUITextViewのfont指定が効かない時の対処](http://qiita.com/musclemikiya/items/cbe29befc017974c56b8)

- [iOS 7 のテキスト入力欄（UITextView）の問題について](http://manabuueno.tumblr.com/post/64781595021/ios-7-のテキスト入力欄uitextviewの問題について)
gitignoreを使ってファイルをGitHubにあげないやり方


# #1 ターミナルから.gitignoreファイルを作成からプッシュまで

流れとしては
.gitignore作成

ファイル名を.gitignoreに記入
コミット&プッシュ

```
vim .gitignore
```

これで.gitignoreが作成され、vimが立ち上がりますので、
iを押し、insertモードに切り替え、GitHubに入れたくないファイル名を記入します

あとは、escボタンでinsertモードをやめ、:wqで保存し終了します。
あとは、GitHubにコミット&プッシュするだけです。

# #2 もしすでにコミットしてしまったファイルをGitHubから消したい場合

消したいファイルの一つ前までディレクトリ移動し、

```
git rm -rf ファイル名
```

を#1の前にするだけです
JavaScriptでカンマ除去の速度チェック

## 実行コード

```js:remove_comma.js
'use strict';

let count = 1000000, num;

// Split-Join
for(let i = 0; i < count; i++) {
  num = Number('1,000'.split(',').join(''));
}

// Replace
for(let i = 0; i < count; i++) {
  num = Number('1,000'.replace(/,/g, ''));
}

// Split-Join(3 commas)
for(let i = 0; i < count; i++) {
  num = Number('1,000,000,000'.split(',').join(''));
}

// Replace(3 commas)
for(let i = 0; i < count; i++) {
  num = Number('1,000,000,000'.replace(/,/g, ''));
}

```

## 結果(参考)

私の環境では

Chrome DevToolの場合

|Split-Join|Replace|Split-Join(3 commas)|Replace(3 commas)|
|:---|:---|:---|:---|
|4424.411ms|4058.820ms|3918.996ms|4146.879ms|

Node.jsの場合

|Split-Join|Replace|Split-Join(3 commas)|Replace(3 commas)|
|:---|:---|:---|:---|
|214ms|203ms|299ms|311ms|

となりました。

カンマが少ない場合はReplaceで、カンマが多い場合はSplit-Joinが早いみたいです。
Nodeの場合、誤差レベルっぽいですが。

ちなみにChrome上での使用が目的のため、Nodeは参考程度に実行しただけです。

間違えてる、こっちのほうが早いよ等ありましたら教えて下さい！！
ChakraCore入りNode.jsを試す


公式インストーラーがあります。
[Release Node.js with ChakraCore (node-chakracore-6.0.0-pre2) · Microsoft/node](https://github.com/Microsoft/node/releases/tag/node-chakracore-6.0.0-pre2)

ダウンロードして、インストールします。

Original版は次の手順でビルドできます。
[Node.jsをWindowsでビルドする - Qiita](http://qiita.com/ledsun/items/53b7b3c0d627acb8b1a0)

比べてみましょう。

# バージョン
一応、変更されていいます。2が追加されています。

## Original
```
$ Release/node.exe -v
v6.0.0-pre
```

## ChakraCore

```
$ node -v
v6.0.0-pre2
```


# process.jsEngine
JavaScriptエンジンを確認するための[変数jsEngineが追加されています](https://github.com/Microsoft/node/issues/13)。


## Original
```
$ Release/node.exe
> process.jsEngine
undefined
```

## ChakraCore

```
$ node
> process.jsEngine
'chakracore'
```


# 分割代入
分割代入が実装されています。

## Original
```
$ Release/node.exe
> let [a, b] = [1, 2]
ReferenceError: let is not defined
    at repl:1:1
    at REPLServer.defaultEval (repl.js:252:27)
    at bound (domain.js:281:14)
    at REPLServer.runBound [as eval] (domain.js:294:12)
    at REPLServer.<anonymous> (repl.js:417:12)
    at emitOne (events.js:96:20)
    at REPLServer.emit (events.js:183:7)
    at REPLServer.Interface._onLine (readline.js:216:10)
    at REPLServer.Interface._line (readline.js:555:8)
    at REPLServer.Interface._ttyWrite (readline.js:832:14)
```

## ChakraCore

```
$ node
> let [a, b] = [1, 2]
[ 1, 2 ]
> console.log(a, b)
1 2
```


# async-await
シンタックスは実装されています。実行は出来ません。

## Original
```
$ Release/node.exe
> async funcitona () {}
SyntaxError: Unexpected identifier
    at Object.exports.createScript (vm.js:24:10)
    at REPLServer.defaultEval (repl.js:225:25)
    at bound (domain.js:281:14)
    at REPLServer.runBound [as eval] (domain.js:294:12)
    at REPLServer.<anonymous> (repl.js:417:12)
    at emitOne (events.js:96:20)
    at REPLServer.emit (events.js:183:7)
    at REPLServer.Interface._onLine (readline.js:216:10)
    at REPLServer.Interface._line (readline.js:555:8)
    at REPLServer.Interface._ttyWrite (readline.js:832:14)
```


## ChakraCore

```
$ node
> async function a(){}
undefined
> a()
TypeError: Object doesn't support property or method 'MakeMirror'
   at inspectPromise (util.js:204:3)
   at formatValue (util.js:354:5)
   at inspect (util.js:109:3)
   at self.writer (repl.js:342:7)
   at finish (repl.js:463:9)
   at defaultEval (repl.js:273:5)
   at bound (domain.js:281:5)
   at runBound (domain.js:294:5)
   at Anonymous function (repl.js:417:7)
   at emitOne (events.js:83:7)
```
swiftのREPLで俺モジュールをimportする方法

SwiftのREPL、最高。

何が最高かって、あの重いコンダラじゃなくてXcodeを立ち上げなくても使えるところ。Xcode不要なので、Linuxでも動くし。

しかし、perlの`use`とかrubyの`require`とかpythonの`import`相当のことを、自分の書いたコードに対してやろうとすると一苦労。でも、一旦やり方を掴んでしまえばちょろいもんです。

[swift-complex]を例に説明します。

[swift-complex]: https://github.com/dankogai/swift-complex

「説明は抜きにして、とにかく俺モジュール`import`したいという人は、以下のMakefileを雛形にしてください。

````Makefile:Makefile
MOD=Complex
BIN=main
MODSRC=complex/complex.swift complex/exops.swift
BINSRC=$(MODSRC) complex/main.swift complex/tap.swift
MODULE=$(MOD).swiftmodule $(MOD).swiftdoc
SWIFTC=swiftc
SWIFT=swift
ifdef SWIFTPATH
	SWIFTC=$(SWIFTPATH)/swiftc
	SWIFT=$(SWIFTPATH)/swift
endif
OS := $(shell uname)
ifeq ($(OS),Darwin)
	SWIFTC=xcrun -sdk macosx swiftc
endif

all: $(BIN)
module: $(MODULE)
clean:
	-rm $(BIN) $(MODULE) lib$(MOD).*
$(BIN): $(BINSRC)
	$(SWIFTC) $(BINSRC)
test: $(BIN)
	prove ./$(BIN)
$(MODULE): $(MODSRC)
	$(SWIFTC) -emit-library -emit-module $(MODSRC) -module-name $(MOD)
repl: $(MODULE)
	$(SWIFT) -I. -L. -l$(MOD)
````

`make repl`すれば、このとおり。

![](https://raw.githubusercontent.com/dankogai/swift-complex/master/screenshots/repl-linux.png)

で、何をしているのかを解説します。まず、ビルドの部分。

````shell
swiftc -emit-library -emit-module complex/complex.swift complex/exops.swift -module-name Complex
````

こうすることで、

* `Complex.swiftmodule`
* `Complex.swiftdoc`
* `libComplex.dylib` (Linuxなら`libComplex.so`)

という三つのファイルが作られます。うち上の二つがあれば`import`は成功しますが、実際に使おうとすると…

````shell:REPL
% swift -I. -L.
Welcome to Apple Swift version 2.1.1 (swiftlang-700.1.101.15 clang-700.1.81). Type :help for assistance.
  1> import Complex
  2> 1+1.i
error: Couldn't lookup symbols:
  __TFeRq_7Complex14ArithmeticType_S_S0_g1iGVS_7Complexq__
  __TZF7Complexoi1puRq_S_14ArithmeticType_FTq_GVS_7Complexq___GS1_q__
  __TWPSi7Complex14ArithmeticTypeS_

  2>  
````

こうなってしまいます。ここで無理やり使えるようにしてみましょう。

````shell:REPL
  2> import Foundation
  3> dlopen("./libComplex.dylib",0)
$R0: UnsafeMutablePointer<Void> = {
  _rawValue = 0x0000000100704150 -> 0x00007fff5fc38e48 dyld`vtable for ImageLoaderMachOCompressed + 16
}
  4> 1+1.i 
$R1: Complex.Complex<Int> = {
  re = 1
  im = 1
}
````

もうわかりましたね。実装は`lib`の方にあって、`.swiftmodule`にあるのは対応表だけなのだと。ちなみに`.swiftdoc`にはdoc commentなどが入っているようです。

というわけでまとめると、

* ` -emit-library -emit-module`でモジュールファイルと shared library を同時に作っておき、
* `swift`起動時に`-I. -L. -lModuleName`であらかじめそれらを読んでおく

というのが、「俺モジュールを`import`する」という設問の回答になります。

Enjoy!

Dan the Swift Newbie
symfony開発でもうDQL嫌だ！ってかたへ

# 初めに

私にとってsymfonyを使った開発でどうしても慣れないのがdoctrineなんですが、こいつで使うSQLとほぼ一緒のDQLってのがほんとにイライラさせてくれます。
そこで、もう思い切ってDQLもういらん！ってかたにsymfonyでシンプルにSQLを書く方法をご紹介します。

```php
	$db = Doctrine_Manager::connection();
	//抽出系
	$members = $db->execute('SELECT * FROM member WHERE dept = ?',[1])->fetchAll();

	//更新系 トランザクションも大丈夫！
	$db->beginTransaction();
	try {
		$update_count = $db->exec(
			'UPDATE member SET name = ? WHERE id = ?',
			['山田 太郎',3]
		);
		// その他いろいろ更新系...
		$db->commit();
	} catch (Exception $e) {
		$db->rollback(); // rollback
		throw $e;
	}
```
# おわりに

単にPD、、ごほっげふっ、、
swiftでもテストはTAPで

Swift が opensource 化されてもう一月以上。みなさんテストはどうされてますか?

もちろんこの場合XCTestなんてチャラいものは使えません。Linux版にSwift自体はあってもXcodeなんてありませんから。

というわけで、私はずっと[Test Anything Protocol]を使ってきました。

[Test Anything Protocol]: http://testanything.org

発祥はPerl Communityですが、別にPerlでなくても使えます。例えばJSの世界ではよく使われている[mocha]も対応してますし、TAP適合の出力であれば、それをチェックするためのスクリプト`prove`は、Perlが入っている環境であれば必ず入っているのでOS XとLinux Distroの過半では out-of-box で使えます。

[mocha]: https://mochajs.org

見てのとおりシンプルなものなので、その場で都度実装してもいいですし実際そうしてきたのですが、ずいぶんとSwiftのプロジェクトも増えたので、今回その部分だけ独立させました。

* https://github.com/dankogai/swift-tap

実際のテストコードは、こんな。

````swift:main.swift
let test = TAP(tests:7)
test.ok(42+0.195 == 42.195,     "42 + 0.195 == 42.195")
test.eq(42+0.195,   42.195,     "42 + 0.195 is 42.195")
test.eq([42,0.195],[42,0.195],  "[42,0.195] is [42,0.195]")
test.eq([42:0.195],[42:0.195],  "[42:0.195] is [42,0:195]")
test.ne(42+0.195,   42.0,       "42 + 0.195 is not 42")
test.ne([42,0.195],[42,0.0],    "[42,0.195] is not [42,0.0]")
test.ne([42:0.195],[42:0.0],    "[42:0.195] is not [42:0.0]")
test.done()
````

出力は、こんな。

````shell:./main
1..7
ok 1 - 42 + 0.195 == 42.195
ok 2 - 42 + 0.195 is 42.195
ok 3 - [42,0.195] is [42,0.195]
ok 4 - [42:0.195] is [42,0:195]
ok 5 - 42 + 0.195 is not 42
ok 6 - [42,0.195] is not [42,0.0]
ok 7 - [42:0.195] is not [42:0.0]
````

`prove`に食わせると、こんな。

````shell:prove
% prove ./main
./main .. ok   
All tests successful.
Files=1, Tests=7,  0 wallclock secs ( 0.02 usr +  0.01 sys =  0.03 CPU)
Result: PASS
````

で、何がありがたいかっていうと、`.travis.yml`もこれくらい簡単になること。

````yaml:.travis.yml
language: objective-c
osx_image: xcode7
script:
- make test
````

`Makefile`はこんな感じ。

````Makefile:Makefile
BIN=main
MOD=TAP
MODSRC=tap/tap.swift
BINSRC=$(MODSRC) tap/main.swift
MODULE=$(MOD).swiftmodule $(MOD).swiftdoc
SWIFTC=swiftc
SWIFT=swift
ifdef SWIFTPATH
	SWIFTC=$(SWIFTPATH)/swiftc
	SWIFT=$(SWIFTPATH)/swift
endif
OS := $(shell uname)
ifeq ($(OS),Darwin)
	SWIFTC=xcrun -sdk macosx swiftc
endif

all: $(BIN)
module: $(MODULE)
clean:
	-rm $(BIN) $(MODULE) lib$(MOD).*
$(BIN): $(BINSRC)
	$(SWIFTC) $(BINSRC)
test: $(BIN)
	prove ./$(BIN)
$(MODULE): $(MODSRC)
	$(SWIFTC) -emit-library -emit-module $(MODSRC) -module-name $(MOD)
repl: $(MODULE)
	$(SWIFT) -I. -L. -l$(MOD)
````

見てのとおり、`make test`のみならず、モジュールも作れるので`make repl`でREPLからも使えます。

````shell:REPL
% make repl
xcrun -sdk macosx swiftc -emit-library -emit-module tap/tap.swift -module-name TAP
swift -I. -L. -lTAP
Welcome to Apple Swift version 2.1.1 (swiftlang-700.1.101.15 clang-700.1.81). Type :help for assistance.
  1> import TAP
  2> let test=TAP()
test: TAP.TAP = {
  tests = 0
  runs = 0 values
}
  3> test.eq(42,42,"Life, the Universe, and Everything")
ok 1 - Life, the Universe, and Everything
$R0: Bool = true
  4> test.eq(42,41,"Life, the Universe, and Everything")
not ok 2 - Life, the Universe, and Everything
#       got: 42
#  expected: 41
$R1: Bool = false
  5> test.done()
1..2
error: REPL process is no longer alive, exiting REPL
Swift REPL requires a running target process.
````

ENJOY!

Dan the Simple Tester
メモ: Unity 5.3 の In-App Purchasing

次のページに沿って試してみる。
[Integrating Unity IAP In Your Game](http://unity3d.com/jp/learn/tutorials/topics/analytics/integrating-unity-iap-your-game)

### Android向け
#### ■ サンプルコードのままでは購入時にエラーが発生する件
前述のページのサンプルコードは一見Androidでも動くようにみえる。
が、実際には「出版社はこのアイテムを購入できません」というエラーが発生する。
このエラー自体はほかの原因でも発生するようだが、今回のサンプルコードのケースではまず必要な部分が抜けている。
実に単純な話で**アプリのライセンスキーが設定されていない**ことが理由。
自分の勘所が悪く情報にたどり着くまでに遠回りしてしまったが、ひとまず期待通り動作させる記述がわかった。

サンプルコードのメソッド InitializePurchasing() へライセンスキーをセットする処理を追加する。
具体的には次のようにbuilderインスタンスを取得した後に設定を付与する。

```csharp
  var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
#if UNITY_ANDROID
  builder.Configure<IGooglePlayConfiguration>().SetPublicKey("パブリックキー");
#endif
```
この修正により実機で動作することを確認できた。
※ もちろんサンプルコードのうち product id なども適宜自分のアプリ用に書き換えること。

2016/04/28 しばらく手一杯でIAPモジュールの更新をキャッチアップできていなかった。
IAPモジュールの更新が行われ公開鍵に関してはより安全な方法で設定できるようになっているようだ。
具体的にはこちら[マニュアル:レシート検証](http://docs.unity3d.com/ja/current/Manual/UnityIAPValidatingReceipts.html)。
ページの主題はクライアント側でレシートを検証する手順の説明だが、公開鍵を暗号化して保存する手順について記述されている。
これでソースに公開鍵を記述しなくて済む。

### 購入結果のレシート情報
#### ■ Android
ストアでの決済が正常終了すると以下の構造で処理結果が用意されるようだ。
下の記述ではPayloadとjsonを普通のプロパティのように記述しているが、実際にはそれぞれ文字列で格納されている。

```json
{
  "Store":"GooglePlay",
  "TransactionID":"GPA.1111-2222-3333-44444",
  "Payload": {
      "json":{
        "orderId":"GPA.1111-2222-3333-44444",
        "packageName":"com.example.application",
        "productId":"com.example.application.item",
        "purchaseTime":9999999999999,
        "purchaseState":0,
        "purchaseToken":"トークン文字列"
      },
      "signature":"シグネチャ文字列"
  }
}
```
もしproductIdなどを取り出す場合には要注意。Payloadを文字列として取り出してJSONオブジェクトへ変換し、そのオブジェクトのjsonプロパティを文字列として取り出してJSONオブジェクトへ変換するという手順が必要。(下記のコードはLitJSONを使った場合のもの。JsonUtilityを使うのであればモデルクラスの用意が必要か？)

```csharp
var receiptJson = JsonMapper.ToObject(receipt);
var payload = JsonMapper.ToObject((string)receiptJson["Payload"]);
var content = JsonMapper.ToObject((string)payload["json"]);
var productId = (string)content["productId"];
```
上記のjsonパートの詳細は[In-app Billing Reference](http://developer.android.com/google/play/billing/billing_reference.html)のTable 4に説明がある。

#### ■ iOS
ストアでの決済が正常終了すると以下の構造で処理結果が用意されるようだ。
Payloadは長い文字列。ストアのセッション情報か？。AndroidでPayloadが文字列表現だった理由がわかる。

```json
{
  "Store":"AppleAppStore",
  "TransactionID":"1999999999999999",
  "Payload": "ABCDEFGH~"
}
```

Payloadはレシートの検証の際に使用する。
クライアントで検証を行う手順はUnityのサイトに記述がある。
サーバーで検証を行う手順についてはここでは触れない。

### アプリケーション全体を通してシングルトンで利用する

サンプルコードの public void InitializePurchasing() の中を見ると分かるが、初期化時点の Purchaser のインスタンスをつかんでしまっている。
UnityPurchasing 自体がどうやらシングルトン実装らしく初期化を何度呼び出しても最初につかんだ Purchaser のインスタンスが生きている模様。（２回目以降の初期化呼び出しは無視される？）
今のところつかんだインスタンスを差し替えることは出来ないようなので Purchaser はアプリケーション全体を通してシングルトンで利用するのが正解か。
要するにゲームの開始時点で Purchaser を初期化したら、その GameObject は DontDestroyOnLoad() しておく。

購入処理の終了をアプリケーションへコールバックしたいのであれば Purchaser に UnityEvent を用意しておき、アプリケーション側からは必要に応じて AddListener()、RemoveListener() するのがよさそう。

### IAPのデモ
Unityが提供するパッケージにはIAPのデモが含まれていて、コードはBitbucketで[公開されている](https://bitbucket.org/Unity-Technologies/unity-iap-samples.git)。

ちなみに、このデモのコードにはAndroidでのパブリックキーを渡す記述が書いてあったりする。
iPhoneでモーダル表示

iPhoneでモーダル表示したいという、ごく普通のどこにでもある要望なのに常軌を逸するほど難しかった。
というかできなかった。

ごく普通のモーダルダイアログ：
1. 好きなUIViewを、画面の中央にサイズを指定して表示
2. モーダル以外のところは灰色で半透明


たったこれだけで、AndroidならDialogFragmentで簡単なのに、iPhoneではできなかった。

UIAlertControllerは自由にレイアウトできない。
UIPopoverPresentationControllerは絶対にスクリーン全体になってしまう。

たったこれだけの機能ができないのはなんでなんだろう。
ActiveRecordのscopeでnilを返すと…



モデルのscopeを書くとき

```ruby:user.rb
class User < ActiveRecord::Base
  scope :hoge, -> (fuga) { find_by(fuga: fuga) }
end
```

こんな風にうっかり`find_by`なんかを書いてしまうと、レコードが取れない場合に`nil`でも`User.none`でもなく`User.all`（
相当のもの）がかえってくる。
こう書くべき。

```ruby:user.rb
class User < ActiveRecord::Base
  def self.hoge(fuga)
    find_by(fuga: fuga)
  end
end
```

scopeなんてただのクラスメソッドの略記法かと思ってたけど違うんですね。
rsyslogで取得したログを直接fluentdに送る

## About

前々からやろうと思っていて、一念発起したのでやってみます。

### rsyslogの送信テスト

```
$ sudo logger -p authpriv.1 "test"
```

`-p` : ファシリティ/プライオリティの指定

### ファシリティ/プライオリティ

ざっくり言うとファシリティがログの単位、プライオリティがログレベル。

プライオリティは0 - 8?

```
0:emergency
1:arelt
2:critical
3:error
4:warning
5:notice
6:info
7:debug
以下以降繰り返し？
```

```:/etc/rsyslog.d/forwarder.conf
# /var/log/secure
authpriv.* @127.0.0.1:5140
```

`@`でホストを指定する。

### td-agentの設定

```
<source>
  type syslog
  port 5140
  bind 127.0.0.1
  tag system.local
</source>

<match system.**>
  @type file
  path /var/log/test-syslog.log
  time_slice_format %Y%m%d
  time_slice_wait 1m
</match>
```

syslog用に開けた5140ポートに対してログを送信する
laravelでfirstOrNewしたら、preg_replace(): Parameter mismatch, pattern is a string while replacement is an arrayと怒られた

laravel4を使用しているプロジェクトでタイトルのようなことがあったときに行った対応をメモ。
※laravel5ではどうなっているかは確認していません。

## 状況

以下のようなソースコードを実行したときに、エラーが発生しました

```php
$conditions = [
    'id' => $id,
];

$data = TestModel::firstOrNew($conditions);

$data['name'] = 'test';

$data->save();
```

何の変哲もない処理ですが、これを実行するとこんなstacktraceが、、、

```bash
local.ERROR: exception 'ErrorException' with message 'preg_replace():
Parameter mismatch, pattern is a string while replacement is an array'
in ~/vendor/laravel/framework/src/Illuminate/Support/helpers.php:887
```

## 原因

TestModelのコンストラクタでフィールドに変数を追加していたことが原因でした。
どうやらカラムと認識されていたようです。

```php:TestModel.php
<?php
class TestModel extends Illuminate\Database\Eloquent\Model
{
    public function __construct()
    {
         parent::__construct();

         // こいつが原因
         $this->hoge = ['aaa', 'bbb'];
    }
}
```
nginx + nodejsでhttps経由のアクセスにする

# nginx + nodejsでhttps経由のアクセスにする

## はじめに

node.jsで80や443を占有してしまうと以下の問題が発生するのでその部分を楽するためにブラウザとの接続をnginx経由にする選択肢もあります

* 1024番ポート以下はrootで起動し他ユーザーで使う場合にはプログラム内でswitchする必要がある
* SSLの証明書を入れ替えるのにちゃんと入れ替え用のコードを組まないと再起動する必要が出てくること
* 負荷が上がるとSSLの処理にイベントループを食われてパフォーマンスが落ちること
* リソースとアプリケーションサーバーのURLを共有するとルーティングの機能を組む必要があること

## nginxのインストール

```bash

yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
```

## 自己署名した証明書をつくる

※証明書が別途ある場合はそちらを使う

```
openssl genrsa 2048 > cert.key
openssl req -new -key cert.key > req.csr
openssl x509 -days 3650 -req -signkey cert.key < req.csr > cert.pem
```

## nginxの設定

* sslの設定
* URLルーティングの設定
* WEBSOCKET対応の設定
* 接続数のリミットを増やす設定

```/etc/nginx/nginx.conf
worker_rlimit_nofile 10240;
worker_connections  10240;
```

```/etc/nginx/conf.d/ssl.conf
server {
    listen 443 default ssl;
    ssl on;
    ssl_certificate      /etc/nginx/ssl/cert.pem;
    ssl_certificate_key  /etc/nginx/ssl/cert.key;

    server_name yourdomainname;
    server_tokens off;
    ssl_prefer_server_ciphers   on;
    ssl_session_timeout  5m;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';

    index index.html;

    root /var/www;

    access_log /var/log/nginx/ssl-access.log;
    error_log /var/log/nginx/ssl-error.log;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
```

## node.js側の設定

特に暗号化せずにポートを3000番で起動するだけ（nginx側の設定と合わせる）
接続可能アドレスはローカルホストに限定したほうがいいかも
Scalaz を使う


Scalaz は Scala 上で型クラスを利用するためのライブラリです。
使えると便利なのですが、ライトに使いたい人向けにどうやって使えばいいか解説する記事が少ないのでちょっと書いてみます。

import Scalaz._ はダメ
---

Scalaz の使い方を検索すると、多くの記事に

```
import scalaz._
import Scalaz._
```

をファイル先頭に記述すると書いてありますが、これはやってはいけません。
特に IntelliJ などを使っている人は重すぎて辛くなります。
Scalaz は機能ごとに import できるので、それを使うようにしましょう。


import のしかた
---

Scalaz で import する時は、どの型クラスのどのインスタンスを使うかをそれぞれ明示します。
例えば Monad 型クラスのインスタンスとして List を使いたい場合、

```
import scalaz._
import syntax.monad._
import std.list._
```

という具合にします。

とりあえず使ってみる
---

Scalaz は少なからず趣味が入ったライブラリですが、中には痒いところに手が届く絶妙に便利な関数があったりします。
個人的なお勧めは multiply と traverse です。
こんな感じで使えます。

```
import scalaz._
import syntax.monoid._
import std.string._

"hello".multiply(3)          // hellohellohello
```

```
import scalaz._
import syntax.traverse._
import std.list._
import std.option._

// stoi : String => Option[Int]
// 与えられた英語の数字を数値に変換する関数とする
List("one", "two", "three").traverse(stoi)   // Some(List(1, 2, 3))
List("one", "two", "hello").traverse(stoi)   // None
```

小難しい型クラスの勉強はさておき、とりあえず使ってみると良いと思います。
ローカルにEclipse4.5をインストールする（日本語化、git組み込み）


非エンジニアの人とバージョン管理をするために、Eclipseをローカルにインストールしてそこでgitを使えるようにする。

###Eclipseをローカルにダウンロードする
pleiades（日本語化ディストリビューション）とEclipseがセットでDL出来るページがあるので、以下http://mergedoc.osdn.jp/　よりDLする

・eclipseからssh通してgit cloneでサーバファイルを落としてくる
http://www.arubeh.com/archives/696

・EclipseでGitを使う
http://gomafuace.seesaa.net/article/301556194.html

・Eclipse4.3でEclipse×git環境を構築する
https://moomindani.wordpress.com/2013/07/11/eclipse-kepler/

・EclipseでGitをクライアント用途として使う
http://www.kakiro-web.com/memo/eclipse-git-client.html

見ながらやったらだいたいokっぽい
npm-install-missingがインストール出来ない

## npm-install-missingがインストール出来ない

nodeを使おうとしてnpm installsしたらmoduleがないと言われたので、
`$ npm install -g npm-install-missing`
を試してみたところ以下のようなエラー

```
module.js:340
   throw err;
         ^
Error: Cannot find module '../lib/npm.js'
   at Function.Module._resolveFilename (module.js:338:15)
   at Function.Module._load (module.js:280:25)
   at Module.require (module.js:364:17)
   at require (module.js:380:17)
   at /usr/lib/node_modules/npm/bin/npm-cli.js:24:11
   at Object.<anonymous> (/usr/lib/node_modules/npm/bin/npm-cli.js:86:3)
   at Module._compile (module.js:456:26)
   at Object.Module._extensions..js (module.js:474:10)
   at Module.load (module.js:356:32)
   at Function.Module._load (module.js:312:12)
```

/usr/lib/node_modulesの一回消してから、再インストールしたらなおった。
Google Analytics APIを使ってアクセス数上位100件のデータを取得する

最近GoogleAPIを使ってコンテンツ生成する機会が増えてまして一度実装してみたものの忘れそうなのでメモしておきます。

# phpでのAPIアクセス環境準備
## composer.jsonのrequireキーに以下のパッケージを追加。
```php:composer.json
"google/apiclient": "1.0.*@beta",
```

## 追記したパッケージのインストール
`php ../composer.phar update google/apiclient`
※composer.pharのパスは適宜合わせてください。
※運用中プロジェクトのため個別にパッケージを指定してupdateしてます。

# GoogleAnalytics APIを利用するための準備
参考）https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/service-php

## API経由でAnalyticsへアクセスするためのサービスアカウント追加
Google Developers Console > API Manager > 認証情報から
「新しい認証情報▼ > サービスアカウントキー」
を選択し、P12形式で鍵ファイルを取得。

## 作成したサービスアカウントのメールアドレスに対してGoogle Analytics側で「表示と分析」の権限付与
Google Developers Console > 権限 > サービスアカウント
画面から確認し、その情報をGoogle Analyticsで権限設定。

# API経由でアクセス数上位100件のデータを取得

・P12ファイルを使った認証
・Analyticsアカウントで取得したい対象のプロファイルの指定
までの実装は
https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/service-php
を参考にしてください。
そこで取得した$profileIdに対して、直近1週間のアクセス数上位100件のURLを取得する場合は

```php
    $startDate = date("Y-m-d", strtotime("-7 day"));
    $endDate   = date("Y-m-d");
    $this->results = $this->analytics->data_ga->get(
        'ga:' . $profileId,
        $startDate,
        $endDate,
        'ga:pageviews,ga:uniquePageviews',
        [
            'sort'        => '-ga:uniquePageviews',
            'max-results' => 1000,
            'dimensions'  => 'ga:pagePath'
        ]
    );
```
な感じになります。

取得したいdimensions、metricsは
https://developers.google.com/analytics/devguides/reporting/core/dimsmets
を参考にしてください。

ソート条件は対象のmetricsをsortオプションで指定してください。
降順の場合は対象metrics先頭文字列に「-（ハイフン）」をつけます。

Google APIドキュメントに記載された内容も一部取得出来ない可能性があるので
vendor/google/apiclient/src/Google/Service/Analytics.php
あたりも一緒に見るとよいと思います。
CSSで中央揃え

もう一度インライン要素、ブロック要素を分けて考えてみる


俺用メモ

インライン要素
↓
text-align: center;

ブロック要素
↓
margin: 0 auto;
ただし、自身の要素にwidth指定
親要素にもwidth指定するとその中央に寄せてくれる
ActiveAdmin | filter に as: :string を指定したら、短すぎる maxlength が作られてしまう

# 解決

数値型のカラムに対しては `as: :numeric` を指定すること。

```rb
ActiveAdmin.register Example do
  filter :id, as: :string
end
```

`as: :string` ではうまく動かない。

# 問題

数値型に対して filter を作る場合。 `as: :string` を指定すると。

```rb
ActiveAdmin.register Example do
  filter :id, as: :string
end
```

ActiveAdmin がスキーマ情報を誤解する。
そして短めの `<input maxlength="">` をつけてしまう。

```html
<input type="xxxx" maxlength="4">
```


# まとめ

ActiveAdmin filter の `as:` は。
単にHTML でどんな input を生成するかではなく。

「データ型をどのように扱うか」も含めての指定のようだ。

( どおりで `type: :text` いう指定ではないわけだ。。。が単にバグのような気もする )

# 環境

- activeadmin (1.0.0.pre1 e3a7354)
- Rails 4.0.0



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
Scalaでダイクストラをやってみる

 
## 経緯

 今度新しくやるプロジェクトはScalaでやろうと思っており、練習がてらにScalaでダイクストラ法を実装してみました。まだScalaをやり始めて3日なので、関数型っぽくやろうとおもったのですが、たんにScalaの強力なコレクションに頼っただけみたいになりました。
 
 今回はデータ構造は簡単に実装するだけなので隣接行列で用意しました。今からScala始めようと思っている人がこれを見て、for文とかなしで実装できるんだなとか思ってくれたらうれしいです笑
 
## コード

 ```scala
import scala.annotation.tailrec

object Dijkstra {
  def main(args: Array[String]) {
    val distance = List(
      List(0, 1, 2, 0, 0, 0),
      List(1, 0, 1, 2, 0, 0),
      List(2, 1, 0, 0, 1, 0),
      List(0, 2, 0, 0, 2, 2),
      List(0, 0, 1, 2, 0, 1),
      List(0, 0, 0, 2, 1, 0)
    )

    val init = List(0, -1, -1, -1, -1, -1)

    def getMinDistance(list: List[Int])(i: Int): Int =
      (0 to list.size - 1).toList
        .filter(list(_) != -1)
        .filter(distance(_)(i) != 0)
        .map(j => distance(i)(j) + list(j))
        .min

    def isIsolated(list: List[Int])(i: Int): Boolean =
      (0 to list.size - 1).toList
        .filter(list(_) != -1)
        .filter(distance(_)(i) != 0)
        .isEmpty

    def getNextMinPosition(list: List[Int]): Int =
      (0 to list.size - 1).toList
        .filter(list(_) == -1)
        .filterNot(isIsolated(list))
        .minBy(getMinDistance(list))

    def compute(l: List[Int]): List[Int] = {
      @tailrec
      def rec(list: List[Int], restCount: Int): List[Int] = {
        restCount match {
          case 0 => list
          case _ => {
            val next = getNextMinPosition(list)
            val dis = getMinDistance(list)(next)
            rec(list.updated(next, dis), restCount - 1)
          }
        }
      }
      rec(l, l.size - 1)
    }

    println(compute(init))
  }
}
 ```

```
       2
    b-----d
 1 /|     |\2
  a |1   2| f
 2 \|     |/1
    c-----e
       1
```

隣接行列はこんな感じになっています。C言語とかで実装するとループで配列を処理していきますが、Scalaには強力なコレクションが用意されているので見てすぐわかるくらい簡潔に書けました。`getNextMinPosition`が二か所で呼ばれているのはちょっとダサいですが、Scala初心者なので多めに見てください。
Cocoaの機能を使ってdefaultsコマンドを実行するAppleScriptハンドラ



* `defaults`コマンドを使ってアプリケーションやシステムの設定を読み書きできる
	* [defaults(1) Mac OS X Manual Page](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html)
* Cocoaでは`NSUserDefaults`クラスを使う
* 下のbashとAppleScriptは同じ操作
* `defaultsWrite`と`defaultsDelete`は一度に複数の項目を対象にできる


```Bash
defaults read com.apple.dock
defaults write com.apple.dock pinning -string start
defaults delete com.apple.dock pinning
```


```AppleScript:defaultsRead_Write_Delete.scpt
use framework "Foundation"

my defaultsRead("com.apple.dock")
my defaultsWrite("com.apple.dock", {pinning:"start"})
my defaultsDelete("com.apple.dock", {"pinning"})

on defaultsRead(domain as text)
	--require framework: Foundation
	set defaults to current application's NSUserDefaults's standardUserDefaults()
	return (defaults's persistentDomainForName:domain) as record
end defaultsRead

on defaultsWrite(domain as text, writeDictionary as record)
	--require framework: Foundation
	set defaults to current application's NSUserDefaults's standardUserDefaults()
	set preferencesDictionary to (defaults's persistentDomainForName:domain)'s mutableCopy()
	preferencesDictionary's addEntriesFromDictionary:writeDictionary
	defaults's setPersistentDomain:preferencesDictionary forName:domain
	my defaultsSynchronize()
end defaultsWrite

on defaultsDelete(domain as text, deleteKeys as list)
	--require framework: Foundation
	set defaults to current application's NSUserDefaults's standardUserDefaults()
	set preferencesDictionary to (defaults's persistentDomainForName:domain)'s mutableCopy()
	preferencesDictionary's removeObjectsForKeys:deleteKeys
	defaults's setPersistentDomain:preferencesDictionary forName:domain
	my defaultsSynchronize()
end defaultsDelete

on defaultsSynchronize()
	--require framework: Foundation
	set success to current application's NSUserDefaults's standardUserDefaults()'s synchronize()
	if not success then
		error "Synchronization in NSUserDefaults has failed"
	end if
end defaultsSynchronize
```


## 更新履歴

* 2016-01-25: Cocoaの機能を使って作成
* 2016-02-20: `defaultsSynchronize`ハンドラ作成
Elixir+Phoenix+Brunch環境でReact.jsを使う

# はじめに
ググると上の方に出てくる [Phoenix Framework (Elixir)で React.jsを動かしてみる - Misoca開発ブログ](http://tech.misoca.jp/entry/2015/05/21/130456) には

> Phoenixでは、brunchを使って、静的なアセットをビルドしています。brunchでは、JavaScriptライブラリなどをbowerを使って管理します。

とあるが、bowerは使いたくない。



[brunch/react-brunch - JavaScript](https://github.com/brunch/react-brunch)を使えばいいのかなと思ったら、

> DEPRECATED: Please use babel-brunch instead.

とある。babel-brunchは最初から入ってる。どうもreact-brunchはjsxのコンパイルしてくれるだけで、babelにその機能入ってるらしい。
※ 参考：[JavaScript - Babel に JSX は要らない - Qiita](http://qiita.com/k_ui/items/8a3a42219b6ebd862800)

色々調べた結果、npmでインストールして、それを使うように設定したらできた。


# 手順

## インストール
```
npm install --save react react-dom babel-preset-es2015 babel-preset-react
```

React v0.14でCoreモジュールとDOM関連のものが分離されたらしい。今回はWebアプリをつくるのでreact-domもインストールした。
※ 参考：[React.js v0.14 changes - blog.koba04.com](http://blog.koba04.com/post/2015/09/22/react-js-v014-changes/)

## ホワイトリスト追加
```brnch-config.js
  npm: {
    enabled: true,
    // Whitelist the npm deps to be pulled in as front-end assets.
    // All other deps in package.json will be excluded from the bundle.
    // JSからimportするものはwhitelistに追加する？？
    whitelist: ["phoenix", "phoenix_html", "react", "react-dom"]
  }
```
これがないと、`import React from "react"` でエラーになった。

## presets追加
```brunch-config.js
plugins: {
    babel: {
      presets: ["es2015", "react"], //es2015はbrunchのdefaultだけど、わかりづらいので明示的に指定しておく
      // Do not use ES6 compiler in vendor code
      ignore: [/web\/static\/vendor/]
    }
  },
```

babel6からは自分でどの言語を使うのか指定しないといけないらしい。
[babel6での変更点　Gulp・Webpackの設定 - Qiita](http://qiita.com/kamijin_fanta/items/e8e5fc750b563152bbcf)

brunchはdefaultでes2015を使ってくれるらしいけど、reactだけを指定したらエラーがでたので両方指定してる。

## サーバー再起動
```
mix phoenix.server
```

# おわりに
ホワイトリストとかはいまいちまだよくわかってない。。。
JS界隈、いつのまにかけっこう変わってたり、ライブラリ／フレームワークが多すぎてつらい。


# 参考
[Phoenix v1.1.2 and React.js — Medium](https://medium.com/@diamondgfx/phoenix-v1-1-2-and-react-js-3dbd195a880a#.xe4ce6ej4)
rails consoleでprivate methodを呼ぶ


### <i class="fa fa-smile-o"> 結論から言うと、、


__`Object#send`__を使いましょー！
> つまり、sendはprotectedなメソッドもprivateなメソッドも呼び出せます。
http://ref.xaio.jp/ruby/classes/object/send

### <i class="fa fa-code"></i> ちょっとした説明。


```rb
class Sample
  def foo
    'this is public method'
  end

  private
  def bar
    'this is private method'
  end
end
```

こんなメソッドをコンソールで試したい時、

```zsh
[1] pry(main)> Sample.new.foo
"this is public method"

[2] pry(main)> Sample.new.bar
private method `bar' called for #<Sample:0x007fc166e6ba48>
```

エラーになります。

そんな時は、

```zsh
[3] pry(main)> Sample.new.send(:bar)
"this is private method"
```

こうすれば呼び出せます。
Appium + iOS アプリで起動時に Instruments 周りのエラー

## 環境

- OS X 10.11.2
- Appium App 1.4.13 (Homebrew Cask でインストール)
- XCode 7.1.1
- iOS 8.4 シミュレータ (iPhone 5s)

## 問題

Appium をセットアップして Appium サーバの起動は問題なし．しかしインスペクタを起動しようとすると下記のエラーで起動できない

```
error: Could not pre-launch appium: Error: Instruments crashed on startup
```

iOS アプリよく分かっていないけれど，どうやら下記の部分が分かる範囲では root cause っぽい．

```
[INST STDERR] dyld: could not load inserted library '{path/to/iwd7/InstrumentsShim.dylib}'
```

## 原因

appium が依存している iwd7 モジュールに添付されている InstrumentsShim.dylib に問題がありロードできない．（と，思う．今回は深追いしてない）

## 解決方法

XCode に添付されているほうの Instruments を使う．コマンドラインから起動する場合は `--native-instruments-lib` オプションを付けることで，iwd7 に添付されているものではなくシステムにインストールされているものを利用するようになる．Appium App を使っている場合は，iOS Settings -> Advanced -> 'Use Native Instruments Library' にチェックを入れれば OK．
これで無事起動することを確認．根本原因は iwd7 モジュールにありそうなので，Appium App の依存モジュールがアップデートされるのを待つ．


## Ref

https://github.com/appium/appium/issues/5787
[AndroidStudio]Parseを導入した時に出たエラーの対処法

###やりたい事
Parseを使ってDBを使うアプリを作りたい

###やった事

>とても参考にしたサイト
ParseのAndroidStudioでの使い方（前編）
http://tanajun99.hatenablog.com/entry/2015/03/10/021743

1. 上のサイトに従い、進めていく
2. SDKは https://www.parse.com/docs/downloads ここからダウンロード
3. SDKを解凍し、jarファイルを全て作成したlibsディレクトリに保存
4. あとは手順通り

###出たエラー

```
Error:Execution failed for task
':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: 
 com.android.ide.common.process.ProcessException: 
org.gradle.process.internal.ExecException: Process 
'command 'C:\Program Files\Java\jdk1.8.0_45\bin\java.exe'' 
finished with non-zero exit value 2
```

>救われたサイト
Android Studio 1.3RC1 で finished with non-zero exit value 1
http://feather.cocolog-nifty.com/weblog/android/
**同一ライブラリのバージョン違いなどが指定してあるとこのエラーになりますね。**

という事だったので、見てたところ、やった手順では必要ないものがあることが分かった。

###解決法
libsに入れたjarファイルから

- ParseFacebookUtilsV3-1.10.4（V4も入っているため）
- bolts-tasks-1.3.0（build.gradleに記載したため）

を削除。
ということで無事Parseが導入できたのでした。

###感想
```
Error:Execution failed for task
':app:transformClassesWithDexForDebug'.
```
というエラーはメソッドが多かったりしても出るみたいです。
分かってしまえば簡単な問題だったが、やる気がなくなり手を動かせずに過ごしてしまった。
頭で考えていても分かることは少ない。ひとつひとつ消化し、事実を積み重ねていくことが大事だと思った。

###追記　2016/1/26
公式を見たらgradleから入れられたようです。

公式
空のプロジェクトから作る方法
https://www.parse.com/apps/quickstart#parse_data/mobile/android/native/new

既存のプロジェクトに入れる方法
https://www.parse.com/apps/quickstart#parse_data/mobile/android/native/existing
Go1.6でポインタをcgoの関数へ渡す際に発生するcgoCheckPointerを回避する方法

go1.6 はまだβなので以下の回避方法も変わる可能性があります。(おそらくそのままだと思いますが)

> # そのため、下記の点を注意する必要があります
> 
> - cgoの関数の引数経由以外の方法でGoポインタをCに渡した場合は、そのGoポインタが指すメモリは保護されない
> - cgoの関数から返ってくると保護されていたGoポインタの保護も外れるため、cgoの関数内でGoポインタをどこかに保存して次に呼ばれたcgoの関数内で再利用とかはできない
> - GoポインタへのGoポインタをcgoの関数に渡すのは基本ダメ
>     - 保護されるのは引数で渡されたGoポインタが指す先のみで、その指す先の更に指す先は保護されない
>     - go1.6beta2では、cgo関数呼び出し時のチェックに引っかかって[`cgo argument has Go pointer to Go pointer`](https://github.com/golang/go/blob/efd93a412eb5941d767b70097e93a589747de34f/src/runtime/cgocall.go#L395)というエラーメッセージが表示される 
>     - Cで確保されたメモリへのポインタへのGoポインタならOK。Cで確保されたメモリはGC対象ではないため
> - GoポインタへのGoポインタがダメなのと同じ理由で、Goポインタをフィールドに持つ構造体へのGoポインタをcgoに渡すのも基本ダメ
> 
> http://qiita.com/saturday06/items/84535c61a3328c02032c

どうすれば良いか。

# コードに手をいれない方法

GODEBUG という環境変数に `cgocheck=0` を設定します。

```
export GODEBUG=cgocheck=0
```

例えばいつも使っているプログラムやパッケージが go1.6 をサポートしていないが、どうしても go1.6 を使わざるを得ない場合など。

# コードに手を入れる方法

型を uintptr にする事で、cgoCheckPointer によるポインタチェックを回避出来ます。`unsafe.Pointer` から `uintptr` に変換し、C側には `C.uintptr_t` を経由して渡します。
もちろん本来渡すはずだった引数の型と異なるのでCコンパイラがエラーを出します。そういった場合は呼び出したい関数の wrapper を書く必要があります。

以下、本件を直す方法の一例です。

https://github.com/mattn/go-sqlite3/commit/e969434e25f30ad4d75486b5300808bd4ec29dbd

もちろんここで渡すポインタが解放されてもいいかどうかは呼び出し元が把握しなければなりません。

# 結論

つらい
PSoC 5LP Prototyping KitでUSB-UARTを使う

この記事では，PSoC 5LP Prototyping Kit（CY8CKIT-059）でUSB-UART-Brigeを使う手順を示します．この手順は，Cypressの「KitProg User Guide」に記載されている内容をピックアップしたものです．「[PSoC4でUSB-UART-Bridgeを使うメモ](http://qiita.com/kazuaki_tanaka/items/83685883d0f5b718baaf)」のPSoC 5LP版です．

# 必要なもの

* CY8CKIT-059
* PSoC Creator

![images.jpeg](https://qiita-image-store.s3.amazonaws.com/0/104404/bd1082fe-be85-ae4a-fbc1-b956bcbb36b8.jpeg)

# サンプルプログラムを作ってみる

## プロジェクトの作成

空のプロジェクトを作成し，UARTコンポーネントをおきます．

![スクリーンショット 2016-01-25 16.24.45.png](https://qiita-image-store.s3.amazonaws.com/0/104404/4c6d7549-1102-52b9-29b4-080446cfa38e.png)

## UARTの設定

UARTコンポーネントをダブルクリックして，通信速度を設定します．

![スクリーンショット 2016-01-25 16.26.43.png](https://qiita-image-store.s3.amazonaws.com/0/104404/24ff39cf-bd3b-9c65-48b3-5290bb16182a.png)

## ビルド

一度，プロジェクトをビルドして，必要なソースを生成します．

## ピンの設定

プロジェクト名.cydwr を開いて，ピンアサインを設定します．**図のように設定をしておきます（重要）．**

![スクリーンショット 2016-01-25 16.31.21.png](https://qiita-image-store.s3.amazonaws.com/0/104404/60b9e0ca-671d-1cf2-64f8-2687b0d3103f.png)

| Name | Port | Pin |
|------|------|-----|
| RX_1 | P12[6] | 20 |
| TX_1 | P12[7] | 21 |

## main.c のサンプルプログラム

例えば，以下のようなプログラムを記述してみます．

    int main()
    {
        CyGlobalIntEnable; /* Enable global interrupts. */

        UART_1_Start();
        UART_1_PutString("USB-UART");
        UART_1_PutCRLF(1);
        for(;;)
        {
            uint8 ch = UART_1_GetChar();
            switch(ch){
            case 0:
                /* Nothing */
                break;
            case '?':
                UART_1_PutString("Sample Program. ");
                UART_1_PutCRLF(1);
                break;
            case '!':
                CySoftwareReset();
                break;
            }
        }
    }

## ビルド＆書き込み

ビルドして，ボードに書き込みます．

## ターミナルソフトで接続する

TeraTermなどのターミナルソフトで接続してみます．シリアルポートに接続します．「KitProg」と表示されているポートを選択します．

![スクリーンショット 2016-01-25 16.46.45.png](https://qiita-image-store.s3.amazonaws.com/0/104404/f728f394-ffef-58e8-0a8d-a2dcd2529ac3.png)

通信速度の設定をします．

![スクリーンショット 2016-01-25 16.48.23.png](https://qiita-image-store.s3.amazonaws.com/0/104404/1a41c39a-1065-0f49-f9bf-e833fc1b0fa6.png)

## 実行

実行を確認できます．「!」キーでボードのリセットが行われ，「USB-UART」と表示されます．「?」キーで「Sample Program.」と出力されます．

![スクリーンショット 2016-01-25 16.50.17.png](https://qiita-image-store.s3.amazonaws.com/0/104404/40663bbe-f2ec-1049-a69e-60dc6549b12b.png)


# 参考

UARTコンポーネントでよく使いそうな関数を示します．XXXがコンポーネント名です．

| 関数名 | 説明 | 
|-------|-----|
| void XXX_Start(void) | UARTの通信を開始します |
| uint8 XXX_GetChar(void) | 1文字を受信します |
| uint16 XXX_GetByte(void) | 1バイトを受信します |
| void XXX_PutChar(uint8 txDataByte) | 1文字を送信します |
| void XXX_PutString(const char8 string[]) | 文字列を送信します |
| void XXX_PutCRLF(uint8 txDataByte) | 改行文字を送信します | 
| void XXX_Sleep(void) | スリープモードにします | 
| void XXX_Wakeup(void) | スリープモードから復帰します |
pythonで文字列をintに変換・変換出来るかを確認させる

#Pythonで文字列をint型に変換・変換出来るかを確認させる
Pythonで文字列や数値を文字列、数値に変換したい時に使うのは
文字列に変換したい時はstr(変数)
intに変換したい時はint(変数)

##変換できるかどうかを調べるのは
isdigit(変数)
変数に入っているのが
数字だけであればTrue
数字以外が入っていればFalseを返す
小数点も文字列として扱ってしまうので
1クッションとして別の事をしないとFloat変換は出来ない
BitcoinのハードウェアWallet, TREZORの設定・リカバリ方法など

BTCを保管するハードウェアウォレットのTREZORが届いたので、セットアップなど諸々メモします。

TREZORの詳細については大石さんのブログが詳しいです。

* [完璧に安全なビットコイン保管法-Trezor Wallet | ビットコイン＆ブロックチェーン研究所](http://doublehash.me/trezor-wallet/)

公式マニュアルはこちら。

* [TREZOR User Manual — TREZOR User Manual 1.0 documentation](http://doc.satoshilabs.com/trezor-user/index.html)

## 環境

* Mac - OS X El Capitan 10.11.2
* TREZOR

## 初期セットアップ

1. PCとTREZORをUSB接続。
2. Chromeからmytrezor.comを開く。
3. 下部のDownloadから`trezor-bridge-1.1.2.pkg`をダウンロード。
4. `trezor-bridge-1.1.2.pkg`をインストール。
5. Chromeからmytrezor.comを再度開く。
6. `Welcome to TREZOR Setup!`の画面が表示されるので`Device label`にTREZORの名前を設定して`Continue`を押す。
7. PINコードを設定。
8. TREZORに表示される復旧用の英単語24個(Recovery Seed)を付属のRecovery Seedメモに記録。※ 確認のため24個の英単語が２順表示される。

## リカバリ

Recovery Seedが正しいことを確認するために、初期セットアップ後すぐにリカバリを試しておく。
こうすることで、誤ったRecovery Seedを保存して、万が一の時にリカバリができないという事態を防ぐことができる。

*端末情報の削除*

1. mytrezor.comの左側に表示されている自分のTREZORを押す。
2. Advancedのタブを開く。
3. `Wipe device`を押す。
4. TREZORの右側のボタン（Confirm）を押す。
5. PCからTREZORを抜く。
6. `Forget(recommended)`を押す。

*リカバリ*

1. PCとTREZORをUSB接続。
2. Chromeからmytrezor.comを開く。
3. 右側に表示されている`TREZOR Recovery`を押す。
4. `Device label`を入力して`Continue`を押す。
5. PINコードを設定。
6. TREZORに表示された番号のRecovery Seedを順に入力していく。
7. PINコードを入力。


## ファームウェアの更新

mytrezor.comの上部に`New TREZOR firmware is available. Upgrade for the newest features and bug fixes.`と表示されている場合、最新のTREZORのファームウェアを利用することができる。

1. mytrezor.com上の`Show details`を押す。
2. TREZORをPCから抜く。
3. TREZORの表面にある２つのボタンを押したままPCに再接続。
4. mytrezor.comの表示が`Do you want to update the device firmware?`に変わるので`Yes, Update`を押す。
5. TREZORデバイス上に`Install new firmware?`と表示されるので右側のボタンを押す。

※ INSTALLING ... Please waitから進まない場合は、一度PCからTREZORを抜いて、再度TREZOR表面にある２つのボタンを押したままPCに再接続する。
※ 現時点(2015/01/25 16:00)時点の最新Verは1.3.4

## パスフレーズ暗号

パスフレーズ暗号を有効にするウォレットが暗号化されて、使用前にパスフレーズを聞かれるようになる。安全にTREZORを利用するためには必須の設定。
※ パスフレーズを忘れると、二度と残高を利用できなくなるので注意。

*有効化*

1. mytrezor.comの左側に表示されている自分のTREZORを押す。
2. Advancedのタブを開く。
3. `Passphrase`にある`OK, I understand`にチェック。
4. `Enable passphrase encryption`を押す。
5. Trezorの右側のボタン(Confirm)を押す。
6. PINコードを入力。
7. PCからTREZORを抜く。
8. PCとTREZORをUSB接続。
9. PINコードを入力。
10. パスフレーズを設定。

*無効化*

1. mytrezor.comの左側に表示されている自分のTREZORを押す。
2. Advancedのタブを開く。
3. `Passphrase`にある`OK, I understand`にチェック。
4. `Disable passphrase encryption`を押す。
5. Trezorの右側のボタン(Confirm)を押す。
6. PCからTREZORを抜く。
7. PCとTREZORをUSB接続。
8. PINコードを入力。
Swift2.1のCoreDataでEntityのAttributeが２つ以上あるときのAppDelegate

Swift2.1でCoreDataを使ったプロジェクトを作成したのですが、EntityのAttributeが１つの時は動作するのですが、２つ以上になると実行時エラーになってしまったのでメモしておきます。
### 環境
Swift2.1.1
XCode7.2

プロジェクト作成時にCoreDataにチェックして自動生成されるAppDelegate.swiftを編集します。

61行目の
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {}
この中のtry文を修正

修正前
```try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)
```

修正後
```try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])
```
jasmineでページロード時に勝手にテストを開始させないようにする

#　前置き
jasmineはとっても便利！
とってもテストしやすいし、なによりテストが楽しくなる！！
といいことづくしですが、ページロードする度に勝手にテストを実行されてはせっかくの楽しいテストが時間かかりすぎて捗りません。なので、自動で実行しないようにしてみました。

## どこをいじったの？
えっと、まずnpmでjasmineを入れたのですが、なんか階層が深い・・・・。
とりあえずこれをいじりました。

```bash
/node_modules/jasmine/node_modules/jasmine-core/lib/jasmine-core/boot.js
```

## これを、こうです

**変更前**

```js
  /**
   * ## Execution
   *
   * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded.
   */
  var currentWindowOnload = window.onload;

  window.onload = function() {
    if (currentWindowOnload) {
      currentWindowOnload();
    }
    htmlReporter.initialize();
    env.execute();
  };
```

**変更後**

```js
  /**
   * ## Execution
   *
   * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded.
   */
   var currentWindowOnload = window.onload;

  window.onload = function() {
    if (currentWindowOnload) {
      currentWindowOnload();
    }
    htmlReporter.initialize();
    if (window.location.search === '') {
      location.href = '/?spec=0';
    } else {
      env.execute();
    }
  };
```

## どうなるの？
こうしておくと、ページロードと同時にテストが始まらず、とりあえずテストリストのみが表示されるようになります。後は、実行したいテストのspecをクリックすればいいですね！

## 種明かし
パラメータにspec=でどのspecを実行するか？というパラメータを渡すことが出来ます。で、specは普通タイトル(でいいのかな？)を指定するようになってますが、数字を指定すると指定した数字番目のspecが実行されるようになります。specは１番目から順番に並んでるのでspec=0を指定してやることで0番目のspecを実行する(何も実行しない)を実現しています。
IE11で擬似要素をtable-cellにすると文字スタイルが反映されなくなる問題(未解決)


擬似要素にvertical-alignを指定したい関係でtable-cellを指定したところ現象を確認。
IE11ではなんでかフォントサイズとか文字色が反映されない。IE9とかIE8では大丈夫なのに。

## 概要

```:sass
.outer {
    display:table;
}
.outer:before {
    content: "FUGA";
    display:table-cell;
    color:red;          // 反映されない
    font-size:36px;     // 反映されない
}
```
## 確認DEMO

http://jsdo.it/yd_niku/SlmH

## Chrome
![correct.png](https://qiita-image-store.s3.amazonaws.com/0/3516/e5b84b2b-6b22-9946-4111-f9d039e8d128.png)

## IE11
![wrong.png](https://qiita-image-store.s3.amazonaws.com/0/3516/90e7b705-d216-d742-dce8-e5946c3d3db8.png)

直し方がわからないけどとりいそぎ再現したところまで。
さくらVPSにJenkinsをインストール



```
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins
```

sudo vi /etc/sysconfig/jenkins

```/etc/sysconfig/jenkins
JENKINS_PORT=8081
JENKINS_AJP_PORT=8010
JENKINS_ARGS="--prefix=/jenkins"
```

Jenkins起動
sudo service jenkins start

Jenkinsの常駐化
sudo chkconfig jekins on

http://xxx.xxx.xxx.xxx/jenkins
でアクセスするために/etc/httpd/conf/http.confを編集

```/etc/httpd/conf/httpd.conf
<Location /jenkins>
    ProxyPass http://localhost:8081/jenkins
</Location>
```

httpdを再起動

```
sudo /etc/init.d/httpd restart
```
pygogoを使ってログをjsonで出す。

```
import pygogo as gogo
formatter = gogo.formatters.structured_formatter
logger = gogo.Gogo('struct', low_formatter=formatter).get_logger(foo="barbar")

logger.debug('bought', extra={"type": "apple", "price": 250, "color": "red"})
#=> {"name": "struct.base", "level": "DEBUG", "color": "red", "price": 250, "msecs": 587.5449180603027, "time": "2016-01-25 16:02:24", "message": "bought", "foo": "barbar", "type": "apple"}

logger.debug('bought', extra={"type": "PC", "price": 100000, "memory": "16GB"})
#=>{"name": "struct.base", "level": "DEBUG", "price": 100000, "memory": "16GB", "msecs": 587.9619121551514, "time": "2016-01-25 16:02:24", "message": "bought", "foo": "barbar", "type": "PC"}
```

コンストラクタの引数に`low_level`を渡して上げると出力制御ができるっぽい。

```
import pygogo as gogo
formatter = gogo.formatters.structured_formatter
logger = gogo.Gogo('struct', low_formatter=formatter, low_level='info').get_logger(foo="barbar")

logger.debug('bought', extra={"type": "apple", "price": 250, "color": "red"})
#=>出ない
logger.info('bought', extra={"type": "PC", "price": 100000, "memory": "16GB"})
#=>出る
```