OmniAICreator/Qiita-1.07M huggingface dataset:
Gitの基本的なコマンド


#Gitとは
 分散型バージョン管理システム

#リポジトリとは
 リポジトリとは、ファイルやディレクトリの状態を記録する場所

* リモートリポジトリ
 専用のサーバに配置して複数人で共有するためのリポジトリ

* ローカルリポジトリ
 ユーザ一人ひとりが利用するために、自分の手元のマシン上に配置するリポジトリ

#既存のリポジトリに変更を加える
1.既存のリポジトリの取得
`git clone <リポジトリ名>`

2.新規で作成したディレクトリやファイルをインデックスに登録
`git add <ファイルパス>`

3.インデックスに登録されたファイルをコミットする
`git commit -m <コミットメッセージ>`

4.変更されたファイル一覧表示
`git status`

5.ローカルリポジトリの変更をリモートリポジトリに更新する
`git push`

> 引用
サルでもわかるGit入門
http://www.backlog.jp/git-guide/
EC2 tomcat環境構築手順

適当気味に書いていますので、バージョンなどはよしなに補完してください。
凝ったことはせず、ただデモページを開くまでの手順です。

0.準備
EC2インスタンスを作成し、アクセスする。
sshを繋げるところまでできればOKです。

1.最初はjavacが通らないらしいので追加する。
sudo yum search java
sudo yum -y install java-1.7.0-openjdk-devel

2.どっちも通ることを確認する。
java -version
javac -version
(参考：http://dev.classmethod.jp/cloud/aws/java8_tomcat8_on_amazon_linux/)

3.tomcat7をインストール
sudo yum install tomcat7 tomcat7-webapps
(WebAppsはデモページを表示するために使用。)

4.起動スクリプトを実行
sudo /etc/init.d/tomcat7 start

5.ポートを解放する
(※注意：運用的に良いものかどうかまでは考慮していません、
とりあえず一時的に動かすための設定です。）
AWSコンソールのセキュリティグループ設定を開き、
上記手順を行ったインスタンスのセキュリティグループに対して、インバウンド8080を許可する。

これでデモページが表示できるようになりました。
Socket.ioの部屋毎の分岐のベストプラクティスはないか

# 同じ部屋
roomという概念

## 階級分けメッセージ
最初にjoinしたユーザから、のちに続くユーザに従ってメッセージを変更、あるいは送信しないなど。
例えば、「◯◯が入場しました。」というメッセージは、新規ユーザから既存ユーザに対してのみ送信されるものになる。また、メッセージ自体は、特別な理由が無ければ同じ部屋の全員に送信されるべきものとなる。

## やり方
最も効率が良い方法がわからない。
よって、独自のやり方で書く。ベストプラクティスがあれば、ぜひ教えてください。

socket.ioのサーバを立ち上げ、コネクションを成立させた時にもらえる引数に様々な値がブッ込まれている。セッションの共有などの方法もあるが、同じ部屋のメンバーにメッセージを送信する場合意味合いが異なるのではないかと思い外した。その値を使って、room毎のユーザの認識を行うこととした。
adapterという変数には、room情報が格納されており、ここにはjoinというメソッドにより該当ユーザのidがpushされる。

```.js
io.on('connection', function(socket) {
  socket.on("serverMsg", function(data) {
    var arr = new Array(),
        id,
        json,
        // 部屋情報を取得
        room = socket.adapter.rooms[data.room];

    // dataにはroomという変数を用意してあり、メッセージが飛んできた部屋情報を格納してある
    for (room_id in room) {
      // 
      arr.push(room_id);
    }

    // 色々な処理がある(略)

    // 対応した部屋に入っていく
    socket.join(data.room);
    // 自分へ
    socket.emit("sendMyMsg", json);
    // 部屋へ
    socket.to(data.room).emit("sendRoomMsg", json);
  });
});
```
socket.adapter.roomsに入っている情報から、socket.idによりユーザIDが入っているので、それがあるかどうかで新規ユーザかどうかを判断している。

## 仕様がややこしい

* 部屋へのメッセージを送る際に、複数のメッセージを送るとする。
* その複数のメッセージは新規ユーザに対しては表示したりしなかったりする。
* 既存ユーザに対しては必ず表示するようにするが、2回目からは表示しないようにする。

何かうまいやり方はないかと探したが、力不足により諦めsocketの中身をゴニョゴニョして力技でコードを書いている。正しいやり方はないものか。作れるが、効率的なやり方を持ってして作りたい。

## 理想
現在、`{ ユーザ: { 部屋ID, 新規ユーザかどうか, JOIN時間, ・・・, など } }`というような部屋情報を詰め込んだデータをjsonで作って(サンプルソースのような形で、socketの中身をゴニョゴニョして)から管理しているので、それをうまく処理する、あるいはメソッドなどでヒモ付が出来るようなものがあれば助かるんだけどな。
【Typescript】DefenitelyTypedはjQuery objectをbootstrapで拡張しない？

DefinitelyTypedを使えばTypescriptでもJavascriptの資産を使えることを知った。が……

    npm init
    bower init
    tsd init
して

    bower install jquery --save
    bower install bootstrap --save
して

    tsd install jquery --save
    tsd install bootstrap --save
して、tsd.jsonが

    {
       "version": "v4",
       "repo": "borisyankov/DefinitelyTyped",
       "ref": "master",
       "path": "typings",
       "bundle": "typings/tsd.d.ts",
       "installed": {
         "jquery/jquery.d.ts": {
           "commit": "c5a2f44bab06cf9f2bcc14530171daac1cebff6c"
         },
         "bootstrap/bootstrap.d.ts": {
           "commit": "c5a2f44bab06cf9f2bcc14530171daac1cebff6c"
         }
       }
     }
もちろんtsd.d.tsは

    /// <reference path="jquery/jquery.d.ts" />
    /// <reference path="bootstrap/bootstrap.d.ts" />
としてやれば、index.tsとかで

     /// <reference path="../../typings/tsd.d.ts" />
     import $ = require('jquery');

     $('#modal').modal();

とか使えると思ったのに
```Uncaught TypeError: $(...).modal is not a function```

とか出ちゃう。要するにjQueryに対してbootstrapで追加された機能が追加(inject)されていないということだ。なんでだろー
Bootstrap 4 ファーストインプレッション

- Bootstrap 4はver. 3までよりもマークアップが改良されている。
- WAI-ARIA対応も強化されている。
- JavaScript SPA開発に必要なコンポーネントの充実度（非標準のものも含む）に期待できる。
- 短期的な開発生産性は高そう。
- 長期的な保守性については、まだ結論が出せない。

仮説：標準のclassをそのまま使い続けるのではなく、適宜独自classを定義したうえでmixinするようにリファクタリングしていけば、長期的な保守性も担保できるのではないか。

要検討：BDUF的なCSSアーキテクチャ設計ではなく、アジャイルCSSアーキテクティングでどこまでいけるか。

関連情報：

- [Bootstrap 4 alpha · Bootstrap Blog](http://blog.getbootstrap.com/2015/08/19/bootstrap-4-alpha/)
- [CSSフレームワークBourbon/Neat/Bitters/Refillsは美しい](http://qiita.com/zerobase/items/e763dc96b7b398bf8005)

---

メモ：


v3ではNavbarのマークアップが意味不明すぎて「ないわー」と思っていた：

http://getbootstrap.com/components/#navbar

v4ならちゃんと「読める」ので「アリ」だなと：
http://v4-alpha.getbootstrap.com/components/navbar/
http://v4-alpha.getbootstrap.com/components/navs/#using-dropdowns
awspecを活用して、SecurityGroup修正業務を堅実に実施する

深淵なる理由によりSecurityGroupの修正業務が発生したので、[awspec](https://github.com/k1LoW/awspec)を利用して堅実に実施してみます。

## 1. 修正前のSecurityGroupの状態をawspecでspecファイル化

まずawspecの環境を作ります。awspecで利用するIAMのポリシーは必ずリードオンリー権限のみにしてください。

```sh
$ mkdir awspec
$ cd awspec/
$ awspec init
 + spec/
 + spec/spec_helper.rb
 + Rakefile
 + spec/.gitignore
 + .rspec
$ cat <<EOF > spec/secrets.yml
region: ap-northeast-1
aws_access_key_id: XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
EOF
```

SecurityGroupの状態を`awspec generate security_group`コマンドを使ってspecファイル化します。

```sh
$ echo "require 'spec_helper'" > spec/security_group_current_spec.rb
$ awspec generate security_group my-vpc >> spec/security_group_current_spec.rb
```

これで現状のSecurityGroupのspecファイルが生成されました。
実際に`rake spec`を実行してみます。

```sh
$ rake spec

...

Finished in 8.77 seconds (files took 2.66 seconds to load)
217 examples, 0 failures
```

グリーンになることを確認しました。

## 2. 今回修正するIPアドレスをspecに追記

今回は [203.0.113.1](http://tools.ietf.org/html/rfc5737)からのHTTPアクセスを許可します。

```ruby
describe security_group('sg-12a345b6') do
  it { should exist }
  its(:group_id) { should eq 'sg-12a345b6' }
  its(:group_name) { should eq 'my-security-group-name' }

...

  its(:inbound) { should be_opened(80).protocol('tcp').for('203.0.113.1/32') } # 深淵なる理由により80ポートを開放
end
```

コメントが書けるのが意外に便利だったりします。

`rake spec`を実行してレッドになることを確認します。

## 3. マネジメントコンソールなどでSecurityGroupの修正を実施

手動。。。

## 4. チェック

修正後、`rake spec`を実行してグリーンになることを確認します。

終わり！
ruby 配列はいちどに初期化しない


```rb
array1 = array2 = []

array2.push('apple')
array2.push('banana')

puts array1
```

って書くと、array2 に push しているはずなのに、

```
apple
banana
```

って結果になってしまう。
array1 = array2 = [] の時点で同じ参照になってしまうぞ。

注意。








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
ArgumentError: Index name xx on xx already exists

##背景
開発中で『rake db:migrate』をすると、『ArgumentError: Index name xx on xx already exists』というエラーが出てきた。

おそらく、前同じ命令を実行する時、エラーになって、『rake db:rollback』の実行をわすれてしまって、そうなっちゃったじゃないかなあ。

##対策
###戻れる時
```
rake db:rollback
```

###戻らない時
* indexを確認する

```
ActiveRecord::Base.connection.tables.each do |table|
    puts ActiveRecord::Base.connection.indexes(table).inspect
end
```

* テーブルを消せばいい

indexももちろん消してしまうので

```
ActiveRecord::Migration.drop_table :table_name
```


##参照
http://stackoverflow.com/questions/1683948/activerecord-finding-existing-table-indexes/1684809#1684809

http://stackoverflow.com/questions/16074630/how-can-i-remove-a-column-from-table-using-rails-console
git clone 時に秘密鍵を指定する

~~git の支援が弱くて変なやり方しかない。~~
=> [GIT_SSH_COMMAND](https://qiita.com/sonots/items/826b90b085f294f93acf#git_ssh_command-%E3%82%92%E4%BD%BF%E3%81%86) または [git -c core.sshCommand](https://qiita.com/sonots/items/826b90b085f294f93acf#git--c-coresshcommand-%E3%82%92%E4%BD%BF%E3%81%86) が使えます。

## .ssh/config をいじる

.ssh/config を１瞬いじって元に戻す、みたいな

```~/.ssh/config
Host github.com
    User git
    IdentityFile ~/.ssh/deploy_key
```

絶対にやりたくない

## .ssh/config に別 Host として登録する

```~/.ssh/config
Host deploy1
  Hostname github.com
  User git
  IdentityFile ~/.ssh/deploy1_key

Host deploy2
  Hostname github.com
  User git
  IdentityFile ~/.ssh/deploy2_key
```

で、git clone の時は Host 名を指定する

```
$ git clone deploy1:organization/repository
$ git clone deploy2:organization/repository
```

とはいえ deploy key ごとに .ssh/config にエントリを増やしたくない。

## GIT_SSH を使う

こんなスクリプトを作って、

```bash:git-ssh.sh
#!/bin/sh
exec ssh -oIdentityFile=~/.ssh/deploy_key "$@"
```

GIT_SSH 環境変数に指定する。

```
$ GIT_SSH=git-ssh.sh git clone git@github.com:...
```

とはいえ deploy key ごとに git-ssh スクリプトを作りたくはない。
※ GIT_SSH に指定するスクリプトに引数を指定したかったが、ダメ

### git wrapper

なのでこんな git ラッパーを作るかんじになった。

```bash:git-ssh.sh
#!/bin/bash

usage_exit() {
    echo "Usage: $0 [-i identity_file] -- [GIT ARGUMENTS]" 1>&2
    exit 1
}

while getopts i:h OPT
do
    case $OPT in
        i) IDENTITY_FILE=$OPTARG
           ;;
        h) usage_exit
           ;;
    esac
done
shift $((OPTIND - 1))

if [ -n "$IDENTITY_FILE" ]; then
    tempfile=$(mktemp --dry-run)
    cat <<EOF > $tempfile
#!/bin/sh
exec ssh -oIdentityFile=${IDENTITY_FILE} "\$@"
EOF
    chmod a+x $tempfile
    GIT_SSH=$tempfile git $@
    rm -f $tempfile
else
    git $@
fi
```

これを使うと

```
$ git-ssh.sh -i ~/.ssh/deploy_key -- clone git@github.com:....
```

と出来るようになる。

## GIT_SSH_COMMAND を使う

EDIT: 2017-08 thanks to mpyw

[git 2.3](https://github.com/blog/1957-git-2-3-has-been-released) 以降で環境変数 `GIT_SSH_COMMAND` で ssh コマンドを指定できるようになった :tada:

```
env GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example -F /dev/null" git clone ...
```

## git -c core.sshCommand を使う

EDIT: 2018-06 thanks to akirattii
EDIT: 2019-05 thanks to egtra

git 2.10.0 から `git config core.sshCommand` で ssh コマンドを指定できるようになった
。また、一時的に config 設定をしたい場合は `git -c` オプションを利用できる。

```
$ git -c core.sshCommand="ssh -i ~/.ssh/id_rsa_example -F /dev/null" clone ...
```
Atomでのコメント操作に空気を読ませる comment-dwim-light パッケージをEmacsからパクって作った


# DWIM (Do what I mean)
Atomに乗り換えて一番不便だったのがコメントの挿入ですよね。
まぁ他にもいろいろあるのですが、凝ったことをしなければなんとかなるかな？

Emacsでは `comment-dwim` というコマンドがあり、どこにカーソルがあっても同じ操作で空気を読んで良い感じにコメントを入れることが出来たのですが、Atomだと書いたRegionをコメントアウトするくらいしか方法が無さそうのでこれでコードを編集する気がなかなかおきませんでした。
（`command-dwim` についてのナイスな説明は[こちら](http://d.hatena.ne.jp/tomoya/20091015/1255593575)をどうぞ。）

もしかしてパッケージにあるかなと思って探してみたんですが、パッケージにも無さそう。
ということでオリジナルに比べると機能が足り無さそうな劣化版ですが、自分が利用している範囲内でパッケージをでっち上げてみました。

[comment-dwim-light package for Atom](https://atom.io/packages/comment-dwim-light)

# FEATURE

機能的には

 1. 複数行の選択範囲があればその行のコメントアウトの切り替えを行う
 2. 新規の行(空文字のみの行含む)の場合にはインデントを考慮してコメントを挿入
 3. すでにコードがある場合は指定したカラム以降にコメントを挿入
 4. すでにコメントがある場合はコメントの最後までジャンプ

というところまで実装しています。

![screenshot](https://i.github-camo.com/b9125c86855827fec7e523c2c1a80c61f54a8fab/68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6e6f62756869746f2f636f6d6d656e742d6477696d2d6c696768742f6d61737465722f646f632f636f6d6d656e742d6477696d2d6c696768742e676966)

# KEYMAP

キーバインドはEmacsで個人的に設定している `ctrl-;` に設定してあります。

OSXの場合はそのまま利用できますが、Windowsの場合はChromiumのキーバインドが優先されるようで文字の拡大になってしまうようです。

もし挙動がおかしい場合は [keyboard-localization](https://atom.io/packages/keyboard-localization) パッケージを入れるかキーマップを変更してみてください。

# SETTINGS

設定項目は

- `commentColum` : インラインコメントの始まるカラム数
- `commentFillColum` : コメントの長さ確保数

があり、どちらも初期設定で40となっています。
初期設定のままだと、既にコードがある行のコメントは40桁目から始まりますが、もし `editor.preferredLineLength` が80以下の場合はコードの最後に追記されるようになります( `editor.preferredLineLength` < `commentColum` + `commentFillColumn` の場合)。
ですので、 `commentColumn` か `commentFillColumn` をあり得ないくらい大きな数字にすればいつでもコードの最後に追記されるようになります。

# UNIMPLEMENTED

さて、機能が足り無さそうとしたのは、`comment-dwim` コマンドで何が出来るのか全て把握していないからです。
ちなみに、個人的に余り使わない実装していないものとしては

 - コメントアウトマーク？の数指定
 - 空気を読んだコメントマーク？の数

がありますが、Lisp限定っぽいので実装しなくてもいいでしょう :p

# SUMMARY

これで簡単にコメントを挿入できるようになって、Atomでコードを書くことも苦ではなくなりました。

ちなみにAtomのハックもCoffeeスクリプトも初めてだったんですが、数時間で作ることが出来ました。
elispでの実装だったらはなから諦める感じなんですけど、流石「21世紀のハッカブルテキストエディタ」ですね。調子にのってたくさんパッケージ作っちゃいいそうな気分にさせてくれますね。

それではよいコメントライフを！！


ps. 楽にコメントを挿入できるようになったとはいえ、相変わらずソースにコメントがないことは内緒です :p
error: no such module 'Realm.Private' と言われてビルドできない時

## RealmSwiftをCocoaPodsでインストールする場合はバージョン0.37.1以上で

CircleCIでアプリビルドしてるところでコケた。

```bash
error: no such module 'Realm.Private'
import Realm.Private
       ^--------------------------------------------------------------------------------
```

Realmの[ドキュメント](https://realm.io/docs/swift/latest/#installation)によると

> Install CocoaPods 0.37.1 or later.

CircleCIの```pod install```してるとこのログには

```bash
$ pod install
Analyzing dependencies
[!] The version of CocoaPods used to generate the lockfile (0.38.2) is higher than the version of the current executable (0.36.4). Incompatibility issues may arise.
```

0.36.4なので[ドキュメント](https://circleci.com/docs/ios#upgrading-cocoapods)にしたがってcircle.ymlでバージョンを指定してcocoapodsをインストールするように追記。
今回はローカルのCocoaPodsのバージョンに合わせた。

```diff
dependencies:
+  pre:
+    - sudo gem install cocoapods --version 0.38.2
+    - pod setup
  override:
    - pod install:
        timeout: 300

```

```bash
$ pod install
Updating local specs repositories
Analyzing dependencies
Downloading dependencies
 ...
```

podの警告も出なくなって、

```bash
** BUILD SUCCEEDED ** (45676 ms)
```

ビルドも通った。めでたし。
俺俺Stan manual翻訳:3章



本文章は[Stan Development Team. 2015. Stan Modeling Language Users Guide and Reference Manual, Version 2.7.0.](http://mc-stan.org/documentation/)の3章: Data Typesの翻訳となります。  
訳者は勉強がてら翻訳しようと思っただけで、プログラムの専門家でもデータ解析の専門家でもありません。そのため誤訳・意味の取り違えなどあると思いますが、その際はご指摘いただけると幸いです。4章、5章はやりたいと思っていますが、その先は未定です。また、翻訳ペースも気分しだいです。ご了承ください。

##3.データ型
本章ではStanで変数の宣言や、式の値に使われるデータ型について議論します。変数の型はパラメータの宣言、データの一貫性、関数の呼び出し、変数に値を割り当てる場合のすべてにおいて重要な要素となります。  
Stanにおいて、すべての式と変数の宣言は、静的に定められたデータ型と関係しています（すなわちプログラムがコンパイルされた時）。これは動的に文字列に変数を代入し、後からそれらをマトリクスに割り当てることができる、Rのような言語とは大きく異なっています。  
式は変数、定数のような基礎要素、もしくは引数に適用される関数やオペレータのような要素から構成されているでしょう。  
本章では基本的なデータ型に話題を絞り、それらがどのように宣言、割り当て、使用されるかについて解説します。アレイ、ベクトル、マトリクスなどのコンテナ型の詳細な比較については次章に譲ります。  

###3.1. 基本データ型  
組み込み型関数やユーザ定義が定義した関数、ローカル変数の引数はいずれも、制約付けられていない基本要素、ベクトル、行列などの、データ配列を意味する基本データ型である必要があります。

####基本要素型
Stanには連続値に対応したrealと、整数に対応したintの2種の基本要素型が用意されています。

####ベクトル、行列型
Stanには列に対応したvector, 行に対応したrow_vector, 行列に対応したmatrix3種の行列型のデータ型が用意されています。

####アレイ型
アレイ引数を宣言することで、任意の型（次項で紹介する制約付き型も含む）をアレイ型とすることができます。以下に具体例を示します。 
 
```stan
  real x[10];
  matrix[3,3] m[6,7];  
```
 
上記のように記述すると、ｘは1次元で10個の実数が含まれた値として宣言することになります。mは同様に、3 × 3行列の値を含む、サイズ6 × 7のアレイを宣言したことになります。  

###3.2. 制約付きデータ型
ローカル変数以外の変数を宣言する際には、制約をつけても構いません。この際、それぞれの制約付きデータ型は、制約付きの基本データ型と対応しています。  
制約は"data", "transformed data", "transformed parameters", "generated quantities"ブロックで宣言された変数のエラーをチェックします。  
そのため、制約は、パラメータブロック内で宣言された変数を扱う際に重要になります。ここでは、パラメータブロックで、制約付き変数（宣言された制約を満たすもの）を制約のない変数（実数全体）に変換しています。これは、
"モデルは宣言された制約を満たしているパラメータすべての値に対応 (Non-zero 密度)する必要がある"
という、制約付きデータ型の最も重要な側面を示しています。

もし宣言されたパラメータの制約が対応よりも厳格でない場合、サンプラーやオプティマイザはさまざまな問題を抱えることになるでしょう。例えば、そもそも動かない、初期化の失敗、過剰なMetropolis rejection、分布の裾をサンプリングできないことに起因するサンプリングのバイアスなどが問題として挙げられます。  

####上限、下限の設定
以下のようにすべての基本データに制約を宣言できるような構文を使うことで、変数に上限、下限を与えることができます。  

```stan
  int<lower=1> N;
  real<upper=0> log_p;
  vector<lower=-1,upper=1>[3,3] corr;
```

####構造化ベクトル
Stanには構造化されたベクトルを扱うためのデータ型が用意されています。昇順で並べた値のベクトルに使われる"ordered"と、昇順に並べた正の値のベクトルについて使われる"positive_ordered"がそれにあたります。  
また、合計すると1になる非負の値のベクトルに対するデータ型として"simplex"が、乗じると1になるベクトルに対するデータ型として"unit_vector"が用意されています。　　

####構造化マトリクス
対称な正定値行列を表すために、"cov_matrix"が、単位行列である対称な正定値行列、すなわち相関行列を表すために、"corr_matrix"が用意されています。  
また、コレスキー因子の型も用意されています。"cholesky_factor_cov"が対角成分が正の値の下三角正定値対称行列のコレスキー因子を表すために、"cholesky_factor_corr"た各列の長さが1、対角成分が正の値の下三角行列である、相関行列のコレスキー因子を表すために使うことができます。ファクター、スケーリングが容易なコレスキー因子型を使うことで、すべての相関、共分散マトリクスを計算するよりもはるかに効率よく計算を行うことができます。

###3.3. 代入・引数の受け渡し
####代入
制約付けられたデータ値は、基本型にマッチングする制約付けられていない変数や、基本型にマッチングする制約付けられた変数に割り当てることができます。マッチングに際してはアレイの次元数、基本型が同じであるか、厳密に解釈されます。制約付けは考慮されませんが、基本データ型については考慮されます。  
アレイ、ベクトルは、お互いに代入することはできません。同様に、たとえ次元が一致していても、ベクトル、マトリクスは、お互いに代入することはできません。第4章ではベクトル、アレイをどのように使い分けるのが適切かについて、詳細を示します。  

####関数の呼び出し
Stanの関数に引数を渡すと、基本型に割り当てられたように動作します。Stanの関数はアレイの次元数を含む、引数の基本データ型にのみ指定されています（アレイの大きさ、制約は含まない）。もちろん、関数はしばしばそれらの動作の一部として制約を確認することがあります。

####参考資料
[Stan Development Team. 2015. Stan Modeling Language Users Guide and Reference Manual, Version 2.7.0.](http://mc-stan.org/documentation/)
[Stan のデータ型についてまとめてみた](http://qiita.com/hoxo_m/items/e4dab11fed062689eff2)
1対多のテーブルで、多の方を絞り込み条件とする


ユーザーテーブルとユーザー属性テーブルが存在し、属性を条件としたユーザーの絞り込みを行いたい場合のSQL

```sql:users
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| name        | varchar(20)  | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
```

```sql:user_attributes
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id     | int(11)      | NO   |     | NULL    |                |
| attr_key    | varchar(20)  | NO   |     | NULL    |                |
| attr_value  | varchar(255) | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
```

```mysql
SELECT * FROM users
WHERE id IN (
  SELECT user_id FROM user_attributes
  WHERE 0 OR
    (attr_key = 'blood_type' AND attr_value = 'A') OR
    (attr_key = 'pref_code' AND attr_value = '13')
  GROUP BY user_id
  HAVING COUNT(*) = 2
);
```
【ASP.NET Identity】デフォルトで、自動生成されるテーブルの名前を変える方法

CodeZineさんの[ASP.NET Identity入門](http://codezine.jp/article/corner/511)の記事を読みながら、
ASP MVC5でWebアプリケーションを作成した時に迷ったところがあったのでメモ

###自動生成されるテーブルの名前を変えたい
プログラムを実行すると以下のテーブルが作られます。

+ AspNetRoles
+ AspNetUserClaims
+ AspNetUserLogins
+ AspNetUserRoles
+ AspNetUsers

好きな名前を付けたい・・・

###こうすると出来た

```csharp:Model/IdentiyModel内

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> {
//（省略）
　　　protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder) {
            base.OnModelCreating(modelBuilder);

//こんな感じで好きな名前を定義します
            modelBuilder.Entity<IdentityUser>().ToTable("hoge_Users").Property(p => p.Id).HasColumnName("UserId");
            modelBuilder.Entity<ApplicationUser>().ToTable("hoge_Users").Property(p => p.Id).HasColumnName("UserId");
            modelBuilder.Entity<IdentityUserRole>().ToTable("hoge_UserRoles");
            modelBuilder.Entity<IdentityUserLogin>().ToTable("hoge_UserLogins");
            modelBuilder.Entity<IdentityUserClaim>().ToTable("hoge_UserClaims");
            modelBuilder.Entity<IdentityRole>().ToTable("hoge_MyRoles");
        }
}
```

###パッケージマネージャーコンソールからマイグレーションします

```
Enable-Migrations –ContextTypeName MvcOther.Models.ApplicationDbContext
Add-Migration migrationtoday
Update-Databese
```

変わりました
4.0.x系でTextViewでBorder指定して黒塗りされた時の対処

```xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke android:width="1dp" android:color="@color/base_gray" />
</shape>
```

```xml
<TextView
    android:background="@drawable/base_gray_border"
    android:gravity="center"
    android:text="テスト"
    android:textSize="18sp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
```

Borderを指定しようとして、こんなBorderだけ指定するファイルを書いた
1dpで@color/base_grayの色で塗られたボーダーがTextViewに着くはずだった・・・


5系だとBorderだけ表示されていたが、4.0系だとTextViewの中が黒塗りに！
Styleの関係とか・・・？

```xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid
        android:color="@color/white" />
    <stroke android:width="1dp" android:color="@color/base_gray" />
</shape>
```
solidで背景色も指定して黒塗りはなおりました。
WindowsでCaffeを使う：環境構築

画像認識におけるDeepLearningは[Caffe](http://caffe.berkeleyvision.org/)がデファクトスタンダードとなりつつありますが、現状では公式にLinux環境しかサポートされていません。本格的にDeepLearningに取り組むならLinux環境を用意するのが良いでしょうが、Windows環境で使う手もあります。Windows環境しかない方にはお手軽にDeepLearningを試すことができ、Windowsメインで開発される方にとってはDeepLearningをWindowsアプリに組み込むこともできます。

本記事では非公式で公開されているWindows版Caffeの使用方法を解説します。数回に分けて解説を行う予定で、今回は環境構築について書きます。


Caffe公式ページでも紹介されていますが、シンガポール国立大学の方がWindows版CaffeをGitHubに公開しています。
https://github.com/niuzhiheng/caffe


大体のことはREADMEに書いてますが、環境構築手順を以下にまとめます。

#準備するもの
## 必須
* Windows 64-bitマシン
* Visual Studio 2012
* CUDA toolkit 6.5
* その他依存関係（[ここ](http://dl.dropboxusercontent.com/u/3466743/caffe-vs2012/dependency-20140804.7z)からダウンロード）

## 推奨
* GPU

※GPUはなくても動作しますが、CPUモードだとWindows版Caffeのバグで学習がうまくいかない場合があるみたいです。

#インストール手順
###1. Visual Studio 2012のインストール
64bit版のVisual Studio 2012インストーラーを入手し、インストールします。

###2. CUDA toolkit 6.5のインストール
[ここ](https://developer.nvidia.com/cuda-toolkit-65)から64bit版のCUDA toolkit 6.5をダウンロードし、インストールします。
最新版のCUDA toolkit 7.0がリリースされていますが、Caffeはバージョンの整合性に厳しいので6.5を入れておいた方が無難でしょう。
(7.0での動作は未確認です)

###3. プロジェクトのダウンロード
上記のGitHubのページのDownload Zipボタンを押してプロジェクトをダウンロードし、任意のフォルダに解凍します。ここで展開先のフォルダ名を"caffe"にすると何故かビルドできないのでご注意ください。

###4. 依存関係のダウンロード
準備項目にも記載しましたが、[ここ](http://dl.dropboxusercontent.com/u/3466743/caffe-vs2012/dependency-20140804.7z)からダウンロードして、プロジェクトのルートディレクトリに解凍します。
解凍したフォルダと同名のフォルダがルートディレクトリにも存在していますが、そのまま統合します。

###5. ビルド
`./build/MSVC`にあるソリューションファイルMainBuilder.slnを開き、プロジェクトを立ち上げます。ターゲットのプラットフォームをx64に指定します。

`./tools`に様々なツールに相当するcppファイルがありますが、ビルドしたいツールのcppファイル名をMainCaller.cpp内でインクルードします。
デフォルトでは学習を行うtrain_net.cppが指定されていますので、このままビルドすれば学習機能を持ったツールが作成されます。

ビルドが成功したら`./bin`にMainCaller.exeが吐かれています。
MainCaller.cppをデフォルトのままでビルドすれば、MainCaller.exeは学習ツールとして動作します。

非常に面倒ですが、他のツールもMainCaller.cpp内のインクルードを変えて逐一ビルドする必要があります。全て、MainCaller.exeの名前で吐かれるので、実行ファイルの名前をツールごとに変えておきましょう。(train_net.exe等)

#MNISTサンプルで学習してみる
MNISTという手書き文字のデータセットが用意されてますので、手書き文字識別器の学習を行ってみましょう。詳しいことは次回の記事で解説しようと思いますので、ここでは機械的な手順に留めておきます。

前述のビルドで、MainCaller.cppにtrain_net.cppを指定してビルドを行った前提で以下の手順を踏みます。

1. コマンドライン上で`./examples/mnist`にカレントディレクトリを移します。
2. get_mnist_leveldb.batを実行し、データセットをダウンロード・解凍します。mnist-train-leveldb、mnist-test-leveldbというフォルダが作成されていればデータセットの用意は完了です。
3. GPUがない場合は、lenet_solver.prototxtを開き、solver_modeの項目をGPU→CPUに変更します。これでCPUモードで学習が行われます。
4. train_lenet.batを実行し、学習を開始します。Iteration 100, loss = ~　のように学習経過が表示されていきます。
5. 学習が完了したら識別モデルファイルlenet_iter_10000が出力されます。

#
環境構築の解説は以上になります。
次回はサンプルデータセットを用いたチュートリアルを解説します。
タブレットをサブディスプレイ化するアプリ

タブレットやスマホをPCのサブディスプレイにするアプリを実験してみました。
![2015-08-24 17.52.19.jpg](https://qiita-image-store.s3.amazonaws.com/0/82956/ab9631f7-97ad-dd3b-4819-42b58ccaa77c.jpeg)
外出先でノートPCのサブディスプレイとして使うには便利かな。

参考ページが1年以上前でアプリの価格が変わっていたので
###Komado2
※時間制限付きの無料版有り
* iOS 1200円 
* AND 800円
###iDisplay
* iOS 1200円
* AND 568円
※2015-08-24調べ

参考ページ：[「サブディスプレイ化アプリ」](http://smartphone.r25.jp/news/106407)
Webサイト開発時の作業手順のメモ

# はじめに
Bootstrapを使ってWebサイトを開発する際の作業手順の備忘録です．

# 作業手順
## 1. 環境構築
node.jsにscaffold（ソースの雛形）生成ツール Yeomanをインストールし，scaffoldを生成する流れです．
以下，具体的な作業手順です．

### 1.1 nvm(Node Version Manager)をインストール
[公式サイト](https://github.com/creationix/nvm)の手順に従いインストール．

### 1.2 Yeomanをインストール
こちらも，[公式サイト](http://yeoman.io/)の手順に従いインストール．

> \# npm install -g yo

### 1.3 Webサイト開発用ディレクトリを作成し，そのディレクトリ下に移動

> \# mkdir homepage
> \# cd homepage

### 1.4 開発するWebサイトのscaffoldをYeomanで生成
今回はタスクランナーとしてgulpを使います．なのでgeneratorはgulp-webappを選びます．

> \# yo
> \# What would you like to do?で，Install a generatorを選択
> \# Search npm for generators:で，gulp-webappを入力
> \# Install one?で，gulp-webappを選択
> \# What would you like to do?で，Gulp Webappを選択
> \# What more would you like? (Press <space> to select)で，Sass, Bootstrap, Modernizrを選択

### 1.5 生成されたscaffoldの動作をgulpで確認
タスクの内容は，ディレクトリ下にあるgulpfile.babel.jsに記載されています．以下のコマンドでWebサーバが起動し，ブラウザで動作を確認することができます．

> \# gulp serve

![画面](https://qiita-image-store.s3.amazonaws.com/0/62652/9d7653ca-f2b2-8468-e3ad-0ea1f10865ee.png)

## 2. 実装
あとは以下などを参考にしながら，実装を進めています．

* [Bootstrap公式サイト](http://getbootstrap.com/)
* [これからの「標準」を身につける HTML+CSSデザインレシピ (Web Designing Books)](http://www.amazon.co.jp/%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E3%81%AE%E3%80%8C%E6%A8%99%E6%BA%96%E3%80%8D%E3%82%92%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%91%E3%82%8B-HTML-CSS%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%AC%E3%82%B7%E3%83%94-Designing-Books/dp/4839948879/ref=tmm_pap_title_0)
画面に要素が見えたら処理をする

スクロールして、画面に指定の要素が見えたら特定の処理を実行するスクリプトです。

```js:script
$(window).on('scroll' , function(){
  if ($("要素名").is(":hidden")) {
    //見えてなかったら
  } else {
    //見えてたら
  }
});
```
SLURMで過去に投入したジョブの一覧を表示する


過去に投入したジョブの一覧は，`sacct`コマンドで確認できます．


```sh
sacct -S start_time -E end_time
```

`start_time`，`end_time`は以下のフォーマットが利用可能．


	HH:MM[:SS] [AM|PM] 
	MMDD[YY] or MM/DD[/YY] or MM.DD[.YY] 
	MM/DD[/YY]-HH:MM[:SS] 
	YYYY-MM-DD[THH:MM[:SS]]

出力する項目は，`--format`オプションで制御可能．
(詳しくは，参考文献を参照)

## 注意点

- `start_time`，`end_time`はジョブの開始時間，終了時間である (開始時間≠投入時間)
- `-S`のデフォルトは，コマンドを実行した日の真夜中(00:00:00)


## 使用例

2015/4/1以降に開始したジョブの一覧を表示


```sh
sacct -S 2015-04-01T00:00:00
```

## 参考文献

- https://computing.llnl.gov/linux/slurm/quickstart.html (SLURM Quick Start User Guide)
- https://computing.llnl.gov/linux/slurm/sacct.html (SLURM Man Pages)
windows8.1pro (64bit) > アプリが消える

```txt:動作確認
Windows 8.1 pro (64bit)
```

win8.1を結構長い間使っているのだが、アプリが消える現象が二回起きている。


下記の投稿でもアプリが消えていて、64bit版のwindows8.1proだ。
http://windowssecrets.com/forums/showthread.php/158276-Apps-went-missing-from-Windows-8-1-Pro-Start-Screen

> I use a Windows 8.1 Pro 64 bit operating system


1回目は2015年4月中旬。インストールしたアプリの大半が消えた。対応方法としては、以下の方法を実行した。ただし、これをやると「マイドキュメント」や「デスクトップ」の設定、その他ドメインユーザ設定が初期化されるので、他の方法で対応可能であればそのほうがいい。

http://www.thewindowsclub.com/something-happened-windows-store-is-no-longer-working

上記によりアプリを再度インストールするはめになり、インストールしなおした。


本日、２回目のアプリが消える現象に遭遇した。
sublime text2を使おうとして見つからなかった。数日前には使っていたのに。その他のアプリについては今のところわからない。

64bit版のWindows 8.1proの問題なのか(32bit版では発生しないのか?)よくわからないが厄介だ。

vmware上で動かしているので、HDDの故障であれば他のvmイメージ(Windows7pro 32bit)でも何らかの問題が出るだろう。でも出ていない。ということで、windows8.1proを疑っている。
HTMLの基本

HTMLファイルは基本的にテキストなどのメモ帳でも作成することができます。
保存時に名前をつける際に拡張子を「.txt」でなく「.html」にするだけでWEB用ファイルになります。

最近では色んなソフトも出ているので手打ちでソースを書くことも少なくなってきたかもしれません。
私が始めてHPを作成する際にはメモ帳でよく書いたものです。
##HTML
```
<html>
<head>●●●</head>
<body>●●●</body>
</html>
```
懐かしいですね。
シンプルなソースしか当時は書けませんでしたが、初めてブラウザに出した「Hello World」が未だに忘れられません。
そんなことを思い出してコレを書いています。


##ハイパーリンク
```
<a href="遷移先URL">リンク先</a>
```
これも驚きましたね。
記憶の限り10ページにも満たないサイトでページ内リンクをさせていました。
今はフレームタグなんて使わないですが、課題として取り組みましたが、
どこがどこに遷移しているのかパニックになった記憶があります。

それが今ではCMSやテンプレートであらゆるデザイン設定が簡単にできるようになりました。
この10年～15年でWEB業界は大きく進化を遂げましたね。

あのときの手で打つ感動も慣れてくると寂しいものですが、
今でもHPを作成しているとやっぱりHTMLだなーと感じます。
プロキシ内からのインストール

社内のプロキシからgemやbundleでインストール時に失敗した時に、ハマったのでプロキシの設定方法の覚え書き。

###gem install で失敗する場合
```
$ gem install xxxx -p http://proxy:port
```

###bundle install で失敗する場合
```
$ export http_proxy=http://proxy:port
$ bundle install
```
[SQLServer]照合順序を途中で変える。エラーが出る場合はサービス再起動。

SQLServerのデータベースの照合順序を変えたい場合。
※参考
http://thinkit.co.jp/cert/article/0707/14/3/2.htm

エラーになる場合は「サービス」からSQLserverの再起動直後の場合は変更可能。
メモ：CentOS7に最新のJDK(8u60)をインストール

# CentOS7に最新のJDK(Java SE Development Kit 8)をインストール

* Vagrant
* CentOS 7.0
* JDK 8u60

### ダウンロード＆インストール

```bash:Download
JDKURL=http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.rpm
cd /usr/local/src
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "$JDKURL"
rpm -Uvh jdk-8u60-linux-x64.rpm
```

### 確認
```bash:Confirm
$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

$ javac -version
javac 1.8.0_60

```

以上


## 参考
* [Java SE Downloads](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
* [Java SE Development Kit 8 Downloads](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
Javascript っぽい新しい言語を妄想してみた【配列編】

1. [Javascript っぽい新しい言語を妄想してみた](http://qiita.com/trashtoy/items/d95b22d3b68cd463c2da)
2. Javascript っぽい新しい言語を妄想してみた【配列編】 ← イマココ
3. [Javascript っぽい新しい言語を妄想してみた【マップ編】](http://qiita.com/trashtoy/items/9bb5a61bafec7c621fd2)

## あらすじ
「もしも自分が Javascript っぽい言語をゼロから設計するとしたら？」というテーマで以下のような言語を作ってみました. (名前はまだない)

* 基本的な文法は Javascript と同じ.
* オリジナルの Javascript が「プロトタイプベース」なのに対し, この言語は「クラスベース」なオブジェクト指向.
* すべての値がオブジェクトである. 「スカラー型」あるいは「プリミティブ型」のような概念は存在せず, すべての値が何らかのクラスのインスタンス.
* すべてのクラスは Class クラスのインスタンス. (※新しいクラスの定義は `new Class()` で行う)
* 関数の表記はオリジナルの Javascript と同じだが, 引数や返り値のタイプヒンティングを付与することも出来る. (この辺りは Javascript よりもむしろ PHP7 に近い)

詳しいコードは [前回の記事](http://qiita.com/trashtoy/items/d95b22d3b68cd463c2da) をご覧ください.
そして前回の記事でコメントくださった方々ありがとうございました！ やっぱり似たようなポリシーを持つ言語は色々あるようで.
特に Ruby の仕様について詳しく調べてみたところ, 「すべての値がオブジェクト」・「クラスや関数を含めたすべての値を『第一級オブジェクト』として扱う」あたりの設計思想は Ruby そのまんまなのですね.
(失礼ながら「括弧がなくて end が一杯」・「Javascript の prototype 汚染のように Mix-in を利用して既存のクラスの振る舞いを好き勝手に変えられる」ぐらいの事前知識しか持ち合わせてませんでした)

今回は引き続き配列型について説明します.

## 基本形

基本的に Javascript と同じ文法で書けます.

```js
var arr = [1, 3, "hoge", 7, "fuga"];
console.log(arr[3]); // 7
```

また, 配列は Array クラスのインスタンスなので以下のようにも書けます.

```js
var arr = new Array();
arr.push(1);
arr.push(3);
arr.push("hoge");
arr.push(7);
arr.push("fuga");
console.log(arr[2]); // "hoge"
```

## ジェネリック (総称)

これだけだと Javascript とほぼ同じですが, この言語特有の仕様として, 配列に含まれる要素の型を制限することが出来ます.
Java や C# における「ジェネリック (総称)」を表現したものです.

```js
var arr = new Array(Integer); // コンストラクタの第一引数に Class クラスのインスタンスを指定する
arr.push(1);
arr.push(3);
arr.push("hoge"); // Integer 以外の型を push しようとしたので実行時エラー
```

以下のようなシンタックスシュガーを使って同じことが表現できます.

```js
var arr = <Integer>[1, 3, 7];
arr.push(5);
arr.push("hoge"); // 実行時エラー
```

ちなみに型を指定しない場合は `Object` を指定したのと同じ意味になります.

```js
var arr1 = new Array();
var arr2 = new Array(Object);
console.log(arr1 == arr2); // true

var arr3 = [1, 3, "hoge", 7, "fuga"];
var arr4 = <Object>[1, 3, "hoge", 7, "fuga"];
console.log(arr3 == arr4); // true
```

(余談: `==` は 2 つの値が「等価」の場合に true となる演算子です. 「同一」かどうかを調べる場合は `===` を使用します)

以上で配列編は終了です. 次回は [マップ編](http://qiita.com/trashtoy/items/9bb5a61bafec7c621fd2) です.
P.S. GitHub にリポジトリを立てて, 言語仕様を README にしたためようと思うのですが, 何かよさげな名前がないかと考え中...
cssファイル使わずにjavascriptのみで簡単にスタイルをあてる。

cssに書いていたスタイルをjavascriptで全て適用したい、という場合のお話です。

※背景が伝わらなっていないため追記しました。

例えばjquery-autocomplete.jsはjsだけで動作だけでなくcssもあてるような作りです。
それがよいかはさておき、1ファイルで見た目から機能まで担保します。
そういったことを簡単に実現したい時のノウハウです。

具体的には

```
hoge.css
fuga.js
test.js
```

とつくっていたものをcss含め1ファイルにしたい、という場合の話です。

```
all.js
```


jsでdomにアクセスしてstyle変数に定義を当てていく、というアプローチが一般的です。

しかしこの方法だといくつか問題がでてきます。

* hoverセレクタが使えない。
* MediaQueryが使えない。

などです。

上記をjavascriptで実装すればよいのですが、
面倒なうえ本来cssなら安全に実装できたところをわざわざバグのリスクを背負うことになります。

そこで別のアプローチです。

## cssはstyle要素をレンダリング前に生成し、style要素のcssをjsに適用

ここで一つ問題です。

JavaScriptにはヒアドキュメントがないので下記のように複数行にわけたcssを一行にするか、エスケープ文字列を行末につける必要がでてきます。

```css
    .hoge {
        background-color: #fff;
    }

    .hoge:hover {
        border: 1px solid #0097cf;
    }
```

このような感じです。

```js
    var css = '<style type="text/css">\
    .hoge {\
        background-color: #fff;\
    }\
    .hoge:hover {\
        border: 1px solid #0097cf;\
    }\
    </style>';
   $(body).append($('css'));
```

行数が長くなるとけっこうきついと思います。
あとすでに別ファイルでcss定義していた場合は、
ファイルをコピーして編集しなくてはなりません。

## handlebarsを使って解決

この問題をhandlenbarsのprecompileをつかって解決します。
handlebarsはテンプレートエンジンです。
HTMLを書いておくとjsにコンパイルしてレンダリングすることが可能になります。

この方法はcssファイルをそのままjsにすることができます。

```html:style.css
<style type="text/css">
    .hoge {
        background-color: #fff;
    }

    .hoge:hover {
        border: 1px solid #0097cf;
    }
</style>
```

precompileはgulp等で行います。

[gulp-handlebars](https://www.npmjs.com/package/gulp-handlebars)


```js
gulp.task('templates', function(){
    var src = "./src/css/";
    var dest = src+'templates/build';//出力場所
    gulp.src(src+'/*.css')
        .pipe(handlebars())
        .pipe(wrap('Handlebars.template(<%= contents %>)'))
        .pipe(declare({
            namespace: 'App.css',
            noRedeclare: true // Avoid duplicate declarations
        }))
        .pipe(concat('style.js'))
        .pipe(gulp.dest(dest));
});
```

上記を実行するとApp.css.cssファイル名の変数にcssファイルの文字列が展開されます。
そのため下記のように変数をjquery等にいれるだけでタグを生成することができます。

```
        $("body").append(App.css.style);
```


あとはgulpなどをつかってstyle.jsとそのほかのjsをcatして一つにまとめます。


このあたりの詳細は[別投稿](http://qiita.com/coa00@github/items/8ea2c233afd9c1e50cfd)にまとめました。

すると、jsファイルだけでシンプルにcssとjsをまとめることができると思います。

ほかに方法がないわけではもちろんありません。
いかに楽をするかを考えてのアイディアです。
Gistコマンド便利

[gist](https://gist.github.com/)にアップするコンテンツを`pbpaste`などパイプから渡せるのが便利ですね

## インストールなどはこちらで

gist: https://github.com/defunkt/gist

## 基本的な使い方は以下の通りです

```sh
$ cat sometext_or_pbpaste | gist -f tmp.md -p
```

- -f ファイルの名前を引数に渡す
- -p privateで投稿
Composerの依存パッケージをオールインワンのpharにまとめるツール作った

# はじめに

こんな経験ありませんか？

```
あなた 「パッケージをcomposerで公開しました！よかったら使ってください！」
初心者 「composerって何？requireするだけの方法はないの？」
あなた 「えーそんなこと言われても…」
```

composerのインストール方法および使い方を教えるのもいいと思いますが、別の手段として単一ファイルをrequireするだけで済む方法も用意しておくと便利な場合もあるんじゃないかと思います。その際のPharパッケージ生成をちょっとだけ楽にするためのツールです。

- [mpyw/comphar](https://github.com/mpyw/comphar)

インストール方法も上記に英語で記載してあるのですが、一応こちらにも日本語で書いておきます。

# インストール

## 1. Composerのグローバルインストールを実行

[Packagist](https://packagist.org/packages/mpyw/comphar)から落としてきます。

```shell-session
example@localhost:~$ composer global require mpyw/comphar:@dev
Changed current directory to /Users/mpyw/.composer
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing mpyw/comphar (dev-master XXXXXXX)
    Cloning XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Writing lock file
Generating autoload files
example@localhost:~$
```

## 2. `$PATH`を更新

まだの場合は**`~/.composer/vendor/bin`**にパスを通しておいてください。

```bash:~/.bashrc&#32;~/.zshrc&#32;など
export PATH="~/.composer/vendor/bin:$PATH"
```

# 使い方

Usageを日本語訳しておきます。

```
example@localhost:~$ comphar -h
使い方: ./comphar [オプション]
オプション:
  -h, --help          このヘルプを表示する。
  -v, --verbose       冗長出力する。
  -o, --out <値>      アーカイブ名。デフォルトは "vendor.phar"。
  -d, --dir <値>      プロジェクトルートディレクトリ。デフォルトはカレントディレクトリ。
      --yes           実行時のインタラクティブな確認を省く。
example@localhost:~$
```

# 使用例

## 1. リポジトリを用意

あらかじめオートロードのための`composer.json`を書いておきます。

```json:composer.json
{
    "name": "mpyw/my-new-package",
    "description": "This is a stupid example",
    "require": {
        "mpyw/my-dependency-1": "@dev",
        "mpyw/my-dependency-2": "1.0.0",
    },
    "autoload": {
        "psr-4": {
            "mpyw\\MyNewPackage\\": "src/"
        }
    }
}
```

## 2. `vendor.phar` の生成

プロジェクトルートディレクトリで`comphar`コマンドを実行すると同一階層に`vendor.phar`というファイルが作られます。

```shell-session
example@localhost:~/my-new-package$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
example@localhost:~/my-new-package$ comphar -v
Project directory: ~/my-new-package
Output filename: ~/my-new-package/vendor.phar
Continue? [y/n]: y
Added: ...
Added: ...
Added: ...
Added: ...
Added: ...
example@localhost:~/my-new-package$
```

### 注意点

- 変更がある場合はあらかじめ`composer update`しておいてください。
- **依存パッケージが何も無い場合でも`composer install`または`composer update`は必要です。自分自身をオートロードに対応させるためです。**

## 3. 使う・配る

作成した `vendor.phar` は `vendor/autoload.php` と全く同じように使えます。

```php:最も基本的な使い方
<?php
use mpyw\MyNewPackage\Foo;
require 'vendor.phar';
$foo = new Foo();
```

```php:後から自分用のオートローディングを追加
<?php
use mpyw\MyNewPackage\Foo;
use mpyw\MyOtherPackage\Bar;
$loader = require 'vendor.phar';
$loader->addPsr4('mpyw\\MyOtherPackage\\', '~/my-other-package/src');
$foo = new Foo();
$bar = new Bar();
```
Cornerstone使い方メモ

Cornerstoneの使い方のいい感じのがないので、ちまちま自分で作る。

#ナビ
![pic3.png](https://qiita-image-store.s3.amazonaws.com/0/13242/ed157e4d-54cc-ac40-079f-6428af1b4fae.png)

* All すべてのファイル
* Changed　修正・追加したファイル　※コミットする際、ここを見ながらやるとモレが出ないので便利！
* Modified　修正したファイルだけ
* Conflicted　衝突したファイル
* Missing　ローカルで手動削除したファイル
* Locked　ロックしているファイル

あとはよくわからない・・・

#フォルダについているアイコン

| アイコン | 意味 |
|:-----------:|:------------|
| ![icon1.png](https://qiita-image-store.s3.amazonaws.com/0/13242/dacee7fc-09f2-d5ec-eb89-73679cc89b65.png) |        まだバージョン管理されていないファイル |
| ![icon2.png](https://qiita-image-store.s3.amazonaws.com/0/13242/5185e421-c548-d163-d6c9-a5150d94ff94.png) |        修正したファイル | 
| ![icon3.png](https://qiita-image-store.s3.amazonaws.com/0/13242/57ad3673-e78a-ef8f-3a3e-c04d638584ff.png) | 追加ファイル |
| ![icon6.png](https://qiita-image-store.s3.amazonaws.com/0/13242/998b649b-ddb7-8370-9dee-7f330de8fac5.png) | 衝突したファイル |
| ![icon4.png](https://qiita-image-store.s3.amazonaws.com/0/13242/0af01b8a-0ff4-c5b6-8bee-c951d3fe4914.png) | ローカルで手動削除したファイル |
| ![icon5.png](https://qiita-image-store.s3.amazonaws.com/0/13242/8b3b5545-4e31-0064-695b-8d26a228961a.png) | 削除ファイル |

##追加ファイルにするには

追加したいファイルを選択して、画面下の![pic1.png](https://qiita-image-store.s3.amazonaws.com/0/13242/0ad772a2-ae38-8f3f-5b98-233ffab9c56e.png)をクリックする。

##フォルダの中身ごと追加するには
画面下の![pic1.png](https://qiita-image-store.s3.amazonaws.com/0/13242/0ad772a2-ae38-8f3f-5b98-233ffab9c56e.png)を右クリックして、
![pic2.png](https://qiita-image-store.s3.amazonaws.com/0/13242/aa97cfb8-1692-13e0-b7f9-929bc0e35a9e.png)下のコンテンツごと追加をクリックする。ちょっと難しい。

##削除ファイルにするには
ファイルを選択して、右クリック＞delete
※ローカルで手動削除した際も必ずやらないとサーバのデータが残ります。

#アカウントを変更する

めったにやらないと思うけどメモ。
1. サイドバーのREPOSITORIESもしくは![a.png](https://qiita-image-store.s3.amazonaws.com/0/13242/d0a736ad-dc0c-c1e8-9865-b2fa2fd7e3f9.png)をクリックしてREPOSITORIESを表示させる
2. 変えたいリポジトリーを選択して右クリックし、Edit Repositoryを選択
3. Account InformationのNameとPasswordを変えてSaveをクリック

#リポジトリを追加
1. サイドバーの何もない所を右クリック
2. Add Repositoryをクリック
3. 追加するサーバに相応しい所を選ぶ（分からなければHTTP Serverが無難）
4. Server, Repository path, Nickname（サイドバーのREPOSITORIESに並ぶ名前）, Name, Passwordを入力して、Save name and password in my keychainにチェックを入れてSave

#ワーキングコピーを追加
1. サイドバーの何もない所を右クリック
2. Add Working Copyをクリック
3. ローカルにあるフォルダを選択する

#チェックアウト（サーバにあるファイルをローカルにコピーする）
1. サイドバーのREPOSITORIESから必要なリポジトリーを選択
2. Check out working copyを選択し、Whereでローカルのどこに保存するかを決め必要であればリビジョンを選択して、Check Outする
メモ：DynamoDB LocalをCentOS7にインストール

# DynamoDB LocalをCentOS7にインストール
とりあえず試してみたかったので。
* CentOS 7.0
* JRE 1.8.0_60
* vagrant

## DynamoDB Localをインストール

### ダウンロード、解凍
```bash:sh
mkdir dynamodb_local && cd $_
wget -O dynamodb_local_latest.tar.gz  http://dynamodb-local.s3-website-us-west-2.amazonaws.com/dynamodb_local_latest
tar zxvf dynamodb_local_latest.tar.gz
```

### 起動
```bash:sh
java -Djava.library.path=. -jar DynamoDBLocal.jar
```
以上

---
参考:
*  [【AWS発表】 デスクトップ開発を可能にする DynamoDB Local](http://aws.typepad.com/aws_japan/2013/09/dynamodb-local-for-desktop-development.html)
* [開発者ガイド (API Version 2012-08-10) :DynamoDB Local](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Tools.DynamoDBLocal.html)
Numpy.ndarrayを切り抜きして画像として保存する

OpenCVやCaffeなどの画像処理系ライブラリで画像イメージをNdarrayに変換して扱うことが多いですが、これをndarrayとして切抜きして、画像として保存するのに一瞬迷ったので備忘までに

```python:image_crop.py
import numpy as np
import scipy as sp
import Image

# 画像座標は以下のように変数に格納
# x: x軸の開始座標
# y: y軸の開始座標
# w: x軸からcropしたいpix数
# h: y軸からcropしたいpix数

# PILを使う場合
pic = Image.open(input_file_path)
imgar = np.asarray(pic.crop((x, y, x+w, y+h)))
sp.misc.imsave('test.jpg', imgar)

# ndarrayそのまま扱いたい場合
# PILとx,yが逆になっていることを注意
imgar = nd[y: y+h, x: x+w]
sp.misc.imsave('test.jpg', imgar)

```
コミット時のコメントを修正する

よく間違えてコミットするので、修正方法のメモ。
#--amendオプションをつける

```
$ git commit -m "dump.rdb"
# "dump.rdb削除"にするつもりだったのに
$ git commit --amend -m "dump.rdb削除"
$ git log -1
#一つ前のログを表示
```
脆弱な基底クラスの問題とは何か

今日は脆弱な基底クラスの問題（fragile base class problem）について。

次のようなクラスがあったとします。

```csharp
    public class Parent
    {
        private int counter = 0;

        public virtual void Increment1()
        {
            counter++;

            Console.WriteLine("counter is " + counter.ToString());
        }

        public virtual void Increment2()
        {
            counter++;

            Console.WriteLine("counter is " + counter.ToString());
        }
    }
```

このクラスを継承して新しいクラスを作ったとします。Increment2を次のようにオーバーライドしたとします。

```csharp
    public class Child : Parent
    {
        public override void Increment2()
        {
            Increment1();
        }
    }
```

このクラスを使用する次のようなプログラムが作成されました。

```csharp
    public static class Program
    {
        [STAThread]
        public static void Main()
        {
            Child child = new Child();
            child.Increment2();

            Console.ReadLine();
        }
    }

```

この時点ではこのプログラムは特に問題なく動作します。

```
counter is 1
```

さて、この状態から、基底クラスの実装者は「中身が全く同じメソッドがあるため一方から他方を呼ぶようにコードを改良しよう」（実際は致命的な改悪なのだが）と考え、基底クラスを次のように変更しました。

```csharp
    public class Parent
    {
        private int counter = 0;

        public virtual void Increment1()
        {
            Increment2();
        }

        public virtual void Increment2()
        {
            counter++;

            Console.WriteLine("counter is " + counter.ToString());
        }
    }
```

この時点でプログラムは正常に動作しなくなります。派生クラスを実体化し、Increment1メソッドを呼び出した場合には、内部で**派生クラスで再実装された**Increment2メソッドが呼び出されます。派生クラスで再実装されたIncrement2メソッドは内部でIncrement1メソッドを呼び出します。メソッド呼び出しの無限ループです。スタックオーバーフローです。

```
Process is terminated due to StackOverflowException
```
Linux mpls_router


Linux に mpls 対応コードが入ってきていた。ぶっちゃけ `openvswitch` kernel module で使いたいから入ったんだと思うけど `mpls_router` というmodule もある。

使い方を調べてみたので、そのメモ。

iproute2
-------

`ip` コマンドは新しいものが必要なので、iproute2 を手元でビルドしておく。

```bash
pacman -S gcc make pkgconfig flex bison
git clone git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git
cd iproute2 && make
```

使いかた
----
モジュールは modprobe で読み込む。

```bash
modprobe mpls_router
```

読み込むと `/proc/sys/net/mpls` 以下ができる。`platform_labels` は MPLS のラベルで扱う数字の最大値を決める。…これ制限する必要性はよくわからないけれど、一般的なMPLS ハードウェアルータでは設定するものが多い様子。とりあえず 64 あたりにしてみた。いずれにせよ mpls の最大値は 20bit を超えられない。それから 0--15 は予約されているものとして、使うことができない。

```bash
echo 64 > /proc/sys/net/mpls/platform_labels
```

mpls_router の基本的な流れはこうなる。openflow の MPLS と同じで、ether header と ether payload の間に mpls shim header が入っていく形式。

```bash
[IN] -- mpls(@label=n, payload) --> [routing table] -- payload --> [OUT]
```

上記の IN に使う netdev で mpls routing を有効にする。

```bash
echo 1 > /proc/sys/net/mpls/conf/eth2/input
```

mpls routing table の表示は `ip -M route` でできる。経路情報の追加は 3 種類使える。いずれのパターンも出力 netdev は必須。20, 21, 22, 23 と書いているところが MPLS 入力ラベル。残りは出力パラメータ。

```bash
ip -M route add 20 dev eth1
ip -M route add 21 dev eth1 via link 00:11:22:33:44:55
ip -M route add 22 dev eth1 via inet 192.168.0.2
ip -M route add 23 dev eth1 via inet6 fe80::2345
```

via 省略時は inet の loopback が割当たっている様子。ただ `ip -M route` の出力には `inet 0.0.8.0` と表示されるのだけど、`127.0.0.1` のバイトオーダーどこかで間違えてる感じか…？

MPLS 出力時にも同じように MPLS パケットを出したければ、次のようにできる。

```bash
ip -M route add 24 dev eth1 via link 00:11:22:33:44:55 as 24
ip -M route add 25 dev eth1 via link 00:11:22:33:44:55 as 26/27
```

上の行は、ラベル変更なしで次のリンクに送り出し、下の行は stack させて次のリンクに送り出します。もっとたくさん stack させたい気分になったりもしますが、`#define MAX_NEW_LABELS 2` とハードコードされているので 2 段まで。

送信テスト
----------
マシンの外側から python scapy を使って送り込むと簡単。scapy の interactive shell を使う。

```python
load_contrib("mpls")
sendp(Ether(dst="00:11:22:33:44:55")/MPLS(label=20, ttl=5), iface="eth1")
```

ポイントは TTL に 1 より大きい数を指定するところ。普通にやると TTL=0 になっていて即破棄される。
【Unity】Androidの「アクティビティを保持しない」オプションは使ってはいけない


## 結論

Unityで作ったAndroidアプリを実行する時に、Androidの開発者向けオプションの中にある「アクティビティを保持しない」オプションを使うととても危険です。
ダメ。ゼッタイ。

## 「アクティビティを保持しない」オプションの存在理由

通常Androidはアプリの中にアクティビティ（画面）が複数あり、アクティビティを切り替えることで画面遷移を行います。とこらが最前面以外のアクティビティはメモリ不足などのために、いつでも破棄される可能性があります。また最前面のアクティビティでも、画面回転で再生成されます。そのため開発者はアクティビティがいつでも破棄されて、いつでも生成していいように実装する必要があります。

しかしながら常にメモリ不足の状態にすることはできないため、アクティビティ保持のstrictモードとして「アクティビティを保持しない」オプションがあります。このオプションを有効にすることで、常に最前面以外のアクティビティがすぐに破棄されるようになります。

## Unityで「アクティビティを保持しない」を使うとどうなる？

Unityは通常単一アクティビティのため、通常このオプションが設定されていても影響ありません。強いて言えば一時的なバックグラウンドでも容赦なく破棄されるため、再ロードが発生します。

ではどういう時に問題になるかと言えば、アプリ内でUnityの以外のためにアクティビティを用意し、それを実行中の切り替える必要がある場合です。このような場合、「アクティビティを保持しない」を付けたまま他のアクティビティに遷移するとアプリが突然死（再起動）します。

## Unityと「アクティビティを保持しない」で突然死する理由

それはUnityのメインアクティビティである、`UnityPlayerNativeActivity`の中の処理に原因があります・・・

```java:UnityPlayerNativeActivity.java
public class UnityPlayerNativeActivity extends NativeActivity {
  protected UnityPlayer mUnityPlayer;
  protected void onDestroy() {
    this.mUnityPlayer.quit();
    super.onDestroy();
  }
}
```

```java:UnityPlayer.java
public class UnityPlayer extends FrameLayout implements a.a {
  public void quit() {
    // 前略
    kill();
  }
  
  protected void kill() {
    Process.killProcess(Process.myPid());
  }
}
```

＿人人人人人人＿
＞　突然の死　＜
￣Y^Y^Y^Y^Y￣

はい、アクティビティが破棄されるOnDestroyのタイミングで「自殺」しています。
つまり

1. 他のアクティビティに遷移する
2. `UnityPlayerNativeActivity`が破棄される
3. `OnDestory`のなかで自分のプロセスを殺す
4. 開こうとしていた他のアクティビティもろとも死ぬ

という流れになります。

## 回避方法

考えうる回避方法としては、

1. UnityPlayerNativeActivityを継承して誤魔化す  
2. Unity以外のアクティビティを別プロセスで動かして巻き添えを回避  
3. 別のアクティビティを開く前に`Settings.System.getInt(getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0)` を見て有効だったら開かない

などを考えました。
1番はAndroidには`SuperNotCalledException`なるものがあるので、`super.OnDestroy`を呼ばないことは難しそうなのと、迂回処理を書くのが難しいので却下。
2番はAndroidManifest.xmlに書くだけですのでお手軽な一方、メモリ空間が別になるので今回の用途からは却下。
ということで結局3番のシステム設定を見て危ないオプションが有効だったら別アクティビティを開かずにエラーとするようにしました。

## そもそも・・・

今回のオプションは開発者向けであるので、本来サポート対象外です。
しかしながら開発者自身が有効にしたまま忘れてバグとして扱ったり、一般ユーザーでも「メモリ不足を解消する」という紹介を元に有効にしてしまうことが考えられるため、このオプションが付いている可能性は考慮してあげる必要がありそうです。

筆者自身は付けていなかったものの、他人からのバグ指摘に1日ぐらい時間を費やして調査し上記問題を発見したため、同じ問題にハマる人を出さないためにここに備忘録として書きました。
AndroidStudioでEspresso使ってテストするときに、つまづいた事

個人的につまづいた事を書いていきます。
（「つまづいた」を「躓いた」と書くと自分でも読めない事に最近気づいた）

# Espressoのインストール（jarファイルを入れる)は必要か？
必要なかったです。
espresso-1.1-bundled.jar
とか、せっかくダウンロードしたのに、使いませんでした。
こちらの記事だとインストールが必要なんですが、
http://qiita.com/kuchinashi_r/items/d2f2f818421da5898520
２０１５年にはこんな記事があります。インストールが不要になったんですね。
http://tech.cookbiz.co.jp/android-463
時代の流れを感じますね。

# 「build.gradle」はどこの奴を修正するのか？どう修正するのか？
正解は、
プロジェクトのルート/app/build.gradle
です。
プロジェクトのルート/build.gradle
ではありません。
dependencies に、以下の記述を追記します。

```lang:build.gradle
 // for AndroidTest
    compile 'com.android.support:support-annotations:21.0.3'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
```

私の場合ですが、この時点でbuild.gradleは以下のようになってました。最後の方に追加したものがあります。

```lang:build.gradle
apply plugin: 'com.android.application'
apply plugin: 'android-apt'

android {
    compileSdkVersion 19
    buildToolsVersion '20.0.0'
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
        exclude 'LICENSE.txt'
    }

    defaultConfig {
        applicationId "com.hogehoge"
        minSdkVersion 16
        targetSdkVersion 19
        versionCode 13
        versionName "1.3"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled
        }
        debug {
            debuggable true
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
    }
    productFlavors {
    }
    lintOptions {
        disable 'MissingTranslation'
    }
}
dependencies {
    //ここらへんは省略。

    // for AndroidTest
    compile 'com.android.support:support-annotations:21.0.3'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
}
```

# テストコードはどこに書けばいいのか？
私はこのように作成しました。
` プロジェクトルート/app/src/androidTest/java/com.hogehoge/activity/HogeActivityTest.java`

ここに、こんなソースを書きました。

```lang:HogeActivityTest.java
package com.hoge.activity;

import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
 * Created by yasuda_tadashi on 2015/08/24.
 */
@RunWith(AndroidJUnit4.class)
public class HogeActivityTest extends
        ActivityInstrumentationTestCase2<HogeActivity> {
    public HogeActivityTest() {
        super(HogeActivity.class);
    }
    @Before
    public void setUp() throws Exception {
        super.setUp();
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());
    }

    @After
    public void tearDown() throws Exception {
        super.tearDown();
    }

    @Test
    public void testHomeKey() {

    }
}

```
これで、一応テストコードを実行できるはず。
実行してエラーがでなければ、やっと具体的なテストを記述できる。