OmniAICreator/Qiita-1.07M huggingface dataset:
２次元の回転行列が回転行列である証明

#目標
点 $(x,y)$ を反時計回りに $\theta$ だけ回転させた点を $(X,Y)$ とする。このとき

```math
\left(\begin{matrix}
X\\
Y
\end{matrix}\right)
=\left(\begin{matrix}
\cos{\theta} & -\sin{\theta}\\
\sin{\theta} & \cos{\theta}
\end{matrix}\right)
\left(\begin{matrix}
x\\
y
\end{matrix}\right)
```
となることを示す。
#証明
点 $(x,y)$を極座標表示すると

```math
\left(\begin{matrix}
x\\
y
\end{matrix}\right)
=
\left(\begin{matrix}
r\cos{\alpha}\\
r\sin{\alpha}
\end{matrix}\right)...(1)
```
となる。ここで反時計回りに $\theta$ だけ回転させた点を $(X,Y)$ とすると，

```math
\left(\begin{matrix}
X\\
Y
\end{matrix}\right)
=
\left(\begin{matrix}
r\cos{(\alpha+\theta)}\\
r\sin{(\alpha+\theta)}
\end{matrix}\right)
```
加法定理より

```math
\left(\begin{matrix}
X\\
Y
\end{matrix}\right)
=
\left(\begin{matrix}
r\cos{\alpha}\cos{\theta}-r\sin{\alpha}\sin{\theta}\\
r\sin{\alpha}\cos{\theta}+r\cos{\alpha}\sin{\theta}
\end{matrix}\right)
```
(1)より

```math
\left(\begin{matrix}
X\\
Y
\end{matrix}\right)
=
\left(\begin{matrix}
x\cos{\theta}-y\sin{\theta}\\
y\cos{\theta}+x\sin{\theta}
\end{matrix}\right)
=
\left(\begin{matrix}
\cos{\theta} & -\sin{\theta}\\
\sin{\theta} & \cos{\theta}
\end{matrix}\right)
\left(\begin{matrix}
x\\
y
\end{matrix}\right)
```
( LiveCode ) HyperCard Clone が、opensource になっていた。

びっくりしたことがあったので、とりいそぎ投稿です。

HyperCard clone が、なんと、opensource になっています。

https://en.wikipedia.org/wiki/LiveCode

日本語情報は、小島さんが精力的にあげています。
http://kenjikojima.com/livecode/RPi/05HelloFromLC.html
Cの旧関数宣言

古いソースコードではANSI C標準以前の関数宣言がある。

**旧関数宣言**
1 関数定義の引数の型が分離している
例

```c:
void foo(a, b, c)
int a;
int b;
int c;
{
  /* 処理 */
}
```

2 関数宣言の引数は書かない(書かなくても良い?)
例

```c:
void foo();
```

何が便利(?)かというとこのような使い方

``` c:
#define FLOAT_TYPE

/* old declaration */
#if defined (FLOAT_TYPE)
float
#else
int
#endif
add();

/* old definition */
#if defined (FLOAT_TYPE)
float
#else
int
#endif
add(a, b)
#if defined (FLOAT_TYPE)
     float a;
     float b;
#else
     int a;
     int b;
#endif
{
  return a + b;
}
```

とこのようにすると、一つの関数で型を使い分けできます。


なぜ紹介したかというと、この形式を推奨するのではなく
昔の記述の読み方がわからない人向けに書きました。

私も始めて見た時何が書いてあるか分かりませんでした・・・

参考
[C 関数定義 / MSDN](https://msdn.microsoft.com/ja-jp/library/bz4heb45.aspx)
[関数の宣言と定義の廃止された形式 / MSDN](https://msdn.microsoft.com/ja-jp/library/efx873ys.aspx)
ChefのRole機能、Enviroment機能の使用方法


# Roleとは
Chefにおけるロールとは、同じ役割のサーバをまとめて管理するための仕組みである。
例えばWebサーバーが５台あった場合、同じ設定をサーバごとに用意しては手間が増えるしミスの可能性も高くなるが、
webというロールを用意して、webロールに対してランリストなどを記述することにより、個別のサーバーへの設定はロールを適用するだけで済むようになる。

# Roleの設定方法
## Roleの記述
リボジトリの下にあるrolesディレクトリ配下に任意のロール名でjsonファイルを作成する。
Webサーバ用のロールの記述例

```json:roles/web.json
{
  "name": "web",
  "chef_type": "role",
  "json_class": "Chef::Role",
  "default_attributes": {
    "apache": {
      "listen_ports": [
        "80",
        "443",
      ]
  },
  "override_attributes": {
    "apache": {
      "max_children": "50"
    }
  },
  "run_list": [
    "recipe[git]",
    "recipe[apache2]"
  ]
}
```

name - 任意のロール名
chef_type - 固定でrole
json_class - 固定でChef::Role
default_attributes - 適用先ノードに定義されていない場合に使用されるAttribute。
override_attributes - 同じAttributeが定義されていても、優先して使用されるAttribute。
run_list: 適用するクックブック

## Roleの適用
ノードオブジェクトに以下のように記述するとwebロールが適用される。

```json:nodes/web01.json
{
  "run_list":[
    "role[web]"
  ]
}
```

# Environmentとは
Roleが役割に応じた状態を定義するものに対して、Environmentでは開発環境や本番環境といった環境ごとにAttributeを設定したい場合に使用する機能。

# Environmentの設定方法
## Environmentの記述
リボジトリの下にあるenvironmentsディレクトリ配下に任意の環境名でjsonファイルを作成する。
開発環境用の記述例

```json:environments/development.json
{
  "name": "development",
  "description": "Development environment for xxx service",
  "chef_type": "environment",
  "json_class": "Chef::Environment",
  "default_attributes": {
    "apache": {
      "max_children": "10"
  },
  "override_attributes": {
    "apache": {
      "max_children": "50"
    }
  },
}
```

## Environmentの適用
ノードオブジェクトに以下のように記述するとdevelopmentの設定が適用される。

```json:nodes/web01.json
{
  "environment": "develoment",
  "run_list":[
    "role[web]"
  ]
}
```
rails アプリ 新規ページ 作成 手順

1、新規ページ作成
app-view-indexのある層。

 `vi 新規ファイル名　拡張子（html.indexと同じ）`

2,コントローラー変更
app-controller-ファイル名controllerのある層
そこで、`vi ファイル名controller`


  def 新規ファイル名
  end
を二行追加

・def~endまでが1ページ分

3,ページURL追加
config
 `vi routes.rb`

  `get 'syukatsusalon/新規ファイル名'`
   

4、確認
サーバー立ち上げて
localhost:3000/syukatsusalon/top
Non-local means

m43は高感度が弱いと言われているのでNon-local means（NLM）で雑音除去してみた。

NLMの詳細は
http://opencv.jp/opencv2-x-samples/non-local-means-filter

オリンパスのE-M1で撮影したメジロの写真をNLMで雑音除去した結果。パッチは7x7、探索窓は21x21。

![fig.png](https://qiita-image-store.s3.amazonaws.com/0/114365/94729fff-c137-94f4-f3c8-4015d6de8149.png)

ソースコードは
https://github.com/kibo35/restoration/blob/master/NLM/nlm.py
Rails4.2.3からRails5.0.0.beta3にバージョンアップしたらdeviseでエラー


Rails4.2.3からRails5.0.0.beta3にしたら、deviseで引っかかった。

```bash
/Users/user/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/devise-3.5.6/lib/devise/failure_app.rb:9:in `<class:FailureApp>': uninitialized constant ActionController::RackDelegation (NameError)
```


# Gemfile
deviseをgithubからもってきてあげるとうまくいった。

```Gemfile
gem 'rails', '5.0.0.beta3'
gem 'devise', git: 'git@github.com:plataformatec/devise.git'
```

これでもだめなら、

```bash
$ bundle update
```

とやってみると通るかも。
Bash 拡張の extglob ファイルパターンマッチについてのメモ

`extglob` によって、ファイルパターンマッチにおいて、正規表現におけるグループ化のようなことができる。厳密な詳細は、[公式マニュアル参照](http://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)

```shell-session
$ shopt -s extglob

$ ls
abra  abracadabra  avada  cadabra  kedavra

$ echo ?(a@(br|vad)a)?(@(ke|ca)da[bv]ra)
abra abracadabra avada cadabra kedavra
```

---


このオプションは、 bash のパーサーに影響を与えるらしく、このオプションが off の時には、次のコマンドは文法エラーになる。

```shell-session
$ shopt -s extglob; echo ?(a@(br|vad)a)?(@(ke|ca)da[bv]ra)
-bash: syntax error near unexpected token `('
```
【Kotlin】AndroidでHello World

Android界隈でKotlinが騒がれているので試しにHello worldくらいやってみようと思います。

まずは普通に新規プロジェクトを立ち上げます。
プロジェクト名は「MyFirstKotlin」としてます。

続けて、Kotlinのプラグインをインストールします。
メニュー左上のAndroidStudio->Preferenceをタップ。

<img width="924" alt="スクリーンショット 2016-03-05 16.31.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/112916/c5562b08-709f-f65a-061f-1c31ea83846b.png">

次に、開いたWindowのPluginsを選択し下部にあるInstall Jetbreain Pluginsを選択して下さい。
<img width="1039" alt="スクリーンショット 2016-03-05 16.32.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/112916/db8eeb66-e561-9b38-b4f1-128c9b39bf4f.png">
※ここで注意点は次のWindowが裏に隠れて表示されないケースがあること！　Mac15chだとなるのかも？

Kotlinで検索してInstallして下さい。
<img width="826" alt="スクリーンショット 2016-03-05 16.32.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/112916/9b89af5f-2f93-5207-5221-b6fe2df62bc8.png">

新規プロジェクトはJavaなのでKotlinにコンバートしてあげます。
MainActivity.javaを開いた状態でメニューのCode->Convert Java File to Kotlin Fileを選択して下さい。
<img width="890" alt="スクリーンショット 2016-03-05 18.17.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/112916/c95a552d-bd94-7878-f66e-eb09f60d00b3.png">

確認ダイアログが出るのでOKをタップ！
<img width="1439" alt="スクリーンショット 2016-03-05 17.11.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/112916/344a3fb5-cbc6-bac5-6836-6303e309b960.png">

これでMainActivity.javaからMainActivity.ktにファイル名も変更となりソースコードもKotlinにコンバートされました。

あとはGradleにKotlinを使う事を認識させるためにメニューのTools->Kotlin->Configure Kotlin in Projectを選んで実行して下さい。
<img width="1435" alt="スクリーンショット 2016-03-05 18.00.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/112916/62e7041c-ec76-cd9f-f6ee-ac8a1de2cb6c.png">

無事エラーも無くプロジェクトをビルドして端末で確認しました。
![Screenshot_2016-03-05-18-04-00.png](https://qiita-image-store.s3.amazonaws.com/0/112916/5b064d75-1d3a-dcfe-1022-f06a41db64a0.png)


後はKotlinの文法になれるのみ！！
皆さんもTry Kotlin!!
SAStrutsのプロジェクトをHerokuにデプロイする

SAStrutsのプロジェクトをHerokuにデプロイする上でいくつか嵌った点を。
参考：[Heroku/Cedar上でSAStruts+S2JDBCを動かす](http://febc-yamamoto.hatenablog.com/entry/2012/02/08/201221)
基本的には上記URLを参考にしながら進めました。

- データベース設定変更
<br>MySQL(ClearDB)を利用する場合

```java
import java.net.URI;
import java.net.URISyntaxException;
public class HerokuEnvironmentHelper {

    private static HerokuEnvironmentHelper instance;

	public static HerokuEnvironmentHelper getInstance()
			throws URISyntaxException {
		if (instance == null) {
			instance = new HerokuEnvironmentHelper();
		}
		return instance;
	}

	private URI DB_URI;
	private static final String DB_URI_ENV_NAME = "CLEARDB_DATABASE_URL";

	private HerokuEnvironmentHelper() throws URISyntaxException {
		DB_URI = new URI(System.getenv(DB_URI_ENV_NAME));
	}

	public String getUrl() {
		return "jdbc:mysql://" + DB_URI.getHost() + DB_URI.getPath();
	}

	public String getUsername() {
		return DB_URI.getUserInfo().split(":")[0];
	}

	public String getPassword() {
		return DB_URI.getUserInfo().split(":")[1];
	}

}
```
これが曲者でした。

```java
private static final String DB_URI_ENV_NAME = "CLEARDB_DATABASE_URL";
```
最初は例の通り<b>DATABASE_URL</b>にしていましたが、デプロイしてもタイムアウトでエラーを吐くのでデバッグしてみたら、デフォルトのpostgresに接続しようとしていましたｗ

- 依存jar
pom.xmlにjettyの追加の他にmysqlの依存も追加します。

```
<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.6</version>
		</dependency>
```
私の環境では5.1.7を使っていますが、Mavenにないのでpush rejectされますｗ
仕方ないので5.1.6を使います。

- web.xml
<br>web.xmlからrequestDumpFilter関係の2項目をコメントアウトします。

```
<!--
    <filter>
        <filter-name>requestDumpFilter</filter-name>
        <filter-class>org.seasar.extension.filter.RequestDumpFilter</filter-class>
    </filter>
	-->
<!--
    <filter-mapping>
        <filter-name>requestDumpFilter</filter-name>
        <url-pattern>*.do</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>
    -->
```
- Herokuへのアップロード

```
git init
git add .
git commit -m 'init'
git push heroku master
#プロセスが起動しているか確認
heroku ps
#起動していない場合
heroku ps:scale web=1
#ログの確認
heroku logs
```

- DBのリストア

```
heroku config --app <<アプリ名>>
#カレントディレクトリの位置を確認してからリストア
mysql --user=ユーザ名 --password=パスワード --host=サーバ名 データベース < dump.sql
```
Bash 拡張の globstar ファイルパターンマッチ(`**`によるマッチ)のメモ

要約: bash でも、ruby/python の glob (`**`)的なことができるよ！

```shell-session
$ tree
.
|-- a.txt
|-- b.log
`-- dir
    |-- c.txt
    |-- d.log
    `-- subdir
        `-- e.txt

2 directories, 5 files

# 普通の * は、ディレクトリの中までは展開しない
$ echo *
a.txt b.log dir

# 普通は、 ** を使っても意味がない
$ echo **
a.txt b.log dir

# ** を可能にする、 bash 拡張を on にするコマンド
# bash 4 以降で導入された模様。
$ shopt -s globstar

# 「0個以上のファイル・(サブ)ディレクトリ名」にマッチする
$ echo **
a.txt b.log dir dir/c.txt dir/d.log dir/subdir dir/subdir/e.txt

# 末尾に / がつくと、**/ 全体で「0個以上のディレクトリ名」にマッチする
$ echo **/
dir/ dir/subdir/

# 0 個以上、の意味
$ echo **/*.txt
a.txt dir/c.txt dir/subdir/e.txt

# ファイル名に完全マッチし得ない文脈で使うと、ただの * と同じような挙動っぽい
$ echo **.txt
a.txt
```
Javascript から Bootstrap Modal を操作する

# 概要

Javascript で警告や確認を表示するときによく使う [Bootstrap Modal](http://getbootstrap.com/javascript/#modals)
公式マニュアルを見れば分かる通り、[bootstrap.js](https://github.com/twbs/bootstrap) を読みこめば、あとは htmlの記述だけでモーダルの開閉ができる
が、SPAなどではモーダルの開閉を Javascript 側で操作したいことが稀によくある
なので、その手順を備忘録的に残しておく

# 前置き

今回のサンプルは以下の環境で作成しているため、他の環境で使う場合は適当に書き換えてください

* Typescript
* KnockoutJS

# html の作成

ここは特別なことはなく、公式マニュアルを参考にモーダルを作成する
ただし、モーダルの開閉を行うところは Javascript の関数を呼ぶようにしておく

```html
<div class="container">
  <button type="button" class="btn btn-primary" data-bind="click: open">
    開く
  </button>
</div>

<div id="icesword" class="modal fade">
  <div class="modal-dialog modal-content">
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
        <i class="glyphicon glyphicon-remove"></i>
      </button>
      <h4 class="modal-title">
        ガラハド
      </h4>
    </div>
    <div class="modal-body">
      ねんがんの　アイスソードをてにいれたぞ！ 
    </div>
    <div class="modal-footer">
      <button class="btn btn-default" data-dismiss="modal">
        そう　かんけいないね
      </button>
      <button class="btn btn-danger" data-bind="click: close">
        殺してでも　うばいとる
      </button>
      <button class="btn btn-default" data-dismiss="modal">
        ゆずってくれ　たのむ！！
      </button>
    </div>
  </div>
</div>
```

# open 関数の作成

こちらも特に特別なことはない
bootstrap-modal の関数を呼び出せば、モーダルが表示される

```ts
public open(): void {
  $('#icesword').modal();
};
```

表示されると、以下のようになる

![2016-03-05_17h35_22.png](https://qiita-image-store.s3.amazonaws.com/0/48120/ab0ec00d-0bd4-90eb-1c30-d7452d8ec38c.png)

# close 関数の作成

問題は閉じるとき
関数は以下のようになる

```ts
public close(): void {
  console.log("な　なにをする　きさまらー！");
  $('body').removeClass('modal-open'); // 1
  $('.modal-backdrop').remove();       // 2
  $('#icesword').modal('hide');        // 3
}
```

## 解説

まず1について
これはモーダル表示時に body に自動的に付与されるクラスを削除する
このクラスがついたままだと、 **画面スクロールが効かなくなる**

2について
これはモーダルの背景（黒い部分）を削除する処理
この処理を行わないとモーダルは消えても、背景が残ったままになり、 **クリックが効かないままになる**

そして最後の3でモーダル自体を閉じている
tcpdumpでHTTPのPOSTメソッドのBodyを確認する

あるWebサーバーで送信されるHTTPのPOSTメソッドのBodyに何が設定されているか確認する必要があり、tcpdumpを使ってやってみたのでメモ

# 参考

+ [HTTPのPOSTされているデータをtcpdumpでキャプチャする](http://qiita.com/LOUIS_rui/items/cc73ade2c115ee96b22a)
+ [ネットワークエンジニアのためのパケット解析入門](http://netwiz.jp/?p=461)
+ [超絶初心者むけtcpdumpの使い方](http://qiita.com/tossh/items/4cd33693965ef231bd2a)

# 環境

+ Amazon Linux AMI 2015.09.2 

# tcpdumpを使う

ApacheのモジュールでアクセスログにPOSTのBodyを表示されるものもあるらしいですが、今回はtcpdumpを使ってパケットキャプチャをするようにします。

まずtcpdump自体のインストールをします。

```bash
sudo yum install tcpdump
```

次にtcpudumpコマンドを指定して取得したパケットだけキャプチャします

```bash
$sudo tcpdump -i eth0 -Z root -C 1 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)' -w post_data
```

+ `-i`オプションでキャプチャするネットワークインターフェースを指定
+ `-Z`オプションで実行ユーザーを指定(指定しないとtcpdumpユーザーで実行しようとしてファイル書き出しができない)
+ `-C`オプションでで結果を出力するファイルをMByte単位でファイルをローテートする
+ ``の間でキャプチャする条件を指定。Webサーバーに対するTCPの80ポートのキャプチャを行う。また、
+ `-w`オプションで結果を出力するファイルを指定

`0x504f5354`はHTTPヘッダでPOSTメソッドのリクエストを示すことらしいです（後述のおまけ参照)

では上記をWebサーバーで実行させキャプチャを行っている状態で、クライアントからPOSTデータを送ってみましょう

```bash
$curl http://52.69.124.73/ -X POST -d "age=1" -d "hoge=10"
```

データ送信後、キャプチャを停止させてみるとファイルにデータが追記されているのが確認できます。

```bash
$tcpdump -r post_data
reading from file post_data, link-type EN10MB (Ethernet)
21:57:50.412781 IP h101-111-248-034.hogefuga.60341 > ip-172-31-27-43.ap-northeast-1.compute.internal.http: Flags [P.], seq 3588214777:3588214938, ack 2341038372, win 4104, options [nop,nop,TS val 838113355 ecr 7283418], length 161
```

ただこの状態だとPOSTデータは確認できなかったのでデータの解析にはWiresharkを使います

# Wiresharkを使って確認する

クライアントPCにWiresharkをインストールします。

[WIRESHARK](https://www.wireshark.org/download.html)

Webサーバのpost_dataをscpなどでローカルのPCにコピーし、wiresharkで確認します。

![Screen Shot 2016-03-04 at 7.19.40 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/fe677cbf-7d79-a3ad-0c75-54df664a440e.png "Screen Shot 2016-03-04 at 7.19.40 AM.png")

するとHTTPのBodyの部分にcurlで指定したPOSTデータが確認できました。

# おまけ

tcpdumpのコマンド実行時の「0x504f5354」という数字は何だろうかというのが気になったのでWiresharkでHTTPヘッダを見てみるとRequestメソッドでPOSTを示すのが「0x504f5354」ということのようですね。

![Screen Shot 2016-03-05 at 5.35.01 PM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/1b912bac-c629-42ad-d8ca-9c6e9325483d.png "Screen Shot 2016-03-05 at 5.35.01 PM.png")

同じようにGETメソッドだけ、PUTメソッドだけtcpdumpをとるなどもできそうですね
異世界(Kコンピューター)に行って(sshして)ら標準入力から得た値をMPI_bcastしようとしたら停止した件

なろう系異世界俺TSUEEEEEEタイトルにいようかと思ったんですが諦めました。
やとうとした事はタイトルにあるとおりで、Rank 0が標準入力からデータ受け取って、
それを他のRankにMPI放送するだけの簡単なコードなわけですが…

```cpp
#include <iostream>
#include <mpi.h>

int main(int argc, char **argv){
  MPI::Init(argc, argv);

  const int rank = MPI::COMM_WORLD.Get_rank();
  int test = 0;
  if(rank == 0){
    std::cout << "Input test..." << std::endl;
    std::cin >> test;
  }
  MPI::COMM_WORLD.Bcast(&test, 1, MPI_INT, 0);
  std::cout << "[" << rank << "]: " << test << std::endl;
  MPI::Finalize();

  return 0;
}
```

手元のLinuxサーバーで動かした時は問題なかったのに何故かKとかHOKUSAI上でやると、
Rank 0以外がBcastで停止する。
で、std::cinからじゃなくてin-situでデータ突っ込むと真面目に動く。
はてさて何がいけないのか。。。

#解決？Mar. 7, 2016
まぁそもそも、MPIでstd::cinをする事があまりいいアイデアではないと。
openmpiとかに付属のmpirunだと、例えば
`mpirun -stdin 0 ./a.out`
とかでrank 0からstdinしろと明示的に言えるが、
富士通環境だとそうならないらしい。
この場合、
`mpirun -stdin filename ./a.out`
でfilenameの中身からstd::cinに突っ込めるようなので、これを使うべきなのであろう…。

おしまい？
[Android] Preview 画面で FloatingActionButton に関するエラーが出るとき

# Overview
`Android Studio 2.0 Beta 6` で新規プロジェクトを作成した際、
`FloatingActionButton` が含まれているレイアウトを `Preview` しようとすると以下のエラーが出る、消したい。

```lang:preview_error_message
The following classes could not be instantiated:
 - android.support.design.widget.FloatingActionButton
```

![Screen Shot 2016-03-05 at 5.26.32 PM.png](https://qiita-image-store.s3.amazonaws.com/0/40532/15133231-7881-1d98-db25-2d114f1b87ce.png)

# app build.gradle の support library のバージョンを変更したら直る
support library のバージョンを `23.1.0` とすると直る・・・。
`23.2.0` のバグらしい。
http://stackoverflow.com/questions/35675855/android-studio-floatingactionbutton-error

```gradle:diff
$ diff -u build.gradle build.gradle.updated
--- build.gradle	2016-03-05 17:25:52.000000000 +0900
+++ build.gradle.updated	2016-03-05 17:31:36.000000000 +0900
@@ -26,8 +26,8 @@
 dependencies {
     compile fileTree(dir: 'libs', include: ['*.jar'])
     testCompile 'junit:junit:4.12'
-    compile 'com.android.support:appcompat-v7:23.+'
-    compile 'com.android.support:design:23.+'
+    compile 'com.android.support:appcompat-v7:23.1.0'
+    compile 'com.android.support:design:23.1.0'
     compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
 }
 buildscript {
```

Rebuild しなおすと、エラーは消えてる。
Play 2.4で「Form: could not find implicit value for parameter messages: play.api.i18n.Messages」エラーが出る件


# 対処

## テンプレート側での対処

テンプレート側のパラメータを受け取る部分で、
`Messages`を受け取るように書き換える。

```groovy
@(form: Form[Login])(implicit messages:Messages)
```

## Controller側での対処

COntroller側では、2パターンの方法がある。

### 1. `play.api.i18n.I18nSupport`トレイトを使用する方法。

```scala
import javax.inject.Inject
import play.api.i18n.{MessageApi, I18nSupport}
import play.api.mvc.Controller

class MyController @Inject() (val messagesApi: MessageApi) extends Controller with I18nSupport {
}
```

この方法で`conf/routes`でエラーが出た場合は、
`build.sbt`に次のコードを追加する。

```scala
routes := InjectedRoutesGenerator
```

https://www.playframework.com/documentation/ja/2.4.x/ScalaRouting#Dependency-Injection



### 2. 静的なConntrollerを使用している場合(旧式)。

次の２行を追加する。

```scala
import play.api.i18n.Messages.Implicits._
import play.api.Play.current
```

```scala
import play.api.i18n.Messages.Implicits._
import play.api.Play.current
import play.api.mvc.Controller

object MyApplication extends Controler {
}
```


# 参考

- http://stackoverflow.com/questions/30799988/play-2-4-form-could-not-find-implicit-value-for-parameter-messages-play-api-i
- https://www.playframework.com/documentation/2.4.x/Migration24#Scala1
CS-Cart: Smartyでグローバルに使える変数を追加する

CS-Cartのテンプレートでどこでも使える変数を追加する方法です。

## フックを設定する

テンプレート初期化フックにかんで、Smartyプラグインを登録するコードを実装します。

```php:app/addons/$addon_id/init.php
fn_register_hooks(
    'init_templater_post'
);
```

```php:app/addons/$addon_id/func.php
function fn_{addon_id}_init_templater_post(Tygh\SmartyEngine\Core $view)
{
    $view->assign('blog_url', 'http://blog.example.com');
}
```

## 関連

[CS-Cart: Smartyプラグインを追加する方法 - Qiita](http://qiita.com/suin/items/ceeddf41ba201322107a)
fswatch でディレクトリを監視しながら、codeceptionの1つのceptをテストする

- codeceptionで受け入れテストを用意している場合、ソースや受け入れテストを修正するたびにテスト全部が実行されるのは待ち時間がもったいない。
- gruntは設定ファイルを作成する必要があるので、「ちょっと気楽に」とは難しい

fswatch なら、1linerでディレクトリを監視しながらテストコマンドを実行できます。

※ fswatch は、0.x と 1.x で書式が違っている模様。 https://emcrisostomo.github.io/fswatch/usage.html

# fswatch のインストール

```
$ brew install fswatch
$ source ~/.zshrc # ロードパスやライブラリの再読み込み
$ fswatch --version
fswatch 1.7.0
Copyright (C) 2013-2015 Enrico M. Crisostomo <enrico.m.crisostomo@gmail.com>.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Enrico M. Crisostomo.
```

# codeception で1つのceptを実行するテスト

```
$ codecept run acceptance /path/to/HogeHogeCept

(略)
```

# fswatch と組み合わせ


```
$ fswatch -o dir1 dir2 | xargs -n1 -I{}  codecept run acceptance /path/to/HogeHogeCept

```
ぴったり含む長方形


累積和。実行は遅め。合計1分＾＾；

[こっそり追記] 最近成功したことは、CROSS X BEATSでデフォルト曲の中では最難であるNEXT FRONTIER (MASTER)をクリアしたことです。

```rb:tyama_henae02.rb
#!/usr/bin/ruby
#http://qiita.com/Nabetani/items/8d7691e9bb7655c3b990
#http://nabetani.sakura.ne.jp/hena/orde02pire/
#Online: 16:35-16:53

STDOUT.sync=true
T=[*'0'..'9',*'A'..'Z',*'a'..'z']
H=62
W=62
while gets
	a=$_.chomp.split(':')
	n=a[0].to_i
	m=(H+1).times.map{[0]*(W+1)}
	a[1].split(',').each{|e|
		x,y=e.chars.map{|c|T.index(c)}
		m[y+1][x+1]=1
	}
	(H+1).times.map{|y|W.times.map{|x|m[y][x+1]+=m[y][x]}}
	H.times.map{|y|(W+1).times.map{|x|m[y+1][x]+=m[y][x]}}
	r=[]
	H.times{|y0|(y0+1).upto(H){|y1|W.times{|x0|(x0+1).upto(W){|x1|
		if m[y0][x0]-m[y1][x0]-m[y0][x1]+m[y1][x1]==n
			r<<(x1-x0)*(y1-y0)
		end
	}}}}
	z=r.minmax
	if !z[0]
		puts '-'
	else
		puts z*','
	end
end
```
1時間で in houseにChEMBL検索環境を構築する


# dumpファイルのダウンロード

[chembl_21_postgresql.tar.gz](ftp://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/latest)をダウンロードして、
vagrantの実行フォルダにおいておく。
(1.1GBあるので、結構時間かかる。)

# vagrantの立ち上げ
```
vagrant init trusty
vagrant up
vagrant ssh
```
# Ubuntuの設定

- proxy環境下は下記を実行(user,password,proxy,portは自分の環境に読み変える)
 
```bash
sudo  apt-get -o Acquire::http::proxy="http://<user>:<password>@<proxy>:<port>" update
echo 'export http_proxy=http://<proxy>:<port>' >>~/.bashrc
echo 'export https_proxy=https://<proxy>:<port>' >>~/.bashrc
echo 'export ftp_proxy=ftp://<proxy>:<port>' >>~/.bashrc
source ~/.bashrc
```
## PostgreSQLのインストール
```bash
sudo -E apt-get install -y postgresql
sudo passwd postgres
# ユーザ名 postgresのパスワードを設定する
su - postgres
psql
```

# PostgreSQLにdumpファイルを突っ込む
## psqlで入れる先のDBを作る
```psql
create database chembl_21;
\q
```
## dumpをimportする

```bash
cd /vagrant/
tar zxvf chembl_21_postgresql.tar.gz
cd chembl_21_postgresql/
psql chembl_21 < chembl_21.pgdump.sql
```


**作業時間**
- vagrantの初期化からimport開始まで7分
- importに1時間弱
- total 1時間あれば構築可能

# 参考URL
[OSXにChEMBLを入れる](http://blog.kzfmix.com/entry/1389565991)

# 検索

- 検索クエリのsqlファイルを同じフォルダに保存して下記コマンド

```bash
psql chembl_21 -f test.sql -A -F, > chembl_21_rslt.csv
```

- pychembldbを使えばもっと捗ります

[pychembldbを使うための手順](http://blog.kzfmix.com/entry/1389589262)
オフラインリアルタイムどう書くE02 の問題


オフラインでリアルタイムに「どう書く」をやるイベント( https://yhpg.doorkeeper.jp/events/39086 )を行っています。

問題は「ぴったり含む長方形」という名前で、詳細は
http://nabetani.sakura.ne.jp/hena/orde02pire/
です。

出題者の気分としては、問題を読み始めてから解けるまで1時間あればなんとかなると思ってますが、ひとそれぞれで。

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。

似たような問題をもっと解きたいという方は、
https://nabetani.hatenadiary.com/entry/yhpg_list
に過去問リンク集がありますので、そちらをご覧になると良いと思います。
Kotlinでコールバック

Eventbus等がとても便利なため、最近では使用機会が減っているのかもしれませんが、
Androidでは自作のView等からActivityやFragmentに対して何らかのコールバックをする場面が多々あります。
Kotlinのプロパティを使うとJavaで書いていたコールバック処理がとても簡潔に書けます。

## Java

```java

public class CustomView extends View {

    private CallBack callBack;

    public void setCallBack(CallBack callBack) {
        this.callBack = callBack
    } 

    private void hoge() {
        if(callBack == null) return;
    
        callBack.onClickHoge(); // call here
    }

    public interface CallBack {
        public void onClickHoge();
    }
}

public class HogeActivity extends AppCompatActivity implements CallBack {

    @Override
    public void onClickHoge() {
        ...
    }
}

```

こんな感じのコードを見たことあるかと思います。
Kotlinのプロパティと関数リテラルを用いると上記のJavaコードがこのようになります。

## Kotlin

```Kotlin

class CustomView : View {

    var onClickHoge: (() -> Unit)? = null

    private void hoge() {
        onClickHoge?.invoke() // call here
    }
}

class HogeActivity : AppCompatActivity {
    val view: CustomView by bindView(R.id.customView) // kotter knife

    fun hoge() {
        view.onClickHoge = {
            ...
        }
    }
}
```

これだけです。
とても簡潔ですね。

## 早期return

ただ、この書き方だとただのBlockになってしまうので、以下のような早期returnが出来ません。

```Kotlin
view.onClickHoge = {
    if(foo == 0) return
    
    ....
}
```

そこで、[Jump Label](https://kotlinlang.org/docs/reference/returns.html)を使います。

```Kotlin

view.onClickHoge = block@ {
    if(foo == 0) return@block

    ....
}
```

Jump Labelは個人的にGoto文のようになってしまうので、あまり使いたくは無かったのですが
このように数行のblock内での早期retunに限って使うのならば問題ないと感じました。
コーディング中に配列のサンプルデータをサクッと作る方法

現在、スクリプト言語をひとつ習得しようと、pythonを勉強中です。
プログラミング言語を学習していてよくよく必要になるのが、サンプルデータ。

今回は配列(厳密に、pythonではリスト)のデータをvim + bashでサクッと作成する方法をば。

##環境
- Fedora 23
- vim 7.4
- python 2.7.10
- bash 4.3.42

ちゃんと書きましたが、環境はそんなに問題にはならないかと思います。

##データ作成

vimでソースファイルを開く。
```
$ vim sample.py
```

下記のような状態で、リストarrayに昇順な数値列のデータを代入したい。

```
#!/usr/bin/python

array = [
]

for i in array:
    print i
```
そんなとき、vimのコマンドラインモードがさく裂します。3行目の```array = [```にカーソル持ってきて、ノーマルモードを以下を実行。
```
:r! echo {1..100}, | xargs -n 10
```
結果、以下のように数値列が挿入されます。
```
array = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
]
```
最後の要素に','がつくので、使用言語によっては削除が必要です。pythonは文法的には問題なし。あとは、インデント等適当に整形してください。(vimのノーマルモードで範囲選択して'>'が楽ちん)

コマンドラインモードのところでechoではなくseqなんかで頑張ればもう少し加工できますね。

## 追記
例えばpythonであれば、rangeなど組み込み関数使えば簡単に、簡潔に上記のデータは作成可能ですが、今回はあえて「vim+bashで汎用的に簡単に時短できるよ」、ということを示したかったので、その点ご了承くださいませぃ。
PHP:ホワイトリストやブラックリストで配列からキーを削除する

PHPの連想配列からホワイトリスト方式やブラックリスト方式でキーを削除する方法です。

## ホワイトリストで配列からキーを削除する

```php
$map = [
	'one'   => 1,
	'two'   => 2,
	'three' => 3,
	'four'  => 4,
];

$whitelist = ['one', 'two'];
$map2 = array_intersect_key($map, array_flip($whitelist));
```

出力結果

```
array(2) {
  ["one"]=>
  int(1)
  ["two"]=>
  int(2)
}
```

## ブラックリストで配列からキーを削除する

```php
$map = [
	'one'   => 1,
	'two'   => 2,
	'three' => 3,
	'four'  => 4,
];

$blacklist = ['two', 'four'];
$map2 = array_diff_key($map, array_flip($blacklist));
```

出力結果

```
array(2) {
  ["one"]=>
  int(1)
  ["three"]=>
  int(3)
}
```
.git/hooks/prepare-commit-msg in swift

休日の無駄の仕方にも良い無駄と悪い無駄があると思うんですよね。
本日お見せしますのは悪い無駄です。


```swift
#!/usr/bin/env swift

import Foundation


func argv() -> [String] {
  return NSProcessInfo.processInfo().arguments.map{String($0)}
}

func read(path: String) -> String {
  do {
    return try String(
      contentsOfFile: path,
      encoding: NSUTF8StringEncoding)
  } catch {
    print("fuckin fail")
    return "fail"
  }
}

func write(path: String, content: String) {
  do {
    try content.writeToFile(
      path,
      atomically: true,
      encoding: NSUTF8StringEncoding)
  } catch {
    print("fuckin fail")
  }
}

func extractTrailingNumber(orig: NSString) -> String {
  var ret: String = ""
  let pattern = "^.+?([0-9]+)$"
  do {
    let re = try NSRegularExpression(
      pattern: pattern,
      options: NSRegularExpressionOptions.CaseInsensitive)
    re.enumerateMatchesInString(
      orig as String, options: [],
      range: NSMakeRange(0, orig.length)) {
        (result : NSTextCheckingResult?, _, _) in
          for i in 0...result!.numberOfRanges - 1 {
              let range = result!.rangeAtIndex(i)
              ret = orig.substringWithRange(range)
          }
    }
  } catch {
    print("fuckin fail")
  }
  return ret
}

func cmd(cmd: String, args:[String]) -> String {
  let pipe:NSPipe = NSPipe()
  let task:NSTask = NSTask()
  task.launchPath = cmd;
  task.arguments = args;
  task.standardOutput = pipe
  task.launch()
  let output = pipe.fileHandleForReading.readDataToEndOfFile()
  let outputStr = NSString(data:output,encoding:NSUTF8StringEncoding)!
  return outputStr as String
}


let branch = cmd("/usr/local/bin/git", args: ["name-rev", "--name-only", "HEAD"])
let issueNum = extractTrailingNumber(branch)
let arg_strs = argv()
let path = arg_strs[arg_strs.count - 2]
let orig = read(path)
write(path, content: "(refs #\(issueNum)) \(orig)")
```
underscoreコードリーディング（isEmpty）


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



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


##isEmptyとは


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

こんな説明。
>####_.isEmpty(object) 
>Returns true if an enumerable object contains no values (no enumerable own-properties). 
>For strings and array-like objects _.isEmpty checks if the length property is 0.

```javascript
_.isEmpty([1, 2, 3]);
=> false
_.isEmpty({});
=> true
```

------------- 
objectがno value（propertyを含む）だった場合にtrueを返します。
stringやarray likeなobjectの場合、_.isEmptyはlengthが0かどうかをチェックします。

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

```javascript
  // Is a given array, string, or object empty?
  // An "empty" object has no enumerable own-properties.
  _.isEmpty = function(obj) {
    if (obj == null) return true;
    if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
    return _.keys(obj).length === 0;
  };
```

引数はobj。
objがnullの場合、trueを返す。
objがisArrayLikeがtrueかつ _.isArrayまたは_.isStringまたは_.isArgumentsに合致する場合はobj.lengthが0かどうかの真偽値を返す。
それらに該当しなかった場合、_.keys(obj)のlengthが0かどうかの真偽値を返す。
gst-launch の bash completion でパイプラインを高速に構築する

gst-launch には bash completion が標準で入ってないので

```shell-session
$ gst-launch-1.0 v4l2src [はて、あのプロパティの名前なんだったけ???]
```

ということがしばしば発生します。

`A-q`を押下し`gst-inspect`で調べるというのは、やっぱり**メンドクサイ**。

# 解決策

そんな問題を解決してくれのが、 David さんからの2012年のクリスマスプレゼント(gst-launch の bash completion)。

http://gstreamer-devel.966125.n4.nabble.com/gst-launch-tab-completion-td4657538.html

動かすとこんな感じ。

![ezgif.com-video-to-gif (1).gif](https://qiita-image-store.s3.amazonaws.com/0/97187/aafc566d-f15a-726a-2526-5c9f57f6ba39.gif)

最高に cooool です。

# 導入方法

導入方法は David さんも書いていますが、bash のサーチパス (`/etc/bash_completion.d/`など) に入れてあげればいいだけなので。。

```
$ curl https://raw.github.com/drothlis/gstreamer/bash-completion-master/tools/gstreamer-completion > /etc/bash_completion.d/gstreamer-completion
```

でOKかと！

また、Windows(msys2)上でもも、ちろん動作しますが `gst-launch-1.0.exe` に対しては(`.exe`が付いていると)反応しないため、スクリプトをちょっといじってあげる or `gst-launch-1.0` と入力するなどの対応を取ってください。

# この completion は gst-launch で遊ぶなら必須アイテムです！！
【 Git 】特定のcommitをチェックアウト

 備忘録

 githubから特定のcommitをローカルにcheckoutしてくるだけなら以下のコマンドだが

```sh
$ git checkout {sha1} 
```

毎度別コマンドで諸々確認しつつになる。毎回忘れて調べるのでメモしておく
（以下の手順でやるわけではなくあくまで発生しうる作業の羅列）
##発生する作業
- リモートレポジトリをローカルにクローン
- Current Branch を確認
- 該当リモートブランチがあるかを確認
- 該当リモートブランチをローカルにも一応そのブランチを切ってからそこにcheckout
- Current Branch を確認
- ローカルブランチにリモートブランチの特定のcommitをcheckout
- （確認作業）
- 確認作業やdotfile(ex .DS_STORE)によってローカルレポジトリに意図しない変更が追加されていないかを確認
- 上記で追加されている場合は変更をstash
- ローカルブランチにリモートブランチの特定のcommitをcheckout 
- （確認作業）
- 確認作業後、特にリモートブランチに加える変更がなければstashしていた変更を削除
- Finish upとして、ローカルリポジトリのの状態を確認
- Detached Headになっている場合は最新のリモートレポジトリをチェックアウトしなおす
- 終了


###リモートレポジトリをローカルにクローン
```sh
$ git clone {url to source repo}
```

###Current Branch を確認
```sh
$ git branch
```

###該当リモートブランチがあるかを確認
```sh
$ git branch -a
```

###該当リモートブランチをローカルにも一応そのブランチを切ってからそこにcheckout
例えば以下ような状態の場合


```sh
$ git branch -a
* master 
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/develop
```
以下のようになる

```sh
$ git checkout -b develop origin/develop
```

###ローカルブランチにリモートブランチの特定のcommitをcheckout
```sh
$ git checkout <sha1>
```
以下のようなワーニングがでるが一旦無視

```
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
```

###確認作業やdotfile(ex .DS_STORE)によってローカルレポジトリに意図しない変更が追加されていないかを確認
上記の作業後続けて別commitをチェックアウトしようとすると以下のようにエラーとなる

```
error: Your local changes to the following files would be overwritten by checkout:
	app246/.DS_Store
Please, commit your changes or stash them before you can switch branches.
Aborting
```

その場合は変更をstash(一時退避)

```sh
$ git stash
```

確認

```sh
$ git status
```
以下のようなメッセージならOK

```
nothing to commit, working directory clean
```

###確認作業後、特にリモートブランチに加える変更がなければstashしていた変更を削除
stashしている変更を確認

```sh
$ git stash list
 stash@{0}: WIP on sub: 195f25f add blah
 stash@{1}: WIP on sub: d34ee25 remove blah
```

削除していいstashは削除

```sh
$ git stash drop stash@{0} 
```

すべて削除する場合は

```sh
$ git stash clear
```

###Detached Headになっている場合は最新のリモートレポジトリをチェックアウトしなおす
git statusすると以下のようなワーニングが出てきがち

```
HEAD detached at 4ee25f6
nothing to commit, working directory clean
```

その場合は最新のリモートリポジトリをチェックアウトしなおす

```sh
$ git checkout develop
```

以上
Visual Studio Codeをインストールしてみる


## はじめに
IDEとしてEclipseを主に利用していたが、PHPの補完が...AngularJSの補完が...と色々捗らなかったため
いいものはないか調べてました。JET BRAINS社のPhpStorm、WebStormは評価が高くかなり気になるが個人で利用する分には有償が...

ということで行き着いた先がVisual Studio Codeです。
Microsoft製品はあまり好みではなかったのですが無償なら少し試してみようかなと。

Visual Studio CodeとはElectronで作成されていてIDEというよりかはエディターの位置づけ。
プラグインも充実していそうでなかなか便利そうな印象。


## ダウンロード
Visual Studio Codeを以下のURLからダウンロード
https://www.visualstudio.com/products/code-vs.aspx

マルチプラットフォームに対応しているため、Windows、Mac、Linuxそれぞれのバイナリがある。今回はWindowsをダウンロード。

## インストール
インストールはインストールウィザードに従ってインストール。
必要に応じて、インストールパス、オプションを変更。

## Visual Studio Code起動

![20160229_135347.png](https://qiita-image-store.s3.amazonaws.com/0/92510/3f016e62-511c-98ef-4cd9-671819b49cab.png)
エディタなのでシンプルな画面。



## MarketPlace
下記のURLでプラグインを確認出来そうです
https://marketplace.visualstudio.com/#VSCode

## プラグインのインストール
F1またはCtrl+Shift+Pでコマンドパレットを開き、以下のコマンドを実行します
![20160302_140602.png](https://qiita-image-store.s3.amazonaws.com/0/92510/8c90693b-9752-415f-9a50-9105235713d3.png)
```
ext install
```

しばらくすると、リストが表示されるのでインストールするプラグイン名で探してEnterでインストールできます。
![20160302_140651.png](https://qiita-image-store.s3.amazonaws.com/0/92510/251322d7-b3a6-7cdf-5156-7107abfedcbc.png)

インストール後にrestartを促さられるので、再起動すると利用できるようになります。
かなり手軽に使えますね。

インストールしているプラグインを確認する場合は```show installed```でインストールしている一覧を確認できます。

少し触ってみた感じだと手軽に使えそうではあるが、少しキーボードのショートカットを覚えるのに少し慣れが必要な感じがしました。とはいえエディタで色々な言語に対応できているのは素晴らしいかと思いますので、徐々に使いながら試していきます。
AndroidStudioでxmlをソートするプラグインを作りました


# デモ

android-xml-sorter
https://github.com/roana0229/android-xml-sorter

![demo.gif](https://raw.githubusercontent.com/roana0229/android-xml-sorter/master/demo.gif)


# プラグインについて

`エディタ上で右クリック > Refacor > Sort Xml By Name` で実行

nameの内容でソートします。
オプションとして以下のことを指定できます。

* プレフィックスが違うところでスペースを挿入（プレフィックスを区切る位置を指定）
* `<?xml version="1.0" encoding="UTF-8">`を挿入
* コメントを削除
* インデントのスペースを指定

※コメントは上にソートされます。


# インストール方法

1. Mac: `Preference > Plugins > Browse repositories`<br>Win: `File > Settings... > IDE Settings > Plugins > Browse repositories`

2. `sort xml`で検索

3. `Install Plugin`をクリック


# 備考

DroidKaigi2016でプラグイン開発について聞いたのがきっかけで作りました。
現在はスネークケースのみ対応していますが、今後のキャメルケースにも対応する予定です。
このプラグインでコードの可読性を上げたい! issue,プルリク大歓迎です!
Evernoteの全ノートに含まれる作成者を取得するAppleScriptハンドラ



* Evernoteのノートには「作成者」情報がある
	* メールからノートを作成すると、送信元アドレスが作成者になる
* あるノートから作成者を取得する方法
	* `tell application "Evernote" to get author of note 1 of notebook 1`
* ある作成者のノートだけを取得する方法
	* `tell application "Evernote" to find notes "author:作成者"`
* 下のAppleScriptは全ノートに含まれる作成者を取得してリストにするハンドラ


```AppleScript:everyAuthorInEvernote.scpt
use scripting additions
use framework "Foundation"

my everyAuthorInEvernote()

on everyAuthorInEvernote()
	return text of my everyParameterOfNotesInEvernote("author")
end everyAuthorInEvernote

on everyParameterOfNotesInEvernote(noteParameter as text)
	--require framework: Foundation
	set everyParameter to current application's NSMutableSet's |set|()
	repeat with parameterList in run script "tell application \"Evernote\" to return " & noteParameter & " of notes of notebooks"
		(everyParameter's addObjectsFromArray:parameterList)
	end repeat
	set comparator to my appropriateComparatorToSort(everyParameter's anyObject())
	set sortDescriptor to current application's NSSortDescriptor's sortDescriptorWithKey:"self" ascending:true selector:comparator
	return (everyParameter's sortedArrayUsingDescriptors:{sortDescriptor}) as list
end everyParameterOfNotesInEvernote

on appropriateComparatorToSort(anObject)
	--require framework: Foundation
	if anObject ≠ missing value and (anObject's respondsToSelector:"localizedCaseInsensitiveCompare:") then
		return "localizedCaseInsensitiveCompare:"
	else
		return "compare:"
	end if
end appropriateComparatorToSort
```


## 更新履歴

* 2016-03-02: `everyAuthorInEvernote`ハンドラ作成
計算アイテムで単位時間あたりのログ件数をグラフ化する

単位時間あたりのログ件数をグラフ化する…という用途だと、Elasticsearch/Kibanaが思いつくのですが、Zabbixでも計算アイテムを使うことで、そういうことができなくもなかったです。

# ログアイテムの設定

以下のような感じで、/var/log/messagesを監視するアイテムを作成します。

![](https://qiita-image-store.s3.amazonaws.com/0/20100/5979d17f-1ea8-c780-4cff-830419f29005.png)

最新データは以下のような感じ。

![](https://qiita-image-store.s3.amazonaws.com/0/20100/8ec95253-9492-e6a9-6c4c-305933595001.png)

# 計算アイテムの設定

ログの中から「error」にマッチする行の、30秒あたりの件数をカウントする計算アイテムを作成します。

![](https://qiita-image-store.s3.amazonaws.com/0/20100/22a499f3-3287-81bd-6111-86256b9ba86f.png)

基本的にはトリガー関数の[count](https://www.zabbix.com/documentation/2.4/manual/appendix/triggers/functions)がそのまま使えるようです。

違うのは、関数の第一引数が計算対象のアイテムのキーになるところです。（ちなみに、定義されていないアイテムのキーは使えないようでした）

`log[]`で正規表現を使っている場合は以下のような書き方になります。

```
count("log[/var/log/messages,\"[0-9]+\"]", 30, "error", "like")
```

しばらく待つと以下のようなグラフが表示されるようになります。

![](https://qiita-image-store.s3.amazonaws.com/0/20100/25557030-a41c-2a45-23aa-4b586bab1cb4.png)

# まとめ

ログデータをすべてDBに入れているので、大量のログを扱おうとすると厳しいかなぁ…とちょっと思ってます。

とはいえ、たとえばログのエラー出力を監視してて「error」という文字列が出力されるたびにアラートを出したくない、とりあえず単位時間あたりに出力件数が閾値を超えたらアラートを出すようにしたい、という向きにはよいかなと思います。
Java+JUnit+main関数での標準入出力

# 目的
main関数で標準入出力処理を行う場合の、JUnitテストケースの書き方。

# 必要ライブラリ
* JUnit
* commons.io
 * ストリームから文字列に変換するのに使用。独自実装すれば不要。

# 補足
* それぞれ以下の値を設定します。
 * 「in.txt」に標準出力からの入力値。
 * 「expected.txt」標準出力に出力される予測値
* 「in.txt」「expected.txt」は、それぞれテストクラスと同じフォルダにおいてください。

# コード

```java
package template;

import static org.junit.Assert.assertEquals;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.PrintStream;

import org.apache.commons.io.IOUtils;
import org.junit.Test;

/**
 * @author umed0025
 *
 */
public class MainTest {

	/**
	 * {@link template.Main#main(java.lang.String[])} のためのテスト・メソッド。
	 */
	@Test
	public void testMain() throws Exception {
		InputStream defaultSysin = System.in;
		PrintStream defaultSysout = System.out;

		// put "in.txt" in the same path as this class file.
		try (InputStream sysin = this.getClass().getResourceAsStream("in.txt")) {
			try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
				try (PrintStream sysout = new PrintStream(byteArrayOutputStream)) {
					System.setIn(sysin);
					System.setOut(sysout);
					// call target method.
					String[] param = new String[] {};
					Main.main(param);
					String actual = new String(byteArrayOutputStream.toByteArray());
					// put "expected.txt" in the same path as this class file.
					try (InputStream expected = this.getClass().getResourceAsStream("expected.txt")) {
						// assert stdout.
						assertEquals(IOUtils.toString(expected), actual);
					}

				}
			}
		}

		System.setIn(defaultSysin);
		System.setOut(defaultSysout);
	}
}

```
docker-machine 起動メモ

この記事は docker-machine でDocker環境を作るときに使用するコマンドラインのメモです。
この記事を見なくても`docker-machine create help` を見ればだいたい判ります。
随時更新します。

## VirtualBox
### 基本

```bash
$ docker-machine create --driver virtualbox local
```

### Disk Size 指定

```bash
$ docker-machine create --driver virtualbox --virtualbox-disk-size "40000" local
```

### CPU 数指定

```bash
$ docker-machine create --driver virtualbox --virtualbox-cpu-count "-1" local
```

## Google Compute Cloud

デフォルトでは `n1-standard-1` が起動する。

credentials は[このへん](https://console.cloud.google.com/apis/credentials/serviceaccountkey)で作成できる。

```bash
$ export GOOGLE_APPLICATION_CREDENTIALS=~/Downloads/awesome-project-1bab123214.json
$ export GCP_PROJECT="awesome-project"
$ export GCP_ZONE="asia-east1-b"
$ docker-machine create --driver google --google-zone ${GCP_ZONE} --google-project ${GCP_PROJECT} gcp
```

## Amazon Web Service

デフォルトでは `t2.micro` が起動するはず。

```bash
$ export AWS_VPC_ID=vpc-12345678
$ export AWS_REGION=ap-northeast-1
$ docker-machine create --driver amazonec2 --amazonec2-vpc-id ${AWS_VPC_ID} --amazonec2-region ${AWS_REGION} --amazonec2-access-key ${AWS_ACCESS_KEY_ID} --amazonec2-secret-key ${AWS_SECRET_KEY} aws
```

### Spot Instance

```bash
$ docker-machine --native-ssh create --driver amazonec2 --amazonec2-vpc-id ${AWS_VPC_ID} --amazonec2-region ${AWS_REGION} --amazonec2-instance-type c4.large --amazonec2-request-spot-instance --amazonec2-spot-price 0.2 aws
```
try! Swiftに3日間参加した翌日の主観的感想

Swiftオープンソース化後（たぶん）初のSwiftカンファレンス[try! Swift](http://www.tryswiftconf.com)が渋谷で3/2 - 3/4の3日間催されました。各セッションの内容は既に様々な所でまとめられていますし、後日[Realm](https://realm.io)サイトのどこかにスライド・動画等が公開されるようです。しかし、今回のカンファレンスは実際に参加して良かったと心から思える素晴らしいものでした。そこで、公開される（されている）情報とは別に、カンファレンス内の空気感などから私が感じた幾つかの事柄を、あえて主観的にまとめてみようと思います。

# 動画で見るべきセッション
どのセッションも素晴らしかったですが、以下のものは静的な情報だと実際の魅力が伝わりきらないと思うので、動画が公開されたらそちらを見て頂くのが良いかもしれません。

## オープンソースSwiftへの貢献
3日目17:00-17:25のセッション。オープンソースSwiftに貢献する場合にどう始めれば良いかという内容。特に終盤が熱くて、「Swiftオープンソース化のビッグウェーブに乗り切れてないんだよね」という人は、動画で見るとかなり後押しされるはず。

## ライブコーディング
* プロトタイピングの魔法 2日目10:30-10:55
* Protocol-Oriented Programming in Networking 2日目16:30-16:55
* ライブデザイニング 2日目17:00-17:25
* SwiftらしいTable View Controllerの使い方 2日目17:30-17:55

上記に挙げた（他にもあったかも）セッションではライブコーディング（デザイン）がありました。え、そこそう書くの？とか色々思う所があるかもしれませんが、それも含めて他のプログラマがどう考えながら書いているのかを追体験するのは楽しいですね。

# セッションから感じたこと

## Swiftの未熟さに対するスタンス
「すごいSwiftたのしく学ぼう！」とSwiftを褒めちぎるだけではなく、むしろProtocol Extensionの融通の利かなさや（逆に柔らかすぎたり）、非同期エラーハンドリングなど、「Swiftのこういう所まだ良くないよね！」という内容がセッションでも何度か出てきていた。休憩中に話していても、課題感を持っている人は多いみたい（まあそうですよね）。しかし、Swiftは今が到達点というわけではないからオープンソース化されたのであって、「まだSwift改善点はたくさんあるよね、それをSwiftコミュニティみんなで考えていこうよ」が今回のカンファレンスの大きなメッセージだったんじゃないかなと思う。

## Appleから離れたSwiftの活用
言語処理・サーバーサイドなど、Appleの枠から離れてSwiftを活用しようとする動き、どうなんだろうと思っていた。Objective-Cより素晴らしいのは間違いないけど、サーバーサイドを書くのにはもっと適した言語が既にあるのでは？と。「Swiftの未熟さに対するスタンス」の内容にも繋がるけど、「Swiftが素晴らしいからSwiftで世界を埋め尽くそうぜ！」という気持ちが全てではなく、Swiftを軸にそれぞれの領域で使われる言語がどうあるべきかを探求していく動きでもあるのかもしれないな、と感じた。

## Storyboard
登壇者（海外勢）はStoryboard使わない派が多く、聴衆（Twitter上の日本人勢）はStoryboard使いたい派が多く、その差がおもしろかった（海外でも派閥はあるらしい）。ImmutableなViewControllerにStoryboardは不向き、だとかそういう内容。個人的には完全に[Storyboard使わない派](http://qiita.com/uny/items/ba73e06718079396c9a7)で、Playgroundの活用がその鍵を握っているのではないかと考えている。StoryboardがまだSwiftに追いついていないだけでは、という話も出たけれど、GUI上で引数渡しまくる未来よりは、Playgroundを活用してHTML的にレイアウト書ける未来の方が整然としていて良いなぁ。（Storyboardでも例えば`prepareForSegue`の戻り値としてViewControllerのインスタンスを返せるようになったらFunctionalに書きやすくなるかもしれないけど）

## 情報収集源
Githubのトレンドを追ったり、ブログやQiita記事を読んだりするのが日々のSwift情報収集だったけれど、海外の方々も含めて話を聞いてみて、大幅に収集源が足りないというわけではないようで安心した（安心せずアウトプットをもっとしていかないといけないのだけど）。でも、[ポケモンネタ](http://togetter.com/li/945400)は知らなかったなぁ。

## 開発設計の観点
現時点の仕事内容的に、「如何にして誰がどう触っても間違えない・壊れない設計を組み立てるか」に個人的興味があるのだけど、今回はその観点ではっきりと言及されることはなかった。むしろ、「優秀な人が、優秀な人と開発できる環境」前提の設計が多かったのかなぁと。（少し羨ましかったけど）その観点で、例えばUIKit周りの整理された設計を守るためにどう制約を付けていくかとかは、自分の宿題にしたいところだなぁと思った。
try! Swiftに参加した


# 概要

- try! Swift 2016
 - http://www.tryswiftconf.com/
 - 2016/03/02〜2016/03/04

世界中からiOS開発者が参加して知識や技術を共有し高め合うことを目的として開催されたカンファレンス。

# 全体的な感想

すべてのセッションがひとつの部屋で行われたので、どのセッションを聞こうか迷うことなかったのがすごく助かった。

会場の様子は非常に居心地がよく、コーヒーや飲食の提供もあって贅沢な時間を過ごすことができた。

例えば、会場が寒かったり暑かったりしたときはSlackで言えば対応してくれたり、運営と参加者のコミュニケーションも効率的にできて、すごく良い環境だった。


# セッションの感想

かなり多くのセッションを聴いたのですべてに感想を記すのはちょっと難しいのと、理解しきれなかったものも多かったので後ほどビデオがすべて公開されるとのことなので、それを見ながら理解を深める時間を別途持ちたい。

という状況なので、3つだけ、ひとまず印象に残ったセッションの感想を書こうと思う。

## 実践的Boundaries

- url schemeからidを受け取ってviewDidLoadで専用のAPIからfetchして…みたいなパターンを、不変なViewControllerそのものを返すContentProviderを注入してパターンに変換しているのは、なるほどこれはすぐ使えそう、と思った。
- Coordinatorパターンの話は、木構造でアプリの機能を管理できるようになって、何か機能追加するときは専用のCoordinatorを追加して木のどこかにくっつけるだけになる、というのはその場ではまあまあ腑に落ちた。
- あとで自分で実装してみてもうちょっと考えを深めてみたい。
- What is a Coordinator? >> https://redbooth.com/engineering/javascript/the-coordinator-pattern


## デザイナーをSwiftのコードベースに巻き込む10の方法

- これは上記の実践的BoundariesとStoryBoardを積極的に使うという点において逆の意見でもあるので、それはそれでいろいろだなぁという感想
- 現状のチームでは実際にデザイナーをコードに巻き込むことができているので、すごく共感できるところがものすごく多かった
- その反面、エンジニアがデザインの現場をもう少し知る必要はあるなと思った
- たとえばSketchを導入してエンジニアのデザイン側への歩み寄りができる余地はまだまだあるな、と思った
- 自分のチームの話が役に立つのであればどこかで話してみてもいいかもと思った

## オープンソースSwiftへの貢献

- 日々仕事で使っていく、お金を稼ぐための言語なので、どこかで貢献はしたいなぁという気持ちが高まった
- まずはREADMEでもなんでもいいし、ちょっと頑張って、参入障壁の低そうで、かつSwiftで書かれているFoundationの一部やstdlibのコードを積極的に眺めてみようとおもう
- 帰ってからSwift Evolutionのリポジトリを眺めてみたけど、新しい機能を先取りできるという意味においてもここは定期巡回すると良いな、と思った

# さいごに

Swiftは2015年の中頃から徐々に勉強し始め、プロダクションにも導入し始めていたけど、こういうコミュニティに参加できたことでより自分が普段使う言語に対しての興味と理解を深めたり、そこにもっとコミットしたいという意識の高まりを感じることができた。

スピーカーのみなさんはとても興味ある素晴らしい話ばかりでかっこよかったし、運営のみなさんもこれだけ人がたくさん集まると大変なことが多かったと思いますが、快適に楽しい３日間を過ごすことができました。お疲れ様でした!!!

2017の開催も楽しみにしています!!!
WindowsへのMavenインストール方法

汎用的な手順ですので、独立した記事として投稿します。
社内プロキシも対応できている・・・はず。

# 前提条件
* Windows環境で構築します。
* プロキシサーバーは以下の通りと仮定します。（環境に応じて適宜変更してください）

```bat:http-proxy
// 認証なし
http://proxy.example.com:8080
// 認証あり
http://username:password@proxy.example.com:8080
```
```bat:https-proxy
// 認証なし
http://proxy.example.com:8080
// 認証あり
http://username:password@proxy.example.com:8080
```

* 私の会社のネットワーク環境で動作確認をしています。もしかしたら環境によっては動かない場合があります。ご了承ください。

# JDKのインストール
以下の記事にまとめました。
[WindowsへのJDKインストール方法](http://qiita.com/ko2a/items/69fa8a5366d7449500ca)

# Mavenのインストール・設定
Apache Mavenからファイルをダウンロードします。
https://maven.apache.org/download.cgi

![maven001.png](https://qiita-image-store.s3.amazonaws.com/0/49240/7ffa2516-effe-4cdc-17ee-7388f0abe50e.png)

ダウンロードしたファイルを解凍し、配置します。
（今回はC:\直下に配置します）
![maven002.png](https://qiita-image-store.s3.amazonaws.com/0/49240/4f04e66f-3e88-e585-6f24-e91a7422162d.png)


環境変数を設定します。
システム環境変数 M2_HOME にMaven展開先のパスを登録します。

```bat:M2_HOME
C:\maven-3.11
```

システム環境変数 MAVEN_OPTS を以下の内容で登録します。

```bat:MAVEN_OPTS
"-Dhttps.proxyHost=http://proxy.example.com -Dhttps.proxyPort=8080 -Dhttps.proxyUser=username -Dhttps.proxyPassword=pass -Dhttps.nonProxyHosts=localhost|127.0.0.1"
```
* MAVEN_OPTSでは **https_proxy** を設定します。
* オプションを複数指定するためにスペースを入れていますので、念のためダブルクォートでくくります。

システム環境変数 Path に以下の内容を追加します。

```bat:Path
;%M2_HOME%\bin
```
* 既にあるPathの値の最後尾に追加します。


コマンドプロンプトを起動し、 "mvn -v" で動作確認をします。
![maven003.png](https://qiita-image-store.s3.amazonaws.com/0/49240/1764cfae-221d-8cab-30e7-61750f77cbec.png)


%USERPROFILE%\\.m2 フォルダーに settings.xmlを配置します。

```xml:%USERPROFILE%\.m2\settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
  <proxies>
    <proxy>
      <id>http_proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.example.com</host>
      <port>8080</port>
      <username>username</username>
      <password>password</password>
      <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
    </proxy>
  </proxies>
</settings>
```
* こちらは **http_proxy** を設定します。
* %USERPROFILE% のパスは、通常 C:\Users\\{ログインユーザー名} となります。
* .m2 フォルダーがない場合は、コマンドプロンプトからmkdirで作成します。エクスプローラーでは先頭 "." で始まるフォルダーは作成できません。

```bat:
>cd %USERPROFILE%
>mkdir .m2
```
* settings.xml がない場合は作成します。保存する際はUTF-8で保存しましょう。
Rails 5.0.0.beta1を5.0.0.beta3にupdateする

もちろんbetaなので文句言わずに頑張るしかない。

僕が5.0.0.beta1で動かしていた、ActionCableを使ったアプリケーションを5.0.0.beta3で動かすためにやったのは以下。

1. `Gemfile` のrailsバージョン書き換え
2. `Gemfile` に `redis` を追加
3. `bundle update`
4. 5.0.0.beta3で `rails new` したときに生成される `config.ru` を持ってくる
5. `config/redis/cable.yml` を `config/cable.yml` にリネーム
6. `config/cable.yml` に `adapter` を追加

beta1だったときはActionCableの非同期メッセージングを担う実装がEventmachine -> Redisを利用する形に固定されていたのに対し、beta3ではadapterという形で切り出され、開発者がどの実装を使うか選んだり独自実装できるようになっている。

それに伴い、

- 設定ファイルパスの調整 (5)
- 設定ファイルにadapterの項目追加 (6)
- 引き続きredisを使う場合は明示的に依存を追加する (2)

という作業が必要になった。

[実際にやったdiffはこちら](https://github.com/splathon/splathon-fest/commit/5cccfd738e99b37527e008549fae08a5bdcb0acd)。

ちなみに、ちょうど昨日[こんな記事の日本語訳](http://postd.cc/kill-your-dependencies/)が出てたけど、本当に、faye-websocketへの依存が消え、eventmachineへの依存も消えてる。

結果、 `Gemfile.lock` のdiffはdeletionsがadditionsを上回る。カッコいい。
GitLab上のGit操作で「Permission denied」が出た時の対策

OSX上でGitLabからCloneする際に

```
git clone git@hoge.com/fuga.git
Cloning into 'fuga'...
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```

となりcloneが出来なくなったので復旧までをまとめた。

## 結論

秘密鍵作成時にコメントにログインメールアドレスを記載して再登録するとアクセスできた。

## 状況

- clone, fetchなどが上記の通りPermission deniedで出来なくなる

- sshアクセスは正常に出来る

```
$ ssh -T gitlab            # 「gitlab」で.ssh/configに登録している
Welcome to GitLab, (登録名)!
$
```

## 解決方法

- 鍵をもう一度作る。
    - この時ログインメールアドレスをコメントに入れる

```
ssh-keygen -C "login@foobar.com" -t rsa
```

- GitLab上に再登録

- 再度cloneしてみると成功！！

## まとめ

コメント欄まで見ているのかは不明だが、「GitLab permission denied」とかで調べるとたいていの人が「ログインアドレスをコメントに入れてみたら」という書き込みが多かったので多分見ているのかもしれない。
普段BitbucketとGitHubを使っているけど、こういう事もあるという事で記録しておきます。


## 追記

どうやら鍵自体を読みこませればOKでした。不覚。

[GithubでSSH通信した時に「Permission denied (publickey).」が発生した時の対処方法。](http://sbkro.hatenablog.jp/entry/2013/04/23/231312)

```
2. SSH秘密鍵を登録する。

ssh-addコマンドを使って、秘密鍵を登録します。パスワードが聞かれますが、SSH鍵生成時のパスワードを指定します。


$ssh-add <秘密鍵名>
Enter passphrase for <秘密鍵名>:   <= パスワードを入力
Identity added: <秘密鍵名> (<秘密鍵名>) 
```