OmniAICreator/Qiita-1.07M huggingface dataset:
GitHubのDownload ZIPボタンを書き換えてtar.gzをダウンロードする

### はじめに
GitHubには、tar.gzでダウンロードできるurlが存在します。

* [githubのリポジトリをwgetでだけで取得したい時](http://qiita.com/kazuph/items/73c2eea6e82896bda58c) これです。

が、しかし。ブラウザでの閲覧時にはそのボタンはありません。

### よし、`[DOWNLOAD ZIP]` を書き換えてしまえ

```js:bookmarklet
javascript: $('a[data-ga-click="Repository, download zip, location:repo overview"]').each((i,a) => { a.innerHTML = "Download TARBALL"; a.href=a.href.replace(/.zip$/, '.tar.gz'); a.setAttribute('data-ga-click', a.getAttribute('data-ga-click').replace(/zip/, 'tar.gz'))})
```

```js:生コード
$('a[data-ga-click="Repository, download zip, location:repo overview"]').each(
  (i,a) => {
    a.innerHTML = "Download TARBALL";
    a.href = a.href.replace(/.zip$/, '.tar.gz');
    a.setAttribute('data-ga-click',
      a.getAttribute('data-ga-click').replace(/zip/, 'tar.gz'))})
```

押すと`[DOWNLOAD ZIP]`が`[DOWNLOAD TARBALL]`になります。

以上です。

### ツッコミどころ
* わざわざボタンを書き換えずにそのままダウンロードさせればいいのでは
* どうせやるなら HTTPS/SSH みたいな切り替えボタンにできないか？
* **そもそもブラウザから見てるときにtar.gzで欲しくなる事ってあるの？**
UTF-8で書かれたファイルについて、EUC-JPやShift_JISで扱えない文字を検出する

# はじめに

これは、もともと[2013年3月19日に書いたコード](https://gist.github.com/maraigue/5194769 "Unicode(UTF-8でもUTF-16でも)のファイルを与えて、その中にあるEUC-JPで扱えない文字を検出するためのスクリプト")がまた欲しくなったため、備忘的にQiitaに持ってきたものです。

# 方法

コマンドラインで[nkf](https://osdn.jp/projects/nkf/ "nkf Network Kanji Filter プロジェクト日本語トップページ - OSDN")が利用可能という前提で説明します。

```bash:EUC-JPで扱えない文字を検出する場合
# bashなどの場合
nkf -e --no-best-fit-chars --fb-perl FILENAME | grep -n '\\x{[0-9]\+}'

# コマンドプロンプトの場合
nkf -e --no-best-fit-chars --fb-perl FILENAME | grep -n "\\x{[0-9]\+}"
```

```bash:Shift_JISで扱えない文字を検出する場合
# bashなどの場合
nkf -s --no-best-fit-chars --fb-perl FILENAME | grep -n '\\x{[0-9]\+}'

# コマンドプロンプトの場合
nkf -s --no-best-fit-chars --fb-perl FILENAME | grep -n "\\x{[0-9]\+}"
```

例えば、

```
がんばれ♥がんばれ♥
がんばれ★
```
というファイルにこのコマンドを使うと（♥はEUC-JPやShift_JISで扱えないが、★は扱える）、
```
1:がんばれ\x{2665}がんばれ\x{2665}
```
となり、1行目に扱えない文字があると表示してくれる（表示結果の「1:」が「1行目」を意味する）。

# 解説

- 「--no-best-fit-chars」は、変換してから戻せないような文字がある場合に、それを変換しないことを意味する。
- 「--fb-perl」は、変換できない文字をPerl形式「\x{0000}」で表示する。

これによって、EUC-JPやShift_JISで扱えない文字をPerl形式で表示している。

また、grepのオプションで「-n」を指定すると、合致した行を表示する際に行番号を付与する。

# あとで調べておきたい

日本語以外の文字コードについても同様のことができないか調べる（この方法はnkfに完全に依存しているので）。例えば、Shift_JISで書かれたファイルについてUS-ASCIIで扱えない文字を検出する、とか。iconvを使うことになるだろうか。
ecto以外の選択肢、SqlDustが登場したようです

githubにてelixirのORM、SqlDustというのが公開されていたので、早速入れてみました。

# 公式github

https://github.com/archan937/sql_dust

簡単でシンプルでパワフルらしいっす！

# 導入

**利用にはelixir1.2以上が必要なようなので、ご注意を！**

mix.exsに以下を追記

```ex:mix.exs
# 実際にはapplicationsに色々記述があると思うので、末尾に追記
def application do
  applications: [:sql_dust]
end

# 実際には。。。
def deps do
  [{:sql_dust, "~> 0.0.1"}]
end
```

そしてインストール

```bash
$ mix deps.get
$ mix install
```

 設定は特にない様子


# 試してみる

取りあえず対話形式で試す

こんな感じのテーブルからデータを取ってみます

|id|name|
|:--:|:------|
|1|hogehoge|
|2|hugahuga|

では早速

```bash
$ iex -S mix phoenix.server
> IO.puts SqlDust.from("users", %{select: ~w(id name)}
SELECT `u`.id, `u`.name
FROM users `u`

:ok
> options = %{
>   select: "*",
>   where: ["id = 1"]
> }
> IO.puts SqlDust.from("users", options)
SELECT *
FROM users `u`
WHERE (`u`.id = 1)

:ok
```

こんな感じでSQLが出力されました！

あれ、ドキュメント見る限り今のところSQLを構築するところまでしかない、、、のか？？
今後に期待ですかね！
Subversion構築でつまった

残念ながらGitではなくSubversionが採用になったので、
Subversionサーバを構築しようとしたのだが、つまったのでメモ。

設定してURLにアクセスすると、

```
Could not open the requested SVN filesystem
```

というエラーがXMLで返される。

なかなか解決しなかったが、権限のミスだった模様。

ユーザディレクトリの下にリポジトリを作成していたのだが、
ユーザディレクトリの権限が700だったためにapacheユーザが参照できなかったようだ。
ユーザディレクトリの権限を一度755にしてみるとアクセスできたため、それは戻して、
別にsvn用のユーザディレクトリを作成しオーナーをapacheユーザにするとすんなりリポジトリが表示された。


GitBucketなら構築済みなんだけどなぁ。構築簡単だし。
Elixir1.2にする（on ubuntu）

Elixirを1.2にしてみようと思ったんですが、当然まだリポジトリには追加されていないので、ソースからコンパイルした手順です。

# 手順

まずapt-getで入れてたelixirを消します

```bash
$ apt-get remove elixir
```

つづいて、適当な場所にelixirのソースコードをcloneしてmake

```bash
$ git clone https://github.com/elixir-lang/elixir.git

$ cd elixir

$ git checkout v1.2

$ make clean test

$ sudo make install
```

# 確認

```bash
$ elixir --version
Erlang/OTP 18 [erts-7.2] [source] [64-bit] [smp:2:2] [async-threads:10] [kernel-poll:false]

Elixir 1.2.2
``

1.2になりました！
進捗どうですかを遅ればせながらC#で(LINQ)

[前回](http://qiita.com/tomoki1207/items/f798825e77646a3ec528)不本意にもC#感がなくなってしまったのでリベンジです。
C#といえばLINQが魅力的だと思っているので、LINQで ~~無理やり~~ 挑みます。

```csharp
using System;
using System.Collections.Generic;
using System.Linq;

namespace HowToTheProgressLinq
{
    class Program
    {
        static void Main(string[] args)
        {
            var words = new[] { "進捗", "どう", "です", "か" };
            var needle = string.Concat(words);

            string result = words.InfiniteRandom(new Random()).AggregateUntil(string.Empty, (added, word) => added + word, added => added.EndsWith(needle));
            Console.Write(string.Format(
@"{0} ???
 ＿人人人人人人人＿
 ＞進捗どうですか＜
 ￣Y^Y^Y^Y^Y^Y^Y￣
{1}文字で煽られました",
                result,
                result.Length));
            Console.ReadLine();
        }
    }

    public static class EnumerableEx
    {
        // 要素がランダムに並び続ける無限シーケンスを作成する
        public static IEnumerable<TSource> InfiniteRandom<TSource>(this IEnumerable<TSource> source, Random rand)
        {
            var limit = source.Count();
            while (true)
            {
                yield return source.ElementAt(rand.Next(limit));
            }
        }

        // 条件に一致するまで集計関数を適用する
        public static TAccumulate AggregateUntil<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, bool> predicate)
        {
            TAccumulate result = seed;
            foreach (var element in source)
            {
                result = func(result, element);
                if (predicate(result))
                {
                    break;
                }
            }

            return result;
        }
    }
}
```

はいはい、YAGNI、YAGNI。
VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作るのまとめ

#経緯
1. Windowsでrubyの開発がちゃんとできるようにしたいなーと思った。
2. 最新の環境で構築してみたかった
3. **完全な個人的メモ**

# 注意事項？
- 環境はVirtualBoxを使うので、Macでも基本問題ないはず。
 - 設定がどうかとかは知らんですばい
- 基本全て記述時点の最新版でやります
- 構築する上で『なぜ必要か』とか『それがなんなのか』をほぼ完スルーしているので、気になったら適宜調べてください

#用意する（した）もの
- ネットに繋がってて、適度にスペックのあるPC
- [VirtualBox](https://www.virtualbox.org/)（記述時点最新版：5.0.14）
- [CentOS7](https://www.centos.org/)のISO（release：1511）
- [TeraTerm](https://osdn.jp/projects/ttssh2/)とか[Putty](http://www.chiark.greenend.org.uk/~sgtatham/putty/)とかsshクライアント

#諸々まとめ
1. [VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作る 其の壱](http://qiita.com/daraxuma04/items/88b224158cbd654c52b9)
 - VirtualBoxで作成した仮想環境へのCentOS7インストールする迄
<br>
<br>
2. [VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作る 其の弐](http://qiita.com/daraxuma04/items/c8ff6df6a770aab29e4e)
 - 前回作成した仮想環境について、ホストPCから仮想環境にSSHログインする迄
<br>
<br>
3. [VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作る 其の参](http://qiita.com/daraxuma04/items/97d33f98d8d2a4bfabc2)
 - 仮想環境に、gitとrbenv(ruby)をインストールする迄
<br>
<br>
4. [VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作る 其の四](http://qiita.com/daraxuma04/items/1983a97f44813489c2ba)
 - rails newして、rails serverを起動して、ホスト側ブラウザでアクセスする迄

***
1. [サーバーや仮想環境等とgithubを鍵認証で連携させる](http://qiita.com/daraxuma04/items/bfce12d683d9bd0d2700)
 - githubに繋ぐ
<br>
<br>
2. VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作る おまけ弐（下書き中）
 - RubyMineで開発環境を整える
<br>
<br>
VirtualBox+CentOS7（+Windows）でrubyの開発環境を作る 其の四

#記事の目次
[VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作るのまとめ](http://qiita.com/daraxuma04/items/5fd160a462e48c11a773)

***

#railsをインストールする
- railsをインストール
<pre>
gem install rails
</pre>

- インストール確認
<pre>
rails -v
</pre>
- 最新（2016/02/04時点で『4.2.5.1』）になっていればOK

#rails newでプロジェクトを作る

- どっかにプロジェクトのディレクトリを作る
 - 適当なので、自身のディレクトリ直下に作ってます
<pre>
mkdir [project_name]
cd [project_name]
</pre>
<br />
- そのままだとrails newしてもエラーが出るので、必要なパッケージをインストールする
<pre>
sudo yum -y install sqlite-devel gcc-c++
</pre>
<br />
- railsの新規プロジェクトを作成
<pre>
rails new [project_name]
</pre>
<br />
- rails sでエラーになるためGemfile/therubyracerのコメントを外す
<pre>
vi Gemfile
</pre>
<pre>
…
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby ←これのコメントを外す
…
</pre>
<br />
- bundle installする
<pre>
bundle install
</pre>
<br />
- ホスト側からブラウザでアクセスするため、CentOSのファイアーウォールを停止する
 - **本番はちゃんと設定せなあかんで！**
<pre>
systemctl stop firewalld
</pre>
<br />
- rails serverを立ち上げる
<pre>
bundle exec rails s -b 0.0.0.0
</pre>
<br />
- 問題なく立ち上がったら、ホスト側のブラウザでアクセスしてみる
<pre>
http://192.168.1.xxx:3000/
</pre>
<br />
- コンソールにアクセスログが表示、ブラウザに以下の画面が表示されればOK

***
あとは適当に開発を進めて下さいやせ(´ω｀)
##参考
- rails newでrailsのバージョンを指定する
 - http://qiita.com/jnchito/items/f3bde6e46afbeba8cb82

- CentOS7のファイアーウォールについて
 - http://www.unix-power.net/centos7/firewalld.html
VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作る 其の参

#記事の目次
[VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作るのまとめ](http://qiita.com/daraxuma04/items/5fd160a462e48c11a773)

***

※作業ディレクトリに『/usr/local/src』を使ってますが、どこでも良いかと思います。たぶん。

# yum update
- yumを使い、システムにインストールされているパッケージを更新します
<pre>
sudo yum -y update
</pre>

***
#gitのインストール
yumでもインストールは可能ですが、バージョンが古いので最新版をインストールします。

- gitの最新版を取得するため、yumから一旦gitをインストールします
<pre>
sudo yum -y install git
cd /usr/local/src
sudo git clone git://git.kernel.org/pub/scm/git/git.git
</pre>
<br />
- gitのリポジトリをクローンしたら、yumからインストールしたgitを削除します
<pre>
sudo yum -y remove git
</pre>
<br />
- gitのmakeに必要な各種依存パッケージをインストールします
<pre>
sudo yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker gcc
</pre>
<br />
- gitをインストールします
<pre>
cd git
sudo make prefix=/usr/local all
sudo make prefix=/usr/local install
</pre>
<br />
- インストールしたgitへのパスを通して再読み込み
<pre>
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bash_profile
source ~/.bash_profile
</pre>
<br />
- インストールされているか確認
<pre>
git --version
</pre>
- 最新（2016/02/04時点で『2.7.0.235.g07c314d』）になっていればOK

***
# rbenvのインストール
- 作業ディレクトリにて、rbenvとruby-buildをgithubからクローン
<pre>
cd /usr/local/src
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
</pre>
<br />
- rbenvへのパスを通す
<pre>
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
</pre>
<br />
- インストールされているか確認
<pre>
rbenv --version
</pre>
- 最新（2016/02/04時点で『1.0.0-16-gd6ab394』）になっていればOK

***
# 必要なバージョンのrubyをインストールする

- 必要な依存パッケージを先にインストール
<pre>
sudo yum install -y readline-devel bzip2
</pre>
<br />
- インストールできるrubyのバージョンを確認
<pre>
rbenv install -l
</pre>
<br />
- 今回は2.3.0をインストールします
<pre>
rbenv install 2.3.0
</pre>
<br />
- 時間がかかるのでしばし放置
 - エラーが発生したら、表示された内容（またはログ）を確認しましょう
<br />
<br />
- rbenvのglobalにインストールしたバージョンをセット
<pre>
rbenv global 2.3.0
</pre>
<br />
- インストール確認
<pre>
ruby -v
</pre>
- 指定したバージョンが選択されていればOK

#次の記事
[VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作る 其の四](http://qiita.com/daraxuma04/items/1983a97f44813489c2ba)
VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作る 其の弐

#記事の目次
[VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作るのまとめ](http://qiita.com/daraxuma04/items/5fd160a462e48c11a773)

***
sshクライアントからの接続なんていらねーYO
漢だったらVirtualBoxのCUIで充分だろ！って方は、読み飛ばしてプリーズ

# 仮想環境のネットワーク設定
- 仮想OS起動してログイン画面が表示されたら、rootでログイン
 - アカウントログインでも良いけど、作業的にrootで入った方が楽
<br />
<br />
- ログインできたら、以下コマンド入力で、ネットワーク設定を開く
<pre>
nmtui
</pre>

![VirtualBox_daraxLinux01_03_02_2016_15_56_10.png](https://qiita-image-store.s3.amazonaws.com/0/111728/cd4c6724-1d8a-2bcb-ae21-2242c01107ba.png)

キーボードの上下キー+Enterキーで操作できます
***
- Edit a connectionを選択
![VirtualBox_daraxLinux01_04_02_2016_14_24_54.png](https://qiita-image-store.s3.amazonaws.com/0/111728/1e6fbc15-9ea0-bcce-032f-6a3370426d1a.png)

***
- 其の壱で調べておいた、NATのプロファイルを選択
- IPv6 CONFIGURATIONをAutomatic⇒Ignoreに変更
- Automatically connectの項目にスペースキーでチェックを入れる
- OKを選択

![VirtualBox_daraxLinux01_04_02_2016_14_20_18.png](https://qiita-image-store.s3.amazonaws.com/0/111728/f07db6f6-2f30-f2dd-eea3-a4a8cf80eff4.png)
***
- ネットワークのリストに戻ったら、ホストオンリーネットワーク側のプロファイルを選択
- IPv4 CONFIGURATIONをAutomatic⇒Manualに変更してShowを選択
- 設定画面が開くので、Addresses⇒Addを選択
- 其の壱でメモったIPアドレスを入力して、下3桁の部分を適当に変える。
 - メモったのが192.168.1.1だったので、192.168.1.25/24と入力してます（適当）
- IPv6 CONFIGURATIONをAutomatic⇒Ignoreに変更
- Automatically connectの項目にスペースキーでチェックを入れる
- OKを選択

![VirtualBox_daraxLinux01_04_02_2016_14_19_58.png](https://qiita-image-store.s3.amazonaws.com/0/111728/c83b0eb5-7385-f969-11e5-c5c10deeb9c9.png)
***
- ネットワークリストの画面に戻ってきたら、QuitでCUIの画面に戻る
- 戻ったら以下のコマンドを入力して、ネットワークの再起動をする
<pre>
systemctl restart NetworkManager
</pre>

- 以下コマンドで、ホストオンリーアダプタに指定したIPアドレスが設定されていることを確認
<pre>
ip addr
</pre>

- 確認できたら、仮想環境のCUIからログアウトします

#ホスト側からSSH接続する
- sshクライアントを起動
 - ここではTera Termを使います

- Tera Term起動後、新しい接続先を選択し、ホストに先に仮想側の設定で入力したIPアドレスを指定します
![655a837cf473043edc459a5b24f4deee.png](https://qiita-image-store.s3.amazonaws.com/0/111728/1cad5fbd-e4e6-bd19-7ea9-e9c81db165c5.png)

- OKを選択
- 問題がなければssh認証画面が表示されるので、OSインストール時に作成したユーザー名とパスワードにてログイン

***
ここまででベースのサーバー環境構築ができているので、必要であればスナップショットやエクスポートでイメージを出力しておくと、今後色々な環境を作るうえで便利かもしれません。
（その時にはOSも変わっててどうせ入れ替えるだろうとかそういう悲しい話は別にして）

#次の記事
[VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作る 其の参](http://qiita.com/daraxuma04/items/97d33f98d8d2a4bfabc2)
VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作る 其の壱

#記事の目次
[VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作るのまとめ](http://qiita.com/daraxuma04/items/5fd160a462e48c11a773)

***
#VirtualBoxをインストールする
特に細かい設定は必要ないので割愛。

#VirtualBoxを起動後、新規仮想マシンの作成を行う
- タイプは『Linux』
- バージョンは『Red Hat（64bit）』

##注意
CentOS7には64bit版しかないので、上記設定でないとインストールができません。
（仮想マシンの起動とインストール画面は表示されるけど、選択するとブラックアウトから進まない）
またホストマシンの設定によっては、バージョンに64bitのものが選択できない（項目にない）ことがあります。
その場合はBIOSレベルでCPUの仮想化支援機能が有効になっていない可能性があるので、その機能を有効にします。

###参考
- [BIOS で Intel VT-x と AMD-V の仮想化ハードウェア拡張を有効にする](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/sect-Virtualization-Troubleshooting-Enabling_Intel_VT_and_AMD_V_virtualization_hardware_extensions_in_BIOS.html)


#その他生成仮想マシンの設定
デフォルトでも良いですが、作成者の好みで諸々設定して良いかと思います。
（画像は当方が適当に設定してるだけです）

- 名前：適当
- メモリーサイズ：1024MB
- ハードディスク：仮想ハードディスクの作成を選択
![a3d5380967174407331d86c32409d550.png](https://qiita-image-store.s3.amazonaws.com/0/111728/ceaf896f-f716-1bfe-bdb9-d4d65450f73d.png)

- 作成を選択

***
- ファイルの場所：任意
- ファイルのサイズ：任意
- ハードディスクのタイプ：VDI（VirtualBox Disk Image）
- 物理ハードディスクにあるストレージ：可変
 - ホストのディスクに余裕があるなら固定でも良い

![6690447cdb507d1deb8170a6663c4f67.png](https://qiita-image-store.s3.amazonaws.com/0/111728/6f9d93c5-9c88-b81a-0291-105eef5e5729.png)

- 作成を選択

作成が完了すると、マネージャーに作成した仮想マシンができます。
ダブルクリックで起動しますが、その前に必要なネットワーク設定をします。

#ネットワーク設定
##設定⇒ネットワーク
・アダプター1を有効にして、NATを選択（デフォルトでチェックが入っているならそのままで）
・アダプター2を有効にして、ホストオンリーアダプターを選択
OKを選択して、仮想マシンの設定を閉じる

##ファイル⇒環境設定⇒ネットワーク⇒ホストオンリーネットワーク
VirtualBox Host-Only Ethernet Adapterをダブルクリックして、表示されたIPv4 アドレスをメモる。
メモったら設定画面を閉じて、仮想マシンを起動します。

# 作成した仮想マシンの起動とインストール
起動するとディスクの選択画面が表示されるので、先に用意しておいたCentOS7のISOイメージを選択して起動を選択。
問題がなければ、以下インストール画面が表示されます。
![VirtualBox_daraxLinux01_03_02_2016_15_07_35.png](https://qiita-image-store.s3.amazonaws.com/0/111728/9a740c77-f4ce-8084-f128-63c591bf7777.png)

『Install CenOS 7』を選択すると、つらつらとアルファベットが流れた後に、GUIにてインストールができるようになります。

##インストールする言語を選択
![VirtualBox_daraxLinux01_03_02_2016_15_42_07.png](https://qiita-image-store.s3.amazonaws.com/0/111728/d120cade-9436-0e61-3334-c601350cd26b.png)

- お好みで


##設定が必要な個所を確認
![VirtualBox_daraxLinux01_03_02_2016_15_42_40.png](https://qiita-image-store.s3.amazonaws.com/0/111728/a5e2d4a9-863d-375f-f22e-27fb7068d786.png)

- ネットワークを有効にする
 - ネットワークとホスト名を選択
 - 2つの項目があると思うので、どちらがNATでホストオンリーアダプターか確認しておきましょう
- インストールの開始を選択
 - 選択できない場合は、設定内容を確認して下さい


##インストール中にrootとユーザーの作成
![VirtualBox_daraxLinux01_03_02_2016_15_44_03.png](https://qiita-image-store.s3.amazonaws.com/0/111728/605a17b6-5179-e1fa-8471-15abc14759a8.png)

- パスワードが緩かったりすると警告が出ますが、ローカル環境なので余り気にしないようにします
 - **ホントはダメっすよ！＞＜**

インストールが完了すると再起動ボタンが表示されるので、選択して仮想マシンを再起動します

再度つらつらとアルファベットが表示された後、CUIでのログイン画面が表示されたら完了。
![VirtualBox_daraxLinux01_04_02_2016_13_04_53.png](https://qiita-image-store.s3.amazonaws.com/0/111728/888c653b-4c7b-f291-9a90-f4f1cb5e2134.png)

#次の記事
[VirtualBox+CentOS7（+Windows）でruby on railsの開発環境を作る 其の弐](http://qiita.com/daraxuma04/items/c8ff6df6a770aab29e4e)
[PHP]explode()の動作

# explode()がどう動作するか調べた

- PHPのバージョン
    - `PHP 5.6.10`

こんなコードがあるじゃろ

```php
$hoge1 = explode(',', null);
$hoge2 = explode(',', '');
$ages3 = explode(',', 0);
$hoge4 = explode(',', []);
```

## $hoge1の結果
```php
array:1 [▼
  0 => ""
]
```

## $hoge2の結果
```php
array:1 [▼
  0 => ""
]
```

## $hoge3の結果
```php
array:1 [▼
  0 => "0"
]
```

## $hoge4の結果
```php
explode() expects parameter 2 to be string, array given
```

以上。
IntelliJのDarculaテーマで毎回変更するカラー設定 Identifie

IntelliJのダークテーマ、Darculaはデフォルトのままでかなり気に入っているんですが、
一点だけ変えている所があって、一点なので忘れやすいため残します。
AndroidStudioを入れたときに忘れていたので、PhpStormからキャプチャをとる。

# 場所

Editor > Colors & Fonts > General

# デフォルト

![dracula default sample.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/b2684397-61a4-e0d0-aed0-f51e3d7efde3.jpeg)

```
i = resukt
return i;
```

の`i`の色が変わっているのですが、わかるでしょうか。ディスプレイ依存ですが、自分ではほぼわかりません。
デフォルトテーマから薄味の色付けだったのですが、黒背景で更に見えなく…

色の設定は以下です

![dracula default i.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/aff82b7f-386a-56e3-f2e3-cee20a633f1e.jpeg)

![dracula default i write.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/dfad0a74-66bd-24a8-fde1-718bd19debd2.jpeg)

項目としては、選択した変数などが代入されている箇所はピンク風に、
使用されている箇所は緑色になります。

キャレットを合わすだけで色付けされるので、検索の代わりになったり、検索のハイライトと併用して2個の変数を追ったりしています。

ただし、色が明るい**Error stripe mark**は右側のスクロールバーの色で、画面上では**Back Ground**の、かなり黒に近い色付けで表示されます。
変わっていることはわかるのですが、主張がとても弱いので、見逃しやすいです。

# 変更

色はなんでもいいので、これを見えやすく変更します。
変更は右欄をいじればいいです。簡単なので説明は不要でしょう。
自分は以下のようにしています。

![dracula custom i.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/2df56ad7-c719-1128-f083-0533369cc4fd.jpeg)

![dracula custom i write.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/86eb1d09-5332-ec75-16fe-35dddb47c2e0.jpeg)

![dracula custom sample.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/b09c87b0-25af-2470-8771-8ba248659237.jpeg)

明るい下線を追加して目立つようにしました。
赤線は変数が読みにくくなるかもしれませんが、そもそも調べたい変数名はわかっているうえで選択することが多いので、
特に問題には感じていません。
正規表現で「.」が改行文字にマッチしない in R

正規表現において、ドット（「.」）は何にでもマッチするワイルドカード的な存在だけど、例外として通常は改行文字にはマッチしない。Rの場合、

```r
library(stringr)
str_match("hello world", ".*")
#"hello world"
str_match("hello\nworld", ".*")
#"hello"
```

`dotall` というオプションを指定することにより改行文字にも対応することができる。

```r
str_match("hello\nworld", regex(".*", dotall = TRUE))
"hello\nworld"
```
[Swift] WKWebView で JavaScript をネイティブ側から実行する


WKWebView で表示する html を細工する必要があったので調べてみました。

# とりあえず JavaScript を実行する

ただ JavaScript を実行すればいいのであれば evaluateJavaScript を使うのが簡単です。

```
webView.evaluateJavaScript("document.getElementById('hogehoge').innerHTML = '';", completionHandler: nil)
```

でもこの方法ではドキュメントロード時に実行する、といったことができません。

# ドキュメント読み出し開始時、終了時に JavaScript を実行する

ほとんどのユースケースはこちらだと思いますがドキュメントロード時に JavaScript を実行したいです。
その場合は WKUserScript を作って WKWebViewConfiguration を WKWebView のコンストラクタに渡す方法があります。

```
let userScript1 = WKUserScript(source: "document.getElementById('hogehoge').innerHTML = '';", injectionTime: .AtDocumentEnd, forMainFrameOnly: true)

let controller = WKUserContentController()
controller.addUserScript(userScript1)

let configuration = WKWebViewConfiguration()
configuration.userContentController = controller
        
webView = WKWebView(frame: view.bounds, configuration: configuration)

```

こちらがシンプルでいいですね。
Unixのサーバでのディスク容量に対処する


### 背景

急に使ってるサーバでディスク容量が不足したというような警告が流れてくる場合があります。

その場合にどう対処したかを書いておきます。


#### 現状把握

まずはどこが沢山使っているかを調べ、その後に多く使っている所の不要なファイルを消していきます。

1. 各パーミッション・ファイルシステムの使用状況確認

```
[root@hoge]df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda3        97G  2.8G   89G   3% /
tmpfs           499M     0  499M   0% /dev/shm
/dev/vda1       243M   53M  178M  23% /boot

```

2. duコマンドで各ディレクトリ毎の使用量調査

```
[root@hoge]du -csh  /*
7.6M	/bin
47M	/boot
172K	/dev
28M	/etc
271M	/home
250M	/lib
22M	/lib64
4.0K	/lost+found
4.0K	/media
4.0K	/mnt
8.0K	/opt
0	/proc
5.2M	/root
15M	/sbin
4.0K	/selinux
4.0K	/srv
0	/sys
80K	/tmp
1.3G	/usr
407M	/var
160M	/web
2.5G	合計
```

3. さらに絞り込む

ここで使いすぎなディレクトリ(だいたいは、/varとか/tmpとか)が分かれば、その中でどのファイルが大半を占めているのかさらに絞り込んでく

今回はそんなに大きな容量のものはなかったですが、あったとしたらこんな感じっての貼っときます。

```
[root@hoge] find /home -size +10M -exec ls -lh {} \;
....中略...
```

で、容量使い過ぎなファイルを消して一見落着。となるハズ
windows > sublime text > マルチ選択 > Alt+F3

```txt:動作環境
Windows 7 pro (32bit)
Sublime Text2
```

Ctrl+Dでマルチ選択できるのはよく使っていたが、同じ文字をすべて選択する方法のショートカットがなかなか見つからなかった。

google検索するとMac版の記事が目に付くが、Windows版での記事が見つけにくい。
Qiitaの多数の記事もMac版なのかWindows版なのか、共通の機能なのかで記事の読みやすさも変わってくる。自分の記事もそうだ。

以下を見つけた。
http://www.starlod.net/sublime-text-3-shortcutkey.html

> Windows:Alt+F3

Ctrl+Dとまったく関係ないキーの組み合わせだった。
Macでrsyncでバックアップで日本語で

Macでrsyncを使ってバックアップを行うと日本語ファイル名が正しく表示されなかったりします。実害としては表示が冗長になり見づらくなるのと、ログ関係でしょうか。

## 目的
Macにてrsync時に日本語ファイル名を正しく表示させる。

## 環境と解決方法
Mac OS X - El Capitan
Homebrew

rsyncにiconvオプションで文字エンコードを教えてあげれば解決します。
ただ、標準のrsyncだとiconvに対応していないようなので更新します。  
記事投稿時だとrsyncのバージョンが3.1.2を使用できるようになります。
元が2.6.9で `rsync --help` してもiconvの記述が見当たりませんでした、OS X標準のrsyncのバージョンによっては初めから対応している可能性があるのでチェックしてみましょう。

## Homebrewをインストールする
導入済みならスキップで、ない場合は [公式](http://brew.sh) からコマンドをもらってきてターミナルでインストールすればOKです。
2016/02現在のコマンドは

```bash
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

## dupesのリポジトリを登録する
個人的にはいろんなリポジトリを登録すると煩雑になるので嫌なのですが、有名ドコロですし公式だけでは達成不可能なのでいれますー。

```bash
brew tap homebrew/dupes
```

ちなみに登録されているリポジトリ一覧は `brew tap` で確認できますので `brew untap ~` で登録解除も可能です。

## rsyncを更新してiconvのlibも導入
homebrew/dupes/rsync がiconvに対応しているようなので、これを導入し、iconvのlibもシステムへ入れます。

```bash
brew install homebrew/dupes/rsync homebrew/dupes/libiconv
```

## 使ってみる
と言ってもインストールしてすぐには使えません、コンソールを再起動(新しくコンソール開けばおｋ)してください。

```bash
rsync --iconv=UTF-8-MAC,UTF-8 <SOURCE> <DEST>
```

これで日本語表示できるようになりました。

## あとがき
やっと古いデータの長時間バックアップで進捗が分かるようになるー！
ちなみにバックアップは簡単に

```bash
rsync --iconv=UTF-8-MAC,UTF-8 -auv <SOURCE> <DEST>
```

としています。
C++で多次元配列の初期化方法。std::fill()の便利な使い方

以下のように、テンプレートを用いた関数を定義すると楽に初期化できます。

```cpp
// n次元配列の初期化。第２引数の型のサイズごとに初期化していく。
template<typename A, size_t N, typename T>
void Fill(A (&array)[N], const T &val){
    std::fill( (T*)array, (T*)(array+N), val );
}
```

# 使い方

```cpp
int main(){
    int a[10];
    Fill( a, 12 );      // 配列aの中身がすべて12になる
    
    int b[10][20];
    Fill( b, 100 );     // 2次元でも同じ書き方

    int c[10][20][30];
    Fill( c, 100 );     // 何次元でもいける

    long long d[20][20];
    Fill( d, (long long)100 );    // 第２引数の型を配列の要素の型に合わせないとうまくいかない

    int N = 10;
    int e[N][2];
    //Fill( e, 100 );    // エラー。動的に確保した配列には使えない

    return 0;
}
```
何次元の配列に対しても同じ書き方ができるので、便利だと思います。
受け取った多次元配列を、第２引数の型の１次元配列にキャストして、初期化しています。
そのため、第１引数の配列の要素の型のサイズと、第２引数の型のサイズを揃えないとうまくいかないので注意が必要です。
memset()と同じように0と-1で初期化する場合は気にしなくて大丈夫です。

# std:fill()だけを使う

std::fill()だけを使う場合は、以下のようにして初期化することもできます。

```cpp
int a[10][20];
std::fill( a[0], a[10], 100 );

int b[10][20][30];
std::fill( b[0][0], b[10][0], 100 );

// ちなみに、上のFill()がやっていること
int array[10][20][30];
int val = 100;
std:fill( (int*)array, (int*)(array+10), val );
```


# 参考

[C++で多次元配列を一行で初期化](http://qiita.com/Vetteru/items/86189bfbbd64e6f85615)
[C++で静的配列の要素数を取得する](http://qiita.com/NatsukiLab/items/182487a8559455d0e46a)
AndroidStudioでkotlinをupdateしたときにビルド通らない

プロジェクトクリーンとか、再起動しても治らないときは、
gradleにバージョンを指定したらなおりました。

公式サイトに、Versionの指定方法とVersion一覧がが記されてます。
[リンク]https://kotlinlang.org/docs/reference/using-gradle.html
電子工作 > フレネルレンズ S9013

http://qiita.com/exabugs/items/4dac3beefbe3fd512b8d
を見ていて、使用しているPaPIRsの形が気になった。

フレネルレンズ S9013 というものが見つかった。
http://akizukidenshi.com/catalog/g/gP-09008/


僕が知っていたフレネルレンズは灯台で使われているもので、曲面が縦方向に何個も分割されているものだった。
http://www.beam-matsumoto.co.jp/product/fresnel-tokucho.html
とか　
http://lighthouse-japan.com/chiba/inubosaki/inubosaki.html
にあるものとか。

S9013の光路が気になるこの頃。

## フレネルレンズの効果

http://www.ntkj.co.jp/product_fresnel.html
> 平面でありながら、レンズですから、スペースと重量を節約しますし、球面レンズではできない、口径より短い焦点距離のレンズを作ることができます。　

小型のもので焦点距離を短くできる、というのがフレネルレンズの特徴のようだ。効果自体は忘れていた。

元記事の該当の部品のデータシートにはフレネルレンズの記載は特に無い。勘違いかもしれない。
http://akizukidenshi.com/download/ds/panasonic/vz.pdf
kotlinでtextViewに指定する色をcolor.xmlから取得して一部変更する方法

textViewオブジェクト:textSample

```lang:filename
val colorStr = Color.parseColor("#" + Integer.toHexString(context.resources.getColor(R.color.color_sample1)))
val txtStr = "This is a <font color="+colorStr+">sample.</font>"
textSample.text = Html.fromHtml(txtStr)
```
* * *
結果: This is a <font color="+colorStr+">sample.</font>
技術英語 > One of the most powerful [pieces of evidence] that helped ... / piece of cake

@ LOE > November 23, 2012

http://loe.org/shows/shows.html?programID=12-P13-00047
>  One of the most powerful <font color=red>pieces of evidence</font> that helped Charles Darwin formulate his theory of evolution was the way species changed when isolated on different islands. 

pieces of をつけることで、色々な証拠のうちの部分的なものである印象がある。

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

http://eow.alc.co.jp/search?q=piece+of+cake&ref=sa
> 2. 《a ～》〔一切れのケーキをペロリと食べるように〕とても［非常に］簡単な...
Rubyで円周率を10000桁出力するワンライナー

[Pythonで円周率を10000桁出力するワンライナー](http://qiita.com/eqs/items/d138170c87e90953d841) に触発されました。

# ワンライナー

```shell-session:円周率10000桁
ruby -r bigdecimal/math -e "puts BigMath.PI(10000).to_s(?F)[0..10001]"
```

# 解説

```rb
require 'bigdecimal/math'

# 有効桁数10000桁の円周率 (BigDecimal)
num = BigMath.PI 10000

# BigDecimal#to_sに"f"を渡さない場合、指数形式で出力される
str = num.to_s "f"

# 文字列の範囲指定で1万桁までを取り出す (「3.」を含むから10002文字)
puts str[0..10001]
```

有効桁数10000で`to_s`したら小数点以下10034桁まで出力された
(確かめたら一応10014桁まで正しかった)

累乗根とかも出来る

```rb
require 'bigdecimal/math'
require 'bigdecimal/util'

puts 2.to_d.sqrt(10000).to_s("f")
```

詳しくは参考リンクへ (解説してねー)

# 参考

- [library bigdecimal](http://docs.ruby-lang.org/ja/2.3.0/library/bigdecimal.html)
- ┗ [instance method BigDecimal#to_s](http://docs.ruby-lang.org/ja/2.3.0/method/BigDecimal/i/to_s.html)
- ┗ [instance method BigDecimal#sqrt](http://docs.ruby-lang.org/ja/2.3.0/method/BigDecimal/i/sqrt.html)
- [library bigdecimal/math](http://docs.ruby-lang.org/ja/2.3.0/library/bigdecimal=2fmath.html)
- ┗ [module function BigMath.#PI](http://docs.ruby-lang.org/ja/2.3.0/method/BigMath/m/PI.html)
- [library bigdecimal/util](http://docs.ruby-lang.org/ja/2.3.0/library/bigdecimal=2futil.html)
- ┗ [instance method Integer#to_d](http://docs.ruby-lang.org/ja/2.3.0/method/Integer/i/to_d.html)
Mizuna（ミズナ）の概要


## ドキュメントの構成
Mizuna で新規のドキュメントを作成する場合には、ボードの作成を行う。
ボード内には複数のキャンバスを管理できるようにする。

![ボード内にキャンバス.png](https://qiita-image-store.s3.amazonaws.com/0/108395/41c08770-7f9c-b9d4-5d65-7b7f02e73b52.png "ボード内にキャンバス.png")

## メイン画面の構成
ボードを作成した後は、キャンバス内に画面イメージ等を記載できる。
画面イメージを作成するにあたり図形部品（コントロールイメージなど）を配置できるようにする。
図形部品は、ステンシルと命名。

![メインフォームの概要.png](https://qiita-image-store.s3.amazonaws.com/0/108395/f8623840-1c8c-d87e-ffae-06a2a39d60dd.png "メインフォームの概要.png")
vvvv Spreadsを使う

# Spreadsを使う
 [ビジュアルプログラミング(vvvv)を覚える](http://qiita.com/gansaibow/items/e179c20e2de5c5b601ee)　の続き
 C#で言ったらListとか配列にあたる

## Spreads
 ノードの引数はSpreadになっているので、Spreadを渡すと上からのインデックス順にループしてノードを作成してくれる。
![spreads_001.png](https://qiita-image-store.s3.amazonaws.com/0/111261/9889c305-628e-836a-823c-ac51751fe7d6.png)

## 規則性を持ったSpreads
 等間隔、ランダム、文字といった規則性のあるSpreadsを作成してくれるノードがある。
![spreads_002.png](https://qiita-image-store.s3.amazonaws.com/0/111261/73aa13c7-3da9-796b-e7b5-762fae646a72.png)

## Spreadsの組み合わせでリッチな形状にする
 組み合わせることで複雑な形状を作成することができる
![spreads_003.png](https://qiita-image-store.s3.amazonaws.com/0/111261/09e63589-7338-9b45-d982-47f38fd4be87.png)
Reactのes7記法でthisをbindせずに動かす

reactのes7に挑戦中のタカシです。es7は美しさの代償としてあらゆるmethodsにthisをbindせざるおえなくなりました。たとえばこんな風に

```
class Counter extends React.Component {
  constructor() {
    super();
    this.tick = this.tick.bind(this);
  }
  tick() {
    ...
  }
  ...
}
```

もう少し美しくかけないかと模索していたところ、公式にそのまま載ってました。こんな感じです。

```
  tick = () => {
    alert(this.state.name)
  };
```

これで動きます。thisをbindせずとも。ただし注意してください。最後のセミコロンは必須です。

まだまだ謎多きes7の世界。去年まではちょっと便利な書き方ができる程度に考えてましたが、jsを新しい言語へと昇華させる試みのように思えます。自由すぎたjsにある種の秩序をもたらしてくれることを期待しています。

参考：https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding
Rails4でcolor-me-sassを使ってカラー指定を便利にする


## 概要

[color-me-sass](http://richbray.me/cms/)はSass用のカラーライブラリです。

`#7A991F`みたいな16進数カラーコードの代わりに`$limeDark`など、色の名前で指定できるようになります。

```.scss
body {
  background: $limeDark;
}
```

いい感じのカラーがたくさん定義されていて便利そうなので、Rails4のプロジェクトで使ってみました。

## bower-railsの準備

`color-me-sass`を普通にbowerでインストールしてもいいのですが、試しに[bower-rails](https://github.com/rharriso/bower-rails)を使ってみました。

Gemfileを編集して`group :development, :test`のところに`bower-rails`を追加します。

```Gemfile
group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug'

  # Bower support for Rails projects.
  gem 'bower-rails', "~> 0.10.0"
end
```

gemを追加、

```
$ bundle install
```

`bower-rails`でインストールしたコンポーネントは`vendor/assets/bower_components`配下に保存されるので、assetsのパスに登録しておきます。

```config/initializers/assets.rb
Rails.application.config.assets.paths << Rails.root.join('vendor', 'assets', 'bower_components')
```

## color-me-sassを追加

プロジェクト直下の`Bowerfile`に下の行を追加します。

```Bowerfile
# Colour library for the css preprocessor SASS
asset 'color-me-sass'
```

rakeコマンドを実行してインストール

```
$ rake bower:install
```

## Sassで使ってみる

scssファイルを編集します。

```
@import "color-me-sass/_color-me-sass.scss";

body {
  background: $limeDark;
}
```

Sassの`lighten()`や`darken()`を組み合わせると明度を調節することもできます。

```
// lighten()で明るくする
body{
  background: lighten($limeDark, 30%);
}

// darken()で暗くする
body{
  background: darken($limeDark, 30%);
}
```
PHP7でXHProfを利用する方法（暫定版）

PHP7に対応したXHProfを見つけて動作確認を行ったので記録を残しておきます。
_https://github.com/Yaoguais/phpng-xhprof_

# !! 注意 !!
[本家](https://github.com/phacility/xhprof) は正式にPHP7対応を行っていません。
こちらは__有志がPHP7対応を行ったFork版__です。
PHP7 RC1への対応が行われたものがstable版でも動いているだけであって、今後も動作する保証はありません。
自己責任で利用して下さい。


# XHProfとは
ボトルネック調査に特化したFacebook製PHPプロファイラです。
詳細はこちらを参考にしてください。
_https://quartet-communications.com/info/topics/12238_

# 検証環境
* PHP 7.0.3
* CentOS 6.5

# 導入手順
以下のプロジェクトが存在している前提で導入を進めます。
composerもグローバルインストールされているものとします。

```bash:プロジェクト構成
/var/www/html
    └ project
        └ index.php
        └ bootstrap_xhprof.php
```

## 1. XHProfをインストール

```bash
$ cd /tmp
$ git clone https://github.com/Yaoguais/phpng-xhprof.git
$ cd phpng-xhprof/
$ phpize
$ make && make test && make install
```

## 2. XHProf ExtensionをPHP7に適用
```bash
$ cat << EOS > /etc/php.d/xhprof.ini
[xhprof]
extension=phpng_xhprof.so
xhprof.output_dir = /tmp/xhprof
EOS
$ mkdir -m 777 /tmp/xhprof
$ service httpd restart
```

## 3. コールグラフ表示に必要なパッケージを導入
graphvizの依存パッケージには既に保守されていないものがあるので、
依存解決出来ないものはyum-skip-brokenで弾く。

```bash
$ cd /etc/yum.repos.d/
$ wget http://www.graphviz.org/graphviz-rhel.repo
$ yum -y install yum-skip-broken
$ yum -y --skip-broken install 'graphviz*'
```

## 4. プロジェクトにXHProfビューアを導入

```bash
$ cd /var/www/html/project
$ composer require facebook/xhprof dev-master
$ cp vendor/facebook/xhprof/xhprof_html/ ../ -rf
$ cp vendor/facebook/xhprof/xhprof_lib/ ../ -rf
```

## 4. プロジェクトにデバッグコードを記述

```php:index.php
<?php
require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/bootstrap_xhprof.php';
```

```php:bootstrap_xhprof.php
<?php
xhprof_enable();
register_shutdown_function(function() {
    $data = xhprof_disable();
    $runs = new XHProfRuns_Default();
    $runs->save_run($data, 'APPLICATION_NAME');
});
```

## 補足. 最終的なプロジェクト構成
```bash
/var/www/
    html
    └ project
        └ bootstrap_xhprof.php
        └ composer.json
        └ composer.lock
        └ index.php
        └ vendor
            └ autoload.php
            └ ...
    └ xhprof_html
    └ xhprof_lib
```

# 実行
ドメイン部は環境に応じて読み替えてください。

__http://192.168.xx.xxx/project__ にアクセスするとプロファイリングが走ります。
その後、__http://192.168.xx.xxx/xhprof_html__にアクセスすると以下のような画面が表示されます。

![XHProf  Hierarchical Profiler Report.png](https://qiita-image-store.s3.amazonaws.com/0/33480/e6f25530-0088-9bcc-1c27-282f733edca2.png)

リンクを踏むとプロファイリング結果が表示されます。

![XHProf  Hierarchicat.png](https://qiita-image-store.s3.amazonaws.com/0/33480/e5c6421c-6574-cfba-b365-d50d56ee30df.png)
ECMAScript6を書きたい part2 (babel、gulp)

#前回の話
http://qiita.com/YukiMiyatake/items/1e11e7b96528a0d1267d

babel-cliの環境を構築し、ECMAScript6のコードをトランスコンパイルする
まで。


#今回すること
今のままだと、ファイルごとに babel でトランスパイルする必要があり
面倒なので
makefileのように、一発でトランスパイルさせたいと思います
その時に、依存関係を解決させる　requireや
バックグラウンドでファイルが変更されたら自動的にトランスパイルする設定

を行おうと思います


#gulp
gruntは少し古くさいという話があったので
gulpにします

まず　package.jsonを作ります
$npm init
ここでアプリ名やバージョン、スタートアップファイル等を選びますが
結構適当で大丈夫です


gulp、gulp-babelのインストール
$npm install -g gulp-babel
$npm install --save-dev gulp
$npm install --save-dev gulp-babel 


ファイル監視時にエラー発生時に停止しなくするプラグイン
$npm install --save-dev gulp-plumber

ソースマップを作成する
$npm install --save-dev gulp-sourcemaps



そして、自動ビルド用の設定ファイル　gulpfile.js　作成

```js:gulpfile.js
var gulp = require('gulp');
var babel = require('gulp-babel');
var plumber = require('gulp-plumber');
var sourcemaps = require("gulp-sourcemaps"); 
var src = ['test.js'];

gulp.task('build', function () {
  return gulp.src(src)
    .pipe(plumber())
    .pipe(sourcemaps.init()) 
    .pipe(babel())
    .pipe(sourcemaps.write(".")) 
    .pipe(gulp.dest('./dist'));
});

gulp.task('watch', function () {
  gulp.watch(src, ['build']);
});

gulp.task('default', ['build']);
```

var src=　の配列に、変換元のファイルを入れます
.pipe(gulp.dest('./dist'));　ここは　変換後のディレクトリ

$gulp build
で、ファイルを全部ビルドします

$gulp watch
をすると、ファイルに変更がはいると自動的にビルドしてくれます


とりあえず　これが簡単なgulpの設定です



#おまけ
babel-plugin-asm-js
を使えば、ECMAScript6+Flow　で書いた　型付きのJavaScriptを
asm.jsに変換してくれると夢をみていたが
どうやら コミットも　現時点で 2015年７月でとまってるし
パッケージにもミスがあったり、issueが消化出来てなかったり
実用するには難しそうだ・・・


このプラグインを期待してbabel導入したのに・・・

asm.jsを手書きするか
結局 C++からemscriptenするしかないのか・・・
[メモ]RedBearLab:BLE NanoでmbedとArduinoで、Lチカ

BLE Nano http://redbearlab.com/blenano-new

## 環境
- Windows7 64bit
- BLE Nano (V1.5)
- MK20 USB Board

## 準備
1. mbed.orgにアカウントを作っておく。
2. まずは、はんだづけ。 http://redbearlab.com/getting-started-nrf51822/
<br>USBボードのほうが、ピンおおい。BLENanoを挿すとき注意。<font color='red'>アンテナがUSBプラグの反対。アンテナ側に寄せる。USBボードのUSBプラグ側のピンがあまる。</font>
3. Windowsは、`mbed Windows serial port driver` をインストールする。<br>https://developer.mbed.org/handbook/Windows-serial-configuration#1-download-the-mbed-windows-serial-port
<br>`"Download latest driver"`から入手、インストール(mbedWinSerial_16466.exe, 2016年2月4日時点)
4. USBボードをPCにさすと、USBマスストレージドライブとして、MBEDというドライブが現れる。あと、COMポートが増えている。
5. MBEDドライブ内の`mbed.htm`をブラウザで開いて、"RedBearLab BLE Nano"を使用するプラットフォームとして登録する<br>
=> "Platform 'RedBearLab BLE Nano' is now added to your account!"ってメッセージが出る
6. MBEDというところに、プログラムのファイル(HEX形式)をコピーすると、フラッシュに焼いてくれて、実行される模様。<br>
USBボードのボタンは、RESETボタン。

## mbedでLチカ
1. https://developer.mbed.org/ => 右上の "Compiler"
2. 右上のほうのプラットフォーム選択で、"RedBearLab BLE Nano"を選ぶ。
3. インポート -- インポートのメニュー    
       a. mbed_blinkyを`[検索]`。作成者Team mbedのをクリックして、[インポート]ボタンを押す  
       b. `Import Program`で、Import as `Program`。Update all libraries to the latest revisionにチェックを入れて、[Import]をおす。
4. main.cpp に、`printf("Hello BLE Nano!\r\n");`を追加してみる。

    ```c:main.cpp
#include "mbed.h"

    DigitalOut myled(LED1);

    int main(){
        printf("Hello BLE Nano!\r\n");
        while(1) {
            myled = 1;
            wait(0.2);
            myled = 0;
            wait(0.2);
        }
}
```

5. [コンパイル]を押す
6. HEX ファイルをダウンロードして、"MBED"ドライブにコピーする (直接、MBEDドライブにダウンロードしてもいけた)
7. LEDがちかちかする。LEDは、ウラにあるよ。
8. Terminal起動
(Teratermで、ALT+N、`Serial`で、`COMxx: mbed Serial Port` を選んで、[OK], ALT+S,Eで、9600bps-8bit-Parity:none-1bit-FLowCtl:none)
10. USBボードのボタンを押す。
=>BLE Nanoが再起動して、Terminalに`Hello BLE Nano!`画表示される
 

## ArduinoでLチカ
- BLE Nanoにbootloaderを焼く。<br>
https://github.com/RedBearLab/nRF51822-Arduinoから、[Download ZIP]で取得して、`bootloader/bootloader.hex`を、MBEDドライブに放り込む

- Arduino IDE側(1.6.7使用)
    1. File > Preferences > Additional Board Manager URLsに以下を追加<br>
https://redbearlab.github.io/arduino/package_redbearlab_index.json
    2. Tools > Boards:~~~ > Boards Manager
    3. Boards Managerで、ｎRF51822を検索<br>
`> RedBearLab nRF51822 Boards (32-bits ARM Cortex-M0) by RedBearLab`<br>
を選択してインストール
    4. Tools > Boards:~~~ > `BLE Nano(V1.5 32KB)`を選択
    5. Tools > Ports から、USBボード挿して現れたポートを選択

- Lチカサンプル
    1. Arduino IDE > File > Examples > 01.Basics > Blink
    2. Upload(CTRL+U)すると、ビルドして、アップロードされて、プログラムが実行される。(1秒ごとに点灯消灯くりかえし)
    3. delay(500);にかえて様子を見てみる。

#### 疑問点?
- アップロードごとに全ビルドされて、時間がかかる
- リセットすると、プログラムは保存されない？
ESP8266 (ESP-WROOM-02) で人感センサーを使う

## 概要
ESP8266 (以下 WROOM02) で人感センサーを使う

## はじめに
照明が点きっぱなしで電気代がモッタイナイと思うときがちょいちょいありませんか？
人肌を検知して、いい感じに消灯してくれるようにならないものか。
AC 100V とか、乗り越えないといけない課題は多いが、まず手始めに、人感センサーはどのようなものか、試してみる。

## 部品調達
秋月でフラフラ漁っていると、何種類かの人感センサーを見つけた。
2015/09/30発売のPanasonicの新製品 PaPIRs がいいよ、と店員さんに教えてもらって、早速購入。
<a href="http://akizukidenshi.com/catalog/g/gM-09750/" target="_blank">焦電型赤外線センサー PaPIRs 5m EKMC160111</a> (480円/個)
ちなみに、12m の長距離検出モデルは売り切れていた。

## 回路
 - 人が近づいたら LED を点灯する。
 - A/Dの精度が要らないので、TOUT 端子で十分だろう。
 - TOUT 端子の入力は 0〜1V なので、本当ならセンサー出力は降圧が必要だけど、ON/OFF判定だけなので、今回は手を抜こう。特に問題ない。
 - 過去最高に簡単だ。

![WROOM02-PaPIRs (2).png](https://qiita-image-store.s3.amazonaws.com/0/69410/b7eddd44-5c12-bbb2-4422-56112e5be250.png)

Upverter の回路図は以下。
<a href="https://upverter.com/exabugs/f1ae1e6951c12228/" target="_blank">
https: //upverter.com/exabugs/f1ae1e6951c12228/</a>

## スケッチ
 - センサー値を、適当に 500 くらいで ON/OFF 判定しています。

```cpp
extern "C" {
#include <user_interface.h>
}

#include <Ticker.h>

Ticker ticker;

#define LED 4

void setup() {
  Serial.begin(115200);
  Serial.println("");

  pinMode(LED, OUTPUT);

  ticker.attach_ms(500, timer);
}

void loop() {
}

void timer() {

  // A/Dセンサー取得
  int tout = system_adc_read();
  Serial.println(tout);

  digitalWrite(LED, tout < 500 ? LOW : HIGH);
}
```

## 動作確認
 - 手前左側の白色の物体が、人感センサーです。
 - ジャンパー線をすっきりするように、配線し直しましたwww

![IMG_2443.JPG](https://qiita-image-store.s3.amazonaws.com/0/69410/8fdc71f2-1346-1004-dee2-2d3ef0eea01c.jpeg)


## おわりに
 - 予想通りの動き。センサー自体は小型だし、扱いやすい。
 - この程度なら WROOM02 でなくても、トランジスタが1個あればよい。<br>いや、次のステップへの布石だと考えよう。
 - じっと動かないでいると、照明が切れる。トイレで大をしているときに照明が切れる、あれを体感できる。
 - 高い位置に設置しないと本来の性能は発揮されないだろうが、実験はここまで。
MacBookでUbuntuを使うときのメモ

# 困ったことがあったら
* とりあえずPRAMをリセット
* Cmd+Opt+P+R+起動

# refindのインストール
* OSXのアップデートの度に入れなおしてやる必要がある
 * El Capitanになってからはどうなのか知らない…
* El Capitanではrefind-0.10以降を使う
* リカバリーモードに入ってあげる必要がある
 * Cmd+R+起動

# 追加で必要なモジュール
ここを見るとだいたい全部書いてある
https://help.ubuntu.com/community/MacBookAir6-2/Wily

# ファン
なんかppa追加してモジュール入れた記憶あり
curl_copy_handleで得たハンドルにCURLOPT_HTTPHEADERをセットしてcurl_multi_execで2件以上回すとSEGVで落ちるバグ

# 再現コード

PHPバージョン7.0.1と5.5.30で確認．最初libcurlのバグかと思ったんですが，Cで同じようなコードを書いても問題なく動くのでPHPのバグだと思います．

```php:PHP&#32;(SEGVする)
<?php

$base = curl_init('http://example.com/');
$mh = curl_multi_init();

for ($i = 0; $i < 2; ++$i) {
    $ch = curl_copy_handle($base);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Foo: Bar']);
    curl_multi_add_handle($mh, $ch);
}

do {
    curl_multi_exec($mh, $active);
} while ($active);
```

```C:C&#32;(SEGVしない)
#include <stdio.h>
#include <curl/curl.h>

void set_header(CURL *ch) {
    struct curl_slist *headers = NULL;
    headers = curl_slist_append(headers, "Foo: Bar");
    curl_easy_setopt(ch, CURLOPT_HTTPHEADER, headers);
}

int main(void) {

    CURL *ch_base, *ch_x, *ch_y;

    CURLM *mh;
    int active;

    mh = curl_multi_init();

    ch_base = curl_easy_init();
    curl_easy_setopt(ch_base, CURLOPT_URL, "http://example.com/");

    ch_x = curl_easy_duphandle(ch_base);
    set_header(ch_x);
    curl_multi_add_handle(mh, ch_x);

    ch_y = curl_easy_duphandle(ch_base);
    set_header(ch_y);
    curl_multi_add_handle(mh, ch_y);

    do {
        curl_multi_perform(mh, &active);
    } while (active);

    return 0;

}
```

# gdbのスタックトレース

```text
#0  0x00000001010ddc6a in Curl_raw_nequal () from /usr/local/opt/curl/lib/libcurl.4.dylib
#1  0x00000001010b81f0 in Curl_checkheaders () from /usr/local/opt/curl/lib/libcurl.4.dylib
#2  0x00000001010b6553 in Curl_http () from /usr/local/opt/curl/lib/libcurl.4.dylib
#3  0x00000001010c966d in Curl_do () from /usr/local/opt/curl/lib/libcurl.4.dylib
#4  0x00000001010d7cad in multi_runsingle () from /usr/local/opt/curl/lib/libcurl.4.dylib
#5  0x00000001010d7488 in curl_multi_perform () from /usr/local/opt/curl/lib/libcurl.4.dylib
#6  0x000000010019e52f in zif_curl_multi_exec (execute_data=<optimized out>, return_value=0x102216190)
    at ext/curl/multi.c:240
#7  0x00000001004775f7 in ZEND_DO_ICALL_SPEC_HANDLER (execute_data=0x1010f1c6b)
    at Zend/zend_vm_execute.h:586
#8  0x00000001004428f8 in execute_ex (ex=<optimized out>) at Zend/zend_vm_execute.h:417
#9  0x0000000100442bd9 in zend_execute (op_array=0x1010f1c6b, return_value=<optimized out>)
    at Zend/zend_vm_execute.h:458
#10 0x000000010040343b in zend_execute_scripts (type=0, retval=0x0, file_count=206956997)
    at Zend/zend.c:1428
#11 0x000000010039ede8 in php_execute_script (primary_file=0x101472e70) at main/main.c:2471
#12 0x0000000100493c31 in do_cli (argc=<optimized out>, argv=<optimized out>)
    at sapi/cli/php_cli.c:974
#13 0x0000000100492a85 in main (argc=2, argv=0x7fff5fbff628) at sapi/cli/php_cli.c:1345
```

# バグレポート

[【Bug #71523】 Copied handle with new option CURLOPT_HTTPHEADER crashes while curl_multi_exec.](https://bugs.php.net/bug.php?id=71523)

1回ぐらい自分でパッチ書いてプルリク出してみたかったのに…1時間ぐらいphp-srcの該当箇所読んでても原因分からず…無念…
Git で WinMerge するときの設定+α

[git の差分比較・マージを WinMerge で行う](http://qiita.com/kobake@github/items/fb317b4fdacad718a4b2)などの設定を参照することで、WindowsのgitでWinMergeで比較、マージできるようになりますが...

自分の環境では以下の問題があり、その点についてさらに別の設定で対応可能でした。

問題とは

1. ファイルのバックアップとして.origというファイルが生まれる(正確にはマージ成功後に削除されてない)
2. ファイルのバックアップとして.bakというファイルが生まれる

git(SCM)なので、ここでこれらのファイルは不要と言えます。
 
1.についてはgit側が生成しているので、参考[^1]にして以下の設定を入れます。

```:shell
> git config --global mergetool.keepBackup false
```

これで成功後に削除されます。

2.についてはWinMerge側の設定なので、参照[^2]を元に、WinMergeのオプションを変えてしまうことで対応できます。
難点は普通に使う時にバックアップファイルを出力してくれなくなりますが...

当方の現在の最終的な設定は以下です。WinMerge日本語版かつtool指定デフォルトにしています。

```bash:.gitconfig
[merge]
	tool = WinMerge

[mergetool]
	prompt = false
	keepBackup = false

[mergetool "WinMerge"]
	path = C:/Program Files/WinMerge/WinMergeU.exe
	cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -e -u -wl -wr \"$LOCAL\" \"$BASE\" \"$REMOTE\" -o \"$MERGED\"
	trustExitCode = false

[diff]
	tool = WinMerge
	guitool = WinMerge

[difftool]
	prompt = false

[difftool "WinMerge"]
	path = C:/Program Files/WinMerge/WinMergeU.exe
	cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -f \"*.*\" -e -x -ub -wl -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\"
	trustExitCode = false

[alias]
	windiff = difftool -y -d -t WinMerge
	winmerge = mergetool -y -t WinMerge
```

*alias*の*-y*は不要なはずだが、とりあえずそのままです


[^1]: [GitでWinMergeなどのMerge toolを使用した際に、バックアップ\(\.orig\)を生成しない設定 \- みちしるべ](http://orangeclover.hatenablog.com/entry/20121210/1355140555)
[^2]: [WinMergeで、\.bakファイルを出さない方法。 \| kimihiko Tech](http://tech.kimihiko.jp/article/27062396.html)
Java JSPのヘッダ部分などを共通化して再利用

## はじめに
下記のようなファイル構成になることはよくあると思います。
何らかのフレームワークを使っていれば、同じパターンの箇所は部品化して再利用もできるのですが、
JSPの基本的な機能だけでも効率化はできます。

```jsp:index.jsp
<%-- 
    Author     : tool-taro.com
--%>

<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<!DOCTYPE html>
<html>
    <!-- headの内容が皆同じ -->
    <head>
        <title>tool-taro.com</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <script src="//code.jquery.com/jquery-2.2.0.min.js"></script>
    </head>
    <body>
        index.jsp
    </body>
</html>
```

```jsp:index2.jsp
<%-- 
    Author     : tool-taro.com
--%>

<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<!DOCTYPE html>
<html>
    <!-- headの内容が皆同じ -->
    <head>
        <title>tool-taro.com</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <script src="//code.jquery.com/jquery-2.2.0.min.js"></script>
    </head>
    <body>
        index2.jsp
    </body>
</html>
```
今回は、\<head>～\</head>までを部品化する対応をしてみます。
簡単に言えば、部品化した部分を別のheader.jspとして定義し、
もとのindex.jspおよびindex2.jspからincludeします。

## 実装例
header.jspを用意します。

```jsp:header.jsp
<%-- 
    Author     : tool-taro.com
--%>

<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
    <head>
        <title>tool-taro.com</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <script src="//code.jquery.com/jquery-2.2.0.min.js"></script>
    </head>

```
次に、index.jspおよびindex2.jspからheader.jspをincludeしますが、includeには2つの方法があります。

**<%@ include %>タグ**
初回include時にincludeする側に取り込まれます。
その後、includeされる側をいくら更新しても変更は反映されません。
includeする側を更新すると、変更が反映されます。
パフォーマンスの面では無駄がないですが、変更の反映については注意が必要です。

**\<jsp:include />タグ**
includeする側が実行される度に、includeされる側へのリクエストが発生し、
その結果をincludeする側が取り込んで表示します。
includeされる側、includeする側、それぞれ常に最新の結果が得られます。

今回は\<jsp:include />タグでやってみます。

```jsp:index.jsp
<%-- 
    Author     : tool-taro.com
--%>

<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<!DOCTYPE html>
<html>
    <jsp:include page="header.jsp" flush="true" />
    <body>
        index.jsp
    </body>
</html>
```

```jsp:index2.jsp
<%-- 
    Author     : tool-taro.com
--%>

<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<!DOCTYPE html>
<html>
    <jsp:include page="header.jsp" flush="true" />
    <body>
        index2.jsp
    </body>
</html>
```
重複部分がすっきりしました。

## 動作確認
index.jspの実行結果を見てみましょう。

```html:index.jsp
<!DOCTYPE html>
<html>
    


    <head>
        <title>tool-taro.com</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <script src="//code.jquery.com/jquery-2.2.0.min.js"></script>
    </head>

    <body>
        index.jsp
    </body>
</html>
```
includeしている箇所は改行が入っていますが、
header.jspの内容がきちんとincludeされているのがわかります。

この後、header.jspだけを編集し、再度index.jspの実行結果を確認したところ、
header.jspの変更箇所がきちんと反映されていることも確認しました。
## 環境
- 開発
	- Windows 10 Pro
	- JDK 1.8.0_112
	- NetBeans IDE 8.2

- 動作検証
	- CentOS Linux release 7.2
	- JDK 1.8.0_112

Webツールも公開しています。
[Web便利ツール@ツールタロウ](http://tool-taro.com/)
「パッケージ管理システムとは」by Windowsユーザー

いままでWindowsユーザーだった私が、CentOSを触り始めました。
いろいろ設定をしようとすると、「yumでインストールします・・・」などという見慣れない言葉が。。。
インストールって「インストーラーをダウンロードして・・・」というやり方じゃないの?というあたりの話です。


#環境
今回はCentOS(RedHat系)の環境を元に話を進めます。


# ソフトウェアをインストールするとき
OSに何らかのソフトウェアをインストールする場合。
Windowsだとインストーラーをダウンロードし、そのインストーラーを使ってソフトウェアをインストールします。
Linuxではインストーラーではなく、パッケージ管理システムでパッケージ(ソフトウェア)をインストールします。

yumはRedHat系ディストリビューションのパッケージ管理システムで使用されるツール(コマンド)です。

※ディストリビューションとは
Linuxの配布形態のことを指します。
Linuxはカーネルの部分のみ(核となる部分)を指し、そのほかの便利なプログラム(デスクトップ向け環境で使うソフトウェアなど)は含まれていません。
ディストリビューションにはカーネルとこれらのプログラムがまとめられており、ユーサーはディストリビューションを使用することで実用的な環境を簡単に構築できます。
ディストリビューションには、Fedora、CentOS(RedHat系)、Ubuntu(Debian系)などがあります。

RedHat系ディストリビューションではyumというパッケージ管理のツールがあるように、そのほかのディストリビューションにもそれぞれ異なるツールがあります。

|ディストリビューション|ツール|
|-----------|------------|
|RedHat系|RPM、yum、dnf|
|Debian系|dpkg、dselect、apt|



### パッケージとは
ソフトウェアに関わるファイル一式がまとまったものをパッケージといいます。
「ソフトウェアに関わるファイル」には、設定ファイルやドキュメント、プログラム本体、プログラムが動くために必要なライブラリなどが含まれます。
パッケージには形式があり、その形式はディストリビューション毎に異なります。

### パッケージの形式
|ディストリビューション|パッケージの形式|
|-----------|------------|
|RedHat系(Fedora、CentOS)|RPM|
|Debian系(Ubuntu)|deb|

#パッケージ管理システムでできること
パッケージ管理システムでパッケージ(ソフトウェア)をインストールできる、と上記で述べましたが、パッケージ管理システムではそのほかのこともできます(すべてのパッケージ管理システムに必ず備わっているというわけではありません)。

###パッケージのインストール、アンインストール、更新
パッケージを指定して、パッケージのインストール、アンインストールができます。
また、すでにインストール済みのパッケージをアップデートすることもできます。

###パッケージ同士の依存関係の解決
パッケージをインストールするときに、他のパッケージがインストールされていることが条件になっている場合があります。
パッケージ管理システムではこれらの依存関係を把握し、依存関係が損なわれてしまうようなインストール(あるいはアンインストール)に警告を出します。

###パッケージはどこから持ってくるのか
リポジトリから持ってきます。
私たちは「リポジトリがどこにあるのか」を意識する必要はありません(実際はWeb上のどこかにあります)。
パッケージ名を指定することでシステム側でリポジトリを探して、パッケージを探してくれます。
このようなことができるのは、ディストリビューションによって公式にサポートされた「公式リポジトリ」に対してです。
非公式のリポジトリもありますが、それらはパッケージ管理システムに登録することで使えるようになります。


#まとめ

- Linuxでソフトウェアをインストールするときは、インストーラーを使うのではなく、パッケージ管理システムを使用することが多い
- パッケージ管理システムを使うにはyumなどのツールを使用する
- ソフトウェアはパッケージという形でリポジトリに登録されている