OmniAICreator/Qiita-1.07M huggingface dataset:
Laravelでrequest->input()を使う時

# Requestからデータを得る時

```php
// 推奨
$data = $request->input('data');

// 非推奨
$data = $request->input();
if($data['data']){
  // code...
}
```

`request->input()`（[ドキュメント](https://readouble.com/laravel/5.5/ja/requests.html)）を用いる際、上の記述のやり方を用いると良い。
理由は、input()の引数を指定してあげることで、値が代入されていない場合、nullが返されるから。
下の記述だと、dataの値がnullだった場合、`undefined variable`となってしまう。
謎リジェクトされてしまった件について＋対応

初めて以下のようなリジェクトをくらいました。

```
差出人: Apple
Other - Other
Hello,

We are unable to continue this app’s review because your Apple Developer Program account is currently under investigation for not following the App Store Review Guidelines’ Developer Code of Conduct.

Common practices that may lead to an investigation include, but are not limited to:

・Inaccurately describing an app or service
・Misleading app content
・Engaging in inauthentic ratings and reviews manipulation
・Providing misleading customer support responses
・Providing misleading responses in Resolution Center
・Engaging in misleading purchasing or bait-and-switch schemes
・Engaging in other dishonest or fraudulent activity within or outside of the app

During our investigation, we will not review any apps you submit. Please do not create a new developer account or make any app transfers while waiting for the investigation to be completed. Once we have completed our investigation, we will notify you via Resolution Center. Due to the nature of the investigation you will be ineligible to receive an expedited review until the investigation is completed.

We do not require any additional information from you at this time, nor do we have any additional details to share. We appreciate your continued patience during our investigation.

Best regards,
```
>差出人：アップル
>その他-その他
>こんにちは、

>お使いのApple Developer Programアカウントは、App Storeレビューガイドラインのデベロッパー行動規範に従っていないため、現在調査中のため、このアプリのレビューを続行できません。

>調査につながる可能性のある一般的な慣行には、以下が含まれますが、これらに限定されません。

>・アプリまたはサービスの記述が不正確
>・誤解を招くアプリコンテンツ
>・不正な評価とレビュー操作の実施
>・誤解を招くカスタマーサポートの対応を提供する
>・解決センターで誤解を招くような回答を提供する
>・誤解を招く購入または餌とスイッチのスキームに従事する
>・アプリの内外で他の不正行為または詐欺行為に従事する

>調査中、送信されたアプリは審査されません。調査の完了を待っている間は、新しいデベロッパーアカウントを作成したり、アプリを転送したりしないでください。調査が完了すると、解決センター経由で通知します。調査の性質上、調査が完了するまで、迅速なレビューを受ける資格はありません。

>現時点では、お客様からの追加情報は必要ありません。また、共有する詳細情報もありません。調査中、しばらくお待ちいただきますようお願いいたします。

不正なんかしてませんよ！！
ちょっとググってみたら、昨年にデベロッパが大量検挙？されたようでその名残なのか
現在もちょこちょこ起きている様子。

https://forums.developer.apple.com/thread/116331
https://qiita.com/gureta/items/b21b264dfa95051e67bb
https://qiita.com/sowtara/items/101614f8183d5b3c1419
https://www.imgn.ltd/posts/developer-account-under-investigation/

一旦ストアからアプリを削除して申請し直すというのが対策として挙げられています。
ほんとにそれでいいのかな〜と疑問に思いつつも

・ストアからアプリ削除
・bundleID変更
・ストアにアプリ新規作成して再申請

を行ってみたところ、次の日には審査をしてもらい、無事(？)に別の要因でリジェクトされました。
審査自体をしてもらっただけでもありがたい。長い人は半年とか待ってたみたいなので…
(50ドル返せよって感じですよね)

現在はこの対応で進むという認識で良さそうです。
なんとなく釈然としない感じではありますが。
ターミナル（コマンド）

# 最初に
自身で学習してきた内容を書き出していきます。
基本的には自分自身でわかるような内容になりますので、ご容赦ください。
また、誤っている点がありましたら、コメントにてご指摘ください。

**（要確認）**マークがあるものは、「実行前に必ずググる」べき内容。



# index
- 前提知識
- [初級]ターミナルコマンド一覧と付随するオプションなど



# 前提知識
**ディレクトリ　：　フォルダ
カレントディレクトリ　：　現在いるディレクトリ
ホームディレクトリ　：　ターミナルを起動したときのデフォルトディレクトリ**

またターミナルコマンドにオプションをつけることで表示内容を変更することができる。

ls コマンドオプションの一例
「-d」 + 「-l」オプションと組み合わせ

```terminal:
$ ls -ld xxx # ディレクトリ内の情報ではなく、ディレクトリの情報を表示
$ # 結果
$ drwx------+ 15 Macuser staff 510 1 20 23:43 xxx
```



# [初級]ターミナルコマンド一覧と付随するオプション
## pwd
カレントディレクトリのパスを表示。

```terminal:
$ pwd
```

## cd
カレントディレクトリにあるファイルに移動。

```terminal:
$ cd xxx  # xxxというファイルへ移動
$ cd ~/  # ホームディレクトリへ移動 [$ cd] や [$ cd ~] だけでも可能
$ cd ..  # 一つ上の階層のファイルへ移動
$ cd ./ # 現在いるディレクトリ階層へ移動

$ cd ../.. # 今より２つ上の階層へ移動
```
### 相対パス
現在作業しているディレクトリから見て、何階層上の何というディレクトリという指定方法。

```terminal:
$ cd ./desktop/work/vagrant/test # 「（現在いるディレクトリから見て）自分自身内にある、desktop内のwork内のvagrant内のtest」に移動
```

### 絶対パス（要確認）
現在作業しているディレクトリとは関係なく、ディスク全体の一番上の階層から見てどの位置かを示す指定方法。

```terminal:
$ cd / # 「ディスクの一番上の階層、rootディレクトリ」へ移動(cd ~/でホームディレクトリに戻れる)
$ cd /home # 「ディスクの一番上の階層にあるhomeディレクトリ」に移動
```

## ls
カレントディレクトにあるファイルを表示。

```terminal:
$ ls # カレントディレクトリにあるファイルやディレクトリを表示
$ ls −la # 隠しファイルを含む、全てのファイルやディレクトリの詳細を表示

$ ls -l # ファイルやディレクトリの詳細も同時に表示
$ ls -a # 隠しファイルも含め、ファイルやディレクトリを全て表示
```
隠しファイルは名前の前に「.（ドット）」がついている。

## mkdir
新しい空のディレクトリを作成。

```terminal:
$ mkdir xxx
```


## touch
中身が空のファイルを作成。

```terminal:
$ touch xxx.rb
```

## mv
ファイルを移動したり、ファイル名を変更したりできる。

```terminal:
$ mv hello.rb sample/  #hello.rbというファイルを相対パスでsample/ディレクトリの中へ移動
$ mv hello.html world.html  #hello.htmlというファイルをworld.htmlへ名前を変更
```

## cp
ファイルをコピー。

```terminal:
$ cp hello.html sample/  #hello.htmlを相対パスでsample/というディレクトリの中へコピー
$ cp test.html test2.html  #hello.htmlというファイルをworld.htmlへ名前変更しコピー
$ cp −r sample /test/  #sampleというディレクトリとその中身を絶対パスで/test/にそっくりコピーする
```

## rm
ファイルを削除。（要確認）

```terminal:
$ rm hello.html  #hello.htmlを削除
$ rm -r sample  #sampleというディレクトリとその中身を削除

$ rm -f test  #testというファイルを警告なしで削除
$ rm -rf test  #testというディレクトリとその中身を警告なしで削除
```
rmコマンドは取り返しのつかないファイルの削除となるため、コマンドにあまり慣れてない状態では使用しないこと。
[「滅びの呪文」を詳しく知る](http://japanese.engadget.com/2016/04/15/rm-rf-qanda/)
上記では「"-no preserve"オプション」が地味にポイントにもなっている。
まじで気をつけましょう。（戒め）

## open
ターミナルからFinderでファイルを開く

```terminal:
$ open .  # 現在のディレクトリをFinderで開く
$ open ~/  # ホームディレトリをFinderで開く
```

## history
これまでのコマンド履歴を表示

```terminal:
$ history  # これまで実行してきたコマンドの履歴を表示
$ history -c  # これまで実行してきたコマンドの履歴を消去
```

## source
ファイルの設定を読み込み有効

```terminal:
$ source ~/.bash_profile  #ホームディレクトリにある.bash_profileに書き込んだ設定を読み込み有効にする
$ source .bash_profile  #カレントディレクトリにある.bash_profile設定を読み込み有効にする
```



# 追加あれば、どんどん更新していきます。
駆け出しとして頑張ります。
LiDARのキャリブレーションのコツを教えます！

# LiDARをキャリブレーションする際のコツ
日立LDデータストレージのHLS-LFOM1を設置し、HumanCounterProというサンプルソフトてテストを実施しました。キャリブレーションを行う際にいろいろと学んだことをまとめておきたいと思います。
##STEP-0 事前準備
製品Webサイトより、LiDARを設置し、SDK、サンプル・ソフトウェア等を導入します。
http://hlds.co.jp/product/tofsdk

### LiDARを設置する
LiDARを適切な場所に設置します。LiDARを上下どちらの向きに設置したかは、LANケーブルが右から出ているか、左から出ているかで判断することが出来ます。マニュアル等はゲーブルが右から出ていることを前提としています。特に理由が無い場合にはケーブルが右から出るように設置しましょう。
なお、水平方向ではなく、なるべく下向きに設置したほうが、対象までの距離が短くなるため、認識精度が高くなります。複数LiDARを設置する場合も、可能であれば距離モードを短くして、上から、高密度に配置するのが良いということになります。

### ソフトウェアの導入、設定
SDKとPeopleTrackingのサンプルを日立LGデータストレージのWebサイトよりダウンロードします。StoreTol.xmlにカメラの設定があるので、IPアドレス等と正しく設定して下さい。

## STEP-1 アングルの調整をする
HumanCouunterProを用いてセンサーのアングルや位置の調整をします。その際のポイントは以下2点です。

 １．まず、y軸、z軸のアングルを0にして、x軸のみを設定する。
 ２．カメラの向きは、directionで設定する

### アングルの調整
いきなり3軸の調整を行うと混乱してしまうので、まずはy軸、z軸は0のまま、x軸の調整をします。
x軸には鉛直方向からの角度を指定します。（つまり、下から60℃くらいの角度の場合には60を設定します。）Front Viewを見ながら床が水平になるように、x軸とz軸を微調整します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117736/8a0c936f-8099-e88b-210b-c56d856aff71.png)

床が水平に表示されるようになったら、Heightで床の位置を調整します。

### directionの調整
次にdirectionを調整し、部屋に対するカメラの向きが正しくなるように調整します。壁がまっすぐ表示されるようにするのが良いでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117736/969aecb5-baff-e731-99de-ad07e202f551.png)

### 複数センサーを用いる場合の調整
センサーが複数ある場合には、同様の調整を行います。
カメラのアングルとdirectionが調整できたら、複数センサーで人の頭の位置などが重なるようにPositionを調整します。

##その他の調整
その他細かい調整をすることで検知制度を高めることが可能です。

### ノイズによる誤判定がある場合には以下のカット・オフ指定をします

・far signal cut off センサーから離れた場所のノイズをカット
・low signal cut off ノイズを閾値を指定してカット

### enable level, detect levelの指定
センサー情報を用いる高さの下限、上限と人を検知する高さの下限、上限を設定することが可能です。
下限の値が低すぎると、椅子などを人と誤検知することがありますのでその場合には、高さの下限を椅子の背もたれより高い位置にすることで誤検知を減らすことが出来ます。あまり高くすると、人がしゃがんだ場合などに検知できなくなるので、環境と使用法に応じて適切な値を設定してください。
iOSアプリのIPAの署名を更新

開発者の証明書の期限が切れるなどで証明書を更新すると、過去に作った`ipa`ファイルが開発用端末で使えなくなる。
ビルドし直すという手もあるが、時間が経っているとビルド環境が変わっている可能性が高い。

Fastlaneを`ipa`を再度署名することができる。

```bash:コマンド例
    fastlane sigh resign myapp.ipa \
    --use_app_entitlements \
    --signing_identity 'iPhone Distribution: Runo Sahara.' \
    --provisioning_profile "$HOME/Library/MobileDevice/Provisioning Profiles/myapp.Today.mobileprovision" \
    --provisioning_profile "$HOME/Library/MobileDevice/Provisioning Profiles/myapp.mobileprovision"
```

## 確認方法

次を確認したくなる。

- 有効期限が正しいか。
- Entitlements が正しく、ワイルドカードで無いこと。

### QuickLook

`ipa`や`mobileprovision`ファイルをmac上でQuickLookするツールがある。
Github: https://github.com/ealeksandrov/ProvisionQL

```bash:インストールコマンド例
brew cask install provisionql
```

### Codesign

Codesign で entitlement を確認できる。

```bash:コマンド例
unzip myapp.ipa
codesign -d --entitlements :- Payload/myapp.app/
```

## 関連コマンド

自動化するために役に立つコマンド。

```bash:現在の状態で使えるidentity一覧
security find-identity -v -p codesigning
```

```bash:アプリ側のidentity
codesign -vv -d Payload/myapp.app
```

```bash:mobileprovisionの情報を取得
security cms -D -i embedded.mobileprovision > temp.plist
APPNAME=`/usr/libexec/PlistBuddy -c "Print :AppIDName" temp.plist`
TEAMID=`/usr/libexec/PlistBuddy -c "Print :TeamIdentifier:0" temp.plist`
APPID=`/usr/libexec/PlistBuddy -c "Print :Entitlements:application-identifier" temp.plist`
EXPIRATIONDATE=`defaults read temp.plist ExpirationDate`
```

（`ipa`を解凍して`embedded.mobileprovision`をfindすれば、アプリ側のものが確認できる。）
[mac]同一アプリケーションでウィンドウを切り替えるコマンド

同一アプリケーションの切り替えする場面があったため今後のためにメモ

## 同一アプリケーションの切替
説明が難しいですが伝われば...(スクショの例え悪くてすみません。)
<img width="1422" alt="スクリーンショット 2020-02-28 16.52.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163415/3ef03c71-8797-b7a3-7bbf-4cd16d8bd49a.png">


こんな感じでテスト2と検索してるウィンドウが前面に出ていて
テストと検索してるウィンドウを前面に出したい！って感じですね。

## 設定方法
<img width="283" alt="スクリーンショット 2020-02-28 16.49.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163415/53eb4094-3fdf-a498-0307-08147cdb7358.png">

pc上部のりんごマークを押してシステム開発環境を開いてください。

<img width="662" alt="スクリーンショット 2020-02-28 16.49.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163415/892e7079-0e05-ddb6-d080-9b8385081f1a.png">

するとこんな画面が出てくるのでキーボードという項目を押してください。

<img width="649" alt="スクリーンショット 2020-02-28 16.49.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163415/644b15b9-28c6-c109-27a6-197a95c13070.png">

するとこんな画面が出てくるので
「次のウィンドウを操作対象にする」の右側を押し任意のコマンドを入力する。
自分はalt+tabを押しました。

そうするとそのコマンドでウィンドウが切替できるようになると思います。
フォルダ容量の確認コマンド

なんども調べているので備忘録

フォルダの容量を調べて大きい順に並べ変える方法
目的のフォルダで

```bash.sh
sudo du -d 1 -h | sort -hr 
```

-dで深さ，-hでkBのようなわかりやすい単位に変換
初めてのWEBアプリ作成(1)

#はじめに
 　初めまして、RHEMS技術研究室所属の白瀬です。
今回は初めてWEBアプリ作成としてTrello風ToDoリストを作成するまでの工程を投稿していこうと思います。間違った点がありましたらご指摘いただけると嬉しいです。
環境はmacのdocker,iTerms2を使用しています。
#コンテナ構築
　nginx・PHP・MYSQLのコンテナの構築をdockerで行いました。!
今回はnginxとPHPの連携させずに作って行きます。
![(無題).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562494/7f5b8adb-c241-e781-fe5b-e839b10d8b47.png)
#全体のディレクトリ
```
├── docker-compose.yml
├── nginx
│   └── nginx.conf
├── php
│   ├── Dockerfile
│   └── php.ini
├── mysql
│   └── data
└── www
    └── html
        └── index.php
```
#コマンド
##docker-compose.yml
```
version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 8080:80
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - ./www/html:/var/www/html
    depends_on:
      - php

  php:
    build: ./php
    volumes:
      - ./www/html:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:5.7
    ports:
      - 13306:3306
    volumes:
      - ./mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret


```
##nginx.conf
```
server {
    listen 80;
    server_name _;

    root  /var/www/html;
    index index.php index.html;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;    
        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
}
```
##Dockerfile
```
FROM php:7.2-fpm
COPY php.ini /usr/local/etc/php/
```
##php.ini
```
date.timezone = "Asia/Tokyo"
```
##index.php
```
<h1>Hello WORLD</h1>
```
すべて書き終えた後docker-compose.ymlがあるディレクトリまで移動し下記のコマンドを実行

```
docker-compose up -d
```

実行し終えたらlocalホスト([http://localhost:8080/](http://localhost:8080/))に接続して画像のようになりました。
<img width="596" alt="スクリーンショット 2020-02-28 16.44.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562494/4f43286d-1448-70b1-4260-1f1124c81d58.png">
残りはこれをToDoリストように書き換えていくだけだと思っています。
#あとがき
自分がWEBアプリを作ってみてくれ言われ何をしたらいいか分からずdocker trello 作成などといった検索をかけていましたが的はずれなことをしていました。
誰でもはじめはわからないことばかりなので皆さんも人に聞きましょう。
自分は4日ほど悩んでました…
【Python初心者】結局どうやってPython開発して実行すればいい？

#本稿で伝えたいこと
これは備忘録です。
ただし、私と重なる人がいれば参考になるかもしれません。
大した記事ではないので悪しからず。

##私はだれ？
- Pythonやりたい
- ネットからの情報収集ルーティーンがめんどい
- とりあえずPythonインストールしてみた
- とりあえずVisualStudioCodeをインストールしてみた
- とりあえずATOMインストールしてみた
- とりあえずDjangoインストールしてみた
- とりあえずAnacondaインストールしてみた
- とりあえずPyCharm Professionalインストールしてみたけど、あまり触ることなく30日間の無料トライアル期間が終わった
- で、結局どの環境でPythonやったらいいか分からない

３つくらい当てはまる人がいれば、とりあえず見てみても損ないかもしれません。

##とりあえず全部一回消す
いろいろインストールしてしまったせいで、PC内はごちゃごちゃです。
なので、一旦Python絡みで入れたものはアンインストールします。

はい、これで一旦スッキリしました。

##とりあえずAnaconda
とりあえずといえば語弊があるかもしれませんが、適当にAnacondaに決めたわけではないです。
Anaconda入れとけば、とりあえず漏れなく操作できそうだから。（要は環境構築で手間が取られなそう）
パッケージ（要は定食みたいなもの）なので。

「***食うもん迷ったら、とりあえず定食頼め！***」って、
確かおじいちゃんが言ってたのも思い出したので。

ライブラリもpipに比べると少ないようですが、当面は困らないでしょう。
対話式のコード記述ですぐ確認できて、かつ、メモと一緒に保存できるJupyter Notebookもあるし、
科学計算分野を得意とした統合開発環境「Spyder」もあります。

今の私がやってみたいこと（分析系）は、Anaconda入れとけば網羅してそうなんです。

##一息ついたら触ってみる
こんな感じで進めようと思っています。
- Jupyter Notebookでお勉強（コード書いて実行して～の繰り返し）
- 書いたソースで色々取得して分析してゴニョゴニョする

##まとめ
Pythonのにわか知識で頭の中やPC内が渋滞したら、一旦リセットして便利な奴入れて、色々いじくって体感してから自分に必要な環境を構築してみるのも手ってことです。

最後に、、「Pythonやるときは必ず仮想環境でね」。
でないと、ライブラリ同士が干渉してしまったり、余計なエラーで時間とられちゃうかもしれないですよ。ってどこかで見かけました。
GAS Drive関連メモ

Driveクラスをちょっとつかったのでメモ
やりたかったのは指定のファイルと同じフォルダに名前を変えてコピーをつくる、だけだったんだけど。
色々時間かかったので忘れないようにメモ
[リファレンス](https://developers.google.com/apps-script/reference)大事だねぇ。

1.前準備

権限設定しておく（ここではDrive関連のエントリだけ記載
（スプレットシートなど他の操作をする場合はそちらのエントリも必要

```appsscript.json
{
  "oauthScopes": [
    "https://www.googleapis.com/auth/drive.readonly",
    "https://www.googleapis.com/auth/drive",
  ]  
}
```

2.ファイルの取得
上記の権限があれば以下でファイルオブジェクトが取得できる
[Fileクラス](https://developers.google.com/apps-script/reference/drive/file)
FILE_IDは開きたいDriveファイルのID

```javascript

    let file = DriveApp.getFileById(FILE_ID);

```

3.親フォルダの取得
GoogleDocはファイルが一つ以上のフォルダに所属しちゃうので、親フォルダをとろうとすると、フォルダリストのイテレータから探さないといけない
[Folderクラス](https://developers.google.com/apps-script/reference/drive/folder)
[Folderイテレータ](https://developers.google.com/apps-script/reference/drive/folder-iterator)

```javascript

    let folderIterator = templateFile.getParents();
    while(folderIterator.hasNext()){
        let folder = folderIterator.next();
        console.log(floder.getName());
    }

```
4.コピーの作成
コピー自身は簡単

```javascript
    let file = DriveApp.getFileById(FILE_ID);
    let parentFolder = DriveApp.getFolderById(FOLDER_ID);
    file.makeCopy(); // 純粋にコピー
    file.makeCopy(COPY_NAME); //COPY_NAMEで指定したファイル名でつくる
    file.makeCopy(COPY_NAME,parentFolder); //指定したフォルダに指定したファイル名で
```

5.おまけ
そういえば、ファイルコピーしたらスクリプトもコピーできてた
よく考えたら当たり前だけど。
IntelliJ IDEAにて、"keypair '****' is corrupt or has unknown format."って言われたときの処方箋

# What's Problem
SSHの鍵を以下のコマンドで生成

```bash:SSH鍵ペアの生成
# メールアドレスは自分のに置き換えてね
$ ssh-keygen -t rsa -b 4096 -C hogehoge@fugafuga.com
```

生成した秘密鍵(`.ssh/id_rsa`)を用いて、IntelliJからサーバ上へSFTPでの転送設定を行う。
[Tools] ＞ [Deployment] ＞ [Configuration] ＞ [対象のサーバを選択（なければ「＋」から足してね）]

|設定項目|設定値|
|---:|:---|
|Type|SFTP|
|Host|転送したい先のサーバ名|
|User name|サーバにログインする時のユーザ名（だった筈）|
|Authentication|Key pair OpenSSH or PuTTY|
|Private key path|上記で生成した秘密鍵のフルパス|
|Passphrase|秘密鍵のパスワード|
|Test Connection|テスト接続を行いたい場合に押す|
|Root path|転送先のサーバのプロジェクトルート（で合ってたかな？）|
|Web server URL|対象のサーバのURL|
|Advanced|追加の設定をしたい場合に各自で設定する|

で、ソースを修正してサーバへ自動転送する際に、「File Transfer」に以下のエラーログが。


```text:File_Transferのログ
# 鍵の内容とか時間は適当
[20YY-MM-DD hh:mm] Automatic upload
[20YY-MM-DD hh:mm] Automatic upload failed: keypair '/Users/user_name/.ssh/id_rsa' is corrupt or has unknown format.
 Only SSH2 keys in OpenSSH format (DSA, RSA or ECDSA) or PuTTY Private Key *.ppk keys are supported.
 Error message: invalid privatekey: [a@abcabc
```

大切なのはここ。

```
Only SSH2 keys in OpenSSH format (DSA, RSA or ECDSA) or PuTTY Private Key *.ppk keys are supported.
```

# Resolve
以下で鍵ペア作り直して、再度IntelliJへ登録。

```bash:SSH鍵ペアの生成（再）
ssh-keygen -t rsa -b 4096 -m PEM -C hogehoge@fugafuga.com
```

Test Connection -> 成功。
<img width="403" alt="Test Connection成功.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434838/878998f1-1cd2-1430-a080-f70729e375ac.png">

# Thanks
* [JetBrains製品でSSH接続時に秘密鍵が利用できない場合の一時対処法 - Qiita](https://qiita.com/anon5r/items/36d1c1f953b0fafb91aa)
プログラミング演習問題(支払い可能性判定問題編)


社内の勉強会用に準備した問題とその解説を書いていく。
下の方に解答を載せているので自分で解きたい人はスクロールしすぎないように。

# 問題

ある世界には硬貨(紙幣)が 2 種類しかない。その世界で売買行為が行われる際に、たまに支払いができないことが起こった。なので、お店の人が価格をつける際に、その金額が支払いができるかどうか知りたい。

# 例

12 円と 66 円の世界である時、6 円の支払いは可能である。それは 12 円玉を 6 枚払って 66 円玉を 1 枚お釣りとしてもらえばいい。
しかしその世界では 7 円の支払いは不可である。その世界では偶数の金額しか払えないからである。

# 問題設定

* 入力: 自然数 $a, b, n \, (1 \leq a, b, n \leq 10000)$
* 出力: $a, b$ 円の 2 種類の硬貨しかない世界で $n$ 円の支払いができるなら true. 支払いができないなら false

# 解答までの雑談

発展問題として下記の設定を付け加えた。

> 使用枚数の制限がなかったため、枚数の多い売買は数え間違い多発し社会問題となった。そこで政府は 1 回の売買行為に対して(支払いとお釣り)合計で 20 枚までしか受け渡しできない法律を作った。その場合でも対応できるようにしたい。

そのとき、発展問題の方が簡単では？というツッコミが入った。そのツッコミは予想済みだった。最初の問題は、ある数学知識を使うと簡単に解けるが、知らないと枚数の範囲がないので一気に難しくなる。出題意図はそこにあった。

# 解答例

```php

function isPayable($a, $b, $n) {
    return $n % gcd($a, $b) === 0;
}

function gcd($a, $b) {
    return $b === 0 ? $a : gcd($b, $a % $b);
}
```

# 解説

これは一次不定方程式そのままである。
つまり $ax+by=n$ を満たす整数 $x$ と $y$ が存在するかどうかという数学の問題に置き換えられる。この時 $x$ と $y$ が正なら支払い、負ならお釣りとしてもらうことに対応している。

例で述べた 12 円と 66 円の世界で 6 円の支払いを考えると $12x + 66y = 6$ の一次不定方程式を解けばいい。解の一つは $x=6, y=-1$ である(12 円玉 6 枚支払って 66 円玉 1 枚お釣りとしてもらう)。

ここで、一次不定方程式 $ax+by=n$ が整数解 $x, y$ を持つことの必要十分条件として $n$ は $a, b$ の最大公約数の倍数であるというのが知られている。

それを実装したのが上記の解答例となっている。

# 発展問題の解答例

```php

function isLimitPayable($a, $b, $n) {
    $filter = function ($x) use ($a, $b, $n) {
        $y = ($n - $a * $x) / $b;
        return ($n - $a * $x) % $b === 0 && abs($x) + abs($y) <= 20;
    };  
    return (bool)count(array_filter(range(-20, 20), $filter));
}

```

# まとめ

数学は偉大！
MosquittoをMacにインストールして起動する方法

#はじめに
みなさん！こんにちは！！
今回はMosquittoをMacにインストールして起動するところまでの方法をまとめていきたいと思います:clap_tone2::clap_tone2::clap_tone2:

#Mosquittoとは
早速インストールといきたいところですが、一旦Mosquittoについて一言だけご紹介させてください。

MosquittoというのはMQTTプロトコルを実装する、オープンソースのメッセージブローカーです。

うーん、なるほど!あれ...今度はMQTTプロトコルという用語が出てきましたね:disappointed_relieved:
ちょっと脱線(?)な気もしますがせっかくなのでMQTTプロトコルについても一言だけ説明しときますね:point_up_tone2:

MQTTプロトコルは、publish/subscribeモデルで作られたとても軽量なメッセージプロトコルなんです！
ちなみに「<b>M</b>essage <b>Q</b>ueue <b>T</b>elemetry <b>T</b>ransport」の略なんですよ〜

簡単に絵を書くとこんな感じですね:sunglasses:
![Pub:Sub図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264523/2d59e8c0-e32e-eaae-a63e-2d66fe974575.png)


もっと詳しく知りたい！！という人は下記のリンクを参考にしてみてください！
Mosquittoは[こちら](https://mosquitto.org/)
MQTTは[こちら](http://mqtt.org/)

#Mosquittoのインストール
みなさま大変お待たせいたしました。
それではMosquittoをインストールしていきたいと思います！

ターミナルを開いて...

```
$ brew install mosquitto
```
これでOKです！！:ok_hand_tone2:

#Mosquittoの起動...しかし...
インストールもできたので、Mosquittoを起動していきましょーう！

起動させるにはこのコマンドです！

```
$ /usr/local/sbin/mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf
```

どうだ！！

```
-bash: /usr/local/sbin/mosquitto: No such file or directory
```

なんでぇ〜〜:confounded:

#試行錯誤の日々

そんなの見つかんないかんなということだったので、作成していきます。

```
$ sudo  mkdir -p /usr/local/sbin
```

で、この後どうすんだ！？！？
どうにもならないので、もう一度Moaquittoをインストールするコマンドを叩いてみました。すると...

```
Warning: mosquitto 1.6.8 is already installed, it's just not linked
You can use `brew link mosquitto` to link this version.
```

むむっ:expressionless:
お医者さんにも聞いてみましょう:hospital:

```
$ brew doctor
```

このbrew doctorというのを初めて使ったのですが、なかなかいいですね:thumbsup_tone2:

診断の結果、最後の方にこう書かれていました。

```
Warning: You have unlinked kegs in your Cellar.
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  mosquitto
```

unlinkだと診断されました:point_up_tone2:

#いざ治療へ
`Run brew link`と書かれてたので、これを入力すればいいのか？？

```
brew link mosquitto
```

すると...

```
Linking /usr/local/Cellar/mosquitto/1.6.8... 
Error: Could not symlink sbin/mosquitto
/usr/local/sbin is not writable.
```

さすがにぴえんです:cry:
こうなったら権限を与えましょう！

```
$ sudo chown -R $USER /usr/local/sbin/
```

こうしてもう一度`brew link mosquitto`チャレンジです！！

```
Linking /usr/local/Cellar/mosquitto/1.6.8... 30 symlinks created
```

きたーーーーーーーーーーーーー:raised_hands_tone2::raised_hands_tone2::raised_hands_tone2:

#決戦の時
いよいよ再戦の時です！Mosquittoを起動させてみましょう。
起動させるコマンドを入力します。

```
$ /usr/local/sbin/mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf
```

ドキドキ:pray_tone2:

結果は...

```
mosquitto version 1.6.8 starting
Config loaded from /usr/local/etc/mosquitto/mosquitto.conf.
Opening ipv6 listen socket on port 1883.
Opening ipv4 listen socket on port 1883.
```

やったー！！！大成功です！！！！！！:v_tone2:

#おまけ
蚊は英語でmosquitoなので、Mosquittoと`「t」`の数が違うんですね！

そうそう蚊で思い出したのですが、内定式の懇親会の自己紹介で「自分を動物に例えると？」というお題があったんですけど、そこで私は「蚊です！！」といったのを思い出しました。

蚊のようにたくさんの人の知識を吸い取ります！って言ったんですけど、めちゃくちゃよきじゃないですか？

これからもいろんな人の技術を吸収してパンパンになりたいと思います！
叩かれると潰れちゃうので叩かないでくださいね。
モスキートだけに、ブンブン。
isset について

##issetを使う機会が多かったのでメモを残しておきます。

###issetとは
変数にnull以外の値がセットされているかどうか検証する。

まず、３つの変数を初期化しておく。

```php:qiita.php
$a = 'a';
$b = null;
$c = ['aa'=>'a', 'bb'=>null];
```

以下の状態でNoticeエラーが発生するのはどれか。

```php:qiita.php
echo $a."\n"; //a
echo $b."\n";//出力なし
echo $d."\n";//Noticeエラー
echo $c['aa']."\n";//a
echo $c['bb']."\n";//出力なし
echo $c['dd']."\n";//Noticeエラー
```

変数d,c['dd']は初期化されていないので参照した瞬間にNoticeエラーになる。

以下の関数を定義

```php:qiita.php
function echoBool($bl){
  if($bl) echo 'YES';
  else echo 'NO';
}
```
isset()をechoBoolした結果

```php:qiita.php
echoBool(isset($a)); //YES
echoBool(isset($b)); //NO
echoBool(isset($c)); //YES
echoBool(isset($d); //NO    ＊
echoBool(isset($c['aa'])); //YES
echoBool(isset($c['bb'])); //NO
echoBool(isset($c['dd'])); //NO　　＊
```

＊の場合もNoticeエラーは発生しない。
issetの特性上、初期化していない変数を参照した時もNoticeエラーが発生しない。

この特性を使って、問い合わせフォームなどのバリデーションチェック実装時などに、「初期化されているか分からない変数」の中身を参照したいときに利用する。

何かご指摘ありましたら遠慮なくコメント下さい。
Opencv install奮闘記

#環境
ubuntu:16.04
GPU:GeForce GTX 970
CUDA:10.2
cudnn:7.6.5

##WITH CUDAについて
ONにした場合

* GPUでの高速処理が可能
* 自分の場合はエラーが止まらなかった→ので、諦めた

##opencv-contribについて
CUDA使わないのであれば、いらなさそう

##参照サイト
1. https://stackoverflow.com/questions/46584000/cmake-error-variables-are-set-to-notfound
2. https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
3. https://qiita.com/tomoaki_teshima/items/4401349431ce266dc319
ブラウザバックした際に、画面をリロードでうまくいかないとき。

備忘録的に残します。

ブラウザバックの際に、画面をリロードしたいって時がありまして。

```js
window.onpageshow = function(event) {
	if (event.persisted) {
		 window.location.reload();
	}
};
```

これでは、firefoxはできたけど、chromeとEdgeでは効かないって話でした。

なので、

```js
window.onpageshow = function(event) {
	if (event.persisted || window.performance && 
            window.performance.navigation.type == 2) {
		 window.location.reload();
	}
};
```
これで、できました。
めでたし、めでたし。

※ただし、ブラウザバックだけでなく、フォワードした際にも入る可能性がある（未検証）ので、他の制御はいるかも。

参考：元ネタは[ここ](https://stackoverflow.com/questions/17432899/javascript-bfcache-pageshow-event-event-persisted-always-set-to-false)です。
SWI-Prolog の http クライアントの使い方 (Post)

```pl:http_post.pl
/* ------------------------------------------------------------------- */
/*
	http_post.pl

						Feb/28/2020
*/
/* ------------------------------------------------------------------- */
:- use_module(library(http/http_client)).

:- initialization main.
main() :-
	format('*** 開始 ***\n'),
	Url_in = 'https://httpbin.org/post',
	http_post(Url_in,form_data([ user = 'jiro',password = '123456']),
		Data, []),
	format(Data),
	format('*** 終了 ***\n'),
	halt.
/* ------------------------------------------------------------------- */
```

実行結果

```text
$ swipl -f ./http_post.pl
*** 開始 ***
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "password": "123456", 
    "user": "jiro"
  }, 
  "headers": {
    "Content-Length": "243", 
    "Content-Type": "multipart/form-data; boundary=------1582874349.3074793518a5ea421823a9", 
    "Host": "httpbin.org", 
    "Mime-Version": "1.0", 
    "User-Agent": "SWI-Prolog", 
    "X-Amzn-Trace-Id": "Root=1-5e58beeb-4b81029675de664fb66721a9"
  }, 
  "json": null, 
  "origin": "153.233.38.78", 
  "url": "https://httpbin.org/post"
}
*** 終了 ***
```

## 確認したバージョン

```text
$ swipl --version
SWI-Prolog version 9.0.4 for x86_64-linux
```
CD/USBメモリへの書き込み不可設定(Windows10)

業務PCに外部媒体への書き込みを禁止したかったので、作業した手順をメモ書きしておく。

##前提条件
前提条件として、Windows10のバージョンを確認する必要がある。

**Windows10　Pro　→OK**
**Windows10　Home　→CDへの書き込み不可設定はできない**
※Homeバージョンは、頑張れば設定自体は可能だが、正常に動作しなかった(CDへ書き込みできてしまった)。

バージョンの確認方法は、
1. Windowsキーと「X」キーを同時に押して、左下のメニューが出てくるので「システム」をクリック。
2. 「バージョン情報」→「Windowsの仕様」にある「エディション」の欄を確認。

##CDへの書き込み不可設定
1. Windowsキーと「R」キーを同時に押して、「ファイル名を指定して実行」で「gpedit.msc」と入力し、「OK」を押す。
2. 左側のツリーを、「ユーザーの構成」＞「管理用テンプレート」＞「Windowsコンポーネント」＞「エクスプローラー」と順にたどっていく。
3. 右側の窓にある「CD焼き付け機能を削除する」を開き、「**有効**」にする。

##USBメモリへの書き込み不可設定
1. Windowsキーと「R」キーを同時に押して、「ファイル名を指定して実行」で「regedit」と入力し、「OK」を押す。
2. 左側のツリーを、コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
にてControlを右クリック → 新規 → キー(K)　を選択。
3. 新規キー名：**StorageDevicePolicies**　と入力。
4. StorageDevicePoliciesを右クリック → 新規 → DWORD(32ビット) 値(D)　を選択。
5. 新しい値#1の名前変更 → **WriteProtect**　と入力。 
6. WriteProtectをダブルクリック → 値のデータ(V)に**1**を入力。
7. 再起動にて完了

※書き込みを可にするにはWriteProtectの値を**０**に戻して再起動
3パターンあるGKE Private Cluster構成の違い

#はじめに
GKE Private Clusterの構成は、以下の3パターン構成ありますが、マニュアルを読んでもイメージしづらいため整理してみました。

- 1. No client access to the public endpoint
- 2. Limited access to the public endpoint
- 3. Unrestricted access to the public endpoint

https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters

#GKE Private Clusterとは
Private Clusterは、ワーカーノードにPublic IPが付与されていないGKE Clusterです。Master nodeで起動しているAPI serverに対してkubectlを実行するエンドポイントの設定方法によって3つの種類が構成可能です。

>
Google Kubernetes Engine（GKE）で限定公開クラスタを作成する方法について説明します。限定公開クラスタでは、ノードに RFC 1918 の内部 IP アドレスのみがあるため、ワークロードが公共のインターネットから隔離されるようになります。限定公開クラスタの仕組みについて詳しくは、限定公開クラスタをご覧ください

https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters

##前提となる用語の説明
Private Node: Public IPがアタッチされていないWorker Node。
Public Endpoint: GCP Managed VPC上で起動しているMaster Nodeにアクセスするためインターネットに公開されたエンドポイント。
Private Endpoint: GCP Managed VPC上で起動しているMasterNodeにVPC Peeringを使って接続するためのエンドポイント。インターネットを経由しない。
Master Authorized Network: Public Endpointへのアクセスが許可されたネットワーク。

#Public Cluster
Private Clusterを有効しないでGKE Clusterを作成すると、Public Clusterになります。
Public Clusterは、Worker NodeにPublic IPが付与されています。また、Master NodeへのアクセスはPublic Endpoint経由になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/117b2a76-7028-f22a-14b8-d9b0006e37da.png)

#1.No client access to the public endpoint
Woker NodeにPublic IPが付与されおらず、Master NodeにアクセスするためのPublic Endpointもない構成です。Worker node(Kubeletなど)からMaster Node(API Server)の通信は、VPC Peeringを経由して行います。kubectlなどの処理も、VPC Peeringを経由してPrivate Endpointに対してアクセスします。
kubectlは、Worker NodeがホストされたVPC内にGCEインスタンスを起動するとアクセス可能となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/0e229b59-13ef-494a-ec44-1f8f7a0a96a7.png)

#2.Limited access to the public endpoint
Woker NodeにPublic IPが付与されていないが、Master NodeにアクセスするためのPublic Endpointは提供された構成です。ただし、Master NodeのPublic Endpointにアクセス可能なネットワークを制限します。許可されたネットワークは、マスター認証済みネットワークと呼びます。
VPC内のGCEインスタンスを立ててkubectl叩いてもMaster Nodeにはアクセスできない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/190ac6b3-58cf-89c4-2c74-59a4d5c9781d.png)

#3.Unrestricted access to the public endpoint
Woker NodeにPublic IPが付与されていないが、Master NodeにアクセスするためのPublic Endpointは提供された構成です。Master NodeのPublic Endpointにアクセス可能なネットワークを制限しません。
VPC内のGCEインスタンスを立ててkubectl叩いてもMaster Nodeにはアクセスできない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/ffe154f5-7135-2926-1b66-75c1ea66b378.png)

#表で整理してみる
表で整理すると以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/336e8811-31f7-c5ea-6805-249698bc2308.png)

Cluster作成時のgcloudコマンドのオプションの違いとしては以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/af7e9322-8d7b-6921-3621-22157563d826.png)

#投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。
Qiitaはじめてみました。よろしくお願いします。

みなさまはじめまして。本日からQiitaを始めたyamaryu777です。

ふとしたことからデータサイエンス界隈の勉強・分析は
足掛け9年（うち4年間は本業にかまけて冬眠）してたことに気づき、
しかもそれが本業に生きることもなく来てしまっていたので、
これを機に何かしらのアウトプットをここに残していければいいなと思っています。

他の方の役に立つようなことを書こうなんて恐れ多くて思えませんが
自分がやってきたことやこれからやることを備忘録がてら書いていこうと思います。

# 自己紹介

* 学部時代（工学部）に数値流体力学（CFD）がきっかけでプログラミングを始める。
* 大学院で計量経済学に出会い、思えばこれがデータサイエンスとの出会い。（当時はそんな認識はなかったです。）
* Fortranから始め、その後C, C++（途中で飽きる）, Ruby, R, Stata, Pythonと触り、大学院時代はRとStataをメインに使用。
* 計量経済学をメインにやっていた傍ら、有志での機械学習勉強会にて機械学習を学び始める。当時は全てRで実装。
* その後、データサイエンスとは別の道で就職して4年で海外MBA取得を決意し、今に至る。
* MBA2年目に計量経済分析を活用する機会があり、それを機にデータサイエンス再入門。
* [Udemy](https://www.udemy.com)講師の[Jose Portilla](https://www.udemy.com/user/joseportilla/)氏の講義を中心にリハビリを兼ねた勉強中。（←[Jose Portilla](https://www.udemy.com/user/joseportilla/)氏は分かりやすい英語を話してくれますし、構成や内容もしっかり練られているので、英語でも構わない方にはおすすめです。）
* とりあえずの目標は競馬で安定的にお小遣いを稼ぐこと。

# 作業環境
* MacBook Pro (Early 2013, Core i5 2.6GHz, RAM8GB)
* iPad (第6世代) + inateckキーボードケース
* Google Colaboratory
* Python(Anaconda), Postgre SQL, AWS

はじめはMacにAnacondaを入れてローカル環境で作業していましたが、Deep Learning始めてから計算時間が長くなりすぎたので、今はPythonについてはColaboratory上で全て済ませています。

たまにAWS EC2上に立てたUbuntuでPySpark使うこともあります。

# おわりに

一応まだ現役？のMBA学生なので、どこまで更新できるか分かりませんが
できるだけ書いていきたいと思っています。

UdemyのJose Portilla氏がやっている講義で目ぼしいものはだいたいこなしてしまったので、
今後はKaggleのデータセットや自分の興味のある分野（競馬とは）で応用していきたいと思います。


了
MacでGoogleTestビルドエラーerror: no member named 'make_tuple' in namespace 'std'

ハマったのでメモ。

# 手順
GoogleTestを落としてきてビルド。

```
mkdir build
cd build
cmake ..
make
```

# エラー内容
makeで以下のエラーが出た。

```
/googletest/googletest/include/gtest/internal/gtest-port.h:842:12: error: no member named 'make_tuple' in namespace 'std'
using std::make_tuple;
      ~~~~~^
・・・
```

# 対策
/googletest/CMakeLists.txt
の先頭に
`set(CMAKE_CXX_STANDARD 17)`
を追記。

```
cmake ..
make
```

でエラー無しでビルドできた。


# 参考
https://github.com/google/googletest/issues/1519#issuecomment-523735998
【C#】プロパティ名を文字列として取得

久しぶりにWPFを使っていてViewModelのPropertyChangedを発行する際の
プロパティ名を固定値ではなく動的に取得するようにしておきたかったのでメモ。
＃使わなくなるとすぐ忘れてしまったので…

```C#:サンプル
public class HogeModel : INotifyPropertyChanged
{
    int _param1;

    public int Param1
    {
        get { return _param1; }
        set { _param1 = value; OnPropertyChanged(); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
```

[CallerMemberName]で呼び出し元のメソッド名を取得出来るので
単純に自身の変更通知を行う場合は引数を指定しなくても
勝手に通知してくれます。
別プロパティの変更通知を行う場合や
通常のメソッド内で通知する場合は諦めてnameof演算子で取得するしかありませんが…。
OpenCV For Unity VideoWriter.write() 出来ない　【解決済み】

今朝（https://qiita.com/wirsind55/items/98328600991fcf6218ce）の続編である。

やりたいことはUnity上でCameraの動画キャプチャを取ってavi保存すること。

有料のもの（OpenCV for Unity）使えばいけんじゃないかとたかを括っていたが、いけない。。

コードは最小限にしてみて下記のとおり。

```ScreenCapture.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OpenCVForUnity;
using OpenCVForUnity.VideoioModule;
using OpenCVForUnity.VideoModule;
using OpenCVForUnity.CoreModule;

public class ScreenCapture : MonoBehaviour
{
    public Camera _targetCamera;

    private VideoWriter _videoWriter;
    private int cnt = 0;
    
    // Start is called before the first frame update
    void Start()
    {
        _videoWriter = new VideoWriter(@"output.avi",  VideoWriter.fourcc('D', 'I', 'V', 'X'), 30.0, new Size(448, 448), true);
    }

    // Update is called once per frame
    void Update()
    {
        CaptchaScreen();
        cnt.ToString() + ".png");
        cnt++;
        if(cnt >= 500)
            _videoWriter.Dispose();
    }

    public void CaptchaScreen()
    {

        Mat srcMat = new Mat (new Size(448, 448), CvType.CV_8UC4);

        _videoWriter.write(srcMat);
    }
}

```

結果として、new VideoWriterでoutput.aviは作成されているけど、
その後のwriteが効いておらず作成されたaviファイルのファイルサイズは0のままで破損状態という扱いになる。

それまでに何か間違っているのでしょうか。。。
いかんせんUnity、OpenCVの記事はそこまで多くないし分からない。
誰か教えて下さい。

だいぶハマってしまったので、この方法は一旦あきらめ、別の手段に移ります（画像を大量生産して、その後でOpenCVで画像を動画にする）。

以上、しゅん。

⇒　コメント欄にて解決されました:sob:
SublimeTextをVue.jsに対応させる手順

# はじめに
SublimeTextでVue.jsを扱う際に拡張子（.vue）ファイルをシンタックスハイライトしてくれるプラグイン導入手順です

# 環境
- OS：macOS Catalina v10.15.1
- SublimeText：V3.2.2

# 前提条件
パッケージコントローラをインストールしていること

※インストールがまだの場合は以下のページを参照
[SublimeTextの日本語化手順](https://qiita.com/ta_morimoto/items/c629b63980bcfe9a50c3)


# Gitリポジトリの追加
コマンドパレットを開く
<ショートカットキー>
　Win/Linux : ctrl+shift+p
　Mac : cmd+shift+p
<メニューから選択>
　メニューバー > Tools > Command Paletteを選択

「Package Control: Add Repository」を入力、選択してEnter
![sublimeText#vue1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90440/87e21aa3-4db8-4a20-3f4f-138a39de2a3b.png)

画面下部のURLに
https://github.com/vuejs/vue-syntax-highlight.git
を入力してEnter
![sublimeText#vue2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90440/42d6d00d-2b02-acdb-98c8-48e6161bd0a8.png)

# プラグインのインストール
コマンドパレットを開いて「Package Control: Install Package」を入力、選択してEnter
![sublimeText#vue3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90440/c1a4d90d-7a2d-df04-5f0b-f4776a17c58c.png)

「Vue Syntax Highlight」を入力、選択してEnter
※候補が2つ出てきましたがキャメルケースの名前の方を選択しました
![sublimeText#vue4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90440/01439fb8-fbde-1530-2f6a-ad7ee2b9920a.png)

以上でプラグインの導入は完了です

あとはSublimeTextを再起動して拡張子「.vue」ファイルを開くとしっかりとシンタックスハイライトしてくれています
![sublimeText#vue5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90440/bd6c028d-c9e0-bc8a-949e-fe26717a5f64.png)
Ansible: ターゲットノードでpython3を使用するansible.cfg設定は、ansible_python_interpreterでは無くinterpreter_python


# Ansibleでターゲットノードにてpython3を使用する

ansible.cfgによるpython3指定でトラブルに遭遇したので備忘

## 環境
ansible 2.9.4, 2.9.5

## 変数で設定
変数で設定する場合には、**ansible_python_interpreter**を使用する。

- ansible-playbookコマンドに対する-eオプションによる設定例

```
$ ansible-playbook -e ansible_python_interpreter=/usr/bin/python3 site.yml
```


- inventoryにおける設定例

```ini:inventory
[all:vars]
ansible_python_interpreter=/usr/bin/python3
```

- play vars, task varsなどにおける設定例

```yaml:playなど
vars:
  ansible_python_interpreter: /usr/bin/python3
```



[公式: Python 3 Support > Using Python 3 on the managed machines with commands and playbooks](https://docs.ansible.com/ansible/latest/reference_appendices/python_3_support.html#using-python-3-on-the-managed-machines-with-commands-and-playbooks)


## ansible.cfgによる設定

ansible.cfgにおいて設定する場合、**ansible_python_interpreter**では無く、**interpreter_python**を使用する事に注意。


```ini:ansible.cfg
[defaults]
interpreter_python=/usr/bin/python3
```


[公式: Ansible Configuration Settings > interpreter-python](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#interpreter-python)
NumPyのzerosは大きさ0でも定義できるよという話

# 概要

- NumPyでは`np.zeros((0, 4))`みたいに大きさ0のzerosを定義できる
- これを使うと空リストを定義してappend()で追加していくみたいなことがarrayでもできる

# NumPyのarrayでもlist.append()みたいなことがやりたい

## リストはappendが使える
Pythonでリストを作るときによくやるのが

```python
a = []
for i in range(10):
    a.append(1)
```

みたいなやつ

## Arrayにはappendはない
NumPyのArrayで同じことをやろうとするとnumpy.vstack()やnumpy.hstack()を使うことになる
→ くっつける2つのArrayの行数(or 列数)が合わないといけないので、初めにshape=(1, 4)のArrayを定義してました

```python:ダメな方
import numpy as np
a = np.zeros((1, 4))
for i in range(10):
    ones = np.ones((1, 4))
    a = a.vstack((a, ones))
a = a[1:, :] # 最初に定義した部分だけ除いてる
```

## 大きさ0のArrayが定義できる
初めにshape=(1, 4)のArrayを定義してから除く操作が気持ち悪く感じていたので、試しに大きさ0のzerosを定義したらいけた

```python:見やすい方
import numpy as np
a = np.zeros((0, 4)) # 大きさ0のzeros
for i in range(10):
    ones = np.ones((1, 4))
    a = a.vstack((a, ones))
【Laravel勉強会Day1】Webフレームワークとは

#はじめに
インターン先でLaravelについて勉強＆他のインターン生に教えることとなりました。
いろいろとQiitaにて情報共有させて頂きます。
自分の経歴としては、

- 大学でロボットにおける画像認識、音声認識をPython、C++で2年弱
- Webアプリ開発でRuby on RailsとGo(Gin)を1年弱程度

しかやってません。一緒に勉強できたらな、と思います。

# Laravelについて
今回学んでいくLaravelとはWebフレームワークと呼ばれるものです。
###Webフレームワークとは
Webアプリを作る上での最初の骨組みのようなものです。
なんだって一から作るのはめんどくさいじゃないですか。
建物を新しく建設するときだって、最初は骨組みから作りますよね？
その骨組み自体がWebフレームワークであり、これが世の中には複数公開されています。
そんなWebフレームワークの中で有名なものの一つがLaravelです。
Webアプリ開発者は骨組みをインストールし、その骨組みに独自の機能を肉付けしてWebアプリを作成する。
そんなイメージです。

###例えば
今の世の中Webアプリが至るところに溢れていますけども、ほとんどのアプリがユーザーIDやメールアドレスやらパスワードが存在しますね？
そういったものを皆さんはフォームに記入しWebアプリに送信することでユーザーアカウントを新規作成でき、それによってWebアプリのサービスを一人のユーザーとして使うことができます。

また、Twitter等のサービスでしたら、そのユーザーの投稿、そのユーザーがフォローしているアカウント…、その他いろいろな情報が存在します。
これらの情報の処理等を開発者がプログラミングする際にWebフレームワークが必要なわけです。
(厳密には「必要なもの」ではなく「効率的に開発するために必要なもの」ですね。)

#勉強の進め方
基本的に[Laracast](https://laracasts.com/series/laravel-6-from-scratch)に沿って勉強しようと考えてます。
がんばりましょ〜！
ただ、次回は開発環境の構築を行なっていこうと思います。

#まとめ
随分適当だが、Webフレームワークについて解説した。
次回: [初心者のための環境構築](https://qiita.com/keinko/items/ca8cf65a5e1f92402ed4)
YellowfinをOpenJDK（Amazon Corretto 11）で動かす

Yellowfinを動作させるにはJava 1.8以降が必要ですが、Oracle JavaだけでなくOpenJDKにも対応しています。
今回はOpenJDKディストリビューションのひとつである [Amazon Corretto（アマゾン コレット）](https://aws.amazon.com/jp/corretto/) を使って、Yellowfinを動かしてみます。

# Amazon Correttoのインストール

Amazon CorrettoにはJDK 8ベースのCorretto 8と、JDK 11ベースのCorretto 11がありますが、今回は11を使用することにします。

以下のダウンロードページから、
https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html

最新版のWindows用のインストーラをダウンロードします。
https://corretto.aws/downloads/latest/amazon-corretto-11-x64-windows-jdk.msi

ウィザードに従ってインストールを進めます。
<img width="503" alt="スクリーンショット.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116818/ecff8029-eb67-12f1-0fda-012c2512dd19.png">

デフォルトのまま何も変更せずにインストールすれば、システム環境変数の**JAVA_HOME**と**Path**が登録されますので、別途設定の必要はありません。
<img width="579" alt="c2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116818/4b393931-5314-9401-37db-8f905a8b08ad.png">

コマンドプロンプトで確認すると、Corretto 11が有効になっています。
<img width="975" alt="c3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116818/e40472d3-0da3-2750-7851-5e1cd6680211.png">

# Yellowfinのインストール＆実行

Yellowfinのインストーラを起動し、[インストール手順](https://support.yellowfin.co.jp/hc/ja/articles/360001025428-Yellowfin%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86)に従ってインストールを進めます。
<img width="746" alt="スクリーンショット.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116818/9453d545-ea73-4b83-bf5b-8359117b7e90.png">

インストール後、Yellowfinを起動してみると問題なく立ち上がりました。
<img width="1406" alt="スクリーンショット 2020-02-28 15.32.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116818/8ab18af6-0791-4934-f469-0c8d71dbf2f3.png">
Xojo でリモート開発

# Linux の開発が辛い

Xojo はマルチプラットフォームでWin/Mac/Linuxで開発できる。

いいね！　と思って Linux で動かしたけれども Ubuntu で動かす Xojo IDE が辛すぎて仕方がない。

- 遅い
- 日本語編集時にカーソル位置がずれる
- 日本語編集時にInsertモードになっていない

（XFce などを使うと調子がいいという話もあるが・・・）
「Best Linux distro for xojo」
https://forum.xojo.com/24104-best-linux-distro-for-xojo/0
「Xojo memo・備忘録 - Atom   Xojo LINUX IDE 激遅！ very slow!」
http://k2y1972blog.blogspot.com/2019/07/xojo-linux-ide-very-slow.html

かといって MS-Windows で開発していると、低レイヤとやりとりする時に日本語関係が何かとネック。
MySQL でカラム名を日本語にすると発生する不具合がどうしても解消できなかった。

さて、Xojo は RaspberryPi 用のプログラムも開発できる。しかしながら RaspberryPi デスクトップでIDEが動作するわけではなく、母艦となる PC 上でクロス開発やリモート開発することになる。

これと同じように、Linux 上で動作する Xojo プログラムの開発を、IDE を Windows で行うことができる。

# 環境 

- MS-Windows 10 Pro 64bit
- Ubuntu 18.04 AMD64
- Xojo 2019 r3.1

# Linux

ターゲットマシンにて、

(Xojoディレクトリ/)Extras/Remote Debugger Desktop/Remote Debugger Desktop 64-Bit$ ./Remote\ Debugger\ Desktop
を実行

待ち受けとなる



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/7852355f-eb80-4510-7689-530c75d9d4a5.png)




# MS-Windowsマシンで設定
Project-Run Remotely-setup

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/76274607-7989-75e4-4731-a721f021f5d1.png)

名前を適当につけて、アドレスを入れる。パスワードは適宜。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/ffa4f312-bb26-4d06-74d7-703e42b99fff.png)

# 実行

Project-Run Remotely で登録した名前を選択すると、ターゲットマシンでアプリが起動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/6445b858-e41e-8661-667a-74e7fb186ac8.png)

# トラブルシューティング

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/3eaf26c9-6097-00fe-f187-0c9a96b1c726.png)

このようになったときは、開発マシン（今回はMS-Windows）のファイアウォールで通信が遮断されていた。ファイアウォールを解除したらOK.
メモ

１．ＪａｖａTMプログラミング能力認定試験サイト
https://www.sikaku.gr.jp/js/jv/ind/about/sample/


２．オブジェクト指向「継承」とは？わかりやすく解説してみた
https://www.sejuku.net/blog/9598

３．【しっかり押さえたい】Javaのmainメソッドとは？と使い方
https://eng-entrance.com/java-basic-main

４．1.Springframeworkを1からはじめる
https://qiita.com/yana_temu/items/293a388e202470b7d7e0

５．10 Best JavaScript Frameworks to Use in 2020
https://hackr.io/blog/best-javascript-frameworks

６．AngularJS
https://angularjs.org/

https://www.runoob.com/angularjs/angularjs-tutorial.html

7．Angular
https://angular.cn/docs

8.
https://www.sejuku.net/blog/9019
Bootstrapでモーダルを重ねる

# 【javascript】Bootstrapでモーダルを重ねたい！
普通にモーダル２つ表示しようとすると下になったりして対応していないのですが
z-index を設定してやれば動くようです。

環境: bootstrap3

```javascript
$(function() {
    // Modal on Modal
    $(document).on('shown.bs.modal', '.modal', function (event) {
    	var zIndex = Math.max.apply(null, Array.prototype.map.call(document.querySelectorAll('*'), function(el) {
    		  return +el.style.zIndex;
    		})) + 10;
        $(this).css('z-index', zIndex);
        setTimeout(function() {
            $('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack');
        }, 0);
    });
});
```

#### 削除確認用のモーダル・例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108113/9d80cecd-244d-d654-7cb9-2c4346c58d58.png)

#### 呼び出し方・例
呼び出し部分

```html
<a data-toggle="modal" data-id="" href="#deleteConfirmModal" class="openDeleteModal"><button type="button" /></a>
```

重ねるモーダルの部分

```html
  <div id="deleteConfirmModal" class="modal fade">
      <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-body">
              <p>確認</p>
              <div class="alert alert-success hide" role="alert" id="messageSuccessConfirmModal" style="word-break: break-all;"></div>
              <div class="alert alert-danger hide" role="alert" id="messageErrorConfirmModal" style="word-break: break-all;"></div>
            </div>
            <div class="modal-footer"id="updateConfirmModalButtons">
              <button type="button" data-dismiss="modal" class="btn">キャンセル</button>
              <button type="button" class="btn btn-primary"
                id="deleteConfirmModalButton" data-id="" data-loading-text="Setting...">削除</button>
            </div>
            <div class="modal-footer hide" id="completeConfirmModalButtons">
              <button type="button" class="btn btn-default"
                data-dismiss="modal" onclick="location.reload(true);">リロード</button>
            </div>
        </div>
    </div>
```

以上、お疲れさまでした。
【MySQL】「Unknown command '\''.」のエラー対処法

##経緯
DBをmysqldumpにてダンプ後、ローカルDBへインポートしようとした際に発生。

~~~SQL
mysql -uroot database < dump.sql
ERROR at line 1 : Unknown command '\''.
~~~


##対処方法
MySQLコマンド実行時に、文字コードに「UTF-8」を指定する。

~~~SQL
mysql -uroot --default-character-set=utf8 database < dump.sql
~~~


##補足
・Shift_JISを指定すると変わらずエラーが発生

~~~SQL
mysql -uroot --default-character-set=sjis database < dump.sql
ERROR at line 1 : Unknown command '\''.
~~~
Vue.jsで外部HTMLファイルをinclude(っぽく)する

# 概要

Componentに分けたいけど分けられない。諸事情でHTMLファイルをincludeしたい。
~~HTMLファイルを直接弄りたいとか言われましても~~

## 方法

- 外部HTMLファイルを非同期で読み込んで展開する

## 具体例

```vue
<template>
  <main>
    <section v-html="external"></section>
  </main>
</template>

<script lang="ts">
import { Vue, Component } from "vue-property-decorator";

@Component
export default class App extends Vue {
  external: string = "";

  public mounted() {
    this.loadExternalHtml();
  }
  
  public loadExternalHtml() {
    fetch("external.html").then(res => {
      res.text().then(html => {
        this.external = html;
      });
    });
  }
}
```

includeっぽくはなる。
~~これでガリガリHTMLを弄ってもおｋ~~
メモ⑦-テーブルへのDDL処理(DROPとALTER)-

【DROP】
テーブルを削除するコマンド。
⑥で作成した「tbl_employee4」を、以下のように入力して削除する↓
MariaDB [company]> DROP TABLE tbl_employee4;
Query OK, 0 rows affected (0.010 sec)

確認すると。
MariaDB [company]> show tables;
+-------------------+
| Tables_in_company |
+-------------------+
| tbl_customer      |
| tbl_customerm     |
| tbl_department    |
| tbl_employee      |
| tbl_employee2     |
| tbl_employee3     |
| tbl_post          |←tbl_employee4が消えている
| tbl_supplier      |
+-------------------+
8 rows in set (0.001 sec)



【ALTER】
フィールドの追加や削除など、テーブルの内容を編集するときは、
ALTER TABLEコマンドを使用する。

tbl_employee3テーブルに血液型のフィールドを追加する↓
MariaDB [company]> ALTER TABLE tbl_employee3
    -> ADD blood VARCHAR(2);
Query OK, 0 rows affected (0.006 sec)
Records: 0  Duplicates: 0  Warnings: 0

確認すると…
MariaDB [company]> desc tbl_employee3;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| code      | int(11)     | NO   |     | NULL    |       |
| name      | varchar(40) | NO   |     | NULL    |       |
| birthday  | datetime    | YES  |     | NULL    |       |
| dpt_code  | int(11)     | YES  |     | NULL    |       |
| post_code | int(11)     | YES  |     | NULL    |       |
| manager   | int(11)     | YES  |     | NULL    |       |
| blood     | varchar(2)  | YES  |     | NULL    |       |←初期値では、フィールドの最後に追加される。
+-----------+-------------+------+-----+---------+-------+
7 rows in set (0.011 sec)

※先頭に追加したい場合は
MariaDB [company]> ALTER TABLE tbl_employee3
    -> ADD blood VARCHAR(2) FIRST;

※任意の場所に追加したい場合は、「〇〇の後」と追記する
MariaDB [company]> ALTER TABLE tbl_employee3
    -> ADD blood VARCHAR(2) AFTER name;


また、追加したフィールドを削除するには、
「DROP COLUMN」を使用する。
MariaDB [company]> ALTER TABLE tbl_employee3
    -> DROP COLUMN blood;
Query OK, 0 rows affected (0.009 sec)
Records: 0  Duplicates: 0  Warnings: 0

確認すると…
MariaDB [company]> desc tbl_employee3;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| code      | int(11)     | NO   |     | NULL    |       |
| name      | varchar(40) | NO   |     | NULL    |       |
| gender    | varchar(1)  | YES  |     | NULL    |       |
| birthday  | datetime    | YES  |     | NULL    |       |
| dpt_code  | int(11)     | YES  |     | NULL    |       |
| post_code | int(11)     | YES  |     | NULL    |       |
| manager   | int(11)     | YES  |     | NULL    |       |←「blood」フィールドが消えている
+-----------+-------------+------+-----+---------+-------+
7 rows in set (0.011 sec)

・・・⑧へ続く
51歳からの（現52）プログラミング　備忘　FileOutputStream android.content.Context.openFileOutput(java.lang.String, int)' on a null object reference

こんなコードがあったとする

```java:SampleActivity
Context context;
@Override 
protected void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContantView(R.layout.sample);
   context = getApplicationContext();

   new AsyncTask().execute();
}


public void fileWrite(){
   try{
       openFileOutput("fileName",Context.MODE_APPEND);
   }
}
```
```java:AsyncTask
@Override 
protected void onPostExecute(String s){
   super.onPostExecute(s);

   SampleActivity sampleA = new SampleActivity();
   sampleA.fileWrite();
}

```
これだと
`FileOutputStream android.content.Context.openFileOutput(java.lang.String, int)' on a null object reference`
エラーが出る。

コード上のインスタンス生成時に`context`が生成されてないので、`NullPointerExeption`になる。

回避するのなら>https://qiita.com/old_cat/items/ff4f2116192fd536fb59
に記載の通り、コールバックメソッドを実装してcontextを扱う。

```java:SampleActivity
Context context;
@Override 
protected void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContantView(R.layout.sample);
   context = getApplicationContext();

   AsyncTaskCallBack asyncTaskCallBack = new AsyncTaskCallBack();
   AsyncTask asyncTask = new AsyncTask(asyncTaskCallBack);
}

public class AsyncTaskCallBack(){
   // ここでfileOutputStreamを使ってもOK
   // でも他のメソッドを呼び出してみる
   public void one(){
      fileWriter();
   }
}

public void fileWrite(){
   try{
       openFileOutput("fileName",Context.MODE_APPEND);
   }
}
```

```java:AsyncTask
SampleActivity.AsyncTaskCallBack asyncTaskCallBack;

public AsyncTask(SampleActivity.AsyncTaskCallBack asyncTaskCallBack){
   this.asyncTaskCallBack = asyncTaskCallBack;
}

@Override 
protected void onPostExecute(String s){
   super.onPostExecute(s);
   asyncTaskCallBack.one();
}

```