OmniAICreator/Qiita-1.07M huggingface dataset:
店舗売上予測やってみた

##4連休2日目　家にこもってDatarobotを練習してます
###今回は店舗売上分析

ある店舗全体の売上をの時系列モデリングによって予測していきます。データの構成にこのようになっています。（省略）

![ターゲットを売上に.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/f77cdffc-728c-4931-e360-cce3905f9f94.jpeg)

![2時間認識モデル.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/0b54186d-b6cc-cf3a-077a-3d422177db68.jpeg)
![3日付.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/801a7b5b-4aab-6dc8-b3a3-8b57ef193fd5.jpeg)
![4時間認識モデル.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/d3bc730b-074b-e94d-8c52-00e790119f0d.jpeg)
![5バックテスト.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/1b6f4681-74a4-0e73-bb43-a8741f083186.jpeg)

本当のところは時間系列モデルからの分析を行いたがったのですが、今回は使えなかったため時間外検定で予測を作りました
![時間系列モデリング.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/571774f6-e7c8-8b5f-e7e6-c9bf9bf328d6.jpeg)

ブループリントは以下のようになっています。

![ブループリント.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/6fc35938-b4ce-67b1-0411-833eea5e85a9.jpeg)

分析と予測はできました。
それではまた。
【Redux】基礎文言

最近Reduxについて勉強を始めたのですが、難しくて、初見では頭にスパッと入らず苦労しています。。。
なので今回は、技術的な投稿ではなく、基礎文言を復習していきたいと思います。

（ただのアウトプットなので、参考にはなりません。）

###Actionとは

Actionとは、
・JavaScirptのオブジェクトで、オブジェクトの内部で type というキーと、それに対応する値を持つ。
・Applicationの中で何が起きたかを示すデータのこと。

特徴として、
type はユニークなものではいけないという特徴がある。

###ActionCreater

ActionCreaterとは、
Actionを返す関数のことです。

Actionで定義したオブジェクトの記述のみでは、アプリケーションで活用することができません。
なので、Actionを返す関数を定義する必要があります。

###Reducer

Reducerとは、
Action が発生した時に、そのActionに組み込まれている type に応じて、状態をどう変化させるかを定義するものです。

###connect

connectとは、
connect関数を使用して、state や action と Component とを関連付けて、ビューのイベントで状態を遷移させて、遷移後の状態を画面に再描画する。

***mapStateToProps***とは、
state の情報から Component に必要なものを取り出して、 Component 内の props としてマッピングする機能を持つ関数です。引数には状態のトップレベルを持つ state を書いてどういったオブジェクトを props として対応させるのかを関数の戻り値として定義します。

***mapStateToProps***とは、
ある action が発生した時に、 reducer に type に応じた状態繊維を実行させるための関数が dispatch になります。
リンクを別タブで開かせる方法（注意点）




#aタグとtarget属性


**リンクを貼る**

```index.html
<a href="ここにリンク先のURLを入れる"></a>
```

1.同じタブで開く　target="_self"　　省略可能

2.別タブで開く　target="_blank"


##target="_blank"　使用する際の注意点


```index.html
<a href="ここにリンク先のURLを入れる" target="_blank" ></a>
```

あまり良くない記述


```index.html
<a href="ここにリンク先のURLを入れる" target="_blank" rel="noopener noreferrer"></a>
```

**rel="noopener noreferrer"を追加するだけ**



###詳しいことは[参考サイト](https://wwg.co.jp/blog/3807)に載ってます。
Pygameを使ってフラクタルツリー(FractalTree)を作る方法

#0.はじめに
今回作るものがどういう感じで動くのか見てみたい、この記事を読むのが面倒くさい方は[こちら](https://youtu.be/hDjlbHu7V40)(Youtubeの動画)をご覧ください。
#1.実装
```fractal_tree.py
import pygame
import math
import random

pygame.init()
win = pygame.display.set_mode((750, 650))

def drawTree(a, b, pos, deepness):
   if deepness:
      branch1 = random.randint(1,10)
      branch2 = random.randint(1,10)
      c = a + int(math.cos(math.radians(pos)) * deepness * branch1)
      d = b + int(math.sin(math.radians(pos)) * deepness * branch2)
      pygame.draw.line(win, (255,255,255), (a, b), (c, d), 1)
      drawTree(c, d, pos - 20, deepness - 1)
      drawTree(c, d, pos + 20, deepness- 1)
   else:
      pygame.draw.circle(win,(0,255,0),(a,b),2,0)

drawTree(370, 650, -90,10)
pygame.display.flip()
while True:
   for event in pygame.event.get():
      if event.type == pygame.QUIT:
         pygame.quit()
```
ここでは、まず棒を描き、そこから一定の角度を引いたり足したりして三角関数を使って次の棒まで距離を縦横求め元の棒にそれを足してというのを繰り返しています。pygameでは下に行くほどyの値が大きくなり、木は上に伸ばしたいので角度はマイナスからスタートしています。また、ここではリアルな感じにするためにランダムにbranch1とbranch2を作っていますがそこを両方10にすると普通のフラクタルツリーになります。
#2.OpenCVを使って木の形を変えてみる
```FractalTree.py
import cv2
import math
import numpy as np

def nothing(x):
    pass

def drawTree(a, b, pos, deepness,angle,img):
    if deepness:
        c = a + int(math.cos(math.radians(pos)) * deepness * 10.0)
        d = b + int(math.sin(math.radians(pos)) * deepness * 10.0)
        cv2.line(img,(a, b), (c, d),(255,255,255),1)
        drawTree(c, d, pos - angle, deepness - 1,angle,img)
        drawTree(c, d, pos + angle, deepness- 1,angle,img)

def draw(event,x,y,flags,param):
    global img
    img = np.zeros((800,800,3),np.uint8)
    b = cv2.getTrackbarPos('bar','image')
    drawTree(370, 650, -90,10,angle=b,img=img)

img = np.zeros((800,800,3),np.uint8)
cv2.namedWindow('image')
cv2.createTrackbar('bar','image',0,360,nothing)
cv2.setMouseCallback('image',draw)

while True: 
    k = cv2.waitKey(1) & 0xFF
    if k == ord('q'):
        break
    cv2.imshow('image',img)
cv2.destroyAllWindows()
```
細かい説明はしませんが、ここでは、OpenCVを使ってトラックバーを作り、最初から引いたり足したりする角度を変えることで色々な木の形を作れるようにしています。動作が重くなってしまいましたが、なんとかできました。

#最後に
今回作ったものは[Youtube](https://youtu.be/hDjlbHu7V40)でも解説しているのでそちらも良かったらご覧ください。質問、アドバイスがあればぜひコメントをよろしくお願いします。
いろんなシステムのデフォルトの等幅フォントのまとめ

プログラミングでソースコードを書くときや、ターミナルを利用するときは、等幅フォント (monospaced font) を利用するが、各システムやアプリケーションによって、デフォルトのフォントは異なる。それをまとめる。

## OS

### macOS

Terminal.app と Xcode のデフォルトの等幅フォント。

| フォント | システム | 日付 |
|:--|:--|:--|
| Monaco | Mac OS X 10.0 から？ | 2001/03/24 から |
| Menlo | Mac OS X 10.6 Snow Leopard から | 2009/08/28 から |
| SF Mono | macOS 10.12 Sierra から | 2016/09/20 から |

### Ubuntu

Ubuntu 11.04 から Ubuntu Mono がデフォルトなのは間違いなく、それ以前は DejaVu Sans Mono だったと思われるが、怪しい。情報求む。

| フォント | システム | 日付 |
|:--|:--|:--|
| DejaVu Sans Mono | Ubuntu 11.04 まで？ | 2011/04 まで？ |
| Ubuntu Mono | Ubuntu 11.04 から | 2011/04 から |

### elementary OS

| フォント | システム | 日付 |
|:--|:--|:--|
| Roboto Mono 10 | elementary OS 5.1.2 | 2020/02/07 |

### Windows

OS のデフォルトの等幅フォントというものはない？らしい。情報求む。

## アプリケーション

テキストエディタやターミナルエミュレータのデフォルトのフォント。

### Atom

昔は Inconsolata 16 pt が最も優先度が高かったようだが、現在は Menlo 14 pt が最優先されている。いつから変わったのかは調べていない。

```json
fontFamily: "Menlo, Consolas, DejaVu Sans Mono, monospace"
```

### Visual Studio Code

https://code.visualstudio.com/docs/getstarted/settings#_default-settings より、2020年7月24日確認。

```json
"editor.fontFamily": "Consolas, 'Courier New', monospace",
"editor.fontSize": 14,
```

### Hyper

```js
fontFamily: "Menlo, Consolas, DejaVu Sans Mono, monospace"
fontSize: 12
```

### Alacritty

OS ごとに異なる。v0.5.0 RC 2 で確認。

| OS | フォント | ポイント数 |
|:--|:--|:--|
| macOS | Menlo | 11.0
| Linux/BSD | monospace | 11.0
| Windows | Consolas | 11.0

## 情報提供求む

この他、各種OSやテキストエディタ、統合開発環境、ターミナルエミュレータについて情報を持ち合わせている方がいらっしゃれば、お知らせいただけると、この記事を更新するつもりなので嬉しいです。
【Flutter×Firebase】Firestoreのtimestampデータを取得したり、登録したりする

こんにちは。

①FirestoreからTimestamp型のデータを取得して、画面に表示する
②画面に入力された日付を、Firestoreに登録する

これで少しつまづいたので、メモ程度に残しておきます。


# FirestoreからTimestamp型のデータを取得して、画面に表示する

Firestoreに**「created_at」**というカラムでTimestamp型で登録している場合。

ポイント

- 一回、Date型に変換してから文字列に変換する

例はこんな感じです

このコードでは例えば「2020/07/24」という文字が出力されます。

```dart
Text(
  DateFormat("yyyy/MM/dd").format(_when.toDate()).toString(),
  style: TextStyle(
    fontSize: 16.0,
    color: Colors.black
  ),
),
```

# FirestoreにTimestamp型のデータを登録する

ポイント

- DateTime型のまま登録してOK

変数「created_at」にDateTime型を入れているとして...

```
Firestore.instance.collection("activelists").add({
  "created_at": _created_at,
});
```


# 終わりに

FirestoreのTimestamp型の扱い方が分からなかったので、色々調べながら扱えるようになりました。

つまづいた方はぜひ参考にしてみてください。
ActiveStorageをクラウドストレージ(GCS,S3, etc)で使ってた時に処理が遅くなる問題

# 概要

Heroku上で動かしていたRailsアプリの処理が遅かった時の調査メモです。
結論として、画像保存に使用していたGCPのクラウドストレージの部分がボトルネックとなっていました。

# 環境

- Ruby 2.6.3p62
- Rails 6.0.2.2

# 背景

Herokuの無料プランでRailsを使った趣味のWEBサイトを構築運用しています。
当初から処理はあまり早くないものの、SQLに関してもRedisでキャッシュを入れたりしていたので、まぁ無料ならこんなものかと思っていました。

しかしながら、一部のページのみ他のページより早い事に気がつき、何が原因かを調べることとしました。

# 調査

## 調査方法

一般的な方法ですが、下記のコマンドでログを出力させて処理時間を調べる事にしました。

```bash
heroku logs --tail
```

デフォルトでRailsはDEBUGログで処理時間を色々出してくれるので、まずはそこを確認する事にしました。

## ログの調査結果

当初はキャッシュしていない部分のSQLが遅いのかと思っていましたが、
SQLに関してはキャッシュも効いて遅いクエリも見つかりませんでした。

しかしながら、代わりに下記のような処理時間に100ms以上かかっているログが何箇所が見受けられました。

```bash
 GCS Storage (169.9ms) Checked if file exists at key: variants/xxxx
```

該当のサイトは画像をGCSにアップロードしており、その部分が関連している事が推測できました。
また、variantといったキーワードからActiveStorageの該当機能が影響していることもわかります。

### Variant
 
このvariantに関しては下記の参考資料などを見ていただければと思いますが簡単に言えば、アップロードした画像をそのまま使わずにリサイズ等を行う機能です。
[参考](https://api.rubyonrails.org/classes/ActiveStorage/Variant.html)


この機能を使えばわざわざ自分でリサイズ処理などを実装する必要がなく、更に初回アクセス時にリサイズした画像を保存して裏で再利用してくれてかなり便利な機能です。
ですが、今回はきの機能が何か悪影響を与えているようです。

## ググってみる

これ以上の調査は難しいと判断し、とりあえず似たような症状が他でも起きているのかググってみました。

結果として、AWSのS3などで似たような症状と思われるものが何点か見つかりました。

https://stackoverflow.com/questions/49415911/activestorage-checking-if-file-exists-is-slow
https://github.com/rails/rails/issues/32548
https://github.com/rails/rails/pull/37901

拙い英語力で斜め読みした所、下記のように判断しました。
(間違っていたらすみません。)

- 変換し保存した画像の存在チェックを行なっており、そこで時間がかかっている
- 既に対応する修正を行なっており、Railsバージョン(6.1)に含まれる

## 解決方法

上記を見て、最新版にすれば解決するかと思いましたが、残念ながら6.1はまだリリースされていませんでした・・・。

結論として、varianによる圧縮処理をやめて元の画像を使用する事としました。
元の画像に関して、そもそもアップロード前に手動で画像ツール等でリサイズなどの補正をしているため問題にはならないだろうという判断です。

結果として元の100ms以上かかっていたログは消えて、下記のような1ミリ秒の処理に変更され、体感的に速度が早くなったように感じます。

```bash
GCS Storage (1.5ms) Generated URL for file at key: xxxx 
```

## まとめ

という事で、クラウドストレージ(GCS)でActiveStorageで加工した画像を使用する際に処理時間がかかっている事が原因でした。
根本的な対策はせずに機能を使用しないという、微妙な形で対応する事としました。

いずれリリースされるRails6.1では対策がされているようなので、アップデート後にはまた機能を使用したいと思います。

S3やGCSなどクラウドストレージをお手軽に使用できるActive Storageですが、裏で色々と隠蔽してくれているおかげで、逆に見えない箇所で性能に影響を与える事がわかりました。
【お手軽２STEP】Macでgifファイルの作成

Macでブラウザでの操作状況を簡単にgif化することについて、メモしておきます。

## 使うツール

* ffmpeg
* mac標準搭載の動画キャプチャ

## 準備
ffmpegのインストール by brew

```
$ brew install ffmpeg
Updating Homebrew...
・・・
（省略）
・・・
$ ffmpeg -version
ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 11.0.3 (clang-1103.0.32.62)
```

## gifの作成の仕方

### 1.Command + Shift + 5 で動画キャプチャをとる

[Mac で画面を収録する方法](https://support.apple.com/ja-jp/HT208721) を参考にして、画面の動画キャプチャを録ります。

### 2.ffmpeg を使ってgifファイルを作成

1で作成したmovファイルを、ffmpegでgif化します。

```
$ ffmpeg -i hoge.mov -r 24 aaa.gif
```

これで完了です。
Fusion 360 を Pythonで動かそう その２　スケッチに円を描いてみる

#はじめに
Fusion360 のAPIの理解を深めるために公式ドキュメント内のサンプルコード [**Create circle by center and radius API Sample**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-ecd3b76b-19f7-4efa-8a02-087c16da246f) の内容からドキュメントを読み込んでみたメモ書きです
中心と半径を指定してスケッチの円を作成します。

#スクリプトの内容を確認する

##最初と最後のおまじない
最初と最後のこの辺りはFusion360 APIのお決まりのパターンのようです。今回はあまり気にせずに進むことにします。

```Python
import adsk.core, adsk.fusion, traceback

def run(context):
    ui = None
    try: 
        app = adsk.core.Application.get()
        ui = app.userInterface

        doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
        design = app.activeProduct

        # Get the root component of the active design.
        rootComp = design.rootComponent

        #
        # ここにコードを追加していく
        #

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
```
##スケッチの作成
```Python
        # Create a new sketch on the xy plane.
        sketches = rootComp.sketches;
        xyPlane = rootComp.xYConstructionPlane
        sketch = sketches.add(xyPlane)
```
`sketches`にルートコンポーネントのスケッチを代入？
`xyPlane`にルートコンポーネントのXY平面を代入？
`sketch`という名前で**[Sketches.add メソッド](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-03aaecb6-9447-41c5-aabe-804e44cb9aaa)**でルートコンポーネントのスケッチに新しいスケッチを作成

ここまでの内容を実行すると新しいスケッチが作成された
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/2e5757b8-9569-fd07-98fc-2be8fcac872e.png)

##円を何個か描いてみる

```python
        # Draw some circles.
        circles = sketch.sketchCurves.sketchCircles
        circle1 = circles.addByCenterRadius(adsk.core.Point3D.create(0, 0, 0), 2)
        circle2 = circles.addByCenterRadius(adsk.core.Point3D.create(8, 3, 0), 3)
```
`circles`という名前で [**sketchCirclesオブジェクト**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-15d12c6c-e604-488a-8f62-8fa1547c653c)を作成する
[**Point3D.create メソッド**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-e6a5729c-9233-4448-9d3f-e0dd8b0b4559)でXYZ座標を指定してポイントを作成し、[**SketchCircles.addByCenterRadius メソッド**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-f52e70b8-4566-4944-9e57-be4f13f59e0e)で中心点と半径を指定して円を描いている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/654cc354-a397-1175-1311-439c323db347.png)

##既存の円の中心に円を追加する

```python
        # Add a circle at the center of one of the existing circles.
        circle3 = circles.addByCenterRadius(circle2.centerSketchPoint, 4)
```
circle2 の [**centerSketchPoint プロパティ**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-65fe7378-616e-43ce-9cd8-23a230cb35e1) で中心点を取得し、その点を中心点として circle3 を描いている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/e31cd9b2-22ac-b9ee-965c-6c1479a7e080.png)

#まとめ
これぐらいの内容なら読んで理解するのは問題ないけど、サンプルにはないものを作りたいときにドキュメントから必要な情報を探すのに苦労しそうな気がするなー:sob:

前の記事　[Fusion 360 を Pythonで動かそう その１　スクリプトの新規作成](https://qiita.com/reisyu/items/84aa97117439e4962bbf)
次の記事　[Fusion 360 を Pythonで動かそう その３　スケッチに3つの接線で円を描く](https://qiita.com/reisyu/items/a226454ada23f5d3f49b)

# 参考
[Fusion 360 API Reference Manual](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-7B5A90C8-E94C-48DA-B16B-430729B734DC)
チャレンジレスポンス認証方式

応用情報技術者令和元年秋期 午前問38

チャレンジレスポンス認証方式の特徴として，適切なものはどれか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/3bebb56a-26aa-cff9-4f6f-7075b38c6940.png)

認証の流れは下記：
１、チャレンジとは、サーバーからクライアントに送っている課題ですね。
２、レスポンスとは、クライアントがサーバーからもらった課題を解けて、＋自分のパスワードの合体したものですね。
３、サーバー側もクライアント側と同じことをやって、もちろん合体したものもありまして、後は照合ですね。

そんな難しい流れの目的は、
通信経路上に固定パスワードを流さないようにすることで盗聴によるパスワードの漏えいを防ぐためです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/c03e8f02-4316-4176-e7bf-59ce7e817f56.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/e87330ec-095e-fe11-89bb-d0e5fe988c7e.png)


From https://www.ap-siken.com/kakomon/26_haru/q38.html
AWSガチで何もわかってない人がECSでWordPressをデプロイするまで

AWSはネットワークが独学難しく、半ば挫折気味でした。

AWSだと「Hello World！」を出すまでが非常に難しく(VPC、サブネット、ルーティングetc）まずは手を動かしてみるのにいい題材はないだろうか？ 

...と考えていたところ、ECSでWordPressをデプロイしてみるのが非常に簡単でオススメだということで、実際にやってみました。

## 必要なもの

- **docker for mac**  
  https://docs.docker.com/docker-for-mac/install/  
- **docker-compose**  
  docker for macに同梱
- **AWSアカウント**  
  https://aws.amazon.com/jp/?nc2=h_lg
- **ecs cli**  
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ECS_CLI_installation.html  
少し複雑なので、Homebrew(https://brew.sh/) を使って下記のようにインストール可能です。（AWSの認証情報必須です）

## dockerコンテナをローカルで立ち上げてみる
### 1. CLI上でdocker-composeファイル作成
（とりあえずディレクトリ直下にdocker-compose.yml作成いただければOKです）

- ` cd path/to/your/directory`  プロジェクトを作成するディレクトリへ移動してください
- `mkdir {フォルダ名} && cd {フォルダ名}`   フォルダを作成し、そのディレクトリへ移動します
- `touch docker-compose.yml` 
doccker-composeという複数コンテナからなるサービスを実行するための手順書（のようなもの）を作成します。
- `vi docker-compose.yml` 
- `i` 
インサートモード起動  
- ▼をコピペ  

```yml:docker-compose.yml
version: '2'
  services:
    wordpress:
      image: wordpress
      mem_limit: 268435456
      ports:
      - "80:80"
      links:
      - mysql
    mysql:
      image: mysql:5.7.25
      mem_limit: 268435456
      environment:
        MYSQL_ROOT_PASSWORD: password
```
- `esc` 
インサートモード終了
- `:wqを押してEnter`  
これでファイルを保存しviを終了します

### 2. docker-composeファイルのビルド
- `docker-compose up -d` 
先ほど作成したファイルがあるディレクトリ直下で実行します
- `docker ps` 
mysql:5.7.25とwordpressというイメージが作成されているのを確認します。
- `ブラウザでhttp://localhostへアクセス`
自動的に次のような画面にリダイレクトされると成功です。

<img width="1280" alt="スクリーンショット 2020-07-24 16.05.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395154/ac576e43-0c0b-4c9a-b095-1abbfadfb56f.png">
 
## AWS ECS上でdockerコンテナを実行する
### (参考) Homebrewによるecs-cliのインストール
- **パッケージのインストール**  
`brew install amazon-ecs-cli`  
- **初回インストールなのでリージョン/クラスター設定**  
`ecs-cli configure --region ap-northeast-1  --cluster {好きなクラスター名}`  
リージョンは日本を示す`ap-northeast-1`を。  
クラスターとはかなりざっくり言えば、dockerコンテナをひとまとめにした大きな括りです。ここでは「wordpress-example」とかで大丈夫です。

### 実際にECS上にコンテナをデプロイする  
先ほどのdocker-compose.ymlの存在するルートディレクトリから実行します。  

- **新規AWS ECSクラスターを作成する**  
`ecs-cli up --capability-iam --size 2 --instance-type t2.micro`  
インスタンスタイプはお好みですが、最小限の`t2.micro`を選択推奨です。  
`--capability-iam`は、新規でIAMロールを作成することを示唆します。 
 （https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cmd-ecs-cli-up.html)  
このコマンドを実行することで、新規CloudFormationスタックが作成されます。
- **成功したら...**  
`ecs-cli ps`こちらのコマンドをどうぞ。  
すると下記のような出力がされるはず。  

```bash
Name                                            State                                                                               Ports                    TaskDefinition  Health
```
こちらのPorts欄にある（{IPアドレス}->80/tcpの）{IPアドレス}をコピペして、ブラウザで開けると、ローカルと同じような画面が出てきます。

<img width="1280" alt="スクリーンショット 2020-07-24 16.05.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395154/6a2f68b0-abb3-2ff4-f5d2-1ce1619e9655.png">

お疲れ様でした！

## 学んだことなど
AWSコンソールから、ECSクラスターを作成してみても、いっこうにうまくいかなかったのですが、CLIだとここまで簡単にデプロイできるのか！と思いました。 

このデプロイをやるだけでも、AWS全くわかってない勢としては、非常に苦戦しましたので、ぜひ参考にしてみていただけますと！
【保存版2020】GASについて書いた記事をまとめました。




Googleスプレッドシート - 初心者
----------------------

**[定番]**【GAS初心者】一緒にスプレッドシートの扱い方を学ぼう6step+1try(GAS)
https://qiita.com/Rihoritsuko/items/d1a26833ead17505e302

【GAS初心者】スプレッドシートのある1列だけを抜き出したい！(GAS)
https://qiita.com/Rihoritsuko/items/10cac0514e7504e3cc35

【GAS初心者】親ファイルに対して子ファイルを生成する(GAS)
https://qiita.com/Rihoritsuko/items/de80583eb2a4aac9705d


・＜スプレ＞コードを書かずに、関数でスクレイピングする(GAS)
https://qiita.com/Rihoritsuko/items/9a4f7ed80e0514b20592

【GAS初心者】macth関数である文字を含んでいるかを調べる(GAS)
https://qiita.com/Rihoritsuko/items/cb612fc18a01df154a45

・＜スプレ＞GASでAPI（json）を送受信する(GAS)
https://qiita.com/Rihoritsuko/items/b6af5be9c3598b38aa05

・＜スプレ＞もし要素があったら取得し、なければスキップする(GAS)
https://qiita.com/Rihoritsuko/items/23c377f1c58efa79f9ca

＜スプレ＞セル内が空白かどうかで処理を分けたい(GAS)
https://qiita.com/Rihoritsuko/items/64d0a936ef2b6a872c56

【GAS初心者】末尾から数文字をとる(GAS)
https://qiita.com/Rihoritsuko/items/522d6925a64a22af91ea

【GAS初心者】ある配列を、「,」で区切った文字列にする(GAS)
https://qiita.com/Rihoritsuko/items/54e27b8a4acdbb675354

【GAS初心者】スプレッドシートの中にあるシート数を取得する(GAS)
https://qiita.com/Rihoritsuko/items/fddaf2f166bd9082d6ca

【GAS初心者】「今日の一ヶ月前」や「初日/末日」の日付を取得する(GAS)
https://qiita.com/Rihoritsuko/items/18c3f45eeb7fd59cbafc



Googleスプレッドシート - 一般
----------------------

・＜Gカレンダー＞毎月何に何時間使っているかを自動で算出してシート化する（GAS）
準備中



Googleドキュメント
----------------------

・＜ドキュメント基礎編＞ドキュメントを生成/取得/編集(GAS)
https://qiita.com/Rihoritsuko/items/a520a7093846ae1d8bf9

・毎週月曜日に今週分の議事録を各Slackへ送る(GAS)
https://qiita.com/Rihoritsuko/items/45e06952e7cfbb4cc8e2

・googleドキュメントで定型文書をボタン一つで挿入する。(GAS)
準備中

・googleスプレットシートからgoogleドキュメントを指定ファイルに自動生成する(GAS)
準備中

Slack
----------------------
・＜Slack＞Slackに通知する関数を書いて、いつでも引用できるようにする(GAS)
https://qiita.com/Rihoritsuko/items/4e1d73989cb84021b664

・＜Slack＞Slackに通知する関数を書いて、いつでも引用できるようにする(Python)
https://qiita.com/Rihoritsuko/items/c1ba5deecdb42a8b9ed0

Airtable
----------------------
・＜Airtable＞スプレッドシートからAirtableへPOSTする(GAS)
https://qiita.com/Rihoritsuko/items/d98a6f017d940275805b
yumコマンド

# よく使う基本コマンド

```:パッケージをインストール
yum install パッケージ名
```

```:アップデート可能な全パッケージを表示
yum check-update
```

```:アップデート可能な全パッケージを表示
yum update パッケージ名 #パッケージ名指定なしならば全体をアップデート
```


```:パッケージをアンインストール
yum remove パッケージ名
yum erase パッケージ名
```

```:パッケージを表示
yum list
yum list installed  # インストール済パッケージを表示
```

```:依存関係にあるパッケージを検索
yum provides パッケージ名
```

```:パッケージを検索
yum search パッケージ名
# パッケージのバージョン検索
yum --showduplicates search パッケージ名
```

```:パッケージの詳細情報を表示
yum info パッケージ名
```

```:キャッシュをクリアする
yum clean all
yum clean packages # ダウンロードしたパッケージをすべてクリアする
```

```:有効なリポジトリのリストを表示する
yum repolist
yum repolist disabled # 無効のリポジトリを表示
yum repolist all # 全てのリポジトリを表示
```

```:パッケージグループの操作。基本的に同じ
yum groupinstall パッケージグループ名
yum groupupdate パッケージグループ名
yum groupremove パッケージグループ名
yum grouplist
yum groupinfo パッケージグループ名
```
M5StickCのLEDが表示しなくなったときに

先日[遊んでいた](https://qiita.com/ryo_naka/items/4c37795b5e9e46720f7f)ら、最終的にディスプレイに何も映らなくなってしまったM5StickC。
このままだとどうにもならないので復旧を試みる。


## ファクトリーテスト
通常復旧手順として、まずはファクトリーテスト。

<img width="879" alt="2020-07-24_13h24_36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106639/e95d26a5-b93b-fffb-59fc-dc41ee659197.png">
が、まさかのコンパイルエラー。

```
FastLED.h: No such file or directory
```
FastLED.hがどっか行っちゃった？？
このまま、検索してみるとスイッチサイエンスのHPがひっかかる

http://pages.switch-science.com/m5monthlyupdate/202005/


言われるままにFastLEDをインクルード。
※今まで動いていたのはなんでなんだ？

これで改めてコンパイルしてみる。


<img width="693" alt="2020-07-24_13h34_34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106639/504587a6-6b76-11b7-e865-9895bc7c88be.png">
コンパイルはできたがサイズオーバー。
ファクトリーテストですよね？

これについては調査するのがめんどくさくなったので、
LEDが表示できるかどうかの確認として、Displayのスケッチを入れて確認。
無事に表示できたので復旧OKとしておく。
![COCOA_FINDER.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106639/8e70cc20-1ccd-2157-44f7-2636b418135d.jpeg)
RTX1200をセットアップする(CUI編)Part1

##目的
このページではRTX1200を初期化してからipv4/ipv6で通信できるようにするところまでを目的とする。今回はとりあえず接続するところまで。
筆者がCUIが好きなので使いやすいGUIが用意されているがガン無視していく。
いつものことながら筆者が環境作りなおすときに見るためのメモ書きなのでわかりにくいところが多い気がする。

##使用機材・ソフトウェア
・RTX1200([リンク](https://network.yamaha.com/products/routers/rtx1200/index))
・PC(Ubuntu16.0.4)
・GTKTerm 0.99.7-rc1
・telnet
・ifconfig
・USBシリアルケーブル(クロス)([amazonで筆者が買った物](https://www.amazon.co.jp/dp/B01N0F91GH/ref=cm_sw_r_tw_dp_x_IiNgFb4TCTWJ8))

##初期化
初期化を行うと全てのランプが点灯する。
しばらくすると初期化が完了し、電源ランプとつないでいるランのランプのみが点灯する。
### コマンドラインから初期化

コマンドラインからRTX1200を初期化するにはコマンドラインに入って以下のコマンドを実行する

```
cold start
```

Administratorでのみ実行可能。

###物理スイッチで初期化
電源を切った状態で全面に有るmicroSDボタン、USBボタン、DOWNLOADボタンの3角ボタン全てを押しながら電源を入れる。

##コンソールログイン

###シリアルケーブルでの接続
とりあえず用意したシリアルケーブルをPCとRTX1200に刺す。もちろんUSB側がPCだ。
以下のコマンドを実行してGTKTermをインストールする。
もちろんすでにインストールが済んでいる場合は必要がない。

```
sudo apt-get install gtkterm
```

インストールが済んだらGTKTermを起動する。

```
sudo gtkterm
```
ここでは管理者権限で起動する。
通常権限で起動した時出てくるメッセージが以下の2つのようなものなので、このあたりのアクセス権限を変更してやれば通常権限でも行ける気がする。今回はとりあえず管理者権限で実行。(大いなる力には大いなる責任が……と言う意味では良くないんだけど)

>Cannot open /dev/ttyS0: 許可がありません
>Cannot open /dev/ttyUSB0: 許可がありません

起動したらタブから`Configuration`>`Port`メニューを開く。以下のように設定をする。
![Screenshot from 2020-07-24 15-20-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408603/3b0720ac-d922-f8a6-47ae-3cf4688afc76.png)

`Port`については環境によって変わると思うので適宜読み替える。
`OK`を押して`Enter`を押すと以下の様な画面が出て接続が完了する。パスワードは空欄で良い。赤塗りしている部分にはMACアドレスが出る。

![Screenshot from 2020-07-24 15-25-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408603/7671034b-6942-f83c-414a-239189733468.png)


###LANケーブルでの接続
RTX1200のLAN1-1と普通のLANケーブルで接続する。
初期設定でRTX1200のIPアドレスは**`192.168.100.1`**が設定されているのでDHCPでIPが割り振られない時は自分のPCのIPアドレスは`192.168.100.2`などにすると良い。
`ifconfig`にてLANポートの名前を調べ、(多分`enp0XX`的な名前になってる)
`sudo ifconfig enp0XX 192.168.0.2`とコマンドを打てばIPを手動で設定できる。

IPが正しく割り振れたら以下のコマンドを発行すると以下の様な画面が出て接続が完了する。パスワードは空欄で良い。赤塗りしている部分にはMACアドレスが出る。
(sshコマンドでやろうとしたらうまく行かなかった。デフォルトではsshでのログインは不可になっている模様)

`telnet 192.168.100.1`
![Screenshot from 2020-07-24 15-56-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408603/161c4e39-5c34-c175-a5d8-7a125dc927f2.png)
TextFieldでのViewがキーボードで隠れなくなりました！

# 初めに

　先日、Big Sur Beta3へのUpDateがありましたね！それに伴い、Xcode12 beta3の更新もありました。Big Surは、まだまだバグが多いですが、個人的にUIや使用感が好きなので、私はCatalinaにダウングレードせず使用し続けています。

# 本文
　今回のbeta3へのUpDateで、SwiftUIでのTextFieldの文字入力の際に、自動的にキーボードがViewを回避するようになりました！個人的にめちゃくちゃ嬉しいので記事を書かせていただきました！！

![txtfield.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679965/10544af1-7fc3-63d4-a3ed-184d733f6b39.gif)
いいね機能の作成(Ruby on Rails)

#プログラミングの勉強日記
2020年7月24日　Progate Lv.221
Ruby on RailsⅩ

#Likeモデルの用意
　「どのユーザ」が「どの投稿」をいいねしたか記録するためにデータベースに`user_id`と`post_id`の2つのカラムを持つlikesテーブルを用意する。コマンドを実行してLikeモデルとマイグレーションファイルを用意する。

```terminal:ターミナル
$ rails generate model Like user_id:integer post_id:integer
$ rails db:migrate
```

```ruby:models/likes.rb
class Like < ApplicationRecord
  validates :user_id,{presence: true}
  validates :post_id,{presence: true}
end
```

#投稿にいいねしたかを表示する
　投稿詳細ページではログインしているユーザがその投稿にいいねしたデータという条件を満たす場合にいいね済みとする。

```erb:posts/show.html.erb
<% if Like.find_by(user_id: @current_user.id, post_id: @post.id) %>
  <%#  いいね済みの処理 %>
<% else %>
  <%# いいねしていないときの処理 %>
<% end %>
```

#いいねボタンの準備
　今までコントローラは`rails generate controller`で自動作成していた。このコマンドで実行するとビューファイルも自動生成されるが、今回は必要ない。なので、今回はcontrollerフォルダ内に`likes_controller.rb`というファイルを新規作成する。

```ruby:likes_controller.rb
class LikeController < ApplicationController
  def create
  end
end
```

```ruby:routes.rb
post "likes/:post_id/create" => "likes#create"
```

#いいねボタンといいね取り消しボタンの作成
　いいねボタンはcreateアクション内で新たにデータを作成後、投稿詳細ページへとリダイレクトされる。いいね取り消しボタンはlikesコントローラにdestroyアクションを作成する。

```ruby:likes_controller.rb
def create
  @like = Like.new(user_id: @current_user.id, post_id: params[:post_id])
  @like.save
  redirect_to("/posts/#{params[:post_id]}")
end

def destroy
  @like = Like.find_by(user_id: @current_user.id, post_id: params[:post_id])
  @like.destroy
  redirect_to("/posts/#{params[:post_id]}")
end
```

```ruby:routes.rb
post "likes/:post_id/create" => "likes#create"
post "likes/:post_id/destroy" => "likes#destroy"
```

```erb:posts/show.html.erb
<% if Like.find_by(user_id: @current_user.id, post_id: @post.id) %>
  <%= link_to("いいね！済み", "/likes/#{@post.id}/destroy", {method: "post"}) %>
<% else %>
  <%= link_to("いいね！", "/likes/#{@post.id}/create", {method: "post"}) %>
<% end %>
```

#いいねボタンをアイコンにする
　FontAwesomeを使う。`layouts/application.html.erb`で`<link>`タグを追加して読み込む。`link_form`メソッド内にHTML要素を記述しても文字列として認識されてしまうため、表示されない。`<%= link_to("URL") do %>`と`<% end %>`の間にHTML要素を書くことでその部分をリンクにできる。

```erb:posts/show.html.erb
<%= link_to( "/likes/#{@post.id}/destroy", {method: "post"}) do %>
  <span class="fa fa-heart like-btn-unlike"></span>
<% end %>
```

#いいね数の表示
　likesテーブルからデータ件数を取得するにはcountメソッドを使う。countメソッドは配列の要素数を取得するメソッドだが、テーブルのデータ数を取得するためにも利用できる。

```terminal:ターミナル
$ rails console
 > Like.all.count
 => 3
 > Like.where(post_id:1).count
 => 2
```

<img width="911" alt="0724.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642821/13459498-7b30-b151-2cb8-92442b4edc0f.png">


```ruby:posts_controller.rb
def show 
  @like_count=Like.where(post_id: @post.id.count
end
```

#いいねした投稿の表示
　あるユーザがいいねした投稿を一覧で表示する。（ユーザに関わるページなので、usersコントローラの中をいじる）いいねした投稿を一覧で表示するためにlikesアクションをusersコントローラ内に作成。

```ruby:routes.rb
get "users/:id/likes" => "users#likes"
```

```ruby:users_controller.rb
def likes
  @user=User.find_by(id: params[:id])
  @likes=Like.where(user_id: @user.id)
end
```

```erb:users/likes.html.erb
<% @likes.each do |like| %>
  <% post=Post.find_by(id: like.post_id) %>
<% end %>
```
tarの使い方


## 圧縮編

圧縮は下記のコマンドで実行する。

```bash:
tar zcvf 圧縮先ファイル名 ファイルorディレクトリ
```

複数のディレクトリ指定してをまとめて圧縮できる

```bash:
tar zcvf 圧縮先ファイル名 ディレクトリ1 ディレクトリ2 
```

コマンドオプションのcが圧縮を意味している。 
zがgz形式の圧縮方法を指定している。
そのほかの圧縮方法はbz2(オプションにjを指定), xz(オプションにJを指定)がある。

## 解凍編

解凍は下記のコマンドで行う。
解凍を実行したディレクトリに解凍した結果が展開される。

```bash:
tar zxvf 圧縮ファイル名 
```

解凍先のディレクトリを指定する場合は-Cオプションをつける。

```bash:
tar zxvf 圧縮ファイル名 -C 解凍先ディレクトリ
```

コマンドオプションのxが解凍を意味している。
解凍方法の指定は圧縮時と同じである。
実は解凍時は解凍方法の指定がなくても解凍が可能である。
tarコマンドがファイルの圧縮方法を自動判定してくれる。
ゲノム分析やってみた　My Complete Genome 6,000 Base-Pairs of Phenotype SNPs - Complete Raw Data　より

##202007の4連休を利用してデータ分析を練習中です

データはこんな感じです。 遺伝子型20　染色体25　position487,700
![data.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/515ab3c9-1acc-2e3d-0abd-e23f9a27908c.jpeg)

代表的なモデル

![代表的なモデル.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/3f016dcd-0ef2-a297-2b32-525087455de1.jpeg)

ブループリント
![ブループリント.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/d71e9d67-1c72-9ea9-93f1-3c9a44c15f87.jpeg)

リフトチャート
![リフトチャート.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/4bf5a026-0096-3bd4-fd42-e5db0dc7299b.jpeg)

クラス混合同列
![クラス混合同列.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/d77e6ac3-29a3-3af8-846e-28b3a23b5ed8.jpeg)

学習曲線
![学習曲線.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/a428821b-6c07-7059-8128-9740f4b01be2.jpeg)

分析結果で次第　また追加します。
laravel cowitter

laravel で twitter api cowitter を使う。
面倒なのでモデルに読み込ませる。

これで片思いかどうかがわかる。

```Cow.php

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;
use Log;

use mpyw\Co\Co;
use mpyw\Co\CURLException;
use mpyw\Cowitter\Client;
use mpyw\Cowitter\HttpException;

//cowitter 利用専門
class Cow extends Model
{

    var $client;

    public function start($token,$token_secret)
    {
        $client = new Client([config('app.twitter_client_id'),config('app.twitter_client_secret'),$token,$token_secret]);
        $this->client = $client;
    }


    public function isFollow($source_id,$target_id)
    {
        //片思い
        $statuses = $this->client->get('friendships/show', [
            'source_id' => $source_id,
            'target_id' => $target_id,
        ]);

        if($statuses->relationship->source->following){
//            pd("フォローしています");
            $res = true;
        } else {
//            pd("フォローしていません");
            $res = false;
        }

        return $res;
    }


}



```

cowitter

```HogeController.php

use App\Cow;
class HogeController extends Controller
{

    public static function test(Request $request)
    {

        $token = '4yhournZLGNGD';
        $token_secret = 'tWuyiur34QFkbdBEDONuAybqBaagr';

        $cow = new Cow;
        $cow->start($token,$token_secret);
        $tmp = $cow->isFollow('125023968', '11285142');
//        $tmp = $cow->isFollow('11285142','125023968');

        pd($res);
        
        die;

```
Javascript Array.splice()の使い方

#splice()の引数による挙動の違いについて解説
今回は１〜３までの引数を持つときの動きを記述
最終的にコンソール結果はこの通り
![スクリーンショット 2020-07-24 13.14.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670884/481919bb-d1a4-83a4-3ec2-3be6603d9faf.png)



##１個の時
```javascript

//引数が１つの場合
let array = ['1番目', '2番目', '3番目', '4番目', '5番目','６番目','７番目'];
console.log(array);

let arr = array.splice(2);//結果:['3番目', '4番目', '5番目']←引数が１つだと配列の○番目のインデックス未満のインデックスを削除
                          //ここで注意なのは大元のarrayの３番目以降の要素が削除されること。つまりarrで表示される部分がarrayからarrに引越しした感じ
console.log(array);//結果: ["1番目", "2番目"]
console.log(arr);//結果:['3番目', '4番目', '5番目']
```

##2個の時

```javascript
//引数が2つの場合
let array2 = ['1番目', '2番目', '3番目', '4番目', '5番目','６番目','７番目'];
console.log(array2)
let arr2 = array2.splice(2,2)//配列の○（第一引数）番目から△（第二引数）個のインデックスを抜き取る。
console.log(array2);//結果：["1番目", "2番目", "5番目", "６番目", "７番目"]
console.log(arr2);//結果：["3番目", "4番目"]
```

##3個の時

```javascript
//引数が3つの場合
let array3 = ['1番目', '2番目', '3番目', '4番目', '5番目','６番目','７番目'];
console.log(array3)//３番目、４番目を抜き取り、その場所に新規値を追加（今回は'インデックスに追加'を追加）
let arr3 = array3.splice(2,2,'インデックスに追加')// ["1番目", "2番目", "インデックスに追加", "5番目", "６番目", "７番目"]
console.log(array3)//
console.log(arr3)//
```

#ポイント
####引数（n, l , o)
####１個だったら引数からn番目以降のインデックスを取り出す（元の配列から削除）
####２個だったら引数からn番目以降インデックスからl個のインデックスを取り出す（元の配列から削除）
####３個だったら引数からn番目以降インデックスからl個のインデックスを取り出し（元の配列から削除）、n番目の次にoの値を追加する（lが０であれば単純にoを追加するということになる）

###つまり
####引数が１ or 2 なら削除で使う
####引数が３　なら追加（削除も可能）
NAT(Network Address Translation)、NAPT(Network Address Port Translation)

応用情報技術者令和元年秋期 午前問37

インターネットへの接続において，ファイアウォールでNAPT機能を利用することによるセキュリティ上の効果はどれか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/2833f6e8-3b83-9639-fb05-1c29975d831e.png)


**NAPT**(Network Address Port Translation)は、プライベートIPアドレスとグローバルIPアドレスの相互変換するNATの考え方にポート番号を組み合わせた技術です。
**NAT**Network Address Translationの略。プライベートIPアドレスとグローバルIPアドレスを1対1で相互に変換する技術です。

**DMZ**（DeMilitarized Zone）とは、インターネットなどの信頼できないネットワークと、社内ネットワークなどの信頼できるネットワークの中間に置かれる、ネットワーク領域のことだ。直訳して「非武装地帯」とも呼ばれる。

NAPTが有効になっている場合、利用者PCがインターネットにアクセスしようとすると、NAPT機能をもつ機器等はプライベートIPアドレスをグローバルIPアドレスに変換すると同時に、送信元ポート番号を未使用の別の番号に書き換えてからインターネットに送出します(②)。そしてインターネットから内部ネットワークへのパケットが返ってくると、その送信先ポート番号を見て、送信先IPアドレスと送信先ポート番号を適切に書き換えて利用者PCに届けます(⑤)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/76c711b6-0205-9e9c-2cff-b3b2e87511a6.png)

NAPT機能をもつ機器では、インターネット接続に使用中のポート番号を記憶しています。このため攻撃者が内部ネットワークへの不正アクセスを試みても、記憶しているポート番号以外に宛てたパケットは宛先不明としてすべて破棄されます。しかもNAPTで割り振られるポート番号は数万種あり、セッション確立の度に異なるため、攻撃者がピンポイントでポート番号を指定して利用者PCに不正アクセスすることは困難です。このように、NAPT機能には内部ネットワークを秘匿できるというセキュリティ上の副次的効果があります。

NAPTで割り振られるポート番号が分かれば、例え上記の例の20000が分かれば、外部から20000でアクセスすると、⑤のように変換して、セッション以内では、攻撃は有効ですね。
ただ、その例の20000がばれてしまい、かつ攻撃がセッション有効の時間内（普通は１時間）では、困難ですね。

ーーーーーーーーーーーーーーーーーーーーーーーー
補足

TCP，UDPのポート番号を識別し，プライベートIPアドレスとグローバルIPアドレスとの対応関係を管理することによって，プライベートIPアドレスを使用するLAN上の複数の端末が，一つのグローバルIPアドレスを共有してインターネットにアクセスする仕組みはどれか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/5afc97c9-a2ec-f562-803b-14cad6ad3d4b.png)


１、NAPT(Network Address Port Translation)は、プライベートIPアドレスとグローバルIPアドレスの相互変換するNATの考え方にポート番号を組み合わせた技術です。


２、
・IPスプーフィング　IP Spoofing
⇒IPスプーフィングは、IPアドレスを偽装し正規のユーザになりすましてアクセスを行う攻撃手法です。
IPスプーフィング（IP Spoofing）とは、送信元のIPアドレスを偽装し、通信を行う攻撃手法のことである。 偽装することにより、WebサイトなどのIPアドレス制限を突破したり、またDoS攻撃などを行う際、攻撃元の特定を困難にしたりすることができる。

・IPマルチキャスト
⇒IPマルチキャストは、IPパケットを1回で複数の受信者に送信する方法です。
　・1回で1人の受信者に送信することをユニキャスト、
　・1回で同じネットワークセグメントに属するすべての受信者に送信することをブロードキャストといいます。

・NTP
⇒Network Time Protocolの略。ネットワークに接続されている環境において、機器が持つ時計を正しい時刻(協定世界時:UTC)へ同期するための通信プロトコルです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
補足

プライベートIPアドレスを割り当てられたPCがNAPT(IPマスカレード)機能をもつルータを経由して，インターネット上のWebサーバにアクセスしている。WebサーバからPCへの応答パケットに含まれるヘッダ情報のうち，このルータで書き換えられるフィールドの組合せとして，適切なものはどれか。ここで，表中の〇はフィールドの情報が書き換えられることを表す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/72d18691-a881-45d1-7647-71e20f8c346a.png)

・送信パケットは、送信元IPとポートを書き換える、
・受信パケットは、宛先IPとポートを書き換える

質問には、WebサーバからPCへの応答パケットので、受信パケットですね。
このときには、パケットにとっては、送信元は、Webサーバ、宛先はPCので、宛先のIPとポートを書き換えますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/76c711b6-0205-9e9c-2cff-b3b2e87511a6.png)


参照：
https://www.ap-siken.com/kakomon/29_haru/q36.html

https://www.ap-siken.com/kakomon/28_aki/q34.html

https://www.pm-siken.com/kakomon/31_haru/am1_10.html
CSV データの nan, inf の表現のメモ

## 背景

* 数値の CSV データに `nan` とか `#NAN` とかあってつらい :cry:
* 数値専用の CSV パーサーを書いているが, https://github.com/lighttransport/nanocsv nan, inf あたりどう扱うのが正しい(推奨)のか気になりました.

## numpy savetxt

numpy.nan, numpy.inf

=> `nan`, `inf` で出力される.

## pandas to_csv

pandas の場合は, nan は消されるっぽい(カラの値が出力)

## C printf

C99 で nan, inf の表現が標準で規定されたっぽい?

musl の例

https://github.com/ifduyue/musl/blob/master/src/stdio/vfprintf.c#L200

`nan`, `NAN`, `inf`, `INF` がある.

## 古い Visual Studio

VS2013 or earlier では, `#NAN` などで表示される

https://docs.microsoft.com/en-us/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions?view=vs-2019

## まとめ

ナウでヤングな環境なら, `nan`, `inf` をパースできればよい.
(ただし, きちんとやるなら, 文字列の行なのか, 数値の行なのか判定する必要がある)

Windows で古いツールが出した CSV だと`#NAN` とかが出るので, これを扱いたい場合は別途パーサー側で対応が必要.
国土数値情報（国有林野）のベクトルタイル化

国土数値情報（国有林野）は性質の良いデータで、概ねポリゴン同士が隣接しています。

このため、ポリゴン同士を接合するディゾルブという処理を行うだけで、小縮尺でも表示できると思い、やってみました。

![](https://optgeo.github.io/hk/img/screenshot.jpg)

このような感じで、うまくいきました。

テストサイト: https://optgeo.github.io/hk
レポジトリ: https://github.com/optgeo/hk
昼飯データベースを作りたい！【EP.0】

#昼飯って大事
こんにちは、食へのこだわりがあったりなかったりする人です。
皆さんお昼ご飯はどうしていますか？
私は外で食べる派です。
お昼を外で食べようってなると、どこで食べようかなとか、何を食べようかとか、色々考えますよね。
今までここ行ったことなかったけど今日はちょっと挑戦してみようとか、、、

楽しい事ばかりなのに！！　
最近色々ありすぎて外食いけないですよね。~~外で食べたい派~~
ちなみに、[ホットペッパーグルメ外食総研](https://www.hotpepper.jp/ggs/?doing_wp_cron=1594994466.7852900028228759765625)の調べによれば、2020年5月の外食産業規模は前年の4分の1にまで縮小しているそうです。／(^o^)＼ﾅﾝﾃｺｯﾀｲ
まあそらそうなんですが、もう一つホットペッパーグルメ外食総研の調べの中で面白い項目がありました。
2020年7月8日に発表されたホットペッパー人気検索ワード2020年6月にて「ランチ」が1位に復活したそうです。それ以前がどうだったのか知らないので、2020年の1月時の人気検索ワードを見てみると、ここでも「ランチ」が1位でさらにこの時点で、13か月連続1位を獲得しているらしくやっぱりランチってみんなよく調べている
んですねー

ランチ調べるとき私としては結構思うところがあって昼休憩の時間で行って帰ってこれるところをピンポイントで探すの結構難しいですよね。
だから同僚とか上司のいく一押しの飯屋の情報が頼りになるのですが、ここ最近まで完全にリモートで働いていたため、たまの出社の際にどこ行こうか結構悩む！　~~（しかも完全リモートだったせいで上司が飯つれっててくれるイベントが発生しない）~~
そこでちょっと考えました。
##俺のための昼飯データベースが欲しい！！
（なんならおすすめの飯屋を出してくれると嬉しい。昼休みで行って帰ってこれる範囲で）
あとはアウトプットが大事っていうありがたいお話をいただいたので、なんか作ってみたい！
じゃあ自分で作ってみようか:robot:
てなわけでここから俺用昼飯データベースの作成をします。

＜適当な物書き＞
<details><summary>外食産業の現状について</summary>
現在の外食産業の動向について令和元年度版食料農業農村白書（農林水産省（2020））によると、「我が国で生産された食材及び輸入された食材」の最終消費の中で外食の割合は32.6％で市場規模は27.4兆円となっています。（生鮮食品：16.9％、加工食品：50.5％）
この32.6％という数字自体は高度経済成長期を経てバブルも終わった1995年の32.5％とほとんど変わっていません。しかし、市場規模は1995年の26.8兆円から2015年27.4兆円と純粋に成長しているように見えて実は2011年までは下降傾向にありました。2011年の25.1兆円の規模から4年間の間に一気に2兆円ほど伸びています。この間では外食産業だけでなく食料消費自体も8兆円弱伸びています。
この原因としては何があげられるでしょうか。
この期間で日本の人口は大きく変わっていませんが、訪日外国人の数は2012年から2016年まで毎年前年比+20%以上の伸びを継続しています。特に2015年は前年比+47.1%と大きく伸びています。（日本政府観光局（2020））
ここについて直接の因果関係を検証している文献を見つけることができませんでしたが、興味深い数字であることは間違いないと思います。
</details>

<details><summary>意思決定のミス</summary>
　現代ではインターネットのおかげであるものを調べる際には膨大な情報量が簡単に手に入りますよね。ですが、皆さんはその膨大な情報量をうまく使えていますか？
　　
　例えば、今日のランチどこで食べようかなーって時にネットの口コミサイトで調べるとします。ここで出てくる情報をすべて活用できていますか？というかむしろ多すぎて逆に疲弊していませんか？そして多数の情報を持つ多数の選択肢があるなかでよい選択ができていると思いますか？
　
　人間には合理的にものを考える思考と直感的にものを考える思考の二つがあるとされています（二重過程理論）。人が一度に処理できる情報の数には限度があります。そのために多数の情報から決断をしなければいけない場合に人はコストのかかる合理的な思考からコストが低い直感的な思考に移ります。直感的な思考は素早く、処理の負荷も少ないですがバイアスの影響を受けやすいです。そうなるとよい意思決定ができているとは言いづらいです。
　
　では、より良い意思決定のためには何が必要かというときに私たちを助けてくれるものは何か。
ここは行動経済学の分野で様々な議論がなされており、Nudge（ナッジ）という言葉を聞いたことがある人もいるかもしれません。
ナッジとは軽く肘でつつくという英語で、「行動経済学」の著者、リチャード・セイラーは-選択を禁じること、経済的なインセンティブを大きく変えることもなく、人々の行動を予測可能な形で変える選択アーキテクチャーのあらゆる要素を意味する-と述べています。
駅の階段によく矢印が書いてあるのを見たことがあるという人は多いと思いますが、あれもナッジの一つです。あれは矢印の通りに進むことが誰かに義務付けられているわけではありません。でも、なんとなく矢印の方向で昇り降りをしますよね。駅によっていろいろパターンがあって左側通行とかは特に決まっているわけではないのに。人々に選択の余地を残しながらより良い方向へと導くちょっとしたもの、それがナッジです。
　
　　
昼飯データベースとなんの関係があるのか？？
今のところはないです。
自分の生活に新たな選択アーキテクチャーを導入したいと思ったときに浮かんだ話でした。
いずれ回収できるかもしれません。
</details>

#ゆるゆる要件定義
最近要件定義っていう言葉を覚えたので、使いました。深い意味はないです。

【目指すもの】
昼飯どころの記録をするデータベース

【欲しい機能】
①昼飯どころの記録を入力する機能
②価格帯、ジャンルから検索できる機能

【何で作るか】
いろんな人が使えたらと思うのでWebアプリみたいにしたい！
そんでPythonは少し触っていたかつ、この機にDjangoも勉強したい！
っていうことでPython&Djangoで作ることにしました。

データベースについては何にも思いついていないですが、たぶんSQLでよいのでは？
そうなるとMariaDBとかかな、、、

バージョン管理はGitを使いたい。
まだ使ったことがないから

【どういう順番で作るか】
まずはDB設計
次に入力画面の設計
データを渡すプログラムの設計
検索のプログラム設計
その他
こんな順番じゃないでしょうか、
すべて勉強しながら作るのでのろのろペースで頑張ります。

【何から始めるか】
すべてが0からのスタートなのでまずは根幹となるDjangoから勉強してある程度分かってきたら次のステップに移っていきたいと思います。

長い道のりになりそうですがその分楽しみな道でもありますね～
以上、Webアプリを作る試みの備忘録その0でした。

次回⇒[昼飯データベースを作りたい　【EP1】はじめてのDjango勉強編](https://qiita.com/EconUC/items/96fc1cd2e866f8fc72ed)
Groupieでclickイベントを実装する

Groupieでのレンダリングは前に実装したんですが, Groupieでレンダリングしたリストに対してClickListenerをつけていきたいと思います.
github: 

[https://github.com/WallyNegima/android_practice:embed:cite]



## interfaceとAdapterを用意する

クリック時の振る舞いはinterfaceとしてAdapterに渡してあげます.
adapterは受け取ったinterfaceをListのそれぞれのItemに更に渡してあげる感じです.


用意するinterfaceはこんな感じです. 今回はMainActivityの中に作りました

```
interface MainListItemClickListener {
        fun onItemClick(
            itemId: String
        )
}
```

adapterはGroupAdapterを継承します.
この時, GroupieでレンダリングするItemにlistenerを渡してあげます

```
class ListAdapter(private val listener: MainActivity.MainListItemClickListener) :
    GroupAdapter<GroupieViewHolder>() {
    fun updateList(list: List<MainActivity.Item>) {
        update(list.map {
            TopListItem(
                text = it.text,
                itemId = it.itemId,
                listener = listener
            )
        })
    }
}
```


TopListItemはこんな感じです.
itemIdは, クリックしたときにどのitemがクリックされたかを判別するために用意してます. IntでもStringでも何でもOKです.
```
class TopListItem(
    private val text: String,
    private val itemId: String,
    private val listener: MainActivity.MainListItemClickListener
) : BindableItem<ItemTopListBinding>() {
    override fun getLayout() = R.layout.item_top_list

    override fun bind(viewBinding: ItemTopListBinding, position: Int) {
        viewBinding.button.text = text
        viewBinding.button.setOnClickListener {
            listener.onItemClick(
                itemId = itemId
            )
        }
    }

    override fun initializeViewBinding(view: View): ItemTopListBinding {
        return ItemTopListBinding.bind(view)
    }
}
```

## intefaceの中身を実装


onCreate関数の中でadapterを生成します. このときにinterfaceの中身を実装します.
無名クラスを使いました.

```
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        val adapter = ListAdapter(object : MainListItemClickListener {
            override fun onItemClick(itemId: String) {
                itemClickHandler(itemId)
            }
        })

        binding.recyclerView.adapter = adapter
}

 private fun itemClickHandler(itemId: String) {
        when (itemId) {
            VIEW_A -> {
                val intent = Intent(this, ViewAActivity::class.java)
                startActivity(intent)
            }
            VIEW_B -> {
                val intent = Intent(this, ViewBActivity::class.java)
                startActivity(intent)
            }
        }
    }
```

最終的にはこんな感じで動作します.

<a href="https://gyazo.com/8db1700ccc7783e0fac8f544b72c03d7"><img src="https://i.gyazo.com/8db1700ccc7783e0fac8f544b72c03d7.gif" alt="Image from Gyazo" width="344"/></a>


[https://github.com/WallyNegima/android_practice:embed:cite]
JavaScript: Set(🦊,🐱,🐶)とSet(🐱,🐶,🐹)の共通要素Set(🐱,🐶)を求める方法

この投稿では、JavaScriptの2つの`Set`から、その共通要素(intersection)を調べる方法を紹介します。

## 2つの`Set`の共通要素を調べる方法

```javascript
const a = new Set(['🦊', '🐱', '🐶'])
const b = new Set(['🐱', '🐶', '🐹'])
const intersection = new Set([...a].filter(x => b.has(x)))
console.log(intersection)
//=> Set { '🐱', '🐶' }
```

この`new Set([...a].filter(x => b.has(x)))`の部分が共通要素のSetを作るコードです。やっていることは、1つ目のセットの配列を作った上で、`filter`メソッドでその要素ひとつひとつに対して「2つ目のセットの要素かどうか」の基準で絞り込み、最終的に絞り込み結果の配列を`Set`に戻しているだけです。

汎用的に使う場合は関数化しておくといいかもしれません。

```javascript
function intersectionOf(a, b) {
  return new Set([...a].filter(x => b.has(x)))
}
```
Jquery で複数ボタンを順次点滅させる方法

HTMLのアニメーションを組み込もうとしてJqueryでいくつか調べて実施した内容を紹介します。いくつか調べたのですが、うまい具合に見つからなかったので素人ながら自作しました。

https://techfromjapan.estacionsuzuki.com/
動作イメージは、このサイトヘッダーのボタンの動作になります。
タイマーを設置しているので一定間隔でボタンが点灯していきます。


```index.html
(略)
 <script src="./jquery-3.5.1.js"></script>
(略)

<div class="category">
        <div class="icon timer">
            <p>A</p>
        </div>
        <div class="icon timer">
            <p>B</p>
        </div>
        <div class="icon timer">
            <p>C</p>
        </div>
        <div class="icon timer">
            <p>D</p>
        </div>
        <div class="icon timer">
            <p>E</p>
        </div>
        <div class="icon timer">
            <p>F</p>
        </div>
        <div class="icon timer">
            <p>G</p>
        </div>
    </div>


(略)
</footer>
         <script src="./script.js"></script> <!-- ※Jqueryのファイルです -->
</body> 

```

```stylesheet.css

.category{
  width: 100%;
  height:auto;
  margin-top: 5px;
  padding-left: 0%;
  padding-right: 3%;

}



.icon {
    display: inline-block;	  
    text-decoration: none;
    color: black;
    background-image: linear-gradient(#FAF0E6 0%, #FF8C00 100%);   
    transition: .4s;
    text-align: center;
    margin: 0 1px;
    padding:auto;
    width:13%;
    height:50px;    
}

.icon:hover {
  opacity: 0.5;
}

```

```script.js
// jQuery
$(function(){
    

//カテゴリボタンを点滅させるアニメーション
        //（１）ページの概念・初期ページを設定
        var page=0;

        //（２）イメージの数を最後のページ数として変数化
        var lastPage =parseInt($(".timer").length-1);

        //（３）初期ページを表示
                  $(".timer").eq(page).css("opacity","0.5");

        //（４）ページ切換用
        function changePage(){
                                 $(".timer").css("opacity","1");
                                 $(".timer").eq(page).css("opacity","0.5");
        };
        //（５）～秒間隔でイメージ切換の発火設定
        var Timer;
        function startTimer(){
                Timer =setInterval(function(){
                      if(page === lastPage){
                                     page = 0;
                                     changePage();
                           }else{
                                     page ++;
                                     changePage();
                      };
                 },3000);
        }
        //（６）～秒間隔でイメージ切換の停止設定
            function stopTimer(){
                clearInterval(Timer);
            }
        //（７）タイマースタート
        startTimer();
    
// トップページカテゴリのclickイベント
      $('.icon').click(function(){
          // 自動アニメーションの停止
          
          $('.timer').css('opacity', '');
          stopTimer();
      });
    
  });   
    
```
IPv6の拡張ヘッダのセキュリティ機能

応用情報技術者令和元年秋期 午前問36

IPv6において，拡張ヘッダを利用することによって実現できるセキュリティ機能はどれか。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/ead508dd-0f35-b4ee-8b09-52cc444a9cb4.png)

複数回出題していましたね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/3b26291c-2ccb-5e89-a8a8-cb2e31e49eb7.png)

From　https://www.ap-siken.com/kakomon/28_aki/q36.html
Rust: PostgreSQL のデータを削除 (Delete)

```text:Cargo.toml
[package]
name = "postgres_delete"
version = "0.1.0"
edition = "2018"

[dependencies]
postgres = "*"
```

```rs:src/main.rs
// --------------------------------------------------------------------
/*
	postgres_delete/src/main.rs

					Jul/24/2020
*/
// --------------------------------------------------------------------
use std::env;
use postgres::{Client, NoTls, Error};

// --------------------------------------------------------------------
fn main() -> Result<(), Error> {
	eprintln!("*** start ***");

	let args: Vec<_> = env::args().collect();
	let key_in = &args[1];

	eprintln!("{}",key_in);

	let mut client = Client::connect("postgresql://scott:tiger123@localhost/city", NoTls)?;

	let sql_str = "delete from cities where id = '".to_string()
		+ &key_in.to_string() + "'";
	
	client.batch_execute(&sql_str)?;



	eprintln!("*** end ***");
	Ok(())

}

// --------------------------------------------------------------------
```

実行コマンド

```bash
cargo run t3467
```
Rust: PostgreSQL のデータを更新 (Update)

```text:Cargo.toml
[package]
name = "postgres_update"
version = "0.1.0"
edition = "2018"

[dependencies]
postgres = "*"
chrono = "0.4"
```

```rs:src/main.rs
// --------------------------------------------------------------------
/*
	postgres_update/src/main.rs

					Jul/24/2020
*/
// --------------------------------------------------------------------
use std::env;
use postgres::{Client, NoTls, Error};
use chrono::{Local, Date};

// --------------------------------------------------------------------
fn main() -> Result<(), Error> {
	eprintln!("*** start ***");

	let args: Vec<_> = env::args().collect();
	let key_in = &args[1];
	let population_in = &args[2];
	eprintln!("{}",key_in);
	eprintln!("{}",population_in);

	let mut client = Client::connect("postgresql://scott:tiger123@localhost/city", NoTls)?;

	let date_mod: Date<Local> = Local::today();
	println!("{}", date_mod);

	let sql_str = "update cities set population = ".to_owned()
		+ population_in + &", date_mod = '".to_owned()
		+ &date_mod.to_string()
		+ &"' where id = '".to_owned() + key_in + "'";
	
	client.batch_execute(&sql_str)?;

	eprintln!("*** end ***");
	Ok(())
}

// --------------------------------------------------------------------
```

実行コマンド

```bash
cargo run t3462	7621300
```
Laravelでmigatateした時にエラーが出ました。

下記のエラーが出ました。

```
$ php artisan migrate

   Illuminate\Database\QueryException  : SQLSTATE[HY000] [1049] Unknown database 'laravel' (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE')
```

原因

- データベースを作成せずにコマンドを入力したこと


 解決方法

- mysqlにログインしてデータベースを作成した
- `$ mysql -u root`
- `mysql> create database 任意のDB名;`
- `mysql> use DB名;`
- `mysql> create user ユーザー名 IDENTIFIED BY '任意のパスワード';`
- `mysql> grant all privileges on DB名.* to 'ユーザー名';`
- `mysql> quit;`
- .envファイルにDB_DATABASE　DB_USERNAME　DB_PASSWORDをそれぞれ追記した


そして`$ php artisan config:cache`を行い設定を反映させ
再度、`$ php artisan migrate`で解消された。

焦らず順番に行なうようにしていきたい。
Visual Studio - エラーコードC1033

#症状
Visual Studioでビルドを行うと
```エラー C1033 プログラム データベース '～～ディレクトリ～～\Debug\〇〇.idb' を開けません。```
と表示され、ビルドが失敗してしまう。

##原因
Google ファイルストリーム内から実行しており、自動バックアップと衝突していた？
※Dropboxなども同様の現象が起きる。

#解決策
デスクトップなど、ローカルのストレージにファイルを移動してからビルドすると成功した。


#まとめ
どこまで詳細に記事を書くかが難しいです…

---

###参考
https://stackoverflow.com/questions/20340200/why-do-i-get-the-error-c1033-cannot-open-program-database-in-vs-2010
TCP/IPネットワークのフォワードプロキシ、リバースプロキシ

応用情報技術者令和元年秋期 午前問35


TCP/IPネットワークのフォワードプロキシに関する説明のうち，最も適切なものはどれか。


ア、Webサーバと同一の組織内(例えば企業内)にあって，Webブラウザからのリクエストに対してWebサーバの代理として応答する。
イ、Webブラウザと同一の組織内(例えば企業内)になければならない。
ウ、Webブラウザの代理として，Webサーバに対するリクエストを送信する。
エ、電子メールをインターネット上の複数のサーバを経由して転送する。


プロキシ：
１、フォワードプロキシ：組織以内におけるプロキシサーバーがブラウザーの代理として、外部のWebサーバーに内部のRequestをして、応答をする。
　　内部Request　→　プロキシサーバー　→　外部サーバー　→　　プロキシサーバー　→　内部に応答

２、リバースプロキシ：組織以内におけるプロキシサーバーが外部からRequestを組織以内のWebサーバーの代理として応答する。
　　外部Request　→　プロキシサーバー　→　内部サーバー　→　　プロキシサーバー　→　外部に応答

後は、
・プロキシサーバーは、クラウンド型もあります。必ず組織以内におけるのはないです。
・プロキシサーバーは、メールの転送はしません。


・リバースプロキシ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/c1a5c14c-bc03-db27-e1f3-c47d8f77a930.png)

・DMZ
DeMmilitarized Zoneの略。非武装地帯の意味をもち、外部からアクセスされる可能性のある公開サーバ(Webサーバ・メールサーバ・プロキシサーバなど)などの情報資源を配置するためのネットワークセグメントのことです。外部ネットワーク及び内部ネットワークとファイアウォールで隔てられており、ファイアウォールの中でも外でもない中間的なエリアに位置付けられます。


・プロキシARPは、
あるホスト宛てのARP要求に対して代理でARP応答をする機能で、ルータなどに備わっています。

ARP（Address Resolution Protocol）は、IPアドレスからEthernetのMACアドレスの情報を得られる プロトコルです。


参照

https://www.ap-siken.com/kakomon/01_aki/q35.html

https://www.ap-siken.com/kakomon/31_haru/q35.html