OmniAICreator/Qiita-1.07M huggingface dataset:
AMQP.connect


Connects to AMQP broker and yields connection object to the block as 
as connection is considered open.


###Options
- [String]  :host ("localhost") Host to connect to.
- [Integer] :port (5672) Port to connect to.
- [String]  :vhost ("/") Virtual host to connect to.
- [String]  :username ("guest") Username to use. Also can be specified as :user.
- [String]  :password ("guest") Password to use. Also can be specified as :pass.
- [Hash]  :ssl TLS (SSL) parameters to use.
- [Fixnum] :heartbeat (0) Connection heartbeat, in seconds. 0 means no heartbeat. Can also be configured server-side starting with RabbitMQ 3.0.
- [#call]  :on_tcp_connection_failure A callable object that will be run if connection to server fails
- [#call]  :on_possible_authentication_failure A callable object that will be run if authentication fails (see Authentication failure section)


###Handling authentication failures

- broker does exactly the same thing when other connection-level exception occurs
- so there is no way to guarantee that connection was closed because of authentication failure.
- To handle it, pass a callable object 
	- (a proc, a lambda, an instance of a class that responds to #call)
```
### with :on_possible_authentication_failure option.

- This method assumes that EventMachine even loop is already running. 
- If it is not the case or you are not sure, `we recommend you use {AMQP.start} instead.`

###source code 
```
  def self.connect(connection_options_or_string = {}, other_options = {}, &block)
    opts = case connection_options_or_string
           when String then
             AMQP::Settings.parse_connection_uri(connection_options_or_string)
           when Hash then
             connection_options_or_string
           else
             Hash.new
           end

    AMQP::Session.connect(opts.merge(other_options), &block)
  end
```


###examples
- Using AMQP.connect with default connection settings
 
```
   AMQP.connect do |connection|
     AMQP::Channel.new(connection) do |channel|
       # channel is ready: set up your messaging flow by creating exchanges,
       # queues, binding them together and so on.
     end
   end
``` 
- Using AMQP.connect to connect to a public RabbitMQ instance with connection settings given as a hash
 
```
   AMQP.connect(:host => "dev.rabbitmq.com", :username => "guest", :password => "guest") do |connection|
     AMQP::Channel.new(connection) do |channel|
       # ...
     end
   end
```
 
- Using AMQP.connect to connect to a public RabbitMQ instance with connection settings given as a URI
 
```
   AMQP.connect "amqp://guest:guest@dev.rabbitmq.com:5672", :on_possible_authentication_failure => Proc.new { puts("Looks like authentication has failed") } do |connection|
     AMQP::Channel.new(connection) do |channel|
       # ...
     end
   end
```
postfix　メール設定メモ

＊Update版を[CentOS7 Postfix + SMTP-Auth/Submission Port](https://qiita.com/yoshidna/items/2d0b89086914a7be73a4)としてPost

# 概要
* postfixを利用するときのよくやる設定メモ

# 環境
* OS：CentOS /Redhat 6.x
* postfix：postfix-2.6.x

# 手順
## main.cf 設定
* 追加したり変更したりする点

```bash:/etc/postfix/main.cf
# myhostnameにホスト名を指定
myhostname = mail.hogehoge.com  

# mydomainにドメイン名を指定
mydomain = hogehoge.com

# myoriginのコメント削除
myorigin = $mydomain

# inet_protocolをipv4に限定
inet_protocols = ipv4

# mydestination設定変更
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# mynetworksを自環境に合わせ変更
mynetworks = 127.0.0.0/8,192.168.0.0/24,10.0.0.0/8

# relay_domainsのコメント削除
relay_domains = $mydestination

# header_checksのコメント削除
header_checks = regexp:/etc/postfix/header_checks

# smtpd_banne設定
smtpd_banner = $myhostname ESMTP

# 最下行に以下追記
message_size_limit = 5242880
disable_vrfy_command = yes
smtpd_helo_required = yes
strict_rfc821_envelopes = yes
allow_percent_hack = yes
swap_bangpath = yes
allow_untrusted_routing = no
smtpd_client_restrictions =
   permit_mynetworks,
   reject_unknown_client,
   permit
smtpd_data_restrictions =
   reject_unauth_pipelining,
   reject_multi_recipient_bounce
smtpd_helo_restrictions =
   permit_mynetworks,
   reject_invalid_hostname,
   reject_non_fqdn_hostname,
   reject_unknown_hostname,
   permit
smtpd_sender_restrictions =
   permit_mynetworks,
   reject_unknown_sender_domain,
   reject_non_fqdn_sender,
   permit
smtpd_recipient_restrictions =
   permit_mynetworks,
   reject_non_fqdn_recipient,
   reject_unknown_recipient_domain,
   reject_unauth_destination,
   permit
smtpd_etrn_restrictions =
   permit_mynetworks,
   reject_invalid_hostname,
   permit
```

## header_checks設定
* Receivedから始まる行を削除

```bash:/etc/postfix/header_checks
/^Received:/ IGNORE
```

## サービス起動
<pre>
# service postfix restart
# chkconfig postfix on
</pre>

## メール送信確認
* 適当なメールアドレスに向けて送信確認

<pre>
\# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.hogehoge.com ESMTP

HELO hogehoge.com
250 mail.hogehoge.com

MAIL FROM:\<admin@hogehoge.com>           
250 2.1.0 Ok

RCPT TO:\<mail_to@fugafuga.com>
250 2.1.5 Ok

DATA
354 End data with <CR><LF>.<CR><LF>
Hello test mail
.
250 2.0.0 Ok: queued as 952E42FD

quit
221 2.0.0 Bye
Connection closed by foreign host.
質問　正規表現　長い行の繰り返し起こるN個目（10,20…90）の区切り文字を改行に変えたい

表題通りです。

正規表現　長い行の繰り返し起こるN個目（10,20…90）の区切り文字を改行に変えたいのですがどうすればよいでしょうか？
土壌センサーのジョイント

#参考ページ
Arduinoで自動水やり器を作る①
http://qiita.com/interestor/items/d59590b64820a8cf973e

#土壌センサーはこうつけるらしい
はいはい。いっこ飛ばしでつけるのね（英語マニュアル）
![1a.png](https://qiita-image-store.s3.amazonaws.com/0/94562/37f817dd-b3cf-e195-599c-6f7400fe18d9.png)

#買ってきた
**ん！？**
いっこ飛ばしにつけられなくないか？？
え、なにこの黒いのの中身どうなってるの。
![1.JPG](https://qiita-image-store.s3.amazonaws.com/0/94562/17a1c32b-147f-591a-1d5b-cc73b6176aab.jpeg)

#とりあえず壊した
えっ:question::eyes:
![2.JPG](https://qiita-image-store.s3.amazonaws.com/0/94562/fb627f61-c5a2-e82a-5bd0-575c7f98e9a8.jpeg)

#強引にさした
うーん...
![3.JPG](https://qiita-image-store.s3.amazonaws.com/0/94562/2fb99de5-677b-3120-7c5b-f5c1824b4054.jpeg)

#よく考えたらメスコネクターなんだからオスオスワイヤーを3本させばよかった...
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/94562/1c48e0b9-f79a-3413-afd1-0d9163c288c7.jpeg)

#パーツはArduinoに直接くっつくものだと思っていた...
さっそく壊しちまったじゃねーか...
つまりそれぐらいハード側は無知である。
そもそも土壌センサーを付ける前にブレッドボードとジャンパーワイヤーを買ってこないといけなかったんだ...。
http://n.mtng.org/ele/arduino/

#ソース（土壌センサーのみ）
```text
#include <Wire.h>
#include <rgb_lcd.h>

#define SEN 1
#define LED 13

// 土壌センサー dry[0-300], normal[300-700], wet[700-950]
int buf;

// LCD
const int colorR = 0;
const int colorG = 0;
const int colorB = 255;
rgb_lcd lcd;

void setup() 
{
    // SET UP LED（13番ピン：出力）
    pinMode(LED,OUTPUT);

    // SET UP SENSOR（1番ピン：出力）
    pinMode(SEN,OUTPUT);
    
    // SET UP LCD（LCDは16文字2行です）
    lcd.begin(16, 2);

    // LCDのカラーを決定します
    lcd.setRGB(colorR, colorG, colorB);
    lcd.print("sensor value is");

    delay(1000);
}

void loop() 
{
    //PART:LEDの点滅
    digitalWrite(LED,HIGH);
    delay(1000);
    digitalWrite(LED,LOW);
    delay(1000);

    //PART:SENSOR値取得
    buf=analogRead(0); //A1の値が0で取得できるのはなぜ？？
    delay(1000);
    
    //PART:LCDへの表示 Note：LCDの行は0base、第2引数で1を指定すると2行目の意
    lcd.setCursor(0, 1);
    lcd.print(buf);
    delay(100); 
}
```

#動作確認
お！濡らしたティッシュで値が100ぐらいズレる。成功だ。
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/94562/5e449430-28d8-1621-59b0-4340840f1cd8.jpeg)


#つぎは？
ポンプを動かすぞ
「&」を使わないDebug.Printの書き方

#やりたいこと
- Debug.Print に複数の単語を連結するときに「&」を使わずに連結したい
- 「&」はタイピングしにくい文字なので回避したい
- Debug.print でフォーマットを整える面倒を減らしたい

#Debug.Printで単語を連結する方法
「&」,「;」, 「,」の三種類の連結子を使って連結できる。
それぞれ、微妙に使い勝手が違う。
### 使用例
```vbnet:Module1.bas
Public Sub debugPrintTest()

    Const n As Integer = 10
    Const m As Integer = 20
    Const l As Integer = 30
    Const d As Double = 1.234
    Const s As String = "あなたの年齢は?"
    Const s2 As String = "教えません。"

    '文字と文字の連結
    Debug.Print s & s2 '「&」で連結
    Debug.Print s; s2 '「;」で連結
    Debug.Print s, s2 '「,」で連結
    Debug.Print
    
    '文字と数値の連結
    Debug.Print s & n & "歳です。" '「&」で連結
    Debug.Print s; n; "歳です。" '「;」で連結
    Debug.Print s, n, "歳です。" '「,」で連結
    Debug.Print

    '数値と数値の連結
    Debug.Print n & m & l & d '「&」で連結
    Debug.Print n; m; l; d  '「;」で連結
    Debug.Print n, m, l, d  '「,」で連結
    Debug.Print
    
    '複数行にわたる連結

'    「&」つなぎではエラー
'    Debug.Print s &
'    (別処理)
'    Debug.Print m

'    「;」つなぎではエラーにならない
    Debug.Print s;
'    (別処理)
    Debug.Print m; "歳です。"

'   「,」つなぎでもエラーにならない
    Debug.Print s,
'    (別処理)
    Debug.Print m, "歳です。"

End Sub
```
### 実行結果
```vbnet:Immediate
あなたの年齢は?教えません。
あなたの年齢は?教えません。
あなたの年齢は?             教えません。

あなたの年齢は?10歳です。
あなたの年齢は? 10 歳です。
あなたの年齢は?              10           歳です。

1020301.234
 10  20  30  1.234 
 10            20            30            1.234 

あなたの年齢は? 20 歳です。
あなたの年齢は?              20           歳です。
```

## 主な違いまとめ
- 「&」は文字も数値も隙間なく並べて表示する
- 「;」は数値のみスペース区切りで表示する
- 「,」は文字も数値もタブ区切りで表示する
- 複数行に渡って連結できるのは「;」と「,」
- 「&」より、「;」や「,」の方がタイピングしやすい

#参照
[VB6・VBA関数メモ：Debug.Printメソッド] (http://note.phyllo.net/?eid=1106217)
FFmpeg使って複数の音声と字幕から一つの動画を作成する

ffmpegを使って複数の音声と字幕から一つの動画を作成する方法。

```.sh
ffmpeg.exe -i video.mp4 -i de.mp4 -i de_sw.mp4 -i fr.mp4 -i ru.mp4 -i de_co.mp4 -i de.srt -i en.srt -map 0:0 -metadata:s:v:0:0 language=ger -map 2:0 -metadata:s:a:1:0 language=ger -map 1:0 -metadata:s:a:0:0 language=ger -map 3:0 -metadata:s:a:2:0 language=fre -map 4:0 -metadata:s:a:3:0 language=rus -map 5:0 -metadata:s:a:4:0 language=ger -map 6:0 -metadata:s:s:0:0 language=ger -map 7:0 -metadata:s:s:1:0 language=eng -c copy -scodec mov_text out.mp4
```

コマンドオプションの意味とかはブログの記事に書いときました。

[[Commands][ffmpeg] FFmpeg使って複数の音声と字幕から一つの動画を作成する答えを知りたい | 答えを知りたい](http://programming.ironsand.net/2015/ffmpeg%e4%bd%bf%e3%81%a3%e3%81%a6%e8%a4%87%e6%95%b0%e3%81%ae%e9%9f%b3%e5%a3%b0%e3%81%a8%e5%ad%97%e5%b9%95%e3%81%8b%e3%82%89%e4%b8%80%e3%81%a4%e3%81%ae%e5%8b%95%e7%94%bb%e3%82%92%e4%bd%9c%e6%88%90/)
RaspberrypiにGitbucketをインストールした


普通にgitbucket.warを/var/lib/tomcat7/webappsに配置したら以下のようなパーミッションのエラーが出てGitBucketが起動できなかったのでメモ。

Raspberry PI にGitbucket
OSはRaspbian
```bash: Bash
sudo apt-get install tomcat7
```
```bash: Bash
sudo cat /var/lib/tomcat7/logs/catalina.out
```
```text:catalina.out
org.h2.jdbc.JdbcSQLException: Error while creating file "/usr/share/tomcat7/.gitbucket" [90062-180]
```

それで以下のようにディレクトリを作ってパーミッションを与えたら動いた
```bash:Bash
 sudo mkdir /usr/share/tomcat7/.gitbucket
 sudo chown tomcat7:tomcat7 /usr/share/tomcat7/.gitbucket
 ```
 
 /var/lib/tomcat7/webapps にgitbucket.warを配置
 
 ```bash:Bash
 sudo cp /path/to/gitbucket.war /var/lib/tomcat7/webapps
 ```
 
 しばらく待つ
 
 http://xxx.xxx.xxx.xxx/gitbucket
 にアクセスする
 
 
 以上
SLComposeViewControllerの画面回転対応

#問題点
SLComposeViewControllerを用い、Twitter共有などを行う際、
画面回転で呼び元画面を逆向き（upside down）で表示していたところ、Twitterダイアログ表示で正常向き（Portrait）に戻されてしまい、
結果、画面が突然逆さまになってしまう。

#解説
原因は単純で、
SLComposeViewControllerも、UIViewControllerを継承した一つの画面である為、
呼び元画面と同様、画面回転を許可する必要があります。

#解決方法
呼び元画面と同様、画面回転設定を加えたサブクラスを作ります。

```objc:SLComposeViewControllerのサブクラス
// 回転の実施判断
-(BOOL)shouldAutorotate
{
    return YES;
}

// 当ビューがサポートする回転方向の設定
-(UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    // 全方位
    return UIInterfaceOrientationMaskAll;
}
```
SLComposeViewControllerの代わりに、このサブクラスを用いれば、
表示されるTwitterダイアログも画面逆向き（upside-down）に対応します。

#最後に
この画面回転設定の為だけにサブクラスが必要というのは、とても非効率に感じます。
他に手はないもんですかねぇ…
monacaからNCMBのデータを取得する

ここで述べるやり方はSDKバージョン1.2.6の旧バージョンに対応しています。

作業手順としては
1 データのクエリを作成する
2 求める条件を指定
3 クエリに対してfindメソッドを実行
4 得られたオブジェクトにgetメソッドを用いてデータを取得

```
var ScoreClass = NCMB.Object.extend("Score");//Scoreはデータのクラス名
var scoreQuery = new NCMB.Query(ScoreClass);//クエリを作成する

//欲しいデータの条件をしていする(この場合はobjectIdがxxxxであるデータのオブジェクト)
scoreQuery.equalTo("objectId","xxxx");

scoreQuery.find({ //クエリにfindメソッドを使う
	success: function(results){
		var ans = results[0];//データのオブジェクトが得られる
		console.log(ans.get("score"));//取得したオブジェクトにgetメソッドを使い取得したいフィールド名を指定する
	},
	error: function(error){
		console.log("error : " + error.message);
	}
});
```
データストアのobjectId自体の取得について
objectIdは

```
scoreQuery.find({
	success: function(results){
		for(var i = 0; i < results.length; i++){
			console.log(results[i].id);//objectIdを取得できる
		}
	},
	error: function(error){
		console.log(error.message);
	}
});
```

とすることで可能である
Jenkinsのジョブをまとめて削除する方法

# Jenkinsのジョブをまとめて削除する方法
Jenkinsのジョブをまとめて削除する方法は標準だと、Jenkins CLIやJenkins APIを叩く方法しかありません。

これらの方法はJenkins管理者以外にはハードルが高いため、誰でも容易に**複数のジョブを削除する**ことができるようになる[JobDelete Builder Plugin](https://wiki.jenkins-ci.org/display/JENKINS/JobDelete+Builder+Plugin)を作成しました。


## 概要
JobDelete Builder Pluginを導入すると、Jenkinsのジョブのビルドステップに**ジョブの削除**が追加されます。

## 実行例
ScreenshotはJenkins wikiの使い回しのため、すべて英語になっていますが実際は日本語に対応しています。

1. 実行前のジョブ一覧
![job-list1.png](https://qiita-image-store.s3.amazonaws.com/0/54186/e3e93ffe-a3fa-16bc-8514-c904e3ab92ef.png)

2. ジョブの実行
![param3.png](https://qiita-image-store.s3.amazonaws.com/0/54186/e046f0ef-f381-6b9b-7f92-fc4054214897.png)

3. コンソール実行結果
![console1.png](https://qiita-image-store.s3.amazonaws.com/0/54186/a3e75bb2-ff5d-9078-69ce-f25ce78c5e90.png)

4. 実行後のジョブ一覧
![job-list2.png](https://qiita-image-store.s3.amazonaws.com/0/54186/63c972ff-2f6d-b725-e808-9dfeb49c5703.png)



## 使い方、設定方法
### 単純なジョブの削除
featureA-で始まるジョブを作成します。

1. ジョブを作成
2. ビルドステップに`ジョブの削除`を追加。
![simple1.png](https://qiita-image-store.s3.amazonaws.com/0/54186/513256c8-5087-0184-0e2d-30d3b006064e.png)
3. 正規表現で削除対象のジョブを設定
![simple2.png](https://qiita-image-store.s3.amazonaws.com/0/54186/9933ff15-7e6e-7779-f298-6e24acc6899e.png)
4. 作成したジョブを実行

### パラメータを利用したジョブの削除
実行時に与えた文字列で始まるジョブを作成します。

1. ジョブを作成
2. パラメータを設定
![param1.png](https://qiita-image-store.s3.amazonaws.com/0/54186/d56b7bb6-adf8-64f6-e834-76c1303c3414.png)
3. ビルドステップに`ジョブの削除`を追加、設定したパラメータを入力
![param2.png](https://qiita-image-store.s3.amazonaws.com/0/54186/7a86eedf-585b-0756-4b64-3e3cace31319.png)
4. パラメータを使ってビルド
![param3.png](https://qiita-image-store.s3.amazonaws.com/0/54186/f87d9f67-12d1-cd84-f9ea-7fa1eb05bbb1.png)


## おまけ　背景詳細、具体的なユースケースなど
SubversionとJenkinsを利用している環境で、`trunk-test1`, `trunk-test2`, `trunk-test3`のようなジョブを10個ほど作成しており、ブランチ作成時には[Jobcopy Builder Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Jobcopy+Builder+plugin)を利用して、`featureA-test1`, `featureA-test2`, `featureA-test3`のようなジョブをコピーすることで、ブランチにおいてもCIを簡単に実現できるようにしています。

その後、featureAブランチの開発が終わりtrunkにマージされるとfeatureA-test群は不要になるのですが、1つ1つジョブを削除しなければならず手間だったためJobDelete Builder Pluginを作成しました。
Box-drawing character > └ / ├ > 「罫線」で変換

http://qiita.com/tatzyr/items/6b126f8b49986bd8be75
の記事を見ていると、フォルダの表記が綺麗だった。

"└"や"├"という文字を組み合わせているようだが、この入力方法が分からない。

色々検索して、以下のページを見つけた。Box drawing characterというものらしい。
https://en.wikipedia.org/wiki/Box-drawing_character

Mac(+google日本語入力)での入力方法は未調査。

##WindowsでのUnicode入力

```txt:動作確認
Windows 7 Pro
```

参考: http://neverep.blogspot.jp/2008/05/unicode.html

1. IMEをONにする
2. U2523を入力. F5を押すと下図の表が表示される。
3. 表において該当の文字をクリック

![win.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/87abd044-34c4-2053-d456-a491e7491e76.jpeg)

参考ページではF5を押した時点で変換される、ような記載があったが、こちらの環境では変換がされなかった。


## もっと簡単な入力

ユニコードでなくとも「罫線」で変換すれば出てくるのがわかった。

Windows 7, Mac OS X(+google日本語入力)の両方で確認
自分がSublimeTextに入れているプラグイン

#SublimeTextで便利なプラグイン
##1337 Color Scheme
これはシンタックスの色を追加できるプラグイン。
なくてもあまり困らない。
##ColorPicker
ペイントでその他の色を選んだ時と同じようなウィンドウを出して、色を選択できるようにするプラグイン。
あると便利。
ただし、設定が必要で、「Preferences > KeyBindings - User」で、

```json
[
	{
		"keys":["ctrl+shit+c"],
		"command": "color_pick"
	}
]
```

のようにする必要がある。

##ConvertToUTF8
Shift-JIS等の編集に対応させるためのプラグイン。

##ExportHTML
コードをハイライトしてHTMLに変換してくれるプラグイン。
印刷するときに便利。
ただ、これも設定が必要である。

```json
[
	{
		"keys": ["ctrl+alt+n"],
		"command": "export_html",
		"args": {
			"numbers": true,
			"wrap": 900,
			"browser_print": false,
			"multi_select": true,
			"color_scheme": "Packages/ExportHtml/ColorSchemes/Print-Color.tmTheme",
			"style_gutter": false
		}
	}
]
```


##FindKeyConflicts
SublimeTextで、ショートカットキーが、かぶっているときなどに便利。
デフォルトの、ショートカットキーを変更することもできるうえ、いろいろなプラグインの起動のショートカットキーも変更できる。

##IMESupport
SublimeTextで、IMEがインラインにならないという問題を回避するための、プラグイン。
必須。

##InputSequence
連番入力をサポートしてくれるプラグイン。[ここに詳細あり](http://log.chocolateboard.net/sublime-text-inputsequence/)

##Japanize
JapanizeはSublimeTextを日本語化するプラグイン。
入れてみたけど正直使いにくい。

##PackageControl
これらのパッケージを一括管理するプラグイン。

##SublimeInput
謎。調べてもよくわからない。

##OmniMarkupPreviewer
MarkDownをリアルタイムでプレビューしながら書けるようにするプラグイン。
大変便利。
「Ctrl + Alt + O」
で、既定のブラウザでプレビュー。リアルタイムで反映される。
「Ctrl + Alt + X」
で、Markdown ファイルを html ファイルとしてエクスポートする。
mdファイルと同じフォルダにHTMLが出来上がる。
「Ctrl + Alt + C」
で、MarkdownファイルをHTML貸したものをクリップボードにコピーする。
保存はされない。

##Trailing Spaces
これも調べてみたけれどよくわからない

##Monokai Extended
Markdown をシンタックスハイライトするプラグイン。
少し設定が必要。
「Preferences > Color Scheme > Monokai Extended」から「Monokai Extended」を選択。
これで、MarkDownのハイライトができる。

##Markdown Extended
MarkDownのシンタックス設定。
これも面倒なことに少し設定が必要。
「View > Syntax > Open all with current extension as... > Markdown Extended」を選択で有効化

##Tag
HTML等のマークアップ言語のの閉じタグを自動補完するためのプラグイン。
HTMLを書くなら入れたほうがいい

##SublimeLinter
リアルタイムにコードのエラーをチェック。
さらに個別の各Linterプラグインが必要

##SublimeLinter-csslint
CSS用のプラグイン。

##SublimeLinter-html-tidy
HTML用のプラグイン。

##SublimeLinter-jshint
Javascript用のプラグイン。

##SublimeLinter-php
php用のプラグイン。

##jQuery
jQueryを補完するためのプラグイン。
jQueryも、このプラグインも使ったことがないので、よくわからない。

##HTML5
HTML5を補完する。

##Emmet
HTML・CSSを高速に編集できるEmmetのSublime Text用プラグイン。
「Performance > Package Setting > HTML/CSS/JS/Prettify > Set Prettify Setting」で、インデント文字を変更できる。

```json
"indent_char": " ",
```

を、

```json
"indent_char": "\t",
```

にするととで、Tabインデントに変更できる。

```json
"indent_size": 4,
```

を、

```json
"indent_size": 1,
```

に変更することで、Tabを一つにすることができる。
emmetのSetting-Userに

```json
{
	"snippets": {
		"variables": {
			"lang": "ja"
		}
	}
}
```

を追加することで、HTML:5で、展開したものをjaにできる。

##CSS Snippets
CSSを補完する。

##CodeFormatter
PHP、JavaScript、HTML、CSSのインデントなど綺麗にする。

##BracketHighlighter
ソースの括弧が、どこに対応しているのか、分かりやすくする。
正直ないほうが見やすい。

##SFTP
サイドバーのプロジェクトフォルダを右クリックし、「SFTP/FTP > Map to Remote」を選択。
「sftp-config.json」という設定ファイルがプロジェクトフォルダのルートにできる。
このファイルで、サーバ情報等を設定できる。
とりあえず、

```json
"type":"sftp",
```

を、

```JSON
"type":"ftp",
```

にする。
サーバー設定は

```json
"host":"IPとかホスト名",
"user":"ユーザー名",
"password":"password",
"port":"22",
"remote_path":"パス(/var/www/とか)",
"file_permissions": "664",//コメントアウト解除
"dir_permissions": "775",//コメントアウト解除
```

にする。
Ctrl+Alt+U+Sで、アップロードできるみたい。

##Abacus
特定の記号でそろえてくれる。
OS XのrsyncはNFDに対応していない＆対策


## `--exclude`が効かない問題

現在のディレクトリ構成はこういう状態。

```bash
$ tree -N
.
├── dest
└── src
    ├── ä
    ├── b
    └── c

2 directories, 3 files
```

`src/`ディレクトリ以下の`ä`と`b`というファイルを除外して`dest/`にコピーしたいので、`--exclude`で指定する。

```bash
$ rsync -av src/ --exclude ä --exclude b dest
sending incremental file list
./
ä
c

sent 156 bytes  received 57 bytes  426.00 bytes/sec
total size is 0  speedup is 0.00
$ ls dest/
ä	c

```

……なぜか`ä`がコピーされている。

## なぜか
OS Xが採用しているHFS+では、ファイル名をNFDで正規化する。NFDでは、`ä`は`a`と`¨`の組み合わせで表現される。
しかし、一般的にUnicodeではNFCという別の正規化手法が用いられている。NFCでは`ä`は`ä`という一文字で表現される。

ターミナルで入力した文字はNFCの`ä`なので、NFDの`a``¨`がexclude対象にならなかった。


## 対策
NFCをNFDに変換してから`rsync`に渡してやればOK。

以下のファイルをPATHの通った場所に置いて実行権限を付ける。ファイル名は`xrsync`とする。

```ruby
#!/usr/bin/env ruby

require "shellwords"

system ["rsync", *ARGV].shelljoin.encode("UTF-8-MAC")
```

`UTF-8-MAC`というのは、NFDで正規化してUTF-8で符号化した形式の通称。

実際に`xrsync`を使って確認してみる。


```bash
$ xrsync -av src/ --exclude ä --exclude b dest
sending incremental file list
./
c

sent 105 bytes  received 38 bytes  286.00 bytes/sec
total size is 0  speedup is 0.00
$ ls dest/
c

```

`ä`はコピーされなくなった。

## ちなみに
* Ruby 2.2.0からは`String#unicode_normalize`というメソッドでNFC/NFD正規化ができる。[instance method String#unicode_normalize (Ruby 2.2.0)](http://docs.ruby-lang.org/ja/2.2.0/method/String/i/unicode_normalize.html)

## 関連情報
* [MacOSX - Mac OS X の NFD 問題での対策諸々 - Qiita](http://qiita.com/knaka/items/48e1799b56d520af6a09)
重複しない乱数配列(Java版/コレクション活用?版)

[重複しない乱数配列(Java版/ArrayList使用版)](http://qiita.com/AinoMegumi/items/d3db3cff4c57d2544201)を見て、「Collection使うなら、もうちょっと楽になるよな」と思ったので改善を検討。

[Ideoneで試行錯誤](http://ideone.com/FzLmth)したので、クラス名などがちょっと違います。

```java:Ideone.java
import java.util.HashSet;
import java.util.ArrayList;
import java.util.Random;

class MakeRandomArray {
    public ArrayList<Integer> makeRandomArray(ArrayList<Integer> array, Random rand, int arraySize, int randMax, int randMin){
	HashSet<Integer> set = new HashSet<>(arraySize);
        for(int i = 1; i <= arraySize; i++){
            set.add(random(rand, randMax, randMin));
        }
        while(set.size() != arraySize){
            set.add(random(rand, randMax, randMin));
        }
        array.addAll(set);
        return array;
    }
    private int random(Random rand, int max,int min){
        if(max < min) return rand.nextInt(min - max) + max;
        else return rand.nextInt(max - min) + min;
    }
}

class Ideone{
    public static void main(String[] args){
        MakeRandomArray mkRandArr = new MakeRandomArray();
        ArrayList<Integer> arr = mkRandArr.makeRandomArray(new ArrayList<Integer>(), new Random(), 10, 100, 1);
        for(int x = 0; x <= 9; x++) System.out.println(arr.get(x));

    }
}
```

さらにJava8でのラムダを使うなどして処理を整理すると。

```java:Ideone.java
import java.util.*;
import java.util.stream.*;
import java.lang.Math;
 
class MakeRandomArray {
	public List<Integer> makeRandomArray(Random rand, int arraySize, int randMax, int randMin){
		List<Integer> array = rand.ints(Math.min(randMin,randMax),Math.max(randMin,randMax))
				.distinct()
				.limit(arraySize)
				.boxed()
				.collect(Collectors.toList());
 
		return array;
	}
}
 
class Ideone{
	public static void main(String[] args){
		MakeRandomArray mkRandArr = new MakeRandomArray();
		List<Integer> arr = mkRandArr.makeRandomArray(new Random(), 10, 100, 1);
		for(int x = 0; x <= 9; x++) System.out.println(arr.get(x));
     }
}
```
c++ builder XE4, 10.2 Tokyo > fileIO > コピー元ファイルがコピー先よりも更新されているかのチェック関数

```txt:動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2018/01/09)
```

ファイルをコピーする処理において、コピー元がコピー先よりも新しいかどうかの確認をしたい時がある。

以下のように実装した。


```cpp
#include <IOUtils.hpp> // for TDirectory.XXX
...
static bool isUpdated(String srcFile, String dstFile)
{
	TDateTime srcDt; // コピー元
	TDateTime dstDt; // コピー先

	if (FileExists(srcFile) == false) {
		return false;
	}
	if (FileExists(dstFile) == false) {
		return true;
	}

	FileAge(dstFile, dstDt);
	FileAge(srcFile, srcDt);

	return (srcDt > dstDt);
}
```

srcFileとdstFileにはそれぞれコピー元とコピー先のファイルパス（フォルダ付き）を指定する。

コピー元ファイルがなければfalse, コピー先がない（コピー対象）ならtrueとしている。

あとは FileAge()でタイムスタンプを取得し比較により判断。
c++ builder XE4, 10.2 Tokyo > fileIO > ファイルの更新日時を取得したい > bool FileAge(const System::UnicodeString FileName, System::TDateTime &FileDateTime);

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

ファイルのタイムスタンプを取得したい。

参考1: http://mrxray.on.coocan.jp/Delphi/plSamples/780_FileInfoListETC.htm

参考2: http://www.gesource.jp/weblog/?p=3117


以下で取得できた。

```
TDateTime dt;
FileAge(filename, dt);
String dtstr = DateTimeToStr(dt);
```

http://docwiki.embarcadero.com/Libraries/XE4/ja/System.SysUtils.FileAge
を見てもC++ Builderでは `bool FileAge(const System::UnicodeString FileName, System::TDateTime &FileDateTime);`の方の記載がない。。。 XE8のヘルプにも載っていない。
tvOSアプリはまだ申請できなかった

# 試しに作ってみた

一通り画面遷移したり、API叩いたりする簡単なアプリを作ってみたがまだXcode7.1がbetaなのもありさすがに申請できなかった。

以下のようにvalidateでこける。

![スクリーンショット 2015-09-27 9.26.45.png](https://qiita-image-store.s3.amazonaws.com/0/31237/14c198aa-a1e1-4383-b04d-736e5b9adbf4.png)

itunesConnectでは用意されているように見えるがダメだった。

submitできたという方がいれば教えていただければと思いますorz

StackOverflowにも投稿してみたけど、普通にXcode7.1のGMがでないとダメでしょうね
http://stackoverflow.com/questions/32805786/cant-we-submit-tvos-app-to-store
c++ builder > fileIO > ForceDirectories() > 非推奨になっています

```txt:動作確認
C++ Builder XE4
```

XE4のヘルプで`ForceDirectories()`関連を見た時に`Vcl.FileCtrl.ForceDirectories`のヘルプが見つかり、その中で以下の文面が気になった。

> 警告： ForceDirectories は非推奨になっています。System.SysUtils を使用してください。 


ForceDirectories()は使えないのか、と思っていたら、`System.SysUtils.ForceDirectories`の方を使えばいいとのこと。

上記の警告文は正しくは以下の意味なのだろう。
> 警告： Vcl.FileCtrl.ForceDirectories は非推奨になっています。System.SysUtils.ForceDirectories を使用してください。
FFTによるノイズゲート

##ノイズゲートとは
　何かを録音した際に、環境音や電気ノイズが気になってしまうことがある。それを除去するために「ノイズゲート」というエフェクターを使う。アナログタイプのノイズゲートでは、入ってきた音声信号が一定より小さい場合に音量を落とすなどしている。しかし、メインの音が鳴っている時に聞こえるノイズを消すことができない。FFTを使用することで大きい音源を再生しながらも小さい音のノイズは消すことができる。

##Maxでの作りかた
###完成パッチ
![スクリーンショット 2015-09-27 8.55.12.png](https://qiita-image-store.s3.amazonaws.com/0/93396/d8212513-6a8b-61b8-1c31-95d374277350.png)
　インレット１に音声信号、インレット２にゲートの値を送ると、ノイズをカットした信号を送ってくれる[pfft~]オブジェクトを作る。

###[pfft~]の中身
　![スクリーンショット 2015-09-27 9.01.56.png](https://qiita-image-store.s3.amazonaws.com/0/93396/31e1d44b-0903-7c30-8b3d-7c421b5dc538.png) 
　[fftin~]からはFFTサイズ分の周波数ごとの音量が瞬時に送られてきている。
　[fftin~]からきたデカルト座標を一度、極座標にする。こうすることで音量と位相が得られる。
　[fftin~]のアウトレット１から音量の信号を[>~ 0.]に送る。[>~]のインレット２に[in 2]から数値を貰い、スレッショルドをコントロールできるようにする。極座標の音量は負の数にならない。
　[cartopol~]から出てきた音量と位相は、それぞれ[>~ 0.]から出てきた信号と乗算する。[>~]で設定している数値よりも低い場合は信号が０になり、[*~]から出てくる信号は０となる。
　[poltocar~]で極座標をデカルト座標に戻し、[fftout~]でメインパッチに戻す。
![スクリーンショット 2015-09-27 9.12.29.png](https://qiita-image-store.s3.amazonaws.com/0/93396/1120a837-dfaf-2a51-6041-5105d17f607a.png)
　[>~]に送る前に[/~ 32.]くらいで割っておくと、コントロールしやすい。
c++ builder XE4, 10.2 Tokyo > fileIO > TFile::Copy() > コピー先フォルダがない時はエラーになるようだ

```txt:動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2018/01/09)
```

`#include <IOUtils.hpp> // for TDirectory.XXX`
にて使用できる`TFile::Copy()`機能は、コピー先フォルダを用意しておかないとエラーになる。


http://docwiki.embarcadero.com/Libraries/XE4/ja/System.IOUtils.TFile.Copy
> メモ：  コピー元ファイルが存在しない場合、パスが無効な場合、コピー操作を行えるだけの権限をユーザーが持たない場合には、Copy は例外を発生させます。

「パスが無効な場合」というのが該当するのだろうか。
[Swift] わからない言葉をとことん調べて基礎を積み上げる 「関数」

#関数
関数名、仮引数名ともに原則的にはキャメルケースで記述する。
-キャメルケースとは？
>複合語をひと綴りとして、要素語の最初を大文字で書き表すことをいう。 キャメルケースとは、大文字が「らくだのこぶ」のように見えることからの命名である。

詳しくは私の投稿記事「識別子」にて


```txt:code
func 関数名(仮引数:型)->型{
    code
}
```

##inout関数
関数内での処理によって呼び出し側の変数の値を書き換える関数
C言語のポインタの概念を関数としたもの。
仮引数の前にinoutをつけて実引数には「&」をつける。

```txt:code
func 関数名(inout 仮引数1:型,inout 仮引数2:型)->型{
    code
}

関数名(&実引数,&実引数)
```

###外部引数名
引数がどういう意味を持つものなのかをわかりやすくするためのキーワード設定のようなもの。

```txt:code
func 関数名(外部引数名 仮引数1:型,外部引数名 仮引数2:型)->型{
    code
}
//外部引数名を指定すると関数を呼び出す時に下記のように記述できる
関数名(外部引数名1:実引数1,外部引数名2:実引数2)
```
実際のコードにしてみると...

```txt:code
func Trianglearea( base b:Double,height h:Double) -> Double {
    return b * h / 2
}

Trianglearea(base:2.0,height:1.0) //1.0と表示
```

外部引数を設定してないと...

```txt:code
func Trianglearea(b : Double, h : Double) -> Double {
    return b * h / 2
}

Trianglearea(2.0,1.0) //1.0と表示 
```

なお仮引数のことを内部でしか使わないため、内部引数名と呼ぶことがある。

また毎回外部引数を設定する代わりに、内部引数名(仮引数)に「#」をつけて内部引数名イコール外部引数名とすることができる。
例

```txt:code
func Trianglearea(#b : Double, #h : Double) -> Double {
    return b * h / 2
}

Trianglearea(b:2.0,h:1.0) //1.0と表示 
```



アプリ開発も記事書くのも初心者なので至らない点がありましたら助言していただけると幸いです。
参考サイト:https://ja.wikipedia.org/wiki
[Unity] シューティングゲームに使える相対移動を実装する

スマートフォンでシューティングゲームの自機を操作する場合、バーチャルパッドよりも**相対移動**の方が相性が良いです。
**相対移動**とは、画面上で任意の場所をタッチしてから指をスライドすることで、その移動分だけ自機が移動するような操作を指します。

メインカメラの設定により実装方法が異なりますので、それぞれまとめておきます。
それぞれのスクリプトを適当なオブジェクト（Cubeとか）にそのまま追加すればすぐに動きます。

##メインカメラのProjection設定がOrthographicの場合


    using UnityEngine;
    using System.Collections;
    
    public class player : MonoBehaviour {

        private Vector3 playerPos;
        private Vector3 mousePos;

        void Update () {
            playerControl ();
        }

        private void playerControl(){

            if (Input.GetMouseButtonDown (0)) {
                playerPos = this.transform.position;
                mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            }

            if (Input.GetMouseButton (0)) {

                Vector3 prePos = this.transform.position;
                Vector3 diff = Camera.main.ScreenToWorldPoint (Input.mousePosition) - mousePos;

                //タッチ対応デバイス向け、1本目の指にのみ反応
                if (Input.touchSupported) {
                    diff = Camera.main.ScreenToWorldPoint (Input.GetTouch (0).position) - mousePos;
                }

                diff.z = 0.0f;
                this.transform.position = playerPos + diff;

            }

            if (Input.GetMouseButtonUp (0)) {
                playerPos = Vector3.zero;
                mousePos = Vector3.zero;
            }
        }
    }

##メインカメラのProjection設定がPerspectiveの場合
メインカメラが`z=-10`に、自機が`z=0`にいる前提です。
それ以外の場合は、適宜`adjustment`の数値を調整してください。

    using UnityEngine;
    using System.Collections;
    
    public class player : MonoBehaviour {

        public float adjustment = 3.0f;

        private Vector3 playerPos;
        private Vector3 mousePos;

        void Update () {
            playerControl ();
        }

        private void playerControl(){

            if (Input.GetMouseButtonDown (0)) {
                playerPos = this.transform.position;
                mousePos = Camera.main.ScreenToViewportPoint(Input.mousePosition) * Camera.main.fieldOfView / adjustment;
            }

            if (Input.GetMouseButton (0)) {

                Vector3 prePos = this.transform.position;
                Vector3 diff = Camera.main.ScreenToViewportPoint (Input.mousePosition) * Camera.main.fieldOfView / adjustment - mousePos;

                //タッチ対応デバイス向け、1本目の指にのみ反応
                if (Input.touchSupported) {
                    diff = Camera.main.ScreenToViewportPoint (Input.GetTouch (0).position) * Camera.main.fieldOfView / adjustment - mousePos;
                }

                diff.z = 0.0f;
                this.transform.position = playerPos + diff;

            }

            if (Input.GetMouseButtonUp (0)) {
                playerPos = Vector3.zero;
                mousePos = Vector3.zero;
            }
        }
    }
技術英語 > not a little:かなり / not a bit: ちっとも > I was not a little tired. / I was not a bit tired.

引用: 冠詞マスター教本 by 石井隆之さん

> I was not a little tired. (私はかなり疲れていた)
> I was not a bit tired. (私はちっとも疲れていなかった)

not a little と not a bit で意味が反対になってしまう。

http://ejje.weblio.jp/content/not+a+little
> 少なからず, かなり.

http://ejje.weblio.jp/content/not+a+bit
> 毛頭, 何とも

<hr>
ふと思い出したのは

http://ejje.weblio.jp/content/quite+a+bit
> 《米口語》 たくさん(の…), かなり(の…) 〔of〕.

<hr>
quite a bit から思い出したのは
http://ejje.weblio.jp/content/quite+a+few
> 《口語》 かなり多数 〔of〕.

<hr>
quite a few から思い出したのは
http://eow.alc.co.jp/search?q=fair+amount+of

fair amount of code (かなりのコード)

<hr>
[CocoaPods]ライブラリのリソースバンドルを取得するときは`bundleForClass:`を使う

## TL;DR

[Provide a means to set the bundle identifier in the podspec for generated frameworks #3032](https://github.com/CocoaPods/CocoaPods/issues/3032)

CocoaPodsで配布するライブラリでリソースバンドル(`NSBundle`)を取得する必要がある場合は`bundleForClass:`(Swiftでは`init(forClass:)`)を使いましょう。というお話。

## ライブラリのリソースバンドルを取得する

CocoaPodsで配布するライブラリにおいて、そのライブラリのリソースバンドル(`NSBundle`)をコードから取得することがあります。
アプリ側のコードではたいていメインバンドルを取得すればOKですが、ライブラリのリソースバンドルはアプリのメインバンドルと同じとは限らないため、正しいバンドルを取得しなければなりません。
メインバンドル以外のバンドルを取得する方法はいくつかあります:

- URLを指定する (`+ bundleWithURL:`, `- initWithURL:`)
- パスを指定する (`+ bundleWithPath:`, `- initWithPath:`)
- バンドルIDを指定する (`+ bundleWithIdentifier:`)
- バンドルに含まれるクラスを指定する (`+ bundlerForClass:`)

このうち、上の2つは、ライブラリのバンドルのパスやURLを取得するのがそもそも面倒くさそうです。

バンドルIDを指定する方法は一見正攻法に見えますが、上記のIssueでも議論されている通りこの方法は問題があります。
バンドルIDが一意に定まらないのです。CocoaPodsではライブラリをモジュールを使用せずにインストールした場合はアプリのバンドルIDになりますが、モジュールを使用(Podfileで`use_framworks!`を指定)してインストールした場合は、モジュールごとにバンドルIDが割り振られます。
さらに、モジュールに限定したとしてもCocoaPodsは各モジュールに対して、ライブラリのプロジェクトの(開発者が指定した)バンドルIDではなく、`org.cocoapods`で始まるバンドルIDを勝手に割り振ります。
このバンドルIDをコードに書いてしまうと、CocoaPodsの仕様が変わったときに生成されるバンドルIDがコードで指定するバンドルIDと一致しなくなる可能性がありますし、CocoaPodsを通さず配布する場合もプロジェクトのバンドルIDをCocoaPodsに合わせなければならなくなります。

結局のところ、上記のIssueでも書かれている通り、バンドルに含まれるクラスを指定するのが確実であると言えそうです。
クラスはいずれかのバンドルに含まれているはずなので、ライブラリ内のクラスを指定すれば目的のバンドルを取得できるはずです。

## 例

ライブラリ内のクラスのインスタンスメソッドから:

```swift:Swift
let bundle = NSBundle(forClass: self.dynamicType)
```

```objc:Objective-C
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
```
筆圧感知お絵かきアプリサンプル

機能の3dtouchメモの④に当たる機能を調べてみた。
iOS9.1でペンの関係でかなり変わるらしいけどとりあえずUITouchでforceで取れるということらしい。

ってことですごい簡単に筆圧感知お絵かきアプリを作って見ました。
今までお絵かきアプリって**「UIBezierPath」**を使ったんだけどこれだとパスを作って
最後に色、太さを決めるなんでとりあえず適当にいけそうな
**Core Graphics**を使ったやつで実装してみました。
コードは
[kameware/forcetouchtest](https://github.com/kameware/forcetouchtest)
に置いてあります。
ただこのお絵かきアプリのやり方ってundo,redoの戻る進むの考え方ができないのでもっと良いやり方がアレば教えて下さい。

コードの解説としては
```objc:ViewController.m
    // 線太さ
    float lineWidthc = 10.0;
    if ([touch respondsToSelector:@selector(force)]) { // force対応判定
        NSLog(@"force:%f", touch.force);
        lineWidthc = lineWidthc * touch.force; // forceに合わせ太さを変更
    }
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), lineWidthc);
```
ッて感じでデフォルトを10としてそれに足してforce(~1.0)をかけてるだけです。
簡単！でもこれじゃ戻れないからこのままではダメだ！どうすれば。。。。


■今回の参考
いい感じのgitサンプルとして
[ynishi2014/PressTest](https://github.com/ynishi2014/PressTest)
[yusuga/ForceTapGestureRecognizer](https://github.com/yusuga/ForceTapGestureRecognizer)
が参考になりました。
ありがとうございます。

お絵かきアプリはこちら
[Core Graphicsで作るiPad向けお絵描きアプリの基礎 (2/4)](http://www.atmarkit.co.jp/ait/articles/1012/15/news118_2.html)
を参考

[UITouch Class Reference](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UITouch_Class/index.html#//apple_ref/occ/instp/UITouch/force)
CloudFormationからElasticBeanstalkのebextensions設定ファイルに独自パラメータを渡す方法

# 背景
- CloudFormation を用いた ElasticBeanstalk のワーカーアプリケーション（Docker）構築時に、SQS のメッセージ数でオートスケールするように設定したい。（要は自動化。構築後にマネージメントコンソールや AWS CLI による手動設定はしたくない）
- ワーカー環境なのにデフォルトでは「NetworkOut、CPUUtilization、・・・」といった項目[^1] しか選択肢がない。
- 事前に作成した SQS を ebextensions 設定ファイル内で参照する方法が公式ドキュメントで見つからず、ebextensions 側でSQS のメッセージ数に対する CloudWatch Alarm を作成できない。（Elastic Beanstalk リソース[^2] に「AWSEBWorkerQueue」があるが、対象はアプリケーション起動時に自動作成させた場合に有効・・・だと思う）
- option_settings[^3] を使用する場合、あらかじめキュー名を設定ファイルに記述しておく必要があり、CloudFormation のスタック起動時に動的に指定するという要件に合わない。

# 解決方法
ポイントだけ示します。

```json:CloudFormationテンプレート
"Resources": {
  "MyConfigurationTemplate": {
    "Type": "AWS::ElasticBeanstalk::ConfigurationTemplate",
    "Properties": {
      "OptionSettings": [
        { 
          "Namespace": "aws:elasticbeanstalk:application:environment",
          "OptionName": "MyOptionName",  #パラメータ名
          "Value": "MyOptionValue"       #パラメータ値
        }
      ]
    }
  }
}
```

```yaml:ebextensions設定ファイル
Resources:
  MyAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      Namespace: "AWS/SQS"
      MetricName: ApproximateNumberOfMessagesVisible
      Dimensions:
        - Name: QueueName
          Value:
            "Fn::GetOptionSetting":
              Namespace: "aws:elasticbeanstalk:application:environment"  #CloudFormation側で指定した名前空間
              OptionName: MyOptionName  #CloudFormation側で指定したパラメータ名
              DefaultValue: ""  #とりあえず空文字列。この項目自体を消せないか？
```

独自パラメータを CloudFormation から ebextensions 設定ファイルに渡せることが確認できただけです。
~~実際に期待通りにオートスケールするかどうかはこれから検証予定ですので悪しからず。。~~ :construction_worker:
上記の設定に加えて Threshold もパラメータ化し、オートスケールすることが確認できました。 また、DefaultValue の項目は無くても動作しました。

# 補足
[こちら](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/intrinsic-function-reference-options.html)[^4] の公式ドキュメントに組み込み関数「Fn::GetOptionSetting」の記述がありますが、関数に Namespace を指定できるとは書かれていないようです。なので、自分用のメモがてら投稿させていただきました。

Namespace を指定できるってことは、"aws:elasticbeanstalk:application:environment" 以外の名前空間も参照できるってことですかね？

# 参考リンク
[^1]: [Elastic Beanstalk 環境設定 » 設定オプション](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/command-options.html#command-options-general-autoscalingtrigger)
[^2]: [Elastic Beanstalk 環境設定 » 環境リソースのカスタマイズ](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environment-resources.html)
[^3]: [Elastic Beanstalk 環境設定 » Linux サーバーでのソフトウェアのカスタマイズ](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-options)
[^4]: [AWS リソースのカスタマイズ » 組み込み関数リファレンス » Fn::GetOptionSetting](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/intrinsic-function-reference-options.html)
Google App Engine上でmemcacheを使って、クラウドクリップボードを作ってみた

無料で使えるし、最近Google Compute Engineを使って面白かったので、Google App Engineを使って、少しコードを書いてみた。
Google App EngineのSDKがしっかりできていて、memcacheの開発もデバックもやりやすかった。

以下のようなコマンドをうつと、postの内容をコピーして、以下のコマンドでペーストできる

```
echo "test" | curl --data-binary @- --url http://toolbox-1080.appspot.com/copy/#{your key}
cat main.go | curl --data-binary @- --url http://toolbox-1080.appspot.com/copy/#{your key}

curl -s http://toolbox-1080.appspot.com/paste/#{your key}
```

書いたコード

```
package gaesample

import (
  "fmt"
  "strings"
  "bytes"
  "net/http"
  "github.com/zenazn/goji"
  "github.com/zenazn/goji/web"
  "appengine"
  "appengine/memcache"
)

func init() {
  http.Handle("/", goji.DefaultMux)

  goji.Get("/", handler)
  goji.Post("/copy/:key", handler2)
  goji.Get("/paste/:key", handler3)

}

func handler(c web.C, w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "%s", "Hello World")
}

func handler2(c web.C, w http.ResponseWriter, r *http.Request) {
  ac := appengine.NewContext(r)

  bufbody := new(bytes.Buffer)
  bufbody.ReadFrom(r.Body)
  body := bufbody.String()

  set_key(ac, c.URLParams["key"], body)
}

func handler3(c web.C, w http.ResponseWriter, r *http.Request) {
  ac := appengine.NewContext(r)
  fmt.Fprintf(w, "%s", get_key(ac, c.URLParams["key"]))
}

func key(k string) string {
  s := []string{k, "clipboard"}
  return strings.Join(s, "_")
}

func set_key(c appengine.Context, k string, v string) {

  item := &memcache.Item{
    Key:   key(k),
    Value: []byte(v),
  }

  if err := memcache.Add(c, item); err == memcache.ErrNotStored {
    if err := memcache.Set(c, item); err != nil {
      c.Errorf("error setting item: %v", err)
    }
  } else if err != nil {
    c.Errorf("error adding item: %v", err)
  }

  c.Infof("the value is %q", item.Value)
}

func get_key(c appengine.Context, k string) string {
  if item, err := memcache.Get(c, key(k)); err == memcache.ErrCacheMiss {
    c.Infof("item not in the cache")
    return ""
  } else if err != nil {
    c.Errorf("error getting item: %v", err)
    return ""
  } else {
    c.Infof("the value is %q", item.Value)
    return string(item.Value)
  }
}
```


### memcacheの保存期間
* デフォルトでは、できるだけ長い期間キーを保存するようになっている
* もしメモリが圧迫されている場合は、新しい値が追加されたときに、最も最近使われていない値から削除される。
* 時間でも日付でも保存期間を設定できる

### 参考にしたサイト

「Google App EngineでGoのウェブアプリケーションをまず動かしてみる」を見ながら、App Engineのインストールとルーティングの設定を行った
http://qiita.com/taizo/items/845fcfc58cfd0b30020a

「golang環境設定」を見てgoライブラリのインストール
http://qiita.com/yanap/items/536b94425b20b1bfc46e

「Memcache Go API」
https://cloud.google.com/appengine/docs/go/memcache/

「Using Users Service」を見て、 App Engine Contextを理解
https://cloud.google.com/appengine/docs/go/gettingstarted/usingusers

### メモ

Golangの変数とか関数とか[基礎]
http://qiita.com/mackiso/items/e435e154e3376a68dcca

「golang cast byte to string」
http://stackoverflow.com/questions/14230145/what-is-the-best-way-to-convert-byte-array-to-string

golang で最近お気に入りの WAF「Goji」Add Starmkt - Gojiの実装の参考に
http://mattn.kaoriya.net/software/lang/go/20141021134209.htm
LSTMの備忘録

Neuron 

```math
\begin{eqnarray}
{\bf u} &=& {\bf W}\cdot {\bf x} \\ 
{\bf z} &=& {\bf f}({\bf u})
\end{eqnarray}
```

memory cell

```math
\begin{eqnarray}
{\bf s}^t &=& {\bf g}^{Forget,t} \odot {\bf s}^{t-1} + {\bf g}^{Input,t} \odot {\bf f}({\bf u}^{t})\\ 
{\bf u}^t &=& 
 {\bf W}^{in} \cdot {\bf x}^t 
+{\bf W} \cdot {\bf z}^{t-1}  \\
\end{eqnarray}
```

ここで、$\odot$は要素同士の積を表す。内積でもテンソル積でもなくて、ただのベクトルの要素同士の積。

${\bf f}$は 活性化関数。

忘却ゲート ${\bf g}^{Forget,t}$

```math
\begin{eqnarray}
{\bf g}^{Forget,t} &=& {\bf f}({\bf u}^{Forget, t}) \\
 &=& {\bf f}\left( 
  {\bf W}^{Forget,in} \cdot {\bf x}^{t} 
+ {\bf W}^{Forget} \cdot {\bf z}^{t-1} 
+ {\bf w}^{Forget} \odot {\bf s}^{t-1} 
\right)
\end{eqnarray}
```

入力ゲート ${\bf g}^{Input,t}$

```math
\begin{eqnarray}
{\bf g}^{Input,t} &=& {\bf f}({\bf u}^{Input, t}) \\
 &=& {\bf f}\left( 
  {\bf W}^{Input,in} \cdot {\bf x}^{t} 
+ {\bf W}^{Input} \cdot {\bf z}^{t-1} 
+ {\bf w}^{Input} \odot {\bf s}^{t-1} 
\right)
\end{eqnarray}
```

memory unitからの出力

```math
\begin{eqnarray}
{\bf z}^{t} &=& {\bf g}^{Output, t} \odot
{\bf f}({\bf s}^{t})
\end{eqnarray}
```

出力ゲート ${\bf g}^{Output,t}$


```math
\begin{eqnarray}
{\bf g}^{Output,t} &=& {\bf f}({\bf u}^{Output, t}) \\
 &=& {\bf f}\left( 
  {\bf W}^{Output,in} \cdot {\bf x}^{t} 
+ {\bf W}^{Output} \cdot {\bf z}^{t-1} 
+ {\bf w}^{Output} \odot {\bf s}^{t} 
\right)
\end{eqnarray}
```
Crystal - CSV

Crystalの標準ライブラリのCSVについて

## <i class="fa fa-flask" style="font-size:1em;"></i> サンプル
### <i class="fa fa-code" style="font-size:1em;"></i> プログラム
```ruby
require "csv"

csv =<<-EOS
hoge,hige
hage,hege
EOS

ret = CSV.parse(csv)
pp ret
# => ret = [["hoge", "hige"], ["hage", "hege"]]

ret = CSV.each_row(csv) { |e|pp e }
# => e = ["hoge", "hige"]
# => e = ["hage", "hege"]

ret = CSV.build do |csv|
  csv.row "header1", "header2"
  csv.row "column1_1", "column1_2"
  csv.row "column2_1", "column2_2"
end

pp ret
# => ret = "header1,header2\ncolumn1_1,column1_2\ncolumn2_1,column2_2\n"
```

<i class="fa fa-external-link" style="font-size:1em;"></i> [Crystal Playground 実行結果](http://play.crystal-lang.org/#/r/h30)

## <i class="fa fa-github-square" style="font-size:1em;"></i> GitHub
CrystalのCSVの実装が気になる方はこちら。

* <i class="fa fa-external-link" style="font-size:1em;"></i> [csv.cr - Crystal GitHub](https://github.com/manastech/crystal/blob/master/src/csv/csv.cr)

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [CSV - Crystal API Docs](http://crystal-lang.org/api/CSV.html)
satyrパッケージがエラーしてupdateできない時の対処

yum updateしようとしたら色々エラー
CentOS6から7に上げた際に残ったel6パッケージを削除してもsatyrは
依存関係で削除できない。
どうやらEPEL入れているせいのようだ。
`yum update --skip-broken`でOK

```bash
--> 依存性解決を終了しました。
--> トランザクションの確認を実行しています。
---> パッケージ kernel.x86_64 0:2.6.32-431.17.1.el6 を 削除
---> パッケージ kernel-devel.x86_64 0:2.6.32-431.17.1.el6 を 削除
--> 依存性の処理をしています: /sbin/new-kernel-pkg のパッケージ: kernel-2.6.32-431.20.3.el6.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: kernel-2.6.32-431.20.3.el6.x86_64 (@updates/6)
             要求: /sbin/new-kernel-pkg
            削除中: grubby-8.28-8.el7.x86_64 (installed)
                見つかりません
            次のものにより更新された: : grubby-8.28-11.el7.x86_64 (base)
                見つかりません
 問題を回避するために --skip-broken を用いることができます。
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:
satyr-0.14-1.el6.x86_64 は次の要求が不足ています:  librpm.so.1()(64bit)
```

yum updateでsatyr.x86_64の更新に失敗する | code-lab
http://www.code-lab.net/?p=227
>
この問題はEPEL（ エンタープライズ Linux 用の拡張パッケージ）リポジトリに登録されているsatyr.x86_64のバージョンと、CentOS7のBASICリポジトリに登録されているsatyr.x86_64のバージョンが異なるために発生している。yumコマンドはEPELに登録されているバージョンの新しいsatyrに更新しようとするが、CentOSのBASICリポジトリに登録されている依存パッケージのバージョンが低いため更新に失敗する。
基本的に–skip-brokenオプションを指定して、無視してしまって問題ない。
もしどうしてもエラーが表示されるのが気持ちが悪いなら「EPELリポジトリを使うのを止めろ」という話になる。

Manuals/ReleaseNotes/CentOS6.7/Japanese - CentOS Wiki
https://wiki.centos.org/Manuals/ReleaseNotes/CentOS6.7/Japanese
>satyr パッケージは CentOS 6.7 に含まれているパッケージより新しいものが EPEL に含まれています。EPEL のパッケージでも動くと思いますが、それが RHEL 6.7 と競合するようにEPEL側が削除する可能性があります。私たちはこの問題に対するマイナスの影響があるとは考えておりません。もしも EPEL を使っており、CentOS 版の satyr パッケージの利用を強制したい時、アップデートする前に /etc/yum.repos.d/epel.repo の中に exclude=satyr と追記しておいてください。もし、すでに EPEL 版の satyr パッケージがインストール済みであり、CentOS 版に差し替えたい場合、yum downgrade satyr --disablerepo=epel とコマンドを実行してください。
coの使い方メモ

ES6でPromiseが入ってきたので、coをつかってPromiseを体験してみた

## バージョン
Node.js 4.1.1
[co](https://github.com/tj/co) 4.6.0

## プログラム内容
奇数の時はその値を表示表示し、偶数の時はエラーを返す

## coを使わない場合

こんな感じになるので, `getPromise`が何回も呼ばれるとネストがうざくなる

```javascript
function getPromise(i) {
  return new Promise((resolve, reject) => i % 2 !== 0 ? resolve(i) : reject(new Error(i)))
}

function onSuccess(result) {
  console.log('success', result)
}
function onError(e) {
  console.log('error', e)
}


getPromise(1)
  .then(onSuccess)
  .then(() =>
    getPromise(2)
      .then(onSuccess)
      .catch(onError)
  )
  .catch(onError)

```

## coを使った場合

```javascript
var co = require('co')
co(function *(){
  onSuccess(yield getPromise(1))
  onSuccess(yield getPromise(2))
})
.catch(onError)
```

実行結果

```
success 1
error [Error: 2]
```

## ざっくりとした使い方
`co`の中でreturnを呼ぶと`then`が呼ばれる

```javascript
co(function *(){
  return yield getPromise(1)
})
.then(onSuccess).catch(onError)
```

`Promise`の`reject`が呼ばれた時はエラーが発生するので、`try-catch`で捕まえる事ができる。ただし、この時は`then`のあとに設定している`catch(onError)`は呼ばれない。呼びたいときは`throw`する

```javascript
co(function *(){
  try {
    let r = yield getPromise(2)
    console.log(r)
    return r
  } catch (e) {
    console.log('error catch', e)
  }
})
.then(onSuccess)
.catch(onError)

```

エラーがキャッチされない場合は`catch(onError)`が呼ばれる

```javascript
co(function *(){
  let r = yield getPromise(2)
  console.log(r)
  return r
})
.then(onSuccess)
.catch(onError)
```

`co.wrap`は以下の様な感じになるがいまいちいい使い方が思いつかない。
連続して呼び出せないものか。

```javascript
let p = co.wrap(function *(i){
  return yield new Promise((resolve, reject) => {
    return i%2 === 0 ? reject(new Error(i)) :resolve(i)
  });
});
p(1).then(onSuccess).catch(onError)
```
function hoge() と var hoge = function()の挙動の違い

下記、挙動の違いがありました。

```js:hoge

hello(); // "hello" :関数宣言前でも実行可
// byebye();  TypeError: undefined is not a function :実行不可   

function hello(){
    console.log('hello');
}

var byebye = function(){
    console.log('byebye');
};
byebye();  // "byebye" :関数式後なので実行可
```

たまに実行できなかった謎がとけました！

ちなみに

```js:hoge

function hoge() 
// 関数宣言

var hoge = function{}
// 関数式

```
と呼ぶそうです。
Xcode7で"No accounts with iTunes Connect access."と言われてバイナリをアップロードできない件

# 問題
Xcode6以前では問題なくアプリのサブミットを行っていたアカウントでも, 
Xcode7を使ってiTunes Connectにバイナリをアップロードしようとした場合, `No accounts  with iTunes Connect access.`と言われてアップロードできないことがある.

# 原因
XcodeからiTunes Connectにバイナリをアップロードするには, Xcode上でiTunes Connectに登録済みのユーザを追加しておく必要がある.
iTunes Connectでは複数のユーザを作成し, 各々にロール(Admin, Technical, Marketingなど)を割り当てられる. そして, iTunes Connectに登録した際にデフォルトで作成されるユーザは**Admin**ロールが割り当てられている.

Xcode6以前ではAdminロールを持つユーザをXcodeに追加しておけばバイナリをアップロードできたが, Xcode7からは**Technical**ロールを持つユーザを追加しないとバイナリをアップロードできなくなった.

# 解決方法
1. iTunes Connectに新規ユーザを追加し, Technicalロールを割り当てる(AdminユーザにTechnicalロールを割り当てることは出来ないため).
2. Xcode7のPreferences > Accountsから1で作成したアカウントにサインインする.
3. バイナリをアップロードする.

# 参考
記事作成時のXcodeバージョン: 7.0(7A220)
[On Xcode 7 I keep receiving error “No accounts with iTunes connect access”](http://stackoverflow.com/questions/32592291/on-xcode-7-i-keep-receiving-error-no-accounts-with-itunes-connect-access)
やっとわかったjsの「巻き上げ」

🍹🍹はてなブログはこちら🍹🍹
http://www.sudara-bluse.tokyo/entry/js_makiage

JavaScriptには「変数の巻き上げ」という変な概念があります。
いまいちピンときてなかったのですがわかりました。

まず、

```js:hoge
var pokemon = 'ピカチュー';
function show(){
	console.log(pokemon);
} 
show();   // "ピカチュー"
```

これは普通にコンソールに
"ピカチュー" と出るのはわかるとおもいます。

ではこれは？

```js:hoge
var pokemon = 'ピカチュー';
function sing(){
   console.log(pokemon);
   var pokemon = 'カイリュー';
   console.log(pokemon);
}
sing();
```

"ピカチュー"、"カイリュー"
と思った人は巻き上げにやられてます。不正解です。

正解は、

```js:hoge
// undefined
// "カイリュー"
```
とでます！
気持ち悪い。これが巻き上げだそうです。。

挙動を解説

```js:hoge

/*
    JavaScriptでは、関数内のどこにでもvar文を使用して変数を宣言することができる。
    そして、これらの変数は関数内のいかなる場所で宣言されたとしても、
    その関数の先頭で宣言されたのと同じように動作します。

    こういう挙動↓
*/

var pokemon = 'ピカチュー';
function sing() {
    var pokemon;
    console.log(pokemon);  // undefined 
    pokemon = "カイリュー";
    console.log(pokemon);  // "カイリュー"
}
sing();

```

無意識にやってるかもしれませんが
「関数で使用されるローカル変数は、関数の先頭で宣言する！」
で予防します。

あんまり遭遇したことないのですが、知ってるの大事だとおもいます。

参考 (ありがとございます)
http://analogic.jp/hoisting/

終わり