OmniAICreator/Qiita-1.07M huggingface dataset:
SQLServerの特定インスタンスのみ重い事象

## 概要

SQLServerの特定インスタンスだけは異様に重い事象が発生。
元々は当然重くはなかったが、気づいたら重くなっており超簡単なSQLですら数秒掛かる始末。

「DBが重い」「SQLが重い」などではなく、それらを上位に位置するインスタンスが重いという最悪の状況。

## 実施したこと

「SQL構成マネージャー」の「名前付きパイプ」を「有効」へ。

上記設定を有効にしただけで12秒かかっていたSQLが2秒（これでも遅い気はする）へ。

まだ変更したばっかなので、今後しばらくは様子見。
変更直後では改善の兆しが見られました。

## その他
- 本番環境では発生していなかったので、その環境を使う一部担当者からぶーぶー言われる状況。
- 気づいたきっかけは本番環境の設定と比較したため。
- ぐぐっても「DBが重い」とか「SQLが重い」とかそっちでしか検索結果が出ず、割と途方に暮れていました。

## 追記
- 2021/07/23追記分：他のSQLなども試していたがいうほど軽くなっておらず。

～以上～
動画内で特定の画像とほぼ一致する場面を探すやつ

# YouTube投稿時に前後の余計な部分をトリミングするのが結構めんどくさい

<iframe width="560" height="315" src="https://www.youtube.com/embed/1B3jFyvc9Ic" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

上記動画[^1]はうまいことバトル開始から始まっているのですが、実はこの直前に待合室みたいな場面があって、そこは要らないので削っています。
この作業がマウスでちまちまとやる作業でとってもめんどくさい。

# 自動化するならこんな感じ？

* バトル開始直後の暗転する場面の時間を取得
* 暗転からだとちょっと遅いので上記から1～2秒差し引く
* 算出した時間をffmpegに渡してトリミングしてもらう

まずはこれだけやろうかね。

# 暗転する場面の時間を取得

暗転と比較する用の画像（blank.png、640x360）をGIMPで作りました。
![blank.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147207/f10dd130-9b32-a8e1-d5e1-1d9289c39139.png)

次にソースです。
OpenCVのインストールとか使い方とかその辺は割愛。もっと詳しい人がたくさんいるのでそっちを見てください。

```python:colocut.py
import cv2
import sys

# 比較用画像
im_blank = cv2.imread('blank.png')
hist_blank = cv2.calcHist([im_blank], [0], None, [256], [0, 256])

# 動画読み込み
filename = sys.argv[1]
cap = cv2.VideoCapture(filename)

if not cap.isOpened():
    print('Could not open cap', file=sys.stderr)
    sys.exit(1)

fc = cap.get(cv2.CAP_PROP_FRAME_COUNT)
fps = cap.get(cv2.CAP_PROP_FPS)

# 比較用画像とほぼ一致する場面の時間を取得
startfc = 0
for i in range(0, int(fc)):
    (ok, frame) = cap.read()
    if ok:
        hist = cv2.calcHist([frame], [0], None, [256], [0, 256])
        ret = cv2.compareHist(hist_blank, hist, 0)

        # 完全一致にならないのでヒストグラム化して99%一致でOKにする（よくわからん）
        if ret > 0.99:
            startfc = i
            break

# 秒
print(startfc / fps)

cap.release()
cv2.destroyAllWindows()
```

`frame`が配列型で返ってくるし比較対象も単純な暗転画面だし、単純に配列同士で比較してやればいいだろうと思ったら意外にもうまくいかなかったんですよね……
仕方ないので画像をヒストグラム化して比較、99%一致していたらOKという怪しい方法を取っています。

この99%という数字にも実は全く根拠がなくて。動画からいくつか静止画像を切り出してポチポチやっていたら、 **85%よりは99%の方がなんとなくいい感じだ** ってなっただけです。このへんは機械学習とかを専門にやっている人じゃないと何とも言えないんでしょうね。

めんどくさいことを避けようとしたらさらにめんどくさくなっている件。

[^1]: (C) ARMOR PROJECT/BIRD STUDIO/SQUARE ENIX All Rights Reserved.
Node.jsインストール方法

Node.jsというwebページ作成に便利なものがあることを知ったので、インストールから使い方まで説明していこうと思います。

# 動作環境
* OS : macOS Big Sur　11.4
* Node.js : 14.17.3 LTS

# Node.jsのインストール
* 以下のURLから推奨版をインストールしてください。個人的には最新版は不具合の影響でうまくいかなかったりするため推奨版を使用
https://nodejs.org/ja/

# Node.jsのプロジェクトを作成

* 以下のコマンドを実行し、プロジェクトを作成

  ~~~
  $ npx create-nuxt-app [プロジェクト名]
  ~~~

* 途中で以下のような質問が聞かれるので、Package managerはNpmに設定し、それ以外はデフォルトの設定にしました

~~~
? Project name: sample_project
? Programming language: JavaScript
? Package manager: Npm
? UI framework: None
? Nuxt.js modules: (Press <space> to select, <a> to toggle all, <i> to invert se
lection)
? Linting tools: (Press <space> to select, <a> to toggle all, <i> to invert sele
ction)
? Testing framework: None
? Rendering mode: Universal (SSR / SSG)
? Deployment target: Server (Node.js hosting)
? Development tools: (Press <space> to select, <a> to toggle all, <i> to invert 
selection)
? What is your GitHub username? wataru-sakuraba
? Version control system: Git

~~~
* ディレクトリ構成
 * 以下のようなディレクトリが作成される

~~~
.
├── README.md
├── components
│   ├── NuxtLogo.vue
│   └── Tutorial.vue
├── node_modules
│   └──多いため省略 
├── nuxt.config.js
├── package-lock.json
├── package.json
├── pages
│   └── index.vue
├── static
│   └── favicon.ico
└── store
    └── README.md
~~~

* 必要なモジュールをインストール

~~~
$ npm install
~~~
* プロジェクトを実行

~~~
$ npm run dev
~~~

* 以下にアクセスし、Node.jsの画面が表示されれば成功
http://localhost:3000/
MySQLで指定行のみ最初に並び替えて取得

MySQLで指定のレコードを先頭にする（任意の順にする）ORDER BYの記述方法。

## やりたいこと
こんなテーブルがある。

【テーブル：job_name】

| id | name |
| --: | :-- |
| 1| 細工師 |
| 2 | 作家 |
| 3 | 狩人 |
| 4 | 漁師 |
| 5 | 鋳物師 |

これをid=4の「漁師」を先頭にして取得したい。

### 実装その1 CASE文
idが4の場合0に置き換えて、昇順で取得する。もしidが0未満のレコードがあるなら最小値を指定する。
id=4以外のレコードはid順になる。

```SQL
SELECT name FROM job_name
ORDER BY CASE id WHEN 4 THEN 0 ELSE id END ASC;
```

### 実装その2 ORDER BY FIELD
`FIELD`はMySQL独自の記法。
FIELDで指定したid=4が一番後ろに来る。`DESC`で逆順にすれば良い。

```SQL
SELECT name FROM job_name
ORDER BY FIELD(id, 4) DESC;

-- 全行指定する場合はDESCは不要
SELECT name FROM job_name
ORDER BY FIELD(id, 4, 1, 2, 3, 5);

```

### 実装その3 idを指定
指定したid=4が一番後ろに来る。`DESC`で逆順にすれば良い。

```SQL
SELECT name FROM job_name
ORDER BY id = 4 DESC;
```


# あとがき
* 実装その2、その3のid:4以外の指定してしない行は順番未指定の状態なので注意。
* 「idを指定してソート」は多用すると分かりづらいので、書き方を工夫するか、場合によっては「ソート順」のカラムをテーブルに追加するのも検討したい。もしくは取得後にプログラム内で並び替えるのも良いかも。

## 参考
* イコールで指定　https://qiita.com/_Keitaro_/items/d6a461a12c433c3066a8
* FIELD　https://gendosu.jp/archives/1210
* CASE　https://toku1.jp/mysql-orderby-case/
* FIELD関数の仕様　https://atsuizo.hatenadiary.jp/entry/2016/07/27/150000
【React】Reactアプリをgit cloneしてもyarn startできないのはなぜか

#はじめに
他の人が公開してるReactアプリをlocalで立ち上げてみたい！
と思って、GitHubからcloneしてきた時、すぐに`yarn start`をしてもブラウザが立ち上がりませんでした。

```
yarn run v1.22.10
error Command "start" not found.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
```
というエラーが出てしまって、疑問に思ったのでそのまとめです。
※初学者が書いておりますので、誤っている箇所についてご指摘あればお願いいたします。

#結論

`yarn start`の前に、

```
yarn install
```
をしましょう！
ちなみにYarnではinstallは省略できます。

#なぜyarn installが必要なのか

プロジェクトルートに存在するpackage.jsonの記述に従って、依存関係のあるパッケージを全てインストールするためです。

※まだ理解が浅いため、今後肉付けしていきます。

下記の書籍が大変参考になりました。
[大岡由佳 りあクト！ TypeScriptで始めるつらくないReact開発 第3.1版【Ⅰ. 言語・環境編】](https://oukayuka.booth.pm/items/2368045)

#その他のyarnコマンド

そもそもYarnとはパッケージマネージャーです。
メインの役割はパッケージモジュールの管理になります。

<dl>
  <dt>yarn add PACKAGE_NAME</dt>
  <dd>指定したパッケージをインストールします。</dd>
  <br>
  <dt>yarn remove PACKAGE_NAME</dt>
  <dd>指定したパッケージをアンインストールします。</dd>
  <br>
  <dt>yarn upgrade PACKAGE_NAME</dt>
  <dd>指定したパッケージを最新バージョンに更新します。</dd>
  <br>
  <dt>yarn info PACKAGE_NAME</dt>
  <dd>指定したパッケージについての情報を表示します。</dd>
</dl>

**package.json**ファイルを編集し、 再度`yarn install` することで、
`yarn add` や `yarn remove` と同じことができます。

##参考

https://oukayuka.booth.pm/items/2368045
【UiPath】実行マシンの情報を取得する（ディスク容量）

# はじめに

この投稿は、RPAツール「UiPath」での 実装例 について記事です。

UiPathのコミュニティ「UiPath Friends」が企画する「UiPathブログ発信チャレンジ2021サマー」の 22日目の投稿でもあります。

企画の内容は [**こちら**](https://note.com/shumpei_w/n/n651cbdbec4e8) 。カレンダーのURLは [**こちら**](http://u0u1.net/sUwZ) です。

https://twitter.com/ShumpeiWatanabe/status/1405168150736359427

# 実行マシンの情報を取得するシリーズ

同様の内容で以下の投稿もあります。参考まで

https://qiita.com/miya_gis/items/3393940487f49ed7fe16

https://qiita.com/miya_gis/items/fd6ff3b603d7b297d0a0

# ディスク容量を取得したいとき

例えば「データダウンロード」系のロボットを連続で動かしていると「いつの間にかディスク容量が減っている」ことがあります。
また、ロボットと同じ場所で「データベース等のアプリケーション」が動いていると、予期せず空きスペースがなくなることもあり、UiPath自体の動作に影響が出ることがあるので危険です。

Datadog や Zabbix 等の監視ツール、またはパフォーマンスカウンターなどを使えば「ディスク容量が閾値を下回った場合に通知する」ことも出来ますが、もっと簡単にディスク容量を取得したい。なので、UiPathで実装します。


# .NETで取得する

標準アクティビティで「ディスク容量を取得」アクティビティ みたいなのがあれば良いのですが、現時点では無いみたいです。

なので、以下のカスタムコンポーネントを作りました。

https://marketplace.uipath.com/listings/2383

![67ab.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/40467a7a-c610-5d2c-dc89-8c62a96fba0e.png)

作ったのですが「もっと簡単に取得しできないかな？」と思って、InVokeCodeで書き直しました。（持ち出しやすいように、匿名変数型にしています）

``` VB
func =	Function() As DataTable
		Dim dt As New DataTable
		dt.Columns.add("DriveName")
		dt.Columns.add("TotalSize(GB)")
		dt.Columns.add("TotalFreeSpace(GB)")
		dt.Columns.add("UseRate")
		dt.Columns.add("FreeRate")
		Dim aryDriveInfo As System.IO.DriveInfo() = DriveInfo.GetDrives()
		For Each item As System.IO.DriveInfo In aryDriveInfo
			If item.IsReady Then
				Dim dr As DataRow = dt.NewRow
				dr("DriveName") = item.Name
				dr("TotalSize(GB)") = (item.TotalSize / 1024 / 1024 / 1024).ToString("0.0")
				dr("TotalFreeSpace(GB)") = (item.TotalFreeSpace / 1024 / 1024 / 1024).ToString("0.0")
				dr("UseRate") = (100- (item.TotalFreeSpace / item.TotalSize * 100)).ToString("0.0")
				dr("FreeRate") = (item.TotalFreeSpace / item.TotalSize * 100).ToString("0.0")
				dt.rows.Add(dr)
			End If
		Next
		Return dt
	End Function
```

このコードをこんな感じでフローにして
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/8d0d8228-2922-6af2-f5f7-6edbab674784.png)

実行すると、以下のようにドライブの情報がデータテーブルとして取得できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/83833223-1d7c-8a1b-6fbf-78aac5f022c7.png)

確認しやすいように、以下にxamlを公開しています。

https://github.com/miyag/UiPath.ReusableCode/blob/master/GetMachineSpec/GetDriveFreeSpace.xaml

# 終わりに

いかがでしたでしょうか？ロボットフローの開始終了時、途中経過などでディスク容量を通知すると、増加傾向が分かって安心です。
実装の参考になれば幸いです。

この記事が参考になったら、 LGTMをお願いします。閲覧ありがとうございました。
UbuntuでLINEをAppのように使う

#まえおき
@north_redwing様の記事を全面的に参考にさせてもらいました。
誠に感謝申し上げます。
[その記事](https://qiita.com/north_redwing/items/357bf0cfbc17990a5276)


その中でも、記事通り進めることができなった箇所があったのでこの記事を書こうと思いました。

#環境
環境は参考記事と同じ
Ubuntu 18.04 LTS

#異なったこと
LINEのショートカットを作成してAppのようにすることろまではできました。
その後に、アイコンがそのままだとダサいで変更する方法が書かれています。

そこで、アイコンが入っているディレクトリのapp-idと編集するapp-idが私の場合異なっていました。


#行ったこと

```
$ cd /home/"username"/.local/share/applications
$ ls

chrome-"app-id"-Default.desktop
```

記事では、「chrome-"app-id"-Default.desktopというものが新たに作られているはずです。」って書いてあります。

しかし、私のterminalには知らないapp-idの名前が入ったものがありました。

一旦無視して
/home/""username""/.local/share/applications/chrome-"app-id"-Default.desktop
を編集しました。

そこのExecの欄はそのままで、Iconの中のapp-idを本来のものに変更すれば解決することができました。
【PHP】配列はタンスをイメージするとわかりやすいかもしれない〜添字配列編〜

# はじめに
PHPを勉強し始めたので、復習とメモ代わりに学んだことをまとめています。
今回は添字配列について。間違いやもっと良い方法があれば教えていただけますと幸いです。

# 配列とは
* 複数の値をまとめ`キー`と`値`のペアにしている。
* `キー`と`値`がペアになっているデータを配列の`要素`といい、配列には要素が追加された順番に並んでいる。
* 配列にはすべでのデータ型（数字、文字列など）の値を格納することができる。
* PHPには`添字配列（インデックス配列）`と`連想配列`の2種類がある。

## 私なりのイメージ
配列を「タンス」に見立てて、[0]段目（添字）の引き出しにはTシャツ（要素）、[1]段目の引き出しにはジーンズ、[2]段目の引き出しには靴下……というようにデータを格納しています。


# 添字配列の定義の仕方
## array関数を使う
arrayは配置や整列という意味の単語で、array関数を利用して変数に代入することのより定義することができます。

```php5
$clothes = array("シャツ", "ジーンズ", "靴下");
```

## ブラケット記号を使う
`[ ]`を使うやりかた。[ ]のことを`ブラケット記号`または`角括弧(かくかっこ)`といいます。
"かど"かっこではないので注意しましょう。私はよく間違えます。

```php5
$clothes = ["シャツ", "ジーンズ", "靴下"];
```

# 要素を取り出す
配列に入っている要素を取り出すには、取り出したい要素が入っている添字を指定しなければいけません。
`$clothes`だけだと何段目の引き出しを開ければいけないのかわからないですからね。

```php
echo $clothes[0];
// 「シャツ」が出力される
// $clothesという名前のタンスの、添字[0]段目の引き出しを開けるイメージ
```

# 要素を追加する
## array_push
もともとある配列に要素を追加します。新しく配列は作られません。

```php5
$clothes = ["シャツ", "ジーンズ", "靴下"];
array_push($clothes, "セーター");
```

```php5
print_r($clothes);

// 出力結果
Array
(
    [0] => シャツ
    [1] => ジーンズ
    [2] => 靴下
    [3] => セーター
)
```

## ブラケット記号を使う

```php5
$clothes   = ["シャツ", "ジーンズ", "靴下"];
$clothes[] = "セーター";
```

```php5
print_r($clothes);

// 出力結果
Array
(
    [0] => シャツ
    [1] => ジーンズ
    [2] => 靴下
    [3] => セーター
)
```

## array_merge
配列同士を結合します。結合したら新しい配列が作られます。


```php5
$clothesA = ["シャツ", "ジーンズ"];
$clothesB = ["靴下", "セーター"];
$clothes  = array_merge($clothesA, $clothesB);
```

```php5
print_r($clothes);

//出力結果
Array
(
    [0] => シャツ
    [1] => ジーンズ
    [2] => 靴下
    [3] => セーター
)
```

# さいごに
まだまだまとめられていませんので、随時追加してく予定です。
配列は重要な要素だと思いますのでしっかり学んでいきたいと思います！
NIST CSFまとめ

##はじめに
　先週DVAを合格しましたので、今日からセキュスペ学習を開始したのでその中ででてきた**NIST CSF**をまとめました。
　よろしくお願いします(｡･ω･)ﾉﾞ

##NIST CSFとは
　NISTとは、**National Institute of Standards and Technology**の略で**「米国国立標準技術研究所」**という機関になる。
　CSF（サイバーセキュリティフレームワーク）とはセキュリティ管理手法の概念・管理方針・体制の整備
　NIST CSFは、コア・ティア・プロファイルという3つの要素で構成されています。

　**　・コア：分類ごとにまとめられたサイバーセキュリティ対策の一覧
　　・ティア：分類ごとに対策状況を数値化し、その成熟度評価基準（4段階）
　　・プロファイル：組織のサイバーセキュリティに対する対応状況の現在と目標**

　コアには「特定（Identity）」「防御（Protect）」「検知（Detect）」「対応（Respond）」「復旧（Recover）」と5つの分類がされています。それぞれに複数のカテゴリーが含まれて合計23個のカテゴリがあります。

##CSFのコア機能：特定
　・**資産管理（ID.AM）**
　　　組織のビジネス目的達成を可能にするデータ、要因、デバイス、システム、施設をビジネス上の目標および組織のリスク戦略から見た相対的な重要度と矛盾しない形で識別し、管理します。

　・**ビジネス環境（ID.BE）**
　　　組織の命令、目標、利害関係者、アクティビティを理解し優先順位を設定します。この情報はサイバーセキュリティの役割、責任範囲、リスク管理上の意思決定を通知するために使用します。

　・**ガバナンス（ID.GV）**
　　　組織の規則上の欲求事項、法的欲求事項、リスク上の欲求事項、環境上の欲求事項、運用上の欲求事項が理解されているかどうかを管理および監視し、サイバーセキュリティリスクをシニアマネジメント層に通知するための方針、手順、プロセスです。

　・**リスク評価（ID.RA）**
　　　組織の運営（使命・機能・イメージ・社会的評価を含む）、組織の資産、個人に対するサイバーセキュリティリスクとして利用します。

　・**リスク管理戦略（ID.RM）**
　　　組織の優先順位、制約、リスク許容度、前提を明確化し、運用リスクに関する意思決定の裏付けとして利用します。
　
　・**サプライチェーンリスク管理（ID.SC）**
　　　組織の優先順位、制約、リスク許容度、前提を明確化しサプライチェーンリスク管理に関する意思決定の裏付けとして利用します。組織は、サプライチェーンリスクを識別し、評価、管理するためのプロセスを確立し、導入しています。
　　　
##CSFのコア機能：防御

　・**アイデンティティ管理とアクセス制御（PR.AC）**
　　物理的な資産と論理的な資産、関連施設にアクセスできるのは正当
な権限のあるユーザー、プロセス、デバイスのみに限定され、正当な権限のあるアクティビティやトランザクション
への不正アクセスに関して想定されている、評価済みのリスクに矛盾しない形で管理されている。

　・**意識向上およびトレーニング（PR.AT）**
　　　組織の要員およびパートナーに対して、サイバーセキュリティに関する意識
教育が提供され、関連する方針、手順、取り決めに従ってサイバーセキュリティ関連の義務および責任を果たすため
のトレーニングが実施されている。

　・**データセキュリティ（PR.DS）**
　　　情報及びレコード（データ）が組織のリスク戦略に従って管理され、情報の機密性、完全性、可用性が保護されている。
　　
　・**情報を保護するためのプロセスおよび手順（PR.IP）**
　　　セキュリティ方針 (目的、範囲、役割、責任、経営者のコミット
メント、組織間の連携を取り扱ったもの)、プロセス、手順が維持管理され、情報システムと資産の保護を管理する
ために利用されている。

　・**保守（PR.AM）**
　　　工業用制御システムと情報システムを構成している要素の保守及び修理が、手順に従って実施されている。

　・**保護技術（PR.PT）**
　　　システムと資産のセキュリティおよびレジリエンスを確保するために、関連する方針、手順、取
り決めに従って技術的なセキュリティソリューションが管理されている。

##CSFのコア機能：検知
　・**異常とイベント（DE.AE）**
　　　異常なアクティビティを的確なタイミングで検知し、当該のイベントが及ぼす潜在的な影響を把握する

　・**セキュリティの継続的なモニタリング（DE.CM）**
　　　情報システムと情報資産を別個の感覚で監視して、サイバーセキュリティイベントを洗い出し、保護手段の有効性を検証する

　・**検知プロセス（DE.DP）**
　　　異常なイベントがタイムリーかつ適切に認識されるように、検知のプロセスおよび手順を維持管理し、検査する。

##CSFのコア機能：対応
　・**対応計画の作成（RS.RP）**
　　　検知されたサイバーセキュリティイベントにタイムリーかつ確実に対応できるよう、対応のプロセスおよび手順を実施し、維持管理する。

　・**低減（RS.MI）**
　　　イベントの拡大阻止、影響の低減、インシデントの除去に向けたアクティビティを実施する。

　・**コミュニケーション（RS.CO）**
　　　当該する場合に、司法当局による外部からの支援を含めるよう、社内および外部の利害関係者と対応アクティビティについて協議する。
　
　・**分析（RS.AN）**
　　　十分な対応の保証及び復旧アクティビティの支援に向けて、分析を実施する。

　・**改善（RS.IM）**
　　　これまでの検知・対応アクティビティから得られた教訓を取り入れて、組織の対応アクティビティを改善する。

##CSFのコア機能：復旧

　・**復旧計画（RC.RP）**
　　　復旧のプロセスおよび手順を実施し、維持管理して、サイバーセキュリティイベントの影響を受けたシステムまたは資産をタイムリーかつ確実に復旧する。

　・**改善（RC.IM）**
　　　得られた教訓を以後のアクティビティに採り入れて復旧の計画及びプロセスを改善する。

　・**コミュニケーション（RC.CO）**
　　　復旧のアクティビティについてコーディネートセンター、インターネットサービスプロバイダ、攻撃側システムの所持者、被害者、ほかのCSIRT、ベンダーなど社内および外部の当事者と協議する。

##おわりに
　セキュスペを取りに行くうえでまずはNIST CSFとはなんぞやというのを勉強してきました。
　その中でAWS側の責任範囲や客の責任範囲などAWSサービスにおけるCSFへの準拠について詳しく見ることができました。
　
　(｡･ω･)ﾉﾞバイバイ
レーザー彫刻機2号機　カバー曲げ

#アクリルカバー曲げ加工
おしゃれな外形を選んでしまったので、カバーを曲げなければなりません。
こんなふうに、45度を２回
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664748/20720189-e265-12fe-c606-623a0c81a1ee.png)
ネットを調べて、アクリル曲げ治具を製作してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664748/c3529886-95bc-ee4e-16a7-6f127ea9755c.png)
１回目ー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664748/cbc0ca72-66f8-ff0c-6643-d8f59fb24b01.png)
２回目ー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664748/7d513129-0feb-e06b-5d8e-6b447648f4e2.png)
まあまあうまく曲げることができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664748/e9a40766-5d74-4c3e-5930-45bb59a774b0.png)

材料：
ラワンランバー材15mm厚1820x910（1枚）：　近くのホームセンター（カット込み3000円くらい）
電圧調整器4000W　：　amazon（1200円）
ニクロム線φ0.5mm 10m ： amazon（1100円）
引張ばね（20種類セット）　： amazon
アルミチャンネル2.0×15×15×2m  ： amazon （3800円）
トグルスイッチ　：　家にあったもの
AWG18電線　：　適量

4連休もステイホームなので色々捗ります・・・
基本データ型

<h2>基本データ型

<h4>基本データ型ってなに？</h4>
変数に格納される値の種類を定義するもので、別名「基底型」「プリミティブなデータ型」ともいいます。
基本データ型には byte，short，int，long，float，double，char，boolean の８種類のデータ型があり、値の種類によって「整数型」「浮動小数点型」「文字型」「ブール型」の４つに分類されます。
また、基本データ型以外にも「参照型」または「複合データ型」と呼ばれるデータ型があります。

<h4>基本データ型の説明</h4>

<h5>整数型</h5>
整数データを扱います。
整数型のデータは全て符号付きで、正負どちらの値も保持することができます。

| 　　データ型 　　  |      　 サイズ  　|               　　　　　　　　　　　　 値の範囲   　　　　　　　　　　　　 |
|:-----------------:|:------------------:|:------------------:|
| byte            |              1byte |        -128～127       |
| short          |            2byte |       	-32768～32767       |
| int            |              4byte |        -2147483648～2147483647        |
| long               |                8byte |         	-9223372036854775808～9223372036854775807        |


<h5>浮動小数点型</h5>
浮動小数点を含むデータを扱います。

| 　　データ型 　　  |      　 サイズ  　|               　　　　　　　　　　　　 値の範囲   　　　　　　　　　　　　 |
|:-----------------:|:------------------:|:------------------:|
| float            |              4byte |        ±3.40E38～±1.40E45       |
| double          |            8byte |       	±4.94E-324～±1.79E+308　※       |

※Ｅ＋308 は 10 の 308 乗を示します

<h5>文字型</h5>
「A」や「あ」などの１文字を扱う。

| 　　データ型 　　  |      　 サイズ  　|               　　　　　　　　　　　　 値の範囲   　　　　　　　　　　　　 |
|:-----------------:|:------------------:|:------------------:|
| char            |              2byte |        2byte の文字コード      |

<h5>ブール型</h5>
true か false か、真か偽かの論理情報を扱います。

| 　　データ型 　　  |      　 サイズ  　|               　　　　　　　　　　　　 値の範囲   　　　　　　　　　　　　 |
|:-----------------:|:------------------:|:------------------:|
| boolean            |              1byte |      true または false     |
【Strix】 PhotonからStrix Cloudに移行してみた ～概要編～

## まえがき
私が現在関わっている最大64人対戦のFPSでネットワークエンジンとしてPUN2を採用していました。
しかし、64人対戦という大規模なFPSゲームにおいてPhotonでは仕様上限界があり、運用はほぼ不可能です（後記述）。
そこで、大規模な同時接続に特化した新しいネットワークエンジン**「Strix Cloud」**に移行をしました。

今記事はPhotonからStrix Cloudへの移行をする際に得られた知見、ポイントなどをまとめた記事です。
- Photonのある程度の前提知識がある
- 大規模な通信が要求されるゲームを開発している
方々に向けた記事となっております。

また情報量が多いので、機能の詳細はパート分けして説明しています。

バージョンはStrix Unity SDK 1.3です

## パート分け記事一覧
1. [接続編](https://qiita.com/HarumaroJP/items/d66cc43c93c290f42437)
1. [マッチメイキング編](https://qiita.com/HarumaroJP/items/0f2fa0ebc7ce85c466cb)
1. [プレイヤー編](https://qiita.com/HarumaroJP/items/0d7e4b1b68faf5e765bd)
1. [オブジェクト同期編](https://qiita.com/HarumaroJP/items/37f4d32ff27ee6d23b0b)
1. [RPC & MessageRelay編](https://qiita.com/HarumaroJP/items/9c519f3ae6cf852fbb71)

## まとめ
個人的に使ってみた感想としては、なれるまでは時間かかるな～と言う印象でした。
ただ日本発のサービスなので普通に日本語で問い合わせができます！
レスポンス早くてめっちゃ助かった、、、

まだ全然内容不足なのでこれから追記していきたいと思います！

**[Github](https://github.com/HarumaroJP/Strix-Cloud-ex)にサンプルコードも上げてます**

## 参考リンク集
ユーザーズガイド

https://www.strixengine.com/doc/unity/guide/ja/


公式ドキュメント

https://www.strixengine.com/doc/unity/api/html/T_SoftGear_Strix_Unity_Runtime_StrixNetwork.htm

ソフトギア公式のYoutubeチャンネル
りくちゃんが優しく解説してくれます

https://www.youtube.com/channel/UCGcYF_0iza_U8zcu_kzQBNg
GitHub Action上のCypress実行時にvideoを保存しない

GitHub ActionでCypress実行してるけど動画やスクショは普段いらねーよ圧縮時間の無駄だよという人のために。

withでconfigパラメータを指定します。

- screenshotOnRunFailure=false->エラー時のスクリーンショットを保存しない
- video=false->録画しない

```yml
name: Cypress tests

on: [push]

jobs:
  cypress-run:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Cypress run
      uses: cypress-io/github-action@v2
      with:
        build: npm run build
        start: npm start
        config: screenshotOnRunFailure=false,video=false
```

参考
https://github.com/marketplace/actions/cypress-io#config
https://docs.cypress.io/guides/guides/screenshots-and-videos
Java入門 超初心者用 プログラムの基本スタイル

# はじめに
今までRubyしかやってこなかったのですが、サーバーサイドとして働きたくてJavaもかじったほうが良いと聞き、勉強もちょっとずつやっていこうと思いました。
完全に備忘録です。
また本記事は、ゼロからわかるJava 超入門 改定3版にて勉強したものをアウトプットしています。



<!-- 各項目 -->
<a id="#項目１"></a>
# 基本プログラム
基本中の基本ヌルプログラム

```sample.java
class クラス名 {
 public static void main(String[] args){
 }
}
```
いきなりでてきたヌルプログラム。Rubyしかやってこなかったが、いきなりワケワカメ。
**書籍での説明：ヌルプログラムは、プログラムとして成立しているものの。何も処理は行わない。**
おーなるほど。これをベースに行いたい命令を追加していってプログラムを完成させてくんだね！OKOK！

### ２行目のmainメソッド
プログラムは上から下にむかって実行されるんだけど、実行開始の場所は、先頭ではなくて。
必ずmainと書かれた場所から実行される。

へぇ〜〜〜！



### クラス名のルール
・１文字目は英字大文字か英字小文字(a~z _  $]のいずれか
・２文字目以降は、１文字目で使用する文字か、数字でないといけない。
・予約語はだめ。

ちゃんとしたルールあるんだね〜。


# ヌルプログラムに命令を追加
基本中の基本ヌルプログラム

```sample.java
class クラス名 {
 public static void main(String[] args){
   System.out.println("Hello!"); ←追加文
 }
}
```
### 文は必ずセミコロンでおわる ；
```
System.out.println("Hello!"); 
```

### プログラムにおける処理のまとまりをブロックという。
```sample.java
{ ←これ
文１
文２
}
```

### printlnとprinteの違い
・printlnは出力される際に、改行される。
・printは出力される際に、改行されない。

### ダブルクォーテーションで囲われる文字列は１つの行に記載しないといけない
```sample.java
【NG】 System.out.println("Hello!
");←改行しちゃだめ

【OK】 System.out.println("Hello!");
```

### でも特別の文字列¥nを使えば改行できる
```sample.java
System.out.println("Hello!.¥n");
System.out.println("Hello!.¥n");
```

```
出力結果
Hello!.
Hello!.
```
改行された！

このような特殊の意味をもつ文字をエスケープシーケンスという。
下記が主要なもの


||    文字列    |    意味    |
|--|-------------|----------- |
|   |    ¥n       |    改行        |
|   |    ¥t       |    タブ        |
|   |    ¥¥       |    ¥マーク        |
|  |    ¥"       |    ダブルクォート        |
|   |    ¥'       |    シングルクォート        |

### 文字を1文字ずつ表示させるプログラム
```sample.java
class クラス名 {
 public static void main(String[] args){
   System.out.print('G');
   System.out.print('O');
   System.out.print('O');
   System.out.print('D');
   System.out.print(' ');
   System.out.print("morning");
 }
}
```

```
出力結果
GOOD morning.
```
このように文字を表すときはにはシングルクォート(')
文字列を表すときはダブルクォート(")を使う

### 数を表示させるプログラム
```sample.java
class クラス名 {
 public static void main(String[] args){
   System.out.print(1);
   System.out.print(2);
   System.out.print(3);
 }
}
```

```
出力結果
1
2
3
```
数字はシングルクォートやダブルクォートで囲わない。

### コメントアウト
やり方１： /* この範囲内がコメント */
やり方２： 先頭に//をつければ、行ごとコメントアウトできる。

<a id="#reference"></a>
# 書籍
- ゼロからわかるJava 超入門 改定3版
word2vecを簡単に試してみる

## word2vecとは？
- 言語モデルをもとに、単語をベクトル化して計算できるようにしたもの
- 学習させる言語モデルは自分で指定できる(例:NARUTOの世界観でモデルを作成するなど)

## 環境
- mac os x
- jupyter notebook
- python 3.8.2

## 学習済み日本語モデルを使う
1. 今回は日本語版wikipediaをもとにした学習済みモデルを使用する
http://www.cl.ecei.tohoku.ac.jp/~m-suzuki/jawiki_vector/
![スクリーンショット 2021-07-22 15.58.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1789548/f988150f-3050-7493-977c-b215098a60f2.png)

2. ダウンロードしたファイルを解凍する
3. "entity_vector.model.bin"を実行環境と同じディレクトリに移動させる

## モデルをロードする
```python:word2vec.py
import gensim
word2vec_model = gensim.models.KeyedVectors.load_word2vec_format('./entity_vector.model.bin', binary=True)
```

## 類似度の高いものを表示
```python:word2vec.py
word2vec_model.most_similar(positive=['リンゴ'])
#実行結果
#[('バナナ', 0.7925126552581787),
#('イチゴ', 0.7851971387863159),
#('パイナップル', 0.7774679660797119),
#('トマト', 0.7547608017921448),
#('ナッツ', 0.7491065263748169),
#('キャンディー', 0.7482196092605591),
#('[リンゴ]', 0.7430691719055176),
#('林檎', 0.7421839237213135),
#('クルミ', 0.7396929264068604),
#('カボチャ', 0.7337167263031006)]
```

## 2つの単語の類似度を求める
```python:word2vec.py
word2vec_model.similarity('魚', 'マグロ')
#実行結果
#0.6114297

word2vec_model.similarity('魚', 'ニワトリ')
#実行結果
#0.55593973
```
"魚"と"マグロ"は納得できるが、"魚"と"ニワトリ"は微妙

## 単語間で計算してみる
```python:word2vec.py
# 女 + 王様 - 男
word2vec_model.most_similar(positive=['女', '王様'], negative=['男'])
#実行結果
#[('お姫様', 0.7259089946746826),
#('[シンデレラ]', 0.6741881370544434),
#('貴婦人', 0.6695671081542969),
#('[アリス_(不思議の国のアリス)]',0.6475884914398193),
#('花嫁', 0.6458605527877808),
#('妖精', 0.6455655097961426),
#('道化師', 0.6381884813308716),
#('姫君', 0.6307607889175415),
#('魔女', 0.6281230449676514),
#('魔法使い', 0.6276963949203491)]
```

## まとめ
- word2vecを日本語版wikipediaをもとにした学習済みモデルで試してみた
- 日本語的に正しい部分もあるが、間違っている部分もある

### 参考文献
- 鈴木正敏, 松田耕史, 関根聡, 岡崎直観, 乾健太郎. Wikipedia 記事に対する拡張固有表現ラベルの多重付与. 言語処理学会第22回年次大会(NLP2016), March 2016
- http://www.cl.ecei.tohoku.ac.jp/~m-suzuki/jawiki_vector/
Kotlin Gradle DSLを使ったDokkaでマルチモジュールプロジェクトをドキュメント化

# Kotlin Gradle DSLを使ったDokkaでマルチモジュールプロジェクトをドキュメント化する

タイトル通りです。

## 環境

OS: Mac OS X 11.4 aarch64
CPU: Apple M1
Java: OpenJDK Runtime Environment Zulu16.30+19-CA (build 16.0.1+9)
Gradle: Gradle 7.0
Dokka: 1.5.0


## build.gradle.kts

[Using the Gradle plugin #Multiplatform - Dokka](https://kotlin.github.io/dokka/1.4.10/user_guide/gradle/usage/#multiplatform)

> Multi-module projects¶

> For documenting Gradle multi-module projects, you can use dokka${format}Multimodule tasks.


> tasks.dokkaHtmlMultiModule.configure {
    outputDirectory.set(buildDir.resolve("dokkaCustomMultiModuleOutput"))
    documentationFileName.set("README.md")
}
DokkaMultiModule depends on all Dokka tasks in the subprojects, runs them, and creates a toplevel page (based on the documentationFile) with links to all generated (sub)documentations

と書いてあるとおりに、`dokka${format}MutliModule`タスクを変更します。
ModuleのMが小文字になっているのは恐らくタイポです。正しくはMultiModuleです。

サブプロジェクト全てにDokkaのプラグインを適用する必要があります。

ドキュメントをHTMLで出力する例です。

``` build.gradle.kts
group = "com.uramnoil"
version = "0.0.1"

buildscript {
    repositories {
        mavenCentral()
    }
}

plugins {
    id("org.jetbrains.dokka") version "1.5.0"
}

allprojects {
    repositories {
        mavenCentral()
    }
}

subprojects {
    plugins.apply("org.jetbrains.dokka")
}

tasks.getByName<org.jetbrains.dokka.gradle.DokkaMultiModuleTask>("dokkaHtmlMultiModule") {
    outputDirectory.set(buildDir.resolve("dokkaHtmlMultiModuleOutput"))
}
```

`subprojects`ブロックでサブプロジェクト全てに`dokka`プラグインを適用した後、
`dokkaHtmlMultiModule`タスクの設定を変更します。

## 結果

`./gradlew dokkaHtmlMultiModuel`を実行すると、
`dokkaHtmlMultiModuel`タスクで設定した出力フォルダにドキュメントが生成されます。

https://github.com/UramnOIL/Serverist/tree/8fb8766aa9338123d85380e3a1fc825f9380495b

このプロジェクトでドキュメントを生成すると、トップページが以下の画像のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271071/e0a05a14-4017-256f-4289-25d10ffc959c.png)
学習起点 AWS Certified Security - Specialty 

## Purpose
AWS認定は5冠にはなった。
業務的にはセキュリティの知識が欲しいので、SpecialistのSecurityの学習をする。
そのための、情報集積所にします。

## Data Source
- Exam Readiness: AWS Certified Security - Specialty

---

## Domains
- インシデント対応
    - AWS Trusted Advisor
    - AWS CloudFormation
    - AWS Service Catalog
    - VPCフローログ
    - AWSConfig
    - Amazon API Gateway
    - AWS CloudTrail
    - Amazon CloudWatch
- ロギングとモニタリング
    - AWS CloudTrail
    - Amazon CloudWatch
    - AWSConfig
- インフラストラクチャのセキュリティ
    - AWS Route53
    - AWS WAF
    - CloudFront
    - AWS Sheald
- ID及びアクセス管理
    - IAM
- データ保護
    - [AWS KMS](https://www.youtube.com/watch?v=4F5rSxzu0U4) [(PDF)](https://d1.awsstatic.com/webinars/jp/pdf/services/20181121_AWS-BlackBelt-KMS.pdf)
    - AWS RDS
    - Amazon DynamoDB
    - AWS SecretManager
    - Amazon S3
    - Amazon Glacier

----

## My keywords
- [フォレンジック](https://ierae.co.jp/blog/awsec2-hdd-analytics/)

### Addtional Resource
- [AWS認定の準備–AWSセキュリティ専門試験](https://aws.amazon.com/certification/certification-prep/)
- [AWS認定セキュリティスペシャリティ（SCS-C01）試験ガイド](https://d1.awsstatic.com/training-and-certification/docs-security-spec/AWS%20Certified%20Security%20Specialty_Exam%20Guide_v1.6_FINAL.pdf)
- [セキュリティ関連のセルフペースラボ](https://amazon.qwiklabs.com/catalog?keywords=security)
- [AWSセキュリティリソース](https://aws.amazon.com/security/security-resources/)
- [AWSセキュリティブログ](https://aws.amazon.com/blogs/security/)
アノテーションツールLabelMe

#1.LabelMeとは
LabelMeはMITよって開発された画像アノテーションツールです。[LabelMeサイト](http://labelme.csail.mit.edu/Release3.0)
画像認識、物体検出、セマンティックセグメンテ―ション、インスタンスセグメンテーションという色ろなタスクに向け、アノテーションを行いできます。
LabelMeのインストール、インターフェース、使用とpngへの転換について紹介します。
#2.LableMeをインストールする
1.Anaconda Promptを開く。
2.Anaconda Promptで以下のコマンドでLabelMeをインストールする。

```bash
conda create -name=labelme python=3.X
activate labelme
conda install pyqt
pip install labelme
```
#3.LabelMeのインターフェース
LabelMeをインストールした後、以下のコマンドLabelMeを開く。

```bash
activate labelme
labelme
```
起動すると以下の画面が立ち上がります。
![1626934326(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1668082/0c76153b-38f9-e8a1-45ef-d2ee67041d59.png)
1）左側：開く、フォルダーを開く、次の画像、先の画像、保存、削除；ポリゴンを作る、ポリゴンをエディトする、ポリゴンをコピーする、ポリゴンを削除する、Undo、Brightness Contrast、拡大
2）真ん中：画像区域
3）右側：ラベルリスト、ポリゴンのラベル、ファイルリスト
4）上部：ファイル、エディト、ビュー、ヘルプ
#4.LabelMeの使用
左側の```Open Dir```をクリックして画像データが保存されているフォルダーを選びます。
##セグメンテーションタスクの場合：
```Create Polygons```をクリックして操作する
![1626936834(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1668082/08621391-7ebc-cff0-a266-8a23dd2d725f.png)
##バワンディングボックスの場合：
上部の```Edit```をクリックし、```Create Rectangle```を選択してから操作する
![1626936789(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1668082/f3fe4d2c-e864-46bf-0b3f-0cb8a0203e86.png)
#5.Pngへの転換
上記よりアノテーションした後、元画像と対応されたJsonファイルが得られます。
以下のコマンドで生成されたJsonファイルをPngへ転換できます。

```bash
labelme_json_to_dataset <ファイル名>.json
```
以下のファイルが生成されます。
![1626937082(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1668082/dc450832-0a27-7419-827c-29bcff53a905.png)
#6.まとめ
LabelMeというアノテーションツールのインストール、インターフェース、使用とPngへの転換について紹介しました。
rex0220 計算式プラグイン スペースフィールド設定

計算式プラグイン Ver.44 で、スペースフィールドへ計算式が指定可能になりました。
詳細画面でも最新の計算結果を表示しますので、年齢表示などに利用できます。

# スペースフィールドの設定と計算結果表示

![2021-07-22_09h31_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/ec5a1a91-1da3-90ba-dfb7-6aa9f51a2470.png)

スペースフィールドに、要素IDの指定が必要です。

![2021-07-22_16h03_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/925741e4-7041-0e11-85b7-712c8bb9843a.png)


# PC表示例

![2021-07-22_10h05_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/99400263-c7fd-4612-0a67-54c79dcb5864.png)


# モバイル表示例

![2021-07-22_09h35_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/b391d8d5-943c-c593-d5c5-dd818b8bd6ea.png)

# プラグイン設定例

![2021-07-22_10h08_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/360f4034-594d-2643-ed6a-9429e88aa5e3.png)

# スペースフィールドの計算式指定方法

ラベルとラベルの書式、および値と値の書式をARRAY関数の配列で指定します。

- ARRAY(ラベル,ラベルの書式,値,値の書式)
    - ラベル：文字列
        - 指定例
            - "ラベル"
            - 文字列
    - ラベルの書式：STYLE 文字列
        - 指定例
            - ""
            - "color:red;"
    - 値：文字列
        - 指定例
            - "ABC"
            - 文字列
            - FIXED(数値)
    - 値の書式：STYLE 文字列
        - 指定例
            - ""
            - "color:red;text-align:right;"

- ARRAY()
    - 空の配列を指定すると、スペースフィールドが非表示になります。
- 値：文字列
    - 配列ではなく文字列を指定すると、ラベルなしで値のみ表示します。

# スペースフィールドの計算式例

年齢の計算結果を表示する例です。

- 年齢の計算式：
    - DATE_DIFF(誕生日,"TODAY","years")&" 才")

![2021-07-22_10h04_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/e2250f8c-80d0-2093-2867-5c02ec19b68d.png)

```.js
// 1. ラベル+値（書式text-align）
    ARRAY("年齢","",IF(誕生日,DATE_DIFF(誕生日,"TODAY","years")&" 才"),"text-align:right;")

// 2. ラベル(書式color)+値（書式color,text-align）
ARRAY(
  "年齢","color:red;",
  IF(誕生日,DATE_DIFF(誕生日,"TODAY","years")&" 才"),
  "text-align:right;color:blue;"
)

// 3. ラベル(書式font)+値（書式font）
ARRAY(
  "年齢","font-size:24px;",<br>
  IF(誕生日,DATE_DIFF(誕生日,"TODAY","years")&" 才"),
  "text-align:right;font-size:36px;"
)

// 4. 値（書式text-align,font）
ARRAY(
  "","",
  IF(誕生日,DATE_DIFF(誕生日,"TODAY","years")&" 才"),
  "text-align:right;font-size:36px;margin-top:-30px;"
)

// 5. 値
IF(誕生日,DATE_DIFF(誕生日,"TODAY","years")&" 才")

// 6. 値（書式text-align,backgorund-color,border）
ARRAY(
  "年齢","",
  IF(誕生日,DATE_DIFF(誕生日,"TODAY","years")&" 才"),
  "text-align:right;background-color:initial;border:initial;"
)

// 7. 非表示(誕生日が未入力時)
IF(誕生日,
  ARRAY("年齢","",
    IF(誕生日,DATE_DIFF(誕生日,"TODAY","years")&" 才"),
    "text-align:right;"
  ),
  ARRAY()
)
```

# まとめ

年齢のように最新の情報を表示したい場合に、スペースフィールドに簡単に表示できます。
ただし、レコードに値が残らないので一覧画面には表示できません。
使い道は限定されると思いますが、ちょっとしたメッセージ表示などにも利用できます。
Go gin でチェックボックス取得

# ginでチェックボックスを取得・表示
大したものではないですが、一応調べる必要があったので記載してみます。
参考になれば幸いです。

``` html
<div>
　　　<p>趣味</p>
 　<input type="checkbox" value="reading" name="hobbies" />
 　<label for="checkbox">読書</label>
 　<input type="checkbox" value="sports" name="hobbies" />
 　<label for="checkbox">運動</label>
 　<input type="checkbox" value="travel" name="hobbies" />
 　<label for="checkbox">旅行</label>
 　<input type="checkbox" value="game" name="hobbies" />
 　<label for="checkbox">ゲーム</label>
</div>
```

まずフォーム自体はこんな感じですね。
メインは次で

``` go	
app.POST("/form", func(content *gin.Context) {
   hobbies := content.PostFormArray("hobbies")
   content.JSON(http.StatusOK, gin.H{"hobbies": hobbies})
})
```

```
PostFormArray
```
を使うということです。

```
PostForm
```
では、複数要素は扱えないので、こちら使いましょう。
以上です。



## 参照
https://github.com/gin-gonic/gin/blob/master/context.go
テスト42

```vb

'Excel
Sub File_Conversion()
'('ω')～♪
Dim wdapp As Variant
Dim wd As Variant
Dim wd_Path As String
Dim Html_File_Path As String
Dim Fol_Path As String
Dim wb As Variant

Fol_Path = "C:\Users\User\Desktop\VBA練習\保存用\"
wd_Path = "C:\Users\User\Desktop\VBA練習\変換用\変換用1.docm"
Set wdapp = CreateObject("Word.Application")
wdapp.Visible = True
Set wd = wdapp.Documents.Open(wd_Path)

Html_File_Path = wdapp.Run("PDF_Process")

Set wb = Workbooks.Open(Html_File_Path)

wd.Close savechanges:=False
Set wd = Nothing
wdapp.Visible = False
Set wdapp = Nothing

wb.SaveAs Filename:=Fol_Path & "変換済.xlsx", FileFormat:=xlOpenXMLWorkbook
wb.Close savechanges:=False


End Sub

'------------------------------------------

'Word
Public Function PDF_Process()

Dim wdDoc As Variant
Dim Fol_Path As String

Dim PDF_Path As String
Fol_Path = "C:\Users\User\Desktop\VBA練習\PDF_Excel\"
PDF_Path = "C:\Users\User\Desktop\VBA練習\PDF\test.pdf"

Application.DisplayAlerts = False
Set wdDoc = Documents.Open(FileName:=PDF_Path, ReadOnly:=True)
Application.DisplayAlerts = True

wdDoc.SaveAs FileName:=Fol_Path & "word_test.htm", _
                    FileFormat:=wdFormatHTML
                    
wdDoc.Close Savechanges:=False

PDF_Process = Fol_Path & "word_test.htm"

End Function
グラビア⇒グ〇ビア、みたいにpythonで禁止ワード/NGワードを置換/隠す

# はじめに
タイトルの通り、禁止ワードを置換する方法を説明します。

例えば、
グラビア⇒グ〇ビア
のように、NGワード2文字目を置換します。

# NGワードの準備
NGワードをかき集めたNG_word.txt みたいなものを用意します。
こんな感じ

```NG_word.txt
喫煙 殺人 注射器 密売 密造 グラビア
```

あんまり書きすぎるとこの記事がバンされちゃうので、ここらへんで。
以下みたいに改行区切りでもよいです。

```NG_word.txt
喫煙
殺人
注射器
密売
密造
グラビア
```

NGワード/禁止ワード一覧って、ぱっと検索した感じだとあまり見つからなかったのですが、
例えば、
[スパム対策用 禁止ワード・NGワード集](https://www.vector.co.jp/soft/dl/data/net/se475480.html)(vector.co.jpのリンクです)
とかが参考になると思います。
ちょっとワードが少ない上に2009年のものなので古い気もしますが、他にあれば教えてください。

# 実際に置換する

次の関数を作りました。
雑ですが、動きはしました。

```python
def change_NGword(string, filename="NG_word.txt", encoding="UTF-8", huseji="◯"):
    # NGワードを読み取り
    f = open(filename, "r", encoding=encoding)
    change_str = f.read()
    f.close()

    # 単語ごとに区切る
    change_list = change_str.split()
    for change_i in change_list:
        # 単語の2文字目を伏せ文字にに置換、ただし、NGワードが1文字の場合は1文字目を伏せ文字に置換
        if len(change_i) == 1: # 1文字の場合：殺⇒○　のようにする
            string = string.replace(change_i, huseji)
        elif len(change_i) == 2: # 2文字の場合：殺人⇒殺○　のようにする
            string = string.replace(change_i, change_i[0] + huseji)
        else: # 3文字以上の場合：殺人鬼⇒殺○鬼　のようにする
            string = string.replace(change_i, change_i[0] + huseji + change_i[2:])
    return string

# テスト
print(change_NGword("これは健全な文章です"))
print(change_NGword("喫煙しているグラビアアイドル"))
print(change_NGword("注射器の使いまわし"))
```

```text:実行結果
これは健全な文章です
喫◯しているグ◯ビアアイドル
注◯器の使いまわし
```

関数の中身をちょっと解説すると
1、NGファイルの読み込み
2、読みこんだNGファイルを単語ごとに区切りリストにする
3、チェックしたい文字列を単語リストで全探索して置換する

という手順です。

ファイル読み込みでエラーが起きたら、文字コードを適当に変えて試してください。
関数呼び出しの度にファイルをopen→closeしているので、高速に動作させたい場合はダメだと思いますが、
気にしない場合は使えると思います。
Cisco Umbrella S3 からログ取得

### はじめに
・Umbrella S3 ログ取得方法について具体的な方法が説明されているドキュメントを見つけることができなかったのでやってみたメモ 
・ログを取得は Cyberduck というクライアントソフトを利用 (version 7.10)

### ログアクセス情報
デフォルトで無効。設定を有効にすると Cisco 管理の Amazon S3 ストレージに最長 30 日間ログを保管することが可能。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437531/4114a743-f63e-5248-14a6-b61f7feed4d9.png)


この画面で表示されている情報をメモしておく（Secret Key はあとで参照できない）

Data Path と記載されている `s3://XXX/XXX` という箇所が AWS の世界でいう `s3://{bucket-name}/{key-name}` という構造になっている。（Virtual-hosted–style access）  
S3 には Path-style access と呼ばれる URL 形式もあったが廃止がアナウンスされている。
https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html



### Cyberduck 

`Open Connection`し、プロトコルで Amazon S3 を選択、
`Server` に `{bucket-name}.s3.amazonaws.com` を指定し、
アクセス情報でメモした Access Key ID と Secret Access Key を入力し Connect

今回 Storage Region を東京にしたが、Third party buckets であるためどこに指定しようと Endpoint は s3.amazonaws.com となる、らしい。

>Access third party buckets
>Connecting to a bucket you are not the owner (and therefore not included when logging in as above and listing all your owned buckets) is possible. You can access buckets owned by someone else if the ACL allows you to access it by either:

>1. Specify the bucket you want to access in the hostname to connect to like <bucketname>.s3.amazonaws.com. Your own buckets will not be displayed but only the third-party bucket.
>2. Set the Default Path in the bookmark to the bucket name.
>3. Choose Go → Go to Folder… when already connected.  
>https://trac.cyberduck.io/wiki/help/en/howto/s3

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437531/6df3ce03-bc1d-55fe-9510-d7ad969e4b68.png)

するとバケツにアクセスできるが、その下のディレクトリへはアクセスできない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437531/5d3f298a-313a-e566-6769-1fc28b1e6e11.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437531/582806b2-eed0-1cfb-b90b-77d305f0d3d3.png)

特定ディレクトリに移動するために、メニューバー `Go` からパスを指定して移動する（mac です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437531/bb97647f-5faa-b3ae-18b6-d0da7517844a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437531/b4aeabed-e73d-2849-f7cd-fe6b353abf4e.png)

このとき Data Path と記載されていた文字列 `{bucket-name}/{key-name}` を指定すればよい。
DNS 関連のログは `dnslogs` 配下に日毎に置かれる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437531/7611feab-3e6c-f7e8-e655-e6d4362bcb4e.png)

参考までに利用する機能によって proxylogs, firewalllogs, auditlogs などもある。ログフォーマットについては以下が詳しい。
https://docs.umbrella.com/deployment-umbrella/docs/log-formats-and-versioning


### Reference
https://docs.umbrella.com/deployment-umbrella/docs/cisco-managed-s3-bucket
https://support.umbrella.com/hc/en-us/articles/231248468-How-to-Downloading-logs-from-Cisco-Umbrella-Log-Management-in-AWS-S3
https://trac.cyberduck.io/wiki/help/en/howto/s3
[Saas]変数を使って色を指定

#はじめに

![スクリーンショット 2021-07-22 14.52.01（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264460/10bb2cdf-fa76-d6cb-3e0a-4d610e2447a7.png)

詳細ページで同じ下線部を引く所がありました。

Saasの特徴である変数を使って記述していきたいと思います。

#使い方

```scss
.hoge {
  background-color: black;
  h1 {
    color: white;
  }
  .hoge-1 {
    color: white;
    h1 {
      background-color: white;
    }
  }
}

```

例えばこのような形で同じ色を使っていたとします。
そのような場合は事前に変数に代入しておいておけば一括で記述することができます。

```scss
$hoge-color: white;
```

`$hoge-color`という変数名に`white`を代入しました。

この結果以下のように記述することができます。

```scss
$hoge-color: white; //カラーを定義

.hoge {
  background-color: black;
  h1 {
    color: $hoge-color;
  }
  .hoge-1 {
    color: $hoge-color;
    h1 {
      background-color: $hoge-color;
    }
  }
}
```

このように記述する事ができます。

#定義する位置によってできない場合がある

```scss
$hoge-color: white; //カラーを定義

.hoge {
  background-color: $hoge-black; //利用する箇所より後ろで定義しているので読み込む事ができません
  h1 {
    color: $hoge-color;
  }
$hoge-black: black;
}
```

#スコープによってできない場合

```
$hoge-color: white; //カラーを定義

.hoge {
  $hoge-color: white; //カラーを定義
  background-color: $hoge-color: white; 
 }
h1 {
  color:$hoge-color; //.hoge内で定義されているためh1には適応されない
}
```
C#の基本イディオムについてその3~三項演算子・null合体演算子~

C#での三項演算子(条件演算子)とnull合体演算子についてまとめてみた。

## 三項演算子とは
三項演算子とは、「(条件)　? (trueの場合の値) : (falseの場合の値) 」のように値を書く公式みたいなものである。

(例)japaneseというstring型の値が"はい"だった場合に"Yes"、そうじゃない場合に"No"を返すenglishという変数を定義したい場合

~~~csharp
val english = japanese == "はい" ? "Yes" : "No";
~~~

三項演算子を使う場合は、コードが複雑にならないように、単純な値にすること。


## 判定する値がnullかどうかを判定し、nullじゃなかったら何らかの値を返したい場合

(例)nameというstring型の値が"ジョルノ・ジョバーナ"という値だったときに、"黄金の風"というstring型の値を返すが、そのnameがnullの場合もあることを考慮したい場合、

~~~csharp
string? name = "ジョルノ・ジョバーナ";
return name ?? "黄金の風";
~~~

と書くことができる。(この場合は、nameがnullじゃないので、"黄金の風"を返す)

~~~csharp
string? name　= nulll;
return name ?? "黄金の風";
~~~

(この場合は、nameがnullなので、ただ単にnullを返す。)

## null条件演算子(C#6.0以降で使用可能。)
(例)
データベースにUserというテーブルが存在し、そのUserをIdで検索してユーザーが存在していた場合に、そのUserの名前を返したい場合、

データベースを参照するコードが書かれているとして、

~~~csharp
private UserContext db = new UserContext();
~~~
が宣言されていて、dbのテーブルが参照できるようになっているとし、

そのUserのモデルが
・Id(int型)
・Name(string型)
だとする。


~~~csharp
var loginUser = db.Users.Find(id);
var returnData = loginUser?.Name;
~~~
と三項演算子をさらに省略し、nullかどうかを判定する変数名の後ろに「?」をつけ、その後に「.」でアクセスするプロパティを書くことができる。
こうすることで、loginUserがnullであればnullを返し、そうじゃなければ、Nameプロパティを返す。

## null条件演算子・合体演算子を組み合わせることもできる
(例)
UserからFindメソッドでデータを検索する際に、見つからなかったら、"ユーザー"というstring型の値を返したい場合

~~~csharp
var loginUser = db.Users.Find(id);
var returnData = loginUser?.Name && "ユーザー";
~~~
と書くことができる。


## 参考記事
https://developer.mozilla.org/ja/docs/orphaned/Web/JavaScript/Reference/Operators/Conditional_Operator

https://www.amazon.co.jp/gp/product/4774187585/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1
【Windows版】マジカボクセルのダウンロードとインストールの仕方

マジカボクセルの公式サイトにアクセスします。
URLは[こちら](https://ephtracy.github.io/)です。
下図のようなホームページが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/c4567c4d-a975-2c9e-168d-76e17c420fa4.png)

下図のように、「Download 0.99.6.2」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/fb9e23d8-c369-4bc1-f2df-deb004f6b534.png)

下図のようなホームページへ遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/13a7655b-5aaa-ef64-a5c1-006e2f87708f.png)

下図のように、「MagicaVoxel-0.99.6.2-win64.zip」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/606b2782-28ec-7267-93ac-d7c06bfe05e9.png)

ダウンロードする場所を選び、ダウンロードします。

ダウンロードした「MagicaVoxel-0.99.6.2-win64.zip」というファイルをダブルクリックします。

下図のように、ウィンドウが開かれますので、「すべて展開」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/b29076bf-1ece-afc1-e4ff-75cb938149ee.png)

下図のように、どこにマジカボクセルのフォルダを置くか聞かれますので、ひとまずそのまま「展開」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/eeebf7e5-7c75-f340-7d9d-6d46f4a5f217.png)

下図のように、マジカボクセルのフォルダのウィンドウが表示されます。フォルダをダブルクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/2eab4c51-1550-4836-51d6-cb8afaa6049a.png)

下図のように、さまざまなファイルが表示されます。キャラクターのアイコン「MagicaVoxel.exe」をダブルクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/110c8609-d71c-ed50-58a6-e22e4dc46d6c.png)

下図のような画面が表示されれば、マジカボクセルの起動が成功しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/88663b55-cfd1-595d-0afb-ffc2ad861fa7.png)
Before starting UiPath:条件(Condition)その２

## 皆もすなるQiitaといふものを、儂もしてみむとてするなり。

と言う訳で、こん＊＊は！はなっち！です。

★★★この記事はUiPathブログ発信チャレンジ2021サマー、7/22の記事です。★★★

今回は、ちょっとしたシリーズです。UiPathを使うに当たって、UiPathの機能ではなく、コンピュータ言語を使う上での基礎知識を展開していこうと思います。

#条件(Condition)その２

業務要件によっては、単純な条件ではない時があります。

　　　　例１）本日が偶数日で、且つ、本日が木曜日である時
　　　　例２）金額が0円以外、又は、品数が0個以外

「且つ」は、And演算子、「又は」はOr演算子で、結べばいいですね。

　　　　例１）本日が偶数日で、且つ、本日が木曜日である時
　　　　↓
　　　　(Now.Day Mod 2) = 0 And Now.DayOfWeek.Equals(DayOfWeek.Thursday)
　　　　⇒日を2で割ったあまりが0で、且つ、日の曜日が木曜日の値と等しい

　　　　例２）金額が0円以外、又は、品数が0個以外
　　　　↓
　　　　Not 金額.Equals(0) Or Not 品数.Equals(0)
　　　　⇒金額が0と等しく、ない、又は、品数が0と等しく、ない

例１）は直感的にわかりますが、例２）はNotが沢山出てきて、理解しにくいですね。
こうなると、例２）は、以下の方が理解しやすいですね。

　　　　例２）金額が0円以外、又は、品数が0個以外
　　　　↓
　　　　金額 <> 0 Or 品数 <> 0
　　　　⇒金額が0以外、又は、品数が0以外

「And」演算子、「Or」演算子は評価ルールがあって、それは「すべての条件式を評価し、最終的な評価を下す」です。

　　　　例１）本日が偶数日で、且つ、本日が木曜日である時
　　　　↓
　　　　(Now.Day Mod 2) = 0 And Now.DayOfWeek.Equals(DayOfWeek.Thursday)

例えば、2021年3月11日は木曜日ではありますが、奇数日ですね？
11日が奇数日なら、その時点でFalseなので、曜日の評価は不要です。

こういった場合、And演算子ではなく、「AndAlso演算子」を使います。
AndAlso演算子は、左から評価してFalseであった時点で、以降の評価をしません。

　　　　例１）本日が偶数日で、且つ、本日が木曜日である時
　　　　↓
　　　　(Now.Day Mod 2) = 0 AndAlso Now.DayOfWeek.Equals(DayOfWeek.Thursday)
　　　　⇒奇数日の時点で、偽となるので、曜日の評価はしない

Or演算子には、「OrElse演算子」があります。
OrElse演算子は、左から評価してTrueであった時点で、以降の評価をしません。

　　　　例２）金額が0円以外、又は、品数が0個以外
　　　　↓
　　　　金額 <> 0 OrElse 品数 <> 0
　　　　⇒金額が0以外の時点で、真となるので、品数の評価はしない

##おわりに
いかがでした？

条件は組み合わせる事ができます。組み合わせを間違えると、本来のルートではない流れに乗ってしまいますので、気を付けて使いましょう！

是非UiPathでのロボ開発の一助になればと思っています。

ありがとうございました！
コピペで音を鳴らす(JavaScript)

#　コード
```javascript:javascript.js
    var music = new Audio();//Audioオブジェクトの取得
    music.preload = "auto";//ページ読み込み時に、オーディオ・ファイルを読みこまれる
    music.src = "音声ファイルがあるパスを選択";//srcは「source（ソース、資源）」の略でソースを指定できる
    music.load();
    //ユーザが何か動作しないと音がならない
    window.addEventListener('イベント', (e) =>{
      music.play();//音声を再生する 
    })
```
これで完成!!
webページ更新 自動検知

```python
from bs4 import BeautiflSoup
import requests

#urlからDOMの抽出
url = ''
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')

#更新を検知する要素を取得
new_elem = str(soup.select(''))

#txtファイルから以前の状態を読み込み
try:
  with open('old_elem.txt') as f:
    old_elem = f.read()
except:
  old_elem = ''

#以前の状態と取得した状態を比較
if new_elem == old_elem:
  print('更新なし')
  return False
else:
  with open('old_elem.txt' 'w') as f:
    f.write(new_elem)
  print('更新あり')
  return True

```
Qiita 記事投稿テンプレート

# 概要
テンプレートを作成して、記事投稿の短縮化をはかる。
# テンプレート

```
# はじめに
<!-- 発端や概要を記載 -->

# 環境や使用条件（言語・ライブラリ、バージョン）

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [項目1](#項目1)
1. [項目2](#項目2)
1. [参考記事](#reference)

<!-- 各項目 -->
<a id="#項目１"></a>
# 項目１

<a id="#項目2"></a>
# 項目2

<a id="#reference"></a>
# 参考記事
- [リンクテキスト](URL)
- [リンクテキスト](URL)

```言語名:ファイル名.拡張子
コードブロック
```
```

`インライン表示`

>引用文

[リンクテキスト](URL)

| No |    内容     |    備考    |
|---:|-------------|------------|
| 1  |             |            |
| 2  |             |            |

```

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝実際に表示された時＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

# はじめに
<!-- 発端や概要を記載 -->
# 環境や使用条件（言語・ライブラリ、バージョン）

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [項目1](#項目1)
1. [項目2](#項目2)
1. [参考記事](#reference)

<!-- 各項目 -->
<a id="#項目１"></a>
# 項目１

<a id="#項目2"></a>
# 項目2

<a id="#reference"></a>
# 参考記事
- [リンクテキスト](URL)
- [リンクテキスト](URL)

```言語名:ファイル名.拡張子
コードブロック
```

`インライン表示`

>引用文

[リンクテキスト](URL)

| No |    内容     |    備考    |
|---:|-------------|------------|
| 1  |             |            |
| 2  |             |            |
ラッパークラスについて

<h2>ラッパークラスについて

<h4>ラッパークラスとは
<p>基本型の値をラッピングする種々のクラスの総称です。


<h4>ラッパークラスと基本型</h4>
|　　　　　　基本型 　　　　　　| 　　　　ラッパークラス　　　　　|
|:-----------------:|:------------------:|
| byte          |              Byte|
| short         |            Short |
| int           |          Integer |
| long          |             Long |
| float         |             Float|
| double        |           Double | 
| char          |         Character|
|boolean        |           Boolean|


<h4>ラッパークラスのメリット
<p>格納している数値を文字列に変更したり、逆に文字列を数値に変換したい場合には基本データ型のままでは対応できません。そこで使用していくのが各ラッパークラスに用意されているメソッドです。int型のラッパークラスであるIntegerクラスを例に挙げて用意されているメソッドについて紹介していきたいと思います。

<h4>代表的なメソッド
<p>①parseIntメソッド
文字列をint型の値に変換するメソッドです。

```java:コード
package practice;

public class WrapperClassTest {
	public static void main(String[] args)
	{
		String str1 = "2021";
		int int1 = Integer.parseInt(str1);
		System.out.println(str1);
	}

}

```

```java:出力
2021
```
<p>②valueOfメソッド
引数「str」で指定した文字列をint型に変換したのちに、Integer型のオブジェクトを作ります。

```java:コード
package practice;

public class WrapperClassTest {
	public static void main(String[] args)
	{
		String str1 = "2021";
		int integer1 = Integer.valueOf(str1);
		System.out.println(integer1);
	}

}
```

```java:出力
2021
```

<p>③intValueメソッド
オブジェクトが持つ値をint型で返却します。

```java:コード
package practice;

public class WrapperClassTest {
	public static void main(String[] args)
	{
		Integer integer1  = new Integer("2021");
		int int1 = integer1.intValue();
		System.out.println(int1);
	}

}

```

```java:出力
2021
```

<p>④doubleValueメソッド
オブジェクトが持つ値をdouble型で返却します。

```java:コード
package practice;

public class WrapperClassTest {
	public static void main(String[] args)
	{
		Integer integer1  = new Integer("2021");
		double double1 = integer1.doubleValue();
		System.out.println(double1);
	}

}
```

```java:出力
2021.0
```

<p>⑤toStringメソッド
オブジェクトが持つ値をString型オブジェクトで返却します。

```java:コード
package practice;

public class WrapperClassTest {
	public static void main(String[] args)
	{
		Integer integer1  = new Integer("2021");
		String str1 = integer1.toString();
		System.out.println(str1);
	}

}
```

```java:出力
2021
```