OmniAICreator/Qiita-1.07M huggingface dataset:
MacのSSH接続でPermission denied (publickey)が出た時のおまじない

##エラー

```
Permission denied (publickey)
```

###とりあえずパーミッションを600に

```
chmod 600  ~/.ssh/id_rsa
```

###MacでSSH設定したときのおまじない

```
ssh-add -K ~/.ssh/id_rsa
```

####ssh keyを複数作った場合、登録を行わないと使えない
Gebでマルチプラットフォーム環境のテスト実装案

※少し冗長だけど、あくまで一案ということで。

# 環境
* Geb
* Spock
* Gradle

# やりたい事
* **PCサイト（Chrome）** と **スマホサイト（Chrome Emulator）** の自動テストを作成
* PageObjectはPCとスマホで独立して作成するが、**テストケース（Spec）はPCとスマホで共通のコードを使い回したい**

# 前提
スクリプト構成は下記の通り

```
src
　└ test
　　　└ groovy
　　　　　├ testcase
　　　　　│　・ExampleSpec.groovy
　　　　　└ page
　　　　　　　├ pc
　　　　　　　│　・LoginPage.groovy
　　　　　　　└ smartphone
　　　　　　　　 ・LoginPage.groovy
```

* **ExampleSpec.groovy** はPCとスマホで共通
* **LoginPage.groovy** はPCとスマホで別ファイル

# 実装
## PageObjectクラス
パッケージで環境ごとに名前空間を分ける

```groovy:page/pc/LoginPage.groovy
package page.pc
import geb.Page

class LoginPage extends Page {

    static at = { title.startsWith("ログイン") }
    static content = { }

    void login(String username, String password) { }
}
```

```groovy:page/smartphone/LoginPage.groovy
package page.smartphone
import geb.Page

class LoginPage extends Page {

    static at = { title.startsWith("ログイン") }
    static content = { }

    void login(String username, String password) { }
}
```

# Factoryクラス
* 環境による分岐をFactoryクラスで吸収  
 ※`geb.env`プロパティに環境の値が設定されていると過程
* `LoginPageFactory.get()`で環境ごとのクラスが取得できる

```groovy:page/factory/LoginPageFactory.groovy
package page.factory

class LoginPageFactory {

    public static def get() {
        switch(System.getProperty("geb.env")) {
            case "pc":
                return page.pc.LoginPage
                break
            case "smartphone":
                return page.smartphone.LoginPage
                break
        }
    }
}
```


## TestCaseクラス

* Pageクラス自体はインポートせずにFactoryクラスをインポート
* Pageクラスを取得したい場合はFactoryクラスに定義された`get()`メソッドを使う

```groovy:testcase/ExampleSpec.groovy
package testcase

import framework.GebConfigReportingSpec
import page.factory.TopPageFactory

class ExampleSpec extends GebReportingSpec {

    def "ログイン後にトップページに遷移すること"() {
        when: "ログインする"
        LoginPageFactory.get().login(browser, user.username, user.password)

        then: "タイトルが正しいことを確認する"
        assert title == "マイページ - TOP"
    }
}
```

# テストの実行方法
```bash
gradle clean test --tests testcase.ExampleSpec -Dgeb.env=pc
```
【iOS】弱参照(weak)ってなんぞや！？


`弱参照(weak)`がよく分からなかったので調べました。

　`弱参照(weak)`を理解するためには、それなりに**いくらか知識が必要**で、他の記事にはたくさんの説明があってなにがなんだか分からなくない。おそらくみなさんもそうだったはず。
　なので、すごく簡単にまとめます。


## weak(弱参照)とは
　Swiftでは、コンバイル時に`参照カウント`の増減を自動でやってくれて(`ARC`)、処理の記述漏れによる`メモリリーク`をほとんどのケースで気にせずにコーディングできる。
　この参照カウントの増減を自動でやってくれる参照が `強参照(strong)` で、デフォルトでは**クラスのインスタンスは**強参照になる。
　しかし、関連のある複数のクラスのインスタンス同士をお互いに強参照で保持すると、 `循環参照` となりメモリリークする場合があるため、循環参照をさけるために使う1つの方法が**弱参照(weak)**。(もう1つの方法はアンオウンド参照(unowned)だがここでは説明しない。)
　
#### 例:
外部のオブジェクトを保持して、外部のオブジェクトに対して通知を行うdelegateに関しては、循環参照がおきてしまいメモリリークする場合があるから `弱参照(weak)` で保持する必要がある。



## さいごに
弱参照(weak)を理解するために、知っておきたいワードをいくつかあげます。(以下ワードを理解できれば、この記事を理解できるはずです)

· 参照渡し
· ガーベージコレクション
· メモリリーク
· 参照カウンター
· ARC(Automatic Reference Counting)
· 循環参照
電子回路 > 抵抗 / コンデンサ / コイル > VとIの位相

電気回路のVやIを計算するときに出てくるもの

- 抵抗
- コンデンサ
- コイル

それぞれのVを基準としたとき、Iの位相が90度進んでいたり、遅れていたり、一致していたりとなる。

http://cgi.inv.co.jp/~denken/library/chap2/1-2-1-2-2.pdf

本としては「電気・電子回路計算法　入門講座 by 浅川毅」に掲載されている。

混乱しやすそうなのは、コンデンサとコイル、どちらがIの位相が進む/遅れるのだったか?

#覚え方
ここで、無理やりの覚え方。

コイル > 記号Lで表す > Lの垂直をVにとったとき、Lの水平がIになる > Iは90度位相が遅れている

以上でLはIの位相が90度遅れるイメージが思い出しやすくなる。

こじつけ大事！


<hr>
（追記: 2015/07/02)
http://qiita.com/7of9/items/c8e3e8ca61a54c81f741
infer を導入して Android プロジェクトをコード解析してみた


Facebook が 静的コード解析ツール [infer](https://github.com/facebook/infer) を公開しました。

[公式ページ](http://fbinfer.com/) を参考に導入して、試しに Android プロジェクトを解析してみました。

## 導入

github の [リリースページ](https://github.com/facebook/infer/releases) から、使用している OS 別にファイルをダウンロードします。

ここでは Mac OS X 用の `infer-osx-v0.1.0.tar.xz` を使います。この記事の公開時点での最新バージョンは `version 0.1.0` です。

![Screen Shot 2015-06-16 at 11.59.29.png](https://qiita-image-store.s3.amazonaws.com/0/35834/3434b9e2-3e40-a52d-8a74-c5c16228ffe2.png "Screen Shot 2015-06-16 at 11.59.29.png")

ダウンロードした `infer-osx-v0.1.0.tar.xz` を展開します。

展開すると `infer-osx-v0.1.0/` ディレクトリが出来ます。

```
$ ~ ls
$ ~ infer-osx-v0.1.0.tar.xz
$ ~
$ ~ tar xf infer-osx-v0.1.0.tar.xz
$ ~
$ ~ ls
$ ~ infer-osx-v0.1.0.tar.xz        infer-osx-v0.1.0
```

`infer-osx-v0.1.0/infer/infer/bin` にパスを通します。各自の環境に合わせてください。

```
export INFER=~/infer-osx-v0.1.0/infer/infer/bin
export PATH=$INFER:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH
```

これで導入は完了です。

## コード解析

[Hello world Android](http://fbinfer.com/docs/hello-world.html#hello-world-android) を参考に、新規作成した Android プロジェクトをコード解析してみます。

```
$ ~ cd SampleInfer/
$ SampleInfer
$ SampleInfer infer -- ./gradlew clean build
Starting analysis (Infer version v0.1.0)
Analysis done

5 files analyzed


No issues found
$ SampleInfer
```

コード解析に成功し、問題ないことを確認できました。

## 問題点

現在、Butterknife などアノテーションを付与してクラスを生成するようなライブラリを使用しているプロジェクトに対してコード解析を行うと怒られます。

試しに、新規作成した Android プロジェクトに Butterknife を用いてイカのようなコードにします。

```java:MainActivity.java
package com.sample.infer.sampleinfer;

import butterknife.InjectView;

public class MainActivity extends AppCompatActivity {

    @InjectView(R.id.textview)
    protected TextView textView;
```

この状態でコード解析すると

```
$ ~ cd SampleInfer/
$ SampleInfer infer -- ./gradlew clean build
Fatal error: exception Invalid_argument("Error : com.sample.infer.sampleinfer.MainActivity$$ViewInjector is not a valid name for a class")
$ SampleInfer
```

と、生成された `MainActivity$$ViewInjector` クラスの名前に引っかかるようです。

github には issue が立っているので対応を待ちましょう。

[Support java classnames with $$ #3](https://github.com/facebook/infer/issues/3)

以上です。
iOSで push通知をするための Provisioning Profileの設定関連 で 実機インストールをしようとするとビルドがうまくいかない。


下記のリンクにそって設定。
http://www.lancork.net/2013/08/how-to-ios-push-first/

設定した自分はエラーにならなかったが、もう一人の開発者の Xcode で下記のようなエラー

`error: Embedded binary is not signed with the same certificate as the parent app. Verify the embedded binary target's code sign settings match the parent app's.`

環境設定 > アカウント > `HOGE TEMA ACOUNT` > 詳細 > リロードアイコン

こちらで provisioning Profile を更新してから、

Build Settings > provisioning Profile　を上記リンクで設定したものに更新。

こちらでうまくいった。
VirtualBoxへのCentOS 6.6のインストール

# VirtualBoxへのCentOS 6.6のインストール
**VirtualBox** へ **CentOS 6.6** をインストールする際の流れと仮想マシンの設定のまとめ。
## CentOS のISOイメージ取得
### CentOS 6.6 のISOイメージ(minimal)のダウンロード
下記URLへアクセスし、「Actual Country」のいずれかのURLをクリックしてisoファイルをダウンロード。
http://isoredirect.centos.org/centos/6/isos/x86_64/CentOS-6.6-x86_64-minimal.iso
![centos1.png](https://qiita-image-store.s3.amazonaws.com/0/15175/2699ff12-4cb1-81c8-baed-82d76ae996bb.png)

http://mirror.centos.org/centos/6/isos/x86_64/

## 仮想マシンの作成と設定
### 仮想マシンの作成
**VirtualBox** を起動し、ツールバーの「新規(N)」ボタンを押すか、`Ctrl`+`N`で「仮想マシンの作成」ダイアログを表示。
![virtualbox1.png](https://qiita-image-store.s3.amazonaws.com/0/15175/52b18aff-6974-b678-50f5-2fea2c736b96.png)
「名前とオペレーティングシステム」の「名前(N):」欄に `Cen` と入力すると「タイプ(T):」欄と「バージョン(V):」欄の値がそれぞれ「Linux」「Red Hat (64 bit)」に自動で切り替わる。名前はそのまま続けて `CentOS 6.6` と入力。
「メモリーサイズ(M)」は512MBになっているが、「システムが 652MB 以下のメモリーしか持たない場合自動的にテキストモードが使用される」[^1]ので、1024MBを指定。

[^1]: https://wiki.centos.org/Manuals/ReleaseNotes/CentOS6.0/Japanese#line-51

### 仮想マシンの設定
`Ctrl`+`S`で「仮想マシンの設定」ダイアログを表示。
#### システム
使用しないので「起動順序(B):」の「フロッピー」のチェックを外す。
#### ストレージ
「ストレージツリー(S)」の「空」を選択、「属性」のCD-ROMアイコンをクリックし、「仮想CD/DVDディスクファイルの選択…」を選択。
ファイル選択用のダイアログが表示されるので最初にダウンロードしたisoファイルを選択。
#### オーディオ
使用しないので「オーディオを有効化(A)」のチェックを外す。
#### ネットワーク
「アダプター 2」タブを開き、「ネットワークアダプターを有効化(E)」をチェック。
「割り当て(A):」のプルダウンメニューから「ホストオンリーアダプター」を選択。
#### USB
使用しないので「USBコントローラーを有効化(U)」のチェックを外す。

すべての設定が終わったら右下の「OK」ボタンを押す。

## CentOS のインストール
「起動(T)」で仮想マシンを起動し、インストールを開始。
詳細は別投稿で。

## Guest Additions のインストール
VirtualBox Guest Additions をゲストOSのCentOSにインストールする。
詳細は[CentOS 6.6 に Guest Additions をインストールする - Qiita](http://qiita.com/bezeklik/items/05f945bca96715f13bf5)を参照。
電子回路 > 利得 > 電圧利得と電流利得の係数が20の理由

利得というのがある。電流利得、電圧利得は係数が20で、電力利得の係数は10。

覚えにくい。

http://denk.pipin.jp/riron/densi/ritoku.html
を参考に以下のように考えてみた。

<hr>
#覚えること(2点)

覚えておくのは以下の式と「利得は I*V で計算する」だけ。

```math
    L_B = 10 log_{10} \frac{B}{A} [dB] --- (1)
```
ここでL_Bは基準値Aに対するBのデシベル値

ちなみにI*Vは電力です。


#電力利得

I1 * V1とI2* V2を比較するので、(1)式をそのまま使えばいい。
つまり、電力利得の係数は10。

#電圧利得
I1 * V1とI2 * V2を比較する。
ただし、ここでは電圧V1とV2の比較とするため、I1, I2を変形する。

I1 = V1 / R
I2 = V2 / R
(Rは共通)

I1 * V1 = (V1 / R) * V1
I2 * V2 = (V2 / R) * V2

両者を比較すると、log_10の比較部分が2乗となるので、2がlog_10の前に出せる。
つまりは、電圧利得では係数は20となる。

#電流利得
考え方は電圧利得と同じ。
I1 * V1をI1とRの式に、I2 * V2をI2のI2とRの式にする。

I1 * V1 = I1 * (I1 * R)
I2 * V2 = I2 * (I2 * R)

両者を比較すると、log_10の比較部分が2乗となるので、2がlog_10の前に出せる。
つまりは、電流利得では係数は20となる。

#覚えやすさ
上記により２つのことだけ覚えればよくなった。

電流利得は20、電圧利得は20、電力利得は10、と機械的に覚えるよりは、上記のような理屈の方が自分にとっては覚えやすい。
[Swift] iOS でプッシュ通知の有効・無効を判定する


iOS8 以降とそれ以外で使用する API が異なります。プッシュ通知を許可しているかどうかを判定するメソッドをつくってみました。

```
class var isPushNotificationEnable: Bool {
        let osVersion = UIDevice.currentDevice().systemVersion
        if osVersion < "8.0" {
            let types = UIApplication.sharedApplication().enabledRemoteNotificationTypes()
            if types == UIRemoteNotificationType.None {
                // push notification disabled
                return false
            }else{
                // push notification enable
                return true
            }
        }else{
            if UIApplication.sharedApplication().isRegisteredForRemoteNotifications() {
                // push notification enable
                return true
            }else{
                // push notification disabled
                return false
            }
        }
    }
```

# おまけ - アプリの設定画面に飛ぶ

プッシュ通知が無効だった場合、ダイアログで"「設定->通知」から有効にしてください" など表示しているアプリがありますが、
使っている側からすると、わざわざホーム画面に戻って設定画面まで行くなんてやらないですよね。

iOS8 からはプログラムで自分のアプリの設定画面に飛べるので、

1. アプリのプッシュ通知が無効になっているかチェックする
2. 無効になっていたら「よかったら有効にしてね」という("OK","Cancel"の)ダイアログ表示
3. ユーザーが "OK" を選択したらアプリの設定画面にプログラムで遷移

がいいとアプローチだと思います。

そのサンプルコードはこちら。

```
class func openAppSettingPage() -> Void {
        let application = UIApplication.sharedApplication()
        let osVersion = UIDevice.currentDevice().systemVersion
        if osVersion < "8.0" {
            // not supported
        }else{
            let url = NSURL(string:UIApplicationOpenSettingsURLString)!
            UIApplication.sharedApplication().openURL(url)
        }
}
```

プッシュ通知ができるとユーザーにリーチできる機会が圧倒的に増えるので許可してもらえるような導線になるよう気をつけたいところです。
chef memo - vol1

# recipeを明示的に指定して実行
-o でOK
```
knife solo cook <host> -o hello::default
```

「,」で複数指定もできる

```
knife solo cook <host> -o hello::default, nginx::default
```



# env を指定して実行
-E ${env名}

```
knife solo cook <host>  -E dev

```

# env を指定し、confファイルも指定して、さらにレシピも指定
```
knife solo cook <host> -c <conf> -o hoge::piyo -E dev
```


# 最後に
knife solo のコマンド例を記載していますが、昨今は「Knife-Zero/chef-zero」なるものがでてるみたいですね。。
Nginx基礎 ログ 設定いろは

# アクセスログ（とか）をTSVにしてみる
apacheとかと同じですね。log_formatにcommon（なんでもいい）という名前を付けてそれを出力したいログに対して設定しています。
ちなみに以下では「http_x_forwarded_for」などカスタムヘッダも出力する設定です。

```
log_format common '$remote_addr\t-\t$remote_user\t[$time_local]\t'
                    '"$request"\t$status\t$body_bytes_sent\t'
                    '"$http_referer"\t"$http_user_agent"\t$http_x_forwarded_for\t$request_time';

```


```
    location /hoge {
        access_log  /var/log/nginx/site_hoge/access.log common;
        error_log   /var/log/nginx/site_hoge/error.log;

        proxy_pass  http://xxxxx;
    }
```

# 404をエラーとしない
デフォルトだと404のアクセスログ＋エラーログが出力され無駄？なエラーログが増えてしまいます。
```
    location / {
        log_not_found off;
    }
```

# アクセスログださない

```
    location / {
        access_log off;
    }
```

# 反映

設定変更がおわったらお決まりの serviceのreload もしくは restartをしてあげて完了です。（# servcie nginx reload)
Python基礎 dictのソート順



# おもむろにDict をprint

```
$ python 
>>> a = {}
>>> a["b"] = 1
>>> a["d"] = 2
>>> a["c"] = 3
>>> a["a"] = 4
>>> print a
{'a': 4, 'c': 3, 'b': 1, 'd': 2}
```
→ばらばらですね。。

# list はどうだろう
```
$ python 
>>> a = []
>>> a.append(1)
>>> a.append(2)
>>> a.append(3)
>>> a.append(4)
>>> a.append(9)
>>> a.append(8)
>>> print a
[1, 2, 3, 4, 9, 8]
```
→これはOKみたい。

# Dictを登録した順で使いたんだけど。。
## OrderedDict というものが有るらしい！
```
$ python 
>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d["b"] = 1
>>> d["d"] = 2
>>> d["c"] = 3
>>> d["a"] = 4
>>> print d
OrderedDict([('b', 1), ('d', 2), ('c', 3), ('a', 4)])
```
→できてますね。


# まとめ
pythonだとあまり意識しないところ？ですが、こんな癖がありました。という共有まで。

参考）
http://docs.python.jp/2/tutorial/datastructures.html#tut-dictionaries
＞辞書は順序付けのされていない キー(key): 値(value) のペアの集合であり...
OX X Yosemitでnokogiriのインストールに失敗する

# エラー内容

~~~
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/sonixasia/.rbenv/versions/2.1.1/bin/ruby -r ./siteconf20150616-8439-1az1apz.rb extconf.rb --with-iconv-dir=/usr/local/Cellar/libiconv/1.14/
checking if the C compiler accepts ... yes
checking if the C compiler accepts -Wno-error=unused-command-line-argument-hard-error-in-future... no
Building nokogiri using system libraries.
libxml2 version 2.6.21 or later is required!
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
~~~

# 解決策

参考: http://stackoverflow.com/questions/5528839/why-does-installing-nokogiri-on-mac-os-fail-with-libiconv-is-missing


bundle/configの設定で、nokogiriのversionと`--with-iconv-dir`を指定するとインストールできた。1.6.1以外のバージョンだとうまくいかなかった。


~~~
# xxx.gemspec
...
  gem.add_dependency 'nokogiri', '~> 1.6'
~~~

~~~ruby
# ~/.bundle/config
---
BUNDLE_JOBS: '4'
BUNDLE_GEM__COC: '0'
BUNDLE_GEM__MIT: '0'
BUNDLE_GEM__TEST: 'false'
BUNDLE_BUILD__NOKOGIRI: "-v 1.6.1 --with-iconv-dir=/usr/local/Cellar/libiconv/1.14/"
~~~
wireshark で mysql の query を眺める

# wireshark で mysql の query を眺める

`redis-cli monitor` みたいなことができると嬉しい。

wireshark が mysql のプロトコルに対応してるみたいなので、
Filter に `mysql and tcp.dstport eq 3306` って指定してやると、投げたクエリが抽出できる。

長すぎると表示が [truncated] ってなって削られてしまうので、

* hexのペインで見る
* 右クリック -> Copy -> Value でクリップボードに入る

のどっちかで確認するとよいと思う。

![Screenshot from 2015-06-16 11:07:32.png](https://qiita-image-store.s3.amazonaws.com/0/41925/674e3df0-bfcb-8206-38c4-e5dcf1b6d5d9.png)
ngRepeatでカスタムフィルタリング後の配列（オブジェクト）の件数を表示する方法

絞り込み検索のロジックを作成していてわかったのでメモ。
最初はカスタムフィルター内でangular.forEach()のループ中にカウントを取ろうと思ったんですけど、何か美しくないなと思って調べたらあった。

```html:filteredDataにフィルタリング後のデータを保持させlengthで取得
<p>{{ filteredData.length }}件</p>
<ul>
  <li data-ng-repeat="data in filteredData = (array | customFilter: フィルターに渡す条件等)">
    {{ data.〜〜 }}
  </li>
</ul>
```

すごいぞ！Angular！＼(^o^)／
ngRepeatディレクティブが本当にすてきだ。私は検索ロジックを作っていたので、条件用のformをフィルターに渡す条件にそのまま渡してフィルタリングをかけました。
linux 実行中の自プロセス名称取得


char prg_name[64];
char prg_path[256];

readlink( "/proc/self/exe", prg_path, sizeof(prg_path) );
sprintf( prg_name, ”%s”, basename(prg_path) );

readlink　でパスを取得し、basename によってプロセス名以外のものを取り除く。
vitualenvでpythonのバージョン指定する


pythonでCUIプログラム書いててサーバ上で動かないなーと調べたらローカルのpythonのバージョンと違ってたというオチがあったので備忘録

## 使い方

```
sudo pip install virtualenv
# 2.6を指定する
virtualenv -p python2.6 test
```


リンク
https://virtualenv.pypa.io/en/latest/index.html
自社管理外のサーバの状況を調べるときのコマンド

自社管理外のサーバの状況を調べるときに、先輩から教えてもらったのでまとめます。
WEBサーバについて調べる必要があったので、そちらを想定しています。
何にしても「・・・と推測される」という情報にとどまるので、情報を得ておくということが大事かもしれません。

* DNSの確認
* ネットワークの確認
* httpヘッダーの確認（WEBサーバの種類等）

## DNSの確認

与えられたFQDN(仮にwww.example.co.jpとして)から調べていきます。
digコマンドで、

* ネームサーバはどこか
* IPはどこか
* 逆引き設定はどうなっているか

を確認できます。

### ネームサーバはどこか

```
$ dig NS example.co.jp
```

### IPはどこか

設定によってAレコードではなくCNAMEが返ってくることもあります。こちらでIPがわかります。

```
$ dig A www.example.co.jp
```

### 逆引きを調べる。

前記のAレコードの応答で 0.0.0.0 が返ってきたとして、以下のように調べ物をします。

```
$ dig -x 0.0.0.0
```

## ネットワークの確認

Aレコードで調べたものから http://whois.nic.ad.jp/cgi-bin/whois_gw このURLのJPNIC whoisを使用してIPを調べます。

こちらで

* IPの割り当て状況
* IPのレンジがどのように割り当てられているか
    * 共用サーバか専用サーバか 等の推測がもしかしたらできる

がわかります。 

## HTTPヘッダーの確認

WEBサーバに何を使用しているか等を確認できます。
(通常apacheだと使用しているサーバを隠す設定をしているのででないかもしれません。)

### wgetを利用する

```
$ wget -S --spider www.example.co.jp
```

結果(IPとFQDNを変更しています。)

```
Spider mode enabled. Check if remote file exists.
--2015-06-16 10:25:35--  http://www.example.co.jp/
Resolving www.example.co.jp (www.example.co.jp)... 0.0.0.0
Connecting to www.example.co.jp (www.example.co.jp)|0.0.0.0|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Tue, 16 Jun 2015 01:25:35 GMT
  Server: Apache/2.4.6 (CentOS) PHP/5.4.16 Phusion_Passenger/5.0.6
  Last-Modified: Sun, 06 Apr 2014 13:01:21 GMT
  ETag: "8de-4f65f58eb8a40"
  Accept-Ranges: bytes
  Content-Length: 2270
  Keep-Alive: timeout=5, max=100
  Connection: Keep-Alive
  Content-Type: text/html; charset=UTF-8
Length: 2270 (2.2K) [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.
```

### curl を使用する

```
$ curl --head www.example.co.jp
```

結果(IPとFQDNを変更しています。)

```
HTTP/1.1 200 OK
Date: Tue, 16 Jun 2015 01:29:44 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16 Phusion_Passenger/5.0.6
Last-Modified: Sun, 06 Apr 2014 13:01:21 GMT
ETag: "aaa-aaaaaaaaaaa"
Accept-Ranges: bytes
Content-Length: 2270
Content-Type: text/html; charset=UTF-8
```
また直接IPでアクセスしてみることで、WEBサーバがネームベースバーチャルか、IPベースかの推測も立てられます。それによってSSLの対応等も変わることがあるので確認すると良いとのことです。

## まとめ

上記で情報が出ていれば

* どんなサーバか
* どんなネットワークか

に推測をすることが出来ます。
先輩曰く「ちなみにこれくらいの情報は都度、見てました。単なる興味、という面もありますが、現状を把握するのもエンジニアとして必要（というか当たり前）だと思ってる。」とのことです。

以上、メモでした。

## 追記1

sample.co.jpが実際にあるとのことで表記をexample.co.jpに変更しました。@bsdmadさんありがとうございます。
Nutanix Community Edition インストーラだけ見てみた。

動くようなサーバは手元にないので、インストーラだけでも見てみましょうか、ということでUSBメモリへイメージ焼きして、VMwarePlayerのPlop Boot Manager（メモリ512MB、ディスク1GB）からUSBブートｗ
![nutanix_ce_1.png](https://qiita-image-store.s3.amazonaws.com/0/63464/cdc7cf61-f01f-30f3-26fd-3d0b4bfbc22e.png) Plop Boot Manager
![nutanix_ce_2.png](https://qiita-image-store.s3.amazonaws.com/0/63464/82aede58-f3ce-c872-d8f7-5c85d9b624ac.png) とりあえず起動。
![nutanix_ce_3.png](https://qiita-image-store.s3.amazonaws.com/0/63464/3c950a64-fe7f-c53b-fb13-1342d52aa703.png)
![nutanix_ce_4.png](https://qiita-image-store.s3.amazonaws.com/0/63464/b72ec760-7d81-0dcb-d9d3-32581bb98fcc.png) installと打ってみます。
![nutanix_ce_5.png](https://qiita-image-store.s3.amazonaws.com/0/63464/aaa2be06-3129-7878-cc5c-ac6b5dd5a2e3.png) Proceedを選択
![nutanix_ce_6.png](https://qiita-image-store.s3.amazonaws.com/0/63464/0bc7e5d2-bbf6-dd52-c2bc-8d86659259e9.png)
![nutanix_ce_7.png](https://qiita-image-store.s3.amazonaws.com/0/63464/13af6853-5b2e-8dc8-4809-dbabc82f2efd.png) はい、さようならーｗ
jacksonファイルについて

Yahoo!AndroidマップSDKを使わせていただこうとしましたが、チュートリアルの中に「本ライブラリはorg.codehaus.jacksonが必要です。」とあり、その下のURLからダウンロードするのでしょうが、「サービスは終了しています」といったようなメッセージが表示されていてできません。

1.org.codehaus.jacksonは絶対に必要なのですか？
2.それはどこで配布されてますか？

以上二点、よろしくお願いします。
browser-sync を Windows にインストールしたメモ


スマホ表示確認などで便利な browser-sync を、Windows にインストールする手順。社内勉強会用のメモ。

gulp などから呼び出すパターンもありますが、今回は browser-sync 単体での利用を試します。
(結果的には、Windows ならではのハマりどころも特になく、Mac と同じ感じでOKでした)

---

基本的には、公式サイトどおりの手順。
http://www.browsersync.io/#install

### 1) node.js をインストール

ここからダウンロードしてふつうにインストール。

https://nodejs.org/download/

インストール後、念のため Windowsを再起動。

### 2) browser-sync をインストール

コマンドプロンプトから以下を入力

```
npm install -g browser-sync
```

以下を叩いてみて、ちゃんとバージョン番号が表示されたら、インストール成功。

```
$ browser-sync --version
2.1.6     ← バージョン番号が表示される
$
```

### 3) browser-sync を起動

コマンドプロンプトで、トップページの index.html があるフォルダに移動して、

```
browser-sync start --server
```

これで browser-sync がサーバとして起動。
なお、終了させるのは `ctrl+c`

### 4) 同一ネットワーク内の、別ブラウザから参照する

起動時に表示される文字のうち、

```
 -------------------------------------
       Local: http://localhost:3000
    External: http://192.168.0.36:3000 ←← このアドレスで参照できる
 -------------------------------------
          UI: http://localhost:3001    ←← ちなみにこっちは設定画面
 UI External: http://192.168.0.36:3001
 -------------------------------------
```

**External** のところのURLで参照できる。
スマホとか別PCのIEとかからでも、同一ネットワーク内ならアクセス可能。

### 5) 起動する & html が変更されたら自動リロード

```
browser-sync start --server --files "*.html"
```

LiveReload的なこともできる。
この場合 `--files` オプションの指定で、拡張子が html のファイルが更新されたら開いているブラウザを自動リロードしてくれる。

### 6) 起動する & html と CSS が変更されたら自動リロード

```
browser-sync start --server --files "*.html,*.css"
```

html やcss ファイルが更新されたら、開いているブラウザを自動リロードする例。

### 7) WordPress とかシステム案件とか、サーバが必要なやつも参照できる

```
browser-sync start --proxy "example.local"
```

ローカル環境を構築済みなら、--proxy オプションでローカル環境で動くURLを入れればOK。
(example.local のところをローカルのURLに置き換える)
ローカル環境をスマホなどからも確認できるようになる。

---

### まとめ: ちょうべんり

特にレスポンシブサイト制作でのスマホ確認とか、ちょうべんり。
Windows 環境でも問題なく使える！
PHP: mecabの関数と意味のメモ	


###mecabのインスタンスを生成
	$meCab = new MeCab_Tagger($options);

###文字列をパースして先頭ノードを取得
	$node = $meCab->parseToNode($string);
	
###ノードの終わりまでループ
	while($node = $node->getNext())
	{
		//ここに処理
	}

###ノードのIDを取得
　ノードIDとは文脈IDのことらしい。とりえずこの分解で割当てられたIDと思っておけば良さそう。
　詳しいことは形態素解析を学ばないと理解できないので、こちらのページを参照のこと。
　http://www.mwsoft.jp/programming/munou/mecab_nitteretou.html

	$node->getId();
	

###文字列の取得
分解された文字列を取得。

	$node->getSurface();
	

###品詞IDの取得
品詞IDを取得。

	$node->getPosId();
	
品詞IDの一覧はこちら。ユーザーにより書き換え可能。

```
その他,間投,*,* 0
フィラー,*,*,* 1
感動詞,*,*,* 2
記号,アルファベット,*,* 3
記号,一般,*,* 4
記号,括弧開,*,* 5
記号,括弧閉,*,* 6
記号,句点,*,* 7
記号,空白,*,* 8
記号,読点,*,* 9
形容詞,自立,*,* 10
形容詞,接尾,*,* 11
形容詞,非自立,*,* 12
助詞,格助詞,一般,* 13
助詞,格助詞,引用,* 14
助詞,格助詞,連語,* 15
助詞,係助詞,*,* 16
助詞,終助詞,*,* 17
助詞,接続助詞,*,* 18
助詞,特殊,*,* 19
助詞,副詞化,*,* 20
助詞,副助詞,*,* 21
助詞,副助詞／並立助詞／終助詞,*,* 22
助詞,並立助詞,*,* 23
助詞,連体化,*,* 24
助動詞,*,*,* 25
接続詞,*,*,* 26
接頭詞,形容詞接続,*,* 27
接頭詞,数接続,*,* 28
接頭詞,動詞接続,*,* 29
接頭詞,名詞接続,*,* 30
動詞,自立,*,* 31
動詞,接尾,*,* 32
動詞,非自立,*,* 33
副詞,一般,*,* 34
副詞,助詞類接続,*,* 35
名詞,サ変接続,*,* 36
名詞,ナイ形容詞語幹,*,* 37
名詞,一般,*,* 38
名詞,引用文字列,*,* 39
名詞,形容動詞語幹,*,* 40
名詞,固有名詞,一般,* 41
名詞,固有名詞,人名,一般 42
名詞,固有名詞,人名,姓 43
名詞,固有名詞,人名,名 44
名詞,固有名詞,組織,* 45
名詞,固有名詞,地域,一般 46
名詞,固有名詞,地域,国 47
名詞,数,*,* 48
名詞,接続詞的,*,* 49
名詞,接尾,サ変接続,* 50
名詞,接尾,一般,* 51
名詞,接尾,形容動詞語幹,* 52
名詞,接尾,助数詞,* 53
名詞,接尾,助動詞語幹,* 54
名詞,接尾,人名,* 55
名詞,接尾,地域,* 56
名詞,接尾,特殊,* 57
名詞,接尾,副詞可能,* 58
名詞,代名詞,一般,* 59
名詞,代名詞,縮約,* 60
名詞,動詞非自立的,*,* 61
名詞,特殊,助動詞語幹,* 62
名詞,非自立,一般,* 63
名詞,非自立,形容動詞語幹,* 64
名詞,非自立,助動詞語幹,* 65
名詞,非自立,副詞可能,* 66
名詞,副詞可能,*,* 67
連体詞,*,*,* 68
```	

###未知の言葉かどうかを取得
数字は未知に分類されるもよう。

	$node->getStat();
		
 	普通:0
 	未知語:1
 	BOS:2（形態素解析のヘッダー的なもの）
 	EOS:3（形態素解析のフッター的なもの）
 	
###文字列の長さ（バイト数）を取得
	$node->getLength();
	
###文字種情報の取得
  未知語として扱われた場合、どのような処理がされたのか、という結果（？）。ちょっと謎。

	$node->getCharType();
	
###文字列の情報をたくさん表示
	$node->getFeature();
vimを瞬時に最強エディタに変えるbコマンド

http://qiita.com/wadako111/items/755e753677dd72d8036d

なんか、古い記事ですが、触発されて。

vimのタブ機能ですが、使われないのはbufferより便利じゃないからでは。

bufferとは、vimのメモリ上に展開される複数のテキストファイルのことです。

見えないタブみたいなものですね。

bコマンドで、これらを切り替えて編集できるので、使い勝手はタブと一緒です。タブん。

ただ、画面上常に表示されるわけではないので、存在としては地味で、移動もコマンドという一般的には渋い機能ですが、vim使いにとって最高のごちそうですよね？(^^;

# ポイントは:ls, :set hidden, :b [tab]

bコマンドを使いこなすには、ちょっとしたコツが必要です。

まず、.vimrcにset hiddenが必要です。

    :set hidden

これは、:bコマンドでbufferを切り替える時に編集中ファイルを保存しなくても良くなる機能です。

逆に、デフォルトの状態では、別のbufferに切り替える際に「保存してないよ！」と怒られるという親切仕様です(余計なお世話！)。

次に、:eコマンドで、ファイルを次々開きます。好きなだけ開いても大丈夫。:bコマンドがあるから！

とテンション高く行きましたが、開きすぎたbufferを:lsコマンドで一覧できます。

     :ls

:lsコマンドで表示されるリストの左端に番号が表示されるので、:b 番号 とすることで、お目当てのbufferに移動できます。

    :b 番号

また、:b n, :b pでそれぞれ次のbuffer、前のbufferに移動できます。

これだけでも十分便利なんですが、:b xxx[tab] による補完がチョー便利です。

   :b xxx[tab]で補完

開いたbufferの中からいい感じに補完して選択してくれます。更にtabを押せば、次々候補が。

# 行こうぜ。ピリオドの向こう側へ

慣れれば、20～30のbufferの中から数タッチで適切なbufferを選択できるようになります。(^^)

この移動スピードは、かつてどんなエディタもIDEも成し得なかった超スピードです(別途rking/ag.vimも入れればgrepでの移動も高速に！)。

思考を全く分断されずに複数のファイルをまたいで編集することが可能に！

更にbufferなら、ヤンクを利用したコピペも自由自在！

こんな機能が標準で入ってるなんで恐れ入谷の鬼子母神ですね。(^^;

それでは、幸せなvimライフを！
MacでXAMPPを使ってApecheサーバーをたてる

XAMPPはApacheとMySQLとPHPとPerlがセットになったソフトウェアです。Windows、Linux、Macそれぞれで利用でき、自分のマシンを簡単にWebサーバーにすることが出来ます。

今回はMacの場合の利用方法を書きます。

## XAMPPのインストールとセットアップ

XAMPPをインストールする。
[XAMPP Installers and Downloads for Apache Friends](https://www.apachefriends.org/jp/index.html)

`/Application/XAMPP` 下にインストールされる。
`/Application/XAMPP/xamppfiles/etc`下にApacheの各種設定ファイルが有る。

### httpd.confの設定
`/Application/XAMPP/xamppfiles/etc/httpd.conf`
Apacheの実行ユーザーを自分に**変更**

```
<IfModule unixd_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.  
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User niwatako
Group staff
</IfModule>
```

Apacheが外部に公開するディレクトリ(DocumentRoot)を`~/www`に**変更**

```
# 
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/Users/niwatako/www"
```

ディレクトリ`~/www`についての設定を**追加**

```
<Directory "/Users/niwatako/www">
    # ディレクトリに対して使用可能な機能の設定
    ## Indexes          ディレクトリにindexファイルがない時、内容の一覧を表示
    ## FollowSymLinks   シンボリックリンクを許可
    ## ExecCGI          CGIスクリプトの実行を許可
    ## Includes         SSIを有効化
    Options Indexes FollowSymLinks ExecCGI Includes
    
    # .htaccess での設定の上書きを許可
    AllowOverride All
    
    # 全てのアクセス元からのリクエストを許可
    Require all granted
    ## IPを叩けばこのサーバーにアクセスできる。
    ## パブリックなLANや勉強会の共有Wi-Fiにつなぐと
    ## 客先に関係するテストページが見えてしまうことになり得るので注意。
    ## 特定IPからの接続のみ許可する場合は
    ## Require ip xxx.xxx.xxx.xxx
</Directory>
```

### index.htmlファイルの作成とApacheの起動

`~/www/index.html`ファイルを以下の様な内容で作成

```
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>テストページ</title>
    </head>
    <body>
        XAMPPサーバーがページを表示しています。
    </body>
</html>
```

XAMPPを起動して、ApacheをStartしてみましょう。
無事Startさせることができたら、ブラウザで[http://localhost/](http://localhost/)へアクセスして、`XAMPPサーバーがページを表示しています。`というページが表示されるか確認します。

### Apacheが起動しない場合

エラーメッセージをヒントに原因を探します。

httpd.confの記載内容に間違いはないですか？タイポや全角スペースなどが混じっていないか気をつけます。

ポート80番が既に利用されていて起動できないことがよく有ります。ポート80を他のアプリが利用していないか確認して下さい。

Skypeなどがポート80番を使用している場合があります（最新版はしていないかも）。確認の上、使用しているアプリがあれば同時起動を避けるか、そのアプリの設定からポートを変更して下さい。
[WebGL] Three.jsで、オブジェクトの「前方ベクトル」を取得する


UnityではGameObjectのtransformに`forward`が定義されていて、ワールド空間上で「前方はどちらか」というのが取得できます。

ゲームに限らず、「オブジェクトの前方」を取得したいケースはあると思います。
ということで、Three.jsでこの「オブジェクトの前方」ベクトルを取得するメモです。

[実際に動くサンプル](http://jsdo.it/edo_m18/rXdB)をjsdo.itにあげてあります。

![動画サンプル](http://i.gyazo.com/fca009f5ae9c3d6c929d3b353854fb14.gif)

## つまりは「Z軸がどちらを向いているか」

実際やることはとても簡単です。
なにを持って前方か、というと、つまりは「Z軸が現在どこを向いているか」が分かれば求めたいベクトルが得られます。

よく参考にさせてもらっているサイト（[その39 知っていると便利？ワールド変換行列から情報を抜き出そう](http://marupeke296.com/DXG_No39_WorldMatrixInformation.html)）にその答えがあります。

ワールド変換行列が得られればあとは簡単な掛け算で求めることができます。
原理、概要については上記サイトを見てください。

## 4次元ベクトルと行列を掛けるだけ

やることは **Z値のみが`1`の4次元ベクトルを掛ける** だけです。
Three.jsでやるには以下のようにします。

```js
var forward = new THREE.Vector4(0, 0, 1, 0);
forward.applyMatrix4(aMatrix).normalize();
```

こうすることで、該当のマトリクスから前方ベクトルが抽出されます。
あとはこのベクトルを必要に応じて加工してあげれば目的達成です。

## 実例

例えばとあるオブジェクトの前方に常に別のオブジェクトが追従する、みたいなことであれば以下のように書くことができます。

```js
document.addEventListener('mousemove', function (e) {
    if (!dragging) {
        return;
    }
    var deltaX = e.pageX - prev.x;
    var deltaY = e.pageY - prev.y;

    box2.rotation.x += deltaY / 30;
    box2.rotation.y += deltaX / 30;
    // console.log(deltaX, deltaY);

    box2.matrixWorld.decompose(box.position, box.quaternion, box.scale);

    var forward = new THREE.Vector4(0, 0, 1, 0);
    forward.applyMatrix4(box2.matrix).normalize();
    forward.multiplyScalar(30);
    box.position.add(forward);

    prev.x = e.pageX;
    prev.y = e.pageY;
}, false);
```

[jsdo.it](http://jsdo.it/edo_m18/rXdB)にあげたサンプルの該当部分を抜き出したものです。
やっていることは、ドラッグしたら`box2`を回転させ、その前方のやや離れた位置に`box`が追従する、というものです。

ちなみに`decompose`は行列から、「位置」「回転」「スケール」の値を抜き出してくれる便利なメソッドです。
これでまるっと`box2`の位置と回転をコピーし、さらに位置を少しだけ前方に移動している、というわけです。
ls コマンドで ディレクトリ、ファイルを分けて表示する

```bash:linux
ls -lF

app.config.js
app.constant.js
app.module.js
asset/
component/
dist/
index.html
service/
style.css
view/
```

windowsのようにディレクトリ、ファイルを分けて表示する。

```bash:.bash_profile
alias l='ls -lF | grep /;ls -lF | grep -v / | tail +2'
```

```bash:linux
l

asset/
component/
dist/
service/
view/
app.config.js
app.constant.js
app.module.js
index.html
style.css
```
.prop('checked', true/false) でチェックボックスをトグルしても change イベントが発火しない

# <i class='fa fa-star fa-fw'></i> 概要

以下の様なチェックボックスがあります。

```html
<div class="checkbox">
  <label>
    <input type="checkbox" class="sayaka">
    青い髪の女の子
  </label>
</div>
```

そしてこの input 要素の change イベントに以下のようにイベントハンドラを登録します。

```js
$('.sayaka').on('change', function () {
    if ($(this).prop('checked')) {
        alert('可愛い女の子かと思った？ 残念！ さやかちゃんでした！');
    } else {
        alert('あたしって、ほんとバカ');
    }
});
```

すると、チェックボックスをクリックしてチェックを入れたり外したりするときに、
アラートダイアログが表示されます。

しかし、以下のように jQuery の [.prop()](http://api.jquery.com/prop/) メソッドを使って同様のことを行っても、チェックボックスのトグルは行われますがアラートダイアログが表示されません。
どうやら chenge イベントが発火していないようですね。

```js
var $sayaka = $('.sayaka'),
    isChecked = function () { return $sayaka.prop('checked'); };

$sayaka.prop('checked', !isChecked());
```

では .prop() を利用する場合に change イベントを発火させるにはどうすればいいのでしょうか。
調べてみたところ [.change()](https://api.jquery.com/change/) メソッドを利用すると良さそうです。

```js
$sayaka.prop('checked', !isChecked()).change();
```

これで手動でチェックを入れたり外したりした場合と同様に、アラートダイアログが表示される (登録したイベントハンドラが実行される) ようになりました。

[backbone.stickit](http://nytimes.github.io/backbone.stickit/) を使っていて気付きました :scream: 

# <i class='fa fa-book fa-fw'></i> 参考

* [[JQUERY FORUM] Should $('#chk').prop('checked', true) trigger change event?](https://forum.jquery.com/topic/should-chk-prop-checked-true-trigger-change-event)
* [[Stack Overflow] checkbox checked with prop() does not fire events attached to "change"](http://stackoverflow.com/questions/19505011/checkbox-checked-with-prop-does-not-fire-events-attached-to-change)
VBoxClient: the VirtualBox kernel service is not running. Exiting.

**ログイン時に噴出しが出るようになった**

![vbox.jpg](https://qiita-image-store.s3.amazonaws.com/0/71525/73f0c469-c0ef-77d0-4004-9240e78ce9b9.jpeg)


症状：GuestOSとHostOSでマウスカーソルが自動で行き来できなくなった。画面のリサイズが自動で利かなくなった等

原因：多分昨日Kernelをupdateしたから。

対応 Guest Additionsの入れなおし
<pre>
\#mount -r /dev/cdrom /mnt/cdrom
\#cd /mnt/cdrom
\#sh ./VBoxLinuxAdditions.run install
</pre>
GitHubの基本的な使い方メモ


#0.前提
gitはインストール済み、GitHubアカウント登録済み

#1. GitHubにリポジトリの作成

+ webページで作成
 
	Repositries タブの Newボタンで作成画面が開く
![Kobito.3QZROQ.png](https://qiita-image-store.s3.amazonaws.com/0/72578/9420e97a-10e2-e9e7-2bcf-bf975b134d14.png "Kobito.3QZROQ.png")

	Repository name ,Description, Public/Private  の選択（無料プランはPublicのみ）, initialize this repository with a READMEのチェックボックス はON(READMEファイルの作成）で、Create repository
	
#2. ローカルにコーピー =  クローンする
作成したいディレクトリに`cd` した後
`git clone https://github.com/XXXXX/XXXX.git `

#3. .gitignoreの作成
ローカルリポジトリのディレクトリ直下に.gitignoreを作成して、バージョン管理対象外のファイルを記述。
ex).logファイルは管理対象外とする場合

```bash:.gitignore
*.log
```


#4. git設定ファイルgitconfigの設定
##(1) git設定ファイルの場所
+ 1　/etc/gitconfig　確認コマンド: `git config --system -l`
+ 2 ~/.gitconfig 確認コマンド`git config --global -l`
+ 3 ローカルリポジトリ/.git/config `git config -l`
	＊1,2,3の順番で読み込まれて同一の設定値については後で読み込まれた値で上書きされる

##(2) git設定ファイルの変更
ex) ユーザ名、メールアドレスを global に設定する

```bash:
git config --global user.name "Your name"
git config --global user.email "Your email"

```

#5. ステージングエリアに移動 (git add)
##(1) ステージングにadd
`git add ファイル名,ディレクトリ名等`
##(2) addの取り消し
 
```
#ファイル単位で個別に取り消し
git rm -r --cached [file_path]
#add自体を取り消し
git reset HEAD
```
 
#6. ファイルの状態確認 (git status)
`git status`

#7. ローカルリポジトリへのコミット (git commit)
##(1) コミット
`git commit -m "コメント"`
##(2) 確認

```bash:
#status確認
git status
#コミットログ確認
git log
```

##(3)　コミットを取り消したい場合やコミット漏れ対応の整理

```bash:
#直前のコミット取り消し 
git reset --soft HEAD^
#n個前のコミット取り消し
git reset --soft HEAD~{n}
#直前のコミットに上書き
git commit --amend

```

#8. pushしてGitHubに反映させる(git push)
`git push リモート名　ブランチ名`
ex)
`git push origin master`

#9. GitHubのリポジトリから最新の状態を取得する
`git pull リモート名 ブランチ名`

#10 SSHkeyの登録
##(1)　ローカルでSSHKey作成

```bash:
ssh-keygen -t rsa -C "youremail"
```
Enter file in which to save the key (~/.ssh/id_rsa):
→Enterキー
Enter passphrase (empty for no passphrase): 
→パスワード登録

##(2) GitHubのwebページにアクセスし、設定 → Add SSH Key
![Kobito.gHxDXU.png](https://qiita-image-store.s3.amazonaws.com/0/72578/05169560-ef7b-b2e5-04b3-e1568d89fcf9.png "Kobito.gHxDXU.png")

##(3) SSH Key の登録
Title : 適当に設定
Key ：　以下の子アンドでkeyの内容を確認してコピペ

```bash:
cat ~/.ssh/id_rsa.pub 
```

##(4) GitHub認証確認

```bash:
ssh -T git@github.com
```
JavaScript つい忘れてしまう、配列かオブジェクトかの判定方法

これも忘れちゃうんですよね。

#Object.prototype.toString.callの結果で判定する
これがシンプルでよいかなと思います。


````js

if(Object.prototype.toString.call(a) === '[object Array]')

````

なお、他の値でやってみるとこんな感じ

````js
//空のオブジェクト
Object.prototype.toString.call({})
結果:"[object Object]"

//文字列
Object.prototype.toString.call("a")
結果:"[object String]"

//数値
Object.prototype.toString.call(1)
結果:"[object Number]"

//null
Object.prototype.toString.call(null)
結果:"[object Null]"

//undefined
 Object.prototype.toString.call(undefined)
結果:"[object Undefined]"

//Boolean
 Object.prototype.toString.call(true)
結果:"[object Boolean]"

//Function
Object.prototype.toString.call(function(){})
結果:"[object Function]"

//正規表現
Object.prototype.toString.call(/abc/)
結果:"[object RegExp]"
【デザインパターン】 Decoratorパターン

##概要
既存のオブジェクトに新しい責任を動的に追加するパターン

以下の4種類のクラスからなる
1. Componentクラス(責任を動的に追加できるオブジェクトのためのインターフェイスを定義)
2. ConcreteComponentクラス(責任を動的に追加できる具体的なオブジェクトを定義)
3. Decoratorクラス(オブジェクトへの参照を保持し、1.と一致したインターフェイスを定義)
4. ConcreteDecoratorクラス(2.で定義されたオブジェクトに責任を追加するオブジェクトを定義)

##具体例と実装
コーヒーを例にすると

上記1~4はそれぞれ
1. コーヒークラス(Coffeeクラス)
2. アイスコーヒークラス(IcedCoffeeクラス)
3. コーヒートッピングクラス(CoffeeToppingDecoratorクラス)
4. 生クリームトッピングクラス、キャラメルトッピングクラス(CreamDecorator、CaramelDecoratorクラス)

が対応する。
コードの詳細は以下

```rb:coffeerb
class Coffee
  def initialize(strength, volume)
    @strength = strength
    @volume = volume
  end

  def taste
  end

  def flavor
  end
end
```

```rb:iced_coffee.rb
class IcedCoffee < Coffee
  def initialize(strength, volume)
    super
  end

  def taste
    # スッキリした味わい
  end

  def flaver
    # さっぱりしたフレーバー
  end
end
```

```rb:coffee_topping_decorator.rb
class CoffeeToppingDecorator
  def initialize(coffee)
    @coffee = coffee
  end

  def taste
    @coffee.taste
  end

  def flavor
    @coffee.flavor
  end
end
```

```rb:cream_decorator.rb
class CreamDecorator < CoffeeToppingDecorator
  def taste
    # @coffee.tasteにコクを追加
  end
end
```

```rb:caramel_decorator.rb
class CaramelDecorator < CoffeeToppingDecorator
  def flavor
    # @coffee.flavorに甘い香りを追加
  end
end
```
```rb:client.rb
caramel_cafe_au_lait = CaramelDecorator.new(CreamDecorator.new(IcedCoffee.new('濃い目', '普通サイズ')))
calamel_cafe_au_lait.taste # スッキリ、コクがある
calamel_cafe_au_lait.flavor # さっぱり、甘い香り
```


##メリット
* 責任の削除や追加が容易であるため、オブジェクトに複数の独立した責任を持たせたい場合に便利
* 動的に責任を追加できるため、責任ごとに多数の依存関係のあるクラスを作成しなくて良い
* 単純な部品を複数組み合わせてオブジェクトの機能を組み立てられるため、複雑なクラスを作成した場合に比べてアプリケーションが不要な機能を取り込む必要がなくなる上、予期せぬ機能追加にも対応しやすい

##まとめ
たくさんの機能を組み合わせたオブジェクトを作成する際に便利なパターン
動的な機能拡張や予期せぬ機能追加が予想される場合に用いる
JavaScript　配列から指定した値の近似値を取得

速度とか気にせず、シンプルにわかる安く取得する方法としてメモしておきます。
海外のどこかのサイトに書いてあったコードです

````closest.js

function getClosestNum(num, ar){
   //近似値を保持しておく変数
   var closest;
   //配列かどうか、要素があるか判定
   if(Object.prototype.toString.call(ar) ==='[object Array]' && ar.length>0){
     //まず配列の最初の要素を近似値として保持する
     closest = ar[0];
     //配列の要素を順次比較していく
     for(var i=0;i<ar.length;i++){ 
        //この時点での近似値と、指定値の差異を絶対値で保持しておく
        var closestDiff = Math.abs(num - closest);
        //読み込んだ値と比較し、差異を絶対値で保持しておく
        var currentDiff = Math.abs(num - ar[i]);
        //新しく比較した値のほうが近かったら、近似値として保持しておく
        if(currentDiff < closestDiff){
            closest = ar[i];
        }
      }
     //ループが終わったら、近似値を返す
      return closest;
    }
 //配列じゃなかったらfalse
 return false;
}
````
gitWatch > nwってなんだろう?

https://github.com/mamedev/mame/search?q=nw&type=Issues&utf8=%E2%9C%93
などのissuesを見ていると

> Fix copy/paste error (nw)
> fix kbm3rd keyboard error (nw)

などのように(nw)というキーワードがついているものがある。

何なのかよくわからない。

パッケージ名の場合、メッセージの先頭に書く例は見たことがあるが、メッセージの最後尾に書いているのでパッケージ名ではないのだろうか?

<hr>
https://github.com/mamedev/mame/search?q=nw&type=Code&utf8=%E2%9C%93
にて upd1771.hを見ていると

    // noise wavetable LFSR
という記述があった。これだろうか?
技術英語 > descriptive names > ... to think of more descriptive names than i, j and k

引用: Code Complete > Naming Loop Indexes
> If you have to use i,j, and k, don't use them for anything other than loop indexes for simple loops - the convention is too well established, and breaking it to use them in other ways is confusing. The simplest way to avoid such problems is simply to think of more descriptive names than i, j, and k.

<hr>
https://www.dataone.org/best-practices/assign-descriptive-file-names
> Assign descriptive file names

<hr>
descriptiveで関連して思い出すのは
- file descriptor
商品詳細APIでおすすめ商品コードが設定されていないとき

担当者様

商品詳細APIでおすすめ商品コードが設定されていないとき
本来、/ResultSet/Result/RelevantLinks/ItemCode
であるべきですが、
/ResultSet/Result/RelevantLinks/ItemCode/ItemCode 
と返ってきます。
(/ResultSet/Result/RelevantLinks/ と返ってくる商品もあります。)

バグではないでしょうか？

よろしくお願いいたします。
たった12行で全テーブルにOPTIMIZE TABLEできるシェルスクリプト

# 実際のシェルスクリプト
**追記[2015-06-29]**
コメント欄でご指摘が有りまして、11行どころか1行で実行できる方法がありました！
```
mysqlcheck -u hogeuser -phogepassword --all-databases --optimize
```

------

```bash:mysql_optimize.sh
#!/bin/sh
host=localhost
user_name=hogeuser
db_pass=hogepassword
databases=($(/usr/bin/mysql -h ${host} -u ${user_name} -p${db_pass} -e "SHOW DATABASES;"|\
grep -v -e Database -e information_schema -e mysql -e performance_schema))
for database in ${databases[@]};do
    /usr/bin/mysql -h ${host} -u ${user_name} -p${db_pass} -e "SHOW TABLES from ${database};"|\
    grep -v Tables_in_${database}|\
    xargs -I {} \
    /usr/bin/mysql -h ${host} -u ${user_name} -p${db_pass} -e "USE ${database};OPTIMIZE TABLE {};"
done
```

# 試した環境
* CentOS 7.1
* MySQL 5.6.25

# 思いついたきっかけ
`OPTIMIZE TABLE`のシェルスクリプトを今まで
`/usr/bin/mysql -h localhost -u hogeuser -phogepassword -e "USE hogedatabase;OPTIMIZE TABLE hogetable;"`
のような1テーブル1行のシェルスクリプトを書いていました。
ですが、
**テーブルが増えるごとに行を書き足す必要があるので面倒**
だったので、
「自動的に現存するテーブル名を取り込んでくれてたらいいのに」
という願望を叶えるためにシェル芸を駆使して書きなおしてみました。

# 注意事項とか疑問点とか
* MySQLのパスワードをシェルスクリプト直に書き込むので、MySQLから`insecure`と怒られたり、ユーザーとパスワードの組み合わせやシェルスクリプトのファイルの置き場所には気をつけましょう。
* そもそも`OPTIMIZE TABLE`は、デフラグとかと同じ考え方で定期実行させるべきものでしたっけ？
Rubyの自己代入あれこれ #ruby

## <i class="fa fa-cubes" style="font-size:1em;"></i> 概要
Rubyの自己代入あれこれ

## <i class="fa fa-question-circle" style="font-size:1em;"></i> 自己代入って？
以下のような式が自己代入です。

~~~ruby
total = 5
total += 10       # total = total + 10 (15)
~~~

`+=` や `||=` が最もよく見る自己代入だと思いますが、
その他にも以下のような演算子が自己代入に対応しています。

~~~
+, -, *, /, %, **, &, |, ^, <<, >>, &&, ||
~~~

詳しくはるりまの演算子式のページを参照 [^1]

## <i class="fa fa-user" style="font-size:1em;"></i><i class="fa fa-plus-circle" style="font-size:1em;"></i> 加算
### <i class="fa fa-code" style="font-size:1em;"></i> プログラム
~~~ruby
total = 0
p total
total += 5
p total
total += 10
p total
~~~

### <i class="fa fa-file-text" style="font-size:1em;"></i> 出力
~~~
0
5
15
~~~

## <i class="fa fa-user" style="font-size:1em;"></i><i class="fa fa-minus-circle" style="font-size:1em;"></i> 減算
### <i class="fa fa-code" style="font-size:1em;"></i> プログラム
~~~ruby
total = 20
p total
total -= 5
p total
total -= 10
p total
~~~

### <i class="fa fa-file-text" style="font-size:1em;"></i> 出力
~~~
20
15
5
~~~

## <i class="fa fa-user" style="font-size:1em;"></i><i class="fa fa-frown-o" style="font-size:1em;"></i> falthy時のみ値を代入
### <i class="fa fa-code" style="font-size:1em;"></i> プログラム
~~~ruby
[false, true, nil, '', 'hige'].each { |e|p e||='hoge' }
~~~

### <i class="fa fa-file-text" style="font-size:1em;"></i> 出力
~~~
"hoge"
true
"hoge"
""
"hige"
~~~

## <i class="fa fa-user" style="font-size:1em;"></i><i class="fa fa-smile-o" style="font-size:1em;"></i> truthy時のみ値を代入
### <i class="fa fa-code" style="font-size:1em;"></i> プログラム
~~~ruby
[false, true, nil, '', 'hige'].each { |e|p e&&='hoge' }
~~~

### <i class="fa fa-file-text" style="font-size:1em;"></i> 出力
~~~
false
"hoge"
nil
"hoge"
"hoge"
~~~

## <i class="fa fa-book" style="font-size:1em;"></i> 脚注
[^1]: [自己代入 - 演算子式 - るりま](http://docs.ruby-lang.org/ja/2.2.0/doc/spec=2foperator.html#selfassign)
Pythonにおけるエンコーディング判定

Pythonにおけるエンコーディング判定

## 定番ライブラリ
* chardet

## chardetの概要
バイト列を読み込み、そのパターンから用いられているエンコーディングを推測する。

## chardetの基本的な使い方は二通り
1. ```detect```関数にバイト列を読みこませる
2. 読み込ませるバイト列のサイズが大きすぎる場合、```UniversalDetector```オブジェクトを生成し、```feed```メソッドで少しずつ読み込ませる

## 方法1
```python
import chardet
from urllib.request import urlopen

with urlopen('http://qiita.com/') as response:
    html = response.read()
    print(chardet.detect(html))  // {'confidence': 0.99, 'encoding': 'utf-8'}
```

## 方法2

<p><code>UniversalDetector</code>の主なインターフェイス:</p>

* ```detector.feed```: バイト列を読みこませるメソッド
* ```detector.done```: 信頼度がある閾値を超えると```True``` となる、終了判定のためのプロパティ
* ```detector.result```: 結果が格納されたプロパティ
* ```detector.reset```: オブジェクトを初期化するメソッド

```python
from chardet.universaldetector import UniversalDetector
from urllib.request import urlopen

detector = UniversalDetector()

with urlopen('http://qiita.com/') as response:
    for l in response:
        detector.feed(l)
        if detector.done:
            break
detector.close()
print(detector.result)  // {'confidence': 0.99, 'encoding': 'utf-8'}
```

やっていることは簡単で、```detector.feed```で```detector```に一行ずつ読み込ませ、判定が終了したかどうかを```detecor.done```で都度確認し、最後に結果を表示するという流れ。

## さらに勉強するために
* chardetのドキュメンテーション内にある[How it works](https://chardet.readthedocs.org/en/latest/how-it-works.html)
* Dive Into Python 3 の[第15章](http://diveintopython3-ja.rdy.jp/case-study-porting-chardet-to-python-3.html)の前半
Chrome ExtensionでReact.jsを使ってみた


ChromeExtensionの中のpopup.htmlで動的なViewを作成するために流行りのReactを使用しました。その時に少しつまづいたので書いておきます

## Chrome Extensionの中では外部スクリプトは読み込めない
最初[チュートリアル](http://mae.chab.in/archives/2529)にあるように

```index.html
<!-- index.html -->
<html>
  <head>
    <title>Hello React</title>
    <script src="https://fb.me/react-0.13.3.js"></script>
    <script src="https://fb.me/JSXTransformer-0.13.3.js"></script>
    <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
  </head>
  <body>
    <div id="content"></div>
    <script type="text/jsx">
      // Your code here
    </script>
  </body>
</html>
```
のようにして外部スクリプトとしてreactを読み込もうとしました。
しかし、 **chrome extensionの中では外部スクリプトは読み込めなかった。**よってFB公式ページよりreactをDLしてjs/libの中に配置した。

しかし、jsxtransformerの中で外部スクリプトが呼ばれているらしく、再びsecurity errorが出た。

## jsxのコンパイル
上記の理由よりjsxをweb上でコンパイルするのは厳しいということが分かったので、jsxファイルを事前にコンパイルする。

今回はreact-toolsを使用する
install方法は

```bash:ターミナル
$ npm install -g react-tools
```

react-tookを手に入れたら```jsx -watch```を利用することによって自動的にjs形式にコンパイルするようにする。

```bash:ターミナル
$ jsx --watch jsxの入ってるディレクトリ jsの入るディレクトリ
```

あとはjsの中に入ってるコンパイルしたやつを読み込めば普通にreactが使える
### 参考
[【個人メモ】React Tutorialをちょこっとやってみた](http://qiita.com/futoase/items/d536527e0bfe83aea0c5)
はじめてのPolymerで参考になるサイト(0.5系)

![imgres.jpg](https://qiita-image-store.s3.amazonaws.com/0/15448/980403b4-ab50-405a-dccd-f47ec3f8cbf7.jpeg)

# Polymerを勉強した際に参考にしたサイト

最近1.0が発表され、ついにProduction readyになったPolymer。
でも、ここでは、0.5系のまとめですw
気が向いたら随時1.0の情報も追加していきます。


## 公式サイト
### ・ https://www.polymer-project.org/0.5/
何はともあれここは一番見ます。どんなコンポーネントがあるのか、索引みたいな形で使用します。
また、Elementのページ以外にも目を通しておくといいと思います。

## Polymerをはじめて触る人向け
#### 1. Polytechnic codelabs
##### ・ http://itshackademic.com/codelabs?locale=ja
「Polymer: はじめての Polymer アプリケーション」などチュートリアル形式でPolymerを勉強できます。
初学者にオヌヌメです。ソースコード一式もGetできるので、手元で動かしながら進めていけます。
Polymerのデータバインディングや、独自Elementの作り方等、Polymerの感覚を掴むのには最適です。
***
#### 2. PolymerでMaterial Designなチャットアプリを作ろう
##### ・ https://html5experts.jp/girlie_mac/12359/
Polymerを使って、シンプルなチャットアプリの作成が学べます。チャットアプリですが、
サーバサイドは、PubNubを使ったサンプルになっており、フロントエンドのPolymerに集中して勉強できます。
***
#### 3. 誰でもAndroid 5.0のMaterial DesignをWebに持ち込めるPolymer(ちょっと古いです。)
##### ・ http://www.atmarkit.co.jp/ait/articles/1410/20/news084.html
ちょっとわかりづらいですが、ざっと理解するにはいいかと思います。

## Polymerに慣れてきたら
#### 1. Custom Elements　Explore the world of Web Components
##### ・ https://customelements.io/
慣れてくると、公式サイトのElement一覧から必要なコンポーネントを探したりしますが、
基本的なコンポーネントしか公式にはありません（当たり前ですねw）
このサイトは、Web Componentsのカタログサイトで、人様がつくったコンポーネントを簡単に探せます。
1.0がでて間もないので、ここに上がっているコンポーネントは0.5系のものがまだまだ多いです。
今後1.0に合わせて、コンポーネントも増えていくことを期待しています。





*** 
私が勉強している上で、あんまり参考になるサイトがなかったです。
どなたかご存知でしたら教えて下さい！
Yahoo! ID連携 SDK for PHP 実装エラー

初歩的な質問で申し訳ございません。
yconnect-php-sdk-masterをローカルで実装した結果下記のようなエラーが出てます。
何かの設定不備でしょうか？
環境はXAMPPを使用してます。

Exception Object
(
    [message:protected] => failed curl_exec.
    [string:Exception:private] => 
    [code:protected] => 0
    [file:protected] => C:\xampp\htdocs\yconnect\lib\YConnect\Util\HttpClient.php
    [line:protected] => 133
    [trace:Exception:private] => Array
        (
            [0] => Array
                (
                    [file] => C:\xampp\htdocs\yconnect\lib\YConnect\Endpoint\TokenClient.php
                    [line] => 81
                    [function] => requestPost
                    [class] => YConnect\Util\HttpClient
                    [type] => ->
                    [args] => Array
                        (
                            [0] => https://auth.login.yahoo.co.jp/yconnect/v1/token
                            [1] => Array
                                (
                                    [grant_type] => authorization_code
                                    [code] => kwdypztc
                                    [redirect_uri] => http://example.com/yconnect/sampleUserInfo.php
                                )

                        )

                )

            [1] => Array
                (
                    [file] => C:\xampp\htdocs\yconnect\lib\YConnect\Endpoint\AuthorizationCodeClient.php
                    [line] => 149
                    [function] => fetchToken
                    [class] => YConnect\Endpoint\TokenClient
                    [type] => ->
                    [args] => Array
                        (
                        )

                )

            [2] => Array
                (
                    [file] => C:\xampp\htdocs\yconnect\lib\YConnect\YConnectClient.php
                    [line] => 240
                    [function] => fetchToken
                    [class] => YConnect\Endpoint\AuthorizationCodeClient
                    [type] => ->
                    [args] => Array
                        (
                        )

                )

            [3] => Array
                (
                    [file] => C:\xampp\htdocs\yconnect\sampleUserInfo.php
                    [line] => 154
                    [function] => requestAccessToken
                    [class] => YConnect\YConnectClient
                    [type] => ->
                    [args] => Array
                        (
                            [0] => http://example.com/yconnect/sampleUserInfo.php
                            [1] => kwdypztc
                        )

                )

        )

    [previous:Exception:private] => 
)
【GAS】住所から緯度経度を取得する

たまに、大量な住所情報から緯度経度が欲しかったりしますよね…
え、しない？

Google Geocoding APIを使用して、JSONを取得、表示しているだけです。
本来ならXMLHttpRequestを使うところですが、GASだとUrlFetchAppで簡単に取得できます。

スプレッドシートの関数にすると、いっぺんに結果が返ってくるので少し気持ちいいです。

```js:コード.gs
function getLocation(address) {
  var requestUrl = "https://maps.googleapis.com/maps/api/geocode/json?address=" + address; // Google Geocoding API
  var result = JSON.parse( UrlFetchApp.fetch(requestUrl) );
  if ( result['status'] === 'ZERO_RESULTS' ) { return 'No Result.' }
  var location = result['results'][0]['geometry']['location'];
  return [ [ location['lat'] , location['lng'] ] ];
}
```
実は、住所じゃなくてもランドマーク名を引数に渡せば緯度経度が返ってきます。

#サンプル
[スプレッドシート](https://docs.google.com/spreadsheets/d/1Z_ISN40mQ2ce8wCImNF9QEzboEl4vKQChpTraa9z_V0/edit#gid=0)
[ソースコード](https://script.google.com/macros/d/18ueGEUntMCxxAVFi-NPwHjeu32Wk3ZAThPzoKczkdIsD_IdQqJPtoHxa/edit?uiv=2&mid=ACjPJvGNAi2oVngiAPB393ti2XaYAR1GIIkOWOvmhWyARve5POBImTXv9RurTFANMDs-dyu98n5xn8zULjWulEI65qFjCCXQ-zlLHCe3Fj0q11Cz8yz-LWGTDQqs_nbszkx233fbBzsCUSw&splash=yes)