OmniAICreator/Qiita-1.07M huggingface dataset:
[OSX][pyenv]pipでSSLのエラーが起きた時の対処

Pythonを3.5と2.7.10に入れ替えていつも通りにパッケージ入れようとしたら
pip._vendor.requests.exceptions.SSLError: unknown error (_ssl.c:3031)
とかでてきまして困りました。
環境は、OSX Yosemite, pyenvでPythonのバージョン管理をしています。

ということで対処法を。まずは普通のPythonならば、

    Users/(あなたのなまえ)/.pyenv/versions/2.7.10 or 3.5.0/lib/python2.7 or python3.5/site-packages/pip/download.py 
        
を、Anacondaならば、

    Users/(あなたのなまえ)/.pyenv/anaconda-(バージョン名)/lib/python(バージョン名)/site-packages/pip/download.py 
        
を下記の通り修正したらOK。

    # Dispatch the actual request
    return super(PipSession, self).request(method, url, *args, **kwargs)
から

    # Dispatch the actual request
    return super(PipSession, self).request(method, url, verify=False, *args, **kwargs)

へ。これでOK。
(verify=Falseを追加しています)

[参考]
http://qiita.com/_akisato/items/4b531aab65de8cd2909a
メモメモ

-----

#### Rails assets compile で全てのjsとcssがごちゃまぜになってしまう問題を解決
http://qiita.com/naoty_k/items/d490b456e0f385942be8

-----

[orangain flavor - Linuxコマンドでテキストデータを自在に操る](http://orangain.hatenablog.com/entry/20100916/1284631280)

-----
unicorn 導入手順書

unicorn 導入手順書
----

```rb
#!/usr/bin/ruby ruby
## config/unicorn.rb

# pidファイルの場所
path_pid = "unicorn.pid"

# ログ
path_stdout_log = "log/unicorn.log"
path_stderr_log = "log/unicorn.log"

# port
port = 8080
# socket
path_socket = "/tmp/unicorn.sock"


# ===== 以下は基本的にあたる必要なし =====
# from https://github.com/defunkt/unicorn/blob/master/examples/unicorn.conf.rb

rails_root = File.expand_path('../../', __FILE__)
ENV['BUNDLE_GEMFILE'] = rails_root + "/Gemfile"

# Use at least one worker per core if you're on a dedicated server,
# more will usually help for _short_ waits on databases/caches.
worker_processes 4

# 変数が存在している場合のみ、listenする
listen path_socket, :backlog => 64 if !defined?(path_socket).empty?
listen port,        :tcp_nopush => true   if !defined?(port).empty?

working_directory rails_root

# 接続タイムアウト時間
timeout 30

# unicornのタイムアウト時には、リクエストのログは一切production.logには出力されない。
# なので、それを強制的に吐き出す処理を追加する
# INTシグラルでトラップするようにしている
timeout_signal :INT
after_fork do |server, worker|
  trap (:INT) do
    Rails.logger.error "Unicorn Timeout (trapped SIGINT)"
    Rails.logger.flush
    Process.kill :KILL, $$
  end
end

pid path_pid

# unicornログの場所を指定する
stdout_path path_stdout_log
stderr_path path_stderr_log


# 基本的には`true`を指定する。Unicornの再起動時にダウンタイムなしで再起動が行われる。
preload_app true

# これをする理由は、
# http://techracho.bpsinc.jp/baba/2012_08_29/6001
# をみると、解りやすい
before_fork do |server, worker|
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end

```
ruby 外部モジュール読み込み方法

#### rubyで外部ファイルを外部モジュールとして読み込む方法

```rb
require 'hoge'
```

これをすると、読み出した側のスクリプトに展開される。
もし、```hoge.rb``` にモジュールが定義されているならば、

```rb
include 'home_moudle'
```

を実行しなければいけない

##### 補足

```rb
module Zozom
  def hello(name)
    puts "hello, #{name}"
  end
 
  def double(num)
    puts num * 2
  end
 
  module_function :hello, :double
end
```

こうすることで、```include "Zozom"```をすることなく、

```rb
Zozom.hello "hoge"
# => hello, hoge
```

のように読み出すことができる。

##### 参考文献
http://blog.livedoor.jp/sasata299/archives/51268600.html
Unity5.3でオブジェクトの色を変えたかった話。

UnityのC#スクリプトから、オブジェクトの色を変えたかったんですが、ちょっと詰まってしまったので書き残しておきます。

公式リファレンスなどから色を変えるには、Color( )を使えば良いらしいです。

こんな感じ

gameObject.GetComponent<Text>().color = new Color(243, 156, 18, 125);

でもこれだと、変わらないどころか、インスペクターで設定した色から、白になってしまう。。。。

色々調べて見ると、０〜255の値ではなく、０〜１の値にしなければいけないらしい。

参考
[GetComponent<Text>().color = new Color(1, 0, 0, 1);](http://yamakami21.hatenablog.com/entry/2015/06/22/113313)

gameObject.GetComponent<Text>().color = new Color( 243.0f / 255.0f, 156.0f / 255.0f, 18.0f / 255.0f, 125.0f / 255.0f );

それぞれの値に、( / 255.0f )すると解決しました。

#おわり
インスペクターパネルとかの設定が0~255とかなので、スクリプトでも同じだと思ってました。。。。
ダブルクリックするとセルを塗りつぶすマクロ

業務で自作したマクロです。

処理実施後に、特定のセルに処理の実施が必要であったかを「はい/いいえ」で入力しセルを塗りつぶします。
シートの[Worksheet_BeforeDoubleClick]イベントから呼び出す形で利用します。

```vba:DblClkAndSet.vb
'
'Call (Target, Cancel, ・・・
'
'//第1引数：Worksheet_BeforeDoubleClickイベントのtarget引数(上のcall文の引数をそのまま使う)
'//第2引数：Worksheet_BeforeDoubleClickイベントのcancel引数(上のcall文の引数をそのまま使う)
'//第3引数：操作中/中断の判定(True=操作中,False=操作中断)
'//第4引数：ダブルクリックする列の列番号
'//第5引数：作業の列番号（"あり"/"なし"を入れる列）
'//第6引数：実際に色をつける範囲の先頭列番号
'//第7引数：実際に色をつける範囲の最終列番号

Const STR_VALUE_YES As String = "あり"
Const STR_VALUE_NO As String = "なし"


Sub DblClkAndSet(ByRef argTarget As Range, ByRef argCancel As Boolean, ByVal argFlg As Boolean, _
                         ByVal argOpeClm As Integer, ByVal argDisposal As Integer, ByVal argPtnStgSt As Integer, ByVal argPtnStgEd As Integer)

    '------塗りつぶしの色を指定----------
    Dim LNG_PTN_CLR As Long
    LNG_PTN_CLR = RGB(51, 153, 51)
    '------------------------------------


    If Not IsArray(argTarget) Then

        If argTarget.Column = argOpeClm And argFlg = True Then
    
            Select Case MsgBox("塗りつぶしますか" & vbCrLf & _
                      "はい  =あり(入力済みのときは塗りつぶしのみ)" & vbCrLf & _
                      "いいえ=なし(入力済みのときは塗りつぶしのみ)" & vbCrLf & _
                      "キャンセル=塗りつぶししない", vbYesNoCancel + vbDefaultButton3)
                Case vbYes
                    Range(Cells(argTarget.Row, argPtnStgSt), Cells(argTarget.Row, argPtnStgEd)).Interior.Color = LNG_PTN_CLR
                
                    If Cells(argTarget.Row, argDisposal).Value = "" Then
                        Cells(argTarget.Row, argDisposal).Value = STR_VALUE_YES
                    End If
                
                Case vbNo
                    Range(Cells(argTarget.Row, argPtnStgSt), Cells(argTarget.Row, argPtnStgEd)).Interior.Color = LNG_PTN_CLR
                
                    If Cells(argTarget.Row, argDisposal).Value = "" Then
                        Cells(argTarget.Row, argDisposal).Value = STR_VALUE_NO
                        
                    End If
                
                Case vbCancel
                    '操作なし
            End Select
            
            argTarget.Activate
            argCancel = True
        End If
    End If
End Sub
```
slack の /remind 機能まとめ

時間が来たら何か通知させるたりするの，あちこちで bot で実装してたりすると思いますが，
標準で存在してる slackbot が最近色々機能拡張されたので通知させるだけなら独自に bot を用意しなくても充分になりました．
けど，英語読むのめんどい人とか，詳しい使い方を知ってる人は知っているけど知らない人は知らないと思うのでまとめてみました．
*(というか [公式のhelp](https://get.slack.help/hc/en-us/articles/208423427-Setting-reminders) にまとまってるのでそっちで良い人はそっちみた方が早いです．)*

# slash command

メッセージ入力で `/` から始まるコマンドを入力する事を slash command と言います．
irc や skype 等 chat アプリでは一般的な機能で， slack にも実装されています．
`/` 以下にいろいろなコマンドを続ける事で，色々な事ができるんですが，今回は remind だけ説明．

# 登録方法

```
/remind [target] to [message] [at|in|on] [日時] (every day)
```

順序はわりと自由です．上記の順でないといけないという事はありません．
`[target]` など `[]` で囲った部分が，独自に指定する箇所です．


* target
    * 通知先です．自分だけでよければ `me`, 部屋に通知させたい場合は `@here` や `#general` 等， mention や 部屋名を指定します． `@` で group mention だけでなく他人も指定できるので，他人のスケジュールを勝手に設定する事も可能です．
        * ![image](https://qiita-image-store.s3.amazonaws.com/0/18586/ac7ee11f-2536-28b4-8259-953ec00c5911.png)
        * ↑こう登録すると↓こう表示される
        * ![image](https://qiita-image-store.s3.amazonaws.com/0/18586/dcac3a68-76d0-c165-9817-6da8d5e1ed10.png)

* message
    * リマインド時に表示させたいメッセージを指定します
* at|in|on 日時
    * 通知したい時間を指定します． `at` は時間を指定，`on` は日にちを指定，`in` は n 分後/時間後等を指定します．
        * **on**  `2015/12/31`, `8 Feb` など．曜日を渡すと一番近い曜日の日が選択されます(`on Tuesdays`)
        * **at** `1pm` や `11:23` など
        * 日時を指定したい場合は **on** と **at** を併用
    * 他にも `tomorrow` 等でダイレクトに明日と指定する事等もできます．([公式のhelp](https://get.slack.help/hc/en-us/articles/208423427-Setting-reminders) 参照)
    * 繰り返しのイベントを作りたい場合は，追加で `every [day]` を指定します
        * 毎日なら `day`
        * 平日なら `weekday`
        * 特定の曜日なら `monday` 等
        * 組み合わせで毎月何日(`on the 4th of every month`)とか，毎年の何日(`every January 25`)とかも可能
		
# スヌーズ

自分宛ての remind は slackbot 部屋に流れてきます．
その際，スヌーズの設定をする事が可能です
![image](https://qiita-image-store.s3.amazonaws.com/0/18586/f84bccd2-8b94-340a-886b-dc79a287b8af.png)


# 登録済の remind を確認する

```
/remind list
```

と打つと，自分が受け取るであろう通知が確認できます．

# ヘルプ

```
/remind help
```
と入力すると下記のように slack bot が使い方を教えてくれます．(というか説明ほぼこれで足りるんですよね…)

```
• `/remind me to drink water at 3pm every day`
• `/remind me on June 1st to wish Linda happy birthday`
• `/remind #team-alpha to update the project status every Monday at 9am`
• `/remind @jessica about the interview in 3 hours`
• `/remind @peter tomorrow "Please review the office seating plan"`
```
BitbucketにSSH認証キーを設定する方法(Mac)

#はじめに
MacでBitbuket上にあるリポジトリをSSHでクローンしようとした際、躓いたのでメモ。

#公開鍵と秘密鍵の作成
① ターミナルで以下のコマンドを実行する。

```text
cd ~/.ssh
ssh-keygen -t rsa -C ***@***.ne.jp
```
　2つのファイルが生成される。
　・id_rsa  <秘密鍵>
　・id_rsa.pub  <公開鍵>

② 秘密鍵(id_rsa)のセキュリティ強化のため、以下のコマンドを実行する。

```text
chmod 600 id_rsa
```

#MacにSSHキーを設定する
① configファイルをvimで開く。

```text
vim ~/.ssh/config
```

② configファイルの末尾に以下の内容を追加する。
　 ※`A`コマンドで行末からインサートモードに入る。

```text
Host bitbucket.org
HostName bitbucket.org
IdentityFile ~/.ssh/id_rsa
User git
```
　 ※`esc`で通常モードに戻り、`:wq`で保存して終了する。

#Bitbucketに公開鍵を登録
① Bitbucketのアカウント設定の「セキュリティ」項目から「SSHキー」を選択する。
② 「鍵を追加」をクリックし、Labelに任意の名前を付ける。
③ SSHキーをコピーするため、以下のコマンドを実行する。

```text
pbcopy < ~/.ssh/id_rsa.pub
```

④ コピーしたSSHキーを②の画面のKeyにペーストし、鍵を追加する。

リポジトリをクローンできれば成功。
ActiveRecordでindexを指定する

## 何したいの
indexを絶対に使って欲しい。

## テーブル
```users.sql
CREATE TABLE `users` (
  `id` bigint(20) unsigned NOT NULL COMMENT 'ユーザーID',
  `name` varchar(16) CHARACTER SET utf8 NOT NULL COMMENT 'ユーザー名',
  `created_at` datetime NOT NULL COMMENT '作成日時',
  `updated_at` datetime NOT NULL COMMENT '更新日時',
  PRIMARY KEY (`id`),
  KEY `index_users_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
```

## モデル
```user.rb
class Users < ActiveRecord::Base
  scope :use_index, ->(index) { from("#{self.table_name} USE INDEX(#{index})") }
end
```

## 実装
```call.rb
User.use_index('index_users_name').all
```

fromを使うことでindexを指定出来る。
普通なら指定せずともDBが上手くやってくれる気がするのだけど、強制したい場合があったのでメモ。

## 参考資料
http://stackoverflow.com/questions/13904035/use-specific-mysql-index-with-rails
node-redでマップ表示

#概要
node-redからwebsocketでマップ表示する。
jsdo.itで実行する。
#写真
![map.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/90601699-e5a1-1376-85ba-8f84665c3f95.jpeg)

![nmap.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/52fb3687-ae48-3e48-3020-c271b7dd975e.jpeg)

#サンプルデータ
```
var map;
var point;
var marker;
function ido(koko) {
    latlon = koko.split(",");
    var my = new google.maps.LatLng(latlon[0], latlon[1]);
    map.setCenter(my);
    marker.setPosition(my);
};
function init() {
    point = new google.maps.LatLng(38.0, 140.0);
	var opts = {
		zoom: 10,
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		center: point
	};
    map = new google.maps.Map(document.getElementById("map"), opts);
    marker =  new google.maps.Marker({
        position: point,
        map: map
    });
}
google.maps.event.addDomListener(window, 'load', init);
var websocket;
function setup() { 
    websocket = new WebSocket("ws://node-red /test0");
    websocket.onopen = function() {
        alert("CONNECTED"); 
    };
    websocket.onmessage = function(e) {
        ido(e.data);
    };
    websocket.onerror = function(e) {
        alert("ERROR: " + e.data);
    };
}
setup();
```
【Android】Retrofitの@GETで複雑なクエリを投げる

# Retrofit超便利！！
Retrofit最近流行ってますね。

RetrofitはRxJavaと連携できてスマートに通信処理を記述できるので非常に便利です。

しかし、まだ新しいので情報が少なく、知らないと落とし穴にハマってしまうことがあります。今回 `@GET` で複雑な文字列をAPIに渡そうとしたらつまずいたので、最終的にたどり着いた解決方法をご紹介します。 

## `@GET` で複雑なクエリを投げられない
`@GET` では `@Query` と `@QueryMap` のパラメータがサポートされています。通常この２つのパラメータで事足りることが多いのですが、今回投げたかったのは以下の様なクエリです。

```
http://www.hoge.com/hoge?values[][max]=100&values[][min]=0&values[][max]=200&values[][min]=100
```

`values[]` という配列に `min` と `max`  という最小値と最大値のペアを格納しています。配列と連想配列の入れ子のような状態ですね。

もしこれが普通の配列なら、 `@Query("values[]") List<Integer> values` のように書けますし、普通の連想配列なら `@QueryMap Map<String, Integer> map` のように書けますが、入れ子にする場合の実装方法が見つけられませんでした。

最初のうちは `@Query` か `@QueryMap` のどちらかの形に無理やり持ち込めないかと色々試したものの、うまく行きませんでした。

RetrofitのIssuesなども漁ってみましたが
https://github.com/square/retrofit/issues/1324
を見ると、まだサポートされていないようでした。

上記のIssueを読むと、`@Query` をカスタムする方法や `Map` を重複するKeyを入れられるようにカスタムする方法が使えそうな会話がなされていますが、具体的な方法は示されておらず、調べていくとなかなか難しそうだったので今回は見送りました。

## 解決策
発想を変えて `baseUrl()` を動的に生成することで実現できました。

```
public interface MyApi { 
    @GET // ここにはURLを書かない
    Call<MyResponse> getWithComplexQuery(@Url String anEmptyString); // 空のURLを設定
} 

String url;
url = xxx; // URLを動的に生成
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(url)  // 生成したURLを渡す
    .addConverterFactory(GsonConverterFactory.create()) 
    .build(); 
 
ClientService service = retrofit.create(MyApi.class);
 
Response<MyResponse> response = service.getWithComplexQuery("").execute();
```

まとめると、baseUrlに動的に生成したUrlを入れてやるだけですが,
空の `@Url` を設定するのがポイントです。ちなみに `@Url` は１つ目の引数にしないと怒られるので `@Header` などを付けたい場合は2つ目以降の引数で。

## まとめ
`baseUrl` を動的に生成するのはあまり美しくない気がしますが、現状これ以外の方法を見つけられませんでした。
これ以外の方法をご存じの方がいらっしゃいましたらぜひ教えて下さい。


## 参考URL
https://github.com/square/retrofit/issues/1324
http://stackoverflow.com/questions/32559333/retrofit-2-dynamic-url
concrete5 で使うための PHP CS Fixer コマンド


自分メモ ATOM とか使えばいいんですが、自分は未だ Coda 2 で頑張っているので、忘備録メモです。

## concrete5 の PHP CS Fixer 専用 config ファイル

https://github.com/concrete5/concrete5/blob/develop/.php_cs

このファイルを、自分のプロジェクトファイルのルートにも DL & 保存する。

## コマンド

### 1. 上記の Config ファイルが置いてあるパスから走らせる場合

```
php-cs-fixer fix [修正先path (.)]
```

例
```
php-cs-fixer fix .
```

### 2. 上記の Config ファイルが置いてある場所が違う場合

```
php-cs-fixer fix [修正先path] --config-file　[.php_cs ファイル保存先]
```

※ PHP CS Fixer のインストール方法は、他のドキュメントを参照

宣伝: CMS は断然 [concrete5](https://concrete5-japan.org/)で決まり。[コンクリートファイブジャパン株式会社](https://concrete5.co.jp/)では、Mautic をはじめとするマーケティングオートメーションと CMS 導入など、様々なサポートを行っています。

## 宣伝 & クレジット

この記事が役に立ったら、「 **CMS は concrete5 が一番**」と頭の中で10回唱えてください。

CMS は断然 [concrete5](https://concrete5-japan.org/)で決まり。[コンクリートファイブジャパン株式会社](https://concrete5.co.jp)がサポートできます。
c++ builder > TeeChart > スクロールした状態を検知したい (成功してない)

```txt:動作確認
C++ Builder XE4
```

TeeChartではマウス右クリックをしてドラッグすることで、グラフの表示範囲をずらすことができる。

ユーザがこのずらす処理をしたかどうかをコードで検知したい（処理を分岐するため）。

現在までわかっているのは以下。

- Chart1->Panning->X0; (とY0, X1, Y1)は最初0となっている
- マウス右クリックでドラッグすると X0, Y0, X1, Y1 の値が0以外になる
- この後でマウス左クリックで右下から左上へ選択して表示範囲を初期状態に戻しても、上記の値４つは0に戻らない。

他にbool値を色々チェックしてみたが、該当のものは見つからず。


## try1

Zoom解除動作の時に、X0,Y0,X1,Y1の値を0に入れる方法。
もっとスマートな方法がないものか。

```Unit1.cpp
void __fastcall TForm1::Button1Click(TObject *Sender)
{

#if 0
	bool zmd = Chart1->Zoomed;
	bool pnAct = Chart1->Panning->Active;
	bool flt = Chart1->Zoom->UpLeftZooms;
#endif

	int xval0 = Chart1->Panning->X0;
	int yval0 = Chart1->Panning->Y0;
	int xval1 = Chart1->Panning->X1;
	int yval1 = Chart1->Panning->Y1;


	int nop = 1;
}

void __fastcall TForm1::Chart1UndoZoom(TObject *Sender)
{
	int nop=1;

	Chart1->Panning->X0 = 0;
	Chart1->Panning->Y0 = 0;
	Chart1->Panning->X1 = 0;
	Chart1->Panning->Y1 = 0;

}
```
gzをgrepする

## 何したいの
gzで圧縮済みのログをgrepしたい。

## 普通のgrep
```
grep 見つけたい文字列 error.log
```

## gzのgrep
```
zgrep 見つけたい文字列 error.log.gz
```

コマンド名の先頭に「z」付けるだけ！
過去ログ漁ることなく平和に過ごしてて、最近初めて使ったのでメモ。

## 参考資料
http://orebibou.com/2014/12/%E5%9C%A7%E7%B8%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92cat%E3%80%81grep%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/
AndroidAnnotations使用時にコンパイルエラーになったときの対応方法


Github: [AndroidAnnotations](https://github.com/excilys/androidannotations)



# 対応1: Make Projectしてみる
AndroidStudioでMake Projectをすると、AndroidAnnotationの実クラス(Hoge_.java)が生成され、コンパイルエラーが解決することがあります。

```
Build > Make Project 
(ショートカット: ^F9)
```

# 対応2: AndroidAnnotationsのコンパイルログを見る

上記でも解決しない場合の対応方法です。
コンパイルエラーになったときは、AndroidStudioのログに、以下のようにandroidannotations.logのパスが表示されます。

```
...
注意:Resolve log file to /Users/kyamada/git/hoge/app/build/generated/source/apt/androidannotations.log
...
```

上記のファイルを適当なエディタで開きます。

```androidannotations.log

...
18:30:55.803 [Daemon worker Thread 45] ERROR o.a.h.AnnotationHelper:128 - @org.androidannotations.annotations.res.StringRes cannot be used on a private element
18:30:55.803 [Daemon worker Thread 45] WARN  o.a.p.ModelValidator:69 - Element ResHandler unvalidated by
18:30:55.804 [Daemon worker Thread 45] ERROR o.a.h.AnnotationHelper:128 - @org.androidannotations.annotations.res.StringRes cannot be used on a private element
```

ログファイルの中で、ERROR、WARNとなっている行に、コンパイルエラーの原因が書かれているので、その情報を元にプログラムを修正します。
いまさらAWS ECS


本資料は書きかけのメモです。もう少し中身が分かったら、詳細に書く予定です。

# Dockerを使う
Dockerを使うのですが、環境を整えるのが面倒なのでECSを使えないかと考えたので、そのメモです。

# Amazon ECSの概念整理

## クラスタ
ECSが動作するEC2インスタンスをまとめて管理する単位として、「クラスタ」という概念を用います。クラスタを作るとCloudFormationで環境作ってくれます。

## ECS インスタンス
ECSを動作させるEC2インスタンスをECSインスタンスと呼びます。
クラスタの管理タブの一つとして表示されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/41582/e17e7d9c-6a3f-7441-c5d5-7641788dba8e.png)

実際のアクセスポイントはこのインスタンスのIPアドレスなどになるため、パブリックIPなどを確認します。

## タスク定義
タスク定義は複数のコンテナを合わせて一つの集合をタスク・サービスと概念化して、その定義ファイルを「タスク定義」として管理します。

### コンテナ定義
DockerFileやコマンドの引数となるような設定をコンテナ定義で実施します。

+ ポートマッピング
+ 環境変数
+ イメージ名称
（dockerhubが利用できます。ユーザ指定をしなければ、officialのものが入ります）
+ Link対象

### Task/Service
タスク定義に基づいて実際に動作させる設定がTask、Serviceとなる。この違いは一度起動すると終了するのがTaskで、監視していてコンテナが停止すると自動起動するのがServiceという違いがある。

## ECS コンソール
ECSの管理ツールを用いると上記が簡単に設定できる。dockerのコマンドであるpull/run/startなどを自動的に実施ししてくれる。

# 今後のテーマ
今後のテーマとして、
+ AutoScaling
+ ELB
を用いて、インフラを考えることなくコンテナが利用できることを確認する。
+ 専用のVPCに対してVPC間接続をしてEC2のサーバからプロキシして、一つのサーバで動作しているようにみせかけること
rspecをparallel_testsを使って高速化する

# 環境
Ruby on Rails 4.2.5
ruby2.2.3

# はじめに
テストが増えてきて実行時間が気になるようになってきたので
テストを並列で走らせることができる「[parallel_test](https://github.com/grosser/parallel_tests)」を導入してみました。（[test_queue](https://github.com/tmm1/test-queue)と迷いましたがとりあえず、、、）
並列で走らせるプロセスの数だけデータベースが必要となります。

# セットアップ
## インストール
```rb:Gemfile
gem 'parallel_tests'
```

```bash
$ bundle install
```

## テスト用データベースの準備
```rb:database.yml
test:
  database:  db_test<%= ENV['TEST_ENV_NUMBER'] %>
```
テストを4つ並列で走らせる場合、データベース名は
db_test
db_test2
db_test3
db_test4
のようになります。


## データベースのセットアップ
```bash
$ rake parallel:create
$ rake parallel:prepare
```

## データベースのセットアップをまとめて行いたい場合
seeds.rbに書いてある内容も実行される

```bash
$ rake parallel:rake[db:setup]
```
$ rake parallel:rake[実行したいタスク]
のようにすればrakeタスクを走らせることができる。

# テスト実行

```bash
$ rake parallel:spec
```

## ファイルを指定して実行
users_controller_spec.rbを走らせたい場合

```bash
$ rake parallel:spec[users_controller]
```

以下のようにするとファイル名にuserを含むテスト（models/user_spec.rbなどuserと名前のつくもの）がすべて実行される。

```bash
$ rake parallel:spec[user]
```

以下のようにするとmodelsディレクトリにある、ファイル名にuserを含むテストが実行されます。

```bash
$ rake parallel:spec[user]
```

僕の環境では実行時間はおよそ半分になりました。
CentOS 7 用のKeychain

CentOS 7 用の Keychainがなかったので、Fedora 23 のrpmパッケージをインストールしました。
CentOS 6までは、RPMForge でrpmパッケージがあったのですが、CentOS 7にはありません。

fedora では~~コンパイル~~(コンパイルが必要なわけじゃないので正しくは、パッケージング)されているようなので、こちらを使いましょう。
keychain | Package Info | koji
http://koji.fedoraproject.org/koji/packageinfo?packageID=2211

```lang:shell
yum install https://kojipkgs.fedoraproject.org//packages/keychain/2.8.0/2.fc23/noarch/keychain-2.8.0-2.fc23.noarch.rpm
```

動作上も問題ないようです。
UnityでVisualStudioCodeを使う  (2015年12月時点)

# はじめに

　この投稿は、2015年12月時点の内容となっています。

　Visual Studio Code、そして利用するAssetのバージョンアップに伴い、この設定の仕方が変更になる可能性があります。何かありましたら[公式サイト](https://code.visualstudio.com/Docs/runtimes/unity)等を参照してください。

　本投稿で利用している[エディタ拡張(v2.30)](https://github.com/dotBunny/VSCode/)は、Unity 4.6以上、VisualStudioCode 0.10.1以上を対象としています。

# 設定方法

　[公式サイト](https://code.visualstudio.com/Docs/runtimes/unity)では、[@Reapazor](https://twitter.com/reapazor)さんの作った[VSCode](https://github.com/dotBunny/VSCode/)というエディタ拡張を利用する方法をお勧めしています。本投稿でも、この方法を紹介します。

## エディタ拡張の入手

　まず、ターミナルで[VSCode](https://github.com/dotBunny/VSCode/)をクローンします。

```
git clone https://github.com/dotBunny/VSCode.git
```


　そしてクローンしてきた、`Plugins/Editor/dotBunny`をUnityプロジェクトの`Assets`ディレクトリに置きます。


　ちなみに、[AssetStore](https://www.assetstore.unity3d.com/jp/#!/content/45320)からも入手可能です。

## 設定の有効化

　メニューの`Unity>Preferences`を選択するとウィンドウが出てきます。ウィンドウ左部の一番下のタブのVSCodeを選択します。

　![Screen Shot 2015-12-28 at 5.49.36 PM.png](https://qiita-image-store.s3.amazonaws.com/0/4125/e6800f78-8670-1ebb-e02a-e3e713567039.png "Screen Shot 2015-12-28 at 5.49.36 PM.png")


　`Enable Integration`にチェックを入れてください。

　任意ですが、Output Messages To Consoleにチェックを入れると出力をUnityのコンソールにも表示できます。

　Unityのプロジェクトは*.metaファイルなどの、編集対象でないファイルも多数含んでいます。ウィンドウ中の`Write Workspace Settings`ボタンを押すと、ViualStudioCodeで*.metaなどのファイルを表示させないようにする、設定ファイルが生成されます。

## プロジェクトを開く

　メニューの`Assets > Open C# Project In Code.`を選択して、プロジェクトを開きます。


# さいごに

　こちらの「[UnityでVisual Studio Codeを使う](http://qiita.com/STAR_ZERO/items/6708b69d18eb8c815963)」というの素敵な投稿の内容がバージョンアップに伴い、古くなっていて利用できなくなっていました。本投稿の内容も同様に、VisualStudioCodeのバージョンアップに伴い、古くなる可能性があるので、何かありましたら[公式サイト](https://code.visualstudio.com/Docs/runtimes/unity)をごらんください。
Eclipse 4.5 Mars Pleiades All in One で CakePHP３の環境をつくろう

# 環境

# 手順
1. PHPプロジェクトを作成する
2. プロジェクトとは別のディレクトリへCakePHPをcomposerでインストール
3. インストールしたファイルを、PHPプロジェクトへ移動
4. Eclipseを更新
5. app.phpを更新して、xamppで表示を確認
6. PHPプロジェクトをチーム > プロジェクトの共有
    1. ソースと同じディレクトリにリポジトリを作成
7. EGitでリモートリポジトリを登録
8. gitプロパティを設定（user.name、user.email、user.signingkey）
9. git関連のファイル（gitignore、gitattribuite）のみ、commitする
10. EGitパースペクティブで、リモート > origin > push構成 > 拡張 からgitのリモート構成を設定（全てのbranchとタグをpush） 
11. 全てのファイルをcommitする
12. git pull でgitignoreファイルを編集して、索引に追加 してcommitして、push
13. branch developを作成
public で宣言するのは main メソッドのあるクラスだけ

public で宣言するのは main メソッドのあるクラスだけ

１ファイルに複数クラスを書けるんですけど、public で宣言できるのは、ファイル名と同じ名前のクラス１つだけなんです。
それで、その public に宣言するクラスは普通に考えて main メソッドのあるクラスが妥当だろうと、ただそれだけです。
CSVHelperで読込時に正規表現チェック

最終更新日：2015/12/28

#前置き
CSVファイルをCSVHelperで読む時に型変換を行う場合、
Mapする際に ［TypeConverter］メソッドをはさむ事で
メジャーな型やNullable、Enumなどに変換して取得する事が出来る。

ただ、郵便番号やメールアドレスのような形式が決まっている文字列も
型としては“String”であり、［TypeConverter］ に「郵便番号型」なんてのは存在しない為（当たり前）、
こっち側でデータの中を読みつつ正しいかをチェックしてやる必要がある。
せっかくModelとMapを整えても、結局１項目ずつ読み取るのは何だか勿体無い。

#目標
Mapする際に正規表現でパターンマッチングを行い、
パターンにマッチしないデータが存在した時は、他の型のコンバートエラー同様
［CsvTypeConverterException］を返してあげる。

#対応方法
今回は「郵便番号（/\A[0-9]{3}-[0-9]{4}\z/）」の正規表現を例に
サンプルソースを書いてみます。

##*Custom Type Converter* を作成する方法

```csharp:RegexConverter.cs
public class RegexConverter : DefaultTypeConverter
{
  private Regex _regex;
  public RegexConverter(Regex reg) 
  {
    this._regex = reg;
  }

  public override object ConvertFromString(TypeConverterOptions options, string text)
  {
    if (text == null || !this._regex.IsMatch(text))
    {
      return base.ConvertFromString(options, text);
    }
    return text;
  }

  public override bool CanConvertFrom(Type type)
  {
    return type == typeof(string);
  }
}
}
```

```csharp:ZipModelMap.cs
public class ZipModelMap : CsvClassMap<ZipModel>
{
  public ZipModelMap()
  {
    Regex zipReg = new Regex(@"\A[0-9]{3}-[0-9]{4}\z");
    Map(x => x.ZipCD).Name("ZipCD").TypeConverter(new RegexConverter(zipReg));
  }
}
```

##*ConvertUsing* メソッドで無名関数を使用する方法
```csharp:ZipModelMap.cs
public class ZipModelMap : CsvClassMap<ZipModel>
{
  public ZipModelMap()
  {
    Regex zipReg = new Regex(@"\A[0-9]{3}-[0-9]{4}\z");
    Map(x => x.ZipCD).ConvertUsing<string>(row =>
      {
        string val = row.GetField<string>("ZipCD");
        if (val == null || !zipReg.IsMatch(val))
        {
          thorw new CsvTypeConverterException("The conversion cannot be performed.");
        }
        return val;
      });
  }
}
```

#まとめ
上記両パターン共に、指定した正規表現パターンに当てはまらないデータ存在時
［CsvTypeConverterException］を発生させてやることが出来た。
（タイプミス等のコンパイルエラーに関しては保障出来ないが・・・）

単なる文字列でも、指定した正規表現パターンにコンバート出来なかったら
型変換例外っていうのはちょっとズルいかな？

［Custom Type Converter］と［ConvertUsing］メソッドの使い分けとしては、
正規表現が連発するようなプロジェクトならクラス化しちゃって、
ちょこっと使いたい程度なら無名関数かな？っていう雰囲気で（
~~要するにただの決めです。どちらでも出来るのでお好きにどうぞ。~~

#補足
［CsvTypeConverterException］は［CsvHelperException］を継承しており、
［CsvHelperException］はExceptionのData["CsvHelper"]に
エラーが発生した際の内容を格納している。

>Row: '3' (1 based)
>Type: 'CsvHelperSample.Model.ZipModel'
>Field Index: '0' (0 based)
>Field Name: 'ZipCD'
>Field Value: '110001'

こいつと一緒にExceptionの内容を吐き出してやれば、
［GetRecodes\<T>］メソッドで取得した時でも、どこでエラーが出たを簡単に取れる。

#課題
［Configuration.IgnoreReadingExceptions］と掛け合わせれば
エラー全件取れるかは要考察。

#参考サイト
[CsvHelper](https://joshclose.github.io/CsvHelper/)
[Custom TypeConverter · JoshClose/CsvHelper Wiki · GitHub](https://github.com/JoshClose/CsvHelper/wiki/Custom-TypeConverter)
rails server -d でバックグラウンドで実行中のプロセスを停止する方法

開発環境では```rails server```のコマンドを使ってWEBRickのサーバーを立ち上げています。
動かしっぱなしにしたいときは-dのオプションで
```rails server -d```
とすることで、バックグラウンドで実行できます。

これは非常に便利なのですがサーバーを再起動したい時にちょっと困りました。
解決策をメモしておきます。
```ps ax | grep rails```
を実行すると、
```11940 ?        Sl     1:52 /root/.rbenv/versions/2.0.0-p598/bin/ruby bin/rails s -d```
こんな感じの行があるので
```kill -9 11940```
とすればOKです

この記事を参考にしました。ありがとうございます。
http://qiita.com/dala/items/f5114cfb9ba3b0631bc0
Check! Amazon Linux 2015.09 で yum update してから Ansible を使う時は python2.6 に切り替える

こんにちは、[cloudpack][] の @dz_ こと[大平かづみ][]です。

Prologue - はじめに
====
ちょっと Ansible に慣れようと Amazon Linux でトライしてみたところ、以下でハマりました。備忘録にメモを残します。

トラブルシューティング
====

`ansible` 実行で `ansible.runner` がみつからないエラー
----

```bash
# Ansible のテストで自身に ping を打ってみるも… (hosts 設定済み)
ansible localhost -m ping
```

```bash
Traceback (most recent call last):
  File "/usr/bin/ansible", line 36, in <module>
    from ansible.runner import Runner
ImportError: No module named ansible.runner
```

python のバージョンが `2.7` であることが原因なので、 `2.6` に変更することで Ansible が動くようになります。（Amazon Linux 2015.09 で `yum update` をした後などは `python2.7` に更新されるそうです。）

```bash
# python を 2.6 に切り替える
sudo alternatives --config python

2 プログラムがあり 'python' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/bin/python2.7
   2           /usr/bin/python2.6

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
```

playbook の yum モジュールが使えないエラー
----

`ansible-playbook` で `yum:` モジュールを使おうとすると以下のようにエラーになってしまいました。

```bash
TASK: [Install Git] *********************************************************** 
failed: [localhost] => {"failed": true, "parsed": false}
Traceback (most recent call last):
  File "/home/user/.ansible/tmp/ansible-tmp-XXX/yum", line 27, in <module>
    import yum
ImportError: No module named yum
```

どうやら `yum-python26` がないとのことで、インストールしましょう。

```bash
# yum-python26 をインストールする
sudo yum install yum-python26
```

Epilogue - おわりに
====
以上です！

[cloudpack]:https://cloudpack.jp/ "cloudpack（クラウドパック） 400社を超える導入実績! EC2などAWSクラウドの導入設計、構築、運用保守サービス"
[cloudpack-blog]:http://blog.cloudpack.jp/ "cloudpack技術情報サイト"
[大平かづみ]:http://blog.cloudpack.jp/author/oohira/ "大平かづみの記事一覧"
find(42)とfind_by(id: 42)の違いについて

#findとfind_by(id:)
大した内容ではないけど知識に穴があったので自分用にメモ。
両方ともRecordをidで検索して結果を返すが、見つからなかった時の挙動が違う。

### find

```rb
User.find(1000)
  User Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1000 LIMIT 1
=> ActiveRecord::RecordNotFound: Couldn't find User with 'id'=1000
```
`ActiveRecord::RecordNotFound` が投げられる。

### find_by(id:)

```rb
User.find_by(id: 1000)
  User Load (0.5ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1000 LIMIT 1
=> nil
```

`nil` が返る。

システムの挙動として、Recordが見つからないことが織り込み済みの場合は `find_by` を使って分岐か何かで`nil`を処理する。見つからないのが異常なら `find` を使ってエラーを投げて404ページを表示する。
Pocket WiFi 401HW > 5日たっても低速解除されない > 1ヶ月の制限だった

http://qiita.com/7of9/items/2bf8c1b3ad86d9c8fdd9
で12月23日に通信速度制限になった401HW。

- 12月23日 10:03:16 : ご利用のデータ通信量が規定のデータ通信量に到達し...

12月28日現在、低速状態が解除されない。
12月23日以降、通信量はほとんど0 (使用してないため)。

取説を見ているが、いつ解除されるかはっきりしない。
Y! mobileへメールを送ったが、今のところ返事なし。
有料の方の電話サポートにかけているが、つながらない。

3日単位で容量を制限しているので、3日後には解除されると思っていた。
次の月まで制限なのだろうか。

いろいろ調べた結果、追加支払いで解除する方法「だけ」が見つかったが、そういうのではないように思う。


<hr>
(追記)

Y! mobileから連絡があり、一ヶ月の制限にかかっていたとのこと。

解除は来月の１日。

3日の制限よりも、一ヶ月の制限に気をつけて使わないといけない。
基本からしっかり学ぶ Symfony2入門を読んで、知らなかったことメモ

## 背景

* [基本からしっかり学ぶ　Symfony2入門：書籍案内｜技術評論社](http://gihyo.jp/book/2016/978-4-7741-7803-5) を買って読んでいます
    * 現在7章の途中
* わりとSymfony2を使っているつもりでしたが、この本を読むまで知らなかったことをメモします
    * どれもSymfonyのマニュアルに書いてあることだったのですが、書籍のほうが最初から通して読みやすいので勉強になりました
        * Symfony2初心者の方はもちろん、私みたいな知ってるつもりの人にもおすすめ

## P.102 submit をフォームの要素として定義する

submit をフォームの要素として定義しておくと、1つのフォームに複数ボタンがある際にうまく扱える。

See: http://symfony.com/doc/current/book/forms.html#submitting-forms-with-multiple-buttons

## P.112 リダイレクトインターセプション

PRG(Post Redirect Get)パターンを使用している場合など、
Post時の情報をデバッグするのに少し手間がかかるが、
そういう場合に下記の設定をしておくと、リダイレクトせずに1枚確認画面が挟まるので
デバッグツールバーを使用してデバッグしやすくなる。

```yaml
web_profiler:
    intercept_redirects: true
```

See: http://symfony.com/doc/current/cookbook/email/dev_environment.html#viewing-from-the-web-debug-toolbar
See: http://symfony.com/doc/current/reference/configuration/web_profiler.html#full-default-configuration

## P.116 開発時にメールの宛先を強制的に自分のメールアドレス固定にする

よくある開発時のメール誤送信による事故防止。
postfixとかのsmtpサーバレベルで対応することも考えられますが、これは手軽。

`config_dev.yml`を下記の部分をコメントアウトして書き換えれば、そのアドレスにしか送られなくなる。

```yaml
#swiftmailer:
#    delivery_address: me@example.com
```

See: http://symfony.com/doc/current/cookbook/email/dev_environment.html#sending-to-a-specified-address
See: http://symfony.com/doc/current/reference/configuration/swiftmailer.html#delivery-address

## P.161 ParamConverter アノテーション

ParamConverter 自体は、リクエストパラメーターを元に、なにがしかのオブジェクトに変換する機能なのだが、組み込みの [Doctrine Converter](http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html#doctrine-converter) が便利。

例えば、

リクエストパラメーターに埋め込まれたidを元に、リポジトリから対応するエンティティを取得。
もしなければ、404を返し、あればそのままテンプレートに渡して表示。

なんていうよくある処理がアノテーション1行で書ける。こんな感じ。

**before**

```php
/**
 * @Route("/{id}")
 * @Template
 */
public function showAction($id)
{
    $repository = $this->getDoctrine()->getRepository(Product::class);
    $product = $repository->find($id);

    if (!$product) {
        throw $this->createNotFoundException();
    }

    return [
        'product' => $product,
    ];
}
```

**after**

```php
/**
 * @Route("/{id}")
 * @ParamConverter("product", class="AppBundle:Product")
 * @Template
 */
public function showAction(Product $product)
{
    return [
        'product' => $product,
    ];
}
```

See: http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html

## P.191 Commandからのメール送信など、リクエスト情報がない場合のURL生成

URL生成時のホスト名は、HTTPリクエストのHostヘッダなどから取るようになってるので、
CLIでメール送信などする場合にURLが`localhost`になっちゃう。
そういう場合は `router.request_context.host` などのパラメーターを設定すればいいらしい。

```yaml
parameters:
    router.request_context.host: example.org
    router.request_context.scheme: https
```

See: http://symfony.com/doc/current/cookbook/console/sending_emails.html#configuring-the-request-context-globally
[Android] XMLで透過のグラデーションを実現する


次のような Drawable リソースを XML で用意し、

```xml:gradation.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
    >

<gradient
    android:angle="270"
    android:startColor="#ffff0000"
    android:endColor="#00ffffff"
    />

</shape>
```

> "#ffff0000" の最初の ff、および、"#00ffffff" の最初の 00 は透過度です。

レイアウトに次のように配置すればOK。

![スクリーンショット 2015-12-28 16.58.24.png](https://qiita-image-store.s3.amazonaws.com/0/35733/f59f438d-1674-653b-a0e0-b47885e793c7.png "スクリーンショット 2015-12-28 16.58.24.png")

透過なので、次のように他の View の上に重ねることも出来ます。

![スクリーンショット 2015-12-28 17.04.47.png](https://qiita-image-store.s3.amazonaws.com/0/35733/9d9cd339-0df5-0c91-beee-94b959987edd.png "スクリーンショット 2015-12-28 17.04.47.png")

## 消えていくようなグラデーション

上記を応用すると、次のように消えていくようなグラデーションをかけることが出来ます。

![スクリーンショット 2015-12-29 0.07.28.png](https://qiita-image-store.s3.amazonaws.com/0/35733/7d06ef74-1313-fd15-bdcb-ced6a9ebc05a.png "スクリーンショット 2015-12-29 0.07.28.png")

```xml:gradation.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >

    <gradient
        android:angle="90"
        android:startColor="#ffffffff"
        android:centerColor="#aaffffff"
        android:endColor="#00ffffff"
        />

</shape>
```

```xml:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="io.github.hkusu.sampleapp.MainActivity"
    >

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/ic_android_black_18dp"
            />

        <View
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@drawable/gradation"
            />

    </FrameLayout>

</RelativeLayout>
```
React TutorialをTypeScriptで書いてみる

TypeScriptとReactの勉強がしたかったので、
[React Tutorial](https://facebook.github.io/react/docs/tutorial-ja-JP.html) を TypeScript で書いてみました。

- ajaxのところを試したかったのでサーバからのデータの取得のところまで
    - ajaxを扱うライブラリはjQueryではなくsuperagentを使用
- Markdown化は省略
- タスクランナーはgulp

githubにソースを置きました。
https://github.com/hushin/react-tutorial-typescript


### 作業コマンドメモ

```bash
npm init
gibo Node >> .gitignore
npm install react --save
dtsm init
dtsm install react react-dom superagent --save
tsc --init
# edit tsconfig.json
# add tslint.json

npm install gulp gulp-shell typescript tslint gulp-tslint gulp-tsconfig-update run-sequence coffee-script --save-dev

# edit gulpfile.coffee
```

### 開発環境

Atom に [atom-typescript](https://atom.io/packages/atom-typescript) をインストールしています。

## 感想

型が付いているのでやっぱり安心感あっていいですね。
1年前くらいTypeScript試した時は開発環境がまだあまり揃ってなくて微妙だなーと思っていたんですが、Atom なら設定も楽でいい感じです。

### よくわかっていない

- フォルダ構造：下記のように置いていますがTypeScriptの流儀にあってるのかよくわからないです。あまり気にしなくていいかもしれませんが。。
    - src: .ts, .tsx
    - lib: TypeScriptからコンパイルしたJavaScript
    - public: browserify でライブラリも結合したJavaScript
- TypeScriptのバージョンアップが頻繁にあるので半年前の書き方と変わっている
    - サンプルコードには `/// <reference path='../../hoge'/>` とあるが今ならtsconfigを書けば不要になるっぽい
    - 最新の仕様でイケているモジュールの扱いがよくわからない
- tsconfig.jsonのfilesプロパティの更新をgulpでやるべきか？
    - Atomでもやってくれるのでいらないかも？

### うまく行ってない点

Atom上でTSXのpropやstateの行で下記エラーになる

- `Property 'key' is missing in type`
- `Property 'ref' is missing in type` 

![CommentBox_tsx.png](https://qiita-image-store.s3.amazonaws.com/0/3464/6895a59c-0bff-3f36-71b9-335bcd77e29c.png)

gulpからのコンパイルだとうまくいくので様子見。

下記のissueと状況が似ているので待っていたら直るかも？？
[tsx file compile fails on optional properties · Issue #6029 · Microsoft/TypeScript](https://github.com/Microsoft/TypeScript/issues/6029)

### あとでやりたい

- unit test
- source map
- watchify

### 参考にしたページ

- [React and Redux with TypeScript — Jack Hsu](http://jaysoo.ca/2015/09/26/typed-react-and-redux/)
- [UWP アプリ開発に TypeScript + React を導入することの検討 (Node.MSBuild.Npm の紹介) - ひだまりソケットは壊れない](http://vividcode.hatenablog.com/entry/uwp-app/typescript-react-introduction)
- [TypeScript で React - present](http://tnakamura.hatenablog.com/entry/2015/12/21/084708)
- [TypeScript でも React Meets Redux - present](http://tnakamura.hatenablog.com/entry/2015/12/22/084941)
- [Windowsに頼らずに、お金をかけずにTypeScriptを始めてみる | f-labo blog](http://flabo.io/code/20150430/01-start-typescript-independently-of-windows/)
- [TypeScript の開発環境構築と周辺ツールの紹介 | HTML5Experts.jp](https://html5experts.jp/vvakame/17004/)
- [Working with React and TypeScript](http://blog.wolksoftware.com/working-with-react-and-typescript)
- [JSX と TypeScript の混合 Flux または悪魔合体 ::ハブろぐ](https://havelog.ayumusato.com/develop/javascript/e665-ts_jsx_flux.html)
- [Hello World with TypeScript and JSX - Developing on Staxmanade](http://staxmanade.com/2015/08/playing-with-typescript-and-jsx/)
underscoreコードリーディング（initial）

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


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


##initialとは



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

こんな説明。
>####_.initial(array, [n]) 
>Returns everything but the last entry of the array. 
>Especially useful on the arguments object. 
>Pass n to exclude the last n elements from the result.



```javascript

_.initial([5, 4, 3, 2, 1]);
=> [5, 4, 3, 2]

```

------------- 
配列に最後に入れられた値以外のすべてを返す。
argumentsのobjectに対して特に有用です。
nを渡すことによってうしろからn番目の要素までをreturnする要素から除外することができます。


###[underscore.initial](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L462)

コード的にはこのあたり。


```javascript
  // Returns everything but the last entry of the array. Especially useful on
  // the arguments object. Passing **n** will return all the values in
  // the array, excluding the last N.
  _.initial = function(array, n, guard) {
    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
  };

```

(Array.prototype.slice)[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/slice]を用いて、引数のarrayに対して、0番目から1 or n番目までの値をsliceして返す。
Ruby | rbenv でインストールできる全バージョンをリスト表示する

# コマンド

`$ rbenv install --list`

# 結果

こんな感じ。

```
Available versions:
  1.8.6-p383
  1.8.6-p420
  1.8.7-p249
  1.8.7-p302
  1.8.7-p334
  1.8.7-p352
  1.8.7-p357
  1.8.7-p358
  1.8.7-p370
  1.8.7-p371
  1.8.7-p374
  1.8.7-p375
  1.9.1-p378
  1.9.1-p430
  1.9.2-p0
  1.9.2-p180
  1.9.2-p290
  1.9.2-p318
  1.9.2-p320
  1.9.2-p326
  1.9.2-p330
  1.9.3-dev
  1.9.3-preview1
  1.9.3-rc1
  1.9.3-p0
  1.9.3-p125
  1.9.3-p194
  1.9.3-p286
  1.9.3-p327
  1.9.3-p362
  1.9.3-p374
  1.9.3-p385
  1.9.3-p392
  1.9.3-p429
  1.9.3-p448
  1.9.3-p484
  1.9.3-p545
  1.9.3-p547
  1.9.3-p550
  1.9.3-p551
  2.0.0-dev
  2.0.0-preview1
  2.0.0-preview2
  2.0.0-rc1
  2.0.0-rc2
  2.0.0-p0
  2.0.0-p195
  2.0.0-p247
  2.0.0-p353
  2.0.0-p451
  2.0.0-p481
  2.0.0-p576
  2.0.0-p594
  2.0.0-p598
  2.0.0-p643
  2.0.0-p645
  2.0.0-p647
  2.1.0-dev
  2.1.0-preview1
  2.1.0-preview2
  2.1.0-rc1
  2.1.0
  2.1.1
  2.1.2
  2.1.3
  2.1.4
  2.1.5
  2.1.6
  2.1.7
  2.2.0-dev
  2.2.0-preview1
  2.2.0-preview2
  2.2.0-rc1
  2.2.0
  2.2.1
  2.2.2
  2.2.3
  2.3.0-dev
  jruby-1.5.6
  jruby-1.6.3
  jruby-1.6.4
  jruby-1.6.5
  jruby-1.6.5.1
  jruby-1.6.6
  jruby-1.6.7
  jruby-1.6.7.2
  jruby-1.6.8
  jruby-1.7.0-preview1
  jruby-1.7.0-preview2
  jruby-1.7.0-rc1
  jruby-1.7.0-rc2
  jruby-1.7.0
  jruby-1.7.1
  jruby-1.7.2
  jruby-1.7.3
  jruby-1.7.4
  jruby-1.7.5
  jruby-1.7.6
  jruby-1.7.7
  jruby-1.7.8
  jruby-1.7.9
  jruby-1.7.10
  jruby-1.7.11
  jruby-1.7.12
  jruby-1.7.13
  jruby-1.7.14
  jruby-1.7.15
  jruby-1.7.16
  jruby-1.7.16.1
  jruby-1.7.16.2
  jruby-1.7.17
  jruby-1.7.18
  jruby-1.7.19
  jruby-1.7.20
  jruby-1.7.20.1
  jruby-1.7.21
  jruby-9.0.0.0-dev
  jruby-9.0.0.0+graal-dev
  jruby-9.0.0.0.pre1
  jruby-9.0.0.0.pre2
  jruby-9.0.0.0.rc1
  jruby-9.0.0.0.rc2
  jruby-9.0.0.0
  maglev-1.0.0
  maglev-1.1.0-dev
  maglev-2.0.0-dev
  mruby-dev
  mruby-1.0.0
  mruby-1.1.0
  rbx-1.2.4
  rbx-2.0.0-dev
  rbx-2.0.0-rc1
  rbx-2.0.0
  rbx-2.1.0
  rbx-2.1.1
  rbx-2.2.0
  rbx-2.2.1
  rbx-2.2.2
  rbx-2.2.3
  rbx-2.2.4
  rbx-2.2.5
  rbx-2.2.6
  rbx-2.2.7
  rbx-2.2.9
  rbx-2.2.10
  rbx-2.3.0
  rbx-2.4.0
  rbx-2.4.1
  rbx-2.5.0
  rbx-2.5.1
  rbx-2.5.2
  rbx-2.5.3
  rbx-2.5.4
  rbx-2.5.5
  rbx-2.5.6
  rbx-2.5.7
  rbx-2.5.8
  ree-1.8.7-2011.03
  ree-1.8.7-2011.12
  ree-1.8.7-2012.01
  ree-1.8.7-2012.02
  topaz-dev
```



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
JAVA Listに格納された最後の値を取り出す

![スクリーンショット 2015-12-28 16.41.43.png](https://qiita-image-store.s3.amazonaws.com/0/95187/0ab870d8-a520-5f63-3c8e-63d2e1594e91.png)

▪️GetTheLastStoredValue.java

```java
import java.util.*;

public class GetTheLastStoredValue {
	public static void main(String[] args) {
		List<Integer> numbers = new ArrayList<Integer>();
		numbers.add(5);
		numbers.add(100);
		numbers.add(9);
		numbers.add(4);
		numbers.add(50);

		// acquire the last value stored away by a list
		System.out.println(numbers.get(numbers.size() - 1));
		// acquire the value of the last but one(最後から2番目の値を取得する)
		System.out.println(numbers.get(numbers.size() - 2));
		System.out.println(numbers.get(numbers.size() - 3));
	}

}
```

▪️実行結果
50
4
9
R で関数のデフォルト引数を変更する #rstatsj

R で、例えば `read.table()` は文字カラムを読み込むときに自動的にファクターに変換するという余計なことをしてくれます。

```r:R
df <- read.table(text="hoge fuga")
df[,1]
```

```:結果
[1] hoge
Levels: hoge
```

ファクターに変換したくないときは、`stringsAsFactors = FALSE` と引数を指定して実行します。

```r:R
df <- read.table(text="hoge fuga", stringsAsFactors=FALSE)
df[,1]
```

```:結果
[1] "hoge"
```

いちいち引数を指定するのががうざい人は、`options(stringsAsFactors = FALSE)` と一度実行しておくと、`read.table()` の `stringsAsFactors` 引数のデフォルト値を変更することができます。

しかし、こうやって引数のデフォルト値を変更する方法は、`read.table()` の `stringsAsFactors` 引数にしか使えません。
ここではもっと広い範囲で、任意の関数のデフォルト引数を変更する方法を紹介します。

## `formals()`

といっても、やり方は簡単で、`formals()` 関数を使うとできます。
`formals()` は関数の引数を取得する関数です。

```r:R
formals(read.table)
```

```:結果
$file


$header
[1] FALSE

$sep
[1] ""

$quote
[1] "\"'"

$dec
[1] "."

$numerals
c("allow.loss", "warn.loss", "no.loss")

... (長いので省略) ...
```

関数の引数とデフォルト値のリスト[^1]が返ってきます。
[^1]: 正確にはペアリスト(`pairlist`)
この中から、`stringsAsFactors` だけを抽出してみます。

```r:R
formals(read.table)$stringsAsFactors
```

```:結果
default.stringsAsFactors()
```

この `default.stringsAsFactors()` 関数は、`getOption("stringsAsFactors")` の値を返すだけの関数なので、`options()` で指定することによってこの値を変更することができるというのがわかります。 

この `formals()`、実は左辺に置いて代入することで値を変更できます。
やってみましょう。

```r:R
formals(read.table)$stringsAsFactors <- FALSE
formals(read.table)$stringsAsFactors
```

```:結果
[1] FALSE
```

変更できました。
それでは、最初のコードを実行してみましょう。

```r:R
df <- read.table(text="hoge fuga")
df[,1]
```

```:結果
[1] "hoge"
```

`stringsAsFactors = FALSE` と指定しなくても、指定した場合の動作をするようになりました。

## まとめ

くどいようですが、この方法はどんな関数でも適用できます。
例えば、正規乱数を発生させる `rnorm()` のデフォルト平均値は 0 ですが、これを 100 に変えてみます。

```r:R
formals(rnorm)$mean <- 100
rnorm(1)
```

```:結果
[1] 100.3143
```

こんな感じで便利なので使ってみてはどうでしょうか？

Enjoy!

## 参考

- [R言語メタプログラミングの基礎](http://d.hatena.ne.jp/m-hiyama/20150714/1436837476)
正規表現：正規表現修飾子編

[正規表現：基礎編](http://qiita.com/akatsuki174/items/81549c3d2d824b986cc8)にて正規表現の基礎になる部分を書いたので今回は正規表現修飾子について書いてみようと思います。

使用しているrubyのバージョンは2.2.3です。

# 正規表現修飾子

正規表現修飾子は正規表現パターンの後ろに付与して使用することができます。

例：/パターン/x

| 修飾子 | 意味 |
|:----------|:-----------|
| i | 大文字と小文字を無視する |
| m | 複数行の文字列に対してマッチを試みる。改行は通常の文字として扱われ、.は改行にマッチする。 |
| x | 正規表現内に空白とコメントを挿入して見やすくできる。 |
| o | 正規表現リテラルが初めて評価されるときに限り、1度だけ#{}内の式展開を実行する。 |
| u, e, s, n | それぞれ、正規表現をUnicode(UTF-8), EUC, SJIS, ASCII(none)として解釈する。これらの修飾子が指定されていない場合、正規表現はソースエンコーディングを使っているものとみなされる。 |

1つずつ具体例を挙げつつ見ていきます。

## i

大文字小文字の区別が無視されていることがわかります。

```rb
puts /Ruby/ =~ "Ruby" # => 0
puts /Ruby/ =~ "ruby" # => nil
puts /Ruby/ =~ "RUBY" # => nil

puts /Ruby/i =~ "Ruby" # => 0
puts /Ruby/i =~ "ruby" # => 0
puts /Ruby/i =~ "RUBY" # => 0
```

## m

デフォルトだと「.」は改行を除く任意の1文字にマッチしますが、mの正規表現修飾子をつけた状態だと改行にもマッチします。

```rb
puts /Ruby.+と.+Python.+/ =~ "Ruby\nと\nPython!" # => nil
puts /Ruby.+と.+Python.+/m =~ "Ruby\nと\nPython!" # => 0
```

## x

```rb
puts /Ruby#コメント/x =~ "Ruby" # => 0
puts /R u b y/x =~ "Ruby" # => 0
puts /Ru
by/x =~ "Ruby" # => 0
```

見やすいように適宜改行を入れて正規表現を記述する、という場合に便利です。
以下の欄やSublime Text上で色の付き方がおかしくなりますが、ちゃんと改行なしパターンと同様の動作結果になります。

```rb
puts /(ruby|Ruby|RUBY) # 大文字小文字どちらでも
と
(python|Python|PYTHON) # 大文字小文字どちらでも
/x =~ "Rubyとpython"
# => 0
```

ではx修飾子をつけた状態で空白を無視して欲しくない時はどうすればいいでしょうか。
その場合は「\」を使ってエスケープしてください。
また、コメントアウトの「#」についても「#」という文字として認識させたい場合は「\」でエスケープしてください。

```rb
puts /(We|You)\ are\ (engineers|students)/x =~ "We are engineers" # => 0
```

余談ですがこれはいけるのですが

```rb
puts /(We|You)\ are\ (engineers|students)  /x =~ "We are engineers" # => 0
```

これらはダメでした。

```rb
puts /  (We|You)\ are\ (engineers|students)  /x =~ "We are engineers"
# => 1回目の「\ 」で syntax error, unexpected $undefined, expecting end-of-input

puts /  (We|You)are(engineers|students)  /x =~ "Weareengineears"
# => 2回目の「(」でsyntax error, unexpected tIDENTIFIER, expecting end-of-input
```

最初の「\」の直後に空白や改行を入れるとうまくいかないみたい？

## o

正直あまり使いどころがわかっていないですが、正規表現の評価がされた時1度だけ式展開がされ、以降は同じ正規表現オブジェクトを返す、というものです。

```rb
# oオプションをつけなかった場合
array = ["Ruby", "Python", "Java"]
array.each do |lang|
    if /#{lang}/ =~ lang
        puts lang
    end
end
# => Ruby
# => Python
# => Java

# oオプションをつけた場合
array = ["Ruby", "Python", "Java"]
array.each do |lang|
    if /#{lang}/o =~ lang
        puts lang
    end
end
# => Ruby
```

通常であれば毎回式展開が行われるので上の例ではRuby, Python, Java全てがif文でtrueになり出力されますが、oオプションを使うと同じ正規表現オブジェクトが返されるので、/Ruby/という正規表現で固定になり、Python, Javaは出力されないようです。
速度改善という意味では使えるのかも。

## 複数指定

正規表現修飾子は1個だけでなく複数指定することも可能です。
記述の順番は何でも構いません。

```rb
puts /楽しい ruby/ix =~ "楽しいRuby" # => 0
```
[Android] debug ビルド時のソースを分ける ＆ debug ビルドあれこれ


## resources 類の場合

通常は `src/main` にファイルが置かれていると思いますが、debug ビルド用のファイルは `src/debug` ディレクトリを作成して配置します。

![スクリーンショット_2015-12-28_16_03_03.png](https://qiita-image-store.s3.amazonaws.com/0/35733/e1b5958a-ce3c-2220-2f39-9f95a7e7f7f9.png "スクリーンショット_2015-12-28_16_03_03.png")

`main` と `debug` で同じ定義(上図でいうと`app_name`)がある場合、debug ビルド時は  `main` のソース < `debug` のソース の優先度で適用してくれます(定義が上書きされる)。`debug` のファイルでは、`main` の全ての定義を上書きする必要はありません(debug で上書きしたい定義とういうか、その行だけ書けばいい)。

`layout` や `drawable` の場合はファイル単位で debug ビルド用のものを用意します。

> debug でなく release ビルド時のソースを分ける場合も同様な考えで。

## Java のソースの場合

Java のソースの場合は、`main` のソースは `debug` とも `release` とも共存できません。もし `debug` ビルド時のみのソースを用意するなら、Java 的なエラーにならないよう `release` の方にもソースを用意(空の public メソッド等を実装)する必要があります。

# ほか debug ビルドあれこれ

## debug ビルドのみライブラリを読み込む

```groovy:build.gradle
dependencies {
    // ...

    debugCompile 'com.facebook.stetho:stetho:1.2.0'

    // ...
}
```

同様に `releaseCompile` では release ビルド時のみ読み込まれます。

## debug ビルド時のアプリケーションIDを変える

アプリケーションIDが debug/release で一緒だと、同じ端末上でアプリが共存できませんし、Fabric(Crashlytics) でアプリを debug/release で別に管理しづらかったりします。

そういう場合は、次のようにすると debug ビルド時のアプリケーションIDの末尾に `.debug` が付与されるので、release ビルドと別にすることが出来ます。

```groovy:build.gradle
android {
    // ...

    buildTypes {
        debug {
            applicationIdSuffix = ".debug"
        }
        release {
            // ...
        }
    }

// ...
}
```

## コード上で debug ビルドか否かを判定

上記で説明してきたように、ソースやビルドで分けるほどでもないよっていう時は、普通にコードで `if` 文で分岐すればよいと思います。最近？の Android Studio ベースのプロジェクトでは、ビルド時に `BuildConfig` クラスが自動で生成されるはずなので、

![スクリーンショット 2015-12-28 15.15.02.png](https://qiita-image-store.s3.amazonaws.com/0/35733/a901ae89-c098-d605-d654-26713ee95e2a.png "スクリーンショット 2015-12-28 15.15.02.png")

例えば debug ビルド時のみに処理したい場合は次のように書けます。

```java:
if (BuildConfig.DEBUG) {
    // ...
}
```

# おわりに

ちなみに debug / release ビルドは Android Studio の Build Variants タブで切り替えることが出来ます。

![スクリーンショット 2015-12-28 16.26.49.png](https://qiita-image-store.s3.amazonaws.com/0/35733/dcd124cb-1bb0-0519-61f2-777bcc6107dd.png "スクリーンショット 2015-12-28 16.26.49.png")

また上記のこと全般について、Product Flavor も同じような感じでいけると思います。
Googleマイマップ用インポートデータ作成手順

# Googleマイマップ用インポートデータ作成手順
GoogleマイマップのインポートデータをGoogleスプレッドシートを使って作成するTIPs。

## ポイント
住所＋建物・店舗名だけでは漏れるデータが出てくる。
取りこぼしを避けるために、予め住所から緯度経度を取得する（後述）


## 必要なもの（重要度順）

- 緯度・経度
- 住所
	- 建物名を入れる場合について
		- Googlemapで正しく認識できる建物名じゃないとOUT
		- 階数は削除
- 場所の名称

## スプレッドシートの準備

- マイマップ取り込み用
	- 「データ入力用」シートを値のみ貼り付けたもの
- データ入力用
	- 名称
	- 住所
	- 緯度（後述の自動取得関数を使用）
	- 経度（後述の自動取得関数を使用）

### 緯度経度の取得について

→スプレッドシートのスクリプト機能から、Google Geocoding APIで住所・ランドマーク名から緯度経度を取得するGoogleScriptを作成、
　独自関数を作成し、使用する。

スクリプトは[「【GAS】住所から緯度経度を取得する」](http://qiita.com/OUIEA/items/bcbeacd0fff53d5a4d2b)を使用させていただきました



	function getLocation(address) {
	var requestUrl = "https://maps.googleapis.com/maps/api/geocode/json?address=" + address; // Google Geocoding API
	var result = JSON.parse( UrlFetchApp.fetch(requestUrl) );
	if ( result['status'] === 'ZERO_RESULTS' ) { return 'No Result.' }
	var location = result['results'][0]['geometry']['location'];
	return [ [ location['lat'] , location['lng'] ] ];
	}


### こんな感じで使用
![スクリーンショット 2015-12-28 16.07.17.png](https://qiita-image-store.s3.amazonaws.com/0/79156/76fdc776-77a4-8b8d-f0da-3a311ef0fc31.png)

`getlocation（住所セル）`で利用する
pacman -Syuでハマった点(2015/12/28) kvm

# KVM

## virtlogd.socket

* [[SOLVED] Update broke libvirtd (1.2.21-1 -> 1.3.0) / Pacman & Package Upgrade Issues / Arch Linux Forums](https://bbs.archlinux.org/viewtopic.php?id=206206)

> ソケットの '/var/run/libvirt/virtlogd-sock' への接続に失敗しました: そのようなファイルやディレクトリはありません

* kvmの仮想マシンが起動せずはまった。

```bash:
systemctl start virtlogd.socket
systemctl enable virtlogd.socket
```

## qemuでホストのfilesystemをマウントする

* [Bug 1173224 – shared folders broken](https://bugzilla.redhat.com/show_bug.cgi?id=1173224)

> qemu-system-x86_64: -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=shared,bus=pci.0,addr=0x9: Virtio-9p Failed to initialize fs-driver with id:fsdev-fs0 and export path:/home/user1/tmp/

* /home/user1/tmp/ にqemuからアクセスができない場合このエラーになる。
* KVMは /etc/libvirt/qemu.conf で確認したところ、自分の環境では root:kvm で動作している。
* rootがアクセスできないわけがないので、kvmグループからアクセスができないのだなとわかった。

```bash:kvmグループの権限付与
chown :kvm /home/user1
chmod g+x /home/user1
```

動作した。

### モードが増えた？過去のpassthroughの動作が変更したような・・・

* 書き込みができない場合、Modeを`Passthrough`から`Mapped`に変更すれば、以前のように書き込めた。