OmniAICreator/Qiita-1.07M huggingface dataset:
PHPUnitで別プロセステストをしたい場合、Elementなど別ファイルの呼び出しがある場合は注意！

# PHPUnitで別プロセステストをしたい場合、Elementなど別ファイルの呼び出しがある場合は注意！

PHPUnitでは、別プロセスでテストということが行うことができます。

https://phpunit.de/manual/current/ja/appendixes.annotations.html#appendixes.annotations.runInSeparateProcess


```php
    /**
     * testHoge
     *
     * ↓これを書く
     * @runInSeparateProcess
     */
    public function testHoge()
    {
    }
```

テストを実行するにあたって、ある理由で別プロセスでテストを実行する必要があったのですが・・・

## 起こったこと

とりあえずこんなテストを書きました。

```php
<?php
namespace App\Test;

use Cake\TestSuite\TestCase;
use Cake\View\View;

class HogeTest extends TestCase
{

    /**
     * testHoge
     */
    public function testHoge()
    {
        $View = new View();
        //hoge.ctpには<?= $fuga;?>の記載がある
        $a = $View->element('hoge', ['fuga' => 'fugaa']);
        $this->assertTrue(true);
    }

    /**
     * testHoge2
     *
     * @runInSeparateProcess
     */
    public function testHoge2()
    {
        $this->assertTrue(true);
    }
}
```

## 結果

```
PHPUnit 5.5.5 by Sebastian Bergmann and contributors.

.E                                                                  2 / 2 (100%)

Time: 120 ms, Memory: 8.50MB

There was 1 error:

1) App\Test\HogeTest::testHoge2
PHPUnit_Framework_Exception: Notice Error: Undefined variable: fuga in [/var/www/html/htdocs/caketest/test/src/Template/Element/hoge.ctp, line 1]

ERRORS!
Tests: 2, Assertions: 1, Errors: 1.
```

！！？

testHoge2では見ての通り`hoge.ctp`なんて読み込んでいません。

## どうしてこんなことが起こっているのか

とりあえずこれを見てくれ。。。

`class PHPUnit_Util_GlobalState`

```php
    public static function getIncludedFilesAsString()
    {
        return static::processIncludedFilesAsString(get_included_files());
    }
```

はい、`get_included_files()`。。。

因みに、別プロセスで実行をする場合のみこのメソッドが走ります。

そして、別プロセスで実行する際には、現在`include`もしくは`require`されたファイルを全て`require_once`で読み込んでからテストを実行している訳です。

そういうわけで、`hoge.ctp`も`require_once`で読み込まれちゃうのですが、当然require_once実行時において`$fuga`なんてありませんのでエラーが発生するというわけです。

## 解決策

こんなことが起きたら対処として考えられるのは

- すべて別プロセスでテストする
- 通常のテストと別プロセスのテストを完全に別のテストとして実行する(classレベルでなく実行するテストレベルで別

くらいしか対処が思いつかないです。。。

~~そもそも別プロセスなんかでテストを実行しなくて良いようにするってのが一番正しい気がする~~
Javascript 静态类型检查器 - flow


https://flowtype.org/


# 类型引用

通过类型引用来找出潜在的 bug, 它会追查变量在整个程序里的所有引用而找不类型冲突的bug.

# 规范的 JS 写法

Flow 是给 Javascript 语言编写的, 它能够懂得 javascript的习惯用法, 让代码更加流畅.

# 实时反馈

Flow 会增量的检查每一次代码改动. 提供快速响应.

##如它可以检查:

- 类型转换
- 空引用
- 还有可怕的`undefined is not a function`


如:

```
// @flow
function foo(x) {
  return x * 10;
}
foo('Hello, world!');

```

Flow 会输出这样的检查结果:

```
$> flow
5: foo('Hello, world!');
   ^^^^^^^^^^^^^^^^^^^^ function call
3:   return x * 10;
            ^ string. This type is incompatible with
3:   return x * 10;
            ^^^^^^ number
```

Flow 还可以给代码添加` assertion`

```
// @flow
function bar(x): string {
  return x.length;
}
bar('Hello, world!');
```

如上面的函数标记为返回` string`, 而实际返回的却是 number, flow 的检查结果就是:

```
$> flow
3:   return x.length;
            ^^^^^^^^ number. This type is incompatible with the expected return type of
2: function bar(x): string {
                    ^^^^^^ string

```

上面的写法完全可以提供如` babel` [这样的工具最后转化为那里都能够执行的javascript 代码.](https://flowtype.org/docs/running.html)


ref:

1. https://github.com/facebook/flow
2. https://github.com/facebook/flow/tree/master/examples/01_HelloWorld
Windows で作業中に"考え事をする為"に"ディスプレイを一瞬で真っ黒にする"方法

# 方法

```shell-session
scrnsave.scr /s
```

たまにPCの画面を一瞬でぱっと消したい事がある。いわゆる「ボスが来た」ではなくて、ソフトウェアの設計や実装あるいはデバッグ中にある程度状況は整理された後に、「それではこれはどうしようか？」などと考え事をしたくなる。そんな時、Windowsならコレ・ｗ・

この方法の利点はディスプレイの電源や信号をがっちりOFFにする電源制御ではないので、先に述べたようなPCでの作業中にふと考え事に集中し、考えがまとまったならば即座に画面を復帰して作業を行いたい場合に非常良く向いている。

## だそく

筆者環境では Windows でもおよそ常に zsh (mingw) が動いているのであまり必要は無いのだけど、ユーザーによってはデスクトップにショートカットを作成したり、ピン留めに入れたり、ショートカットにグローバルなキーバインドを設定すると便利かもしれません。

### 筆者が zsh に入れている alias

```zsh
if [ `uname -o` = 'Msys' ]; then
  alias off-screen="cmd /c 'scrnsave.scr /s'"$
fi
```

# 参考

- [Turn off display in Windows on command](http://superuser.com/questions/321342/turn-off-display-in-windows-on-command)
2016-09-23 Excel > 検索 > 色付きセルを探す > Ctrl + F / 書式で指定

```txt:動作環境
Excel 2013 on Windows 8.1pro
```

Excelの作業をしていて、ふと「色付きのセルにジャンプできれば手戻りしなくていいのに」と思った。

「excel jump colored」で検索。
参考 http://excel.tips.net/T002396_Finding_Cells_Filled_with_a_Particular_Color.html

### 手順

1. Ctrl+F
2. 検索文字列には何も入れない
3. 書式を押す
4. 「塗りつぶし」タブを選択し
5. 背景色で色を選択
6. OKを押して「書式の検索」を閉じて
7. 「検索と置換」ウィンドウにて「次を検索」を押す

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/e4ad650d-608e-d358-fdb3-76f23cb2a867.png)

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/a5620fc1-c31f-4aca-bd7b-3320a5204dfb.png)
macOS SierraでKarabinerが使えない…

#macOS SierraでKarabinerが使えない

色々と設定していたKarabinerが使えなくなっている。
外付けのUSキーでどうしても気になったのが、F12キーをForward deleteにしてたこと。
これはちょっと使い勝手悪すぎる。

内臓はJISキーなので、**英数キー**をコピー、**かなキー**をペーストにしてたんですけど、
これも使えないってことですよね…むむむむ。

当座対応ってことで、pqrs.orgさんからKarabiner-Elementsってのが出てます。
jsonで書いてあげればいいみたい。

> Karabiner-Elements/types.hpp at master · tekezo/Karabiner-Elements 
> https://github.com/tekezo/Karabiner-Elements

設定するキー配列についてはこちらにまとめて頂けてます。

> https://github.com/tekezo/Karabiner-Elements/blob/master/src/share/types.hpp#L177-L369

## F12をForward Deleteに
パッケージを落としてきます。

```bash
cd ~/.karabiner.d/configuration
touch karabiner.json
vi karabiner.json
```


```json
{
    "profiles": [
          {
            "name": "Default profile",
            "selected": true,
            "simple_modifications": {
                  "f12": "delete_forward"
            }
          }
    ]
 }
```

とりあえずはこれで。


## 0928追記
現状、Karabiner-ElementsではFn押しと別々のコマンドをアサインすることはできないようで…
上記の設定だと、Forward deleteはできても、ボリューム操作が出来ない。
アップデート待ちしかないようです。

> https://github.com/tekezo/Karabiner-Elements/issues/16

（Sierraから音量弄るの横になって分かりやすくなったし、インタフェースもわざわざ設定開かなくてもよくなったので、このままでも特段問題はなさそう。）
ターミナルからsiriを起動させる


macOS SierraになってMac上でもSiriが起動できるようになった！
ターミナルから起動したいのでaliasしてみた．

# かんたん！！
bashとかの設定ファイル（.bash_profile）とかに
`alias siri='open /Applications/siri.app'`
とする．

`$ siri`
で起動．

![siri](https://raw.githubusercontent.com/cs14095/cs14095.github.io/master/siri.gif)


わーい(=^▽^)
Oculus Remote が認識されない時の対処法

Oculus をインストールして Xbox コントローラーで操作できるようになったが、Oculus Remote のペアリングのフローを飛ばしてしまったのか、Oculus Remote が認識されなかったので別途設定した。

同じように困っている方のために記事を残しておく。

## Oculus Remote のペアリング方法

必要な作業を以下に記述していく。
公式のサポートはこちら：[Oculus 公式サポート](https://support.oculus.com/help/oculus/786412641494623)

![Oculus アプリを起動](http://res.cloudinary.com/djgriccu9/image/upload/v1474605675/oculus-app_gpryq2.png)
Oculus アプリを起動。ギアマーク > Settings を選択

![Settings から Devices を選択](http://res.cloudinary.com/djgriccu9/image/upload/v1474605663/oculus-settings_wtr7zb.png)
Settings から Devices タブを選択（自分はペアリング完了しているので、ここで既に ON になっていることはお気になさらず）

![Configure Rift から Add Remote を選択](http://res.cloudinary.com/djgriccu9/image/upload/v1474605657/oculus-add-remote_omgn1t.png)
Configure Rift > Add Remote を選択

![ペアリングの設定画面](http://res.cloudinary.com/djgriccu9/image/upload/v1474605662/oculus-pairing_by7w7n.png)
ペアリングの設定画面が開くので、指示の通り Remote のボタンを押す

![Remote pairing](http://res.cloudinary.com/djgriccu9/image/upload/v1474605655/oculus-remote-found_yasagi.png)
こうなって

![Remote pairing 2](http://res.cloudinary.com/djgriccu9/image/upload/v1474605658/oculus-remote-waiting_fbgtig.png)
こうなるのでまたボタンを押して

![ペアリング完了](http://res.cloudinary.com/djgriccu9/image/upload/v1474605655/oculus-remote-paired_rurhrs.png)
ペアリング完了。

![Devices Remote](http://res.cloudinary.com/djgriccu9/image/upload/v1474605663/oculus-settings_wtr7zb.png)
Devices タブで Remote が ON になっていることが確認できれば OK。

元記事はこちら：[Oculus Remote が認識されない時の対処法（Oculus コントローラーのペアリング）](http://monopocket.net/blog/oculus/oculus-remote-pairing/)
React Nativeの開発環境構築からアプリ起動まで

# React Native開発環境構築
https://facebook.github.io/react-native/docs/getting-started
に従ってセットアップ。

## Node.jsインストール

```bash:brew経由の場合
brew install node
```

```bash:Nodebrew経由の場合
# Nodebrewをインストール
brew install nodebrew
mkdir -p ~/.nodebrew/src

# 利用可能なバージョン番号確認する場合は
# nodebrew ls-remote
# を実行

# Node.jsインストール
nodebrew install-binary v6.5.0
nodebrew use v6.5.0
```

## watchmanインストール

```bash
brew install watchman
```

## react-native-cliインストール

```bash
npm install -g react-native-cli
```

## （Android開発をする場合）Android Studioインストール
https://developer.android.com/studio/install.html
に従ってインストール。

- 環境変数に以下を設定。

```bash
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$ANDROID_HOME/platform-tools:$PATH
export PATH=$ANDROID_HOME/tools:$PATH
```

- Android SDK Manager（$ANDROID_HOME/tools/android）で
必要なバージョンのSDK、Build Toolsをインストールしておく。

これらの設定を忘れた場合、ビルド時に
「SDK location not found」や「adb: command not found」や
「failed to find Build Tools」が出るかも。

## （iOS開発をする場合）Xcodeインストール
[App Store](https://itunes.apple.com/jp/app/xcode/id497799835?mt=12)からインストール。

なお、Gradle Daemon については今回は入れずにスキップ。

# React Nativeプロジェクト作成 と アプリ起動
```bash
# プロジェクト作成
react-native init xxxx　　（xxxxは任意のアプリ名）

cd xxxx

# アプリ起動（Androidの場合）
react-native run-android

# アプリ起動（iOSの場合）
react-native run-ios
```
Composer のCustom Installer を使用する



https://github.com/composer/installers


はじめに

````
composer require composer/installers
````

## インストール先を変える

インストール先を変更するには`extra.installer-paths`を触る。配列で、パッケージ名を突っ込む感じ。

````
{
    "extra": {
        "installer-paths": {
            "your/custom/path/{$name}/": ["shama/ftp", "vendor/package"]
        }
    }
}
````

いちいちパッケージ名を特定していられない場合には、typeによる絞込や、Vendorによる絞込が可能。

````
{
    "extra": {
        "installer-paths": {
            "your/custom/path/{$name}/": ["type:wordpress-plugin"]
        }
    }
}
````

````
{
    "extra": {
        "installer-paths": {
            "your/custom/path/{$name}/": ["vendor:my_organization"]
        }
    }
}
````
terminal に現在作業中の git リポジトリのパスを強調表示する

現在作業しているディレクトリは、どこのgitリポジトリに所属しているのか、terminalでかんたんに確認できるようにしたかったので、少し調べてみました。

こんな感じの表示を行うようにしました。

![git_simple.png](https://qiita-image-store.s3.amazonaws.com/0/77617/c60659fa-b58b-40e8-b173-8cb7f57f2ff5.png)

gitリポジトリまでのパスは赤色で表示し、git配下のディレクトリは白色で表示しています。現在作業中のディレクトリが、どのgitリポジトリに含まれるのかすぐにわかるので、結構便利だと思います。

## 方法
.bashrc に次のソースを追記してください。

``` bash:.bashrc

##色の定義
_ps1_red="\e[31m"
_ps1_green="\e[32m"
_ps1_yellow="\e[33m"
_ps1_blue="\e[34m"
_ps1_purple="\e[35m"
_ps1_cyan="\e[36m"
_ps1_white="\e[00m"


## gitリポジトリを強調したパスを取得
function working_git_dir {
      if git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
       _git_dir=$(git rev-parse --show-toplevel)
 
       _sub_dir=$(echo $(pwd) | sed "s|${_git_dir}||g")
       _work_dir=${_ps1_red}${_git_dir}${_ps1_white}${_sub_dir}

       echo -e ${_work_dir}
    else
       echo $(pwd)
    fi
}

PS1="\u@\h:\$(working_git_dir)\$(__git_ps1)\n\$"

```

## 解説
gitリポジトリまでのパスを強調表示するには、以下の情報が必要です。
・現在のディレクトリがgitに含まれているか。
もし含まれているなら
・gitリポジトリのルートディレクトリのパス
・gitリポジトリのルートディレクトリから、カレントディレクトリまでの相対パス
が必要になります。
以上の情報が取得できれば、gitリポジトリのルートディレクトリだけを着色してやれば良いです。

### 現在のディレクトリがgitに含まれているか。

```
git rev-parse --is-inside-work-tree 
```

でカレントディレクトリがgitリポジトリの管理下になっているのか調べることができます。
なので、このコマンドを利用して、もしgitリポジトリ管理下のときの処理を記述していきます。

### gitリポジトリのルートディレクトリのパス
```
git rev-parse --show-toplevel
```
上記コマンドで、gitリポジトリのルートディレクトリが取得できます。

### gitリポジトリのルートディレクトリから、カレントディレクトリまでの相対パス

```
_git_dir=$(git rev-parse --show-toplevel)
echo $(pwd) | sed "s|${_git_dir}||g"
```

上記コマンドで、gitリポジトリのルートディレクトリから、カレントディレクトリまでの相対パスを取得しています。

### terminalに反映する
terminal の表示に反映するには、PS1という変数を上書きします。

```
PS1="\u@\h:\$(working_git_dir)\$(__git_ps1)\n\$"
```
各種値の解説
\u ：ユーザー名
\h ：ホスト名
\$(working_git_dir)　:gitディレクトリを強調表示したパス
\$(__git_ps1) ：現在のgitブランチ
\n ：改行


## あとがき
terminalの表示を、自分の望み通りにするのは結構楽しいですね。ぜひ、自分にあったterminalになるように、皆さんも改良してみてください。
野球小僧がプログラミングを勉強しはじめて思ったこと

今まで野球としかしてこなかった僕が大学に入ってプログラミングを初めて思ったことをつらつら述べます。
#とりあえず最初はHTML/CSSをやりました
- 今まで見る側だったWebサイトを作れるって楽しい
    - どんどん自分がやればやるほど綺麗になってたのしいです。
- なんでうまくいかないのか分からない
    - 本当になにが起こっているのか分からないバグが発生してぶつぶつ独り言が増えました。
    - でも、てきとーにいじっているとなぜか治って、奇声をあげます。
- 奥が深すぎる
    - 数え切れないくらい属性があるっぽいので、キリがなさそうです。
    - 綺麗にみせる技術もいっぱいあって、永遠に勉強できそうです。

#アルバイトでプログラミングやってみました
- 出版社でwebアプリケーション開発という名目のアルバイトする機会をもらえることに
    - だいたいやらなければいけない事の半分以上は分からない技術でできていたので、ひたすらぐぐりました。
    - 基本的に一発ではうまく作動しないことばかりで常にバイト先のオフィスで奇声あげてました。
- でも、しょぼいものでも自分でものを作り上げた時のうれしさはハンパない
    - プロダクトと呼べるかもあやしいものでしたが、はじめて自分で作り上げたときは苦労が報われた気がして感慨深かったです。

#次にUnityをさわりました
- ゲーム作るって果てしない
    - ゲームを一作作るのにどれだけの努力が必要かがわりました。
    - もうクソゲーなんて言えません。
- 本買ってやってみたけど写経に次ぐ写経
    - やっぱ分からないうちは写経がベストなんですかね...

#最近Reactを始めました
僕が所属している学生団体のサービス開発でReactでの制作部分を担当することになり、Reactの勉強始めました。

- 今まで見てきたのと違って意味わからん
    - 今まで見てきた言語と雰囲気がまったく違って意味がわかりませんでした。
- codecademyのReactコースとO'Reilly Japan - 入門 Reactをやってみた
    - ある程度ならコード読んでふーんくらいになりました。
- でもやっぱり開発にはほど遠いので、先輩エンジニアとペアプロすることに...
    - 今まで僕が勉強していたReactのコーディングは時代遅れだったそうです（泣）
    - なんとなくだったところを一から説明を受けたり、バックグラウンドを聞くことで知識を深められました。
        - ペアプロ最高！！

#まとめ
- とりあえずこの半年でプログラミングに必要だと思ったのは忍耐力!!
    - 前述の通り野球小僧だったのでこの辺は申し分ありません。
- プラスぐぐり力!!
    - ほかのエンジニアさんの話きいてもだいたい仕事するときに大量に知らない事が発生するっぽいので、やっぱりググる力がものを言う世界におもいます。
- プログラミング楽しい！！
    - やっぱりいろいろ苦労するけど、自分でプロダクトつくれるって最高ですよね！！


ご清聴ありがとうございました。
次のQiitaの投稿は、コーディング技術やアカデミックな投稿をできるように精進します!!
【Xcode8】色と画像を表現する新しいリテラル

#これまでのリテラル
リテラルは、文字列だとか数値の値のことだと思って大丈夫だと思います。
正確な定義がわかる人がいましたら、コメント欄で教えてもらえると嬉しいです。
基本的なリテラルの表現を以下に挙げます。

##文字列リテラル
String型のオブジェクトに格納できる"（クォーツ）で括られた文字列ですね。

```ruby:文字列リテラル
let stringLiteral = "これは文字列リテラルです😃"
```

##整数リテラル
Int型のオブジェクトに格納できる数値です。

```ruby:整数リテラル
let intLiteral = 123
```

データ型を確認すると
のように型推論されて「Int」になります。

##実数リテラル
いわゆる浮動小数点数を表現します。
Double型とFloat型があり、それぞれ精度が異なります。

```ruby:実数リテラル（Double型）
let doubleLiteral = 1.23
```

型推論をさせると、少数点数リテラルは自動的にDouble型になります。
Float型にしたい場合は、型を明示します。

```ruby:実数リテラル（Float型）
let floatLiteral: Float = 12.3
```

#新しいリテラル
Xcode8から、リテラルにカラーとイメージを表現できるようになりました。
とても直感的なコードになるので、積極的に使っていきたいところです。
慣れないと、なんか気持ち悪いですが。

##カラーリテラル
UIColorクラスの型プロパティを指定する方法ですね。
ビューのバックグラウンドカラーや、ラベルのテキストカラーなどで使用します。

```ruby:今までの記述方法
let colorOfSea = UIColor.blue
```

上記の`UIColor` と記述するところで、`color literal` と記述してみましょう。
すると、入力補完が作動して`Color Literal` が選択できます。
![スクリーンショット 2016-09-23 13.06.58.png](https://qiita-image-store.s3.amazonaws.com/0/70476/a1decf5e-1987-d4e6-ecb2-39cbe9cf262e.png)

「Color Literal」を選択すると、カラーパネルが表示されるので好きな色を選択しましょう。
![スクリーンショット 2016-09-23 13.07.05.png](https://qiita-image-store.s3.amazonaws.com/0/70476/a0b1a550-ce4d-ceca-84ad-90457741317d.png)

型を確認すると`UIColor` になっています。
![スクリーンショット 2016-09-23 13.10.21.png](https://qiita-image-store.s3.amazonaws.com/0/70476/c7b47981-98af-9f14-29da-97e47e1f6f5b.png)

ただし、このカラーリテラルはUIKitフレームワークがインポートされている必要があるようです。`import UIKit` が記述されていないと...
![スクリーンショット 2016-09-23 13.07.22.png](https://qiita-image-store.s3.amazonaws.com/0/70476/a0ae93af-13e0-5846-1ba4-28353edfaa46.png)
型が推論できないとうことで、エラーになります。
UIColorクラスを使うことになるので当然ですね。

##イメージリテラル
カラーだけでなく、イメージファイル（画像）もリテラルで扱えるようになりました。
このプロジェクトには、「iPhone.png, coffee.png, money.png」を用意しています。
![スクリーンショット 2016-09-23 13.03.36.png](https://qiita-image-store.s3.amazonaws.com/0/70476/4f452a43-485c-5e7c-434e-63c606836764.png)

画像などを扱うとき、今まではこのように記述していました。

```ruby:今までの記述方法（画像）
let iPhone = UIImage(named: "iPhone")
```
新たに可能になったリテラル表現では、上記`UIImage` の部分で`image literal`と入力します。すると、やはり入力補完が作動されるので`Image Literal` を選択します。

![スクリーンショット 2016-09-23 13.28.16.png](https://qiita-image-store.s3.amazonaws.com/0/70476/9e75fe07-db65-f666-2ec4-d768f49c3c80.png)

パネルにプロジェクトに用意されている画像ファイルが表示されるので、任意の画像を選択します。すると、コード内にサムネイルが表示されて直感的といえば直感的な見た目になります。
![スクリーンショット 2016-09-23 13.32.33.png](https://qiita-image-store.s3.amazonaws.com/0/70476/c0269ccd-68dd-a05a-a207-6aa08593b9cc.png)

データ型を確認すると、もちろん`UIImage` になっています。
![スクリーンショット 2016-09-23 13.34.51.png](https://qiita-image-store.s3.amazonaws.com/0/70476/58b0d899-6666-5db8-20e7-1fcae9cd5447.png)
このリテラルもUIKitに依存しているということですね。

#雑感
新しいリテラルは、Xcode8の新機能のわかりやすい部類に入るかと思いますが、バリバリのプログラマにはちょっと見た目が気持ち悪いと感じるかもしれません。使われた画像のファイル名を確認するのもなんか不便です。
私が思うに、この新しいリテラルはSwiftを小・中学生などのより若い世代に親しんでもらうのが目的ではないかと思います。iPadで本格的なSwiftプログラミング環境が整ったことと同じタイミングで、リテラルが増えたのは偶然ではないでしょう。
laravel appzcoder/crud-generatorのcrudコマンド

#laravel [appzcoder/crud-generator](https://github.com/appzcoder/crud-generator)のcrudコマンド

[appzcoder/crud-generator](https://github.com/appzcoder/crud-generator)のcrudコマンドが少しわかりづらかったのでメモ

`php artisan crud:generate Posts --fields="title#string; content#text; category#select#options=technology,tips,health" --view-path=admin --controller-namespace=Admin --route-group=admin`

##viewでradioにしたい場合
--fields="...; カラム名#型#radio=value1,value2,... ; ..." ...

例
```...; is_valid#boolean#radio=0,1; ...;```

select等も同じ要領で。
【メモ】Linuxで圧縮ファイルを展開せずにそのままgrepする

- gzファイルなどの圧縮ファイルをgrepしたい場合

`zgrep '2016-09-23' log_file.gz`

他にもzcatとかあるらしい、知らなかった。


～おまけ～

- grepした後「バイナリー・ファイル(標準入力)は一致しました」と出る場合

制御コードなどが入っているためバイナリファイルとして認識されてしまうのが原因。
「-a」オプションを付けてテキストとして検索する。


参考URL：
[gzのファイルを展開せずにgrepする](http://qiita.com/aaaaAAAA1111/items/7b56b2f5c3073f8f6b19)

[Linuxのgrep検索で「バイナリー・ファイル(標準入力)は一致しました」と表示される原因と解決方法](http://nobuneko.com/blog/archives/2013/04/linux_grep_binary_files_text.html)
ncコマンドを使わないSSH ProxyCommandの設定方法

OpenSSH 5.4以上では-Wオプションを使用することでncコマンドがインストールされていないサーバもProxyCommandで利用することができるようになっています。

## これまでのncコマンドを使った書き方

```
Host node-*
  ProxyCommand ssh proxy_host nc -w 6000 %h %p
```
## ncコマンドを-Wオプションに置換えた書き方

```
Host node-*
  ProxyCommand ssh -W %h:%p proxy_host
```

## 例

下記の例の様に記述すると、ssh nodes-node1など、nodes-*にマッチした際ににProxyCommandが使用される。

```
Host proxy_host
  HostName 10.0.0.1
  User ubuntu
  IdentityFile /Users/hoge/.ssh/proxy_key

Host nodes-*
  ProxyCommand ssh -W %h:%p proxy_host

Host nodes-node1
  HostName 192.168.0.1
  User ubuntu

Host nodes-node2
  HostName 192.168.0.2
  User ubuntu
```
クラウドとVPSを比べて

私はクラウドサーバを利用する前にレンタルサーバ、VPSを利用してきました。
特にVPSは個人的に利用する場合の選択肢として最有力です。

クラウドサーバを導入する際にメリットを聞かれることが多いのでまとめてみます。

|サービス| クラウド | VPS | レンタルサーバ |
|:-:|:-:|:-:|:-:|
|コスト| ×  | 〇 | ◎  |
|自由度|  〇 | 〇  |  × |
|性能| ◎  |  〇 | ×  |
|拡張性| ◎  |  △ | ×  |
|難易度| ×  |  △ |  ◎ |
|将来性| ◎  | 〇  | △  |

- コスト
レンタルサーバの圧勝です。
限定された機能を安価に提供するため月額利用料なども無料から用意されています。

- 自由度
サーバ自体のカスタマイズ性を表してみました。
クラウドもVPSもOS自体を選択出来るものが普通なので環境的に許される限りカスタマイズ可能です。

- 性能
CPU構成から自由に選択出来るクラウドに軍配があがります。
また解約や初期化を行わなくてもスケール変更が可能なので必要な性能に応じた構成をとれます。
レンタルサーバは特定の機能限定なら素晴らしいパフォーマンスを発揮することがあるので侮れません。

- 拡張性
サーバ単体以外の部分に関してどれだけ機能提供されているかを表してみました。
クラウドはサーバ以外の部分にどれだけ魅力を感じるかがポイントになると思います。

- 難易度
導入の容易さを表してみました。
クラウドもVPSもOSとサーバソフトウェアを理解していれば問題ありませんが、
FTPでHTMLファイルをアップロードして完了！なレンタルサーバには勝てません。

- 将来性
どんなインターネットサービスであろうと拡張、縮小、終了、世代交代など変化が起こります。
そのときに自社でサーバ、サービス、ネットワークなどを一元管理出来る点は非常に有利です。
エンジニア的にも知識の幅が広がるのでサービス利用しなくてもクラウドのコントロールパネルは一通り触ってみて
名称などの由来を調べてみることをお勧めします。

結構VPS有利な結果になりましたが、これはVPS歴が長かったのと
インターネットサービスを作る上でミドルウェアを自由に選択出来る時点で十分なことが多かったためだと思います。
クラウドは基盤となっている物理サーバの世代も随時新しくなって行きますし、
世のトレンドに合わせた機能が新サービスとして追加されるスピードも速いのでお勧めです。
PostgreSQLでトランザクション中の外部キーチェックを外す

MySQLばかり触っていたけど、PostgreSQLを使うことになったのでメモ。

いわゆる、MySQLの

```sql
SET FOREIGN_KEY_CHECKS=0;
```

みたいなやつ。

```sql
-- 外部キーチェックしない
SET CONSTRAINTS ALL DEFERRED;

-- 外部キーチェックする
SET CONSTRAINTS ALL IMMEDIATE;
```

transaction中のみ有効な模様。

https://www.postgresql.jp/document/9.5/html/sql-set-constraints.html

検索して引っかかったのが、「ALTER TABLE ... DISABLE TRIGGER ALL」とかで絶望していたんだけど、あるやん、って感じ。

ちなみに、見つけたきっかけはLaravelのPostgresGrammarの実装から。

https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php

```php
    /**
     * Compile the command to enable foreign key constraints.
     *
     * @return string
     */
    public function compileEnableForeignKeyConstraints()
    {
        return 'SET CONSTRAINTS ALL IMMEDIATE;';
    }

    /**
     * Compile the command to disable foreign key constraints.
     *
     * @return string
     */
    public function compileDisableForeignKeyConstraints()
    {
        return 'SET CONSTRAINTS ALL DEFERRED;';
    }
```

## 追記

どうやら、`SET CONSTRAINTS ALL DEFERRED`はテーブル作成時点で、`DEFERRABLE`にしておかないと有効にならない模様。

https://www.postgresql.jp/document/9.5/html/sql-set-constraints.html

> 制約にはその生成時点で、DEFERRABLE INITIALLY DEFERRED、DEFERRABLE INITIALLY IMMEDIATE、NOT DEFERRABLEの3つのうちのいずれかの性質が与えられます。 3番目のNOT DEFERRABLE制約は、常にIMMEDIATEモードであり、SET CONSTRAINTSコマンドの影響を受けません。

https://www.postgresql.jp/document/9.5/html/sql-createtable.html

> NOT DEFERRABLE
制約を遅延させることが可能かどうかを制御します。 遅延不可の制約は各コマンドの後すぐに検査されます。 遅延可能な制約の検査は、（SET CONSTRAINTSコマンドを使用して）トランザクションの終了時まで遅延させることができます。 NOT DEFERRABLEがデフォルトです。

デフォルトは`NOT DEFERRABLE`なので、やっぱり一時的に外部キーを外すしか無さそう…。
Salesforce と Dynamics CRM 間で取引先データを同期する方法

近年、SaaS の提供が広がりを見せています。  
SaaS を利用すると、「自社で設備を持つ必要がない」「システム保守の必要がない」などの利点があるため、導入を進めている企業も多いかと思います。

ところで、SaaS は通常、それ単体で使用するものです。ですが、1つのサービスだけで自社内のすべてをまかなえるわけではないため、CRM、ERP、グループウェアなどをそれぞれ個別に導入するというケースが多く見られます。

また、企業内にはこれまで運用されてきたシステムも多々存在しているはずです。
そういった自社専用のオンプレミスのシステムを残しつつ、SaaS も平行して導入する、というケースも多いのではないでしょうか。

このような状況では、次のような問題が発生します。

* 既存のシステムから SaaS へデータを移行したい
* 既存システムと SaaS を平行利用するため、既存システムと SaaS 間でデータを同期したい
* 複数の SaaS を導入していて、それら SaaS 間でデータを同期したい

SaaS とのデータ連携は、SaaS の提供するAPIを使用して行うことになります。
ところが、そのAPIはそれぞれの SaaS で異なっており、APIを利用するための用語や技術を新しく学習する必要があり、コストがかかります。  

*CData ドライバー* を利用すると、こういった異なるシステム/SaaS間のデータ同期を行うアプリケーションを容易に開発することができます。

例えば、ADO.NET 経由で、Salesforce の取引先データと Dynamics CRM の取引先企業データを同期する、
というアプリケーションも簡単に開発することができます。

![構成図.png](https://qiita-image-store.s3.amazonaws.com/0/141193/d9ee76dc-1ae6-d1df-5362-47ef114818be.png)

このアプリケーションの概要は次の通りです。

* Visual Studio 2015 C# による Windowsフォームアプリケーション
* Salesforce および Dynamics CRM への接続情報はアプリケーションの設定に持たせる
* インポートする対象(今回は取引先)を選択し、Salesforce および Dynamics CRM からデータを読み込む
* インポートしたい行を選択して、Salesforce から Dynamics CRM へデータをインポートする
* 取引先データの取引先番号(AccountNumber)が同じであれば、同じ取引先であるとみなし、インポート先に同じ取引先データがあればそれを更新し、なければ新規登録する

CData ドライバーを利用すると、このようなデータ同期アプリケーションを簡単に作成することができます。

このサンプルアプリケーションの詳細は、[こちら](http://qiita.com/kasoorimethi/items/a34483b9324d6dbb0903)を参照してください。
Herokuで2016/9/22から無料でSSL証明書を登録できるようになったので、既存のSSL Endpointから移行する方法

2016/9/22からHerokuのSSL利用が無料になった
https://blog.heroku.com/ssl-is-now-included-on-all-paid-dynos#feedback

既存のSSL endpointを利用している場合でもダウンタイムなしに移行できるそうだ
> You can migrate from the SSL:Endpoint add-on to Heroku SSL with zero downtime.

https://devcenter.heroku.com/articles/ssl#migrate-from-ssl-endpoint-to-heroku-ssl


残念ながら有料でHerokuを使っているユーザのみだが、月々7ドルのHobbyプランでも利用できる
既存の方法では月20ドル、年240ドル節約できるようになるのでけっこうお得

----

# 新方式のSSLのAddonを追加する

git 管理しているアプリのディレクトリへ移動する
公開鍵(example.crt)と秘密鍵(example.key)のパスを指定し、
**-type sniオプションを付けて**実行するのがポイント

```
> heroku certs:add example.crt example.key --type sni -a application_name
```

# 古いSSL:Endpointを削除する

##[重要] 独自ドメインを設定している場合はDNSの浸透待ちが必要

うっかりすぐ削除してしまうとドメイン名でアクセスしてもアクセスできなくなるので注意

**Route53など別のサービスでDNS設定をしている場合はそちらの設定もする必要がある**


> You should note that it may take up to 24 hours before your DNS is fully propagated globally.

heroku的には24時間あれば浸透するらしい

### DNSの浸透待ちの確認方法

cnameを確認して、自分のドメイン名.herokudns.comになっていればひとまず自分が利用しているDNSには浸透していることになる。

ただDNSの浸透待ちには罠(ソフトバンクのiPhoneからつなぐとつながらないとか)がいっぱいあるのでHerokuが言うように24時間は待ったほうが良い。


DNS浸透済みの例

```
> dig www.example.com cname +short
www.example.com.herokudns.com.
```
 

だめな例

```
> dig www.example.com cname +short
shimane-xxxx.herokussl.com.
```

### 古いSSL:Endpointを削除する

``` 
> heroku addons:destroy ssl -a application_name
```
PythonとPyUSBでFX-5204PSと通信する

手軽に電力使用量を計測したいなぁと思って周りを見回すと、[富士通コンポーネントのスマート電源コンセントFX-5204PS](http://www.fujitsu.com/jp/group/fcl/products/smart-power-strip/smart-power-strip/index.html)が落ちていました。発売時期はかなり前ですが、まだ継続して生産されている模様です。

FX-5204PSにはUSB Bメスポートが付いています。そこからシリアルか何かで使用量が吐き出されているのかな、と思いきや、専用のデバイスドライバーが必要だということが判明。一瞬使うのをやめようかと思ったけれど、検索してみると2011年（本稿から5年以上前）にすでにデバイスドライバーを書いた人がいました。

- [usps - OpenBSD manual pages](http://man.openbsd.org/OpenBSD-current/man4/usps.4)

OpenBSDか...。しかも知っている人が作者の模様。

他に検索してみると、

- [SEILとスマートコンセント](https://www.seil.jp/blog/17.html)

SEILか...。OpenBSDからの移植のようです。

でも僕が使いたいのはLinuxとかMacとかなんです。OS依存のドライバーを作り、継続してメンテナンスしていくことも困難だと考えると、ここは手軽にユーザー空間USBライブラリで使うのが良いと判断しました。OpenBSD版ドライバーを書いた人にソースコードの内容をあれこれ聞きながら[PyUSB](https://walac.github.io/pyusb/)で書いてみたのが[FX5204PSモジュール](https://github.com/keiichishima/FX5204PS/)です。Pythonなのでいろんなプラットホームで動作します。OS X（macOSは未テスト）とかでも。

同時に二つ以上のデバイスが接続された場合を考慮していないなど、少し手抜きですが当初の目的は達成しました。

``pygame``でいい加減に作ったビジュアライザーで状態を表示すると以下のような感じになります。

<img width="400" alt="Untitled.png" src="https://qiita-image-store.s3.amazonaws.com/0/102672/7b0c0a5f-6af2-047f-484e-0ca7f7bc9454.png">

FX5204PSモジュールで取得できる情報はおおよそOpenBSDドライバーと同じで、電圧、周波数、温度、コンセントごとの消費電力（瞬時値、平均値（デフォルトで5秒でリセット）、最大値（デフォルトで5秒でリセット））となっています。

バグなど見つけた方はgithub経由で報告いただければ可能な範囲で対応したいと思います。
[Vagrant](box作成) CentOS 4.8 (32bit) (Packer使用)

## 概要
- Vagrant Packerで、CentOS 4.8 (32bit)のbox作成する。 
- [github::hfm/mysql-allstar](https://github.com/hfm/mysql-allstar) で、かつて、`centos-4.8-i386.json`があったらしいので、それを使わせていただく。（ので詳しいことはよくわからない.）
- GuestAdditionは、boxに入れないので、vagrantプラグインの、`vagrant-vbguest`を使って、初回up時にインストール。<br>vagrantインストール後に、`% vagrant plugin install vagrant-vbguest` をする。
-  https://atlas.hashicorp.com/mt08/boxes/centos49-i386/versions/0.1 にboxをアップしたので、<br>`vagrant init mt08/centos49-i386; vagrant up` でいけるハズ。
- 初回up時、 "default: Warning: Authentication failure. Retrying..."と繰り返し出てきたら、
    - <del>CTRL-Cで中断</del>もう一個、`Git Bash Here`を開く。
    - `vagrant ssh`で、パスワード`vagrant` でログイン
    - `chmod 600 ~/.ssh/authorized_keys; exit`
    - とすると<del>次回から、OKになるはず。(`vagrant reload`で再起動してみよう)</del>↑のRetrying...が終わって、処理が継続される。

## 環境
- ホスト: Windows 10 (64bit)
- [git](https://git-scm.com/download) for windows 2.10.0 (Unix関係のツールのため.. bashとか、dos2unixとか)
- [VirtualBox](https://www.virtualbox.org/wiki/Downloads) 5.1.6 と、拡張パック
- [Vagrant](https://www.vagrantup.com/downloads.html) 1.8.5

- [Vagrant Packer](https://www.packer.io/downloads.html) 0.10.1 - zipを解凍して、`vagrant.exe`とおなじ、`C:\HashiCorp\Vagrant\bin`におくと良いかも。
- インストールDVDのISOイメージを、 `C:\CentOS-4.8-i386-binDVD.iso` となるようにおいておく。

## 手順
1. 作業フォルダ作成 : `C:\vagrant\centos48`
2. git, VirtualBox(とExtensionPack), Vagrant をインストールして、再起動

3. packer.exeは、ダウンロードして、`C:\HashiCorp\Vagrant\bin\packer.exe`となるようにおく。<del>作業フォルダに解凍しておく。　=> `C:\vagrant\centos48\packer.exe`</del>
4. エクスプローラで、`C:\vagrant\centos48` を開いて右クリック、`Git Bash here`
5. やってなかったら `vagrant plugin install vagrant-vbguest`
6. clone と v0.2 をcheckoutして、パッチ当てて、ファイルをコピー。

    ```bash:v0.2をチェックアウト
git clone https://github.com/hfm/mysql-allstar.git
cd mysql-allstar
git tag -l
git checkout refs/tags/v0.2
#
sed -i -e 's/sudo-1.8.9-6.el4/sudo-1.8.18-1.el4/g' http/ks-centos4.cfg
sed -i -e '/virtualbox.sh/d' -e '/package.sh/d' -e '/mysql-build.sh/d' -e 's/centos4.8-i386-mysql-allstar/centos4.8-i386/g' packer/centos-4.8-i386.json
sed -i -e 's/http:\/\/ftp.riken.jp\/Linux\/centos\/4.8\/isos\/i386/file:\/\/\/c:/g' packer/centos-4.8-i386.json
#
sed -i -e '/^cat/i sudo yum install -y dkms kernel-devel bzip2exit' scripts/vagrant.sh
sed -i -e '/^cat/i sudo yum groupinstall -y "Development Tools"'  scripts/vagrant.sh
#
cp packer/centos-4.8-i386.json ..
cp -rv scripts http ..
cd ..
mkdir builds
```
6. packer実行<br>`packer.exe build centos-4.8-i386.json`
7. 待つ
8. `builds/centos4.8-i386.box` に成果物。
9. 使ってみる。

    ```bash
vagrant box add --name CentOS-4.8-i386 ./builds/centos4.8-i386.box
vagrant box list # 確認
vagrant init CentOS-4.8-i386
vagrant up
#"default: Warning: Authentication failure. Retrying..."と繰り返し出てきたら。。。
# CTRL-Cして、
vagrant ssh # password 'vagrant'でログイン
chmod 600 ~/.ssh/authorized_keys; exit
#
vagrant reload #再起動... gracefulでないかも..
#
# 起動したら、sshログイン
vagrant ssh
#
# VMの電源OFF
vagrant halt
```

## その他
- なんで、CentOS4系の32bitないの...
Angular2でバリデーションメッセージを内包したカスタムコントロールコンポーネントを作成する

# やりたいこと

* カスタムコントロールをコンポーネント化したい
* コンポーネントに対して model-based form を使いたい
* バリデーション後のエラーメッセージ等をコンポーネント内に内包したい

# カスタムコントロールを作るには

`NgModel`や`FormControlName`に対応するには`ControlValueAccessor`を実装すればいいっぽい。
以下の記事を参照した。
[Custom Form Controls in Angular 2 by thoughtram](http://blog.thoughtram.io/angular/2016/07/27/custom-form-controls-in-angular-2.html)

# コンポーネント内からバリデーションエラーを検知する

普通に作ろうとすると、内部から`FormControl`の`errors`オブジェクトにアクセスできず、何がバリデーションエラーになっているのかわからないため、メッセージの出しようがない。
結論としては、`Injector`から`NgControl`を取り出せば可能のようだ。

# 最終的なコード

こんな感じになった

```ts
@Component({
  selector: 'custom-input',
  template: `
  <input type="text" [(ngModel)]="value" (blur)="onBlur()"/>
  <div *ngIf="ngControl && ngControl.invalid && (ngControl.touched || ngControl.dirty)" class="error">
    <span *ngIf="ngControl.errors.required">必須項目です。</span>
  </div>
  `,
  styles: [`
  :host {
    display: inline-block;
    position: relative;
  }
  .error {
      display: block;
      top: calc(100% + 12px);
      position: absolute;
      padding: .5em 1em .4em;
      background-color: #f66;
      border: 1px solid #f00;
      border-radius: 5px;
      color: #fff;
      z-index: 10;
  }
  .error:after, .error:before {
    content: '';
    position: absolute;
    bottom: 100%;
    left: 15px;
    border: solid transparent;
  }
  .error:after {
    margin-left: 1px;
    border-bottom-color: #f66;
    border-width: 7px;
  }
  .error:before {
    border-bottom-color: #f00;
    border-width: 8px;
  }
  `],
  providers: [{
    provide: NG_VALUE_ACCESSOR,
    useExisting: forwardRef(() => CustomInput),
    multi: true
  }]
})
export class CustomInput implements ControlValueAccessor, OnInit {
    private innerValue: any = '';
    private ngControl: NgControl;
    
    private onTouchedCallback = () => {};
    private onChangeCallback = (_: any) => {};

    constructor(private injector: Injector) { }
    
    ngOnInit(): void {
      this.ngControl = this.injector.get(NgControl);
    }

    get value(): any {
        return this.innerValue;
    };

    set value(v: any) {
        if (v !== this.innerValue) {
            this.innerValue = v;
            this.onChangeCallback(v);
        }
    }

    onBlur() { this.onTouchedCallback() }

    writeValue(value: any) {
        if (value !== this.innerValue) {
            this.innerValue = value;
        }
    }
    registerOnChange(fn: any) { this.onChangeCallback = fn }
    registerOnTouched(fn: any) { this.onTouchedCallback = fn }
}
```

https://embed.plnkr.co/x2mpgjRiz0i6lfPHIgX4/
R > グラフ > plot() > 複数のデータセットを載せる

```txt:動作環境
RStudio 0.99.903 on Windows 7 pro
R version 3.3.1
```

R機能マップ 
http://qiita.com/7of9/items/0f911bcb95d3a8bbd703

plot()において複数のデータセットを載せられないかと思った。

参考 http://stackoverflow.com/questions/2564258/plot-two-graphs-in-same-plot-in-r
参考 http://www.harding.edu/fmccown/r/

```R
> tx<-c(1,2,3)
> ty1<-c(8,6,5)
> ty2<-c(4,3,2)
> ty3<-c(1,2,3)
> plot(tx,ty1,type="b",ylim=c(0,10))
> lines(tx,ty2,type="b",col="red")
> lines(tx,ty3,type="b",col="blue")
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/b2de551c-20d0-04d4-052d-95e5ad802324.png)

これで重森三玲ができそうだ。
公式ツールを利用して簡単にReactの開発環境を構築する

# はじめに
Reactの開発環境を構築するとき、
[Webpack,Babel等々を個別にインストール](http://qiita.com/drafts/0d5425fafa921315c133/edit)する形で
オリジナルの開発環境を整えてもいいけど、
いまは、Facebook公式の[Create React App](https://github.com/facebookincubator/create-react-app)が提供されているので、それを利用するととっても簡単。

# 手順
## create-react-appコマンドのインストール

```
npm install -g create-react-app
```

これで「create-react-app」コマンドが使えるようになる。

## プロジェクト作成

```bash
create-react-app xxxx　　　（xxxxは任意の名前）
```

ちょこっと時間かかるけど、作成完了すると、
以下のようなディレクトリ構成ができあがる。

```text
xxxx
├── README.md
├── index.html
├── node_modules
├── package.json
└── src
    ├── App.css
    ├── App.js
    ├── App.test.js
    ├── favicon.ico
    ├── index.css
    ├── index.js
    └── logo.svg
```

package.jsonはこんな感じ。

```json:package.json
{
  "name": "study-meeting-search",
  "version": "0.1.0",
  "private": true,
  "devDependencies": {
    "react-scripts": "0.4.3"
  },
  "dependencies": {
    "react": "^15.3.2",
    "react-dom": "^15.3.2"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  }
}
```

一見、webpackとかbabelとかeslintが無いように見えるけど、
実は「react-scripts」というのがラップしてくれていて、
これらの設定は、「/node_modules/react-scripts/config」の中にある。

```text:/node_modules/react-scripts/config
config
├── babel.dev.js
├── babel.prod.js
├── env.js
├── eslint.js
├── flow
│   ├── css.js.flow
│   └── file.js.flow
├── jest
│   ├── CSSStub.js
│   ├── FileStub.js
│   └── transform.js
├── paths.js
├── polyfills.js
├── webpack.config.dev.js
└── webpack.config.prod.js
```

# 参考
https://github.com/facebookincubator/create-react-app
R > Link > plot() > typeの指定 > 9通り / plot(tx,ty1,type="b",col="red")

```txt:動作環境
RStudio 0.99.903 on Windows 7 pro
R version 3.3.1
```

R機能マップ http://qiita.com/7of9/items/0f911bcb95d3a8bbd703

plot()ではtypeを指定することで、点のプロットや線のプロット、点と線のプロットなど選択できるようだ。

参考 http://cse.naro.affrc.go.jp/takezawa/r-tips/r/48.html

```R
> tx<-c(1,2,3)
> ty1<-c(4,5,6)
> plot(tx,ty1,type="b",col="red")
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/254203df-5ed8-814e-2761-55ba85ea618b.png)
macOS 10.12 Sierra にしたら ssh 構文エラーになった件

こんにちは、人柱の wnoguchi です。
一時期秘密鍵漏洩問題で世間を賑わした OpenSSH についてです。

1. CVE-2016-0777
1. CVE-2016-0778

- [OS XでOpenSSHクライアントの脆弱性「CVE-2016-0777」および「CVE-2016-0778」に対応する方法。 | AAPL Ch.](http://applech2.com/archives/47532924.html)

Mac はこういうことに対応が遅いことで有名ですが、 Sierra にしたら OpenSSH のメジャーバージョンが上がって

```
✗˵╹◡╹˶✗  ~ ssh hogehoge
/Users/wnoguchi/.ssh/config: line 5: Bad configuration option: useroaming
/Users/wnoguchi/.ssh/config: terminating, 1 bad configuration options
```

こうなり、

```
✗˵╹◡╹˶✗  ~ ssh -V
OpenSSH_7.2p2, LibreSSL 2.4.1
```

こうなって

http://www.openssh.com/txt/release-7.2
> * ssh(1), sshd(8): remove unfinished and unused roaming code (was
>   already forcibly disabled in OpenSSH 7.1p2).


```:~/.ssh/config
  Host *
    UseRoaming no
```

の `UseRoaming no` は不要になりました。
R: POSIXct -> Date で日付がズレる

何も考えずに`POSIXct`クラスを`Date`クラスに変換すると、ときどき怖いことが起こる。

```r
a <- as.POSIXct("2016-09-23")
print(a)
#[1] "2016-09-23 JST"
as.Date(a)
#[1] "2016-09-22"
```

どうやらタイムゾーンの関係らしい。

```r
as.Date(a, tz = "Japan")
#[1] "2016-09-23"
```

`POSIXlt`クラスなら大丈夫（？）

```r
b <- as.POSIXlt('2016-9-23')
as.Date(b)
#[1] "2016-09-23"
```

でも僕は怖いので一度文字列に変換する処理を挟んだりします。

```r
as.Date(strftime(a, "%Y-%m-%d"))
[1] "2016-09-23"
```
Pyramid チュートリアルをやってみたメモ

[Pyramid](http://docs.pylonsproject.org/projects/pyramid/en/latest/index.html)のことをもう少し知ろうと思い、[チュートリアル](http://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tutorial/index.html)をやってみました。つまづいた部分のメモです。

# Prelude: Quick Project Startup with Scaffolds

手順通りにやったつもりだが、エラーになった。

```bash
% pserve development.ini --reload
Starting subprocess with file monitor
Traceback (most recent call last):
  File "/usr/local/bin/pserve", line 9, in <module>
    load_entry_point('pyramid', 'console_scripts', 'pserve')()
  File "/usr/local/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 60, in main
    return command.run()
  File "/usr/local/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 371, in run
    global_conf=vars)
  File "/usr/local/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 406, in loadapp
    return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
  File "/usr/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 247, in loadapp
    return loadobj(APP, uri, name=name, **kw)
  File "/usr/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 271, in loadobj
    global_conf=global_conf)
  File "/usr/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 296, in loadcontext
    global_conf=global_conf)
  File "/usr/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 320, in _loadconfig
    return loader.get_context(object_type, name, global_conf)
  File "/usr/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 454, in get_context
    section)
  File "/usr/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 476, in _context_from_use
    object_type, name=use, global_conf=global_conf)
  File "/usr/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 406, in get_context
    global_conf=global_conf)
  File "/usr/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 296, in loadcontext
    global_conf=global_conf)
  File "/usr/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 328, in _loadegg
    return loader.get_context(object_type, name, global_conf)
  File "/usr/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 620, in get_context
    object_type, name=name)
  File "/usr/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 640, in find_egg_entry_point
    pkg_resources.require(self.spec)
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 968, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 854, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'scaffolds' distribution was not found and is required by the application
```

原因は、virtualenvにインストールしたpyramid以外のものが使われていたこと。

```bash
% which pserve
/usr/local/bin/pserve
```

システムにインストールされていたpyramidをアンインストールし、virtualenvのものが使われるようになったら、上記のエラーは起きなくなりました。[See also](https://github.com/Pylons/pyramid/issues/1059)

```bash
% which pserve
/Users/mkisono/.pyenv/shims/pserve
```
JDK 9 Early Access Releasesのjjsは継続行対応していた

JDK 9 Early Access ReleasesでJShellを試すつもりがjjsに。
https://jdk9.java.net/download/

```js

boolean a = true
if(a == true) {
    print("True")
}
```

JDK 1.8.0_102は、if以降を1行で入力しないとエラーになります。
![jjs8.png](https://qiita-image-store.s3.amazonaws.com/0/23378/6354fbda-7130-b472-16ad-7eff3c25ff1d.png)

JDK 9 Early Access Releasesは、～{[Enter]後に継続入力プロンプト「…> 」になります。
}[Enter]後にif文が実行されます。
![jjs9.png](https://qiita-image-store.s3.amazonaws.com/0/23378/02d7dce6-880d-4011-a489-a973eff9d44d.png)

勿論JShellは複数行対応されています。
![jshell.png](https://qiita-image-store.s3.amazonaws.com/0/23378/c482dd6e-4f31-27c9-c5a0-859be8778690.png)
irb が動くシンプルな何かを作る

# irb を起動する

```rb:sample1.rb
require 'irb'

IRB.start
```

上記ファイルを作ったら、 ruby コマンドで実行すると、irb が起動できます。

```irb
$ ruby sample1.rb 
irb(main):001:0>
```

# モジュールを読み込む
`ExtendCommandBundle` ってのがあるので、読み込みたいモジュール名をincludeメソッドに渡します。

```rb:sample2.rb
require 'irb'

module FooModule
  def foo
    puts 'bar'
    'baz'
  end
end

console = IRB
console::ExtendCommandBundle.include(FooModule)
console.start
```

すると、module で定義したメソッドをirb 上で使えるようになります。

```irb
$ ruby sample2.rb 
irb(main):001:0> foo
bar
=> "baz"
irb(main):002:0>
```
IntelliJ IDEA 2016.2.3 の Terminal で Ctrl キーがきかない

掲題のとおり。
Terminal で Ctrl キーがきかず、Ctrl+C とか Ctrl+Z とかの送信に支障が出てしまっていた。
Stackoverflow でも話題にされていて、`IntelliJ IDEA 2016.2.3` の Mac 版で発生している模様。

http://stackoverflow.com/questions/39372301/control-key-not-working-on-embedded-terminal-mac-os

Stackoverflow でも提案が解決済みになっているように、`IntelliJ IDEA 2016.2.4` にアップデートすれば解決する。

<img width="199" alt="スクリーンショット 2016-09-23 10.54.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/47993/720f7e65-826a-05f6-8b9f-b8d3d27f7308.png">
TinyMCEの文字サイズ変更をアイコン化する

以前書いたこれの追記記事です。
http://qiita.com/qwe001/items/9a86839db4da5a7ab763

### 何がしたいか

今回、フォントサイズの変更機能の実装が必要だったのでつけたわけですが、
こちらのボタンは「Font Sizes」という文字列となっています。

![4tcUT.png](https://qiita-image-store.s3.amazonaws.com/0/130352/b67fe521-c797-83ef-4355-6ae81dfd6b21.png)


で、これを日本語化すると「フォントサイズ」となるわけですが、
TinyMCEのCSSでは width: 90px; と書いてあるので、入りきらず、表記が「フォントサ…」となっちゃいます。ださすぎわろた。

![2016-09-23_102855.png](https://qiita-image-store.s3.amazonaws.com/0/130352/56aae251-ccac-6e72-ce60-e4ed2391cdcb.png)

TinyMCEで使用されている全アイコンを調べましたが、フォントサイズにあたるアイコンはありませんでした

![gnsLT.png](https://qiita-image-store.s3.amazonaws.com/0/130352/9d549e7a-25a0-89d6-e28a-9fd54645a1ab.png)

なので、デフォルトの表記を「サイズ」にしつつ、
左側に「A」みたいなアイコンをつけます。
イメージとしてはこんな感じ。

![2016-09-23_103706.png](https://qiita-image-store.s3.amazonaws.com/0/130352/43a9d1d5-cb3f-16cb-3d05-43faeae77f7e.png)

![2016-09-23_103716.png](https://qiita-image-store.s3.amazonaws.com/0/130352/3092ffc7-40fa-b071-615b-996191313a6f.png)

### 実装

##### JSファイルを編集

* js/tinymce/langs/ja.js
* 「フォントサイズ」という文字列を「サイズ」に変更します。
* 31行目らへんを次のように変更

```
"Font Sizes": "\u30b5\u30a4\u30ba",
```

### HTML(CSS)ファイルを編集

* index.phpとかindex.htmlとかindex.blade.phpとかそういうの
* !importantをつけないとオーバーライドできないので注意
* widthはautoでもいいです。

```html+css
<link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css" rel="stylesheet">
<style type="text/css">
[aria-label^="Font Sizes"] .mce-txt {
	width: 60px !important;
	font-family: FontAwesome !important;
}
[aria-label^="Font Sizes"] .mce-txt:before {
	content: "\f031";
	margin-right: 5px;
}
</style>
```

最初はmce-txtクラスだけの指定でいけるだろうと思ってたんですが、どうもこのクラス他のボタン要素とかにも使ってたみたいです。
IDは私の環境ではmceu_4となっていますが、なんか他の人の環境だと番号が変わりそうな予感がしたので、属性セレクターで指定することに。

### デモ

日本語化ファイルのCDNはないので、デモでは文字列が英語なのと、widthがautoになっています。
一応こんな風になりますよってイメージということで。

http://codepen.io/qwe001/pen/VKPqqv
R > データ操作 > データ作成 > approx() + jitter() > 線形補間 + ノイズ付加

```txt:動作環境
RStudio 0.99.903 on Windows 7 pro
R version 3.3.1
```

R機能マップ http://qiita.com/7of9/items/0f911bcb95d3a8bbd703

スプライン補間ではどうも欲しいサンプルデータを作るのが難しい。

線形補間してノイズを足すことにした。

線形補間はapprox
https://stat.ethz.ch/R-manual/R-devel/library/stats/html/approxfun.html


```R
> x<-c(153,289,575,623,728,733,808,812,894)
> y<-c(653,453,349,454,453,525,526,607,622)
> plot(x,y)
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/3c9b7161-8606-da5b-5197-83e0924e2a7c.png)

```R
> z<-approx(x,y,n=100)
> plot(z)
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/d280ef5f-5d3e-5004-ef73-4c92ffe0d16f.png)

```R
> zz<-jitter(z$y, factor=1000)
> plot(z$x,zz)
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/e34afc54-159b-e224-2095-c0d817b83d42.png)
Mac上の iTunes と iPhone を 同期 すると 不明なエラー（-50） が出て、何度やっても同期出来ない。



# Mac上の iTunes と iPhone を 同期 すると 不明なエラー（-50） が出て、何度やっても同期出来ない。

## 事象
久しぶりにMac上のiTunesとiPhone6sの同期をしたら
`不明なエラーが発生しました（-50）`
と表示され同期ができない事象が発生。

## 環境
OSX Yosemite
iTunes 12.4.3.1
写真 1.0.1

iPhone6s
IOS 9.3.5

## 対応
[こちら](https://discussionsjapan.apple.com/thread/10145644?start=0&tstart=0)や[こちら](https://discussionsjapan.apple.com/docs/DOC-1032)を参考にMacの[ディスクのアクセス権を修復](https://support.apple.com/ja-jp/HT201560)を実施したところ解決。

具体的にはMacのSpotlightで「ディスクユーティリティ」を検索して起動し、`ディスクのアクセス権を修復`を実行。

## 原因
今回のケースは、アクセス権の問題でした。
恐らく、MacのSSD化やフュージョンドライブ化をした際に写真や音楽などのバックアップやリカバリで権限がおかしくなっていたようです。

以上
laravel を NetBeans でステップ実行しようとしたら NotFoundHttpException

# 現象

NetBeans のデフォルトでは php の最初の実行文（laravel の場合は public/index.php:22 の require 文）で止まるようになっています。デバッグ開始ボタンを押すとその行でちゃんと止まるので、xdebug 自体は問題なさそう。

ただ、その後実行継続ボタンを押すと、なぜか 
`NotFoundHttpException in RouteCollection.php line 161:`
と言われます。ちなみに、デバッグボタンではなくて単に実行ボタンを押しても同様。

NetBeans を通さずに、対象の URL を単にブラウザで開くと正しく表示されます。

# 環境構築手順

https://github.com/hotta/laravel-centos7 に従って laravel 環境構築
その後、`$ ansible-playbook /etc/ansible/jobs/xdebug.yml` で xdebug 導入。

母艦（Windows10）には元々 NetBeans 8.1 が入っていたので、新しくプロジェクトを作ってプロジェクトURLをVagrant 配下の VM (laravel.local) に向けます。laravel.local は母艦の hosts ファイルに登録してあります。

実行開始ファイルは public/index.php とします。

![laravel-netbeans.png](https://qiita-image-store.s3.amazonaws.com/0/47305/f723330a-caa2-dccf-6e6e-46e282799754.png)

NetBeans 自体の導入については、過去記事を参照してください：
[http://net-newbie.com/cakephp/xdebug-netbeans/](http://net-newbie.com/cakephp/xdebug-netbeans/)

# 原因

エラーメッセージの通り、経路がない（laravel から認識できない）のだろうということで、以下を追加：

```patch:laravel/app/Http/routes.php
--- routes.php  2016-09-23 10:18:53.202926712 +0900
+++ laravel/app/Http/routes.php 2016-09-23 10:18:57.578792645 +0900
@@ -18,6 +18,7 @@
 Route::get('/{name}', function ($name) { return 'hello! ' . $name; });
 Route::get('/', function () { return view('posts.index'); });
 Route::get('/', 'PostsController@index');
+Route::get('/public/index.php', 'PostsController@index');
 Route::get('/posts/create', 'PostsController@create');
 Route::get('/posts/{id}', 'PostsController@show');
 Route::get('/posts/{id}/edit', 'PostsController@edit');
```

これで無事に動くようになりました。
R > Link > splinefun > cubic (or Hermite) spline interpolation

```txt:動作環境
RStudio 0.99.903 on Windows 7 pro
R version 3.3.1
```

R機能マップ http://qiita.com/7of9/items/0f911bcb95d3a8bbd703

Rで使うspline()の情報を見た。

https://stat.ethz.ch/R-manual/R-devel/library/stats/html/smooth.spline.html

> Description
Perform <font color=red>cubic (or Hermite) spline</font> interpolation of given data points,...

> m 
(for splinefunH()): vector of slopes m[i] at the points (x[i],y[i]); these together determine the Hermite “spline” which is piecewise cubic, (only) once differentiable continuously.

piecewise の扱いに慣れれば自分が望んでいるものを得られるかどうか。
R > データ操作 > データ作成 > Spline Editorからスプライン補間されたデータ作成

```txt:動作環境
Spline Editor http://mbostock.github.io/protovis/ex/splines.html
RStudio 0.99.903 on Windows 7 pro
R version 3.3.1
ペイント v6.1
```

関連 http://qiita.com/7of9/items/293ab006e79a302d4fb4
R機能マップ http://qiita.com/7of9/items/0f911bcb95d3a8bbd703

Rで扱うデータを[Spline Editor](http://mbostock.github.io/protovis/ex/splines.html)を使って作ってみる。

### Spline Editorで作図

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/6b594700-f262-0d72-c6df-a0784bd231a4.png)

### ペイントで座標情報を得る

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/b9aa91e9-c87e-e876-eb5d-0811f120cfd8.png)

### Rで作図

座標は上下逆なので`-y`とした。

```R
> x<-c(197,370,486,542,795)
> y<-c(524,355,558,355,550)
> z<-spline(x,-y,n=100)
> plot(z)
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/4d9433a2-fbed-b442-48bb-ccfd9babcdb8.png)

元の図と異なる図になってしまう。
スプライン補間の種類が違う可能性がある。

微調整すれば自分が欲しいデータを作れる感じではある。
ターミナルからmacOSのソフトウェア・アップデートを行う方法

ソフトウェアをアップデートする場合、ほとんどの人はApp Storeを使っているはずである。同じことをどうしてもCLIで行いたい人は、Terminalから以下のコマンドを実行すればよい。

アップデートの確認(--listもしくは-lを使う):            

```shell-session
$ sudo softwareupdate --list   
```

この時、再起動が必要なアップデートには [restart] と記載されているはずである。

特定アプリのアップデートをインストールする場合(--installもしくは-iを使う): 

```shell-session
$ sudo softwareupdate --install iTunesX-12.5
```

更新可能な全てのアップデートをインストールする場合(--allもしくは-aを使う): 

```shell-session
$ sudo softwareupdate --install --all
```
onlineTool >Spline Editor

スプラインを使って二次元の図を扱える。
http://mbostock.github.io/protovis/ex/splines.html

- あいた空間でクリックすると点を追加
- 点を選択した状態でDeleteで点を削除

ここで作った点の座標情報をどう読取るかは要検討。
ペイントブラシを使うことになりそう。
RailsでのHelperの役割について

開発しているなかで、Helperの役割かModelの役割か迷うことがあったので、Helperの役割について考えてみました。

# よく言われているHelperの役割
View層の中で、単純な表示以外の処理を担当します。

# Modelとの使い分け

## 例
ログインユーザーが管理者権限がある場合は管理者メニューを表示、管理者権限がない場合はプロフィールを表示する。

### 変更前

```ruby:View.html.haml
-if @user.role == "admin"
  link_to "管理者メニュー", •••
-else
  link_to "#{@user.last_name} #{@user.first_name}様のプロフィール", •••
```

### 変更内容

#### 管理者権限があるかの判定
Modelに実装します。

```ruby:Model.rb
def admin?
  role == "admin"
end
```

#### リンク文言の生成
悩ましいですが、フルネームを生成するのはModel、それ以外はHelperという使い分けがいいのではないでしょうか。

```ruby:Model.rb
def full_name
  "#{last_name} #{first_name}"
end
```

```ruby:Helper.rb
def profile_link(user)
  "#{user.full_name}様のプロフィール"
end
```

### 変更後
```ruby:View.html.haml
- if @user.admin?
    link_to "管理者メニュー", •••
  else
    link_to profile_link(@user), •••
```

思想としては、データに関する処理はModel、表示に関する処理はHelperに実装なのですが、明確な切り分けってできないと思いました。「フルネームの生成」が表示に関する処理なのかが曖昧なため、Helperで実装する人もいるのではないでしょうか。
Draperという設計もあるらしいですが、結局のところ、「表示に関する処理」というところを明確に線引きできなければ根本解決にならず、Draperに実装するかModelに実装するか悩むことになります。

# 結論
Helperの役割の明確な線引きはできない。ただ何となく、htmlに関する処理か文字の加工程度に留め、少しでも表示以外に使いそうなものはModelに実装してしまっていいのではと思います。
いい方法があれば教えてください。