OmniAICreator/Qiita-1.07M huggingface dataset:
配列のマージ

メモ

```js

var array1 = [1, 2, 3];
var array2 = [4, 5, 6];


//結合
var newArray = array1.concat(array2);

console.log(newArray);
=>[1, 2, 3, 4, 5, 6]

console.log(array1);
=>[1, 2, 3]


//破壊的結合
var ArrayLength = Array.prototype.push.apply(array1, array2);

console.log(ArrayLength)
=> 6

console.log(array1);
=> [1, 2, 3, 4, 5, 6]


```
【Android】SwiftからのAndroid②　レイアウト


#レイアウト
##基本外枠
基本的には外枠のRelativeLayoutにビュー、もしくはLinearLayoutを乗せていきたいと思います。
LinerLayoutを使うのは横、もしくは縦に等分したいときですね。
今回僕は縦に等分するレイアウトが必要なかったので、上からビュー、もしくは横に等分するためのLinearLayoutを
くっつけていくって感じでLayoutを構築しました。
![image](https://qiita-image-store.s3.amazonaws.com/0/69919/5c397a56-4ade-9ec9-17dd-4d65c7254e48.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/69919/a590e95b-e7f2-c4a0-6656-40854aca8746.png)

##プロパティ設定
UIlabel ⇨　textViewを使ってます。alignはgravityを設定。
なぜかDesignの方にはlayout_gravityしかなくてxmlに手動でgravityを追加。
layout_gravityに設定してからxmlでlayout_gravityのlayout_を削除すればいいかも。

linearLayoutの中の等分したいビューは
layout_weightに同じ値を設定すればいい。

margin設定
RelativeLayout上にコントロールを置いた後にlayout:marginのtopに設定する。
僕は上からの距離しか考えてないのでとりあえずこれで綺麗にはなった。

なかなか自分の思った通りになりませんでしたが、いろいろ試行錯誤してるとなんとか自分のデバイス上では
綺麗に写りました。
問題はここからいろんなデバイスに対応するための設定ですよね・・・・

大きい分にはスペースが広くなるだけだと思うのでいいのですが、
特に画面したのmarginは設定していないので入りきらなくなると見切れると思います。

iphoneはとりあえず4までの画面で見れればいいや、くらいの気持ちでレイアウトを作ってたので楽だったなぁ。


#その他
##起動時の処理
http://pentan.info/android/app/sample/splash.html

・LaunchScreen
Androidは起動時の画面が初期プロジェクトで作成されていない。
なので普通のActivityを開いて自動で閉じるようにする。

僕的には特に問題無し。
どちらにしろ起動時にロジックが入れられないからLanchScreenViewControllerを作ってるぐらいですし。

今のSwiftプロジェクトは
LaunchScreen.xib 表示
AppDelegateで起動時の処理（サーバと通信、デシリアライズなど）
LaunchScreenViewControllerで画面遷移判定、LaunchScreenと同じ画面でアニメーション

って感じなのを

起動時の画面をSplashActivityに設定して画面を表示する。
スプラッシュでAppDelegateの処理を行い、グローバルでアクセスできる結果に格納
一定時間経過したらLaunchScreenViewControllerと同じ動作をさせる。

ってしようと思います。

スクリーンに表示されているトップとか戻るボタンまでスプラッシュ画面にしたければFullscreenActivityを作成
Activityを継承しているクラスだけど全画面で表示される。
SystemUiHiderの部分を確認すればいいのかな。

##アプリ名、アプリアイコン
アプリ名：values/strings.xml app_name　を変更
アイコン：mipmap/ic_launcher

アイコンはm、h、xh、xxhサイズを用意しました。
48px、72px、96px、144px
まぁ72と144はiosでも使ってるアイコンを流用してます。72と72x2ですね。

http://blog.excite.co.jp/spdesign/19798730/
http://www.psakura.com/memo/?p=17

##実機デバッグ
AndroidのデバッグモードをONにしても認識しない場合はケーブルの問題の可能性があるみたいです。
僕は[Qi](https://ja.wikipedia.org/wiki/Qi_(%E3%83%AF%E3%82%A4%E3%83%A4%E3%83%AC%E3%82%B9%E7%B5%A6%E9%9B%BB))の充電器で余ってるケーブルを使ってみたら動きませんでした。

まぁスマホにもともと付いてくるようなやつは動くでしょう。

##レイアウトは縦固定にする
AndroidManifestに記述する。
`<activity android:screenOrientation="portrait"/>`
application配下に書いても無効。activity配下に書く必要あり

参考）http://qiita.com/kojionilk/items/b1c3cba512f7a5147f1c



#次
障害とか他の作業とかあってなかなか勉強できませんでしたが、やっとコードを書き始められます・・・
とりあえずは今週中にカメラ周りの機能とネットワーク通信テストまでしたい
ベーシック認証が何度も表示される時の対処法

会社で使用するredmineにベーシック認証をかけようと思ったが、IEで確認すると１ページを表示するのに何度もbasic認証を聞かれてしまう。
アクセスログを見るとどうやらファイル毎に認証を確認されているようだ。

上記の状態を１度の認証で済ませたい。

##対処法

以下をhttpd.confに追加。
Locationディレクティブで.htpasswdの位置を指定してあげれば良い。

```
<Location /develop/redmine> 
    AuthType Basic
    AuthName "Please enter your ID and password"
    AuthUserFile /var/www/html/develop/.htpasswd
    Require valid-user
</Location>
```

普段はDirectoryディレクティブで指定しますが、
シンボリックリンクで動作させているときは上記のようなLocationディレクティブが有効なようです。
はてなダイアリー > 7時に固まる謎

僕は毎朝30分から1時間くらい勉強して、その勉強内容をプライベート設定したはてなダイアリーに記載するということを、ここ５年くらい続けている。

その中で気になるのが、7:00ちょうどになった時点で「はてなダイアリー」に投稿すると、高確率で処理が止まることだ。一度止まると2分くらいは応答が返ってこない。朝の忙しい時に困る。

この件に関しては、はてなに何度か聞いているがきちんとした返事はこれまでなかった。

試しにQiitaで7:00ちょうどに投稿をしてみるのを何度かやったが、はてなダイアリーのように固まるということは一度もなかった。他のサイトでも同じように固まる不具合は一度も見られない。

はてなダイアリーでは7:00頃にメンテナンスのためか処理を受け付けない時間があるのだろうか? 謎である。

<hr>
(追記 15/07/15)
Safari 6.2.4 では固まる時間が10秒程度。
Chrome 43.02357.132(64bit)では上記の通り長い時間固まる。
ブラウザによるのかも。
しかし何故7:00ちょうどなのか？

<hr>
(追記 15/07/22)
6:58の投稿でも2分近く固まった。
7:00前後に何が起こるのだろうか?

<hr>
(追記 15/08/04)
Safariでもダメだ。以下のエラーメッセージが出て投稿そのものが失敗した。
「エントリーの投稿に失敗しました。時間を置いて再度お試しください。(Unexpected toke ')')」。

<hr>
(追記 15/08/12)
Safariで7:00に投稿にて以下のエラーが出た。

> http://d.hatena.ne.jp
> エントリーの投稿に失敗しました。時間を置いて再度お試し下さい。
(Unexpected token ')')

カッコの処理が何か不具合がでているようだ。
言語 > 配列 / 連結リスト > 計算量の比較

参考: コーディングを支える技術 by 西尾泰和さん

挿入時の計算量
- 配列 : O(n)
- 連結リスト : O(1)

取出し時の計算量
- 配列 : O(1)
- 連結リスト : O(n)

挿入が頻繁に起こり、取り出しが少ないものに関しては連結リストが良いということらしい。

挿入も取出しも頻繁にあるものに対しては、どちらが良いという判断は難しそう。そういう場合はハッシュがいいのだろうか?
技術英語 > boilerplate > 決まり文句 / 一般的な記述

Code Completeなどで最初に見た気がする。 

@ Code Complete > Commenting Routines
> The boilerplate comments

これは日本語版のCode Completeでは

> コメントの決まり文句である...

という訳だった。

<hr>
http://ejje.weblio.jp/content/boilerplate
> 日本語WordNet(英和)
> 2. ある種の法律文書やニュース記事で一様に見られる、一般的な記述

<hr>
https://github.com/rziehl/sinatra-boilerplate
> Sinatra Boilerplate is a lightweight project skeleton for getting a Sinatra project up and running as quickly as possible.

boilerplate で github で検索すると「(quickly) up and running」というフレーズが一緒に記載されたものがいくつか見つかった。

<hr>
https://www.youtube.com/watch?v=RletYTFpBP8
23:40あたりでも使われている。
snippet: perl

## 改行を削除

* [改行を置換したい | skmks](http://unicus.jp/skmk/archives/315)

```pl:
perl -pe 's/\n//g' a.txt
```

## 置換

```pl:不要な文字削除
# ^.*[ を [ にリプレース
perl -pe 's@^.*\[@[@g'
```

```pl:マッチパターン
perl -pe 's@^(\[.*\])\t(/.*/)@\2\t\1@g' |\
```

* `\1`, `\2`で指定している。


## 3番目のフィールド値を出力

```sh:元の値
$ date
2015年 7月28日 火曜日 13時18分05秒 JST
```

```sh:awkでいうところのこれ
$ date | awk '{print $3}'
火曜日
```

```sh:perlだとこう
$ date | perl -ane 'print $F[2], "\n"'
火曜日
```
VimでEcma Script 6thのTemplate Stringsを綺麗に表示する

どうも. 社内でVim使いが僕1人なので日々寂しい思いをしている @Quramy です.

今回のエントリでは, Ecma Script 6thのTemplate StringsをVimで扱う話を書こうと思います.

先日「Ecma Script 2015」の名称でリリースされたのでご存知の方も多いと思いますが, Ecma Script 6thでは [Template Strings](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/template_strings)(旧称: quasi-literal)
という機能が追加されています. 
下記のようにバッククォートと`${...}`を利用することで, 文字列の内部で式の値を参照できる, という機能です。

```
var foo = 'FOO';
console.log(`foo: ${foo}`); // > for: FOO 
```

Template Stringsが嬉しいのは, 複数行に渡るコードもそのまま扱える点です.
僕は普段、AngularJSを使ってカリカリとアプリを書いていますが, Template Stringsを使うと, 下記のようにDirectiveのコードに複数行にわたるhtmlのテンプレートをJavaScriptコード内に埋め込むことができます.
管理するファイルも少なくてすみ, .htmlと.jsのバッファを行ったり来たりする必要が無くなるため, 作業の効率upにも繋がります.

```js
angular.module('myApp').directive('awesome', ()=>{
  return {
    restrict: 'E',
    template: `
      <ul>
        <li ng-repeat="item in items">{{item.name}}</li>
      </ul>
    `,
    scope: {
      items: '='
    }
  };
});
```

ここで一つ問題となるのが, 上記の`template: ...` の部分がVim上では只の文字列として表示されてしまう点です[^1] [^2].

以前から, Template Stringsを別のFileTypeのSyntaxとしてハイライトしたいなぁと思っていたところ, [vimでmarkdownのクォート内をシンタックスハイライトする方法とプラグイン](http://qiita.com/joker1007/items/19632542492f6d6395d6)にてMarkdownでほぼ同様のことをしているエントリを見つけたので, JavaScript版を作成してみました.

[Quramy/vim-js-pretty-template](https://github.com/Quramy/vim-js-pretty-template)

先ほどのコード例に対して、このプラギンを適用させた結果です(左：プラギン適用前, 右：プラギン適用後):
![capt_png.png](https://qiita-image-store.s3.amazonaws.com/0/8808/12c1264a-12fa-c6a9-99ab-1f9ef26c277d.png)

`template: ...` の中身がhtmlとしてハイライトされています. これでしょうもないHTMLの文法ミスに泣かされることも少なくなるでしょう. もっと早く作れば良かった。

参考にしたMarkdown用のプラギンと異なる点として, JavaScriptのTemplate Stringsの場合, どのようなFileTypeのテンプレートが記述されるかが分からない、という点が挙げられます.
そこで, 現在のバッファに対してTemplate Stringsで扱うFileTypeを指定するコマンドを提供する形としました(`-complete=filetype`のcommand作ったの、初めてかも).

`:JsPreTmpl <ファイルタイプ名>`


例えば, 僕の場合はJavaScriptで扱うテンプレートは大半の場合htmlですので, 自動的にhtmlのsyntax highlightが適用されるようにvimrcに`autocmd`を記載しています. 

```vim:vimrc
autocmd FileType javascript JsPreTmpl html
```

仮に, 「このバッファではMarkdownのテンプレートを扱いたい!」とか思った場合は `:JsPreTmpl markdown`を叩けば良いようにしています.
1つのファイルで複数のFileTypeのテンプレートを扱う場合に困る気もしますが、そんなマニアックなケースに遭遇することはそう無いでしょう.

また, TypeScriptでもTemplate Stringの構文は同一のため, javascriptの代わりに `autocmd FileType typescript JsPreTmpl html` とすることで同様に動作します[^3].

もし, 同じ悩みをお持ちであれば、是非使ってみていただければと。

[^1]: JavaScriptのSyntaxプラギンが入っていない場合, バッククォートで囲まれた部分が文字列であることすら判定すらされません. 
[^2]: 僕は普段, [jelera/vim-javascript-syntax](https://github.com/jelera/vim-javascript-syntax) というプラギンでSyntaxを綺麗にしています.
[^3]: 実はCoffeeScriptにも対応させています. `"""`(二重引用符 x 3) で囲まれた範囲について、同様の動作をします. ゆくゆくはTypeScriptだけで開発したいけど, 現状では.coffee触る機会も多いので...
thymeleafを触ってみる(備忘録として)

**thymeleaf備忘録**

#概要
thymeleafはjavaのテンプレートエンジンで、最近流行っているらしい。
なんでも、静的にも動的にもページが描画できて、WEBデザイナーとプログラマの共同作業が可能、つまりMVCの分業ができるらしい(詳細は下記) 。
センスある人にviewは任せて、われわれプログラマはゴリゴリとロジックかけて、適材適所みたい。

デザインが完成し、htmlファイルが来ると、タグの埋め込みやらコントローラ間の値の受け渡しは
プログラマの仕事で、thymeleafの勉強が必要となるわけです。
基本的なところにとどまりますが、備忘録として。


#静的にも動的にも描画できる
概要で述べた「静的にも動的にも描画できる」というthymeleafの売り。なんやねんという方へ。
静的にとは値の受け渡しなしでも値が表示できるという意。動的にとはコントローラ側から値を受け取れるという意。例は下記のとおり。th:textは表示しますよ的なやつ。
　　　　　<p> I'am \<span th:text="${nature}"> Human \</span>\</p>

例えば、コントローラ側で「nature」に「gentle」がセットされているとき、「I'm gentle」と表示される。(予想通りだわ)
一方、「nature」に何も入っていないときは、エラーにならず「I'm Human」と表示される。
このように、htmlがコントローラに依存しない点が使いやすいようである。

#繰り返し処理
コントローラ側でリストをセットし、そいつを回したいなんてあるあるですね。
こんな感じに使います。リストは性質をフィールドにもつ人間オブジェクト(dtoとする)のリストで
tableに表示していくものとします。

       <tr th:each="nature : ${human}">
          <td th:text="${nature.name}">太郎</td>
          <td th:text="${nature.age}">30</td>
          <td th:text="${nature.sex}">男</td>
       </tr>

\<tr>タグでリストを回しています。javaの拡張for文みたいなイメージ。そこで取り出したオブジェクトか
ら、\<td>タグで値をとります。「${nature.name}」でnameが取れます(dtoの参照変数名と合わせる)。

#条件分岐

*1.条件に沿う場合のみ出力したい場合*
条件に合うときのみ、何らかの処理をしたいときは「th:if」を利用する。
例えば、「エラーメッセージがnullでないときにエラーと表示したい」とき。

        <p th:if="${errorMessage != null}">エラー</p>

上記は「errorMessage」がnullでないときは「エラー」を出力します。
対してnullの場合は\<p>タグごと消えます。つまり何も出力されません。
「th:if」の反対の意を持つものとして「th:unless」も用意されているみたいですが
読みにくいし、あまり使いたくないですね。


*2.条件に沿うときと沿わないときとで出力を変えたい場合*
条件にあうときはこっち、沿わんときはこっちを表示したいんじゃって時は、
三項演算子が使えます。これはなんかけっこう使えました。例は以下。

         <p th:text="${---条件式---}? 'A' : 'B'"/>

条件式が真のとき「A」が、偽のとき「B」が出力されます。
このように書けば、「if...then...else...」が実現できるはず。


*3.分岐が多数ありそれぞれ出力を変えたい*
これがこの時はこれで...のように多数の分岐を要する時は「switch」が使えます。
上記で取り上げた人間オブジェクトを例とします。

         <td th:switch="${nature.age}">
                <p th:case =="24">1990年生まれ</p>
                <p th:case =="23">1991年生まれ</p>
                <p th:case =="22">1992年生まれ</p>
         </td>

このようにjavaと同じように使えます。
これで「if...else if...else if...」を実現出来るはず。
ただし、cssなどデザインを付けるとき、中のタグにまで範囲が
及ぶかどうかは検証できていないのでご注意を。

以上。
コンピュータ言語を遅く使ってしまう方法2

コンピュータ言語を遅く使ってしまう方法2

コンピュータを遅く使ってしまう方法はいろいろあるものです。
・部分配列を扱う際に不要なコピーを作らないこと。
　処理系の言語・ライブラリが、部分配列の簡潔な記法をサポートしているときには、部分配列からなるコピーを作る代わりに、部分配列自体を関数の引数にするなどして処理することです。
　　

Pythonのnumpyの例を示してみます。
次のように
B=A[3:6]　はコピーを作らず、部分配列に対する別名になっているにすぎません。
別名なので、Bの要素を変更すると、元の配列に対しても変更になっています。

C=A[3:6]+0 　はコピーを作ります。そのため、コピーを変更しても元の配列は変更されません。
この違いを知っていないと、「コピーを変更したつもりが元の配列まで変わってしまっていた。」という
初心者にありがちなエラーを引き起こすことになります。

\>>> import numpy as np
\>>> A=np.arange(0,10,1)
\>>> A
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
\>>> A[3:6]
array([3, 4, 5])
\>>> B=A[3:6] #これはコピーを作らない
\>>> B[0]=-3
\>>> A
array([ 0,  1,  2, -3,  4,  5,  6,  7,  8,  9])
\>>> C=A[3:6]+0 # これはコピーを作る
\>>> C
array([-3,  4,  5])
\>>> C[0]=-30
\>>> A
array([ 0,  1,  2, -3,  4,  5,  6,  7,  8,  9])
\>>> 

また、代入をその場での代入に置き換えれば速くなります。
*=, +=, -= などの利用を考えてみましょう。


```inplace.py
# -*- coding: utf-8 -*-
import cv2
import numpy as np
e0 = cv2.getTickCount()
a = np.ones((1024, 1024))
for i in range(20):
    a = a*2
print np.sum(a[:])

e1 = cv2.getTickCount()

a = np.ones((1024, 1024))
for i in range(20):
    a *= 2
print np.sum(a[:])
e2 = cv2.getTickCount()
print (e1 - e0) / cv2.getTickFrequency(), "# a = a*2"
print (e2 - e1) / cv2.getTickFrequency(), "# a *= 2"
print (e2 - e1) / (e1 - e0)
```

**実行結果**
1.09951162778e+12
1.09951162778e+12
0.116400550283 # a = a*2
0.0270198481919 # a *= 2
0.23212818261

処理時間が23%にまで削減（４倍の高速化）になっています。


**まとめ**
・部分配列にコピーを作らない
・"*="で十分なときには"="を使わない。


Pythonの場合については[「ハイパフォーマンスPython」](https://www.oreilly.co.jp/books/9784873117409/)
を読むといいでしょう。
[iOS]iPhone6Plusで拡大表示を使った場合、UIScreenで取得できるサイズは変わる。


#設定＞画面表示と明るさ＞表示＞拡大、とした場合

これ、実機ないとわからないし（シミュレータでは出来ない）持ってない他の機種でどうなるかは、持ってないので検証できないのだが、
**iPhone6plusでは、[UIScreen mainScreen]から取得できるsizeは、414x736ではなく375x667（iPhone6と同じ）**が返る。

いずれにしても、これはユーザーが決めるものだから、こっちでいじりようがない。
つまり、utsnameベースで機種判定がiPhone7,1だからといって、画面が一意に決まらないケースがある。

この場合はiPhone6の標準と同じサイズになるので、ちゃんと画面を作りこんでれば6のサイズで対応できるため、あまり問題にはならないかもしれないが、プログラムで判定する場合、覚えておいたほうがいいかもしれない。デバイスで判定してもだめだよ、ってことで。

なお、画面の変更方法は以下を参照。

http://faq.mb.softbank.jp/detail.aspx?cid=81248&id=e30573057386d737752775157653374485758566c4d6b554778634e76582f6273556d6c564e746a4d7148633d

https://support.apple.com/ja-jp/HT203073

いじょうです。
pushbullet で スマホorPCに通知を送る

Pushbulletのアカウントページ https://www.pushbullet.com/#settings/account から、「AccessToken」をコピーします。

「AccessToken」を自分のものに置き換えて、以下のコマンドを実行します。

```lang:shell
AccessToken=xxxTHISxxxISxxxTOKENxxxxxxxxxxxx
TITLE="test_title"
BODY="test_body"

curl -u $AccessToken: https://api.pushbullet.com/v2/pushes -d type=note -d title="$TITLE" -d body="$BODY"
```

らくちんですね。

cronでシェルスクリプトを実行した時とか、ちょっと通知が欲しい時に便利かもしれない。
smtpサーバとかいらないから、sendmailコマンドよりもお手軽。
VagrantでEC2

vagrant-awsの0.6.0では、rsyncに失敗するので、明示的に0.5.0をインストールする。

`vagrant plugin install vagrant-aws --plugin-version 0.5.0`

http://yakinikunotare.boo.jp/orebase2/chef/reading_chef_jissen_nyumon/c05


Vagrantfileは下記を参照。

http://dev.classmethod.jp/cloud/aws/launch-ec2-instance-using-awscredentials-from-vagrant/

このままだと下記のWarningが出るので、

`` DEPRECATION WARNING: called deprecated method  `access_key_id' of an Aws::CredentialProvider, use #credentials instead
DEPRECATION WARNING: called deprecated method `secret_access_key' of an Aws::CredentialProvider, use #credentials instead ``

下記のように修正。

````ruby:Vagrantfile
require "aws-sdk";
 
credentials = Aws::SharedCredentials.new

Vagrant.configure("2") do |config|
  config.vm.box = "dummy"

  config.vm.provider :aws do |aws, override|
    aws.access_key_id = credentials.credentials.access_key_id
    aws.secret_access_key = credentials.credentials.secret_access_key
    aws.region = 'ap-northeast-1'
    aws.instance_type = 't2.micro'    
    aws.ami = 'ami-cbf90ecb'
    aws.security_groups = ['test_group']
    aws.keypair_name = 'test_key'
    aws.tags = { 
      'Name' => 'test-vagrant'
    }
    override.ssh.username = "ec2-user"
    override.ssh.private_key_path = 'sshkeyfile'
    override.ssh.pty = true
  end
end
```
[Android] スレッドを止めずに ◯◯ 秒後に △△ するコード


メインスレッドで実行する場合は次のようにします。

```java:例)３秒後に実行
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
    @Override
    public void run() {
        // ここに３秒後に実行したい処理
    }
}, 3000);
```

もしメインスレッドとは別のスレッドで実行させたい場合は次のようにします。

```java:例)３秒後に実行
HandlerThread handlerThread = new HandlerThread("foo");
handlerThread.start();
new Handler(handlerThread.getLooper()).postDelayed(new Runnable() {
    @Override
    public void run() {
        // ここに３秒後に実行したい処理
    }
}, 3000);
```
PHPプロファイラーのblackfireを使う

# PHPプロファイラーのblackfireを使う
## blackfire
![Sensio-Labs-blackfire_secondary_horizontal_transparent.png](https://qiita-image-store.s3.amazonaws.com/0/15175/987be31f-4e76-2d9b-99fa-64a80d843c77.png)
Symfony の開発元である SensioLabs が開発するPHPプロファイラー。

![名称未設定-1.png](https://qiita-image-store.s3.amazonaws.com/0/15175/aba0176d-43f9-081d-b177-e591931a2282.png)

## PHPプロファイラー
### blackfire
PHPフレームワークのSymfonyの開発元SensioLabsが開発している。
サーバーに監視プログラムをインストールするだけで、プログラム側に手を入れる必要はない。
Chrome エクステンションを使って確認する必要がある。

### Xdebug
Xdebug は PHP のコア開発者である Derick Rethans 氏が開発している、PHP のデバッグ用エクステンション。[^xdebug]
`yum install php-pecl-xdebug --enablerepo=epel`で手軽にインストールできる
[^xdebug]: http://keicode.com/cgi/introducing-xdebug.php
webgrind などで視覚化して確認する。

### XHProf & XHGui
ソースコードに `xhprof_enable()` を記述する必要がある。
XHProf は開発元の Facebook がメンテしなくなったため uprofiler に Fork された。[^xhprof]
[^xhprof]: https://gist.github.com/chobie/915ec6d5a1e945be716d#xhprofのphp版がある意味廃止された件について

### Zend Server Z-Ray
Zend Server 上でしか使えない。

### Tideways aka Qafoo Profiler

## 各プロファイラーの比較
| 機能 | blackfire | Xdebug | XHProf | Z-Ray | Tideway |
|-------------------|:-:|:-:|:-:|:-:|:-:|
| 無償利用           | △ | ○ | ○ | △ | 30日間 |
| Extension Interface Available | × | × | × | × | × |
| Data Stored Locally | × | × | × | × | × |
| リクエストの比較    | ○ | × | ○ | × | ○ |
| 有向グラフ          | ○ | ○ | ○ | × | ○ |
| Callers (Parent Calls) | × | × | × | × | × |
| Callees (Child Calls) | × | × | × | × | × |
| メモリー情報        | ○ | × | ○ | ○ | ○ |
| DBクエリの表示      | △ | × | × | ○ | △ |
| PHPエラー&警告表示  | × | × | × | ○ | △ |
| 関数フィルター      | ○ | △ | ○ | ○ | ○ |
| 非ブラウザリクエスト | ○ | ○ | ○ | ○ | ○ |
| Several Execution Times | × | × | × | × | × |
| **機能** | **blackfire** | **Xdebug** | **XHProf** | **Z-Ray** | **Tideway** |
https://sandro-keil.de/blog/2015/02/10/php-profiling-tools/#comparisonmatrix
## blackfireのインストール
```bash
$ sudo yum install pygpgme
$ wget -O - "http://packages.blackfire.io/fedora/blackfire.repo" | sudo tee /etc/yum.repos.d/blackfire.repo
$ sudo yum install blackfire-agent
```
https://blackfire.io/docs/up-and-running/installation
https://blackfire.io/account/credentials

```bash
$ blackfire-agent -register
$ sudo service blackfire-agent start
$ blackfire config
$ sudo yum install blackfire-php
```

## Chromeエクステンションのインストール
* [Blackfire Companion - Chrome ウェブストア](https://chrome.google.com/webstore/detail/blackfire-companion/miefikpgahefdbcgoiicnmpbeeomffld)
【AWS初心者】EC2からS3にある特定のバケットにアクセスするIAM roleを作成する

IAM policy設定をしていて躓いたので、備忘録として残します。

要件：とあるEC2インスタンスから、S3のある特定のバケットへのフルアクセス権限を与える。

当初、何も考えずに以下のようにpolicyを作成して、IAM roleに設定した。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::test/*",
            ]
        }
    ]
}
```

試しに、IAM roleを付与したEC2からaws-cliの`aws s3 ls`使って確認すると、アクセスを拒否される。

```
[root@hoge ~]# aws s3 ls s3://test/

A client error (AccessDenied) occurred when calling the ListObjects operation: Access Denied
```

調べていくと、IAM roleに設定するpolicyの設定が間違っていた。
bucketそのものに対するアクセスと、bucket配下のオブジェクトに対するアクセス両方を指定する必要があるらしい。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::test",
                "arn:aws:s3:::test/*"
            ]
        }
    ]
}
```

aws-cliで確認したら、S3からデータを取得できました。

```
[ec2-user@hoge ~]$ aws s3 ls s3://test/
2015-07-13 06:24:49      47811 -------.txt
2015-07-13 06:24:49      45773 -------.txt
```
JavaEEアノテーション

## はじめに

アノテーションを制する者はJavaEEを制すということで、仕事で色々と試行錯誤している毎日なのですが、アノテーションについて説明しているサイトや書籍があまりないんですよね（英語が読めれば別なのでしょうが・・・）。そういうわけで、これまでに得た情報を自分なりにまとめていきたいと思います。正直アノテーション以前にJava経験があまりないので、色々と誤りがあるかもしれないことを最初にお断りしておきます。

一応下記のアノテーションで、ポピュラーなものをピックアップしていきたいと思います。

http://www.deic.uab.es/material/102750-javaEE7ReferenceSheet.pdf

## Named
DI対象として登録することを示すアノテーション。下記の例ではNamedBeanクラスを登録しています。

```java:

@Named
@Dependent
public class NamedBean {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public String sayHello () {
        return "Hello!! " + this.name;
    }
}
```

## Singleton
こちらもNamed同様にDI登録のためのアノテーションですが、シングルトンで生成されるようです。


```java:
@Singleton
public class SingletonBean {

    private String name;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public String sayHello () {
        return "Hello!! " + this.name;
    }

}

```

## Inject
NamedやSingletonによってDI登録したクラスのインスタンスを、文字通り「注入する」ためのアノテーション。下記の例では、TestLogicにnamedBeanとsingletonBeanのインスタンスを注入しています。

```java:
public class TestLogic {
    
    @Inject
    NamedBean namedBean;

    @Inject
    SingletonBean singletonBean;

```

## RequestScoped
DI登録したクラスの生存期間を決定するためのアノテーションです。
上記のNamedBeanはRequestScopedを付与しているので、リクエスト～レスポンスの間まで生き続けます。

## SessionScoped
DI登録したクラスの生存期間を決定するためのアノテーションです。
セッションが継続している、具体的にはログイン中は生き続けます。

## ApplicationScoped
DI登録したクラスの生存期間を決定するためのアノテーションです。
アプリケーションの開始から終了まで生き続けます。
この辺はServlet/JSPのスコープ定義に似ているので理解しやすいですね。

## ConversationScoped
DI登録したクラスの生存期間を決定するためのアノテーションです。
独自のスコープ定義をできるアノテーションのようです。
上記のスコープで表せない場合に使用するようですが、あまりよく分かっていません。

## Dependent
DI登録したクラスの生存期間を決定するためのアノテーションです。
このアノテーションを指定した場合は、注入先と同じスコープが適用されるとのこと。
下記で詳しく検証していただいている方がおられたので参考にどうぞ。

http://qiita.com/opengl-8080/items/431de9175dca33a09ba8
「進捗・どう・です・か」をHaskellで書いてみた

元ネタはこちらです
[「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム](http://elephnote.com/blog/archives/936)

最高です！センス抜群です！
元ネタの元ネタは下ネタでしたがこれなら職場でも堂々と使えます！！

```hs
import Data.List
import System.Random

inflame :: String -> IO String
inflame s = do
    s' <- (s ++) . (["進捗", "どう", "です", "か"] !!) <$> randomRIO (0, 3)
    if isSuffixOf "進捗どうですか" s'
        then return (s' ++ "???")
        else inflame s'

main :: IO ()
main = do
    s <- inflame ""
    putStrLn s
    putStrLn $ show (length s) ++ "文字で煽られました。"
```
Gmail のキーボードショートカット

こんにちは。
矢印キーでviを操作している人を見ると、つい矢印キーをガムテープで接着して使用禁止にしてしまいたい衝動に駆られる者です。

さて、受信トレイやラベルに溜まったGmailのメールを1件ずつマウスクリックで処理するのは大変ですよね。
そんなときは、viライクなキーボードショートカットでラクしましょう。

# 設定でキーボードショートカットをON
キーボードショートカットはデフォルトOFFなので有効化します。
![kbd-shortcut-on.png](https://qiita-image-store.s3.amazonaws.com/0/83323/044ac155-003f-c39f-d313-9b1af59b3b95.png)

# スレッドの操作
ショートカットをONしたら、スレッド間移動やメールの開封はキーボードショートカットで行えます。私が最近よく使用しているショートカットは以下の~~4つ~~~~5つ~~6つです。これ以外にも便利なショートカットがあったら教えてください。

前のスレッド　k
次のスレッド　j
スレッドを開く　o
ラベルの削除　y
メールの削除　#
アーカイブ e
属性に設定したenumの値に対応する文字列を取得する。


画面に表示するときなどenumの値をそのままではなく、（もっと人間判りやすいように）値に対応する文字列を表示したいということは良くあって、以前、enumに拡張メソッドを定義すればスッキリ書けるんじゃないかということを書きました（[C# の enum に関連する小技。](http://qiita.com/hugo-sb/items/38fe86a09e8e0865d471)）。

この方法は単純で良いと思うんですが、enumの定義と対応する名称の定義の場所が離れてるのが何か格好悪い。
そこで、属性を使えばもっと綺麗に書けるんじゃないかと試してみました。

拡張メソッドの中身がややこしくなりましたが、ジェネリックにして使いまわしできるようにすれば良いかな。


```csharp:enumTest.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;

namespace EnumTest
{
	// enum 定義
    enum Gender
    {
        [Display(Name = "不明")]
        Unknown,
        [Display(Name = "男性")]
        Male,
        [Display(Name = "女性")]
        Female
    }

    // Genderに対する拡張メソッドを定義する
    static class GenderExt {
        // 表示名を取得する。
        public static string DisplayName(this Gender value) {
            var fieldInfo = value.GetType().GetField(value.ToString());
            var descriptionAttributes = fieldInfo.GetCustomAttributes(
                typeof(DisplayAttribute), false) as DisplayAttribute[];
            if (descriptionAttributes != null && descriptionAttributes.Length > 0) {
                return descriptionAttributes[0].Name;
            } else {
                return value.ToString();
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            foreach (var e in Enum.GetValues(typeof(Gender)) as IEnumerable<Gender>)
            {
                Console.Out.WriteLine(e.DisplayName());
            }
            Console.In.ReadLine();
        }
    }
}
```
メモ：Raspberry PiにシステムモニタツールMonitorixをインストールして温度とか監視する

夏になったので、システムモニタツール [Monitorix](http://www.monitorix.org/) を入れてRaspberry Piの温度とかを監視してみる。

参考：[Monitorixで簡単モニタリング](http://blog.idcf.jp/entry/cloud/monitorix/)

Raspbianを使っているので、インストール手順は[Debianのもの](http://www.monitorix.org/doc-debian.html)を参考に、手動で.debを入れる方法を選択した。

```
% sudo apt-get update
% sudo apt-get install rrdtool perl libwww-perl libmailtools-perl libmime-lite-perl librrds-perl libdbi-perl libxml-simple-perl libhttp-server-simple-perl libconfig-general-perl libio-socket-ssl-perl
% sudo dpkg -i monitorix*.deb
% sudo apt-get -f install
```

Raspberry Piの各ペリフェラルコアクロック、電圧、温度表示を[サポートしている](http://www.monitorix.org/documentation.html#40)ので、/etc/monitorix/monitorix.confを書き換えて有効にする。

```/etc/monitorix/monitorix.conf
# Graphs (de)activation
# -----------------------------------------------------------------------------
<graph_enable>
        (中略)
        raspberrypi     = y
        (中略)
</graph_enable>
```

書き換えた後、

```
% sudo service monitorix restart
```

して、様子見。

> ![Raspberry Pi sensor statistics](https://qiita-image-store.s3.amazonaws.com/0/82738/0366b145-9d7e-50ba-f4f5-d04476853c97.jpeg)

動き出した。59度…わりと熱いんだな…。

> ![一日放置した結果.jpeg](https://qiita-image-store.s3.amazonaws.com/0/82738/b152085e-7dfd-9bbb-74df-29fb3182af5d.jpeg)

一日放置した結果。エアコンをつけた時間帯でわかりやすい変化。
画像を偶数のサイズにするnodeスクリプト(windows編)

AdobeのCCのアセット機能で画像のスライスは格段に楽になった。
その際生成される奇数の画像を毎回photoshopで、修正していたのだが、

それ用のスクリプトを[katapad](https://github.com/katapad/)さんが用意してくれてました。
果てしなく便利！（要imagemagic）

http://qiita.com/katapad/items/261b277f1abe20018fa1
https://github.com/katapad/evenizer


ですが、windowsユーザーの僕はzshが入っておらず、
１ファイルは処理できるのだがワイルドカードが使用できなかった。

zshをwindowsに入れるためにはCygwin入れたり諸々設定をしなければならず非常にめんどくさい。
http://futurismo.biz/archives/1363

なので、globを使って稚拙なnodeスクリプトを書きました。
外部からkatapadさんの外部コマンドを読み込む。

```lang:even.js

var glob = require("glob")
var exec = require('child_process').exec;
var options = {timeout: 1000};

var cmd = "./**/*.{jpg,png,gif}";
glob(cmd, options, function (er, files) {
  for (var i =0; files.length > i; i++) {
    console.log(files[i]);
    exec("evenizer -i "+ files[i]);
  };
});

```

拡張子を選択したい場合はこっちのほうがいいかもしれません。
コマンドライン上で、引数にその拡張子だけを入力すると特定の拡張子だけを処理します。

```lang:コマンドライン
node x.js png
```

```lang:even2.js

var glob = require("glob")
var exec = require('child_process').exec;
var options = {timeout: 1000};

// ここに拡張子が入る
var extension = process.argv[2]

var cmd = "./**/*." + extension ;

glob(cmd, options, function (er, files) {
  for (var i =0; files.length > i; i++) {
    console.log(files[i]);
    exec("evenizer -i "+ files[i]);
  };
});

```



![gif.jpg](https://qiita-image-store.s3.amazonaws.com/0/30049/66f7abbe-205d-8cd8-7cea-001513ca223a.jpeg)

奇数のファイルを1px広げてくれるのだが、 
気を付けないといけないのが、jpgファイルの場合、黒のふちが出てしまった。
同じファイルをpngや、gifに変換した時は大丈夫だったので、jpg特有みたい。

こういう作業を自動化してくれるスクリプトは本当にありがたいです。
ありがとうございました。
どんな npm-scripts が定義されているのか見る


今までgrepとかエディタやPAGERでいちいち見ていたけど http://stedolan.github.io/jq/ を使うと楽なことに気付いた


```bash
$ jq .scripts package.json
{
  "start": "node server.js",
  "lint": "eslint src gulpfile.babel.js webpack.config.js && csscomb src/components --lint",
  "comb": "csscomb src/components --verbose",
  "test": "eslint src && jest",
  "build": "gulp build",
  "serve": "gulp serve",
  "sync": "gulp sync"
}
```

と思ったけど `npm run` を知らなかっただけだったみたい

```bash
$ npm run
Lifecycle scripts included in :
  start
    node server.js
  test
    eslint src && jest

available via `npm run-script`:
  lint
    eslint src gulpfile.babel.js webpack.config.js && csscomb src/components --lint
  comb
    csscomb src/components --verbose
  build
    gulp build
  serve
    gulp serve
  sync
    gulp sync
```
pandas-td0.8.0にmagic functionが導入されてもっと便利になったよ！

pandas-tdにmagic functionが導入されてもっと便利になったよ！という話を書きます。

pandasとかが何かという話はこちらの[TreasureDataとPandasとJupyterでインタラクティブにデータを可視化する。](http://qiita.com/toru-takahashi/items/7c4320df5b77e4b6e2a5)を見てね。

けれどもpandasを簡単にいうと、統計分析とかができるライブラリなんだけど、いろんなデータソースへ接続するためのインタフェースにできて、便利なのです。

個人的なユースケースとしては、お客さんの問い合わせがあったら、TD上のログとかRDBとかから必要な情報をとってきてくっつけたりしてます。あとはその調査した結果をjupyterを使っているので、githubで簡単に共有できるようにしてます。


そして、今回pandas-td 0.8から導入された[magic function](http://nbviewer.ipython.org/github/jvns/pandas-cookbook/blob/v0.1/cookbook/A%20quick%20tour%20of%20IPython%20Notebook.ipynb#Magic-functions)は、事前に関数を作っておくと、`%`,`%%`だけでその関数を呼び出せるという機能です。
これだけだと、なにが便利なのかわかりにくいので、実際に使ってみましょう。

# 今まで

は、下記のように一個一個の接続情報を作って、関数を使って、とコピペでは済むけれども必要な記載が結構あり、ただSQLを発行するだけでもPython力が必要でした。

```
import os
import pandas_td as td

# Initialize connection
con = td.connect(apikey=os.environ['TD_API_KEY'], endpoint='https://api.treasuredata.com/')
engine = con.query_engine(database='sample_datasets', type='presto')

# Read Treasure Data query into a DataFrame.
df = td.read_td('select * from www_access', engine)
```

# Magic Functionを使うと
これですむ。

```
%td_use sample_datasets

%%td_presto
select count(1) cnt
from nasdaq
```

しかも、`%%td_use`のあとにテーブル名を打つと、スキーマも見れる

```
nasdaq
```

![image0](http://i.gyazo.com/08ef1d15a1dc539200f2d5340bd6cbe5.png)

しかも、カラム名のタブ保管も有効になる！

![image3](http://i.gyazo.com/7c221420ccfae55bf440f75230a2cabe.png)

`%matplotlib inline`を有効にしておいて、`%%td_presto_plot`のマジックコメントでクエリを投げると、すぐに可視化してくれる！！

![image4](http://i.gyazo.com/03c8dcac5f5f95b593ef015ff1d52882.png)

便利。


# どうやって使うのか？

- 環境変数にAPIKEYをセットする

```
$ export TD_API_KEY=1234/abcd...
```

- マジックコメントを自動でロードさせておく（手動でもいいけど）

`~/.ipython/profile_default/ipython_config.py`に下記の内容を保存する。

```
c = get_config()

c.InteractiveShellApp.extensions = [
    'pandas_td.ipython',
]
```

# もっかい言うけど、
これだけで、あとはJupyter(ipython)を起動させると、自動でロードされてつかえるようになるよ！

![image1](http://i.gyazo.com/3602c3c274fc9d0e45f17ec545e0a66a.png)

クエリも！
![image2](http://i.gyazo.com/d0288db584c68636e3f874cbeb1016ff.png)

タブ保管も!
![image3](http://i.gyazo.com/7c221420ccfae55bf440f75230a2cabe.png)

簡単な可視化も！
![image4](http://i.gyazo.com/03c8dcac5f5f95b593ef015ff1d52882.png)

# まだちょっとめんどくさいところ
取得したデータの文字列が長かったり、カラム数が多かったりで省略表示されている場合に、ちょっとカラムのデータを見たいなというときに、
いちいちコマンド実行するのがだるい。
今は、to_csvで、CSV出力をしてエディタで最後はみちゃうことあります。

あとは、`x = %td_databases`という代入はできるけれども、`x = %%td_presto`という方法で代入ができないので、そこができる方法があると嬉しい。



あまりスクリプト的な内容を必要としな場合にはこれで十分といえば十分ですねー。

ちゃんちゃん。

# 補足
@k24d さんに、`_`を使うと前回の実行結果の値を代入できたり、Out[5]の結果を代入できることを教えていただきました。

つまり、下のあとに

```
%%td_presto
select
  td_date_trunc('hour', time) as time,
  COUNT(1) as code200_cnt
from
  www_access
WHERE code = 200
group by
  1
```

```
x = _
```

だったり、

```
x = Out[40]
```

でできました！
便利！！
rpmが失敗した時の対応

### やったこと
```
# cat /etc/redhat-release
CentOS release 5.9 (Final)

# rpm -Uvh https://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
→失敗

# wget https://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
# rpm -ivh https://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
→失敗

# wget https://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
# rpm -ivh http://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
→成功
```

### rpmのオプション
```
-i | --install  RPMパッケージをインストールする。
-U | --upgrade  RPMパッケージをアップグレードする。すでにパッケージがインストールされている場合，そのパッケージを新しいバージョンにアップグレードする。パッケージがインストールされていない場合，新たにそのパッケージをインストールする。
-h | --hush 処理の進行状況を「#」記号で表示する。
-v | --verbose  操作対象のパッケージ名を表示する。
```

### 結論
単純にrpmでhttpsでが通らなかったようだ。
cocos2dx　v3.6　Widgetオブジェクトのタッチ領域判定

Widgetオブジェクトのタッチ領域判定
Widget継承クラスである場合、自分の持つ領域がタッチされたかどうかの判定が簡単にできるようです。
以下の通り
Widgetを継承している場合にタッチメソッドの中で`WidgetonTouchBegan()`を呼び出す。

```Carousel.cpp
bool CarouselView::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *unusedEvent)
{
	//衝突判定
	bool pass = Widget::onTouchBegan(touch, unusedEvent);  // 自身の範囲がタッチされたか比較できる。
```
アルゴリズムまとめ by PHP

#アルゴリズムまとめ by PHP

PHPでアルゴリズムを勉強しました :laughing: 
やはり、アルゴリズムは写経、コードを読むだけでは駄目で、
実際手で流れを書きながらではないと理解できないです。
以下、アルゴリズムのコードです
リンクはGitHubに飛びます。

## 探索
### [チェインハッシュ法による探索](https://github.com/Khanashima/algorithm/blob/master/src/search/chainHashSearch.php)
### [バイナリサーチ](https://github.com/Khanashima/algorithm/blob/master/src/search/binarySearch.php)
### [リニアサーチ](https://github.com/Khanashima/algorithm/blob/master/src/search/linearSearch.php)
### [深さ探索](https://github.com/Khanashima/algorithm/blob/master/src/mazeTest.php)
### [文字列探索 Boyer Moore法](https://github.com/Khanashima/algorithm/blob/master/src/search/boyerMooreSearch.php)
### [2分木](https://github.com/Khanashima/algorithm/blob/master/src/tree/binaryTreeTest.php)

## ソート
### [マージソート](https://github.com/Khanashima/algorithm/blob/master/src/sort/mergeSort.php)
### [クイックソート](https://github.com/Khanashima/algorithm/blob/master/src/sort/quickSort.php)
### [シェルソート](https://github.com/Khanashima/algorithm/blob/master/src/sort/shellSort.php)
### [単純挿入ソート](https://github.com/Khanashima/algorithm/blob/master/src/sort/insertionSort.php)
### [単純選択ソート](https://github.com/Khanashima/algorithm/blob/master/src/sort/selectionSort.php)
### [バブルソート](https://github.com/Khanashima/algorithm/blob/master/src/sort/bubbleSort.php)

## その他
### [fizzBuzz](https://github.com/Khanashima/algorithm/blob/master/src/fizzBuzz.php)
### [リングバッファ](https://github.com/Khanashima/algorithm/blob/master/src/ringBufferTest.php)
### [階乗の計算](https://github.com/Khanashima/algorithm/blob/master/src/recursion/factorial.php)
### [ハノイの塔](https://github.com/Khanashima/algorithm/blob/master/src/recursion/hanoi.php)
### [ユークリッドの互除法](https://github.com/Khanashima/algorithm/blob/master/src/recursion/euclidean.php)
### [7パズル](https://github.com/Khanashima/algorithm/blob/master/src/sevenPuzzleTest.php)
### [8個王妃問題](https://github.com/Khanashima/algorithm/blob/master/src/recursion/eightQueen.php)
### [ダイクストラ法](https://github.com/Khanashima/algorithm/blob/master/src/dijkstraTest.php)
### [ナップザック問題](https://github.com/Khanashima/algorithm/blob/master/src/knapsackTest.php)
### [フィボナッチ数列 (メモ化再帰含む)](https://github.com/Khanashima/algorithm/blob/master/src/recursion/fibonacci.php)

## 1時間以内に解けなければプログラマ失格となってしまう5つの問題
### [問題1](https://github.com/Khanashima/five_problems/blob/master/questionOne.php)
### [問題2](https://github.com/Khanashima/five_problems/blob/master/questionTwo.php)
### [問題3](https://github.com/Khanashima/five_problems/blob/master/questionThree.php)
### [問題4](https://github.com/Khanashima/five_problems/blob/master/questionFour.php)
### [問題5](https://github.com/Khanashima/five_problems/blob/master/questionFive.php)


###参考書籍
明解 Javaによるアルゴリズムとデータ構造
プログラミングの宝箱 アルゴリズムとデータ構造 第2版
最強最速アルゴリズマー養成講座 プログラミングコンテストTopCoder攻略ガイド

###参考サイト
[AtCoderの資料](http://www.slideshare.net/chokudai/dfs-49066641)
[ソートの流れを図解で解説](http://sorting.at/)
C#　文字列　基本


```csharp
    //stに文字列 "ABC" を代入する
    string st = "ABC";

    //stに文字列 "CDE" を連結したものを stに格納する
    st = st + "CDE";

    //stに文字列 "789" を連結したものを stに格納する (代入演算子を使った方法)
    st += "789";

    // stに文字列 "789" を連結したものを stに格納する (代入演算子を使った方法)
    st += "789";
    
    //2つの文字列を連結する
    string s1 = "ありがとう";
    string s2 = "ごめんなさい";
    string s3 = s1 + s2;
    
    //Length	文字数を取得する
    string st = "あいう";
    st.Length;→3
    
   //2文字目の後に文字列 "うこ" を挿入して「ようこそ」にする
    string st = "よそ";

    st1 = st.Insert(2, "うこ");
    
    //文字列を置換する
    string st = "HANABI";
    st.Replace("a","A");→"HaNaBI"
    
    //指定した位置から文字削除する
    string st="あいうえお";
    st.Remove(1, 2);→あえお
    
    //指定した文字列削除
    string before = "あいうえお";
    string after = before.Replace("うえ", "");
    
    //指定した改行コード削除
    string str = "\r\nこんにちは。\r\nこんばんは。\r\n";
    //削除する文字の配列
    char[] removeChars = new char[] { '\r', '\n' };

    //削除する文字を1文字ずつ削除する
    foreach (char c in removeChars)
    {
        str = str.Replace(c.ToString(), "");
    }
  
   //指定文字列が先頭から始まっているかを判定します
   if (s1.EndsWith("AB") == st1.StartsWith("ABCDEF"){
       //ABが先頭から始まっているならtrue
   }
　
　st2.StartsWith("ABC", true);//大文字/小文字区別を無視

　//EndsWith()は、指定文字列が末尾で判定します。
　st1.EndsWith("CD");
　st2.EndsWith("CD", true);//大文字/小文字区別を無視
 
    //文字が空かどうか判定する
   if (String.IsNullOrEmpty(st) == true)
    {
  //null、もしくは空文字列である
    }
else
    {
  //nullではなく、かつ空文字列でもない
    } 
    
//カンマ区切りの文字列を分割して配列に変換するサンプルです。
    string str = "東京,大阪,名古屋";
    string[] sp = str.Split(',');

    sp[0] → "東京"
    sp[1] → "大阪"
    sp[2] → "名古屋"
 
//指定した文字列が含まれるか判定するサンプルです。
    string str = "ABCDEFG";
    bool a1 = str.Contains("CD");
    bool b2 = str.Contains("cd");
    a1 → True
    b2 → False 
 
\r	CR
\n	LF
\r\n	Windowsの改行コード
\"	ダブルクオーテーション
\'	シングルクオーテーション
\\	￥
\t	タブ
\0	null
=======
    st = st.Insert(2, "うこ");
>>>>>>> YOUR_EDITION
```
Ansible サーバ管理メモ

#Ansible によるサーバ管理のメモ
* コントロール優先で ansible.cfg はカレントディレクトリに用意


#inventory
* inventory/ に環境毎、グループ毎に分割して配置
* Ansible の仕様により、 group_vars, host_vars を inventory 下に配置

#ansible
* ssh<br>
導通前に ssh でサーバ接続し、コネクションを確認する
* 導通<br>
ansible -i [inventory] [hostname] -m ping
* fact 取得<br>
ansible -i [inventory] [hostname] -m setup
* コマンド ( ex uname )<br>
ansible -i [inventory] [hostname] -a 'uname -a'

# ansible-doc
* module help ( ex yum )<br>
ansible-doc yum

# ansible-playbook
* 文法チェック<br>
ansible-playbook playbook/servers_local.yml --syntax-check
* 対象ホストを確認する<br>
ansible-playbook playbook/servers_local.yml --list-hosts
* 対象タスクを確認する<br>
ansible-playbook playbook/servers_local.yml --list-task
* Dry run<br>
ansible-playbook playbook/servers_local.yml --check
* step 実行<br>
ansible-playbook playbook/servers_local.yml --step
* ホスト指定実行<br>
ansible-playbook playbook/servers_local.yml -l [hostname]
* タグ指定実行<br>
ansible-playbook playbook/servers_local.yml --tags=XXX
* 接続テスト (インベントリやホストの切り替え後に接続テストする）<br>
ansible-playbook playbook/ping.yml
firewalldの設定(centos7)

# 免責みたいな

完全に自分用のメモです。パス忘れるので。

# serviceの作成

`/etc/firewalld/services`にXMLファイルを作成します。
`/usr/lib/firewalld/services`にデフォルトインストールされているサービスがあるので、それを参考に（コピーして）作るといいです。

# firewalld へ登録

`# firewall-cmd --permanent --add-service={{作ったサービス}}`
`# firewall-cmd --reload`

> 本当は `firewall-cmd --ad-service`して動作確認した後に
> `--permanent` -> `--reload`なんだろうけども回復可能な変更ならはしょってもいいかな。。
体系的に学ぶ　安全なweb アプリの作り方

#今日から脆弱性について学んでいきます。

勉強するのはこの本！！
アマゾンクラウドエンジニアが選ぶ３５選に入りました！！
http://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8-%E6%B5%A9/dp/4797361190

今日学んだことは以下の点です。

・HTTP
・セッション管理

①HTTPについてはVMwareを立ち上げて、fiddleというプロキシツールを用いて、勉強していきました。


◎URLが重要情報を含む場合refererヘッダにより、情報がリークする可能性がある。
➡なのでGETとPOSTを使い分ける

もし、、、、データ更新など副作用を伴うリクエストの場合
　　　　　　秘密情報を送信するとき　　　　　　　　　　　　➡POST
　　　　　　送信するデータの総量が多い場合

もし、、、　リソースの取得、副作用がない　➡GET

◎ブラウザから送信する値は書き換えることができる！！

◎HTTPはステートレスなので。認証の時のはデータを保持せず、ただインプットに反応してアウトプットを出す。
このときに渡す整理番号みたいなものがセッションID

しかし、　セッションIDがわかるとセッションハイジャックがおこり、された相手は情報を見られてしまう。　

➡開発ツールの提供するせっきょん管理機構を利用しよ！

◎クッキードメイン属性を設定しない　➡脆弱性の原因となる
[AWS]コマンドラインからVPCを作成してみよう！その１[AWSCLI]


気温上がりましたね・・・暑いの苦手です。吉田です。
前回までリファレンスを書いてきました。じゃあ実際に作るのはどうすりゃいいんじゃ！
ってことでやっていきます。
前の投稿でも書きましたが、regionは適宜指定してください。

---
###awscliでVPC環境を構築しよう！
今回のゴールはこちら

![150713-0002.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/5034b23b-e1ab-e222-0c15-d3e3183223b0.jpeg)


publicサブネットを１つ持つ一般的なVPCを作成します。
本投稿の目標は

![150713-0003.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/f4260638-7036-9b77-616f-6a62164863af.jpeg)


1. VPCを作成する
2. IGWを作成する
3. 作成したIGWをVPCにアタッチする

ところまでやってみたいと思います。


##1.VPCの作成
###[aws ec2 create-vpc]コマンド

早速VPCを作成していきます。まず使用するのがcreate-vpcコマンド
名前通り、VPCを作成します。
使用するオプションは以下の通りです。

| オプション 　         | 意味　　　　     | 何を書けば良いか|
|:-----------------|:------------------|:------------------|
| --cidr-block       |CIDRを書きます     | 192.168.0.0/16とか|
| --region       |リージョンを書きます     | ap-northeast-1など|


---

```bash:サンプル
aws ec2 create-vpc --cidr-block 10.0.0.0/16 
```


VPCのCIDRを指定して作成します。
コマンドライン上でサンプルコードを実行してください。
東京リージョンに10.0.0.0/16の範囲を持つVPCが一つ作成されます。
成功すると以下のように出力が帰ってくるのでVpcIdを控えておいて下さい。後ほど使用します。

```json:表示
{
    "Vpc": {
        "InstanceTenancy": "default", 
        "State": "pending", 
        "VpcId": "vpc-xxxxxxxx",  
        "CidrBlock": "10.0.0.0/16", 
        "DhcpOptionsId": "dopt-xxxxxxxx"
    }
}
```


---
###[aws ec2 create-tags]コマンド
作成したVPCには名前をつけておきましょう。
AWS上のリソースにタグ付けをしておくことは非常に大事です。
CLIで操作する際にタグが付いていると簡単に値を取得できるメリットは大きいですが、やはりそこそこ使っていると「これ、そもそもなんだっけ？必要だっけ？」ってなってきます。名前の管理は大切です。

| オプション 　      | 意味　　　　        | 何を書けば良いか      |
|:-----------------|------------------:|:------------------:|
| --resources      | タグをつけたいサービスのid| vpc-XXXXXXXX    |

今回はVPCなのでVPCのidを指定します。インスタンスならinstanceidを指定します。

```bash:サンプル
aws ec2 create-tags --resources vpc-XXXXXXXX --tags Key=Name,Value=testVPC
```

VPCidを先ほど作成したvpcのidに指定して作成してください。
成功しても何も帰ってこないのでできたか確認してみましょう。

####[describe-tags]コマンド
```bash:確認
aws ec2 describe-tags --filters "Name=resource-id,Values=vpc-xxxxxxxx"

```

```json:表示
{
    "Tags": [
        {
            "ResourceType": "vpc", 
            "ResourceId": "vpc-xxxxxxxx", 
            "Value": "testVPC", 
            "Key": "Name"
        }
    ]
}

```

このように表示されれば無事VPCにタグ付けがされています。
マネジメントコンソールでもtestVPCが確認できますよ！



##2.IGWを作成する

###[create-internet-gateway]コマンド
次にIGWを作成していきます。

```bash:サンプル
aws ec2 create-internet-gateway

```
このコマンドは特にオプションは必要ないのでそのまま実行してください。
強いて言えばregionの指定くらいです。

```json:表示
{
    "InternetGateway": {
        "Tags": [], 
        "InternetGatewayId": "igw-xxxxxxxx", 
        "Attachments": []
    }
}
```
上記の「InternetGatewayId」を控えておいて下さい。後ほど使います。

##3.作成したIGWをVPCにアタッチする

###[attach-internet-gateway]コマンド
先ほど作ったIGWをVPCにアタッチします。

|    オプション　|     意味 　　　| 何を書けばいいか |
|:------------|:------------|:------------:|
| --internet-gateway-id | IGWのidを指定する | igw-XXXXXXXX |
| --vpc-id | IGWをアタッチするVPCを指定する　 | vpc-xxxxxxxx |

```bash:サンプル
aws ec2 attach-internet-gateway --internet-gateway-id igw-XXXXXXXX --vpc-id vpc-xxxxxxxx

```

上記サンプルを自分のメモに沿って修正し実行してください。
特に何も表示されなければ大丈夫です。

---

どうでしょうか？
VPCの作成からIGWのアタッチまでをCLIで実行することができました。
フィルターやjqを使って取得したidを変数化しておけばこれらの操作を自動化することもできますよ♪

次回はサブネットの作成なんかを見ていきたいと思います！
herokuにpapertrailを導入して、アラートをhubot経由でslackへ通知する

# 導入
herokuにログ監視アドオンを導入してみた。
papertrailとlogentriesがよく使われているようなので、
とりあえずpapertrailを試してみる。

## インストール
以下のコマンドを打つだけ。簡単！

```
$ heroku addons:create papertrail --app ***
Creating flying-kindly-8847... done, (free)
Adding flying-kindly-8847 to ***... done
Setting PAPERTRAIL_API_TOKEN and restarting ***... done, v30
Welcome to Papertrail. Questions and ideas are welcome (support@papertrailapp.com). Happy logging!
Use `heroku addons:docs papertrail` to view documentation.
```

## ドキュメント

```
$ heroku addons:docs papertrails --app ***
```

を打つとここに飛ばされる。
[Papertrail](https://devcenter.heroku.com/articles/papertrail)  

## ダッシュボード
```
$ heroku addons:open papertrail --app ***
```

を打つとここに飛ばされる。
[Papertrail](https://devcenter.heroku.com/articles/papertrail)  

また、以下のURLをブックマークしておくと直接飛べるので便利。

```
https://addons-sso.heroku.com/apps/<app name>/addons/papertrail
```

# 監視
Event画面から監視したい文言をSearch → Save Search をクリック。
遷移先のアラート設定画面で諸々設定可能。

# slackでアラートを受け取る
アラート設定画面では、様々な受信方法が選べる。
![webhook](http://help.papertrailapp.com/assets/images/manage_alerts.png)
slack無料プランのためインテグレーション数を節約したい…(´・ω・｀)
ので、今回はhubot経由でslack受信する！

以下のスクリプトを設定。
[papertrail.coffee](https://github.com/yukofeb/hubot/blob/master/scripts/papertrail.coffee)

最後に、papertrailの設定＞Webhook Details＞URLに以下を設定すればOK!

```
(hubotのURL)/papertrail/(受信したいROOM名)
```
re:dashでsqlに変数を埋め込む

ドキュメントにはどこにも書いておらず、githubのissueにちょこっと書いてあるだけだったのでメモしときます。

## sqlを書く
```
select id from users where id = {{id}}
```

* {{id}}が今回変数を埋め込む部分です。
* template言語は[mustache](https://mustache.github.io/)です

<img src="http://gyazo.com/c021086451897a2f58146fd3f1190e7a.png" width="800"/>


エラーにはなりますが気にせずクエリを保存します。

## アクセスする

query_stringを以下のようにしてアクセスします

```
http://${redashのhost名}/queries/${queryのID}?p_id=1
```

* 「p_」を先頭に追加した変数の値がsqlに埋め込まれて結果が返ってきます
* 「{{name}}」などを埋め込んでいる場合は「p_name=1」にしてアクセスします

<img src="http://gyazo.com/6c77a35ff2121be642434d423b01e937.png" width="800"/>

id = 1 のrecordの結果が返ってきました。


## ダッシュボードでも

ダッシュボードでも同じルールで使えます。

```
http://${redashのhost名}/dashboard/${dashboard名}?p_id=1
```


<img src="http://gyazo.com/5d9a5278be082f9f09c73005808fffd4.png" width="800"/>


## 注意点
* 実行結果のキャッシュがされにくい。(同じ変数であれば実行されるsqlは同じなのでキャッシュは効く)

## まとめ
* アプリケーションからre:dashにリンクを張るといった用途に使える！
勝手に添削：for関数を使った繰り返し処理によるヒストグラムの一括出力 #rstatsj

 #HiRoshimaR のこれだけど、

<iframe src="//www.slideshare.net/slideshow/embed_code/key/8VtmLoZpRtVTwo" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/imuyaoti/1507011-hiroshimar" title="for関数を使った繰り返し処理によるヒストグラムの一括出力" target="_blank">for関数を使った繰り返し処理によるヒストグラムの一括出力</a> </strong> from <strong><a href="//www.slideshare.net/imuyaoti" target="_blank">imuyaoti</a></strong> </div>

**pforeach** パッケージを使うとこんな風に書けます。(という宣伝)

```r:R
# データ生成 -------------------------------------------------------------------
v1 <- ordered(rep(1:4, c(40, 55, 30, 25)))
v2 <- rep(c("A", "B", "C"), c(45, 65, 40))
v3 <- rep(paste0("地区", 1:5), c(25, 25, 15, 50, 35))
dat <- cbind(iris, v1, v2, v3)
dat <- transform(dat, v2=as.character(v2), v3=as.character(v3))
head(dat)
```

```:結果
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species v1 v2    v3
1          5.1         3.5          1.4         0.2  setosa  1  A 地区1
2          4.9         3.0          1.4         0.2  setosa  1  A 地区1
3          4.7         3.2          1.3         0.2  setosa  1  A 地区1
4          4.6         3.1          1.5         0.2  setosa  1  A 地区1
5          5.0         3.6          1.4         0.2  setosa  1  A 地区1
6          5.4         3.9          1.7         0.4  setosa  1  A 地区1
```

R の for 文は、今回のようにただプロットしたいというだけで、結果を変数に残さなくていい場合に便利なんだけど、データフレームの列ごとに繰り返すというのを書くのはちょっとめんどくさい。
そこで、pforeach が使えます。
pforeach は並列処理用のパッケージですが、`npforeach` 関数を使うことで逐次実行もできます。
pforeach はデータフレームの列ごとや行ごとに繰り返しを行うのに便利な関数 `cols()` と `rows()` を持っているので、これを使えば簡単に書けます。

```r:R
library(pforeach)

npforeach(col=cols(dat), name=colnames(dat), .final=invisible)({
  if(is.character(col)) col <- as.factor(col) # character なら factor へ変換
  if(is.factor(col)) { # factor なら棒グラフを描く
    plot(col, 
         main = name, 
         cex.main = 3, 
         col = "black", 
         space = 0.3)
  } else if(is.numeric(col)) { # numeric ならヒストグラムを描く
    hist(col, 
         main = name, 
         cex.main = 3, 
         xlab = NULL, 
         ylab = NULL, 
         breaks = 20, 
         col = "grey")
  }
})
```

プロットの部分は関数化するともう少しわかりやすくなるかもしれません。

```r:R
library(pforeach)

plot_bar <- function(x, name) {
  plot(x, main = name, cex.main = 3, col = "black", space = 0.3)
}

plot_hist <- function(x, name) {
  hist(x, main = name, cex.main = 3, xlab = NULL, ylab = NULL, 
       breaks = 20, col = "grey")
}

npforeach(col=cols(dat), name=colnames(dat), .final=invisible)({
  if(is.character(col)) col <- as.factor(col)
  if(is.factor(col)) {
    plot_bar(col, name)
  } else if(is.numeric(col)) {
    plot_hist(col, name)
  }
})
```

というわけで、pforeach は並列化したいときだけでなく、普段のループを書くときにも便利に使えるということでした。

Enjoy!

### 参考

- [R で超簡単に並列処理を書けるパッケージ pforeach を作った](http://d.hatena.ne.jp/hoxo_m/20141222/p1)
lombok 1.16.4 で @Valueプロパティを使った時にエラー

# エラー

```java
import lombok.Value;

@Value
public class Person {
    private final String name;
}
```

console で以下のようなエラーが起きる

```shell
$ ./gradlew assembleDebug
...
/Users/mattak/project/Sample/app/src/main/java/me/mattak/Person.java:14: エラー: パッケージjavax.annotationは存在しません
    private final String name;
                         ^
エラー1個
:app:compileDebugJava FAILED
```

原因は、@ConstructorPropertiesを全てのコード生成されたコンストラクタにつけてしまうから。AndroidではこのAnnotationが利用できないのでエラーが起きる。

# 対処

constructorを自動で生成する系のAnnotationを無視する設定を追加。

```java:lombok.config
lombok.anyConstructor.suppressConstructorProperties = true
```

# 参考

- [AllArgsConstructor from lombok is not found by Android Studio](http://stackoverflow.com/questions/27969416/allargsconstructor-from-lombok-is-not-found-by-android-studio)
- [lombok 1.16.2 で javax.annotaionが存在しないエラー](http://qiita.com/mattak@github/items/28f0aa40ecd365ef1d62)