OmniAICreator/Qiita-1.07M huggingface dataset:
IBM i (旧AS400）の自己学習メモ　RPG Ⅳプログラミング編０８　コンパイルのデフォルト設定

# 自己学習メモインデックス

[IBM i (旧AS400）の自己学習メモ　インデックス](https://qiita.com/You_name_is_YU/items/3964849e7803c8eaf767)

# 概要

RPGプログラミングの勉強を進めていくなかで、PDMの画面からOPT=14を指定してコンパイルすることがよくあると思います。
コンパイルするときに即時でコンパイルされるのではなく、バッチでコンパイルされる挙動となり、いつコンパイルが完了したんだろう？と
よくわからない事象に出会したことがありました。

OPT=14のコンパイルオプションにも、バッチで実行をコンパイルの即時実行みたいにするオプションが見当たらず困っていると、開発者の方が解決方法を教えてくれたので、その内容をメモしておこうと思います。

# コンパイルのデフォルト設定

wrkmbrpdmでPDMのメンバー一覧画面を表示しておき、ここでShift + F6キー　（F20）を押下すると、
`Change Defaults`という画面が表示されます。
<img width="1088" alt="スクリーンショット 2020-05-19 20.06.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/3f9296a1-78c3-b5cd-1fb5-32a32b3ac300.png">

この画面の設定は割と使えるみたいなので、いくつか教えてもらった内容を以下に記載していきます。

## Object library

この設定は、プログラムをコンパイルする時に指定する`PGM`パラメータのLibrary部分のデフォルト値となります。
PUB400.comには自分のライブラリ以外だと、QTEMPというライブラリは利用することができそうなので、`*CURLIB`と設定されている部分を`QTEMP`にすると、OPT=14でコンパイルするときの`PGM`パラメータのLibrary部分が`QTEMP`になります。
<img width="1088" alt="スクリーンショット 2020-05-19 20.13.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/5f31846b-3be4-af95-aac2-8c8c777dd74b.png">
<img width="1088" alt="スクリーンショット 2020-05-19 20.12.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/41152149-4cf8-66e4-c4e0-3bc10dbdf6dc.png">

## Compile in batch

この設定を`Y`にすると、バッチでプログラムをコンパイルするようになります。
バッチでコンパイルされると、コンパイル時にエラーが発生したかどうか、すぐにわからないので自分としては困りました。
PUB400.comの環境はデフォルトでは`N`になっているようなので気づかなかったのですが、こういった設定を覚えておかないと、いろんな環境を触る時に困るかもしれないですね。

設定を`Y`にしてOPT=14でコンパイルすると、画面下部にバッチでコンパイルするようにしましたよ的なメッセージが表示されます。
<img width="1088" alt="スクリーンショット 2020-05-19 20.18.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/f610b568-ea08-0fdd-d8b6-b04d1ffbe6f7.png">

まぁ、この設定にもメリットがあるようで、バッチでのコンパイル処理は優先度？というのが低いらしく、オンライン処理（みんなが業務で使っている機能の処理）に悪影響を与えることなく、プログラムのコンパイルをしたい場合にバッチでやるんだそうです。

## Full screen mode

このオプションを`Y`にすると、画面上部に出ていたOptに設定する数値の役割についてのヒントや、画面下部に出ていたファンクションキーの役割についてのヒントが一切出ずに、ソースメンバーの一覧がよりたくさん表示されるようになります。
開発に慣れてきて、オプションとか頭に入っている状態だと、この方が１画面でたくさんの情報が確認できるので便利なんだそうです。

<img width="1088" alt="スクリーンショット 2020-05-19 20.24.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/ec77a574-12a7-dd1f-3be6-a61bd9e8413a.png">
$.getメソッドを使って非同期通信でapiを表示する

# Ajaxでapiを表示する
動的なページで自作したapiを静的なフロントのページで表示させる必要があったので備忘録として残します。

# laravelでapiの作り方
動的なページ側での話。
Http/Controllers/APIにapi用のコントローラーを作成。
今回はFAQのAPIを作る。

```php:FAQAPIController
class APIFAQController extends Controller
{
    public function index(Request $request){
        $faq = Faq::all();
        header("Access-Control-Allow-Origin: *");
        return Response::json($faq);
    }
}
```
routeのapi.phpにapi用のルートを設定する

```php
//FAQ API
Route::get('/index','API\APIFAQController@index')->name('api.index');
```

これでURLに `api/index` にアクセスするとjsonでレスポンスが返ってくる
[postman](https://www.postman.com/)で確認するとapiの中身が確認できる。

# apiの受け取った通信データの表示方法
ここから静的ページサイトでどうやって表示させるかという話。
`$.get`メソッドを使って通信データを取得できる
`$.get('apiのurl',function(data))`
functionの中のdataが引数で通信データを受け取ることができる。


```html:index.html
 $.get('apiurl',function(data){
   //処理を書く
 })

```

あとは処理を書いていけばよい

```html:index.html
<script>
  $(function(){
        $.get('https://faq.com/api/index', function(data){
            for(var i=0; i<data.length; i++){
                var question = data[i].question;
                var answer = data[i].answer;
                console.log(question);
                console.log(answer);
            }
</script>
```

こんな感じです。
[VSCode][Rest Client]フォーム形式のPOSTリクエストを送信する

VSCodeプラグインの[Rest Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client)を利用した場合のフォーム形式の送信のやり方メモ。

Rest ClientとはHTTPリクエストをテキストベースで管理できる優れもののプラグイン。
[VS Code上でHTTPリクエストを送信し、VS Code上でレスポンスを確認できる「REST Client」拡張の紹介 - Qiita](https://qiita.com/toshi0607/items/c4440d3fbfa72eac840c)


## リクエスト例

```testdata.http
POST http://example.com/target.php HTTP/1.1
content-type: application/x-www-form-urlencoded

id=1234
&name=yamada_taro
&age=18
```

##### ポイント
 - リクエストヘッダのContent-Typeを `application/x-www-form-urlencoded` や `multipart/form-data` に指定する。
 - キーと値を`=`でつなぐ。複数項目は`&`でつなぐ。
 - 空白を入れたりコメントを入れたりするとエラーになる。
 - PHPで受け取る際は`$_POST['id']`で取得できる。

## 参考
[Support multiline request body for x-www-form-urlencoded · Issue #169 · Huachao/vscode-restclient · GitHub](https://github.com/Huachao/vscode-restclient/issues/169)
EventBridgeとマカレルをつないでJSON受け取ってみた

#はじめに
ちゃんと連携できるかやってみました。

#構成図

<img width="541" alt="スクリーンショット 2020-05-19 20.11.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/158cdd3d-5c00-d4e1-4076-27890961235d.png">

#やったこと
以下の記事に沿って全て行いました。
[アップデート] MackerelからAmazon EventBridgeへの連係ができるようになりました
https://dev.classmethod.jp/articles/mackerel-eventbridge/#toc-2

#結論
Jsonの項目は以下のものが送られるそうです。
https://mackerel.io/ja/docs/entry/howto/alerts/eventbridge
ProcessingのOpenCVで手を認識する

＃本記事はopenCVで手を認識する方法を調べた、まとめです。
Leap MotionやKinectが使えるのであれば、そちらを使った方が簡単です。

#はじめに
OpenCVのhaar cascadeを用いた画像認識では、学習済みのxmlファイルを使い、顔などの位置を知ることが出来ます。

デフォルトでは、顔や目、上半身などを認識できますが、手の学習済みファイルはありません。そこで、手の認識について調べました。

#Convex Hull
OpenCVの参考書では、グーチョキパーの認識のために、ConvexHullを用いた方法が紹介されています。ConvexHullについては、wikiやyoutubeに紹介があります。
https://en.wikipedia.org/wiki/Convex_hull
https://www.youtube.com/watch?v=YNyULRrydVI
原理はわかりますが、実装には、難しそうです。
また、processingのOpenCVライブラリではConvexHullは使えなさそうでした。
processingのサンプルコードも見つけましたが、シンプルではなかったので、紹介するのはやめます。

#学習済みデータを探す
OpenCVでは、学習データはxmlファイルとして保存されています。
例：haarcascade_frontalface_default.xml
中身は１ＭＢくらいのテキストファイルです。

このxmlファイルで、手があったらと思って探した結果が、以下です。
https://github.com/Aravindlivewire/Opencv/blob/master/haarcascade/aGest.xml
https://github.com/Aravindlivewire/Opencv/blob/master/haarcascade/closed_frontal_palm.xml
https://github.com/Aravindlivewire/Opencv/blob/master/haarcascade/fist.xml
https://github.com/Aravindlivewire/Opencv/blob/master/haarcascade/palm.xml
https://github.com/Balaje/OpenCV/blob/master/haarcascades/hand.xml
RAWボタンを押した後、全選択してコピーして、テキストエディタでxmlファイルを作れば、とりあえず使えます。
どのファイルが、何を学習させたかよくわかりませんので、試してみます。

#実行する
ダウンロードしたxmlファイルを、パソコンの以下の場所にコピーします。(windowsの場合）
C:/Users/??????/Documents/Processing/src/libraries/opencv_processing/library/cascade-files/??????.xml

プログラムの中で、ファイル名を指定します。
うまくxmlを読み込めた場合は、
　Cascade loaded: hand.xml
のようにコンソールに表示されます。
うまく読み込めない場合は、
　Cascade failed to load
と表示されます。

| ファイル名       |       結果 |
|:-----------------|------------------:|
| aGest.xml        |右手のグーを認識します |
| closed_frontal_palm.xml|右手のグーを認識します|
| fist.xml　       |右手のグーを認識します|
| palm.xml         | パーを認識します（微妙） |
| hand.xml         | グーを認識します |


グーの認識ではチョキの握っている部分でも認識します。
左手のグーの認識が弱いのは、学習させてないからだと思います。
グーの傾きの許容角度は90度ぐらいですが、パーは30度ぐらいです。

#まとめ
これが一番まともでした。
https://github.com/Balaje/OpenCV/blob/master/haarcascades/hand.xml
グーの認識率は使えるレベルですが、パーの認識には実用上、無理があります。
チョキは学習データが見当たりませんでした。
グー以外は、肌色識別ラベリング等を組み合わせる必要がありそうです。


#手の認識
```java:hand.pde
import gab.opencv.*;
import processing.video.*;
import java.awt.*;

Capture video;
OpenCV opencv;

void setup() {
  size(640, 480);
  video = new Capture(this, width, height);
  opencv = new OpenCV(this, width, height);
  opencv.loadCascade("hand.xml");
  video.start();
}

void draw() {
  opencv.loadImage(video);
  image(video, 0, 0);

  noFill();
  stroke(0, 255, 0);
  strokeWeight(3);
  Rectangle[] hand = opencv.detect();

  for (int i = 0; i < hand.length; i++) {
    rect(hand[i].x, hand[i].y, hand[i].width, hand[i].height);
  }
}

void captureEvent(Capture c) {
  c.read();
}

```
Google Geocoding API利用時の「The provided API key is expired.」エラーへの対応

# 事象

Google Gecoding APIを利用するため、同APIを有効にして正常に発行したAPI Keyを利用しているのに、「The provided API key is expired.」と言われて使えない。

いやいや、作ったばっかりなのにおかしいでしょ！？

```json
{
   "error_message" : "The provided API key is expired.",
   "results" : [],
   "status" : "REQUEST_DENIED"
}
```

API Keyの制約変更は「注: 設定が有効になるまで、最大で 5 分かかることがあります」とのことなので、試行錯誤に時間がかかります。

# 対応

Maps JavaScript APIも有効にして、API Keyの制約設定で利用可にすると解消します。
Linuxコマンドラインショートカット




##カーソルの移動
| コマンド     |       動作説明 |
|:-----------------|------------------:|
| Ctrl + b         |後方に１文字移動 | 
| Ctrl + f       　|前方に１文字移動 | 
| Ctrl + a         |行頭に移動 |    
| Ctrl + e　　　　　|行末に移動 | 
| Alt + b 　　　　 |後方に単語１つぶん移動 |
| Alt + f         |前方に単語１つぶん移動 |

##削除と挿入
※bashではペーストをヤンクと呼ぶ

| コマンド     |       動作説明 |
|:-----------------|------------------:|
| Ctrl + h         |後方に１文字削除 | 
| Ctrl + d       　|カーソル位置の１文字削除 | 
| Ctrl + w         |後方にスペース区切りで１単語ぶん削除 |    
| Ctrl + k　　　　　|カーソル位置から行末までを削除（カット） | 
| Ctrl + u 　　　　 |カーソル位置から行頭までを削除（カット） |
| Ctrl + y         |最後に削除した内容を挿入する（ヤンク） |

##画面操作
※Ctrl + sでロック中も打ち込んだ文字列は受け付けられるため注意が必要

| コマンド     |       動作説明 |
|:-----------------|------------------:|
| Ctrl + s         |画面表示をロックする | 
| Ctrl + q       　|画面表示のロックを解除 | 
| Ctrl + c         |実行中のコマンドを強制終了 |    
| Ctrl + l　　　　　|画面に表示された履歴を削除 | 

##コマンド履歴検索

| コマンド     |       動作説明 |
|:-----------------|------------------:|
| Ctrl + p         |１つ前のコマンド履歴に移動 | 
| Ctrl + n       　|次のコマンド履歴へ移動 | 
| Ctrl + r         |インクリメンタル検索を開始 | 

##インクリメンタル検索（Ctrl + r）

| コマンド     |       動作説明 |
|:-----------------|------------------:|
| 文字の入力         |検索語を追加して再検索 | 
| Ctrl + r       　|１つ前の検索結果へ移動 | 
| Enter         |現在の検索結果をそのまま実行 | 
| Esc         |現在の検索結果を表示したままコマンドラインに戻る | 
| Ctrl + g         |検索結果を破棄しプロンプトに戻る| 
| Enter         |現在の検索結果をそのまま実行 | 

インクリメンタル検索「ec」で検索した例

```
(reverse-i-search)`ec': echo hello world
```


参考文献：新しいLinuxの教科書（三宅英明・大角祐介 著）
【Windows】リモートデスクトップに必要なポート番号を確認する方法

# はじめに
業務の中で既存のWindowsServerにリモートデスクトップ接続をする際の話になります。
リモートデスクトップ接続をする際に下記のようにIPアドレスの後にポート番号を記載すると思いますが、ポート番号「3389」で接続できませんでした。

![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/74350d76-0642-f36d-f3e9-a71954ec2bc3.jpeg)

今回は、このような場合の対処について紹介したいと思います。

# 今回の環境

**OS: WindowsServer2012R2**


# ポート確認方法

①「ファイル名を指定して実行」より「regedit」を実行

![2-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/f6f4f577-3a8a-9165-d7f6-442c67b15284.jpeg)

②レジストリエディタが起動される。

下記レジストリの値を確認

**キー:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp**

**名前:
PortNumber**

下記の画像を確認すると、**「3389」**ポートに設定されていることを確認できる。

![3-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/2a8e1e8f-72f1-fff2-386b-8a0c55a2d6d5.jpeg)



# 参考記事

【リモートワーク自由自在】Windowsリモートデスクトップ接続のポート番号を変更してよりセキュアにする
https://www.atmarkit.co.jp/ait/articles/0309/27/news003.html
【laravel】データベースでSESSIONの利用

# 概要
laravelの初期設定ではセッション情報がファイルに保存されるようになっているため、データベースにセッション情報を保存する方法を投稿します。
またセッション情報を保存しているファイルは`\strage\framework\sessions`です。

# SESSIONの設定
セッション情報をデータベースに保存する場合は`\config\session.php`と`.env`による設定とデータベースの作成によって完了します。

## configの設定

```:session.php
'driver' => env('SESSION_DRIVER', 'file'),
// ここを以下のように編集
'driver' => env('SESSION_DRIVER', 'database'),
```


## .envの設定

```:.env
SESSION_DRIVER=file
// ここを以下のように編集
SESSION_DRIVER=database

```

## データベースの作成
以下のコマンドでセッション用のマイグレーションファイルが作成されるので、作成後にマイグレーションを実行すればテーブルが作成されます。

```:コマンド
php artisan session:table
```

# セッションの保存
`$request->session()->put($key, $value);`でキーのセッションを保存します。
name="input"のinputタグからフォーム入力したと仮定した例です。

```php:Controller
public function put(Request $request) {
  $inp = $request->input;
  $request->session()->put('inp', $inp);
}

```


# セッションの呼び出
`$変数= $request->session()->get($key);`で保存したセッションを取得してリダイレクト先で表示します。

```php:Controller
public function index(Request $request) {
  $val = $request->session()->get('inp');
  return view('sample',['val'=>$val]);
}
```

```php:view
{{val}}
```

# セッションの削除
`$request->session()->pull($key);`でキーのセッションを削除します。

```php:Contoller
public function del(Request $request) {
  $request->session()->pull('inp');
}
```

# フラッシュ保存
フラッシュデータと言って、次のリクエスト間だけセッション情報を保存する方法です。
`$request->session()->flash(キー, 値);`でフラッシュ保存します。
name="input"のinputタグからフォーム入力したと仮定した例です。

```php:Controller
public function flash(Request $request) {
  $inp = $request->input;
  $request->session()->flash('inp', $inp);
}

```


# 参考
[Laravel 6.x HTTPセッション]
(https://readouble.com/laravel/6.x/ja/session.html)
GCPのKey Management Service + Pythonでシークレット情報管理

# 背景
pythonアプリでシークレット情報の管理を行いたい。今回はシークレット情報をyamlで管理する。
暗号化と復号化は、GCPの [Key Management Service](https://cloud.google.com/kms?hl=ja) を使う。pythonアプリで復号化して使えるようにする。

# 暗号化
[クイックスタート](https://cloud.google.com/kms/docs/quickstart?hl=ja) を参考に鍵リンクと鍵を作成する。

まず、シークレット情報の入ったyamlファイルを作成

```yaml:sample_secret.yaml

HOGE_SECRET: HOGEHOGE
FUGA_SECRET: FUGAFUGA
```

これを以下のように暗号化し `sample_secret.yml.encrypted` を作成する

```sh

gcloud kms encrypt --location global --keyring test --key quickstart 
      --plaintext-file sample_secret.yml 
      --ciphertext-file sample_secret.yml.encrypted
```

# pythonで復号化

pythonアプリ内で使うときは以下のようにする。

```py

f = open("/path/to/sample_secret.yml.encrypted", "rb")
client = kms_v1.KeyManagementServiceClient()
name = client.crypto_key_path_path(
    'YOUR_PROJECT',
    'global',
    'test',
    'quickstart'
)

res = client.decrypt(name, f.read())
data = yaml.load(res.plaintext, Loader=yaml.BaseLoader)
print(data)
```

暗号化したシークレットファイルをgit管理対象にし、暗号化前のものを.gitignoreの対象にすればよい。
初心者が月10万稼ぐ為の記録６WordPressのインストール

#WordPressのインストールする前の準備

###データベースを用意

***今回は仮のブログサイトを立ち上げる***

Navicat Liteをダウンロード


###データベースを作る

①「接続」→「MySQL」をクリック
![Navicat9 Lite.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631322/2f2a4f91-277e-f000-4cd2-8454fcd1384b.png)


②接続名を入力して→「確認」クリック
![接続.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631322/2d6c1bbe-9f8f-b30b-b141-5bd31b28f43e.png)

③👆で作成した接続先で右クリックして「新規データベース」をクリック
![接続_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631322/0116cac8-2fb0-029e-06d6-f8db06355355.png)

④データベース名入力[blog]
キャラクターセットを「utf8 -- UTF-8 Unicode」を選択する。
![接続_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631322/5059c303-4771-baf8-8674-94161df4b261.png)

***準備完了***

##WordPressをダウンロードする

👇のURLをクリックしてダウンロード
https://ja.wordpress.org/download/
ダウンロード先はXAMPPを使用してる方は
xampp/htdocs/blog（データベース名）
に先ほど作成したblogフォルダの直下にインストールする。

##WordPressをインストールする
GoogleChromeでアクセスする
👇の画面がから「さあ始めましょう！」をクリック
![wpインストール_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631322/82ae0ed9-72eb-7958-177f-1f3679622e5d.png)

事前に用意しておいた
「データベース名」「ユーザー名」「パスワード」「ホスト名」を入力し送信ボタンをクリック
👇（自分の環境にあわせる）
![wpインストール_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631322/cb9edc62-b807-87d9-9402-5fd17a0e4cc4.png)


👇の画面がでたら
WordPress は現在データベースと通信できる状態にあります。
準備ができているなら…」と表示されれば、データベースの事前準備などが問題が無く
「wp-config.php」が無事作成されたことを表しています。
**xampp/htdocs/blogの直下で確認できます。**
「インストール実行」ボタンをクリック
![wpインストール_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631322/7b5fdc6e-c185-0c49-04e6-c6906ac6db6f.png)

ブログのタイトルの初期値などを設定する画面が表示されます。 
作成するブログのタイトルの
「サイトのタイトル」、ブログの管理画面にログインする時に使用する
「ユーザー名」「パスワード」「メールアドレス」を入力して
「WordPressをインストール」ボタンをクリック
👇
![wpインストール_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631322/033b909e-a413-07ba-7cd1-679a8220533f.png)

「成功しました！」と表示されて「ログイン」ボタンをクリック

「ユーザー名またはメールアドレス「パスワード」を入力してログインする。

**次回は実際に仮でブログサイトをWordPressで作成する**
【Golang】log

#【Golang】log

Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。

```
package main 
//log
/*
https://golang.org/pkg/log/
https://golang.org/pkg/io/

logは、シンプルなログ作成の為の機能がまとめられたパッケージ。
標準エラー出力に任意のログメッセージを出力できる。

他の言語のようなinfoなどはサポートされていない。
複雑なログをやる場合は、サードパーティを使うことも考える。通常はこれで十分


*/

import (
	"fmt"
	"io"
	"log"
	"os"
)


//ログに書き込むd
//ファイル読み書きについては別途調べる
func LoggingSettings(logFile string) {
	//_=error
	//os.O_RDWR　READ　WRITE 読み書き両方する時
	//os.O_CREATE 存在しなかった場合新規ファイルを作成する場合
	//os.O_APPEND  ファイルに追記したいとき
	//0666 
	//引数: ファイルのパス, フラグ, パーミッション(わからなければ0666でおっけーです)
	//上記モード指定。読み込む、作成、権限(０６６６＝読み書き）を設定。
	logfile, _ := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
	//stdout 画面上に出る出力 をlogfileに書き込む
	multiLogFile := io.MultiWriter(os.Stdout, logfile)
	//フォーマット指定
	//日付、時間、短いエラーの名前
	log.SetFlags(log.Ldate | log.Ltime | log.Llongfile)
	//ログファイルの出力先を変更	
	log.SetOutput(multiLogFile)
}

func main() {
	//2
	LoggingSettings("test.log")

	//条件分岐。エラーで終了させる。
	_, err := os.Open("fdafdsafa")
	if err != nil {
		//ログ出力
		//エラーで終了する
		log.Fatalln("Exit", err)
	}

	//1
	//日付と時間が表示される
	log.Println("logging!")

	//フォーマット
	//日付、時間　＋　Type, Valを出力できる
	log.Printf("%T %v", "test", "test")
	
	//Type,Valを表示。エラーで終了
	log.Fatalf("%T %v", "test", "test")

	//エラーで終了させる
	log.Fatalln("error!!")

	//表示されない
	fmt.Println("ok?")
}
```
Vue でウィンドウサイズの変更を検知したいとき

Vue を使っていてウィンドウのリサイズを検知するには、[Vuetify](https://vuetifyjs.com/ja/) というコンポーネントフレームワークの [v-resize](https://vuetifyjs.com/ja/directives/resizing/) というカスタムディレクティブが便利です。

```vue
<template>
  <span v-resize="onResize">{{ windowSize }}</span>
</template>

<script>
  export default {
    data: () => ({
      windowSize: {
        x: 0,
        y: 0,
      },
    }),

    mounted () {
      this.onResize()
    },

    methods: {
      onResize () {
        this.windowSize = { x: window.innerWidth, y: window.innerHeight }
      },
    },
  }
</script>
```

このように、テンプレートで `v-resize` に発火したいメソッド名を渡すだけで、ウィンドウのサイズが変更された時にそのメソッドを実行することができます。

ウィンドウや要素の幅に応じて動的に何かを設定する必要があるコードでは便利ですね。手元のコード量がほとんど増えないのが個人的にうれしいポイントです。
Qiitaのプロフィール画像変更時に気づいたこと

##結論
Qiitaのプロフィール画像変更はChromeかfirefoxを使おう
※Edge未検証

##環境
|         |   バージョン       |
|:--------|:-----------------|
| macOS   | Catalina 10.15.4 |
| Safari  | 13.1             |
| Chrome  | 81.0.4044.138    |
| firefox | 76.0.1           |

##起きた不具合
プロフィール画像変更しようとSafariからファイルをアップロードした際、"400 Bad Request"の警告が。。。
調べても解消法が出てこず。
メールアドレス認証、公開プロフィールの設定等色々試したが成果なし。。。
Qiitaに問い合わせする前にブラウザをChromeにしたら上手くいったので共有兼備忘録として投稿

##独り言
もしかしたら推奨環境にSafariがなかったのかも。知らんけど。。。

##追記
- Qiitaの[推奨環境](https://help.qiita.com/ja/articles/supported-browsers)に最新バージョンのSafariがサポートされてたのでサーバかキャッシュのせいかも。知らんけど。。。
よく使うkubectlコマンド

##よく使うKubernetesのコマンド一覧

### 定義ファイルのDeploy
 - 定義ファイル（.yaml）のdeployコマンド

```ruby:
# 指定した定義ファイルのdeploy
$ kubectl create -f [定義ファイル名]

# 階層にある定義ファイルのdeploy
$ kubectl create -f .
```

###情報取得系
 - 一覧情報取得

```ruby:
# Pod情報を一覧表示
$ kubectl get po

# ReplicaSet情報を一覧表示
$ kubectl get rs

# Deployment情報を一覧表示
$ kubectl get deploy

# Service情報を一覧表示
$ kubectl get svc

# Ingress情報を一覧表示
$ kubectl get ing
```

 - 指定Pod,ReplicaSet,Deploymentの情報取得

```ruby:
# 指定Pod情報を表示
$ kubectl get po [Pod名]

# 指定ReplicaSet情報を表示
$ kubectl get rs [ReplicaSet名]

# 指定Deployment情報を表示
$ kubectl get deploy [Deployment名]
```
 - PodのIP情報も表示

```ruby:
$ kubectl get po -o wide
```

 - 指定Pod,ReplicaSet,Deploymentの情報をyaml形式で取得

```ruby:
# 指定Podの情報をyaml形式で表示
$ kubectl get po [Pod名] -o yaml

# 指定ReplicaSetの情報をyaml形式で表示
$ kubectl get rs [ReplicaSet名] -o yaml

# 指定Deploymentの情報をyaml形式で表示
$ kubectl get deploy [Deployment名] -o yaml
```
 - Pod,ReplicaSet,Deploymentの詳細情報の取得

```ruby:
# 指定Podの詳細情報を表示
$ kubectl describe po [Pod名]

# 指定ReplicaSetの詳細情報を表示
$ kubectl describe rs [ReplicaSet名]

# 指定Deploymentの詳細情報を表示
$ kubectl describe deploy [Deployment名]
```

 - 指定のNameSpaceに属するPod, ReplicaSet, Deployment情報表示

```ruby:
# 指定のNameSpaceに属するPod情報表示
$ kubectl get po -n [namespace名]

# 指定のReplicaSetに属するPod情報表示
$ kubectl get rs -n [namespace名]

# 指定のDeploymentに属するPod情報表示
$ kubectl get deploy -n [namespace名]
```

 - クラスターの情報を表示する
```rubu:
$ kubectl cluster-info
```

### 定義ファイル（.yaml）の作成系
```ruby:
# Podの定義ファイル作成
$ kubectl run [yamlファイル名] --restart=Never --image [image名] -o yaml --dry-run =client

# Deploymentの定義ファイル作成
$ kubectl run [yamlファイル名] --image [image名] -o yaml --dry-run=client=client

# Serviceの定義ファイル作成
$ kubectl create svc clusterip [yamlファイル名] --tcp 80 -o yaml --dry-run=client

# ConfigMapの定義ファイル作成
$ kubectl create cm [yamlファイル名] --from-literal [Key名]=[Value名] -o yaml --dry-run=client

# Secretの定義ファイル作成
$ kubectl create secret generic [yamlファイル名] --from-literal [Key名]=[Value名] -o yaml --dry-run=client
```

###削除系（危険）

```ruby:
# Pod削除
$ kubectl delete po [Pod名]

# Deployment削除
$ kubectl delete deploy [Deployment名]

# Service削除
$ kubectl delete svc [Service名]

# 作成時yamlから作られたPod, Deployment, Serviceを削除
$ kubectl delete -f [yamlファイル名]
```


### その他
 - Podにログインする

```ruby:
$ kubectl exec -it [Pod名] /bin/bash
```
続・MATLAB R2019b + Psychtoolboxによる心理実験プログラムのコンパイルに関しての備忘録

#はじめに
[こちら](https://qiita.com/matsukenbass/items/a487eb21f221a599da56)にてコンパイルして生成されたアプリを他のWindowsコンピュータで動かすためのメモです。

#準備
 - 上記のコンパイルで生成されたフォルダ
 - GStreamer MSVC 64bit runtime

※※※GStreamer MinGWではないので注意※※※

#インストールしてから実行する場合
上記のコンパイルで生成されたフォルダの中に「for_redistribution」というフォルダがあるので、その中にあるMyAppInstaller_web.exeを実行してインストール。特に変更するとこをはないのでじゃんじゃん進めていきます。(この時、MATLAB runtimeも一緒にインストールされます。)

インストールが終わったら、インストールされたフォルダに移動。
その中にある「application」フォルダの実行ファイル(例えば、sampleという名前でコンパイルしていたらsample.exeという実行ファイルがあります)を実行。

##実行
正しく手順が踏めていれば実行されます。

##注意
デフォルトだと"C:\Program Files"内にインストールされるので、必ず右クリックで「管理者として実行」から実行ファイルを実行しましょう。


#インストールせずに実行する場合
必ずMATLAB runtimeが必要になるので、コンパイルをしたMATLABのバージョンと同じバージョンのruntimeをインストール。

インストールが終わったらコンパイルで生成されたフォルダ内にfor_redistribution_files_onlyというフォルダがあるので、そちらの中にある実行ファイルを実行しましょう。

#最後に
これらの手順を踏めばおそらく実行できるかと思います。
しかし、Screen関数を使っているとコンピュータの解像能力にも左右されるので正しく刺激が表示されるかはわかりません、
また、macで同様に作ろうとしましたがうまくいきませんでした。謎。

#追記(2020/05/25)
グラフィックカードなど環境に左右され、正しくScreen関数が動かないということがいくつか報告されています。MATLAB Compilerで作成した実行ファイルでリモート実験を行う場合は、実験を行うコンピュータでの綿密なチェックが必要そうです。
VSCode Vim拡張 ノーマルモードで日本語入力をオフにする

# 概要
VSCode に Vim拡張をインストールして使っているのですが、インサートモードで日本語を入力したあと、Escキーでノーマルモードに戻って日本語入力モードであることを忘れて「っっっｊ」ってなるのを防止しました。

## 環境
OS: Ubuntu 18.04.3 LTS (日本語Remixのisoを使用）
VSCode: 1.45.1
VSCode拡張: vscodevim.vim 1.14.4

## 対処法
[こちらのサイト](https://qiita.com/altus/items/334aaa27fb2c7b73b837)を参考に、settings.vim に以下の設定を記述したところ、期待通りEscキーでノーマルモードに遷移すると同時に、日本語入力モードがオフにしてくれるようになりました。

```settings.json
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "-c",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/bin/fcitx-remote",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/bin/fcitx-remote {im}",
```

## ご注意
大事なことですが、この設定は Fcitx 環境のものです。後述しますが、自分は iBus 環境でうまくいきませんでした。
参考までに Fcitx をインストールする手順を記載しておきます。（インプットメソッドの変更はそれなりに大きな決断だと思っております。熟考のうえ実施してください。）

```
$ sudo apt install fcitx-mozc fcitx-modules
$ im-config
```
im-config で Fcitx を使うよう設定し、OSを再起動した後、前述の設定内容を VSCode の settings.jsonに記述すればOKです。

## 紆余曲折（失敗談)
対処法だけであれば先程のサイトのご紹介で十分だったのですが、今回それなりの紆余曲折があったので残します。

### iBus 環境でうまくいかない
自分の環境（Ubuntu 18.04.3 LTS）ではインプットメソッドが iBus でした。前述の対処方はご覧の通り Fcitx 環境のものです。ですので iBus での設定をそれなりに調べ、試したのですが、結局うまく動きませんでした。

以下のサイトで、iBus での設定例が紹介されていましたが、動作しませんでした
https://developpaper.com/configuration-of-vim-and-input-method/
NG例
↓

```settings.json
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "xkb:us::eng",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/bin/ibus engine",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/bin/ibus engine {im}"
```

`"xkb:us::eng"` → `"xkb:jp::jpn"` に変更してもダメでした。
入力モードが変わる動きを期待しているのですが、インプットメソッドが切り替わってしまう動きでした。知見不足も手伝い、結局 Fcitx をインストールするという選択をしました。

### im-select というツールがあるらしい
調べるうちによく当たったのが [im-select](https://github.com/daipeihust/im-select) というツール。しかし、これは Mac と、 Windows 向けのツールでした。
曰く、

> linux
> You don't have to install this for linux. linux have tools to switch input methods

だそうです。iBus でもやり方次第ではうまくいくのかもしれません。
matplotlib

# 初めに
`matplotlib`で図を描画する際に、二種類の手法が用いられている。

- figuresとaxisを作成し、それを元に描画用メソッドを呼び出す（Object-Oriented style, OOスタイル）
- pyplotに全てを任せ、図・軸の設定を行う（pyplotスタイル）

## OO-style

```python
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2, 100)

# Note that even in the OO-style, we use `.pyplot.figure` to create the figure.
fig, ax = plt.subplots()             # Create a figure and an axes.
ax.plot(x, x, label='linear')        # Plot some data on the axes.
ax.plot(x, x**2, label='quadratic')  # Plot more data on the axes...
ax.plot(x, x**3, label='cubic')      # ... and some more.
ax.set_xlabel('x label')             # Add an x-label to the axes.
ax.set_ylabel('y label')             # Add a y-label to the axes.
ax.set_title("Simple Plot")          # Add a title to the axes.
ax.legend()                          # Add a legend.
fig.show()
```

## pyplot-style

```python
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2, 100)

plt.plot(x, x, label='linear')  # Plot some data on the (implicit) axes.
plt.plot(x, x**2, label='quadratic')  # etc.
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
```

OOスタイルでもpyplotスタイルでも、下の図を描画することができる。

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137120/b5013560-4a50-ee87-e98a-94ea40b0f57b.png">

公式チュートリアルによると、

> In general, we suggest to restrict pyplot to interactive plotting (e.g., in a Jupyter notebook), and to prefer the OO-style for non-interactive plotting (in functions and scripts that are intended to be reused as part of a larger project).

とあるので、ゴリゴリ研究をすすめるときには、スクリプトを書いてOOスタイルでやっていくのが推奨されているよう。以上で二種類の描画方法を示したので、以下では特にOOスタイルを扱う際のメモを書いていく。

# OO-Styleによる描画
## figure

```python
fig = plt.figure()            # an empty figure with no Axes
fig, ax = plt.subplots()      # a figure with a single Axes
fig, axs = plt.subplots(2, 2) # a figure with a 2x2 grid of Axes
```

# 見た目調整
## Tick
- https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.axes.Axes.tick_params.html

```python
ax.tick_params(axis='x', labelsize)
```
## 余白
```python
fig.subplots_adjust(left=0, right=1, bottom=0, top=1) 
# 余白の量
# left   = 0 : 左の余白はなし
# bottom = 0 : 下の余白はなし
```

# 見た目調整（plt）

```python
plt.xlabel(軸の名前)
plt.ylabel(軸の名前)
```


```python
plt.xlim(下限, 上限)
plt.ylim(下限, 上限)
```


# References
基本的に公式チュートリアルを元に自分が気になった部分をまとめましたので、随時参照してください。

 - https://matplotlib.org/tutorials/introductory/pyplot.html
【Rails】 AWSデプロイ　エラー遭遇まとめ

#参考文献
- [EC2サーバにRuby環境構築](https://qiita.com/tisk_jdb/items/61025d32862555846865)
- [(デプロイ編①)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで](https://qiita.com/naoki_mochizuki/items/814e0979217b1a25aa3e)
- [AWS構築　格闘日記-2　忘備録](https://happy-teeth.hatenablog.com/entry/2019/01/01/202411)
- [AWSのEC2で行うAmazon Linux2（MySQL5.7）環境構築](https://qiita.com/2no553/items/952dbb8df9a228195189)
- [gem install rmagickでchecking for Magick-config... noがでる解決方法](https://qiita.com/pugiemonn/items/3cee6d1aa6a07caab404)
-  [Amazon LinuxでRMagick 3.0.0 がインストールできない](https://qiita.com/mh4gf/items/173bb5c258198e941ecd)
-  [EC2にyumでNginxをインストールしようとしたらできなかった話](https://qiita.com/kazehiki03/items/7712660dd0401186ac4d)
-  [AWS＋Nginx＋Unicornを利用してRailsアプリをデプロイしてみた。〜その１〜](https://qiita.com/President_Taka/items/b18234b8db4cda97a113)

# Rubyインストール編

### rbenv インストールエラー
```
$ rbenv install -v 2.6.5
configure: error: in `/tmp/ruby-build.202005191817.10626/ruby-2.6.5':
configure: error: no acceptable C compiler found in $PATH
```

### 解決コマンド
```
$ sudo yum install gcc openssl-devel
$ sudo yum install -y gcc-6 bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel
$ sudo yum erase ruby.noarch
$ sudo yum install gcc
```

# MySQL編

### root初期パスワード在り処
```
$ cat /var/log/mysqld.log | grep password
A temporary password is generated for root@localhost: ************
```

### 初期パスワードログイン
```
$ mysql_secure_installation
Enter password for user root: ************
New password: ************
Re-enter new password: ***********
```


# RMgick編

###RMagickインストールエラー
```
$ bundle install --path vendor/bundle
An error occurred while installing rmagick (3.0.0), and Bundler cannot continue.
Make sure that `gem install rmagick -v '3.0.0' --source 'https://rubygems.org/'`
```

###解決コマンド
```
$ sudo yum -y install ImageMagick
$ sudo yum -y install ImageMagick-devel
```

#Nginx編

###Nginxインストールエラー
```
$ sudo yum install nginx
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
パッケージ nginx は利用できません。
エラー: 何もしません
```

###解決コマンド
```
$ sudo amazon-linux-extras install nginx1.12
                 or
$ sudo yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm -y
$ sudo yum install nginx -y
```

###nginx.conf設定後のpostメソッド対策
```
$ cd /var/lib
$ sudo chmod -R 775 nginx
```
BigQuery の 外部データ設定 に Google Spread Sheets が設定されているテーブルをスケジュールクエリで別テーブルに移している構成で認証エラーが発生したとき

# 概要
タイトルのような構成を退職者から引き継いだときに、退職者の権限がなくなると、大変という話

## エラー内容1
スケージュールクエリが以下のようなエラーを吐きます。

```
Bad Request; The issue may be resolved by verifying that the user has sufficient permissions and updating the credentials for this transfer config; error: "invalid_grant" error_description: "Bad Request"
```
## 対応1
スケージュールクエリの認証情報を更新します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243031/4d8f0a08-e965-fc4e-a6dc-837702ef4359.png)
https://cloud.google.com/bigquery/docs/scheduling-queries?hl=ja#updating_the_credentials_of_a_scheduled_query

## 確認1
実行履歴から再試行します。

## エラー内容2
デスクトップでアクセスしてと怒られます。

```
Error while reading table: hogehoge_table, error message: Google Sheets returned error: Please use a desktop web browser to connect this sheet.. Row 0; Col 0.; JobID: xxxxxxxxxxxxxxx:scheduled_query_xxxxxxxxxxxxxxx
```

## 対応2
この辺からアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243031/481e31e5-1b04-fed7-7514-c66c75b98f1e.png)
https://dev.classmethod.jp/articles/bigquery-create-table-by-external-datasource-gcs/

Allow accessします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243031/b4292045-517d-36b2-b765-18b9dcacefd5.png)
https://stackoverflow.com/questions/25178205/how-can-i-make-an-apps-script-to-instantly-allow-access-to-all-imported-elements

## 確認2
実行履歴から再試行します。

## 解決
自分の権限で接続し直せます

## 感想
めでたしめでたし
[Python]探索(itertools)　ABC167C

#[ABC167C](https://atcoder.jp/contests/abc167/tasks/abc167_c)

itertoolsを活用した探索
探索は bit全探索が推奨されることが多いが、Pythonなら基本的にはitertoolsで対応した方が実戦的ではないかと思っている。
[Pythonのitertoolsでできる全列挙のまとめ](https://minus9d.hatenablog.com/entry/2017/04/30/110855)

```python:サンプルコード
import itertools

N, M, X = list(map(int, input().split()))
a = [list( map( int, input().split() ) ) for i in range(N)]

for x in itertools.product([0,1], repeat=2):
  cost = 0
  level = [] * M
  judge = True
  ans = 1234567
  for i in range(N):
    if a[i] == 1:
      cost += a[i][0]
      level = [y + z for (y, z) in zip(level, a[i][1:])]
  for j in range(M):
    if any(level[k] < x for k in range(M)):
      judge = False
  if judge:
    ans = min(ans, cost)

if ans == 1234567:
  print(-1)
else:
  print(ans)
```
cookie と sessionを自分なりにまとめてみた。

# はじめに
質問されて答えることができなくて、cookieやsessionよく聞くけど理解してないやん
ってなったので調べました。
初心者なので間違っていたら指摘ください。。
自分なりの文章で書いているので悪しからず

# 参考文献
[【PHP超入門】Cookieとセッションについて](https://qiita.com/7968/items/ce03feb17c8eaa6e4672)

# そもそもな話
まずHTTPについての確認が必要。

クライアントがリンクをクリックする(リクエスト)
↓
サーバーがリクエストにあったページを飛ばす(レスポンス)

といったように通信される。
サーバーは、リンクをクリックされる以前のページの状態を覚えていないため、
リクエストを送りレスポンスを受け取ったら、その通信は終了してしまう。
webサイトにログインして、物をカートに入れて購入したいとしても、ページが遷移するたびに
通信が終了するため、カートに入れた人も購入した人も覚えてないってことですね。
そのため通販サイトのようなWEBサイトは作れない。

この以前の状態を覚えていないことを**ステートレス**ということを知りました。
state(状態)がless(無い)ってことですね。

では、ステートフルにするためにはどうしたらいいか。
といった話になり、その際にcookieとsessionが関わってきます。


# cookieとsession
始めに**cookie**から

>Cookieとは、Webサイトの提供者が、Webブラウザを通じて訪問者のコンピュータに一時的にデータを書き込んで保存させる仕組み。 **IT用語辞典から抜粋**

つまるとこと**cookieはクライアント側に保存されたデータ**

ブラウザ全体で300個のcookieに対応していて、1つのドメインに20個のcookieを提供できるらしいですね(1つのcookieに4096byte)

これを利用すればブラウザにデータが入っているので大丈夫かと思ったけど、
クライアント側にデータを保存するので詳しい人とかだと改竄できるってことで、

この問題を解決するために**session**が出てきます。

>コンピュータネットワークでは、接続を確立してから切断するまでの一連の通信のこと。HTTPのサイトでは、セッションにIDを振ることで同一のセッションを管理することができる。また、一連のインタラクティブな操作(例えばログインしてからログアウトするまで)を指す場合もある。   <br>**ITトレンドから抜粋**

このことから、割り振られたsession IDをcookieに格納すれば
サーバーにsession IDを送信することができる。

これなら、クライアント側でsession IDが改竄されたとしても肝心の中身はサーバーにあるため
安全な通信を行うことができることになる。

# まとめ
**cookie**
・クライアント側に保存される
・データが改竄される可能性有

**session**
・サーバー側に保存される
・データ改竄の可能性低
・session IDをサーバーに送信することでステートフルの状態を作れる


とのことでした。
よく見聞きする単語ですが、調べてみるとなるほどと唸るばかりでした。
Xserverにベーシック認証の管理画面を設置する

Xserverは管理画面を使ってアクセス制限(Basic認証)をかけることができるが、phpを使用して独自の管理画面を設置できたのでそのメモです。

#設置例
こんな感じで管理画面からユーザーを追加できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532979/2e79455c-4135-1e4e-8abf-92d575d37f56.png)


#htaccessの設定
```

AuthUserFile "/home/xserverのユーザー名/ドメイン名/htpasswd/ディレクトリ/.htpasswd"
AuthName "Member Site"
AuthType BASIC
require valid-user

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

```
参照：http://piyopiyocs.blog115.fc2.com/blog-entry-1072.html

#htpasswdの設置
/home/xserverのユーザー名/ドメイン名/htpasswd/ディレクトリ/に
adminというユーザー名の「.htpasswd」を設置


#phpの設定

ツールのダウンロード：https://www.space-i.jp/wp/?p=1690

Xserverでの初期設定の例

```php:index.php

	$admins = array("admin");	// 管理者のBASIC認証ID
	$htpasswd = "/usr/bin/htpasswd";	// htpasswdコマンドフルパス

	/*** パスワードファイルパス(htpasswdで生成したファイル) ***/
	$htfile = "/home/xserverのユーザー名/ドメイン名/htpasswd/ディレクトリ/.htpasswd";

	/*** htaccessで指定しているrealm -- ログアウトに使用 ***/
	$authname = "Member Site";

	$passwd_min = 4;						// パスワードは最小文字数
	$uid_min = 4;							// 認証ID最小文字数

```

管理画面から追加できるようなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532979/35f0a2d1-e2a2-5f4d-8b34-296648c80987.png)


以上
スキャンアプリケーション ITScan

#1. はじめに

[TwainDotNetによるスキャン - Qiita](https://qiita.com/mayo00/items/a7d6129f4aa61634384d)を元に、[TwainDotNetが内部で32ビットBitmapを作成する部分を24ビット以下にも対応 - Qiita](https://qiita.com/mayo00/items/9940990f593bee8b36af)を組み合わせて、スキャンアプリケーションを作成しました。Windows用です。
BMPとPNGで保存可能です。
BTScanを参考にして、その機能の一部を作成しています。PNGの保存は.NET標準機能で行っていますが、ファイルサイズはBTScanの圧縮率0(低い)よりも小さくなりました。(自分が試したグレースケール画像で約1/2～1/3。BTScanでも圧縮率を上げたら同じくらいになるのでしょうけれども)

![20201226.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534247/02d7ef0f-139b-a681-0b49-efbb037105cb.png)

このアプリケーションにはスキャン画像の表示機能はありませんが、[画像ビューア ImageTest1 - Qiita](https://qiita.com/mayo00/items/cb5d1f49464f69191efd)を監視モードで起動しておけば、リアルタイムに表示確認が可能です。

#2. バイナリ

[ITScan_1.08_20220103.zip](https://1drv.ms/u/s!Ag9NTi4_AogqlxIEqKDOAcVGNuRV?e=q9EFSt) 最新版

フリーウェアとします。無保証です。

#3. ソース

[GitHubリポジトリ](https://github.com/mayo55/ITScan)

[旧版バイナリ、ソース](https://1drv.ms/u/s!Ag9NTi4_AogqlkqA7JpdAYI9XEx_?e=3Axy5Q)

C#で記述しています。Visual Studio 2019でビルド可能です。
[TwainDotNet](https://github.com/tmyroadctfig/twaindotnet)を使用しています。32ビット以外の画像に対応するため、いくつかのクラスをコピーして書き換えて使用しています。

#4. 動作環境

.NET Framework 4.7.2以上＋.NET Framework 3.5以上。
.NET Framework 4.7.2以上はWindows 10 April 2018 Update(1803)以上であればインストールされています。
ソースからリビルドすればおそらく.NET Framework 2.0以上くらいまで落とすことができます。
TwainDotNetが.NET Framework 3.5向けのため、おそらく.NET Framework 3.5以上も必要です。
32ビットアプリケーションです。
Windows 10 64ビット版で動作確認をしています。

#5. 既知の問題

1) 大きな原稿をスキャンした時にたまにファイルが作られずにスキャナダイアログが閉じる(メモリ不足？)。ITScanを立ち上げ直すまで復旧しない。→ITScan 1.06でメモリ使用量を減らして緩和しました。B5本の表紙カバー(折返しありでB4超えの大きさ)を24ビットカラーでスキャンした場合に、内部のBitmap作成で必ずエラーになっていたのが、発生しなくなりました。
2) 1.06：回転設定を起動時に反映させず、90/180/270を設定していても0度になります。起動後に90/180/270を再度設定して回避して下さい。

#6. 気になる点

1) スキャンが終わったらスキャナのダイアログが閉じてしまいます。TwainDotNet自体の動作のようです。BTScanのようにスキャナのダイアログを開いたままにする方法はないものか…。→ITScan 1.04で対応しました。
2) JPEGに対応していないのは、JPEGの品質指定のUIを作るのを面倒がっているからです。
3) ImageTest1の監視モードと併用すると、ImageTest1側で頻繁に読み込み失敗が表示されます。ImageTest1側での対処を検討中です。→ImageTest1 1.13 20200522で対応しました。

#7. 更新履歴

2022/01/03 1.08
1) Canonの新しいドライバでスキャナエラー時に操作できなくなるのを修正。

2020/12/26 1.07
1) 設定画面追加。回転設定(0/90/180/270度)追加。
2) 1.06のzipにTwainDotNetを入れ忘れていたのを修正。

2020/11/07 1.06
1) メモリ使用量を削減して、大きな原稿をスキャンした時にファイルが作られずにスキャナダイアログが閉じる問題を緩和。

2020/05/24 1.05
1) スキャン画像の転送中にキャンセルを行うとフォームがdisableのままで操作不能になるのを修正。

2020/05/23 1.04
1) スキャンが終わってもスキャナのダイアログを閉じないように変更。

2020/05/22 1.03
1) TwainDotNetから返却されたBitmapの解放処理を追加。これにより、数ページ～十数ページ程度(スキャナや取り込みサイズによる)で連続スキャンが止まり、途中までしかファイルが保存されないのを修正。

2020/05/22 1.02
1) TwainDotNetのビット数判定を厳密に変更。(24ビット以下→32ビット以外(64ビットを含む)、8ビット以下→24ビット未満)
2) アクセス・キーを追加。
3) カウンタの初期値を0から1に変更。
4) TwainDotNetにADFを使用するフラグのセットを削除。1.00と同じ動作に戻した。

2020/05/20 1.01
1) 24ビットカラーの場合に32ビットで保存していたのを24ビットに変更。
2) TwainDotNetにADFを使用するフラグをセット(特に動作が変わっているように見えない)。→フラットベッドとADFの両方があるスキャナの場合に、毎回ADFになりそうなので、次回アップデートで削除予定。

2020/05/19 1.00
1) 初版。
docxで縦横切り替えても向かわらないじゃん、って話

# 問題点
`section.orientation = WD_ORIENT.LANDSCAPE`を使ってもページが横にならなかった。
肖像画(PORTRAIT)に向いているのが縦。
風景画(LANDSCAPE)に向いているのが横。

# 解決策
直でページ幅とかをいじってあげればいいらしい。

以下のサイトを参考にしました。
https://stackoverflow.com/questions/31893557/python-docx-sections-page-orientation/37681150


```py:画像が入ってるだけのドキュメントを作る関数。

from docx import Document
from docx.shared import Cm
from docx.enum.section import WD_ORIENT

def insert_to_doc(img, path):
    doc = Document()

    # changing page settings
    sections = doc.sections
    for section in sections:
        section.top_margin = Cm(1)
        section.bottom_margin = Cm(1)
        section.left_margin = Cm(1)
        section.right_margin = Cm(1)

        # ↓をやっても変わってくれない。開いてレイアウトを確認しても縦のまま。謎。
        section.orientation = WD_ORIENT.LANDSCAPE

        # ↓をやるとちゃんと切り替わってくれる。
        section.page_height, section.page_width \
            = section.page_width, section.page_height

    doc.add_picture(img)
    doc.save(path)
    return
```
【Nuxt.js】アプリ開発実践編：Nuxt + Vuex + firebaseでログイン付きToDoリスト①

# 前置き

![Loginfinish.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469755/eaedb13f-55d1-a70a-3aba-83200992f1d6.gif)

前回のTODOリストに
オプション機能をつけていきます♪
https://note.com/aliz/n/n8411db2c9a20

今回はログイン機能を追加🌟
実際にサービスを運用するには
必須の機能ですね！👍
以前の記事をやっていない方でも
仕組みと書き方が分かれば大丈夫です🙆‍♀️

内容が濃いのでお知らせした通り、
有料記事になりました💰

**【使うもの】**
・Firebase Authentication
・Vuex(ログイン状態の保持)

**【流れ】**
ボリュームがあるため2回に分けます！
・ログイン画面の作成
・新規アカウント作成画面の作成
・ログイン時とログアウト時の
　表示の出し分け
・+a
　メールアドレス以外のログイン
　エラー時の処理や
　アカウント作成時にメール送信

**❓公式guides, Referenceの読み方**
基本的にfirebaseのreferenceは
英語の状態で表示し、
自分でgoogle翻訳で翻訳しましょう📚🔍

言語を日本語にすると
古いバージョンだったりするので、
最新の英語を翻訳していくのがベスト！⭕️
ただいきなり全部英語だと
欲しい情報がどこにあるか分からないので
最初は日本語で表示させて
ある程度検討をつけてから英語にしてます🍬
(英語も理解できるように頑張ろう…💪)

# Step1: firebaseAuthの準備

まずはfirebaseで既に作成したプロジェクトに
ログイン方法の設定をしていきます🍒
簡単にできるメールアドレスから！✉️
ログインできるかどうか判断するため
firebase上でアカウントを作成してみます🌟

💡後からアカウント作成画面も作ります
💡Googleアカウントでの
　ログインなども追加していきます

・プロジェクトの概要ページから
　サイドメニューのAuthenticationを選択
　ログイン方法を設定を選択

<img width="901" alt="auth1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469755/1f9ce80d-b660-e032-ff5b-03e4347eafaa.png">

・メールを選択

<img width="701" alt="Frame 2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469755/10245db7-cb0e-2b3d-6110-b76acd9c720b.png">

・メールでのログインを有効にし、保存

<img width="701" alt="Frame 3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469755/32cf32c4-d888-0fdd-6c24-d82b0c249a4e.png">

・usersタブに戻りユーザーを追加

<img width="850" alt="Frame 4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469755/f1148136-8e59-f499-d865-d2248befa318.png">

登録できるとユーザー情報が表示されます🌟

<img width="850" alt="Frame 5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469755/16ed698d-e740-a5ae-e7e0-7bca5b714a8d.png">

# Step2: ログイン機能の実装

![Login1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469755/610bb46e-0baa-bf7c-9b4e-1227343b02a6.gif)

続きはこちら♪
https://note.com/aliz/n/n882048f66734
REDMINEをAWSのCloudFrontで配信しようとしてハマった話

# はじめに
AWSのサービスを評価する目的で、社内サーバーで運用しているREDMINEをAWS上に持っていこうということになりました。ついでにALBやCloudFrontを使ってAWS WAFなんかの評価もできたらいいよねー、などと簡単に考えていたら、思わぬところでハマったので備忘録として残しておきます。

# 発生した現象 その１

EC2→ALB→CloudFrontの順番で実装。

インターネットから直接ALBを叩くと問題なく接続できることを確認後、CloudFront経由でのテスト開始。ログインID・PW入力し、「ログイン」ボタンを押したところ`422 Invalid form authenticity token.`というエラーが出てREDMINEが使えません。

# 確認と設定　その１

`log/production.log`を確認したところ、`Can't verify CSRF token authenticity`というエラーメッセージを発見。ググったところ、次のページを見つけました。

stack overflow - [AWS Cloudfront causing CSRF Token Mismatch Exception](https://stackoverflow.com/questions/48865338/aws-cloudfront-causing-csrf-token-mismatch-exception)

上記ページの回答から Fowarding cookies が問題だということで、CloudFront の Behaviors タブ、**Foward Cookies** の Whitelist に`_redmine_session`を書き込んだところ、うまく動くようになりました。（Foward Cookies は「None」から「Whitelist」に変更）

# 発生した現象　その２
チケットの添付ファイルをアップロードしたところ、ファイルが消えてなくなってしまう現象が発生。さらに、プロジェクトの「ファイル」タブからアップロードすると「**ファイルは不正な値です**」というメッセージが表示されてしまいます。
今度もALB経由だと正常にアップロードできたので、CloudFrontの問題だと切り分けができました。

# 確認と設定　その２
`log/production.log`を確認するも、エラーメッセージは出ていません。
Apache側に何か出ていないかと思い、`httpd/access_log`を見たところ、ALB経由のときのログと比較して明らかに文字列が短い。比較すると、**Query String**がすっぽり抜けていることが分かりました。

対応として、先ほどと同じくCloudFrontのBehaviors タブ、**Query String Forwarding and Caching**の値を`Fowrward all, cache based on all`に変更したところ、正常にアップロードできるようになりました。

# おわりに

エラーログの確認は基本中の基本ですね。

今回はログをすぐに確認せず、画面に表示されたメッセージだけで調査を開始したので原因にたどり着くまで時間がかかってしまいました。大反省です。ALB経由だと正常動作していたので、ログベースで比較できたのは良かったと思います。

CloudFrontは調査に時間がかかるため、こんな情報でも役に立つかもしれないと考えアップしておきます。お付き合いいただきありがとうございました。
Gitの使い方-permission deniedが出ると思ったらそもそもcdしてなかった話-備忘録

プログラミング初心者の少し笑い話な備忘録。
#permission deniedというエラーが発生した
既存フォルダにgit initしようとしたところ、上記のエラーが発生した。
私の場合はpublickeyは表示されなかった。

このエラーの簡単な解決方法は
Git Bashのアイコン上で右クリック→管理者権限で実行ということだった。

ひとまず、実行すると今度は次の表示が。

#*****：Is a directory
```
bash: /c/Users/*********: Is a directory
```
立て続けに起こるエラーにパニックになっていると、ふと、いつもなら黄色くファイル表示されるはずの部分がないことに気付く。
そしてよくよく、自分が入力し続けているワードを見ると、チェンジディレクトリのcdを入力していない！

cdから間違えることなく入力し、実行すると無事git initできました。

以上
エクセルの名前・セル範囲を Python　VBAで読み込む

#エクセルの名前で定義されたセル範囲を読みこむ　Python VBA

作業イメージ

1,エクセルにの名前で定義されたセル範囲に　開始日付・終了日付、プルダウンでの選択項目などの情報がある
2,エクセルの名前で定義された範囲は2.3行程度
3,店舗ごとの繰り返し処理など多量のデータはシートから読み込む　[以前のメモ](https://qiita.com/inuo55/items/914847837c9efa489a6b)
4,pythonはOpenPyxLモジュール　を使っている
5,スクレイピングに必要なデータはエクセルから読みこむとする



##python でエクセルの名前で定義されたセル範囲を読み込む

エクセルの名前は「テスト用名前範囲　」
エクセルファイル名は 「テスト.xlsx」　とする
ブックレベルの名前を使うものとする(シートレベルで同じ名前のないように）

```python:エクセルの名前のセル範囲を取得する
import openpyxl
wb=openpyxl.load_workbook('テスト.xlsx')
my_range = wb.defined_names['テスト用名前範囲']
dests = my_range.destinations
cells = [] 
for title, coord in dests:　　#titleにはシート名 がとれています。
	ws = wb[title]
	cells.append(ws[coord]) 
 C=[]
 for row in cells:
     for aa in row:
         C.append([col.value for col in aa])
        
```

C　はリストのリストになっているのでエクセル名前範囲の一番左上のセルは
C[0][0] で使えます。
名前範囲が小さいときはこれで結構使えます。

##エクセルVBAで名前で定義されたセル範囲を読み込む

Variant型変数にセル範囲を入れるとC(1,1) のように使えます。
pythonと違い　1から始まります。
エクセルは同時にたくさんのファイルを開いたり、運用がぐちゃぐちゃのことが多いので
ブック→シート→名前で指定した方が安心です。

```vb:エクセルの名前の定義を取得

Dim C As Variant
'メニューシートにテスト用名前範囲がある
C = ThisWorkbook.Sheets("メニュー").Range("テスト用名前範囲")

```
   
C(1, 1)で一番左上セルの値を取得できます。

エクセルの名前をこまごまと読み込めたらスクレイピングの運用が楽になります。
現在作業しているCurrentBranchにMasterBranchの情報を反映させたい時

# 背景
プログラミングスクールにてフリマアプリをチーム開発している時でした。

現在作業しているブランチにマスターブランチの情報を持ってきたい・・・・

こんな時の解決法を今回紹介します。

以下の４つのコマンドをターミナルで入力するだけで大丈夫です！！

## ※注意点
コマンドを実行する前の注意点として、編集途中のファイル等がある場合は、一度コミット&プッシュして何もない状態にしておきましょう。

```

<!-- 開発中ブランチからmasterブランチへ移動 -->
$ git checkout master

<!-- リモートのmasterを反映 -->
$ git pull origin master

<!-- masterブランチから開発中のブランチへ移動 -->
$ git checkout 開発中のブランチ名

<!-- maserの内容を開発中ブランチに取り込む -->
$ git merge origin master

```

これで作業ブランチにマスターブランチの情報が反映されていると思います！！

最後まで記事を読んで頂きましてありがとうございます！！

参考になれば幸いです:pray_tone2:
虫の頭でcoffeescriptを理解しようとしてみる。静的なプロパティとプライベートプロパティ

わざわざnewしなくてもカマキリというのはカマキリので、カマキリとはなにかを説明したい

``` coffeescript:musi.coffee
class カマキリ
  @説明:"カマキリだよ"
```

これでカマキリ.説明というカマキリクラスの静的プロパティ(newしなくても使える)ができた

``` coffeescript:musi.coffee
console.log(カマキリ.説明)
#カマキリだよ
```

個人的にはカマキリはかっこいいので、こっそり宣言したい
そういう時は秘密(プライベート)なプロパティを作れる
:を=にするとできる
慣例として秘密のプロパティにはアンダーバー(_)を頭にくっつけるらしい
日本語表記なのでさらにその前に秘密をくっつけてわかりやすく

``` coffeescript:musi.coffee

  秘密_評価="カマキリはかっこいい"

``` 
​
newして秘密_評価を呼び出しても何も出てこない

``` coffeescript:musi.coffee
オオカマキリ = new カマキリ
console.log(オオカマキリ.秘密_評価) 
#(何も出ない)
```

じゃあなんに使うのって言われたら、クラス宣言してインデント(行の中)した中でのみ使える変数だと思えばいいらしい
atomのerbでrailsのコードが上手く反応してくれない

<img width="960" alt="atom.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640486/e51b48c0-c035-4712-af6d-05e3a9455249.png">


ruby on railsを勉強している初心者です。progateのruby on rails のすべて終了後、自分でコードを書いているのですが、index.html.erbに<% >を追加したところ、以下のhtmlコードはすべて反応しなくなりました。このような時はどのような対応をすればよいでしょうか。atomでコードを書いています。
boto3：retryのアルゴリズム実装memo

`botocore/botocore/retryhandler.py`


boto3の指数バックオフ + jitterは以下の式
`base * growth_factor ^ (attempts - 1)`

- baseはrand()なので、0-1の間。リトライ実行ごとにシャッフルされる
- DynamoDBだけbaseが0.05固定 `botocore/botocore/data/_retry.json`より
- growth_factorは初期値2

リトライ初回はattempts=1よりbaseとなり、一瞬待つことになる。
rand()が0に近いとほぼ待たずにリトライすることがある。

実装の疑問
https://github.com/boto/botocore/issues/1471
正しいプログラミングの学習方法について語る


今回は　プログラミング学習について　見ていきます。　

特に独学での学習者はこれらの点を気をつけて学習したほうがいいです。





#　１　完璧主義を目指してはいけない　


プログラミングの学習において、完璧主義を目指すのはほんとに自殺行為といえます。

これは学習でもそうですけど、プロダクトを作るときも同じです。　

最初は６割や７割ベースで　全然いいと思う。　


特に独学でやっている人ほど、完璧主義を目指すのはやめましょう。





#　２　暗記も必要もない

学校の勉強のような、暗記も必要ないです。

覚えるのは基礎だけでいいわけで　あとは

必要なときに　必要な分だけ覚えていくのがいいと思う。　

なので　メソッドやライブラリなどを全部覚える必要はないです。







#　３　小さい目標をつけるべし


わたしもプログラミングは全部独学で覚えたんですけど　
独学の場合だと、やはりモチベーションが続かないんですよね。　
モチベも続かないし、普通に挫折もすると思います。　

挫折しない人なんているんでしょうかね？？？

なので　小さいな目標を立てることが重要です。　


例えば　１日　１０ページすすめるとか　

１日　１回はアウトプットするとか　

サンプルコードをやるとかね。　

因みに習慣の法則というものがありまして　

２１日間　続けることが出来れば、　そのあとも継続できるようになるので　

とりあえず　３週間は続ける事が大事。


　




#　４　インプットよりも　アウトプットを増やしなさい


インプット学習ってみんな普通にするんですよ。　

でも　アウトプットしている人はほんとに少ないです。　

みんな、　Ｕｄｅｍｙとかの動画は見ているけど　
それで終わっている人が多いからね。　

なので、アウトプットする習慣を身に付けることが最も大事。


インプットよりも、どうやってアウトプットできるかを
考えるべし。　

初心者であれば、　パイザのコードクロニクルなどが
おすすめです。







#　５　とりあえず　ググり癖はつけるべし

分からなければ　すぐに調べる。

調べ方は色々あるけど　　

目的で検索するか、　コードをコピペしていくのが基本。


で　これは　誰かに質問するときも同じで　
質問するときも、　ちゃんと調べてから質問すること。　


あと　何でもかんでも、質問すればいいってわけじゃないからね。　

あんまり、質問ばっかりしていると嫌われるよん。









ＰＳ　

[Ｃ＃プログラミングマスター講座](https://note.com/zazizuzezo22334/n/ne4af52bf865e)も
発売中でーす。

只今７０％ＯＦＦセールやってます。

Ｃ＃が分からないと　Unityもできるようにならないので　
Unityをやるひとにも　おすすめです。
Eclipceを使ったGithubのはじめ方　

###概要###
GitHub上に作ったリポジトリにEclipseを使いファイルを送る

対象者
　GitHubを初めて使う人
　Eclipseを使った事がある人

<br>
####1. git上にリモートリポジトリを作成####
　GitHub本サイトのマイページにて
　プロフィール写真左横の 「＋」マークをクリックし作成画面へ
<img width="400" alt="リポジトリ作成.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638441/3a719e67-987b-0650-1a30-ae197f417128.png">
　1.リポジトリ名　2.公開/非公開を選択後、[create]を選択

<br>
####2. eclipseにてローカルリポジトリを作成####
　1. Gitレポジトリを開き、<img width="24" alt="スクリーンショット 2020-05-18 16.29.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638441/a1ecb9ad-6a8a-2da7-6ae8-747d92919ae5.png"> マークか「新しくリポジトリ作成」を選択
　 <details><summary>Gitレポジトリ　開き方説明</summary>
　右上の「＋」マーク付きアイコン<img width="148" alt="perspective位置.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638441/b7ece71a-43a8-6a97-e685-21df2d20f18a.png">を選択→　[Git]選び、[開く]押す。

　2.リポジトリをどこに置くかを選び、[作成]を押す。

[](
 <!--<b>注意:リポジトリはファイルの外に作ること</b>-->
)


  * リポジトリの種類
   * ローカル: 自分のPC上にあるリポジトリ。
   * リモート:  GitHub上　　〃
  

<br>
####3. ローカルリポジトリにプロジェクトを追加####

　1.右クリックでファイル選択→[チーム]→[プロジェクトをシェア]でウィンドウを開く　
　
　2.リポジトリを選択し、[完了]押す。

<details><summary>　画像</summary>
<img width="374" alt="スクリーンショット 2020-05-18 18.15.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638441/f853f1ff-9424-6389-3a79-8aa3cefe4ed1.png">




　このような<img width="35" alt="?の意味.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638441/1ab04b20-9d62-e11a-5d26-f5212432d2a7.png"> 「？」マークが付けば追加成功


<br>
####4. ファイルをコミット####
  * コミット(commit)：　変更・追加したデータの差分をローカルリポジトリに記録すること

　ファイル選択→[チーム]→[コミット] でGitステージングビューを開く
　<img width="414" alt="1時22分gitstating.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638441/50918232-c842-dc56-09a5-533342d69bdc.png">
　1.ステージング　
　2.コミットメッセージ記入後、[コミット]を選択

  * ステージングエリア：　コミットするファイルの置き場
  * ステージング：　　　ステージングエリアにファイルを置くこと

<details><summary>ステージングのやり方</summary>
　選択→「+」アイコンをクリック<img width="209" alt="1時22分gitstatingg.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638441/577eef49-0dee-348d-c02c-38e5f98f773b.png">



　黄色マーク <img width="50" alt="commit済.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638441/0d481bbf-adee-1e55-6568-ecf0178c76de.png"> が付けばコミット成功



<br>
####5. リモートリポジトリにプッシュ####
  * プッシュ(push)：　ローカルからリモートにファイルをアップロードすること
  
　ファイル選択→[チーム]→[リモート]→[プッシュ] でウィンドウが開く
　<img width="299" alt="1じ23push.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638441/2dc57171-760e-0c81-963e-d866d40be0ce.png">
　1.送り先のリモートリポジトリURL記入　
　2.ユーザ名、パスワード入力後、[次へ]を選択

<img width="297" alt="1時19分2git.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638441/991cd251-19a0-37b2-9cb8-ab9e94338a2a.png">
  3.ソースと宛先を選択し[Add Spec]をクリック。経路が下の欄に追加されたら[完了]を押す
 
　<img width="320" alt="push成功.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638441/2508606d-397c-6c70-6637-a67cb5c12d16.png">
〇〇にpushしました、との画面が出ればpush成功