OmniAICreator/Qiita-1.07M huggingface dataset:
日本語ドメインでdigる

homebrewでlibidnを入れます。

```
$ brew install libidn
```

idnコマンドがインストールされるので、パイプしてxargsで渡します。
nslookupの場合はxargsは不要です。

```
idn あいぼう.みんな | xargs dig
idn あいぼう.みんな | nslookup
```

ちなみにidnコマンドでPunycodeから日本語名に戻したいときは、`idn -u`でできます

```
idn -u xn--l8jeg9s.xn--q9jyb4c
#=> あいぼう.みんな
```

```
 　　(　ﾟдﾟ)
 ＿(__つ/￣￣￣/＿　
 　　＼/　　　/
 　　　￣￣￣
 　
 　　( ﾟдﾟ )
 ＿(__つ/￣￣￣/＿　
 　　＼/　　　/
```
Go言語のtestで、json apiのレスポンス検証を行う

golangでAPI開発してるとunitテストはもちろん書くけど  
Rails Rspecみたいにrequestテスト（APIのレスポンス検証）もしたくなるよなー

goでやってみよう

```
package main  
              
import (      
  "bytes"     
              
  "io/ioutil" 
  "net/http"  
  "testing"   
)             

func TestRequest(t *testing.T) { 
var j = []byte(`
{
  "id": "test"
}`)

url := "http://IPADDRESS/ENDPOINT"

//postrequest作成
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))

//headerをセット
req.Header.Set("Content-Type", "application/json")                

//httpクライアント
client := &http.Client{} 

//実行
resp, err := client.Do(req) 
if err != nil {             
  panic(err)                
}     

//body使わなくなったら閉じる                      
defer resp.Body.Close()     

//エラー検証
if err != nil {             
  t.Error(err)              
  return                    
}                           
           
//ステータスコード確認                 
if resp.StatusCode != 200 { 
  t.Error(resp.StatusCode)  
  return                    
}                           

//レスポンスBODY取得
body, _ := ioutil.ReadAll(resp.Body)

actual := string(body)
expected := `{"id":"test-id-desuyo"}`

if actual != expected {     
  t.Error("response error") 
}                           
return
}
```

こんな感じでhttp.Clinetを使えば実装できますよ！

本当は[net/http/httptest](http://golang.org/pkg/net/http/httptest/)というやつもいてるけど、今回は使わずにやりました。
Chrome, Firefox, IEのCopy & Paste実装方法

`Ctrl + C`でクリップボードに任意の値をコピーしたい場合に、Chrome, Firefox, IEでどう実装するかまとめました。
クリップボードを操作するにはFlashを使うのがベタですが、その場合必ずFlashのボタンを押さないとクリップボードにアクセスできません。
今回は`Ctrl + C`でクリップボードにコピーしたいということで、HTML5のClipboard APIやIEのwindow.clipboardDataを使って実装します。

# Chrome, Firefoxの場合
HTML5のClipboard APIを使います。
クリップボードイベント(copy, paste, cut)発生時のみ使用可能で、任意のタイミングでのクリップボード操作はできません。
まだドラフト版のAPIなので色々と制約があるみたいですが、基本的なCopy & PasteはChrome, Firefox両方ともサポートしています。

```js
document.addEventListener('copy', function(e) {
  e.preventDefault();
  e.clipboardData.setData('text/plain', 'Hello, world!'); // copy
});
```

詳しくはこちらを参照してください。
[Clipboard API and events](http://w3c.github.io/clipboard-apis/)
# IEの場合
IE独自仕様のwindow.clipboardDataを使ってクリップボードを操作します。
こちらはJavaScriptから任意のタイミングでクリップボードにアクセス可能です。

```js
document.addEventListener('copy', function(e) {
  e.preventDefault();
  window.clipboardData.setData('Text', 'Hello, world!'); // copy
});
```

# サンプル
ボタンをクリックして`Ctrl + C`を押すと、クリップボードに値をコピーできるサンプルです。
Flashと違い`Ctrl + C`のタイミングでコピーできるのがポイントです。

```html:clipboard-copy-sample.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Clipboard Copy Sample</title>
</head>
<body>
  <script type="text/javascript">
    var userAgent = window.navigator.userAgent.toLowerCase();
    document.addEventListener("copy", function(e) {
      e.preventDefault();
      if (userAgent.match(/(msie|MSIE)/) || userAgent.match(/(T|t)rident/)) {
        window.clipboardData.setData("Text", document.form.dummy.textContent); // IE
      } else {
        e.clipboardData.setData('text/plain', document.form.dummy.textContent); // Chrome, Firefox
      }
    });

    function select() {
      document.form.dummy.focus();
      document.form.dummy.select();
    }
  </script>
  <button id="button" onclick="select();">テキストを選択</button><br>
  <form name="form">
    <textarea style="width: 300px; height: 200px;"></textarea>
    <textarea name="dummy" style="width: 0px; height: 0px; position: absolute; top: -100px;">サンプルテキスト</textarea>
  </form>
</body>
</html>
```
Canvasで透過色の図形を描く

#Canvasを使って、画面に透明な色を書きます
Javascript内で、cssのスタイルであるrgbaを使う。

```js:
rgba(r, g, b, a)

//rは赤、gは緑、bは青の色の設定値
//aは透明度を示します。最小0〜最大1
```

rgba()の第4引数aは、
0が完全透明、1が無透明となります。


```html:canvas.html
<canvas id="draw-area" ></canvas>
```

```js:canvas.js
canvas = $('#draw-area');
  
ctx = canvas[0].getContext('2d');
 
//半透明(透明度50%)の青い四角を表示
ctx.beginPath();
ctx.fillStyle = "rgba(" + [0, 0, 255, 0.5] + ")";
ctx.fillRect(1, 1, 32, 32);   

//無透明(透明度0%)の青い四角を表示  
ctx.beginPath();
ctx.fillStyle = "rgba(" + [0, 0, 255, 1] + ")";
ctx.fillRect(32, 32, 32, 32);
```

canvas.getImageData().dataとかで
各ピクセルのrgba値をとると、
aは255がデフォルトで入っているようだが、
1でも255でも変わらないのかな？
落ちるアプリを考える

UInt8で宣言してif文で正負判定を行わずにカウントアプリを作れるんじゃないかと思って試すと
落ちるアプリが完成した。
（UInt8で初期化するとプラスボタンで普通にカウントされるがマイナスボタンは0以下になると動かなくなってスマホが重くなる）

また以下のようにIntで宣言したものをUInt8にキャストしたら数字自体がカウントされなくなって起動せずデバッグで怪しいのが表示された

```Swift:sample.swift
var intNumber:Int = 0
var UintNumber:Uint8 = Uint8(intNumber)

label.text = String(UintNumber)
```

![スクリーンショット 2015-06-20 1.09.23.png](https://qiita-image-store.s3.amazonaws.com/0/33329/ecb49db7-1c94-7acc-4499-40dd5a1ec830.png)

if文を素直に使用したほうがスマホの為だろう・・・
あたりまえだけど、アタリマエのことをどうしてと考えることが楽しいと思うのでメモ

以上落ちるアプリの作り方
環境変数 BUNDLE_PATH の怪

BUNDLE\_PATH
-----------

動作環境を確実なものにするために一役買っているBundler君

`bundle install --path vendor/bundle`はすでにイデオムと化しているくらいスタンダードな使い方です

上記コマンドによって `.bundle/config` 内に **BUNDLE\_PATH: vendor/bundle** と設定されるわけですが、時には config ファイルを使わずに指定したいものです

幸いなことに、Bundlerには環境変数指定がサポートされているため

```
BUNDLE_PATH=vendor/bundle bundle exec ruby hoge.rb
```

... で成功しそうなものですが、残念なことに実行に失敗します

ここでは、この回避方法を書いておきます

Workaround
----------

```
$ bundle install --path hoge/fuga
```

 とインストールしたなら、

```
$ BUNDLE_PATH=hoge/fuga/ruby/2.2.0 bundle exec ruby hoge.rb
```

と実行しましよう

**2.2.0** のところは、bundle install時に使ったRubyのABIバージョンに読み替えてください

解説
----

`.bundle/config` 内の _BUNDLE\_PATH_ と、環境変数の _BUNDLE\_PATH_ は挙動が違います

原因は[Bundler::Settings#path](https://github.com/bundler/bundler/blob/442d576a83f7e3324567fb93c43fc2b6da9074f1/lib/bundler/settings.rb#L126-L137)にあります

どうやら[Issue](https://github.com/bundler/bundler/issues/3552)なのですが、**Bundler 2.0でね :/**というつれないお返事が入っています
※まぁ **:/** って顔されちゃ、しょうがないですね
Groovyでテンプレートエンジン{{Mustache}}をGrabして動かす


# やりたいこと
Mustache.javaを触りたいけどEclipseやらMavenやらの環境が沈没していたので、簡単に楽して触って動かそうと思った次第。
とっっってもも簡単でした！

# 環境構築

Javaをインストール済みだったのでgemから開始します（ﾋﾄﾞｲ）
Linuxなら以下のコマンドを打つとgemというGroovy関連のパッケージマネージャをDL＆インストールしてくれます。

```curl -s get.gvmtool.net | bash```

ターミナルを再起動してから、Groovy2.4.0をインストール。
```gvm install groovy 2.4.0```

おまちかねのgroovyの実行。
ターミナル経由だと文字列のクォートがどちらだったか忘れちゃいますね。
```$ groovy -e "println 'hello world!'"```
> ```hello world!```

ここまでわずか5分の出来事。
うちクォートのハマりが結構比重占めた結果に。


# 開発

参考サイトを見ながらコーディング。
Mustacheのテンプレートは```{{name}}, {{description}}!"```と基本的なものを利用します。
Mustache.java自体がJavaなので、ほぼGroovy感は無くなりました。

```groovy:grab.groovy
@Grab(group='com.github.spullara.mustache.java', module='compiler', version='0.9.0')

import com.github.mustachejava.DefaultMustacheFactory;
import com.github.mustachejava.Mustache;
import com.github.mustachejava.MustacheFactory;

scopes = ["name": "Mustache{{", "description": "Prfect!"]

Writer writer = new OutputStreamWriter(System.out);
MustacheFactory mf = new DefaultMustacheFactory();
Mustache mustache = mf.compile(new StringReader("{{name}}, {{description}}!"), "example");
mustache.execute(writer, scopes);
writer.write("\n");
writer.flush();
```

# 実行と結果
```groovy grab.groovy ```を実行
> ```Mustache{{, Prfect!!``` がコンソールに出力されることを確認。

良かれと思い実行結果にMustacheのアイデンティティの```{{```入れましたけどバグみたいになっちゃいました…
初回起動は遅かったですが（おそらくMavenリポへの問い合わせ）、二回目以降はキビキビ動いてくれました。
素晴らしい！


# まとめ
Groovy/Grapeの出来の良さに魂が震えました、本当にありがとうございました。

# 参考

* [groovy文法](http://www.oki-osk.jp/esc/groovy/#2.3)
  - 結構ガッツり文法説明
* [groovyコマンドオプション](http://irof.hateblo.jp/entry/20111220/p1)
  - portでリッスンするオプションがあったり面白い
* [Mustache.java - Github](https://github.com/spullara/mustache.java)
  - Mustache.java本家のサイト
リモートのTomcatで動作するWebアプリケーションを、Eclipseからデバッグする方法

リモートのTomcatで動作するWebアプリケーションを、Eclipseからデバッグする方法
## 本記事を書くことになった経緯
こんなことに遭遇したことはないだろうか。
WebアプリケーションをローカルPCで開発し、別環境にデプロイするも、動作確認すると**なぜか期待通り動かない**。ローカルでは動いているのに。。。
万が一、それが本番環境だったとしたら・・・冷や汗ですね。

原因は様々で、

* 環境差異
* データの問題
* 単純なバグ・・・


こんな時、Webアプリケーション開発者は思うだろう。

**「ローカル環境以外で動くWebアプリケーションを、デバッグすることはできないだろうか」**

本記事では、リモート環境のTomcat上で動作するWebアプリケーションを、Eclipseからデバッグする方法を記載する。

## 動作環境（古いとか言わないでください。。）
リモート環境
OS：Red Hat 4.1.2-50
jdk：1.6.0_45 64-Bit Server VM
Tomcat：Apache Tomcat/6.0.37

ローカル環境
Eclipse：3.7 Indigo

## Tomcatの設定
起動シェルを変更
$TOMCAT_HONE/bin/startup.sh

【変更前】
exec "\$PRGDIR"/"\$EXECUTABLE" start "$@"

【変更後】jpdaを追加するだけ
exec "\$PRGDIR"/"\$EXECUTABLE" __jpda__ start "$@"

jpdaってなんだ？
→Java Platform Debugger Architecture
https://docs.oracle.com/javase/jp/6/technotes/guides/jpda/architecture.html

ちなみに、
\$PRGDIR/\$EXECUTABLE　は　\$TOMCAT_HONE/bin/catalina.sh
のことです。

catalina.shを見ると、下記の記述があることから、リモードデバッグする際のポートは”8000”だとわかります。
JPDA_ADDRESS="8000"

## Eclipseの設定
* 実行 ＞ デバッグの構成 を選択
* 左側のペインにある「リモート Java アプリケーション」を選択し、右クリック ＞ 新規 を選択

![1.gif](https://qiita-image-store.s3.amazonaws.com/0/82928/b40f90cb-34cb-a9e2-c2d4-e2b354f86ae3.gif)


* デバッグするプロジェクトを選択
（デバッグ対象のプロジェクトがインポートされていること前提）
* リモートサーバのホスト（非公開情報のため隠しています）、ポート（8000）を入力
* 「適用」ボタン押下で登録完了

![2.gif](https://qiita-image-store.s3.amazonaws.com/0/82928/af822720-90ee-887d-b3c8-2d23d5093702.gif)

## デバッグ実行
* 「デバッグ」ボタン押下で、いざデバッグ！！

![2.gif](https://qiita-image-store.s3.amazonaws.com/0/82928/af822720-90ee-887d-b3c8-2d23d5093702.gif)


デバッグ接続が完了すると、デバッグタブにスレッドツリーが表示されます。

![3.gif](https://qiita-image-store.s3.amazonaws.com/0/82928/dd7ab0d6-7fa8-dbfa-d615-8848cd62c7c5.gif)


ここでエラーが出る場合は、下記エントリを参考にしてみてください。（弊社同期の記事を宣伝！）
[新米エンジニア(アプリ・インフラエンジニア問わず)に知っておいてほしいトラブルシューティング入門 実践編](http://qiita.com/keigodasu/items/1aeb32310e3feac231fa)


あとはいつも通り、デバッグポイントを置いてブラウザからアクセス。

![6.gif](https://qiita-image-store.s3.amazonaws.com/0/82928/a788762a-ce3e-087d-7cb8-1e32fb1ce6da.gif)


デバッグ成功！！

※リモートデバッグをしている間、他の開発者がその環境を触れなくなることがあります。（あれっ・・なぜかレスポンスが返ってこない？）
※必要な作業が終わったらデバッグ接続を切断しておくようにしましょう。

![5.gif](https://qiita-image-store.s3.amazonaws.com/0/82928/ed04403b-4866-ce9a-bf16-da8462bd6bbc.gif)


## まとめ
リモート環境で動作するアプリケーションもデバッグが出来る。
デバッグしている間は他の利用者に迷惑が掛かる可能性があるため、必要な作業が終わったら接続断すること。
Chiselメモ

#概要
FPGAで何かしようと思ったらHDLを触ることに大抵なるのだが、
主流のひとつ、VHDLはひたすら冗長で、もうひとつのVerilogは機能が貧弱である。
SystemVerilogはなかなか素晴らしいが、あまり論理合成ツールが対応していない。
というわけで選択肢はVHDL/Verilogの二択である。

こんな状況に我慢できるような人がエンジニアにいるわけもなく、
「論理合成ツールがVHDL/Verilogにしか対応していないなら、
何か素晴らしい言語で一旦書いて、それをVerilog/VHDLにコンバートすればいいじゃない」
と考えた人が何人もいて、思い思いに「素晴らしい言語」を作った。
そんな言語のうちのひとつ、ScalaのDSLである[Chisel](https://chisel.eecs.berkeley.edu/)をちょっと触ってみた。そのメモ。

HDLはざっくり言えば回路図の代わりで、回路図は宣言的である。
となれば比較的宣言的に書ける言語のほうが書きやすいだろう。
ということでScalaベースのChiselをチョイスした。
ちなみに偉そうに色々書いているがScalaは触ったことがない。
HDL歴もかなり浅い。


#導入
必要な物は

* sbt
* Scala
* JDK

肝心のChiselはsbtが良きに計らってくれる。

#ハロワ
とりあえず[チュートリアル](https://github.com/ucb-bar/chisel-tutorial.git)を参考にこんな感じの品々を作る

```
Project/
  Build.sbt
  chisel-dependent.sbt
  src/
    main/
      Scala/
        Hello.scala
```

設定用ファイル2つ

``` Build.sbt
organization := "edu.berkeley.cs"
version := "MyVersion-1.0"
name := "MyChiselTemplate"
scalaVersion := "2.11.6"
scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked", "-language:reflectiveCalls")
```
``` chisel-dependent.sbt
val chiselVersion_h = System.getProperty("chiselVersion", "latest.release")
libraryDependencies ++= ( if (chiselVersion_h != "None" ) ("edu.berkeley.cs" %% "chisel" % chiselVersion_h) :: Nil; else Nil)
```

モジュール記述部分

``` scala:Hello.scala
package Hello

import Chisel._

class Hello extends Module {
  val io = new Bundle {
    val out = UInt(OUTPUT, 8)
  }
  io.out := UInt(42)
}

class HelloTests(c: Hello) extends Tester(c) {
  step(1)
  expect(c.io.out, 42)
}

object Hello {
  def main(args: Array[String]): Unit = {
    val tutArgs = args.slice(1, args.length)
    chiselMainTest(tutArgs, () => Module(new Hello())) {
      c => new HelloTests(c)
    }
  }
}

```

用意できたらProjectに移動して
`> sbt`
とコマンドを打ってsbtを起動。

`> compile`
でコンパイルして

`> run Hello.Hello --backend v --targetDir ./verilog`
でProject\verilog\にverilogファイルが生成される。

生成されたものがこちら

```verilog:Hello.v
module Hello(
    output[7:0] io_out
);



  assign io_out = 8'h2a;
endmodule
```

なんか妙な改行ができたが、
変換しても変数名とかが結構そのままなのが地味に嬉しい。

ちなみに
`> run --backend --targetDir ./cpp`
とすればcpp以下にシミュレーション用のcppファイルが出力される。
まだよく見ていない。

#終わり
レジスタに明示的にクロックを設定したり
ともかく色々出来るようなので、
何か書いてみて合成可能なVerilogコードを吐かせるための加減を見たい。
Swift よく出てくるつまづきポイント

・最近Swift触り始めたので初心者の今のうちにつまづきポイントを列挙する

###とりあえずプロジェクトが作れない
![スクリーンショット 2015-06-19 23.47.57.png](https://qiita-image-store.s3.amazonaws.com/0/33329/5b22b6d0-6004-8597-c076-ca4f4d565e66.png)

まずProductNameには作りたいアプリの名前を入れる
Organization Nameは作る団体名もしくは個人なら自分の名前
**Organizationをググると組織名、構成、機構とでる**

##次がよく分からなくなるポイントだと思う
Organization identifierこれは直訳すると組織の識別子ということ
アイデンティティの確立のアイデンティティである
#つまりは世界に唯一の名前を書けということを言っているらしい
世界に一つだけのものといえばURLやDNAぐらいだろう
（世界に一つだけの花と考えた人は筆者と年齢が近いだろう笑）

それはさておき、DNAよりはURLの方が簡単なので
com.whisponやcom.yahooという風に書く

なんで、反対から書くかといえば、com.whispon.testapp.Main.storyboard
のようにidentifierの後にどんどん増えていくからである。
大体最初の方はこれぐらいかと思う
<hr>
#変数

次は変数について、変数とは変わる数である
ピンと来ない人もいるだろうので、付け足すと変数とは入れ物で自由自在に数字や文字や画像などなんでも入れれる入れ物。入れ物なのでその中身は変えることができる。
**x = 3**
というのは数学的には意味ないがプログラムの世界では意味がある
左辺に右辺を代入するという意味である
つまりxに３を代入しろということ

Swiftの話に戻すと、
例えば
var number = 0
というのがあると思う
varってなんだよと思うであろう。おもってくれ！
variableという英語である意味は調べろ！（※調べることが大切です！）

なんで、文字も数字もvar number = 0 
var name = "Noriaki"
という風に書いていいのだろう？

ここでコンピュータの内部の処理を考えてみる

```.普通のコンピュータの動作....
コンピュータの内部処理は入力→処理→出力である
さらに数字の入出力について考えてみると

整数の数字いくよー→分かった整数だね！！→整数表示してます！
という三人（三段階）がコミュニケーションをとって考えて処理する
```

しかしSwiftはvar hoge = 0 v
ar hoge = "piyopiyo"
となんでも処理する

そう！もう気づいてくれただろう！型推論をしてくれるのである。
０という数字が来たときはコンピュータは０という整数(integer)がきたぞ！！と推論する
そして0.0という数字が来た時はコンピュータは実数(double)が来たぞと推論する

とまあ内部でこういうことをしているからこんな汚い書き方が許されるのである
**しかし誤解がないように言うが、こういう書き方が許されるのは初期化のときのみである**

//これは駄目
var number
number = 0.3
これはコンパイルエラーが出る。型推論を利用する場合は初期化のみ

またint型以外の入力を受け付けたくない場合は以下のように書く
var intNumber: Int
intNumber = 4
//以下も可能
var intNumber: Int = 6

また変数名には絵文字も利用できる
使用者にはあまり意味ないがプログラマーは楽しいので開発が楽しく行える！！

var countNumber🐌:Int　=  5

#次はアウトレットとアクション
@IBActionや@IBOutletというのが出てきたと思うが結局のところそれは
メソッドとプロパティ（紐付け）である

一応初心者向けということなので説明すると
IBはInterface Builderの略で”マウスで自由に配置できるもの”という意味で
IBActionはAction=動作や働きという意味である
働きというのはプログラミングでは関数（function）やメソッドと呼んだりする
メソッドとはダイエットで有名な吉川メソッドというのがあると思う
それとまったく同じである

吉川さんがダイエットの方法作ってそれをダイエットしたい人にさせる
つまり吉川メソッドという箱に入ると痩せる人が出てくる
（以下図に示す）
ダイエットしたい人→[処理(吉川メソッド)]→痩せた人
という風に何かを入れたら何かが出てくる
これがメソッドまたは関数である

つまり話を元に戻すと
**@IBActionにはさせたい処理を書くのである**



次は、@IBOutletである
これはプロパティと話したが、@IBActoinで書いたメソッドとの対応を記すものである
つまり、IBActionで記した動作とストーリーボード上に配置したパーツとを紐付けるものである

まあなんだろう住所といったら分かりやすいかな
鉛筆の住所は貴方の筆箱であり。レッドブルの工場は外国のどっかであり、そのものの対応関係を書く場所である

とまあとりあえず、これくらいが初心者のつまづきやすいポイントではないだろうか
もう少し分かりやすいように説明できたら編集します
Cygwin-X上のRでggplot2をインストールする方法

Cygwin-X上のRでggplot2をインストールする方法のメモ。
#Cygwinの開発環境をインストールする。
gcc
g++
make
binutils
#先にインストールすべきライブラリ
以下のライブラリを先にインストールしておく。
libintl-devel
libiconv-devel
liblzma-devel
libpcre-devel
libbz2-devel
libtirpc-devel
libicu-devel
他にも必要なライブラリがあるかも知れない。
#ggplot2のインストール
Rを起動した後、以下のコマンドでインストールする。
> install.packages("ggplot2")
OSインストールから構成管理ツール適用の自動化について考えていることを整理



最近インフラの自動化に、興味がありいろいろ試行錯誤しているが、結局どういうソリューションがいいのかよく分からないので、ちょっと今考えていることを書きなぐる


## やりたいこと


- OSをインストールして、インストール後のミドルウェア設定までを完全自動でやりたい


### 今回は、下記ツールを使う
---
- Cobbler = OSインストール
- Chef = ミドルウェア設定



### ソリューション１
---
**「Preseedのlate_commnadでchefの設定/rc.localにchef実行スクリプトを仕込む」**

実現に向けた事前準備
 
 - chef-serverのnodeをあらかじめ作成しておく必要がある
    - nodeのpermissionに気をつける(clientにwrite権限を付与)

--考察--

OSインストールからミドルウェアの適用まで、インストール対象サーバが自立的に行う。
また、サーバのあるべき姿をChefサーバ上に持っておくため、外部でこのサーバのあるべき姿を管理しておく必要がない。

ミドルウェア適用のタイミングが外部から制御できないので、インストール対象サーバが複数台あったとき、chefの適用順序を外部で制御しようとすると、OSインストールのレベルで順番を制御しなくてはならない。


### ソリューション２
---

**「OSインストールコマンドを実行後、定期的にSSHログインを試みて、OSインストール終了を検知したら、knife bootstrapでworkstationからchef適用」**

実現に向けた事前準備

 - chefのworkstationとcobblerサーバを同じサーバにする必要がある
 - chefとcobblerをラップして操作する、アプリケーションが必要
   - serverとroleのマッピングをchefの外部で持つ必要がある

--考察--

OSインストールとChefの適用が分かれており、chefとcobblerをラップしたアプリケーションからそこの結合を行う。そのため、アプリケーションの作り込みによっては、chefの適用のタイミングを制御できる

アプリケーションを別途自分で書かないといけないという工数がかかるのと、node情報(サーバのあるべき姿)をchefの外部で持たないといけないのが難点


## 結局
rc.localを使う方法(ソリューション１)を、ついこないだ知ったので、ソリューション２を主に使っているがrc.localを使う方法の方が一般的なのかもしれない。
Processing使いがPythonに移行するときにハマった点


### わりと自分用メモなので鵜呑みにしないこと


##1.for文がPythonは独特

```py

for i in range(0,10):
	print i
```
**どうやらPython3系とPython2系では少し違うらしい**
2015/06/20午後9時53分更新

**Python２系**
`range(mini,max)`でminiからmaxまでのリストを作る
リストは配列みたいなもん。リストに入ってる数字の分だけfor文が実行される。`range(max,min,-1)`で10から1までのリストを作れる。

**Python3系**
Python3系なら`list(range(0,10))`の方がいいかも。for文では動くのだけどlistを作るという説明はそぐわないかも？

```java

for(int i = 0;i < 10;i++){
	println(i);
}
```


##2.変数の作り方
```Python
num1 = 10
num2 = [10,20,30]
#↓これでもいけるPython2系
num2 = range(10,30,10)
#↓Python3系なら
num2 = list(range(10,30,10))
```

```java

int num1 = 10;
int[] num2 = {10,20,30}
```


とりあえず、ここまでまた更新するかも
二次元配列から値の重複した要素を削除する


オブジェクトの配列から重複した値を持つ要素を削除する方法。
毎回やり方を忘れるのでメモ。

```js:removeOverlapValue.js
var overlapped = [
  { key: "value" },
  { key: "value2" },
  { key: "value" } // 削除対象
];
var values = [];

var no_overlapped = overlapped.filter(e => {
  if (values.indexOf(e["key"]) === -1) {

    // values に値が存在しない要素のみをフィルタリング
    values.push(e["key"]);
    return e;
  }
});
/*
 * { key: "value" },
 * { key: "value2" }
 */
Live2Dのオリジナルモデルを作成する方法


##はじめに

  Live2Dというのは、簡単にはイラストを書くパーツに分割し、それにモーションを付けて自然に動かしたりするツールのことです。

  前回までは、既存のモデルを活用していましたが、今回は、オリジナルモデルを試しに作成し、動かしてみるまでの手順を紹介します。

![](https://raw.githubusercontent.com/mba-hack/images/master/live2d_origin_model_sample.png)

##必要なもの

- [Live2D Cubism Modeler](http://sites.cybernoids.jp/cubism-editor2/)

- [Paint.net](http://www.getpaint.net/download.html)

- [Paint.NET PSD Plugin](https://psdplugin.codeplex.com/)

- [Epsilon PSD Sample](http://sites.cybernoids.jp/cubism2/templates)


##Live2Dでオリジナルモデルを作成する方法

  最も簡単な方法を紹介します。それは、既存のPSDファイルを編集してオリジナルモデルを作成する方法です。

  もちろん、個人使用の場合は、公開されているデータである以上、著作権等の問題も生じません。

http://sites.cybernoids.jp/cubism2/lets-do-it/quick-modeling

まず、[Epsilon](http://sites.cybernoids.jp/cubism2/templates)のPSDをダウンロードします。そして、それを自身が使っているお絵かきソフトで編集したいパーツのみ編集します。私の場合、[GIMP](http://www.gimp.org/)でパーツをPNGで書きだして、Androidの[Cloud Alpaca](http://medibangpaint.com/manganame/)のアプリで編集しました。編集したのは、髪の毛と服です。

通常、PSDはPhotoShopの形式ですが、GIMPでも開けます。ただし、この場合、GIMPでは、PSDをエクスポートする時に、何故かレイヤーグループが破棄されてしまうため、そのままLive2Dのモーションをつけようとすると不都合が出てきます。注意してください。回避方法募集中。

次に、[Paint.net](http://www.getpaint.net/download.html)をインストールし、`C:/Program Files/PaintNET/FileType/`に[Paint.NET PSD Plugin](https://psdplugin.codeplex.com/)の`.dll`を入れます。READMEに書いてありますので、パスなどはご自身で判断してください。 

そして、サンプルのPSDをPaintNETで開いて、先ほど編集したPNGをレイヤーの適切な箇所にあてます。

これをPSD形式で保存すれば、`Live2D Cubism Modeler`で開けます。開いたあとは、`メニュー -> ファイル -> テンプレート適用`をします。

http://sites.cybernoids.jp/cubism2/modeler/edit-keyform/template

##問題点

現在確認できている問題点を書き出します。

- GIMPでPSDをエクスポートすると、レイヤーグループが統合されてしまう

- Fire Alpaca, Cloud AlpacaでPSDを書き出すと、カラーがおかしくなる
  
- Windows版のLive2D Cubism Modelerでサンプル版PSDにテンプレートを適用すると、口元の描写がおかしい。しかし、Mac版の場合は問題ない

- Windows版のLive2D Cubism Modelerは、VirtualBox Guest Additionの3D機能をONにしていると、起動しない

問題解決方法を募集中。
AnsibleからRubyをバージョン指定してインストールするだけのPlaybook(rbenv版)

先日AnsibleでRubyをソースからインストールする手順を書きました。
-> [AnsibleからRubyをバージョン指定してインストールするだけのPlaybook](http://qiita.com/joytomo/items/ee73a404d84f60cb29fc)
そこで「ソースから直接インストールするよりもrbenvでインストールした方が良い」との指摘をいただいたので、その通りに直してみました。OSは前回と同じくCentOS6.5です。

# 手順

.bashrcに下記を追記する。

```.bashrc
export PATH="$HOME/.rbenv/bin:$PATH"
export PATH="$HOME/.rbenv/shims:$PATH"
eval "$(rbenv init -)"
```

playbook.ymlを用意する。

```playbook.yml
---
- hosts: 127.0.0.1
  connection: local
  sudo: yes
  tasks:
    # Rubyの依存パッケージをinstall
    - yum: name={{item}} state=latest
      with_items:
        - gcc
        - zlib-devel
        - openssl-devel
        - sqlite
        - sqlite-devel
        - mysql-devel
        - libffi-devel

    # Git install
    - yum: name=git state=latest

    # Rubyをrbenv経由でinstall
    - git: >
        repo=https://github.com/sstephenson/rbenv.git
        dest=/home/vagrant/.rbenv/
    - git: >
        repo=https://github.com/sstephenson/ruby-build.git
        dest=/home/vagrant/.rbenv/plugins/ruby-build/
    - file: path=/home/vagrant/.rbenv owner=vagrant state=directory recurse=yes

    - shell: rbenv install -v 2.1.5
      sudo: no
    - shell: rbenv rehash
      sudo: no
    - shell: rbenv global 2.1.5
      sudo: no

    # おまけに開発に必要なパッケージをinstall
    - yum: name={{item}} state=latest
      with_items:
        - ruby-devel
        - rubygems
```

あと `$ ansible-playbook playbook.yml` を実行すればOK。
ほんとは.bashrcの修正もplaybookにまとめたかったのですが、Ansibleのクセというか、タイミングの問題で対応が面倒なので手動でやったほうが簡単に済みます。

[poad1010](http://qiita.com/poad1010)さんご指摘ありがとうございました！
eMQTTでMQTTブローカーのクラスタを組んだメモ


## MQTT概要

概要
[HTTPからMQTTへ - IBMが提唱するモノとモノがつながる時代に最適化したプロトコル&アプライアンス](http://it.impressbm.co.jp/articles/-/10773)

わかりやすい説明
[MQTTについてのまとめ](http://tdoc.info/blog/2014/01/27/mqtt.html)

ガチの人のgistはこちら
[MQTT とはなんだったのか そこはかとなく書くよん。](https://gist.github.com/voluntas/e0a90f3e22316144ed3a)

いわゆるPUB/SUB型のメッセージプロトコルだけど、RabitMQとかとは違ってインターネットや4G/LTE網など信頼性の低いネットワークを考慮しているのが特徴...と認識してます。

使用シーンとしては、多数のセンサーからのデータを一旦MQTTブローカーに集めて、そこからsubscribeしてロギングするとか、あるセンサーのpublishした計測値を別の機器でsubscribeしてその値を元に制御するとか。

## eMQTT概要

Elrang/OTPで実装されたオープンソースのMQTTブローカー。ライセンスはMIT。
これを書いている時点での特徴的な機能は以下のとおり。

* MQTT V3.1.1サポート
* HTTP/WebSocketサポート
* 複数ノードでクラスタを組める。
* プラグインによる機能拡張
* QoS 0,1,2をサポート
* retainサポート
* willメッセージサポート
* SSLサポート
* クライアントIDとIPアドレスによる認証
* ユーザー名：パスワードによる認証


公表されてるベンチマーク結果では

* 20万コネクション
* 2000接続オープン/秒
* 20万topic
* 2万IN/OUTメッセージ/秒 

を8GBメモリのマシンで稼働できるとか。

ちなみに同作者によるErlang/OTP実装のMQTTクライアント[emqttc](https://github.com/emqtt/emqttc)もあります。なぜか１年ぐらい前に僕もコミットしてます :-)

## インスタンスの用意

とりあえずEC2で２つほどインスタンスを用意します。

### ホスト名: `emqtt1`

* * ローカルIPアドレス: `172.31.1.1`
* パブリックDNS: `emqtt1.com`
* アベイラビリティゾーン: `ap-northeast-1a`  

### ホスト名: `emqtt2`

* ローカルIPアドレス: `172.31.1.2`
* パブリックDNS: `emqtt2.com`
* アベイラビリティゾーン: `ap-northeast-1c` 

IPアドレスとかは適当に変えてます。
あえて別々のアベイラビリティゾーンに立ち上げてみました。

## インストール

各ホストで以下を実行

```
$ sudo apt-get install unzip
$ wget http://emqtt.io/downloads/ubuntu
$ mv ubuntu emqttd-ubuntu64-0.8.6-beta-20150617.zip
$ unzip emqttd-ubuntu64-0.8.6-beta-20150617.zip
$ cd emqttd/
```

ノード名を設定

```
$ vi etc/vm.args
```

```:etc/vm.args
-name emqtt1@172.31.1.1
```

emqtt2ノードでは `emqtt2@172.31.1.2` に設定。

## 起動

```
$ bin/emqttd console
```

バックグラウンドで起動する場合は

```
$ bin/emqttd start
```

## クラスタを構成する

ここまでの時点では、各々のノードが別々に稼働している状態。
ここで２つのノードをつないでみる。

emqtt1側で以下を実行。

```
$ ./bin/emqttd_ctl cluster emqtt2@172.31.1.2

cluster with 'emqtt2@172.31.1.2' successfully.
```

これでクラスタが構成された。

## テスト

Rubyクライアントでテストしてみます。

```
$ sudo gem install mqtt
```

emqtt1側につなぐsubscriber

```:subscriber1.rb
require "mqtt"

MQTT::Client.connect("emqtt1.com") do |c|
  c.subscribe("topic")
  c.get do |topic, message|
    puts "#{topic} : #{message}"
  end
end
```

emqtt2側につなぐsubscriber。ホスト名が違うだけ :-/

```:subscriber2.rb
require "mqtt"

MQTT::Client.connect("emqtt2.com") do |c|
  c.subscribe("topic")
  c.get do |topic, message|
    puts "#{topic} : #{message}"
  end
end
```

publisherはこんな。emqtt1側にpublishする。

```:publisher.rb
require "mqtt"

MQTT::Client.connect("emqtt1.com") do |c|
  c.publish("topic", "message")
end
```

さて、では２つのsubscriberを起動

```
$ ruby subscriber1.rb
```

```
$ ruby subscriber2.rb
```

publishしてみる

```
$ ruby publisher
```

結果

```
$ ruby subscriber1.rb

topic : message
```

```
$ ruby subscriber2.rb

topic : message
```

お！ 

タイムリミットが来たのでここまでで...w

## 感想

もうちょっとハマるかと思ったら、案外あっさりできた。一度emqttdを落として立ち上げ直してもちゃんとクラスタ状態を維持してた。
データの永続化はmnesiaを使ってるぽいっけど、まだコードは追っていないので違うのかも。
１年くらい前にちょろっと見たときに比べて、クラスタ化やHTTP/WebSocketなどかなり進化してた。
まだちょっと触ってみただけなので、もう少しいろいろやってみよう。
Kobito for WindowsをMacで動かす方法

[Windows版のKobitoがMacでも全然動いてすごい](http://qiita.com/daron/items/04e3d7936215568a704e)と聞いて、もしかしたらMacアプリ化もできるのではないかと思い調べてみたらできそうでした。


Kobito for Windowsをダウンロードして展開する。

http://kobito.qiita.com/win

electron-packagerをインストールする。

```
npm i electron-packager -g
```

Kobito.appをビルドする。

```
electron-packager ~/Downloads/kobito/resources/app  Kobito --platform=darwin --arch=x64 --version=0.28.2
```

※ここの`version`は[Releases · atom/electron](https://github.com/atom/electron/releases)で公開されているElectronのバージョンになります。

Kobito.appを実行するとKobito for WindowsがMacで動きます。
Google Next(2015/6/18)参加メモ


Google Nextに参加してきたので備忘録として残します。

## 基調講演:Build What's Next - 次世代のクラウドをつくる

クラウドの発達によりインフラ構築が容易になっており、開発者にとって絶好のタイミング。
Google Cloud PlatformはGoogleのプロダクトの中でも急速に発展しているものの一つ。
### ネットワーキング
33カ国70のエッジロケーションでレイテンシーを小さくし、パフォーマンスを高くしている。
### セキュリティ
セキュリティ専門家を500人以上スタッフとして抱えている。
物理的にも、護衛やカメラ、「ミッションインポッシブル」のような赤外線画像、レーザー検出、生体スキャンを用いている。
フルスタックで、ハートウェアなどを自前ですべて構築している。
### Aimingの事例 小林俊仁
スライドは[こちら](http://www.slideshare.net/toshi_k/gcp-next-aiming)

設立当初からミッドコア層を照準を置いている
#### GCPを選んだ理由
既存の海外タイトルにてコスト圧縮が必要だった
オペレーションの煩雑さが一気に改善できた　
ログ容量や計算量がお金かかりすぎる問題をBigQueryで解決できた。
→速いし安いし大容量。
→これまで残しておきたかったけど残せなかったログも残せるようになった。
BigQuery,Cloud SQL,LB,Cloud Storage,Cloud Monitoringなどを使用している

### Nearline
アーカイブストレージを簡単にする。
テープ並の価格とオンライン並のアクセス速度を兼ね備えたプロダクト
https://cloud.google.com/storage/docs/nearline

## 意外と簡単、AI を使ったリアルタイム モバイルゲーム開発

Firebaseの機能
1.リアルタイムデータベース
2.ユーザー認証
3.静的ファイルホスティング

リアルタイムデータベースを使うことにより
1.マップ上の位置情報の同期
2.Docsで他のユーザとのコラボレーション
3.ゲームで対戦など
が可能

1.複雑なトランスポートはFirebaseの方で対応してくれており、あまり意識する必要ない
2.信頼性の低いネットワークでもオフラインモードで対応できる
3.複数のプラットフォームでも対応可能

## Kubernetesのコンテナ技術ですべてをシンプルに

まずはコンテナの概要説明。
Googleではすべてがコンテナで実行されている。
GmailやWeb検索、MapReduceなども

コンテナのメリット
1.パフォーマンス
2.再現性
3.サービスの質
4.可視性
5.課金
6.移植性

### Kubernetesとは
コンテナのオーケストレーター
Dockerコンテナを実行
複数のクラウドおよびベアメタル環境をサポート
マシンではなくアプリケーションを管理

### Kubernetesで重要な4つの機能
#### Pod
密結合したコンテナ＆ボリュームの小規模な集合体
#### Replication Controller
望ましい状態の維持を担当
現在の状態を監視
#### Service
1つのものとして振舞うPodの集合体
健常なPod間の負荷を平衡に保つ
#### Labels
キーとバリューの組み合わせ
検索や集合の操作に使える

Google Container Engineは近日中にα版からβ版にアップ予定

## Google が描く、MapReduce を超えたビッグデータの世界
スライドは[こちら](https://speakerdeck.com/googlecloudjapan/gcp-next-googlegamiao-ku-mapreducewochao-etabitugudetafalseshi-jie)
### BigQuery
Google社内ではMapReduceではなくDremel(=BigQuery)が使われる。
超並列クエリサービスであるBigQueryだと1000億行のフルスキャンを20秒程度で実行可能。
(仮に1台のサーバで実行すると10数時間以上かかる)
fluentdなどでインポートしたデータをBigQueryで解析し、tableauなどBIツールにエクスポートし可視化することが可能。
#### メリット
1.非常に高速
2.直感的なSQL
3.低コスト
4.フルマネージド
### Cloud Dataflow
1.バッチ処理やストリーム処理
2.フィルタリング、データ変換、データ付加
3.コンポジション、オーケストレーション
Cloud Dataflowを使うことによってサジェストを簡単に実現することができる
#### メリット
1.フルマネージド
2.バッチ+ストリーム処理
3.容易なパイプライン設計
MacでUbuntuを快適に使う

# はじめに
MacのVirtual Boxで構築したUbuntuを使いやすくカスタマイズするためのメモ。

普段からPCはMacを使っているけれど、開発はUbuntuを使うことが多い (色んな環境変数の設定とかアプリのGlobal Installとか、会社のProxy設定とかでMacを汚したくないですからね！) のですが、環境が壊れたりPC買い替えたりでUbuntuの環境を作り直すことが多いのでメモを残しておきます。

※ Ubuntu 14.04 LTS での構築例です。

# まずはUbuntuをインストール
* Virtual Box
 * https://www.virtualbox.org/wiki/Downloads
* Ubuntu イメージ
 * http://www.ubuntu.com/desktop

Virtualboxの設定でCPUのコア数を増やしたりメモリを増やしたり (4GB以上割り当てると快適) しておく。

# Guest Additions のインストール

まずは Guest Additions をインストールしないと始まらない。
そのままだと異常に重いし画面解像度の変更もできないし不便。

![150619-0002.png](https://qiita-image-store.s3.amazonaws.com/0/39743/49e871dd-8525-f1f4-789a-7824031cbe7f.png)

Guest AdditionsのCDをInsertすると、Guest Additionsのインストールがダイアログが出るのでそのままインストールする。
インストール後にUbuntuを再起動すると動きがスムーズになる。画面の解像度の変更も可能になり、 HOST + F で画面の最大化して使うと良い。

# キーバインド変更
これが個人的に一番重要。
Defaultだと、アプリの切り替えは `⌥ + Tab`、アプリの終了は `⌥ + F4` などだが、これを `⌘ + Tab`、`⌘ + F4` に変更したい。つまり ⌘ と ⌥ を入れ替えたい。

Ubuntu 14.04ではxkbを使うのが良いようなので、その方法で。

定義ファイルは2種類、それぞれ `$HOME/.xkb` にディレクトリを掘って配置します。

```
$ mkdir -p ~/.xkb/keymap ~/.xkb/symbols
$ touch ~/.xkb/keymap/mykbd
$ touch ~/.xkb/symbols/myswap
```

ファイルの中身はそれぞれこんな感じ。

$HOME/.xkb/keymap/mykbd

```
xkb_keymap {
    xkb_keycodes { include "evdev+aliases(qwerty)" };
    xkb_types { include "complete" };
    xkb_compat { include "complete+japan" };
    xkb_symbols { include "pc+jp+inet(evdev)+myswap(swapkeys)" };
    xkb_geometry { include "pc(pc104)" };
};
```

$HOME/.xkb/symbols/myswap

```
partial modifier_keys
xkb_symbols "swapkeys" {
     replace key <LALT> { [ Super_L ] };
     replace key <LWIN> { [ Alt_L ] };
};
```

ファイル作成後、以下のコマンドでKey Swapを実行。
.bashrcとかに書いておくと良いですね。

```
$ xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null
```

これで `⌘ + Tab` でアプリ切り替えができます。快適！

![150619-0003.png](https://qiita-image-store.s3.amazonaws.com/0/39743/0165fe1c-6a91-9aaa-efa7-f2df47922d84.png)


その他、入れ替えたいKeyがあれば、myswap に書けばOK。WindowsでUbuntuを使うときに CTRL と CAPS LOCK を入れ替える際などにも使えます。

# 日本語入力環境の Mozc をインストール

Mozcは、いわゆるGoogle日本語入力から派生したIMEですね。Windows や Mac で Google日本語入力を使っている人は Ubuntu に Mozc をインストールしましょう。

```
$ sudo apt-get install -y ibus-mozc
```

**システム再起動後**、設定画面から Mozcを 選択。

![150619-0004.png](https://qiita-image-store.s3.amazonaws.com/0/39743/ec54d209-f942-42a1-9515-811d994a9002.png)

これで日本語入力も快適。

# コマンドショートカット

`.bashrc` に登録しておくと便利なもの (随時追記していきます)。
Mac使いはTerminalからディレクトリを開くのに `open` を使いたいですよね。

```
alias open='nautilus'
alias sudo='sudo -E'
```

Proxy Settings、必要であれば。

```
export http_proxy="http://proxy.url:8080/"
export https_proxy="https://proxy.url:8080/"
export ftp_proxy="ftp://proxy.url:8080/"
```


# 必要なツール群をインストール

ここから先は本当にメモ。

### Atom Editor

```
$ sudo add-apt-repository ppa:webupd8team/atom
$ sudo apt-get update
$ sudo apt-get install atom
```

Atomは大好きなエディタですが、Chromiumベースなのが災いして、2015/06現在のUbuntu版Chromiumにはテキストのコピーができないバグがあり、使い勝手は微妙です。Chromiumのバグが修正されるのを気ままに待ちます…

### Git

```
$ sudo apt-get install -y git git-gui
```

あとは開発したい言語やIDEなんかをインストールしていきましょう。
[Linux]「tail -f」での監視はもう古い!?超絶便利なlessコマンド


`less`コマンドはファイルの中身を閲覧するためのコマンドです。

```
less <ファイル名>
```

- `q`：less終了（quit）
- `f`：次のページを見る（forward）
- `b`：前のページを見る（backward）
- `j`：1行下へ
- `k`：1行上へ
- `g`：ファイルの先頭へ移動
- `G`：ファイルの末尾へ移動
- `/キーワード`：前方検索。`n`で次の検索一致へ移動。`N`で前の検索一致へ移動。
- `?キーワード`：後方検索。`n`で次の検索一致へ移動。`N`で前の検索一致へ移動。
- `F`：監視状態。`tail -f`と同じ機能。`Ctrl + c`でless状態に戻る。

`F`で監視状態になり、止めたい時は`Ctrl + c`で止めて`/キーワード`で検索するのとかすごく便利です。
`tail -f`と異なり、「監視」と「検索」が一気通貫でできるので、個人的には`tail -f`よりも断然オススメです。
`/`検索の後の`n`と`N`も便利なので多用します。
（`grep`かけながら監視したい場合は`tail -f`を使います）

※ おまけ：ログを見る時、おすすめのコマンド

- `less <ファイル名>` + `F` + 検索
- `cat <ファイル名> | grep Exception`
- `tail -f <ファイル名> | grep Exception`
情報セキュリティスペシャリストを取得して

ちょうど今日合格発表があって、情報セキュリティスペシャリストに合格していたことがわかりました。で、そんな中で感じたいろんなことを綴っていきます。

# IT系での資格の価値

税理士・弁護士・医師と言った資格は、持っていなければそもそもその仕事をすること自体ができません。一方で、IT系の資格にそのような業務独占のものは基本的になくて、資格を持っているからといって特別にできることが増えるわけでもありませんし、逆に資格なんかなくても活躍している人たちだって山のようにいます。

それでは、その中で資格を持つ意味とはどのあたりにあるのでしょうか。個人的には、大きなポイントは2つあると考えています。
<dl>
<dt>これだけのスキルだと客観的に示す機能</dt>
<dd>（特に、実績を積んだわけでもない場合）どれだけのスキルがあるか示すことは難しいものですが、資格というものさしを使って一定の理解を持たせることができます。</dd>
<dt>学習の動機付けとして</dt>
<dd>（合格自体を目的として張った山が当たったような場合はともかく）試験範囲という形で、求めるスキルセットを明確にしているので、自分に足りていない分野をはっきりさせる効果もあります。</dd>
</dl>

とりわけ、IPAの行う試験は特定のベンダーの製品に依存しないようなものなので、広く力を付けるという意味では役に立つ気がしています。

# 情報セキュリティそのものについて
まず、大原則として「セキュリティも費用とリスクのバランス」ということは実感できました。たとえば、「インターネット上へ公開しているサーバのリスクをゼロにする」方法は、「サーバの公開自体を止めてしまう」以外に存在しません。また逆に、「自分が隕石に当たって死ぬリスク」を減らすために労力を払っている人も、おそらくそう多くはないでしょう。

もちろんリスクを減らすことは必要ですが、リスクも「起きうる確率」と「起きた時の被害」、そして逆に「どれだけのコストでどれだけリスクを軽減できるか」という対策側の事情も踏まえて、総合的にどうするのか判断する必要があります。そして、残存するリスクに対しても「許容する」「保険などで他者に移転する」などの手法があります。

そして、内部犯だったベネッセの情報流出や、メールを開いてしまったことによる日本年金機構の例でもわかるように、「人間がルールを守ること」を前提としたセキュリティには、どうしても回避しきれないリスクが残ります。技術的に対策できるところはもちろん対策が必要ですが、どれだけ防御しても**問題は起こりうる**という前提のもとに、いざ起きてしまった場合の善後策まで用意してはじめて立派なセキュリティ対策と言えるでしょう。
サクラエディタをSolarized + C#キーワード

# 総括
サクラエディタ関連のあれこれコネタをまとめました。

# カラー
えー、[SakuraEditorWiki](http://sakura.qp.land.to/?Customize%2F%C5%EA%B9%C6%2F76)に、Solarizedのカラースキームのファイルがありますが、lightがほしかったので、作成しました。

* [Dark](https://gist.github.com/tsuyoshicho/a06b315e8ee952929763#file-solarized-dark-col) もともと置いてあったファイルと同じ
* [Light](https://gist.github.com/tsuyoshicho/a06b315e8ee952929763#file-solarized-light-col)

先にgistに入れちゃったのでコード連携できませぬ。

# キーワード
あとC#のキーワードが必要になったので、別の方のgistからforkしておいた。

* [sakura_keyword_csharp.kwd](https://gist.github.com/tsuyoshicho/0adf8ef7b346902d11d9#file-sakura_keyword_csharp-kwd)

先に(ry

以上、備忘録として。
fabric betaへのアップロードにRelease Noteを指定する



fabricプラグインの導入後、下記コマンドでbetaへのアップロードを行えます。

```
gradle crashlyticsUploadDistributionDebug
```

駄菓子菓子、デフォルトの場合だとRelease Noteが空で配布されてしまいます...



document : https://dev.twitter.com/crashlytics/beta-distribution/gradle

ドキュメントによれば、BuildTypeかFlavorに指定して上げれば良いようです。


### とりあえず実装

今回はBuildTypeにて指定してみました。（ついでにTesterGroupもしています

```app/build.gradle
android {
    ... 
 
 
    buildTypes {
        develop {
            ...
 
            ext.betaDistributionReleaseNotes = getCurrentCommitMessage()
            ext.betaDistributionGroupAliases = 'tester_group'
        }
        
        ...
    }
    
    ...
}
```


gradleでコミットメッセージを返すような関数を用意してあげて.

```
def getCurrentCommitMessage() {
    def gitlog = 'git log --oneline'.execute().text.split('\n')[0]
    def date   = "date +%y-%m-%d_%H:%M:%S".execute().in.text.split('\n')[0]
 
    return "$date $gitlog"
}
```



うむうむ、素敵だ。
Cake3でお問い合わせフォームを作成する方法(DBを使わない)

# Cake3でお問い合わせフォームを作成する方法(DBを使わない)

## 想定

* お問い合わせフォームのようなものを作りたい  
* DBは利用せず内容をメール送信する

## 作り方

* 対応するテーブルがないので Cake3からある `Table` や `Entity` は使わない
* `Cake\Form\Form` というクラスを利用する

## コード

src/Form/ContactForm.php

```
<?php

namespace App\Form;

use Cake\Form\Form;
use Cake\Form\Schema;
use Cake\Validation\Validator;
use Cake\Network\Email\Email;

class ContactForm extends Form
{

    // お問い合わせフォームのスキーマを定義する
    protected function _buildSchema(Schema $schema)
    {
        return $schema->addField('name', 'string')
            ->addField('email', ['type' => 'string'])
            ->addField('body', ['type' => 'text']);
    }

    // バリデーション内容を定義する
    protected function _buildValidator(Validator $validator)
    {
        return $validator->add('name', 'length', [
                'rule' => ['minLength', 10],
                'message' => '名前は10文字以上入力してください。'
            ])->add('email', 'format', [
                'rule' => 'email',
                'message' => 'メールアドレスを入力してください。',
            ]);
    }

    // バリデーション後に実行したい処理を記述する
    protected function _execute(array $data)
    {
        // メールを送信する
        $email = new Email('default');
        $email->from(['test@example.com' => 'from名'])
            ->to('hoge@example.com')
            ->subject('タイトル')
            ->send('本文です。');
        return true;
    }
}

```

src/Controller/ContactsController.php

```
<?php

namespace App\Controller;

use App\Form\ContactForm;

class ContactsController extends AppController
{
    public function index()
    {
        $contact = new ContactForm();

        if ($this->request->is('post')) {
            if ($contact->execute($this->request->data)) {
                $this->Flash->success('メール送信しました');
            } else {
                $this->Flash->error('バリデーションに引っかかりました。');
            }
        }

        $this->set('contact', $contact);
    }
}
```

src/Template/Contacts/index.php

```
<?php
echo $this->Form->create($contact);
echo $this->Form->input('name');
echo $this->Form->input('email');
echo $this->Form->input('body');
echo $this->Form->button('Submit');
echo $this->Form->end();
?>

```
goでLチカの練習　その4

tick使ってみました。

```
package main
import (
	"time"
)
func main() {
	i := 0
	start := time.Tick(500 * time.Millisecond)
	for {
		select {
		case <- start:
			if i == 0 {
				print("green on\n")
			} else if i == 1 {
				print("green off\n")
			} else if i == 2 {
				print("yellow on\n")
			} else if i == 3 {
				print("yellow off\n")
			} else if i == 4 {
				print("red on\n")
			} else if i == 5 {
				print("red off\n")
			} 
			i++
			if i > 5 {
				i = 0
			}
		}
	}
}
```
[Mysql] SQLでif文を使う

SQLでif文的なことをやる方法を記載


phpなどでif文を記述した場合

```php

if(param1 == 0){
 return 'なし';
} else if(param1 == 1){
 return 'あり';
} else {
return null;
}
```

mysqlでcase文を記述した場合

```sql
CASE WHEN param1=0 THEN 'なし'
   WHEN param1=1 THEN 'あり'
   ELSE  null END
```

例：
param1の返り値が0または1の場合に「なし」、「あり」の文言に変換して返したい場合

```sql
select 
  (CASE WHEN param1=0 THEN 'なし'
   WHEN param1=1 THEN 'あり'
   ELSE  null END) as param1_display
from db_table;
```


以上
WEBページ上の全要素のz-index情報を参照できる一行コマンド

ChromeのDeveloper Toolsのコンソール上で下記コマンドを実行する。
（※要Underscore.js/Lodash）

```js
_.groupBy(_.sortBy(document.body.getElementsByTagName("*"), function(el){return document.defaultView.getComputedStyle(el,null).getPropertyValue('z-index')}), function(el){return document.defaultView.getComputedStyle(el,null).getPropertyValue('z-index')})
```
[FuelPHP] validationでフィールド毎に独自のメッセージを表示する

validationでフィールド毎に独自のメッセージを表示する方法を記載。

基本的な使い方

```
$val = Validation::forge('valdation_name');
$val->add_callable('Model_util_validation');
$val->add('title', 'タイトル')->add_rule('required');

if ($val->run()) {
　//正常
} else {
　//エラー
}

```

フィールド毎に独自のメッセージを表示する使い方
（add_ruleに関数を追加）

```
$val = Validation::forge('valdation_name');
$val->add_callable('Model_util_validation');
$required_rule = function ($v) use ($val) { return $val->_validation_required($v); };
$val->add('title', 'タイトル')->add_rule(['required_test' => $required_rule])
$val->set_message('required_test', '独自のエラーメッセージ');

if ($val->run()) {
　//正常
} else {
　//エラー
}

```


以上
EXIFとJFIFの違い


自分の思い違いの記録。

#JFIFとは
JPEGの一般的なフォーマット。

#Exifとは
JFIFの中の規格だと思っていたら、JFIFを拡張したExifという形式が正解らしい。デジカメに使われることが多い。
もともとローカル規格だったがいつのまにかISO標準になっていたようだ。

とはいえ、中身はJFIFであり、違いはこの部分のみのようだ（本当か？）

| Marker | 内容      |
|:------:|:---------:|
| APP0   | JFIFヘッダ |
| APP1   | Exifヘッダ |

Exifヘッダ内は、カメラの機種名・撮影年月日・露出情報などの付加情報の格納法が規定されている。

#まとめ
Exifとは、JFIFフォーマットの中にExif形式を決めたものと勝手に思い込んでいたら、実はフォーマット自体がExif形式という名を名乗っていた、ということを知ったという話でした。そんだけ。
Railsアンチパターン<ドメインモデリング編>①無駄に高度な認証,②モデル多すぎ問題

①:無駄に高度な認証 編
=

だいたいのwebアプリケーションにおいて、ユーザーに認証、権限というものを付与する機会があるだろう。オーソドックスな実装としてはUserと多対多で紐づく`Role`というモデルを作り、そこにUserを加えたりあるいは削除したりするという実装などがあるかもしれない。が、こういうモデル設計はよくアプリケーションが本格的に作られて、実際どういう機能が必要かわかってくる前に作られることが多い。その結果、不必要な機能まで実装してしまって無駄に複雑になったりする。今回はそういうアンチパターンの話。

ソリューション:単純にフラグ変数で良い
=
要するにモデルにしてしまうからややこしいんだ、という話。Userにadmin, editorなどの役割フラグBooleanカラムを作ってしまう。ActiveRecordが自動で`admin?`などのメソッドを作ってくれるのでさらに使いやすくなる。どんないいコードより、書かれてないコードの方が良い。
roleが多くなってきたら初めて`Role`モデルの再採用を検討してもよい。が、`has_and_belongs_to_many`なんてなどしないで普通にUser has_many roleでよい（つまり非正規化）。

##教訓:
 * 必要となるまでは書くな
 * いきなり高度なこと(モデルにしたり、中間テーブルで正規化したり)をするな

各Userについて複数もたれるroleを単純にhas_manyにしてしまうのはレコード量が爆発しそうな気がするけど、最初からそんな先のことを考えるな、と言いたいんだと思う。Railsはアジャイルという考えかたに寄り添っているフレームワークなので、最初から完璧なものを作ろうとしない方がいい、ということなのだろう。いきなりdeviseとか使い出すの、やっぱりおかしいのかもしれない。

②:モデル多すぎ問題編
=

ソリューション: 単なるフィールドに非正規化する
=

以下のようなモデル達を考える。

```.rb
class Article < ActiveRecord::Base 
  belongs_to :state
  belongs_to :category
  validates :state_id, :presence => true
  validates :category_id, :presence => true 
end

class State < ActiveRecord::Base 
  has_many :articles
end

class Category < ActiveRecord::Base 
  has_many :articles
end
```

はて、このStateモデルやCategoryモデルは必要だろうか。これでいいのではないか。

```.rb
class Article < ActiveRecord::Base
  STATES = %w(draft review published archived) 
  CATEGORIES = %w(tips faqs misc)
  validates :state, :inclusion => {:in => STATES} 
  validates :category, :inclusion => {:in => CATEGORIES}
  
  STATES.each do |state| 
    define_method "#{state}?" do
      self.state == state 
    end
  end
  
  CATEGORIES.each do |category| 
    define_method "#{category}?" do
      self.category == category 
    end
  end
end
```

もちろんモデル化することによってたとえば管理者が手軽にStateを足せるという話はある、かもしれないが、結局プログラマーはその新しいstateをどう扱うかということについて新しいコードを書かないといけない。だったら無駄にモデルを増やすより、Textフィールドにしてしまった方が単純でよい。

##結論:その関連、本当にモデルである必要がありますか。

ソリューション:RailsのSerialize機能を使おう
=
Railsにはserializeという機能がある。カラムとしてはtextで持っておきながら、配列やHash,JSONなどの情報を文字列として持っておける(YAMLで格納されている)。そしてRailsから利用するときにはそのことを意識することなくそのままアクセスできる。

[利用例](http://easyramble.com/rails-active-record-serialize.html)

これで永続化しておくべきな、しかし些細な情報にいちいちモデルを作らなくても良くなる。
ただし、YAMLtextとして所持しているので検索性は最悪なのに注意すること。このカラムでレコードをfindするようなことはやめた方がよい。

##結論:簡単な関連はserialize機能で簡単に管理できないか考えてみよう。

実はSQLアンチパターンでも触れられている。
[パターン4の汎用的な属性テーブルの使用] (http://qiita.com/lastcat_/items/fe3f9144c5c4da9e93db)のところ。解決策の一つとしてLOBという名前が付いている。

所感
=
単なるwebフレームワークではなく「アジャイル開発用」であるという側面をもったフレームワークだということを意識すると、それぞれの機能の使い方とかが見えてきたりするなあ、と思ったりした。最初はなるべく簡単な形に実装する。必要になるまで作らない。そういう精神が根底にあることを認識しておくことも大事かもしれない。巨大アプリケーションを作りたいなら(別にRailsでも不可能ではないと思うけど)あんまり良くない規約なんかもいっぱいあると思う(ActiveRecordパターン自体が最適でないケースも沢山あると思う)のでちゃんと思想を知った上で機能やそもそもの採用の取捨選択ができるようになれればいいな、と思った。
cherry-pickコマンド備忘録

## cherry-pickコマンドを使った経緯

本番へのリリースにあたり、リリース用のブランチに変更をコミットしようとしたところ、
過去の改修が含まれていたことに気付き、「特定のコミットだけ反映したいな」と思って調べたのがきっかけです。

## cherry-pickコマンドとは？

まさに上記ような状況にぴったりのコマンドで、他ブランチの特定コミットのみを反映されることができるコマンドです。

## 使い方

`cherry-pick コミットID`でそのコミットを反映させることができます。
**例 developブランチのコミットをstrawberryブランチにcherry-pickする場合** 

```git.command
git checkout develop
git log

commit f77d749550d38df8b2a11cc3d5c16cd1f26fc025
    staging環境ホスト名変更

commit 7c83ae675baf01ec71799c4cba7d06eb467a6bdd
    パラメータ小文字化対応

commit 0794374042d3def3b5824bdb0be2b215d443b73b
    文字列結合演算子の修正/stagingのhostをlocalに変更

commit 546de2cc727fcae02646c6af637f401e4238feef
    リクエストにパラメータ追加

git checkout strawberry
git cherry-pick 546de2cc727fcae02646c6af637f401e4238feef
```
みたいな感じです。
## 実際使ってみてわかったこと

cherry-pickでまとめてコミットしてやったところ、コンフリクトがおきましてダメでした。

**まとめてやる方法**

```git.command
git cherry-pick develop~8..develop
```

最新から過去にさかのぼり８番目までのコミットを反映されます。

で、結局やった方法は、ひとつずつcherry-pickし、コンフリクトが発生した場合は、コンフリクトを解決しコミットし、cherry-pickし・・・をしました。

ありがとうございました。

## 参考URL
[git cherry-pick まとめめも](http://r-h.hatenablog.com/entry/2013/05/04/110111)
[git cherry-pickで起きてしまったconflictの解消方法【--ours、--theirs】](http://naiki.hatenablog.com/entry/20140219/1392740162)
google-api-ruby-clientを使ってGoogleComputeEngineのApiを叩いてみる

けっこう難しかったので

```rb
require "google/api_client"

key_path = "DLしたp12キーをpemに変換したファイルのフルパス"
passphrase = "鍵のパスフレーズ"
user = "サービスアカウントのメールアドレス"
project_id = "プロジェクトID"
zone = "インスタンスを配置したzone"

client = Google::APIClient.new(:application_name => "")
key = Google::APIClient::KeyUtils.load_from_pem(key_path, passphrase)

client.authorization = Signet::OAuth2::Client.new(
  :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
  :audience             => 'https://accounts.google.com/o/oauth2/token',
  :scope                => "https://www.googleapis.com/auth/compute",
  :issuer               => user,
  :signing_key          => key
)
    
client.authorization.fetch_access_token!
compute = client.discovered_api("compute")
    
result = client.execute(
  :api_method => compute.instances.list,
  :parameters => { "project" => project_id, "zone" => zone }
)

p JSON.parse(result.response.body)

# 起動中のインスタンスの配列を取る
body = JSON.parse(result.response.body)
p body["items"].select { |i| i["status"] == "RUNNING" }.map { |i| i["networkInterfaces"].first["accessConfigs"].first["natIP"] }
```
[説明画像付き]2015/9/16 Appleイベント以降の緊急審査依頼(request expedited review)



今まで以下の内容で申請を行っていました。


## 「以前」の緊急審査依頼の手順

### 1.アップロードしレビュー待ちの状態にする(通常の申請方法と同じです。)
*リリースに関する内容のためエビデンスなし


### 2.iTunesConnectのトップページから「リソースとヘルプ」を選択する

![スクリーンショット 2015-06-19 18.55.43.png](https://qiita-image-store.s3.amazonaws.com/0/15812/d7623b8b-6255-eeb2-68f9-5800ae8fe913.png "スクリーンショット 2015-06-19 18.55.43.png")



### 3.「連絡先」を選択(メールのアイコン)する

![スクリーンショット 2015-06-19 18.57.34.png](https://qiita-image-store.s3.amazonaws.com/0/15812/26bf82f9-6bfe-abb1-6ca5-d17ca58bf4b3.png "スクリーンショット 2015-06-19 18.57.34.png")




### 4.ドロップダウンから「App Review」＞「Request Expedited Review」を選択する


![スクリーンショット 2015-06-19 19.00.02.png](https://qiita-image-store.s3.amazonaws.com/0/15812/e38a7568-74e8-e189-7387-b80e829d083c.png "スクリーンショット 2015-06-19 19.00.02.png")




#　としていたのですが




![スクリーンショット 2015-06-19 18.47.48.png](https://qiita-image-store.s3.amazonaws.com/0/15812/df26db17-f370-f641-ebac-bf7eb366abba.png "スクリーンショット 2015-06-19 18.47.48.png")




# なくなってる。。。。
*こちらはもしかしたら自分のOSのバージョンが関係しているかもしれません。
私のMacのOSはOSX10.5の環境です。


## 6/19時点での緊急審査依頼の手順

### 1.[Contact the App Review Team](https://developer.apple.com/contact/app-store/?topic=expedite)に直でアクセスする


![スクリーンショット 2015-06-19 19.02.53.png](https://qiita-image-store.s3.amazonaws.com/0/15812/064dc6ff-46e5-d18a-4c5b-a20bf00a6d93.png "スクリーンショット 2015-06-19 19.02.53.png")


### 2.ドロップダウンから「Request Expedited Review」を選択する


![スクリーンショット 2015-06-19 19.02.37.png](https://qiita-image-store.s3.amazonaws.com/0/15812/467f2bde-cd23-0cb2-03c5-a7555d8a8c2d.png "スクリーンショット 2015-06-19 19.02.37.png")

### 3.Contact Informationで電話と組織名を入力する
(「組織名」は任意です。)

*アカウントに関する内容のためエビデンスなし


### 4.「アプリ名」、「アプリID」、「プラットフォーム」を記載する
(レビュー待ちアプリのページで確認できます)
(「Related Apps」は任意です)

![スクリーンショット 2015-06-19 19.10.37.png](https://qiita-image-store.s3.amazonaws.com/0/15812/a24c49b9-77f6-07ae-7108-72f68037bcfb.png "スクリーンショット 2015-06-19 19.10.37.png")


### 5.急ぐ理由として「Critical Bug Fix」(緊急性のあるバグ修正)、「Time-Sensitive Event」(時間限定イベント)、「Other」(その他)の中から選択する。


![スクリーンショット 2015-06-19 19.15.28.png](https://qiita-image-store.s3.amazonaws.com/0/15812/2dc03608-d474-36b3-9d55-5aa8ac11dc7f.png "スクリーンショット 2015-06-19 19.15.28.png")


### 6.詳細な理由を「必ず」記載する。(「急いでいる理由を詳しく書いてください。十分な説明がなければ申請は拒否されます」と注意書きがあります。詳細を軽視して申請拒否されてしまてはもとも子もありません。また[google翻訳](https://translate.google.co.jp/?hl=ja)などを使って英語で書くことをオススメします。)

![スクリーンショット 2015-06-19 19.16.17.png](https://qiita-image-store.s3.amazonaws.com/0/15812/1a6122a4-388f-b395-004b-dc2a46a977d0.png "スクリーンショット 2015-06-19 19.16.17.png")


### 7.「Submit」ボタンで申し込みを完了させる
<br>


WWDC後で申請した際、全くレビュー状態にならない方かつ、
致命的なバグの解消をしたい方の参考になれば幸いです。
Rspecのrequest(Integration test)でDeviseのメール認証を回避する方法


## 目的

前回の記事([Rspecのrequest(Integration test)でDeviseを使う方法](http://qiita.com/gakkie/items/40e5678af7b63afc14df))のあと、メール認証(confirmable)を設定したらRspecでエラーが出たのでその回避方法。

## やったこと

1. request specのbefore処理でログイン前に`confirmed_at`に値を強引に入れてあげる

    ```spec/request/some_request_spec.rb
      let(:user) { FactoryGirl.create(:user) }
      before do
        user.confirmed_at = Time.zone.now
        user.save
        login_as(user, :scope => :user)

        visit some_authentificated_path
      end 
     ```

## 考察

これって、beforeじゃなくてletのところでやるべきなのかなぁ。

## その他の解決方法

* factoryGirlで`confirmed_at`に値を定義しちゃう方がきれいかもしれない([参考](https://gist.github.com/henrydjacob/1344451))
【Selenium】python3でphantomjs実行時のログ出力先の変更

pythonでphantomJS実行時のログがちょっとうざかったので、出力先の変更の仕方をここに記載します。

## PhantomJSでの実行の仕方

```py3
from selenium import webdriver

# driverの指定
driver = webdriver.PhantomJS()
driver.set_window_size(1024, 768)
driver.get('https://google.com/')

# キャプチャ
driver.save_screenshot('google.png')

driver.quit()
```

## デフォルトの出力
カレントディレクトリ以下に、`ghostdriver.log`という名前で保存されます。

## 出力先の変更
`service_log_path`にパスを指定すると、そのパスに出力される

```py3
log_name = '/tmp/phantomjs.log'
driver = webdriver.PhantomJS(service_log_path=log_name)
```
## ログレベルの設定
`service_args`にphantomJSの引数、`--webdriver-loglevel`を指定する

```py3
log_name = '/tmp/phantomjs.log'
driver = webdriver.PhantomJS(service_log_path=log_name,service_args=["--webdriver-loglevel=ERROR"])
```
phantomJSに渡せる引数は、`phantomjs -h`で確認できる

## 標準出力させる

```py3
import os
import sys

driver = webdriver.PhantomJS(service_log_path=os.ttyname(sys.stdout.fileno()))
```

## ログを出力しない

```py3
import os

driver = webdriver.PhantomJS(service_log_path=os.path.devnull)
```
JavaScript Array.forEachとjQuery.eachの違い

jQueryのeachばかり使っていたので、forEachでちょっと躓きました。

#コールバックの引数の順序が違う
###jQuery.each
コールバックの第一引数がインデックス、第二引数が値

````js
var a =[1,2,3,4,5]
$.each(a,function(index,val){

});
````
###forEach
コールバックの第一引数が値、第二引数がインデックス、第三引数にforEachされている配列

````js
var a=[1,2,3,4,5]
a.forEach(function(val,index,ar){
   console.log(a===ar); //trueになる
});
````
#thisが違う
jQueryでは、thisは要素を指していたが、forEachではコールバック内のthisが参照するオブジェクトを指定できる。

````js
var a=[1,2,3,4,5]
//jQuery
$.each(a,function(){
console.log(this); //1,2,3,4,5が、Numberクラスに変換されて表示される
});

//forEach
a.forEach(function(val){
    console.log(this); //undefinedが表示されるか、windowオブジェクトが表示される
});

var b = [5,6,7,8,9]
a.forEach(function(val,index){
    console.log(this[index]); //5,6,7,8,9が表示される
},b);

````
#forEachはループから抜けられない
jQueryなら、コールバック関数内で`return false`すれば、ループを中止できましたが、
forEachにはループを抜ける手段がありません。
ループを抜けたければ、**some**メソッドを使用します。


##someメソッド
コールバック内で、`false`を返せば処理を中断して次のループへ(continueと同じ）
`true`を返せばループ自体を中断

つまりjQuery.eachと逆です。

````js
var a=[1,2,3,4,5]
a.some(function(val,index){
   if(index==2) return false;
   console.log(index);
});
//結果 0,1,3,4が表示される

var a=[1,2,3,4,5]
a.some(function(val,index){
   if(index==2) return true;
   console.log(index);
});
//結果 0,1が表示される
````

以上です。