OmniAICreator/Qiita-1.07M huggingface dataset:
Unity WebGL + ChatGPT (3.5) + VITS TTS 音声合成モデルでゲームNPC作ってみた

![header.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/466502/ceda24d9-d62b-80e7-6355-51a93f0700cb.png)

色々あって __ChatGPT__  がゲームのNPCで使えないか？
と検証したくて作ってみました。

文字だけだと寂しすぎて　__VITS TTS 音声合成モデル__ も使ってみました。
（モデルの詳細は　→　[VITS-TTS-Amitaro](https://huggingface.co/spaces/Lycoris53/VITS-TTS-Japanese-Only-Amitaro)）

まとめると
* ゲームエンジン　→　Unity WebGL
* 音声合成API　→　VITS音声生成モデル
* チャットボット昨日　→　ChatGPT3.5 (OpenAI)

で作ってみました。

一応ゲームNPCとして __「ポーション屋さん」__ という設定しています。
ポーションのお買い求めはいかがですか～？

qiita では直接表示できないので、下記のリンクでお試しできます。
音声が出るので気を付けてください。
__入力フォームに「おはよう」など入力してEnterすれば返事してくれます！__

https://huggingface.co/spaces/Lycoris53/3DGame-NPC-VITS-TTS-OpenAI

また、AI＋ゲーム関連でブロッグ更新しているので、よかったら下記のブログもお願いいたします。
https://www.aithinkso.net/
HumanActivityRecognition-WISDMdataset

WISDMデータセットについて理解を深めるために勉強した内容をまとめておく。

## データダウンロード
はじめに公式にWISDMデータセットをダウンロードする方法について。  
Kaggleからダウンロードしたが、以下のサイトからダウンロードするのが正規ルートのようだ。  

https://www.cis.fordham.edu/wisdm/dataset.php

## readme.txt
ダウンロードした際に添付されていたreadme.txtには「When sharing or redistributing this dataset, we request that this readme.txt file is always included. 」と記載されている。  
つまり、このデータを共有する際にはこのreadme.txtを必ず添付することということのようだ。  
しかし、Kaggleなどの利用例を確認するとreadme.txtの記載されていない。これはいけない。  
急いで自分のGitHubにはreadme.txtを追加しておいた。  

また、readme.txtによるとこのデータセットを用いる際には以下の論文を引用することと記載されている。

https://www.cis.fordham.edu/wisdm/public_files/sensorKDD-2010.pdf

閑談はこのぐらいにしてデータの中身について話を進める。  


## WISDM_Act_v1.1_raw_about.txt

「measured by the android phone's accelerometer」と記載されていた。  
つまり、このデータセットは2010年に携帯電話を用いて人の状態と加速度を取得し、集めたものである。   

| Actiity     | Counts  | Percentage |
|-------------|---------|------------|
| Walking     | 424,400 | 38.6%      |
| Jogging     | 342,177 | 31.2%      |
| Upstairs    | 122,869 | 11.2%      |
| Downstairs  | 100,427 | 9.1%       |
| Sitting     | 59,939  | 5.5%       |
| Standing    | 48,395  | 4.4%       |
|             |         |            |
| Total       |1,098,207| 100.0%     |

クラスは合計6種類で、欠損値はなし。  
36人のからデータを取得している。  

サンプリングレートは20Hzである。  
つまり、1サンプルあたり50ms(0.5秒)である。  
さらに、1データあたり80サンプルであることから1データは約4秒であることがわかる。  

縦軸について、-20m/s^2から20m/s^2の値をとる。


データ感として以下の動画が参考になった。

https://www.youtube.com/watch?v=8gQeQW04x6o&t=157s

また、この情報には重力を含んでいるため、縦軸には約10程度のバイアスが加わると記載されている。

## Activity Recognition using Cell Phone Accelerometers 

WISDMデータを使った場合に引用することと記載されていた論文。  
2010年に発表されており、被引用数は3082回であった。

以下の画像はxyz軸の内訳。  
「in their front pants leg pocket」と記載されており、前ポケットにスマホを入れたとわかる。  
ｘ軸は進行方向に垂直な方向、ｙ軸は太腿に対して垂直方向、ｚ軸は進行方向である。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/cd46df88-b41b-ab7c-a437-284feede93cf.png)

軸について、注意する点としては、軸が地面ではなく人間の太ももの向きであるため座った場合にはｚ軸に重力加速度が加わる点だ。  
以下の画像と突き合わせて見てほしい。  
座っている状態はあくまでわかりやすい例であり、他の状態でも常にｙ軸にのみ重力加速度が加わっているわけではない。
つまり単純にｙ軸のバイアスを除去しようとしてｙ軸の値全てにマイナス10をしても意味はないだろう。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/f4b712f4-db15-aa2d-2bf0-0645bd7ab0ed.png)

ラベルの6つの状態は識別が簡単そうなものを選んだと記載されている。

それぞれの識別のための特徴について2.3節から得られた情報をまとめる。  

まず、sitとstandの2種類は他4種類と明らかに異なっており、ｘｙｚ軸それぞれあまり動きがない。  
また、sitとstandそれぞれについてもsit状態ではｚ軸の数値がコンスタントに大きく、stand状態ではｙ軸の数字がコンスタントに大きいという違いがある。  

他の4つについては、
walkは1/2秒の周期でピークがあり、ｘ軸は他のｙｚ軸より常に小さい値をとっている。  
jogは1/4秒の周期でピークが存在し、ｙ軸について負の値がwalkより顕著である。  
downではｙ軸の加速度が小さく、1/2秒の周期がある。  
upではｙｚ軸に3/4秒の周期があり、これは足の進みが他より遅いことを表している。    

「J48（決定木モデル）」、「Logistic回帰」「MLP」の3つの機械学習モデルを作成して推論を行った結果によると、歩く、昇る、降りるの識別が難しいようだ。  
また、なかでも昇る、降りるの識別が誤検知が多いと記載されていた。  

以上がWISDMデータセットについて学んで得られた知見である。
UiPath初心者向け：セレクター内にワイルドカードや変数が必要な場合の見つけ方(セレクターを修復)

# はじめに
　UiPathブログ発信チャレンジサマー2023の企画で今回書きました！
　本当なら七夕に書きたかったんですが、ちょうど七夕は長野に登山に行くため
　電波がないので6日にしました！

# セレクターは取れているのにテストをするとセレクターが取れていないことがありませんか？
　私は実務でこれを経験しました。
　セレクターは取れているのに何で取れないんだ？と思い、
　**先輩に聞いたら使っているサイトの特徴をよく見ようと言われました。**
　その後、使っているサイトをよく見るようにし、ポイントは2つありました。

# ポイント1：本番用とテスト用のサイトで開発しているか。
　登録作業の自動化に対して、本番用のサイトを使って開発することができないため、
　テスト用のサイトを使用します。
　本番用とテスト用でそれぞれセレクターを取るのではなく、
　両方とも使用できるセレクターを作成することが必要です。
　**この場合はワイルドカード(*)を使用することで解決します。**

# ポイント2：同じ入力項目行を増やすUI操作があるか。
　サイトの仕様上、複数レコードを登録するために、同じ入力項目行を増やすことがあります。
　入力項目行が増える度にセレクター内の行に関わる項目が+1ずつされていきます。
　**この場合は変数で解決します。**

# 具体的にそれぞれのポイントに対してどのように対応すればいいか。
　ポイント1,2のパターンでエラーになったときにエラーになった場面に対して
　**UI Explorerの修復を使います。
　するとサイトの差異を認識しワイルドカードが現れ、ポイント1,2のどれに当てはまるか見て
　対応するといいです。**

　具体的な手順を下記の通りです。
　1,UI Explorerを開く。
　　図1の緑枠をクリック、赤枠をクリックするとUI Explorerが開くことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3327229/cc20059c-07eb-d07d-2784-de701b4ad788.png)
　　　　　　　　　　　　　　　　　　　図1 UI Explorerの開き方
　2,修復を押下する。
　　図2の赤枠が活性になっていたらクリックをしましょう。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3327229/5db8630a-9756-a4a8-4a4f-84bbea9fd981.png)
　　　　　　　　　　　　　　　　　　　　図2　修復のボタン
　3,ワイルドカードの存在を確認する。
　　図3,4の赤枠にワイルドカード(*)ができます。
　　図3(ポイント1)の場合は、**このままで保存ボタンを押下します。**
　　図4(ポイント2)の場合は、**変数を設定してから保存ボタンを押下します。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3327229/9c70e2c9-c7ac-cc14-572a-ef72b8b79fe4.png)
　　　　　　　　　　　　　　　　　　　図3　ポイント1の場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3327229/af824241-c961-77e2-ab3a-41a32d6fa7d9.png)
　　　　　　　　　　　　　　　　　　　図4　ポイント2の場合
# 最後に
　この方法でなくてもそれぞれのパターンに対して、セレクターを取りサクラエディタなどに
　貼り付けて比較する方法でもいいと思います。
　**一番大事なことは事前にこのパターンがあることを頭に入れておくことで
　このようなエラーを回避できると思います。**
　今後もこのような記事を書いていくので、困っている方の助けになればいいなと思っています。
HomCloud

突然ですが皆さんTDA（トポロジカルデータ解析）はやっていますか？

本記事はTDAの内容には触れずに，persistent homologyをうまく扱えるツールである HomCloud のチュートリアルを１つやってみたの記事です
＊HomCloudのチュートリアル記事自体は既にあるのですが，理解の備忘録的な意味合いです

[HomCloud](https://homcloud.dev/)

＊persistent homology に関しては，今年のアドカレとかでガッツリ書きます
今は書かないといけない・回収しないといけないネタが多すぎる・・・（自分のせい）

# インストール
https://homcloud.dev/install-guide/index.html

自分の環境に合わせて記載されているコマンドをぽちぽちするだけ

筆者の環境は「OS X (Apple Silicon Mac)」で，特に問題なくできました

# チュートリアル
https://homcloud.dev/tutorials.html

初めはポイントクラウドから始めると良いらしいです

ちなみに筆者は jupyter notebook で server error が起こってなんで？って思っていましたが

1. homcloud/tutorial/python-interface/pointcloud で jupyter notebook を起動
2. jupyter 上で pointcloud.ipynb を選択
3. トークンを求められたため，別ターミナル上で jupyter notebook list からトークンを取得し，それを jupyter 上に入力

で解決しました

参照

https://qiita.com/XTJP/items/29981dc25d80f7fed871

＊そもそもその前に仮想環境に入らずに jupyter を起動してしまって詰まっただなんて言えない・・・（雑魚）

# 3次元点集合データ(ポイントクラウド)

以下は理解の備忘録です（最低限これだけ理解しておけばのコマンドまとめでもある）

カレントディレクトリ：homcloud/tutorial/python-interface/pointcloud

前提
```
import homcloud.interface as hc  # HomCloudのインターフェース
import numpy as np  # NumPy (数値配列)
import matplotlib.pyplot as plt  # Matplotlib (PDの可視化用)
%matplotlib inline
import pyvista as pv  # PyVista (3D可視化)
```

### step1:データからパーシステント図の計算

pointcloud.txt : ３次元空間上の点が1000個記載されているtxtファイル（入力データ）

```
pointcloud = np.loadtxt("pointcloud.txt")
hc.PDList.from_alpha_filtration(pointcloud, save_to="pointcloud.pdgm", save_boundary_map=True)
```

で pointcloud.txt のパーシステント図の情報が ./pointcloud.pdgm として出力されます

### step2:パーシステント図の可視化

```
pdlist = hc.PDList("pointcloud.pdgm")
pd1 = pdlist.dth_diagram(1)
pd1.histogram().plot()
```

で ./pointcloud.pdgm から1次のパーシステント図のみをヒストグラムにプロット
＊色付けや log スケール・拡大・解像度の変更・pngファイルへの保存が可能

### step3:ライフタイムの可視化

```
plt.hist(pd1.deaths - pd1.births, bins=100); 
```

参考
```
pd1.births               # 各点の誕生時間
pd1.deaths               # 各点の消滅時間
pd1.deaths - pd1.births  # 各点の生存時間
```

### step4:逆解析

(0.0025, 0.008) 付近にある birth-death pair の stable volume を調べる

```
pair = pd1.nearest_pair_to(0.0025, 0.008)
stable_volume = pair.stable_volume(0.00005)
```

stable_volume の可視化
```
pl = pv.Plotter()
pl.add_mesh(stable_volume.to_pyvista_boundary_mesh())
pl.show()
```

stable_volume とポイントクラウドの重ね合わせ
```
pl = pv.Plotter()
pl.add_mesh(pv.PointSet(pointcloud))
pl.add_mesh(stable_volume.to_pyvista_boundary_mesh(), color="red", line_width=4)
pl.show()
```

参考
```
pair             # 誕生時間と消滅時間のペア
pair.lifetime()  # 生存時間
```

# まとめとか感想とか
珍しくツールのチュートリアル記事を書きました
エンジニアっぽい記事をやっとQiitaで書けたなって感じです()

チュートリアルはまだまだ続いて，白黒画像とか機械学習と組合せたり，最終的には材料科学へ入っていくため，今後が楽しみです

----------------------
今回の内容はここまでです．ここまでご覧になってくださった方々ありがとうございます！
UiPath実装時うっかり事件(変数と引数)

## はじめに
①本記事は、2023年7月開催の「UiPathブログ 発信チャレンジサマー」の5日目のブログです。
ブログの詳細、参加方法については以下のブログを参照ください。
https://note.com/shumpei_w/n/nd082bdf28853
②このブログ情報は、2023/7時点の情報です。
③UiPathはCommunity Edition、Versionは2023.6.1を使用しています。
④この記事は、筆者がかつて経験したことに基づいて記載しています。
　皆さんは気を付けて実装しましょう。

## 開発中は夢中でアクティビティを配置&設定するから...
アカデミーを学び、いざUiPathで開発！となると緊張でいっぱい。
開発標準も見たし、確認した。設計書は問題ないか？テスト仕様書の準備も...とやることがいっぱい。
ミスしないかとか、この処理はこれで合ってるのかとレビューもしていただき、指摘は直して...と日々戦う。
そんな日々を送った私も思い込みや実装時に見抜けないことをなくしたい。
そんな過去の経験の一例を紹介します。

### ①変数(引数)作ったけど、結局不要でした
設計書にちゃんと書いた。
変数（引数）を設定した。
しかし、設計変更になったので不要になった。名前を付けるの大変だったのに。
それでも仕方ない。そういうこともある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/c324f461-22e7-26e6-7ae7-d6edcc42168a.png)
【解説】
画面の上のリボンのところに「未使用を削除」とあるので、未使用の変数や引数は削除しましょう。
(バージョンによって上記の画像とは異なる場合があります)

### ②変数(引数)のスコープ調整忘れ＆重複
無駄なシーケンスを整理していて、ついスコープのことを忘れて消したらエラー。
「やべっ」と思って慌てて同じ変数（引数）を作る。ところが、あるところで実行したらエラー。いざログを出してみると、空になってる。
よくよく変数の一覧を見たら…重複していた(チーン)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/e6583684-c863-e292-725e-35c5af6cf9a8.png)
【解説】
上記の場合は、変数strSunshineに重複があるので警告の「！」マークが出ています。変数の使用範囲を確認し、どちらかの変数を消すことで解消します。

### ③変数で作ったはずが引数(逆もあり)
変数として使っていたが、ある事情で別xamlへ作ることになったので、同じ名前で引数を作ってしまった。命名規則に沿ってその場で設定しないといけないのに忘れた結果、動かしても値が正しく出てこない...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/af839ca9-aece-b880-436d-e5d8b3c7e484.png)
【解説】
上記の場合、対象の変数or引数で右クリックをすると「引数に変換」または「変数に変換」で対応できます。(名前は適宜変更してくださいね)
(バージョンによって上記の画像とは異なる場合があります)
## まとめ
開発中は、夢中になりすぎて細かいミスに気づきにくいことがあります。納期も心配ですが、まずは落ち着いて作りましょう。焦ってもいいことないです。(実際そうでした)
あとは他者目線でのレビューも大切です。ワークフローアナライザーもあるのでぜひ活用しましょう。
最後までお読みいただきありがとうございました。
忘れ物防止！超初心者がLINEbotで買い物メモ作成

こんにちは！
最近覚えたてのカタカナ言葉を人前で話したくってしょうがない超初心者の会社員です。
数日前までAPIってなに？っていうレベルでした。  


## またやってしまった

「ねぇ、ママ今日工作でモールが必要だったの」  あっ！前に連絡プリントで見た記憶が・・・
学校プリントのお知らせって早め早めの連絡で、まだ日にちあるなーなんて油断してると当日になってる。プリントスキャンアプリを利用するも子供が3人もいたら管理しきれなくって家計簿と一緒で途中棄権。ケータイのメモに入れても結局見忘れたり、なにかズボラな私でも続けられるものないかな？  そんな時に出会ったのがLINEbot。
なにやらいろいろできそうな予感:relaxed:
ついでに業務がシフト制なので月別に学校や保育園の行事予定も入れて休みをとるの忘れないようスケジュール管理もしたいなぁ:point_up:




## ～今回使用したツール～
★Line Deveropers　　★Make　　★Googleスプレッドシート

## ～チャレンジしたけど諦めたツール～
★SSSAIP→GoogleスプレッドシートをAPI化し、JSONコードを用いることでスプレッドシートから欲しい情報を取り出す
★Google　cloud　vision AI→学校プリントを写真で読み込みテキスト化
上記の２つはうまく繋げることが出来ずに断念。:frowning2:






## 早速ご覧ください
https://twitter.com/nonokoyu0606/status/1676575827121836032?s=51&t=KQj6DedZa7ifRk8PH6VCWg


## やりたかったこと
　1. LIneのトークに買いたいものを入力するとスプレッドシートに登録される
　1.5 購入後消去
　2．月ごとの行事予定をGoogleスプレッドで管理し、Lineのトークで呼び出し
　2.5 写真からテキスト化し、スプレッドシートに保存



## 作成手順　　
＜Makeシナリオより＞
Makeを利用しLINEとGooglesheetを繋げます。
![2023-07-04 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3458430/a616c586-ec84-acb6-1d2c-f7ca9290fdf0.png)

・上段のモジュールでは、Lineのトークに買いたいものを入力すると、スプレッドシートに登録
・下段のモジュールではスプレッドシートから月度別の行事予定をLineのトークに表示

・スケジュール管理はフィルタかけて「月（がつ）」という文字で行事予定を呼び出し、そのほかの単語は買物メモに登録し、そして登録した買物メモを呼び出す。


![スクリーンショット (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3458430/5e54a252-2650-5ed5-041a-d2228639b006.png)
・上段モジュールのスプレッドシート


![スクリーンショット (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3458430/fe31eb0c-1546-8eb2-f430-e1c63f2fbcbe.png)
・下段モジュールのスプレッドシート










でもこれが繋がらなくって結局買物メモの登録までしかできなかった。
スケジュール管理と買物メモの分岐がうまく作動しなかった。作動したらその先に進みたかったのに残念。
知識、スキル不足に嘆く毎日。だけど、これで自分自身の不甲斐なさを実感し、前進あるのみ。これを自分の一歩として出来なかったことも記録として残し、数か月後には笑って読めるといいな。





## まとめ
本当は頭の中に作りたいものがぐるぐるしてるのに全然形ならなくって試行錯誤試みましたが、実力不足を突き付けられて、このまま終われない。苦手意識を持たずに、経験値が少ないだけ、経験してないから出来ない。経験積めば出来る様になると信じています。

## 追記
画像コメントの一部を修正
LINEBOTを使い勤務計画を作ってみました

LINEBOTを使い、勤務計画を作ってみました

１、作成したい動機

普段、作成している勤務計画をスプレッドシートと皆が使っているLINEにて分かりやすく掲示出来たらと思いました

２、目標

グーグルのスプレッドシートを使用し、日付別に希望休や勤務をLINEに打ち込めるようにすることが目標

＊Makeを使用し作成してみました。

https://eu2.make.com/6820/scenarios/22294/edit
↑Makeの設定
https://docs.google.com/spreadsheets/d/19zAljk96SWZrQ5dcF0ldc25R8FbdsHgGsXDwKiIKpT8/edit#gid=0
↑Googlespreadsheetの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470854/df04d92d-ee3d-1b65-41a4-d4ac632397c9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470854/a6fc3c0a-5b29-4f95-2da5-e4c7500af9ca.png)


＊結果
出来上がらず途中までだが、出来上がったものは完成した。このまま続けていけば問題なく仕上がる

＊職場でよく使用するエクセルシート設定の場合、どうすればいいか再考の余地あり
[AWS Q&A 365][Fargate]AWSのよくある問題の毎日5選 #91

# 1. Amazon ECS User Guide for AWS Fargateにおけるタスク定義とは何ですか？
答え：タスク定義とは、Amazon ECSのタスクの一部として実行されるコンテナの設計図です。コンテナイメージ、CPUおよびメモリ要件、ネットワーキング、ログ記録の設定など、さまざまなパラメータを定義します。

# 2. Amazon ECS User Guide for AWS Fargateにおけるタスク定義の異なる状態とは何ですか？
答え：Amazon ECS User Guide for AWS Fargateにおけるタスク定義の異なる状態とは、ACTIVE、INACTIVE、および RETIREDです。

# 3. Amazon ECS User Guide for AWS FargateにおけるFargateタスク定義の考慮事項は何ですか？
答え：Amazon ECS User Guide for AWS FargateにおけるFargateタスク定義の考慮事項には、ネットワークモード、タスクCPUとメモリ、ログ記録、IAMロール、タスクストレージ、アプリケーションアーキテクチャが含まれます。

# 4. Amazon ECS User Guide for AWS Fargateでタスク定義をどのように管理できますか？
答え：Amazon ECS User Guide for AWS Fargateにおけるタスク定義は、Amazon ECSコンソール、AWS CLI、またはAWS SDKを使用して管理できます。タスク定義を作成、更新、削除し、そのパラメータを表示および変更することができます。

# 5. Amazon ECS User Guide for AWS Fargateにおけるタスク定義パラメータの役割とは何ですか？
答え：Amazon ECS User Guide for AWS Fargateにおけるタスク定義パラメータは、タスクのさまざまな側面を定義します。これには、ファミリー、起動タイプ、タスク実行ロール、ネットワークモード、ランタイムプラットフォーム、タスクサイズ、コンテナ定義、その他のパラメータが含まれます。これらは、タスクをあなたの要件に合わせてカスタマイズすることを可能にします。
[AWS Q&A 365][Fargate]Daily Five Common Questions #91

# 1. What are task definitions in Amazon ECS User Guide for AWS Fargate? 
Answer: Task definitions are a blueprint for the containers that run as part of a task in Amazon ECS. They define various parameters such as the container image, CPU and memory requirements, networking, and logging configuration. 

# 2. What are the different states of a task definition in Amazon ECS User Guide for AWS Fargate? 
Answer: The different states of a task definition in Amazon ECS User Guide for AWS Fargate are ACTIVE, INACTIVE, and RETIRED. 

# 3. What are the considerations for Fargate task definition in Amazon ECS User Guide for AWS Fargate? 
Answer: The considerations for Fargate task definition in Amazon ECS User Guide for AWS Fargate include network mode, task CPU and memory, logging, IAM role, task storage, and application architecture. 

# 4. How can you manage task definitions in Amazon ECS User Guide for AWS Fargate? 
Answer: You can manage task definitions in Amazon ECS User Guide for AWS Fargate using the Amazon ECS console, AWS CLI, or AWS SDKs. You can create, update, and delete task definitions, and also view and modify their parameters. 

# 5. What is the role of task definition parameters in Amazon ECS User Guide for AWS Fargate? 
Answer: Task definition parameters in Amazon ECS User Guide for AWS Fargate define various aspects of the task, such as family, launch types, task execution role, network mode, runtime platform, task size, container definitions, and other parameters. They allow you to customize the task according to your requirements.
社会人2年目が思う、「レコロク」の良さと使い方

## はじめに
こんにちは。Qiita株式会社で主に[Qiita Zine](https://zine.qiita.com/)の記事ディレクションを担当している、非エンジニアです。日々新しい言葉に出会い、難しいなぁと思うと同時に面白さも感じています。

さて普段は記事制作に携わっているのですが、毎回学びと気づきだらけ。「レコロク」についてもインタビューを聞きながら、「なるほど便利だ」と思う機能や使い方が多々ありました。中でも今回は、社会人2年目という立場から良いなと思った機能と理由を挙げてみます。

## 議事録を取る必要がないから、議論が活発に

「議事録取らなくて良い、ラッキー☆」ということではなく、取らないからこそできることが増えます。個人的には、議事録を取ることで、知らない単語や会社の仕組みについて否応無しに知ることができるし調べるので良いと思っています。特に会社に新しく入った人にとっては必要です。しかし議事録を取ることに必死になるあまり、会議の内容を深くまで理解できなかったり、質問の機会があっても十分にまとめられていなくて聞けなかったりすることもある気がしています。

録画と書き起こし機能を備えたレコロクは、議事録を取る人の代わりになってくれて、そのようなもどかしさもなくせると思っています。議事録はレコロクに任せて、会議の内容を理解して、質問も考えられる。

## 録画で見返せるから、ニュアンスが分かる
特にリモートワークが多い職場だと、会議の内容などはテキストで共有されることが一般的だと思います。しかし細かなニュアンスが分からないとか認識していた温度感にズレがあるなど、ときどき何かしらの齟齬が生じることがあると思っています。逆に、しっかり聞いていなくてもオフィスやオンラインMTGでふと聞こえた内容は、話の前提や背景が分かることも多い。それはテキストだったら省略するような細かい内容も、口頭での会話であれば「そういえば〜」というように、フランクに話しているからじゃないでしょうか。

「細かなニュアンスが分からないとか、認識していた温度感にズレがある」は、レコロクを触ったりインタビューを聞いたりしているうちに、解消できると思いました。

特に新入社員や転職して会社に入りたての人は、例え業界や業務の知識があっても、会社のカルチャーに慣れるには時間がかかります。リモートワークが多く、オフラインでのコミュニケーションがないと余計に。

だからレコロクのように議事録としての動画があれば、要点だけを確認したいときも、前後の背景を知りたいときも、どのようなシチュエーションでも活用してくれる便利なツールだと感じています。

## 最後に
気になるな〜と思ったら、一度触ってみてください。私のこの記事よりもいろいろ詳しく話してもらっているものがあるので、もう少し詳しく知りたい！と思ったら、こちらも見てみてください。

https://zine.qiita.com/interview/202306-recoroku/
RubyでAtCoder ABC308(A, B, C)を解いてみた

# はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC308のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

# A - New Scheme
https://atcoder.jp/contests/abc308/tasks/abc308_a
```ruby:a-308.rb
s = gets.split.map(&:to_i)
puts s == s.sort && s.all?{ 100 <= _1 && _1 <= 675 && _1 % 25 == 0} ? "Yes" : "No"
```

# B - Default Price
https://atcoder.jp/contests/abc308/tasks/abc308_b
```ruby:b-308.rb
n, m = gets.split.map(&:to_i)
c = gets.split
d = gets.split
a = gets.split.map(&:to_i)

b = a.shift
hash = d.zip(a).to_h
puts c.map{ 
  hash[_1] ? hash[_1] : b
}.sum
```
## 解説
最初に、dとaの長さを揃えるために`shift`メソッドを使ってaの先頭の要素を取り出し、これをbとしておきます。次に、`zip`メソッドを使ってdとaの各要素からなる配列をもとに連想配列を作ります。最後に、cの各要素に対してその色が`hash`に含まれているかどうかにより値を変更した後、その総和を求めることで解くことができます。

# C - Standings
https://atcoder.jp/contests/abc308/tasks/abc308_c
```ruby:c-308.rb
n = gets.to_i
$array = Array.new(n){ gets.split.map(&:to_i) }

def f(i, j)
  return $array[i][j]
end

def function_p(s, t, r)
  return s * (t + r)
end

result = [*1..n].sort! { |i, j|
  i -= 1
  j -= 1
  a1, b1 = f(i, 0), f(i, 1)
  a2, b2 = f(j, 0), f(j, 1)

  p1, p2 = function_p(a1, a2, b2), function_p(a2, a1, b1)

  p1 == p2 ? i <=> j : p2 <=> p1
}
puts result.join(" ")
```
## 解説
（他の方の提出結果を参考にしました）

誤差を考慮して、分母を払った状態で計算します。このとき、確率が等しければ`i<=>j`でインデックスの大小を比較し、そうでなければ`p2<=>p1`で各要素の大小を比較することで答えを求めることができます。

# 参考
[Array#sort](https://docs.ruby-lang.org/ja/latest/method/Array/i/sort.html)

https://qiita.com/shoya15/items/50fd17e37d7c64f2b166
TCPとUDPについて

# はじめに
毎週1本様々な技術に関する記事を投稿しています。
もし興味のある方は下のリンクから他の記事も見ていただければ幸いです。
 [@7_inai_](https://qiita.com/7_inai_)

本記事では、トランスポート層の代表的な通信プロトコルである、「TCP」と「UDP」の違いについて解説します。

# TCPとは
TCP（Transmission Control Protocol）は、インターネットプロトコルスイートの一部で、__信頼性のあるデータ通信を提供するプロトコル__ です。TCPは __コネクション指向のプロトコル__ であり、データのパケットが送信元と宛先の間で __確実に届くことを保証__ します。これは、データの順序が保持され、データの欠落や重複を防止することを意味します。
# UDPとは
UDP（User Datagram Protocol）は、TCPと同じくインターネットプロトコルスイートの一部で、__非常に軽量な通信を提供するプロトコル__ です。UDPは __コネクションレスのプロトコル__ であり、__データの信頼性や順序の保証はありませんが、その代わりに高速なデータ転送__ を実現します。UDPはリアルタイムアプリケーションやストリーミングサービスなどに適しています。

# TCPとUDPの違い
TCPとUDPの主な違いは次のとおりです
- コネクション指向 vs コネクションレス
TCPはコネクション指向であり、__コネクションの確立と終了が必要__ ですが、UDPはコネクションレスであるため、__即座にデータを送信__ できます。
- 信頼性
TCPは __パケットの損失を検出し、再送信することで信頼性を確保__ しますが、UDPは信頼性を保証せず、パケットの損失が発生する可能性があります。
- 順序
TCPはデータの __順序を保持__ しますが、UDPはパケットの __到着順序を保証しません__ 。

# TCPとUDPの使い分け
TCPとUDPの適切な使い分けは、アプリケーションの要件によって異なります。
- TCPの使用例
Webブラウジング、ファイル転送、メール送信など、データの信頼性や順序が重要な場合にはTCPを使用します。
- UDPの使用例
リアルタイムゲーム、音声通信、ストリーミング、DNSなど、リアルタイム性が重要で、一部のデータの損失が許容される場合にはUDPを使用します。

# 終わりに
TCPとUDPは、ネットワーク通信における重要なプロトコルであり、それぞれの特徴や適切な使い分けを理解することは大切です。アプリケーションの要件に基づいてTCPかUDPかを選択することで、効率的かつ信頼性のあるネットワーク通信を実現できます。

最後までお付き合いくださりありがとうございました。
AppleScriptとショートカットアプリを使ってメニューバーから簡単にパスワード一覧を開く

# はじめに
この記事では、AppleScriptとショートカットアプリを使って、メニューバーから簡単にパスワード一覧を開く方法を紹介します。

# AppleScriptとは
AppleScriptとは、macの操作を自動化するための言語です。今回は、AppleScriptを使って、設定アプリのパスワード一覧を開きます。

# ショートカットアプリとは
ショートカットアプリとは、macの操作を自動化するためのアプリです。ショートカットアプリは、Apple Scriptを実行することができます。また、ショートカットアプリで作成したショートカットは、メニューバーから実行することができます。

# やり方
## 1. ショートカットアプリを開く
![スクリーンショット 2023-07-05 22.57.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/03fbe5c5-f2db-63f0-6c0f-97dea5843155.png)

## 2. ＋ボタンをクリックして、ショートカットを作成する
左上の＋ボタンをクリックして、ショートカットを作成します。
## 3. ショートカット名を設定する
タイトルバーのタイトルをクリックすると、ショートカット名を変更できます。
## 4. 「AppleScriptを実行」を追加
右のサイドバーで「AppleScript」と検索し、「AppleScriptを実行」をダブルクリックすると追加できます。
![スクリーンショット 2023-07-05 22.59.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/f316f01c-e3f4-3aa1-bcdf-5ba9b80500f5.png)

## 5. AppleScriptを記述する
このコードは、設定アプリを開いて、パスワード一覧を表示します。
```
tell application "System Settings"
	activate
	reveal pane "パスワード"
end tell
```
## 6. ショートカットを実行する
ショートカットを実行すると、設定アプリのパスワード一覧を開けることが確認できます。
## 7. メニューバーにピンで固定
これで、メニューバーから簡単にパスワード一覧を開けるようになりました。
![スクリーンショット 2023-07-05 23.01.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/0377e7dd-898d-b2e9-b8cd-bd5e08f200b4.png)


# おわりに
AppleScriptとショートカットアプリを使って、メニューバーから簡単にパスワード一覧を開く方法を紹介しました。この記事が参考になったと思った方は、いいねとフォローしていただけると嬉しいです☺️
Unityでゲームを作る時に気を付けたいこと

どことは言わないが、同人系販売サイトに登録して作った物を売ってお小遣い稼ぎしようかなと考え、とりあえず物を作った。

で、これまでを振り返り、気を付けたいことを備忘録として個人的にまとめる。
書き上げた後から読み返すと、だいたい当然の事しか書いてないような気がするなぁ…。

# 作るゲームのボリュームを考えよう
よく言われる初心者がやりがちなやつね。
いきなりソウルシリーズみたいなアクション、FFやドラクエみたいなRPGを作りたいと言って手を動かし始めるやつ。
作ろうとしている物は、自身の実力や集中力、予算や期限に見合っているか？
やるにしてもまず初代マリオから始めた方が良いんじゃないか？
そこそこUnityの知識を蓄えた状態でロックマン的な物を作ろうとしたら、こんがらがって一旦作るの止めた。
で、ゲーム性がほぼないミニゲーム的な物を作って誤魔化した感じだけど、それでも売り物となる最初の作品として作り上げるのに半年ほどかかってるんだから、ロックマン的な物を作り続けてたらきっともう1～2年かかってたと予想できる。
ちょっとしたUnity自信ニキだと思い込んでる私でこのザマよ。
だってペイントツールで画像素材を自作したり、Blenderでモーション作成したりとかが思いのほかダルいんだもの。
モーションキャプチャー欲しいわ…。

# 定期的にビルドして.exeを実行しろ
この機能作った！Unityエディタ上で想定通りに動いた！ヨシッ！
で、他の機能とか諸々作った後に、いざビルドして吐き出されたexeを実行したらなんか挙動がおかしいんだけど？
って事が結構あったので、定期的にビルドしてexeを動かした方が良い。

体験版できたぞ！出力して動確だ！
exe動かしたら変なところがあるから直したぞ！
エディタ上では問題ないぞ！
exe動かしたら変なところが（ｒｙ
エディタ上では（ｒｙ
exe動か（ｒｙ
……いつ体験版出せるんや…ってなった

あとはエディタ上で動確するよりも実は負荷がかかってカクつきが酷いとか、セーブデータファイルだとかの配置場所があまりよろしくなかったとか、そういう発見もあるかもしれんし。

実際、ネットの情報だけで作ってると「Unityエディタ上では動くけど実機だと動きませんor実機動確未確認です」みたいなトラップはそれなりにあると思う。


# Resourcesフォルダは使わない or 最低限の使用に留める
公式が使うなって言ってるっていうのは何となく知ってたけど、実際に人前に出すつもりの物を作ると理解できる。
プレハブも画像も音声も3Dモデルも全部Resoucesに入れてると起動時に読み込むデータ量が～…とかそういう話もあるけど、それ以前に画像とかの素材が生データのままユーザーが触れる状態になってしまうので、素材を改変されたり削除された後のゲームの動作とか画像素材等の権利的なところで非常に危険。
手動で面倒だとしても、publicなり[SerializeField]なりを使って必要素材を事前設定するようにしとけ。（それが良いやり方かは知らないが）
Resources.Load()は使わないに越したことはない。

# 事前の技術検証はしっかりと
ゲームの内容や要素を考えて、「こういう技術（機能）は必要。最悪ぶっ壊れても良いテストプロジェクト作って実現性可否の確認と実装判断をしよう」みたいにしましょうねっていう話。
なので実際に作り始める前に使いたい機能は洗い出しておくべき。
開発途中で実装するってなった場合に、プロジェクトの構成自体が変わるような大きな変更が必要な技術なら、いっそ見送るか1から作り直すかの選択をするべき。（1敗）
デカール機能使いたいなぁ⇒URP？HDRP？良く分からないけどその機能を入れればいいんだろ！⇒既存シェーダー諸々破壊して改善もできずゲーム画面が酷いことに…
ということを一度やって反省した。
実際の開発と平行して追加検証用のプロジェクトとしても使えるだろうし。

# 不定期でもいいからバックアップはちゃんと取る
当然の話かもしれないけどね。
前述の通り一度プロジェクト破壊したけど、バックアップ取ってたおかげ事無きを得た。
バックアップツールを導入するなり、自前でそういうツールを作るなりして万一に備えよう。

# ざっくりでいいから作業スケジュールを立てておく
この工程を何月までに終わらせるってやつ。
まあ、（少なくともIT業界の）社会人をやっていれば作業計画は当然立てるべきことではあるかも…？
ざっくりでもスケジュールを出すには、当然ながら途中で何をやるのかもある程度は明確にしておかないといけない。
そういう意味でも事前の技術検証とかやっておけば、必要な工程は洗い出せるかと思う。
そもそもいきなり手を動かし始めても、直近のやりたいことをやり終えたら「次は何をすればええんや…」って感じで路頭に迷いかねない。
そうならないようにするための道標にもなる。
ええ、「個人製作だし適当でええやろ」で進めた私は迷いに迷って色々ととっ散らかりましたとも。

# プロジェクトを作成する前に、ある程度の設計はしておく
エクセルでもメモ帳でも良いから、どんな要素があるのか・どういう機能が必要か・どういうファイルが必要か・どういうクラスが必要かくらいは書いておくと良い。
最終的にそれが設計書らしくはなると思う。
漠然とした状態で作り始めても、迷走ばかりして疲れて諦めた、みたいになりそうだしね。

# プロジェクト内のフォルダ構成も決めておく
設計段階の話で意外と大事。
いざ作り始めると、適当にフォルダを作って適当な場所にファイルを配置しがち。
で、ある程度プロジェクトの規模が大きくなってくると、どのファイルがどこに置いてあったのか分からなくなる。
人によっては無駄に煩雑になったフォルダ構成にイラっとするかも。
これは実際に自分に合った構成を作るようにした方がいいけど、イメージが湧かないならググって他の人がどんな構成にしてるのか調べてもいいかも。
あと、一度その構成をテンプレートにできれば以後のゲーム制作でもフォルダ構成をそのまま流用できたりするし、やっておいて損は無いはず。
RECOROKUでビデオ会議の議事録作成を自動化したい

## はじめに

議事録書いてますか？

私は、リモートワークが多いので、ZoomやTeamsをよく使っています。そして、会議終了後に録画動画が送られてきます。

**まず見ませんよね。動画を送られても。**

ナレッジが消えていくのがもったいなくて、
今まで、いろんな手段を試してきました。

Amazon Transcribeで文字起こしするとか
iPhoneのアプリなども試してみましたが、微妙でした。

大量に送られて、死蔵されていく会議録画をなんとかしたい・・・
そんな中でRECOROKUのサービスを見つけたので試してみました。


## RECOROKUとは？

https://recoroku.com/

会議動画をアップロードすることで、文字起こし、映像シーン検索ができる。

というサービスです。

会議動画は録画済みの動画ファイルをアップロードするか、専用のソフトで録画します。

無料でトライアルができます。


## やりたいこと

やりたいことは、日々送られてくるZoomやTeamsの録画動画を文字起こしして、検索可能にすることです。

様々な種類の会議があり、それらをすべて横断して検索したいです。
これができるなら夢のようです。


## RECOROKUでやってみよう

### RECOROKUの登録 〜 ログイン

まず、[RECOROKUの公式サイト](https://recoroku.com/)から、無料トライアルの申請をします。

メールアドレスがあれば登録できます。
クレジットカード登録も不要でした。素敵ですね。

ログイン後、RECOROKU専用の録画アプリがダウンロードできるようになりますが、私の目的は録画済みZoomとTeamsなのでスルーしました。


ログインすると以下のようなダッシュボードが表示されます。

![Screenshot 2023-07-05 at 21.15.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141013/dd8f4344-7834-da97-8469-2c85fa3272ad.png)

初心者向けのツアーなども表示されましたが、スルーします。なくても使えるぐらいシンプルです。

### チャンネルの作成

左のChannelのプラスボタンを押してチャンネルを作成します。
とりあえず定例会議という名前にしておきます。

![Screenshot 2023-07-05 at 21.17.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141013/d2bda0fd-425d-7c7d-d5af-338ad208244c.png)


### 動画のアップロード

チャンネルに入ると、会議の動画をアップロードできます。


![Screenshot 2023-07-05 at 21.22.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141013/5dcf3879-d6a5-72e5-e0b0-c89971a35d35.png)



本物の会議動画をアップロードすると、この記事で公開できなくなってしまうので
Python Conference2017のクリエイティブ・コモンズ動画を使わせてもらいました。

メディア会議 - PyCon JP 2017 by PyCon JP licensed under [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/legalcode)

この動画ファイルは、Zoom録画でもTeams録画でもないので、Google Meetボタンでアップロードしました。

### 動画から自動で文字起こし

アップロードしてから数分すると、下の画像のように文字起こしが完了していました。


![Screenshot 2023-07-05 at 21.31.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141013/151b2778-a2a4-886e-d206-8cce67ff4208.png)


### 文字起こし、動画シーン検索

ここでAll Playボタンを押すと、下の画像のように文字起こしと動画を左右で見れる画面になります。
この画面では、文字起こしの発言をクリックすると、動画のその地点にジャンプします！

さらに、発言の時点から開くURLを発行することができるのでSlackで共有もできます。

![Screenshot 2023-07-05 at 21.32.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141013/d4bb3942-aa1b-f5c6-6920-49c2c0cf1ac2.png)

このスクリーンショットでは、敢えて文字起こしが失敗しているところを選んだのですが

正: オライリーさん
誤: お離散

それ以外を見てみると、口語的な内容でも、そこそこうまく文字起こしできています。
この動画ファイルはノイズが乗っていたりもするのですが、優秀ですね。
文字起こしが間違っている部分は、手動で編集することもできます。


次に画面上部で文字起こしから検索をしてみようとしたのですが、これはうまくヒットしませんでした。


様々なワードで検索してみたのですが、どれも0ヒットでした。
おそらく近いうちに動くようになってくれるんじゃないかなと思います。


## RECOROKUのユースケース

使ってみて有用そうなユースケースを3つ挙げてみます。

### 参加していなかった会議の内容把握

参加できなかった会議動画をRECOROKUにアップロードすれば時短で内容把握ができそうです。
文字起こしを見ながら動画にジャンプできるのは便利でした。

### 議事録作成の省コスト化

手で議事録を書いて、議事録を会議後に回覧依頼して、議事録に間違いがないか承認するなど、議事録にまつわるコストは大きいです。

動画+文字起こしが確実に保存できれば、これらのコストは省けることもあるはずです。

### 会議内容のナレッジ化

誰かがこの話をしていたはずなんだけど・・・
これはどんな内容だったっけ・・・

会議発言が自動で検索可能になれば、埋もれていた会議動画のナレッジを有効活用できるようになりそうです。
他グループの会議でも、このシステムに登録しておいてもらえば、検索⇒動画という新しい発見に繋がりそうです。



## 最後に

とてもシンプルに使えるシステムでした。
会議のナレッジ化に役立ちそうですね。

検索機能がうまく動くようになるのが楽しみです。
バックアップソフト紹介 - Veeam Backup & Replication 

# Veeam Backup & Replication とは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091403/71be56b5-54fe-5480-1aae-3f35a2142bae.png)
Veeam Backup & Replication(以下Veeam)はVeeam Softwareが提供するバックアップソフトです。
仮想マシン、物理マシン、クラウドマシンのイメージレベルのバックアップを作成し、そのバックアップからリストアすることができます。

# Backup & Replicationコンソールを使用して管理する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091403/d66f77bc-8641-1b19-ebd7-569469e2609e.png)
バックアップやリストアなどの操作を管理するためのBackup & Replicationコンソールを使用することができます。

# Veeamの主な機能
### バックアップ
仮想マシン、物理マシン、クラウドマシンのイメージレベルのバックアップおよびNAS共有ファイルのバックアップを作成します。
### リストア
バックアップファイルから元の場所や別の場所に復元します。
他にもファイル単位でリストアするといった機能等があり、柔軟にリストアすることができます。
### レプリケーション
仮想マシンの正確なコピーを作成し、作成したコピーを元の仮想マシンと同期して保持します。
### バックアップコピー
バックアップファイルをセカンダリリポジトリにコピーします。

※セカンダリリポジトリとは、Veeamのバックアップ保存先はバックアップリポジトリという名前で扱われおり、通常のバックアップはバックアップリポジトリにバックアップファイルを保持します。
バックアップコピーでは、バックアップファイルを補助的なバックアップリポジトリ(セカンダリリポジトリ)にコピーすることができます。

### CDP
継続的に対象の仮想マシンレプリカを継続的に最新状態を維持します。
災害が発生した場合に仮想マシンレプリカを使用し、仮想マシンを数秒前または数分前の状態に復元することができます。

# まとめ
Veeamを利用することでバックアップを簡単に取得することができます
紹介しました機能以外にも、ストレージと連携してスナップショット取得する機能もあったりと、
様々な機能を利用することが可能です。
少しでも参考になれば幸いです。
CapistranoでAWS EC2にデプロイする際に、`bundle lock --add-platform x86_64-linux` and try again.で詰まった

# はじめに
学習用のメモとして投稿します。
Capistranoを使用して、Railsで作成したアプリをAWS EC2にデプロイをする機会がありました。
その際に遭遇したエラー\`bundle lock --add-platform x86_64-linux\` and try again.とその解決策について書いていきます。

# Capistranoでデプロイ
色々と設定して、いざデプロイということで、次のコマンドを実行します。
```zsh:
bundle exec cap production deploy
```
・・・失敗しました。。

エラーを見ると、次のような記載があります。
```zsh:
# 略
Your bundle only supports platforms ["aarch64-linux"] but your local platform
is x86_64-linux. Add the current platform to the lockfile with
`bundle lock --add-platform x86_64-linux` and try again.
# 略
```
親切にも`bundle lock --add-platform x86_64-linux`を実行してから、再度トライするように教えてくれています。
指示通りに、ターミナルで次のコマンドを実行します。
```zsh:
bundle lock --add-platform x86_64-linux
```
このコマンドにより、Gemfileにプラットフォームが追加されます。

```none:Gemfile
# 略
PLATFORMS
  aarch64-linux
  x86_64-linux # 追加
end
# 略
```

準備は整ったので、次のコマンドを再度実行します。

```zsh:
bundle exec cap production deploy
```
・・・失敗しました。。

エラーを見ると、さっきと同じ内容が。。
```zsh:
# 略
Your bundle only supports platforms ["aarch64-linux"] but your local platform
is x86_64-linux. Add the current platform to the lockfile with
`bundle lock --add-platform x86_64-linux` and try again.
# 略
```


# 原因
ローカルでの変更を、リモートリポジトリにプッシュしていないためでした。
`bundle exec cap production deploy`コマンドでは、設定したリモートリポジトリのコードを、設定したデプロイ先にデプロイしてくれますが、このコマンドが、リモートリポジトリへのプッシュの実行まで含んでいるわけではありません。変更をリモートリポジトリにプッシュして、再度トライします。

```zsh:
git push origin main
bundle exec cap production deploy
```
これでようやくデプロイできました。
よく理解しないままコマンドを打つのは良くないと改めて痛感しました。

参考にした記事

https://qiita.com/take18k_tech/items/5710ad9d00ea4c13ce36

https://qiita.com/iloveomelette/items/3c0f2dd3faa2fcefc948
Spring Boot @Bean @Component 違い

どちらで登録するオブジェクトもSpringコンテナに登録される

### Bean（カスタムしたインスタンスを登録）

```java:CustomGreeting.java
// 引数つきコンストラクタを勝手に生成してくれるアノテーション
@AllArgsConstructor
public class CustomGreeting {
	private final String name;
	private final String words;

	public void greeting() {
		System.out.println(words + name + "さん");
	}
}
```
カスタムインスタンスをBean登録
```java:BeanConfiguration.java
@Configuration
public class BeanConfiguration {

	@Bean
	CustomGreeting greetTanaka() {
		return new CustomGreeting("田中", "こんにちは");
	}

	@Bean
	CustomGreeting greetJohn() {
		return new CustomGreeting("John", "hi");
	}

}

```
### Component（クラスのインスタンスが登録される）
```java:BeanSample.java
@Component
public class BeanSample {

	public void hello() {
		System.out.println("hello");
	}

}
```


### 実行
```java:SampleApplication.java
@SpringBootApplication
public class SampleApplication {

	public static void main(String[] args) {
		ConfigurableApplicationContext context = SpringApplication.run(SampleApplication.class, args);
		BeanSample bean = context.getBean(BeanSample.class);
		bean.hello();

		CustomGreeting greetTanaka = (CustomGreeting) context.getBean("greetTanaka");
		greetTanaka.greeting();

		CustomGreeting greetJohn = (CustomGreeting) context.getBean("greetJohn");
		greetJohn.greeting();

		context.close();
	}

}

```

```
hello
こんにちは田中さん
hiJohnさん
```


### Beanで登録したオブジェクトを引数に

登録されるクラス
```java:Yuusha.java
@AllArgsConstructor
public class Yuusha {
	private String name;
	private Mahou mahou;
	
	public void attack() {
		System.out.println("勇者" + name + "の攻撃");
		mahou.hatudou();
	}
}
```

引数で登録するクラス
```java:Mahou.java
@AllArgsConstructor
public class Mahou {
	private String zokusei;
	private int count;

	public void hatudou() {

		if (count-- >= 0) {
			System.out.println(zokusei + "を発動しました");
		} else {
			System.out.println("MPがありません");
		}

	}
}
```

Beanを登録
```java:BeanConfiguration.java
@Configuration
public class BeanConfiguration {

	@Bean
	Yuusha yuushaYoshida(Mahou fire) {
		return new Yuusha("Yoshida", fire);
	}

	@Bean
	Mahou fire() {
		return new Mahou("ふぁいあー", 3);
	}

    // 適当なBeanも登録しておく
	@Bean
	Mahou kaminari() {
		return new Mahou("かみなり", 3);
	}

}
```

### 実行
```java:SampleApplication.java
@SpringBootApplication
public class SampleApplication {

	public static void main(String[] args) {
		ConfigurableApplicationContext context = SpringApplication.run(SampleApplication.class, args);
		BeanSample bean = context.getBean(BeanSample.class);

		Yuusha yuushaYoshida = (Yuusha) context.getBean("yuushaYoshida");
		yuushaYoshida.attack();
		yuushaYoshida.attack();
		yuushaYoshida.attack();
		yuushaYoshida.attack();
		yuushaYoshida.attack();

		context.close();
	}

}
```

しっかりfireが登録されている
```
勇者Yoshidaの攻撃
ふぁいあーを発動しました
勇者Yoshidaの攻撃
ふぁいあーを発動しました
勇者Yoshidaの攻撃
ふぁいあーを発動しました
勇者Yoshidaの攻撃
ふぁいあーを発動しました
勇者Yoshidaの攻撃
MPがありません
```
Azure Functions + Spring Bootの開発を始める方法

# これはなに
Azure Functions + Spring Bootの開発環境を作る方法とサンプルコードのデプロイまでの手順

# 環境構築
必要なのは以下に紹介する3つのものだけです。IDEなどはお好きなもので構いません。

##### Microsoft Build of OpenJDK
Azure開発向けのJDKです。お使いのOSに合わせてインストールしてください。
Javaのバージョンは執筆時点で最新の17を推奨します。

https://learn.microsoft.com/ja-jp/java/openjdk/download

##### Azure Functions Core Tools と Azure CLI
これもOS毎のインストール方法をマイクロソフト公式が案内しています。
どちらもお使いの環境に合わせてインストールしてください。

https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-run-local?tabs=windows%2Cportal%2Cv2%2Cbash&pivots=programming-language-java#install-the-azure-functions-core-tools

https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli

# ローカルで動かしてみる
ここまでのインストールが終わったらもうローカルで動かす準備はOKです。
こちらのサンプルコードを拝借して動かしてみます。

https://github.com/tzolov/hello-spring-function-azure/tree/di-integration

以下のコマンドを叩けば問題なく実行されるはずです。

```powershell
./mvnw clean package
./mvnw azure-functions:run
```

# Azure Functionsにデプロイする
### デプロイ前に設定の修正が必要
デプロイの前に、このあたりの設定をいくつかカスタマイズする必要があります。
- `<functionAppName>` は、自分の Azure 関数の名前です
- `<functionAppRegion>` は、自分の関数がデプロイされる Azure リージョンの名前です
- `<functionResourceGroup>` は、使用している Azure リソース グループの名前です

```xml:pom.xml
        <!-- customize those three properties. The functionAppName should be unique across Azure -->
        <functionResourceGroup>my-spring-function-tzolov1-resource-group</functionResourceGroup>
        <functionAppServicePlanName>my-spring-function-service-plan</functionAppServicePlanName>
        <functionAppName>my-spring-function-tzolov1</functionAppName>

        <functionAppRegion>westeurope</functionAppRegion>
        <functionPricingTier>Y1</functionPricingTier>
```

### Azure CLIで自身のAzureアカウントにログイン
WindowsならコマンドプロンプトやPowerShellで利用できます。
```powershell
az login
```
上記コマンドを実行するとブラウザで認証画面が開くので、ログインしてください。

ログイン後に以下のコマンドを実行すると、有効なサブスクリプションの一覧が表示されるはずです。
```powershell
az account list
```

### デプロイ
ここまで来たら準備完了です。後はコマンド一つでデプロイできます。

```powershell
./mvnw azure-functions:deploy
```

#### 参考

https://learn.microsoft.com/ja-jp/azure/developer/java/spring-framework/getting-started-with-spring-cloud-function-in-azure

https://learn.microsoft.com/ja-jp/cli/azure/authenticate-azure-cli

https://learn.microsoft.com/ja-jp/cli/azure/account?view=azure-cli-latest
Drupal Better Exposed Filters の罠

ハマったついでにモジュールの紹介です。

## できること
- views のフィルターを select タグからラジオボタンやチェックボックスに置き換えることができる
- views のフィルターに Ajax 機能を追加できる
- 自動送信機能

等など

## 導入方法
### インストール
- Better Exposed Filters ページに遷移
https://www.drupal.org/project/better_exposed_filters
- composer でパッケージ導入
    - `composer require 'drupal/better_exposed_filters:^6.0'`
- モジュール有効化
    - `drush en better_exposed_filters`

### Views の設定

- `views 設定画面` > `高度` > `外部設置フォーム` 
![スクリーンショット 2023-07-05 21.44.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1323938/e45cf71c-46a2-dcb7-8eb3-cbf773e3c950.png)

- デフォルでは`基本`になっているのを `Better Exposed Filters` に変更  
![スクリーンショット 2023-07-05 21.45.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1323938/62a2d8de-27b1-0002-cf07-7ad96dd828ef.png)

- `Enable auto-submit` にチェックを入れて自動送信機能を適用
- 送信ボタン非表示にもチェックを入れておきます
- selectタグ から ラジオボタンに切り替えておきましょう
![スクリーンショット 2023-07-05 21.55.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1323938/78dc20ac-aa03-525b-8682-7765d870f2f7.png)


できたので views ページを見に行きます。




<br><br>
<br>
<br>


### Before
![スクリーンショット 2023-07-05 19.19.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1323938/54cb3a92-6d55-6bd8-860a-be04d5c0f30d.png)

### After
![スクリーンショット 2023-07-05 21.58.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1323938/4e3c2929-51ea-6d16-482e-484b7de772ae.png)


送信ボタン(適用)を押さずに値が変更されるのが確認できました。
めでたしめでたし



<br><br>
<br>
<br>


あれ..?Ajax 効いてないな..

｜[ドキュメント](https://www.drupal.org/docs/contributed-modules/better-exposed-filters)｜　λ............ﾄﾎﾞﾄﾎﾞ

<br>
<br>
<br>
<br>
<br>
<br>

<br>

> jquery-ui-touch-punch ライブラリが /web/librariesフォルダー にあることを期待します★

<br>
<br>
<br>
<br>
<br>
<br>


これだけ。
ドキュメントと何なのか。

パッチを見るもわからず1時間が経過...

<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>

!!!!
![image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1323938/4ae25443-bceb-444b-e4f3-3a86b9aef3e7.jpeg)

もう2,3回この件やってますね。
`いいえ` から `はい` に変更する必要がありました。
皆様はお忘れなきよう :pray: 

`views の設定画面` > `高度` から設定できます。
Windows11 でWinshotの画面が切れるときの対処法

## はじめに
Windows11 でWinshotの画面が切れるときの対処法を備忘も兼ねて投稿しようと思います。

## 画面が切れる

画像のように画面が切れてしまう時があります。
![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091403/3e0031f2-1d06-c183-ce3d-3a3a8846d602.jpeg)

## WinShotの設定を変更してみる
エクスプローラーから[WinShot.exe]を右クリックし、[プロパティ]を選択します。
![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091403/b88f85dc-407e-69d7-0042-be96fe74ea47.jpeg)

[互換性] - [高DPI設定の変更]をクリックします。
![WS000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091403/ed0ee129-aa39-9d4d-246f-2a69357525eb.jpeg)

[高DPIスケール設定の上書き]にチェックを入れ、[OK]をクリックします。
![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091403/3f9d7446-75eb-6b53-6a16-16dc7c8a62c1.jpeg)

画面が切れることなく、表示することができました。
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091403/28b04881-d813-bfdc-4847-60a7068e4da0.jpeg)

それでも画面が切れてしまう場合は、WinShotのアプリケーションを終了して、再度起動することで正常に表示することができます。
![WS000006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091403/c1a8fc99-479a-5cc3-2b9f-5b280d4c97f4.jpeg)

 ## まとめ
WinShotで画面が切れるときは```高DPIスケール設定の上書きにチェックを入れる```
WindowsのAnacondaってどうなの⁉(入門)

# Windows版使用のきっかけ
## 社内に詳しい人がいるってよ！からのシカト
:::note info
インフォメーション
どうも詳しいという情報はガセだった模様。
:::

## 素人が素人には聞けないですよね。
### 準備
https://docs.anaconda.com/free/anaconda/install/windows/

とりあえずインストールは簡単そうです。

# Ubuntu版との違い(注意）
- Ubuntuはコマンドでサクッと入る
- 最小限ならこんな感じ
```Ubuntu:ターミナル

conda create -n "環境名"　python="必要なバージョン"

```

```Ubuntu:ターミナル

#環境切り替え
conda acricate xxx
conda deactivate 

```
これをWindowsでやろうとするとGUIになれていれば

- Navigator開きます
- 作った環境を選びます
![Anacondamain.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/dbda6d14-e6c8-572f-fa32-79f02085f335.png)

‐ 環境確認します
![Anacondenv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/8d47466a-df48-cbb4-5a90-cf164de32127.png)



‐ 上手くソートして不足分をインストールします。
![Anacondconmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/e6011e6b-3f87-1904-79b2-8bb3496a108b.png)

:::note info
インフォメーション
しばらく使っていませんでした。
- WIndowsにはWSL2があった
- なれたらUbuntu機を組んだ
:::

# 使うのは大体これですかね
## Jupyter lab
- Google Colab上に転用しやすいので、家や会社でも需要有。
- そういえばリモート接続でつかったかも・・・
- Ubuntuのターミナルだとブラウザベースの人が難儀する場合に活用
- あと画像や疑似GUIみたいなことで使えますからね。
![屏幕截图 2023-07-09 16.56.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/0b29a3f5-5154-e4a9-cb54-9124b144aae6.png)

## ターミナル
- 今更ですが、Power Shellですね・・・これ使うならGUIメニューかもしれない。
- そもそもUbuntuでないので、そのつもりでコマンドたたくと動かないです。
- カンタンな確認なら使えます。
![屏幕截图 2023-07-09 17.00.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/9ce561ad-1c83-d26a-5d54-f743154b352b.png)


## たまにサクッと見直ししたい場合に便利
- しみじみ今頃分かりました。
## Summary(En)

<details><summary>Summary of this topic</summary>

# Thanks!
Qiita is almost Japanese Engieer community.

## Anaconda (Windows)
- It is very helpful tool for me to use
- For example : Presentation, demo  and Using GUI demo etc...
**If you know the good Developer site in English(Chinese)**


</details>
OpenSSHをオフライン環境のWindowsServerにインストールする。

オフライン環境のWindowsServerにOpenSSHをインストールする機会があったためメモを残します。

## GitHubからソースをダウンロードする。
以下のリンクからWindowsServerにインストールするためのソースをダウンロードします。

https://github.com/PowerShell/Win32-OpenSSH/releases

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223700/5d90af02-c6c5-c622-84a4-f39beedc106d.png)

## インストール用のPowershellScriptの作成
インストール用のPowershellScriptを作成します。具体的には以下の作業をPowershellで実行します。
1. ダウンロードしたZipをカレントディレクトリに解凍
1. 解答したフォルダを`C:\Program Files`に配置
1. install-sshd.ps1を実行しインストールを実行
1. Serviceの起動と自動起動の設定
1. Firewallの22番ポートのインバウントを許可

:::note warn
Firewallの操作に利用する`New-NetFirewallRule`コマンドはWindows 2012 以降のサーバーのみが対象です。Windows 2008 R2 以前を利用している場合は以下のコマンドを実行してください。
```
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
```
:::

InstallAndSettingOpenSSH.ps1
```powershell
# Unzip OpenSSH-Win64.zip
Expand-Archive -Path .\OpenSSH-Win64.zip -DestinationPath .\OpenSSH-Win64 -Force

# Move OpenSSH-Win64 to C:\Program Files\OpenSSH-Win64
Move-Item -Path ".\OpenSSH-Win64\OpenSSH-Win64" -Destination "C:\Program Files\OpenSSH-Win64" -Force

# Install OpenSSH
cd "C:\Program Files\OpenSSH-Win64"
.\install-sshd.ps1

# Start SSHD & Agent Service
Start-Service sshd
Start-Service ssh-agent

# Setting SSHD & Agent Service to Automatic
Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic

# Add Firewall Rule
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
```

上記のコマンドをダウンロードしたZipと同一の階層に配置し、その後`InstallAndSettingOpenSSH.ps1`を実行します。

# エラー解決
- `Connection reset by <IP> port 22`が表示されて接続できない場合
接続先サーバーの`C:\Program Files\OpenSSH-Win64`フォルダのセキュリティに`Authenticated Users`の権限が付与されていない可能性があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223700/4553c111-fe05-9031-a295-1fc004dff4fe.png)

https://github.com/PowerShell/Win32-OpenSSH/issues/1249

## 参考

https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH
Rspecでの配列でのエラーが出た

### Rspec今日学んだこと

今日はゆっくりコードを書いていたんだが、

投稿を表示させるspecを書いていた。

 `・boardには対応するtag_listがある(tagは配列で保管される)`
 `・ページごとに取得するtag_listを決めている(boards_path(tag_name: 'park'))`
 `・投稿一覧ページにとんだ際指定したtag_listの投稿が取得できているかの確認(ただし今回の記事ではパス)`

 が成功すればOK。

```
RSpec.describe "投稿の表示", type: :system do
  before do
    @user = FactoryBot.create(:user)
  end
#パークエリア情報の投稿を取得
it 'パークエリアの投稿を取得できること' do
  @board = FactoryBot.create(:board,tag_list:'park')

  visit boards_path(tag_name: 'park')
  expect(page).to have_current_path(boards_path(tag_name: 'park'))
end
```

これで成功。と思ったんだが、

これ本当に指定したtag_listの投稿が取得できているかわからへんやん。

とのことで

`どのようにコードを書こうか悩み出す。`

そこでchatgptに聞いた結果

 `expect(@board.tag_list).to eq('park')`

 となるコードが提案される。

  `お、いいのあるやん。`

  そう思いコードを追加しテストを回すと

  
```
     Failure/Error: expect(@board.tag_list).to eq('park')
     
       expected: "park"
            got: ["park"]
     
       (compared using ==)
```

`おい、配列やぞ。`

と怒られました。eqでは配列は取得できないらしい。

`includeに変更したら通りました。`

まだまだ勉強することだらけだね
htmlとcssの簡単だけど便利な機能!!

# htmlやcssの機能について
今回は簡単だけど便利なコードを4つご紹介いたします。
1. リンクの下線を消す方法
1. リンクを1回押すと２回目表示する際に色が変わるのを防ぐ方法
1. 画像をラインのプロフィールのように丸く表示する方法
1. 要素を上下中央に配置する方法
## リンクの下線を消す方法
liタグやulタグにのcssに`text-decoration:none;`と記述します

```html:html
<ul>
    <li>
        リスト1
    </li>
</ul>
<a>リンク</a>
```

```css:css
li {
    text-decoration: none;
}
```
記述はこれだけでデフォルトで設定されている下線を消すことができます！
## リンクを1回押すと２回目表示する際に色が変わるのを防ぐ方法
これは`aタグ`に`color'を設定することで防ぐことができます。
```html:html
<a href="リンク" alt="リンク" >こちらがリンクです</a>
```
```css:css
a {
    color: white;
}
```
これでリンクを押した後もデフォルトの紫色になることなく白色に設定できました！
## 画像をラインのプロフィール画像のように丸く表示する方法
imgのcssに`border-radius: 50%;`を記述すると円形で表示されます。
```html:html
<img src="img/templete-img" alt="プロフィール画像です">
```
```css:css
border-radius: 50%;
```
これで円形の画像を表示することができました!
`%`を`3%`のように変更すると画像の角が３％丸くなります。

何か不明点や修正点などありましたらご質問ください。
また、学習のモチベーションにもなりますので気に入っていただけたらハート押していただけると喜びます。
技育CAMP2023ハッカソン vol.4　チーム【転生したらプログラマだった件】で企業賞を取りました

<h1>技育CAMPとは</h1>
エンジニアを志す学生に ハッカソンと勉強会を通して 継続的なインプットとアウトプットの場を提供する スキルアップ支援プラットフォームで、年に20回行っているそうです。<br>基本的にオンライン型で開発テーマは【はじめてのハッカソン！】なので参加ハードルも低く約6割の方がハッカソン初参加でいろんな人が挑戦可能です。



<h1>作ったもの</h1>
4人の性格と立場を付与したGPT同士が入力されたお題についてディベートするアプリを開発しました。<br>
使用技術はChatGPT 3.5-turbo,Docker,Next.js,TypeScript,Sass,PHP,MySQLです。<br>
<a href="https://twitter.com/geek_pjt/status/1665289048045256704">https://twitter.com/geek_pjt/status/1665289048045256704</a>


<h1>感想</h1>
まず結果として企業賞が取れました！<br>
取れた要因としては以下の3つかなと思います。<br>
・ユーザーのGPTの設定に対応し、ディベートの流れに対応することができた。<br>
・GPTを使った斬新なアイデアを出せた。<br>
・スライドと発表資料をただの作品紹介ではなく、特徴とメリットとこのアプリができることを重点おいて発表できた。<br><br>

<div>
私は今回1番簡単なログインと新規登録を担当しました。<br>
私としては初めての賞を取れたのでとても嬉しかったです。<br>
技術力がまだまだ足りないので技術力をつけてまた参加したいと思いました。<br>
ではこの辺で失礼します～
</div>
話題のニュースを手軽に検索 ～超初心者のLINE Bot作成チャレンジ～

## 世間のニュースについていけない！
あれ、最近ニュース読んだっけ・・・？
ふと自分の毎日を振り返った時、自分の知識はほとんどネット検索から得ていました。

ネット検索の良いところは自分の好きな話題だけを深く深く調べることができること。
良くないところは興味がない話題について情報を得る機会が少ないことです。
このままでは世間の話題についていけなくなるかもしれない。。。
![落ち込み女性2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/2385fde6-cabc-c17b-4a10-d03922b8196b.png)




そこで、**今世間で話題になっているニュースをカテゴリ別にさっと返信してくれるLINE Bot**を
作成しました。

## 完成動画がこちら

https://twitter.com/amk193611/status/1676563647685079041

自分でも動いている動画をみてびっくりしてしまいます。
これ、無料で作れるんですよ・・・！

## 忘れてはいけない「超初心者」の挑戦
どうやってLINE Botを作成するのか、そもそもLINE Botって作れるんだと
驚いた方もいるかもしれません。

もう一つ忘れてはいけないこと。
それはデジタルツールに超初心者である私は**プログラミングをすることができない**ということです。
次からはいったいどのようにしてLINE Botを作成したのかについて解説したいと思います。

## ノーコードツール「Make」との出会い
**Make**とはノーコードツールの一種でプログラミングが不要にもかかわらず、
アプリケーション同士を連携できるツールです。
データの加工や複雑な条件分岐にも対応していますが、視覚的要素も強く、
直感的に操作することができるため初心者向けです。

＊Makeについてさらに知りたい方は[こちら](https://engineer-life.dev/make-nocode/)をご覧ください。
＊ノーコードツールについてはさらに知りたい方は[こちら](https://hibiki.dreamarts.co.jp/smartdb/learning/le-sp220202/)をご覧ください。


## 使用ツール
- LINE
- News API
- Make
　
## 作成方法

**Make全体のシナリオ**

![Makeのシナリオ(NEWSAPI).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/0890bf4b-020e-a028-67e2-e8581e6ceeeb.png)

こちらはMakeで作成した全体の連携図です。
（Make上ではシナリオとよばれます）

連携させたいシステムツールを呼び出すと、
緑や青や紫のアイコンとして表示されビジュアル的にもわかりやすいです。
（アイコンはモジュールとよばれます）

**それでは各モジュールで何をしているのか見ていきましょう！**



1　LINE（1個目）  
　　事前に作成したLINE BotとMakeの情報を連携します。  
![qiita_LINE1個目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/9e5973a2-4e19-ab8d-3518-4b2e611ccdae.png)


2　HTTP
    　　  WebサーバとWebブラウザの間で、Web情報をやりとりします。
　　今回はLINE Botで話題のニュースを表示させるためにNews APIを連携しました。  

![Makeのシナリオ２(NEWSAPI).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/ad75456e-e6a8-cc77-f651-84c2d1a0569d.png)

![qiita_HTTP画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/d100ab30-f5c0-05f2-ad03-c83796785990.png)


3  JSON
　プログラミング言語のひとつです。今回はNEWSAPIの情報が記載されています

![JSON画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/bc00b915-0f97-55e2-916b-8c57ed387abc.png)


4  LINE（2個目）
　 JSONで返答された内容を指定のLINE Botに返送します。
![LINE2個目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/57a2c056-814b-ab5a-e6c2-9e254bc19eb9.png)



今回のAPIは検索文章の指定があったため、トーク画面に**メニューボタン**を加えて
スペルミスなく特定の文章で検索できるように設定しました。


## あとがき

目標としては上位数件の話題ニュースを返答したり、
ChatGPTで文章を要約したりしたかったのですが勉強不足のため作成できませんでした。
次はこの要素がほしいと思った時点でアイディアを書き留め、
どのようなモジュールを組み合わせれば目標に近づけるのか、方法を探し続けたいと思います。
【AZ-900】いろいろなコンピューティングサービス

## はじめに
AZ-900の資格取得に向けた学習の中で学んだことを簡単にまとめます。
この記事では下記のサービスを紹介します。
1. Azure Virtual Machines
1. Azure App Service
1. Azure Functions
1. その他

## Azure Virtual Machines(VM / 仮想マシン)
- 仮想化技術によって物理サーバー上に作成された仮想コンピュータ。物理コンピュータと同様、OSやその上で動作するソフトウェアを利用可能。

- **ハイパーバイザー**というソフトウェアを使用して複数のOSを同時に稼働させる。

- 下記特徴を持つ。
    - **スケールアップとスケールアウト**
    - **仮想マシンスケールセット**
        複数の仮想マシンを一つのグループとして管理し、スケジュール/負荷に応じて仮想マシンを自動で増減可能
    - **仮想マシンの課金**
        1. 仮想マシンの稼働に対しての課金
        1. ストレージ利用量に対しての課金
        1. ネットワーク利用量に対しての課金
       
    - **料金プラン**
        - 従量課金
           ⇨使った分だけ課金
        - スポットVM
           ⇨Azureの未使用リソースを安価で提供
        - Azureハイブリッド特典
           ⇨既存のオンプレミスのライセンスをAzureで利用してコスト減
        - Azure RI (Azure Reserved VM Instances)
           ⇨予約割引(1年/3年)によるコスト削減
        - Windows Server 2008のセキュリティ更新の延長
           ⇨サポート終了後３年間無料でセキュリティ更新プログラム利用可能
        - Azure開発/テスト価格
           ⇨開発テスト用の従量課金制プラン
        - 専用ホスト
           ⇨専用の物理サーバーで　一つ以上の仮想マシンをホストできる
        - Azure DevTest Labs
           ⇨開発担当者は仮想マシンとPaaSリソースを自己管理でき、数分でテスト環境を作成可能

## Azure App Service
webアプリケーションやAPIをホストするためのサービス。

- インフラの管理が不要
   ⇨Azure App ServiceはPaaSのため、インフラの管理はAzureが行ってくれる
- 様々な言語を利用可能
- 全てのリージョンでホスト、スケーリングできる
- 他のSaaSサービス、オンプレへの接続
    ⇨５０以上のコネクタが用意されている
- 別サービスアカウントを利用した認証


## Azure Functions
アプリケーションを実行するためのサーバーレス環境。

- サーバーの構築および管理が不要
    ⇨基本設定と、ソースコードをアップするだけ
- 需要に応じて自動スケーリング
- 様々な言語を利用可能
- 他のAzureサービスとの連携
    ⇨様々なAzureサービスのイベントをトリガーとして実行可能

## その他のコンピューティングサービス

### Azure Container Instances (ACI)
サーバー管理なしでコンテナ環境（Docker)を実行できるコンテナサービス。

### Azure Virtual Desktop (AVD)
Azure上で仮想デスクトップ(VDI)環境を利用できるサービス。
Azureがインフラ環境の管理を行ってくれることがAVDの利点。

### Azure Batch
大規模なバッチジョブを管理、実行してくれるフルマネージドの実行環境。

### Azure Logic Apps
ジョブやワークフローを作成できるサーバーレスの実行環境。

## 参考書籍
「Microsoft認定資格試験テキスト AZ-900:Microsoft Azure Fundamentals」　須谷聡史/富岡洋/佐藤雅信