OmniAICreator/Qiita-1.07M huggingface dataset:
git submoduleを追加してみる

### <i class="fa fa-git-square" aria-hidden="true"></i> submoduleとは何か？
> 「特定のリポジトリ」の「特定のコミット」をリポジトリ内の特定のディレクトリに紐付ける仕組みです。

http://qiita.com/go_astrayer/items/8667140aef8875742a36

### この機能を使ってやりたかったこと

```bash
.dotfiles
├── .bashrc
├── .alias
├── .function
├──    :
├──    :
└── .local
    ├── .alias
    └── .function
```

* dotfile -> githubで管理
* dotfile/.local　-> bitbucket(非公開)で管理

これです。

dotfileをgithubで管理しているのですが、
どうしても非公開にしたい情報を
今までローカルでgitignoreして管理していました。
が、しかし。

色々試行錯誤しながら修正したりするので
version管理ができないと不便！
ということで、今回submoduleを使ってみることにしました。  
（全部bitbucketで管理すればいいじゃんっていうツッコミは、なしで）

### <i class="fa fa-terminal" aria-hidden="true"></i> 使い方

じゃん

stepは以下

#### 別リポジトリを作成

submodule用の別リポジトリを用意

```bash
$ mkdir .dotfiles.local
$ cd .dotfiles.local
$ git init
$ echo "#local alias" >> alias
$ git add .
$ git commit -m 'first commit'
$ git remote add origin ssh://git@bitbucket.org/_user_name_/.dotfiles.local.git
```

#### submoduleを登録

submoduleを使いたいプロジェクトに移動して、
以下コマンドでsubmoduleを登録。

```bash
$ git submodule add git@bitbucket.org:_user_name_/.dotfiles.local.git .local
```


```
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .gitmodules

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .locals/
```

こんな感じで追加されます

cat .gitmodules

```
[submodule ".local"]
    path = .local
    url = git@bitbucket.org:_user_name_/.dotfiles.local.git
```

```
git commit -m "add submodule: .local"
[master 641dad0] add submodule: .local
 1 file changed, 3 insertions(+)
 create mode 100644 .gitmodules
```

これで追加されている。

#### <i class="fa fa-heart" aria-hidden="true"></i> thanks

http://vdeep.net/git-submodule
http://qiita.com/go_astrayer/items/8667140aef8875742a36
http://qiita.com/knsh14/items/941f2ec2ec76ef1d1940
AWS DMSの検証

前回は軽くDMSが動くかどうか調べただけだが、さらに細かい動作を検証した。

* [AWS DMSを設定したときのメモ](http://qiita.com/hiroyuki-nagata/items/c338968d91f0f6304557)

# 使用できるDDLについて

AWSのドキュメントによると以下のDDLが使用できる

* [DDL Statements Supported by AWS Database Migration Service](http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.SupportedDDL.html)

```
Create table
Drop table
Rename table
Add column
Drop column
Rename column
Change column data type
```

全部のSQLコマンドが使用できそうに見えるが、実際にはそうではない

```
For information about which DDL statements are supported for a specific source or target, 
see the topic describing that source or target.
(特定のソースまたはターゲットでサポートされている DDL ステートメントについては、
そのソースまたはターゲットについて説明しているトピックを参照してください。)
```

## MySQLが移行対象であるときの制限

* ソース
    * [MySQL データベースを AWS Database Migration Service のソースとして使用する場合の制限](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.MySQL.html#CHAP_Source.MySQL.Limitations)
* ターゲット
    * [AWS Database Migration Service のターゲットとして MySQL を使用する場合の制限](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.MySQL.html#CHAP_Target.MySQL.Limitations)

以下の機能がDMSからは使用できない、重要そうなものを太字で

* ソース
    * DDL ステートメント **Truncate Partition、Drop Table、Rename Table。**
    * ALTER TABLE <table_name> ADD COLUMN <column_name> ステートメントを使用して、テーブルの先頭または中間に列を追加します。
    * **名前に大文字と小文字の両方が含まれるテーブルから変更をキャプチャします。**
    * AR_H_USER ヘッダー列。
    * **列の AUTO_INCREMENT 属性は、ターゲットデータベース列に移行されません。**
    * バイナリログが標準のブロックストレージに保存されていると、変更をキャプチャします。たとえば、バイナリログが Amazon S3 に保存されていると、CDC は機能しません。

* ターゲット
    * DDL ステートメント **Truncate Partition、Drop Table、Rename Table。**
    * ALTER TABLE <table_name> ADD COLUMN <column_name> ステートメントを使用して、テーブルの先頭または中間に列を追加します。

### 手元での検証結果

* Drop Tableに関してはDMSで実行させると確かに以下のようなログが出力される

```
2017-02-22T01:34:20 [SOURCE_CAPTURE ]W: Cannot drop table '***'. DROP TABLE is not currently supported (mysql_endpoint_capture.c:1563)
```

* また、Create Tableに関してもDMSタスクを最初から起動しない限り実行されない
* また、これはついでだがDMSでは**utf8mb4**のエンコーディングは使えない、**utf8**は使える
    * [MySQL migration using utf8mb4 character set and collation](https://forums.aws.amazon.com/message.jspa?messageID=718360) ... 「Unfortunately, DMS currently doesn't support the UTF8MB4 character set.」とな。実際やってみるとロードの段階でコケる。

### 結論

* DMSをレプリカツールのように使う場合、ソースはもちろんターゲットのDBのインスタンスにテーブル自体の準備が必要、そこからの更新は追ってくれる
仮想マシンのマイグレーション用語

クラウドへマイグレーションする際の、一般的な用語についてご説明します。ここでは、マイグレーション（仮想マシン移行）を行う際に利用する、「V2V「P2V」「P2V2V」について解説したいと思います。
 
■ V2Vとは？
   V2V とは 「Virtual to Virtual」 の略で、仮想マシンを別の仮想環境上に移行することを言います。
 　仮想マシンファイル（OVAファイル）のExport/Importを利用したり、バックアップソフトウェアを利用することで実現することができ、既存の構成は可能な限り維持されます。
　 異なるハードウェア構成の新しい仮想マシン上や、クラウド事業者の環境上に、仮想マシンを移行させる際に、V2Vが利用されます。



|V2Vイメージ|
|---|
|![SnapCrab_NoName_2017-2-27_9-20-49_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/143230/a1d393d6-351d-547c-9cc4-d90bbef50c11.png)


■ P2Vとは？
   P2V とは 「Physical to Virtual」 の略で、物理サーバを別の仮想環境上に移行することを言います。
  オンプレミス環境のサーバーの保守切れやサーバーリソースの効率化・経費削減などの目的で、P2Vが利用されるケースが多くなってきています。

　P2Vは稼働するサーバー上で構築したOSやアプリケーション、各種設定情報などを丸ごと仮想環境上に、移行することができるので、クラウドへのマイグレーション利用の際にとても便利です。

|P2Vイメージ|
|---|
|![SnapCrab_NoName_2017-2-27_10-3-7_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/143230/090cdb32-49a5-7f09-9bb3-17f45245d9e3.png)


■ P2V2Vとは？
  ここまでお読みいただいた方には、お分かりになるかもしれませんが、P2V2V とは 「Physical to Virtual to Virtual」 の略で、物理サーバを別の仮想環境上に移行し更に、別な仮想環境上に移行することを意味します。一般的には、クラウド環境へのマイグレーションで使用されることが多い用語です。

社内の物理サーバをクラウド化したい場合に、最初から移行はできませんので、一度仮想環境で稼働するようイメージ変換し、その後、クラウドへの移行することをP2V2Vと言ったりします。
サーバーのIPアドレス変更に関して

やることをメモらせて頂きます。

マイクロソフト[https://social.technet.microsoft.com/Forums/windowsserver/ja-JP/e6b1ed07-cae0-4c30-8824-adc7edaf88e1/dhcpactivedirectorywindowsserver2012r2ip?forum=winserver8]
さんの情報によると


```
ドメインコントローラ (Active Directory,DNS) のIPアドレス変更による影響については、変更後にnetlogonサービスの再起動が必要かと思います。詳細は以下Webサイトを参考にしてください。
補足として、ドメインに参加しているメンバサーバやクライアントが固定IPアドレスを利用している場合は、それらのDNSの設定変更が必要となります。
https://blogs.technet.microsoft.com/jpntsblog/2013/10/07/ip/
https://social.technet.microsoft.com/Forums/windowsserver/ja-JP/04fb0042-07f6-46b8-9a4c-dafe87f9d2b4/ip?forum=activedirectoryja
DHCPのIPアドレス変更による影響については、質問文の内容から、DHCPで設定しているDNSサーバのIPアドレスやDHCPスコープの変更が必要かと思います。DHCPについては、さっと見たところ有用なWebサイトは見つかりませんでした。
こちらも補足として、動的IPアドレスを利用しているメンバサーバやクライアントが持つIPアドレスの解放と割り当てが必要となります。
上記を参考にしつつ、moitaroさんが利用されているシステム構成に応じて調査・検証 (システム上のアプリがDNSサーバのIPアドレスを利用していない etc) していただければと思います。
```

- [ ] netlogon再起動
- [ ] DNSの設定変更
- [ ] 動的IPアドレスを利用しているメンバサーバやクライアントが持つIPアドレスの解放と割り当て


以上。
頑張る。
ちょっとしたことをするためのawscliワンライナー集

たびたび同じようなことを調べている気がするので、忘れないようにまとめておきます。ちょっとしたことをするたびに追記していきたい。

# 前提条件
* unix系の環境
* 以下のツールなどがインストール済み
 * awscli
 * jq

# ec2
## *"hoge-xx"* という名前の起動中インスタンスを全部停止する
```
$ aws ec2 describe-instances --filters "Name=tag:Name,Values=hoge-*" "Name=instance-state-name,Values=running" | jq '.Reservations[].Instances[].InstanceId' | xargs -I{} aws ec2 stop-instances --instance-ids {} | jq -c .
```

## *"hoge-xx"* という名前の停止中インスタンスを全部起動する
```
$ aws ec2 describe-instances --filters "Name=tag:Name,Values=hoge-*" "Name=instance-state-name,Values=stopped" | jq '.Reservations[].Instances[].InstanceId' | xargs -I{} aws ec2 start-instances --instance-ids {} | jq -c .
```

## *"hoge-xx"* という名前の起動中インスタンスのパブリックIP一覧を出力する
```
$ aws ec2 describe-instances --filters "Name=tag:Name,Values=hoge-*" "Name=instance-state-name,Values=running" | jq '.Reservations[].Instances[].PublicIpAddress'
```
DNS名一覧のほうが有用かも。

# route53
## 任意のゾーンのAレコード一覧を出力する
```
$ aws route53 list-resource-record-sets --hosted-zone-id xxxxxxxxxxxxxx | jq -r '.ResourceRecordSets[] | select(.Type == "A") | .Name'
```
はてなブログのインデックスをリスト化して、記事数件ごとにgoogle ADを挿入する


はてなブログのインデックスは記事がが数件ならぶことが多い。これを通常のWebメディアのように記事をリスト化して、ユーザーの回遊性を高めたい。
仕組みは簡単で、インデックスに来たら強制的にアーカイブのページに飛ばすようにするだけです。

いくつか方法はあるようですが、私はこちらのサイトで紹介されているPHPのものを使用しました。

http://dokuwohaku.hateblo.jp/entry/2015/10/11/080000
※ 今回の件でJSのものに変更しようと思いました。

これで、インデックスがリスト化されます。

## Google AD Sence を挿入する
ここからが本番である。/archive は50件ほど表示されています。そこで、jQueryを使用して、リストの合間に広告を挿入していきたいと思います。
こちらが最終形態になります。

```Javascript
<script type="text/javascript">
$('document').ready(function(){
        var adsCode = '<div style="margin:16px 0px;"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"><\/script><ins class="adsbygoogle" style="display:inline-block;width:468px;height:60px" data-ad-client="ca-pub-6759455255419772" data-ad-slot="9553718485"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});<\/script></div>'

      $('.archive-entry:nth-child(5n)').each(function(){
          $(this).append($(adsCode));
      });
});
</script>
```
こちらがデモです。
http://noriyasu-katano.hatenablog.com/archive

ここまでくるのが結構大変でした。
まずは、google adsence のタグを一行にして、「adsCode」に値を入力するのですが、scriptタグを値に入れる場合、普通に記述したらうまくいかないのです。「\（バックスラッシュ）」を閉じたぐの前に入力しないと機能しないのです。それぞれ含まれているscriptタグにバックスラッシュを入れます。
そして、5件ごとに表示させるようにします。
jQueryで「:nth-child(5n)」を設定するとターゲットのタグやクラスに指定の数ごとに要素を追加することができます。「(5n)」の部分を変更すると件数が変更されます。
最後に「adsCode」を「$()」で囲みます。
この設定をhead内に記述します。

##課題
これで、５件ごとに表示されますが、いくつか課題を感じています。
リスト表示をPHPで処理しているので、それをJSにしたいと思います。PHP自体問題はないのですが、せっかくJSでまとめているので気分的な問題です。
そして、現時点ではhead内に記述しているので、全てのページで作動しています。たまたまページ内にターゲットのクラスがないだけなので、ここのページ認証を行えるようにしたいと思います。
Link > THE NEURAL NETWORK ZOO

100 input, 100 outputの学習に対して、どのようなネットワーク構成がいいか調査中。

その過程の中で見つけた様々なNeural Networkの紹介記事は以下。
http://www.asimovinstitute.org/neural-network-zoo/

- Perceptron (P)
- Feed Forward (FF)
- Radial Basis Network (RBF)
- Deep Feed Forward (DFF)
- Recurrent Neural Network (RNN)
- Long / Short Term Memory (LSTM)
- Gated Recurrent Unit (GRU)
- Auto Encoder (AE)
- Variational AE (VAE)
- Denoising AE (DAE)
- Sparse AE (SAE)
- Markov Chain (MC)
- Hopfield Network (HN)
- Boltzman Machine (BM)
- Restricted BM (RBM)
- Deep Belief Network (DBN)
- Deep Convolutional Network (DCN)
- Deconvolutional Network (DN)
- Deep Convolutional Inverse Graphics Network (DCIGN)
- Generative Adversarial Network (GAN)
- Liquid State Machine (LSM)
- Extreme Learning Machine (ELM)
- Echo State Network (ESN)
- Deep Residual Network (DRN)
- Kohonen Network (KN)
- Support Vector Machine (SVM)
- Neural Turning Machine (NTM)

それぞれのネットワークのOriginal Paper PDFへのリンクもある。
技術英語 > In Python, indentation determines how the if and else sections [are paired].

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic
(No. 1993 / 12833)

> In Python, indentation determines how the if and else sections **are paired**.

<hr>
be pairedから思い出したのは「対称性」

[naming > Link > Complement names must be used for complement operations](http://qiita.com/7of9/items/1ad400382c17969ecbcc)

対称性があることで、ソースリーディングがしやすくなる。

対称性がないAPIにしてしまうと、ソースリーディングやAPIドキュメントの検索時に余分な時間がかかるようになる。
[C++ Builder / Indy > TStreamの送信 > WriteStream()でなくWrite()のようだ](http://qiita.com/7of9/items/e39493c0599f96403094)
Laravel5のEloquentで常に固定条件で自動的にWhereしたい！

すみません…。ググったのですが見つからなかったので、SEO的なキーワードを盛り込んだタイトルにさせていただきました……。元の記事は下記、Laravel4で、Laravel5の記事が見つからなかったのでその補足です。

http://qiita.com/Kyoko-chan@github/items/93fbed44e9bd1e6473fd

# 何がしたい？

元記事にあるように、deleted というフラグをONにしたレコードは永遠に見たくない場合。（「Laravelにソフトデリート機能あるよ」という声は今回は無視します(・∀・)

```php
MyModel::where('deleted',0)->get();
MyModel::where('deleted',0)->where('created_at','>','2017-01-16 16:00')->first();
```

このように、ありとあらゆるところに where('deleted',0) と入れる必要があり、煩雑になるし、なにより忘れそうです。これをシンプルに、

```php
MyModel::get();
MyModel::where('created_at','>','2017-01-16 16:00')->first();
```

としたい、という案件です。

# Model::newQuery をオーバーライドする

ModelのnewQueryをオーバーライドするとできます。

```php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class MySoftDeleteModel extends Model
{
	public function newQuery($excludeDeleted = true)
	{
		// 親のメソッドを呼び出す。
		// もともとはクエリビルダーを新規作成するときに呼び出されるメソッドです。
		$query = parent::newQuery($excludeDeleted);
		
		// すべてのクエリに deleted = 0 の条件を最初に指定します。
		$query = $query->where('deleted',0);

		return $query;
	}
}
```

# 応用編

こんな機能を利用して
[Laravel5 Eloquentの複数モデルで1つのテーブルを共有する](http://qiita.com/kd9951/items/c4e5526a6feb4437d1f0)
ということをやっています。
Janomeを使った日本語形態素解析

Janomeを使い方を調べたんでメモ。

# Janomeって何？

[Janome](http://mocobeta.github.io/janome/)
> Janome (蛇の目) は, Pure Python で書かれた, 辞書内包の形態素解析器です.
> 依存ライブラリなしで簡単にインストールでき, アプリケーションに組み込みやすいシンプルな API を備える形態素解析ライブラリを目指しています.

お試して使おうと思ってる感じなんで、Pythonで使えて、一番手軽そうなJanomeを使うことに。
Mecabと比べて、pip installだけで使えるのは楽。
その他の日本語形態素解析ツールは、[こちら](https://bita.jp/dml/morpho_analysis_japan)のまとめに。

# Janomeの使い方

公式ホームページより抜粋。

```py
from janome.tokenizer import Tokenizer
t = Tokenizer()
for token in t.tokenize(u'すもももももももものうち'):
    print(token)
```

# Tokenizerの出力について

Tokenizer.tokenizeの結果をprintで出力するとこんな感じ。
> いる    動詞,非自立,\*,\*,一段,基本形,いる,イル,イル

[こちら](http://fizzyroom.org/2016/04/30/day25/)によると、左から「元の単語」、「品詞」、「品詞細分類1」、「分類2」、「分類3」、「活用形」、「活用型」、「原形」、「読み」、「発音」とのこと。

tokenizeの結果は、 以下の文字列のプロパティを持ってる。

- suface: 元の単語
- part_of_speech: [品詞],[品詞細分類1],[分類2],[分類3]
- infl_type: 活用形
- infl_form: 活用型
- base_form: 原型
- reading: 読み
- phonetic: 発音。
何かを考え始める前の考え方

Qiita というところは　ポエムなんか書くな、という場所らしいんだが　正面切って　ポエムに突っ込んでみよう。長い話を手短に圧縮してメモろうとしているだけで、別に目新しいメッセージ性は無い。

そこは　世界とか無いところだ。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a3.png?raw=true)
何にもないよ。

だが　何にもない　のは、**眼鏡を拾う前までの話し** だ。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a2.png?raw=true)
この眼鏡を拾ってしまったがために　酷い目に遭う。

この眼鏡を覗いてみると、向こうの方に何かが見える。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a1.png?raw=true)
**しまった！**

わー、なんか嫌な感じ……。 **対象**（たいしょう）とでも呼ぶとしよう。英語では　もっとぶっきらぼうに　ターゲット（Target）　ぐらいに呼ぶのかもしれない。

で、嫌なことは　もう１つある。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a4.png?raw=true)
眼鏡の　**こっち側**　には何があるのだろうか？　こっち側には　**何もない**……　例えば　

こっち側は
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a5.png?raw=true)
**お前らとは　住んでいるところ　が違うんです！** と言い張ることも可能だろう。
こっち側は　そっちの延長には　無いので、　空間のようなものは、つながっていないという主張だ。

ぜったい安全なところから　ここにはない世界を覗いている。

こっちは　**外側**（External；エクスターナル）　だ！　わはは！

なんとも面白い眼鏡だ。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a6.png?raw=true)

で、困ったことに

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a7.png?raw=true)

向こうの方に　眼鏡を持って　こっちを見ている　おっさん　が立っている。

何という事だ。

この眼鏡を持っているのは　わたしだけではなかったのか？　聞いてないぞ。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a8.png?raw=true)
向こうの眼鏡から見ると……。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a9.png?raw=true)
“こっち側”　もまた **対象** なのだろうか？

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a10.png?raw=true)
こんな眼鏡なんか　無ければ！

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a3.png?raw=true)
何にもないよ。

そして　また　眼鏡を拾うわけだが……。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a2.png?raw=true)

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a11.png?raw=true)
こんどは **外側** を見るのに使ってみよう。

ここは どこかの **内側**（Internal；インターナル）だと考えるのも　発想の１つだろう。

そして　内側から　外側へ　届く道が無いのだとしたら、ここは **閉じている**  と言えるだろう。

もし　閉じていない　としたら　
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a12.png?raw=true)
この眼鏡では　見ることのできないどこかに行ってしまう隣のＡ君もいるだろう。

消えてしまうのか、あるいは　この眼鏡では　ただ見えないだけで、また戻ってくるのかは分からない。

じゃあ、この眼鏡が　すごく性能がよくなって　全ての道につながって、外側も　内側も無くなったら？

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a13.png?raw=true)
全ての道につながってるんだったら　むしろ　閉じている……。

それは　性能のいい眼鏡なのか、それとも　都合のいい眼鏡　なのか……。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702270000a14.png?raw=true)
じゃあ、別に　外側に行くとか　内側に行くとかは　ひとまず置いておいて、

**なんにしろ　この眼鏡は　対象　と　主体　を作るようだ。**
そして　**主体が　対象を見る**　という、片道一方向的な要素を最小限としていて、必ずしも往復して双方向になっているとは限らないという特徴もあるようだ。

この一方向性に振り回されずに　この　眼鏡　の働きを　洗いざらい調べるとどうか。

眼鏡を通してしか何も見えないとすれば、眼鏡のあらゆる働きを知ることが　そのまま　どこからからでも（外側でも内側でも）見ることが可能な世界を記述することにならないか。眼鏡以外で何かを見る方法をまだ知らない場合は。


続きはまた今度。
市場の特性変化に追従するFXシステムトレードプログラムの構想について

[FXシステムトレードのプログラムをいくつか作ってみて分かった課題とその解決法について](http://qiita.com/ryo_grid/items/f13ab8a2bb708713396b)

のつづき。

上記記事で挙げた 「複数のアルゴを市場の状況に応じて切り替える」 という解決策について、具体的な実現方法を思いついたのでメモがてら書いておく。

# 考察
これまでいろいろ試してみた経験からすると、機械学習なシストレプログラムは学習させた期間のチャートの動きによって、適応できる市場の動きに差異があるようであった。

# どうするか
前回の記事の繰り返しになるが、特定の一期間を学習させたものだと、これまでに作成してきたもののように、短中期では市場に対応できない場合が出てくる。

![best.png](https://qiita-image-store.s3.amazonaws.com/0/12325/61901d74-b337-e173-d5cf-28a9b0258f12.png)
＃このトレード結果で言うと最初の谷のところなど

そこで、上記考察で得られた知見から、過去のチャートにおいて、複数の別々の期間を学習させた複数のモデルを作って、少なくとも過去のチャートであれば、アンドをとる（複数のモデルをつぎはぎする）ことで全期間で利益があがるようなかたちにする。なお、個々のモデルを作る際は、通常の機械学習では回避すべきであるオーバーフィットをあえてさせるのがよいのではないかと考える。なぜなら、個々の市場変化は個々のモデルで対応するため、汎化性能は必要ないからである。また、アンドをとって、全期間をカバー（利益が出るようにする）するには、手動で頑張っても良いし、グリッドサーチ的な方法で自動化する方法もあると思う。

そして、実運用では、作成した複数のモデルをバンディットアルゴリズムなどの手法を用いて市場に合わせて切り替えて利用する。

というような構想である。

ご意見などあれば、コメント欄までお願いいたします。

以上。
大規模開発におけるBackbone.jsの利点と他フレームワークの比較

#Backbone.jsとは
2010年6月にリリースされる。
コミュニティーの大きさは、AngularJsとほぼ同じ。
Twitter、Foursquare、Linkedin Mobile、SoundCloud、Pitchfork、Pandoraなどが利用している。
フレームワークのサイズが小さい。AngularJs: 36K、Backbone.js: 6.4K。
高速で応答性が高い。
自由度が高い。故にノウハウがないと冗長なコードを書いてしまうおそれがある。
サンプルコードがGit Hub上でたくさん公開されている。

#Backbone.jsの利点
###1.高速で応答性が高い。
###2.自由度が高い。故にノウハウがないと冗長なコードを書いてしまうおそれがある。
###3.大規模開発に向いている。Model、View、Collectionがはっきり分かれており、細かい単位で管理できる。

#他フレームワークとの比較
これは私が独自に比較したものですが、このような分布に分かれると考えています。

<img width="784" alt="スクリーンショット 2017-02-27 2.02.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/85181/1dcad3a9-0022-848e-60fe-79f8c9a726e4.png">
機械学習論文読みメモ_48


[Variational Information Maximizing Exploration](https://arxiv.org/pdf/1605.09674.pdf)
スケーラブルかつ効率的な探索はreinforcement learningにおいて重要である。
しかし従来手法はε greedyやgaussノイズの付与など、ヒューリスティクスに頼っている。
本論で提案する手法は、agentとの環境に対するbeliefの情報利得を最大化させるような探索を行う。
これは従来curiosityやsurpriseと呼ばれる概念で、環境のuncertaintyを最も減少させる（情報利得最大）ような状態を選択していく。
この情報利得はベイジアンNNに関する変分推論により解く。
この手法はreinforcement learningの手法に広く適用可能である。

[Guided Policy Search](https://graphics.stanford.edu/projects/gpspaper/gps_full.pdf), ICML2013
Reinforcement learningにおいて直接policy関数を最適化するDirect policy search（例えばpolicy gradient）は高次元のシステムに対してもスケールする手法であるが、何百ものパラメータが存在するような複雑なポリシーに対して学習を行う事は難しく、局所解に陥りやすい。
本論では、trajectory optimizationを用いる事で局所解を回避する手法を提案する。
この手法は２次微分までを用いるdifferential dynamic programmingの考え方を用いる事で、学習に最適なサンプル（guided sample）を生成する。
これらのサンプルを用いた学習を行う事で最適化性能を改善可能である。

[FLAG: Fast Linearly-Coupled Adaptive Gradient Method](https://arxiv.org/pdf/1605.08108.pdf)
Nesterov’s accelerated gradient methodは１次オーダーにおいて最適なcomplexityを維持可能で、通常のgradient descentと比較して高速化が可能な手法である。
一方で良いregularizerとしてmirror descentと双璧をなすAdaGradは、gradientを適応的リスケールを行う。
最近においては、accelerated gradientはgradient descentとmirror descentの線形和とみなせる事がわかってきた。
この事実に注目し、本論ではacceleratedされたAdaGradを提案する。
この手法はT iterationに対して1/T^2の収束レートを実現可能である。
機械学習論文読みメモ_47


[Sim-to-Real Robot Learning from Pixels with Progressive Nets](https://arxiv.org/pdf/1610.04286v1.pdf)
pixelレベルの入力からendtoendでタスクを行う制御出力を行う問題は解くのが難しい。
そのための手法の１つとしてはdeep reinforcement learningに基づく手法があるが、基本的にbrute force探索のため現実世界での試行では効率が悪い。
しかしシミュレーション環境においてはコストが低いため一定の効果を期待できる。
本論ではシミュレーション環境で学習されたモデルに関して現実世界とのギャップを埋めるような手法としてprogressive networkを提案する。
Progressive networkそのものは、低レベルから高レベルまでの特徴を転移させて再利用するための一般的なフレームワークである。
この利用により、実世界でのタスクをモデルベース手法に頼らず、deep reinforcement learningの手法により学習する事に成功した。

[SHIV: Reducing Supervisor Burden in DAgger using Support Vectors for Efficient Learning from Demonstrations in High Dimensional State Spaces](http://goldberg.berkeley.edu/pubs/icra16-submitted-SHIV.pdf), ICRA2016
システム特性やコスト関数が不明な場合における、デモンストレーションに基づいたオンライン学習手法を考える。
DAggerのような従来手法においては、agentが新しい状態になるたびにクエリを行うため、そのコストは大きくなる。
そのコストを軽減する策として、得ているデータ分布から有意な差がないクエリサンプルを棄却する手法がある。
本論ではそれをSVMベースに行い、データ分布のlevel set estimationを行い、その境界をサポートベクターを用いて表現する。
表現された境界からの距離を用いる事でクエリサンプルに対するリスクを計算可能にする。
以上の手法により必要なクエリを減らす事に成功した。

[PLATO: Policy Learning using Adaptive Trajectory Optimization](https://arxiv.org/pdf/1603.00622.pdf)
画像などの複雑な入力に対して複雑なpolicyを学習する事は難しい。
本論で提案する手法のPLATOは、model-predictive control(MPC)によって生成された教師情報を用いて学習を行う。
これにより、学習途中のモデルによって行動を行う必要がなくなる。
PLATOはMPCの挙動を変化させて少しずつ学習しているモデルのpolicyへ一致させる事で、モデルの状態に対応した訓練サンプルを生成可能にする。
またMPCに基づくコスト関数を追加し、望ましくない行動を回避するようにできる。
正規表現でHTMLを圧縮する方法（たった1行）

HTMLの圧縮にはいくつも方法がありますが、正規表現を使えば、一行でできます。
（※元のHTMLがきれいにかかれている場合に限るかも）

先にコードを。

# Javascriptでの方法

```Javascript:anything.js

 // 変数 html は事前に fs.readFileSync とかつかってファイルを読み込んでください
 html = html.replace(/ {2,}|\n/g, '');

```

npmやGulpなど、HTMLの圧縮はありますが、HTMLだけだったらシンプルに圧縮できますね。

汎用的なパターンに対応するものがほしければ、そうしたモジュールを取り込むので良いと思いますが、自分が知れている範囲の基本的なHTMLの書き方だけだったらこれで充分です。

# 正規表現の解説

普段、正規表現使わない方のために正規表現部分の解説をしますと、

```
/ {2,}|\n/g
```

分割して考えましょう。

- 「***/***◯◯◯◯***/g***」　・・・　この◯に一致する文字列を取得する
- 「 ***{2,}***」　・・・　取得条件その１（{,}は直前にある文字が何回連続するかの最小値と最大値）
- 「***\n***」　・・・　取得条件その２（\nは改行を表す）
- 「***|***」　・・・　または

`{2`の前に***半角スペースが入っています***。

`.replace`はJavascriptの「置換」ですね、htmlはデータ。

# まとめ
なんでもフレームワークだ、モジュールだと頼ってしまいがちですが、
広い意味で物事のアルゴリズムを捉えると、簡略化できます。
フレームワークやモジュールは時間短縮できますが、
代償として、パフォーマンスや可読性を失う場合もあります。

今回の場合は、HTMLの文法の中で削除すべきものを、

「***改行*** or ***2個以上続く半角スペース***」と定義しただけです。

あたまでかんがえるってだいじ。
指定の拡張子のファイルを探索する

# カレントディレクトリのみ

```py3
import os
import glob


def find_all_files_with_ext(ext):
    pattarn = '*' + os.extsep + ext
    return glob.glob(pattarn)
```

# サブディレクトリも含む

```py3
import os


def _find_all_files_with_ext(dir, ext):
    suffix = os.extsep + ext.lower()
    for root, dirs, files in os.walk(dir):
        for file in files:
            if file.lower().endswith(suffix):
                yield os.path.join(root, file)


def find_all_files_with_ext(dir, ext):
    return list(_find_all_files_with_ext(dir, ext))
```

※ 上のメソッドを先に書いたのでメソッドを分けた状態で載せてますが、リストで取得するだけなら、メソッドを分ける必要は特にないです。
※ インデックス指定比較と比べて、可読性が良く同程度のパフォーマンスであったので、endswith メソッドに修正。

# 参考資料

* [1] [Pythonで再帰的にファイル・ディレクトリを探して出力する - Qiita](http://qiita.com/suin/items/cdef17e447ceeff6e79d)
* [2] [Find all files in directory with extension .txt in Python - Stack Overflow](http://stackoverflow.com/questions/3964681/find-all-files-in-directory-with-extension-txt-in-python)
* [3] [カレントディレクトリ下のzipファイルをすべて解凍する - Qiita](http://qiita.com/salty_7/items/fe4aff1fef2632695a53#_reference-14c8df4ce7f9944ecd41)
* [4] [Case-insensitive string startswith in Python - Stack Overflow](http://stackoverflow.com/questions/13578916/case-insensitive-string-startswith-in-python)
[Visual Studio Code][Python] Python向け tasks.json + problemMatcher の設定

# 目的
PythonのTracebackのエラーが表示されるようにしたかった

## 現状の問題点(2017/02/27)
+ 出力の解析が行ごとでしかできない
+ 複数行に対する解析で、ループ指定が途中行以降でしかできない（ESLint向けなど）
    + => 最終行を指定したキャプチャができない

# 環境

+ Visual Studio Code 1.9.1

# 解析対象サンプル

```py3
def main():
    raise Exception("Exception message")

if __name__ == '__main__':
    main()
```

```
Traceback (most recent call last):
  File "c:\path\to\test.py", line 5, in <module>
    main()
  File "c:\path\to\test.py", line 2, in main
    raise Exception("Exception message")
Exception: Exception message
```

# 設定例

```js:Python向けtasks.json(拡張子はJSONだけどコメントも書ける）
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "0.1.0",
    "command": "python",
    "isShellCommand": true,
    "args": [
        "${file}"
    ],
    "showOutput": "always",
    "problemMatcher": {
        "owner": "python",
        "fileLocation": "absolute",
        "pattern": //[
            {
                "regexp": "^.*File \"(.*)\", line (\\d+?), in.*$",
                "file": 1,
                "line": 2
                //"loop": true
            }
            // ホントは最終行のエラーメッセージを取りたいけども
            // 現状の"problemMatcher"の構文では対応できない
            // https://code.visualstudio.com/Docs/editor/tasks#_defining-a-multiline-problem-matcher
            // https://github.com/Microsoft/vscode/blob/master/src/vs/platform/markers/common/problemMatcher.ts
            //{
            //    "regexp": "^(.*):(.*)$",
            //    "severity": 1,
            //    "message": 2
            //},
        //]
    }
}
```

出力例としては以下のようになります。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/37721/9a6808ee-9183-7d1f-7151-a09279b9b02f.png)

# 補足
実行時に例外が投げられた場所で止めたいということであれば、デバッグ画面の左下のブレークポイントで「All Exceptions」にチェックをいれるだけでも解決すると思います。（ただし、`F5`を２回押さないといけないので１手順多い）

![1.png](https://qiita-image-store.s3.amazonaws.com/0/37721/82ccd14d-6e91-3463-0abc-fe88bbb815b7.png)


# 参考
+ [Tasks in Visual Studio Code](https://code.visualstudio.com/Docs/editor/tasks#_defining-a-multiline-problem-matcher)
+ [Tasks Appendix](https://code.visualstudio.com/docs/editor/tasks_appendix)
where メソッド　検索条件

##where'(:closed => true):条件を表すハッシュ'


```ruby:model_controller.rb(query_whereアクション)
#closed列がtrueである記事を取得
@aricles = Article.where(:closed => true)
	SELECT "articles".* FROM "articles" WHERE "articles"."closed" = 't'
#category列が「Script」で、かつ、closed列がfalseである記事を取得
@aricles = Article.where(:category => 'Script' AND "articles"."closed" = 'f')
	SELECT "articles".* FROM "articles"
	WHERE "articles"."category" = 'Script' AND "articles"."closed" = 'f'
#published列が2011-01-01~2011-06-30の間である記事を取得
@articles = Article.where(:)published => '2011-01-01'..'2011-06-30'
	SELECT "articles".* FROM "articles"
	WHERE ("articles". "published" BETWEEN '2011-01-01' AND '2011-06-30')
#category列が「.NET」または「Script」である記事を取得
@articles + Article.where(:category => ['.NET','Script'])
	SELECT "articles".* FROM "articles"
	WHWRE "articles". "category" IN ('.NET', 'Script')
```


```ruby:model_controller.rb(query_placeアクション)
#category列が「Script」、published列が2011-01-01以降の記事を取得
@articles = Article.wher('category = ? AND published > ?',
	'Script', '2010-01-01')
#同じ条件式を名前付きパラメータで書き換えたもの
@aricles = Article.where(
'category = :category AND published > :published',
{ :category => 'Script', :published => '2011-01-01' })
----------
SELECT "".* FROM "articles"
WHERE (category + 'Script' AND published > '2010-01-01' )
```
ElmとJavaScriptのシンタックス比較表


Elm公式ドキュメントにある[比較表](http://elm-lang.org/docs/from-javascript)を紹介します。

[Elm](http://elm-lang.org/)は[TypeScript](https://www.typescriptlang.org/)の次に注目を浴びているAltJSです。[^1]
[^1]: フロントエンド開発者ハンドブック2017の[2016年のフロントエンド開発の総括](https://frontendmasters.gitbooks.io/front-end-handbook-2017/recap.html)には、「少数だがそれなりの数の開発者がJavaScriptよりElmを選択しはじめている。」とまとめられています。

Elmは他のほとんどのAltJSとはプログラミングパラダイムが異なり、純粋な関数型プログラミングにのみ対応した言語です。[^2]

[^2]: 他にも[PureScript](http://www.purescript.org/)や、[Haskell](https://www.haskell.org/)をJavaScriptにコンパイルするツールがいくつかあります。

オブジェクト指向では書けないと聞くと身構えてしまいそうですが、構文はJavaScriptと似ているのですぐ慣れると思います。[^3]

[^3]: 私のような浅学のエンジニアは、オブジェクト指向でしか書いたことがないと思い込んでいたんですが、JavaScriptは一般的にオブジェクト指向言語にカテゴライズされているものの、関数型言語の性質も持ち合わせているマルチパラダイム言語だったので、何気なくやってることが実は関数型プログラミングだったりしました。ので、あまり恐くありませんでした。


### リテラル
|JavaScript|Elm|
|---|---|
|3|3|
|3.1415|3.1415|
|"Hello world!"|"Hello world!"|
|複数行文字列はほとんど非対応[^4]|"""multiline string"""|
|'Hello world!'|文字列にシングルクォートは使用不可|
|文字と文字列を区別しない|'a'|
|true|True|
|[1,2,3]|[1,2,3]|

[^4]: ES6なら[テンプレートリテラル](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/template_strings#複数行文字列)で対応しています。


### オブジェクト / レコード

|JavaScript|Elm|
|---|---|
|{ x: 3, y: 4 }|{ x = 3, y = 4 }|
|point.x|point.x|
|point.x = 42|{ point &#124; x = 42 }|


### 関数

|JavaScript|Elm|
|---|---|
|function(x, y) { return x + y; }|\x y -> x + y|
|Math.max(3, 4)|max 3 4|
|Math.min(1, Math.pow(2, 4))|min 1 (2^4)|
|numbers.map(Math.sqrt)|List.map sqrt numbers|
|points.map(function(p) { return p.x })|List.map .x points|


### 制御フロー

|JavaScript|Elm|
|---|---|
|3 > 2 ? 'cat' : 'dog'|if 3 > 2 then "cat" else "dog"|
|var x = 42; ...|let x = 42 in ...|
|return 42|すべてが式であり、returnは不要|


### 文字列

|JavaScript|Elm|
|---|---|
|'abc' + '123'|"abc" ++ "123"|
|'abc'.length|String.length "abc"|
|'abc'.toUpperCase()|String.toUpper "abc"|
|'abc' + 123|"abc" ++ toString 123|
Travis で Elasticsearch 5.1 を動かす

# Travis の制限
- Travis のデフォルトの Elasticsearch を利用すると旧バージョンが利用される
- Elasticsearch 5 は Java 8 以上を必要とするが、 Travis のデフォルトは Java 7

# 解決方法
- `addons` 指定を用いて、Java 8 をインストール
- `before_install` 指定を用いて、直接 Elasticsearch 5.1 をインストール

## .travis.yml
```yaml
addons:
  apt:
    packages:
      - oracle-java8-set-default
before_install:
  - export JAVA_HOME=/usr/lib/jvm/java-8-oracle
  - wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.deb
  - sudo dpkg -i --force-confnew elasticsearch-5.1.1.deb
  - sudo service elasticsearch restart
```

## 何故か `export JAVA_HOME` が必要な件
`oracle-java8-set-default` により、自動で `JAVA_HOME` が設定されると思ったら、設定されないようです。よって手動で `export JAVA_HOME=/usr/lib/jvm/java-8-oracle` を `before_install` で実行。
Perl::Critic(perlcritic)を使用して静的解析、コーディング規約テストを実施(実施編：ファイル)

Perlの静的解析、コーディング規約テストを実施する為にPerl::Criticを使用する事になったので、内容を残しておきます。

dockerのubuntuにて実行
「Ubuntu 14.04.3 LTS」
(実行日付：2017/02/26)

## コマンド実行
コマンド：
perl 「Perl::Critic記載ファイル」 「Perl::Critic対象ファイル」

(実行結果)

```
# perl checkCritic.pl testCode.pl
Code before strictures are enabled at line 1, column 1. See page 429 of PBP.
# 
```

(Perl::Critic記載ファイル内容)

```
# cat checkCritic.pl
use Perl::Critic;
use warnings;
use utf8;

my $critic = Perl::Critic->new();

# arg is only one
if ( @ARGV == 1 ){
    my $checkFile = $ARGV[0];
    print $critic->critique($checkFile);

}else {
	print "arg is only one! arg1 is Perl::Critic check File!! \n";
}

# 
```

(Perl::Critic対象ファイル内容)

```
# cat testCode.pl
print "Hello world";

# 
```

出力結果を対象外とする場合

指定内容：
-exclude => ['strict']

newの引数に指定する
my $critic = Perl::Critic->new(-exclude => ['strict']);


(実行例)

```
# perl checkCritic.pl testCode.pl
# 
```

(、、ん、何も出力されない。せめて問題なしのメッセージがほしい)

参照サイト：
[Perl::Critic](http://search.cpan.org/~thaljef/Perl-Critic-1.126/lib/Perl/Critic.pm)
自作クラスとEntityFrameworkをLinqで一度に結合出来ない

EntityFrameworkを勉強したてで、色々やっているのだけれど、EntityFrameworkのテーブルクラスと自作クラスを結合しようとしたら、ToList()の部分でエラーになる。

```vb.net:エラーになるコード
Dim a = From t In _ef.DB_Table
        Join c In EnumableMyClass
        On t.Key1 Equals c.MyClassKey1

Dim a_list = a.ToList()
```
```vbnet:Exception
An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code

Additional information: Unable to create a constant value of type 'XXXXX'. Only primitive types or enumeration types are supported in this context.
```

解決策は、EntytiFrameworkのLinq結合はEntityFrameworkだけででやり、その後、自作クラスと結合するやり方でないとダメである結論に至った。

```vb.net:エラーにならないコード
'EntityFrameworkテーブルと自作クラスは別々に扱う
Dim a = From t In _ef.DB_Table
Dim a_list = a.ToList()

Dim b = From t In a_list
        Join c In EnumableMyClass
        On t.Key1 Equals c.MyClassKey1

Dim b_list = b.ToList()
```
attr_protected/accessibleメソッド　登録・更新時に保護

##attr_protected 'name:保護/許可したいフィールド', [, :as => 'roles:アクセスを許可するロール']
##attr_accessible 'name:保護/許可したいフィールド', [, :as => 'admin:アクセスを許可するロール']

```ruby:user.rb
class User < ActiveRecord::Base
...
#roles列へのマスアサインメントを禁止
attr_protected :roles
#上と同じ意味をattr_accesibleメソッドで書き換え
#attr_accessible :name, :password, :kname, :email
end
```



```ruby:model_controller.rb
@user = User.find(1)
msg + @user.roles
	admin.manager(初期値)
@user.assign_attributes(:name => 'nkakeya', :roles => 'users')
msg += @user.roles 		admin.manager(保護されているので更新されない)

user.rb
class User < ActiveRecord::Base...
...
#roles列へのアクセスをadminロールに対してのみ許可
#（その他の列はデフォルトのロールでアクセス可能）
attr_accessible :name, :password, :kname, :email
attr_accessible :name, :password, :kname, :email, :as => :admin
end

```


```ruby:user.rb
class User < ActiveRecord::Base...
...
#roles列へのアクセスをadminロールに対してのみ許可
#（その他の列はデフォルトのロールでアクセス可能）
attr_accessible :name, :password, :kname, :email
attr_accessible :name, :password, :kname, :email, :as => :admin
end

```



```ruby:model_controller.rb(protect_access2アクション)
@user = User.find(1)
　msg = @user.name + '|' + @user.roles + '<br />'
	yyamada|admin,manager(初期値)
　@user.assign_attributes(:name => 'sato', :roles => 'users')
 msg += @user.name + '|' + @user.roles + '<br />'	
	sato|admin,manager(保護されているのでroles列は更新されない)
　@user.assign_attributes(:name => 'tanaka', :roles => 'users'),
　　:as => :admin)
　msg += @user.name + '|' + @user.roles
	tanaka|users(adminロールはすべての列を更新可能)
	

```
Macでファイル（ディレクトリ）のフルパスをコピーする小技

###1. Automatorにworkflow（サービス）を追加する

Automatorを起動し、サービスを作成する。

![automator.png](https://qiita-image-store.s3.amazonaws.com/0/37319/db258944-3123-af24-0e20-15ab1d5ee0a7.png)

シェル: /bin/bash
入力の引渡し方法: 引数として
```
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
```

###2. ショートカットを登録する

システム環境設定 -> キーボード -> ショートカット -> サービスで先ほど作成したworkflowにショートカットを設定する。
※ここでは「fullpath」という名前で作成しています。

![service.png](https://qiita-image-store.s3.amazonaws.com/0/37319/70486758-7673-f5de-db44-22d7cfa8be7f.png)

###3. 動作確認

任意のファイル or ディレクトリを選択して登録したショートカットを押下する。
テキスト等にペーストできればOK。
centos7 ネットワーク起動しない

ネットワーク起動しようとしたら失敗。
# systemctl restart network.service
Restarting network (via systemctl):  Job for network.service failed. See
'systemctl status network.service' and 'journalctl -xn' for details.

以下のデバッグを仕掛けたら
SYSTEMCTL_SKIP_REDIRECT="enable" bash -x /etc/init.d/network restart

以下ファイルの22行目がおかしいとエラー出たので確認したら、
/etc/sysconfig/network-scripts/ifcfg-ens33

「"」が抜けていた。

詳細は以下URLにのっている。
http://zacodesign.net/blog/?p=862
Jupyter Notebook上でPlotlyのグラフが表示されなくなる現象についての覚え書き

## 問題の現象
### 現象が発生した経緯
Jupyter Notebook上で同じコードを使って何度もプロットを繰り返していると、ある時からグラフが表示されなくなった。
プロット回数の制限を超えたのかと思い、数日経ってから再度プロットを実行してみたが表示されなかった。

### 現象が発生したコード
```py3:Notebook
import numpy as np
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)

from plotly.graph_objs import Scatter3d
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode()

scatter = Scatter3d(x=x, y=y, z=z, mode='lines')
iplot([scatter])
```

### 現象の発生条件
- PlotlyのOfflineモードを使っている
- Jupyter Notebook上にプロット

### 現象発生時の環境
- OS: OS X El Capitan
- Python: 3.5.2
- Plotly: 1.12.9

## 回避策
Plotlyのバージョンを1.9.5に変更したらプロットできるようになった。今のところは正常に動いている。
condaではインストールできないのでpipでインストールした。
`pip install plotly==1.9.5`

## 調査した内容
### 試したこと
- `init_notebook_mode()`を`init_notebook_mode(connected=True)`に変更　→　NG
- Plotlyの再インストール　→　NG
    1. `conda remove plotly`
    2. `conda clean -p`
    3. `conda install plotly`
- VMWare Fusion上のWindows 10で実行　→　NG
- `iplot`を`plot`に変更（Jupyter Notebook外にプロット）　→　OK

### プロット回数の制限
[Plotly API rate limits](http://help.plot.ly/api-rate-limits/#limits-on-requests-to-plotly-servers)
1日に50回までという制限があるが、日をまたいでの制限についての記述はない。

### 同様の現象についての報告
[Offline Mode in Jupyter Notebook shows blank graphs - API / Python - Plotly Forum](https://community.plot.ly/t/offline-mode-in-jupyter-notebook-shows-blank-graphs/1860)
同じような現象が2016年8月から継続的に報告されている。

[iplot doesn't display the graph at first in a new browser · Issue #506 · plotly/plotly.py](https://github.com/plotly/plotly.py/issues/506)
Plotly 1.9.5にダウングレードしたら直ったと書いてある。
systemd-run で定期的に実行するタスクをさっと登録する

サーバで定期的に実行するタスクを登録したいんだけど、別にずっと実行させたいわけではなく、数日間だけ定期実行されていれば良くて、再起動とかで消えてしまっても構わない。

というとき、いちいち crontab で設定したり、あるいは systemd.timer のユニットファイルを書いたりするのはとても面倒です。

`systemd-run` を使えばコマンドだけでそういう設定がさっと作れます。

```sh
systemd-run --unit=oreore --on-active=1s --on-unit-active=30s echo "this is 30s timer."
```

これで 30 秒ごとに `echo "this is 30s timer."` が実行されるようになります。

下記のコマンドで timer のユニットを一覧表示してみると、登録されていることがわかります。

```sh
systemctl list-timers
```

ユニットのステータスも見れます。

```sh
systemctl status oreore.timer
systemctl status oreore.service
```

実行ログも `journalctl` で見れます（CentOS なら `/var/log/messages` にも書かれているだろうけど）。

```sh
journalctl -f -u oreore.service
```

いらなくなったら timer ユニットを stop すれば止まります。

```sh
systemctl stop oreore.timer
```

`systemd-run` の `--unit=oreore` は省略可能で、省略すると `run-99999` みたいな名前が自動的に付けられます。

## 余談その１（--on-XXX の指定）

最初 `--on-unit-active=30s` だけで良いと思っていて「なぜか実行されない」とか思っていました。

`--on-unit-active` つまり OnUnitActiveSec は、ユニットが最後に実行された時間からの相対、なので、１回も実行されていないと「最後に実行された時間」がないため、いつまでも実行されませんでした。

なので `--on-active` つまり OnActiveSec も指定して、タイマーそのものが有効にされた後に１回実行してやる必要がありました。

そういえば普通に timer のユニットを書くときも OnBootSec は指定してましたけど、てっきり「起動直後はいろいろ忙しいからちょっと遅らせたい」ぐらいに考えていましたが、これも OnBootSec を書かなければ OnUnitActiveSec だけではいつまでも実行されません。

## 余談その２（sudo の代替）

root から別のユーザーとしてコマンドを実行したいときに `sudo` だといろいろとつらみがあってその代替として [gosu](https://github.com/tianon/gosu) とかが使われたりしているようなんですけど `systemd-run` でもアドホックに uid/gid 指定してコマンド実行できます。

```sh
systemd-run --scope -q --uid=apache pstree -aug $$
# bash,6243
#   └─pstree,6333,apache -aug 6243
```

`--scope` をつけると scope タイプのユニットとなり、デーモンにはならずに `systemd-run` から直接実行されるようです。
[Swift] count == 0 より isEmpty を使うべき理由

小粒ネタです。Collectionクラスが空かどうか判定する際、**`count == 0`より`isEmpty`プロパティを使ったほうがいい**のはなぜか答えられますか？

これは可読性だけの問題ではありません。
`isEmpty`のドキュメントにはこう書いてあります。[^1]

> When you need to check whether your collection is empty, **use the `isEmpty` property** instead of checking that the `count` property is equal to zero. For collections that don't conform to `RandomAccessCollection`, **accessing the `count` property iterates through the elements of the collection**.

要は、**処理速度の問題**です。

Collectionが`RandomAccessCollection`でない場合、たとえば`BidirectionalCollection`などは`count`の値を返すために要素を全て走査しないといけないので、**O(N)**のオーダーになります。しかし、`isEmpty`は空かどうかをチェックするだけなのでどのようなCollectionでも常に**O(1)**のパフォーマンスが期待でき、高速です。

まあ考えてみればそりゃそうだという話ですが、こういう細かいところも意識して良いコードを書けるようにしていきたいですね。

[^1]: https://developer.apple.com/reference/swift/collection/1641200-isempty
Image Effect Shader を新規作成して書き始めるまでの操作


edo_m18 さんの [[Unity] Image Effectでフェードアウト](http://qiita.com/edo_m18/items/b0670b0274742fa1714e) を参考にさせていただいてフェードアウトを実装しようとしたのだけれど、Image Effect を Unity のどのメニューから設定すれば良いのか、入り口の段階で詰まってしまったので、そのメモです。 

## 環境

- Unity 5.5.0f3

## プロジェクト新規作成

プロジェクトを新規作成したときの Hierarchy, Project タブの状態は以下のようになっています(下図)。

![p.png](https://qiita-image-store.s3.amazonaws.com/0/1900/4203d57d-8c75-d7b8-605b-6de4767fd068.png "p.png")


## Fader.cs スクリプトの作成して Main Camera にアタッチ

```csharp:Fader.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Fader : MonoBehaviour
{
    [SerializeField]
    Material m_Material;

    void OnRenderImage(RenderTexture src, RenderTexture dest)
    {
        Graphics.Blit(src, dest, m_Material);
    }
}
```

Fader.cs スクリプトを Main Camera にドラッグドロップ(アタッチ)します(下図)。

![Unity_5_5_0f3_Personal__64bit__-_Untitled_-_Fader_-_PC__Mac___Linux_Standalone__Personal___OpenGL_4_1_.png](https://qiita-image-store.s3.amazonaws.com/0/1900/183c8fc7-9d67-fc6b-0166-b3042296fb8e.png "Unity_5_5_0f3_Personal__64bit__-_Untitled_-_Fader_-_PC__Mac___Linux_Standalone__Personal___OpenGL_4_1_.png")


## マテリアルを新規作成

Project タブの Create メニューから Material を選択します(下図)。

![スクリーンショット 2017-02-26 22.21.13.png](https://qiita-image-store.s3.amazonaws.com/0/1900/917e4ac9-37d5-c5b6-77ef-b1f33b3b25f0.png "スクリーンショット 2017-02-26 22.21.13.png")

作成したマテリアルに FaderMaterial という名前を付けました。Main Camera にアタッチしている Fader.cs の Material フィールドに FaderMaterial を設定します(下図)。

![a.png](https://qiita-image-store.s3.amazonaws.com/0/1900/91d60ceb-24b2-00c6-5478-1f67740aa67d.png "a.png")



## Image Effect Shader を新規作成

Project タブの Create メニューから Shader -> Image Effect Shader を選択します(下図)。

![スクリーンショット 2017-02-26 22.20.51.png](https://qiita-image-store.s3.amazonaws.com/0/1900/e5b9ab27-9ca6-ba2e-753c-ed78d4e752cd.png "スクリーンショット 2017-02-26 22.20.51.png")

作成した Image Effect Shader に FaderShader という名前を付けました。この FaderShader を FaderMaterial にドラッグドロップします(下図)。

![b.png](https://qiita-image-store.s3.amazonaws.com/0/1900/07d2c859-71a9-e7f9-0bbb-8a704e79323e.png "b.png")

ShaderFader をダブルクリックして、frag 関数を書き換えます。

```
fixed4 frag (v2f i) : SV_Target
{
    fixed4 col = tex2D(_MainTex, i.uv);
    fixed4 black = 1 - fixed4(_Time.yyy / 2, 1);
    col *= black;
    return col;
}
```

以上で設定は完了です。Unity の実行ボタンを押すと、フェードアウトします。やったね！

最後に、edo_m18 さんに感謝いたします。
pyenvインストール

# 必須ライブラリのインストール

### Ubuntuの場合
<pre>
# apt install libssl-dev
# apt install zlib1g-dev
</pre>

# gitからクローン
<pre>
git clone https://github.com/yyuu/pyenv ~/.pyenv
</pre>

# 設定
<pre>
$ vi .bash_profile

+ export PYENV_ROOT=$HOME/.pyenv
+ export PATH=$PYENV_ROOT/bin:$PATH
+ eval "$(pyenv init -)"
</pre>
zip関数に大量に変数をぶっこみたい時

zip便利だけど、時系列データが大量にある時とか困るんだ。
いろいろ試した結果、以下で通った(^^/ ﾜｰｲ

zip(*Alist)で良かったのだ...
以下のケースは30個zipに突っ込んでいる。
先頭から30個づつ切り取られる。

```py
Alist=[]
for c in range(0,30):
    el = [a for a in range(0,10)]
    Alist.append(el)
    
print(Alist)

for Alist_v in zip(*Alist):
    print(list(Alist_v))
```

結果：後半がそれ！
TOPの列から切り取れている！

```py
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
[4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
[6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
[7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7]
[8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8]
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
```
WordPressでアイキャッチ画像を表示する方法

#パターン1 (最も王道)

```php:qiita.rb
<?php the_post_thumbnail(); ?>
```

※参考：[WordPress Codex](http://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_post_thumbnail)

##用例

* アイキャッチ画像があればアイキャッチ画像を表示。なければ、特定の画像を表示

```php:qiita.rb
<?php if (has_post_thumbnail()) : ?>
    <?php the_post_thumbnail(); ?>
<?php else : ?>
    <img src="http://placehold.it/800x350" alt="">
<?php endif ; ?>
```


#パターン2

```php:qiita.rb
<?php echo wp_get_attachment_url( get_post_thumbnail_id() ); ?>
```

※参考：[WordPress Codex](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_get_attachment_url)

##用例

* 背景画像をHTMLにインラインで記述し表示する

```php:qiita.rb
<p style="background-image: url(<?php echo wp_get_attachment_url( get_post_thumbnail_id() ); ?>)"></p>
```
【個人メモ】RasPiにSSH接続する

毎回どうやるんだっけって忘れてしまうので備忘録

電源の入ったRasPiがあって、SSHで繋ぎたいけどIPアドレスがわからない。でもいちいち液晶に繋いでキーボード用意して...ってのはかったるい。そんな時

まずはRasPiのIPアドレスを見つけ出す。

```
sudo arp-scan -I lo -l
```

`lo` ではダメなので、適宜スキャンしたいインターフェース名に変更する。

これでそれっぽいやつに片っ端からsshでつなぐ。RasPiの初期設定通りなら

ユーザー名: pi
パスワード: raspberry

で繋ぐ。

追記

```
arp -a
```

でいける
EX予約が利用しているライブラリ

# はじめに

EX予約アプリが登場しました。

[エクスプレス予約サービス公式スマホアプリ・EX予約アプリ](https://expy.jp/lp/app/)

今まではWebでしか利用できませんでしたが、ついに登場しました。
Apple Pay が登場してからどんどん便利になっていきますね。

また、2017年9月より[スマートEX](http://www.poitan.jp/archives/27296)という交通系ICカードを登録することで年会費無料で利用できるようになる新しいチケットレスサービスが開始するらしいです。
こちらも期待です。

さて、そんな期待あふれるEX予約アプリが利用しているライブラリに興味があるのでみんな大好きライセンス情報をチェックしてみました。

# 著作権情報に記載されているライブラリ

## [AFNetworking](https://github.com/AFNetworking/AFNetworking)

言わずと知れたネットワーキングフレームワーク。
Alamofire ではないみたいです。 

## [Cartography](https://github.com/robb/Cartography)

AutoLayout を簡単に書くためのライブラリです。

## [CocoaLumberjack](https://github.com/CocoaLumberjack/CocoaLumberjack)

高速かつシンプルで強力かつ柔軟なロギングフレームワークです。

## [DrawerController](https://github.com/sascha/DrawerController)

MMDrawerController の Swift 版。
サイドメニューの表示をするときに使う Container View Controller です。

## [j2objc](https://github.com/google/j2objc)

「著作権情報」には J2ObjC101 と書いていますが、ここでは 101 を省いて説明＆記載します。
Java から Objective-C に変換するライブラリです。
Android と iOS でコードを共通化したいときに使うものです。

## [KeychainAccess](https://github.com/kishikawakatsumi/KeychainAccess)

SwiftでKeychainを簡単に使うライブラリ。

## [MBProgressHUD](https://github.com/jdg/MBProgressHUD)

ローディングの表示用ライブラリです。

## [R.swift](https://github.com/mac-cain13/R.swift)

リソースファイルの typo を防ぐために Android の R クラスと似たものを生成してくれるライブラリです。

## [R.swift.Library](https://github.com/mac-cain13/R.swift.Library)

R.swiftによって生成されたコードをサポートする型を含むライブラリだそうです。

## [ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa)

リアクティブプログラミング用のライブラリです。

## [ReactiveSwift](https://github.com/ReactiveCocoa/ReactiveSwift)

リアクティブプログラミング用のライブラリです。

## [Result](https://github.com/antitypical/Result)

`!` を回避するためのライブラリ（雑な説明）です。

## [SWXMLHash](https://github.com/drmohundro/SWXMLHash)

Swift 向けの XML パーサーです。

## [SwiftyUserDefaults](https://github.com/radex/SwiftyUserDefaults)

Swift で NSUserDefaults をモダンに書くためのライブラリです。

## [UIColor-HexRGB](https://github.com/tinymind/UIColor-HexRGB)

HexをUIColorに変換してくれるライブラリです。


### 以上。

# さいごに

各種説明文は各ライブラリからそのまま利用していたり、変更したり、独自に書いていたりします。
詳しい説明については各リンク先の Github 等をご確認下さい。

ライブラリから察するに言語は Java + Swift みたいです。
結構トリッキーな実装をしているように感じる。
それも、流行っている開発スタイルで。

利用した OSS の LICENSE ファイルの中身をきっちり表示しているので素晴らしいですね。
redirect_toメソッド

##redirect_to "'http://qiita.com':リダイレクト先のURL", :status => :'moved_permanently:ステータスコード'


```ruby:basic_controller.rb(res_redirectアクション)
#外部サイトにリダイレクト（301 Moved Permanentlyでアドレス移転を通知）
redirect_to 'http://qiita.com', :status => :moved_permanently
#同じコントローラないの異なるアクションにリダイレクト
redirect_to :action => 'render_text'
#articlesコントローラのindexアクションにリダイレクト
redirect_to :controller => 'articles', :action => 'index'
#リダイレクト先を自動生成されるURLヘルパーで指定
redirect_to article_path(1)
#一つ前のページにリダイレクト
redirect_to :back
```

------------------

redirect_to('{ :action => 'redirect_flash2' }:リダイレクト先のURL',
 :notice => 'noticeメッセージ:リダイレクト先に引き渡したいメッセージ')
}
redirect_to('{ :action => 'redirect_flash2' }:リダイレクト先のURL',
 :flash => {':notice:パラメータ名' => 'noticeメッセージ:リダイレクト先に引き渡したいメッセージ' })

```ruby:basic_controller.rb(redirect_flashアクション)
#redirect_flash2アクションにflashメッセージnoticeを引き渡す
redirect_to({ :action => 'redirect_flash2' },
 :notice => 'noticeメッセージ')
#以下のコードも同じ意味
redirect_to({ :action => 'redirect_flash2' },
 :flash => {:notice => 'noticeメッセージ' })
```

```ruby:basic/redirect_flash2.html.erb
<%# いずれも同じ意味(flash[...]の気泡は、notice、alert以外で利用) %>
<p><%= notice %></p>
<p><%= flash[:notice] %></p>
```
Pythonで2017年のプレミアムフライデー一覧を出力する

(わーい！初投稿たーのしー！)

プレミアムフライデー初日より遅れての投稿です...

## 2017年の各月最終の金曜一覧出力

```py:lastfri.py
import calendar

def Last_FridayList(year):
 for month in range(1, 13):
  lastfri = max(week[calendar.FRIDAY]
   for week in calendar.monthcalendar(year, month))
  print('{:4d}-{:02d}-{:02d}'.format(year, month, lastfri))
Last_FridayList(2017)
```

これで、
2017-01-27
2017-02-24
2017-03-31
2017-04-28
2017-05-26
2017-06-30
2017-07-28
2017-08-25
2017-09-29
2017-10-27
2017-11-24
2017-12-29
と標準出力できます。