OmniAICreator/Qiita-1.07M huggingface dataset:
Rails + tiwtter loginで OAuth::Unauthorized 400 Bad Requestになった件

「パーフェクト Ruby on Rails」のサンプル６章 p168 - p179のログイン処理を書いているときにはまったのでメモ

#環境
OS:OS X Yosemite(10.10.5)
Ruby:ruby 2.2.1p85
Rails:4.1.1'

#現象
config/secrets.ymlの内容が以下の場合に、サンプル画面(p175 下段図 6.10]のtwitterでログインをクリックすると

OAuth::Unauthorized 400 Bad Requestになった。

```lang:config/secrets.yml
default_twitter: &default_twitter
  twitter_api_key: 'dummy api key'
  twitter_api_secret: 'dummy api secret'

development:
  secret_key_base: 46b554f82bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
<<: *default_twitter

test:
  secret_key_base: ea9e9c31d1b1b38250afdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
<<: *default_twitter
```

パーフェクトRuby on Railsのサンプルを落としてきて、diffを取りsecrets.ymlを以下の様に「<<: *default_twitter」の前に半角スペースを二つ入れて修正したらtitterでログインできた。

```lang:config/secrets.yml
default_twitter: &default_twitter
  twitter_api_key: 'dummy api key'
  twitter_api_secret: 'dummy api secret'

development:
  secret_key_base: 46b554f82bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  <<: *default_twitter

test:
  secret_key_base: ea9e9c31d1b1b38250afdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  <<: *default_twitter
```

他の方に役立つかどうか分かりませんが、とりあえず自分へのメモ

半角スペースが一つの場合はどうなるんだろう。=> WEBrick起動時にエラーになった。

そもそもなんでスペースがないと駄目なんだろう
=> マッピング(ハッシュ形式)の書き方でsecret_key_baseと<<がdevelopmentのキーになっているから半角スペースを二つ入れているということかな？

[YAML Validator](http://www.yamllint.com/)を使うと二つの結果に違いがありました。

エラーになった場合のYAML Validatorの結果

```lang:config/secrets.yml
default_twitter: 
  twitter_api_key: "dummy api key"
  twitter_api_secret: "dummy api secret"
development: 
  secret_key_base: 46b554f82bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
test: 
  secret_key_base: ea9e9c31d1b1b38250afdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
twitter_api_key: "dummy api key"
twitter_api_secret: "dummy api secret"
```
エラーにならなかった場合のYAML Validatorの結果

```lang:config/secrets.yml
default_twitter: 
  twitter_api_key: "dummy api key"
  twitter_api_secret: "dummy api secret"
development: 
  secret_key_base: 46b554f82bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  twitter_api_key: "dummy api key"
  twitter_api_secret: "dummy api secret"
test: 
  secret_key_base: ea9e9c31d1b1b38250afdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  twitter_api_key: "dummy api key"
  twitter_api_secret: "dummy api secret"
```

前者の場合developmentとtestにtwitter_api_keyとtwitter_api_secretが含まれていなかったのでtwitter認証時にエラーが出たんだと納得。
さくらVPS使い方メモ自分用

ドットインストールを参考にしてさくらvpsにphp,apach,mysql導入。
http://dotinstall.com/lessons/basic_sakura_vps/8013

ディレクトリはrootから作成して、その後chown -R ユーザー名：ユーザー名　ディレクトリ
で権限を与えれば、
ipadress/ディレクトリ/file名で使えるようになる。

いちいち新規でvertual hostを作りたくない時向け
MySQLの設定変数について

*半年間、MySQLを基礎からやり直すことにしたので、その間に勉強したことをQiitaに投稿していきます。*
**設定変数で気になるものを個人の記録用に、適当にピックアップしてメモ的な感じで書いてます。**

##init-file
サーバ起動時に指定されたファイルから SQL コマンドのセットを実行するオプション

##key_buffer_size
MyISAMキーキャッシュのサイズを制御するオプション

##log-bin
バイナリフォーマットの更新ログを有効にするオプション
主にレプリケーションマスタのレプリケーションで使用されるが、インクリメンタル バックアップで使用される場合もある。
このロギングは論理レベルで起きるので、何らかのメタ情報とともにクエリはログされる

##log-slow-queries
オプティマイザから最適ではないと判断されたクエリのロギングを有効にするオプション
実行時間(long_query_timeオプションにより制御)とキー使用という2つの条件が存在し、パフォーマンス問題のトラブルシューティングに使われる

##max_allowed_packet
パケットのサイズに上限を設けるオプション

##max_connections
サーバが受け入れる最大の接続数に上限を設けるオプション
個々の新しいクライアント接続により、ある一定量のシステムリソースが消費される為、設定が必要になる

##max_heap_table_size
個々のインメモリテーブルが取得できるサイズに上限を設けるオプション
インメモリテーブルは非常に高速であるが、ヒープテーブルによってメモリが占有され、システムがメモリ不足に陥る可能性が高くなるので注意が必要になる
ただし、このオプションでは悪意を持つユーザがサービス拒否攻撃を実行するのを防ぐことはできないので、攻撃者が許容されたサイズのインメモリテーブルを数多く作成してしまうとメモリ超過が起きてしまう

##max_join_size
指定された数のレコード結合を超えるチェックが必要になると思われるクエリを異常終了するようにオプティマイザに指示するオプション
主に、バグだらけのアプリケーションや経験のないユーザによってサーバがダウンするのを防ぐために設計されたオプションになる

##query_cache_type
クエリの結果をキャッシュできる機能オプション
バージョン4.0でこの機能が初めて登場してから、アプリケーションのパフォーマンスが平均で60パーセント改善された

|オプション| 意味                                                |
|:--------|:----------------------------------------------------|
|0        |全てのクエリをキャシュしない                           |
|1        |SQL_NO_CACHフラグを持つ以外の全てのクエリをキャッシュする|
|2        |SQL_CACHEフラグを持つクエリのみキャッシュする           |

##relay-log
通常はデフォルト値が受け入れ可能なため、このオプションはめったに設定する必要はない

##server-id
ネットワーク上のレプリケーションピア間で識別が可能になるようにサーバに数値IDを割り当てるオプション

##skip-grant-tables
アクセス権限テーブルをロードせずに起動するようにサーバに指示するオプション
MySQLルートユーザパスワードを失った場合には特に有効であるオプション
MySQLポートに到達可能なネットワーク上のあらゆる者がサーバに無制限にアクセスできるように
なってしまう為、skip-grant-tablesと併せてskip-networkingの使用がセキュリティ的な理由で
推奨されている

##skip-stack-trace
post-crash(クラッシュ後)自己診断機能を無効にするオプション
デバッガでクラッシュをデバッグしようとする場合等には有効であるオプション

##slave-skip-errors
無視してもよいエラーコードをスレーブサーバに示すためのオプション
無視するエラーコードをカンマ区切りリストで指定する事ができる
ちなみに、キワードallを指定すると全てのエラーを無視する事もできる

##sort_buffer_size
ラディックスソートで使用可能なメモリ容量を指定することで、ラディックスソートによって
ソートされるメモリ内のチャンクのサイズを間接的に制御するオプション

##table_cache
キャッシュ可能なテーブルディスクリプタの数を制御出来るオプション
テーブルそのものではないので注意が必要
SHOW OPEN TABLESコマンドを使うとキャッシュの中身を確認できます

##temp-pool
Linuxカーネルのバージョン2.4の設計上で、プロセスが一意の名前によってファイルの作成や削除を
繰り返し処理していると、カーネル側では決して解放されることのない大量のメモリを
割り当てることになるという問題があったのでそれを回避するためのオプション

##transaction-isolation
サーバ全体に対するグローバルなトランザクション分離レベルを設定できるオプション

**過去にInnoDBの設定変数についても書いたんで、興味ある人はこちらもどうぞ**
[InnoDBの設定変数について](http://qiita.com/shotaTsuge/items/5bec92f3427e4cc0e906)
AOSPで自前でLinux Kernelをビルドしたものを使う.

## はじめに
AOSPデフォルトでは予めコンパイルされたLinux Kernelのイメージが使われる.
deviceディレクトリ内にイメージファイルは存在する.

## 手順
以下lollipop.

```
cd $ANDROID_BUILD_TOP
mkdir kernel
cd kernel
git clone https://android.googlesource.com/kernel/goldfish.git
git checkout origin/android-goldfish-3.4
export ARCH=x86
export SUBARCH=x86
export CROSS_COMPILE=${ANDROID_BUILD_TOP}/external/qemu/distrib/kernel-toolchain/android-kernel-toolchain-
export REAL_CROSS_COMPILE=$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-
make goldfish_defconfig
make
emulator -kernel $ANDROID_BUILD_TOP/kernel/goldfish/arch/x86/boot/bzImage -qemu -m 512 -enable-kvm
```

以下marshmallow.

```
cd $ANDROID_BUILD_TOP
mkdir kernel
cd kernel
git clone https://android.googlesource.com/kernel/goldfish.git
git checkout origin/android-goldfish-3.4
export ARCH=x86
export SUBARCH=x86
export CROSS_COMPILE=$ANDROID_BUILD_TOP/prebuilts/qemu-kernel/kernel-toolchain/android-kernel-toolchain-
export REAL_CROSS_COMPILE=$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin/x86_64-linux-android-
make goldfish_defconfig
make
emulator -kernel $ANDROID_BUILD_TOP/kernel/goldfish/arch/x86/boot/bzImage -qemu -m 512 -enable-kvm
```

## 参考
[Download and Build Stock Android and Kernel](http://varun-anand.com/build.html)
Rspec | メソッドチェーンの検証方法 ( expect_any_instance_of )

# 素直な検証

Hash が to_a を呼ぶことを期待する。
このテストは成功する。

```rb:spec/hahs_to_array_spec.rb
require 'spec_helper'

describe  do
  it do
    expect_any_instance_of(Hash).to receive(:to_a)
    { name: 'John' }.to_a
  end
end
```

# メソッドチェーンを検証できない

しかしメソッドチェーンを検証したい場合は、どうするのだろうか。

たとえば　`Hash.to_a.to_s` と書いた時。
Hash に対して to_s を期待しても、ダメだ。

```rb:spec/hash_to_array_to_hash.rb
require 'spec_helper'

describe  do
  it do
    expect_any_instance_of(Hash).to receive(:to_s)
    { name: 'John' }.to_a.to_s
  end
end
```


なぜなら Hash.to_a した時点で、クラスは Array に変わっているからだ。

```rb
{ name: 'John' }.to_a.class # => Array
```

# 解決策

この場合 Array に対して to_s を期待すれば良い。

```rb:spec/hash_to_array_to_hash.rb
require 'spec_helper'

describe  do
  it do
    expect_any_instance_of(Array).to receive(:to_s)
    { name: 'John' }.to_a.to_s
  end
end
```

# 全て検証する

メソッドチェーンの全てを検証する場合は、この両方を期待すれば良い。

```rb:spec/hash_to_array_to_hash.rb
require 'spec_helper'

describe  do
  it do
    expect_any_instance_of(Hash).to receive(:to_a)
    expect_any_instance_of(Array).to receive(:to_s)
    { name: 'John' }.to_a.to_s
  end
end
```

# 環境

- ruby 2.0.0
- rspec-rails (2.14.2)



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
RubyでSTDOUT.reopenするとtail -f出来なくなる(flushされなくなる)問題


これを

```ruby:reopen.rb
STDOUT.reopen('tmp/outs/stdout', 'a')
while line = gets
  print line
end
```

こう

```ruby:reopen.rb
STDOUT.reopen('tmp/outs/stdout', 'a')
STDOUT.sync = true
while line = gets
  print line
end
```
Unreal Engine 4 のブループリントの基本概念



ブループリント(BluePrint=以下BP)を扱うに当たっては下記のことが特に重要になってくる。

![Qiita用.jpg](https://qiita-image-store.s3.amazonaws.com/0/96388/9870647a-ea33-d805-69ed-d5e3b6085c00.jpeg)

ゲームでよくある例を挙げるならば、「敵の弾が当たった時」「ライフが0であれば」「死ぬ」というようなものである。状況によってはもちろん「どういう条件で」という部分は省かれることもある。

BPの特徴のうちの1つとしてはCなどのようなのもでは基本的に上から下へプログラムが流れるのだが、BPの場合は左から右へ流れる。まずはこれを抑えていただきたい。
![qiita4.jpg](https://qiita-image-store.s3.amazonaws.com/0/96388/66601fe2-0c7d-3d60-c3ad-a67c48dd488a.jpeg)

まずBPに関する簡単な用語を説明する。BPはビジュアルスクリプティング言語である。そのため従来のCやJavaのような「文法」の概念が非常に薄い。その代わりに窓と窓を線でつなぐようにしてプログラミングする。その窓を「ノード」という。そしてそのノードの左側にあるのが情報の受け取り口「入力ピン」であり反対側が使った情報の配信口「出力ピン」である。
![qiita3.jpg](https://qiita-image-store.s3.amazonaws.com/0/96388/455e0943-b223-97ad-7108-f22af9185663.jpeg)
この入出力ピンのおかげで文法間違いがそうそう起きない。
この入出力には入出力できる値が色で見極めることができる。多くの場合だと、Pawn型は水色、黄色はVector型、緑色はFloat型、赤色はBoolean型などである。その中でも最も重要なのが一番上にある白色のピン、フラグ(※)型である。

![qiita5.png](https://qiita-image-store.s3.amazonaws.com/0/96388/64ae635e-80cc-3090-7c15-61074352abcc.png)

この実行型のピンを特に実行ピン(そのまんま)といい、これによってフラグ(※)の受け渡しをする。

(((※ 本来の正式名所は「フラグ」ではなく「パルス」なのだが、他のサイトなどで見かけたことがなく、C#経験者や、プログラミング経験のない日本人にとっては「フラグ」のほうがイメージしやすいと思うので、ここでは「フラグ」とする。)))

右側の出力側からフラグを送信し、左側の入力側からフラグを受け取る。フラグを受け取ったノードはそのノードの機能を実行し、し終えると出力ピンからフラグをながす。

ここからは少し具体的に見ていこう。

![Qiita用.jpg](https://qiita-image-store.s3.amazonaws.com/0/96388/d1b89cfb-8ad2-a25c-e6d4-9b2edfd94798.jpeg)

一番最初にしめした、「いつ」「どういう条件で」「なにかする」、このうちの「いつ」にあたるノードはイベント(Event)ノードだ。上図の見ての通りノードの上端が赤色である。BPでのプログラミングは基本的にこのイベントノードから始まる。ゲーム制作においてよく使うものは上の図の3つだ。
・Begin Play
・ティック(Tick)
・Enter(キーボード)
BeginPlayは読んで字のごとくゲームが始まったときに、ティックはゲーム画面が更新されるたびに(言い換えれば毎フレームに)、EnterはキーボードのEnterキーを押したり離したりしたときに、フラグ型出力ピンからフラグを流す。もちろんEnterキー以外の入力もある。

![qiita6.png](https://qiita-image-store.s3.amazonaws.com/0/96388/072167ec-2f0a-42b4-f789-a8cd1ae1a62d.png)

次の項目に移る。

どういう条件で、というとC系のを触ったことがある人ならばif文が思い浮かぶと思う。BPにもif文にあたるノードが存在している。
上図の左上のノード「ブランチ」だ。このノードは入力されるCondition(Boolean型)によって真か偽のどちらかにフラグを流す。なお、この図はVer.4.10のものである。それ以前だと"True"か"False"になっている。なおこのノードは検索欄に"if"と入力しても検索に引っかかってくれる。
右上の「Do Ones」は一度だけCompletedからフラグを流すものだ。
左下「シーケンス」はThen0から順番にフラグを流していく。
右下「整数型をオン」は、CのSwitch int にあたる。Selection(Integer型)に入力された数値に従って1つの出力ピンからフラグが流れる。

なお、「いつ」の項目でやったものを「イベントノード」というといったが、こういったブランチなどは

![qiita7.png](https://qiita-image-store.s3.amazonaws.com/0/96388/b17411bd-2751-c63e-a43d-60d8a7befdba.png)

そして最後の、なにかする、だが、

「「めちゃくちゃたくさんある！！」」

はい、BPはUE4でもともとつかえるC++とほぼほぼ同じことができる。そのためC++でできることほぼすべてをノードにあるためめちゃくちゃたくさんあるわけである。

ほかの二つ「いつ」「どんな条件で」とは違ってその時々で様々なものを使うため「特にこれはどこでも使える万能ノード」というものがない。今回はプログラムのプロトタイプを組む時に役立つ「Print String」を紹介する。

![qiita8.png](https://qiita-image-store.s3.amazonaws.com/0/96388/3e136f85-41bc-281c-9dcd-0501b5e4ec70.png)
これもC系を触ったことがある人ならなんとなくわかるかもしれない。フラグが流れ込み起動されると、入力されるIn String(String型)の内容を画面上に表示するというものだ。
前述したがBPにおいては文法ミスがほぼ発生しない。その代りよくあるトラブルの一つとしてコンパイルもうまくいっているのになぜか配列したノードの通りに動かないということがある時はそもそもフラグがちゃんと伝わっていないということがよくある。その確認に非常に役立ってくれるのだ。

これで一応一通りの説明を終わる。次回には具体的にプログラミングに入っていきたいと思う。

もし今までの説明であんまりわからなかった場合は、以下のことだけわかっていれば最悪どうにでもなる（かも？）

![qiita9.png](https://qiita-image-store.s3.amazonaws.com/0/96388/4031c23d-c1cc-2682-7760-09defaf09a7f.png)
AOSPのファイル階層

AOSPからリポジトリを引っ張ってきた時にどういうファイル階層をしているかを調べた.

* abi
* art
* bionic - Android版glibc
* bootable - ブート関連
* build - ビルドツール
* cts - テストスイート
* dalvik - Dalvik VM
* developers
* development - 開発ツール(エミュレータなど)
* device - デバイス関連ファイル
* docs
* external - 外部で開発されたソフト
* frameworks - Android application framework
* hardware - ハードウェア制御ライブラリ, HAL
* libcore - Java関連のライブラリ
* libnativehelper
* ndk - Android NDK
* out - ビルド後の出力
* packages - 標準インストールアプリ, 壁紙
* pdk
* prebuilts - ビルドツール(ビルド済みccacheとか)
* sdk - Android SDK
* system - デバイスドライバのソース
* tools
Android Lollipopのファイル階層

Android Lollipopのファイル階層がどうなっているのか調べた.

* acct - cgroupによるプロセスのユーザー制御
* cache
* config
* d - /sys/kernel/debugへのシンボリックリンク
* data - いわゆるストレージ部分
  - data - 各アプリのデータが入っている
* default.prop - システムの設定ファイル
  - 例えばro.secure=1になっているとUSBデバッグした時に一般ユーザーとしてのみシェルを起動できる.
* dev - デバイスファイル
* etc - /system/etcへのシンボリックリンク
* file\_contexts - ファイルなどのリソースにタイプを付与
* fstab.goldfish - マウントの設定
* init - 一番最初に起動するユーザープロセス
* init.environ.rc - グローバル環境変数の設定
* init.goldfish.rc - goldfish(エミュレータ)固有のinit
* init.rc - 起動時にスクリプトが読み込まれる
* init.trace.rc - ftraceでパフォーマンス解析
* init.usb.rc - USBの設定
* init.zygote32.rc - Dalvik VMの大元のプロセスらしい
* mnt - マウントポイント
* proc - プロセスやメモリーなどのリソース情報
* property\_contexts - セキュリティコンテキストの設定.標準のSELinuxにはない.
* root - rootユーザーのホーム
* sbin - Linuxよりもはるかに小さい.主要なデーモンプログラムがある.
* sdcard - /storage/sdcardへのシンボリックリンク
* seapp\_contexts - アプリ毎のポリシー設定
* storage - ストレージ用のマウントポイント
* sys - sysfs
* system - Linuxでいうところのroot
* ueventd.gooldfish.rc
* ueventd.rc - /devの設定
* vendor - /system/vendorへのシンボリックリンク
選択したテクスチャを再インポートかけるエディタスクリプト


Unityです。
OnPostprocessTexture(), OnPreprocessTexture() あたりで
ゴニョゴニョしたいときとかに。

```
Selection.GetFiltered (typeof(UnityEngine.Object), SelectionMode.DeepAssets)
			.ToList ()
		// ディレクトリは除外
			.Where (o => {
			string path = AssetDatabase.GetAssetPath (o);
			return !System.IO.Directory.Exists (path);
		})
			.ToList ()
			.ForEach (o => {
				var selectedPath = AssetDatabase.GetAssetPath (o);
				AssetDatabase.ImportAsset (selectedPath);
		});
```
AnimatorStateInfoによる死亡モーションの実装

# AnimatorStateInfo
Unity5の新機能であるStateMachineBehaviorにはAnimatorStateInfoというものがあります。
これは簡単に言えばアニメーションの最中に処理を行うことが出来るものです。
AnimatorStateInfoはあらかじめスクリプト上でstateInfoと宣言されています。

## StateMachineBehaviourについてはこちら
[StateMachineBehaviourでAnimatorを監視する](http://qiita.com/toRisouP/items/b6540b7f514d18b9a426)
### スクリプト

```ruby:Deadend
using UnityEngine;
using System.Collections;

public class DeadEnd : StateMachineBehaviour {
    //Unity上で値を入れる
    [SerializeField]
    private float endtime;
	override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
      

	}

	override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
        //ゲームオーバーにする時間
        if (stateInfo.normalizedTime >= endtime)
        {
            //ゲームオーバーの状態に移行
            gameSystemManager.GameStateProp = GameState.ON_OVER;
        }
	}

	
	override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) 
    { 
       
	}

	}
```
normalizedtimeというのは時間を０から１で表すものです。例えば５秒のアニメーションがあるとして０秒の時は０、５秒の時は１と表されるということです。
####AnimatorStateInfo 
他にも様々な機能があり、今回実装した死亡モーション以外にも活用できるので試してみてください。
[AnimatorStateInfo](http://docs.unity3d.com/ja/current/ScriptReference/AnimationState.html)
AOSPをビルドする

## はじめに
Android Kernelをビルドしました.
かなり面倒でした.
環境はUbuntu15.10です.

## android-sdkのインストール
[Installing the Android SDK|Android Developers](http://developer.android.com/sdk/installing/index.html)から最新のSDKをダウンロードする.
~/android以下にインストール.
特定のSDKのバージョンをインストールしたい時はandroidコマンドから管理ができるのでご安心を.

```sh
$ export PATH=~/bin:$PATH # repo command
$ export PATH=~/android/tools # android, emulator command
$ export PATH=~/android/platform-tools # adb command
```

## ビルド環境の設定
emulatorのパスがbashの設定に書き込まれるのでbashで作業を
行うことを推奨.

```sh
$ mkdir ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
```

RepoはGit上に構築されたツールで,多数のGitレポジトリの管理を容易にする.
そのため,Android開発においてはrepoコマンドが推奨される.

## ソースコードのダウンロード
androidのソースコードは[android Git repositories](https://android.googlesource.com/)で管理されている.
[Refs-platform/manifest](https://android.googlesource.com/platform/manifest/+refs)から自分のビルドしたいブランチを探す.
repoコマンドでソースコードを取ってくることになるが,
今後同期するときにできるだけネットワークを介さないように
あらかじめローカルにミラーをとっておく.
(全リポジトリ合わせて数十GBととても長大である)


ミラーをローカルに作成.

```sh
$ mkdir -p /usr/local/aosp/mirror
$ cd /usr/local/aosp/mirror
$ repo init -u https://android.googlesource.com/mirror/manifest --mirror
$ repo sync -j8
```

ローカルのミラーからソースを取得

```sh
$ mkdir -p /usr/local/aosp/master
$ cd /usr/local/aosp/master
$ repo init -u /usr/local/aosp/mirror/platform/manifest.git -b master
$ repo sync -j8
```

本家のリポジトリと同期したい場合はローカルのミラーリポジトリのディレクトリで`repo sync`すれば良い.

```sh
$ cd /usr/local/aosp/mirror
$ repo sync
```

## キャッシュの使用
ビルド後のサイズはとてつもなく大きくなるし,それだけあってビルドの時間もかかる.
今後ビルドを繰り返すときに待ち時間を減らすためにCCACHEを使う.

```sh
$ export USE_CCACHE=1
$ mkdir /usr/local/aosp/master/.ccache
$ export CCACHE_DIR=/usr/local/aosp/master/.ccache
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G
```

## コードのビルド
lunchコマンドでは[機種]\_[アーキテクチャ]-[デバッグ指定]のようにビルドの設定ができる.
fullとaospが選べるが違いは工場出荷相当か開発段階かということである.
KVMサポートはホストとゲストのアーキテクチャが同じ時のみ有効になるのでx86を選択した.
デバッグレベルはengが最高なのでengを選んだ.

```sh
$ source build/envsetup.sh
$ lunch aosp_x86-eng
$ make -j8
```

## ビルドのテスト
エミュレータを起動しよう.

```sh
$ emulator -qemu -m 512 -enable-kvm
```

エミュレータを起動中以下のコマンドをうつことでシェルが起動する.

```sh
$ adb shell
```

## 参考

* [Installing the Android SDK|Android Developers](http://developer.android.com/sdk/installing/index.html)
* [Downloading the Source|Android Open Source Project](https://source.android.com/source/downloading.html)
[python] 文を実行するexec, eval

#exec
[組み込み関数#exec](https://docs.python.org/ja/3/library/functions.html#exec)
>exec(object[, globals[, locals]])
この関数は Python コードの動的な実行をサポートします。 object は文字列かコードオブジェクトでなければなりません。文字列なら、その文字列は一連の Python 文として解析され、そして (構文エラーが生じない限り) 実行されます。

で、ここでは、objectに文字列を入れて使います。

# eval
[組み込み関数#eval](https://docs.python.org/ja/3/library/functions.html#eval)
>eval(expression, globals=None, locals=None)
文字列とオプションの引数 globals、locals をとります。globals を与える場合は辞書でなくてはなりません。locals を与える場合は任意のマッピングオブジェクトにできます。
expression 引数は Python 式 (技術的な言い方では、条件のリスト) として構文解析され評価されます。 このとき辞書 globals および locals はそれぞれグローバルおよびローカルな名前空間として使われます。

# 使い方
```sample_exec.py
Python 3.5.0
>>> exec("a = 10; b = 13; print(a, b)")
10 13
>>> print(a, b)
10 13
>>> eval(`a + b`)
23
```
ここでは、execで`a = 10, b = 13, print(a, b)`を実行しています。
evalは、`a + b`を実行して、その値を返しています。
また、globals()は、辞書なので、引数に辞書を与えればそこに書き込んでくれます。
#
```use_dict.py
Python 3.5.0
>>> a = dict()
>>> exec("b = 1; c = 2", globals(), a)
>>> a
{'b': 1, 'c': 2}
>>> eval("b + c", a)
3
```
execでは、空のdictのaを`{'b': 1, 'c': 2}`としています。
evalでは、globalsをaとして、辞書a内の値で計算しています。なので、実際は、`a['b'] + a['c']`を計算しています。

これを使って、'json.loads' 的な使い方をしてみる。

#
```json_like.py
# exec
''' write file '''
a = [1,2,3,4,5,6]
b = [2,3,4,5,6,7]
with open('test.txt', 'w') as fout:
    fout.write('num_list_a = ' + repr(a))
    fout.write('num_list_b = ' + repr(b))

''' load file '''
exec(open('test.txt').read())
print('a =', num_list_a, '\nb =', num_list_b)

# eval
''' write file '''
a = [1,2,3,4,5]
with open('test2.txt', 'w') as fout:
     fout.write(repr(a))
del a

''' load file'''
num_list_c = eval(open('test2.txt').read())
print('c =', num_list_c)
```
#出力
```output.txt
a = [1, 2, 3, 4, 5, 6] 
b = [2, 3, 4, 5, 6, 7]
c = [1, 2, 3, 4, 5]
```
execでは値を返してくれないので、文字列で変数の定義をしなければなりません。
evalを使った場合には、値を返してくれますので簡単なものならばjson的な使い方ができます。


#まとめ
execでpython文の実行
evalで単一の式評価
CardViewに影が付かなくて悩んだ話


とあるアプリにCardViewを使っていたのだけれど、Lollipop以降のAndroid機で影が付いてないと言うことが発覚して修正しました。

「CardView 影」とかでググれば、[ここ](http://qiita.com/aroe_lemon/items/8e1482e402aba67d2d1d)とか[ここ](http://qiita.com/konifar/items/173ffa3722c04d389f6a)とかが引っかかるので、

```xml
<android.support.v7.widget.CardView
          :
        app:cardUseCompatPadding="true"
          :
        >
      :
</android.support.v7.widget.CardView>
```
というようにプロパティを設定してみたのだけど、それでもまだ影が出なくて、「ムキーーーーーッ！」となりながら探索を続けて、ようやく[ここ](http://marcoscobena.com/2015/09/21/missing-shadows-on-lollipops-cardview/)を見つけました。

```xml
<manifest 
        xmlns:android="http://schemas.android.com/apk/res/android" 
          :
        >
          :
 
    <application 
            android:hardwareAccelerated="true"
              :
            >
    </application 
</manifest>
```
ハードウェアアクセラレーションを有効にしていないと影をつけてくれないのね。"false"にしてました。
影つけるのに負荷がかかるから、遠慮してくれてたわけね。いわれてみれば、ごもっとも。

思わぬ落とし穴があったという話でした。
Swift 2.1 で 構造体の名前とか変数名を取得する

#Swift 2.1で自信のクラス名とかを取ってみるメモ。

Swiftのバージョンによって違うようなので 2.1 でやってみた場合
これができるということは、データをjson/sql/xml化をextensionで実装できたりしそうであるが、実行速度が遅いぽいので沢山呼ばれるところでは使用しないほうがいいぽい。。。
けど、覚えておくと実装の幅が広がると思うのでメモ

```swift:MyPlayground.playground
struct ProgrammingLangage {
    var name: String
    var version: Int
    var revision: Int
    var vender: String
}

extension ProgrammingLangage {
    var customDescription: String {
        get {
            let mirror = Mirror(reflecting: self)
            var customDescription: String
            customDescription = String(mirror.subjectType)
            customDescription += "("
            var isFirst = true
            for case let(label?, value) in mirror.children {
                if !isFirst {
                    customDescription += ", "
                }
                customDescription += label
                customDescription += ": "
                let valueMirror = Mirror(reflecting: value)
                customDescription += String(valueMirror.subjectType)
                customDescription += "="
                customDescription += String(value)
                isFirst = false
            }
            customDescription += ")"
            return customDescription
        }
    }
}

let swift = ProgrammingLangage(name: "Swift", version: 2, revision: 1, vender: "Apple")
print(swift)
// ProgrammingLangage(name: "Swift", version: 2, revision: 1, vender: "Apple"
print(swift.customDescription)
// ProgrammingLangage(name: String=Swift, version: Int=2, revision: Int=1, vender: String=Apple)
```
エンジニアが嬉しいバグ報告の仕方

## 「こうしたら」「こうなった」「こうなってほしい」を後から参照できる形で書く

- 書くべき理由
    - 誰が見てもわかる(ように書けるという前提)
    - 言った言わないにならない
    - 人間は忘れる

「こうしたら」が分かると原因を調べて直すのがとても楽になります。100%再現する、たまに起こる、こうすると起こらない、みたいな情報もあればあるほど助かります。

- 例
    - 「画面Aでテキストボックスに絵文字を入力して保存ボタンを押したら」
    - 「メッセージ送信画面で送信ボタンを連打したら」

状況だけでなくアクションも教えて下さい。

- 例
    - 「フォロワーが0人の時プロフィール画面で落ちる」
        - 「フォロワーが0人の時プロフィール画面を __開くと__ 落ちる」
        - 「フォロワーが0人の時プロフィール画面で __○○を押すと__ 落ちる」

「こうなった」はより具体的に書いてください。

- 例
    - 「表示がおかしくなった」→「名前が長すぎて改行してしまい、テーブルのレイアウトが崩れた」
    - 「エラーが出た」→「Error: **************というダイアログが出た」

スクリーンショットを添付するとレイアウトの崩れやエラーメッセージを正しく認識できるので助かります。

「○○(機能)ができない」は大体通じないので、具体的に起こって欲しい何が起きなかったかを教えて下さい。

- 例:　「プロフィールを更新できない」と言われても
    - 「プロフィールを書き換えても保存ボタンが押せない」
    - 「保存ボタンを押すと「通信に失敗しました」というエラーダイアログがでる」
    - 「保存ボタンを押すと落ちる」
    - 「保存ボタンを押すと成功したように見えるが、プロフィール画面に行くと反映されてない」

「こうなってほしい」は、仕様漏れなどで動作が決まっていなかった時は特に欲しいです。「こうなってほしい」がわからないと直せません。

- 例: 「名前が長すぎて改行してしまい、テーブルのレイアウトが崩れた」に対する「こうなってほしい」
    - 名前は20文字までしか入力できないようにしてほしい
    - 長すぎる時は「…」を付けて省略してほしい
    - などなど

「正しく表示されて欲しい」は具体的でないので困ります。仕様がまとまってるところへのリンクとかでいいです。

## そのシステムで使われている名前で説明する

- 例: 「ユーザー名が表示されない」
    - ユーザーID？
    - ニックネーム？
    - 本名？
    - 「ユーザー名」っていう名前の情報はアプリ内にないんだけどどれ？

- 例: 「投稿画面を開くと落ちる」
    - 作成画面？
    - 一覧画面？
    - 詳細画面？

## 単語を正しく使う

使い分けられますか？

- バグ
- エラー
- 落ちる

## その他

「アプリが原因かサーバーが原因かわからん」みたいなのは、上記の書き方を満たしていればエンジニアのほうですぐに判断できるので、やろうとして起こったことを素直に具体的に書いてもらうのが一番いいです。
変に推測して書かれるとかえってわかりづらいです。
Android：ActionBarにOverFlowメニューを表示させる

#ActionBarのメニューはOverFlowメニューだけ！！
```
この記事はAndroid4.0以上の開発向けです。
```

Chromeとか、FaceBookとかで右上にある「≡」マークのボタンを押すと、
複数のメニューがでてきますよね？

**あれはOverFlowメニューと呼ぶらしです。**

res/menu
にXMLで記載して、ActivityのonCreateOptionsMenuメソッドでメニューを設定すれば
簡単にメニューが表示できるのですが・・・

**メニューのXML例**

```
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_camera"
        android:orderInCategory="1"
        android:title="@string/menu_complete"
        android:showAsAction="ifRoom"
        android:icon="@android:drawable/ic_menu_camera" />
    <item
        android:id="@+id/menu_search"
        android:orderInCategory="1"
        android:title="@string/menu_complete"
        android:showAsAction="ifRoom"
        android:icon="@android:drawable/ic_secure" />
</menu>
```
をres/menu/に「hoge1.xml」て名前で保存して

**Activityに**

```
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.hoge1, menu);
    
        return true;
    }
```
を記載すれば、ActionBarにボタンが２つ並びます。。。

でもやりたいことはそうじゃななくて
**常に「≡」を表示させたい!!!**

XMLに記載されているitemの属性の
showAsAction="ifRoom"
のところを
always:常に表示　にしたり
withText:テキストも表示　にしたり

いろいろ試してみましたが、「≡」が表示されませんorz

調べてみると、ActionBarに表示するボタンて、物理ボタンを意識した
ボタンらしい、戻るボタンとかカメラボタンとか・・・・

エミュレータを使って開発しているとよくわかると思いますが、
画面の横とかにキーボードとか、カメラのボタンがついていますよね・・・
あのボタンが存在すると、「≡」を表示しない仕様らしい。。

実機のGalaxyとかでやると表示されるのかな・・・？
**エミュレータで開発してる手前、はまりました・・・**
**物理ボタン気にしてなかったですorz**

それはともかく対応としては、以下になります。

## 対応内容

```
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        try
        {
            ViewConfiguration config = ViewConfiguration.get(this);
            Field menuKeyField 
              = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
            if (menuKeyField != null)
            {
                menuKeyField.setAccessible(true);
                menuKeyField.setBoolean(config, false);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        getMenuInflater().inflate(R.menu.hoge1, menu);
    
        return true;
    }
```
てな感じでtry　catchに囲まれた部分を追加します。
これは強制的に物理キーがありませんよ・・・ていう処理ですね、、、

**そしてXMLのandroid:showAsAction属性を**
**never:常に表示しない**
にします。

これにより無事、「≡」が表示され定義したメニューがすべて「≡」に収まりました。

**やった！！**


以上
pyenv note

# install
This is best.
https://github.com/shogito/ansible-pyenv

# virtualenv via pyenv
## virtualenv
```bash:
#create venv
pyenv virtualenv <venv-name>

#activate venv
pyenv activate <venv-name>

#deactivate venv
pyenv deactivate <venv-name>

#list venvs
pyenv virtualenvs

#delete venv
pyenv uninstall <venv-name>
```

# virtualenvwrapper via pyenv

```bash:
#enable workon command
pyenv virtualenvwrapper

#create venv
mkvirtualenv <venv-name>

#workon...
workon <venv-name>

```

# use venv from cron or shell-script

```bash:
# 1st activate some venv
which python
~/.virtualenvs/<venv-name>/bin/python

# call
~/.virtualenvs/<venv-name>/bin/python <python script path> <args>...

```
特定のユニットテスト TEST_METHOD を無効にする方法（MSVC++）

MSVC++のネイティブ単体テストプロジェクトの話です。

# TEST_METHOD 前に属性を追加する
`BEGIN_TEST_METHOD_ATTRIBUTE`と`TEST_IGNORE`マクロを使用します。

```cpp
BEGIN_TEST_METHOD_ATTRIBUTE(無効なテストケース)
    TEST_IGNORE()
END_TEST_METHOD_ATTRIBUTE()
TEST_METHOD(無効なテストケース)
{
    // テストケースの実装
}
```

これでこのテストケースは実行されません。

# 実行結果
![ignore_unittest.png](https://qiita-image-store.s3.amazonaws.com/0/32256/85264370-7673-b375-ca17-888996e73694.png)

# ユースケースとして

ある特定条件下では必ず失敗してしまうケースを書いて、テストケース名に特定条件下の簡易な説明を入れておくと、**このケースは書かなくて良い or 書いてはいけない**を形式知として定義できる。

## 具体的な特定条件下

ネットワークドライブ上に配置したDLLをロードして、そのAPIをテストするケース。

DLLは内部でFileIOを使用していて、自DLLと同じ階層にファイルを作成する仕様があったとする。このときに、FileIOのファイルオープンが必ずFailする。（管理者権限が必要なディレクトリ階層でも同じことがおきる）

このとき、**「ネットワークドライブ上のDLLをロードする」**が特定条件となるので、`TEST_IGNORE`属性を付加しておくことで、同じ問題にぶつからないようにする効果がある（ことを期待している）。
Vueifyをnpm v3で使う

[Vueify](https://github.com/vuejs/vueify)のUsageには、下記のように書かれていますが、npm v3ではこれだけだと動きません。

```bash
npm install -D vueify
browserify -t vueify -e src/main.js -o build/build.js
```

これは、npm v3ではpeerDependenciesに定義されているライブラリは自動的にインストールされないためです。この状態でbrowserifyを実行するとエラーになります。

下記のようにそれらを個別にインストールしてあげる必要があります。

```bash
npm install vueify vueify-insert-css babel-runtime babel-preset-es2015 babel-plugin-transform-runtime vue-hot-reload-api --save-dev
browserify -t vueify -e src/main.js -o build/build.js
```

## 余談

そうなっている理由が今ひとつわかっていません。
npmではpeerDependenciesは廃止される方針ですが、下記コミットでむしろpeerDependenciesに依存ライブラリが移動されています。

https://github.com/vuejs/vueify/commit/f60105438ed44c818c8ef338fbba841ed73cdb58

理由は出力の一貫性のため、と書いてあるので、devDependenciesに定義していると、出力が環境によって異なるようなことがあるのかもしれません。とはいえ、ちょっとインストールのコマンドが長いですね。もう少し短くなればいいのですが。
Macで仮想デスクトップを縦横に並べたいというニーズを完璧に満たす TotalSpaces2

UbuntuからMacOSに乗り換えたクチなのですが、どうしてもUnity時代の4x3に並べた仮想デスクトップが恋しくて、色々探した結果、TotalSpaces2に落ち着きました。


TotalSpaces2
http://totalspaces.binaryage.com/


こんな感じで使えます。


<img width="400" alt="Screen Shot 2015-11-27 at 17.20.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/74328/31d2c8ed-95ac-5d7c-004d-cf69b3267424.png">

アプリの定位置も決められるという親切設計。
私の場合、Xcodeは左から2、上から1、AndroidStudioは左から3,上から2に決めていて、iPhoneアプリを開発しているつもりで、Androidの実装していたなんて悩みともオサラバです！~~ありえませんね~~


ちょい高めですが、縦にも仮想デスクトップを並べたい人ならマストバイなアイテムだと思います。
試用期間もあるのでぜひ。
BeagleBone (Green) で Read-only な環境を作る

BeagleBone Greenで電源をブチ切ってもいいようにRead-onlyでブートするように設定する手順です。
調べるとRaspberry Pi版が結構出てくるのですが、違うのは`/etc/fstab`を編集するあたり。
ここを適宜変えればどのボードでも動くはずです。

# 実作業

まず、UnionFSをインストールします。
(使っているものに合わせてパッケージマネージャを変えてください)

```bash
aptitude install unionfs-fuse
```

続いて、UnionFSでマウントするようにスクリプトを作っておきます。

```bash
vi /usr/local/bin/mount_unionfs
```

内容は下記のとおり。

```shell-session:mount_unionfs
#!/bin/sh
DIR=$1
ROOT_MOUNT=$(awk '$2=="/" {print substr($4,1,2)}' < /etc/fstab)
if [ $ROOT_MOUNT = "rw" ]
then
  /bin/mount --bind ${DIR}_org ${DIR}
else
  /bin/mount -t tmpfs ramdisk ${DIR}_rw
  /usr/bin/unionfs-fuse -o cow,allow_other,suid,dev,nonempty ${DIR}_rw=RW:${DIR}_org=RO ${DIR}
fi
```

スクリプトに実行権限を与えます。

```bash
chmod +x /usr/local/bin/mount_unionfs
```

ファイルシステムの変更内容を`/etc/fstab`にも書いておきます。

```bash
vi /etc/fstab
```

ここで編集するポイントですが、`/`の項目と`/boot`の項目だけRead-onlyに設定します。
また、`/etc`と`/var`を下記の通りに追記します。
レイアウトがくずれていますがあしからず。

元の`/etc/fstab`。

```shell-session:/etc/fstab
# /etc/fstab: static file system information.
#
# Auto generated by: beaglebone-black-eMMC-flasher.sh
#
# ここの部分が
# ボードによって違います
#  ↓
UUID=573d0d44-89f4-44b0-b6cc-61e0282b47fd  /  ext4  noatime,errors=remount-ro  0  1
UUID=44C9-4065  /boot/uboot  auto  defaults  0  0
debugfs         /sys/kernel/debug  debugfs  defaults          0  0
```

自分の場合、`/etc/fstab`は以下のようになりました。

```shell-session:/etc/fstab
# /etc/fstab: static file system information.
#
# Auto generated by: beaglebone-black-eMMC-flasher.sh
#
UUID=573d0d44-89f4-44b0-b6cc-61e0282b47fd  /  ext4  ro,noatime  0  1
UUID=447C-2A4C  /boot/uboot  auto  ro 0 2
debugfs         /sys/kernel/debug  debugfs  defaults          0  0
mount_unionfs   /etc    fuse    defaults                0       0
mount_unionfs   /var    fuse    defaults                0       0
```

見せかけ用の`/etc`と`/var`を用意し、
バックアップ(`/etc_org`、`/var_org`)と`/var`の実体(`/var_rw`)を作ります。
そして再起動。

```bash
cp -al /etc /etc_org
mv /var /var_org
mkdir /etc_rw
mkdir /var /var_rw
reboot
```

以上で完成です。

# 一時的に書き込み可能にする場合

一時的に書き込む場合はファイルシステムを`rw`で再マウントしてあげればOKです。
終わったら再起動してください。

```bash
mount -o remount,rw /
# 1. 何か書き込む作業をする
#    例：aptitude install git
# 2. 再起動 reboot
```

# 参照

[pi3g Blog - Make Raspbian System Read-Only](http://blog.pi3g.com/2014/04/make-raspbian-system-read-only/)
JAVA java.util.HashSet/LinkedHashSet/TreeSet

###Setの基本特性
<FONT color="#ff0000">・それぞれの要素には、重複が許されない
・それぞれの要素には、基本的に順序関係がない
・set()やget()がない
・セットの要素には順序がない。
・拡張for文やイテレータを使ってセットの中身を1つづつ取り出す場合、どのような順序で要素が取り出せるかは一切確約されていない
</font>

■TestHashSet.java

```java
import java.util.HashSet;
import java.util.Set;

public class TestHashSet {
	public static void main(String[] args) {
		Set<String> fish = new HashSet<String>();
		fish.add("black rockfishメバル");
		fish.add("yellowtailブリ");
		fish.add("globefishフグ");
		fish.add("codタラ");
		fish.add("porcupinefishハリセンボン");
		fish.add("yellowtailブリ");
		fish.add("yellowtailブリ");
		System.out.println("魚は" + fish.size() + "種類");
	}

}
```

■TestHashSet.java 実行結果
魚は5種類

###HashSetは、1つづつ取り出す場合の順序は不明

■TestHashSet.java

```java
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class TestHashSet {
	public static void main(String[] args) {
		Set<String> fish = new HashSet<String>();
		fish.add("black rockfishメバル");
		fish.add("yellowtailブリ");
		fish.add("globefishフグ");
		fish.add("codタラ");
		fish.add("porcupinefishハリセンボン");
		fish.add("yellowtailブリ");
		fish.add("yellowtailブリ");
		System.out.println("魚は" + fish.size() + "種類");

		Iterator<String> it = fish.iterator();
		while (it.hasNext()) {
			String e = it.next();
			System.out.println(e);
		}
		System.out.println("");
		System.out.println("拡張for文");
		for (String j : fish) {
			System.out.println(j);
		}
	}

}
```

■TestHashSet.java 実行結果
魚は5種類
black rockfishメバル
globefishフグ
porcupinefishハリセンボン
yellowtailブリ
codタラ

拡張for文
black rockfishメバル
globefishフグ
porcupinefishハリセンボン
yellowtailブリ
codタラ

###LinkedHashSet
<FONT color="#ff0000">値を格納した順序に整列</font>

■TestHashSet.java

```java
import java.util.LinkedHashSet;
import java.util.Set;

public class TestLinkedHashSet {
	public static void main(String[] args) {
		Set<String> fish = new LinkedHashSet<String>();
		fish.add("black rockfishメバル");
		fish.add("yellowtailブリ");
		fish.add("globefishフグ");
		fish.add("codタラ");
		fish.add("porcupinefishハリセンボン");
		fish.add("yellowtailブリ");
		fish.add("yellowtailブリ");

		for (String m : fish) {
			System.out.println(m);
		}

	}

}
```

■TestHashSet.java 実行結果
black rockfishメバル
yellowtailブリ
globefishフグ
codタラ
porcupinefishハリセンボン

###TreeSet
<FONT color="#ff0000">自然順序付けで整列</font>
String型の複数の文字列をTreeSetに格納すると、「辞書順で取り出すことが出来る」

■TestTreeSet.java

```java
import java.util.Set;
import java.util.TreeSet;

public class TestTreeSet {
	public static void main(String[] args) {
		Set<String> fish = new TreeSet<String>();
		fish.add("black rockfishメバル");
		fish.add("yellowtailブリ");
		fish.add("globefishフグ");
		fish.add("porcupinefishハリセンボン");
		fish.add("yellowtailブリ");
		fish.add("black rockfishメバル");

		for (String s : fish) {
			System.out.println(s);
		}

	}

}
```

■TestTreeSet.java 実行結果
black rockfishメバル
globefishフグ
porcupinefishハリセンボン
yellowtailブリ
Apple Previews用の動画をQuickTimePlayer + iMovieでつくる

#はじめに
(既出と思いますが、自分のために記録として残しておきます。)
AppleStoreに出したアプリに少しでも興味を持ってもらうために、
Apple Previews用の動画を準備することにしました。

#課題
面倒だったのは、手持ちのiPhone6からキャプチャしたサイズの動画を下記4種類のサイズに
書き出すこと。

>4.7inch(iPhone6) -> 1334 x 750,  750 x 1334
>5.5inch(iPhone6 Plus) -> 1920 x 1080, 1080 x 1920
>4inch(iPhone5/5s) -> 1136 x 640, 640 x 1136 (又は 1920 x 1080 , 1080 x 1920)
>iPad -> 1200 x 900, 900 x 1200
>(動画は15秒〜30秒,500MB以下という制限あり)

iMovieではレンダリング時に、動画のサイズをカスタムで設定することはできないようでした。
そのため、レンダリング時のサイズをカスタム設定する代わりに、
1フレーム目に正しいサイズの画像(png)を挿入して、
そのあと動画を追加するという方法で、書き出しサイズを指定することができました。

#作成方法

##1.QuickTime Playerで動画のキャプチャ
キャプチャはiPhoneとMacをケーブルで接続->QuickTime Player起動->新規ムービー収録
->録画ボタンの横の<マークから、接続しているiPhoneを選択(画面、音声の2箇所) ->録画ボタン押下
という流れで簡単にキャプチャすることができます。

##2.iMovieを開いて新規アプリケーションプレビューを選択します。
![スクリーンショット 2015-11-27 16.19.43.png](https://qiita-image-store.s3.amazonaws.com/0/43766/6c2a8e75-a12d-43e1-20e2-99ae04db0391.png)
![スクリーンショット 2015-11-27 16.19.49.png](https://qiita-image-store.s3.amazonaws.com/0/43766/90ab6ced-b8ea-b0be-111b-9b1fc859026f.png)

##2.予め作成した複数サイズの画像(png)と、キャプチャ動画を読み込みます。
![スクリーンショット 2015-11-27 16.20.46.png](https://qiita-image-store.s3.amazonaws.com/0/43766/edf0e276-f14d-e09e-2379-94d21b762214.png)

##3.書き出したいサイズの画像1枚と、キャプチャ動画を選択して、タイムラインに並べます
![スクリーンショット 2015-11-27 16.21.22.png](https://qiita-image-store.s3.amazonaws.com/0/43766/cbf8cd6e-f5de-bdb5-e0c3-900546cb69dc.png)

##4.こんな感じ。
![スクリーンショット 2015-11-27 16.21.55.png](https://qiita-image-store.s3.amazonaws.com/0/43766/3bdb121c-4114-ff36-6e6f-26f7d9650727.png)

##5.右上にあるシェアボタンからプレビューを選択します。
![スクリーンショット 2015-11-27 16.22.18.png](https://qiita-image-store.s3.amazonaws.com/0/43766/22e80468-8fa3-c2fe-8a36-1d9b5aa3e07a.png)

##6.解像度が、1枚目にいれた画像と同じサイズになっていると思います。これで出力すればOK.
![スクリーンショット 2015-11-27 16.22.25.png](https://qiita-image-store.s3.amazonaws.com/0/43766/f7b6ce01-f1a9-b4c9-f464-bb39982b78d7.png)

##7.この作業を用意したいサイズ分だけ繰り返せば必要な素材は揃います。

##8.おしまい
最後に、今回使用したサイズを出力するための画像を3種類掲載しておきます。
###4.7inch
![4.7inch.png](https://qiita-image-store.s3.amazonaws.com/0/43766/17e2cb98-ae04-ecf7-7a4d-4c2a2c79a443.png)

###4inch
![4inch.png](https://qiita-image-store.s3.amazonaws.com/0/43766/21dea981-032c-68f6-989e-90729837415c.png)

###5.5inch
![5.5inch.png](https://qiita-image-store.s3.amazonaws.com/0/43766/a16004f1-2d36-f972-33c3-655ae6f48820.png)
Git for WindowsでPythonがうまく動かない場合の対処法

Git for Windowsが2系に上がってから、付属のGit Bashで`python`などの対話モードで扱うコマンドがうまく動かなくなりました。

これはGit Bashに使われているMinTTYの既知の不具合(というか仕様?)らしく、対話モードを伴うコマンドは`winpty`を使えということのようです。つまり、Git Bash上で以下のように`python`を起動すれば正常に動作します。

`winpty python`

いちいち`winpty`つけないといけないのか、めんどくさい、という方は`<Git installed folder>\etc\profile.d\aliases.sh`を修正することでも対応できます。`for name in ...`の所に、winpty経由にしたいコマンドを追加すればOKです。

```aliases.sh
	for name in node ipython php php5 psql python2.7 python
	do
		alias $name="winpty $name.exe"
	done
```

そもそもなぜこうしないのか?については[何か理由がある](https://github.com/git-for-windows/git/issues/491)よう・・・ですが、読んでもいまいちわかりませんでした(MSys2のPythonかどうか見分けないといけないから、でも見分ける方法はある、みたいな感じになっていて謎)。心配な場合は`ipython`の方が2.6.3からは正式に入っているので、対話モードにしたい場合はipythonの方を使うという手もあります(こちらの方が機能的にリッチでもあるので)。


参考

* [Git for Windows Known issues](https://github.com/git-for-windows/build-extra/blob/43d672f/installer/ReleaseNotes.md#known-issues)
* [(Some) interactive commands unusable with git-bash.exe](https://github.com/git-for-windows/git/issues/399)
* [Use `winpty` to run ipython, too](https://github.com/git-for-windows/build-extra/commit/ceda40c70aa3addec73b7d36f96363c71fa67256)
graph > 横軸にdayとhourを取る例

グラフを描画する時、横軸にhourを取るとする。

複数日にまたがる時に、hourだけだと各点がどの日がわかりにくい。
dayを追加することになるだろうか。

dayとhourを軸に持つグラフの例を探してみた。

- [Dec 23 06h @ plotly user](https://plot.ly/~nseymoursmith/5/pzt-sensor-au-vs-month-day-hour/) : 月と日付き

- [Tue 06 Mar 12:00 @ bom.gov.au](http://www.bom.gov.au/watl/about/about-latest-weather-graphs.shtml) : 曜日もついている

わかりにくいためか、dayとhourだけの表記はぱっと見たところなかった。

`06/12`、`06 12`、`06 12h`など分かりにくいか。
`d06 12h`や`06d 12h`も独自表記で使用者にはわかりにくいかもしれない。
コマンドメモ(個人用メモ)

#コマンド一覧
自分用メモなので、あまり書きません。
WindowsコマンドとLinuxコマンドを両方書きましたが比較をしてません。
(Linuxについても、コマンドの書き方が違う物があります。BSD系とかのも書いていくつもりですが、、、Linuxは管理権限等が違うものがあるのでややこしかったり)


##Windows系ネットワークコマンド
(主に、ネットワークコマンドが全般ですが、、)

|コマンド名|意味|
|:------|:-----:|
|ipconfig|自身のPCのIPアドレスを検索するために使います。|
|getmac|PCのイーサネットカードにバインドされてる情報を表示|
|ping|ノードの到達性を確認するために用いる|
|route|ルーティングテーブルの表示/設定などを行う|
|netstat|全てのプロトコル/プログラム名などの一覧を表示|
|tracert|IPアドレスを指定して、ホストまでの経路を調査|
|nslookup|DNSサーバを検索|

##Linuxコマンド
主に使用しているのが管理用コマンドとネットワークコマンドぐらいかな
*列挙なので順不同

|コマンド名|意味|
|:----|:----:|
|cd|ディレクトリ移動|
|cat|ファイル読み出し(全部)|
|tail|ファイル読み出し(下から)|
|history|コマンドを使った順に読み出し|
|chmod|ファイル/フォルダに属性アクセス権を持たせる|
|ifconfig|ipアドレス表示(Linuxのみ)|
|du|ディスク使用量を調べる|
|df|ディスク使用量を調べる|
数学関数を使おう

#はじめに
　皆さんは数学関数を知っていますか？例えばPow(x,y)はxのy乗を出力してくれます。こういった数学で使われるような計算はC#やunityにあらかじめ関数が用意されています。こういった関数をうまく使うことで計算を簡単に行ったり、自分の行っている計算の明示化を行ったりすることができるので積極的に使用していきましょう。

#MathとMathf関数
　unity上で数学関数を使おうとすると二つの関数がある。Math関数とMathf関数である。どちらの関数を使うか核心がもてない場合はMathf関数の利用をおススメしておく。

#Mathf関数まとめ

関数名（引数）	機能
Clamp(,min,max)	最大・最小値でカット
Pow(x,y)	xのy乗
Ceil(x)	　　　　 小数点切り上げ（floatのまま）
CeilToInt(x)	小数点切り上げ＆整数化
Floor(x)	小数点切捨て（floatのまま）
FloorToInt(x)	小数点切捨て＆整数化
RoundToInt(x)	小数点四捨五入＆整数化
Sign(x)	        符号（1または-1(float))
Lerp(from,to,t)	補間
LerpAngle(from,to,t)	角度補間（360度を考慮）
SmoothDamp(cur,tar,vel,t,s,dt)	t秒でcurからtarにスムージング
SmoothDampAngle(cur,tar,vel,t,s,dt)	SmoothDampの角度版
Repeat(t,length)	length周期で繰り返し
ClosestPowerOfTwo(x)	もっとも近い２のｎ乗の数値を返す
PingPong(float t, float length)	周期lengthで0-tの範囲内の数値を返す

Deg2Rad	degreeからradianへの変換乗数
Rad2Deg	radianからdegreeへの変換乗数
PI	π
windows > PDFリーダーがインストールされていない環境でPDF印刷する > Chromeへドロップ / Chromeから印刷

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


Acrobar readerなどのPDFリーダーがインストールされていないPCでPDF印刷する方法。

Chromeがインストールされているという前提がある。

手順
1. Chromeを開く
2. PDFファイルをChromeへドロップする > プレビューが見える
3. Chromeから印刷をする

手順2の段階でプレビューが見えないならこの方法は成り立たない。


Chromeをインストールした段階で「PDFリーダーがインストールされていない」と言えないかもしれない。
「要素が範囲に含まれる」という演算子を作ってみた

まあ割とありますよね？例えば `let a = 1` があって、`a >= 0 && a < 10` という判断をやりたい時。

C 言語や Objective-C の時は本当にそういう演算子がなくて、いちいち律儀に `a >= 0 && a < 10` で書くしかなかったけど、Swift になって一応 `~=` という演算子が出てきました。これで「この範囲内にこの要素がある」という判断が割と簡単に書けるようになりました：

```swift
let a = 1
0 ..< 10 ~= a // true
```
でも、いやいや、待ってよ、この書き方ってめちゃくちゃ分かりづらくね？分かりづらいというかなんか癖があるんじゃね？だって話す時って「この要素はこの範囲内にある」って言うじゃん？上の数式も変数が左にあるじゃん？それに数学だって「a ∊ A」って書くじゃん？どう考えても要素の方が範囲より先にくるはずじゃん？なんでここだけ範囲の方を先に書かなくちゃいけないの？これはただ単に英語で言う「contains」の意味になってるだけじゃん？

というわけで、わかりやすいように、数学でいうこの「∊」って演算子を作ってみたいと思います：

```swift
infix operator ∊ {}

func ∊ <T where T: Comparable> (lhs: T, rhs: HalfOpenInterval<T>) -> Bool {
	if lhs >= rhs.start && lhs < rhs.end {
		return true
	} else {
		return false
	}
}

func ∊ <T where T: Comparable> (lhs: T, rhs: ClosedInterval<T>) -> Bool {
	if lhs >= rhs.start && lhs <= rhs.end {
		return true
	} else {
		return false
	}
}
```

そして、使うときは数学の時と同じように：

```swift
let a = 1
a ∊ 0 ..< 10 //true
```

のように使えばいいです。

でもこのままではちょっと使いづらいところありますね、だって「∊」って記号普通のキーボードじゃあ一発で出てこないもん。
というわけで、いろいろ探してみましたが、`∊` の代わりに `…=` を使うことにしました。「…」は普通の Mac の US キーボードなら「opt + ;」で出てきますのでまあまあ打ちやすいです（JIS キーボードは手元にないのでわかりませんが…）。上記のソースコードのところの「∊」を全て「…=」に置き換えればそのまま使えますので、皆さんも自分のわかりやすい記号で演算子を定義してみれば良いのではないかと思います。

あとここでは `HalfOpenInterval` と `ClosedInterval` だけしか定義していませんが、もし必要なら `Range` も入れてもいいかもしれません。自分はそれやりたくないが。
Padrino Cacheの設定方法が変わった


久しぶりに`Padrino Cache`を使おうと思ったら、初期設定に失敗。どうもバージョン0.12.0あたりからエンジンが`Moneta`に変わってインターフェースも変更されてるのに、マニュアルが更新されていない様子。

とりあえず[Monetaのドキュメント](https://github.com/minad/moneta)見ながら、目先で使いたい`memcached`の設定方法だけ備忘メモ。

```basy
# 以前の（マニュアルにある）指定方法
set :cache, Padrino::Cache.new(:Memcached, '127.0.0.1:11211')

# 現在の指定方法
set :cache, Padrino::Cache.new(:Memcached, :server => '127.0.0.1:11211')
```
Rails | コード内のコメントを見つける方法 (TODO、FIXME、OPTIMIZE、HACK、REVIEW)


`$ rake notes`

で、プロジェクト内のアノテーションコメントを一覧表示してくれる。

例:


```
app/models/example.rb:
    * [ 10] [TODO] モデルにカラムを追加する

app/models/example.rb:
  * [  4] [FIXME] create が動かない
```

# 特定のアノテーションだけ表示する

たとえば

`$ rake notes:custom ANNOTATION=FIXME`

と書けば FIXME だけを見つけてくれる。

# 独自のアノテーションを見つける

文字列で検索しているだけなので。
独自のアノテーションも見つけられる。

```rb:file
# DANGER: 注意!
```

`$ rake notes:custom ANNOTATION=DANGER`


# アノテーションの書き方

\# + 半角スペース + アノテーション + 半角スペース + 本文　

という形式で書くこと。

例:

```rb
# FIXME: ここを修正する
```

# 補足

- Rails 標準なので gem のインストールは必要ない。
- 「Rails FIXME 見つける」でググってもヒットしなかったのでメモ。



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
Alamofireのrequestにtimeoutを設定する

# 環境

- Xcode: 7.1
- Alamofire: 3.1.3

# Problem

- Alamofireのhttpリクエストにtimeoutを設定したい
- googleで検索した方法でtimeoutを設定すると、「Error Domain=NSURLErrorDomain Code=-999 "cancelled"」というエラーが発生する
 - 参考: https://github.com/Alamofire/Alamofire/issues/157

# Solution

いろいろ試した結果、以下のコードでtimeoutが設定されることを確認した。
どうして他の方法だとcancelledになるのかまでは調べてない。

```swift
// ApiClient.swift:

class ApiManager {
  static let sharedInstance: Manager = {
    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.HTTPAdditionalHeaders = Manager.defaultHTTPHeaders
    configuration.timeoutIntervalForRequest = 10
    return Manager(configuration: configuration)
  }()
}

class ApiClient {
  static func hoge() {
    ...
    let manager = ApiManager.sharedInstance
    request = manager.request(method, urlString, headers: headers, parameters: parameters)
    request.validate(statusCode: 200..<500)
      .responseJSON  { response in
        ....
      }
    }
  }
}
```
JAVA Iterator

<FONT color="#ff0000">■コレクション特有の「1つづつ取り出す」方法
public interface Iterator<E>
コレクションの反復子</font>
**反復子**→コンテナ(物を収める容器)からオブジェクトを1つづつ取り出す働きをするオブジェクト



■hasNext.java

```java
package hasNext;

import java.util.ArrayList;
import java.util.Iterator;

public class hasNext {
	public static void main(String[] args) {
		ArrayList<String> fish = new ArrayList<String>();
		fish.add("anglerfish鮟鱇");
		fish.add("mackerel鯖");
		fish.add("saury秋刀魚");
		fish.add("globefishふぐ");
		Iterator<String> it = fish.iterator();

		while (it.hasNext()) {
			String e = it.next();
			System.out.println(e);
		}
	}

}
```

■hasNext.java 実行結果
anglerfish鮟鱇
mackerel鯖
saury秋刀魚
globefishふぐ
キーワードを全角込みの空白で区切る


ちょっとしたフリーワード検索を実装しようと、入力された文字列を空白で分解する場面が。

単純に次のようにすると、全角スペースがうまくいかない。

~~~ruby
"aaa bbb ccc".split(' ')
#=> ['aaa', 'bbb', 'ccc']

"あああ　いいい　ううう".split(' ')
#=> ['あああ　いいい　ううう']
~~~

事前に文字列置換をかけたり、正規表現に全角スペースを追加したりするのも良いけど、今回は多言語仕様のアプリなんで、日本語の全角スペースをコード中に含めるのは違和感。そこでposixの空白演算子を試してみたら、うまくいった。

~~~ruby
"あああ　いいい　ううう".split(/[[:blank:]]/)
#=> ['あああ', 'いいい', 'ううう']

# tabでもOK
"aaa bbb¥tccc".split(/[[:blank:]]/)
#=> ['aaa', 'bbb', 'ccc']
~~~

連続した空白も除去してしまいたければ、もうひと工夫。

~~~ruby
"あああ　　いいい　ううう".split(/[[:blank:]]/)
#=> ['あああ', '', 'いいい', 'ううう']

"あああ　いいい　ううう".split(/[[:blank:]]+/)
#=> ['あああ', 'いいい', 'ううう']
~~~
AzureFileを自動でマウントする

##前書き
前回はAzureFileを自前のPCにマウントする方法を投稿しました。
今回は下記忘れていたAzureFileを自動でマウントする方法を投稿します。

PC再起動時とかでネットワークドライブのマウントが外れてしまうので、
毎回起動時にコマンドを実行するというナンセンスさを解消できるでしょう。

**WindowsOS 10以降を対象にしています。**

##①バッチの作成
メモ帳を開いて下記のAzureFileをマウントするコマンドを記載します。

```
net use z: \\[ストレージ名].file.core.windows.net\[共有フォルダ名] /u:[ストレージ名] [ストレージキー]
echo off
```

入力が終わったら拡張子を「bat」にして保存してください。
ここでは「remount.bat」としておきます。

##②スタートアップに放り込む
スタートアップに上記で作成したbatを配置します。
スタートアップに配置したものはOS起動時に実行されます。

スタートアップフォルダの場所がわからない場合は下記のコマンドで開くことが出来ます。

```
１、WindowsKey + R で「ファイル名を指定し実行」を起動します
２、shell:startupと入力するとスタートアップフォルダが開きます
```

batを配置します。
![refer1.png](https://qiita-image-store.s3.amazonaws.com/0/93820/519fe452-72ac-5ab2-55ed-4b3a6b4e0fed.png)

batを配置し終わったらPCを再起動してみましょう。
AzureFileがマウントされていれば成功です。



これで毎回コマンドを入力する手間を省くことが出来ます。
RPi2 > 40ピンのコネクタ > MIL規格 / 航空電子

```txt:装置
Raspberry Pi2
```

RPi2用のコネクタを買うとしたら何がいいだろうか。

友人に聞いたところ、航空電子のMIL規格コネクタはいけるかもとのこと。

検索したら以下が見つかった。
[基板対電線接続用コネクタ 2.54mmピッチ PSシリーズ MILタイプ 圧接式ソケット 1.27mmピッチフラットリボンケーブル接続用 デージーチェーンタイプ](http://www.monotaro.com/g/00410441/)

7セグメントLEDを付けるとき、こういうコネクタに圧着済の方が取り外しが楽だろうか?

一方で、ケースにRPi2が入った状態でそのコネクタの抜き差しがしやすいかは別に検討する必要がある。
Node.jsのプロジェクトローカルなコマンドを叩く

最近のフロントエンドは`package.json`があるようなディレクトリの中で作業していることが多い。
そして、npmモジュールをモリモリ使っている。
npmモジュールの中にはターミナルから叩けるコマンドを用意しているものがけっこうある。
グローバルにインストールしてどこからでも叩けるようにしたりもするんだけど、バージョンの問題もあって、プロジェクトローカルで管理したいという時もあったりする。

`npm install`するとモジュールにコマンドが用意されていた場合`/path/to/project/node_modules/.bin`にシンボリックリンクが張られる。

だけど、毎度パスを指定してコマンドを叩くのはしんどい。

```bash
./node_modules/.bin/command
../node_modules/.bin/command
/path/to/project/node_modules/.bin/command
```

`npm`はローカルコマンドにアクセスするための便利な機能を提供している。

```bash
npm bin
```

これを叩くと該当するプロジェクトのコマンドへのパスが返ってくる。
なので、

```bash
$(npm bin)/command
```

でパスを解決してコマンドを叩くことができる。

これでも少し面倒な感じがある。
そこでパスを通す方法やらalias設定する方法やら試したが色々問題があった。
最終的に簡単なshellのfunctionで解決することにした。

```bash
npmbin(){[ $# -ne 0 ] && $(npm bin)/$*}
```

の一行を`.bashrc`やら`.zshrc`やらに追加すると

```bash
npmbin command
```

でコマンドが叩けるようになる。

設定すら面倒だという人のためにnpmモジュールを作ってみた。

```bash
npm i npmbin -g
```

これで、いつでもどこでもコマンドを叩けるぞ！

```bash
npmbin command
```

ちなみになにも渡さないと、コマンドのパスと一覧を表示するようにしてみた。

```bash
npmbin
/path/to/project/node_modules/.bin
command1
command2
command3
```

以上宣伝でした〜。m(_ _)m
APIの種類についてちょっと調べたメモ

新卒でいちばん最初に配属された部署が、[ソーシャルゲームプラットフォームのAPIを開発する部署](http://developer.mixi.co.jp/)でした。

"れすと"だとか、"れすとふる"だとか、名前が似通ってて何言ってんだこいつ状態だったときのメモ書きを再構成して、Qiitaにまとめておこうと思います。

# REST API
  - REpresentational State Transfer の略。(具象的/写実的な状態)
  - RESTの世界ではネットワーク上のコンテンツを一意なURLで表す.(これをRESTfulと表現する)
  - URLに対してGET, POST, PUT, DELETEでリクエストを送信し、レスポンスをXMLやjsonで受け取る.
  
# RESTful API
  - パラメータを指定して特定のURLにHTTPでアクセスすると、
    XMLで記述されたメッセージが送られてくるシステム(または呼び出しインターフェース)を指す.
    
# SOAP API
  - SimpleObject Access Protocolの略。
  - リクエスト・レスポンス共にXMLフォーマットのデータで行う形式。
  - SOAPのURLは操作と対応づけられるため、URLの命名が対話的になることが多い。
  
# REST vs SOAP
  - RESTは不特定多数を対象とした、入力パラメータの少ない情報発信・検索サービスに向いてる。
  - SOAPは複雑な入力を必要としたり、入出力に対してチェックが必要なサービスに向いてる。
  
# REST vs RPC
  - 続きはまた次回書きます。