OmniAICreator/Qiita-1.07M huggingface dataset:
M1 MacにTeXShopをインストールする


# 前書き

MacでLaTeXを使って原稿を書くぞ〜〜


環境
* Mac mini (M1, 2020)
* macOS Big Sur
* Apple M1チップ
* メモリ 16GB


# 手順

* TeX Liveのインストール
* X11のダウンロード
* TeX Liveの設定
* 動作確認


# TeX Liveのインストール

Homebrewを使ってTeX Liveをインストールする[1]．
```
$ brew install --cask mactex
```
Homebrewが入っていないならば以下コマンドでインストールをするか[2]，
```
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
ミラーサイトからMacTeXのtar.gzをダウンロードするとよい．

# X11のダウンロード

[XQuartz [3]](https://www.xquartz.org)のサイトからXquartz11をダウンロードする．
TeX LiveのパッケージによってはX11が必要なため[4]．
# TeX Liveの設定

TeXShop，TeX Live Utility，LaTeXiTがインストールされる．
アプリケーション毎に環境設定を行なう．

## TeXShop
TeXShop > 環境設定 > 内部設定タブにて，
設定プロファイルをpTeX(ptex2pdf)に変更する．

## TeX Live Utility

> TeX Live Utility > 更新があるか確認

をクリックしてアップロードを行う．
> 作業 > パッケージ一覧を更新

を選択してパッケージを全部更新する．やや時間がかかる．

## LaTeXiT

> LaTeXiT > 環境設定 > プログラム

の構成:デフォルト，latex+dvipdfを選択した後にパスを記載していく[5][6]．
LaTeXやdvipdfは/Library配下，gsやps2pdfは/opt/homebrew配下のシンボリックリンクを参照した．
適宜ターミナルでパスを確認しながら記述してください．

| name | path | 
|:-:|:-:|
|  LaTeX | /Library/TeX/texbin/uplatex  |   
|  dvipdf | /Library/TeX/texbin/dvipdfmx  |   
|  Ghostscript(gs) |  /opt/homebrew/bin/gs |  
|  ps2pdf | /opt/homebrew/bin/ps2pdf  |  


# 動作確認

適当なtexファイルを作成あるいは入手して開き，タイプセットをクリックしてコンパイルが成功するか確認する．
サンプルファイルは[7],[8]や各々が書きたい文書のテンプレートを参照してください．[8]に関しては
¥usepackage[dvipdfmx]{graphicx}
の行を追加した方がよい．dvipdfmxパッケージを指定しないとコンパイルが成功しない．

# 参考
1. [TeX Live/Mac - TeX Wiki](https://texwiki.texjp.org/?TeX%20Live%2FMac)
1. [macOS（またはLinux）用パッケージマネージャー — Homebrew](https://brew.sh/index_ja)
1. [XQuartz](https://www.xquartz.org)
1. [MacTeX - TeX Users Group](https://tug.org/mactex/mactex-download.html)
1. [LaTeXiT - TeX Wiki](https://texwiki.texjp.org/?LaTeXiT)
1. [M1 MacへのTex導入方法【2021年版】 | もろみ先輩の日常](https://moromisenpy.com/m1-mactex2021/)
1. [LaTeX入門/最初の例 - TeX Wiki](https://texwiki.texjp.org/?LaTeX入門%2F最初の例)
1. [IEEE - Manuscript Templates for Conference Proceedings](https://www.ieee.org/conferences/publishing/templates.html)
保有個人データの訂正等

#### [全体の目次](https://qiita.com/tetz1/items/da4eb31b920f2acf4349)

**[個人情報の保護に関する法律についてのガイドライン（通則編）](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/)<br>　[3 個人情報取扱事業者等の義務](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a3)<br> 　　> [3-8　保有個人データに関する事項の公表等、保有個人データの開示・訂正等・利用停止等（法第32条～第39条関係）](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a3-8)<br> 　　　> [3-8-4 保有個人データの訂正等（法第34条関係）](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a3-8-4)**

---

# 保有個人データの訂正等

### 保有個人データに誤りがあり、内容の訂正等（訂正、追加又、削除）の請求を受けた場合は、利用目的の達成に必要な範囲で遅滞なく必要な調査を行い、その結果に基づき、原則として、訂正等を行わなければならない

<details><summary><B>利用目的からみて訂正等が必要ではない場合、保有個人データが誤りである旨の指摘が正しくない場合</B></summary>
利用目的からみて訂正等が必要ではない場合、保有個人データが誤りである旨の指摘が正しくない場合には、訂正等を行う必要はない。ただし、その場合には、遅滞なく、訂正等を行わない旨を本人に通知しなければならない。
</details>

### 保有個人データについて訂正等を行ったとき、または、訂正等を行わない決定をしたときは、遅滞なく、それを本人に通知しなければならない（※訂正等を行ったときは、その内容も含む）

<details>
<summary><B>「本人に通知」とは？ </B></summary>
<a href="https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a2-14">個人情報の保護に関する法律についてのガイドライン（通則編）- 2-14（本人に通知）</a>

>「本人に通知」とは、本人に直接知らしめることをいい、事業の性質及び個人情報の取扱状況に応じ、内容が本人に認識される合理的かつ適切な方法によらなければならない。
>
>【本人への通知に該当する事例】
> 事例1）ちらし等の文書を直接渡すことにより知らせること。
> 事例2）口頭又は自動応答装置等で知らせること。
> 事例3）電子メール、FAX等により送信し、又は文書を郵便等で送付することにより知らせること。

</details>

### 訂正等の例外
保有個人データの内容の訂正等に関して他の法令の規定により特別の手続が定められている場合には、法第34条第1項及び第2項の規定は適用されず、当該他の法令の規定が適用されることとなる。

### 裁判上の訴えの事前請求
本人が、裁判上の訴えにより、当該本人が識別される保有個人データの訂正等を請求する場合と本条との関係については、[3-8-9（裁判上の訴えの事前請求）](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a3-3-5)を参照のこと。
【Ruby】ハッシュについて【初心者向け】

<br>

## ハッシュとは？
:::note info
キーと値の組み合わせでデータを管理するオブジェクトです。

`イメージ`
｛ キー1: 値1, キー2: 値2, キー3: 値3 }
:::
<br>

## 配列との違いは？
配列が要素を指定するのには、「０」から始まるインデックス番号を使用します。
それに対し、ハッシュは「キー」と呼ばれる任意の文字列を使用し、「バリュー」と呼ばれる要素を指定します。
```ruby:hash.rb
about_taro = { name: "suzuki taro", age: 30, like: "apple", hobby: "swimming" }
puts about_taro[:name]
#==> suzuki taro
```

<br>

## 配列ではなくハッシュを使うメリットは？
**1. コードの可読性が高い。**
ハッシュは任意の文字列であるキーとの組み合わせにより、バリューがどういったものなのかが分かりやすいです。
```ruby:hash.rb
#ハッシュの場合　キーにより、バリューが何の値段なのか分かります
ramen_menu = { syoyu: "750円", miso: "850円", sio: "700円", tonkotyu: "800円" }

#配列の場合 　要素が何の値段なのか分かりません
ramen_menu = [ "750円", "850円", "700円", "800円" ]

```
<br>

**2. 様々な種類の要素をまとめて扱える。**
配列は基本的に同じカテゴリの要素をまとめるのに対し、ハッシュはキーの存在により、違ったカテゴリのバリューも可読性を保ってまとめることができます。
```ruby:hash.rb
#ハッシュの場合　taroさんについて様々なカテゴリのバリューをまとめています
about_taro = { name: "suzuki taro", age: 30, like: "apple", hobby: "swimming", best_friend: "satoshi" }

#配列の場合　taroさんの[友達]という1つのカテゴリの要素をまとめています
taros_friends = [ "satoshi", "kojiro", "kasumi", "takeshi" ]
```

<br>

## シンボルについて
:::note info
コロン(:)に続けて任意の名前で定義されたオブジェクトを**シンボル**といいます。
**:シンボル名**<br>
:::

ハッシュのキーもシンボルであり、以前はハッシュロケット(=>)を用いた記法が多く使われていました。

```ruby:ハッシュロケット(=>)を用いた記法
about_taro = { :name => "suzuki taro", :age => 30, :like => "apple" }
```

<br>
しかし今はシンボルを使った新しい記法が主流になっています。<br>

:::note warn
※この記法の場合は、シンボルのコロンの位置が後ろになります。
:::

```ruby:シンボルを使った新しい記法
about_taro = { name: "suzuki taro", age: 30, like: "apple" }
```

<br>

## ハッシュの扱い方
演習問題を通して、ハッシュを扱ってみましょう。

```ruby:演習問題
taro = { name: "suzuki taro", age: 30, like: "apple", hobby: "swimming" }
```

　**Q1** 「30」を出力してください。
<details><summary>Q1解答</summary>

```rb
puts taro[:age]
#=> 30
```


:::note alert
ハッシュの中と外では、キーのコロンの位置が反対になります。
taro = { **age:** 30 }
puts taro[**:age**]
:::


</details>


　**Q2**　キー「from」 バリュー「"japan"」を追加してください。
<details><summary>Q2解答</summary>

```rb
taro[:from] = "japan"
#puts taro
#=> {:name=>"suzuki taro", :age=>30, :like=>"apple", :hobby=>"swimming", :from=>"japan"}
```
</details>

　**Q3** 「"apple"」を「"orange"」に上書きしてください。
<details><summary>Q3解答</summary>

```rb
taro[:like] = "orange"
#puts taro
#=> {:name=>"suzuki taro", :age=>30, :like=>"orange", :hobby=>"swimming", :from=>"japan"}
```
</details>

　**Q4** 「hobby: "swimming"」を削除してください。
<details><summary>Q4解答</summary>

```rb
taro.delete(:hobby)
#puts taro
#=> {:name=>"suzuki taro", :age=>30, :like=>"orange", :from=>"japan"}
```

</details>

　**Q5** ハッシュの要素の個数を調べてください。
<details><summary>Q5解答</summary>

```rb
taro.size
#=> 4
```
:::note info
lengthメソッドでも同じ結果が得られます。
:::
</details>

　**Q6** ハッシュのキーを配列として返してください。
<details><summary>Q6解答</summary>

```rb
taro.keys
#=> [:name, :age, :like, :from]
```

</details>

　**Q7** ハッシュの値を配列として返してください。
<details><summary>Q7解答</summary>

```rb
taro.values
#=> ["suzuki taro", 30, "orange", "japan"]
```

</details>

　**Q8** ハッシュの中に「:name」キーが存在するか確認してください。
<details><summary>Q8解答</summary>

```rb
taro.has_key?(:name)
#=> true
```
:::note info
key?/include?/member?メソッドでも同じ結果が得られます。
:::
</details>


## 終わりに
ハッシュはプログラミングの中で欠かせないオブジェクトです。
ぜひ使い方をマスターしましょう♬
Ninjaをソースからビルドする(RHEL9)

Ninjaをソースからビルドする方法についての説明となります。

## 経緯
本稿執筆段階(2022/07/28)時点で、RHEL9向けのninjaのrpmが配布されていなかった(もしくは見つける事が出来なかった)ため、ソースからのビルドを行うこととした。この項はその作業の備忘録となる。

2022/07/28:追記
Red Hat CodeReady Linux Builderの方にパッケージがあるとのご指摘をいただきました。
次のコマンドでCRBリポジトリを有効化をすると、dnfからninja‐buildのインストールが可能です。
```terminal:
[user@localhost user]# sudo subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms
```

## Ninjaとは
>Ninjaは、高速な動作を重視した小さなビルドシステムである。より高レベルなビルドシステムによってビルドファイルを生成するように設計されている点と、可能な限りビルドを高速に行うように設計されている点が他のビルドシステムと大きく異なる点である。
>
> [Ninja (ソフトウェア) ‐ Wikipediaより](https://ja.wikipedia.org/wiki/Ninja_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2))

つまり、メークを行う際に使うツールでCMake等から呼び出し、高速なメークファイル(build.ninja)の生成を行うために使われます。

## 環境について
本稿を記載の為に使用した環境は以下となります。
・OS:RHEL9.0(Hyper-V上の仮想マシン)
・gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9)
・cmake version 3.20.2
・ninjaのソースコード 1.11.0(2022/07/28時点のものを使用)
ユーザはuserという名称を使用、作業ディレクトリは/home/user/workとしています。これについては各環境に合わせて読み替えてください。

## ビルドの方法

#### 1. ソースを取得する。
NinjaのGitリポジトリのクローンを行う。

```terminal:
[user@localhost work]$ git clone https://github.com/ninja-build/ninja.git
Cloning into 'ninja'...
remote: Enumerating objects: 11813, done.
remote: Counting objects: 100% (2/2), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 11813 (delta 0), reused 1 (delta 0), pack-reused 11811
Receiving objects: 100% (11813/11813), 4.34 MiB | 6.64 MiB/s, done.
Resolving deltas: 100% (8354/8354), done.
[user@localhost work]$
```

#### 2. ビルドを行う
CMakeにより、ビルドを実行する。
```terminal:
[user@localhost work]$ cd ./ninja
[user@localhost ninja]$ cmake -Bbuild-cmake
[user@localhost ninja]$ cmake --build build-cmake
[  1%] Building CXX object CMakeFiles/libninja-re2c.dir/src/depfile_parser.cc.o
[  3%] Building CXX object CMakeFiles/libninja-re2c.dir/src/lexer.cc.o
[  3%] Built target libninja-re2c
　：
　：
[ 98%] Building CXX object CMakeFiles/depfile_parser_perftest.dir/src/depfile_parser_perftest.cc.o
[100%] Linking CXX executable depfile_parser_perftest
[100%] Built target depfile_parser_perftest
[user@localhost ninja]$
```

#### 3. インストールを行う
CMakeにより、インストールを実行する。

```terminal:
[user@localhost ninja]$ cmake --install ./build-cmake/
-- Install configuration: ""
-- Installing: /usr/local/bin/ninja
[user@localhost ninja]$
```
※rootの権限がないとエラーが出る可能性があります。その場合、sudoで実行する等してください。

#### 4. インストール結果の確認
コマンドを実行してみる。
正しくインストールされていればコマンドが正常に実行され、バージョンが表示される。

```terminal:
[user@localhost ninja]$ ninja --version
1.11.0.git
[user@localhost ninja]$
```
Red Hat Enterprise Linux 9.0の入手方法


2022年5月17日にRHEL9.0のリリースが行われました。
RedHatアカウントに登録済みであれば無料で使用することができます。(サポートは受けられませんが)
本稿ではRHEL9.0のダウンロード方法を説明します。
前提として、RedHatアカウントは登録済みかつRed Hat Developerにログイン済みであることとします。

---
## １．次のURLにアクセスする。

https://developers.redhat.com/


## ２．開いたページより、「Menu」→「Products」→「Red Hat Enterprise Linux」の順にクリックする。
![0014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/7aef4ddb-da3c-810c-7c09-0aef9e2f5c28.png)

## ３．開いたページより、「Download」をクリックする。

![0016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/c2608ad5-1aab-9abb-f66c-bbf473351cac.png)

## ４．isoイメージをダウンロードする。
ページ中段あたりにある、9.0のx86_64 DVD isoのDownloadをクリックします。
(ARMのマシンで使用する場合はaarch64を選択してください。)
![0017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/96c0104d-520d-0b49-964f-98a85835069b.png)

## ５．追加情報を入力する。
ユーザ登録時と同じような内容が質問されるので回答を行い、「送信」をクリックします。
※会社について必須項目となっていますが、今回は個人使用のため、「個人」と記載して登録しました。
「送信」をクリックするとisoイメージのダウンロードが開始されます。
![0019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/21747ad0-0b9e-569e-7dac-eea6ad3e8746.png)
Red Hat アカウントの登録方法

Red Hatの製品を使用するためにはRed Hat アカウントを登録する必要があります。
このアカウントがあると、Red Hatの一部製品の使用や、開発者向けの情報などを参照することができます。

以下の手順は、アカウントの登録方法の説明となります。

---

### １．次のURLにアクセスします。

https://www.redhat.com/ja

### ２．開いたページより、右上にある「ログイン」をクリックします。
![0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/ce0f743b-34b9-47ba-ce1a-61b7b8eb74c8.png)

### ３．「今すぐ登録する」をクリックします。

![0003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/d733a413-b477-b710-4044-b00e0f9fbc22.png)

### ４．アカウント情報の入力を行う。
次の内容が表示されるので、入力方法に従い情報の入力を行う。
*が付与されている項目は必須フィールドです。
![0005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/f614613c-dd7b-5da7-e089-211a0612aab2.png)

入力が完了したら、ページ下層にある「アカウントを作成します」をクリックします。
![0006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/8d43ec76-e80b-32fb-c88d-d4b226798161.png)

### ５．メールによる認証を行う（その１）
アカウントが仮登録の状態となるので、Resend confirmation emailをクリックし、登録したメールアドレス宛に確認用のメールを送信する。
※執筆者の環境では登録時にメールが送信されてきませんでした。再送手順に見えるので、メールが送られてきている場合、この手順は不要と考えます。
![0007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/e63e0d28-6c65-f90f-dbdc-13d8d4866db8.png)

クリックすると次の表示に遷移します。
![0008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/85ec3024-6140-d178-6be9-a10de99ad2bd.png)

### ６．メールによる認証を行う（その２）
登録したメールアドレスに対して、次のメールが送信されてきているので、URLをクリックする。
![0009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/146e65af-fe3d-d868-386d-76a409187fd9.png)

登録完了の画面が表示されればOK。
![0010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/858fd95a-d343-e2e6-4f61-6a7aa2002dce.png)

### 無事登録できました。
![0011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/d624a0c6-cd57-f5cb-c590-ffee7ea4eaa7.png)
CSVファイルから特定のセルを読み込んでグラフ化する

# はじめに
一番下の「まとめ」にのせているコードをコピペすれば基本大丈夫です。
前半は細かい説明だけです。

# CSVデータの読み込み

特定のセルを読み込みたい場合には
```
import pandas as pd

filename = 'filename.csv'
df = pd.read_csv(filename)#'filename.csv'というファイルを読み込み
print(df.iloc[0,0])#セルを指定して表示
```
このコードで読み込める。
ただし、行・列番号はexcellで開いた時とは異なることに注意。基本は0始まりなのでexcell上で15行なら、pythonでは14行目に指定すると大体うまくいきます。


# 連続してデータを取得
```
for i in range(15,515):#読み込む行数の指定　EXCELLを用いて開いた場合の行数とはずれているため注意。
    time.append(int(df.iloc[i,0]))#文字列(str型)の場合には、int()とすることで整数に変換する。
    data.append(int(df.iloc[i,1]))
```
# 作図
```
plt.figure(figsize=(12,8))
plt.plot(time,data,label = 'hogehoge')
plt.legend()
```

# まとめ
以下のコードをコピペして、ファイル名(```filename```)、for文の開始・終了(```for i in range(15,515)```)、データのセル指定(```df.iloc[i,0]```)などを変えるだけで作図できるはずです。
```
# -*- coding: utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt


#配列の準備
time = []
data = []

#ファイルの読み込み
filename = 'filename.csv'
df = pd.read_csv(filename)#'filename.csv'というファイルを読み込み

#ファイルの情報を準備した配列に埋め込んでいく
for i in range(15,515):#読み込む行数の指定　EXCELLを用いて開いた場合の行数とはずれているため注意。
    time.append(int(df.iloc[i,0]))#文字列(str型)の場合には、int()とすることで整数に変換する。
    data.append(int(df.iloc[i,1]))

#作図
plt.figure(figsize=(12,8))
plt.plot(time,data,label = 'hogehoge')
plt.legend()
```

CSVファイルが読み込めない場合には以下のページを参照
https://qiita.com/lucky0707/items/becdbed49c4ecb4fe246
AWS S3 に React をデプロイした時に出るエラーの解決方法

次のエラーに対する解決方法です。

```text
404 Not Found
Code: NoSuchKey
Message: The specified key does not exist.
Key: admin/courses
RequestId: EHQCGTYW4WS*****
HostId: vfFuFiZqF0EbwuClsRpDJLwBg7vfq/D/******
```

![aws_s3_jul2801.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/53e7b796-f6c2-a87b-baea-be57123cb969.png)

S3 の設定を変更します。
プロパティ -> 静的ウェブサイトホスティング -> 編集
>エラードキュメント - オプション に
>index.html を入れます。

![aws_s3_jul2802.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/ce17e101-db68-aede-cdc6-24a8dff73bbc.png)
# Microsoft Teams 障害を ThousandEyes 上で観測してみた

# Microsoft Teams 障害を ThousandEyes 上で観測してみた
7/21（木）に発生した Microsoft Teams の障害について、ThousandEyes で観測できたのでメモしておきます。
社内から「仕事にならない！！」と声を多数聞きながら、Dashbord を見ながらニンマリしてたのは秘密です・・・🤫

https://forest.watch.impress.co.jp/docs/news/1426417.html

##  Enterprise Agents
Raspberry Pi 4 上で稼働している Enterprise Agent からの通信を確認してみます。
宛先 URL を指定し、5 分間隔で監視しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1953283/8735395d-260f-229c-b402-44144994d1f2.png)
ダッシュボードを確認してみます。
HTTP Server からの応答を確認してみると、**7/21（木） 10:20 - 10:25 JST** の時間帯から HTTP Server からの応答がなくなっていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1953283/97e3cdca-ae00-6bf0-10e5-1dffe2412740.png)
Network 経路情報を確認してみます。
障害発生時刻にパケットロスや経路障害は検出されていないことがわかります。
パケットロスが起きた場合はグラフのカウントが上がったり、障害を検知した箇所が経路上に赤く表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1953283/5b20270c-8f50-8264-9196-955129c62ebe.png)

## Endpoint Agents
2 台の PC 上で稼働している Endpoint Agents からの通信を確認します。
Enterprise Agents 同様に、宛先 URL を指定して 5 分間隔で監視しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1953283/de47d832-6e44-8dbd-9fa6-4dbeeaa75848.png)
HTTP Server からの応答を確認してみると、Enterprise Agents と同じように障害発生時刻以降、HTTP Server からの応答がなくなっていることがわかります。
また、Response として ``500 Internal Server Error`` が返されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1953283/6434947c-14c8-0a93-06d2-b501540cd5b2.png)
この ``View Headers`` を選択すると、実際の HTTP Request / HTTP Response の Header 情報を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1953283/d10b4ce5-2d80-bc39-e9f1-2137c3434944.png)
加えて、ローカルネットワークの問題も見られないことがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1953283/b79f0069-f7d9-29af-7882-c19c087d8672.png)

# さいごに
「ThousandEyes はいいぞ！」という情報を見たり聞いたりすることはありますが、今までは「そうなんだ～」「確かに便利そうだな～」くらいの感覚でした。
今回のように実際に監視対象で障害が起きると、ネットワークが悪いのかサービスが悪いのかが GUI 上ですぐに確認することができ、製品・サービスの良さがダイレクトにわかって良いですね。
時事ネタでいい勉強になりました。
はじめに～Javaを使う為のソフトダウンロードと初期設定～

# Eclipse
■Eclipseとは
統合開発環境です。
（無料ソフト）
　※自分がどんなソフトが好きかはこのみの問題ですが、今回はEclipse使います。


https://mergedoc.osdn.jp/

Windowsか、Macかは自分のPCのOSにより判断します。
今回は、**Full Edition**の、すべてのパッケージが全部入りの**Ultimate**パッケージをダウンロードしました。

（注意）サイズがデカいので、PCの容量に注意が必要です。
　※私の場合、PCの空き容量が不安でしたので、この際に不必要なデータを削除し、ドライブの最適化を実行しました。
## プロジェクトの作成
### プロジェクト作成
仮に、プロジェクト名を「01-01」として作成してみます。
![Eclips初期設定01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730862/a4d83f8c-6b1e-0678-ab0b-aa2abc64b8c2.png)

1. ファイルから、新規を選択します。
2. 今回作成するのはJavaなので、「Javaプロジェクト」を選択します。
  Javaプロジェクトの作成ウィンドウが開くので、プロジェクト名に「01-01」と打ち込んで、
　「完了」を押下します。
  ![Eclips初期設定02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730862/c0f6711e-8b87-8174-6cc5-452b8d266cca.png)
プロジェクトが作成できました。


### プログラムコードの作成
仮に、クラス名を「FirstExample」として作成してみます。
3. ファイルから新規作成を選択→クラスを選択すると、クラス作成ウィンドウが開くので、
   「FirstExample」と打ち込んで、
　「完了」を押下します。
   ![Eclips初期設定03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730862/c6a52327-4e60-4445-f9c2-022976e2d83b.png)
「01-01」プロジェクトの下に、「FirstExample」クラスが作成できました。


## Eclipse内表示フォントの変更方法
標準のままでは文字が小さくて見にくいので、少し大きく変更しました。

1. ウィンドウから、設定を選択します。
2. 検索窓で　「エディタ」と打ちこんで検索します。
3. 左側のメニューから「外観」の「色とフォント」を選択します。
4. テキストフォントの編集で、サイズやフォント等を好きなものに変更できます。
![Eclips初期設定04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730862/b65ebd21-bbba-1717-5da9-4a56d441290f.png)
【個人事業主】未成年、17歳の高校生が事業を起こすまでにしたこと


# 概要 :grin:

僕は現在17歳、高校生2年生です。
エンジニアとして、業務委託させていただいております。
その際に、僕が個人事業主となるまでに行ったことなどを少し紹介できればと思っております。

僕が調べた時には、未成年が個人事業主になる記事がありませんでした。
高校生などで、これから事業を起こそうと思っている方の参考に少しでもなればいいなと思っています！

# 僕について :grin:

結構な頻度で僕のバックについて聞かれるので、軽く書きます。

### 出身
北海道・札幌（今も住んでます）

### 性格
好きな事に関して、前向きになんでもやる人、行動力が半端ない（と思う）
結構スポーツやります。水泳、ランニング、パルクール、スキー、スノボ、等々
好きなゲームはAPEXです。（APEX仲間にスポーツやるって話したらびっくりされるのはナゼ...？）

### 経歴
札幌光星高校（中高一貫）在学中に、42Tokyoに入学
高校を辞め、定時制高校 札幌大通り高校に編入する
LITE inc. にて業務受託、いろんな技術を身に着けるべくインターンやアルバイト探してます。

より詳しく知りたい方やSNSについて知りたい方は、こちらのポートフォリオを参考にしてください！

https://ayato-shitomi.github.io/portfolio/

# 具体的な手順 :grin:

開業に向けての具体的な手順を時系列順に書きます。

## １）税務所へ行った！

まず、税務署で「個人事業の開業・廃業等届出」をする必要があります。

このような書類が、以下サイトからダウンロードできるので印刷する！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1523062/f8540653-9717-d396-b1d5-e3db548432b6.png)

https://www.nta.go.jp/taxes/tetsuzuki/shinsei/annai/shinkoku/annai/04.htm

2枚紙があるが、両方同じように書いて持っていくこと！

:::note info
自分の部下等がいない限り「給与等の支払いの状況」から下の部分は書かなくてよいです。
青色を持っていく時だけ、「有」にチェックをつける。別日に持っていく場合には「無」とします。
:::

以下に実際に行くときに必要な持ち物

>書いた「個人事業の開業・廃業等届出書」の**2枚とも**
個人証明するための、マイナンバーカードか住民票の写し等（マイナンバーが記載されているもの）が必須！
ボールペン（なんか不備あったときに楽）

「個人事業の開業・廃業等届出書」は2枚持っていくのを忘れるな！
片方にはハンコが押されて、家で保管することになる。

税務署についたら、初心者の僕はどこに行けばいいのかわからなくなったので説明↓
**総合受付みたいなのがあるから、そこに行けばよい。**

## １）銀行へ行った

銀行で法人口座とカードを作る。

持ち物は **本人確認ができるもの**（保険証とか）と（記憶が正しければ）**お金**です。
お金に関しては入金が最初に必要な場合があります。10円以上だったはず。

ノートパソコン買ったり、AWS払ったり経費で買い物したいときに便利なので、法人口座（当座）とカードを作りましょう。
ただし、未成年は **デビットカードしか作れません**。(ToT)

## ２）再び税務署に行く 青色申告

4か月以内（？）に青色申請というものをすると嬉しい特典があります。
多分大体の人に当てはまるいい特典は **最大65万円／55万円の青色申告特別控除を受けられる**ということです。

なんかお得ですね。しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1523062/12d84d38-4d6d-f941-3578-0043201e1856.png)

こんな感じの紙になります。
一応2枚書いてとかでコピーをもっておくといいかもです！

詳細は以下にあります！

https://www.nta.go.jp/taxes/tetsuzuki/shinsei/annai/shinkoku/annai/09.htm

必要な手続きは以上になります！

# まとめ :grin:

事業を起こすということは難しいように思えるかもしれません。
しかしながら、やってみるとさほど難しくなく事業の手続きができました！
EC2で作成したsambaの共有フォルダにwindowsからアクセス失敗した初歩的な見落とし

結論
smbの共有ディレクトリを作っていなかった・・・（3時間も格闘したのに・・・）
→
### エラー
\\IP\kcsambにアクセスできません→診断→予期せぬエラーが発生
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/2a12402f-49ae-1166-4e19-9a632c8edd33.png)

### 格闘
色々調べるとmaxprotocolをSMB3にしろとかminprotocol変えろとか
https://stackoverflow.com/questions/68547105/nt-status-io-timeout-when-trying-to-connect-with-samba-client#:~:text=This%20is%20most%20likely%20because,client%20max%20protocol%20into%20SMB3.

クライアントからSMB2.0だとアクセスエラーがでるからそこなんとかしろとか
https://support.microsoft.com/ja-jp/topic/windows-%E3%81%AE-%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%8B%E3%82%89-smb-2-0-%E3%81%AE%E9%80%9A%E4%BF%A1%E3%81%A7-%E5%85%B1%E6%9C%89%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%AB%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%8C%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E3%81%AA%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%8C%E3%81%82%E3%82%8B-780e508e-95e3-34d2-1827-d6ed35e5350e

むしろmaxprotocolをSMB1にしろとか
http://putianyuzhi.blog123.fc2.com/blog-date-20200617.html

windowsのワークグループ名とsmbのワークグループ名を一致させろとか（この記事かなり参考にした）
https://recipe.kc-cloud.jp/archives/10873

sgのポート445開いていること確認しろとか（この記事かなり参考にした２）
https://hana-shin.hatenablog.com/entry/2022/03/16/204640

クライアント使うときは具体的にフォルダ指定しろとか
Unable to connect with SMB1 -- no workgroup available
smbclient //10.0.2.231/user1 -U user1

[windows側]
あとはwindows側のエラーとして
・windows機能の有効化無効化→SMBの共有を有効化→再起動しろとか
https://alfort.online/22#toc2

・パブリックネットワークにつながっているならプライベートネットワークに変更しろとか
https://www.adte.jp/rec/hdd/post-1115/

### いろいろあったけど神資料はこちらでした
https://www.ospn.jp/osc2009-spring/samba.pdf


###別エラー
#### windows側からファイルを削除できない
![permissionerror00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/7b29c8b3-733a-71e4-484d-148ecdcc4a88.png)

root権限をユーザにつけるか、ディレクトリおよびフォルダそのものの権限を変更するかですがrootの方やってみた

[rootの方]
ヒント；http://km-d.blogspot.com/2011/08/31-centos-56-samba.html#more
ヒント２；https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/183sambauniuser.html#:~:text=Samba%E3%81%AE%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A%E3%81%A7%E3%81%AF,%E4%BF%AE%E6%AD%A3%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%80%82

force user = root
のパラメータ入れるとそのディレクトリにアクセスするときにそのユーザに書き換わるので削除できた

[権限を作成時に強制的に上書きする方法]
https://serverfault.com/questions/645081/samba-permissions-being-ignored
```
[development_server]
    comment = Development directories
    path = /sites
    writeable = yes
    valid users = @dev
    guest ok = no

    create mask = 0775
    force create mode = 0775
    security mask = 0775
    force security mode = 0775

    directory mask = 0775
    force directory mode = 0775
    directory security mask = 0775
    force directory security mode = 0775
```
その他参考リンク
https://linuc.org/docs/seminar/20210214_linuc2.pdf

SMB有効化：
【JavaScript】期間重複をチェックする


### はじめに

開発する中で「期間Aと期間Bがあった場合、ABの期間が重複しているか判定する」処理が必要になり
初めて実装したのでまとめておきます。


### 実装例

```sample.js

// 期間A：2022/07/01　-　2022/07/31　
const dateA = {
 start:  new Date('2022/07/01'),
 end: new Date('2022/07/31')
}

// 期間B：2022/07/31 - 2022/08/30
const dateB = {
 start:  new Date('2022/07/31'),
 end: new Date('2022/08/30')
}

```


上記のような期間Aと期間Bがあるとしたとき、ふたつの期間が重複しているか判定するには以下の条件式を使用します。

```
期間Aの開始時間 <= 期間Bの終了時間 && 期間Aの終了時間 >= 期間Bの開始時間
```
※比較演算子は、条件に応じて変更します。
期間が重複していればtrueが、重複していなければfalseが返ってきます。


上の例で当てはめてみると、
```
2022/07/01 <= 2022/08/30 && 2022/07/31 >= 2022/07/31
```

となり、右辺が成り立たない為trueが返ってきます。


### 参考サイト
http://webdesign-dackel.com/2015/05/19/js-date-overlap-check/
tanθ の 計算方法(Python)


今回は[hmath](https://caleb7023.hmath.pro/)で使用されているtanθの計算方法をご紹介します。
## 計算式
[hmath](https://caleb7023.hmath.pro/)は次の数式でtanθを定義しています。
```math
\tan θ = {\frac{\sin θ}{\cos θ}}
```
## プログラム
[hmath](https://caleb7023.hmath.pro/)内では次のプログラムで計算しています。
```ruby:tan.py
import hmath
def tan(θ):
    return hmath.div(hmath.sin(θ), hmath.cos(θ))
```
最後まで見ていだきありがとうございました。
ぜひ活用してみてください。
【ServiceNow×Teams】ServiceNowとMS Teamsの連携設定

今回はServiceNowとMicrosoft Teams（以下MS Teams）の連携、および連携によって利用できる機能についてご紹介いたします。

ServiceNowとMS Teamsを連携することで、MS Teams側からVirtual Agentを利用可能になります。

また、連携後はServiceNow上で作成したトピックについてMS Teamsでプレビューすることも可能です。


## 連携設定

ServiceNowとMS Teamsの連携においては、各ツール側での設定が必要です。
それぞれで行う設定について、順を追って説明します。

### MS Teams側のセットアップ　その1
まず初めに、下記手順に従いMS Teams側のセットアップを行います。

手順1. Microsoft 365 Businessの管理者アカウントでMS Teamsにログインする。
手順2. MS Teamsで左パネルより「Apps」を選択し、検索欄にて「Now Virtual Agent」を入力する。
手順3. 表示された「Now Virtual Agent」アプリを選択し、「Add」ボタンを押下する。

上記手順完了後、Now Virtual Agentのチャット画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/f14cef60-61a0-4324-93dd-3c673e6f398d.png)


### ServiceNow側のセットアップ
ServiceNow側のセットアップを行います。

①Virtual Agentを有効化します。
下記に初期設定と基本的な使い方をまとめているのでご活用ください。

https://qiita.com/koki-shimomura/items/dc2b1006a3f258618f4e


②下記手順に従い連携設定を行います。

手順4. ServiceNowの管理者アカウントでログインし、左メニューより「コラボレーション　→　自社用カスタム設定のセットアップ　→　メッセージアプリの連携」を選択する。
手順5. 「Microsoft Teams」のインストールボタンを押下する。
手順6.  Microsoft 365 Businessの管理者アカウントでMS Teamsにログインし、ServiceNowからMS Teamsへの連携許可を承諾する。
手順7. 左メニューより「コラボレーション　→　自社用カスタム設定のセットアップ　→　メッセージアプリのデータ連携」を選択し、MS Teamsがインストールされていることを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/ce019265-4cbd-d058-92d7-56063c00db7d.png)


### MS Teams側のセットアップ　その2
MS Teamsに戻り、下記手順を実施します。

手順8. 「Now Virtual Agent」チャットを開き、「Hi」（開始）コマンドを送信する。
手順9. 応答メッセージ中の「ServiceNowへのリンク」を押下後、表示される画面で「確認」ボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/87c06a2a-3bcc-6ead-26cb-bd6a9bc67c92.png)

以上で連携設定は完了です！
MS TeamsからVirtual Agentが使用できるようになりました。

### 注意事項
ServiceNowとTeamsの連携は、1対1で行われます。

たとえば、ServiceNow環境AとTeams環境Aを連携した場合、A:Aで連携されます。
その後、ServiceNow環境BとTeams環境Aを連携した場合、A:Aの連携が解除され、B:Aの1対1の連携となります。

## MS TeamsでのVirtual Agentプレビュー
ServiceNowでVirtual Agentをテストする際、トピック一覧ページおよび各トピック編集画面でテストを行うことができます。

このうち、各トピック編集画面でテストする際、MS Teamsでの表示をプレビューすることができます。

テストは下記ボタンを押下することで実施できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/4179262f-a6af-2c87-609b-9b924d5727d7.png)

Teamsでプレビューする場合は、各トピックの編集画面より「テスト　→　Microsoft Teamsでプレビュー」を選択することで、MS Teamsの「Now Virtual Agent」チャット画面よりプレビューを表示できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/76cae5ea-1ae1-286d-1682-adf045a9c56a.png)

## 終わりに
今回はServiceNowとMS Teamsの連携、およびMS Teamsでのプレビュー方法について紹介させていただきました。

サービスの連携によってユーザの間口も広がり、Virtual Agentの認知度・利用率向上にもつながるかと思いますので、ぜひご活用ください！
Matplotlib可視化 - 育休中の1日のタイムスケジュール

Matplotlib 可視化の練習として、
育休中のとある1日のタイムスケジュールを円グラフにしてみた。

※ 初心者すぎてコードが美しくないですがご了承ください。
※ 美しい書き方教えてください。

# ざっくり手順
①外側グラフを24分割し、0～23のラベルを記載、グラフカラーを白にした。
②内側グラフを時間分割し、ラベル、ラベル位置、グラフ角度、カラーを指定。
③上記の①②をがっちゃんこ。

# 実際のコード
まず外側グラフの内容を確認。
```
# 外側のドーナツ作成

time_label = ["0","1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
　　　　　　　 "11", "12", "13", "14", "15", "16", "17", "18", "19",
　　　　　　　 "20", "21", "22", "23"]

x_time_label = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
　　　　　　　 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

wedgeprops={"width":0, "edgecolor":'white'}

plt.pie(x_time_label , radius=1.3, labels=time_label, 
　　　　startangle=97.5, counterclock=False, colors=colors, 
　　　　wedgeprops= wedgeprops)
```
こんなグラフができます。
![220728時計外側.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603818/8e586389-148b-5e2b-3d34-db5635d5dc31.png)

次に内側グラフの内容を確認。
```
# 内側のドーナツ作成

label = ["就寝", "朝食・準備", "送迎", "寝かしつけ", "片付け", "学習",
　　　　 "調理・昼食", "遊び・買い物", "寝かしつけ", "学習", "送迎", 
　　　　 "遊び", "調理・夕食", "遊び", "お風呂"]

colors = ["plum","lightcoral", "skyblue", "plum", "silver", 
          "yellowgreen", "lightcoral", "gold", "plum", "yellowgreen",
          "skyblue", "gold", "lightcoral", "gold", "silver" ]

plt.pie(x, labels=label, counterclock=False, startangle=127.5,

wedgeprops={'linewidth': 1, 'edgecolor':"white"},  
        colors=colors, radius=1.7, labeldistance=0.5, rotatelabels=True)
```
こんなグラフができます。
![2200728時計内側.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603818/76be1efc-2c8e-9ef6-502d-a8d2e24271a8.png)


最後に、上記コードを一緒に書いてグラフをがっちゃんこしてみます。
```
# 外側のドーナツ作成

time_label = ["0","1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
　　　　　　　 "11", "12", "13", "14", "15", "16", "17", "18", "19",
　　　　　　　 "20", "21", "22", "23"]

x_time_label = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
　　　　　　　 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

wedgeprops={"width":0, "edgecolor":'white'}

plt.pie(x_time_label , radius=1.3, labels=time_label, 
　　　　startangle=97.5, counterclock=False, colors=colors, 
　　　　wedgeprops= wedgeprops)
 

# 内側のドーナツ作成

label = ["就寝", "朝食・準備", "送迎", "寝かしつけ", "片付け", "学習",
　　　　 "調理・昼食", "遊び・買い物", "寝かしつけ", "学習", "送迎", 
　　　　 "遊び", "調理・夕食", "遊び", "お風呂"]

colors = ["plum","lightcoral", "skyblue", "plum", "silver", 
          "yellowgreen", "lightcoral", "gold", "plum", "yellowgreen",
          "skyblue", "gold", "lightcoral", "gold", "silver" ]

plt.pie(x, labels=label, counterclock=False, startangle=127.5,

wedgeprops={'linewidth': 1, 'edgecolor':"white"},  
        colors=colors, radius=1.7, labeldistance=0.5, rotatelabels=True)


plt.show()
```


すると、このようなタイムスケジュールができます。
![220728Matplotlibでタイムスケジュール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603818/d121c0a7-3416-7d68-e631-90033b5191ba.png)


# 作ってみて気づいたこと
寝すぎやん！

（子供の寝かしつけで一緒にねてしまう...）
（夜泣きがあるから朝おきられない...）

夜泣きを無くすねんねトレーニングを始める決心ができました。

# 参考サイト
こちらを参考にしました。
https://www.yutaka-note.com/entry/matplotlib_pie#%E3%83%A9%E3%83%99%E3%83%AB%E3%81%AE%E4%BD%8D%E7%BD%AE
PowerShellで「ネットワークとインターネット」のプロキシを設定する

# What's？

PowerShellで、「ネットワークとインターネット」のプロキシを設定してみたいなと。

# 環境

Windows Server 2022。

```powershell
Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer

WindowsProductName                      WindowsVersion OsHardwareAbstractionLayer
------------------                      -------------- --------------------------
Windows Server 2022 Standard Evaluation 2009           10.0.20348.558

```

```powershell
$PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.20348.643
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.20348.643
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

```

# コマンド

プロキシを有効にする。

```powershell
New-ItemProperty -LiteralPath "HKCU:Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "ProxyEnable" -PropertyType "DWord" -Value "1" -Force
```

プロキシサーバーを設定する。

```powershell
New-ItemProperty -LiteralPath "HKCU:Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "ProxyServer" -PropertyType "String" -Value "[your-proxy-host]:[your-proxy-port]" -Force
```

プロキシ除外設定を行う。

```powershell
New-ItemProperty -LiteralPath "HKCU:Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "ProxyOverride" -PropertyType "String" -Value "<local>" -Force
```

# 現在値の確認

```powershell
Get-ItemProperty -LiteralPath "HKCU:Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "ProxyEnable"

Get-ItemProperty -LiteralPath "HKCU:Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "ProxyServer"

Get-ItemProperty -LiteralPath "HKCU:Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "ProxyOverride"
```
JSX内で配列・オブジェクトをループ処理する

# 環境
- Node v18.0.6
- Next.js v12.1.6
- React v 18.1.0
# ループ処理する
## 配列で与えられた場合
```jsx
  const array = ["apple", "banna", "pear"];
```
mapメソッドを使います。

```jsx
return (
  <>
    {array.map((fruit) => {
      return <div>{fruit}</div>;
    })}
  </>
);
```
一応は描画されますが、コンソールに「keyがありません」と警告が出ます。
ループ処理したReact要素にはkeyプロパティをつけると、Reactが差分レンダリングに活用してくれます。
keyは兄弟間で一意なものであればなんでもいいです。
この場合使えるのはfruit(フルーツの名前)か、配列のインデックスです。
今回はインデックスを使いますが、本当はあまり良くないです。後述。

```jsx
  return (
    <>
      {array.map((fruit, index) => {
        return <div key={index}>{fruit}</div>;
      })}
    </>
  );
```
## オブジェクトで与えられた場合
```jsx
  const obj = { fruit1: "apple", fruit2: "banana", fruit3: "pear" };
```
Object.keys()でオブジェクトのキーを配列で取得し、その配列のmapメソッドを使います。
```jsx
return (
  <>
    {Object.keys(obj).map((key) => {
      return <div key={key}>{obj[key]}</div>;
    })}
  </>
);
```
配列の時と同様に、keyをつけます。今回はオブジェクトのキーがあるので、それを使いましょう。
```jsx
  return (
    <>
      {Object.keys(obj).map((key) => {
        return <div key={key}>{obj[key]}</div>;
      })}
    </>
  );
```
## なぜインデックスをkeyにしないほうがいいのか
配列のある要素が常に同じインデックスを持っている保証がないからです。

今回のコードではただ配列を描画しましたが、実際にアプリを作る際には配列の内容が変化していく事が考えられます。
例えば「購入した果物のリスト」を描画したいなら、
購入した果物用の配列を用意して、ユーザーが購入するたびにそれを更新して...というふうになるでしょう。

新しい果物を配列の後ろに追加する分には問題ありませんが、前から追加したり、ソートしたりすると更新のたびに既存の要素のインデックスが変わってしまいます。つまりkeyが変わってしまいます。
Reactはkeyを頼りに差分レンダリングを行うので、これはバグに繋がります。

配列に変更がある可能性があるときはインデックスをkeyに使うのは避けるべきです。
逆に言うと、今回のサンプルコードの場合はインデックスでも十分です。

参考欄に載せたのZennの記事がとてもわかり易かったです。

# 参考

https://stackoverflow.com/questions/39965579/how-to-loop-an-object-in-react

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

https://reactjs.org/docs/lists-and-keys.html

https://zenn.dev/luvmini511/articles/f7b22d93e9c182
pyaudioインストール時、portaudio.h が見つからない

M1 mac 特有ではないと思うのですが、 pyaudio をインストールするときに portaudio.h が見つからないというエラーでインストールできなかったので、解決策をメモします。

```
brew install portaudio

# あらかじめ portaudio.h やライブラリが指定のパスに存在することを確認済み
python -m pip install --global-option='build_ext' --global-option='-I/opt/homebrew/include' --global-option='-L/opt/homebrew/lib' pyaudio

WARNING: Disabling all use of wheels due to the use of --build-option / --global-option / --install-option.
Collecting pyaudio
  Using cached PyAudio-0.2.12.tar.gz (42 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: pyaudio
  Building wheel for pyaudio (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  × Building wheel for pyaudio (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [10 lines of output]
      running bdist_wheel
      running build
      running build_py
      running build_ext
      building '_portaudio' extension
      src/_portaudiomodule.c:31:10: fatal error: 'portaudio.h' file not found
      #include "portaudio.h"
               ^~~~~~~~~~~~~
      1 error generated.
      error: command '/usr/bin/clang' failed with exit code 1
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pyaudio
Failed to build pyaudio
ERROR: Could not build wheels for pyaudio, which is required to install pyproject.toml-based projects
```

多くの解説がこれでインストールできるとあるのですが、私はできませんでした。

解決策として、 ${HOME}/.pydistutils.cfg に次の３行を定義
```
[build_ext]
include_dirs=/opt/homebrew/include
library_dirs=/opt/homebrew/lib
```

この後 pyaudio がインストールできました。
```
(venv) pip install pyaudio        
Collecting pyaudio
  Using cached PyAudio-0.2.12.tar.gz (42 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: pyaudio
  Building wheel for pyaudio (pyproject.toml) ... done
  Created wheel for pyaudio: filename=PyAudio-0.2.12-cp38-cp38-macosx_10_14_arm64.whl size=37717 sha256=.......
  Stored in directory: /Users/xxxxxx/Library/Caches/pip/wheels/......
Successfully built pyaudio
Installing collected packages: pyaudio
Successfully installed pyaudio-0.2.12
```
使用 ffmpeg 压缩视频

```
ffmpeg -i input.mp4 -fs 10MB output.mp4

ffmpeg -i input.mp4 -b:v 6000k -b:a 320k output.mp4
```

码率其实就是 1 秒的视频大小，调整码率实际上是在调整压缩的算法，而压缩算法本质上就是描述像素信息的向量的基变换过程。这里可以提供几个标准化的码率供参考：1 部 1080p、30fps 的小电影码率在 3Mbps 到 5Mbps 之间；1 部 1080p、60fps 的小电影码率在 5Mbps 到 6Mbps 之间；1 部 4K、60fps 的小电影码率在 23Mbps 到 25Mbps 之间；1 部 4K 蓝光原盘的美剧码率在 60Mbps 到 120Mbps 之间。

前三个到目前为止都是用 h264 编码的，因为要考虑兼容性而且视频的大小即使用 h264 编码也不会离谱得超过 100GB，美剧一般使用 h265 压制 4K 蓝光原盘，因为如果不想画质损失严重还使用 h264 编码的话 1 小时美剧的大小可能要两三百 GB。

---

Ref：

https://www.bilibili.com/video/BV1Wa411H7CR
【1日目】競プロをSwiftで殴っていたアホが正攻法で再チャレンジするにゃん

にゃーん。猫です。

競プロをPythonでしばいていこうと思います。

Swiftで競プロをぶん殴っていた際はアルゴリズムがわからずつまづいていたので、初日はとりあえず本を買ってみることにしました。

買ったのはこちら。

https://www.amazon.co.jp/gp/aw/d/B00CY9256C/ref=tmm_kin_swatch_0?ie=UTF8&qid=&sr=#aw-udpv3-customer-reviews_feature_div

アフィじゃないです。買っても私には1円も入りません。

とりあえず届くまではちゅーるでも食べて待とうと思います。

にゃーん
Firestoreのセキュリティルール＆JSでのリスナー用のクエリ実装（配列のフィールドに特定値を含む）

## 前提

* フィールド `uids` に `uid` が含まれている場合、 `read` を許可する。
※とりあえず、 `read` にしているけど `write` とかも同様
* クライアント側（Firestore をリッスンする側は JavaScript の FirebaseSDK を使用する。
* リッスンの条件は 「フィールド `uids` に `uid` が含まれている場合」

## 実装

### データ構成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299475/420f3633-6c4b-0ce0-053e-996d614e4657.png)

### Firestoreのセキュリティルール

```
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if request.auth != null && request.auth.uid in resource.data.uids;
      allow write: if request.auth != null;
    }
  }
}
```

### FirebaseSDKでのクエリ

```javascript
const hogehogeRef = collection(db, "hogehoge");
const q = query(hogehogeRef, where("uids", "array-contains", "UIDの文字列",),);
```
Airflow資料抄訳(17)：コネクションとフック（Connections & Hooks）



恥ずかしながら最近になって知ったワークフローエンジン [Apache Airflow](https://airflow.apache.org/)。日本語の紹介記事もちらほら出てきていますが、[公式ドキュメント](https://airflow.apache.org/docs/)をちょっとずつ抄訳しながら読んでいこうと思います。

17目の今回は[コネクションとフック](https://airflow.apache.org/docs/apache-airflow/stable/concepts/connections.html)（Connections & Hooks）。
バージョン2.3.3時点のものです。

---

# コネクションとフック（Connections & Hooks）

ワークフローはしばしば他システムとデータのやり取りをします。そのためAirflowは外部異ステムとやり取りするときに使用する認証情報の保管をする重要なオブジェクトとしてコネクション（Connection）を用意しています。

コネクションは、ユーザー名やパスワード、そしてホスト名といった、接続先システムによりさまざまなパラメーターのセットです。一意性のある名前、`conn_id`を持ちます。

コネクションはWeb UIないしCLIで管理できます。コネクションを作成したり、編集したり、管理する方法については、[コネクションを管理する](https://airflow.apache.org/docs/apache-airflow/stable/howto/connection.html)を参照ください。コネクションの情報を保管する方法には複数の選択肢があり、カスタマイズもできます。

コネクションは、Pythonコードで直接利用したり、フックを通じて利用したり、[テンプレート](https://airflow.apache.org/docs/apache-airflow/stable/concepts/operators.html#concepts-jinja-templating)から利用したりできます。

```py
echo {{ conn.<conn_id>.host }}
```

## フック

フックは外部プラットフォームに接続するための高水準なインターフェースを提供します。フックのおかげでクイックかつ容易に外部とのやり取りが可能になります。低水準のコードで外部APIを呼び出したり特殊なライブラリを使用したりする必要はありません。フックはまたしばしばオペレーターの構成部品として利用されています。

これらのフックは認証方法を集約するためにコネクションを統合しており、しばしばデフォルトの`conn_id`を持ちます。例えば、`PostgresHook `はとくに指定されていない場合、` postgres_default  `という` conn_id  `を持つコネクションを参照します。

APIドキュメントで[Airflowが提供するすべてのフックの一覧]( https://airflow.apache.org/docs/apache-airflow/stable/python-api-ref.html#pythonapi-hooks)をご覧になれます。

## カスタム・コネクション

独自のコネクション型を定義することもできます。これについては[プロバイダー・パッケージ]( https://airflow.apache.org/docs/apache-airflow-providers/index.html)のページで詳細に説明されています。プロバイダーはあなたが独自のコネクションを定義するのを助けてくれます。コネクションのカスタマイズはいずれのプロバイダーでも可能ですが、コミュニティにより管理されているプロバイダーの多くが独自のコネクション型を定義しています。Airflowコミュニティが管理するすべてのプロバイダーの一覧は[コネクション](https://airflow.apache.org/docs/apache-airflow-providers/core-extensions/connections.html)のページで確認できます。

---

コネクションを使ってごりごりコードを書くよりも、フックを使ってスマートに構築・保守できるDAGを書くようにすべし、と。
これまで見てきたタスクやオペレーターに関する説明の中でしばしばフックが登場するので気になっていました。それで今回このセクションを訳出してみました。
FASTQ形式の内容を知ろう

# FASTQって？
ゲノムシーケンスデータの形式です。イルミナなどによって読まれた**塩基配列**とその**クオリティスコアがテキストベースで記載されています。クオリティスコアはASCII文字で表されます。そのため、基本的に内容は見れないのですが、「何が書かれているか」を知っておく事は必要です。

今回はその構成を、自身の備忘録的な役割を兼ねて紹介します。

# FASTQの内容を知ろう
### どんな構成？
１リード分の構成は以下の様になっている。
***
1行目　ID（ヘッダー）
2行目　塩基配列
3行目　IDまたは改行
4行目　信頼値 
***
１行目のIDは配列に紐付けされる名前みたいなものです。ゲノムがペアエンドで呼ばれた場合、ペア同士を対応させるためにも必要です。
２行目の配列の長さは、シーケンサーによって変わります。例えば、リード長が100baseであれば、２行目には100個分の塩基配列が記載されます。
3行目では、IDが再度記載されたり、改行されたりします。行頭に+と記されます。
４行目では、各塩基単位の信頼値が記載されます。

このセットが、幾つも一つのファイルにまとめられます。
例えば以下のような記載です。[こちら](https://bi.biopapyrus.jp/rnaseq/qc/fastq-quality-score.html)
から引用。
```sequence.fq
@SRR1170086.1 HWI-ST845:120525:D10G7ACXX:8:1101:9728:1999 length=50
GTTTTTAAAATGAGTTTGCAAATATTACTGTATTTTTNTCCCATGCTTTT
+SRR1170086.1 HWI-ST845:120525:D10G7ACXX:8:1101:9728:1999 length=50
11=DDFFFFHHGFIGGIIJJJJIJJJJJJIIIIIJJJ#1?DHIJJIJIII
@SRR1170086.2 HWI-ST845:120525:D10G7ACXX:8:2316:19897:100799 length=50
CGATGGAATAGATTTCTCCAAGTTAGTTGGAGGCTAGTCTTCTCTACATA
+SRR1170086.2 HWI-ST845:120525:D10G7ACXX:8:2316:19897:100799 length=50
???DADDA:++22C::4:::AA33C,,,2EFECB;ED9D4?4*0?D0B9B
```
### クオリティスコアの意味は？
Fastq形式４行目の信頼値はASCII文字で記載されます。[ASCII文字]()から数値（*ASCIIcode*)に変換し、数式に代入することでクオリティスコア（*Q*）が出せます。さらにその値を数式に代入することで、シークエンシングエラー(*P<sub>error</sub>*）を導出できます。シークエンシングエラーは、対応する塩基がエラーである確率を意味します。
以下数式です。
```math
Q=(ASCIIcode)-33\\
P_{error}=10^{\frac{-Q}{10}}
```
ASCII文字はこんな感じ
<img width="400" alt="ASCII.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2519906/8c281b0d-700e-39cd-dc8c-3eb7bf9d7609.png">

### クオリティスコアを出してみよう
上記のFASTQの例を用います。
ID:SRR1170086.1の４行目左から3個目の「=」で考えます。 
ASCII表をみると=は61なので、*P<sub>error</sub>*は以下のように導出できます。
```math
ASCIIcode=61\\
Q=61-33=28\\
P_{error}=10^{\frac{-28}{10}}=0.0015848
```
すなわち、『３個目のTがエラーである確率は0.0015848』という事です。

# 余談　エラーの確率は後配列になるほど高い？
下図は配列ごとのクオリティスコアをグラフしたものです。配列が右（後ろ）になるにつれ、スコアが低下していることがわかります。上述した数式を見ればわかるのですが、スコアが低いほどエラーは大きくなります。
<img width="400" alt="Quality.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2519906/d55e4939-36a8-2a65-804b-2a48563617b6.png">

実際にFASTQを用いる際は、クオリティチェックとトリミングが欠かせません。これに関しては別記事にてまとめます。

# 終わりに
FASTQを用いる際は、内容を把握することが大切です。
ReactにおけるhtmlFor



## 間違い例

Reactでlabelタグにforを設定するとエラーが表示されます。

```App.tsx
      <label for="name">Name</label>
      <input id="name" type="text" />
```

## 原因

Javascriptの予約語のforと混同されるため

## 対応

下記の通りhtmlForに変更します。

```App.tsx
      <label htmlFor="name">Name</label>
      <input id="name" type="text" />
```

classがclassNameとなるのと同様です。

https://reactjs.org/docs/dom-elements.html
Rustの配列やベクタ、スライスについて

## はじめに

現在Rustを勉強していますが配列やベクタ、スライスの違いに混乱したので
それぞれの特徴を整理してまとめました。
この記事では具体的な使い方よりもデータ構造を中心に解説します。

## スタックとヒープ

配列やベクタの仕組みを理解するには、メモリの知識が必要になるので簡単に解説します。
メモリの領域には大きく分けてスタックとヒープの2種類があります。
※厳密には他にも領域はありますがここでは割愛します
スタックの特徴は以下の通りです。

* ローカル変数や関数の引数等の割当先

* LIFO(最後に追加したデータを最初に取り出す方式)

* アクセス速度は速い

ヒープの特徴は以下の通りです。

* 大容量のデータや動的にサイズが決まるデータの割当先

* アクセス速度は遅い

## 配列

配列の特徴は以下の通りです。

* 型は`[要素の型; 要素数]`

* 固定長

* コンパイル時にサイズが決まる

* 要素はスタックに格納される

配列を宣言した場合のメモリ配置は下図の通りです。

```rust
let a: [i32; 5] = [0, 1, 2, 3, 4];
```

![array.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2693350/73253638-c78f-75ec-dfbb-358b414eb243.png)

## ベクタ

ベクタの特徴は以下の通りです。

* 型は`Vec<要素の型>`

* 可変長

* 実行時にサイズが決まる

* 要素はヒープに格納される

* 以下のデータを保持する
  
  * ヒープへのポインタ (ptr)
  
  * 要素数 (len)
  
  * 保持できるサイズ (capacity)

ベクタを宣言した場合のメモリ配置は下図の通りです。
ベクタ自体はスタックに格納されます。

```rust
let v: Vec<i32> = vec![0 ,1, 2, 3, 4];
```

![vector.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2693350/c1eece27-cbd3-f634-4176-545ed5982f4e.png)

## スライス

スライスの特徴は以下の通りです。

* 型は`&[要素の型]` (可変は`&mut [要素の型]`)

* 配列やベクタへの参照

* スライス自体は要素のデータ領域を持っていない

* 実行時にサイズが決まる

* 以下のデータを保持する
  
  * 配列(またはベクタ)の要素へのポインタ (ptr)
  
  * 要素数 (len)

スライスを宣言した場合のメモリ配置は下図の通りです。
スライス自体はスタックに格納されます。

配列のスライスならスタックの要素を参照します。

```rust
let a: [i32; 5] = [0, 1, 2, 3, 4];
let s: &[i32] = &a[1..4];
```

![slice1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2693350/a487ece0-e90c-4804-29e7-aed9f7e55ae6.png)

ベクタのスライスならヒープの要素を参照します。

```rust
let v: Vec<i32> = vec![0, 1, 2, 3, 4];
let s: &[i32] = &v[3..];
```

![slice2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2693350/3341a487-ef12-f977-0492-767395d4091a.png)

## おわりに

自分は普段Pythonで書いているので、メモリについてはほとんど意識していませんでした。
ですがRustでプログラムを書くにはメモリ関係の知識がないと色々苦労します。
図を作成したおかげで理解がより深まった気がします。

## 参考文献

https://doc.rust-jp.rs/rust-by-example-ja/primitives/array.html

https://doc.rust-jp.rs/rust-by-example-ja/std/vec.html

https://doc.rust-jp.rs/book-ja/ch04-03-slices.html
入力装置

# その他のハードウェア
コンピュータはキーボードとディスプレイがないと働かない。
入力と出力が大事

## 気づき
入力がないと指示ができないし、出力がないと結果を確認できない。
入力と出力は形がないからいろんな形のものがあるのか。

# キーボードとポインティングデバイス
文字や画像、音楽、動画など、さまざまなデータを処理させることができる機械。
## キーボード
文字や数字を入力するための装置

## ポインティングデバイス
位置情報を入力する装置
位置情報の伝え方には様々ある。
### マウス
マウス自信を動かす。

### トラックパッド
パッド上で指を動かす。
ノードパソコンでマウスの代わりに搭載されていることが多い。

### タッチパネル
画面に直接触れる。

### タブレット
パネル上で専用のペン等を動かす。

### ジョイスティック
スティックを前後左右に傾ける。

## 気づき
ポインティングデバイスには様々あるんだな。

# 読み取り装置とバーコード
入力装置の中でも```「処理対象とするデータそのものを入力する」```役割もある。

### イメージスキャナ
```絵や写真```を画像データとして読み取るための装置。

### OCR（Optiocal Character Reader)
```印字された文字```、もしくは```手書き文字```などを解析して文字データとして読み取る装置

### OMR（Optical Mark Reader)
```マークシート```の塗り潰し位置を読み取る装置。

### キャプチャカード
```映像```をディジタルデータとして取り込むための装置。

### ディジタルカメラ
フィルムの代わりに、```DDC（Charage Coupled Device：電荷結合素子)```などを使って、画像をディジタルデータとして記録する装置。

### バーコードリーダ
```バーコード```を読み取るための装置。
バーコードには２種類がある。

#### JANコード
```白黒の帯```によって１３桁（標準タイプ）か８桁(短縮タイプ)の数字を表現する。

#### QRコード
```縦横を使う```ことでより多くの情報が持てるようになった２次元バーコード。
三個の```検出シンボル```によって```回転角度```と```読み取り方向```が認識できる。
kotlinにtuplesコードを公開しました。

仕事でよくtuplesを使うが、kotlinにはPairとTripleしかなくて、少し不便だと思い、kotlinTuplesで公開しました。
全く技術的なところはないですが、皆さんの無駄を省く観点で見て頂ければ幸いです。

repository: https://github.com/qinritukou/kotlinTuples
生データ(raw data)のカテゴリーデータからグラフを作る - グルーピング

# 目的
月ごとに利用者数を折れ線グラフで表現したい。

# 使用するデータ
SIGNATEさんの練習問題として公開されている[「レンタル自転車の利用者予測」](https://signate.jp/competitions/114) のtrain dataを使います。

# データの構成
月を表す'mnth'と利用者数を表す'cnt'を使ってグラフを作ります。その前にデータを確認しましょう。

1月から12月まで数字が入っているか確認します

```Python
print(df['mnth'].value_counts()) 
```

データの件数と利用者数の件数（合計人数ではない）が一致するか確認します。
```Python
print(df['cnt'].count())
```

# 誤ったグラフの作り方
グラフを作るために
```Python
import matplotlib.pyplot as plt
```
を実行して、変数をそのまま投入します。
```Python
x = df['mnth']
y = df['cnt']
plt.plot(x,y)
```
あれっ？思っていない出力でグラフが描かれました。
![Graph_NoGrouping.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688182/904c8c4f-e829-0cd0-d570-880c120826d5.png)

困りました・・・

# 正しいグラフの作り方 - グルーピング
X軸に月を持ってきたいので、月を連続データではなくカテゴリーのような働き方をさせるために、1から12をそれぞれグループにします。

```Python
df2 = df.groupby('mnth').sum()
```
これを実行して1月から12月までをIndexに作ります。こんなイメージです。

![Graph_Grouping.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688182/2eecac87-c20f-5907-0952-8260991c6fc6.png)

表側に1から12まで並んでいます。'mnth'を月ごとに合算したことになっています。利用者数'cnt'も1月から12月まで合算されています。

これでグラフを作成します。

```Python
import matplotlib.pyplot as plt

# monthをグルーピング(グルーピングしたmonthはindex)
df2 = df.groupby('mnth').sum()

x = df2.index #これがgroupbyした'mnth'です。
y = df2['cnt']
plt.plot(x,y)
```
グラフの出力も期待していた通りです。
![Graph_Grouping_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688182/1442e107-2391-3d99-34f5-ec5b576c2388.png)

# まとめ
X軸で表現したデータが数値の時は、グルーピング(groupby)しましょう。
```Python
groupby('グルーピングしたい変数名')
```
そしてgroupbyの後に何をしたいのか書く事も必要です。今回はグルーピングして合計を出したいので
```python
groupby('グルーピングしたい変数名').sum()
```
というように書きます。
新人がプロジェクトを任された時に伝えたい事

# 概要
やぁ、PLとして初めてプロジェクトを任されたそこの君！！

今からプロジェクトを任された時の注意事項とやった方が良い事を書いていくよ！！

殆どが失敗から気付いた事なので、僕と同じ失敗をせずにプロジェクトを進行できるようにしよう

> 主に弊社の新人へ向けてです。全ての新人や会社に該当するかは怪しいです。
数年後にはここに書いた事が、自分の中で「え、当たり前じゃん」となってしまいそうなので文字として残します。

# キックオフ・要件定義

さぁ！プロジェクトが始まった！・・・えっ、何したらいいの？情報何も無くない？そのうち顧客から色々情報くれるでしょ・・・

**くれません** 

基本的に顧客からは欲しい情報は来ません。
自分で今回のプロジェクトでどういう情報が必要かを精査して、聞き出さないと行けません。

## キックオフからやるべき事
  - 顧客の業務の理解度を高める
    - 資料を貰っているのであれば読む
    - 不明点や気になった情報はまとめて聞き出す
      - 返答などを自分の頭の中だけではなく、プロジェクト用にまとめ直す
  - システム化したい業務箇所(スコープ)を割り出す
    - システム利用を想定して業務フローを作成する（シーケンス図がおすすめ）※1
    - 何の業務が **核（力を入れる機能）** になりうるかを導き出す


プロジェクト初期段階では、こちらが何も知らない状態からスタートするのはごく当然の事なので、
**「分からない状態」** に対して不安を抱いたり、萎縮する必要はありません。

知れば知るほどプロジェクトに対して不安要素が増えていきますが、
初期段階では **「不安要素を見つけ出す」** フェーズでもあるので、寧ろ不安要素を見つける度にガッツポーズしましょう！！

> ※プロジェクト中盤などで不安要素が続々出てくるとメンタルもやられ、プロジェクトも遅延しがちです。
100%不安要素を初期段階で潰しきるのは不可能なので、
~~後半に楽をする為に~~ 中盤にトラブらない為に出来るだけ見つけ出しましょう。

``※1 このようなものですMermaidで作るのがオススメ``

```mermaid
sequenceDiagram
Actor 顧客
participant システム
Actor システム管理者
Actor 一般社員

システム管理者 ->> システム:アクション
一般社員 ->> システム:アクション
顧客 ->> システム:アクション

```

## スケジュール感

大体の案件は要件定義前にスケジュールを定めるので、発見できた問題次第で「この納期だと厳しそうだな」となる可能性があります。

早い段階で分かれば、「この問題は次回に持ち越しましょう」「この機能は規模を小さめにしましょう」などの解決に繋げられます。

> 正直な所、最初から各課題の重要度やスケジュール感は掴めません。
問題となりそうな所（自分判断でOK）をまとめて上長に相談してみましょう

## 超絶注意事項🔥
- 基本的に助けは来ません、求めると来るかもしれません
- プロジェクトの進め方に正解は無い
  - (※PMですら知りません、あるのは経験と培った手札です)
  - 手札は見せてくれないので注意
- 1人で情報を抱え込まない
    - 上司や同僚に共有しつつ、ドキュメントとして書き残しましょう
    - 顧客とのやり取りの記録や、どういう経緯で仕様が決まったか。など。
- 何したら良いか分からなくなったら
    - 上司や同僚に現状を話しつつ頭を整理しましょう
    


# モック作成

恐らくPMからモックの作成の指示が来ると思います。
システムイメージを掴んでもらうために、システムの「ガワ」だけを用意するというものです。

よく起こるのが、 **「画面のサンプルを用意したら良いのかな？」** という認識でモックを作成し、
あまり役に立たないというケースが多々あります。

詳細に作りこむ必要はなく、質よりも速度と量が求められます。

## PMが求めるモックというのは
- 顧客の業務に沿って動かせる各機能の画面遷移
  - この画面で○○をして××が起きる
    - そしてこの画面につながる
- サンプル画面を切り貼りしただけのものでは無い


## PMの求めているモックの目的
  - こちらが認識出来ていないシステムに必要な業務情報を引き出す
  - システムの運用イメージを掴んでもらう
  - 顧客との認識を擦り合わせる
  - スコープを明確にする
    - スコープ外は仕様変更だと言える、立場が上の状態で交渉できる


# 開発

大体アルティメットアジャイル開発になります。

ウォーターフォールより融通が効くので開発はしやすいのですが、
何処からが改修、何処からが仕様変更なのかの区別が大変難しいので、
調整を間違えると納期に間に合いません。

なので要所要所で仕様を区切る必要があります。

## 超絶注意事項🔥
- 「この機能も欲しいです！」は**絶対に聞き入れるな**。
  - 一度許すとずるずると開発期間が延びる
  - 追加機能の実装だけでは済まない場合が多い、他機能への影響範囲も考えろ
  - 顧客の為に予算詰め詰めに作ってもクオリティが低くなるため客は満足しない
  - 次回のフェーズに持ち越せ
- 各機能の確認シートを作れ
  - 確認がされてから要望が来たら仕様変更だ
  - 無償でやるか有償でやるかはPMに判断を投げよう
  - 大事なのは **仕様変更** である事が証明出来る事。こちらの立場が全然違う。

# テスト

テスト用の工数を必ず確保しましょう。

4ヶ月の開発期間の場合、4ヶ月で「開発が」終わるようにスケジュールを立てると大体死にます。

基本的にバグの無いシステムなんてありません。単体テストをしながら開発をしていても必ずどこかでバグっています。

初期流動で死なない為にテストしてバグをキッチリ取り除く工数を確保しましょう。

### 超絶注意事項🔥
- テストは一人でやらない方がいい、誰か同僚を巻き込もう
    - 自分が想定した通りにしか自分は動かさない為あまりテストの意味がない
    - 実際の業務を想定して、運用手順を説明しつつ誰かに動かしてもらいましょう