OmniAICreator/Qiita-1.07M huggingface dataset:
Rubyでの変数スコープ(クラス、メソッド、制御構文、ブロック)について

# Rubyでの変数スコープ(クラス、メソッド、制御構文、ブロック)について

Rubyでの変数のスコープのメモ。
インスタンス変数やクラス変数ではなく、__ローカル変数__を対象としています。

```rb
class Scope
  _top = "top level"

  p _top # => "top level"

  def scope_method
    _method = "method level"

    p _method # => "method level"
    # p top => 外のスコープは見えないためエラー発生

    # 制御構文
    ## if
    if true
      _if = "if level"
      p _method # => "method level"
    end
    p _if # => "if level"

    ## for
    for _var in 1..5
      _for = "for level"
    end
    p _for # => "for level"
    p _var # => 5

    ## while
    num = 0
    while num <= 0
      _while = "while level"
      num += 1
    end
    p _while

    ## case
    case
      when num == 1
        _case = "case level"
    end
    p _case
    ## begin
    begin
      _begin = "begin level"
      raise
    rescue
      p _begin # => "begin level"
    ensure
      p _begin # => "begin level"
    end

    ## ブロック
    ary = (1..10).to_a
    ary.each do |block_num|
      p block_num # => 1~10
    end
    # p block_num # => エラー発生。ブロック内のスコープに閉じられている。
  end

  # p _method # => エラー発生

  # インナークラス
  class InScope
    _inner = "inner"
    # p _top # => エラー発生
  end
  # p _inner # => エラー発生
end

obj = Scope.new
obj.scope_method
```

## 結論
- class外では、__class内やメソッド内のローカル変数を見れない。__
- class内では、__トップレベルに宣言されたローカル変数しか見えない。__
- メソッド内では、__変数のスコープはメソッド内に閉じ(メソッド外のローカル変数は見れない)、制御構文内のメソッドは見れる。__
- 制御構文(if,forなど)では、__メソッド内のローカル変数を見れる。__
    - 制御構造はスコープを作らない。
- ブロック内では、__メソッド内のローカル変数を見れる。__
EventToCommandを使って、ViewModelへEventArgs渡す

##はじめに
MVVMは、ViewとViewModelをバインディングでのみ結合するところに利点があります。
ですが、ButtonのCommandのように、ViewからViewModelへトリガーを渡すようなものも必要です。
Commandは、便利なのですが汎用的に全てのコントロールが対応している訳ではないため使い方が限定されます。
私は、普段WPF開発に慣れもあって、[Livet](https://github.com/ugaya40/Livet)を使っているのですが、マウスホイールのようなイベントをViewModelへ渡すのに、Behaviorを自作するなど工夫が必要でした。
改めて、ネット検索してみたところ[GalaSoft MvvmLight](https://github.com/paulcbetts/mvvmlight)には、[EventToCommand.cs](https://github.com/paulcbetts/mvvmlight/blob/master/GalaSoft.MvvmLight/GalaSoft.MvvmLight.Extras%20%28NET35%29/Command/EventToCommand.cs)というTriggerActionが用意されており、便利そうなので使ってみました。

##問題点
WPFのマウスホイールのイベントは、MouseWheelEventArgsクラスのDeltaプロパティの値を見て、回転方向と回転速度を取得します。
EventTriggerとLivetCallMethodActionを組み合わせてもMouseWheelEventArgsは、ViewModelへは渡ってこないため上手く実装できない訳です。

##便利なEventToCommandという機能
MvvmLightには、EventToCommandという機能が用意されておりコマンドのパラメーターへイベントパラメーターを載せて呼び出してくれます。
下記のような使い方です。（PassEventArgsToCommand="True"にする必要があります）

```xaml:Sample.xaml
<Image Source="{Binding Source}" Stretch="Uniform">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="PreviewMouseWheel">
            <ml:EventToCommand Command="{Binding MouseWheelCommand}" PassEventArgsToCommand="True" />
        </i:EventTrigger>
     </i:Interaction.Triggers>
</Image>
```

```csharp:Viewmodel.cs
private Livet.Commands.ListenerCommand<System.Windows.RoutedEventArgs> _mouseWheelCommand;

public Livet.Commands.ListenerCommand<System.Windows.RoutedEventArgs> MouseWheelCommand
{
    get
    {
        if (this._mouseWheelCommand == null)
        {
            this._mouseWheelCommand = new Livet.Commands.ListenerCommand<System.Windows.RoutedEventArgs>(this.MouseWheel);
        }
        return this._mouseWheelCommand;
    }
}

private void MouseWheel(RoutedEventArgs args)
{
    var mouseWheelEventArgs = (MouseWheelEventArgs)args;
}
```

汎用的で応用の効きそうな機能ですよね。
知っていると非常に実装効率が上がりそうな機能なので知ってて損は無いと思います。
Rubyでの例外処理内のreturnについて

# 例外処理内のreturnについて
Rubyの例外処理のreturnについてのメモ。
## rescue節内でのreturn
まずはrescue節内でのreturnです。

```rb
class Return
  def test
    begin
      p "Begin"
      1/0
      return "return begin"
    rescue => ex
      p "Rescue"
      return "return rescue"
    ensure
      p ex
      p "Ensure"
    end
  end
end

obj = Return.new
p obj.test
```

実行結果がこちら

```
"Begin"
"Rescue"
#<ZeroDivisionError: divided by 0>
"Ensure"
"return rescue"
```

実行順として、
1. begin
2. rescue
3. ensure
4. return(rescue)
の流れになっており、rescue節内で処理が終了していることがわかります。

なお、`begin~rescue~end`内のスコープは同じなので、ensure節からrescue節の変数(オブジェクト)が見えています。

## ensure節内でのreturn
次に、ensure節内でreturnです。

```rb
class Return
  def test
    begin
      p "Begin"
      1/0
      return "return begin"
    rescue => ex
      p "Rescue"
    ensure
      p ex
      p "Ensure"
      return "return ensure"
    end
  end
end

obj = Return.new
p obj.test
```

実行結果がこちら

```
"Begin"
"Rescue"
#<ZeroDivisionError: divided by 0>
"Ensure"
"return ensure"
```

実行順として、
1. begin
2. rescue
3. ensure
4. return(ensure)
の流れになっており、ensure節内で処理が終了していることがわかります。

## rescue節内・ensure節内でのreturn
最後に、rescue節内・ensure節内でのreturnについてです。

```rb
class Return
  def test
    begin
      p "Begin"
      1/0
      return "return begin"
    rescue => ex
      p "Rescue"
      return "return rescue"
    ensure
      p ex
      p "Ensure"
      return "return ensure"
    end
  end
end

obj = Return.new
p obj.test
```

実行結果はこちら

```
"Begin"
"Rescue"
#<ZeroDivisionError: divided by 0>
"Ensure"
"return ensure"
```

実行順として、
1. begin
2. rescue
3. ensure
4. return(ensure)
の流れになっており、rescue内のreturnが実行されずにensure内のreturnで処理が終了していることがわかります。

また、rescue節を省いて例外を発生させない場合も考えて見ます。

```rb
class Return
  def test
    begin
      p "Begin"
      return "return begin"
    ensure
      p "Ensure"
      return "return ensure"
    end
  end
end

obj = Return.new
p obj.test
```

実行結果はこちら。

```
"Begin"
"Ensure"
"return ensure"

```

実行順としては、
1. begin
2. ensure
3. return(ensure)
となっており、begin節内のreturnは実行されず、ensure節内で処理が終了しています。

## 結論
上記からもわかるように、ensure内にreturn文を記述すると、その時点で処理が終了してしまうため、__本来期待していた処理が行われません。__
このため、ensure節内での__returnは避けるべき__です。
PythonからGoogle APIsを利用する際のOAuth2エラーの対処方法

下記の記事を参考に、Google APIs Client for PythonからBigQueryを利用した際、OAuth認証関連のエラーが出たので対処方法を残しておく。ファイルのパーミッションが原因で、接続可能なSSL証明書が定義されたcacerts.txtというファイルが読めなかったために発生したようだ。

BigQueryをpythonから利用する。
http://qiita.com/shibacow/items/b8f6445058b374291be5

Using OAuth 2.0 for Server to Server Applications
https://developers.google.com/api-client-library/python/auth/service-accounts

# 環境
OSX 10.10.3
Python 2.7.6
httplib2 0.9.1
google-api-python-client 1.4.1

# 事象
Google APIs Client Library for Python を利用し、P12ファイルを利用して、BigQueryを利用した際に、認証関係のエラーが生じAPIへのアクセスができなかった。

```
ssl.SSLError: [Errno 185090050] _ssl.c:343: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib
```

なお、実行したファイルは下記の通り。

```py:bq-access.py
import json
from httplib2 import Http
from oauth2client.client import SignedJwtAssertionCredentials
from apiclient.discovery import build

SERVICE_ACCOUNT_EMAIL = '**********@developer.gserviceaccount.com'
PROJECT_NUMBER = '**********'
KEYFILE='******************.p12'

with open(KEYFILE) as f:
  private_key = f.read()

credentials = SignedJwtAssertionCredentials(
    SERVICE_ACCOUNT_EMAIL, private_key,
    'https://www.googleapis.com/auth/bigquery')

http = Http()
credentials.authorize(http)

service = build('bigquery', 'v2', http=http)
response = service.datasets().list(projectId='************').execute()

print response
```

# 対処方法

下記のページがとても参考になった。

PYTHON OAUTH2 FAILING WITH X509 ERROR
http://bretthutley.com/tag/mac-osx/

http2libのcacerts.txtというファイルの権限に問題があるとのことなので調べてみると、確かにwheelというグループでないと読めないようになっていた。

```
> cd /Library/Python/2.7/site-packages/httplib2-0.9.1-py2.7.egg/httplib2/
> ls -l cacerts.txt
-rw-r-----  1 root  wheel  134862  7 13 18:36 cacerts.txt
```

従って、chmodコマンドでファイルの権限を下記の通り変更したところ、問題なくアクセスできるようになった。

```
> sudo chmod 644 cacerts.txt
```
端末のサイズを取得する

# 端末のサイズをプログラムで取得する場合

必要だけど、いろいろ取得方法がある。

## フルスクリーンの場合（ホームとかのナビゲーションボタンはあり）

```lang:filename
public static void init(Context cntxt,WindowManager wm){
        DisplayMetrics displaymetrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(displaymetrics);
        height = displaymetrics.heightPixels;
        width = displaymetrics.widthPixels;
}
```

これで取得

## 通常の場合（ステータスバーは出てる）

```lang:filename
public static void init(Context cntxt,WindowManager wm){
        DisplayMetrics displaymetrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(displaymetrics);
        height = displaymetrics.heightPixels-getStatusBarHeight(cntxt);
        width = displaymetrics.widthPixels;
}
public static int getStatusBarHeight(Context cntxt) {
	int result = 0;
        int resourceId = cntxt.getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = cntxt.getResources().getDimensionPixelSize(resourceId);
        }
        return result;
}
```

これで取得
MySQLのDateTime型のカラムに、Date型のクエリを投げる時は注意


## DateTime型にDate型のクエリを投げると、自動補完してくれる
datetime型にdate型のクエリを投げると、こんな感じのSQLを吐く

```
User.where(created_at: (Date.today)..(90.days.since.to_date)).to_sql
=> "SELECT `users`.* FROM `users`  WHERE (`users`.`created_at` BETWEEN '2015-07-16' AND '2015-10-14')"
```

MySQL側では、以下のように 00:00:00をつけた形で処理してくれる。

```
BETWEEN '2015-07-16 00:00:00' AND '2015-10-14 00:00:00'
```


## localtimeを使うと微妙にずれる
RailsではDBにすべてUTCで保存し、LocalTimeで処理するときは、内部的に復元して使うため、結果が微妙にずれる。

下記例では、いずれもTimeWithZoneに変換して実行

```
User.where(created_at: (Date.current.beginning_of_day)..(90.days.since.beginning_of_day)).to_sql
=> "SELECT `users`.* FROM `users`  WHERE (`users`.`created_at` BETWEEN '2015-07-15 15:00:00' AND '2015-10-13 15:00:00')"
```

## 型に合わせよう
とりあえず型に合わせるように、きちんと変換しておくか、すべてUTC前提で動いて行くと、困ったことにはならなそう。
UTC前提は結構大変なので、実際には変換しておくほうが現実的？

## 参考
http://blog.livedoor.jp/sasata299/archives/51858612.html
SwiftのProtocol Composition Typeについて

指定したすべてのprotocolを実装している型を表現する仕組み。
例えば、FooProtocolとBarProtocolを実装している型を指定したければこうすれば良いようだ。

```swift
let instance : protocol<FooProtocol, BarProtocol> = FooBar()
```

これ使うとシンプルに書けるところはぼちぼちありそうだなという所感。

ソース: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html#//apple_ref/doc/uid/TP40014097-CH31-ID454
Go言語のsliceのふるまいメモ


## 代入

`slice`の参照は
>
Sliceでは代入の際にポインタがわたされるので、データが共有されます。
[(Goでよく使用するデータ型)](http://dev.classmethod.jp/go/golang-7/)


とは言ったものの。。。ちょいちょいつまずくので普通の変数との比較の具体例でまとめてみました。

### 単純に

```go:sample1.go
...

type Hoge struct {
	HogeString string
}

func (h Hoge) Foo() {
	h.HogeString = "foo"
}

func main() {
	h1 := Hoge{HogeString: "h1string"}

	h1.Foo()

	spew.Dump(h1)
}
```

```結果
(main.Hoge) {
 HogeString: (string) (len=8) "h1string"
}
```

変わらないです。


### sliceのインデックス指定で

```go:sample2.go
...

type Hoges []Hoge

func (h Hoges) FooFirst() {
	h[0].HogeString = "foo"
}

func main() {
	var hs Hoges
	h1 := Hoge{HogeString: "h1string"}

	hs = append(hs, h1)
	hs.FooFirst()

	spew.Dump(hs)
}
```

```結果
(main.Hoges) (len=1 cap=1) {
 (main.Hoge) {
  HogeString: (string) (len=3) "foo"
 }
}
```

変わりました。なるほど。

### sliceをforでまわして

```go:sample3.go
...

func (h Hoges) FooAll() {
	for _, hoge := range h {
		hoge.HogeString = "foo"
	}
}

func main() {
	var hs Hoges
	h1 := Hoge{HogeString: "h1string"}

	hs = append(hs, h1)
	hs.FooAll()

	spew.Dump(hs)
}
```

```結果
(main.Hoges) (len=1 cap=1) {
 (main.Hoge) {
  HogeString: (string) (len=8) "h1string"
 }
}
```

変わらない。ポインタじゃない変数を介すと駄目？

### sliceをforでまわしてインデックスで

```go:sample4.go
...

func (h Hoges) FooAllByIndex() {
	for i := range h {
		h[i].HogeString = "foo"
	}
}

func main() {
	var hs Hoges
	h1 := Hoge{HogeString: "h1string"}

	hs = append(hs, h1)
	hs.FooAllByIndex()

	spew.Dump(hs)
}
```

```結果
(main.Hoges) (len=1 cap=1) {
 (main.Hoge) {
  HogeString: (string) (len=3) "foo"
 }
}
```

`sample3.go`でできたんだから当たり前か汗



## 関数の定義をポインタで

```go:sample5.go
...

func (h *Hoge) Bar() {
	h.HogeString = "bar"
}

func main() {
	h1 := Hoge{HogeString: "h1string"}

	h1.Bar()

	spew.Dump(h1)
}
```

```結果
(main.Hoge) {
 HogeString: (string) (len=3) "bar"
}
```

変わりました。なるほど。


## appendまわり

`append`は
>
Sliceと同じ型のSliceを返します。
[(Goでよく使用するデータ型)](http://dev.classmethod.jp/go/golang-7/)

具体的にやってみる。

### append されたやつは？

```go:sample6.go
...

func main() {
	var hs Hoges
	h1 := Hoge{HogeString: "h1string"}

	hs = append(hs, h1)
	hs.FooFirst()

	spew.Dump(h1)
	spew.Dump(hs)
}
```

```結果
(main.Hoge) {
 HogeString: (string) (len=8) "h1string"
}
(main.Hoges) (len=1 cap=1) {
 (main.Hoge) {
  HogeString: (string) (len=3) "foo"
 }
}
```

つまり、`hs`から`h1`を参照する術はない？

### ポインタのsliceに

```go:sample7.go
...

type PHoges []*Hoge

func (h PHoges) FooFirst() {
	h[0].HogeString = "foo"
}

func main() {
	var phs PHoges
	h1 := Hoge{HogeString: "h1string"}

	phs = append(phs, &h1)
	phs.FooFirst()

	spew.Dump(h1)
	spew.Dump(phs)
}
```

```結果
(main.Hoge) {
 HogeString: (string) (len=3) "foo"
}
(main.PHoges) (len=1 cap=1) {
 (*main.Hoge)(0x20821c6c0)({
  HogeString: (string) (len=3) "foo"
 })
}
```

おお。なるほど。


## ツール

### spew

[davecgh/go-spew](https://github.com/davecgh/go-spew)

とても便利です。
改定あり：Amazon API GatewayでAWS Lambda関数にクエリ文字列全体を・・・渡せなかった→渡せるっぽい！

**2015年8月25日追記：**
その後、Amazon API Gatewayのリファレンスが改定され、クエリ文字列全体を取得方法が示されました。ただし、形式（フォーマット）は微妙です。
詳しくは[API Gateway Mapping Template Reference - Amazon API Gateway](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)を参照のこと。

***

Amazon API Gatewayで受け取ったGETリクエストのクエリ文字列全体をAWS Lambdaの関数に渡したい、と思って調査してみましたが、調査時点（2015年7月15日）では残念ながら手段が見つかりませんでした。

公式フォーラム（[AWS Developer Forums: Amazon API Gateway](https://forums.aws.amazon.com/forum.jspa?forumID=199)）でも関連する投稿が多くありますが、残念ながら解決策は見当たりませんでした。今後の機能追加に期待。

# 参考にしたサイト

- [Day One with the Amazon API Gateway | Hiram Software Blog](https://blog.hiramsoftware.com/blog/day-one-aws-api-gateway/)
- [AWS Developer Forums: Documentation for $input](https://forums.aws.amazon.com/thread.jspa?threadID=192984)
- [AWS Developer Forums: Accessing header and query parameters in Lambda functions](https://forums.aws.amazon.com/thread.jspa?threadID=192601)
- [AWS Developer Forums: Access method in mapping templates](https://forums.aws.amazon.com/thread.jspa?threadID=196151)
- [AWS Developer Forums: Lambda + POST Request: Get Query Strings and Request Body w/o Models](https://forums.aws.amazon.com/thread.jspa?threadID=194794)
- [AWS Developer Forums: Passing a single query string param from a GET request to Lambda function](https://forums.aws.amazon.com/thread.jspa?threadID=195404)
c++ builder XE4, 10.2 Tokyo > TComboBox->Items へのカンマ区切り文字列による項目追加 > ComboBox1->Items->CommaText = L"AAA,BBB,CCC"

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

TComboBoxのItemsに"AAA,BBB,CCC"のような項目を追加するには、CommaTextを使えばよい。

```
ComboBox1->Items->CommaText = L"AAA,BBB,CCC";
```

Itemsに自分でカンマパースしたものをfor文で回しながら代入してなくてもよいのを知った。

### 10.2 Tokyo
(追記 2017/12/26)

```txt:動作環境
Rad Studio 10.2 Tokyo Update 2
```

10.2 Tokyoでも同じ動作となることを確認した。
CURLを使い、Laravelに擬似Ajaxリクエストを送る


小技メモ

通常のCURLリクエストでPOSTデータを送ると

```
curl -i \
   http://192.168.xxx.xxx/yyy
```

とかになります。

Laravel5にはRequestクラスというValidationを行ってくれる非常に便利なクラスがありますが、
Ajaxリクエスト向けに作った場合、CURLでテストをしようとすると、リダイレクトのViewが返却されてしまい、エラーメッセージが受け取れません。

そこで、こんなかんじにします。

```
curl -i \
	-H "X-Requested-With: XMLHttpRequest" \
   http://192.168.xxx.xxx/yyy
```

これで、擬似AJAXリクエストにすることができました。
Git for Windows 2.x インストーラ

Git for Windows はv1.9.5しかないと思っていたのですが、
[GitHub](https://github.com/git-for-windows/git/releases/)で開発版とはいえ2.xが配布されていたのですね。知りませんでした。

きっかけはこちらの[ブログ](http://opcdiary.net/?p=29683)から。


追記
公式サイトから新版がダウンロードできるようになりました。
ES6のarrow functionの引数の括弧は省略しないほうがいいかもしれない

ES6のarrow functionは高階関数をシンプルに書けて便利ですが、引数の個数が1個以外のときは、引数の括弧が省略できません。統一感を出すために、arrow functionの引数は必ず括弧で囲むようにした方がいいかもしれません…。


## 引数が1つの場合

```js
const list = [1, 2, 3];

// functionを使った書き方
list.map(function(a) { 
  return a * 2;
});

// arrow function
list.map((a) => { 
  return a * 2;
});

// arrow function(括弧を省略)
list.map(a => { 
  return a * 2;
});

// arrow function(ブレースとリターンを省略)
list.map((a) => a * 1);

// arrow function(括弧とブレースとリターンを省略)
list.map(a => a * 1);
```

## 引数が2つ以上の場合

```js
const list = [1, 2, 3];

// functionを使った書き方
list.reduce(function(acc, num) {
  return acc + num;
});

// arrow function
list.reduce((acc, num) => {
  return acc + num;
});

list.reduce((acc, num) => acc + num);

// 括弧は省略できない。省略するとaccがreduceの第一引数になってしまう。
list.reduce(acc, num => acc + num);
```

## 引数が0個の場合

```js
// functionを使った書き方
setTimeout(function(){
  console.log("done");
}, 10);

// arrow function
setTimeout(() => {
  console.log("done");
}, 10);

// 暗黙的にreturn console.log("done")と解釈されるので注意
setTimeout(() => console.log("done"), 10);

// 括弧は省略できない。syntax error
setTimeout(=> console.log("done"), 10);
```
cliで作ったキーペアを使えるようにしてみる


出力されたキーペアを使えるように整形してみる
余談ですが、僕はjqを練習する時サンプルを以下のサイトに流して練習しています。

[jqPlay](https://jqplay.org)

```json:Kye.pem

{
    "KeyMaterial": "RSA PRIVATE KEY", 
    "KeyName": "hogehogeKey", 
    "KeyFingerprint": "nagaimojiretu"
}

```

秘密鍵として保持したい内容は「KeyMaterial」の値である"RSA PRIVATE KEY"だけ。
秘密鍵の作成をすると上記のやたら長いJSONが標準出力で帰ってくるから整形してテキストフィアイルにリダイレクトしてあげれば使える。

```bash:サンプルコマンド
aws ec2 create-key-pair --key-name hogehogeKey | jq -r '.KeyMaterial' >> ./hoge.pem

```

こんな感じでファイルに出力して[chmod 400]すれば使える。
jq使ったけどこの程度ならフィルターオプションで持ってきた方が良いのかな？
[AngularJS][JavaScript] AngularJSアプリ開発を楽にするブラウザ拡張「ng-inspector」

以前にこんな記事を書きました。
[AngularJSアプリをブラウザのコンソールからデバッグする方法](http://qiita.com/sengoku/items/02029aad29cd7f5744bb)

いよいよコンソールからキーを打ち込むのがだるくなってきまして、何かないかと探したらとてもよいブラウザ拡張がありました。

[ng-inspector](http://ng-inspector.org/)です。

これをインストールすれば、ボタン一発でスコープの中身が見えます。
Chrome/Firefox/Safariに対応しています。すばらしい。

----

**2015/8/18追記**

Firefox 42(?)から、未署名のアドオンはインストールできなくなりました。

[about:config](about:config)を開いて、xpinstall.signatures.requiredをfalseにするとインストールできます。

----

使い方は簡単です。
[ng-inspector](http://ng-inspector.org/)へアクセスしてインストールしたら、メニューに追加されたボタンを一発押すだけです。
![ng-inspector1.JPG](https://qiita-image-store.s3.amazonaws.com/0/59475/d92ee9a4-91af-4c77-b024-c3833b79f00a.jpeg)

そうすると、ずらっとスコープのツリーが表示されます。
![ng-inspector2.JPG](https://qiita-image-store.s3.amazonaws.com/0/59475/a5aba435-b611-8ef4-1d94-d166e9af3c81.jpeg)

いえーい。 :laughing: 
楽ちん楽ちん。 :satisfied:
ちょと裏技っぽいけど、ESP8266 でAD変換やる方法


[開発環境の準備](http://qiita.com/azusa9/items/264165005aefaa3e8d7d)、[WiFiの接続](http://qiita.com/azusa9/items/7f78069cb09872cf6cbf)まで、出来たところでいきなりAD変換に行ってみたいと思います。
## ESP8266でのAD変換（概要）
ESP8266にはTOUTピンがあり、コレがAD変換できる唯一のピンのようです。
このピンは仕様書を読む限り、「電源電圧の測定」もしくは、「外部の適当な電圧の測定」が行える様です。
（英語に自信が無いので、間違っていたらゴメンなさい）

今回は、「外部の適当な電圧」の測定をやってみます。
**注意点が一つあります！**
**TOUTピンを使ったAD変換は、0v～1Vの範囲で10bitの分解能を持って計測する事ができる**とのこと

１V以上の電圧を入れると壊れるのかは試していませんが、電圧の計算ご注意下さい。
あと、今の所AD変換はArduinoっぽく使えないので、プログラムの所よく読んで下さい。


## 簡単な回路図
しょぼいですが、手書きの回路図です。抵抗で3.3Vの電源電圧を分圧しているだけですが・・
![DSC_1332-2.jpg](https://qiita-image-store.s3.amazonaws.com/0/77002/cafec0a0-64f3-e123-5005-c431b9efd76f.jpeg)

　
![DSC_1329.JPG](https://qiita-image-store.s3.amazonaws.com/0/77002/a1ba65d4-ae0d-87d7-9bfe-d7d9db647421.jpeg)
![DSC_1330.JPG](https://qiita-image-store.s3.amazonaws.com/0/77002/e255627c-978c-b2b5-ba6d-c1440b25d692.jpeg)



## プログラム

本来は、Arduinoっぽく、アナログリードと書きたいところですが今の時点では、アナログリードは実装されていない様子で上手く動きませんでした。
そこで、色々調べたら次のコードを使うと上手く動きました。
　

```
extern "C" {
#include "user_interface.h"
}
```
プログラムの始めESPのヘッダーファイルを読み込んでいる所に上記の記述を追加します。
　


```
system_adc_read()
```
そして、AD変換をするのはこの関数で出来るらしいです。
　


前回のWiFiのプログラムに書き足すと下記になります。

```Java:QiitaWiFi02
#include <ESP8266WiFi.h>
extern "C" {
#include "user_interface.h"
}

char toSSID[] = "XXXXXXX";
char ssidPASSWD[] = "YYYYYYYYYY";

void setup() {
  //デバッグ用にシリアルを開く
  Serial.begin(115200);
  Serial.println("PG start");

  //WiFiに繋がったらLEDを点灯させるので、そのピンをOUTPUTに設定して、LOWに。
  pinMode(5, OUTPUT);
  digitalWrite(5, LOW);

  //WiFiクライアントモード設定
  WiFi.mode(WIFI_STA);

  //WiFiを繋ぐ前に、WiFi状態をシリアルに出力
  WiFi.printDiag(Serial);

  //WiFiの設定を入れる。IPは、デフォルトがDHCPのようで、IPが共有されるときはWiFiのアクセス情報だけでOK
  WiFi.begin(toSSID, ssidPASSWD);

  // 固定IPではネットワークステータスが上手く動かないので、今は使えなさそう。本家にバグ登録はされているらしい。
  //  WiFi.config(ip, gateway, subnet);

  //接続が確立するまで、・・・を表示
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");

    //WiFi.printDiag(Serial);

  }

  //ここに来たら、接続完了している。

  //改行して繋がったことをシリアルで伝える。
  Serial.println("");
  Serial.println("WiFi connected");

  //WiFiの状態を表示
  WiFi.printDiag(Serial);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // 無線LAN接続OK LED点灯
  digitalWrite(5, HIGH);


}

void loop() {

  //unsigned int 型の入れ物を用意
  uint ADC_Value = 0;

  //AD変換実行
  ADC_Value = system_adc_read();

  //計測結果をシリアルに書き出す。0-1024の値
  Serial.println("=======ANALOG " + String(ADC_Value) + "ANALOG ");


  if (WiFi.status() != WL_CONNECTED) {
    // コネクション確立済み以外のステータスなので
    // 無線LAN接続NG LED消灯
    digitalWrite(5, LOW);
  } else {
    //コネクションOKなので、点灯
    digitalWrite(5, HIGH );
  }

  delay(500);

}

```

このプログラムを実行すると、こんな感じにシリアルにAD変換した値が流れてきます。
![analog-read.jpg](https://qiita-image-store.s3.amazonaws.com/0/77002/a5421e15-afe6-5238-b04c-810aaca9c6f0.jpeg)



電源の電圧を測るコマンドは何か調べられていませんが、分かったらこの記事に書き足したいと思います。


## 次にやろうと思っている事
[ESP8266の真骨頂？！　ディープスリープモードへ突入する仕方、復帰するやり方](http://qiita.com/azusa9/items/65a5c3772c41631b5ca1)
です。お楽しみに～


またハマりどころを、下記に順次まとめています。あわせてこちらもご覧下さい。（随時更新中なので、ストックしてもらえれば更新時に通知させてもらいます）
http://qiita.com/azusa9/items/fe20794aa858a73fd97b
コンテナーの幅より広がったエリアをcalcでつくる 


![calc.png](https://qiita-image-store.s3.amazonaws.com/0/21225/bcb183b2-3315-ea87-bd53-860fd62073da.png)

タイトルがなんともわかりづらいけど、キャプチャのような表現をする話。

記事の**引用**とか**コード**の表現でこういう見た目にしたいことがある。
やり方は色々あるけど、これをCSSの`calc()`でやってみる。

記事全体を包括している親要素の幅が決まっていて、一部のブロック、セクションだけ左右ぶち抜きたい。

マークアップとCSSはこんな感じ。

```html
<article class="entry"><!-- width: 44em; -->
  <h1 class="entry-title">セロ弾きのゴーシュ</h1>
  <div class="entry-body">
    <p>...</p>
    <div class="dialogue"><!-- ぶち抜きたいところ -->
      <p>...</p>
    </div>
    <p>...</p>
  </div>
</article>
```

```css
.entry {
  margin-left: auto;
  margin-right: auto;
  width: 44em;
}
```

## ここでCalc()

先にCSSを公開。

```css
.dialogue {
  box-sizing: border-box;
  margin-left: calc(((100vw - 44rem) / 2) * -1);
  margin-right: calc(((100vw - 44rem) / 2) * -1);
  padding: 1.5em calc((100vw - 44rem) / 2);
  background-color: #345;
  color: #F9F8F7;
}
```

[calc()](http://www.w3.org/TR/css3-values/#calc-notation)は、CSSで四則演算が使える関数。すごいのは単位が異なっても計算できること。対応ブラウザはIE9以上、他最近のものであれば[たいてい使える](http://caniuse.com/#search=calc)。ただAndroidに関しては4.4以上というのがちょっと残念。
この単位を越えて計算できるのを今回は利用している。
追記：*1

## 計算内容

```css
.dialogue {
  margin-left: calc(((100vw - 100%) / 2) * -1);
  margin-right: calc(((100vw - 100%) / 2) * -1);
}
```

考えたのは、コンテナーの左右の幅をどう算出するか。
それを算出するためには、**ページ幅（viewport幅）からコンテナー幅を引く**。
ページ幅は`vw` = viewport width で出す。幅全体なので`100vw`。
そこからコンテナー幅を引く。つまり、`(100vw - 100%)`。

これで左右余白の幅は出せた。今回の例ではネガティブマージンで左右をぶちぬくようにするので、左右それぞれの幅を出す。
これは単純に等分で割るだけ。つまり、`((100vw - 100%) / 2)`。
かつネガティブマージンなので負の値にする。`(((100vw - 100%) / 2) * -1)`。
あと中央に寄せるために。左右のpaddingも同じようにつくる。
これで出来上がり。

結果は後述のCodepenで。

追記：*2

## Codepen

http://codepen.io/hiloki/pen/bdKQQG

## あとがき


今回の例だと、44rem以下のサイズになったときの考慮を何もしてないので、実際にはメディアクエリでどうこうとかもしないとイマイチ。


コメントにいただいた方法で、コンテナ幅の計算を44remじゃなくて100%にした。感謝。

## 追記

1. "Safari & iOS Safari (both 6 and 7) does not support viewport units (vw, vh, etc) in calc()."ということで、これらでは今回の方法はダメ
2. `44rem`を`100%`に。
3. 横スクロールバー対策として、`body`に`overflow-x:hidden`だけどもっと良い方法ありそう。
COXO® DB-686 歯科光重合レジン照射器

本製品は歯科専用高出力のレジン照射器です。本体の形状は特別な形状で手触りが良く、防滑にも役立ちます。レジン固化、照明二つの機能を持ち、照射口の先端は３６０度回転できますゆえ、実際の操作が一層便利になります。
レジン照射時間は5s～40sまで設定できます。また照射には弱いモードと強いモードも用意しています。

![9225097_orig.jpg](https://qiita-image-store.s3.amazonaws.com/0/77721/887217d4-e775-bc41-9600-ea076f10ad9b.jpeg)
![20150425144654.jpg](https://qiita-image-store.s3.amazonaws.com/0/77721/bfe128b0-84d8-506c-4894-02d350344ffa.jpeg)

主な仕様：
電圧：100～240V　50～60Hz
照射出力：≥1200mw/cm²
波長：420～480nm
照度：≥25000Lux
色温度：5000～6500K
https://www.dentalzz.com/category-15-b0-%E6%AD%AF%E7%A7%91%E9%87%8D%E5%90%88%E7%94%A8%E5%85%89%E7%85%A7%E5%B0%84%E5%99%A8.html
golang の進捗どうですか

[「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるClojure](http://qiita.com/esehara@github/items/c57cafa57aa92dc1e3c2)
[「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム](http://elephnote.com/blog/archives/936)
[「進捗・どう・です・か」をHaskellで書いてみた](http://qiita.com/lotz/items/b47913cb27052cf9e127)

乗るしかない！このビッグウェーブに！！１

[shinchoku-doudesuka](https://github.com/mattn/shinchoku-doudesuka)

```go
package main

import (
	"fmt"
	"math/rand"
	"time"
)

type word int

const (
	進捗 word = iota
	どう
	です
	か
)

func main() {
	rand.Seed(time.Now().UnixNano())
	n := 0
	var w word
	for {
		n++
		s := word(rand.Intn(4))
		fmt.Print(s)
		if w != s {
			if s == 0 {
				w = 1
			} else {
				w = 0
			}
		} else {
			w++
			if w == 4 {
				break
			}
		}
	}
	fmt.Println(`
 ＿人人人人人人人＿
 ＞進捗どうですか＜
 ￣Y^Y^Y^Y^Y^Y^Y￣`)
	fmt.Printf("%d回で煽られました\n", n)
}
```

```
$ go get github.com/mattn/shinchoku-doudesuka
$ shinchoku-doudesuka
```

```
ですか進捗どうか進捗どう進捗進捗ですどうですですかかどうですどうどうかですかですどう進捗進捗進捗どうかどうどうどうですですですどうどうかですですかですかです進捗どうですですか進捗かかですどうどうですですどうか進捗ですですか進捗かかどう進捗ですどうどうです進捗進捗進捗ですですどう進捗かかかですですです進捗ですですどう進捗ですですどうですどうですです進捗ですかですかかどうですかかですですですですかですかかかかどうですですどうかです進捗どうですですか進捗進捗かどう進捗ですです進捗進捗どう進捗です進捗かです進捗かですですか進捗どうかかかですか進捗進捗ですかかかですかどうどうです進捗どうどう進捗か進捗かですですですどう進捗どうかです進捗進捗ですですかです進捗かどうか進捗です進捗進捗ですどう進捗か進捗どうどうですどうかかか進捗ですかどう進捗かかどう進捗か進捗かですかかかどうです進捗どうか進捗どう進捗ですですどうどうかかどう進捗進捗ですです進捗どうかどうどうです進捗進捗進捗どう進捗進捗かどう進捗ですかですどうどうどうどうどう進捗ですどうどう進捗かどうかですどうかです進捗どう進捗どうですか
 ＿人人人人人人人＿
 ＞進捗どうですか＜
 ￣Y^Y^Y^Y^Y^Y^Y￣
283回で煽られました
```
フロントエンド微調整にkiritoriが便利

# kiritori

画面を部分的にキャプチャして付箋みたいに使えるmacアプリ

http://kiritori.ruhenheim.org/

# フロントエンド実装の"答え合わせ"に

PSDなどから切り取ったものをブラウザに重ねてmarginとか確認。透過の調整もできる。

![Screen Shot 2014-09-19 at 12.32.16 PM.png](https://qiita-image-store.s3.amazonaws.com/1417/14782/cc2226a1-835c-217f-e836-4d9b975c03ba.png "Screen Shot 2014-09-19 at 12.32.16 PM.png")
【Kibana】リバプロ使ってElasticsearchに簡単にアクセスする


外部からKibanaにアクセスしたい時に、Kibana3は標準設定だと、クライアントからElasticsearchに直接通信(default:9200)するが、それは避けたいというケースが多いと思う。
※FWとかで制限している環境だと、9200とか開けたくないですよねという話です！

なので、下記のような感じでリバプロでkibanaとElasticsearchにアクセスする簡単な手順

##イメージ

下記のような構成にする。
クライアントは、下記でkibanaにアクセスするイメージ

【ダミー】http://y.y.y.y/kibana3/


```
【client】
※Kibanaの画面 y.y.y.y:80/kibana3/
※kibanaでのグラフ描画時のアクセス y.y.y.y:80/es/
  ↓
【Apache(y.y.y.y:80)】
※y.y.y.y:80/es/ →x.x.x.x:9200にリバプロする
  ↓
【Elasticseach(x.x.x.x:9200)】


```

##Apahce

kibanaをホストするVirtualHostディレクティブに下記を追加

```
ProxyPass /es/ http://x.x.x.x:9200/
ProxyPassReverse /es/ http://x.x.x.x:9200/
```

##kibana
kibanaがアクセスするElasticseachをリバプロ設定しているパスに変更する。(y.y.y.y:8080/es/のようにスタティックで書いてもよいがグローバルIP振って更に上でNATしているようなケースもあるのでhostnameは動的に取得する下記の方が便利)

```config.js
elasticsearch: "http://"+window.location.hostname+":80/es/",
```

##Elasticseach

1.4以降の場合は、クロスドメインアクセスを許可する下記の設定が入っているか確認する。

```elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "/.*/"
```
これ入ってないと下記のようなエラーが出る。。。。

![Kibana_3.png](https://qiita-image-store.s3.amazonaws.com/0/40850/e21968e8-0096-0b27-8888-38fe34448adb.png "Kibana_3.png")

簡単ですが一応シェア！
Mac 上で Vagrant を使って CentOS6 + nginx + PHP5.5 をセットアップ


nginx と PHP5 を利用したく、Vagrant ではありますが環境構築しましたので、メモしておきます。

※ 下記記事の焼き直しです。
http://qiita.com/hmukaida/items/8836a96ce5cbe88019b7

# 参考
[Vagrant体験入門ハンズオン手順 - 2014/04/24 DevLove関西](http://qiita.com/shin1x1/items/3288d9de7f04192b6ad8 "Vagrant体験入門ハンズオン手順 - 2014/04/24 DevLove関西")

# 事前準備
* 上記の参考より、VirtualBox と Vagrant をインストールしてください。

# Vagrant 基本セットアップ

自分の環境でのメモ踏まえて記載してまいります。
OS は CentOS6.5を採用します。まずはディレクトリを作成して、対象の box を追加します。

```
$ mkdir CentOS65
$ cd centOS65
$ vagrant box add CentOS65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
```

ここで box の list を確認します。「CentOS65」あります。

```
$ vagrant box list
CentOS65 (virtualbox, 0)
```
次に初期設定にて Vagrantfile を生成します。

```
$ vagrant init CentOS65
$ ls
Vagrantfile
```

# Shell を使って各種インストール

ここで Vagrantfile を編集します。

* 1) yum update
* 2) NTP 設定
* 3)timezone 設定
* 4)nginx for centos6 インストール
* 5)php5.5 インストール

```
  # SHELL
  config.vm.provision "shell", inline: <<-EOT
        # 1) yum update
        sudo yum -y update

        # 2) NTP
        sudo yum -y install ntp
        cp -a /vagrant/ntp.conf /etc/ntp.conf
        /sbin/service ntpd restart
        /sbin/chkconfig ntpd on

        # 3)timezone
        cp -p /usr/share/zoneinfo/Japan /etc/localtime
        # iptables off
        /sbin/iptables -F
        /sbin/service iptables stop
        /sbin/chkconfig iptables off

        # 4)nginx for centos6
        rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
        sudo yum -y install nginx
        cp -a /vagrant/default.conf /etc/nginx/conf.d/default.conf
        /sbin/service nginx restart
        /sbin/chkconfig nginx on

        # 5)php5.5
        sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
        sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
        sudo yum -y install php php-pdo php-mysql php-mbstring php-xml --enablerepo=remi-php55

  EOT
```

## /vagrant/ntp.conf

ntp.conf は下記の通り変更しています。

```
server -4 ntp.nict.jp
server -4 ntp1.jst.mfeed.ad.jp
server -4 ntp2.jst.mfeed.ad.jp
server -4 ntp3.jst.mfeed.ad.jp
```

## /vagrant/default.conf

nginx の conf ファイルはまだ変更していませんが、ここにオリジナルの設定を記載しておきます。


# 仮想環境再起動

```
$ vagrant reload
```
プロビジョニングを実施します。

```
$ vagrant provision
```
ブラウザで [http://192.168.33.10](http://192.168.33.10)にアクセスし、nginx の Welcome ページが表示されれば成功です。

```
$ open http://192.168.33.10
```

動作検証が甘いですが、加筆修正あれば随時致します。


# 参考2
インストール面では下記参考にさせていただきました。ありがとうございました。

* http://qiita.com/utano320/items/0c0d9b84a9a28525bcb9
* http://qiita.com/ddss/items/1d321d2e716fde4920a2
libgdx + Kotlin で開発する（セットアップ編)

##まえがき
javaよりいろいろと便利ということで、kotlinを触ってみたい欲が。
android系の記事はいっぱいあるのと、個人的に今ゲーム作ってるので、
libGDX+Kotlinの人柱になろうと。。。
あとでLiGDXをダウンロードした状態からKotlinで動くようになったものを
githubにあげます。
あげました!(2015/7/15)
https://github.com/kamedon/LibGdxKotlinSample

##手順
1.libGDXを通常通りにインストール
https://github.com/libgdx/libgdx/wiki/Project-Setup-Gradle

2./build.gradleにkotlinを追加
既存の部分は変更しません。追加だけです。追加修正分（+のところ）だけ書きます。
本家の手順を参考にしました
http://kotlinlang.org/docs/reference/using-gradle.html

```diff 
buildscript {
    dependencies {
+　 　　 classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:+'
    }
}
project(":android") {
    dependencies {
+       compile 'org.jetbrains.kotlin:kotlin-stdlib:+'
    }
}
project(":ios") {
    apply plugin: "java"
+   apply plugin: "kotlin"
}

project(":core") {
    apply plugin: "java"
+   apply plugin: "kotlin"

    dependencies {
+        compile 'org.jetbrains.kotlin:kotlin-stdlib:+'
    }
}
```

3./core/build.gradleにkotlinを追加
ここも追加のみです

```diff
  apply plugin: "java"
+ apply plugin: "kotlin"
```

4./android/build.gradleにkotlinを追加

```diff
+ apply plugin: 'kotlin-android'
```

これで、gradle関係の設定は終わりです。
coreのほうでもkotlinつかえるようになります。
ide関係は、kotlinの記事と同じなのでそちらを参考に。。

iosでも動くらしいです。僕はmac持ってないから試せないー
部分テンプレートがわかった！

```rb
<div class="question_content top_content">
  <header class="question_header">
    <div class="question_image icon_image" style="background-image: url(<%= question.user.avatar.url(:medium) %>);"></div>
    <div class="question_user_info user_info">
      <span><%= link_to question.user.name, user_path(question.user) %></span>
      <time><%= time_ago_in_words question.created_at %></time>
    </div>
  </header>
  <div class="question_body">
    <div class="question_box">
      <span class="q">Q</span>
      <span class="question_text"><%= question.text %></span>
    </div>
  </div>
</div>
```
このコードで<%= question.text %>がどこから来ているのかわからなかったが、それが判明したのでまとめておく。

```rb
<%= render partial: "questions/question", collection: @questions %>
```
ここである。"questions/question"はディレクトリ名/ファイル名かつCollectionで定義した変数の値となっている。したがって@questionsという値が、questionという変数になっているのだ。
進捗どうですかブーム?にrubyでのっかってみる

# 経緯

進捗どうですかブームらしい
[「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるClojure](http://qiita.com/esehara@github/items/c57cafa57aa92dc1e3c2)
[「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム](http://elephnote.com/blog/archives/936)
[「進捗・どう・です・か」をHaskellで書いてみた](http://qiita.com/lotz/items/b47913cb27052cf9e127)

さらに友人が

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるClojure on <a href="https://twitter.com/Qiita">@Qiita</a> <a href="http://t.co/Ruj0BfVEXu">http://t.co/Ruj0BfVEXu</a>&#10;&#10;Rubyで書きたくなったけど院試勉強してるので我慢…</p>&mdash; 院死 (@mpyw) <a href="https://twitter.com/mpyw/status/621214031144054784">2015, 7月 15</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

とか言ったので代わりに自分(Ruby初心者)がやってみることにした

# ソースコード

```rb:sintyoku.rb
#-*-encoding:utf-8-*-      

c,dic = 0,%w(進捗 どう です か)
last_num,sortc = 4,0
loop do
        print m=dic.sample
        num = dic.find_index(m)
        sortc = num > last_num ? sortc+1 : 0;
        last_num = num
        c += m.length
        break if sortc == 3
end
print "???\n", c, "文字で煽られました\n"

```


# 実行結果


```
$ ruby sintyoku.rb
か進捗か進捗どうどうか進捗進捗進捗か進捗か進捗ですかどう進捗進捗どうどうどうです進捗進捗か進捗か進捗ですどうどうかどうですかどうですですです進捗か進捗進捗ですですですか進捗ですどう進捗どうですですどうですどうかです進捗どう進捗どう進捗かです進捗進捗進捗です進捗進捗進捗か進捗ですどうですかかかですどう進捗です進捗ですか進捗進捗進捗か進捗かですどうか進捗ですどうどう進捗進捗ですですかか進捗どう進捗どうですですですどうですどうかですどうかかどうどうか進捗どうかですどうです進捗です進捗かどうどうかかどうです進捗か進捗進捗ですかかかどう進捗かかですです進捗どうかですですかどうです進捗かかですかどう進捗どうですですかか進捗かかどう進捗かですですですですどうです進捗ですかかですどう進捗進捗進捗ですどうか進捗か進捗どうかです進捗どうどうどうどうかどうかですどうですかかかですかか進捗どうです進捗です進捗進捗どうかかかどうですです進捗どう進捗進捗ですどう進捗進捗どうどうかか進捗どうか進捗どうかですかどうですですかどう進捗かどう進捗かどう進捗です進捗です進捗進捗かかです進捗です進捗どうどうかかかどうどうどう進捗ですどう進捗どうか進捗ですどう進捗か進捗かか進捗進捗かどうですかです進捗進捗進捗進捗進捗進捗ですどうどうですかどうです進捗どうかですですですかどう進捗進捗どうかですですかかどうどう進捗かか進捗ですどうどうですです進捗か進捗進捗進捗かどうどうどう進捗どうか進捗どうかですどうか進捗進捗ですどうどう進捗進捗か進捗です進捗進捗進捗か進捗どうです進捗進捗進捗か進捗ですか進捗です進捗かです進捗ですかどうです進捗どうですですかです進捗か進捗進捗進捗どうどうかですどうか進捗です進捗です進捗です進捗かですかですですですどうかですかですどう進捗かどうか進捗どうかどう進捗進捗進捗どうどう進捗かですかかどうですですどう進捗どう進捗です進捗か進捗どうどう進捗進捗進捗かか進捗どうですですどうですかです進捗進捗どう進捗どうどうどうかです進捗ですかかか進捗進捗どう進捗どうかかどうかですかですどうどう進捗ですどうですですですですどうかですかか進捗進捗かかどうですかか進捗進捗ですですかです進捗進捗ですどうどうかかどうかどうかか進捗です進捗か進捗進捗どうか進捗ですですどうどうどうどうですどうかかです進捗どうですどうですどうですですどうどうどう進捗ですどうかです進捗ですですですどう進捗どう進捗どう進捗どうどうどう進捗進捗どうどうどう進捗どうです進捗ですですですどうかですかどう進捗進捗ですどうどう進捗進捗どうです進捗どうですか???
1104文字で煽られました

```

# あとがき

ruby初心者ではこんなクソコードでしか無理だったので、もうちょっとrubyっぽくできたらな。上級者の人よろしくお願いします(投げやり)

最後に
![sintyoku.jpg](https://qiita-image-store.s3.amazonaws.com/0/42927/7a9600d8-27b0-5288-f456-64d77c44c996.jpeg)
unwind segueで画面が閉じられるのをキャンセルする

unwind segueを使わずに **self.dismissViewControllerAnimated(true, completion: nil)** を閉じたいところで呼べばいいんだけど、なるべくコーディングを統一したかったので下記のようにしてみた。

```lang:swift
override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool
{
    if identifier == nil
    {
        if self._isFlg
        {
            // 画面を閉じずになんらかの処理をする    
            return false
        }
    }
    return true
}
```
先月発表されたgolang製オブジェクトストレージサーバー「minio」を簡単に使ってみる。

> 2015/10/20現在、この記事のminioはバージョンが古く機能・性能等が変わっております。
> あまりアテにせず参考程度に留めてください。
> 詳しくは[github.com/minio/minio](https://github.com/minio/minio)を参照ください。

最近のWeb開発だとAmazonS3が便利過ぎて手放せませんよね。
アップロードして貰う画像やファイルなんかも、ローカルに置くと管理やバックアップが大変です・・・
気になる外向け転送量もnginx+リバースプロキシを間に噛ませるとお得に使えますし。

ただ面倒なのが開発環境です。
実際に開発環境で作業やテスト等をするとS3にアップされちゃうので、
ローカル開発用としてサクッと起動出来るS3互換オブジェクトストレージを探していた所[minio](https://www.minio.io/)というアプリケーションに行き当たりました。

## 使ってみる
公式サイトの方を読んでみるとすぐに分かるんですが

``公式より転載``

```
LinuxOS用
$ wget https://dl.minio.io:9000/updates/2015/Jun/linux-amd64/minio
$ chmod +x minio
$ ./minio mode memory limit 12GB expire 2h
```

と、たったこれだけで9000番ポートでオブジェクトストレージが立ち上がります。
オブジェクトの保存方法として

- memory (メモリー保存)
- fs     (ファイル保存)
- donut  (分からないです、検索してもミニドーナッツ記事しか・・・)

の三種類があります。

## 各動作モードについて

### ```mode memory```
必須パラメータとして ```limit [memory量]```を指定しましょう。
オプションとして```expire```もあるようです。

### ```mode fs```
必須パラメータとして```mode fs```の後にファイルを保存するディレクトリを指定しましょう。

## 動作速度について
ローカル開発だとそこまで気にならないですが、一応簡単に確認しておきました。
動作環境はMacBookPro Virtualbox上のCentoS6.6 １コア256MBと、リソースを絞り気味です。
mode fsで動作をさせています。

### アップロード
1.5KBのファイルを100個同期アップロードさせた所、大体6秒程で完了しました。
2.5MBのファイルを1個アップロードさせた所、0.2秒程で完了。

小さなファイルを大量にアップする場合は非同期でアップしたい所ですが、
同期アップロードでCPU使用率が70%程になっているので諦めました。

### GETアクセスによる負荷耐久テスト
対象は1.5kbのcomposer.json君

```
% boom -c 100 -n 10000 http://192.168.33.101:9000/static/composer.json
Summary:
  Total:	13.5443 secs.
  Slowest:	0.6527 secs.
  Fastest:	0.0160 secs.
  Average:	0.1349 secs.
  Requests/sec:	738.3162
  Total Data Received:	10730000 bytes.
  Response Size per Request:	1073 bytes.

Status code distribution:
  [200]	10000 responses

Response time histogram:
  0.016 [1]	|
  0.080 [1029]	|∎∎∎∎∎∎∎
  0.143 [5836]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.207 [2304]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.271 [525]	|∎∎∎
  0.334 [132]	|
  0.398 [50]	|
  0.462 [50]	|
  0.525 [48]	|
  0.589 [20]	|
  0.653 [5]	|

Latency distribution:
  10% in 0.0790 secs.
  25% in 0.0987 secs.
  50% in 0.1235 secs.
  75% in 0.1520 secs.
  90% in 0.1969 secs.
  95% in 0.2350 secs.
  99% in 0.4476 secs.
```

h2oでも試してみたのですが、直接静的ファイルにアクセスする場合1400req/s。
minio単体でもh2oの半分位のパフォーマンスが得られました。

## 総評
インストール・起動が非常に楽で、動作も非常に軽快です。
安定性等の検証は出来ませんでしたが、少なくともローカル開発用としては申し分無いと思います。
動作させるのにリソースも殆ど必要無いので、vagrant上での開発だとS3の代替として役立つのではないでしょうか。
クライアントライブラリもJava,NodeJS,Golang,Pythonと出ています。

残念ながら僕の使っているPHPではまだクライアントがありませんでした。
AWS-SDK-PHPからの使い方も分からない為、今後ライブラリの登場を待ちましょう。

## 追記
golangのminioライブラリの使い方がわかりやすくに書かれているサイトがありましたので紹介。
[オブジェクトストレージ Minio を使ってみる | Jedipunkz's Blog](http://jedipunkz.github.io/blog/2015/06/25/minio/)
jsで絵文字を判定する


Nodeもブラウザも

```js
"😆<hello!".match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g)

// ["😆"]
```

[2015/07/16]追記
これだと、絵文字以外も弾いてしまうので不完全。
（詳しくはコメント欄参照）
Optionalを使ってEbeanでupsert

upsertで書いた方が実装がすっきりして、仕様もわかりやすくなるというケースがあり、Ebeanでも疑似的にupsertするやり方のメモです。Java7での案件のためGuavaのOptionalを使ってますが、Java8のOptionalでも大丈夫なはずです。

### Ebeanのsaveメソッド

公式サイトにあるように、Ebeanのsaveはbeanの状態に応じて、insert or update　してくれます。ひらたくいうと、フェッチ後のやつはupdateしてくれるようです。
http://www.avaje.org/ebean/introsavedelete.html

そこで、Optionalを組み合わせて、「問い合わせて存在すればfetchしたもの、なければnewしてつくったもの」としてbeanを作れば、saveメソッドに任せられることになります。

### サンプルコード

```lang:User.java

public class User extends Model {

   @Id
   private long id

   private String name 

   private boolean admin

   /* getter,setterは省略 */  

   public static Finder<Long, User> find = new Finder<Long,User>(Long.class, User.class);

}

```

指定したIDでupsertするには下記のようにします。

```

long id = 1234L;
// finderで問い合わせたものをOptionalでかぶせる。ないときはnewで生成したものになる
User user = Optional.fromNullable(User.find.byId(id)).or(new User());　
user.setId(id); // newしたときは空なのでセット
user.setName("hogehoge")
user.setAdmin(true);
user.save();

```
Gitでローカルのfeatureブランチをお掃除

# 目的
GitHub等でPull Requestがマージされた後、リモートブランチは適宜削除されるケースが多いが、ローカルブランチは残ったままになる。
例えばこんな状況。

```
$ git branch
  feature-fix_A
  feature-add_B
  feature-modify_C
  feature-revert_D
* master
```

全てのfeatureブランチに対して `git branch -d feature-***` とかやるのは面倒。

# 方法

極めて普通で当たり前の解決方法ですが、以下のようにコマンドをパイプでつなげば簡単に一括削除できます。

`$ git branch | grep feature | xargs git branch -d`

リモートにpushしていないブランチがある場合はご注意を。

---

※追記
自分用メモのつもりでしたが、下記コメント欄にもっと有用な情報をいただいたので、そちらもご参照いただければと思います。
jsでデザインパターン勉強メモ (初心者向け)

![s_51CwEu+wxfL._SX389_BO1,204,203,200_.jpg](https://qiita-image-store.s3.amazonaws.com/0/76843/472674a2-f991-6b12-c710-d4848a557f40.jpeg)


□JavaScriptデザインパターン
http://www.amazon.co.jp/JavaScript%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-Addy-Osmani/dp/487311618X

噂の名著で勉強中です、、
とりあえず二つ理解

# 1,コンストラクタパターン

いつものクラスつくるやつだ。。

```js:filename

var Dog = function(aType, aName){
	this.name = aName;
	this.type = aType;
}
Dog.prototype.run = function(){
	console.log(this.name + "が走った！");
}

var pochi = new Dog("ダックスフンド", "ぽち");
pochi.run();
```

# 2,モジュールパターン

クロージャとやらを使ってjsでカプセル化を実現してるわけすね。。
下記の場合だとreturn の中がpublicになるという浅い理解

□クロージャは、理解するよりも作るほうが簡単
http://dqn.sakusakutto.jp/2009/01/javascript_4.html

```js:filename
var countModule = function(){

	// ここがprivateに
	var _counter = 0;

	// リターンの中がpublicに
	return {
		increment: function(){
			return ++_counter;
		},
		reset: function(){
			_counter = 0;
		},
		show: function(){
			console.log(_counter);
		}
	}

};

var counter = new countModule();

console.log(counter._counter); // これundefined プライベートなのでアクセスできない

counter.show();   // 0
hoge.increment();
counter.show();   // 1
```



つづく、、、？
gulp-sass で sourcemap を使う

[gulp-sourcemaps](https://github.com/floridoo/gulp-sourcemaps) を使って、マップファイルを外部出力して、css を minify するところまで 3 ステップでやってみます。

前提とするディレクトリ構成とパッケージはこんな感じです。

```
├── gulpfile.js
├── package.json
├── dist
│   └── css
│       └── main.css
└── src
    └── scss
        ├── _module.scss
        └── main.scss
```

```package.json
{
  "devDependencies": {
    "gulp": "^3.9.0",
    "gulp-minify-css": "^1.2.0",
    "gulp-sass": "^2.0.4",
    "gulp-sourcemaps": "^1.5.2"
  }
}
```

※gulp-sass の 2.0.3 以前のバージョンでは、windows 環境でのソースマップの出力に不具合があるようなので、windows 環境でうまくいかない場合はバージョンを上げてみましょう。

### 1. インライン出力

css ファイルにマッピング情報が追記されます。

```gulpfile.js
var gulp       = require('gulp');
var sass       = require('gulp-sass');
var sourcemaps = require('gulp-sourcemaps');

/* sass task */
gulp.task('sass', function() {
  return gulp.src('src/scss/**/*.scss')
    .pipe(sourcemaps.init())
    .pipe(sass())
    .pipe(sourcemaps.write())
    .pipe(gulp.dest('dist/css/'));
});
```

### 2. 外部ファイル出力

インライン出力だと css ファイルの容量が増えるのが気になるので、外部ファイルに出力します。

```gulpfile.js
var gulp       = require('gulp');
var sass       = require('gulp-sass');
var sourcemaps = require('gulp-sourcemaps');

/* sass task */
gulp.task('sass', function() {
  return gulp.src('src/scss/**/*.scss')
    .pipe(sourcemaps.init())
    .pipe(sass())
    .pipe(sourcemaps.write('../maps')) // マップファイルを出力するパスを指定します
    .pipe(gulp.dest('dist/css/'));
});
```

### 3. css を minify する

css を minify します。
gulp-sass のオプションで`outputStyle: 'compressed'`を指定すればいいような気もしますが、`compressed`にするとなぜかソースマップのマッピングがずれてしまうようなので、別途`gulp-minify-css`を使用して minify します。

また、`gulp-minify-css`でセレクタがマージされた際にもマッピングがずれるようなので、オプションで`advanced:false`を追加しています。

```gulpfile.js
var gulp       = require('gulp');
var sass       = require('gulp-sass');
var sourcemaps = require('gulp-sourcemaps');
var minifyCss  = require('gulp-minify-css'); // gulp-minify-css を追加

/* sass task */
gulp.task('sass', function() {
  return gulp.src('src/scss/**/*.scss')
    .pipe(sourcemaps.init())
    .pipe(sass({
      // outputStyle: 'compressed'
    }))
    .pipe(minifyCss({advanced:false})) // minify
    .pipe(sourcemaps.write('../maps'))
    .pipe(gulp.dest('dist/css/'));
});
```

## まとめ

手元の環境ではこれでとりあえずソースマップが使えるようになりました。
ただ、`compressed`にするとずれる問題などはどこに原因があるのかわかっていない状態で回避していますので、もっといいやり方などあればぜひコメントで教えてください。
Ansible - 「ec2.py」で取得できる変数について  

Ansible Dinamic Inventoryで使用する「ec2.py」で取得できる変数の一覧のメモ

### 「ec2.py」で取得できる変数の一覧
- ec2_ami_launch_index
- ec2_architecture
- ec2_association
- ec2_attachTime
- ec2_attachment
- ec2_attachmentId
- ec2_client_token
- ec2_deleteOnTermination
- ec2_description
- ec2_deviceIndex
- ec2_dns_name
- ec2_eventsSet
- ec2_group_name
- ec2_hypervisor
- ec2_id
- ec2_image_id
- ec2_instanceState
- ec2_instance_type
- ec2_ipOwnerId
- ec2_ip_address
- ec2_item
- ec2_kernel
- ec2_key_name
- ec2_launch_time
- ec2_monitored
- ec2_monitoring
- ec2_networkInterfaceId
- ec2_ownerId
- ec2_persistent
- ec2_placement
- ec2_platform
- ec2_previous_state
- ec2_private_dns_name
- ec2_private_ip_address
- ec2_publicIp
- ec2_public_dns_name
- ec2_ramdisk
- ec2_reason
- ec2_region
- ec2_requester_id
- ec2_root_device_name
- ec2_root_device_type
- ec2_security_group_ids
- ec2_security_group_names
- ec2_shutdown_state
- ec2_sourceDestCheck
- ec2_spot_instance_request_id
- ec2_state
- ec2_state_code
- ec2_state_reason
- ec2_status
- ec2_subnet_id
- ec2_tenancy
- ec2_virtualization_type
- ec2_vpc_id

### 変数の値の確認方法
```
ec2.py --host <IP>
```

### 参考
http://docs.ansible.com/intro_dynamic_inventory.html
golangでimport文を書くときのルール

import文はグループに分けて書くと整理しやすい

```go
import (
  // 標準ライブラリ

  // aws, gooleappengineなどプラットフォームに依存するライブラリ

  // サードパーティライブラリまたは、内製のライブラリ

  // proto等ジェネレーターで生成されたコード
)
```
【Google Analytics】メールの開封数を取得する方法

# 参考URL
http://waterlow2013.hatenablog.com/entry/2015/03/01/075321
https://developers.google.com/analytics/devguides/collection/protocol/v1/email#document-path
https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide?hl=ja
# 前提
htmlメールである事
# 目的
Google Analytics上で開封結果を管理したい
# 差し込みタグ
```<img src="https://www.google-analytics.com/collect?v=1&tid={{TID}}&cid=555&t=pageview&dh={{hostname}}&dt={{title}}&dp={{page}}" />
```
# パラメーター
## Page Tracking
```
v=1             // Version.
&tid=UA-XXXX-Y  // Tracking ID / Property ID.
&cid=555        // Anonymous Client ID.
&t=pageview     // Pageview hit type.
&dh=mydemo.com  // Document hostname.
&dp=/home       // Page.
&dt=homepage    // Title.
```
## Event Tracking
```
v=1             // Version.
&tid=UA-XXXX-Y  // Tracking ID / Property ID.
&cid=555        // Anonymous Client ID.
&t=event        // Event hit type
&ec=video       // Event Category. Required.
&ea=play        // Event Action. Required.
&el=holiday     // Event label.
&ev=300         // Event value.
```
Slack便利な使い方まとめ（未読にする方法など）


## チャンネル移動のショートカット
チャンネル名を入力すれば、任意のチャンネル、DM、グループに素早く移動できる。

<b>Command(Ctrl) + K</b>

![スクリーンショット 2015-07-16 10.35.07.png](https://qiita-image-store.s3.amazonaws.com/0/18614/0c9a4ba3-5164-5732-6853-6d3cbfba7dc1.png "スクリーンショット 2015-07-16 10.35.07.png")

### チャンネル上下移動
<b>option(Alt) + ↑ or ↓</b>




## 右メニューのショートカット

### メニューの開閉

Command(Ctrl) + .

### Star一覧の表示
Command(Ctrl) + Shift + s


### 自分宛のメンション一覧を表示

Command(Ctrl) + Shift + m

## メッセージのショートカット
任意のメッセージを未読にする。

<b>option(Alt) + クリック</b>

## 既読にする方法
Escキー


## 直近のメッセージを編集
↑キー

## メッセージの装飾

### 1. 太字
`*slack*`のように\*で囲む。
<b>slack</b>


### 2. 引用

#### 一行だけ引用

`>`を行頭に追加すると引用風になる。
> このように引用風になります。



#### 改行を維持したまま引用 

段落の頭に```>>>```をつけると以下のように改行も含めて引用になる。

> 
このように引用になります。

> 改行も維持されます。

### 3. コード表記
背景色と枠付きの表記になる。

#### インライン表記
\`slack\`のように\`で囲うと`slack`のようにインライン表示される。



#### ブロック表記
\`\`\`slack\`\`\` のように\`\`\`で囲うと段落も含めたコード表記ができる。

```
背景色と枠付きの表記になります。

改行も維持されます。
```
jodaのDateTimeのソート


```scala

object Joda {
    implicit def dateTimeOrdering: Ordering[DateTime] = Ordering.fromLessThan(_ isBefore _)
}

// elsewhere
import Joda._
dateTimes.sorted
```

### ついでにDefault Timezone
JodaのTimezoneはJDKのを見てて、JDKはOSのを見てて、というJAVAが知らない人の調査結果です。
CoreOSでetcdのdiscoveryサービスの簡単な立ち上げ方

# etcd

CoreOSといえば、クラスタリング。
そのクラスタリングの中核といえば、etcdとfleetですが。

普通、etcdのdiscoveryサービスといえば、https://discovery.etcd.io で済ましてしまうかローカルでUbuntuやCentOSで作る、とかよく書いてあります。
でも、色々あってローカルネットワークで完結させたい、という要求はあると思うのですが。
Ubuntu等で立てるとなると、GitHubから取ってきて…、ってな話になります。
面倒くさいので、もっと簡単に済ましてしまいましょう。

# 簡単にetcdのディスカバリーサーバーを作る

## CoreOSで作ってしまう

CoreOS用なのだからCoreOSで作ってしまえばいいじゃない、というわけで。
その作り方。

## discoveryを設定せずにetcdを立ち上げる

な…何を言っているのかわからねーと思うが、 俺も何をされたのかわからなかった…

さて。
通常、cloud-configはcoreos.etcd.discoveryを記述するわけですが。
あえてdiscoveryを抜いて

```yaml:cloud-config.yml
coreos:
  etcd:
    addr: $private_ipv4:4001
    peer-addr: $private_ipv4:7001
```

こう書く。
すると、etcdはとりあえず立ち上がってエンドポイントは生きてる状態になる、と。
サーバーの出来上がり。
で、その他のクラスタリングするマシンはこのマシンを目掛けてdiscoveryする、ということ。

```yaml:cloud-config.yml
coreos:
  etcd:
    discovery: http://192.168.1.1:4001/v2/keys/machines
    addr: $private_ipv4:4001
    peer-addr: $private_ipv4:7001
```

こんな感じ。
ローカルなので、もう、IP直で。

どうですか？簡単でしょう？
CocosBuilderについてのメモ書き

# CocosBuilderって？

cocos2d-xでUIを作るためのツール
FlashライクなGUIでスマホ向けゲームのUIを作成できる

**ただし本家の開発が止まっている**

現在はSpriteBuilderという後継のツールが開発されているが、こちらはcocos2d-xで使うためのものでなく、cocos2d for iphoneにて使うものなので、cocos2d-xでの開発では使用できない

現在(2015/7/16時点)は[こちら](https://code.google.com/p/cocosbuilder/)からDLできる
体系的　webアプリケーションの作り方

#クッキー出力にまつわる脆弱性

以下の２種類に分別される
①クッキーを利用すべきでない目的でクッキーを使っている
②クッキーの出力方法に問題がある

①クッキーにデータを保存しないほうが良い理由

![スクリーンショット 2015-07-16 09.28.44.png](https://qiita-image-store.s3.amazonaws.com/0/84382/212a696b-bebf-dd78-3102-0094962c01b7.png)


➡クッキーでできてセッション変数でできないことは**情報の寿命の制御**, **異なるサーバーとの情報共有** だけです。　なので通常はセッション変数を利用すべき。

#クッキーのセキュア属性不備

影響　・・HTTPS通信を利用し、かつ認証のあるページすべて　（これらはなりすましによって）
対策・・・クッキーにセキュア属性をつける、セッションIDとは別にセキュア属性付のクッキーとして
トークンを発行し、ページごとにトークンを確認する。

トークンにより安全性が確保できる理由

①トークンは認証成功時に一度だけサーバーから出力される
②トークンはHTTPSのページで生成される（サーバー➡ブラウザ）
③トークンは確実に暗号化されてブラウザから送信（ブラウザ➡サーバー）
④HTTPSのページを閲覧するにはトークンが必須

#メール送信の問題

①メールヘッダ・インジェクション脆弱性
➡メールメッセージの宛先や件名などヘッダフィールドに改行を挿入することにより、新たなフィールドを追加したり、本文を改ざんすること

対策　外部からのパラメータをメールヘッダに含ませないようにする
②hiddenパラメータによる宛先保持
➡hiddenパラメータの送信先アドレスを任意アドレスに変更することにより、迷惑メールの送信に悪用される
③メールサーバーによる第三者中継
➡メールサーバーの設定に問題があると発信者でもない、受信者でもない第三者を中継する可能性がある。http://www.rbl.jp/
CocosBuilderでJavaScriptの機能を切る

ちょっとハマったのでメモ書き

CocosBuilderを起動してプロジェクトを新規作成します
[File]-[New]-[New Project]でOKです

![01_新規作成.png](https://qiita-image-store.s3.amazonaws.com/0/8350/cd9cef4c-66a0-3d2a-05d9-3eaedbdd542c.png)

こんな感じのバタ臭い画面が出てきます
この時デフォルトだとJavaScriptの機能がONになっていてC++で開発したい時にぐぬぬってなります

[File]-[Project Settings]をクリック

![02_JS切る.png](https://qiita-image-store.s3.amazonaws.com/0/8350/cb98a4f9-7c22-9e50-e550-7425f7bd57b6.png)

JavaScript based projectのチェックを外します

**実はこれだけでは不十分でもう一箇所JavaScriptの設定が隠れています**

[Document]-[JavaScript Controlled]をクリックしてチェックを外しておきます

これでOK