OmniAICreator/Qiita-1.07M huggingface dataset:
sensuのインストール方法を調べてみた(が設定がよくわからん)



公式のDocument

* [Sensu | The open source monitoring framework.](http://sensuapp.org/docs/latest/packages)


# CentOS6にインストールしてみた

```bash:/etc/yum.repos.d/sensu.repo
[sensu]
name=sensu-main
baseurl=http://repos.sensuapp.org/yum/el/$releasever/$basearch/
gpgcheck=0
enabled=1
```

```bash:sensuインストール
yum install -y epel-release
yum install -y rabbitmq-server redis sensu uchiwa
cp -p /etc/sensu/config.json{.example,}
for s in rabbitmq-server redis sensu-api sensu-server sensu-client uchiwa
do
  service $s restart
done
```

/etc/sensu/conf.d/README.md を参考にjsonファイルを作ってみる。

```json:/etc/sensu/conf.d/client.json
{
  "client": {
    "name": "localhost",
    "address": "127.0.0.1",
    "subscriptions": [
      "test"
    ]
  }
}
```

```json:/etc/sensu/conf.d/graphite_handler.json
{
  "handlers": {
    "graphite": {
      "type": "tcp",
      "socket": {
        "host": "127.0.0.1",
        "port": 2003
      },
      "mutator": "only_check_output"
    }
  }
}
```

サービスを再起動させてどうか・・・

http://サーバのIP:3000/ にアクセスすると`uchiwa`のdashboardが表示されます。

![スクリーンショット 2014-09-05 14.18.54.png](https://qiita-image-store.s3.amazonaws.com/0/25728/676831c1-ddbc-181c-89f0-9c81550a2358.png "スクリーンショット 2014-09-05 14.18.54.png")



# CentOS7で動かそうとしたがダメでした。。

* RabbitMQが起動失敗する。

```diff:/etc/resolv.conf
+ options single-request-reopen"
```

```bash:
yum groupinstall -y "@Development Tools"
yum install -y epel-release
yum install -y rabbitmq-server
systemctl start rabbitmq-server
systemctl status rabbitmq-server -l
```

```bash:rabbitmqのログ
/var/log/rabbitmq/rabbit@localhost.log
```

```bash:sensuのインストール
git clone https://github.com/sensu/sensu.git
yum install -y gem ruby-devel
gem install rake bundle rspec eventmachine
/usr/local/bin/bundle install
/usr/local/bin/rake -f Rakefile
```
既存のデータを残しつつFuelPHPでMigrationする方法


1. 必要なデータのバックアップをとる
---

```
$ mysqldump -u root -p -h localhost データベース名 テーブル名 (複数テーブルの場合は半角スペースで区切る) > ~/tmp/backup_`date +%Y%m%d-%H%M%S`.sql
```

2. データベース削除して新規作成する
---

```
mysql> drop database データベース名
mysql> create database データベース名
```

3. migrationを実行する
---

```
$ FUEL_ENV=development oil refine migrate
```

4. バックアップしていたデータを復元する
---

```
$ mysql -h localhost -u root -p --default-character-set=utf8 データベース名 < ~/tmp/backup_20140902-173636.sql
```
ubuntu ユーザを追加して sudo 権限をつける

よく使うクセにすぐ忘れるのでメモ。

## ユーザ作成

```
# adduser user_name
```

※ `useradd` はホームディレクトリが作成されない

```
Adding user `user_name' ...
Adding new group `user_name' (1002) ...
Adding new user `user_name' (1002) with group `user_name' ...
Creating home directory `/home/user_name' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:  # パスワード入力
Retype new UNIX password: # パスワード入力（確認）
passwd: password updated successfully
Changing the user information for user_name
Enter the new value, or press ENTER for the default
        Full Name []:    # Enter連打
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] Y  # Yes
# 終了
```


## sudo グループに追加

```
# gpasswd -a user_name sudo
Adding user user_name to group sudo
```
cqlsh の mysql でいうあれやこれ

自分用メモ。
Cassandraのドキュメント少なすぎるよ・・・

## 呼称

|mysql|cqlsh|
|:--|:--|
| database | keyspace|
| table | columfamily |
| key | colum | 

## コマンド

### DB一覧

mysql

```sql
SHOW databases;
```

cqlsh

```sql
SELECT keyspace_name FROM system.schema_keyspaces ;
```

### テーブル一覧

mysql

```sql
USE database1;
SHOW tables;
```

cqlsh

```sql
SELECT columnfamily_name FROM system.schema_columnfamilies WHERE keyspace_name = 'database1';
```

or

```sql
DESCRIBE COLUMNFAMILIES;
```


### テーブル定義の表示

mysql

```sql
DESCRIBE table1;
```

cqlsh

```sql
DESCRIBE TABLE table1;
or 
DESCRIBE COLUMNFAMILY table1;
```

### データのエクスポート

mysql 

```bash
$ mysqldump -u user1 -h localhost -p database1 table1 > export_data.txt
```

cqlsh 

```sql
cqlsh > COPY keyspace.table (column1, column2, ..) TO 'export_data.txt' 
WITH DELIMITER = ',' AND QUOTE = '''' AND ESCAPE = '''' AND NULL = '<null>';
```
備忘録＠Python ORセミナー: scikit-learn


pythonでも指折りのライブラリだと思ってる．
機械学習用のライブラリ．入っている学習は以下のとおり（一例）．

- 教師あり学習
    - 最近傍法，一般化線形モデル，線形判断分析，SVM，決定木，ランダムフォレスト，ナイーブベイズなど
- 教師なし学習
    - 混合ガウスモデル，主成分分析，因子分析，独立成分分析，クラスタリング，隠れマルコフモデルなど
- その他
    - クロスバリデーション，グリッドサーチ，Accuracyなど

※チートシートは[こっち](http://peekaboo-vision.blogspot.jp/2013/01/machine-learning-cheat-sheet-for-scikit.html)

# 教師あり学習

## Support Vector Machine
### 回帰分析
```pycon
# まずは学習データの作成
>>> import numpy
>>> np.seed(0) # 乱数のシード固定
>>> x = numpy.sort(5 * numpy.random.rand(40, 1), axis=0)
>>> y = numpy.sin(x).ravel()
>>> y[::5] += 3 * (0.5 - numpy.random.rand(8))
>>> plot(x, y, 'o')
```

回帰分析の時は`SVR`を使う（Support Vector Regressionの略かと）．
引数のオプションについて

`C (default = 1.0)`
> * 罰則項のパラメータ
> * 大きいとマージンを許容しない（ハードマージン）、小さいと許容する

`kernel (default = rbf)`
> * カーネル関数のタイプ
> * 線形: linear, 多項式: poly, RBF(ガウス): rbf, シグモイド: sigmoid, プレコンピューテッド: precomputed

`gamma (default = 0.0)`
> * RBF、多項式カーネルの係数

`degree (default = 2)`
> * RBF、多項式、シグモイドカーネル関数の次数

```pycon
>>> from sklearn.svm import SVR
# 学習器の作成
>>> svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
>>> svr_lin = SVR(kernel='linear', C=1e3)
>>> svr_poly = SVR(kernel='poly', C=1e3, degree=2)
# fitで学習，predictで予測
>>> y_rbf = svr_rbf.fit(x, y).predict(x)
>>> y_lin = svr_lin.fit(x, y).predict(x)
>>> y_poly = svr_poly.fit(x, y).predict(x)
```

### 分類

いわゆるSVMはこっちだと思う．
`scikit-learn`では`SVC`(Support Vector Classifierの略)を使う．

```pycon
# 学習データ作成
>>> numpy.random.seed(0)
>>> X = numpy.random.randn(300, 2)
>>> Y = numpy.logical_xor(X[:,0]>0, X[:,1]>0)
from sklearn.svm import SVC
# 分類器の作成
>>> clf = SVC(kernel='rbf', C=1e3, gamma=0.1)
# 学習
>>> clf.fit(X, Y)
# 決定関数までの距離を計算
>>> xx, yy = np.meshgrid(linspace(-3, 3, 500), linspace(-3, 3, 500))
>>> Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
>>> Z = Z.reshape(xx.shape)
#グラフ化
>>> imshow(Z, interpolation='nearest', extent=[xx.min(),
...                                            xx.max(),
...                                            yy.min(),
...                                            yy.max()],
...                                            aspect='auto',
...                                            origin='lower',
...                                            cmap=cm.PuOr_r)
>>> ctr = contour(xx, yy, Z, levels=[0], linetypes='--')
>>> scatter(X[:, 0], X[:, 1], c=Y, cmap=cm.Paired)
>>> axis([xx.min(), xx.max(), yy.min(), yy.max()])
>>> show()
```

`imshow()`: 配列をグラフ化する
引数オプション:
`interpolation`
> * グラフ処理の際の補完
>    - 'nearest' - 

`extent`
> * 範囲を指定
>    - [水平方向の最小値, 水平方向の最大値, 鉛直方向の最小値, 鉛直方向の最大値]  

`aspect`
> * アスペクト比の調整

`origin`
> * 基準点を設定
>    - 'lower' - Z[0,0]を左下のコーナーに合わせる

`cmap`
> * カラーマップを指定


# 教師なし学習

## k-means法
一例でk-means法を示す．

```pycon
>>> import sklearn.datasets, sklearn.cluster
>>> #  IRISデータの読込
>>> d = sklearn.datasets.load_iris()
>>> km = sklearn.cluster.KMeans(3)
>>> km.fit(d.data)
>>> for i, e in enumerate(d.data):
...    scatter(e[0], e[2], c='rgb'[km.labels_[i]])
```

#その他

残りは[公式ドキュメント](http://scikit-learn.org/stable/)で.
awk ケーススタディ

awk って非常に便利なんだけど、、
毎日使う訳じゃないからすぐ使い方忘れる。

## unicorn のメモリ使用量が知りたい！

```
$ ps aux | grep unicor[n] | awk '/[0-9]/{sum += $4} END {print sum}' 
```

### 解説

- `grep unicor[n]` ： `grep` のプロセス自身を省く
- `{sum += $4}` ： 4列目（Rss）を変数 `sum` に追加していく
- `END {print sum}` ： 各行の計算が終わった後に、`sum` を表示

## LoadAverage を知りたい！

```
$ uptime | awk '{sub(",","",$10);print $10}'
```

### 解説

- `uptime` ： システム稼働状況を教えてくれる
- `sub(",","",$10)` ： 10列目（LA/1min）から `,` を探して空文字に置換
- `sub` の結果をそのまま出力しないのは、`sub` の返り値は置換した数
- `gsub()` を使うと、全ての `,` を空文字に置換（ `sub` は一度だけ）

## `JPG` を `jpg` に変換したい

```
$ ls | awk -F. '/JPG/{print "mv "$0" "$1".jpg"}' | bash
```

### 解説

- `print` で書きだした命令を `bash` で実行する方法
- awk 内では `"` ダブルクォートを使えます
- `$0` は自分自身
- `-F` はセパレート用の文字列を指定


## 特定の `gem` 内のみ検索したい
```
$ grep -r 'class Redis' vendor | awk -F/ '$6 ~ /redis/{print $0}'
```

### 解説

- `$0` は自分自身
- `{}` の前で正規表現が使えますが、特定の部位だけに正規表現を充てる事もできます。マッチしない場合は `~` ではなく、 `!~` を使います。
Java8でFindBugsを使ってみる


## はじめに
2014/9/5時点での、FindBugsのJava8対応状況について調べてみました。

## 本体
3.0.0から対応されたようです。
http://findbugs.sourceforge.net/

## Eclipseプラグイン
Marketplaceから最新版をインストールすれば、3.0.0対応のものが入ります。

## Mavenプラグイン
対応されているようです。
http://mojo.codehaus.org/findbugs-maven-plugin/
なので、JenkinsでJob回してレポート収集、というところは出来そうですね。
試してないですが。

## EclipseでJava8のコードをチェックしてみる
どういう挙動になるのか、少し試してみました。
以下、だいぶ適当ですがサンプルコード。

```java:FindBugs確認用サンプル
public class FindBugsJava8 {

	public static void main(String[] args) {

		final List<String> personNames = new ArrayList<String>();
		personNames.add("Bob");
		personNames.add("Mark");
		personNames.add("Tom");

		final Person p = new Person("Mark");

		// Java8以前
		for (String personName : personNames) {
			if (p.equals(personName)) {
				System.out.println(personName);
			}
		}

		// Java8
		personNames.stream().filter(personName -> p.equals(personName))
				.forEach(System.out::println);
	}

	public static class Person {

		private String name;

		public Person(String name) {
			this.name = name;
		}

		public String getName() {
			return name;
		}
	}
}
```

拡張for文での記述と、stream,lambdaの記述で大体同じ処理をさせてます。
`p.equals(personName)`がバグ検知されそうですね。

このコードのチェック結果は以下の通りでした。

![findbugs_java8_check_result_1.png](https://qiita-image-store.s3.amazonaws.com/0/51995/619e1ff3-7098-4b89-89e6-d65b5ed20173.png "findbugs_java8_check_result_1.png")


バグの詳細

![findbugs_java8_check_result_2.png](https://qiita-image-store.s3.amazonaws.com/0/51995/49298698-15a5-fa74-c6cb-bb692b21da37.png "findbugs_java8_check_result_2.png")


lambdaの中の記述は検出されない？ように見えました。
記述が悪いのか、設定が悪いのか、対応されていないのか、、、
もうちょっと使ってみないとよく分からないですね。
何か分かったらまた追記しようと思います。

ひとまず、チェックが出来るようになったというだけでもありがたいですよね。
unison memo

# install関連
ファイル/ディレクトリ同期コマンド unison を使ってみた | 黒ぶちメガネのblog
http://www.kurobuti.com/blog/?p=5776
unisonによる双方向同期: はて？ここはどうしたっけ？
http://mem-server.seesaa.net/article/378582821.html
Unisonのインストールメモ - おびなたん☆
http://d.hatena.ne.jp/earth2001y/20130526/unison_installation

# 使い方
88171.net :: Unisonマニュアル私的日本語訳
http://88171.net/translations/unison_manual_ja
unisonによる2台のサーバ間でのファイル同期 - uzyexeのノート
http://uzy-exe.hateblo.jp/entry/2013/12/29/071159
フラグメントキャッシュを設定する(Rails3.2)


ローディング速度を速くする上で、キャッシュは基礎中の基礎かと思われます。

Rails3系では３種類のキャッシュを使用する事ができます。
####・ページキャッシュ
まるっと指定したページのキャッシュしてくれます。(静的ページ向け。)
####・アクションキャッシュ
ページを参照する前に、ActionPackを経由し、まるっとページをキャッシュしてくれます。
####・フラグメントキャッシュ
ページの指定された一部をキャッシュしてくれます。

今回は、Rails4から標準装備となっているフラグメントキャッシュについて少し。

もし、Railsのバージョンが4系ではない方は、
``gem 'cache_digests'``をインスールしてください。
``gem 'cache_digests'``をインストールすることで、キャッシュしたい部分が編集・変更された際に、自動でその部分のキャッシュを更新してくれます。

次に、viewの方で、キャッシュしたい部分を``<% cache do %><% end %>``で囲みます。

```ruby:index.html.erb
<% cache ['user', @user] do %>
…
<% end %>
```

cacheの後の配列部分がキーになるので、この配列をキャッシュ対象のものでユニークになるように設定してください。

その他、``:expires_in``や``:request.format（html,json,xml）``など、キャッシュの処理をユーザー好みに設定することも出来ます。
grepで部分一致検索

意外と知られていませんが、grepで部分一致検索ができます。
json文字列からURLを抜き出す場合などに便利。

```
-o, --only-matching
マッチする行のマッチした部分だけを (それが空文字列でなければ) 表示します。 マッチした各文字列は、それぞれ別の行に書き出します。
```

◆サンプル

```
ubuntu@ubuntu-virtual-machine:~/work/grep$ cat json.txt  
{"image_urls":{"thumbnail":"http://abc.com/thumbnail.jpg","small":"http://abc.com/small.jpg"}}  

ubuntu@ubuntu-virtual-machine:~/work/grep$ egrep -o "http[^\"]+" json.txt  
http://abc.com/thumbnail.jpg  
http://abc.com/small.jpg
```
【SourceTree】コミットした差分ファイルをエクスポートする

SourceTree のカスタムアクションという機能を使って、コミットしたファイルをエクスポートする設定方法です。


## SourceTree のカスタムアクションの設定
SourceTreeには、カスタムアクションというユーザーがオリジナルで機能追加できるものがあります。

![img01.png](https://qiita-image-store.s3.amazonaws.com/999/42330/9558586c-9379-e48e-8f28-963f51e7f55d.png)

### 設定ファイルのダウンロード
以下のGithubに、rubyで書かれたソースが公開されています。
まずはこちらを、ダウンロードします。
https://github.com/yukku0423/git-export-tools

ダウンロード方法ですが、Githubを使い慣れない人は右下に__【Download ZIPボタン】__があるので、そちらからダウンロードすればOKです。
![img02.png](https://qiita-image-store.s3.amazonaws.com/999/42330/e4b8577c-b82a-9562-f799-ebf107a010d6.png)

解凍すると以下のファイルがあると思います。
- git-export-diff.rb
- git-export-deleted.rb
- git-export-copy.rb
- git-export-config.yml.sample
- README.md

今回使用するのは、__【git-export-diff.rb】__ファイルです。
このファイルを任意の場所においてください。
SourceTreeから読み込むことになるので、邪魔にならないところであればどこでもOKです。

### カスタムアクション設定
メニューの、
SourceTree > 環境設定 を開くとカスタムアクションのタブがあるので開いてください。

設定ですが、各項目は次のようになります。

* メニューキャプション
カスタムアクション名になります

* 実行するスクリプト
git-export-diff.rbを読み込んでください

* パラメータ
【$SHA】を記述してください

![img03.png](https://qiita-image-store.s3.amazonaws.com/999/42330/70a698de-b246-1bf8-d505-cf8e247ec1e1.png)

これでカスタムアクションの設定は完了です。


## 使い方
コミットログ上で右クリックしてメニューを出すと、カスタムアクションという項目があります。
そこに先ほど設定した名前でアクションが登録されているので、選択するとコミットファイルの一覧がエクスポートされます。

![img04.png](https://qiita-image-store.s3.amazonaws.com/999/42330/29a76cf1-4a78-c4a9-169a-c091567acb1b.png)

エクスポート先ですが、プロジェクトディレクトリと同階層に、下記の命名ルールで格納されています。
【プロジェクトフォルダ名-ブランチ名-コミットID】

### エクスポートイメージ（上記キャプチャの例）
* プロジェクトフォルダ構成
src
└develop
　└XXXX
　└…

* エクスポート結果
src
└develop
　└プロジェクトデータ一覧…
src-master-8c8aaf8　←エクスポートされたデータ
└develop
　└コミットファイル一覧…


以上です。
あとは実行したいときにいつでも使えるようになっているので簡単に実行できます。
また、この機能を活かすためにも、コミットの仕方なども気を配りたいところですね。
【Illustrator】JSXでSVG書き出しを爆速化する

スマホコーディングにおいてアイコンのフォント化は当然の技術となっています。
また実は古いIEにも対応しているので（IE4から使えたらしい…？）、
cssによる、::beforeや::afterの擬似要素での指定を考えると、
IE8からであればほぼ問題なく使えるはず…です。

ただフォントデータを作るために、SVG書きだす必要があり、アイコンの数が多いほど制作に時間のかかる作業でした…。
今回は、そのSVG書き出し作業を一瞬で終わらせられるスクリプトの設定方法です。

## JSXの設定

### JSXとは

adobeツールをカスタマイズするためのスクリプトです。
javascriptでの記述で、オリジナルの機能を持たせることが出来ます。

### 本データの仕様

- スクリプト実行でレイヤー毎がSVGとして書き出される
- ファイル名はレイヤー名に準ずる
- ダウンロードフォルダを任意に指定

### ダウンロード〜設定
gitにソースをアップしているので、こちらを使ってください。
https://github.com/lab3-34/layer_output_svg/tree/master

そのデータを、下記に保存すると自動的に実行対象になります。

__/Applications/Adobe Illustrator CS6/Presets.localized/ja_JP/スクリプト__
※mac cs6の場合です
※保存後、Illustratorを再起動すると反映されます


### 実行
実行は、Illustratorのメニューの下記から出来ます。

ファイル > スクリプト > layer_output_svg

__【注意点】__
仕様でも述べたように、レイヤー毎に書き出すような作りなので、データの作り方はデザイナーと相談していただければと思います。
アートボードのサイズですが、コーディング時の使いやすさと本スクリプトの仕様を考慮し、
縦・横と各アイコンの最大幅で設定し、データは上下左右センタ揃えで配置してください。
また、レイヤー名 = ファイル名となるのでリネームが発生しないように、ちゃんとしたレイヤー名を設定しましょう。

以下のような作りだと、コーダーがとても喜ぶと思います！！！！

![img01.png](https://qiita-image-store.s3.amazonaws.com/999/42330/26ae2822-ba27-656d-ea64-6dcb10a070f5.png)
cssによるtableスタイルについて

## cssによるtableスタイルの基本
* 親要素に display: table;
* 要素に display: table-cell;

## 列幅について
セルにあたる要素に幅を指定しても、そのままだと反映されない（中の要素に依存される）
その場合は、table-layoutプロパティにて制御する。
__※ここ結構重要！__

* table-layout: auto;
列幅は自動設定される（初期値）

* table-layout: fixed;
列幅が固定される
→ css等のwidthプロパティが反映
RVMと rbenv、chruby

Rubiestではない俺が仕事でハマったのでメモ。

# Ruby処理系の選択法

アプリケーションやライブラリによって Rubyの処理系を選びたいということがあるんだろう。そんな時は同時にライブラリ (gemですか?) をごっそり入れ替えた方が安全だ。

そのための解法がいくつかある。

まあ、どれも同じ問題の解法なんだけどやり方がいろいろ違う。それより、ツールとかによっては特定の解法では動かないということがある。そんなの知るかよ。でも知らなきゃいけないらしい。ので調べた。でも最低限調べただけで実験とかしてないのでそれなりにどうぞ。

## [RVM](http://rvm.io/)
- 一番古いみたい。
- rubyのインストールもしてくれる
- shellコマンドを結構置き換えていてややこしいらしい

## [rbenv](https://github.com/sstephenson)
- shellでごちゃごちゃしなくていい。shimってのが proxyみたいになってる?
- Rubyのインストールは別。[ruby-build](https://github.com/sstephenson/ruby-build)ってのも用意されてる
- ~~Gemをいれたあとに rehashしなきゃいけないらしい~~
 - ~~[rbenv-gem-rehash](https://github.com/sstephenson/rbenv-gem-rehash)っていうのを使うと rehashしなくてもいいらしいです。~~
 - [このPR](https://github.com/sstephenson/rbenv/pull/638)でいらなくなった! 
- See [Why rbenv over RVM?](https://github.com/sstephenson/rbenv/wiki/Why-rbenv%3F)

## [chruby](https://github.com/postmodern/chruby)
- 単純な shell scriptだけ。環境変数を一生懸命いじって振り分けてるのか?
- 一番単純
- Rubyのインストールは別。


# 解法を選ぶツールの例
- [subcontractor](https://github.com/pitluga/subcontractor) とか。 chrubyじゃ動かない。
Sass Lessのよく使うMixinメモ

# よく使うMixinのメモ
※都度拡張させます

## Scss/compass
### フォントサイズ計算
#### PC用
    @mixin fontSize($fontSize, $baseFontSize:14){
        font-size: percentage($fontSize / $baseFontSize);
    }

#### レスポンシブ用（rem使用）
    @mixin fontSize($size, $base: 14) {
      font-size: $size + px;
      font-size: ($size / $base) * 1rem;
    }

### 行間計算
    @mixin lineHeight($lineHeight, $baseFontSize:14){
        line-height: percentage($lineHeight / $baseFontSize);
    }

### ポジション
    @mixin absolute-top-left($top: 0, $left: 0) {
      position: absolute;
      top: $top + px;
      left: $left + px;
    }
    @mixin absolute-top-right($top: 0, $right: 0) {
      position: absolute;
      top: $top + px;
      right: $right + px;
    }
    @mixin absolute-bottom-left($bottom: 0, $left: 0) {
      position: absolute;
      bottom: $bottom + px;
      left: $left + px;
    }
    @mixin absolute-bottom-right($bottom: 0, $right: 0) {
      position: absolute;
      bottom: $bottom + px;
      right: $right + px;
    }

### 半角文字改行（プレフィックスは適宜調整）
    @mixin wordWrap{
      white-space: pre;           //CSS 2.0
      white-space: pre-wrap;      //CSS 2.1
      white-space: pre-line;      //CSS 3.0
      white-space: -pre-wrap;     //Opera 4-6
      white-space: -o-pre-wrap;   //Opera 7
      white-space: -moz-pre-wrap; //Mozilla
      white-space: -hp-pre-wrap;  //HP Printers
      word-wrap: break-word;      //IE 5+
    }

## Less
### スマホ用にコンテンツ幅計算
#### 左右paddingにて調整
    .cntWidth(@p-size: 0, @page: 640){
      @p-size-retina: @p-size * 2;
      @percent: ((@p-size-retina / @page) * 100);
      width: ~'@{percent}%';
      @pd-size: (100 - @percent) / 2;
      padding-left: ~'@{pd-size}%';
      padding-right: ~'@{pd-size}%';
    }

### 左右marginにて調整
    .cntWidthCenter(@p-size1: 0, @page1: 640){
      @p-size-retina1: @p-size1 * 2;
      @percent1: ((@p-size-retina1 / @page1) * 100);
      width: ~'@{percent1}%';
      margin-left: auto;
      margin-right: auto;
    }

### フォントサイズ計算
#### スマホ用
    .fontsize(@size: 24, @base: 16) {
      font-size: (@size / @base) * 1rem;
    }
備忘録＠Python ORセミナー: matplotlib

# matplotlib

```pycon
>>> import pylab as plt
>>> from pylab import * # 楽だけどあまり良くないパターン
```

## データの用意

```pycon
>>> x = plt.linspace(0, 2 * math.pi, 50) # 0-2*πの区間を50等分した配列
>>> y = plt.sin(x)
```

## グラフで表示

```pycon
>>> p = plt.plot(x, y)
>>> plt.show() # ipython --pylabとかしてたら不要
```

### オプション
```
>>> plt.plot(x, y, 'オプション')
```

|文字列|色|
|:-:|:-:|
|'b'|青|
|'g'|緑|
|'r'|赤|
|'c'|シアン|
|'m'|マゼンタ|
|'y'|黄|
|'k'|黒|
|'w'|白| 

|文字列|プロットの線|
|:-:|:-:|
|'-'|実線|
|'--'|破線|
|'-.'|一点鎖線 ー・ー|
|':'|点線|
|'.'|点|
|','|ピクセル|
|'o'|丸|
|'v'|下向き三角形|
|'^'|上向き三角形|
|'<'|左向き三角形|
|'>'|右向き三角形|
|'s'|正方形|
|'p'|五角形|
|'*'|星|
||などなど|

### 凡例・ラベル

- `legend()`: 凡例（線が何を示しているか）
- `xlabel()`: x軸のラベル
- `ylabel()`: y軸のラベル

もし日本語を使いたい場合は，`FontProperties`でフォントを予め指定しないといけない．

```pycon
>>> plt.xlabel(u"abcdefg")
>>> plt.ylabel(u"fugafuga")
>>> plt.legend([p], ("hogehoge"))
# 日本語使いたい
>>> prop = matplotlib.font_manager.FontProperties(fname="フォントの絶対パス")
>>> plt.xlabel(u"ふがふが", fontproperties=prop)
```

### グラフを並べる

一つの図で複数のグラフを並べたいとき．
意外に便利で使える．

- `subplot()`: 引数でどこを編集するか指定

```pycon
>>> plt.subplot(221) # 縦2段、横2列の1番目
>>> plt.plot(x, sin(x))
>>> plt.subplot(222)
>>> plt.plot(x, sin(-x))
```


### 作成した図を保存

作成したグラフを論文やスライドに載せるときに重宝する．

- `savefig()`: 引数は保存するファイル名
	- .jpg, .png, .bmp, .eps, .svg, .pdf等が選択可能

```pycon
>>> plt.savefig("hoge.png", transparent=True (or False) # 背景を透明にする（しない）
```


## それ以外
基本的には上記で済むはず．でもたまに下のとかつかう．

### ヒストグラム

```pycon
>>> data = plt.normal(5, 3, 500) # 平均5,標準偏差３の正規乱数
>>> plt.hist(data, bins=30, color="red"); None
```

### 棒グラフ

```pycon
>>> years = [str(i) for i in range(2005, 2014)]
>>> steps = plt.arange(len(years)) 
>>> sales = 100 + 40 * plt.rand(len(years))
>>> plt.bar(steps, sales, align="center", color="green")
>>> plt.xticks(steps, years); None
```


### 円グラフ

```pycon
>>> rate_data = [0.3, 0.4, 0.2, 0.1]
>>> lbl = ["O", "A", "B", "AB"]
>>> ex = (0, 0.05, 0, 0)
>>> plt.axis("equal")
>>> plt.pie(rate_data, explode=ex, startangle=90, shadow=True, autopct="%1.1f%%", labels=lbl); None
```


### 画像の表示

```pycon
>>> imagedata = array([
			[1,1,1,1,1,1,1,1,1,1],
			[1,1,1,1,1,1,1,1,1,1],
			[1,1,0,1,1,1,1,0,1,1],
			[1,0,1,0,1,1,0,1,0,1],
			[1,1,1,1,1,1,1,1,1,1],
			[1,1,1,1,1,1,1,1,1,1],
			[1,0,1,1,1,1,1,1,0,1],
			[1,1,0,1,1,1,1,0,1,1],
			[1,1,1,0,0,0,0,1,1,1],
			[1,1,1,1,1,1,1,1,1,1]
])
>>> plt.imshow(imagedata)
```

### 塗りつぶし

```pycon
>>> y1 = sin(x) * cos(x)
>>> plt.plot(x, y1)
>>> y2 = -sin(x) * cos(x)
>>> plt.plot(x, y2)
>>> plt.fill_between(x, y1, y2, interpolate=True, alpha=0.3)
```

### ３次元プロット

```pycon
#3次元プロットの例
>>> from mpl_toolkits.mplot3d import Axes3D
>>> x3d = rand(100)
>>> y3d = rand(100)
>>> z3d = rand(100)
>>> fig = figure()
>>> ax = fig.add_subplot(111, projection="3d")
>>> ax.scatter3D(x3d, y3d, z3d)
テーブルの中に小さなグラフを表示する


値を監視する画面を作っている時に、表の中にアラートの数値の推移を簡単にグラフ表示ができる方法は無いかなと探してみるとSparklinesというものがありました。見た目はなんとなく一昔前風なのですが、簡単にトレンドが見れるので使ってみるとなかなか良い感じでしたので紹介します。

![graph.jpg](https://qiita-image-store.s3.amazonaws.com/0/14768/913840ff-52c3-2d0e-295f-16e95196b2c7.jpeg "graph.jpg")

# Sparklines

どうやらRuby版はもうアクセスできなくなっているようです。そこで今回はjQuery版を使いました。

* [jQuery Sperklines](http://omnipotent.net/jquery.sparkline/)

##ダウンロード

Downloadしても良いですし、CDNにあるものを呼び出しても良いと思います。

* http://cdnjs.cloudflare.com/ajax/libs/jquery-sparklines/2.1.2/jquery.sparkline.min.js
* https://cdn.deblan.org/ajax/libs/jquery-sparklines/2.1.0/jquery.sparkline.min.js

##実装

データをカンマ区切りにして用意します。

```app_controller.rb
	@data_str = [10,20,30,10,20,30].join(",")
	# => "10,20,30,10,20,30"
```

Viewに以下のようにspanタグとJavascriptを挿入します。

```list.html.erb
....

<!-- グラフを入れたい場所にspraklineクラスと文字列を配置します -->
<span class='sparkline'><%= @data_str %></span>

.....

<script>
  $(document).ready(function(){
	// Draw Sparkline
	// http://www.omnipotent.net/jquery.sparkline/
    $(".sparkline").each(function(){
      var value = $(this).text().split(",");
      $(this).sparkline(value, {type: 'line',width: '80', height: '20', lineColor: '#00007f'});
    })
  });
</script>

```

最後のJavascriptは読み込み時にclass=sparklineを探して、その中のカンマ区切りの文字列を配列として読み込み、その場所にSparklineを描画します。複数箇所にあってもすべて置き換わります。

設定はvalueの後の引数でいろいろカスタマイズできます。

##ぶつぶつ

比較的シンプルに使うことができました。

ただ、これを書いた後で、もう少し大きなグラフなら[GoogleCharts](https://developers.google.com/chart/?hl=ja)で良かった気もしましたし、[highcharts](http://www.highcharts.com/demo/sparkline)にも入っているのを確認しました。

あとは画像ではなくunicodeのキャラクターで書く方法もあります。
http://rosettacode.org/wiki/Sparkline_in_unicode#Ruby
私とPuppet 概念編

Puppetに関しての日本語ドキュメント少ない、少なすぎる。

特に、再利用性の観点で遵守すべきファイルツリー構造や、Puppetの見通しを良くする主要技術であるHieraの使い方の情報が絶対的に不足しているので発信しておきたい。

なお、このページはコンセプト的な話しかしていないので上記の内容を期待する方はすみません。

# 本シリーズの目的

* [Infrastructure as Code 概念の理解](http://qiita.com/takeuchikzm/items/fb9d1701ea19be337131)
* [Puppet環境の準備](http://qiita.com/takeuchikzm/items/eb37a918b39b069f22b3)
* [Puppetの基本の理解その1 Resource,Ordering,Class,Define,Node](http://qiita.com/takeuchikzm/items/cfa012571fdedcf0792b)
* [Puppetの基本の理解その2 Module,File,Templates,Variable](http://qiita.com/takeuchikzm/items/6b65af9e0cf8d317c9b3)
* [Puppetベストプラクティスの理解その1 ディレクトリ構成とその役割](http://qiita.com/takeuchikzm/items/5e303e03a48ab2f0db1a)
* [Puppetベストプラクティスの理解その2 多種多様なサーバの構成管理](http://qiita.com/takeuchikzm/items/8dd82540a8cceb7b850f)
* [Puppetベストプラクティスの理解その3 Hieraで世界が変わる?] (http://qiita.com/takeuchikzm/items/e04e6cbe84a185eb1f26)

## 本シリーズが目的としていないこと
* Puppetの詳細アーキテクチャ/内部挙動についての解説
* オーケストレーション、ブートストラッピングに関してのテクニック紹介

  + MCollective, PuppetDB、等のPuppet

* ChefやAnsible等の競合技術との詳細な比較

# What's "Infrastructure as Code" ?

お堅い言い方をすると、

**"インフラストラクチャー構成管理における構築・運用をプログラマブルにする"**

するというコンセプト。意地悪な言い方をするとバズワード。
AWSやGoogle等がRestAPI等で簡単にサーバを立ち上げる技術を整備した事で敷居が非常に下がった。

インフラ構成管理における構築・運用となる技術要素をブレークダウンすると以下の3つのレイヤに大別できる。

* ブートストラッピング
   + 物理ハードウェア環境やクラウド環境上に、OSが動作しているサーバもしくはVMを用意するための技術。
   + 物理ハードウェアでも、kickstart(http, tftp, dhcp)やIPMI等のソフトウェア技術と、
     各ハードウェアベンダが提供する遠隔管理ボード(iMM, iDRAC, iLo等)を利用することで実現は可能。

* コンフィグレーション
   + OSインストール後のミドルウェアのインストールやファイル設定を等を行うための技術。
   + Puppet、Chef、Ansible(ansible-playbook)等がもっとも得意とする構成管理部分。

* オーケストレーション
   + 複数のサーバを跨いだサービスの連携等を調整させながら操作するための技術。(ex. Web三層のWeb、AP、DBのサービスを順に起動するなど。)
   + Capstriano, Fabric, MCollective, pssh, Ansible(ansible)等が得意とする部分。

参考: [インフラ系技術の流れ](http://mizzy.org/blog/2013/10/29/1/)

# Why Infrastructure as Code ?

「いつまであるかもわからない新しい技術覚えるより、手で設定したり操作したほうが確実だよね。」
→ それサーバ1000台あっても言えんの？
→ なお、数台のマシンでも、コードとしてインフラ構成を記述しておくとレビュや構成変更のバージョン管理がしやすかったり、別のシステムにも流用できたりとインフラの品質向上に直結する。

「SSHとかを使ってシェルスクリプトで構成管理したら良いじゃない。」
→ シェルスクリプトはあくまで処理を実行するためのもの。
→ 構成管理をするためのPuppet/Chef/Ansibleは設計意図がわかりやすく、再利用性が高い。
→ システムを使っていく中で継続的に発生する変更要求も吸収しやすい。   

# Why Puppet ?

Puppetは、Puppetのいまいちな部分をうまく補完している後発のChefやAnsibleに比べると、
若干煩雑なエコシステムと感じる時はある。

しかし、Puppetの記述言語であるmanifestはシステムのあるべき姿を記述するという思想に忠実な設計となっている。
そのため、ある程度の技術レベルを持っている多数のメンバにmanifestを配布して利用してもらうような形態には向いていると感じる。

なお、上記の所感はもちろん本気ではあるが、私がPuppetを使い続ける最も大きな理由はPuppetを長い事使っているため既存の資産が大量にあるからというのが大きい。

# まとめ

書いてみたがぜんぜんPuppet個別の話になってなかった。
Gulp導入手順

## node.jsのインストール
node.jsにて開発されているので、まだインストールしていない場合はインストールが必要です。

[node.js](http://nodejs.org/)

## gulpのインストール（グローバル）
コマンドラインにて作業を進めます。

    sudo npm install -g gulp

※npmバージョンが古いとエラーが出る場合があるようなので最新にしておきましょう

    sudo npm install -g npm

gulpがインストールできたか確認のためバージョン情報を見てみます。

    gulp -v

下記のようになっていればOKです。
※ここではまだLocal version undefinedで問題ないです

    CLI version 3.8.7
    Local version undefined

## 試用
とりあえず使えるか試してみます。
まずは、プロジェクトフォルダに移動してください。

### package.json作成
Gruntと同様、package.jsonを作成します。

    npm init

下記のような対話形式で進んでいくので必要部分だけ入力します。

    name: (gulp)
    version: (0.0.0)
    description: 
    entry point: (gulpfile.js)
    test command:
    git repository:
    keywords:
    author:
    license: (ISC)
    About to write to /Users/username/gulp_project_foldar/package.json:

    {
      "name": "test",
      "version": "0.0.0",
      "description": "test data",
      "main": "gulpfile.js",
      "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
    
    
    Is this ok? (yes)

### gulpのインストール（ローカル）
gulpはグローバルだけでなくローカル（プロジェクト毎）にもインストールする必要があります。
そのあたりの話は、[gulpのアプローチ "なぜグローバルとローカルにインストールが必要なのか"](http://nakajmg.github.io/blog/2014-09-03/gulp-structure.html)あたりに書いてあるので興味が有る場合は参考にするといいかと思います。
下記を実行します。

    sudo npm install gulp --save-dev

ここでまたバージョンを確認すると、下記のようにローカルバージョンも反映されているかと思います。

    gulp -v
    CLI version 3.8.7
    Local version 3.8.7

### Hello World!してみる
簡易な動作確認として、ここでは「Hello World!」のみしてみます。

#### gulpfile.jsの作成
gulpfile.jsは、gulpのタスクを定義するファイルになります。
GruntでいうGruntfile.jsにあたります。
gulpfile.jsを作成して、Hello World用に下記のコードを記入して保存します。

    var gulp = require('gulp');
     
    gulp.task('default', function() {
        console.log('Hello Gulp!!');
    });

#### gulp実行
「gulp タスク名」で実行できますので、

    gulp default

もしくは

    gulp

にで実行できます。
※defaultタスクの場合は、gulpだけでも実行されます

コマンドライン上に、「Hello Gulp!!」が表示されたら成功です。


※参考サイト
[タスクランナーgulp入門 to-R](http://blog.webcreativepark.net/2014/05/12-183033.html)
MacOS Xでウィンドウを半透明にする

Mac OS Xで、ウィンドウを半透明にする方法です。
afloatというアプリを使います。

↓こんなふうに
![スクリーンショット 2015-06-19 16.47.50.png](https://qiita-image-store.s3.amazonaws.com/0/42669/7d3c75c8-0db3-543a-38d9-3dd31a22a127.png)

#インストール
##SIMBL 0.9.9をインストール
http://www.culater.net/software/SIMBL/SIMBL.php

##afloat 2.4をインストール
http://mac.majorgeeks.com/mg/getmirror/afloat,1.html

インストール後は、表示しているウィンドウを一度終了して起動しなおすと、「ウィンドウ」メニューにafloatが表示されています。そこから半透明に設定可能。
play-scala 2.3.4にScalikeJDBC 2.1.1を組み合わせようとしてハマったこと。


## 1. play.pluginsは自分で作る

`activator new` したプロジェクトには `conf/play.plugins` というファイルがないので、自分で作って書き込む必要がある。
書き込む内容は[CookBook](https://github.com/scalikejdbc/scalikejdbc-cookbook/blob/master/ja/10_play.md)に書いてある。


## 2. Build.scalaはbuild.sbtに読み替える

CookBookには Build.scala を編集しろとあるが、build.sbt しかない。そして中を見ても見慣れた
`"hogehoge" %% "hoge" % "x.x.x"`
といったライブラリを登録する記述が見当たらない。しかしよく見ると…

```build.sbt
libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,
  ws
)
```

おそらくjdbc, anormなどが定義済みの変数だかになっているだけなので、その中に
`"org.scalikejdbc" %% "scalikejdbc" % "2.1.1"`
を追加すれば登録できる。
Jacksonメモ

Jackson の使い方などのメモ
今後追加していく予定

# JSON変換高速化

Jacksonでの JSON への変換時にボトルネックとなっている部分として、どうにも ObjectMapper のインスタンスの生成が遅い気がする。
さらに、マルチスレッドで並列に生成しようとすると、排他処理がかかっているのか（ソースを見ていないので違っていたらゴメンナサイ）、シリアルにJSON変換が行われているように見える。

そこで、ObjectMapperがスレッドセーフであれば、あらかじめ生成した ObjectMapper を使いまわす事で、処理の高速化を計れそう。

っということで、ObjectMapperがスレッドセーフか調査

※ http://wiki.fasterxml.com/JacksonFAQ

```
Is ObjectMapper thread-safe?

Short answer: yes

Long answer: yes, as long as you always configure instance before use, and do not call configure methods during operation (or synchronize such calls appropriately). Usually it is better to construct separate mapper instance if configurations differ in any case.

Further: it is beneficial to use just one instance (or small number of instances) for data binding; many optimizations for reuse (of symbol tables, some buffers) depend on ObjectMapper instances being reused.

For more information, check out JacksonFAQThreadSafety

```


どうやら、read/wirte中にObjectMapperの設定が変更されなければスレッドセーフということなので、
単純な使い方だけなら問題なさそう。



#ジェネリクスのJSONデシリアライズ

ジェネリクスをJSONにシリアライズすることは特に意識しなくてもできるが、
それを再度デシリアライズしてオブジェクトに戻そうとすると、
JsonMappingException が発生してしまう。

これの解決策として、<b>@JsonTypeInfo</b> で型情報を一緒にJSONに出力することで、ジェネリクスでもJSONからオブジェクトにデシリアライズできる

#####サンプル

```java
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, property="classType")
public abstract class SuperClass {
    public int id;
}

public class SubClass extends SuperClass {
    public String name;
}

public class DerivedClass extends SuperClass {
    public int number;
}

public class Array extends SuperClass {
    List<SuperClass> list = new ArrayList<SuperClass>();
}


public static void main() {

   SubClass sub = new SubClass();
   sub.id = 1234;
   sub.name = "aiueo";

   DerivedClass derived = new DerivedClass();
   derived.id = 5678;
   derived.number = 1;

   Array hoge = new Array();
   hoge.list.add(sub);
   hoge.list.add(derived);

   ObjectMapper mapper = new ObjectMapper();
   String json = mapper.writeValueAsString(hoge);
   
   System.out.println(json);
   
   Array hoge2 = mapper.readValue(json, Array.class);
   String json2 = mapper.writeValueAsString(hoge2);
   System.out.println("desirialize success ?");
   System.out.println(json.equals(json2));
}

```

#####結果
<pre>
{
    "classType": "Array",
    "id": 0,
    "list": [
        {
            "classType": "SubClass",
            "id": 1234,
            "name": "aiueo"
        },
        {
            "classType": "DerivedClass",
            "id": 5678,
            "number": 1
        }
    ]
}

desirialize success ?
true
</pre>


###JsonTypeInfo

##### ■ use 属性
型情報の出力方法を指定。
今回は Id.CLASS を指定しているので、パッケージを含めたクラス名で出している

##### ■ propety 属性
JSON出力時のキー名を指定。

### 制限

サンプルにある Array クラスが以下のようになっている場合、JsonTypeInfo が出力されません。
おそらく list 内で、JsonTypeInfo を出力できないクラスが混じる可能性がある場合は出力しないようになっているのではないかと思われ・・・

```java
public class Array extends SuperClass {
    //List<SuperClass> list = new ArrayList<SuperClass>();
    List<Object> list = new ArrayList<Object>();
}
```

# デシリアライズ時のコンストラクタ指定

[こちら](http://qiita.com/nijuya_o/items/75aedcae82ab817ab96d)

# Jackson でオブジェクトの Serializer を作ってみる

[こちら](http://qiita.com/nijuya_o/items/0f512792c4db27913c7a)
今すぐ/etc/resolv.confに options single-request-reopen を追加するんだ！

参考:

* [options single-request-reopenの検索結果](http://qiita.com/search?utf8=%E2%9C%93&sort=rel&q=options+single-request-reopen)
* [RHEL6/CentOS6では、single-request-reopen を必須にしたい…](http://www.kunitake.org/chalow/2012-11-02-1.html)
* [CentOS6で名前解決に時間がかかるとき at softelメモ](http://www.softel.co.jp/blogs/tech/archives/4692)

CentOS6で確認しました。
yum install が快適な速度になります。

```diff:/etc/resolv.conf
+ options single-request-reopen
```

再起動不要


# 他の方法

* [Man page of RESOLV.CONF](http://linuxjm.sourceforge.jp/html/LDP_man-pages/man5/resolv.conf.5.html)

```diff:/etc/sysconfig/network
+ RES_OPTIONS="single-request-reopen"
```
ProtractorのテストをCoffeeScriptで書くと「by」が使えない

CoffeeScriptでは`by`が予約語であるため、Protractorのテストに使えない。

これはすでに対処されていて、`by`の代わりに`By`を使えばよい。

参考：[feat(global): export By (== by) on the global for use with coffeescript ... · e7d9e08 · angular/protractor](https://github.com/angular/protractor/commit/e7d9e081cdc7fcf100e0346b1dcf0f7fdad7d889)
Rails Module::Class の要素に対する i18n の書き方


ハマったのでメモ。
##前提:クラスのメンバ変数に対するi18n化

```app/models/hoge.rb
class Hoge
  include ActiveModel::Model

  attr_accessor :miko

  ...
end
```
というようなクラスがあり、```@miko``` に対する日本語名を与える場合には、

```config/locales/models/ja.yml
ja:
  activemodel:
    models:
      hoge: ほげ
    attributes:
      hoge:
        miko: 巫女さん
```
とすれば良いのは周知の通りです。

##モジュールクラスのメンバ変数に対するi18n化

```app/models/hoge.rb
module Hoge

  class Piyo
    include ActiveModel::Model

    attr_accessor :miko

    ...
  end

end
```

ではこういうモジュールがあった場合、```@miko``` に対する日本語名を与えるにはどうすれば良いのでしょうか。

```config/locales/models/ja.yml
ja:
  activemodel:
    models:
      hoge:
        piyo: ぴよ
    attributes:
      hoge:
        piyo:
          miko: 巫女さん

```

上記のように yaml で階層構造を表現する書き方ではうまくいきません。
正しくは、

```config/locales/models/ja.yml
ja:
  activemodel:
    models:
      hoge/piyo: ぴよ
    attributes:
      hoge/piyo:
        miko: 巫女さん

```

このように、キーをスラッシュ区切りにすることで実現出来ます。

##キーを知るための方法

上記のような特定の ActiveModel クラスへのキーを調べるには [ActiveModel::Naming](http://api.rubyonrails.org/classes/ActiveModel/Naming.html) を使います。

```app/models/hoge.rb
module Hoge

  class Piyo
    include ActiveModel::Model
    extend ActiveModel::Naming # <-- クラスメソッドとして追加

    attr_accessor :miko

    ...
  end

end
```

これで各メソッドを呼び出してあげましょう。
i18n のためのキーが知りたければ、コンソールから、

```
rails c
Hoge::Piyo.model_name.i18n_key
=> :"hoge/piyo"
```

とすることで出力させることが出来ます。
shellからpackage.jsonの内容を取得するワンライナー

npm module の情報を shell スクリプトから参照する方法です。

# これです
```bash
PKG_VERSION=`node -pe 'require("./package.json").version'`
```

以上。

`.version`の部分は適宜書き換えてください。

# 解説

はじめは `npm version` コマンドで取得できるでしょー、と思って調べたんですが、これはバージョンアップ専用で取得はNGでした。
ということで node の`-e: eval script`オプションで`package.json`ファイルを直接ロードする方法で解決。
`require` 便利！

## 2014.10.20 追記
インラインで`console.log`していたのを、`-p: evaluate script and print result` オプションで代替できると教えてもらいました。
@fukayatsu ありがとうございます！

少しハマったので書き残しておきます。
Windows 版でウィンドウサイズ指定方法

Windows 版でウィンドウサイズを指定するには、"AppDalegate.cpp" の AppDelegate::applicationDidFinishLaunching() の中を以下のように修正し、createWithRect() をコールして、サイズを指定するといいぞ。

>  #define WIDTH 400
>  #define HEIGHT 640
>
> bool AppDelegate::applicationDidFinishLaunching() {
> 　　auto director = Director::getInstance();
> 　　auto glview = director->getOpenGLView();
> 　　if(!glview) {
>  #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
> 　　　　glview = GLView::createWithRect("My Game", Rect(0, 0, WIDTH , HEIGHT ));
>  #else
> 　　　　glview = GLView::create("My Game");
>  #endif
> 　　　　director->setOpenGLView(glview);
> 　　}
> 　　:
ggplot2で軸のメモリをパーセントにする

## 方法

`scales`パッケージをロードしてから、`scale_y_continuous(labels = percent)`とする。

```r
x <- rnorm(10) * 100000
y <- seq(0, 1, length = 10)
p <- qplot(x, y)
library(scales)
p + scale_y_continuous(labels = percent)
```

## 参考
- [scale_x_continuous. ggplot2 0.9.3.1](http://docs.ggplot2.org/current/scale_continuous.html)
Sublime Text ショートカットメモ


# 標準
## ファイルサーチ
`Cmd + P`

## 文字列選択
`Cmd+D` 連続で文字列選択
`Cmd+U` 選択1つ取り消し
`Cmd+K` 1つスキップ

## 行
`Cmd+l` 行選択
`Cmd+Shift+d` 行複製

## ファイル内移動
`Cmd + up` ファイル最上部
`Cmd + down` ファイル最下部

# 自己設定
`Preference > KeyBindings User`
## 関数宣言ジャンプ

```
// F3で関数の宣言元にジャンプ
{ "keys": ["f3"], "command": "goto_definition" },
// alt+左で戻る
{ "keys": ["alt+left"], "command": "jump_back" },
// alt+右で戻ったのをまた進める
{ "keys": ["alt+right"], "command": "jump_forward" },
```

## 移動履歴
`opt + left` 前に居た場所

## 同一ファイルを並べて見る
ショートカットではないが…

1. `Cmd+opt+数字`で画面分割
1. `File`>`New View into File`してファイルビュー複製
1. 分割先へ複製ビューを移動
Windowsでのhostsの設定

# はじめに
* MacやLinuxなら```$ sudo vi /etc/hosts```で書き換えてやるだけです
* ただ、Windowsの場合、「あれどこにhostsファイルあるんだっけ？」となったのでメモ

# hostsの場所
* C:/Windows/System32/drivers/etc/hosts

# hostsの書き換え
* hostsファイルを選択する
* プロパティ⇒セキュリティ⇒編集⇒Users(ログインしているユーザを選択)⇒変更ができるようにチェックボックスにチェックを入れ権限を変更する
* あとは変更入れて保存して、変更した権限を元に戻す

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
【備忘録】Android Studioで必要な設定(JAVA_HOME)

職業訓練でAndroidアプリ開発講座を受講しています。
授業の開発環境はEclipse+ADTなのですが、
何を思ったのかAndroid Studioを使ってみようと思いました。
Windowsで環境変数を追加しないとういけないのですが、
JAVA_HOME
の設定が必要になります。(LinuxとかMacOS Xが必要かは環境がないので不明です。)
JAVA_HOMEのパスってよく入門書でよくみかけるjavacとかjavaの場所ではないんですね(汗)
つい混同してしまった。

普通にインストールしたところのパスなんですね。
例のようなパスをJAVA_HOMEで追加して起動できるようになりました。

例
C:\Program Files\Java\(Javaのバージョン)
WKWebViewでwindow.webkit.messageHandlersが効かないサイトへの対処法

どういうわけかwindow.webkitをtrueで上書きしているサイトが少なからず存在します。
そのサイトにはWKWebViewの`userContentController:didReceiveScriptMessage:`(WKScriptMessageHandler)を呼び出せません。

## 対処法
ページを読み込む前にwindow.webkitを別の変数に保存しておき、あとはその変数からmessageHandlersを使えばOKです。

こちらを参照: [WKWebViewでJavaScriptを読み込み前後に仕込むサンプル](http://qiita.com/ShingoFukuyama/items/54d839038794dd592145)

### 例
```
-------------------------
ページの読み込む前 JavaScriptを実行
MyWebkitNamespace = window.webkit;
-------------------------
ページの読み込み...
-------------------------
ページの読み込み後 JavaScriptを実行
MyWebkitNamespace.messageHandlers.myMessageTest.postMessage('ok');
-------------------------
```
css display:tableで、[非]等間隔に並べるには

## display:tableざっくり概要

cssでdisplay: table;display: table-cell;をつかってレイアウトする際にちょっとはまった事。
display:tableを使うとテーブルレイアウトできるから、縦ラインを揃えられたり、table-layout: fixed;を指定する事でセル幅を揃えることができる。

## やりたいこと

table内のセルを一部に隙間を開けたい場合、ちょっとハマった。そもそもtable-cellにはmarginが効かないという事をマークアップして初めて気づいた。background-clipというプロパティを使うとできるらしいけど、今回はIE8対応しなくちゃならないのでボツ。

## 結果

まあ一番原始的な・・・というかこれしか思いつかなかったけど、table-cellの中にブロック要素を配置してそれをレイアウトするやり方で解決しました。table-cellを指定した要素は直接レイアウトしない。


```
#例えば一番左セルに隙間を空ける
.table1 li:first-child div {
	margin-right: 30px;
}
</style>
<ul class="table1">
	<li><div>A</div></li>
	<li><div>B</div></li>
	<li><div>C</div></li>
	<li><div>D</div></li>
	<li><div>E</div></li>
</ul>
```
ubuntu13.04 13.10 14.04 にマインクラフトをインストールしてみた。


＃ubuntu13.10 gnomeを対象にしています。普通のubuntuでも問題ないと思われます。
＃対応バージョン
＃ubuntu desktop 13.04 / 13.10 / 14.04
＃ubuntu server 13.04 / 13.10 / 14.04
＃minecraft　1.6.2 / 1.6.4 / 1.7.2 / 1.7.9 / 1.7.10 / 1.8
＃普通のインストールなのでインストールは割愛させていただきます。
＃端末をひらきます。
＃/home/ユーザー名と仮定

#1.マインクラフト用のフォルダを作ります
`mkdir mc`


#2.マインクラフトのフォルダへ移動します
`cd mc`


#3.マインクラフトのサーバーファイルをダウンロードします。
`wget https://s3.amazonaws.com/Minecraft.Download/versions/1.7.4/minecraft_server.1.7.4.jar`
　　　1.7.2とかの場合は　wget https://s3.amazonaws.com/Minecraft.Download/versions/1.7.2/minecraft_server.1.7.2.jar


#4.起動スクリプトを書きます。
`nano mi`
＃GEDITでもemacsでもvimでもおすきなのをどうぞ　nanoの場合は保存するときはCTRL+o
＃nanoEDITERを終わらせる場合は　ctrl + x になります。
===========ファイルの内容===================================
`#!/bin/bash`
`#マインクラフト起動スクリプト`
`java -Xmx1024M -Xms1024M -jar minecraft_server.1.7.4.jar`  
===========ファイルの内容===================================


#5.　miに実行権限を与えます。
`chmod +x mi`


#6.念のためmc内のファイルのアクセス権を自分に設定します。
`chown -R ユーザー名:ユーザー名　/home/ユーザー名/mc`


#7.JAVAインストール
`sudo add-apt-repository ppa:webupd8team/java && sudo apt-get update && sudo apt-get install oracle-jdk7-installer`
・リポジトリの追加にENTERをする
・そのあとに出るライセンスに同意する

#7(おまけ)複数JAVAが入っている場合の対処
`sudo update-alternatives --config java`
         /usr/lib/jvm/java-7-oracle/bin/java の番号を選択する
`sudo update-alternatives --config javaws`
　　　　　/usr/lib/jvm/java-7-oracle/bin/javaws の番号を選択する
`sudo update-alternatives --config javac`
         /usr/lib/jvm/java-7-oracle/bin/javac の番号を選択する


#8.javaのバージョン確認
`java -version`


#9.マインクラフトの起動
`./mi`


#10.ファイアウォールの設定　必要な人だけ
`sudo ufw allow 25565/tcp`
`sudo ufw reload`
`sudo ufw enable`


マインクラフトのポートを変更している場合は　`25565/tcp`　を変更してあげてください
　　
　　
注意）フォージを入れる場合おそらくインストーラーの関係でデスクトップ環境からのほうが楽なので
　　　初心者の方はubuntudesktopをおすすめします。
　　　ubuntuserverにフォージを入れる場合私はubuntudesktop
     　　　の場所からサーバーへ接続を選択　"ssh://username@192.168.xxx.xxx"
　　　としてデスクトップにマウントしてからフォージインストーラーを使っています。

注意）sudoでマインクラフトを起動して新しいファイルができたりすると勝手にrootのファイルができてたりして
　　　sudoなしでは起動できなくなる場合がありますのでその時は6番をやってみてください。

###それでは皆様よいマインクラフトライフを～
ubuntu 14.04にOracleJDK7（JAVA）をインストールする

簡単にインストールが可能な上、アップデートもしてもらえるので便利です。バージョン固定したい場合はtar.gzをダウンして
手動インストールをおすすめします。
対象バージョンのubuntu　13.04 / 13.10 / 14.04 だったとおもいます。
（VPSでも対応できるように追記しました）12.04/14.04　最小構成　KAGOYAクラウドVPSでテスト済み
apt　apt-get　は読み替えてください


##注意：現在オラクルがサポートログインでのみJAVAを配布しているため下記の方法でインストールすることができないです。
過去の情報をのこすためにあえてこのまま残します。指摘をしてくださったharukisanさんありがとうございました。
2019年4月16日以降のリリースでは、Oracle JDKライセンスが変更されたためubuntuなどのリポジトリからもオラクルのJAVAが外されたようです。


##１．リポジトリを追加
で目的のJavaを選んでください。
```
$ sudo add-apt-repository ppa:webupd8team/java
```


(VPS等の最小構成の場合　add-apt-repository　がないため)手動で追加をします。
/etc/apt/sources.list.d/java.listを作成。
`# vi /etc/apt/sources.list.d/java.list`
リポジトリを追加
`deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main`
`deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main`
認証キーの追加
`# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886`
##２．アップデート
javac, javawsもJavaと同様に目的のプログラムを選びます。
```
$ sudo apt update
```

##３．jdk7のインストール
理由はopenjdkとoraclejdkが入っている場合、Javaだけ切り替えをしても、javacやjavawsはopenjdkのままだったりするためです。
```
$ sudo apt install oracle-jdk7-installer
```

##４．念のため確認
確認手動でインストールした場合update-alternativesコマンドがないかもしれませんその方への応急処置としてパスを書いておきます。
/usr/bin/java
/usr/bin/javac
/usr/bin/javaws
シンボリックリンクをはるといいかもしれません。

以下でJAVAのバージョンを確認。
```
$ java -version
```


##めんどくさい方用　1行にまとめました
```
$ sudo add-apt-repository ppa:webupd8team/java && sudo apt update && sudo apt install oracle-jdk7-installer
```

##複数のJavaが入ってる方のための設定
```
$ sudo update-alternatives --config java
```
で目的のJavaを選んでください。

##JDKで複数のJavaが入ってる方のための設定
javac, javawsもJavaと同様に目的のプログラムを選びます。

```
$ sudo update-alternatives --config javac
$ sudo update-alternatives --config javaws
```

理由はopenjdkとoraclejdkが入っている場合、Javaだけ切り替えをしても、javacやjavawsはopenjdkのままだったりするためです。

##update-alternativesがない　または手動でかえてやるという方へ
手動でインストールした場合update-alternativesコマンドがないかもしれませんその方への応急処置としてパスを書いておきます。
`/usr/bin/java`
`/usr/bin/javac`
`/usr/bin/javaws`
シンボリックリンクをはるといいかもしれません。

##update-alternativesのリンク先（何か障害が起きた場合お役立てください）

```
lrwxrwxrwx 1 root   root         22  8月 23 18:20 java -> /etc/alternatives/java
lrwxrwxrwx 1 root   root         23  8月 23 18:20 javac -> /etc/alternatives/javac
lrwxrwxrwx 1 root   root         24  8月 23 18:20 javaws -> /etc/alternatives/javaws

lrwxrwxrwx 1 root root  39  8月 23 18:20 java -> /usr/lib/jvm/java-7-oracle/jre/bin/java
lrwxrwxrwx 1 root root  36  8月 23 18:20 javac -> /usr/lib/jvm/java-7-oracle/bin/javac
lrwxrwxrwx 1 root root  41  8月 23 18:20 javaws -> /usr/lib/jvm/java-7-oracle/jre/bin/javaws
```
IETF GeoJSON は Informational RFC 狙い

Internet-Draft となり Version 03 が出ている The GeoJSON Format (draft-butler-geojson-03, http://tools.ietf.org/html/draft-butler-geojson-03 )の第3行に「Intended status: Informational」とある。つまり、Informational RFC を狙っているということではないかと思う。Informational RFC の位置づけについては、http://rfc-jp.nic.ad.jp/what_is_ietf/ietf_section4.html などに詳しい。「標準化トラックではないが、業界にとって有用な情報」という扱いである。Wikipedia http://ja.wikipedia.org/wiki/Request_for_Comments には、「エイプリルフールのジョーク、プロプライエタリなプロトコル、RFC 1591（DNSの構造と権限の委任）のように広く不可欠なものと認められた RFC など、ほとんどあらゆるものが含まれる。」とある。https://www.nic.ad.jp/ja/rfc-jp/RFC-Category.html にも、「標準化過程としては処理されないが、 インターネット全体に広く公知することが望ましいと判断された内容」という記載がある。
keytoolでSHA1フィンガープリントとると文字化けする対処


google+で認証しようとして公式サイト
https://developers.google.com/+/quickstart/android
参考にやってると
`keytool -exportcert -alias androiddebugkey -keystore <path-to-debug-or-production-keystore> -list -v`
こういう風に書いてるんですが、
これこのままやってなんかばけばけでした。

こちらのブログを参考に
http://d.hatena.ne.jp/sakura_bird1/20111218/1324177130

`$ keytool -list -keystore ~/.android/debug.keystore`
これを打つとうまくいきました。
gnuplotでファイル名装飾っぽいことをやる

gnuplotだけでいろいろがんばろうとする

# 背景
* result*.datをまとめてplotしたい
* [gnuplotでワイルドカードを使用する方法](http://qiita.com/himo/items/28eedc39a7248feac5d8)
* ファイル名等を凡例にも用いる場合が多い
* 拡張子やディレクトリ名が邪魔だなぁ・・・
* シェルにあるファイル名装飾（:hとか:tとか）が欲しい

# 方法
```bash:~/.gnuplot
# path edit
# _t : tail      : extract filename
# _h : head      : extract path name
# _e : extention : extract file extention
# _r : root      : remove file extention
#
# USAGE:
#                 r                e
#  <----------------------------> <->
#  /home/someone/somedir/somefile.ext
#  <-------------------> <---------->
#             h               t
#
#  > print t(h("/home/someone/somedir/somefile.ext"))
#  > somedir

e(x) = (strstrt(x,".") == 0 ? x : e(substr(x,strstrt(x,".") + 1, strlen(x) )))
t(x) = (strstrt(x,"/") == 0 ? x : t(substr(x,strstrt(x,"/") + 1, strlen(x) )))
r(x) = substr(x,0,strlen(x) - strlen(e(x)) - 1)
h(x) = substr(x,0,strlen(x) - strlen(t(x)) - 1)

# replace string
s(x,a,b) = system("echo ".x." |  sed 's/".a."/".b."/'")
sg(x,a,b) = system("echo ".x." |  sed 's/".a."/".b."/g'")
```

こんな感じです。
`e()`や`r()`は.tar.gzの様に拡張子が複数ついている場合1個ずつ削ります。
ディレクトリ名に.があったりすると変なことになるかも。

sのように、systemで外部でやってもらえばいい気もします。

# 使用例

```console
gnuplot> list(x) = system("ls ".x)
gnuplot> p for [fn in list("result*.dat")] fn ti s(r(fn),"result","")
```

こんな具合でしょうか。
かんたんUnityのgatcomponent

別のゲームオブジェクトなどにくっついているスクリプトのメソッドを実行する
のにgamecomponentを使ってみました。

以下のようにMainCameraのスクリプトからWarpPanelというゲームオブジェクトに
くっついているWarpPanerlというスクリプトのPlayMovieを呼び出すことで
ワープっぽい動画を再生させます。
ワープパネル連呼でわかりにくい。。。。

![スクリーンショット 2014-09-05 2.29.09.png](https://qiita-image-store.s3.amazonaws.com/0/38279/5f4d335b-a34d-ed65-7b9d-26bcb31ecafc.png)

動画を貼付けます。
![スクリーンショット 2014-09-05 2.31.45.png](https://qiita-image-store.s3.amazonaws.com/0/38279/cf4b46c3-b7e5-5cde-7547-465bc0057a3e.png)

WarpPanelにmovieobjectと背景用にbacklayerを入れます。
![スクリーンショット 2014-09-05 2.31.58.png](https://qiita-image-store.s3.amazonaws.com/0/38279/ad4cfadb-61cc-7176-654d-7275314c646a.png)

MainCameraには、CameraControlを入れて
WarpPanelをアサインします。

![スクリーンショット 2014-09-05 2.32.05.png](https://qiita-image-store.s3.amazonaws.com/0/38279/93147190-c0c4-edc7-7863-af916fcfab6a.png)

これで、こんな感じの光が出る映像を出現させる！！
![スクリーンショット 2014-09-05 2.18.36.png](https://qiita-image-store.s3.amazonaws.com/0/38279/67cab72a-1c94-b7f7-06ce-ded371bc4a70.png)


各スクリプトは以下のような感じ！

```csharp:WarpPanel
using UnityEngine;
using System.Collections;

public class WarpPanel : MonoBehaviour {

	//setting
	public bool IsPlay =false;
	public GameObject MovieObject;
	public GameObject MovieLayer;

	private MovieTexture MovieTexture_;

	void Start () {
		MovieTexture_ = MovieObject.renderer.material.mainTexture as MovieTexture;
		MovieObject.renderer.enabled = false;
		MovieLayer.renderer.enabled = false;
		MovieTexture_.loop = false;
		//MovieTexture_.Play();
	}

	public void PlayMovie()
	{
		// 一度だけ再生
		if (IsPlay == false)
		{
			IsPlay = true;
			MovieLayer.renderer.enabled = true;
			MovieObject.renderer.enabled = true;
			MovieTexture_.Play();
		}
	}

	public void StopMovie()
	{
		// 停止
		if (IsPlay == true)
		{
			IsPlay = false;
			MovieLayer.renderer.enabled = false;
			MovieObject.renderer.enabled = false;
			//MovieTexture_.Stop();
		}
	}
}
```

```csharp:CameraControl
using UnityEngine;
using System.Collections;

public class CameraControl : MonoBehaviour {
	public GameObject WarpPanelObject;
	//public GameObject WarpMovie;
	private MovieTexture MovieTexture_;
	private WarpPanel WarpPanel_;


	// Use this for initialization
	void Start () {
		WarpPanel_ = WarpPanelObject.GetComponent<WarpPanel> ();
		WarpPanel_.PlayMovie ();
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}
```
enchant.js v0.8.2でのiOSにおけるサウンド再生

enchant.js v0.8.2では、iOSのSafariで音を鳴らすための仕組みである、

`enchant.ENV.SOUND_ENABLED_ON_MOBILE_SAFARI = true`

がデフォルトになったのだが、このオペレーションをゲーム内で行っている場合は二度手間になってしまうので`false`にしたいのだが、このパラメーターの値自体が無効らしく、`false`にしても「Tap to Start」が出てしまう。

これの改善策は！v0.8.1を使うしかないっぽい。
逆にv0.8.1はこのパラメーター値を`true`にしても、画面に出てくる「Tap to Start」が反応しないというバグがある。
enchant.jsとtmlib.jsのタッチイベントの違い

# enchant.js
```coffeescript:enchant_sample.coffee
sprite.ontouchstart = (e)->
    x = e.x
    y = e.y
sprite.ontouchmove = (e)->
    x = e.x
    y = e.y
sprite.ontouchend = (e)->
    x = e.x
    y = e.y
sprite.ontouchcancel = (e)->
    x = e.x
    y = e.y
```


# tmlib.js
```coffeescript:tmlib_sample.coffee
sprite.onpointingstart = (e)->
    x = e.app.pointing.x
    y = e.app.pointing.y
sprite.onpointingmove = (e)->
    x = e.app.pointing.x
    y = e.app.pointing.y
sprite.onpointingend = (e)->
    x = e.app.pointing.x
    y = e.app.pointing.y
sprite.onpointingcancel = (e)->
    x = e.app.pointing.x
    y = e.app.pointing.y
````
isomorphicなJavaScriptプロジェクトのパッケージ管理


Node.jsでフロントエンドもバックエンドもJSのプロジェクトをはじめる際に、
それぞれのパッケージ管理をどのようにするか悩んだ記録。

要件としては、

* 1.フロントエンドもrequireでmoduleの探索をしたい
* 2.フロントエンドとバックエンドでパッケージ管理を分けたい


1を満たすためにcomponent.jsかbrowserifyか悩んだ。
browserifyは作りが怖かったが、component.jsはもっと怖かった。

browserifyを単純に使うとnode_modulesを共有してしまうので、
2が満たせない。debowerifyというpluginがあるようなので、
フロントエンドはbower_components/にという方針でやってみた。

```
// バックエンドの依存管理
package.json
// バックエンドのパッケージ置き場
node_module/* 
// バックエンドのアプリケーションコード
lib/*.js

// フロントエンドの依存管理
bower.json
// フロントエンドのパッケージ置き場
bower_component/*
// フロントエンドのアプリケーションコード
frontend/js/*.js

gulpfile.js  // browserifyとdebowerify
// 結合後のjsやcss
public/


```
ところがこれだと、node_moduleもbower_componentも同じモジュールがあったときに、
node_moduleのほうをbrowserifyが優先してしまい、コードを見てもオプションがなさそうだった。

また、gulpで必要なモジュールをpackage.jsonに書き続けないと行けないのもつらい。

結局、次のようにフロントエンドとバックエンドで異なるリポジトリという意識に近い構成にした。

```
// バックエンドの依存管理
package.json
// バックエンドのパッケージ置き場
node_module/* 
// バックエンドのアプリケーションコード
lib/*.js

// フロントエンドのもろもろをやるところ
frontend/
	- package.json
	- bower.json
	- node_module/
	- bower_component/
	- gulpfile.js
	- public/


```

npm scriptsのpostinstallなどでfrontendにcdして、bower install && npm install
したりすることで環境構築すればいいかなと。

gulpは、cwdを外から差し込めないタイプのモジュールが多すぎて、どうせ、フロントエンドでしかつかわないから
そちらに置くことにした。

isomorphicなとかいいながら、共有コードについて触れていないのは、
やってみて必要になったら、考えるという形でいくつもり。