OmniAICreator/Qiita-1.07M huggingface dataset:
【C++】unistd.hのsleep()で1秒未満の値を設定する

# unisth.h での sleep() メソッド

```
#include "unistd.h"
    :
    :
sleep(0.5f);
    :
    :
```

これではディレイはかけられない。

## sleep() メソッドは1秒単位でしか値をセットできない
コードを見ると、

```
sleep(unsigned int) __DARWIN_ALIAS_C(sleep);
```

引数は```unsigned int```になっている為、少数は渡しても切り捨てられて0になる。

## usleep() を使う
1秒未満のディレイをかけたい場合は```usleep()```メソッドを使用する。

```
#include "unistd.h"
    :
    :
usleep(1000000);    // 単位は[μs]
// usleep(1e6);
// これでもOKだが、1e6はfloatでusleep(unsigned int)なのでよろしくはない。
    :
    :
```

単位はマイクロ秒。
~~ちなみに```10^6```で渡してもダメだった…なんでだろ。~~
コメントより。
XCTestについてのメモ


### テストターゲット内のリソースはMainBundleとは別扱い

pathの取得方法（取得先）が違うので注意が必要です。

```swift:
let path = NSBundle(forClass: self.dynamicType).pathForResource("photo", ofType: "jpg")
```

追記：Swift3だと下記のようになります。

```swift:
let path = Bundle(for: type(of: self)).path(forResource: "photo", ofType: "jpg")
```

- - -

### 非同期のテストについては、waitForExpectationsWithTimeoutを使う

2014年のWWDCに「Testing in Xcode 6」というセッションがあり、その中で Asynchronous testing として説明されています。
[https://developer.apple.com/videos/wwdc/2014/#414]()

```swift:
let expectation = expectationWithDescription("Save Image from UIImage")

PhotosHelper().saveImageToPhotosLibrary(image) { (success, error) in
    XCTAssertTrue(success)
    expectation.fulfill()
}
        
waitForExpectationsWithTimeout(5.0, handler: nil)
```

- - -

### XCTAssertThrows等の例外を受けるアサートはなくなった

SwiftにはObjective-Cにはあった例外処理がなくなったので、実装されていないようです。

ググると、Objective-Cをラップした自作アサートの話が出てきました。 
[http://stackoverflow.com/questions/25529625/testing-assertion-in-swift]()

こちらも同様なサンプルコードです。 
[https://gist.github.com/akolov/8894408226dab48d3021]()

- - -

### テストの実行は名前順？

手元の環境（Xcode6.4）では、XCTestCaseのサブクラスのクラス名順、さらにクラス内のテストケースも記述順ではなく名前順で実行されていることを確認しました。

- Aテストクラス
  - テストケース名前順1
  - テストケース名前順2

　　　↓

- Bテストクラス
  - テストケース名前順1
  - テストケース名前順2
  - テストケース名前順3
  - テストケース名前順4

　　　↓

- Cテストクラス
  - テストケース名前順1
  - テストケース名前順2
  - テストケース名前順3

のような順で実行されました。
PHP で部分適用やカリー化

PHP で部分適用やカリー化をやってみました（PHP でカリー化なんて美味しくはないと思いますけれども）。
なお、PHP7 じゃないと動きません。

カリー化は、最後は引数 0 個で呼ばなければ値が返らないようになっています。例えば次のようにです。

```php
<?php
$func = carry('func');
$func(1)(2)(3); // 引数を 0 個とる関数が返る
$func(1)(2)(3)(); // func(1, 2, 3) が呼ばれて結果が返る
```

カリー化とかよくわかっていないので、こういうものなのかどうかはわかりません。

```php
<?php
/**
 * 部分適用
 */
function bind(callable $f){
    $args = func_get_args();
    array_shift($args);
    return function () use ($f, $args) {
        return call_user_func_array($f, array_merge($args, func_get_args()));
    };
}

/**
 * カリー化
 */
function carry(callable $f)
{
    return function () use ($f) {
        $args = func_get_args();
        if (count($args) === 0) {
            return $f();
        } else {
            return carry(function () use ($f, $args) {
                return call_user_func_array($f, array_merge($args, func_get_args()));
            });
        }
    };
}

function minus($x, $y)
{
    return $x - $y;
}

function triple($x, $y, $z)
{
    return $x + $y + $z;
}

function sum()
{
    return array_sum(func_get_args());
}

var_dump(bind('minus', 10)(3)); // int(7)
var_dump(bind('triple', 1)(2, 3)); // int(6)
var_dump(bind('triple', 1, 2)(3)); // int(6)
var_dump(bind('sum', 1, 2, 3, 4, 5)(6, 7, 8, 9, 10)); // int(55)

$minus= carry('minus');
var_dump($minus(10)(3)()); // int(7)

$triple = carry('triple');
var_dump($triple(1)(2)(3)()); // int(6)

$sum = carry('sum');
var_dump($sum(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)()); // int(55)
var_dump($sum(1, 2)(3, 4, 5)(6, 7, 8, 9)(10)()); // int(55)
```

よく考えると、これだと `array_map` とかにコールバックとして渡せないのでダメですね。。。

ググって似たようなものを探すと、リフレクションで引数の数を調べることで最後の引数なしの呼び出しが無くても良いようにするのが多いようです（可変個引数がダメになりますけれども）。
AndroidStudioでのファイル名の付け方

AndroidStudioでプロジェクトを作っていく中でのファイル名についての決まり事。

##java
始め大文字
アンダーバーなし
次の単語は大文字で始める
例：StopWatchApp

##drawable
英字は小文字のみ
アンダーバーはOK

不適切な場合はエラーが出ます
```
Error:Error: Invalid file name: must contain only lowercase letters and digits ([a-z0-9_.])
```

##layout
小文字
アンダーバーはOK

##string
ハイフンだめ

メモ的に書きました。
間違いありましたらご指摘ください。
カスタム投稿タイプの特定のターム(タグ)の記事をn件表示

## 作品をアップしてて、いくつかの代表作だけいつもトップページに表示したい

そんな時のメモです

### 表示条件

カスタム投稿タイプ　works
ターム(タグ)名　masterpiece
表示件数　5件

### コード


```php:sample

<?php
    $loop = new WP_Query( array( 
        'post_type' => 'works', //カスタム投稿名
        'term' => 'masterpiece', //ターム(タグ)名
        'posts_per_page' => 5 //表示件数（ -1 = 全件 )
    ));

    while ( $loop->have_posts() ) : $loop->the_post();
?>

<a href="<?php the_permalink() ?>">
    // サムネイル表示
    <?php the_post_thumbnail(); ?>

　　// タイトル表示
    <?php the_title(); ?>
</a>

<?php endwhile; ?>

```
マージでの Tree conflict 解消方法メモ


## local delete, incoming delete upon merge


### ステータス表示

```bash:表示例
!     C unity/Assets/ResourcesOutside/Effects/Mesh/FBX/UVanimation.js.meta                                                                                                 
      >   local delete, incoming delete upon merge
```

### 理由

マージ先及びマージ元両方で削除された

### 解消方法

このコンフリクトが発生した作業ディレクトリ内には該当ファイルは存在しないが、svn上に「削除」の情報が残っている状態となっている。

svn から情報を削除するには以下のように`revert`サブコマンドを使う

```bash:例
$ svn revert path/to/conflicted_file
```

大量にある場合は以下のワンライナーで一括で削除できる。

```bash:例
$ svn st | grep -E '^!.{0,6}C' | awk '{print $3}' | xargs svn revert
```



## local edit, incoming delete upon merge


### 理由

マージ先で変更されたファイルがマージ元から削除されている

### ステータス表示

```bash:表示例
      C tools/Gemfile
      >   local edit, incoming delete upon merge
```

### 解消方法

マージ先の状態を保持する場合、`svn resolve --accept working`で作業ディレクトリの内容を採用する。

```bash:例
$ svn resolve --accept working path/to/conflicted_file
```

マージ先から該当ファイルを削除する場合、 `svn delete` で作業ディレクトリからファイルを削除する。

```bash:例
$ svn delete path/to/conflicted_file
```




## local add, incoming add upon merge


### 理由

ローカルとマージ元の両方で同じファイルが追加された

### ステータス表示

```bash:例
      C any/SomeFile
      >   local add, incoming add upon merge
```

### 解消方法

マージ先(元々の作業ディレクトリの状態)のままで良い場合、`svn resolve --accept working` で解消。

```bash:例
$ svn resolve --accept working
```

マージ元を反映したい場合、一旦、`svn delete` で作業ディレクトリのファイルを削除した後、再度マージを実行する。
マージ対象のリビジョンは `svn log` でマージで該当ファイルを追加/変更したリビジョンを指定する。

```bash:例
$ svn log ^/branches/hoge   # 表示される情報からマージ元のリビジョンを確認
$ svn delete path/to/conflicted_file   # 一旦削除
$ svn mrege ^/braches/hoge --ignore-ancestry -c XXXX  # マージ元に追加された内容を作業ディレクトリに反映
```
emacsで、全行インデントを一括で行う方法

#目標：カーソルの位置を変えないまま、全行のインデントを整える
emacsで真面目に全行のインデントを整えようとすると、

    C-x h (mark-whole-buffer)
    C-M-\ (indent-region)

の2段階を踏まなければなりません。それどころか、上記の`C-x h`の段階でカーソルがバッファの一番最初に来てしまうため、コーディングが途中だった場合最後に作業をしていた行まで戻る必要があります。

コードが完成した後に体裁を整えるために全行インデントをする場合ならまだ我慢できなくもないのですが、まさにコードを書いている途中で「見難くなったからインデントしてみるか」と思った場合に上記の手順を踏むのはかなり面倒くさいです。

この度いろいろと試行錯誤を重ねて「カーソルを移動させないままの全行インデント」が可能になったので備忘録。

# 方法
## 1. point-undoのインストール
まず前提として、emacsに"point-undo"が入っている必要がある。"point-undo"のインストールの仕方は[こちら](http://d.hatena.ne.jp/rubikitch/20081230/pointundo)を参照のこと。

##2. .emacs.elの編集
###2.1. 新しい関数の定義
"point-undo"がインストールできたら、`~/.emacs.el`に以下の5行を書き込む。

 ```emacs-lisp:~/.emacs.el
(defun all-indent ()
     (interactive)
     (mark-whole-buffer)
     (indent-region (region-beginning)(region-end))
     (point-undo))
```
    

以上で、「カーソルを移動させないまま全行インデントする」という操作を行う"all-indent"という新しい関数を定義することができた。

    

###2.2. 新しい関数のキーバインドへの割り当て
`~/.emacs.el`に、続けて以下の１行を書き込む。

```emacs-lisp:~/.emacs.el
(global-set-key (kbd  "C-x C-]") 'all-indent) 
```

    
以上で、"all-indent"を"C-x C-]"のキーバインドで実行することができるように設定できた。
(割り当てるキーバインドは個人の好みで変えてよい。)
   

##3. 設定の反映
emacsを再起動させるか、`M-x eval-buffer`で設定を更新する。




以上で、"C-x C-]"により「カーソルを移動させないまま全行のインデントを整える」ことができるようになりました。

#参考URL

 - http://d.hatena.ne.jp/rubikitch/20081230/pointundo
 - http://blog.livedoor.jp/anchorblues/archives/1036270369.html
【開発効率UP】Xcodeのスニペットで楽をしよう【Xcodeワザ】


##スニペットの追加方法

よく使うコードはスニペットを利用すれば楽になります。

スニペットの作成方法は以下の画像の通り

![c9330227404411a07b8f863c6d96b417.png](https://qiita-image-store.s3.amazonaws.com/0/4647/a73423fd-81ff-e47e-704e-79a6da48d29d.png "c9330227404411a07b8f863c6d96b417.png")

↑の画像のように"Section Name"を選択できるようにするには

```
<# Section Name #>
```

と書けばOKです。

ドラッグすると以下のように色々設定できます。

![スクリーンショット 2015-08-06 17.53.49.png](https://qiita-image-store.s3.amazonaws.com/0/4647/5986088f-fffd-f21a-a731-9b56bc6186cd.png "スクリーンショット 2015-08-06 17.53.49.png")

これで今後は```mark```と打ち込むだけで以下のように補完されるようになります。

![スクリーンショット 2015-08-06 17.56.10.png](https://qiita-image-store.s3.amazonaws.com/0/4647/793957f0-7cf1-6db5-ea82-4fe6f334fa92.png "スクリーンショット 2015-08-06 17.56.10.png")

ここでは```// MARK: - <# Section Name #>```を登録しましたが、他にも工夫次第で大幅な効率アップが見込めると思います。

##チーム・他のマシンで共有

せっかく登録したスニペットが１つのマシンでしか使えないのはもったいないですね。

Xcodeに登録したスニペットは

```
~/Library/Developer/Xcode/UserData/CodeSnippets/
```

に保存されているのでこのディレクトリを共有すると便利だと思います。

共有にはgitやdropbox(MacDropAny)を利用するといいかもしれないですね。


このようにスニペットを使って楽して開発しましょう！
Supervisorメモ（完全に自分用） #Erlang

# 公式ドキュメント
http://www.erlang.org/doc/design_principles/sup_princ.html

# shutdown
```erlang
-type shutdown() :: brutal_kill | timeout().
```

## brutal_kill
直ぐに `kill`
```erlang
exit(Child, kill)
```

## Timeout::integer()
1. `exit(Child, shutdown)`
2. （Timeoutミリ秒待つ）
3. `exit(Child, kill)`

## infinity
ずっと待つ

子プロセスがSupervisorの場合、 `infinity` で良い。
（ _子プロセスがWorkerの場合は気を付けなければならない_ ）

---

ChildSpecをmapで指定しshutdownを省略した場合のデフォルト値は
1. typeが `worker` の場合は `5000`
2. typeが `supervisor` の場合は `infinity`

# supervisor:terminate_child/2
```erlang
-spec terminate_child(SupRef, Id) -> Result when
    SupRef :: supervisor:sup_ref(),
    Id :: pid() | supervisor:child_id(),
    Result :: ok | {error, Error},
    Error :: not_found | simple_one_for_one.
```

この関数を実行すると、 `shutdown` の指定に従って停止される。

`Id` の値は `simple_one_for_one` **以外** の場合は `supervisor:child_id()` (not `pid()` )、
( `pid()` を指定すると `{error, not_found}` が返る）
`simple_one_for_one` の場合は `pid()` を指定する
( `supervisor:child_id()` を指定すると `{error, simple_one_for_one}` が返る)
(エラーの内容が対称的ではないのが悲しい…)

# simple_one_for_one の停止
`simple_one_for_one` のSupervisorで子プロセスを停止させる場合は `supervisor:terminate_child(SupRef, Id).` を実行する。

この場合の `Id` は `pid()` しか使えない。
（ `child_id()` （のようなもの）を使おうとすると `{error, simple_one_for_one}` が変える。）

`simple_one_for_one` の場合は `supervisor:terminate_child(SupRef, Id)` した時点でSupervisorからChildSpecが削除される
（ :left_right_arrow: `supervisor:delete_child(SupRef, Id)` を呼ぶ必要がない）
（ちなみに、delete_childの `Id` はterminate_childの `Id::pid()|supervisor:child_id()` と違い `Id::child_id()` である。 `simple_one_for_one` の時に `terminate_child` と `delete_child` のどっちを呼んだらいいか迷った時はこの辺りをイメージしてみればわかるかもしれない（逆もまた然り））
ChoregrapheからWatsonを使用してみる

PepperからWatsonサービスを利用し、翻訳や質問に対する回答などができたら素敵だろうな、という期待を持ってChoregrapheからWatsonを使用してみました。

現状ではPepper実機での確認は行っておらず、Choregrapheのバーチャルロボット上での確認のみです。

#1. 目的
Choregraphe上でWatsonサービスを使用する。
Watsonの使用感(反応速度や精度)を確認する。

#2. 準備
Watsonサービスを利用するためには[IBM Bluemix](http://www.ibm.com/cloud-computing/jp/ja/bluemix/)に登録してアカウントを取得する必要がありますので、こちらを取得している前提とします。

#3. IBM Bluemix
![Screen Shot 2015-08-06 at 15.37.22.png](https://qiita-image-store.s3.amazonaws.com/0/70456/331e7dbc-fd2b-e320-ffc0-c6c78a8c18ac.png)
Bluemixにログイン後、*ダッシュボード*から*スペースの作成*を行います。その後、*サービス&API*メニューより使用するサービスを登録します。

![Screen Shot 2015-08-06 at 15.55.55.png](https://qiita-image-store.s3.amazonaws.com/0/70456/778fba85-3643-279c-d4a3-d168ece935b0.png)
[非常に興味深いサービスばかり](http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/services-catalog.html)ですが、今回は**Language Translation**と**Question and Answer**の2つを試してみたいと思います。どちらも現時点のPepperの機能としては備わっていないものですので、もし使うことができれば、アプリのアイデアの幅がとても広くなることが期待されます。

![Screen Shot 2015-08-06 at 16.24.55.png](https://qiita-image-store.s3.amazonaws.com/0/70456/c19ef71a-eee6-6829-40ef-e6883841d6c2.png)
サービスを選択後、右側フォームからサービスの追加を行います。フォームはデフォルトの内容から特に変更しておりません。

![Screen Shot 2015-08-06 at 16.28.49.png](https://qiita-image-store.s3.amazonaws.com/0/70456/bad1a5b4-f31a-c7dc-d31a-9e3646354d81.png)
ダッシュボードから先ほど追加した使用するサービスを選択し、ページ左側の*サービス資格情報*を確認すると、サービス使用に必要なurl、username、passwordの情報を取得することができます。
また、このページではサービスのデモや、開発者向けの資料も見ることができます。開発者向け資料は残念ながら現時点で英語のみとなっておりますが、開発にあたり**API explorer**、**API reference**は見ておく必要があるかと思います。

以上で、必要最低限の情報が揃いました。

#4. Choregrapheにて
まずは**Language Translation**をテストします。
Choregrapheの`root`上に`Python script`ボックスを配置し、`onInput_onStart`内に以下を記述します。
なお、こちらは英語をアラビア語に翻訳する内容となっています(残念ながら日本語は現時点では使えません･･･)。

```
user="取得したusername"
pswd="取得したpassword"
target = "ar"
string = "Good morning, Pepper."
        
###Set the url###
url="https://gateway.watsonplatform.net/language-translation/api/v2/translate?source=en&target="+str(target)+str("&text=")+str(string)

###Send the request###
r = requests.get(url ,auth =(user,pswd))
### print the result###
NewText= r.text
final= NewText.encode('utf-8')
self.tts.say(str(final))
```

また、json、requests、unidecodeあたりの必要なモジュールを事前にインストール、インポートしておく必要もあります。

こちらを実行すると、、、
![Screen Shot 2015-08-06 at 16.53.51.png](https://qiita-image-store.s3.amazonaws.com/0/70456/f8b1cc50-854f-2236-bf1e-f7f56beaa66c.png)
翻訳してくれました！

正しく翻訳されているのかは全くわかりませんが、アラビア語のわかるスタッフに聞いたところ正しいとのこと。
(もう少し複雑な文章になると、間違ってはいないのだけれどちょっと違和感があるらしいです)

ちなみにChoregraphe上では1秒前後で翻訳文が取得できました。


ただ、この後試した**Question and Answer**は結果を正しく取得することはできたのですが、なぜか同じ操作を行う(もう一度結果を取得しようとする)とChoregrapheがフリーズしてしまうという現象が起こってしまいました。原因がChoregraphe、Watsonのどちらにあるのかは不明です。また1回目の取得にも質問によっては30秒近く時間がかかったりします。
**Question and Answer**は現時点ではhealthとtravelのカテゴリについてしか質問ができないので、これからの進化に期待したいところです。

#5. まとめ
とりあえず動くところまでは確認が出来ましたので、今後のバージョンアップに注視しつつ他のサービスを試していきたいと思います！
Phalconのmigrate generateでBIGINTが認識しない

> Phalcon (2.0.6)
> Phalcon DevTools (2.0.6)
> の時の内容です。

* * *

# 症状

Phalcon+MySQL(MariaDB)を使って、まずは初期設定をしようかと`migrate generate`を実行しようとしたら、BIGINTが認識しませんでした。

```sh
$ phalcon migration generate
Error: Unrecognized data type 14 at column hoge_id
```

# なぜ？

[Phalcon v2.0.4でBIGINTは対応した](https://blog.phalconphp.com/post/phalcon-2-0-4-released)ように見受けられるのに何でだろう…
と、もう少し調べてみると、どうも**devtools**側がまだBIGINTに対応していなくて、[開発版のbranchだと対応した](https://github.com/phalcon/phalcon-devtools/commit/06f38d91e99e0bcf01fb8db144a0158bd4c01ad0)、という感じのようなので、そちらを利用してみました。

# 開発版をインストール

git cloneの先を開発ブランチに変更してしまえばOKです。

```sh
$ git clone -b 2.0.x git://github.com/phalcon/phalcon-devtools.git
$ cd phalcon-devtools/
$ . ./phalcon.sh
Phalcon Developer Tools Installer
Make sure phalcon.sh is in the same dir as phalcon.php and that you are running this with sudo or as root.
Installing Devtools...
Working dir is: /home/vagrant/phalcon-devtools
Generating symlink...
Done. Devtools installed!

$ phalcon migration generate
Success: Version 1.0.0 was successfully generated
```

# 他には？

LONGTEXTはまだ対応していない様子。エラーは出ないけど、`migrate generate`のタイミングでTEXTに変化します。
SceneKit + blenderで作成したdaeファイルにて、任意のタイミングでanimationを行う

SceneKitを最近触っています。
SceneKitとは、iOS/MacOS上で3D系の処理を行うことができるライブラリ群です。

SceneKitでblenderで作成したアニメーション付きのdaeファイルを読み込むと、ずっとアニメーションが実行されてしまい、止めることもできず悩んでおりましたが、
下記の通り、node用とanimation用のdaeファイルを別々に読み込むことで解決できたので、共有しておこうと思います。

### daeファイル読み込み
事前にanim_test.daeにアニメーション無しのnodeデータを、anim_test2.daeにアニメーションデータを作成しておきます。

```objc
    // node読み込み
    NSURL* urlOfNode = [[NSBundle mainBundle] URLForResource:@"art.scnassets/anim_test" withExtension:@"dae"];
    SCNSceneSource* sourceOfNode = [[SCNSceneSource alloc]initWithURL:urlOfNode options:nil];
    SCNNode* node = [sourceOfNode entryWithIdentifier:@"Armature" withClass:[SCNNode class]];
    
    node.physicsBody = [SCNPhysicsBody dynamicBody];
    node.physicsBody.restitution = 0.9;
    node.physicsBody.allowsResting = YES;
    node.position = SCNVector3Make(0, 0, 0);
    [_scnView.scene.rootNode addChildNode:node];

    // animation読み込み
    NSURL* urlOfAnimation = [[NSBundle mainBundle] URLForResource:@"art.scnassets/anim_test2" withExtension:@"dae"];
    SCNSceneSource* sourceOfAnimation = [[SCNSceneSource alloc]initWithURL:urlOfAnimation options:nil];

    id animationIndentifiers = [sourceOfAnimation identifiersOfEntriesWithClass:[CAAnimation class]];
    
    _animationArray = [[NSMutableArray alloc]init];
    
    for (id animationIndentifier in animationIndentifiers) {
        CAAnimation* animation = (CAAnimation*)[sourceOfAnimation entryWithIdentifier:animationIndentifier withClass:[CAAnimation class]];
        
        CAAnimationGroup* animationGroup = (CAAnimationGroup*)animation;
        animationGroup.repeatCount = 1;
        
        for (CAAnimation* animationTemp in animationGroup.animations) {
            animationTemp.repeatCount = 1;
        }
        
        [_animationArray addObject:animationGroup];
    }

```

### アニメーションの実行
下記でアニメーションが実行されます。

```objc
    for (CAAnimationGroup* animation in _animationArray) {
        [_scnView.scene.rootNode addAnimation:animation forKey:nil];
    }
```

できることはできましたが、SceneKit+blenderでは、animationごとにdaeファイルを用意する必要があるってことでしょうか。。
[WordPress] 単一記事を呼び出されたURLにより、異なるデザインテンプレートで表示する


※タイトルがわかりづらいという指摘をいただき修正しました

##「既存投稿を、特定のページ[[から]]開い場合のみデザインを変えたい」

というのが、やりたいこと。
つまり、投稿Singleでの閲覧に、複数のデザイン＝テンプレートを持つということ。

例えば、以下のレパートリーを、記事の項目を設定することなく利用可能となる。

* TOP→記事（普通に表示）
* iFrameで呼び出された場合、特定のデザインにする
* 「注目の記事」的なページからのリンクは、キラキラ演出する

## （一般的には必須ではない独自の）制約

- Getパラメータは利用禁止

- WP的なセキュリティホールとかは一旦気にしない。

- すでに数百の記事があり、どれを使うかは誰かの気分次第
	- いつどのデザインをいつ使うかはマークアップの人が自由に決められるようにする
		- サーバサイドエンジニアは関与しない
		- 記事投稿者も関与しない # 関与できない
		 
## 改修前の状態と課題
今からカスタム項目で何かを設定して回るのは現実ではないので、URLで解決を図りたいと考えた。

現状では、 カテゴリ＝"blog"、投稿ID＝"001" とした場合、
http://{domain}/blog/001.html で表示が可能。

通常のWP設定であれば、以下のやり方がエレガント

- http://doshiroutonike.com/web/wordpress/1034/

今回は、前述の制約：Getパラメータ禁止という制約でこの案は使えない。


## 解決

WPではデフォルトで、「存在しないカテゴリでアクセス」をした場合、投稿IDから逆引きして、redirectしてくれる。

- 例：/sonzaisinai/001.html ----> /blog/001.html 

つまりnot foundにならない。
これに応用して、以下で実現してみた。

```php:function.php
// テンプレート振り分け
function custom_template_include( $template ) {
    if (is_single()) {
        // ここはもっと効率良く書くべきだけどベタベタに書く。
        // ここでPHP的にURLを取得するのがポイント。WPの関数使うと、redirect結果になっていたり加工がはいっていることがある
        $parts = explode('/', $_SERVER['REQUEST_URI']);
        if (count($parts > 2)) {
            if ($parts[count($parts) - 2] == 'sonzaisinai') {
                $new_template = locate_template(array('single-sonzaisinai.php'));
                if ($new_template != '')
                    return $new_template;
            }
        }
    }
    return $template;
}
add_filter('template_include', 'custom_template_include', 99);

// 前述の自動リダイレクトを切る
remove_filter('template_redirect', 'redirect_canonical');
```

思いつけば、結果は簡単だった。
これで、全く同様の投稿内容をURL次第で、利用テンプレートの切り替えが可能となった。

* /blog/001.html ・・・singleテンプレートで表示

* /sonzaisinai/001.html・・・single-sonzaisinaiテンプレートで表示

あとは、SEO的なことが気になれば、canonicalを設定したりで、Google先生に伝えれば良い。


# メモ

* 本当にこれで大丈夫かは検証中だけど、だいたい良さそう
* セキュリティリスクについては、最低限、ホワイトボックス的に縛ってあるので、問題ない気もしている

> if ($parts[count($parts) - 2] == 'sonzaisinai') {

* サイトによっては、本対応以上にリダイレクトを切るデメリットのほうが大きくなる場合がある

> remove_filter('template_redirect', 'redirect_canonical');
ローカルにあるアプリをAppium + SauceLabsでテストする

# はじめに
* [SauceLabs + AppiumでAndroidアプリのテストを走らせる](http://qiita.com/oh_rusty_nail/items/2190308df4fb406595f7)の続きです
* 上の記事の対象アプリはクラウド上に配置してあるアプリでした

```rb:sample-code/examples/ruby/android_on_sauce.rb
.
.
.
    {
      caps:       {
        :'appium-version' => '1.3.4',
        platformName:     'Android',
        platformVersion:  '4.3',
        deviceName:       'Android Emulator',
        app:              'http://appium.s3.amazonaws.com/NotesList.apk', #これです
        name:             'Ruby Appium Android example'
      },
      appium_lib: {
        wait: 60
      }
    }
.
.
.
```

* これを今手元にあるアプリに対してやってみようと思ったらすんなりできなかったので記事書きました！

# 対応前後の結果
## 失敗したときのSauceLabsの結果
![sauce_failed.png](https://qiita-image-store.s3.amazonaws.com/0/19778/cb9dfabc-4b68-5918-3a14-171726040608.png)

* プロトコルがぁ・・・といわれているので、ローカルじゃなくてどこかにあげてくれと！！
* さて、S3にでも置くか！とか考えたけど、そんなことしなくてもいいっていう手順を見つけてしまったので試してみました（後述）


## 成功したときのSauceLabsの結果
![sauce_sucess.png](https://qiita-image-store.s3.amazonaws.com/0/19778/ae376ae0-0ed0-741a-c9a6-dd2b0af3a2f0.png)

* キター！！！

# 対応
* [ココ](https://saucelabs.com/mobile/android-testing/android-test-automation)にある手順をやっただけでいけました
* 数行のコマンドですが、手順としては以下の通り

#### 1. APKファイルをZIP化
```$ zip -r my_app.zip MyApp.apk/```

#### 2. SauceLabsのストレージにアップロード
```
$ curl -u $SAUCE_USERNAME:$SAUCE_ACCESS_KEY -X POST "http://saucelabs.com/rest/v1/storage/$SAUCE_USERNAME/my_app.zip?overwrite=true" -H "Content-Type: application/octet-stream" --data-binary @my_app.zip
```

#### 3. テストコードに書いているアプリのパスを変更

```rb:sample-code/examples/ruby/android_on_sauce.rb
.
.
.
    {
      caps:       {
        :'appium-version' => '1.3.4',
        platformName:     'Android',
        platformVersion:  '4.3',
        deviceName:       'Android Emulator',
        app:              'sauce-storage:my_app.zip', # 手順２でアップロードしたファイルを指定
        name:             'Ruby Appium Android example'
      },
      appium_lib: {
        wait: 60
      }
    }
.
.
.
```

# アップロードしたアプリファイルの確認

```
$ curl -u $SAUCE_USERNAME:$SAUCE_ACCESS_KEY -X GET https://saucelabs.com/rest/v1/storage/$SAUCE_USERNAME
```

----

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
c++/c++11 > trueとfalseのforループ

実装中のもので以下のforループを作っていた

```cpp
bool isTop;
for(int top=0; top<=1; top++) {
  isTop = (top == 0) ? true : false; 
  ...
}
```

やりたいことは bool値を引数に取る関数にてtrue/falseを渡して両方のケースで実行すること。
上記の場合、topという変数が無駄だ。

<hr>
for文のtrue/falseループがないかと調べた。

http://stackoverflow.com/questions/8805161/how-to-write-a-for-loop-over-bool-values-false-and-true

C++11が使える環境では以下がわかりやすい。

```cpp
for (bool isTop : { false, true }) { /* ... */ }
```
Lightningでkeyupイベントのタイミングで入力された情報を取る方法

例えば、取得結果をフィルタする処理で、検索キーが入力されたタイミングで結果を表示させたい時にはテクニックが必要です

Lightning の\<aura:inputText>は、フォーカスを移動したタイミングで、変数の値が変更されるので、Keyupイベントで値を取得しようとするとブランクであったり、前回フォーカスされたときの値だったりと正しい値が取れません

また、HTMLの\<input type="text"/>は、描画されるタイミングでonKeyイベントの記述が削除されるので、イベントを発火させることができません

そういう時は、jqueryで取得すると正しい値が取得できることが分かりました
cpuidを使ってmodel nameを取得する

# はじめに

` cat/proc/cpuinfo` で出力されるvendor_idやmodel nameを、自分でcpuidを呼んで調べてみる。拡張インラインアセンブラ構文の確認と、C言語の可変長引数関数の自分用覚書。

# cpuid

cpuid命令の詳細はIntelウェブサイトの[日本語技術資料のダウンロード](http://www.intel.co.jp/content/www/jp/ja/developer/download.html)にある、「IA-32 インテル® アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル、中巻 A: 命令セット・リファレンス A-M 」にある。

例えばeaxに0を代入した状態でcpuid命令を発行すると、ebx, ecx, edxにそれぞれ"Genu"、"ntel"、"ineI"の文字列が入る(32bitレジスタなので4つのcharが入る)。これをebx、edx、ecxの順番に並べれば「GenuineIntel」となる。

model nameについては、eaxに0x80000002、0x80000003、0x80000004を入れてcpuidを呼ぶと、eax,ebx,ecx,edxに4バイトずつ情報が入ってくる。従って、model nameを得るには、合計3回cpuidを呼ばないといけない。

# インラインアセンブラ

cpuidを呼んだあとにeax,ebx,ecx,edxに入ってくる情報を変数にコピーする必要がある。これを拡張インラインアセンブラ構文でやる。例えばeaxに値を入れるところを、

```c++:
uint32_t v = 0;
asm("nop" :: "a" (v));
```
とする。asmの:の後が拡張構文で、これはeaxにvの値を代入せよ、という意味。
また、

```c++:
uint32_t a;
  asm("movl %%eax, %0" : "=r" (a));
```
とすれば、eaxの内容をaに代入できる。

まとめると、eaxにvの値を入れてcpuidを呼んで、eax〜edxの値を変数に読み出すところはこんな感じでできる。

```c++:
  uint32_t eax, ebx, ecx, edx;
  asm("nop" :: "a" (v));
  asm("cpuid");
  asm("movl %%eax, %0" : "=r" (eax));
  asm("movl %%ebx, %0" : "=r" (ebx));
  asm("movl %%ecx, %0" : "=r" (ecx));
  asm("movl %%edx, %0" : "=r" (edx));
```
# ソースコード

何度もcpuidを呼んで、eax〜edxの値を読み出し、文字列として出力するコード。

```c++:modelname.cc
//------------------------------------------------------------------------
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdarg.h>
//------------------------------------------------------------------------
void
cpuid(uint32_t v, uint32_t &a, uint32_t &b, uint32_t &c, uint32_t &d){
  uint32_t eax, ebx, ecx, edx;
  asm("nop" :: "a" (v));
  asm("cpuid");
  asm("movl %%eax, %0" : "=r" (eax));
  asm("movl %%ebx, %0" : "=r" (ebx));
  asm("movl %%ecx, %0" : "=r" (ecx));
  asm("movl %%edx, %0" : "=r" (edx));
  a = eax;
  b = ebx;
  c = ecx;
  d = edx;
}
//------------------------------------------------------------------------
int
put(int num, ...){
  va_list args;
  va_start(args,num);
  char buf[256];
  buf[num*4] = 0;
  for(int i=0;i<num;i++){
    uint32_t v = va_arg(args,uint32_t);
    memcpy(buf+4*i,(char*)(&v),4);
  }
  printf("%s",buf);
  va_end(args);
}
//------------------------------------------------------------------------
int
main(void){
  uint32_t eax, ebx, ecx, edx;
  cpuid(0,eax,ebx,ecx,edx);
  put(3,ebx,edx,ecx);
  printf("\n");
  cpuid(0x80000002,eax,ebx,ecx,edx);
  put(4,eax,ebx,ecx,edx);
  cpuid(0x80000003,eax,ebx,ecx,edx);
  put(4,eax,ebx,ecx,edx);
  cpuid(0x80000004,eax,ebx,ecx,edx);
  put(4,eax,ebx,ecx,edx);
  printf("\n");
}
//------------------------------------------------------------------------
```

手元のSandyBridgeマシンでの実行例。

```shell-session:
$ g++ modelname.cc
$ ./a.out
GenuineIntel
       Intel(R) Core(TM) i7-2700K CPU @ 3.50GHz
$ cat /proc/cpuinfo| grep Intel
vendor_id	: GenuineIntel
model name	: Intel(R) Core(TM) i7-2700K CPU @ 3.50GHz
vendor_id	: GenuineIntel
model name	: Intel(R) Core(TM) i7-2700K CPU @ 3.50GHz
vendor_id	: GenuineIntel
model name	: Intel(R) Core(TM) i7-2700K CPU @ 3.50GHz
vendor_id	: GenuineIntel
model name	: Intel(R) Core(TM) i7-2700K CPU @ 3.50GHz
```

できてるっぽい。
WordPressプラグインYARPPのrelated_posts()のテンプレート指定方法

## 前提

YARPP 4.2.4で動作確認

- mythemeをテーマとして使っている
- テーマディレクトリ直下にテンプレのファイルが置いてある 
- 例: /path/to/wordpress/wp-content/themes/mytheme/yarpp-template-myapp.php

## コード

```php
related_posts(array('template' => 'yarpp-template-myapp.php'));
```

YARPPの3系とかは下の指定方法だった模様。ググってヒットするものが下のような例ばかりで動かず、結局コードみた。

```php
related_posts(array('template_file' => 'yarpp-template-myapp.php'));
related_posts(array('use_template' => true, 'template_file' => 'yarpp-template-myapp.php'));
```

## 参考

古いoptionを新しい仕様に更新している箇所

```php
# wp-content/plugins/yet-another-related-posts-plugin/includes/yarpp_options.php

125     $new_options['template'] = $_POST['use_template'] == 'custom' ? $_POST['template_file'] :
126         ( $_POST['use_template'] == 'thumbnails' ? 'thumbnails' : false );
127     $new_options['rss_template'] = $_POST['rss_use_template'] == 'custom' ? $_POST['rss_template_file'] :
128         ( $_POST['rss_use_template'] == 'thumbnails' ? 'thumbnails' : false );
```
Windowsの色々な管理用ツールを「ファイル名を指定して実行」する

OSを Windows 10 にしたら、なぜか Hyper-V マネージャーがスタートメニューから行方不明になりました。
仕方ないので「ファイル名を指定して実行」する方法を調べ、ついでに他のツールの実行方法もいくつか調べたので、まとめておきます。
※ほかに追加した方が良いものがあれば、コメント等でご指摘ください

### コントロール パネル

```cmd
control panel
```

### コンピューターの管理

```cmd
compmgmt.msc
```

### サービス

```cmd
services.msc
```

### Hyper-V マネージャー

```cmd
virtmgmt.msc
```

### インターネット インフォメーション サービス (IIS) マネージャー

```cmd
inetmgr
```

### イベント ビューアー

```cmd
eventvwr
```

### SQL Server Management Studio

```cmd
ssms
```

### SQL Server 構成マネージャー

```cmd
SQLServerManagerXX.msc
```

※`XX`にはバージョン番号が入る（2008なら`10`、2012なら`11`、など)


### リモート デスクトップ 接続

```cmd
mstsc
```


### タスク スケジューラ

```cmd
taskschd.msc
```
urlからfile名を取得する


例えば、[http://www.piyo.com/foo/bar/hoge.png](http://www.piyo.com/foo/bar/hoge.png)のようなurlから`hoge.png`を取得したいとき

```javascript:sample.js
var url = require('url');
var link = 'http://www.hoge.hoge/foo/bar/hoge.png';
var file = url.parse(link).pathname.split('/').pop();
// hoge.png
```
EthereumをマイニングするためのDockerイメージ

`Ethereum`のマイニング環境を手っ取り早くつくるための`Docker`イメージを作りました。

* https://github.com/tumf/go-ethereum/blob/master/Dockerfile
* https://quay.io/repository/tumf/geth

> **NOTE**
> オリジナルの`go-ethereum`にも`Dockerfile`ついているんですが、意味不明な`supervised`してて気持ち悪いのと、最新版を入れるために`Apt`ではなくソースでインストールするために、今回別途作りました。


## 1. `geth`用のデータディレクトリをどこかにつくる

以下例として　/var/lib/geth/data

```
mkdir -p /var/lib/geth/data
```

## 2. (初回のみ)`geth`アカウントをつくる。

```
root@ubuntu:~# docker run -it -v /var/lib/geth/data:/data quay.io/tumf/geth account new
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase: 【パスワードを入れる】
Repeat Passphrase: 【確認のため上のパスワードをもう一回入れる】
Address: {etherbaseアドレス}
```
etherbaseアドレスは次項で使うのでメモっておく。

## 3. マイニングを始める

前項で生成した**etherbaseアドレス**を利用してマイニングを開始する。

```
docker run -d -v /var/lib/geth/data:/data quay.io/tumf/geth --etherbase "etherbaseアドレス" --mine　
```
fakerとforgeryを使ってダミーデータを生成する

#流れ

1. gemをインストール
2. githubにてデータを生成するためのメソッドを確認
3. seeds.rbファイルに記述
4. 生成（手順3を飛ばしてコンソールでの保存も可能だが、再利用ができないためおすすめはしない。）


#gemをインストール
まず、今回使用するgemをプロジェクト内にインストールするためにGemfileに以下を記述します。


```lang:Gemfile
gem 'faker'
gem 'forgery'
```


それから、ターミナルで`bundle install`を実行します。


```lang:ターミナル
$ bundle install
```




#メソッドを確認

次に生成したいデータを生成するためのメソッドをそれぞれのgemのgithubにて確認します。

[faker](https://github.com/stympy/faker#usage title: 'faker')
[forgery](https://github.com/sevenwire/forgery#full-list-of-methods title: 'forgery')

例えば、短文のダミーデータを生成したいとします。
その場合、`Faker::Lorem.sentence`を記述することで短文のダミーデータが取得できます。

```lang:ターミナル
$ rails c
[1] pry(main)> Faker::Lorem.sentence
=> "Ut totam ipsum sit sed ratione."
[2] pry(main)> Faker::Lorem.sentence
=> "Rerum numquam tenetur facilis incidunt aut pariatur ut in."
[3] pry(main)> Faker::Lorem.sentence
=> "Qui deserunt sit sit commodi consequatur harum ex sequi."
```


それぞれのメソッドがどんなものを生成するのか、コンソールで試すこともできます。

```lang:ターミナル
$ rails c
[1] pry(main)> Faker::Business.credit_card_number
=> "1211-1221-1234-2201"
[2] pry(main)> Forgery('date').day
=> 4
[3] pry(main)> Faker::Commerce.color
=> "purple"
```


#seeds.rbに記述
テストを行なうためのサンプルデータを追加したり、顧客データなどの既に用意されているデータを事前に追加しておく場合などに使います。

追加したいActiveRecord::Baseクラスを継承したモデルクラスとcreateメソッドを使用して、データベースにダミーデータを保存するための記述をします。




今回は、`usersテーブル`に100件のダミーデータを追加したいと思います。fakerとforgeryを適宜使用しています。





```rb:seeds.rb
100.times do
  User.create(email: Forgery('email').address, password: Forgery(:basic).password, nickname: Forgery('internet').user_name ,avatar: Faker::Avatar.image, place_id: Faker::Number.between(1, 100))
end
```


#生成


あとは、seeds.rbファイルを実行するためのコマンドを実行するだけです。


```lang:ターミナル
$ bundle exec rake db:seed
```

生成するデータの量によって終了までの時間が左右されます。**ユーザーデータ等データの重複が許されない場合、100件を指定しても重複するデータははじかれるため、100件分すべて生成されることはありません。ツイート情報のように重複があっても許される場合は100件生成されます。**
delegateでコールバックっぽい実装【Unity, C#】

## コールバックの実装
やりたいことはDipatcherクラスにメソッドを外部から登録して、Dispatcher自身で登録されたメソッドを呼び出すというイベントっぽい感じのことをやりたかったので、メモ。

## delegate
C#にはdelegate修飾子が存在します。(まだ完全に理解したわけではありません)
このdelegate修飾子をつけるとdelegateの型として宣言できます。

## Dispatcher
- コールバックメソッドを外部から登録できる
- 任意のタイミングでコールバックを呼び出す(今回は100フレーム経過後にコールバックを呼び出します)

```csharp:Dispatcher.cs
public class Dispatcher : MonoBehaviour {
	// delegateの宣言
	public delegate void MyCallback(string msg);
	// メソッドを格納する変数
	private MyCallback callbacks;
	// フレームカウンタ
	private int frame = 0;

	void Update () {
		// 100フレーム経過すれば登録されているメソッドを呼び出す
		if (frame == 100 && callbacks != null) // nullチェックを忘れずに
			callbacks ("dispatch");
		frame++;
	}

	public void addCallback(MyCallback callback) {
		// コールバックを登録します
		callbacks += callback;
	}
}
```
## Listener
- Dispatcherオブジェクトを知っている
- 自身のメソッドをコールバックとして登録する

```csharp:Listener.cs
public class Listener : MonoBehaviour {

	void Start () {
	// 今回はGameObjectにDispatcherスクリプトをアタッチしたので、Dispatcherオブジェクトを取得してきます
		GameObject
			.Find ("Dispatcher")
			.GetComponent<Dispatcher> ()
			.addCallback (temp);	// コールバックの追加
	}
	
	public void temp(string msg) {
		Debug.Log("on callback : " + msg);
	}
}
```

## 出力結果
100フレーム経過後に以下が出力されます。

```
on callback : dispatch
UnityEngine.Debug:Log(Object)
```
オブジェクトを関数の違い

関数もまた、広い意味ではオブジェクトの一種です。

オブジェクトという言葉には「対象」という意味があります。処理や操作の対象となり得るもの、という理解で良いと思います。整数型の単一の変数も、配列も、ポインタも、関数も、メモリ上にある事には変わりなく、メモリを書き換える事が出来れば操作可能なため、広い意味では、全てがオブジェクトです。

しかし、C などの古い言語では、関数内部を実行時に書き換える事が出来ません。関数はあくまで処理記述であって、「処理対象」や「操作対象」ではない、という思想です。

オブジェクト指向を取り入れた C++ や Java では、関数をクラスに包み込めば、そのインスタンスをメモリ上に生成し操作する事が出来ます。これらはクラスをオブジェクトとして取り扱える言語だからです。ただし、関数そのものを書き換える事は出来ません。
そして JavaScript では考え方が更に進み、関数は実行可能なオブジェクト、という扱いになっています。つまり、JavaScript では関数を書き換えていく事が出来ます。

つまり、もともと関数もオブジェクトではあるのだけれど、関数をオブジェクトとして扱える言語は、最近になって出現してきた、と捉えれば良いのではないかと思います。



関数とは、何らかの引数（ない事もある）を受け取り、何かの処理をして、何かの値を返す（ない事もある）、一連の処理の事です。オブジェクトとは文字通り「もの」です。数字、true/false、文字列、null/undefined以外のJavaScriptに存在するものはすべてオブジェクトです。JavaScriptでは、関数もオブジェクトのうちに入ります。

【関数】 は 「 機能 」 です。
【オブジェクト】 は 「 実体 」 です。

マッタク異なります。
NSDictionary

ありがちな覚え書きです。

# 未初期化

```objc
NSDictionary *dic;
NSLog( @"%@", dic );
```
```
(null)
```

# カラ1

```objc
NSDictionary *dic = @{};
NSLog( @"%@", dic );
```
```
{
}
```

# カラ2

```objc
NSDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:5];
NSLog( @"%@", dic );
```
```
{
}
```

# アクセス

```objc
NSDictionary *dic =
@{
  @"string":    @"ABCDE",
  @"05":        @"five",
  @-1:          @"minus(number)",
  @"1":         @"one",
  @99:          @"ninety nine",
  @"-1":        @"minus(string)",
  @"number":    @12345,
};
NSLog( @"%@", dic );
```
```
{
    string = ABCDE;
    05 = five;
    "-1" = "minus(number)";
    1 = one;
    99 = "ninety nine";
    "-1" = "minus(string)";
    number = 12345;
}
```

上のデータにアクセスします。

## 直接アクセス

```objc
dic[@"number"] // 12345
dic[@"string"] // ABCDE

dic[@-1]   // minus(number)
dic[@"-1"] // minus(string)

dic[@"1"] // one
dic[@1]   // (null)

dic[@"05"] // five
dic[@"5"]  // (null)
dic[@5]    // (null)

dic[@99]   // ninety nine
dic[@"99"] // (null)
```

## 変数でアクセス

### int i

```objc
i = -1; dic[@(i)] // minus(number)
i = 5;  dic[@(i)] // (null)
i = 99; dic[@(i)] // ninety nine
```

### NSNumber *n

```objc
n = @-1; dic[n] // minus(number) 
n = @5;  dic[n] // (null)
n = @99; dic[n] // ninety nine
```

### NSString *s

```objc
s = @"-1"; dic[s] // minus(string)
s = @"05"; dic[s] // five
s = @"5";  dic[s] // (null)
s = @"99"; dic[s] // (null)
```

# NSMutableDictionary

```objc
    NSMutableDictionary *mdic = dic.mutableCopy;
    mdic[@"number"] = dic[@"string"];   //変更(上書き)
//  mdic[@"string"] = nil;              //nilは落ちる
//  mdic[@"string"] = dic[@"hoge"];     //結果的にnilなので落ちる
//  mdic[@"string"] = NULL;             //当然NULLも落ちる
    mdic[@"05"] = [NSNull null];
    [mdic removeObjectForKey:@99];      //削除はこう書くしかない?
    NSLog( @"%@", mdic );
```
```
{
    05 = "<null>";
    number = ABCDE;
    "-1" = "minus(number)";
    1 = one;
    "-1" = "minus(string)";
    string = ABCDE;
}
```

# キーが存在しない


```objc
(mdic[@99] == mdic[@"05"]) = NO  //[NSNull null]と比較
(mdic[@99] == nil)         = YES
```

普通にnilです。

# nilなDictionary

```objc
NSDictionary *dic; dic[@"hoge"] // nil
((NSDictionary *)nil)[@"hoge"]  // nil
```

落ちません。nilです。
スクリプトなどの事前準備としてdirectoryとfileなどをがあるかどうかを確認するスクリプト

# 概要
何かをdeployするときとか、新しいスクリプトを動かすときとかに、設定ファイルや特定のdirectoryに依存しているということはよくある。それらを動かす前に一度fileやdirectoryがあるかを確認して、なければdirectoryを作成する、というような事前準備のスクリプトをよく作る。

# スクリプト
```bash
#!/bin/bash

CHECK_SUCCESS=0

confirm_mkdir()
{
while read -p "Do you mkdir? [y/n] " ANS ; do
        case $ANS in
                [Yy]* )
                        echo "mkdir -p ${CHECKED_DIRS[$n]}"
                        mkdir -p ${CHECKED_DIRS[$n]}
                        return 0
                ;;
                [Nn]* )
                        echo "Not to mkdir."
                        return 1
                ;;
                * )
                        echo "Please, answer yes or no."
                ;;
        esac
done
}

check_dir()
{
n=${#CHECKED_DIRS[@]}
n=$((n-1))

while [ $n -ge 0 ] ;
do
        if [ -d ${CHECKED_DIRS[$n]} ] ; then
                echo "Existing ${CHECKED_DIRS[$n]}"
        else
                echo "There is no ${CHECKED_DIRS[$n]}"
                confirm_mkdir
                CHECK_SUCCESS=1
        fi
        n=$((n-1))
done
}

check_files()
{
n=${#CHECKED_FILES[@]}
n=$((n-1))

while [ $n -ge 0 ] ;
do
        if [ -f ${CHECKED_FILES[$n]} ] ; then
                echo "Existing ${CHECKED_FILES[$n]}"
        else
                echo "!!!!!!! There is no ${CHECKED_FILES[$n]} !!!!!!!"
                CHECK_SUCCESS=1
        fi
        n=$((n-1))
done
}


check_success()
{
if [ $CHECK_SUCCESS -eq 0 ] ; then
        echo "SUCCESS!!  prepared to use."
else
        echo "NOT SUCCESS. Please, fix for mistakes and retry it."
fi
}


CHECKED_DIRS=( $APP_ROOT_DIR $CONFIG_ROOT_DIR $SCRIPT_OUTPUT_DIR $LOG_DIR)
CHECKED_FILES=( $APPLOG $STOP_APP $START_APP $CONFIG_FILE )

check_dir
check_files
check_success                                    
```

# 使い方
環境変数でpathを設定して、`CHECKED_DIRS`にdirectory、`CHECKED_FILES`にfileを並べるだけ
gitでwarning: suboptimal pack - out of memory Compressing objectsと出るときの対処法

Subversionのリポジトリをgitにconvertしようとしても
``$ git svn clone --trunk= --branches=branches --prefix=svn/ $SVN_REPO_URL``
リポジトリが巨大過ぎるとうまくいかない。

```
warning: suboptimal pack - out of memory
Compressing objects: 100% (xxx/xxx), done.
fatal: Out of memory, malloc failed (tried to allocate xxxxxxxx bytes)
error: failed to run repack
```
と出て失敗する。

対処法としては、packの単位とwindow memory(何者か不明）を小さくするとうまくいく。

``$ git repack -a -d --window-memory 10m --max-pack-size 20m ``
とすれば上手く行った。


参考
http://stackoverflow.com/questions/9040083/error-when-pulling-warning-suboptimal-pack-out-of-memory
AxAcroPDFLib.dllを使用する時に、間接的な参照が原因で、埋め込まれた相互運用機能(ry)の警告が出た時の対処法

# アセンブリ 'AxInterop.AcroPDFLib' からの間接的な参照が原因で、埋め込まれた相互運用機能アセンブリ 'Interop.AcroPDFLib' に対して参照が作成されました。両方のアセンブリで '相互運用機能型の埋め込み' プロパティを変更することを検討してください。

AcroPDF.dll関連を他人からもらったり、他のプロジェクトから拾ってきたりすると、上記の警告が出ることがある。

# 対処法
1. プロジェクトのプロパティ→参照から
AxAcroPDF.dll,AcroPDF.dll,AxInterop.AcroPDFLib.dll,Interop.AcroPDFLib.dll,Adobe Acrobat Browser Control Type Library 1.0 を削除する
1. bin/以下の上記であげた1.で参照から削除したdllをすべて削除する
1. フォームに貼り付けているPDFコンポーネントを削除する
2. ツールボックス→全般 の上で右クリックし、アイテムの選択をクリック
3. COMコンポーネントタブからAdobe PDF Readerを選択
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/48960/97f12c84-9bb9-6617-5a12-2f7090506957.png)
4. フォームに貼り付ける

これで警告がなくなる。

# アセンブリ 'AxInterop.WMPLib' からの間接的な参照が原因で、埋め込まれた相互運用機能アセンブリ 'Interop.WMPLib' に対して参照が作成されました。両方のアセンブリで '相互運用機能型の埋め込み' プロパティを変更することを検討してください。

PDFと同様の方法で解決できる。

# 参考文献
[DOBON.NET | MIDI、MP3などの音楽ファイルを再生する](http://dobon.net/vb/dotnet/programing/playmidifile.html#wmp)
Ubuntuの各種USBdeviceへの固有名称の設定方法

ROS on Ubuntu でUSB interfaceのセンサを使う場面がよくある，というかそればかりだ．
Packageでは対象となるデバイスが接続されているポート? (e.g. /dev/ttyUSB0) を指定する必要がある．
しかし，これらのポートナンバーはデバイス固有ではなく，USBに挿した順番によって変動する．
複数のデバイスを使用する際イロイロ面倒くさいので，デバイス固有の名前を付けたい．以下はその手順のまとめ．

#デバイス固有の情報を取得する
```udevadm info -a -n /dev/ttyUSB*```
このコマンドでイロイロ出てくる．-a -nとかのオプションに関しては知らぬ．
isVendor とか isProduct など，デバイス固有の情報が分かる．

#デバイス固有の名前を定義する
*/etc/udev/rule.d/* にユーザー定義の設定ファイルを作成する． (e.g. 71-device.rules)
**先頭の数字は優先順位だそうで．**
isVendor, isProduct product などのデバイス固有のキーと名前を記述する．
**デバイスを探し出すキーの項目(e.g. isVendor, isProduct, product)**は == で，新たに設定する項目は = で記述する．

```
ATTRS{idVendor}=="*XXXX*", ATTRS{idProduct}=="*XXXX*",ATTRS{serial}=="*XXXXXX*", ATTRS{product}=="FT232R USB UART", MODE="0666", SYMLINK="robotics/USB2Dynamixel"
ATTRS{idVendor}=="*XXXX*", ATTRS{idProduct}=="*XXXX*", ATTRS{product}=="USB-Serial Controller", MODE="0666", SYMLINK="robotics/Pioneer-3DX"
```
面倒だから，ここでアクセス権限についても記述する．(e.g. MODE="0666",読み書き可?)

デバイス関連のサービスを再起動
```sudo service udev restart```

以上．
NavigationViewでKitKatでもStatusBarを透過させる

## NavigationView なしの場合

support.v4.widget.DrawerLayout で Navigation 部分を ListView などで実装するパターンのことです。

この場合、以下のような設定で KitKat で StatusBar を colorPrimaryDark に指定した色に出来ます。

**values-v19/styles.xml**

```xml
  <style name="AppTheme"
      parent="Theme.AppCompat.Light.NoActionBar">

    <item name="colorPrimary">@color/brand_primary</item>
    <item name="colorPrimaryDark">@color/brand_primary_dark</item>
    <item name="colorAccent">@color/brand_accent</item>

    <item name="android:windowTranslucentStatus">true</item>

  </style>

```

## NavigationView ありの場合

support.v4.widget.DrawerLayout で Navigation 部分を support.design.widget.NavigationView で実装するパターンのことです。

この場合、**NavigationView なしの場合に設定したものに加え**、以下のような設定で KitKat で StatusBar を colorPrimaryDark で指定した色に出来ます。

必要なのは、 `android:fitsSystemWindows="false"` の記述でした。これが無いと単に半透明にしかなりません。

**activity_main.xml**

```xml
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    >
  ...

  <android.support.design.widget.NavigationView
      android:layout_gravity="start"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:fitsSystemWindows="false"
      app:headerLayout="@layout/header_layout"
      app:menu="@menu/navi_menu"
    />

</android.support.v4.widget.DrawerLayout>
```

## 参考にしたコード

[Navigation-Drawer-Android-Design-Support-Library / @Dahnark](https://github.com/Dahnark/Navigation-Drawer-Android-Design-Support-Library)
OpenShift上でAkka HTTP microservice exampleを動かす

ちょっとOpenShift試してみたいな〜
あ〜、でも使いたいFrameworkがDefaultでないな〜
なんかこう適当にやって動かないかなぁ…
みたいな人向け

Cartridgeってやつを作れば動くよ

というお話

[ここを隅から隅まで読めば](https://docs.openshift.org/origin-m4/oo_cartridge_developers_guide.html)多分大丈夫

「で、お前は読んだの？」と言われたら読んでませんと答えます

### Play Framework を動かす

[こんなところにPlay Framework用のcartridge置いてくれている人がいる](https://github.com/tyrcho/openshift-cartridge-play2)現実

こちらのチュートリアルとかに従えばplay2.3.0動かせると思います

なんかもう見えてきたと思いますが、playが動くなら…ねぇ…

### Play Framework用のcartridgeを流用する

上記のcartridgeの[現時点でのコードのこの辺](https://github.com/tyrcho/openshift-cartridge-play2/blob/dcd9cbc042a860576fd299a04f61b18419500d58/bin/control#L9)見ると`activator clean stage`とか見つかります

んで、[akka-http-microserviceのサンプル](https://github.com/theiterators/akka-http-microservice)の[plugins.sbt](https://github.com/theiterators/akka-http-microservice/blob/ba4d0822a4327227c127b566d82d369fa45e913b/project/plugins.sbt#L5)みると、`sbt-native-packager`が…

ということで[ちょっと手を加えればそのままサンプルが動くcartridge](https://github.com/daneko/openshift-cartridge-play2/compare/master...daneko:akka-http-template)が出来ました

まあ動かすだけなら…

[実際に動いているのがこっち](https://test2-daneko.rhcloud.com/ip/8.8.8.8)
(無料枠の関係上消すかもしれませんが…)


### まとめ

なお上記をそのまま使うと色々なところで`play`っていう単語に振り回されるので、ちゃんと使う前提なら冒頭のDocumentちゃんと読んでちゃんと作ったほうが良いと思います

でもまあなんか動いているこれらを見れば、別にplayやakka httpとかに限らず、（細かいことは兎も角として）なんでも動かせそうで便利そうですね

### memo

https://github.com/smarterclayton/cartridge-reflector#cartridge-reflector
Dockerでoverlayfs使おうっていったけど…

#Docker×overlayfs最強！

[ココ](http://qiita.com/Gin/items/60f887cd5281a387cf79)でいってましたが。


＿人人人人人人人人人人人人人人＿
＞　コンテナが起動できない！　＜
￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y￣


```
[root@~]# docker run --rm -v /var/run/docker.sock:/var/run/docker.sock     shipyard/deploy start
Pulling image: shipyard/rethinkdb
Starting Rethinkdb Data
error creating shipyard rethinkdb data container: 500 Internal Server Error: mkdir /var/lib/docker/overlay/fc25305836b9a8c28e373a060b4f6b0f3f3212c3d22579cb7c63d38db964304b-init/merged/dev/shm: invalid argument
```


##なんだこれー

現在進行形のバグでした

docker run fails with "invalid argument" when using overlay driver on top of xfs
[XFS上でoverlayを使用した時にdocker runがinvalid argumentで失敗する](https://github.com/docker/docker/issues/10294)


overlay+xfsで使用すると発生の可能性があるようです。


##理由は？

```
It is nothing magical, just that xfs does not support RENAME_WHITEOUT and RENAME_EXCHANGE. 

不思議じゃない、ただXFSが「RENAME_WHITEOUT」と「RENAME_EXCHANGE」をサポートしていないだけだ。
```

なんのことかよくわかりません…。
とりあえず、xfs+overlayfsは避けたほうが良さそうです。


##ext4にしてみる

```
[root@awcikc0a ~]# docker info
Containers: 1
Images: 20
Storage Driver: overlay
 Backing Filesystem: extfs
```

ダメだった

```
error creating shipyard rethinkdb data container: 500 Internal Server Error: mkdir /var/lib/docker/overlay/5653806c7445a5f0f319a380101e4d9ac3d599ee8a1b1be71be71defacbf5f24-init/merged/dev/shm: invalid argument
```

##ext3にしてみる

ダメだった

RHEL7.1の公式ではoverlayのbackend filesystemとしてext3~4とXFSしかサポートしていないので、overlayはいまのところ見送りになりそうです。

##btrfsを試す


```
[root@~ /]# mkfs -t btrfs -f /dev/mapper/docker-lvol0
[root@~ /]# mount /dev/mapper/docker-lvol0 /var/lib/docker

[root@~ /]# vi /etc/sysconfig/docker

=======================================================
OPTIONS='--selinux-enabled -s btrfs -g /var/lib/docker'
=======================================================

[root@~/]# systemctl start docker
[root@~/]# docker info
Containers: 0
Images: 0
Storage Driver: btrfs
Execution Driver: native-0.2
Kernel Version: 3.10.0-229.7.2.el7.x86_64
Operating System: Red Hat Enterprise Linux


```


```
[root@~]# docker run --rm -v /var/run/docker.sock:/var/run/docker.sock     shipyard/deploy start
Pulling image: shipyard/rethinkdb

5d3903bdef390ec2afb5bb1a7a0538ef040f45f8da77f1e9e9e41f5e1ef1bd35
```

こいつは、**行けた…！！**
とりあえずbtrfsを使おう。
jquery eachメソッドのコールバック関数に引数を渡す方法


elemクラスのdivがいくつか並んでいて、


```html
<div class="elem" id="1">
<div class="elem" id="2">
<div class="elem" id="3">
```



クリックしたらabcクラスをつけ、
そうじゃないdivからはabcクラスを外すような処理を書きたい場合に

```js
  $(".elems").click(function(){
    var arg = $(this).prop("id");
    $(".elems").each(function(){
       //処理
       // この中で argを読んでもundifinedになる　
    });
  });

```
と書くと、引数を渡すことが出来ない。
以下のようにクロージャにぶっこんでいやると引数を渡すことが出来る


```js
  var callbackMethod = function (id) {
    return function(index, element){
      var tmp_id = $(this).prop("id");
      if(tmp_id == id ){
        $(this).addClass("abc");
      }else{
        $(this).removeClass("abc");
      }
    };
  };

  $(".elems").click(function(){
    var arg = $(this).prop("id");
    $(".elems").each(callbackMethod(arg));
  });

```

jQueryだよりにコード書いてると辛い時があるよねってお話でした。
もっとクールに書く方法もきっとあるはず



ref: http://stackoverflow.com/a/23357268/4480860
CentOS7インストール覚え書き

#SELINUX無効化
* /etc/selinux/config


```
SELINUX=enforcing
```
を以下のようにする

```
SELINUX=disabled
```
disabledのスペルを間違えるとシステムが起動できなくなるので注意

#コンソールの解像度を変更する
```vmlinuz vga=773```[参照](http://linux.kororo.jp/cont/tips/console_vga.php)
#kickstartでepelリポジトリを参照する
```
repo --name=epel --baseurl=http://download.fedoraproject.org/pub/epel/7/x86_64/
```
[参照](https://gist.github.com/ralexandru/3143249)
#ntp
```
# systemctl start ntpd
# systemctl enable ntpd
```
#bind
```
# systemctl stop named
# systemctl disable named
# systemctl start named-chroot
# systemctl enable named-chroot

```

```# /usr/libexec/setup-named-chroot.sh /var/named/chroot on```
は```systemctl start named-chroot```の中で呼ばれているらしい。[参照](http://blog.system-act.com/article.php/centos7named_chroot)

##DNSSEC確認
```
# dig +dnssec @localhost [domain]
 （省略）
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48625
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
```
flagsにrdがあること

##古いカーネルの削除

```
# yum -y install yum-utils
# package-cleanup --oldkernels --count=1 -y
```

##uidとgidを500からにしたい
/etc/login.defsを編集する

```
UID_MIN 1000
GID_MIN 1000
```
となっているのでそれぞれ500に書き換える

##yum updateした後再起動が必要なサービスを調べる
```
$ sudo yum -y install yum-utils
$ sudo needs-restaring
```
input, textareaの初期値の色を変えて表示し、フォーカスでvalueを削除する。

## やりたいこと

* input タグのtextタイプに初期値を設定。
* 文字は薄い色の文字で表示をしたい。
* アクティブになると文字が消え、通常の黒文字で入力できる。
* フォーカスを解除すると、文字がなければ、デフォルト値を表示し、文字入力があれば、入力値をそのまま表示する。

## 設定
### htmlのサンプル
```html
<input type="text" name="keyword" id="keyword" value="hoge" />
```
### javascriptのサンプル
```js
$(document).ready(function(){
  var def_css   = {color : '#999999'};
  var focus_css = {color : '#000000'};
  var selector  = $('#keyword');

  //初期の色セット
  selector.css(def_css);

  //フォーカス時の色と値の変更
  selector.focus(function(){
    if($(this).val() == this.defaultValue){
      $(this).val('');
      $(this).css(focus_css);
    }
  })
  //フォーカス解除時の色と値の変更
  selector.blur(function(){
    if($(this).val() == this.defaultValue || $(this).val() == ''){
      $(this).val(this.defaultValue);
      $(this).css(def_css);
    };
  });
});
```

## 余談

実は、スクリプトを書かなくても、HTML5なら `placeholder` 属性を指定すると簡単にできる。

```html
<input type="text" name="keyword" id="keyword" placeholder="hoge" />
```
スクリプトでAssetを移動する際の注意


* AssetDatabase.MoveAsset() で移動させること。
System.IO.File.Move() で移動させると、metaファイルが追随してくれない。

* MoveAsset() にはファイルの拡張子を渡すこと

* MoveAsset() に渡すパスは "Assets/path/to/asset" 絶対パスは不可

```
AssetDatabase.MoveAsset("Assets/path/to/src", "Assets/Path/to/dst");
```
Descendant Selector (“ancestor descendant”)と Child Selector (“parent > child”)の挙動の違い

jQueryには様々なSelectorがありますが、__Descendant Selector (“ancestor descendant”)__と__Child Selector (“parent > child”)__の挙動の違いをご存知でしょうか。

Descendant Selectorを日本語にすると、子孫セレクタです。

以下のhtmlを例に子孫セレクタの説明をします。

```html
<ul class="topnav">
  <li>Item 1</li>
  <li>Item 2
  <ul>
    <li>Nested item 1</li>
    <li>Nested item 2</li>
    <li>Nested item 3</li>
  </ul>
  </li>
  <li>Item 3</li>
</ul>
```

子孫セレクタを使って、`$("ul.topnav li")`とすると、`<ul class=“topnav”>` 要素の範囲に定義されている全てのli要素が選択されます。
子孫なので、セレクタに指定した要素(祖先{ul.topnav})の子(li)が全て対象となるわけです。

Child Selectorを日本語にすると、子セレクタです。
子セレクタも上記のhtmlを例に説明します。

子セレクタを使って、`$("ul.topnav > li")` とすると、li要素のItem1、Item2、Item3が選択されます。
子なので、親要素(ul.topnav)の直属の子(li)しか対象にならないというわけですね。

Nested item 1〜3はul.topnavから見ると、子供の子供(孫)にあたるので、子セレクタの対象にはなりません。

サンプルを用意しました。
サンプルを見ると、挙動の違いを理解しやすいと思います。
http://codepen.io/shoyan/pen/oXmpyB/