OmniAICreator/Qiita-1.07M huggingface dataset:
A Tour of Go Advanced Exercise: Complex cube roots

Advanced Exercise: Complex cube roots
のメモですよ。

http://go-tour-jp.appspot.com/#48

```go
package main

import (
    "fmt"
    "math/cmplx"
    )


func Cbrt(x complex128) complex128 {
    z := complex128(2)
    s := complex128(0)
    for {
        z = z - (cmplx.Pow(z,3) - x)/(3 * (z * z))
        if cmplx.Abs(s-z) < 1e-17 {
            break
        }
        s = z
    }
    return z
}

func main() {
    fmt.Println(Cbrt(2))
}
```
http://golang.org/pkg/math/cmplx/#Pow

cmplx.Pow(z, 3)は z * z * z と同じ

いまいち

cmplx.Abs(s-z) < 1e-17

この比較の仕方が慣れない
Surface pro 3 でvirtualboxでエラーが発生するとき

# VirtualBoxのインストールエラー

Surface Pro 3 でVirtualBoxを利用する際、現時点 2014/07/26 での最新版4.3.14ではインストールに失敗する場合がある。
（インストールは成功したように見えても、実際に仮想マシンを動作させようとしてもエラーが発生して立ち上がらない場合も）

とりあえず、 http://download.virtualbox.org/virtualbox/4.3.12/ からダウンロードした4.3.12ならば動作する。

# VT-Xが有効にならない

VirtualBoxが無事にインストールできても、VirtualBoxからCPU仮想化支援が見えず、64bit Linuxのboxが利用できない場合がある。Hyper-Vがいらんことをしている模様。

とりあえず、管理者権限で起動したコマンドプロンプトから下記コマンドを実行してHyper-Vを無効化すれば、当面幸せになれる。
（管理者権限で起動しないと、
「ブート構成のデータストアを開けませんでした。アクセスが拒否されました。」
と表示されて動作しない）

```bat:
> bcdedit /set hypervisorlaunchtype off
```

・・・VisualStudioでWindowsPhoneの開発をする人は、必要に応じて有効にするべし。

```bat:
> bcdedit /set hypervisorlaunchtype auto
```

# 動作した環境

vagrant upしたUbuntu14.04 64bitへvagrant sshできるところまで確認した環境。長かった。。。

* Surface Pro 3 (Core i7-4650U @ 1.70GHz 2.30GHz)
* Windows 8.1 Pro
* cygwin 1.7.31 (openssh 6.6.1)
* VirtualBox **4.3.12**
* Vagrant 1.6.3
* Official Ubuntu Server 14.04 LTS https://vagrantcloud.com/ubuntu/trusty64/version/1/provider/virtualbox.box
あるバイナリーファイルが依存している RPM を列挙する

昔のメモが出てきたので、ここに貼っておく。

バイナリーファイル aaa がある時、そのバイナリーに必要な RPM を列挙する場合

1. ldd
--------

    $ ldd ./aaa
    linux-vdso.so.1 =>  (0x00007fff5bdff000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fa954ca3000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fa9544f1000)
    libz.so.1 => /lib64/libz.so.1 (0x00000031a1800000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fa954ee7000)

→ 必要なライブラリーは
linux-vdso.so.1
libcrypt.so.1
libc.so.6
libz.so.1
ld-linux-x86-64.so.2

2. 各ライブラリーにおいて、rpm -qf (ファイルパス) を実行
----------------------------------------------------

    $ rpm -qf /lib64/libcrypt.so.1
    glibc-2.12-1.107.el6_4.2.x86_64

これを 1. で出力されたライブラリーに対して繰り返すと、以下のパッケージが必要であることがわかる。

### 1. glibc-2.12-1.107.el6_4.2.x86_64

このパッケージには以下のライブラリーファイルが含まれる

- /lib64/libcrypt.so.1
- /lib64/libc.so.6
- /lib64/ld-linux-x86-64.so.2

### 2. zlib-1.2.3-29.el6.x86_64

このパッケージには以下のライブラリーファイルが含まれる

- /lib64/libz.so.1
sinatra アプリを passenger で起動するためにやったこと

# 概要
bundle 便利ですよね！Sinatra で作成したアプリを訳あって passenger で動かそうとしたのですが、調べてもまとまっているサイトがあまりなかったのでまとめてみました。
意外と大した事してない。。

# やったこと
passenger を `Gemfile` に追加

```Gemfile
gem 'passenger'
```

インストール！

```
$ bundle install
```

passenger の追加モジュールをインストールする（これがないと動かない）

```
$ bundle exec passenger-install-apache2-module
```

いくつかのパッケージがないと怒られるので追加

```
$ sudo yum install curl-devel
$ sudo yum install ...
```

気を取り直してもう一度（※Enter連打）


```
$ bundle exec passenger-install-apache2-module
```


以下を `httpd.conf` に追加しろと言われるので追加

```httpd.conf
<VirtualHost *:80>
   ServerName    www.exmaple.com
   DocumentRoot  /app_root/
   ...

   # ここから
   LoadModule passenger_module /app_root/vendor/bundle/ruby/2.0.0/gems/passenger-4.0.46/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /app_root/vendor/bundle/ruby/2.0.0/gems/passenger-4.0.46
     PassengerDefaultRuby /usr/local/bin/ruby
   </IfModule>
   # ここまで
</VirtualHost *:80>
```

apache の再起動して完了。

```
$ sudo /etc/init.d/httpd restart
```
rpm(RPM Package Manager)ファイルをMacOSXで扱うには


* CentOS6で提供されているkernelのソースコードをMacOSXで確認したい。しかしrpmのため色々とめんどくさい。rpm2cpioコマンドを使えば簡単にファイルを取り出すことが可能となる。


## コマンドライン

```
brew install rpm2cpio
```

### 実行結果


```
[~]$ brew install rpm2cpio
==> Installing rpm2cpio dependency: xz
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/xz-5.0.5.mavericks.bottle.3.tar.gz
######################################################################## 100.0%
==> Pouring xz-5.0.5.mavericks.bottle.3.tar.gz
?  /usr/local/Cellar/xz/5.0.5: 58 files, 1.5M
==> Installing rpm2cpio
==> Downloading http://svnweb.freebsd.org/ports/head/archivers/rpm2cpio/files/rpm2cpio?revision=259745&view=co
######################################################################## 100.0%
?  /usr/local/Cellar/rpm2cpio/1.3: 2 files, 8.0K, built in 2 seconds
[~]$ 
```


### 実行環境/OSのバージョン

```
[~]$ sw_vers 
ProductName:	Mac OS X
ProductVersion:	10.9.3
BuildVersion:	13D65
[~]$ 
```

## rpmからファイルを取り出す

```
rpm2cpio foobar.rpm | cpio -id
```


### 実行結果

* rpmファイルをダウンロード

```
[centos6]$ wget http://ftp.riken.jp/Linux/centos/6.5/os/x86_64/Packages/kernel-devel-2.6.32-431.el6.x86_64.rpm
--2014-07-26 19:47:25--  http://ftp.riken.jp/Linux/centos/6.5/os/x86_64/Packages/kernel-devel-2.6.32-431.el6.x86_64.rpm
Resolving ftp.riken.jp... 134.160.38.1
Connecting to ftp.riken.jp|134.160.38.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9167492 (8.7M) [text/plain]
Saving to: 'kernel-devel-2.6.32-431.el6.x86_64.rpm'

100%[=================================================================================================================================================================================>] 9,167,492    711KB/s   in 10s    

2014-07-26 19:47:37 (865 KB/s) - 'kernel-devel-2.6.32-431.el6.x86_64.rpm' saved [9167492/9167492]

[centos6]$ 
```

* rpmファイルをからファイルを取り出す

```
[centos6]$ rpm2cpio.pl kernel-devel-2.6.32-431.el6.x86_64.rpm | cpio -id
./usr/src/kernels/2.6.32-431.el6.x86_64/include/linux/netfilter/xt_connmark.h: File on disk is not older; skipping.
./usr/src/kernels/2.6.32-431.el6.x86_64/include/linux/netfilter/xt_dscp.h: File on disk is not older; skipping.
./usr/src/kernels/2.6.32-431.el6.x86_64/include/linux/netfilter/xt_mark.h: File on disk is not older; skipping.
./usr/src/kernels/2.6.32-431.el6.x86_64/include/linux/netfilter/xt_rateest.h: File on disk is not older; skipping.
./usr/src/kernels/2.6.32-431.el6.x86_64/include/linux/netfilter/xt_tcpmss.h: File on disk is not older; skipping.
./usr/src/kernels/2.6.32-431.el6.x86_64/include/linux/netfilter_ipv4/ipt_ecn.h: File on disk is not older; skipping.
./usr/src/kernels/2.6.32-431.el6.x86_64/include/linux/netfilter_ipv4/ipt_ttl.h: File on disk is not older; skipping.
./usr/src/kernels/2.6.32-431.el6.x86_64/include/linux/netfilter_ipv6/ip6t_hl.h: File on disk is not older; skipping.
53295 blocks
```
git contribを使う

# git contribを使う
gitの中にある[contrib](https://github.com/git/git/tree/master/contrib)に便利ツールがいくつもあるので、それらをいくつか調べてみた。

※ $(CONTRIB_PATHT)が出てきた時は、git clone http://github.com/git/git をして、その中にある[contrib](https://github.com/git/git/tree/master/contrib)の事を指しています。

## completion
おすすめ度：★★★★★
現在のbranch名の表示や、補完をしてくれる。

参考：[Gitブランチ名を__git_ps1でbashプロンプトに表示 - 130単位](http://d.hatena.ne.jp/deeeki/20110402/git_branch_ps1)

## git-jump
おすすめ度：★☆☆☆☆
コンフリクトしたファイルや、変更したファイルを簡単に開ける。

#### 導入
```bash
$ chmod +x $(CONTRIB_PATH)/git-jump/git-jump
$ ln -s $(CONTRIB_PATH)/git-jump/git-jump /usr/bin/git-jump
```

#### 使い方
```bash
$ git jump [diff | merge | grep] 
```

git diffでヒットしたファイル, コンフリクトしているファイル, grepでヒットしたファイルを開く事ができます。
複数ファイルがヒットした場合、最初の1つしか開けない気がします。

なお、開くエディタはcore.editorで指定しているエディタです。
どうもemacsにしているとうまく動作しない模様。
（うまく使う方法をご存じの方、是非教えてください。。）

## diff-highlight
おすすめ度：★★★★★
git diffの表示をgithubっぽくする
どこが変わっているかをハイライトしてくれるので非常にdiffが見やすくなります。

#### 導入
```bash
$ chmod +x $(CONTRIB_PATH)/diff-highlight/diff-highlight
$ ln -s $(CONTRIB_PATH)/diff-highlight/diff-highlight /usr/bin/diff-highlight

$ git config --global pager.log "diff-highlight | less"
$ git config --global pager.show "diff-highlight | less"
$ git config --global pager.diff "diff-highlight | less"
```

参考：[Git の diff を美しく表示するために必要なたった 1 つの設定 #git - 詩と創作・思索のひろば (Poetry, Writing and Contemplation)](http://motemen.hatenablog.com/entry/2013/11/26/Git_%E3%81%AE_diff_%E3%82%92%E7%BE%8E%E3%81%97%E3%81%8F%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%9F%E3%81%A3%E3%81%9F_1_%E3%81%A4%E3%81%AE%E8%A8%AD)
↑　どんな感じの表示になるかも、見やすく載せてくださってます

## workdir
おすすめ度：★★★☆☆
複数ブランチ開発したいので、git cloneを……といった時に重宝する

### 導入
```bash
$ chmod +x $(CONTRIB_PATH)/workdir/git-new-workdir
$ ln -s $(CONTRIB_PATH)/workdir/git-new-workdir /usr/bin/git-new-workdir
```

### 使い方
```bash
$ git new-workdir <repository> <new_workdir> [<branch>]
```

ソフトリンクを使うようなので高速です。
ただ、僕はgit stash; git checkout branch; をする事が多いので使う場面は少なそう。

## emacs
おすすめ度：★☆☆☆☆
emacs上でgit statusやblameの表示などをサポートする

### 導入
```bash
$ cd $(CONTRIB_PATH)/emacs
$ make
```

```cl:~/.emacs
(add-to-list 'load-path "$(CONTRIB_PATH)/emacs")
(require 'git)
(require 'git-blame)
```
~/.emacsにこれを追記する

### 使い方
emacsでファイルを開いている状態で
M-x git-
でtab補完して色々使ってみると良いかと思います。

僕はemacsもvimもバリバリにカスタマイズしてゴリゴリ使う人ではないので便利なのか……？　という感じでしたが、便利なのかも。

## subtree
おすすめ度：★★★☆☆
submoduleと違って内部の物として外部のレポジトリを用いる。
git v1.7.11以降では標準装備だそうです。

### 導入
```bash
$ cd $(CONTRIB_PATH)
$ make
$ make install
$ ln -s git-subtree /usr/bin/git-subtree
```

### 使い方
[git subtree使ってみた](http://qiita.com/taizawa/items/64dddf308150c1317705)

--

他にも色々あるので、興味がある人は調べてみるといいと思います。
個人的には、completionとdiff-highlightは必須で他は結局使わなさそうだなぁという印象でした。
ansible個人的メモ＆Tips

ansibleを使い始めたので覚えておきたいことを個人的にメモ。

尚、本家のドキュメントしか情報ソースにしていません。本家のドキュメントは素晴らしく優秀です。
http://docs.ansible.com/


## タスクのinclude

* includeでタスクを一纏めにして外部ファイルに書ける。これは、whenを付けてある条件時にのみ実行が可能。

```yaml
- include: when_include.yml
  when: env_name == 'dev'
```

* また、タスクを纏めたファイルを作成し、変数値を分けて何度も実行できる。共通的な処理の切り出しに使える。

```yaml
- include: supervisor_job.yml job_name=job1
- include: supervisor_job.yml job_name=job2
- include: supervisor_job.yml job_name=job3
- include: supervisor_job.yml job_name=job4
- include: supervisor_job.yml job_name=job5
```
上の例だと`supervisor_job.yml`の中で`{{ job_name }}`として変数値を参照可能。

* しかし、今のところ上の例を以下のように`with_items`で回すことはできないみたい・・・。

```yaml
vars:
  job_names:
    - job1
    - job2
    - job3
    - job4
    - job5

tasks:
  - include: supervisor_job.yml job_name={{ item }}
    with_items: job_names
```

2015/12/21追記：

include + withはansible2.0で可能になった模様です。
http://qiita.com/t_nakayama0714/items/4bcca0dd70a228c5b73b
↑大感謝！

## whenとwith_items

`when`と`with_items`を同時に指定した場合、
`when`よりも先に`with_items`が評価され、
`with_items`のループ各処理に対して`when`条件が評価される。
つまり、`item`変数値を`when`条件に含めることも可能。

```yaml
- debug: msg="job1 only"
  with_items: job_names
  when: item == "job1"
```

## command, shell

* リターンコードが0以外だとタスクがfail扱いになるので、適宜`ignore_errors`。
* 毎回`changed`になるので、好ましくない場合には`changed_when`を使う。
* `changed_when: False`だと常に`changed`にならない。以下のように記述すればリターンコードで制御できる。

```yaml
- command: 'diff job1.conf job2.conf'
  register: ret
  changed_when: ret.rc != 0 # ファイルの差分がある場合にchanged
  ignore_errors: yes
```

* `register`で実行結果を取れば、リターンコードや標準出力など様々な結果を使える。
  retにregisteしたら、ret.stdout.find('str')やret.stdout_lines、ret|changedなど色々便利。

めんどくさいので、`when` + `with_items`含めて例を。

コンフィグファイルをテンプレート通してリリースする時、リリース対象から消したファイルを実際に消すタスク。
（一旦全部消すと`changed`の制御がアレだし、もっとスマートな方法はないものか・・・）

```yaml
vars:
  configs
    - conf1
    - conf2
    - conf3

-------------------------------------

- name: release configs
  template: src=templates/{{ item }} dest=/etc/supervisor.d/{{ item }} mode=0644
  with_items: configs
# 全リリース後、差分を取ってなくなったファイルがあれば消す。
- name: list current configs
  shell: 'command ls -1 /etc/supervisor.d'  # リリース後のコンフィグファイルのリストを取る。
  changed_when: False
  register: config_list
- name: delete configs
  file: path=/etc/supervisor.d/{{ item }} state=absent
  with_items: config_list.stdout_lines      # コンフィグファイルそれぞれに対して、
  when: item not in configs                 # リリースするコンフィグ一覧から抜けているか判定。
```

リリース対象から外したいコンフィグファイルがある場合、
`configs`の変数からそのコンフィグを抜けば、
このタスクを叩くと削除される。

## ベストプラクティス構成での変数セット

普通にベストプラクティス構成を見てみると、host_vars、group_vars、roleごとのvarsしかない。
気づきにくい/やや不便なことがある。

* 全グループ全ホストで使う共通変数は、`group_vars/all.yml`に記述すればよい。
* インベントリを例えば「staging」「production」などと書いて環境ごとに分ける場合、この環境ごとに変数を書きたいことがある。
  そんな場合はインベントリ自体に変数を書く。
  環境全体で使う場合には、グループ単位の変数ではなく`[all:vars]`とすればいい。

```ini:staging
[all:vars]
hoge=fuga
hogehoge=fugafuga
```

* しかし、この方法でインベントリに変数を書いていくと、host_varsやgroup_varsに変数を纏めていく構想に反していて気味悪い。そこで、

```ini:staging
[all:vars]
env_name=staging
```

と書いておき、playbookの方でvar_filesを記述。

```yaml:staging.yml
- hosts: app_hosts
  sudo: yes
  vars_files:
    - "env_vars/{{ env_name }}.yml"
  roles:
    - supervisor
```

env_varsというディレクトリを掘りそこに環境ごとに変数を書いていくとすっきりする。
Office365でパスワードど忘れしたが、iPhoneだけはOKな時からの生還

# 背景

詳しくかけません。お察しくださいｗ

# やり方

## 概要

iPhoneのSafariはiPhoneからはサイトのソース見ることすら出来ない（俺貧弱調べ）。
しかし、MacのSafariとつなげることがiOS6から出来るようになった。これは、iOS向けのSafariなページをデバッグする事が目的らしい。

ってことは、iPhoneをMacにつなげれば、iPhoneのSafariのDOMの内容を表示できる。つまり、保存されてるが、マスク表示な文字列も直接DOM操作で内容を参照できるハズだ。

## 詳細は関連記事参照

## まとめ

```
console.dir(document.getElementsByTagName("input")[1].value)
```

これでパスワードが分かりました。

# 関連記事

- [Office365でパスワードど忘れしたが、iPhoneだけはOKな時からの生還](http://kjunichi.cocolog-nifty.com/misc/2014/07/office365iphone.html)
CircleCI上でElasticsearchを設定する

CircleCI上でElasticsearchを動作させてテストする方法を調べてみました。

# circle.ymlの設定

CircleCI上での設定はcircle.ymlというファイルで行います。この設定をElasticSearch用に記載する事で、CircleCI上でElasticSearchを動かしてテストできるようになります。

基本的には

```
machine:
  services:
    - elasticsearch
```

を設定すれば良いです。ただし、このままだとElasticsearchのバージョンが0.90.2になってしまうので、指定したバージョンを使いたい場合は以下のように追記が必要です。 

```
machine:
  services:
    - elasticsearch

dependencies:
  cache_directories:
    - elasticsearch-1.1.0
  post:
    - if [[ ! -e elasticsearch-1.1.0 ]]; then wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.1.0.tar.gz && tar -xvf elasticsearch-1.1.0.tar.gz; fi
    - elasticsearch-1.1.0/bin/elasticsearch: {background: true}
```

dependenciesのcache_directoriesを指定する事によって毎回Elasticsearchをインストールするコストを省く事ができます。

このように設定してElasticsearch用のテストをCircleCI上でテストすると

```
HTTPConnectionPool(host='127.0.0.1', port=9200): Max retries exceeded with url: /haystack/modelresult/_search (Caused by <class 'socket.error'>: [Errno 111] Connection refused)
.
```

のようなElasticsearchの接続エラーがでなくなります。

![CircleCITest](https://qiita-image-store.s3.amazonaws.com/0/38387/93da9b25-67f4-1b5e-eabf-e7917dc3ea41.jpeg)

# 参考

* Install a custom version of Elasticsearch https://circleci.com/docs/installing-elasticsearch
* Django でのテスト http://qiita.com/seizans/items/2f78f2a263c63c36b267
UbuntuでDocker環境を構築


#Dockerのインストール
[ここ](http://tkuchiki.hatenablog.com/entry/2014/05/13/105754)を参考にインストール

#環境変数の追加
``export DOCKER_HOST=tcp://127.0.0.1:4243``

#デーモンの起動
``docker -d``

#リポジトリからdebianイメージを取得
``docker pull debian``

#debianイメージ確認
docker images

#wheezyのイメージを起動して端末へ入る
docker run -it --name debian debian:wheezy /bin/bash
MacOSXのバージョンをコマンドラインで確認するには



## コマンドライン

### 

```
sw_vers 
```


### 実行結果

```
[~]$ sw_vers 
ProductName:	Mac OS X
ProductVersion:	10.9.3
BuildVersion:	13D65
[~]$ 
```

## プロダクト名のみを出力する

```
sw_vers -productName
```

### 実行結果


```
[~]$ sw_vers -productName
Mac OS X
[~]$ 
```

## プロダクトバージョンのみを出力する

```
sw_vers -productVersion
```

### 実行結果
```
[~]$ sw_vers -productVersion
10.9.3
[~]$ 
```

## ビルドバージョンのみを出力する

```
sw_vers -buildVersion
```

### 実行結果

```
[~]$ sw_vers -buildVersion
13D65
[~]$ 
```



## 情報源

* [sw_vers(1) Mac OS X Manual Page](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/sw_vers.1.html)
Bootstrap WYSIWYG Editorのsummrnoteで本文の文字数をカウント

summrnoteで入力した本文の文字数をカウントできるようにするカスタマイズです。

Super Simple WYSIWYG Editor on Bootstrap
http://hackerwins.github.io/summernote/

A simple, Twitter style character counter for HTML input fields.
https://github.com/dtisgodsson/jquery-character-counter

イメージとして、以下で文字数を取得できれば便利なのですが

```js
$("#body").val().length
```

実際にはHTML上に書き込まれていくため、
summrnote#code を使って以下のように文字数を取得します。

```js
$('#body').code().length;
```

ということで、ここから具体的な話に移ります。

まずcharacter-counterの初期化をしましょう。myCounterで文字数のカウントを行います。

```js
    $('#body').characterCounter({
      limit: 1024,
      myCounter: function() {
        return $('#body').code().length;
      }
    });
```

summernoteの初期化ではonkeyupとonpasteの発生する都度、文字数をカウントするよう指定します。

```js
    $('#body').summernote({
      height: 300,
      lang: 'ja-JP',
      toolbar: [
        ['style', ['bold', 'italic', 'underline', 'clear']],
        ['fontsize', ['fontsize']],
        ['color', ['color']],
        ['para', ['ul', 'ol', 'paragraph']],
        ['height', ['height']],
        ['insert', ['picture', 'video']],
      ],
      onkeyup: function(e) {
        $('#body').trigger("summrnoteKeyup");
      },
      onpaste: function(e) {
        $('#body').trigger("summrnotePaste");
      },
    });
```

次にjquery.charactercounter.jsをちょっといじります。
defaultsにmyCounterを追加します。

```js
        var defaults = {
            exceeded: false,
            counterSelector: false,
            limit: 150,
            counterWrapper: 'span',
            counterCssClass: 'text-primary',
            counterFormat: '%1',
            counterExceededCssClass: 'text-warning',
            onExceed: function(count) {},
            onDeceed: function(count) {},
            customFields: {},
            myCounter: null, // <-- ここ！
        }; 
```

文字数をカウントしている箇所を以下のようにmyCounterがあればそれを使うようにします。

```js
        function checkCount(element)
        {
            var characterCount = (options.myCounter == null ? $(element).val().length : options.myCounter()) ;

```

イベントのバインドにsummrnoteKeyupとsummrnotePasteを追加してあげます。

```js
     function bindEvents(element)
     {
         $(element)
             .bind("keyup", function () { 
                 checkCount(element); 
             })
             .bind("paste", function () { 
                 var self = this;
                 setTimeout(function () { checkCount(self); }, 0);
             })
             .bind("summrnoteKeyup", function () { 
                 checkCount(element); 
             })
             .bind("summrnotePaste", function () { 
                 var self = this;
                 setTimeout(function () { checkCount(self); }, 0);
             });
     }
```

以上で、summernoteで書きながら文字数がカウントされるようになります。

すっきり。
Homebrewをアンインストールするには

## 実現したいこと

安全にHomebrewのアンインストールを実行する。Homebrew 公式サイトが想定しているアンインストール方法を利用する。

## 実行コマンド

```
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
```

## 補足

### uninstallコマンド

* https://raw.githubusercontent.com/Homebrew/install/master/uninstall

## 情報源

* [How do I uninstall Homebrew?](https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/FAQ.md#how-do-i-uninstall-homebrew)
* [Uninstall Homebrew](https://gist.github.com/mxcl/1173223)
CSSフレームワークまとめ

自分でもCSSフレームワークを作りたく、
巷にはどんなフレームワークがあるのか、ベンチマークをとる意味も含め、調べてみました。


# Twitter Bootstrap
![bootstrap](https://qiita-image-store.s3.amazonaws.com/0/1665/794f24f1-96d2-8461-5bf8-208bb9793058.png)

http://getbootstrap.com/

一番有名で一番使われてますね。
CSSフレームワークの王道。
v3.0からフラットになりました。

現在、v4がα版として出ています。
http://v4-alpha.getbootstrap.com/

# Foundation
![foundation](https://qiita-image-store.s3.amazonaws.com/0/1665/5a36a16b-5ddf-0260-7d8c-203e0ddbc889.png)

http://foundation.zurb.com/

こちらも有名。
BootstrapとこちらのFoundationは、幅広く用意されている感じがします。

# Primer
![primer.png](https://qiita-image-store.s3.amazonaws.com/0/1665/d54d8d97-a445-d699-2a3b-9ad79e3c1b35.png)

http://primercss.io/

Github製。もちろん見た目もGithub :octocat: 。

# Pure
![pure](https://qiita-image-store.s3.amazonaws.com/0/1665/677c21a3-8212-d373-b092-3b8b3a129e24.png)

http://purecss.io/

YUIからでているライブラリ。
クラスのつけかたがシンプルな印象です。


# Gumby
![gumby](https://qiita-image-store.s3.amazonaws.com/0/1665/a7d7db52-7504-eaa0-d6f5-7d92f0854cdd.png)

http://gumbyframework.com/

こちらもなかなかのボリュームです。
Sass製。


# Cardinal
![cardinal](https://qiita-image-store.s3.amazonaws.com/0/1665/edb00e35-53eb-2f18-24ab-a4534c476f4c.png)

http://cardinalcss.com/

LESS製。
ミニマムでシンプルです。


# INK
![ink](https://qiita-image-store.s3.amazonaws.com/0/1665/1d81f4ef-b514-4016-8c6b-18806e680c08.png)

http://ink.sapo.pt/

Sass製。
なかなかクオリティが高いです。


# Skeleton
![skeleton](https://qiita-image-store.s3.amazonaws.com/0/1665/37fbfe4b-2fe1-feaf-4c86-67ab2e8e258e.png)

http://www.getskeleton.com/

その名の通り、ベストオブミニマム！

# Atlassian UI
![aui](https://qiita-image-store.s3.amazonaws.com/0/1665/7027bd76-16df-5029-d332-f8ef51c50576.png)

https://developer.atlassian.com/design/latest/

アトラシアン製品で使われいるUIをライブラリとして公開しているようです。


# 番外編

## GitHub CSS Guideline

https://github.com/styleguide/css
フレームワークとして提供されていませんが、GitHubのガイドラインはなかなか参考になります。
Xcode6 Beta4 で 「dyld`dyld_fatal_error」がでる場合の対処方法

Xcode6 Beta4 から、デフォルトで作成されるプロジェクトのファイルの内容が変更されました。そこで新しいプロジェクトで作り直そうと思い、全く同名のプロジェクトを作成し、ビルド&実行したところ・・・

`dyld dyld_fatal_error` や `EXC_BREAKPOINT` といったエラーが出ました。
新しく作ったプロジェクトなのに、なぜエラーを吐いたのか原因がわかったので共有。


## 対処方法
Xcodeの設定から `Preferences / Location / Derived Data ` まで行き、 `Advanced...` ボタンをクリック

`Custom` にチェックを入れて、`Relative to Workspace` に変更します。

## 原因
古いXcodeで生成されたビルドファイルを再度読み込もうとしてエラーを吐いていた。

## 根本的解決方法
上記の方法では、プロジェクトの作り直しを行った場合において、問題はなく実行できるのですが、ビルド済みデータがリポジトリに含まれてしまうなどあまりよろしくありません。(場合によっては楽なのですが・・)

端的に言うと、 `Shift + Cmd + K` を押して `Clean` すると、ビルド済みファイルが消えるので、再度 ビルド&実行するとちゃんと起動します。

## まとめ
- ググっても出ないって辛い
二つのリストから重複しない行だけを取得する

# 二つのリストから重複しない行だけを取得する

* list1.txt

```
757931047
538873878
353848789
435987579
564739853
543739306
786059993
762459875
574765987
```

* list2.txt

```
543739306
439765868
564739853
248075854
353848789
786059993
757931047
349857498
762459875
589403679
734775596
574765987
```

* コマンド

```
$ cat ./list* | sort | uniq -u | sed '/^$/d'
248075854
349857498
435987579
439765868
538873878
589403679
734775596
```

* 逆に重複だけ

```
$ cat ./list* | sort | uniq -d | sed '/^$/d'
353848789
543739306
564739853
574765987
757931047
762459875
786059993
```

* 教えてもらう前に書いたの

```
$ cat ./list* | sort | uniq -c | sed 's/  * / /g' | grep '^ 1' | cut -d' ' -f3 | sed '/^$/d'
248075854
349857498
435987579
439765868
538873878
589403679
734775596
```

* もっとうまく出来そう感ある。
 * uオプションで出来た
* パイプを繋げて組み合わせて使えるのはIDEには出来ないUNIXコマンドの魅力
* 昨日、酒飲みながら書いたら思いっきり間違えていたので削除して書き直し
Macにgoをインストールする


`golang`のインストールと初期設定です。


パッケージマネージャーやシェルによってコマンドは変化しますので気をつけてください。
##Homebrow

```bash:
$ brew install go

$ cat << EOF >> ~/.zshrc
export GOROOT=/usr/local/opt/go/libexec
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
EOF
```


##golang-crosscompile

指定された場所にパスを指定し、サポートされているプラットフォーム(windowsなど)のビルドを行います。

[golang-crosscompile](https://github.com/davecheney/golang-crosscompile)

```bash:
$ mkdir -p ~/dotfiles/.zsh/tools/go

$ git clone https://github.com/davecheney/golang-crosscompile !$/golang-crosscompile

$ echo "source !$/crosscompile.bash" >> ~/.zshrc

$ source ~/.zshrc

$ go-crosscompile-build-all
```

##go get

`$GOPATH/bin`にコマンドがインストールされます。

```bash:
$ cat << EOF | $SHELL
go get code.google.com/p/go.tools/cmd/goimports
go get code.google.com/p/go.tools/cmd/godoc
go get code.google.com/p/go.tools/cmd/vet
go get code.google.com/p/go.tools/cmd/cover
go get github.com/nsf/gocode
go get github.com/golang/lint
go get code.google.com/p/rog-go/exp/cmd/godef
go get github.com/jstemmer/gotags
EOF
```

##リンク

<a href="http://qiita.com/shiena/items/870ac0f1db8e9a8672a7" target="_blank">vimのGoサポートが手厚くて打ち震えている - Qiita</a>

<a href="http://qiita.com/Jxck_/items/02185f51162e92759ebe" target="_blank">Go のクロスコンパイル環境構築 - Qiita</a>

<a href="http://deeeet.com/writing/2014/07/23/github-release/" target="_blank">Go言語のツールをクロスコンパイルしてGithubにリリースする | SOTA</a>
CentOS7にdockerをインストール


* CentOS6のが入っていたので一度消す

```bash
# rpm -e epel-release
# rpm -ivh http://linux.mirrors.es.net/fedora-epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm
```

* updateしておかないとel6がインストールされてしまう

```bash
# yum update
# reboot
```

* インストール

```bash
# yum install docker-io
インストール:
  docker-io.x86_64 0:1.0.0-1.el7

$ docker --version
Docker version 1.0.0, build 63fe64c/1.0.0
```

# 参考
* [Life with open mind: DockerをCentOS 7にインストールする方法](http://blog.yuryu.jp/2014/07/docker-centos7.html)
S3のbucketを別のbucketにsyncしてバックアップする

万が一bucketをヒューマンエラーなどで消失してしまった場合のために
bucketを別のbucketにコピーする方法を確認した。

バックアップ用のbucketはLifecycleを`0day`にして
Glacierに保存しておくようにすれば良いかと思う。

- S3 にファイルをアップロード

```
$ aws s3 cp --acl private --sse file-one.txt s3://kenjiskywalker-one/foo/
upload: ./file-one.txt to s3://kenjiskywalker-one/foo/file-one.txt
$
$ aws s3 sync --dryrun s3://kenjiskywalker-one/foo/ s3://kenjiskywalker-two/foo/
(dryrun) copy: s3://kenjiskywalker-one/foo/file-one.txt to s3://kenjiskywalker-two/foo/file-one.txt
$
$ aws s3 cp --acl private --sse file-two.txt s3://kenjiskywalker-one/foo/
upload: ./file-two.txt to s3://kenjiskywalker-one/foo/file-two.txt
$
```

- S3 のバケット同士を sync

```
$ aws s3 sync --acl private --sse --dryrun s3://kenjiskywalker-one/foo/ s3://kenjiskywalker-two/foo/
(dryrun) copy: s3://kenjiskywalker-one/foo/file-two.txt to s3://kenjiskywalker-two/foo/file-two.txt
(dryrun) copy: s3://kenjiskywalker-one/foo/file-one.txt to s3://kenjiskywalker-two/foo/file-one.txt
$
$ aws s3 sync --acl private --sse s3://kenjiskywalker-one/foo/ s3://kenjiskywalker-two/foo/
copy: s3://kenjiskywalker-one/foo/file-one.txt to s3://kenjiskywalker-two/foo/file-one.txt
copy: s3://kenjiskywalker-one/foo/file-two.txt to s3://kenjiskywalker-two/foo/file-two.txt
$
$ aws s3 ls s3://kenjiskywalker-one/foo/
2014-07-26 15:57:17          0 file-one.txt
2014-07-26 15:57:43          0 file-two.txt
$
$ aws s3 ls s3://kenjiskywalker-two/foo/
2014-07-26 15:58:00          0 file-one.txt
2014-07-26 15:58:01          0 file-two.txt
$
```

- `--delete` オプションの確認

```
$ aws s3 rm s3://kenjiskywalker-one/foo/file-one.txt
delete: s3://kenjiskywalker-one/foo/file-one.txt
$
$ aws s3 ls s3://kenjiskywalker-one/foo/
2014-07-26 15:57:43          0 file-two.txt
$
$ aws s3 ls s3://kenjiskywalker-two/foo/
2014-07-26 16:00:45          0 file-one.txt
2014-07-26 15:58:01          0 file-two.txt
$
$ aws s3 sync --acl private --sse --delete --dryrun s3://kenjiskywalker-one/foo/ s3://kenjiskywalker-two/foo/
(dryrun) delete: s3://kenjiskywalker-two/foo/file-one.txt
$
$ aws s3 sync --acl private --sse --delete s3://kenjiskywalker-one/foo/ s3://kenjiskywalker-two/foo/
delete: s3://kenjiskywalker-two/foo/file-one.txt
$
$ aws s3 ls s3://kenjiskywalker-one/foo/
2014-07-26 15:57:43          0 file-two.txt
$
$ aws s3 ls s3://kenjiskywalker-two/foo/
2014-07-26 15:58:01          0 file-two.txt
$
```

- `--delete` オプションなしの確認

```
$ aws s3 ls s3://kenjiskywalker-one/foo/
2014-07-26 15:57:43          0 file-two.txt
$ aws s3 ls s3://kenjiskywalker-two/foo/
2014-07-26 16:30:36          0 file-one.txt
2014-07-26 15:58:01          0 file-two.txt
$
$ aws s3 sync --acl private --sse --dryrun s3://kenjiskywalker-one/foo/ s3://kenjiskywalker-two/foo/
$
```
vagrant destroy && vagrant up を実行するシェルスクリプト

Vagrantfileの調整や勉強時に。


***
2014/07/26
スクリプトを使わずに一行で同じことを行える方法を教えて頂きました。
>```
>$ vagrant destroy -f && vagrant up
>```

-f(force)オプション：強制的に実行。
command && command: 続けてコマンドを実行。

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

***

expectがインストールできていること前提です。

```
$ expect -v
expect version 5.44.1.15
```

なければ
```$ sudo yum install expect```

```bash:va-reup.sh
#!/bin/sh

expect -c "
  set timeout 10
  spawn vagrant destroy $1
  expect \"Are you sure you want to destroy\"
  send \"y\r\"
  interact
"
vagrant up $1
```

引数にvm名を指定できます。
```$ sudo ./va-reup.sh vm名```
【個人メモ】グラフ描画ライブラリ Gadfly

# Gadfly

ちょっとしたメモ。
[Julia](http://julialang.org/)のグラフ描画ライブラリはないか、と思って探したら見つけた。

[Gadfly](http://dcjones.github.io/Gadfly.jl/)

# インストール

Juliaがインストールされていることが前提。

juliaのREPLを立ち上げる

```jl
> Pkg.add("Gadfly")
```

これでOK

# 試しにグラフを描画する

plot関数を利用して、グラフの描画を試してみる

```
> using Gadfly
> plot(x=rand(10), y=rand(10))
```

すると、ブラウザが立ち上がり、描画されたグラフが表示される

![Screen Shot 2014-07-26 at 14.00.19.png](https://qiita-image-store.s3.amazonaws.com/0/3985/16c2b5ae-3236-b721-d032-c105bfe73f4e.png)

# RDatasetsを使ってグラフを描画

[RDatasets.jl](https://github.com/johnmyleswhite/RDatasets.jl)を使ってサンプルデータを読み込んでグラフを描画してみる。
RDatasets.jlは[RDatasets](https://github.com/vincentarelbundock/Rdatasets)をJuliaで利用できるようにしたライブラリ。

## RDatasetsのインストール

```jl
> Pkg.add("RDatasets")
> using RDatasets
```

## RDatasetsのデータを利用してグラフを描画

```jl
>  plot(dataset("car", "SLID"), x="Wages", color="Language", Geom.histogram)
```

![Screen Shot 2014-07-26 at 14.15.20.png](https://qiita-image-store.s3.amazonaws.com/0/3985/0e340e24-bed2-a580-549b-a96a3458e349.png)
Ansibleでパスワードを暗号化して管理する

# Ansibleでパスワードを暗号化して管理する

Ansibleのplaybook内にsudoやsshパスワードを管理したい場合がよくありますが、プレーンテキストのままgitリポジトリに放り込むと非常に嫌な感じがします。暗号化した状態でもちょっと嫌ですが、生の状態よりマシかもしれません。
ホストグループ別にgroup_varsディレクトリにパスワードを書いたyamlファイルを作成し、そのファイルを暗号化します。

## Ansible実行環境

| Item             | Value           |
|:-----------------|:----------------|
| OS               | Mac OS X 10.9.4 |
| Ansible          | 1.5.4           |

## 対象ホスト

| Item             | Value          |
|:-----------------|:---------------|
| 対象ホスト       | 192.168.240.34 |
| OS               | CentOS 7       |
| 認証方式         | パスワード認証 |
| sshユーザー      | ansible        |
| sshパスワード    | password       |
| sudoパスワード   | password       |
| 暗号化パスワード | vaultpass      |

## ansibleのファイル構成
```
.
├── hosts
├── group_vars
│   └── servers.yml
├── site.yml
├── roles
│   └── common
│       └── tasks
│           └── main.yml
└── vars
     └── main.yml
```

### 各ファイルの内容
* hosts

```
[servers]
192.168.240.34
```
* group_vars/servers.yml
    * hosts内に[]で囲って記述したグループ名.ymlをgroup_varsディレクトリに作成

```yaml
---
ansible_ssh_user: ansible
ansible_ssh_pass: password
ansible_sudo_pass: password
```
* site.yml
    * hosts
        * グループ名を指定
    * var_files
        * グローバルスコープの変数を記述したファイルパスを指定
    * roles
        * 実行するroleを指定

```yaml
---
- hosts: servers
  vars_files:
    - vars/main.yml
  roles:
      - common
```

* roles/common/tasks/main.yml

```yaml
- name: Install yum packages
  action: yum name={{ item }} state=installed
  with_items:
    - wget
    - tcpdump
    - bind-utils
    - telnet
```

* vars/main.yml

```yaml
---
sudo: yes
```

## 暗号化・復号

### group_vars/servers.ymlを暗号化してplaybookを実行

```
echo vaultpass > ~/.ansible_vault_pass # こいつはgitに格納しない
ansible-vault encrypt group_vars/servers.yml --vault-pass ~/.ansible_vault_pass
# --vault-pass を指定しない場合は、パスワードを聞いてくる
ansible-playbook site.yml -i hosts --vault-pass ~/.ansible_vault_pass
```

### group_vars/servers.yml を復号

```shell
ansible-vault decrypt group_vars/servers.yml --vault-pass ~/.ansible_vault_pass
```

### group_vars/servers.yml を暗号化したまま編集

```shell
ansible-vault edit group_vars/servers.yml --vault-pass ~/.ansible_vault_pass
```
golang ライブラリの使い方を調べるためのgithub上のコード等の検索方法



概要
====

golangのリファレンスはサンプルがなくて、正しい使い方わからないものが多すぎ。

[Gunosy.go#7](http://gunosygo.connpass.com/event/7643/)で
皆さんどうやってライブラリ等の使い方を調べてますか?って聞いてみたところ
googleで```site:github filetype:go```で絞ればいけそうって話があがりました。

実際やってみたらそれなりに使えそうだったので、[Chromeに検索エンジンに登録](https://www.google.co.jp/search?q=chrome+%E6%A4%9C%E7%B4%A2%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E7%AE%A1%E7%90%86)すれば良いかも
ということでやってみた。

登録手順
=======


1. googleの検索文字列入力欄で右クリックメニューを表示し、```検索エンジンとして追加...```を選択
![スクリーンショット 2014-07-26 14.24.40.png](https://qiita-image-store.s3.amazonaws.com/0/26566/15e4b32a-ff1a-0fda-d2d5-839b2032f236.png "スクリーンショット 2014-07-26 14.24.40.png")

2. 以下の通りに有力
名前:```githubでgolangを検索``` 
キーワード: ```githubgo``` 
URL: ```{google:baseURL}search?as_q=%s&as_sitesearch=github.com&as_filetype=go``` 
![スクリーンショット 2014-07-26 14.42.01.png](https://qiita-image-store.s3.amazonaws.com/0/26566/a619f48b-4b74-f23a-9249-eece5b522946.png "スクリーンショット 2014-07-26 14.42.01.png")



使用方法
=======

URL窓で```githubgo```と入力しスペースキーを押すと以下のような表示となり、
あとは好きなワードで検索する
![スクリーンショット 2014-07-26 14.37.49.png](https://qiita-image-store.s3.amazonaws.com/0/26566/2665c7ba-9f5c-a6e3-e552-c767e9cb8c56.png "スクリーンショット 2014-07-26 14.37.49.png")
ファイル名がドットから始まるファイルをまとめて cp や mv できないときの対処方法

`cp` や `mv` で `*` (ワイルドカード) を使ってまとめて扱いたいときに、ファイル名がドットから始まるファイルがスルーされてしまいました。スルーされないようにするには下記のコマンドを使います。

```bash
shopt -s dotglob
```

その後はこれまで通り `cp ` や `mv` を実行すれば効力が発揮されます。

```
mv /path/to/directory/* /path/to/target/
```

## shopt コマンドとは

`shopt` コマンドはシェルのオプションを変更することができるコマンドで、`-s` は後続のオプションをセットするオプション、`dotglob` はセットするとファイル名展開の際にファイル名がドットから始まるファイルも含むようになるオプションとのことです。
http://ss64.com/bash/shopt.html

下記を参考にしました。ありがとうございます。
http://askubuntu.com/questions/259383/how-can-i-get-mv-or-the-wildcard-to-move-hidden-files
Vim モーション譜

# Sublime いいよね

昨今の Vim いいよね的な風潮には全く納得がいかない。こんな前近代的な変態エディタがなぜに今更もてはやされているのか。

仕事がら vi/vim 歴十年以上経っているが、いまだ使いこなせず、初心者の域を脱していない。苦手意識を差し引いても、Vim は経験による学習効率が低いツールだと感じている。

技術者のたしなみ程度から、一通りの技を使いこなせるレベルまでの間に、いくつもの越えなければならない壁があるのは確かだ。

その一つはモーションをマスターすることであろう。

# Vim モーション譜

以下の図は、ある状況であるモーションコマンドがどのように作用するのか、その動きを洗い出して《見える化》したものである。

黒く反転したカーソル位置から移動できる位置をモーションコマンドと矢印で示した。同じ場所に移動するのにもいくつものやり方があるが、もっとも単純で基本的と思われるものを太字表示しておく。

 *c* や *d* などとノーマルモードで組み合わせて使ったときに対象となる選択範囲をグレー背景で示した。 ビジュアルモードでは、境界文字の取り方が微妙に異なるので注意してほしい。

基本的に１手（１モーション）による動きのみを集めた。１手でできることは限られているが、オペレーションコマンドと組み合わせたあとでドット(.)コマンドによるリピートに使えるのでこだわっておきたい。しかし一部、２手以上かかるものも参考までに追加し、それは青いフォントで区別した。

行の折り返しによる挙動の違いや、sentence, paragraph を扱うモーションもあるのだが、本稿では英文ではなくコーディングを想定しているのでそれらには触れない。

個々のモーションコマンドの解説は省略するが、マニュアルや、すでに良いまとめが（Qiita内を含め）あるので分からないことはそちらに立ち戻って確認して欲しい。

本稿は Cheat sheet や逆引き的に使えないこともないが、暇なときに眺めて「あー、そこに行くかー」とかつっこみながら楽しんでいただければ幸いである。

一応動作確認しているが、間違いや抜けがあったら指摘してほしい。

## 【基本】

### 左右移動

![vim_basic_hr.png](https://qiita-image-store.s3.amazonaws.com/0/21239/ae5a019f-e7be-d153-029d-daa5a9c1efdd.png)

*g_* はあまりみない。行末の空白文字は忌避されるので、コーディング上は *$* だけで十分だろう。

モーションではないが挿入コマンドの挿入位置も参考まで。

![vim_insert.png](https://qiita-image-store.s3.amazonaws.com/0/21239/289aac74-ebd5-5b61-f0e6-57f8103b816b.png)

### word と WORD の違い

![vim_word.png](https://qiita-image-store.s3.amazonaws.com/0/21239/d7ae182f-7777-b3c4-db65-f3f2da08f124.png)

### アンダースコア区切り

![vim_us.png](https://qiita-image-store.s3.amazonaws.com/0/21239/a05af87d-4630-c7a7-2317-dfa4b6ff6854.png)


サブ単語の先頭文字（アンダースコアの次の文字）に１手で移動したいところだが、*t_* や *f_* では微妙に届かない歯がゆさに悶える。もちろん目標の文字が許せば、*f{char}* で行けるのだが使いまわしがきかない。

サブ単語だけの範囲選択も１手でとれる方法がない。

### カンマ区切り

![vim_csv.png](https://qiita-image-store.s3.amazonaws.com/0/21239/15514bb1-bd79-b006-a88a-d78b81b67f3b.png)

word 系モーションではカンマ( *,* )でいちいち止まるので、count の数え方に気を使う。

一方 WORD 系なら一見楽そうだが、もし要素間のスペースが詰められていたら行けるところはほとんどない。

### 上下移動

![vim_basic_v.png](https://qiita-image-store.s3.amazonaws.com/0/21239/8ea22877-7c23-c563-2a73-ee48b1efd884.png)

ノーマルモードでは行単位、ビジュアルモード( *v* )では文字単位の選択範囲となる。

### ブロック移動

![vim_block.png](https://qiita-image-store.s3.amazonaws.com/0/21239/718987f2-e1c2-2bf3-2abb-9bf9b1e1bdec.png)


 *{* と *}* は空行を区切りとして複数行（ブロック）をスキップする。空行の連続は１区切りとみなされる。

 *(* と *)* は空行とブロックの先頭を移動する。 *(* の１手でブロックの先頭行に移動できるが、逆に最下行へ行く手はない。

## 【応用】

### マークアップ

![vim_mkup.png](https://qiita-image-store.s3.amazonaws.com/0/21239/9546f6e8-704c-e563-db64-e64295bea440.png)

### 代入文

![vim_asgn.png](https://qiita-image-store.s3.amazonaws.com/0/21239/9e90e366-c0a6-162b-ea3a-b852a3765f34.png)

### 関数呼び出し

![vim_func.png](https://qiita-image-store.s3.amazonaws.com/0/21239/55b0ed69-e4e8-7cb8-00c2-f5c9485ef0b4.png)

### JSON

![vim_json.png](https://qiita-image-store.s3.amazonaws.com/0/21239/5f8d122f-3c0d-853d-134d-df178e8252c5.png)

### メソッド

![vim_def.png](https://qiita-image-store.s3.amazonaws.com/0/21239/3563bec4-0d16-9792-e1b1-4f7584862e84.png)


# 参考

* vim-jp: Vim documentation: motion
http://vim-jp.org/vimdoc-ja/motion.html

* 実践Vim 思考のスピードで編集しよう! Drew Neil 著、 新丈径 訳 アスキー・メディアワークス
http://ascii.asciimw.jp/books/books/detail/978-4-04-891659-2.shtml
ちょっとしたHTMLはGitHub Gistに置いてbl.ocks.orgで表示するのがお手軽です

# はじめに

JavaScriptを含んだHTMLを表示するのにGitHubでレポジトリを作って[GitHub Pages]( https://pages.github.com/ )を作るという手もありますが、ちょっとしたHTMLだと、わざわざレポジトリ作るのも面倒です。

FirefoxのBugzillaを見ていたら、[984796 – SVG path getTotalLength returns large incorrect number]( https://bugzilla.mozilla.org/show_bug.cgi?id=984796#c14 )でたまたま見つけた [bl.ocks.org - about]( http://bl.ocks.org/ )が便利だったので紹介します。

# 使い方

1. ```index.html``` というファイル名でGistを作成します。
2. あとは、GistのURLの ```https://gist.github.com``` を ```http://bl.ocks.org``` に置き換えてアクセスすれば表示されます。

[bl.ocks.org - about]( http://bl.ocks.org/ )に上げられている https://gist.github.com/mbostock/1353700 という例だと http://bl.ocks.org/mbostock/1353700 になります。

Gistのタイトルの下にHTMLの内容が表示されて、その下にHTMLのソースが表示されます。こんな感じです。

![Epicyclic Gearing.png](https://qiita-image-store.s3.amazonaws.com/0/3227/e677801c-cfe0-c0d7-7adb-1afb1549d02d.png)

## タイトルやHTMLソースを表示せずにHTMLだけを表示するURLもあります

https://gist.github.com/mbostock/1353700 で"Open in a new window."のリンクをたどると別ウィンドウでHTMLだけが表示されます。

この例だと
http://bl.ocks.org/mbostock/raw/1353700/
というURLになります。

つまり、
http://bl.ocks.org/{{GitHubのアカウント}}/raw/{{GistのID}}
のURLにアクセスすればHTMLだけを表示できます。

この例のスクリーンショットです。

![bl.ocks.org mbostock raw 1353700 .png](https://qiita-image-store.s3.amazonaws.com/0/3227/3b1dce4f-59bf-ea5b-1513-73fe45027d2a.png)

## index.htmlに加えてJavaScriptファイルも利用可能

[bl.ocks.org - about]( http://bl.ocks.org/ )の説明によると、Gistにindex.html以外にファイルを追加してindex.htmlから相対パスで参照すれば利用可能とのことです。

## block一覧のリンクとGistのリンク

http://bl.ocks.org/mbostock/raw/1353700/ のページ最下部の左に
[mbostock](http://bl.ocks.org/mbostock)’s block [#1353700](https://gist.github.com/mbostock/1353700)という表示があり、
アカウント名の部分がblock一覧へのリンク、Gist IDの部分がGistへのリンクになっています。

## block一覧用のサムネイル画像

[bl.ocks.org - about]( http://bl.ocks.org/ )には説明がないのですが、[mbostockさんのブロック一覧]( http://bl.ocks.org/mbostock )と[そのうち1つのGist]( https://gist.github.com/mbostock/c1c0426d50ca8a9f4c97 )を見ると ```thumbnail.png``` というファイル名でサムネイル画像を置いておけばブロック一覧で表示されるようです。
# まとめ
ファイル数が多い場合はGitHubでレポジトリを作って[GitHub Pages]( https://pages.github.com/ )を作るほうが管理しやすいと思いますが、ファイル数が少ないちょっとしたサンプルなら、Gistに置いてbl.ocks.orgでアクセスする方法が便利そうです。
sshfsに感動した

sshがつながりさえすればリモートのフォルダをローカルにマウントができる。

## インストール

```bash:archlinux
pacman -Sy sshfs
```

```bash:mac
brew install sshfs
```

## マウント

```bash:
sshfs username@servername:/path/to/remote/ /path/to/local/
```

## アンマウント

```bash:
umount /path/to/local/
```


## 読み取り専用でマウント

* [SSHFSの使い心地 - earthlabの雑記](http://d.hatena.ne.jp/earthlab/20090518/1242657835)

> sshfs remotehost:remotedir mountpoint -o ro
今いるディレクトリの git のブランチ名をプロンプトに表示する

プロンプトって？
=====
プロンプトとは Linux 等のターミナル上で

```bash
$
```

だとか

```bash
user@host $
```

```irb
irb(main):001:0>
```

みたいな感じで表示されている「ココにコマンド打てますよ」のサインの事．
bashでは PS1 変数に「どう表示させるか」の情報が格納されていて、自分で変更する事が可能

__git_ps1 関数
=====
git にはそのプロンプトの表示を便利にするための関数が詰まった **git-prompt.sh** というファイルがある．
そのファイルを読み込むと

```bash
$ __git_1
```
とすると今の git のブランチ名が表示される関数等が使えるようになる．

読み込んで設定する
=====
git-prompt.sh の場所はインストールした状況等によって変わるから各自に探してもらうとして、設定自体は至極簡単．


```bash
# bashrc とか bash_profile とか
. /path/to/git-prompt.sh
export PS1='\u@\h [\W $(__git_ps1)] \$ '
```

これで終了．

git-prompt.shが無い環境でエラーを出さないようにする
=====
複数の環境で .bashrc を使いまわしてると「この環境ではあるけどあの環境では無い」なんて事がよくある．
一々「git-prompt.shがある版とない版」を分けてアップしたりするのは当然面倒でなので1つのファイルである場合と無い場合の両方に対応したい．

あと， 「git-prompt.sh の有無で PS1 に代入する値を変える」という手法は似たような事が増えた時にねずみ算的に記述が増えていくので PS1 もできれば固定させたい．

って事で自分は以下のように設定する事で対処している．

```bash
# Load Git Completions
gitps1="true"
GIT_CONTRIB_DIR=/opt/git/contrib
if [ -r ${GIT_CONTRIB_DIR}/completion/git-prompt.sh ]; then
  . ${GIT_CONTRIB_DIR}/completion/git-prompt.sh
  gitps1="__git_ps1"
fi

# Prompt
export PS1='\u@\h [\W $(${gitps1})] \$ '
```

ポイントとしては「直接 `__git_ps1` を指定するのではなく，一度変数に格納してから $() の構文で呼び出す」ところ
bash には true コマンドというのが組み込まれていて，実行しても何も起こらない人畜無害なコマンドなので git-prompt.sh が無かった場合は何も表示されず，またエラーも起きないようになっている．

注意して欲しいのは `GIT_CONTRIB_DIR` の値は人によって変わるという点．
OS というか パッケージマネージャー (yum, apt-get, brew, port等) によってどこにインストールされるか変わるので
`GIT_CONTRIB_DIR`の値 と `${GIT_CONTRIB_DIR}/completion/git-prompt.sh` の部分は自分の設定に合わせて適宜変えて下さいな．
最近，自分は git に関してはソースコードから自前でコンパイルするようにしていたりするのでパッケージでインストールした場合，どこに設置されるかは正直知らなかったりする． (確か /usr/share/ とか /usr/etc とかにできたような気もするけど・・・)

今，yumでインストールしてた自分のCentOSのサーバーで確認したら `/usr/share/doc/git-1.7.1` に contrib ディレクトリがあった．まぁそんな感じの場所にインストールされるはず．
多分下のコマンド叩けば見つかるんじゃないかな？
```bash
find /usr/share -name '*completion*' | grep git
find /usr/share -name '*contrib*' | grep git
```

逆に，ソースコードからコンパイルした場合は `/usr/local/src/git` にソースを置いたと仮定すると

```bash
GIT_CONTRIB_DIR=/usr/local/src/git/contrib
```
となる．自分は `/usr/local/src/git/contrib` とするのがなんだか格好悪いって理由だけで `/opt/git/contrib` にシンボリックリンクを貼ってたりする←

とかなんとか行ってドヤ顔して終わろうと思ってたのに，調べたらバージョンとかによってロードのされ方が違ったりするみたい．．．
きちんと検証せな・・・
Cookieが今後不要になると噂されるCanvas Fingerprintingとは

ここ数日で広告界を賑わせている？Cookieを使わずにユーザー追跡ができるCanvas Fingerprintingについて軽く説明

#概要
従来はCookieを使用してユーザーの追跡を行っていたがCanvas APIを利用した方法でユーザー（正確にはブラウザ）を判別する。現在これをブロックするプラグインやアドオンを確認できていない(7/26現在)
The Web never forgetsによると、研究者たちが調査したAlexaトップ100,000サイトのうち、5.5%以上でCanvas Fingerprintingスクリプトが動作しているため今後更に広がることが予想できる。**乗るしかない、このビッグウェーブに**

#中身
ブラウザのCanvas APIを利用してユーザーには見えないレンダリングされたイメージで判別する。端末ごとによってレンダリングされたイメージは微妙に違うらしい。いわば指紋認証と同じ方法である。
予想するにキャッシュやCookieと一番違う点はユーザー側にデータを残してそれを元に認証・解析を行う形式ではなくサーバー側で認証・解析を行うためデータの削除などはできない

#防ぐには
JavaScriptを切ればCanvas APIが叩かれることも無い。が、このご時世にJavaScriptを使わないというのはなかなか厳しい物があると思われる。
Canvas APIに関わるプラグイン等出てくるのを待つしかない。いや、自分で作るのが一番いいんですけどね。

#まとめ
ついに履歴やそういった類もある種の**クラウド化**が進んでいるのだろうか。ブラウザを指紋として扱うのは非常に面白い反面、偽装が簡単に思えるがそこら辺は英語ばっかりなので誰かよろしく。

#参考文献
[Cookieを使わずにユーザーを追跡する仕組みが普及しつつある | スラッシュドット・ジャパン IT](http://it.slashdot.jp/story/14/07/22/0613210/Cookie%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%9A%E3%81%AB%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E8%BF%BD%E8%B7%A1%E3%81%99%E3%82%8B%E4%BB%95%E7%B5%84%E3%81%BF%E3%81%8C%E6%99%AE%E5%8F%8A%E3%81%97%E3%81%A4%E3%81%A4%E3%81%82%E3%82%8B)
[ブロックできないオンライントラッキングツールが人気サイトに浸透 | マイナビニュース](http://news.mynavi.jp/news/2014/07/22/258/)
[The Web never forgets: Persistent tracking mechanisms in the wild](https://securehomes.esat.kuleuven.be/~gacar/persistent/index.html)


Canvas APIって何？って人用↓
[Webグラフィックをハックする（4）：Canvas APIの基礎 (1/5) - ＠IT](http://www.atmarkit.co.jp/ait/articles/1208/01/news151.html)
[Canvas始めました - Canvas APIで遊んで（遊ばれて）わかったことをだらだらと:] (http://www.inazumatv.com/contents/archives/7281)
Strategy パターン


![](http://upload.wikimedia.org/wikipedia/commons/thumb/0/08/StrategyPatternClassDiagram.svg/500px-StrategyPatternClassDiagram.svg.png)


```
アルゴリズムを実行時に選択することができるデザインパターンである。
```
- [Strategy パターン - Wikipedia](http://ja.wikipedia.org/wiki/Strategy_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3)

## 使い道

- [Template Method パターン](http://qiita.com/kasei-san/items/7df52a6a326083bde4f2) と同じ
- ただし、Template Method パターン の時に書いたような定形のプロトコルに沿った実装ではなく、個別に柔軟な実装を書きたい時に使う感じか

## 実装

StringLister#display の挙動を、Strategy のサブクラスに移譲している
これにより、コンストラクタの引数で、StringLister#display の挙動が柔軟に変えられるようになる

```strategy.rb
class StringLister
  attr_reader :items
  def initialize(items, strategy)
    @items = items
    @strategy = strategy
  end

  def display
    @strategy.display(@items)
  end
end

class Strategy
  def display(items)
    raise NotImplementedError
  end
end

class TextStrategy
  def display(items)
    items.join("\n")
  end
end

class HtmlStrategy
  def display(items)
    result = []
    result << "<html><body>"
    items.each{|item| result << "<div>#{item}</div>" }
    result << "</body></html>"
    result.join("\n")
  end
end

items = %w[abc def ghi]
puts StringLister.new(items, HtmlStrategy.new).display
# <html><body>
# <div>abc</div>
# <div>def</div>
# <div>ghi</div>
# </body></html>

puts StringLister.new(items, TextStrategy.new).display
# abc
# def
# ghi

```

## より、Ruby 風な書き方

StringLister のコンストラクタに、Strategy のサブクラスではなく、block を渡す
こっちの方が、いちいちクラスを定義する必要がなく、より柔軟な書き方ができる

```strategy.rb
class StringLister
  attr_reader :items
  def initialize(items, &strategy)
    @items = items
    @strategy = strategy
  end

  def display
    @strategy.call(@items)
  end
end


items = %w[abc def ghi]

disp = StringLister.new(items) do |items|
  result = []
  result << "<html><body>"
  items.each{|item| result << "<div>#{item}</div>" }
  result << "</body></html>"
  result.join("\n")
end.display
puts disp

# <html><body>
# <div>abc</div>
# <div>def</div>
# <div>ghi</div>
# </body></html>

disp = StringLister.new(items) do |items|
  items.join("\n")
end.display
puts disp

# abc
# def
# ghi
```

## 雑感

多分だけど、関数をオブジェクトにしたいが為のパターンなのかな?

- C++ は、関数が第一級オブジェクトでない

## 参考

- [Strategy パターン - Wikipedia](http://ja.wikipedia.org/wiki/Strategy_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3)
- [関数型の考え方: 関数型のデザイン・パターン、第 1 回](http://www.ibm.com/developerworks/jp/java/library/j-ft10/)
sqlplusを使いやすくする＠CentOS6

rlwrapに限っていうと
色々サイトを見るとrpmだったりmakeしたりというのが多くて
と思ったらyumで出来るじゃない！だったのでメモ。

辞書は普通にダウンロードだけど・・・

# rlwrap
## インストール
今回入れたのは`rlwrap.x86_64 0:0.41-1.el6`
http://pkgs.org/centos-6/epel-x86_64/rlwrap-0.41-1.el6.x86_64.rpm.html

```bash
root$ yum -y install rlwrap

root$ which rlwrap
/usr/bin/rlwrap
```

## sqlplus起動
```bash
root$ rlwrap sqlplus
```

お、パスワード入力のとき「****」って出るようになった！
__「↑」「↓」で過去のSQLが見れるようになった！！（超大事）__

# 辞書
## インストール
下記の「Download」から好きなバージョンのものを取ってくる。
http://www.linuxification.at/rlwrap_ext.html.en
今回はOracle Version 11.2.0.3。tar.gzです。

```bash
mkdir rlwrap-extensions
mv rlwrap-extensions-V11-0.05.tar.gz rlwrap-extensions/
cd rlwrap-extensions
tar xvzf rlwrap-extensions-V11-0.05.tar.gz

pwd
 => /root/rlwrap-extensions
```

## sqlplus起動
```bash
root$ rlwrap -if ~/rlwrap-extensions/sqlplus sqlplus
```
`sel`と打つと`SELECT`が出るようになった！

# エイリアス
```
alias sqlplus="rlwrap -if ~/rlwrap-extensions/sqlplus sqlplus"
```
MySQLのクエリ結果を垂直形式で表示する


データベースの内容を確認するときデフォルトの表示形式だととても見づらいため、垂直形式で表示する方法をメモしておきます。

#通常の表示形式

```sql:
mysql> SELECT * FROM sampledb;

+------+---------+
| id   | name    |
|    1 | NEKOSAN |
|    2 | INUSAN  |
+------+---------+
```

#垂直形式

SQL文の最後に'\G'を追加することで垂直形式に変更することが出できます。

```sql:
mysql> SELECT * FROM sampledb \G
*************************** 1. row ***************************
  id: 1
name: NEKOSAN
*************************** 2. row ***************************
  id: 2
name: INUSAN
```

#おまけ
\Gの後ろに;をつけると`No query specified`というエラーが出ます。\GでSQL文の終わりになっているので、;に対してはクエリが指定されていないぞ(ﾟДﾟ)ｺﾞﾙｧ!!と怒られます。
MacPortsでPHP5.5の開発環境

portコマンドでー、みたいなのは既にレガシーになりつつあるような気もするけど、なんだかんだで環境がないってのも困るので一応メモ。
とりあえず今回はphp5.5を入れようと。
あーそうそう。カスペルスキーインターネットセキュリティを使ってる人は一旦それを終了するべし。これが起動してるとインストール終わらないです（笑。

```
sudo port install php55 php55-apache2handler php55-xdebug php55-postgresql php55-pear php55-openssl php55-mysql php55-mcrypt php55-mbstring php55-gd php55-curl 
```

途中で

```
Error: org.macports.activate for port apache2 returned: Image error: /Library/LaunchDaemons/org.macports.apache2.plist already exists and does not belong to a registered port.  Unable to activate port apache2. Use 'port -f activate apache2' to force the activation.
Error: Failed to install apache2
```

と怒られる。多分前回port使ってた時のファイルが残ってたんだろう。
言われたとおりに、

```
port -f activate apache2
```

として再度インストール

```
sudo port install php55 php55-apache2handler php55-xdebug php55-postgresql php55-pear php55-openssl php55-mysql php55-mcrypt php55-mbstring php55-gd php55-curl php55-exif php55-intl
```

その後やったこと。

OSX元々のアパッチ停止。

```
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
```

なんかいろいろ。

```
sudo port load apache2
cd /opt/local/apache2/modules
sudo /opt/local/apache2/bin/apxs -a -e -n php5 mod_php55.so
```

php関係。

```
sudo ln /opt/local/bin/php55 /opt/local/bin/php
sudo cp /opt/local/etc/php55/php.ini-development /opt/local/etc/php55/php.ini
sudo vim /opt/local/etc/php55/php.ini
```

php.iniの編集箇所。

```
date.timezone = Asia/Tokyo

mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock
pdo_mysql.default_socket=/opt/local/var/run/mysql5/mysqld.sock
```

```
sudo vim /opt/local/apache2/conf/httpd.conf
```

httpd.confの編集箇所。

```
#LoadModule php5_module        modules/libphp5.so

ServerName localhost:80
AddType application/x-httpd-php .php
Include conf/extra/httpd-vhosts.conf
Include conf/extra/mod_php55.conf
DirectoryIndex index.html index.php
```

httpd-vhosts.conf ファイルは以下のような感じで。

```
<VirtualHost *:80>
    DocumentRoot "/opt/local/apache2/htdocs"
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/xxxxx/Sites"
    ServerName myserver
    <Directory "/Users/xxxxx/Sites">
    order deny,allow
    allow from All
	Options All
	AllowOverride All
    </Directory>
</VirtualHost>
```

アパッチ再起動。

```
sudo /opt/local/apache2/bin/apachectl restart
```
ScrollView内にNumberPickerを配置したい


素直に配置するとタッチイベントが競合して、NumberPickerが動作してくれないです。
なので、NumberPickerでタッチイベントを検出したら親View(ここではScrollView)へのイベント伝搬を無効にするとよさそうです。

…みたいなことが、スタックオーバーフローかどこかに書いてたのだけど場所忘れちゃったのでメモ。

-

NumberPickerを継承した独自のViewをつくります


```java:ScrollableNumberPicker.java
public class ScrollableNumberPicker extends NumberPicker {
	public ScrollableNumberPicker(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		setOnTouchListener(new View.OnTouchListener(View view, MotionEvent motionEvent) {
			int action = motionEvent.getAction();
			switch (action) {
				case MotionEvent.ACTION_DOWN:
            view.getParent().requestDisallowInterceptTouchEvent(true);
            break;
          case MotionEvent.ACTION_UP:
            view.getParent().requestDisallowInterceptTouchEvent(false);
            break;
			}
			return false;
		}
	}
}
```

こんな感じ。

`requestDisallowInterceptTouchEvent`
ありがてぇ。