OmniAICreator/Qiita-1.07M huggingface dataset:
RDSで時間指定によるオートスケールを実現する（新）

# はじめに

https://qiita.com/t-kudo9/items/2099bd4d776333f5885a
の続きです。

以前の記事では負荷の高い時間帯を狙って、1日に1回RDSクラスタのReaderを増やす対応をしましたが、月末月初にかけサービス負荷が高い傾向があったので、前回以外のインスタンスも増やせるように前回使用したLambda関数を改造し対応できるようにしました。

# 具体的な対応内容

## Lambda

前回はインスタンス名やクラスはベタ打ちで指定していました。

```python:インスタンス追加（前回）
import boto3

def lambda_handler(event, context):
	# TODO implement
	rds = boto3.client('rds')
	response = rds.create_db_instance(
		Engine='aurora',
		DBClusterIdentifier='[対象クラスタ]',
		DBInstanceIdentifier='[追加するインスタンス名]',
		DBInstanceClass='[他のReadeのインスタンスクラスで良いかと]',
		PubliclyAccessible=False, #外部接続OKであればTrueで
		DBParameterGroupName='[他のReaderのパラメータグループ名で良いかと]',
		PromotionTier=15 #フェイルオーバー優先度は最も低くします
	)
	print(response)
	return 0
```

```python:インスタンス削除（前回）
import boto3

def lambda_handler(event, context):
	# TODO implement
	rds = boto3.client('rds')
	response = rds.delete_db_instance(
		DBInstanceIdentifier='[追加時のインスタンス名]',
		SkipFinalSnapshot=True
	)
	print(response)
	return 0
```

今回は起動される契機（日次と月次）が増えるため、eventからインスタンス名を指定できるようにします。

```python:インスタンス追加（今回）
import boto3

def lambda_handler(event, context):
	# TODO implement
	rds = boto3.client('rds')
	response = rds.create_db_instance(
		Engine='aurora',
		DBClusterIdentifier='[対象クラスタ]',
		DBInstanceIdentifier=event['INSTANCE_NAME'], # 修正箇所
		DBInstanceClass='[他のReadeのインスタンスクラスで良いかと]',
		PubliclyAccessible=False, #外部接続OKであればTrueで
		DBParameterGroupName='[他のReaderのパラメータグループ名で良いかと]',
		PromotionTier=15 #フェイルオーバー優先度は最も低くします
	)
	print(response)
	return 0
```

```python:インスタンス削除（今回）
import boto3

def lambda_handler(event, context):
	# TODO implement
	rds = boto3.client('rds')
	response = rds.delete_db_instance(
		DBInstanceIdentifier=event['INSTANCE_NAME'],  # 修正箇所
		SkipFinalSnapshot=True
	)
	print(response)
	return 0
```

## CloudWatch

ターゲットにしてしたLambda関数の設定を変更します。
「入力の設定」で「定数(JSONテキスト)」を指定し、追加するインスタンス名を指定します。

### 例

-  {"INSTANCE_NAME": "test-daily-auto-instance1"}
-  {"INSTANCE_NAME": "test-monthly-auto-instance2"}

あとは前回同様、日次で起動するイベントルールに加え、月次で起動するイベントルールを追加します。
※日次と月次で起動するインスタンス名は上記の通り、重複しないようにします。


# 確認

前回同様リアルタイムで確認可能であれば、RDSのデータベース一覧から確認でき、
リアルタイムで確認が難しければ、通知メール（RDS Notification Message）で確認が可能です。

# 余談

JSONのインスタンス名を配列で指定＆Lambda関数も対応すると、一度に複数台立ち上げることができるのですが、同じAZにインスタンスが作成されたり、Lambda関数のタイムアウト値がデフォルト（3秒）のままだと、指定した台数を起動する前にタイムアウトしてしまうので色々注意が必要そうです。
PHPでIPアドレスから国名とか都市名を取得する

# はじめに

IPアドレスから国名や都市名を判別する方法は、ApacheやAWS Route53等で可能なのですが、アプリケーション内で判別したいケースもあるかな（ないかな？）と思いましたのでまとめました。

# 今回利用するリソース

MaxMindさんの `GeoIP2-php` および `GeoLite 2データベース` を使います。
※データベースは無料版を使います（データの更新は毎月第一火曜日とのことです。）

- https://github.com/maxmind/GeoIP2-php
- https://dev.maxmind.com/geoip/geoip2/geolite2/

# 導入手順

## GeoIP2-php

composerでインストールインストールします。

```bash
$ ./composer.phar require geoip2/geoip2:~2.0

~~~合わせてインストールされたpackageが表示（割愛）~~~

$ 
```

## GeoLite 2データベース

https://dev.maxmind.com/geoip/geoip2/geolite2/
のページ下部にある「Downloads」より、

- GeoLite2 Country
- GeoLite2 City

の「MaxMind DB binary, gzipped」をダウンロードします。
ダウンロード後は、以下の2ファイルを使います。

- GeoLite2-Country.mmdb
- GeoLite2-City.mmdb

# 実装例

国名までの情報があれば良い場合は「GeoLite2-Country.mmdb」、都市名まで情報が欲しい場合は「GeoLite2-City.mmdb」をロードすれば良いようです。

```php:都市情報のデータから諸々取得
<?php

require './vendor/autoload.php';

use GeoIp2\Database\Reader;

// ダウンロードしたバイナリを指定
$reader = new Reader('./db/GeoLite2-City.mmdb');

// チェックしたいIPアドレスを指定
$abeshi = $reader->city('128.101.101.101');

// IPアドレスの各情報を取得
var_dump($abeshi->country->isoCode); //国コード
var_dump($abeshi->country->name); //国名
var_dump($abeshi->country->names['ja']); //国名(日本語)
var_dump($abeshi->city->name); //都市名
var_dump($abeshi->city->names['ja']); //都市名(日本語)
```

```bash:実行結果
$ php ./test.php 
string(2) "US"
string(13) "United States"
string(21) "アメリカ合衆国"
string(10) "Saint Paul"
string(18) "セントポール"
$ 
```

# さいごに

以上を活用すれば、アプリケーション内で国や都市によって挙動を変える実装ができますが、

> IP geolocation is inherently imprecise.

「IP位置情報は本質的に不正確です」とある通り、過信して利用しない方が良いようです。
PHPの変数の値の更新について(Progate)

すごい初歩的な質問です。
現在ProgateでPHP「変数の値を更新する、変数に数字を足す（３）」を学習中です。


```
$x = 2;
$y = 2;
①echo ++$x;  //echoの前に　+1　される　結果：３
②echo $y++;  //echoの後に　+1　される　結果：２
```

上記ですが私の解釈を
それぞれ式にすると
① 1 + $ｘ = 3　←わかる
② $y + 1 = ２　←？？？
になります。。。
この場合②の正解の式はどうなりますか？
レベル低い質問で申し訳ないです。。。
Node.jsで関数の呼び出し元のファイル名を取得する

# Node.jsで関数の呼び出し元のファイル名を取得する

ログ出力とかで、呼び出し元のJavaScriptファイルのファイル名を取得したいという場面があります。

以下のコードで、関数 `hogehoge()` を呼び出したJavaScriptファイルのファイル名が取得できます。

```javascript
import path from 'path';

const hogehoge = () => {
  // 呼び出し元のファイル名を取得
  const caller = path.basename(new Error().stack.split('at ')[2].trim()).split(':')[0];

  // 標準出力
  console.log(caller);
}
```


# 解説

細かく分割して書くとこんな感じです。

```javascript
import path from 'path';  // Node.js Path Module

const hogehoge = () => {
  // 呼び出し元のファイル名を取得
  const stack = new Error().stack;        // (1) スタックトレースを取得
  const lines = stack.split('at ');       // (2) atで分割し、配列を取得
  const line = lines[2];                  // (3) 配列の2番目を取得
  const trimed = line.trim();             // (4) 前後の空白・改行を削除
  const basename = path.basename(trimed); // (5) ディレクトリパスを削除
  const splited = basename.split(':');    // (6) :で分割し、配列を取得
  const caller = splited[0];              // (7) 配列の0番目を取得

  // 標準出力
  console.log(caller);
}
```

## (1) スタックトレースを取得

スタックトレースというのは、どの関数から呼ばれてきたかの履歴です。
以下のような文字列になっています。

```
Error
    at hogehoge (file:///src/app/lib/hogehoge.js:10:15)
    at foo (file:///src/app/lib/foo.js:20:10)
    at bar (file:///src/app/lib/bar.js:30:20)
```

この場合、 `hogehoge` を呼んだのは、 `foo` で、 `foo` を呼んだのは `bar` ということがわかります。
今回はこの `foo.js` という文字列を抽出するのが目的です。

`new Error().stack` でこの文字列を取得できます。

以下を参考にしました。
[How to print a stack trace in Node.js?](https://stackoverflow.com/questions/2923858/how-to-print-a-stack-trace-in-node-js)

## (2)(3)(4) atで分割し2番目を取得

atで分割すると、

- 0番目: `Error`
- 1番目: ` hogehoge (file:///src/app/lib/hogehoge.js:10:15)`
- 2番目: ` foo (file:///src/app/lib/foo.js:20:10)`

となります。この2番目を取得し、余計な改行や空白を削除します。

以下を参考にしました。
[Get name and line of calling function in node.js](https://stackoverflow.com/questions/14172455/get-name-and-line-of-calling-function-in-node-js)

## (5) ディレクトリパスを削除

`path.basename()` を利用すると、一番最後に登場する `/` より右側の文字列を抽出できます。これにより、

```
foo (file:///src/app/lib/foo.js:20:10)
```

が

```
foo.js:20:10)
```

になります。

## (6)(7) `:` で分割し0番目を取得

`:` で分割すると、

- 0番目: `foo.js`
- 1番目: `20`
- 2番目: `10)`

となります。この0番目を取得すれば、これが呼び出し元のファイル名です。
ちなみに、1番目は行数で、2番目は列数です。

# さいごに
サードパーティーのパッケージに依存せずに書けたのが嬉しかったです。参考になりましたら幸いです。
SFDC:ロングテキストエリアをリストビューで使用する方法

ロングテキストエリア型の項目に何かしらの入力が合った場合、リストビューで絞り込む方法を記録

#方法１
テキストエリア型に変更
確認できたのは２５５文字までのテキストエリア型には、リストビューでも絞りこみ可能でした。

#方法２
新たにチェックボックス項目を作成し、プロセスビルダーでロングテキストエリア型の項目に入力があった場合、チェックをするという方法
React+Firebaseでポートフォリオを作ってみた

## はじめに
8月からフリーランスエンジニアとして活動する予定でして、今月から案件の面談も始まるということで、自分の技術を示せるものがあればいいなと思い、ポートフォリオを作ってみることにしました。

## 実装期間
2019/04/28 ～ 2019/06/04
本業が多忙でなかなか時間が取れない状態でしたが、なんとか時間を見つけて約1ヶ月で実装しました

## 作ったもの
ペットでつながるSNS「Coopet」です。
https://coopet-51a0b.web.app/
ペットの画像を投稿したり、他のユーザーの画像にコメントをつけることで交流を図るSNSです。
※現状はモバイルで使用することを想定しているので、PC版ではレイアウトが崩れる可能性があります(機能の利用は問題ありません)
![2019_06_04_11_41_35.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/b5561eef-b2ee-3510-c701-b6dcf0adf21f.gif)
## 使用した技術

### フロントエンド
React+Reduxを使って実装しました。
Reactの使用経験は皆無でしたが、業務でAngularを使用していることもあり、それほど苦労せずに身につけることができました。
またmiddlewareとしてredux-saga(Firebaseへのアクセス処理を切り出し)、redux-loggerを導入しました
PWA化されており、ホーム画面への追加通知やスプラッシュスクリーンが表示されるようになっています

### サーバーサイド
Firebaseを使いました。
Firebase Authenticationによるメール、SNS認証の導入、Firebase Realtime Databaseによるユーザー情報の管理、Firebase Storageによる画像保管、Firebase Hostingによるアプリケーションのホスティングを実現しています

### テスト
テストはReactではよく使われるとのことで、Jest + enzymeの構成でテストを行いました。

### ソースコード管理
Githubを使ってソースコード管理をしました。
https://github.com/RinGoku/coopet
業務ではSubversionを使っており、Gitをちゃんと使ったことはなかったのですが、以下のような流れで複数人開発を意識した使い方をしてみました。

1. Issue作成
1. Issueに対応したfeatureブランチをdevelopブランチから作成
1. 開発作業
1. 作業成果をコミット&リモートへプッシュ
1. プルリクエスト発行
1. デプロイ後動作確認
1. プルリクエストを承認し、developブランチへマージ & featureブランチ削除
1. Issueクローズ

ブランチを切ったり、プルリクエストを発行してみたりと使ったことのない機能に触れられてよかったです。
※クライアントツールとしてGit Krakenを使用しました

### CI/CD
Circle CIを使って、ソースコードの自動テスト+自動ビルド、Firebase Hostingへの自動デプロイを実現しています。
これによって、Githubにソースコードをプッシュするだけで、テスト→ビルド→デプロイが自動的に行われるという快適な環境で開発することができました。
業務にてデプロイ自動化の一環でSubversionの最新ソースをデプロイするシェルを苦労して作ったこともありますが、こういったツールを取り入れることでそういった環境をある程度手軽に手に入れられるのは素晴らしいですね。

## 苦労した点

### Firebase Realtime Databaseの使い方
実業務で使用しているRDBの考え方に慣れているせいか、NoSQLの考え方に慣れるのに苦労しました。Realtime Databaseはクエリも制限があり(RDBのWhere句に相当する機能に関してキーがひとつしか指定できないなど)、その中でなんとかやりくりして機能を実現しようとすると、どうしても非同期処理のネストになってしまったりと苦労しました。
データベースの設計を見直すことで解決できる問題も多かったので、やはりNoSQLベースでの設計経験の不足が響いたなという印象です

### テストコードの書き方
実業務ではそこまでテストコードを書いてこなかったということで、コンポーネントとしてどんなテストを書けばよいのか、そもそもテスタビリティが高くなるようにするためにはどんな実装を行えばよかったのかがよくわかっていないなという感想を抱きました。
mockやspyOnなどの機能もちゃんと使いこなせるようになりたいですね。


## おわりに

今まで業務以外で自分でアプリを作ってみることがほとんどなかったのですが、約1ヶ月という時間でアプリ作りに没頭してみて、もっといろいろなアプリケーションを作ってみたいと思いました。
Firebaseをより活用すれば、自分のアイデアを形にするのも短時間でできるようになると思いますし、どんどん知見を溜めていきたいと思います。
これからフリーランスというキャリアを進む上で、自分の技術を示す必要性はより高まっていくのかなと思うので、これからも継続的にものづくりに励んで行きたいですね。
知識ゼロから学ぶ ソフトウェアテスト(1章 はじめに)

知識整理のために投稿しています。
本は `知識ゼロから学ぶ ソフトウェアテスト[改訂版]`です。
テストってなかなか書けない。

## ソフトウェアテストとは

- もっともポピュラーな**品質改善テクニック**
- どんなソフトウェアにもバグはある
- 被害・損害を大きくしないためにテストをすることはとても重要

## テスト担当者の心得

- バグを全部見つけるのは無理だと心得ろ(Cem kaner)
- エラーは見つからないだろうという仮定のもとにテストの計画を立ててはいけない(G.J.Mayers)
- プログラムのある部分でエラーがまだ存在している確率は、すでにその部分で見つかったエラーの数に比例する(G.J.Mayers)
- ソフトウェアテストで大事なのは、どの部分にバグが出やすいのか、そこにどのようなテスト手法を適用すれば十分な品質が得られるかを知ることである(Juichi Takahashi)

## 完璧なテスト？
- 完璧なテストを書くことは不可能
- 「**十分な**」テストを書くことを目指す
- **テストケースを書くことはプログラムを書くことより実際は難しい**
C101PAにVS Codeをインストールする

# 安価なChromebook C101PAでもローカル環境で開発できるようにしたい

# Linuxをインストール
標準で利用できるLinuxを使います。
Chromebookの設定で `linux` と検索して出てくる設定を「オン」にして、Linuxをインストールしてください。

安定のアップデート

```
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
```

# VS CODEをインストール
## VS CODEをダウンロード
下記のページの Pre-built deb package から Latest のパッケージをダウンロードしてください。
https://www.reddit.com/r/Crostini/wiki/howto/install-vscode

ダウンロードしたdebファイルをダブルクリックすればインストールできます。
アプリ一覧に「code-oss」というアプリが追加され、それがVS Codeになります。

## Extension Gallery を有効化
設定用のjsonファイルを編集します。

```
$ sudo apt-get install nano
$ sudo nano /usr/share/code-oss/resources/app/product.json
```

開いたjsonファイルに以下を追加してください。

```
"extensionsGallery": {
    "serviceUrl": "https://marketplace.visualstudio.com/_apis/public/gallery",
    "cacheUrl": "https://vscode.blob.core.windows.net/gallery/index",
    "itemUrl": "https://marketplace.visualstudio.com/items"
}
```

再起動するとExtension Galleryが使えるようになっています。

## 日本語化
### フォントをダウンロード
フリーで使うことができるフォントを用意します。
以下のページからzipファイルをダウンロードしてください。
https://github.com/adobe-fonts/source-han-code-jp/releases/latest

zipファイルを開き、OTFフォルダをそのまま「Linux ファイル」へ移動させてください。

### フォントをインストール
下記のコマンドでインストールしてください。

```
$ mkdir ~/.fonts
$ cp ./OTF/* ~/.fonts
$ sudo fc-cache -fv
```

### フォントを設定
- VS Codeでの手順
    1. Preferences > Settingsを開く
    2. Search settingsに `font` と入力
    3. Editor: Font Familyの先頭に `Source Han Code JP L` を追加

### 日本語を設定
- VS Codeでの手順
    1. Extension gellery で `japanese` と入力して検索
    2. Japanese Language Pack for Visual Studio Codeをインストール

VS Codeを再起動すると日本語に変わっています。

# Node.js をインストール
## nvm をインストール
```
$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
$ nvm install v10
$ nvm use v10
```

~/.profile末尾に以下を追加

```
source ~/.nvm/nvm.sh
```

## Node.js と npm のインストール
```
$ nvm install stable
$ nvm use stable
```
RailsUpdate時に見つけたActionController::Parametersの変更されてなかった点

## 環境
Rails5.0.7.2
Ruby2.3.8
※識別子名に関しては適当なものに置換しているため、読みにくい部分があると思われますがご了承ください。

## 背景
現在古くなってきたあるシステムのアップデート中。
もともとRails4.2.4とRuby2.2.3という環境で動いていたのですが、流石にサポート切れはマズいというということでRuby2.3.8へアップデート（2.5に上げようとしたらgemのゴタゴタで面倒だったので、一旦サクッといけそうな2.3のみにした。今後対応予定）。
その後Rails5.0.7.2へアップデートを試み、テストが通るようになったので、5.1へのアップデートに向けDEPRECATION WARNINGについて対応している途中。

## こんなWarningが出た
```ruby
DEPRECATION WARNING: Method with_indifferent_access is deprecated and will be removed in Rails 5.1, as `ActionController::Parameters` no longer inherits from hash. 
Using this deprecated behavior exposes potential security problems.
If you continue to use this method you may be creating a security vulnerability in your app that can be exploited. Instead,
 consider using one of these documented methods which are not deprecated: http://api.rubyonrails.org/v5.0.7.2/classes/ActionController/Parameters.html (called from new at /root/hoge/app/controllers/fugas_controller.rb:91
```

with_indifferent_accessはRails5.1になったら使えないという話は、アップデートに関して記載さた他サイト様で確認していました。
https://dev.classmethod.jp/server-side/ruby-on-rails-5-0-upgrade/ ( こちら参考にしています ）
なので「あーなるほどね」という感じで該当のコントローラーを見ると・・・

## こんなコードを書いていた
```ruby
# fugas_controller.rb
   def fuga_child_params 

     children = [] 
     params.require(:fuga).each do |id| 
       fuga_child_param = params[:fuga][:"#{id}"] 
       children << ActionController::Parameters.new(fuga_child_param).permit(:id, :score) 
     end 
     children
   end 
```
warningを吐いていたのは下から四行目の`ActionController::Parameters.new(fuga_child_param)`の部分。
fuga_child_paramには{id: "5", score: "39"}のような物が入ります。
「いやActionController::Parametersの中の話だしRails5.1に上げたら対応するっしょーw」と余裕こいてたらRails5.1でも直ってないようで対応しないといけません。

## ということでこうした
```ruby
# fugas_controller.rb
   def fuga_child_params 

     children = [] 
     params.require(:fuga).each do |id| 
       fuga_child_param = params[:fuga][:"#{id}"] 
       children << ActionController::Parameters.new(id: fuga_child_param[:id], socre: fuga_child_param[:score])
     end 
     children
   end 
```
渡す物をnewの時点で指定してあげればいいんですね。
Vagrant/VirtualBoxで「GuestAdditions seems to be installed (6.0.8) correctly, but not running.」出たときの対処法



# `vagrant up`時にエラー発生

`vagrant up`した際に以下のようなエラーが発生

```
GuestAdditions seems to be installed (6.0.8) correctly, but not running.
```

何回か`vagrant reload`しても直らなかったんで対処法を調べてみました


# 実行環境と実行時ログ
- Windows10 Pro 64bit
- VirtualBox 6.0.8
- Vagrant 2.2.4

以下、エラー発生時の様子

```
bash: line 5: setup: command not found
==> ***********: Checking for guest additions in VM...
==> ***********: [vagrant-hostsupdater] Checking for host entries
==> ***********: [vagrant-hostsupdater]   found entry for: 192.168.10.10 homestead.test
==> ***********: [vagrant-hostsupdater] Writing the following entries to (C:/WINDOWS/system32/drivers/etc/hosts)
==> ***********: [vagrant-hostsupdater]   192.168.10.10  ***********  # VAGRANT: b251854545a1f9cc57aa5555c525555eac (***********) / b58e345456-cb06-40242-b3b9-60ae10b0434c
==> ***********: [vagrant-hostsupdater] This operation requires administrative access. You may skip it by manually adding equivalent entries to the hosts file.
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

 setup

Stdout from the command:



Stderr from the command:

bash: line 5: setup: command not found
```


# 解決方法

`Vagrantfile`に以下の記述を追加。
（`vagrant-vbguest`の自動アップデート機能がオンになってるのが原因みたい？）

```Vagrantfile
	if Vagrant.has_plugin?("vagrant-vbguest")
		config.vbguest.auto_update = false  
	end
```

追加後、`vagrant halt` → `vagrant up`で動き出すはず

# おわり
- ちなみに参考にしたIssueみてると**VirtualBox 6.0.6**でも起こるそうな

# 参考URL
- [vagrant-vbguest doesn't work with vagrant-reload · Issue #333 · dotless-de/vagrant-vbguest](https://github.com/dotless-de/vagrant-vbguest/issues/333)
HTMLで画像を貼り付ける方法

##はじめに
[未来電子テクノロジー](https://www.miraidenshi-tech.jp/intern-content/program/)でインターンをしている＜@yuusuket57>です。
現在はHTML、CSSを使って、自己紹介のサイトを作っています。。
プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正するのでどんどん指摘してください！
今回は自己紹介のサイトの作成で学んだ、HTMLで画像を表示させる方法について書きます。

##画像を貼り付ける
```html
<img src="ファイル名">
```
ファイル名の画像を貼り付けることができます。

##画像の大きさを変える
画像を貼り付けるコマンドに以下のコマンドを追加することで、画像の大きさを変えれます。

```html
width="画像の幅" 
```
画像の幅を変更

```html
height="画像の高さ"
```
画像の高さを変更

これらのコマンドの中に、px(ピクセル数)や、％(画像の割合）を入れることによって、大きさを変更できます。

##まとめ
HTMLの基本的なコードですが、よく復習しておくことが大切だと感じました。
画像の配置が思うようにいかないことがあるので、CSS も使って配置していきたいです。
gitに慣れるための最低限のコマンド - 環境の構築 編

gitは覚えることが非常に多いため、最初に挫折しないためにも、まずはよく使うコマンドの使い方を覚え、流れに沿って手元で試し、コマンドに慣れることが大事だと考える。

「分散型バージョン管理システムって何？」「リポジトリって何？」という疑問にはこの資料では言及しない。知りたくなった時にググってほしい。

本資料ではaddやcommitというコマンドを実行する以前に、リモートリポジトリに変更をpushできる環境を整える。本資料では、リモートリポジトリがgithubにすでに存在する前提で話を進める。

### 1. git --version

自身のターミナルで、gitコマンドが利用できるか確認する。コマンドを実行してバージョン情報が返ってくればOK。
gitコマンドは Mac OS なら標準で入っている。

```sh
$ git --version
git version 2.17.2 (Apple Git-113)
```

### 2. git config --global


コミットログ（`git log`で表示されるログのこと）に表示されるメールアドレスとユーザー名を設定する必要がある。

```sh
$ git log                                                                                                                                           Tue Jun  4 11:10:55 2019
commit afecdb6faeaff20f77d0b3ab6e229499198cf283 (HEAD -> develop, origin/develop)
Author: Hikaru Maruyama <7115497+hmaruyama@users.noreply.github.com>
Date:   Tue Jun 4 10:58:13 2019 +0900

    Added files.
```

ここで設定するユーザー名とメールアドレスは、githubのアカウントと紐づいている必要はない。

#### ユーザー名の設定

```sh
$ git config --global user.name "Hikaru Maruyama"
```

https://help.github.com/en/articles/setting-your-username-in-git

#### メールアドレスの設定

パブリックリポジトリの場合、コミットログが丸見えなので、githubが提供するno-reply用のメールアドレスを設定することを推奨する。詳しくは[こちら](https://help.github.com/en/articles/setting-your-commit-email-address-on-github)。


```sh
$ git config --global user.email "7115497+hmaruyama@users.noreply.github.com"
```

https://help.github.com/en/articles/setting-your-commit-email-address-in-git


### 3. cd /path/to/dir

作業ディレクトリに移動する。例えば`/Users/hikarumaruyama/src/github.com/hmaruyama`なら、以下のコマンドとなる。

```sh
$ cd /Users/hikarumaruyama/src/github.com/hmaruyama
```

### 4. git clone <リポジトリURL>

リモートリポジトリのコードを手元に持ってくる。

```sh
$ git clone https://github.com/hmaruyama/test-pages.git
```

### 5. cd <リモートリポジトリ名>

`git clone`が完了すると、リモートリポジトリ名でディレクトリが切られるので、そこに移動する。

```sh
$ cd test-pages
```


## 環境の構築編 終わり

[gitに慣れるための最低限のコマンド - 変更内容の記録 編](https://qiita.com/hmaruyama/items/90369e30dfcab03bb235) に続く・・
「CentOS」タグについて (タグシノニム: 「#centos」) (+ バージョン違い)

### 対象
(件数は2019-06-04現在）

https://qiita.com/tags/centos : 4662件

### 説明

Red HatのディストリビューションRHELから商用、商標関連のパッケージを排除し、リビルドしたディストリビューションの説明。

https://www.centos.org/

### タグシノニム
(件数は2019-06-04現在）

[https://qiita.com/tags/#centos](https://qiita.com/tags/%23centos) : 11件


### バージョン違い
(件数は2019-06-04現在）

https://qiita.com/tags/centos7 : 2276件
https://qiita.com/tags/CentOS6.x : 358件
https://qiita.com/tags/CentOS6 : 193件
https://qiita.com/tags/CentOS6.5 : 70件
https://qiita.com/tags/CentOS5 : 39件
https://qiita.com/tags/CentOS6.7 : 28件
https://qiita.com/tags/CentOS7.4 : 28件
https://qiita.com/tags/CentOS7.2 : 27件
https://qiita.com/tags/centos6.4 : 23件
[https://qiita.com/tags/#centos7](https://qiita.com/tags/%23centos7) : 20件
https://qiita.com/tags/centos6.6 : 15件
https://qiita.com/tags/CentOS7x : 2件
https://qiita.com/tags/centos4 : 1件
画面遷移のたびにタブバーのアイコンが動くのを止める

ストーリーボードで設定。
これを忘れているとpushViewController/popViewController のたびにアイコンが沈んで浮き上がることがある。

<img width="664" alt="tab.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266239/16ebd541-3f23-6993-20e2-864538bb9ad5.png">
Angularでサイトを作ってみた

#事のきっかけ
最近何かとGoogleのアプリケーションを使用する機会が多く、そのアプリケーションのインターフェースがとても気に入ったので、それを用いてWebサイト的なものを作れば良いなぁと思った。

#更新履歴
2019/6/6
改めて見返してみてあまりにも酷い記事だったので色々と訂正しました。

#今回の主な用語説明
###Angular
Angularとは、Googleが提供しているサイトのようなインターフェイスを簡単に用いることができるフロントエンドWebアプリケーションフレームワークである。
###GithubPages
Githubが提供しており、無料で気軽にサイトを公開できるが、WordPressのような誰でも簡単にとはいかないのでその点は注意が必要。しかし、手順を理解すれば文系であろうが理系であろうが簡単に活用できるので、使用できるようになっておいたほうが無難。
#やり方
**以下の手順は、全てmacOS上での動作となります。**

###前提
他者のサイトとなってしまいますが、[参考サイト](https://qiita.com/Alex_mht_code/items/422f5ce10d9c9d5729b7)をみて、npmコマンドが実行できる環境にしておく。

---

1.まずは、[Angular公式サイト日本語版](https://angular.jp/)にアクセスし、真ん中あたりにある " はじめる " をクリックする。

![スクリーンショット 2019-06-06 11.01.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149437/2dc69fb1-9ed0-181a-bda2-d58a2961409c.png)

2.次に、左の一覧から " セットアップ " を選択する。

![スクリーンショット 2019-06-06 11.03.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149437/cc6382aa-e8e5-5d2b-19ba-9d585af6b27a.png)


3.「2.」で表示されたサイト通りに基本的には進めていく。
  3-1.`npm install -g @angular/cli`を実行。
  3-2.`ng new my-app`(my-appは、任意の名前。名前によっては、実行できない。)を実行。
  3-3.`cd my-app`を実行し、`ng serve --open`でローカルサイトを開く。終了する際は、Ctrl-Cでok。 

4.my-appフォルダ内で、`ng build`を実行することで、distフォルダが生成される。

※以下に記すユーザー名とは、githubのユーザー名のことを表す。

5.dist/my-app/の中にあるindex.htmlファイルをvisual studio code等々で開き、6行目辺りにある`<base href=...>`を` <base href="https://ユーザー名.github.io/">`と書き換えて保存する。

4.githubにログインし、リポジトリ名を"ユーザ名.github.io"として、publicで作成する。

5.PCに新しいフォルダを作成し、そのフォルダ内で`git init`を実行し、`git remote add origin リポジトリURL `を実行。
そして、dist/my-app/の中にあるものすべて入れる。

6.` git add . `で登録後、"git commit"からの"git push"で終わり。 多分、"git push --set-upstream origin master"にしろと言われるかもしれないので、その時は素直に" git push "の代わりに実行する。

自分の場合は、この他に特に設定することなくwebサイトとして開くことができた。他に効率的なやり方があるかもしれない。
ReactをTypeScriptで入門する on May, 2019

# Reactコンポーネント
軽くReactチュートリアルをやってみた後に、TypeScriptで書くとこんな感じかな？とまとめました。
コンポーネントがViewの基本単位で、それぞれRender時に読み込む情報のPropsと状態を保持するStateというプロパティをもっているようです。

## Class Component

```TSX
import React, { FormEvent } from 'react';

interface MyProps {
  value: number;
}
interface MyStates {
  yourName: string;
}
interface MyInputEvent extends React.FormEvent<HTMLInputElement> {
  target: HTMLInputElement;
}

export default class MyComponent extends React.Component<MyProps, MyStates>{
  constructor(props: MyProps) {
    super(props);
    this.state = {
      yourName: ''
    }
    this.handleOnChange = this.handleOnChange.bind(this);
  }
  public handleOnChange(e: MyInputEvent) {
    e.preventDefault();
    this.setState({ yourName: e.target.value });
  }
  public render() {
    return (
      <div>
        <div>
          <input
            onChange={e => this.handleOnChange(e)}
          />
        </div>
        <span>{this.state.yourName}</span>
      </div>
    )
  }
}

```
TypeAnnotationsが効くので、PropsTypeを設定せず、そのままTypeScriptのエコシステムで書き続けられて便利です。
Eventは、一度interfaceで定義してあげたほうが良さそう。

### Function Component
こんな感じかな

```TSX
interface MyProps {
    value: number;
}
function MyComponent(props: MyProps) {
  return (
    <div>
      <span>{props.value}</span>
    </div>
  );
}
```

これらを組み合わせてViewを作っていけばいいみたいです。ふむふむ。

# 参考文献
 * [create-react-app で TypeScript の環境を作る](https://qiita.com/ehr174/items/85b7cb7e7c93efef8889)
 * [TypeScriptを使ってreactのチュートリアルを進めると捗るかなと思った(実際捗る)](https://qiita.com/m0a/items/d723259cdeebe382b5f6)
AWS PowerShell IAM認証情報レポートをダウンロードする

# 発端
IAM認証情報レポートをPowershellでダウンロードしようとしたとき、
下のようなエラーが出て少し迷った。
エラーメッセージをググってもあまり情報がなかったので書いておきます。

```powershell
Get-IAMCredentialReport : The service returned an error with Error Code ReportNotPresent and HTTP Body: <ErrorResponse xm
lns="https://iam.amazonaws.com/doc/2010-05-08/">
  <Error>
    <Type>Sender</Type>
    <Code>ReportNotPresent</Code>
  </Error>
  <RequestId>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</RequestId>
</ErrorResponse>
```

#解決方法
ダウンロードする前にリクエストを投げておく必要があった。

```powershell:Get-IAMCredentialReport.ps1
Request-IAMCredentialReport
Get-IAMCredentialReport -Raw > "status_reports.csv"
```
DynamoDBにGoのtime.Timeを楽に保存する方法

私は [guregu/dynamo](https://github.com/guregu/dynamo) を使ってますが、生で `aws-sdk-go` を使っていても使えるみたいです。

DynamoDB自体は(MySQL/Postgresみたいな)Timestampとかdatetimeとかの型を持たないので、なるべくunixtimeの整数値で保存したい所ですが、それをやるときにおそらく一番楽な方法だと思われるものの紹介です。

```go
type struct Record {
  CreatedAt dynamodbattribute.UnixTime
}

// 適宜 guregu/dynamo を初期化しておく
var table dynamo.Table

func Put(){
  r := &Record{
    CreatedAt: dynamodbattribute.UnixTime(time.Now()),
  }
  table.Put(r).Run()
}
```

ようするに `dynamodbattribute.UnixTime` を使って `time.Time` からキャストするだけで、整数値のUnixtimeとして永続化されます。
読み出した後、`time.Time`として使いたければ以下のようになります。

```go
createdAtAsTime := time.Time(record.CreatedAt)
```

### aws-sdk-go の場合

こんな感じで `dynamodbattribute.Marshal` 使うといいっぽい。

```
dynamodbattribute.Marshal(record)
```

https://github.com/guregu/dynamo/blob/master/encoding_aws_test.go#L34 ここ見る限りそういう事な気がします。 試した方・詳しい方がいたらコメント頂けますと幸いです。
【初心者】レスポンシブデザインにしたときに、単語や数字の途中で改行されないようにする方法

##はじめに
最近スマホページの作成をしたのですが、画面幅を変えて表示していると、画面幅が狭くなるとどうしても数字で表記していた部分が途中で改行されてしまう事態に陥りました。だからと言って文字サイズを小さくするわけにもいかず。最終的に、画面幅が狭い場合は数字表記部分をまとめて改行して表示することになったのですが、そんなこと出来る設定なんてあるんですか！？と思ったので備忘録まで。

##実はめっちゃ簡単だった！！
「spanタグを使えば出来るよ」と、ほぼ答えを教えてもらって調べてみたら、spanタグに対してcssで「display: inline-block」を指定してあげるだけでした。簡単すぎる！さすがspanタグ！！
下記のHTMLを起動し、画面の横幅を狭くしたり広げたりすると「なにぬねの」の部分だけはまとめて改行されることが確認出来ると思います。

~~~html
<!DOCTYPE html>
<html lang="ja">
　<head>
　　<title>Sample</title>
　　<link rel="stylesheet" href="css/index.css">
　</head>
　<body>
　　<p><span>あいうえおかきくけこさしすせそたちつてと<span>なにぬねの</span>はひふへほまみむめも</p>
　</body>
</html>
~~~
~~~css
p {font-size: 35px;}
span {display: inline-block;}
~~~

##まとめ
spanタグは分かりやすくて便利なタグだな～と思っていましたが、もっと便利なタグという印象に変わりました。これで使い方をまた1つ覚えました！！ちょっと賢くなった気分。笑
Rails6 のちょい足しな新機能を試す31（ActiveStorage route prefix編）

# はじめに

Rails 6 に追加されそうな新機能を試す第31段。 今回は、 `ActiveStorage route prefix` 編です。
Rails 6 では、 ActiveStorage route のプレフィックスを指定できるようになりました。

Ruby 2.6.3, Rails 6.0.0.rc1 で確認しました。Rails 6.0.0.rc1 は `gem install rails --prerelease` でインストールできます。

```shell
$  rails --version
Rails 6.0.0.rc1
```

# 準備

今回は、 [Rails6 のちょい足しな新機能を試す15（Active Storage編）](https://qiita.com/suketa/items/2daad87d8c22737f5582) を元にして修正していきます。
Rails プロジェクトを作るところからの手順はそちらを参照してください。

# View を修正する

User の詳細画面にイメージファイルのダウンロードリンクをつけます。
また、ActiveStorage の routes が変わったことがわかるように URL の情報を画面に表示します。

```ruby:app/views/users/show.html.erb
...
    <%= image_tag @user.avatar %>
    <p>
      <%= link_to 'download image', rails_blob_path(@user.avatar, disposition: 'attachment') %> 
      from <%= rails_blob_path(@user.avatar, disposition: 'attachment').sub(/\/blobs\/.*/, '/blobs/') %>
    </p>
...
```

# rails server を実行してユーザー登録する

`rails server` を実行してユーザー登録して詳細画面を表示します。
ダウンロード先のURL が `/rails/actvie_storage/blobs` であることがわかります。
![before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209941/54a0cdf7-7d9a-405e-67d4-61570e09f5d0.png)

# route_prefix を設定する

`config/environments/development.rb` を開いて、 `routes_prefix` を設定します。

```ruby:config/environments/development.rb
  ...
  config.active_storage.routes_prefix = '/files'
end
```

# rails server を再実行して詳細画面を再表示する

`rails server` を再度、実行して登録したユーザーの詳細画面を表示します。
ダウンロード先のURL が `/files/blobs` に変わったことがわかります。

![after.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209941/c66eae6c-8494-4113-cde2-b02f3572ca6c.png)

# 試したソース

試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try031_active_storage_route_prefix

# 参考情報

* [What is new in Rails 6.0](https://bogdanvlviv.com/posts/ruby/rails/what-is-new-in-rails-6_0.html)
* [Configure Active Storage route prefix](https://github.com/rails/rails/pull/33883)
IMP001B　Bluetooth レシートプリンタの設定変更に失敗した記録

MUNBYN IMP001 Printer
Bluetooth接続可能なレシートプリンタ

9600bps から変更したかったけど、値が反映されてないようなので記録

----
メーカーページからツールダウンロード

MUNBYN IMP001 Printer Driver.zip
https://www.munbyn.com/pages/printer-driver

ツールフォルダに設定ツールがあるので開く
MUNBYN IMP001 Printer Driver\IMP001 Driver CD\Tools\Printer Parameters Setting Tool\IPrinter.exe

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161226/648f757b-bb01-a24b-eb14-4957133cf3bc.png)

SerialPortSettingsがあるので、Set Baud Rate を押す

・119200だけど115200が選べない？
・COM1とCOM2しか選べない？
RaspberryPi 3B+ Ubuntu MATE18.04にElixir最新環境を構築する。

どうもぱか@u3pakaです。
VPS契約するか迷ったあげく、新しいラズパイ（raspberryPi 3B+）を買いました。
これまでの2Bは、Nerves用へ。

raspbianではなく、Ubuntu（ubuntu MATE 18.04）を入れてみました。というのも、ラズパイ2Bでは非対応だったので。しかし、少し躓いたので備忘録を残します。結論からいえば、ほぼ高瀬先生の手法です。
新規性は、Ubuntu MATEの新しいバージョンにErlang/OTP, Elixirの新しいバージョン版対応した点のみです（笑）。

公式の手順ですと、

```
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
$ sudo apt-get update
```

ラズパイちゃん「 arm対応してないよっ」

...ふむ

Raspberry Piの欄（https://elixir-lang.org/install.html#raspberry-pi）

```
Get Erlang key
echo "deb https://packages.erlang-solutions.com/debian stretch contrib" | sudo tee /etc/apt/sources.list.d/erlang-solutions.list
Run: wget https://packages.erlang-solutions.com/debian/erlang_solutions.asc
Add to keychain: sudo apt-key add erlang_solutions.asc
```

ラズパイちゃん「 なんかできないよっ」

...ふむ

ここで、救世主の登場。これにならいソースからビルド
https://qiita.com/takasehideki/items/210f8a7172807d0c9e5b

```
sudo apt install gcc make git　#これ
sudo apt install m4 libncurses5-dev libssl-dev
wget http://erlang.org/download/otp_src_22.0.tar.gz #新しいバージョンで
tar xzvf otp_src_22.0.tar.gz
cd otp_src_22.0.tar.gz/
./configure --enable-hipe
make
sudo make install
cd ../
git clone https://github.com/elixir-lang/elixir.git
cd elixir/
git checkout v1.8.2　#新しいバージョンで
make clean test
sudo make install
```

elixir入ってます！

```
elixir -v
Erlang/OTP 22 [erts-10.4] [source] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Elixir 1.8.2 (compiled with Erlang/OTP 22)
```

無事、iexも起動しました。

```
$ iex
Erlang/OTP 22 [erts-10.4] [source] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Interactive Elixir (1.8.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> IO.puts ~s|やったぜ！！|
やったぜ！！
:ok
```
おしまい。
【UiPath】ライブラリの引数が変わらないときの対処法

# 現象
UiPathでライブラリを作り、バージョンアップで引数(呼び出し側からみるとプロパティ)を変えても、呼び出し側で引数が更新されない。

# 原因
ライブラリをパブリッシュするときに、手動でバージョン番号を戻したせいかもしれない。

# 解決方法
バージョン番号は素直にインクリメントする。

# おまけ
ライブラリプロジェクトの```project.json```に怪しい記述があったため削除してみたが、問題は解消しなかった。

```json
  "arguments": {
    "input": [
      {
        "name": "arg1",
        "type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
        "required": false,
        "hasDefault": false
      },
      {
        "name": "arg2",
        "type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
        "required": false,
        "hasDefault": false
      },
      {
        "name": "arg3",
        "type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
        "required": false,
        "hasDefault": false
      }
    ],
    "output": []
  },
```

普通、```project.json```に```arguments```は挿入されない。
なんで挿入されたかは不明。
beauto builder2 について

![S__4186122.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348043/7e4bfe7a-fb51-a4de-59af-c3e307a73b42.jpeg)
![S__4186123.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348043/104d2c69-ed4f-289f-9911-89c308b87669.jpeg)
![S__4186124.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348043/3fdc5df5-8a63-924f-f429-79135c208fee.jpeg)

これらの紙の上で動かしたいのですが、どのようにプログラムを組めば動きますか？
Envoy: IP 透明性

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

目次は[こちら](https://qiita.com/kentakozuka/items/27cc937fba4c18b226d0)です。

## IP透明性
### IP透過性とは

プロキシとして、EnvoyはIPエンドポイントです。これは、ダウンストリーム要求とは異なる独自のIPアドレスを持ちます。その結果、Envoyがアップストリームホストへの接続を確立すると、その接続のIPアドレスはプロキシ接続のIPアドレスとは異なります。

多くの場合、アップストリームのサーバーまたはネットワークは、ダウンストリームのリモートアドレスと呼ばれる、接続の元のIPアドレスを知る必要があります。例をいくつか挙げます。

- アイデンティティの一部を形成するために使用されているIPアドレス
- ネットワークポリシーを実施するために使用されているIPアドレス
- 監査に含まれるIPアドレス

Envoyは、ダウンストリームリモートアドレスをアップストリームホストに提供するための複数の方法をサポートしています。これらの手法は複雑さと適用性が異なります。
### HTTPヘッダ

HTTPヘッダーは、x-forwarded-forヘッダーに要求の元のIPアドレスを含めることができます。アップストリームサーバーはこのヘッダーを使用してダウンストリームリモートアドレスを決定できます。 Envoyはこのヘッダを使用して、Original Src HTTP Filterによって使用されるIPアドレスを選択することもできます。

HTTPヘッダーのアプローチにはいくつかの欠点があります。

- HTTPにのみ適用されます。
- 上流ホストではサポートされていない可能性があります。
- 慎重な設定が必要です。

### プロキシプロトコル

HAProxy Proxy Protocolは、メインTCPストリームの前に、TCPを介した接続に関するメタデータを通信するためのプロトコルを定義します。このメタデータには送信元IPが含まれます。 Envoyはプロキシプロトコルフィルタを使用してこの情報を消費することをサポートしています。これはダウンストリームのリモートアドレスをx-forwarded-forヘッダへの伝播用に回復するために使用される場合があります。 Original Src Listener Filterと組み合わせて使用​​することもできます。

プロキシプロトコルのいくつかの欠点：

- TCPプロトコルのみをサポートしています。
- アップストリームホストのサポートが必要です。
- Envoyはまだそれを上流に送ることはできません。

### 元のソースリスナーフィルタ

制御された配置では、Original Sourceリスナーフィルタを使用して、アップストリーム接続にダウンストリームリモートアドレスを複製することが可能です。アップストリームの要求またはストリームにメタデータは追加されません。そうではなく、アップストリーム接続自体はダウンストリームリモートアドレスを送信元アドレスとして確立されます。このフィルタは任意のアップストリームプロトコルまたはホストで動作します。ただし、それはかなり複雑な設定を必要とし、ルーティングの制約のためにすべての配置でサポートされないかもしれません。

オリジナルソースフィルタのいくつかの欠点：

- Envoyがダウンストリームのリモートアドレスにアクセスできることが必要です。
- その構成は比較的複雑です。
- 接続プールの制限により、パフォーマンスがわずかに低下する可能性があります。

### 元のソースHTTPフィルタ

制御された展開では、Original Source HTTPフィルタを使用して、アップストリーム接続にダウンストリームリモートアドレスを複製することが可能です。このフィルタはOriginal Src Listener Filterとよく似た働きをします。主な違いは、HTTPヘッダーから元の送信元アドレスを推測できることです。これは、単一のダウンストリーム接続が異なる元の送信元アドレスからの複数のHTTP要求を伝送する場合に重要です。ケースが適用される場合の例として、サイドプロキシへのフロントプロキシ転送を使用した展開があります。

このフィルタはどんな上流のHTTPホストでも動作します。ただし、それはかなり複雑な設定を必要とし、ルーティングの制約のためにすべての配置でサポートされないかもしれません。

オリジナルソースフィルタのいくつかの欠点：

- Envoyがx-forwarded-forヘッダーからダウンストリームのリモートアドレスを抽出するように正しく設定されている必要があります。
- その構成は比較的複雑です。
- 接続プールの制限により、パフォーマンスがわずかに低下する可能性があります。
Envoy: オーバーロードマネージャ

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

目次は[こちら](https://qiita.com/kentakozuka/items/27cc937fba4c18b226d0)です。


## オーバーロードマネージャ

過負荷マネージャは、クライアントの接続や要求が多すぎるために、Envoyサーバをさまざまなシステムリソース（メモリ、CPU、ファイル記述子など）に関する過負荷から保護するための拡張可能なコンポーネントです。これは、主にアップストリームサービスの保護を目的とした回線遮断とは異なります。

過負荷マネージャは、監視する一連のリソースと、それらのリソースの一部が特定の圧力しきい値を超えたときに実行される一連の過負荷アクションを指定することによって構成されます。
Envoy: 外部認証

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

目次は[こちら](https://qiita.com/kentakozuka/items/27cc937fba4c18b226d0)です。

## 外部認証

- ネットワークフィルタの設定
- HTTPフィルタ設定

外部許可フィルターは許可サービスを呼び出して、着信要求が許可されているかどうかを確認します。フィルタは、ネットワークフィルタ、HTTPフィルタ、またはその両方として設定できます。要求がネットワークフィルタによって許可されていないと判断された場合、接続は閉じられます。 HTTPフィルタでリクエストが不正と判断された場合、リクエストは403（禁止）レスポンスで拒否されます。

Tip
残りのフィルタがリクエストを処理する前にリクエストが承認されるように、これらのフィルタをフィルタチェーンの最初のフィルタとして設定することをお勧めします。

外部許可サービスクラスタは、静的に構成することも、クラスタ検出サービスを介して構成することもできます。リクエストが入ってきたときに外部サービスが利用できない場合、リクエストが許可されているかどうかは、該当するネットワークフィルタまたはHTTPフィルタのfailure_mode_allow設定の設定によって定義されます。 trueに設定されている場合、要求は許可されます（フェールオープン）。それ以外の場合は拒否されます。デフォルト設定はfalseです。

### サービス定義

ここにリストされているサービス定義を使用して、トラフィックのコンテキストが外部許可サービスに渡されます。許可サービスに渡される要求の内容は、CheckRequestによって指定されます。

- 属性コンテキスト
  - service.auth.v2.AttributeContext
  - service.auth.v2.AttributeContext.Peer
  - service.auth.v2.AttributeContext.Request
  - service.auth.v2.AttributeContext.HttpRequest
- 認証サービス
  - service.auth.v2.CheckRequest
  - service.auth.v2.DeniedHttpResponse
  - service.auth.v2.OkHttpResponse
  - service.auth.v2.CheckResponse
Envoy: スクリプト

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

目次は[こちら](https://qiita.com/kentakozuka/items/27cc937fba4c18b226d0)です。

## スクリプト

Envoyは、専用のHTTPフィルタの一部としてLuaスクリプトをサポートしています。
Envoy: ドレイン

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

目次は[こちら](https://qiita.com/kentakozuka/items/27cc937fba4c18b226d0)です。

## ドレイン

ドレインとは、Envoyがさまざまなイベントに対応して適切に接続を切断しようとするプロセスです。排水は次のときに行われます。

- サーバーは、healthcheck / fail管理エンドポイントを介して手動でヘルスチェックに失敗しました。詳細については、ヘルスチェックフィルタアーキテクチャの概要を参照してください。
- サーバーはホットリスタートされています。
- 個々のリスナーはLDSを介して変更または削除されています。

構成された各リスナーには、いつドレインが行われるかを制御するdrain_type設定があります。現在サポートされている値は次のとおりです。

デフォルト
    Envoyは上記の3つのケースすべてに対応してリスナーをドレーンします（admin drain、hot restart、およびLDS update / remove）。これがデフォルト設定です。
modify_only
    Envoyは上記の2番目と3番目のケース（ホットリスタートとLDSの更新/削除）に対応してのみリスナーをドレーンします。この設定は、Envoyが入力リスナーと出力リスナーの両方をホストしている場合に役立ちます。制御されたシャットダウンを行おうとしたときに完全なサーバのドレインを実行するために入力リスナのドレインに依存している間、変更中にのみドレインするように出力リスナにmodify_onlyを設定することが望ましいかもしれません。

ドレインはリスナーごとの概念ですが、ネットワークフィルタレベルでサポートされている必要があります。現在、適切な排水をサポートする唯一のフィルタは、HTTP接続マネージャ、Redis、およびMongoです。
Envoy: 初期化

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

目次は[こちら](https://qiita.com/kentakozuka/items/27cc937fba4c18b226d0)です。

## 初期化

起動時にEnvoyが自身を初期化する方法は複雑です。このセクションでは、プロセスがどのように機能するのかを高レベルで説明します。以下のすべては、リスナーが新しい接続をリスニングして受け入れ始める前に行われます。

- 起動時に、クラスタマネージャは最初に静的/ DNSクラスタを初期化し、次に事前定義されたEDSクラスタを初期化するマルチフェーズ初期化を実行します。次に、該当する場合はCDSを初期化し、1つの応答（または失敗）を待ち、CDSが提供するクラスタと同じプライマリ/セカンダリ初期化を実行します。
- クラスターがアクティブヘルスチェックを使用する場合、Envoyは1回のアクティブヘルスチェックラウンドも行います。
- クラスタマネージャの初期化が完了すると、RDSとLDSが初期化されます（該当する場合）。 LDS / RDS要求に対して少なくとも1つの応答（または失敗）が発生するまで、サーバーは接続の受け入れを開始しません。
- LDS自体がRDS応答を必要とするリスナーを返す場合、EnvoyはさらにRDS応答（または失敗）が受信されるまで待機します。このプロセスは、LDSを介した将来のリスナー追加のたびに行われ、リスナーウォーミングとして知られています。
- 前のステップがすべて実行された後、リスナーは新しい接続を受け入れ始めます。このフローにより、ホットリスタート中に、古いプロセスの排出が始まる前に、新しいプロセスが新しい接続を受け入れて処理できるようになります。

言及されている「1つの応答を待つ」期間はすべて、対応するinitial_fetch_timeoutを設定することによって制限できます。
Envoy: 動的構成

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

目次は[こちら](https://qiita.com/kentakozuka/items/27cc937fba4c18b226d0)です。


## 動的構成

Envoyは、さまざまなタイプの構成管理アプローチが可能であるように設計されています。展開で採用されるアプローチは、実装者のニーズに依存します。完全に静的な構成で簡単な展開が可能です。より複雑なデプロイメントでは、より複雑な動的構成を徐々に追加することができますが、欠点は実装者が1つ以上の外部RESTベースの構成プロバイダーAPIを提供する必要があることです。このドキュメントは現在利用可能なオプションの概要を説明します。

- トップレベルの設定参照
- 参照設定
- Envoy v2 APIの概要

### 完全に静的

完全に静的な設定では、実装者は一連のリスナ（およびフィルタチェーン）、クラスタ、およびオプションでHTTPルート設定を提供します。動的ホスト検出は、DNSベースのサービス検出を介してのみ可能です。設定のリロードは、内蔵のホットリスタートメカニズムを介して行わなければなりません。

単純ではありますが、静的な設定と適切なホットリスタートを使用して、かなり複雑な展開を作成できます。

### EDSのみ

Endpoint Discovery Service（EDS）APIは、Envoyがアップストリームクラスタのメンバーを検出するためのより高度なメカニズムを提供します。 EDSは静的な設定の上に階層化されているため、Envoyの展開でDNSの制限（応答の最大レコード数など）を回避したり、負荷分散やルーティングに使用される情報（カナリアステータス、ゾーンなど）を消費したりできます。 。）

### EDSとCDS

Envoyがルーティング中に使用されるアップストリームクラスタを検出できるメカニズムに、CDS（Cluster Discovery Service）API層があります。 Envoyは、APIの指定に従って、クラスタを適切に追加、更新、削除します。このAPIにより、実装者は初期構成時にEnvoyがすべてのアップストリームクラスタを認識する必要がないトポロジを構築できます。通常、CDSと共にHTTPルーティングを実行する場合（ただし、経路探索サービスは含まない）、実装者はHTTP要求ヘッダーで指定されたクラスタに要求を転送するルーターの機能を利用します。

完全に静的なクラスターを指定することでEDSなしでCDSを使用することは可能ですが、CDSで指定されたクラスターにはEDS APIを使用することをお勧めします。内部的には、クラスター定義が更新されると、操作は正常に行われます。ただし、既存の接続プールはすべて排出され、再接続されます。 EDSはこの制限を受けません。ホストをEDSで追加および削除しても、クラスタ内の既存のホストは影響を受けません。

### EDS、CDS、およびRDS

Envoyが実行時にHTTP接続マネージャフィルタのルート設定全体を検出できるようにするメカニズムのルートディスカバリサービス（RDS）APIレイヤ。既存のリクエストに影響を与えることなく、ルート設定は適切に入れ替えられます。このAPIをEDSおよびCDSと組み合わせて使用​​すると、実装者は複雑なルーティングトポロジ（トラフィックシフト、青/緑の展開など）を構築できます。

### EDS、CDS、RDS、およびLDS

リスナー検出サービス（LDS）は、Envoyが実行時にリスナー全体を検出できるようにするメカニズムに基づいています。これには、RDSへの埋め込み参照を含むHTTPフィルタまでのすべてのフィルタスタックが含まれます。 LDSをミックスに追加することで、Envoyのほぼすべての側面を動的に構成することができます。ホットリスタートは、非常にまれな設定変更（管理者、トレースドライバなど）、証明書のローテーション、またはバイナリアップデートにのみ必要です。

### EDS、CDS、RDS、LDS、およびSDS

Envoyがリスナーの暗号化秘密（証明書と秘密鍵、TLSセッションチケット鍵）を検出できるメカニズム、およびピア証明書検証ロジック（信頼されたルート証明書、失効など）のシークレット検出サービス（SDS）レイヤ）
Envoy: ホットリスタート

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

目次は[こちら](https://qiita.com/kentakozuka/items/27cc937fba4c18b226d0)です。

## ホットリスタート

使いやすさは、Envoyの最大の目的の1つです。堅牢な統計とローカル管理インターフェースに加えて、Envoyには「ホット」または「ライブ」再起動の機能があります。つまり、Envoyは接続を切断することなく、自分自身（コードと設定の両方）を完全にリロードできます。ホットリスタート機能の一般的なアーキテクチャは次のとおりです。

- 統計といくつかのロックは共有メモリ領域に保存されます。これは、再起動が行われている間、ゲージは両方のプロセスで一貫していることを意味します。
- 2つのアクティブプロセスは、基本的なRPCプロトコルを使用して、UNIXドメインソケットを介して互いに通信します。
- 新しいプロセスは、古いプロセスから待機ソケットのコピーを要求する前に、自分自身を完全に初期化します（構成のロード、初期のサービス検出およびヘルスチェックフェーズなどを行います）。新しいプロセスはリスニングを開始し、次に古いプロセスに排出を開始するように指示します。
- 排水段階では、古いプロセスは既存の接続を適切に閉じることを試みます。これがどのように行われるかは、構成されたフィルターによって異なります。排水時間は--drain-time-sオプションで設定可能で、時間が経過するにつれて排水がより積極的になります。
- 排出シーケンスの後、新しいEnvoyプロセスは古いEnvoyプロセスに自分自身をシャットダウンするように指示します。この時間は--parent-shutdown-time-sオプションで設定可能です。
- Envoyのホットリスタートサポートは、新しいEnvoyプロセスと古いEnvoyプロセスが異なるコンテナ内で実行されている場合でも正しく機能するように設計されています。プロセス間の通信は、UNIXドメインソケットを使用してのみ行われます。
- Pythonで書かれたリスタート/親プロセスの例がソース配布に含まれています。この親プロセスは、monit / runit / etcなどの標準のプロセス制御ユーティリティで使用できます。
Vuetifyのv-slot:activatorの使い方

※v-slotの構文はVue 2.6.0以上から使用できます。

v-slotの使用方法は以下の公式ドキュメントに説明があります。
https://jp.vuejs.org/v2/guide/components-slots.html#%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E4%BB%98%E3%81%8D%E3%82%B9%E3%83%AD%E3%83%83%E3%83%88

##v-slot:activatorとは？
Vuetifyでv-slot:activatorというスロットをよく見かけます。
これは**特定の条件時(クリック時・ホバー時のみなど）のみポップアップする場合のトリガー用のスロット**として用意されています。

## TL;DR
- activatorスロットには**ポップアップを付与**したい要素を記述
- デフォルトスロットには**ポップアップで表示**する要素を記述 
    - @totto357さんからコメント欄で補足していただきました。ありがとうございます。

### 例
### ドロップダウンメニュー(v-menu)
https://vuetifyjs.com/en/components/menus
![dropdown.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198781/9774a6f5-6c69-ae3e-b97b-2c7b1a5ec805.gif)


```v-menu.vue
<v-menu>
  <template v-slot:activator="{ on }">
    //ポップアップを追加したい要素に対しv-on="on"を追加
    <v-btn color="primary" dark v-on="on">Dropdown</v-btn>
  </template>
  //ポップアップの内容
  <v-list>
    <v-list-item v-for="n in 3" :key="n">
      <v-list-item-title>{{ n }}</v-list-item-title>
    </v-list-item>
  </v-list>
</v-menu>
```

---

### ツールチップ(v-tool-tip)
![tooltip.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198781/d67cd7bd-cf92-fbb8-208d-e4c9ff66d821.gif)


```v-tooltip.vue
<v-tooltip bottom>
    //ポップアップを追加したい要素に対しv-on="on"を追加
    <template v-slot:activator="{ on }">
        <v-btn color="primary" dark v-on="on">Button</v-btn>
    </template>
    //ポップアップの内容
    <span>Tooltip</span>
</v-tooltip>
```


どちらもv-slot:activatorを使用してポップアップを実現しています。
コードも似ていますね。




### 補足
```javascript
v-slot:activator="{ on }
```
このスロットプロパティのonが何者かというと、**イベントハンドラ**のようです。
※ドロップダウンでは**クリック**・ツールチップでは**ホバー**など。

コンポーネントごとにカプセル化されているので、使用する側はそのままバインドするだけで大丈夫そうですね。
Envoy: DynamoDB

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

## DynamoDB

Envoyは、以下の機能を備えたHTTPレベルのDynamoDBスニッフィングフィルタをサポートしています。

- DynamoDB APIリクエスト/レスポンスパーサー。
- 操作ごと/テーブルごと/パーティションごとのDynamoDBと操作統計。
- レスポンスJSONから解析された4xxレスポンスの失敗タイプの統計、たとえばProvisionedThroughputExceededException。
- バッチ操作の部分障害統計

DynamoDBフィルタは、HTTPレイヤでのEnvoyの拡張性とコア抽象化の好例です。 Lyftでは、DynamoDBとのすべてのアプリケーション通信にこのフィルタを使用します。アプリケーションプラットフォームや使用中の特定のAWS SDKにとらわれない貴重なデータソースを提供します。

DynamoDBフィルタ設定。
Envoy: MongoDB

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

## MongoDB

Envoyは、以下の機能を備えたネットワークレベルのMongoDBスニッフィングフィルタをサポートしています。

- MongoDBワイヤーフォーマットBSONパーサー。
- タイミングとルーティングされたクラスタの分散/マルチ取得カウントを含む詳細なMongoDBクエリ/オペレーション統計。
- クエリロギング
- $ commentクエリパラメータによるコールサイトごとの統計。
- フォルトインジェクション

MongoDBフィルターは、Envoyの拡張性とコア抽象化の好例です。 Lyftでは、すべてのアプリケーションとデータベースの間でこのフィルタを使用しています。アプリケーションプラットフォームや使用中の特定のMongoDBドライバにとらわれない貴重なデータソースを提供します。

MongoDBプロキシフィルター構成の参照
Envoy: アクセスログ

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

## アクセスログ

HTTP接続マネージャとtcpプロキシは、次の機能で拡張アクセスログをサポートします。

- 接続マネージャまたはTCPプロキシごとに任意の数のアクセスログ。
- さまざまな種類の要求や応答をさまざまなアクセスログに書き込むことができるようにカスタマイズ可能なアクセスログフィルタ。

### ロギングシンクへのアクセス

Envoyはプラガブルアクセスロギングシンクをサポートしています。現在サポートされているシンクは次のとおりです。

#### ファイル

- 非同期IOフラッシュアーキテクチャアクセスロギングは、メインネットワーク処理スレッドを決してブロックしません。
- 事前定義されたフィールドと任意のHTTPリクエストおよびレスポンスヘッダを使用してカスタマイズ可能なアクセスログフォーマット。

#### gRPC

- EnvoyはアクセスログメッセージをgRPCアクセスログサービスに送信することができます。

### さらなる情報

- アクセスログの設定
- ファイルアクセスログシンク。
- gRPCアクセスログサービス（ALS）シンク。
Android Studioが起動できない時の対処法

###目次
- 環境
- 問題
- 原因
- 解決法
- 蛇足

###環境
　今回の実行環境。
OS:windows10
bit:64bit

###問題
　android studioをインストールしたあと、うまく動かなくてアンインストール。再インストールしたら動かなくなりました。エラーメッセージも出ず、コマンドで実行しても無反応。

###原因
　一度アンインストールした時に前回の設定が消えていなかったことが原因。


###解決法
　現在インストールされているものをアンインストールし、android studioの設定が保存されているフォルダを削除。再インストールすればつかえるようになります。

フォルダの保存場所

```windows
W(C:)\Program Files\Android
W(C:)\Users\ユーザー名フォルダ\.android
W(C:)\Users\ユーザー名フォルダ\.AndroidStudio34
```

この３つのフォルダを削除してから再インストールすること。
※保存先は環境によって異なる場合があります。
※.androidと.AndroidStudio64は隠しフォルダのため、コマンドでRmdirで指定して削除するか、隠しフォルダの表示設定をしてGUIでの削除が必要。

###蛇足
　うまくいかなくて焦って再インストールしてしまい、設定フォルダの存在を認知している同じような人がいるかはわかりませんが、解決したので投下。
　「android studio 起動しない」でググってみたところ、同じようなものが原因の記事は見当たらなかったので。

　上記の検索で一番多かった回答がJAVA_HOMEの設定ですが、現在のandroid studio(昔は知りません。)では、OpenJDKを参照するのでJAVA_HOMEの設定は関係ないそうです。
Envoy: TCP プロキシ

# tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントは[こちらのディレクトリ以下](https://github.com/envoyproxy/envoy/tree/master/docs)にあります（ライセンス：[Apache License 2.0](https://github.com/envoyproxy/envoy/blob/master/LICENSE), [NOTICE](https://github.com/envoyproxy/envoy/blob/master/NOTICE)）。

## TCP プロキシ

Envoyは基本的にL3 / L4サーバーとして書かれているので、基本的なL3 / L4プロキシは簡単に実装されます。 TCPプロキシフィルタは、ダウンストリームクライアントとアップストリームクラスタ間で基本的な1：1ネットワーク接続プロキシを実行します。それは単独でstunnelの代替品として、またはMongoDBフィルターやレート制限フィルターなどの他のフィルターと組み合わせて使用​​できます。

TCPプロキシフィルタは、各アップストリームクラスタのグローバルリソースマネージャによって課される接続制限を尊重します。 TCPプロキシフィルタは、クラスタの最大接続数を超えずに接続を確立できるかどうか（TCPプロキシが接続できない場合）、アップストリームクラスタのリソースマネージャに確認します。

TCPプロキシフィルタ設定の参照