OmniAICreator/Qiita-1.07M huggingface dataset:
git diff とか format-patch で特定コミットとその直前コミットを指定する


## 直前 commit との diff
```sh
$ git diff #{commit_hash}^..#{commit_hash}
```

## 5 個前の commit との format-patch
```sh
$ git format-patch #{commit_hash}~5..#{commit_hash} -o/tmp/patch
```

`HEAD^` で最新の一個前が、`HEAD~5` で最新の 5 個前が指定できることは知っていましたが、
`HEAD` の部分がコミットハッシュでも良いと今知りました。
find all files or directories and execute one command recursively

You can find files or directories and execute one command recursively by the following command.
Please do not forget to the \; at the end of the command.


	$ find ./ -type d | f -exec command {} \;

e.g.

1. find all directories and change their permission

	`$ find ./ -type d -exec chmod 750 {} \;`

2. find all files and change the owner and group with apache

	`$ find ./ -type f -exec chown apache. {} \;`
ユニバーサル基板で小型化する

ここからは電子工作の話になります。

ここまで、音楽連動 LED をブレッドボードで作ってたんですが、かさばるのでユニバーサル基板で小型化することにしました。

![P8100206.JPG](https://qiita-image-store.s3.amazonaws.com/0/129898/ad241598-b9a9-ba7b-9b08-349d35dd4f16.jpeg)

(ユニバーサル基板だとこんな感じです)

かさばっていますが、回路はいたってシンプルです。

- BLE Nano と NeoPixel の LED に、GND と 5V 電源を供給
- BLE Nano の P0_5 を NeoPixel の DIN ピンに結線

そして、5V の電源は USB を使っています。

# 使用部品

まずは、使用部品を書いておきますね。

- BLE Nano (RedBear)
- ブレッドボード用マイクロBメスUSBコネクタDIP化キット (秋月電子)
- NeoPixel Stick - 8 x 5050 RGB LED (Adafruit Product ID: 1426)
- 0.3mm 厚両面ユニバーサル基板 Dタイプ
- シングル・ピンソケット 低メス 1x14
- L型ピンソケット 1x6
- ピンヘッダ 1x3

BLE Nano と、フルカラー LED は、使い回しをしたいのでピンヘッダ/ピンソケットで接続することにします。

L型ピンソケットは 1x3 で十分なのですが、見つからなかったので 1x6 のものを使っています。

(BLE Nano はスイッサイエンス、USB コネクタ DIP 化キット他は秋月電子で入手しました)


# 部品配置

できるだけ小型にしたいので、大きな部品から配置を決めていきます。

![P8100005.JPG](https://qiita-image-store.s3.amazonaws.com/0/129898/81f0a321-1478-e5a7-2779-405b12f19033.jpeg) ![BLE Nano.png](https://qiita-image-store.s3.amazonaws.com/0/129898/7901ef55-5328-b2ef-c9a0-b3e5bf971556.png)

ピンソケットなどを基板上に並べてだいたいの配置を決めていきます。
(BLE Nano は、この方向で置くイメージです)

# 配線

上の配置を、上下方向にひっくり返した図になります。
(枠で囲んでいる部分が部品のイメージです)

![配線.png](https://qiita-image-store.s3.amazonaws.com/0/129898/7ec89c2e-0fe4-b0e7-050e-5f18280cfc96.png)

余白が少ないので、配線が少し回りくどくなっています :sweat_smile: 

黒が GND、赤が 5V VCC、青が DIN になります。
灰色の点は、結線はしませんが、固定のためにハンダ付けしている点になります。

黒線、赤線をスズメッキ線で結線します。
青線はどうしても赤線をまたいでしまうので、ポリウレタン線を使って結線しています。

![P8100007.JPG](https://qiita-image-store.s3.amazonaws.com/0/129898/cf18b82c-853d-cccf-c7b9-5dbf1512f817.jpeg)

(ハンダ付けは、まだまだ下手で恥ずかしいですが :sweat_drops: )

# できあがり

![P8100002.JPG](https://qiita-image-store.s3.amazonaws.com/0/129898/0c131093-bf86-4536-9975-cfbaccda81ff.jpeg)

こんな感じで小さくまとまりました。
Arrayの中の任意のpropertyに対して、Arrayの中身をユニークにする

## はじめに

Arrayの中身をpropertyの値でユニークにする方法を模索していた結果、下記に落ち着きました。

```swift
extension Array {
    func unique(predicate: (Element, Element) -> Bool) -> [Element] {
        var result: [Element] = []
        forEach { s -> Void in
            guard !result.contains({ r -> Bool in
                return predicate(r, s)
            }) else { return }
            result.append(s)
        }
        return result
    }
}
```

Arrayの中身を別なArrayに1つずつ挿入していく際に、既に挿入済みかどうかを`contains`で確認しているのですが、その判定をclosureで外出しにしています。

## 使用用途

例として、PostのArrayをidでユニークにしてみます。

```swift
struct Post {
    let id: Int
    let text: String
}
```

```swift
// 1から100までのidのPostがあり、20から50までのidが重複したPostのArray (131 items)
let posts = (1...100).map { Post(id: $0, text: "text\($0)") } + (20...50).map { Post(id: $0, text: "text\($0)") }

// idがユニークなArrayにしたいので、同じidのものは除く。
// 1から100までのユニークなArray (100 items)
let uniquePosts = posts.unique { $0.id == $1.id }
```

## 最後に

resultの中身の個数が増えるほどループの回数が多くなって遅くなるので、もっと効率的な方法を模索中です。
Objective-CからHTML情報を書き換える


## はじめに

少し前にJavaScriptからiOSアプリにフックするやつを書いたのですが、
そのあとにObjective-CからHTMLを書き換えるというようなことがあった(現在進行形)ので

## ソースコード

```obj-c:ViewController.m
#import "ViewController.h"

@interface ViewController () <UIWebViewDelegate>

@property (weak, nonatomic) IBOutlet UIWebView *webView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _webView.delegate = self;
    NSURL *url = [NSURL URLWithString:@"https://nnsnodnb.moe/js-bridge/jshook.html"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [_webView loadRequest:request];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSString *javaScript = @"document.getElementById('hoge').value = 'ご飯炊けたよぉぉぉぉ！！！！';";
    [_webView stringByEvaluatingJavaScriptFromString:javaScript];
}

@end
```

今回も私の自宅サーバさんが役に立ってくれそうです。久しぶりにATS問題に引っかかり `Info.plist` を書き換えるすら面倒になってしまったのでサーバにちょちょいとアップロードしました。

https://nnsnodnb.moe/js-bridge/jshook.html

もしテストしてみたいとかあればどうぞ使ってください(?)
ちなみに当サイトでは、jQueryを載せているのですが以下の様なJavaScript操作はできませんでした。

```javascript:できなかったScript
$('#hoge').attr('value', 'ご飯炊けたよぉぉぉぉ！！！！');
```

## スクリーンショット

### ブラウザで開く

![スクリーンショット 2016-08-10 午後5.16.08.png](https://qiita-image-store.s3.amazonaws.com/0/97280/ab130f02-a997-82bc-00fb-76ea356267f4.png "スクリーンショット 2016-08-10 午後5.16.08.png")

### JavaScript操作を行う

![スクリーンショット 2016-08-10 午後5.17.57.png](https://qiita-image-store.s3.amazonaws.com/0/97280/7a9ceb85-51c7-c21d-8556-747a71a780a5.png "スクリーンショット 2016-08-10 午後5.17.57.png")


スクリーンショットを撮ったあとに `inputタグ` に `disabled属性` をつけてみました。

```html:jshook.html
<input type="text" id="hoge" value="hogehogehoge" disabled>
```

やってみたいからこんなの追加してくれ！とかあったらコメントでオナシャス

## 部長様の記事

[[WebViewシリーズ①] WebViewのイベントをフックする](http://qiita.com/eKushida/items/a1679e2f438d3fa83c18#_reference-0812d216d06c901997cd)
[[WebViewシリーズ②] WebView内でJavaScriptのメソッドを操作する](http://qiita.com/eKushida/items/055dc36119757b2c304e#_reference-17b8894161775cb1df58)
[[WebViewシリーズ③] WebViewは、ページ内のアンカーへリンクできない？？](http://qiita.com/eKushida/items/dd91615c68f3bd5abdd1#_reference-6dae39736b54937db494)
[[WebViewシリーズ④] WebView（アプリ内）のリンクからiTunesが表示できない](http://qiita.com/eKushida/items/f7f7195ca0f12b25bca1#_reference-650d6cda0fe9d8911e79)

## 前回のゆるふわ

[ゆるふわにUIWebViewでJavaScriptイベントをひろってみる](http://qiita.com/nnsnodnb/items/27fd7c1ca2f8e24ec9c7)
collection_check_boxesを使ってinputとlabelをdivでwrapしたい

やりたいことは下記と同じ。
[Rails collection_check_boxes - wrap each checkbox with &lt;li&gt; - Stack Overflow](http://stackoverflow.com/questions/32000482/rails-collection-check-boxes-wrap-each-checkbox-with-li)

slimの場合。

```edit.html.slim
= form.collection_check_boxes :item_ids, Item.all, :id, :name do |b|
  .hoge
    = b.check_box + b.label { b.text }
```
Sublime Text 3 ：HTML-CSS-JS Prettify でJSONを展開する設定

# HTML-CSS-JS Prettify でJSONを展開する設定
[HTML-CSS-JS Prettify](https://packagecontrol.io/packages/HTML-CSS-JS%20Prettify)

とても便利なのですが、デフォルト設定では、一行JSONを展開してくださいません。
設定を変更すると展開してくださいます。

## 設定で解決
`Preference > Package Setting >  HTML/CSS/JS Prettify > Set Prettiry Preference`

`js`の`brace_style`のデフォルト設定が`collapse-preserve-inline`となっておりますので`collapse`に変更します。

```json:.jsbeautifyrc
{

   ・・・

  "js": {

       ・・・

    //"brace_style": "collapse-preserve-inline",
    "brace_style": "collapse",

       ・・・

  }
}
```

### 補足：collapse-preserve-inline
説明にも書いてありますが、[ES6の分割代入構文](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#ES6バージョン)等が展開されてしまう問題に対応したものみたいです。

```js:before
var o = {p: 42, q: true};
var {p, q} = o;

console.log(p); // 42
console.log(q); // true
```


* collapse

```js:after_collapse
var o = {
    p: 42,
    q: true
};
var {
    p,
    q
} = o;

console.log(p); // 42
console.log(q); // true

```
たしかにこれだと読みづらくなってしまいますね。

* collapse-preserve-inline

```js:after_collapse-preserve-inline
var o = { p: 42, q: true };
var { p, q } = o;

console.log(p); // 42
console.log(q); // true
```

これを踏まえると、`collapse-preserve-inline`も捨てがたいですね。

現在JSの設定しかないですが、JSONの場合の設定を分けて設定できると嬉しいんですが。。。。


## ハックで回避

ということで、ちょっと試行錯誤したところ、適当な階層で改行を入れてあげると、`collapse-preserve-inline`設定でもJSONを展開してくれるので、デフォルト値大好きな僕としてはこのハックが好きです。

```json:onelined
{ "year": 2013, "title": "Turn It Down, Or Else!", "info": { "directors": ["Alice Smith", "Bob Jones"], "release_date": "2013-01-18T00:00:00Z", "rating": 6.2, "genres": ["Comedy", "Drama"], "image_url": "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg", "plot": "A rock band plays their music at high volumes, annoying the neighbors.", "rank": 11, "running_time_secs": 5215, "actors": ["David Matthewman", "Ann Thomas", "Jonathan G. Neff"] } }
```

このままだと展開されないので、適当に改行を入れます。

```json:separated-line
{ "year": 2013, "title": "Turn It Down, Or Else!", "info": { "directors": ["Alice Smith", "Bob Jones"], 
"release_date": "2013-01-18T00:00:00Z", "rating": 6.2, "genres": ["Comedy", "Drama"], "image_url": "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg", "plot": "A rock band plays their music at high volumes, annoying the neighbors.", "rank": 11, "running_time_secs": 5215, "actors": ["David Matthewman", "Ann Thomas", "Jonathan G. Neff"] } }
```

`Ctrl + Shift + F`でprettifyします。

```json:after
{
    "year": 2013,
    "title": "Turn It Down, Or Else!",
    "info": {
        "directors": ["Alice Smith", "Bob Jones"],
        "release_date": "2013-01-18T00:00:00Z",
        "rating": 6.2,
        "genres": ["Comedy", "Drama"],
        "image_url": "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg",
        "plot": "A rock band plays their music at high volumes, annoying the neighbors.",
        "rank": 11,
        "running_time_secs": 5215,
        "actors": ["David Matthewman", "Ann Thomas", "Jonathan G. Neff"]
    }
}
```

まあ、これで実用的には問題無いですね。

---
PostgreSQLでフィボナッチ数列

~~クエリの結果が帰ってこなくて暇なので~~`WITH RECURSIVE`なる再帰を知ったので~~暇つぶしに~~試してみました。
PostgreSQLでしか試していないですが他のRDBMSでも使えるんじゃあないでしょうか。（`WITH RECURSIVE`句がサポートされていれば）

クエリは下記

```sql
WITH RECURSIVE fibonacci(a, b, c) AS (
	SELECT
		1, 1, 0
	UNION ALL
	SELECT
		a + b,
		CASE
			WHEN a = 1 THEN 1
			ELSE b + c
		END,
		a - c
	FROM fibonacci
	WHERE c < 50
)
SELECT c FROM fibonacci
```

次のような結果が得られました。

```
0
1
1
2
3
5
8
13
21
34
55
```

やったっ！

`GENERATE_SERIES`使ってみたりだとか、`LAG`だとか色々試した結果できなくて`CASE`に頼ってしまいました。
再帰の中では集約関数も使えないんですね。

もっといいやり方あれば教えて下さい。
数式で書き下す Local response normalization の Backward propagation

CNNのLRN(Local response normalization layer)のBackward propagationを実装したときのメモ。

Forward propagationの式は以下。

```math
y_{ ijk }=x_{ ijk }(\kappa +\frac { \alpha  }{ n } \sum _{ t\in G(k) }{ x^2_{ijt} } )^{-\beta}
```

ここで、$G(k)$ は出力チャンネル $k$ に対応する入力チャンネルの集合とする。

ここで、

```math
C_{ijk} = \kappa+\frac{\alpha}{n}\sum_{t \in G(k)}{x^2_{ijt}} 
```

とおくと、Forward propagationの式はこうなる。

```math
y_{ijk} = x_{ijk}C_{ijk}^{-\beta}
```

Backward propagationは、微分の連鎖則より、

```math
\begin{eqnarray*}
\frac{\partial E}{\partial x_{ijd}} 

&=&

\sum_{k:d \in G(k)}{
\frac{\partial E}{\partial y_{ijk}}\frac{\partial y_{ijk}}{\partial x_{ijk}}
} \\

&=&

\frac{\partial E}{\partial y_{ijd}} \frac{\partial y_{ijd}}{\partial x_{ijd}} +
\sum_{k:d \subset G(k)}{\frac{\partial E}{\partial y_{ijk}}\frac{\partial y_{ijk}}{\partial x_{ijk}}} \\

&=&
 
\frac{\partial E}{\partial y_{ijd}}(C_{ijd}^{-\beta}-\frac{2\alpha\beta}{n}x_{ijd}^2C_{ijd}^{-\beta-1}) +
\sum_{k:d\subset G(k)} \frac{\partial E}{\partial y_{ijk}}(-\frac{2\alpha\beta}{n}x_{ijd}x_{ijk}C_{ijk}^{-\beta -1}) \\

&=& 

\frac{\partial E}{\partial y_{ijd}}C_{ijd}^{-\beta} -
\frac{2\alpha\beta}{n}x_{ijd}
\sum_{k:d \in G(k)} 
\frac{\partial E }{\partial y_{ijk}}x_{ijk}C_{ijk}^{-\beta -1} \\

&=&

\frac{\partial E}{\partial y_{ijd}}
(\kappa + \frac{\alpha}{n} \sum_{t \in G(d)}{x_{ijt}^{2}})^{-\beta}
-
\frac{2\alpha\beta}{n}x_{ijd}
\sum_{k:d \in G(k)}
\frac{\partial E}{\partial y_{ijk}}x_{ijk}
(\kappa + \frac{\alpha}{n}\sum_{t \in G(k)}{x_{ijt}^2)^{-\beta -1}}


\end{eqnarray*}
```

こうなる。
ReactのjsxファイルでSublimeText3 + Emmetを使おう

__React内のHTMLを後から書き直す。__ てなときにEmmetが使えるとストレスフリーです。ST3初期設定のままでは、jsxでEmmetが使えないのでちょっと面倒なんですよね。

## Stack Overflowで解決

ちと調べたら「公式で対応していた」という事が分かったので設定変更してみました。
スゴく…。使いやすいです。

[reactjs - In Sublime Text 3, how do you enable Emmet for JSX files? - Stack Overflow](http://stackoverflow.com/questions/26089802/in-sublime-text-3-how-do-you-enable-emmet-for-jsx-files)

## 要：設定変更
key binding (user)を開いて下記を追記すればOK。

```json
{ "keys": ["tab"], "command": "expand_abbreviation_by_tab",
		"context":[
	        { "operand": "source.js.jsx", "operator": "equal", "match_all": true, "key": "selector" },
	        { "match_all": true, "key": "selection_empty" },
	        { "operator": "equal", "operand": false, "match_all": true, "key": "has_next_field" },
	        { "operand": false, "operator": "equal", "match_all": true, "key": "auto_complete_visible" },
	        { "match_all": true, "key": "is_abbreviation" }
	    ]
	}
```

## key bindings - User の開き方

### コマンドパレット
```shift + command(ctrl) + p```から「key binding (user)」

![スクリーンショット 2016-08-10 16.41.50.png](https://qiita-image-store.s3.amazonaws.com/0/8405/0e135f7e-9e66-653f-840f-072a19711242.png)

### 環境設定から

![スクリーンショット 2016-08-10 16.44.11.png](https://qiita-image-store.s3.amazonaws.com/0/8405/f30f54c2-d426-32d7-e5ec-6e510bd6bdc4.png)

## 張り付け方
json形式です。文法エラーがあると保存できないハズ。すでに何か記入してある場合とかは、こんな風にしてください。

{}の開始位置とか文末の「,」あるなしに注意ですゾ。

```json
[
	{ "keys": ["super+shift+alt+d"], "command": "generate_naming" },
	{ "keys": ["super+shift+d"], "command": "duplicate_line" },

	// 下記が今回追記するコード
	{ "keys": ["tab"], "command": "expand_abbreviation_by_tab",
		"context":[
	        { "operand": "source.js.jsx", "operator": "equal", "match_all": true, "key": "selector" },
	        { "match_all": true, "key": "selection_empty" },
	        { "operator": "equal", "operand": false, "match_all": true, "key": "has_next_field" },
	        { "operand": false, "operator": "equal", "match_all": true, "key": "auto_complete_visible" },
	        { "match_all": true, "key": "is_abbreviation" }
	    ]
	}
]
```
要素が存在する場合にインスタンスを生成する関数

インスタンス生成時に要素を第1引数に渡すパターンのクラスのお話です。
ざっくりだけど以下のようなクラスの場合。

```js:ES2016
class Sample {
  constructor(el, a = 'a', b = 'b', c = 'c') {
    console.log(el);
    console.log(a + b + c);
  }
}
```


## 1. 要素の数だけインスタンス生成するパターン

### インスタンスを生成する関数
```js:ES2016
const createIncetance = (className, selector, ...opts) => {
  const el_ = document.querySelectorAll(selector);
  const instances = [];
  for(let i_ = 0; el_.length > i_; i_++) {
    const arg_ = [ el_[i_] ];
    if(opts) Array.prototype.push.apply(arg_, opts);
    instances.push(new className(...arg_));
  }
  return instances;  // インスタンスの配列を返す
};
```

### 使い方
```js:ES2016
window.addEventListener('DOMContentLoaded', () => {

  // 例1
  createIncetance(Sample, 'div');

  // 例2
  // 要素の後に他の引数を追加可能
  createIncetance(Sample, '.sample', 'aa', 'bb', 'cc');

  // 例3
  // 複数の場合は以下のようにまとめて指定する方法も良いかと
  const modules_ = [
    [ Sample, 'div' ],
    [ Sample, '.sample', 'aa', 'bb', 'cc' ],
  ];
  modules_.forEach((arr) => {
    createIncetance(...arr);
  });

});
```

第1引数に渡すのははそれぞれの要素です。
上の例1で `div` が3つあるとしたら以下の様な感じです。

```js:ES2016
const elms = document.querySelectorAll('div');
new Sample(elms[0]);
new Sample(elms[1]);
new Sample(elms[2]);
```

## 2. 要素があれば1つだけインスタンスを生成するパターン

### インスタンスを生成する関数
```js:ES2016
const createSingleIncetance = (className, selector, ...opts) => {
  const el_ = document.querySelectorAll(selector);
  if(!el_.length) return false;
  const arg_ = [el_];
  if(opts) Array.prototype.push.apply(arg_, opts);
  return new className(...arg_);  // インスタンスを返す
};
```

### 使い方
```js:ES2016
window.addEventListener('DOMContentLoaded', () => {

  // 例1
  createSingleIncetance(Sample, 'div');

  // 例2
  // HTML要素の後に他の引数を追加可能
  createSingleIncetance(Sample, '.sample', 'aa', 'bb', 'cc');

  // 例3
  // 複数の場合は以下のようにまとめて指定する方法も良いかと
  const modules_ = [
    [ Sample, 'div' ],
    [ Sample, '.sample', 'aa', 'bb', 'cc' ],
  ];
  modules_.forEach((arr) => {
    createSingleIncetance(...arr);
  });

});
```

第1引数に渡すのは NodeList です。
上の例1で `div` が3つあるとしたら以下の様な感じです。

```js:ES2016
new Sample(document.querySelectorAll('div'));
```
Chefを使ってWebLogic 動的クラスタをスケールアップしてみた


# 概要
WebLogic Server 動的クラスタはサーバ容量が必要な状況で簡単にインスタンス数を動的にスケールアップする事が可能なクラスタ機能です。

以下の投稿の中で動的クラスタについて説明をしています。

-[Chefを使ってWebLogic Server 動的クラスタを構成してみた](http://qiita.com/shinyay/items/4e23d9bbd8a934c6853e)

![Domain_DynamicCluster.png](https://bytebucket.org/shinyay/images-for-blog/raw/42675083ff252e9f84ddd1adf72ca14dc48a228b/qiita/160807_chef-oracle-weblogic-dynamic-cluster/Domain_DynamicCluster.png)

動的クラスタのスケールアップやスケールダウンの操作は管理コンソール上からの設定やWLSTからの操作で容易に実施できますが、さらに簡単に実行できるようにChefでレシピ化してみます。

## 動的クラスタの動的設定
動的クラスタに対してスケールアップやスケールダウンといったエラスティックな操作を連続して行うとインスタンスの生成や起動処理が待ち行列となる可能性があります。
そこで、連続してのスケーリングを抑止するように**クールオフ時間**が設定可能です。

- [クラスタ] -> [クラスタ名] -> [構成] -> [サーバー]
    - 動的設定
        - 動的クラスタ・クールオフ期間(秒単位)
![DynamicCluster-Cooloff-Period.png](https://bytebucket.org/shinyay/images-for-blog/raw/c11c1e3957e6a75a842baf4545026953f4ce5d6d/qiita/160810_chef-oracle-weblogic-dynamic-cluster/DynamicCluster-Cooloff-Period.png)

デフォルトでは900秒、つまり15分間は一度スケーリング操作を行うと次の操作まで時間をあける必要があります。

## 今回作成するRecipe
- 動的クラスタをスケールアップする
    - 一度にスケールアップするインスタンス数はパラメータ設置可能とする

# Recipe. 動的クラスタをスケールアップする
以下の3種類のファイルを作成します。
- Recipe
- Template
- Attribute

## [recipe] WLSTスクリプトファイルを生成
テンプレート(**scaleup_cluster.py.erb**)からWLSTスクリプトファイルを生成し、オーナー/グループ権限を設定します。

```recipes/scaleup-cluster.rb
template "#{node['weblogic-domain']['response_file_dir']}/scaleup_#{node['weblogic-domain']['domain_name']}_cluster.py" do
  source "scaleup_cluster.py.erb"
  owner node['weblogic-domain']['owner']
  group node['weblogic-domain']['group']
  mode '0755'
end
```

## [template] WLSTスクリプトファイルのひな型
WLSTスクリプトの中では以下のフローを取ります。

1. WLS管理サーバに接続
2. 動的クラスタをスケールアップ
3. 管理サーバから切断

以下、Templateファイルより抜粋

```tempalates/default/create_dynamic-cluster.py.erb
connect('<%= node['weblogic-domain']['admin_user'] %>','<%= node['weblogic-domain']['admin_password'] %>','t3://localhost:<%= node['weblogic-domain']['listen_port'] %>')
scaleUp('<%= node['weblogic-domain']['cluster_name'] %>', 1, true, true)
```

### WLST コマンドリファレンス
#### scaleUp
- コマンド説明

指定した動的クラスタが実行している動的サーバのインスタンス数を増やします。
サーバIDが最少で実行されていないサーバが最初に起動され、続くIDのサーバが順次起動されます。


- コマンド構文

```py
scaleUp (clusterName, numServers, [updateConfiguration], [block], [timeoutSeconds], [type])
```


- コマンド引数

|引数|定義|
|-------|-----|
|clusterName|動的クラスタの名前|
|numServers|起動するサーバのインスタンス数|
|updateConfiguration|オプション<br>デフォルト：false<br>クラスタの最大数を増やすかどうかを決めるBoolean|
|block|オプション<br>デフォルト：true<br>WLSTがユーザー対話をブロックするかどうかを指定するBoolean|
|timeoutSeconds|オプション<br>デフォルト：600<br>操作を取り消す前にWLSTがサーバの起動を待機する時間(秒)|
|type|オプション<br>指定する場合、"DynamicCluster"<br>将来の拡張用項目|

# Chefの実行イメージ
![chef-oracle-weblogic-dynamic-cluster-scaleup.gif](https://bytebucket.org/shinyay/images-for-blog/raw/79bc2342a91dcd4d6b3851d98c6e511f79e9eede/qiita/160810_chef-oracle-weblogic-dynamic-cluster/160810_chef-oracle-weblogic-dynamic-cluster-scaleup.gif)

# まとめ
WebLogic Server上の動的クラスタをスケールアウトしてみました。
![DynamicCluster-Scaleup.png](https://bytebucket.org/shinyay/images-for-blog/raw/1a18b8641926167516f69536ebd105196c7fe827/qiita/160810_chef-oracle-weblogic-dynamic-cluster/DynamicCluster-Scaleup.png)

この機能のより繁忙期などのトラフィックが多くなる時期や、突発的な高トラフィックな日の対応にもサーバの停止を行う事なくスケールアウトが可能となります。
iOS アイコンサイズ自動リサイズアプリ作った

アプリとは名ばかりのAutoMatorワークフロー
むしろシェルスクリプト

でも便利でよく使ってるからUP



#使い方
IconMakerをここから
https://drive.google.com/folderview?id=0BwMN9FfQw1aocnA3dTBCdnphcUE&usp=sharing
ダウンロード
どこでもいいから置いておく

![スクリーンショット 2016-08-10 16.12.10.png](https://qiita-image-store.s3.amazonaws.com/0/117659/5bcdb3a1-f3ad-e58f-8b21-f9836d1aed04.png)

**1024×1024のpngファイル**をドロップ
(名前はなんでもいいです。)

するとデスクトップにIconsというフォルダと
icon_1024x1024.pngが生成されます。

![スクリーンショット 2016-08-10 16.30.17.png](https://qiita-image-store.s3.amazonaws.com/0/117659/77b569f4-30bc-ca92-ada7-a60821af5a83.png)

###Iconsの中身


![スクリーンショット 2016-08-10 16.30.56.png](https://qiita-image-store.s3.amazonaws.com/0/117659/360e471a-330a-9251-cb35-131282f54e0c.png)


###iosの中身

![スクリーンショット 2016-08-10 16.31.00.png](https://qiita-image-store.s3.amazonaws.com/0/117659/bc948d51-c9b5-c9d7-794c-ad0246f5ebd1.png)

###おまけ
シェルスクリプト

```
cd Desktop

outdir="Icons/ios"

if [ -e "icon_1024x1024.png"]; then
	BASE_FILE="icon_1024x1024.png"
fi

sips -Z 512 ${BASE_FILE} --out Icons/icon_512x512.png
sips -Z 29 ${BASE_FILE} --out ${outdir}/icon-small.png
sips -Z 58 ${BASE_FILE} --out ${outdir}/icon-small@2x.png
sips -Z 87 ${BASE_FILE} --out ${outdir}/icon-small@3x.png
sips -Z 80 ${BASE_FILE} --out ${outdir}/icon-40@2x.png
sips -Z 120 ${BASE_FILE} --out ${outdir}/icon-40@3x.png
sips -Z 57 ${BASE_FILE} --out ${outdir}/icon.png
sips -Z 114 ${BASE_FILE} --out ${outdir}/icon@2x.png
sips -Z 120 ${BASE_FILE} --out ${outdir}/icon-60@2x.png
sips -Z 180 ${BASE_FILE} --out ${outdir}/icon-60@3x.png
sips -Z 29 ${BASE_FILE} --out ${outdir}/icon-small.png
sips -Z 58 ${BASE_FILE} --out ${outdir}/icon-small@2x.png
sips -Z 40 ${BASE_FILE} --out ${outdir}/icon-40.png
sips -Z 80 ${BASE_FILE} --out ${outdir}/icon-40@2x.png
sips -Z 50 ${BASE_FILE} --out ${outdir}/icon-50.png
sips -Z 100 ${BASE_FILE} --out ${outdir}/icon-50@2x.png
sips -Z 72 ${BASE_FILE} --out ${outdir}/icon-72.png
sips -Z 144 ${BASE_FILE} --out ${outdir}/icon-72@2x.png
sips -Z 76 ${BASE_FILE} --out ${outdir}/icon-76.png
sips -Z 152 ${BASE_FILE} --out ${outdir}/icon-76@2x.png
sips -Z 167 ${BASE_FILE} --out ${outdir}/icon-83.5@2x.png

```

###RM

アプリ作ってる時でアイコン作っている時が一番楽しいかもしれん
あとライブラリ作りも好き。

皆さんは何が一番楽しいですか？
naming > define macroのprefix > 機能のON/OFF > USE_XXX / FEATURE_XXX / ENABLE_XXX

ある機能を追加して欲しい、でもその機能は場合によっては無効にするかもしれない。

こういう要求があった時に、define macroで機能のON/OFFをするとする。

そのmacroはどういうprefixを持っていると5年後にも探しやすいだろうか。

- USE_XXX
  - XXXを使う
- FEATURE_XXX
  - XXXという機能

思いついたのはこのあたり。

USE_XXXの定義例
https://github.com/alanszlosek/knox/blob/af2921d8e65a7ed9ff025aa67e80afc6dc3b574b/config.h
> `#define USE_NCURSES 1`

FEATURE_XXXの定義例
https://github.com/rbowler/spinhawk/blob/ee6382be9a6100ef4d81b0dbc931ef3f2ee3757e/feat390.h

> `#define FEATURE_4K_STORAGE_KEYS`
> `#define FEATURE_ACCESS_REGISTERS`


どちらの使用例もある。
ソース検索しようとした時に`USE_`での検索を先に思いつく気がする。

<hr>
(追記 2016/08/18)

- ENABLE_XXX

という例も見つけた。
http://qiita.com/nonbiri15/items/a6d9176691e6766d2ac3#comment-d48e486aca3d45c8f296

機能をOFFにしていることを明確にする`DISABLE_XXX`というマクロも有用かもしれない。
R言語 - リッチなバーチャート "pirateplot"


# はじめに
バーチャートだけだと何か物足りない、という場合に使ってみたいプロット関数 "pirateplot" をご紹介します。"pirateplot" による描画では、データの分布をバーチャート上に描画する事ができます。

# 本Tipsで使用するシナリオ
本Tipsで使用するシナリオは、ITプロジェクトにおけるプロジェクトマネージャーのレベル別の平均単価の推移を表現しています。ソースデータのフォーマットは次の通りです。このフォーマットのデータを、ファイル名"data.txt"で作業ディレクトリに格納しています。

|           列の名称              | 列の説明                       | データタイプ|
|:--------------------------------|:-------------------------------|:------------|
|ProjectName                      |案件の名称                      |文字列       |
|EndUser                          |お客様の企業名称                |文字列       |
|ProjectManager                   |プロジェクトマネージャーの名前  |文字列       |
|PMLevel                        |プロジェクトマネージャーのレベル|数値         |
|FY                               |年間の売上高(円)                |数値         |

▼サンプルスクリプト

```R:R
# 作業ディレクトリの指定
setwd( "working_dir" )

# ライブラリの読み込み
library( "devtools" )
install_github( "ndphillips/yarrr" )
library( "yarrr" )

# データファイルの読み込み
data <- read.table( "data.txt", sep = "\t",header = T )

# グラフの描画
pirateplot(formula = FY ~ PMLevel,
          data = data,
          xlab = "ﾌﾟﾛｼﾞｪｸﾄﾏﾈｰｼﾞｬｰﾚﾍﾞﾙ",
          ylab = "案件別平均単価",
          main = "2013年\nﾌﾟﾛｼﾞｪｸﾄﾏﾈｰｼﾞｬｰ別\n案件別平均単価",
          pal = "google",
          point.o = .2,
          line.o = 1,
          theme.o = 2,
          line.lwd = 10,
          point.pch = 16,
          point.cex = 1.5,
          jitter.val = .1,
          ylim = c(0, 60)
          )
axis(side = 1, labels = F)
axis(side = 2, labels = F)
```

# 実行結果
![image](https://qiita-image-store.s3.amazonaws.com/0/106773/ae2790fc-a9e2-940a-e508-29a2ab1da6e8.png)

# リファレンス
http://nathanieldphillips.com/2016/04/pirateplot-2-0-the-rdi-plotting-choice-of-r-pirates/
aws-cliでlambdaのコードをアップロードしようとしたらErrorが出た話


aws-cliでlambdaに対してコードをローカルマシンからアップロードしていたら、
ある日突然こんなエラーが。

```
An error occurred (InvalidSignatureException) when calling the CreateFunction operation: Signature expired: 20160810T063101Z is now earlier than 20160810T064254Z (20160810T064754Z - 5 min.)
```

アクセスキーを作り直したりしてもダメ、
なんだこれと色々見ていると、
ローカルマシンの時間がずれていた。

これを直すといつも通りuploadできた。
【質問】Windows 10でサービス登録したWAMPからSMB2.0のTree Connect Requestが飛ばない

## 動作環境

- Windows 10 Pro, バージョン1607, OSビルド14393.51
- Apache 2.4.17
- PHP 5.6.23
- 読み出しているのはQNAP製NAS, TS231

## 比較

**サービス登録なし**

![off_service.png](https://qiita-image-store.s3.amazonaws.com/0/70258/57668358-99f7-a8c3-99f0-b993fbdd2cbb.png)


**サービス登録あり**

![on_service.png](https://qiita-image-store.s3.amazonaws.com/0/70258/06ac028f-d68c-a7a9-64cf-fc865a5d0442.png)

## PHPと出力

```php
<?php

$file_path = "\\\\TS231-1\\fs_data\\data.xml";

var_dump(file_get_contents($file_path));

?>
```

**サービス登録なし**

> string(154) " This is content of XML " 

**サービス登録あり**

> Warning: file_get_contents(\\TS231-1\fs_data\data.xml): failed to open stream: Invalid argument in C:\xampp\htdocs\index.php on line 16
bool(false) 

## 質問

XAMPPでサービス登録を行うと、Session Setup以降の手続きが行われません。
サービス登録を解除している場合、SMB2で読み出しに成功します。
Windows 7の場合、サービス登録の有無に関わらず読み出しが可能です。

PHPのコードに問題があるのか、Apacheのバグなのか、Windowsの問題なのか、これ以上どこを調べれば良いのか困っています。どこを調べればよいでしょうか。ご助言お願いします。

***サービス登録の有無に関わらず、単に通信を行えるようにするには、「Windows側でSMB2を無効化 & SMB1を有効化」で成功するのですが、Windows 10でSMB1のみを使用することに抵抗があります...***
UnityのConsoleログをVisualStudioに送らないようにする

# 概要

[Visual Studio Tools for Unity](https://msdn.microsoft.com/en-us/library/dn940019(v=vs.140).aspx)を導入した状態でVisualStudioを立ち上げ、Unityから出力したソリューションを開く。
すると、Unity実行時のログがVisualStudioのErrorListウィンドウに表示されてしまう。
これにより、EditウィンドウやFindReferenceウィンドウなど他のウィンドウにあるフォーカスを奪ってしまい、
Unity実行中のVisualStudio操作が不便に感じる場合がある。
そのため、このUnityのConsoleログをVisualStudioに送らないようにすることにより、上記の問題を解決できる。

# 方法

以下の内容をプロジェクトディレクトリのどこか(UnityEditorを参照しているためEditor配下である必要がある点に注意)に置く

```csharp
[UnityEditor.InitializeOnLoad]
public class SendConsoleToVisualStudioInhibitor
{
    static SendConsoleToVisualStudioInhibitor()
    {
        SyntaxTree.VisualStudio.Unity.Bridge.Configuration.Configurations.Active.SendConsoleToVisualStudio = false;
    }
}
```

# 参考

- [Disable Visual Studio's mirroring of Debug.Log output](http://forum.unity3d.com/threads/disable-visual-studios-mirroring-of-debug-log-output.388610/)
PECL ImageMagick(PHP)インストール手順


# ImageMagick
Imagick は、ImageMagick API を使用して画像の作成や修正を行う ネイティブ PHP 拡張モジュールです


通常、下記のコードでインストールできるみたいですが、
やたらエラーを吐いたので、メモ。
```pecl install imagick
```

# インストール手順

* 0～5は、pearインストール？（とばしても大丈夫？）
* 6～8が、imagickのインストール
* 6でやたらコケたので、pear/ファイルでのインストール手順を後述しました。

0) pearインストール済み？確認：インストール
0-1)```which pear```
0-2) ```yum -y install php-pear```
1) ```yum install php-devel```
2) phpの場所確認→移動
2-1) ```which php```
2-2) ```cd /usr/bin```
3) ```wget http://pear.php.net/go-pear.phar```
4) ```php go-pear.phar```
5) php.ini の編集。以下の行を追加。
include_path=".:/usr/PEAR"

6*) pecl install imagick
7) php.ini の編集。以下の行を追加。
extension=imagick.so
8) service httpd restart

============
◆peclでインストール

6-1) pecl install imagick
 #こけた WARNING: You will need re2c 0.13.4 or later
 #re2cをインストール(ホームディレクトリで作業)
6-a-1) wget https://github.com/skvadrik/re2c/releases/download/0.16/re2c-0.16.tar.gz
6-a-2) gzip -dc re2c-0.16.tar.gz | tar xvf -
6-a-3) cd re2c-0.16
6-a-4) ./configure
  #こけた depcomp: line 571: exec: g++: not found
  #yumでインストール
6-a-a-1) yum install gcc-c++

6-1)pecl install imagick
 #こけた ERROR: `/var/tmp/imagick/configure --with-php-config=/usr/bin/php-config --with-imagick' failed
 #うーん configure: error: not found. Please provide a path to MagickWand-config or Wand-config program.
6-b)yum install ImageMagick-devel
6-1)pecl install imagick
 #できた！

============
◆ファイルから
参考(コメ欄):http://php.net/manual/ja/imagick.installation.php
6-*) wget http://pecl.php.net/get/imagick-3.4.3RC1.tgz
6-*) gzip -dc imagick-3.4.3RC1.tgz | tar xvf -
6-*) cd ./imagick-3.4.3RC1
6-*) phpize
6-*) ./configure --with-imagick=/opt/local
  # こけた WARNING: You will need re2c 0.13.4 or later
  # → ◆peclでインストール[6-a]参照
6-*) make
6-1) make install

■参照
http://www.imagemagick.org/
http://php.net/manual/ja/book.imagick.php
http://www.image-magick.com/
(http://www.ghostscript.com/)
XAMPPのphpMyAdminへログインできなくなった

前の投稿( [XAMPPを導入した](http://qiita.com/M_amourr/items/c9c781c9ca9a6b84fbf7) )では最後にブラウザからphpMyAdminにログインできなくなってしまったのでこれを直した時のお話です。
使用しているパソコンはMAC OSX 10.11.3 El Capitanです。

Terminalからは`./mysql -u root -p`でパスワードを入力してroot権限のログインができましたがブラウザを使用するとid,パスワードを使用してもログインできなかったのです。




##結論：ファイル上のパスワードが未設定のままになっていた。
つまり、前回の投稿の最後にTerminalを使ってroot権限のパスワードを設定したはずなのですがこれが設定ファイルには書き込まれていなかったのです。


設定ファイルは以下の場所にあります。
`/Applications/XAMPP/xamppfiles/phpmyadmin/config.inc.php`


パーミッションがないと開けないかと思うので、開くときはsudoとvimを使用しました。
`cd /Applications/XAMPP/xamppfiles/phpmyadmin/`
`sudo vi config.inc.php`
(vimのコマンドについては面倒なので書きません。こちらなどをご参照ください。 
[Vimをメモ帳程度に使うために覚えておくべきコマンド](http://qiita.com/honeniq/items/201156650310c4968c3a) )

この中に下のような文章を見つけたらパスワードを確認してください。
`〜〜['password'] = '';`になっていたら下のようにパスワードを書き込みます。
(12345qiitaにした場合の例)

```php:
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '12345qiita';
```


これを上書き保存したら設定ファイルの読み直しのため、再起動すれば解決です。
(XAMPPの再起動だけでダメならパソコン自体を再起動したらうまくいきました。)
キミの言語は参照渡しできる？

C言語の昔からポインタやらアドレスやら鬼門だけど、現代の言語でも「参照渡し」は鬼門になってる。

参照渡しに触れる必要がない言語の文脈で参照渡しについてわざわざ言及するとまさかり投げ放題ワンダーランドみたいな事態になるので、気をつけよう。とイスカリオテの湯葉さんの[参照渡しと値渡し, copy と deepcopy の違い](http://qiita.com/yubais/items/c18b1692e20e3e647341)を読んで思ひました。

僕はゆるふわPHPerなのでPHPで書くけど、こんな関数呼び出しと実行結果が実装できれば「引数の参照渡し」が実現できてることになるんじゃないかな[^1]。

```php
<?php
 
$x = 'A';
$y = 'B';
 
swap($x, $y);
 
var_dump($x); // => 'B'
var_dump($y); // => 'A'
```

## C言語

大学でパソコンの勉強したひとはたいていC言語をやってるので得意なひとが多いんじゃないかと思ふけど、C言語に参照渡しはないから、`swap(x, y)`みたいなことは**できない**。ただし、アドレスを介在させて`swap(&x, &y)`みたいに**値として渡してやれば**実現はできる。

って大学で売り付けられた高くておもしろくないC言語の教科書にも載ってたような気はする。

```c
#include <stdio.h>

void swap(char *a, char *b)
{
    char tmp;

    tmp = *a;
    *a = *b;
    *b = tmp;
}

int main(void)
{
    char x = 'A', y = 'B';

    swap(&x, &y);
    printf("%c\n", x);
    printf("%c\n", y);

    return 0;
}
```

Cの場合は「アドレスの値渡し」であって「参照渡し」とは似て非なるものだと思ふんですけど、C言語はFラン大学時代に授業でやっただけなので、詳しいひとにマサカリを投げてほしいです！

## Java

まじめに書いたことない…

## PHP

はいはい、引数リストに`&`つけて**リファレンス渡し**にしてやればいいんでしょ。

## ほかの言語

みなさんも**自分の得意な言語で**`swap(x, y)`って書いてみよう！！

## 詳しく知りたい

[Qiitaで参照渡しで検索](http://qiita.com/search?q=%E5%8F%82%E7%85%A7%E6%B8%A1%E3%81%97)すると、みんなわかったりわからなかったりするんだな、といふことがよくわかります。

## 脚注

[^1]: もちろんC言語やLispのマクロを利用しても実現できるけど、ややこしいので置いておこう
[swift2.2] NSFileManager よく使うファイル操作メソッド(保存、削除、取得、列挙)のswift版

http://qiita.com/yusuga/items/4698478a246245a0f6b4
上記記事のswift版です。swift3以降変わるとのことですが備忘録がてら写経。

```FileManager.swift
// tmp/
func temporaryDirectory() -> NSString {
    return NSTemporaryDirectory()
}

// tmp/fileName
func temporaryDirectory(fileName: String) -> String {
    return temporaryDirectory().stringByAppendingPathComponent(fileName)
}

// Documents/
func documentDirectory() -> String {
    return NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!
}

// Documents/fileName
func documentDirectory(fileName: String) -> String {
    return (documentDirectory() as NSString).stringByAppendingPathComponent(fileName)
}

// pathのファイルが存在しているか
func fileExists(path: String) -> Bool {
    return NSFileManager.defaultManager().fileExistsAtPath(path)
}

// pathのファイルがelapsedTimeを超えているか
func isElapsedFileModificationDate(path: String, elapsedTime: NSTimeInterval) throws -> Bool {
    if !fileExists(path) {
        return false
    }
    
    let attributes = try NSFileManager.defaultManager().attributesOfItemAtPath(path) as NSDictionary
    guard let date = attributes.fileModificationDate() else {
        return false
    }
    
    return elapsedTime < NSDate().timeIntervalSinceDate(date)
}

// directoryPath内のextensionName(拡張子)と一致する全てのファイル名
func fileNames(directoryPath: String, extensionName: String) throws -> [String] {
    let allFileName = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(directoryPath)
    
    var hitFileNames = [String]()
    for fileName in allFileName {
        if (fileName as NSString).pathExtension == extensionName {
            hitFileNames.append(fileName)
        }
    }
    return hitFileNames
}

// pathのファイルを削除
func removeFilePath(path: String) throws{
    try NSFileManager.defaultManager().removeItemAtPath(path)
}
```
Excelで佐々木希を描く with Scala

[このブログ](http://bhind.hatenablog.com/entry/2016/08/10/155041)のコピーです。
## 概要
[Excelで佐々木希を描くwith python](http://qiita.com/Algebra_nobu/items/4e2b36bdb38434e183de)の他言語portとしてScala版をつくってみました。（もう本家投稿から2ヶ月も経ってた…）
ScalaなのでExcelのJavaライブラリである[Apache POI](https://poi.apache.org/)を使って、セルの色塗りをしました。

## 環境
- Windows 10 Pro (32bit)
- JDK 1.8.0_25
- Scala 2.11.8
- [Apache POI](https://poi.apache.org/) 3.14
- Microsoft Excel 2013

## コード
```scala:main.scala
import java.io._
import java.awt.Color

import org.apache.poi.xssf.usermodel.{XSSFColor, XSSFWorkbook}
import javax.imageio.ImageIO

import org.apache.poi.ss.usermodel.CellStyle

object main {
  val PixelHeight:Short = 35
  val PixelWidth:Short = 50
  val FilePrefix:String = "sasaki_nozomi"
  val XlsxPath:String = ".\\" + FilePrefix + "_scala.xlsx"
  val ImagePath:String = ".\\" + FilePrefix + ".jpg"

  def main(args: Array[String]): Unit = {
    val image = ImageIO.read(new File(ImagePath))
    val workbook = new XSSFWorkbook()
    workbook.createSheet(FilePrefix)
    val sheet = workbook.getSheetAt(0)
    val width = image.getWidth()
    val height = image.getHeight()
    for( j <- 0 until height ) {
      sheet.createRow(j)
      val row = sheet.getRow(j)
      row.setHeight(PixelHeight)
      for( i <- 0 until width ) {
        row.createCell(i)
        val cel = row.getCell(i)
        val pixel = image.getRGB(i, j)
        val color = new XSSFColor(this.getRGBArray(pixel))
        val style = workbook.createCellStyle()
        style.setFillPattern(CellStyle.SOLID_FOREGROUND)
        style.setFillForegroundColor(color)
        cel.setCellStyle(style)
      }
    }
    for( i <- 0 until width ) {
      sheet.setColumnWidth(i, PixelWidth)
    }

    val outfile = new java.io.FileOutputStream(XlsxPath)
    workbook.write(outfile)
    outfile.close()
  }
  def getRGBArray(pixel:Int):Color = {
    val r:Int = (pixel >> 16) & 0xff
    val g:Int = (pixel >> 8) & 0xff
    val b:Int = pixel & 0xff
    new Color(r,g,b)
  }
}
```

## 結果
![xlsx_capture.png](https://qiita-image-store.s3.amazonaws.com/0/58992/41ed8c51-1aed-8690-9331-d1697fb4a21a.png)

## ハマったこと・課題など
- ハマった: IntelliJでgithubへのリモートリポジトリの作成からpushまでが新規でできない（いまもできない）
- ハマった: XSSFColorがRGBのbyte arrayコンストラクタを最初使ってたのだが、byteのMAX_VALUEって127やん？255入らんやん？負数つかうん？と思ってやめた（別のコンストラクタにした）
- ハマった: セルの背景ぬるんだろとStyle::setFillBackgroundColorをよびつづけてた（正解はsetFillForegroundColorおよびパターン指定）
- 課題: 行がすすむにつれて処理がすっごく重くなる。（小一時間以上かかる）メモリ上のXSSFWorkbookがボトルネックかと思い、20行ずつファイルに書き出してみるも結局速度変わらず。XSSWorkbookインスタンス構築でもうがっつりメモリに乗せちゃってるんだろうなと想像。
- 良かったこと: IntelliJ買ってよかった（Eclipseのころより楽な気がした。まあ最近ずっとPhpStorm使ってたってのもあるけど）

## github
https://github.com/bhind/Sasakinozomi_scala_poi

## 参考
- [Excelで佐々木希を描く with python](http://qiita.com/Algebra_nobu/items/4e2b36bdb38434e183de)
- [ScalaでExcelを操作する 基本的な読み書き編](http://qiita.com/modal_soul/items/83074d5ef768a8edb3c9)
Grails3で、Grails2と同様に設定ファイルを外部化する

Grails 2ではGrails自身が実装していた設定ファイルの外部化は、Grails 3ではSpring Bootにまかされることになりました。

本記事では、Grails 2までの設定ファイル外部化となるべく似たような動作をするようにGrails 3設定してみます。

やることは、Applicationクラス(grails-app/init/hoge/Application.groovy)に以下のようにアノテーションを付与することだけです。

```groovy
import org.springframework.context.annotation.*

@PropertySources([
  @PropertySource(value="classpath:hoge.properties"),
  @PropertySource(value="file:///opt/hoge/conf/hoge.properties", ignoreResourceNotFound = true),
  @PropertySource(value='file:///${hoge.conf.file}', ignoreResourceNotFound = true)
])
class Application extends GrailsAutoConfiguration {
    static void main(String[] args) {
  :
```

上記によって以下のように動作します。

-  (1) warファイルやクラスパス中のhoge.properties(ソースコードとしてはsrc/main/resouces/hoge.propertiesに置く)を読み込む。このファイル中には設定のデフォルト値を記入しておく。
- (2) もしファイル「file:///opt/hoge/conf/hoge.properties」があれば設定ファイルとしてそれを読み込む。(1)で設定されたプロパティで同名のものは上書きされる。なければ何もしない。
- (3) もし、システムプロパティ「hoge.conf.file」もしくは環境変数「HOGE_CONF_FILE」で指定されたファイル名のファイルががあればそれを読み込む。(1)(2)で設定されたプロパティで同名のものは上書きされる。なければ何もしない。

run-app時、およびwar化してtomcatにデプロイしても同様に動作します。
ちなみに上記はSpring Bootの機能というだけです。([→参考](https://www.jayway.com/2014/02/16/spring-propertysource/))

# 余談

Spring Boot標準の設定ファイルの外部化の説明は[こちら](http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html)にありますが、非常に高機能かつ汎用的です。Spring Bootの主たる設定ファイルapplication.yaml(application.properties)は、特に何も設定しなくてもシステムプロパティspring.config.location(もしくは環境変数SPRING_CONFIG_LOCATION、etc)で切り替えることができます。その場合、[Profile-specific application properties](http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties)というものに応じてファイル名を選択する、なども可能です。(Seasar2の[「暗黙的な条件インクルード」](http://s2container.seasar.org/2.4/ja/DIContainer.html#ConditionalInclude)と似た機能)

ただ、spring.config.location方式だと、ベース名(デフォルトでappliction.yamlの「application」)を変更したい場合については、別のシステムプロパティ(spring.config.name)などの設定が必要になり、その設定は設定ファイルに書けない以上、環境変数やシステムプロパティで指定するしかなく、「環境変数やシステムプロパティを指定しない」ときにapplicationから読み込もうとしてしまう、という問題があり、Grails 2までの動作と上手く整合する方法をみつけられませんでした。

もし、外部化する設定ファイルのファイル名がapplication.yaml(.properties)のままで良いのであれば、あるいはシステムプロパティや環境変数の設定が必須であるような運用ルールとするならば、spring.config.locationを使う方式でも良いかもしれません。その場合、特に設定はいりません。
JavaScript文法(2) 変数とデータ型

# この記事の内容

* JavaScriptの変数の特徴
* JavaScriptの基本データ型の種類について

# 目次

(1) [学習環境の構築と基本的な書き方](http://qiita.com/azk0305/items/a13d494178d83fc8f2bc)
(2) 変数とデータ型 **<-- この記事の内容**
(3) [演算子および配列](http://qiita.com/azk0305/items/748f4afadcfa5350a552)
(4) [制御構文と関数](http://qiita.com/azk0305/items/ed943040a8f7140d5a48)
(5) [関数の応用1](http://qiita.com/azk0305/items/f7e0653b20425fdb9f1b)
(6) [関数の応用2](http://qiita.com/azk0305/items/0fd54f9c66f726443dd6)
(7) [オブジェクトの基礎](http://qiita.com/azk0305/items/0d2018a1c6e547b7f65a)
(8) [JavaScriptのオブジェクト指向プログラミング1 概要](http://qiita.com/azk0305/items/1e1bd10522927eaddd6a)
(9) [JavaScriptのオブジェクト指向プログラミング2 オブジェクトの作り方と継承](http://qiita.com/azk0305/items/386b3a2ac41caf3101e1)
(10) [JavaScriptのオブジェクト指向プログラミング3 多態性](http://qiita.com/azk0305/items/1c713562f6f842dcf1dc)
(11) [JavaScriptのオブジェクト指向プログラミング4 カプセル化](http://qiita.com/azk0305/items/914f6e447b41d4ced25e)
(12) [ES6の新機能について](http://qiita.com/azk0305/items/ebfb43c088101f7138f9)

# JavaScriptでの変数の宣言

基本的な書き方を観てきたところで、今回は変数について。

JavaScriptでは、データ型に依らず全ての変数は `var` というキーワードをつけて宣言する。CやJavaのようにプログラマの方で変数のデータ型を明示的に指定するものではない点、注意する。

```js:bs02_01.js
var s = "あいうえお";
console.log(s);        // あいうえお と表示される
```

```js:bs02_02.js
var a, b, c;       // 複数の変数を同時に宣言することも可能
a = 3;
b = 2;
c = a + b;
console.log(c);    // 5 と表示される
```

変数そのものに特定のデータ型を指定しているものではないため、以下の様なコードはエラーにならない。

```js:bs02_03.js
var a = 123;
a = "あいう";
console.log(a);    // あいう と表示される（エラーにならない）
```

※補足：実は `var` キーワードをつけずに変数を宣言することも可能。ただ、`var` の有り無しで若干異なる部分が出てくるため、基本的には `var` をつけて宣言する。（`var`をつけない場合については、後の記事で説明。）

# JavaScriptのデータ型

JavaScriptで用意されている基本データ型（と呼べるもの）には、以下のものが用意されている。

| データ型 | 説明 |
|:---|:---|
| 数値型(Number) | 整数や実数 |
| 文字列型(String) | クォーテーションで囲んだ文字の並び |
| 真偽値型(Boolean) | 真(true)か偽(false)のみ |
| 配列型(Array) | 通常の配列 |
| オブジェクト型(Object) | プロパティとメソッドをもつ。連想配列として利用できる。 |
| Null型(Null) | **意図的に**何も入っていないことを指定するための型 |
| 未定義型(Undefined) | 変数が初期化されていない状態のように、**必然的に**何も定義されていない状態を表す型 |

ある変数には何の型のデータが入っているかを調べるには `typeof` というキーワードを利用する。

```js:bs02_04.js
var a = 123;
var b = "abc";
var c;                    // 初期化しない

console.log(typeof a);    // number と表示される
console.log(typeof b);    // string と表示される
console.log(typeof c);    // undefined と表示される
```

# 補足：予約語

JavaScriptにも、変数名として利用できない「予約語」が存在する。一覧は、以下のページを参照。
[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Reserved_Words](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Reserved_Words)

# 次回予告

演算子および配列
ServerCAを指定してRでmysql接続

`ssl-ca` を設定ファイルで指定する

```r

#必要パッケージのロード
library("DBI")
library("RMySQL")
 
dbconnector <- dbConnect(dbDriver("MySQL"),default.file="C:/SSL/mysql.cnf")
```

```text:mysql.cnf
[client]
host=XXXXXXXXXXX
dbname=XXXX
user=XXX
password=XXXXXXXXXXXXXXXX
ssl-ca=c:/ssl/rds-combined-ca-bundle.pem
```
R言語 - データ検証パッケージ "validate"

# はじめに
validate パッケージ を使うと、データ検証作業の効率を向上させることができます。たとえば、指定したルールに従って、ルールに合格したか、評価に失敗したか、などを検証できます。

# データの構造をチェックする

▼サンプルスクリプト

```R:R
# 環境情報
# R version 3.2.5 (2016-04-14)  -- Very, Very Secure Dishes 
# パッケージのインストール
install.packages( "magrittr" )
install.packages( "validate" )
install.packages( "yaml" )

# ライブラリの読み込み
library( magrittr )
library( validate )
library( yaml )

# データの構造をチェックする
iris %>% check_that(
  Sepal.Width > 0.5 * Sepal.Length                          # V1
  , mean( Sepal.Width ) > 0                                 # V2
  , sd( Sepal.Width ) < 0                                   # V3
  , if ( Sepal.Width > 0.5*Sepal.Length ) Sepal.Length > 10 # V4
) %>% summary()
```

上記のサンプルスクリプトでは、summary() によって、check_that()の実行結果を表示しています。たとえば、ルール名「V2」では、Sepal.Width列全体の平均値が0よりい大きいことを検証しています。passes = "1"，fails = "0" であることから、ルールに合格している事が分かります。

▼実行結果例

```R:実行結果例
# check_thatの実行結果
  rule items passes fails nNA error warning                                              expression
1   V1   150     66    84   0 FALSE   FALSE                        Sepal.Width > 0.5 * Sepal.Length
2   V2     1      1     0   0 FALSE   FALSE                                   mean(Sepal.Width) > 0
3   V3     1      0     1   0 FALSE   FALSE                                     sd(Sepal.Width) < 0
4   V4   150     84    66   0 FALSE   FALSE !(Sepal.Width > 0.5 * Sepal.Length) | Sepal.Length > 10
```


# データ検証ルールの定義
validator()は、オブジェクトに対するデータ検証ルールを定義できます。定義したオブジェクトは、バリデータオブジェクトと呼ばれ、データ検証ルールとして再利用できます。
▼サンプルスクリプト

```R:R
v <-  validator(
  ratio = Sepal.Width > 0.5 * Sepal.Length
  , mean = mean( Sepal.Width ) > 0
  , sd = sd( Sepal.Width ) < 0
  , cnd = if ( Sepal.Width > 0.5*Sepal.Length ) Sepal.Length > 10
  )
```

▼実行結果例

```R:実行結果例
v
# v(バリデータオブジェクト)の中身の確認
Object of class 'validator' with 4 elements:
 ratio: Sepal.Width > 0.5 * Sepal.Length
 mean : mean(Sepal.Width) > 0
 sd   : sd(Sepal.Width) < 0
 cnd  : !(Sepal.Width > 0.5 * Sepal.Length) | Sepal.Length > 10
```

次のサンプルスクリプトでは、このバリデータオブジェクトを使ってirisデータセットをconfront()で検証しています。
▼サンプルスクリプト

```R:R
cf <- confront(iris, v)
```

▼実行結果例

```R:実行結果例
cf
# cf(検証結果)の中身の確認
Object of class 'validation'
Call:
    confront(x = iris, dat = v)

Confrontations: 4
With fails    : 3
Warnings      : 0
Errors        : 0
# cf(検証結果)を棒グラフにして可視化します。
barplot( cf, main="iris" )
```
![image](https://qiita-image-store.s3.amazonaws.com/0/106773/1932a8d3-08d7-fcf8-91d9-4cd514a81ed4.png)

# リファレンス
https://cran.r-project.org/web/packages/validate/vignettes/intro.html
https://cran.r-project.org/web/packages/validate/vignettes/rule-files.html
php7 の インストール

php7をインストールする上での備忘録

# 環境
OS : CentOS 6.8


# 手順

```bash
$ sudo yum -y install epel-release
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

# こっちでも可能
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# sudo rpm -Uvh remi-release-6*.rpm

$ sudo yum -y install  --enablerepo=remi --enablerepo=remi-php70 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-fpm php-intl php-pdo php-gd
```

※ 入れたモジュールは必要そうかなーと思われるものを抜粋

```bash
$ php -v
PHP 7.0.9 (cli) (built: Jul 20 2016 18:08:08) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.9, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.1, Copyright (c) 2002-2016, by Derick Rethans

```

php-fpmのインストール

```bash
$ sudo yum -y install  --enablerepo=remi --enablerepo=remi-php70 php-fpm

# www.confを編集
$ sudo emacs /etc/php-fpm.d/www.conf
user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

# 自動起動設定
$ sudo chkconfig php-fpm on


```

mysqlクライアントのインストール
DBサーバーが別にある場合はクライアントだけインストールすればよい

```bash
$ sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
$ sudo yum install mysql-community-client
```
ディープラーニングを利用したEmojで遊んでみた！

[絵文字コミット](https://github.com/atom/atom/blob/master/CONTRIBUTING.md#git-commit-messages)や、[絵文字キーボード](https://emojiworks.co/)などみんな絵文字が大好きですよね💡
今日は[emoj](https://github.com/sindresorhus/emoj)というコマンドラインツールを試してみます😊 💚 💛 💙 

# emojとは
emojはディープラーニングを利用して、文字列から絵文字を探してくれるコマンドラインツールです！
:octocat: [emoj](https://github.com/sindresorhus/emoj) について詳しくはこちら🙆
ディープラーニングについての解説記事はこちら⬇️
[Teaching Robots to Feel: Emoji & Deep Learning 👾 💭 💕](http://getdango.com/emoji-and-deep-learning/)

# インストールなど
Node.jsをversion4以上にして、npm installするだけ 💁💫 (簡単だね！)
インストールされたら
`$ emoj [text]`
たったのこれだけで、絵文字が探せます🔎 👀

# Emojライフのはじまり
#### コミットメッセージからも見つかる
![image](https://qiita-image-store.s3.amazonaws.com/0/61841/2505cafd-ec36-2d7a-37c2-040d83b0e4cc.png)
前半はUpdateにかかっているのか、いい感じな絵文字たちが！
一番最後の癒そうな顔はtestにかかっているのかしら・・・😂

#### 飲み会のお誘いでも見つかる
![image](https://qiita-image-store.s3.amazonaws.com/0/61841/98ca0f65-181f-b912-9b55-159f958d8936.png)
お酒と音符でかなり浮かれています🍻

#### もちろん単語だって
![image](https://qiita-image-store.s3.amazonaws.com/0/61841/d889982e-0490-aae7-0e03-cf917e5b3304.png)
流行りのポケモンGOもちゃんとそれっぽい絵文字が・・・！
ピンとか、草とかなんかいい感じです。

# 感想
なかなか楽しい👍  😄   😋   😈  😊  😀  (楽しいで検索したらでてきたやつです)
簡単に遊べるのでぜひ一度お試しください🌟

# おまけ
alfredのワークフローもあるよ
:octocat: [alfred-emoj](https://github.com/sindresorhus/alfred-emoj)
AIX初心者：tarコマンドとgzipコマンドを一気にやってみる

##背景
tar.gzファイルを解凍するときに、gunzipコマンドでtarファイルにし、tarコマンドで解凍といった二段階で解凍をしていた。
大きいファイルを解凍すると、tarファイルにしたタイミングでファイルシステムがパンクした事があったので、一気に展開する方法を下記に記載。

##実行方法
```
#gzip -dc fileName.tar.gz | tar -xvf-
```
各コマンドの細かいオプションについては別の機会に。。。
gmail > このドキュメントを表示するにはパスワードを入力してください > ダウンロードして開く

```txt:動作環境
chrome 52.0.2743.116 m on Windows 8.1 pro
```

gmailにて添付PDFファイルを開こうとした時に以下のメッセージが表示された。

> このドキュメントを表示するにはパスワードを入力してください

パスワードに関しては先方から連絡なし。

しかしながら、該当PDFファイルをダウンロードしてから開くと、パスワードなしで開いた。
ファイルの認識が失敗して、上記のような症状になっているのかもしれない。
ImageMagickの使い方

ImageMagickの使い方。
よく忘れる。覚えられない。
[ImageMagickの使用例 -- 入門](http://qiita.com/mtakizawa/items/a74bd91f7b3835976461)

#画像の情報
```
$ identify src.jpg
```

#フォーマット変換
```:
$ convert src.jpg dst.png
$ mogrify -format png *.jpg
```

#サイズ変更
##拡大縮小
```
$ convert -geometry WIDTHxHEIGHT src.jpg dst.jpg
$ convert -geometry 30% src.jpg dst.jpg
$ convert -geometry 10%x10% src.jpg dst.jpg
```

##切り取り
```
# 原点から1024x768を切り出す
$ convert -crop 1024x768+0+0 src.jpg dst.jpg
# 始点を省略するとバラバラにされた画像が出来上がる。
$ convert -crop 50% src.jpg dst.jpg
$ convert -crop 100x100 src.jpg dst.jpg
```

#画像の回転
```
$ convert -rotate 30 src.jpg dst.jpg
# 上下反転
$ convert -flip src.jpg dst.jpg
#左右反転
$ convert -flop src.jpg dst.jpg
```

# 画像の差分
```
$ composite -compose difference image1.bmp image2.bmp  diff.bmp
# 差が分かりづらいとき
$ mogrify -auto-level  diff.bmp
```

# アルファ合成
```
$ composite -compose CopyOpacity alpha.png src.png dst.png
```
SwiftとObjective-CのEnumの違い

SwiftとObjective-CのEnumの違いについて調べました

##Objective-Cの書き方
Objective-Cだとこんな感じ

###Objective-C
```
typedef NS_ENUM(NSUInteger,Zoo) {
	Monkey = 0,
	Gorilla,
	Chimpanzee,
};
```

以上。


##Swiftの書き方
Swiftだと色々な書き方ができます
基本的な書き方は以下のような感じです

```
enum Zoo : Int {	
	case Monkey = 0
	case Gorilla
 	case Chimpanzee
} 
```

数値以外のデータを列挙したものに入れることができます。

```
enum Zoo : String {	
	case Monkey = "サル"
	case Gorilla = "ゴリラ"
 	case Chimpanzee = "チンパンジー"
} 
```

関数も定義できます

```
enum Zoo {	
	case Monkey
	case Gorilla
 	case Chimpanzee
 	
 	func zooType() -> String {
 		switch self
 		case .Monkey :
 		return "サル"
 		case .Gorilla :
 		return "ゴリラ"
 		case .Chimpanzee :
 		return "チンパンジー"
 	}
} 
```

値に引数を与えることもできます

```
enum Zoo {
	case Monkey(String,String)
}

```

値に引数を与えた場合、switch文で分ける必要があります
switch文以外のところで分ける記述を書いても分けることができないので注意

```
var cage = Zoo.Monkey("サル","チンパンジー")

 switch cage {
        case .Monkey(let monkey, let tinpanzi):
            print(monkey) //サル
            print(tinpanzi) //チンパンジー
            break
        }

```

##まとめ
SwiftのEnumは、Objective-CのEnumより列挙できるものが多い
SwiftのEnumはいいぞ。
numpyでMismatch between array dtype (***) and format specifier (***)

# エラー文
```
with open("filename", 'a') as f:
    numpy.savetxt(f, data)
``` 
とした場合の一例が以下
> Mismatch between array dtype ('float64') and format specifier ('%10.5f)

# 対処
```
with open("filename", 'ab') as f:
    numpy.savetxt(f, data)
``` 
バイナリモードを付け加えるとなんと動いた。
理由が解明できない対処だが目的は達成したのでまずはメモしときます。