OmniAICreator/Qiita-1.07M huggingface dataset:
PWAを手っ取り早く試す-Part1

#手っ取り早く試す
フリーツールで拡張ツールの力を借りつつ
基本何も書かずに、とりあえずPWA作ってみた。


##使用したツール
VisualStudioCode(v1.28.2)
vscode-pwa(https://github.com/johnpapa/vscode-pwa)

##試す
拡張ツールの「Try it Out」通りにやればうまく行くかと思ったら
うまくいかんやん！と思い色々試行錯誤。
躓かなければサクサク出来るのでやったーできたーをすぐ体感できる。


##Try it Out捕捉
>npm i @angular/cli lite-server -g

npmの入れ方は省略。
(npm windowsで検索すると山ほど出てくるので、それの最近書かれた記事を参照)
lite-serverが入ってない時は、これやってください。

1終わった後に、pwa-sampleのフォルダ右クリックでopen with vscode

3(捕捉):manifest.jsonで「pwa-manifest」を入力

4(捕捉):pwa-manifest-linkをheadの間に入力。

6(捕捉):プロジェクト直下に作成

8:const BUILD_DIR = 'dist/pwa-sample';に変更

9:.angular-cli.json　これがないけど、angular.jsonがそれにあたる
そのファイルでassetsって検索するとjsonarrayあるので、そこに
"src/manifest.json"を追加

10(捕捉):
run pwa-register at the bottom→main.tsにpwa-registerを入力

11(捕捉):
platformBrowserDynamic().bootstrapModule(AppModule)の後ろに
.then(() => registerServiceWorker())を入力

12:コマンド入力する前に
dist直下にbs-config.jsonを作成し

```json
{
    "server": {"baseDir": "./pwa-sample"}
}
```
まずは１個ずつコマンド入力
そうすると、localhost表示されるんで
LANでも引っこ抜いて、オフラインにしてから
更新押してもそのページが表示されたらPWA完成！

#最後に
よくよく見るとこの拡張ツール去年で開発止まっているので
Try it Out通りにやってもうまくいかなくて当然でした。
(最初ずっと？でした)
せっかくなので、今度はこれをHerokuに上げます。
【iOS】SubjectとRelay、そしてTraitsについての整理

SubjectとRelay、そしてTraitsに関してまとめてみました。

RxSwiftを勉強していく中で
Subject、Relay、Signal、Driveといった用語が出てきてその都度検索して理解していたのですが、どれがどれだったのか曖昧になることが多々あり整理した方が良いと思い本記事を書きました📝

## Subject

SubjectはObservable且つObserverなものです
= イベントの検知ができる、イベントの発生もできる

イベントとしては
onNext, onError, onComplete
が流れます。

* AsyncSubject
* BehaviorSubject
* PublishSubject
* ReplaySubject

という４つのSubjectがあります。

### AsyncSubject
AsyncSubjectのonCompletedが呼ばれた直後に、onNextで渡された最後の値だけが流れます。

<img width="640" alt="S.AsyncSubject.png" src="https://qiita-image-store.s3.amazonaws.com/0/138735/8280ca34-5485-2891-3738-00089731f8c3.png">

最後の値しか必要でない時に、コールバックを受け取る実装をするのに便利です。
（値を受け取るまではロード画面を表示し、値を受け取った場合はダイアログを消し、受け取った値に基づいて特定の処理をする場合など）

### BehaviorSubject
初期値をもつSubjectです。
直前に渡された値を保持しsubscribe()された際にその値（初回の場合は初期値）を流します。
onNext,onError, onCompletedは発生次第そのまま流れます。

<img width="640" alt="S.BehaviorSubject.png" src="https://qiita-image-store.s3.amazonaws.com/0/138735/a2f40dda-1329-ac10-15c4-83fce9391f5c.png">


### PublishSubject
初期値をもたないSubjectです。
onNext,onError, onCompletedは発生次第そのまま流れます。
シンプル。

<img width="640" alt="S.PublishSubject.png" src="https://qiita-image-store.s3.amazonaws.com/0/138735/cd32a7ce-f1a7-e446-abe4-00f67d9f59df.png">

### ReplaySubject
subscribe後に値を流します。
bufferSizeに指定した数だけ値を流します。

<img width="640" alt="S.ReplaySubject.png" src="https://qiita-image-store.s3.amazonaws.com/0/138735/eec89b64-b996-59f0-8ebc-975fbb8d26cc.png">


## Relay
Subjectのラッパーです。

|  |　概要　| イベント |
|---|---|---|
| PublishRelay  |PublishSubjectのwrapper。初期値なし。  |onNext  |
| BehaviorRelay  |BehaviorSubjectのwrapper。初期値設定可能。  |onNext  |

ObservableTypeプロトコルに準拠していますが、Subjectと違いObserverTypeには準拠していません。
また、nextだけが流れ、errorやcompleteは流れません。

イベントは以下のようにして流すことができます。

```.swift
let somerRelay = BehaviorRelay<String>(value: "")
somerRelay.accept("ABC")
somerRelay.accept("DEF")
```

## Traits
Traitは簡単なObservableのラッパーで、以下のようなものが定義されています。

| Rx |　Traits　|
|---|---|
| RxCocoa  |Driver|
| |Signal|
| |ControlProperty / ControlEvent|
| RxSwift  |Single|
|   |Completable|
|   |Maybe|

### RxCocoa traits

#### Driver
* エラーを流さない
* メインスレッドで実行される
* replay(1) = 直近の値を含めてイベントを流す
（リプレイはその名の通り、同じ物を繰り返す意で捉えるといいと思います）

### Signal

* replayしないDriver

その他はDriverと同じで、エラーは流れずメインスレッドで実行されます

### ControlProperty / ControlEvent

#### ControlProperty

* エラーを流さない
* replay(1)
* メモリの割り当てが解放されるとcompleteが流れる
* メインスレッドで実行される

#### ControlEvent

* エラーを流さない
* 購読時に初期値をながさない
* メモリの割り当てが解放されるとcompleteが流れる
* メインスレッドで実行される

### RxSwift traits

#### Single
名前の通り単一の要素を流す場合に用います。

* １つの値かエラーを流す

一般的な使用例としては、レスポンスまたはエラー情報を返すHTTPリクエストがあります。永続的なストリームを必要とせず、単一の要素だけを扱う場合はSingleを使えます。

#### Completable
completeかerrorイベントを流します。
要素は流れません。

* 要素を流さない
* completeかerrorイベントを流す

####  Maybe
SingleとCompletableを組み合わせたようなものです。

* completeか単一の値、もしくはエラーが流れます

ストリームに値を流したいが、必ずしもそれが必要でない場合はMaybeが使えます。

## 参考

* [ReactiveX Subject](http://reactivex.io/documentation/subject.html)
* [Traits (formerly Units)](https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Traits.md#signal)
【VisualC#】改行コード統一する

備忘録として残します。
現在私はPHPをベースとするWebエンジニアなので、C#の案件をやってからどれだけ、PHPの標準関数が便利か痛感しております。

前置きはこのくらいにして、ヘルパー関数群のクラスを作ってる最中ですが、こちら、小出しにQiitaに共有します。

`今回は改行コードの統一。`
テキストファイルを読み取り、改行区切りでsplitして配列にするなんてことは、どのプログラミング言語でもあり得るシチュエーションです。
splitする際に改行コードがそろっていなかったら「あれ？」なんかおかしくね？
となります。
これを回避するため、改行コードの統一してからsplitをかけるというフローになります。
下記が改行コードを統一する処理になります。

```c#
// 改行コードを統一
static public string ConvertEOL(string text, string toEOL ="\n")
{
    return text.Replace("\r\n", toEOL).Replace("\r", toEOL).Replace("\n", toEOL);
}
```

私のヘルパー関数から抜粋したため、コピペじゃ動かないと思います。

こちら、重要なのは引数と、内部の処理です。
第１引数で整形したい文字列
第２引数で何の改行コードで統一させるか。
内部的な処理としては、改行コード3種類(CRLF、CR、LF)を第２引数で指定した改行コードでリプレイスしています。

以上です。
AWS Cloud9でWordpressを使ってみる~準備編~ 2(AWS EC2で80番ポートを空ける)

今回はブラウザでwordpressを映すために最重要ッ!!なことをしていきます。

## 前提条件
■ AWSのアカウントをつくった
■ AWS Cloud9の画面で環境を作った
![check.png](https://qiita-image-store.s3.amazonaws.com/0/304122/cfea9d1d-1056-7d46-4e53-11ba6d604499.png) [作り方はこちら！](https://qiita.com/iwashito_230/items/119c1df0712804eed147)

## ここでの大まかな流れ
- EC2のダッシュボード開く
- 実行中のインスタンスのページへ行く
- ポートを開けたい方を選択
- セキュリティーグループでインバウンドルールを追加
以上、4点。

## EC2のダッシュボード開く
検索で、EC2ト入力して検索結果先をクリック
![search.png](https://qiita-image-store.s3.amazonaws.com/0/304122/4369c5dd-afec-1c2f-2062-e2f95fc17ca4.png)
[EC2ダッシュボード](https://ap-southeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-southeast-1#Home:)に遷移できればOK

## 実行中のインスタンスのページへ行く
![EC2-port2.png](https://qiita-image-store.s3.amazonaws.com/0/304122/8e753e43-0cd1-d1c0-ab28-4eecef0ee57c.png)


## ポートを開けたい方を選択
![EC2-port3.png](https://qiita-image-store.s3.amazonaws.com/0/304122/77fb43c6-3a3c-efb2-16de-42c3bb85fabc.png)
ワンクリックするだけで、下部に説明がでてくればOK!

## セキュリティーグループでインバウンドルールを追加
ここをクリック
![EC2-port4.png](https://qiita-image-store.s3.amazonaws.com/0/304122/75c04b1d-2304-32d4-f758-c65db23b96b3.png)
セキュリティーグループの項目に移ったら、インバウンド
![EC2-port5.png](https://qiita-image-store.s3.amazonaws.com/0/304122/66b403e0-ca46-cd24-b4b7-aaf7c0bff650.png)
をクリック


それから、追加をクリックする
![EC2-port6.png](https://qiita-image-store.s3.amazonaws.com/0/304122/a0064b1f-fd3e-692f-5d84-1a8e19e9e89e.png)

ルールの追加をクリック
![EC2-port7.png](https://qiita-image-store.s3.amazonaws.com/0/304122/4ddf4560-8087-9c35-f285-fa2a313c8437.png)

タイプのところで▼を押してhttpを選択後、保存をクリック
![EC2-port8.png](https://qiita-image-store.s3.amazonaws.com/0/304122/2d8b8ce4-c360-5036-c66a-3cdbbf782132.png)


## 結果
![EC2-port9.png](https://qiita-image-store.s3.amazonaws.com/0/304122/d7bdf909-c17b-3b8f-c257-aaa528dac14f.png)
になっていればOK！

以上です、お疲れさまでした。

次はこれ
![check.png](https://qiita-image-store.s3.amazonaws.com/0/304122/edd1c71f-47ad-571f-7e96-c44add5cc210.png) [AWS Cloud9でWordpressを使ってみる~本編~ 3(myqldとhttpdの設定をする)](https://qiita.com/iwashito_230/items/ed3c90077e7474b36b78)
統計学入門9.6をPythonで解く試み

# 概要
統計学入門(東京大学出版会)の練習問題9.6の2番をPythonにて解きます。
問題は以下の通り。

あるデパートの注文服売り場の販売員の所へ来る一時間当たりの来客数は,λ=1.5のポアソン分布に従うという。午前3時間の来客数が5人以上である確率を求めよ。

# 考え方
- λ=1.5とは、「一時間当たりの来客数が平均1.5人である」ことを言います。
- ポアソン分布は**再生性**を持ちます。再生性とは、「独立な複数の確率変数が同一の分布に従うとき、その和もそれらと同じ分布に属する」ことを言います。
- 対して、母集団分布がいかなる分布であっても、そこから取り出した標本の数が多ければ、それら標本の総和は正規分布になります。これを中心極限定理といいます。
- 今回は標本の数が小(たった3つ!)なので、中心極限定理は使えず、従って「一時間当たりの来客数を確率変数Xとみなし、三時間の来客数をX1+X2+X3で表現する」という方針で行きます。

# 環境
Jupyter notebookを用います。

#ソースコード
以下のようになります。

```ruby:code.rb
from scipy.stats import poisson
import numpy as np
k,mu = 5,4.5
p=poisson.cdf(k,mu)
print("5人未満のお客さんが来る確率は、{:0.2f}%".format(100*p))
P= 1-p
print("5人以上のお客さんが来る確率は、{:0.2f}%".format(100*P))
```

#結果
以下のような結果となりました。
![スクリーンショット (8).png](https://qiita-image-store.s3.amazonaws.com/0/297130/f4eea3a2-ef89-9ba4-8fcc-269e872583ee.png)

間違い等あればご一報ください。
GitlabCI でLambda@Edge で動かすようのnode.js のテストを書く

# やりたいこと

+ Lambda@Edge で動かすnode.js のプログラムは今までテストコードがない状態だった
+ テストは書かないと。。。
+ プログラムがGitlabで管理されているので、CircleCIとかではなく、GitlabCIで動かします

# node.js のテストについて

+ 今回は、`mocha` を使いたいと思います
    + https://github.com/mochajs/mocha
    + https://mochajs.org/

# .gitlab-ci.yml の設定

+ Gitlab の画面上で作成される`.gitlab-ci.yml`をほぼそのまま使ってます

```yml
image: node:latest

cache:
  paths:
  - lambda/cloudfrount/node_modules/

test-cloudfrount:
  script:
   - cd ./lambda/cloudfrount/
   - npm install
   - npm test
```

# package.json の設定

+ `npm init` で出てくるのをほぼそのまま使ってます

```json
{
  "name": "cloudfront",
  "version": "1.0.0",
  "description": "いい感じの説明文",
  "main": "いい感じのjs",
  "directories": {
    "test": "test"
  },
  "scripts": {
    "test": "./node_modules/.bin/mocha"
  },
  "author": "gessy0129",
  "license": "ISC",
  "dependencies": {
    "mocha": "^5.2.0"
  }
}
```

# Gitlab での設定について

+ 特にないです
+ この2つのファイルをGitlabにpush すれば勝手に動きます

# テストコードの場所について

+ 今回、`lambda/cloudfrount/` のディレクトリだけのテストを行いました
+ そのため、テストコードは`lambda/cloudfrount/test` の下に入っています
【入門】Gitのインストールと環境構築【Windows】

###Git インストール
[こちらからGitクライアントをインストールします。](https://git-scm.com/)
※これでGitシステムと、LinuxコマンドをWindows環境でも利用可能になるターミナルソフトGit bashが利用できるようになります。
インストールが完了したらGit Bashを起動しておきましょう。

### GitLabのアカウント作成
[こちらからGitLabでアカウント作成・ログインします。](https://gitlab.com/)

※バージョン管理システムGitを利用したリポジトリサービスは、Githubが有名です。しかし本稿では、無料で非公開のリポジトリを作れる＆自前サーバーでもサービスをインストール可能などの利点から、GitLabを利用しています。

###Gitへのログイン・SSH認証キーの設定
Gitを利用し、それをクラウド上のサーバー(GitLab)へプッシュ（アップロード）するための設定です。
サーバーとの連携するためSSH通信という安全な通信方法を利用します。

> ※まめちしき: SSH通信の流れ（読み飛ばしてもいいです。）
> 【①ローカル上で秘密鍵と公開鍵を生成し、公開鍵をサーバー(GitLab)に登録】
> 【②サーバー上で公開鍵を元に、乱数生成＆公開鍵と乱数から暗号生成＆乱数からハッシュ値生成】
> 【③ローカル上で秘密鍵を復号したものと暗号で乱数を復号＆乱数からハッシュ値を計算】
> 【④ハッシュ値をサーバーに渡す　既存のハッシュ値と渡されたハッシュ値を比較し一致したら認証】

```
$ git config --global user.name "Your Name"   #ユーザ名設定
$ git config --global user.email your-email@example.com　#メールアドレス設定
$ ssh-keygen -t rsa      # SSH認証キー（公開鍵）の生成。
$ clip < ~/.ssh/id_rsa.pub  # 公開鍵の中身をコピー。
```
1. Git bash（ターミナル）で上記コマンドを実行。
2. GitLabで作業
 2. トップ画面右上のメニューから「Settings」を選択。
 3. 画面左端「User Settings」メニュー→「SSH Keys」を選択。
 4. 「SSH認証キー登録」画面が表示されるので、「Key」にコピーした公開鍵をペースト。
 5. 「Title」は任意の文字列でOK。わかりやすく「SSH認証キー（公開鍵）」と同じ名前を設定してもいい。
 6. 「Add key」をクリック→SSH keysとして正常に登録した公開鍵が表示されていれば登録完了。

###リモートリポジトリの作成
1. GitLabで作業
 2. ローカルからリモートのリポジトリへプッシュ（アップロード）するためのリポジトリをGitLab上で作成する。
 3. 「New Project」→「プロジェクト名」(わかりやすくアプリの名前と一緒にする)→「Create Project」で作成完了。
 4. 作成後、リポジトリのページに”git＠gitlab.com:<YourName>/AppTitle.git”というようなテキストボックスがあるので、これをコピー。
 
※後述のgit remote addでローカルからリモートへリポジトリをプッシュするために利用します。

###ローカルリポジトリの作成

```
$ git init　　Git管理したいディレクトリ(Railsアプリのルートディレクトリなど)に移動し、新しいリポジトリの初期化を行います。
$ git add -A　プロジェクトのファイルをリポジトリに追加します。
$ git status　ステージング（待機用リポジトリ）の確認。コミットを待つファイルが置かれる。安全のため、いきなりコミットはしない。
$ git commit -m "Initialize repository"　ステージングにある変更をリポジトリに反映する。
```

###ローカルからリモートリポジトリへのプッシュ（アップロード）

```
$ git remote add origin git@gitlab.com:<username>/MyApp.git　　#　MyAppのリポジトリのページがGitlabに作成される。
$ git push -u origin --all　# または”--allの代わりにmasterでもOK”
```

###ブランチ作成
* ブランチを活用すると、”正常に動作する状態のリポジトリをコピーし、コピー先で変更を加え、コピー元に最終的な変更を反映させる”といったことができる。　
 
ブランチ：リポジトリのコピー
masterブランチ: 全ブランチの親ブランチ。
トピックブランチ：短期間の作業用の一時的なブランチ。

```
$ git branch                  # ブランチ一覧を表示。現在使用中のブランチは*がつく。
$ git checkout -b ChildBranch　# "-b ブランチ名"でブランチ作成
$ git checkout master 　　　# "checkout ブランチ名"で指定ブランチ移動。ここではmasterへ移動。
$ git merge ChildBranch 　　　# マージ（ブランチの変更をmasterに反映する。）
$ git branch -d ChildBranch 　# "-d ブランチ名"で指定ブランチの削除
```
※ブランチでミスをした場合は、-dの代わりに-Dを使うと、マージせずとも削除してくれる。

#####２回目以降のプッシュ
”git push -u origin master”を実行後は、origin masterを省略してプッシュできる。

```
$ git push
```
※区切りの良い所で変更が完了した場合、こまめにローカルからリモートのリポジトリへプッシュするのが望ましい。
統計学入門9.2をPythonで解く試み

# 概要
統計学入門(東京大学出版会)の練習問題9.2をPythonにて解きます。
問題は以下の通り。

多数のねじが入っている箱から6本を取り出してその直径を精密に測定したところ,次のような結果を得た.
     1.22,1.24,1.25,1.19,1.17,1.18
標本平均Xと標本分散s^2を計算せよ.

#環境
前と同じでJupyter notebookによります。

#ソースコード
問題をそのままに解こうとするとサルでもできるので、「標本の個数によらず、複数個の標本を入力したとき、その標本平均と標本分散を計算する」プログラムをめざしました。

```ruby:code.rb
a=input().split(" ")
b=[float(i) for i in a]
c=float(sum(b))
d=int(len(b))
X=c/d
print("標本平均は",X)
A=map(lambda x: (x-X)**2,b)
B=[float(j) for j in A]
C=float(sum(B))
print("標本分散は",C/(d-1))
```


#結果
以下のような結果となりました。
![スクリーンショット (6).png](https://qiita-image-store.s3.amazonaws.com/0/297130/be69970f-bad1-340d-cee2-feee7b691721.png)

多分もっとスマートに組む余地があるので、何かあればご一報ください。

(四捨五入すればよかったかな)
IM920とArduinoを使って文字列を無線で送信する

#やること
インタープラン社の920MHz無線モジュール[IM920](https://www.interplan.co.jp/solution/wireless/im920.php)とArduinoを使ってArduinoより文字列を無線で送信する。

## ArduinoとIM920の接続
[インタープラン社のハードウェア説明書](https://www.interplan.co.jp/support/solution/IM315/manual/IM920_HW_manual.pdf)より以下の図のように配線を行う。
<img width="600" alt="スクリーンショット 2018-10-26 16.25.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/186901/fbee9dfb-10bf-c514-4b66-0d56365aaaed.png">
(https://www.interplan.co.jp/support/solution/IM315/manual/IM920_HW_manual.pdf より引用)

Arduino側のRXピンとIM920の7番ピン、Arduino側のTXピンとIM920の6番ピンを接続します。
IM920の17番・23番ピンをVCCに、18番・19番・24番ピンをGNDに接続します。
この接続により、ArduinoからソフトウェアシリアルにてIM920にコマンドを送信することにより、ペアリングした他のIM920へデータを送信することができます。

## Arduinoのコード
受信RXピンを8番、送信TXピンを9番に割り当てました。
[インタープラン社のソフトウェア説明書](https://www.interplan.co.jp/support/solution/IM315/manual/IM920_SW_manual.pdf)よりTXDAコマンドにて文字列の送信を行います。
以下のコードでは"12345"という文字列を送信し続けます。

```java:arduino.ino
#include <Wire.h>
#include <SPI.h>
#include <SoftwareSerial.h>

SoftwareSerial IM920Serial(8, 9); //受信 RX をピン 8、送信 TX をピン 9 に割り当てます

void setup()
{
    IM920Serial.begin(19200); //ソフトウェアシリアル開始。IM920 とは 19200 ボーを指定
    
    Serial.begin(19200);    
    Wire.begin();
}

void loop()
{
    String str = "";
    str += "TXDA ";
    str += encodeAscii("12345");
    
    Serial.println(str);
    IM920Serial.println(str);
      
    delay(500);
}

String encodeAscii(String str){
  String ascii = "";
  int j=0;
  bool _dot_flag = false;
  for(int i=0; i<str.length(); i++){
    if(str.charAt(i) == '.' || _dot_flag){
      j++;
      _dot_flag = true;
    }
    ascii += asciiElement(str.charAt(i));
    if(j > 1) break;
  }
  return ascii;  
}

String asciiElement(char c){
  String s;
  if(c == ',')  s = "2c";
  if(c == '.')  s = "2e";
  if(c == '0')  s = "30";
  if(c == '1')  s = "31";
  if(c == '2')  s = "32";
  if(c == '3')  s = "33";
  if(c == '4')  s = "34";
  if(c == '5')  s = "35";
  if(c == '6')  s = "36";
  if(c == '7')  s = "37";
  if(c == '8')  s = "38";
  if(c == '9')  s = "39";

  return s;
}
```

## 連続使用する際には

IM920で一定間隔で文字列を送信するIoT的な使い方をする際にはデータ送信しないときにArduinoをスリープモードにした方が良いです。特に、各種センサ(気温・光量など)のデータを取得して送信するといった際には電力消費が激しくなるのでスリープモードの利用をおすすめします。

スリープの参考: https://deviceplus.jp/hobby/entry_056/


## その他のコマンドについて

IM920の各種コマンドについて
"TXDA 12345"とすれば"12345"という文字列を発信できましたが、
[インタープラン社のソフトウェア説明書](https://www.interplan.co.jp/support/solution/IM315/manual/IM920_SW_manual.pdf)にはより多くのコマンドが記載されていますのでご確認ください。

Arduinoでなく、IM920のみをスリープさせたい際には、
DSRX(スリープ開始)、ENRX(スリープ停止)コマンドの利用が可能です。
あなたのterraform planを手軽に高速化する（かもしれない）魔法の言葉

terraformで管理しているリソースが増えてきて、tfstateが肥大化してくると、
terraform planがどんどん遅くなり、待ってる間にtwitterを見てしまい、、、あれ？結局何をしていたのか忘れる。あるあるです。

そんな場合の根本的な対策は、適度な粒度にtfstateを分割していくんですけど、tfstateをいじるのはできなくはないけど、ちょっとめんどくさいです。

が、もっと手軽に高速化できる（かもしれない）小手先のテクニックがあります。

その魔法の言葉とは `--parallelism` です。デフォルトは10並列で動いてますが、変更可能です。
呼び出すAPIやネットワーク構成などに依存するので、最適な値はケースバイケースですが、
一般的に扱うリソースが多い場合は、並列度を上げると高速化が期待できそうです。

まずは比較のために、素の状態の実行時間を計測しておきます。

```
$ time terraform plan

terraform plan  14.48s user 4.79s system 27% cpu 1:09.17 total
```

1分ぐらいかかってますね。並列度を30にあげてみると、

```
$ time terraform plan --parallelism=30

terraform plan --parallelism=30  13.82s user 4.10s system 57% cpu 30.962 total
```

なんと、30秒ぐらいで終わりました。たったこれだけで2倍高速化できました。わーい。

毎回指定するのはめんどくさいので、環境変数 `TF_CLI_ARGS_plan` に設定できます。

```
$ export TF_CLI_ARGS_plan="--parallelism=30"
$ time terraform plan

terraform plan  13.88s user 3.98s system 56% cpu 31.868 total
```

環境変数でも効いてますね。
applyの場合は、環境変数　`TF_CLI_ARGS_apply` です。

どれぐらいの並列度が最適なのかは場合によりけりなのだけど、めっちゃ簡単なので試してみて損はないですね。

たまたまTerraform のissueを眺めてたら見つけたんだけど、
別に魔法の言葉でもなんでもなくて、普通に公式ドキュメントに書いてありましたね。
普通にコマンドのヘルプにも出てるし、なんで今までこれ気づかなかったのか。

参考:
- https://github.com/hashicorp/terraform/issues/18974
- https://www.terraform.io/docs/commands/plan.html 
- https://www.terraform.io/docs/configuration/environment-variables.html#tf_cli_args-and-tf_cli_args_name
googleフォームの回答をgoogleスプレッドシートに書き出す

## googleフォームの回答をどっかに記録しておきたい。
googleフォームの回答結果をスプレッドシートとかで見れたらいいなと思っていました。
調べて見たら簡単に設定する方法があったのでメモを残しておきます。
※googleフォームでも回答結果は見れます。

## 設定
googleフォームを開きます。
上部に
<img width="810" alt="スクリーンショット 2018-10-26 16.23.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/163415/e414e4c4-121a-e4c1-b64a-1af27e8f1954.png">
このように質問、回答というタブがあるので回答タブを押します。(この回答タブを押せば回答結果が見れます。)
そうすると緑アイコンの横にある点が縦に並んだものが出てくるので
<img width="477" alt="スクリーンショット 2018-10-26 16.25.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/163415/463342b8-5bc9-47c9-469c-95078f32ca59.png">
押します。

そうすると回答先を選択という項目があるのでどちらか選択してください。

### 新しいスプレッドシートを作成
右の方に表示されるtextfieldにタイトルを入力し、
作成ボタンを押せば連携されたスプレッドシートが作成されます。
あとは回答が来たら回答結果がスプレッドシートに保存されていきます。

### 既存のスプレッドシートを作成
前もって作っていたシートなどがある場合はこちらを選択して
選択ボタンを押し、該当のスプレッドシートを選んでください。

## 終わり
以上で設定は完了です。
EthFund: A Crowdfunding DApp

こんにちは、JP です。This article will talk about a decentralized crowdfunding EthFund application.

#DApp

DApp aka Decentralized application has its backend code running on a decentralized peer-to-peer network.

https://ethereum.stackexchange.com/questions/383/what-is-a-dapp

#EthFundとは

EthFundはDAppです。これは分散型クラウドファンディングアプリです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/301449/322858b9-cfaf-e733-e2ed-d6012cee7ec8.png)


分散型クラウドファンディングアプリを作った理由は、ブロックチェーン技術をつかうことによって、仲介人をなくし、中間マージンを抑えられるからです。

#EthFundの作った理由とは

Kickstarterのようなものです。しかしながら、EthFundでは資金の単位は、暗号通貨の１つである、Etherを使って行われます。仲買人を介さず、転送はユーザー間で直接行われます。つまり、寄付はEthereumネットワークのスマートコントラクトを通じて移転されます。それゆえに、分散型クラウドファンデーションアプリと呼べます。

このシステムのユースケースを３つ紹介します。

まず一つ目は教育です。例えば、学生で何かしらのコンテストに出場したかったとします。しかし、参加費が高く参加を諦めようとしたときにEthFundをつかってお金を集めることができます。
二つめ、アート制作です。EthFundをつかって、例えば、ショートフィルムを作りたい人が資金を集めることができます。
三つめに、チャリティーにも使えます。例えば、がん患者への資金提供もできます。

#EthFundの仕組みは

EthFundの仕組みは、ユーザーはMetamaskを持つWebbrowserを使います。ユーザーはProjectをさくせいしたり、browseしたり、資金を送ったりすることができます。

Fund ProjectとStart Fundraisingオプションがあります。

##Start Fundraising

Start Raisefundingボタンをクリックすると、プロジェクトを作成できます。ここでプロジェクトの詳細を入力し、　Submit をクリックしてプロジェクトを作成します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/301449/1186f98f-670d-34c0-dcdb-d59f1b94212a.png)

##Fund Projects

Fund Projectボタンをクリックすると、資金を提供できるプロジェクトのリストが表示されます。プロジェクトをえらぶことができます。 プロジェクトの詳細を表示し、資金を送る金額を入力することができます。

金額に達すると、プロジェクトを作成した担当者のアドレスに自動的に転送されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/301449/a0566658-b705-9f3b-ba27-5cba69850adc.png)

Here is the Github repository to try EthFund: https://github.com/gwendanielle/crowdfundingDapps

ありがとうございました。
EthFund: A Crowdfunding Decentralized Application

![ethfund.PNG](https://qiita-image-store.s3.amazonaws.com/0/300937/732c02a8-7f49-9a26-7c4e-6e1192da20a9.png)

## 自己紹介
こんにちは私はグウェン([https://twitter.com/gwenskiesHere](https://twitter.com/gwenskiesHere))です。日本語学校の学生です。10月０２日、日本に来ました。

## About EthFund
"EthFund" is a crowdfunding decentralized application. EthFund uses ether for funding. The developers of EthFund created the project with the idea of where they can use blockchain. Users of EthFund need to have metamask account and installed in their web browser to be able to use the application. 

## Why the developers created EthFund
The developers want to create a crowdfunding application where users don`t have to wait long just to confirm their transaction and so that they can already get the funding for their project once its done or the goal amount is completed.

## 何をすることができる
Things user can do do when they use EthFund:
- Create a fund raising project
- Browse for a project to fund
- Fund a project

## Technologies used in EthFund
For the front-end of EthFund the developers used reactjs and python for the back-end. Solidity is used to create the smart contract and it was connected in the front-end using the web3.js.

## EthFund screenshots
#### Home page
![HomePage.PNG](https://qiita-image-store.s3.amazonaws.com/0/300937/9f100a52-ffb3-b7fa-318f-99582b768129.png)
This is the home page of EthFund, there are 2 options in the navigation bar, one is the "Start fundraising"and the other one is "Fund projects".

#### Start fundraising
![screencapture-localhost-8080-raisefund-2018-10-26-16_08_23.png](https://qiita-image-store.s3.amazonaws.com/0/300937/2bb6a695-6322-6acd-e452-c1b5f324e051.png)
In this screen, users who want to create a fund raising project can fill the details needed and submit. Users just need to confirm their transaction in Metamask to finish the transactions.

#### Funding project list
![screencapture-localhost-8080-fundlist-2018-10-26-16_14_30.png](https://qiita-image-store.s3.amazonaws.com/0/300937/8b15d781-3b3b-7a1c-14a1-48a74b981a14.png)
This is where all the fund raising projects were listed. Funders or investors can see minimal details about the project such as project status, how much the project needs in terms of eth and until when the project can be funded.

#### Funding project details
![screencapture-localhost-8080-fund-17-2018-10-26-16_18_00.png](https://qiita-image-store.s3.amazonaws.com/0/300937/3daba789-9778-4a8e-081a-98a1126ce721.png)
Here is where the funder or investors can see the full details of the project. They can also fund the project in this page using their ether.


Please check the application: [https://github.com/gwendanielle/crowdfundingDapps](https://github.com/gwendanielle/crowdfundingDapps)
EthFund：分散型クラウドファンディング

私たちはブロクチェーン技術について２週間の勉強していました。１０月２５日に、ブロクチェーン技術でアプリについてを発表しました。私たちが３日以内ぐらいで「EthFund」というクラウドファンディングアプリを作れるようになったのは自分でも驚きでした。

## 自己紹介
こんにちは、サム （[@sbenemerito](https://twitter.com/sbenemerito)） です。奥多摩の留学生です。日本語とブロクチェーン技術を勉強しています。２０１８年１０月に日本にフィリピンから来ました。

## ブロクチェーン技術とは

<div align="center"> <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRy_Qc8L7fG1PEPi-UR8cdH2k10Ux0wu4o7PzRMn5lQAo0iLfOXIA" "Ethereum Blockchain"> </div>

ブロックチェーンは多目的な技術です。ブロックチェーン技術を使ったら、データを改ざんして削除することができません。現在、様々な産業において多くのアプリケーションはブロックチェーン技術を応用できる可能性があります。有名な実装には[Bitcoin](https://www.bitcoin.jp/)と[Ethereum](https://www.ethereum.org/)があります。

ブロクチェーン技術は暗号通貨のためにも使っています。例えば、現在、「Ether」というEthereumの暗号通貨の価値は２２，５００円ぐらいです。

このリンクでブロクチェーン技術とEthereumについてをもっと読むことができます。
https://blockgeeks.com/guides/what-is-ethereum/

## EthFund (イースファンド)

![Screenshot from 2018-10-26 15-32-37.png](https://qiita-image-store.s3.amazonaws.com/0/300933/b2f911b9-5e7f-4f20-78ee-b7db0aad6ad7.png)

Ethfundは分散型クラウドファンディングアプリです。このシステムは何でもプロジェクトのために誰でもは資金を求めることとか施すことができます。JP ([@gwendanielle](https://github.com/jpsalvacion/)) とGwen ([@gwendanielle](https://github.com/gwendanielle/)) と一緒に 、このアプリを作りました。

### 使い方の例
![projectlist.gif](https://qiita-image-store.s3.amazonaws.com/0/300933/7061b970-aa38-d2ab-e242-42d31f14e8be.gif)
Fund projectsページでは、ぜんぶプロジェクトを見ることができます。1つのプロジェクトをクリックすると、そのプロジェクトの詳細を見ます。プロジェクトのページでは、そのプロジェクトのためにEtherをつかって資金を施すことができます。

![raise.gif](https://qiita-image-store.s3.amazonaws.com/0/300933/7bb7cfc1-5d7e-9778-cc7e-56e6e4d81c24.gif)
Start fundraisingページでは、プロジェクトを作成することができます。あとで、そのプロジェクトで資金を受けることができます。

### 作成することの理由
私たちがこの分散型クラウドファンディングアプリを作った理由は、ブロックチェーン技術をつかうことによって、仲介人をなくし、中間マージンを抑えられるからです。例えば、[Kickstarter](https://www.kickstarter.com/?lang=ja)では5%の手数料がかかり、チャレンジャーが獲得したお金からひかれてしまいます。

### アーキテクチャー
![stack.png](https://qiita-image-store.s3.amazonaws.com/0/300933/3d6f4559-04b1-db16-7d41-8ae67db97b64.png)
ブロクチェーン技術の他に、様々な技術は使いました。このシステムのフロントエンドは[ReactJS](https://reactjs.org/)を使って作られましたけど、スマートコントラクトにアクセスするために[Web3](https://web3js.readthedocs.io/en/1.0/)をつかいました。そして、そのスマートコントラクトは[Solidity](https://solidity.readthedocs.io/en/v0.4.25/)を使って作られました。REST APIバックエンドは[Python言語](https://www.python.org/)と[Djangoフレームワーク](http://djangoproject.jp/)を使って作られました。

#### 改善
現在のアーキテクチャでは、いくつかことを改善することができます。例えば、フロントエンドからスマートコントラクトにアクセスするの代わりに、Pythonバックエンドからスマートコントラクトにアクセスします。このシステムではたくさんことを改善することができると思いますけど、良いスタートです。

## 結論
このプロジェクトを作ることができましたから、満足と嬉しいしています。そして、楽しみにブロクチェーン技術でもっとアプリをつくります。ご清聴ありがとうございました！

[GitHub](https://github.com/gwendanielle/crowdfundingDapps)でこのシステムのコードを見ることができます。
googleフォームを自由にデザインするために。

## やりたかったこと
簡単なLPとか
パパッと何か作りたかったが、
php使ったり、railsで作ったり、wordpressで作ったりで
場合によってはオーバースペックになることもあるので
簡単に早く作れる方法を探していた。

## googleフォーム
今回見つけたのはgoogleフォームだ。
googleフォームって検索すれば一番上に出てくるやつ。
goggleのアカウント持ってれば誰でもすぐ簡単にフォームが作れちゃう。

## 実際に作ってみた

<img width="1399" alt="スクリーンショット 2018-10-26 15.43.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/163415/22824563-1702-7dd8-ea5b-ab8bbf8ad795.png">

見にくいかもしれないけどこんな感じ。
textfieldとかtextareaとかradioとかcheckboxとかだいたい作れる。

## いざ、埋め込み
これでパパッとフォームが作れた(約2分くらいで)ので自分の組んだhtmlに打ち込みたい。
調べてみるとgoogleフォームページの右上にある
<img width="282" alt="スクリーンショット 2018-10-26 15.46.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/163415/9adc7f17-762d-8a99-6575-b09f501584cc.png">
この送信ボタンを押すと
<img width="603" alt="スクリーンショット_2018-10-26_15_47_16.png" src="https://qiita-image-store.s3.amazonaws.com/0/163415/67f68825-f71b-36d0-f841-dcf07d96a061.png">
こんな感じの画面が出て<>を押すと埋め込む用にiframeタグが生成される。
これをコピーして自分の作成しているhtmlにコピペすればもう埋め込み完了です！

## デザイン
気になるのはデザインですね〜。
デザインはgoogleフォーム上で軽くできるみたいです。
<img width="56" alt="スクリーンショット 2018-10-26 15.52.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/163415/38d9fdfc-a9b1-65f9-058f-ad4263eadad1.png">
これまた、右上の方のパレットボタンを押すと横にメニューが出てきます。
ヘッダーの画像だったり、テーマの色味だったりをいい感じに設定できます。

## まだまだ！！
ということでgoogleフォームできたし、埋め込めたし、デザインも調整したし満足！
って方はこれ以降は読まなくて大丈夫です。
ここからはもっと自分のサイトに馴染むようにデザインしたいとか、
ここの余白1px増やしたいなーとかって思ってる方だけ見てください！

## 現状
現状だとiframeで埋め込んでいるのでcssとかいじれないですよね。。。
ということでiframeを外して特殊な方法で実装します！

まずformタグを作成します。

```.html
<form>
  <input type="text" name="">
  <div>
    <input type="radio" name="" value="">
    <input type="radio" name="" value="">
  </div>
</form>
```

こんな感じで。

## ページソースから取得
googleフォームに戻って
また右上の送信から今度は真ん中のクリップマークを押して見てください。
<img width="615" alt="スクリーンショット_2018-10-26_16_08_14.png" src="https://qiita-image-store.s3.amazonaws.com/0/163415/0459db0d-8589-d568-e33a-6e157437b13b.png">
そうするとフォームのURLが乗っています。

そのページにアクセスし、右クリックでページのソースを表示を選択すると
めっちゃ文字が出てくると思います。
そしたら、そのページで「form action="」と検索をかけてください。
macだったらコマンド+Fで。

そうするとform="がヒットするのでaction=""の中身を全部コピーして
先ほど作ったhtmlのformタグのactionにコピーした内容を貼り付けてください。

またページソースに戻ります。
textfield,radioボタンのinputタグのname属性を探したいのですが
ここは割愛させてください。。
input name="entry.34234" みたいなのが設定されてるはずなので
name属性の中身をコピーして先ほど作成したinputタグに貼り付けてください。

textfieldに関してはname属性をコピペして終わりですが、
radioボタン、checkboxボタンに関しては
valueの値をgoogleフォームで設定した値と合わせないとうまく回答が反映されないみたいです。

## 終わり
ということで簡単なフォームが作れました！
あとは自分の好きなようにデザインしていただければと思います！
最後駆け足になってしまいましたが、以上です。

## おまけ
デザインとは関係ないですが、実はgoogleフォームをスプレッドシートと連携させることができるみたいです↓↓
https://qiita.com/w-tdon/items/15874f01d75599f8d8e3
Amazon Lex + Slack

Amazon LexとSlackの連携方法について。
目的はAmazon LexとSlackを連携させることなため、チャットボットは事前に準備されているサンプルを利用します。

## チャットボットを作成

### Amazon Lex
事前に準備されている `BookTrip` を利用
※COPPA : Children’s Online Privacy Protection Act（児童オンラインプライバシー保護法）
![lex_01.png](https://qiita-image-store.s3.amazonaws.com/0/297616/fe017e55-dec2-39b4-622f-322eee0096b4.png)
`Build` > `Test Chartbot` で動作確認はすぐに行えます。
ちなみに BookCar はレンタカーの予約を行うチャットボットになります。
![lex_02.png](https://qiita-image-store.s3.amazonaws.com/0/297616/796d4e9e-a9e1-033c-1fc0-dec9df5f4f70.png)
![lex_03.png](https://qiita-image-store.s3.amazonaws.com/0/297616/ad0932b9-5d7a-56c2-7fe1-d6aa2e853ebe.png)
動作確認を終えたら、チャットボットを公開し、Slackと連携させる準備をします。
![lex_04.png](https://qiita-image-store.s3.amazonaws.com/0/297616/3480d865-a387-39b0-bac7-e8b05542f27d.png)
## Slackと連携

### Slack API
![lex_05.png](https://qiita-image-store.s3.amazonaws.com/0/297616/85a58143-3fc1-6366-a4f2-978a15f83c52.png)

- アプリケーション名とワークスペースを選択し、`Create App`

**Bot Users**
![lex_06.png](https://qiita-image-store.s3.amazonaws.com/0/297616/71b967c5-bb22-5b14-c607-0cdacb77454d.png)

**Interactive Components**
![lex_07.png](https://qiita-image-store.s3.amazonaws.com/0/297616/b5c12379-6a80-fe85-3765-974b4e8d4eab.png)

**Amazon Lex**
![lex_08.png](https://qiita-image-store.s3.amazonaws.com/0/297616/45fea7d5-b550-dfc3-97ab-75a403768cab.png)

- Slack APIで発行された、Client ID、Client Secret、Varification TokenをLexの設定画面に入力
- Lexで `Activate` 後に発行される Postback URLをSlack APIの Event Subscriptionsと、Interactive Componentsに登録
- OAuth URLをSlack APIのOAuth & Permissionsに登録

**Manage Distribution**
![lex_09.png](https://qiita-image-store.s3.amazonaws.com/0/297616/bbd3e393-80de-334f-1c72-c36b077d82f2.png)

- Slackとの連携を認証し完了

### Slack
Slackとの連携が完了したので、動作確認時に行ったやり取りを、Slackを介して実施してみます。
![lex_10.png](https://qiita-image-store.s3.amazonaws.com/0/297616/6032df93-d7a5-d2be-7456-92b14c522af4.png)

ただ Amazon Lex は検証時点では日本語未対応。残念。
GSP の PQGSA PQGSV って何？

# SONY SO-01J で、ＧＰＳ信号受信の検証していると、PQGSV からの信号を沢山受信している。

BeiDou(B1,B2,B3)

[北斗衛星導航系統](https://ja.wikipedia.org/wiki/%E5%8C%97%E6%96%97%E8%A1%9B%E6%98%9F%E5%B0%8E%E8%88%AA%E7%B3%BB%E7%B5%B1)　中国の衛星の情報でした。

# ひとまず、メモ！！
シェーダを利用してUnityで影の色を変える

#はじめに
Unityで色つきの影が必要になり，シェーダを使って影の色を変えてみた．

※シェーダ始めたばかりですので間違いなどはご容赦ください．

#環境
- Unity 2017.4.3f1

#準備
UnityのProjectで新しいシェーダを追加する．
[Create]→[Shader]→[Standard Surface Shader]

名前は"ColoredShadow"にしておきます．これを右クリックし，同じ名前でマテリアルも作成しておきましょう．
[Create]→[Material]

では，作成したシェーダファイルをエディタで開き，書き込んでいきましょう．

#コーディング
```ColoredShadow.shader
Shader "Example/ColoredShadow" {

	Properties{
		_MainTex("Texture", 2D) = "white" {}
		_ShadowColor("ShadowColor", Color) = (0,0,1,1)

	}

	SubShader{
		Tags { "RenderType" = "Opaque" }

		CGPROGRAM
		#pragma surface surf SimpleLambert
		sampler2D _MainTex;
		half4 _ShadowColor;
		
		struct Input {
			float2 uv_MainTex; // uv座標
		};

		void surf(Input IN, inout SurfaceOutput o) {
			o.Albedo = tex2D(_MainTex, IN.uv_MainTex); //テクスチャ貼り付け

		}
		
		// SimpleLambertの設定 lightDir:光方向 atten:影のパラメータ
		half4 LightingSimpleLambert(SurfaceOutput s, half3 lightDir, half atten) {

			half NdotL = dot(s.Normal, lightDir); //ライティング計算（表面法線と光方向の内積）
			half4 c;

			c.rgb = s.Albedo * _LightColor0.rgb * (NdotL * min((atten + _ShadowColor.rgb), 1) * 1.5); //影に色を付ける
			c.a = s.Alpha;

			return c;
		}
		ENDCG
	}
	Fallback "Diffuse"
}
```

#手順
つぎに，Unityで最初に作成したマテリアルに上記のコードを記入したシェーダを適用します．
そして，影がつくオブジェクト（床や壁など）にマテリアルを適用します．

すると影に色が付きます．影の色もシェーダのプロパティで設定可能です．
![ColoredShadow.gif](https://qiita-image-store.s3.amazonaws.com/0/257442/e5aabc10-d644-3180-40dd-048cc3fbe470.gif)
jQueryで特定classのidや要素を全部取り出す

# jQueryで特定classのidをeachとattrで全部取り出す。

とりあえずclassを目印につけておいて後で処理するとかで使いました。

```js
$('#click').click(function() {

   // selectクラスの付いたidを全部とりだす。
   $('.select').each(function() {
       var id = $(this).attr('id');
       console.log(id);
   })
}
```
テスト環境で非同期処理を同期処理にしたい場合のActiveJobの設定

ジョブのテストを実行する際、ジョブの結果もテストしたい場合、下記のようなコードにできる。

```
if Rails.env.test?
  HogeJob.perform_now(params)
else
  HogeJob.perform_later(params)
end
```

全てのコードで条件分岐させるのは、冗長である。
下記のように、設定することで環境ごとに同期処理にすることができる。

```config/environments/test.rb

Rails.application.config.active_job.queue_adapter = :inline
```

## 参考
[RSpec でキューイングした ActiveJob を同期実行する - Qiita](https://qiita.com/upinetree/items/41a2a8fe9e1dd7c291ab)
WebViewダイアログの高さをコンテンツのサイズで自動調整する

# やりたいこと

・web上のコンテンツをダイアログで表示
・ダイアログ幅は画面幅の90%
・ダイアログ高さはコンテンツサイズで可変にする

# やる

1. ダイアログの幅を固定
2. WebViewの読み込みが終わった時点でダイアログの高さを算出して変更

## ソース

```Java:WebViewDialogFragment.java

public class WebViewDialogFragment extends DialogFragment {

	// 無関係なものは省略

	@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        binding = DialogWebViewBinding.inflate(inflater, container, false);

		String url = "https://hogehoge";

		binding.webview.setWebViewClient(new WebViewClient(){
			@Override
			public void onPageFinished(WebView view , String url){
				// コンテンツサイズによりダイアログ高さ変更
				Dialog dialog = getDialog();
				WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();

				// dp→px変換
				DisplayMetrics metrics = getResources().getDisplayMetrics();
				lp.height = (int)(view.getContentHeight() * metrics.scaledDensity);

				dialog.getWindow().setAttributes(lp);
			}
		});
		binding.webview.loadUrl(url);

        return binding.getRoot();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        // 開始時点では幅のみ固定する
        Dialog dialog = getDialog();
        WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();

        DisplayMetrics metrics = getResources().getDisplayMetrics();
		float scale = 0.9f;
        lp.width = (int)(metrics.widthPixels * scale);
		// 高さ0にしてダイアログを一旦非表示
        lp.height = 0;

        dialog.getWindow().setAttributes(lp);
    }
}

```

## ポイント

### ダイアログのサイズ変更について

`onCreateDialog` `onCreateView` で `dialog.getWindow().setAttributes(lp);` しても効かない。
`onActivityCreated` のオーバーライドで対応する必要がある。

参考：[Y.A.M の 雑記帳: Android　DialogFragment では Dialog のサイズ指定は onActivityCreated でやれ](http://y-anz-m.blogspot.com/2012/06/androiddialogfragment-dialog.html)

### コンテンツの高さについて

`WebView.getContentHeight()` でコンテンツの高さが取れるが、単位はdp。
`DisplayMetrics.scaledDensity`を乗じてpxに変換してから設定する。
[Docker]TensorFlowをJupyter Notebook上で使用できる環境を10分で構築[Mac]

# 概要
MacでJupyter Notebook上でTensorFlowを使用できるDocker環境を構築する。

# 開発環境
[マシン]
macOS High Sierra バージョン10.13.6
MacBook Pro (15-inch, 2018)
CPU:2.2 GHz Intel Core i7
メモリ:16 GB 2400 MHz DDR4

[ツール]
Docker version 18.06.1-ce, build e68fc7a
Jupyter Notebook 4.4.0


# Jupyter Notebook上でTensorFlowを使用して開発できるDocker環境を構築

#### Dockerイメージをプル（Python3の最新安定板を使用する場合）
その他のイメージを使用する場合はこちら：https://www.tensorflow.org/install/docker?hl=ja

```
$ docker pull tensorflow/tensorflow:latest-gpu-py3
```

#### Dockerコンテナを作成＆実行

```
$ docker run --runtime=nvidia -it --name TestContainerName -p 8888:8888 -v /Users/kani/Projects/vegetation_map/tensorflow:/tmp tensorflow/tensorflow:latest-gpu-py3 bash
```

#### Jupyter Notebookを起動

```
# jupyter notebook --allow-root
```

表示された下記の文字列をコピーして…

```
http://(*** or 127.0.0.1):8888/?token=***
```

ブラウザのアドレスバーに下記のように編集してペースト

```
http://127.0.0.1:8888/?token=***
```

これでいけるはず。
因みに、このイメージのJupyter NotebookのHomeディレクトリは、`jupyter notebook --allow-root`を実行したディレクトリになる模様。jupyter_notebook_config.pyの`notebook_dir`とどちらが優先されるかは未確認。

# 注意

##### 1. 以下実行して設定ファイルを上書きしてしまうとエラーとなるため注意。

```
# jupyter notebook --generate-config
```

エラー内容

```
OSError: [Errno 99] Cannot assign requested address
```

##### 2. デフォルトでvimが入っていないため、Jupyter Notebook起動前に設定ファイルを編集したい場合は以下を実行してvimをインストールすること。

```
# apt-get update
# apt-get install vim
```

vimで設定ファイルを編集。

```
# vim /root/.jupyter/jupyter_notebook_config.py
```
Access2013でのVBAエラーメモ

表示＞フォームビューとしたら

イベント プロパティに指定した式 開く時 でエラーが発生しました プロシージャーの宣言が、イベントまたはプロシージャーの定義と一致していません。

とのエラーが出たのですが
解決方法は
```
そのフォームのコードはこれだけでしょうか？
コードをすべて入れなおすしかないです。

そのフォームの全イベントコードをメモ帳に退避し、
そのフォームの全イベントコードを一旦すべて削除して
フォームを上書きします。
（この時点でイベントコードは何もない）


その後、１つずつイベントコードを各コントロールの
イベントから作成し、中身はメモ帳から貼り付けて再現します。

これでもエラーが再現するなら、フォーム自体を一旦削除し、
再作成するしかありません。
```
と
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11160855306
にあったので

バックアップからイチから作り直しました……
(+_+)
Laravel5.7 + Telescope（Config編）

Laravel5.7 + Telescope を検証してます。
少し使ってみたところ、データベースへの書き込みが発生するため、開発環境にしても実行速度が遅くなります。

使用しない機能はon/offできないのかなと思って設定できる項目を調べてみました。

## 概要

[laravel/telescope](https://github.com/laravel/telescope)はLaravel用のデバッグ支援ツールです。
Telescope(テレスコープ)は望遠鏡という意味らしいです😇
Requests, Commands, Schedule, Jobs, Exceptions, Logs, Dumps, Queries, Models, Events, Mail, Notifications, Cache, Redis等、実行ログを監視します。
Telescopeを導入するとデバッグコードを仕込むことなく、対象の情報について洞察できます。
Laravelのローカル開発環境でのデバッグがとても楽なものになります。

## シリーズ記事

- [Laravel5.7 + Telescope（Install編）](https://qiita.com/ucan-lab/items/f5e17db289a06d610525)
- Laravel5.7 + Telescope（Config編）

## Laravel バージョン

5.7.11

## Telescope バージョン

```shell-session
$ composer show laravel/telescope | grep version
versions : * v0.1.2
```

## .env

```
# ドライバの指定
TELESCOPE_DRIVER=database
# データベースコネクションの指定
DB_CONNECTION=mysql

# 指定件数までログを残す
TELESCOPE_LIMIT=100 # null の場合は削除されない

# 監視の有効/無効の切り替え
TELESCOPE_CACHE_WATCHER=true
TELESCOPE_COMMAND_WATCHER=true
TELESCOPE_DUMP_WATCHER=true
TELESCOPE_EVENT_WATCHER=true
TELESCOPE_EXCEPTION_WATCHER=true
TELESCOPE_JOB_WATCHER=true
TELESCOPE_LOG_WATCHER=true
TELESCOPE_MAIL_WATCHER=true
TELESCOPE_MODEL_WATCHER=true
TELESCOPE_NOTIFICATION_WATCHER=true
TELESCOPE_QUERY_WATCHER=true
TELESCOPE_REDIS_WATCHER=true
TELESCOPE_REQUEST_WATCHER=true
TELESCOPE_SCHEDULE_WATCHER=true
```

ドライバの指定ができるみたいですが、現在は `database` ドライバのみのようです。

監視対象ごとに有効/無効の切り替えができます。

設定ファイルのひな形
https://github.com/laravel/telescope/blob/master/config/telescope.php
JavaScriptで数字のみ取り出す

#JavaScriptで正規表現を使って数字だけ取り出す。

```js
const data = 'hoge123';
const res = data.replace(/[^0-9]/g, '');

console.log(res); // 123
```

> g　 すべての一致に対して置換を実施。

gが大事みたいっす。

参考
http://mypaceprogram.blogspot.com/2017/11/javascript.html
エクセルVBAで特定列の先頭文字列を削除する

自分用メモ。
ブラウザから表をコピーしてエクセルに貼り付け　→　C列に記載される文字列の頭にNo.xxxとつくのでそれをVBAで削除

プログラミングに自信はないので、細かい話は知りません。

#環境
OS:Win7　
Excel 2010

#引用元
忘れた。


#ソース


```vb:del_num.vbs
Sub del_num()

 Dim ws As Worksheet
 Dim lastRow1 As Long
 Dim r As Long

 Set ws = Sheets("sheet1")

 Dim reg As Object

 Set reg = CreateObject("VBScript.RegExp")

 '行数カウント
 'C列を下から上に向けてカウント
 lastRow = ws.Range("C" & Rows.Count).End(xlUp).Row

 '置換文字パターン
 With reg
   .Pattern = "^No.[0-9]*:"　 '正規表現でパターンを指定
   .IgnoreCase = False  '大文字小文字の区別をしない
   .Global = True  '文字列全体に検索を適用
 End With

 '行頭のナンバーを置換で削除する
 'C列の最下行から10行目までループで文字列を置換
 For r = lastRow To 10 Step -1
   If ws.Range("C" & r).Value > 0 Then
     str1 = ws.Range("C" & r).Value
     If str1 Like "No.*" Then
       ws.Range("C" & r).Value = reg.Replace(str1, "")
     End If
   End If
 Next

 r = 0

End Sub
```
今はsolidityをCentOS7でコンパイルしようと思ってはいけない

# solidityを使いたい(on CentOS)
v0.4.25の話です。のちに改善されるようです。
## solidityをソースから入れようと思った
チュートリアル通りにやってみる

```bash:外部ツールをインストール(要root権限)
./scripts/install_deps.sh
```
まず最初に、これではCentOSであることを認識してくれない。。
中のシェルスクリプトを読み、CentOSであることを直接伝えてあげるとようやくyumが動いた。
ただ、CentOS7では一部がインストールされない。

ただ、無視して次に進んでみる。

```bash:外部ツールをインストール(要root権限)
./scripts/build.sh
```
これだと、buildでエラーが出る。
解決できたのは以下の点
https://github.com/ethereum/solidity/pull/4473/files
これは0.4.25時点でのバグなので、これを最新に直した(リリース前に分かってる明らかなバグなんだから、リリースで直そうぜとは思いつつ)
あといくつかのソース直したけど、ちょっと覚えてないのと、本題とは関係ないので割愛。

その上でも動かない。なぜか..と思っていたらこんな記述があった

```bash:./scripts/install_deps.sh
353 # CentOS needs some more testing. This is the general idea of packages
354 # needed, but some tweaking/improvements can definitely happen
```
と言うわけで、現状はsolidityをCentOSでコンパイルすることはできません！

## 結論
何が言いたいって、未だsolidityは全プラットフォームで快適にバグなく動くような状況ではないよっていことです。身に沁みた。

## ちなみに
dockerでalpineを使えば何もしなくても0.4.25をコンパイルできました。

## 2018/12/09 追記
自分で書いた記事のこと忘れてCentOS7でコンパイルしようとしたところ、

```bash:シェル上のエラー
ERROR - Unsupported or unidentified Linux distro.
```
上記が出た。分かりやすくなってgoodですね。
0.5.1で検証しました。
jQueryでクリックした要素にclassを与えたり削除したり

# jQueryでclickした要素にclassを与えたり削除したり

ちょっとメモ書きに置いときます。

```js 
$('.day').on('click', function() {
    // クラスがあるか確認
    var selected = $(this).hasClass('selected');

    if (selected) {
        //クラス削除
        $(this).removeClass('selected');
    }
    else {
        // クラス追加
        $(this).addClass('selected');
    }
 });
```

## toggleClassの方が楽だった

コメントで頂いた内容を試したら圧倒的に楽だった。

```js 
$('.day').on('click', function() {
    // 追加したり削除したり
    $(this).toggleClass('selected');
 });
```
【PHP】リクエストでCSVファイルを受け取った場合にファイル名を取得する方法

#　はじめに
個人的メモ
でも結構手こずったし最終的には英語の文献に頼ったため日本語で残しておく

# 取得するもの
割り当てられたファイル名ではなく、ユーザーがアップロードするCSVに自分でつけたファイル名。
20181026売り上げ.csvみたいなやつ

# 方法

```php5

$csvFileName = $request->file('csv_file')->getClientOriginalName();//これで取れる

$csvFileName = $request->file('csv_file')->getFileName();//これと間違えがち
```

`getClientOriginalName`で取れる！！
[Chromeヘッドレスブラウザ活用] セキュリティ解析ツール | Webアクセス先の可視化/調査GUI

##概要

この記事では、私の作成したWebリソースのアクセス状況の可視化/分析ツール（beta版）を紹介します。

私はこのツールをサイバーセキュリティの調査の用途を念頭に置いて、開発しました。その他、プライバシーポリシーの順守状況の調査など、顧客情報にまつわるコンプライアンス状況の調査にも利用を想定しています。

このGUIツールは、あるページ（ランディングページなど）にアクセスした際に付随してアクセスが発生するインターネット上のリソースを「グラフ図」として可視化すると同時に、クリックしたリソースの詳細情報を調査確認する機能を備えています。

[**Adso | Web Access Analyzer**](https://github.com/YohKmb/adso)


##動作イメージ

更改しているGithub上のデモ動画は、以下の通り。

![adso-demo.gif](https://qiita-image-store.s3.amazonaws.com/0/42848/e8645d6c-0671-fb8d-4614-d76538e30a45.gif)


Wikipediaの「横浜中華街」にアクサスした際、付随してアクセスが生じる画像やJavascriptなどの要求/応答関係をグラフとして可視化しています。

また、特定のリソースのアイコンをクリックすると、そのリソースの詳細情報やアクセス発生原因が表示される様子を示しています。


###Chrome Devtoolの活用

このプログラムは大きく、以下の2つのコンポーネントで構成されています。

1. フロントエンドのWeb GUI (mainapp.js)
2. Chromeヘッドレスブラウザを実行するバックエンドのプログラム (cdpclient.js)

---- 

（1）のユーザ・インタフェイスから検査対象のURLや、グラフ上のアイコンのクリックなどのイベント情報をWebsocketで（2）のバックエンドプロセスに引き渡し、Chromeヘッドレスブラウザの操作や情報収集を行っています。

----

（2）では、指定されたURLのブラウジングの実行と、そのブラウジング状態の情報収集を行います。

具体的にはリクエストやレスポンス到達のイベントをトリガーに、アクセス先のリソースの情報やアクセスの原因（メディアへのリンクや、jsの実行ステートメント）に関する情報を収集しています。

上記で収集した情報を、リソース別に管理し、クリックされたアイコンに対応するリソースの情報をGUI上のテーブルに表示する仕様となっています。

----

Chrome DevtoolでChromeのブラウザをスクリプトで利用する際の規約は以下を参照してください。

https://chromedevtools.github.io/devtools-protocol/1-2

また、本ツールで利用したNodejs向けの3rdパーティー製のDevtoolライブラリはchrome-remote-interfaceというもので、以下で公開されています。

https://github.com/cyrus-and/chrome-remote-interface

###今後の開発

機能としては、以下のものを追加して、実用的なツールとしたい。

- 特定の文字列やMIMEタイプを指定したリソースのフィルタリング/ハイライト
- ドメイン階層別のリソースのツリー閲覧機能

その他、リファクタリングしつつ、知名度を上げる施策を検討していく。
何故IT業界はトイレにIoTを導入したがるのか

# 前書き

こんにちは、あの記事の人です！

あの記事: [オブジェクト指向が5000%理解できる記事](https://qiita.com/gorillab/items/b2f8e39d7cc23ad505f9)

IT業界にはIoTトイレというものが存在します。簡単に言えばトイレの空室状況や滞在時間が確認できるシステムです。IT業界の男子トイレは埋まっていることが多く、よく従業員から不満が出るのです。

さてこのIoTトイレ、私が知るだけでも10社が独自開発をしています。特に従業員が業務の空き時間を活用して会社の問題点を改善できる仕組みがあるところでは、IoTトイレが発明されやすいようです。

さて、本題。

**何故IT業界はトイレにIoTを導入したがるのか**

IoTトイレを発明(それも車輪の再発明を)してしまう状況にはIT企業としての問題点が隠れています。今回はこれを解説していきたいと思います。

# 現場課題

現場とはトイレです。IT企業の普通のトイレを使う人達はどんな課題を抱えているのでしょうか。

- トイレユーザーにとっての課題
    - トイレが空いていないことが多いのでストレスになる
    - 空いてるトイレを探して練り歩く必要があるため業務効率が低下する
- 経営者にとっての課題
    - 滞在時間が長すぎる(サボっている)従業員がいて生産性が低下している

IoTトイレはこれらの課題を解決するために生まれたものです。しかし、IoTトイレは本当にこれらの有効なソリューションなのでしょうか。考えてみましょう。

# IoTトイレは有効か

### トイレが空いていないことが多いのでストレスになる・空いてるトイレを探して練り歩く必要があるため業務効率が低下する

これらに関しては、空室状況が見れたり予約ができたりすればある程度解決できるのかも知れませんね。でも、そもそも従業員が100人いてトイレが3つとかだと、予約がいっぱいになるなんてこともあるでしょう。更には、予約がいっぱいになることを恐れて、トイレを仮押さえする人が出てくる可能性もあります。トイレに行きたい気持ちはスケジューリングできないので、いくらこういった機能があっても根本的には何も解決していないのです。

### 滞在時間が長すぎる(サボっている)従業員がいて生産性が低下している

これに関しては、IoTトイレでは何もできません。多分、長時間トイレに滞在している人がいることは分かるようになると思うのですが、それが誰であるかを特定したり、長時間滞在が体調不良なのかサボりなのかを外から判断したりするのは、プライバシーの侵害です。せいぜい張り紙をする程度の対応しかできないので、やっぱり根本的には何も解決していないでしょう。


# 本質的なソリューションのアイデア

コンサルの有名な話で「ホームセンターにドリルを買いに来る人はドリルではなく穴が欲しいのだ」なんてのがありますが、IoTトイレについては「穴が欲しい人が掘れないドリルを自作」している状況です。どのように解決するべきでしょうか。

### トイレを増やす

真正面から課題を解決しにいきます。そもそも需要に対して供給が足りていないのですから。「そんなスペースはない！」「そんな費用はない！」なんて目先のことばかり考えていては話になりません。トイレのために損失が発生しているのですから。

### 従業員を減らす

逆転の発想です。リモートワークやサテライトオフィスなどを導入してトイレあたりの従業員数を削減しましょう。

### モチベを上げる

トイレでサボっている人は別にそこにトイレがあるからサボっているわけではないんですね。登山家ではないので。退屈な仕事そのものが悪いのです。モチベーション管理の仕組みを組織として導入し、仕事の質を上げることでトイレ問題を解決しましょう。トイレは悪くないのです。

課題に対するソリューションは必ずしもITであるとは限りません。IT屋だからといって何でもかんでもITで解決しようとするのはやめましょう。

# 後書き・いつまでプロダクトアウトなのか

結論。IT業界がトイレにIoTを導入したがる理由は、トイレ問題が切実である一方でIT以外のソリューションが見えていないからです。そしてこれこそがIT企業が抱える問題なのです。

それは、つまるところ**プロダクトアウトで**あるということです。プロダクトアウトというのは企業が自社のリソースを活用して製品やサービスを作ることです。IT企業であれば当然ITの観点からどんな製品やサービスを作るか考ますね。

しかし、前述の通り課題のベストな解決策はITであるとは限らないのです。とくに厄介なのが想定ユーザーが開発者であるITエンジニア自身なので、ついつい良いアイデアであると思い込んでしまうという点です。

これからの時代、課題を発見したら、最適なソリューションを発見するために想定ユーザーにインタビューを繰り返すといった**マーケットイン**の発想がない会社は苦しくなっていくでしょう。

IoTトイレを発明**してしまった**企業・方は、是非マーケットインの考え方を身に着けてみてください。

書籍を紹介するとすれば、スタートアップマニュアルという事業立ち上げの有名な教科書がありますので、こちらを参考にされると良いかと思います！


[![41Coz+QOj1L._SX353_BO1,204,203,200_.jpg](https://qiita-image-store.s3.amazonaws.com/0/169376/0b2154af-63a6-b62c-cde7-a14d5c3835e6.jpeg)](https://amzn.to/2yyV3qb)
HTMLとCSSのみで「続きを見る」のボックスを作る

#動的画面で何個でも作れる「続きを見る」BOX
idとforを使わないので、追加作業も楽々。
(基本「続きを見る」BOXは1ページに1つだけれども、id気にしなくていいのは楽なのではと思いメモ)

**完成イメージ**
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/306944/0e4ac635-07d6-ca9a-7050-74cc5f949349.png)

```HTML
<section class="etc_box">
    <input type="radio">
    <div>
      ここに省略したい文字やHTML等を記入
    </div>
</section>
```
```CSS
/*box全体*/
.etc_box{
  position: relative;
  width: 400px;/*中身の幅に合わせたい場合は記述不要*/
  max-width: 100%;
  margin: 0 auto 35px auto;
  display: table;
}
/*文章部分(背景・線)*/
.etc_box>div{
  width: 100%;
  border: 1px solid rgb(163, 163, 163);
  padding: 20px;
  background: rgb(243, 251, 251);
  border-radius: 5px;
  z-index: 0;
  box-sizing: border-box;
}
/*文章部分(背景・線)*/
.etc_box>div{
  height: 80px;
  overflow: hidden;
}
/*白いもや*/
.etc_box>div:after{
    content: "";
    display: block;
    width: calc(100% - 2px);/*両端の枠線にかからないようにしている*/
    height: calc(100% - 1px);/*下の枠線にかからないようにしている(上側はtransparent(透明色)なので線の配慮不要)*/
    position: absolute;
    top: 0;
    left: 0;
    z-index: 1;
    margin-left: 1px;/*左枠線1px分ずらしている*/
    border-radius: 5px;
    background: linear-gradient(transparent 40%,rgba(255, 255, 255, 0.8));
}
/*目に見えないラジオボタン(動作に必要)*/
.etc_box>input[type="radio"]{
  position: absolute;
  width: 200px;
  height: 30px;
  margin:0 auto;
  z-index: 1;
  bottom: -35px;
  left: 50%;
  transform: translateX(-50%);
}
/*ラジオボタン表面*/
.etc_box>input[type="radio"]:before{
  content: "続きを見る";
  display: block;
  width: 200px;
  height: 30px;
  line-height: 30px;
  position: absolute;
  top:0;
  left: 0;
  cursor: pointer;
  border: 1px solid rgb(120, 150, 150);
  text-align: center;
  border-radius: 5px;
  background: rgb(128, 167, 197);
  color: white;
  font-weight: bold;
  box-sizing: border-box;
}
/*ボタンはクリックした後に非表示*/
.etc_box>input[type="radio"]:checked,
.etc_box>input[type="radio"]:checked~div:after{
  display: none;
}
/*非表示部分の高さ制限を解除*/
.etc_box>input[type="radio"]:checked~div{
  height: auto;
  position: relative;
  margin-bottom: 0;
}
```

以上
Oracle Database 18c XEの簡易セットアップ


Oracle Database 18c Express Edition (XE)がリリースされました。

[Oracle Database Express Edition](https://www.oracle.com/database/technologies/appdev/xe.html)

XEの概要は@nakaieさんの[Oracle Database 18c Express Editionの紹介 - Qiita](https://qiita.com/nakaie/items/2e383d4916530dce6a4f)を読んでいただくとして、手元のPC上のVirtualBoxでサクッとセットアップする手順を自動化したので公開します。

* [shakiyam/vagrant-oracle-database-xe-18c: Vagrant + Oracle Linux 7 + Oracle Database 18c XE の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle-database-xe-18c)

![localhost_5500_em_shell.png](https://qiita-image-store.s3.amazonaws.com/0/174/1151708e-e497-ad33-c3dd-a00d91b52657.png)

それ以外のバージョンの手順も下記にて公開しています。

* [shakiyam/vagrant-oracle18: Vagrant + Oracle Linux 7 + Oracle Database 18c (18.3.0) シングル環境の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle18)
* [shakiyam/vagrant-oracle12.2: Vagrant + Oracle Linux 7 + Oracle Database 12c Release 2 (12.2.0.1) シングル環境の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle12.2)
* [shakiyam/vagrant-oracle12.1: Vagrant + Oracle Linux 7 + Oracle Database 12c Release 1 (12.1.0.2) Enterprise Editionシングル環境の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle12.1)
* [shakiyam/vagrant-oracle11.2: Vagrant + Oracle Linux 7.4 + Oracle Database 11g Release 2 (11.2.0.1) Enterprise Editionシングル環境の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle11.2)