OmniAICreator/Qiita-1.07M huggingface dataset:
MySQL5.6で-pオプションをつけてコマンド＆スクリプトを実行する時のWarningを回避する方法

　mysql5.6以後では、-pオプションをつけてmysql、mysqladmin、mysqldumpを実行する時、以下のWarningが表示されます。

```bash
$ /usr/bin/mysql -u root -ppassowrd -e 'SELECT * FROM information_schema.PROCESSLIST;'
Warning: Using a password on the command line interface can be insecure.
+--------+------+----------------+-----------+---------+-------+-----------+----------------------------------------------+
| ID     | USER | HOST           | DB        | COMMAND | TIME  | STATE     | INFO                                         |
+--------+------+----------------+-----------+---------+-------+-----------+----------------------------------------------+
| 122379 | root | localhost      | NULL      | Sleep   |  1462 |           | NULL                                         |
| 122393 | root | localhost      | NULL      | Query   |     0 | executing | SELECT * FROM information_schema.PROCESSLIST |
+--------+------+----------------+-----------+---------+-------+-----------+----------------------------------------------+
```

　実行はできるんですが、問題なのは、cronで動いている時、MAILTOが設定されると、この警告に引っかかって、メールが飛んできます。

　さらに起きた問題なのはzabbix監視です。
　例えば、zabbixでmysqlのプロセス数を監視するために、以下のスクリプトを作りました。

```bash
#!/bin/sh
PASSWORD="password"

PROCESS_COUNT=`/usr/bin/mysql -u root -p${PASSWORD} -N -e 'SELECT count(*) FROM information_schema.PROCESSLIST;'`

echo ${PROCESS_COUNT}
```

　zabbix上にはグラフで表示するように、データ型が数値（整数）であるアイテムを作成しました。
　![image](https://qiita-image-store.s3.amazonaws.com/0/57618/b23b6e23-2db7-cb16-069d-e4c806bcfa6d.png)

　zabbixからスクリプトを実行する時、当前「Warning: Using a password on the command line interface can be insecure.」が出ました。
　実行結果は数字ではありませんので、zabbixのアイテムのステータスが取得不可になり、正常に監視ができません。
　![image](https://qiita-image-store.s3.amazonaws.com/0/57618/09a13995-d667-2da7-4aee-0a401a94a1f0.png)

# 回避方法

　環境変数**MYSQL_PWD**を使います。

　上記のスクリプトを以下のように修正すれば、Warningが出なくなりました。

```bash
#!/bin/sh
PASSWORD="password"

PROCESS_COUNT=`MYSQL_PWD=${PASSWORD} /usr/bin/mysql -u root -N -e 'SELECT count(*) FROM information_schema.PROCESSLIST;'`

echo ${PROCESS_COUNT}
```

　もちろん、zabbix監視も動いて、グラフも生成されました。
　![image](https://qiita-image-store.s3.amazonaws.com/0/57618/d39e8fea-789c-bc90-9e7c-2b3d1ac7f622.png)

# 参考
http://yoku0825.blogspot.jp/2015/05/mysql-56-warning-using-password-on.html
Docker 1.8.1でdocker daemonを実行したらエラーになった際の対処

cgroup がマウント出来なかったみたいなエラーが出た際の対処

エラーログは以下

``` bash
$ sudo docker daemon
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock) 
INFO[0000] Option DefaultDriver: bridge                 
INFO[0000] Option DefaultNetwork: bridge                
INFO[0000] Firewalld running: false                     
WARN[0000] Your kernel does not support cgroup memory limit: mountpoint for memory not found 
WARN[0000] mountpoint for cpu not found                 
FATA[0000] Error starting daemon: Devices cgroup isn't mounted 
```

参考になったStackOverflow
http://stackoverflow.com/questions/32002882/error-starting-docker-daemon-on-ubuntu-14-04-devices-cgroup-isnt-mounted

`/etc/default/grub` の以下を編集する

```
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
```
Appiumを使って複数デバイスで実機テストする

# はじめに
* SauceLabsを利用してAndroidアプリのテストを動かそうとして、まずはテストを書いてみようと手元の環境Appium+Androidエミュレータ環境で試みました
 * [SauceLabs + AppiumでAndroidアプリのテストを走らせる](http://qiita.com/oh_rusty_nail/items/2190308df4fb406595f7)
 * [ローカルにあるアプリをAppium + SauceLabsでテストする](http://qiita.com/oh_rusty_nail/items/8de4ca3ae3a1373b0704)
* ところが動きがあまりにももっさりとしていたので実機で試してみたくなり・・・
 * 実機でやってみるとサクサクでした
* せっかくなので、一度に複数の端末で同じことやらせたいなと思い、やってみたので記録します

# 前提
* Appiumが利用出来る環境が構築していること
 * [ここ](http://qiita.com/oh_rusty_nail/items/2190308df4fb406595f7#appium%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89)に書いています
* adbコマンドが利用出来る
 * 上のリンクのチュートリアルどおりにやれば入ります

# 注意事項
* 以下の場合はAppiumを使ったデバイスとの通信ができませんので、はまらないようにしてください
    * デバイスにロックがかかっている
        *  => 解除してください
    * USBデバッグを無効にしている
        *  => ケーブル接続時に常に許可しますかと聞かれるので、そこで有効にしてください
        *  => メッセージが出なければ「設定」-> 「開発者向けオプション」からUSBデバッグを有効にしてください
        *  ※ 「開発者向けオプション」が表示されていない場合、「設定」-> 「タブレット情報」->「ビルド番号」と書かれた領域を7回連続でタップして"これでデベロッパーになりました！"と表示されたら設定に表示されるようになります

# やること
## テストスクリプト作成
* テストの中身については本記事では省略します

```rb:appium_test.rb
require 'rubygems'
require 'appium_lib'

capabilities = {
  'appium-version' => '1.0',
  'platformName' => 'Android',
  'deviceName'=> 'Android',
  'appPackage' => [パッケージ名],
  'appActivity' => [アクティビティ名]
}
port = ARGV[0].to_i
appium_lib = { server_url: "http://127.0.0.1:#{port}/wd/hub" }

Appium::Driver.new(caps: capabilities, appium_lib: appium_lib).start_driver
Appium.promote_appium_methods Object

## TEST ##

driver_quit
```

## 実行スクリプト作成

```rb:start_appium_test.sh
pkill -f 'appium' #Appiumのプロセスを終了する

DEVICES=(`adb devices | grep -e "device$" | sed -e "s/device//"`) # 現在接続しているデバイスのUUIDリスト
PORT=4723 # Appiumのデフォルトポート
DEVICE_COUNT=`expr ${#DEVICES[@]} - 1` # デバイス数
for i in `seq 0 $DEVICE_COUNT`
do
  # 接続しているデバイスの数だけAppiumを起動しておく
  # appiumコマンドだけで実行するとデフォルトポートで起動されますが、複数台ケーブルを接続していても1台しか動きません
  appium -p `expr $PORT + 2 \* $i` -bp `expr $PORT + 2 \* $i + 1` -U ${DEVICES[$i]} &
done

sleep 5 # Appiumが起動するまで少し待ちを入れておかないとまだ立ち上がってないよと怒られる

for i in `seq 0 $DEVICE_COUNT`
do
  ruby appium_test.rb `expr $PORT + 2 \* $i` &
done
```

----

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
目指せ蓮コラ！processingでつくるブツブツ画像


![hoge01.png](https://qiita-image-store.s3.amazonaws.com/0/84973/22efd629-6781-fba4-5f14-6c226c13ac11.png)

円を特定の範囲内でランダムに発生させ、円の半径に合わせて隣の円との距離かえています。


```lang:sketch.pde
ArrayList<Circle> circles = new ArrayList<Circle>();

float num = 450;

int min = 1;
int max = 100;
float bl=5;
Circle c = new Circle(new PVector(0, 0), (int)random(min, max));

void setup() {
  background(0);
  size(1200, 1000);
  smooth();
  noStroke();
  circles.add(c);
}

void draw() {
  background(0);
  frameRate(60);
  for(int i = 0; i < circles.size(); i++){
      Circle c = (Circle) circles.get(i);
      c.draw();
  }
  PVector newLoc = new PVector(random(width/2-num, width/2+num), random(height/2-num, height/2+num));
  int newD = (int) random(min, max);
  while (detectAnyCollision (circles, newLoc, newD)) {
    /* If the values do interect make new values. */
    newLoc = new PVector(random(width/2-num, width/2+num), random(height/2-num, height/2+num));
    newD = (int) random(min, max);
  }

  c = new Circle(newLoc, newD);
  if(circles.size() < 10000000){
    circles.add(c);
  }
}

boolean detectAnyCollision(ArrayList<Circle> circles, PVector newLoc, int newR) {
  for (Circle c : circles) {
    if (c.detectCollision(newLoc, newR)) {
      return true;
    }
  }
  return false;
}

void keyPressed() {
  if ( key == ' ' ) {
    save( "hoge.png" );
  }
}
```

```lang:Circle.pde
class Circle {
  PVector loc;
  int d;

  Circle(PVector loc, int d) {
    this.loc = loc;
    this.d = d;
  } 

  void draw() {
    float r = dist(loc.x, loc.y, width/2, height/2);
    float c = abs(cos(radians(r+frameCount)));
    float s = abs(sin(radians(r+frameCount)));
    fill(255);
    if (r < num) {
      ellipse(loc.x, loc.y, d, d);
    }
  }

  boolean detectCollision(PVector newLoc, int newD) {
    return dist(loc.x, loc.y, newLoc.x, newLoc.y) < ((d + newD));
  }
}
```
c++ builder XE4, 10.2 Tokyo > 複数のコンポーネントを選択する > Ctrlを押しながら領域を指定

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/26)
```

フォーム上の複数のコンポーネントを選択する方法はいくつかありそう。

以下の方法もあることを知った。
1. Ctrlを押しながら
2. マウス左クリックで領域を選択する

こうすると、その領域に入っている複数のコンポーネントを選択できる。

Shiftを押しながら１つ１つ左クリックしていくよりも使いやすい場合がある。
MacでMicrosoft MSSQL Serverにクライアントソフトを使って接続する


いくつかフリーソフトがありますが、今回はSQuirrelSQLを使って接続してみます。

## SQuirrelSQLのインストール
#### 1. 下記からjarファイルをDLします 
http://squirrel-sql.sourceforge.net/#installation

#### 2. 下記コマンドでインストールします

```
java -jar squirrel-sql-3.6-MACOSX-install.jar
```

#### 3. 下記画面でMSSQLと日本語化のオプションにチェックを入れます
![スクリーンショット 2015-08-20 12.47.52.png](https://qiita-image-store.s3.amazonaws.com/0/10532/e63aede5-9a76-023f-3d92-6943ead6a882.png "スクリーンショット 2015-08-20 12.47.52.png")

#### 4. 起動すると下記のようになります。MSSQLのところが赤のバツになっているはずです。
![スクリーンショット 2015-08-20 14.53.05.png](https://qiita-image-store.s3.amazonaws.com/0/10532/a9d5114f-040e-63af-a8fb-b9b88c0d6c86.png "スクリーンショット 2015-08-20 14.53.05.png")

#### 5. JDBCドライバーを下記からダウンロード  
* sqljdbc_4.0.2206.100_jpn.tar.gzをDLします(ChromeだとDLできないかも)  
http://www.microsoft.com/ja-JP/download/details.aspx?id=11774

#### 6. 適当なディレクトリに5でDLしたドライバーを解凍
```
tar -xf sqljdbc_4.0.2206.100_jpn.tar
```

#### 7. SQuirrelSQLでドライバーを読み込みます
①をダブルクリックし、Extra Class Pathを追加します
![スクリーンショット 2015-08-20 14.59.10.png](https://qiita-image-store.s3.amazonaws.com/0/10532/28e05293-08a8-1628-9066-5842c127e347.png "スクリーンショット 2015-08-20 14.59.10.png")

6で解凍したフォルダ内のsqljdbc4.jarを選択します
![スクリーンショット 2015-08-20 14.59.34.png](https://qiita-image-store.s3.amazonaws.com/0/10532/1470434b-a151-2027-3da4-04e9d97da6ab.png "スクリーンショット 2015-08-20 14.59.34.png")

#### 8. Mssqlへの接続を作成
1. Aliasesタブを選択
2. DriverでMicrosoft MSSQL Server JDBC Driverを選択
3. サーバーの接続情報を入力
![スクリーンショット 2015-08-20 15.05.31.png](https://qiita-image-store.s3.amazonaws.com/0/10532/818fddca-38e4-6ead-d27d-9c7a43e079f3.png "スクリーンショット 2015-08-20 15.05.31.png")

### 他のソフト
* RazorSQL 
ドライバーが必要なかったが、30日限定利用

* Oracle SQL Developer
Hello Laravel 5! しようとしたら一瞬つまづいた時の対応


# 作業
http://laravel.com/docs/5.1/installation
をチラ見しながら、Laravel 5 をセットアップ。
composer global でゲシゲシやったのは省略。
で、サンドボックス用のアプリケーションを作成してみた。

```ShellScript
laravel new laravel-sandbox
cd laravel-sandbox
php artisan serve
```

として、ローカルで立ち上げてアクセスすると、

```
Whoops, looks like something went wrong.
```

とか出てきてつらい。

原因は、ちゃんとインストールドキュメント読んでなかったからで、以下にちゃんと書いてあった。

```
To make this a cinch, Laravel utilizes the DotEnv PHP library by Vance Lucas.
In a fresh Laravel installation, the root directory of your application will contain a .env.example file.
If you install Laravel via Composer, this file will automatically be renamed to .env. Otherwise, you should rename the file manually.
```

なので、

```ShellScript

cp -p .env.example .env
php artisan key:generate
```

を実行して解決。

# 結論
いけるやろと思ってもちゃんとドキュメント読め。
EclipseでTypeScriptを認識してくれない事件

発端は、**TypeScriptファイルのカラーが背景色に埋もれて見えません事件**から。

##プラグインのVersionが1.0から1.5になっていた

MacbookのVM上のEclipse Keplerでは問題なかったのに
MacminiのBootCamp上のEclipse Keplerではなぜかうまく認識してくれないTypeScript。
深いグレー背景に文字が埋もれてしまって見えない。。

これでは仕事になりません。
と、設定やら見ていたんだげどなにもない。
そこで再起動してみたら、
**Node.jsがありませんことよ？**
と、エラーメッセージ。

「ありましてよ？」と、設定のTypeScriptから設定しなおしてもダメ。
**TypEcs**ってプラグイン入れたら、文字は見えるようになったけど
相変わらず「Node.jsはありませんことよ？」コール。

そんな状況でいただいた先輩のご助言は、
**TypeScriptのVersionは1.0じゃないとあきまへん。**

さすが先輩！と、早速とりかかる。
ところが、Ver1.0入れようにも、マーケットは1.0という名の1.5(笑)
なんどやっても1.5が入る(笑)

そんなわけで、試行錯誤して解決した方法はコレ▼。

##まさかのPulginフォルダガチほおりこみ(笑)

いいんかYO！
まさかまさかの、WPと一緒なのかYO...w

1. ヘルプ → Eclipseについて → インストール詳細 → インストール済みのソフトウェア から Type script(プラグインID:com.palanter.typescript)をアンインストール。
2. Ecripseを終了させる。
2. Ecripseフォルダ内のPulginの中にある"com.palantir.typescript_1.5.0.v20150727-0436"をデスクトップなどどこかに移動。
3. Type scriipt1.0の"com.palantir.typescript_1.0.0.v20140412-2313"フォルダをPulginフォルダに入れる。
4. Eclipseを -clean をつけて起動する。
5. プロジェクトを右クリックして、構成 → add TypeScript Supportをクリック。

##認識した！いいのかw 動くからいいかw

***
###ちなみに、プラグインはもう入れれない...

プラグインとしてTypeScriptは入れれなくなりました(笑)
1.5は削除しちゃったからもうないからね。
マーケットを見てると思いきや、Pluginフォルダを見てたのかよ。
と、残念な気持ちになりましたが、結果オーライだわ...(^_^;)
BLEnanoをセットアップする

BLE Nano という BLEを搭載した極小ボードをためしてみる。
mbed、Arduino、GCC などで開発が可能。

![redbearlab.png](https://qiita-image-store.s3.amazonaws.com/0/20773/4b5ffc64-7aa7-15a3-e435-439c5e729265.png "redbearlab.png")
http://redbearlab.com/

購入はスイッチサイエンスなどで。
https://www.switch-science.com/catalog/2003/


## mbed でやってみる

いままで mbed をさわったことなかったので、mbed でやってみる。
mbed はブラウザで動作するウェブIDEで開発する。
ブラウザでコーディングし、コンパイラすると .hexファイルが生成される。
これをマウントされた mbed に放り込んでインストールする。


### まずはmbedに登録する

https://developer.mbed.org/

とくに迷うことはないはず。


### BLE Nano用のIDEを開く
https://developer.mbed.org/platforms/RedBearLab-BLE-Nano/

ページ中の "Open mbed Compiler" を開く

![RedBearLab.png](https://qiita-image-store.s3.amazonaws.com/0/20773/90792ffb-5ec5-273e-67fb-d30da87b290d.png "RedBearLab.png")

IDEが開いたら、サンプルを読み込み。
メニューバーの "Import" を押下。

![import.png](https://qiita-image-store.s3.amazonaws.com/0/20773/fe0d0531-33b2-4daf-72af-c3247686df37.png "import.png")

mbed_blinky を選び、main.cpp を開く。

![open.png](https://qiita-image-store.s3.amazonaws.com/0/20773/fb1af32b-5d46-f3dd-9656-e378cf3f5ab8.png "open.png")

LED1 となっている箇所を、P0_19 に書き換える。

![write.png](https://qiita-image-store.s3.amazonaws.com/0/20773/22297123-cd85-2e77-2536-de2d6be0cede.png "write.png")

メニューバーの "Compile" でコンパイル。
完了するとファイルがダウンロードされるので、mbedにドラッグアンドドロップ。
これでインストール。

![install.png](https://qiita-image-store.s3.amazonaws.com/0/20773/d1e85852-e54b-4710-9f1d-1d6ef33393e1.png "install.png")

すると自動で再起動がかかり、BLE Nano のマウントが解除される。
最初、書き込みエラーが起きたのかと思ったが問題ない。

すごく気づきにくいが、BLE Nano の裏側をみると、LEDが点滅しているはず。
Lチカ成功！

![BLENano.jpg](https://qiita-image-store.s3.amazonaws.com/0/20773/81350534-b194-2237-a501-8cf0546ba9ed.jpeg "BLENano.jpg")
MonoDevelop(Unity)でComputeShaderのシンタックスハイライトを有効にする

## addinをダウンロード

ここのリンク先よりaddinをダウンロードする
http://forum.unity3d.com/threads/monodevelop-syntax-highlighting-for-compute-shaders.164982/

![test.png](https://qiita-image-store.s3.amazonaws.com/0/35267/75cbd58e-189a-25d4-dc88-87fe370ef774.png)


## addinのインストール

展開してできた.dllファイルの入ったフォルダを指定のディレクトリに配置する

**Windows7、MonoDevelop4** を使用している場合、

```csharp
%USERPROFILE%/AppData/Local/MonoDevelop-Unity-4.0
```
以下に配置する。実際の.dllファイルまでのディレクトリの構成は、以下のようになる。

```csharp
%USERPROFILE%/AppData/Local/MonoDevelop-Unity-4.0/LocalInstall/Addins/MonoDevelop.DirectComputeSyntax/MonoDevelop.DirectComputeSyntax.dll
```

**OS X** を使用している場合、

```csharp
~/Library/Application Support/XamarinStudio-4.0/LocalInstall/Addins
```

※ 一度MonoDevelopを起動しておかないと、MonoDevelop-Unity-4.0フォルダが生成されないので一度起動しておく
※ フォルダオプションで、隠しフォルダを表示するにチェックを入れておく

## MonoDevelopを再起動する

シンタックスハイライトがされるようになる、はず

![tesstt.png](https://qiita-image-store.s3.amazonaws.com/0/35267/9fb3a20e-a6f8-38ed-eb6f-4be317ed2788.png)
elastic beanstalkに属しているインスタンスをansibleで探す

tag使ったほうが１００倍簡単だったことに書き終わってから気づいたのですが供養のため

```
---
- name: hogehoge
  hosts: 127.0.0.1
  connection: local
  sudo: false

  tasks:
    - name: get autoscaling group name
      shell: aws elasticbeanstalk describe-environment-resources --environment-name environmentname \
        | python -c "exec(\"import json,sys\\nobj=json.load(sys.stdin)\\nfor group in obj['EnvironmentResources']['AutoScalingGroups']:\\n print group['Name']\")"
      register: asg
    - name: debug asg
      debug: var=asg
    - name: get instance ids
      shell: aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names {{ asg.stdout }} \
        | python -c "exec(\"import json,sys\\nobj=json.load(sys.stdin)\\ndef instanceId(i):\\n  return i['InstanceId']\\nprint ' '.join(map(instanceId, obj['AutoScalingGroups'][0]['Instances']))\")"
      register: group
    - name: debug group
      debug: var=group.stdout
    - name: get instances
      shell: aws ec2 describe-instances --instance-ids {{ group.stdout }} \
        | python -c "exec(\"import json,sys\\nobj=json.load(sys.stdin)\\ndef extractInstances(i):\\n  return i['Instances']\\ndef publicDnsName(i):\\n  print i['PublicDnsName']\\nmap(publicDnsName, sum(map(extractInstances, obj['Reservations']), []))\")"
      register: instances
    - name: debug instances
      debug: var=item
      with_items:
        - "{{ instances.stdout_lines }}"
```
iOSとAndroidで文字列をシンプルにAES暗号化する

iosとAndroidでAES暗号化を使ったのでメモ

# iOS
標準ライブラリが弱く、公開されているライブラリもなかなか痒いところに手が届かないものが多い。
そんななかベストだと思ったのがこちら

> Cocoaの日々
> [iOS] AES128暗号化ライブラリ FBEncryptor 公開
> http://cocoadays.blogspot.jp/2011/06/ios-aes128-fbencryptor.html

AES特化だけど、シンプルで使い易い
ARCに対応していなかったので、forkして対応させていただいた。
https://github.com/h-takenori/FBEncryptor


# Android
Android版は標準機能が若干まとも
こちらのを使わせてもらって、さっくり動作
> Hacking My Way ～ itogのhack日記
> Androidで文字列をAES暗号化、復号する
> http://d.hatena.ne.jp/itog/20120208/1328684770
ShellScriptでプロセスの存在チェック

# 概要

`ps aux | grep プロセス名 | grep -v grep | wc -l`を実行すると、プロセスが存在しない時は0、存在する時は0以上の値(プロセス数)が返ります。

# 例: ssh-agentが存在していない時は、ssh-agentを起動してssh鍵を登録するShellScript

```bash
# ~/.bash_profile

# githubの鍵を登録する
count=`ssh-add -L | grep github_office_rsa | grep -v grep | wc -l`
if [ $count = 0 ]; then
  killall ssh-agent
  eval "$(ssh-agent -s)"
  ssh-add ~/.ssh/github_office_rsa
fi
```
NSManagedObject を継承したクラスのプロパティで @dynamic を省略した場合の挙動

## 概要
以前に（うっかり）`NSManagedObject`を継承したクラスのプロパティに`@dynamic`ディレクティブを付けるのを忘れてしまったのですが、
`Property 'hoge' requires method 'hoge' to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation`
というような警告は出たものの、プロパティの読み書き、永続化は問題なく実行できました。

`@dynamic`、`@synthesize`をどちらも省略した場合は`@synthesize`を付けたときと同じように振る舞うはずなのに、
なぜこの警告が出るのか、また、なぜ`@dynamic`を付けた場合と同様に問題なく振る舞うのか不明だったので調べてみました。

## NS_REQUIRES_PROPERTY_DEFINITIONS
```

NS_CLASS_AVAILABLE(10_4,3_0) NS_REQUIRES_PROPERTY_DEFINITIONS
@interface NSManagedObject : NSObject {
@private
    int32_t             _cd_rc;
    uintptr_t           _cd_stateFlags;
    id                  _cd_rawData;
    id                  _cd_entity;
    NSManagedObjectContext* _cd_managedObjectContext;
    NSManagedObjectID*  _cd_objectID;
    uintptr_t           _cd_extraFlags;
    id                  _cd_observationInfo;
    id*                 _cd_snapshots;
    uintptr_t           _cd_lockingInfo;
    id                  _cd_queueReference;
}
```

`NSManagedObject` のヘッダを見たところ上記のようになっており、
`NS_REQUIRES_PROPERTY_DEFINITIONS`というマクロが使われています。
（`NS_REQUIRES_PROPERTY_DEFINITIONS`はiOS6.0 で追加されたようです https://developer.apple.com/library/ios/releasenotes/General/iOS60APIDiffs/）

このマクロのコメントに書かれた説明によると、

`// Marks classes that must specify @dynamic or @synthesize for properties in their @implementation (property getters & setters will not be synthesized unless the @synthesize directive is used)`

- `NS_REQUIRES_PROPERTY_DEFINITIONS` を使うと`@dynamic`または`@synthesize`の記述が必用になる
- `@synthesize`が書かれていない場合は getter も setter も生成されない

ということでした。

上記により[Dynamic Method Resolution](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html)の仕組みが働き、CoreData が動的に生成するアクセサが利用されるため、プロパティの読み書き、永続化は問題なく実行できた、ということのようです。
findで特定のディレクトリを除外


特定のディレクトリ(lib)を除外したファイルの一覧を取得

```bash:例1
$ find . -type d -name lib -prune -o -type f -print
```

特定のディレクトリ(lib)を除外して、ファイル名が"*.php"のものの一覧を取得

```bash:例2
$ find . -type d -name lib -prune -o -type f -name '*.php' -print
```

参考: [findコマンドで特定のディレクトリ以下を無視する方法 - mollifier delta blog](http://mollifier.hatenablog.com/entry/20090115/1231948700)
チェックボックスを一括で off にするjs(サービスのメール配信設定)

*メール購読を希望するものにチェックを入れてください*
:ballot_box_with_check: がｽﾞﾗｰ...
全てのチェックボックスをクリックするのも Tab, Space, Tab, Space...の連打も面倒なので, スクリプトに任せましょう


## 実行コード
```js
var inputs = document.getElementsByTagName('input');
for (var i = 0, l = inputs.length; i < l; i++) {
  if (inputs[i].type == "checkbox") {
    inputs[i].checked = false;
  }
}
```

コンソールを開いて上のスクリプトを実行

jQueryが使える場合は短くなる

```js
$('input:checkbox').removeAttr('checked')
```

## ブックマークレット
しかしこんなんいちいちコピペするのは面倒なので
ブックマークとして追加しておけばブックマークツールバーとかからワンクリックでいける
[ここを右クリックでブックマークとして保存](javascript:(function(){for(var%20inputs=document.getElementsByTagName("input"),i=0,l=inputs.length;i<l;i++)"checkbox"==inputs[i].type&&(inputs[i].checked=!1);})();)


## vimperator
vimpeartor 使っている人向けには簡易プラグインを作りました
checkboxall コマンドが使えるようになり引数で check, uncheck も選べます
好きなnmap に登録してお使い下さい
https://github.com/elzzup/vimperator-plugins/blob/master/checkbox_all.js



後から調べてたら範囲選択で一括チェックしたりなんてFirefox プラグインもあるそう (私は試してない)
http://mff2.blog109.fc2.com/blog-entry-921.html
Dockerで動かしたRedmineにBacklogプラグインを入れた

sameersbn/redmineをDockerで動かしてBacklogプラグインを入れた作業メモ
sameersbn/redmineのdocker hubに書かれているプラグインのインストール方法ではうまくインストールできなかったので、docker execで入れた。

普通にdocker上でRedmineを動かす。シェルスクリプトにまとめておくと便利

``` bash
#!/bin/sh

docker run --name=postgresql-redmine -d \
  --env='DB_NAME=redmine_production' \
  --env='DB_USER=redmine' --env='DB_PASS=password' \
  --volume=/srv/docker/redmine/postgresql:/var/lib/postgresql \
  sameersbn/postgresql:9.4


docker run --name=redmine -d \
  --link=postgresql-redmine:postgresql --publish=10083:80 \
  --env='REDMINE_PORT=10083' \
  --env='http_proxy=http://172.16.2.9:80' \
  --env='https_proxy=http://172.16.2.9:80' \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  sameersbn/redmine:2.6.6-1
```

一度Redmineにログインして、ストーリー用のトラッカーとタスク用のトラッカーを作る
両方とも、ワークフローは新規と進行中と終了だけでいい。

nokogiriを入れるためにパッケージを入れておく（必要ないかも？）

``` bash
docker exec -it redmine apt-get update -y && apt-get install -y ruby ruby-dev cpp gcc libxml2 libxml2-dev libxslt1-dev
```

docker上で作業する

``` bash
# ホストで実行
docker exec -it redmine bash

# ここからdocker上
bundle install --without development test
cd plugins
git clone https://github.com/backlogs/redmine_backlogs
cd redmine_backlogs/

# リリースされているタグを調べる
git tag

# 最新のにする
git checkout v1.0.6

cd ../../
RAILS_ENV=production
export RAILS_ENV
gem install holidays --version 1.0.3
gem install holidays

bundle update nokogiri
bundle install

bundle exec rake db:migrate
bundle exec rake tmp:cache:clear
bundle exec rake tmp:sessions:clear 

bundle exec rake redmine:backlogs:install 
# ここまでくるとストーリーにどのトラッカーを使うかと、タスクにどのトラッカーを使うか聞かれる
```

一度 `exit` でdocker上から抜けて、

```
docker stop redmine
docker start redmine
```

でプラグインが有効になる。
FreeBSD のアップグレード

## <i class="fa fa-paw fa-fw"></i>FreeBSD 10.2-RELEASE にアップグレード

あれ，以外にも早く「10.2-RELEASE」が出たようなので？アップグレードします．
今回は，「10.1」から「10.2」のマイナーバージョンのアップグレードなので，ports(pkg) の再構築は必要ないみたいです．

以前は，「make buildworld」などしていましたが，いつの間にか簡単にアップグレードできるようになっているみたいですね．「mergemaster」とか懐かしいです．

バックアップが終わったので更新しました．

## <i class="fa fa-leaf fa-fw"></i>最新の状態に
おそらく必要ないと思いますが，念のために最新の状態にしておきます．

```
# freebsd-update fetch
# freebsd-update install
# shutdown -r now
```

## <i class="fa fa-leaf fa-fw"></i>アップグレード
`upgrade` は時間が掛るので（回線のせいかな），時間があるときに仕込んでおきます．

```
# freebsd-update -r 10.2-RELEASE upgrade
# freebsd-update install
# shutdown -r now
```

カーネルとカーネルモジュールのパッチ後，システム全体のアップデートを行うようです．

```
# freebsd-update install
# shutdown -r now
```

## <i class="fa fa-leaf fa-fw"></i>ZPOOLのアップグレード
ZFS のバージョンが変わったようなので，zpool を更新します．

アップグレードが必要か確認します．

```
# zpool status
```

アップグレードの必要があれば，指示にしたっがて実行します．

```
# zpool upgrade zroot
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
# shutdown -r now
```
YOLPでライブ会場の検索する方法について

iPhoneアプリでYOLPのAPIを利用したスポット検索の機能を作成しています。

仕様としてはキーワード検索をして、YOLPでそれに該当もしくは類似した名称のランドマークを検索結果として表示させようと考えています。

実装は行ったのですが、この検索の際に「東京ドーム」「横浜アリーナ」「日本武道館」などの日本の有名なライブ会場を検索しても検索結果に出てきません

現在はYahoo!ローカルサーチAPIを使い、下記のような形でリクエストしてみています。
http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/localSearch?appid=アプリケーションID&query=東京ドーム


この検索として下記のような東京ドームを名称に含んだものは出てくるのですが、実際の「東京ドーム」自体が出てきません。
・せたが屋　東京ドームシティー店
・ピッツェリア マルデナポリ 東京ドームシティラクーア店
・東京ドームホテル 札幌 レストラン パティオ

これは何かリクエストする際のパラメータの問題でしょうか。
もしくは別のAPIを使用したほうがいいでしょうか。

ご回答頂けると幸いです。
未分類 > 謎のコード

http://arstechnica.com/information-technology/2015/08/calling-1959-from-your-web-code-a-cobol-bridge-for-node-js/

```cobol
0717 F00092 LF1823
0718 BF1940 000723
0719 F00087 LF1823
0720 BF1940 000728 (or 7Z8)
0721 R00803 U00740 (or D00740)
0722 K00000 C00803
0723 000000 U00738
0724 B01940 AH1823
0740 + 126 Instructions ...
```

上記リンク先の写真の黒板のコード。

左の0717などのはおそらくアドレスだろう。
中央の6文字はよくわからない。命令ではないだろうか。
右の数値もよくわからないが、000723などはアドレスではないだろうか。

黒板にはCOBOLと記載があるが、COBOLでもなさそう。
Material Design Liteでドロップダウンリストを使う

Polymerにはあるのに、Material Design Liteにないもの。まぁいっぱいあるんですが、あっても良さそうなものがドロップダウンリストです。

text inputのスタイルをそのまま使えばそれっぽいものが出ます。

```html
<div class="mdl-textfield mdl-js-textfield">
    <select class="mdl-textfield__input">
        <option>織田信長</option>
        <option>明智光秀</option>
        <option>毛利元就</option>
        <option>上杉謙信</option>
    </select>
</div>
```

Chromeはこんな感じ

![スクリーンショット 2015-08-20 12.38.59.png](https://qiita-image-store.s3.amazonaws.com/0/6105/98bd300c-9a5f-06d6-8245-4b668b425b8b.png)

Firefoxは横のボタンがちょっとダサい感じに

![スクリーンショット 2015-08-20 12.45.13.png](https://qiita-image-store.s3.amazonaws.com/0/6105/e595d909-f955-bbc2-9169-92ccaf4329ff.png)

Safariだと印影が入っちゃってちょっとMaterial Designっぽくなくなっちゃいますが、とはいえ、スタイルなしよりは他のコンポーネントと大きさがそろうのでマシです。

![スクリーンショット 2015-08-20 12.43.44.png](https://qiita-image-store.s3.amazonaws.com/0/6105/8d121927-62be-44f1-9445-07e505a8827b.png)

Material Design LiteはCDNでも提供されているので、jsfiddleで試せて良い感じですね。

http://jsfiddle.net/shibukawa/tghyxofc/
PHPコメントいろいろ

自分用メモです。
ほんと[マニュアル](http://php.net/manual/ja/index.php)は優秀ですね！
## [コメント](http://php.net/manual/ja/language.basic-syntax.comments.php)
```php
//======================================================================
// CATEGORY LARGE FONT
//======================================================================

//-----------------------------------------------------
// Sub-Category Smaller Font
//-----------------------------------------------------

/* Title Here Notice the First Letters are Capitalized */

# Option 1
# Option 2
# Option 3

/*
* This is a detailed explanation
* of something that should require
* several paragraphs of information.
*/

// This is a single line quote.
```
### コメントのオンオフを切り替える
最近はsublimetextのショートカットで済ませてしまうことが多いですが、覚えておくと便利なはず。

コメントアウト

```php
/*
if ($foo) {
  echo $bar;
}
// */
```
コメントを外す。
先頭の`/*`を`//*`にする

```php
//*
if ($foo) {
  echo $bar;
}
// */
```

### 2つのコードをスイッチする
```php
/*
if ($foo) {
  echo $bar;
}
/*/
if ($bar) {
  echo $foo;
}
// */
```
先頭にスラッシュを1つ入れるだけでスイッチ

```php
//*
if ($foo) {
  echo $bar;
}
/*/
if ($bar) {
  echo $foo;
}
// */
```
swf2jsでJavaScriptだけでswfを動的に合成してcanvasに出力する

* MingなどのバックエンドのツールではなくJavaScriptだけで動的に合成したい
* バックエンドの負荷を減らしたい
* S3などのグローバルなURLからデータを取得して合成したい
* グローバルな場所に保管できれば、データが新しくなる度にデプロイしなくてもよくなるはず


## サンプル

[動作サンプル](http://ienaga.github.io/swf2js/sample3.html)


## サンプルコード


```
<script type="text/javascript" src="swf2js.js"></script>
<script type="text/javascript">

// root作成
// width, heigth, fps, options[参照:https://swf2js.wordpress.com/api/]
var _root = swf2js.createRootMovieClip(240, 240, 30);

// 基本的にはFLASHのmethodと同名で実装
// 空のMovieClipを作成
var mc1 = _root.createEmptyMovieClip('MC1', 1);

// SWFを読み込む
mc1.loadMovie("SWFのURL");

// 後はよしなに
mc1.setProperty("_x", 120);
mc1.setProperty("_y", 30);
mc1.setProperty("_xscale", 50);
mc1.setProperty("_yscale", 50);


var x = 10;
// オリジナルのアクションはイベントとして追加
var onEnterFrame = function()
{
    this.setProperty('_x', x++);
    var width = this.getProperty('_width');
    if (x > 240)
        x = -width;
};

mc1.addEvent("onEnterFrame", onEnterFrame);

mc1.onClipEvent('press', function()
{
    this.delEvent("onEnterFrame");
    this.startDrag(true);
    this.setProperty('_alpha', 50);
});

mc1.onClipEvent('release', function()
{
    this.stopDrag();
    x = this.getProperty('_x');
    this.setProperty('_alpha', 100);
    this.addEvent("onEnterFrame", onEnterFrame);
});

// 複数設置が可能 divを指定
var _root2 = swf2js.createRootMovieClip(240, 240, 30, {tagId: "test"});
var mc2 = _root2.createEmptyMovieClip('MC2', 1);
mc2.loadMovie("SWFのURL");

</script>

<div id="test" style="width: 240px; height: 240px;"></div>

```

## 完成品

[ienaga/swf2js](https://github.com/ienaga/swf2js)


これで準備ができたので、いろいろゲームやWEBページをつくるぞー！！
Meteorで文字列をランダム生成する(Random)


Meteor には `Random` という文字列をランダム生成するのに便利な機能をもっているグローバルなオブジェクトが標準で用意されています(正確には random パッケージという形で提供されています)。

この記事では `Random` オブジェクトを用いた、文字列のランダム生成方法を紹介します。

なお `Random` オブジェクトはクライアント側、サーバー側両方で使用可能です。

# Random

## 文字列をランダム生成する: Random.id()

`Random.id()` メソッドでランダムな文字列を生成することができます。
生成される文字列は UNMISTAKABLE_CHARS(間違えにくい文字) のみで構成されています。

```javascript
// var UNMISTAKABLE_CHARS = "23456789ABCDEFGHJKLMNPQRSTWXYZabcdefghijkmnopqrstuvwxyz"；

Random.id();
//=> "mCAqfaKvP6s27g3bM"

Random.id();
//=> "iYwqBbQrKR9LonHtX"
```

ちなみに、`Random.id()` メソッドよりもランダム生成で使用される文字が少し多い `Random.secret()` というメソッドもあります。

```javascript
// var BASE64_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";

Random.secret();
//=> "H3HgyJzJjAccID6u1B19zrxtH6IIyYS0uxhYlZ5dDdr"

Random.secret();
//=> "M1BgpY6bIVK10jvN1BV47PMYn_aatKA0qGzn5H0TIv3"
```

## バイト数を指定して文字列をランダム生成する: Random.id(bytesize)

`Random.id()` メソッドの引数にバイト数を渡すと、その数だけランダムな文字列を生成してくれます。

```javascript
Random.id(40); 
//=> "TjpDEMnkx2zfiwMDyGff4iwBtTTGhwmb2BymdYod"

Random.id(40);
//=> "bdkorCFSqZKLXEkGiu2xkDBmqH46ewahpBpDydxp"
```

## シードを指定して文字列をランダム生成する: Random.createWithSeeds(seed).id()

ランダム生成の種(シード)となる文字列を `Random.createWithSeeds()` メソッドの引数に渡すことで、シードが同一であれば、毎回同じ文字列を生成できるようになります。

```javascript
Random.createWithSeeds("foo").id();
//=> "X4NSQq6HHL7X2yCF6"

Random.createWithSeeds("foo").id();
//=> "X4NSQq6HHL7X2yCF6" // シードが同一だと生成される文字列は毎回同じ

Random.createWithSeeds("bar").id();
//=> "zjKxYyFWnXJ3uyPJ4" // シードが異なると生成される文字列は変わる

Random.createWithSeeds("bar").id();
//=> "zjKxYyFWnXJ3uyPJ4"
```

もちろん、`Random.id()` メソッドの引数にバイト数を指定することも可能です。

```javascript
Random.createWithSeeds("foo").id(40);
//=> "X4NSQq6HHL7X2yCF6DEQ2wvNJBHLwxkSKSyfcEiv"

Random.createWithSeeds("foo").id(40);
//=> "X4NSQq6HHL7X2yCF6DEQ2wvNJBHLwxkSKSyfcEiv"
```

## 16進数文字列をランダム生成する: Random.hexString(digits)

`Random.hexString(digits)` メソッドは16進数で使用される文字(0123456789abcdef)だけで構成されたランダム文字列を生成します。引数の digits には生成する16進数文字列の桁数を与える必要があります。引数がない場合は、空文字列が返ってきます。

```javascript
Random.hexString(20);
//=> "0d86e920ff41b08fa076"

Random.hexString(20);
//=> "e102054eb42c0aa24e6f"

Random.hexString();
//=> ""  // 引数を与えない場合は空文字列
```

## [番外編] 0から1の間の数値のランダム生成する: Random.fraction()

`Random.fraction()` メソッドを使用すると、0から1の間の数値をランダム生成することができます。

```javascript
Random.fraction();
//=> 0.8381050589960068

Random.fraction();
//=> 0.5434659260790795
```

## [番外編2] 文字列または配列から要素を1つだけランダムに取り出す: Random.choice(stringOrArray)


`Random.choice(stringOrArray)` メソッドを使用すると、文字列または配列から要素を1つだけとりだすことができます。

```
Random.choice("abcdefg");
//=> "c"

Random.choice("abcdefg");
//=> "f"

Random.choice([1,2,3,4,5,6,7,8,9,10]);
//=> 6

Random.choice([1,2,3,4,5,6,7,8,9,10]);
//=> 10
```

よい Meteor ライフを！

# 参考

* random package - https://github.com/meteor/meteor/tree/master/packages/random
Dockerと密結合したプログラムのデバッグについて

Dockerと密結合したプログラムのデバッグをよく行うので、その時に使う方法のメモ。

1. Dockerと密結合したプログラムを実行する
    2. なにかエラーに成っても、コンテナを終了させないようなコードにしておく
3. `docker ps`してコンテナのidを調べる
4. `docker run -i -t CONTAINER_ID /bin/bash`
    5. コンテナを起動する
6. `su USERNAME`
    7. rootユーザから、Docker内でプログラムで使ってるユーザにswitch
8. 現状把握・デバッグ
    9. よく私がなっちゃうのはネットワーク系です。。`ping google.com`とかすると通らなくなってたりｗ

boot2dockerからdocker toolboxに上げたせいかわからないけれども、今日はうまくdockerから外部ネットワークに接続出来ていないので、後で検証してみよう。
openstack kilo Packstack でOSイメージがアップロードできなかった場合

学習目的で、openstackをCentOS7にPackstackを用いてインストールしたのですが、
OSイメージをアップロードする際に、ステータスが「Queued」から進行しませんでした。

調べてみると、kiloの既知のバグだったようです。

[Glance Image upload from dashboard stuck in queue state forever](https://ask.openstack.org/en/question/68812/glance-image-upload-from-dashboard-stuck-in-queue-state-forever/)

こちらで回答されていて、[この通り](https://git.openstack.org/cgit/openstack/horizon/commit/?id=78e9a997e4c6faf393d3bdaa3a043f1796aaa1bd)に

```
/usr/share/openstack-dashboard/openstack_dashboard/api/glance.py
```

を書き換えたところ、すぐにイメージのアップロードが完了しました。

Packstackのバージョンアップの方法が分からず直接書き換えてしまいました。

ところで、ダッシュボードからhttp経由でイメージをダウンロードする方法を選んだときも、
ダウンロードが一向に終わりませんでした。
こちらはバグではなさそうでした。ネットワークがうまく機能していないのでしょうか。
n日以上前に作成されたファイルを削除


たとえば、15日以上前に作成されたバックアップ("*.tar.gz")を削除する。

```bash:例
まずは対象を確認
$ find . -mtime +15 -name "*.tar.gz"

その後削除
$ find . -mtime +15 -name "*.tar.gz" | xargs rm
```
【初めてのEdison】まずは買わないと始まらない

いままで[Arduino](https://www.arduino.cc/)での電子工作が中心だったんですが、ちょっと試したいことがあって[Intel Edison](http://edison-lab.jp/edison/)を購入しました。切手サイズなんだって。1からのスタートなので一つづつ残しておこうかなと思い投稿します。今後も増えていくのかな?

# Intel Edisonってなんだ?
![module_hero_large.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/c3c17fc9-75a4-c0b6-7d78-509cebc22eff.jpeg)

ざっくり言うと小さなコンピューター。電子工作でいうとマイコン。こいつの特徴はすでにBluetoothとWi-Fiのモジュールが入っていて、すぐネットにつながる。Node.jsでもごにょごにょできるらしい? IoTにピッタリ! ってことで購入することに。でもこいつだけでは趣味で電子工作やっている人間には触りづらい。Arduinoと違ってGPIO(入出力ポート)簡単には使えないし電源だってどこに挿したらいいのやら。その辺りをうまくやってくれているボードがいくつかあるのでご紹介。

# ボード

## [Intel Edison Breakout Board Kit](http://edison-lab.jp/edison-breakout/)
![breakout_boardkit_hero_large.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/0b5e44f9-cd74-7de5-cb94-fa1ba7adbf30.jpeg)
これが一番メジャーなんじゃないかと思います。サイズもそこまで大きくなくUSBで電源を供給できるしPCからゴニョゴニョできる。値段も[スイッチサイエンス](https://www.switch-science.com/catalog/1957/)なら8,640円(2015/8/20現在)。でも僕はこれを買わなかった。一番の理由はGPIO(入出力ポート)などもろもろのポートがボード裏に大量にある(4×16個)のでなんか怖い。。。ということで断念。

## [Intel Edison Kit for Arduino](http://edison-lab.jp/edison-arduino/)
![kit_for_arduino_hero_large.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/6aed14fd-cf7e-3351-85b7-5e951e47fe46.jpeg)
僕はこっちを購入。さっきのに比べて大分大きくなってしまった。。。これが残念なところ。でもArduinoと同じポートも用意されているしUSBも3つ付いているしSDカードもさせるし。初めてのEdisonなのでやっぱりいろいろ実験したい! やりたいことでてきてパーツ買い足すのめんどくさい! ということで悩みつつも購入しました。

届いた箱を開けるとちらっと。
![1971343_1609658269295077_813444804_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/79b2b93d-c567-d6f1-92c4-ebbabaaeb8f0.jpeg)

## [Intel Edison Block](https://www.sparkfun.com/news/1589)
![EdisonBlock_4.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/742008a4-27ca-160d-5e55-3d01aff67b03.jpeg)

Facebookで教えてもらったボード。これが面白いところはセンサーとかモーターとかモジュールごとにボードがわかれていて連結できるところ。最初はこれもいいかも! と思って最後まで悩んだけどひと通りEdisonいじって作りたいものができたら購入して小型化しようかなと。

# まとめ
ひとまず購入しました! 届きました! はやく触りたい!次は電源入れてNode.jsまわりをごにょごにょできたらいいかなと。
Elasticsearchのstring fieldに対する各filterの挙動

個人的メモ

# 準備
```
$ curl -XPUT localhost:9200/test_idx/test_type/1 -d '{"test_str": "foo"}'
{"_index":"test_idx","_type":"test_type","_id":"1","_version":1,"created":true}
$ curl -XPUT localhost:9200/test_idx/test_type/2 -d '{"test_str": ""}'
{"_index":"test_idx","_type":"test_type","_id":"2","_version":1,"created":true}
$ curl -XPUT localhost:9200/test_idx/test_type/3 -d '{"test_str": null}'
{"_index":"test_idx","_type":"test_type","_id":"3","_version":1,"created":true}
```

# filtering
## exitis filter
```
GET test_idx/test_type/_search
{
  "filter": {
    "exists": {
      "field": "test_str"
    }
  }
}
```

```
{
   "took": 3,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 2,
      "max_score": 1,
      "hits": [
         {
            "_index": "test_idx",
            "_type": "test_type",
            "_id": "1",
            "_score": 1,
            "_source": {
               "test_str": "foo"
            }
         },
         {
            "_index": "test_idx",
            "_type": "test_type",
            "_id": "2",
            "_score": 1,
            "_source": {
               "test_str": ""
            }
         }
      ]
   }
}
```

## missing filter
```
GET test_idx/test_type/_search
{
  "filter": {
    "missing": {
      "field": "test_str"
    }
  }
}
```

```
{
   "took": 1,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 1,
      "hits": [
         {
            "_index": "test_idx",
            "_type": "test_type",
            "_id": "3",
            "_score": 1,
            "_source": {
               "test_str": null
            }
         }
      ]
   }
}
```

## term filter (by empty string)
```
GET test_idx/test_type/_search
{
  "filter": {
    "term": {
      "test_str": ""
    }
  }
}
```

```
{
   "took": 5,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 0,
      "max_score": null,
      "hits": []
   }
}
```
三角関数


![sincos.gif](https://qiita-image-store.s3.amazonaws.com/0/90023/91ce8875-5663-8e4d-7519-e150ac4b6365.gif "sincos.gif")

上図のように、半径rの円の円周上に点P(x,y)があり、線分OPとx軸のなす角をθとするとき、

```math
cos(θ) = \frac{x}{r} \\
sin(θ) = \frac{y}{r}
```

と定義する。

これは「定義」なので、そういうものだと覚えてしまうのがよい。そして、r = 1 として点Pを円周に沿って動かしたときのθとx,yの関係が、よく見るsin,cosのグラフである。

![sincos2.gif](https://qiita-image-store.s3.amazonaws.com/0/90023/84c9c0c4-5dc5-7eda-f51e-27f1e2de316d.gif "sincos2.gif")
いつか絶対に引っかかるというJavaScriptの予言が的中した

# 「ん? 変数の値が上書きされてる！」

>「あれー。なんかループの中のデータがおかしい！」とか、「ん？変数の値が上書きされてる！」とかいう事態が起きたら、この投稿を思い出してください。
>
> **予言しよう！あなたはいつか、この罠を踏む。**
>[いつかあなたが絶対に引っかかる、ある一つのJavaScriptの罠 - Qiita](http://qiita.com/ukiuni@github/items/463493a690265cec8bb7)

ついに引っかかってしまった。

```coffeescript
class Trap
  constructor: ->
    @prefix = '#btn-'
    @types = ['hoge', 'hage', 'fuge']
    @bind @types

  bind: (types) ->
    for type in types
      $(@prefix + type).click =>
        @setType(type)

  setType: (type) ->
    console.log "Set #{type}."
```

これを実行すると、どのボタンをクリックしても結果が`Set fuge.`になってしまう。

>よくある失敗の例だ。ループの中で関数を定義しているわけだが、ループ変数は関数の外部で定義されている。クリックしたときに実行する関数は、実行時に i を参照するが、それはループが終わったときの値だ。従って、今回の例の場合は3が表示される。
>[JavaScript のクロージャとループ、変数について | UB Lab.](http://www.united-bears.co.jp/blog/archives/1338)

# 回避方法

> ループ内で関数を定義していて、ループ変数の値を表示するには、関数を戻す関数を定義する必要がある。下記の例では、クリックしたときに実行される関数は、関数を戻しており、かつ、関数自体を呼び出すように指定して引数にループ変数を渡している。console.log で渡している引数は、最初の関数の引数と同じものを参照するので、ループしている間の i の値を表示することができる。

>```js
for(var i = 0; i < array.length; i++) {
    array[i].click((function(n) {
        return function() {
            console.log(n);
        }
    }).call(this, i));
}
```
>[JavaScript のクロージャとループ、変数について | UB Lab.](http://www.united-bears.co.jp/blog/archives/1338)

## これCoffeeScriptでどうやって書くの?

**2015-08-24 更新**

```coffeescript
bind: (types) ->
  for type in types
    do (type) =>
      $(@prefix + type).click => 
        @setType(type)
```
@pomutemuさんがコメントで綺麗な書き方を教えてくださったので、内容を更新しました! [codepenライブデモ](http://codepen.io/anon/pen/QbeLjq)

---

**以下旧版**
デザイナー崩れの脳味噌では上手く書けなかったので[便利なツール](http://js2.coffee/)に頼ることにした。

```coffeescript
bind: (types) ->
  for type in types
    $(@prefix + type).click ((t) =>
      =>
        @setType t
    ).call @, type
```
---

これで無事、ループ内の変数をコールバックの引数に渡すことができた。
度数とラジアン


角度の単位には日常よく使われる「度数」の他に「ラジアン」がある。

* 度数：一周で360°
* ラジアン：一周で2π

数学的な計算にはラジアンを使うことが多い。

プログラミングにおいてはどちらも使われる。数学的な関数の引数などにはラジアンが使われるのが一般的である。一方、角度を表示したり入力を求める場合などには度数が使われるため、相互変換が必要になる。

度数 D がラジアンでは R となる場合、次の[比例式](http://qiita.com/rakusan/items/4b07f02dfa7e66d2f535 "比例式")が成り立つ。

```math
D:360 = R:2π
```

従って 2πD = 360R であり、

```math
R = \frac{2πD}{360} \\
D = \frac{360R}{2π}
```

プログラミング言語によっては標準で変換関数があるので、その場合はそちらを使うとよい。
比例式


```math
x:y = a:b
```

このような比例式が成り立つとき、外側の値(xとb)を掛けたものと内側の値(yとa)を掛けたものが等しくなる。

```math
xb = ya
```

これがすぐに出てこない人が割といるように思うが、UIやゲームの開発では頻出である。

この式を x= あるいは y= のように変形して使うことが多いだろう。

```math
x = \frac{ya}{b} \\
y = \frac{xb}{a}
```
FileMaker - Webビューアにオブジェクトフィールドの画像を表示する

今回は、ローカルへの保存などをせずに直接Webビューアにフィールドデータとして保存した画像を表示する方法です。
動作サンプルとしてはこのように表示されます。
![sample1.png](https://qiita-image-store.s3.amazonaws.com/0/68589/b48b8e64-9068-17c9-1f47-e54ea49c9847.png "sample1.png")


通常、画像表示させるときのimgタグの記述は以下のように書きますが、今回はhtmlソース内に直接画像データを埋め込む表示方法を利用したTipsです。

```ファイル名を指定して画像表示.html
  <img src="xxxx.jpg">
```


直接画像データを埋め込む時の記述は以下のようにします。(jpeg画像の場合）

```インラインデータとして画像表示.html
 <img src="data:image/jpeg;base64,[base64にエンコードした画像のｺｰﾄﾞ]">
```

jpeg以外の場合は"image/jpeg"部分を以下のようにmimeタイプしていします。
gifの場合、"image/gif"
pngの場合、"image/png"

#Webビューアの設定
今回はWebビューアの設定に関する部分のみ説明します。

##画像のみ表示させる場合
この場合はimgタグは使用せずに、"data:image/jpeg;base64”から始まる記述のみをWebビューアのWebアドレス欄に以下のように記述します。


``` 画像のみ表示する設定
  "data:image/jpeg;base64," & Base64Encode (テーブルA::obj)
```
  上記の例ですと、テーブルAのobjという名前のフィールドデータが表示されます。
  ポイントはフィールドデータをBase64Encode関数によりエンコードしていることです。この関数はFileMaker13から追加されたので、それ以前のバージョンで実現したい場合は別途Base64関連のカスタム関数を探す必要があります。
  
##htmlドキュメントとして表示させる場合
この場合はimgタグのsrc属性にエンコードしたデータをWebビューアのWebアドレス欄に以下のように記述します。

``` htmlドキュメントとして表示する設定
"data:text/html," &
List (
	"<!DOCTYPE html><body>";
	"<p>オブジェクトをWEBビューアにインラインで直接表示させる</p>";
	"<img src='data:image/jpeg;base64," & Base64Encode (テーブルA::obj) & "' width='300'>";
	"</body></html>"
)
```

#注意点
この方法を利用すると、htmlのソース量がエンコードデータ分増加します。
そのため１つのWebビューアに複数画像を埋め込む場合や、大きな画像を表示する場合などは注意が必要かと思います。（大きな画像はエンコードデータ量も多いため）

説明は以上です。
今回のサンプルは以下の場所に置きましたので、詳しくはファイルを参照して下さい。
[サンプルファイル](http://it-komons.jp/filemaker/samples/InlineImage.zip)
package.json のチルダ(~) とキャレット(^)

バージョン指定でいっつもこいつの違いを忘れてしまって、npm とか semver のドキュメントを探すところから始まるから自分用のメモ。

* `^1.1.2` = `1.x`
* `~1.1.2` = `1.1.x`

(追記 一応↑は間違っていないのだけど、厳密にいうとちょっと間違っていた)

# チルダ表記 `~`

"明記したところ以下のバージョンがあがることのみ許容"

* `~1.1.2` = `1.1.2 <= version < 1.2.0`
* `~1.1` = `1.1.x` 
* `~1` = `1.x`

オリジナルの定義は、

> Allows patch-level changes if a minor version is specified on the comparator. Allows minor-level changes if not.


# キャレット表記 `^`

"一番左側にある、ゼロでないバージョニングは変えない (それ以下があがることは許容)"

* `^1.2.3` := `1.2.3 <= version < 2.0.0`
* `^0.2.3` := `0.2.3 <= version < 0.3.0`
* `^0.0.3` := `0.0.3 <= version < 0.0.4`

オリジナルの定義は

> Allows changes that do not modify the left-most non-zero digit in the [major, minor, patch] tuple.


# 余談

こんなことで悩むくらいなら最初から `1.2.x` とか `>=1.0.2 <2.1.2` とかみたいに書いておいたほうが圧倒的にわかりやすい。
許容されるのは↓の通り。

```json:docs.npmjs.com/files/package.json
{ "dependencies" :
  { "foo" : "1.0.0 - 2.9999.9999"
  , "bar" : ">=1.0.2 <2.1.2"
  , "baz" : ">1.0.2 <=2.3.4"
  , "boo" : "2.0.1"
  , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
  , "asd" : "http://asdf.com/asdf.tar.gz"
  , "til" : "~1.2"
  , "elf" : "~1.2.3"
  , "two" : "2.x"
  , "thr" : "3.3.x"
  , "lat" : "latest"
  , "dyl" : "file:../dyl"
  }
}
```


# 参考

* https://docs.npmjs.com/misc/semver#tilde-ranges-123-12-1
* https://docs.npmjs.com/files/package.json
* http://semver.org/spec/v2.0.0.html

本件ではどうでもいいけどこれも:

* http://tools.ietf.org/html/rfc2119
Elasticsearch本番環境構築のメモ

[Elasticsearch: The Definitive Guide](https://www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html)では、本番環境の構築についていろいろ詳しく書かれています。忙しい方のために、簡単に纏めました。

#基本的な考え方

まずメモリ容量について考えるでしょう。数百GBのサーバとAWSのt2.microのような1GBのサーバの両極があります。弱いサーバだと台数を増やさなければいけないが、クラスタ管理の手間、ノード間通信の負荷が増えます。あまりにも強いサーバだとCPUとメモリのバランスが取りにくいです。下記の図で示したように、真ん中の数十GBのサーバで組んだ数十台～数百台規模の構成がスイートスポットとなります。

![mem_server_sweetspot.png](https://qiita-image-store.s3.amazonaws.com/0/65589/ad014e02-62ea-06fe-58eb-c2b48b06c753.png)


#サーバスペック

Elasticsearchはメモリバウンドなので、メモリが重要です。そうはいっても64GB以上はいりません。CPUは普通のマルチコアでよいので、Hzが重要ではありません。LuceneはI/Oバウンドなので、ディスクが早いほうがよいです。RAID0は有効ですが、RAID10がいりません。

|項目  |ベリーグッド |グッド    |バッド   |
|:-------|:---------|:-------|:-------|
|メモリ    |64GB      |32GB、16GB |8GB以下|
|CPU     |2-8コア     |なし   |なし      |
|ディスク  |SDD、15k HDD |なし  |NAS      |
|ネットワーク|1Gb、10Gb |なし  |DC間      |

#設定の変更

以下いろいろ設定の変更を纏めましたが、詳しくは[Elasticsearch: The Definitive Guide](http://https://www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html)をご参照ください。


##設定ファイルの変更点

|項目  |推奨    |ディフォルト   |
|:-------|:---------|:-------|
|クラスタ名 |独自名前|elasticsearch   |
|ノード名 |独自名前|マーベルキャラ名   |
|データパース |複数フォルダ（ソフトウエアRaid0）|インストールフォルダ      |
|ログパース |インストールフォルダ以外|インストールフォルダ|
|プラグインパース |インストールフォルダ以外|インストールフォルダ|
|最少マスターノード数 |マスターノード数/2+1|1 |
|リカバリ制限|ノード数によって調整|recover_after_nodes=1, expected_nodes=2, recover_after_time=5m|
|ディスカバリー通信方式 |Unicast|Multicast |

##環境設定の変更点

|項目  |グッド    |バッド   |
|:-------|:---------|:-------|
|Java |Java 7（Oracle、OpenJDK）|Java 6      |
|ヒープサイズ |メモリの半分 AND 32GB以下|1GB|
|スワップ |禁止|有効|
|ファイル記述子数上限|64,000|1024|
|メモリマップ数上限|262144|65530|


##触ってはいけない設定

|項目  |デフォルト|
|:-------|:---------|
|GC|CMS|
|スレッドプール|CPUコア数|
なぜ List<T>.ForEach は使うべきでないか

今となっては <code>[List&lt;T&gt;.ForEach](https://msdn.microsoft.com/ja-jp/library/bwabdf9z%28v=VS.110%29.aspx)</code> メソッドは使うべきではありません。オレオレ `IEnumerable<T>.ForEach` 拡張メソッドも同様です。代わりに `foreach` 文を使用しましょう。

以下に理由を述べます。

* `continue`, `break` が使えない
* `yield return` ができない
* 非同期処理を待機、例外処理できない
* デリゲート呼び出しのコストがかかる

# continue, break が使えない

当然ではありますが `continue`, `break` 文が使えません。（<del>使いませんとか言わないでください</del>）

```csharp:できる
foreach (var x in xs)
{
    if (x == 0) break;
    Console.WriteLine(x);
}
```

```csharp:できない
xs.ForEach(x =>
{
    // if (x == 0) break; // break できない
    Console.WriteLine(x);
});
```

[継続を駆使して continue や break を使えるようにする方法も無くはない](http://bkuma.hatena.ne.jp/entry/linerlock.github.com/articles/2012-12-4.html)ですが、既に記事は消えてしまったようです。。。
（リンク先の記事、理解したかったのに理解する前に消えてしまった。。。）

まぁ、そこまでするなら素直に `foreach` 文使いましょう。

# yield return ができない

ラムダ式の制約で `yield return` ができません。
……ということではなく、そもそもラムダ式で `yield return` できたところで、それはデリゲート自体の戻り値を表すことになってしまうので、どちらにしても `yield return` ができません。

```csharp:できる
public IEnumerable<Hoge> GetHoges()
{
    yield return a;
    foreach (var x in xs)
    {
        yield return x;
    }
}
```

```csharp:できない
public IEnumerable<Hoge> GetHoges()
{
    yield return a;
    xs.ForEach(x =>
    {
        // yield return x; // できない（できたとしても意味が違う）
    });
}
```

# 非同期処理を待機、例外処理できない

処理に非同期メソッド呼び出しが含まれる場合は悲惨です。各要素に対する処理の部分はどうやっても `async void` にしかならない ⇒ 気付かず意図しない処理順で処理が実行されてしまう可能性があります。

```csharp:意図通り動く
await a.DoAsync();
foreach (var x in xs)
{
    await x.DoAsync();
}
await b.DoAsync();
```

```csharp:おそらく意図通りではない
await a.DoAsync();
xs.ForEach(async x =>
{
    await x.DoAsync();
});
await b.DoAsync();
```

後者は各要素の `x.DoAsync()` が並列に実行されてしまう可能性があります。また、全要素の処理が終わる前に `b.DoAsync()` 呼び出しが呼び出されてしまう可能性があります。

さらに、`x.DoAsync()` 呼び出しで例外が発生した場合、外側のコードを `try-catch` で囲っていても `catch` されません。

これらは `async x => await x.DoAsync()` が `async void` なメソッドになるためです（`ForEach` メソッドの引数は `Action<T>` なので戻り値は `void`）。`Task` が戻ってこないため待機も例外処理もできません。

`async void` の恐ろしさについては [asyncの落とし穴Part3, async voidを避けるべき100億の理由](http://neue.cc/2013/10/10_429.html) を参照してください。100億の理由が4500字足らずで説明されています。流石 neuecc 先生すごい。

# デリゲート呼び出しのコストがかかる

`foreach` 文に比べ、`ForEach` メソッドは各要素に対してデリゲートを呼び出すので多少のコストがかかります。

まぁそれがネックになるケースも少ないとは思いますが……（まだ実測してないので、実測したら追記します）

# まとめ

上記のように `ForEach` メソッドにはデメリットがいっぱいです。
じゃあメリットは？というと、メソッドチェーンの最後につなげて書けるので書きやすい、場合によっては読みやすい、くらいでしょうか。

正直にネタばらすと、上記の問題は限定的な場面でしか問題にならない内容ではあります。が、そこで毎回問題ないかどうかを判断してまで `ForEach` メソッドを使うメリットはない、というのが私の主張です。
http.Clientのタイムアウトの時間を変更


GoogleAppEngineの`urlfetch.Client`の返すhttp.Clientはデフォルトでは5秒でタイムアウトしてしまう。もうちょいながくしたい。

```go
c := appengine.NewContext(r)
client := http.Client{
  Transport: &urlfetch.Transport{
    Context: c,
    Deadline: 10 * time.Second,
  },
}
```

でいけた。

元のコードは以下の感じ。

```
c := appengine.NewContext(r)
client := urlfetch.Client(c)
```

* https://cloud.google.com/appengine/docs/go/urlfetch/reference
* http://golang.org/pkg/time/#Duration
本日のGithub Trend

# Git
面白そうなGit関連ツールが2つあった

1. http://gitup.co
2. https://github.com/qw3rtman/gg

gitupは見た目ちゃちぃけどコミットコメント直したりとかGit直接だと面倒だったのを簡単にできて便利そう

# CSS
Bootstrap 4のアナウンスが出てる
http://blog.getbootstrap.com/2015/08/19/bootstrap-4-alpha/
オンプレHipChatでhubot-hipchatを使うときの注意点

# 前提
* HipChatオンプレミス版を利用
* hubot-hipchatを使いたい

# 手順
基本、普通にここの[README.md](https://github.com/hipchat/hubot-hipchat)に従ってインストールすれば良い。w

# 注意点
1. Herokuを使わない時はexternal-scripts.jsonの"hubot-heroku-keepalive"を削除
2. HUBOT_HIPCHAT_HOST、HUBOT_HIPCHAT_XMPP_DOMAIN、HUBOT_HIPCHAT_JID、HUBOT_HIPCHAT_PASSWORD、HUBOT_HIPCHAT_ROOMS（任意）、PORT（任意）を指定  → HUBOT_HIPCHAT_XMPP_DOMAINを設定しないと、部屋には入れるが返答がチャットに届かない
3. hubot-hipchat現行バージョンでは（node-xmpp-core）、`@`を含むhipchatアカウントからのコマンドを受け付けることが出来ない
Assemble で {{#each}} 中、指定回数毎に処理をしたい

# [Assemble](http://assemble.io/) で JSON とかを {{# each}} する時、規定数のタグ毎にタグで囲いたい時とか


15/10/22 npm module 化した [npmjs/handlebars-helper-do-once-in-times](https://www.npmjs.com/package/handlebars-helper-do-once-in-times)

Assemble の official サイトの "Kiss my shiny metal ass!" とかのサンプル文言は好きだけど、なんとなく色々捜しにくいと思うのは私だけでしょうか。
ビルトインのヘルパーは見つける事ができなかったので、ググりまくったら [stackoverflow](http://stackoverflow.com/questions/17149289/how-can-i-add-a-hr-element-of-each-3-of-my-looping-array-using-handlebarsjs) で発見。そのままだとちょっと挙動がおかしかったので、修正したやつの備忘録。


## 例えば li タグ三つ毎に ul タグで囲いたいような場合

```js:custom-helper.js
module.exports.register = function (Handlebars, options)  {
  Handlebars.registerHelper("xtimes", function(index_count, mod, block) {
    if(parseInt(index_count) % (mod) === 0 && index_count !== 0){
      return block.fn(this);
    }
  });
};
```

```js:Gruntfile.js
    assemble: {
      site: {
        options: {
          helpers: [
            'custom-helper.js'
          }
        }
      }
    },
```

```hbs:hoge.hbs
<ul class="triplet">
{{# each list }}
{{#xtimes @index 3}}</ul><ul class="triplet">{{/xtimes}}
  <li>{{name}}</li>
{{/ each}}
</ul>
```

```html:result.html
<ul class="triplet">
  <li>hoge</li><li>fuga</li><li>piyo</li>
</ul>
<ul class="triplet">
  <li>とどめ</li><li>くらえ</li><li>エメラルドスプラーッシュ</li>
</ul>
<ul class="triplet">
  <li>な</li><li>なにをするだーッ</li>
</ul>
```



## {{# each}} とかのデータは関係なく、単純な repeat は helper が色々落ちてます

```zsh
$ npm i handlebars-helper-repeat --save
```

```js:Gruntfile.js
    assemble: {
      site: {
        options: {
          helpers: [
            'handlebars-helper-repeat'
          }
        }
      }
    },
```

[handlebars-helper-repeat@github](https://github.com/helpers/handlebars-helper-repeat)