OmniAICreator/Qiita-1.07M huggingface dataset:
gulp-cliはインストールすべきじゃないと、思うよ

プロジェクトでGulpを使用したい場合、グローバルには`gulp-cli`、プロジェクトローカルには`gulp`を入れなければならず、以下の２つのコマンドを打つことになります。

```bash
$ npm install gulp-cli -g
$ npm install gulp --save-dev
```

ここにおじさんは疑問をいだいてしまいました。

## __グローバルにインストールしてしまっていいのか？__ :confounded:

そうです。__問題は`npm install gulp-cli -g`です。__先のやり方はGulp公式が推奨している方法であり、「gulp入門」と検索すれば同じ方法を紹介している記事が多くヒットするので一般的な方法であるのは間違いないです。しかし、__この方法はタブーを犯しています。__

### __何がタブーなのか？__ :hushed: 

__`-g`を使ってインストールするnpmモジュールは個々のプロジェクトが依存することの無い疎な状態であるべき__だと私は考えます。もっと具体的に言うと、ローカルモジュールの実行の為にグローバルモジュールを実行するのは問題であると言えます。これはnpmモジュール全てに言えると思います。


### __どういった問題が起こるか？__ :fearful: 

`gulp-cli`をグローバルにインストールしてしまうと、__同じプロジェクトでも開発者によって`gulp-cli`のバージョンが違う場合が考えられます。__`gulp-cli`は複数のバージョンに対応できる作りになっているものの、本当に大きな仕様変更が無いとは言い切れません。そうなれば今まで正常に動作していたプロジェクトも動かなくなりかねません。


## __じゃあどうしたらいいのよ？__ :cold_sweat: 

__`gulp-cli`のインストールをやめましょう。__`gulp-cli`の主な機能は`node_modules`配下の`gulp`コマンドへパスを通すことです。そんなことはわざわざ`gulp-cli`を経由せずとも、もともと__npm-scriptsが同じ事をしてくれてるじゃあありませんか。__

```js:gulpfile.js
var gulp = require('gulp');

gulp.task('hoge', function() {
  console.info('ほげほげ！！');
});
```

例えば、こんな`gulpfile.js`があったとしたら、

```json:package.json
{
  "scripts": {
    "hoge": "gulp hoge"
  }
}
```
こんな感じでnpm-scriptsを追加すれば、`gulpfile.js`に書いた`hoge`タスクを実行できます。

```bash
$ npm run hoge
// => "ほげほげ！！"
```

これでプロジェクトが__グローバルを犯すことのない疎な構造が出来上がりました！__やったね:bow:

npm-scriptsの詳しい使い方については「<a href="https://ics.media/entry/12226" target="_blank">Node.jsユーザーなら押さえておきたいnpm-scriptsのタスク実行方法まとめ</a>」で解説しているのでご参考ください。


## 最後に :speech_balloon: 
とは言ったものの少数派の意見なのでGulpの公式に屈服せざるおえない状況の方が多いと思います。是非皆さんのプライベートなプロジェクトなんかで試してみてください。
Linuxでls -lしたときのファイル変更日時を見易い形で、ソートして表示する

## 普通の`ls -l`
Linuxで`ls -l`を実行したときに表示されるファイル変更日時の情報

```bash
drwxr-xr-x  3 admin admin 4096 10月 27 10:39 2015 Config
drwxr-xr-x  4 admin admin 4096  3月  1 15:03 2013 Console
drwxr-xr-x  3 admin admin 4096  4月 18 16:41 2016 Controller
drwxr-xr-x  3 admin admin 4096  3月  6 10:28 2013 Lib
drwxr-xr-x  3 admin admin 4096  3月  1 15:03 2013 Locale
drwxr-xr-x  4 admin admin 4096 10月 27 11:35 2015 Model
drwxr-xr-x  5 admin admin 4096  3月  5 19:54 2013 Plugin
drwxr-xr-x  4 admin admin 4096  3月  1 15:03 2013 Test
drwxr-xr-x  2 admin admin 4096  3月  1 15:03 2013 Vendor
drwxr-xr-x 13 admin admin 4096  4月 18 18:43 2013 View
-rwxr-xr-x  1 admin admin  702  3月  1 15:03 2013 index.php
drwxrwxrwx  6 admin admin 4096  3月  1 15:03 2013 tmp
drwxr-xr-x  6 admin admin 4096  3月  1 15:03 2013 webroot
```

これ、一番最近編集を加えたファイルはどれだったっけ……?
なんて思ってしまったとき、この表示では見辛いですよね。
少なくともパッと見ではわかりません。

## カスタマイズした`ls -l`

そんな時は`ls -altr --time-style='+%Y-%m-%d %H:%M:%S'`とすると見慣れた?形式で表示してくれます。

```bash
drwxr-xr-x  3 admin admin 4096 2013-03-01 15:03:22 Locale
drwxr-xr-x  4 admin admin 4096 2013-03-01 15:03:22 Console
-rwxr-xr-x  1 admin admin  140 2013-03-01 15:03:22 .htaccess
drwxrwxrwx  6 admin admin 4096 2013-03-01 15:03:23 tmp
-rwxr-xr-x  1 admin admin  702 2013-03-01 15:03:23 index.php
drwxr-xr-x  2 admin admin 4096 2013-03-01 15:03:23 Vendor
drwxr-xr-x  4 admin admin 4096 2013-03-01 15:03:23 Test
drwxr-xr-x  6 admin admin 4096 2013-03-01 15:03:31 webroot
drwxr-xr-x  5 admin admin 4096 2013-03-05 19:54:18 Plugin
drwxr-xr-x  3 admin admin 4096 2013-03-06 10:28:05 Lib
drwxr-xr-x 13 admin admin 4096 2013-04-18 18:43:56 View
drwxr-xr-x 14 admin admin 4096 2014-12-15 13:16:32 .
drwxr-xr-x  3 admin admin 4096 2015-10-27 10:39:31 Config
drwxr-xr-x  4 admin admin 4096 2015-10-27 11:35:19 Model
drwxr-xr-x  7 admin admin 4096 2016-04-18 15:10:01 ..
drwxr-xr-x  3 admin admin 4096 2016-04-18 16:41:34 Controller
```

時間でのソートもしているので一番下が一番新しい変更の加わったファイルとなり、グッと見やすくなりました。

## 上記で使用されているlsのオプションの意味

`ls`コマンドに付けているそれぞれのオプション`-altr`の意味は以下の通りです。

|オプション|意味|
|:---:|:---:|
|a|隠しファイルも表示|
|l|ファイルの詳細情報も表示|
|t|更新情報でソートして表示|
|r|ソートを逆順にして表示|

これに`--time-style='+%Y-%m-%d %H:%M:%S'`を付けることで、普段見慣れた?形で時間情報を並び変えて表示してくれます。

## `rc`への登録

これ、使えるぞ!とか、よく使うかも!と思ったら`rc`ファイルに`alias`を記述してしまいましょう。

```:.bashrc
alias lt="ls -altr --time-style='+%Y-%m-%d %H:%M:%S'"
```

自分は`lt`コマンド(`t`は`time`の`t`です。安直でごめんなさい)として登録しています。
`lt`コマンドは元々ないので何かの動作が行えなくなることもありません。
良ければ使ってみて下さい。
オブジェクトをGETリクエストのパラメータ形式に変換する。

{key=value}をkey=valueの形に変換し&でつなぐ。

```js
var param = {
    user:"hoge",
    page:1
}

Object.keys(param).map(function(key){ return key+"="+ param[key] }).join("&")
-> "user=hoge&page=1"
サーバ脆弱性検討

# 攻撃
## nmapのSTATEの見方
### OPEN
OPENは，そのポートが開放されており，かつ表示されているSERVICEのアプリケーションがtcp/udpの通信を受け入れていることを示す．

### CLOSED
CLOSEDは，そのポートがアクセス可能であるが，待機しているアプリケーションが無いことを示す．基本的にサービスが動いていないだけであればCLOSEDが帰ってくる．

### FILTERED
FILTEREDは，テスト通信が対称のポートまで到達できなかったことを示す．理由は，対象機のファイヤウォールやルータの設定がある．ファイヤーウォールがDROPすれば，FILTEREDが帰る．

# 守り
## ファイヤーウォール設定
### centos 7
GUIで設定可能．
ゾーン: 任意に定義されたサービス群．このゾーンに対して色々なアクションを定義する，publicがデフォルトゾーン．
```firewall-config```
初心者がWindowsでChainerでDNNしてみた(CUDAあり)

のっぴきならない事情により最近流行りのDNNをやってみたくなった。
そこでWindowsでも使えるChainerをインストールし使ってみた。
せっかくなのでQiitaに初投稿、OSはWindows7以降64bitを想定。

# １．GITを使える様にする
これ無くてもChainerダウンロードできるがローカルでもバージョン管理できるので便利。
とりあえず以下のものをインストールする。使わない人は飛ばしてください。

**[Git for Windows](https://git-for-windows.github.io/)**
これでGITコマンド使える様になる、何気にGUIもついてる。
TortoiseGit使うにはこれが必要になる。

**[TortoiseGit](https://tortoisegit.org/download/)**
エクスプローラーの右クリックメニューにGIT関係処理追加してくれる。
必要ならLanguage Packs もインストール。

# ２．Pythonを使える様にする
**[Anaconda4](https://www.continuum.io/downloads)**
をインストールする。インストール時に「All Users」の方を選ぶ。
これ入れれば大体のことはできる。かなり便利。

# ３．VisualStudio2013と2015のCommunityをインストール
**[https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2](https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2)**
↑のページ左に並んでる **Visual Studio 2013** と **Visual Studio 2015** のCommunityを順にインストール。
#### Visual Studio 2013
CUDA7.5がVS2015対応していないのでしょうがないのでインストール。
CUDA8なら対応するらしいが現時点でまだリリースされていない。
インストールオプションでC++以外全解除してもいいかも。

#### Visual Studio 2015
インストール時に必ず「Visual C++」にチェックを入れる。
これはChainerインストール時にCython使うようになってるため必須。
一応WindowsSDKにもチェック入れてみる。
**[Python Tools for Visual Studio](https://github.com/Microsoft/PTVS/wiki/PTVS-Installation)** にもチェック入れてPythonプログラミングしやすくする。

# ４．CUDA7.5とcuDNNインストール
※グラボがNVIDIAじゃなかったりCUDA使わない人は飛ばしていいです。

**[CUDA7.5](https://developer.nvidia.com/cuda-downloads)**
これは普通にダウンロードできる。
インストール時にVS2013用に色々勝手にやってくれるようだ。

**[cuDNN](https://developer.nvidia.com/cudnn)**
これはユーザー登録しないとダウンロードできない。
登録＆ログインしてダウンロードページに進むといくつか選択肢があるが
**「Download cuDNN v5 (May 12, 2016), for CUDA 7.5」** を選ぶ。

cuDNNはZIP解凍して自分でCUDAフォルダにコピーする必要がある。
自分の環境だと解凍された **bin, include, lib** を
**「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5」** 内に上書きした。

# ５．ChainerをGitHubからクローンする
**[Chainer](https://github.com/pfnet/chainer)** のページ右側の **「Clone or download」** をクリック。
表示されたアドレスをクリップボードにコピー。　※アドレス右側のボタンでコピーできる
※GIT使わない人は **「Download ZIP」** でもいい。

エクスプローラーで適当なフォルダ右クリックして
**「Git クローン(複製)...」**を選んで表示されたダイアログでOK押すと
選んだフォルダ内に**「chainer」**フォルダができる。

# ６．ChainerをPython環境へインストール
コマンドプロンプト開いて、さっき作った**「chainer」**フォルダへ移動。
**「python setup.py install」**を実行する。
すると色々ビルドしてAnaconda環境にインストールされる。

# ７．CUDAコンパイラ「nvcc」用にパスを通す
nvccがVS2013のcl.exe使うのでパスを通す。ユーザー別の方のパスでいいんじゃないかな。
自分の環境では**「C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin」**をパスに追加した。
これやらないとGPU使用での実行時にエラーが出る。

# ８．サンプルを実行する
せっかくなのでVS2015で新規にPython Application作ってそこにchainerのmnistサンプルコピーして実行してみる。
ちゃんとGPU使えるか確認するためデバッグオプションで**-g0**をコマンドライン引数に渡しておく。
![mniststart.png](https://qiita-image-store.s3.amazonaws.com/0/124409/ae155747-334d-d9b6-4b31-702dfc7e41ca.png)

この状態でかなり待たされるが辛抱強く待っていると・・・

![mnist.png](https://qiita-image-store.s3.amazonaws.com/0/124409/9f15795c-66bc-7156-1b09-5ed89d20094b.png)

何やら動き始めたぞ！　GPUもちゃんと使ってる様だ。
よかったよかった。でもこのサンプル学習結果確認するところまで作られてないようで残念。

とりあえず以上でChainer使える様になるはずです。
【Atom】エディタの自動フォーマットの設定を統一しよう

## チーム開発におけるフォーマット統一の重要性
チーム開発でGithubなどのバージョン管理システムを導入しているのはもはや当たり前だと思いますが、そこで必ず発生するのがこのフォーマット統一に関する問題です。
例えば、ある人はファイル末尾に必ず空行を挿入する設定をしているのに、自分は空行を挿入しないような設定にしていると、自分が作成したファイルを他の人が編集すると、微妙なフォーマットの更新が発生します。また、その逆も起こりえます。

特定の人が編集する度にフォーマットに関する差分が発生してしまうと、無駄なコミット履歴が残ってしまい、またコードレビューをする人からするとかなり見難いため、あまりよくありません。
チームごとで各メンバーが使用するエディタの設定を統一することで、無駄なコミットが発生しないよう心がけましょう :muscle: 

## Atomでのフォーマットの設定

Preference > Packages を選択し、検索欄に「whitespace」を入力して検索します。
Atomにはこのwhitespaceというプラグインがデフォルトで入っており、ここでスペースに関する設定をすることができます。
![スクリーンショット 2016-06-05 11.19.02.png](https://qiita-image-store.s3.amazonaws.com/0/42852/37cd7601-6d6f-14ed-1868-6d20be79f261.png)

また、いくつかデフォルトでオンになっている設定があり、保存時に自動フォーマットしてくれるため、変更したい時はこの設定を確認してみましょう。

![スクリーンショット 2016-06-05 11.19.19.png](https://qiita-image-store.s3.amazonaws.com/0/42852/f500ead1-a1f8-76a3-c516-b0391603ed58.png)


### ファイルの末尾の改行
ファイルの末尾に改行が挿入するかどうかの設定は、`Ensure Single Trailing Newline`で行います。改行させないようするには、このチェックを外します。

### カーソル行のスペース
カーソルがある行の余分なスペースを削除したくないときは、`Ignore Whitespace On　Current Line`のチェックを入れます。削除したい場合は、チェックを外します。

### 空行のスペース
スペースのみの行があった場合、そのスペースを削除したくない場合は、`Ignore Whitespace Only Line`のチェックを入れます。削除したい場合は、チェックを外します。

### ファイル保存時に自動的にスペースを削除する
ファイルを保存した時に、上記で設定したような余分なスペースを自動で削除するようにしたい場合は、`Remove　Trailing　Whitespace`のチェックを入れます。必要のないときはチェックを外します。

## 注意点

### 無意識にコードの差分を生まないように注意する
これはエディタの設定にもよると思うのですが…。
この自動フォーマット機能は勝手にインデント揃えてくれたりと大変便利なのですが、この機能により自分の気づかないところで差分が発生してしまうことがあります。

例えば、ファイルを保存した時に自動フォーマットするような設定にしていると、意図せず関係ないファイルを編集してしまい、`git status`を叩くとたくさんファイルがmodifyされてる…みたいなこともあると思います。

最初からエディタの設定と同じようにフォーマットされているファイルを編集するのであれば、問題ないとは思います。
そうではないファイルを編集する際は、自動保存の設定はしなくても良いんじゃないかと個人的には思います。
FPGA > Link > 制約に関する情報 > Xilinx ISE におけるの制約の与え方

http://qiita.com/7of9/items/ace300523ac2521237b7
にて不明だった「制約」

以下のリンクを見つけた
http://dora.bk.tsukuba.ac.jp/~takeuchi/?電気回路%2FHDL%2FXilinx%20ISE%20におけるの制約の与え方
VMWare上のLubuntuで画面の解像度を1920x1080に指定

## 参考

* [VMWare 上にインストールした Ubuntu 12 で 1920 x 1080 の解像度を実現する - ltcmdr927atenablog](http://ltcmdr927.hatenablog.jp/entry/2012/05/04/175011)

## 設定

```bash:設定値確認
$ cvt 1920 1080 60
# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
```

```bash:mode追加
xrandr --newmode "1920x1080_60.00" 173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
xrandr --addmode Virtual1 1920x1080_60.00
```

```bash:設定
/usr/bin/xrandr --output Virtual1 --mode 1920x1080_60.00
```
Zybo > Chronicles blog 29 > DMA command > channel control / block descriptor / user-defined program / pointer to the generated program / result of the transfer

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Zynq-DMA-Part-Two-Adam-Taylor-s-MicroZed-Chronicles-Part-29/ba-p/443324

> Within the DMA configuration function we first create a DMA command using the command structure provided by xdmaps.h. 

...

> A DMA command consists of 

- the channel control, 
- block descriptor, 
- a user-defined program, 
- a pointer to the generated program and 
- the result of the transfer.
Zybo > Chronicles blog 29 > DMACの使用コード

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Zynq-DMA-Part-Two-Adam-Taylor-s-MicroZed-Chronicles-Part-29/ba-p/443324


### include

```
#include "xscugic.h"
#include "xdmaps.h"
#include "xil_exception.h"
```

### xparameter.h

```
#define DMA_DEVICE_ID               XPAR_XDMAPS_1_DEVICE_ID
#define INTC_DEVICE_ID              XPAR_SCUGIC_SINGLE_DEVICE_ID
#define DMA_FAULT_INTR              XPAR_XDMAPS_0_FAULT_INTR
#define DMA_DONE_INTR_0             XPAR_XDMAPS_0_DONE_INTR_0
#define DMA_LENGTH      1024
```

### configuration

```
DmaCmd.ChanCtrl.SrcBurstSize = 4;
            DmaCmd.ChanCtrl.SrcBurstLen = 4;
            DmaCmd.ChanCtrl.SrcInc = 1;
            DmaCmd.ChanCtrl.DstBurstSize = 4;
            DmaCmd.ChanCtrl.DstBurstLen = 4;
            DmaCmd.ChanCtrl.DstInc = 1;
            DmaCmd.BD.SrcAddr = (u32) Src;
            DmaCmd.BD.DstAddr = (u32) Dst;
            DmaCmd.BD.Length = DMA_LENGTH * sizeof(int);
```

### initialization and configuration

```
DmaCfg = XDmaPs_LookupConfig(DeviceId);
            XDmaPs_CfgInitialize(DmaInst,DmaCfg,DmaCfg->BaseAddress);
            SetupInterrupt(&GicInstance, DmaInst);
```

### tracking of progress

```
DmaCfg = XDmaPs_LookupConfig(DeviceId);
            XDmaPs_CfgInitialize(DmaInst,DmaCfg,DmaCfg->BaseAddress);
            SetupInterrupt(&GicInstance, DmaInst);
XDmaPs_Print_DmaProg(&DmaCmd);
```
Zybo > Chronicles blog 28 > Several IO peripherals > have their own DMA Controllers

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/The-Zynq-PS-PL-Part-Eight-Zynq-DMA-Adam-Taylor-s-MicroZed/ba-p/441092


> While the Zynq DMAC allows bidirectional transfer between system memories and PL (including the Zynq peripherals in the PL), it does not support DMA for peripherals in the Zynq PS because these have no flow-control signals to support DMA operations. However, several of the IO peripherals in the Zynq SoC have their own DMA Controllers to support high data rate transfers to or from the IOP and system memory. These peripherals are:
 
>- GigE Controller
- SDIO Controller
- USB Controller
- Device Configuration Controller

IOPは通常DMA対応ではないが、一部のIOP(上記のリスト)はDMA対応しているとのこと。
技術英語 > the light-colored butterflies and dragonflies … able to … even [outcompete] their darker-colored rivals. / outnumbered / overwhelming


http://www.scientificamerican.com/podcast/episode/light-colors-become-fashion-rage-for-northern-europe-s-insects/

> the light-colored butterflies and dragonflies typically found in the Mediterranean find themselves able to survive in the newly warmer north, and to even <font color=red>outcompete</font> their darker-colored rivals.

http://eow.alc.co.jp/search?q=outcompete
> 〔競争相手などを〕打ち負かす、破る

<hr>
関連して思い出したのは

> outnumbered

数で負けている。

http://eow.alc.co.jp/search?q=outnumbered

Voyagerでよく出るのは、戦闘力の差で outgunned 

<hr>
関連して思い出したのは

> overwhelming

圧倒的

http://eow.alc.co.jp/search?q=overwhelming
白黒写真の自動色付けをDockerで試す

早稲田大学 石川博教授チームが発表した自動色付け技術を自分の環境で試してみたいと思いました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">SIGGRAPH2016 technical papers に2件アクセプトされました：<br>・白黒画像の全自動色付け <a href="https://t.co/7c9ZBadYsc">https://t.co/7c9ZBadYsc</a> <br>・ラフスケッチの線画化 <a href="https://t.co/4IJ8iuwPnt">https://t.co/4IJ8iuwPnt</a><br>どちらもディープラーニング</p>&mdash; hiroshi ishikawa (@picocog) <a href="https://twitter.com/picocog/status/723066682722263041">2016年4月21日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## TL;DR 簡単な結論

```
$ git clone https://github.com/fuji70/auto_colorize.git
$ cd auto_colorize
$ ./run.sh input.png out.png
```

元論文のライセンス条項（非商用利用など）は守ってご利用下さい。

## やったこと

[著者自身による論文紹介](http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/ja/)から[公開コードGithub](https://github.com/satoshiiizuka/siggraph2016_colorization)が辿れます。
TorchのDockerイメージ [kaixhin/torch](https://hub.docker.com/r/kaixhin/torch/) を利用することで簡単に環境構築できました。
また変換実行は Docker 起動パラメータに入れてシェルスクリプトから呼び出すようにしました。

よって、前もってDocker環境（```docker run hello-world``` が動く） をお持ちであれば下記に公開したスクリプトで簡単に自動彩色を試せます。

- [fuji70/auto_colorize](https://github.com/fuji70/auto_colorize)

### 参考記事

- [ディープネットワークを用いた大域特徴と局所特徴の学習による白黒写真の自動色付け](http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/ja/)
- [「ディープネットワークを用いた大域特徴と局所特徴の学習による色付け」を試す - Qiita](http://qiita.com/torao@github/items/56b5abe2eb1ec5071f8e)
Swift:for-in文

そろそろSwift3.0になりそうですが、
それに伴って使えなくなるコードが出てきますね。

対応しなくてはならない方達は大変だろうと思います。

もしかしたら、Swift書いている人は常識になっているかもしれませんが
i++がi+=1に変更されるように
単純なfor文もSwift3.0では以下の構文が書けなくなります。
（個人的にはこちらの書き方に馴染みがあります）

```
for var i = 0; i < 10; i++ {
    //処理
}
```
使えなくなるのでfor-in文で解決させることになります。

```
for i in 0..<10 {
    //処理
}
```
10より下ならループとなります。
10以下なら

```
for i in 0...10 {
    //処理
}
```
のようになります。

「i」と設定してますが単純にループだけなら
実際は使わない変数に用いられる省略記法「_(ワイルドカード)」が使えます。

```
for _ in 0...10 {
    //処理
}
```

また、

```
for var i = 10; i > 0; i-- {
    //処理
}
```
のようなデクリメントの場合は

```
for i in (0 ..< 10).reverse() {
    //処理
}
```
.reverse()を使います。

簡単なfor-in文の事を書きました。
他にも書き方があるようなので、自分が利用した時に覚書として書こうと思います。

早いところこちらの書き方に慣らさないと。。
Unityでカメラの位置をいい感じの位置に決めるTips

Unityの操作をしていてこんなことはないですか？

![image](https://qiita-image-store.s3.amazonaws.com/0/96970/b8112caf-43bd-9342-ea80-214d4aa4b0b4.png)

カメラの位置が微妙すぎる！
でもゲームビューを見ながら、いい感じの位置にカメラを移動をさせるのは面倒くさい...そんな時に役に立つTipsです。

# まずはSceneビューをいい感じの眺めにする。

![image](https://qiita-image-store.s3.amazonaws.com/0/96970/0794569a-18dc-e8b7-d41f-b319c158c5ef.png)

# ヒエラルキービューのCameraオブジェクトをクリックする。

![image](https://qiita-image-store.s3.amazonaws.com/0/96970/02e5a148-6c70-9512-d2fb-c3b647f25d3e.png)

# 画面上の[GameObject]>[Align With View]をクリックする。

![image](https://qiita-image-store.s3.amazonaws.com/0/96970/d39a2366-756f-0208-abfc-e85d70de5a38.png)

# 完成 

![image](https://qiita-image-store.s3.amazonaws.com/0/96970/4f45d1c7-165c-db94-4dd1-a8dfbc08a068.png)

このように[Align With View]を使うとカメラオブジェクトが移動し、ゲームビューがいい感じの眺めになりました。
arduinoでXFDを作る。自動テストフィードバックツール「アラーム君」


#経緯
Jenkins等の自動試験ツールを使ったり、UWSCとかバッチでPC操作して、
システム試験ツールを作成・使用しています。
ビルド失敗やエラー発生、NG検出を1秒でも早く知りたいと思って、色々試しています。
・メールで通知
・RSS ([Feed Notifier](https://www.feednotifier.com/)が便利だった)
でも、少しタイムラグがあったり、PCの画面を見てないと気づかなかったりと、問題点が気になっていました。

PC制御の警告灯を検索してみたら、数万円とか。。。ちょっと手が出ない。
なら、自分で作ろうってことで、最近Arduinoっていうマイコンで簡単にシリアル通信したり、LED光らせたりできることを知って、チャレンジしてみました。

LED点灯だけの試作機を使ってみたところ、かなりいい感じだったので、ちゃんと設計して、ソースの公開、上手くいけばキットの販売なんかもやってみようと思います。

試作機（スピーカーの動作確認中）
![ファイル_000.jpeg](https://qiita-image-store.s3.amazonaws.com/0/128077/79ebc0cd-03e4-fb7b-9dfb-b491b4697865.jpeg)

#arduinoとは
簡単に言うと、オープンソースのハードウエア！？、ソフトウエア、開発環境です。
世界的な規模のコミュニティもあり、最近流行っているようです。
やってみたら、すごい楽しかって、最近ハマってます！
互換ボードだったら、1000円以下で入手できます。

ボードを買って、開発環境をDL、C++でコーディングしたら、簡単にフィジカルコンピューティングが楽しめます！
モータでロボット動かしたり、各種センサーでいろんな事したり、3Dプリンターにも使われているのもあるようです。

#XFDとは
エクストリーム・フィードバック・デバイス
だそうです。
「Jenkins XFD」や「Arduino XFD」で検索したら、いろいろ出てきます。
この辺がわかりやすいです。
[Jenkins に XFD を追加してみると](http://www.slideshare.net/kiroh/jenkins-xfd)


#方向性
1.シンプル
2.改造可能
3.オープンソース
4.安く

#機能設計
1.ビルド中、テスト失敗、テスト成功、エラー発生中をLEDで表示
2.音でもお知らせ
3.シリアル通信で制御
　TeraTermとかからバッチで使える。
　LANを使うとパーツが増えるので、シリアルで。
　Jenkinsのビルド開始、終了、テスト結果の処理でバッチを実行する予定。

#Makers Bazaar Osaka vol.3出展します！
http://makersbazaar.jp/
2016/7/9(土)、7/10(日)

ここまでに仕上げる予定！
作成状況を、Qiitaに書きますね。

間に合えば、3500円ぐらいで販売予定です。
気になる人は、見に来てください。
すべてのユーザテーブルのトリガについて、トリガ名と定義を調べるSQL

すべてのユーザテーブルのトリガについて、トリガ名と定義を調べるSQLは、

```plpgsql
SELECT
    n.nspname || '.' || c.relname AS table,
    t.tgname AS trigger,
    pg_get_triggerdef(t.oid, true) AS definition
FROM
    pg_trigger t,
    pg_class c,
    pg_namespace n
WHERE
    t.tgrelid = c.oid AND
    c.relnamespace = n.oid AND
    c.relkind = 'r' AND
    n.nspname <> 'pg_catalog' AND
    n.nspname <> 'information_schema' AND
    n.nspname !~ '^pg_toast'
ORDER BY
    n.nspname,
    c.relname,
    t.tgname;
```
PowerlineをMacのTerminalで使う

Powerlineなるものがカッコイイと聞いたのでMacに入れてみた。

環境:
Mac OS 10.11.5 (El Capitan)
Homebrew 0.9.9
Zsh 5.2 (Homebrewで導入)

#Powerlineを入れる
PowerlineのパッケージはHomebrewにあるので入れる。

```zsh
% brew install powerline
```

#フォントを入れる
Powerlineは専用のフォントがないと文字化けするので入れる。

```zsh
% brew tap sanemat/font
% brew install ricty --patch-in-place --powerline --vim-powerline
```

フォントを反映するために実行するコマンドは、インストール時に指示されるので従う。

#zshでPowerlineを有効化する
素のPowerlineは重いのでpowerline-daemonを起動しておく

```zsh:.zshrc
powerline-daemon

# powerlineのバージョンにより記述は若干変わるかも
. cp /usr/local/Celler/powerline/2.4/lib/python2.7/site-packages/powerline/bindings/zsh/powerline.zsh
```

#Terminalのフォント設定を変える
お好みのプロファイルのフォント設定で`Ricty`か`Ricty Discord`を選択
なめらかに方向転換　～もとい、Easing

あるオブジェクトの
transformのrotationを変更することで
向きは変えることができる

rotationは四元数なので
四元数のクラスである
Quaternionの補完を使うことができる

今向いている向きから
特定の向きへ
向きをなめらかに変えたい場合

現在のrotationと
向きたい向きのオブジェクトのrotationとを
Slerpで補完することができる

* * *

```
    void TurnAround(Transform target, int count)
    {
        StartCoroutine(TurnAroundCore(target, count));
    }

    IEnumerator TurnAroundCore(Transform target, int count)
    {
        var from = transform.rotation;
        var to   = target.transform.rotation;

        var quaternions = Enumerable.Range(1, count)
            .Select(i => (float)i / (float)count)
            .Select(f => Quaternion.Slerp(from, to, f));

        foreach (var quaternion in quaternions)
        {
            transform.rotation = quaternion;
            yield return new WaitForEndOfFrame();
        }
    }
```

* * *

これだと向きの振り方が
素直すぎるので
補完関数をかましてみる

* * *

```
    void TurnAround(Transform target, int count)
    {
        Func<float, float> curve = (v) =>
        {
            var rad = v * Mathf.PI / 2f;
            var sin = Mathf.Sin(rad);
            return sin;
        };

        StartCoroutine(TurnAroundCore(target, count, curve));
    }

    IEnumerator TurnAroundCore(Transform target, int count, Func<float, float> curve)
    {
        var from = transform.rotation;
        var to   = target.transform.rotation;

        var quaternions = Enumerable.Range(1, count)
            .Select(i => (float)i / (float)count)
            .Select(curve)
            .Select(f => Quaternion.Slerp(from, to, f));

        foreach (var quaternion in quaternions)
        {
            transform.rotation = quaternion;
            yield return new WaitForEndOfFrame();
        }
    }
```

* * *

補完といえば、Robert Pennerさんのeasingですね。
http://robertpenner.com/easing/

ところがUnity的には肝心のC#のコードがリンク切れ。
と思ったら、acron0さんがgithubに補完関数を上げてくれていた。
https://github.com/acron0/Easings/blob/master/Easings.cs

acron0さんのは関数が正規化してあるので、上のTurnAroundCore関数の引数curveにそのまま渡すことができる。

```
Func<float, float> curve = Easings.BounceEaseOut;
StartCoroutine(TurnAroundCore(target, count, curve));
```


* * *

acron0さんの補完関数を使う前の、いわゆるLinerの状態だとコレ
![20160607_021504.gif](https://storage.googleapis.com/tonitakekawa.xyz/q/20160607_021504.gif)

たとえば BounceEaseOut を使うとこうなる。
![20160607_022412.gif](https://storage.googleapis.com/tonitakekawa.xyz/q/20160607_022412.gif)

あれっanimationGifだめなん？
OpenStreetMap + Leaflet の地図のマーカーの色を簡易的に変更

```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css" />
<style>
html { width: 100%; height: 100%; }
body { width: 100%; height: 100%; margin: 0; }
#map { width: 100%; height: 100%; }
.leaflet-marker-icon-color-blue    { filter: hue-rotate( 30deg); }
.leaflet-marker-icon-color-pink    { filter: hue-rotate( 90deg); }
.leaflet-marker-icon-color-red     { filter: hue-rotate(150deg); }
.leaflet-marker-icon-color-yellow  { filter: hue-rotate(210deg); }
.leaflet-marker-icon-color-green   { filter: hue-rotate(270deg); }
.leaflet-marker-icon-color-alua    { filter: hue-rotate(330deg); }
.leaflet-marker-icon-color-rainbow { animation: 6s linear 0s infinite normal filter_hue_rotate; }
@keyframes filter_hue_rotate {
    0% { filter: hue-rotate(  0deg); }
  100% { filter: hue-rotate(360deg); }
}
</style>
</head>
<body>
<div id="map"></div>
<script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js"></script>
<script>
// 即時関数
(() => {
  // 地図の設定
  const map = L.map('map').setView([30.37486500, 130.9576461], 14);
  // 地図タイルの設定
  L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', {
    attribution: '&copy; <a href="https://osm.org/copyright">OpenStreetMap</a> contributors',
  }).addTo(map);
  // markerとpopupの設定
  const marker = L.marker([30.37486500, 130.9576461], { title: 'marker-title' })
    .addTo(map)
    .bindPopup('<h3>test</h3><p>hogehoge</p>')
    .openPopup();
  // markerのiconの要素にClassを追加
  L.DomUtil.addClass(marker.getElement(), 'leaflet-marker-icon-color-rainbow');
})();
</script>
</body>
</html>
```

<!--

# DEMO

http://bl.ocks.org/feo52/raw/05f55c1cc3e3dd41af0c450d2502eff4/

https://gist.github.com/feo52/05f55c1cc3e3dd41af0c450d2502eff4

-->

# 参考情報

https://osm.org/
https://openstreetmap.org/

https://leafletjs.com/
https://leafletjs.com/examples/quick-start/

https://leafletjs.com/reference.html
https://leafletjs.com/reference.html#map
https://leafletjs.com/reference.html#marker
https://leafletjs.com/reference.html#domutil

## あとがき

ノンプログラマーの素人が記述をしたコードです。
狭い利用範囲と少ない利用頻度での確認ですので、
記載内容に間違いや勘違いがあるかもしれません。
上記内容を参照の際は自己責任でお願い致します。
vagrant のインストール


# 実行環境
Mac OSX 10.10
VirtualBoxをインストール済み

# vagrant のインストール

https://www.vagrantup.com
からvagrant本体をダウンロードする

# vagrant の作成

http://www.vagrantbox.es
から作成したい環境のURLを取得する

```
vagrant box add [name] [url]
mkdir vagrant
cd vagrant
vagrant init [name]
```

# vagrantfileの編集

```VagrantFile
Vagrant.configure(2) do |config|
  config.vm.box = "[name]"
  config.vm.network "private_network", ip: "XXX.XXX.XXX.XXX"
end
```

# vagrant の起動・状態確認・終了・破棄

```
vagrant up
vagrant status
vagrant halt
vagrant destroy
```

# vagrant プラグインのインストール

```
vagrant plugin install vagrant-vbox-snapshot
vagrant snapshot take [snapshot-name]
vagrant snapshot go [snapshot-name]
```
UnityWebRequestでjsonをpostしたい.

ちょいハマったのでメモ。

```csharp:SamplePost.cs
using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;

public class SamplePost : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(Post("http://localhost:4567", "{'nickname':'hoge'}"));
    }

    IEnumerator Post(string url, string bodyJsonString)
    {
        var request = new UnityWebRequest(url, "POST");
        byte[] bodyRaw = Encoding.UTF8.GetBytes(bodyJsonString);
        request.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw);
        request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
        request.SetRequestHeader("Content-Type", "application/json");

        yield return request.Send();

        Debug.Log("Status Code: " + request.responseCode);
    }
}
```

`UnityWebRequest.Post()` のショートカットはフォームデータのポストしか対応してないので自分でnewする必要がある。
`SetRequestHeader` で `Content-Type`を設定すればjsonのpostになる。
配列をDBに登録するやり方

・serialize()という関数を使うらしい
http://www.t-webu.net/php/php%E3%81%A7%E7%B0%A1%E5%8D%98%E3%81%AB%E9%85%8D%E5%88%97%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92db%E3%81%B8%E6%A0%BC%E7%B4%8D%E3%81%99%E3%82%8B.html

・serializeされたデータの型はblob(varcharやtextではダメ)
http://php.net/manual/ja/function.serialize.php
初心者エンジニアがwebサービスを初めてリリースするために必要なこと（RubyOnRails編）


## 対象読者
- 非エンジニア、またはエンジニア初心者でWEBサービスを作りたくてRubyOnRailsを選択して、行き詰まっている、開発を加速したい人（Rails編としているのは、私がweb技術としてRailsしかさわったことがないため）

## 思い

とりあえず何かサービスを作ってみたい！と思ってRails を選択する初学者エンジニアは多いのではないかと思います。
ひとりではつまづくことも多く、くじけそうになります。


今はRailsで仕事をしていますが、数年前から独学でrailsを学びサービスを何個か作ってきて学んだことを共有したいと思います。

## スタンス編

### 書籍の選び方
- 構成として、最後まで読めば一つのアプリケーションができる、というものがおすすめです。もし何作って良いか分からなければ読み進めながら手を動かすことで一通り開発を経験できます。作りたいものがある場合は、自分がやりたいことが書いて有るページを探して自分のアプリケーションに読み替えて実装をすすめるとよいです。
- 環境構築の情報も掲載されているのでこちらにweb上の情報をあてにするより、インストール作業として完結しているので初心者の場合はこちらの方がよいと思います。
- [基礎 Ruby on Rails はよかったです](http://www.amazon.co.jp/exec/obidos/ASIN/4844338153/oiax-22/ref=nosim)

### やりたいことをキーワードに、死ぬほど検索する
-　書籍があるとはいえ、自分がやりたいことがのっていないことがあったり、ハマったり、どうしたらわからない場合があります。
その場合は、自分がやりたいことをキーワードで徹底的にググりましょう。大抵は解決できます。
```
例　申請（Application）テーブル に対して申請者（User）,承認者(User)という同じモデルに対して関連を保持する都いう実装をしたかったがどうすればよいかわからなかったときは
「Rails 外部キー　任意のキー名」
で検索しました。
よいキーワードで選択できるためには技術的バックグラウンドや経験が必要かもしれないですが、ひたすら検索（訓練）することで欲しい情報にたどり着く確率が上がってきます。
```
### もくもく勉強会に参加しよう
- それでも、それでもひとりではどうしようも解決できないこともあります。くじけそうになったら、もくもく勉強会という勉強会イベントに参加してみましょう。初心者歓迎のイベントもあるのでセットアップなども面倒見てくれところもあります。
[connpassはおすすめです](http://connpass.com/)
webだけの情報では限界があるので、たまにはそういうところに出向くをおすすめします。
[私はちなみに東京郊外でイベントを主催しております](http://tokyo-kogai-ruby.connpass.com/)

 
## 技術編

### SQL 
- データベースにアクセスするための言語っであるSQLは、web技術が初心者の人にとって壁です。しかし安心してください。大抵のことは、ActiveRecordのファインダーメソッドを使うと直感的にデータを取り出すことができます。書籍にもこの辺の情報は載っていますし、検索しても沢山ヒットするのでよく調べられるとよいです。よいコードやSQLへの理解は動くものが書けるようになってからでいいと思います。

### CSS フレームワーク BootStrapを使ってみためを整えよう
- それなりに見た目がまともなサービスを作るには、スタイルシートを適用する必要があります。しかし、これもゼロから自分でつくるとなるとハードルが高いものとなります。スタイルシートの知識も必要ですが、少しの苦労で、整理されたUIをつくることができます。

- [bootstrap](http://getbootstrap.com/)
- [有料だがもっとリッチなbootstrapをカスタマイズしたものがある](https://wrapbootstrap.com/)

### Javascript 
- 動的な画面、非同期処理、位置情報を使った処理をやりたい場合にjavascriptは必須です。自分の実装したい機能に応じて習得するかどうか考えましょう。習得される場合は、jqueryから入られるのがよいかと思います。慣れてきたり、高機能、もしくは複雑な振る舞いをさせたい場合には、オープンソースのjavascript（jquery）ライブラリ、プラグインも充実しているので検索するいろいろ出てきます。

[例）グラフをいけてる感じにするプラグインChart.js](http://www.chartjs.org/)

### 便利なGemを知って使おう
- ruby ではGemというパッケージ管理システムがありRailsでも利用することができます。ログイン処理を簡単に実装したい、ぱんくずリストを実装したい場合にも、そのようなライブラリが充実しており、簡単に実装したい機能を実現することができます。


### 本番環境の構築
 - サービスを公開するには、自分でサーバを立てるか、ホスティングサービスを利用する必要が有ります。HerokuやSqaleが手軽でおすすめです。自分でサーバ設定したい場合はさくらVPSで公開してみるとよいでしょう。

[ドットインストールによるさくらVPS入門](http://dotinstall.com/lessons/basic_sakura_vps)
[heroku](https://www.heroku.com/)
[sqale](http://sqale.jp/)

## 私のサービス開発履歴
2014/11 リリース [自己分析サービス](http://riarume.jp/)
2015/04 - 2015/09 開発　[認知療法サービス](http://think-log.herokuapp.com/)
2016/05 リリース　[エンジニアマッチングポータルサイト](https://coderstable.com)
Mac(El Captain)にpython3系インストール

# 環境

OS X El Capitan(10.11.5)
HomeBrewインストール済み

# pyenvインストール

デフォルトでpython2が入っているが、バージョン切り替えを管理したいのでpyenv(rubyでいうrbenv)をインストール

```
$ brew install pyenv
```

パスの設定

```
$ export PYENV_ROOT="$HOME/.pyenv"
$ export PATH="$PYENV_ROOT/bin:$PATH"
$ eval "$(pyenv init -)"
```

インストールできるpythonのバージョンを確認

```
$ pyenv install --list
```

# pythonインストール

最新のpython3.5.1をインストール

```
$ pyenv install 3.5.1
```

エラー。。。

```
Downloading Python-3.5.1.tgz...
-> https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
Installing Python-3.5.1...

BUILD FAILED (OS X 10.11.5 using python-build 20160130)

Inspect or clean up the working tree at /var/folders/cc/yzctrdxs00s81p18dssxqhpw0000gn/T/python-build.20160605231006.7256
Results logged to /var/folders/cc/yzctrdxs00s81p18dssxqhpw0000gn/T/python-build.20160605231006.7256.log

Last 10 log lines:
  File "/private/var/folders/cc/yzctrdxs00s81p18dssxqhpw0000gn/T/python-build.20160605231006.7256/Python-3.5.1/Lib/ensurepip/__main__.py", line 4, in <module>
    ensurepip._main()
  File "/private/var/folders/cc/yzctrdxs00s81p18dssxqhpw0000gn/T/python-build.20160605231006.7256/Python-3.5.1/Lib/ensurepip/__init__.py", line 209, in _main
    default_pip=args.default_pip,
  File "/private/var/folders/cc/yzctrdxs00s81p18dssxqhpw0000gn/T/python-build.20160605231006.7256/Python-3.5.1/Lib/ensurepip/__init__.py", line 116, in bootstrap
    _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/private/var/folders/cc/yzctrdxs00s81p18dssxqhpw0000gn/T/python-build.20160605231006.7256/Python-3.5.1/Lib/ensurepip/__init__.py", line 40, in _run_pip
    import pip
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
```

OSアップデートしていると、XCode command line toolsが必要だったらしい（[https://github.com/yyuu/pyenv/wiki](https://github.com/yyuu/pyenv/wiki/Common-build-problems#build-failed-error-the-python-zlib-extension-was-not-compiled-missing-the-zlib)）

```
$ xcode-select --install
xcode-select: note: install requested for command line developer tools
```

改めてpython3.5.1をインストール

```
$ pyenv install 3.5.1
```

バージョンを確認

```
$ pyenv versions
* system (set by /Users/32mashamasha/.pyenv/version)
  3.5.1
```

インストールできた( ´ ▽ ` )ﾉ
WindowsからMacへ移行したユーザにオススメ！同一アプリ内での画面移動ショートカット

Mac OSの`Command+Tab`で、同一アプリ内に複数の画面がある場合に切り替えができなく不便に感じたことはないでしょうか？

Macでも``Command+` ``を入力することで、同一アプリ内でのウィンドウ切り替えが可能ですが、このショートカットを`Alt+Tab`に変更するのがオススメです。(画像の"次のウインドウを操作対象にする"の項目)

![Screen Shot 2016-06-05 at 23.08.27.png](https://qiita-image-store.s3.amazonaws.com/0/27027/29a6ed1e-c29d-fa96-6de7-fdd06c1375a9.png)

CommandキーとAltキーは隣接していること、WindowsからMacに移行した方は同じキーのショートカットで移動できて馴染みやすいことがオススメの理由です。

このショートカットはFinder、Excel、Sketch、PowerPoint、Keynote、XCode、Android Studio、Atom等々どこでも共通に使うことが可能です。
例えば、Chromeでログアウト状態をテストするためにシークレットモードを利用して、他の作業は通常モードで行いたい場合に、両モードのウィンドウを共存させることが容易になります。

トラックパッドの操作でMission Control(ミッションコントロール)を利用して切り替えるのも便利ではありますが、こちらのショートカットも是非お試し下さい。
Golangで.envのデータをビルド後のバイナリに含めるgo-binenv

## インストール

```console
$ go get -u github.com/jteeuwen/go-bindata/...
$ go get github.com/kazuph/go-binenv
```

## 使い方

いつものように `.env` をセットします。

```console
$ cat .env
DATA="This is Data"
```

go-bindataを実行してください。bindata.goというファイルが生成され、`Asset`というメソッドを使って、静的なファイルを取得可能になります。

```console
$ go-bindata .env
```

あとはgo-binenvを使って`.env`に入れたデータを取得できるようにします。

```go
package main

import (
	"fmt"
	"github.com/kazuph/go-binenv"
)

func main() {
	env, err := binenv.Load(Asset)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Printf("%#v\n", env)
	fmt.Printf("%s", env["DATA"])
}
```

実際に試してみましょう。

```console
$ cd test-binenv
$ go build
$ mv test-binenv /tmp
$ cd /tmp
$ ./test-binenv
map[string]string{"DATA":"This is Data"}
This is Data
```

`.env`が設置されてない場所でもちゃんと変数を読み込めました。

gitignoreするのも忘れずに。

```console
$ cat <<EOF >>| .gitignore
.env
bindata.go
EOF
```
Dockerfile ARG入門

## [Dockerfile ARG](https://docs.docker.com/engine/reference/builder/#arg)

Dockerfileには、 `ARG` という定義命令があります。これは、dockerfile内で使用できる変数で、変数の値によって生成するイメージの中身を変えることができます。

環境変数であるENVとは異なり、`Dockerfile` 内でのみこの変数を使用することができます。
変数が使用できる定義命令は、`ADD`, `COPY`, `WORKDIR`, `RUN`, `USER`, `ENV` などで使えることが確認できました。
この変数は、シェルスクリプトの変数と同じように扱うことが出来ます。

## 基本的な使い方

```Dockerfile
FROM busybox
ARG hoge
RUN echo $hoge
```

```sh:/bin/bash
docker build ./ --build-arg hoge=hello
```

出力結果に `echo` の出力として `hello` が表示されると思います。

## デフォルト値
`Dockerfile`内でARGを使用する際に、デフォルト値を使用することができます。 `--build-arg` で変数が定義されていない場合は、デフォルト値が使用されます。

```Dockerfile
FROM busybox
ARG hoge="world"
RUN echo $hoge
```

また、デフォルト値は実際に変数を使用する場合にも指定可能です。

```Dockerfile
FROM busybox
ARG user
USER ${user:-some_user}
```


## docker-compose v2 で [args](https://docs.docker.com/compose/compose-file/#args) を使用する
docker-compose の v2 より、 `args` を使用できるようになりました。
`--build-arg` と同様に使用することが出来ます。実際の運用ではこちらを使うことが多いと思います。

```docker-compose.yml
version: '2'
services:
  busybox:
    build: 
      context: ./busybox/
      args:
        hoge: "hello world"
```  

このように書くことも可能です。

```docker-compose.yml
version: '2'
services:
  busybox:
    build:
      args:
        - buildno=1
        - user=someuser
```

## 出来ること
ARGによって生成されるイメージの中身を変えることができるため、ひとつの `Dockerfile` で出来ることが広がります。

### entrypoint を切り替える
たとえば、master や slave によってentrypointの挙動を切り替える必要がある場合は、ファイル名のsuffixにARGを使用することで切り替えることができます。

```Dockerfile
ARG arg
COPY entrypoint_${arg} /entrypoint.sh
```

### wget時のバージョン指定

バージョンアップ時などは、バージョンが冗長になってしまい、管理がし辛いですが、
ARGを使うととても綺麗にかけます。

```Dockerfile
ARG ver
RUN wget http://example.com/hoge-${ver}.tar.gz
RUN tar xzvf hoge-${ver}.tar.gz
WORKDIR hoge-${ver}
RUN ./configure
RUN make
RUN make install
```

### sed
テンプレートエンジンのようなことをsedで実現

```Dockerfile
ARG arg="test"
COPY hoge.sh hoge.sh
RUN sed -i -e "s/{{arg}}/${arg}/g" hoge.sh
```

### envsubst
envsubstを使って変数を展開することも可能です。
envsubst で 展開したい変数を指定するタイミングで展開されてしまうと困るので `\$mode` のようにすると良いです。

```Dockerfile
RUN apt-get install -y gettext
RUN cat /bin/entrypoint.sh | envsubst "\$mode" > /bin/entrypoint.tmp.sh
RUN mv /bin/entrypoint.tmp.sh /bin/entrypoint.sh
```

## ENVとの使い分け
`ENV`では、コンテナ内で環境変数として変数が定義されます。 `ARG` は、 Dockerfileのbuild時に一時的に変数が定義され、コマンドの実行時に展開されます。`ENV`を使用する場合は、`CMD`や`ENTRYPOINT`によって実行されたコマンドに適しており、`ARG`は、変数を展開した状態でコンテナ内にファイルを配置したい場合に有効です。

`ARG`は変数を展開した状態でコンテナに状態を設定するという特性から、コンテナが管理するファイルには有効ですが、 `VOLUME`によって管理されているディレクトリに配置されているファイルに対しては`ENV`を使ったほうが便利な場面が多いです。


## 関連
- [docker build --build-argするときのDockerfileにご注意 - Qiita](http://qiita.com/bohebohechan/items/4064153aad47b2381f1e)
バックグラウンドサービスからDependencyServiceを使ってはいけない

<font color="red">2017/01/18 内容更新しました。</font>

はまったのでメモ

正しくはXamarin.Forms.Init()を呼ぶ前に使ってはいけない。
Init()を呼ばないで使用すると下記の例外が発生する。

System.InvalidOperationException: You MUST call Xamarin.Forms.Init(); prior to using it.

DependencyServiceは上記の初期化処理が呼ばれて初めて使える機能となる。
そしてXamarin.Forms.Init()はMainActivityのOnCreate()で呼ぶので、
本体が落ちた後に起動して動かすようなバックグラウンドサービスでは
MainActivityを利用しないので使えないということになる。

んじゃあInit()呼べばいいと思ったけど引数の1つ目がActivityとなる為、
サービスから呼べなくて困っていろいろ調べましたが、
そもそもサービスからDependencyServiceを使う必要が無いことに気がつきました。
なぜならサービスはXamarin.Android側のコードとなるので、
わざわざDependencyServiceを返さなくても同じ処理が出来るからです。

今回はDependencyServiceの例をだしましたが、
MainActivityを通らないで起動されるバックグラウンド処理では
その他の初期化処理なども通っていない可能性があるので注意が必要です。

## 2017/01/18 更新 どうしてもバックグラウンドから使いたい場合
上記のように直接DependencyServiceの実装クラスを呼び出すことが可能な場合は問題ないのですが、
PCL側の共通処理として実装している処理内部でDependencyServiceを利用している場合でPCL側からもバックグラウンドサービス側からも呼び出される可能性がある場合は困ってしまいます

その場合はAndroid側のDependencyServiceの実装クラスのインスタンスをAndroid側のサービス等からPCL側に設定してあげることでPCL側からAndroid側の実装クラスを呼び出すことが可能です。
以下サンプルコードです。

Appクラスに使いたいDependencyServiceのインスタンスを公開します。

```
public partial class App : PrismApplication
{
    /// <summary>各プラットフォームのXamarin.Forms.Forms.IsInitialized</summary>
    public static bool IsPlatformInitialized { get; set; }

    private static IHogeService _hogeService;
    public static IHogeService HogeService
    {
        get
        {
            if (_hogeService== null)
            {
                if (IsPlatformInitialized)
                {
                    _hogeService= DependencyService.Get<IHogeService>();
                }
            }
            return _hogeService;
        }
        set { _hogeService= value; }
    }
}
```

Xamarin.Android側のMainActivityでInitを呼び出した後でフラグを更新します。

```
    global::Xamarin.Forms.Forms.Init(this, bundle);
    App.IsPlatformInitialized = Xamarin.Forms.Forms.IsInitialized;
```

バックグラウンドサービスの初期化コードでAndroid側のクラスのインスタンスを設定します。

```
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
    App.HogeService = new HogeService();

    /* 省略 */
}
```
Heroku Private Spacesで気をつけること

最近、Heroku Private Spacesを利用するプロジェクトに関わりました。
Private SpacesについてはあまりQiitaとかに記事が無かったので、最近得た気づきを少しまとめてみました。

## Private Spacesとは？
Herokuを顧客ごとに分離されたプライベートクラウドで展開するサービスです。
Amazon VPC上で動作してるらしいです。東京リージョンが選択できる為、レイテンシー向上が見込めます。
Heroku Enterpriseを利用している企業が契約できます。

## Heroku Enterpriseとは？
Herokuの企業向け契約です。
これを契約するとヘルプで日本語の担当者が答えてくれたり、開発者の権限を細かく制御できたり
更にPrivate Spacesが契約できるので日本リージョンが選択できたりします。

あとEnterpriseは年間契約です。
その為か、Dynoやアドオンの利用が一時的に少し契約を超えてしまっても・・・らしいです。
目に余るようだと多分営業さんが相談きますが。

## Dyno数がPremiunとPrivateで微妙に違う

> Heroku Enterprise Available dyno types
> https://devcenter.heroku.com/articles/heroku-enterprise#available-dyno-types

契約前にPrivateの契約は大体Premiunと同じだと聞いていたのですが、
蓋を空けてみるとDyno数がMプランでも8と10で違いました。

契約はプランじゃなくてDyno数での契約になるので要注意です。

| Dyno Type     | Memory(RAM) | CPU Share | Dedicated | Private Space | Compute | Dyno units consumed |
|:--------------|:------------|:----------|:----------|:--------------|:--------|:--------------------|
| performance-m | 2.5 GB      | 100%      | yes       | no            | 12x     | **8**               |
| performance-l | 14 GB       | 100%      | yes       | no            | 50x     | **16**              |
| private-m     | 2.5 GB      | 100%      | yes       | yes           | 14x     | **10**              |
| private-l     | 14 GB       | 100%      | yes       | yes           | 52x     | **20**              |

## 使えないアドオンがたまにある

DevCenterのアドオン紹介ページに「Region Availability」というセクションが最近追加されたので、
どのアドオンが使えるのかわかるようになりました。
（このセクションができるまではサポートに1つ1つ確認していました・・・）

例えばメール配信アドオンの[SendGrid](https://elements.heroku.com/addons/sendgrid)を例にあげると、
「AVAILABLE」（Private Spaces利用可否）は全てのリージョンでOK、
「INSTALLABLE IN SPACE」（Private Spaces内にアドオンが置けるか）はNGです。

AVAILABLEについてはメジャーなアドオンは対応しているようですが、例えば
SendGridと同様にメール配信のアドオンである[Mailgun](https://elements.heroku.com/addons/mailgun)はPrivate Spaces非対応でした。

INSTALLABLE IN SPACEがNGの場合は、アドオン自体はPrivate Spaces外（USかEU?）で動作するようです。
今のところ、INSTALLABLE IN SPACEがOKなのは、Heroku PostgresとHeroku Redisぐらいです。

## *.herokuapp.comでhttps接続ができない

SSL接続の為には独自ドメインを立てる必要があります。
なお通常はSSLの設定にSSL Endpointが必要なのですが、Private Spacesの場合は不要です。

## メンテナンスモードが使えない

本番環境のデータベースをアップグレードする際などに使いたいメンテナンスモードなのですが、
Private Spacesでは現在動作しないようです。

ダッシュボードを見るとメンテナンスモードに切替えるUI自体はあるのですが、
現在のところハリボテのようです。
Gitのメモ(Windows版 インストールまで)

#最初に
最近流行りのGitHubを触ってみたかったので、本を買ってやってましたが、最初全く理解できなかったので自分用のメモ帳としてここに残しときます。
なんでGitHubを使う理由とかメリットなどの話は他の人を参考にしてください。
またWindowsでの使い方ですので、MacやLinuxはわかりません、ごめんなさい。


# 使用した開発環境
windows10 Home 64bit を使用しました。

# Gitのインストール
1．現在(2016/06)では、[git for Windows](https://git-for-windows.github.io/)というサイトからダウンロードできます。サイトのdownloadボタンを押すと64bitか32bitかは勝手に判断してくれるはずです。(選ぶ操作がなかった)
2．ダウンロードが完了すると、ダウンロードした実行形式ファイル(.exe)を実行してインストールしていきます。英語だらけでわからんという人は、以下の通りで大丈夫です。
3．上部に太字で"Select Components"と書かれているコンポーネントの選択画面では、何も変更しないでNextボタンを押下して下さい。
4．次に上部に太字で"Adjusting your PATH environment"と書かれた環境変数の設定画面に移ります。そこではGit Bashというプロンプトのみを使用する場合は一番上の「Use Git Bash only」を選択してNextボタンを押下してください。
5．次に上部に太字で"Configuring the line ending conversions"と書かれた改行コードの変換画面に移ります。そこでは、GitHubではMacやLinuxで使用されているLF(Line Feed)で改行が行われています。WindowsはCRLF(Carriage Return + Line Feed)で改行するのでGitが自動変換を行ってくれる設定があるのでその設定である「Checkout Windows-style,commit Unix-style line endings」を選択してください。
6．これで無事にアプリケーションに「Git Bash」が追加されていると思うので、起動してください。するとコマンドプロンプト風のCLI(command line interface)が立ち上がると思うので、そこから初期設定を行うのですが、これは次回書いていきたいと思います。

#注意点
この通りにインストールを行った場合、Windowsに付属してあるコマンドプロンプトではなく、Git Bashからでないとgitコマンドを使用できません。
macのpython3.4にpygameをインストール

* 事前にpyenv、virtualenv、Homebrew、pipをインストールしておく。  

```
pyenv install 3.4.0  
pyenv virtualenv 3.4.0 pygame
pyenv local pygame
brew install mercurial  
brew install sdl 
pip3 install hg+http://bitbucket.org/pygame/pygame
```
その後、ipython等でimport出来るか確認。

```
In [1]: import pygame

In [2]: 

```
エラーなし。
VirtualBox で Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter' が出た時の対処

VirtualBox で表題のエラーが出て困った。ググったところ直し方が書いてあったものの、自分の場合、もうひと手間が必要だったのでメモ。なお、Win10 64bit環境です。

## エラー内容

```
Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter' (VERR_INTNET_FLT_IF_NOT_FOUND).
Failed to attach the network LUN (VERR_INTNET_FLT_IF_NOT_FOUND).
```

## 直し方
1. "ネットワークと共有センター" を開く
2. "アダプターの設定の変更" を開く
3. "VirtualBox Host-Only Network #N" のプロパティを開く
4. "VirtualBox NDIS6 Bridged Networking Driver" にチェックを入れる
5. "インターネットプロトコル バージョン6(TCP/IPv6)" のチェックを外す
6. [OK] を押し、プロパティウィンドウを閉じる
7. "VirtualBox Host-Only Network #N" の右クリックメニューで「無効」にする
8. 再度、「有効」にし直す

<img width="316" alt="vbox_error.png" src="https://qiita-image-store.s3.amazonaws.com/0/128323/89a74d42-909c-1a7e-a50d-6b54b870ea35.png">

以上です。
ドラッカーを通じて、プログラムを書かずに仕事効率の向上を図る

※ 本記事にはプログラミングのことは一切出てきませんが、プログラムを書く仕事が知識労働である限り、あなたの役に立つかも知れません

内容はドラッカーの「テクノロジストの条件」の一部抜粋です。
著作権的にギリギリなんで、ダメって言われたら消します。

ドラッカー曰く、知識労働者の生産性を向上させるのは以下の６つの項目である。
以下、p.80 :知識労働者の生産性についての項目を引用 ---
>1. 仕事の目的を考える
- 働くもの自身が生産性向上の責任を担う。みずからをマネジメントする。自律性をもつ。
- 継続してイノベーションを行う
- みずから継続して学び、人に教える。
- 知識労働の生産性は量よりも質の問題であることを認識する。
- 知識労働者は、組織にとってコストではなく資本財であることを理解する

以下に、各項目の自分の所感を自分の視点でつらつら書いていきます。

###1.仕事の目的を考える

悪いケースとして、目的や仕様や要求を完全に把握できてないがために無駄なものを作ってしまうケースがある。
顧客が説明した要件と顧客が本当に必要だったものを理解しておけば、余計なコードを書く必要などなかったのである。
![e0131715_23411664.jpg](https://qiita-image-store.s3.amazonaws.com/0/78088/d9c47d04-bced-b3f3-3522-b15920b3d650.jpeg "e0131715_23411664.jpg")

逆を言うなら、良い管理の元であれば、上記のケースなら８倍以上の成果を上げることができる（かもしれない

更に、目的の向かう先が重要。それがモチベーションにもなる。
利益を上げるのと同じくらい事業が社会へ貢献していることは大事。

###2.働くもの自身が生産性向上の責任を担う。みずからをマネジメントする。自律性をもつ。
自分の仕事が上手くいったり、褒められたりしたときは嬉しいものです。
その仕事が自分発信だったらなおのこと嬉しくなるでしょう。

生産性の向上が無いために、鬱になる人もいます。エクセルの計算結果を電卓で確認するなど、その際たるものだと言えるでしょう。

調べてみたら、穴を掘らせて、埋めさせる労働を繰り返す拷問のこと「シーシュポスの労働」というらしいです。
![0b6c9715f232a1aaa2cb2b13c2d5b6fb-267x300.jpg](https://qiita-image-store.s3.amazonaws.com/0/78088/e715cf1c-75fc-0a37-e8a3-7387573f529b.jpeg "0b6c9715f232a1aaa2cb2b13c2d5b6fb-267x300.jpg")
岩を頂上まで持っていくシーシュポスくん

労働をさせられた後に、その労働の過程も成果も全て否定される苦役などをさします。
囚人に穴を掘らせ、囚人の目の前で看守がその穴を埋め、さらに囚人に穴を掘らせた後に看守が穴を埋めることで囚人が自殺するよう仕向ける、という刑罰が第二次世界大戦中のナチスドイツにあったとされます。

下手すれば命にかかわる問題です。積極的に生産性を上げていきましょう。
~~（てゆうか、日本の労働について語っているのになんでナチスの拷問の話になった~~

###3.継続してイノベーションを行う
上の項目から若干継承するが、目標をイノベーションの成功に設定し、それが達成されたかを見ることが高い動機付けにつながる。
別の本では、
>目標管理の最大の利点は、自らの仕事ぶりをマネジメントできることである。
自己管理は強い動機づけをもたらす。適当にこなすのではなく、最前を尽くす願望を起こさせる。
~~中略〜〜
それらの情報は、かれら自身に伝えるべきであって上司に伝えるべきではない。情報は、自己管理のための道具であって、上司が部下を管理するための道具ではない。

とある。

###4.みずから継続して学び、人に教える。
今書いているこれがそうです。人に教えることは教わることでもある。
（さっきのシーシュポスとか全く知らんかったし

###5.知識労働の生産性は量よりも質の問題であることを認識する。
これはわりと、認識されていると思う。
プログラマの三大美徳は 「怠惰」 「短気」「傲慢」 と言う言葉にも通じるかと。
極論を言えば、プログラムが同じ動作をするなら１０００行のコードで実装するよりも１行で終了する方が断然良い。
一度だけですが、まともに書いたら４、５時間くらいかかりそうなのをたった1行で終わらせることができました。
実際にそうゆう場面もあるってことです。

###6.知識労働者は、組織にとってコストではなく資本財であることを理解する
ドラッカーは別の本で「従業員はコストではなく資源だ」と言っている。
人を負債とせず、人を中心に考える。
どのような資本でも同じですが、人も同じです。
人として大切に扱われたら、そりゃあそれに応えたくなりますよね。

----

長々と書いてしまいましたが、以上となります。
ここまで読んでくれた方がいたらありがとうございます。
上に書いたことが、誰かの役に立てば幸いです。
goでAssetsをgo-bindataでバイナリ含むようにするとnet/httpなどで404なファイルを参照するときでも500が出てしまう問題を修正 ＋ ディレクトリを参照するとファイルリストが見えてしまう問題を修正

https://github.com/kazuph/go-bindata/commit/ff511952d3a4a05d76126fbfb556ab324bf6b5d7

他の人がすでにやってくれているPRが全然マージされている気配がなかったので、自分用につくりました。

```diff
diff --git a/go-bindata/main.go b/go-bindata/main.go
index 503a059..c5889b3 100644
--- a/go-bindata/main.go
+++ b/go-bindata/main.go
@@ -12,7 +12,7 @@ import (
 	"regexp"
 	"strings"
 
-	"github.com/jteeuwen/go-bindata"
+	"github.com/kazuph/go-bindata"
 )
 
 func main() {
diff --git a/toc.go b/toc.go
index 9ec410b..9ea6320 100644
--- a/toc.go
+++ b/toc.go
@@ -93,39 +93,9 @@ var _bintree = `)
 }
 
 func writeTOCTree(w io.Writer, toc []Asset) error {
-	_, err := fmt.Fprintf(w, `// AssetDir returns the file names below a certain
-// directory embedded in the file by go-bindata.
-// For example if you run go-bindata on data/... and data contains the
-// following hierarchy:
-//     data/
-//       foo.txt
-//       img/
-//         a.png
-//         b.png
-// then AssetDir("data") would return []string{"foo.txt", "img"}
-// AssetDir("data/img") would return []string{"a.png", "b.png"}
-// AssetDir("foo.txt") and AssetDir("notexist") would return an error
-// AssetDir("") will return []string{"data"}.
+	_, err := fmt.Fprintf(w, `// AssetDir returns only err
 func AssetDir(name string) ([]string, error) {
-	node := _bintree
-	if len(name) != 0 {
-		cannonicalName := strings.Replace(name, "\\", "/", -1)
-		pathList := strings.Split(cannonicalName, "/")
-		for _, p := range pathList {
-			node = node.Children[p]
-			if node == nil {
-				return nil, fmt.Errorf("Asset %%s not found", name)
-			}
-		}
-	}
-	if node.Func != nil {
-		return nil, fmt.Errorf("Asset %%s not found", name)
-	}
-	rv := make([]string, 0, len(node.Children))
-	for childName := range node.Children {
-		rv = append(rv, childName)
-	}
-	return rv, nil
+	return nil,  &os.PathError{Op: "open",  Path: name,  Err: os.ErrNotExist}
 }
 
 `)
@@ -171,7 +141,7 @@ func Asset(name string) ([]byte, error) {
 		}
 		return a.bytes, nil
 	}
-	return nil, fmt.Errorf("Asset %%s not found", name)
+	return nil, &os.PathError{Op: "open", Path: name, Err: os.ErrNotExist}
 }
 
 // MustAsset is like Asset but panics when Asset would return an error.
@@ -197,7 +167,7 @@ func AssetInfo(name string) (os.FileInfo, error) {
 		}
 		return a.info, nil
 	}
-	return nil, fmt.Errorf("AssetInfo %%s not found", name)
+	return nil, &os.PathError{Op: "open", Path: name, Err: os.ErrNotExist}
 }
 
 // AssetNames returns the names of the assets.
```

使う方法は以下のようにこちらのリポジトリを選んでもらえれば。

```shell-session
$ go get github.com/kazuph/go-bindata/...
$ go get github.com/elazarl/go-bindata-assetfs/...
$ go-bindata-assetfs templates/... public/...
```

として、

```go
http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(assetFS())))
```
めざせpythonライブラリマスター （41）asciimatics

#【ライブラリ説明】
　ASCIIアニメーション作成

#【プログラム】
```py:asciimatics.py
# -*- coding: utf-8 -*-

from asciimatics.effects import Cycle, Stars
from asciimatics.renderers import FigletText
from asciimatics.scene import Scene
from asciimatics.screen import Screen

def demo(screen):
    effects = [
        Cycle(
            screen,
            FigletText("From", font='big'),
            int(screen.height / 2 - 8)),
        Cycle(
            screen,
            FigletText("Q i i t a", font='big'),
            int(screen.height / 2 + 3)),
        Stars(screen, 200)
    ]
    screen.play([Scene(effects, 500)])

Screen.wrapper(demo)
```

#【結果】
<blockquote class="twitter-video" data-lang="ja"><p lang="und" dir="ltr"><a href="https://t.co/GIH0bUCRpt">pic.twitter.com/GIH0bUCRpt</a></p>&mdash; nobu (@AlgebraNobu) <a href="https://twitter.com/AlgebraNobu/status/739438128201506817">2016年6月5日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/asciimatics/1.5.0.post1)
　[github](https://github.com/peterbrittain/asciimatics)
Windowsバッチを使って、フォルダ構成をtree状に取得してみた

#この記事を書いた理由
修正対象のソースがどこにあるかをざっと見るために、今まではファイルパスをエクセルに転記していたけど、[tree](http://www.k-tanaka.net/cmd/tree.php)コマンドを知ってからはそんな必要は無くなった。

とはいっても、コマンドプロンプトを開いて、treeコマンドを発行するのも手間なので、Windowsバッチを叩くだけで、フォルダ構成を取得出来るようにしてみた。

#ソース
ソースはこんな感じ。

```
@echo off

rem 指定フォルダの配下の構成をtree状に取得し、出力するプログラム


rem tree取得対象のパス
set treePath="任意のフォルダパス"
rem 出力対象のパス
set outputPath="任意のフォルダパス"
rem 出力するファイル名称
set fileName="任意のファイル名.txt"

echo プログラムを実行します。
echo 止めたい場合はコマンドプロンプトを閉じてください。

rem 一時停止
pause

rem 画面メッセージのクリア
cls

rem treeコマンドを実行
tree /f %treePath% > %outputPath%\%fileName%

echo 出力場所は%outputPath%です。
echo プログラムが終了しました。


pause
exit
```

#使い方
これをテキストエディタに張り付けて、ファイル名は適当につけて、拡張子をbatに直せば、Windowsバッチの出来上がり。後はダブルクリックでいつでもどこでも実行可能。

使うときはソースのtreePath,outputPath,fileNameの設定にご注意を!