OmniAICreator/Qiita-1.07M huggingface dataset:
Override, from method to stored property - Swift 3 調整記

在 iOS 10 的 SDK 中，很多成員方法 (instance method) 都換成了成員變數 (instance variable, or stored property) 。

這樣在複寫父類別的方式就要改變了。

以 `preferredStatusBarStyle` 為例，在過去的寫法是這樣：

``` swift
override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
}
```

但是這時候 Xcode 就會報錯，並抱怨說：

> Method does not override any method from its superclass

意思是這個 method 已經從父類別移除。他也不是不見，而是以 property 的方式存在：

``` swift
open var preferredStatusBarStyle: UIStatusBarStyle { get }
```

而不再以 method 的方式存在。

## 修改覆寫方式

這時候就要從覆寫方法，轉而覆寫一個成員變數：

``` swift
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
```

這樣即可。

## 小結

其實 Xcode 應該可以知道哪些覆寫的對象是從 `方法` 轉為 `變數` ，要是碰到這一類型的變更，能提供更好的錯誤訊息的話會更好。
MacにELK(Elasticsearch, Logstash, Kibana)インストールしてみた

当時の環境

> OS X 10.10.5
Elasticsearch 2.3.2
Logstash 2.3.2
kibana 4.5

## Elasticsearch
### java（JDK）のダウンロードとインストール

適当に落としてインスコ
http://www.oracle.com/technetwork/java/javase/downloads/index.html

```
$ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
```
とりあえず1.7以上になっていること確認

### インストール

```sh:
$ brew install elasticsearch
```


### pluginのためにパス通す

```sh:.bashrc
export ELASTICPATH=/usr/local/Cellar/elasticsearch/2.2.0_1/libexec/bin
```

### プラグインいれる

```sh:
$ plugin install mobz/elasticsearch-head
$ plugin install analysis-kuromoji

$ vim /usr/local/etc/elasticsearch/elasticsearch.yml
```

下記まるっと追記

```yaml:elasticsearch.yml
################################## Custom ################################
# Using kuromoji in default
index.analysis.analyzer.default.type: custom
index.analysis.analyzer.default.tokenizer: kuromoji_tokenizer
```

### 起動

```sh:
$ ln -sfv /usr/local/opt/elasticsearch/*.plist ~/Library/LaunchAgents
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.elasticsearch.plist
```

## Logstash

```sh:
$ brew install logstash
$ /usr/local/Cellar/logstash/2.3.2/
```

## Kibana

```sh:
$ mkdir ~/kibana && cd $_
$ wget https://download.elastic.co/kibana/kibana/kibana-4.5.0-darwin-x64.tar.gz
$ tar zxvf kibana-4.5.0-darwin-x64.tar.gz
$ mv kibana-4.5.0-darwin-x64 kibana
```

参考:
http://morizyun.github.io/blog/elasticsearch-kibana-setup-mac/
http://qiita.com/y-temp4/items/ffafe1c0ea8a29ce8707
polymer 要素を取得し cloneNode() するとLocal DOM が入れ子で生成される問題の解決

Polymer要素をPolymer.dom() メソッドを使用せずに cloneNode() するとLocal DOM が入れ子で生成されてしまったため、以下の記述で解決

```component-item.html
class Item {
  get is() { return 'component-item'; }

  cloneNode(deep) {
    if (deep === undefined) {
      deep = true;
    }
    return Polymer.dom(this).cloneNode(deep);
  }
}
Polymer(Item.prototype);
```
Logstashの挙動をさっくり確かめる方法

設定ファイルを作成

```sh:
$ cd /opt/logstash/
$ sudo vim test.conf
```

適宜filterを追加する

```:test.conf
input { stdin { } }

output {
  stdout{codec => rubydebug}
}
```

実行

```sh:
$ bin/logstash -f test.conf
```

`Pipeline main started`が出たら標準入力の受付になるのでデータぶち込んでみる
Logstashのお役立ちサイトたち

Logstash関係をいじいじしている時に助かったリンクたち

とりあえず公式嫁
https://www.elastic.co/guide/en/logstash/current/index.html

チートシート
日本語で超まとまってて素晴らしさある、しかもそんなに古くない
http://www.egrep.jp/wiki/index.php/Logstash_cheat_sheet

Grokのパターンを試せるこれがなかったら詰んでたレベル
http://grokconstructor.appspot.com/do/match
ここもみた
http://qiita.com/btamari-gy/items/0c7a84941ef97d758f8e

ちょっと古いけど色々まとまってる
http://knowledge.sakura.ad.jp/tech/2736/
http://blog.johtani.info/blog/2014/11/21/import-apache-accesslog-using-logstash/

--

後で読む
https://sematext.com/blog/2015/05/26/handling-stack-traces-with-logstash

--
IntelliJでpythonをrunしてエラー終了した場合の対処法

IntelliJ IDEA(PyCharm)上でpythonを動かしている場合にIDEが強制終了すると

> IOError
IOError: [Errno 32] Broken pipe

になってにっちもさっちもいかなくなることがある。

そうなった場合には下記でプロセスを殺す

```console
$ lsof -i :41000
COMMAND     PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
python2.7 63223 hrs   10u  IPv4 0xf141521f3632fd2b      0t0  TCP localhost:41000 (LISTEN)
$ kill -9 63223
```

適宜利用しているportを指定してあげる。

`ps aux | grep python`とかでも発見出来るが使用port見るほうが多分楽。
関数型プログラミングの入門記事に出てくる「カリー化」の違和感


> 関数型プログラミングの特徴として関数のカリー化と部分適用が挙げられる

というよく見る文章の、たしかに間違っちゃいないんだがなんか違和感があるんだよな、という気分を比喩で表現

## 例文1: カリー化を説明する文章のサンプル

関数型プログラミング言語では、関数がカリー化されているのが特徴です

カリー化されない言語ではこのように明示的に部分適用を記述しなければいけませんが

JSの例

```JavaScript
var f = function (a, b) { return a + b };
var f2 = function (a) { return function (b) { return f(a, b); } };
f2(1);  //=> 引数に対して1を足す関数が返される
```

カリー化がベースとなっている関数型プログラミングに特化した言語では、非常にシンプルに記述することができます。

OCamlの例

```OCaml
let f a b = f + b
f 1  (* 引数に対して 1 を足す関数が返される *)
```

これがカリー化です！素晴らしいでしょう？

## 例文2: 同じような温度感でオブジェクト指向プログラミングを説明するサンプル

オブジェクト指向プログラミングの特徴として、参照ベースのオブジェクト記法が挙げられます。

参照がベースになっていない言語ではこのように矢印を使って参照を明記しなければいけませんが

C++の例

```C++
obj->method(a, b);
```

TurboPascalの例

```Pascal
obj^method(a, b);
```

参照がベースになっているオブジェクト指向に特化した言語では非常にシンプルに記述することができます。

Javaの例

```Java
obj.method(a, b)
```

これが参照ベースのオブジェクト記法です！素晴らしいでしょう！？


## まとめ

OCamlやHaskellの関数定義がカリー化されているのは単に「そっちのほうがいろいろと便利だから」そうなっているというだけで、それ以上でもそれ以下でもない。

単にそうなっているので覚えておいてね、という程度のことなのに、なにか特別素晴らしいパラダイムシフトみたいに言われると違和感がある。[^1]

[^1]: 例えば可変長引数の関数の定義が難しいなどの欠点もあってどっちが優れているか劣っているかという話でもない。
Gitで不要なブランチを削除する


毎回忘れてぐぐるのでおいておく。
aliasにしようと思って早ウン年

まずは、すでに存在しないリモートブランチを綺麗にする。

``` 削除済みのリモートブランチ削除
git fetch --prune
```

削除予定のブランチを確認する。
消しちゃいけないブランチが混じってたら次の削除のコマンドまでは進んではいけない。
`grep -vE '^\*|master$'`を`grep -vE '^\*|master$|hoge$'`にするとmasterとhogeブランチを削除対象から除外出来る。

```:確認
git branch --merged | grep -vE '^\*|master$'
```

問題なさそうであれば削除する

```:masterマージ済みブランチ削除
git branch --merged | grep -vE '^\*|master$' | xargs -I % git branch -d %
```


参考元（パクリ元）:
http://qiita.com/soymsk/items/a6651c13ee4e8da855b8
Mavenで実行可能jarの作成（spring）

参考URL：
http://maven.apache.org/plugins/maven-assembly-plugin/
http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html


# 概要
バッチ処理を作っています！！jarを作るときに依存するライブラリ全てを含んだjarを作ろうと色々試行錯誤したときのメモです。
「maven-assembly-plugin」と「maven-shade-plugin」の２つを試した結果「<b>maven-shade-plugin</b>」を使用しています。　

最終的にやりたいこと、1つのjarの中にメインクラスを複数入れて実行時に指定したい。

```
$ java -classpath A.jar AmainClass
$ java -classpath A.jar BmainClass
```

# 構成
* java8
* Maven3
* Spring 4系（DIコンテナとして使用）

# maven-assembly-plugin
沢山記事があったのでそれを参考にpom.xmlを作成。jarファイルの作成までは出来ましたが、実行時にエラーとなりました。
どうやらSpringの<b>spring.handlers</b>と<b>spring.schemas</b>をmavenでコンパイル時に上書きしているのが問題です。
解決策としては、自分でspring.handlersとspring.schemasを作成し、pom.xmlを設定することです。
試してみた結果上手くいきましたがファイル作るのが面倒！！もっと簡単に出来ないのか再度調べていました。

# maven-shade-plugin
maven-shade-pluginでは、ファイル作成なしでいけました。下記が設定です。

```xml:pom.xml
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.3</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <finalName>${project.name}</finalName>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.handlers</resource>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.schemas</resource>
                </transformer>
              </transformers>
              <artifactSet>
                <excludes>
                  <exclude>classworlds:classworlds</exclude>
                  <exclude>junit:junit</exclude>
                  <exclude>jmock:*</exclude>
                  <exclude>*:xml-apis</exclude>
                  <exclude>org.apache.maven:lib:tests</exclude>
                  <exclude>spring/config.xml</exclude>
                </excludes>
              </artifactSet>
            </configuration>
          </execution>
        </executions>
      </plugin>
```


今回は、実行時にメインクラスの指定をしたいためpom.xmlではしていませんが、pom.xmlに含めることも可能です。

```xml
               <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>jp.co.XXXMain</mainClass>
                </transformer>
```

その場合の実行は

```
$ java -jar A.jar
```
超簡単だからやっておこうTomcatの脆弱性対策

# 1.初めに
脆弱性対策として、HTTPレスポンスのヘッダーに
**X-Content-Type-Options:nosniff**
**X-Frame-Options:DENY**
**X-XSS-Protection:1; mode=block**
※各ヘッダーの意味と効果については割愛
を設定するのに、apacheやら.htaccessやらで設定するのが面倒（サーバーが複数台あると大変）ですし、サーバーを引っ越した時に設定を漏らすのも嫌だと思って、warの中に含めてしまう方法は無いかなと思って調べてみたらありましたのでご紹介します。

なお、本機能を使うには
**Apache Tomcat 8.0.24以降**
**Apache Tomcat 7.0.63以降**
が必要になりますのでご注意を。

# 2. web.xmlを設定する
WebContent/WEB-INF/web.xmlに以下の記述を追加するだけ。

~~~xml
  <filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
~~~

アプリケーションサーバーを起動してアクセスしてみます。

![image](https://qiita-image-store.s3.amazonaws.com/0/76153/d0157f93-39a6-39a3-d1e4-695536bf6df7.png)

レスポンスにきちんと追加されているのが確認できました(^^)/

# 3. 応用
なお、web.xmlに追加したfilterをカスタマイズすることでレスポンスヘッダーの内容をカスタマイズすることが出来ます。

#### ■ 特定のヘッダーを無効にする
`<init-param>～</init-param>`で有効無効が指定できます。

~~~xml
  <filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <init-param>
      <param-name>antiClickJackingEnabled</param-name>
      <param-value>false</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
~~~

結果

![image](https://qiita-image-store.s3.amazonaws.com/0/76153/900521d6-f457-3404-4f0e-ee12d32b3f34.png)

クリックジャッキング対策の「**X-Frame-Options:DENY**」が消えました。

`<param-name>`に設定する名前は以下URLを参考にすればなんとなく分かると思いますが、
https://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/catalina/filters/HttpHeaderSecurityFilter.html

- antiClickJackingEnabled
→ **X-Frame-Options:DENY**
- blockContentTypeSniffingEnabled
→ **X-Content-Type-Options:nosniff**
- xssProtectionEnabled
→ **X-XSS-Protection:1; mode=block**

にそれぞれ対応するはずです（全部は試していない）。


#### ■ ヘッダーのパラメータをカスタマイズする
例えば
**X-Frame-Options:DENY**
を
**X-Frame-Options:SAMEORIGIN**
に変えたいとき。
`<init-param>～</init-param>`でオプションが指定できます。

~~~xml
  <filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <init-param>
      <param-name>antiClickJackingOption</param-name>
      <param-value>SAMEORIGIN</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
~~~

結果

![image](https://qiita-image-store.s3.amazonaws.com/0/76153/c3a8c2c1-bf1e-2bcb-9cea-e6e3323cf3c2.png)

**X-Frame-Options:SAMEORIGIN**が確認できました。



以上です。
`<url-pattern>`を工夫すれば特定のURLや拡張子のみにフィルターをかけることも可能です。色々お試しください(^^)/
c++ builder / SourceTree > フォームユニットのコピペ

```txt:動作環境
C++ Builder XE4
SourceTree
Windows 7 pro
```

C++ Builderプロジェクトにおいて、あるフォームファイル(フォームAとする)があるとする。
同じプロジェクト内において、フォームAを元にしたフォームBというのを追加したいとする。

以下の手順をやってみた。

1. フォームAを開いてオブジェクトインスペクタでNameをフォームBのものにする
2. プロジェクトマネージャにおいて1で編集したフォームの関連ファイル名をフォームBのものに変更する
3. SourceTreeにおいてフォームA関連のファイルが削除されたことになっているので「作業の破棄」とする
4. C++ Builderでプロジェクトを開きなおしてフォームAを追加する

これでいけたが、フォームAをもとにフォームBを作っていることで不具合がないだろうか。内部的な識別子の扱いは未消化。

フォームをコピペすること自体あまりお薦めのことではない。
React(es2015) class(css)に関するメモ

## classの指定 

htmlでは、classだが、classNameで指定

```react.js

class Sample extends Component {
  render() {
    return (
      <div className="class_name">
        xx
      </div>
    )
  }
}

```


## classをクリックに合わせて変更する場合

下記のように、onClickと絡めることで、クリックされたタイミングで、classNameを変更することができる。

```react.js
class Menu extends Component {
  render() {
    return (
    <nav className="mdl-navigation">
      <a onClick={() => {
        browserHistory.push("/add");
        document.getElementById("menu").className = 'mdl-layout__drawer';
      }} className="mdl-navigation__link">追加</a>
      </nav>
    );
  }
}
```
numpyで行列の転置と、行列同士の掛け算をしよう。

#numpyの行列の操作性の高さには脱帽です。
学生の時に転置行列とか必死で手計算で求めてたけど、numpy使うと瞬殺できる。すばらしい！!

#array.Tで仕事終了！

例として、3×3の行列の転置行列を求めてみます。

```
arr3d = np.arange(9).reshape((3, 3))
```

すると以下の行列が生成されます。
([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

次に転置行列を求めます。ただ以下のコードでOK!!


```
arr3d.T
```
これだけで
([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]])
が出てきます。これは楽ちん。

あと

```
arr3d.transpose()
```
も同様ですが、.Tの方がスタイリッシュですね。笑
引数の指定をする必要がない限りは.Tで行きます。

#最後に元の行列と転置行列を掛け合わせてみる。
行列の掛け算には


```
np.dot(行列1, 行列2)
```
でおけ！

上記では
```
np.dot(arr.T, arr)
```
で答えがでます。

([[45, 54, 63],
       [54, 66, 78],
       [63, 78, 93]])

以上。

※2106年9月27日　修正
.Tは転置行列を求めるにも関わらず、誤って逆行列と記載しておりました。大変失礼致しました。
なお、逆行列はlinalg.invを使用すれば求めることができます。

ご指摘いただいたnyanko-boxさん、ありがとうございました。
Laravel 5.3での開発をGitで管理するための手順


## プロジェクトを作成

* 新規プロジェクトの作成

	``` console
	# Laravelの最新版をインストール
	composer create-project --prefer-dist "laravel/laravel" your-project-name
	
	# Laravelのバージョンを指定する場合
	composer create-project --prefer-dist "laravel/laravel=X.X.X" your-project-name
	```
	

* 作業ディレクトリ変更

	``` console
	cd your-project-name
	```

## git初期化

* git管理を開始する

	``` console
	git init
	```



## コミット & プッシュ

* ローカルにコミット

	``` console
	git add .
	git commit -m "initial commit"
	```

* リポジトリを登録してプッシュ

	``` console
	git remote add origin [リポジトリURL]
	git push -u origin master
	```
pythonで多重配列をsliceを使って取り出す方法。

忘備録です。pythonで多重配列をsliceを使って取り出す方法を忘れがちなので、もう困らないように残しておきます。

#numpyで配列を作る

```
arr2d = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])
```

こうすると以下の多重配列が作られます。
([[ 5, 10, 15],
       [20, 25, 30],
       [35, 40, 45]])

この中から、右上の
[10, 15]
[25, 30]
を取り出したいと思います。

方法は色々あると思いますが、

```
arr2d[:2, 1:]
```

で取り出せます。以下で説明。

#まずは行を指定


```
arr2d[:2]
```

で取り出せる部分はどこでしょうか。
これは、arr2dの行を、インデックス2の1つ前まで取り出す、ということになります。

つまり
([[ 5, 10, 15],
       [20, 25, 30]])

が取り出されます。

#次に列を指定
続いて上記の行列から、列を取り出します。

完成形は

```
arr2d[:2, 1:]
```
なのですが、ここで注目するところは[1:]のところ。

終了インデックスを省略すると、インデックス1から最後までを取り出すことができます。
ここでは列を指定しているので、取り出されるのは

([[10, 15],
       [25, 30]])

となります。

#まとめ
多次元配列arrayにおいて、array[n, m]は、まずnで行を指定し、mで絞るイメージ!!笑

スライスは、開始インデックスを省略すると、先頭のから終了インデックスの前のまでが抽出される。

一方、終了インデックスを省略すると、開始インデックスから最後までが抽出される、ということを忘れずに。

以上。
Android Studio 2.2のビルドキャッシュを試す

Android Studio 2.2でビルドキャッシュが実装されたようです．
http://tools.android.com/tech-docs/build-cache

# 要点

- デフォルトは disabled
- `dexOptions.preDexLibraries` は設定しないか `true` に設定しておく
    - `preDexLibraries` は [minSdkVersion 20以上が必要らしい](http://qiita.com/KeithYokoma/items/579fb16bc6387e4f21d6#%E6%BA%96%E5%82%99) ので，今回は設定なしとしておく
- `gradle.properties` に `android.enableBuildCache=true` を設定
- `~/.android/build-cache` にキャッシュされる
- キャッシュをクリアしたい場合は上の領域を削除する

# 実験

業務で用いているリポジトリを使って試してみた．
ライブラリも含めて70モジュール近くある．
それぞれ `./gradlew clean` 後の `./gradlew assembleDebug` の実行時間で比較する．

## 実験環境

Gradle 2.14.1
gradle plugin 2.2.0

## キャッシュ無し設定の実行結果

実行しても当然 `~/.android/build-cache` は作成されなかった．
ビルド時間はだいたいこのくらい．

1. Total time: 6 mins 25.472 secs
2. Total time: 6 mins 37.435 secs

## キャッシュあり設定の実行結果

実行した直後から `~/.android/build-cache` が作られた．
ちゃんとキャッシュされているようだ．

1. Total time: 6 mins 13.289 secs
2. Total time: 5 mins 30.567 secs
3. Total time: 5 mins 57.277 secs
4. Total time: 5 mins 19.596 secs

# まとめ

1回目のビルドはキャッシュを吐き出さなければいけないので，キャッシュオフより時間が短くなるとは思わなかった．誤差の範囲かもしれないけれど．
だいたい20〜30秒（10%）ほどの短縮になっているが，うーん．CI以外で全モジュールをビルドすることなんてほぼ無いし，1つのアプリのビルドになるとせいぜい数秒の短縮と考えると，恩恵は少なそうかな…．

設定や環境によってはガッツリパフォーマンス出るのだろうか．
scikit-learnのインストール（Mac OS X）

#Mac OS X でのインストール方法#
pipを利用して簡単インストール．

```
pip install scikit-learn
```

インストールは完了．しかし，実際にインポートしようとすると以下のようなエラーが出力．


```
> import sklearn

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/sklearn/__init__.py", line 57, in <module> from .base import clone
File "/Library/Python/2.7/site-packages/sklearn/base.py", line 11, in <module>
from .utils.fixes import signature File "/Library/Python/2.7/site-packages/sklearn/utils/__init__.py", line 10, in <module>
from .murmurhash import murmurhash3_32
File "numpy.pxd", line 155, in init sklearn.utils.murmurhash (sklearn/utils/murmurhash.c:5029) 
ValueError: numpy.dtype has the wrong size, try recompiling
```

[ここ](https://github.com/pydata/pandas/issues/7517)を参照に解決を試みるも，うまくいかない．numpyのバージョンが合っていないようだったので，下のコードでインポートのパスを調べ，関連のディレクトリを削除後，再度numpyをインストールしたところ，無事インポートすることができた．

```
import numpy

print numpy.__file__　＃importするファイルのパスを表示
```

<b>追記</b>
[pip install したパッケージをimport できないときの対応](http://qiita.com/quvo/items/1f4075203854ced19ec5)でも類似の事象が報告されていました．結局pipがインストールしたパスと，pythonがインポートの際に見に行くパスが違うことが原因っぽいですね．
ファイル名をパイプで出力してvimで開く方法

# TL;DR
コマンドで取得したファイル名をパイプで出力して、vimで開きたいとき

```bash
ls . | tail -1 | xargs -o vim # xargsに-oオプションをつけるのがポイント
```
でできる。

# コマンドの意味を、ちょっと詳しく
xargsを使うと、標準入力から引数を読み込んで任意のコマンドを実行できる。だが以下のコマンドだと、「Vim: Warning: Input is not from a terminal」と言われて、以降のターミナルへの入力がおかしくなってしまう。

```bash
ls . | tail -1 | xargs vim # 以降のターミナルへの入力がおかしくなるので注意！
```

原因は、xargsが対象のコマンドの標準入力を/dev/nullに設定して実行しているため。vimは標準入力がターミナル(/dev/tty)であることを想定している。このことは、以下のコマンドで確認できる。

```bash
vim < /dev/tty # これだとOK
vim < /dev/null # 上記のエラーが出て、以降のターミナルへの入力がおかしくなる
```

ということは、標準入力を現在のターミナルに設定してxargsがコマンドを実行すれば良いので、これで開けるようになる。

```bash
ls . | tail -1 | xargs sh -c 'vim $1 < /dev/tty' - # 標準入力をターミナルに指定
```

もっと簡単に、xargsの-oオプションを使うと、標準入力をターミナルに設定してコマンドを実行してくれるようになる。

```
     -o      Reopen stdin as /dev/tty in the child process before executing the command.  This is useful if
             you want xargs to run an interactive application.
```

最初のコマンドにたどり着いた。

```bash
ls . | tail -1 | xargs -o vim # xargsに-oオプションをつけるのがポイント
```

# 気づいたこと
xargsの-oオプションの説明を読んでいたときに、xargsでマルチプロセスを扱えるのでは？ということに気づいた。調べてみたら、-Pオプションでマルチプロセスが扱えるようなので、今度試してみる。

```
     -P maxprocs
             Parallel mode: run at most maxprocs invocations of utility at once.
```
CloudFrontを使用しているサイトでMW WP Formを利用する


Cookieを使用している箇所があるらしく、`Forward Cookies`を`Whitelist`にしている場合、`Whitelist Cookies`という箇所で`mw-wp-form_*`を許可する必要がある。
![スクリーンショット 2016-09-14 18.06.04.png](https://qiita-image-store.s3.amazonaws.com/0/23936/399e6ab9-c45a-a02e-48d7-f8d240eec12a.png "スクリーンショット 2016-09-14 18.06.04.png")

それだけ。
Chromeのデベロッパーツール。linkタグに誤りがあると変な動作をする。ブレークが打てない？

chromeの動作で不思議な事がありました。気づきにくいパターンがあるので書いておきます。

OSはWindows8.1。
chromeのバージョン 53.0.2785.116 m (64-bit)で確認しました。
ローカルにnginxを使ってwebサーバとして使っています。ポートは50002です。


まずは普通のソース。
jqueryを読み込んで、コンソール出力しているだけのページです。
![01.PNG](https://qiita-image-store.s3.amazonaws.com/0/55730/5d047c97-e0c6-00ae-148e-3bc15af7e52c.png)

当然ですが、１１行目あたりにブレークを打つことができます。
さて、このソースだとlinkタグがこうなってます。
`<link rel="stylesheet" type="text/css" href="http://localhost:50002/css/default.css">`

これをこんなふうにします。
`<link rel="stylesheet" type="text/css" href="http://localhost:50002/">`

んで、デベロッパーツールを起動したままで、F5を押してリロードします。
こんな感じになります。
![02.PNG](https://qiita-image-store.s3.amazonaws.com/0/55730/58169e87-be3b-0a77-e71e-3a5f1cfc9d73.png)

はい、ソースが消えてしまいました。
Consoleタグはどうなっているでしょうか？
![03.PNG](https://qiita-image-store.s3.amazonaws.com/0/55730/9691bb0a-e9da-b8ab-6a36-ad48ad4ffa77.png)

なんという事でしょう。cssファイルの場所が間違えているのにエラーが表示されません。
では、Sourceタブに戻したあと、一旦デベロッパーツールを閉じて、再度開いてみましょう。

![04.PNG](https://qiita-image-store.s3.amazonaws.com/0/55730/c3377a30-14f5-4995-d2de-5aa59d18360a.png)

なんか不自然です。よく見ると、タグに色がついていませんね。
この状態だと、JavaScriptにブレークが打てなくなります。

この不思議な事象は、次の条件で発生するように見えます。

- ドメインのルートを指していると発生する。
    - `http://localhost:50002` 、`http://localhost:50002/` 、 `./` で発生します。
    - `http://localhost:50002/css` 、 `http://localhost:50002/css/` 、 `./css/` では発生しません。ちゃんとconsoleタブにエラーが出てくれます。
- 存在しないドメインでは発生しない。
    - `http://hogehogehost:50002` 、 `http://localhost:50003` などでは発生しません。ちゃんとconsoleタブにエラーが出てくれます。

ちょっと珍しい出来事だったので、メモっておきます。
ほんとは色々試してみたいんですが、仕事が押しているので諦めます。
WordPressのhttps化によりサイト内検索が文字化けしてしまった

WordPressにてHTTPS対応をしたあとにサイト内検索機能が文字化けしてしまい、検索が効かなくなってしまいました。

色々調べてみましたが、同事象が発生している記事を見かけなかったので備忘録で残しておきたいと思います。


```php:検索した際のURL
https://hogehoge.com/?s=%25E3%2583%2586%25E3%2582%25B9%25E3%2583%2588
```

この状態ですと実際に検索に使用される文字も「%25E3%2583%2586%25E3%2582%25B9%25E3%2583%2588」が使われてしまいどの記事にもひっかからなくなってしまいました。

そこで、以下を修正して対応しました。

```php:wp-includes/query.php
	protected function parse_search( &$q ) {
		global $wpdb;

		$search = '';
        // ここを追記！　urldecodeすることでパーセントエンコード？された文字列を復元
		$q['s'] = urldecode($q['s']);

		$q['s'] = stripslashes( $q['s'] );
		if ( empty( $_GET['s'] ) && $this->is_main_query() )
			$q['s'] = urldecode( $q['s'] );
　　　　　　　　　　   〜〜〜〜
    }
```

WordPressの内部をいじっているため、これが正解だとは思いませんが、他に対応方法がわからないため当面はこれで運用していきたいと思います。
もし他に良い解決策を知っている方いらっしゃいましたらコメントくださいませ！
ElasticBeanstalk環境のapache access log format

## ざっくり

ElasticBeanstalk環境のapache access logはtd-agentのプリセットフォーマット(`apache2`)ではパースできない
下記のフォーマットでパースできる

```
format /^[^ ]* \((?<host>[^ ]*)\) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/
time_format %d/%b/%Y:%H:%M:%S %z
```

## TL;DR

`/etc/httpd/conf/httpd.conf` の最後の方に追加の設定があり、`(%{X-Forwarded-For}i)` が追加されている

```
#/etc/httpd/conf/httpd.conf

#### AWS Settings ####

(略)

# Add remote IP to log
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

#### End of AWS Settings ####
```
html要素の省略できるもの、できないもの

htmlタグは省略できるものもあります。

たとえば、li要素です。

```html:
<ul>
  <li></li>
</ul>
```

上はもちろん表示される。
下でもちゃんと表示されます。

```html:
<ul>
  <li>
</ul>
```

何が省略できて、何が省略できないのか、把握したかったので、一覧にしてみました。

### ■開始tag、終了tag両方省略できる要素
body
head
html
tbody
    
### ■終了tagがそもそもない
area
b
br
col
embed
hr
img
input
keygen
link
meta
param
source
track
wbr

### ■終了tagのみ省略できる要素
colgroup
dd
dt
li
optgroup
option
p
rb
rp
rt
rtc
td
tfoot
thead
th
tr

### ■省略できない要素
a
abbr
address
article
aside
audio
b
bdi
bdo
blockquote
button
canvas
caption
cite
code
data
datalist
del
dfn
div
dl
em
fieldset
figcaption
figure
footer
form
h1, h2, h3, h4, h5, h6
header
i
iframe
ins
kbd
label
legend
main
map
mark
meter
nav
noscript
object
ol
output
pre
progress
q
ruby
s
samp
script
section
select
small
span
strong
style
sub,sup
table
template
textarea
time
title
u
ul
var
video
media typeの使い方

cssのmedia typeについてまとめました．

* all：
すべてのデバイス
* braille：
点字触覚フィードバックデバイス
* embossed：
ページ点字プリンター
* handheld：
スマホなど
* print：
印刷プレビューモードの画面表示
* projection：
プロジェクター
* screen：
pcのスクリーン
* speech：
音声合成。
* tty：
固定幅の文字グリッドを使ったメディア
* tv：
テレビ型デバイス（低解像度、カラー、限定スクロール画面、音声使用可能

https://www.w3.org/TR/CSS21/media.html



以下のように使用します．
  
ディスプレイで表示すると，フォントサイズが，200pxで表示され，
印刷プレビューでみると，フォントサイズが100px，文字色が赤色で表示されます．

```html:sample.html
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <title>ページタイトル</title>
    <link rel="stylesheet" type="text/css" media="screen,print" href="sample.css" />
</head>

<body>

    <div>
        <p class="sample">わわわ</p>
    </div>

    <!--<div>
        <a href="#">link</a>
    </div>-->

    <a href="#">
        <p>link</p>
    </a>

</body>

```
  

```html:sample.css
@media screen {
  body { 
    font-size: 200px;
  }
}

@media print {
  body { 
    font-size: 100px;
    color: red;
   }
}
```
LINQ to XMLを利用したデータ取得

#LINQ"de"XML@HL7

## 対象
- HL7形式のデータをC#でごりっとよみこみ、DBに突っ込みたい。
- XMLを読み込みたいだけ。
- C#大好きです

上記の人に向けての記事です。
つたないところがあるかと思いますが、間違っていたらコメントにてフォローアップお願いします。

## HL7とは？
簡単にいうと、医療情報(健診検査の情報や患者情報、予約だったり、いくら払ったかとか…)を扱う標準規格です。
アメリカ主導の規格ですが、日本でも特定健康診査で行った検査結果を国へ提出する際に利用されるなど、今後も利用拡大が想定される規格です。
ただのXMLではありますが、たとえばこんな感じに記載されています。

```gattemu.xml
<?xml version="1.0" encoding="utf-8"?>
<ClinicalDocument xmlns="urn:hl7-org:v3" xsi:schemaLocation="urn:hl7-org:v3 ../XSD/hc08_V08.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <typeId root="2.16.840.1.113883.1.3" extension="POCD_HD000040" />
  <id nullFlavor="NI" />
  <code code="10" codeSystem="1.2.392.200119.6.1001" />
  <effectiveTime value="20130930" />
  <confidentialityCode code="N" />
中略
         <entry>
            <observation classCode="OBS" moodCode="EVN">
              <code code="9N006000000000001" displayName="体重" />
              <value xsi:type="PQ" value="85.0" unit="kg" />
            </observation>
          </entry>
          <entry>
            <observation classCode="OBS" moodCode="EVN">
              <code code="9N011000000000001" displayName="BMI" />
              <value xsi:type="PQ" value="29.6" unit="kg/m2" />
              <interpretationCode code="H" />
              <referenceRange>
                <observationRange classCode="OBS" moodCode="EVN.CRT">
                  <value xsi:type="IVL_PQ">
                    <high value="24.9" unit="kg/m2" />
                  </value>
                </observationRange>
              </referenceRange>
            </observation>
          </entry>
(あとはentryタグの繰り返し)
```

とりあえずこんなかんじ。

## 本題にはいりましょ。
LINQ to XMLなんて仰々しい感じで名前はついていますが、所詮はLINQ。
そんなに難しい話ではありません。
本来であれば、XSDをつかって簡単にデータ化できればよかったのですが、
それがXSDが壊れていることがあり、うまくいかなかったのです。ガッテム。

ということで、

```　tekitouna.cs
            System.IO.StreamReader sr = new System.IO.StreamReader(strFile);
            XElement elem = XElement.Load(strFile);
            var xdoc = XDocument.Load(strFile);
            XNamespace ex = "urn:hl7-org:v3";
            // 検査結果エレメント
            IEnumerable<XElement> q = from n in xdoc.Descendants(ex + "observation")
                                      select n;

　　　　　　foreach (var ee in q)
           {
                value = "";
                // 検査内容(コード、検査項目名)
                IEnumerable<XElement> s = from n in ee.Descendants(ex + "code")
                                          select n;

                // 検査結果()
                IEnumerable<XElement> t = from n in ee.Descendants(ex + "value")
                                          select n;
          }

```


Valueがくるくるっととってこれるようになります。

ほんとうに本当にメモ程度の備忘録ですが、こんなかんじです。
rails g scaffoldのカスタマイズが反映されなかった場合の対処法

# scaffoldのカスタマイズしたのに反映されてない

scaffoldのカスタマイズがしたい場合があるかと思います。
その場合、以下のコマンドでテンプレートをコピーすることができますね。

```bash
bin/rake rails:template:copy
```

これを行うことで、`lib/templates`以下にファイルが色々できます。
テンプレートを書き換えたい場合は、erbの場合は`lib/templates/erb/scaffold`以下のファイルを修正します。

今回は`index.html.erb`を修正したとします。

```erb:lib/templates/erb/scaffold/index.html.erb
Override!!
<p id="notice"><%%= notice %></p>
...(略)
```


さて、修正したとして、意気揚々と以下のコマンドを打ちました。

```bash
bin/rails g scaffold User name:string
```

そして、`app/views/users/index.html.erb`を確認してみました。
Override!!と書かれているはずですね。

```erb:app/views/users/index.html.erb
<p id="notice"><%%= notice %></p>
...(略)
```

…無い！！何故だ！！

# 解決編

何度やってもうまくいかないから、Railsのバージョンの問題かなと思ったのですが、それでもなく、ヤケクソで`config/application.rb`の`config.generators`ブロックを修正してみました。

```rb:config/application.rb
config.generators do |g|
  g.template_engine :erb
  g.orm :active_record
  g.test_framework :rspec,
                   routing_specs: false,
                   controller_specs: false,
                   view_specs: false,
                   helper_specs: false,
                   fixture: true
  g.assets false
  g.helper false
  g.fixture_replacement :factory_girl, dir: "spec/factories"
end
```

明示的にtemplate_engineに`erb`を使うと宣言してみます。

その後、以下を実施。

```bash
bin/rails d scaffold User name:string # 一旦削除
bin/rails g scaffold User name:string # 再作成
```

そして確認。

```erb:app/views/users/index.html.erb
Override!!
<p id="notice"><%%= notice %></p>
...(略)
```

は、反映されてるー！！
真偽を確認しようと、`config.generators`ブロックを修正。

```rb:config/application.rb
config.generators do |g|
  # g.template_engine :erb # 真偽を確かめるためにコメントアウト
  g.orm :active_record
  g.test_framework :rspec,
                   routing_specs: false,
                   controller_specs: false,
                   view_specs: false,
                   helper_specs: false,
                   fixture: true
  g.assets false
  g.helper false
  g.fixture_replacement :factory_girl, dir: "spec/factories"
end
```

そして、再度実行。

```bash
bin/rails d scaffold User name:string # 一旦削除
bin/rails g scaffold User name:string # 再作成
```

そして確認。これでOverride!!の文字列が無くなっていれば、ここの設定かぁと思っていたら…。

```erb:app/views/users/index.html.erb
Override!!
<p id="notice"><%%= notice %></p>
...(略)
```

まだあるやんけ！！どういうこっちゃこれは！！

ということで、scaffoldのカスタムテンプレートを導入した場合はとりあえず`config.generators`の`template_engine`を最低1度は設定しなければならなさそうです。罠すぎる。
numpy.newaxisについて

Pythonのnumpy.newaxisに関して情報が少なかったのでメモ．
用途は縦ベクトルへの変換．NumPyの[Reference](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html)によるとNoneのエイリアスらしいが，なぜNoneをスライスにつけると次元が増えるのかはイマイチ分からなかった．

```
import numpy as np

a = np.array([1,2,3,4,5])

b = a[:,np.newaxis]
print b #　array([[1],[2],[3],[4],[5]])が出力

c = a[:,None]
print c # array([[1],[2],[3],[4],[5]])が出力
```
Mockの使い方

## クラスの宣言
まずMockさせるクラスをフィールドとして宣言する。

```
@Mocked
Hoge hoge;
```

## Mockの条件
対象のメソッドの中にMockの条件を記したメソッドを以下のように書く。

```
new NonStrinctExpectations(){
    {
        hoge.hogehoge();
        result = aaa;
    }
};
```

これで、hogeクラスのhogehogeメソッドを実行すると、aaaという結果が返ってくるよう設定ができる。
echart to pdf

http://stackoverflow.com/questions/32077971/ruby-on-rails-jpeg-to-pdf

http://stackoverflow.com/questions/20636576/how-do-i-combine-a-number-of-images-into-a-single-pdf-using-ruby

http://rohitrox.github.io/2013/07/19/canvas-images-and-rails/

https://www.viget.com/articles/how-to-create-pdfs-in-rails

https://www.youtube.com/watch?v=e-A3zBeWDdE

```rb
class EchartOutput
	def initialize(images)
    raw_images = base64_to_image(images)
    pdf = image_to_pdf(raw_images)
    
	end

  def base64_to_image(values)
  	values.map do |value|
      Base64.decode64(value.split(/,/)[-1])
  	end
  end

  def image_to_pdf(raw_images)
  	begin
      files, paths = generate_tempfiles(raw_images)
  	  Magick::ImageList.new(*paths)
  	rescue Magick::ImageMagickError => e
  		binding.pry
  	ensure
      files.each do |f|
      	f.close
      	File.unlink(f)
      end
    end

  end

  def generate_tempfiles(raw_images)
  	files = raw_images.each_with_index.map do |image, i|
  		f = Tempfile.new("#{i}.png")
  		f.binmode.write(image)
      f
  	end
  	[files, files.map(&:path)]
  end
end
```

http://echarts.baidu.com/api.html#echartsInstance.getDataURL
MicrosoftBotFrameworkのRESTAPIをPHPで SKYPEに悲しい言葉を吐くボット


# 引用元
[MicrosoftBotFrameworkのRestAPIを使ったTimerBot](http://qiita.com/nyasba/items/268524b2349cfe54600d)
大体はnyasba様の内容をゆるくPHPで書いた感じです。

# 実例
```php
<?php
//トークンを取得する
$head = [];
$head[] = 'Content-Type: application/x-www-form-urlencoded';

$body = array();
$body['grant_type'] = 'client_credentials';
$body['client_id'] = '*******';
$body['client_secret'] = '*******';
$body['scope'] = 'https://graph.microsoft.com/.default';

$ch = curl_init('https://login.microsoftonline.com/common/oauth2/v2.0/token');

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($body));
curl_setopt($ch, CURLOPT_HTTPHEADER, $head);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
// 実行
$res = curl_exec($ch);
// エラーが発生したらとめる
if (!empty(curl_error($ch))) {
	var_dump(curl_error($ch));
	exit();
}
// ハンドルを閉じる
curl_close($ch);
$tmp = json_decode($res);

$token = $tmp->access_token;
//トークンが取れたのでボットにランダムに悲しい言葉を吐かせる
$messages = [
		'作り直すしかないね…',
		'予算がね…',
		'時間がね…',
		'見積もりがね…',
		'このバグ根が深いです',
		'なんでこうなったの？',
		'用意していないです。',
		'えっ！今の作業って無駄ってことですか？'
];

$body = array();
$body['type'] = 'message/text';
$body['text'] =  $messages[array_rand($messages)];

$head = [];
$head[] = 'Authorization: Bearer '.trim($token);
$head[] = "Content-Type: application/json";
$body = array();
$body['type'] = 'message/text';
$body['text'] = $messages[array_rand($messages)];
$ch = curl_init('https://api.skype.net/v3/conversations/'.urlencode('/get name　の値').'/activities/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
curl_setopt($ch, CURLOPT_HTTPHEADER, $head);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$res = curl_exec($ch);
// エラーが発生したらとめる
if (!empty(curl_error($ch))) {
	var_dump(curl_error($ch));
	exit();
}
// ハンドルを閉じる
curl_close($ch);
```
あとはcrontabにでも放り込めばて定期的にメッセージをPOSTしてくれます。

実際のとこはCURLでできてしまうので、特にPHPで書く理由もあまりなかったりします。
ここからまじめに書いていけばChatOpsのインターフェイスとしてSKYPEは悪い選択肢ではないかなと思ってきました。

あとまだ勉強中ですがMicrosoftBotFrameworkはslackにも対応しているようなので横断的なbot構築を考えるとなかなかいんじゃないかと
Quantum Chemistry - Superposition Principle 1: Basis Sets

関連 http://qiita.com/7of9/items/d3a1799928734375f34f

CG分野で使われるSpherical Harmonics。自分の数値シミュレーション計算に用いたいと思い調べると、量子化学の講義にたどり着く。

短く分かりやすそうな159本のビデオを少しずつ消化中。

Quantum Chemistry - Superposition Principle 1: Basis Sets
https://www.youtube.com/watch?v=PHus6stbje0&index=33&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh

- 緑の式
  - f(x)の定義
  - それは係数c_nと関数プサイnの積の総和
  - プサイnはket表記で`|n>`と書けるので3つ目が出て
  - それは同様に関数fをket表記で`|f>`と書ける
- 紫
  - `{|n>}`のことをbasis setと呼ぶ
     - (補足) basis: 基底と呼ぶことがある
- ピンク
  - `|n>`のことをbasis functionと呼ぶ
- 黄色
  - c_nのセットは複素数 (Cの太字 @ 工学における特殊関数 p10)
  - c_nのセットを係数と呼ぶ
- 水色
  - f(x)は`{|n>}`空間における任意の関数である
- オレンジ
  - `<m|n>`はbra, ket表記の定義から2つ目の積分となる
     - bra, ket表記は[このビデオ](https://www.youtube.com/watch?v=QCiWuNpIjmE&index=31&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh)の左上の緑と紫
  - それは粒子の存在確率を表し、m=nの時だけ1となり
  - δmn(デルタmn)と記載される
- 紫の定義
  - クロネッカーのデルタ
     - ディラックのデルタ関数とは別もの
     - @ マクスウェル・場と粒子の舞踏 (by 吉田武さん) p5
     - インデックスが同じ(m=n)時は1
     - それ以外は0 となることの表記
- 右上の緑の式
  - mとfのbra,ket表記
  - fは左上の緑の式の定義から、2つめの式が出る
     - c_nが積分とは無関係の係数でくくりだされ
     - `c_n<m|n>`の総和となる
  - `<m|n>`は左下のオレンジの式からδmnとなるので
  - `c_n δmn`の総和となる
  - 総和はn=1から無限大まで
  - クロネッカーのδの定義から総和においてn=mの時だけδmn=1
  - それ以外のnの値ではδmnは0となる
  - そのためc_mとなる (一番右のc_m)
- 紫の式
  - `|f>`を見る
  - 左上の緑の式から、2つ目の`c_n|n>`の総和が出る
  - 右上の緑の式から、`c_m = <m|f>`となり
  - 同様に`c_n=<n|f>`となる
  - 3つ目の総和が出る
  - 総和される値のくくり方を変えて4つ目が出る
- ピンクの式
  - 紫の式の1つ目と4つ目の項目の統合から求まる
  - "Resolution of the Identity"と呼ばれる式
  - それは
  - statement of "completeness" of basis setである
  - このstatementを使って例は後のビデオで出るようだ
在 Git 版本控管中保留空資料夾

## 碰到的問題

在開新的 iOS 專案時，有時候會預先根據團隊或是自己的慣例，開好一些實體資料夾。

但是這時候這些資料夾的裡面是空的，

> Git 沒有辦法把空的資料夾夾進版本控管

這樣的情形之下，就必須要在裡面放個什麼東西，讓這些實體資料夾能夠進入版本控管。

## 放 `.gitkeep` 或是 `.keep` 這樣子的檔案進去

這樣子的檔案只要是個空的檔案就好，

在生成 Rails 全新專案時，空的實體資料夾內，就是放了 `.keep` 。

在這邊我會選擇使用 .gitkeep 的原因是比較容易辨識這個空的隱藏檔是要拿來給 Git 用的。

所以如果要在當前目錄的一個叫做 `Managers` 的目錄安插一個 `.gitkeep` 檔案的話，只要在終端機輸入：

```
touch Managers/.gitkeep 
``` 

即可。
yumアップデートrpmforgeさんもrepoさんも応答しない、clamdアップデート。

#yumでclamdアップデートしてみたらリポジトリが返事しない

##現バージョン確認
>yum list installed |grep "clam"
>clamav.x86_64           0.98.4-1.el6.rf @rpmforge
>clamav-db.x86_64        0.98.1-1.el6    @epel
>clamd.x86_64            0.98.4-1.el6.rf @rpmforge

##最新バージョンの問い合わせ
>yum check-update |grep "clam"

変更無し！

##rpmforgeをオフ
>vi /etc/yum.repos.d/rpmforge.repo

enabled = 1 => enabled = 0

#3最新バージョンの問い合わせ
>yum check-update |grep "clam"

repoさんに聞いても同じバージョンしか出てこない！

##repo問い合わせを変更
>vi /etc/yum.repos.d/epel.repo

mirrorlistからbaseurlに戻す

##最新バージョンの問い合わせ
>yum check-update |grep "clam"
>clamav.x86_64      0.99.2-1.el6   epel
>clamav-db.x86_64   0.99.2-1.el6   epel
>clamd.x86_64       0.99.2-1.el6   epel

##clamdとめる
>/etc/rc.d/init.d/clamd stop

#バージョンアップ
>yum update clamd

成功！

##いろいろ再起動
>/etc/rc.d/init.d/clamd start
>/etc/rc.d/init.d/mysqld restart
>/etc/rc.d/init.d/postfix restart[info]
D3.js v4のデータバインド


version4ではかなり挙動が変わっているようだ

過去記事: D3.jsアプリケーション設計におけるデータとDOM操作の分離
http://qiita.com/mojaie/items/1c8ba9d70ab633938a1c

- 環境
  - D3.js version 4.2.4
  - Google Chrome version 52.0.2743.116


公式サイトの例
https://github.com/d3/d3-selection

```js
var circle = svg.selectAll("circle") // 1
  .data(data) // 2
    .style("fill", "blue"); // 3

circle.exit().remove(); // 4

circle.enter().append("circle") // 5
    .style("fill", "green") // 6
  .merge(circle) // 7
    .style("stroke", "black"); // 8
```

上記コードを順を追って説明すると、

1. svgの全てのcircle要素を選択
2. circleに対応するデータを更新する
3. データと対応しているcircleを青で塗りつぶす
4. 対応するデータが無くなったcircleを削除
5. 新しく加わったデータのcircle要素を作成して選択
6. 新しく作成したcircleを緑で塗りつぶす
7. 新しく作成したcircleに加えて既に存在するcircleも選択
8. 全てのcircleの縁を黒で書く

v4ではmergeが実装されたことで、enterした要素と既存の要素の挙動をまとめて指定できるようになっている。便利。


依然として面倒なのは、一つの親要素が複数の子要素を持っていたり、要素が入れ子になっていたりしているケース。

```html
<ul>
  <li>
    <label>
      <input type="checkbox" name="person" value="1"></input>
      <span>John</span>
    </label>
  </li>
  <li>以下略</li>
</ul>
```

データを持っているのはliだが、更新するのはその下の階層のinputとspanということになる。selectAll('li').htmlでゴリ押ししてもいいのだが...

```js
function checkboxList(selection, data, name, key, text) {
  const items = selection.selectAll('li').data(data, key);
  items.exit().remove();
  const entered = items.enter().append('li').append('label');
  entered.append('input');
  entered.append('span');
  const updated = entered.merge(items.select('label'));
  updated.select('input')
    .attr('type', 'checkbox')
    .attr('name', name)
    .attr('value', key);
  updated.select('span')
    .text(text);
}
```

mergeされる2つのselectionの階層が異なる場合、mergeを呼び出す側のselectionに統一される(上記コードの場合、entered.merge(items)でも結果は変わらない、多分)が、開発者の意図した使い方ではないらしいのでmergeするselectionは揃えたほうが無難だろうか。

上記checkBoxListを呼び出す処理は以下の様な感じ。

```js
d3.select('ul')
  .call(checkboxList, [{key: 1, name: 'John'}],
        'person', d => d.key, d => d.name)
  .on('change', () => {
    変更時の処理
  });
```

callメソッドは実行結果に関係なく必ず呼び出し元のselectionを返すので、UIコンポーネントの生成をルーチン化するのに便利。
ISUCON6参加して撃沈しました

ISUCON6、土曜日に参加しました。運営の皆様ありがとうございました・おつかれさまでした。

今回も凄く楽しみにしていたISUCON参加。体調万全にするため前日夜の仕事の打ち上げ呑みもアルコール程ほどに抑えて家に帰ったら
嫁「チョー体調悪いんで明日は娘の世話よろ」
はぁ！？


当日は9時辺りにムクリと起き出し、自宅部屋で全員リモートのメンバーとブリーフィングをしながらAzureの調整をしたり色々試行錯誤しているうちに(@matsuu様ご助言ありがとうございました)、10時を向かえ、さてやるか。

まずはさっさとインスタンス立てて、コードをgitにpush。
webページを見て、コードレビューもすぐにはじめたけど、まもなく娘をプールに連れて行くために離席。11時半からプールの受付前でノートPCを見ながらコードレビュー。
・htmlifyが激しいことやってるが、何やってるのかわからない。
・とりあえずnginx側にフロントエンドの静的ファイルキャッシュくらいはやる。
・dbは殆どインデックス効いてるから何やっても激的な効果ないと思われる。一つあったけどアクセス頻度低い。
・API,dbログ出してもらったが、むちゃくちゃ重いものがないように見える。

こういうことを一人で考えながら、プールが終わり、娘のアイカツに付き合い、家に帰ったのが14時。ランチに連れて行く暇も無かったので、とりあえずピザを頼んでPCに向かう。
この時ピザの臭いをかぎつけた嫁がもそもそ起き出し、ピザ食ったかと思ったらすぐにまた寝やがった！何かのゲージMaxになり冷静な判断が出来なくなる…

途中node.jsがスコアゼロと言うところがわかり、ロジックはnode.jsを参考にしつつphp実装に切り替えることに。今回実装殆どやれてません。

ああ、はてなリンクか！と気付いたのは15時ごろ。そうやって見ても、意外とロジックも必要十分のロジックだから手の出しようが無い。他にログインキャッシュとかあるかなと思ったけど、アクセス回数も少なそう。
最後の最後で、一回一回クエリーで正規表現のテーブル作ったりしてるのを止めようとメンバーで手を下し始めたのが17時。最後にベンチをかけたが、功を奏さず、9000弱で終了ー。。。

多分"GET /"のレスポンスが速くなると、次のボトルネックが見つかるのかな、と思ったのですが…残念でした。集中できなかった3時間ロスが痛すぎる。しかし一人の子育ては一生に一回しかないが、isuconは次回がある、と自分に言い聞かせ、反省したいと思います。
nginxで403エラーが出た話など

nginx&unicornの連携でずっとのたうちまわっていました。まあ、なんとかtry_filesの設定を修正して動くようになりました。以下はその顛末です。
■環境
・CentOS on Vagrant & VirtualBox
・ruby 2.3.1 on rbenv
・Rails 4.2.7
・unicorn 最新バージョン
・nginx 最新バージョン

■unicornとは何か
（昔の）人気J-POPバンドでもなければ、ラプラスの箱の鍵でもありません。WEBRickに変わるRailsのWEB Serverです。こいつ単体では色々と心もとないので、普通はApacheとか後述のNginxと連携させて使います。まあ、これだけでサービス提供しようと思えば出来ないことはないんだけどね。

■Nginxとはなにか
Nginxと書いてNginx not Apacheと・・・読まないですね。はい。Nginxと書いてエンジンエックスと読むそうです。なんでそう読むのかは知りません。ドイツ語読みかロシア語読みだとそう読めるんでしょうか。いや、ロシア語じゃねえよな。
Apacheにとって変わろうというWeb Application Serverです。
大変軽量ですが、たしかこいつは静的コンテンツ配信用のサーバであって、CGIとか動かそうとする場合には別途ApacheとかTomcatとかunicornガンダムとか必要なようです。嘘です。ガンダムはいりません。unicornです。

■まぬけな僕はどこで躓いたん？
現在開発中のRoR(Ruby on Rails）で動く投稿サイト（趣味）のWebアプリをWEBRick&ApacheからUnicorn&Nginxで動かす方式に変えよう思うて、教科書＆参考書通りに設定してみて動かしてみたんですわ。いやあ、ちゃんと設定したにもかかわらず（仕事で書いいた設定を参考にしてやった）「403 errorやで」と言われたんで色々調べてみました。さて、記事では権限がどうのこうのと書かれていたんでパーミッション設定を0700とか0755とか0744、はては0777に変更して試してみたのですがダメでした。「ちゃんと記事や参考書に書いてある通りにやったんやけどなあ。なにがあかんのやろ」と思い、今度はNginxの起動ユーザ設定をnginxからRoRと同じvagrantに変更してみましたがこれもあかん！
で、調べているうちになんかtry_filesの設定が怪しそうだってんで見直してみたんですが、どれもこれも下記の通りにしろと書いてありました。

try_files $uri/index.html $uri $uri/ @unicorn&#059;

さて、これは仕事でRedmineサーバ構築をした際の設定とも同じであって、「間違っているはずがない」わけなんですが、try_filesディレクティブについて調べてみると下記のように書いてありました。

-----
ry_filesディレクティブには存在をチェックするファイルやディレクトリと存在しなかったときにリダイレクトするURIのパスを指定します。
記述方法は次の通りです。
try_files ファイル ... パス&#059;
try_files ファイル ... =コード&#059;

-----

つまり、ここに（正規表現などを使って）記載された静的コンテンツのURI(URL)に合致したものがない場合に連携先の別のアプリケーションサーバにリダイレクトするというわけ。
で、試しに下記のように修正してみました。
try_files $uri/index.html @unicorn ;
動きましたよ。つまり、今まで参照権限のなかったからのドキュメントルート内ファイナル一覧を静的コンテンツとして配信しようとしてエラーになっていたと。そういうわけです。しかし、なんでこれでOSX上にRedmine立てたときにはうまく動いたんやろなあ・・・・。
R / RStudio > コマンドヒストリ機能 > 過去のコマンドの再実行

```txt:動作環境
RStudio 0.99.903 on Windows 7 pro
R version 3.3.1
```

過去に実行したコマンドを選択して実行する機能。

参考 https://support.rstudio.com/hc/en-us/articles/200526217-Command-History

RStudioの右上に「History」タブがある。
ここで過去に実行したコマンドを選択して「To Console」でConsoleにそれらのコマンドを送ることができる。
そしてConsoleにてEnterを押すと、それらコマンドを実行できる。

ファイルを変更しながら、同じ処理を実行したいときなどに使える。

Historyタブ内のコマンド選択はCtrlを押しながら選択すると非連続の選択ができる。

Console内でもカーソル上下で過去のコマンドを探すことはできるが、Historyタブの方が閲覧性が良い。

「To Console」で送った複数行のコマンドは、Console内のカーソル上下で再度複数行実行できるので、Historyタブ機能と組合せるとさらに使い勝手がよい。
[メモ]Visual Studio Codeを使ってGo言語で開発するときのtasks.json


```tasks.json
{
  "version": "0.1.0",
  "command": "go",
  "isShellCommand": true,
  "showOutput": "always",
  "tasks": [
    {
        "taskName": "run",
        "suppressTaskName": true,
        "args": [ "run", "${file}" ]
    },
    {
        "taskName": "build",
        "suppressTaskName": true,
        "args": [ "build", "${file}" ]
    },
    {
        "taskName": "test",
        "suppressTaskName": true,
        "args": ["test", "${file}"]
    }
  ]
}
```
AWS+Video.jsでお手軽ストリーミング動画配信

以下のサービス・ライブラリを利用してHLSでお手軽ストリーミング配信できたので、やったことをメモしておく。

* AWS S3：動画をHLS配信しVideo.jsで閲覧できるように
* Amazon Elastic Transcoder：動画のHLS変換
* Video.js：safari以外のブラウザでHLSを再生できるように

## S3準備

* 以下のようなバケットポリシーのバケット作成

```json
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "",
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:GetObject",
			"Resource": [
				"arn:aws:s3:::[バケット名]/*",
				"arn:aws:s3:::[バケット名]/js/*",
				"arn:aws:s3:::[バケット名]/css/*",
				"arn:aws:s3:::[バケット名]/css/font/*"
			],
			"Condition": {
				"IpAddress": {
					"aws:SourceIp": "[アクセス許可するCIDR]"
				}
			}
		}
	]
```

* 動画ファイルをバケットに配置

## Amazon Elastic TranscoderでHLS変換

以下の記事を参照し、入出力先は作成したバケットを指定して以下のようなジョブを実行。
[[HTML5] Amazon Elastic Transcoder で変換した HLS（HTTPライブストリーミング）形式の動画を video タグで再生する ｜ Developers.IO](http://dev.classmethod.jp/references/amazon-elastic-transcoder-hls/)


* Input Key：配置した動画ファイル
* Output Key Prefix：hls_sample/
* Preset：System Preset HLS 400K
* Segment Duration: 10
* Output Key：hls_400k_
* 他はデフォルト値

## video.js配置

以下の記事を参照してvideo.jsを作成したバケットに配置

[video.js で m3u8 形式の動画ファイルをブラウザで再生する - Hack Your Design!](http://blog.toshimaru.net/play-m3u8-video-in-browser/)
[Video.js を使って HLS形式の動画をストリーミング再生する - akiyoko blog](http://akiyoko.hatenablog.jp/entry/2015/08/11/015852)

以下の3つのライブラリをダウンロード

* [videojs/video.js](https://github.com/videojs/video.js)
* [videojs/videojs-contrib-media-sources](https://github.com/videojs/videojs-contrib-media-sources)
* [videojs/videojs-contrib-hls](https://github.com/videojs/videojs-contrib-hls)

バケットに以下のように配置(精査してないので不要なものがありそう)

```bash
.
├── [動画ファイル]
├── hls_sample/
│   ├── hls_400k_.m3u8
│   ├── hls_400k_00000.ts
│   ...
├── index.html
├── css
│   ├── video-js.min.css
│   └── font
│       └── VideoJS.*
└── js
    ├── video.min.js
    ├── videojs-contrib-hls.min.js
    └── videojs-contrib-media-sources.min.js
```

index.htmlは以下のような内容にした(試行錯誤したので不要な設定ありそう)

```html
<!DOCTYPE html>

<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>test</title>
  <link href="css/video-js.min.css" rel="stylesheet">
  <script src="js/video.min.js"></script>
  <script src="js/videojs-contrib-media-sources.min.js"></script>
  <script src="js/videojs-contrib-hls.min.js"></script>
</head>
<body>
<video id="test" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto" width="640" height="360" data-setup="{}">
  <source src="hls_sample/hls_400k_.m3u8" type="application/x-mpegURL">
</video>
  <script type="text/javascript">

var player = videojs("test", {html5: {
  hls: {
    withCredentials: true
  }
},
flash: {
  hls: {
    withCredentials: true
  }
}});
  player.play();

  </script>
</body>
</html>
```

## 動画閲覧

https://[バケット名].s3.amazonaws.com/index.htmlにアクセスして動画閲覧
Jupyter のテーマを変える

Jupyter便利ですね。
[Jupyter Notebookを自分仕様に：背景，アイコンの変更](http://qiita.com/hiropignis/items/f2192d86971746b849e8)を見て、確かに背景の色とか変えたいなと思いました。でもCSSを自分でいじったりするのは面倒なので、お手軽にできる方法はないかと探してみました。

[jupyter-themes](https://github.com/dunovank/jupyter-themes)を使えば簡単にできそうです。

## インストール

```bash
% pip install jupyterthemes
```

## 使い方

```bash
% jt -h
usage: jt [-h] [-l] [-t THEME] [-f MONOFONT] [-fs MONOSIZE] [-nf NBFONT]
          [-nfs NBFONTSIZE] [-tf TCFONT] [-tfs TCFONTSIZE] [-m MARGINS]
          [-cursw CURSORWIDTH] [-cursc CURSORCOLOR] [-cellw CELLWIDTH]
          [-lineh LINEHEIGHT] [-alt] [-vim] [-T] [-N] [-r]

optional arguments:
  -h, --help            show this help message and exit
  -l, --list            list available themes
  -t THEME, --theme THEME
                        theme name to install
  -f MONOFONT, --monofont MONOFONT
                        monospace code font
  -fs MONOSIZE, --monosize MONOSIZE
                        code font-size
  -nf NBFONT, --nbfont NBFONT
                        notebook font
  -nfs NBFONTSIZE, --nbfontsize NBFONTSIZE
                        notebook fontsize
  -tf TCFONT, --tcfont TCFONT
                        txtcell font
  -tfs TCFONTSIZE, --tcfontsize TCFONTSIZE
                        txtcell fontsize
  -m MARGINS, --margins MARGINS
                        fix margins of main intro page
  -cursw CURSORWIDTH, --cursorwidth CURSORWIDTH
                        set cursorwidth (px)
  -cursc CURSORCOLOR, --cursorcolor CURSORCOLOR
                        cursor color (r, b, g, p)
  -cellw CELLWIDTH, --cellwidth CELLWIDTH
                        set cell width (px)
  -lineh LINEHEIGHT, --lineheight LINEHEIGHT
                        code/text line-height (%)
  -alt, --altlayout     alt markdown layout
  -vim, --vimext        toggle styles for vim
  -T, --toolbar         make toolbar visible
  -N, --nbname          nb name/logo visible
  -r, --reset           reset to default theme
```

## 利用可能なテーマ

```bash
% jt -l
Available Themes: 
   chesterish
   grade3
   oceans16
   onedork
```

## テーマをインストール 

```bash
% jt -t onedork
You are using Python 3.5
only versions 2.7, 3.3, 3.4 support custom settings
Installing onedork theme with default settings
```
Python 3.5だと使えない機能があるみたいですが、とりあえず色が変わったので、しばらくこれで使ってみようと思います。

![2016-09-20_10-52-25.png](https://qiita-image-store.s3.amazonaws.com/0/42252/b262827e-2a36-0e2b-1b5f-a1650a9e4122.png)
the NTP socket is in use, exiting

# the NTP socket is in use, exitingとなる
cron登録しているntpdateが
>20 Sep 02:00:06 ntpdate[14826]: the NTP socket is in use, exiting

と言い続ける。
ntpdateにオプション u を付ける。
>00  * * * * /usr/sbin/ntpdate -u ntp.nict.jp 1> /dev/null

オプション詳細 ＞ [http://itpro.nikkeibp.co.jp/article/COLUMN/20070418/268713/?rt=nocnt](http://itpro.nikkeibp.co.jp/article/COLUMN/20070418/268713/?rt=nocnt)
gitのdiff, addをfzf でインタラクティブに

こんな感じです。

![out.gif](https://qiita-image-store.s3.amazonaws.com/0/97723/53b700a0-042e-e3bf-6d01-eb5b08a57170.gif)

# 概要
Git管理下で作業していると開発に夢中になって、気付いたらワーキングディレクトリがたくさんのファイルで溢れている！
という状況にしばしば陥るときはありませんか？
ここで思い出すんです。。。
(**commitの粒度は小さくしないと怒られる！！**)
そこで僕はいつも `git diff` で差分見て、良い感じに `git add` して `git commit` しているんですけど、
これがまた面倒臭い作業でして、もっと楽にできないのか！と思い、fzfで選択的対話的に`diff add`できるスクリプトを書きました。
(注：そうなる前に都度コミットするように気を付けましょう)

# 環境
- Mac OSX El Capitan 10.11.5
- Zsh 5.2
- fzf

fzfは選択的インターフェースで曖昧検索ができるコマンドです。

- https://github.com/junegunn/fzf
- [おい、peco もいいけど fzf 使えよ](http://qiita.com/b4b4r07/items/9e1bbffb1be70b6ce033)

# スクリプト

```zsh:.zshrc
fadd() {
  local out q n addfiles
  while out=$(
      git status --short |
      awk '{if (substr($0,2,1) !~ / /) print $2}' |
      fzf-tmux --multi --exit-0 --expect=ctrl-d); do
    q=$(head -1 <<< "$out")
    n=$[$(wc -l <<< "$out") - 1]
    addfiles=(`echo $(tail "-$n" <<< "$out")`)
    [[ -z "$addfiles" ]] && continue
    if [ "$q" = ctrl-d ]; then
      git diff --color=always $addfiles | less -R
    else
      git add $addfiles
    fi
  done
}
```

ざっくり言うと
`git status`で**unstaged** or **untracked**なものを fzf に渡して

- `Ctrl-d` で `diff`
- `Enter` で `add`

しています。

シェルスクリプト初心者なので間違いがあるかもしれませんが、一応ソースコードを追って説明します。

#### ローカル変数

- out (fzfからの出力)
- q (コマンド)
- n (複数選択の場合のファイル数)
- addfiles (実際にaddするファイル)

#### git status --short
これは [XY] [path] という形式で、
Xがステージされたもので、Yがステージされていないものです。

```
$ git status --short
 M .vimrc       # modifiedでunstaged
M  .zshrc       # modifiedでstaged
?? newfile      # untracked
A  sample.rb    # new fileでstaged
```

わかりにくいですね^^;
他にもあるので詳しくは[Gitのdocs](https://git-scm.com/docs/git-status)を見て下さい。

#### awk
`awk '{if (substr($0,2,1) !~ / /) print $2}'`
先程の`git status --short`から1行ずつ受取り、
status[XY]のうち、Yがブランクでないという条件で、unstaged, untrackedなファイルを判別し、
2列目(ファイルパス)をfzfに渡します。

#### fzf
--expectオプションで、ファイル選択のデフォルトキーである*Enter*の代わりに*Ctrl-d*で選択可能にしています。
そして、ローカル変数 out に コマンド、ファイル、、、、(--multiにより*Ctrl-i*で複数選択可)と格納されます。

あとは、qにコマンドを(*Ctrl-d* or *Enter*)
nにファイル数を
addfilesにファイルを入れて

*Ctrl-d* -> `git diff`
*Enter* -> `git add`

としています。

最後の方雑になってしまいました。。。
何か、問題点や改善点がありましたらコメントして頂けると幸いです！！

githubでdotfiles管理しているので宜しければご覧になってください^^
https://github.com/yuuuuuki/dotfiles

# 参考
[Browsing git commits with fzf](http://junegunn.kr/2015/03/browsing-git-commits-with-fzf/)