OmniAICreator/Qiita-1.07M huggingface dataset:
[Unity] パフォーマンスと静的コライダーについて ～そして沈まない動的コライダー～  


公式チュートリアル[玉転がし](https://youtu.be/XtR29MmzuT0?t=794) 13:14 より。
2回見ても何言ってんのかさっぱりだったので、自分なりに噛み砕きました。
(英字幕で見たほうが理解しやすかったです) ~~日本語字幕ルー大柴過ぎて意味不~~

## 静的コライダーを動かす度、シーン全体の静的コライダーが再計算される様です  

Q:コライダーとは？
A:衝突判定してる枠。

Unityでは2種類のコライダーがあります。
1. 静的コライダー`static Collider`  
2. 動的コライダー`dynamic Collider`

静的コライダーは、Unityでは_動かないもの_と定義されています。
動かないので、ゲームが開始して時間が進んでも、_フレーム毎に再計算する必要がない_ですよね？
だからUnityは__始めに__シーン内領域にある_静的コライダーの全てを計算して、キャッシュに保存_します。

では、__静的コライダーを`transform`で回転、移動させてる場合どうなる__と思います？
見出しの通りです。

重要なのは`transform`させてる静的コライダー1個ではなく、__全体が再計算され静的コライダーのキャッシュが更新されている__事です。

パフォーマンスはひどく悪いように見えますでしょ？
実際、~~オブジェクトが多いと~~最悪です

どこかの記事で、
> 仕様：静的コライダー ← 動かしてはならない

とだけ書かれてあって、読んでも「( ﾟДﾟ)は?」だったのを覚えてる。
多分こういう事を言ってるんだと思う。


##じゃぁどうすんの？  

何が？って感じだけど、とりあえずみんな思うよね
そして考えるのが「動的コライダーにすれば(とりあえず)ええやん？」ですよね？

(多分)正解！

動画の説明を裏読みをすれば、動的コライダーならば全体ではなく、個別に再計算してるので、パフォーマンスがいいはず。  


##ではUnityでの動的コライダーの要件とは？  

>1. コライダー
2. Rigidbody
この2つを持つゲームオブジェクトを全て動的とみなされます。  

つまり、__今動かしてるコライダーがあったら、それに`Rigidbody`を追加してあげれば、とりあえずパフォーマンスが上がる__はずです。  


## そして地獄を見る  
見たほうが早い。[玉転がし](https://youtu.be/XtR29MmzuT0?t=873) 14:34 をまず見てください。

そう、`Rigidbody`を追加すると地球の重力に魂が縛られます。
そして`Is Trigger`がチェックされてるアイテム系オブジェクトだとそのまま沈んで画面外まで消えます。

この悲しみをセーブするために`Use Gravity`のチャックを外します。
これで沈下は免れますが、__他の物理現象が依然として働きます__。
具体的にはこう↓
![](https://drive.google.com/uc?export=view&id=1VHdYDjHdvIck7WzPGCBSqkMmSJK1a7Jr)  
__2個目以降__のアイテムからは分かりやすいように__`Is Trigger`外しています__

## ひとつの冴えたやり方
- 取得可能なアイテムじゃなくって、建物とかの装飾に回転する飾りがほしいだけだったのに…  
- ベルトコンベアを実装したかったのに  
っという現実的要望もあるかと思います。  

__アイテムじゃないんだよ！目立つ背景なんだよ！でも動かされるのは困る。__的な

そういう時は`Use Gravity`と`Is Kinematic`の両方にチェックを入れます。

すると

1. **空中浮遊設定ならそのまま** 地面に沈まない
2. 他のオブジェクトと衝突しても**ふっ飛ばされない**
3. **動的コライダー** でパフォーマンスに優しい

コライダーが出来上がるはずです。
取得可能なアイテムにしたければ、`Is Trigger`を付ければ完璧！って感じですね。


## 最後に
初心者が公式チュートリアルをありのままに読んで、試して、感じた所感です。
**現実の開発現場ではもっと違うやり方で同じこと**をやっているかもしれません。
もし違うやり方でもっと効率のよいアイデアがあれば、**ぜひ教えてください**。
もちろん記事に**勘違いからのミスがありましたらご指摘ください**。

最後まで読んでくださってありがとうございました。
STM32 > License > Nucleo基板 > 商業利用できない

### STM32基板の商業利用

STM32はエコシステムが整備されていて、STM32CubeIDEを使った開発が容易にできる。

一方で、気になっていたのはNucleo、Discoveryなどの基板の商業利用は可能かどうか。


下記を見つけた。

- [Nucleo boards for commercial products](https://os.mbed.com/questions/5763/Nucleo-boards-for-commercial-products/)

上記において、下記のPDFリンクが紹介されている。

[en.EvaluationProductLicenseAgreement.pdf](https://www.st.com/content/ccc/resource/legal/legal_agreement/license_agreement/66/75/d0/96/4c/67/4e/9f/EvaluationProductLicenseAgreement.pdf/files/EvaluationProductLicenseAgreement.pdf/jcr:content/translations/en.EvaluationProductLicenseAgreement.pdf)

これによるとNucleoやDiscoveryは商業利用できない、と判断した。

STM32を使った基板を商業利用するには、STM32基板を自作することになるのだろう。

（間違いがあれば、指摘いただければ幸いです）。
Mac標準のgrepでwarning: recursive search of stdinって言われる

- 環境
    - macOS Mojave バージョン10.14.5
    - grep (BSD grep) 2.5.1-FreeBSD

# 事象 : grepコマンドを使ったらなんか言われた
現在地のディレクトリにあるファイルからgrepしたかった。
warningだが、grepの結果が返ってこない・・・:sob:
他のところで使っているgrepと同じように使ってしょっちゅう間違えるのでメモ

```bash
$ cd {ファイルがあるディレクトリ}
$ grep -irl {探したい文字}
grep: warning: recursive search of stdin

```

## 原因 : grep対象のファイルやディレクトリを指定していないから(かもしれない)
[mac標準のgrepはなぜかエラーが出るので、brew install grepしてみた - Qiita](https://qiita.com/n_oshiumi/items/c12d2eb97d478fbb019f)の投稿を見て自分と共通点が2つあるのに気がついた。

1. `-r`を使っている
2. 対象のファイルやディレクトリを指定していない

なので試してみる。

```bash
$ man grep
# 抜粋
     -R, -r, --recursive
             Recursively search subdirectories listed.
# -rを-Rにしてみたけど結果は同じだった
$ grep -iRl {探したい文字}
grep: warning: recursive search of stdin

# -rを使わないとメッセージは出力されないけどgrepの結果が返ってこない・・・
$ grep -il {探したい文字}

# ディレクトリを指定してみるとうまくいった
$ grep -ril {探したい文字} .
./hoge.md
./.git/index
./fuga.md
./ponsuke.md
```
## 対応方法 : 対象のファイルやディレクトリを指定する
```bash
# これは見づらい
$ grep -ril {探したい文字} ./
.//hoge.md
.//.git/index
.//fuga.md
.//ponsuke.md
# こうすれば隠しファイル的なものは外される
$ grep -ril {探したい文字} ./*
./hoge.md
./fuga.md
./ponsuke.md
# ファイルを指定した場合 : ファイルの場合は-rlはあんまいらない
$ grep -ril {探したい文字} ponsuke.md 
ponsuke.md
```
DOMって結局なに？

## DOMが何者なのかわからない
JavaScriptやVue.jsを勉強する際に多用される「DOM」ワード
しかし、調べれば調べるほど活用方法が多すぎて謎が深まるばかり。

## DOMをぐぐってみる
「DOMとはJavaScriptでhtmlの要素を操作するための仕組みのこと」

・・・(・∀・)？？

>Document Object Model (DOM) は、ウェブ上の文書のコンテンツと構造からなるオブジェクトのデータ表現です。

参照：[MDN web docks](https://developer.mozilla.org/ja/docs/Web/API/Document_Object_Model/Introduction)
>Document Object Model (DOM) は HTML や XML 文書のためのプログラミングインターフェイスです。

参照：[MDN web docks](https://developer.mozilla.org/ja/docs/Web/API/Document_Object_Model/Introduction)

・・・(・∀・)？？？？？？？？？

- DOMの操作が〜
- DOMを取得して〜
- DOMによって・・

**DOMってなんやねん！！**

## DOMを自分なりに理解してみた
意外にも調べていたワードの中に。
そして先ほども引用。

>Document Object Model (DOM) は HTML や XML 文書のためのプログラミングインターフェイスです。

参照：[MDN web docks](https://developer.mozilla.org/ja/docs/Web/API/Document_Object_Model/Introduction)

この`プログラミングインターフェイス`の部分。
そう、DOMとはHTMLとJavaScriptを結ぶ`API（アプリケーションインターフェイス）`なのだ。

DOMはHTMLをオブジェクトとして識別するため、
オブジェクトに対してJavaScript側から操作可能となりHTMLを操作できるようになる。

>文書HTMLのをDOMで表したデータは、文書の最上位の要素を頂点として、各要素が包含関係に従って枝分かれしていく木構造（ツリー構造）となっており、これを「DOMツリー」（DOM tree）と呼ぶこともある。

参照：[IT用語辞典 e-Words](http://e-words.jp/w/DOM.html)

DOMがDOMが〜ときくのはこの、DOMツリーを指している場合もあるのかもしれない！
コードの書き方について思うこと: if else と if

開発をしていて、コードの書き方について思うこと、感じたことを書いています。

## 思うこと
同じ動作でもコードの書き方が複数あるとき、コードの書き手は「読み手を意識して、意図に合わせて、書き方を決める」といいかもと思います

## if else と if のどちらでも書ける時、if elseの方がいいかも
ifの中でreturnするコードでは、if elseを使った方が、意図が伝わりやすいと思います。

```swift
func immigration() {
    if nationality == "japan" {
        // 日本人用の処理
        // ...
        return
    }
    // 日本人以外の処理
    // ....
    return
}
```

if elseを使ったとき

```swift
func immigration() {
    if nationality == "japan" {
        // 日本人用の処理
        // ...
    } else {
        // 日本人以外の処理
        // ....
    }
}
```

## そう思う理由
コードを読む時、最初に、全体の流れを把握する人が多いと思います。ifの中でreturnするコードでは、 全体の流れを把握するときに、ifの中のreturnに気づかずに、 `nationlaity == "japan"` のときに特別な処理をして、「日本人以外の処理」に戻ってくると勘違いしてしまうことがあります。少なくとも、僕は、ifでelseが無い場合、本流の処理に入る前の特別な処理が書かれていることを想定して読むので、勘違いしがちです。

特に、整理されていないコードだと勘違いしがちです。少し恣意的かもしれませんが、以下のようなコードなら、勘違いが起きることもあると思っていただけるかと…
<img width="814" alt="Screen Shot 2019-07-22 at 20.03.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/fbd01536-1557-625f-8571-df28757168d5.png">

if elseの方が全体の流れを把握する時に勘違いしづらいと思います。（コードが整理されていない状態だとつらいかもしれませんが…）
<img width="820" alt="Screen Shot 2019-07-22 at 20.04.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/a6b74350-fe9a-1fba-bfa0-1261be434ad8.png">

## 最後に
以下のイメージを持って、意図に応じて使い分けていただくと、少し読み手に優しいコードになると思います。

- if: 本流の処理に入る前の特別な処理
- if else: 分岐して本流に合流しない処理
macの.bash_profileと.bashrc

macの.bash_profileと.bashrcがどんなものでいつ呼ばれるか

## .bash_profileと.bashrc
bash起動時に実行されるスクリプトのかかれたファイル
ホームディレクトリに作る必要がある
絶対パスで表すと~/.bash_profileと~/.bashrcに作る

編集するにはroot権限がいるから下のコマンドで編集を始める
`sudo vi ~/.bash_profile`
`sudo vi ~/.bashrc`

## ログインシェル
macではterminal起動時に`/bin/bash --login`が実行されてシェルが立ち上がる。
bash起動時に--loginで起動したシェルはログインシェルという。

## インタラクティブシェル
bash起動時に--login無しで起動したシェルのことをインタラクティブシェルという

## .bash_profileと.bashrcの呼ばれ時
**.bash_profile**は**ログインシェル**起動時
**.bachrc**は**インタラクティブシェル**起動時

## 何も考えずに.bashrcだけで済ましたい
基本terminalからシェルを起動する人はログインシェルで活動してるはず
だから、.bash_profileは大体の場合呼ばれる
ということで、その中で.bashrcも呼んでやればどっちも呼ばれる
そのために、下のスクリプトを.bash_profileに追加すれば楽

```bash
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
```

以上のスクリプトを追加しておけば、あとは.bashrcにだけスクリプトを追加していけばよい
サーバーでGithubにSSHでつなぎたい

### 概要
サーバーに秘密鍵を置くのは危険なので、ssh-agentを利用するのが推奨されています。
`ssh -A hoge`でssh接続すると、ローカルの秘密鍵をサーバーでも使うことができます。

そもそもsshを使用してgithubに接続する方法については、[この記事](https://qiita.com/shizuma/items/2b2f873a0034839e47ce)に従えば簡単にできます。

### デバッグ
基本的には`ssh github`を打ったときに`Hi (account名)! You've successfully authenticated, but GitHub does not provide shell access.`が出れば接続は成功ですが、このまま`git clone`したときに

```
git clone git@hoge.com/hoge.git
Cloning into 'home'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```
となることがあります。この場合は

```
ssh-add ~/.ssh/id_rsa(秘密鍵の場所)
```
を打つことで解決します。

その他、

```
eval `ssh-agent
eval "$(ssh-agent)"
```
も使えるとか使えないとか、、


docker コンテナの中でやっている場合は、

```
docker cp ~/.ssh/id_rsa CONTAINERID:/root/.ssh/id_rsa
```
を先にやる必要があります。

#### その他
`ssh github`の段階で
`Bad owner or permissions on /home/User/.ssh/config`
とでたら、`chmod 600 ~/.ssh/config`とします。
Rails s 動かない時の直すテンプレ(自分用)

# はじめに
今回で2回目となるrails s ができないことが起こったので
対処法を
Qiitaに書こうと思う。

このエラーはなんの前触れもなく発生したので
１回目は「何事!?」と思いましたが
今回は
１回目の経験を元にわりかし早めに解決することができたが
1STEPミスしてしまったので
3回目は即直せるようにまとめます

## エラー内容
```
A server is already running. 
```
すでにサーバーが動いてるよと出る。

もちろん他のタブで動かしてるなんてことはない

### やること
[Railsプロジェクトフォルダ]\tmp\pids\server.pid
こいつを削除する

参考記事
https://qiita.com/uloruson/items/78b0d2d5c30a1f79fc02

## 次に起こるエラー
```
Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
```
どうやらアドレスが使われているらしい
### やること
```
$ lsof -i:3000
```
そうすると

```
sugitamasatakanoMacBook-Pro:MY_COOK sugitamasataka$ lsof -i:3000
COMMAND     PID           USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Google    18614 sugitamasataka   28u  IPv6 0xad1cf965c6704f27      0t0  TCP localhost:54667->localhost:hbci (ESTABLISHED)
ruby      33399 sugitamasataka   11u  IPv4 0xad1cf965c6dc7fa7      0t0  TCP localhost:hbci (LISTEN)
ruby      33399 sugitamasataka   20u  IPv6 0xad1cf965c6706067      0t0  TCP localhost:hbci (LISTEN)
ruby      33399 sugitamasataka   25u  IPv6 0xad1cf965c7495967      0t0  TCP localhost:hbci->localhost:49482 (CLOSE_WAIT)
```
こんな感じで
ポート3000番を使用しているプロセスを確認できる。


```
$ kill -9 33399
```
をして消してあげる。

すると治ります

参考記事
https://madogiwa0124.hatenablog.com/entry/2018/04/07/135714

## 今回の記事STEP
1STEP
https://qiita.com/uloruson/items/78b0d2d5c30a1f79fc02
2STEP
https://madogiwa0124.hatenablog.com/entry/2018/04/07/135714

で治る。

以上です。
Haskell ListモナドのBindについて

Haskellのtransposeの実装を読むと良くわからなかったので、自分用のメモとして残しておきます。

```haskell

transpose               :: [[a]] -> [[a]]
transpose []             = []
transpose ([]   : xss)   = transpose xss
transpose ((x:xs) : xss) = (x : [h | (h:_) <- xss]) : transpose (xs : [ t | (_:t) <- xss]) -- ?
```

[h | (h:_ ) <- xss]とあります。一見よさそうに思えるのですが、
xssが空リストの場合はどうなのだろうと疑問に思いました。空リストの場合はheadやtailパターンマッチが適用できないとずっと認識していました。
試しに

```haskell

>[h | xs <- [[]], let h = head xss ]
>*** Exception: Prelude.head: empty list
```
となり、自分の想定してた結果となります。
対して

```haskell
>[h | (h:_) <-  [[]]]
>[]
```
となり？？となりました。

## 種明かし
@waddlawさんの[Bigmoonのここ](https://haskell.e-bigmoon.com/posts/2018/03-31-quiz-5.html)にそのまま乗っていました。本当にいつもこのサイトにお世話になってます。
Haskell 2010 Language Report の 3.11 List Comprehensionsに書いてるようです。


## 最後に
Haskellの記事をいつか書こうと思っていたのですが、こんな記事ながら書くことたっせいできました。Haskellは難しく感じますが、やってて非常に楽しい言語なので、バリバリ書けるようになりたいと夢見ながら頑張ります。
JavaScript promiseの使い方　非同期処理

多分、すでに同じことが書かれている記事はたくさんあると思いますが、自分自身への忘備録と、JavaScriptスーパー初心者（＝自分自身）もわかるようにと細かいところまで注釈つけた記事として、投稿してみます。

######はじめに
非同期処理を簡単に表現するオブジェクト
-Promise-
JavaScriptで非同期処理を実施する場合、もともと
XMLHttpRequest*1オブジェクトを使う際、Callback関数が多数利用されていま~~す~~した。
しかし非同期処理がいくつも重なる場合、Callback関数  では入れ子( = nest)がふかくなりすぎて、
１つの関数が肥大化する傾向にあります。
このような問題をコールバック地獄 = CallbackHellといいます。これを解決すべく様々なフレームワークではPromiseライクなものが導入されてきました。
ついにはES2015で標準化される流れとなりました。
[参考]
http://callbackhell.com/

*1 XMLHttpRequest オブジェクト 1つのページ内で遷移せず外部からのデータを読み込む際に重宝されている関数です。


######Promiseの基本動作

Promiseのサンプルは次の通りです。
下のコード内の以下のメソッドは、Promise内でつかわれるお約束的なものです。

resolve = *通常時の実処理*
reject = 　*例外時の処理*
後々thenで受け取って[その時]使うことができます。

```JavaScript
var promise = new Promise(function(resolve, reject) {
  // do a thing, possibly async, then…
　　//ここで何かの処理を行う。
  if (/* 全てが順調 */) {
    resolve("よしっ!");
  }
  else {
    reject(Error("orz"));
  }
});
```

https://developers.google.com/web/fundamentals/primers/promises?hl=ja#whats-all-the-fuss-about から引用参考。


```JavaScript
function task1() {
    return new Promise(function (resolve, reject) {
        setTimeout(function() {
            console.log('task1');
            resolve('task1');
        }, 3000);
    });
}
task1();
```
setTimeout は第２引数で指定した数字のミリ秒後に処理を実施する関数　taskが行われるのは3000ミリ秒＝３秒後

```JavaScript
function asyncProcess(value) {
    return new Promise((resolve, reject) => {
        setTimeout(() => { 
            if (value) {
                resolve(`value: ${value}`);
            } else { reject('empty');}
        }, 5000)
    });
}

asyncProcess('Wawa').then(
    response => {
        console.log(response);
    }, error => {
        console.log(`Error:${error}`);
    }
);

//結果 = value :Wawa
```
https://qiita.com/hikarut/items/6c236b6d6ff6ec10cd7a から引用

↑asyncProcessは　Promiseオブジェクトを返しています。
Promiseの引数としてresolve/rejectをおいている、呼び出し側では、thenを使っての結果を受け取っている。

#####Promiseコンストラクタ
new Promise((resolve,reject)) => {statement})
resolve:処理の成功を通知
reject :処理の失敗を通知
statements : 処理本体

#####thenメソッド
promise.then(success,failure)
promise:promise オブジェクト
success:成功時よびだされるメソッド(resolve関数によって呼び出される)
failure:失敗時よびだされるメソッド(reject関数によって呼び出される)

#####aysnc と awaitについて
asyncとawaitはそれぞれ、Promiseをオブジェクトとして返すメソッドを簡略して書きたいときに使う修飾子です。

上記のtaskメソッドであれば　下記のように簡略化可能です。

```JavaScript
async function task1() {
    return  { setTimeout(function() {
            console.log('task1');
            resolve('task1');
        }, 3000);
    });
}
````

######まとめ
非同期処理はCallBackだらけになる。
CallBackだらけのコードを避けるべく登場したのがPromiseで直線的に非同期処理をさばける。
PromiseはES2015で標準装備となった。
Promiseはオブジェクトは、非同期処理を監視するオブジェクト
コンストラクタ　resolve と rejectを引数にもつ関数をもつ。それぞれ引数をthenで受け取る。
コインの組み合わせは何通り？ 〜動的計画法〜


# コインの組み合わせは何通り？ 〜動的計画法〜

問題：1枚あたりの価値が{2,3,5}の3種類のコインを組み合わせ、金額の合計をちょうど14にするやり方は何通りか。コインはそれぞれ何枚でも使ってよいとする。

```python

coin = [2, 3, 5]
total = 14
def combinations(coin, total):
    dp = [int(i % coins[0] == 0) for i in range(total + 1)]
    for coin in coin[1:]:
        for i in range(coin, total+1):
            dp[i] += dp[i-coin]
    return dp[-1]
```


# コード解説

この例だと、まず価値が2のcoinだけを使った場合の場合の数を、全ての金額で算出する（これは単に2で割ってmod0の場合は0、mod1の場合は1）

この時点でのdpテーブルは以下のようになる。

```python

[1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
```

次に、「3を少なくとも1枚を使ってちょうど10を作る組み合わせ総数」をDPテーブルの数値に足し合わせていく。

例として、DPテーブルのtotal=10の数値を更新する場合を考える。
その時点でtotal=10の場所に入っている数値は「2だけを使ってちょうど10を作る組み合わせ総数」である。
ここに「3を少なくとも1枚を使ってちょうど10を作る組み合わせ総数」を加えた値は、「2と3を使ってちょうど10を作る組み合わせ総数」である。


ここで、「3を少なくとも1枚を使ってちょうど10を作る組み合わせ総数」は「2と3を使って7を作る組み合わせ総数（3は使っても使わなくても良い）」と同じであることに（天啓によって）気づく。

左から順々にDPテーブル更新していくため、totalが1から9の場合の数は既に更新されている(既に2と3を使ってちょうど{1~9}を作る組み合わせ総数が記入されている)と考えると、DP更新時にtotal=10に既に記入されている数値（2だけを使ってちょうど10を作る組み合わせ総数）にtotal=7に記入されている数値（2と3を使って7を作る組み合わせ総数）を足せばいい。

この要領で、DPテーブルのそれぞれを更新していくことをcoinを1枚ずつ増やしながら繰り返すと、最後には全コインを使った組み合わせ総数が求まる。（この時、range(coin, total-1)とcoinの数値始まりにしておくとインデックスエラーにならない）

以下が、DPの全ての更新が終了した後のテーブルである。
これらが、{2,3,5}を足してちょうど{1~14}を作る組み合わせ総数である。


```python
[1, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6]
```
今更ながらX-Forwarded-For ヘッダーを設定してしてみた

アプリケーションの前にELB(ALB CLB)がいる場合、何も設定しないと、接続元のIPアドレスはELBのIPアドレスになってしまい、実際誰がアクセスしてきたか、クライアントのアドレスがわかりません。

そのために、X-Forwarded-For ヘッダーを記述する必要がある。

[ELB アクセスログにクライアント IP アドレスをキャプチャする方法を教えてください。](https://aws.amazon.com/jp/premiumsupport/knowledge-center/elb-capture-client-ip-addresses/)

今更ながら、試して見た。

- 環境
 - Amazon Linux2
 - Apache
 - ALB
 - クライアント iphone→MACへデザリング

まずは、S3に転送している通常にログを確認してみる。

```
109.111.159.*:43514 10.0.2.218:80
```

`/etc/httpd/conf/httpd.conf`を開き、LogFormat セクションで、次のように %{X-Forwarded-For}i を追加します。

```httpd.conf
    ...
    LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    ...
```

リロードします。

```
systemctl reload httpd
```

クライアントからアクセス。
念のため、デザリングしているMACとiPhone両方からアクセスしてみる。
今回はデザリングしているので、ソースアドレスはMACとiPhone同じになるはずだ。

ALBはS３へ5分ごとに発行されるので待って確認してみる。

MAC

```
126.182.77.*:20817 10.0.2.218:80 
```

iPhone

```
126.182.77.*:20817 10.0.2.218:80 
```
CODE COMPLETE (上) -第2部 高品質なコードの生成 ⑤-

自分の理解を深めるために投稿します。

## 第9章：擬似コードによるプログラミング

### クラスとルーチンの作成手順

#### クラス

1. クラス全体を設計
2. クラスの各ルーチンを作成
3. クラス全体をレビュー、テスt

#### ルーチン

1. ルーチンを設計
2. 設計を確認
3. ルーチンのコーディング
4. コードをレビュー、テスト

作成方法の１つに **擬似コードプログラミングプロセス(PPP)** がある

- 他には**テストファースト**、リファクタリングなど

###  擬似コードプログラミングプロセス(PPP)とは

**擬似コード**

- プログラムの仕組みを説明する略式の表記方法
- 通常の文章に似ている

**効果的にするために**

- 処理を正確に説明する文章を使用する
- プログラミング言語の構文を使用しない
  - コーディングより少し上位レベルで設計をすること
- 目的レベルで擬似コードを書く
  - どのように実現するかは考えない
- ほぼそのままコーディングできる詳細レベルで擬似コードを書く
  - コードを簡単に書き起こせるレベルにしておく

```
// 良い擬似コード例

使用しているリソースの数を記録する
if 別のリソースが利用できる
    ダイアログボックス構造体を割り当てる
    if ダイアログボックス構造体の割り当てが可能である
        使用するリソースが１つ増えることを記録する
        リソースを初期化する
        呼び出し元から提供された場所にリソースの数を格納する
    Endif
Endif
新しいリソースが作成された場合はtrueを返し、そうでない場合はfalseを返す


// 悪い擬似コード例

リソース数を1つインクリメントする
malloc()を使ってdlg構造体を割り当てる
malloc()がNULLを返したら、1を返す
OSrsrc_initを呼び出し、オペレーティングシステムのリソースを初期化する
*hRsrcPtr = リソース数
0を返す
``` 

**良い擬似コードの特徴**

- 言語に依存していない
- 目的が理解しやすい
- そのままコメントに転用できる

**擬似コードを使う利点**

- 詳細設計のレビューがしやすくなる
- 反復しながら詳細化できる
- 擬似コードは変更が容易である
  - エラーを早めに捕捉することが大事
- コメントの作成を最小限に抑える
- 設計書を管理しやすい
  - コードのコメント内に存在するので、どちらかを変更するとすぐ反映できる
  
  
### PPPを使ったルーチン作成方法

#### 設計

- ルーチンの役割を確認
- ルーチンが解決する問題を定義する
  - 隠蔽する情報
  - 入出力
  - 事前・事後条件
- ルーチンに名前をつける
- ルーチンのテスト方法決定
- 標準ライブラリが提供する機能を調べる
  - 無駄な作業をなくすため
- エラー処理
- 効率
- アルゴリズムとデータ型を調査する
- 擬似コードを書く
- データについて考える
- 擬似コードを検査する
- 擬似コードでいくつかのアイデアを出し、最も良いものを採用する

#### コーディング

- ルーチンを宣言
- 擬似コードを**概略レベルのコメント**として転用
- 各コメントの下にコードを書く
- コードが大量になったら、**擬似コードを分解**したり、ルーチンを分解することを考える

#### コードの検査

- 次の作業に進む前にコードレビューする
- まずは頭で確認
  - なぜ動くかきちんと理解できているか？
- コンパイルする
- デバッガでコードを実行
- コードをテスト
- エラーを検出したら取り除く

#### 残りの仕上げ作業

- インターフェイス検査
  - 全ての引数が使われているか
- 設計の品質検査
  - 他のルーチンとの結合度は十分弱いか
  - 防御的に設計されているか
- 変数を検査
  - 不正確な変数名になってないか
  - 使用されていない変数はないか
  - 初期化は正しくなされているか
- ステートメントとロジックの検査
  - 無限ループ、不適切なネスト、リソースのリークはないか
- レイアウト
- ドキュメント
- コメント

#### 必要に応じて繰り返す

- ルーチンの品質が悪ければ擬似コードに戻る
後輩がRustで言語を実装していた話

後輩の@maikiichanが言語を作っていた。
仕様や動機など、聞いたことをまとめた。

# lisp-by-rust
https://github.com/fumita/lisp-by-rust

## これはなに？
Lisp風言語のRust実装。

## 名前は？
考えるのが面倒、とのこと

# デプロイ
TravisCIを使い、GitHubにある[trust](https://github.com/japaric/trust)のテンプレートを利用して、
CLI上でタグを付けるコマンドを打つだけで自動的にリリースしてくれる環境にした。後述の参考記事にはなかった独自の部分。
設定がちょっと大変だったが、超便利。

具体的には、

- デプロイ
- 各環境ごとのバイナリファイル自動生成
- `/releases`配下に配置

# 仕様
- 数値計算
- 関数定義
- 変数使える
- ファイルからの読み込み可能

# 使い方
## 実行ファイルを使う場合
1. [リリースページ](https://github.com/fumita/lisp-by-rust/releases)から、環境に合ったファイルをダウンロード（ex. Mac環境の場合は`x86_64-apple-darwin.tar.gz`）
2. 解凍して実行ファイルから起動する

![スクリーンショット 2019-07-22 午後7.04.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46299/6b91ffe7-76ba-5289-dfcc-064c58b55fa2.png)

こんな感じで計算できる。
演算子を最初に書く、美しい「前置形式」。

## クローンする場合
Rustの実行環境が必要：[はじめる](https://doc.rust-jp.rs/the-rust-programming-language-ja/1.6/book/getting-started.html)

### 起動
CLI上で叩く 

```
cargo run
```

### ファイル読み込み
runコマンドの後にファイルパスを指定すると、ファイルを読み込んで実行できる

```
cargo run /path/to/file
```

# 作った動機
- [LISP in Two Days with Rust](https://willspeak.me/2019/07/10/lisp-in-two-days-with-rust.html)の記事を見て、自分でもやってみた。


# できないこと
- 文字列を結合すると落ちる
- 文字列は泥臭い実装が必要で、それをしたくない＋現状のコードの倍の量になるので省いた

# 参考文献
- [実践コンパイラ構成法](https://www.amazon.co.jp/dp/433901933X/ref=cm_sw_em_r_mt_dp_U_ZfrnDbX0S30AM)
- [LISP in Two Days with Rust](https://willspeak.me/2019/07/10/lisp-in-two-days-with-rust.html)
VuexFireを使おうと過去のサンプルをコピペしたらはまった話

# TL;DR
決してそのサンプルが悪いのではなく変更履歴を見なかった自分が悪いのです。
https://github.com/vuejs/vuefire/blob/master/CHANGELOG.md
ここを読めばすべてが解決します。

# 経緯
nuxt + firebaseのサンプルアプリを作ろうと適当な記事をコピペして自分用に変更した。
vuex部分

```javascript
import firebase from '@/plugins/firebase';
import { firebaseMutations, firebaseAction } from 'vuexfire'

const db = firebase.database();

export const state = () => ({
  users: [],
});

export const mutations = {
  ...firebaseMutations,
};

export const getters = {
  getUsers: state => {
    return state.users;
  },
};

export const actions = {
  init: firebaseAction(({ bindFirebaseRef }, usersRef) => {
    bindFirebaseRef('users', usersRef);
  }),
};
```
これだと

```
"export 'firebaseMutations' was not found in 'vuexfire'
```
こんな感じで怒られる

# 解決

githubにissueがある
https://github.com/vuejs/vuefire/issues/252

変更履歴を見ろ以上
抜粋すると以下
> vuexfire: Renamed firebaseAction to firestoreAction as well as the two added function bindFirebaseRef and unbindFirebaseRef to bindFirestoreRef and unbindFirestoreRef. This is to enable using both RTDB and Cloud Firestore
vuexfire: Rename bindFirebaseRef to bindFirestoreRef and unbindFirebaseRef to unbindFirestoreRef to allow using them for RTDB
vuexfire: Rename firebaseMutations into vuexfireMutations. Rename firebaseAction into firestoreAction since we want to allow using RTDB as well and that name will be used for the firebaseAction as well
vuefire: the default export is replaced by a named export to make it clearer what you are importing from vuefire: Cloud Firestore or RTDB. Replace import Vuefire from 'vuefire' by import { firestorePlugin } from 'vuefire' and update the plugin installation: Vue.use(firestorePlugin)

要は名前を変えたというだけ
今回の使用versionは

```
"vuexfire": "^3.0.1"
```

なので該当。

以下のように書き換える

```diff

import firebase from '@/plugins/firebase';
+import {vuexfireMutations, firestoreAction } from 'vuexfire';
-import { firebaseMutations, firebaseAction } from 'vuexfire'
const db = firebase.database();

export const state = () => ({
  users: [],
});

export const mutations = {
+  ...vuexfireMutations,
-  ...firebaseMutations,
};

export const getters = {
  getUsers: state => {
    return state.users;
  },
};

export const actions = {
+  init: firestoreAction(({bindFirestoreRef}, usersRef) => {-
-  init: firebaseAction(({ bindFirebaseRef }, usersRef) => {
+    bindFirestoreRef('users', usersRef);
-    bindFirebaseRef('users', usersRef);
  }),
};

```
CSV形式をJSON形式に変換するPythonプログラム


IBM Cloudのサービスを使っている途中、膨大なcsvデータをJSON形式に変換しなければならないという作業に直面したので、初めてプログラムというものを書いてみました。
（もちろん一人ではできないので 周りの力を借りました ^^;）

業務上、人工知能に携わっているので 今後Pythonを使えるようになりたいと思いPythonでプログラムを書いてみました。
ちなみにPython知識ゼロでのスタートです ><
（List型とか辞書型とかもうついていけなかった。。）
ネット上で参考にしたサイトではListという型を使って書かれている方がほとんどでしたが、
今回は出力したい形式上「型」というものを意識せずに書いてみました。

至らない点がございましたら、ご指導ご鞭撻のほどよろしくお願いいたします。

```python:main.py
import csv
import json
import codecs

#csvファイルを読み込む
with open("SampleData.csv") as f:
	#readerという変数に読み込んだものを格納する
	reader = csv.DictReader(f, delimiter=",", quotechar='"')

	#書き出したい場所を指定する
	with open('SampleData.json', 'w') as f:
		#write＝出力コマンド
		f.write("{")
		#for文を回す
		for row in reader:
			#表示させたい文字（読み込んだファイルの中にはない内容）
			f.write("\n") #改行
			f.write(" \"add\": {")
			f.write("\n")
			f.write(" \"doc\": ")
			#読み込んだcsvファイルの情報をjsonに出力させる
			json.dump(row, f, ensure_ascii=False ,indent=1 , encoding='utf-8')
			f.write("},")
		#表示させたい文字（読み込んだファイルの中にはない内容）
		f.write("\n")
		f.write("\"commit\" : {}}")
```

整形後はこんな感じになります。

```SampleData.json
{
 "add": {
 "doc": { 
 "title": "『△△クラウド』スケジューラー　使用説明書類", 
 "filename": "元文書へのリンク", 
 "keyword1": "", 
 "body1": "20××年8月10日サービスインの『△△クラウド』スケジューラーの使用にあたり、使い方等の説明書類を掲示致します。", 
 "keyword2": "", 
 "id": "1001", 
}},
"add": {
 "doc": {
 "title": "『△△クラウド』における個人端末使用許可申請のルール", 
 "filename": "元文書へのリンク", 
 "keyword1": "", 
 "body1": "△△クラウドにおける個人端末使用許可申請のルール・・・", 
 "keyword2": "", 
 "id": "1002", 
}},
"commit" : {}}
```

以上になります。

正直、delimiterとか quotecharとか何者なのかよく分かっていないです…（笑）
→ APIドキュメントの [csv.DictReader](https://docs.python.org/ja/3/library/csv.html#csv.DictReader) 経由、[csv.reader](https://docs.python.org/ja/3/library/csv.html#csv.reader) 経由、「[Dialect クラスと書式化パラメータ](https://docs.python.org/ja/3/library/csv.html#csv-fmt-params)」に説明があります。

今後少しずつ分からないものを潰して Pythonを覚えていけたらいいなあと思います。

最後まで見てくださりありがとうございました。
south Indian recipes

Every religion in Kerala building up their own cousins and style of planning. The Malabar area in Kerala has unmistakable ideal plans. It was obtained from the brokers. Kerala cousins utilize characteristic ingrediances like coconut, dark pepper, cloves, cinnamon, ginger and so forth for the cooking. Kerala was likewise acclaimed for its sadhya.It was set up during the social celebrations like onam, vishu and so on. There is wide verity of customary <a href="https://www.tastymalabarfoods.com/p/vegetarian-recipes.html">vegetarian recipes</a> in Kerala to make Kerala sadhya.The state Kerala additionally includes enormous gathering of ocean nourishments like fish, mussels, prawns and so forth. Fish plans in Kerala were generally fiery just as flavorful. Syrian Christians in Kerala has their own heavenly <a href=-"https://www.tastymalabarfoods.com/p/chicken-recipes.html">chicken recipes</a>. Presently you can get verity of Kerala exceptional Chicken plans on the web.

![dessert laaarge.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463148/e2dc8c31-2ec0-9bd0-81ad-d6716dd8ca5f.jpeg)
UiPathでよく使う変数の型

UiPathでよく使う(使いそうな)変数の型まとめです。

|型|型名称|初期化|変数値指定方法例|指定可能範囲|Browse for Typeでの検索ワード|備考|
|:-----------------|------------------:|:------------------:|:------------------:|:------------------:|:------------------:|:------------------:|
|String|文字列|""|"あいうえお"||デフォルトである|・指定したい文字列を""で囲む必要あり・初期化していない+何もデータが入っていない状態だと処理時にエラーでるので初期化しておく。|
|int32|整数(符号あり)|0|1|-2,147,483,648 ～ 2,147,483,647|デフォルトである|・小数点は使えない。・ほかにもint8やint16、int64などもあるが、数値の有効範囲が違うぐらい|
|uint32|整数(符号なし)|0|1|0 ～ 4,294,967,295|system.uint32|・小数点は使えない。負の値も使えない。・ほかにもuint8やuint16、uint64などもあるが、数値の有効範囲が違うぐらい|
|Double|実数|0|1.01|2.22507e-308 〜 1.79769e+308|system.double||
|Boolean|ブーリアン||TRUE||デフォルトである|・TrueかFalseが入る。・初期値を指定しないとデフォルトFalseが入る|
|String[]|配列|new string(){}|new string(1){"あ","い"}||デフォルトである|・Variable typeからArray of [T]で設定可能。・配列に入れる型は指定できる。・()の中に配列数を指定。指定した数+１の要素が確保される※要素数2個ほしいときは1と記載・{}の中に設定値をいれる。※左記例の場合0番目の要素(0)に文字列"あ"が格納される|
|DateTime|時間|new system.DateTime|2019-01-01 01:00:00||system.dateTime|・初期値を指定しないとデフォルトで 01/01/0001 00:00:00 が入る。・変数にDatetime.Now 指定することで現在の年月日時分秒が自動で入る|
|DataTable|データテーブル|new system.Data.DataTable|||system.data.datatable|・初期化していない+何もデータが入っていない状態だと処理時にエラーでるので初期化しておく。・主にDataScraipingやExcelのRange処理等で使用する。|
初心者がPHPのオブジェクト指向のコードを書いてみた(1)

ProgateでphpⅡを一時間近く学びつつ、試しに簡単なオブジェクト指向を書いた。
所要時間1時間30分。

理解出来たこと
1..インスタンスの生成
2..thisを用いてプロパディとメソッドにアクセスする記述
3..プロパディの定義記述

課題
1..コンストラクタの概要をProgateやQiitaで学んで理解を深めること。現在の懸念点はコンストラクタに引数を受け取る流れが分かるかどうかが不安
11行目の(echo $name."さんのプロフィールの作成";）に関しては作成した2つのインスタンスを出力したかったけどどう書いていけばいいのか全く分からない。
どなたかコンストラクタの概要を教えて頂けたら幸いです。

```
<?php
class LieF{

  //プロパディ定義、

  public $name;
  public $age;

  // コンストラクタ
  public function __construct($name){
      echo $name."さんのプロフィールの作成";

  }

  //メソッド定義
  public function profile(){
      echo"{$this->name}さんの年齢は{$this->age}歳です";
  }


}
//インスタンス生成

$Hahakigi = new stdClass;

$Hahakigi = new LieF();
echo '<br>';
$nitta = new LieF();
echo '<br>';
$Hahakigi->name ='帚木日向子';
$nitta->name ='新田司';

$Hahakigi->age ='22';
$nitta->age ='23';
$Hahakigi->profile();
echo '<br>';
$nitta->profile();







?>
PHP 製デプロイツール Deployer でブランチ選択を実装する

PHP で書かれた Deployer というデプロイツールについての話です
👉 https://deployer.org/

Deployer の特徴に **レシピ** という単位で、デプロイ時の機能を PHP で拡張できることがあります (Slack に投稿など):

https://deployer.org/recipes.html

この記事では、実際に Deployer を使ってデプロイするときに追加した機能を紹介します。

## デプロイするブランチをユーザーに選択させる

通常 Deployer ではデプロイするブランチは固定 or オプション指定なので、ユーザーがデプロイするときに CLI でデプロイ対象のブランチをインタラクティブに選択できるようにします:

```php:set_brancy_by_selection.php
<?php
use function Deployer\{askConfirmation, askChoice, get, set, writeln, input};

// ブランチをユーザー選択式に
set('branch', function () {
    // --branch=<branch> でオプション指定されてるときはそれを使用できる
    if ($branch = input()->getOption('branch')) {
        return $branch;
    }

    $repository = get('repository');
    exec("git ls-remote -h {$repository}", $outputLines);
    $branches = [];
    foreach ($outputLines as $line) {
        if (preg_match('#refs/heads/(.*)$#', $line, $matches)) {
            $branches[] = $matches[1];
        }
    }

    $branch = askChoice("Choose a branch to deploy:", $branches);
    writeln("> Branch chosen: {$branch}");
    if (!askConfirmation("Are you sure to work with '{$branch}' ?")) {
        exit();
    }

    return $branch;
});
```

このコードによりブランチが必要になった時点で、ブランチの選択ができるようになります:

<img width="424" alt="php.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/6a82f3f7-f0ea-f416-2514-12da22ffe015.png">

コマンドライン引数で渡した場合はそれがそのまま使われます:

```
./dep deploy <stage> --branch=master
```

<img width="769" alt="zsh.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/f9a32226-3d73-d358-8904-d8fe66493f1c.png">

## Deployer のコマンド

Deployer recipe で使える CLI でのユーザー入出力まわりのコマンドの紹介です。

### `askChoice`

```php
function askChoice($message, array $availableChoices, $default = null, $multiselect = false)
```

`$availableChocies` で指定した `array` をもとに選択肢を出してくれる感じです。

<img width="424" alt="php.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/24a38010-068e-555b-7c54-256e5e7b5494.png">

### `askConfirmation`

```php
function askConfirmation($message, $default = null)
```

`y / n` で二択の確認を出してくれます。

<img width="539" alt="php 2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/fe7fab7e-61ae-10e5-8c09-d398031c4d29.png">


## `writeln`

```php
function writeln($message, $options = 0)
```

メッセージを出力します。

そのほかにもリモートでコマンド実行など、ひととおり必要な機能が用意されています: https://deployer.org/docs/api.html

あとは PHP のコードがそのまま使えるので、慣れていれば特に造作なく使えるかんじです。
Laravelのお困りごと解決リスト

## 絶対間違ってないのに謎のSyntax Error or Parse Error
Laravelのキャッシュが原因になっていることが多い。
めんどくさい時は以下のコマンドでキャッシュを一切合切全て消すことができる。
副作用にはご注意を。

```terminal
php artisan key:generate
composer dump-autoload
php artisan clear-compiled
php artisan optimize
php artisan config:cache
```


## キャッシュを消しても謎のエラーが直らない時
コードを修正した直後になることが多い。
Vagrant側のキャッシュが原因であることが90%(他10%ぐらいは実は見落とし)なので、Vagrantを再起動すると普通に動く。
どうやらApache2のキャッシュが相当しぶとく強いようで、このエラーになるそう。

コマンドはHomesteadなどVagrantが動いているディレクトリで以下。

```
vagrant reload
```

このエラーが一番困る...(typoなのかキャッシュなのか原因がわかりにくい)

## MySQLのDB(Homestead以外)に接続できない

```
PDOException: SQLSTATE[HY000] [1044] Access denied for user 'username'@'localhost' to database 'databasename'
```
こんな感じのエラーが出た時は、書いてあるユーザーのデータベース接続権限がないことが原因。
Laravelで複数のデータベースを用いてプロジェクトを動かす時とかになる。

まずMySQLにrootで接続する。

```
mysql -u root -p
```
この時、パスワードを聞かれるが、Homesteadそのままのパスワードなら "secret" で接続できる。

さらに以下コマンドを実行。userデータベースからホストやユーザ名などの情報を取得する。

```
select Host, User from mysql.user;
```
ここで、上記エラーに書かれている'username'@'hostname'が存在していない場合がある。その時は以下のコマンドでユーザを追加する。

```
CREATE USER 'username'@'hostname' IDENTIFIED BY 'secret';
```

該当ユーザの情報を確認できたら、さらに以下のコマンドでユーザに権限を付与する。

```
grant all on *.* to username@hostname;
```
これで接続ができるようになっているはずなので確認してみてください。


(この方法、権限全部あげちゃってるので危険な気がしますが...他の方法を知っている方はコメント欄で教えていただけると助かります。)


## Laravel5.5でcomposer installができない

laravel create-projectを動かしているときに以下のエラーが出ることがある。

```
[RuntimeException]                                                                                 
  Could not delete /home/vagrant/code/appname/vendor/kylekatarnls/
update-helper/src/UpdateHelper:
```
書いてある通り、kylekatarnls/
update-helper/src/UpdateHelperがのinstall時にエラーを吐いている。
このライブラリが何かスクリプトを実行しようとして、拒否られているっぽい。

この場合、エラーを吐いてinstallが止まった後に、プロジェクトディレクトリに移動したのち以下のオプションをつけて再度installを行う。

```
composer install --no-plugins
```
これでおそらくインストールが完了するはず。副作用については未検討なのでご注意ください。

## DataBaseを追加する

例えばHomesteadを用いてデータベースを扱っているときは、デフォルトのデータベースがhomesteadという名前で作成され使用される。

ここで、開発環境用やテスト環境用に別のデータベースを使用したい場合がある。
この場合は以下のようにapp/config/database.phpに以下を追記する。

```
        '{new database}' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => '{database name}',
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
```

これは元から配置されているmysql用のデータベースをコピペしたもの。
これを追記することで仕様の準備が整う。
あとは適当に```composer dump-autoload```や```vagrant reload```とかして環境をリフレッシュしたら多分動く(はず)。
ユーザの方の権限設定も忘れずに。
Pythonってなにができるんだろう？

#はじめに

未来電子テクノロジーでインターンをしている宮﨑です。
最近Pythonを学び始めました。
学び始めって基礎的なことばかりで、何に使えるのかイメージができません。
そこで今回は、pythonでできることをまとめてみます。

もし誤りがあれば修正するのでどんどん指摘してください。


#Pythonでできること

###人工知能の開発

これはよく聞きますね。
ディープラーニングや機械学習のプログラム処理には、高度な計算が必要です。
コンパイル不要で手早くテストランできる環境が求められるので、Pythonがよく使われます。
また、Pythonには人工知能の開発に適したライブラリが色々あるのです。


###Webアプリケーションの開発

Pythonはサーバーサイドのプログラムになります。
Pythonで作られた有名なアプリケーションは
・Dropbox
・evernote
・Instagram
などです。
身近なものにもPythonが使われているとなると、夢が広がりますね。

###マーケティングの業務効率化

Pythonによって手動でやっていたデータ収集が自動化できます。
例えば、条件に合うWeb上の記事をはき出したり、データ数値を自動分析したりと、今まで時間をかけていた作業があっという間にできるようです。

###フィンテックやブロックチェーン技術の開発

フィンテックとは金融とテクノロジーを掛け合わせたもので、代表例としてビットコインをはじめとする「仮想通貨」があります。
ブロックチェーンは「仮想通貨」が機能するために必要な技術といわれるものです。
ハードルが高そうに感じますが、文法が簡単なPythonでできます。


#まとめ

この他にもPythonでできることはたくさんあります。
自分の学習が何につながるかがわかると、勉強のやる気が出てきますね。
PDFEmbedder Premium Secure 4.3 で Gutenberg がエラーする

> 3時間ほど無駄にしたので、同じような人がいたら、役立つと思っての投稿です

2019/07/22

# 概要

- WordPres 5.2.2
- Gutenberg利用（プラグインではなく、コアのもの）
- PDFEmbedder Premium Secure プラグインを利用

この組み合わせで、Gutenberg の media-element 系のブロックが全部エラーで動かなくなりました。

# 予想、仕組み

WordPress の Gutenberg のブロックは大抵、「ベースとのなるブロック」を拡張することで実現されている。恐らく、PDFEmbedder Premium Secure がコアのブロックに干渉していると思われる。

それによって、同じコアを利用する「画像ブロック」「カバーブロック」など、軒並み動かなくなる。参った。
Numpy配列のAdvanced Indexingは知らないとわけわからなくなる。([], compare, condition, 条件式, fancy indexing )

#目的
Keras関連のpythonのコードで、
numpy配列の以下のような処理があり、

```
test_xxx_prediction[test_xxx_prediction >= 0.5] = 1
```
   ※test_xxx_predictionは、numpy配列

numpyの”fancy indexing”というようなものも、知らなかったので、
調査に手間取った。
泥縄式に調べると
numpy配列は、かなり、いろいろなことができることがわかったので、情報共有。

　np.array[条件式]
　np.array[condition]
　
ぐらいで検索したが、うまくかからなかった。

#Advanced Indexing

以下など、よくわかるのでは？

https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html


#Advanced Indexing の例

numpy配列では、以下のような処理ができる。
慣れていないと、随所に、わけがわからないところがあるかも。

```python

>>> a = np.array([0.01, 0.62, 3.55, 0.21, 0.91, 0.0, 3.2, 0.33, 0.45, 0.99])
>>> a
array([0.01, 0.62, 3.55, 0.21, 0.91, 0.  , 3.2 , 0.33, 0.45, 0.99])
>>> a[a < 0.5] = 1.0
>>> a
array([1.  , 0.62, 3.55, 1.  , 0.91, 1.  , 3.2 , 1.  , 1.  , 0.99])
>>>

```


```python


>>> b = np.array([1, 2, 4, 6, 9])
>>> a[b]
array([0.62, 3.55, 0.91, 3.2 , 0.99])
>>>
>>>

```

numpy配列でなく、リストでは、当然できません。

```python

>>> aaa = [0.01, 0.62, 3.55, 0.21, 0.91, 0.0, 3.2, 0.33, 0.45, 0.99]
>>> aaa
[0.01, 0.62, 3.55, 0.21, 0.91, 0.0, 3.2, 0.33, 0.45, 0.99]
>>> aaa[aaa < 0.5] = 1.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'list' and 'float'
>>> bbb = [1, 2, 4, 6, 9]
>>> aaa[bbb]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not list
>>>



```

#まとめ
調べるのに時間がかかったので、記事に。


#関連（本人）

[pythonをストレスなく使う！（結局docs.python.orgのreferenceが納得感が高い気が、、、)](https://qiita.com/enoughspacefor/items/9f714c9d4a13b6f1eaa9)
[pythonをストレスなく使う！（generatorに詳しくなる。since1975らしい。)](https://qiita.com/enoughspacefor/items/524a76fcde2610b9da8a)
[pythonをストレスなく使う！（Pythonでは、すべてがオブジェクトとして実装されている)](https://qiita.com/enoughspacefor/items/0c6118da4c228226a65f)
[pythonをストレスなく使う！（Pylintに寄り添う)](https://qiita.com/enoughspacefor/items/df692b27bb58ca1ffa1d)
[pythonをストレスなく使う！（ExpressionとStatement)](https://qiita.com/enoughspacefor/items/1a11f553c265a2c703f2)
[英語と日本語、両方使ってPythonを丁寧に学ぶ。](https://qiita.com/enoughspacefor/items/d4b49747773e2d0285f9)

#今後
コメントなどあれば、お願いします。:candy:
勉強します、、、、
【続!全部コピペで】高画質なダウンロードしようって話

###成果物
https://github.com/sakaku193/youtube_download/tree/branch

###前書き
前回全部コピペで作った[youtube_downloader](https://qiita.com/osake_log/items/94fc0222669e63ef87c2)に対して機能を増やします。
もちろん全部コピペです。
我々はプログラミング何てわからない人間だからコピペで動かせばいいのです。
良い感じにしときましょう。

###高画質対応するにあたっての前提知識
youtubeからダウンロードするときの話なんですが、
動画を超高画質でダウンロードしようとすると音声だけしか取れないって話があります。
以下参考資料
[Quality problem（英語）](https://github.com/fent/node-ytdl-core/issues/374)
[youtube-dlを使ってYouTubeから最高画質で最高音質の動画をダウンロードする（Python）](https://qiita.com/shiooooooooon/items/dd86601ebdfe09591686)

どっちの資料でも書いてますが、要するにバラバラにとってきて後から合成しようぜって話です。

###さぁコピペだ
ytdl-coreに[サンプル](https://github.com/fent/node-ytdl-core/blob/master/example/ffmpeg.js)があります。
これを適当に組み込んじゃえば完成です。


###なんかffmpegでエラー出る。
[こいつ](https://www.npmjs.com/package/@ffmpeg-installer/ffmpeg)を使えば解決します。
参考資料
[NodeJs - Fluent-FFMPEG cannot find FFMPEG](https://stackoverflow.com/questions/45555960/nodejs-fluent-ffmpeg-cannot-find-ffmpeg)

###あとがき
サンプルをコピペしてるだけでなんか動くのはいいことですね。
ちゃんと中身を理解してコピペしたり、それを改変するのは別に悪いことじゃないと思います。
でもそのままポートフォリオとして企業に提出するのはやめましょう。
絶対ばれます。
それでは皆様、良いコピペライフを！
UIProgressViewのアニメーションタイミングを変更する

`UIProgressView` クラスにはアニメーションとともに進捗状況を更新する`setProgress(_:animated:)
` メソッドがありますが、そのままの状態ではアニメーションのタイミングが固定されています。

以下のように `UIView` の `animate(withDuration:animations:)
` メソッドを使うことで、進捗アニメーションのタイミングを自由に変更することができます。

```swift:約2秒間かけて進捗アニメーションを実行するサンプル
UIView.animate(withDuration: 2.0) {
    self.progressView.setProgress(0.1, animated: true)
}
```

以上
Python3標準入力まとめ

#はじめに
[未来電子テクノロジー](https://www.miraidenshi-tech.jp/intern-content/program/)でインターンをしている<小栗>です。
「プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正するのでどんどん指摘してください。

##Hackerrank等で使用される標準入力
現在インターン先では、Pythonの学習カリキュラムでHackerRankが使用されています。
そこで、多くの問題で自分が理解に苦しんだ標準入力についてまとめます。

### 【大前提】input()関数は文字列でデータを取得する
何らかの入力が必要だと判断し、input()関数を使用することが多いのですが、大前提としてinput()関数はデータを文字列で取得します。

### 文字列のまま取得し、文字列で出力
```py
s1 = input() #文字列で取得し、
print(s1) #文字列のまま出力

s1 = input().strip() #strip()で前後の空白を取り除く
```

### 整数を取得する
```py
i1 = int(input()) #文字列で取得し、int()に入れ整数として扱う
```

### 複数入力（文字列）を一行で取得し、出力する
```py
#入力：str1 str2

s = input().split() #str1 str2をsplit()で分割して取得し、sに値を入れる、split(','),split('/')はぞれぞれ,/で複数要素を分割
print(s) #出力：['str1', 'str2']
print(s[0]) #出力：str1
print(s[1]) #出力：str2
```



### 複数入力（整数）を一行で取得し、出力する
```py
#入力：int1 int2

i = list(map(int, input().split())) #int1 int2を取得し、iに値を入れる。イテレータをlist化している。
print(i[0]) #出力：int1
print(i[1]) #出力：int2
```

[map関数](http://taustation.com/python3-map-function/)に関して

### 複数行の入力を取得し出力
単純に行数分の入力を繰り返せば良いので、for文で繰り返す。

```py
#入力：
str1
str2
str3

s = [input() for i in range(3)] #繰り返し
print(s) #出力['str1', 'str2', 'str3']
```
数値を取得する場合も今までと同様にint()にinput()を入れる。


### 入力回数を取得し、その回数分値を取得し出力
```py

#入力：
N
str1
str2
str3
.
.
.
strN

N = int(input()) #1行目のNを取得する
s = [input() for i in range(N)] #N回input()を繰り返す
print(s) #出力：['str1', 'str2', 'str3', 'strN']
```
[ Laravel ]特定の曜日を回避してタスクを実行させる

## 金曜日と土曜日は実行させない（skipする）で、それ以外の曜日は10:00, 17:00に実行させる

```php:kernel.php
$schedule->command('app:command')
                ->skip(function (){
                    $today = Carbon::today();
                    return $today->isFriday() | $today->isSaturday();
                })->twiceDaily(10, 17);
```

`Carbon`使わなくても、

```php5:kernel.php
$schedule->command('app:command')
                ->mondays()
                ->tuesdays()
                ->wednesdays()
                ->thursdays()
                ->saturdays()
                ->twiceDaily(10, 17);
```
でいける。
オレみたいなアホがやりがちなこと-sshによる公開鍵認証編-

私ように書いているので、言い方とか気にしないでください。（このこときずかなくて、ボク、怒ってます状態。）

sshの公開鍵認証を使おうとした時、よくネットに出てる例のやり方(ssh-keygen)からのしてみたんだが、いつもサーバ側からパスを求められるのでなぜかって思ったら以下の通り、

#サーバ側の~/etc/ssh/sshd_configのファイルの書き換えにおけるアホハッタリ

sshd_configでパスワードを要求しますかっていう意味の一文にyesかnoをつける。
もちろんデフォでyesになっているのでnoにしなければあかーん。

```bush:sshd_config
#PasswordAuthentication yes
```

を

```bush:sshd_config
#PasswordAuthentication no
```

とする。







おいおい、ちょっと待てと、
カンのいい人は気づくはず。

```bush:sshd_config
PasswordAuthentication no
```

コメント乙でした。


作用させたいところの
\#は消しましょうww
びっくりしたPHPコード

# 概要
私が遭遇して驚いたPHPのコードを集めたものです．
他にも見つかり次第，追加するつもりです．

# 変数を変数名に使う
文字列を```${}```で囲むことで，その文字列名の変数を扱うことができます．

```php
$varName = 'hoge';
${$varName} = 'YES';

echo $hoge;  // YES
echo ${$varName};  // YES
echo ${'hoge'};  // YES
```

変数名以外にも，プロパティや関数も呼び出すことができます．

```php
$var = (object) [
    'hoge' => 'YES',
];
$prName = 'hoge';

echo $var->{$prName};  // YES
```

```php
$methodName = 'count';
$box = [1, 2, 3, 4, 5];

echo $methodName($box);  // 5
```

## 使用例
Laravelでの使用例です．

```php
$tables = [
    'books' => ['title', 'author_id', 'page'],
    'users' => ['first_name', 'last_name', 'age'],
];
$data = [
    'books' => [
        'title' => 'タイトル',
        'author_id' => 1,
        'page' => 123,
    ],
    'users' => [
        'first_name' => 'なまえ',
        'last_name' => 'みょうじ',
        'age' => 28,
    ],
];
foreach ($tables as $tableName => $columns) {
    $className = 'App\\' . studly_case(str_singular($tableName));
    if(class_exists($className)) {
        ${$tableName} = new $className;  // インスタンスの作成
        foreach ($columns as $columnName) {
            ${$tableName}->{$columnName} = $data[$tableName][$columnName];
        }
    }
}
```

データを追加する際に，テーブル名やカラム名を変数に格納することで

```php
$books->title = $data['books']['title'];
$books->author_id = $data['books']['author_id'];
...
```

のように一つずつ式を書かなくて済みます．ちなみに

```php
$className = 'App\\' . studly_case(str_singular($tableName));
if(class_exists($className)) {
    ${$tableName} = new $className;
}
```

この部分もかなり衝撃的なコードです．単語を```str_singular```で単数形にしてから```studly_case```でアッパーキャメルケースに変換して，モデル名を生成しています．

# 論理演算子
論理演算子を用いることで，```if```文や三項演算子を省略することができます．

```php
$hoge = 'OK';
False || $hoge = 'hoge';
echo $hoge;  // hoge
```

```php
$hoge = 'OK';
True || $hoge = 'hoge';
echo $hoge;  // OK
```

```php
$hoge = 'OK';
False && $hoge = 'hoge';
echo $hoge;  // OK
```

```php
$hoge = 'OK';
True && $hoge = 'hoge';
echo $hoge;  // hoge
```

.```||```の場合は，式が```True```と評価される場所まで実行されて，それ以降は実行されません．
一方```&&```の場合は，式が```False```と評価される場所まで実行され，それ以降は実行されません．
この手法はPHPだけでなく，javascriptなどでも使えます．

## 使用例
変数が有効かどうかを調べて，有効ならメソッドを呼び出すとき，

```php
if (is_valid($var)) $var->method();
```

のような文を

```php
is_valid($var) && $var->method();
```

と書くことができます．

# list
.```list```を用いるとPythonにおけるタプルのリターンのようなものを実装できます．

```php
$testFunction = function() {
    return ['hoge', 'mage'];
};

list($hoge, $mage) = $testFunction();
echo $hoge;  // hoge
echo $mage;  // mage
```

複数の値を返したいときに便利です．さらに次のような使い方もできます：

```php
$data = [
    'key1' => ['hoge', 'mage'],
    'key2' => ['hogehoge', 'magemage'],
];
foreach ($data as $key => list($hoge, $mage)) {
    echo $key;  // key1, key2
    echo $hoge;  // hoge, hogehoge
    echo $mage;  // mage, magemage
}
```

まさか```foreach```文でも使えるとは思いもしませんでした．片方がいらない場合は

```php
list(, $var2);
```

のようにすると，片方だけの値を取得できます．

# 感想
個人的には```list```が```foreach```でも使えたことが一番の衝撃でした．
他人の書いたプログラムを読んでいると思いもよらない書き方に出会え，ワクワクしますね．
モブプロ勉強会【説明資料】

自己紹介
---
初めまして、情報戦略テクノロジーの山川直夫(まさお)です。

これまで、クライアントサーバシステムから
Webシステムまで、幅広いシステム開発を行ってきました。
金融機関、テレビ放送局、おもちゃメーカーなど、思い返すと結構幅広く携わってきました。

---

ここ最近、「ペアプログラミング」「モブプログラミング」といった複数のメンバと知見を共有しながら作業を進めていくことが増えてきました。

そんな中、情報戦略テクノロジーの勉強会で、
モブプロ勉強会を開催しました。
当日使用した、モブプロの進め方について
のスライドを公開します。

---
当日は、グループワークという形で4~5名のチームを3チーム作成し
興味のあるテーマについてチーム毎で作業を行っていただきました。

資料としては、個人的な思いも入ってるものになっていますが
今後、モブプロを初めてみたい方や実施する方の参考になると嬉しいです。

---
![スライド1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/e2beb554-0502-1a81-0d7f-b8928df57e8b.jpeg)

---
![スライド2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/20790baa-d044-bfeb-f33e-3f1d7b072ceb.jpeg)

---
![スライド3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/507b7644-8e04-6397-58dc-ef7e018c7a2d.jpeg)

---
![スライド4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/dc3ad966-227a-d82e-bea1-10c6ed9ca0ef.jpeg)


---
![スライド5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/dd757e38-a04b-6705-1252-1242ff1f1b51.jpeg)


---
![スライド6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/1fead021-3050-331c-c63a-0543ceaf24b2.jpeg)

---
![スライド7.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/3129796e-07ef-7b30-91b5-9679424f6234.jpeg)

---
![スライド8.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/718464bf-3027-ace3-510f-5933aa2b48af.jpeg)

---
![スライド9.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/2bac75d5-743a-c7a6-153b-6cabfed8d49f.jpeg)

---
![スライド10.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/9de43de4-4796-755b-c273-e0c7c24ffb4f.jpeg)

---
![スライド11.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/4d41085d-089a-1e1b-ea72-df63da9491b2.jpeg)

---
![スライド12.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/ed4b1469-f3ca-b825-6087-8c642a072fe2.jpeg)

---
![スライド13.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/4ecf37bd-96c3-d669-2f99-726fddd812e3.jpeg)

---
![スライド14.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/283c4385-4959-85c3-b924-57858f78de86.jpeg)

---
![スライド15.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/50cd50aa-dc40-334e-c04b-e62a14e542cf.jpeg)

---
![スライド16.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/78c7c2e1-c177-b8cb-08da-d4ef6d2aeb56.jpeg)

---
![スライド17.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/e56e822b-17b3-9f9e-3f64-9000c1b02c13.jpeg)

---
![スライド18.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/e8278e2d-84f4-cd00-f747-5921cb6068a2.jpeg)

---
![スライド19.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459866/d858c458-33b4-c853-bb49-79c5afc49bdb.jpeg)
Vuex-ORMとvuex-persistedstateの連携で半永続的データベースに！

みなさんこんにちは！やっしー(@YaCpotato )です！

今回は、Vuex-ORMを使って製作物（たぶんプロジェクト管理ツール？）を作るにあたり、データの保持に一役買ってくれたvuex-persistedstateを紹介しようと思います！

Vuex-ORMについてはこちら
https://github.com/vuex-orm

vuex-persistedstateについてはこちら
https://github.com/robinvdvleuten/vuex-persistevuexdstate

## vuex-persistedstateとは
vuexのstoreの情報(変数？)をブラウザのCookieに保存することで、リロード等してもvuex内のデータが保持できるようになる
### 導入方法
驚くほど簡単でした

```
npm install --save vuex-persistedstate
```
でインスコしたら、
store.jsを

```javascript
import Vue from 'vue'
import Vuex from 'vuex'
import VuexORM from '@vuex-orm/core'
import Project from './model/Project'
import Task from './model/Task'
import Current from './model/Current'
import createPersistedState from 'vuex-persistedstate'

Vue.use(Vuex)

const database = new VuexORM.Database()

database.register(Project)
database.register(Task)
database.register(Current)

const store = new Vuex.Store({
  plugins: [VuexORM.install(database)]
})

export default store
```
この状態（vuex-persistedstateを使ってない状態）から、

```javascript
import Vue from 'vue'
import Vuex from 'vuex'
import VuexORM from '@vuex-orm/core'
import Project from './model/Project'
import Task from './model/Task'
import Current from './model/Current'
import createPersistedState from 'vuex-persistedstate'

Vue.use(Vuex)

const database = new VuexORM.Database()

database.register(Project)
database.register(Task)
database.register(Current)

const store = new Vuex.Store({
  plugins: [VuexORM.install(database),
            createPersistedState({ storage: window.sessionStorage })]
})

export default store
```
変わっているのは、const storeの宣言時のpluginsに書き足している、

```javascript
createPersistedState({ storage: window.sessionStorage })
```
だけです。

これだけで、Vuexのstoreの情報が、リロードしても消えなくなりました！

VuexをDBとして使うVuex-ORMとの相性は抜群？？

でもやっぱ、プロジェクト管理なら、ソースコードにgitを使うだろうから、リポジトリにjsonファイルなり作成させてもらって、そこで管理する方がいいのかななんて思ったりします。

では今日はこの辺で失礼いたします！


ソースコードはgithubに置いていますがまだ開発中のものですのであしからず
https://github.com/YaCpotato/laravueStudy

よろしければTwitterのフォローもお願いします。
コードレビューとか送ってくれたらとても喜びます。
https://twitter.com/Yasshieeee

良い一週間を！

ーーーーーーーーーーーーーー
Name:やっしー
大学生。新卒即戦力という矛盾を達成するため日々勉強中。2020年卒業見込み。
研究：少ないデータでの機械学習(一般物体認識、GAN等)
言語：Vuejs,Nuxt,Vuex, Django,Laravel
TwitterID: @Yasshieeee
githubID: @YaCpotato
ーーーーーーーーーーーーーー
AWS Lambda と APIgateway でサーバーレスなフォームアクションを作成

AWS Lambda と APIgateway を用いて, 関数の作成(Lambda)と APIgateway の設定のみで簡単にフォームアクションを実装したため, メモとしてこちらに記事を残します。

## 関数の作成
AWS の Lambda にて関数を作成します。
https://aws.amazon.com/jp/lambda/
今回は, Ruby を用いて作成しました。
主なリクエストは, lambda_handler 関数の event や context にて取得しており, 必要に応じて処理を書いていきます。

## API を作成
APIgateway にて, API を作成します。
URL はリソース名に基づいて発行されるため, 必要に応じて命名しましょう。リソースの作成後は, メソッドの追加をします。先程の Lambda 関数を使用するため, Lamda 関数の欄に先程作成した　Lambda 関数を指定します。
<img width="443" alt="スクリーンショット 2019-07-22 11.38.55.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278797/cb094b31-3071-2e74-8eed-7deee85904c0.jpeg">

## APIgateway を設定
次に API が作成されましたら, 細かい設定をしていきます。メソッドリクエストでは必要に応じて許可するパラメータや必須設定, リクエストヘッダーなどを設定します。そして, 次に統合リクエストについて設定します。今回は, lambda プロキシの統合を利用します。
<img width="558" alt="スクリーンショット 2019-07-22 11.57.55.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278797/ad42a2c8-a8c3-94db-838e-98379247b46c.jpeg">
lambda プロキシの統合を利用すると, とてもざっくりとした説明になりますが, リクエストをそのまま lambda に送信してレスポンスも[決められた形](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-output-format)を待つという感じだと思います。

##API のデプロイ
最後に作成した API をデプロイします。リソース内のアクションで API のデプロイを選択します。必要があれば, ステージを作成後にしてください。(Production など)
発行された URL はステージのそれぞれのメソッドの項目内で確認できます。