OmniAICreator/Qiita-1.07M huggingface dataset:
社内日報を内製化しよう(構成編)  

社内の日報アプリを作ることになりましたので、どのように作っていくかを記事にしていきます。
今回は経緯とどういった構成にするかを記載します。

## 経緯  
<!-- 既存の日報アプリを使おうと思ったけど、こういう理由で使うのやめて自分らで作ることにしたよ -->
ざっくりというと日報の入力を楽にすることが目的です。  

弊社での日報はフリーフォーマットでの入力です。  
作業時間の入力も大変ですし、スマホから日報を出すことがとても面倒なため日報アプリを使うことを検討していました。  

4個ほど既成の日報アプリを試しましたが、効果が実感できませんでした。  
今回重要視していたポイントは以下になります。  
- 入力要件(現在の日報と同じものが入力可能か)
- 提出状況の統計
- 料金
- 通知機能
- リマインダー機能
- ファイル添付機能

一応Kintoneが上記に合致していたのですが、細かいカスタマイズをするのに料金が跳ね上がってしまいます。  
「これなら自分らで日報アプリを作った方が良いのでは？？」というのが今回の経緯です。  


## 構成
スマホからも日報を送りやすくするためにWebアプリとして作っていきます。  


### 画面
画面遷移としては以下を考えています。  
日報として最低限必要な機能を持たせてる形です。 
![日報システム画面遷移図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/723460/6e1d3bce-35d8-04e4-b820-bfd05ac91ecc.png)
 

スマホからも使用する関係上、画面遷移の速度は重要なのでSPAを採用します。  
言語は現場での使用経験もあるReactを使う予定です。  


### インフラ構成
インフラはなるべく複雑にしないようにします。  
![日報システムインフラ構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/723460/17c9e299-468b-db30-6b39-0ce9b14bb530.png)

フロントは **S3 + Cloudfront**  
APIは **APIGateway + Lambda**  
DBは現状 **DynamoDB** を検討しています。  


## 今後の展望
日報アプリということもあり、入力しやすいようなUIが重要になりそうです。  
スマホからも扱いやすいようにレスポンシブデザインを意識していきたいですね。  

来年から本格的に動き始めるので、今後は経過もQiitaに投稿できればよいなと思います。  
皆さん良い年末を～
TortoiseGitのコミット時にやってしまってたauthor系の無駄な処理

# やってたこと

コミットする時、毎回 ```Set auter date``` と ```Set auther``` にチェック入れてた…。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/a101c72a-c5ab-12a4-2d8a-e1b72585b599.png)

「チェック入れないとコミットログに残らなのかも」
って **勝手に思い込んでた。**

```Set auter date``` は、チェック入れなければ、コミットボタン押した時刻が自動で設定される。
（意図的に変更にしたい場合のみ使う項目）

```Set auther``` は、チェックいれなければ、下記の値が自動で設定される。
（意図的に変更にしたい場合のみ使う項目）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/14132fed-395b-e720-f449-ad9ca596d623.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/68ca19ec-21d0-cfaa-d7d9-8f190f6996dd.png)

だから『意図的に時刻やコミット者を変えたい』ってことが無ければチェック入れなくてよし！

# バージョン

Windows 10 Pro 21H2 OSビルド 19045.2311
git version 2.39.0.windows.1
TortoiseGit 2.13.0.1
Databricksノートブックのインポート、エクスポート

[Export and import Databricks notebooks \| Databricks on AWS](https://docs.databricks.com/notebooks/notebook-export-import.html#) [2022/11/30時点]の翻訳です。

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

Databricksでは、以下のフォーマットでノートブックをインポート、エクスポートすることができます。

- ソースファイル: 拡張子`.scala`、`.py`、`.sql`、`.r`であるソースコードのみを含むファイル。
- HTML: 拡張子`.html`のDatabricksノートブック。
- Databricks`.dbc`アーカイブ
- IPythonノートブック: 拡張子`.ipynb`の[Jupyter notebook](https://jupyter-notebook.readthedocs.io/en/stable/)。
- RMarkdown: 拡張子`.Rmd`の[R Markdown document](https://rmarkdown.rstudio.com/)。

# ノートブックのインポート

URLあるいはファイルから外部ノートブックをインポートすることができます。また、Databricksワークスペースから[バルクでエクスポート](フォルダの全てのノートブックをエクスポート)されたノートブックのZIPアーカイブをインポートすることもできます。

1. サイドバーの![](https://docs.databricks.com/_images/workspace-icon.png)**Workspace**をクリックします。以下のいずれかを実行します。
    - 任意のフォルダーの右側にある![](https://docs.databricks.com/_images/menu-dropdown.png)をクリックし**Import**を選択します。
    - ワークスペースやユーザーフォルダで![](https://docs.databricks.com/_images/down-caret.png)をクリックし**Import**を選択します。
![](https://docs.databricks.com/_images/import-notebook.png)
1. URLあるいはサポートされている外部フォーマット、DatabricksワークスペースからエクスポートされたZIPアーカイブを含むファイルを選択します。
1. **Import**をクリックします。
    - 一つのノートブックを選択した場合には、現在のフォルダにインポートされます。
    - DBCやZIPアーカイブを選択した場合、現在のフォルダにフォルダ構成が再作成され、それぞれのノートブックがインポートされます。

# ファイルをインポートしてノートブックに変換

ファイルの最初のセルにコメントを追加することでPython、SQL、Scala、Rスクリプトを単一セルのノートブックに変換することができます。

```py:Python
# Databricks notebook source
```

```sql:SQL
-- Databricks notebook source
```

```scala:Scala
// Databricks notebook source
```

```r:R
# Databricks notebook source
```

スクリプトでセルを定義するには、以下に示す特殊なコメントを使用します。Databricksにスクリプトをインポートすると、`COMMAND`のラインでマークされた内容でセルが生成されます。

```py:Python
# COMMAND ----------
```

```sql:SQL
-- COMMAND ----------
```

```scala:Scala
// COMMAND ----------
```

```r:R
# COMMAND ----------
```

# ノートブックのエクスポート

ノートブックツールバーで**File > Export**を選択し、エクスポートのフォーマットを選択します。

:::note
**注意**
HTML、IPythonノートブック(.ipynb)、アーカイブ(DBC)としてノートブックをエクスポートし、[コマンド出力をクリア](https://docs.databricks.com/notebooks/notebook-outputs.html#clear)していない場合、エクスポートに出力が含まれます。
:::

# フォルダの全てのノートブックをエクスポート

:::note
**注意**
HTML、IPythonノートブック(.ipynb)、アーカイブ(DBC)としてノートブックをエクスポートし、[コマンド出力をクリア](https://docs.databricks.com/notebooks/notebook-outputs.html#clear)していない場合、エクスポートに出力が含まれます。
:::

ワークスペースフォルダの全てのフォルダをZIPアーカイブでエクスポートするには:

1. サイドバーの![](https://docs.databricks.com/_images/workspace-icon.png)**Workspace**をクリックします。以下のいずれかを実行します。
    - 任意のフォルダーの右側にある![](https://docs.databricks.com/_images/menu-dropdown.png)をクリックし**Export**を選択します。
    - ワークスペースやユーザーフォルダで![](https://docs.databricks.com/_images/down-caret.png)をクリックし**Export**を選択します。
1. エクスポートのフォーマットを選択します:
    - **DBCアーカイブ:** メタデータとノートブックコマンドの出力を含むバイナリーフォーマットであるDatabricksアーカイブをエクスポートします。
    - **ソースファイル:** Databricksワークスペースにインポートでき、CI/CDパイプラインで使用でき、それぞれのノートブックのデフォルト言語でソースファイルを参照できるノートブックソースファイルのZIPアーカイブをエクスポートします。ノートブックのコマンドアウトプットは含まれません。
    - **HTMLアーカイブ:** HTMLファイルのZIPアーカイブをエクスポートします。それぞれのノートブックHTMLファイルはDatabricksワークスペースにインポートすることができ、HTMLとして参照することができます。ノートブックのコマンドアウトプットは含まれます。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
【論文要約】TABERT: Pretraining for Joint Understanding of Textual and Tabular Data

## 概要
本論文では、NL文と（半）構造化テーブルの表現を合同で学習する事前学習済みLMであるTABERTを紹介する。TABERTは2600万個の表とその英語文脈からなる大規模なコーパスで学習される。実験では、TABERTを特徴表現層として用いたニューラル意味解析器が、弱教師あり意味解析ベンチマークであるWIKITABLEQUESTIONSで最良の結果を達成し、テキストtoSQLデータセットのSPIDERでも競争力のある性能を発揮することが分かった。

ACL 2020
第一著者：Pengcheng Yin
団体：Carnelgie Mellon University, Facebook AI Research

## 提案法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614092/32d84c7f-bdd3-bf7b-387b-cf3956a137cd.png)

**Content Snapshot**
データベーステーブルは大きいので、すべてを使うにはTransformerには重い。そこで、セルの値から必要な行だけ抽出するようにする。手法としては、utterance (上の表の In which~) と表の各行の間でn-gramでの一致度を調べて一致度が高い順にK個の行を抽出する。この手法は複数行から情報を引っ張ってくるようなタスクにも有効となる。

**Row Linearization**
得られた行を一行ずつutteranceと結合していくことを考える。Figure 1の(B)にあるTransformerの入力部分のように、`カラム名 | real or text | セルの値` を[SEP]で結合してTransformerに入力できるようにする。

**Vertical Self-Attention Mechanism**
Figure 1の(B)にあるCell-wise Poolingは `カラム名 | type (real or text) | セルの値` を平均プーリングして一つのベクトルにしている。

**Utterance and Colum Representations**
(C)のvertical attentionは、(B)の操作を各行に対して行なったときの出力ベクトル列を垂直方向に平均している。こうして得られたベクトル列 $c_j$ は、後続のfinetuningタスクに用いる。

**Training Data**
テキストと構造化データ(表データ)を含む大規模なデータがなかったため、代わりに半構造化データを作成した。English WikipediaとCommonCrawlから収集した大規模テーブルデータであるWDC WebTable Corpusを用いた。

**Pretrain**
入力の一部にマスクをして出力されたベクトル列 $c_j$ からマスクの予測を行う。セルの値からマスクした列名とtypeを予測するタスクである Masked Column Prediction (MCP) と、コンテキストからマスクしたセルの値を予測するタスクである Cell Value Recovery (CVR) を行った。

**Finetuning**
以下のようなquestionとtableから表の答えを得るタスクであるWikitablequestionsを用いた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614092/9a857b66-2bd9-c626-0a16-98e3a5af05f9.png)


また、Spiderデータセットを用いてテキストからSQL文を予測するタスクを行った。評価はExact match accuracyで行った。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614092/6abf1fa9-bb51-007d-cd0f-22d4a3c36114.png)

**結果**
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614092/5379fe1c-8e2b-9ac6-47bb-3aa22b9db8b9.png width=400>

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614092/cbfa7401-e7e7-0389-11ac-ca75dfeb636c.png width=400>
AWS SDK V3 のFirehoseでputRecord出来なかったのを、何とかできた件について（AWS SDK V2 → V3 移行Tips）

# はじめに

AWS SDK V2 で動作していたコードを、ガイドに従って V3 に置き換えても、putRecord（Firehoseへのデータ登録）ができず、エラーで終了してしまう。

# 結論
インターフェースが変わってる（不便になってる！？）
こんな代表的なレベルのメソッドを互換取らずに置き換えるなんて、なんて罠。。。

+ API インターフェース（V3）　V3のドキュメント見にくい。。。（個人的感想）

https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-firehose/interfaces/_record.html

Uint8Arrayで渡せという事らしい。。。

+ API 仕様（V2）

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Firehose.html#putRecord-property

V2の頃は、「'STRING_VALUE' /* Strings will be Base-64 encoded」という事で、文字列でメソッドを実行することが可能でした。( or なので、Buffer.from('...')のインターフェースも存在していた。）

V3では、「Buffer.from('...')」を利用することで、JSON形式のデータが送ることができました。
（String型渡しは廃止して、必ず配列で渡せということらしいですね。）


# エラーの内容
同じようなエラーでハマる人の為に文字列で記載。

インターフェースの型を変えたなら、もうちょっと分かりやすいエラーメッセージにしといてくれても、、、と思わざるを得ない。
（byteLengthのプロパティが見つからない。と言われても、、、、パッと、「型が変わったかも？」という所まで思考できなかった）

```sh
TypeError: Cannot read properties of undefined (reading 'byteLength')
    at fromArrayBuffer (/var/runtime/node_modules/@aws-sdk/util-buffer-from/dist-cjs/index.js:6:60)
    at Object.toBase64 [as base64Encoder] (/var/runtime/node_modules/@aws-sdk/util-base64-node/dist-cjs/index.js:18:51)
    at serializeAws_json1_1_Record (/var/runtime/node_modules/@aws-sdk/client-firehose/dist-cjs/protocols/Aws_json1_1.js:1238:51)
    at serializeAws_json1_1PutRecordInput (/var/runtime/node_modules/@aws-sdk/client-firehose/dist-cjs/protocols/Aws_json1_1.js:1233:47)
    at serializeAws_json1_1PutRecordCommand (/var/runtime/node_modules/@aws-sdk/client-firehose/dist-cjs/protocols/Aws_json1_1.js:64:27)
    at serialize (/var/runtime/node_modules/@aws-sdk/client-firehose/dist-cjs/commands/PutRecordCommand.js:30:71)
    at /var/runtime/node_modules/@aws-sdk/middleware-serde/dist-cjs/serializerMiddleware.js:12:27
    at /var/runtime/node_modules/@aws-sdk/middleware-logger/dist-cjs/loggerMiddleware.js:6:28
    at Firehose.send (/var/runtime/node_modules/@aws-sdk/smithy-client/dist-cjs/client.js:15:13)
    at Firehose.putRecord (/var/runtime/node_modules/@aws-sdk/client-firehose/dist-cjs/Firehose.js:91:18)
```

# どうやって気付いた？

+ 海外コミュニティサイト

https://gitter.im/aws/aws-sdk-js-v3?at=601002a0004fab47416727ca

流れてしまうかもしれないのでスクショ

![海外コミュニティサイト.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/7d0d646e-324b-685e-394d-f677e5738268.jpeg)

2021/02の投稿という事は1年以上前から、型を変えず、このままという事ですね。

```js
            var sendData = "Test Data 01 \n";
            
            var params = {
                "DeliveryStreamName": *Firehoseストリーム名*,
                "Record": {"Data": Buffer.from(sendData)}
            };
```

もうちょっと情報流れてても良さそうな物ですが、日本国内のSDK V3 対応状況は、どんなもんなんでしょうね。（＾＾A

# まとめ

「AWS SDK V2 → V3 移行」は、主要なメソッドレベルでもインターフェースの型変更の可能性が在り得る。

現行システムが、「AWS SDK V2」で開発されていて、「AWS SDK V3」へ移行する場合は、基本的に書き直し＆全試験やり直しに匹敵する試験が必要である。
（このレベルで互換せずに型変更されてしまうという事実がある時点で。。。）

Lambdaシステム開発、AWS SDK（Node） V3移行のご相談があれば弊社までお問い合わせください。

# AWSの相談・お困りごとありましたら、、、

AWSの活用方法や、お困りごとの相談、随時、お仕事の受付しております。

https://www.cs-cloud-aid.com/
react-hook-formとMUIを使用した再利用可能なInput共通コンポーネントの作成（TypeScript）

最近勉強会でMUIとReact-hook-formをテーマに発表したので、まとめていきます。
今回は最小単位のinputコンポーネントを作り、それを他で再利用してコンポーネントを作っていけるようにしましょう。

<h1>useController</h1>
公式文書のquick startの紹介では、react-hook-formではregisterを通じてinputを使用することになっています。

しかし、react-hook-formが非制御コンポーネント方式であるだけに、通常制御コンポーネント方式を使用するUIライブラリであるMUIと相互利用するには、曖昧な部分がありました。

そのため、react-hook-formではControllerというものを提供しています。
<a href="https://react-hook-form.com/api/usecontroller">公式文書</a>でも示されていますが、再利用可能なcontrolled inputを作成するのに便利です。

<h3>公式文書の例を見る</h3>

例を先に見てみると、InputコンポーネントのpropsでFormValues typeを渡していることがわかります。
つまり、TypeScriptでそのコンポーネントを実装するには、次のような構成にする必要がありました。

![スクリーンショット 2022-12-16 16.51.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371709/f0ab1e87-58f9-062c-0bcc-0251ae6492c0.png)

しかし、このように構成すれば、再利用性があるとはいえません。
毎回 form によってそれぞれ Input コンポーネントを作成して FormValues を渡さなければならないからです。

これを解決するために、Typescriptのジェネリックを活用する必要がありそうでした。
一度UseControllerPropsがどのように宣言されているかを確認してみましょう。

<h3>再利用可能にする</h3>

![スクリーンショット 2022-12-16 16.52.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371709/66b8e8e7-593e-68e6-9582-e23c2973c5e8.png)

必要なタイプを見つけたので、今、対応するTypeをインポートします。

![スクリーンショット 2022-12-16 16.53.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371709/03aee465-03e8-d7db-4fb7-277bd8961e61.png)

<h3>作成したコンポーネントの使用</h3>

![スクリーンショット 2022-12-16 16.54.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371709/d7a0fd69-9bae-bf4b-ee5e-fa2eee728d91.png)

useControllerを活用すると、直接Controllerで包むよりもコードの読みやすさが良くなりました。

register の代わりにcontroller を活用すれば、 rules を除いた error に対するハンドリングも、あえて form を使用するコンポーネントで作成する必要がなくなりました。

nameとcontrolを渡してあげれば、UIコンポーネントの入力も取得できました。

![スクリーンショット 2022-12-16 16.55.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371709/08fd45fb-4b85-41bc-cc6b-8f9ddc023c6a.png)

<h3>結果</h3>

validationも正常に動作し、submit関数もよく実行されることがわかります。

![スクリーンショット 2022-12-16 16.56.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371709/cd7c9810-6e25-3df9-5118-9241008e8848.png)

![スクリーンショット 2022-12-16 16.56.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371709/d4114fa5-699b-aff8-da3c-c74e2fcd2483.png)


これらでコンポーネントを作成するプロセスが完了です。
あとはstorybookでテストしてみました。
みなさんもぜひ試してみてください。
人の感情を、手軽に測ることはできる？

・人の感情を測ることはできる？
・ウェアラブル機器や、非接触測定が可能？

-----------------------------------------------------------------------------

<a ref="https://www.semanticscholar.org/paper/A-Systematic-Mapping-Review-of-Usability-Evaluation-Paz-Pow-Sang/18921b0cf7f3d4b0340baf16a9b107e477ef505f">Freddy Paz, J. Pow-Sang, International Journal of Software Engineering and its Applications (2016) </a>

ソフトウェアの評価法にはさまざまなカテゴリがありますが、その中にユーザビリティの評価があります。

上の論文では、さまざまなユーザビリティ評価の方法が記載されています。

質問紙や、Thinking Aloudなど、言葉を使った方法が多く挙げらています。

-----------------------------------------------------------------------------

ソフトウェアを扱っているときの、ユーザの感情を、もっとダイレクトに測ることはできないのでしょうか？

感情を測る方法としては、たとえば、以下の文献では複数の計測について特徴が述べてあります。

<a href = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7037130/"> Human Emotion Recognition: Review of Sensors and Methods</a>

Electroencephalography (EEG)　脳波計
Electrocardiography (ECG) 心電計
Galvanic Skin Response (GSR)　皮膚コンダクタンス反応
photoplethysmography (PPG) for Heart Rate Variability (HRV)　心拍計
Electromyogram (EMG)　表情筋の筋電計

-----------------------------------------------------------------------------

測定機器の小型化が進められており、wifiなどの無線通信によるウェアラブル機器が出ています。

また、最近では画像をベースにした表情検知もあります。これは非接触機器です。

さまざまな信号を複合したり（multimodal、マルチモーダル）、機械学習で解析したりする方法も出てきています。

-----------------------------------------------------------------------------

少し古い話しになりますが、1998年に、アップル社の半透明プラスチック、モニター　一体型の iMac G3 が出たときに、おしゃれ、と思った人、多いのではないかと思います。

<a href = https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:IMac_Bondi_Blue.jpg"> iMac （ボンダイブルー）の外観</a>

-----------------------------------------------------------------------------

本体、キーボード、マウス、電源ケーブルに、半透明のプラスチックカバーが使われており、それまで、ベージュや白が多かったパソコンのイメージを一新したモデルでした。

サードパーティーから透明ケースのアクセサリが販売され、さらには、ぜんぜん関係がないものまで半透明のものが発売されました。

<a ref = "https://ja.wikipedia.org/wiki/IMac"> 「スケルトンブーム」　iMac　 ウィキペディア </a>

-----------------------------------------------------------------------------

当時を思い出しても、衝撃的でした。

>1億ドルを超える大規模マーケティングキャンペーンが展開されたこと、178,000円（当時）という低価格が広く受け入れられ、4ヶ月で80万台出荷というヒット商品となり、それまで経営危機が囁かれていたAppleの復活を強く印象づけた（実際には1997年第4四半期に黒字化している）。

<a ref = "https://ja.wikipedia.org/wiki/Apple"> Apple  ウィキペディア </a>　より引用

-----------------------------------------------------------------------------

デザインが人に与える影響は、たくさんあります。

ふだん使っているものに、非常にすぐれたデザインがされていることも多々あります。

こうした製品をさわるときのユーザの感情を測ることで、よいデザインを意図して作り出すことができるのでしょうか？

-----------------------------------------------------------------------------
PL-900：(キャンバスアプリ) 基本要素について学習する

この投稿はMicrosoft PL-900の受験に向けた勉強資料をMS Learnページを参考にして作っています。
一発合格に向けて頑張りましょう！

[基本要素について学習する][MS-Learn]

[MS-Learn]: https://learn.microsoft.com/ja-jp/training/modules/build-app-solution/2-learn-basic-elements

# 基本要素について学習する
Power Apps最も一般的な要素をいくつか確認してみよう

## Power Apps Studio
* アプリをビルドするために使用するWebインターフェイス
* Power Appsには、アプリをビルドするためにダウンロードまたはインストールを行うクライアントが存在しない　→　ブラウザーからいかにログインすることによって実行される
https://make.PowerApps.com

## アプリフォーマット
* 初めに、アプリを作成する手順としてはモバイルまたはタブレットからアプリケーションのフォーマットを選択すること
* どちらのフォーマットもモバイル・タブレット・コンピュータで同じように使用できるが、画面やコントロールのサイズによって既定値が異なる
* 一度、アプリのフォーマットを選択してしまうと、変更できない

## Galleries
* データのテーブルから行を表示するために使用する
* 行の表示は必要に応じてカスタマイズできるテンプレートによって定義される
* 
* 行の表示はその後テンプレートによって定義され、必要に応じてカスタマイズできます。 これにより、表示されるカラムとそのフォーマットを制御できる
* Power Appsはその後、データのすべての行に対して、自動的にテンプレートを適用する

## フォーム
* 多くの場合、ギャラリーからの選択に基づいて特定のレコードを操作することに重点を置いている
* ユーザはギャラリーを参照して目的の行を検索し、選択してフォームの詳細を表示する
* フォームを使用すると、ユーザーは詳細情報の表示だけではなく、新しいレコードを保存したり、既存のレコードを編集したりすることができる
* フォームで実行されるさまざまなアクションはフォームモードによって制御され、フォームが多くの目的に役立つようになる

## Input コントロール
* Power Appsはアプリをカスタマイズする際に最大限の柔軟性を持たせるために、Inputコントロールを多数取り揃えている
例）Text input、Button、Dropdown、Toggle、Date picker、Slider
* ギャラリー、フォーム、画面にこれらのコントロールを追加することで、アプリの機能的で美的なエクスペリエンスを構築できる
* すべての入力には、ビジネスプロセスに適したユーザーエクスペリエンスを実現するアプリを構築するために既定のデータ、書式設定、およびアクションに関する多数の設定がある

## インテリジェント コントロール
* カメラ、バーコードスキャナ、GPS、その他のハードウェア機能へのアクセスを可能にするハードウェアベースのコントロールがある
* また、名刺リーダやオブジェクト検出器のような、ノーコードで人工知能をアプリに追加できるサービス支援制御もある

## 関数
* 上記のすべてのコントロール、入力、およびデータソースを結合する接着剤
* 1つ以上の関数を使用してアプリケーションに数式を作成できる
数式はExcelで使用する言語と似ており、データソースへのデータの送信、情報のフォーマット、アニメーションの作成などのアクションに使える
* アプリを強化するために簡単な入力で強力な機能を提供する
RubyonRailsチュートリアル：実践メモ【第二章】

<br>
<b>Ruby on Rails チュートリアル</b>(Webサービス開発が学べる学習サービス)に従って、MVCフレームワークアプリケーションを作成していく。<br><br>

**使用ツール** ：
AWS Cloud９
## Gitのバージョン管理下に置く
※RailsチュートリアルでGitのバージョン管理下に置く方法まとめ。

#### AWS Cloud９
ターミナルで以下コマンドを入力をする。
1. ローカルリポジトリを作成
1. addコマンドで指定したファイルをコミット対象にする
1. コミットを行う(ダブルクォーテーションで囲んだ箇所にコミットメッセージを記載)

```
$ git init　
$ git add -A
$ git commit -m "コミットメッセージ"
```
#### GitHub
1. GitHub上に新しいリポジトリを作成(**＋**ボタン→new repository)
※リポジトリの設定で必ずprivateを選ぶこと
1. リポジトリ作成時にGitHubへpushするための**コマンド**が生成される

#### AWS Cloud９
↓↓↓ GitHub画面上に表示されているコマンドをターミナルへ入力していく。
**...or push an existing repository from the command line**
```
$ git remote add origin https://github.com/username/example_app.git
$ git branch -M main
$ git push -u origin main
```
プッシュする際に、usernameとpasswordの入力を求められる。
username = GitHubのユーザー名
password = こちらはGitHubのパスワードではなく、個人アクセストークンを入力する
※setting→developersettingsから個人アクセストークンを取得できる

#### GitHub
GitHubに戻りページを再読み込みすると、コマンドが表示されていた画面から、リポジトリページが表示されるようになる。
<br>
<br>

参照：RubyonRailsチュートリアル
Leetcode 232. Implement Queue using Stacks

https://leetcode.com/problems/implement-queue-using-stacks/description/

## 難易度
### Easy

## アプローチ
### Stack

```java
class MyQueue {

    public  Stack<Integer> mainStack;
    public  Stack<Integer> subStack;

    public MyQueue() {
        mainStack = new Stack<>();
        subStack = new Stack<>();

    }

    public void push(int x) {
        mainStack.add(x);
    }

    public int pop() {
        while(!mainStack.empty()){
            subStack.add(mainStack.pop());
        }

        int result = subStack.pop();

        mainStack = new Stack<>();
        while(!subStack.empty()){
            mainStack.add(subStack.pop());
        }

        subStack = new Stack<>();
        return result;
    }

    public int peek() {
        while(!mainStack.empty()){
            subStack.add(mainStack.pop());
        }

        int result = subStack.peek();

        mainStack = new Stack<>();
        while(!subStack.empty()){
            mainStack.add(subStack.pop());
        }

        subStack = new Stack<>();
        return result;
    }

    public boolean empty() {
        return mainStack.empty();
    }
}

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue obj = new MyQueue();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.peek();
 * boolean param_4 = obj.empty();
 */
```
基本情報技術者に合格したのでやったこと、やらなかったことをまとめてみる

2022/11末に基本情報技術者試験を受け、たぶん合格したので（正式発表は12月末？）やったことをまとめてみようと思います。

追記:正式に合格していました
ちなみに得点率は午前が75%、午後が78%でした。
午後の選択はハードウェア・ソフトウェア、データベース、表計算を選択しました。


### やったこと
1. udemyの基本情報技術者試験対策
https://www.udemy.com/course/kihon_joho/
↑この講座を受けていました。問題を根本から理解したい人、ITの基礎をしっかり学びたい人は受けてみるといいと思います。
合格だけ目指すのなら受けなくても大丈夫だと思います。

2. 過去問
皆さんおなじみの過去問道場で午前問題は平成21年以降の問題を模擬形式で、午後問題は平成27年以降の問題を30分の時間を計り、行っていました。問題によっては10回くらい目を通したものもあります。本番では見たことない問題も出題されるので、見たことある問題を確実に取れるようになるべく多くの年度の問題をやるのが一番早いと思います。
5年分で十分と言う人も結構いますが、私は普通に心配だったので十数年分解きました。
心配な人はとりあえずいっぱいやりましょう。

3. 修了試験（午前免除のための問題）
修了試験の問題も解きました。本番ではこの問題から出題されるか分かりませんが、過去問を解いた後に模擬試験的な感じで解いてみるといいと思います。
初見の問題も多かったりするので意外と点数が伸びなかったりすると思います。
https://www.jitec.ipa.go.jp/1_80tokurei/_index_tokurei.html

***結論：とにかく過去問をいっぱいやろう（自身がつくまで）***

### やらなかったこと
1. udemyの午後対策
正直見てもあまり分からなかったので問題解いた方が早いと思って見るのをやめました。上と同じで基礎をしっかり学びたい人は受けるといいと思います。

2. 書籍の勉強
キタミ式とかですね。内容自体は分かりやすいんですが、とにかく読むのにすごい時間がかかることと、読み終えても点数は上がらないだろうなと思ったので読むのをやめました。（一応持ってる）
問題を解いてみて分からないことがあったらネットで調べて解決しましょう。そっちの方がたぶん早いです。

### 実際に受けてみて
実際に受けてみると、午前午後ともに意外と簡単に解けました。午後問題は時間も90分くらいで終わったので難しく考えすぎていたかなと感じました。
基本情報の勉強に150~200時間くらい費やしていたのでそんなにしなくても良かったかもと思いました。（もっとゲームすればよかった）

ただ、簡単だなと感じていても8割取れなかったので、分かっていない部分があったわけです。午前は普通に分からない問題があったのでともかく、午後は満点近い点数が取れそうな問題だったので少し悔しいです。原因としては得意としていたデータベースの問題が本番で急に分からなくなってしまったことだと思います。「これってこんな書き方だったっけ」となってしまったのです。

これから受けるみなさんはこの問題だったら絶対に解ける、この形式なら大体理解できるという問題をどんどん増やしていきましょう。そして、得意な問題も慢心せずに復習しておきましょう。
来年度からは少し形式が変わるようですが、やること自体はそんなに変わらないと思うので合格目指して頑張りましょう！！！
Go/Gin  sessionsで構造体の受け渡しについて

# Gin勉強の備忘録
今回Webアプリケーション開発中にsessionsでの構造体の受け渡しで躓いた
## sessionsのインストール

```
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/cookie"
```

## サンプルコード
```go:main.go
package main

import (
	"net/http"

	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
	"github.com/gin-gonic/gin"
)

type User struct {
	ID   int
	Name string
}

func main() {
	router := gin.Default()
	store := cookie.NewStore([]byte("secret"))
	router.Use(sessions.Sessions("mysession", store))
	router.LoadHTMLGlob("views/*")

	router.GET("/", func(ctx *gin.Context) {
		session := sessions.Default(ctx)

		//文字列の登録
		email := "abc@aaa.com"
		session.Set("email", email)
		//保存
		session.Save()
		//構造体の登録
		user := User{ID: 1, Name: "Foo"}
		session.Set("user", user)
		//保存
		session.Save()

		ctx.HTML(http.StatusOK, "index.html", nil)
	})

	router.GET("/session", func(ctx *gin.Context) {
		session := sessions.Default(ctx)
		//文字列の受け取り
		email, _ := session.Get("email").(string)
		//構造体の受け取り
		user, _ := session.Get("user").(User)

		ctx.HTML(http.StatusOK, "session.html", gin.H{
			"email": email,
			"user":  user,
		})
	})

	router.Run()
}

```


session.Set("キー値", 値)で値の設定後、session.Save()で保存
　　※session.Save()を使わないと値をセットできない
\*\*\* := session.Get("キー値")で値の取得
interface型で受け取るため、.(型名)をつける


## デバッグ実行結果
![Screen Shot 2022-12-16 at 16.29.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3039114/a3b348df-0d7b-5452-1f40-42521e5d9552.png)

email(string)は取得できているが、user(構造体)が取得できていない。

## 解決策
〜現在模索中
### 大替手段
データベースを絡めているなら、ID等渡してSELECT文で構造体を引っ張ってくるとか
未来のITエンジニアと一緒に活動する

未来のITエンジニアを育てる... と言ってしまうと、おこがましいなぁと感じるのですが、わたしが関わっている次世代育成系の事業や企画について、この機会にまとめてみました。

今や、世の中にはたくさんの種類のプログラミングコンテストがあり、いろいろな人材発掘・育成の事業があります。まずは、それらに関わるようになったきっかけが、LOCALでの活動でした。
現在は、さくらのエバンジェリストとしても関わっています :smiley:


## 一般社団法人LOCAL
まずは、[一般社団法人LOCAL](https://www.local.or.jp/) をご紹介します。
LOCALは、北海道における技術系地域コミュニティの活動を支援するとともに、コミュニティ間の連携イベント企画開催等を通して、地域を盛り上げていくことを目標とする有志の集まりです。
北海道のITエンジニアや、それを目指す若い人たちが楽しく幸せになるよう、活動のHUBとなるような団体を目指しています。


### [U-16プログラミングコンテスト札幌大会](https://sapporo.u16procon.org/)
U-16プロコンは、16歳以下の高校生、中学生、小学生を対象とした、旭川発祥のプログラミングコンテストで、今や全国に展開しています。
つい先日開催した、[第5回U-16プロコン札幌大会の様子](https://sapporo.u16procon.org/2022/11/30/1148/)はこちらに。是非ご覧ください！
- 競技部門
CHaser (チェイサー) という対戦型プラットフォーム上で、1 対 1 のプログラム同士で対戦します
- 作品部門
コンピューターグラフィックスや自作のプログラムなど、自由に作成したデジタル作品を評価します

北海道大会、そしてプレ全国大会が12/18に開催され、その後には全国大会もあります。
このアドベントカレンダーが公開された頃には、旭川でバタバタと大会の準備をしていると思います。

### [HAISL Security College for Youth (SC4Y)](https://sc4y.connpass.com/)
[北海道地域情報セキュリティ連絡会](https://www.facebook.com/haisl0929) が取り組むセキュリティ人材の次世代育成事業は、Security College for Youth (通称 SC4Y) といいます。
コロナ禍に翻弄されながらも 2020年度に活動を開始し、Web脆弱性対応の演習 や Micro Hardening等 を実施しています。
今年は、[学生3名が沖縄で開催された Hardening Decade 2022 にも出場](https://twitter.com/local_hokkaido/status/1592505724638142464)。川口設計さんと一緒に、彼らの参加を支援しました。

### [高校生ICTカンファレンス in 北海道](https://www.good-net.jp/ict-conference/2022/hokkaido2022/)
これは広く高校生を対象とした熟議イベントで、彼らの情報モラルの意識を引き上げ、将来のインターネット利用環境がより良いものとなることがねらいです。
元々はリアルで開催していたものですが、ここ数年はオンラインに。しかし、北海道という広い土地ではオンラインにも利点があり、これまで参加が難しかった開催地点から遠い学校の生徒さんにも参加してもらうことができました。
これをきっかけにインターネットへの理解が深まり、技術に興味を持ってくれる生徒さんが増えたらいいなと思っています。


#### 他にも...
セキュリティ・ミニキャンプや、SecHack365など、ここ数年コロナの影響でお手伝いができていなかった活動も、そろそろリアルに戻ってくる気配が。2023年がとても楽しみです。

これらの次世代育成系、ITコミュニティ系の支援活動を中心にしつつ、JANOG や Internet Week をはじめ、あちこちのイベントにも顔をだしています。
見つけたら、お声をかけてください。
AWS Organizations とは

AWS Organizations とは
複数のAWSアカウントを統合し、ポリシーベースで一元管理できるアカウント管理サービスです。
アカウントグループに複数のアカウントを参加させることで、グループ単位でのポリシー集中管理をすることができ、
複数アカウントに対する一括請求も行えます。

AWS Organizations の特徴
AWSアカウントの一元管理
複数アカウントに適用するポリシーを管理できます。
グループを作成し、そのグループに対してポリシーを適応することでサービスへの使用を制限できます

サービスのアクセス制御
OU(組織単位) や SCP(サービスコントロールポリシー) を使用ことで
複数のアカウントで使用できるAサービスを管理することが出来ます。

アカウント作成・管理
アカウントの作成・管理を行うことが出来ます。
APIを使用することで新規アカウント発行・グループに追加を行い、すぐに使用することが出来ます。

複数アカウントへの一括請求
マスターアカウントを使用して、組織で使用したAWSの費用を統合して支払うことが出来ます。


Service Catalogのポートフォリオ共有機能とは
Service Catalogには作成したポートフォリオをアカウント、もしくはOrganizations組織内に共有する機能があります。
共有先ではポートフォリオ内の製品を起動できるため、複数アカウントで同じ製品を利用したいケースで便利な機能です。
Zabbixインストール用Ansible Playbook(EC2)

# 内容
ZABBIXを一発でインストールするAnsible playbookです。環境は```Almalinux 8 & ZABBIX 5```です。少し前に作成したものなので```Almalinux 9```や```ZABBIX 6```は試しておりません。


https://github.com/Toru-Kubota/zabbix-server-install

# EC2準備

* Almalinux OS 8(x86_64)を選択
* セキュリティグループでssh(22)とhttp(80)を開ける
* パブリックIP割当有効化

![スクリーンショット 2022-12-16 16.45.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/3c3220ba-8e31-cdba-bb1a-cdb64cc58b89.png)

# Ansible準備

## Ansibleインストール
```shell
sudo su -
dnf update
dnf install epel-release
dnf module install python39
alternatives --config python
dnf install ansible
ansible --version
```
## 鍵の設定
```shell
vim /home/ec2-user/.ssh/key.pem # 秘密鍵の情報を貼付け
chmod 400 /home/ec2-user/.ssh/key.pem
```

## Playbook準備
```shell
git clone https://github.com/Toru-Kubota/zabbix-server-install.git
cd zabbix-server-install
vim inventory.ini
```

* 下記を追加する。

```shell:inventory.ini
[zabbix_servers:vars]
ansible_ssh_user=ec2-user
ansible_ssh_private_key_file=/home/ec2-user/.ssh/key.pem
```

# Ansible実行
## Playbook実行

```shell
ansible-playbook -i inventory.ini Zabbix-Server-Setting.yml
```

## 画面確認

```http://ip/zabbix```にアクセスして続きをやります。

![スクリーンショット 2022-12-16 16.43.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/b7e50e23-b010-e836-0ed2-4e4b05ceede4.png)
Apple SiliconでCVXPYをインストール

最適化問題を解いてくれるCVXPYのApple Siliconでのインストール手順を示します。
# エラー
```
pip install cvxpy
```
とすると、以下のエラーがでました。(M2 MacBook Air)
```
error: subprocess-exited-with-error
  
  × pip subprocess to install build dependencies did not run successfully.
  │ exit code: 1
  ╰─> [107 lines of output]
```
# 解決方法
```
pip install cmake
pip install osqp==0.6.1
pip install ecos
pip install scs
```
osqpの最新バージョンがおそらく原因だと思います。
https://stackoverflow.com/questions/65920955/failed-building-wheel-for-qdldl-when-installing-cvxpy
GithubActionsでSubmoduleも一緒にCheckoutしてくる


## Personal Access Tokenを使う場合
- Organizationなどでは、個人アクセストークンはなるべく控えたいところ
- とりあえず設定的なイメージ

```yaml
      - uses: actions/checkout@v2
        with:
          submodules: recursive
          token: <Personal Access Token>

      - run: |
          ls  -l ./submodule-test
```

## GithubAppsを使う場合
- GithubAppsからTokenを取得するためのモジュールがあるのでそれを使う
- private_keyに指定するのは、client_secretではなく、その名の通りprivate_keyを指定します
- PersonalToken使うよりもいいはず

GithubApps - Generalの下の方にあり、若干わかりにくいところにある
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293481/66c6deeb-1920-f95f-28e0-c2a66a340840.png)


```yaml
    steps:
      - name: github-app-access-token
        id: get-github-app
        uses: getsentry/action-github-app-token@v1
        with:
          app_id: ${{ secrets.APP_ID }}
          private_key: ${{ secrets.APP_PRIVATE_KEY }}

      - uses: actions/checkout@v2
        with:
          submodules: recursive
          token: ${{ steps.get-github-app.outputs.token }}

      - run: |
          ls  -l ./submodule-test
```


## 参考
https://qiita.com/daisukeArk/items/ba153e1c35be21c87578
https://github.com/getsentry/action-github-app-token
DynamoDBグローバルテーブルとは

マルチリージョンアーキテクチャを使用し、低レイテンシなアプリケーションの構築、災害復旧の容易にするためによく使用されると思います。

グローバルテーブル
（クロスリージョンレプリケーション）

オンデマンドキャパシティモード
レプリケート書き込みリクエスト数に応じた従量課金
プロビジョンドキャパシティモード
レプリケート書き込みキャパシティユニット数と時間に応じた従量課金



指定したリージョンにDynamoDBのレプリカを生成します。
マスターおよびレプリカの変更はほぼリアルタイムに反映されます。
地理的に近いことでレイテンシーが低くなりユーザビリティが向上します。

>Amazon DynamoDB グローバルテーブルは、マルチリージョンにマルチアクティブデータベースをデプロイするための完全マネージド型のソリューションです。独自のレプリケーションソリューションを構築および管理する必要はありません。グローバルテーブルを使用すると、そのテーブルの利用を許可する AWS リージョンを指定できます。DynamoDB はこれらのリージョンに同一のテーブルを作成し、進行中のデータ変更をすべてのリージョンに伝達するために必要なすべてのタスクを実行します。

>DynamoDB グローバルテーブルは、グローバルに分散したユーザーがいる場合など、大規模にスケールされたアプリケーションを使用する場合に最適です。このような環境では、ユーザーは、非常に高速なアプリケーションパフォーマンスを期待します。グローバルテーブルでは、マルチアクティブレプリケーションを世界中の AWS リージョンに自動的に提供できます。ユーザーがどこにいても、低レイテンシーでデータを提供することができます。

（AWS公式ドキュメントからの引用）
[NewRelic] SyntheticsでWebサイトへのユーザ操作をシミュレーションした外形監視を行う

# この記事について

NewRelic SyntheticsのStep Monitorを利用して、Webサイトへのユーザ操作をシミュレーションした外形監視を設定する手順について記載します。

※この記事は2022年12月時点のNewRelicの仕様を元に作成してます。将来的に仕様が異なる可能性があることをご認識ください。

# やること

[HOTEL PLANISPHERE](https://hotel.testplanisphere.dev/ja/index.html)というブラウザ自動化のために利用可能なテスト対象サイトを利用します。

[ログイン画面](https://hotel.testplanisphere.dev/ja/login.html)にてユーザ名とパスワードを入力して、ログインが正常に可能であるかをSynthetics Monitorでチェックできるようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/37a929b4-4c8b-066e-c95b-8660859125f8.png)



用意されているテスト用のメールアドレスとパスワードを利用します。

| メールアドレス | パスワード | 
| :---: | :---: |
| ichiro@example.com |  password |

# Step Monitorとは

NewRelicにはScriptBrowserと呼ばれる機能があり、WEBアプリのユーザ操作をシミュレーションして操作の可否や応答時間の取得を行うことができます。
これを利用するためにはプログラミング言語でスクリプトを作成する必要がありました。

Step MonitorはこのScriptBrowserの新機能であり、ノーコードで利用することが可能です。(スクリプトも引き続き利用可能です)


# Synthetics Monitorの作成


NewrRelicのコンソールから「Synthetics Monitoring」画面に移行して、「Create monitor」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/35c9556b-6f2a-42dc-4a28-27f60cdeca57.png)

User step executionをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/85649318-3c1c-1da5-00b5-2f26bed5e0e7.png)


Nameに任意の名前を入力、Periodを1minに変更します。その後「Select locations」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/e112ae46-7f9a-3246-0dbc-c2e642abaf97.png)


任意のロケーションを指定します。(今回は東京だけにしました。本番は異なるリージョンに属するロケーションを３箇所以上指定することが推奨されています)
ロケーションを指定したら、「Define steps」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/9c9c7c38-78c0-8b22-5154-949a0fb55b50.png)


まずデフォルトの状態はNavigateステップだけ作成されている状態です。
ここから自分で用途に沿ったステップタイプを利用して、ステップを組み立てます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/827f2545-6590-dbea-7ea4-42e4d82177ad.png)


まず起点となるURLをNavigateに入力します。今回はログインを行うため、ログイン画面のURL(https://hotel.testplanisphere.dev/ja/login.html)を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/bbb91a84-7126-7ee9-e930-083edf58d34b.png)


次にメールアドレスとパスワードを入力するために「Type Text」のステップを2つ追加します。
それぞれにメールアドレスとパスワードの入力フォームのxpathと入力する値を入れます。
(xpathはchromeの検証から確認することが可能です。詳しいことはxpath、chromeというキーワードで調べてみてください)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/7acfd6a8-1ff7-f9ec-3fe3-aa5b8fb078a0.png)


最後に「ログイン」ボタンを押すステップと追加します。
「Click Element」ステップタイプを１つ追加して、ログインボタンのxpathを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/f0215f50-c20f-767f-cdc6-ef651fc048e0.png)


「Save Monitor」をクリックして、完成です。
(Save Monitorをクリックする前にValidattion resultsを実行して、Monitorが意図した動作になっているか確認することをお勧めします。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/30529a28-13a4-471a-d308-542e6122c54b.png)


作成後のMonitorを確認して、mChecks faliedが0になっていることを確認しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/ed898d16-845f-7528-483c-ab946582fc5e.png)

あとはこのMonitorを使ってConditionを作成すれば、ユーザ操作をシミュレーションした外形監視を行うことができます。

# 参考

https://newrelic.com/jp/blog/how-to-relic/synthetics/new-relic-synthetics_step-monitor
Databricksノートブックによるコラボレーション

[Collaborate using Databricks notebooks \| Databricks on AWS](https://docs.databricks.com/notebooks/notebooks-collaborate.html) [2022/11/30時点]の翻訳です。

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

このページではどのように同僚に対してノートブックへのアクセス権を付与し、ノートブックのにコメントを残すのかを説明します。

# ノートブックの共有

同僚にノートブックを共有するには、ノートブックの上部にある![](https://docs.databricks.com/_images/nb-header-share.png)をクリックします。アクセス権ダイアログが表示され、誰に対してどのレベルのアクセスを許可するのかを選択することができます。

# コマンドへのコメント

コマンドへのコメントを用いることでコラボレーターと議論を行うことができます。

コメントサイドバーを切り替えるには、ノートブックの右上にある![](https://docs.databricks.com/_images/nb-header-comments.png)アイコンをクリックします。

1. コマンドのテキストをハイライトし、コメントの吹き出しをクリックします。
![](https://docs.databricks.com/_images/add-comment.png)
1. コメントを追加し**Comment**をクリックします。
![](https://docs.databricks.com/_images/save-comment.png)

コメントを編集、削除、リプライするにはコメントを選択し、アクションを選択します。
![](https://docs.databricks.com/_images/edit-comment.png)

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
【Alpine.js】作ってみた　～ドロップダウンメニュー～

# ドロップダウンメニュー
Laravelで使うならコンポーネント化しておけば使いまわせると思います。
または使いたい場所でコピペしておくとか。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="OJEKeLp" data-user="gorimatyan" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/gorimatyan/pen/OJEKeLp">
  Untitled</a> by gorimatyan (<a href="https://codepen.io/gorimatyan">@gorimatyan</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

::: note
ちなみに
メニューの中にさらにメニューをコピペしたら二段階のドロップダウンメニューができる。
:::

# まとめ
アニメーションもついてて超便利。
アレンジして使える。
ほんと便利な世の中になりました。
Laravel ログイン機能 ログアウト後のページ変更

laravelのログイン機能を使った場合の「ログアウト」ボタンを押した後、デフォルトで「/」に飛ぶようになっている。
これを任意のURLに飛ばすように変更する方法は以下の通り。

1.「プロジェクトフォルダ」->vender->laravel->framework->src->Illuminate->Foundation->Auth->AuthenticatesUsers.phpを開く
2.logoutメソッドを探す。
3.以下の通りに修正する。
修正前
```
    public function logout(Request $request)
    {
        $this->guard()->logout();

        $request->session()->invalidate();

        return $this->loggedOut($request) ?: redirect('/');
    }
```
修正後
```
    public function logout(Request $request)
    {
        $this->guard()->logout();

        $request->session()->invalidate();

        return $this->loggedOut($request) ?: redirect('/「任意のパス」');
    }
```
オープンAI　ChatGPT

# はじめに
　初めまして、情報技術系を学んでいる学生です。今回はオープンAIChatGPTについて調べて、使ってみました。
# オープンAIとは
　オープンAIは、2015年に設立された人工知能を研究する非営利団体のことです。
　2016年にはゲームや課題などをコンピューターに訓練させることができるプラットフォーム「OpenAI Gym」を開発及び公開しています。これももちろんオープンソース化されており、誰でもインストール可能なため、強化学習を研究するための環境として利用されています。
# ChatGPTとは
　ChatGPTは、AIテクノロジーを利用した自然言語処理ツールであり、人間を相手にしているときと同じような会話を可能にするなどの機能を備えたチャットボットをユーザーに提供しています。この言語モデルは、質問に答えたり、電子メールやエッセイ、コードの作成などのタスクを支援したりすることが可能です。
# 実際に使ってみました
　試しに「JavaScriptについて」と送信してみました。結果がこちらです。![スクリーンショット (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982417/91dc1904-2017-faad-f6d3-5149988b5b9e.png)
　このように送信したことについて、わかりやすく丁寧に教えてくれます。調べたい内容によっては画像を使って説明してくれる時もあります。とても便利ですね。ただ、調べたいことについての情報が少なすぎると、説明が出てこないので注意してください。
# 終わりに
　実際に使ってみて、とても興味深く面白いものだなと思いました。今日の夜ご飯とか送信しても来たので皆さんもぜひ試してみてください。
　「オープンAI　ChatGPT」と調べると出てきます。
　最後まで見てくださりありがとうございました。
herokuで"We're sorry, but something went wrong."が出たので解決してみた。

検索してみたところ以下を実行してみたら解決しました。

```
heroku run rails db:migrate
```

開発環境でデータベースを使用した場合に、本番環境でそのデータベースをmigrateしてあげる必要があったみたいです。

<h1>参考サイト</h1>

[herokuで"We're sorry, but something went wrong."が出てアプリが開けなくなった](https://qiita.com/nanamemo_net/items/b0359dd6fbd0eeeb55d2)
プログラミング独学者が、起業し、クラファンを始めた話

初めまして、Share Data合同会社のDAIKIです。
私の経歴は、プログラミング独学 → アプリ複数リリース → 起業 → クラファン開始（現在）　です。

今回はQiita初投稿なので、クラファンの宣伝と経歴について書いていこうと思います。
（Qiitaの書き方に苦戦中...）
Qiitaに慣れてきたら、技術的な面や起業苦労話なども書いていきます。

# クラウドファンディング
最初に、クラウドファインディングの宣伝をさせてください。
プロジェクトページ（CAMPFIRE）は[こちら](https://camp-fire.jp/projects/view/595980?utm_campaign=cp_po_share_c_msg_mypage_projects_show)です。
少しでも共感していただけましたら、温かいご支援、もしくはプロジェクトのシェアをしていただけると嬉しいです❗️

https://camp-fire.jp/projects/view/595980?utm_campaign=cp_po_share_c_msg_mypage_projects_show

# 経歴
エンジニアの皆さんに、特にプログラミング独学者やスモールスタート起業を考えている方に、少しでも有益な情報になればと思っています。

## 〜 プログラミング独学
「電気回路、超電導」を学びたくて、九州大学の電気情報工学科に入学しました。
しかし電気"情報"工学科とあるように、プログラミングを学ぶ科目があり、
英語・パソコンを毛嫌いしていた私は、プログラミング大っ嫌い💢になりました。

その後就職し、学んでいたことから、職種はプログラミング（社内SE、工場IoT化）に決定。
プログラミング嫌いな私は、勉強の為にサッカーゲーム開発（Unity）を始めました。

サッカーゲーム開発が楽しく、スキルも上達していき、
社内でもシステムを制作し多くの経験・感謝の言葉を頂き、プログラミングが大好き❤️になりました！

### 学んだこと
・プログラミングが嫌いな人は、何か好きなものを作るといい。モチベが続く！
・感謝の言葉が直接聞ける職場は最高！

## プログラミング独学 〜 起業
その後、Unityで5個、Flutterで２個のアプリをリリースしました。（各DL数:数十〜数千）
アーキテクチャやRx、AWSやGCPクラウドサービスなど日々成長していきました。
（Qiita記事はいつもお世話になっています）

また、アプリ開発には宣伝・広告が非常に重要ということも学びました。
広告の効果で言うと、Google > FaceBook・インスタ > Twitterといった感じです。（アプリ内容で変わると思いますが）

### 学んだこと
・個人開発は設計〜運用、宣伝まで多くのことを学べる
・プログラミング勉強で大切なことは、課題解決能力・情報収集能力
・サービス開発初期では、どれだけいい物よりも多くの人が知っているかが大切。早めに公開、宣伝しよう！

## 起業 〜 クラファン開始
起業・クラウドファンディング開始への思いは、[こちら](https://camp-fire.jp/projects/view/595980?utm_campaign=cp_po_share_c_msg_mypage_projects_show)の最後に記載しています。

ここでは、「起業」と「プロトタイプ制作」について書いていこうと思います。

起業は「合同会社」を選びました。
選んだ理由としては、①設立費が安い（全部自分で行ったので10万以下）②決算公告が不要③株式会社に変更可能(株式会社を直接作るより安い)
皆さんも、起業を考えた際は合同会社をお勧めします。
私は勉強と思い、ひとりで行い多くの時間がかかりました。多くの手続きは一度しかしないことなので専門家に任せても良いと思います。

プロトタイプ制作は「M5Stack」「３Dプリンター」「Flutter」「AWS」を使っています。
詳しい説明は今後の投稿に任せるとして、今回は起業を目指している方向けに選定理由を明記します。
「M5Stack」 … 日本企業は費用が高い。中国企業も開発だけで100万程度かかる。スモールスタートで始めるため、モジュール基板を購入。M5Stackは扱いやすい為、電気工作初心者にもお勧め。
「３Dプリンター」 … 筐体が必要なため、３Dプリンターで制作。出力・修正のループが高速で回せる為、スモールスタート・ベンチャー企業で３Dプリンターは必須ではないかと思う。
「Flutter」 … Android・iOS可能。慣れている。
「AWS」 … スモールスタート＝クラウド。クラウドIoTサービスで一番情報がある。

### 学んだこと
・個人で低予算（100万以下）で、起業できるし、IoT機器も制作できる
・私はひとりで行ったが専門家に頼ってもいいと思う。私も未知な事について、M5Stackや日本企業の方に教わった
・諦めなければ上手くいく！！

# 最後に
長々と書いてしまいましたが、最後まで読んでいただき本当にありがとうございます。
私もまだサービス製品化の途中ですが、これからも諦めずに頑張っていきます。
MSXにおけるプログラム圧縮術

## はじめに

MSXパソコン (BASIC) におけるプログラム圧縮術を紹介します。

## MSXBASICで使えるのはおおむね23kbytesぐらい

カセットテープしか繋がっていないMSXなら28815 bytes までユーザーエリアを確保できるのですが、
ディスクBASICを接続した時点でこのぐらいまで減ってしまいます。

ですが、MSX-DOS2カートリッジを差すとはある程度緩和され、25kbytesぐらいまで使えます。

## あなたのMSXの容量 64kbytes? 64+256kbytes? 512kbytes?

単体で最大容量が確保できたのが、松下電器の FS-A1GT (最終品）です。

ですけど、それでもユーザーエリアは 25kbytesぐらいです。

確かにRAMはありますが、スロットに隠されたメモリと、メモリマップで切り替えるバンクしかありません。

## BASICをバンク切り替えするのはよろしくない

メモリマップを切り替えれば確かにBASICのバンクが切り替わりますが、
それは動いているCPUに対して、ゲームカセットを突然外したり、交換したりと同じことになるので、相当不安定になります。

## 普通の使い方

- CALL MEMINI - 0000-7FFF番地をRAMDISKにする
- CALL RAMDISK - 空いたメモリマップをRAMDISKにする

普通はこれで対処します

## アセンブラができるなら？

4000-7FFF番地に16kバイトありますが、このエリアに CALLで呼び出すサブルーチンをアセンブラで実装します。

高速化もするし、BASICのユーザーエリアの低減に貢献します。

基本的にプリローダーのBASICでバイナリを読み込み、その後本番のBASICを読み込みます。

## BASICのソースの書き方で圧縮する

以下のようなコードを書くことによって、より圧縮します

```TEST-before.BAS
10 PRINT "HELLO WORLD!"
20 FOR I=0 TO 99:PRINT I:NEXT I
30 S$="TEST STRING"
40 S$=S$+" AFTER"
50 PRINT S$
```

```TEST-compressafter.BAS
10 PRINT"HELLO WORLD!
20 FORI=0TO99:PRINTI:NEXT
30 S$="TEST STRING
40 S=S+" AFTER
50 PRINTS
```

可読性悪いようにも見えますが、案外慣れてしまうと圧縮したものでも可読できたりもします

## ファイル名を短くして圧縮する

昔は README.DOC があるほどでしたのですが、別にテキストファイルはどんな拡張子でもよかったのです

こんなファイル名で十分だったりします

- NEXT.A (.BASのつもり)
- BIN.B (.BINのつもり）
- TOP.T (.TXTのつもり）

## MSXでやってきた技術の応用例

https://qiita.com/nanakochi123456/items/4258a1bf41821cff2c2c

https://qiita.com/nanakochi123456/items/d86a8f9976b03c10170e


## さいごに

昔の人はこうやって苦労してメモリを確保していました。
しかし、今現代でも、こういう細かすぎることを大切にすれば、
Webサイトもより快適になるんじゃないかと思います。
HelmでインストールしたArgoCDでWebターミナル機能を有効化する


HelmでArgoCDのインストール

```bash
helm repo add argo https://argoproj.github.io/argo-helm
helm install my-argo-release argo/argo-cd
```

Port ForwardingでArgoCDのGUIをローカルから見れるようにする。

```
# localhost:8080 でアクセスできるようになる
kubectl port-forward --address localhost my-argo-release-argocd-server-xxxxxxxx-gdgjk 8080:8080
```

初期パスワードを取得する。(ユーザー名: admin, パスワード: 下記の出力結果)
適当にNginxとかをデプロイしておく。

```
kubectl -n default get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
```

Webターミナルを有効化する。

```bash
helm upgrade my-argo-release argo/argo-cd --set configs.cm."exec\.enabled"=true
```

Podの画面の "TERMINAL" タブからWebターミナルが起動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6571/9823ab5d-0986-fed2-377b-73548665eb7c.png)

vimも普通に使えて便利。
パソコン版 Googleドライブ のインストールエラー (0x80070057)

# 概要
Windowsのログインユーザー名に日本語が含まれる場合、パソコン版Googleドライブのインストール時にエラー (エラーコード 0x80070057) が発生する

# 発生環境
- Windows 10 pro
- ユーザーはAzureADアカウントでログイン
- ローカルの管理者権限は付与済み

# 原因
概要欄の通り。
通常のマイクロソフトアカウントやローカルアカウントで日本語を含む場合の挙動は未検証。

# 対処方法
英数字のみのローカルユーザーを管理者権限ありで各PCに追加
追加したユーザーでログインして、Googleドライブをインストールする
使用したい(ユーザー名に日本語を含む)ユーザーでログインし、パソコン版Googleドライブを起動、Googleドライブにログインする。

# 感想
中途半端にAzureADでユーザー管理しようとしていろいろ苦労している。
WSL上でDocker DesktopのDockerを使う

Docker DesktopをWSLから使う場合、WSL1と2で使い方が違うので整理してみました。
なお以下の説明を作る際に使った環境は以下になります。
* ホストOS
    * Windows11 21H2
* Docker Desktop version 4.14.1
* WSLのディストリビューション
    * Ubuntu20.04

# 共通のDocker Desktopの設定
Docker DesktopのGUIを表示して
Settings（右上のほうの歯車を押すと出てくる画面）→Generalにある「Use the WSL 2 based engine」のチェックを入れます。
![dockerdesktop_settings1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695633/409cc390-c2f5-bddc-4ba2-df10ad7bf7d5.png)

WSL1の場合は入れなくてもいいのですが極力設定を共通化するために入れておきます。

# WSL1で使う場合
## Docker Desktopの設定
Docker DesktopのGUIから
Settings→Generalにある「Expose daemon on tcp://localhost:2375 without TLS」のチェックを入れます。
![image_2022_12_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695633/5a518b6b-3bda-a8ac-c28f-955b3654db75.png)

## Ubuntu側の設定

まずdockerコマンドをインストールします。
WSL1でインストールされているディストリビューションを起動して、コンソールから
```
$ sudo apt update
$ sudo apt install docker.io
```
としてdockerをインストールします。
パスの反映があるので一度ログインしなおして下さい。

このままだと
```
$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
```
のように出てアクセスできません。
そこで
```
$ export DOCKER_HOST=tcp://localhost:2375
```
とすると
```
$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
```
コマンドが正しく返ってくるようになります。
適宜.bashrc等にDOCKER_HOSTの設定を入れておくとよいでしょう。


# WSL2で使う場合
## Docker Desktopの設定
同じくDocker DesktopのGUIから
Settings→Resources→WSL Integrationの設定画面で「Enable integration with my default WSL distro」にチェックを入れます。
これによってWSLでデフォルトに設定されているディストリビューションでdockerが自動的に有効になります。（ただしデフォルトがWSL1だと意味をなしません）

ちなみにデフォルトのディストリビューションとはPower Shellを起動して
```
> wsl -l -v
```
としたときに左端に＊（アスタリスク）がついているディストリビューションのことで、
```
> wsl -s ディストリビューション名
```
とすることでデフォルトを変更できます。

また、先ほどの設定画面で「Enable integration with additional distros:」という項目の下にインストールされているディストリビューションのリストが出てきて左にスイッチがありますが、これをONにすることでもそのディストリビューションでdockerが使えるようになります。
![image_2022_12_15 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695633/4fa5769d-010d-fcdb-2d20-827ee721c609.png)
※上図は「Ubuntu-18.04-2」と「Ubuntu-20.04v2」というWSL2のディストリビューションがインストールされている環境で「Ubuntu-20.04v2」のほうでdockerコマンドを使えるようにしたときの状態です。

## Ubuntu側の設定
上記Docker Desktop側の設定だけでdockerコマンドは使えるようになります。
ただ一般ユーザーだとそのままでは権限の関係でdockerコマンドがエラーになってしまうため、普段使うUbuntu上のユーザーをdockerグループに属させる必要があります。
方法は（ユーザー名をpenguinsanとした場合）以下のコマンドを実行します。
```
$ sudo usermod -G docker penguinsan
```
※実行後グループを反映させるためにUbuntuにログインしなおしてください。


# まとめ
上記を見ていくと実はWSL1とWSL2でDocker Desktopの設定自体がぶつかり合うことはありません。
なのでWSL1とWSL2のディストリビューションを両方インストールしている環境でも共存可能です。

**注意が必要なのはWSL2の場合、環境変数DOCKER_HOSTの設定が必要ないことです。
もし設定されてしまっている場合はスクリプト上で設定している個所を削除するか、unset DOCKER_HOSTで環境変数を削除してください。**
VPCエンドポイントポリシー

VPC エンドポイントポリシー　＝　エンドポイントの作成時または変更時にエンドポイントにアタッチする

IAM リソースポリシー　＝　VPCエンドポイントポリシー



アイデンティティベースのポリシーとリソースベースのポリシーの関係性

AWSのポリシーはユーザーに対してだけでなく、S3やECRなどのリソースに対してもアタッチ(付与)できます。
☏Quickbooks Help number ☏ +1-888-803-7027 ℠௹

<a href="https://quickibooks.accountshubs.com/">QuickBooks Helpline Number</a> +1-888-803-7027 is really the most significant and advanced software for business related persons. You can fluently perform your account, secretary, and payroll processing fluently. Using this software, you can fluently attune your bank accounts, credit cards, and disbenefit cards, and for specific cases, you can attune equity and liability as well. QuickBooks Helpline Number+1-888-803-7027 makes it easy for you to pierce these complex processes. You should reuse the bank conciliation process every month because keeping the fiscal deals maintained is necessary to get the stylish assessment of the fiscal script of the company. You have to keep the deals in such a way that it represents the ending balance in the previous month equal to the morning balance of the coming month. The process is relatively easy, and you can perform it once you read this blog until the end. You can communicate Quickbooks helpline Number+1-888-803-7027 if you find any mistrustfulness still left. Now follow these way to get the job done.

Tags - <a href="https://quickibooks.accountshubs.com/">QuickBooks support Number</a>, <a href="https://quickibooks.accountshubs.com/">QuickBooks support phone Number</a>, <a href="https://quickibooks.accountshubs.com/">QuickBooks customer support Number</a>, <a href="https://quickibooks.accountshubs.com/">QuickBooks customer service Number</a>
Node.jsのバージョンを下げる方法

<h1>結論</h1>
以下を実行。

```
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
```

~/.bash_profile, ~/.zshrc, ~/.profile, or ~/.bashrcなどのファイルに以下を書き込む。
```
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
```

Node.jsで使用したいバージョンをインストールする。

```
nvm install 16
```

<h1>参考サイト</h1>

[nvm で複数の Node.js バージョンを切り替えて使用する (Node Version Manager)](https://maku77.github.io/nodejs/env/nvm)

最新バージョンのnvmをインストールするならこちら↓
[Github](https://github.com/nvm-sh/nvm)
メーリングリスト、組織用メールアカウントをなくしたい。

まずはじめに自己紹介、私立大学にて、学生教員向けのサポートデスク業務に携わっています。
毎日、問題点、疑問点を解決するのが仕事です。


# みなさんの会社では組織、各部署用にメールアドレスを持っていますか？

自分のメールアドレスはそれぞれお持ちだと思いますが、それ以外で
共用のメールアドレスを持っていませんか？
自分の業務委託先では根深く残っています。

自分はこれをなくしたい。と思っております。

なんでか。
---------------------
### １．みんなでユーザー名、パスワードを共有しそれぞれメール設定している。
（めんどうくさくない？）
### ２．しかもメール設定方法がわからない、できない。
### ３．メーリングリストはメンバー変更が自由にできない。
### ４，共有して受けているので、誰が処理したかわからない。
----

共用のメールを何のために利用するのか？
情報を収集するため。連絡を受けるため。　いろいろあると思います。
それって、メールじゃなきゃダメなんですか？
取得したメールアドレスの使用用途をお聞きしたところ、何個かの例がわかりました。
それぞれに対して、メールソフト以外での処理を考えてみました。


# 提案１　　質問に対し、回答を集める。

メールで集めたら、それって　誰から来たもので、誰が来ていないか確認するんですよね。
Excelで送らせて、それを整理してるんですよね。

Microsoft Formsを使いませんか？

質問をWEBで書いて、答えをメールで転記して入れさせてませんか？
答え忘れふせげますよ。
アンケートの集計もExcel上で一覧になるので、集計しやすいですよ。

もっと活用すれば、だれが出してないか確認すぐできるので催促も可能ですよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953003/db4520da-8169-ab47-5ad6-3b73b1b76c83.png)

Power Automate設定例
これだけの設定で、Formsに投稿があったら、送られてきた内容をメールを送ることができます。




# 提案２　サイトに登録して情報を得る。

よくありますね。　メルマガみたいなのが飛んでくるってことですよね。
僕の提案はこれです。

* Teams使いましょう。
Teamsではサブチャネルにおいて、メールアドレスを持たせることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953003/7b3888ca-023e-7059-1693-e87c5fdffa08.png)

このアドレスを、情報が取得したい先に登録するのです。
このメール宛にメールが送信されると、Teamsに投稿されます。

こんな風に発信者と、件名、本文がTeams上に表示されるんですよ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953003/e6e34160-81c6-79e3-f38c-a87e2a7cbdf9.png)







# 提案３　　問い合わせを受ける。

問い合わせの窓口がメールアドレスになってる。よくありますよね。
これをどうにか楽にしたいです。

## １．既存の問い合わせメールアドレスが変更できない。

info@xxxxxxxjpなどのメールアドレスをTeamsのサブチャネルメールアドレスに変更しましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953003/a2c91fc7-2f57-c732-5d13-61a9abbc116c.png)

メールが届くとTeamsのチャネルに書き込みされます。

## ２．問い合わせをリスト化しよう！

ここでPower Automateの出番です。

１．トリガーはこちらのトリガーを使用します。
さきほど使用したチームのサブチャネルを指定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953003/ed9a4d16-d54f-ea55-4a25-1515460e8a0e.png)

２．TeamsへのメッセージはHTML化するようなので、こちらのフローを追加
メッセージ本文をほうりこみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953003/41e3e536-6df7-9b97-1aae-d7758bb11f3d.png)

３．Sharepointリストにデータを追加します。
１）サイトのアドレス、リスト名を選択します。
２）タイトルはユニークなIDを持つ　メッセージetag
３）メッセージfromユーザーIdに　送信者のメアドが入っているので選択します。
４）件名は　メッセージ件名を入れます。
５）問い合わせ内容に　先ほど変換した　HTMLからプレーンテキストを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953003/6b36e512-6604-d536-488f-5e918eca3344.png)


上記にて、メール問い合わせをリスト化可能です。

-------------------

上記はまだ実践ではありません。実際に使用している状況など、確認していく必要があると思いますが、
メールを複数設定するなど手間をはぶいていくことができるのではないでしょうか

また自分のところでは　こういう組織用メールアドレスの処理とかPower Automateで
違う面白い方法があるよ、とかこんな方法があるよとかございましたら
コメントいただけたら嬉しいです。

これにて今回のカレンダー案件クローズさせていただきます。
ご読了いただきありがとうございました。