OmniAICreator/Qiita-1.07M huggingface dataset:
Amazon Elastic Cacheの概要

ElasticCacheに関する基本的な内容をまとめてみたものです。ElasticCacheに関する、Web上にすでにある解説コンテンツをまとめたサイトの抜粋です。
[Elastic Cacheの概要] (https://www.techcrowd.jp/elasticcache/summary-4/)

# [MemcachedとRedisのプロトコルに準拠] (https://www.techcrowd.jp/elasticcache/summary-4/)

Amazon ElastiCacheは、サーバーノードのデプロイと実行がクラウド内で実行できるサービスです。
ディスクベースのデータベースを使用せずに高速のメモリ内のキャッシュを使うことで、WEBアプリケーションの向上を図ります。

Amazon ElastiCacheは、KVS型のnoSQLであるMemcachedとRedisのプロトコルに準拠しているので、幅広い用途に使うことができます。
インメモリキャッシュエンジンであるMemchaedとRedisをサポートしていますので、WEBアプリケーションの構成や用途に応じて、RedShiftを導入することが可能です。

# [メモリキャッシングとは] (https://www.techcrowd.jp/elasticcache/summary-4/)

メモリキャッシングとはメモリ内にデータを格納することで、データへのアクセス時間を短縮する技術です。アクセス時間を短くすることで、WEBアプリケーションのパフォーマンスを向上させることができます。

ElasticCacheのメモリ内キャッシュを使うことで、ソーシャルネットワーキングやゲームなどのWEBアプリケーションの付加を減らすことが可能です。


# [キャッシュノードタイプとキャッシュサイズ] (https://www.techcrowd.jp/elasticcache/summary-4/)

キャッシュノードタイプとキャッシュサイズ

Amazon ElastiCache は、
cache.m3.medium: 2.78 GB
cache.m3.large: 6.05 GB
cache.m3.xlarge: 13.3 GB
cache.m3.2xlarge: 27.9 GB
cache.r3.large: 13.5 GB
などの現行世代のキャッシュノードと、

cache.m1.small: 1.3 GB
cache.m1.medium: 3.35 GB
cache.m1.large: 7.1 GB
cache.m1.xlarge: 14.6 GB
などの旧世代のキャッシュノードがサポートされています。

各ノードタイプのメモリは、MemcachedとRedisで使用可能な大きさです。


# [Memchaedやredisからの移行について] (https://www.techcrowd.jp/elasticcache/summary-4/)

Memchaedやredisから別の環境に移行する場合でも、移行前のプロトコルがそのまま使える環境であれば、比較的容易に移行することが可能です。
しかし、完全に移行する前に新しい環境で十分にテストを行い、問題なく使用できることを確認する必要があります。

プロトコルの異なる場合は、エンジンのデータ形式やクラスター設定の違いなどに注意して、ツールを使い移行しなくてはなりません。
Linux_ファイルディスクリプタ数の上限

Linux では、同時にオープンすることができるファイルディスクリプタ数が制限されています。
ひとつのプロセス内で多くのファイルオープンをする必要がある場合、この制限に引っかかって、次のようなエラーが起きることがあります。

```
cannot make pipe for process substitution: Too many open files
```

これを回避する方法です。

# どうすればいいのか?
3つの解決策がある（らしい）
1. カーネルヘッダファイル中の `INR_OPEN` の値を書き変えて rebuild する
2. `ulimit -n` を使って、一時的に制限を変更する
3. `/etc/security/limits.conf` の設定を書き変え、制限を変更する

_カーネルの rebuild は大変なので、1. の手段は却下です。_

今回は小さめのシステムであるため、 `/etc/security/limits.conf` を書き変える方向で行きます。

#  `/etc/security/limits.conf` を書き変える
このファイルのフォーマットは次のようになっています。
```
<domain> <type> <item> <value>
```

次のように追記することで、全ユーザが実行するプロセスごとの最大ファイル数が 2048 とすることができます。

```
* soft nofile 2048
* hard nofile 2048
```

PAM認証を通らないとこの設定が適用されない。などなど注意すべきことがありますが、参考記事が詳しいのでそちらを参照してください。


# 参考記事
- [ファイルディスクリプタ数の上限変更とlimits.confの罠](https://staffblog.yumemi.jp/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%82%BF%E6%95%B0%E3%81%AE%E4%B8%8A%E9%99%90%E5%A4%89%E6%9B%B4%E3%81%A8limits-conf%E3%81%AE%E7%BD%A0-2/)
[mac] スクリーンショットの保存先を変更する

## スクリーンショットの保存先変更
デフォルトでの保存先は、デスクトップになっています。
今回は、デスクトップに起きたくないので、`~/MyFiles/Screenshots` に置くように設定します。

1. `MyFiles`内に`Screenshots`フォルダーを作成
2. `Tarminal` を起動して下記のコマンドで、保存先を設定

```Tarminal
$ defaults write com.apple.screencapture location ~/MyFiles/Screenshots
```

## スクリーンショットの保存先をデスクトップに戻す

```Tarminal
$ defaults delete com.apple.screencapture location
```

## 補足
設定が反映されない場合は、下記コマンドで設定を読み込ませてみてください。

```Tarminal
$ killall SystemUIServer
```

Docに追加をすると使いやすいです。
Docへの追加は、`Folder` を Doc にドラックするだけです。
<img width="406" alt="Screen Shot 2017-04-09 at 14.52.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/121224/5fb6d32b-61e6-aee3-753c-b3173de21049.png">

## 参考文献
* https://pc-karuma.net/mac-customize-screencapture-location/
gitkのタグの部分が文字化けしてます。

こんにちは。Git初心者です。

同じく日本語でコメントを入れたが、
コミットの部分はちゃんと表示されていて、
タグの部分は文字化けになってしまいました。

どなたか知恵を貸してください。
よろしくお願いいたします。
お手軽開発環境(Ideone)

本格的には、Visual Studioとかeclipseだとか有るけど、ちょっとコードを試したいだけなのに環境をインストールだとかプロジェクト作成だとか面倒ですよね。
入門者にとっても、まずそこが敷居になるのかなと。

なので、ブラウザとインターネット接続さえあれば使える [Ideone](https://ideone.com/) がお勧め。

ページを開いたところ、
![image](https://qiita-image-store.s3.amazonaws.com/0/120192/4a298272-988b-1927-65b0-cc0b8158511a.png)
左下のＣとなっているところから言語選択が出来る。

![image](https://qiita-image-store.s3.amazonaws.com/0/120192/9df2e9d3-b190-5a57-2ea3-b6706ea74cf3.png)

後は、コードを書いて「Run」を押せばOK！
![image](https://qiita-image-store.s3.amazonaws.com/0/120192/68139b64-fbcd-07ab-091b-486db191cfca.png)
入力が必要であればstdin(input)で設定しておく。
Vim入門者によるVim入門

Viを使いはじめてから約一週間が経過した。                                                                  そのド初心者である自分がVi（もしくはそのクローンであるVim)に関してVi入門者に向けた文章を書こうと思う。
というのも、自分は、先日、オライリーから出ている名著の誉れ高い「入門Vi」を８割くらい読んだのだが、そこで認識を新たにすることがあったためである。

#Viにはモードなど存在しない。
一言で言えば、私がここで書きたいことはこの１行に要約される。
普通のViの解説では、Viにはモードがいくつかあるという説明がされている。ノーマルモード、コマンドモード、入力モード、ビジュアルモードなど。
しかし、私は「入門Vi」を読んでこの説明が間違いだということに気がついた。
私はVi初心者だが、実はViを最初に使ったのはかれこれ２０年位前だろうか。その当時もViの解説はモードの説明からはじまるものが多かった。

だが、これはシンプルなUnix思想で作られただろうViを理解する上で無用にViの理解を複雑にしてしまう説明だ。
私は最初この説明を読んで頭が混乱し、こんな旧式のエディターなど使ってられるかと思った悲しい過去がある。
モードという概念は、もともとは単なる説明の方便だったものが、最初から実在するもののように使われているのだろう。

#Viにはコマンドしかない。
つまり、Viにはモードはなく、コマンドしかないというのが私の結論だ。viの基本アイデアとはテキストの作成編集をすべてコマンドで行うということにある。そう考えれば実にシンプルでUnixらしい。
たとえばViのいわゆる入力モードなるものは、インサートコマンドであり、入力した文字はインサートコマンドの引数のようなものだ。そしてEscキーでインサートコマンドを終了させる。 

だが強いて言えば、Exモードというのはあると言えるかもしれない。
コロン(:)で一番下のラインに入力が移る、コマンドモードとも呼ばれるあれである。 
だが、「入門Vi」を読んで、Exモードというのは、ExエディタをViの内部から起動していることを知った。

#ViとExエディタの関係
「入門Vi」を読むと、ViとはExエディタというラインエディタをスクリーンエディタに発展させたものだと書かれている。
今では、ExはミトコンドリアのようにViに取り込まれ、Viの一部のように使われているが、いわゆるExモードではあくまでExエディタのコマンドが動いている。

今でもExエディタだけを単体で起動させることができる。
ターミナルから
```
$:Ex
```
とタイプすればExエディタ単体で起動する。

さらに、このExエディタからVimを起動することもできる。
```
:vi
```
とすれば、Vimが起動する。

こうしてみると、ExエディタからVimを呼べるように、実はExモード（コマンドモードとも呼ばれる）なるものはVimからExエディタを呼んでいるだけだとわかる。

#実は普通のエディターでもあったVim
多くの入門解説にはなぜか書かれていないが、今のVimは普通のエディターのように使える。
どういうことかというと、いわゆる入力モード（正確にはインサートコマンド実施時）で矢印キーによるカーソル移動が上下左右に自由自在だ。BackspaceキーもDeleteキーも普通に使える。Ctrl-Hのバックスペースも使える。
であれば、メモ帳アプリと同じように使えるということだ。コマンドを忘れても、もしくは最初から何も知らなくても使える。

※）ただし、この場合であっても、いわゆる入力モードに入る方法（インサートコマンドの方法）と、エスケープキーで入力モードを抜ける方法（インサートコマンドを終了させる方法）は最低限しらないといけないだろうけども。

なお、この文章はVimで書いた。しかし、やはりこういう日本語の文章を書く場合は、普通のエディターのほうがずっと楽だと思った次第である。

しかし、Vimの真骨頂は、そのコマンドの組み合わせの自由度にあるのだろう。
C言語のダブルポインタを回避したい

C言語で、ポインタって分かり難いし扱いがやっかいなんで、出来るだけ使わないようにしたいよね。

今時のコンパイラの最適化に頼って添え字アクセスにするとかさ。

```
a[i];
```

で、ポインタのポインタの場合だけど。
例えば、ポインタを構造体のメンバーにすることで、シングルのポインタで扱えるように出来る。

前：

```
void func(int** p)
{
    *p = malloc(10);
}

int main()
{
    int* mem;
    func(&mem);
}
```

後：

```
typedef struct 
{ 
    int *p; 
} A;

void func(A* pVal) 
{
    pVal->p = malloc(10);
}

int main()
{
    A mem;
    func(&mem);
}
```

んー。むしろややこしい？

C++経験者向けには、func()がAクラスのメンバー関数と言った方がいいかな？
funcの第1引数にthisを渡していると理解してもらえれば。
ansible で VirtulaBox 上のゲストOS 間でコマンドが通るようにする

# 前提条件
Vagrant コマンドはなんとなく自分で調べてできる人であり、ansible コマンドもなんとなく自分で調べれる人に対して記述しています。

# やりたいこと
最終的なゴールは ansible コマンドを使って対象のサーバに対して構成管理できるようにしたい

# 事前準備
ゲストOS間で接続ができる状態が存在すること
一応、今回の自分での勉強で作成した内容は下記を参照していただければと思います。
[vagrant で今回ようの環境構築用の設定ファイル](https://github.com/nodokaodayaka/vagrant.git)
[今回やることの設定ファイル](https://github.com/nodokaodayaka/ansible.git)

# やったこと
## ansible コマンドのインストール
$`sudo yum -y install epel-release`
$`sudo yum -y install ansible`

## 対象マシンに ssh できるようにする
$`ssh-keygen -t rsa`
$`ssh-copy-id vagrant@192.168.33.20`

## ansible コマンドで接続確認
$`ansible all -i inventory/hosts -m ping`

```shell-session:結果
192.168.33.20 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}  
```

## おわりに
これで一旦、接続ができるようにはなったはず・・・
今後は、これをもとに、色々な設定を追加していく土台ができたと思います。
Ubuntu 14.04 に Mecab と mecab-python3 をインストール

# 概要

[Mecab](http://taku910.github.io/mecab/)はオープンソースの形態素解析エンジンです。機械学習のための前準備として、日本語の文章を分かち書きにするため利用することができます。Mecab をインストールして Python から利用できるようにするのがこの記事の目標です。

# 環境
- Ubuntu 14.04 64bit
- gcc 4.8.4
- Python 3.5.2 :: Anaconda custom (64-bit)

# インストール手順

## 1. Mecab

[この記事](https://gist.github.com/YoshihitoAso/9048005)を参考にしました。

```bash
$ sudo apt-get install mecab libmecab-dev mecab-ipadic mecab-ipadic-utf8
```
(mecab-ipadic と mecab-ipadic-utf8 の両方が必要なのかよくわかりませんが、とりあえず動いているようです)

`mecab`コマンドを実行して、日本語の文章を入力すると形態素解析の結果を見ることができます。たとえば「安倍晋三首相」と入力した結果は以下のとおりです。

```shell-session
$ mecab
安倍晋三首相
安倍	名詞,固有名詞,人名,姓,*,*,安倍,アベ,アベ
晋	名詞,固有名詞,人名,名,*,*,晋,ススム,ススム
三	名詞,数,*,*,*,*,三,サン,サン
首相	名詞,一般,*,*,*,*,首相,シュショウ,シュショー
EOS

```
「晋三」が正しく解析できていませんね。

## 2. mecab-ipadic-NEologd

デフォルトの IPA 辞書は、固有名詞の解析に弱いようなので、固有名詞やその他の新語を大幅に強化した [mecab-ipadic-NEologd](https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md)という辞書を入れます。

```shell-session
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n -a
```
これをデフォルトの辞書に指定するため、`/etc/mecabrc` を編集して、
```
dicdir = /usr/lib/mecab/dic/mecab-ipadic-neologd
```
とします。

詳しいことは、[公式ドキュメント](https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md)を参照してください。

同じく「安倍晋三首相」を解析してみます。

```shell-session
$ mecab -d                              
安倍晋三首相
安倍晋三首相	名詞,固有名詞,一般,*,*,*,安倍晋三,アベシンゾウシュショウ,アベシンゾウシュショー
EOS
```
今度は正しく固有名詞として認識されています。

## mecab-python3

Python 3 向けの Mecab バインディングを入れます。

```
$ pip install mecab-python3
```
これでOKです。

```python3:mecab-test3
import sys
import MeCab
m = MeCab.Tagger("-Ochasen")
print(m.parse("安倍晋三首相は、国会で施政方針演説を行った。"))
```
実行すると、

```shell-session
$ python mecab-test.py 
安倍晋三首相	アベシンゾウシュショウ	安倍晋三	名詞-固有名詞-一般		
は	ハ	は	助詞-係助詞		
、	、	、	記号-読点		
国会	コッカイ	国会	名詞-一般		
で	デ	で	助詞-格助詞-一般		
施政方針演説	シセイホウシンエンゼツ	施政方針演説	名詞-固有名詞-一般		
を	ヲ	を	助詞-格助詞-一般		
行っ	オコナッ	行う	動詞-自立	五段・ワ行促音便	連用タ接続
た	タ	た	助動詞	特殊・タ	基本形
。	。	。	記号-句点		
EOS
```
となります。

分かち書きにする場合には、

```
m = MeCab.Tagger("-Owakati")
```
とすればよいです。

```python3:mecab-wakati-test.py
import sys
import MeCab
m = MeCab.Tagger("-Owakati")
items = m.parse("安倍晋三首相は、国会で施政方針演説を行った。")
print(items)
print(type(items))
```
実行すると、

```shell-session
$ python mecab-wakati-test.py          
安倍晋三首相 は 、 国会 で 施政方針演説 を 行っ た 。 

<class 'str'>
```
結果は、文字列として返ってくるので、list にしたい場合は、`split()` すればよいようです。
CentOS7 Nagios4構築

# 注意事項
本記事は書きかけのただのメモです。

# インストール

## CentOS7.3
OSインストール省略
epel-release、httpd、php-pecl-apcuインストール省略

## Nagios4
```none
# yum install nagios nagios-plugins-all
# systemctl enable nagios
# systemctl start nagios
# systemctl restart httpd
```

## nrpe
```none
# yum install nrpe nagios-plugins-nrpe
# systemctl enable nrpe
# systemctl start nrpe
```

## pnp4nagios
```none
# yum install pnp4nagios
# systemctl enable npcd
# systemctl start npcd
# systemctl restart httpd
```

bulk_mode_with_npcdで動かす
http://docs.pnp4nagios.org/pnp-0.6/config#bulk_mode_with_npcd

Nagios側設定
https://docs.pnp4nagios.org/pnp-0.6/webfe#nagios_3x
※ホストのaction_urlは
　```action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$```

## rrdcached
以下参考
http://qiita.com/todanano/items/97297ac6652ddefd3695
https://www.andrisoft.com/support/portal/kb/article/speeding-up-ip-graphs-updates-using-rrdcached#redhat7
https://www.agilegroup.co.jp/technote/ganglia-with-rrdcached.html

```/usr/lib/systemd/system/rrdcached.service
[Unit]
Description=rrdcached

[Service]
Restart=always
User=nagios
PermissionsStartOnly=yes
ExecStartPre=/bin/mkdir -p /var/rrdtool/rrdcached/ ; /bin/chown nagios:nagios /var/rrdtool/rrdcached
ExecStart=/usr/bin/rrdcached -l unix:/var/rrdtool/rrdcached/rrdcached.sock -s nagios -m 774 -g -p /var/rrdtool/rrdcached/rrdcached.pid -j /var/rrdtool/rrdcached
ExecStartPost=/bin/sh -c "/bin/sleep 4; /bin/chown nagios:nagios /var/rrdtool/rrdcached/rrdcached.sock ; /bin/chown nagios:nagios /var/rrdtool/rrdcached/rrdcached.pid ; /bin/chmod 770 /var/rrdtool/rrdcached/rrdcached.sock"

[Install]
WantedBy=multi-user.target
```

```none
# systemctl enable rrdcached
# systemctl start rrdcached
```

pnp4nagios側設定
http://docs.pnp4nagios.org/pnp-0.6/rrdcached
LeetCode Weekly Contest 27

週末にはLeetCodeのコンテストが開催されている。最近はアルゴリズムから離れすぎていたので、これからは復習がてら積極的に参加していこうかと思っている。相変わらず厳しさしか感じないのだけど、それでも問題が綺麗に解けるとスッキリする。今回の４題のうち解けたのは最初の２つ。一番最初のeasyのは飛ばして、下記のmediumの方について書いてみる。

[554. Brick Wall](https://leetcode.com/contest/leetcode-weekly-contest-27/problems/brick-wall)

長さの異なるレンガが綺麗に長方形状に並べられている。これを縦に斬るとしたらどこが一番抵抗が少なそうかという問題だ。（違う？）

まぁとりあえず、斬らないといけないレンガの数が列ごとに分かればいいよね。普通にインプットの２次元配列をループで回すけど、次の行に移ったときに、各列の抵抗を覚えておかないといけないから、ハッシュテーブルが便利そう。列の番号をkey、レンガの切れ目数をvalueとしてハッシュテーブル（Pythonではdict）に格納する。それ終われば、レンガ数を計算するのは簡単だ。

```py
class Solution(object):
    def leastBricks(self, wall):
        """
        :type wall: List[List[int]]
        :rtype: int
        """
        d = {}
        for r in wall:
            sum = 0
            for b in r[:-1]:
                sum += b
                if sum not in d:
                    d[sum] = 1
                else:
                    d[sum] += 1
        if d:
            return len(wall) - max(d.values())
        else:
            return len(wall)
```

dictに格納する際の処理はもうちょいエレガントに書けた気がするし、最後の条件分岐のところもあまり美しくない気がする。てゆーかこの辺は関数使わなくてもループの中でも計算できるかも。
Goでtestをシリアル実行する

結構ハマったのでメモ。

Goのテストはパッケージ単位で実行される。
glideを使っている場合、glide novendorでプロジェクト内のvendorディレクトリ以外のパッケージ一覧を返してくれるので

```sh
$ go test $(glide novendor)
```

とすることで、自分が作ったパッケージを全てテストに流すことができる。

ただ、このテストはデフォルトではCPUの数だけパッケージ単位でパラレルで実行される。
自分はテスト内でDBを使用し、データを消したりしていたためたまにテストが失敗するようになってしまった。
シリアルに実行するためには-pオプションを使う

```shell-session
	-p n
		the number of programs, such as build commands or
		test binaries, that can be run in parallel.
		The default is the number of CPUs available.
```

```sh
$ go test -p=1 $(glide novendor)
```

-parallelというオプションがあるが、これはテスト内でt.Parallel関数を使って並列化する時に使うらしい。
Webアプリケーションエンジニアがディープラーニングに挑戦する際にやったこと(Coursera Week10)

# Coursera Week10
## はじめに
CourseraのWeek10を実施しましたので、私のメモを公開します。
Courseraってなんだ？という方は[Week1](http://qiita.com/KirariGlock/items/d41bdcc6f5ec5ad255fb)から御覧ください。

## Learning With Large Datasets
m=1億を超えるようなデータセットの扱いについて。
まずは1億の中から1000件取り出してトレーニングしてみるのも一つの手である。
その判断にクロスバリデーション誤差が使える。

## 確率的最急降下法 Stochastic Gradient Descent
確率的最急降下法を使用すると巨大なトレーニングセットに対してスケールできるようになる。
今まで学習してきた最急降下法の場合、数億のトレーニングセットがある場合でも全件に対して処理を実行するため高コストである。
これをバッチ最急降下法という呼び方をしている。(機械学習屋界隈では。)

復習として線形回帰のコスト関数とバッチ最急降下法の式を示す。
線形回帰のコスト関数
$$
J_{train}(\theta) = \frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})^2
$$
バッチ最急降下法
j=0,,,,,n
$$
\theta_j = \theta_j - \alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}
$$

線形回帰のコスト関数の見方を変更する。
$$
J_{train}(\theta) = \frac{1}{m}\sum_{i=1}^m cost(\theta,(x^{(i)},y^{(i)}))
$$
$$
cost(\theta,(x^{(i)},y^{(i)}))=\frac{1}{2}(h_\theta(x^{(i)}) - y^{(i)})^2
$$

次に確率的最急降下法の手順を示す。
1.データセットをランダムにシャッフルする。
2.m回のforloopの中で以下の処理を実施する。
$\theta_j = \theta_j - \alpha(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$
特徴としては数億件のレコードを全てなめてから結果を出すのではなく、1つずつグローバル最小に進めて行くことになる。
そうすることでバッチ最急降下法より精度が低く、グローバル最小にたどり着いてとどまらずに近くをうろうろすることになる。
ただし、グローバル最小に極めて近い値がわかるので特に問題ではない。

## ミニバッチ最急降下法 Mini-Batch Gradient Descent
バッチ最急降下法は$m$件すべてをなめる。
確率的最急降下法は1件ずつ処理する。
ミニバッチ最急降下法は任意の$b$件のデータをなめる。($b$は大体2~100程度。)
つまりミニバッチ最急降下法はバッチ最急降下法と確率的最急降下法の間を狙う方法である。
$b=10$の場合、10件ずつ増えるforloopの中で以下のような処理を実行する。
$\theta_j = \theta_j - \alpha\frac{1}{10}\sum_{k=i}^{i+9}(h_\theta(x^{(k)})-y^{(k)})x_j^{(k)}$

## 確率的最急降下法の収束のチェック
線形回帰の最急降下法の場合、$\theta$をプロットすることで収束しているかチェックすることができたが、巨大なトレーニングセットではそれはできない。
確率的最急降下法では$cost(\theta,(x^{(i)},y^{(i)}))=\frac{1}{2}(h_\theta(x^{(i)}) - y^{(i)})^2$の値をプロットすることで収束しているか判断する。
プロットしてグラフ化した際に$\theta$が下がってきていればOK。
あまり変化がない場合でも件数を増やすことで実は$\theta$が下がっている場合もある。
明らかに$\theta$が増えている場合は分散しているので$\alpha$を小さくすることで調整する。

もし確率的最急降下法で明確なグローバル最小を求めたい場合、$\alpha$を少しずつ小さくすることで可能である。(少しずつ小さくするチューニングは大変なのであまりやらない。)

## MapReduce
最急降下法を分割して計算する方法。
分割して求めた$\theta$の和とバッチ最急降下法で求めた値は等価である。
分割するメリットは複数のコンピュータに分散して計算することができることである。
複数のコンピュータだけでなく、１つのコンピュータの複数のCPUコアで分割するのもアリ。
Atom環境設定メモ

# EditorConfig
- [手順](https://atom.io/packages/editorconfig)に従ってインストール
- ver1.15.0ではSettingsではなくPreferencesになっていた
- indent_styleをspaceにしても効かなかったので、Preferences>Editorから`Automatic Soft Tabs`のチェックを外した 
- すでに入っていたwhitespaceというパッケージで警告が出ていたのでdisabledに変更

# Terminal plus
- Atomでコマンドを実行するため、インストール
- sierraでまだうまく動かないようなので- [ここ](http://namedpython.hatenablog.com/entry/2017/01/01/192739)を参考にリビルド
- [ここ](http://kianmayne.co.uk/blog/2016/03/solarized-colours-for-terminal-plus-atom-package/)のstyleを貼り付けてterminalのthemeをsolarizedへ
- バックグラウンドはうまく変わってくれないので適当にテーマを`dracula`にして我慢する

# 参考
- [ATOM Editor をそろそろ始めようか](http://qiita.com/spiegel-im-spiegel/items/3d41d98dacc107d73431)
- [Atom内でターミナルコマンド実行する方法](http://tetra-themes.com/atom-terminal-481/)
- [Atomのterminal-plusが動かないトラブル](http://namedpython.hatenablog.com/entry/2017/01/01/192739)
- [Solarized colours for terminal-plus atom package](http://kianmayne.co.uk/blog/2016/03/solarized-colours-for-terminal-plus-atom-package/)
質問する前にググれっていう風潮あるけど、部分から全体の体系を推測するのって難しくないですか

# 質問する前に自分で調べるのは大事だと思うけどつらい
私がプログラム初心者だからということもあると思うけど、よく知らない分野についてグーグルで検索してクリティカルな解答を導き出すのって難しいと思う。
自分が知りたい答えがピンポイントで載っていることの方が少ないと思うし、非ピンポイントの部分的な情報から全体の体系を推測して、問題解決をするのは難しいし、労力がものすごくかかると思う。

# というか部分情報から問題解決できる人ってすでに結構な熟練者なのではないだろうか
だから初心者にまずググってねーと言うのはなんか違うなあと思います。
必要なのはググれと言うことではなく、新人に体系的な教育を施すことなんじゃないかあと・・・。

# 体系的な教育？　新人研修があるじゃん？
新人研修はあくまで全体公約数的な教育なのかなと。
配属後の各PJごとに、そのPJに必要な業務スキル・技術スキルをPJの新規参入者に教える体系的な教育コンテンツがあるといいなあとか・・・。

# PJごとの体系的教育コンテンツ？　そんなの作っている暇ない？
暇があるから体系的教育コンテンツを作るのではなく、体系的教育コンテンツ作成はPJにとって欠かせない重要な仕事だ！と認識してもらえればいいのかなと。
ちなみにPJで使用しているwikiに書いてある知識は部分情報だと思っています。

そのうち自分のPJの体系的教育コンテンツを作ってみようと思ってます（宣言
Maven入門asato

# 概要
Mavenの学習記録です。テスト中

## 環境
- Java 1.8.0_45
- Windows8.1
- Apache Maven 3.3.9

## 画像
![sample.jpg](https://qiita-image-store.s3.amazonaws.com/0/174949/4001721d-b984-d7d3-6ed4-a560f07f739e.jpeg)


## エラー
mvnのコンパイルが失敗する。

![error1-1.jpg](https://qiita-image-store.s3.amazonaws.com/0/174949/0c2fe6c4-dd0c-8da1-0f75-fb9f814a96f2.jpeg)


## 原因
構文誤り。
誤) mvn -compile
正) mvn compile

## 対応
正しいコマンドを入力。

![error1-2.jpg](https://qiita-image-store.s3.amazonaws.com/0/174949/a11f3164-2133-1686-94c5-a88c11568dcc.jpeg)
チェックボックスの親子関係を構築するjQueryプラグイン

以下のような地方とその地方の都道府県など、大カテゴリと小カテゴリのチェックボックスを連動させたい場合があると思います。

![チェックボックス連動.gif](https://qiita-image-store.s3.amazonaws.com/0/9064/3850e212-c5e4-c4de-f409-be72b20b6fb8.gif)

都度構築してもいいのですが、カテゴリ数が多い場合はプラグイン化した方が効率的です。
そんな時のために作ったのが以下のプラグインです。

```js
;(function($)
{
	/* =============================================================
	// relation_checkbox
	// チェックボックスの親子関係構築プラグイン
	// author digichro inc. y.sakai
	// 
	// 親のチェックボックスチェック→子のチェックボックス全てチェック
	// 子のチェックボックス全てチェック→親のチェックボックスチェック
	// 
	// 使い方）
	// $("#parent").relation_checkbox({ "childs": "#childs_checkbox input" });
	// $("#parent").relation_checkbox({ "childs": $( "#childs_checkbox input" ) });
	// ※childs は jQueryオブジェクト or jQueryセレクターを指定する。
	============================================================= */
	$.relation_checkbox = function( element, options )
	{
		var defaults = {
			childs: null
		}
		
		var plugin = this,
			$parent = $(element),
			$childs = null,
			last_count = false,
			enabled = false;
		
		plugin.settings = {}
		
		plugin.init = function()
		{
			plugin.settings = $.extend({}, defaults, options);
			
			if( plugin.settings.childs instanceof jQuery )
			{
				$childs = plugin.settings.childs;
				enabled = true;
			}
			else if( $.type(plugin.settings.childs) === "string" )
			{
				$childs = $( plugin.settings.childs );
				enabled = true;
			}
			if( !enabled ) return false;
			
			$childs.bind( "change", childs_to_parent );
			$parent.bind( "change", parent_to_childs );
			//parent_to_childs();
			if( $parent.is(":checked") )
			{
				$childs.not(":checked").attr( "checked", "checked" ).change();
			}
			last_count = $childs.filter(":checked").size();
		}
		
		var childs_to_parent = function()
		{
			if( !enabled ) return false;
			
			if( $childs.size() == $childs.filter(":checked").size() )
			{
				$parent.attr( "checked", "checked" ).change();
			}
			else
			{
				$parent.removeAttr( "checked" );
				if( last_count == $childs.size() )
				{
					enabled = false;
					$parent.change();
					enabled = true;
				}
			}
			last_count = $childs.filter(":checked").size();
		}
		var parent_to_childs = function()
		{
			if( !enabled ) return false;
			
			if( $parent.is(":checked") )
			{
				$childs.not(":checked").attr( "checked", "checked" ).change();
			}
			else
			{
				$childs.filter(":checked").removeAttr( "checked" ).change();
			}
			last_count = $childs.filter(":checked").size();
		}
		
		plugin.init();
	}
	
	$.fn.relation_checkbox = function(options)
	{
		return this.each(function()
		{
			if (undefined == $(this).data("relation_checkbox"))
			{
				var plugin = new $.relation_checkbox(this, options);
				$(this).data("relation_checkbox", plugin);
			}
		});
	}
	
}
)(jQuery);
```

親となるjQueryエレメントに対して relation_checkbox で子エレメントを指定するだけです。
子エレメントはjQueryエレメントでもセレクターでも、どちらでも動くようにしてあります。
MindでMySQLに接続するには

Webアプリケーションを作成していくうえでユーザ管理などでＭｙＳＱＬやＰｏｓｔｇｒｅＳＱＬを利用したいことがあります。以前はＰＨＰやＰｅｒｌ言語で作成していました。無謀にもＭｉｎｄで自作を試みたこともありますが個人用途では労多くして益少なしであきらめていました。

ＭｉｎｄでもＭｙＳＱＬに接続できますということを小耳はさみましたので公開いただければ幸いです。
１テーブルの簡単な構造のＭｙＳＱＬを構築していますので使用報告はいたします。
dockerでiptables failed:

ハマったのでメモ

# エラー
```bash
docker run -it -p 8080:80 nginx /bin/bash
Error response from daemon: Cannot start container  
44c26f4d83f5c819f8c308c5c3deb8f362e76842ebca06de2f4ca0245d92e12e: iptables 
failed: iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-
destination 172.17.0.11:80 ! -i docker0: iptables: No chain/target/match by
that name.
```

# 解決法
- CentOS6

```bash
$ sudo service docker restart
```

- CentOS7

```bash
$ systemctl restart docker
```

# 参考:
http://qiita.com/miwato/items/9770a2a757d3f5e369a4
github のアカウントを利用して、cloud9のアカウントを登録する。


## 参考記事
[GitHub連携でCloud9を使えるようになるまでの流れをキャプチャ付きで詳しく紹介](http://qiita.com/YujiTsushima/items/ff5d0d154b6d591c6d00)

## 手順概要
1. GitHub に予めログインしておく
2. [Cloud9](https://c9.io/) のサイトで github 連携をクリック
3. GitHub でアプリケーション連携を承認
4. Cloud9 のサイトでアカウント登録
5. 簡単に使ってみる

## 手順詳細
1. GitHub に予めログインしておく
略

2. [Cloud9](https://c9.io/) にアクセスし、右上の github のアイコンをクリック
![スクリーンショット 2017-04-09 8.27.05.png](https://qiita-image-store.s3.amazonaws.com/0/27486/79c751d5-a60e-ca8b-711e-090143bad8f5.png "スクリーンショット 2017-04-09 8.27.05.png")

3. github で cloud9 の アプリケーション連携を承認
 1. 承認してみる
![スクリーンショット 2017-04-09 8.28.43.png](https://qiita-image-store.s3.amazonaws.com/0/27486/590fb071-6f3e-1e4c-3e20-61635705bd75.png "スクリーンショット 2017-04-09 8.28.43.png")

 2. github の設定で、承認済のアプリケーションを確認してみた
![スクリーンショット 2017-04-09 8.38.11.png](https://qiita-image-store.s3.amazonaws.com/0/27486/cd011c53-b834-27fb-e314-e030ba4ff5c2.png "スクリーンショット 2017-04-09 8.38.11.png")


4. cloud9 のサイトに戻り、アカウントを登録
 1.  Create new Cloud9 account
![スクリーンショット 2017-04-09 8.29.48.png](https://qiita-image-store.s3.amazonaws.com/0/27486/ad342a34-027b-3b2b-7db6-269e5506efa2.png "スクリーンショット 2017-04-09 8.29.48.png")

 2. メールアドレス。連絡先。
![スクリーンショット 2017-04-09 8.30.07.png](https://qiita-image-store.s3.amazonaws.com/0/27486/333ab31d-830e-f60b-4388-8e39b656f54a.png "スクリーンショット 2017-04-09 8.30.07.png")


 3. ユーザ名。
URLに使われる。すでに使われていればエラーとなる。
![スクリーンショット 2017-04-09 8.30.38.png](https://qiita-image-store.s3.amazonaws.com/0/27486/47697fec-efd6-966f-3430-e19ed1416c5b.png "スクリーンショット 2017-04-09 8.30.38.png")

 4. アンケート。
任意らしいが隠す必要もないので回答。
![スクリーンショット 2017-04-09 8.32.32.png](https://qiita-image-store.s3.amazonaws.com/0/27486/b4c80c2a-2332-f78c-2679-b9fa281d04e2.png "スクリーンショット 2017-04-09 8.32.32.png")

 5. 入力内容を確認。
![スクリーンショット 2017-04-09 8.32.43.png](https://qiita-image-store.s3.amazonaws.com/0/27486/016bd28b-4a31-5b11-ae2b-9cf2635bdf31.png "スクリーンショット 2017-04-09 8.32.43.png")

 6. クレジットカード番号。
不正利用防止のため2016年7月に必須になったらしい。
Vプリカで登録したよという声もあり。
![スクリーンショット 2017-04-09 8.32.54.png](https://qiita-image-store.s3.amazonaws.com/0/27486/3035e6cd-d2fb-58d8-29c6-c9556bbd3f40.png "スクリーンショット 2017-04-09 8.32.54.png")

 7. ロボットじゃないよね？
![スクリーンショット 2017-04-09 8.36.49.png](https://qiita-image-store.s3.amazonaws.com/0/27486/6262e6b4-0013-6714-3ad9-04c08f7bfbbd.png "スクリーンショット 2017-04-09 8.36.49.png")

 8. GitHub のアカウントでログイン
![スクリーンショット 2017-04-09 8.37.16.png](https://qiita-image-store.s3.amazonaws.com/0/27486/858494f1-b093-9d40-098e-36ee3d61f77a.png "スクリーンショット 2017-04-09 8.37.16.png")

5. ログインした。
新しいワークスペースを作成するにはここから。
![スクリーンショット 2017-04-09 12.13.10.png](https://qiita-image-store.s3.amazonaws.com/0/27486/af3448fe-d7d6-b3eb-b12e-5acf18a274bd.png "スクリーンショット 2017-04-09 12.13.10.png")
「CentOS7.3」にWinetricksをダウンロードする

前提として、「RPMforge」をインストールしておく。
コチラを参照↓↓↓
http://qiita.com/rYamashita1012/items/8b4ca06d60bbbd480903

今回参考にさせていただいたサイト↓↓↓
http://linux.ikoinoba.net/index.php?mode=page&aim=wine

まず、cabextractをダウンロードする。

#sudo yum --enablerepo=rpmforge install cabextract

次に、Winetricksをダウンロードする。
#sudo curl http://www.kegel.com/wine/winetricks -o /usr/local/bin/winetricks

正常にダウンロードされたことを確認するため、
以下のディレクトリに「winetricks」が存在することを確認。

#cd /usr/local/bin/

実行権限を付与する。

#sudo chmod +x winetricks



以上。
プログラミング言語Go読書会#4(2.3.2-2.7)[2017/04/05]

[Go読書会 #4 ](https://lancers-engineer.connpass.com/event/54216/) が[ランサーズ株式会社](https://www.lancers.co.jp/)で行われたので進捗と技術的なメモ書きを書いておきます。読書会の内容は[プログラミング言語Go](https://www.amazon.co.jp/dp/4621300253/?&_encoding=UTF8&tag=amesho-22&linkCode=ur2&linkId=7e29043d833086d36f8b64c2ed3721b2&camp=247&creative=1211)を冒頭から皆で読み進めていくというものです。

## 進捗した内容

+ 2章 プログラムの構造
  + 2.3 変数
     + 2.3.2 ポインタ
     + 2.3.3 new関数
     + 2.3.4 変数の生存期間
  + 2.4 代入
     + 2.4.1 タプル代入
     + 2.4.2 代入可能性
  + 2.5 型宣言
  + 2.6 パッケージとファイル
     + 2.6.1 インポート
     + 2.6.2 パッケージ初期化
  + 2.7 スコープ

## 話題に上がった話

### 2.3.2 ポインタ

ここでは、Cの経験者から関数のローカル変数の参照が返せるという点がかなり驚く点だということが話題になりました。これは、後述の変数の生存期間におけるunreachableが関係していました。

### 2.3.3 new関数

ここでは、基本[new](https://golang.org/src/builtin/builtin.go?h=new#L187)は呼び出し毎に一意なアドレスを返すのですが、struct{}と[0]intが同じアドレスを指すことがあるようです。実装依存らしいのでどの実装でそれが起きるのかは気になります。

### 2.3.4 変数の生存期間

ここでは、Goではインスタンスの生成は宣言文が実行される毎に行われること、変数は「到達不能(unreachable)」になるまで生存し続けること。が話題になりました。到達不能が分かりづらいらしくちょっと話をしたんですが、要するに変数へ到達することのできる参照などの経路がプログラム中にあるかないか等は無しだと思います。真面目に追うとGCをちゃんとやらないといけなくなるのでそれは別途追いたいと思います。参考になりそうな[URL](http://deeeet.com/writing/2016/05/08/gogc-2016/)。

### 2.5 型宣言

ここでは、同じ基底型を持つ名前付き型(namede type)同士が比較したりが出来ないと言うことが話題になりました。これは、比較してはいけない物とか計算してはいけない物などをうっかり同じ型で宣言してしてしまうミスを防ぐコトができるという意味で役立つので便利ですね。なおかつ、Goの場合はコンパイルエラーで検出可能な点が素晴らしいです。

### 2.6 パッケージとファイル

importしたときに別の名前が付けられる点と、詳細なコメントは、doc.goと呼ばれるファイルに書かれるという慣習が有ることを知りました。
[Godoc: documenting Go code](https://blog.golang.org/godoc-documenting-go-code)ここに色々書かれていて例として[Source file src/encoding/gob/doc.go](https://golang.org/src/encoding/gob/doc.go)が乗っていました。

### 2.6.2 パッケージ初期化

パッケージ変数の初期化が、書かれた順番で上からでは無く、依存関係が解決されてその順番で行われることが話題になりました。これは、依存関係を意識して順番に書く必要が無いということなので別の目的で順番を決めたり出来るので良さそうですね。

### 2.7 スコープ

ここでは、内側の宣言により外側の宣言へのアクセスが出来なくなるシャドーイング(shadow)が話題になりました。現場で実際に何人か関数を外部で宣言して、main内部で同じ名前の変数を宣言したところこのshadowでアクセスが出来なくなることが確認できました。

あとは、パッケージ変数をinit関数で初期化するときに省略変数宣言を使用するとうっかりローカル変数を宣言してしまうことになり、謎の挙動にナルト言うことも話題になりました。

個人的には、途中で出てきた、[Fatalf](https://golang.org/src/log/log.go?s=9215:9259#L297)という関数の中身が気になって調べてみたらstd.Outputという処理が出てきましてこの引数に２というものが出てきて、これは[ファイルディスクリプタ](https://en.wikipedia.org/wiki/File_descriptor)の標準エラーを指している物なのだと思いますが、いろんな処理系で動くGoで直に書かれていることはびっくりしました。

```
func Fatalf(format string, v ...interface{}) {

	std.Output(2, fmt.Sprintf(format, v...))

	os.Exit(1)

}
```

ここまで呼んだところで、時間になりました。次回は 3 基本データ型 からです。
AWSアカウント名義変更について

# AWSアカウント名義変更

　最近初めてAWSアカウント名義変更をやりましたので、AWSアカウント名義変更方法をここにまとめます。

## 背景

　とある理由で、某社(以降、譲渡元とする)のAWSアカウントを自社(以降、譲渡先とする)管理のAWS配下に入ることになり、私が対応することになりました。
　「そんなことって簡単でしょう、Rootアカウントの情報を更新すればいい」と、当初私がこう思っていました...が、思ったより簡単ではなかったです。まぁ、そんな簡単にできないでしょうね。

## AWSアカウント譲渡の規定 
 
　[【AWS カスタマーアグリーメント】](https://aws.amazon.com/jp/agreement/)の【13. 雑則】に下記の内容が記載されています。

>13.8 譲渡　サービス利用者は、アマゾンの事前の書面による同意なく、本契約を譲渡し、本契約に基づく権利を第三者に委任またはサブライセンスしてはならないものとする。本 13.8 項に違反する譲渡または移転は、無効とする。前記に従うことを条件として、本契約は、両当事者ならびに各々の承継人および譲受人を拘束し、それらの者の利益のために効力を有する

　正直に言って、知りませんでした!

## 譲渡元、譲渡先のAWSアカウント状況

　今回、譲渡元、譲渡先のAWSアカウント利用状況は下記の通りです。

||AWSアカウントの種類|支払い方法|
|:-----:|:-----|:-----:|:-----:|
|譲渡元|単独アカウント|請求書による支払い|
|譲渡先|一括請求連結ファミリー<br>●(親)Payerアカウント<br>●(子)Linkedアカウント|請求書による支払い|

* 譲渡元の要望: AWSアカウント名義変更月の月初からのAWS利用費を負担してほしい

## AWSアカウント名義変更の手続き

　AWSアカウント名義変更を検討される際には、AWSJ営業担当に連絡してください。
　手続きは下記の通りです。
　※ AWSJ： アマゾンウェブサービスジャパンの略です。

|No|関係者|作業内容|
|:-----:|:-----|:-----|
|1|譲渡先 or 譲渡元<br>※ 今回は譲渡元のA社|[譲渡元、譲渡先の情報](#info)をAWSJに連絡|
|2|AWSJ|AWSJアカウント譲渡同意書作成し、PDFで譲渡先に送付|
|3|譲渡元|AWSJアカウント譲渡同意書にサイン後、譲渡先へ送付|
|4|譲渡先|AWSJアカウント譲渡同意書にサイン後、譲渡元へ返送|
|5|譲渡元|AWSJへAWSアカウント譲渡同意書を送付|
|6|AWSJ|サイン後、最終版を譲渡元、譲渡先へ送付|
|7|譲渡元、譲渡先|AWSアカウントの一連情報を更新後、AWSアカウント名義変更が終了|

下記、<a name="info">AWSアカウント名義変更に必要な情報</a>

|No|項目|
|:-----:|:-----|
|1|譲渡するアカウントID|
|2|譲渡実施日|
|3|譲渡元の情報(<font color="Red">英語表記</font>)<br>- 会社名<br>- 住所<br>- サイン担当者の役職と名前|
|4|譲渡先の情報(<font color="Red">英語表記</font>)<br>- 会社名<br>- 住所<br>- サイン担当者の役職と名前|
|5|譲渡理由(日本語)|





## 諸注意点①②③

### ① 譲渡元、譲渡先(両方もしくは片方)が一括請求の場合

1. 支払い先の変更のタイミングは一括請求から__外された時点__or一括請求に__連結された時点__になります。
2. AWSアカウントは一括請求から外され、毎時00分を跨いでしまうと、一時的に単特アカウントと見なされ、そのAWSアカウントに対して請求が発生します。
3. 請求月単位でAWSアカウントを切り替えたい場合
  * __毎月１日日本時間の9:00に__(TAMからは8:00 - 9:00の間にと言われています)一括請求の連結作業を実施し、完了させる必要があります。<br>※　譲渡元、譲渡先が連携する必要があり、AWS側の処理も必要があるため、9:00にちょうど処理を終わらせることが難しいです。切替の誤差により、約１時間分の利用費は切替前の譲渡元にもしくは切替後の譲渡先に請求されます。

### ② クレジットカードの更新

1. 新しいカードを追加し、「現在の支払い方法」に変更してから、旧カードを削除します。
  * 新しいカードを追加しないと、__AWSマネコン__から「現在の支払い方法」になっているカードの削除ができません。

1. 譲渡元が譲渡先にAWSアカウントを渡する前に、カードの情報を完全に削除したい場合は、Amazon.com(https://www.amazon.com/gp/wallet/) にログインして、削除する必要がある。
  * <font color="Red">ログイン情報はAWSのマスターアカウントの情報と同じ</font>

### ③ その他

1. **毎月の月初(5日~6日)に請求処理は行われる**らしく、請求処理が完了される前に、請求先の情報を変更してしまうと、変更月の先月分が新しい支払い先に請求されるそうです。
2. 譲渡元は請求書でAWS利用費を支払う場合、請求書送付先の情報を変更するにはAWSサポートに依頼する必要がある

## 実際にやってみて、どうだったか

　3/1日本時間の8:00 - 9:00の間に、一括請求の連結作業を実施し、譲渡元の単独アカウントは一括請求連結ファミリーに入りました。
　3/6以降、請求書送付先の住所の変更等を行い、名義変更は終了しましたが、下記２点気になるところがありました。

1. (2/28 11:00 - 12:00)一時間分の利用費が譲渡先(自社)に請求されました。数ドルなので、そのまま負担することになりました。
  * AWSアカウント名義変更時に、まず支払い方法を自社のクレジットカードに変更し、その後一括請求に連結しておけばよかったかもしれません。<br>
  そうすれば、一括請求に連結前の利用費は自社のクレジットカードに、連結後は自動的にPayerアカウントに費用を集約されますので、わざわざ3/1 8:00 - 9:00の間に作業をしなくてもいいかもしれません。
2. 請求書送付先の変更申請の際に、**AWSは譲渡元が支払い方法変更時(クレジットカード → 請求書)の契約者情報を別途管理していた**ことがわかりました。<br>3月上旬に、AWSマネコンからアカウントの情報を更新したにもかかわらず、譲渡元の契約者情報がマネコンには表示されないものの、AWSどっかのシステム上には残っていました。<br>
気持ちわるかったので、請求書送付先を変更時に、その契約者情報の更新も申請しました。

## 最後

　初めてのAWSアカウント名義変更でしたので、迷いつつ、進めてきました。
　ググっても、AWSアカウント名義変更の記事があまりなかったので、とりあえず自分が知っている範囲のことをこのQitta記事にまとめ、皆さんにシェアしておきます。お役に立てると幸いです。
「CentOS7.3」にRPMforgeをダウンロードする

普通にダウンロードしようと思ったら、
既に廃止されているよう。

ホームページに行ってもDLリンクらしきものが見当たらない。

そこで、下記サイトを参考にダウンロードしてみました。
【【Linux CentOS 7 64bit】廃止されたRPMForgeリポジトリをそれでも使用する方法 】
http://akira-arets.blogspot.jp/2016/11/centos7-enable-rpmforge.html



基本的には上記サイトに記載されていることをするだけで
ダウンロードできた。

海外の有志が作ったミラーサイトからDLする必要がある。
（ただし、メンテナンスされていないため、使用は推奨されない。）

ミラーサイト↓↓↓
http://repository.it4i.cz/mirrors/repoforge/


ターミナルで以下コマンドを実行

# yum install http://repository.it4i.cz/mirrors/repoforge/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm


ダウンロードされたことを確認

# ls /etc/yum.repos.d/



以上でRPMforgeのダウンロードが完了。


最後に、
リポジトリを無効化することを忘れないこと。
git logを見やすくしたい！

普通にgit logをすると、

![image](https://qiita-image-store.s3.amazonaws.com/0/120192/46220288-520f-7514-ccdf-8c5dfb7109f5.png)

となります。もっと見やすくしてみましょう！

# 1行表示
git logには色々オプションが指定出来ます。
例えば、

```
git log --oneline
```

![image](https://qiita-image-store.s3.amazonaws.com/0/120192/472e3189-ae14-c01c-03fc-d1b75f3583d9.png)
のように1行で表示されます。
でも情報が簡素過ぎるので、

```
git log --pretty='format:%C(yellow)%h %C(green)%cd %C(reset)%s %C(red)%d %C(cyan)[%an]' --date=iso
```

とすると、

![image](https://qiita-image-store.s3.amazonaws.com/0/120192/a2aca3d7-30b0-49a4-2f48-38443f81226f.png)

という表示に出来ます。
毎回このパラメータを指定するのも面倒なので、~/.gitconfigに登録しておきましょう。
~/.gitconfig ファイルの[alias]セクションに以下を追加します。

```
[alias]
    plog = log --pretty='format:%C(yellow)%h %C(green)%cd %C(reset)%s %C(red)%d %C(cyan)[%an]' --date=iso
```

これで次回からは、

```
git plog
```

で同じ表示が得られます。

# 追加オプション

- 出力行数指定

```
git plog -3
```

![image](https://qiita-image-store.s3.amazonaws.com/0/120192/a971c5e1-ef9e-1ed6-2ac5-37e521ab5e43.png)

- マージコミットを除く

```
git plog --no-merges
```

![image](https://qiita-image-store.s3.amazonaws.com/0/120192/d9b3845a-58cd-e644-1ff9-40bfc44b3a85.png)

- ネットワーク図

```
git plog --graph
```

![image](https://qiita-image-store.s3.amazonaws.com/0/120192/7483c27d-554b-8b78-91a9-e73cb9c462db.png)
Windows環境であれば SourceTree 使った方がいいですね。。

- 全部入り(HEAD,ブランチ,リモートブランチ,タグ,stash)
- 
```
git plog --all --graph
```

![image](https://qiita-image-store.s3.amazonaws.com/0/120192/6daf1ae3-9cb0-f55c-24b0-f1c3ba584b3f.png)
stashも履歴にぶら下がるんですね。
ある意味、こっそりコミット?して、特殊なブランチ名(stash)が付けられたもの、という解釈をすればいいんでしょうか。

私はこの全部入りを普段使っています。

```
[alias]
    glog = log --pretty='format:%C(yellow)%h %C(green)%cd %C(reset)%s %C(red)%d %C(cyan)[%an]' --date=format:'%c' --all --graph
```


(参考)
[git log](https://git-scm.com/docs/git-log)
気が付いたらJSスクラッチ界隈が便利になってた件2

1.[気が付いたらJSスクラッチ界隈が便利になってた件1](http://qiita.com/Bong/items/27a9763880723df4f3b2)
2.気が付いたらJSスクラッチ界隈が便利になってた件2
3.[気が付いたらJSスクラッチ界隈が便利になってた件3]
(http://qiita.com/Bong/items/bd434fd7209b9a457139)
4.[気が付いたらJSスクラッチ界隈が便利になってた件4](http://qiita.com/Bong/items/00bb6d097ecbc3830b6c)

#さらにクラスの操作が便利になっていた
なるほど。[追加と削除](http://qiita.com/Bong/items/27a9763880723df4f3b2)は分かった。
じゃあクラスのON/OFFは、こう書けばいいんだよね！

##クラスのON/OFF
ONにする1

```javascript
var elm = document.getElementById("animal01");
if (elm.className.indexOf("red") == -1) {
  elm.classList.add("red");
}
```

OFFにする1

```javascript
var elm = document.getElementById("animal01");
if (elm.className.indexOf("red") != -1) {
  elm.classList.remove("red");
}
```

待て待て。
それだと、redAppleクラスがあったら、バグが起きるでしょ。
ここで正規表現を使ってもいいけど、**contains**ってものがあるみたいだよ。

##containsを使う

ONにする2

```javascript
var elm = document.getElementById("animal01");
if (!elm.classList.contains("red")) {
    elm.classList.add("red");
}
```

OFFにする2

```javascript
var elm = document.getElementById("animal01");
if (elm.classList.contains("red")) {
    elm.classList.remove("red");
}
```

便利になったね！
でも、className時代の作法を引きずっているね。
classListは、同じクラスを複数追加していいし、存在しないクラスを削除してもいいんだよ。

##クラスの有無を考慮しない
ONにする3

```javascript
var elm = document.getElementById("animal01");
elm.classList.add("red");
```

OFFにする3

```javascript
var elm = document.getElementById("animal01");
elm.classList.remove("red");
```

シンプル！

でも、classListでON/OFFするには、**さらに便利な機能**があるみたいだよ。

##toggleを使う

ON/OFFにする

```javascript
var elm = document.getElementById("animal01");
elm.classList.toggle("red");
```
これだけ！

**toggle**は、redクラスが**無いなら追加**し、redクラスが**あるなら削除**します。

##まとめ

今まで、**contains**や**toggle**は、jQueryの機能だと思ってました。
いつの間にかスクラッチに取り込まれていたんですね！
今年は、スクラッチをもう一度勉強しなおします。。。
displayDipoles_170409 > v0.1 > display dipole coordinates in 3D

```txt:Environment
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 14.04 LTS desktop amd64
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v8.0
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
GNU bash, version 4.3.8(1)-release (x86_64-pc-linux-gnu)
```

This article is related to [ADDA (light scattering simulator based on the discrete dipole approximation)](https://github.com/adda-team/adda/).

### Required

- UtilReadCoordinate.py
   - http://qiita.com/7of9/items/309d288e2e246d42ba83
- Coordinate file: coord.0
   - produced with modified `iterative.c`
      - http://qiita.com/7of9/items/183d1d9a2b5ab0944689

`coord.0` was produced with the following:

```
$ ./adda -grid 25 -chp_type normal -chpoint 1s > log
```

### code v0.1

Jupyter code

```py:displayDipoles_170409.ipynb
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import sys

from UtilReadCoordinate import read_coordinate_file

'''
v0.1 display dipoles in 3D
'''

res = read_coordinate_file('coord.0')
local_nvoid_Ndip, coord = res

print(local_nvoid_Ndip)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

xs = coord[::3]
ys = coord[1::3]
zs = coord[2::3]

print(xs[1],ys[1],zs[1])

#sys.exit()

for c, m, zlow, zhigh in [('r', 'o', -10, 10)]:
    ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z label')

plt.tight_layout()
plt.show()
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/bac6bab0-ef12-2df9-ff18-b193f44e2ad4.png)

Acknowledgement: @shiracamus in [this](http://qiita.com/7of9/items/75e0b9a2781cd2de0774)
USB メモリを使用して Linux (CentOS 7) をインストール

USB メモリを利用して PC に Linux (CentOS 7) をインストール．

![イメージ図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68605/5dc60a3d-f765-3303-9c89-c9bc9751c33e.png)

## CentOS のダウンロード
インストールしたい OS の ISO イメージを入手する．

https://www.centos.org/download/ から **DVD ISO** をダウンロード．

## ISO イメージを元にブート USB を作成
以下は Windows PC を使った設定方法．

### rufus のダウンロード
Windows 機にて https://rufus.akeo.ie/ から rufus をダウンロード．

### ブート USB の作成
下記の設定でスタート．ISO イメージは上の手順でダウンロードしたものを指定する．
![rufus.PNG](https://qiita-image-store.s3.amazonaws.com/0/68605/c556e7e1-43b1-552e-1c88-45ee1eaa5638.png)

「ISOHybridイメージを検出しました」というエラーが表示される場合は DD イメージモードに設定する．

>イメージファイルによっては、「ISOHybridイメージを検出しました」というダイアログが表示されることがあります。
>通常は ISO イメージモードで書き込みを行いますが、USB 起動時にエラーが発生する場合は、DD イメージモードで作り直してみます。
https://www.gigafree.net/system/os/Rufus.html

## Linux をインストールする PC の設定変更
作成したブート USB を Linux をインストールする対象の PC に挿す．

電源 ON 直後に F12 などの起動キーを押して BIOS の BOOT 設定を起動（起動キーはマザーボードによって異なる）．BOOT デバイスの最優先を USB メモリにして設定を終了する．

## インストール
Linux のインストールマネージャが起動するはずなので，表示される手順に従ってインストールする．
Golangで可変の戻り値？

# はじめに
最近Go言語を本格的に勉強し始めましたが、ずっと腑に落ちないことがありました。
それはGo言語では「可変の戻り値が許容されているのではないか？だとしたら関数をどう記述すれば可変戻り値を実現できるか？」ということです。

# 例

次の例では`map`で対応するキーの値を取ってきています。

```go
m := map[string]int
//何らかの処理
value, ok := m["hoge"] 
```
上の例では`m`に`"hoge"`というキーが存在する場合、valueの`"hoge"`に対応する値が入り、`ok`は`true`になります。存在しなければ`value`は`nil`、`ok`は`false`になります。

次の例は`ok`はなく、`value`のみになっていますが、問題なくコンパイルは通ります。

```go
m := map[string]int
//何らかの処理
value := m["hoge"]
```

今までPythonを触ってきた来た私は`map`(pythonでは`dict`)のあるキーに対応する値を取得する際、内部的には関数が呼ばれているはずだ。だとしたら可変の戻り値をどう実現しているのかと疑問に思いました。

# わかったこと
[stackoverflow](http://stackoverflow.com/q/36244725)にその答えがありました。
実はmap、type assertion、rangeは特別な機能を持っており、**関数ではない**のです。なので、**可変の戻り値をもつ関数は書けません。**
mac用の外部キーボード設定

# 経緯
* 会社で支給されたMacがTouchbar付13インチ
    * 色々むかつく
        * エスケープキーが物理じゃない
        * Deleteキー押したらSiriが起動する(WindowsのF1かよ)

# 前提
* OS
    * macOS sierra(10.12.3)
* キーボード
    * REALFORCE91UBK(JIS配列)

# 必要ソフトウェア
[Karabiner-Elemnts](https://github.com/tekezo/Karabiner-Elements)

# 手順
## Karabiner-Elmentsをインストール
[参考資料](https://github.com/tekezo/Karabiner-Elements/blob/master/usage/README.md)のInstallationを参考にKarabiner-Elementsをインストールする

## Karabiner-Elementsを起動
Applications/Karabiner-Elements.appから起動する

## キーの入れ替え
`Simple Modifications`タグの`Add item`ボタンからキー入れ替えをする。
`From Key`が入替え元
`To Key`が入換え先
私は次の通りキーを入れ替えた。外部キーボードなしでも違和感を感じ内容に、できるだけMacの日本語キーボードと同じ挙動をするようにしてある
<img width="912" alt="Screen Shot 2017-04-09 at 10.20.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/24610/d0f9ec0a-af3b-47b0-cf14-68547189fb09.png">


## ファンクションキーの切り替え
`Function Keys`タグからファンクションキーの動作を変更できる。
基本的にコントラストとか音量はエディタ、IDEなんかで使用するF1~F12より使用頻度が低いため
素のF1~F12に変更している
![Screen Shot 2017-04-08 at 13.30.48.png](https://qiita-image-store.s3.amazonaws.com/0/24610/f125600c-d6e1-871b-3e60-81c2e039ab7e.png)


# 参考資料
https://github.com/tekezo/Karabiner-Elements/blob/master/usage/README.md
NumPy > [1, 2, 3, 4, 5, 6, 7, 8, 9]を３つのndarray([1,4,7], [2,5,8], [3,6,9])に分割する実装 > { スライスを使う方法 / reshape()+行列転置の方法 } を教えていただきました

```txt:動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 14.04 LTS desktop amd64
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v8.0
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
GNU bash, version 4.3.8(1)-release (x86_64-pc-linux-gnu)
```

### v0.1

```test_python_170409a.py
import numpy as np

alist = [1, 2, 3, 4, 5, 6, 7, 8, 9]

xs = np.array([])
ys = np.array([])
zs = np.array([])

for idx, elem in enumerate(alist):
    print('%d:%s' % (idx, elem))
    if idx % 3 == 0:
        xs = np.append(xs, elem)
    elif idx % 3 == 1:
        ys = np.append(ys, elem)
    else:
        zs = np.append(zs, elem)

print(xs)
print(ys)
print(zs)
```

```txt:実行
$ python test_python_170409a.py 
0:1
1:2
2:3
3:4
4:5
5:6
6:7
7:8
8:9
[ 1.  4.  7.]
[ 2.  5.  8.]
[ 3.  6.  9.]
```

目的は果たしたが、もっと簡潔な方法はあるだろう。

### 教えていただいた事項 

@shiracamus さんの[コメント](http://qiita.com/7of9/items/75e0b9a2781cd2de0774/#comment-8f09f438bc675238dfca)にてスライスを使ったシンプルな方法を教えていただきました。

情報感謝です。

@tuki0918 さんの[コメント](http://qiita.com/7of9/items/75e0b9a2781cd2de0774/#comment-07b0b67a157b08975edf)にてreshape()と行列の転置を使った方法を教えていただきました。

情報感謝です。
Pulse Secureの自動起動をオフにする

Pulse Secureがいつも勝手に起動するのでoffにする

```off.
hoge@~/Library$ launchctl unload -w /Library/LaunchAgents/net.pulsesecure.pulsetray.plist
```

これでok

参考
[Pulse Secure の常駐プロセスの自動起動が鬱陶しい](http://takuya-1st.hatenablog.jp/entry/2016/06/19/000000)
KintoneアプリにJSとCSSをデプロイするコマンド

# なんで？
社内でKintineのアプリ開発をしてますが、毎回、マウスでファイルをDrag & Dropするのは大変です。また、Dropboxに置いて公開リンクを作るという手もありますが、一時的な対応のためにそれを行うのもなんだか面倒だなと感じてました。

# 使い方
事前に下記のようにJSONで設定ファイルを書いて、`app.json`という名前で保存しておきます。

```
{
    "id": 1234,
    "name": "アプリ名称",
    "description": "説明",
    "js":[
        "https://example.com/example.min.js",
        "js/example.js"
    ],
    "css":[
        "css/example.css"
    ],
    "mobile_js":[
        "js/mobile-example.js"
    ]
}
```

`id`はKintoneのアプリIDです。`name`と`description`はデプロイには使いませんが、このファイルがどのアプリのためなのかが分かるように記載します。

## デプロイ方法
以下のコマンドでデプロイします。

```
% kintone_deploy -d domain -u userid -p password
```

`-d` : Kintoneのドメイン名（xxxx.cybozu.com）
`-u` : Kintoneアプリ管理者のユーザID
`-p` : Kintoneアプリ管理者のパスワード


`app.json`を違うファイル名にしたい場合は、下記のように`-i`オプションで指定します。

```
% kintone_deploy -i my-app.json -d domain -u userid -p password
```

テスト環境へのデプロイに留めたい場合は、`-t`オプションを指定します。

```
% kintone_deploy -d domain -u userid -p password -t
```

# デプロイ先とローカルとの差分を検証する（ver 0.9.1）
一部のファイルだけ手動でアップロードしていたりすると、app.jsonが指し示すローカルファイルとの差分ができてしまうことがあります。そういった時に勢いでデプロイするのは非常に心配ですから、```-v``` オプションを付けて下さい。差分がある場合には、下記のようにどのファイルでどんなdiffがあるかを表示します。

```
% kintone_deploy -d domain -u userid -p password -v
[INFO] Vefiry desktop JS list...
[INFO] Desktop JS list is identical.
[INFO] Vefiry mobile JS list...
[INFO] Mobile JS list is identical.
[INFO] Vefiry desktop JS file...
[INFO] Desktop JS file (list.js) is identical.
[INFO] Desktop JS file (lookup.js) is identical.
[INFO] Desktop JS file (const.js) is identical.
[WARN] Desktop JS file (detail.js) is different.
-----
["-", 2961, "                parseError(e.responseJSON);"]
["-", 2962, "                if(e.responseJSON.error){"]
["-", 2963, "                    event.error = `必須項目が入力されていません。`"]
["-", 2964, "                }else{"]
["-", 2965, "                    event.error = 'レコードの更新が出来ません。';"]
["-", 2966, "                }"]
["+", 2961, "                event.error = 'レコードの更新が出来ません。';"]
[INFO] Desktop JS file (auto.js) is identical.

-------------------------------------------------------------------------
[WARN] There are some differences between kintone settings and local file.
-------------------------------------------------------------------------

```
# インストール
ささやかながらGemを作りましたので、下記からGemをダウンロードしてください。

[kintone_deploy-0.9.1.gem](https://github.com/maloninc/kintone_deploy/raw/master/gems/kintone_deploy-0.9.1.gem)

下記のコマンドでGemをインストールできます。

```
gem install ./path_to_gem/kintone_deploy-0.9.1.gem
```
Jupyter / matplotlib > 3D scatter plots / tight_layout()

https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#scatter-plots
に3D scatter plotの例がある。

結果画像が掲載されているのはいいが、Source codeと結果を並べて見るには以下の手順を経由しないといけない。

1. ファイルダウンロード
2. ダウンロードフォルダを開く
3. エディタでファイルを開く

面倒なので、今後の参照用に以下に転載する (2017年4月9日の情報)。

```scatter3d_demo.py
'''
==============
3D scatterplot
==============

Demonstration of a basic scatterplot in 3D.
'''

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np


def randrange(n, vmin, vmax):
    '''
    Helper function to make an array of random numbers having shape (n, )
    with each number distributed Uniform(vmin, vmax).
    '''
    return (vmax - vmin)*np.random.rand(n) + vmin

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

n = 100

# For each set of style and range settings, plot n random points in the box
# defined by x in [23, 32], y in [0, 100], z in [zlow, zhigh].
for c, m, zlow, zhigh in [('r', 'o', -50, -25), ('b', '^', -30, -5)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zlow, zhigh)
    ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/59cce5cc-e9c8-4ce3-8d6c-61974353334c.png)

マークが２種類あるが、Zの値で分けているようだ。領域が(-50,-25)と(-30,-5)でオーバーラップしているのは未消化。

### tight_layout()を試した

Z軸ラベルが中途半端に表示となったため、[tight_layout()](http://matplotlib.org/users/tight_layout_guide.html)を試してみた。

```py:scatter3d_demo_170409.ipynb
'''
==============
3D scatterplot
==============

Demonstration of a basic scatterplot in 3D.
'''

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np


def randrange(n, vmin, vmax):
    '''
    Helper function to make an array of random numbers having shape (n, )
    with each number distributed Uniform(vmin, vmax).
    '''
    return (vmax - vmin)*np.random.rand(n) + vmin

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

n = 100

# For each set of style and range settings, plot n random points in the box
# defined by x in [23, 32], y in [0, 100], z in [zlow, zhigh].
for c, m, zlow, zhigh in [('r', 'o', -50, -25), ('b', '^', -30, -5)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zlow, zhigh)
    ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.tight_layout()
plt.show()
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/fa03cf3c-7dce-97e3-4107-ffc66ffc990a.png)

Z軸ラベルが表示されるようになった。
Userの追加・削除（CentOS）

Userの追加・削除を行うためには管理者権限が必要なので、`su`コマンドでrootになってから始める。
#Userの追加
`useradd`コマンドを使ってユーザーの追加。

```bash
$ useradd [username]
#[username]は追加したいユーザー名
```
###オプション

よく使うもの。

* -d [dir] ログインディレクトリを設定
* -g [gid] グループIDを設定
* -m ホームディレクトリを作成
* -u [uid] ユーザーIDを設定


例

```bash
$ useradd -d /home/downtown/hamada -g 123 -m -u 4567
```

---
`passwd`コマンドでパスワードを設定。

```bash
$ passwd [username]
```

#Userの削除
`userdel`コマンドでユーザーの削除。

```bash
$ userdel [username]
```

###オプション
* -r ホームディレクトリも同時に削除
Atomインストールメモ

Atomを使い始めたので忘れる前にやったことをメモ。

# インストール

-   [Atom](https://atom.io/)から本体をダウンロード&インストール
-   (オプション)[edihbrandon/RictyDiminished: Ricty Diminished --- fonts for programming](https://github.com/edihbrandon/RictyDiminished)からRictyDiminished-Regularをダウンロード&インストール

# 初期設定

-   `command + shift + p`でコマンドパレットを開き、`Window: Install Shell Command`を実行してターミナルから`atom`、`apm`コマンドを使用可能にする
- (オプション)`command + ,`で設定を開き、フォントの`font-family`に`Ricty Diminished`を指定

# パッケージ

-   atom-beautify
  -   ソースコードの自動整形
-   atom-runner
  -   スクリプトの実行
-   atomic-emacs
  - Emacsライクなキーバインド
-   autocomplete-python
  - python補完
-   disable-keybindings
  - デフォルトキーバインドの無効化
-   highlight-selected
  - 選択箇所と同じ単語をハイライト
-   japanese-menu
  - メニュー日本語化
-   kite
  - プログラミングサポートツール
-   markdown-folder
  - markdownで折りたたみ
-   markdown-preview-plus
  - 数式プレビュー可能なmarkdown-preview
-   markdown-scroll-sync
  - markdown previewのスクロールを同期する
-   markdown-toc
  - table of contents作成
-   markdown-writer
  - markdown用キーバインディング追加
-   minimap
  -   ソースの全体図を右に表示
-   platformio-ide-terminal
  - Atom内でターミナル起動
-   project-manager
  - Atomを閉じたときの状態を保存
-   tool-bar
  - tool-bar-markdown-writerを使用するのに必要
-   tool-bar-markdown-writer
  - markdown記述時にツールバーを表示
-   wordcount
  - 単語カウント

## パッケージ毎の設定
###  atom-beautify
Settings > Package > Atom Beautify > Markdown からDefault Beautifierを`Remark`に設定

### atom-runner
python3を使うため、`~/.atom/config.cson`の`*`以下に次の記述を追加。

```
  runner:
    scopes:
      python: "python3"
```

日本語使用時の文字化け対策として、`~/.atom/init.coffee`に次の記述を追加。

```
process.env.PYTHONIOENCODING = "utf-8";
```

# 設定の管理
## 設定
`.atom`フォルダのリモートリポジトリを作成しておく。

## パッケージ
スターを使った管理が便利っぽい。
- `apm star --installed`でインストール済みパッケージに一括でスターが付く。
- `apm stars --install`でスターの付いたパッケージを一括インストールできる。

# 参考
- [Atom（GitHub製エディタ）に乗り換えて最初にやっておきたいこと | maesblog](http://mae.chab.in/archives/2579)
- [Atomの便利なパッケージ管理方法 – GitHubやスターを利用して他の開発環境でも使えるようにしておく | maesblog](http://mae.chab.in/archives/2605)
- [Atom をMarkdownエディタとして整備 - Qiita](http://qiita.com/kouichi-c-nakamura/items/5b04fb1a127aac8ba3b0)
- [Atomで使えるTerminalをいくつか試してみた](http://jump-up.info/others/programing/atom-terminal.html)