OmniAICreator/Qiita-1.07M huggingface dataset:
「AWSお問い合わせ」から学ぶ質問力

## はじめに
質問力は、昨今、ブログやセミナーなどで紹介され、その重要さが際立ってきています。
ビジネスにおいても重要なポータブルスキルであるため、学んでいきましょう。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/f07c54d6-c513-5453-37e8-84f2b53b34fd.png)

質問した後に、このようなこと言われたことありませんか？
その質問に対して、相手は回答に困っています。
(答えてあげたいが、何を求めているんだろう。。。)


## 質問力
コミュニケーション能力の1つであり、不明点や疑問点などを正確かつ簡潔に伝える能力です。

ビジネスでは適切な提案や判断、業務遂行のために、回答者にとっても質問者の意図や状況を正確に理解することが求められるため、質問力は社会人において必要不可欠なスキルです。

エンジニアにとっても重要なスキルです。


## PREP法で伝えよう
PREP法とは、以下の頭文字をとった話法です。
- Point(結論)
- Reason(理由)
- Example(事例)
- Point(結論)

ビジネスにおいては、結論から話すことが良いとされており、IT業界でもこのフレームワークを使用することで、問題を効率的に解決することができます。


## AWSサポートの技術的なお問い合わせに関するガイドライン
ご存じの通り、AWSは、Amazon Web Servicesの略ですね。

AWSは世界中からエンジニアはもちろんのこと、非エンジニアの方の質問が多くよせられます。
1つ1つ答えていると時間がかかってしまい非効率となってしまいます。また、質問者も苛立ちを持つ可能性もあります。

そこで、AWSは、**質問の仕方** を公開することで、効率を図っています。

この公開されている内容は、今エンジニアを目指している方、経験の浅いエンジニアの方には良い教科書として使えるため、ご紹介させて頂きます。


https://aws.amazon.com/jp/premiumsupport/tech-support-guidelines/

## 解決したい課題を明確にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/b7c0f758-dc96-cd7a-c7ea-360005c47069.png)
NG例では、今どういう状況なのか全くわかりません・・・
サポートデスクの方もこの質問内容では、不具合なのか？どう動いて欲しいのか？分かりません。

そこで、OKの例のように、「どのような経緯で質問しているのか？」・「その質問に対して何を回答して欲しいのか？」を伝えると良いでしょう。


## 状況を正確に共有する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/b25316e9-8344-c30f-eabc-efdfc8efb0fa.png)
不具合が発生した際には、「いつから発生もしくは分かったのか？」「今は継続して不具合なのか？」を伝えるようにしましょう。
昨日動いていたことが、今日は動かないということは、よくあるため、
「昨日の18時頃は動いていることは分かっているのですが、今日は動いていないようで、おそらく昨日18時～発生していると考えています」と伝えると良いでしょう。


## 弊社事例としては・・
### 条件分岐をコーディングしたが、正しい結果とならない場合

#### NG
質問
If文で条件分岐記述しましたが、思った通りにならないのです。教えてください。

回答　
ん？？？？どうしたらいいの？？？

#### OK
質問　
〇〇という機能を実装しようと思い、if文で条件を記述しましたが、思った通りになりませんので、
この場合の解決策を教えて頂きたいです。
正しく条件判断されているか確認するために、デバッグで処理を追いましたが、やはり正しく判断されていませんでした。
お忙しいところ、申し訳ございませんが、この場合の解決策を教えて頂きたいです。

回答
ほぉ。
スペルミスかなー？もしかすると、対象となる変数がどこで変わっているのかなー？
ちょっと、〇〇の部分を調べてくれない？

::: note info
解決したい課題を明確に伝えること、自身が試したことを伝えることで、先輩エンジニアも過去の経験から解決策を見つけ出しやすくなります。
::: 

### フロントエンジニアを目指したいが何から始めたら良いか分からない
#### NG
質問
フロントエンジニアを目指ししているのですが、何から始めたら良いですか？

回答　
フロントエンジニアで何をしたいの？？？

#### OK
質問
フロントエンジニアを目指しており、まずは何から始めたら良いのか分からないため、Webサイトや動画などで探しました。
HTML/CSSはもちろんですが、photoshopやJavaScriptなど多くの項目があり、何から始めたら良いのか分かりません。
〇〇さんは、まずは何から始めたら良いとお考えでしょうか？

回答　
そうだね、たしかに色々あるのでこれが正解とは言えないけど、まずはHTML/CSS基礎を学んで、Webについて学んで、JavaScriptやPHPかな。

::: note info
NG例は抽象的であり、「まず、何をしたいかですね。」と逆質問をされる可能性が高いです。そのため、目的(Point(結論))を伝え、困っていること(Reason(理由))、調べたこと((Example(事例)）を伝えることで、よりスムーズに回答を得ることができます。
:::


## まとめ
根底にあるのは、回答者も担当する業務があるため、素早く回答して頂くための配慮が必要です。
あまり情報を多く伝えても、混乱することもありますが、PREP法を使用して伝えることで効率的に解決することができますので、ぜひ使ってみましょう！
Pythonだけでグラフを欠損させずにExcelシートをコピーしたい

# PythonでExcelのグラフを欠損させずシートをコピーする

## 最終的なコード

```py
import pathlib

import pythoncom
import win32com.client


def copy_sheet(filepath: str, src_sheet: int | str, dst_sheet: int | str, new_sheet_name: str | None = None) -> None:
    """シートをコピーする。

    Args:
        filepath (str): Excelファイルのパス。(絶対パス)
        src_sheet (int | str): コピー元のシート。シート名 or シートのインデックス(1~)で指定する。
        dst_sheet (int | str): コピー先のシート位置。シート名 or シートのインデックス(1~)で指定する。
        new_sheet_name (str | None, optional): 新しいシートの名前。 デフォルトは None で、 None の場合は変更しない。
    """
    xl_app = win32com.client.Dispatch("Excel.Application")
    wb = xl_app.Workbooks.Open(filepath)

    try:
        wb.Worksheets(src_sheet).Copy(After=wb.Worksheets(dst_sheet))
        if new_sheet_name:
            xl_app.ActiveSheet.Name = new_sheet_name

        wb.Save()
    except pythoncom.com_error as e:
        print(e.excepinfo[2])
    finally:
        wb.Close(True)
        xl_app.Quit()


# 絶対パスでないと受け付けないので注意
src_path = str(pathlib.Path("./tests/test.xlsx").resolve())

copy_sheet(src_path, "1", "3", "new sheet (src.1 dst.3)")
# インデックス指定の場合(1からスタート)
copy_sheet(src_path, 1, 5, "new sheet (src.1 dst.5)")
```

### 実行結果

元の Excel
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1224564/62a93875-3264-85da-119c-ce983193a3a3.png)

実行後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1224564/b6bcc9fe-1d3c-cc02-38c6-d6a63e7965c5.png)

しっかりグラフもコピー出来ています。

## 背景

Python で Excel を操作しようと思った時、代表的なライブラリとして [openpyxl](https://openpyxl.readthedocs.io/en/latest/index.html) があります。

このライブラリには普段からお世話になっているのですが、1つだけ不満点があります。
それは**シートをコピーした時にグラフが消えてしまう**という仕様です。

[python - Chart can't be copied with Openpyxl - Stack Overflow](https://stackoverflow.com/questions/67494403/chart-cant-be-copied-with-openpyxl)

業務上、以下のような Excel を扱う機会が多くあるので、この仕様には困らされてきました。

- 大量の計算式とその結果を参照するグラフを持つフォーマット Excel があり、それをコピーして使い回す
- シートごとにグラフが存在する

VBA であれば上のような問題は起きませんが、 csv などからデータを抽出・加工して貼り付けたい時に面倒です。

そこで、どうにか **Python だけ** で **グラフを保持したままシートをコピー出来ないか** 試してみました。

## 解説

### 準備

`pip` かお好きなパッケージ管理ツールで `pywin32` を導入します。

私は pipenv を使用しています。

```shell
pip install pywin32
```

### `Worksheet.Copy` メソッド

[Worksheet.Copy メソッド (Excel) | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/vba/api/excel.worksheet.copy) を使えばシートをコピー出来ます。

```vb
Worksheet.Copy(Before, After)
```

`Before`, `After` はどちらかしか指定出来ません。

#### シートの指定

シートの指定には [インデックス (1~)](https://learn.microsoft.com/ja-jp/office/vba/excel/concepts/workbooks-and-worksheets/refer-to-sheets-by-index-number) or シート名 のどちらかが使えます。
毎回シートの最後にコピーしたい場合、 `len(wb.Worksheets)` などでシート数を取得すれば良いです。

#### コピー先シートの名前

コピー直後は `Application.ActiveSheet` がコピーしたシートに変わっているので、`Application.ActiveSheet.Name` を変更することでシート名の変更が可能です。

### 注意点

- pywin32 は相対パスを受け付けてくれないので絶対パスに変換する必要があります。
Azureストレージのコンテナーからディレクトリごと一括でダウンロードする

# はじめに
背景やAzureのストレージ・コンテナーについての簡単な説明等は、以前書きましたこちらの記事にありますので、見たい方はご参照ください。

https://qiita.com/harutine/items/c4894f5f73ffcc97e136

本記事では、
- PowerShellでコンテナーからディレクトリ一括でダウンロードする方法

を紹介したいと思います。

また、コンテナーからダウンロードをするということは当然Azureと通信するということなので、**皆様の利用プランによって料金も変わってくる**かと思います。
この点にはぜひご注意ください。

# 環境
超簡単にですが、OSはWindows10です。

# ディレクトリごとダウンロードする方法
最初に行き当たったのは「AzCopyをダウンロードして、azcopyコマンドを実行する」という方法（[Azure Blob Storage　にコマンドでファイルをアップロードする](https://jin-kuro.com/azure-blob-storage-command-azcopy/) :arrow_upper_right:）だったのですが、いざ実行してみると、自分の場合はどうしても認証が通らず、ダウンロードすることができませんでした。
これでできる方もいると思いますので、記事をご参考にしてみてください。

ということで、最終的に成功したのは「**Azure CLIをインストールして、PowerShellからダウンロードを実行**」でしたので、その方法を紹介します。

### Azure CLIをインストール
以下microsoftのページで、「最新バージョン」にある「Azure CLI の最新のリリース」からAzure CLIのインストーラーをダウンロードできます。
[Windows での Azure CLI のインストール](https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli-windows?tabs=azure-cli) :arrow_upper_right:

このインストーラーを起動し、インストールを行います。
インストール方法や、PowerShellでの起動方法などはこちらの記事を参考にしました。
[やさしいAzure CLI のインストール](https://oji-cloud.net/2020/10/15/post-5613/) :arrow_upper_right:
注意するのは、インストール完了後、PowerShellを開く時です。
本記事には『Windows PowerShell を起動します。"管理者として実行する"を選択すると、azコマンドが認識しません。通常の起動を行います。』とあり、私も同様でしたので、管理者ではない通常の起動を行ってください。

PowerShellで`az`とだけ打って実行できれば、インストール成功です。

### ディレクトリごとダウンロードする方法
[az storage blob directory](https://learn.microsoft.com/ja-jp/cli/azure/storage/blob/directory?view=azure-cli-latest#az-storage-blob-directory-download) :arrow_upper_right: にある`az storage blob directory download`のコマンドを使って、適宜コマンドライン引数を設定して実行します。
```powershell:PowerShell
az storage blob directory download -c コンテナー名 -s コンテナー内のディレクトリパス -d ローカル保存先ディレクトリパス --account-name アカウント名 --account-key キー --recursive
```

|引数|説明|
|---|---|
|--container (-c)|**コンテナー名**。<br>ストレージアカウントの左ペインから「データストレージ」 -> 「コンテナー」に入ったときに表示されるコンテナー達の名前です。|
|--source-path (-s)|**コンテナー内のディレクトリパス**。<br>上記のコンテナーに入って以降の、ダウンロードしたいディレクトリパスです。|
|--destination-path (-d)|**ローカル保存先ディレクトリパス**。<br>ダウンロードしたデータを保存したいローカル側のディレクトリパスです。|
|--account-name|**ストレージアカウント名**。|
|--account-key|**キー**。<br>（確認方法は下記参照）|
|--recursive|再帰的に、つまりディレクトリパス直下に直接置かれているファイルだけでなく、その中にディレクトリがあればさらにその深い階層まで含めてダウンロードするための引数です。|

`キー`については、ストレージアカウントの左ペインから「アクセス キー」に入り、「キー」を表示すればコピーできます。
<img alt="azure_key.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1337870/420893c5-07f4-6546-cc08-0b3cd4dbe5d3.jpeg" width=700 >

また通信において、私の場合は会社の環境だったのでプロキシの設定が心配でしたが、今回はこれでそのままうまくダウンロードできました。
が、環境によってはプロキシの設定が必要になるかも知れませんのでご注意ください。

# 参考
### ファイルをダウンロードする方法
前回の記事をご参照ください。
- [Azureストレージのコンテナーから、Pythonでファイルをダウンロードする](https://qiita.com/harutine/items/c4894f5f73ffcc97e136)

### Azure CLI
* [Windows での Azure CLI のインストール](https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli-windows?tabs=azure-cli)
* [az storage blob](https://learn.microsoft.com/ja-jp/cli/azure/storage/blob?view=azure-cli-latest#az-storage-blob-download)
* [az storage blob directory](https://learn.microsoft.com/ja-jp/cli/azure/storage/blob/directory?view=azure-cli-latest#az-storage-blob-directory-download)
phpMyAdmin でルーチンが編集できない

phpMyAdmin で使うデータベースユーザは権限を適切に調整した管理ユーザであるべきですが、その管理ユーザでストアドプロシージャやストアドファンクションの編集ができないことがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/233b307f-5601-82dc-2452-ab68b232730b.png)

# 環境

- phpMyAdmin 4.9.5deb2
- MariaDB 10.3.34-MariaDB-0ubuntu0.20.04.1 - Ubuntu 20.04
- phpMyAdmin - MariaDB接続： Localhost via UNIX socket
- Apache/2.4.41 (Ubuntu)

# 症状例


「テストデータベース」中で「tomorrow」と「明日」のストアドプロシージャがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/af0deb8b-2dac-0d87-2684-787197d22ff5.png)

- tomorrow
  - phpMyAdmin で作成
- 明日 
  - root アカウントで MySQL クライアントで作成

中身は同じですが、「tomorrow」では編集実行ができますが「明日」は編集実行ができません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e7fd0ace-2db7-d9ad-4b1a-55dcf8ed8d46.png)


内部を表示しようとしても、以下のエラーが表示されます。

> 要求処理中でのエラー: データベース「`テストデータベース`」で「`明日`」のルーチンはありません。このルーチンを編集する為に必要な権限がない可能性があります。


# 解決

root アカウントでログオンします。

なお、MySQL クライアントにおいて sudo しないとログオンできない設定にしていた場合は、以下の
「sudo 無しで root ユーザでアクセスできるようにする」
https://qiita.com/nanbuwks/items/c98c51744bd0f72a7087#sudo-%E7%84%A1%E3%81%97%E3%81%A7-root-%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A7%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B
の項目に沿って設定を変更します。


root アカウントだと 編集や実行ができるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/8a278ac4-b03c-3bde-10c0-e4f8b212c0d1.png)

「編集」で「定義者」を変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/5b7144dd-498b-9643-ed1c-f7ab3718f8ae.png)

root@localhost から、 phpMyAdmin で利用するユーザに変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/fdf8180f-3e34-6c22-1913-ed0638ea1e34.png)

root でログアウトし、ログインすると使えるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/0423f4fa-6aa9-5b9a-8362-4c167a530f0f.png)
Akamai Control Centerで APIクレデンシャルを作成する

## Akamai Control CenterでのAPIクレデンシャルの作成方法
Akamai 製品は API を使って設定確認や変更が行なえます。最初に、API 用のクレデンシャル（ユーザー及びキー）を Webベースの統合管理用インターフェース「Akamai Control Center（ACC）」で作成する必要があります。なお、作成したクレデンシャルはAPIだけでなく、Akamai CLI（コマンドラインツール）、Terraformなどでも利用することができます。
今回はACCでのAPIクレデンシャル作成方法をご紹介します。


## APIアカウント作成
ACCにログインし、左上のグローバルメニューから、**Identity & Access**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/ec6d25b8-1597-8ecf-4949-f5cba2079534.png)

::: note info
APIアカウント作成の権限を保持しているユーザーでログインする必要があります。
:::

<br>

メニュー右側にある**APIクライアントの作成** をクリックします。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/ac0ab431-95f6-332e-bc54-9d26bd749c39.png)


ここでは**クイック**を選択します。　
詳細を選択することでAPIへの詳細なアクセス制限などを設定することができます。後でも変更可能です。また「別のユーザー」や「サービスアカウント」向けのタイプを選択することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/78ac9edd-0ddc-5877-b24a-c71c13fea23c.png)

::: note warn
動作確認後は適切なアクセス権を与えるように権限の編集を行ってください。
:::



ACC上にAPI用のアカウントが作成されます。後でこのアカウントを確認や変更を行いたいときは、作成時と同様にACCグローバルメニューのIdentity & Accessよりアクセス可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/272e16b0-4105-79bf-bdb1-6c615d07759e.png)



## クレデンシャルの作成及び保存

先ほどの画面にて、**資格情報の作成**をクリックすると、以下のようにAPIへアクセスするためのクレデンシャルが作成されます。
別の画面に遷移すると、client_secretは閲覧できなくなるため、このタイミングでダウンロードまたはテキストファイルにて保存する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/2ca4a6a0-d374-6b81-0450-e1e88ba23fba.png)

::: note warn
クレデンシャルは他人が利用できないように、安全に保管をしてください。
:::

::: note warn
クレデンシャルは更新通知に従い定期的に有効期限の更新を行う必要があります。
:::


テキストで保存した情報に対して、セクションとして [default]を付与したうえで、ファイル名「.edgerc」として以下のようにAPIにアクセスするマシン内に保存します。
・Windows　C:¥Users¥{ユーザー名}¥.edgerc
・Linux　　　/home/{ユーザー名}/.edgerc
・macOS　　/Users/{ユーザー名}/.edgerc
<img width="80%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/3b62fed1-35cc-7169-ce92-e6e9864b75e6.png">

## 動作確認
ここではシンプルにhttpieを用いてAPIでContracts情報（契約IDのリスト）を取得してみます。
.edgercを保存した端末にて、以下のコマンドを実行し、Contracts情報が返ってきたら成功です。
httpie-edgegrid pluginをインストールする方法は下記リンクを参考にしてください。
```
$ http --auth-type=edgegrid -a default: :/contract-api/v1/contracts/identifiers
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 48
Content-Type: application/json
Date: Tue, 13 Sep 2022 07:12:05 GMT
Server: nginx
Vary: accept-encoding
x-ids-session-id: 5fba11a3-60e1-4f31-8445-xxxxxx
x-trace-id: xxxxxxxxxxx

[
    "A-XXXXXXX",   #これらがContracts情報です
    "B-YYYYYYY"
]
```

httpieにhttpie-edgegrid pluginをインストール
https://techdocs.akamai.com/developer/docs/httpie-make-api-calls
List contracts
https://techdocs.akamai.com/contract-api/reference/get-contract-ids

## まとめ
ACC上でAPIクレデンシャルを作成することで、API/CLI/TerraformなどのAkamai DevOps環境を作ることができます。種設定情報などをコマンドで取得するだけではなく、設定を変更したり、それらを自動化したり、応用することで業務の最適化につながります。
本記事ではAPIクレデンシャルの作成方法をご紹介しました。ぜひ本記事をきっかけにAkamaiのサービスをDevOpsに組み入れてみてください。


## 関連記事
https://techdocs.akamai.com/developer/docs/set-up-authentication-credentials
「Snoop」を使ってWPFでのUI作成を効率的に行う

# はじめに
本記事はWPFアプリケーションのビジュアルツリーを表示し、コントロールのプロパティ値変更などを支援する「Snoop」を使ってWPFでのUI作成を効率的に行う方法をまとめます。

# Snoopとは
WPFアプリケーションの**ビジュアルツリー**を表示するツールです。
UI画面上のコントロールが他のどんなコントローラを要素として構成されているかを確認できます。
また、コントロールのプロパティやコントロールのデータコンテキスト(MVVMパターンで実装している場合はViewModel)のプロパティも変更可能であり、その際の見た目の変わり方も確認できます。
詳細は[こちら](https://github.com/snoopwpf/snoopwpf)を参照ください。

# 何に使えるのか
以下のような場合にSnoopを使うことで作業効率を上げることができます。

* コントロール中のどのプロパティを変更すると見た目が変更されるかわからない

SnoopではVisualStudio上でデバッグ中に、コントロールのプロパティ値を変更し、UIの変化を**その場**で確認できます。
そのため、プロパティ値の変更後にわざわざビルドしてUIの変化を確認する必要がなくなり、開発効率が向上すると考えられます。

# 使い方
基本的な使い方と実際に使っているイメージを示します。
(イメージは以下の3.以降の手順を対象としています。)
1. 対象プロジェクトをデバッグ実行する
2. Snoopを起動する
3. 双眼鏡のボタンの右側のボタンをクリックし、コントロールの動きを見たいWPFアプリケーションにドラッグドロップする
4. UI画面上で変化を見たいコントロールを"Ctrl+Shift"を押しながらマウスホバーする
5. ビジュアルツリー右側のプロパティタブでプロパティを変更  
6. プロパティ変更に応じてコントロールの見た目が変化する
![Snoop動作イメージ2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452292/e13e67e3-007e-06d4-60fa-9b0e4a79bf2a.gif)


# まとめ
本記事ではWPFアプリケーションのビジュアルツリーを表示し、コントロールのプロパティ値変更などを支援する「Snoop」を使ってWPFでのUI作成を効率的に行う方法をまとめました。
見た目の変化を即座に確認しながら開発を進めることができるため、活用していきたいですね。
Salesforce認定アドミニストレーター試験の公式練習問題を解説してみた-その045

こんにちは。本橋孝昭です。

Salesforce認定アドミニストレーター試験の公式練習問題があるのはご存じでしょうか。
Trailheadにフラッシュカードとして何度も解ける練習問題がございます。

今回はTrailhead
アドミニストレーター認定の準備: データと自動化
ワークフローと自動化の学習

にある練習問題1問目をご紹介します


なお今回の内容は動画でも公開しています

https://www.youtube.com/watch?v=ZGoE4nPAC8I

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



https://trailhead.salesforce.com/ja/content/learn/modules/administrator-certification-prep-security-and-data-management/study-up-on-security-and-access?trail_id=administrator-certification-prep

![０１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/f15c079c-300b-d670-8e63-d5e5cee9e8aa.png)




問題はこちらです

正解はAです

プロセスビルダーとはこのようなものです

![プロセス０１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/72cd00b7-9197-a37e-5a6e-520f0ad889c4.png)

プロセスビルダーでは特定の条件で特定のユーザにメールを飛ばすことが可能です。


今回の内容は、
・サポートエンジニアはメールがプロセスビルダーは飛んでいない
・しかし、それ以外のユーザはプロセスビルダーでメールを飛んでいる


ということが分かります


なので、ユーザ特有の設定に注目しましょう

正解はユーザの設定のメールアドレスが正しくない　というAですね



Bについて

プロセスが有効でないとプロセスビルダーが起動されないのですべてのユーザにメールが飛ばないはずなので間違いです

Cについて

メールテンプレートとはメールの内容のことです。
よってそのメールの内容は送信には関係ないので間違いです


Dにつついて
プロセスが評価条件が正しくないとプロセスビルダーが起動されないのですべてのユーザにメールが飛ばないはずなので間違いです
AI Programmerの作法 その11

# 概要
AI Programmerの作法、調べてみた。
atcoderやってみた。

# 投入したソースコード
- C++
- 文字列を受け取り、1の個数をカウントする問題です。

# 実行結果

```
文字列を受け取り、1の個数をカウントする問題です。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    cin >> s;

    int count = 0;
    for (int i = 0; i < s.size(); i++) 
    {
        if (s[i] == '1') 
        {
            count++;
        }
    }
    cout << count << endl;
    return 0;
}

```

# 入力

```
101
```

# 実行結果

```
2
```

# 成果物

https://paiza.io/projects/6GOv2nrYKgvoRR_EsXnhVw?language=cpp


以上。
AI Programmerの作法 その10

# 概要
AI Programmerの作法、調べてみた。
atcoderやってみた。

# 投入したソースコード
- C++
- 2つの整数値を受け取り、その積が2の倍数かを判定する問題です。

# 実行結果


```
2つの整数値を受け取り、その積が2の倍数かを判定する問題です。

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    if ( (a*b)%2 == 0 ) 
    {
        cout << "Even" << endl;
    } 
    else 
    {
        cout << "Odd" << endl;
    }
    return 0;
}
```

# paiza.io

# 入力

```
6
7
```

# 実行結果

```
Even
```

# 成果物

https://paiza.io/projects/8Jw92uJCTNTPmgmzk9xEiw?language=cpp

以上。
AI Programmerの作法 その9

# 概要
AI Programmerの作法、調べてみた。
atcoderやってみた。

# 投入したソースコード
- C++
- 500円玉をA枚、100円玉をB枚、50円玉をC枚持っているとき、これらの硬貨の中から何枚かを選び、合計金額をちょうどX円にする組み合わせを求める問題です。

# 実行結果

```
500円玉をA枚、100円玉をB枚、50円玉をC枚持っているとき、これらの硬貨の中から何枚かを選び、合計金額をちょうどX円にする組み合わせを求める問題です。

A,B,Cをそれぞれ選んだときの合計金額をX-500A-100B-50Cとします。

ここで、X-500A-100B-50Cが0以上であることは、A枚、B枚、C枚の硬貨の総数が少なくとも1枚以上あることと同じです。

X-500A-100B-50CはA,B,Cの硬貨を選ぶ枚数の組み合わせによって決まります。

A,B,Cにはそれぞれ0から10の整数を入れることができます。

Xは1000,2000,3000,...,1000000の整数を入れることができます。

#include <iostream>
using namespace std;

int main() {
    int A,B,C,X;

    cin >> A >> B >> C >> X;

    for(int i=0;i<=A;i++)
    {
        for(int j=0;j<=B;j++)
        {
            for(int k=0;k<=C;k++)
            {
                if(500*i+100*j+50*k==X)
                {
                    cout << i << " " << j << " " << k << endl;
                }
            }
        }
    }
}

```

# paiza.io

# 入力

```
3
5
10
2000
```

# 実行結果

```
2 5 10
3 0 10
3 1 8
3 2 6
3 3 4
3 4 2
3 5 0
```

# 成果物

https://paiza.io/projects/EcEP4So1fO7ZoqMXN4IgQw?language=cpp
以上。
JavaScriptで昔懐かしのスネークゲームを作ってみたよ。

# はじめに

JavaScriptの復習もかねて、スネークゲームを作ってみたよ。
ついでにPHPでWebAPIを実装して非同期処理にも挑戦してみた。

# ゲーム画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298004/af56e764-21ad-7c6e-c958-90929fa3ac76.png)

# ゲーム本体

https://games.imoimo.xyz/snake_game

# ソース

https://github.com/imoimo2009/snake_game
macOS をアップデートしたら Vagrant の起動ができない 【Monterey 12.6】


## OSをupdateしたあとに vagrant up するとエラーが出て焦る
```:エラー
Progress state: NS_ERROR_FAILURE VBoxManage: error: Failed to create the host-only adapter VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterfaceWrap, interface IHostNetworkInterface VBoxManage: error: Context: "RTEXITCODE handleCreate(HandlerArg *)" at line 95 of file VBoxManageHostonly.cpp
```

## 現在のバージョン
```
macOS : Monterey 12.6
VirtualBox : 6.1.34
Vagrant : 2.2.19
```

## [手順1] まずはアンインストールする
```:アンインストールする
brew uninstall virtualbox
brew uninstall vagrant
```
## [手順2] 最新版をインストールする
```
brew install virtualbox
brew install vagrant
```

## [手順3] macのシステム環境設定 / セキュリティとプライバシー で アプリケーションの実行許可を行う

## [手順4] macを再起動する

## [手順5] Vagrantが正しくインストールできてなかったため再度インストール
```
brew install vagrant
```
```:実行結果
==> Downloading https://releases.hashicorp.com/vagrant/2.3.0/vagrant_2.3.0_darwin_amd64.dmg
######################################################################## 100.0%
==> Installing Cask vagrant
==> Running installer for vagrant; your password may be necessary.
Package installers may write to any location; options such as `--appdir` are ignored.
Password:
installer: Package name is Vagrant
installer: Installing at base path /
installer: The install was successful.
🍺  vagrant was successfully installed!
nishimura@mbp vm-local % vagrant up
Vagrant failed to initialize at a very early stage:

The plugins failed to initialize correctly. This may be due to manual
modifications made within the Vagrant home directory. Vagrant can
attempt to automatically correct this issue by running:

  vagrant plugin repair

If Vagrant was recently updated, this error may be due to incompatible
versions of dependencies. To fix this problem please remove and re-install
all plugins. Vagrant can attempt to do this automatically by running:

  vagrant plugin expunge --reinstall

Or you may want to try updating the installed plugins to their latest
versions:
  vagrant plugin update
Error message given during initialization: Unable to resolve dependency: user requested 'vagrant-vbguest (= 0.30.0)'
```

## [手順6]上記で「プラグインをアップデートしなさい」 と言われるのでアップデートする
```
vagrant plugin update
```
```
vagrant up
```
で無事に起動成功

## [補足] アップデート後のバージョンはこちら
```
VirtualBox : 6.1.38
Vagrant : 2.3.0
```
AI Programmerの作法 その8

# 概要
AI Programmerの作法、調べてみた。
atcoderやってみた。

# 投入したソースコード
- C++
- 1以上N以下の整数のうち、10進法での各桁の和がA以上B以下であるものの総和を求める問題です。


# 実行結果

```
1以上N以下の整数のうち、10進法での各桁の和がA以上B以下であるものの総和を求める問題です。

#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int N, A, B;
  cin >> N >> A >> B;
 
  int sum = 0;
  for (int n = 1; n <= N; n++) 
  {
    int s = 0;
    for (int i = n; i > 0; i /= 10) 
    {
      s += i % 10;
    }
    if (A <= s && s <= B) 
    {
      sum += n;
    }
  }
 
  cout << sum << endl;
  return 0;
}

```

# paiza.io

# 入力

```
20
2
5
```

# 実行結果

```
84
```

# 成果物

https://paiza.io/projects/k8T9IIBeNvaASQw-4wjGDQ

以上。
S.M.A.R.Tについて

●S.M.A.R.T（Self-Monitoring, Analysis and Reporting Technology System）
ハードディスクの問題を発見するための自己診断機能のことで、多くのハードディスクやSSDが対応。S.M.A.R.Tは、読み取りエラーの発生率やディスクの電源ONの積算時間などの多くの項目を監視できます。

LinuxにはS.M.A.R.Tの情報を取得するsmartmontoolsというソフトウェアがある。
smartmontoolsのsmartdデーモンは、S.M.A.R.Tの情報を定期的に監視して、問題発生時は管理者に通知するなど、障害予防に利用できる。
また、監視内容はsmartctlコマンドでも確認できる。

●smartctlコマンドの書式と主なオプション

smartctl [オプション]　デバイス

・-a |—all　すべてのSMART情報を表示
・-i|—info SMARTの対応状況やデバイスの情報を表示
・-c|—capabirities　テストの対応状況を表示
・-t|—test 自己診断テストの実行
・-l|—log テストログを表示
・-H|—health デバイスの正常性（ヘルスステータス）を表ｚ
・—scan 認識されているデバイスを表示
maya2022 component Tagsで困った

maya2022 から実装された　component Tags
これによってデフォーマセットが無くなり
グラフ的にはすっきりな見た目になるのですが・・・・

https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2022/JPN/Maya-WhatsNewPR/files/GUID-C6BC495C-F1B6-4370-AC2D-24CA4B4AAF9B-htm.html

そうかtweakも自動で追加されなくなるのか。

それはさておき、困ったのが

従来では
-

- latticeを作る
- latticeの位置divを調整する
- 任意のオブジェクトをffdのデフォマーセットに追加する

という手順でよく作業していたのですが
デフォーマーセットが生成されないので、

    sets -add ffd1Set;

とかやってもエラーになってしまいます。

り、リレイションシップエディターなら？
と思って開いてみても
こっちも　デフォーマーセット準拠になっているので編集できず。

既存のデフォーマーに追加できない！

対応
-

色々検索してたどり着いたのが

    deformer -e  -g pSphere2 ffd1;

deformerコマンドで追加という方法。

ハディま
よくよく考えてみたら、デフォーマーセットに追加よりこの方法の方が正しいのではないか・・・？

しかし、追加時に使用するcomponentTagNameを指定するオプションは見当たらない。
別途編集するコマンドがあるのかな？
これについては要検証。


コマンド
-

componentTagNameのリストを取得

    cmds.geometryAttrInfo("pCubeShape1.outMesh",componentTagNames = True)
AI Programmerの作法 その7

# 概要
AI Programmerの作法、調べてみた。
atcoderやってみた。

# 投入したソースコード
- C++
- N枚のカードを二人で交互に取っていき、カードに書かれている数字の和の差を求める問題。

# 実行結果

```
N枚のカードを二人で交互に取っていき、カードに書かれている数字の和の差を求める問題。

#include <iostream>
#include <vector>

int main() {
  int N;
  std::cin >> N;

  std::vector<int> A(N);
  for (int i = 0; i < N; i++) 
  {
    std::cin >> A.at(i);
  }

  int sum1 = 0;
  int sum2 = 0;
  for (int i = 0; i < N; i++) 
  {
    if (i % 2 == 0) 
    {
      sum1 += A.at(i);
    } 
    else 
    {
      sum2 += A.at(i);
    }
  }

  int ans = (sum1 > sum2) ? (sum1 - sum2) : (sum2 - sum1);
  std::cout << ans << std::endl;
}



```

# paiza.io

# 入力

```
4
10
9
12
5
```

# 実行結果

```
8
```

# 成果物

https://paiza.io/projects/TifaQm1x7K1KL5Fp_puirg

以上。
情報処理安全確保支援士　平成29年春期　午後Ⅰ

■問1（難易度：普通）
テーマ：L2で中間者攻撃（ARPポイズニング）
【問われていること】
・ARP：Address Resolution Protocol
　IPアドレスからMACアドレスを調べる際に利用するプロトコル。
　例
　①L2にパケット到着。自身のARPテーブル確認。→無いなら②
　②ARP要求を同一NW内にブロードキャスト
　③ARP応答がL2にユニキャスト
　④IPアドレスをMACアドレスを一致させ、ARPテーブルにキャッシュし、パケットを送る。

・ARPポイズニング
　↑の④でARPキャッシュを行うが、そこを悪意のあるものでキャッシュさせる。
　ARPテーブルが間違っているので、間違ったところに送信される。
　L2→中間攻撃者、中間攻撃者←被害者のようにARPテーブルを改ざんすれば、盗聴できる。
　L2と被害者にARPポイズニングを成功させる必要がある。

・データリンク層(L2)におけるフレーム配送
LAN to 個々の機器に送る感じ。=隣接機器のデータ送受信のプロトコル。
自分たちで管理しているエリア内での通信。
IPアドレス→MACアドレスにするフェーズ。
登場用語：ARP、イーサネット、トークンリング、コリジョン

・ネットワーク層(L3)におけるパケット配送
LAN to LANに送る感じ。=データを目的地まで送るプロトコル
自分たちで管理しているエリアから出る通信。
IPアドレス→IPアドレスのフェーズ。
登場用語：ルーティング、IPsec（パケットレベルで暗号化）

・トランスポート層(L4)
パケットがちゃんと届いているかをチェックする。=信頼性のプロトコル。
登場用語：TCP/UDP、ポート番号、SYN/ACK、シーケンス番号、確認応答番号

・アプリケーション層(L7)
アプリケーションのプロトコル
登場用語：HTTP、SMTP、DHCP、DNS

・TCP通信におけるIPスプーフィング（送信元IPアドレスの偽装）
　通常、TCP通信の場合、シーケンス番号と確認応答番号の照会をする。そのため、IPアドレスを偽装するだけでは3ウェイハンドシェイクは失敗する。
　失敗する3ウェイハンドシェイクフロー
　①偽装IPで攻撃者はサーバに接続。偽装しているのでFWは通過可能。SYNは成功。
　②サーバは偽装されたIPアドレスにACKを送る。
　③偽装されたIPアドレスに対応したMACアドレスの人（正当な人）にACKが届く。

結局、攻撃者はACKの値を知ることができないので、サーバに接続できない。
攻撃者としては、ACKが攻撃者のところに来てほしい。
では、どうするか。サーバのARPテーブルを書き換えてしまう(ARPポイズニング)

書き換え前：IP:偽装先のIP :MAC:偽装先のMAC
書き換え後：IP:偽装先のIP :MAC:攻撃者のMAC

↑にすると、③の動きが変わる。
サーバからすると偽装IPにACK送ったと思い込んでいるが、実際に届くのは攻撃者のところ。
以下になって、中間者攻撃が成功する。

　成功する3ウェイハンドシェイクフロー
　①偽装IPで攻撃者はサーバに接続。偽装しているのでFWは通過可能。SYNは成功。
　②サーバは偽装されたIPアドレスにACKを送る。
　③偽装されたIPアドレスに対応したMACアドレスの人（攻撃者）にACKが届く。
　　※サーバのARPテーブルが書き換えられているため。
　④攻撃者はサーバにACK送れば、コネクションが確立してしまう。

・IPスプーフィングによる中間者攻撃を防ぐ方法
　ACK受信時にサーバ証明書を検証すればOK。攻撃者のサーバ証明書が登録されていないので、弾かれる。
Virtual Remote Assistant/ Scheduler　というオブジェクトのレポートを作る

[How to enable reporting for standard objects?](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000K0eoN)

普通はオブジェクトマネージャーの設定だと思うけど、何故か違う。資格をいっぱい持っている人ほど脊髄反社で調べずに回答しているなぁ。自分の能力を過信しすぎだろう。　私は英語が分からないので常にエビデンスを調べて添付しますね。英語で説明ができません。


:::note info
Page 74 of the PDF below describes how to create a custom report type.
https://resources.docs.salesforce.com/rel1/doc/en-us/static/pdf/vra_admin_manual.pdf
:::
独習プログラミングの備忘録　3　【分岐処理】

～学んだこと～
・順次、分岐、繰り返しの3つの制御処理を組み合わせることでどんな複雑なプログラムでも理論上
可能である

・波カッコの内容が1行だけの場合はカッコを省略できる(ただし非推奨)

・関係演算子の「=」は右の位置にくる　(例:<=, !=)

・文字列の場合は関係演算子で判定できず、int型に変換する必要がある

・論理演算子(OR・・・ A || B, AND・・・ A && B, NOT・・・!A )

～感じたこと～
printf()は#include ≪stdio.h≫と覚えることができたが、命令文はごまんとあるためExcelで
表を作成するべきだろうか。
資格オブジェクトをレコード リストとして選択できません


[Can't pick Entitlement object as a Record List](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000K0pMr)

I want to select "Entitlement" on my record list's object but as you can see, I can't find the Entitlement object.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d88a9b83-5e28-695c-8932-c57eb49b4d4c.png)


unfortunately Entitlements are only supported in experiences built using Salesforce Tabs + Visualforce and can’t be added to Lightning Experience. 

[資格管理の制限と制限](https://help.salesforce.com/s/articleView?id=sf.entitlements_best_practices.htm&type=5)
xlwings Names addについての書かれていない仕様

# 名前定義された範囲の利用
xlwingsでExcelファイルを読み書きする時(特に読む時)には、対象範囲に名前を定義し、その名前でアクセスした方が良い。
こうすることで、python側から\$A\$1などとセルアドレスを指定する必要が無くなる。また、Excel側で行や列の追加・削除やシート名の変更をしても問題無い状態となる。

なお、名前定義をExcel上だけで行うなら、ここで書いている事項は無関係だが、知識として知っていても良いことだろう。

# 仕様に書かれていない理由
ここで書くことは、xlwingsの公式ドキュメントに書かれておらず、知らないとうまく使えないことなんだが、これはxlwings側の問題ではない。

Excelの名前定義について、いつのまにか仕様が拡張され、参照範囲に指定するものが、**セル範囲**ではなく、**数式**になったためだ。

# 公式ドキュメント中の説明
xlwingsのNamesクラスのaddメソッドの説明は以下となっている。
>`add(name, refers_to)`
>セル範囲に新しい名前を定義します。
>
>パラメータ
>name (str) -- 名前として使う文字列を指定します。名前にスペースを含めることはできません。またセルを参照することもできません。
>
>refers_to (str) -- A1形式で名前の参照先を指定します。

# 書かれていない仕様
問題は、`refers_to`の指定の仕方です。上記とおりに、`'A1'`などを指定すると、まともに動きません。
## 対処方法
* `refers_to`に指定するstrの先頭に`=`をつける。

上述のように現状では、参照範囲に指定するものは**数式**ですので、`=`が必要です。
無いと、Excel側で文字列を渡したかったと解釈し、指定したセルアドレスを文字列とした文字列定数が定義されてしまいます。

* `refers_to`に指定するセルアドレスは、`$A$1`の様に絶対参照形式とする。

これはExcel上で実行した場合も同じなのですが、行または列、あるいは行と列が相対参照となっているセルアドレス(例：A1、\\$A1、A\\$1)を指定した場合、名前定義を実行する際のアクティブセルを基準として実際に参照されるセルのアドレスが決まります。このため、大抵の状況では意図しないセルアドレスを参照する名前が定義されてしまう。
【MySQL】今日の日付の0時0分を取得する方法

# 使用例
いずれのパターンも結果は同じになります
```sql
SELECT TIMESTAMP(CURDATE());
SELECT TIMESTAMP(CURRENT_DATE());
SELECT TIMESTAMP(CURRENT_DATE);
```


## 実行結果
```sql
  -> 2022-10-06 00:00:00
```

TIMESTAMP()の引数に日付を入れると日付時間値を返す作用を利用し、
今日の日付（2022-10-06）を変換しています。

CURDATE() 、CURRENT_DATE() 、CURRENT_DATE ではいずれも今日の日付を取得できます。
CURRENT_DATE() と CURRENT_DATE は内部的には CURDATE() を実行しているとのことです。

# 参考文献
https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-functions.html

http://mysql.javarou.com/dat/000848.html

https://ja.stackoverflow.com/questions/69325/mysql-%E3%81%A7%E4%BB%BB%E6%84%8F%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%BE%E3%83%BC%E3%83%B3%E3%81%AE%E5%BD%93%E6%97%A50%E6%99%82%E3%81%AE%E5%80%A4%E3%82%92%E6%B1%82%E3%82%81%E3%81%9F%E3%81%84
Event Monitoring Analytics App


このモジュール Event Monitoring Analytics App の次の手順: Event Monitoring Analytics App の作成
ステップ 6 で、DataFlows サブタブが見つかりません。また、「Einstain Data Manager」Analytic studio にも入りません。添付のスクリーンショットをご覧ください 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/5af89d60-92a4-e6ca-de67-c361c03eca2d.png)


データフロー サブタブは、Salesforce の最新リリース以降、メインのデータ マネージャー ページにはありませんが、ページの左下にある [データフローの管理] リンクから古いビューに引き続きアクセスできます。スクリーンショットに表示されます。

[Don't see Einstein Data Manager in Special Edition Developer Org](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000K0XhE)
初学者のSwift学習アウトプット２

<h2>「Xcode」</h2>
・エディター画面に２つのファイルを分割して表示したい時は、エディターエリア一番右上のアイコン（四角の中にプラスマーク）をクリック。２画面にした場合のファイルの開き方は、開きたい側の画面をクリックしたあとに開きたいファイル名をクリックすることで表示できる。<br>
<br>


・Storyboard上のコンポーネントとコントローラーファイル内のクラスと紐付けをしたい場合は、「control」を押しながらマウスで紐付けしたいクラス名の部分までドラッグ&ドロップする。
紐付けが完了すると、「@IBOutlet let var 、、、」というコードが追加される。これは、ストーリーボード上から紐付けされたプロパティであるという表記

・UITableView（テキスト）の中身を定義する際には、UITableViewDatasourceというプロトコルをコントローラーに準拠させる必要がある。
```
例：
extension コントローラー名: UITableViewDatasource {}
```
extentionで記述したものは、このままではクラスに適用されないので、クラスに以下を記述する必要がある。
```
例：
プロパティ名.dataSource = self
```

簡潔に言うと、テキストを書きたい場合、クラスのプロパティ名にDataSourceを適用したものをselfを使用してあらためてHomeViewControllerとすることで編集できる。extensionに関してはこの２点記述をしなければ適用されない。


<h2>メモアプリ用モデル作成</h2>
・「モデル」：プログラム上でデータ構造などを表現するためのもの。<br>
<br>
・「struct」：データ構造を変数で定義しておく。<br>

```
例：struct MemoDataModel { var text: String, var recordDate: Date }
```

・作成したモデルを使用するためには。コントローラー内に配列形式で定義する。

```
例：var memoDataList: [MemoDataModel] = []
（memoDataListという変数を、MemoDataModelからのデータを、配列形式（[]）で定義）
```

これだけでは空のデータなので、上記にメモデータを格納するためのメソッドを定義。<br>
複数のデータを取り出し表示させる必要があるので「for in」を使用し順番にデータを取り出し、作成した配列に入れていくメソッドを定義する。

```
例：let 変数 = モデル名(text: "文字列", recordDate: Date())
   memoDataList.append(memoDataModel)
```

・上記で作成したものは画面が表示される際に呼び出したいため、「viewDidLoad」メソッドに記述。

```
例：override func viewDidLoad() { メソッド名 }
※「override」は、親クラスに定義されているものを上書きしたい場合に使用
```
<br>
・「indexPath.row」：ビューに表示される要素番号が、０から順に設定される。
<br>

<h2>メモ詳細画面を作成</h2>
・新しく画面を作成する際は、新規画面用のコントローラーファイルの作成（作成中のアプリ名を右クリック→new file）と、ストーリーボードにビューを作成する（UIViewController）２つの手順が必要。<br>
<br>
・上記２つを作成したら、ビューとコントローラーをつなげるために、ビューをクリックして選択し、エンティティーエリアの「Custom class」のClass名にコントローラー名を記述する。<br>
<br>
・「UITableViewDelegate」：ビューの一部をタップしたら画面遷移する機能を作成するためにはこのプロトコルをコントローラーに記述する。ユーザーがUITableViewを操作した際の挙動を指定できるさまざまなメソッドが用意されている。<br>
<br>
・「didSelectRowAt」：セルをタップした際に、そのセルのインデックス番号が渡されるメソッド。その番号を取得して必要なデータを返すために使用する必要がある。<br>
<br>
・「クラスプロパティ名.delegate = self」：delegateは「extension」での記述になるので、メソッド作成後は「viewDidLoad」内にこれを記述しなければ実行されない。<br>
<br>
・「UITableView（配列データなどをリストとして表示）」をコード上で使用できるようにするには、配置したコンポーネントを選択し、ユーティリティエリアの「Identity」→「Storyboard ID」欄にコントローラー名を記述する。<br>
<br>
・「UIStoryboard」：コード上でストーリーボードを使用する際には、これをインスタンス化する必要がある。<br>
<br>
・「instantiateViewController」：このメソッドを使用してクラスごとインスタンス化する。

```
例： let 変数名 = storyboard.instantiateViewController(identifier: "", ・・・)
```
・「navigationController?.pushViewController」：navigationControllerのpushViewControllerというメソッドを使って画面遷移処理を定義している。
<br>
・「UINavigationController」では、ヘッダー部分のUIを自動的に構築してくれる。
<br>
・「deselectRow」：index番号を渡すことで、そのセルの選択状態を解除する。
```
例：プロパティ名.deseletRow(at: indexPath, animated: true)
```
<br>
<br>

<h2>感想</h2>
・慣れ！
　の部分が多い気がする。いざ覚えようと思っても覚えるのって難しいからやっぱり何かアプリを作成しながらわからないことがあったらこのようなアウトプットなどの備忘録を見て思い出しながら実装していくのがいいって、学習が進んでいくたびに思います！<br>
と言っても完璧主義チックな自分にとってなかなかそれが難しいんですが、、笑
Arduino UNOとOLED,SSD1306で初期化して遊ぶ(初期化魔法のスペルは、「80-8D-80-14-80-AF」)


x 人気があつたので記事の続編を書く


x OLED096UNO-Aです。
x Arduino UNO互換機

目的
OLEDの初期化

説明
スペルを唱える事により、OLEDを始動する

チャージポンプ　起動～　　　出力100%
ディスプレイオン　発動～   表示装置確認～

画面が点いてノイズがでたらミッション完了
まず、スタートラインにつける



関連


https://qiita.com/caa45040/items/828ff804916b1cbdfa22




![o_con849.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/b221090b-cf7d-fcf1-483a-92d71722e08f.jpeg)




o_con774.jpg

![o_con774.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/720ef405-c2b4-a4d2-bd7d-99ccc3f47b28.jpeg)



o_con776.jpg

![o_con776.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/7ff61abd-a6b7-e6c4-f506-3ee6dd27efef.jpeg)



o_con775.jpg

![o_con775.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/9fac0ea8-8861-8498-3ec0-9d5dcbdc8b1b.jpeg)



ね、物凄く簡単でしょ。


君たちは、優秀なので教える事は、もうない。
これで戦いたまえ。

「幸福をあれ。」




NUCLEO-G071RBと完全に同じプログラム


```c++


//ssd1306_int_071_1

#include <Arduino.h>
#include <Wire.h>

void write_s(uint8_t *str1, uint8_t len1) {

  Wire.beginTransmission(   0x3c  );

  for (int ii = 0; ii < len1; ii++) {

    //一文字出力
    Wire.write(*str1 ++);

  }//for

  Wire.endTransmission();

}//eeprom_write_s

//初期化
void setup() {

  //I2Cの初期化
  Wire.begin(); //071
  delay(200);

  //0x80,0x8d,0x80,0x14,0x80,0xAF
  write_s( (uint8_t*) "\200\215\200\024\200\257", 6);
  delay(100);

}//setup

//無限ループ
void loop() {
}//loop




```
wordpress〜よく使うプラグイン編

wordpressのサイトを制作する上で使うプラグインをまとめました。

## 制作前に入れるプラグイン

### 現在表示されているテンプレートを確認する
**Show Current Template**
現在編集しているテンプレートはどこか確認するときに便利です。
https://wordpress.org/plugins/show-current-template/
![スクリーンショット 2022-10-06 9.22.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/717593/99450626-d869-55a4-3a5d-b3d6f0cf7046.png)


### Basic認証を設定する
**HTTP Auth**
https://ja.wordpress.org/plugins/http-auth/
ベーシック認証を設定し、非公開の状態でサイトを制作するときなどに使用します。

### 投稿の内容やテーマなど、移設するのに便利
**All-in-one wp migration**
https://ja.wordpress.org/plugins/all-in-one-wp-migration/

Localである程度制作したものを本番環境に移すときや、以前のサイトの中身を移設するのに便利です。
![スクリーンショット 2022-10-06 9.23.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/717593/c4a91f1a-44b7-cab3-f2c1-1b057dcbef24.png)


### 投稿の複製をする
**Duplicate Page**
https://ja.wordpress.org/plugins/duplicate-page/
投稿の内容を複製しテンプレートとして他の記事に反映させたいときに便利です。

## 制作中に入れるプラグイン

### パンクず
**Breadcrumb NavXT**
https://ja.wordpress.org/plugins/breadcrumb-navxt/
現在のページ位置をユーザーに表示する設定をするのに便利です。

### カスタム投稿タイプ作成
**Custom Post Type UI**
https://ja.wordpress.org/plugins/advanced-custom-fields/
カスタム投稿タイプを簡単に設定できます。

### カスタムフィールドの作成
**Advanced Custom Fields**
https://ja.wordpress.org/plugins/advanced-custom-fields/
![スクリーンショット 2022-10-06 9.25.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/717593/1ffd6efa-da14-3c9d-609d-d3e28e818c97.png)


### お問合せフォーム
**Contact Form 7**
https://ja.wordpress.org/plugins/contact-form-7/
メールチンプとの連携もできてカスタマイズしやすくて便利です。

### サイトセキュリティ
**siteguard**
https://ja.wordpress.org/plugins/siteguard
いろいろなセキュリティ対策が可能ですが、よく使うのは以下になります。
・wordpressの管理画面に入るのに際の、末尾の[wp-login.php]を変更
・パスワード以外の文字入力パスワードを設定
・ログインがあった場合の通知機能
・wordpressやプラグインなど更新通知機能
![スクリーンショット 2022-10-06 9.11.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/717593/9f843f14-2962-e4a7-e783-7badc7e33be4.png)


### インスタグラムのフィード表示
**instagram feed**
https://ja.wordpress.org/plugins/instagram-feed/
インスタグラムと連携し、ショートコードを貼り付けるとインスタグラムの投稿内容が表示されます。
PC/SPとカラム数を選べたりカスタマイズができます。
![スクリーンショット 2022-10-06 9.18.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/717593/932a372f-6666-ffd9-e2f3-445218c9f4f1.png)



### サイトのページや投稿記事をSNSでシェア
**AddToAny Share Buttons**
https://ja.wordpress.org/plugins/add-to-any/
各SNSでシェアするのに便利です。カスタマイズも可能です。
![スクリーンショット 2022-10-06 9.20.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/717593/b6502283-2ebb-0e7f-0754-8f60d19c50f4.png)


### サイトのSEO設定に便利です
**ALL in one SEO**
https://ja.wordpress.org/plugins/all-in-one-seo-pack/
OGP設定や投稿記事のSEO評価・アナリティクスとの連携など幅広い設定が可能です。
![スクリーンショット 2022-10-06 9.27.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/717593/bd54b236-3f09-b1d2-9733-5424cda2c24c.png)
情報処理安全確保支援士　平成28年秋期　午後Ⅰ

■問1（難易度：普通）
テーマ：IPsecを用いたVPN構築
【問われていること】
・インターネットVPN
　■IPsec-VPN：IPパケット（3層）を暗号化して通信する。この暗号化をカプセル化という。
  2つのモード
　トランスポート：VPN装置 to VPN装置。拠点の間をつなぐ。
　トンネル　　　：Host to Host。個々のコンピュータ同士をつなぐ。
どっちのモードでも同じだが、パケットを送る側が4層以下のデータを暗号化する。盗聴されても読み取れないというメリット（メリットと言うより、VPNの目的）がある。
　
　■TLS/SSL-VPN：TLS/SSLで通信で通信を確立して、暗号化＋認証を行うVPN
  2つの方式
　リバースプロキシ　　：Hoat to VPN装置 to 拠点内Webサーバなど。リバースプロキシサーバがVPN装置になる。
　L2フォワーディング ：(Host→無線LANのAP) to ルータ(L2) to VPN装置 to 拠点内Webサーバなど。L2ルータとVPN装置間でHTTPS通信しているVPN方式。

　■SSH：サーバ管理者向けで、通信を暗号化し、リモートアクセスする。
　PW方式と公開鍵の2種類の認証方式があるが、後者のほうが安全。
　ポートフォワーディング機能を利用して簡易VPNを構築できる。
　簡易VPNの概要は次のような感じ。
　　①SSHで通信を暗号化
　　②IPsecトンネルでゲートウェイに繋ぐ
　　③ゲートウェイのポートフォワーディング機能で対象サーバのポートまでたどり着く

・リモートアクセスVPN
　L2TP/IPsec ：L2TPパケットをESPによって暗号化して、IPsec-VPNの原理で送る方法。
　L2TPパケット：「社内LAN宛パケット」の中に「社内LANのサーバA宛パケット」が包括されたパケット

「IPsecのトンネルモード使えば、L2TP/IPsecなんていらんくね？」と思うが、違いはちゃんとある。
IPsecはユニキャスト通信。
L2TP/IPsecはブロードキャスト通信。
後者はDHCPで役立つ。社外に持ち出したPCにIPアドレスをDHCPで与えるときなど。

・SSHポートフォワーディング
　SSHサーバへの通信を指定したIPアドレス、ポート番号へ転送する仕組み。
　上記の機能を悪用して、OP25B対策をすり抜けることが可能。
　○　攻撃者(25へ) →FW(25はブロック)
　×　攻撃者(22へ) →FW(22なのでOK)  →ルータ(SSHポートフォワーディング) →メールサーバ(25)

・VPNを構築する際の鍵交換
　IKE(：Internet Key Exchange)：暗号通信やメッセージ認証に用いる共通鍵を取り決めるための鍵交換プロトコル。
　
・TCP Wrapper
　UNIX系OSにおいて、サーバプロセスごとに送信元IPアドレスによって接続制限を行う仕組み。
　/etc/host.allowファイル：接続許可するホスト
　/etc/host.denyファイル ：接続拒否するホスト
　↑のallowファイルに攻撃者のホストを登録するという攻撃は定番。

・サーバのなりすまし対策
なりすまし対策といえば、「ディジタル署名を付与する」が定番。
本問題では、ディジタル署名で利用する秘密鍵が全部同じというのがまずい。
全部同じだと、秘密鍵を所有するだれかまでは分かるが、一意のだれかが特定できない。
万が一、秘密鍵が漏れたら、攻撃者はそれを攻撃用端末にインストールする。その状態で攻撃者サーバから接続されても気づかない。

・ファームウェアの更新時の注意点
　一般的に出荷後の不具合を解消するため、組み込み機器のファームウェアは更新できるようにする。
■1：インターネット経由で更新する場合、正当なものかを判断しないといけない。
　そこで出てくるのがディジタル署名。
　プログラムにディジタル署名を付与することを「コードサイニング」という。

■2：ファームウェアに機密情報が直接組み込まれている（ハードコーディング）もの
　ファームウェア内に機密情報が含まれている事自体がおかしい。
　対策は、そもそもハードコーティングしないである。
【アジャイル】ストーリーポイントは工数と何がちがうのか

アジャイル開発における計画で重要な要素だと思うものに**ストーリーポイント**があります。

一般的な開発案件のスケジューリングにおいて、よく使われる単位は「人月」つまり**工数**です。

ではストーリーポイントと工数の違いはなんでしょうか。

この記事では、上記の違いをおさえながら、アジャイル開発における計画の強みを見てみようと思います。

## 工数は「どれくらいかかるか」を見積もる

ストーリーポイントと比較して工数の特徴を挙げるなら、**工数は「どれくらいかかるか」を見積もる**、と言えます。

「ある開発が完了するのに10人日かかる」「各開発人日を合計していくと、プロダクトは来年の3月にはリリースできそうだ」というのが、工数をつかった見積りです。

この見積りはシンプルでわかりやすそうな反面、弱点もあります。

それは**案件の持つさまざまな要素すべてを、工数にしか反映させられない**ということです。

この点を意識してストーリーポイントの特徴を見てみましょう。

## ストーリーポイントは「どれくらい大変か」を見積もる

ストーリーポイントも数値で表すため、工数の2Pカラーのような印象を受ける人もいるかもしれません。

しかしストーリーポイントは工数ではありません。ではストーリーポイントは何でしょうか。

**その正解はありません。**

> ストーリーポイントの数値は、ストーリー全体の規模をあらわす。**ストーリーの規模を定義するための数式は存在しない**。ストーリーポイントによる見積りが示す値は、フィーチャを実装するのに必要な作業、開発内容の複雑さ、開発に内在するリスクなどが渾然一体となったものである。[^1]

ストーリーポイントは規模をあらわすと表現されていますが、「規模」という定義自体よりも、**「規模」が工数以外の要素を含んでいる**ことが重要そうです。

自分なりに言い換えれば、**あらゆる要素を統合して「どれくらい大変か」を見積もるのがストーリーポイントの特徴である**、とまとめられます。

## あらゆる要素をストーリーポイントの見積り材料にする

上述の引用の通り、ストーリーポイントを見積もるには「どれくらいかかるか」ではなく、たとえば次の要素を踏まえて「どれくらい大変か」を考えます。

- このストーリーで必要な作業をかるくブレイクダウンすると、こんな感じになりそう
- ストーリーを完了するまでの作業のうち、よくわかっていないものが多い／少ない
- 実装関連の作業以外で、社内外のコミュニケーションやネゴシエーションが多い／少ない
- 絶対に失敗してはいけない／とりあえずやってみよう

このようなものを「工数」で測ることは難しいですが、ぜんぶまとめて「なんとなく何ポイントになるか」を考えることはできそうではないでしょうか。

## ストーリーポイントは期間を見積もれないのか？

ストーリーポイントは「どれくらい大変か」を見積もるもののため、工数とイコールで結びつくわけではありません。

そのかわりにストーリーポイントから工数を導出します。この「**導出**」が非常に重要です。

> このやり方が優れている点は、ストーリーポイントによって作業量の見積りと期間の見積りとを完全に分けて考えていることである。[...]両者を分けて考えることで、別々に見積もれるようになるのだ。[^2]

ここで利用されるのが**ベロシティ**です。ひとつのイテレーションでどれくらいの作業量がこなせるかわかれば、自然と期間も見積もれるだろう、という発想です。

言い換えれば、ひとつのイテレーションで「どれくらいの大変さを消化できるか」がわかるのがベロシティでしょう。ベロシティも同じく工数を測るものではない、というのが重要です。

## 結論

ストーリーポイントおよびベロシティを工数と違うものと理解して活用することができると、計画づくりが大きく変わってくると感じています。

もしストーリーポイントが「工数の言い換え」に近いものであったなら、ぜひこの記事を参照していただければ嬉しいです。

[^1]: マイク・コーン『アジャイルな見積りと計画づくり ～価値あるソフトウェアを育てる概念と技法～』、p62。

[^2]: 同、p66。
[UE5] カメラ距離でプレイヤーを透過する

1. まずエディタ上でマテリアルを複製して透過設定します。
2. 次にTherdParsonCharactorBPを開いて変数を２つ用意。
プレイヤーのマテリアル一覧と透過設定済みのマテリアル一覧の２つ。マテリアルをそれぞれ設定します。
3. 最後にEventTickからノードを伸ばします。
先ほど作った２つのマテリアルリストをカメラ距離で入れ替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105499/a1bdc34b-3668-e78e-a176-e37d23159b30.png)
参考元: https://blueprintue.com/blueprint/ekjxysa-/

ドラクエ１１っぽい切り替わりかたします。透過時にマテリアル同士が重なっちゃうけどいいよね(^з^) ～♪


参考にした記事:
https://historia.co.jp/archives/23521/
https://qiita.com/EGJ-Hiroyuki_Kobayashi/items/afea086b62d75d235593
Client Management with Financial Services Cloud  > Map Client Relationships

[Trailhead関係　個別の課題別](https://qiita.com/Keiji_otsubo/items/56eb7a90bb72138ece1f)

よく分からんエラーです。

:::note alert
Please reference ID: WCRKVUKK. Error: Restforce::ErrorCode::InvalidField. Message: INVALID_FIELD: Select Id FROM Account WHERE FirstName = 'Claire' AND LastName ^ ERROR at Row:1:Column:30 No such column 'FirstName' on entity 'Account'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.
:::


# 同じエラーの報告

+ [ Please reference ID: MODIHUNK. Error: Restforce::ErrorCode::InvalidField. Message: INVALID_FIELD: Select Id FROM Account WHERE FirstName = 'Claire' AND LastName ^ ERROR at Row:1:Column:30 No such column 'FirstName' on entity 'Account'. ](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000Fwz1zSAB)
+ [I am working Map Client Relationships FInancialforce Challenge. I got this error below. I have no idea of what that is. Please advise!](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S000009cSkISAU)
+ [Hi, I got that message after finish the challenge. But I cant understand what is the wrong thing I did. I did it correctly. This is the message.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000ECDjzSAH)
+ [I have completed all steps for the challenge on Map Client Relationships. How can I get the badge and move on to next module?](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000Fwz1zSAB)
+ [【解決】Error No Such Column FirstName](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Je07vSAB)
+ [【解決】Create a client and set up a household account](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgFdG)

:::note
first is that I put "CFO" in Title field and not Occupation field. 

Second is that I was working in the Financial dev org, but because I had opened it through my email upon verifying it was set up, I hadn't linked it to my Trailblazer account. 
:::


+ [Im having issues linking my Financial Service Cloud Free org to my Trailhead Account](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000Je7n0)

:::note
My FSC org was not linked to my trailhead account and it would not link, no matter what I tried. (New browser, incognito mode, new trailhead, etc.)
The only work around was signing up for a new FSC trial org and using 'India' as the country. '00000' for postal code. 
I was then able to easily link that org to my trailhead account. 

何故か、プレイグランドの障害が原因？
:::


# Manage Client Interactions

+ [Activity Icons Missing](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007akHEf)

:::note
Please check this article.

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000PelsXSAR

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ajpHaSAI
:::
Well-Architectedを再度学習して内容をまとめてみる(運用上の優秀性の柱)

# 内容
Well-Architectedで何を言っているのかを図解化、噛み砕いて説明する内容となっています。

# 資料

https://speakerdeck.com/toru_kubota/well-architected

```運用上の優秀性の柱```と```セキュリティの柱```についてまとめた資料になっていますが、今回は```運用上の優秀性の柱```について記載します。

# 「運用上の優秀性の柱」の概要
AWSの運用以外にも適用出来そうな素晴らしい```設計の原則```が５つあります。各柱の中にいくつか```定義```と言うトピックがあり、設計の原則を実現するために具体的に何をやれば良いかの記載があります。運用上の優秀性の柱の場合は```組織```、```準備```、```運用する```、```進歩する```が定義されているので具体的に解説していきます。

![スクリーンショット 2022-10-03 5.56.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/12f3e723-407a-269b-d509-325f12687fca.png)

# 組織
## 優先順位
組織の優先順位を明確に定義する必要があります。優先順位を付けないと運用するにもこれから何に力を入れて取り組んでいけば分からないためです。まず顧客ニーズがあり、制約条件を評価し、優先順位付を行なっていきます。例えばコンプライアンス要件（外部）の例としてクレジットカード業界であれば業界標準のPCIDSSに準拠するなどが挙げられます。内部環境、外部環境、機会、脅威を分析していくのでSWOT分析をやっている様な感じです。

![スクリーンショット 2022-10-03 5.56.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/6ce185a8-af43-5fe6-a9ac-f20ad1361732.png)

## 運用モデル
組織の優先順位が決まったら、それを実行していくためにどの様な組織体系が必要か考えていきます。まず```運用モデル2×2```というところで誰が何をやるかを定義したモデルがあります。これは```責任者の明確化```や```チーム間の関係```を理解するのに役立つものとして定義されています。
```関係性と所有性```という箇所では一番重要なのは<font color="Red">所有者・責任者を明確にする</font>というところです。最初は責任が曖昧な方が上手くいくパターンもあるかと思いますが、企業が成長期、成熟期と成長していく中で職務分掌などが規定されて明確になっていくと思います。

![スクリーンショット 2022-10-03 5.56.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/ea108e3f-4eeb-953d-8460-2718cc958e9f.png)

## 組織カルチャー
優先順位付でやることが決まって、運用モデルの箇所で誰が何をやるかも決まりました。あとは実施する組織、チームのパフォーマンスを最大限に発揮出来る組織文化が重要になってきます。組織として```推進```を行い、従業員に適切なリソースと```権限```を与え、積極的な```コミュニケーション```を取り、```スキルアップ```の機会が重要となります。

![スクリーンショット 2022-10-03 5.56.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/de4ff175-bc68-93b0-c0b1-f892affb64d7.png)

# 準備
テレメトリ設計、CI/CD構築、構成管理、運用手順整備などの運用設計のフェーズになります。
```テレメトリ設計```の箇所でCloudWatchでログたメトリクスを取得したり、X-Rayでアプリのトレースを取得します。その他VPC Flowlogsなどログの取得設定を行い、発生したイベントをEventBridge経由で対応を自動化します。```CI/CD```の箇所はコードシリーズ、```構成管理```はCFnなどを使います。ランブック・プレイブックは手順を準備する箇所になりますが、出来ればコード化して自動化を行います。

![スクリーンショット 2022-10-03 5.56.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/ed2e42ee-3cc5-5eca-8e5d-9790ec12e190.png)

# 運用する
運用は<font color="Red">ただ運用するのではなくKPIを定義して達成度を評価します。</font>KPIの例としては顧客満足度などが挙げられます。続いてKPIを評価するためのメトリクス（WEBページの応答率やエラー率など）を規定して、これらを定期的に評価して運用改善に役立てていきます。あとはイベントが発生した際にインシデント管理、問題管理など定められたプロセスに従って対応を行なっていきます。

![スクリーンショット 2022-10-03 5.56.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/c236aa6c-a70d-fc8a-8d6d-c7f650338ecf.png)

# 進歩する
進歩するは時間をかけて改善する連続的なサイクルです。学習の箇所は```障害振り返り```、```ポストモーテム```など言い方は色々ありますが、発生した事象をしっかり分析していくことが重要です。また定期的な運用レビューも重要となります。共有の箇所では教訓として文章化、ナレッジ化を行い組織内に共有します。改善の箇所は継続的に改善するプロセスを持つことが重要になってきます。

![スクリーンショット 2022-10-03 5.56.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/0b938494-6fa6-c5c7-a440-2e8dc3d14be7.png)

# まとめ
運用上の優秀性の柱の定義で実際に何をやっていけば良いかをまとめたものになります。

![スクリーンショット 2022-10-03 5.56.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/ea6ef922-d7cb-1ee2-6995-edde42b60bf4.png)
ROW-Level Formulaを使う

大体は数式フィールドを追加してもできるのですが、なるベくレポートだけでやってみたいと思います。

+ [取引時間をグループ化したい](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000JdzUeSAJ)
しかし、質問者さんは気に入らなかったようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a7b402c4-b9d5-e5b5-d8e5-188b9a75188a.png)

+ [Summary level formula for SUM(Picklist Field values)](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000K0y8FSAR)

選択リストは数値でないので変換する必要がありますが、ROW-Level Formulaで可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/88c3c64d-f488-32bb-0ba3-654c3a0c79dd.png)


```
IF(ISBLANK(TEXT(Case.Work_Duration__c)), 0 ,VALUE(TEXT(Case.Work_Duration__c )))
```


+ [商談所有者と アカウント所有者の間の不一致をレポート自体に表示する方法](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Yvua3)

:::note
Create a Row-Level Formula Column that compares opportunity owners to account owners.
Use that Row-Level Formula Column as a filter condition.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/cf003f71-b07e-7dfa-418c-934a6c225c39.png)

:::

# 事例

+ [Summary formula on Report](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ajMLy)

:::note
If you create a Row-Level Formula Column like the following, it will be 1 if there is a date.
Therefore, you can count the number of items by summing this column.
 
```
IF(ISBLANK(Account.SLAExpirationDate__c),0,1)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/414aa4c9-9f6e-6106-77fb-92fa6daf882b.png)
:::
LPC812の素にLチカを書き込む(2) 回路図 回路 LPC812M101JD20



x mbed2リビジョン144
x リビジョンを変更できる人むけ

x 遊び方のルールーとして書き終わったらPIОO_12を外す

x LPC812M101JD20 の　事を　LPC812と呼ぶ　検索する時は、必ずLPC812
x LPC812M101JD20 と　検索しても販売の広告しか出てこない

x 4C以外があるらしい

目的
秋月で売っている素のLPC812に書き込んで遊ぶ



前の記事


https://qiita.com/caa45040/items/0b8aa2594d1f96ba2115


LPC812 circuit


![o_con847.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/719f35a8-51b4-317b-dd34-bb787c562ad4.jpeg)


![o_con833.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/c5f17bd3-2fab-6168-76a1-aa7f70b32c70.jpeg)
docker execコマンドでbashに入れない時の対処法

# エラー内容

- コマンド
```
docker exec -it [コンテナ名] /bin/bash
```

- 実行例
```
OCI runtime exec failed: exec failed: unable to start container process: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown
```

# 解決策
以下コマンドに置き換える

```
docker exec -it [コンテナ名] sh
```

または

```
docker exec -it [コンテナ名] /bin/sh
```