OmniAICreator/Qiita-1.07M huggingface dataset:
なぜオートマトンや形式言語を学ぶのか？

## はじめに
オートマトンや形式言語の理論は、コンピュータ・サイエンスを学ぶ学生にとっては、（必修ではないが）学ぶことが望ましいコースとしての立ち位置を確立してはいるものの、形式的にすぎるとか、実応用にかけるとか思われがちであるとも思う。しかし、最近のAIブームな世の中に、計算機ができることが何か？という問題は重要になっており、もう一度（古典を）学び直すことは有意義ではないかと思っている。実際に、川添愛さんが童話仕立てな[物語](https://www.amazon.co.jp/dp/4130633686/)にする試みがあったり、高岡詠子さんが[ブルーバックス](https://www.amazon.co.jp/dp/4062578514/)を比較的最近（2014年）に出したりと、世の中から少し思い出されているのではないだろうか。

## そこで
最近、どんな情報が世の中に出ているのか調べてみた。すると、この分野のバイブル的な書籍である、[オートマトン言語理論 計算論](https://www.amazon.co.jp/dp/4781910262/)の著者であるスタンフォード大学Jeff Ullman氏の[ホームページ](http://infolab.stanford.edu/~ullman/ialc.html)から、講義スライドや演習と解答等がダウンロードできるではないか（だいぶ前からではあるが）。素晴らしい時代になったものである。そこで、その講義スライドから、「なぜオートマトンを学習するのか」というさわりの部分が参考になりそうなので、抜粋し日本語にしてみた。

##  以下、「なぜオートマトンを学習するのか」の超訳
CS154（オートマトンと複雑さの理論入門）の授業にようこそ。なぜオートマトンを学習するのかについて説明しよう。スタンフォード大学の卒業後5年の卒業生に対して、どの授業が彼らの仕事に役に立ったかに関する調査がある。もちろん、CS106（Javaプログラミング入門）のような基礎的な授業は当然トップの座にくるものの、選択授業の中では、CS154は傑出して高くなっている。例えば、AIに比べても3倍のスコアである。

では、どうしてそうなったのだろう。まず、正規表現は多くのシステムで使われている。例えば、UNIX（a. \*b等）や、XMLタグを記述するDTD  （person (name, addr, child\*)等） があげられる 。有限オートマトンはプロトコルや電子回路をモデル化することができ、その理論はモデルを検証することに利用されている。

文脈自由文法は、基本的に全てのプログラミング言語の構文を記述するのに利用されている（自然言語を記述する重要な役割があることを忘れてはいけないが）。DTDは全体として、実際に文脈自由文法そのものである。

現実の問題に対して、解決策を開発しようとすれば、我々はしばしばソフトウェアができることの限界に直面することになる。例えば、決定できない（Undecidable）ものごと - どんなプログラムによっても扱うことができないこと、手に負えない（Intractable）ものごと - プログラムは存在するが高速に処理することはできないこと、がある。CS154は、そのような場合にあなたの道具となる。

CS154を学ぶことによって、我々は離散システムを形式的に扱う方法を学ぶことができる。あなたは、あるプログラムが正しいと証明することはきっとないだろうが、なぜトリッキーなテクニックが本当に有効になっていることを考える必要はでてくるだろう。そして、我々は抽象的なモデルとそれを構築する経験を得ることができる。階層化されたソフトウェアのアーキテクチャをモデル化できる。

## おわりに
思ったほど、新しい情報はなかったかもしれないが、ご参考まで…。ちなみに、オートマトン言語理論 計算論は、英語では第3版が出ていて、それで授業をやっているらしい。日本語化はまだだと思う。第1版は数学的なドライな記述の歯ごたえのあるものだったが、第2版はサンプルをプログラムで例示したり大分イメージが変わっていた。第3版はどうなっているのかは、これから確認してみたい。また、今回調べた中で丸岡先生の[新しい本](https://www.amazon.co.jp/dp/4781914136/)もコンパクトで良いと思った。
railsのDBをMySQLに変更する①～Mysqlのインストール～

##環境
□OS:Windows10 home
※bash on ubuntu on windows

###経緯
railsアプリケーションを作成したが、DBの設定とか特にせず、railsチュートリアルに沿った設定だったため、DBはSQLite3を使っていた。

しかし、何かと不便でAWSにあげてみようとした際にMySQLにすると決意！

無駄なこと、意味不明なことあるかと思いますが、その際は優しく教えて頂けたらと思います。



###今回やったこと
Mysqlのインストールの実施。


初めはgemのインストールとか、Gemfileの変更をしていたが、全くつながらず・・・
Mysqlを起動しようと思って、サービスのstartをたたいても起動できずエラー・・・

その時にやっとMysqlがないことに気づきインストールを実施。

以下を参考にインストールした。
https://www.dbonline.jp/mysql/install/index1.html


###インストール完了後

```
$sudo service mysql status

* MySQL is stopped.
```

という表示となり、mysqlが停止中であることが確認できた。
Sparkのルーティングで仕様に迷うところ

またsparkのルーティングの話です。
小出しになっているからそのうちまとめないと。

### ワールドカードを指定した場合のルーティング

"/sample/*" というパスを設定した場合、下記のURLにマッチングします。

````
/sample/
/sample/hello
/sample/hello/
/sample/hello/*
````

下記にはマッチングしません。

````
/sample
````


### before、after、afterAfterを使うときのリクエストパラメーター

パスパラメーターを利用する場合、filterでもマッチング設定を行う必要があります。

ダメなソース

````java:
public static void main(String[] args) {

  before((request, response) -> {
    system.out.println(request.params("name")); // nullが表示される
  });

  get("/:name", (request, respoonse) -> request.params("name"));
}
````

イケてるソース

````java:
public static void main(String[] args) {

  before("/:name", (request, response) -> {
    system.out.println(request.params("name")); // urlに指定された内容が表示される
  });

  get("/:name", (request, respoonse) -> request.params("name"));
}
````

ちょっと冗長な感じもしますね。
ちょっと複雑なuiを作るときにあると便利なスクリプトとかアセット(uGUI)

##スナップするscrollView
![scroll.gif](https://qiita-image-store.s3.amazonaws.com/0/46444/dcb7bc2e-0078-bb3c-7ded-3f12cfc40b25.gif)
<a href="https://www.youtube.com/watch?v=OsnyJNbqYXo" target="_blank">ここ</a>の動画説明のところにファイルがあるのでダウンロード。
たった1ファイルでスナップとページによるドットの表示とかもやってくれる
これ系結構使うんだよね。
もはや公式であって欲しいぐらいの勢いです。

##サイズの違うコンテンツを並べるスクリプト
<img width="323" alt="スクリーンショット 2018-03-01 22.05.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/8a14429f-95fa-7428-eb89-786f4f5edeb9.png">
<a href="https://stackoverflow.com/questions/38336835/correct-flowlayoutgroup-in-unity3d-as-per-horizontallayoutgroup-etc/38479097" target="_blank">ここ</a>のscriptを使えば完了！
GridLayoutだと同じサイズしか並べられないからね。

##NativePicker
<a href="https://www.assetstore.unity3d.com/jp/#!/content/8323" target="_blank">NativePicker</a>
ネイティブのピッカー系(ただしUnityEditor上では動かない Android iPhoneなど端末のものが呼ばれるのでレイアウトはそれぞれ違う)。ネイティブの処理なので画像を表示したり、見た目のカスタマイズはできない

##Picker for uGUI
<a href="https://assetstore.unity.com/packages/tools/gui/picker-for-ugui-31412" target="_blank">Picker for uGUI</a>
uGUIのドラム系のピッカー。
画像とかも入れたりできるよ

##UGUI Super ScrollView
<a href="https://www.assetstore.unity3d.com/jp/?stay#!/content/86572" target="_blank">UGUI Super ScrollView</a>
ScrollView系の表示はこれで一式揃う。
スナップするスクロールバーをはじめ、真ん中以外のものが小さくなるスクロールや
Lineみたいなメッセージ、アコーディオン、スクロールで一番下まで引っ張ると追加でダウンロード見たいなスマホだとよくある表示とか。

<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/9f39eb64-4231-ce4b-fcf8-a756be1ad1f8.gif" width="500px"/>
中身のprefab使い回す系だから、1000個表示しても軽い！

##PagedRect - Paging, Galleries, and Menus for Unity UI
こちらもScrollView系
無限ループ、多重スクロールからのスナップまで。
これ全部やるのめんどくさいからね。
![18.gif](https://qiita-image-store.s3.amazonaws.com/0/46444/c5ecc1c8-0a0e-fe29-e03c-9fcd3aeb82a1.gif)

多重スクロールだけならこっちで
<a href="http://tsubakit1.hateblo.jp/entry/2015/02/09/235951" target="_blank">UnityのuGUIで階層構造を持ったスクロールビューを作る</a>

##Super TreeView for UGUI
<a href="https://www.assetstore.unity3d.com/jp/?stay#!/content/86571" target="_blank">Super TreeView for UGUI</a>
階層表示。こういうの1から作るのめんどくさい
heroku runでETIMEDOUTなときの対処法と原因

たとえばherokuにデータベースをセットアップするとき

```
heroku run python manage.py migrate
```
に対して接続エラー

```
ETIMEDOUT: connect ETIMEDOUT 50.19.103.36:5000
```
が返ってくる場合、たとえばホストのファイアーウォールが原因で、5000番ポートが使えずheroku側のコンソールからこちら側のローカルコンソールに接続できていない可能性がある(詳細な原因はheroku logsで確認できる)。そのような場合

```
heroku run:detached python manage.py migrate
```
でエラーを回避できる。ただしこの方法では、herokuのコンソールからの標準出力(stdout)を受け取らない(detached)ことによってエラーを回避しているので、
実際にmigrateできたかどうかは

```
heroku logs
```

で確かめる必要がある。
#参考

<a href="https://stackoverflow.com/questions/20926403/heroku-rake-dbmigrate-results-in-error-r13-attach-error-failed-to-attach-t">Heroku rake db:migrate results in Error R13 (Attach error) -> Failed to attach to process</a>
LXCでホストからコンテナにSSH接続するためのホスト側の設定

設定ファイルをいくつか書けばできます。

```text:/etc/lxc/default.conf
lxc.network.type  = veth
lxc.network.flags = up
lxc.network.link  = lxcbr0
lxc.network.name  = eth0
```

```text:/etc/default/lxc-net
USE_LXC_BRIDGE="true"
LXC_BRIDGE="lxcbr0"
LXC_ADDR="10.0.3.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.0.3.0/24"
LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
LXC_DHCP_MAX="253"
LXC_DHCP_CONFILE=""
LXC_DOMAIN="lxc.localdomain"
```

```text:/etc/dhcp/dhclient.conf
# ...snip
# For lxc containers
prepend domain-name "lxc.localdomain";
prepend domain-name-servers 10.0.3.1;
# snip...
```

仕上げにNetworkManagerを再起動してください。

```
$ sudo systemctl start lxc-net.service
$ sudo systemctl restart NetworkManager.service
```

これで以下のように作ったコンテナに対して名前でアクセスできるようになります。

```
$ sudo lxc-create -t download -n stretch -- -d debian -r stretch -a amd64
$ sudo lxc-start -n stretch
$ ping stretch
PING stretch.lxc.localdomain (10.0.3.216) 56(84) bytes of data.
64 bytes from stretch.lxc.localdomain (10.0.3.216): icmp_seq=1 ttl=64 time=0.038 ms
64 bytes from stretch.lxc.localdomain (10.0.3.216): icmp_seq=2 ttl=64 time=0.064 ms
64 bytes from stretch.lxc.localdomain (10.0.3.216): icmp_seq=3 ttl=64 time=0.065 ms
^C
--- stretch.lxc.localdomain ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2037ms
rtt min/avg/max/mdev = 0.038/0.055/0.065/0.015 ms
```

別途、openssh-server をインストールしたり、専用のユーザーを作成したりなどしてください。
RDSのログをCloudWatchLogsに送る

少し前に、RDSを新規に作成しようと思った時に偶然発見しました。
（いつの間に、アップデートされていたのやら。。。）
※公式の情報は[こちら](https://aws.amazon.com/jp/blogs/database/monitor-amazon-rds-for-mysql-and-mariadb-logs-with-amazon-cloudwatch/)

本投稿では、下記のエンジンで検証しています。
 - MySQL 5.6.37

#詳細設定から設置
<img width="797" alt="スクリーンショット 2018-03-01 21.35.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/218674/1987ac80-cf7b-9c5e-d1cf-50689030cc67.png">

ログストリームに自動で送れるようになるのは、
　- 監査ログ
　- エラーログ
　- 全般ログ
　- スロークエリーログ
　の４つで、すでに作成してあるインスタンスにも、コンソールから数クリックで設定をすることが可能です。

#CloudWatch Logs側から見ると...
<img width="983" alt="スクリーンショット 2018-03-01 21.58.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/218674/08845f42-92fd-55dc-2d2f-5c098412a555.png">

このような感じで、各ログごとにロググループが作成されています。

#終わりに
これで、RDSのログ運用も楽になりそう！！
Unityから外部ファイルを扱おうとして詰まった話

#はじめに
やらかしたので備忘録です。
Unityで実行した際には呼び出せたbatファイルが
ビルドしたプログラムでは呼び出せなかった話です。

**[2018/3/2/10:00]**
OSとUnityのバージョンを記載しました。
原因のパス指定の間違いについての言及を詳細にしました。

#開発および実行環境
- Unity 5.6.3f1
- Visual Studio C# 2017
- Windows 10 Home


#原因
UnityでPlayボタンを押して実行したものとビルドしたものでbatファイルへのパス指定が変わっていた。
そもそもビルドしたプログラムではbatファイルは存在してなかった(?)

batファイルは**Assets/ProcessScriptsディレクトリ**の中に置いてありました。
プログラム上でパス指定にはApplication.dataPathを使用し,
```Application.dataPath+"/ProcessScripts/hoge.bat"```
のようにしていました。

この場合, 
UnityでPlayボタンを押して実行した場合, このパスは以下のようになっています。
**C:/～/hogeProject/Assets/ProcessScripts/hoge.bat**

しかし, ビルドしたプログラムで実行した場合は以下のようになっていました。
**C:/～/hogeProject/hogeProject_Data/ProcessScripts/hoge.bat**

なんか変わっている...

#解決
調べていくとAssetsディレクトリ内の**StreamingAssets**というディレクトリの
中のものだけビルド時に**hogeProject_Data**というディレクトリへ移動されて
ビルド後にも使えるそうです。

ということでAssetsディレクトリ内にStreamingAssetsディレクトリを作成し, 
batファイルが入ったProcessScriptsディレクトリごと移動させました。

移動後のパス指定では
```Application.dataPath+"/StreamingAssets/ProcessScripts/hoge.bat"```
のようにしました。

これでビルド後もきちんと呼び出されるようになりました。

#まとめ
プログラムから直接指定するファイルはStreamingAssetsの中に
入れておく必要があるということですね。

#参考
[ストリーミングアセット](https://docs.unity3d.com/ja/540/Manual/StreamingAssets.html)
[ビルドしたプログラムでLogを見る方法](http://tsubakit1.hateblo.jp/entry/2017/05/24/220029)
ひょっとするとすごいぞ！。。。改めpix2pix-starGANなのだII.未知データによる検証♬

もう一つ重要な要素
それは、そもそもpix2pix(u-net版)が過学習だという疑惑。。。
今回、はからずもこの問題に決着がつきそうなのだ。

つまり、今回のStarGANのベースとして、pix2pix(u-net版)とpix2pix(encoder-decoder版)の両者利用して学習を実施してみた。
データ等については、同一条件である。

今回はその結果を示そうと思う。
ただし、学習した画像自身や学習に要する時間などはほとんど変わらない。では一体何が変わったのか？
両者を別のテストデータに適用したときに大きな差が出現しました。
このことは、以前も同様な現象がありましたが、あまりはっきりしたことは言えませんでした。
ということで、以下結果を示します。
#未知データの準備
ここでは、AKB総選挙2017の２番目のまゆゆさんと１０番目のキタハラさんのデータを適当に１００個ずつ選んで、それを同数５０個ずつ混ぜ合わせたものを使った。
こうすることにより、適用したときの相対ペアをモデルに選ばせられるし、結果についての予測もしずらくなると考えた。
また、パラメータはどちらも８０００epoch回して得られたものを利用した。
#pix2pix(u-net版)－starGANモデルの未知データへの適用
以下、いくつかの結果を示す
![current_batch_validation0.png](https://qiita-image-store.s3.amazonaws.com/0/233744/c256b20f-efc7-a581-68e2-8a2e5f8e51ff.png)
。。。以下続けたいがまともなのは学習に使ったデータだけなので、ここでやめる
#pix2pix(encoder-decoer版)－starGANモデルの未知データへの適用
以下、すべての結果を示す。示すことができる。
![val_mayu2kita.png](https://qiita-image-store.s3.amazonaws.com/0/233744/c52729ba-43f0-5db0-0d74-18c5716140a6.png)
![val_mayu2kita2.png](https://qiita-image-store.s3.amazonaws.com/0/233744/6e84b77a-bb15-e233-9b36-4d1e21e09f8a.png)
#結果の評価
結果は、一目瞭然である。pix2pix(u-net版)では、明らかに当該画像のみ学習しており、その他の画像については、ほとんど適用できないといえる。
一方、pix2pix(encoder-decoder版)をベースにしたstarGANはまだまだぼやけているが、かなり女性顔を示していると言える。というか、誰に似ているか程度には判別でき、表情の学習として、

素顔⇒変顔⇒泣き顔⇒不満顔⇒怒り顔⇒笑顔⇒素顔

を意識して見ると、そう言えばという順番になっているように思う。みんな笑っている入力がほとんどのため、素顔が多いが。つまり、学習した顔以外の顔についても、案外上記並び順が適用されていると評価できる。
また、時折シャープな画像が出現するが、それはもともと学習に使った画像である。
#まとめ
１．今回の結果からpix2pix(u-net版）-starGANは過学習である
２．一応、pix2pix(encoder-decoder版)-starGANは１０個／カテゴリの６連結GANでも学習できており、学習データ以外のデータにも適用できる。
#課題
１．前回同様の課題に付け加えて、さらに学習していくとさらに綺麗になっていくのか
２．pix2pix(u-net版）はpix2pix(encoder-decoder版)に比して優れた部分はないのか
Ubuntu 16.04 LTSにmikutter 3.6.4をインストール

#はまりポイント

* Ruby 2.5.0が必要（なように見える）が、ubuntu 16.04 LTSには2.3.1しか入ってない

* rbenvでruby2.5.0を入れてもlibruby.soがビルドされない。twitter-textで必要になるidnがlibruby.so.2.5.0をリンクしようとするのでsoがインストールされるRVM( https://rvm.io/ )を使ってruby2.5.0を入れる

* 何故かtwitter-textのv2.jsonとかいうのがない。githubから適当にダウンロード( https://github.com/twitter/twitter-text/blob/master/config/v2.json )して適当に配置（激怒

#手順

idn2とかgtk2とか確か必要だった気がした。激怒しすぎてもう忘れた（憤怒

追記(2018/3/2) libidn2-0-devじゃなくてlibidn11-devだった（激怒 お詫びします(憤怒

```sh
% sudo apt install curl
% sudo apt install libidn11-dev
% sudo apt install libgtk2.0-dev

% gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
% \curl -sSL https://get.rvm.io | bash -s stable
% echo "source ~/.rvm/scripts/rvm" >> ~/.bashrc
% source ~/.rvm/scripts/rvm

% rvm install "ruby-2.5.0"

% tar xzvf mikutter.3.6.4.tar.gz
% cd mikutter
% gem install bundle
% bundle install
% mkdir config
% curl https://raw.githubusercontent.com/twitter/twitter-text/master/config/v2.json > config/v2.json
% ./mikutter.rb
```
#Quantopian Algorithm で order_target

##order_target

[order_target](https://www.quantopian.com/help#api-order-target)は，[order](https://qiita.com/shinseitaro/items/4e88c0b05c3452a86fbc "#Quantopian Algorithm で order - Qiita")と同様に，銘柄と株数を指定する注文関数ですが，このときの株数とは**ポートフォリオに保有したい株数**という意味になります．もし既に指定した分だけの株数を持っている場合は，新たに買い増したり売り増したりすることはありません．


## アルゴリズム例

（オーダー方法以外は，[#Quantopian Algorithm で order - Qiita](https://qiita.com/shinseitaro/items/4e88c0b05c3452a86fbc#%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E4%BE%8B "#Quantopian Algorithm で order - Qiita")にコメントで説明していますのでご参照下さい）

```python
def initialize(context):
    context.security = sid(24)
    schedule_function(rebalance, 
                      date_rule=date_rules.every_day(),
                      time_rule=time_rules.market_close(minutes = 1))

def rebalance(context, data):
    price_history = data.history(
        context.security,
        fields='price',
        bar_count=5,
        frequency='1d'
    )
    average_price = price_history.mean()
    current_price = data.current(context.security, 'price') 
    if data.can_trade(context.security):
        if current_price > (1.01 * average_price):
            # 成り行きでAAPLを１００株買う．しかし，既に持っていたら買わない．
            order_target(context.security, 100)
            log.info("Buying %s" % (context.security.symbol))
        elif current_price < average_price:
            order_target(context.security, 0)
            log.info("Selling %s" % (context.security.symbol))
    
    record(current_price=current_price, average_price=average_price)
```

##メモ

上記を `full backtest` してログを確認すると，例えば2017/05/09〜13までは条件（`current_price > (1.01 * average_price)`)に当てはまるので，AAPLをロング注文していますが，Transaction Detailを見ると分かるように，2017/05/09しか取引していません．

Log の画像

![Screenshot from 2018-03-01 21-00-06.png](https://qiita-image-store.s3.amazonaws.com/0/14019/9e828759-6059-80bb-73a4-d8fdc45c0132.png)

Transaction Detailの画像
![Screenshot from 2018-03-01 21-02-10 (1).png](https://qiita-image-store.s3.amazonaws.com/0/14019/fc13c0c7-91ea-a242-8e12-46402cf4c111.png)


注文する前にポジション確認しなくてもほしい株数だけ保有してくれるというのは，とてもベンリですね．
次回は，[order_target_value](https://www.quantopian.com/help#api-order-target)です．

##他のオーダー方法

[#Quantopian Algorithm で order](https://qiita.com/shinseitaro/items/4e88c0b05c3452a86fbc "#Quantopian Algorithm で order - Qiita")
[#Quantopian Algorithm で order_value](https://qiita.com/shinseitaro/items/16f0f12ad65f428c2f4b "#Quantopian Algorithm で order_value - Qiita")
[#Quantopian Algorithm で order_percent](https://qiita.com/shinseitaro/items/943cfafe00dd3841a79e "#Quantopian Algorithm で order_percent - Qiita")
[#Quantopian Algorithm で order_target_value](https://qiita.com/shinseitaro/items/7f9b45ab6fd5149e7a1e "#Quantopian Algorithm で order_target_value - Qiita")
Wordpress 固定ページの「親」の項目が表示されない

これは F氏から相談を受けたものの、首をひねるしかなく、結局 本人が解決に導いたトラブルなのだが、有用な情報源が見当たらなかったので 共有のために記す

## 現象

`固定ページ` または `階層が有効のカスタム投稿タイプ` で、親となるページを用意していた__つもり__の上で子ページを作ろうとしたら、メタボックスに 親ページ の項目が表示されなかった

## 原因

「__つもり__」 というのは、まだ公開してはならないコンテンツだったため、親ページを `非公開` で保存していた。のだが、これだと Wordpress は 「親ページがない」 ので 「メタボックスに項目を表示しない」 という仕様だった

もう少し具体的に言うと、`post_status が publish` かどうかを見ていた

## 解決策

* 該当のページへの動線を隠したまま、親ページを公開・子ページの登録、という方法
* `publish` 以外も含まれるように フィルターフック で追加する
    * 参考: [WordPress 固定ページの投稿ステータス](http://ounziw.com/2012/05/24/post_status/)
        * 筆者は試してません
        * 2012年の記事なので掲載されているフックがそのまま動かないかも

## ドキュメントには書かれていたのか

一応の解決を見たものの、気になったので公式ドキュメントを確認してみた。日本語版は古い (最終更新が2009年だった) ので、英語版を確認

公式ドキュメントの固定ページの項 ([To create a subpage - Pages &laquo; WordPress Codex](https://codex.wordpress.org/Pages#To_create_a_subpage)) から引用

> 1. Go to Administration > Pages > Add New screen.
> 2. In the right menu, click the "Page Parent" drop-down menu. The drop-down menu contains a list of all the Pages already created for your site.
> 3. Select the appropriate parent Page from the drop-down menu to make the current Page a child Page.
> 4. Add content to the subpage.
> 5. Click Publish when ready.

とある。本件での肝は、

> The drop-down menu contains a list of **all the Pages already created** for your site.

訳すとすれば 「ドロップダウンメニューには、あなたのサイトの **すべての作成済みページ** のリストが含まれている」 だが、個人的には **公開済み (published)** と書くべきと思う…
C#/LINQを用いて重複するものを探すあれこれ

自分用メモです。

## C#/LINQを用いて重複するものを探すあれこれ

### 0. はじめに

- 目的：Memberリストに含まれるメンバーを年齢でグルーピングすること

- コンストラクタ
 - Name string 
 - Age string 

Ageがintではなくstringなのはご愛敬。

### 1. 
年齢でグルーピングし、年齢をIGrouping<string,Members>で返す。

```c#:
var age = members.GroupBy(s => s.Age);
```


### 2. 
年齢でグルーピングし、すべてのオブジェクトを返す（実用上はあまり意味がない）。

```c#
var allMemberss  = members.GroupBy(s => s.Age).SelectMany(grp => grp);
```

こんなのが返ってくる。

```
Results View	Expanding the Results View will enumerate the IEnumerable	
[0]	{Customers}	Customers
	Name "山田太郎"	string
	Age	"19"	string
....
```


### 3.
年齢でグルーピングし、すべてのオブジェクトを返したのち、重複する2番目のオブジェクトをIEmurable<object>型で取得する。
重複しているものがあるかチェックをしたいときに使える。

```c#
var duplicateMembers = members.GroupBy(s => s.Age).SelectMany(grp => grp.Skip(1));
```


### 4.
年齢でグルーピングし、グループのカウントが1より大きい年齢をList<string>型で取得する。
重複する年齢が欲しい時に使える。

```c#
var duplicateAges = members.GroupBy(s => s.Age).Where(g => g.Count() > 1).Select(g => g.Key).ToList();
```

### 5.
年齢でグルーピングし、グループのカウントが1より大きい年齢をもつオブジェクトをList<object>型で取得する。
重複している年齢を持つインスタンスが欲しい時に使える。

```c#
List<Customers> duplicateCarNumber2  = customers.GroupBy(s => s.CarNumber).Where(g => g.Count() > 1).SelectMany(g => g).ToList();
```
Facebookのコメントで「おめでとう」などにときどき色がつくものについて解説記事を書きました。

![Sunday, April 7 2019 at 8 PM748 North Oakland St. Jackson, NJ 08527.png](https://qiita-image-store.s3.amazonaws.com/0/207014/d48d3094-d992-c159-bf42-360a1686b73c.png)

Facebookのコメントで「おめでとう」などを入力すると色がついてアニメーションが出ることがあります。

どの文字でどんなアニメーションが出るのか日本語で解説記事を書きました。

よろしければご覧ください。

▼Facebookのコメントにおめでとうと書くと色がつくアレの出し方、消し方、文字一覧
http://nomaddesignerstips.com/facebook-colored-comment/
SVG 画像を CSS で文字色と同じ色に塗る

# TL;DR

`currentColor` で「現在の文字色」が取れました。

# なにをやったか

ウェブページに SVG 画像を置くとき、 CSS で色を制御したくなることがあると思います。

SVG 専用のプロパティ `fill` を使って塗る記事はたくさんでてくるのですが、

- CSS animation, transition に対応していない（ブラウザによる？）
- テキストの一部として SVG アイコンを使う場合に、不便

という問題がありました。

上は単純に、アニメーションする部品の中に SVG 画像を組み込むときに困ります。下はたとえば、 UI 部品をそれぞれコンポーネントとして実装していて:

```sass
.button {
  color: $ButtonFg;
  background-color: $ButtonBg;
  padding: $ButtonPadding;
}

.button:hover {
  color: $HoverButtonFg;
  background-color: $HoverButtonBg;
}
```

特定のボタンだけアイコン付きにしたい:

```html
<button class="button">
  ほげほげ
  <svg ... />
</button>
```

とかなった場合に困ります (SVG には `color` が反映されませんが、 SVG を突っ込まれるのを見越して `fill` プロパティを設定しておくというのもなんか癪です)。

そんなわけで、 SVG アイコンの色をテキスト色 (`color`) で塗る方法を調べました。

# 答え

答えです: https://jsfiddle.net/zsvfdfzj/13


CSS では、 `currentColor` で現在の　`color` の値を取ることができます (しらなかった！)。これを `fill` に設定してやれば、 SVG の親要素の `color` がそのまま SVG を塗るときの色になります。

たとえば、 SVG の `fill` にデフォルトで親の `color` を適用する CSS:

```css
svg {
  fill: currentColor;
}
```

をポイッと設置してやれば諸々うまくいきます。

参考までに、自分は、テキストの一部として（絵文字的に） SVG を使うためにこんな CSS をあてています：

```css
svg.text {
  height: 1em;
  vertical-align: text-bottom;
  fill: currentColor;
}
```

# おまけ: SVG から色を抜く

SVG がイラレとか Sketch とかデザインツールで作られている場合、 SVG 画像自体が色情報を持っていることが多いです。

```xml
/* 青い円 */

<svg class="text" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
  <circle cx="100" cy="100" r="100" fill="blue"/>
</svg>
```

そんな場合は、目視でそれっぽい要素を探して、 `fill` 属性を消します。

```diff
-/* 青い円 */
+/* 塗りつぶし色が未定義の円 */

 <svg class="text" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
-  <circle cx="100" cy="100" r="100" fill="blue"/>
+  <circle cx="100" cy="100" r="100" />
 </svg>
```

SVG 中の一部の要素だけを塗りたい場合は、 SVG 側にクラス名をつけておきます:

```diff
 <hogehoge fill="hogehoge">
-  <fugafuga fill="fugafuga" ... />
+  <fugafuga class="fill" ... />
 </hogehoge>
```

```css
.fill {
  fill: currentColor;
}
```
大きいファイルに対して tailf はやめたほうが良いかもしれない

初投稿です。

情強は`less +F`らしいですが、最近はどうなんでしょう。

## 本題

さて、タイトルの件です。

- `tailf`は`read`で読み進めます。なので1KBだろうが4GBだろうが**readで読んでは捨てを繰り返して終端にたどり着きます**。
- `tail -f`は`lseek`で読み飛ばします。seekなので一瞬です。

この挙動の違いは`strace`で覗くことができます。読む(read)も読み飛ばし(seek)もシステムコールを使うのでstraceで観察できます。
`strace tailf ファイル名`と`strace tail -f ファイル名`で違いを比べてみましょう。

ただ、詳しい検証はしてないのでディストリビューションごとの実装に差異があり異なる結果になるかもしれません。（CentOS 6.8 で調べました。）

## 経緯

ネットで「`tailf`は更新があるまで待ち、必要に応じてファイルアクセスを行う。つまりエコ！」という前評判を聞いたことがありました。（manにも近いことが書いてありますね）
試しに打ってみたら、ディスクをがりがり読み込みはじめ、応答がしばらく返ってこなかったので「思ってたのと違う」と思って調べたらこうでした、という感じです。

## なお

`less +F`もreadで読んでは捨てを繰り返しながら進めます。誤差だよ誤差。
freeCodeCampのフロントエンドアンケート調査に参加しよう2018

2018/03/01、freeCodeCampサイト上でフロントエンドツールのアンケート調査が開始されました。

以下は[Launching the Front-End Tooling Survey 2018](https://medium.freecodecamp.org/launching-the-front-end-tooling-survey-2018-927bf975fdf0)の日本語訳です。

# Launching the Front-End Tooling Survey 2018

Front-End Tooling Surveyは、Web開発業界全体について開発ツールの情報を収集し、そして現実を明らかにするためのものです。

## TL;DR:

[調査](http://ashn.uk/survey-2018)に参加してください。

## A bit of background

18ヶ月前、5254人の開発者がFront-End Tooling Survey 2016に参加し、その結果、使用しているツール群に[興味深い変化](https://ashleynolan.co.uk/blog/frontend-tooling-survey-2016-results)が見られました。
当時、Reactによって業界は大幅に塗り替えられ、一方でCSSプリプロセッサは依然Sassの独壇場でした。
しかし、Vue.js、Jest、PostCSSといったツールが12ヶ月の間にシェアを伸ばしてきつつありました。

さて、それ以来のトレンドはどのように変化している(もしくはしていない)でしょうか？
あなたは今何のツールを使用していますか？
それは2016年当時と変わりましたか？
少し目を離した隙に、便利なツールが新たに出現していませんか？

## Have our tooling habits changed?

2016年の調査を2015年の調査と比較したところ、いくつかの興味深い変化が観察されました。
『現在のプロジェクトではどのJavaScriptライブラリ・フレームワークを使っていますか？』の質問では、Angular1とAngular2の合計(33.57%)よりReactのほうがよく使われていました。
これは、AngularJSがReactの倍以上のシェアを持っていた2015年からの最も顕著な移行でした。

![a.jpeg](https://qiita-image-store.s3.amazonaws.com/0/26088/47a97ee5-6411-bf81-4f87-3eb2fb508b0c.jpeg)

ライブラリとフレームワークの両方でjQueryは依然として圧倒的人気で、70.25%の開発者がプロジェクトで頻繁に利用していました。
さらに32.11%の開発者は、『最も重要なJavaScriptライブラリ・フレームワークは何か？』の質問にjQueryと回答しました。

CSSツールについてはシェアは安定しており、変わらずSassが最も一般的なCSSプリプロセッサです。
しかし結果をよく見てみると、PostCSSや[CSSモジュール](https://postd.cc/css-modules/)のようなCSS-in-JSが新たに登場しています。
これらのツールはもっと伸びてきているでしょうか？

他に分野については、モジュールバンドラではWebPack、lintではESLint、テストではMochaがトップシェアを持っていました。

皆の使用しているツールが前回調査からの18ヶ月でどのように変化したかを知ることは、とても興味深いことです。

## What’s new?

フィードバックに基づき、CSSフレームワークとJavaScript Typeについての質問を追加しました。
また、今年の調査では、CSSグリッドやカスタムプロパティなど最新のCSSテクニックについての調査項目を追加しました。

それ以外では質問はいつものように簡潔なものですが、開発者に人気が高まっている新しいツールが幾つか追加されています。

## Take part!

過去の調査と同じように、回答には[数分しかかかりません](http://ashn.uk/survey-2018)。
回答者の皆様には感謝しています。
要するに、回答者が増えれば増えるほど、その結果はより現実を反映したものなります。

調査は約一ヶ月後に終了します。
その後、結果と分析の記事を作成します。
結果がいつ公開されるかを知りたい場合は、[私のTwitter](https://twitter.com/AshNolan_)をフォローしてください。
もしくは、アンケートの最後にメールアドレスを登録しておくと、記事の公開時にメールを送付します。

まだここを見ていますか？
今すぐ[調査に参加してください！](http://ashn.uk/survey-2018)

Ashley NolanFollow
Front-end Web Developer, Creative Thinker, Ale Drinker, sometimes all at the same time. Working at @JustEat_tech.

# 感想

[2015年](https://ashleynolan.co.uk/blog/frontend-tooling-survey-2015-results)には2028人、[2016年](https://ashleynolan.co.uk/blog/frontend-tooling-survey-2016-results)には5254人と順調に参加者が増加しています(2017年は無かったみたい)。
名の知れたfreeCodeCamp上でのアンケートということで、"試してみた"ではなく実際の現場に近い回答が得られるのではないでしょうか。

アンケートの結果記事については訳してるサイトが幾つかありますが、参加を煽るところは見当たらなかった(探してないとも言う)ので訳してみました。
日本の皆さんも回答してみてはいかがでしょう。
FLOYD使ってみた

## 前回の記事
[FLOYDの価格 2018.2.28版](https://qiita.com/yukky_ja/items/c2906b00ecaa53cf8bf4)

前回は５、6時間程度なので放っておけばいいか・・・程度だったのですが、次に試しに作ってみたモデルは概算で3日程度必要だったので、FLOYDをいよいよ稼働させて学習してみました。

## 参考
[とりあえずFloydhubで遊んでみた](https://qiita.com/pytry3g/items/682edf2dcafd6cce5ce6)

## Jupyter 起動
公式の説明や上記の参考リンクの通りにやっていると、FLOYDに繋げて、またプロジェクトも作成できます。
詰まったところは、tensorflowがそのまま使えなかったところ。環境を何も指定しないとpytorchでjobが起動してしまうので、tensorflow環境でjupyterを起動する必要があります。

```ターミナル
floyd run --env tensorflow-1.5 --mode jupyter
```


## 速度比較
>>ローカル環境(CPU)--6261s/epoch
![スクリーンショット 2018-03-01 20.15.45.png](https://qiita-image-store.s3.amazonaws.com/0/217831/a99cb76a-79e3-6577-8b53-caf734294e9b.png)

>>FLOYD環境(GPU)--67s/epoch
![スクリーンショット 2018-03-01 20.15.54.png](https://qiita-image-store.s3.amazonaws.com/0/217831/2741c033-9129-7dff-5db2-47f9d6d72f90.png)



その処理時間およそ100倍！3日かかりそうだったのが、1時間で終わりそうです。今学習しているモデルの肝心の精度はどうなるかわかりませんが、これで待ち時間短縮です！

## 使用後のUsage
![スクリーンショット 2018-03-01 21.10.41.png](https://qiita-image-store.s3.amazonaws.com/0/217831/54f0afda-494d-2218-2529-3ae9e4e9cd2f.png)
2時間のトライアル枠が減って残り47分になってます。ちなみに、jupyter立ち上げっぱなしだとその分時間換算されるので、使い終わったら止めるのを忘れずに。

## FLOYDサポート
昨日もそうだったんですが、FLOYDのサイトからチャットで質問できて、即レスポンスとは行きませんが、数分以内には答えてくれるので、サービス面やセッティング等で詰まったらすぐ解決できると思います。

## 今後
使い方もわかったことですし、時間がかかる処理はFLOYDを使おうと思います。これからももっとディープラーニングやることが多くなってとか、仕事で使うようになるようなら、自分で用意する方がコストが下がるかもしれません。かといって、MACでGPUマシンを新調するのは、ちょっとお高いですしうーん。それならスロットの余ってるwindows PCに1-2万のGPU増設して、anacondaとかディープラーニグ環境を作ってあげた方がいいのかな。

とにかくGPUのパワーは偉大！！
RubyonRailsで有名なdeviseを扱う上で気をつけたいroutes.rbの書き方


## RubyonRailsでdeviseを扱う上で気をつけたいこと

### たまに、ルーティングが衝突してしまい、deviseのログイン画面が動かなくなる


まず、エラーが起きない書き方は以下です。

<img width="724" alt="スクリーンショット 2018-03-01 20.07.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/124611/cceebfed-550c-62cb-f8c7-f098e920bf99.png">

次に、エラーが起きる書き方
<img width="647" alt="スクリーンショット 2018-03-01 20.09.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/124611/849e6b12-daaa-a1e6-bcab-238e9f30a627.png">


簡単に言えば、usersの記述よりもあとでdevise_for :usersを記述してしまうとエラーが起きる。

## どんなエラーが起きるか

### **ログインできなくなる**

<img width="309" alt="スクリーンショット 2018-03-01 20.13.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/124611/be0d4624-3d06-2e35-2268-9dd182ff1c81.png">

/users/sign_inでログインできなくなります
<img width="1124" alt="スクリーンショット 2018-03-01 20.14.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/124611/e49b9fbf-3162-8731-462e-4beb96e80c56.png">

とか<img width="1099" alt="スクリーンショット 2018-03-01 20.17.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/124611/d4e574ea-1bf6-5f0b-d232-bb5b2cb129ca.png">



が出る。
他にも色々なエラーが考えられるが、とにかくログイン機能が動かなくなります

## どうしてこのようなエラーが起きるか


routes.rbの順番って本当に大事です・・・
rake routesをしてルーティング設定を確認して見ましょう

まずdevise_for: usersの順番が正しいとき
<img width="858" alt="スクリーンショット 2018-03-01 20.20.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/124611/90ec3b9d-7b34-b2bc-8227-cea411ffea13.png">


devise_for: usersの順番が間違っている時
<img width="818" alt="スクリーンショット 2018-03-01 20.21.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/124611/70fd74f0-ee5b-9391-92d4-50002fcf1e6b.png">


どこに変化があるかというと、**usersコントローラーのルーティングと、deviseのルーティングの順番**


今回起きているエラーは、users/:idというルーティングが、users/sign_inを包括してしまっているために起きるエラーです。
users/:idは、:idが変数として認識されるため、文字列だろうが数字だろうが、リクエストするURLがusers/〇〇になっていれば、users/:idのルーティングが動いてしまう。

つまり、users/sign_inをリクエストしても、users/:id(id = sign_in)として認識されてしまい、deviseのコントローラーが動かなくなってしまうのである。

## 実際にusers/:idが動いていて、id => sign_inとなっている
<img width="1099" alt="スクリーンショット 2018-03-01 20.17.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/124611/90a98d76-b897-d608-f4d6-1783189d8bae.png">



エラー画面の、Requestを見てみると、{"id" => "sign_in"}となっている。
**sign_inが、:idとして認識されてしまっていますね**


## devise_for :usersは先に書こう

今回のように、users/:idがusers/sign_inを包括してしまわないように、**devise_for :usersを先に書くことでusers/sign_in の後に　users/:idがルーティングとして動かす。**

usersコントローラーがなければ順番に気を使う必要はないが、ある場合には気をつけないとエラーが起きます。



*Requestのparametersを見ることも大事ですね。*
Raspberry Pi の 初期設定（Keyboard、Wi-Fi、SSH）

#環境
OS : Raspbian ~~Stretch Lite~~ Buster Lite
Version : ~~November 2017~~ ~~November 2018~~ July 2019

ダウンロード
https://www.raspberrypi.org/downloads/raspbian/

Etcher を使用してイメージをSDカードへ書き込みます

#ログイン（初期パスワード）
User : pi
Password : raspberry

#キーボードレイアウトの変更

```shell
sudo raspi-config
```
[4 Localisation Options] -> [I3 Change Keyboard Layout]

Keyboard Model : Generic 105-Key (Intl) PC
Keyboard layout : Other -> Japanese
Key to function as AltGr : The default for keyboard layout
Compose key : No compose key

@が入力できればOK

#Wi-Fiを設定する

```shell
sudo raspi-config
```
[2 Network Options] -> [N2 Wi-Fi] 
国は[JP Japan]を選択
SSIDとKeyを入力する

```shell
hostname -I
```
IPアドレスが表示されればOK

IP V6 アドレスしか表示されなかった場合は```ifconfig```で確認する 

#SSHを有効にする

```shell
sudo raspi-config
```

[5 Interfacing Options] -> [P2 SSH]
[Enable]へ変更し、リモートで接続できればOK

#パッケージの最新化
```shell
sudo apt-get update
sudo apt-get upgrade
```

#gitのインストール
```shell
sudo apt-get install git
```

#pipのインストール
```shell
#Python2系
sudo apt-get -y install python-dev
sudo apt-get -y install python-pip

#Python3系
sudo apt-get -y install python3-dev
sudo apt-get -y install python3-pip
```

失敗したら「apt-get update」を実行し、リトライしてみる。
それでも上手く行かなかったら「-m 」または「--fix-missing」を付けてリトライしてみる。

#Wi-Fiの設定（パターン２）
nanoで設定ファイルを開く

```shell
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
```

WiFiのSSIDとKeyを追加する

```shell
network = {
    ssid = "SSID"
    psk = "Key"
}
```

nanoのコマンド
^はCtrlキーの意味
[Ctrl]+O : 保存
[Ctrl]+X : 終了
Raspberry Pi でNode-REDを開始する

バージョン管理ツール「n」を使用した手順を追加しました。
[Raspberry Pi でNode-REDを開始する -「n」でバージョン管理編](https://qiita.com/diskn/items/53acd73a2b9f3085ee34)

#参照サイト

Node-RED日本ユーザー会
https://nodered.jp/docs/hardware/raspberrypi

Raspbian Stretch Lite の場合はインストールから開始

```shell
bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
```

#モジュールの最新化

```shell
update-nodejs-and-nodered
```

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/240467/49d82b6f-7117-c544-bc58-775114e69db7.png)


#Node-Redの開始

```shell
node-red-start
```

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/240467/4e0e8fe9-fa65-8f17-d149-0f824a25cb67.png)

ウィンドウを閉じてもNode-REDは終了しません。バックグラウンドで稼働し続けます。
Node-REDを終了するには、 node-red-stop のコマンドを実行します。

#Node-RED エディターを開く

http://localhost:1880/

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/240467/25be40b0-1096-ee39-ef8a-2f6c2d0b3dfb.png)
Laravel 5.5 FormRequestの中でModel BindingされたEloquentインスタンスを取得する方法

# Model Bindingとは

以下コードの ```{user}``` 部分のこと。

```php:routes/web.php
Route::get('api/users/{user}', 'UserController@index');
```

```/api/users/1``` といったURIにアクセスし、コントローラのアクションでタイプヒンティングしつつ同じ変数名を指定しておくと、IDが1番のUserインスタンスを取得してくれる。

```php:UserController
class UserController extends Controller 
{
    // api/users/1 にアクセスするとIDが1番のUserインスタンスが取れる
    public function index (User $user) 
    {
         dd($user);
    }
}
```

# FormRequestから呼び出す方法

Routeインスタンスのparameterメソッドから取ります。
parameterに指定するキーはrouterで定義した名前と同じになります。

```php:UserRequest
class UserRequest extends Request
{
    public function rules() 
    {
        $user = $this->route()->parameter('user');
        dd($user);
    }
}
```

## これが使えるとなにが嬉しいのか
既存データの状態を見てバリデーションルールを変える、といった挙動が綺麗に記述できるようになります。
edit時のunique条件もこちらから取ると分かりやすくてよいです。
TARを作ったり展開したりするシンプルなツールを作った

# TL;DR
[Simple TAR creator/extractor](https://github.com/Warashi/star) というツールを作りました。 

# きっかけ
1. [TuringComplete FM](https://turingcomplete.fm/) を聞いていたら、「tarとか作り直せばいいのに」みたいな発言があった。
2. Go のパッケージを見てると、 [archive/tar](https://golang.org/pkg/archive/tar/)ってのがある。
3. 作るしかない！

# 使い方
## アーカイブを作る
```
star -c [ディレクトリ] > output.tar
```

## アーカイブを展開
```
star -x [出力先] < input.tar
```
出力先を指定しない場合にはカレントディレクトリを使います。

# できること
- 1つのディレクトリを指定して、tar形式にアーカイブしたものを標準出力に吐き出す
- 標準入力から与えたtar形式のバイナリを展開して指定した場所に展開する

# できないこと
- gzipやbzip2のcompress, decompress
    - 標準入出力をパイプして別のコマンドでやってね
- アーカイブ内のファイルリストを出力

# 実装
[このページ](https://medium.com/@skdomino/taring-untaring-files-in-go-6b07cf56bc07)から大体コードをもらってきました。
【シェルスクリプト】　for文を使って名前に数字が入っている変数を順番に読み込む

番号順に並んだ変数をどうやって読み込むかで少し悩んだので残しておきます。

＊追記
配列を使うやり方も思いついたので、["【sh】for文を使って配列にした変数を読む
"](https://qiita.com/KantNak/items/be99b28199790329b3a2)にまとめました。


# 状況

次のような変数に値が入っています。

```sh
var1=1
var2=6
var3=13
var4=18
var5=24
var6=26
```

これらを順番に取り出したかったわけです。

# 方法

シェルスクリプトに精通していないので、文字列を変数と思わせる方法（日本語が思いつかない）で悩みました。

```sh
for i in `seq 6`
do
    ## 変数の名前を作成
    num="var${i}"
    ## 上で作った名前と同じ変数の値をvarに代入
    eval var='$'${num}
    echo $var
done
```

**結果**

```
1
8
13
18
24
26
```

ちなみに、`eval`は文字列を評価してから連結するコマンドだそうで、、、
`eval '$'$変数名`で「変数の内容」を変数として変数名として参照できるそうです。ありがたい。
　　

**2桁表示**
ついでに、値を2桁整数で表示したいときは

```sh
var=`printf %02d ${var}`
```

を追加すれば、

```
01
08
13
18
24
26
```

となります。

# あとがき

今回のやり方を調べるにあたって、下記のサイトを参考にさせていただきました。
[bashで文字列を変数名に展開する方法](https://qiita.com/laikuaut/items/96dd37a8a59a87ece2ea)
また、初投稿なので、下記サイトで投稿の仕方を参考にしました。非常に助かりました。
[Markdown記法 チートシート](https://qiita.com/Qiita/items/c686397e4a0f4f11683d)
simplecovでファイルごと集計外とする

# 経緯
古いAPIのファイルにはテストがなく追加する際にテストの網羅率をsimplecovで取りながら進捗を見るときがある。
廃止予定でテストの追加必要ないが、まだ古いバージョンのクライアントで多少使っていてすぐには消せないということがある場合、simplecovの集計対象外としたいときがある。

# simplecovの除外する機能
simplecovにも以下のようにスキップのオプションは存在するがファイルごと除外したい場合などにコメントが大量に追加されてしまうのはつらいので簡単に除外させたい。

```ruby
# :nocov:
def skip_this_method
  never_reached
end
# :nocov:
```
https://github.com/colszowka/simplecov#ignoringskipping-code

# 解決策
Filterで独自のタグを読み込んでファイルごと除外すると簡単に除外対象にできていいかもしれない。

```ruby:user_application_controller.rb
# :nocov_all:

class UserApplicaitonCotroller < ApplicationController
  def index
    ...
  end
end
```

```ruby:spec/rails_helper.rb

require 'simplecov'
SimpleCov.start 'rails' do
  add_filter do |source_file|
    # ファイルの読み方や10行以内というのは要件次第
    File.open(source_file.filename).readlines.take(10).any?{|line| line.include?(':nocov_all:')}
  end
end
```
Azure CLI のアップデート　[ mac ]

最近Azure CLIのアップデートが頻繁です。（2週間に1回くらい）
ドキュメントどおりにやってコマンドエラーが起きることがあったのでメモしておきます。

### 今回の環境
```
ProductName:	Mac OS X
ProductVersion:	10.13.3
BuildVersion:	17D102
```

## 自動アップデート

Azure CLIのリリースノートをRSSできなさそうなので、cronで定期実行しみてる。

```
$ brew update && brew upgrade azure-cli
```

## 更新履歴（2018/03/01時点）
最新バージョン：2.0.28 
[February 27, 2018](https://docs.microsoft.com/ja-jp/cli/azure/release-notes-azure-cli?view=azure-cli-latest#february-27-2018)
[February 13, 2018](https://docs.microsoft.com/ja-jp/cli/azure/release-notes-azure-cli?view=azure-cli-latest#february-13-2018)
January 31, 2018
January 17, 2018
December 19, 2017
December 5, 2017
November 14, 2017
October 24, 2017
October 9, 2017
September 22, 2017
September 11, 2017
August 31, 2017
August 28, 2017
August 15, 2017
August 11, 2017
July 28, 2017
May 10, 2017
April 3, 2017
February 27, 2017

## Azure CLI
Azure CLI　のインストール

```
$ brew upgrade azure-cli
```

アップデート

```
$ brew upgrade azure-cli
```

アンインストール

```
$ brew uninstall azure-cli
```
真に Universal な ReactComponent を書く

ややお気持ち多め。

## 前置き

最近の個人的な考えとして、React 書く人は ReactNative 側にスキルを寄せたほうが良いのではないか、と思っている。

ReactNative の需要の高まりは凄い。最初はプロトタイピング採用だったのが、徐々にプロダクションに出始めている。今年末には新規プロジェクトの10~20%は ReactNative になるんじゃないか？という感すらある。

僕はデスクトップのブラウザは好きだけども、残念ながら、世の中の趨勢はモバイル側にある。その上でフロントエンドにロックインすることをリスクに感じている。PWAのアプリケーションも来そうではあるが、直近の需要を賄うためにやはりReactNativeに習熟しておきたい。

大事なのは、「考え方として」 ReactNative に軸足を移したほうが色々といいということだ。 Web は基本的に動きが少ない。見栄えをよくしたり、アニメーションを挟み込もうとする動機があまりない。その上で、モバイルの主戦場はこれらのインタラクションだ。そちら側で戦ったほうがエンジニアとして成長があるのではないか。

(あと、ReactだとかAngularだとか、Webで不必要な複雑性を持ち込みやがって、みたいな意見を、アプリを作ってるんですよ、という体で言い訳しやすい)

普通のWebを作る際も、ReactNative側にスキルを寄せた上で、 react-native-web 上で生活する、という選択肢をとりたい。そして、その際に必要なのは Universal な Component 定義であると思う。

## styled-components/primitives による Universal な Component 定義

https://github.com/lelandrichardson/react-primitives というライブラリがある。これは Web と RN を抽象化したUI層だ。

styled-components/primitives は styled-components で react-primitives を通して使う。これらを react-native または react-native-web を通して使う。 (react-native-web を使った作例として、twitter.com のモバイル版がある https://mobile.twitter.com/home)

という感じでビルドできるプロジェクトを作った https://github.com/mizchi/rn-universal-components-boilerplate/tree/universal

こんな感じのコードが動く。

```js
/* @flow */
import React from 'react'
import styled from 'styled-components/primitives'
import { Grid, Col } from 'react-native-easy-grid'

const Text = styled.Text`
  font-size: 32;
  color: palevioletred;
`

export default () => (
  <Grid>
    <Col>
      <Text>A</Text>
    </Col>
    <Col>
      <Text>B</Text>
    </Col>
    <Col>
      <Text>C</Text>
    </Col>
  </Grid>
)
```

![](https://i.gyazo.com/77de8f8f62e62590347b2a498bff0146.png)

(同じものが動いてるという検証であって、デザイン的にはしょぼいが…)

勿論実機でも動く。

react-native-easy-grid は react-native 用の グリッドライブラリだが、react-native-web でも動いている。

つまりは ReactNative の flex と styled-components の機能に限定したサブセットで書くことで、どの環境でも動くReactComponentが書ける。

## 実用的か

僕はそもそも今のCSSが嫌いなので、UIに密に結合した CSS は歓迎している。現代では、CSSとHTMLが暗黙のルールで密結合していることを、「装飾とセマンティクスが分離されている」と言っているとしか思えない。
静的なものだったらそれでいいと思うが、動的なコンテンツで潜在的に発現しうるセレクタを考慮しながら装飾をするのは非常に困難で、バグの温床でしかない、と思っている。

その上で、コンポーネント思考の設計を前提に、装飾の定義はコンポーネント内に閉じるはずだとして、styled-components が気に入っている。

RNを通すことで、実質的に flex 縛りなのもいい。下手に float レイアウトなんか目にするよりは健全である。ただし yoga レイアウトエンジンの表現に縛られるので grid layout は使えず、その点は退化している。

問題は、やはり既存の考え方から乖離が大きいことか。しかしReactNativeなんて新しい環境なんだから、とりあえず flex 縛りで、というのはそこまで大きなジャンプでもないような気もする。

やはり「可能ではあるが、縛りプレイ」みたいな結論が妥当であると思う。
AD2 > VMware workstation上のWindows 8.1 Proでの動作確認 > 動作した

```txt:動作環境
Windows 8.1 Pro (64bit) 
  - on VMware workstation 14 Pro, version:14.0.0 build-6661328
Analog Discovery 2 (以下AD2)
WaveForms 2015 v3.7.5
```

I2Cの通信の実装をしているなか、データパケットの中身を確認する段階になってきた。
オシロスコープでのデータパケット確認は大変なのでAD2を使う。

### on VMware workstation

以下の疑問を持っていた。

- VMware上で使用可能か?
- どのくらいの周波数までなら測定可能か?

VMware上のWindows 8.1 Proにてセットアップしてみた。

[AD2 (Analog Discovery 2) > Link > Getting Started](https://qiita.com/7of9/items/ed39d9dbefc1c14a5718)
のリンク先からWaveForms2015の最新版をインストールした。

### 動作

問題なく動作した。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/3caa91e3-6f70-1224-4cca-b7344621218c.png)

以下は1MHzのAD2のWavegen機能で波形を作り、それをAD2のScope機能で取込んだ状態。
![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/b97ff08b-7c5e-39b6-98d7-291633b82d92.png)

- 備考
    - Future Devices USB Deviceとして「取外し可能デバイス」リストに登場する
    - AD2接続によるドライバインストール後Windowsを再起動で認識するようになった
    - USB2.0のポートに接続して使用している
        - USB3.0の場合、トラブルが多い経験をしているため
今更ですがデブサミ2018の感想

#はじめに
これは2018年2月15日から16日まで行われた、Developers Summit 2018について、主観的な感想を書いた記事です。

初参加、というか、日本に来て、開発者になってから初めて聞く開発者向けのSummitでした。情報をくれた同僚さんに感謝を…

聞いたセッションは下記の通りです。

- なぜ400以上の開発チームが同じサイクルでリリースできるのか？～Salesforceで行われているプロダクトマネジメント
- ストリームとバッチを融合したBigData Analytics ～事例とデモから見えてくる、これからのデータ活用のかたち～
- 婚活サービスにおけるシステム×サービスのイノベーション
- Shadowverseのリリースサイクルを支える運用基盤 ～高頻度リリースを実現する為の自動化・効率化事例～
- イノベーションを起こす開発チームの作り

##なぜ400以上の開発チームが同じサイクルでリリースできるのか？～Salesforceで行われているプロダクトマネジメント

Salesforceを紹介しながら、開発プロセスについて語るセッションでした。
CRMのクラウドサービスを提供する会社だそうです。
https://www.salesforce.com/jp/

5人から10人に構成された400チームがあり、年3回リリース、2週間スプリントでアジャイルすることに、1000件以上のプロダクトをイノベーション（リリース）できるそうです。

- 約束した内容と違う、と言われることがないように、全社員がタスクを見れるようにして事前に知らせることになるし、計画は5年、1年、リリース、デイリー単位で分けて計画をする。
- 想像したものと違う、と言われないようにデザインプロトタイプ承認をする。デザインのレビューが通ったらポスターとして印刷して、会社に張り、ペンを置いてフィードバックできるようにする。
- なんでもっと早く見せてくれなかった？と言われないようにdaily Scrum、グループで２週に一度レビュー、全プロダクト対象に月に一度役員レビューを行う。
- 以外はリリーススプリント直前にブランチをLockしたり、開発者を無理させないシステムが大事、と聞きました。

##ストリームとバッチを融合したBigData Analytics ～事例とデモから見えてくる、これからのデータ活用のかたち～

Big DataやData Scientistは学校で課題で調査したくらいだったので事例とデモの説明は非常にありがたいものでした。が、中盤から自分の理解力が足りず、家に戻った後、もう一度見ても難しい…
ざっくり言うと、上流System -> kafka -> データレイクの流れで必用なデータを疎結合に収集、適材適所のデータのマネジメント、それらを実験、検証、分析で使う。そしてこれの詳しい情報の説明でした。
プレゼン資料がアップロードされているので、興味がある方はこっちをどうぞ。

https://www.slideshare.net/oracle4engineer/developers-summit-2018-bigdata-analytics

##婚活サービスにおけるシステム×サービスのイノベーション

システム内製化に関する話。内製化しようとも、うまくいかなかった理由や経験、それに対する解決方法を聞かれました。

- メイン言語がPHP　->　Rubyを使いましょう。
- 要件定義が重要　->　企画段階から参加しましょう。
- 事業部単位で席を配置　->　チーム単位で配置しましょう。
- 横断的マネジメント
- 技術力重視　->　責任感、人格重視

そしてエンジニアが企業理念に対して行動を取ることも重要で、婚活サービスをしていた会社の理念と合わせて、リリースは大安にすることになった、と聞きました。なるほど…
会社がしたことは、エンジニアをできる限り放置すること。エンジニアがしたことはサービス、企業理念に合わせたエンジニア文化でした。
会社のエンジニア、互いの尊重の重要さをしる機会でした。

##Shadowverseのリリースサイクルを支える運用基盤 ～高頻度リリースを実現する為の自動化・効率化事例～

以前から「自動化」って結局どうするんだ？って言う疑問があったから参加しました。
はじめに、Shadowverseとはスマホで遊べるカードバトルゲームで、ゲームにとってデバッグとはバグを「発見」する、と言う正義をまず紹介してプレゼンをはじめました。
このゲームで必要な探索の数はなんと、弱４京。これもパッチでまた増えるようです。これだと一日833億名の人数が必要なため自動化を作ったそうです。そりゃ作るわ。
これの自動化は自動バトル用のbotサーバーを作って運用するそうです。
機能は下記の通り。

- 自動プレイ
    - ある基準に従い、デッキをランダムで作る。
- アプリ管理
    - 定時にビルド検査、アップロードページを監視、ファイル名で制御。
- デバッグ管理
    - スケジュール管理、複数のデバッグ、並行開発、個別デバッグ、予約実行。
- 報告
    - エラー発生の時、なんのエラー、再現手順らを報告。社内SNSで共有。

なるほど。こうなるんですね。
今抱えてる問題はパッチでカードが増える速度に自動化ツールの速度が追いつかないため、性能改良が必要、ということでした。

##イノベーションを起こす開発チームの作り

イノベーションを起こしたいろんな会社を例にして、ビジネス側とエンジニア側のコミュニケーションの重要さの話でした。
アマゾンの場合は技術のイノベーションじゃなく、発想の転換。
余るリソースをneedsに与えたAirbnb、Uber、メルカリ
IoTがもたらすのは各種センサーが送ってくるデータ、それの分析と処理。
この後はビジネス構造をエンジニアが理解するんじゃなく、エンジニアがビジネスをつくり、それがイノベーションに繋がる、と言うこと。
エンジニアとし「発想の転換」は重要ですが、またそれに認識する機会でした。
DBMS 内部アーキテクチャ





DBについて復習しようと思いました。なので、
「SQL 実践入門 (技術評論社)」という本を参考にメモがてら書きます。

今回は1章の内容です。

RDB(Relational Database)製品には、Oracle、Microsoft SQL Server、DB2、PostreSQL、MySQLなどが存在する。
MySQLがよく日本では業務をする上で目にしたり、聞いたりするだろう。
内部のアーキテクチャはどれも同じというわけではない。しかし、RDBという枠組みでは基本は一緒、主な概要を抑えておけばよいだろう。


## クエリ評価エンジン

ユーザから受け取ったSQLを解釈し、いかなる手順で記憶装置のデータへアクセスするべきか決定する。(実行プラン)
この計画に基づいたデータへのアクセス方法がアクセスメソッド。

## バッファマネージャ

メモリ領域の使い方を管理する。
ディスク容量マネージャと連携しながら動く。

## ディスク容量マネージャ

どこに、どのようなデータを保存するかを管理する。
それに対する、読み込みと書き込みを制御する。

## トランザクションマネージャとロックマネージャ

DBMS内部では、`トランザクション`という単位で個々の処理が管理される。
このトランザクション同士をデータの整合性を保ちながら実行させたり、データにロックをかけて待機させたりという機能です。

## リカバリマネージャ

いざという時にデータの復旧(リカバリ)すること。

## 記憶装置

* HDD

データを保存するストレージ。
ほとんどの場合は、容量、コスト、パフォーマンスなどという点からHDDあ選択されているでしょう。

* メモリ

DBMSは常にディスク以外にもデータを持つようにしている。それがメモリです。
記憶コストが高く、1台のハードに搭載できる量は多くはない。
頻繁にアクセスされるデータをうまくメモリ上に保持しておくことができると、
SQL文を実行した際、パフォーマンスの向上が見込める。
パフォーマンス向上とする目的でメモリのことを`バッファ`や`キャッシュ`と呼ぶ。


## メモリ上の2つのバッファ

* データキャッシュ

ディスクにあるデータの一部を保持するためのメモリ領域。

* ログバッファ

更新処理(INSERT,DELETE,UPDATE,MERGE)の実行に関係する。
更新処理は、すぐにストレージ上のデータに変更をかけているわではなく、
更新情報をログバッファに一時溜めている。

## トレードオフ

データキャッシュに比べてログバッファの設定値が非常に小さい。
これはDBが基本的に検索をメインとして想定しているからだ。
最近のDBMSは自動でメモリの割当をしているが、よりタスクが大規模化したり、細密化していけば
どのような思想に基いてリソース配分が行われているか、行わなければならないのかは知っておく必要がありそうです。

## ワーキングメモリ

ソートやハッシュなどの特定処理に利用される作業用の領域。
(ワークバッファやソートバッファなどと呼ばれる)

## データへのアクセス方法はどのように決まるのか

さきほども出てきた`クエリ評価エンジン`でアクセスを決める。
流れとしては以下。(上から下へ)

```
SQL
|
parser
|
optimizer--> catalog manager
|
plan evaluation
```

* パーサー

構文解析。
受け取ったSQLを要素毎に分解しDBMSが処理しやすいように変換する。

* オプティマイザ
パーサーからきたクエリをもとにデータアクセス方法を決定する。
インデックス有無やデータの分散や偏りの度合い、内部のパラメータなどの条件を考慮し計画を作成、
コストを計算して、最も低コストは1つに絞り込む。

1. 各テーブルのレコード数
2.各テーブルの列数と列のサイズ
3. 列値のカーディナリティ(値の個数)
4. 列値のヒストグラム
5. 列内にあるnullの数
6. インデックス情報 

上記の情報をもとに実行計画を作成するわけだが、このカタログ情報が実際のテーブルやインデックスと一致しない場合。その場合は統計情報を更新する必要とある。(例:ANALYZE)
運用しているとANALYZEをするタイミングも重要ですが...w


* カタログマネージャ

DBMS内の内部情報えお集めたテーブル群で、テーブルやインデックスの統計情報が格納される。(統計情報)

* プラン評価

オプティマイザから受け取った実行計画で、最適な実行計画を選択する。


## おわり

と、いった具合でDMNSのアーキテクチャをざくっとかいてみましたの巻。
selenium-webdriver(node版)でリダイレクトされることを確認する方法

タイトル通りのことをしたい場合

```javascript
// source_url : source URL of redirect
// target_url : target URL of redirect

driver.get(source_url).then(function () {
  driver.getCurrentUrl(function (current_url) {
    if (current_url !== target_url) {
      throw "redirection doesn't work correctly";
    }
  })
})
```

最終的なURLリダイレクト先のURLであればOKとする。
他にいい方法ないのかな。。。

以上です。
【小ネタ】ネストしすぎるな！せめてインデントをつけろ！

# **まずはこちらをご覧ください**
![389652_jp.jpg](https://qiita-image-store.s3.amazonaws.com/0/159440/89593ebb-8d4c-0a47-4e8b-eca8b847546b.jpeg)

この説明文を一回読んで理解できる人は何人いるでしょうか。
５回くらい読み直しても何が何だかわからないですね。

# **文章だけ抜いてみた**
`浅瀬蟲が死亡したとき、青の3/3の魚(Fish)クリーチャー・トークンを１体生成する。それは「このクリーチャーが死亡したとき、青の6/6の鯨(Whale)クリーチャー・トークンを１体生成する。それは『このクリーチャーが死亡したとき、青の9/9のクラーケン(Kraken)・クリーチャー・トークンを１体生成する。』を持つ。」を持つ。`

だそうです。
何かが死んだら何かが出て、また何かが死んだら何か出るの繰り返しみたいです。

# **インデント調整**
```
浅瀬蟲が死亡したとき、
  　青の3/3の魚(Fish)クリーチャー・トークンを１体生成する。
  　それは「このクリーチャーが死亡したとき、
    　　青の6/6の鯨(Whale)クリーチャー・トークンを１体生成する。
    　　それは『このクリーチャーが死亡したとき、
      　　　青の9/9のクラーケン(Kraken)・クリーチャー・トークンを１体生成する。』
    　　を持つ。」
  　を持つ。
```
括弧で改行とするか、条件文となりそうなところで改行とするかは好みだと思います。
今回は後者でやって見ました。

これだけでもだいぶ見やすくなったと思いませんか？

# **英語はどうなってるの**
原文こちら

`When Reef Worm dies, create a 3/3 blue Fish creature token with "When this creature dies, create a 6/6 blue Whale creature token with ‘When this creature dies, create a 9/9 blue Kraken creature token.`

```
When Reef Worm dies, 
　　create a 3/3 blue Fish creature token with 
　　"When this creature dies,
　　　　create a 6/6 blue Whale creature token with 
　　　　‘When this creature dies, 
　　　　　　create a 9/9 blue Kraken creature token.
```
ネストしまくってるのは日本語と変わらないですが、
最後に`〜を持つ`というのが`with`で文中に入っているだけましかなと。


# **考察**
ネストはほどほどにしましょう。
ネストする場合は、しっかり改行・インデントを入れてあげることで可読性はよくなると思いました。

このカード2014に初出ですが、また再録ということで少し話題になってました。
いきなり対戦相手にこれ出されたら間違いなく理解追いつかないです。
死亡するごとにもっと大きいのが出てくるということで、食物連鎖を意識しているそうです（余談）

プログラミングでもなんでも、人が読むものは読み易く書きましょうというところで〆
Twitter APIのOAuthToken取得方法

TwitterAPIにアクセスするためのトークン取得に少し手間取ったのでメモ
すでにTwitterの開発者アプリを作成していることを前提としています。

## ConsumerKeyとConsumerSecretの取得
https://apps.twitter.com/app/あなたのアプリID/keys
からConsumerKeyとConsumerSecretは取得できます。

## ConsumerKeyとConsumerSecretのエンコーディング
トークンを取得するためには
[oauth2/token](https://developer.twitter.com/en/docs/basics/authentication/api-reference/token)
に`POST`でリクエストをする必要があります。
しかしその際の**ConsumerKey**と**ConsumerSecret**の取扱に要注意！

ConsumerKeyとConsumerSecretを`:`で繋いで更に`Base64`でエンコードする必要があります。
[このサイトでエンコードしました](http://www.convertstring.com/ja/EncodeDecode/Base64Encode)

例.

| ConsumerKey|ConsumerSecret |:でつなぐ|Base64エンコード|
|:--:|:--:|:--:|:--:|
|AAA|BBB|AAA:BBB|QUFBOkJCQg==|

[oauth2/token](https://developer.twitter.com/en/docs/basics/authentication/api-reference/token)に対してのリクエストのヘッダーで`Authorization`の値として必要になるのがこの例で言う、`QUFBOkJCQg==`です。

## 実際にCurlでリクエスト
今回はさくっとCurlで取得しました。
`Authorization`の値には`Basic QUFBOkJCQg==`のように値を設定します。

```
curl --request 'POST' 'https://api.twitter.com/oauth2/token' --header 'Authorization: Basic 上記の手順で作成した値' --header 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --data "grant_type=client_credentials" --verbose
```

下記のようなレスポンスが帰ってきたら成功！
```
{"token_type":"bearer","access_token":"AAAAAAAAAAA"}
```


## 最後に
https://apps.twitter.com/app/あなたのアプリID/keys
にあなたのアクセストークンとか書いてるから最初はそれでリクエストしてみたけど、
ダメで心が一度折れました。
あとBase64エンコードせずにリクエストして心が折れました。
SNSのAPIはどこも堅牢な作りになってきているイメージですね・・・・

次回はInstagramグラフAPI触ってみたい
underscoreのeachでbreakできないならeveryを使おう

underscore.jsのeachを使っているとき、下記のようにしてもループは途中で終わりません。

```javascript
_.each([1,2,3,4,5,6], function (elem) {
  console.log(elem)
  return false
})
```

http://underscorejs.org/#each

```:出力
1
2
3
4
5
6
```

## `_.every`を使う

```javascript
_.every([1,2,3,4,5,6], function (elem) {
  console.log(elem)
  return false
})
```

```:出力
1
```


http://underscorejs.org/#every

> Returns true if all of the values in the list pass the predicate truth test. Short-circuits and stops traversing the list if a false element is found.

デバッグなどでループを全部回したくない場合は`_.every`を使うと便利かもしれません。

以上です。
NODE_ENV でよく使われる値

## 発端
`production` と `development` はよく使うけれど、 CI でテストするときやステージング環境ではどうするのだろう？と思って調べた。

## 結論
以下の2つは、ほぼデファクトスタンダードっぽい。

- `production`
- `development`

以下のものは、例として登場することが多そう。

- `staging`
- ~~`testing`~~ `test`
- `local`

「`testing` にすべき」みたいな記事をどこかで見た気がするのだけれど、現代（2019年3月）では [Jest がデフォルトで `test` を使っている](https://facebook.github.io/jest/docs/en/getting-started.html#using-babel)ため、 `test` を使うべきです。

## 見たもの

- http://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/
- https://docs.npmjs.com/misc/config#only
- https://docs.npmjs.com/misc/config#production
- http://expressjs.com/ja/4x/api.html#app.set

## やりたかったこと

GitHub で検索して、統計的なものを取りたかった。

- `.json` とか `.yaml` とか `.yml` の場合は、 `NODE_ENV` が含まれる行をとってくる
- `.ts` とか `.js` とかは、 `NODE_ENV` から5行分取ってきて、上記で取れた値のそれぞれがどのくらい使われているかを見る

モチベと時間があるときにやりたい