OmniAICreator/Qiita-1.07M huggingface dataset:
Proxy環境下でいろいろする

勤務先で環境構築しようとしたらProxyがあって事あるごとにハマるのでメモしておきます
ハマったら増やします
ユーザ名/パスワード/URL/ポートは環境に合わせて変えてください

## bash

```bash:.bashrc
proxy=http://USERNAME:PASSWORD@ADDRESS:PORT
export http_proxy=$proxy
export https_proxy=$proxy
# 特定のアドレスでProxyを使いたくない場合
export no_proxy=127.0.0.1,localhost
```

### sudo
`sudo`で何か処理する時、環境変数は引き継がれないのでProxy変数が使われません
昔は引き継がれましたが最近は引き継がれないようです
`-E`オプションを使うと環境変数が引き継がれ、Proxy変数も引き継がれます
意外とこれをつけるだけでうまくいくこともあります

```bash
$ sudo -E hogehoge
```
## Cygwin

シェルがbashならbashと一緒です
が、CygwinはWindowsのレジストリを読めるので設定値を持ってこれます
インターネットオプション->接続->LANの設定->プロキシサーバの設定値を読めます

```bash
proxy=`cat /proc/registry/HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet\ Settings/ProxyServer 2>/dev/null`
export http_proxy=$proxy
export https_proxy=$proxy
```

## gem
* [Proxy環境でgem install](http://qiita.com/wakaba260/items/f7794cea3fac8c694dcf)

```bash
$ gem install パッケージ名 -r -p http://USERNAME:PASSWORD@ADDRESS:PORT
```
## apm(Atom)
* [Is there any proxy settings?](https://discuss.atom.io/t/is-there-any-proxy-settings/710/32)
* [Unable to install packages behind corporate proxy #322](https://github.com/atom/apm/issues/322#issuecomment-96430856)

```bash
$ export ATOM_NODE_URL=http://gh-contractor-zcbenz.s3.amazonaws.com/atom-shell/dist
$ apm config set proxy "http://USERNAME:PASSWORD@ADDRESS:PORT"
$ apm config set https-proxy "http://USERNAME:PASSWORD@ADDRESS:PORT"
# 確認
$ apm config get https-proxy
$ apm config get proxy
```
環境変数の`http_proxy`と`https_proxy`にも設定すること

## apt-key
* [ubuntuで認証プロキシ配下からapt-keyを使うとき](http://qiita.com/nmatsui/items/816051fe6445db116e9a)

```bash
sudo apt-key adv --keyserver-option http-proxy=http://USERNAME:PASSWORD@ADDRESS:PORT --keyserver hkp://KEYSERVER:PORT --recv-keys KEYSTRING
```
`--keyserver-option`は`--recv-keys`の前にあったほうがいいみたい

## npm(Node.js)

* [proxy環境下でのnpm config設定](http://qiita.com/tenten0213/items/7ca15ce8b54acc3b5719)

```bash
$ npm config set proxy http://USERNAME:PASSWORD@ADDRESS:PORT
$ npm config set https-proxy http://USERNAME:PASSWORD@ADDRESS:PORT
```

## Apache Maven
* [社内でMaven実行時、外部のMavenリポジトリサーバーからダウンロードができない時の対処方法](http://qiita.com/nikuyoshi/items/567f78e07e5733907491)
* [プロキシ環境下でのHomebrewとMavenのインストール方法](http://qiita.com/gishi_yama/items/2e92d3d72e21c74704cb)

以下のどちらかまたは両方を設定することでプロキシ経由で利用できます
両方やっておけば安心

* 設定ファイル(settings.xml)を編集する
* 環境変数を設定する

### settings.xml
Ubuntuにて`apt-get`でmavenをインストールした場合、`/usr/share/maven/conf/settings.xml`にグローバルの設定ファイルがあります。
`~/.m2/settings.xml`にも記述可能です。

```settings.xml
<proxies>
    <proxy>
        <id>ID(option)</id>
        <active>true(or false)</active>
        <protocol>http(or https)</protocol>
        <username>USERNAME(option)</username>
        <password>PASSWORD(option)</password>
        <host>HOST</host>
        <port>PORT</port>
        <nonProxyHosts></nonProxyHosts>
    </proxy>
</proxies>
```
### 環境変数
`JAVA_OPTS`による指定と同じです
Windows  > Link > Partition type 

現在調査中のWindowsPCのパーティションタイプに関して以下のリンクを見つけた。

https://vissesh.home.xs4all.nl/multiboot/multiboot/extra/partitie.txt

不明であったパーティションのタイプはこのリストに記載されているが、用途は不明のまま。

こちらの方が一般向けだろうか。
https://en.wikipedia.org/wiki/Partition_type
[Laravel]Monologを使ってSlackに通知できたらええやん？したいやん？

# Monologを使ってSlackへ通知したい

現在運用しているサービスの通知を全て `Slack` で受け取りたい

ここから全ては始まった。＼(^o^)／ﾊｼﾞﾏﾀ

# LaravelではMonologを使っている

現在のサービスではフレームワークに`Laravel`を使用しています。

ログは`Monolog`を使っている。

よくよく調べてみると、、、おっ簡単に出来そうやん！！

# よっしゃ、いっっちょやってみっか！

ということでやってみるで。

# Monologのドキュメントを眺める

ふむふむ  φ(ﾟДﾟ )ﾌﾑﾌﾑ…

[Monolog-Github](https://github.com/Seldaek/monolog)

あった！

[Handlers, Formatters and Processors](https://github.com/Seldaek/monolog/blob/master/doc/02-handlers-formatters-processors.md)

コレの中の

[SlackHandler](https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/SlackHandler.php)

これやん！

# SlackHandler使ってみるで

## まずはSlackの設定を作るやで

`Laravel`のconfigに設定を作るやで
`config/slack.php` みたいな感じ。

```php
<?php

/**
 * Slack出力設定を行います。
 */

return [

    'slack' => [
        'token' 　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　=> [slack APIのトークン],
        'channel' 　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　=> [slack通知したいチャンネル名 etc],
        'name' 　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　=> '通知した時の通知者名',
        'use_attachment_message'　　　　　　　　　　　　=> true,
        'icon_emoji' 　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　=> [通知した時のアイコン],
        'over_notification_log_level' => [どのエラーレベル以上でslack通知するか](\Monolog\Logger::ERROR とか),
        'use_bubble' 　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　=> true,
        'use_short_attachment' 　　　　　　　　　　　　　=> true,
        'use_context_and_extra' 　　　　　　　　　　　=> true,
    ],

];
```

## MonologにSlackHandlerを追加するやで

```php
// slackのconfigを取得
$slackConfig = \Config::get('slack.slack');

\Log::getMonolog()->pushHandler(
    new \Monolog\Handler\SlackHandler(
        $slackConfig['token'],
        $slackConfig['channel'],
        $slackConfig['name'],
        $slackConfig['use_attachment_message'],
        $slackConfig['icon_emoji'],
        $slackConfig['over_notification_log_level'],
        $slackConfig['use_bubble'],
        $slackConfig['use_short_attachment'],
        $slackConfig['use_context_and_extra']
    )
);
```

## あとはログするだけやで！

`over_notification_log_level` を `\Monolog\Logger::ERROR` を設定した場合

```php
// これはSlackへ通知される
\Log::error('Slackへ届けこのログ！！');

// これはSlackへ通知されない
\Log::warning('Slackへ届けこのログ！！');
```

こんな感じで通知されるやで

![スクリーンショット 2016-07-22 12.58.35.png](https://qiita-image-store.s3.amazonaws.com/0/97615/9108f454-1b06-fc16-2c85-80765d4c1fe2.png)


とっても簡単にできました。
Monologの設定以上にSlackのAPIトークン取得のが時間かかったかもしれません。

拙い文章失礼しましたー。
FlashAirのluaでgarbage collection gc

# 概要

どうもメモリ不足がおこることあるらしい

```
LUA : not enough memory
```

実際起こった時にはこのようなエラーがでていた

# 結論

* [電子工作記録: FlashAirでLuaスクリプトを組む時のコツ](http://gpsnmeajp.blogspot.jp/2015/12/flashairlua_27.html)


```
collectgarbage()
```
【FileMaker】ケタ数分入力したら次に移動したい

というお問い合わせをいただきました。
はい。
FileMaker11をお使いのようでしたが、こちらはFileMaker12からしか環境がないので、FileMaker12でサンプルを作りました。

「コード」フィールドに12桁の数字または文字列が入ったら、次のデータの「コード」に移動する、という動きです。

実装は、スクリプトトリガで12桁に達したら移動する、という感じになります。

ケタ数チェックのスクリプトを作成します。
![12count_2.png](https://qiita-image-store.s3.amazonaws.com/0/60538/a866af6f-7612-e630-3d87-a415994839b6.png)
チェック後、12桁に達していたら、次の行へ移動してフィールドを「コード」にカーソルをおきます。

「コード」のスクリプトトリガとして、OnObjectModifyイベントにチェックスクリプトを設定します。
![12count_1.png](https://qiita-image-store.s3.amazonaws.com/0/60538/b4b78492-d7fc-b9f2-d9bf-da55eddd1ab1.png)




実際の動きは、以下から確認してみてください。
https://youtu.be/GnkZxUyzGDc
長過ぎる文字を・・・にする


一行の分にしか使えないらしい。

```html
<div class="message">
    <p class="content">先日はメッセージありがとうございました。ご質問いただいた件に関しまして、まず一つ目ですが特に必要な持ち物はありません。</p>
</div>

```

```css
.message {
	overflow: hidden;
	width: 90%;
	.content {
	  overflow: hidden;
	  text-overflow: ellipsis;	
	  white-space: nowrap;
	}
}
```
親要素の背景色だけ透過させて、子要素の文字は透過させたくない


#ポイント

- 普通にopacityだとどちらも透過する
- `background-color: rgba(#,#,#,#)` のようにすると背景だけ透過する
- 色コード（１６進数）-> rgb（１０進数）に変換する必要がある

#色コードの変換に使えるサイト

[ここ](http://www.kitaq.net/lib/rgb/ "ここ")のサイトを使いました。
サイドバーの高さをコンテンツ部分の100%にしたいとき


```html:index.html
<body>
	<div class="pageContainer">
	    @include('front.common._header')
	    
		<div class="l-sideMenu">
		    <ul class="menu">
		    	<li>メニュー</li>
		    	<li>メニュー</li>
		    	<li>メニュー</li>
		    </ul>
		</div>	  
	  
	    @yield('mainContents')    
	    @include('front.common._footer')
	</div>
</body>
```

```css:common.css
html, body {
  height: 100%;
}

/*ヘッダーからフッターまでを囲んだ要素*/
.pageContainer {
  position: relative;
  min-height: 100%;
}

.l-sideMenu {
  z-index: 1000;
  position: absolute;
  width: 250px;
  height: 100%;
```
Windows7 > 77.50KB パーティションの謎 > Boot Manager code | BitLocker Drive Encryption feature

ディスクのvolumeを拡張しようとした時に、Extend Volumeメニューが使えない時がある。

拡張したいパーティションのすぐ隣に別のパーティションがある場合にExtend Volumeできない。

実際に遭遇したのは77.50KBのパーティションがありExtend Volumeできない状況だった。

77.50KBについては以下が関連するのかもしれない。

https://technet.microsoft.com/en-us/magazine/gg441289.aspx

> This “stub” of a partition, which is new in Windows 7, serves two functions. First, it holds the Boot Manager code and the Boot Configuration Database. Sec¬ond, it reserves space for the startup files required by the BitLocker Drive Encryption feature. 


上記の日本語記事
https://technet.microsoft.com/ja-jp/windows/win7_tips65.aspx

しかしながら、Boot Code関連は100MBの方にあるような気もする。
未消化。
WEBレスポンススピード高速化委員会〜nginxでブラウザキャッシュ有効化編


前回までの高速化委員会
-----
![Screen Shot 2016-07-14 at 23.05.59.png](https://qiita-image-store.s3.amazonaws.com/0/10058/f62442de-95eb-3bd2-2fd7-7c44e2b4ec4a.png "Screen Shot 2016-07-14 at 23.05.59.png")

[WEBレスポンススピード高速化委員会〜nginxでgzip圧縮有効化編](http://qiita.com/master-of-sugar/items/71bc7f4c0746b0e04a07)で`POOR`を返上した。


今回はこちら
![Screen Shot 2016-07-22 at 12.14.35.png](https://qiita-image-store.s3.amazonaws.com/0/10058/0c140791-3454-3770-749d-ab0407d594b3.png "Screen Shot 2016-07-22 at 12.14.35.png")

ブラウザキャッシュを効果的に使いなさいよってお話だ。

ブラウザキャッシュを有効にするってどういうことだっけ？
-----
Googleさんにお伺いを立てると次のような回答が。

>キャッシュできるすべてのリソースで、Expires と Cache-Control: max-age のいずれか、Last-Modified と ETag のいずれかを指定することが大切です。

なるほど。やってみよう。

ブラウザキャッシュが有効になっていないことを確認する
-----

```
curl -I -H 'Accept-Encoding: gzip,deflate' http://www.noraneko.works
```

```
HTTP/1.1 200 OK
Server: nginx/1.8.1
Date: Fri, 22 Jul 2016 03:17:27 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
X-Powered-By: Express
ETag: W/"8dbd-lkDUGFuDSQ35k3PpKYHqdg"
Content-Encoding: gzip
```

`Etag`はあるが`Expires`がない。


nginx.confを編集してExpiresを有効にする
-----

以下のように追記する。キャッシュ期間は最低限の7日にしてみる。最長は1年が推奨されているみたい。

```nginx.conf
expires 7d;
```

再起動してもう一度試してみる。

```
curl -I -H 'Accept-Encoding: gzip,deflate' http://www.noraneko.works
```

```
HTTP/1.1 200 OK
Server: nginx/1.8.1
Date: Fri, 22 Jul 2016 03:20:33 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
X-Powered-By: Express
ETag: W/"8dbd-lkDUGFuDSQ35k3PpKYHqdg"
Expires: Fri, 29 Jul 2016 03:20:33 GMT
Cache-Control: max-age=604800
Content-Encoding: gzip
```

`Expires`ヘッダが付与された！！

ちょっと待て
-----
完全に静的なサイトで更新もほぼないならこれでいいのかもしれないけれど、`html`を動的に生成するWEBアプリなんかだとキャッシュされたら困る場合のほうが多い。
ある特定のコンテンツタイプのときだけキャッシュを有効にしてみよう。

```nginx.conf
map $sent_http_content_type $expires {
  default         off;
  text/css 8d;
  text/javascript 8d;
  application/javascript 8d;
  ~image/         30d;
}
expires $expires;
```

こんな感じで設定してみる。

```html
curl -I -H 'Accept-Encoding: gzip,deflate' http://www.noraneko.works
```

```
HTTP/1.1 200 OK
Server: nginx/1.8.1
Date: Fri, 22 Jul 2016 03:46:31 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
X-Powered-By: Express
ETag: W/"8dbd-lkDUGFuDSQ35k3PpKYHqdg"
Content-Encoding: gzip
```

```js
curl -I -H 'Accept-Encoding: gzip,deflate' http://www.noraneko.works/assets/js/scripts.js
```

```
HTTP/1.1 200 OK
Server: nginx/1.8.1
Date: Fri, 22 Jul 2016 03:46:35 GMT
Content-Type: application/javascript
Connection: keep-alive
X-Powered-By: Express
Cache-Control: max-age=691200
Last-Modified: Fri, 15 Jul 2016 15:44:40 GMT
ETag: W/"4ce-155ef3b2ddb"
Expires: Sat, 30 Jul 2016 03:46:35 GMT
Content-Encoding: gzip
```

うむ。想定通り。
あとでもっと細かく設定する。

リベンジ
-----
もう一度[ここ](https://testmysite.thinkwithgoogle.com/)で計測してみる。

![Screen Shot 2016-07-22 at 12.53.54.png](https://qiita-image-store.s3.amazonaws.com/0/10058/bd244d3a-fa60-41ac-5c08-fb9c36e5710d.png "Screen Shot 2016-07-22 at 12.53.54.png")

`GOOD`いただきました！！
でも1点かぁーーーーｗ
統計検定2級合格までの勉強方法

#サマリ
**統計検定2級を2016年6月に受験し、合格しました。**
その時の勉強についてです。
合格してもなお、理解しきれていなかい部分が多かったので、高校・大学数学を勉強してそのモヤモヤを克服しました。その内容を[「文系卒社会人が統計入門でのモヤモヤを克服した話」](http://qiita.com/FukuharaYohei/items/a53a8b9dbd5cef2a2562)に投稿しました。

|項目|内容 |
|:-----------------|:------------------|
| 取得目的             |機械学習や予測分析をするための基礎知識を得るため |
| 総勉強時間        |            24h(約2ヶ月) |
| 勉強開始前の状態 |統計の基礎を知っている程度(統計検定3級の過去問は満点に近いレベルで解けました)。大学文系卒で数学については数Ⅰ、A、Ⅱと数Cの一部を復習していた状態。|

#そもそも何で受験したか
そんなに深い意味はなかったです。年始に上司と目標設定したときに、ひとつの**勉強の目安**として受験を目標に設定しました。仕事で統計・分析などをやっているわけでなく、今後の方向性として機械学習などをやりたいがために、数学の基礎と統計を勉強しています。

#勉強方法
主に使った教材は以下の3つです。
[まずはこの一冊から 意味がわかる統計学 (BERET SCIENCE) ](http://amzn.to/2oP2Ixh)
[改訂版 日本統計学会公式認定 統計検定2級対応 統計学基礎](http://amzn.to/2oOK2h4)
[日本統計学会公式認定 統計検定 2級 公式問題集](http://amzn.to/2FxOMMt)
まずは「この一冊から 意味がわかる統計学 (BERET SCIENCE)」を何度か読んで演習をして理解しました。非常にわかりやすくためになりました。
次に、「日本統計学会公式認定 統計検定2級対応 統計学基礎」ですが一読した程度です。わからない、理解に時間がかかりそうな部分は、ガンガン飛ばして行きました。おそらく合格した今でもわかっていない部分あると思います。
最後に、「公式問題集」をひたすらやっていました。だいたい、初回は6割くらいの正答率でわからないとこを覚えていくやり方です。
とにかく、**理解に時間がかかりそうな部分は無視**しました。「公式問題集」を見るとわかるのですが、わかるところで確実に正解する力の方が重要です。
#試験について
時間が特に足りないでもなく、**マイペースで解いて半分くらいは再確認する時間がありました。**自己採点していませんが、8割位は正解していると思います。
#感じたこと
**微分積分は事前に復習しておいてよかった**と感じました。よく知らなくても合格レベルは問題ないと思いますが、理解の程度などがやっぱり違います。
**確率は知らないと厳しい**です。Combinationなどは基礎なので覚えておきましょう。「意味がわかる統計学」で書かれていたと思います。
私の状況からすると、高校数学をすべて復習し終えてからでもよかったかとも感じました(特に効率面で)。今回の受験は上司との約束にしていたので、少し寄り道です。

※[「文系卒が統計・機械学習を理解するための数学について」](http://qiita.com/FukuharaYohei/items/0a66c37091dc27c71fe6)という記事も投稿しましたので併せて参照ください。
【Docker】FluentdでとElasticsearchとRe:dashでログ管理


DockerでFluentdとElasticsearchとRe:dashを起動してログの収集と解析を行います。

## Docker

dockerとdocker-composeを導入

CentOSであれば下記を参照
[CentOS6.5にdockerとdocker-composeをインストール](http://qiita.com/narumi_/items/3bc9967b7fc4576cf146)

## 前提

* ログは行にJSON
* Fluentd & Elasticsearchは同じサーバ上に存在

ログ例

```:hoge_log
{ "type": "chatlog", "name": "hoge1", "text": "hoge1" }
{ "type": "chatlog", "name": "hoge2", "text": "hoge2" }
{ "type": "chatlog", "name": "hoge3", "text": "hoge3" }
{ "type": "chatlog", "name": "hoge4", "text": "hoge4" }
{ "type": "chatlog", "name": "hoge5", "text": "hoge5" }
```


## Fluentd & Elasticsearch

```bash
$ mkdir ~/workspace
$ cd ~/workspace
```

### Fluentd

```bash
$ mkdir fluentd
$ cd fluentd
$ mkdir plugins
$ vi Dockerfile
$ vi fluent.conf
```

```:Dockerfile
FROM fluent/fluentd:latest-onbuild

USER fluent

WORKDIR /home/fluent
ENV PATH /home/fluent/.gem/ruby/2.3.0/bin:$PATH
RUN gem install fluent-plugin-secure-forward
RUN gem install fluent-plugin-elasticsearch

EXPOSE 24284

CMD fluentd -c /fluentd/etc/fluent.conf -p /fluentd/plugins -vv
```

```fluent.conf
<source>
  type tail
  path /var/log/hoge/[log file] # 収集するログファイル名を指定
  tag json.hoge
  pos_file /var/log/hoge/[log file].pos # 収集するログファイル名を指定
  format json
</source>

<match json.**>
  type copy

  <store>
    type stdout
  </store>
  
  <store>
    type elasticsearch
    host localhost   # elasticsearchのホスト
    port 9200        # elasticsearchのポート
    logstash_format true
  </store>
</match>
```

### Elasticsearch

```bash
$ mkdir elasticsearch
$ cd elasticsearch
$ vi Dockerfile
```

```:Dockerfile
FROM elasticsearch

RUN bin/plugin install mobz/elasticsearch-head

EXPOSE 9200

CMD ["bin/elasticsearch", "-Des.insecure.allow.root=true"]
```

### 起動

```bash
$ cd ~/workspace
$ vi docker-compose.yml
```

```docker-compose.yml
elasticsearch:
  build: elasticsearch
  ports:
    - 9200:9200
fluentd:
  build: fluentd
  ports:
    - 24284:24284
  volumes:
    - [log folder]:/var/log/hoge # 収集するログフォルダを指定
```

```bash
$ docker-compose up
```

ElasticsearchのWebページ

```URL
http://[IP]:9200/_plugin/head/
```

## Re:dash

詳しくは下記を参照
[Re:dashをdockerで起動する](http://qiita.com/narumi_/items/2af0657802af1d3e2364)

### データソースを追加

Settings > DATA SOURCES > NEW DATA SOURCES

Base URLはこんな感じ

```
http://[IP]:9200
```

![スクリーンショット 2016-07-22 12.23.42.png](https://qiita-image-store.s3.amazonaws.com/0/33251/cbe2a500-97de-b4be-64c4-ec235686ca3d.png "スクリーンショット 2016-07-22 12.23.42.png")
WordPress 投稿（固定ページ）本文欄で使えるタグで作っておいたほうがいいスタイル

テーマの `style.css` で作っておいたほうがいいスタイル。
デザイナーさんにも教えてあげよう。

ソースの例はテーマユニットテストのデータより。
https://codex.wordpress.org/Theme_Unit_Test

![theme-unit-test.png](https://qiita-image-store.s3.amazonaws.com/0/18348/4de58392-3a6d-039e-2802-e8218254398b.png)

ビジュアルエディタで使える `blockquote`, `pre`。
ヘッダーやウィジェットなどでも使われ、影響範囲の大きい `h1`〜`h6`, `ul`, `ol`。
プラグインなどによるビジュアルエディタの拡張で使えそうな `table`, `dl`。

# ソース
Sassです。cssはよしなに。

```scss:entry-content.scss
.page-content,
.entry-content,
.mceContentBody {
	// styles in entry-content.
	/* Headings */
	h1 {
	}
	h2 {
	}
	h3 {
	}
	h4 {
	}
	h5 {
	}
	h6 {
	}
	/* Blockquotes */
	blockquote {
	}
	/* Tables */
	table {
		th {
		}
		td {
		}
	}
	/* Definition Lists */
	dl {
		dt {
		}
		dd {
		}
	}
	/* Unordered Lists (Nested) */
	ul {
		li {
		}
	}
	/* Ordered List (Nested) */
	ol {
		li {
		}
	}
	/* Anchor Tag (aka. Link) */
	a {
	}
	/* Preformatted Tag */
	pre {
	}
}
```
`.page-content`, `entry-content` は投稿及び固定ページの本文部分。
`.mceContentBody` はビジュアルエディタ用。
このクラスの中に入れておくことでヘッダーやフッターサイドバー（ウィジェット）は影響受けない。
Rails 自分がフォロー、自分をフォロー、自分の友達、各一覧を取得　※自分用メモ

【user.rb】
relationshipsテーブルは中間テーブル(多対多のテーブル)
以下はどちらもrelationshipモデル(relationshipsテーブル)との関係性を定義
2つめをreverse_relationshipsという定義名にしたのは、単純に定義名で判断しやすくするため。
但し、このままだとreverse_relationshipsというテーブルを参照してしまうため、class_nameオプションでモデル名を指定している。参照させたいRelationshipモデルを明記している。

・自分をフォローしているuserとの関係性を定義
・usersテーブルのidカラムと、relationshipsテーブルのfollower_idカラム
has_many :relationships, foreign_key: "follower_id", dependent: :destroy

・自分がフォローしているuserとの関係性を定義
・usersテーブルのidカラムと、relationshipsテーブルのfollowed_idカラム
has_many :reverse_relationships, foreign_key: "followed_id", class_name: "Relationship", dependent: :destroy

# フォロー、フォロワー関係
・自分がフォローしているuserを取得
has_many :followed_users, through: :relationships, source: :followed

・自分をフォローしているuserを取得
has_many :followers, through: :reverse_relationships, source: :follower

・友達一覧を取得
def friend
　followers && followed_users # followers、followed_usersは上のアソシエーションの定義
end

【relationship.rb】
・relationshipsテーブルのfollower_idカラムとusersテーブルのidカラムが参照関係にあることを定義
belongs_to :follower, class_name: "User"

・relationshipsテーブルのfollowed_idカラムとusersテーブルのidカラムが参照関係にあることを定義
belongs_to :followed, class_name: "User"
rails 4.2 paths

https://github.com/rails/rails/blob/4-2-stable/railties/lib/rails/paths.rb

https://github.com/rails/rails/blob/4-2-stable/railties/lib/rails/engine/configuration.rb#L38

https://github.com/rails/rails/blob/4-2-stable/railties/lib/rails/application/configuration.rb#L79
ScalaFXを使ってみた

JavaのGUIライブラリのJavaFXは当然Scalaから使える。しかしScalaネイティブではないのでJavaFXをScalaらしく使えるようにしたライブラリがScalaFXである。次のJavaプログラムはボタンを表示してクリックするとコンソールに文字を出力する単純なプログラムである。


```java
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FxButton extends Application {

    public static void main(final String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(final Stage stage) throws Exception {
        Button button = new Button("Hello World");
        button.setOnMouseClicked(ev -> System.out.println("Hello World"));
        VBox vbox = new VBox(button);
        final Scene scene = new Scene(vbox);
        stage.setScene(scene);
        stage.setTitle("Hello");
        stage.show();
    }
}
```

これをScalaにそのまま書き直すと次のようになる。

```scala
import javafx.application.Application
import javafx.event.EventHandler
import javafx.scene.Scene
import javafx.scene.control.Button
import javafx.scene.input.MouseEvent
import javafx.scene.layout.VBox
import javafx.stage.Stage

object JavaFxHello {
  def main(args: Array[String]) {
    val hello = new JavaFxHello
    hello.run(args)
    // Application.launch(classOf[JavaFxHello], args: _*) // ここで呼ぶときはこちらを使う
    // Application.launch(args: _*) // NG
  }
}

class JavaFxHello extends Application {
  def run(args: Array[String]) {
    Application.launch(args: _*)
  }

  override def start(stage: Stage) {
    val button: Button = new Button("Hello World")

    val handler = new EventHandler[MouseEvent] {
      override def handle(t: MouseEvent) {
        println("Hello!")
      }
    }

    button.setOnMouseClicked(handler)
    val vbox: VBox = new VBox(button)
    val scene: Scene = new Scene(vbox)
    stage.setScene(scene)
    stage.setTitle("Hello")
    stage.show()

  }


}
```

わりとそのままである。Application.launchを呼ぶところが若干Javaと違った感じになっているのだがApplication.launchが中でちょっと変わったことをしているせいで`object`の中で呼ぶとき気をつけないといけない。あとイベントハンドラがJavaでlambdaで書けたものが後退している。これでも実際は問題ないと思うがScalaFXを使うともうちょっときれいに書ける。

```scala
package example.lambda

import scalafx.Includes._
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.Scene
import scalafx.scene.control.Button
import scalafx.scene.layout.VBox

object ScalaFxHello extends JFXApp {
  stage = new PrimaryStage {
    title = "Hello"
    scene = new Scene {
      root = new VBox {
        children = new Button("Hello Button") {
          onMouseClicked = handle {
            println("hello")
          }
        }
      }
    }
  }
}
```

なおイベントを引数に取りたいイベントハンドラも次のようにScalaの関数でそのまま書けるようになる。

```scala
          onMouseReleased = (t:MouseEvent)=> println("Hello")
```
vagrantでtsungが動かず困った。

httpsのサイトの負荷ができずに困っていてようやく解決。vmの選択が重要でした。

最初は precise64。これで apt-getしてもtsungは1.4.1でした。古い！tsungのconfigの書式が古いからだいぶ怒られるという状態でした。しかも治して実行してもサーバーに到達せずにsslのハンドシェイク中のエラーログが貯まるだけでした。
次に選んだのはbento/centos-6.7。yum installでtsungは1.6.0になり、tsungのconfigもちゃんと解釈するのですが、やはりsslののハンドシェイク中のエラーログが貯まるだけでした。
erlangのシェル、erlがそもそも失敗するので、tsung自体では無さそう。Eshellは5.8.5、erlangはR14でした。

で結局、bento/centos-7.2にしてすんなり解決。只の選択ミスや〜ん。Eshellは5.10.4、erlangはR16となりました。

httpsがちゃんと動くかどうかは、こちらの記事 [Use tsung to test https site](https://jackiechen.org/2015/12/04/use-tsung-to-test-https-site/) の最後に書かれているコマンドで確認できます。

後は、こちらの記事 [負荷テストツールの tsung を使ってみる](https://toe.bbtower.co.jp/20160407/93/)の**インストール方法**を参考に、provisioning.shに、sudo yum -y install わらわら と書いておけばOKです。
リストフラット

http://qiita.com/shiracamus/items/fb85943ed34d5ec09c4f
メモ。深さ指定もできる。`flatten(A,1)`

```py:
>>> flatten=lambda i,d=-1:[a for b in i for a in(flatten(b,d-(d>0))if hasattr(b,'__iter__')and d else(b,))]
>>> A=[[0, 1, 2, 3,[0, 1, 2, 3, 4, 5, 6, 7, 8]],0, 1, 2, 3, [0, 1, 2, 3, 4, 5, 6], 5, 6, 7, 8]
>>> flatten(A)
[0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 5, 6, 7, 8]
```
C#の引数の最大数は65536らしい

仕様上の上限は分からないが、
65537個目の引数を追加すると、
コンパイル時にコンパイラが例外をはいて止まる模様。

![image](https://qiita-image-store.s3.amazonaws.com/0/34050/40d13bc4-4726-96d8-fdd8-551eba123e9e.png)

Visual Studio 2015で確認。
Bash | if の中に書くアレを単体で書くと終了コードが変わる

# 検証

条件式だけを単体で書き、その後の終了コードの変化を見てみる。

```bash:exit_code.sh
echo exit code is $? at first

[[ 'A' == 'A' ]]

echo exit code is $? after matched

[[ 'A' == 'B' ]]

echo exit code is $? after not matched
```

# 結果

マッチに失敗した後の終了コードが、エラーを示す `1` に変わっているのが分かる。

```bash:exit_code.sh
$ bash exit_code.sh

exit code is 0 at first
exit code is 0 after matched
exit code is 1 after not matched
```

# コード的解決策

「if 文を書きたくない、`&&` でつなげて簡潔に書きたい」という場合は、最後に `|| true` を入れてあげれば良さそう。

```bash:i_want_simple_syntax.sh
[[ $WORD == 'A' ]] && echo 'WORD is A' || true
[[ $WORD == 'B' ]] && echo 'WORD is B' || true

echo exit code is $?
```

# 結果

```bash
$ WORD=A bash i_want_simple_syntax.sh

WORD is A
exit code is 0
```

# if 文の中での検証

では、 if 文の中ではどうなるのだろう。


```bash:exit_code_in_if.sh
echo exit code is $? at first

if [[ 'A' == 'A' ]]
then
  echo exit code is $? in matched if 
fi

echo exit code is $? after matched if

if [[ 'A' == 'B' ]]
then
  echo a is b
else
  echo exit code is $? in not matched else
fi

echo exit code is $? after not matched if
```

# 結果

この場合は「マッチしなかった判定の else の中」でだけ、終了コードが変わっているのが分かる。

どうやら if は終了コードの変化を「閉じ込めて」くれるらしい。
というより、その仕組を利用したのが、そもそも `if / then / else` なのかも。

```bash
$ exit_code_in_if.sh

exit code is 0 at first
exit code is 0 in matched if
exit code is 0 after matched if
exit code is 1 in not matched else
exit code is 0 after not matched if
```

# 環境

- bash 3.2

# 参考

- [Bash: exit code of variable assignment to command substitution](http://stackoverflow.com/questions/20157938/bash-exit-code-of-variable-assignment-to-command-substitution)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
eclipse、tomcat環境設定メモ

うっかり躓いたのでメモっとく（ほんとに個人用）

All in One Eclipse Neon (4.6.0) を入れてみた。
なんか、tomcatが最初から入ってるらしい。(一部勘違いだった)
設定画面も出るし

既存プロジェクトを入れて動作確認を行欧とするも動かず。
なんか設定の問題だと思い込みゴソゴソする。。。
動かん、解決策を検索する。
http://qiita.com/cypher256/items/2384d6797ac49740f217

Tomcat対応とか書いてあるやん・・・
「Tomcat プラグイン削除」
あれれ、入ってないんかい
「install」アイコンををEclipse へドラッグしてインストールできるとかイカスな。（ウィルスチェックできないけど）
Tomcatは動きました。

サーバに読み込んでたらOutOfMemory
メモリの設定変えんとね。
検索
http://qiita.com/tony_factories/items/06edfa2b26df2df709d0

マンマのが在った。
参照先の
http://d.hatena.ne.jp/necoyama3/20090610/1244652868
こっちのが細かく書いてある。

とりあえず、1024mで設定した。

めでたく動いた。

思い込みで回り道する事がよくある。
紹介記事は良く読んでから使用するのが実は近道。
CKANの地図を変更する

CKANにてckanext-spatial もしくは ckanext-geoviewを使用しててMapQuestの地図表示してる場合、気がつけば地図データが以下のものに変わっちゃってるんじゃないでしょうか。

![0.png](https://qiita-image-store.s3.amazonaws.com/0/20818/89f6af73-2a00-bff6-784c-30ec58835f4f.png)

こちら、MapQuest がタイル地図のダイレクトアクセスのサポートやめちゃうたのが理由だったりします。
詳しくは[こちら](http://devblog.mapquest.com/2016/06/15/modernization-of-mapquest-results-in-changes-to-open-tile-access/)。

そんなわけで、CKANで使用する地図を他の地図に切り替える方法の例をあげます。

下記は、[Maptiles](https://maptiles.xyz/) への切り替えの例。

まず、ini(production.iniとか)ファイルの変更

```
 ckanext.spatial.common_map.type = custom
 ckanext.spatial.common_map.custom.url = http://{s}.osm.maptiles.xyz/{z}/{x}/{y}.png
 ckanext.spatial.common_map.attribution = &copy <a href="http://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a> contributors. Tiles provided by <a     href="https://maptiles.xyz">MapTiles</a>.
```

ただ、上記だたおOpenLayer側のViewerのurlのバインド変数{s}をよろしく扱ってくれないので、あんまり良くないのかもしれませんが
OLviewerを使用している方は、下記のように書いちゃった方よいかもしれません。

```
-    ckanext.spatial.common_map.custom.url = http://{s}.osm.maptiles.xyz/{z}/{x}/{y}.png
+    ckanext.spatial.common_map.custom.url = http://c.osm.maptiles.xyz/{z}/{x}/{y}.png
```
***c***は[abc]ですね、そのどれかを。

それで、これだけだと、reclineが表示している地図が切り替わりません。csvとかから緯度経度指定して地図を表示する機能ですね。
そちらを切り替えるには、

ckanext/reclineview/theme/public/vendor/recline/recline.jsの2281行目あたりを修正します。

```
-    var mapUrl = "//otile{s}-s.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.png";
-    var osmAttribution = 'Map data &copy; 2011 OpenStreetMap contributors, Tiles Courtesy of <a href="http://www.mapquest.com/" target="_blank">MapQuest</a> <img src="//developer.mapquest.com/content/osm/mq_logo.png">';
-    var bg = new L.TileLayer(mapUrl, {maxZoom: 18, attribution: osmAttribution ,subdomains: '1234'});
+    var mapUrl = "//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png";
+    var osmAttribution = '©<a href="http://openstreetmap.org" target="_blank">OpenStreetMap</a> contributors';
+    var bg = new L.TileLayer(mapUrl, {maxZoom: 19, attribution: osmAttribution});
```

他のタイル地図プロバイダも試したいって方は、[こちら](https://github.com/ckan/ckanext-spatial/issues/157)に色々書いてます。
他にも必要な修正箇所がありそうですが、随時メモれればと。
swiftで効果音の再生終了後に処理を実行する

つまづいたのでメモ。
効果音を鳴らしてから、録音を開始したい時などに。
(Swift3.0,Xcode8 beta3)

```swift:SoundCompletion.swift
 
//通知音を選択
let soundIdRing:SystemSoundID = 1057
                    
//通知音を再生終了時のコールバックを指定
AudioServicesAddSystemSoundCompletion(soundIdRing, nil, nil, { (soundIdRing, nil) -> Void in
                        
//再生終了後に実行したいコード
print("hoge")
                        
}, nil)

//音を鳴らす                    
AudioServicesPlaySystemSound(soundIdRing)

```
動的にinput要素を追加した後、Idを認識しない問題

```
var div_element = document.createElement("div");
      div_element.innerHTML = '<input type="checkbox" id="a">'+storage.getItem('0');
      var parent_object = document.getElementById("hoge");
      parent_object.appendChild(div_element);
```
上のコードでinput要素のcheckboxをaというId名でHTMLに追加しました。
その次に以下のfunctionでcheckboxがtrueならwwという配列に要素を追加したいです。

```
var check=document.getElementById('a');

function hogehoge(){
        if (check.checked===true) {
          ww+=storage.getItem('0')+' ';
        }}
```

実行するとUncaught TypeError: Cannot read property 'checked' of nullとエラーが出るのですが原因はなんでしょうか？
おそらく、function hogehogeが後から追加したinput要素のIdを認識していないからだと思うのですが、解決策としてどうすればいいでしょうか？
Windows7 で Android向けの OpenCVと OpenCV Contribをビルドする

## 準備

Android SDK/NDK, CMakeと GNU Makeを用意

* CMake (https://cmake.org/download/)
* Make for Windows (http://gnuwin32.sourceforge.net/packages/make.htm)

* OpenCV (https://github.com/opencv/opencv)
* OpenCV Contrib (https://github.com/opencv/opencv_contrib)

展開した OpenCVと OpenCV Contribのディレクトリは同じ階層に置く

ビルド作業用ディレクトリを作って移動

```shell-session
mkdir -p opencv/platforms/build_android_arm
cd opencv/platforms/build_android_arm
```

## バッチファイル

build.bat

```bat
@echo off
cd /d %~dp0

SET ANDROID_ABI="armeabi-v7a"
SET API_LEVEL=24
SET NDK_ROOT="C:\Android\android-ndk-r12b"

SET WD=%~dp0
SET EXTRAMODULES=%WD%\..\..\..\opencv_contrib\modules
SET INSTALL_DIR=%WD%\android_opencv\opencv

cmake -G "Unix Makefiles" ^
      -DCMAKE_TOOLCHAIN_FILE=..\android\android.toolchain.cmake ^
      -DOPENCV_EXTRA_MODULES_PATH="%EXTRAMODULES%" ^
      -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON ^
      -DWITH_CUDA=OFF ^
      -DWITH_MATLAB=OFF ^
      -DBUILD_ANDROID_EXAMPLES=OFF ^
      -DBUILD_DOCS=OFF ^
      -DBUILD_PERF_TESTS=OFF ^
      -DBUILD_TESTS=OFF ^
      -DANDROID_NDK="%NDK_ROOT%" ^
      -DANDROID_NATIVE_API_LEVEL=%API_LEVEL% ^
      -DANDROID_ABI="%ANDROID_ABI%" ^
      ..\.. ^
```

## 実行
コマンドプロンプトから

```
build.bat
make
```
20分くらいかかる


### TODO 
* static libraryは作れたけど shared libraryは作れないの?
* contribのライブラリ、 Java wrapperが無いのでそのままでは使えない..
Apple Developer Program更新手続きでカード決済できない障害が発生中

## 2016/08/01 追記

どうやら復旧してる模様。

----
のもよう。

ライセンスが期限が切れそうだったので更新しようと思ったら、クレカの認証が通りませんでした。
ツイッターでつぶやいている方がいらっしゃったのでご紹介。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ios developer program 更新の決済ができない。appleサポートに訊いたら決済できない不具合が発生中とのこと。PCで決済していたのでMac,iPhoneを薦められたので、iPhoneでやってみたが変わらず。</p>&mdash; 片麻痺 奮闘中 (@teijyou) <a href="https://twitter.com/teijyou/status/756287076526542848">2016年7月22日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

手元のMacのsafariでやってもダメでした。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ios developer program 更新の決済ができない問題は10日前から発生。<br>更新できないまま期限を迎えたらどうなるの?ときいたらサポートに訊いたら1週間延ばして対応しますとのこと。ギリギリの人はサポートに電話してみてわ?</p>&mdash; 片麻痺 奮闘中 (@teijyou) <a href="https://twitter.com/teijyou/status/756293326014287873">2016年7月22日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">iOS Developer programの更新で、今、サイトの障害によりカード会社の決済を拒否される人(visa,master)は、Apple Storeギフトカード(iTunes Cardではない）を買えば更新できるらしいぞ。</p>&mdash; ねこみみみ (@nekomimimi) <a href="https://twitter.com/nekomimimi/status/756072483980124160">2016年7月21日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Apple Developer Programカード決済できない→Apple Store ギフトカードで買えばええやん！→メール「ギフトカードをクレカで買ったのなら電話くれや、平日しか受け付けてないけどな！」→( ﾟдﾟ)ﾎﾟｶｰﾝ ←今ここ。</p>&mdash; 川崎 悠平 (@kwsk_y3) <a href="https://twitter.com/kwsk_y3/status/754433072771117056">2016年7月16日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

というわけで、

* 7/12辺りからクレカ決済の障害発生中（たぶんApple Developer Programの時だけだよね・・・）
* AppleStoreギフトカードを金額指定で購入して使えば良いかもしれない（未確認）

という状態のようです。

※正確な情報を得るには各自Appleへお問い合わせください。
[vim] NERDTreeで 起動時に開いたときにファイルの方にカーソルを合わせる  ~ 0から始めるvim ~

# [vim]NERDTreeで 起動時に開いたときにファイルの方にカーソルを合わせる 

いつもファイル開いたときにツリーの方にカーソルが向いてしまうので,
ファイルの方に向けたいなと思ったので実装してみました。

## 環境
1. dein.vim      => [dein.vimインストール方法](http://qiita.com/ymiyamae/items/e14059b77ba1cf0b344c)
2. nerdtree.vim  => [nerdtree.vimインストール方法](http://qiita.com/ymiyamae/items/561cb4a5b247deb2ebc1)



## 導入

nerdtreeインストールの時にも紹介しましたが,
以下のコードでvimを起動したときに, NERDTreeが表示されるようになっています。

```:.vimrc
autocmd VimEnter * execute 'NERDTree'
```

これに加えて次のスクリプトを導入することにより,
起動時にファイルの方にカーソルが向けられます。

```diff:.vimrc
function s:MoveToFileAtStart()
  call feedkeys("\<Space>")
  call feedkeys("\s")
  call feedkeys("\l")
endfunction

- autocmd VimEnter * execute 'NERDTree'
+ autocmd VimEnter *  NERDTree | call s:MoveToFileAtStart() 

```

以上NERDTreeをよりよく使うための紹介でした。
Embulk 0.8.9で追加されたdateオプション


## まとめ

* Embulk 0.8.9から、時刻のみのカラムに日付を指定できるようになった。
* デフォルトの日付を指定するときは、``default_date``
* カラム毎に指定するには、``date``
* タイムゾーン指定を忘れずに

## 例

### サンプルデータ

次のようなデータがある、3番目のカラムは``19:23:49``のような時刻形式

```yaml
id,account,time,comment
1,32864,19:23:49,embulk
2,14824,19:01:23,embulk jruby
3,27559,02:20:02,"Embulk ""csv"" parser plugin"
4,11270,11:54:36,NULL
```

### default_date, dateを使わない場合

```yaml
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    null_string: 'NULL'
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
    - {name: id, type: long}
    - {name: account, type: long}
    - {name: time, type: timestamp, format: "%H:%M:%S" }
    - {name: comment, type: string}
``` 

```
*************************** 1 ***************************
     id (     long) : 1
account (     long) : 32,864
   time (timestamp) : 1970-01-01 19:23:49 UTC
comment (   string) : embulk
```

日付は、1970/1/1になる。

### default_dateを使う場合

```yaml
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    null_string: 'NULL'
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false 
    default_date: "2016-07-22" # 追加
    default_timezone: "Asia/Tokyo" # 追加
    columns:
    - {name: id, type: long}
    - {name: account, type: long}
    - {name: time, type: timestamp, format: "%H:%M:%S" }
    - {name: comment, type: string}

```

previewすると、最初の日付が、2016/07/22 10:23:49(UTC)になっていることが確認できた。(日本時間は9時間先になる)

```
*************************** 1 ***************************
     id (     long) : 1
account (     long) : 32,864
   time (timestamp) : 2016-07-22 10:23:49 UTC
comment (   string) : embulk
```

個別に指定する場合は、``date``

```yaml
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    null_string: 'NULL'
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    default_timezone: "Asia/Tokyo"
    columns:
    - {name: id, type: long}
    - {name: account, type: long}
    - {name: time, type: timestamp, format: "%H:%M:%S", date: "2016-07-22" }
    - {name: comment, type: string}
```

## 余談

Embulk 0.8.10が出た日にこの記事を書いたのは、いままでこのプションの存在を知らなかったからだ。:smile:
Windows7 > Link > imgファイルを使ってUSBメモリをFAT16にする

Windows7にて8GBのUSBメモリをFAT16フォーマットする際に、どういう方法が取れるか。

コメントにていろいろアドバイスをいただく中、SDFormatterでフォーマットしたイメージと、イメージWriteツールの組合せの方法を教えていただいた。

将来の検索用にリンクを貼っておく。

[SD2GB.imgとWin32 Image Writerの組合せ](
http://qiita.com/7of9/items/51eee711dfb09869ec20#comment-63308f4b5fa27619a1fb)
製品/サービスメモ

情報を仕入れた製品/サービスを備忘として以下に記載。

クラウド・ファイル共有サービス
---
**Oracle Documents Cloud Service**
Office 365との連携可能なクラウド・ファイル共有サービス
URL：https://www.oracle.com/jp/corporate/pressrelease/jp20150603.html


MDM
---
**Casper Suite**
企業・教育機関でMac・iPad管理を実現するMDMソリューション
URL:https://www.jamfsoftware.com/products/casper-suite/
Windows7 > Link > Diskpart > バッチ実行

[FAT16フォーマット関連](http://qiita.com/7of9/items/51eee711dfb09869ec20#comment-1358ac6e244a6da91d8d)のコメントにてDiskpartのバッチ実行の方法を教えていただいた。

将来の検索用にリンクとしておく。
[diskpartのバッチファイル化](
http://qiita.com/7of9/items/51eee711dfb09869ec20#comment-4a41d9603fb685bbe605)


コメントの検索性はどうしたら向上するだろうか。
今のQiitaのシステムのコメント検索では過去の有用なコメントを引き出しにくい。
Processing > This application requires a Java Runtime Environment 1.7.0_40

```txt:動作環境
Processing 3.1.1 on Windows 8.1 pro 64bit
Windows 7 pro 32bit
```

Processingで作成したexeファイルを別PCにて実行しようとしたところ、以下のメッセージが表示された。

```
This application requires a Java Runtime Environment 1.7.0_40
```

Processingで作成したアプリにはJREが必要のようだ。

exe作成時にEmbed Java for Windows (64-bit)というオプションがあるが、以下の記載もある。

> Users on all platforms will have to install the latest version of Java 8 from http://java.com/download.


- Visual Studioのexe実行時には.NET Frameworkが必要
- Processingのexe実行時にはJava Runtime Environmentが必要
- C++ BuilderではVCLで作成した.exe実行はそのまま使用可能。クロスプラットフォーム対応にはFMXで作成しないといけない (FMXは未知の領域)
- Unityで作成したexeファイルはそのままで実行可能
- Electron: 不明 (セキュリティ対策のメンテナンスコストが気になって手を出していない。自分には不明な点が多すぎる。)
- Qt: 不明 ([無償から有償切替え時の問題がある](http://www.sra.co.jp/qt/faq/licenses.html#n001-7))

10年後にも使えるソフトを何で作るか決めかねている。
ソフトのライセンスコスト、セキュリティ対策などのメンテナンスコスト、配布exeファイルの実行環境、コーディングのしやすさ、ライブラリのメンテナンス性など色々な観点から考えないといけない。

<hr>
(追記 2016/07/25)
Java 8 update 101を該当PCにインストールすると32bit版の.exeが一応動いた。
これを入れないと動かないということで、配布には向かない。
Processing / ControlP5 > uartSender (v0.3, v0.4)  > amplitudeとinterval用のスライダ実装

```txt:動作環境
Processing 3.1.1 on Windows 8.1 pro(64bit)
Library: ControlP5 v2.2.6
Library: Serial
```

シリアル通信の接続先にダミーデータを送るプログラム実装の続き。

関連 http://qiita.com/7of9/items/8f0c47caf69b0571d6dc

### code

[v0.4 @ github](https://github.com/yasokada/processing_160716_uartSender/releases/tag/v0.4)

以下の実装をした

- v0.3
  - COMポート選択をslider/Button使用をやめて、ScrollableList使用に変更した
- v0.4
  - ダミーデータであるsine curveのamplitude選択用sliderを追加
  - sine curveの周期(秒)選択用sliderを追加

### 実行例

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/7dc0cfcb-6b2a-8e23-a41d-75637917eb83.png)


- 縦方向のスライダ4つは4項目のデータのamplitudeを選択できる
- 横方向のスライダ1つは全項目の周期(秒)を選択できる
  - 例では78.74秒

通信の反対側では以下のような受信となる。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/08364e79-6902-0aef-25a0-4a10bec50b0c.png)
技術英語 > like a small transgression

@ Code Complete (No. 5132 / 36077)

> Including private declarations in the class header file might seem like a small <font color=red>transgression</font>, but ...

http://ejje.weblio.jp/content/transgression
> 違犯、犯罪、(宗教・道徳上の)罪

trans: 別の状態へ
gression: 転移

trans+gression: 違反

記憶の宮殿に格納できそうにない。

。
。
。

「<font color=red>(注意: おもちゃです)</font>[トランスフォーマーグレートショット](https://www.amazon.co.jp/%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%BCV-%E3%83%93%E3%82%AF%E3%83%88%E3%83%AA%E3%83%BC-C-325-%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%BC-%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%88%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/dp/B001SOUDV8)[略してトランスグレッショ...]を大人買いするのは<font color=red>"違反"</font>だね」
。
。
。
記憶の宮殿に格納できたような気がする。
数ヵ月後に効果が分かる。
公式情報を信じても Linux から Azure File Storage に接続できない(場合がある)

注意
====

本記事は、ある時期における特定条件について扱っています。
今後 Linux の CIFS 対応が進めば、解決するはずです。

再現環境
=======

* CoreOS 1068.8.0 (MoreOS)

他のディストリビューションでも、同時期のカーネル/cifs-util なら再現する可能性が高そう。

症状(概要)
====

Azure 公式の [Linux で Azure File Storage を使用する方法](https://azure.microsoft.com/ja-jp/documentation/articles/storage-how-to-use-files-linux/) に従ってマウントを行うと、下記のエラーが出て接続できない。

```
mount error(11): Resource temporarily unavailable
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
```

デバッグログを有効にして `dmesg` を眺めると、下記のようなメッセージが見つかる。

```
[122546.048972] CIFS VFS: SMB3 encryption not supported yet
[122546.057942] CIFS VFS: SMB3 encryption not supported yet
[122546.072195] CIFS VFS: encrypted frame parsing not supported yet
[122546.080355] CIFS VFS: Bad protocol string signature header 424d53fd
[122546.091012] CIFS VFS: Bad SMB detected. The Mid=133996623437
```

`mount.cifs` を実行したのは Azure 上の VMインスタンスで、Azure File Storage は VM と同一ロケーション(リージョン)に置いてある。

調査
====

日本語でググったところ、うまく行っている方々は、うまく行っている様子。

[Azure File Storage を kubernetes のボリュームとして使ってみる](http://tech.tanaka733.net/entry/azure-file-storage-as-a-kubernetes-volume)

[Azure Storageで作った"File"共有をcifsでマウントする方法が、CentOS 7.2でちゃんと動いた](https://diary.sshida.com/20160421-2-Azure%20Storage%E3%81%A7%E4%BD%9C%E3%81%A3%E3%81%9F%E2%80%9DFile%E2%80%9D%E5%85%B1%E6%9C%89%E3%82%92cifs)

しかし、CoreOS には [issue が挙がっている](https://github.com/coreos/bugs/issues/1387)

曰く、

> We are currently running CoreOS 899.17.0 (stable) on Azure cloud with a drop-in mount.cifs that allows us to mount Azure File shares. In the current state we can successfully mount Azure File shares with smb 3.0 settings straight away,  e.g.
>
> ```
> sudo mount.cifs //myaccountname.file.core.windows.net/mysharename ./mymountpoint -o  vers=3.0,username=myaccountname,password=StorageAccountKeyEndingIn==,dir_mode=0777,file_mode=0777
> ```
>
> A couple of days ago we upgraded one of our boxes to a new stable version 1010.5.0 and immediately noticed that Azure File share was not working with the following error trail in the logs:

いくつかのやり取りを経て

> I guess it is still a mystery why the behaviour of kernel has changed and why the previous version was falling back to 2.1 silently.

とのこと。

どうやら、下記のような状態らしい。

* 以前のカーネルでは、vers=3.0 でダメな場合は vers=2.1 で再試行していた
* ある時点でコードが修正され、vers=3.0 でエラーになる場合はvers=2.1 へfallbackしなくなった
* 現在の Linux の CIFS サポートは途上なので、vers=3.0 を指定した時に Azure File Storage が期待する encryption に Linux は応えられない。

実際、手元環境でマウント時のパラメタを vers=2.1 とすると、エラーなくマウントされる。[^1]

[^1]: この場合、リージョンを跨いだマウントはできないはずなので、使い勝手は大きく制約されるのだが、それはさておき。

結論
====

Azure File Storage の Linux からのマウントについては、本記事初出時点では、下記の2択しかない。

* CIFS サポートが更に強化されるまで、カーネルおよび cifs-util のアップデートを避ける。
* vers=3.0 での Azure File Storage のマウントを諦める。

影響(余談)
=========

Kubernetes の AzureFile 周りに、vers=3.0 がハードコードされている箇所がある。
2016年7月現在のところ、新しめのカーネルで K8s の AzureFile ボリュームは<del>使えない</del>。

ver=2.1 での運用となるので制限はあるが、[回避方法が示されている](https://github.com/kubernetes/kubernetes/issues/30769#issuecomment-243696658)。<del>しかし、Hyperkube の場合は別の問題(mount.cifsが含まれていない)があって、この手は使えない。</del> [^cifs]

[^cifs]: https://github.com/kubernetes/kubernetes/pull/34416 で mount.cifs も含まれるようになりました。やったね。
PhpStorm で Coverage の表示がなされない時は対象のプロジェクトのパスに Symlink が含まれてないか調査してみると良いかも


というメモ。

OS X にて、 PhpStorm で、 PHP の Interpreter の設定、 Run/Debug Configurations の設定ともに済んでいるはずなのに、 Run with Coverage の結果が全て 0% となる現象に出くわした。

結論から書くと、 `/var/www/someProjectName` が Symlink であり、 PhpStorm でこのパスを開いていたのが原因だった。

elcapitan 10.11.5 で確認。

```
$ cd /var
$ pwd
/var
$ pwd -P
/private/var
```

こんな状態だった。

この状態で、 `/var/www/someProjectName` を PhpStorm で開いて、 Run with Coverage を実行すると、 0% となる。

正常に動かすには、 `/private/var/www/someProjectName` を PhpStorm で開き直して、再度 Run with Coverage すると良い。(はず。)
anyenv で brew doctor すると Warning: "config" scripts exist outside your system or Homebrew directories. と言われるのを回避する

anyenv で brew doctor すると Warning: "config" scripts exist outside your system or Homebrew directories. と言われるのを回避するメモ。

## 現象

```shell-session
$ brew doctor
Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.
```

## 原因

例えば、`~/.anyenv/envs/pyenv/shims/python-config` とかが存在していると、 config スクリプトが管理外にあるよって怒られる。

他にも、 phpenv も入れてたりすると、それも怒られる。

## 回避策

- brew を alias にして、 env にて、 PATH を上書きする
- その際に、 ~/.anyenv/envs/pyenv/shims とか、 ~/.anyenv/envs/phpenv/shims とかを除外してやる

具体的には、`~/.bash_profile` とかに `alias brew="env PATH=${PATH/\/Users\/YOUR_USER_NAME_HERE\/.anyenv\/envs\/*env\/shims:/} brew"` を追加する。

例えばこんな感じ。

```shell
if [ -f ~/.anyenv/bin/anyenv ]; then
    export PATH="$HOME/.anyenv/bin:$PATH"
    eval "$(anyenv init -)"
    alias brew="env PATH=${PATH/\/Users\/YOUR_USER_NAME_HERE\/.anyenv\/envs\/*env\/shims:/} brew"
fi
```

というメモ。
Spine-StarlingランタイムがSpine3.4およびStarling2に対応

まだ数ヶ月かかるかと思っていた、SpineランタイムのStarling2対応が、Spine3.4対応ランタイムの各言語一斉ラッシュとともにリリースされたようです。

ざっと触ってみたのでクイックレポートします。

<img width="465" src="https://qiita-image-store.s3.amazonaws.com/0/8302/86e207c1-66c1-a630-ebf8-ffc30fac4b7c.png">
_Starling2のフィルタをSpineアニメに適用したデモ_
http://harayoki.github.io/qiita_demo/ManMaruFilter/

#ざっと触ってみてのポイント
* 最新のSpineデータバージョン3.4に対応してるので、パスアタッチメント対応している最新データが動く :+1::+1:
* Starling2と組み合わせて確かに動く :+1::+1:

<img width="701" src="https://qiita-image-store.s3.amazonaws.com/0/8302/9e112aa6-9164-42d8-cdd5-244b1e21a067.png">
_公式のタンクデモ。キャタピラあたりにパスアタッチメント適用されてる。_
http://harayoki.github.io/qiita_demo/SpineTankDemo/

* アルファの設定をすると完全透明になってしまった。バグかも？ :-1: (アニメーションが進むとともにアルファ値が掛け合わせ続けており、フェードアウトしてしまうぽい)
* やっぱりAssetManagerと相性悪い :-1:
* やっぱりフィルタが適用できないぽい :-1:
* 過去データも読み込んで動くが、メッシュ部分だけ非表示になってしまう模様 :-1:
* パフォーマンスはあがっているらしい、とりあえず遅くなってはない

#いろいろ対応させました
Starling1.7で動くSpineランタイムに対して自分が作った各種追加機能も(そのままでは動かなかったので)Starling2.0対応させました。これによってAssetManagerにデータをロードさせて、パーツであたり判定させて、フィルタを適用させる事が可能になります。

参考記事とそのStarling2.0対応クラス
[SpineをStarling1.7で使う:AssetManager経由の初期化に苦労する の巻](http://qiita.com/harayoki/items/ca983b25d9ce22a5312f)
→ [MyStarlingTextureLoader](https://github.com/harayoki/SpineTest1/blob/Straling2_Spine3_4_demo/src/harayoki/spine/starling/MyStarlingTextureLoader.as)

[SpineをStarling1.7で使う:個別パーツとのあたり判定](http://qiita.com/harayoki/items/9e94e3c4d9d26cf99d63)
→ [SpineHittestUtil](https://github.com/harayoki/SpineTest1/blob/Straling2_Spine3_4_demo/src/harayoki/spine/starling/SpineHittestUtil.as)

[SpineをStarling1.7で使う:フィルタを使えるようにする](http://qiita.com/harayoki/items/aef38fa49961dace093d)
→ [SkeletonAnimationFilterApplicable](https://github.com/harayoki/SpineTest1/blob/Straling2_Spine3_4_demo/src/harayoki/spine/starling/SkeletonAnimationFilterApplicable.as)

[Starling2 Starling2.0でカスタムフィルターを作ってみる:ポスタリゼーションフィルタ](http://qiita.com/harayoki/items/4daa6a3fbcfa115be70a)
→ [PosterizationFilter](https://github.com/harayoki/Starling2FiltersAndStyles/blob/e448c7c58bc17da7ec04896740fcfee6382bd720/src/harayoki/starling2/filters/PosterizationFilter.as)

[Starling2 ScanLineFilter他の作成](http://qiita.com/harayoki/items/7f67d8fd8bb0e7042201)
→ [ScanLineFilter](https://github.com/harayoki/Starling2FiltersAndStyles/blob/e448c7c58bc17da7ec04896740fcfee6382bd720/src/harayoki/starling2/filters/ScanLineFilter.as)
→ [SlashShadedFilter](https://github.com/harayoki/Starling2FiltersAndStyles/blob/e448c7c58bc17da7ec04896740fcfee6382bd720/src/harayoki/starling2/filters/SlashShadedFilter.as)

<img width="381" src="https://qiita-image-store.s3.amazonaws.com/0/8302/4c709824-9d19-644c-692f-98ee3f2d6a5e.png">
_最初のデモはタッチでフィルタが切り替わります_

まだランタイムは出たばかりで日々細かい修正など入っているぽく、深く触ってみるには早そうですが、（そして自分の製作したクラスも細かい修正がまだ入りそうですが）速報レポートは以上です。
ではまた。
ECMAScript Classes の継承関係の確認

```js
const assert = require('assert');

class Super {}
class Sub extends Super {}
class SubSub extends Sub {}

assert.strictEqual(Sub.prototype instanceof Super, true);
assert.strictEqual(SubSub.prototype instanceof Super, true);

assert.strictEqual(Super.prototype instanceof Sub, false);
assert.strictEqual(SubSub.prototype instanceof Sub, true);

assert.strictEqual(Super.prototype instanceof SubSub, false);
assert.strictEqual(Sub.prototype instanceof SubSub, false);
```
Filebeatのパフォーマンス関連の設定まとめ

## 概要

Filebeatのパフォーマンスに関連する設定をまとめてみました。

公式ドキュメントは下記となります。
https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html

## 環境

Filebeat: v1.2.3

## 設定項目

Filebeatの設定ファイルである `filebeat.yml` の `prospectors` セクションの下記項目が主に性能に関連します。

### backoff

ファイルの更新をチェックする待機時間（デフォルトは1s）

つまりはどれぐらいの頻度でファイルの更新をチェックするかということです。
デフォルトの1sであればほぼリアルタイムでの更新チェックとなるため、基本的に変更する必要はありません。
ただしファイルに更新がない場合、この待機時間は下記で説明する `backoff_factor` を「底」として `max_backoff` に到達するまで指数関数的に増加していきます。
ファイルに更新があった場合は、待機時間は当該の設定値（デフォルト1s）にリセットされます。


### max_backoff

ファイルの更新をチェックするために、最大でどの程度待機するか（デフォルトは10s）

### backoff_factor

更新チェックの待機時間を算出するための「底」（デフォルトは2）

### backoff関連をまとめると

わかりやすく言えば、「待機時間 = 現在の待機時間 × `backoff_factor` 」として求めることができます。
（ただし待機時間の最大値は `max_backoff` であり、ファイルに更新があった場合待機時間は `backoff` にリセットされます。）

デフォルトの設定だと下記のような挙動になります。

1. 1秒待機して更新チェック⇒更新なし
2. 2秒（1s * 2）待機して更新チェック⇒更新なし
3. 4秒（2s * 2）待機して更新チェック⇒更新なし
4. 8秒（4s * 2）待機して更新チェック⇒更新なし
5. 10秒（最大待機時間）待機して更新チェック⇒更新なし
6. 10秒（最大待機時間）待機して更新チェック⇒更新なし
・
・
・
6. 10秒（最大待機時間）待機して更新チェック⇒更新あり
7. 1秒待機して更新チェック

待機時間を常に一定にしたい場合は `backoff_factor` を1に設定すると良いでしょう。
（その分負荷は大きくなります。）

### spool_size

アウトプットの閾値となるイベントの回数（デフォルトは2048）

つまりデフォルトだと2048回イベントが発生した段階で連携先（Elasticsearch, Logstash）にイベントが送信されます。

### idle_timeout

イベント送信までのタイムアウト値（デフォルトは5s）

イベントの回数が `spool_size` に到達せずとも、当該の設定時間が経過した段階で連携先（Elasticsearch, Logstash）にイベントが送信されます。
リアルタイムにイベントを送信したい場合は、このタイムアウト値を小さくすると良いでしょう。
（その分負荷は大きくなります。）

### publish_async

非同期送信を行うかどうか（デフォルトはfalse）

`true` に設定した場合は、イベント送信の確認応答（ACK）を待たずして（非同期的に）イベントを送信します。
（スループットは向上しますがその分メモリ使用量は大きくなります。）

## 終わりに

当然ですが、リアルタイムに連携を行おうとすればするほど負荷は大きくなりますので、
リソースと要件を天秤にかけながら上手く調整してあげてください。
また今回はfilebeat自体の設定項目のみを紹介しましたが、連携先の種類に応じてパフォーマンスに関連する設定項目は存在します。（例えば、連携先がElasticsearchの場合は、bulk APIの件数 `bulk_max_size` など。）
これらはまた別の機会に紹介したいと思います。