OmniAICreator/Qiita-1.07M huggingface dataset:
[rails]date_selectを使ってフォームから日付を入力できるようにする。

フォームから日付を入力できるようにしたいと思っていましたが、なんだか大変そうなので後回しにしていました。

#フォームから日付を入力する。
調べてみたところ、htmlでは以下のように書けばカレンダー付きで日付を入力するフォームが、簡単に生成できます。

```
#html
<input type="date">
```

ということはrailsでも、当然このようなフォームの生成は想定されており、簡単に作ることができるはずです。

#date_select
探して見ると`date_select`というのがありました。

[リファレンス](http://railsdoc.com/references/date_select)


```
#new.html.erb
= date_select :date, Date.today, use_month_numbers: true
```

様々なoptionが用意されており、かなり細かい設定までできるようです。
このメソッドを使用すると簡単に日付入力ができてしまいます。

#params
このフォームから受け取ったパラメーターはparamsで以下のようになります。

```
date: <ActionController::Parameters {"2017-09-04(1i)"=>"2017", "2017-09-04(2i)"=>"9", "2017-09-04(3i)"=>"4"} permitted: false>
```

これどうやって扱うんだ……??? と思いましたが、`Record.new`などとした時点で、このデータは`created_at`カラムに自動的に挿入されているようです！

#その他
他にもいろいろあるようです。

###datetime_select

<img width="341" alt="スクリーンショット 2017-09-04 15.44.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/187119/93cdfe44-d540-17e2-7768-a58c62c65f2b.png">


###date_field_tag
<img width="300" alt="スクリーンショット 2017-09-04 15.45.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/187119/653e56e5-c041-b7dd-0910-bd56e9845843.png">

いろいろ用意されているみたいですね！
Ubuntu 16.04+PHP7.1+CakePHP3.5.1の環境セットアップログ

#Ubuntu 16.04+PHP7.1+CakePHP3.5.1の環境セットアップログ
端的に言うと、以下のモジュールはcomposerによるCakePHPのプロジェクト作成の前にやらないと以下のエラーがでます。

##必須コマンド＆PHPモジュール
```
zip, php-mbstring, php-xml
```
##でたエラー
```
$ composer self-update && composer create-project --prefer-
dist cakephp/app my_app_name
You are already using composer version 1.5.1 (stable channel).
Installing cakephp/app (3.5.0)
    Failed to download cakephp/app from dist: The zip extension and unzip command are both missing, skipping.
The php.ini used by your command-line PHP is: /etc/php/7.1/cli/php.ini
    Now trying to download from source
  - Installing cakephp/app (3.5.0): Cloning f807e4ef14 from cache
Created project in my_app_name
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - cakephp/cakephp-codesniffer 3.0.0 requires squizlabs/php_codesniffer ^3.0.0 -> satisfiable by squizlabs/php_codesniffer[3.0.0, 3.0.1, 3.0.2].
    - cakephp/cakephp-codesniffer 3.0.1 requires squizlabs/php_codesniffer ^3.0.0 -> satisfiable by squizlabs/php_codesniffer[3.0.0, 3.0.1, 3.0.2].
    - squizlabs/php_codesniffer 3.0.2 requires ext-simplexml * -> the requested PHP extension simplexml is missing from your system.
    - squizlabs/php_codesniffer 3.0.1 requires ext-simplexml * -> the requested PHP extension simplexml is missing from your system.
    - squizlabs/php_codesniffer 3.0.0 requires ext-simplexml * -> the requested PHP extension simplexml is missing from your system.
    - Installation request for cakephp/cakephp-
```

##セットアップ完了

ちょっと順番間違えると結構はまるので、ご注意ください。

![2017-09-04_15h24_19.png](https://qiita-image-store.s3.amazonaws.com/0/191117/764ec039-dd9e-245e-4d22-fc28083ec848.png)
複数列リスト・パーティション・テーブル（Oracle Database 12c Release 2新機能）を試す

Oracle Database 12c Release 2の新機能である複数列リスト・パーティション・テーブルを試します。

# 複数列リスト・パーティション・テーブル
Oracle Database 12c Release 1以前のリスト・パーティション・テーブルでは、パーティション列に指定できる列は１つだけでした。複数列でパーティション化したい場合は、パーティションを更にサブ・パーティションに分割するコンポジット・パーティションを利用する必要がありました。
Oracle Database 12cでは、リスト・パーティションに複数の列を指定できるようになりました。
複数列リスト・パーティション・テーブルは、ヒープ・テーブル、外部テーブルに指定できます。またサブ・パーティションにも指定できます。


## 自動リスト・パーティション・テーブルの作成
自動リスト・パーティション・テーブルを作成するには、CREATE TABLE文のPARTITION句に複数列を指定するだけです。複数列を指定できるようになったことで、{ALL|DBA|USER}_PART_KEY_COLUMNビューにはテーブルに対して複数の列名が出力されることになります。

```
SQL> CREATE TABLE plist2 (c1 VARCHAR2(10), c2 VARCHAR2(10), c3 VARCHAR2(10)) PARTITION BY LIST (c1, c2)  (
        PARTITION p1 VALUES ('VALUE#1', 'ITEM#1'),
        PARTITION p2 VALUES ('VALUE#2', 'ITEM#2'),
        PARTITION pd VALUES (DEFAULT)
     );

Table created.

SQL> SELECT COLUMN_NAME FROM USER_PART_KEY_COLUMNS WHERE NAME='PLIST2' ;

COLUMN_NAME
------------------------------
C1
C2
```

## 自動リスト・パーティションとの組み合わせ
DEFAULTパーティションが存在しなければ、自動リスト・パーティション・テーブルとも組み合わせることができます。

```
SQL> ALTER TABLE plist2 DROP PARTITION pd ;

Table altered.

SQL> ALTER TABLE plist2 SET PARTITIONING AUTOMATIC ;

Table altered.
```

## 制約
複数列リスト・パーティションには以下の制約があります。
1. パーティション化する複数列のうち、一部だけをDEFAULTと指定することはできません（VALUES ('ABC', DEFAULT)とは書けない）。
2. 最大16列まで指定できます。
Gradleで依存ライブラリの最新バージョンをチェックする

##はじめに
Google純正ライブラリやOSSライブラリのバージョンアップを逐一追いかけるのが大変だなと思ってたところ、以下の記事を見つけたので実際にやってみました。
CIを使って、定期的にバージョンをチェックしてSlackに通知できるようになれば楽になるはず。
[Gradle PluginとCIと俺](https://www.slideshare.net/shinobuokano7/gradle-pluginci-62464447)

##必要なもの
* [Gradle Versions Plugin](https://github.com/ben-manes/gradle-versions-plugin)
* [Gradle Slack Plugin](https://github.com/operando/gradle-slack-plugin)

##セットアップ手順

###Gradle Versions Plugin
Gradleの設定は以下を参照。
[gradle-versions-plugin Usage](https://github.com/ben-manes/gradle-versions-plugin#usage)

```sh
./gradlew dependencyUpdates
```

これで上記のコマンドで、タスク実行することは可能だが、alpha版のライブラリとも比較されます。
なので、[Component Selection Rules.](https://docs.gradle.org/current/userguide/dependency_management.html#component_selection_rules) でフィルタをかける。

```groovy:app/build.gradle
dependencyUpdates.resolutionStrategy = {
    componentSelection { rules ->
        rules.all { ComponentSelection selection ->
            boolean rejected = ['alpha', 'beta', 'rc', 'cr', 'm'].any { qualifier ->
                selection.candidate.version =~ /(?i).*[.-]${qualifier}[.\d-]*/
            }
            if (rejected) {
                selection.reject('Release candidate')
            }
        }
    }
}
```

###Gradle Slack Plugin
Gradleの設定は以下を参照。
[gradle-versions-plugin Usage](https://github.com/operando/gradle-slack-plugin#usage)

バージョンチェックのタスク（dependencyUpdates）が実行されたときに、Slack通知するようにする。

```groovy:app/build.gradle
slack {
    url 'slack WebHook URL'
    dependsOnTasks 'dependencyUpdates'
    title 'my app name'
    enabled = isCi
}
```

CI環境のみでSlack通知を行いたかったので、```isCi```の部分は以下のようにします。

```groovy:app/build.gradle
def isCi = "true" == System.getenv("CI")
```
大抵のCIサーバーはこの環境変数が入っているらしいです。
今回、Jenkinsを使ったのですが、この環境変数がなかったため新たに追加しました。

あとは、Jenkinsでジョブを作って実行。

```sh
./gradlew assembleRelease
./gradlew dependencyUpdates
```

##参考
* [Gradle PluginとCIと俺](https://www.slideshare.net/shinobuokano7/gradle-pluginci-62464447)
今更ながらKerasでCIFAR-10の画像認識をやってみた - 画像認識編 -

# はじめに

- [前回](http://qiita.com/neriai/items/817df489008561a25dd1)、学習したモデルを元に画像認識やってみました。
- 精度は良好そうです。

# 予測プログラム

```py
#!/usr/local/bin/python3
#!-*- coding: utf-8 -*-

import os
import numpy as np
from keras.models import model_from_json
from keras.preprocessing.image import load_img, img_to_array

if __name__ == '__main__':

    # モデルを読み込む
    model_json = open('model.json').read()
    model = model_from_json(model_json)
    model.load_weights('model.h5')

    # 画像を読み込む
    image = load_img('{画像ファイルパス}', target_size=(32, 32))

    # 配列に変換
    x = img_to_array(image)

    # 次元数を増やす
    x = np.expand_dims(x, axis=0)

    # 入力データは[0,1]の範囲に正規化
    x = x.astype('float32')
    x /= 255.0

    # 予測
    preds = model.predict(x)

    # 最大値のインデックスを取得
    answer = np.argmax(preds)

    cifar_map = {
        0: "airplane",
        1: "automobile",
        2: "bird",
        3: "cat",
        4: "deer",
        5: "dog",
        6: "frog",
        7: "hourse",
        8: "ship",
        9: "truck"
    }

    print(cifar_map[answer])

```

# 予測結果

- 以下５枚でやりました。

## フェラーリ

![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/90598/2b157bfd-3d7e-b7d4-d7ff-48ccd02af664.jpeg)

```
automobile
```

## ミニチュアダックスフンド

![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/90598/0e7ffa2b-b720-4c5c-82d8-62ad8de839a2.jpeg)

```
frog
```

## 猫

![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/90598/bee3b1c0-e3d5-b733-f5d2-0092c23e5136.jpeg)

```
hourse
```

## 大型客船

![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/90598/d1bff3e1-3ba8-257e-8102-c45ba0ed67bc.jpeg)

```
ship
```

## ディープインパクト

![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/90598/d998ba11-2e1f-ee7b-0b8c-f0ad261d48c7.jpeg)

```
hourse
```

# 感想

- ４足歩行動物は特徴量似ているからわかりづらい？
- 画像加工して顕著性だしたりするともう少し精度あがるかも。
複数の外部スクリプトを順番に取り込んだ後に処理する

jQuery と jQueryUI のように依存関係のあるライブラリがあって、それを動的に取り込みたい場合があった。
jQuery.getScript()を使って外部スクリプトを取り込むとこうなる。

```js:ネスト地獄
$.getScript("A.js").done(function{
  $.getScript("B.js").done(function{
    // AとBを使った処理
  });
});
```

ネストが嫌だ。なので処理を作った。

```js:jQueryに追加
$.getScripts = function(scriptUrls){
  const d = $.Deferred();
  function _getScripts(urls) {
    const url = urls.shift();
    $.getScript(url)
      .done(function(){
        if (urls.length > 0) {
          _getScripts(urls);
        } else {
          d.resolve();
        }
      })
      .fail(function(){
        d.reject();
      });
  }
  _getScripts(scriptUrls);
  return d.promise();
}

$.getScripts(["A.js", "B.js"]).done(function(){
  // AとBを使った処理
});
```
PageSpeed Insights が提案する、速度改善のための重要なポイント

## レンダリングを妨げる JavaScript を削除する

### 小さな JavaScript をインライン化する
外部スクリプトが小さい場合は、HTML ドキュメントに直接含めることができます。小さなファイルをこのようにインライン化すると、ブラウザではページの表示を続けることができます。

### JavaScript の読み込みを遅らせる

```html:html
<script async src="my.js">
```

JavaScript リソースで document.write を使用している場合は、非同期の読み込みを安全に使用できません。document.write を使用するスクリプトは、別の方法を使用するように書き直すことをおすすめします。

また、JavaScript を非同期的に読み込む際に、ページで互いに依存している複数のスクリプトを読み込む場合は、アプリケーションで適切な依存関係の順序でスクリプトを読み込むように注意を払う必要があります。


## 小さな CSS ファイルのインライン化の例

外部 CSS リソースが小さい場合は、HTML ドキュメントに直接挿入できます。これをインライン化といいます。小さい CSS をこのようにインライン化すると、ブラウザはページのレンダリングを続けることができます。

```html:html
<html>
  <head>
    <style>
      .blue{color:blue;}
    </style>
    </head>
  <body>
    <div class="blue">
      Hello, world!
    </div>
    <script>
      var cb = function() {
        var l = document.createElement('link'); l.rel = 'stylesheet';
        l.href = 'small.css';
        var h = document.getElementsByTagName('head')[0]; h.parentNode.insertBefore(l, h);
      };
      var raf = requestAnimationFrame;
      if (raf) raf(cb);
      else window.addEventListener('load', cb);
    </script>
  </body>
</html>
```

ページが読み込まれた後で元の small.css が読み込まれます。javascript ですべての style 要素と link 要素をドキュメントに挿入することで、CSS ルールの適用順序は維持されます。

- 大きなデータ URI をインライン化しない
- CSS 属性をインライン化しない

> https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery
Hyper-Vを使ったdocker-machine上の削除できないDockerホストを強引に削除

#Hyper-VマネージャからDockerホストを削除するとゴミが残る
Windowsのdocker-machineでHyper-Vを利用してDockerホストを作成した場合、Hyper-Vマネージャ上にDockerホストのVMが作成されますが、この画面で直接VMを削除すると、dokcer-machineの情報と不整合が起こり、```docker-machine ls```で一覧に出るのに```docker-machine rm```から削除できなくなります。
その他にもHyper-Vマネージャからいじると何らかのデータの不整合が起きてゴミが残る場合があります。
その場合、以下のフォルダごと削除するとゴミが消えます。
```%USERPROFILE%\.docker\machine\対象のVM名```
このフォルダにvhdやtlsのキーなどが入っているため必要に応じてバックアップしてから削除を行ってください。
複数ファイルを個別にzip圧縮（パスワード付き）するバッチファイル

1ファイル1zip（パスワード付き）でzipファイルを作成する必要があったため、バッチファイルを作りました。

##前提
7-zipを使います。


##使い方
↓こんなファイルたちをバッチファイルにドラッグ＆ドロップ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/186221/e319d08d-c194-a1ca-d3a2-7257f152155c.png)



↓こうします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/186221/837b61f3-9aaf-deb4-dd3e-70bc7e0c3eed.png)

```bat:makezip.bat
@ECHO OFF

SET path="C:\Program Files\7-Zip\"
SET exeFile=7z.exe

REM zip解凍パスワード（%はエスケープのため%%とする）
SET pass="XXXXXXXX"

FOR %%f IN (%*) DO (
  %path%%exeFile% a -p%pass% %%~dpf%%~nf.zip %%f
)

ECHO zip圧縮完了しました。

pause
```
phina.jsでグリッドに四角形を敷き詰める

[【phina.js】Gridクラスを使いこなそう - Qiita]

みたままなのだけれど。

![2017-09-04_16h09_09.png](https://qiita-image-store.s3.amazonaws.com/0/62354/df988e18-5d56-a9d1-ee8c-8416a9231afd.png)

http://runstant.com/runstataccount/projects/cd0b428e

```js
    var self = this;
      Array.range(1, 16, 1).each((X) =>{
        Array.range(1, 16, 1).each((Y) =>{
          let rect = RectangleShape().addChildTo(self);
          rect.setPosition(self.gridX.span(X),self.gridY.span(Y));
          console.log(rect)
          rect.fill = 'transparent';
          //rect.height /= 1.75;
          rect.width /= 1.75;
      });
    });
```

横幅小さくしないと重なるもよう。逆に高さはそのままで良さそう。
縦長なのはphina.jsのデフォルトが縦長だから？
むしろ線はもっとピッタリ重なるべきなのだろうか。
~~周囲に空きがあるのだけれど本当に全領域使っているかはなんか怪しい。~~
rangeは普通0からじゃないのか？と0スタートにしたら変になったのでどうにもしまらない。

# 前回

[phina.jsで内部が透明な図形を作るには shape.fill = 'transparent' - Qiita]

[phina.jsで内部が透明な図形を作るには shape.fill = 'transparent' - Qiita]:http://qiita.com/khsk/items/c9ed899554093733ef89

[【phina.js】Gridクラスを使いこなそう - Qiita]:http://qiita.com/alkn203/items/d176a10d4e38d15e4062
Rails Application Templates　設定の自動化

##rails application templateとは
例えば開発初期のgemを入れて、設定を書き込んでという作業を１ファイルで自動化してくれる*railsの標準機能*です。ちょっとしたミスの混入を防ぎ、またgithub上のテンプレートであれば０秒で利用できます。

rails application templateの日本語訳がなかったので自分の為も含めて翻訳しました。自信がないところは英文ものせています。間違って翻訳していたらコメントください。
ぜひテンプレートを使って楽しいruby lifeを送りましょう。

翻訳した後に気づきましたが以下に翻訳されていました。以下の記事のが詳しいので基本的に以下の記事を参照してください。
https://railsguides.jp/rails_application_templates.html
ただこの記事では便利な書き方を載せていないので補足します。

### Rails Application Templates（Rails Guidesの翻訳）
http://guides.rubyonrails.org/rails_application_templates.html
Application templates は新規のRailsプロジェクトまたは作成済みのRailsプロジェクトにgems/initializersを加えるためのDSLで書かれたシンプルなRubyファイルのことです。

###1 使用法
templateを適用するにはrails g コマンドに-mオプションを使ってtemplateの場所を指定します。この時のテンプレートの場所はパス、URLどちらでも大丈夫です。

$ rails new blog -m ~/template.rb
$ rails new blog -m http://example.com/template.rb

作成済みのrailsアプリにもRake taskを使うことでtemplateを使うことができます。

この時のテンプレートの場所はファイル、URLどちらでも大丈夫です。

$ bin/rails app:template LOCATION=~/template.rb
$ bin/rails app:template LOCATION=http://example.com/template.rb

## 2 Template API
railsのテンプレートAPIは理解するのが簡単です。以下は典型的な例です。

```
/template.rb
generate(:scaffold, "person name:string")
route "root to: 'people#index'"
rails_command("db:migrate")
 
after_bundle do
  git :init
  git add: "."
  git commit: %Q{ -m 'Initial commit' }
end
```
私の環境rails5.1.xでは以下のコード働きません。
generate(:scaffold, "person name:string")

run
コマンドを実行する。
Mailman メーリングリストのパスワードを移行する割りと楽な手順

##### 0. 前提
1. CentOS[5-7]でしか検証していません。
2. rpmパッケージによるデフォルトのインストールパスであることを想定しています。
3. ~~[これ](http://qiita.com/koginoadm/items/d13dedd3451573db99c1)の焼き直し。~~

##### 1. 移行元サーバで下記コマンド群を実行し、ファイルにパスワードをエクスポートする。
```bash
cat <<'__EOD__' >/tmp/mailman-get-password.sh
#!/bin/bash
ls /var/lib/mailman/lists/*/config.pck | while read LINE
do
    echo -n "$LINE" | sed -r 's@.+/([^/]*)/config.pck@\1@g'
    /usr/lib/mailman/bin/dumpdb -p $LINE \
      | grep "'password'" \
      | sed -r "s@[ \t]*'password': '?([0-9a-zA-Z]+).*@ \1@g"
done
#EOF
__EOD__
```
```bash
chmod 755 /tmp/mailman-get-password.sh
```
```bash
/tmp/mailman-get-password.sh | tee /tmp/mailman-password.txt
```

##### 2. 上記により生成されたファイル`/tmp/mailman-password.txt`を、移行先サーバへコピー。<br>　移行先サーバの`/tmp/mailman-password.txt`へ配置する。

##### 3. 移行先サーバで下記コマンドを実行し、インポート前のパスワードを確認する。
```bash
ls /var/lib/mailman/lists/*/config.pck | while read LINE; do echo -n "$LINE" | sed -r 's@.+/([^/]*)/config.pck@\1@g'; /usr/lib/mailman/bin/dumpdb -p $LINE | grep "'password'" | sed -r "s@[ \t]*'password': '?([0-9a-zA-Z]+).*@ \1@g"; done
```

##### 4. 移行先サーバで下記コマンド群を実行し、ファイルからパスワードをインポートする。

```bash
cat <<'__EOD__' >/tmp/mailman-set-password.sh
#!/bin/bash
expect -c "
set timeout 4
spawn /usr/lib/mailman/bin/withlist -i -l $1
expect \">>>\"
send \"m.password='$2'\\n\"
expect \">>>\"
send \"m.Save()\\n\"
expect \">>>\"
send \"quit()\\n\"
expect \"Any character string that will never be output.\"
exit 0
"
sleep 0.5
echo
#EOF
__EOD__
```
```bash
chmod 755 /tmp/mailman-set-password.sh
```
```bash
cat /tmp/mailman-password.txt | while read LINE; do /tmp/mailman-set-password.sh $LINE; done
```
##### 5. 移行先サーバで下記コマンドを実行し、パスワードが引き継がれていることを確認する。
```bash
ls /var/lib/mailman/lists/*/config.pck | while read LINE; do echo -n "$LINE" | sed -r 's@.+/([^/]*)/config.pck@\1@g'; /usr/lib/mailman/bin/dumpdb -p $LINE | grep "'password'" | sed -r "s@[ \t]*'password': '?([0-9a-zA-Z]+).*@ \1@g"; done
```
##### おわり。
[draft]自作CordovaPlugin用の`@ionic-native/ほにゃらら`を自作する



内容は、いつものとおり、タイトルのまま。
ざっくり覚え書きていどに書いた、まだ draft 版です

そのうち、清書します。時間があれば。いつか。


## 下準備


* `gulp` が必要なのでインストールしておきます。

```
$ npm install -g gulp
```

* 自分の ionic2 (3,4...) プロジェクトで import している `@ionic-native` と同じバージョンのソースを取得します。

```
$ git clone https://github.com/ionic-team/ionic-native -b v4.2.0
```


## @ionic-native に自作プラグインを追加

雛形を作ります。

```
$ cd ionic-native
$ gulp plugin:create -n MyCoolPlugin
[10:58:20] Using gulpfile ~/ionic-native/gulpfile.js
[10:58:20] Starting 'plugin:create'...
[10:58:20] Finished 'plugin:create' after 73 ms
```

上の例だと `ionic-native/src/@ionic-native/my-cool-plugin` に `index.ts` ファイルが雛形として作成されます。

雛形のコメントとか不要であれば

```
$ gulp plugin:create -m -n MyCoolPlugin
```

と、`-m` ：minimal オプションを付けます。


## プラグインのインターフェイスを記述

元になる plugin の `www/index.js` や、www/index.js 内で exec で呼び出している実装側の関数の `CDVInvokedUrlCommand` インターフェイスを受けて引数を展開している部分や、`CDVPluginResult` でレスポンスを詰めている部分を見ながら、 exec で呼び出されている関数のパラメータ／戻り値の型を定義していきます。

私の場合は、連想配列になっていたり key-value で参照しているものは(数が多くなければ) index.ts の中で interface として定義してます。
面倒であれば、www/index.js に書かれているパラメータの名前と数を合わせて any でとりあえずはいいかと。


www/index.js で

```
myCoolPlugin.greatFunction = function(mode, dic, name, success, failure){
		exec(success, failure, "MyCoolPlugin", "nativeFunction", [mode, dic, name]);
};
```

のように書かれている場合、`myCoolPlugin.greatFunction(....,success, failure)` の引数の最後2つが `success` と `failure` になっていれば、index.ts ファイルでは

```
  @Cordova()
  greatFunction( mode: MyModeEnum, dic: {}, name: string ): Promise<GreatResponse> { return ; };
```

のようにかきます。

(省略していますが、`MyModeEnum` は `extern enum MyModeEnum {...}`、`GreatResponse` は `extern interface GreatResponse {...}` のように index.ts に宣言しておきます。

同期型の関数の書き方や、succ/fail が引数の先頭にある場合、その他イロイロは ionic-native の [Development Guide](https://github.com/ionic-team/ionic-native/blob/master/DEVELOPER.md) を参照するとざっと書いてあります。

**ここ、頑張るところ**

定義が書けていれば、引数やレスポンスの型チェックが動くのでプラグイン連携のツマヅキポイントの 1/3 くらいはクリアするはず。ここがガンバリポイント。


## コンパイル

@ionic-native のルートフォルダで

```
$ npm run build
```

すればコンパイルが実行されますが、全部のプラグインをコンパイルして時間かかります。

自作の plugin のみコンパイルする場合は

```
$ npm run build -n my-cool-plugin
```

`-n` でプラグイン名を指定します。


## テスト、import

`dist/@ionic-native/my-cool-plugin/` フォルダを自分の ionic プロジェクトの `node_modules/@ionic-native/my-cool-plugin/` にコピーすれば、他の @ionic-native プラグイン同様に呼び出して使えるようになるのでひとまずこれで動作確認。


## npm パッケージ化

build したフォルダで npm のパッケージにできます。

```
$ cd dist/@ionic-native/my-cool-plugin
$ npm pack
$ ls my-cool-plugin-1.0.0.tgz
my-cool-plugin-1.0.0.tgz
```

できた tgz ファイルを ionic プロジェクトで `npm install --save` します。

また、このファイルは持ち運び可能なので、非公開プラグインなどの場合でも npm パッケージの形でファイルでチームメンバーで共有したり、社内のリポジトリに登録してイントラの URL で npm install しちゃえば外に公開する事なく@ionic-nativeプラグインを素早く共有・展開できます。


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

```
$ npm install ~/ionic-native/dist/@ionic-native/my-cool-plugin/my-cool-plugin-1.0.0.tgz --save
```

ionic プロジェクトの `node_modules/@ionic-native/my-cool-plugin/` にファイルがインストールされます。

# 参考サイト
* https://github.com/ionic-team/ionic-native/
* https://github.com/ionic-team/ionic-native/blob/master/DEVELOPER.md
* http://ionicframework.com/docs/native/
Visual Studio for Mac Communityが起動しなくなった人へ(パッチ配布済み)

アメリカ？で10月2日に15.4のアップデートが配布されました．

そこで配信された Mono 5.4.0.201 が今回対象としている日本語入力問題を解消したパッチを含んでいるため，以下のような問題はAlpha, Beta チャンネルで発生しなくなりました．

こんな問題が過去にあったんだよ，ってことで記事は残しておきます．

---

こんな限定的なことをQiitaに載せるなよという感じではありますが，他に困った人がいたとのことで．

## 結論

### 一番簡単な方法
__Stable__のMonoを使用する（5.2系）
http://www.mono-project.com/download/#download-mac

### 対症療法的な

Monoのバージョンを一緒に上げない
or
8月17日より前のバージョンのMonoを使う(5.4系や5.7系の場合)
or
（追記）~~JapaneseIMや~~Google日本語入力などのサードパーティーのIMEを使わない（Google日本語入力では，日本語入力部ではなく”英語”のみがクラッシュする）
or
Stableチャンネルで運用する（）
or
（追記）Weekly Updatesの5.7.0.378移行を使用する


### 現実的じゃない方法

（非推奨と言うかVS4Mのアップデートにより使用できなくなったため削除）
~~膨大なマシンリソースが必要になるので面倒ですが，
https://gist.github.com/yamachu/f7476e853b83096cffe47ac252ec50d4
に記載されている方法でビルドしてみて，そのビルド結果から__libgdk-quartz-2.0.0.dylib__を抽出し，問題となっているMono5.4.xのインストールされている
`/Library/Frameworks/Mono.framework/Versions/5.4.0/lib/` にコピーする．~~

## 詳細

現在Visual Studio for Macを~~Alpha, Beta Channelで運用していると，~~アップデートすると，

~~* Visual Studio for Mac 7.2 build 617（以下VS4M）~~
Alpha, Beta だと
* Mono 5.4.0.199

が落ちてきます．

ここでVS4Mをアップデートするのは良いのですが，Monoも同時にアップデートしてしまうと，日本語入力などを使用する特定環境下でVS4Mが起動できなくなります．
すでに報告済みなので詳細を知りたい方は[こちら](https://developercommunity.visualstudio.com/content/problem/104471/visual-studio-for-mac-720540-cannot-launch-exc-bre.html)をどうぞ．

Monoのバージョンを上げなくてもVS4Mは動作するので現時点では無理して上げる必要はなさそうです．

起動できるMonoのバージョンの判定方法としては，

```shell-session
$ mono -V
```

として，出力が

```shell-session
Mono JIT compiler version 5.7.0.100 (master/83020f1270e Tue Aug 15 16:40:04 EDT 2017)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
	TLS:           normal
	SIGSEGV:       altstack
	Notification:  kqueue
	Architecture:  amd64
	Disabled:      none
	Misc:          softdebug 
	LLVM:          yes(3.6.0svn-mono-master/8b1520c8aae)
	GC:            sgen (concurrent by default)
```

こんな感じになるのですが，このバージョンの横の日付が8月17日より前であれば動作します．
もともとは[この問題](https://bugzilla.xamarin.com/show_bug.cgi?id=5162)を解決するためのパッチだったみたいなのですが，日本語環境では悪さをしてしまったようです :innocent:

追記

更に検証を進めてみたら，~~JapaneseIM(ことえり)や~~Google日本語入力を使わなければ使用できるということがわかりました．
~~日本語のコメントアウトができなくなりますね...~~一瞬でもIMEが変わると問答無用でVS4Mが落ちます．

状況が結構ややこしいのですが，Google日本語入力は問答無用でダメで，ことえりに変える前に使っていたIMEがGoogle日本語入力じゃない場合は大丈夫でした．


### お気持ち

~~PR出したんですけどCloseされてしまって上記の他の言語圏の人のためにやったパッチを取り消す形で進んでしまっていてなんとも悲しいお気持ちになりました．~~
前向きに検討されている感じがあるようです
https://github.com/mono/bockbuild/pull/49

=> マージされたので，多分次か次のAlpha版のMonoからは問題なく動作しそうなMonoが配布されそうです．
Mailman メーリングリストのシーケンス番号を移行する割りと楽な手順

##### 0. 前提
1. CentOS[5-7]でしか検証していません。
2. rpmパッケージによるデフォルトのインストールパスであることを想定しています。

##### 1. 移行元サーバで下記コマンド群を実行し、ファイルにシーケンス番号をエクスポートする。
```bash
cat <<'__EOD__' >/tmp/mailman-get-sequence.sh
#!/bin/bash
ls /var/lib/mailman/lists/*/config.pck | while read LINE
do
    echo -n "$LINE" | sed -r 's@.+/([^/]*)/config.pck@\1@g'
    /usr/lib/mailman/bin/dumpdb -p $LINE \
      | grep "'post_id'" \
      | sed -r "s@[ \t]*'post_id': '?([0-9\.]+)'?,?@ \1@g"
done
#EOF
__EOD__
```
```bash
chmod 755 /tmp/mailman-get-sequence.sh
```
```bash
/tmp/mailman-get-sequence.sh | tee /tmp/mailman-sequence.txt
```

##### 2. 上記により生成されたファイル`/tmp/mailman-sequence.txt`を、移行先サーバへコピー。<br>　移行先サーバの`/tmp/mailman-sequence.txt`へ配置する。

##### 3. 移行先サーバで下記コマンドを実行し、インポート前のシーケンス番号を確認する。
```bash
ls /var/lib/mailman/lists/*/config.pck | while read LINE; do echo -n "$LINE" | sed -r 's@.+/([^/]*)/config.pck@\1@g'; /usr/lib/mailman/bin/dumpdb -p $LINE | grep "'post_id'" | sed -r "s@[ \t]*'post_id': '?([0-9\.]+)'?,?@ \1@g"; done
```

##### 4. 移行先サーバで下記コマンド群を実行し、ファイルからシーケンス番号をインポートする。

```bash
cat <<'__EOD__' >/tmp/mailman-set-sequence.sh
#!/bin/bash
expect -c "
set timeout 4
spawn /usr/lib/mailman/bin/withlist -i -l $1
expect \">>>\"
send \"m.post_id=$2\\n\"
expect \">>>\"
send \"m.Save()\\n\"
expect \">>>\"
send \"quit()\\n\"
expect \"Any character string that will never be output.\"
exit 0
"
sleep 0.5
echo
#EOF
__EOD__
```
```bash
chmod 755 /tmp/mailman-set-sequence.sh
```
```bash
cat /tmp/mailman-sequence.txt | while read LINE; do /tmp/mailman-set-sequence.sh $LINE; done
```
##### 5. 移行先サーバで下記コマンドを実行し、シーケンス番号が引き継がれていることを確認する。
```bash
ls /var/lib/mailman/lists/*/config.pck | while read LINE; do echo -n "$LINE" | sed -r 's@.+/([^/]*)/config.pck@\1@g'; /usr/lib/mailman/bin/dumpdb -p $LINE | grep 'post_id' | sed -r "s@[ \t]*'post_id': '?([0-9\.]+)'?,?@ \1@g"; done
```
##### おわり。
PowerShell ワンライナー 環境変数の変更

##### 以下を実行すると、`$環境変数` に `$値` がセットされる。

```PowerShell
> [Environment]::SetEnvironmentVariable("${環境変数}", "${値}", 'User')
```

##### 例: PATHの追加。
```PowerShell
> [Environment]::SetEnvironmentVariable("PATH", "$env:PATH;$env:ProgramFiles\Oracle\VirtualBox", 'User')
```

##### おわり。
初心者向け：command not foundを解決する方法


## 概要
プログラミングの学習を始めた頃、Ruby on Railsの環境構築において、`command not found` にたびたび遭遇しました。

色々な記事を参考にして、その通りにやってみるのですが、なかなか解決できません。

理解すれば簡単なのですが、理解までに時間が掛かりました。

その経験を生かして、わかりやすく解決の手順を紹介します。

## 解決ポイント
* 解決するためには、以下のポイントで確認します。

#### (1) コマンド実行ファイルがあるか？
#### (2) コマンドまでの検索パスが通っているか？

* この2つのポイントを押さえれば、解決は早いです。

# 手順
## コマンド実行ファイルの検索
* まず `command not found` が出た時は、コマンドの実行ファイルがどこにあるか確認します。
* rbenvを例にします。

```
$ which -a rbenv
```

* すると以下のように表示されました。

```
rbenv () {
	local command
	command="$1"
	if [ "$#" -gt 0 ]
	then
		shift
	fi
	case "$command" in
		(rehash | shell) eval "$(rbenv "sh-$command" "$@")" ;;
		(*) command rbenv "$command" "$@" ;;
	esac
}
/usr/local/opt/rbenv/bin/rbenv
/usr/local/bin/rbenv
```

* ここで表示されている以下の場所にコマンド実行ファイルがあるということです。

```
/usr/local/opt/rbenv/bin/rbenv
/usr/local/bin/rbenv
```

* もし以下のように表示された場合、rbenvの実行ファイルがそもそもないということになります。

```
$ which -a rbenv
rbenv not found
```

* この場合は、まずrbenvをインストールします。

```
$ brew install rbenv
```

## 実行したいコマンドまで検索パスが通っているか確認
* コマンド実行ファイルがあったとしても、そのコマンドを実行する検索パスが通っていなければ、`command not found` になります。
* 検索パスは以下のコマンドで確認します。

```
$ echo $PATH
```

```
/usr/local/opt/rbenv/shims:/usr/local/opt/rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
```

* ここで色々と表示されますが、実際にはコンマで区切られており、わかりやすく表示すると以下と同じ意味です。
* この検索パスを順番に検索して見つかったら実行します。

```
/usr/local/opt/rbenv/shims
/usr/local/opt/rbenv/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/opt/X11/bin
```

* この場合、rbenvの実行ファイルへの検索パスは通っているので、コマンドを実行することができます。

```
/usr/local/opt/rbenv/bin
/usr/local/bin
```

* もし検索パスが通っていない場合は、それを設定する必要があります。

## 検索パスを通す
* それでは検索パスを通す方法を紹介します。

#### 検索パスは、シェルで設定
* 検索パスはどこに設定するかというと、シェルです。
* シェルはbashやzshといったもので、Macの標準だとbashになります。
* それではrbenvを例にbash_profileに設定します。

```
$ vim ~/.bash_profile
```

```
# /Users/user_name/.rbenv/binに検索パスを通す
export PATH="$HOME/.rbenv/bin:$PATH"

# rbenvの初期化
eval "$(rbenv init -)"
```

* 保存した後、設定を反映します。

```
$ source ~/.bash_profile
```

* 検索パスを確認します。

```
$ echo $PATH
```

```
/Users/test_user/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
```

※ わかりやすく表示すると、

```
/Users/test_user/.rbenv/shims
/usr/local/bin
/usr/bin:/bin
/usr/sbin
/sbin
/opt/X11/bin
```

* rbenvまでの検索パスが通るようになりました。
* これでrbenvのコマンドが実行できるようになります。

#### 以上がrbenvを例にして、`command not found` を解決する方法です。

## 総括
今回は、rbenvを例にして `command not found` の解決する方法を見ました。

もちろん色々なコマンドで発生する可能性があるので、上記の内容だけですべて解決できるわけではありません。

しかし、以下の2点を押さえておけば、原因がすぐに見つかりやすいです。

#### (1) コマンド実行ファイルがあるか？
#### (2) コマンドまでの検索パスが通っているか？

この記事がエラーの解決に貢献できたら、嬉しいです。
Flow の型警告を消す

後からFlowを導入してまだ型が無い時とかに。

## `any`型を付けちゃう

```js
const a: stirng = 1;
// number This type is incompatible with string

const b: any = 2;
// no error
```

## `$FlowFixMe`コメントを前の行に書く

```js
// $FlowFixMe
const c: string = 3;
// no error
```

ただこのコメントのパターンは設定で変えれるみたいです。

```toml:.flowconfig
[options]
suppress_comment= \\(.\\|\n\\)*\\$FlowFixMe
```

## `suppress_type`を使う

`options.suppress_type`で設定したワードを仮の型で使えるようになる。ちなみに、複数指定できるぽい。

```toml:.flowconfig
[options]
suppress_type=$FlowFixMe
suppress_type=$FixByNextMonth
```

こんな感じで、

```js
const a: $FlowFixme = 1;
function b(): $FixByNextMonth {
  return 'foo';
}
```
slimで配列管理


Demo : https://codepen.io/mo4_9/pen/YxgxRx

```slim
ruby:
  titles = [
    'ttl1',
    'ttl2',
    'ttl3'
  ]
  desc = [
    "desc1",
    "desc2",
    "desc3"
  ]
  
- (titles.size).times do |i|
  .item(data-id='#{i}')
    .index #{i}
    .ttl= titles[i]
    .desc= desc[i]
```

> 参考
https://github.com/slim-template/slim/blob/master/README.jp.md
https://tondemodesign.com/slim-tutorial-practice/
SwiftでWindowsコンソールアプリケーションを作る

MacとかiOS向けアプリ開発に使用するSwift。
軽快でモダンな言語ということでObjective-Cの@だらけから脱出できそうな模様ですが

「Mac高くて買えないよ」

という皆さん方！
じつはWindowsでもSwiftを用いた開発ができるのをご存知ですか？

「Swift for Windows」というフリーソフトを使用すればSwiftソースを
コンパイル＆実行できるのです
phina.jsで内部が透明な図形を作るには shape.fill = 'transparent'

タイトル落ち。

![2017-09-04_16h08_14.png](https://qiita-image-store.s3.amazonaws.com/0/62354/9e07361d-7463-f18e-43cc-80a6b439cf56.png)

http://runstant.com/runstataccount/projects/2881a835


# 流れ

phina.jsはじめて。
とりあえず枠線だけの四角形を作ってみたい。
`alpha`を設定すれば透明になると思ったが、図形全体が透明になってしまった。
検索してもなんか難しい…。
[phina.util.Color - phina.js docs]
を見ると透明色はなさそうでショック…。

`backgroundColor`も設定できるんだよね。
赤色に変えてみたら図形の外部の色が変わった。
あれ？じゃあデフォルトは透明なのか。
じゃあプロパティの色を拾えばわかるかな？
`console.log`で見ると**transparent**だった。
`fill`にも使ってみる→できた。

***

考え方の反省として

色はcss方式のようなので、そちらで調べてみればよかったかも。
また、rgb形式で設定できるのでrgba形式で色指定してみればよかったかも。(transparentが`rgba(0,0,0,0)`の意味らしいので)


[phina.util.Color - phina.js docs]:http://phinajs.com/docs/#!/api/phina.util.Color-static-property-COLOR_LIST
rails testが実行できない

# rails testが実行できない
rails serverは実行できるけれど、rails testを実行しても応答がない
ctrl-cで強制終了すると、以下のようなエラーが出力された。


```shell-session
$ rails test
^C/Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client/run.rb:117:in `gets': Interrupt
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client/run.rb:117:in `verify_server_version'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client/run.rb:62:in `run'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client/run.rb:42:in `warm_run'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client/run.rb:35:in `call'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client/command.rb:7:in `call'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client/rails.rb:24:in `call'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client/command.rb:7:in `call'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client.rb:30:in `run'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/bin/spring:49:in `<top (required)>'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `load'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `<top (required)>'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:68:in `require'
	from /Users/macbook/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:68:in `require'
	from /Users/macbook/Git/boardgamematching/bin/spring:15:in `<top (required)>'
	from bin/rails:3:in `load'
	from bin/rails:3:in `<main>'
```

## 解決方法
springを停止する

```shell-session
$ spring stop
Spring stopped.
```

参考
railsのコマンドが動かない時はspringを(stop|kill)してみよう
http://qiita.com/yokozawa/items/7b92c260f8c3dfec8e28
TensorFlowでkeras その4

#概要
TensorFlowでkerasやってみた。
ImageDataGeneratorやってみた。

#写真


![image.png](https://qiita-image-store.s3.amazonaws.com/0/18104/2b705b72-1857-8098-f04a-83a8b657fd94.png)


#環境
windows 7 sp1 64bit
anaconda3
tensorflow 1.2


#サンプルコード


```

from tensorflow.contrib.keras.python.keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img

datagen = ImageDataGenerator(rotation_range = 40, width_shift_range = 0.2, height_shift_range = 0.2, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True, fill_mode = 'nearest')
img = load_img('./p1m.jpg')
x = img_to_array(img)
x = x.reshape((1, ) + x.shape)
i = 0
for batch in datagen.flow(x, batch_size = 1, save_to_dir = './', save_prefix = 't', save_format = 'jpeg'):
	i += 1
	if i > 20:
		break

```
自動リスト・パーティション・テーブル（Oracle Database 12c Release 2新機能）を試す

Oracle Database 12c Release 2の新機能である自動リスト・パーティションを試します。

# 自動リスト・パーティション・テーブル
Oracle Database 12c Release 1以前のリスト・パーティション・テーブルでは、パーティション列に格納できる値はあらかじめ決定され、事前にパーティションを作成しておく必要がありました。
レンジ・パーティション・テーブルでは自動的にパーティションを作成するインターバル・パーティション・テーブルが利用できます。Oracle Database 12c Release 2では、パーティション化列に新しい値が格納さると同時にパーティションが作成される「自動リスト・パーティション・テーブル」が利用できるようになりました。

## 自動リスト・パーティション・テーブルの作成
自動リスト・パーティション・テーブルを作成するには、CREATE TABLE文のPARTITION句にAUTOMATICを指定するだけです。CREATE TABLE文には最低限一つのパーティション定義が必要です。
自動リスト・パーティションの確認は、{DBA|ALL|USER}_PART_TABLESビューのAUTOLIST列で確認できます。

```
SQL> CREATE TABLE plist1 (c1 VARCHAR2(10), c2 VARCHAR2(10)) PARTITION BY LIST (c1) AUTOMATIC 
	(PARTITION p1 VALUES ('VALUE#1'));

Table created.

SQL> SELECT AUTOLIST FROM USER_PART_TABLES WHERE TABLE_NAME='PLIST1';

AUT
---
YES

```
## 自動リスト・パーティションに変更
通常のリスト・パーティション・テーブルを自動リスト・パーティション・テーブルに変更することができます。

```
SQL> ALTER TABLE plist1 SET PARTITIONING MANUAL;

Table altered.

SQL> ALTER TABLE plist1 SET PARTITIONING AUTOMATIC;

Table altered.

```

## 制約
自動リスト・パーティションには以下の制約があります。
1. CREATE TABLE文には最低一つのパーティション定義が必要です。
2. 自動的に作成されるパーティションの名前はSYS_P{9999}になります（9999は数字）
3. DEFAULTパーティションと同時には使用できません（DEFAULTパーティションに格納するか、新規パーティションを作成するか区別できないため）
4. 自動追加されるパーティション定義をサブ・パーティションに指定できません。
5. 最大パーティション数は1,000,000個です。
6. 外部表を使ったパーティション・テーブルにAUTOMATICを指定できません。
7. オプティマイザ統計はパーティション追加時に取得されません。

## インデックス
テーブルに付与されたLOCALインデックス、GLOBALインデックスの状態を確認します。下記の通り、パーティションが自動追加されてもインデックスは自動的にメンテナンスされ、利用可能であることがわかります。

```
SQL> CREATE INDEX idx1_plist1 ON plist1 (c1) LOCAL;

Index created.

SQL> CREATE INDEX idx2_plist1 ON plist1 (c2) GLOBAL;

Index created.

SQL> INSERT INTO plist1 VALUES ('6-unique', 'test1');　-- insert unique value

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT STATUS FROM USER_IND_PARTITIOONS WHERE INDEX_NAME='IDX1_PLIST1';

PARTITION_NAME                 STATUS
------------------------------ --------
P1                             USABLE
SYS_P2601                      USABLE

SQL> SELECT STATUS FROM USER_INDEXES WHERE INDEX_NAME='IDX2_PLIST1';

STATUS
--------
VALID

```
C#でIISをクラッシュさせる

今回は意図的にw3wp.exeをクラッシュさせるプログラムを考えました。

AzureのPaasのCloudServiceでクラッシュダンプの転送をWindows Azure Diagnosticsを使用して行います。
TableStorage、BlobStorageに転送されてくれば成功です。

はじめは少し苦戦して、OutofMemoryの例外を出せばクラッシュすると思いましたが、正常な例外が発生しただけでした。

MVCで作りました。

``` sample1.cs
public ActionResult Crash()
{
    CrashMethod("HogeHoge---");
    return View();
}
private void CrashMethod(string s)
{
    CrashMethod(s);
}
```
または、

``` sample2.cs
async Task<string> GetAsync()
{
    var str = await new HttpClient().GetStringAsync("http://hogehoge.com/");
    return str;
}
public ActionResult Index()
{
    var s = GetAsync().Result;
    return View();
}
```

結果は、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/478a67c8-efbd-06a9-4750-a3fd9f6813a1.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/16b086fc-5e77-b1fe-f6b5-16d77c0cd7a0.png)

うまくクラッシュダンプを転送させることができました。
A5ランクの会議

A5ランクの会議

会議に必要な要点５つ

#AIM
目的

#AGENDA
議題

#ASSIGN
割当

#ACTION
実行

#ARCHIVE
記録

これを抑えておくとよいですね

A5
RANK
MEETING
A5ランクの会議

---


## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
Mac環境構築メモ

#概要
PCを変更した時に、この記事をベースにすることで環境構築ができるようにするためのメモ。

#Mac
- バージョン
    - Sierra 10.12.6

#Applications

##[Homebrew](https://brew.sh/index_ja.html)
- colordiff
- composer
- gdbm
- gettext
- git
- git-flow
- go
- heroku
- heroku-node
- htop
- jemalloc
- jq
- libevent
- libidn2
- libtermkey
- libunistring
- libuv
- libvterm
- luajit
- msgpack
- mysql
- neovim
- oniguruma
- openssl
- openssl@1.1
- peco
- pkg-config
- python
- python3
- pwgen
- readline
- rename
- sqlite
- the_platinum_searcher
- tmux
- tmux-xpanes
- tree
- unibilium
- wget
- xz

##[Homebrew-Cask](https://caskroom.github.io/)
- 1password
- alfred
- appcleaner
- astah-community
- ~~bettertouchtool~~
- coccinellida
- dockstation
- dropbox
- filezilla
- flux
- ~~genymotion~~
- google-chrome
- google-japanese-ime
- ~~intellij-idea-ce~~
- iTerm2
- simplecap
- skype
- slack
- sourcetree
- virtualbox

##brew tap
- buo/cask-upgrade
- caskroom/cask
- greymd/tools
- homebrew/core

~~`brew cask install --force $(brew cask list)`~~

以下を使うべきかも
https://github.com/buo/homebrew-cask-upgrade

##AppStore
- BetterSnapTool

##Shell
- [Prezto](https://github.com/sorin-ionescu/prezto)

個人設定は`.zshrc.local`に追記する

```shell:.zshrc
[ -f ~/.zshrc.local ] && source ~/.zshrc.local
```


##iTerm2
- [Dracula](https://draculatheme.com/iterm/)
- [iterm2-getafe](https://github.com/larssmit/iterm2-getafe)

##Editor
- Neovim
    - Shougo/dein.vim
    - Shougo/deoplete.nvim
    - itchyny/landscape.vim
    - itchyny/lightline.vim
    - cespare/vim-toml
    - editorconfig/editorconfig-vim
    - mattn/emmet-vim
    - kana/vim-smartinput

##Other
- [Docker for Mac](https://www.docker.com/docker-mac)

#Settings

##デスクトップとスクリーンセーバ
- ホットコーナー
    - 左上に「スクリンセーバを開始する」を設定する

##Dock
- ウィンドウをしまうときのエフェクト
    - スケールエフェクト
- 画面の位置
    - 左
- 自動で隠す/表示
    - チェックを入れる

##セキュリティーとプライバシー
- スリープとスクリーンセーバの解除にパスワードを要求
    - すぐに

##省エネルギー
- メニューバーにバッテリーの状況を表示
    - チェックを入れる

##キーボード
- F1、F2などの〜
    - チェックを入れる
- 入力ソース
    - GoogleImeだけにする
- ユーザ辞書＞スマート引用符とスマートダッシュを使用
    - チェック外す
- ユーザ辞書＞二重引用符、一重引用符
    - 半角を選択する

##トラックパッド
- スクロールの方向：ナチュラル
    - チェックをはずす

#zshrc.local
colordiffのaliasを作成する

```shell:.zshrc.local
if [[ -x `which colordiff` ]]; then
  alias diff='colordiff -u'
else
  alias diff='diff -u'
fi
```

#Todo
- ~~iTerm2をCaskで管理する~~
document.write

#document.writeとは？
document.writeはドキュメントに文字列を書き出します。

動的に文字列を書き出したいときに使用します。
文字列として書き出すのでタグ等も書き出せます。
PHPのechoみたいなものです。

```html
<html>
<head></head>
<body>
<script>
document.write('テスト');
document.write('<h1>テスト</h1>');
document.write('<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>');
</script>
</body>
</html>
```

##注意点
document.writeを実行するタイミングに注意する。
基本的にDOMContentLoadedが呼ばれる前に使用する。
※非同期の処理やDOMContentLoaded実行タイミング以降で使用すると上書きされてしまいます。。。

```html
<html>
<head></head>
<body>
<h1>テスト</h1>
<script>
document.addEventListener('DOMContentLoaded', function() {
  document.write('DOMContentLoaded以前に生成されたものを上書き');
});
window.onload = function() {
  document.write('window.onload以前に生成されたものを上書き');
}
</script>
</body>
</html>
```
flowtypeでobject keyの取り違えを無くす

# 謝辞
課題について考察してくれた @akameco さんと答えをくれた @kinzal さんに**感謝！！**

# 始まり
object key(string型)の取り違えを無くしたい。。。

# 何いってんの？
例えば、
APIやDBから手に入れたkey valueオブジェクトが２つあるとして。
ここではUserオブジェクトとItemオブジェクト。

```ts
const users: { [userKey: string]: {/* some value */} }

const items: { [itemKey: string]: {/* some value */} }
```

システムの中でkeyを取り違えたバグを埋め込んでも型安全は保証してくれない。

```ts
const user = users[itemKey] // <= 怒られたい
```

# やりたきこと
js世界ではstringとして振る舞って、でも取り違えたら「型が違うよ！」って怒られたい！！

# やったこと
Stringを拡張したKeyクラスを作り、そこからKeyクラス型を作る

```ts
const UserKeyClass = class extends String {}
const ItemKeyClass = class extends String {}
export type UserKeyType = Class<UserKeyClass>
export type ItemKeyType = Class<ItemKeyClass>
```

そして使う

```ts
const users: { [userKey: UserKeyType]: {/* some value */} }

const items: { [itemKey: ItemKeyType]: {/* some value */} }
```

これなら怒られる！！
HAPPY！！

# でもこれはイケてない解決策です。
この `userKey` を普通にstringとして使おうとすると怒られる。

```js
const path = `/users/${userKey}` // <= flow「string型じゃないからだめ！」
```

こうすると黙る

```js
const path = `/users/${userKey.toString()}`
```

`String` に対して `.toString()` を唱えても同じstringが手に入ることを利用してます。。。

型安全だけ手に入れてjs世界での使い心地が変わらない方法を募集しています。。。。

# 真の解 [2017/09/07]
[Opaque Type Aliases](https://flow.org/en/docs/types/opaque-types/) でKey型を作る

```ts
export opaque type UserKeyType: string = string
export opaque type ItemKeyType: string = string
```

そして使う

```ts
const users: { [userKey: UserKeyType]: {/* some value */} }

const items: { [itemKey: ItemKeyType]: {/* some value */} }
```

怒られる！！

意味不明なクラス作らなくていいし、
toStringとか唱えなくていいし、
プリミティブな `string` の方で定義できるし。

なんだよ最高かよ。

@kinzal さんありがとうございます！
【PHP】XAMPP日本語利用ための設定

#HTTP通信の文字化け対応
サーバー間に疎通テストする時に、HTTPポスト送信はどうしても文字化けしていました。
ローカルでも全く問題ないですが。やはり環境設定のせいでした。

以下の参考から解決しました。
ありがとうございました。


*参考*
[php.ini実行時設定](http://php.net/manual/ja/mbstring.configuration.php)
[日本語利用の為の設定](http://www.phpbook.jp/install/phpini/index5.html)


`---I Love PHP (｡･ω･｡)ﾉ♡`
Laravel5　FormRequestでエラー時のリダイレクト先を変更する

よく直前の画面にリダイレクトされますと書いてありますが、
飛び先は任意の画面を指定できます。
`入力→確認→登録`というフローの時に、
確認画面をすっ飛ばして、`入力←登録`と戻したい時等に有効かと思います。

`$redirect`プロパティをオーバーライドすればOKです。

```php
.
.
.

class StorePostRequest extends FormRequest
{ 
    // URL
    protected $redirect = 'posts/create';

    // or 名前付きURLでも可
    protected $redirectRoute = 'posts.create';

    // or コントローラーとアクションの指定でも可
    protected $redirectAction = 'PostsController@create';

    .
    .
    .
}
```
Java 8に学ぶstaticファクトリーメソッドのメソッド名

Javaにおけるメソッド名は一般的に動詞にするものですが、**staticファクトリーメソッド**については、前置詞や名詞を使用することがあります。

## staticファクトリーメソッドとは

**staticファクトリーメソッド**とは、`String.valueOf()`のように、コンストラクタのかわりにインスタンスを提供するメソッドのことです。
詳しい説明は、『Effective Java』に委譲します。

## Java 8における使用例

Java 8で追加されたクラスでは、インスタンスの提供方法としてstaticファクトリーメソッドが活用されています。

### LocalDateTime

- `from(TemporalAccessor temporal)`：別の時間的オブジェクトからインスタンスを生成
- `now()`：現在日時のインスタンスを生成
- `of(int year, int month, int dayOfMonth, int hour, int minute)`：指定した年、月、日、時、分のインスタンスを生成
- `of(LocalDate date, LocalTime time)`：指定した日付、時刻のインスタンスを生成

### Optional

- `empty()`：空のOptionalを生成
- `of(T value)`：指定した非null値のOptionalを生成
- `ofNullable(T value)`：指定した値のOptionalを生成

### Stream

- `empty()`：空のStreamを生成
- `of(T... values)`：指定した値を要素に持つStreamを生成

## 一般化

上記の例を踏まえると、staticファクトリーメソッドのメソッド名は次のように一般化できます。

|メソッド名|役割|
|---|---|
|`empty`|空のインスタンスを生成|
|`of`|指定したパラメーターのインスタンスを生成|
|`from`|別クラスのオブジェクトからインスタンスを生成|

また、これらのほかに`ofNullable`や`now`のように用途にあったメソッド名をつけると、ユーザーにとっても分かりやすいでしょう。

## 参考リンク

- [Optional (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Optional.html)
- [Stream (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html)
- [LocalDateTime (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDateTime.html)
【Python@Flask】エラー "OSError: [Errno 48] Address already in use" の回避策について

Flask で application.run('127.0.0.1', 5000, debug=True) を実行したが、何もせずそのまま終了しました。次回、再度実行する時に、以下のエラーメッセージが表示されます。

"*OSError: [Errno 48] Address already in use*"

調べたところ、前回実行したプロセスはまだ残っているようです。
現時点の回避策としては、当該のプロセスIDを検索し、削除する方法があります。

1. 以下のいずれかのコマンドでプロセスIDを検索
  1. ```ps -fA | grep python```
  2. ```lsof -i :5000 | grep python```
2. ```kill processID```

**ps**: 現在動作しているプロセスを表示する
**lsof**: オープンしているファイルの情報を表示する（実行には root 権限が必要）

---
###参考
[socket.error: [Errno 48] Address already in use](https://stackoverflow.com/questions/19071512/socket-error-errno-48-address-already-in-use)
[Need to close python socket / Find the current running server on my dev environment](https://stackoverflow.com/questions/7703797/need-to-close-python-socket-find-the-current-running-server-on-my-dev-environm)
VMware仮想マシンのNICのMACアドレスベンダーコード

##### 以下の通り。
自動生成するか、手動生成するかで、プレフィックスが異なるらしい。

| No. |  type |     MAC Address     |
|----:|:-----:|:-------------------:|
|   1 |  auto | `00:0C:29:xx:xx:xx` |
|   2 | manual| `00:50:56:xx:xx:xx` |


##### VMware上にCentOS7をデプロイする時なんかは、以下snippetを。

```bash
if (ip addr | egrep -i "00:0C:29:.+:.+:.+ |00:50:56:.+:.+:.+" --quiet) && (! rpm -q open-vm-tools --quiet)
then
    yum -y install open-vm-tools
fi
```

##### おわり。
JavaでTupleが欲しくなったときメモ


Javaでもラムダ式やStream APIなど比較的モダンな機能が取り入れられ、処理結果を2つ以上の値として返したい場合が増えてきています。
その方法として一つとして思いつくのが、他言語ではよく用意されているTupleです。
ところが、Javaには標準APIとしてTupleが用意されているないため、ちょっと調べたときのメモです。

## Tupleとは
[タプル(tuple)](http://e-words.jp/w/%E3%82%BF%E3%83%97%E3%83%AB.html)
> タプルとは、順序付けられた複数の要素で構成される組。もとは数学の概念だが、いくつかのプログラミング言語にはタプルという名称のデータ型が用意されている。<br>
タプル型の仕様は言語によって異なるが、複数の異なる型のデータやオブジェクトなどを格納でき、配列のように各要素に通し番号（添字）が割り振られ、これによって要素を識別するようなデータ構造を表すことが多い。また、LISPなどの関数型言語では二分木の構造になっているデータ型をタプルという。

こちらはe-Wordsからの引用で、このあたりは言語や実装によっても違うのですが、ここで言うTupleは任意の数の要素、型をまとめる為のデータ構造です。


## なぜ標準APIにTupleがないのか
#### [Does Java SE 8 have Pairs or Tuples?](http://stackoverflow.com/questions/24328679/does-java-se-8-have-pairs-or-tuples/24339157#24336841)
オラクルのJava、OpenJDK開発者の方の回答が参考になります。(一部抜粋と超要約)

> Java SEでPair(Tuple)クラスを持つことが提案され、少なくとも1回は拒否されました。しかし、他のライブラリやアプリケーションで複数の実装が存在していて必要性は理解できます。ただし、Pairのような構造を標準APIとして提供すると、抽象化(クラス)を使わず、複雑なデータ構造をPairsやコレクションで表現したくなります。(`Pair<List<String>,List<Pair<String,List<Boolean>>>>`, `Map<Double,List<Pair<QueryTuple,Map<StatType,Number>>>>`)<br>
また、命名規則の問題やStream APIのような環境では、オブジェクト用のPairだけでなくプリミティブとの組み合わせのPairが必要になります。(`ObjIntPair`, `ObjLongPair`, `ObjDoublePair`, `IntObjPair`, `IntIntPair`...)

などなど、将来的に実装の可能性はあるものの標準APIとして追加は決まっていないのが現状のようです。

ということで、他のパラダイムも含まれてるとは言え、オブジェクト指向言語のJavaでTupleが欲しくなったときは、適切な抽象化(クラス)をすることが現時点の方向性のようです。


## ライブラリを使用する
Javaの方針とは言えそれでも欲しい場合もあると思います。
[javafx.util.Pair](http://docs.oracle.com/javafx/2/api/javafx/util/Pair.html)を使うという方法もありますが、パッケージがjavafxだったり、Pairしか用意されていないなどもあり、外部のライブラリを使うのも手だと思います。

- [Commons Lang](https://commons.apache.org/proper/commons-lang/)<br>
PairとTripleを提供。多くのシステムやライブラリで採用されている為、意図的に追加しなくても使用できる場合もある。
- [javatuples](http://www.javatuples.org/)<br>
1〜10までのTupleを提供。基本的にTupleの為のライブラリのため余計なクラスの追加がない。
- [Reactor](https://projectreactor.io/)<br>
2〜8までのTupleを提供。Spring 5からは標準のdependencyとして追加される。
- [Javaslang](http://www.javaslang.io/)<br>
0〜8までのTupleを提供
- [Functional Java](http://www.functionaljava.org/)<br>
0〜8までのTuple(P)を提供
- [jOOλ](https://www.jooq.org/products/)<br>
1〜16までのTupleを提供



比較的、関数指向の強いライブラリで提供されているケースが多いです。

注意が必要なのは、ライブラリによって、Tupleにもミュータブルなもとのイミュータブルなものがあると言うことです。
特にイミュータブルな性質のものは、Collectorのaccumulatorなどミュータブルな性質を想定しているAPIでは使用できないのできないので注意が必要です。
また、ライブラリによってはTuple以外のクラスも追加されるので安易に導入すると、管理が複雑になる可能性もあります。*1

## 実装する
ライブラリによる追加は楽な反面、課題*1も抱えているため機能性を求めない単純なTupleであれば、Lombokなどで簡単に実装してしまうという方法もあります。

```java
@Data(staticConstructor = "of")
public class Pair<A, B> {
    private final A left;
    private final B right;
}
```

## まとめ
ということで、JavaでTupleが欲しくなった場合には、

1. クラスなどで表現できないか検討する
2. 最小限の機能でよければ自作のTupleで代用する
3. 本格的に使用するなら、ライブラリを検討する

と考えると良さそうです。