OmniAICreator/Qiita-1.07M huggingface dataset:
CentOS7に最新のGitをインストール、アップデート、他


# 最新のGit(2.9.0)をCentOS7にインストール & アップデート
* vagrant
* CentOS 7.0
* Git 2.9.0

## パッケージマネージャーの古いバージョンを削除
必要に応じて古いバージョンは消します。

```bash
yum -y remove git.x86_64
```

### Gitのコンパイルで必要なものをインストール
```bash
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
```

### ソースを取得A(Binaryをダウンロード)
```bash
cd /usr/local/src/
curl -o git-2.9.0.tar.gz  https://www.kernel.org/pub/software/scm/git/git-2.9.0.tar.gz
tar vfx git-2.9.0.tar.gz
```

### ソースを取得B(gitでgitをClone)
```bash
git clone https://github.com/git/git   # gitをclone  
cd git/                                # 
git checkout v2.9.0                    # v2.9.0をチェックアウト
```

### コンパイル
```bash
cd git-2.9.0
make prefix=/usr/local all
make prefix=/usr/local install
```

### 確認
```bash
git --version
> git version 2.9.0
```

### Extra

#### Beautiful diff
 
```bash
cd git
cp contrib/diff-highlight/diff-highlight /usr/local/bin/
```

```bash:~/.gitconfig
[pager]
    log = diff-highlight | less
    show = diff-highlight | less
    diff = diff-highlight | less
[interactive]
    diffFilter = diff-highlight
```

#### 補完, プロンプト

```bash
cd git
cp contrib/completion/git-prompt.sh ~/.git-prompt.sh
cp contrib/completion/git-completion.bash ~/.git-completion.bash
```

```bash:~/.bashrc
# Source git completion
if [ -f ~/.git-completion.bash ]; then
    . ~/.git-completion.bash
fi
# Source git prompt
if [ -f ~/.git-prompt.sh ]; then
    GIT_PS1_SHOWDIRTYSTATE=1
    . ~/.git-prompt.sh
    PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
fi
```


---
エクセルの限界。100万行付近のデータ加工、編集

結論から言うとデータ編集をするのはお勧めできません。
この記事を書くくらいの時間が確保できます。
10万行以下でシートを分割して編集を1万行ずつすることをお勧めします。

試したスペック
CPU i7
mem 8G


（あらすじ）
凄い多くのデータを編集して作成する必要があった。
データはエクセルでの納品が義務だった。

97 - 2003までのExcelでは約6万5000件が限界だったが，
Office 2007では約104万行までの行数を扱えるようになった。

ってことで2007以降のエクセルでデータ編集することに。

3つの試練到来。

１、起動するべからず。
起動しないわけにはいかないのですが
データが増えると当然起動に時間がかかります。
結構無駄な時間です。

２、コピーをするべからず。
データをコピーすると大変時間がかかります。
そして10万行あたりのコピーになってくるとリソース不足エラーが出て
頻繁に落ちます。実行する場合は死を覚悟してこまめに保存ししてください。

３、関数を埋め込むべからず。
関数を1行1行に埋め込んだり、文字列結合をして編集すると確実に死にます。
1万行ずつ関数をコピーしたらいける場合もありますが良く固まります。
そして起動ができなくなります。どうやら起動時に全行の関数を読み込んでくれているようです。
起動と同時に固まります。戻せなくなります。


結果として10万行を超えるデータの編集、加工は向いてません。
どうしてもエクセルで編集、加工したい場合はデータをわけてください。
マルチELB・同一EC2インスタンスにおける、マルチドメインの設定


複数のELBを用い、EC2インスタンスは１つを利用する場合の各種設定方法を示す
色々な試行錯誤の後の結果であり、最適解では無いかも
もともとは、PCとスマホとでドメインをわけつつも、インスタンスは１つにまとめたかったのが始まりです
ほぼ自分の覚書用

##apacheの設定

apacheは通常のマルチドメインの設定と、２つ目のELBのヘルスチェック用の設定を行う

```lang:httpd.conf
<VirtualHost *:80>
    ServerName    a.hoge.co.jp
    DocumentRoot  /var/www/html
    CustomLog logs/access_log
</VirtualHost>
<VirtualHost *:80>
    ServerName    b.hoge.co.jp
    DocumentRoot  /var/www/html
    CustomLog logs/access_log
</VirtualHost>
<VirtualHost *:10080>
    ServerName    b.hoge.co.jp
    DocumentRoot  /var/www/html
    CustomLog logs/access_log
</VirtualHost>
```

* どうやら、ポートで分けないと、ドメインではヘルスチェックは分かれていない模様(全く同じヘルスチェックURLの場合)だったので、10080は２つ目のヘルスチェック用 80のヘルスチェックは１つ目のELBにて利用

##EC2セキュリティーグループの設定
* 通常の80や443等の設定
* カスタムTCPにて、10080を追加

##ELBの設定
* 通常の80や443等の設定
* ２つ目のヘルスチェックのTCPに10080を設定

##Route53(DNS)の設定
* a.hoge.co.jp(１つ目のELBのDNSを)とb.hoge.co.jp(２つ目のELBのDNSを)をAレコードに登録する

これで、２台のELBで１台のEC2インスタンスの構成が完了です
ブロック要素inブロック要素：縦中央揃え


#概要

ブロック要素の中のブロック要素の縦中央揃えの方法

親要素に
1. display: table-cell
2. vertical-align: middle
3. height指定


# コード　

html

```
  <div class="parent">
    <div class="child">
      hogehoge / fugafuga
    </div>
  </div>
```

css

```
.parent{
  background: red;
  display: table-cell;
  height: 100px;
  vertical-align: middle;
}
```

# 参考画像

![スクリーンショット 2015-08-24 16.59.35.png](https://qiita-image-store.s3.amazonaws.com/0/71616/2aded569-8ff7-9780-fe61-668bff15f380.png "スクリーンショット 2015-08-24 16.59.35.png")


#　参考
[ブロック要素inブロック要素 : 縦中央揃え小技](http://qiita.com/shige0820/items/00d5750266d912c2a237)
Eclipse+SVNでコミットしたファイルだけを出力する方法

フォルダ構造を維持したまま、コミットしたファイルだけをエクスポートする方法。
複数の改定(コミット)にも対応。
ついでに、ファイルツリーも出力しちゃう。

1.右クリックで「ヒストリー」を表示
2.出力したいコミットを右クリック
　（複数の場合は古いものから。）
3.「抽出」を選択し、出力先に任意のフォルダを指定。

これで、コミットしたファイルが、フォルダ構造を維持したまま出力されます。
複数の改定（コミット）を出力する場合も、2・3の手順を繰り返していくだけです。

コミットしたファイル以外に、「changes.log」も指定フォルダの直下に出力されます。
内容は、抽出を「実行した時刻」と「出力したファイルのSVN上でのファイルパス」
抽出を実行するたび内容が追記されます。

Windowsであれば、ファイルツリーもついでに出力。
コマンドプロンプトで、以下を実行。
`cd C:\Users\mine\Downloads\temp`
`tree /F > ./FILELIST.txt`
nodeでcronを実行する

インストール
node-cronをインストールする。

```	
$ npm install --save cron
```

基本的な使い方は以下の通り。


```js
const {CronJob} = require('cron');

new CronJob('* * * * * *', () => {
  console.log('Hello');
}, null, true);
```

cronの時間の指定

- 秒: 0-59
- 分: 0-59
- 時: 0-23
- 日: 1-31
- 月: 0-11
- 週: 0-6

週は0が日曜日。
なので月〜金曜日毎日11時30分00秒に実行したければ
`new CronJob('00 30 11 * * 1-5')`
とする。



- [ncb000gt/node-cron](https://github.com/ncb000gt/node-cron)
【はじめてのR言語】RStuditoを使ってメールのログから開封時間帯を見てみる


右も左もわからないところから初めてみました。
メールの開封や、クリックのログありますよね。
そのデータから何時頃が一番メールを開いているのか、開封時間帯を見てみようかと思います。

## データの取込
まずはデータの取込。CSVファイルから取り込む。
RStudioを利用するなら Import Datasetで取り込むこともできる。

![Kobito.P71uz8.png](https://qiita-image-store.s3.amazonaws.com/0/10268/7ce7eb6e-11c1-b54a-6812-7492629cd493.png "Kobito.P71uz8.png")

書くならこう。

```
maillog <- read.csv("~/Desktop/maillog.csv")
```


## デモ用のデータセット
読み込んだデータはテーブルで表示されます。

今回の例は左から
ID, 顧客ID, ログタイプ（今回は開封ログ）,ログ作成日時, 修正日時
となってます。
![Kobito.PqJlM5.png](https://qiita-image-store.s3.amazonaws.com/0/10268/47b5137e-d8f9-656d-97ba-6ee15383cc97.png "Kobito.PqJlM5.png")

こういうデータが表で確認できるのもRStudioのいいところですね！
  
  

## データセットからデータを絞り込みたい場合

例えばある顧客のみの行動結果を見たい場合

```
subset(maillog, customer_id == 63695)

// その件数を確認
nrow(subset(maillog, customer_id == 63695))
```
![Kobito.5tnrvT.png](https://qiita-image-store.s3.amazonaws.com/0/10268/8a7df9b9-b148-e59e-28d8-48e8b8c0d3ea.png "Kobito.5tnrvT.png")

```
//テーブルの列データは下記のようにアクセスできる、たとえばcustomer_idの場合
maillog$customer_id
```

![Kobito.6yx7on.png](https://qiita-image-store.s3.amazonaws.com/0/10268/a58ef92c-28be-ddc8-0fe4-5f275d29357c.png "Kobito.6yx7on.png")


## 日付形式にする
ここが一番ポイントです。
ログの収集日時 テキストを日付形式にして変数に保管

```
created <- as.POSIXlt(maillog$created)
```

## ログの収集日時から時間のみを抽出

```
created$hour

  [1] 12 10 11 11 11 12 13 15 15 19 19 19 20 11 11 11 11 12 12 12 12 12 13 13 13 13 13 13
 ・
 ・
 
//他、秒や分等は・・・
//変数$ の後にsec, min, hour, mday, mon, year, wday, yday等でアクセスできる

```

## 時間ごとのログの数
tableを利用すると集計が出てくる

```
table(created$hour)
// 0時 6件、 3時 1件という具合

 0  3 10 11 12 13 14 15 16 17 18 19 20 21 22 23 
 6  1  1  7  7 57 36 30 13 12 10 10 14 22  8 11 
```

## グラフの出力

下記で簡単に出力されます。
縦が件数、横が時間軸

この例だと13時ごろが開封が多いという結果ですね。

```
plot(table(created$hour))
```
![Kobito.BvhQDL.png](https://qiita-image-store.s3.amazonaws.com/0/10268/9baf0280-d783-ecac-5bc5-653d7e7a1719.png "Kobito.BvhQDL.png")



## まとめ

という具合で簡単にCSVデータさえあればここまで出力ができました。
実際始めてさわってみて思ったのが、エクセルの代わりになるんじゃないかなってイメージが近いかも。
プログラムというよりも、エクセルの関数的な扱いでいけちゃうんじゃないでしょうか。

※始めて2時間程度でやってみた内容です。
不備、誤認識等も有るかもしれませんので、業務で上司に提出するような場合はよくお確かめ下さい！
責任持てません！自己責任で。
ご指摘等あれば頂きたいです。

## その他

OS情報を持っているならこういう情報も簡単に見れます。iOSダントツ。

![Kobito.zIho4V.png](https://qiita-image-store.s3.amazonaws.com/0/10268/e8af53f0-0cb7-dc58-49d0-6c04d2171121.png "Kobito.zIho4V.png")
ブロック要素inブロック要素 : 縦中央揃えの小技


ブロック要素に対してline-heighとheightを一緒にすると縦中央揃えになる。

```
<div class="parent">
  <div class="child">
    hogehoge / fugafuga
  </div>
</div>
```


```
.parent{
  background-color: red;
  height: 100px;
  line-height: 100px;
}
```


参考画像
![スクリーンショット 2015-08-24 16.51.16.png](https://qiita-image-store.s3.amazonaws.com/0/71616/18b3b84c-c0ce-d665-1d4b-bc02c12473d6.png "スクリーンショット 2015-08-24 16.51.16.png")
Githubで自分がコントリビュータに含まれているリポジトリのPRを確認する


気づいたら500くらいのリポジトリがあり、PRをたまに放置してしまっているのです。
とりいそぎプライベートトークンを発行し、その権限で取れるリポジトリ一覧からPR数だけ取得してみた。


```ruby:Rakefile
require 'octokit'

@client = Octokit::Client.new(:access_token => ENV["GH_TOKEN"])
@client.auto_paginate = true

task :default do
  repos = @client.repos
  repos.map do |repo|
    count = @client.pull_requests(repo.full_name, status: "open").length
    puts [count, repo.full_name].join(" - ")
  end
end
```

担当やオーナで絞れば精度も良くなるが、とりいそぎ全部だ。

## 実行。

まずは数と名前だけずらずらと。0はスキップでよかったかな。

```
$ rake

(略)

0 - giraffi/dokku-pg-plugin
0 - giraffi/dokku-postgresql-plugin
1 - giraffi/dokku-slack - 
0 - giraffi/dokku_sample_ruby

(略)
```

完全放置(一例)発見!! ごめんなさい。


https://github.com/giraffi/dokku-slack/pull/1

あああ、丸一年放置していたのだね。ちょっとリマインダを開発しよう。
共通のドメイン内で、同一IPの複数のサブドメインを持ちつつ、別のIPのサブドメインも持たせる方法

以下のように複数のサーバーで以下のようなURLでアクセスさせたい場合、
どうすればいいか調べても出てこなかったのでDNSレコードについて調べて解決策を見つけました。

サーバー（IP: 11.111.111.111）
aaa.example.com
bbb.example.com

サーバー（IP: 22.222.222.222）
ccc.example.com
ddd.example.com

（お名前.comでの設定例）
![onamae_multi_sub.png](https://qiita-image-store.s3.amazonaws.com/0/87550/7966f775-1d41-c6d1-73f0-5f66e0d041b9.png)

なお、各サーバーのapacheのhttpd.confには以下の記述を追加。

サーバー（IP:11.111.111.111）

```lang:httpd.conf
<virtualHost *:80>
    ServerName aaa.example.com
    DocumentRoot "/var/www/html/aaa"
</virtualHost>
<virtualHost *:80>
    ServerName bbb.example.com
    DocumentRoot "/var/www/html/bbb"
</virtualHost>
```

サーバー（IP:22.222.222.222）

```lang:httpd.conf
<virtualHost *:80>
    ServerName ccc.example.com
    DocumentRoot "/var/www/html/ccc"
</virtualHost>
<virtualHost *:80>
    ServerName ddd.example.com
    DocumentRoot "/var/www/html/ddd"
</virtualHost>
```

仮の名前 d1.example.com を使っています。
このアドレスでアクセスされたくない場合はサーバーの設定ではじくなりなんなりする必要があります。

ほぼ知識がなかった私が半日くらいネットで調べただけの知識でやったものですので、
間違っている可能性がありますが、一応動きます。
MacのVMWare上WindowsでDrag後に右クリックしたい


Macのトラックパッドでの話です。
ドラッグは指3本に設定しています。もしくは、トラックパッドの左下を押しながらの指1本でもできます。
また右クリックは、指２本タップ、もしくは、CTRL+タップになっています。

この状態で、VMWareではWindowsが動いています。

Windowsの場合、Dragした状態で右クリックしたいことってよくあるんですよね。「この場所に解凍」とか特に。

でも、右クリックのためにトラックパッドから指を離すと、Dragが解除されてしまうんですね。んー。Drag状態のまま、右クリックがしたい！

なんとなくいろいろ試しているうちに、方法がわかりました！

CTRL+3本指Dragで、3本指を離してしばらくすると右クリックが押されたように反応するようです！

次回、また忘れるのは間違いないので自分のためにメモ！


おわり。
qiita > 検索 > titleでの検索は前方一致や部分一致でなく、キーワードの完全一致なのだろうか?

Qiitaでの検索であらたに気になったこと。

`title:`での検索時には「前方一致」や「部分一致」でなくキーワードの「完全一致」なのだろうか?

具体的には
- 「[user:7of9 title:teechart](http://qiita.com/search?utf8=%E2%9C%93&sort=rel&q=user%3A7of9+title%3Ateechart)」で検索 : 14件
- 「[user:7of9 title:teechar](http://qiita.com/search?utf8=%E2%9C%93&sort=rel&q=user%3A7of9+title%3Ateechar)」で検索 : 0件

つまりは検索するときはキーワード名についてきちんと記憶しておかないといけない。

Tagの場合は完全一致でもいいが、titleに関しては前方一致の方が検索可能性が高いように思います。

漢字の場合は「書式」で検索できて「書式指定子」で検索できないと、上記と反対に部分一致？なので、検索のルールについて混乱している。
http://qiita.com/7of9/items/ec730d3d64f1a6d79b86
reduxを試してみた(3日目) - redux-boilerplateを使ってひな形を生成する


React.jsと組み合わせるfluxのライブラリreduxを試してみた。 **このページは作業ログです。やったことをつらつら書くだけなのでまとめません。あしからず。**

## 対象読者

- 主に自分

## 今日のゴール

- reduxのBoilerplateを試してみる
- [redux-devtools](https://github.com/gaearon/redux-devtools)を試してみる

## Boilerplate

Boilerplate(ボイラープレート)とは、`package.json`に予め必要なライブラリが定義されていたり、`src`や`docs`等、基本的なディレクトリ構成が定義済みだったりする、別名テンプレートプロジェクトのこと。

よくしらないけど、`Yaomen`はBoilerplateを生成するツールじゃなかったっけ？と思って、`Yaomen`のGeneratorにreduxのものがないか検索してみたら[やっぱり見つかった](https://github.com/banderson/generator-redux)。

こういう`generator`系のツールは、中身がよくわかってない初心者泣かせな気がする。まぁ、とりあえず試してみて、問題があればプロジェクト構成を変えていけばいいよね。

READMEに沿ってインストール作業を進める

```shell
$ npm install -g yo # Yaomenは導入済み
$ npm install -g generator-redux
$ mkdir learning-redux
$ cd !$
$ yo redux
```

`Yaomen`はプロジェクト生成時にカレントディレクトリの名前からプロジェクト名を取ってくるので、生成したいディレクトリの中に移動してから実行する。

プロジェクト名や紹介文、起動ポート等を設定すれば、プロジェクトが生成される。

サーバーの起動は、

```shell
$ npm start
```

で起動する。`http://localhost:3000`にChromeで接続すると、本体UIだけでなくdevtoolも含んだ状態で起動する。終了は`Ctrl+C`でプロセスを終了する。

Chromeで接続すると画面が表示されるのにSafariだと表示されない。どうも`redux-devtools`がSafariでは動かない。残念。`package.json`を開くと、`scripts`のところの`start`に環境変数`DEBUG`を追加しているのが見て取れるので、それをなくしてみるとSafariでも動いた。Hot Reloadingも快適だ。

```JavaScript:package.json
{
  // ...
  "scripts": {
    "debug": "DEBUG=true node server.js",
    "start": "node server.js",
    "build": "webpack -p"
  }
  // ...
}
```

## Bootstrapを当ててみる

[react-bootstrap](https://github.com/react-bootstrap/react-bootstrap)というモジュールがあるので、インストールする。

```shell
$ npm install --save react-bootstrap
```

このモジュールには`bootstrap`本体は含まれていないので、それはそれでインストールする。

```shell
$ bower install bootstrap
```

[react-bootstrapで追加されるコンポーネント群は、Componentページにまとまっている。](http://react-bootstrap.github.io/components.html)


定義されているComponentが結構多いので探すのが大変。

例えば`PageHeader`を使いたい場合は下記のようにする。

```javascript
import {PageHeader} from 'react-bootstrap';

class Home extends Component {
  render() {
    ...
    return (
      <main>
         <PageHeader>Welcome {title}!</PageHeader>
         <button onClick={e => actions.changeTitle(prompt())}>
           Update Title
         </button>
      </main>
    );
  }
}
```

`<main>`で囲んでいるのは、JSXでコンパイルする時に2つ以上のコンポーネントを返せないため。仮に囲まないと、` Adjacent JSX elements must be wrapped in an enclosing tag`という例外が出る。囲むタグは`<div>`でも良いが、このHomeコンポーネントはアプリケーションのルートを表すタグなので、`<main>`としている。

### 試しにメニューを作成する

と思ったけどCSSが当たらない。次回はWebpackの使い方を学ぶ。

### 3日目に学んだこと

- ReduxのBoilerplateを生成して動かすまでは簡単
- Webpackがわからん。むずい。死ぬ。→[Webpackについて学びました。](http://qiita.com/kompiro/items/8337f28271b66957780e)
- リンクをクリックした時のComponentの切り替えとかはどうやるの？→[4日目はこちら - redux-react-routerを試す](http://qiita.com/kompiro/items/de10197368f864c2e846)
ローカル環境なら枠を表示するブックマークレット

テストとローカル２つ開いていると混乱する残念な人なので書きました。
ポイントは``pointer-events: none;``

## コード

```js
var url = location.href;
if (url.indexOf("localhost") > 0 || url.indexOf("127.0.0.1") > 0) {
	var div = document.createElement("div");
	div.style.cssText = "position:absolute; top:0; left:0; width:100%; height:100%; outline:solid 3px #2962FF; outline-offset:-10px; pointer-events: none;";
	document.body.appendChild(div);
}

```

## ブックマークレット登録用

```js
javascript:var url = location.href;if (url.indexOf("localhost") > 0 || url.indexOf("127.0.0.1") > 0) {	var div = document.createElement("div");	div.style.cssText = "position:absolute; top:0; left:0; width:100%; height:100%; outline:solid 3px #2962FF; outline-offset:-10px; pointer-events: none;";	document.body.appendChild(div);}
```
El Capitanでopenssl/ssl.h が無いとかいうエラーが出た場合

こんなエラーが出た場合

```
./project.h:116:10: fatal error: 'openssl/ssl.h' file not found
```

以下を参考にパスを通す。

http://stackoverflow.com/questions/30818391/gem-eventmachine-fatal-error-openssl-ssl-h-file-not-found
qwikLABSでAWSを無料でハンズオン

## 参考

* [AWS 初心者向けWebinar AWS上にWebサーバシステムを作ってみましょう～まずは仮想サーバーから[演習つき]](http://www.slideshare.net/AmazonWebServicesJapan/20150623-ec2-handson)
* 20pあたりから。

## qwiklab

* [qwikLABS | Tagged/free lab - Learn Amazon Web Services](https://run.qwiklab.com/tags/free%20lab)
    * 演習は30分間だけ利用可能。EC2のEBSは消えます。
    * S3のデータは残る様子

### bootstrap

```bash:
#!/bin/sh
curl -L http://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-4/as-bootstrap.sh | sh
```

```bash:bootstrap.sh
#!/bin/sh
yum -y install httpd php mysql php-mysql
chkconfig httpd on
/etc/init.d/httpd start
cd /tmp
wget http://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-4/examplefiles-as.zip
unzip examplefiles-as.zip
mv examplefiles-as/* /var/www/html
```

# 以下メモ 

## EBS(ELASTIC BLOCK STORE)

* USB HDDのようなもの。

```bash:
$ dmesg
[    7.082060] EXT4-fs (xvda1): re-mounted. Opts: (null)
[    7.371672] NET: Registered protocol family 10
[   10.271321] audit: type=1305 audit(1440397690.072:2): audit_pid=1889 old=0 auid=4294967295 ses=4294967295 res=1
[  308.486022] blkfront: xvdf: barrier or flush: disabled; persistent grants: disabled; indirect descriptors: enabled;
[  308.493971]  xvdf: unknown partition table
```

```bash:利用方法
$ sudo mkfs.ext4 /dev/xvdf
$ sudo mount /dev/xvdf /media
$ df -h
/dev/xvdf        976M  1.3M  908M    1% /media
```


## Glacia

* どんなデータサイズ(1kbでも)でも復元に３〜５時間かかる。
* [Amazon Glacierでクラウド破産しないために - HDE BLOG](http://blog.hde.co.jp/entry/2015/01/30/154101)


## 料金

* [AWS - S3の料金体系が分かりにくいと聞かれたので纏めた - Qiita](http://qiita.com/kawaz/items/07d67a851fd49c1c183e)

## S3低ストレージ冗長化

* [Amazon S3 の低冗長化ストレージ ｜ Developers.IO](http://dev.classmethod.jp/cloud/amazon-s3-rrs/)

> できるだけ利用料金を減らしたいと思う訳で、低冗長化ストレージサービスを指定することができます。
> これを指定すると、30%以上値引きされます。

## スポットインスタンス

* [AWS - スポットインスタンスを安定して利用するための取り組み - Qiita](http://qiita.com/megadreams14/items/766ce04ca6cb418e95ca)

## ハードウェア専有インスタンス

* [Amazon EC2 ハードウェア専有インスタンス （専用サーバーホスティング） | | アマゾン ウェブ サービス（AWS 日本語）](http://aws.amazon.com/jp/dedicated-instances/)

## EBSのストレージサイズ

* [サイズが大きいほど課金対象](https://aws.amazon.com/jp/ebs/pricing/)
バカみたい遅いGoogle Fontsを出来るだけ早くする方法(nginx)

# カッコいいし、簡単に設定できるけど遅い Google Fonts

[ここ](https://www.google.com/fonts/earlyaccess)で、楽々Google Fonts使用〜と適用したら、描写がめちゃめちゃ遅くなった。特に、スマホ。これは使えん！と、いろいろ調べてみる。

nginx 専用だよー

## フォントダウンロードするよ!
まず、[ここ](https://www.google.com/fonts/earlyaccess)から、フォントそのものをダウンロードする。自分は、[Noto Sans Japanese](http://fonts.gstatic.com/ea/notosansjapanese/v5/download.zip)を使うよ!

## 解凍して、サーバにアップするよ!
fonts ってディレクトリを作成して、解凍したファイルを全部アップするよ!

## CSSのfontsロード部分を置換するよ!

http://fonts.googleapis.com/earlyaccess/notosansjapanese.css をダウンロードして、

    //fonts.gstatic.com/ea/notosansjapanese/v5/

を

    ./font/

に置換するよ!パスは各自調整してね! notosansjapanese.css をサーバにアップしてね!

## CSSの読み込みファイルを変更するよ!

    /* @import url(http://fonts.googleapis.com/earlyaccess/notosansjapanese.css); */
    @import url(./notosansjapanese.css);

とかするよ!

## nginx のmime.types 設定をするよ!

    font/ttf                      ttf;
    font/opentype                 otf;
    application/font-woff         woff;
    application/vnd.ms-fontobject eot;

eotが既にある場合は、サクッと削除してね!

## nginx の Gzip 設定をするよ!

    gzip_types [...] font/ttf font/opentype application/vnd.ms-fontobject;

## nginx で、ブラウザキャッシュ時間を1年にするよ

    location ~* \.(eot|ttf|woff)$ {
        expires 1y;
        log_not_found off;
    }

## nginx をリスタートするよ!

    nginx -t

で、一応設定を確認して、リスタートしてね!

# どうっすか!?

気持ち早くなったような。

間違えていたら、コメントをくださーい。
UITextViewのInsetについて

UITextViewの文字周りにマージンを入れたい場合は`contentInset`を使ってもダメで、`textContainerInset`を使わないといけない。

どれくらいダメなのか以下を見るとわかる。

```swift:contentInset
        textView.contentInset = UIEdgeInsetsMake(100, 100, 100, 100)
        textView.sizeToFit()
```

![Screen Shot 2015-08-24 at 15.32.29.png](https://qiita-image-store.s3.amazonaws.com/0/24979/52c0d5fd-65c1-cb50-6ea1-82469779c4e2.png)
は…という感じ。どう見ても上下左右100pxのマージンなど無い。

```swift:textContainerInset
        textView.textContainerInset = UIEdgeInsetsMake(100, 100, 100, 100)
        textView.sizeToFit()
```

![Screen Shot 2015-08-24 at 15.32.45.png](https://qiita-image-store.s3.amazonaws.com/0/24979/7b7b4fb8-a6fc-a4e6-631d-04cf5b7fe37b.png)

というわけで`textContainerInset`を使うのが正解。

じゃあcontentInsetってなんなんだよってなるんだけど、これはUITextViewの中にあるUIScrollViewに対するInset。
ただUITextViewはテキスト量が自身のサイズを超えないとcontentSizeが溢れないため文字量が少ないとcontentInsetも効かなくなる。
改めてsudoについて調べてみた

# 要点

⑴sudoした場合は環境変数を引き継がない。
⑵sudoで環境変数を引き継ぐにはsudo -E some_commandかsudoersにenv_keepを書く。
⑶sudo ${pathが通っているコマンド}を実行する場合、カレントユーザのpathによって実行するコマンドが決まる。

## sudoについて調べたきっかけ

今まで**「root権限でコマンドを実行したい場合」**にsudoを使っていたのですが、
とあるrubyのスクリプトをsudoで実行したところ以下のようなエラーがでました。

```
 $ sudo /usr/local/hoge/fuga.rb
/usr/local/hoge/fuga.rb:3:in `require': no such file to load -- thor (LoadError)
	from /usr/local/hoge/fuga.rb:3
```

rootとカレントユーザで見てるgemが違うのか？と思い、以下のようにgemのインストール済みのlistを見てみたところ、やっぱり入っていた。であれば、sudoでコマンド実行時にエラーが出てくるのはおかしいので、おそらくsudoについて誤認識をしていると感じ、改めてsudoについて調べてみました。

```
$ sudo gem list | grep thor
thor (0.19.1)
```

## sudoとは
ITproの記事によれば以下の通りでした。

>sudoは，指定したユーザーでコマンドを実行する。デフォルトではroot権限で実行する。suの代わりに使われることが多い。sudoを実行するには，あらかじめ/etc/sudoersファイルに権限を与えられるユーザーとコマンドを設定しておく必要がある。

ref: http://itpro.nikkeibp.co.jp/article/COLUMN/20071205/288862/

`sudoを実行するには，あらかじめ/etc/sudoersファイルに権限を与えられるユーザーとコマンドを設定しておく`ということだったので、現在の/etc/sudoersの確認を**visudo**で行い、自分のユーザないしグループがsudoers登録されていることを確認しました。

ref: http://www.maruko2.com/mw/%E4%B8%80%E8%88%AC%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92_sudo_%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B

そして、調べていくうちに**sudoは/etc/sudoersのデフォルト設定では環境変数を引き継がない**ということを思い出し、もしsudoで環境設定を引き継ぎたい場合は設定ファイルにための設定を`env_keep`で行う(※1)か、もしくは`sudo -E some_command`によってコマンド実行すれば良い(※2)ということがわかりました。

ref※1: http://qiita.com/akito1986/items/e9ca48cfcd56fdbf4c9d
ref※2: http://mikio.github.io/article/2012/03/10_sudo.html

## エラー原因の解決へ
sudoについて調べてわかった事のうち解決の手がかりになりそうな事は、**自分の環境でsudoしてもpathは引き継がない**ということでした。

そこで、sudoした場合にどのgem使っているのか調べたところ、以下のようになりました。

```
# カレントユーザの場合
$ which gem
/usr/local/rbenv/shims/gem
$ which ruby
/usr/local/rbenv/shims/ruby

# sudoした場合
$ sudo which gem
which: no gem in (/usr/bin:/bin:/usr/sbin:/sbin)
$ sudo which ruby
/usr/bin/ruby
```

つまり、`sudo gem list | grep thor`で出ていたthorは、カレントユーザの環境変数であるpathの通っているgem(/usr/local/rbenv/shims/gem)をsudoで実行し結果表示したに過ぎ無いということです。sudoした場合、そもそも別のrubyを使用していることがわかり、gemにもpathは通っていませんでした。

なお、当然ですが環境変数を引き継ぐための最も簡単な方法として-Eをつけて実行したところうまく行きました。

```
sudo -E /usr/local/hoge/fuga.rb
```
BlackArch LinuxをVmware Workstation 11にインストールする方法を教えてください。

blackarchlinux-live-2015.07.31-x86_64.isoファイルをダウンロードしています。
このファイルを使って、VMware Workstation 11の仮想環境にインストールをして、仮想マシンを作製したいと考えています。
そのための具体的な操作手順が全く分かりません。
具体的な操作手順のご教示をお願いいたします。
特に、Keymapの設定が出来ません。
よろしくお願いいたします。

◆BlackArch Linux
　http://blackarch.org
SQL Developer初回起動時のJava設定について

#SQL Developerを使ってみる
Windows8.1になってからこれまで愛用していたCSEが使用できなくなったため、
SQL Developerを使用しようと思ったところ、初回起動時のJava設定で躓いたので
メモしておきます。

SQL Developerを起動した時、JavaのHomeを設定する旨の小画面が表示される。
ここでパスの設定を間違えると次から起動時にエラーが出てしまうので注意。
自分はJavaの32bitと64bitを間違えて設定したためエラーが・・・(；´Д｀)

#JavaのHome設定時にエラーが出て起動できなくなった場合
エラーが出た場合は下記の方法で復旧します。
（confファイルは念のためバックアップをとっておくことを推奨）

###1. 設定ファイルを見つけ出す。
だいたいこんなパスのはず。。
C:\app\[user]\product\[ver.]\dbhome_1\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf

###2. confファイルをテキストエディタで開いて、下記のような行があれば削除

SetJavaHome C:\Program Files\Java\jdk1.8.0_51
※自分のOracle Databaseは32bit版であったため、Javaの64bit版を指定したことが問題だったようで・・・

###3. confファイルを保存して再度SQL Developerを起動したらJavaのHomeを設定する
ダイアログが表示されるため、正しいパスを指定して起動する。

自分の場合は正しいパスはこんな感じでした。
C:\Program Files (x86)\Java\jdk1.8.0_60


・・・SQL Developerが最新ではなかったので、jdk1.6.Xしか動作保証しないぜ！ってダイアログが
出てきましたが、無視してもなんとか使えているので何か起きたらまたメモしておきます。
[WordPress] いま読み込まれてるテンプレートファイルが何かわからなくなったら

いま読まれているのはどのテンプレートかわからなくなったら
グローバル変数 $template にファイルパスが格納されているので

共通テンプレートのファイル（header.phpなど）に

``` 
echo $template;
```

を記載して、ブラウザに表示させて確認できる。


そもそもどんなルールで読まれていくのかは、以下の公式ドキュメントの図がわかりやすい。

Template Hierarchy のドキュメント
https://developer.wordpress.org/themes/basics/template-hierarchy/
BluemixとIBM DevOps Serviceのメンテンナンス情報

# 1. Bluemixの各サービスのステータス情報

ステージングやデプロイに失敗した際等、問題の切り分けにまずはBluemixの各種サービスのステータスを確認することが多いので、各サービスのステータスや、発生している問題の情報を確認する方法をまとめておきます。

Bluemixの各種サービスのステータスは下記のページで確認できます。

+ Bluemix Status : [https://developer.ibm.com/bluemix/support/#status](https://developer.ibm.com/bluemix/support/#status)

また、上記ステータスページはBluemix上からもアクセス可能です。

![2015-08-24_14h05_23.png](https://qiita-image-store.s3.amazonaws.com/0/86169/d8843892-a0d8-6c6b-b5a1-8e6d1588139e.png)
![2015-08-24_14h20_26.png](https://qiita-image-store.s3.amazonaws.com/0/86169/2438701c-4cb5-9170-33c0-5593535324e2.png)


また、より詳細なステータスが、データセンターのロケーション毎に、下記で確認できます。

+ 米国南部: [http://estado.ng.bluemix.net/](http://estado.ng.bluemix.net/)
+ 英国: [http://estado.eu-gb.bluemix.net/](http://estado.eu-gb.bluemix.net/)

![2015-08-24_13h53_42.png](https://qiita-image-store.s3.amazonaws.com/0/86169/4d3f0ae2-e518-4c6c-cd03-1df791fdcd5e.png)


# 2. IBM DevOps Serviceのステータス情報

IDSに関しては、下記でステータス、および、予定されているメンテナンスの時間帯を確認する事が可能です。

+ DevOps Serviceステータス: [http://status.hub.jazz.net/](http://status.hub.jazz.net/)

+ メンテナンス時間: [https://developer.ibm.com/devops-services/support
/#maintenance](https://developer.ibm.com/devops-services/support/#maintenance)

メンテンナンスの時間帯はEDT表示であり、日本時間はEDTに対して**13時間進んでいます**。13時間加えた時間帯が日本時間にメンテナンス時間となる点注意して下さい。

**日本時間の午前中にメンテナンスが行われる事も多いようなので、注意しましょう。**

![2015-08-24_14h28_02.png](https://qiita-image-store.s3.amazonaws.com/0/86169/e5daf12f-1722-2beb-5043-041522a3b757.png)
秘密鍵の情報がキャッシュされて検証に困ったら ssh-add -D しよう

## 背景

* サーバーを新しく作ったので sshd の設定をした
    * 具体的には、パスワード認証の無効化など
* 検証のために、ローカルPCの秘密鍵をリネームして ssh してみる
* なぜかノーパスでログインできてしまう
    * 誰が秘密鍵の情報を保持しているんだろう？

## 対策

1. まず `ssh-add -l`
    * 何か秘密鍵に関するデータを持ってるようだ
1. 次に `ssh-add -D`
    * 上記のデータを削除
1. 最後に `ssh-add -l`
    * 消えていることを確認
ベクトルの大きさと向き


## ベクトルの大きさ

ベクトルの大きさ（長さ）は、三平方の定理（ピタゴラスの定理）を使って求めることができる。また、ベクトルvの大きさは |v| と表記する。

![vec2len.gif](https://qiita-image-store.s3.amazonaws.com/0/90023/17262768-cfe2-dca1-70ce-a074b30cb095.gif "vec2len.gif")

```math
|v| = \sqrt{a² + b²}
```

## ベクトルの向き

![vec2direction.gif](https://qiita-image-store.s3.amazonaws.com/0/90023/6a8992e6-68b5-fc13-eb4c-c7851929e803.gif "vec2direction.gif")


ベクトルv=(a,b)の向きとx軸の正の方向がなす角をθとする。ここで[三角関数](http://qiita.com/rakusan/items/2f60f2ae6af208dda40f "三角関数")の定義を思い出して欲しい。三角関数の定義と上図を照らし合わせると、θ,a,bの関係が次式で表せることがわかる。

```math
cos(θ) = \frac{a}{|v|} = \frac{a}{\sqrt{a² + b²}} \\
sin(θ) = \frac{b}{|v|} = \frac{b}{\sqrt{a² + b²}}
```

<hr>
三角関数の定義
![sincos.gif](https://qiita-image-store.s3.amazonaws.com/0/90023/91ce8875-5663-8e4d-7519-e150ac4b6365.gif "sincos.gif")
ベクトル


「複数個の値の組からなるもの」をベクトルと呼び、複数の値を()や[]で括って表記する。

```math
( 3, -1 ) \\
[ x, y ] \\
[ 255, 0, 128 ]
```

配列に似ているが、配列はプログラミング言語上の機能であり、ベクトルは数学の道具である。プログラミングでベクトルを扱うときに配列で代用することもできるが、ベクトルに関する計算のメソッドとともにクラスを作った方が便利である。

次のように、値を縦方向に並べる表記の仕方もある。

```math
\begin{pmatrix}
x \\
y \\
z
\end{pmatrix}
```

## 空間ベクトル

「大きさと向きを持った量」を空間ベクトルという。空間ベクトルのことを単にベクトルと呼ぶこともある。空間ベクトルは、2次元平面上または3次元空間上の矢印によって表現される。

![vector.gif](https://qiita-image-store.s3.amazonaws.com/0/90023/ea815cb6-f25f-2d4a-c4d8-9849c3e6ed30.gif "vector.gif")


例えば「速度」は速度の大きさと移動方向を持った量であるから、空間ベクトルである。
[Swift] 選択された Cell の背景色を変更



```swift
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  var cell = tableView.dequeueReusableCellWithIdentifier("{cellIdentifier}", forIndexPath: indexPath) as! HogeCell
 
  // セルの背景色はなし
  cell.backgroundColor = UIColor.clearColor()

  // 選択された背景色を白に設定
  var cellSelectedBgView = UIView()
  cellSelectedBgView.backgroundColor = UIColor.whiteColor()
  cell.selectedBackgroundView = cellSelectedBgView
  

  return cell
}      
```
[Swift] UIColorの使い方 - オリジナルのカラーに名前を付けて定義して使いたいとき

思いついた方法をメモります。
UIColorのextensionでも定数管理でもどちらでも出来ました。
ですがもっと適切な方法があるようにも思えます。

# RGBを直接入力するとき

```swift
UIColor(red:0.23,green:0.23,blue:0.23,alpha:1.0)
UIColor(red: 3/255, green: 4/255, blue: 5/255, alpha: 1.0)
UIColor.whiteColor()
```

↑の様な記載の方法があります。

# オリジナルのカラーを定義して使いたいとき

## UIColorを定数管理

### 定義

```swift
class Const {
  func hoge() -> UIColor {
      return UIColor(red:1.00,green:0.01,blue:0.55,alpha:0.2)
  }
}
```

### 呼び出し

```swift
Const().hoge()
```




## extensionを使う

### 定義

```swift:UIColor+Hoge.swift
extension UIColor {
    func rowSelectedDefault() -> UIColor {
        return hoge()
    }
        
    func hoge() -> UIColor {
        return UIColor(red:1.00,green:0.01,blue:0.55,alpha:0.2)
    }    
}
```

### 呼び出し

```swift
UIColor().hoge()
```
パーフェクトRuby RakeとRakefile

##Rake

> RakeはRubyで記述されたbuildツールでMakeやAnt,Mavenと同種のツールです。

設定ファイルに記述されている作業を上から順に実行してくれる

#### Rakeの特徴
* Rubyで記述ができる
* 言語内DSLを採用
* Rakefileというファイルに一連の処理を定義する
（この処理のまとまりを「タスク」と呼ぶ）


※ DSL...
Domain-Specific Language
特定の領域で特化して設計された言語
(例)Rake, RSpec, SQLとか

#### Rakefile
build定義を記述するファイル

* rakeだったらRakefile
* Antだったらbuild.xml
* MakeだったらMakefile


#### Rakeの実行方法
Rakeはrakeコマンドに引数として、実行したいタスクを渡すことで
タスクを実行する。

```
rake 実行タスク名
```
**例**
以下のようにRakefileが記述されていた場合

```Rakefile
desc 'Task description'
task :task_name do
  puts 'Rake task'
end
```


**実行コマンド例**

```
rake task_name # => Rake task
```

rakeコマンドに-Tオプションを渡して実行すると、
定義されているタスク一覧が表示できる
「desc」メソッドで説明文を記載しておけば、
タスク一覧には説明文も表示することができる。


```
rake -T
# 以下のように表示される
# rake task_name  # Task description
```

また、-tオプション(小文字のt)を指定するとトレース情報を得ることができる。

```
rake task_name -t
# 以下のように出力される
# ** Invoke task_name (first_time)
# ** Execute task_name
# =>Rake task

```

**defaultについて**
Rakeで何もタスクを指定していないときに実行されるタスク
以下のように定義する

```
task :default => :タスク名
```

```Rakefile
task :default => :task_name

desc 'Task description'
  task :task_name do
  puts 'Rake task'
end
```

```実行コマンド例(rakeだけでよい)
rake
```


----
taskメソッドとは別の定義の方法について

#### ファイルタスク
fileメソッドの引数にはファイル名の文字列を指定する
文字列が示すファイルがある場合はファイルタスクの実行がスキップされる。

使いどころ
* ファイルの有無判定
実行例 参考p.412 リスト 12.13
----

#### クリーンタスク
buildの過程でできた一時ファイルを一括で削除してくれる
利用するにはRakefileでrequire 'raka/clean'する必要がある

``` Rakefile
require 'rake/clean'
...
```

requireするとCLEANとCLOBBERいう定数が定義される。
この定数に削除したいファイル名を指定すると削除される。

``` Rakefile
require 'rake/clean'
...

CLEAN.include(./hoge/*) # includeメソッドで指定ができる
```
CLEANはbuildの過程でできた一時ファイル
CLOBER一時ファイルだけでなくbuildでできたファイルも消せる。

----

#### ディレクトリタスク
ディレクトリを自動で作ってくれるタスク
ディレクトリが存在しなければ自動で作成し、
存在していれば処理をスキップする。

つかいどころ

* buildで作ったファイルを保存するディレクトリを作成するとき

使い方
directory メソッドにディレクトリ名を渡してあげる

```
directory "hoge" # hogeディレクトリを作成してくれる
```

```Rakefile
#coding: utf-8

HOGE = "hoge_dir"
directory HOGE # この段階ではディレクトリは作られなかった
desc "directoryタスクの確認"
task :dir => HOGE do
  sh "ls hoge_dir" 
end
```

```rakeの実行結果
Hikaru-no-MacBook-Pro:ruby_practice fukuzawh$ rake dir -t
** Invoke dir (first_time)
** Invoke hoge_dir (first_time)
** Execute hoge_dir
mkdir -p hoge_dir
** Execute dir
ls hoge_dir

# 2回目
Hikaru-no-MacBook-Pro:ruby_practice fukuzawh$ rake dir -t
** Invoke dir (first_time)
** Invoke hoge_dir (first_time, not_needed)
** Execute dir
ls hoge_dir

```


----

#### ルール
特定のパターンの名前のファイルに対して動的に処理を定義する
ruleメソッドを使う

つかいどころ

* 特定のファイル名や拡張子に対して動的に処理を加えたいとき

実行例 p.417 12-3-7
本の例では、タスクを実行するときに.cファイルをコンパイルすることをしている。

-----
#### グループ化
動作が似ているタスクをグループ化する
namespaceメソッドを使う

つかいどころ

* 動作が似ているタスクをグループ化したいとき

```Rakefile
#coding: utf-8

namespace :check do
  desc 'ログファイルのチェック'
  task :log do
  end

  desc 'ymlファイルのチェック'
  task :yml do
  end
end
```
実行は以下のようにするとできる
rake namespace:タスク名

```
rake check:log
```

----
#### Rakeコマンドのオプション

```
man rake
```
または

```
rake --help
```
で調べる
find command の error

Home directory の dotfiles の一覧がほしいと思って、次の commnad を実行した：

```
find . -name '.*' -type f -maxdepth 1 -ls
```

すると、次の error が出た：

```
find: 警告: オプションでない引数 -name の後に -maxdepth オプションを指定しました。しかし位置オプションではありません (-maxdepth は前に指定しても後に指定してもテストに影響を及ぼします)。オプションは他の引数の前に指定してください。
```

なんだろうこれは。

英語で error message を見たいので、次の command を実行した：

```
LANG=C find . -name '.*' -type f -maxdepth 1 -ls
```

Error message は

```
find: warning: you have specified the -maxdepth option after a non-option argument -name, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.
```

となった。

"a non-option argument -name" にびっくりした。 -name って、 option じゃなかったんだ！ そう思って man (http://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html) を見ると、 -name は「判別式」に分類されていて、「オプション」とは区別されている。なるほどね。

ついでに、 man を見たおかげで、 -print と -ls の違いもわかった。得した。

Error message の "options are not positional" の意味がよくわからない。辞書で "positional" を引いても「位置的」としか出てこない。位置的、とは何だろうか。だが、後に続く

"-maxdepth affects tests specified before it as well as those specified after it"

がその言い換えだと仮定すれば、 "positional" とは「書く位置によって効果が変わる」の意味だろう。
MacでBluetoothが突然使えなくなったときの対策リスト


1. 電源を落として数分待った後、再び起動する
電源やUSB等を抜いておく

2. PRAM削除
起動時にCommand + option + P + R

3. SRM削除
起動時にoption + shift + ctrl

Shift+ ctrl + option + 取り出しマーク のマシンもある

4. 不要ファイル削除
sudo rm /Library/Preferences/com.apple.Bluetooth.plist
sudo rm /Library/Preferences/com.apple.Bluetooth.plist.lockfile
ES2015でコマンドラインツールを書くときは、require hookで提供するべきか、事前にバベるべきか？


## 結論

事前にバベります。

理由：babelのインストールに時間が掛かる

## 事前説明
### 用語
- バベる: [Babel.js](http://babeljs.io/)を使ってES2015のJavaScriptをES5のJavaScriptに変換すること

### フォルダ構成
- bin: コマンドファイル
- node: バベった後のES5モジュール
- lib: バベる前のES2015モジュール

コマンド本体は`lib/index.js`にあり`babel-node lib`で実行可能なものとします。

## 候補にした二つの方法

[Writing ES6 today, effectively.](https://gist.github.com/rauchg/93d8b831e286bcb30d84)の`1. Writing ES6 Modules`に二つの方法があります。

### 1. require hook
Babel.jsのrequire hookを使って、実行時にバベる方法が挙げられています。

```js
require('babel/register');
```

を書くと、それ以降の`require`関数を使ったモジュール読み込み時にバベります。


### 2. 事前にバベる

以下のMakefileを用意しておいて、事前にバベる方法が挙げられています。

```makefile
BABEL = ./node_modules/.bin/babel

all: node

node: lib
  @mkdir -p node/
  @for path in lib/*.js; do \
    file=`basename $$path`; \
    $(BABEL) "lib/$$file" > "node/$$file"; \
  done
```

ついでに`.gitignore`に`node`を`.npmignore`に`lib`を追加することを推奨しています。

#### 補足
`node: lib`では依存ファイルの変更をうまく検出できないので、`node: lib/*.js`にしたほうが良さそうです。

## コマンドとして実行するために

### require hookの場合

#### package.jsonにbinを追加

コマンドとして実行するためにpackage.jsonに

```json
"bin" : "bin/cli.js" 
```

を追加します。

```js:bin/cli.js
#!/usr/bin/env node

require('babel/register')
require('../lib')
```

#### 依存モジュールにbabelを追加

```
npm i -s babel
```

#### require hookのオプション設定

ローカルでは動きますが、インストールすると`import`に`Unexpected reserved wordエラー`が出ます。
これはrequire hookが`node_modules `配下のファイルを変換しないためです。
[Require Hook · Babel](http://babeljs.io/docs/usage/require/)より

    NOTE: By default all requires to node_modules will be ignored. 


   

`ignore`オプションを設定します。

```js
require("babel/register")({
  ignore: false
});
```

このままでは依存モジュールまで全てバベってしまいます。`only`オプションも設定します。

```js
require("babel/register")({
  ignore: false,
  only: /lib/
})
```

### 事前にバベる
#### package.jsonにbinを追加

事前にバベる場合も`bin/cli.js`を追加するのは一緒です。
読み込むモジュールにバベり後の`node`を指定します。

```js:bin/cli.js
#!/usr/bin/env node

require('../node')
```

#### 依存モジュールにcore-jsを追加

Babel.jsでは、[String.prototype.endsWith](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith)や[Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)は[core-js](https://github.com/zloirock/core-js)というpolyfillライブラリを読み込むことで実現されています。

これらの関数を使う際はcore-jsをrequireします。

```js:bin/cli.js
#!/usr/bin/env node

require('core-js')
require('../node')
```

依存モジュールにも`core-js`を追加します。

```
npm i -s core-js
```

## まとめ

require hookを使っても事前にバベっても、ES2015で書いたコマンドラインツールを配布することはできます。

ただしrequire hookを使う場合は依存モジュールにbabelが入ります。
babelはnative extensionを使っています。
babelのインストール時にはコンパイルが走り、時間がかかります。

テストのためにインストールしてもイライラします。
事前にバベりましょう。
壱 Cocos2d-xを始める Cocos Code IDEでポチッとする


#目次
1 はじめに
2 今回の範囲
2.1 環境準備
2.1.1 cocos2d-x ゲームエンジン、バージョン3.3を使用
2.1.2 Python 統合開発環境を動かすのに必要、バージョン2.7.10を使用
2.1.3 Cocos Code IDE 統合開発環境 Luaでの開発に使用
2.1.4 新規プロジェクト作成と実行
3 今後の予定
3.1 デバッグ情報の非表示、画面サイズの設定、レイヤー、スプライト等

#はじめに

この記事は、cocos2d-xを使ったAndroid、iOS向けゲームアプリ開発を始める人に向けた、覚書です。本稿では、初回ビルドまでの手順が比較的容易で、かつライブコーディングによる高効率な開発が見込める開発環境Cocos Code IDEとLua言語使います。

（他にもJavascriptやC++が開発言語として選択できます。Javascriptを使う場合は本稿とほぼ同じ手順でゲーム開発を行う事ができますが、C++を使う場合、コマンドラインによるビルド環境の構築が必要となります。）

#環境準備

cocos2d-x-3.3.zipを、c:/cocosに解凍します。

python-2-7-10.msiをダブルクリックしてインストールします。

(2015/8/25現在 公式サイトのダウンロード一覧にないため 公式サイトのアドレスに /filedown/cocos-code-ide-win64-1.2.0.exe を付加してダウンロード)
cocos-code-ide-win64-1.2.0.exeをダブルクリックしてインストールします。Cocos Code IDEを起動し、
ワークスペースをc:/cocos/workspaceに設定、メニューから、ウィンドウ→設定をクリックし、設定ダイアログを開きます。
設定ダイアログ左のCocosをクリックし、Pythonロケーションにc:/Python27を設定します。
すでにJDKがインストールされている場合は、JDKロケーションにそのパスが表示されます。

![1-1 cocos code ide config cocos.png](https://qiita-image-store.s3.amazonaws.com/0/90495/6328d7d0-d8b5-91db-dbbf-c24414ea2fd2.png)


設定ダイアログ左の▶︎Cocosの▶︎をクリック→Frameworksをクリック、そこで、Frameworks下のEngine Modeを選択し、そしてLuaの右のプルダウンメニューからcustomを選択、ここでc:/cocos/cocos2d-x-3.3フォルダをパスとして設定します。その後、OKボタンを押して設定ダイアログを閉じます。

![1-2 cocos code ide config framework.png](https://qiita-image-store.s3.amazonaws.com/0/90495/83f76d41-0500-b23f-a894-5a1eeaa9cf92.png)

Cocos Code IDEのメニューから、ファイル→新規→プロジェクトをクリックして、
新規プロジェクトウィンドウからCocos Luaプロジェクトを選択して次へ、
CocosProjectプロジェクト作成画面でプロジェクト名をStartにして次へ、
Simulator設定画面で方向を縦、初期画面の大きさをCustomを選択し、その下に幅540高さ960を入力し、終了ボタンをクリックします。（この辺の設定は後から変更できます。また、ネイティブコードは次回以降Android、iOS向けにビルドするときに生成するので今は選択しません。）

![1-3 cocos code ide config new project.png](https://qiita-image-store.s3.amazonaws.com/0/90495/d4680e54-e52c-b6f8-db5a-1e69d612f6a1.png)

Cocos Code IDEのExplorerウィンドウからプロジェクトのフォルダをクリックし、Cocos Code IDE上部からWin32 Runボタンをクリックし、

![1-4 cocos code ide run.png](https://qiita-image-store.s3.amazonaws.com/0/90495/c4a8a75c-817e-22a1-9b38-ddffeaa1e4ba.png)

下記のような実行画面が表示されれば初期設定は完了です。

![1-4 cocos code ide config run.png](https://qiita-image-store.s3.amazonaws.com/0/90495/30e03961-a4f9-eee2-97a2-36b46cdfa6fb.png)

Lua言語で記述されたコードが、Windowsアプリとして実行されているのが上記状態です。
次回以降AndroidやiOS端末で実行することで、共通コード（本稿ではLua言語のコード）によるマルチプラットフォーム向けゲーム開発を体験していきます。

#今後の予定

cocos2d-xおよびCocos Code IDEを使用する場合、新規プロジェクト作成時にサンプルコードが含まれた状態でプロジェクトが生成されます。今回使用したver3.3のLuaプロジェクトでは、踊るリスと花園がサンプルコードになっていますが、Javascript向け環境を設定した場合は回転する四角い絵のサンプルコードが含まれています。サンプルコードの内容について興味がある人は、次回以降説明予定のスプライト、アクション、レイヤー、イベントといった基本要素を理解してから読み返してみることをお勧めします。

次回は、今回作成したプロジェクトからサンプルコードの不要部分を削除し、コードを追加していきながら、開発者向け情報を非表示にしたり、スプライト、レイヤーといった基本要素を説明していきます。基本要素の説明がある程度終わった所で、AndroidとiOS端末での実行を行う予定です。
[Swift] 画面回転時のviewの切り替え方法について


#端末を回転させたい場合、画面切り替え方法ではまったのでメモ
※勉強用で作成したメモです。
#
前提
viewの作成にxibもしくはstoryboardを使用していること
##
実装内容

縦画面の場合

+ 横画面用のviewを非表示
+ 縦画面用のviewを表示

横画面の場合

+ 横画面用のviewを表示
+ 縦画面用のviewを非表示

##
手順
1.xibもしくはstoryboardで縦画面（ここではviewV）、横画面（ここではviewH）を作成し、アウトレット接続する
2.viewDidLoadにviewをaddSubView、viewWillTransitionToSize()内に画面切り替え処理を記述
3.回転時ライフサイクルイベントviewWillTransitionToSize()が呼ばれる
##
例を以下に記述（ViewController.swift）

```ViewController.swift

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.addSubView(viewV)
    self.view.addSubView(viewH)
    rotationDisp()
}

func rotationDisp() {
    let size:CGSize  = UIScreen.mainScreen().bounds.size
    if size.width < size.height {
        viewV.hidden = false  // 縦用viewを表示
        viewH.hidden = true   // 横用viewを非表示
    } else if size.width > size.height {
        viewV.hidden = true   // 縦用viewを非表示
        viewH.hidden = false  // 横用viewを表示
    }
}

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    rotationDisp()
}
```

##
Piculetで出力された情報より、SecurityGroup別のファイルへ分割するワンライナー



[元同僚さん=先人の知見](http://yoshidashingo.hatenablog.com/entry/2015/04/30/135437)を見て思いつきました。
Piculetで出力された結果より、VPC_IDを拾い上げた上でSecurityGroup別にrbファイルを作ってくれます。
VPC別管理以外にもSG別に管理する場面もあるかと思います(ありました)ので作ってみました。

```
for vpc_rb in $(ls -1 vpc-*.rb);do for sg in `grep security_group ${vpc_rb}| gsed -e 's/[[:space:]]security_group[[:space:]]"\(.*\)" do/\1/g'`;do gsed -n -e '/^ec2[[:space:]]"\(.*\)"[[:space:]]do/p;/^end/p;/^\(. \)security_group[[:space:]]"'${sg}'"/,/^\(. \)end/p;' ${vpc_rb} > ${sg}.rb ;done;done
```

前提: vpc-*.rb というファイル名でpiculet向けrbがVPC単位で作成されている必要があります。
複数のVPCが1つのrbで混在していた場合はうまく動作しません。
Jubatusで自然言語処理を使うときのまとめ（備忘録）

先日、Jubatusハッカソンに参加してJubatusの良さが分かったので

#Jubatusとは
![jubutas.png](https://qiita-image-store.s3.amazonaws.com/0/10496/37102625-ef49-97e4-043d-8bdbee941beb.png)



Jubatusは、連像的に発生しているデータの流れ（フロー型）に対する逐次分析（リアルタイム処理）を対象とし、オンライン機械学習による深い分析という付加価値を提供するフレームワークです。

##Jubatusの利点

オンライン型なのでデータが定期的に増えるようなケースに有効（webニュース、新聞など）
分散可能なので大量のデータに対しても対応可能
データの前処理が標準であるので機械学習をするときの手間が省けます

#自然言語処理のための前処理

Jubatusの役に立つ前処理機能

１：自然言語処理をしているとHTMLタグを外したい
２：正規表現
３：様々な特徴量を扱いたい（Bag of Words, n-gram, tfなど）

詳しく使ってみたい方は下記
http://jubat.us/ja/fv_convert.html?highlight=num

#学習方法

Jubatusでは学習用のサーバーを複数立てることで分散学習を実現しています。

例えば識別用のサーバーを立てたい場合は下記のコマンドを実行します。

```shell-session
jubaclassifier --configpath config.json
```
上記のコマンドを実行するとローカルだとIPアドレス”127.0.0.1”、ポート番号”9199”でサーバーが設定されます。

設定用のファイルはjson形式で記述することが可能で下記を決めることが可能です。

・数値データの扱い
・数値データのフィルタ設定
・文字データの扱い
・文字データのフィルタ設定
・識別学習の方法

下記のチュートリアルに詳しい情報あり。
http://jubat.us/ja/tutorial.html

##学習データについて

学習データはDatum形式で渡す必要があり、Datum()の関数には辞書型のデータを渡すと変換してくれる仕組みがあります。

```py
        data_dict = json.loads(json形式のデータ)
        datum = Datum(data_dict)
```

Json形式で記述したデータがあれば、上記のコードで辞書形式のコードとして取得してDatum形式で渡すことが可能です。

学習方法は設定用jsonファイルのmethodで指定が可能です。

メソッドの一覧は下記です。

http://jubat.us/ja/method.html

#学習したモデルの扱い

学習したモデルは”/tmp/”以下に出力されます。

参考
http://jubat.us/ja/backup_and_recovery.html

学習したモデルの重みを確認してどの素性が強く効いているか確認したい場合があります。
その場合は出力されたデータはバイナリ形式なので中身を確認するにはテキストに直す必要があります。
jubatasにはjubadumpというコードがあるのでインストールするとバイナリファイルをテキストファイルに変換可能

https://github.com/jubatus/jubadump

ただし変換後のデータは下記のようになります。

```shell-session
出力されたファイルの形式例

素性の名前： "cand_kana_first$\u30C6\u30EB\u30D2\u30B3@str#bin\/bin": {
ラベル        "1": {
               "v3": 0,
               "v2": 0,
重み           "v1": -0.000523662019987
           },
ラベル       "0": {
              "v3": 0,
              "v2": 0,
重み          "v1": 0.000523662019987
           }
}

V2,V3はアルゴリズムによっては使用する

```

基本的にv1に出力された重みを確認すれば良いです。v2,v3はアルゴリズムによって使用するみたいですが、詳しくは分かりません。


以上がハッカソンに参加して得られた知見です。
事前処理から学習まで簡単に出来るjubatasは聞いたことがあるけど使っていなかった私にとっては便利だなと思えた代物なのでぜひ、皆さんも使って見て下さい。

チュートリアルコード

https://github.com/jubatus/jubatus-tutorial-python

ハッカソンで作成したコード（基本的にチュートリアルのコードを改変しています）

https://github.com/SnowMasaya/jubatus_hackathon


#参考サイト一覧

http://jubat.us/ja/

サンプルコード
https://github.com/jubatus/jubatus-example
なんだか間違っている気がするJavaScriptでスーパークラスからサブクラスの一覧を取得する方法

まずはじめに何をやりたかったというと、スーパークラスのクラスメソッドからサブクラスの一覧を取得したかった（。
ES6になってクラスも定義できるし継承もできるのでRubyみたいにサブクラスの一覧がとれるとうれしいなと思った次第（確かできたよね？）。
でいろいろ調べてみた結果、自分の検索技術が未熟＋英語とか十分に読めないこともあり、方法が見つからなかった。
しょうがないのでそれっぽいことをやろうと思って試行錯誤した結果以下のようになった。

```javascript
class Animal {
  constructor(name){
    this.name = name;
    this.subArray = new Array();
    Animal.prototype.subArray.push(this);
  } 
  
  callName(){
    console.log(this.name);
  }
}

Animal.prototype.subArray = new Array();

class Dog extends Animal {
  callName(){
    console.log("犬　名前：" + this.name);
  }
}

class Cat extends Animal {
  callName(){
    console.log("猫　名前：" + this.name);
  }
}

var myDog = new Dog('ぽち');
var myCat = new Cat('たま');


console.log(Animal.prototype.subArray);
```

単純にAnimalのprototypeに配列作ってインスタンスが生成されるたびにプッシュしていくという代物。サブクラス一覧と言うよりは作られたインスタンス一覧だろうか。
多分もっといい方法があるんだろうけど、なんとなくやりたいことはできそうな気がする。
もっといい方法があったら教えて欲しい＞＜
反変はなぜ関数の定義で使えるのか？覚書

Scalaの場合、Javaと異なり反変という概念がある。
型パラメタの前に `+`をつければJavaなどと同じ共変、`-`をつければ反変だ。
関数トレイトなどで

```scala
trait Function1[-S, +T] { //関数の定義
  def apply(x: S): T
}
```

と使われる。

## 共変と反変の比較

`A => B` は `Function1[A, B]`の略記である。
引数に`A=>B`をとるメソッド`def piyo(hoge: A => B){.. `の引数に
関数リテラル`hoge1: A' => B'`を渡すことを考える。

### 反変がある場合

```scala
trait Function1[-S, +T] { //関数の定義
  def apply(x: S): T
}
```

![スクリーンショット 2015-08-24 12.12.26.png](https://qiita-image-store.s3.amazonaws.com/0/53766/a6667f75-fabd-5476-948a-7f5489f5b253.png)

`A' => B'` を用いる場合、図より `A => B`の挙動も保証される。

### 両方とも共変の場合

```scala
trait Function1[+S, +T] { // 本当は違う
  def apply(x: S): T
}
```


![スクリーンショット 2015-08-24 12.28.30.png](https://qiita-image-store.s3.amazonaws.com/0/53766/eae51412-e2a3-8bf7-e95e-f817acda3500.png)

この場合、`AかつA'でない箇所が未定義`になるため、
`A' => B'`を用いた時に関数 `A=>B` の挙動を保証できない。
稼働系のzabbixサーバを特定してzabbix_senderつかう

zabbixをpacemakerで冗長化していて、とあるagentからとあるチェックスクリプトをローカルで実行してzabbix_senderでzabbix-serverに送りつけたいというときに、どちらが稼働系か調べる方法を備忘録的にメモリます。

agentdのログから特定できるかなーとか思ってたんですけど、だめなケースがあってあきらめたりなど。

nmapでListenしてるかみるやつだとこんな感じですかね。

```
# nmap -p 10050 localhost
Starting Nmap 5.51 ( http://nmap.org ) at 2015-08-21 21:13 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000026s latency).
Other addresses for localhost (not scanned): 127.0.0.1
PORT      STATE SERVICE
10050/tcp open  unknown

# nmap -p 10052 localhost
Starting Nmap 5.51 ( http://nmap.org ) at 2015-08-21 21:12 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000036s latency).
Other addresses for localhost (not scanned): 127.0.0.1
PORT      STATE  SERVICE
10052/tcp closed unknown

```

ssh越しにnetstat　`ssh user@zabbixserver netstat -lnpt|grep 10051`　とかするのでもよかったかなともちょっと思いました。（sshが開いてれば）
まあ処理結果が変わらないなら好みの問題ですかね。

※その後、ログのgrepだとダメっぽいケースがあって、ncでいけるんじゃないか説がでてこんなかんじ。

```
$ nc -z zabbix1 10051
Connection to zabbix1 10051 port [tcp/zabbix-trapper] succeeded!
```

で、system.runで取れるならzabbix-senderつかわずに稼動系判別しなくてよくね、という話にもなったりなど。
system.runでだめなケースとしては実行時間が長くて(10秒以上待たされるとかで）タイムアウトするやつだと後続の監視処理も詰まってイマイチっぽいです。
Objective-C のソースコードをフォーマット

以前は uncrustify を使っていた。

最近は clang-format というものがあるようだ。

```
$ brew install clang-format
```

A.m をフォーマットするには

```
$ clang-format -i A.m
```

.m, .h, .c をフォーマット
```
$ find . \( -name "*.m" -or -name "*.h" -or -name "*.c" \) -exec $(clang-format) -i \{\} \;
```

`-style` オプションでプリセットスタイルを指定したり、設定ファイルで細かく指定したりできるみたい。

```
$ clang-format -h
<snip>
  -dump-config              - Dump configuration options to stdout and exit.
                              Can be used with -style option.
<snip>
  -style=<string>           - Coding style, currently supports:
                                LLVM, Google, Chromium, Mozilla, WebKit.
                              Use -style=file to load style configuration from
                              .clang-format file located in one of the parent
                              directories of the source file (or current
                              directory for stdin).
                              Use -style="{key: value, ...}" to set specific
                              parameters, e.g.:
                                -style="{BasedOnStyle: llvm, IndentWidth: 8}"
```
zabbix2.5(3.0α)のDBをちょっとだけ調べた

初期DB構築のスクリプトを2.4と見比べて差分を確認しました。

<!--more-->
<h4>●hosts</h4>
各種errorカラムがvarchar(128)→varchar(2048)に変更。
<h4>●proxy_history</h4>
カラム追加：lastlogsize、mtime、meta
<h4>●media_type</h4>
カラム追加：smtp_port、smtp_security、smtp_verify_peer、smtp_verify_host、smtp_authentication

この画面変更に対応しています。（左：zabbix-2.5、右：zabbix-2.4）
![zabbix_media.png](https://qiita-image-store.s3.amazonaws.com/0/63464/92354098-0e2a-8510-a612-3b148b814e8e.png)

<h4>●削除テーブル</h4>
user_history：画面上部のパンくずリストが無くなったので不要に。
<h4>●追加テーブル</h4>
application_prototype

item_application_prototype

application_discovery

初期状態では中身が空なので用途がよくわからない…
<h4>●Valuemapの追加</h4>
'15'：'Value cache operating mode'

'16'：'Windows service startup type'
<h4>●itemsの追加</h4>
'23660'：'CPU ready','vmware.vm.cpu.ready[{$URL}
→'Percentage of time that the virtual machine was ready, but could not get scheduled to run on the physical CPU. CPU ready time is dependent on the number of virtual machines on the host and their CPU loads.'
'23661'：'Zabbix value cache operating mode','zabbix[vcache,cache,mode]'
'23662'：'Zabbix value cache operating mode','zabbix[vcache,cache,mode]'
<h4>●itemsの変更</h4>
デフォルトで登録されるアイテムのうち、いくつかのtrendsが365→0に。
<h4>●triggersの追加</h4>
'13557'：'Zabbix value cache working in low memory mode'
'13558'：'Zabbix value cache working in low memory mode'
<h4>●mappingsの追加</h4>
'82'：'Normal'
'83'：'Low memory'
'84'：'Automatic'
'85'：'Automatic delayed'
'86'：'Manual'
'87'：'Disabled'
'88'：'Unknown'
LaravelのQueue:pushで指定できる内容

ちょっと追えてないかもですが、これくらいかな。


* クラスの完全修飾名@メソッド名(\App\Queue\Mail@sendMail)
* 無名関数
* jobクラスのオブジェクト
* 多分jobクラスじゃなくても、handleメソッドを持っていて、SelfHandlingインタフェースを実装していれば行ける？

ちょっと曖昧ですが、一応書き留めておきます。
特に、クラスの完全修飾名@メソッド名で発火出来ることは初めて知れたので良かった
[JavaScript] 最近知ったカンマ演算子（変数を利用してオブジェクトプロパティを処理したい）

### 本題

JS書いてて、オブジェクトのプロパティに変数を割り当てたいこと、よくありますよね。

CoffeeScriptでは以下のように書けます。


```coffeescript:sample.coffee

$ "input"
  .each ->
    _key = $(@).attr "name"
    _val = $(@).val()
    _object = "#{_key}" : _val

```

コンパイルするとこうなります。

```js:sample.js

$("input").each(function() {
  var _key, _object, _val, obj;
  _key = $(this).attr("name");
  _val = $(this).val();
  return _object = (
    obj = {},
    obj["" + _key] = _val,
    obj
  );
});

```


最初これをみたとき、なにやってんだろ？と思いましたが
ここで使われているのが、[カンマ演算子](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comma_Operator)でした。
[パーフェクトJavaScript](http://gihyo.jp/book/2011/978-4-7741-4813-7)にももちろん書いてありました。

参考文献はよく読めってことですね。


### ついでに

ES6から、下のような記述が可能になるらしい。

```js:es6.sample
var key = 'hoge';
var obj = { [key]: val };
```

[オブジェクトリテラルのキーに式が使えるようになった](http://js-next.hatenablog.com/entry/2015/01/18/171138)