OmniAICreator/Qiita-1.07M huggingface dataset:
【Vagrant】Ubuntu16.04環境構築とエラー対応

## 概要
Ubuntu16.04の開発環境をVagrantで構築した際に、詰まったのでメモに残しておく

## 手順
### 1. Vagrant Boxの取得

```
$ vagrant box add ubuntu16.04 https://atlas.hashicorp.com/bento/boxes/ubuntu-16.04/versions/2.3.0/providers/virtualbox.box
```

### 2. Vgrant初期化

- ubuntu16.04でvagrantfileを作成し、初期化を行う

```
$ vagrant init ubuntu16.04
$ vagrant up
```

### <font color="red">※ここでエラーが発生する!!!</font>
#### エラー内容は下記

```
Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.

If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.

If you're using a custom box, make sure that networking is properly
working and you're able to connect to the machine. It is a common
problem that networking isn't setup properly in these boxes.
Verify that authentication configurations are also setup properly,
as well.

If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value.
```
上記の様なエラーが発生し、statusを確認すると<font color="red">running</font>になっているが**ssh接続ができない**
# 　　　　　　　　<font color="red">↓対応策↓</font>

### 1. Vagrantfileに追記
[このissue](https://github.com/chef/bento/issues/682#issuecomment-252381145)をみると、下記をVagrantfileに追加すると、エラーなくvagrantが初期化できるみたい。

```
vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
```

なので、`config.vm.provider`についてのVagrantfileの記載を下記のように修正する

```diff:Vagrantfile
-  # config.vm.provider "virtualbox" do |vb|　　　　　　　　　　
+  config.vm.provider "virtualbox" do |vb|　　　　　　　　　　　
   #   # Display the VirtualBox GUI when booting the machine
   #   vb.gui = true
-  #            　　　　　　　　　　　　　　　　　　　　　　　　　
+  vb.customize ["modifyvm", :id, "--cableconnected1", "on"]　
   #   # Customize the amount of memory on the VM:
-  #   vb.memory = "1024"　　　　　　　　　　　　　　　　　　　　
+  vb.memory = "2048"  　　　　　　　　　　　　　　　　　　　　　
   # end
```

### 2. vagrantを再度初期化

```
$ vagrant reload
```
今度は問題なく起動ができた

### 3. 最後にssh接続

```
$ vagrant ssh
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-38-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.
```

こちらも問題なく接続できた。

# おわり
Azure Building Blocks を試してみる


# はじめに
Ignite で発表された新機能 & Update の検証も落ち着いてきたなと思ったら、
唐突に Azure Building Blocks が発表されたので早速試してみました。

# Azure Building Blocks とは？
ざっくりいうと、Azure リソースの展開を簡略化するように設計された仕組みのことです。
ユーザーは複雑な ARM Template を記述することなく、デプロイするリソースのパラメータ設定を記述し
azbb コマンドを実行するだけで裏でいい感じの ARM Template にマージされデプロイされます。

# サポートされている Azure リソース
現在は下記のリソースがサポートされています。

- Virtual Network (ゲートウェイ、ピアリング含む)
- Network Security Groups
- User Defined Routes
- Windows and Linux VMs
- VM Extensions
- Internal and External Load Balancers
- Application Gateway

# 事前準備
事前にコマンドラインツールをインストールします。
ローカルにインストールすることも可能ですが、今回は Azure Cloud Shell にインストールします。
インストール方法は下記に書いてある通りにコマンドを実行すれば完了です。
https://github.com/mspnp/template-building-blocks/wiki/Install-Azure-Building-Blocks-in-Azure-Cloud-Shell
<img width="641" alt="azbb1.png" src="https://qiita-image-store.s3.amazonaws.com/0/41379/3f173577-c830-5156-d61a-45aa009f040a.png">

azbb コマンドが認識されていれば準備完了です。
<img width="372" alt="azbb2.png" src="https://qiita-image-store.s3.amazonaws.com/0/41379/f8c12fc8-4e79-87b8-df55-7ad51a5368f6.png">

# 試してみる
Github にあるサンプルを使用して Azure にデプロイします。

１. 下記のURLからjsonファイルをダウンロードしてくる
https://github.com/mspnp/template-building-blocks/blob/master/scenarios/

２. ダウンロードしたjsonファイルを確認する

```json
{
  "$schema": "https://raw.githubusercontent.com/mspnp/template-building-blocks/master/schemas/buildingBlocks.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "buildingBlocks": {
      "value": [
        {
          "type": "VirtualNetwork",
          "settings": [
            {
              "name": "msft-hub-vnet",
              "addressPrefixes": [
                "10.0.0.0/16"
              ],
              "subnets": [
                {
                  "name": "firewall",
                  "addressPrefix": "10.0.1.0/24"
                },
                {
                  "name": "subnet1",
                  "addressPrefix": "10.0.2.0/24"
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

```
書き方がシンプルになっていますね。

３. Cloud Shell が使用している File Storage に json ファイルをアップロード
今回は作成した azbb フォルダにアップロード
<img width="478" alt="azbb3.png" src="https://qiita-image-store.s3.amazonaws.com/0/41379/9350c398-b100-044e-82b3-dd459cc391c9.png">
管理ポータルから File Storage に直接アップロードできるようになったのは良いですね。

４. Cloud Shell にて azbb コマンド実行

```bash
azbb -g [リソースグループ名] -s [サブスクリプションID] -l [リージョン] -p [パラメータファイルパス] --deploy
```
<img width="694" alt="azbb4.png" src="https://qiita-image-store.s3.amazonaws.com/0/41379/e51dbace-0037-1037-2738-388bac389f31.png">

５. リソースが正しくデプロイされていることを確認する
<img width="460" alt="azbb5.png" src="https://qiita-image-store.s3.amazonaws.com/0/41379/9712d4b1-5d82-1fb9-cef6-b74d92de77a5.png">

# 最後に
デプロイが完了すると、Cloud Shell で使用している File Storage のファイル共有直下に
「元ファイル名-output.json」が出力され、実際にデプロイで使用した ARM Template が確認できます。
<img width="880" alt="azbb6.png" src="https://qiita-image-store.s3.amazonaws.com/0/41379/b4945ed5-9cef-c404-0fee-58be1025b153.png">

サンプルや各種ドキュメントは Github に公開されているので、皆さんも試してみください。
https://github.com/mspnp/template-building-blocks
HP ZBook 17 G4 に Ubuntu 18.04 と CUDA 9.0 と cuDNN 7.0 をインストール

# はじめに
Xeon + Quadro P5000搭載ノートPCのHP ZBook 17 G4を半額で買ったので、さっそくUbuntu18.04を入れようと思います。

# 手順
## Ubuntu用のパーティションをつくる
まずWindowsでUbuntu用のパーティションをつくります。
参考： https://jp.easeus.com/partition-manager/resize-partition-windows-10.html

## 空いてるUSBストレージにインストール用Ubuntu 18.04を焼く
Ubuntu本家のサイトにあるイメージではインストールに失敗したので、日本語版を入れます。
https://www.ubuntulinux.jp/japanese

Universal USB InstallerでUSBストレージに日本語版Ubuntuを焼きます。
https://universal-usb-installer.jp.uptodown.com/windows

## USBストレージでブートする
再起動してESCボタンを押してBoot MenuからUSBストレージを選択し、Ubuntu 18.04をインストール。

## パッケージ関連のアップデート
```
sudo apt update
sudo apt upgrade
sudo apt autoremove
sudo apt clean
```

## Caps lcckキーをCtrlに変える
```
gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"
```
## パネルに日付を表示させる
```
gsettings set org.gnome.desktop.interface clock-show-date true
```
## 日本語フォルダー名を英語表記にする
```
env LANGUAGE=C LC_MESSAGES=C xdg-user-dirs-gtk-update
```

## メモリ圧縮を有効にする
大きな行列を扱うときなどに便利なので

```
sudo apt-get install zram-config
```

## CUDA 9.0 をインストール
https://developer.nvidia.com/cuda-downloads

```
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-*/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda
```

## cuDNN 7.0.3 をインストール
https://developer.nvidia.com/rdp/cudnn-download

```
tar xzf cudnn-9.0-linux-x64-v7.tgz
sudo cp -a cuda/lib64/* /usr/local/lib/
sudo cp -a cuda/include/* /usr/local/include/
sudo ldconfig

rm -rf cuda cudnn-9.0-linux-x64-v7.tgz
```
AndroidのListViewの下にボタンを置きたかった

自分用備忘録。

# まず結論
```xml:activity_list.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ListActivity"
    android:id="@+id/relativeLayout">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true">
        <Button
            android:id="@+id/btnReload"
            android:layout_width="150sp"
            android:layout_height="wrap_content"
            android:text="@string/reload" />
        <Button
            android:id="@+id/btnClose"
            android:layout_width="150sp"
            android:layout_height="wrap_content"
            android:text="@string/close" />
    </LinearLayout>

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_marginBottom="50sp"
        android:layout_weight="1" />

</RelativeLayout>
```
## ポイント1:RelativeLayout 
使うといいらしい。
理由を調べなければ。

## ポイント2: android:layout_marginBottom
ボタンが最下部に表示されるので、その分のマージンを空けておかないとフォーカスがリストに吸われてしまっていたので。
【FileMaker】JSONでkey:value形式でフィールド数を少なくする

[JSON](https://fmhelp.filemaker.com/help/16/fmp/ja/index.html#page/FMP_Help/json-functions.html)です。
（ヒロシではありません）
今回は、ver.16で新登場したJSONです。

JSONは、いわばキー(key)と値(value)のセットで持つ設定ファイルのようなものですが、FileMaker界隈には最近登場したのでなかなか慣れない方も多いかと思います。
Windows、どちらかというとDOSの設定ファイルやWebシステムのなんちゃらconfとかでよく使われている、あれです。

例えば、

id:admin
dir:/hoge/hoge
color:red

のような設定とか。

そのほか、意味を書き出すときに、以下のようにしたりしませんか？

受注：注文を受けること。
発注：注文を出すこと。

この場合、":"で区切った左がキー、右が値となりますね。

このようなkey:valueの形は、はるかかなた昔から使われてきていて、FileMaker界隈以外で（以前のFileMakerを知らなくてすみません）よく使われてきました。

FileMakerでもJSONを扱えるようになったことから、このkey:value方式を簡単に扱えるようになりました。

今回のネタは、こうした設定ファイルを作る、取り出す、というところになります。

大まかな流れは、以下のキャプチャのような感じです。
<img width="1022" alt="filemaker_json1.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/ef5955bc-3398-4558-3b33-d2a28d5d05dd.png">

まずは、リストを作りましょう。
今回は、単純な構造にして構造を簡単にしてあります。
<img width="885" alt="filemaker_json2.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/17550996-7215-5f33-a098-9e10f90f020e.png">
キモになるのは、空のフィールドに継ぎ足し継ぎ足しでリストを完成させる、ということになります。
JSONリストに追加する場合は、その名の通り、[JSONSetElement](https://fmhelp.filemaker.com/help/16/fmp/ja/index.html#page/FMP_Help%2Fjsonsetelement.html%23)という関数を使います。
出来上がったリストは、画面左に表示しているフィールドで確認できます。
リストになっていますね。

では、セットした情報を取得する場合です。
<img width="1081" alt="filemaker_json3.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/b1c4ebe9-2852-72d2-dd3e-2712a7b53777.png">
引数として、取得する値のキーを指定します。
そのキーを頼りに、[JSONGetElement](https://fmhelp.filemaker.com/help/16/fmp/ja/index.html#page/FMP_Help%2Fjsongetelement.html%23)で値を取得します。
キーが存在しなかった場合は、エラーが返りますので、エラー処理を追加しておくと親切です。

では、セットしたキーが不要になった場合は、どうしましょう。
消しましょう。

作り方は、取得と同様です。
<img width="968" alt="filemaker_json4.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/70faca4b-a7f8-b19e-d219-6d43798f11cf.png">
JSONGetElementから、[JSONDeleteElement](https://fmhelp.filemaker.com/help/16/fmp/ja/index.html#page/FMP_Help%2Fjsondeleteelement.html%23)に変わっただけです。

では、実行してみましょう。
<img width="1027" alt="filemaker_json5.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/5780099b-0318-4b59-c0a7-2b912fdf696b.png">
最初は存在した、key1の情報が削除されているのがわかります。


今回使った、
JSONSetElement
JSONGetElement
JSONDeleteElement
の３つでかなりいろいろなことができると思いますので、わざわざフィールドを持ちたくない小さな項目などで使ってみてください。
CVSの脆弱性(CVE-2017-12836)の確認の仕方


# はじめに

「[うんこもりもり](https://github.com/greymd/CVE-2017-1000117)」で有名になったGitの脆弱性だが、SubversionやCVSにも同様な脆弱性が存在する。CVSの場合は[CVE-2017-12836](https://oss.sios.com/security/cvs-security-vulnerability-20170814)という識別子が与えられている。しかし、Subversionはともかく、CVSは治ったのかどうなのか確認が難しい。とりあえず現時点(2017年10月6日)では、

CentOS (yum) 7: CVS 1.11.23
MacOS (HomeBrew): CVS 1.12.13
Windows (Cygwin): CVS 1.11.23

に脆弱性が残っている。

以下に確認方法を示す。

# 脆弱性の確認

脆弱性の本質は、cvsのCVSROOTをコマンドラインから指定するオプション`-d`に、ProxyCommandを指定できるOSコマンドインジェクションだと思われる。まずはローカルでこんなテストをする。

```shell-session
$ export CVS_RSH=ssh
$ mkdir temp;cd temp
$ ls # ファイルは何もない

$ cvs -d '-oProxyCommand=echo hello>hello.txt;hoge:/hoge' co hoge
Pseudo-terminal will not be allocated because stdin is not a terminal.
ssh_exchange_identification: Connection closed by remote host
cvs [checkout aborted]: end of file from server (consult above messages if any)

$ ls
hello.txt
```

ProxyCommandとして`echo hello>hello.txt`が実行され、ファイルが作成された。このように、ローカルのユーザ権限でできることはなんでもできる。

次に、リモートサーバの場合。ユーザはremote.server.comに、usernameというアカウントでsshログインできるとする。ssh-agentが鍵を覚えており、パスワード入力なしに接続できる状態を想定する。

```shell-session
$ ssh -l username remote.server.com "ls hello.txt" # リモートにhello.txtが無いことを確認
ls: cannot access hello.txt: No such file or directory

$ cvs -d '-oProxyCommand=ssh -l username remote.server.com "echo hello>hello.txt";hoge:/hoge' co hoge
Pseudo-terminal will not be allocated because stdin is not a terminal.
ssh_exchange_identification: Connection closed by remote host
cvs [checkout aborted]: end of file from server (consult above messages if any)

$ ssh -l username remote.server.com "ls hello.txt" # リモートを再度確認
hello.txt
``` 

上記のように、脆弱性のあるCVSでは、ローカル、リモートともに`-d`オプションと`ProxyCommand`のあわせ技で好き放題できる。

# 脆弱性が無い場合

対策されたCVSを使うと上記のようなことはおきない。Program Temporary FixというパッチがあたったCVSで試す。

```shell-session
$ mkdir temp;cd temp
$ ls # ファイルは何もない

$ cvs -d '-oProxyCommand=echo hello>hello.txt;hoge:/hoge' co hoge
cvs checkout: CVSROOT (`-oProxyCommand=echo hello>hello.txt;hoge:/hoge') must not start with a dash.
cvs [checkout aborted]: Bad CVSROOT: `-oProxyCommand=echo hello>hello.txt;hoge:/hoge'.

$ ls # ファイルが作成されない

```

エラーメッセージが変わったのがわかると思う。同様にリモートサーバにもアクセスできない。

# まとめ

通称「うんこもりもり脆弱性」のCVS版のチェック方法を紹介した。とりあえず手元にあった

CentOS (yum) 7: CVS 1.11.23
MacOS (HomeBrew): CVS 1.12.13
Windows (Cygwin): CVS 1.11.23

には脆弱性があった。また、ベンダーから提供されたパッチで脆弱性が修正されていることも確認できた。

まだCVS使っているところがあるか知らないけど、もし使っている場合はパッチをあてるなりなんとかしてください。

# 参考

* http://www.openwall.com/lists/oss-security/2017/08/11/1
VSCodeでflow環境でも正しくハイライトさせる

VSCodeでflowtypeを導入したjsファイルを編集していると、どうも正しくシンタックスハイライトが機能しません。下の画像だと、`const typesAst`などが白いままです。

![スクリーンショット 2017-10-06 17.29.31.png](https://qiita-image-store.s3.amazonaws.com/0/15319/0321f1e1-1490-3bfc-041a-1936c50b9fc4.png)

これを修正するには、settings.jsonに以下を追加します。


```json
  "files.associations": {
    "*.js": "javascriptreact"
  }
```

すると以下の画像のようにハイライトされるようなりました。

![スクリーンショット 2017-10-06 17.29.46.png](https://qiita-image-store.s3.amazonaws.com/0/15319/57e6d99f-bf48-e1e4-28f7-f614f9d576d1.png)

しかし、NAMEやVALUEの緑のハイライトが消えてしまっています。
このあたりを解消する方法を知っている方がいれば、コメント等で教えていただけると幸いです。しかし、画像を貼り付けるまでそれに気づかない感じだったので、const ~からはじまるシンタックスハイライトが機能している状態の方が違和感がないので、そちらを使っています。
Let’s EncryptをCentOS7.4にインストール

パッケージインストール

```
sudo yum -y install --enablerepo=epel certbot
```

以下SSL証明書取得コマンド

```
sudo certbot certonly --webroot -w ドキュメントルート -d ドメイン
```

証明書更新

```
sudo certbot renew
```

証明書更新は、renewで期限がきたら更新されるのでデイリーでCRONに設定しても良い
なお、稼働中のサーバにSSLを導入する前提の記事です。

```
0 0 * * * /bin/certbot renew
```
逆関数とはなにか？その定義と応用例

#逆関数について理解を広げていこう！
##1. 関数ってなんだろう？
関数の知っている例をまずはあげてみましょう。
一次関数、二次関数、三角関数などいろいろありましたね。それぞれを式で表してみましょう。
###1.1一次関数から振り返ってみよう
一次関数は次の形をしていましたね。
$$y=ax+b$$
これは$x$に何か値を入れると$y$が決まるという意味ですね。例えば次の例を考えてみましょう。
###1.2具体的な例を考えてみよう。
$y=2x+1$では$x$をきめると$y$はどのようになるだろうか？
このグラフは傾き２の切片１の一次直線ですね。図で表すと以下のとおりです。
![2x+1.png](https://qiita-image-store.s3.amazonaws.com/0/204488/8e277fb5-b36d-ece7-628e-33c538c5b503.png)
###1.3 xの値を決めるとそれに対応したｙの値が計算することにより簡単に決まる。
では$y$の値を決めた時はどうなるのでしょうか？
例えば、$y=1$となったとき、$x$の値はどうなるでしょうか？次の計算を行うことが一般的でしょう。
$$1=2x+1$$
``１を移行して両辺を２で割ればいい``わけですね。
そうして計算すると$x=0$であることがわかります。つまり、
$$y=1、x=0$$
グラフで見ると$(x,y)=(0,1)$を通過していることがわかりますね。
###1.4 yから代入してもｘの値を調べることができる。
では別の例を見てみましょう。$y=3$では$x$の値はどうなるでしょうか？
先ほどと同じように、yに３を代入してみましょう。
$$3=2x+1$$
$x$についてとくには、同じように``１を移行して両辺を２で割ります``ね。
###1.5ｙがあたえられたときにｘをもとめるには``１を移行して両辺を２で割ります``すればよい。
でも毎回``１を移行して両辺を２で割ります``をするのがめんどうくさいですよね？どうすればいいでしょうか？毎回xから聞かれないでｙから聞かれる場合は最初っから``ｘ＝``の形にしておけばいいですよね。
つまり、
$$x=\frac{y-1}{2}$$
の形にしておけばyが与えられた時にすぐにxの値を出すことができますね。
さらにグラフも書いておけばｙを与えればすぐにビジュアル的にｘの値をさがすことができますね。
ここで高校数学では左側のアルファベットをyと書くことが多いので以下のように直したほうが見やすいです。
$$y=\frac{x-1}{2}$$
このグラフを書いてみましょう。
![red.png](https://qiita-image-store.s3.amazonaws.com/0/204488/4c08168b-41df-32c6-b6a0-e2c196469522.png)
###1.6 最初のグラフと比べてみよう。
$y=2x+1$と$y=\frac{x-1}{2}$の同じところに書いてみよう。どんなとくちょうがあるだろうか？
![2graph.png](https://qiita-image-store.s3.amazonaws.com/0/204488/cf530488-50c8-2523-a35e-e97875b7e7b9.png)

###まとめ
◎関数の比較

| 元の関数 | $y$についての関数 |
|---|---|
| $y=2x+1$ | $y=\frac{x-1}{2}$ |
◎$y$についての関数に直す方法
``１を移行して両辺を２で割る``
グラフにすることで、特徴をつかめるようになってきます。
他の例も見てみましょう。すぐに特徴がつかめない場合は、いろいろな例を作ってグラフに書いていきましょう。
###いくつかの例をあげてxについての関数と、yについての関数を整理してみよう。

例1 $y=3x+1$
例2 $y=x+4$
例3 $y=4x-1$
それぞれxについてのグラフとyについてのグラフをまとめていきましょう。
[Survey] Kaggle - Carvana 5位解法まとめ

Kaggle - Carvana Image Masking Challenge[^1]の5位解法[^2]の調査記事です．


Title: LB0.9972 - 5th Place Overview
Name: Kyle Y. Lee
Kaggle Discussion: https://www.kaggle.com/c/carvana-image-masking-challenge/discussion/40144

## 開発環境

- GTX1080Ti: コンペ終了前に購入．1918x1280と2010x1340に利用．
- GTX1080
- GTX1070: 推論とTTAのみ

## Model

![image.png](https://qiita-image-store.s3.amazonaws.com/0/107399/ccc03eb9-32ed-bd48-b491-f988b3d3a4de.png)
フォーラム[^2]より引用


- 学習済みResNet 50層でマスクデータを作成(U-Netじゃない)
- Optimzier: Adam
- learning rate: 1e-6

詳細としては，下記の7つのモデルのアンサンブルで予測．

1. 1918x1280(HQ, TTA6x) [weight=0.2,public LB=0.9970+, private=0.9969]
2. 1918x1280(TTA6x) [weight=0.3,public LB=0.9970+,private=0.9969]
3. 1918x1280(HQ, TTA2x), Fold 2 [weight=0.2,public LB=0.9970+,private=0.9969]
4. 1600x1280(TTA4x) [weight=0.1,LB=0.9969]
5. 2010x1340(TTA2x) [weight=0.1,LB=0.9969]
6. 1280x1280(TTA6x) [weight=0.05,LB=0.9968]
7. 1280x1280(TTA6x, using only dice loss) [weight=0.05,LB=0.9968]

備考: 1918x1280と2010x1340は8GBより大きいメモリが必要

#### Augmentation

- 左右反転
- 回転(10度)
- 平行移動(約5%)
- 拡大縮小(10%)
- TTAを左右反転と平行移動で6回実行．

##### ローカル上でのスコア

- 0.9970: 1918x1280
- 0.9969: 1600x1280 と 2010x130
- 0.9968: 1280x1280

##### 損失関数

- binary cross entropy - log(dice) (diceのみより若干改善)
- Batch Size: 1

## 後処理

- アンテナ部分の補正
- 主輪郭から一定上離れた箇所にあるアーチファクトの除去
- ホイール部分が閉じたりしないようにした．


#### テストデータの検証

過学習してないか下記処理で視覚的にテストデータを確認．

- アンサンブルの安定性(各モデルのピクセルの合計値のばらつきなど)
- 輪郭の数(輪郭が多すぎる場合はノイズが入っちゃってる)
- 二番目に大きい輪郭の面積(二番目に大きい場所は車じゃないはずなので，これが大きい場合なんかやらかしてる)

## 今後の改善


- より多様なネットワークでアンサンブルする．
- ResNet 101層や152層を利用する．(今回はResNet 50層を利用


## References

[^1]: Kaggle, [Carvana Image Masking Challenge](https://www.kaggle.com/c/carvana-image-masking-challenge), 2017.
[^2]: Kyle Y. Lee, [LB0.9972 - 5th Place Overview](https://www.kaggle.com/c/carvana-image-masking-challenge/discussion/40144), 2017.
MySQLでレコードを生成した時刻を、カラムの値(created_at)に入れる

 -  任意のテーブルの__created_at__に、レコードの生成時刻を入れたい。

```
select * from users;
+----+------------+---------------------+
| id | name       | created_at          |
+----+------------+---------------------+
|  1 | kapibara   | 2017-10-06 07:25:42 |
+----+------------+---------------------+
1 row in set (0.00 sec)
```

■ 実施例

- テーブルを作成
 - カラム(created_at)のデフォルト値：__current_timestamp__
 
```
create table users (
  id int,
  name text,
  created_at datetime default current_timestamp
);
```

- レコードの挿入

```
insert into users (id, name) value (1, 'kapibara');
```

■ アップデートの時刻を入れたい場合 : __on update current_timestamp__

```
create table users (
  id int,
  name text,
  created_at datetime  default current_timestamp,
  updated_at timestamp default current_timestamp on update current_timestamp
);
```
Salesforceの画面定義書を自動で作成する方法

SalesforceでCRM系の案件なら良いのですが、実際にはこれ業務システムやん！みたいなのってありますよね。そんなときにはインプリだけではなく実際に画面定義書を作る必要があるので、自動で作れないかなと思い、やってみました。

##今回やりたいこと
・Salesforceのオブジェクトから画面定義書を作る

##前提条件
画面がすでにあることを前提としています。側だけを作っておいたらOKです。
VFの画面は対応していません。

##環境
Windows10 64bit

##Force.com CLIをインストール
メタデータをもとに画面定義書を作成するので、Force.com CLIをインストールします。
[こちら](https://force-cli.herokuapp.com/)からインストールします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/c4843ab5-f5cf-d818-aa4b-57c98b76382f.png)
対象のOSを選択してください。

exeファイルはC直下に保存します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/aac62aed-807c-51c7-63bb-cad1f2eb5d5b.png)

##メタデータのDL
コマンドプロンプトを開きます。

```bat:コマンドプロンプト
# C直下へ移動
> cd \
> force login -i = インスタンスURL
# Sandboxだったらforce login -i=https://test.salesforce.com
```

ブラウザでアクセス要求をしてくるので、許可をします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/2f170466-794d-a1e1-7ea6-849ffcb9c618.png)
こちらが表示されたらコマンドプロンプトに戻ります。

```bat:コマンドプロンプト
> force export metadata
NOT done yet: InProgress Will check again in five seconds.
NOT done yet: InProgress Will check again in five seconds.
…
Exported to c:\metadata
```

Cドライブ直下にmetadataが作成されていることを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/17d05032-8fd8-829e-7c24-c5aed4e4642d.png)

##オブジェクト定義書のDL
DLしたメタデータから作成してもよいですが、[DocForce](https://docforce.herokuapp.com/)様からDLさせていただきます。
環境を選択して、Sign inします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/48b3a2bd-b983-8733-8b7f-fa3c9daa5fca.png)
左の方に設計書というショートカットがあるので、それのオブジェクトを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/b61cbcf5-598a-d55f-fe07-fcc2e2fc61f9.png)
全件ダウンロードします。表示行数がデフォルトでは25件になっているので、1000件にし、すべてをクリックしてからドキュメント作成ボタンを押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/33e52997-67ee-71d9-007e-4c263b07cec8.png)
ダウンロードできました。こちらだけでもすばらしいシステムなので、積極的に使います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/0395604c-961d-3b82-88f1-86f838982c46.png)

##一括で画面定義書の作成
マクロ作りました。[こちら](https://www.dropbox.com/s/yplnjhuwyd6v0bg/SF_%E7%94%BB%E9%9D%A2%E5%AE%9A%E7%BE%A9%E6%9B%B8%E4%BD%9C%E6%88%90%E3%83%9E%E3%82%AF%E3%83%AD.xlsm?dl=0)からDLしてください。

使い方は下記を参照にしてください。パスを指定してするだけなので、特に難しくはないと思います。ただ時間だけはかかるので、そこは我慢ください><
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/80608340-cdd4-4060-9e89-f472b916af0b.png)



シート選択ボタンを押すと作成されたシートが新規ファイルとして作成されるので、保存して終了です。

##画面定義書の構成
インデックス
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/36681c92-ee23-60c4-e0a8-12dba3b7f80a.png)

各画面
画面キャプチャを張る箇所です。これはさすがに自動化できていません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/2c4d28e0-9343-97e2-4d0d-fa7da431d608.png)
各画面で使っている項目定義です。~~表示形式や桁数なんかは今後アップデートして持ってくるようにしたいですね。~~ <font color="Red">(2018.05.02)持ってくるようにしました！！</font>
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/21a5f7c6-c25f-2f5d-9dc5-e9dddadfe6a7.png)

アクション定義はボタン押下時や画面初期表示の定義を書きます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/aeef9f83-5f0b-9c7b-3f53-f4076b61bca8.png)

##まとめ
うーん、作ってみたは良いですがもう少し楽に設計書作りたいですねー。
JDK 7とJDK 8を切り替える

JDK 7とJDK 8を切り替えてる方法

# JDKを探す

コマンドでパッケージを検索してみましょう。

```bash
$ yum search openjdk
```
```
Loaded plugins: priorities, update-motd, upgrade-helper
12 packages excluded due to repository priority protections
======================= N/S matched: openjdk =============
java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.8.0-openjdk-headless.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.8.0-openjdk-javadoc-zip.noarch : OpenJDK API Documentation compressed in single archive
java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle
```

# JDK1.8をインストール


```bash
$ yum install java-1.8.0-openjdk
#
# インストールした Java のバージョンが表示されれば確認終了です。
#
$ java --version
```
```
java version "1.8.0_141"
```

# JDK 7→JDK 8の場合に

```bash
$ java -version
#
# output
# java version "1.7.0_151"
# ....
#
$ alternatives --config java
#
# output
#
# There are 3 programs which provide 'java'.
# 
#   Selection    Command
# -----------------------------------------------
# *+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
#    2           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
#    3           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
#
# Enter to keep the current selection[+], or type selection number:
#
# input 2
$ java -version
#
# output
# openjdk version "1.8.0_141"
# ......
```

# JDK 8 → JDK 7の場合に


```bash
$ java -version
#
# output
# java version "1.8.0_141"
# ....

$ alternatives --config java
#
# output
#
# There are 3 programs which provide 'java'.
# 
#   Selection    Command
# -----------------------------------------------
# *  1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
#  + 2           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
#    3           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
#
# Enter to keep the current selection[+], or type selection number:
#
# input 1
$ java -version
# output
# openjdk version "1.7.0_151"
# ......
```

# end
皆様のお仕事の役に立てれば幸いです。
Cognos Analyticsのバージョンアップ時のカスタムファイルの扱い

#概要
Cognos Analyticsは、上書きインストールでバージョンアップできますが、自分でカスタマイズしている色々なファイルって、どうなっちゃうんだっけ？
と、結構前にこの内容を理解していたはずなのに、本日聞かれてすっかり忘れてしまっていたので、自分の備忘録も込めて投稿しておきます。

#内容
Cognos Analytics 11.0.6以降の場合の話です。
以下のフォルダの、2つのファイルがポイントです。
C:\Program Files\ibm\cognos\analytics\configuration\preserve\.ca_base_preserve.txt
C:\Program Files\ibm\cognos\analytics\configuration\preserve\preserve.txt
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/b26124f8-b5aa-96a0-fd2a-ca32f3336034.png)


バージョンアップの時、.ca_base_preserve.txtファイルにリストされているファイルは、カスタマイズが入っていても、そのまま新バージョンの環境で保持されて移行されます。
※exclude:ファイル名となっているものは、逆に保持の対象から明示的に外されているものです。
※このファイルを編集する事は禁止されています。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/28784010-a92e-c528-5ea6-a76b5915ed89.png)

上記のファイルのリストに無いファイルをカスタマイズしていて、バージョンアップ時に保持して欲しい時は、preserve.txtファイルに記載します。
説明に記載されているように、こちらのファイルも普通にファイル名、フォルダ名を書けば保持され、exclude: の後に記載すると保持対象外となるようです。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/339ea379-b09a-69dd-89f5-c838d08829c4.png)

簡単ですが、以上です。

#参考情報
**How to upgrade your version of Cognos Analytics**
http://www-01.ibm.com/support/docview.wss?uid=swg21994915

**Preserved files and folders when upgrading Cognos Analytics**
https://www.ibm.com/support/knowledgecenter/SSEP7J_11.0.0/com.ibm.swg.ba.cognos.inst_cr_winux.doc/c_ca_upgrade_latest.html
`env HOGE=FOO echo $HOGE` ← 何も出ない

## NG

```bash
$ env HOGE=FOO echo $HOGE
```

**出力:** (空文字)

```bash
$ HOGE=FOO echo $HOGE
```

**出力:** (空文字)

## OK

```bash
$ HOGE=FOO; echo $HOGE
```

**出力:** `FOO`

ただしシェル変数 HOGE に代入されるため副作用がある。


```bash
$ HOGE=FOO bash -c 'echo $HOGE'
```

**出力:** `FOO`

こちらは副作用なし。

## 参考

- [bash \- How to print / echo environment variables? \- Stack Overflow](https://stackoverflow.com/questions/40050793/how-to-print-echo-environment-variables)
コマンドラインからbatchmodeでレンダリング結果を出力したい

Unity2017.1.0f3

https://github.com/Unity-Technologies/GenericFrameRecorder
↑これとffmpeg使って動画にしていたのですが、
Jenkins先生に動画にしてもらおうと思うとちょっと困ります。

https://docs.unity3d.com/jp/530/Manual/CommandLineArguments.html
例によってコマンドラインからUnity起動して云々なんですが、
-batchmodeにするとGameViewがそもそもないのです。

で、GenericFrameRecorderにも採用されてるよく見るコードに一工夫。
GameViewがなかったら作ればいいじゃない。


```csharp
        public static EditorWindow GetMainGameView()
        {
            System.Type T = System.Type.GetType("UnityEditor.GameView,UnityEditor");
            System.Reflection.MethodInfo GetMainGameView = T.GetMethod("GetMainGameView", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
            System.Object Res = GetMainGameView.Invoke(null, null);
            if(Res == null)Res = EditorWindow.GetWindow(T);
            return (EditorWindow)Res;
        }
```
if(Res == null)Res = EditorWindow.GetWindow(T);
を追加しました。

あとWindowsのJenkinsは素の設定のままだとGUIアプリケーションが使えず、DirectXのあたりでこけてたので対処しました。
以下参考
http://toshimana.hatenablog.com/entry/2014/07/05/095613
docker-compose.ymlの中で環境変数を展開する

https://docs.docker.com/compose/compose-file/#env_file
https://docs.docker.com/compose/compose-file/#environment

docker-compose.ymlの中で環境変数を別で定義しておきたかったけれど
中々動かなかったので試行錯誤したまとめ


## 現象

サンプル

```yaml:docker-compose.yml
version: "3.3"
services:
  test:
    image: ubuntu:${VER}
    env_file: test.env
    ports:
      - $PORT:$PORT
    command: "echo $PORT"
```

の、ように変わりそうな値は別に定義しておきたくなるのです…が

### どうやっても値が空

```
env_file:
  - ./test.env
```

```ini:test.env
PORT=8080
VER=17.10
```

**>>>The PORT variable is not set. Defaulting to a blank string.<<<**

とか出る

仕方がないので

```
environment:
  - PORT=8080
```
等もためしてみる

**>>>The PORT variable is not set. Defaulting to a blank string.<<<**

### この時点で考えたこと
+ composeからdockerfileに値を渡すならば、enviromentは機能している
+ composeファイル内でenviromentの定義を参照しようとしても空

# 結局、どうすれば読み込めるか？

+ .envに書く

https://docs.docker.com/compose/environment-variables/#the-env-file

```ini:.env
PORT=8080
VER=17.10
```


```yaml:docker-compose.yml
version: "3.3"
services:
  test:
    image: ubuntu:${VER}
    ports:
      - $PORT:$PORT
    command: "echo $PORT"
```

```
$Recreating test_test_1 ...
Recreating test_test_1 ... done
Attaching to test_test_1
test_1  | 8080
test_test_1 exited with code 0
```

## おまけ

### LongSyntaxとは相性がわるいらしい

#### intとか
```
services.hoge.ports.published contains "8080", which is an invalid type, it should be an integer
```

泣く泣くshort syntaxに…
MacのExcelが重い時の解決方法

#MacのExcelって...

MacのExcelて重くなりますよね。
何をするにも1分くらいのタイムラグがあるので解決方法調べました。
私はこれで解決できました。

#解決方法
[Excel 2016 for Macの遅い動作を改善する](https://qiita.com/foursue/items/88ea735801502e30a710)

[MacのExcel（エクセル）での文字入力が極めて重い時の解決策](https://ideacloud.co.jp/blog/other/mac-excel.html)

#さいごに
諦めていたので思いのほか、動作が軽くなって嬉しいです(笑)
これで快適なExcelライフを過ごせそうです。
jsdoでMK-80 その8

#概要
jsdoでMK-80やってみた。
ハンドアセンブルを説明してみる。その2。

#準備する物
インテル8080命令セット
https://qiita.com/ohisama@github/items/c66231c3367227b31cbc
インテル8080命令コード表
https://qiita.com/ohisama@github/items/d59fa40ded943fe67f7e
鉛筆、メモ紙

#お題
キーを押すとキーコードを表示する。

#作成するプログラム
口で言うと

キー入力サブルーチンを呼ぶ。83ｆ7番地にセーブして、LED表示サブルーチンを呼ぶ。ループ。
#アセンブラで書くと
キー入力サブルーチンを呼ぶ。

CALL keyinput

83ｆ7番地にセーブして、

STA 83F7H

LED表示サブルーチンを呼ぶ。

CALL LEDSEGDISP

ループ。

jmp start

#バイナリーにしてみる。
コード表から拾います。
コードの番地を加算します。

```
8200  CD 16 02    ；キー入力サブルーチンは、0216番地から
8203  32 F7 83
8206  CD C0 01　　；LED表示サブルーチンは、01ｃ0番地から
8209  C3 00 82    ; startは、8200番地
```

#打ち込み
このページを開きます。
http://jsdo.it/ohisama1/0CJb

```
8 2 0 0 adrset 
C D writeinc 1 6 writeinc 0 2 writeinc 
3 2 writeinc F 7 writeinc 8 3 writeinc 
C D writeinc C 0 writeinc 0 1 writeinc 
C 3 writeinc 0 0 writeinc 8 2 writeinc 
```
#実行
8 2 0 0 adrset run
以上
Powershellで社外FTPサーバーからProxy経由でファイルダウンロード

社外FTPサーバーから社内のProxyを経由して、社外サーバーにある特定のフォルダ内のファイルの内、最新のファイルのみを社内PCに保存するバッチをPoweshellで作成しています。手始めに下記のように、まずftpサーバ内にあるtest.aaaをローカルに保存するps1ファイルを作成し、まわしてみましたが、（2個の引数を指定して”DownloadFile”を呼び出し中に例外が発生しました:”WebClient要求で例外が発生しました”）のエラーがでました。
 何が原因なのでしょうか？コメントいただけたら幸いです。
また、FTPサーバ内のフォルダ内のファイルの内、最新のファイルをDLする部分も書けていません。この部分もどのように書いたらいいか、お教えいただけたらと思います。

$ftpurl = "ftp://AAA.com"
$ftpuser = "BBB"

$ftppass = "CCC"

$proxyid = "DDD"

$proxypass = "EEE"


 #DL対象ファイルの場所
$target_url = "ftp://test/test.aaa"
 #ローカルでの保存先
$file_path = "C:\test"

 #WebClientとWebProxyのObject作成,Credential


$wc = New-Object System.Net.WebClient
$wc.Credentials = New-Object System.Net.NetworkCredential($ftpuser, $ftppass)
$wc.BaseAddress = $ftpurl

 $wp = New-Object System.Net.WebProxy("http://proxy.XXX.co.jp:21",$true)$wp.Credentials = New-Object System.Net.NetworkCredential($proxyid, $proxypass)


$wc.Proxy = $wp


 #ファイルのダウンロード
$wc.DownloadFile($target_url, $filepath)
FirebaseとReactjs - Hosting

#はじめに
最近FirebaseやReactの勉強をはじめたばかりで、自分なりに備忘録をつけていこうと思います。
ご指摘等ありましたら、ぜひお願いします。
今回は環境設定について書いていきます。

#React.jsの準備
Reactの導入には`create-react-app`コマンドを使います。
今回は **get-start-fr** という名前のプロジェクトを作成していきます。

```bash
$ create-react-app get-start-fr
```

#Firebaseの準備
[firebase](https://console.firebase.google.com/)のコンソールで新しいプロジェクトを作成します。


次にコマンドを叩いていきます。一行目でFirebase CLIをインストールしていますが、インストールするには[Node.js](https://nodejs.org/en/download/)をインストールする必要があります。

```bash
$ npm install -g firebase-tools
```
これでFirebaseコマンドが使えるようになりました。
次はログインです。

```bash
$ firebase login
```

すでにログインしているときは`Already logged in as <アカウント名>`と表示されます。アカウントを切り替えたいときは`$firebase logout`でログアウトできます。
ログインしたら、さっき作ったディレクトリに移動してFirebaseを初期化します。

```bash
$ cd get-start-fr
$ firebase init
```

`$ firebase init`を叩くと色々と質問が飛んできます。

```
? Which Firebase CLI features do you want to setup for this folder? Press Spa
ce to select features, then Enter to confirm your choices.
```
->`Hosting: Configure and deploy Firebase Hosting sites`

```
? Select a default Firebase project for this directory: 
```
->`get-start-fr (get-start-fr)`

```
? What do you want to use as your public directory? (public)
```
->`public`

```
? Configure as a single-page app (rewrite all urls to /index.html)?
```
->`No`

```
? File public/index.html already exists. Overwrite? (y/N)
```
->`No`

次に、`npm run build`でbuildファイルを生成します。
現在の状態のままでデプロイすると、`public`がデフォルトで読み込まれるので、buildファイルが読み込まれるように`firebase.json`を編集します。

```json
{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}
```
を次のように編集しました。

```json
{
  "hosting": {
    "public": "build",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}
```
これでFirebaseの準備ができました。

#Firebaseへデプロイする
ではビルドします。

```
npm run build
```
ビルドしたらデプロイします。

```bash
$ firebase deploy
```
すると、

```
Hosting URL: https://get-start-fr.firebaseapp.com
```
と出るのでurlを叩くと、デプロイできているか確認できます。

##所感
「とりあえず動く」くらいのハードルでやって見ました。これでうまくいくとはちょっと思えないので
macでphpbrewを使ってPHP入門

# 目的
- phpbrewを使ってPHPの動作環境の構築
- phpのコードを実際書いてみて、基礎を知る
- 導入までに利用するコマンドや周辺システムも理解しておく

# phpbrew
- phpのバージョン管理システム
- これを入れておけば、数コマンドでphpのバージョンを切り替え可能！

## 前準備
- `homebrew`で必要なライブラリを入れておきます。
- `homebrew`はMacOSXのパッケージ管理システム。
- ライブラリを手動で入れようとすると、それぞれ発行元から取得してきてそのライブラリをインストールするために別のライブラリをまた取得してきて・・・と、とても大変だが、そのへんの依存関係も全部やってくれる。現在インストール中のライブラリ一覧を管理できるので、追加削除も簡単。

```bash
brew install libmcrypt bzip2 readline zlib libxml2
brew link bzip2 --force
brew link zlib --force
```

## インストール
- `curl`：HTTPアクセスするコマンド。-Oで取得した情報をファイルに保存
- `chmod`：ファイルの権限を変更。今回はファイルに実行権限を与えます。実行権限を与えないとファイルを直接指定して起動できません。
- `/usr/local/bin/`：linuxの標準ルール。自分でアプリを入れた時に保存する場所。ここに格納するとパスなしでコマンドが実行できるようになる。

```bash
curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
chmod +x phpbrew
mv phpbrew /usr/local/bin/phpbrew
phpbrew init
```

- シェルの環境設定ファイルに記述、シェル実行時にphpbrewの設定を読み込まれるように。

```bash
vi ~/.bashrc
```

```~/.bashrc
source $HOME/.phpbrew/bashrc
```

- 記述した設定の読み込み。次回以降はシェル起動時に読み込まれるので不要。

```bash
source ~/.bashrc
```

## 利用
```bash
phpbrew install 7.0 +default
phpbrew list
phpbrew use {バージョン}
php -v
```

# PHPを動かしてみる
phpコマンドを使う、`-r`をつけると引数にPHPのコードを直接書ける。ファイルを指定する場合はオプションなしでファイルを指定する。

- 引数実行

```bash
$ php -r 'echo "hello world!!";'

hello world!!
```
- ファイル実行

```php:sample1.php
<?php
echo 'hello world!!';
```
```bash
$ php sample1.php

hello world!!
```

## var_dump
渡された引数の情報を出力する。Stringだけでなく、なんでも渡せる。

- String型

```php:sample2.php
<?php
var_dump('hello world!!');
```
```bash
$ php sample2.php

string(13) "hello world!!"
```

- 配列

```php:sample3.php
<?php
var_dump(['test1', 'test2']);
```
```bash
$ php sample3.php
```
```php
array(2) {
  [0]=>
  string(5) "test1"
  [1]=>
  string(5) "test2"
}
```

## 連想配列
格納する型に縛りがないMAP、PHPではとてもお世話になる。

- 配列と同じく`[]`で宣言。`game`には配列を格納している。

```php:sample4.php
<?php
$array = [
    'name' => 'Taro',
    'game' => ['ps4', 'switch']
];

var_dump($array);
```

- 実行。`name`にはStringが格納されているが、`game`には配列が格納されているのがわかる。

```bash
$ php sample4.php
```
```php
array(2) {
  ["name"]=>
  string(4) "Taro"
  ["game"]=>
  array(2) {
    [0]=>
    string(3) "ps4"
    [1]=>
    string(6) "switch"
  }
}
```

## foreach
いわゆる拡張for文。配列も連想配列もどちらでも利用可能。

- 配列、`\n`は改行。

```php:sample5.php
<?php
$array = ['ps4', 'switch'];

foreach($array as $value) {
    echo '持っているゲームは' . $value . "\n";
}
```
```php
持っているゲームはps4
持っているゲームはswitch
```

- 連想配列、`$key =>`でkeyを利用可能。

```php
<?php
$array = [
    'name' => 'Taro',
    'age' => 18
];

foreach($array as $key => $value) {

 # 実装

}
```
- `# 実装`部分を記入して、以下の出力結果を出してみましょう！

```bash
nameはTaroです。
ageは18です。
```

# おすすめエディター
## PhpStorm
有料だがPHP最強。フロント系も一通り網羅してる。
## Atom
無料。プラグインを入れればだいたいの機能は使えます！
## SublimeText3
無料。プラグインもいっぱいあるし、軽い！
It is not safe to rely on the system's timezone settings. と言われたらphp.iniの設定を確認する

brewでPHPを導入したが、Datetimeクラスのインスタンスを作ろうとした時にエラーが出た。

## 原因
php.iniの設定が初期設定のままだった。

## 対処
```php.ini
;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Tokyo
```

Asia/Tokyoを設定した。
エラーが消えた。
iOS関連証明書のmd5を返すシェルスクリプトを作成してみた

iOSアプリの開発時に散らばってしまった証明書関連ファイルを整理するために作成しました。
名前の違う同一鍵のチェックや鍵ペアの確認などで利用できます。

[check_md5.sh](https://gist.github.com/kyoda/9d93afdf33aae92bfe44d59a82273ca0)


## 環境

シェルスクリプト内で下記コマンドを使用しています。

+ openssl
+ sed(gsed)


## 実行方法

ファイル拡張子で判別を行いmd5のハッシュ値を返します。

```shell-session
$ ./check_md5.sh -h
usage: $0 [-e] [-h] [-p] [-t [key|csr|crt|cer|p12|mobileprovision]] FILE_NAME
```

```
$ ./check_md5.sh something.crt
1559b034b2f1a6271332715c259ea46e
```

tオプションをつけることでタイプを指定できます（拡張子を見ません）

```
$ ./check_md5.sh -t crt something.any
1559b034b2f1a6271332715c259ea46e
```

eオプションをつけると有効期限を取得できます。

```
$ ./check_md5.sh -e something.crt
Apr 18 08:45:26 2018 GMT
```

pオプションでp12ファイルのパスワードを入力できます。

```
$ ./check_md5.sh -p something.p12
password:
1559b034b2f1a6271332715c259ea46e
```

ハッシュ値から秘密鍵、証明書、プロビジョニングプロファイル、p12ファイルなどのペアを簡単に確認できます。

## その他

+ pオプションを指定しない場合、p12ファイルの初期パスワードは空文字になります
時系列データ分析(s)ARIMAモデル【Statsmodels】

# 概要
- 基本的には既存の(s)ARIMAモデルでデータを予測
- オプションとして30分に1度学習範囲をシフトさせてモデルを再構築し、再予測
- とある実績データを用いて予測精度を確認

# 条件
|項目| 内容 |
|:----------------:|:-------------------:|
|時系列データ|30分周期の計測データ|
|予測期間|2day(30min更新) / 2day|
|学習期間|3day / 1week / 1month / 1Q|
|モデル評価指標|aic|
|予測値評価指標|RMSE|


- データ
    - 平日では下記のような傾向が見られる。
        - 1日のデータ推移
        - 季節によって上下にシフト
        - 夜間少なく昼間に多いデータ
        - 6時に急激に増え、18時に急激に減る
        - 11時、14時頃に急激に少なくなる

![q.jpg](https://qiita-image-store.s3.amazonaws.com/0/148213/8a8cb706-6665-136b-6e46-cd880529a75d.jpeg)

# 検証
[このあたり](https://qiita.com/snuow/items/366107cf1d35d1db037e)で作成した、力業でp,d,qの準最適なパラメータを求める。
## 予測期間2day(1hour更新)の場合
- 特殊条件
    - 30分ごとに学習期間を30分シフトさせモデル構築
    - ハイパーパラメータの更新の有無で分岐

30分毎に学習時間をシフトさせて、モデルを更新する関数
下記の関数で、ぐるぐる回して最新の値だけDataframeにする。
本当に意味があるのだろうか？

```py:TrainSARIMA
def TrainSarima(df,Start,End,Order,SOrder,ShiftM = 0):
    TrainResultsSARIMA = sm.tsa.statespace.SARIMAX(df.loc[pd.to_datetime(Start) + ShiftM:pd.to_datetime(End) + ShiftM- pd.offsets.Hour(1)],
                                                   enforce_stationarity=False,
                                                   enforce_invertibility=False,
                                                   order=Order,
                                                   seasonal_order=SOrder
                                                  ).fit()
    TrainResultsSARIMA.aic
    return TrainResultsSARIMA

ForecastSARIMA=[]
PredictTerm = 48

#Fitting
for Minute in np.arange(0,PredictTerm * 2,30):
#for Minute in np.arange(0,PredictTerm * 30,30):
    FitSARIMA = TrainSarima(S_MinamiDF,TrainStartDate,TrainEndDate,SARIMAorder,SARIMAORDER,Shift_minute(Minute))
    ForecastSARIMA = ForecastSARIMA.append(pd.DataFrame(FitSARIMA.predict(SARIMAEndDate - pd.offsets.Minute(60),SARIMAEndDate + pd.offsets.Day(1) + Shift_minute(Minute)).iloc[-1:]))

```

以上のプログラムから算出される予測値と実績データを使用して精度の評価をした結果を下記に示す。
なお、今回は1日分のデータを使用する。

|項目| 内容 |
|:----------------:|:-------------------:|
|RMSE(学習:1month)|8.762%|

- 学習期間(1month)
![q2.jpg](https://qiita-image-store.s3.amazonaws.com/0/148213/36595358-c7fb-6ff8-5e7f-568208182fb2.jpeg)

- 夜間の乖離が大きい
- スパイク部分も乖離が大きい


## 予測期間2day先の場合（検証中）
- 特殊条件
    - なし

先程の```TrainSARIMA```のコードを改良して、ループさせずに1回で2day先までのデータを予測させる。
結果は下記のようになる。なお、この結果も1日分のデータを使用した。

|項目| 内容 |
|:----------------:|:-------------------:|
|RMSE||

# まとめ
- 30min毎に更新をかけて意味があるか検証要
- そもそも周期性が見られるデータを簡易に予測するのにSARIMAモデルが妥当かどうかの検証が必要
Dropbox PaperにMarkdownファイルをアップロードする

## 概要
Dropbox APIがV2になってAPIを使って[DropboxPaper](https://paper.dropbox.com)のドキュメントの作成ができるようになりました！
esaなどの別のサービスからエクスポートしたmdファイルを簡単に[DropboxPaper](https://paper.dropbox.com)にインポートできそうなので試してみました。

これはDropbox Paperへの移行が捗りそう＼(^o^)／

## 事前準備
https://www.dropbox.com/developers/apps
上のページからappを作成し、アクセス トークンを生成、取得します。

## スクリプト
特定のフォルダにアップロードするには、Dropbox-API-Argで `parent_folder_id` を指定します。
HTTPクライアントにFaradayを使ってrubyスクリプトを書いてみました。

```ruby
conn = Faraday.new(url: 'https://api.dropboxapi.com') do |faraday|
    faraday.authorization :Bearer, '**token**'
    faraday.response :logger
    faraday.adapter Faraday.default_adapter
end

conn.post do |req|
    req.url '/2/paper/docs/create'
    req.headers['Dropbox-API-Arg'] = { 'import_format': 'markdown', 'parent_folder_id': 'e.iXXXXXXXXXXXXXXXXX12345XXXXXXXXXXXXXXXX' }.to_json
    req.headers['Content-Type'] = 'application/octet-stream'
    req.body = File.binread('hoge.md')
end
```

### 注意点として
一度に大量にはアップロードできません。
100件ほど連続してアップロードするとAPI利用回数制限のエラーが返ってきます。(100回/日の利用制限)

アップロードしたmdファイルが数100件あったので、実際には以下のような感じの実装になりました。

```ruby
Dir.glob("/**/*.md").each do |file_name|
  begin
    response = conn.post do |req|
      req.url '/2/paper/docs/create'
      req.headers['Dropbox-API-Arg'] = { 'import_format': 'markdown', 'parent_folder_id': 'e.iXXXXXXXXXXXXXXXXX12345XXXXXXXXXXXXXXXX' }.to_json
      req.headers['Content-Type'] = 'application/octet-stream'
      req.body = File.binread(file_name)
    end

    if response.status == 429
      duration = response.headers['retry-after'].to_i
      puts "RateLimit!! sleep...#{duration}"
      sleep duration
      fail RateLimitError
    end
  rescue RateLimitError
    puts "Retry!!"
    retry
  end
end
```

## 参考
- https://www.dropbox.com/developers/documentation/http/documentation#paper-docs-create
Chromebookにvimprocインストール

# Chromebookにvimprocをインストール
- Developer Modeにしていることが前提です

## 以下をインストールするとvimprocがコンパイルできます。
```
# crew install vim
# crew install gcc make
# crew install linuxheaders
```

※とりあえずlinuxheadersが必要だって残しておきたかっただけのメモです
devenv.exeが原因でVisualStudioのソリューションが開かないときの対処法

## ■エラー内容  
VisualStudio2008のソリューションを開こうとしたところ、下記のダイアログが表示されました。  

![error.png](https://qiita-image-store.s3.amazonaws.com/0/201882/b6e8d2b6-99de-917f-2524-642ff879b926.png)  

```
Microsoft(R) Visual Basci Compiler は動作を停止しました
失われた情報はありません。エラーを回避する方法があるかどうかをコンパイラの出力で確認してください。
```

詳細を見ると、`devenv.exe`と`msvb7.dll`が問題を起こしているとのこと。
特に変な処理をした覚えは無いのですが、問題が起きてしまったのなら仕方ない。
とりあえず、それぞれのファイル名を検索して調べてみました。


## ■対処方法  
`devenv.exe　エラー`と検索したところ、下記のサイトがヒットしました。  

- [特定のソリューションをデバッグ実行すると、VS 2010 が異常終了する場合の対処方法](https://blogs.msdn.microsoft.com/jpvsblog/2012/07/24/vs-2010/)  

MSの公式サイトです。
自分の場合はデバッグ時にエラーが起きるのではなく、そもそもソリューションが開かないのですが、何か似たものを感じたので試してみました。
説明には`.suo`ファイルを再生成してくださいと書かれています。
言われたとおり`.suo`を一時避難させてソリューションを開いてみると......  

**―――開いた！！！**  

そのままビルドし直したら通常通り使えるようになりました。
詳しいやり方は以下の通りです。（サイトより抜粋）

> **- 手順**
> ※ .suo ファイルは Windows エクスプローラーの既定の設定では表示されない隠しファイルです。
> ※ このため、以下の手順はエクスプローラーで "隠しファイル" を表示する設定を行っていただいた上でご実施ください。
> ※ また、以下を実施する前に、Visual Studio 2010 を終了しておいてください。  

> 1. 問題のソリューション が存在するフォルダ (.sln ファイルが存在するフォルダ) を Windows エクスプローラーで開きます。

> 2. ファイルの退避用の一時フォルダを作成し、.sln ファイルと同じ場所に表示される、.suo ファイルを一時フォルダ内に移動します。

> 3. 移動した後に、再度 Visual Studio 2010 開発環境から .sln ファイルを開きます。
これで、.suo ファイルが再生成されます。

自分の環境は VisualStudio2010 ではなく 2008 でしたが、上記と同じやり方でできました。
`devenv.exe`に問題があると言われたときは、ぜひ一度この方法を試してみてください。  

## ■原因
上記サイトには

> 特定のソリューションのみで問題が発生する場合は、このような .suo ファイル内の情報の不整合が原因で問題が発生している可能性があります。

と書かれています。
開かないソリューションは1つだけでしたし、`.suo`ファイルの再作成で解決したので「.suo ファイル内の情報の不整合」があったのでしょう。
ただ、なぜ不整合が起きたのかは分かりませんでした。

## ■参考  
- [特定のソリューションをデバッグ実行すると、VS 2010 が異常終了する場合の対処方法](https://blogs.msdn.microsoft.com/jpvsblog/2012/07/24/vs-2010/)
androidスマホでパスワードがうまく入力できない問題でハマった

# 問題
 - android限定でパスワードが入力できないと報告があった
 - 開発端末では再現しない

# 問題のコード

```
<input type="password"
       ([value])="pass"
       (input)="pass = $event.target.value"
       placeholder="パスワードをご入力ください">
```

色々おかしいだろ的な指摘は置いておいて。。。。

# 調査
 - 日本語入力モードだと、変換候補が出る前に入力が確定されてマスク処理されていた
 - android6以降が多かったので仮想デバイスで動かしてみたら、ソフトウェアキーボードが表示されないIMEを発見

# 原因
 - 根本的な原因は不明だが、inputイベントが悪さをしていたようだった

# 対処
 - changeイベントに変更したところ、自動で入力が確定されることがなくなった

```
<input type="password"
       (change)="pass = $event.target.value"
       placeholder="パスワードをご入力ください">
```

# 感想
 - angular難しい。webviewアプリ辛い。
いまさらAndroid端末の物理キーボード対応を試みた備忘録

2017年にもなっていまさらAndroid端末の物理キーボード対応をしてみたので調査内容をメモしておく。

*全体的にめっちゃ書きかけ。あとでいろいろ追記するかも。*

# 経緯

拙作のついっとぺーん[^1]はそもそも物理キーボード対応をしていませんでした。
そんなアプリでガラホ(SHF31)での10キー操作が全然できないのを改善するのがそもそもの目的でしたが、ガラホはスクリーンのタップ操作ができない[^2] など開発対象として茨の道すぎるので、まずはNexus5XにBluetoothキーボードを接続し、物理キーボード対応から行うことにしました。

# 対応すべきこと

物理キーボード対応のためにやったことは概ね下記の通り。

- タッチモード・非タッチモードを理解する
    - 端末のホーム等で、物理キーボードのEnterからアプリを起動するとアプリ起動時点でタッチモード、アイコンタップで起動すると非タッチモード
- フォーカスの概念を知る
- フォーカスの設定方法を理解する
    - ```focusable``` とか ```clickable``` とか
    - ```requestFocus```とか```<requestFocus>```とか
    - ```android:nextFocusDown``` とか
- フォーカスとデザイン
    - ```<selector>``` で ```<item android:state_pressed="true">``` を設定する
- ```View``` に ```onClickListener``` などリスナーを付けるとフォーカスが自動設定されるのを注意する
- ```ListView``` でEnterキー押下イベントを取れないときは ```descendantFocusability``` が必要かも
- 初期フォーカスとタッチモード
    - ```<requestFocus>``` タグを付けたViewが初期フォーカスになるらしい
    - ```onGlobalFocusChanged``` でタッチモードになったタイミングを捕捉し、初期フォーカスを設定するという裏技もある。非タッチモードからタッチモードになったときにフォーカスがどっか行ってしまうのを抑制するという意味で。```ToolBar```が悪さしてるっぽいんだけど調査中。


# ```descendantFocusability``` について

```ListView```の項目のXMLにて```RootView```に対して ```android:descendantFocusability="blocksDescendants"```属性を付けるといい感じにイベントを取れるようになる的なやつ。



# リンク集

- [【ListView Tips Vo\.1】ListViewの子要素（アイテム）のClickがおかしくなる 〜主な原因と対処法〜 \- Qiita](https://qiita.com/taisho/items/44dfd83e19dc16b9a831)
- [Android Touch Mode and Focus](https://www.101apps.co.za/index.php/articles/what-you-should-know-about-android-touch-mode-and-focus.html)
    - タッチモードとフォーカスについてよくまとまってる良記事
- [AndroidのListViewの子要素（ListItem）にButtonを設置したとき、子要素（ListItem）のonClickListenerが呼ばれなくなってしまうのをどうするか。 \- ほねぶろぐ](http://aftercider.hatenablog.com/entry/2012/12/27/150116)
    - ```android:descendantFocusability="blocksDescendants"``` について




----
[^1]: [Twitterのついっとぺーん\(ツイッター\) \- Google Play の Android アプリ](https://play.google.com/store/apps/details?id=com.twitpane&hl=ja)
[^2]: タッチクルーザーEXという仮想カーソルはあるけど「クリック」ができないので実質使えない
PyCharmでよく使うファイルのテンプレート

> 17/10/6 書いた後に追記しました

PyCharmには一定の書式に従って記述すればファイル作成時に変数を展開して作成出来る**File and Code Template**という機能がある。

<img width="320" alt="スクリーンショット 2017-10-06 15.56.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/76058/54825837-1ba0-8246-552f-92b3b37198a3.png">

## オフィシャルサイトの説明

> https://www.jetbrains.com/help/pycharm/file-and-code-templates.html

## 設定場所

**File->Default Settings...->File and Code Template**
を選択して「+」ボタンで新しく登録が出来る。
![Untitled.jpg](https://qiita-image-store.s3.amazonaws.com/0/76058/5dcc7d39-19a6-0767-c4e4-a96eddf9d5c5.jpeg)

## 使用方法

- プロジェクト名を右クリックしてNewの項目内に作成した項目が選ぶことが出来る。
- もしくは、メニューのFile->New...を選択すると作成した項目が選ぶことが出来る。

## main.py

Pythonに実行指定させるファイル用のテンプレート。
例えば`main.py`としてファイルを作成して、コマンドプロンプト等を用いて作業ディレクトリ上で`python main.py`と実行させる。
18行目はPyInstaller用に作業ディレクトリを変更するスクリプト。

```python:main.py
#! env python
# -*- coding: utf-8 -*-

import os
import sys

# ${PROJECT_NAME}.${NAME}
# Date: ${YEAR}/${MONTH}/${DAY}
# Filename: ${NAME} 

__author__ = '$USER'
__date__ ="${YEAR}/${MONTH}/${DAY}"


def main():
    # 作業ディレクトリを自身のファイルのディレクトリに変更
    os.chdir(os.path.dirname(os.path.abspath(sys.argv[0])))
    return


if __name__ == '__main__':
    main()
    return
```

## PythonClass

クラス作成用テンプレート。
ファイルを作成すると、ファイル名がそのままクラス名になる。

```python:class.py
#! env python
# -*- coding: utf-8 -*-

import os
import sys

# ${PROJECT_NAME}.${NAME}
# Date: ${YEAR}/${MONTH}/${DAY}
# Filename: ${NAME} 

__author__ = '$USER'
__date__ ="${YEAR}/${MONTH}/${DAY}"


class ${NAME}(object):
    def __init__(self):
        self.__ROOT = os.path.dirname(os.path.abspath(sys.argv[0]))
        self.__EXE_PATH = sys.executable
        self.__ENV_PATH = os.path.dirname(self.__EXE_PATH)
        self.__LOG = os.path.join(self.__ENV_PATH, 'log')
        return
```

## readme.md

説明書用
Markdown形式の内容。プロジェクト内で「readme.md」ファイル作成してGitHubにアップロードしたら、このファイルがプロジェクトのトップに表示される。
エスケープ処理が出来なかったので\\&#96;&#96;&#96; を &#96;&#96;&#96;に変更して使用。

```markdown:readme.md
# Todo 修正したいところとか

- [ ] change in.
- [x] Success

# Overview 概要

${PROJECT_NAME}.${NAME}
Date: ${YEAR}/${MONTH}/${DAY}

# Description 詳細

Change me.

# create envs. 仮想環境の作り方

Assuming that conda is installed.
Condaがインストールされていることが前提。

### use 32bit. 64bit上で32bit環境を使う時用

```commandline
set CONDA_FORCE_32BIT=1
\```

```commandline
conda create -n ${PROJECT_NAME} python=3.5.3
\```

# Activation of Python environment. 仮想環境に入る

```commandline:for windows
activate ${PROJECT_NAME}
\```

```commandline:for mac
source activate ${PROJECT_NAME}
\```

# Requirement / install package. パッケージのインストール

```commandline
conda install numpy
\```

# Demo / Usage 使用例

```commandline
# Execution command.Be sure to activation.
python main.py
\```

# Licence ライセンス
[MIT](https://github.com/tcnksm/tool/blob/master/LICENCE)
</code>