OmniAICreator/Qiita-1.07M huggingface dataset:
GAE/Goのディレクトリ階層例（no vendoring）

### 今回前提とするディレクトリ階層
```
root
+ プロジェクトディレクトリ
  + src
    + somedirectory
    + app.yaml

+ 3rd party library go get用ディレクトリ
  + src
    + github.com
    + google.golang.org
    + ...
```
既存プロジェクトですのでvendorなどは考慮しておりません。

### ローカルサーバー、デプロイ
```
$ export GOPATH=/.../root/3rd party library go get用ディレクトリ
$ cd /.../root/プロジェクトディレクトリ/

$ goapp serve ./src
$ dev_appserver.py ./src --default_gcs_bucket_name [BUCKET_NAME]

$ appcfg.py update ./src -A [APP_ID] -V [VERSION]
```
デプロイできない場合は、 `~/.appcfg_oauth2_tokens` を削除してみる。

### テスト
```
$ export GOPATH=/.../root/3rd party library go get用ディレクトリ:/.../root/プロジェクトディレクトリ
$ cd /.../root/プロジェクトディレクトリ/src

$ goapp test ./...
```
Androd:「The Realm is already in a write transaction in」の対処方法


#はじめに
Android開発で遭遇した以下のエラー対応方法について備忘録を含め残したいと思います。

```Android:error
The Realm is already in a write transaction in
```

最初に今回参考にしたGitHubとなります。
より正確な情報の記載がありますから、よろしければご参照ください。
https://github.com/realm/realm-java/issues/3753

#①realmの処理がされているクロージャ内に`realm.cancelTransaction();`を記述することで解決。

```
realm.beginTransaction();
realm.cancelTransaction();
```
上記の対応で解決いたしました。

ご参考になれば幸いです。
letsencryptで証明書を取得するときにはまったこと

letsencryptの成長が目覚ましいですね。

そもそもLet's Encryptだったり、LetsEncryptだったり検索キーワードが複数あるため情報が散らばっているせいで、最新情報を追いにくくはありますが、そんな影響をものともしないくらいの成長具合が見られます。

かつては、letsencryptだった実行コマンドが、letsencrypt-autoになったり、certbotに変わったりして、現在は、certbot-autoで落ち着いたようです。

シェルに書いたり、Dockerで記述したりする記事を見かけますが、実行コマンドが変わっても修正箇所を最小限にしたりと、みんないろんな工夫をしているようです。

# 実際にはまったこと

以下のようなシェルスクリプトを用意して、その下の手順通り進めたところ、letencrypt側のエンドポイントにステージング環境が採用されて、ルート証明書が「Fake LE Intermediate X1」というフェイク証明書になってしまいました。

```bash:letsencrypt.sh
#!/bin/sh

#証明書のドメイン（,区切りで複数のドメインも指定可能）
DOMAIN=<YOUR DOMAIN>

#ドキュメントルート（上のドメインで接続可能である必要がある）
WEBROOT=<YOUR DOCUMENTROOT>

#メールアドレス（トラブル時にメールが届く）
EMAIL=<YOUR MAIL>

/usr/local/certbot/certbot-auto certonly -m $EMAIL /
--agree-tos --non-interactive $* /
--webroot -w $WEBROOT -d $DOMAIN

```

## 手順

※前提として、DNSの設定、Webサーバのセットアップ、certbotのインストールは完了していること。 

##### 1. 上記のletsencrypt.shを任意の場所に配置する。
##### 2. 下記コマンドでテストサーバに接続して証明書を取得する。（※これが誤り）

```
sudo ./letsencrypt.sh --test-cert
```

##### 3. 下記コマンドで、本番用の証明書を取得する。

```
sudo ./letsencrypt.sh --force-renewal
```

## --force-renewを実行しすぎて、証明書取得の利用制限の閾値を超える

1日で5回、1週間で20回のどちらかの制限にかかって、証明書取得ができなくなりました。（どちらにかかったのか確認するすべがない）

日本語公式ページにも以下のように書いてあり、無効な証明書を取得していました。

> --test-cert もしくは --staging
SSL/TLS サーバ証明書の取得時に、ステージングサーバを使用して、無効な証明書を取得します。
オプション --server https://acme-staging.api.letsencrypt.org/directory を指定するのと同じ動作です。
> (デフォルト: False)

## どうやって解決したか

メインのドメインはEV証明書も必要なため有償の証明書を割り当てていたため、letsencryptのドメインに含めることができず、泣く泣くサブドメインの変更を余儀なくされました。

ところが、変更後のサブドメインの証明書を取得する際には、2.の手順のところで、--dry-runを指定した後で、--force-renewalを指定して再度実行したところ正しいルート証明書を取得することができました。

<img width="490" alt="スクリーンショット 2018-08-07 15.35.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/2567/e9786d34-13d6-f3cd-354d-c92826b1d320.png">
DataBinderMapperImplのNoClassDefFoundError

Androidの実装でDetaBindingを導入しようとした際の試行錯誤の備忘録。
些細なミスでした。

## TL;DR
1. module側でDataBindingする時でも、module/build.gradleだけではなく、app/build.gradleにも`dataBinding.enabled=true`の記載は必要
2. [公式ドキュメント](https://developer.android.com/topic/libraries/data-binding/?hl=ja)をよく読もう

    >データ バインディングを使うライブラリに依存するアプリ モジュールがある場合は、そのアプリの build.gradle 内でもデータ バイディングの設定をする必要があります。

## 環境
* Android Studio 3.1.3

## 構成
* app（アプリモジュール）
* moduel（ライブラリモジュール）

## 事の成り行き
### 1. DataBindingを実装してみる
DataBindingが使って見たかったのでググると、`build.gradleにdataBinding.enabled=true`を追加すれば良いとある。
実装するのはmodule側なので、`module/build.gradle`にその通りに追加。

```java:module/build.gradle
android{
  ...
  dataBinding {
    enabled = true
  }
}
```

`Sync Gradle`も問題なく完了したので意気揚々とDataBindingを実装して、エミュレーター上で走らせてみる。

### 2. NoClassDefFoundErrorエラー
エミュレーター上で問題なくアプリが立ち上がったので「よっしゃ行けた！」とDataBindingを実装したページを開くとアプリが落ちた。
エラーログを確認すると

```java:Logcat
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/databinding/DataBinderMapper;
```
と出ている。なんでや。

### 3. ググって色々やってみる
同じ症状が出ている人の質問に対する回答に「`build.gradle`の依存関係に`com.android.databinding:compiler:3.0.1`突っ込めば行けたよ」ってあったので、下記のように突っ込んでみる。

``` java:module/build.gradle
dependencies {
    compileOnly 'com.android.databinding:compiler:3.1.3'
    annotationProcessor 'com.android.databinding:compiler:3.0.1'
}
```

駄目でした。
その後も調べては試しを繰り返して時間を浪費。

### 4. 公式ドキュメントを読む
この辺りでようやく「公式ではなんて書いてあるんだろう」と思い至り、読んでみる。

>データ バインディングを使うライブラリに依存するアプリ モジュールがある場合は、そのアプリの build.gradle 内でもデータ バイディングの設定をする必要があります。

はい。
素直に従って、`app/build.gradle`にも同様に`build.gradleにdataBinding.enabled=true`を記載。

```java:app/build.gradle
android{
  ...
  dataBinding {
    enabled = true
  }
}
```

```java:module/build.gradle
android{
  ...
  dataBinding {
    enabled = true
  }
}
```

アプリを走らせて該当ページを開く。行けた。


## まとめ
[公式ドキュメント](https://developer.android.com/topic/libraries/data-binding/?hl=ja)は偉大である。
RSpecでFeatureテストを書くときにOmniauthをモック化する方法

# TL;DR
1. `spec/support/omniauth.rb` でテスト用の設定とモックの生成をする
2. テスト前にモックを環境変数に設定する

## Omniauthのモック化
`spec/support/omniauth.rb` を作成する。内容は次の通り。

```ruby:spec/support/omniauth.rb
# テスト用にモックを使うための設定
# '/auth/provider'へのリクエストが、即座に'/auth/provider/callback'にリダイレクトされる
OmniAuth.config.test_mode = true

# Facebook用のモック
# '/auth/provider/callback'にリダイレクトされた時に渡されるデータを生成
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
  provider: 'facebook', 
  uid: '12345', 
  info: { email: 'test1@example.com' }, 
  credentials: { token: '1234qwer' }
)
```

次は`spec/rails_helper.rb` 内で`spec/support/`以下のファイルを読み込むように設定。

```ruby:spec/rails_helper.rb
# この一行を追加
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
```

## テスト前の設定
あとはテスト前に環境変数を設定してあげるだけ。

```ruby:spec/feature/sign_up.rb
before do
  Rails.application.env_config["devise.mapping"] = Devise.mappings[:user] # Deviseを使っている人はこれもやる
  # Facebookのモックをomniauth.authに設定
  Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook]
end
```

これだけ。

## 最後に

実はOmniauthの[公式wiki](https://github.com/omniauth/omniauth/wiki/Integration-Testing)に全部書いてある。
個人学習メモ#16 フォームに入力された数値や文字列を取得する方法と注意点

JoyPlot様からの引用です。
<a href="https://joyplot.com/documents/2017/07/26/javascript-%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0-%E6%95%B0%E5%80%A4-%E5%8F%96%E5%BE%97/">[JavaScript] フォームに入力された数値や文字列を取得する方法と注意点</a>

こちらのコードを使って、自分なりに少し変えてみた結果がこちらになります。
![スクリーンショット 2018-08-07 15.04.36.png](https://qiita-image-store.s3.amazonaws.com/0/263583/1200d621-a48e-d077-46f9-412de4bcafe3.png)

今回の内容は、色々なことに使えたりしそうですね。

自分の近況メモ（2018/08/07）
-
6月から本格的に学び始め、少しずつ成長してきてます。
たった2ヶ月ですが、挫折しかけたことが何度もあり、
しんどい時も多々ありました。

現状は、この先プログラマーとして、やっていけるのかと
不安が募る一方です。

ただ諦めずにやっていくことで、不意に分かるときが来ると
言葉を頂き、諦めずに学び続け、理想に近づけていけたらなと
思っております。

Qiitaの毎日投稿を目標に掲げ、現在学び続けております。
iTerm2 / zsh 環境でプロンプト上に謎の ^ @（NULL文字）が表示される問題を解決する

## TL;DR
~~パッチ済みの Powerline フォントをインストールすれば、謎の ^@（NULL文字）問題は解決する~~
~/.ssh/config に TCPKeepAlive を設定する




## 発生状況
iTerm 2 の zsh 環境で、Keep-Alive（Heart Beat）設定を ASCII code 0 (null) にすると、プロンプト上に謎の^@文字が表示される。

## パッチ済みの Powerline font のインストール
```shell:
# clone
git clone https://github.com/powerline/fonts.git --depth=1
# install
cd fonts
./install.sh
# clean-up a bit
cd ..
rm -rf fonts
```
## iTerm2 の設定
iTerm > Preferences > Profiles > Session を選択、
When idle, send ASCII code　`0` every `60` seconds　にして、
先頭のチェックボックスをオンにする


iTerm > Preferences > Profiles > Text を選択、
Font と Non-ASCII Font を同じパッチ済みフォントで設定する



## 追記

※画面がチラつく＆若干の表示乱れを許容するならパッチ済みフォントは不要かも……

ASCII code `20` (SP) に設定する

iTerm > Preferences > Profiles > Session を選択、
When idle, send ASCII code　`20` every `60` seconds　にして、
先頭のチェックボックスをオンにする

## 最終解
iTerm 2 の Keep-Alive 設定を disable にしてから下記の設定を行う
[MacのSSHクライアントで接続したサーバから切断されないようにする](https://qiita.com/yuji0602/items/7dd1a1d05dcafa165992)
BoostnoteをMacでいじってみた

## はじめに
普段からプログラミングにはPythonを使っており，プログラムを書くのは Jupyter notebook 上が主になっています．プログラムは新しくゼロから作るときもありますが，それよりは昔作ったものを改良したり組み合わせたりということも多いです．その場合，Qiitaに載せたコードをコピーしてきたり，Finder（Macbook proを使っている）から目当てのプログラムが保存されているディレクトリに行き Atom で開いてコピーするなどしており，何かもっと簡単に既存プログラムを利用する方法はないかと思っていたところ，Boostnote を見つけました．
まだ使い始めて間もないのですが，なかなか快適です．Dock に入れておいて必要なときに開けばすぐに前回終了したときの画面が立ち上がり，コードのコピーをするのにとても便利です．そんな Boostbote について書いてみようと思います．



## 参考サイト
+ [Boostnoteの使い方 まとめ](http://boostnote.hatenablog.com/entry/2017/12/22/184608)
+ [仕事効率、学習効率を加速させるMarkdown記法の紹介](http://boostnote.hatenablog.com/entry/2017/09/25/123956)
+ [Boostnoteでブロックコメントのシングルクォートが`&apos;`になって困った人向けの記事](https://qiita.com/naka_kyon/items/34a40b1b7129d87bd8d3)

## インストールして立ち上げてみる

[boostnote.io](https://boostnote.io/ja/) にアクセスし画面の下の方にいくとOS別にダウンロードできる箇所があるので，ここからダウンロードします．Macの場合は，MacのところからBoostnote-mac.dmgをダウンロードし，インストールします．
Boostnoteアプリを実行した時，デフォルトの保存先は，
\Users\xxx\Boostnote\notes\ となります．Windowsの場合は c:¥ユーザー¥xxxx¥Boostnotenotes¥ でした．私はこれをそのまま使っています．データはcson (jsonの一種？)形式で保存されており，テキストエディタで中身を確認できます．ただしファイル名は記号化されており，中を見ないと何が入っているかわかりません．

下の画像は，Boostnote の Web サイトの，ダウンロードする部分です（Macbookのスクリーンショット）

<img width="1280" alt="pic_boostnote1.png" src="https://qiita-image-store.s3.amazonaws.com/0/129300/14110c64-d73e-3dbb-687e-0c01cb0dadb6.png">

フォントなどの設定は，Preferences => Interface で行います．
私の設定は，以下のような感じ．

| Item  | Setting  |
|:------|:------|
|Interface Theme     | dark |
|Editor Theme        | abcdef |
|Editor Fint Size    | 18 |
|Editor Font Family  | Ricty Diminished |
|Editor Indent Style | 4 Spaces |

Preview についても同様な設定にしています．

下のスクリーンショットは，Markdown文書を表示したところです．もちろん，この文書は BoostnoteのMarkdown Noteで作成しています．

<img width="1280" alt="pic_boostnote2.png" src="https://qiita-image-store.s3.amazonaws.com/0/129300/9e35514d-1659-aee6-ac21-4a32174a2e86.png">

Make a noteボタンを押すと，下のスクリーンショットのように，Markdown Noteを作るか，Snippet Noteを作るか選択するようになっています．

<img width="1280" alt="pic_boostnote3.png" src="https://qiita-image-store.s3.amazonaws.com/0/129300/a13e3a58-325c-4bff-c97e-9df54433c0c2.png">

下のスクリーンショットは，Snippet Noteを表示した事例です．
Snippet Noteでは１つの件名の中にいくつものコード，例えばPythonなどプログラムコードの他，shell scriptやMarkdown文書も入れられます．もちろんMarkdown文書では，数式もいれられますし，画像挿入もokです．
なお，Snippet Note の Editor で Markdown 文書をスクロールするのが異常に遅いのですが，気のせい？

<img width="1280" alt="pic_boostnote4.png" src="https://qiita-image-store.s3.amazonaws.com/0/129300/df82999f-45c2-a4de-4c68-ee9dba6cbcf7.png">


## 数式表示
数式表示は，\$\$ を用いてTeX 記法で可能です．インラインでは \$\\sigma\$ で $\sigma$ と表示できます．

```
$$
\sigma_1=\frac{\sigma_x+\sigma_y}{2}+\sqrt{\frac{(\sigma_x-\sigma_y)^2}{4}+\tau_{xy}{}^2}
$$
```

$$
\sigma_1=\frac{\sigma_x+\sigma_y}{2}+\sqrt{\frac{(\sigma_x-\sigma_y)^2}{4}+\tau_{xy}{}^2}
$$

ただ単一式（TeXでいう equation） しか表現できないようです．\$\$ ではなく，\\begin{equation} や \\begin{align} が使えると便利なのですが．



## 画像挿入
画像挿入はフルパス指定でできます．

```
![fig_mohr.png](/Users/xxx/Boostnote/notes/fig_mohr.png)
```

以下のように，imgタグによりサイズ指定もできます．

```
<img src="/Users/xxx/Boostnote/notes/fig_mohr.png" width="400px">
```

## 元ネタ入力
このツールを効率的に使うためには元ネタの入力も重要です．使わないコードをたくさんストックしていても無意味．現在，使用頻度の高そうなコードをコピー＆ペーストして元ネタ帳として整備中です．
また，ググったものは入れていくなどの普段からの努力も重要な気がしています．

以　上
GASとVueでサーバレス社内チーム向け工数管理

##作った経緯

これまでスプレッドシートを使って社内チームの工数管理を行なっていたが、

**「もう少し細かい工数管理がしたい。」
「集計がしずらい」
「残業管理もできれば」**

みたいな話が上がってきたので、

元々スプレッドシートを使っていたので、
GASでフォームを使ってスプレッドーシートに情報が入っていくようなシステムをVueで作った。
技術的には GAS,Vue,スプレッドシート関数
と言ったところ。

##現時点で実装が出来たこと
* スプレッドシートでクライアント、プロジェクト、案件を管理
* ユーザーが投稿するフォームにはスプレッドシートのクライアント、プロジェクト、案件が選んだ内容でプルダウンが切り替わる。
* ユーザーは１日ごとに行なったクライアント_プロジェクト_案件_かかった時間をフォームから入力
* フォームがSUBMITされた内容を計算用シートにぶち込む。


##気をつけたところ
* 機密情報もあるので、基本クローズドなシステムであること

##実装方法
`GAS＋Vue.jsでサーバレスなWebアプリ①`
<https://qiita.com/kyhei_0727/items/f409ab53bac931d4eb77>
こちらを参考に進めさせてもらいました。

実装の流れは
1. スプレッドシートに必要なデータを入れる
2. Vueからユーザーの操作に合わせて.gsファイルに記述している関数を走らせる
3. .gsファイルに記述している関数からVueのDataをリアクティブに変更する

自分の頭の中にしか設計図はなかったので、上記の3工程を平行しながらテストアンドビルドを繰り返した。

以下に細かくシリーズ化して実装内容や詰まったところを掲載して行く予定。

##GASとVueでサーバレス社内チーム向け工数管理
1. [Google Apps Script でHTMLファイルを作って表示。](https://qiita.com/taromorimotohf/items/5e52cb9062600e8ccac3)
2. [VueのイベントハンドラとGAS関数のスプレッドシートデータ連携方法（その１）](https://qiita.com/taromorimotohf/items/82a02bdeb21b1d74c5e8)
3. [VueのイベントハンドラとGAS関数のスプレッドシートデータ連携方法（その2）](https://qiita.com/taromorimotohf/items/febfcb7a338078d9561d)
4. [VueからGAS関数でスプレッドシートにデータを入力](https://qiita.com/taromorimotohf/items/24971cab9ca62a02a890)
Python2 で get-pip.py で SyntaxError

pipのインストールに際して、Python2系だとSyntaxエラーが出るようです。
Pythonの新しいバージョンが入れられない場合は、以下のように対応できます。

### 環境
```
# cat /etc/redhat-release
CentOS release 6.9 (Final)
# python -V
Python 2.6.6
```

### やりたかったこと
[Linux に AWS Command Line Interface をインストールします](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/awscli-install-linux.html)
ここの
`pip のインストール`

### 現象
```
# python get-pip.py
Traceback (most recent call last):
  File "get-pip.py", line 20651, in <module>
    main()
  File "get-pip.py", line 197, in main
    bootstrap(tmpdir=tmpdir)
  File "get-pip.py", line 82, in bootstrap
    import pip._internal
  File "/tmp/tmp8OYExX/pip.zip/pip/_internal/__init__.py", line 42, in <module>
  File "/tmp/tmp8OYExX/pip.zip/pip/_internal/cmdoptions.py", line 16, in <module>
  File "/tmp/tmp8OYExX/pip.zip/pip/_internal/index.py", line 536
    {str(c.version) for c in all_candidates},
                      ^
SyntaxError: invalid syntax
```

### 解決策
```
$ curl -O https://bootstrap.pypa.io/get-pip.py
↓
$ curl -O https://bootstrap.pypa.io/2.6/get-pip.py
```
速度を担保したい時のDBの設計

# 概要

実装する前の設計の段階で速度を制限してしまう要素を入れると、どんなに頑張ってもそれ以上いけないぜということがあると知ったので、まとめる。


# 実行速度を担保するために設計で考えておくべきこと

1. インデックス
2. 一つのテーブルのカラム数
3. テーブルのエンティティの関係
4. NULLが入っているかどうか
5. スロークエリになりやすいSQLを書かない


大体この辺り。


# 1. インデックス

これはよく知られている方法。UXを追っていけば、ユーザがどのテーブル、カラムをよく使うのかが大体わかる(サービスの種類によってもそうかも)はずなので、まずは仮定を元に実装しておき、問題が出そうな段階でデータ分析を元に変えるのが良い。ただし、サービスが大きくなりすぎると、インデックスを貼りなおずのも一苦労なので、その辺りはしっかりと見極めが必要。

# 2. １つのテーブルのカラム数

これはSELECTで必要な情報を引き出す時にメモリをどれくらい必要とするかということがキモになる。実装の際に、必要なカラムのみをSELECTするなどの対応でどうにでもなる部分もある。しかし、引き出す行数によっては問題になるので、こちらも意識しておく。


# 3. テーブルのエンティティの関係

サービスによってはJOINしない方が良い(例えば、ソーシャルゲームとかは速さ重視なので)ので、カラム数が多くなるけど、一つのテーブルとするという方法もあるが、基本的にはわかりやすい構成にすることも多い。自分が作るサービスがどんな特性を持つかを考えて構成を選択する。


# 4. NULLが入っているかどうか

1. と関連した内容となる。インデックスは基本的にNULL以外のものの検索に関して大いなる力を発揮する。NULLはその対象外となるため、何か意図がない限りはインデックスが聞く状態にするためにNULL許可にしない方が当たり障りがないはず。

# 5. スロークエリになりやすいSQLを書かない


この辺りを見てもらいつつ。実行計画でALLが出ないように気をつけていれば、最初のうちは大丈夫。また、fetchAllを使用する箇所には特に注意が必要。fetchする箇所がデータ量が多くなりやすいようであれば、そこは最悪LIMITで制限するなどの対策をしても良いかもしれない。

[MySQL スロークエリ改善 初心者向け](https://qiita.com/SuguruOoki/items/5c4c04a120d9fa5b4267)
PowerShell：ActiveDirectory ユーザー関連コマンド

#ActiveDirectoryのユーザー一覧

```
PS C:\> Get-ADUser -Filter *
```

#ActiveDirectoryのOUに所属するユーザー一覧

```
PS C:\> Get-ADUser -Filter * -SearchBase "OU=OUName,DC=DCName,DC=DCName"
```

#ActiveDirectoryのグループに所属するユーザー一覧

```
PS C:\> Get-ADGroupMember -Identity <ADGroup>
```

#既存アカウントにメールアドレスを追加する
要：監理者として実行
```
Set-ADUser -Identity ADAcount -EmailAddress "mail@domain.com"
```
#パスワードの変更

```
Set-ADAccountPassword -Identity <UserName> -Reset
```
注：New Passwordを求められる
dsmodだとNew Paswordは不要
AWSの暗号化キーの利用ポリシー変更しようとしたが、"Policy contains a statement with one or more invalid principals.と表示された

## 解決方法
ポリシードキュメントを直接編集して、principalにARNでない何かが混じっていたら削除する :fire: 
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements_principal.html

## 状況
* 暗号化キーの利用ポリシーに数名のIAMアカウントを指定していた
* チーム編成に伴い、上記ポリシーから一部IAMアカウントを削除した
* チーム編成に伴い、上記ポリシーに新規IAMアカウントを追加しようとした

調べてわかったことですが、IAMアカウントを削除した場合、
ポリシーに指定されていたIAMアカウントARNは別の文字列に置き換えられるようです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/36709/b1ca9d9d-7462-af67-708d-d4d4d4f2b985.png)


今回は削除したIAMアカウントの定義が残ったまま、
新規IAMアカウントを追加して利用ポリシーを更新しようとしたので

`Policy contains a statement with one or more invalid principals.`
というエラーになったと思われます。

上記削除ずみのアカウントのprincipalを削除することで、追加のpolicy変更ができるようになりました :relaxed:
AES EC2上でsshを使ってgit clone を成功させるまでの手順

# AES EC2上でsshを使ってgit clone を成功させるまでの手順
- ec2側で鍵生成
- githubに鍵を登録
- ec2側でも鍵を登録（今回はここでハマった）

この記事では、ローカルからec2にssh接続ができる環境を前提に上記の順に説明する。

## ec2側で鍵生成
↓ec2環境に接続後

```
[ec2環境]$ cd ~/.ssh
[ec2環境]$ ssh-keygen -t rsa
```

鍵の名前はとりあえず、`ec2_github_key`とする

```
Enter file in which to save the key (): ec2_github_key
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
```

以上で`~/.ssh`直下に鍵が生成される。
EC2上で`~/.ssh/config`に明記。

```
Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/ec2_github_key
```

## githubに鍵を登録
以下のURLでsshの鍵を登録する。（URLが飛べるか不安。githubのsettingsのSSH and GPC keys）
`https://github.com/settings/keys`

以下のコマンドで出力されたものをコピー

```
[ec2環境]$ cat ~/.ssh/ec2_github_key
```

github側の右上にある緑の New SSH key のボタンを押し、
名前とコピーしたものを登録。

以下のコマンドで正しく登録できているか確認。

```
[ec2環境]$ ssh -T github
Hi ユーザー名! You've successfully authenticated, but GitHub does not provide shell access.
```



## ec2側でも鍵を登録（今回はここでハマった）

以下のコマンドでec2側に鍵を登録。
これをやってなかった。。。。。

```
[ec2環境]$ ssh-add ~/.ssh/ec2_github_key 
```



以上で、`git clone`を実行できるはずです。
Railsでハマった所メモ（逐次更新）

# form_tag で送った input の値が params として受け取れない(2018/8/7)

## 状況
- フォームとボタンを用いてデータベースに新規登録したいが、何も登録されずにプロセスが完了してしまう

## 考え方
- `<%= form_tag %>` で指定した先のアクションで問題が起こっている
- 条件分岐させると `@user.save` が false となっている
- `@user = User.new(hoge: params[:fuga])` のうちどこかがおかしい
- しかしエラーは起こっていないので `params[:fuga]` が正しく受け取られていなさそう
- ビューにおける `<input>` タグの記述を再確認

## 原因
- `<input>` タグにおいて `name="fuga"` とすべきところを `content="fuga"`としていた
    - CSSの記法と混同していた

## 参考
- Rails5以降は `form_tag` ではなく `form_with` を使うことが推奨されているみたい。こちらを使いましょう。
UnicodeEncodeError@python3解決のためのlocale設定法

# 問題
python3のコードを実行したときにエラーが発生した。
エラーメッセージは下記の通り。

> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-12: ordinal not in rage(128)

>![image.png](https://qiita-image-store.s3.amazonaws.com/0/88641/455065e0-fda0-e0a6-c8ab-5a494eda42fb.png)

# 環境
下記の通り

OS: Windows 10 Pro
バージョン: 10.0.17134 ビルド 17134

Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
("$lsb_release -a"で確認）

# 解決策
localeを変更した

1) localeの確認
```$locale
```
2) localeの変更
```$export LC_ALL=en_US.UTF-8
```

# 参考サイト
以下の記事から情報を得ました。
[東京エンジニア：python3 ‘ascii’ codec can’t encode character ‘\u3042’ in position 0: ordinal not in range(128)解決方法](https://tokyo-engineer.com/python3_ascii_codec_cant_encode_character/)
git grep で前後/上下の行を表示するオプション ( -A はAfter / -B はBefore / -C はCenter )

Linux / Unix の `grep` コマンドと同じで、 `git grep` でも同じオプションで前後の行 (上下の行) が表示出来る。

## 後5行の例

```
$ git grep -A 5 [some_keyword]
```

**After の A** と覚えると良い

## 前5行の例

```
$ git grep -B 5 [some_keyword]
```

**Before の B** と覚えると良い

## 前後5行の例

```
$ git grep -C 5 [some_keyword]
```

**Center の C** と覚えると良い
(helpには出てこない表現だが語呂合わせで)



数字だけを渡しても良い

```
$ git grep -5 [some_keyword]
```


## git --help

```
...
-<num>, -C <num>, --context <num>
   Show <num> leading and trailing lines, and place a line containing
   -- between contiguous groups of matches.

-A <num>, --after-context <num>
   Show <num> trailing lines, and place a line containing -- between
   contiguous groups of matches.

-B <num>, --before-context <num>
   Show <num> leading lines, and place a line containing -- between
   contiguous groups of matches.
...
```

## 環境

- git version 2.17.1

## リンク

- [Gist](https://gist.github.com/YumaInaura/139dc0d1b8a1fcded5636673b011829d)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
amazon-linux-extrasでAmazon Linux2にdockerをインストールする

Vagrantでローカル環境のMacにamazon linux2をインストールしたのですが、dockerがインストールできなくなっていました。

```
$ sudo yum install -y docker
読み込んだプラグイン:langpacks, priorities, update-motd
amzn2-core                                                                                                                                                               | 2.4 kB  00:00:00
パッケージ docker は利用できません。
エラー: 何もしません
```

yum searchしても見つからない、、、

```
$ sudo yum search docker
読み込んだプラグイン:langpacks, priorities, update-motd
===================================================================================== N/S matched: docker ======================================================================================
pcp-pmda-docker.x86_64 : Performance Co-Pilot (PCP) metrics from the Docker daemon

  Name and summary matches only, use "search all" for everything.
```

※「pcp-pmda-docker.x86_64」はパフォーマンスモニタリングツール。

代わりの方法として、amazon-linux-extrasでインストールできました。

```
$ sudo amazon-linux-extras install docker -y
```


インストールされました！

```
$ docker -v
Docker version 18.03.1-ce, build 3dfb8343b139d6342acfd9975d7f1068b5b1c3d3
```




# 参考
[Amazon Linux2にdockerをインストールする](https://www.soudegesu.com/aws/amazonlinux2-docker/)
[Amazon Linux 2のExtras Library(amazon-linux-extras)を使ってみた](https://dev.classmethod.jp/cloud/aws/how-to-work-with-amazon-linux2-amazon-linux-extras/)
さいきょうのオレオレ開発環境

最近Macの開発環境を一新したのでメモ程度に

||旧環境|新環境|
|-----|-----|-----|
|ターミナル|[iTerm2](https://www.iterm2.com/)|[Alacritty](https://github.com/jwilm/alacritty)|
|シェル|Zsh + [Oh My Zsh](https://github.com/robbyrussell/oh-my-zsh)|Zsh + [Prezto](https://github.com/sorin-ionescu/prezto) + [Pure](https://github.com/sindresorhus/pure)|
|エディタ・IDE|[JetBrains IDE](https://www.jetbrains.com/)|[Spacemacs](https://github.com/syl20bnr/spacemacs)|

# ターミナル
## [Alacritty](https://github.com/jwilm/alacritty)
<img width="950" alt="2ebd0288-d06c-11e6-95d3-4a2889dbbd6f.png" src="https://qiita-image-store.s3.amazonaws.com/0/211748/9e77b46b-bc55-3ee8-fff1-7071b860ffe0.png">

>Alacritty is the fastest terminal emulator in existence. Using the GPU for rendering enables optimizations that simply aren't possible in other emulators. Alacritty currently supports FreeBSD, Linux, macOS, and OpenBSD. Windows support is planned before the 1.0 release.

AlacrittyはGPUを使用したRust製のターミナルエミュレータ。GPUのおかげでヌルヌルとコンソールが動く。
また、AlacrittyはiTerm2のようにデフォルトで画面分割もタブも開けないので[tmux](https://github.com/tmux/tmux)を導入してAlacrittyの設定ファイルである`alacritty.yml`にキーバインドを登録することでiTerm2と変わらない操作性にすることができた。

## 乗り換えた理由

1. iTerm2みんな使ってる（一緒は嫌だ）
2. 新型Macbook Pro 15inchを購入したのでGPUを使ってみたかった　　

# シェル
## [Prezto](https://github.com/sorin-ionescu/prezto)
Zshのフレームワークでテーマの切り替えとか色々簡単にできる。

## [Pure](https://github.com/sindresorhus/pure)
Zshのシンプルなプロンプト。なんかオシャレ。


## 乗り換えた理由
`pure prompt`を導入する際に`prezto`だとなんか楽そうだった。それだけ。


# エディタ・IDE
## [Spacemacs](https://github.com/syl20bnr/spacemacs)
<div align="center">
<img src="https://qiita-image-store.s3.amazonaws.com/0/211748/25ea618c-681e-437e-90a4-9f1b56133efe.png" "title2.png">
</div>

>A community-driven Emacs distribution - The best editor is neither Emacs nor Vim, it's Emacs *and* Vim!

これは自分の中で一番の収穫だった。EmacsとVimのいいとこ取りのエディタで、今までCUIエディタはスクリプトを一部書き換えたりするくらいにしか使ってなかったが、Spacemacsに出会ってからGUIのIDEを捨てた。
## 乗り換えた理由
1. スペースキーを起点としたコマンドの快適さ
2. EmacsベースのエディタだがVimのキーバインドが使える
3. Emacsのプラグインの導入の容易さ
4. [robe(Ruby用のプラグイン)](https://github.com/dgutov/robe)がすごい

# 設定ファイル
参考程度に私のtmux、alacritty、spacemacsの設定ファイルです。
https://github.com/KeisukeToyota/public_dotfile
install  windows BuildTools & TALib for node.js on windows10

# 概要
- 目的：windows10, node.jsでTALibを使いたい
- 環境
    - windows10
    - Node.js v8.11.3
    - VSCode

# 参考、外部サイト
 - npm node-talib
    - https://www.npmjs.com/package/talib
    - https://github.com/oransel/node-talib
- windows build tools
    - https://www.npmjs.com/package/windows-build-tools

# インストール手順
### Install  windows BuildTools 
```
// powerShell on Admin user
> npm install --global --production windows-build-tools
```

### install .NET Framework 4.6 Targeting Pack

- https://www.microsoft.com/ja-jp/download/confirmation.aspx?id=48136
- https://github.com/oransel/node-talib/issues/63

### install talib 

> npm  install talib --save


# サンプルプログラム実行
```js:test.js

var talib = require('talib');
console.log("TALib Version: " + talib.version);
 
// Display all available indicator function names
var functions = talib.functions;
for (i in functions) {
    console.log(functions[i].name);
}

```
実行

```
> node test.js
TALib Version: 1.0.3
ADD
DIV
MAX
MAXINDEX
MIN
・・略・・
```
Slack— New Threads / All Threads を読むにはマウス操作しなくても、チャンネルスイッチャー ( Ctrl + k / Cmd + k  ) で移動できる

表題の通り。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/bc2f194c-0193-8878-9f7a-8244b4d47226.png)

ちなみに All Unreads で可。

## 問題

これに気づくまでは

- キーボードショートカットキーで移動できなくて不便
- New Threads を読む時だけマウス操作しなければいけない

と思っていた。

## 環境

- Mac Slack App 3.2.0








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
【超簡単】Amazon Connectを使って無料で電話する方法

**2018/12/11追記**
**東京リージョンが開設され、フリーダイヤル0120が使えるようになりました。**

# はじめに
まず**「無料」**といってもAmazon Connectの利用料はかかります。
あくまで**電話を発信する人（利用者）が無料で利用できる方法**になります。
会社でAWSアカウントを運用しているような場合は有用かもしれません。


# どういうときに使う？
- 会社携帯を持っておらず、私用携帯で業務をしている場合
- 通話録音などAmazon Connectの付加機能を使いたい場合
- ~~恋人との長電話を会社に負担させたい場合~~　**←ダメです**


# フローの作成

![connect1.JPG](https://qiita-image-store.s3.amazonaws.com/0/272753/4b660d6e-3381-16f5-9c67-311b07fdf7c8.jpeg)


こんな感じにします。
ちなみにAmazon Connectは日本の電話番号が取れる**シドニーリージョン**を使ってください。

# 顧客の入力を保存する

![connect2.JPG](https://qiita-image-store.s3.amazonaws.com/0/272753/4f5646fc-19b1-a0b8-9aa9-040e63a024ff.jpeg)

電話番号の最初のゼロは除いて入力するようアナウンスで流します。
携帯電話番号は11桁なので、最初のゼロを除いた「10」を最大桁数としています。
この場合、10桁入力するとすぐに次のブロックに遷移します。
「03」や「06」から始まる番号は10桁なので、入力は9桁になりますが、この場合は9桁入力後に5秒待てば次のブロックに遷移します。

# 問い合わせ属性の設定

![connect3.JPG](https://qiita-image-store.s3.amazonaws.com/0/272753/858ecaff-f452-1aba-2443-6cc7606fe643.jpeg)

宛先キーは任意の名前でよいです。
タイプは**「システム」**、属性は**「保存済みの顧客の入力」**とします。これで先ほど入力した番号がキーにセットされます。

# プロンプトの再生

![connect4.JPG](https://qiita-image-store.s3.amazonaws.com/0/272753/60755a6c-f698-0cb2-785d-c832ae024217.jpeg)


```xml:SSML
<speak>
    <prosody rate="x-slow">
        0
        <say-as interpret-as="digits">$.Attributes.outboundno</say-as>
    </prosody> 
    ですね。電話をかけます
</speak>
```

テキスト入力でもある程度はできるのですが、**[SSML](https://developer.amazon.com/ja/docs/custom-skills/speech-synthesis-markup-language-ssml-reference.html)（音声合成マークアップ言語）**を使いました。
最初の「0」は補完です。
**「$.Attributes.宛先キー」**でさきほどの入力を取ってくることができますが、そのままだと「◯億◯万◯千」みたいに1つの数字として解釈してしまうので、**「say-as interpret-as="digits"」**によって桁区切りでの読み上げを行ってます。
**「prosody rate="x-slow"」**で読み上げ速度を遅くしています。これはそのまま数字を読み上げると結構スピードが早く聞き取りが難しかったためです。
また、[Polly](https://aws.amazon.com/jp/polly/)は「0」を「れい」と読んでしまいます。できれば「ゼロ」と読ませたかったのですが、**[レキシコン](https://docs.aws.amazon.com/ja_jp/polly/latest/dg/managing-lexicons.html)（発音のカスタマイズ機能）が現時点では日本語対応してない**ようだったので諦めました。

# 電話番号への転送

![connect5.JPG](https://qiita-image-store.s3.amazonaws.com/0/272753/eb55e7f9-26be-a264-af2a-9d7fe2b7c6da.jpeg)


こんな形でセットするだけです。ここでも**「$.Attributes.宛先キー」**を使います。

# フリーダイヤルと問い合わせフローの紐付け

![connect6.JPG](https://qiita-image-store.s3.amazonaws.com/0/272753/4de1968a-b7ba-45e4-a1a7-8fd8fb00efa6.jpeg)


「0800」から始まるフリーダイヤルを取得し、作成・公開したフローと紐付けます。

# 電話してみる

フリーダイヤルにかけてテストしてみてください。
ちなみに相手先には**「通知不可能」「非通知」**といった形で表示されますので、これを**拒否しているような番号にはかけられない**です。

# 料金はどうなってるの？

冒頭に書いたように、**AWSオーナー側には当然料金が発生**します。

- AWSオーナーの料金負担
    - フリーダイヤル確保料（0.48 USD/日）
    - インバウンド通話料（0.2114 USD/分）
    - アウトバウンド通話料（0.1203 USD/分）
- ユーザーの料金負担
    - なし

AmazonConnectに電話が入ってきた時点でインバウンドの料金が発生します。また、最後に外線転送をしているのでその後は**インバウンド・アウトバウンドの両方の料金がかかります。**

月に1時間ほどこの仕組みを利用して通話した場合、AWSオーナーは約34ドル（1ドル112円換算で約3,800円）支払う計算になります。
月に10時間だとすると約213ドル（約23,900円）です。

プランにもよりますが携帯電話の通話料は30秒あたり20円が目安です。
1時間だと2,400円ですが、10時間だと24,000円なので、長時間使う場合や円高の場合はAmazonConnectに分がある場合もありますね。


# 最後に

ラムダなしで実装できました。
このままだとフリーダイヤル番号を知っていると誰でも使えてしまうので、必要であればフローの最初に発信者番号チェックして利用者を制限したりするのもよいと思います。
かける番号がある程度決まっているなら、あらかじめ転送さきに登録しておいてIVRで選択させるのもありですね。
Ogre2.1のbuild(windows)

備忘録です


基本的に公式の以下に沿ってやっていく
https://ogrecave.github.io/ogre/api/2.1/_setting_up_ogre_windows.html


#環境
・windows10
・visual studio community 2017 (15.7.5)
・CMake 3.12.0
・TortoiseHg　4.6.1

#ダウンロード
1.C直下にOgreSDKディレクトリを作成
2.OgreSDK内で以下をCMDで打って本体をDL
`hg clone https://bitbucket.org/sinbad/ogre -r v2-1`
3.OgreSDK内にDependenciesディレクトリを作りその中で以下をCMDで打って依存ライブラリをDL
`hg clone https://bitbucket.org/cabalistic/ogredeps Dependencies`
（こんなものまで用意してくれているなんてありがたいかぎりですね）

#依存ライブラリのビルド
1.CMakeで
"Where is the source code"をC:\OgreSDK\Dependencies
"Where to build the binaries" をC:\OgreSDK\Dependencies\build
に設定してConfigure→Generate→Open ProjectでVSを開く
2.VSでDebug,Releaseなど使用するものを選択し、Installプロジェクトをビルド
3.C:\OgreSDK\Dependencies\build\ogredepsにいろいろ出来ているのを確認する

＃本体のビルド
1.CMakeで
"Where is the source code"をC:\OgreSDK
"Where to build the binaries" をC:\OgreSDK\build
に設定してConfigureをおす
2．依存ライブラリが見つからない旨のエラーが出ると思うので
OGRE_DEPENDENCIES_DIR をC:\OgreSDK\Dependencies\build\ogredepsをセットする
3.再度Configureを押し、その後Generate→Open ProjectでVSを開く
4.VSでDebug,Releaseなど使用するものを選択し、ソリューションをビルド
5.適当なサンプルを実行し動くことを確認する
　（Sample_AnimationTagPointだと猿？がぶらぶら動く）

#自分のアプリを作るための空のプロジェクトの作成
OgreのincludeやLibの設定を簡単にするためのもの
ここからは以下に沿ってやっていく
https://ogrecave.github.io/ogre/api/2.1/_using_ogre_in_your_app.html

1.好きな場所に以下をコピーする
C:\OgreSDK\Samples\2.0\Tutorials\EmptyProject
2.コピーしたEmptyProjectを好きな名前に変え、その中にDependenciesディレクトリを作る
  （ここではC:/OgreTest2としています）
3.DependenciesにOgreSDKのシンボリックリンクを作る
具体的にはCMDで以下を打ち込む
`mklink /D C:\OgreTest2\Dependencies\Ogre C:\OgreSDK`
4.CMakeで
"Where is the source code"をC:/OgreTest2
"Where to build the binaries" をC:/OgreTest2\build
に設定してConfigureをおす
5．SDL2ライブラリ関連が見つからない旨のエラーが出ると思うので以下を設定
SDL2_LIBRARY:C:/OgreSDK/Dependencies/build/ogredeps/lib/SDL2.lib
SDL2MAIN_LIBRARY:C:/OgreSDK/Dependencies/build/ogredeps/lib/SDL2.lib
SDL2_INCLUDE_DIR:C:/OgreSDK/Dependencies/build/ogredeps/include/SDL2
6.再度Configureを押し、その後Generate→Open ProjectでVSを開く
7.debug実行時の作業ディレクトリを出力ディレクトリになっていないので修正する
8.ビルドして実行できればたぶんOK

#以上
お疲れさまでした
UI > 誤ったエラーメッセージ > ファイルが見つからないか、読み取りのアクセス許可がありません。 | 圧縮(zip形式)フォルダーは無効であるか、または壊れています > MAX_PATH260問題?

```txt:動作環境
Windows 8.1 Pro (64bit)
```

### 状況

Linux上のシミュレーション計算結果のファイルを、シミュレーションパラメータが分かる比較的長い名前のフォルダ以下に配置した。そのフォルダ自体、プロジェクトなどを示す、さらに長い名前の多階層フォルダ以下に配置されている。
そのフォルダをzip圧縮しようとした時、下記のエラーが出た。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/1a3c8a5d-3e58-248a-120b-edf0e14989d8.png)

さらに、下層のフォルダでzip圧縮しようとしたら、以下のメッセージが出た。

![qiita2.png](https://qiita-image-store.s3.amazonaws.com/0/32870/0b380243-f036-296a-dbc4-c15dead26ce0.png)

### 対処

1. デスクトップに問題のフォルダをコピー
2. zip圧縮

ファイルパスの文字列長さを減らすことで対処。

参考: [zip圧縮でファイルが見つからないか、読み取りのアクセス許可がありません](http://ebookbrain.net/cannot-compress-folder-caused-by-maximum-path-length-limitation-in-the-windows/) @ eBook Brain by neru様

情報感謝です。

### 誤ったエラーメッセージ

「フォルダパス名が制限(260)を超えているため処理できません」などのエラーメッセージであれば、エラーメッセージを見た人は対処をしやすい。


### 関連

MAX_PATH 260制限にひっかかっているのかもしれない。

- [Link > Windows > MAX_PATHはこういう理由で260](https://qiita.com/7of9/items/4d42deb1a762d5a7cf29)
Cloudfront+S3で静的ホスティング(SSL)

## 最初に
これまで個人用テストサーバーを海外VPSの[VULTR](https://www.vultr.com/)にLAMP環境を立てて、Let's Encryptで証明書を入れていたけれど、Vue.jsやFirebaseとかPWAなどを試す機会がほとんどで、よくよく考えてみたらMySQLもPHPもまったく使ってなかった＼(^o^)／。なのでAWSを使ってサーバレスに移行してみることにした。

## 構成
ムームードメインで取得したドメインを[Route53](https://aws.amazon.com/jp/route53/)に設定。ファイルは[S3](https://aws.amazon.com/jp/s3/)に配置。ただS3だけではhttpsには出来ないみたいなので、[CloudFront](https://aws.amazon.com/jp/cloudfront/)を組み合わせる。証明書発行は[AWS Certificate Manager](https://aws.amazon.com/jp/certificate-manager/)で発行。(もちろん$600/月も払えないのでSNI SSLですw)

#S3に独自ドメインを当てる
ほぼこの記事通りでうまくいった。
ムームードメインの場合だけど、お名前.comとかでも一緒かと思う。

>[ムームードメインで取得した独自ドメインをAmazon S3に適用する手順](http://webfood.info/muumuu-domain-for-amazon-s3/)

ポイントとしては

- Route53の設定のためにバケット名は当てたいドメイン名にする。
- wwwありなしを統一させるためにバケットはwwwありなし、2つ用意して片方にリダイレクトを設定する。
- Route53はバケット名とドメイン名が一緒だと自動でAlias Targetに出てくれて簡単

ここまででhttpでの独自ドメインでS3の運用ができた。

# AWS Certificate Managerで証明書を取得
手順に従って取得する。
メール認証かDNS認証かあるが、メール認証だとwhoisに記載のメアドにメールが飛んでくれず詰まったので、DNS認証を使用した。 Route53でドメインを設定していれば「Route53でのレコードの作成」というボタンがあるので、それを押すのがてっとり早かった。

注意点としては証明書のドメインはワイルドカードが使えるとあるが、`*.hogehoge.com`とすると`hogehoge.com`自体は証明書エラーになるという落とし穴があったため、ワイルドカードじゃないドメインも追加で入れなければならない。

>[AWS Certificate Manager(ACM)でワイルドカード証明書を発行する際の注意事項](http://blog.serverworks.co.jp/tech/2018/05/31/acm-wildcard-certificate/)

# CloudFrontの設定
こちらの記事が参考になった。

>[CloudFront で S3 静的ウェブサイトホスティングを SSL/TLS に対応させる](https://dev.classmethod.jp/cloud/aws/tls-for-s3-web-hosting-with-cloudfront/)

ポイントとしては

- 設定を変更したあとのin progressが鬼長い。
- 静的ホスティングとして使う場合、キャッシュのコントロールが難しい。。

# 結果
![sample.png](https://qiita-image-store.s3.amazonaws.com/0/20201/283efd58-88ff-725b-321a-3ae0ab206a90.png)

# 追記
### CloudFrontでキャッシュされないようにする(本末転倒感)
- Allowed HTTP Methodsをすべてに（GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE）
- Object CachingでMinimum TTL, Maximum TTL, Default TTLをすべて０（秒）に
- Query String Forwarding and CachingをForward all, cache based on allに
- Error Pagesで主要HTTP Error CodeのTTLを1（秒）に

### http => httpsリダイレクト
Cloudfrontの設定でViewer Protocol PolicyをRedirect HTTP to HTTPSにするとhttpでアクセスがあるとhttpsにリダイレクトしてくれる。

### WWWあり・なしリダイレクト
WWWなしに統一したかったが、Cloudfrontをかませている場合、上記のS3のバケットをWWWあり・なし2つ用意するだけではリダイレクトしなかった。
Cloudfront側でもwwwありのDistributionsを追加する必要がある。

ただ、リダイレクト用のDistributionsはOrigin Domain Nameを設定するときに、自動で出るプルダウンから選ぶのではなく、**S3のエンドポイント(www.hogehoge.com.s3-website-ap-northeast-1.amazonaws.com) を入れないといけない**。ここハマった。。

もちろんRoute53のAレコード(Aliasを選択)にwwwありのCloudfront Distributionsを追加しておく。これでやっとwwwでアクセスするとwwwなしにリダイレクトされるようになった。

# 次回
- API Gateway、DynamoDB、Lambdaと組み合わせてVue.jsのバックエンド作る
- Simple Email ServiceとLambdaでメールフォーム作る
Link > Windows > MAX_PATHはこういう理由で260

2014年11月21日にファイルパスの長さ制限にひっかかったことがある。

その時に見つけたのが以下のリンク先でした。

[MAX_PATH はこういう理由で260](http://blogs.wankuma.com/tocchann/archive/2007/05/17/77107.aspx) by とっちゃん 様

情報感謝です。
【Group By】各テーブルから取得したテーブルデータの各列単位での最大値(最小値)をSelectしたい

####詳細
```sql
select 
 Max(Case Where 条件1　Then 返り値1-1(テーブル1) Else 返り値1-2(条件なしの出力) As 条件1
,Min(Case Where 条件2　Then 返り値2-1(テーブル2) Else 返り値2-2(条件なしの出力) As Value

From テーブル1
INNER JOIN テーブル2 
ON テーブル1.要素=テーブル2.要素
Where テーブル1.要素=hogehoge
Group By
テーブル1.要素

```
上記の用に記載すると
Selectしたデータのテーブル1.要素でまとめて
テーブル1のデータに対しては各列の最大値を
テーブル2のデータに対しては各列の最小値を返す。

イメージ＞
◆取得した生データ

| 条件1 |Value| メモ|
|:-----:|:-----:|:------:|
|1| 100|条件1=1:Max|
|1| 50 ||
|2| 10 |条件1=2:Min|
|2| 20 |条件1=2:Max|
|1| 43 |条件1=1:Min|
|2| 49 ||

↓↓↓↓↓↓↓↓↓↓↓↓↓↓
◆Group By

| 条件1 | Vaue | メモ|
|:-----:|:-----:|:------:|
|1| 100|条件1でまとめてValueは最大値|
|2| 10 |条件1でまとめてValueは最小値|
|1| 43 |連続していないのでGroup 無し|
|2| 49 |連続していないのでGroup 無し|
Java、JDBC(ODBC)、JDBC（ODBC）ドライバとDatabaseの構成図

![image.png](https://qiita-image-store.s3.amazonaws.com/0/278961/0d2a8c54-82fd-32cd-6bdb-d0543ed64632.png)




① Database⇒[DataBase Management System] 
データの集まりを管理しているソフトウエア・プログラム
eg:Oracle Database,IBM DB2,PostgreSQL (全てRDB:Relational Database)

② 
・各DBMS製品間では交換性がない。
・対象のDBMSが変わると、インターフェイス部分のプログラムを書き直す手間が生じる。
・インターフェイスの違いを吸収し、どのデータベースに対しても同じように接続、入出力できる規格がJDBCであり、Java（Python）プログラムで実現できる。
JavaScript 初学者の覚え書き

C#er な自分が JavaScript の勉強をした際に、ポイントっぽいと思った事を列挙しました。
不正確な表現などあるかもわかりませんが、自分用の覚え書きということでご容赦ください。

## 変数のスコープ
-  JavaScript の var宣言変数にはブロックスコープは存在しない！

    ```JavaScript
    if (true) {
        var value = "sample";
    }
    console.log(value); // sample (エラーにはならない)
    ```

    ```JavaScript
    for (var i = 0; i < 10; i++) {
        // なんかする
    }
    console.log(i); // 10 (エラーにはならない)
    ```

- ブロックスコープの定義方法 (ES6以降)
`var` を `let` に変えるだけ

    ```JavaScript
    if (true) {
        let value = "sample";
    }
    console.log(value); // value is not defined エラー
    ```

    ```JavaScript
    for (let i = 0; i < 10; i++) {
        // なんかする
    }
    console.log(i); // i is not defined エラー
    ```

## 関数の書き方
-  「関数宣言」による書き方（静的宣言なのでどこに書いてもOK）

    ```JavaScript
    function sample() {
        // なんかする
    }
    ```

-  「関数式」による書き方（実行時評価）

    ```JavaScript
    var sample = function() {
        // なんかする
    };
    ```

## オブジェクトと連想配列は同じものである

- オブジェクトの生成

    ```JavaScript
    var 変数名 = new Object();
    ```

- 連想配列の生成と初期化 

    ```JavaScript
    var 変数名 = { キー名 : 値, キー名 : 値, ･･･ };
    ```

- オブジェクト、連想配列の要素にアクセスする方法  
    - ブラケット構文によるアクセス

        ```JavaScript
        変数名["キー名"]
        ```

    - ドット演算子によるアクセス

        ```JavaScript
        変数名.キー名
        ```


## 高階関数

- 関数を引数や戻り値として受け渡しできる関数


## クロージャ

- ローカル変数を参照している関数内関数


## クラス・プロトタイプ

- new 演算子で関数を呼び出すと、コンストラクタとして振る舞う
この場合の `this` は新たに生成されるインスタンスを表す

    ```JavaScript
    // コンストラクタの定義
    var Person = function(name,birth) {
        this.name = name;
        this.birth = birth;
    };

    // インスタンス化
    var p = new Person('山田太郎','2001/01/01');
    ```

- JavaScript のすべてのオブジェクトは、内部的にプロトタイプ（prototype）という特別なオブジェクトを持っている
- メソッドは「プロトタイプ」に宣言、プロパティはコンストラクタで宣言する

    ```JavaScript
    // コンストラクタの定義
    var Person = function(name,birth) {
        this.name = name;
        this.birth = birth;
    };

    // プロトタイプの定義（オブジェクトリテラルを利用した書式）
    Person.prototype = {
        showName : function() {
            return this.name;
        },
        showBirth : function() {
            return this.birth;
        }
    };

    // プロトタイプの定義（ドット演算子を利用した書式）
    Person.prototype.showNameBirth = function() {
        return this.name + 'さんの誕生日は' + this.birth;
    }

    // インスタンス化
    var p = new Person('山田太郎','2001/01/01');
    console.log(p.showName());  // '山田太郎'が表示される
    ```

- オブジェクトリテラル : 下記の書式の「値」に「関数リテラル（無名関数）」を記述する

    ```JavaScript
    { キー名 : 値 , キー名 : 値 ,・・・}
    ```
React Native の iOS のリリースビルドで console.log を出力する

React Native は iOS のリリースビルドでは、console.log が一切表示されません。
ビルド時にログレベルを切り替える設定が見つからず、わりと悩んだのでメモしておきます。

AppDelegate.m の中でログレベルを明示的に設定してしまうのが、手早そうです。

```objc:AppDelegate.m
#import <React/RCTLog.h> // ← ここ追加

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  RCTSetLogThreshold(RCTLogLevelInfo); // ← ここ追加
```

上記のように書き換えてビルドすると、Xcode のコンソールにログが出てくるようになります。
SourceTreeでCPIのサーバに作ったリポジトリからクローン出来なかった件

#問題
CPIのサーバに作成したリポジトリをWindows10にインストールしたSourceTreeでローカルにクローンしようとしたところ、パスの入力時に「ソースを確認中…」と表示されたままになり、クローンが出来なかった。

#原因
書き込まれているはずのレジストリが書き込まれていなかった。

#対処
SourceTreeでクローンする前に、一度コマンドプロンプトでSSH接続を行っておく。

#操作
コマンドプロンプトで

```
"\usr\local\bin\plink.exe" -ssh -C -i "key.ppk" user@server -P 10399
```

※上記はポートが10399の場合。CPIのサーバでは公開サイト・テストサイトによって接続する際に使用するポートが違うので要確認（サーバによっても異なる）

`Store key in cache? (y/n)` と聞かれるのでyと答えるとレジストリに鍵の情報が書き込まれる。

#参考
WindowsのSourceTreeでBitbucketからクローンできなかった
https://qiita.com/moo/items/5ee3208254c34719914b
OpenSearch を有効活用しよう (2/3)

[　 OpenSearch を有効活用しよう (1/3)](https://qiita.com/ctrlzr/items/4f59628764afa86d3716)
⇒ OpenSearch を有効活用しよう (2/3)
[　 OpenSearch を有効活用しよう (3/3)](https://qiita.com/ctrlzr/items/33cd533606d427708a56)


OpenSearchが設定されたサイトで検索すると検索エンジンに追加されますが、デバイスにより動作が異なります。

- ## Chrome #Android
検索エンジンに、最近のアクセスとして追加されます。
**ショートカットはありません。**
既定の検索エンジンに設定できます。
![android_search_engine.jpg](https://qiita-image-store.s3.amazonaws.com/0/63018/4ccd29b2-4a01-bfc1-ab8f-5965180b75bc.jpeg)


- ## Safari #iOS
クイックWebサイト検索をonにすると、WEBサイトショートカットとして追加されます。
**ドメイン名がショートカットになります。**
**既定の検索エンジンに設定できません。**
![ios_search_engine.jpg](https://qiita-image-store.s3.amazonaws.com/0/63018/08d5eda1-99cb-fca0-42e3-fe70be5dc376.jpeg)


- ## Chrome #pc
その他の検索エンジンに追加されます。
ドメイン名がショートカットになります。変更可能です。
既定の検索エンジンに設定できます。

- ## IE #pc
ショートカットはありません。検索するときに選択します。
既定の検索エンジンに設定できます。
~~OpenSearchに対応していません。~~
javascriptで対応可能でした
window.external.AddSearchProvider(opensearch.xmlのurl)

サンプルhtml

```ruby:index.html
<html>
<head><meta charset="UTF-8"></head>
<body>
<input type="button" value="検索エンジン追加" onclick="javascript:window.external.AddSearchProvider('https://ctrlzr.sakura.ne.jp/opensearch_hetayomi.xml');">
</body>
</html>
```
アドオンの管理から既定の検索エンジンに設定できます。
![ie_addon.png](https://qiita-image-store.s3.amazonaws.com/0/63018/2efc7df4-3efd-7786-68bc-c51ccd3db69f.png)



## 既定の検索エンジンを変えたときの動作

qiitaを既定の検索エンジンに設定します。`chrome://settings/searchEngines`
![chrome_setting_default.png](https://qiita-image-store.s3.amazonaws.com/0/63018/29f13e34-113e-d704-0d5c-4a2c6351d081.png)

アドレスバーに入力した文字列で、qiitaを検索できます。
![qiita_search_result2.png](https://qiita-image-store.s3.amazonaws.com/0/63018/2d4b5bcf-a752-f5ed-df36-8e96255f18b7.png)

「ポケgo 個体値」と入力しても、qiitaを検索するのは不便なので、ショートカット検索にします。


## ショートカットで検索エンジンを変えたときの動作
(Safari #iOS、Chrome #pcのみ)

googleを既定の検索エンジンに設定します。

アドレスバーに[qiita.com ]を入力すると、「qiita.comを検索」に切り替わります。

![chrome_serach.png](https://qiita-image-store.s3.amazonaws.com/0/63018/6d352b56-5784-bbb5-7b5f-0e6bf71923eb.png)
　　　　　　　　　　**↓**
![qiita_search_result2.png](https://qiita-image-store.s3.amazonaws.com/0/63018/2d4b5bcf-a752-f5ed-df36-8e96255f18b7.png)

ショートカットを入力することで、サイトを切り替えることができます。

2回目はここまで
IBOutletで接続したUIパーツにコードで修飾を記述する場所としてdidSetをご提案

レイアウトをStoryboardで作成して、コードで修飾する（layer.borderColorとか）ことがあると思います。
私は今まで、 カスタムViewを作って`awakeFromNib`内で修飾コードを記述してきましたが、後輩から`didSet`で行うのはどうかと言われました。

# 今までの書き方
```swift:AsIs.swift
class CustomView: UIView {
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var okButton: UIButton!
    @IBOutlet weak var cancelButton: UIButton!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        
        // OKボタンの修飾
        okButton.layer.borderColor = UIColor.white.cgColor
        okButton.layer.borderWidth = 1.0
        okButton.layer.cornerRadius = 5.0
        
        // キャンセルボタンの修飾
        cancelButton.layer.borderColor = UIColor.black.cgColor
        cancelButton.layer.borderWidth = 1.0
        cancelButton.layer.cornerRadius = 5.0
    }
}
```

この書き方でも特に不便は無いのですが、修飾するパーツが増えたときに`awakeFromNib`のfunctionが肥大化するというデメリットが有りました。

# そこで`didSet`
```swift:ToBe.swift
class CustomView: UIView {
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var okButton: UIButton! {
        didSet {
            // OKボタンの修飾
            okButton.layer.borderColor = UIColor.white.cgColor
            okButton.layer.borderWidth = 1.0
            okButton.layer.cornerRadius = 5.0
        }
    }
    @IBOutlet weak var cancelButton: UIButton! {
        didSet {
            // キャンセルボタンの修飾
            cancelButton.layer.borderColor = UIColor.black.cgColor
            cancelButton.layer.borderWidth = 1.0
            cancelButton.layer.cornerRadius = 5.0
        }
    }
    
    // awakeが要らなくなる！
}

```

## ※ 追記：willSetを使ってみる
`willSet`を使うと、`newValue`が使えるので、よりswiftらしい！（@rd0501 さん、ありがとうございます！）

``` swift:willSet.swift
class CustomView: UIView {
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var okButton: UIButton! {
        willSet {
            // OKボタンの修飾
            newValue.layer.borderColor = UIColor.white.cgColor
            newValue.layer.borderWidth = 1.0
            newValue.layer.cornerRadius = 5.0
        }
    }
    @IBOutlet weak var cancelButton: UIButton! {
        willSet {
            // キャンセルボタンの修飾
            newValue.layer.borderColor = UIColor.black.cgColor
            newValue.layer.borderWidth = 1.0
            newValue.layer.cornerRadius = 5.0
        }
    }
    
    // awakeが要らなくなる！
}
```

## 今までの書き方に比べて
### メリット
- パーツが増えてもパーツ毎の修飾がまとまっていて見やすい
- `didSet`を使うことにより、よりswiftらしい(個人的感想)

### デメリット
- パーツ毎に`didSet`を書く必要があるので、定義部が肥大化（行数が増える意味で）

# 最後に
行数は増えますが、`awakeFromNib`の肥大化が抑えられるのでdidSetでの修飾を今後使っていこうと思います。
2018-08-07 esa.io > チーム名変更後の注意点 > リンク

```txt:動作環境
Windows 10 Pro (64bit) バージョン 1803 (April 2018 Update)
Google Chrome バージョン: 68.0.3440.84（Official Build） （64 ビット）
esa.io
```

esa.ioのチーム名を変更した。

変更時に注意する点として、esa.io記事へのリンクだろうか?

- #記法でのesa.io記事間リンク
    - 変更: 不要
    - 新チーム名への記事リンクに自動的になるようです
- プライベート記事への記事URLを使ったリンク
    - 例: MindMup 2上のノードとしてのesa.io記事へのリンク
        - 例: `https://[チーム名].esa.io/posts/1234`
    - [ ] 変更: 必要 (*1)
- esa.ioのShare Post機能により生成されたURLへのリンク
    - 変更: (おそらく)不要
    - URLにチーム名が入っていなく、かつ、URLに固有番号がついているため?

*1) こちらに関しては元チーム名記事から新チーム名記事への転送機能が働くが、あくまでおまけ機能とのこと。元チーム名が別のアカウントで利用されたら、リンクは途切れることになります。
Ionic-sub CLIに、aliasの自動設定コマンドを追加しました（Ionic v3対応）

## 使い方

```bash
$ npm i @rdlabo/ionic-sub -g
$ cd [Ionic Project Directory]
$ ionic-sub set alias
```

このコマンドを実行すると、Aliasと環境変数の設定を自動的に行います。

### Alias
import文に`@`が使えるようになります。デフォルトの設定では相対パスを書かないといけないので、ファイルを移動したり、コピペしたりすると修正が必要でした。しかし、`@`を使うと常に`src/`からの相対パスとなりますので、Current Direvtoryを気にする必要がなくなります。

例えば、以下のように書けるようになります。

```
import { HomePage } from '../pages/home/home';
↓
import { HomePage } from '@/pages/home/home';
```

```
import { Example } from '../../../providers/example/example';
↓
import { Example } from '@/providers/example/example';
```

### 環境変数
Ionic v3のデフォルトの設定では、`--prod`をつけた場合とつけていない場合での処理の分岐を行うことができませんが、`@app/environment`からのインポートによりそれを可能にします。

```js
import { environment } from '@app/environment';

console.log(environment)
```

もし、`--prod`がついていれば、`environment/environment.prod.ts`からインポートを行います。ついていなければ、`environment/environment.dev.ts`からインポートを行います。デフォルトファイルを用意しておりますので、お試しください。

## その他
[Ionic-sub CLIをつくった経緯はこちらです。](https://qiita.com/rdlabo/items/52bfe3c19ee586abe67a)
また、他のコマンドについて https://github.com/rdlabo/ionic-sub をご覧ください。Starいただけると励みになります。また、ドキュメントつくってくださる方募集中。
Vimの設定　コピペ

Vimの設定毎回面倒なので
どこかのサイトからとってきたやつを使っていたのですが
割と良かったのでいつでもコピペで環境構築できるように共有しておきます。

`$ vi /etc/vim/vimrc`

```vim:/etc/vim/vimrc
" 一番下に追加
set number
set title
set ambiwidth=double
set tabstop=4
set expandtab
set shiftwidth=4
set smartindent
set list
set listchars=tab:»-,trail:-,eol:↲,extends:»,precedes:«,nbsp:%
set nrformats-=octal
set hidden
set history=50
set virtualedit=block
set whichwrap=b,s,[,],<,>
set backspace=indent,eol,start
set wildmenu
```
jQuery-plainOverlayをスマートフォンサイトで使うとアドレスバー分の隙間ができる

スマートフォンサイトでAjax通信時に表示するいい感じのローディングを探していたのですが、こちらのプラグインを見つけました。

[jQuery-plainOverlay](https://anseki.github.io/jquery-plainoverlay/)

PCで表示確認している時は問題なかったのですが、スマートフォンで確認してみると、ページ下部にアドレスバー分の隙間ができてしまいました。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/278955/66918b2a-3613-14fd-ef35-73915b3bb470.png)


最初に表示した時にオーバーレイの高さを決めてしまうらしく、アドレスバーを隠しても画面の高さを再取得しないようです。

オーバーレイの高さを多めに指定することで回避できました。

```js:JavaScript
$('body').plainOverlay('show');
// アドレスバー分下に隙間ができるため多めに指定
$('.plainoverlay').css('height', ($(window).height() + 1000) + 'px');
```
医療診断とAI（機械学習）

AIによる医療診断について、近年の動向を踏まえて解説していきます。
**内容はこれから随時更新していきます。追加や修正の要望があれば、コメントしてください！**

Tokyo Bioinformatics Meeting 2018でのスライドはこちらです。
https://www.slideshare.net/TatsuyaMizuguchi/medical-care-and-ai

#なぜ医療×AIか
世界の先進国は今や高齢化社会（日本では超高齢社会）へ突入しており、増加する医療費、患者に対する医師の不足が深刻な問題となっています。
このような状況下でAIの医療応用には多大な期待がかっており、大企業からベンチャー企業まで様々な企業の参入が見られます。日本でも産官学連携で、**AI病院**なるものを2022年までに10ヶ所作るみたいですね！
そんな期待の高まる医療×AIですが、さまざまな応用例があるので、まずこれを２つに分類してみます。

- 人ができないことをやる
ビックデータを用いた**薬剤効能予測**や**新規知識の発掘（テキストマイニング）**など

- 人ができることをやる
患者データからの**医療診断**や読影レポート・電子カルテの**自動入力**など

今回はこの**医療診断**に注目していきます。ほかも時間があれば記事にしたいです。。。

#なぜ医療診断×AIか
ではなぜAIに医療診断をさせるのでしょうか。これは**診断のミスや見落としをなくすため**です。
AIが医師の診断のサポートを行い、可能性のある病気を医師に提示したり、ダブルチェックを行うことでこのリスクを減らすことができます。
また、医師が診断にかける時間を減らすことで医師自身が勉強する時間を作ることもできますし、医師の数が足りないという問題も緩和できます。つまり良いことづくめです。
ただ考えなければいけないのは、**AIが診断ミスをしたところで誰が責任をとるのか**という倫理的な問題です。そのためあくまでAIは医師の**サポート**として利用されています。

#医療診断×AIの動向
医療診断をするAIを作ろうという考えは20世紀後半のエキスパートシステムの頃が始まりでした。BC500年にヒポクラテスが科学的医学の基礎を築いてから2500年、1956年にジョン・マッカーシーが人工知能（artificial intelligence）を提唱してから20年弱の出来事です。
エキスパートシステムというのは、医師が医学知識や診断ルールを記述し、それをコンピュータに格納するというものです。つまり、「if 体温>37.5℃ then 発熱」のようなルールを**人力で時間をかけて**作ることでコンピュータに覚えさせたわけです。このルールに従って医師に患者の症状を質問していくことで、最終的な診断ができます。

実はこのエキスパートシステムは、医師がマニュアルで作成したという信頼性からか、医療分野では今でもよく利用されています。あとはオペレーションシステムでもよく利用されているのを見かけます。ただ、ルールの記入に非常に時間がかかることから一部の特徴的な病気の診断などに使うのが限界…というのが現状です。

そこで最近よく研究されてるのが、機械学習とりわけ深層学習です。機械学習の説明はほかに沢山の良記事があるので割愛しますが、**速く**かつ**高精度に**診断することが可能になりました。その勢いはすごく、例えば下の図は医療画像に機械学習を用いた研究の件数ですが、これを見ると2015年あたりから一気に件数が増えてるのが分かります。

![スクリーンショット 2018-08-09 17.43.22.png](https://qiita-image-store.s3.amazonaws.com/0/210451/f4bc0387-9190-0acd-9092-88a6283263a6.png)


#取り扱う論文
【医療画像×機械学習】
・[HE×CNN → 乳がんの転移性診断](#乳がんの転移性診断)
・[MRIとPET×DPN → アルツハイマー診断](#アルツハイマー診断)
【電子カルテ(EHR)】
・[EHR×RNN → 病名診断](#病名診断)
・[EHR×SAE → がん，糖尿病診断](#がん及び糖尿病診断)
・[EHR×RBM → 自殺予測](#自殺予測)

##乳がんの転移性診断
Deep learning as a tool for increased accuracy and efficiency of histopathological diagnosis
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4876324/

##アルツハイマー診断
Multimodal Neuroimaging Feature Learning With Multimodal Stacked Deep Polynomial Networks for Diagnosis of Alzheimer's Disease.
https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7827160

##病名診断
Doctor AI: Predicting Clinical Events via Recurrent Neural Networks
https://arxiv.org/pdf/1511.05942.pdf

##がん及び糖尿病診断
Deep Patient: An Unsupervised Representation to Predict the Future of Patients from the Electronic Health Records
https://www.nature.com/articles/srep26094

##自殺予測
Learning vector representation of medical objects via EMR-driven nonnegative restricted Boltzmann machines (eNRBM)
https://www.sciencedirect.com/science/article/pii/S1532046415000143?via%3Dihub