OmniAICreator/Qiita-1.07M huggingface dataset:
Lambdaでaws_s3.query_export_to_s3 関数を使用したクエリデータのエクスポート

# はじめに

> Aurora PostgreSQL DB クラスター からデータをクエリし、Amazon S3 バケットに保存されているファイルに直接エクスポートできます。そのために、Aurora PostgreSQL によって提供される aws_s3 PostgreSQL 拡張機能を使用します。

### 参考
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/postgresql-s3-export.html


ソースコードのみの紹介となりますが、実行するためには以下の設定が必要です
・postgresにアクセスするためにLambdaをpostgresと同じサブネットに配置するか、通信できるサブネット（SG、ACLの設定）には配置が必要
・VPC内でLambdaを実行するためのロール設定
・postgresからS3へアップロードするためのIAMポリシーの設定


# コード
```python
import psycopg2

def lambda_handler(event.context):
   URL = (host='',DB='',username='',password='')
   query = 'select * from remindtable'

   s3_uri = SELECT aws_commons.create_s3_uri('sample-bucket','sample-filepath','ap-northeast-1') 
   query = SELECT * FROM aws_s3.query_export_to_s3('SELECT * FROM sample_table', s3_uri, options :='format text');

   with psycopg2.connect(URL) as conn:
        with conn.cursor() as cur:
            cur.execute(query)
            cur.fetchall()
```

(参考)
psycopg2をLambdaで使用する方法は、[こちら](https://qiita.com/Geeryo/items/bf8d8dbd964640dbc238)

postgresにログインして投げるクエリをLambdaから実行しているだけです。
また、s3_uriでアップロード先のバケットとフォルダ、ファイル名を指定しています。
（既存のものは上書かれ、ない場合は新規に作成されます）

#最後に
aws_s3 PostgreSQL 拡張機能をLambdaから実行する方法をまとめてみました。
かなり省略してまとめましたが、ご不明あればご指摘ください。
どなたかのご参考になれば幸いです。
Git PushしたらLogon failed, use ctrl+c to cancel basic credential prompt.が出た時の対処法

久々にWindows PCにてGitにソースコードをPushしようとした際に発生。

GitHubアカウントのログインダイアログがポップアップしたので、
ユーザ名とパスワードを入力するが認証できず。

ブラウザで同じユーザ名とパスワードでログインできているので、
そちらは問題なし。

Gitを更新

```
$ git update-git-for-windows

Git for Windows 2.21.0.windows.1 (64bit)
Update 2.35.1.windows.2 is available
Download and install Git for Windows 2.35.1(2) [N/y]? y
################################################################ 100.0%
```

完了後、もう一度ログインし直すことで解決しました。

##参考
https://zenn.dev/unsoluble_sugar/articles/bdc12ba1447e1d

https://qiita.com/kt921112/items/985f31391a1099c41205
焼きなまし法(SA)で解くOneMax問題をJavaScriptで書いてみた

※個人の練習用です。アルゴリズムの正確性は担保しません。

## 焼きなまし法(SA)とは

焼きなまし法（Simulated Annealing, SA）とは、大域的最適化問題への汎用の乱択アルゴリズムである。
詳細は割愛する。

## JSで書いてみた

SAは探索アルゴリズムの中でも結構シンプルなものなので、
JSでも簡単にかける。

``` JavaScript
let width = 100;
let num = 2; 
let maxCount = 100;
let length = Math.pow(num,width);
let start = setValue(num, width);

function getRandom(max){
    return Math.floor(Math.random()*Math.floor(max));
}

function setValue(num, width){
    let result = []
    for(i=0; i< width; i++){
        result.push(getRandom(num));
    };
    return result;
}

function toggle(num){
    return num == 0 ? 1 : 0;
}

function sum(valueArr){
    return valueArr.reduce(function(sum, val){
            return sum + val;
        }, 0);
}

function e(bestSum, newAnsSum, tem){
    res = newAnsSum - bestSum;
    r = Math.random();
    exp =Math.exp(res/tem);
    return r < exp;
}

function find(start){
    console.log("start on:", start);
    let best = start;
    let newAns = Array.from(start);
    for(i=maxCount; i>0;i--){
        let pos = getRandom(4);
        newAns[pos] = toggle(newAns[pos]);
        if(sum(best) < sum(newAns) || e(sum(best), sum(newAns), i)){
            best = Array.from(newAns);
        }else{
            newAns = Array.from(best);
        }
    }
    return best;
}

console.log("the best answer is:",find(start));
```
[初心者log]Rails API　複数Modelの情報をjson型で返す方法

#本記事の目的
Rails(APIモード) + Reactで開発をしている最中、Post一覧表示にUserのAvatarを付与したいと考え、やり方を調べたのでまとめます。

##失敗例
```posts_controller.rb
class PostController < ApplicationController

def index
   posts = Post.all
   hash = {}
   posts.each{|post|
     hash[post.id] = {post: post, user: post.user}
   }
   render json: { status: 200, posts: hash }
 end

#以下略
```

これだと返ってくる値がハッシュになり、React側で

```jsx
posts.length > ? (
  //処理1
  ) : (
  //処理2
  )
```
といった記述ができなくなります。

###成功例

```posts_controller.rb
class PostController < ApplicationController

def index
    posts = Post.all
    array = []
    posts.each{|post|
      array.push({post: post, user: post.user})
    }
    render json: { status: 200, posts: array }
  end

```
配列型にしてそこにpushすればReact側での処理もスムーズに進みました。

N+1問題についてはまた次回まとめてみようと思います。
import パッケージの解決

インストールしたパッケージが VS Code エディターで、importエラーになってしまう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399204/84c27ee2-eb1f-7ccb-eba0-dac78ccf83af.png)

```
Import "hello" could not be resolved Pylance reportMissingImports
```

## Pylanceの設定にパッケージフォルダーを追加する

[ファイル]→[ユーザー設定]→[設定 (Ctrl+,)]を開き
`python.analysis.extraPaths`にパッケージのフォルダーパスを追加する

```json
{
    "python.analysis.extraPaths": [
        "C:\\Python310\\lib\\site-packages\\"
    ]
}
```

参考：https://github.com/microsoft/pylance-release/blob/main/README.md#settings-and-customization

### パッケージフォルダーを確認する

1. ターミナルで、Pythonを実行

```
python
```

1. パッケージをインポート

```
>>> import hello
```

1. ファイルを確認

```
>>> print(hello.__file__)
```

結果

```
C:\Python310\lib\site-packages\hello\__init__.py
```
Lambda で外部ライブラリ（psycopg2）を使用する

# はじめに
Lambdaでpsycopg2を使うためには、デプロイパッケージを作成しアップロードする必要があります。
（複数のLambda関数で使用する場合など、Lambdaレイヤーを作成し共通部品化する方法もあります。）

### 参考

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-package.html


# デプロイパッケージの作成

```bash
$ mkdir -p hoge-function/package
$ touch hoge-function/lambda_function.py
$ pip install psycopg2-binary -t ./hoge-function/package/

**フォルダ構成 (zip前）
hoge-function
| lambda_function.py
| package
  | psycopg2-binary
  | psycopg2-binary-info

$ cd ./hoge-function/package/

# psycopg2-binaryをzipファイルに含める
$ zip -r ../my-deployment-package.zip .

$ cd ..

# lambda_function.pyをzipファイルに含める
$ zip -r ../my-deployment-package.zip lambda_function.py

**フォルダ構成(zip後）
hoge-function
| my-deployment-package.zip
| lambda_function.py
| package
  | psycopg2-binary
  | psycopg2-binary-info

```

必要最小限のものだけをインストールしたいのでpsycopg2-binary をインストールしています。
（外部ライブラリやコンパイラが必要なくスタンドアローンなパッケージとして作成されているもの）

#Lambdaにアップロード

```bash
$ aws s3 cp hoge-function/my-deployment-package.zip S3://{Bucket-name}/{Path}/~
```

今回は、S3にアップロードし、LambdaコンソールからS3バケットを指定し、デプロイパッケージをアップロードします。
以下の手順でアップロードすれば完了です。


![スクリーンショット 2022-02-05 10.23.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2097948/8d313bd6-bdbc-4f12-acfe-5690191f55cc.png)
![スクリーンショット 2022-02-05 10.22.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2097948/aacfe9dd-7326-e268-886f-f6ef950b3a3a.png)

#トラブルシューティング
```bash
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'psycopg2._psycopg'
```
関数実行時に上記エラーが出ました。

私の場合は、ライブラリをインストールした環境のpythonバージョンとLambdaのランタイムバージョンを合わせることで解決しました。

![スクリーンショット 2022-02-05 10.28.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2097948/89826310-61c2-4fe1-876c-1b253c64b4d6.png)
GithubのRepository作成の備忘録

## Githubとは

githubはコードの変更履歴を管理しながら開発を行うためのコラボレーションツールです。githubを使うことでチームの開発を効率よく進めることができます。こちらの記事ではGithubでのレポジトリ作成方法についてご紹介します。

## 手順

こちらのNewをクリックします。

![Screen Shot 2022-02-05 at 10.17.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258956/c74b0a6c-ebb6-e56c-718d-061c16ff3ecf.png)

このように情報を埋めていきます。

![Screen Shot 2022-02-05 at 10.19.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258956/91aeea33-b8ea-48ad-a0f9-e1a034213a38.png)

Repositoryの名称と、説明、公開するしないを選び、必要に応じてReadmeと.gitignoreとライセンスを作成するか選びます。

僕は基本的にはプロジェクトはパブリックで作成することが多いので、パブリックにし、READMEは作成、.gitignoreはNode、ライセンスはMITで作成することが多いです。

そしてCreate Repositoryを押すとRepositoryの作成は完了です。

![Screen Shot 2022-02-05 at 10.25.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258956/48f9c1ec-0f92-11c0-2cc6-29d81d6aea77.png)

このCodeから、この部分をコピーしてgit cloneして開発を進めていきましょう！
私がマネージャーの立場で工夫したことのまとめ

# はじめに

私がマネージャーの立場で工夫したことをQiitaでいくつか記事にしてきた。
その工夫のまとめ記事を作っておく。


# マネージャーの立場で工夫したこと
## チームビルディング

### 圧をかけない
https://qiita.com/kazuo_reve/items/50fb4bf485e98b9355ed

## ふりかえり

### メンバから”継続して欲しいこと”を聞く
https://qiita.com/kazuo_reve/items/68b01e25f1bfc7762fcd

## 計画立案

### 見積り
https://qiita.com/kazuo_reve/items/4d74723faaad1c2875a0

### 段階的詳細化とPFD
https://qiita.com/kazuo_reve/items/31b037b5f3b090d0532c

## 進捗管理
### アンブロック
https://qiita.com/kazuo_reve/items/e87ad6afde1e1371d393

## リスク管理
### オニオンモデル風の図&プロセス図&未来予想図の活用
https://qiita.com/kazuo_reve/items/8664746290f092264d35

### 予兆を掴む
https://qiita.com/kazuo_reve/items/d7d2cd4ecce2e383bb3f

## 知識管理
### ナレッジスタッフを中心としたニーズ駆動知識共有アプローチ
https://qiita.com/kazuo_reve/items/fb6fe3827d8e124705b7

## 検証
### チェックリスト活用法
https://qiita.com/kazuo_reve/items/c467504084ba3441101b

### レビュー技法（リーディング技法）
https://qiita.com/kazuo_reve/items/cd1db594edaf0d296617

## エンジニアリング
### USDMの活用
https://qiita.com/kazuo_reve/items/989274a57fcb9b54ab6f

### 形態素解析を活用した推敲
https://qiita.com/kazuo_reve/items/6b7205ffb4ce6ad230ba

### コードメトリクスの活用
https://qiita.com/kazuo_reve/items/b7ad410a212de2e66f26

### 最悪実行時間計測
https://qiita.com/kazuo_reve/items/50176a1f192fb77aa576

### トラブルシューティング（デバッグ）
https://qiita.com/kazuo_reve/items/d8fff990b8f2e691ad74

# 関連記事
https://qiita.com/kazuo_reve/items/6976029e72763ea73245

https://qiita.com/kazuo_reve/items/847a7b0a7988078c6cce
Flutter doctorコマンドで「Android license status unknown.」が出る場合の解決法


#はじめに

```console
$ flutter doctor                                      
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.0.3, on macOS 11.1 20C69 darwin-x64, locale ja-JP)
[!] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.2)
[✓] VS Code (version 1.64.0)
[✓] Connected device (1 available)

! Doctor found issues in 1 category.
```

`flutter doctor`が失敗します・・・・:sob:

#Android Studioを起動

`Preferences＞Appearance & Behavior＞System Settings＞Android SDK＞SDK Tools`へ移動
（長い・・）

![スクリーンショット 2022-02-04 21.55.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/5d669369-0bc4-956f-c388-59dce7fd648e.png)

![スクリーンショット 2022-02-04 21.50.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/d23eff9a-0eec-2b7b-9a75-b43cc4dad863.png)

**Android SDK Command-line Tools**にチェックをつけて、Applyを選択

インストール後、再度`flutter doctor`を実行すると問題がなくなっています！

```console
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.0.3, on macOS 11.1 20C69 darwin-x64, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.2)
[✓] VS Code (version 1.64.0)
[✓] Connected device (1 available)

• No issues found!
```
vscodeでファイルが開けなくなったんだが??

#　経緯
vscodeでいつも通りディレクトリを指定して、ファイルを開こうとしてダブルクリックをしたが、右にファイルが表示されない→書き込めない!!
![スクリーンショット 2022-02-04 9.15.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487834/6752aca6-b5a5-af5e-ad37-ceb499704b62.png)
なんやらエラーも出できたし、なんなんだいきなり、、、
![スクリーンショット 2022-02-04 9.19.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487834/538bd175-8408-d9c0-78b4-dca21e81d5f3.png)

調べるにもキーワードが難しいし、記事がなかなか出てこない、、、

# 結論
```~/Library/Application Support/Code/User/settings.json```を書き換える


```diff

"workbench.editorAssociations": [
    {
-       "*.ipynb": "jupyter-notebook"
+       "viewType": "jupyter-notebook",
+       "filenamePattern": "*.ipynb"
    }
],
```
# 参考

https://stackoverflow.com/questions/67587398/vs-code-error-this-configurationservice-getvalue-filter-is-not-a-f
【Project Euler】Problem 75: 唯一の整数直角三角形

* 本記事は[ProjectEuler](https://projecteuler.net/about)の「100番以下の問題の説明は記載可能」という規定に基づいて回答のヒントが書かれていますので、自分である程度考えてみてから読まれることをお勧めします。

### 問題 75. 唯一の整数直角三角形

原文 [Problem 75: Singular integer right triangles](https://projecteuler.net/problem=75)

**問題の要約：$L \le 15 \times 10^5$の針金を折って各辺が整数の直角三角形を作った時、一通りしかできないような$L$の数を求めよ**

例えば120は以下のように3通りの直角三角形が作れます。

```math 
120: (30,40,50), (20,48,52), (24,45,51)
```

まず基本ピタゴラス数の生成ですが「[Problem 9: 特別なピタゴラス数](https://qiita.com/masa0599/items/36a0b8a7d82e689de6d8)」で作った**pyth**を使います。

後は$15 \times 10^5$の配列を作って基本ピタゴラス数の倍数の数をカウントアップしていき、最後にカウントが1だったものの数を数えます。

また「[Problem 39: 整数の直角三角形](https://qiita.com/masa0599/items/ff31aea2a93ff14a529a)」でも述べた通り**pyth**は必ずしも$L$の小さい順には生成しないので**nMax*2**まで生成する必要があります。

```python
nMax = 15*10**5
numPytha = [0]*(nMax+1)  # count up perimeter of right triangles 
for abc in pyth():
  L = sum(abc)
  if L > nMax*2: break  # need to check twice of max (re: Problem 39)
  for m in itertools.count(1):
    if  L*m > nMax: break
    numPytha[L*m] += 1

print(f"Answer: {numPytha.count(1)}")
```

（開発環境：Google Colab）
【Project Euler】Problem 74: 各桁の階乗の和のチェーン

* 本記事は[ProjectEuler](https://projecteuler.net/about)の「100番以下の問題の説明は記載可能」という規定に基づいて回答のヒントが書かれていますので、自分である程度考えてみてから読まれることをお勧めします。

### 問題 74. 各桁の階乗の和のチェーン

原文 [Problem 74: Digit factorial chains](https://projecteuler.net/problem=74)

**問題の要約：$n<10^6$の自然数の階乗数字和をループになるまで次々に求めた長さが60になるものの数を求めよ**

各桁の階乗の和のチェーンがループになるのは以下のような限られたのケース。

```math 
145 → 145 \  (1\ cycle) \\
169 → 363601 → 1454 → 169 \ (3\  cycle) \\
871 → 45361 → 871 \ (2\ cycle)\\
872 → 45362 → 872 \ (2\ cycle)
```

どの数から始めても最終的にこれらのループのどれかになるということです。

```math 
69 → 363600 → 1454 → 169 → 363601 (→ 1454) \\
78 → 45360 → 871 → 45361 (→ 871) \\
540 → 145 (→ 145)
```

$n<10^6$の自然数がループになるまでの長さは最長60とのことですが、そうなる数の個数を求めよということですね。階乗の和のチェーンを配列**DFchain**に入れていって同じものが出るまで続けます。この**DFchain**が60となるものを数えます。

```python
import math
from functools import lru_cache

@lru_cache(maxsize=None)
def digFact(n):
  return sum(list(map(math.factorial,list(map(int,list(str(n)))))))

def DFchainLoop(n):
  DFchain = [n]
  n1 = digFact(n)
  while(n1 not in DFchain):
    DFchain.append(n1)
    n1 = digFact(n1)
  return len(DFchain)

Nmax = 10**6
print([DFchainLoop(n)==60 for n in range(1,Nmax+1)].count(True))
```

（開発環境：Google Colab）
便利な開発ツールを探しまくる旅人になることにしました！！

最近めっちゃ思うのがもちろん技術力は大事だけど、ツールを知っていること、使いこなせる
ことがめっちゃ大事だと思いました。

- tableタグを勝手に作ってくれるツール(https://tabletag.net/ja/)<br>
この四角の図みたいなやつをいじれば勝手にHTMLをつくってくれる<br>
CSSも勝手につくってくれる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/756524/a21074fe-24e5-9bdb-a396-716705881b06.png)

- ミリ秒計算ツール(https://www.bad-company.jp/timestamp)<br>
内容はタイトルそのまま
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/756524/8d168691-9eba-2267-6bd3-d985893aef23.png)

- オールマイティーツール(https://rakko.tools/)
ラッコーズ！結構有名な気がする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/756524/fb798c30-d351-1870-083e-46270f8ccecd.png)

- WEBデザイン手帳(https://coco-factory.jp/ugokuweb/)
CSSが書いてあるからそれをそのままコピペで使える
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/756524/232d16c9-2529-9217-c83f-bd70335ea55b.png)

- 気になるシステムの技術が簡単に調べれる(https://www.wappalyzer.com/)
gitとvscodeと仲良くなる

# はじめに

業務で本格的に使い始めたのでメモ書き。

# git

まだまだよく分からんことがたくさんある。

## pull と fetch の違い

pull = fetch + merge
merge の\<commit\>に origin/main などが対応するのが解せない。

```shell
git pull origin main
git pull [<options>] [<repository> [<refspec>…]]

git fetch origin main
git merge origin/main
git fetch [<options>] [<repository> [<refspec>...]]
git merge [<options>] [<commit>...]
```

## git branch -vv

リモート追跡ブランチとのひも付きを確認できる。
git branch -a も結構使う。

## git log --oneline

そこそこ見やすい。
後述する vscode の拡張機能で見たほうが好み。

## git add . と git add -A の違い
基本的に、違いを意識する必要はなさそう。

https://stackoverflow.com/questions/572549/difference-between-git-add-a-and-git-add/26039014#26039014

## git 引数を省略したとき

雰囲気は理解。
push なども確認したい。

https://qiita.com/matsumon-development/items/b37b1ce988fb810eb8ac

## git stash

退避する。

```
git stash save 'message'
```

退避したリスト。

```
git stash list
```

もとに戻す。

```
git stash apply stash@{0}
```

その他。

- git stash drop 　 → 　削除
- git diff stash@{0}　 → 　差分
- git stash pop 　 → 　 apply 　+　 drop

## 使ってみたいもの

- rebase
- reset
- squash
- cherry-pick

# vscode

覚えたいもの、使っていきたいやつ。

## git 関連

### git history

git log をグラフィックに確認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273913/dcc949b7-1a72-f21c-b6b9-7a78385a13c6.png)

### git graph

上に同じく。機能の差異は不明。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273913/b2bb7e13-13fa-1078-5234-5eb11668bb82.png)

### git のエディタを vscode にする

1. コマンドパレット → Shell Command: Install 'Code' command in path
2. git config --global core.editor "code --wait"

command + shift + p → コマンドパレット

### コンフリクトを修正

赤枠内からよしなに選んで対応する。そのあと、コミットする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273913/ffba1912-f76b-45ce-38fc-8397c7a338d1.png)

## ワークスペース

ルートの異なるフォルダを複数開くことができる機能。

https://code.visualstudio.com/docs/editor/workspaces

## 各表示エリアの移動　ショートカット

### エディタグループの移動

command + 1~8： 数字順に移動

### ターミナルエリアに移動（表示かも）

command + j
厳密には、control + `

### エクスプローラーに移動（表示）

command + 0
厳密には、command + shift + e
表示切り替えは、command + b

## スニペット

左下の歯車 → スニペット → よしなにセット。
構文を覚えるのがめんどくさい。。

## コードの折りたたみ/展開

command + k, command + 0 : すべて折りたたみ
command + k, command + j : すべて展開

## マルチカーソル

command + d : 連続で押下するごとに、選択中の単語にカーソルを追加
command + shift + l : すべての単語に一括でカーソル追加

## TabNine

AI コード補完の機能。（たぶん。。。
ちょっと使ってみたが、良し悪しがある。

良し： 初めてのプロジェクトや、コーディング自体に慣れてない場合、サジェストが助かる。
悪し： 不要な箇所でサジェストされて、Enter で改行しようとしたらサジェストが適応される。都度、Esc でキャンセルするのが面倒。あと、候補が出るのはよいがその選択肢から選ぶ間にタイピングしたほうが早い。

# 終わりに

この記事を書いているときに、vscode の'zen'という機能を見つけて使ってみた。画面の情報量が減るので結構好きだった。今後使っていくかどうかは様子見。（そもそも機能の存在を忘れそう）
'Bookmarks'拡張機能を使いこなせると良きだと感じた。
vscode は何か調べたかったら、コマンドパレットに打ち込んでみるか、設定のフリー検索を使うと大体解決すると思った。

git と仲良くなるのはまだ長い道のりだと感じた。コミットメッセージの整理あたりは使えるようになりたい。

次は mac の機能やサードパーティーアプリについて記事にして自分が日頃使っているものを整理したい。
［AWS］ネットワーク問題

# 問題

問1. プライベートサブネット下に配置されているEC2インスタンスがセッションマネージャーで接続する方法を以下から全て選択せよ。
a.エンドポイントを設置する
b.NATゲートウェイを配置する
c.インターネットゲートウェイを配置する
d.ルートテーブルをVPC内に向ける

問2. インスタンス1台に対しELBを配置するメリットを以下から全て選択せよ。
a.死活監視が可能
b.料金が安くなる
c.https化が可能
d.キャッシュし、レスポンスタイムが短くなる

問3. ターゲットグループに設置したインスタンスがunhealthyとなっている。原因は〇〇を配置していなかったから。空白を埋めよ。

問4. ALBとEC2インスタンスを利用し、サービスを展開している。メンテナンス時にメンテナンスページに切り替わるようにしたい。メンテナンスページをALB上で作成するにはどうすればいいか。

問5. プライベートサブネットとパブリックサブネットの違いは何か。





# 解答
問1. a.b
問2. a.c
問3. index.html(web用のページ)
問4. リスナールールの編集ページで容易に作成できる
問5. サブネットに関連付けているルートテーブルがインターネットゲートウェイに向いているとパブリックサブネットと呼ばれる。
WSL2をブリッジ接続にして解決できることと出来なくなること

最新のWSL Previewを使用すると簡単にWindowsホストにブリッジ接続できます。詳しくは[WSL2ネットワークを新機能でブリッジモードに変更する(IPv6も利用可)](https://qiita.com/shigeokamoto/items/d45d0a86aed7338a9dc9)を参照してください。

ブリッジすることで、いくつかの問題を解決できると思いますが、逆にできなくなることもあります。

今回はそのあたりをまとめておきます。

## ブリッジ接続で解決すること

### IPv6接続が可能になる

[WSL2をIPv6ネットワークに接続する](https://qiita.com/shigeokamoto/items/ba89516d1448b13f7251)に書いたように現行のWSL2(Windows10を含む)でも、DHCPv6-PDでのプレフィクス移譲を受けてIPv6接続できます。ただし、これは接続ネットワークが複数プレフィクスを持っていて下流に委譲できるような、一例としてはNTTのフレッツ光ネクストのような環境でないと利用できません。対して、ブリッジ接続が可能になると、WindowsホストがIPv6通信できる環境であればWSLインスタンスも同様にIPv6接続が可能になります。しかも非常にお手軽です。

### NATの問題が解決する

筆者は経験していないのではっきりとは申し上げられませんが、一部環境ではMTUを調整しないと通信できないという現象が発生しているようです。WSL Preview 0.47.1にてMTUの自動調整機能が入っているので、それを使えば解決できるのかもしれませんが、ブリッジ接続するとWindowsホストの内側のネットワークで生じていたNATやMTU等の問題には影響を受けなくなります。

### DNSの問題が解決する

Hyper-V？ICS？HCS？で提供されるDNSサーバはEDNS0やTCPでの参照に対応していません。このため、レスポンスが大きくなるようなDNS参照を行うと結果を受け取れない問題があります。一般的な解決方法は、パブリックDNSやWindowsホストが参照するDNSサーバを/etc/resolv.confに追記することですが、ブリッジすると問題のあったWindows内部のDNSサーバは参照しません。よってこの問題も解決します。

### IPアドレスがころころ変わらない

WSL2の通常のネットワークはHyper-V同様に起動するたびにネットワークがアサインされ、その中で適当なIPアドレスが割り振られます。つまり、起動するたびにIPアドレスが変わってしまいます。ブリッジ接続の場合、IPアドレスはWindowsホストと同じDHCPサーバから受け取ることになりますが、MACアドレスを指定できるので毎回同じIPアドレスを受け取ることが可能です。DHCPサーバで永続的に固定してしまうことも可能でしょう。

### ポートフォワードが必要ない

WSLインスタンスでsshd等のネットワークサービスを起動した場合、PCの外部からは直接は見えない場所にあるので、他のノードからアクセスする場合にはWindowsホストにてパケットを転送しないといけません。
ブリッジしていると他のノードからもWindowsからは独立したノードとしてアクセスが可能になります。

## 逆にできなくなることや変わってしまうこともあります

### WindowsのVPNが使えない

まずWindowsで接続したVPNが使えません。ブリッジするとWSLから外部への通信はWindowsホストを経由しません。経由しないということはWindowsホストが接続しているVPNもWSLには影響を及ぼしません。WSLインスタンス(Linux)でVPN接続を行うかブリッジを解除して通常のWinNAT経由での接続にもどせばVPNの利用は可能です。

### WSLからWindowsホストのIPアドレスがわからない

WSL2では通常/etc/resolv.confのネームサーバのアドレス、あるいはデフォルトゲートウェイのアドレスがWindowsホストを指示しています。しかし、ブリッジ接続してしまうと、/etc/resolv.confはDHCPサーバが通知してきたDNSサーバ、デフォルトゲートウェイは上流のルータとなりWindowsホストがわからなくなります。ただし、Windowsコマンドが実行可能なため、ipconfig.exeやPowerShellのコマンドレットを使えばWindowsホストのIPアドレスを知ることは可能です。

### ホストのネットワークアダプタが変わってしまう

クライアントPCの場合ネットワークインタフェースは通常一つしかないので、外部仮想スイッチを作成するとWindowsが使用するネットワークアダプタも作成した仮想スイッチに切り替わります。この場合、多少なりともWindowsホストのネットワークパフォーマンスに影響があるようです。実際には差が感じられなかったので、最近のWindows？ハードウェア？であれば影響はあまりないのかもしれません。気になるようならインタフェースを拡張すればWindows用と分けられます。

### 内部仮想スイッチと通信できない

WSL2の標準ネットワークは *.mshome.net でHyper-Vインスタンスと通信できますが、外部仮想スイッチに接続が切り替わるとDefault Switchをはじめ内部仮想スイッチとの通信ができなくなります。
.wslconfigの設定としては以下のようになっているので、複数指定できるようになれば解決するのですが、同じ項目を複数設定しても最後のものだけがが有効になります。
複数の仮想スイッチに接続出来ればVPNの問題も解決できそう？

```
networkingMode=bridged   ... DHCPからIPアドレス、DNSサーバ等の情報を受け取る
networkingMode=default   ... HCSからIPアドレス、DNSサーバ等の情報を受け取る

vmSwitch=<スイッチ名>     ... 任意のスイッチを指定出来るDefault Switch, WSLも可
```
Databricksジョブのクラスター再利用による時間とコストの削減

[How to Save Time and Costs With Cluster Reuse in Databricks Jobs \- The Databricks Blog](https://databricks.com/blog/2022/02/04/saving-time-and-costs-with-cluster-reuse-in-databricks-jobs.html)の翻訳です。


:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

[ジョブオーケストレーションのローンチ](https://qiita.com/taka_yayoi/items/bc77fbcf1dc30d8ff742)によって、Databricksにおけるパイプラインのオーケストレーションは劇的に容易になりました。複数のタスクの異なるETL、MLパイプラインに分割できる能力は、作成、管理の観点で数多くのメリットを提供します。モジュール化のアプローチによって、全体的な処理時間を削減するために並列実行を可能としつつも、チームは独立してそれぞれの責任範囲を定義し、作業することが可能となります。この能力はあらゆるクラウドにおける洗練されたデータ、機械学習ワークフローをお客様が作成、実行、監視する方法を変化させる大きな一歩です。今回、我々はジョブの実行における複数のタスクにおいて同じクラスターを再利用できる機能の提供によって、このオーケストレーション機能を強化できることを嬉しく思います。これによってお客様はさらに時間とコストを削減することが可能となります。

これまでは、異なるタイプのワークロードに対応するために、それぞれのタスクにはそれぞれのクラスターが必要でした。この柔軟性によってきめ細かい設定が可能でしたが、クラスターの起動、並列タスクにおける低い使用率によって時間とコストのオーバーヘッドをもたらしていました。

この柔軟性を維持しつつも、リソース使用率を改善するために、クラスター再利用の発表ができることを嬉しく思います。複数のタスクでジョブクラスターを共有することで、オーバーヘッドを削減し、並列タスクにおけるクラスターの利用率を改善することで、お客様はジョブに要する時間とコストを削減することが可能となります。

タスクを定義する際、お客様には新規クラスターを設定するか既存クラスターを選択することができます。クラスターの再利用の実現によって、既存クラスターのリストにジョブにおける他のタスクで定義されたクラスターが表示されるようになります。複数のタスクがジョブクラスターを共有する場合、最初の適切なタスクが起動する際にクラスターが初期化されます。このクラスターを使用する最後のクラスターが処理を終了するまで、このクラスターは維持されます。このように、クラスターが初期化されたあとは追加の起動時間は発生せず、他のワークロードから分離されたジョブクラスターを使用しつつも時間とコストを削減することができます。

新たな機能に皆様も興奮されているかと思います。クラスター再利用の[詳細](https://docs.databricks.com/jobs.html#use-shared-job-clusters)をチェックし、起動時間とコストを節約するために共有ジョブクラスターを使ってみませんか。フィードバックがございましたら、ぜひ[コンタクト](https://ideas.databricks.com/)いただければと思います。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
ST-LINK SWDを試す（書き込み編）

# 安価なST-LINK SWDアダプタを試す（書き込み編）
正式名称よくわからずだが、Amazonで見つけた安価なSWDアダプタ（USBタイプ、540円）を試してみた。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/04d704a4-16a7-51af-a252-498ca2b089bf.png", width=85%>

現在、購入したものは売られておらず、類似のものとして、[これ](https://www.amazon.co.jp/RUIZHI-ST-Link-プログラミングユニットMini-STM8-STM32エミュレータダウンローダーM89/dp/B08ZYCRN67/ref=sr_1_1_sspa?crid=2B0Y3WVICZ7PF&dchild=1&keywords=st-link&qid=1630801284&sr=8-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEzSUJJOUtUNTJPQlFHJmVuY3J5cHRlZElkPUEwNjQzODgyMVVVWDkyVTNDUDMzTyZlbmNyeXB0ZWRBZElkPUEyQThGRzROM0tQVkRaJndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==)など多数見つかる。

## STM32ボードへの書き込み
ここでは、PCからSTM32ボードへの書き込みを確認する。

### 配線
SWDのピン情報（上写真）、[STM32データシート](https://www.st.com/resource/en/user_manual/um1724-stm32-nucleo64-boards-mb1136-stmicroelectronics.pdf)と所持するSTM32F303REボードから、アサインメントは下記となる。STM32ボードには2通りの配線が存在する。

|SWDアダプタ|ケース1（STM32ボードCN4）|ケース2（STM32ボードCN7）|
|---|---|---|
|Pin2: SWCLK|Pin2: SWCLK|Pin15: SWCLK|
|Pin4: SWDIO|Pin4: SWDIO|Pin13: SWDIO|
|Pin5: GND|Pin3: GND|Pin19: GND|

なお、CN2のジャンパーピンはつけたままであり、これは「ST-LINK/V2-1 functions enabled for on-board programming (default)」を意図する。

#### ケース1の配線状況
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/4023ad1e-f1a7-47b6-ee57-a7c93a5e446c.png", width=85%>

ここでは、STM32を9V電池駆動としている。これについては、[こちらの記事](https://qiita.com/infinite1oop/items/a72f67411aab75df44b0)を参照。

#### ケース2の配線状況
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/4ae88afb-30d8-3ea3-7250-33333a404998.png", width=90%>

#### PC側ドライバ
[STMサイト](https://www.st.com/ja/development-tools/stsw-link009.html)にある。いつからか（？）、ダウンロードにアカウントが必要となった気がする。

![Device Manager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e8293d73-f173-3a96-a1c4-684e9d1b1f47.png)

Windowsでは、認識すると上記のようになる。

#### ST-Link Utilityでの書き込み
SWDアダプタを挿すと、ST-LinkのSettingメニューで、SWDアダプタが見つかる（"557F"で始まるもの）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/07ca6d0f-2250-a266-34d8-6ca35c56340e.png)

STM32CubeIDEなどでBuildしたバイナリファイルをオープンし、書き込みを行う（Program&Verify）。
![Program&Verify1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/bb0cb166-5d86-393d-4507-41dafaf8592e.png)

ログは下記のとおり。成功。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/69f47fa3-24a9-cef8-ca00-91ad1489964b.png", width=100%>

#### STM32CubeIDEでの書き込み
STM32CubeIDEのRunメニューの「Run Configurations」を選択する。
![STM32CubeIDE Menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e870c512-7ccd-91b3-470f-adb217fc30c8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/52482c56-c58a-2364-4977-3e02df19ef9f.png)

インターフェースの「特定のST-Linkシリアル番号を使用する」に、接続したSWDアダプタが見つかる。

Runメニューの「Run」で書き込みおよび実行が行われる。

成功。

/EOF
plunkerでMandelbrot その3

#概要

plunkerでMandelbrotやってみた。

#写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/c890372e-021b-9326-9e05-09f3adfbb0f8.png)


#サンプルコード

```
var ctx = document.getElementById('canvas').getContext('2d');

var cx, 
    cy;

function mandelbrot(x1, y1, x2, y2) {
    var i,
        j;
    var iter;
    var color;
    var sy = y2 - y1;
    var sx = x2 - x1;
    for (i = 0; i < 500; i++) 
    {
        for (j = 0; j < 500; j++) 
        {
            var cy = j * sy / 500 + y1;
            var cx = i * sx / 500 + x1;
            var x = 0.0, 
                y = 0.0, 
                xx = 0.0, 
                yy = 0.0;
            for (iter = 0; iter <= 256 && (xx + yy) < 4.0; iter++) 
            {
                xx = x * x;
                yy = y * y;
                y = 2.0 * x * y + cy;
                x = xx - yy + cx;
            }
            ctx.fillStyle = 'rgb(' + ((iter << 7 & 0xF8) << 8) +','+ ((iter << 4 & 0xFC) << 3) +','+ (iter >> 3) + ')';
            ctx.fillRect(i, j, 1, 1);
        }
    }
}
cx = -0.086;
cy = 0.05;
mandelbrot(-2.0 + cx, -1.5 + cy, 2.0 + cx, 1.5 + cy);





```


#成果物

https://embed.plnkr.co/plunk/8Sg0yHIfGDUhZYnA

以上。
plunkerでMandelbrot その2

#概要

plunkerでMandelbrotやってみた。

#写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/aeefb07c-9791-76ce-c80b-b744141deb05.png)


#サンプルコード

```
var ctx = document.getElementById('canvas').getContext('2d');
var KS = 500;
var RST = -3.1;
var RED = 0.9;
var IST = -1.85;
var IED = 1.85;
var DR = (RED - RST) / KS;
var DI = (IED - IST) / KS;

function map(n, v, omin, omax) {
    return n / (omax - omin) * v + v / 2;
};

for (CR = RST; CR <= RED; CR = CR + DR)
{
    for (CI = IST; CI <= IED; CI = CI + DI)
    {
        ZR = 0;
        ZI = 0;
        for (K = 1; K <= 8; K++)
        { 
            if (K == 1) ctx.fillStyle = 'rgb(255, 255, 25)';
            if (K == 2) ctx.fillStyle = 'rgb(255, 25, 255)';
            if (K == 3) ctx.fillStyle = 'rgb(25, 255, 255)';
            if (K == 4) ctx.fillStyle = 'rgb(25, 25, 255)';
            if (K == 5) ctx.fillStyle = 'rgb(25, 255, 25)';
            if (K == 6) ctx.fillStyle = 'rgb(55, 55, 55)';
            if (K == 7) ctx.fillStyle = 'rgb(55, 55, 255)';
            if (K == 8) ctx.fillStyle = 'rgb(255, 55, 255)';
            R = ZR * ZR - ZI * ZI + CR;
            I = 2 * ZR * ZI + CI;
            if ((R * R + I * I) > 4)
            { 
                var x = map(CR, KS, RST, RED);
                var y = map(CI, KS, IST, IED);
                ctx.fillRect(x, y, 1, 1);
                K = 9;
            }
            ZR = R;
            ZI = I;
        }
    }
}






```


#成果物

https://embed.plnkr.co/plunk/9FuEFkGYLZaTBOaR

以上。
plunkerでMandelbrot

#概要

plunkerでMandelbrotやってみた。

#写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/af20bee7-bd28-9d61-6c7f-5401778263d2.png)


#サンプルコード

```
let pixelSize = 1;
let width = 500;
let height = 500;
let maxIterations = 100;
let mandelMin = -2.5;
let mandelMax = 2.5;
let infinity = 2;
let brightness;

function draw() {
    let ctx = document.getElementById('canvas').getContext('2d');
    for (var y = 0; y < height; y++) 
    {
        for (var x = 0; x < width; x++) 
        {
            const map = function(num, in_min, in_max, out_min, out_max) {
                return (num - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
            };
            let a = map(y, 0, height, mandelMin, mandelMax);
            let b = map(x, 0, width, mandelMin, mandelMax);
            const initialA = a;
            const initialB = b;
            let iterationCount = 0;
            while (iterationCount < maxIterations)
            {
                let aa = (a * a) - (b * b);
                let bb = (2 * a * b);
                a = aa + initialA;
                b = bb + initialB;
                let result = Math.abs(a + b);
                if (result >= infinity)
                {
                    brightness = 255;
                    ctx.fillStyle = 'rgb(' + brightness + ', ' + brightness + ', ' + brightness + ')';
                    break;
                }
                else
                {
                    brightness = 0;
                    ctx.fillStyle = 'rgb(' + brightness + ', ' + brightness + ', ' + brightness + ')';
                }
                iterationCount++;
            }
            ctx.fillRect(y * pixelSize, x * pixelSize, pixelSize, pixelSize);
        }
        ctx.fillRect(y * pixelSize, x * pixelSize, pixelSize, pixelSize);
    }
}
draw();




```


#成果物

https://embed.plnkr.co/plunk/4bkLDK6nSNBMvvFv

以上。
Google Data Portalと自治体のオープンデータであそぶ

## Google Data Portal とは
[Google Data Portal Overview](https://datastudio.google.com/overview)
> Your data is beautiful. Use it.

ということで各種データの分析加工ができるツールです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/5c102674-a5e3-6ed2-324d-e7d742053317.png)

## オープンデータ とは

[オープンデータ | 政府CIOポータル](https://cio.go.jp/policy-opendata)

https://www.open-governmentdata.org/about/

>「機械判読に適したデータ形式で、二次利用が可能な利用ルールで公開されたデータ」であり「人手を多くかけずにデータの二次利用を可能とするもの」です。つまり，誰でも許可されたルールの範囲内で自由に複製・加工や頒布などができるデータをいいます。もちろん商用としても利用可能です。

ということで両者をお試しがてら遊んでみます。

### 1. データを準備
[赤ちゃん・ふらっと一覧 - データセット - 東京都オープンデータカタログサイト](https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000027) を利用してみます。

### 2. データをGoogle Sheets化
1~3行目は余計なので削除してしまいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/dbda3244-78d1-73da-4e0a-07e40ed3ffcb.png)

### 3. データのレポートへの追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/c1cc783e-2839-45d5-0752-6481aa55f428.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/a223122c-7a39-3f81-14cf-ccedac23a981.png)

### 4. データを並べ替えてみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/0a7b2060-b02d-1251-31ec-d636ed47ccac.png)

### 仕上がり: グラフがなかなかカッコイイ
1クリックでビジュアルの変化を選べてテンションが上がりますね。板橋区高島平は素晴らしい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/17d72c39-e10b-1c42-61cf-2bfac629fa42.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/71257c7f-00d3-fc53-4e15-a1f06c7cd8ba.png)
八王子市、板橋区、江戸川区は赤ちゃんに優しそう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/8ceca27a-593a-18ad-77f7-5305c9bb90aa.png)

あそびはここまで。以上参考になればさいわいです。



## 余談

デジタル庁: [オープンデータ取組済自治体を更新しました ｜デジタル庁](https://www.digital.go.jp/posts/qcm0KZc-)はCIOポータルを参照せよと言うのですが

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/9d996540-2b0d-36f2-113c-157faa3b4daa.png" width=50% />

CIOポータルは更新を停止しますと書かれていた。なんだそれ:sweat_smile: 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/3b36551b-b3fb-3562-2f7d-85b0a0528efc.png" width=50% />

以上です～
2022/2/5主にITとかセキュリティの記事

Cisco製ルータ「RVシリーズ」に複数の脆弱性 - コード実行など深刻な影響
https://www.security-next.com/133895

2021年のマルウェア届出、前年の2倍 - ランサム感染被害は39件
https://www.security-next.com/133877

「Emotet」感染で情報流出、なりすましメールが送信 - ライオン
https://www.security-next.com/133912

「WordPress」関連事故の背景に知識や予算の不足
https://www.security-next.com/133910

情シス担当者、「ゼロトラストを理解している」21％
https://www.security-next.com/133784

サイト改ざんでフィッシングサイト設置される - 地質調査会社
https://www.security-next.com/133747

GitHub傘下のnpm、上位100のパッケージメンテナは2FA必須に(2/3)
https://www.itmedia.co.jp/news/spv/2202/03/news127.html

リーチサイト、摘発逃れ巧妙　海賊版包囲網の模索続く(2/3)
https://www.nikkei.com/article/DGXZQOUE022Q90S2A200C2000000/

北京五輪での諜報警戒　スマホ利用で注意喚起(2/3)
https://www.sankei.com/article/20220203-SICSY4WK6RPWLDQW3ND27ON4FM/?outputType=theme_beijing2022

NEC 秘密計算セキュアなデータ利活用を実現する秘密計算
https://jpn.nec.com/secure-computation/index.html

ポスト量子暗号の実装安全性を向上、東北大学とNTTが考案(2/3)
https://www.technologyreview.jp/s/268045/the-technology-will-improve-the-implementation-security-of-post-quantum-cryptography/

ウイルス感染で情報流出か　県民水泳場、不審メールも(2/1)
https://www.agara.co.jp/sp/article/177668/

在宅勤務用ブロードバンド回線として5Gに高い満足度、IDC Japan調査(2/3)
https://businessnetwork.jp/Detail/tabid/65/artid/8921/Default.aspx

豪のアンドリュー・フォレスト氏、仮想通貨詐欺を巡ってFacebookに刑事訴訟を起こす(2/3)
https://nextmoney.jp/?p=47916

PDFもウェブページもサクッと翻訳可能な「みらい翻訳」公式拡張機能を使ってみた(2/2)
https://gigazine.net/news/20220202-miraitranslate-extension/

Ivanti、2021年のランサムウェアに関するレポートを発表(2/3)
https://securityinsight.jp/news/13-inbrief/4910-220203-2

ESETのセキュリティ製品に特権昇格の脆弱性(2/3)
https://pc.watch.impress.co.jp/docs/news/1385768.html

「情報セキュリティ 10 大脅威 2022」、組織向けはランサムウェアによる被害、個人向けはランサムウェアによる被害が一位に(2/3)
https://blogs.itmedia.co.jp/business20/2022/02/_10_2022.html?ref=rss

サイバー攻撃の実験場、ウクライナで暗躍する親ロシア工作集団「UNC1151」(2/3)
https://www.fsight.jp/articles/-/48598

FBIが2022年北京冬季オリンピックはサイバー攻撃の絶好の標的だと警告、参加選手には使い捨てスマホを使うよう勧告(2/3)
https://gigazine.net/news/20220203-fbi-2022-beijing-winter-olympic-paralympic/

米CISAが公開、悪用された脆弱性をまとめた「カタログ」から見えた対策の実態(2/3)
https://internet.watch.impress.co.jp/docs/column/security/1385527.html

実車を使用したリモートソフトウェアの実証と妥当性確認の実装(2/2)
https://www.infoq.com/jp/news/2022/02/remote-validation-real-vehicle/?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global

【Word Pressでのセキュリティトラブル経験のある経営者・担当者105名へ調査】セキュリティ被害時、「対策していなかった」割合は45.7%(2/3)
https://www.jiji.com/sp/article?k=000000001.000094981&g=prt

前回よりも巧妙になったEmotetの手口とは　デジタルアーツが流行再発を警告(2/3)
https://www.itmedia.co.jp/enterprise/spv/2202/03/news055.html

盗まれた日本のクレジットカード情報のダークウェブにおける平均価格は4905.89円ネット上で売買されているカード情報は400万件、うち7,000件が日本のカード情報(2/3)
https://prtimes.jp/main/html/rd/p/000000014.000072662.html

SaaSの「24時間365日サポート」の“本当の意味”とは？　「SLA」の落とし穴(2/3)
https://techtarget.itmedia.co.jp/tt/spv/2202/03/news06.html

クラウドベースの 5G ネットワークのデプロイと運用(2/3)
https://cloud.google.com/blog/ja/topics/telecommunications/how-csps-can-use-cloud-networks-to-deliver-5g

増えるテレワークからの強制出社、離職や採用難に拍車の恐れ(2/4)
https://xtech.nikkei.com/atcl/nxt/column/18/00989/012400074/

盗聴や不正利用を防ぐ、即効Wi-Fiセキュリティ対策(2/4)
https://xtech.nikkei.com/atcl/nxt/column/18/01882/121700014/

急拡大のNFT市場にひそむセキュリティーリスク、個人でできる対策とは(2/3)
https://xtech.nikkei.com/atcl/nxt/column/18/01661/020200009/
分散分析 一元配置分散分析(対応なし)

# 一元配置分散分析(対応なし)

[『Rによるやさしい統計学』](https://www.amazon.co.jp/R%E3%81%AB%E3%82%88%E3%82%8B%E3%82%84%E3%81%95%E3%81%97%E3%81%84%E7%B5%B1%E8%A8%88%E5%AD%A6-%E5%B1%B1%E7%94%B0-%E5%89%9B%E5%8F%B2/dp/4274067106)7章の範囲の備忘録です. 進捗があり次第更新します.
誤りがあるときは教えていただければ幸いです.

## 1. 帰無仮説と対立仮説

>$H_0$ 複数群の母平均は全て等しい
>$H_1$ 複数群の母平均は全て等しくない

複数群でひとつでも母平均が異なるならば、帰無仮説を棄却し対立仮説を採択する.



## 2. 検定統計量
検定統計量Fの求め方
$$
F = \frac{群間平方和\ /\ 群間自由度}{群内平方和\ /\ 群内自由度}
$$
検定統計量Fは帰無仮説(母平均は全て等しい)のもとで、F分布に従う

![F分布](http://bellcurve.jp/statistics/wp-body/wp-content/uploads/2017/01/795316b92fc766b0181f6fef074f03fa-6.png)  

- 上図は分子・分母の自由度を変化させたF分布(出典:[統計学の時間 F分布](https://bellcurve.jp/statistics/course/9929.html))

```R
curve(df(x, 3, 16), 0, 5)
# df(x, 分子の自由度, 分母の自由度)
```


## 3. 有意水準の決定
今回は有意水準を5%とする. $\alpha=0.05$

 ## 4. 検定統計量Fを求める　
 分散分析を行うための関数
 - oneway.test関数
 - aov関数
 - anova関数
 の3種類がある.


```R
# サンプルデータ
A <- c(15, 9, 18, 14, 18)
B <- c(13, 8, 8, 12, 7)
C <- c(10, 6, 11, 7, 12)
D <- c(10, 7, 3, 5, 7)

統計テスト2 <- c(A, B, C, D)
指導法 <- c(rep("A", 5), rep("B", 5), rep("C", 5), rep("D", 5))
指導法2 <- factor(指導法)
```
 1.oneway.test関数

```R
oneway.test(統計テスト2 ~ 指導法2, var.equal = TRUE)

---------------
	One-way analysis of means

data:  統計テスト2 and 指導法2
F = 7.1111, num df = 3, denom df = 16, p-value = 0.002988
```
 2.aov関数

```R
summary(aov(統計テスト2 ~ 指導法2))

--------------
            Df Sum Sq Mean Sq F value  Pr(>F)   
指導法2      3    184   61.33   7.111 0.00299 **
Residuals   16    138    8.63                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
```
3.anova関数

```R
anova(lm(統計テスト2 ~ 指導法2))

-------------
Analysis of Variance Table

Response: 統計テスト2
          Df Sum Sq Mean Sq F value   Pr(>F)   
指導法2    3    184  61.333  7.1111 0.002988 **
Residuals 16   138   8.625                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
```
各関数で検定統計量Fは7.111である.

## 5. 帰無仮説の棄却か採択
各出力結果のp-valueを確認します. ここではp-valueは0.002988で、0.05より小さいことがわかる.
つまり5%の有意水準では、4つの群(A~D)で有意に平均値に差があることを確認できる.
【Windows】Microsoft公式からOSをISO形式でDLする小技

#はじめに
最近、モジュールを配布するとき一旦ダウンロードインストーラを挟むのが流行っています。
しかし、プロキシ環境で開発している場合は外部接続ができませんので、困ったことになります。

この記事はMicrosoftからインストーラを挟まずにどうにかこうにかOSを直接DLする方法を書いたものです。

#OSをダウンロードする
方法は簡単です。リンクは以下からどうぞ。
[Windows 10 のダウンロード](https://www.microsoft.com/ja-jp/software-download/windows10)

利用ブラウザはGoogle Chromeを想定しています。

1. `F12`でデベロッパーツールを開く
1. [Elements]タブの左、[Toggle device toolbar]を開く（または`Ctrl+Shift+M`）
1. [Dimensions: Responsive ▼]から画面が小さそうなツールを選択して、Webページの更新をかける（`F5`）
1. エディションの選択画面が出るので、「Windows 10」を選択し、「確認」
1. 言語を選択して再度「確認」を押下する
![184.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522187/4338d325-8336-5da3-40a1-736a1461b2c5.png)

#おしまい
本日とれたモジュールは`Win10_21H2_Japanese_x64.iso`でした。
以上
DynamoDBでデータがあるのに取得できない時に疑うこと

## 環境
- Nest.JS
- DynamoDB
- ※環境は関係なさそうなのでバージョン等は割愛

## 事象
DynamoDB上にデータは存在するにも関わらず、データが取れない事象がありました。
「Between句が効いていないのでは」
「timestampがおかしいのでは」
「GSI（グローバルセカンダリインデックス）が効いていないのでは」
などと疑いましたが、どれも正しく設定されていました。

## 結論
DynamoDBは、クエリー・スキャン共に1回のリクエストで最大1MBまでしかレスポンスできない制約がありました。

参考： https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Limits.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360277/da25c83b-110b-8df6-d65a-ad6d82f4cddb.png)

## 解決方法
DynamoDBのレスポンスにある「LastEvaluatedKey」を使用します。
「LastEvaluatedKey」は、まだ取得できないデータがある場合にオブジェクトを返してきます。
そのオブジェクトを「ExclusiveStartKey」に設定し、再度リクエストすることで、欲しかったデータを複数回のリクエストに分割して全件取得することができます。

実際のコードがこちら

```ts
  /**
   * @param clients DynamoDB.DocumentClient
   * @param params
   */
  async getAllQuery(clients, params) {
    let items = [];
    let startKey = '';
    while (true) {
      if (startKey) {
        params.ExclusiveStartKey = startKey;
      }
      const res = await clients.dynamo.query(params).promise();
      if (res.Items) {
        items = items.concat(res.Items);
        startKey = res.LastEvaluatedKey;
      }
      if (!startKey) {
        break;
      }
    }
    return items;
  }
```

## まとめ
原因がわかればなんてことないですよね。
とても簡単な処理で値を取り出すことができました。
DynamoDBなんてグラフのデータにしたり1MB超えること多々あると思うので、困っている方の参考になれば幸いです。
公式ホームページのIntro to Vue 3クラス１から２(Intro&Create the VueApp)

vue2は経験していて、vue3はまだよくわかっていないところです。
それで、公式ホームページのところを確認したら、動画でvue3を勉強させるコンテンツがあることがわかり、始めて見ました。

#Intro to Vue 3クラス

SPA(Single Page Application)は業務上のサイトの場合は、合わない場合もありますが、
一般ユーザ対象のものは良い方かと思っています。
業務上のものだとしても、合うものはあるので、この機会にキャッチアップできれば、幸いですね。
英語のみではありますが、内容が下の記事としてあるので、大丈夫だと思いました。

## 1. Intro to Vue3

>クラス https://www.vuemastery.com/courses/intro-to-vue-3/intro-to-vue3/

動画で学んだことをやって見るには、Codepenを利用する方法とgithubを利用して、ローカルにてやって見る方法があります。
私はローカルでやって見たいと思ってgithubからForkして、それをCloneやって、学んでみる予定です。

https://github.com/Code-Pop/Intro-to-Vue-3

上記のレポジトリにアクセスして、「Fork」を押下した後に、自分のレポジトリから「Clone」を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516328/cb26e1cb-c15b-7690-68e2-48e0e0156e2c.png)

私みたいにローカルでやって見る方はVS CodeとVS Codeのextensionからes6-string-htmlをインストールして、準備をやりましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516328/f705663f-b23c-5c9c-e0a8-6b00d6ebf110.png)



## 2. Create the VueApp

>クラス https://www.vuemastery.com/courses/intro-to-vue-3/creating-the-vue-app-vue3

まずは、「L2-start」ブランに切り替えてやって見ましょう。
サイトではプロとタイプや学習用としては最新バージョンを使うことをおすすめしていて、以下のコードで、最新ものを使えるようにしていますが、会社では3.0.11を使っていたので、3.0.11を利用します。
npmとか利用すると、楽だとは思いますが、この度は動画に従ってやって見ると言うことなので、同じくスクリプトを直接に入れて見ました。

```html:index.html：最新バージョン利用時
<script src="https://unpkg.com/vue@next"></script>
```


```html:index.html：3.0.11バージョン利用時
<script src="https://unpkg.com/vue@3.0.11/dist/vue.global.js"></script>
```

その後に、main.jsからすでにあるコードを削除して、下記のようにvueのアプリを作りましょう。

```vuejs:main.js：一般
const app = Vue.createApp({
    data: function() {
        return {
            product: 'Socks'
        }
    }
})
```
```vuejs:main.js：ES6
const app = Vue.createApp({
    data() {
        return {
            product: 'Socks'
        }
    }
})
```

index.htmlから作ったvueのアプリをマウントして、h1タグの中はマウントされたアプリから値を設定しましょう。

```html:index.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Vue Mastery</title>
    <!-- Import Styles -->
    <link rel="stylesheet" href="./assets/styles.css" />
    <!-- Import Vue.js 3.0.11 version -->
    <script src="https://unpkg.com/vue@3.0.11/dist/vue.global.js"></script>
  </head>
  <body>
    <div id="app">
      <h1>{{ product }}</h1>
    </div>

    <!-- Import App -->
    <script src="./main.js"></script>

    <!-- Mount App -->
    <script>
      const mountedApp = app.mount('#app')
    </script>
  </body>
</html>

```

その後はvs codeのデバックをChromeに設定して確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516328/4b247a1a-d446-12b6-5edd-1adf00e375ca.png)
デバックボタンを押下すると、下記の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516328/36741f07-a42a-4bc1-867e-d07ec577b7ff.png)

課題はdescriptionデータオブジェクトを追加して、pタグにその内容を表示させることです。
私は課題を終わらせて、ブラウザーから表示して、productをスクリプトにて直接に変えて見ました。
クラスでは課題をする前にやる内容です。(笑)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516328/a079875a-a6d0-7c2f-58a0-1135bb7f45fc.png)

```javascript:console
mountedApp.product = "Sandals";
```
productが変更されることが確認できますね。
Linuxバージョン確認コマンド

# OSバージョン確認法

他にもあると思うが、気づいたら追記していきます。


+ ubuntu20  

```
$ ls /etc/*rele* -l
-rw-r--r-- 1 root root 104  8月  4  2021 /etc/lsb-release
lrwxrwxrwx 1 root root  21  8月  4  2021 /etc/os-release -> ../usr/lib/os-release

$ uname -a
Linux X205TAW 5.13.0-27-generic #29~20.04.1-Ubuntu SMP Fri Jan 14 00:32:30 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
```

+ CentOS 

```
# ls /etc/*rele* -l
-rw-r--r--. 1 root root 37  4月  8  2020 /etc/centos-release
-rw-r--r--. 1 root root 51  4月  8  2020 /etc/centos-release-upstream
lrwxrwxrwx. 1 root root 21  6月 22  2021 /etc/os-release -> ../usr/lib/os-release
lrwxrwxrwx. 1 root root 14  6月 22  2021 /etc/redhat-release -> centos-release
lrwxrwxrwx. 1 root root 14  6月 22  2021 /etc/system-release -> centos-release
-rw-r--r--. 1 root root 23  4月  8  2020 /etc/system-release-cpe

```

```
# uname -a
Linux localhost.localdomain 4.18.0-193.el8.x86_64 #1 SMP Fri May 8 10:59:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

# uname -a
Linux db7 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
```
NFS導入方法

# 環境
CentOS Linux release 7.8.2003 
VMwere Workstation 16 Player


# NFS

```
# yum install nfs-utils

# yum list installed | grep nfs
libnfsidmap.x86_64                 0.25-19.el7                @base
nfs-utils.x86_64                   1:1.3.0-0.68.el7           @base

# systemctl enable nfs

# ls /etc/systemd/system/multi-user.target.wants/nfs-server.service
/etc/systemd/system/multi-user.target.wants/nfs-server.service

# ls /etc/systemd/system/multi-user.target.wants/nfs-server.service -la
lrwxrwxrwx 1 root root 42  6月 25 21:46 /etc/systemd/system/multi-user.target.wants/nfs-server.service -> /usr/lib/systemd/system/nfs-server.service

# exportfs
/home/data      192.168.238.0/24

# exportfs -ra
exportfs: No options for /home/data 192.168.238.0/24: suggest 192.168.238.0/24(sync) to avoid warning

# showmount -e
Export list for db7:
/home/data 192.168.238.0/24

# mount -t nfs -o rw ns1:/home/kororo /mnt/nfs
# mount -t nfs -o rw 192.168.238.190:/home/data /home/data

# vi /etc/fstab
192.168.238.190:/home/data      /home/data      nfs     defaults        0 0

```
SAMBA導入(centos7.8 samba4.10.6)

# 環境
CentOS Linux release 7.8.2003 
Samba 4.10.6 
VMwere Workstation 16 Player

# firewalld
udp/137、udp/138、tcp/139、tcp/445を開ける 
※CentOS7.2以前のCentOS7場合はfirewalldのバージョン場古く、下記を実行できない。アップデートすること。

```
# yum update firewalld -y
```

## 1.ルールが定義されていることを確認

```
# firewall-cmd --permanent --info-service=samba
```

## 2.現在ルールが適用されていないことを確認する

```
# firewall-cmd --zone=public --list-services --permanent | sed -e "s/ /\n/g" | # grep samba
```

## 3.ルールを適用する

```
# firewall-cmd --zone=public --add-service=samba --permanent
```

## 4.ルールが適用されていることを確認する

```
# firewall-cmd --list-services --zone=public --permanent | sed -e "s/ /\n/g" | grep samba
```

## 5.設定を再読み込みして反映させる

```
# firewall-cmd --reload
```

# samba
## 1.インストール

```
# yum install samba
```

## 2.バージョンチェック

```
# smbd -V
# rpm -qi smb
# rpm -qa|grep samba
```

## 3.ユーザ作成
```
# useradd samba

# pdbedit -a samba
1234

# pdbedit -L

# testparm
```

## 4.起動

```
# systemctl status smb.service
# systemctl start smb.service
# ip a | grep inet
```

## 5.Confの設定

```
# /etc/samba/smb.conf
[data]
        comment = Data Folder
        path = /home/data/
        read only = No

# systemctl restart smb
```

# ubuntu用

```
# apt install samba

# vi /etc/samba/smb.conf
## /home/test ###
[share]
  comment = Samba on Ubuntu
  path = /home/test
  read only = no
  browsable = yes

## /home/test ###
[share2]
  comment = Samba on Ubuntu
  path = /media/usr1/C45AC1FF5AC1EE6C
  read only = no
  browsable = yes

## /home/test ###
[share_html]
  comment = Samba on Ubuntu
  path = /var/www/html
  read only = no
  browsable = yes
```
【ユーザーフォーム】各コントロールをTypeName別に色やフォント設定して統一感のあるデザインにする【ExcelVBA】



`UFの全コントロールのTypeNameを出力する`を実行するとコントロールの型がイミディエイトウインドウに列挙されます。

``` vb
Private Sub UFの全コントロールのTypeNameを出力する()
  
  Dim e As Control
  For Each e In Me.Controls
    Debug.Print e.Name, TypeName(e)
  Next

End Sub
```


`UFの全コントロールを着色する`内の`Select`文で仕分けてから着色なりフォント設定なりすると統一感のあるデザインになります。

ユーザーフォーム自体はコントロールではないのでコントロールを入れる引数の型は`Variant`にしてます。



``` vb

Enum clrUF
  黒 = 0
  灰_淡い = 12632256
  薄い橙 = 8696052
End Enum

Private Sub UFの全コントロールを着色する()
  
  Call 指定コントロールを着色(Me, clrUF.黒, clrUF.灰_淡い)
  
  Dim e As Control
  For Each e In Me.Controls
    Call 指定コントロールのフォント設定(e, "Meiryo UI", 12, False)
    
    Select Case TypeName(e)
      Case "Label", "Frame"
        Call 指定コントロールを着色(e, clrUF.黒, clrUF.灰_淡い)
        
      Case "ListView4", "TextBox"
        Call 指定コントロールを着色(e, clrUF.黒, clrUF.薄い橙, clrUF.灰_淡い)
        
      Case "CommandButton"
        Call 指定コントロールを着色(e, clrUF.灰_淡い, clrUF.黒)
    End Select
  Next

End Sub

Private Sub 指定コントロールのフォント設定(myControl As Variant, _
                                          フォント As String, _
                                            サイズ As Double, _
                                    Optional Bold As Boolean)
  Rem myControlがVariantなのはMeがControlではないため
  
  With myControl.Font
    .Name = フォント
    .Size = サイズ
    .Bold = Bold
  End With
  
End Sub

Private Sub 指定コントロールを着色(myControl As Variant, _
                                     背景色, _
                                     文字色, _
                            Optional 境界色)
  Rem myControlがVariantなのはMeがControlではないため
  
  On Error Resume Next
  With myControl
    .BackColor = 背景色
    .ForeColor = 文字色
    If IsMissing(境界色) = False Then: .BorderColor = 境界色
  End With
End Sub
```

`ListView`の`TypeName`が`ListView4`なの初めて知った。