OmniAICreator/Qiita-1.07M huggingface dataset:
Windows 版 Deis Workflow CLI は SourceTree  との併用がオススメ

# 前口上

[別記事](http://qiita.com/monamour555/items/1b2a0f2a180ffb90178a) で Windows への Deis Workflow CLI のインストールからアカウント作成までを説明しましたが，いざ `deis create` コマンドを用いてアプリケーションを作ろうとすると，例外が発生してしまいます。

これは，アプリケーションの作成時に `deis.exe` を `git.exe remote` を実行しようとしているためです。
MsysGit など用いて `git.exe` をインストールすれば済む話ですが，よりお手軽な方法として，Atlassian SourceTree を用いる方法があります。

SourceTree がどんなソフトでどのようにインストールするのかといった細かいことは割愛します。ググると山のように出てきます。

# 筋書き

hello-deis という Web アプリケーションのデプロイを想定します。

## SourceTree のインストール

難しいことは特に無いです。悩んだらググれば答えが出ます。

## Git リポジトリの作成

これも難しいことはないです。 c:\Users\monaka\Documents\hello-deis という Git リポジトリを新規に作りました。誰かが先に作業しているようであれば Git リポジトリをクローンすることになります。

![リポジトリの作成](https://qiita-image-store.s3.amazonaws.com/0/5414/856f5daf-350b-2d69-8d20-f7fcb6211a85.png)

次に，SourceTreeのウインドウ右上にある「端末」ボタンをクリックします。
MinGW bash 環境が立ち上がります。
git.exe へのパスは通っており，カレントディレクトリは hello-deis リポジトリのトップディレクトリにあります。完璧です。

そのウインドウの中で，`deis create hello-deis` を実行します。正常なら 2〜3 秒以内に完了します。

![端末ウインドウ内での deis create 実行](https://qiita-image-store.s3.amazonaws.com/0/5414/5a198d31-041d-8357-4020-2bc1b5e779c8.png)

(必須ではありませんが，念のため) `git remote -v` を実行してみると，Deis に push するための設定が追加になっていることが判ります。

なお，初回は必ず，Workflow サーバ側のネットワーク設計次第では時々「サーバの鍵を受け入れる?」という旨のダイアログが出てきます。`Yes` を押して登録してください。

## SSH Key の生成とインポート

`git remote -v` の出力から，勘の良い方は気づいたかもしれませんが，Deis へ push する際には，事前に公開鍵の登録が必要です。公開鍵(および秘密鍵の生成も SourceTree で行えます。
具体的な方法はググってください。

![Screenshot 2017-01-23 at 13.25.09 - Display 2.png](https://qiita-image-store.s3.amazonaws.com/0/5414/43d26393-1251-9da6-748d-b786699884f2.png)

生成が終わったら，そのウインドウにある「公開鍵の保存」[^1]をクリックして保存してください。
スクリーンショットは英語版なので「Save public key」となっています。

[^1]: 秘密鍵ではなく公開鍵です。間違えやすいのでご注意を。

ファイル名や保存するパスは任意 [^2] ですが， `c:\Users\monaka\Documents\id_rsa_putty.pub` というファイル名で保存したこととします。



[^2]: 公開鍵は誰に見られても安全ですが，秘密鍵は流出すると危険です。取り扱いにはご注意を。

やれやれこれで Deis に登録できる…わけではありません。もう一手間が要ります。
SourceTree が推奨する秘密鍵/公開鍵のフォーマットは Putty 形式，Deis が期待するのは OpenSSH 形式です。変換を行わずに Deis に与えるとエラーが返ってきます。

![変換をしないとエラー](https://qiita-image-store.s3.amazonaws.com/0/5414/e6073c67-8c5a-91df-12bc-a8c1551e8258.png)

そこで，端末ウインドウ内で下記のようにして変換を行います。

```
ssh-keygen -i -f {Putty形式の公開鍵ファイル名} > {OpenSSH 形式の公開鍵ファイル名}
deis.exe keys:add {OpenSSH 形式の公開鍵ファイル名}
```

無事に公開鍵が登録されました。

![やったねタエちゃん](https://qiita-image-store.s3.amazonaws.com/0/5414/d153fa9b-4e89-fc76-7c75-ff0889535401.png)

# このあとは?

なんだか面倒な感じがするかもしれませんが，公開鍵の登録は一回済ませれば，あとは秘密鍵を変更しないかぎり必要ありません。
ten deploy/day なんてケチなことを言わずに思う存分デプロイを繰り返してください。

あと一つ git 周りの些細な注意事項を。
Heroku ではアプリケーションのデプロイを `git push heroku master` で行いますが， Deis では `git push deis master` で行います。さすがにここまで丸パクリではないので，お間違えのなきよう。
GitHubのIssueテンプレートジェネレーターを作った



# 作ったもの
GitHubのIssueのテンプレートを作るためのツールです。
[![image](https://qiita-image-store.s3.amazonaws.com/0/1423/5c6d5d69-8e87-6643-9c17-2d868e18f634.png)](https://nyamogera.github.io/issue-template-generator/)

# なぜ作ったのか
記事「[GitHub Issueはテンプレート化で、綺麗に書かせる！](http://qiita.com/yoshimikeisui/items/3e1873e3bf1bbafe8733)」で紹介されているように、Issueの作成ページにGETパラメータを渡すことで、Issueの初期値を設定できます。

このテンプレートに指定する文字ですが、URLエンコーディングをしなければならないので、少し作成するのが面倒です:thinking:でも、このジェネレータを使用すれば、誰でも簡単にテンプレートを作ることができます:smiley:

# Issueテンプレートジェネレータの使い方

1. [リポジトリURL]に、Issueテンプレートを作りたいリポジトリのURLを入力します。
1. [タイトル]に、テンプレートとして入れておきたいタイトルを入力します。
1. [テンプレート]に、テンプレートとして入れておきたい本文を入力します。
2. [生成する]ボタンを押すと、テンプレートが挿入されたIssueページに遷移するので、遷移した先のURLをコピペして、GitHubのWiKiなどにリンクとして挿入します。

# Issueのテンプレートを活用しよう
このツールを使うことで、「バグ報告」「議論」「要望」などの複数のテンプレートを作ることができます。Issueの内容の不備による不毛な質問を減らすためにも、ぜひ使ってみてください:muscle:
Ansible インストール (CentOS編)

# CentOS に Ansible(2.2.0.0) をインストール

```
sudo yum install -y epel-release
sudo yum install -y gcc python-pip python-devel openssl-devel libffi-devel
sudo pip install --upgrade pip setuptools
sudo pip install ansible==2.2.0.0
```

yum とか apt-get などでもできますが、パッケージ化されるまで時間を要するため、pip でのインストールを推奨します。

インストール確認

```
$ ansible --version
ansible 2.2.0.0
```
Elasticsearch: field_value_factorのmodifierによる増加の違いをグラフ化した

ElasticsearchのFunctionScoreQueryにはfieldの値をscoreに関連づけられるfield_value_factor functionがあります。

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-field-value-factor

field_value_factorにはデフォルト(none) + 9種類のmodifierが指定でき、field_valueに特殊な計算をした値をscoreとすることができます。

| modifier | score計算 |
|:-:|:-:|
|none   | field_value  |
|log   | log(field_value)  |
|log1p   | log(1 + field_value) |
|log2p   | log(2 + field_value)  |
|ln   | ln(field_value)  |
|ln1p   | ln(1 + field_value)  |
|ln2p   | ln(2 + field_value)  |
|square   | (field_value)^2  |
|sqrt   | √(field_value)  |
|reciprocal| 1 / field_value  |

いずれも簡単な計算ですが頭の中で考えるより目で見たほうがわかりやすいのでグラフにしました。
グラフには square を含めていません。指数関数なので他に比べ増加率が高すぎグラフが見づらくなるためです。

## field値 1 〜 10の範囲の場合
![Screen Shot 0029-01-22 at 20.17.28.png](https://qiita-image-store.s3.amazonaws.com/0/51303/f374e8e8-bbc9-f610-c4e9-a8b0739d8adc.png)

## field_value 1 〜 1000の範囲の場合

noneは除いています。log3種とln3種はそれぞれ一本にまとまって見えています。

![Screen Shot 0029-01-22 at 19.55.33.png](https://qiita-image-store.s3.amazonaws.com/0/51303/a28d014d-7ca2-d03a-5456-0fe1473d1598.png)



## log1pとln1pの使いどころ

公式ドキュメントに記述があり、field_value = 0に対して log, ln を指定すると例外を発生させるのでそれを回避するために使用するとのことです。

> Keep in mind that taking the log() of 0, or the square root of a negative number
is an illegal operation, and an exception will be thrown. Be sure to limit the
values of the field with a range filter to avoid this, or use `log1p` and
`ln1p`.

log2p, ln2pについては言及がありませんが -1か自然数の値をもつfieldに使用するんでしょうか。
Ansible インストール (Cygwin編)

# Cygwin で Ansible 2.2.0.0 のインストールのメモ

```
apt-cyg install python-setuptools
apt-cyg install gcc-core python-devel openssl-devel libffi-devel python-crypto
easy_install-2.7 pip
pip install --upgrade pip setuptools
pip install ansible==2.2.0.0
```

apt-cyg はこの記事が参考になります。
http://qiita.com/FSMS/items/68b5956301d987d1be2b

インストール確認

```
$ ansible --version
ansible 2.2.0.0
```
jQuery .each()のループはbreakじゃ抜けれない

## 今更だけどjQueryの.each()は「break」じゃ抜けれないんですって
いつものノリで「break」って書いたらエラーが出た。
え？breakじゃないの？？？
```js:break.js
$(".test").each(function () {
    if($(this).val === 1){
        alert("1ですね");
    }else{
        return break;
    }
}); 
```

![alt](https://qiita-image-store.s3.amazonaws.com/0/147005/5e9e4976-f066-4ce4-181a-dbc146ed4640.png =*100)

## jQueryの.each()は「return false」で抜けるらしい
これが正解らしい。

```js:break.js
$(".test").each(function () {
    if($(this).val === 1){
        alert("1ですね");
    }else{
        return false;
    }
}); 
```

因みにcontinueしたい場合は「return true」

```js:continue.js
$(".test").each(function () {
    if($(this).val === 1){
        alert("1ですね");
    }else{
        return true;
    }
}); 
```

今まで.each()をブレイクしたことなかったのかなー俺
Ansible小手先テクニック - inventory で配列を宣言する

Ansible の inventory の記述は

```
var = 'a'
```
のように、iniファイル形式でしか記述できず、配列やハッシュの表現が単純にはできない。
from_json を使って以下のようにすればできる。

```inventory.
[all:vars]
var_array_json = '["A", "B", "C"]'
var_array = '{{var_array_json | from_json}}'
var_hash_json = '{ "a": 1, "b": 2 }'
var_hash = '{{var_hash_json | from_json}}'
```

変数を確認する Playbook を適当に用意して、

```playbook.yml
- hosts: localhost
  tasks:
    - debug:
        var: var_array
    - debug:
        var: var_hash
```

実行してみる。

```
$ ansible-playbook -i inventory playbook.yml

PLAY [localhost] ***************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "var_array": [
        "A", 
        "B", 
        "C"
    ]
}

TASK [debug] *******************************************************************
ok: [localhost] => {
    "var_hash": {
        "a": 1, 
        "b": 2
    }
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0   
```

期待値通りの結果を得られる。

でも、あまり使うことはないとは思う。
json 記述はちょっと見ずらいし。
Yesod + Postgresで、stack exec -- yesod develができるところまで

Yesod + Postgresで、stack exec -- yesod develができるところまで
============================================================

はじめに
-------

この記事は[YesodでpostgreSQLを使う Haskell stack](http://blog.livedoor.jp/rtabaladi_58/archives/58083990.html)を参考にしました。参考にした記事をこえる内容はありません。自分用のまとめです。

前提
----

システムにStackやPostgreSQLはインストールずみであるとします。事前にYesod + sqliteでのテストをしてあるものとします。また、PostgreSQLは起動ずみとします。

Yesodのプロジェクトの名前
-----------------------

ここではYesodのプロジェクトの名前をtestYesodとします。

必要なユーザの作成
----------------

    % psql -U postgres -d postgres
    # create user "testYesod" password 'testYesod';
    # create user "testYesod_LOWER" password 'testYesod';

必要なデータベースの作成
---------------------

    # create database "testYesod_LOWER" owner "testYesod";
    # create database "testYesod_LOWER_test" owner "testYesod";
    # \q

Yesodのプロジェクトの作成とテスト
------------------------------

    # stack new testYesod yesod-postgres && cd testYesod
    # stack build
    # stack exec -- yesod devel

これで、[http://localhost:3000](http://localhost:3000)にアクセスするとデフォルトのYesodのページを見ることができる。

    # stack test
    ...
    10 examples, 0 failures
VSCodeでmarkdownを書いたらhtmlへ自動変換する。

# markdownをhtmlに変換したい。
調べてみるとpandocとか外部アプリ？が必要だったりと色々面倒なのですが
これは拡張機能を一つ入れるだけで手軽に出来ます。

# インストール拡張機能「markdown-pdf」
[vscode-markdown-pdf/README.ja.md at master · yzane/vscode-markdown-pdf](https://github.com/yzane/vscode-markdown-pdf/blob/master/README.ja.md)

本来PDFに変換するものですが
HTMLにも変換できます。

変換できる全フォーマット
（PDF、html、png、jpeg）

# インストール方法
Ctrl+p もしくは F1キーから
「pdf」で検索
「Markdown PDF」をインストールします。

# 設定を書き込む
ファイル＞基本設定＞ユーザー設定

```settings.json
// 自動セーブ
"markdown-pdf.convertOnSave": true,
// 出力フォーマット: pdf, html, png, jpeg
"markdown-pdf.type": "html",
```

を追加する。
※デフォルトではPDFが出力される。

設定が終了したらVSCodeを再起動します

※不満点
出力先を指定できない
（複数ファイルで利用した場合すべて1箇所に集まってしまう）
mdファイルはすべてhtmlに変換される。
（指定したファイルだけhtmlファイルに変換できないか？）
Gitリポジトリの中身を、ブランチとタグも含めて別リポジトリにコピーする

Bitbucket にあるソースを丸ごと GitHub Enterprise に移行することになりました。「丸ごと」というのは、 main 以外の全ての branches と tags も含めての移行です。

しかし、普通に `git clone -> git remote set-url -> git push` するだけでは main しか移行できません。

少しコマンドが複雑だったので、手順をメモしておきます。


やりたいこと
----
- Bitbucket にある Git リポジトリの中身を、 branches と tags も含めて GitHub Enterprise に移行する


コマンド
----
まずは移行元リポジトリの最新のソースを clone します。

```bash
git clone https://bitbucket.org/1000k/FOOBAR.git
cd FOOBAR/
```

この時点では main しかダウンロードできていません。

次のコマンドで、リモートの全ブランチを再帰的にダウンロードします。

```bash
git branch -r | grep -v "\->" | grep -v main | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
```

これでリポジトリの全コンテンツがダウンロードされました。

あとは移行先のリポジトリに push するだけです。

```bash
# Origin (リポジトリURL) を切り替える
git remote set-url origin https://github.com/1000k/FOOBAR.git

# すべてのブランチを push
git push --all origin
git push --tags
```

参考
----
- [branch - How to fetch all git branches - Stack Overflow](http://stackoverflow.com/questions/10312521/how-to-fetch-all-git-branches)
- [version control - Set up git to pull and push all branches - Stack Overflow](http://stackoverflow.com/questions/1914579/set-up-git-to-pull-and-push-all-branches)
CentOS7にMariaDBを構築する方法


## インストール
	
* fastermirror導入
	
	```bash:terminal
	yum -y install yum-fastestmirror
	```
	
* すでに古いバージョンが入っている(かもしれない)ので、一旦削除する

	```bash:terminal
	yum -y remove mariadb*
	```
	
* GPGキー取得 & yumレポジトリを追加

	```bash:terminal
	rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
	
	cat << \EOS > /etc/yum.repos.d/mariadb.repo
	[mariadb]
	name=MariaDB
	baseurl=http://yum.mariadb.org/10.1/centos7-amd64
	gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
	gpgcheck=1
	enabled=0
	EOS
	```

* MariaDBサーバをインストール

	```bash:terminal
	yum -y install mariadb-server --enablerepo=mariadb
	```

## 設定&起動

* cnfファイルを配置
	
	```bash:terminal
	cat << \EOS > /etc/my.cnf.d/local.cnf
	[mysqld]
	
	# 文字コード設定
	character-set-server=utf8mb4
	skip-character-set-client-handshake
	
	# リンクテーブル作成を許容する
	symbolic-links=0
	
	# メモリサイズ拡張
	max_allowed_packet=128MB
	
	# テーブル、カラム名を小文字に統一
	lower_case_table_names=1
	
	# InnoDB設定
	innodb_buffer_pool_size = 512M
	
	# indexサイズ拡張対応
	innodb_large_prefix=1
	innodb_file_per_table=1
	innodb_file_format=Barracuda
	innodb_file_format_max=Barracuda
	EOS
	```
	
* サービスを起動
	
	```bash:terminal
	service mariadb start
	```

## 初期設定

* mysql_secure_installationを使うと、下記の内容を対話形式で設定できる。

	* 現在のrootパスワードの確認(初期は空文字)
	* 新しいrootパスワードの設定
	* rootへのリモートログイン設定
	* anonymousユーザーの削除
	* testデータベースの削除
	* 上記設定変更の反映

### セキュリティ設定

* mysql_secure_installationを使う場合。

	```bash:terminal
	mysql_secure_installation
	```

* 同等のことを、Chef/Ansibleなどでやる場合は以下を参考に。。。

	```bash:terminal
	mysql -u root -p << \EOS
	/* rootユーザー作成 & パスワード設定 */
	GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'	IDENTIFIED BY '[password]' WITH GRANT OPTION;
	GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'			IDENTIFIED BY '[password]' WITH GRANT OPTION;
	/* anonymasユーザー削除 */
	DELETE FROM mysql.user WHERE User = '';
	/* testデータベース削除 */
	DROP DATABASE IF EXISTS test;
	/* 権限反映 */
	FLUSH PRIVILEGES;
	EOS
	```
	
## 完了

* 以上
El Capitan でhostsを編集する

# やりたいこと

開発サーバとかのIPアドレスを覚えるのが面倒なのでhostsファイルを編集して覚えやすい名前でアクセスできるようにします。


# 今更El Capitanかよとか言わないでね

仕事上しかたないのです。


# やり方

## hostsファイル編集

`$ sudo nano /private/etc/hosts`

もちろんnanoじゃなくてもいいです。

```
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
# ↓こんな感じに追加
1.23.4.56 mytestserv1.com
```

重要なのは、__IPとホスト名の間をスペース1個だけ空ける__ことです。

## 一応DNSキャッシュを削除

`$ sudo killall -HUP mDNSResponder`

めでたしめでたし。
[xamarin] VSForMacでandroidを実機でデバッグ実行するまで

長い道のりだった・・・

## VSForMacインストール
https://www.visualstudio.com/vs/visual-studio-mac/

ここは特に問題なし、結構時間かかったけどそのままインストールすればOK。

## テストプロジェクトをエミュレータで実行
さーて実行だ！！とワクワクしながら実行。
iOSは特に問題なく実行できたんだけど、androidで地獄の始まり。

### could no connect to debugger
![スクリーンショット 2017-01-17 22.18.00.png](https://qiita-image-store.s3.amazonaws.com/0/11543/4894b2d5-5449-b4bb-a873-a37fdcf9cbfc.png)
まずこれ。なにこれなにこれってなった。
とりあえず調べたら、「Fast Assembly Deployment」を無効にしろとか出てきたけど無駄。変わらず。
systemimageを一回全部削除したりAPIのインストールし直したり色々したけど無駄。
心が折れかけてボーっとQiita眺めてたら[90_jillさんの記事](Win10 で Xamarin のサンプル動かしたいのにエミュが動かなかった http://qiita.com/90_jill/items/267b131ce6f41bfc7bf0)発見、ここに希望の光が・・・！！！
### HAXMインストール
90_jillさんの記事通りにインストールしたら無事起動。長かった・・・・

![スクリーンショット 2017-01-23 12.10.28.png](https://qiita-image-store.s3.amazonaws.com/0/11543/8da14feb-fbd0-72fe-10ce-1588840b37ad.png)


### その他エラー
「Architecture not supported.」とか、「API is not installed.」とかそのあたりはプロジェクト設定だったりSDK Managerからインストールしたりして自己解決。

## 実機設定

さーて実機で見てみようとおもむろにMacにUSBで接続、xCodeと似たようなもんだろと思ってTargetDevice変更しようと思ったら・・・

![スクリーンショット 2017-01-23 12.14.02.png](https://qiita-image-store.s3.amazonaws.com/0/11543/36cc2396-5081-6fd4-cd20-f35f07cf1a64.png)
**ない。**
**接続しているデバイスが候補に出てこない。**

なんだこれまた地獄の始まりかよ・・・・と思ったら案外簡単。

* 設定→セキュリティ→提供元不明のアプリケーション　にチェック
* 設定→端末情報→ビルド情報　を7回タップ
* 設定→開発者向けオプション→USBでバッグ　をチェック 

すると

![スクリーンショット 2017-01-23 12.12.52.png](https://qiita-image-store.s3.amazonaws.com/0/11543/81e37b44-e7ba-ec56-29dc-75cdb98379d1.png)


出たーー

## 実行

これを選んで実行ボタン押すと無事、実機で起動しました！！！！
なげーよ！！！
Ruby 2.4.0 の CSV の field_size_limit: オプションの挙動が変わった？

`field_size_limit:` オプションを使っているコードを Ruby 2.4.0 で動かしたところ、エラーを期待したテストケースがエラーにならなくなりました。

> This is a maximum size CSV will read ahead looking for the closing quote for a field. (In truth, it reads to the first line ending beyond this size.) If a quote cannot be found within the limit CSV will raise a MalformedCSVError, assuming the data is faulty. You can use this limit to prevent what are effectively DoS attacks on the parser. However, this limit can cause a legitimate parse to fail and thus is set to +nil+, or off, by default.
> https://docs.ruby-lang.org/ja/latest/class/CSV.html

自分の理解としては、閉じクォートを探すための先読みを何文字まで許すか指定するためのオプションというもの。以下のサンプルコードの場合、2行目の一列目の引用符内が `\n2\n` で 4 文字未満を満たしているのでエラーにはならないはず。


```ruby
require 'csv'

CSV.new(DATA, field_size_limit: 4).each { |x| p x }

__END__
"a","b"
"
2
",""
```

実際、Ruby 2.3.3 で実行すると正常終了する。

```
$ ruby test.rb
["a", "b"]
["\n2\n", ""]
```

一方、Ruby 2.4.0 で実行すると例外終了してしまう。

```
$ ruby test.rb
["a", "b"]
~/.rbenv/versions/2.4.0/lib/ruby/2.4.0/csv.rb:1931:in `block in shift': Field size exceeded on line 2. (CSV::MalformedCSVError)
        from ~/.rbenv/versions/2.4.0/lib/ruby/2.4.0/csv.rb:1828:in `loop'
        from ~/.rbenv/versions/2.4.0/lib/ruby/2.4.0/csv.rb:1828:in `shift'
        from ~/.rbenv/versions/2.4.0/lib/ruby/2.4.0/csv.rb:1770:in `each'
        from test.rb:3:in `<main>'
```

よく分からないので `field_size_limit:` オプションで指定した上限値との比較をしている近辺でどんなデータを保持しているのか、以下のプリントデバッグで見てみた。

```diff
--- ~/.rbenv/versions/2.4.0/lib/ruby/2.4.0/csv.rb.orig	2017-01-23 11:55:00.000000000 +0900
+++ ~/.rbenv/versions/2.4.0/lib/ruby/2.4.0/csv.rb	2017-01-23 11:55:05.000000000 +0900
@@ -1923,6 +1923,7 @@
       csv[-1][-1] = @row_sep if in_extended_col
 
       if in_extended_col
+        p csv.last, csv.last.size
         # if we're at eof?(), a quoted field wasn't closed...
         if @io.eof?
           raise MalformedCSVError,

```

文字列ではなく配列で保持する様になり、その要素数で比較しているという事だろうか。

```
$ ruby test.rb
["a", "b"]
["", "\n"]
2
["", "\n", "1", "\n"]
4
~/.rbenv/versions/2.4.0/lib/ruby/2.4.0/csv.rb:1932:in `block in shift': Field size exceeded on line 2. (CSV::MalformedCSVError)
        from ~/.rbenv/versions/2.4.0/lib/ruby/2.4.0/csv.rb:1828:in `loop'
        from ~/.rbenv/versions/2.4.0/lib/ruby/2.4.0/csv.rb:1828:in `shift'
        from ~/.rbenv/versions/2.4.0/lib/ruby/2.4.0/csv.rb:1770:in `each'
        from test.rb:3:in `<main>'
```

取り急ぎ、メモ。


### 追記

(日本語ながら)ひとまず報告をしてみた。

- [Bug #13149: Ruby 2.4.0 の CSV の field_size_limit オプションで先読み文字数を制限できない - Ruby trunk - Ruby Issue Tracking System](https://bugs.ruby-lang.org/issues/13149?next_issue_id=13148)

### 追記２

修正されました。
CSSでやるselectのカスタマイズ2017　～レスポンシブも～

![select.png](https://qiita-image-store.s3.amazonaws.com/0/68480/c4ee39e0-c7b7-3a6f-4f6f-3f70ec383700.png)


こういうの、頻出するのでメモがてら。

## 対応ブラウザ

* IE10～
* 泥標準未確認
* chrome/firefox最新


## コード

```html:html
<div class="selectWrap">
	<select name="" id="">
		<option value="">001</option>
		<option value="">002</option>
		<option value="">003</option>
	</select>
</div>
```

```css:css
select{
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
	padding: 0;
	margin: 0;
	height: 30px;
	background: transparent;
	position: relative;
	z-index: 1;
	padding: 0 40px 0 10px;
	border: 1px solid #ccc;
}
select::-ms-expand {
	display: none;
}
.selectWrap{
	position: relative;
	display: inline-block;
}
.selectWrap::before{
	content: '';
	position: absolute;
	z-index: 0;
	top: 0;
	right: 0;
	background: #ccc;
	height: 100%;
	width: 30px;
}
.selectWrap::after{
	content: '';
	position: absolute;
	z-index: 0;
	top: 0;
	bottom: 0;
	margin: auto 0;
	right: 9px;
	width: 0;
	height: 0;
	border-style: solid;
	border-width: 6px 6px 0 6px;
	border-color: #fff transparent transparent transparent; 
}
```

## ざっとした解説

```css:css
select{
				-webkit-appearance: none;
				-moz-appearance: none;
				appearance: none;
}
select::-ms-expand {
				display: none;
}
```

で右の三角形を非表示にできる。
以前はfirefox対応に難があったが今の最新版は大丈夫。

非表示にした三角形のかわりに::afterや::beforeでデザインされた三角形を挿入したいところだがselectには::before/::afterが通らない。
代替手段としてselectを包む.selectWrapから::beforeを挿入する。

挿入された要素はselectに重なっているだけなのでクリック判定が無い。
対応としてselectもposition:relativeにしてz-indexを調整し、selectが再前面に来るようにしてやる。
デフォルトだとselectにbackgroundが入っていて三角形が見えなくなってしまうので、background:transparentで背景色を透明にすると矢印が見えるようになる。
borderとかはお好みで。

重ねた三角形の上に文字が重ならないよう、selectのpaddingを調整。

以上でいける。

SP環境でpointer-eventsが通らないため背景を透明色にした上でその裏に配置という力業を使っているが、PCだけならselectWrap::afterとselectWrap::beforeにpointer-events: none;を設定することで手間を減らせる。
Windows で Deis CLI を使う

# 前口上

複数の Web アプリをチーム開発しなければいけなかったり，開発対象がマイクロサービスの塊だったりするとき， Deis は便利に使える Micro PaaS です。v2.0 以降は Kubernetes を基盤にしているので，インストールも運用も簡単になりました。

しかし，どういうわけか日本で広まっているようには見えません。なんでかなーと思っていたのですが，日本語情報が少ない上に[本稿執筆時点の公式ページのクライアント(Deis Client : 以下 Workflow CLI)インストール方法に OSX と Linux での記述しか無い](https://www.deis.com/docs/workflow/quickstart/install-cli-tools/) からではと思い至りました。企業ユースだと Windows に対応できないのでは困りますよね。

しかしながら，[Workflow CLI は go で書かれていて](https://github.com/deis/workflow-cli) Windows 版のバイナリもあります。

本稿では，Windows10 (64bit)上に Workflow CLI をインストールして，Deis Workflow のアカウントを発行し，ログインし，アプリケーションを作成するところまでを擬似ハンズオンしてみます。

# 準備

本稿では Deis Workflow そのものは Kubernetes 上にデプロイ済みであると仮定します。Deis Workflow のインストールは，インフラ担当にお願いしてみてください。 

デプロイ済みの Deis Workflow は，下記の URL を介して deis-controller にアクセス可能であるとします。URL は，読者の環境に併せて適宜読み替えてください。

http://deis.example.com/

# 作業

## Workflow CLI のインストール

[公式の README](https://github.com/deis/workflow-cli/blob/master/README.md) に書いてあるとおりです。

```
powershell -NoProfile -ExecutionPolicy Bypass -Command "(new-object net.webclient).DownloadFile('https://storage.googleapis.com/workflow-cli-release/deis-stable-windows-amd64.exe', 'deis.exe')"
```

ここで注意なのですが， PowerShell ISE から実行すると deis.exe が期待通りに動作しません。
(ISE でないほうの) PowerShell か cmd.exe を使ったほうがよいです。

## 自ユーザ登録

deis-controller の URL を引数に指定して，自ユーザ登録を行います。

```
.\deis.exe register http://deis.example.com/
```

ユーザ名，パスワード，パスワード(再確認)，メールアドレスを入力します。

![ユーザ登録のスクリーンショット](https://qiita-image-store.s3.amazonaws.com/0/5414/afb852f0-c725-77d7-7b24-d1211e3e0af0.png)

## このあとは

```
.\deis.exe help
```

などしてみてください。コマンド体系は Heroku とほとんど一緒です。
「Deis は」などではなく「heroku cli は」辺りでググったほうが素早く日本語での解説情報を得られるかもしれません。[^1]

[^1]: こんなに似せちゃって訴えられたりしないのかなと不安になってくるくらい，Heroku CLI に似ています。

ですが，敢えて一つだけ大事なことを。logout したあとの再ログインや上記ユーザ登録したマシン以外でログインしたい場合には，下記のように login コマンドを発行します。

```
.\deis.exe login http://deis.example.com/
```


ユーザ名とパスワードを聞かれますので，登録したのと同じものを入力してください。
Cognos BI & AnalyticsとLDAP接続を構成時に知っておくべき知識

Cognos BI & AnalyticsでLDAP接続をセットアップする際に、前提として理解しておいた方が良い情報をまとめました。
今回は、LDAPとしてApacheDSを例として説明していますが、他の一般的なLDAPであれば考え方や確認箇所は同じですので、LDAP使用時には是非ご参考にしてください。


##Cognos Configurationのネームスペースでの指定箇所
Cognos Configurationのネームスペースで指定する、以下の7箇所がLDAPのどこに結びつくのかを説明します。
①基本識別名
②ユーザー検索、外部IDマッピング
③バインド・ユーザーDNとパスワード
④フォルダー・マッピングのオブジェクト・クラス、名前
⑤グループ・マッピングのオブジェクト・クラス
⑥グループ・マッピングのメンバー
⑦アカウント・マッピングのアカウント・オブジェクト・クラス
![006.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/bc8cc796-24b5-9d37-92c9-6ee410f57698.png)


##LDAPでの指定箇所
**①基本識別名**
設定値：dc=example,dc=com

ユーザー情報の検索を行う、ツリーの層を指定します。
ユーザー検索する場合、ここの場所より下の階層を検索する、という指定です。
今回の場合、dc=example,dc=comの下に様々なouが存在し、ログイン用ユーザー(ou=CognosUsers配下)のみならず、バインド用ユーザー(ou=systemの下のuid=admin)も検索対象なので、両方のouの上の階層のこの場所が基本識別名になります。
例えば、バインド用ユーザーもou=CognosUsers配下の場合、基本識別名は ou=CognosUsers,dc=example,dc=com で大丈夫という事になります。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/92b3545c-c0d1-1ef9-05de-c4efcb8dc92f.png)



**②ユーザー検索、外部IDマッピング**
設定値：ユーザー検索：(uid=\${userID})、外部IDマッピング：(uid=\${environment("REMOTE_USER")})

ログインに使用するユーザーの、この属性を確認してuid という文字を使用しています。
一般的には cn か uid の指定になります。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/aa71710d-e6a9-38f3-90f9-0066ea4c7c1b.png)



**③バインド・ユーザーDNとパスワード**
設定値：ユーザーID：uid=admin,ou=system

全ユーザーを参照する権限を持ったユーザーを指定します。
基本識別名まで含めて指定する必要はありません。
![005.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/a1dd3d63-2502-0607-1c5c-5773c37e3337.png)


**④フォルダー・マッピングのオブジェクト・クラス、名前**
設定値：オブジェクト・クラス：organizationalunit、名前：ou

LDAPツリーの階層構造を作っているオブジェクトのオブジェクト・クラスと名前を指定します。
一般的には、このorganizationalunit と ou になります。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/e40b816c-85bb-d04d-65ae-ac28c1ae89f9.png)


**⑤グループ・マッピングのオブジェクト・クラス**
設定値：オブジェクト・クラス：groupofuniquenames

グループとして使用するオブジェクトの、オブジェクト・クラスを指定します。
一般的には、groupofuniquenames か groupofnames が使われます。
時々、④で説明したouをグループとして使用できるかという質問を受けますが、これはCognosではできません。
確かにCognosUsersというouがグループとして扱えると便利なのですが、残念ながらできませんのでご注意ください。
![004.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/e74ee1da-731c-e894-e5e7-6d7af95fff43.png)


**⑥グループ・マッピングのメンバー**
設定値：メンバー：uniquemember

グループに所属するユーザーを指定する属性名を記載します。
一般的には、uniquemember か member になります。
ここの指定がずれているだけで、Cognosへのログインができなくなりますのでご注意ください。
![0042.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/fdc9006c-7633-7c17-6bd3-9e7a442e565f.png)


**⑦アカウント・マッピングのアカウント・オブジェクト・クラス**
設定値：オブジェクト・クラス：inetorgperson

ログインユーザーのオブジェクト・クラスを指定します。
ユーザーのEメールやロケールなどの属性は、適宜このアカウント・マッピングの下にある属性で行います。
Cognosデフォルトに無い属性は、一番したのカスタム・プロパティで作成できます。
![007.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/8b2ee422-3d5b-cb3b-6d7b-30ce24e45fb0.png)
webpack v1からv2への以降作業 簡易まとめ

公式に、手順書でてた。

[Migrating from v1 to v2](https://webpack.js.org/guides/migrating/)

## アップデート
とりあえず、アップデート

`npm install --save-dev webpack@2.2.0`


## 修正箇所

- `debug`, `eslint`の設定削除
- loaders -> rules
- preLoaders -> rules.enforce
- `loader: css`が `loader: css-loader`と省略不可に
- json-loader消した
- DedupePlugin消した
- `resolve: {'', 'js', 'jsx'}` -> `resolve: {'js', 'jsx'}`

```diff
diff --git a/webpack.config.babel.js b/webpack.config.babel.js
index f5cbd1a..8ae3f3a 100644
--- a/webpack.config.babel.js
+++ b/webpack.config.babel.js
@@ -1,5 +1,4 @@
 module.exports = {
   cache: true,
-  debug: true,
   devtool: 'inline-source-map',
 };
@@ -22,15 +22,12 @@ const common = {
     headers: { 'Access-Control-Allow-Origin': '*' },
   },
   module: {
-    preLoaders: [
-      { test: /\.jsx?$/, exclude: /node_modules/, loader: 'eslint' },
-    ],
-    loaders: [
-      { test: /\.jsx?$/, exclude: /node_modules/, loaders: ['react-hot-loader/webpack', 'babel'] },
-      { test: /\.css$/, loaders: ['style', 'css'] },
-      { test: /\.json/, loader: 'json' },
-      { test: /\.(eot|ttf|woff|woff2)$/, loader: 'file?name=material-design-icons/iconfont/[name].[ext]' },
-      { test: /\.(jpe?g|png|gif|svg)$/, loader: 'url?limit=10000' },
+    rules: [
+      { test: /\.jsx?$/, enforce: 'pre', exclude: /node_modules/, loader: 'eslint-loader' },
+      { test: /\.jsx?$/, exclude: /node_modules/, use: ['react-hot-loader/webpack', 'babel-loader'] },
+      { test: /\.css$/, use: ['style-loader', 'css-loader'] },
+      { test: /\.(eot|ttf|woff|woff2)$/, loader: 'file-loader?name=material-design-icons/iconfont/[name].[ext]' },
+      { test: /\.(jpe?g|png|gif|svg)$/, loader: 'url-loader?limit=10000' },
     ],
   },
   stats: {
@@ -54,10 +51,7 @@ const common = {
     }),
   ],
   resolve: {
-    extensions: ['', '.js', '.jsx'],
-  },
-  eslint: {
-    configFile: './.eslintrc',
+    extensions: ['.js', '.jsx'],
   },
 };
```


とりあえず、これで動いた。
プラグインまわりも変わってるので合わせて見直す必要あり。
Riot.js+Webpackの構成

ReactにつづいてRiotも少し触ってみたので備忘録です。

## とりあえず環境作りから

```js:package.json
{
  "name": "asset",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.babel.js",
  "scripts": {
    "watch": "webpack --watch --progress"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.22.1",
    "babel-loader": "^6.2.10",
    "babel-preset-es2015": "^6.22.0",
    "babel-preset-es2015-riot": "^1.1.0",
    "riotjs-loader": "^4.0.0",
    "webpack": "^1.14.0"
  },
  "dependencies": {
    "riot": "^3.0.7"
  }
}
```

### パッケージ

まずはBabelのコンパイラとローダーを追加

```bash
$ npm install --save-dev babel-core babel-loader
```

ES2015で記述したいのでpresetsを追加

```bash
$ npm install --save-dev babel-preset-es2015 babel-preset-es2015-riot
```

WebpackでRiot.jsを使うためのローダーを追加

```bash
$ npm install --save-dev riotjs-loader
```

最後にRiot.js本体

```bash
$ npm install --save riot
```

### Webpack構成ファイル

まずは基本に忠実に...
https://github.com/esnunes/riotjs-loader

```js:webpack.config.babel.js
import path from 'path';
import webpack from 'webpack';

export default [
	{
		context: path.join(__dirname, './js'),
		entry: {
			app: './app.js'
		},
		output: {
			path: path.join(__dirname, '../js'),
			filename: '[name].js'
		},
		module: {
            preLoaders: [
                {
                    test: /\.tag$/,
                    exclude: /node_modules/,
                    loader: 'riotjs-loader'
                }
            ],
			loaders: [
				{
					test: /\.js[x]?$|\.tag$/,
					exclude: /node_modules/,
					loader: 'babel-loader'
				}
			]
		},
		resolve: {
			extensions: ['', '.js', '.tag']
		},
        plugins: [
            new webpack.ProvidePlugin({
                riot: 'riot'
            })
        ]
	}
]
```

上記はbabelで書いてあるので.babelrcも準備しておきます。

```bash:.babelrc
{
    "presets": [ "es2015", "es2015-riot" ]
}
```


## カウントアップするだけのアプリケーション

実際に作ったサンプルを。

ディレクトリ構成

```
- countapp
	- index.html
	- js
		- app.js
	- asset
		- package.json
		- webpack.config.babel.js
		- .babelrc
		- js
			- app.js
		- tag
			- count.tag
```


```html:index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <count></count>
    <script src="js/app.js"></script>
</body>
</html>
```

```js:asset/js/app.js
import count from '../tag/count'
riot.mount('count')
```

```js:asset/tag/count.tag
<count>
	<p>カウント: { count }</p>
	<button onclick={ add }>+</button>
	<button onclick={ minus }>-</button>
	<script>
		this.count = 0;
		add() {
			this.count += 1;
		}
		minus() {
			this.count -= 1;
		}
	</script>
</count>
```

単純にカウントアップするだけですがあとは`npm run watch`でwebpackを起動すればOKです。
まだまださわりはじめたばかりですのでぼちぼちとやっていきます。
[Tips]表示されているメニューにActiveクラスを自動的に付与する方法


例えば下記のような構造のHTMLがあったとして、`menu-a.html`を現在開いているとしたら自動で`.active`を追加する。

```html
<ul class="nav nav-pills nav-fill">
	<li class="nav-item"><a class="nav-link" href="./menu-a.html">MenuA</a></li>
	<li class="nav-item"><a class="nav-link" href="./menu-b.html">MenuB</a></li>
	<li class="nav-item"><a class="nav-link" href="./menu-c.html">MenuC</a></li>
</ul>
```


```javascript
  document.addEventListener('DOMContentLoaded', function() {
    var filename = location.href.match(".+/(.+?)\.[a-z]+([\?#;].*)?$")[1];
    $('a[href*="' + filename + '"]').addClass('active');
  });
```

## 参考

- [URLからファイル名を取得する正規表現](http://qiita.com/gorton@github/items/ded2d128ded9c9f732e8)
ESLint v3.14.0

前 [v3.13.0] | 次 [v3.15.0]

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">ESLint v3.14.0 has been released: <a href="https://t.co/qHpl5QfSuy">https://t.co/qHpl5QfSuy</a></p>&mdash; ESLint (@geteslint) <a href="https://twitter.com/geteslint/status/822558975015223297">2017年1月20日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

ESLint 3.14.0 がリリースされました。
いくつかの機能追加・バグ修正が行われています。

質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。

- :globe_with_meridians: [日本語 Issue 管理リポジトリ](https://github.com/eslint/eslint-jp)
- :speech_balloon: [日本語サポート チャット](https://gitter.im/eslint/eslint-jp)
- :globe_with_meridians: [本家リポジトリ](https://github.com/eslint/eslint)
- :speech_balloon: [本家サポート チャット](https://gitter.im/eslint/eslint)

----

# :bulb: 新しいルール

## [#6424]: [no-multi-assign]

複数の代入式を連鎖させる書き方を禁止するスタイル・ルールです。

```js:例
/*eslint no-multi-assign: error */

//✔ GOOD
const foo = a
const bar = a

//✘ BAD
const foo = bar = a
```

## [#7685]: [prefer-promise-reject-errors]

明らかに `Error` 以外の値を渡して `Promise` を失敗状態にする事を禁止するルールです。
[no-throw-literal] ルールの `Promise` バージョンです。

```js:例
/*eslint prefer-promise-reject-errors: error */

//✔ GOOD
new Promise((resolve, reject) => {
    const err = new Error("failed")
    reject(err)
})
Promise.reject(new Error("failed"))

//✘ BAD
new Promise((resolve, reject) => {
    reject()
})
new Promise((resolve, reject) => {
    reject(666)
})
Promise.reject()
Promise.reject(666)
```

# :wrench: オプションが追加されたルール

## [#7444]: [no-extra-parens] ignoreJSX

JSX 要素を囲む余分なカッコを無視するオプションが追加されました。
全て (`"all"`), 単一行のみ (`"single-line"`), 複数行のみ (`"multi-line"`) の選択肢があります。

```js:例
/*eslint no-extra-parens: [error, {ignoreJSX: "all"}] */

//✔ GOOD
const a = (<div>hello</div>)

//✘ BAD
const a = ("hello")
```

# :pencil: `eslint --fix` をサポートしたルール

## [#7863]: [no-else-return]

```js:例
function foo() {
    if (x) {
        return y;
    } else {
        return z;
    }
}

// ↓↓↓ gets fixed to ↓↓↓

function foo() {
    if (x) {
        return y;
    }
        return z;
}
```

※ 修正後、`indent`ルールの設定に従ってインデントが自動修正されるでしょう。

[v3.13.0]: http://qiita.com/mysticatea/items/c1a4e68266f1f3c021b8
[v3.15.0]: http://qiita.com/mysticatea/items/98e996a608d2271cf1c9
[#6424]: https://github.com/eslint/eslint/issues/6424
[#7444]: https://github.com/eslint/eslint/issues/7444
[#7685]: https://github.com/eslint/eslint/issues/7685
[#7863]: https://github.com/eslint/eslint/issues/7863
[#9999]: https://github.com/eslint/eslint/issues/9999
[no-else-return]: http://eslint.org/docs/rules/no-else-return
[no-extra-parens]: http://eslint.org/docs/rules/no-extra-parens
[no-multi-assign]: http://eslint.org/docs/rules/no-multi-assign
[no-throw-literal]: http://eslint.org/docs/rules/no-throw-literal
[prefer-promise-reject-errors]: http://eslint.org/docs/rules/prefer-promise-reject-errors
[xxxx]: http://eslint.org/docs/rules/xxxx

<!-- 
![JSCS Icon](http://jscs.info/favicon.ico) JSCS 互換ルールです。
-->
ニフティクラウド Computing CLI 用の docker イメージを作ってみた


## 追記 (2019/04/16)

URL も含めもろもろ更新したので、最新情報については下記をご参照ください。

* GitHub: [tily/nifcloud\-computing\-cli\-docker](https://github.com/tily/nifcloud-computing-cli-docker)
* Docker Hub: [tily/nifcloud\-computing\-cli](https://hub.docker.com/r/tily/nifcloud-computing-cli)

## はじめに

調べものをしてて見つけた [aws-cli-docker](https://github.com/sekka1/aws-cli-docker) が便利そうだったので、ニフティクラウド Computing CLI 用の docker イメージを作ってみた。

* [tily/niftycloud\-computing\-cli \- Docker Hub](https://hub.docker.com/r/tily/niftycloud-computing-cli/) ([ソース](https://github.com/tily/niftycloud-computing-cli-docker))

## 使い方

```
$ cat .env
NIFTY_CLOUD_URL=https://west-1.cp.cloud.nifty.com/api/
NIFTY_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
NIFTY_SECRET_KEY=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
$ docker run --env-file .env --rm tily/niftycloud-computing-cli nifty-describe-instances
```

docker さえインストールしてあればどこでもニフティクラウド Computing CLI が使えるようになって便利。

## ハマりポイント等

### docker コンテナ内のロケール設定

最初 Docker コンテナイメージ内のロケールをうまく設定できず、CLI でエラーが発生したときに正常にえらメッセージを表示することができなかった。

```
$ docker run -ti --rm tily/niftycloud-computing-cli nifty-describe-instances
 
A help cannot be displayed. Please check language setting.
$ docker run -e LC_ALL=ja_JP.utf-8 -ti --rm tily/niftycloud-computing-cli nifty-describe-instances
bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.utf-8)
bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.utf-8)
 
A help cannot be displayed. Please check language setting.
```

[Docker: コンテナのlocaleを設定したい \- Qiita](http://qiita.com/suin/items/856bf782d0d295352e51) や [language support \- warning: setlocale: LC\_ALL: cannot change locale \- Ask Ubuntu](http://askubuntu.com/questions/114759/warning-setlocale-lc-all-cannot-change-locale) を参考にして、下記のように Dockerfile に書いたらうまく日本語でエラーメッセージが表示されるようになった。

```
RUN apt-get update && apt-get install -y locales locales-all
RUN locale-gen ja_JP.utf-8
RUN update-locale
ENV LANG ja_JP.utf-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.utf-8
```

### Docker Hub への push のやり方

久しぶりにやったのですっかり忘れていたけど、あまり手間どらずにこんな感じでやったらできた。

```
$ docker build -t tily/niftycloud-computing-cli .
$ docker login
$ docker push tily/niftycloud-computing-cli
```

## 参考資料

* [クラウド CLI（コマンドラインツールについて） \| ニフティクラウド](http://cloud.nifty.com/api/cli/)
* [sekka1/aws\-cli\-docker: Docker container with the AWS CLI](https://github.com/sekka1/aws-cli-docker)
* [language support \- warning: setlocale: LC\_ALL: cannot change locale \- Ask Ubuntu](http://askubuntu.com/questions/114759/warning-setlocale-lc-all-cannot-change-locale)
* [Docker: コンテナのlocaleを設定したい \- Qiita](http://qiita.com/suin/items/856bf782d0d295352e51)
* [docker push \- Docker](https://docs.docker.com/engine/reference/commandline/push/)
sshdのセキュリティ面でやっておきたい設定

#sshについて
従来、ファイル転送にはFTPを用いるのが一般的だった。
しかし、
・認証パスワードが平文
・転送する中身も平文
といった問題があり、昨今では使うことができる場面が限られてくる。
そこで、sshを使って道中の暗号化を図ることにする。
#sFTPとscp、どっちが良いの?
##sFTPのメリット
・転送の中断・再開ができる
・高機能
##scpのメリット
・軽快、高速
・クライアントソフトを使えばフォルダ毎の転送ができる
ここではWinSCPを使ってSCPを使うことにする。
#サーバ側の設定
/etc/ssh/sshd_configを編集する。
##ポートの設定(デフォルト以外のポートを指定)
`Port xxxx`
デフォルトポートの22はブルートフォースアタックに使われるので、とりあえず回避する
##rootでのログインの不許可
`PermitRootLogin no`
ブルートフォースアタックに使わ(略)

#できればやっておきたい公開鍵認証
##公開鍵認証を使用する
`RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys`
##公開鍵認証のみログイン許可
`PasswordAuthentication no`
公開鍵認証でログインできることが確認できてから設定すること

#sshd再起動
`service sshd restart`

#某国からのアタック
テスト用に遊んでたサーバ、ふと思いついて/var/log/をみたら、secureファイルが異様に巨大になってた。中身を確認すると
`Failed password for root from xxx.xxx.xxx.xxx port xxxxx ssh2`
みたいなログが大量に。IPアドレスを調べてみると案の定中国。まあ、踏み台にされている可能性も高いけどね。
上記の設定は終わったけど、念のため.htaccessを使ってIPレベルでのアクセスを拒否しておく。
KUSANAGIのアップデートに失敗したので個別にパッケージをアップデートする

# はじめに
KUSANAGIを使っています。
色々とオールインワンで非常に便利なのですが、アップデートは欠かせません。
アップデートしたところ失敗してしまったので手動で通るように調整しました。

#

アップデートを行ったところ下記のようなエラーがでました。

```bash
$ sudo yum update
(中略)
https://free.nchc.org.tw/fedora-epel/7/x86_64/z/zabbix22-2.2.15-1.el7.x86_64.rpm: [Errno 14] curl#7 - "Failed to connect to 2001:e10:3c00:8::e274: Network is unreachable"
Trying other mirror.


Error downloading packages:
  zabbix22-agent-2.2.15-1.el7.x86_64: [Errno 256] No more mirrors to try.
  zabbix22-2.2.15-1.el7.x86_64: [Errno 256] No more mirrors to try.
```

<img width="561" alt="Screen Shot 2017-01-23 at 10.40.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/47327/bd0e3e46-60b4-1cd4-7cc8-423baa08ed34.png">


どうやらzabbixのパッケージファイルが見つからず、404になっているようです。
このzabbixはざびたんで有名なサーバ監視ツールで、KUSANAGIはZabbixに依存しているようです。

ZabbixのパッケージファイルがみつからないためにKUSANAGIも更新できません。
現在のサーバではZabbixを使っていませんので、依存を無視してKUSANAGIを更新します。

下記の通り、`--exclude`オプションと`--skip-broken`オプションを使うとうまく通りました。

```bash
$ sudo yum update kusanagi --exclude=zabbix22 --exclude=zabbix20 --skip-broken
```

> http://serverfault.com/questions/381018/tell-yum-to-ignore-a-single-dependency

ひとまず今回はこれで通しておいて、後日Zabbixのアップデートを行いたいと思います。
Rails: query_dietを使ってリクエスト内で発行されたSQLの数、所要時間を表示する

# やりたいこと

ActiveRecordを使っていると、気が付かないうちに大量のクエリが発行されて重くなっていることがあるので、それを防ぎたい。

同様のgemとしてN+1問題を検出するbulletが有名だが、あちらは厳しいし誤判定もあるので、クエリの数と所要時間を確認して判断したい（bulletも設定しだいで希望通りになるのかもしれないが、ほんのちょっと使ってみた限り、どうも馴染めなかった）。

# 導入手順

[公式ドキュメント](https://github.com/makandra/query_diet)に書いてある通り、非常にシンプル。

```a/Gemfile
gem 'query_diet', group: :development
```

```app/views/layout/application.html.erb
<body>
  <%= query_diet_widget if Rails.env.development? %>
  <%= yield %>
</body>
```

Bootstrapなんかを使っている場合はcssに下記も追加しておく必要があるかもしれない。

```css
div#query_diet {
  z-index: 999999 !important;
}
```

以上で画面右上にクエリ数/所要時間が表示されるようになる。

![image](https://qiita-image-store.s3.amazonaws.com/0/79394/92e3f2e9-28d4-e5b7-fcf3-ca0640c921b5.png)

## APIなのでhtmlを出力しない場合

この場合はログに出力することにした。
リクエストの最後の適当な場所にこんな風に書くだけ。

```rb
if Rails.env.development?
  msg = "#{QueryDiet::Logger.count} queries / #{QueryDiet::Logger.time} ms"
  Rails.logger.debug(msg)
end
```

# Rails consoleでクエリを数えたい場合は

Rails consoleでメソッドを呼び出し、そのメソッドの中でクエリが何個発行されているか調べたい場合がある。そんなときは次のようにすればよい。

```
# クエリログをクリアする
[1] pry(main)> QueryDiet::Logger.queries.clear
=> []

# メソッドを呼ぶ
[2] pry(main)> MyClass.my_method
=> nil

# クエリ数を調べる
[3] pry(main)> QueryDiet::Logger.count
=> 52
```
クラスタリング　R-package

# Rのクラスタリングパッケージ

個人的な備忘録です。普通のkmeans法で上手くいかなかったときに用いる奴

kernlab　カーネル法が使えるパッケージだがクラスタリングの結果が何故かオブジェクト化されてない・・・orz 
cclust   そこそこ使いやすくconvex clustringまでカバーしている
skmeans  クラスタリングの結果がオブジェクト化されていて使いやすい * slam packageのver依存がある
DBSCAN   同じようにクラスタリングの結果がオブジェクト化されており、空間クラスタリングにはそこそこ使える。ただし距離の調整がやっかい。
mclust   球面クラスターをやるパッケージkernlab使うぐらいならこっちの方がいいと思っている。
svcR   死んでいる

2017/01/23現在
Windowsで共有フォルダのパスの確認

1. `win+x`→ `g` で**コンピュータの管理**を起動する
2. 「コンピュータの管理→システムツール→共有フォルダー→共有」を選択する
3. パスが表示される

# 参考
http://dynabook.com/assistpc/faq/pcdata/003001.htm
エラー対処: InvalidParameterValueException: The role defined for the function cannot be assumed by Lambda.

※エラー対処の備忘録です

## 状況
AWS LambdaをデプロイしていたJenkinsジョブが落ちるようになった。
原因は以下のエラー。

```
Error: function NotifyEvent: InvalidParameterValueException: The role defined for the function cannot be assumed by Lambda.
```

## 原因
不明

## 対処方法
Jenkinsワークスペースのクリア後に実行すると解決。
Lambda関数のコードというよりは、実行環境依存の可能性が大きい。
時間の都合上、頻繁に再現するようならまた調査する。

## 参考リンク
http://stackoverflow.com/questions/36419442/the-role-defined-for-the-function-cannot-be-assumed-by-lambda
ESLintの--fixオプションの動作の話の続き

元記事：[ESLintの--fixはソースを破壊する！本当？？](http://qiita.com/uk-taniyama/items/a84034e16835e5e63c25)

## 背景

- Atomで、linter-eslintを使っている。
- linter-eslintでは、保存時のautofixを使っている。(インデントがグダっていても平気！スイスイかける！！)
- コード書いたらガンガン保存。
- コードの記述は「条件チェックでreturn;残りは後で！」って感じで、わかることを書いてあっちこっちに行くスタイル。

というわけで、編集中には、次のようなコードがガンガン存在！で保存されて、eslint --fixが走って、return;が吹っ飛ぶ......

```
function foo(key) {
  var value = map[key];
  if(!value){
    return;
  }
  // do something....
}
```

## その後

理由がわからなかったので、パニックになりつつ、コードが消えるのが不快だったので、ESLintの[issue#7955](https://github.com/eslint/eslint/issues/7955)でお問い合わせをしてみた。
→「後ろのコードと一緒だから、とった。当然！」(ざっくり)とのこと。
→「そうだね......でも、困るケースもあるんだけど？？」とお願いしてみた。
→喧々諤々検討してくれています。

## コメント

- 確かに、linterだから、正しくするのが使命だよね。
- でも、fixにもレベルがあっていいとは思う。
- でも、あまりにも複雑な指定だと誰も使えないよね。
- 個人的には、fix-lebel(仮)を追加でseverityまたは、meta.fixableで制御がベターな気がする。
- でも、あと、ユーザがruleベースでの切り替えって口も用意されているといい気がする。
- severityは、確かに正しくはない。でも、複雑化を考えると落としどころなのかも。

## おまけ

ということで、ざっくりコーディングしてみた。(https://github.com/uk-taniyama/eslint,https://github.com/uk-taniyama/eslint/issues/1)
＃あれ？mainブランチに入れちゃっている......ブランチ作って、checkoutし忘れ、そのままpush......
英語書けないんでつらい......
Docker for macのディスク容量を小さくしたい

# Docker肥大化対応

Docker for macは気がつくとディスク容量がすごく消費されているという状況になってしまいますが、つい先日Docker for macのベータに降ってきた内容が正式版に入ったら、この問題も解決しそう。
ベータに降ってきた内容としては
"Reclaim disk size on reboot"
という事で、再起動でディスクの再利用出来る所を使えるようにする、という感じですかね。

という事で、試してみました。

この"Reclaim disk size on reboot"周りの主な対応内容としては、VM内のdfを表示するコマンド(docker system df)と、お掃除用のコマンド(docker system prune)が追加になったといった感じでしょうか。

# 新たに追加になるコマンド(一部抜粋)

* df  
  Show docker disk usage
* events  
  Get real time events from the server
* info  
  Display system-wide information
* prune  
  Remove unused data

# 試してみる

## df

```
$> docker system df
```

というコマンドで、今現在のVM内のディスク使用状況が以下のように表示出来ます。

```
$> docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              25                  10                  8.896 GB            -1.309e+08 B (-1%)
Containers          26                  2                   1.844 GB            1.844 GB (99%)
Local Volumes       49                  10                  3.2 GB              2.761 GB (86%)
```

RECLAIMABLEという列が、再利用可能な容量、といったところでしょうか。
※少しバグってますが。。

## prune

```
$> docker system prune
```

```
WARNING! This will remove:
	- all stopped containers
	- all volumes not used by at least one container
	- all networks not used by at least one container
	- all dangling images
Are you sure you want to continue? [y/N] y
```

このような確認事項が表示されて

[y]を選択すると処理が始まります。

```
Deleted Containers:
(省略)

Deleted Networks:
(省略)

Deleted Images:
(省略)

Total reclaimed space: 5.743 GB
```

という感じにログが表示され、5.743 GB空いたようです。

prune後にDockerを再起動します。

※メニューからrestartを選択すると再起動します。

起動したら、先ほどのdfで確認してみます。

```shell
$> docker system df
```

```
$> docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              20                  1                   8.138 GB            7.876 GB (96%)
Containers          2                   2                   125 B               0 B (0%)
Local Volumes       2                   2                   59.5 MB             0 B (0%)
```

再利用化出来たようです。

実際のVMのサイズの変化は

prune実行前は

```
-rw-r--r--  1 hoge staff  26539524096  1 23 09:54 Docker.qcow2
```
という巨大なVMになってしまっています。

prune実行後は

```
-rw-r--r--  1 hoge staff  18188664832  1 23 09:55 Docker.qcow2
```

約8GBほど縮小されたようです。

# 感想

これが正式版に入れば、VMのコンソールに入ったり

ディスクの変換をかけたりする必要がなくなり、dockerのコマンドで解消出来るので良さそうです。

# 参考

- https://gendosu.jp/archives/3033
HV9961Tips

# HV9961とは

HV9961はSupertexのLEDドライバ。高品位のLED照明作るのに便利。

# LEDを照明に使うには？
LEDって2.2Vとか3.3Vとかで動くんだけど、照明用として使うにはコンセントで動かすことになる。100Vとか220VのACを電源とするので、こういうのを使うと3.3Vを作ることができる。

http://akizukidenshi.com/catalog/g/gM-02212/

これは2A出力なのだけれども、これで賄うことができるだろうか？　まず、LEDが何個必要だろう？

LEDは電子工作に使うような普通のものは20mAぐらい。白色LEDの場合は、20mAで220mCd（カンデラ）の明るさだけど、これはインジケーターとかに使えるけれどもものを照らす明かりとしては使えない。これが普通のLEDではなく、超高輝度と言われているようなものだと20〜30Cdになる。これだと、まあものを照らすことができる程度。
#ルーメンで計算


ただ光の角度が15°しかないので、0.1lm(ルーメン)程度しかない。

照明電球として使うには最低500lmぐらいないといけない。500lmあったとしても40W電球相当。40W電球は照明として使えないこともないけれども、まあちょっと暗くてもいいかな、というようなところに使うようなもの。まともな照明として使うには60W電球とか100W電球ぐらい欲しいので、800lmとか1300lmとか必要。

となると0.1lmの素子を使うと8000個とか13000個の素子が必要になる。これはちょっとアレなので、ちゃんと照明用の素子を使うようにしよう。

# 1W級のLEDを使う

こういうのは1W級。
http://akizukidenshi.com/catalog/g/gI-10368/
これ１つで100~130lm出る。6つで800lmぐらいで考えてみよう。

350mAなので6つで2160mAとなる。

先のACアダプタは2A級なので、ちょっと足りない。大容量の電源装置を使うと値段や大きさ、重さがバカにならない。LEDの素子自体は小さくて軽いのに、結局普通の電球よりも大きく重くなってしまうわけだ。

なんかアホらしいのだけれど、そこに救世主が！！ HV9961はACアダプタ無しで動かすことができる。

# Web上の資料

pdfはこちら
http://ww1.microchip.com/downloads/en/DeviceDoc/hv9961.pdf

実は、いきなり救世主が出てきたわけではなく、同じようなチップは前からあった。HV9910B というのがそれ。HV9961はそれから進化したチップ。

Web上にいろんな資料がある。日本語の情報はなかなか無いが、何故かウクライナがアツい。
http://www.eltis.ua/info/720/10902

HV9910BとHV9961の違いはこちらにまとまっている。
http://ww1.microchip.com/downloads/cn/AppNotes/AN-H64.pdf

# 使い方
LEDは100Vに直接つなげるのではなく、ブリッジダイオードを経由して全波整流し、ある程度平滑化したものをつなげる。最大144Vの電圧がLEDにかかるようになる。

当然ながら、普通にそんなことをすると壊れるので、一瞬だけLEDにかけて、しばらくOFFにする。


RTはオフタイマーを規定する。
TOFF （μs）= (RT（kΩ）/25 )+ 0.3

一般には20uSにすることが多いようだ。

また、コイルを使って直接掛からないようにする。

# 平滑化のテクニック

ブリッジダイオードの全波整流波形はコンデンサを使って平滑化する。コンデンサは交流に対しては抵抗として働き、インピーダンスという。は1/(2πCf)で計算できる。コンデンサに15μFの電解コンデンサを使った場合、インピーダンスは107Ω。

20Vで350mAの場合、うまく設計して実効値100Vで動いたとなると70mAだから1.4kΩぐらいになる。

なので交流の分圧で0.07=107Ω/(107Ω+1.4kΩ)
ということで、リップル率は7%になる。

ちなみに、LED電球はPSEの規定がある。ちらつきのあるのはアウト。

JISC8158によると、
繰り返し周波数が100Hz以上で光出力に欠落部がない 又は 繰り返し周波数が500Hz以上 のものは
「ちらつきを感じないもの」だそうだ。
光出力に欠落というのは、明るい時に比べ暗い時が5%以下になる時ということだ。

リップル率が7%ということは、明るい時に比べ暗い時が93%と考えていい。

また、人間の視力感度的にもリップル率7%ぐらいならOK.

# VIN

LEDの電源はACを整流平滑したので使えるが、それをそのままHV9961の電源となる。便利！

# VDD

ここから、外部のマイコンなどを動かすための電源が取れる。
とはいえRaspberryPiが使えるぐらい流せるわけではないので注意。
またVDDを含め、HV9961自体で使う電流が多くなるとVINの最大電圧が低くなるので注意。

# CSで
RCSで電流の値を決める。

ILED =0.275V/ RCS

もし、  VLD ≥ 1.5V　の場合は

ILED =(VLD • 0.185)/RCS

電流350mAにするときは、RCSは0.785Ωとなる。1Ωと3Ωを並列にすると0.75Ω,1Ωと4Ωで0.8Ωとなるのでココらへんを使えばいい。


# インダクタ
30~40%でリップルするとして、

L O = V O（MAX） •T OFF/ 0.4•I O

Vo(MAX)=60V、
Io=350mAなので、
Lo=8.5mHとなる。

# LD

ココにアナログ値をかけると出力電流を規定できる。
1.5Vを越すと100%出力となる。
普通はVDDに抵抗を通してつなげておく。

#PWMD
マイコンからのPWM制御するときのピン。使わない時はGNDに落としておく


# トラブルシューティング
## 一瞬光って消える

RTの抵抗が断線


## CheckPoint

### 1番ピン
VIN 電源電圧 8V-45V

### 2番ピン または FETのSource
CS
シャント抵抗の電圧がここにかかる。
 上限0.275V

### 3番ピン
GND

### 4番ピン
GATE ONになっているときはHigh


### 5番ピン
PWMD
ONにするにはHighになっていないといけない

### 6番ピン
VDD
正常なら7.5Vが出力されているはず。

### 7番ピン
LD
アナログ制御していない場合はHighにしておかなければならない

### 8番ピン
RT