OmniAICreator/Qiita-1.07M huggingface dataset:
Nodebrew本体を削除する方法

最近のフロントエンド開発には必須なNode.js。異なるNode.jsのバージョンを扱いたいケースが多いので、Node.jsのバージョン管理ツールとして「[Nodebrew](https://github.com/hokaccha/nodebrew)」がお薦めです（参考「[node.jsのversionを管理するためにnodebrewを利用する](http://qiita.com/sinmetal/items/154e81823f386279b33c)」）。

ところで、Nodebrewに何か問題があった時には削除や再インストールの必要がありますが、Nodebrew本体を削除するにはどうすればよいのでしょうか？

#Nodebrew本体を削除する

Nodebrewはホームディレクトリ(/Users/myName)の.nodebrewフォルダにインストールされるので、このフォルダを削除すればNodebrewを削除できます。

![スクリーンショット 2016-03-07 13.09.05.png](https://qiita-image-store.s3.amazonaws.com/0/67884/b7e49c33-6aff-6976-f673-3f2c3d049840.png)

Nodebrewが削除される為、下記のコマンドを実行しても何の反応も出なくなります。

```bash
$ nodebrew -v
```

## 今後Nodebrewを使わないならばPATHも削除する
今後使う必要がないならば、PATHも削除しておきましょう。Nodebrewのインストール時、ホームディレクトリ(/Users/myName)の「.bash_profile」ファイルか「.bashrc」ファイルにPATHを追記したかと思いますが、それらを削除しておきます。

著者の環境では/Users/myName/.bash_profileにパスを追記していたので、.bash_profileの下記部分を削除します。

```text:.bash_profileの削除部分
export PATH=/Users/myName/.nodebrew/current/bin:$PATH
```

これで完全にNodebrewが消えます。
td-agentでエラーログの時にmail送信するconf設定例

```td-agent.conf
####                                                                                                                                                                
## Output descriptions:                                                                                                                                             
##                                                                                                                                                                  

# Treasure Data (http://www.treasure-data.com/) provides cloud based data                                                                                           
# analytics platform, which easily stores and processes data from td-agent.                                                                                         
# FREE plan is also provided.                                                                                                                                       
# @see http://docs.fluentd.org/articles/http-to-td                                                                                                                  
#                                                                                                                                                                   
# This section matches events whose tag is td.DATABASE.TABLE                                                                                                        
<source>
  type tail
  tag log_tag
  path /var/log/cron.log
  pos_file /var/log/td-agent/cron.log.pos
  format /(?<line>.+)/
</source>

<match log**>
  type notifier
  <def>
    pattern check_agent_log
    check string_find
    warn_regexp .*error*
    crit_regexp .*error*
    target_key_pattern line
  </def>
  <def>
    pattern なんかぱたーん
    check string_find
    warn_regexp .*ERROR*
    crit_regexp .*ERROR*
    target_key_pattern line
  </def>
</match>
<match notification**>
  type mail
  host [smtp server address]
  port 25
  from おれのめあど
  to だれかめあど,だれかメアド2
  subject log error!
  message %s\n %s\n %s\n %s\n %s\n
  message_out_keys target_tag,pattern,value, message_time, line
</match>

```

- td-agent.confは/etc/td-agent
- 使っているpluginは https://github.com/u-ichi/fluent-plugin-mail
TypeScriptの最新版をWebStorm (IntelliJ IDEA)で使うときの設定方法

TypeScriptの最新版をWebStorm (IntelliJ IDEA)で使うときの設定方法をメモ的にまとめます。

1. メニューから[環境設定]を開く

2. [Languages & Frameworks]→[TypeScript]を選択

3. [Compiler version] を「Custom directory」に設定し、次のパスを設定する。


```
/usr/local/lib/node_modules/typescript/lib
```

これでバンドル版ではなく、最新版のTypeScriptがWebStorm (IntelliJ IDEA)で使えます。
Pivotal Tracker | サイドメニューを小さくして使いやすくする

左上のメニューボタン ![image](https://qiita-image-store.s3.amazonaws.com/0/90607/986f6b46-80b0-7d1e-587b-2644d3c19871.png) を押すと、小さく出来る。


## Before

![image](https://qiita-image-store.s3.amazonaws.com/0/90607/7bdcaea9-8fed-35f0-827c-9c7caf95a93c.png)

## After

![image](https://qiita-image-store.s3.amazonaws.com/0/90607/731778f4-1ac2-a353-0793-ac47f012d110.png)


# 環境

- Google Chrome



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
コミュニケーション能力系の講座を受けてみた

# 受けた講座
## コミュニケーション能力２級認定講座
[日本教育推進財団監修　コミュニケーション能力2級認定講座](http://www.ca-japan.org/course2.html)
2016/1/19 @神田

## コミュニケーションとは
コミュニケーションとは意志の疎通であり、双方向で行うものである。

## 重要なこと
- 相手と信頼関係を構築すること。
- 相手の自己重要感を満たすこと。
- 他人の自己重要感を満たしてあげると、人に影響を与える存在になれる。

## 学んだこと、テクニック
- 自己重要感を満たすスポンサーシップエクササイズ。お互いに褒め合うこと。

- 言語だけでなく、非言語のコミュニケーション（身振り,声のトーンなど）にも意識を向ける。

- 自己重要感を満たすリスニングスキル（聴く力）。  
アクティブリスニング    
アイコンタクト、あいづち  
ラポールスキル（ミラーリング、ペーシング、バックトラッキング）  
リフレクティブリスニング

- 自己重要感を満たすメッセージスキル（伝える力）。  
YOUメッセージ、Iメッセージ

- 意識の５段階の理解と褒め方、叱り方。

- 相手の反応がコミュニケーションの成果である。

- 人それぞれ観念のメガネを持っているから、コミュニケーションギャップが起こる。

- コミュニケーションゲームにより、共通言語、共通意識の必要性を知る。

## 成果
- コミュニケーションへの意識が変わった。
- 上手に行うための知識、手法を学んだ。
- コストに見合うかは、学んだことの実践機会を増やして、自然にできるようになるかどうか次第。

## これから
学んだことを実践して、周りの人と信頼関係を構築する。自己重要感を満たしてあげられる存在になるのを目指す。
AD2 > link > Racing > USB電源供給 | 外部電源供給 の両方対応 (切替)

```txt:道具
Analog Discovery 2 (以下 AD2)
```

[reference manual](https://reference.digilentinc.com/analog_discovery_2:refmanual#power_supplies_and_control)

> Racing – when external power supply is in the right voltage range (PWRGD = HIGH), before WaveForms stops the USB Power Controller. During racing mode, both USB Power Controller (IC21) and External Power controller (IC26) are ON, the device drains power from whatever supply has a higher voltage (D28 and D29 work as a maxim voltage detector). The Racing mode is temporary, it ends when the FPGA is configured and communicates with the WaveForms software. During Racing mode, the power available for User Supplies is limited.

Racingという機能があるようだ。

コード関連の本では「Race Condition（競合状態)」というのがあった。RTOSの本だったと思う。

こちらのRacingは「USB電源供給 / 外部電源供給 の両方対応」のようだ。

>  During racing mode, both USB Power Controller (IC21) and External Power controller (IC26) are ON,

以下の記載もある。
> The Racing mode is temporary,

外部電源が接続されると USBから外部電源に切り替わっていく。その過程として Racing というのがあるようだ。

> If external Power Supply is attached after WaveForms started and runs several instruments, the device steps seamlessly trough USB → Racing → External modes.
AD2 > link > Power good indication output > Vext > 4.11V から 5.76V

```txt:道具
Analog Discovery 2 (以下 AD2)
```

[reference manual](https://reference.digilentinc.com/analog_discovery_2:refmanual#power_supplies_and_control)

> - Power good indication output

(45)式によると Vext が4.11V から 5.76V に入っているかの確認をしている。
筋トレ大好きな文系女学生のJava入門〜メソッド〜

#はじめに

土曜日(3/5)に東京体育館の長水路で初めて泳ぎました :swimmer: :swimmer: ！！
ほぼ毎日ジムで泳いでいるのですが、上手く泳げない上に翌朝肩が重かったです・・。疲れていましたが、翌朝も朝トレ（筋トレ&水泳）しました :muscle: :grin: :tada: :balloon: 

今回は、メソッドについてです。
段々と複雑になってきているので、丁寧に学習していきます :relieved: :relieved: 

##メソッド

メソッドとは、複数の文をまとめ、それを１つの処理として名付けたもの。

```
メソッドの定義
public static 戻り値の型　メソッド名（引数）{
　メソッドが呼び出された時に実行される処理
}
```

メソッド名は自分で考えた名前でOK！
引数は、メソッドに渡すデータのこと。


```java
1 public class Muscle {
2  public static void main(String[] args){
3   System.out.println("これからメソッドを呼び出すよ");
4   body();　　/*メソッドの呼び出し*/
5   System.out.println("メソッドの呼び出し終了！");
6 }
7  public static void body(){
8    System.out.println("プロテイン飲んでますか？");
9  }
10}
```

表示結果
これからメソッドを呼び出すよ
プロテイン飲んでますか？
メソッドの呼び出し終了！



まず、 Muscleクラスの中にmain(２行目)とbody(4行目)の２つのメソッドが定義されている。
このコードを実行すると、まず自動的にmainメソッドが実行され、「body();」でbodyメソッドが呼び出される。
bodyメソッドは自動で実行されないので、body();というようにメソッドの呼び出しが必要


***複数のメソッドが定義されていても、main()より上にメソッドが定義されていても、プログラムは必ずmain()から実行される！！！***



###戻り値
戻り値は、呼び出し元のメソッドに値を返すこと


```
値の戻し方

public static 戻り値の型　メソッド名（引き数）{
 メソッドが実行された時に動く処理
　return 戻り値;
}
```

returnとあるが、returnの後ろにある値が呼び出し元に戻すことができる。

return 変数名; / return 100;  / return "hi";こんな感じですかね


```java
1 public class Muscle{
2  public static int add(int x, int y){   /*戻り値がintだからint型にする*/
3   int answer = x + y;
4   return answer;
5  }
6 public static void main(String[] args){
7   int answer = add(10,20);          /*addメソッドの呼び出しで30になる*/
8   System.out.println("10+20="+answer);
9  }
10}
```

表示結果は
10+20=30


***return文の後に文を書いたらコンパイルエラーになる（メソッドの終了も行うため）***

####オーバーロード
オーバーロードとは、同じ名前のメソッドを定義すること


```java
1 public class Muscle{
2  public static int body(int x, int y){  /*１つめのbodyメソッド*/
3   return x + y;
4  }
5  public static int body(String x, String y){　/*２つめのbodyメソッド*/
6   return x + y;
7  }
8  public static int body(double x, double y){　/*３つめのbodyメソッド*/
9   return x + y;
10 }
11 public static void main(String[] args){
12  System.out.println(add(10,20));　　　　　　　/*１つめのbodyメソッドが呼び出される*/
13  System.out.println(add("Muscle","World"));  /*２つめのbodyメソッドが呼び出される*/
14  System.out.println(add(2.0,1.3));           /*３つめのbodyメソッドが呼び出される*/
15  } 
16}
```

実行結果
30
MuscleWorld
3.3


このように、それぞれの型が異なれば同じ名前のメソッドを複数定義することができる :exclamation: :exclamation: 


```java
1 public calss Muscle{
2  public static int body(int x, int y){
3   return x + y;
4  }
5  public static int body(int x, int y, int z){
6   return x + y + z;
7  }
8  public static void main(String[] args){
9   System.out.println("50+30=" + body(50,30));
10  System.out.println("50+30+20=" + body(50,30,20));
11 }
12}
```

実行結果
50+30=80
50+30+20=100


個数が違う時もオーバーロードができる :exclamation: :exclamation:
homebrew caskつかってたら ( ! )ってついてた件

homebrew caskで一覧表示してたら、(!)って付いてるやつがあった。

```bash
$ brew cask list
alfred				    dash				hipchat				    magican				xtrafinder
android-file-transfer		    firefox-ja				imagealpha			    skype
appcleaner			    google-chrome			imageoptim			    sophos-anti-virus-home-edition (!)
charles				    google-drive			kobito (!)			    vagrant
coteditor			    google-japanese-ime			licecap				    virtualbox
```

githubでも同じ質問してる人がいたので、回答を読んだら、
homebrew-caskで管理しなくなったアプリらしい。

**( ´_ゝ｀)ﾌｰﾝ なるほど... ちょっと悲しい感じも否めない...**

参照：
https://github.com/caskroom/homebrew-cask/issues/13160
NeoVimをソースからインストール

# NeoVimをソースからインストール

## 環境

* CentOS 7.1.1503

## 準備

[Building Neovim](https://github.com/neovim/neovim/wiki/Building-Neovim)の[CentOS / RHEL / Fedora](https://github.com/neovim/neovim/wiki/Building-Neovim#centos--rhel--fedora)に書いてある通りにライブラリをインストールする。

```
sudo yum -y install libtool autoconf automake cmake gcc gcc-c++ make pkgconfig unzip
```

## インストール

[Installing Neovim](https://github.com/neovim/neovim/wiki/Installing-Neovim)の[Install from source](https://github.com/neovim/neovim/wiki/Installing-Neovim#install-from-source)に書いてある通りにする。

```
rm -r build/
make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX:PATH=$HOME/local"
make install
```

最後に `PATH` を通しておく。
全角英数字を半角英数字にするシェルスクリプト

##環境

Mac OS X 10.10.5

##使い方

引数のディレクトリ以下のファイルを再帰的に探索して、全角英数字を半角英数字に変更するスクリプトです。`zen2han.sh ディレクトリ` のようにディレクトリを指定します。


```bash:zen2han.sh

#!/bin/bash

#指定ディレクトリの引数がなければエラー処理で終了する
if [ ! -d  "$1" ]; then
  exit 0
fi

#指定ディレクトリ以下のファイルだけを再帰的に取得する
#for doublesize in $(find $1 -type f)
#上記はファイル名にスペースがあると失敗する。理由は文字列として評価参照されるので、文字列のスペースに意味を含んでしまうから

#find $1 -name '*.PNG' -or -name '*.png' -type f | while read doublesize
#上記はファイル種類を指定する方法

find $1 -type f | while read doublesize
#上記はすべてのファイルのみをfindする指定

do
    #perlで全角英数を半角にする。Mac OS X のUTF-8環境に合わせて、perlもUTF-8指定しておく
    singlesize=`echo ${doublesize}|perl -CIO -Mutf8 -Mopen=:utf8 -ple 'tr/\x{FF01}-\x{FF5e}/\x21-\x7e/'`
    #mvコマンドでファイル名を変更する
    mv ${doublesize} ${singlesize}
    #mvコマンドでエラーを検出したら...
    if [ $? = 0 ]
        then
            echo "成功:"${singlesize}
        else
            echo "失敗:"${doublesize}
            echo "このファイルを確認してください。"
    fi
done

```
TSVファイルをシェルで配列に読み込む #チートシート@シェル芸

#TSVファイルをシェルで配列に読み込む

```sh
whle read line
do
    row=(`echo ${line}`)
    echo ${row[0]}" "${row[1]}"値の処理 ..."
done < "filename"
```

`echo ${line}` を｀｀で囲むのがミソ

TSVでも空白でも、あーら不思議。csvreader みたいになる。
(ただし、IDファイルとか、空白や日本語がないものに限る、シェルで扱うの他のコマンドに渡せる引数の値としてとかを想定)

#さらにディレクトリ配下のファイルをすべて1行ずつ読みだして、CSVとして処理するとこうなる


```sh
for filename in `ls ./*.tsv`
do
	whle read line
	do
	    row=(`echo ${line}`)
	    echo ${row[0]}" "${row[1]}" 値の処理..."
	done < ${filename}
done
```

` ls ＊．tsv　` でtsvを拡張子に持つファイルが列挙された結果、ファイル名が自動的に配列となって$filenameにとりだされている

ls の変わりに　find でもっと条件をしていしてもよいです。


たとえば、データベースから出したTSVがあるディレクトリにたくさんあって、そのIDでだけをとりだしてモニョモニョとか、おもむろに1回だけしたい作業とかによく使うのでメモ。
2016年のハッカソン開催情報まとめ！ - 1月/2月分

量が増えたので1月、2月分を切り出しました！

[2016年のハッカソン開催情報まとめ！](http://qiita.com/satoshi0212/items/a6e2cd19b3ee3ddc47da)



# 1月

### [タカラトミー おもちゃハッカソン](http://www.takaratomy.co.jp/event/toyhack2015/)
- アイデアソン(予選) 1月10日
- アイデア検討MTG(予選通過チームのみ) 1月23日
- ハッカソン(本選) 1月30日-31日

### [はじめてのハッカソン × html5j - Web プラットフォーム部〜ゆるっと全力でハッカソン★](https://hackathon-firststep.doorkeeper.jp/events/36333)
- 1月16日

### [Python mini hack-a-thon 雪山合宿 2016](http://eventdots.jp/event/573924)
- 1月22日-24日

### [第12回ヘルスケアハッカソン：日本の健康の最大の敵を制圧せよ(高血圧)](http://peatix.com/event/136272/view)
- 1月23日-24日

### [HPH 2015 一次産業 × ＩＴ ハッカソン in SAPPORO](https://hph2015.doorkeeper.jp/events/36183)
- 1月23日-24日

### [[大阪開催] DevOps ハッカソン](http://devopsjp.connpass.com/event/23847/)
- 1月23日

### [HPH 2015 一次産業 × ＩＴ ハッカソン in SAPPORO](https://hph2015.doorkeeper.jp/events/36183)
- 1月23日-24日

### [Global Game Jam 2016](http://ggj.igda.jp/)
- 1月29日-31日

### [Webとクルマのハッカソン](http://www.kddi-ri.jp/hackathon)
- 1月30日-31日

### [法社会制度ハッカソンβ (シェアリングエコノミー編)](http://peatix.com/event/142057/view)
- 1月31日


# 2月

### [アイデアソン・ハッカソン【家庭のエネルギー管理アプリ】](http://peatix.com/event/142884?utm_campaign=search&utm_medium=web&utm_source=results&utm_content=%E5%AE%B6%E5%BA%AD%E3%81%AE%E3%82%A8%E3%83%8D%E3%83%AB%E3%82%AE%E3%83%BC%E7%AE%A1%E7%90%86%E3%82%A2%E3%83%97%E3%83%AA%3A35.69%2C139.69%3A%3A0%3A142884)
- 2月6日-7日


### [枚方アイデアソン・ハッカソン](http://peatix.com/event/132516)
- アイデアソン 2月7日
- ハッカソン 2月14日

### [(第61回)Python mini Hack-a-thon](http://eventdots.jp/event/579661)
- 2月13日

### [HACKDAY 2016](http://hackday.jp/)
- 2月13日-14日

### [Telecom Application Developer（テレコムアプリケーション開発者） ハッカソン](http://tadhack.com/2016/?lang=ja)
- 2月13日-14日

### [第２回IBM Watson日本語版ハッカソン](http://everevo.com/event/28673)
- Day1 2/13(Watson API日本語版勉強会＋アイディアソン)
- Day2-3 2/27-28(ハッカソン)
- Day4 3/10(DemoDay)

### [本当に走るハッカソン](https://www.atpress.ne.jp/news/82103)
- 2月20日-21日

### [宇宙アイデアソン in 福井 2016](https://upgradefukui.doorkeeper.jp/events/36715)
- 2月20日

### [Two Weeks VolunTech Action〜二週間でエンジニアと未来を創ろう〜](https://code4tottori.doorkeeper.jp/events/38469)
- 2月21日-3月5日

### [【17年卒学生限定】PR TIMESが持つ2万件以上にのぼるビックデータを解析してハックしよう！](http://eventdots.jp/event/578873)
- 2月22日-24日

### [レコチョクハッ歌祭](http://connpass.com/event/27265/)
- アイデアソン 2月23日(火) 19:00 - 22:00（受付開始18:30）
- ハッカソン 2月28日(日) 10:00 - 20:00（受付開始9:30）

### [歩行者移動支援ハッカソン＠松江 ～歩行者のバリア解消に役立つサービスを考えよう～](https://e1814a1ccb3512624bd909cb8e.doorkeeper.jp/events/38678)
- 2月24日

### [[福岡開催] DevOps ハッカソン](http://devopsjp.connpass.com/event/24266/)
- 2月27日

### [北海道オープンデータハッカソン サッポロ・オープンデータGIS大賞 in 札幌](https://opendata.doorkeeper.jp/events/37595)
- 2月27日

### [PostgreSQL newbie hackathon 合宿【2/27-28】](http://eventdots.jp/event/577981)
- 2月27日-28日

### [声優ハッカソン~楽天アプリ市場xUnity共催　Rakkathon in Tokyo 2~](https://rakutenwebservice.doorkeeper.jp/events/37786)
- 2月27日-28日

### [PostgreSQL newbie hackathon 合宿【2/27-28】](http://eventdots.jp/event/577981)
- 2月27日-28日

### [花ちゃんと筋肉hshs IoT勉強会 #1](http://eventdots.jp/event/580945)
- 2月28日


# 備考

こちらもおすすめ。
[Mashup Awards 11 投稿まとめ！！](http://qiita.com/satoshi0212/items/aabcedc4f95ea01a819b)
RakeタスクとかでmysqlのLOAD DATA LOCAL INFILEを呼びたい場合

こういうSQLをrakeタスクで実行しようとすると

```sql

LOAD DATA LOCAL INFILE 'members.csv' INTO TABLE members

```

エラります

```
rake aborted!
ActiveRecord::StatementInvalid: Mysql2::Error: The used command is not allowed with this MySQL version:
LOAD DATA LOCAL INFILE 'members.csv' INTO TABLE members
```

どうしても実行したい場合には、
database.ymlにlocal_infileの設定行が必要です。

```yml

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  database: foo
  username: var
  password: foovar
  host: host.foovar.com
  local_infile: true

```

合わせて読みたい。
[MySQL 外部ファイルからのデータインポート方法 - LOAD DATA ... INFILE 構文および mysqlimport コマンド](http://iandeth.dyndns.org/mt/ian/archives/000123.html#b)
Oracle 12cのマルチテナント機能を使ってプラガブル・データベース（PDB）を一気に60個作成する方法


ハンズオン・トレーニング用に機械学習機能を有効化したデータベースを大量に作成したときの方法です。

SQL Developerでコンテナ・データベースに接続し、SQLワークシートで下記のPL/SQLを実行。それだけです。ここでは"developer0"というPDBをdeveloper1, developer2という具合に60個複製し、その後R/Wモードでオープンしています。

```PL/SQL
BEGIN
	for i in 1..60 loop
		execute immediate 'create pluggable database "developer' || i || '" from "developer0"
			STORAGE UNLIMITED
			TEMPFILE REUSE
			FILE_NAME_CONVERT=NONE';
		execute immediate 'alter pluggable database "developer' || i || '" open read write';
   end loop;
END;
```

ちなみにハンズオン終了後には下記のように一気に削除します。

```PL/SQL
BEGIN
	for i in 1..60 loop
		execute immediate 'alter pluggable database "developer' || i || '" close immediate';
		execute immediate 'drop pluggable database "developer' || i || '" including datafiles';
   end loop;
END;
```
JavaScript のクラス構文で setter/getter をオーバーライドするとき

たとえば以下のような 数値 を格納するクラスがあって、それを継承した 整数 を格納するクラスを作る場合。

```js
class NumberHolder {
  constructor(value) {
    this.value = value;
  }

  set value(value) {
    this._value = +value || 0;
  }

  get value() {
    return this._value;
  }
}

class IntHolder extends NumberHolder {}
```

一見、`set value` だけをオーバーライドすれば良さそうだけど、実際は `get value` もオーバーライドしないといけない。

```js
class IntHolder extends NumberHolder {
  set value(value) {
    super.value = value|0;
  }

  get value() {
    return super.value;
  }
}
```

## 理由

クラス構文で setter と getter をそれぞれ定義しているように見えるけど、実際はプロパティとして以下のようにニコイチで定義される。

```js
Object.defineProperty(NumberHolder.prototype, "value", {
  set(value) {
    this._value = value;
  },
  get() {
    return this._value;
  },
  enumerable: false,
  configurable: false
});
```

サブクラスで setter だけをオーバーライドしようとすると、以下のように getter のないプロパティを定義してしまう。

```js
Object.defineProperty(IntHolder.prototype, "value", {
  set(value) {
    this._value = value|0;
  },
  // get() がない
  enumerable: false,
  configurable: false
});
```
小数点以下の桁数を揃えたい時

ディレクトリを作成したい時なんかにmicro秒を使いたい時があって
どうやったかのメモ

```php
$time_ar = explode(" ",microtime());
echo "UnixTime:{$time_ar[1]}<br>\n";
echo "MicroTime:{$time_ar[0]}<br>\n";
echo "U+M:".$time_ar[0] + $time_ar[1];
```

普通にこの様に足してしまうと

```
UnixTime:1457315839
MicroTime:0.57940100
U+M:1457315839.5794
```
と出たり

```
UnixTime:1457315839
MicroTime:0.57900100
U+M:1457315839.579
```
と出たり

で、桁数が安定せず見た目が良くないので

```php
$time_ar = explode(" ",microtime());
echo "UnixTime:{$time_ar[1]}<br>\n";
echo "MicroTime:{$time_ar[0]}<br>\n";
echo "U+M:".str_pad($time_ar[0] + $time_ar[1],15,'0',STR_PAD_RIGHT);
```

って感じでやると
```
UnixTime:1457315839
MicroTime:0.57900100
U+M:1457315839.5790
```
こうなって桁が揃って見栄えがいい
Electronでアプリ内部にWebサーバーを立てる

## 概要
Electronで作ったアプリからJavascriptでgoogleのAPIを使おうとするとローカルファイルを読み込んだだけではドメインの制限がかかってしまい使えません。
Electronはnodejsで書くんだからhttpサーバー立ててローカルに読み込みに行けばいいじゃないかと。

Electronは下記を参考にしました。
[30分で出来る、JavaScript (Electron) でデスクトップアプリを作って配布するまで](http://qiita.com/nyanchu/items/15d514d9b9f87e5c0a29)


## やったこと

### アプリ内部でWebサーバー
静的ファイルをロードしたいだけなので`Express`などは使わず`node-static`と`http`を使ってサーバーを立てます。

```js:mian.js
"use strict";

var nodeStatic = require('node-static');
var file = new nodeStatic.Server(__dirname + '/html');

require('http').createServer(function (request, response) {
    request.addListener('end', function () {
        file.serve(request, response);
    }).resume();
}).listen(7170);//ポートは空いていそうなところで。

var app = require('app');

var mainWindow = null;

app.on('window-all-closed', () => app.quit());
app.on('ready', () => {
    mainWindow = new BrowserWindow({
        width: 480,
        height: 600,
        resizable: false,
        alwaysOnTop: true,
        movable: false
    });

    //ローカルで立てたサーバーにアクセス
    mainWindow.loadURL('http://localhost:7170/index.html');

    // ウィンドウが閉じられたらアプリも終了
    mainWindow.on('closed', () => mainWindow = null );

});
```

### googleAPIでの設定

Google Developers ConsoleでAPI Manager->認証情報->OAuth 2.0 クライアント ID
で「承認済みの JavaScript 生成元」に`http://localhost:7170`を追加。

## 問題点
Webサーバーを立てているだけなので、ブラウザを使って`http://localhost:7170`にアクセス出来てしまう。
正規表現の結果を true or false で返したい時

正規表現使う時は`if /foo/ = foo`みたいな書き方で正確に真偽値がいらないんですが、何かメソッドとして実装する時はちゃんと真偽値を返した時がありますよね。

## やり方

```.rb
!!(foo =~ /foo/) #=> true
```

`!!`は強制的に`true`か`false`を返す関数です。

## やり方その2

```.rb
/foo/ === foo #=> true
```

これでマッチしてれば`true`が返ります。

## 注意事項

```.rb
!!(/foo/ =~ foo) #=> true
foo === /foo/ #=> false
```

のように `===` を使う場合は順番を逆にできないので気をつけましょう。
Windows > スタートアップ時に.batファイルを実行する

```txt:動作確認
Windows 7 pro 32bit
```

PC起動時にレジストリを書き換えたいとする。
.batファイルにて書き換えのスクリプトを用意している。

PC起動時にそれを実行する方法は。

## スタートアップに登録

1. .batファイルのショートカットを準備
2. Startup に1のショートカットを移動

Administratorでは上記の方法で.batスクリプトの自動実行を確認した

## 他の方法

以下の方法もあるようだが、こちらでは未確認。上記の方法でとりあえず動いているので以下の動作確認は保留している。

gpedit.msc での設定
http://piyopiyocs.blog115.fc2.com/blog-entry-890.html

js での設定
http://language-and-engineering.hatenablog.jp/entry/20100929/p1
VLANの設定ではまってしまった

## 導入
AWSばかり使っているとVLANってなんだ？って感じです。
スイッチのポートが足りなくて２つのネットワークを１つのポートにまとめて、IPアドレスを２つつけてみたところ通信が出来ません。なぜ・・・？
よくある感じで`ifcfg-eth1`と`ifcfg-eth1:1`を設定しただけです。
サーバーとつながっているスイッチはL2スイッチです。
・・・・・
どうもVLANの設定が必要らしい。下記URLを読んで勉強。分かってしまえば納得。
[今さら聞けない「VLANの基本」](http://news.mynavi.jp/series/vlan/001/)

## 環境
CentOS6.5
10.100.20.0/24と10.100.21.0/24がそれぞれVLAN20,VLAN21に属している。
元々

```
eth1, eth5 -> bond1 として10.100.20.0/24
eth2, eth6 -> bond2 として10.100.21.0/24
```

にそれぞれ属していた。

## はまったこと
bond1, bond2のbondingされている方にVLANの設定をしたら動かなかった。

## 解決方法
eth1, eth5の方にVLAN設定をしてbond1, bond2に設定した。
bond1, bond2の設定はそのまま。

```
# yum install vconfig

# cat /etc/sysconfig/network
~略~
VLAN=yes
VLAN_NAME_TYPE=DEV_PLUS_VID_NO_PAD

# service network restart

# vconfig add eth1 20
# vconfig add eth1 21
# vconfig add eth5 20
# vconfig add eth5 21

# cat /proc/net/vlan/config
VLAN Dev name	 | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth1.20        | 20  | eth1
eth5.20        | 20  | eth5
eth1.21        | 21  | eth1
eth5.21        | 21  | eth5

# cp /etc/sysconfig/network-scripts/ifcfg-eth1 /etc/sysconfig/network-scripts/ifcfg-eth1.20
# cp /etc/sysconfig/network-scripts/ifcfg-eth1 /etc/sysconfig/network-scripts/ifcfg-eth1.21
# cp /etc/sysconfig/network-scripts/ifcfg-eth5 /etc/sysconfig/network-scripts/ifcfg-eth5.20
# cp /etc/sysconfig/network-scripts/ifcfg-eth5 /etc/sysconfig/network-scripts/ifcfg-eth5.21
# rm /etc/sysconfig/network-scripts/ifcfg-eth1
# rm /etc/sysconfig/network-scripts/ifcfg-eth5


# cat /etc/sysconfig/network-scripts/ifcfg-eth1.20
DEVICE=eth1.20（←これを変更）
HWADDR=XX:XX:XX:XX:XX:XX
TYPE=Ethernet
UUID=7a4e13a3-2b3d-416f-b1be-b2a9xxxxxxxx
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
MASTER=bond1
SLAVE=yes

# cat /etc/sysconfig/network-scripts/ifcfg-eth1.21
DEVICE=eth1.21（←これを変更）
HWADDR=XX:XX:XX:XX:XX:XX
TYPE=Ethernet
UUID=7a4e13a3-2b3d-416f-b1be-b2a9xxxxxxxx
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
MASTER=bond2（←これを変更）
SLAVE=yes

# cat /etc/sysconfig/network-scripts/ifcfg-eth5.20
DEVICE=eth5.20（←これを変更）
HWADDR=XX:XX:XX:XX:XX:XX
TYPE=Ethernet
UUID=7a4e13a3-2b3d-416f-b1be-b2a9xxxxxxxx
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
MASTER=bond1
SLAVE=yes

# cat /etc/sysconfig/network-scripts/ifcfg-eth5.21
DEVICE=eth5.21（←これを変更）
HWADDR=XX:XX:XX:XX:XX:XX
TYPE=Ethernet
UUID=7a4e13a3-2b3d-416f-b1be-b2a9xxxxxxxx
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
MASTER=bond2（←これを変更）
SLAVE=yes

# service network restart
```

## 課題
とりあえず動いたが、サーバーを再起動すると再設定する必要がある。
ROSパッケージから自作pythonモジュールを呼び出す


自作のROSに関係ない関数をまとめたものをROSパッケージでImportする方法がよくわからんので，今までは専用のROSパッケージを作ってそこのをImportしてたけど
やっぱちゃんと独立させたいなと思ってそれっぽい方法をトライアンドエラーで試してみたメモ．

# ファイル構造
```
catkin_ws
├─ build
├─ devel
└─ src
   ├─ my_py_utils
   │  ├── __init__.py(空ファイル)
   │  └── util_functions.py
   └─ my_ros_pkg
      ├── CMakeLists.txt
      ├── __init__.py(空ファイル)
      ├── package.xml
      └── src
          ├── __init__.py
          └── robot_controller.py
```

だいたいこんな感じ．
ここで，robot_controller.pyからutil_functions.pyの中の関数(do_something)を使うことを考える．

# 試してみたもの

## とりあえず適当にやるパターン

robot_controller.pyに

```py
from my_py_utils.util_functions import do_something 
```
を入れる．
↓

```py
ImportError: No module named my_py_utils.util_functions
```
になる．


## 相対パスで試すパターン
robot_controller.pyに

```py
from ...my_py_utils.util_functions import do_something 
```
を入れる．
↓
pycharmさんは認識してくれるけど，いざ```rosrun```すると，

```py
ValueError: Attempted relative import in non-package
```
になる．

## ちゃんとパスを教えてあげるパターン
robot_controller.pyに

```py
import sys
sys.path.append('/home/[UserName]/catkin_ws/src')
from my_py_utils.util_functions import do_something 
```
を入れる．
↓
ちゃんと動く！

# 最後に

結局普通のpythonとしてimportする方法しか試してないけど，絶対パス指定とかめんどくさいし，なんかROSのpackage.xmlとか使えばいいんじゃないか説が自分のなかであるのでまた試してみたい．（ていうか誰か教えてほしい）
あと，思ったよりpythonとかROSのことあんまりわかってなくて(´・ω・｀)ってなった．
がんばろう．
Visual Studio Code に Proxy を設定する方法

Visual Studio Code に Proxy を設定する方法です。

* Visual Studio Code 1.22.1


## ユーザー設定を開き、http.proxy を追記する
 
会社内等 Proxy環境でExtensionを導入する場合の設定です。
`Ctrl + ,` にて ユーザー設定を開きます

```settings.json
{
    "http.proxy": "http://proxy.example.com:8000",
    "http.proxyStrictSSL": false
}
```

http.proxy にプロキシサーバのアドレスとポートを設定してください。

## Extension を確認する

プロキシー環境で拡張をインストールし、その後拡張一覧を確認してみましょう。

`Ctrl + Shift + P` で show installed extension を打ち込んで Enterキーを押す、一覧が表示されます。

<img width="313" alt="2018-04-11_13h25_52.png" src="https://qiita-image-store.s3.amazonaws.com/0/1982/2a3f7e29-ae31-a218-d2ae-140d20527f90.png">
逆引きできないホストからのメール受信拒否

## 参考

* [PostfixのセキュリティーとSpam対策 | UNIXLife](http://unixlife.jp/linux/centos-6/postfix-secure-spam.html)
* [postfixアクセス制御: ITNote](http://kisekiit.seesaa.net/article/226142927.html)

## 設定

```diff:/etc/postfix/main.cf
 smtpd_client_restrictions =
    permit_mynetworks,
+   reject_unknown_client,
    permit
```

## ログ確認

```bash:
$ tail -f /var/log/mail.* | grep rejected
```

> Mar  7 09:54:12 mx.srv1 postfix/smtpd[29547]: NOQUEUE: reject: RCPT from unknown[123.50.215.159]: 450 4.7.1 Client host rejected: cannot find your hostname, [123.50.215.159]; from=<error_mail@vixii.co> to=<user1@myserver.hoge.jp> proto=SMTP helo=<[123.50.215.159]>

## 受信を例外的に許可したい場合

```diff:/etc/postfix/main.cf
 smtpd_client_restrictions =
    permit_mynetworks,
+   check_client_access hash:/etc/postfix/access,
+   reject_unknown_client,
    permit
```

* /etc/postfix/access 

```bash:/etc/postfix/access
## IP Address Rule
22.22.22        OK # 22.22.22.0/24

#200.189.73.2            REJECT

# Domain Rule
myserver.com            OK
mydomain.jp             OK

# Address Rule
#testaa@examples.com     OK
#spam@spam.com           REJECT
```

```bash:設定反映
postmap /etc/postfix/access
service postfix restart
```
【AWS】cliでEC2からRDSに接続する【postgresql】

cliが苦手でRDS初心者なエンジニアです。つまづいたので、備忘録としてまとめ。

**前提：**

- EC2ひとつ、RDSひとつが用意されている
- EC2にSSH接続している

特に何も考えずに、

    $ psql

をやると次のようなエラーが出るはず・・・

    psql: could not connect to server: No such file or directory
          Is the server running locally and accepting
          connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

**手順はふたつ**

- EC2にRDS用SecurityGroupの設定
- 間違えずにpsqlコマンドをたたく

### EC2にRDS用SecurityGroupの設定

1. EC2のコンソールを開く
2. EC2に紐付いているSecurityGroupを探して選択
    - InstanceのDescriptionタブから飛んでも良い
    - 直接左ペインのSecurityGroupsから辿っても良い
3. 所望のSecurityGroupにたどり着いたら、InboundタブにてEditボタン選択
4. 下のように設定できればOK
![postgre_setting_sg.PNG](https://qiita-image-store.s3.amazonaws.com/0/77327/e8f8c0d9-31bb-79ad-c0bb-ed471dd7dd9a.png)

＊Sourceの設定が0.0.0.0/0になっていて、誰でもアクセスできるようになっているので、適宜アクセスする人を絞ってください

### 間違えずにpsqlコマンドをたたく

1. 必要な情報をRDSのコンソールで確認する（ここで必要なのはRDSのEndpointとUsername）
![RDS_setting.PNG](https://qiita-image-store.s3.amazonaws.com/0/77327/32074bed-ea4d-7599-7ddd-0ed1ce1314a0.png)

2. ↓でいけるはず(-dを省略した場合はUsernameと同じ名前のDBとして認識されるらしい)

        $ psql -h [RDSのエンドポイント] -U [RDSのUsername] -d[RDSのDB NAME]

3. cliで"[ec2-user@ip-**-*-*-** ~]"が"postgres=>"になっていれば接続成功

＊接続しようとしたときにエラーが出るときは、

    $ psql --help

でオプションを確認する（実際にネットで調べたものが間違っていて、2,3回やり直しました）

### おまけ

- RDSから抜ける

        $ \q

- DBにログインする

        $ \c [DB名]

- DB一覧の確認

        $ \l

- DB内のテーブル一覧の確認（ログイン時）

        $ \z
スプリントごとのふりかえりチートシート

[Software in 30 Days スクラムによるアジャイルな組織変革"成功"ガイド](http://amzn.to/1LKvVj4)を参考に作成。

- メンバー同士が協力しあい、うまく働けていたか？
- チームの予想に対して、成果は多かった？少なかった？
- メンバーは仕事をするのに十分なスキルを持っていたか？必要な設備は準備できていたか？
- メンバーは要求を理解していたか？
- チームは、スプリントを要求どおりに完了できたか？
- 次のスプリントに取り組むにあたって、改善すべきことは？やめるべきことは？
- チームは、スクラムを使うことをどう思っているか？

それぞれの回答について（特にできなかったことについて）理由を確認し、深堀りしてみよう。
マネージャーがスクラムの導入を支援するか阻止するかを明らかにする質問表

[Software in 30 Days スクラムによるアジャイルな組織変革"成功"ガイド](http://amzn.to/1LKvVj4)を参考に作成。

分野 | 想定 | 合意 | まぁ合意 | わからない | 合意しない
---|---|---|---|---|---
やる気 | 人が最も生産的になるのは、自分で自分の仕事を管理できているときだ | | | |
 | 自分で約束したことの方が、他人が自分の代わりに約束したことよりも大事だと感じる | | | |
 | 忙しすぎると、創造的な仕事をするのは難しい | | | |
 | 部下が常にベストをつくせるように環境を整えるのが私の仕事だ | | | |
 | 「もっと働け」というプレッシャーが続くと、仕事の質が低下していく | | | |
チーム | 個々がばらばらで仕事をするよりも、チームで働いたほうが生産的である | | | |
 | チームが幅広い機能横断的なスキルを持っていたほうが、プロダクトはより健全になる。スキルには、サポート・保守・開発・品質管理・マーケティング・ユーザビリティなどを含む | | | |
 | チーム構成を変えると、一時的に生産性が下がる | | | |
生産性 | チームや個人が仕事にベストを尽くせるのは、割り込みがないときである | | | |
 | チームが改善するのは、問題を自ら解決し、実践を通じて学ぶときである | | | |
 | チームのコミュニケーションに最も適した方法は、顔を合わせたオープンなコミュニケーションである | | | |

上記の想定に合意できないマネージャーは、従来の「予測型」の開発プロセスを好んでいる。
組織がスクラムを導入したとしても、そのマネージャーは、

- チームの代わりに納期にコミットし、あとでチームを無理に説得する。
- メンバーにチームの同意なく勝手にタスクを割り当てる。
- 仕事のやり方やスケジュールにあれこれ指示をしたり、プレッシャーを与えたりする。
maven でモジュール化するときのコマンド

# モジュール化するプロジェクトで最初にやること（Eclipse用）

いつも使うので忘れぬようにメモ

## ルートプロジェクト作成

```
mvn -X archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=pom-root -DarchetypeVersion=RELEASE -DgroupId=[グループID] -DartifactId=[アーティファクトID] -Dversion=[バージョン]
```

## 子モジュール作成

```
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=RELEASE
```

## eclipse プロジェクト化

子モジュールのディレクトリに移動して

```
mvn eclipse:eclipse
```
GitHubのPull Request、Issuesにテンプレートを適用する

2016年2月18日にGitHubのPull RequestとIssuesの投稿にテンプレート機能が追加された。
https://github.com/blog/2111-issue-and-pull-request-templates

今まではPull RequestやIssuesを作る時の投稿内容にはテンプレート機能がなく、人によって内容がマチマチだったり、プロジェクトで記載内容のルールはあるものの形骸化されてしまったり、、なんてことがあった。これによりレビューに必要な情報が不足していてレビューイ、レビュアー間で余計なコミュニケーションコストが発生してしまいレビューがスムーズに進まない、、ということに繋がっていた。
だが、今回のテンプレート機能が追加されたことにより、投稿内容の粒度を揃えレビューに必要な情報をテンプレートに則って全員が漏れなく記述できる、新規参画者がPull Request、Issuesを出す時に迷わなくなるといった恩恵を受けることが可能になり、レビューをスムーズに進められることになると思う。

テンプレートの適用は非常に簡単で、リポジトリのルートディレクトリに「PULL_REQUEST_TEMPLATE」もしくは「PULL_REQUEST_TEMPLATE.md」というファイル名でテンプレートファイルを配置するだけでOK。以下試しにやってみた。

# 1. リポジトリのルートディレクトリにテンプレートファイルを作成する
リポジトリのトップページでNew Fileボタンをポチる。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/23101/0e3fd8c2-812a-1095-8f56-d6de63f9d86d.png)

<br />
ファイル名に「PULL_REQUEST_TEMPLATE.md」もしくは「PULL_REQUEST_TEMPLATE」を入力する。
テンプレートはプロジェクトに合ったものを入力する。ここでは以下のようなテンプレートを作ってみた。ちなみに、テンプレートには@メンションで特定の人を予めつけておいたり、#XXXで特定のプルリクへの参照リンクを予めつけておいたりも出来る。
![2.png](https://qiita-image-store.s3.amazonaws.com/0/23101/2404bbf4-5ff9-e8ae-616d-3bdcd960a733.png)

<br />
テンプレートをプレビューするとこんな感じ。
![3.png](https://qiita-image-store.s3.amazonaws.com/0/23101/b16671bf-a2b7-a375-ff38-41d7982623ce.png)

<br />
Commit new fileボタンをポチる(テンプレートファイルの作成)。
![4.png](https://qiita-image-store.s3.amazonaws.com/0/23101/4971a090-8238-ec20-74e5-32ef7b1f76a2.png)

# プルリクを出してテンプレートを確認してみる
適当にブランチを作って確認してみた。ちゃんとテンプレートが効いてるのがわかる。
![5.png](https://qiita-image-store.s3.amazonaws.com/0/23101/298f1705-42df-f6ca-1423-246306785ede.png)

# 参考にしたサイト
https://help.github.com/articles/creating-a-pull-request-template-for-your-repository/
※GitHub公式ヘルプ
https://github.com/blog/2111-issue-and-pull-request-templates
※GitHub公式ブログ
jspm + gulp-webserverなボイラープレートを作った


Githubのリポジトリはこちら
https://github.com/boilerplate-garage/jspm-gulp-webserver

## jspmについて
jspm (http://jspm.io/) は簡単に言うとnpm, bower, Githubに対応したパッケージマネージャなのだけれど、さらに加えてSystemJSというBabelなどのES6トランスパイラを使いつつモジュールローディングもできるツールも一緒になっているのでもはやbrowserifyもいらないという素晴らしい子。

いちから始める場合にはこの記事が詳しい
[jspmで始めるES6生活](http://qiita.com/ledmonster/items/6b4b44ccb72d5e48df9c)

## 経緯
ボイラープレートを作った経緯としてはjspmを使った開発をしていたときに、最新版のGoogleChromeがローカルからのファイルの読み込み（`file:///...`の形式）をCORSとしてブロックするようになってしまっていて、ブラウザからファイルを開く形で開発するのが純粋に面倒くさくなったというのがひとつある。

gulp-webserverのようにローカルにサーバを立ててしまえば、もはやそんなことは気にしなくていいので楽になるはず。（gulpfile.jsはかかなきゃいけなかったけど、、、）

## セットアップ＆起動
テキトウに何処かのディレクトリにクローンなりmaster.zipをダウンロードなりしておく。
基本的には上のディレクトリに準備してあるREADME.mdに従っておけばオーケー。

```bash:bash
$ npm install
...

$ jspm install
...
```
そんでもって上のコマンドでnpmとjspmのパッケージ群をそれぞれインストールする。
npmは基本的にgulpのためだけに使っている感じ。

```bash:bash
$ gulp
```
起動はこれだけ

## そのほか
- 申し訳程度にSassのコンパイルタスクもgulpfile.jsの中に含めてあるので、`app/styles`以下のscssファイルをいじくると結合されたものが`app/style.css`に吐き出される。

## 所感
jspmはES6もぱぱっと使えてBrowserifyより便利かも、と思ったフシもあったけれど生CSSはこのご時世絶対書きたくない人間なのでどうやってjspmとそのあたりのトランスパイラーを組み合わせるべきかと考えると最終的にはまだgulpみたいなタスクランナーに頼らざるを得なかった。とりあえずはボイラープレートもまだ改良していくつもりなのでよしなに。
技術英語 > Make it fast, Commander. / Take your time. / meet the deadline

@ Star Trek Voyager > MANEUVERS

ワープで逃げようとする敵を追おうとするが、あたふたするChakotayに対してJanewayが

> Make it fast, Commander.

拙速はたいてい失敗する。

<hr>
拙速ではなく、きちんと個々のものにけりをつけて欲しい時

Take your time.

http://ejje.weblio.jp/content/Take+your+time

> ゆっくりおいで、ごゆっくり

<hr>
そうは言っても締め切りは大事

> meet the deadline
http://ejje.weblio.jp/content/meet+the+deadline

>期限に間に合う；締め切りを守る
Cocos2d-xでのパーティクルの扱い方

# 目次
１．はじめに
２．パーティクルを作る
３．実際に描画してみよう！
４．気をつけよう！

# １．はじめに
Cocos2d-x のバージョンは3.10で進めさせていただきます

# ２．パーティクルを作る
まずは素材であるパーティクルが必要になりますので[particle2dx](http://particle2dx.com/)にアクセスしましょう

## Particle2dx
![スクリーンショット 2016-03-07 04.17.50.png](https://qiita-image-store.s3.amazonaws.com/0/77197/afd426fd-c6dc-9e5d-bd1f-20ae6d3a6ee1.png)

**英語ばっかり！！やだ！！！**と思いますが、意外にも設定は簡単だったりします

![素材２.png](https://qiita-image-store.s3.amazonaws.com/0/77197/71df6d07-a7b5-f6bf-80b8-142105e69ff2.png)

赤く示した部分をいじると左側に出ているプレビューがちゃんと切り替わり見やすいようになっています

![素材３.png](https://qiita-image-store.s3.amazonaws.com/0/77197/8008b552-9fe6-fb71-4659-2a929a0eed05.png)

赤く示したタブを切り替えることによって色や形、テンプレートを選んだりすることもできます

![スクリーンショット 2016-03-07 04.24.37.png](https://qiita-image-store.s3.amazonaws.com/0/77197/c2f3e161-2268-cc2d-9eef-ff0b4b0bbc6b.png)

今回私はタブのTemplateの中にあるFireWorksのfw2で進めて行きたいと思います

自分の描画したいパーティクルが決まったらタブにあるExportを選択しましょう

![スクリーンショット 2016-03-07 04.27.36.png](https://qiita-image-store.s3.amazonaws.com/0/77197/6d156d5c-dc9b-8143-5ce0-2712562e0ce5.png)

すると生成するplistの名前とテクスチャなしかテクスチャありが選べる画面になります
名前はデフォルトでテクスチャなしを選択してみます
そうするとplistファイルというものが生成されます
plistファイルはそのままプロジェクトのリソースファイルの中に入れてあげましょう

#３．実際に描画してみよう！

ではパーティクルの準備も整ったので実際に描画しましょう！

あとはHelloWorldSceneにコードを書き込むだけ！

```lang:HelloWorldScene.cpp
　　　// 作成したパーティクルのプロパティリストを読み込み
　　　ParticleSystemQuad* particle = ParticleSystemQuad::create("particle_texture.plist");
　　　//パーティクルのメモリーリーク回避（★重要）
　　　particle->setAutoRemoveOnFinish(true);
　　　// パーティクルを開始
　　　particle->resetSystem();
　　　// パーティクルを表示する場所の設定
　　　particle->setPosition(300,200);
　　　// パーティクルを配置
　　　this->addChild(particle);
```

コード上でもそこまで難しくなく実装することができます
実際にこのコードを動かしてみると・・・

![スクリーンショット 2016-03-07 04.47.07.png](https://qiita-image-store.s3.amazonaws.com/0/77197/c0b4beac-54c5-ca08-1935-4f9524e88588.png)

**とても綺麗なパーティクルが描画されました！**

#４．気をつけよう！

先ほど書いたコードの中に

```lang:HelloWorldScene.cpp
　　　//パーティクルのメモリーリーク回避（★重要）
　　　particle->setAutoRemoveOnFinish(true);
```

というものがありましたが、このsetAutoRemoveOnFinishはデフォルトでfalseになっています
なのでパーティクルが目に見えなくても実際はそこのあり続けることになってしまいます
パーティクルを使う上でアプリが重くなるのはNGなので**必ずtrueに設定しておきましょう！**
巡回セールスマン問題の求め方　アルゴリズム解説編

巡回セールスマン問題の求め方です。

この記事から読む場合はまずは[問題編](http://qiita.com/izmktr/items/eb2aae1c544ca6f17b88)を見てください

スタートや山頂地点での最短距離は経路探索によってわかりました。
次はどの順序で山頂をめぐっていけばいいのかという問題になります。

巡回セールスマン問題は有名なNP困難な問題です。
要するに、完全な最短時間を求めるには効率のよいアルゴリズムが存在せず、
すべての組み合わせを試していくしかない、ということです。

ですが、工夫しなくてもいい、という意味ではありません。
テストケースでは最大15個の山頂が存在し、組み合わせは15!≒1.3兆となります。

たとえば、「S→A→B→C→D→E→S」と「S→A→B→C→E→D→S」という経路を計算します。
この時、「Cから始めてD,Eを通りSに戻る」という部分はいずれ出てくる、
「S→B→A→C→D→E→S」と「S→B→A→C→E→D→S」という経路を考えるときにも使います。
よって、「Cから始めてD,Eを通りSに戻る」最短時間を記録しておきます

この改善をすることで、制限時間の1秒以内という目標は達成できました。
まだ改善するなら、15個の場合はS→(7個)→A→(7個)→Sという風に考え、
15個の開始地点と7個分の経由を事前に求めて計算していくといいでしょう。
15×7!=75600と、1.3兆より大幅に少なくなることがわかります。
Xcode上で複数バージョンのSDKを同居させる方法


Xcodeのアップデートを行うと以前のSDKは消えてしまい、プロジェクトの設定上でも選択できなくなります。
しかし、開発上の都合で一時的に両方のSDKが使用できると都合がいい場合があります。
そんな場合の方法を書いておきます。

## 手順

**1. 希望のバージョンのSDKが含まれるXcode(dmgファイル)をダウンロード**
https://developer.apple.com/downloads/
※ログインが必要

**2. ダウンロードしたXcodeをインストール**
ここで注意するのはすでにXcodeがインストールされている/Application直下にはインストールしないようにすること。
おそらく上書きされて消えてしまいます。
ここでは~/Desktopにインストールしたつもりで説明します。
　
**3. 追加したXcodeのSDKのリンクを作成**
なぜリンクなのかというとコピーした場合はうまく行かなかったためです。
もしうまくいくならコピーでも問題ないです。
・SDKの配置されているフォルダ　<br>Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
ここにiPhoneOS[バージョン].sdkのようにSDKが置いてある。
・コマンド

```
cd　/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDks
ln -s  ~/Desktop/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDks/iPhoneOS[バージョン].sdk .
```

**4. SDKのバージョン設定のplistを編集**
リンクを張っただけでは認識されないのでSDKリストの設定を変更します。
・設定ファイルの場所
Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/version.plist

/Application/Xcodeの設定ファイルに~/Desktop/Xcodeの設定ファイルの必要な部分を追記します。
シンプルなので見ればわかるかと思います。
SDKが元々一つの場合は`<array>`が記述されていないかもしれないので追加時には気をつけてください

**5. 反映されていること確認**
Xcodeを起動、適当なプロジェクトの設定でSDKの選択肢が増えているのを確認できれば終わりです。
もし反映されていなければOSの再起動も試してみてください。

## 最後に
僕の場合はXcode7.2(iOS SDK9.2)の環境にXcode6.3.2(iOS SDK8.3)をインストールしSDKを追加しました。
もっと以前から同じ試みはされているようですが、他の方の方法を見る限りXcodeのバージョンなどにより方法も微妙に異なっているようです。

## リンク
* XcodeとSDKの対応表<br>https://en.wikipedia.org/wiki/Xcode#Version_comparison_table
MeCab の出力を学校文法に適合する方法（古文）

以前リリースした中学生向け「現代文の文節区切りアプリ」に続き、中高生向け「古文の文節区切りアプリ」が出来たので近々リリースを検討中なのですが、今回あらためて MeCab の素性の良さと辞書の重要性を体感しました。

（現代文＋IPA辞書）に比べて、（古文＋中古和文UniDic）の実装はとても楽でした。
古文が現代文より格段に直交性が良いのが一因なのでしょうが、中古和文UniDicの構造がIPA辞書より合理的で使い易かったのが大きかったです。

自分がやっていることは裸特性が優れたエンジン（MeCab＋辞書）に不完全な ECU をくっ付けてるようなものなのですが...

まあ　何かの役に立つでしょう。
<img width="414" alt="Simulator Screen Shot 2016.03.13 0.43.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/110193/7f209752-95ec-1d35-d497-bfa671921750.png">
underscoreコードリーディング（isArray）



underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##isArrayとは


###[underscorejs.orgのisArray](http://underscorejs.org/#isArray)

こんな説明。
>####_.isArray(object) 
Returns true if object is an Array.

```javascript
(function(){ return _.isArray(arguments); })();
=> false
_.isArray([1,2,3]);
=> true

```

------------- 
objectがArrayならtrueを返します。

###[underscore.isArray](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L1205)
コード的にはこのあたり。

```javascript
  // Is a given value an array?
  // Delegates to ECMA5's native Array.isArray
  _.isArray = nativeIsArray || function(obj) {
    return toString.call(obj) === '[object Array]';
  };

```

Array.isArrayが存在する場合はそちらを、存在しない場合はobjを引数にtoString.call(obj)が[object Array]の文字列に一致するかどうかを返す。
Android LintのMissingTranslationに対応する


# TL;DR

- ちゃんと翻訳しよう
- 翻訳しないstringなら、`<string name="foo" translatable="false">`の様に1つずつtranslatable属性を付け、「翻訳不要」であることを明示する
  - 誤って翻訳してしまっていないかもチェックしてくれる
- Lintチェック自体を無視するのはやめよう
  - ただし、ケースバイケースで特定のファイルだけ無視したりするのはアリだと思う。


# Android Lint

単にコンパイルしただけでは気付かないプログラムの誤りをチェックしてくれるツールがLintです。
Androidアプリの開発環境（Android StudioやらAndroidのgradleプラグインやら）では、リリースビルド時にLintチェックも行い、Errorレベルの項目に引っかかったらビルドに失敗するようになっています。

つまり、Androidアプリ開発におけるお節介焼きお姉さんがAndroid Lintです。[^1]
Android LintについてはDroidKaigi 2016の[@Nkzn](https://twitter.com/nkzn)氏のセッションで詳しく触れています。
https://droidkaigi.github.io/2016/timetable.html#session-2016-02-18-13-00-13-50-b


# MissingTranslation

Android Lintのチェック項目のうち、stringリソースが翻訳済みかどうかをチェックする項目がMissingTranslationです。
逆に翻訳後のものしかない(`values-ja/`にはあるけど`values/`に無い)といった場合もチェックしてくれます。

MissingTranslationはErrorレベルですので、これに引っかかるとリリースビルド出来ません。

リリースビルド時のエラーメッセージで、「ビルドスクリプトで`checkReleaseBuilds false`や`abortOnError false`を付けると無視できるよ」と表示されますが、やっちゃいけません。[^2]
一時的ならかまわないでしょうが、MissingTranslation以外のチェック項目も全部無視されてしまいます。


# translatable="false"で翻訳不要であることを明示する

翻訳しなくていいものは`translatable`属性でfalseを指定しましょう。

```values/strings.xml
<resources>
    <string name="foo" translatable="false">bar</string>
</resources>
```

誤って翻訳してしまっている場合もエラーにしてくれます。
例えば、デフォルトロケールのstringが`translatable="false"`になってるのに`values-ja/`で翻訳したstringを書いてしまっていると検知してくれます。

```values-ja/strings.xml
<resources>
    <string name="foo">ほげ</string><!-- 不要なstring -->
</resources>
```


# ファイルまるごと無視する

`translatable`属性を１つずつ指定するほうがちゃんとLintチェックしてくれるので便利なのですが、翻訳しないものが多い場合はちと面倒です。
翻訳不要なstringを1つのファイルにまとめてあったりしていれば、ファイルまるごとLintチェックで無視してしまうのも手です。
`tools:ignore`属性で無視するLintルールを指定できます。
ただし、誤って翻訳してしまっている場合の検知が出来なくなってしまうデメリットがあります。

```values/string_no_trans.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
           tools:ignore="MissingTranslation">
    <string name="api_url">http://foo.bar/api/</string>
</resources>
```


# その他

`tools:ignore`属性はstringの1つずつにも指定できますが、`translatable`属性の方が便利です。

プロトタイプ作るだけだったりで厳密なチェックが邪魔なようなら、lint.xmlやbuild.gradleのlintOptionsでMissingTranslationをまるごと無視したり、`checkReleaseBuilds false`や`abortOnError false`でlintチェック自体しないようにする事もできます。
MissingTranslationの検知レベルをWarningsなどに下げてしまうというのもあります。（※この辺は未検証）


# 参考

- http://tools.android.com/recent/non-translatablestrings
- http://tools.android.com/tips/lint/suppressing-lint-warnings
- http://www.kaede-software.com/2012/02/_lint.html
- http://kokufu.blogspot.jp/2014/10/androidstudio-missingtranslation.html


[^1]: 擬人化はまだか。
[^2]: そのメッセージの前の部分に「ちゃんとlint引っかかった箇所を直すか〜」と書いてあるんですが、わかりやすくビルドスクリプトのサンプル記述がある後半に目が行ってしまう。
IntelliJ Idea ショートカット一覧 Mac version


eclipseとIntelliniJのショートカット対応一覧と
IntelliJでよく使うショートカットをまとめました。

使いやすいショートカットがあれば随時追加する予定です。

## eclipseとIntelliJのショートカット対応

|動作 | eclipse | IntelliJ |
|---|---|----|
|クイックフィックス|Command + 1|Alt + Enter|
|コード補完|Control + Space|Control + Space|
|テンプレート補完|Control + Space|Tab|
|使用箇所検索||Alt + F7|
|||Command + Alt + F7|
|行を移動する|Alt + ↑ or ↓|Alt + Shift + ↑ or ↓ |
|||Command + Shift + ↑ or ↓|
|行削除|Command + D|Command + Backspace|
|コードフォーマット|Shift + Command + F|Alt + Command + L|
|インポート|Command + Shift + O| Control + Alt + O |
|名前変更|Alt + Command + R|Shift + F6|
|実行（おもにテスト）|Shift + Command + F11|Alt + Shift + F10|
|変数の抽出|Command + 2 -> l|Command + Alt + V|
|定義に移動|F3|Command + B|
|実装に移動||Command + Alt + B|
|新しい行を追加|Shit + Enter|Shit + Enter|
|メソッドに切り出す|Command + 1|Command + Alt + M|
|メソッド一覧|Command + O|Command + F12|



## その他よく使うショートカット

|動作|ショートカット|
|---|---|
|クラス検索(.javaファイルのみ檢索)|Command + O|
|ファイル名検索(すべてのファイルを検索)|Command + Shift + O|
|Go to line |Command + L|
|ひとつ前に移動|Command + [|
|ひとつ先に移動|Command + ]|
|Actinoの検索 (Commit とか入力すると当てはまるActionを検索してくれる)|Command + Shift + A|
|Create Test|Command + Shift + T|
|なんか色々生成|Control + N|
|マルチカーソル（特定文字列を選択してから）|Ctrl + G|
|マウスを使ったマルチカーソル|Altを押しながらマウス移動|
|プロジェクトツールウィンドウの表示/非表示|Command + 1|
|コピー履歴から貼り付け|Command + Shift + V|
|ストラクチャーツールウィンドウの表示/非表示|Command + 7|
|現在開いてるファイルのプロジェクト/パッケージへジャンプ|Alt + F1|
|最近開いたファイルを表示|Command + E|
|ファイル横断テキスト検索|Ctrl + Shift + F|
|なんでも検索|ショートカットキー：Shift 2回連打|
|選択箇所をif、while、forなどで囲む|Command + Alt + T|
|選択状態ブロックの拡大／縮小|Command + W ／ Command + Shift + W|
|現在の行を複製|Command + D|
|選択箇所のインラインを展開する|Command + Alt + N|
|型の継承階層を表示する|Ctrl + H|
|メソッドの呼び出し階層を表示する|Ctrl + Alt + H|
|フィールドとして宣言に切り出す|ommand + Alt + F|
|テンプレートを開く|Command + Alt + F|
|Run実行|Command + Alt + R|
|Debug実行|Command + Alt + D|

## JavaのLiveテンプレートのおすすめ
http://dbflute.seasar.org/ja/tutorial/onjava8.html#intellij
MacでEclipseのインストール





# Eclipseダウンロード

Eclipseの[ダウンロードページ](http://www.eclipse.org/downloads/)からダウンロードしてきます。
ダウンロードしたファイルを解凍して開くと以下エラーがでました。

>Javaランタイムをインストールする必要があります。

うんたらかんたらと書いていたので詳細のリンクからJREをインストールしました。
MacデフォルトではJREはインストールされていないんですね。

再度解凍したファイルを開こうとしたら以下のエラーがでました。

![Incompatible JVM.png](https://qiita-image-store.s3.amazonaws.com/0/96493/b9330c25-c275-c1ab-fe1f-aba361d3f353.png)

>Version1.6.0_65 of the JVM is not suitable for this product.
Version: 1.7 or greater is required.

内容としては
「JVMのバージョンがEclipseと適してないです。
1.7以上のバージョンにしてください。」

ターミナルから`java -version`でバージョン確認できます。


# JDKダウンロード
MacはデフォルトのJDKが使用されるので新しいバージョンのJDKが必要です。
ということで、JDKをOracleの[JavaSEダウンロードページ](http://www.oracle.com/technetwork/java/javase/downloads/index.html)からダウンロードしました。

![ダウンロード.png](https://qiita-image-store.s3.amazonaws.com/0/96493/8854d1f0-87af-91b2-b1b3-c258af7106a8.png)



アイコンをダブルクリックしてインストールします。
インストール完了後、ターミナルを再起動して
`java -version`を実行するとインストールしたJavaのバージョンが表示されて確認できました。

Eclipse起動確認して完了。

以上
virt-manager(KVM)で共有フォルダを使うには(Ubuntu15)

virt-manager、もしくはvirt-installで作成した仮想マシンとディレクトリを共有するには[NFS](https://wiki.archlinuxjp.org/index.php/NFS)(Network File System)を使う。

#NFSインストール
ホスト

```bash
$ sudo apt-get install nfs-common nfs-kernel-server
```

ゲスト

```bash
$ sudo apt-get install nfs-common
```

#ホストの設定

共有するディレクトリを ```/etc/exports```に書く。
書式: パス マウントを許可するアドレス(オプション)

```bash
$ cat /etc/exports
/dir/path 192.168.122.0/24(rw,sync,no_subtree_check,fsid=0) 
$ sudo exportfs -rav  #設定反映
```

オプションの```fsid=0```は```/dir/path```をルートとして扱うという意味。
読み取り専用にしたいときは```rw```を```ro```にすればいい。


ファイアウォールを使っているなら下記の方法で使用するポートを確認して開放する。

```bash
$ rpcinfo -p
```

筆者の環境(ufw)の場合は。

```bash
sudo ufw allow from 192.168.122.0/24 to any port 111
sudo ufw allow from 192.168.122.0/24 to any port 2049
sudo ufw allow from 192.168.122.0/24 to any port 48218 proto udp
sudo ufw allow from 192.168.122.0/24 to any port 38309 proto tcp
sudo ufw allow from 192.168.122.0/24 to any port 48900 proto udp
sudo ufw allow from 192.168.122.0/24 to any port 41747 proto tcp
```


#ゲストの設定

とくに設定は必要ないのであとはマウントするだけ。
```192.168.1.2```をホストだとすると。

ホストで公開されてるディレクトリを表示。
実行しても応答がない場合はファイアウォールで阻まれている可能性がある。

```bash
$ showmount -e 192.168.1.2
```

ホストで公開されているルートディレクトリをマウント。
```/etc/exports```で```fsid=0```が設定されているディレクトリがルートになる。

```bash
$ sudo mount 192.168.1.2:/ /mnt
```

再起動しても自動でマウントしたい場合は```/etc/fstab```を編集する。
今回の場合は下記の出力の最後の行を追記すればいい。

```bash
$ cat /etc/fstab
/dev/sda1      /     ext4   errors=remount-ro 0 1
/dev/sda2      none  swap   sw 0 0
192.168.1.2:/  /mnt  nfs4   rsize=8192,wsize=8192,timeo=14,_netdev 0 0
```
try! Swift 2016 個人的おすすめセッションまとめ


網羅的なものはすでに素晴らしい[try! Swift 資料まとめ](http://qiita.com/mishimay/items/895d676eb9940d75e639)があります。ここでは３日間のセッションを聴いて個人的におすすめのものをテーマ別にピックアップしました。

# Swiftによる実践的な開発の話

- [文化を調和させる](http://qiita.com/mishimay/items/895d676eb9940d75e639#文化を調和させる) by Daniel Steinberg
	- OOP, POP, FPの考え方を使ってViewControllerをリファクタリングしていく
	- 再利用可能な部分を引き離して分離
- [SwiftらしいTable View Controllerの使い方](http://qiita.com/mishimay/items/895d676eb9940d75e639#swiftらしいtable-view-controllerの使い方) by Chris Eidhof
	- UITableViewControllerをライブでリファクタリングしていく
	- Genericsを使って再利用可能にする
	- init時に渡すものをstructにまとめる
- [モダンCore Data](http://qiita.com/mishimay/items/895d676eb9940d75e639#モダンcore-data) by Daniel Eggert
	- Core Dataの話ではなく、Core Dataを例に古いAPIをどのようにSwiftっぽく使うかの話
- [実践的「Boundaries」](http://qiita.com/mishimay/items/895d676eb9940d75e639#実践的-boundaries) by Ayaka Nonaka
	- [Boundaries](https://www.destroyallsoftware.com/talks/boundaries): Gary Bernhardtによる関数型プログラミングの講演
	- これをSwiftでどう実践するか
	- View Controllerの不変な部分とネットワークアクセスする部分を分ける。
	- View Controllerは互いのことを知るべきではない → Coordinatorパターン

# 言語としてのSwiftの理解を深める

- [Swift Hipstar](http://qiita.com/mishimay/items/895d676eb9940d75e639#swiftヒップスター) by Hector Matos
	- @noescapeなど、Swiftのtips集
- [プロトコルエクステンション: 歴史について](http://qiita.com/mishimay/items/895d676eb9940d75e639#プロトコルエクステンション-歴史について) by Matthew Gillingham
	- Swift 2.0のプロトコルエクステンションに至るまでの、プログラミング言語におけるコードの再利用と共通化の歴史
- [平常心で型を消し去る](http://qiita.com/mishimay/items/895d676eb9940d75e639#平常心で型を消し去る) by Gwendolyn Weston
	- 抽象であるPokemonプロトコルを作り、Pikachuクラスで実装して具象化する
	- どのポケモンでも入れられる変数はどうやって作るか -> Type Erasure
	- Swiftでは covariance (共変性) が使えない

# みんな知りたいテストの話

- [Swiftにおける実践的なモック化について](http://qiita.com/mishimay/items/895d676eb9940d75e639#swiftにおける実践的なモック化について) by Veronica Ray
	- Dependency Injection重要
	- protocolでモックする
	- 外部ライブラリ等の所有していないクラスのモックはしない
		- 例外としてAppleのフレームワーク（NSUserDefaults）など必要な場合もある
- [Artsyにおけるテスト手法の紹介](http://qiita.com/mishimay/items/895d676eb9940d75e639#artsyにおけるテスト手法の紹介) by Ash Furrow
	- クラスを小さく保つこと
	- テストの可読性
		- Quickを使ったRSpecスタイルのテスト
		- Nimble: Assertの可読性が上がる

# デザインとの境界

- [プロトタイピングの魔法](http://qiita.com/mishimay/items/895d676eb9940d75e639#プロトタイピングの魔法) by Adam Bell
	- アニメーションによるインタラクションデザインの話
	- 「デザイナーが作りたいと言ったものに対してNOと言わない」
	- Playground + POP(Facebook製アニメーションライブラリ)でプロトタイピング
- [デザイナーをSwiftのコードベースに巻き込む10の方法](http://qiita.com/mishimay/items/895d676eb9940d75e639#デザイナーをswiftのコードベースに巻き込む10の方法) by Helen Holmes
	- デザイナーにコードを見てもらう、書いてもらうことのメリット、デメリット
	- デザイナーのやる気とそれをエンジニアがそれを受け止めてサポートできるか
- [ライブデザイニング](http://qiita.com/mishimay/items/895d676eb9940d75e639#ライブデザイニング-) by Maxim Cramer
	- Sketchを使ってアイコンをデザインする過程をライブで見せる

# その他

- [コードリーディングについて](http://qiita.com/mishimay/items/895d676eb9940d75e639#コードリーディングについて) by Laura Savino
	- プレゼンがとても上手なので動画が出たら必見
	- readabilityを考えるとき、読み手が誰かを考える
	- 「解読」にエネルギーが必要なコードを書かないこと
他人の書いたRailsコードを読む時、最初にすること

1. config/routes.rbを見る。
   アプリ自体がどんなことしているかの全体像を把握する参考にする。

2. Gemfileを見る。
   どんなGemを使っているかで、アプリがどんなことしてるのかあたりをつける。
   →前提知識として各Gemの名前と、それらが何してるかしらないと意味ない。
　　ま、慣れろ。学べ、ってとこか。