OmniAICreator/Qiita-1.07M huggingface dataset:
Google Chrome拡張でContent Scriptsを注入するタイミングを制御


## 翻訳
[manifest.json](https://developer.chrome.com/extensions/content_scripts#registration)の`run_at`プロパティの説明の翻訳しました。

### run_atプロパティ
必須ではありません。`js`プロパティのファイルを注入するタイミングを制御します。
設定値は次の三つです

- document_start
- document_end
- document_idle（初期値）

### 値ごとの注入のタイミング
#### document_start
`css`プロパティのファイルの読込後、DOMが構築されscriptsが実行される前です。

#### document_end
DOMが構築された直後、画像やフレームなどのサブリソースが読込まれる前です。

#### document_idle
ブラウザが決定します。`document_end`から、[window.onload](https://developer.mozilla.org/ja/docs/Web/API/GlobalEventHandlers/onload)イベントまでの間の任意のタイミングです。
実際のタイミングはdocumentの複雑さによって変わります。
また、documentの読込みに掛かる時間、documentを読込みに最適化しているかにも左右されます。

### document_idleとwindow.onloadイベントに関する注意
`document_idle`では、`content scripts`が`window.onload`イベントを受信しない可能性があります。イベント発火後に`content scripts`を実行しているかもしれません。

一般に、`document_idle`では、`window.onload`イベントを待つ必要はありません。DOM構築完了後の実行を保証しています。

もし、厳密に`window.onload`の後に`content scripts`を実行するには、イベントがすでに発火したかチェックします。[document.readyState](https://developer.mozilla.org/ja/docs/Web/API/Document/readyState)プロパティを使います。

## 使い分け
基本的に`document_idle`で十分しょう。初期値なので、`run_at`プロパティは設定不要です。

巨大な画像を読み込むことなど、サブリソースの読込みに時間が掛かるとわかっている場合は、`document_end`を設定します。
サブリソースの読込み前に実行されます。ユーザーの待ち時間が気持ち減ります。

`document_start`は、どういうときに使うのでしょうか？
知っている人がいたら教えてください。
TypeScriptとbrowserifyの双方でrequire()を通す書き方

node_modules/{{name}}に入ったモジュールの型をd.tsで定義しつつ、browserifyが通る書き方。

* import nantoka = require('{{name}}') する。
* d.tsでは、declare module "{{name}}" する(クオート注意)。
* ///<reference〜 で d.tsを追加する。

コードでは、例えばこんな感じ。

```js:node_modules/mymodule/dist/nantoka.js
// npm install mymoduleでインストールされたJavaScript
```

```ts:dokka/mymodule.d.ts
declare module MyModuleInTypeScript { // 好きな名前
   ...
}
declare module "mymodule" { // ここが重要！この名前を「node_modules/{{name}}に合わせる。ダブルクオートに注意。
  export = MyModuleInTypeScript; // exportする対象が何かは場合による
}
```

```ts:main.ts
/// <reference path="../dokka/mymodule.d.ts" />
import mymodule = require('mymodule');
```

# モジュールの解決
 https://typescript.codeplex.com/wikipage?title=Modules%20in%20TypeScript より
> The first is by finding a .ts file named by an import x = require(...); declaration. That file should be an implementation file with top-level import or export declarations.
> The second is by finding a .d.ts file, similar to above, except that instead of being an implementation file, it's a declaration file (also with top-level import or export declarations).
> The final way is by seeing an "ambient external module declaration", where we 'declare' a module with a matching quoted name.
package名のみからadb shell am start -nする

# adb am start -n [package]/[classname]

adb am startは便利だが、パッケージ名の指定のみでは起動ができない。
-n オプションで起動には起動する対象のActivityの名前を取得する必要がある。
このActivityの名前を、端末から取得してinteractiveに指定のパッケージを起動するコマンドを書いた。

# launchapp

adb shell pm dumpが使える端末であれば、パッケージ名から起動できるscriptをかける。

- [launchapp](https://gist.github.com/mattak/c3b39d1270e65e041b7a)

## 使い方.

1) 何も指定せずにpecoにまかせて起動

```bash
$ launchapp # interactive launch with peco
```

2) 引数にgrepできるパッケージ名の一部を渡して起動。

```bash
$ launchapp naver # launch with grep word
```

# 解説

## adb shell list package

端末にインストール済みのパッケージ名の取得はこれで行える。

```bash
$ adb shell pm list package
package:com.dmm.app.store
package:com.android.calendar
package:jp.naver.line.android
package:jp.co.katakata_game.BallPuzzle001
package:com.android.backupconfirm
package:com.eoruzea.money_defense
package:com.android.packageinstaller
package:com.android.providers.userdictionary
package:com.android.providers.downloads.ui
package:com.android.externalstorage
package:com.google.android.launcher
package:com.square_enix.kairisei_MA
```

## adb shell pm dump [package]

古いバージョンのOSでは利用できないが、dumpコマンドが利用できるとパッケージの詳細情報が取得できる。

```bash
$ adb shell pm dump com.android.calendar
...
    Non-Data Actions:
        android.intent.action.MAIN:
          1c400389 com.android.calendar/.AllInOneActivity filter 3a87944f
            Action: "android.intent.action.MAIN"
            Category: "android.intent.category.DEFAULT"
            Category: "android.intent.category.LAUNCHER"
            Category: "android.intent.category.APP_CALENDAR"
        android.intent.action.VIEW:
          d4b6f8e com.android.calendar/.EventInfoActivity filter 1cad70e5
            Action: "android.intent.action.VIEW"
            Category: "android.intent.category.DEFAULT"
        android.intent.action.SEARCH:
          1cc443bc com.android.calendar/.SearchActivity filter 21c3e586
            Action: "android.intent.action.SEARCH"
```

ここから、com.android.calendar/.AllInOneActivity の部分を抜き出せば起動時アプリが指定できる。

# 参考

installapp / uninstallappと組み合わせると更にいい感じ

- [Android開発を爆速にする10のコマンドラインスクリプト](http://techlife.cookpad.com/entry/2014/12/17/182050)
[Rails4.x] simple_formを使って、create（登録）とupdate（編集）で同じformを使う際の注意

simple_formを使っています。

同じformを使ってcreateとupdateをすることが多いと思います。

# 症状

updateを叩いたつもりが、こんなエラーに出くわしました。

```rb
Routing Error No route matches [PATCH] “/hoge"
```

ちなみにroutingは

```rb:config/routes.rb
POST     /hoge(.:format)      hoge#create
PATCH    /hoge/:id(.:format)  hoge#update
```

当然両者で異なるわけですが、url的にはcreateの方を見ている？

＃原因

```erb
<%= simple_form_for(@hoge, :url => hoges_path, :html => {:id => 'hoge_form', :multiport => true}) do |f| %>
```

このurlがダメです。

なので、

```erb
<%= simple_form_for(@hoge, :html => {:id => 'hoge_form', :multiport => true}) do |f| %>
```

削除して解決！
Raspberry Pi遊んでみた (Lチカ編)

# この記事のゴール
前回([Raspberry Pi遊んでみた (基本設定編)](http://qiita.com/IsaoTakahashi/items/7c44d5f1e8467f367995))の続き。
ラズパイ使って、ブレッドボード上のLEDをチカチカさせる。

メカトロニクス的に言うと、「アクチュエータにちゃんと動力が行ってるか確認するテスト」？
LED光らせられたら、あとはモータ動かしたり音鳴らしたりするのも似たようなもんだということが言いたいだけ。


# ブレッドボード?
[ブレッドボード - Wikipedia](http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AC%E3%83%83%E3%83%89%E3%83%9C%E3%83%BC%E3%83%89)
こんなの。　
![breadboard_skitch.png](https://qiita-image-store.s3.amazonaws.com/0/72808/9b913400-79b5-983d-7ab8-2c8d54afc5f4.png)

## 何に使うの?
素子をブッ刺したりして、回路を組む。
![kairo.png](https://qiita-image-store.s3.amazonaws.com/0/72808/c4249631-0697-73c6-c96e-4464f48a859a.png)

ワニ口クリップでチマチマ素子をつなげるより、大分スマート。
ジャンパワイヤをくるくる巻くのはホントはよくないので、
大体の配線図が決まったら、適した長さのワイヤに変更するのオススメ。
_ジャンパワイヤ : (写真の青とか黒の線。単なる銅線)_


# やったこと

## とりあえず必要な回路を組む
↓みたいに配線。(左側半分がラズパイで、右側がブレッドボード。)
回路図は[fritzing](http://fritzing.org/home/)で描き描き。
![led_circuit.png](https://qiita-image-store.s3.amazonaws.com/0/72808/68d78067-f51e-1d16-c78d-193ffd123726.png)


###　回路の説明
#### Raspberry Pi側
Raspberry Piには[GPIO](http://ja.wikipedia.org/wiki/GPIO)と呼ばれる汎用インタフェースがあり、
それを使うことで、

- Raspberry Piに対する入力
- Raspberry Piからの出力

を操作することが出来る。
![gpio.png](https://qiita-image-store.s3.amazonaws.com/0/72808/f779abcf-b398-49d6-9ea3-b26f5b21d730.png)
今回は、#17のピンを出力用に使用。(#{数字}のピンは、入出力どちらにも使える)
GNDは、回路全体の基準電位点(簡単に言うと、0V地点)なので、ブレッドボードに繋げておく。



#### ブレッドボード側
抵抗とLEDを繋げる。
![led_board.png](https://qiita-image-store.s3.amazonaws.com/0/72808/2622ae96-9bc3-2470-9b49-d5345a2e7172.png)
この時点で、電池の+側を赤い線に、-側を青い線に繋ぐことで、LEDが光るはず。
(__あんまり高い電圧の電池を使わないこと。単三一本で十分かと。__)

回路を組む際の注意点としては、

- LEDには極性(+/-の向き)があるので、+側(アノード)を抵抗に接続して、-側(カソード)をGNDに接続する。
    - 図を見ると抵抗とLEDのアノードが離れてるが、前述のブレッドボードの仕組みにより、内部で電気的には繋がっている。
- 抵抗には極性がないので、どっちでもOK。

## とりあえず必要なコマンドを叩く
```bash
# 17番ピンを使うことを宣言
sudo echo 17 > /sys/class/gpio/export

# 17番ピンをOUT(出力モード)に設定
sudo echo out > /sys/class/gpio/gpio17/direction

# 17番ピンに1(High)を出力
sudo echo 1 > /sys/class/gpio/gpio17/value
```
これで光る。
`/sys/class/gpio/gpio17/value`に0(Low)を入れると消灯する。


## コマンドだと味気ないので、スクリプト書いて点滅させる
今回はrubyのスクリプトでやってみる。
Raspbianにはデフォルトでrubyが入ってるので、すんなり使える。
組み込み用とかじゃなくて、フルセットを使えるのがRaspberry Piの良いところだなー。


pi_piperというgemを使うと、大分すっきり書ける。

```rb
require 'pi_piper'

# このinitializeで、17番ピンがoutモードになる
led = PiPiper::Pin.new pin:17, direction: :out

# 0.5秒間隔で点滅する動作を5回繰り返す
5.times do
  led.on
  sleep 0.5
  led.off
  sleep 0.5
end
```

## 最終的には、こんな感じで動いた。
ケースを外さないとジャンパワイヤをGPIOのピンに刺せないので、剥き出し感満載。
![led.jpeg](https://qiita-image-store.s3.amazonaws.com/0/72808/fc613ccc-f25b-6ebe-ffed-a0f4854009af.jpeg)
実際には緑LEDが点滅しております。

# おわりに
大げさに言うと、__Raspberry Piから外部電子機器への出力操作__ができた。
次は、スイッチを用いて「Raspberry Piへの入力操作」を行う。
【Specs2】DataTables,Tablesのススメ

Specs2のDataTablesは複数の引数パラメータのパターンでテストしたいなんて時に便利です。
サンプルは以下となります。

```PrefectureListSpec.scala
class PrefectureListSpec
  extends Specification
  with DataTables {

  "サンプルのリストを取得する" in {
    "offset" | "limit" | "size" |
      0 ! 0 ! 0 |
      0 ! 2 ! 2 |
      0 ! 3 ! 3 |
      0 ! 4 ! 3 |
      1 ! 0 ! 0 |
      1 ! 2 ! 2 |
      1 ! 3 ! 2 |
      2 ! 1 ! 1 |
      3 ! 1 ! 0 |> { (offset, limit, size) =>
      val list = PrefectureRepository.listBy(offset, limit)
      list.size must_== size
    }
  }
}
```

ただし、DataTablesはString型使う時は!使うとコンパイルが通らなくなります。
代わりに!!を使う必要があります。
理由はよく分かりませんが、内部衝突してしまうとのこと。
なのでその場合はTablesトレイトをミックスインすると!でもコンパイルが通ります。
サンプルは以下です。

```PrefectureSpec.scala
class PrefectureSpec
  extends Specification
  with Tables {

  "サンプルを登録する" in {
    "識別子" | "都道府県" | "エイリアス" |
      1 ! "東京" ! "tokyo" |
      2 ! "大阪" ! "osaka" |> { (identifier: Int, prefecture: String, alias: String) =>
      PrefectureRepository.store(identifier, prefecture, alias)
      PrefectureRepository.resolveBy(identifier) must_== Prefecture(identifier, prefecture, alias)
    }
  }
}
```

だったら全部Tablesでいいじゃん。って思いますよね。はい。
私も明確な理由を見つけられませんが、Tablesの中身が

```Tables.scala
trait Tables extends DataTables with NoBangExamples
```

といった感じでNoBangExamplesをミックスインされているんで、String型が不要な時はDataTablesを使おうかといった感じにしてます。。
文字列が正規表現として有効か確認する

`preg_match` の返り値で判断。

```php
function is_regexp_string($pattern) {
    return @preg_match($pattern, '') !== false;
}
```

[PHP: preg_match - Manual](http://php.net/manual/ja/function.preg-match.php#refsect1-function.preg-match-returnvalues)
【Safari】画像にborder-radiusかけたら端がにじむ

#現象
[border-radiusで、画像四隅をCSSで角丸にすると、画像右側のみ1pxかすれて表示されてしまうのですが... - W3Q](http://w3q.jp/t/7973)を見て、[デモ](http://jsrun.it/Ituki/zUQR)を作ってみたらSafari8だけでなく7でも画像がにじんだ。

デモ：[【Safari】画像にborder-radiusかけたら端がにじむ - js do it](http://jsrun.it/Ituki/zUQR)

#対策
画像ではなく、外の要素にborder-radiusをかける
three.js でオブジェクトを透過すると奥にあるオブジェクトも透過される

タイトルの問題が起きた。

レンダリングされる順番が早いオブジェクトが手前にあると、
奥にあるオブジェクトがレンダリングされる前の状況(要するに奥にオブジェクトがない)
でオブジェクトを透過してレンダリングするのが原因ぽい(ちゃんと調べる)。

いろいろ解決方法があるみたいだが、r71で追加された
`Object3D`の [`renderOrder`プロパティ](https://github.com/mrdoob/three.js/blob/eee231960882f6f3b6113405f524956145148146/src/core/Object3D.js#L71)でレンダリングの順番を指定するのが
よい。と思う。

このプロパティはデフォルト `0` なので、透過させるオブジェクトに0より大きい値を指定すれば解決。
ファイルアップロードのファイルサイズチェック

ファイルをアップロードする時の最大のファイルサイズってのは実際のところ、エラーチェックできるんだろうか？？

```php:php.ini
upload_max_filesize = 2M
```

php.ini にこんな風に設定されているとして、２Mを超えるようなファイルをpostすると、もうそれはプログラム側ではエラー検知できないような気がするんですよね。

```php
filesize($_FILES["file"]["tmp_name"])
```

ファイルサイズを調べるって言ったって、この`$_FILES`に値が入ってこない訳でしょ。

* * *

。。。と思ったのだが、その後コメントをもらっていろいろテストしてみたところ、間違っていたので修正する。

# 書き直し

上記のソースは `$_FILES["file"]["tmp_name"]` のファイルサイズを取得しようとしている訳で、そもそもファイルサイズ超過の時は `$_FILES["file"]["tmp_name"]` が空なのだ（汗

出る訳がない。

ということで

```php
$_FILES["file"]["size"]
```

を使う。それ以前に

```php
$_FILES["file"]["error"]
```

も使うべきだろう。これが1だったらphp.iniの設定値超過。2だったらhiddenで指定したMAX_FILE_SIZE超過だ。
ちなみにファイルを選択しないでsubmitすると4になる。

2Mというのは、 2 x 1024 x 1024 = 2097152 バイトだ。
なので、フォームには

```html
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="2097152">
<input type="file" name="file" id="file">
<input type="submit">
</form>
```

としておく。php.iniはいじれないレンサバだったら .htaccessに

```php
php_value upload_max_filesize 2M
```

としておく。
後は好きなようにエラー処理を書けばよい。


```php
if ($_FILES["csv"]["error"] !== '0') {
	$error[] = "ファイルアップロードに失敗しました。";
}
```

じゃあ問題はなんだろう。ファイルサイズが大きくて、**post_max_size** をも超えてしまうと `$_FILES` も `$_POST` も何も返さないってことだろう。


```php:php.ini
upload_max_filesize = 2M
```

であり、しかも


```php:php.ini
post_max_size = 2M
```

で `error_reporting(0);` であったりなんかすると、もう何もわからない。(笑

つまり、**upload_max_filesize** と **post_max_size** を同じサイズにしたら絶対だめだ。
もちろんここで **memory_limit** が2Mだっりしてもエラーだが、さすがにそれくらいは忘れないだろう。


jQueryでやる場合は以下。古いIEでは動かない。

```html
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<input type="submit">
```


```js
$('#file').on("change", function() {
	var file = $(this).prop('files')[0];
	alert(file.name);
	alert(file.type);
	alert(file.size);
});
```
Androidでプッシュ通知が来たタイミングでhogehogeする

#はじめに
電話の着信と同じように、プッシュ通知取得時(端末にインストールされているすべてのアプリの通知)の挙動をアプリ側でハンドリングできないか調査したので覚え書きです。

#従来のPermissionとは違い、ユーザーの明示的な設定変更が必要
"NotificationListenerService"を使用することで、すべてのアプリに来たプッシュ通知を
通知が来たタイミングで取得する事ができます。
ただし、従来のパーミッションモデルとは違いユーザー自身が、明示的に設定を変更する必要があります。

>NotificationListenerService
>http://developer.android.com/reference/android/service/notification/NotificationListenerService.html

#具体的に...こんな感じの設定が必要。(Onにしようとするとユーザーにセキュリティのリスクを感じさせるような長い(怖い?)メッセージが表示されます)
![notification_system.png](https://qiita-image-store.s3.amazonaws.com/0/43766/47d9e8d9-e6f8-7ebc-42fa-bae8547cecda.png)

#使い方
NotificationListenerServiceをextendsしたクラスを作成した後、
onNotificationPostedの中でnotificationを通知した際の処理を書くだけでOK.

public class NLService extends NotificationListenerService {

    private String TAG = this.getClass().getSimpleName();

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onNotificationPosted(StatusBarNotification sbn) {
        Intent i = new  Intent("com.example.NOTIFICATION_LISTENER_SERVICE_DEMO");
        i.putExtra("notification_msg",""
                + "ID :" + sbn.getId() + "\n"
                + "Txt :" + sbn.getNotification().tickerText + "\n"
                + "Pkg :" + sbn.getPackageName() + "\n"
                + "Tim :" + sbn.getPostTime() + "\n"
                + "\n");
        i.putExtra("getNotification",sbn.getNotification().tickerText);
        sendBroadcast(i);
    }
}

#おしまい
また通知の中身自体を取得する事ができるため、悪用されると、端末に来た通知を
すべてサーバー送信+収集するようなアプリケーションが容易に作られてしまうので、
セキュリティリスクに対するアプリユーザーの理解が必要です。

#demo
https://github.com/oggata/NotificationListenerServiceDemo
Facebookのcomment boxの設置でハマった

Facebookの[comment plugins](https://developers.facebook.com/docs/plugins/comments)を使ってブログ記事などにコメントフォームをつけることができる。

実際に設置するとこういう表示になるはずなんだけど、

![スクリーンショット 2015-03-26 17.55.50.png](https://qiita-image-store.s3.amazonaws.com/0/13609/5d393092-883b-bf03-78b8-b77ac547420a.png)

なんどやっても下図のように意図しない表示になった。

![スクリーンショット 2015-03-26 17.55.07.png](https://qiita-image-store.s3.amazonaws.com/0/13609/781644a9-f1d1-06d3-2eb2-54772156ce0b.png)

SDKがちゃんと読み込まれてないのか〜app IDが間違ってるのか〜とか色々疑ったんだけど、原因は動的に変更していたdata-hrefのパラメータにURLがセットされていないだけだった。

```html
<div class="fb-comments" data-href="" data-width="100%" data-numposts="5" data-colorscheme="light"></div>
```

パラメータがちゃんと設定されていないなら間違ってるぞばかって言ってくれ...思わせぶりなフォームを表示するのはやめてくれ...その気になっちゃう
CoreGraphicsの影（シャドウ）はtransformの影響を受けない


なんてこった。

https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_shadows/dq_shadows.html

> The shadow-drawing convention is not affected by the current transformation matrix.

## 一応検証した

* Playground

```swift:
import UIKit

func Test(scale: CGFloat) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(50 * scale, 50 * scale), false, 0)
    
    let ctx = UIGraphicsGetCurrentContext()
    CGContextScaleCTM(ctx, scale, scale)
    CGContextSetShadowWithColor(ctx, CGSizeMake(0, 2), 3, UIColor.blackColor().CGColor)
    
    UIColor.redColor().set()
    UIRectFill(CGRectMake(0, 0, 50, 50).rectByInsetting(dx: 10, dy: 10))
    
    let img = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return img
}
```

![スクリーンショット 2015-03-26 17.52.02.png](https://qiita-image-store.s3.amazonaws.com/0/31347/92d2e1df-0a42-b478-d42e-1827dfc7625e.png "スクリーンショット 2015-03-26 17.52.02.png")

## 経緯

CoreGraphicsでの描画コードがすでに有って、サムネイル画像を作るために`CGContextScaleCTM`でスケール値を設定したのですが、描画した結果を見てみたところ影のサイズがおかしかったので疑問に思って調べたら、影響受けないってモロに書いてありましたorz...

サムネイルを作りたければ等倍でレンダリングしたものを縮小転送してやるしか無さそうですが、パフォーマンス悪そう...
sjisのcsvをfgetcsvで処理

phpのfgetcsv関数はとても便利なものだが、元のcsvがsjisだったりすると、かなりはまるので注意が必要だ。

> fgetcsv 文字化け

で検索するといろいろヒットする。
例えば、以下のようにすればよいとする例もあるが、

```php
setlocale(LC_ALL, 'ja_JP.Shift_JIS');
```

これは、サーバーによっては全く効き目がない場合もある。
ということで、とりあえず

```php
setlocale(LC_ALL, 'ja_JP.UTF-8');
```

として、sjisのcsvを一旦utf-8に変換することを考えた方が賢明だ。

以下のようなアップロードフォームからcsvが選択されるとして、


```html
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="csv" id="csv">
<input type="submit">
```

こんな感じ。


```php
$csv = $_FILES["csv"]["tmp_name"];
$buffer = mb_convert_encoding(file_get_contents($csv), "UTF-8", "sjis-win");
$fp = tmpfile();
fwrite($fp, $buffer);
rewind($fp);

$list = array();
while (($data = fgetcsv($fp, 0, ",")) !== FALSE) {
	$list[] = $data;
}
fclose($fp);
```

こんなファイル丸ごと変数に入れて文字コード変換とか、大丈夫なの？って話もあるが、
実際、やってみると、700KBくらいのCSVを処理するのに15MBくらいメモリーを使う。

ということで、CSV変換してくれとか頼まれたら、

- 文字コードはsjisか？
- 変換するファイルのサイズはどれくらいか
- サーバーのphpのメモリーはどうか？

あたりを事前に押さえておかないと大変なことになる。
C++　デストラクタをデフォルトで定義する。

デストラクタについて、なるべくデフォルト定義とする。
解放が必要な物はラッパーにしておく。

```
class A
{
public:
    ~A() = default;  //<< デストラクタを　デフォルト定義

public:
    std::unique_ptr<Mix>  _mix:  //<<Mixクラスの解放は自身に行わせる。
}
```

分かりやすくなって、いいんじゃないでしょうか。
Proxy環境下でnw-gypが動かない問題（.npmrcじゃなくて環境変数見てるよ）

タイトルで結論が出ている件

# 環境

Windows7 , Visual Studio 2013, node.js 0.12

# 結論

npm config listで確認してもちゃんとProxyの設定はされているし、なんでだろうと思ったら、

環境変数のhttp_proxyを見てたようです・・・

set http_proxy=http://hoge.hoge:8080

で解決しました。
[Android] Butter Knife で Spinner の選択イベントを取得する


[Butter Knife の公式ページ](http://jakewharton.github.io/butterknife/) には明記してなかったけど、次のように書いてみたら出来た。

> 今回は Butter Knfie `6.1.0` を使用

```java
@OnItemSelected(R.id.hogeSpinner)
public void onItemSelectedHogeSpinner(Spinner spinner) {

    // リストの何番目が選択されたか
    int position = spinner.getSelectedItemPosition();
    // 選択されたアイテム名
    String item = (String)spinner.getSelectedItem();

	//..
}
```

ちなみに Butter Knife は次のようなイベントが取れるので、積極的に活用していきたいところ！

![スクリーンショット 2015-03-26 17.35.23.png](https://qiita-image-store.s3.amazonaws.com/0/35733/03609830-66bb-b3f7-a8ff-6fffbb0b3ba0.png "スクリーンショット 2015-03-26 17.35.23.png")
Team IDとは違ったApp ID Prefixを指定する方法

Xcodeのプロジェクトの設定でTARGETSからアプリを選択し、「General→Identity→Team」を「None」にする。
あとはそのアプリ用のApp ID Prefixを指定したプロビジョニングプロファイルを指定して、Archive作業などを行う。

最近は、Team ID＝App ID Prefixとなっていて、その値も自動的に割り当てられるので、これが別々になるということ自体がレアケースになるとは思います。
過去にはアプリごとにApp ID Prefixを設定できていた時代があり、その頃のアプリをリリースするときにはこのような措置が必要になります。

もはやこれは歴史的経緯によってクソ古いアプリを修正してリリースすることになるときくらいしか役に立たない情報であるとは思いますがもしかしたら救われることがあるかもしれないので残しておきます。

ちなみに、Teamが設定されている場合は、なんか勝手に「XC:XXX」みたいなプロビジョニングプロファイルが使用されるようになったりしました。
で、keychainへのアクセスが変わるけどいいのかみたいな警告が出る。
そのままやると以前のアプリでkeychainに書き込んだデータが参照できなくてしぬ。
Firefox OSでゲームアプリを動かしてみる！～ PHASERを使ってゲームアプリを動かしてみた （その３）～

# Firefox OSでゲームアプリを動かしてみる！～ PHASERを使ってゲームアプリを動かしてみた （その３）～

[前回](http://qiita.com/onaona/items/9aaeb93f17869e02725f)までで画面サイズの対応をして、[Fx0](http://au-fx.kddi.com/products/)でもゲームとして見れる画面になりました。

こんなかんじですね。
![invaders-third.gif](https://qiita-image-store.s3.amazonaws.com/0/70507/07006feb-1fdb-a4a1-0095-1a8952e52cc0.gif)

## タップ可能にする
元々、この[INVADERS](http://phaser.io/examples/v2/games/invaders)のサンプルはキーボードで操作するようになっているので、
今回はこれをタップで操作できるようにしていきます。

[PHASER](http://phaser.io/)の[サンプル](http://phaser.io/examples)の中に[Multi Touch](http://phaser.io/examples/v2/input/multi-touch)というのがあり、
これをFx0のブラウザで開いてタップすると反応するので、タップの操作についてはこれを参考にしてみます。
![2015-03-26_125105.png](https://qiita-image-store.s3.amazonaws.com/0/70507/d0e52d3b-e443-ac94-e22f-839a04249565.png)

サンプルソースはこちらにあります。
phaser-examples-master/examples/input/multi touch.js

サンプルのコメントを見ると、2つのポイントタップはデフォルトで入っているようす。

```js:multitouch.js

    //  By default Phaser only starts 2 pointers (enough for 2 fingers at once)

```


今回は1ポイントだけタップできればよいので、game.input.pointer1を使ってタップ操作を対応しました。
[game.input.pointer1のクラスのAPI](http://phaser.io/docs/Phaser.Pointer.html) を見るとタップ操作を検出するメソッド等があって、簡単に実装することができました。

修正した箇所は以下になります。
**invaders.js**

<pre><code class="diff">
@@ -95,9 +95,6 @@ function create() {
     explosions.createMultiple(30, 'kaboom');
     explosions.forEach(setupInvader, this);
 
-    //  And some controls to play the game with
-    cursors = game.input.keyboard.createCursorKeys();
-    fireButton = game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR);
     
 }
 
@@ -149,17 +146,19 @@ function update() {
         //  Reset the player, then check for movement keys
         player.body.velocity.setTo(0, 0);
 
-        if (cursors.left.isDown)
+        // タップしたとき
+        if (game.input.pointer1.isDown)
         {
-            player.body.velocity.x = -200;
-        }
-        else if (cursors.right.isDown)
-        {
-            player.body.velocity.x = 200;
+           // タップしたx座標がプレイヤーより右のときは右に移動
+           if (game.input.pointer1.worldX > player.body.center.x) {
+             player.body.velocity.x = 200;
+           }
+           // タップしたx座標がプレイヤーより左のときは左に移動
+           else
+           {
+             player.body.velocity.x = -200;
+           }
         }
 
         //  Firing?
-        if (fireButton.isDown)
+        // タップしたときに弾を発射する
+        if (game.input.pointer1.justPressed(200))
         {
             fireBullet();
         }
</code></pre>

### 修正後のINVADERS
タップでビームを発射してエイリアンを爆破したり、移動してエイリアンの弾をよけたりするゲームをFx0で動かすことができました。
![invaders-fourth.gif](https://qiita-image-store.s3.amazonaws.com/0/70507/849921c3-e6e8-d867-6a3d-28af8858e2f5.gif)


[PHASERを使ってゲームアプリを動かしてみた （その１）](http://qiita.com/onaona/items/ef113de5e1efdef74c93)
[PHASERを使ってゲームアプリを動かしてみた （その２）](http://qiita.com/onaona/items/9aaeb93f17869e02725f)
[PHASERを使ってゲームアプリを動かしてみた （その４）](http://qiita.com/onaona/items/05f2d0ab4fc96fb96797)



[（1）enchant.jsを使ってみる](http://qiita.com/onaona/items/6f30f5239ebd61391fe2)
heroku Q&Aメモ

疑問を解決するたびに更新します。

## ローカルでアプリを実行したいとき
``` shell
; プロジェクト内
bundle exec rake db:create db:migrate
foreman start web
;local:5000で確認可能
```

## サーバでアプリを実行したいとき(ローカルで動作確認後)
``` shell
; プロジェクト内
git push heroku master
heroku run rake db:migrate
heroku ps:scale web=1
heroku open
heroku logs --tail
```

##　環境変数設定
```
; 環境変数設定確認
heroku option

; 日本向け環境変数設定
heroku config:add TZ=Asia/Tokyo
heroku config:add LANG=ja_JP.UTF-8
heroku config:add LC_ALL=ja_JP.UTF-8

; 削除するときは以下
; heroku config:remove LANG
```

##　アプリケーション名を変更したいとき
```
; プロジェクト内で
heroku info
heroku rename [変更名]
```

##　ドメイン設定
```
; [app_name].herokuapp.comでCNAMEレコード設定後
; プロジェクト内で
heroku domains:add [ドメイン]
```

## herokuにあげたとき、assetsが読み込まれないとき
```rb:config/environments/production.rb
# ここをtrueに！
config.assets.compile = true
```
ffmpegでよくつかうやつ


## 動画の切り抜き指定

```
// mp4の場合
$ ffmpeg -i [INPUT_FILE] -vf crop=640:720:320:0 [OUTPUT_FILE].mp4
```

OUTPUT_FILEの動画を、640x720pxサイズにする。
x座標を、320pxから切り取る
y座標を、0pxから切り取る

## 動画を音無しで出力

```
// mp4の場合
$ ffmpeg -i [INPUT_FILE] -an [OUTPUT_FILE].mp4
```

## 動画のスピードを変えて出力

```
// 0.8倍速の場合
$ ffmpeg -i [INPUT_FILE] -vf setpts=PTS/0.8 [OUTPUT_FILE].mp4
```

## 動画のリサイズ

```
// OUTPUT_FILEの動画サイズは横320px高さは等倍で出力
$ ffmpeg -i [INPUT_FILE] -vf scale=320:-1 [OUTPUT_FILE].mp4
```

## 動画をコマで画像に出力

```shell
$ ffmpeg -i [INPUT_FILE] -f image2 -vcodec png -r 4 "./%03d.png"
```
-i インプットファイル
-f フォーマット
-vcodec コーデック
-r 1秒あたりのコマ数
%03d 3桁の数字

・input.mp4の0-10秒を、100fpsで5桁の連番のファイル名のPNGで保存。

```
$ ffmpeg -i ./input.mp4 -ss 0 -t 10 -f image2 -vcodec png -r 100 "./%05d.png"
```

## FLV to MP4

```
$ ffmpeg -i [INPUT_FILE].flv -acodec copy -vcodec copy [OUTPUT_FILE].mp4
```

## MP4 to MP3

```
$ ffmpeg -i [INPUT_FILE].mp4 -ab 128 [OUTPUT_FILE].mp3
```

## 連番名の画像から動画に変換

```
$ ffmpeg -r 30 -i "./%04d.png" -vcodec libx264 -qscale:v 0 ./0.mp4
```

## m3u8からMP4に変換

```
$ ffmpeg -i https://example.com/hogehoge.m3u8 -mo
vflags faststart -c copy -bsf:a aac_adtstoasc ~/Desktop/req.mp4

```


## HD動画をスマートフォン向けの動画(H.264+aac)に変換

```
$ ffmpeg -i ./HD.mov -vcodec libx264 -r 19 -b 120k -s 480x270 ./h264_480x270_r19_b120.mp4
```
-vcodec 
-r フレームレート
-b ビットレート
-s リサイズ

## 音声抽出

```
$ ffmpeg -i in.mp4 -acodec copy out.m4a
```
※AACの場合
そうだ!自前で仮想環境があれば良いんだ!(ぴし

[先生! Mac OS Xを持ってないけど、hdiutil が必要なんです!!](http://qiita.com/makoto1899/items/d937bc3a4cf7d9df980a) からの派生～

# 最終的に

> そうだ!自前で仮想環境があれば良いんだ!(ぴし

おいおい:-P

そもそもは、VMware ESXi 5.5で OS X 10.9.5 Mavericks が動くよ!って話からはじまる。

http://blogs.vmware.com/guestosguide/guest-os/unix-and-others/mac-osx

じゃあ、VMware vSphere ESXi 5.5で仮想環境を提供しているサービスを見つければ!と調べるも、VPS市場は KVM が最高潮に盛り上がっている...

昔、VMware vSphere ESXiで80台のRHELを、ESXiサーバ7台+ストレージに移行したときは、お金がなくて ESXi 無償版を使ったけど、世間一般ではバリバリ有料版を買って、バリバリvMotionによる「ライブマイグレーション」で、「サービスは一切止めないよ」という強固な仮想環境を作るらしい。お金がある企業って、羨ましい:-(

# 視点を変えて

じゃあ、VPSとかセコイ事を言わず、どどーんと専用サーバはどうなんだ!って事で、大好き(?)な さくらインターネット で調べる。

* [VMware vSphere/Citrix XenServerについて](http://server.sakura.ad.jp/function/os/citrixinfo.html)

なるほどーVMware vSphere ESXi 5.5も利用できます!っと。メモリは最低16GB。HDD1TB。良いね～

で、初期10万円・月1万円。払えない金額ではないね! さくらのVPS4Gを借りているけど、4千円ぐらい払っているし。よし!これだ!! 

ってさーMac OS Xの話からずれてない!?ライセンスは?そもそも、Apple以外のサーバにMac OS Xを載せるのは、ライセンス違反のまっくろくろすけですよ...orz ←懐かしいこれ!

# 大きく脱線したが

結論として、http://www.macminivault.com/ なのかな!?:-)

# いいねーこれ!

http://www.kagoya.jp/dedicated/flex/vm/

全体構成図が、泣けるぐらいカッコいい! 14万円/月!
RubyMineが起動しない


## 問題
RubyMineをインストールしたものの起動しない(TOT)
環境はMac OS X。

## 対策
原因はJavaのバージョンが、RubyMineとMacで異なっていたこと。

RubyMine を Mac OS X にインストールし動かすと、Mac 標準の Java 6 が使われる。でも自分のパソコンでインストールしていたJavaは7。

`RubyMine.app/Contents/Info.plist` を開いて JVMVersion を 1.6* から 1.7* に変更すると Java 7 が使われるようになり、起動した。

めでたしめでたし。
iOSアプリのデザインに役たつ無料サービスまとめ


**＊ご利用の前に各サービスのライセンスや利用規約をご確認ください。**

### App Store Screenshots

https://launchkit.io/screenshots
https://itunes.apple.com/app/screenshot-app-beautiful-app/id907369748

### App Store Previews

http://www.techsmith.com/techsmith-appshow.html


### Mockups

http://dunnnk.com/
http://magicmockups.com/
http://picapp.net/

### Icons

http://icons8.com/
https://github.com/PrideChung/FontAwesomeKit
https://itunes.apple.com/app/icon-set-creator/id939343785

### Images

https://unsplash.com/
http://magdeleine.co/
http://foodiesfeed.com/
http://www.designerspics.com/
http://nos.twnsnd.co/
http://jeshoots.com/
http://cupcake.nilssonlee.se/
http://www.lifeofpix.com/
http://kaboompics.com/
http://dummyimage.com/

### UI Design Patterns

http://www.pttrns.com/
http://beta.pttrns.com/
http://ios-patterns.com/
http://www.appdesignserved.co/
http://inspired-ui.com/
http://uxarchive.com/
http://www.lovelyui.com/
http://inspirationmobile.tumblr.com/
http://www.mobile-patterns.com/
http://www.mobilemozaic.com/
http://www.iospirations.com/
http://capptivate.co/
https://www.cocoacontrols.com/
Slimでlink_toにHTMLタグを含む文字列にリンクを貼る


Slimのlink_toの文字列にHTMLタグを含ませたいときは、link_toのブロック構文を使う。

```
= link_to '/info', class: 'img' do
  | インフォメーション
  span
```

HTMLには次のように出力される。

```
<a href="http://hostname/info.htm" class="img">インフォメーション<span></span></a>
```
線分交差判定

線分abと、線分cdが交錯しているかどうかの判定。

```js
var judgeIentersected = function(ax, ay, bx, by, cx, cy, dx, dy) {
  var ta = (cx - dx) * (ay - cy) + (cy - dy) * (cx - ax);
  var tb = (cx - dx) * (by - cy) + (cy - dy) * (cx - bx);
  var tc = (ax - bx) * (cy - ay) + (ay - by) * (ax - cx);
  var td = (ax - bx) * (dy - ay) + (ay - by) * (ax - dx);

  return tc * td < 0 && ta * tb < 0;
  // return tc * td <= 0 && ta * tb <= 0; // 端点を含む場合
};
```

trueが返る場合は2つの線分が交差している。
falseが返る場合は2つの線分が交差していない。

以下デモ。
http://codepen.io/ykob/details/vEzRPX/

---

以下のページの内容を参考にしました。というか式はそのまま。
http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/Intersection.htm
Xcode6でいろいろローカライズしよう

社内のiOS勉強会でTips共有したときのメモ
TODO: そのうち清書する（多分しない）

# iOSアプリのローカライズについて

いろいろやり方あるけど自分はデフォルト厨なので、できるだけ自作ぽいことはせず、Apple様に提供して頂いている機能をなるべく使ってローカライズがんばる。 ペロペロ（靴をなめる音）

# Export/Import for Localization

- .stringsを手作業で編集するのはなにかと辛いですよね・・
- 最近のxcodeでは以下のワークフローで翻訳作業できる
  - 開発者が、言語リソースを XIFF 形式 (XML Localization Interchange File Format)で出力
  - 翻訳者が編集
  - 開発者が翻訳済みのXLIFFをインポートすると、.stringsに変更が反映される

## XLIFFエディタで翻訳
- Counterparts Lite が無料
  - https://michelf.ca/software/counterparts-lite/
- ¥100だけど、こっちのほうがオススメ (yosemite only)
  - http://hotmilktea.com/xliffie/

## 便利なところ
- コード中の  NSLocalizedString と既存のstringsをマージして XLIFF を吐いてくれるのでstringsは直接触らないくてよい
- 手作業で更新した内容も反映される
- Storyboard / xib の言語リソースも一緒にexportされるので、単一のXLIFF で翻訳をすべてまかなえる

## 面倒なところ
- 言語ごとにimportが必要で面倒
- テストターゲットに追加しているm/h内の言語が同一キーで重複する
  - ```<file original=“XXXTests/Localizable.strings” ..>```の行で見分ければ良いがエディタ上で判別出来ないと辛い
  - Counterparts Lite ではキーを一覧しているだけなので辛い
  - xliffieだと、ローカライズ対象ごとに分けて表示してくれるのでオススメ

# Storyboard / xib のローカライズ

- Assistant Editor でプレビューできて便利ですよねー
- なので、UILabelをOutletでつないで翻訳・・ではなくなるべくStoryboard / Xib自体をローカライズする方向で

## ２種類のローカライズ手段

- Localizable.stringsとしてローカライズ
  - Storyboard/Xibから文字列抜き出してstringsを生成してくれる
  - ビューの構造が変わっても（なんとか）追従してくれる
  - Storyboard/Xib を編集 => 一旦"Storyboard/Xib自体をローカライズ”にconvert => 「Localizable.stringsとしてローカライズ」に戻す
- Storyboard/Xib自体をローカライズ
  - Storyboard/Xibが言語ごとに複数作られる感じ
  - 初回設定時にオリジナルをcopyして、以降は変更は同期しない（！）
  - ~~よっぽど言語ごとにレイアウト変わるとかじゃない限り使えなさげ~~ => xcode6.2から？一旦stringsにconvertすれば変更は追従するようになってた
- お好きな方で

詳細は以下を参考
>Storyboardで消耗しないためのTips
>http://qiita.com/kenmaz/items/5e749f37e7095e0d54f2

## Attributed Stringのローカライズ
- IB上で定義したAttributed Stringはローカライズ対象外 (stringsに吐かれない)
- UILabelだけのxibを作ってローカライズ？
  - strings / XLIFF にはエクスポートされないので個別管理になってしまう
     
# ロック
- 他の人がstoryboardをいじらないようにロックできる（！）
- どうなの・・・

# コマンドラインからのexport/import
- exportはこう

```
xcodebuild -exportLocalizations -localizationPath xliffs -project LocalizeSample4.xcodeproj -exportLanguage ja -exportLanguage en
```
- ~~でもimportはできない！~~
- ~~どーなの~~
- importもできます

```
xcodebuild -importLocalizations -localizationPath ~/ja.xliff -project LocalizeSample4.xcodeproj
```

# 画像などのリソースのローカライズ
- 画像ファイルなどローカライズ可能
- だがxcassets管理下の画像はローカライズ不可能
- どーなの

# テスト
- IB + Assistant Editor で確認できてうれしい
- Edit Scheme -> Options > Application Languageで言語選択してsimulator実行

# まとめ
- どーなの的な点は多々あるが、まあなんとかがんばってやっていきましょう
- 詳しくは Appleのドキュメントをお読みください
  - https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/Introduction/Introduction.html
cocos2dx lua暗号化調査


試したcocos2dxのバージョンは3.4


http://qiita.com/tkyaji/items/02b772d15ea7f56c9285

こちらの記事をみてcocosコマンドで暗号化できることをしりました。

いちいち暗号化のcompileをしてandroid/ios buildするのめんどくさいなと思い、
オプションを眺めていると指定してbuildできそうだったのでそれの記録メモ


http://www.cocos2d-x.org/wiki/Cocos_compile
ここにかいてるluaプロジェクトで重要そうなオプションを抜粋


|arg|説明|
|------|------|
|--compile-script|コンパイルするかどうかの指定みたいでreleaseモードだと有効でdebugだと無効にしてくれるみたい|
|--lua-encrypt|1をいれないとこっちが指定したkeyでluaをコンパイルしてくれない。指定しないとdefaultの2dxLuaで作られる|
|--lua-encrypt-key|ここに暗号化のkeyを指定する|
|--lua-encrypt-sign|暗号化の種類？なのかなデフォルトのままでとりあえず|


```cpp:AppDelegate.cpp
stack->setXXTEAKeyAndSign("akaishi", strlen("akaishi"), "XXTEA", strlen("XXTEA"));
```

に変更してandroid/iosでbuild




実際に実行したコマンドはこれ

```
$ cocos compile -p android -s ~/Documents/luatest -m release --lua-encrypt 1 --lua-encrypt-key "akaishi"
```

できたapkファイルはzipなのでzip解凍して確認すると暗号化されているみたい

```
cocos compile -p ios -s ~/Documents/luatest -m release --sign-identity "iPhone Distribution: xxxxxxx" --lua-encrypt 1 --lua-encrypt-key "akaishi"
```

できたipaファイルもzipなので同じように解凍して確認してみたところされていました。


実際に実機で確認してもluaサンプルプロジェクトのアリアプリ？が動きました！！

debugのときは暗号化されないので
luaファイルをそのままresourseファイルに転送してデバッグもできて楽
mongoDBのfindにinを指定するときの引数で罠った

PHPからmongoDBに「in」条件を使った問い合わせをしようとして、下記のエラーが発生しました。

```error.log
[CRIT] Application error exception 'MongoCursorException' with message '127.0.0.1:27017: Can't canonicalize query: BadValue $in needs an array'
```
「配列を引数として渡しやがれこのクサレ脳みそがッ！」ということですね。

で、コードはこちら。

```hoge.php
$params = [
    $user_id => ['$in' => $user_id_array]
];
$cursor = $collection->find($params); 
```

$user_id_array の中身はこうなっていました。

```
$user_id_array:array (
  0 => 10000,
  1 => 10001,
  2 => 10002,
  3 => 10003,
  4 => 10004,
  8 => 10005,
  9 => 10006,
 11 => 100000,
 12 => 100001,
);
```
ちゃんと配列を渡していますが、これだとエラーに。
気になったのは配列のキー。array_diffの後だったので、抜けが出ています。
試しに下のように変換。（配列を連番にしました）

```
$user_id_array = array_merge($user_id_array);
$user_id_array:array (
  0 => 10000,
  1 => 10001,
  2 => 10002,
  3 => 10003,
  4 => 10004,
  5 => 10005,
  6 => 10006,
  7 => 100000,
  8 => 100001,
);
```

お、エラー出なくなった。正解。
連番でないキーは通常の配列ではなく、連想配列扱いになっているみたいですね。
先生! Mac OS Xを持ってないけど、hdiutil が必要なんです!!

# もう、とにかく hdiutil が必要なんです!

## そもそも、hdiutil ってなに!?

[hdiutil -- manipulate disk images (attach, verify, burn, etc)](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/hdiutil.1.html)

超訳すると、

> AppleがMac OS X用に作ったディスクイメージ編集プログラム

かな!?(間違えていたら、ご指摘を)

## あるよね!? hdiutil on Linux

> hdiutil is Apple proprietary software and not part of the public Darwin source code. Since Apple doesn't provide it, a port is not possible.

http://superuser.com/questions/226439/hdiutil-on-linux

はー。Darwin source code にも適用されていないから、ねーよ! だって。はあ。なかなか、手強いですね。

## Yosemite VPS

よーし、Yosemite が提供されたVPSを探すよ!日本にもあるようだが、なんかよく判らないから、海外物だけ。

* http://www.hostmyapple.com/macvps.html
* http://virtualmacosx.com/index.php/dedicated-plans
* http://xcloud.me/

一番サイトがカッコいいのは、HostMyAppleかな。スペック的に一番貧弱だけど、OS X Yosemite Lite $24.99/mo

それなりに、評判がよさげな vmOSX(virtualmacosx.com) Dedicated　$29.75 monthだって。本命か!?

なんか、ふんわり感があるサイトな xcloud.me 。MINI 79 CHF per month だって。CHFって1CHF=1ドルって事らしい。なんか、よく判らない。

で、これら3サイトは、いまどきのECサイトっぽくPayPalが採用されている。海外ECサイトでクレカを送信したくないので、ちょっと安心。

ただ...どこもお試しサービスがない。これはどういう事!?使ってみると、「使い物にならん」って感じになるのでしょうか。

## Free Trial! Free Trial!

探しました。VPSではないけど....

* http://www.macminivault.com/

Mac mini 1台をホスティングしてくれる会社らしい。冷えるくせに、そこそこ高性能なMac miniならではのサービスを展開していらしい。

![](http://img.f.hatena.ne.jp/images/fotolife/m/makoto1899/20150326/20150326151054.png)

超Cool!じゃない!?:-P

とりあえず、1日だけらしいけど、Free Trial! できるらしいので、申し込んでみた。[Mac Mini Vault](http://www.macminivault.com/)は、新品Mac miniも扱っているが、1年間使われた中古も安く提供している。1年前もそんなにスペック変わらないから、HDDの部分が不安ならSSDに交換してもらって、新品HDDモデルよりちょっと安い～ぐらいなプランもありかも。

## 契約しちゃった!:-P

[Mac Mini Vault](http://www.macminivault.com/) のFree Trialが待てずに、[vmOSX](http://virtualmacosx.com/index.php/dedicated-plans)の"Fractional Dedicated Server 2 GB/2 CPU"を、¥3,685 で登録しちゃった!明日には使えるかな～
enchant.jsとtmlib.jsを使ったゲーム作成フレームワーク「enforce」スプライトのタッチ無効化

**※この機能はenchant.jsを使用した場合のみ有効です。**
# スプライトのタッチイベント無効化

enforceのオブジェクトはすべてがタッチイベントを持っているため、重なっていると下のスプライトにはイベントが渡りません。
イベントチェーンでも繋がっていないため、送ることも出来ません。
これでは、タッチやクリックで操作するスプライトの上に装飾目的のスプライトを置くことが出来ません。
ですので、オブジェクト生成時に

```coffeescript
    touchEnabled: false
```
というパラメータを渡すことで、タッチやクリックイベントを無視します（下のスプライトにイベントが渡ります）。
tmlib.jsでは、重なっているスプライトすべてにイベントが渡るのでこのパラメータはなにを渡しても変わりません。

---

[enforceチュートリアル一覧](http://qiita.com/digitarhythm/items/9e75c871f5ce582a4d01)
NativeScriptのconsole.logの出力先(Android)

NativeScriptでも`console.log`が使えるようですが、どこに出力されてるの？ってなったからメモ。Androidの場合です。Android使いの人には常識かな？

``` コマンド.
adb logcat -v time JS:V *:S
```

```出力.
C:\workspace\NativeScript\hello-world>adb logcat -v time JS:V *:S
--------- beginning of /dev/log/system
--------- beginning of /dev/log/main
03-26 01:43:37.342 V/JS      ( 1762): ~
03-26 01:43:37.432 V/JS      ( 1762): ~

```
adbは`android-sdk-windows\platform-tools`の下にあるのでパスを通しましょう。

`tns device log`とかいうのもあるみたいですが、うまくいきませんでした。
フォード ｆ２５０ （2006年）のタイヤサイズを

フォード ｆ２５０ （2006年）のタイヤサイズを３５インチに変更しました。
コンピューターの書き換えはどうやって行うのですか？？？
ＩＤＣ－<a href="http://www.obd2mart.jp/category-23-b0-VCM2%E8%A8%BA%E6%96%AD%E6%A9%9F.html">VCM2</a>では、項目が出てきませんでした。

ご存知の方、宜しくお願いし
ます。
[Qiita] 目次を移動させた場所が広告の下だった、ってところが斬新ですね。

# 右下の目次
## 枠も何もないので
### 一見すると
#### デバッグプリントに
##### 見えなくもない。
![aaa.png](https://qiita-image-store.s3.amazonaws.com/0/31085/ed852a5b-72d0-ff75-d97d-e356252d4d02.png)
cakephp3 install yosemite

PHP 5.4.35 (cli) (built: Nov 24 2014 18:14:38)
mysql Ver 14.14 Distrib 5.6.22, for osx10.10 (x86_64) using EditLine wrapper

xcode-select --install
sudo port install php54-intl
curl -sS https://getcomposer.org/installer | php
php ../composer.phar create-project cakephp/app
vim config/app.php

```
'username' => ‘hogehoge',
'password' => ‘hogehogeho',
'database' => 'cakephp3',
'encoding' => 'utf8',
'timezone' => 'Asia/Tokyo',
'cacheMetadata' => true,
```
download timezone_2015a_leaps.zip
cp /opt/local/var/db/mysql56/mysql
sudo port unload mysql56-server
sudo port load mysql56-server
AWSのリザーブドインスタンスについて2015

2014/12にいろいろアップデートがあったので書き直し。
これの抜粋。

[AWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンス編](http://www.slideshare.net/AmazonWebServicesJapan/20150325-aws-blackbeltrispotpublic)

#概要

+ 1年または3年の利用コミットによる割引
+ ただし最初にAvailabilityZone(以下AZ。1aとか1ｃとか)と、インスタンスタイプ(m3.largeとか)などを決めないといけない(あとで変更できるようになった)
+ EC2、RDS、ElastiCache、Redshiftで選べる

#意外と使えるかも？

+ 1年契約だと2割〜5割引きくらいになる(インスタンスファミリーによって異なる)
+ スケールアップした場合も、必ずしも無駄になるわけではない(他に条件があうインスタンスがあれば、そちらに割引料金が適用される)

#1年か3年か？

+ そもそもAWSたまに価格改訂があるので注意。値下げがあっても購入時の割引単価が適用される
+ 3年は割引率が高いが、AWSは値下げがある場合もあるよね
+ でも3年RIの支払い総額と、1年RIを2回買った場合の支払総額は同じくらい

#注意点

+ 2015/2以降のEC2の3タイプは、起動有無にかかわらず毎月24時間*日数分が課金される
+ RDS、ElastiCache、RedshiftはAZ指定なし。あと軽度中度重度とか以前のEC2と同じ3タイプ
ドローコール改善

##概念
パフォーマンスの改善 ＝ ドローコールの削減
ではない。

ドローコールとは
・描画周りのCPUの処理
・OpenGLのコマンドだと「glDrowElement()」

OpenGLドライバ
・UnityとOpenGLで発生する「SetPass」が重くなる原因
・UnityとOpenGLドライバで処理されたものを処理する
・ここはMetalとDX12で高速化され改善されていく

##原因、要素
###描画量の最適化
・StaticBatchingはドローコールの最適化を必ずしもしない
→GPUに悪影響
・Umbraのオクルーションカリングを活用する(デザイン側)

###描画速度が重くなる原因
・Renderorが沢山(ピクセルが思い)
・Tilerが多い
・テクスチャーのキャッシュミス
→PVRTCなどのフォーマットの方がホニャララ
→Cubemapの用にランダムアクセスするテクスチャはキャッシュミスがひどい

###GPUの確認
・Xcode＆Insturument
・GPUプロファイラー

モバイル端末は、半透明の描画に弱い
→discadのコストが高い

GPUプロファイラーおすすめ

PowerVR Graphics SDK tools
http://blog.imgtec.com/powervr-developers/powervr-graphics-tools-sdk-explained-profiling-a-render-with-pvrtune
windows > タスクバーから2つ目のアプリを立ち上げる > 右クリック+アプリ選択 | Shift+左クリック


動作確認

    Windows 7
    Windows 8.1

タスクバーから起動したアプリをもう一つ立ち上げたい時、タスクバー上のアイコンをクリックしても既に起動しているアプリウィンドウにフォーカスが移るだけとなる。

２つ目のアプリウィンドウを立ち上げたい場合は、以下のようにすればよい。

1. タスクバーのアプリアイコン上で右クリック (リストが表示される)
2. 表示されるリストからアプリ名の部分を選択

複数起動を許容しているアプリについては上記のようにすればいい。

<hr>
(150329 追記)
同じことをする方法として、fernetさんに以下の方法があるとコメントいただいた。

    Shift+左クリック

こちらの方が楽です。
JSでのUA判定


##UAを判定し、デバイスごとにJSを設定する方法。

```js

(function() {
	if (navigator.userAgent.indexOf('iPad') != -1) {
		//iPad　用のJS
	} else if (navigator.userAgent.indexOf('Mobile') != -1) {
		//Mobile　用のJS
	} else if (navigator.userAgent.indexOf('Android') != -1 ) {
		//Andoroid　用のJS
	}
})();

```



-----------
viewportの設定に使ったりします。

```js
(function() {
	if (navigator.userAgent.indexOf('Nexus 7') != -1) {
		document.write('<meta name="viewport" content="target-densitydpi=device-dpi, width=768px" />\n');
	} else if (navigator.userAgent.indexOf('iPad') != -1) {
		document.write('<meta name="viewport" content="width=768px, initial-scale=1" />\n');
	} else if (navigator.userAgent.indexOf('Mobile') != -1) {
		document.write('<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1" />\n');
	} else if (navigator.userAgent.indexOf('Android') != -1 ) {
		document.write('<meta name="viewport" content="target-densitydpi=device-dpi, width=768px" />\n');
	}
})();
```
Nexus7が画面がでかいので注意が必要かと！
Laravel4からLaravel5にテンプレートを移行するときのメモ


スタイルシートの変更

```php
{{HTML::style('sample.css')}} //laravel4
<link href="{{ asset('sample.css') }}" rel="stylesheet" type="text/css" > //laravel5
```

URLの変更

```php
URL::to('/') //laravel4
{{ url('/') }} //laravel5
```


スクリプトの変更

```php
{{HTML::script('sample.js')}} //laravel4
<script src="{{ asset('sample.js') }}" type="text/javascript"></script> //laravel5
```
Ubuntu入れたらとりあえずやること

毎度検索してしまうので、メモしておく。

Ubuntuは
https://www.ubuntulinux.jp/
から、日本語Remixを落としてインストールする。

# フォルダ名を英語に
```bash
LANG=C xdg-user-dirs-gtk-update
```

# 全体的なキーバインドをEmacsにする
```bash
sudo apt-get install dconf-tools
gsettings set org.gnome.desktop.interface gtk-key-theme Emacs
```

# Chromeを入れる
http://google-chrome.jp.uptodown.com/ubuntu
ここからdebを落とせるので、それを入れる。
Visual Studio 2013 で NDEF Library for Proximity APIsをデスクトップアプリで使用するための準備

## 前置き
* デスクトップアプリで、[NDEF Library for Proximity APIs](https://ndef.codeplex.com/documentation)を使いたい。
* Proximity APIはWinRTのAPIであるため、DLLを参照しないと使えない。
* その方法を見つけたのでまとめた。

## 手順
1.プロジェクトファイルを変更する。
.vbprojの\<Property Group>以下に、\<TargetPlatformVerion>8.0\</TargetPlatformVerion>を追加する。
2. WinRTに関する参照設定を行う。
［C:\Program Files (x86)\Windows Kits\8.0\References\CommonConfiguration\Neutral\Windows.winmd」を参照に追加
3. WinRTのDLLを参照に追加する。
「C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dll」
「C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll」
「C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.InteropServices.WindowsRuntime.dll」
を参照に追加する。
4.  Imports System.Runtime.InteropServices.WindowsRuntime.dll をコードファイルの行頭に追加。

## 追記
Windows.winmdは8.1でもよい。
.NETFrameworkはv4.5.1でもよい。

## 参考文献
[How to call WinRT APIs from .NET desktop apps](http://www.codeproject.com/Articles/457335/How-to-call-WinRT-APIs-from-NET-desktop-apps)
[開発者が知っておくべき、ライブラリとしてのWindowsランタイム (2/5)](http://www.atmarkit.co.jp/ait/articles/1304/26/news058_2.html)
SPLASH簡易メモ (随時更新中)


SPLASH(http://users.monash.edu.au/~dprice/splash/index.html)
とはSPH向けの可視化ソフトである。
このソフトはSPHの大家(？)であるD. J. Priceによって書かれた。
(see, Price (2007), PASA, 24, 159-173 (arXiv:0709.0832))
勿論、SPHだけでなくともWPHも使える。
本稿では、そのSPLASHを用いた可視化を行うために必要なアレコレをメモしてある。

How 2 install
---
Macならportに落ちているので、
``sudo port install splash``
とかで入るはず。
これ以外のinstall方法に関しては、公式サイトで見られる。

How 2 plot
---
splashには、GADGET形式を仮定してinput fileを読み込むgsplashなど、
形式を仮定して読み込むコマンドがいくつか付属している。
任意の形式で読む際には、splashコマンドで読みこめば良い。
ただし、その前にinput fileと同じdirに"column"というファイルが必要である。
これは、input fileの書式を指定するファイルで、input fileが例えば
```id x y z vx vy vz mass smoothing_lengh density ...```
と並んでいたら、columnには
```id
x
y
z
vx
vy
vz
mass
smoothing_length
density
:
:```
と縦にずらずらと書いておく必要がある。
最後に、
``splash input_file -x 2 -y 3 -render 10 -dev /eps``
とか打ち込めば、input_fileの2行目をx、3行目をy、10行目でレンダリングをした図が出力される。
`-dev /eps`は出力形式を指定しており、今回の場合はepsで出力される。
viとvimの設定を分ける

CLI から起動する vi は素のまま使いたいって場合に。

-u NONE --noplugin とオプションつけて起動するとなにも読み込まれない。
これを zshrc とか bashrc にエイリアス登録しておけば、使い分けが簡単。

```:.zshrc

# vi は素のまま使う
alias vi="vi -u NONE --noplugin"

# vim は MacVim として起動する
if [ -f /Applications/MacVim.app/Contents/MacOS/Vim ]; then
    alias vim='env LANG=ja_JP.UTF-8 /Applications/MacVim.app/Contents/MacOS/Vim "$@"'
fi
```
.htaccessについてまとめた

## よみは?

エイチティーアクセス

## 何するものなの?

    Apacheを用いたWebサーバにおいて、ディレクトリ単位で設置及び設定を行える設定ファイルである。
[.htaccess - Wikipedia](https://ja.wikipedia.org/wiki/.htaccess)

- httpd.conf とは別に、ディレクトリ単位でApacheの設定を追加する
- .htaccessが置かれたディレクトリと、そのサブディレクトリに適用される
- 設定の書き方は、httpd.conf と同様

## なんでも設定できるの?

- 基本的にはそう
- 但し、httpd.conf にて、[AllowOverrideディレクティブ](http://httpd.apache.org/docs/trunk/ja/mod/core.html#allowoverride) を設定することで、制御が可能
    - All : 全て許可
    - None : .htaccessを無視
    - AuthConfig, FileInfo, Indexes, Limit : それぞれ、特定の種類のディレクティブのみを許可

## 許可されないタイプのディレクティブを、.htaccess に指定したらどうなるの?

サーバエラーになる

## どんな時に使うべきなの?

**基本的には、.htaccessは使わずDirectoryディレクティブを使うべき**
ISP等root権限の無い複数のユーザがそれぞれディレクトリ毎の設定を変更したい場合など

- 使う場合も、AllowOverrideディレクティブを使って、最低限の許可しか与えないようにすべき


## .htaccessを使った場合の問題点

- サーバ性能の問題
    - .htaccessは、サブディレクトリにも適用される
    - 特定のディレクトリにアクセスがあった時には、そのディレクトリと、全ての親ディレクトリ上の .htaccess を探す
    - その為、余計なファイルアクセスが発生する
- セキュリティの問題
    - ユーザが自由に設定できるので、管理者が知らないうちに問題のある設定をされる危険がある
    - AllowOverrideディレクティブにて、許可を絞り込むべき

## 参考

- [Apache チュートリアル: .htaccess ファイル - Apache HTTP サーバ バージョン 2.5](http://httpd.apache.org/docs/trunk/ja/howto/htaccess.html)
- [core - Apache HTTP サーバ バージョン 2.5](http://httpd.apache.org/docs/trunk/ja/mod/core.html#allowoverride)
プリプロセッサ条件分岐、OR条件

プリプロセッサ定義で、
#ifdefの判定する際に、or条件を含めたかった時のこと


問題、以下の文はエラーです。
```
#ifdef CONDITION1 || CONDITION2
```

`#ifdef`では、`define`されてるかどうかの判定をするので検証したいマクロを渡さないといけません。
上記はOR判定結果のBooleanを評価させようとしてるので根本的に間違いだと分かります。

先輩から`#ifdef` が `#if defined()`の事であり、マクロ定義の有無を判定する`defined`演算子がある事を教えてもらいました。

以下のようにします。
```
#if defined(CONDITION1) || defined(CONDITION2)
```

地道に言語機能を調べていくのも大事ですね。
accepts_nested_attributes_forで指定した関連先のvalidationに自身のidがpresence: trueだとnested_formが使えない件

（タイトルがルー語っぽくなりました）

## はじめに

### 以下の様なhas_many throughな関係があるとします

```rb
class User < ActiveRecord::Base
  has_many :memberships

  has_many :groups, through: :memberships
end

class Membership < ActiveRecord::Base
  belongs_to :user
 
  belongs_to :group

  validates :user_id, presence: true
  validates :group_id, presence: true
end

class Group < ActiveRecord::Base
  has_many :memberships
  accepts_nested_attributes_for :memberships, allow_destroy: true

  has_many :users, through: :memberships
end
```

Userが複数のGroupに所属できるモデルの関連です
Groupの作成時に所属Userを選択できるように```accepts_nested_attributes_for :memberships```を設定しました

### formは以下のようにnested_formを使ってfields_forを作ります

```slim
= nested_form_for @group do |f|

  = f.fields_for :memberships do |nf|
    = nf.hidden_field :id
    = nf.collection_select :user_id, User.all, :id, :name
    = nf.link_to_remove 'Remove'
  = f.link_to_add 'Add User', :memberships

  = f.text_field :name

  = f.submit
```

こうしておくとGroupのformからUserを複数選択してGroup作成と同時に所属Userも登録できる__はず__なんですが…

### 関連先でvalidationエラーする

なんとMembershipに```validates :group_id, presence: true```が設定されているため、Groupの作成時にMembership上にgroup_idが必要です、というエラーが発生してしまいます。。。

```
Membership group は必須項目です
```

いや、知ってますが……

## inverse_ofとvalidationを関連の名前にする

以下のようにするとidが存在しなくても、オブジェクト同士の関係があればvalidationエラーにならないことがわかりました

```diff
class Group
+  has_many :memberships, inverse_of: :group
-  has_many :memberships
end

class Membership
+  validates :group, presence: true
-  validates :group_id, presence: true
end
```

inverse_ofを使用するとbelongs_to側からsave前でも関連先が確認できるようにあるみたいです、その上でgroup_idではなく関連の名前でvalidationを書いておくとちゃんとpresence: trueを確認できるようになるので通るみたいです。
単振動とバネ

単振動に必要な要素は以下。

    k  = 0.1;
    x  = 0;
    px = x;
    ax = 0;
    vx = 0;

`k` はばね定数。
ばねの強さを表し、値が大きいと固いばねになる。

以下のように動かす。

    ax = (px - x) * k;
    vx += ax;
    x  += vx;

抗力(cd)がないと単振動になる。
抗力を加えると、ばねになる。

    cd = 0.2;
    k  = 0.1;
    x  = 0;
    px = x;
    ax = 0;
    vx = 0;

以下のように動かす。

    ax = (px - x) * k;
    ax -= cd * vx;
    vx += ax;
    x  += vx;

応用すると以下のような動きが表現できる。

http://codepen.io/ykob/details/XJqVVa/
laravelのページネーションでpage以外のGetパラメータを引き継がせる方法

laravelのページネーション実装方法メモ 

```php:HogeController.php
<?php
...
$from_date = Input::get('from_date');
$end_date  = Input::get('end_date');
$data['contributions'] = Contribution:: getRanking($from_date, $end_date)->paginate(20);

return View::make('hoge', $data);
```

```php:hoge.blade.php
{* ページネーション部分のみ抜粋 *}
{{$contributions->links()}}
```
この場合、下記のURLでアクセスしてみると、 1ページ目は正常に表示されるはずです。
http://hoge.com/contributions?from_date=xxxx-xx-xx&end_date=xxxx-xx-xx

しかし、2ページ目のリンクをクリックすると、from_dateとend_dateが無くなってしまいます。。 
http://hoge.com/contributions?page=2  
その場合は下記のように変更するとうまくいきます。

```php:HogeController.php
<?php
...
$from_date = Input::get('from_date');
$end_date  = Input::get('end_date');
$data['contributions'] = Contribution::getRanking($from_date, $end_date)->paginate(20);
$data['params'] = array(
                            'from_date' => $from_date,
                            'end_date'  => $end_date
                        );

return View::make('hoge', $data);
```

```php:hoge.blade.php
{* appendsにarrayで追加したいパラメータを渡します *}
{{$contributions->appends($params)->links()}}
```
これで無事2ページ目以降、下記のようなURLになったと思います。 
http://hoge.com/contributions?from_date=xxxx-xx-xx&end_date=xxxx-xx-xx&page=2
C#でHTTPSをデコードして中身を見たり書き換えるプロキシ 

#ソース

https://github.com/0xfffffff7/glancer


#使い方

現状はやや面倒ですが、

１、秘密鍵と公開鍵のペアを準備する(.pfx、.cert)
２、glancerを動かすマシンで、秘密鍵のドメインとマシンのドメイン名を合わせる。hostsでいい。
３、glancerを動かすマシンで、MMCから秘密鍵と公開鍵をローカルストアに登録
４、クライアント側のブラウザで証明書のドメイン名チェック外す。IEの場合はさらに上記の公開鍵証明書を登録する。
５、クライアント側で上記の公開鍵証明書登録。
６、glancerの設定ファイルに鍵のパスを記述。
７、ログを出す場合はログのパスとON/OFFも記述
８、ブラウザのプロキシ設定をglancerのマシンとポートにする。

今は代理証明には対応してないので準備が少し手間がかかります。
そのうちOpenSSLに変えて、証明書も通信先のドメイン名から動的に作るようにして、クライアントはルートCAだけ入れればよい状態にしたいと思います。

通信を書き換える方法も今はContent-Lengthなども考慮して実装を行わなければならないので敷居高いです。
いずれ簡単にする予定。
DBUnitとPOI3.11を利用する

※2015/3/26現在のめも

mavenのセントラルリポジトリに公開されているDBUnitの最新ver 2.5.0 の場合、依存するPOIのverは3.2。

無理やりPOIの上位verを利用しようとすると実行時にエラーとなってしまう。

次期公開の2.5.1ではPOI3.11に対応して頂ける模様。
http://sourceforge.net/p/dbunit/code.git/merge-requests/6/

気長に公開を待ってもいいのですが、
SNAPSHOTがsonatypeに公開されていたので、
ひとまずそちらを参照して利用させて頂く

→POMを修正

```xml

<repositories>
	<repository>
		<id>oss.sonatype.org</id>
		<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
		<releases>
			<enabled>false</enabled>
		</releases>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
	</repository>
</repositories>

----

<dependency>
	<scope>test</scope>
	<groupId>org.dbunit</groupId>
	<artifactId>dbunit</artifactId>
	<version>2.5.1-SNAPSHOT</version>
</dependency>
```
重力加速度と反重力っぽい演出

自由落下運動の計算式は以下とのこと。

    1 / 2 * g * t * t

`g` は重力加速度。
`t` は時間。

重力加速度についてはwikipediaを参照。

> 物体を落としたとき、その物体が時間当たりのにどれだけ速くなるかを示した量

`g` を `px` の値で応用すれば、canvasなどで自由落下が表現できる。

http://codepen.io/ykob/details/myamzL/

---

`g` を負の数にすると、反重力っぽくなる。

http://codepen.io/ykob/details/gbZxLr/