OmniAICreator/Qiita-1.07M huggingface dataset:
WindowsServerバックアップを触ってみた

とりあえず触ってみたので画面キャプチャを残しておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/c288f5ef-1906-bfa9-ac28-00460f50a316.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/4a37b1e1-8763-8a0b-5418-dff48f574955.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/48a7940f-8279-de4e-1e6a-9399087ef25b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/80b466b1-284b-76d8-507b-c5372ca70ae4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/1f3e560a-78cc-3fd0-8fb4-52e7b3d1c3e0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/8dacc90c-dfba-d5f5-f57f-dd13a88c3a68.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/ce067a3f-cba7-00a3-6694-3f182727a751.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/af0594bd-b858-07a9-7403-18f2dbac057f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/e71f1d7b-36a0-bb5f-cef4-3d61c01a0e8e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/2c69e4dd-c3b4-c1cd-85c0-8bb4699d1be7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/9df826cb-4ddf-4e72-336d-54904a562e57.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/936d4dc1-d617-bd2f-01fc-d27205717950.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/fdbe33a1-b8e5-6403-cee4-63b6078bcaa5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/ab5f98f3-2bda-cbd6-04e4-adb3bc30dba7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/b94701b9-62b6-fe0a-5997-458adab50b6e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/360f0fae-5d87-0ec3-9b5b-7e4db1c99973.png)
Ubuntuでvueをnginxにルーティング(備忘録)

install node js

```
curl -sL https://deb.nodesource.com/setup_10.x -o nodesource_setup.sh
```

And run the script 

```
sudo bash nodesource_setup.sh
```

```
sudo apt-get install nodejs
```

install build-essential package

```
sudo apt-get install build-essential
```

root is /var/www/html
so your build vue and cp to nginx root directory

```
git clone [your repo]
```

build app

```
npm run build
```

go to root dir

```
cd /var/www/html
```

cp dist dir to root dir

```
cp -rf [your Dir]/dist/* ./
```

end :)
WindowsServerバックアップをインストールしてみた

手順書作成用に画面キャプチャを残しておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/4cae4377-a39d-d648-e4cc-b11ef44b4783.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/7bf07c8e-c8bc-a13f-c603-430272c4d8d6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/1a5b49d4-931b-95b1-06be-69a70d71d5a6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/fb7ea564-19de-ebe3-497c-3fe78edcc0ef.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/01085228-10dc-7dcf-888e-8e736b517e7f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/56f677c3-a581-240b-0d19-da9fb24f81f2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/5d1922fb-b6d6-a034-a7ea-72915c27631f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564542/17894265-4014-d9d3-d53f-729daddd9dbd.png)

以上
Pythonについて

#はじめに
僕は産技短に入ってからいろんなプログラミング言語を学んできた。C言語、Java scriptやJavaを習ってきました。その中でPythonは授業で少ししかやらなかったので今回Pythonについて調べてみようと思いました。

#Pythonでできること
Pythonでできることを調べてみた結果、８つのことができることがわかりました。
1.機械学習を使った人工知能の作成
2.自動データ処理や分析などの業務効率化
3.スクレイピングによるWEBデータ上の画像
4.WEBサービス・WEBアプリケーション製作
5.スマホアプリ（Android)製作
6.デスクトップアプリ製作
7.組み込みアプリケーション製作
8.フィンテック・ブロックチェーン技術の開発

#Pythonが苦手なこと・できないこと
ゲーム開発は苦手です。理由はPythonは処理速度が遅い言語だからです。そのためスマホのアプリ開発などにも向きません。
またWebデザインはPythonではできないそうです。

#Pythonを習得してできる仕事
####・人工知能(AI)エンジニア　
自動車の自動運転機能、お掃除ロボット、検索エンジンなど様々なシーンで人工知能が使われています。
####・WEBアプリケーションエンジニア
WEBアプリケーションと聞くとJavaやRudy,PHPなどがイメージとして強いですが実はPythonもWEBアプリ開発に強い言語の一つなのです。
ちなみに"Facebook","Instagram","Youtube"のこれらはPythonで作られています。
####・データサイエンティスト
Pythonは機械学習、ディープラーニングなどの分野でよく使われています。特にデータ解析で使う機械学習にはマーケティングで参考になるユーザー行動解析やアクセス解析などのデータ解析がPythonを使うことでより詳細に分析することができます。


#おわりに
自分が普段使っているInstagramやYouTubeにPythonが使われているのは驚きました。もし、Pythonを使った仕事をするならWEBアプリケーションエンジニアをやりたいと思いました。また、面白いものを作るにはどの言語も極めることが大切だと思うので難しい分野ですが頑張っていきたいと思います。





参考にしたサイト
https://www.sejuku.net/blog/3863
地図を使ったジオ広告配信管理プラットフォームのプロトタイプを作ってみた

LBMA Japan Advent Calender 2021 の記事です。
最近、ジオ広告配信管理プラットフォームのプロトタイプを作ってみたのでそちらを紹介したいと思います。
作ってみたといっても私が実際に作ったのではなく別のチームが作ったのですが、この機会に代わりに紹介させていただきます。
プロトタイプでやってみたことを紹介していきますので具体的なコード例は出てきません。

- [はじめに](#はじめに)
    - [ジオ広告について](#ジオ広告について)
    - [課題と経緯](#課題と経緯)
- [やってみたこと](#やってみたこと)
    - [郵便番号エリアを使った広告配信エリアの作成](#郵便番号エリアを使った広告配信エリアの作成)
    - [町丁目を使った広告配信エリアの作成](#町丁目を使った広告配信エリアの作成)
    - [TerraMap APIについて](#terramap-apiについて)
    - [表示回数や配信金額などをタイムリーに表示](#表示回数や配信金額などをタイムリーに表示)
- [おわりに](#おわりに)

## はじめに
### ジオ広告について
タイトルではジオ広告と書きましたが、ジオターゲティング広告といいます。
スマートフォンの位置情報（デバイスロケーション情報）をもとに、スマホのアプリ面に広告を配信するサービスです。
ユーザーの実際の行動に基づいたターゲティングができるため、特定地域でのマーケティング施策・プロモーションに向いています。
また、新聞折込みやポスティング、DMといった紙媒体の補完として注目されています。


### 課題と経緯
地図を使ったジオ広告配信管理プラットフォームのプロトタイプを作ってみた経緯を説明します。
大手のポスティング事業者では自社のウェブサイトで発注者が自身で地図を使って配布エリアの作成および発注を行うシステムが登場してきました。
マップマーケティングでは、従来のポスティングのような紙媒体に加えてスマートフォン向けのジオターゲティング広告に関しても同様な仕組みが作れないかと考え、広告代理店の方が地図上で広告配信地域の特性や属性に加えて、広告在庫や表示回数、配信金額を確認しながら広告の計画を行うシステムを構想していました。

## やってみたこと
実際に以下の機能を持つWebアプリケーションを作ってみました。

- 配信エリアを地図に表示して可視化
    - 郵便番号エリアを使った広告配信エリアの作成
    - 町丁目を使った広告配信エリアの作成
- 表示回数や配信金額などをタイムリーに表示

### 郵便番号エリアを使った広告配信エリアの作成
ジオ広告の配信事業者様で郵便番号エリア単位で広告を配信しているケースを想定しました。
顧客の来店頻度の高いエリアに向けてリピートを促す広告を配信したり、顧客が少ないエリアへの新規顧客獲得を目的とした広告を配信したりするなどが考えられます。

笹塚周辺で半径1kmを指定して郵便番号のエリアを表示した例です。
郵便番号のエリアのポリゴンはTerraMap APIから取得したものを使用しています。
![郵便番号エリア‗配信エリア_作成.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325378/2e5256c4-2cef-c84d-7c74-f4a32c7cb81b.gif)


### 町丁目を使った広告配信エリアの作成
ジオ広告の配信事業者様で町丁目単位で広告を配信しているケースを想定しました。
町丁目とは〇〇1丁目や〇〇2丁目といった行政の区画のことです。

笹塚周辺で半径1kmを指定して町丁目を表示した例です。
町丁目のポリゴンはTerraMap APIから取得したものを使用しています。
![町丁目‗笹塚.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325378/6246c379-2315-bbc0-6da1-e5636ae34e22.png)


#### TerraMap APIについて
とつぜんTerraMap APIというワードが出てきましたが、ご存知ない方がほとんどだと思いますので、簡単に紹介します。
TerraMap APIは、エリアマーケティングデータ（統計データ、ポリゴン、住所）を自社で用意せずに自社システムに組み込みたい方向けの地図システム開発支援Web APIです。 
町丁目や郵便番号エリアなどのデータを使用できて、さらにそれらのデータが毎年更新されることが特徴です。
TerraMap APIで取得したポリゴンや統計データ、住所を使うことで、地図にポリゴンを描いたり、 地図を使った統計データの見える化やエリアに特化した分析ができます。
 [TerraMap API](https://www.mapmarketing.co.jp/terramap-api "TerraMap API紹介ページ")

### 表示回数や配信金額などをタイムリーに表示
ジオ広告の配信事業者様の広告在庫データとエリアを紐付けることで端末数や広告の表示回数などを表示し、広告を配信したいエリアを判断することができます。
広告在庫データはダミーを用意しました。
![表示回数_単価.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325378/d73c2de5-d643-7934-945f-b9f4103579ad.png)

人口や世帯数などのデータも表示することで、さらに最適な配信エリアを見つけることができます。
![人口など.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325378/53e7b689-9b30-a3f3-1feb-155a83d862f6.png)


## おわりに
エリアのポリゴンに加えて広告表示回数や料金などを地図上に表示することで、ユーザーにとってどこにどれくらい広告が表示されるのかがわかりやすくなります。
ジオ広告配信管理プラットフォームのプロトタイプとして作ってみましたが、課題と経緯にもあるように、ジオターゲティング広告以外にもポスティングをはじめとした特定のエリアを対象とした広告プラットフォームとしても使用することができます。
WordPressのプラグインBackWPupでのエラー: ステップを中止: 回数が多すぎます！のいくつかの対処法

WordPressでbackupをとっている時に出たエラー

```
エラー: ステップを中止: 回数が多すぎます！
```
こちらとてもよくあるエラー、その上に書いてある内容で対処法が少し違う。

自分はbackupを送る先がドロップボックスですが、エラーログの

```
3. Dropbox へバックアップファイルを送信します…
```
の直後に

```
Dropbox API: OAuth tokens have not been set.
```
この記述がある場合は、実行しているジョブ（WordPress）と送信先のドロップボックスの連携が取れていないことが多い。
![スクリーンショット 2021-12-09 14.12.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961398/cf97c469-3a72-e7ab-455a-6c82af76ce85.png)

こちらは認証済！となっていますが、一旦「Dropboxの認証を削除」してあげて、認証をもう一度実行してあげればだいたい解決できる。

もうひとつのパターンとして、

```
Operation timed out after 5000 milliseconds with 0 out of -1 bytes received
[01-Dec-2021 03:07:21] エラー: ステップを中止: 回数が多すぎます！
```
このようなケースがある。
これは転送するデータの量が多い時に動作が止まって待機時間が長くてタイムエラーになってしまうということ。
エラー文から5秒後にタイムアウトエラーになっているのが読み取れる。

もともとワードプレスのデフォルトに設定されている最大待機時間が5秒らしいので、それを延長させてあげればだいたい解決する。
下記のコードをfunctions.phpに記述。

```
function __extend_http_request_timeout( $timeout ) {
	return 60;
}
add_filter( 'http_request_timeout', '__extend_http_request_timeout' );
```
これで６０秒間は転送による待機中でもタイムアウトにならない。

プラグインのbackWPupでは
「エラー: ステップを中止: 回数が多すぎます！」
というがなんとも曖昧なエラーが頻繁に発生するが、上記をGoogleとかで調べると多方向の解決策があるので
しっかり直前のエラーログを見てなにをすればいいかを判断する。


#参考文献
Dropbox upload fails with cURL timeout error
`https://wordpress.org/support/topic/dropbox-upload-fails-with-curl-timeout-error/`
プラグイン：BackWPupにて、エラー「ステップ中止：回数が多すぎます！」が表示された時の対処方法
`https://synround.com/web/backwpup-error/`
Trust, Transparency, and the Trailblazer Community


[Trust, Transparency, and the Trailblazer Community](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000K18pBSAR)

コミュニティサイトの改善らしい

+ Unable to report spam — Fix in development
+ Line breaks not respected — Fix in development
+ Can’t use a URL with a ‘#’ in a post — Planned for delivery next quarter
+ Duplicate topics are sometimes created in posts — Planned for delivery next quarter
+ Answer leaderboard is based on quantity not quality — In technical discovery
文系だからこそエンジニアになれる道

![スクリーンショット 2021-12-09 15.01.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322432/5c12950f-40b3-2fe7-36d2-761a2b349f27.png)

こんにちは、現在READYFORでプロダクトエンジニアとして働いております
johnmanjiro4th　と申します。 へんなIDですみません。

この記事は [READYFORアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/readyfor)　の記事です。

#この記事ってどんなもの？

**文系とか気にせず誰だってエンジニアになれる**
**むしろ文系だからこそなれる！！**

ってお話を現役の文系出身エンジニアが解説します

「就活で迷ってて。。。」という人から「転職したい！」という人までぜひ参考にして頂けたらと思います。

**文系がエンジニアになるのは無理だと言う謎の下馬評を僕が覆していく**

そんな記事です

この記事を読んだ後にあなたは「文系だから無理だ！」という言葉は絶対に使わなくなることでしょう

#本題

よくこんな声を聞きます。

**「文系なのに、エンジニアになれたの？」
「文系だから、プログラミングは無理だよ」
「エンジニアって理系じゃなきゃなれないでしょ？」**


僕個人の見解ですが、**結論から言うと全部間違ってます**。

**はっきり言って誰でもエンジニアにはなれます**
**むしろ文系出身の方がいいんじゃね？？？？？**

逆になれないなどと言っている人はもはやエンジニアではありません。

それなのに世の中には、文系には無理だと言う風潮がいまだに蔓延っています。

それらは全部真っ赤な嘘なんです
いますぐそんな危険なセリフをやめましょう
**そのセリフはあなたを幸せにはしてくれません**

#なぜ文系には無理だと言われるのか

これはもう、イメージと先入観以外の何者でもないと思います。

「経営学部にいるんだから将来は経営者だね！」
「法学部の人はみんな弁護士になるんだね！」

そのくらいの**大きなバイアス**だと思います。

実際僕は法学部出身で、学問として何もプログラミングを学んでいないですがエンジニアです。

僕らは学問としてプログラミングをしているわけではありません。

あくまでビジネス、事業、社会課題の解決など、**与える影響のためにコードを書いている**はずです。

そこに学問としての理系文系という問題を出してくるのはおかしな話ではないでしょうか？

「でもプログラミングって数学でしょ？」
「数学苦手なんだよね・・・・」

#プログラミングって数学なの？

いいえ、違います

僕個人の意見ですがプログラミングは**教科で言うなら「国語」**です。

だってプログラミング　**「言語」**っていうじゃないですか、あくまで英語、日本語と同じ言語なんです

例えばこちらをご覧ください

``` ruby
morning_greeting = "おはよう"

p morning_greeting if Time.now.hour < 12

```

午前中だったら「おはよう」と言わせるコードです。
別になんの計算もしていません。

12時よりも前だったら、あいさつをしてねと言う指示を
**機械のための言葉でお願いしてるだけ**です。

英語で書かれた文字を黒い画面でカチャカチャといじってるからなんとなく難しく見えますが、
プログラミングは要するに**機械の言葉で会話すること**なのです

「じゃあ国語ができる人がなれるの？」

#どんな人がエンジニアになれるの？

**結論誰でもなれます**

僕は人事でもないのであくまで個人の見解として今まで見てきての見解では

**「何かを作り上げるのが好きな人、そしてそれが与える影響に喜びを感じる人」**

が向いているのではないかなと思います。

いきなり、ざっくりとしたことを言われても意味わかんないとなるかもしれません。

でもどんな人が営業職になれるんだと考えたときに、
適正はあるかもしれませんが、なること自体が不可能だということはあまりないですよね。

なのでエンジニアには誰でもなれる！
その上で、仕事を楽しめるのは上記のような人だと思っています。

「でも専門知識なんだから、すぐになろうと思っても無理なんじゃない？」


#じゃあどうしたらなれるの？

もちろん学習は必要です

この記事で方法論については言及しませんが、インターネット、技術書などなど世の中にはエンジニアになるための方法がたくさんあります。

そしてエンジニアの誰しもが通ってきた共通の道として「学習」と言うフェーズは避けては通れません。

でもその中で、高度な数学の知識や、化学式、物理法則などは一切必要とされません。

**理系が有利とか文系が不利ということはないのです**

むしろ、感覚的には「英語などの言語」を学習するのとなんら変わりません。

あくまで「技術」と呼ばれるものは**人間が作り上げられたもの**であって、天文学などのように神が作り上げたような未知の領域ではありません。

わからないのではなく **「知らない」** と言うだけです。

とにかく、難しいことではないんだよと言うことをここではお伝えできればと思います。

#とはいえ学習をスキップできる魔法はないよ

もちろん何かを学ぶ時にゲームのゲームの学習装置のようなチートなんかありません。

それなりの努力と根気は必要にはなるかと思います。

ただそれを楽しんでしまえば大丈夫！

この記事を読んでやる気になってもらい、学習を加速いていただければ幸いです

一つだけ言えるのは「現場に出たとしても、**文系出身理系出身なんてくだらない垣根は存在しない！**」ということです。

#最後に

最後まで読んでいただきありがとうございます。 
もう「文系だから無理だよ」なんて言葉は使いませんよね？

さて次回アドベントカレンダーは、数々のヒット記事を生み出してきた @MinoDriven さんです！
ぜひお楽しみに！！



あと、あくまで今回の記事は僕個人の意見なのでその点ご了承お願いいたします
Pythonで日付取得して『今日はなんのゴミの日』をLINE通知する構築のハンズオン

#　はじめに
今回は『なぜかゴミ出しの日を忘れてしまう』というポンコツ感のある私向けに、あらためてPythonの構築を交えながらdatetimeなどを利用した学習をしたいと思いたち、下記参考資料を読みながら手を動かして構築してみました。

#　参考資料
参考リンクには今回作成した大元になる方のハンズオンです。__こちらにプラスして、奇数週は『〜ゴミ』、偶数週は「〜ゴミ」と、より細かに設定出来る__ハンズオンをさせていただきました。しかし、なによりお手本があると大変助かり理解も捗りました。

[__今日は何のゴミ出しの日かをLineに通知してくれるプログラムを作ってみた__](https://qiita.com/machiiyusuke/items/80de903c624054b3002f)

#　構成図
![スクリーンショット 2021-12-09 14.14.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/acf407f8-a559-03ff-f32d-67f68e7db506.png)



#　ハンズオン
## 1：[LINE Notify](https://notify-bot.line.me/ja/)でアクセストークンを発行する

__下記リンクからご確認ください__
__[天気予報情報をスクレイピング（Python）で、LINE NotifyによりLINE通知の構築](https://cloud5.jp/web-scraping_line-notify/#1-line-notify-)__

## 2：コードの記述
サンプルコード（コメントアウトで各動作の内容記述あり）

```python:trash.py
import datetime #曜日取得
import requests #LINEへリクエスト
import os #環境変数のため
from dotenv import load_dotenv #環境変数のため
load_dotenv()

#LINE Notifyと連携するためのtoken
line_notify_token = os.getenv('TRASH') #.envの環境変数利用
line_notify_api = 'https://notify-api.line.me/api/notify'　#LINE Notifyへの通知URL

#LINENotifyにメッセージを送付
def send(message):
  payload = {'message': message}
  headers = {'Authorization': 'Bearer ' + line_notify_token} 
  requests.post(line_notify_api, data=payload, headers=headers)

#今年の最初から数えて第何週目かを取得、何曜日かを取得する
def what_week():
  today = datetime.date.today() #今日の年、月、日を取得する
  year,today_w,day_w = datetime.date(today.year,today.month,today.day).isocalendar()#何年、第何週目か取得、曜日(月=1)
  garbage_day(day_w,today_w)#第何週目か取得、曜日(月=1)を引数とする

#日にちからゴミ出しの内容を選択
def garbage_day(today,today_w):#第何週目か取得、曜日(月=1)を利用する
  if today == 1 and today_w % 2 != 0: #月曜日(=1)であり、奇数週の場合
    send('\n' + 'びん・飲料缶のゴミの日')
  if today == 1 and today_w % 2 == 0: #月曜日(=1)であり、偶数週であれば
    send('\n' + 'ペットボトル・繊維類のゴミの日')
  elif today == 2 or today == 5:#火曜(=2)、金曜(=5)
    send('\n' + '一般ゴミ・有害ゴミの日')
  elif today == 3:#水曜(=3)
    send('\n' + 'プラスチック製容器包装ゴミの日')
  else:#残りの曜日（木曜日）
    send('\n' + '今日は何もないよ')

if __name__ == "__main__":
  what_week()
```


## 3：挙動の確認
```terminal:ターミナルでコードを押下する
tetutetu214@mbp 0_Qiita_hanson % python trash.py 
```
上記打刻後LINEに下記通知がされました。
cronを利用すれば毎朝6時の決まった時間に通知を送ることも可能です。
![スクリーンショット 2021-12-09 14.02.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/f227d83a-a4f1-09b3-70f2-8fccbbe62518.png)

※日にちの挙動確認で何度も出力されていますが、実際は1回起動するごとに赤枠の1度の表示となります

#　さいごに
これで日付も少しは苦手意識がなくなったかもしれません。しかし意外とif文も確認しながら全体的に学習を進めていきました。コメントアウトで挙動に解釈を書くのは自分的には、結構お気に入りの書き方です（学ぶうえでの話、現場じゃ見にくくてたまらないと思う）。
最後はLINE Notifyの通知がお決まりになってきましたが、まだまだ通知していきます。
【Harmoware-VIS】停留所アイコン付きグラフを時間経過で更新

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#停留所アイコン付きグラフを時間経過で更新

Harmoware-VIS で停留所アイコンにグラフを表示する機能（[参照](https://qiita.com/ucl_Harmoware_VIS/items/c0516d6fcd24a1eddffb)）では、時間経過によるデータ更新はしないのでアイコン表示中に変化しません。

Harmoware-VIS に登録した停留所データ（ [`depotsBase`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#depotsbase-object-array) ）から、表示用の停留所のデータ（ [`depotsData`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#depotsdata-object-array) ）を生成する処理をカスタマイズするオーバーライド関数を使用することで実現できます。

オーバーライド関数を登録する書式

```javascript
this.props.actions.setDepotsOptionFunc(getDepotsOptionFunc);
```

引数となる getDepotsOptionFunc の関数書式

```javascript
const getDepotsOptionFunc(props,index) => object
```

オーバーライド関数は１停留所（index）毎にコールします。

| 引数 | 説明 | 
| -------- | -------- |
| props     | アプリのルートの [プロパティ](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#api%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9) |
| index     | 停留所データ（[`depotsBase`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#depotsbase-object-array)）内の処理中のindex |

リターン値は既定の停留所のデータ（ [`depotsData`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#depotsdata-object-array) ）に上書きされますので注意してください。
既定では position 及び、その他の [`depotsBase`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#depotsbase-object-array) に含まれる要素がコピーされます。

###時間経過でグラフを更新
シミュレーション中の経過時間は Harmoware-VIS のプロパティの [`settime`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#settime-number) に設定されています。
このデータから然るべきグラフで表示する値を求め、 [`DepotsLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#depotslayer) のプロパティの `optElevation` 及び `optColor` 要素を編集します。

オーバーライド関数のコード例
（`getGraphValue(n)` はグラフのデータを取得する関数を想定）

```javascript
const getDepotsOptionFunc(props,index) => {
    const {settime, depotsBase} = props; // 必要なプロパティの取出し
    const currentData = depotsBase[index]; // 対象のデータを抽出
    const optElevation = []; // オプショングラフのデータ用エリア
    optElevation[0] = getGraphValue0(settime,currentData);
    optElevation[1] = getGraphValue1(settime,currentData);
    optElevation[2] = getGraphValue2(settime,currentData);
    optElevation[3] = getGraphValue3(settime,currentData);
    const optColor = [[255,0,0],[0,255,0],[0,0,255],[255,255,255]]; // オプショングラフのデータの色指定
    return {optElevation,optColor};
}
```

※注意※
オーバーライド関数の引数のHarmoware-VIS のプロパティの [`depotsData`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#depotsdata-object-array) は、前回の表示済データですのでご注意ください。
【Harmoware-VIS】オプションのグラフ表示（停留所）

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#オプションのグラフ表示（停留所）

Harmoware-VIS で停留所アイコンに棒グラフを表示する方法
停留所アイコンに沿って棒グラフを表示できます。
棒グラフは最大４つ表示可能です。色分けも指定できます。

表示例

<img width="500" src="https://img.esa.io/uploads/production/attachments/8212/2020/06/10/31805/2fa5e315-0dbf-4ba4-82bd-d27fe924ca15.png">

停留所データの設定

```json
[ //停留所データの配列
    {"position": [999.9999, 999.9999, 999.9999],
    "optElevation": [10,20,30,40], //グラフのデータ
    "optColor": [[255,0,0],[0,255,0],[0,0,255],[255,255,255]], //グラフの色分け（規定値はマゼンタ）
    ・・・ //その他の情報
    },・・・
]
```

[`DepotsLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#depotslayer) のプロパティの `optionOpacity` でグラフの透明度（規定値 0.25）、 `optionCellSize` でグラフの立方体の底面のサイズ（規定値 20）を変更できます。

また、[`DepotsLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#depotslayer) のプロパティの `optionChange` （規定値 false ）を true にすることでグラフを積み重ねることもできます。

移動体のグラフと違い１本にはなりません。

表示例

<img width="350" src="https://img.esa.io/uploads/production/attachments/8212/2020/06/10/31805/ca09b026-f830-4e51-b47c-442f99e1200f.png">

３Ｄアイコンの場合のグラフを表示は以下の様になります。
３Ｄアイコンのセンターからの距離はプロパティの `optionDisplayPosition` （規定値 30）で変更できます。

表示例

<img width="400" src="https://img.esa.io/uploads/production/attachments/8212/2020/06/10/31805/c3ed6847-67e7-4eb4-8828-40c94041862f.png">

グラフを非表示にするには [`DepotsLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#depotslayer) のプロパティの `optionVisible` （規定値 true）に false を設定します。

# 【重要】停留所アイコンのグラフはデータ設定だけでは変化しません。
時間経過でグラフを変化させたい場合は、Harmoware-VISのプロパティの [`getDepotsOptionFunc`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#getdepotsoptionfunc-function) に [`DepotsLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#depotslayer) が使用する [`depotsData`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#depotsdata-object-array) を動的に更新する関数を登録します。

```javascript
this.props.actions.setDepotsOptionFunc(this.getDepotsOptionFunc);

const getDepotsOptionFunc = (props, index) => {・・・}; // depotsDataを動的に更新する関数
```

参考：[【Harmoware-VIS】停留所アイコン付きグラフを時間経過で更新](https://qiita.com/ucl_Harmoware_VIS/items/a81b6aac5736bb71ce48)
CypherクエリのTipsメモ

# OneToManyの値を1レコードで取得する

```cypher
MATCH (s: Shop)
RETURN s, [(s)-[r: HAS]->(i: Item) | i.id] as itemIds
```

# 日付形式のstringをdateに変換する
```cypher
RETURN date(
  datetime({
    epochMillis: apoc.date.parse('2021-12-31','ms', 'yyyy-MM-dd')
  })
) as date
```

# ラベル一覧を取得する
```cypher
CALL db.labels()
```
「IT資格って要りますか？」

と、よく聞かれます。

というのも、私はこの1年でいくつかのIT資格を取得し、その内容を Qiita で発信しているからです。

https://qiita.com/MxShun/items/bb321856f880eff12b0f

https://qiita.com/MxShun/items/9adb7624a453c5b84c3d

### 結論
**IT資格は要りません。**

が、技術を学ぶ **機会として** 意味のあるものだと思います。

### なぜIT資格を取るか？
私がIT資格を取得し始めたのは、1年前、友人が Java Silver[^1] を取得したことがきっかけです。その友人から Java Silver の参考書を譲り受けたので「せっかくだから勉強するか」と発起しました。

また、「IT資格を持っているとエンジニアとして強そう[^2] だから」という理由もあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/88dbd9b4-2063-2d3b-a159-590ae89612eb.png)

はい。とっても不純な理由でした。

### IT資格取得はなにがいいの？
きっかけはさておき。IT資格を取得していくなかでよかったことが 2 つありました。

#### １．順序立てて組み立てながら学べる
「タイケイテキに」学べるというやつです。

![F1CF74C3-F60D-42B6-8A8A-54876FCF60E3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/c326bf44-4459-5565-cc62-447ed100d904.jpeg)

IT資格は、対象の技術とそれを取り巻く要素技術が広く問われます。（もちろん資格によりますが。）
公式のリファレンスやドキュメントを読んでも掴み切れない全体感、ユースケースに応じたプラクティスを学べると感じています。

また、IT技術は参考となる書籍やオンライン教材が豊富です。（ Udemy も例外ではありませんね！）
**その技術を順序立てて組み立てながら学ぶ、よい取っ掛かりになる**と思います。

#### ２．目標として分かりやすい
技術を学びたい！と考えている人にとっては、IT資格の取得はよい学びの目標になりそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/955a78e8-0226-12c7-a144-9a1dafaf78f2.png)

技術を学ぶうえでモチベーションを保てないこともあるかと思います。分かりやすい目標としてIT資格の取得があることで、**学ぶ意欲を保ちながら学習ができる**と感じています。

「モチベーションが保てない技術の学習なんて意味がない」とツッコミが飛んできそうですが、好きではない技術を学ばなければいけない機会だってあるわけです。

### IT資格取得のコツ
合格体験のなかで感じたコツを 2 つ紹介します。

#### １．合格体験記の共通項を洗う
合格者の声を聞こうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/d4c66024-046e-200e-82cd-8775ce1f0414.png)

そのIT資格を取得した方の記事を読むと、合格までのプロセスやヒントが書かれているはずです。そして、**プロセスやヒントの共通項を探せば、それがIT資格取得の近道になる**でしょう。

例えば、私は過去に応用情報技術者試験に 2 回落ちた経験があります。
合格した 3 回目になにをやったかと言うと、合格した方の記事を読み漁り、「[過去問道場](https://www.ap-siken.com/s/apkakomon.php)をやり尽くす」という共通項を発見・実行しました。

あとは、合格イメージが湧くことも大きいです。

#### ２．日程にコミットメント
私がよくやる方法で、**先に試験日程を予約してしまう**方法です。「予約ドリブン」とでも呼びましょうか。

![FB6D8BAE-FB10-49D1-A1C5-E968544ED099.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/8f7ff97d-decb-5358-7a89-c31228e85d39.jpeg)

予約ドリブンのいいところは、程よいプレッシャーで中だるみをしないことです。予約した日程に向けて一直線で学習していく必要があるので、モチベーション高く技術のインプットができる印象があります。

### 個人的な展望
今回の記事では「IT資格って要りますか？」という命題に対し見解をまとめてみました。
改めてですが、**IT資格は要りません**。が、技術を学ぶ機会として価値のあるものだと思います。*must* ではなく *should* ということです。

個人的には AWS Associates[^3] のコンプリートを目標に、Udemy の[AWS 認定デベロッパー アソシエイト模擬試験問題集（5回分325問）](https://www.udemy.com/course/aws-31955/)コースを活用して学習を進めています。
次の合格体験記が書けるように頑張ります！

2022年1月22日追記 AWS DVA に無事合格しました

https://twitter.com/mxshun/status/1485400505027203074?s=21

最後に誤解を招きたくないので書きます。
IT資格の取得はゴールではありません。日々技術はアップデートされます。学びを重ねること、そして何よりその技術を使うことが大事だと思います。

[^1]: 正式には「[Oracle Certified Java Programmer, Silver](https://education.oracle.com/ja/oracle-certified-java-programmer-silver-se-8-oracle-certified-associate-java-se-8-programmer/trackp_363)」です。
[^2]: 「強そう」というのは、シニアエンジニアと議論ができ“そう”、エンジニアとしての市場価値が高くなり“そう”という意味合いです。
[^3]: 「AWS Certified Solutions Architect – Associate」「AWS Certified Developer – Associate」「AWS Certified SysOps Administrator  – Associate」の3つを指します。参考：[AWS 認定](https://aws.amazon.com/jp/certification/?nc2=sb_ce_co)
React-Router v6 新しいuseNavigateでのページ遷移のやり方

React-Routerのv6からはAPIが色々変わり、ページ遷移にuseNavigateというAPIを使うようになりました。
ちょっと困った所として使用したコンポーネントを起点としてパスを積み上げて行くなど癖のある動きをします。
そこでuseNavigateのページ遷移や注意点についてまとめます。

# ページ遷移例

`http://localhost/path1/path2`
というURLにアクセスしたと想定します。

```jsx
function RouteComponent() {
  return (
    <Routes>
        <Route path="/path1/path2" element={<PageComponent />} />
    </Routes>
  )
}

export default function PageComponent() {
  const navigate = useNavigate();

  // パスを積み上げる
  navigate('path3') // http://localhost/path1/path2/path3

  // コンポーネントと同一レベルのパスに遷移する
  navigate('../path5') // http://localhost/path1/path5

  // ルートを起点に遷移する
  navigate('/path4') // http://localhost/path4
}
```

# ワイルドカードを使った際の注意点

入れ子のルータ制御をしている場合ワイルドカードを使用すると思いますが、
あくまでもコンポーネントが制御しているパスを起点に遷移するため、ワイルドカードの範囲のパスは考慮されない所に注意が必要です。



下記のURLにアクセスした際の遷移について記載します。
`http://localhost/path1/path2/path3`

```jsx
function RouteComponent() {
  return (
    <Routes>
        <Route path="/path1/path2/*" element={<PageComponent />} />
    </Routes>
  )
}

export default function PageComponent() {
  const navigate = useNavigate();

  // ページを積み上げる（path3が消える）
  navigate('path4') // http://localhost/path1/path2/path4

  // コンポーネントと同一レベルのパスに遷移する
  navigate('../path5') // http://localhost/path1/path5
}
```

ワイルドカードで判定されたpath3が消えています。

# 参考

https://qiita.com/jonakp/items/5424bf89946269570496
https://reach.tech/router/api/useNavigate
Git運用の備忘録

##参考にした記事
[A successful Git branching model](https://nvie.com/posts/a-successful-git-branching-model/)
[Git利用時のフローはどれを使うか](https://qiita.com/tkhm/items/cc7855d32d640687b43c)

##実際にできたこと
・git flow運用でもreleaseタグを減らすなど製品の性質に合わせて改良はできる
・ブランチを切る際に、「/」（スラッシュ） を使用することでブランチに階層構造を持たせることができる。これにより開発機能のグループ分けはできる
【Harmoware-VIS】オプションのグラフ表示

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#オプションのグラフ表示

Harmoware-VIS で移動体アイコンに棒グラフを表示する方法
移動アイコンに従って移動する棒グラフを表示できます。

棒グラフは最大４つ表示可能です。色分けも指定できます。

表示例

<img width="200" src="https://img.esa.io/uploads/production/attachments/8212/2020/06/09/31805/259345eb-d19f-42bf-8047-73fc8c86a1e1.png">

移動データの設定

```json
[ //移動体データの配列
    {"operation": [ //移動経路データ配列
            {"elapsedtime": 99999,
            "position": [999.9999, 999.9999, 999.9999], //positionが定義されると移動処理対象
            "optElevation": [10,20,30,40], //グラフのデータ
            "optColor": [[255,0,0],[0,255,0],[0,0,255],[255,255,255]], //グラフの色分け（規定値は緑）
            ・・・ //その他の情報
            },・・・
        ]
    },・・・・・・
]
```

[`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer) のプロパティの `optionOpacity` でグラフの透明度（規定値 0.25）、 `optionCellSize` でグラフの立方体の底面のサイズ（規定値 12）を変更できます。

また、[`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer) のプロパティの `optionChange` （規定値 false ）を true にすることでグラフを積み重ねることもできます。

表示例

<img width="100" src="https://img.esa.io/uploads/production/attachments/8212/2020/06/09/31805/055885c5-aac8-44f1-a6a3-bb606ceb807e.png">

グラフを表示する際には丸形アイコンが適していると思いますが、３Ｄアイコンの場合は以下の様になります。
アイコンのセンターからの距離はプロパティの `optionDisplayPosition` （規定値 30）で変更できます。

表示例

<img width="300" src="https://img.esa.io/uploads/production/attachments/8212/2020/06/09/31805/43ac2e68-830e-44fc-bbf0-e761f8086887.png">

３Ｄアイコンでもセンタリングできますが、オブジェクトを突き抜ける表示になりますのでお勧めしません。

グラフを非表示にするには [`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer) のプロパティの `optionVisible` （規定値 true）に false を設定します。
Amazon Kendraが多言語対応していた

# はじめに

2021/10のアップデートでAmazon Kendraが多言語対応してました！

https://aws.amazon.com/jp/about-aws/whats-new/2021/10/amazon-kendra-support-additional-languages/

日本語も対応しているようなので試してみます。

ドキュメントを読む限り結構制限がありそう？


> Not all Amazon Kendra features are currently available for languages other than English. The following features are not available for non-English indexes:

> - Semantic search of [FAQs](https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html) and extracted answers from documents. Keyword search is used for retrieving relevant FAQs and for document ranking.
- [Custom synonyms](https://docs.aws.amazon.com/kendra/latest/dg/index-synonyms.html) for domain-specific, business-specific, or specialized terms.
- [Query suggestions](https://docs.aws.amazon.com/kendra/latest/dg/query-suggestions-overview.html) of popular queries relevant to a search.
- [Confidence scores](https://docs.aws.amazon.com/kendra/latest/dg/API_ScoreAttributes.html) in the search results.

https://docs.aws.amazon.com/ja_jp/kendra/latest/dg/in-adding-languages.html

## やってみる

インデックスやデータソース等の作成手順は[以前の記事][link-1]で取り扱ったので省略します。
(2021/12現在、東京リージョンにはまだ来ていないようでした。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/3769c752-48d4-206b-cc41-a6254e256580.png)

データソースは適当に個人的なAWSのナレッジをpdf化してS3に配置しました。
![image_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/6552716e-038f-a376-790d-e645c57766f9.png)


データソース作成画面に言語選択が追加されていました。
こちらで日本語を選択します。
![image_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/7c42b41e-1097-808e-7c4e-6e40521607cc.png)



スキャンが完了したら早速テストしてみます。

日本語で「タグ」と検索をかけると,,,
![image_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/75711408-1c27-3ba5-d278-4648c958e485.png)
日本語の検索結果が表示されました！


## 類似語辞書の作成
せっかくなのでサポートされていない日本語で類義語辞書を作製してみます。
以下のように設定ファイルを作成しました。

```text:thesaurus_file.text
メモリデータべース => MemoryDB
Dashboard => ダッシュボード
たぐ => タグ
mem => MemoryDB
```

この設定で「たぐ」と検索をかけると「タグ」もヒットするはずですが、
やはり、類義語検索は日本語だとうまく動作しないようです。
![image_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/f004bd9a-0756-35c9-e06d-7d5a16064d48.png)

## 料金
Amazon Kendraの料金は以下となります。(2021/12現在)

- Developer Edition
    - 1.125USD/時間
    - 月額810USD
- Enterprise Edition
    - 1.4USD/時間
    - 月額1008USD

やはり大規模なドキュメント向けという感じのお値段で個人で利用するには高い感じがしますね。

https://aws.amazon.com/jp/kendra/pricing/

# まとめ
Amazon Kendraが多言語に対応していたので日本語の文書を取り込み、試してみました。
確かに、日本語での検索が行えました。これにより日本語を利用するためにKendra→翻訳というステップが必要がなくなりました。
しかし、一部利用できない機能も存在するので、利用したい機能に沿っているかの確認は必要となります。

[link-1]:https://qiita.com/t_tsuchida/items/d9a98bba735f68077fb2
桐島、現場リーダーとの相性悪いってよ

現場リーダーとの相性悪いかも…って感じたことあるでしょう？

##時間が解決してくれんじゃね
まあ大抵は時間が解決してくれますよ。
現場リーダーももともとコミュ症の人が（決めつけ。笑）立場上無理してコミュニケーションとってるんだから。
それにしたって最初態度悪すぎ（笑）。
それがある程度の期間接していると、「あ～こういう良いところもあるんだ」となってくる（といいね笑）。

##年下だって別に困らねえよ（あんたの時代は良かった）
「現場リーダーが年下だって別に困らねえよ。考えすぎじゃねえの？」
まあ大体そうでしょう。

まず、「現場リーダーが年下」になるケースで一般的なのは…
プログラマで、プロジェクトマネジメントとかには関心なくて、
とにかく技術志向でやってきて歳とっちゃったって人はいっぱいいるでしょう。
そういうプログラマが参画する現場で現場リーダーが年下っていうのは珍しくない。
現場リーダーが熟練プログラマを頼りにするイイ関係が築かれることでしょう。
なんにも問題ない。

ここで取り上げたいのは、いい歳になってから（笑）業界に中途参入してプログラマになった人が、年下の現場リーダーの下に付くケース。
はっきり言ってレアケースでしょう。今はね。
#（続く。随時加筆）
SwiftUI でAudioToolboxのSystemSoundを一気に聴く

どんなシステムサウンドがあるか一気に試聴したいですよね！

```Swift
import SwiftUI
import AudioToolbox

struct ContentView: View {
    var body: some View {
        ScrollView{
            VStack{
                    Group{
                        ForEach(1470 ..< 1500){ i in // 1000以降、いっぱいあります…
                            Button(action:{
                                AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(i), nil)
                            }){
                                Text("\(i)")
                            }
                        }
                    }
            }
         }
     }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
SeleniumでChromeDriverをちゃんと終了する

webdriverをちゃんと終了しないと実行した分だけwebdriverのプロセスとブラウザーのプロセスが残る。
意図的にブラウザを開いたままにしておくというのでなければテスト後に正常に終了させたほうが良い。

[Seleniumのサンプルコード](https://selenium-python.readthedocs.io/getting-started.html#simple-usage)は`close()`を使っているが、これだとChromeDriverが終了しない。

```py
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()
```

一方で[ChromeDriverのサンプルコード](https://chromedriver.chromium.org/getting-started#h.kix.vz7pi7v2fyzg)を見てみると`quit()`で終了されている。

```py
import time

from selenium import webdriver


driver = webdriver.Chrome('/path/to/chromedriver')  # Optional argument, if not specified will search path.
driver.get('http://www.google.com/');
time.sleep(5) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5) # Let the user actually see something!
driver.quit()
```

元々`close()`は現在のウィンドウの終了で、`quit()`は全てのウインドウとドライバーの終了という違いがあるが、ChromeDriverでは`quit()`の実装が`Service.stop()`も呼ぶように変更されている。
恐らくそうしないとドライバーを終了することができないのだろう。


## with構文を使う

ここで[Webdriverの実装](https://github.com/SeleniumHQ/selenium/blob/9d9e4c7185cd44aafb18e707a34bcfc851fa9a31/py/selenium/webdriver/remote/webdriver.py#L177)を見てみると`__enter__` `__exit__`が実装されており、`__exit__`で`quit()`が呼ばれているのでwith構文を使えば同じことができるというのが分かる。

```py
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

with webdriver.Firefox() as driver:
    driver.get("http://www.python.org")
    assert "Python" in driver.title
    elem = driver.find_element_by_name("q")
    elem.clear()
    elem.send_keys("pycon")
    elem.send_keys(Keys.RETURN)
    assert "No results found." not in driver.page_source
```

特別な意図がない限りはこちらのほうがブラウザ毎の終了のさせ方の違いを吸収できるので覚えるには良いかと思う。
パッケージマネージャのライセンス情報がいい加減すぎて困る件

パッケージマネージャって今どき普通に使うけど、置いてあるライブラリのライセンス情報がテキトーすぎて本当に困っている。

たとえばこれ。みんな大好き（かどうかしらんけど） Newtonsoft.Json 13.0.1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539510/d0cab3c3-1df3-ea75-4e45-e987d9cf3d22.png)

右側の [MIT license](https://licenses.nuget.org/MIT) のリンク先を見てみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539510/6c7f4bf4-4d16-7cb8-3aed-0c84332097e3.png)
だめじゃん(´・ω・`)
著作権者は誰よ？ひな形置かれてもどうにもならん。

じゃあちょっと古いバージョン見てみましょう。11.0.2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539510/44e033b7-ae58-6d28-e72b-ffe3db4b9bbf.png)
リンク文字列がライセンス名じゃなくて [License Info](https://raw.githubusercontent.com/JamesNK/Newtonsoft.Json/master/LICENSE.md) になりましたね。飛んでみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539510/c3e0b521-6ea3-fa73-7803-accb5f831853.png)
おっイイね。ちゃんと著作権者名と発行年が入ってる……では済ませねーよ？？
これだと常に最新のファイルに飛んでしまうので、ライセンスが変わったりすると間違ったライセンス文に飛ばされてしまうことになりかねない。

```
https://raw.githubusercontent.com/JamesNK/Newtonsoft.Json/master/LICENSE.md
                                                          ^^^^^^
```

ではなく

```
https://raw.githubusercontent.com/JamesNK/Newtonsoft.Json/11.0.2/LICENSE.md
                                                          ^^^^^^
```

に飛ぶようにしてもらいたいところ。

一括でライセンス情報とかライセンスファイルとかを取ってくる方法、、[これ](https://stackoverflow.com/questions/55470771/get-license-information-for-all-used-nuget-packages-in-net-core-outside-of-visu) とか [これ](https://qastack.jp/software/235082/get-license-information-for-all-used-nuget-packages) とか [これ](https://pronama.jp/2017/08/21/visual-studio-package-licenses/) とか色々考えられているようだけど、結局もとの情報がテキトーなのでマトモに取れないというオチ…で、つまり全部手作業で確認して取ってこなきゃならない。これなんとかならないかなぁ。

なおこれは Newtonsoft.Json に限った話でもないし、もっと言えば NuGet に限った話でもないです。
PyPIでもAnacondaでもnpmでもMavenでも同じようなカオスが広がっています。
Unityのキャラクターの不要コンポーネントをワンポチでremoveするエディタ拡張をサクッと書く

こんにちは、久しぶりにUnityを触るARエンジニアのイワケンです。
VRChat向けにSetUpしたキャラクターを、VRM向けファイルにセットアップする際に**「DynamicBoneコンポーネント外したい！」**と思うわけですが、子供の階層にたくさんあるので、**手動で行うと面倒くさいです。**

**これをEditor拡張の実装でワンポチで解決しましょう。**


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96970/538fac37-87b8-2a8f-ee69-febb327195ba.png)

# 手順

- RemoveDynamicBone.csを作る
- RemoveDynamicBoneComponentsInChildren関数を実装
- ヒエラルキー上のキャラクターにアタッチ
- RemoveDynamicBoneComponentsInChildren関数をインスペクターから呼び出す

# RemoveDynamicBoneComponents関数を実装

```csharp:RemoveDynamicBone.cs
using UnityEditor;
using UnityEngine;

public class RemoveDynamicBone : MonoBehaviour
{
    /// <summary>
    /// 子供のオブジェクトのDynamicBoneをすべてRemoveする
    /// </summary>
    public void RemoveDynamicBoneComponentsInChildren()
    {
        foreach (DynamicBone bone in GetComponentsInChildren<DynamicBone>())
        {
            DestroyImmediate(bone);
        }
    }
    public void CountDynamicBoneComponentsInChildren()
    {
        int count = GetComponentsInChildren<DynamicBone>().Length;
        Debug.Log($"DynamicBoneの数は{count}個です");
    }
}

[CustomEditor(typeof(RemoveDynamicBone))]//拡張するクラスを指定
public class RemoveDynamicBoneEditor : Editor
{
    /// <summary>
    /// InspectorのGUIを更新
    /// </summary>
    public override void OnInspectorGUI()
    {
        //元のInspector部分を表示
        base.OnInspectorGUI();
        RemoveDynamicBone script = target as RemoveDynamicBone;
        //実行するボタンを置く
        if (GUILayout.Button("子供のDynamicBoneの数をDebug.Log"))
        {
            script.CountDynamicBoneComponentsInChildren();
        }

        //実行するボタンを置く
        if (GUILayout.Button("子供のDynamicBoneを削除"))
        {
            script.RemoveDynamicBoneComponentsInChildren();
        }
    }
}
```

# ヒエラルキー上のキャラクターにアタッチ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96970/44ee291a-5aff-7fc9-4ea1-73bd103ec105.png)

そして「子供のDynamicBoneの数をDebug.Log」を押すと、数が表示されました。18ですね。

その後に子供のDunamicBoneを削除を押すと...?

「DynamicBoneの数は0個です」になりました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96970/134e42c0-8be3-9719-f43f-8f286fe14f89.png)

ちゃんとRemovedされてました！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96970/14678238-cda5-3ad3-7efd-e51a3652d878.png)


# 参考記事
https://kan-kikuchi.hatenablog.com/entry/CustomEditor_Button

# 使用キャラモデル

https://booth.pm/ja/items/2557029
【Harmoware-VIS】移動データでアイコンのサイズを動的に変更

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#移動データでアイコンのサイズを動的に変更

Harmoware-VIS でのシミュレーションにおいて、移動体アイコンのサイズ変更で何らかの表現をしたい場合の方法です。

# Scatterplotアイコン（平面〇型アイコン）の場合
移動データの作成

```json
[ //移動体データの配列
    {"operation": [ //移動経路データ配列
            {"elapsedtime": 99999, "position": [999.9999, 999.9999, 999],
            "radius": 50, //アイコンの丸のサイズ（既定値は20）
            ・・・ //その他の情報
            },
            {"elapsedtime": 99999, "position": [999.9999, 999.9999, 999],
            "radius": 10, //アイコンの丸のサイズ
            ・・・ //その他の情報
            },・・・
        ]
    },・・・・・・
]
```

[`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer) のプロパティの `getRadius` の規定値が以下なので、これを変更することで radius 以外のキーワードも使用できます。

```javascript
getRadius : x => x.radius || 20
```

# Scatterplotアイコン以外（３Ｄアイコン）の場合
移動データの作成

```json
[ //移動体データの配列
    {"operation": [ //移動経路データ配列
            {"elapsedtime": 99999, "position": [999.9999, 999.9999, 999.9999],
            "scale": [5,5,5], //アイコンのスケール（既定値は[1,1,1]）
            ・・・ //その他の情報
            },
            {"elapsedtime": 99999, "position": [999.9999, 999.9999, 999.9999],
            "scale": [3,3,3], //アイコンのスケール
            ・・・ //その他の情報
            },・・・
        ]
    },・・・・・・
]
```

[`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer) のプロパティの `getScale` の規定値が以下なので、これを変更することで scale 以外のキーワードも使用できます。

```javascript
getScale : x => x.scale || [1,1,1]
```
ドラえもんで学ぶQA観点出し（ワークショップ）

[ミクシィグループ QAエンジニア Advent Calendar 2021](https://qiita.com/advent-calendar/2021/mixi_qa) 11日目の記事になります。

# 概要
チームメンバーとの雑談から生まれたワークショップ案を紹介します。
以下のようなQAエンジニアにおすすめです！

- QAエンジニア歴が浅い
- テストケース作成時に考慮漏れが発生しやすい
- 探索的テストの観点が少なく困っている

# ワークショップ
それでは早速ですがワークショップに入りましょう。

### 準備
人数：ファシリテーター1名・参加者：3名～
（人数が多い場合はグループワークの形を取りましょう）
時間：1時間程度
必要なもの：紙やペン、PCメモ帳などのメモできるもの

### プログラム
ワークショップの説明・グループ分け・出題（10分）
個人ワーク（10分）
グループワーク（10分）　※人数が少ない場合は飛ばしてOK
各グループ発表（20分）
振り返り（10分）

# ワークショップの流れ

### ワークショップの説明・グループ分け・出題（10分）
ワークショップの説明やグループ分けなどの準備をします。
グループは2～4人で組むのが良いですが、人数に合わせて臨機応変に調整してください。

準備が完了したら、ファシリテーターから問題を出します。
今回の問題はこちらです。

```
ドラえもんのひみつ道具『スモールライト』の
品質を担保するためにチェックするQA項目・QA観点を挙げてください。
```

### 個人ワーク（10分）
個人ワーク中は項目・観点をメモに書き出してもらいます。

### グループワーク（10分）
個人ワークで書き出したメモを参照しながら、グループでディスカッションし、まとめましょう。
オンラインの場合はブレイクアウトルームを使うと良いです。
人数が少ない場合はグループワークを飛ばして、発表に進んでも問題ありません。

### 各グループ発表（20分）
各グループの代表者にまとめた項目・観点を発表してもらいます。

- グループ内で出てきた項目・観点の一覧
- 何故このQAを行うのか

### 振り返り（10分）
各グループの発表を受けて、新たに思いついた観点を発表したり、
今回のワークショップを通じて学んだことを発表したりといった振り返りを行いましょう。

# 例題について
万人に伝わりやすいよう『スモールライト』を例に挙げましたが、テーマは何でも良いです。
ドラえもんのひみつ道具の中でも、比較的シンプルな仕様なのでワークしやすいという点からスモールライトをチョイスしています。
また、非実在アイテムを選ぶことで、参加者の想像力を鍛えるといった意図も込められています。

---

今回のワークショップのポイントとして、
参加者はまず個人ワークで『スモールライト』の製品仕様を把握する必要があります。
仕様をざっくりまとめるとこんな感じでしょうか。

```
・懐中電灯の形をしている
・発せられる光が物体に当たると小さくなる
・光を当てる時間に比例して物体がさらに小さくなる
```
その他にも色々な設定がありますが一旦割愛します。

---

次に考えるのは、基本操作に関するQA項目です。
先ほどの仕様から書き起こすと、一例ではありますがこのようになります。

```
- 本体の見た目
    - 仕様通りの形をしていること
    - 電源スイッチがついていること
- 電源スイッチの挙動
    - 電源スイッチをONにできること
    - 電源スイッチONの場合に光が発せられること
    - 電源スイッチをOFFにできること
    - 電源スイッチOFFの場合に光が発せられないこと
    - 再度、電源スイッチをONにできること
- 光を当てた際の挙動
    - 1秒間光に当てた物体が小さくなること
    - 5秒間光に当てた物体が小さくなること
    - 1秒間当てた物体より5秒間当てた物体の方が小さくなっていること
```
このあたりのQA項目は経験が浅い方でも漏れなく出せるようにしておきたいです。

もし基本操作のQA項目を作成する際に考慮漏れが発生するのであれば、
仕様を把握し読み解いていく練習を繰り返してみましょう。

---

さて、ここから先は仕様に記載されていないイレギュラーに関するQA観点です。

ほとんどの製品仕様には
「仕様に記載されていないが暗黙の了解で決まっている仕様」
「仕様に記載されておらず詳細が曖昧なままの仕様」が存在します。

そういった仕様の穴には不具合が隠されている可能性が高いです。

```
- 電池式なのか充電式なのか
    - 電池の場合はどんな電池を使うのか
    - 充電の場合はどんな充電システムを使うのか
    - 電力の不足は発生しないか
    - 構造として電池開閉口・充電差込口などを導入できるか
- 使いやすくなっているか
    - 本体が重すぎないか
    - 老若男女にとって使いやすくなっているか
    - 対象年齢が決まっていれば、それに即した使いやすさになっているか
    - 握りやすい形になっているか、工夫がされているか（グリップの有無など）
    - 電源スイッチは押しやすいか（ボタンの固さは適切か・ON/OFFを同時に押すことができないか）
    - 耐久性に問題はないか（四次元ポケットで保管して壊れないか）
- 小さくなった状態の物体はどうなっているか
    - 質量は小さくなっているか
    - 一度小さくしたものを元に戻すことができるか
    - 小さくしたものが元の大きさに戻った際に不都合が発生しないか
- イレギュラーな光の当て方の場合にどうなるか
    - 光を半分だけ当てるとどうなるか
    - 光が透けるもの（布やティッシュなど）を通して光を当てるとどうなるか
    - 100m先など遠くから光を当てるとどうなるか
- 使用上の危険性はないか
    - 人体に光を当てた際に健康被害が発生しないか
    - 物体を小さくして盗むなど社会的に悪用されないか
```
思いついたものをざっくり挙げてみましたが、他にも様々な観点が出てくるのではないでしょうか。

探索的テストが得意なQAエンジニアは、発想力豊かな人が多いように思います。
色々な人から観点を学ぶことで、得られる気づきも多いのではないでしょうか。

# まとめ
これを読んだ方にQA観点出しの面白さが少しでも伝われば何よりです。
面白いと思った方は、他のひみつ道具でもチャレンジしてみてください。
（タイムマシンなど、複雑なアイテムになると結構難しくなります）

また、新人QAエンジニアを教育する立場の方にも
是非このワークショップを取り入れていただけたら嬉しいです！
【Harmoware-VIS】LineMapLayerの使い方

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#LineMapLayerの使い方

Harmoware-VIS で地図要素の描画用のレイヤーとして [`LineMapLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#linemaplayer) を提供しています。

基本書式

```javascript
<HarmoVisLayers ...
    layers={[
        new LineMapLayer( { data: this.props.linemapData } )
    ]}
/>
```

データフォーマット

```json-doc
[  // ２点間に直線を描画する要素
   { "sourcePosition": [999.9999, 999.9999, 999], // 始点位置 (経度,緯度,高さ)
     "targetPosition": [999.9999, 999.9999, 999], // 終点位置 (経度,緯度,高さ)
     "color": [999, 999, 999], // 色 (R,G,B)
     "strokeWidth": 999, // 線幅 既定は1（メートル）
   },・・・・・・
   // 多点間を繋ぐ直線を描画する要素
   { "path": [[999.9999, 999.9999, 999],
              [999.9999, 999.9999, 999]・・・・・・], // 点位置 (経度,緯度,高さ)
     "dash ": [5,2], // 点線指定 規定は[0,0]（実線長さ,間隔長さ）で非点線
     "color": [999, 999, 999], // 色 (R,G,B)
     "strokeWidth": 999, // 線幅 既定は1（メートル）
   },・・・・・・
   // ３Ｄオブジェクトを描画する要素
   { "polygon": [[999.9999, 999.9999, 999],
                 [999.9999, 999.9999, 999]・・・・・・], // 点位置 (経度,緯度,高さ)
     "elevation ": 999, // 高さ 規定は`x => x.elevation || 3`（メートル）
     "color": [999, 999, 999], // 色 (R,G,B)
   },・・・・・・
   // 範囲を描画する要素
   { "coordinates":[[999.9999, 999.9999, 999],
                    [999.9999, 999.9999, 999]・・・・・・], // 点位置 (経度,緯度,高さ)
     "color": [999, 999, 999], // 色 (R,G,B)
   },・・・・・・
]
```

それぞれの要素のキーワードはアクセサで変更できます。

表示例
<img width="100%" src="https://img.esa.io/uploads/production/attachments/8212/2020/06/08/31805/933622c1-eecb-4c5c-9267-dee60c755534.png">
【Harmoware-VIS】シミュレーション前後のマージン時間

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#シミュレーション前後のマージン時間

Harmoware-VIS でシミュレーションを再生する際に、開始時間前と終了時間後に空白のマージン時間を挿入することが出来ます。

既定では

開始前（[`leading`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#leading-number)）は100秒

終了後（[`trailing`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#trailing-number)）は180秒

となっています。

これをカスタマイズするには、アプリのルートクラスのマウント時に [`setLeading`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#leading-number) と  [`setTrailing`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#trailing-number) で秒数を設定してください。

```javascript
class App extends Container {
  componentDidMount(){
    super.componentDidMount();
    this.props.actions.setLeading(10);
    this.props.actions.setTrailing(10);
  }
 ...
}
```
商品のデータがない時にサンプル画像を出したい　条件分岐　ruby　インスタンス変数

コントローラー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2274768/83f1623a-be2a-bb4c-50b6-1de8d0583556.png)
ビュー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2274768/6485a354-6ed7-c2e1-9649-73ee555be5ab.png)

こうして@items がない時にサンプル画像を表示させようとしたのですが、

全く反映されていません。。。

エラーは出ないので@items が認識はされているみたいですね。




エラーが出ないのが一番困ります。

binding.pryで止めて@itemsがどうなってるのか確認してみました。

ターミナル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2274768/31b7f577-1b8e-ef72-4c25-a5efc9e88d61.png)

@itemsと打つと　[]　というのが返ってきてますね。。。

@items[0]と打つと　nil　が返ってきます。これが欲しかったアイデアでした！

@items.lengthと打つと　0　が表示されます。




@itemsと定義したものは、データが一個も入っていない状態でも　[]　というデータが入ってる。

データが入ってるので　!@items　が使えない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2274768/adc74b8a-0598-c47c-2447-40aaa4ae9b4d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2274768/f0ab95f9-7a6d-57ee-fe8b-21c67eb4860c.png)

などの条件式を使うことで私の認識でのデータを条件分岐できることができました。




画像が見づらいのは今後良くしていきます笑




・@itemsというインスタンス変数という箱、にItem.allと値が詰め込まれている。

・箱に条件をかけたので思うようにいかなかった。

・値があるかどうかなので、「データが」などの言葉で考えるとつまずくことが増える。




閃いた時はすごくテンションが上がりました。

エラーにつまずきすぎるのはメンタルに良くないので質問投稿サイトも使っていきたい
機械学習で画像を作りたかった　～3.薔薇探し～

前回の記事はこちら
[【IT】機械学習で画像を作りたかった　～2.サイズを加工する～](https://ravito.hatenablog.com/entry/2020/07/17/074224:embed:cite)

学習を試してみた。
[GANでピカチュウを描いてみる - Qiita](https://qiita.com/hideki/items/4de4928236ca15152c18#%E7%94%BB%E5%83%8F%E3%81%AE%E5%88%87%E3%82%8A%E5%87%BA%E3%81%97:embed:cite)

機械学習に使用するため、はじめに見つけた、Tensoflow　というライブラリを使うことにした。

ところが、eclipseでは複雑な設定が必要なのか、すんなり使うことができなかった。

そのため、Tensoflow　を使うのが得意なツールとして、Anaconda　を利用することにした。
Anaconda　の入手方法などはここでは割愛する。

参考にしているサイトでは、プログラムの一部しかコードが乗っておらず、
学習させるためのモデル部分を構築する必要があった。

そこで、モデル構築や学習を行うライブラリ「ケラス」の使い方を調べた。

入門サイトとしてはこちらが見つかった。

[Home - Keras Documentation](https://keras.io/ja/:title)

しかし、入門サイトを読む限りでは、どのように参考サイトにつながるのかわかりにくかった。

それからこちらのサイトも見つかった。

[TensorFlow + Kerasでフレンズ識別する - その2: 簡単なCNNを使った学習編 - Qiita](https://qiita.com/croquette0212/items/9bb41c698d65282e5bb2:title)

上記サイトの情報も参考にしながら、プログラムを組んだ。

複数枚の画像から、薔薇に近い画像を探すところまでは完成した。

![バラに近い画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1877489/3d8bdadb-8f39-9162-e196-eade64786bf3.png)



次回は、いよいよGANを使用する段階。
GANは
「偽物モデルがランダムに画像を作って、本物モデルが当たってるかを確認する」という工程を経て、本物に近い画像を作る。
というものだが、
肝心のコードの書き方が、さっぱりわからないので、手探りで探していきたいと思う。
p5.jsの関数まとめ part.9 translate()

この記事は Qiita p5js アドベントカレンダー10日目の記事です。

## これはなに
p5.jsが用意している関数について理解を深める記事です。
今回はTransformのtranslate()について。

## translate()
Shapeの位置を変更するために使われる関数です。
座標の開始地点が変わると言った方が正しいでしょうか。
また動的な引数を渡すことにより動きをつけることも可能です。

### リファレンスより
> 表示ウィンドウ内のオブジェクトを移動する量を指定します。xパラメータは左/右の移動を指定し、yパラメータは上/下の移動を指定します。
変換は累積的であり、関数への後続の呼び出しが効果を累積した後に発生するすべてに適用されます。たとえば、translate（50、0）を呼び出してからtranslate（20、0）を呼び出すことは、translate（70、0）と同じです。場合変換（）内で呼び出される）（ドローループが再び始まるとき、変換がリセットされます。この関数は、push（）およびpop（）を使用してさらに制御できます。（DeepL翻訳）

**変換は累積的**
ここ大事な気がします。
リファレンスのコードをみてみましょう。

```javascript
rect(0, 0, 55, 55); // 開始地点は(0, 0)

translate(30, 20);
rect(0, 0, 55, 55); // 開始地点は(30, 20)

translate(14, 14);
rect(0, 0, 55, 55); // 開始地点は(44, 34)
```
![スクリーンショット 2021-12-09 9.52.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358229/dd33efef-e6ae-0d08-af0c-7cacbf3b7d44.png)


2回目のtranslateが`(14, 14)`となっていますが、この時の開始地点は(44, 34)です。

### Type
```typescript
translate(x: number, y: number, z?: number): p5;
```
引数
- x 移動したい場所のx座標
- y 移動したい場所のy座標
- z 移動したい場所のz座標（オプション）

```typescript
translate(vector: Vector): p5;
```

また`Vector`クラスを渡すこともできるようです。
このVector（ベクトル）とは、位置や速度の情報を持ちます。
つまりfillの引数Colorみたいに設定内容をオブジェクトで持てるのですね。

```typescript
fill(color: Color)
```

ちなみにVectorクラスは面白そうなメソッドを持っている雰囲気があるのでまた調べてみたいと思います。

### どんな時に使えそうか
物体そのものの位置をずらす・動かすときに使うのだと思いますが、
いいなと思うのはtranslateで指定した座標がshapeの原点(0, 0)になること。
またVectorが使用できるのも強みで、ここを探るだけで物体に様々な動きをつけることができそうです。

## 参考
[p5.js reference | translate()](https://p5js.org/reference/#/p5/translate)
[p5.js reference | p5.Vector](https://p5js.org/reference/#/p5.Vector)
振り返りの課題④ (【AWS】ロールの切り替えができない)

AWSのdev環境のIAMアカウントを教えていただいたのでとりあえず見てみよう！
となり、dev環境のロールに切り替えをしようとしたけれどできなかった。

![screen_2021-08-31_20_14_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2224485/040e57ad-d91e-4eb6-0bf7-e0d0c5fee1fb.png)


なぜ...。

# 原因

ドキュメントに書いてありました。

> 別のAWSアカウントのIAMロールを継承するには、
> まず、IAMロールを引き受ける側のアカウントで、アクセス許可を編集します。

アクセス権限をもらいました。

# 再度ロールの切り替え(スイッチロール)してみる！

![スクリーンショット 2021-12-09 11.51.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2224485/4c2d7d19-544a-1500-c314-52771dda5901.png)
できた！！！

# IAMロールとは...？

* AWSでは、アカウント管理にAWS Identity and Access Management（アイアム）を用いている。

* IAMとは、AWSのサービスで「認証」と「認可」の設定を行うことができるサービス。「認証」「認可」を正しく設定することで、AWSの利用者や、AWSのサービスがアクセスできる範囲を制御することができる。

* IAMロールとは、複数のAWSアカウントを利用する場合にアカウント権限をロールとして付与することで、ログイン処理の手間を削減したり、EC2などのAWSのサービスや他のアカウントに対してにAWSの操作権限を付与できる

* IAMユーザーとしてサインインすることでロールの切り替えができるようになる


written by 福井