OmniAICreator/Qiita-1.07M huggingface dataset:
【Git】導入・基本概念

## はじめに
Gitを独学した際に、色々理解に苦しんだ部分があったので、自分の知識整理のためでもありこの記事を書いてみました。
対象：エンジニア成り立ての方、Gitに興味がある初心者

## Gitとは
チームで複数の人がWordやPPTを編集する際に、自分が編集した内容が急に消えたりしませんか？　他の人が同じ場所を編集した場合、一番新しい編集が保存されるからです。
もちろん自分のファイルをコピーし、複数のファイルを作成してもよいですが、開発の場合は大量なファイルがあります。大量なファイルを統合し一つのバージョンとして管理、複数の人が編集しやすいために作り上げたツールです。
![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726265/88511624-a020-b9c6-0a65-92147b1cbd99.png)
## 準備 

  **Step 1:** install git 

https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

`git --version`　Gitのバージョンを確認できます

**Step 2:** `git config —global user.name` “Username” 
**Step 3:** `git config —global user.email` User　mail address

`git config --list` 
あるいは`git config user.name`と`git config user.email` で
入力したUsernameとUser　mail addressなどを確認する


```
出力例：
user.name = hogehoge
user.email = hogehoge@gmail.com
```

**Step 4:** `git init`を実行し、初期化する

## 基本操作

Gitの中には大きく分けると三つのエリア（Working Directory・Staging　Area(index)・Repository(HEAD)）。
図では４つのエリアに分けましたが、、実際使う際に主に３つと考えていれば問題ないです。ここで４つに分ける理由は`git push`、`git fetch`を理解しやくするためです。また、個人的に`git pull`と`git push`は反対行動だと連想してしまいましたが、実際`git pull`に`git fetch`、`git merge`二つの行動が含まれています。`git push`と`git fetch`が反対行動だと理解した方がいいかもしれないです。![スクリーンショット 2022-07-27 9.00.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726265/4d8cfa23-6830-d641-48dd-990572bf2172.png)

|コマンド|実行内容|
| ---- | ---- |
|`git add`|Workingにある内容をStaging Areaに渡す（リモートに保存したいファイルを選択する）|
|`git commit`|Staging AreaにあるものをRepositoryに渡す（リモートに保存したいファイルをローカルに一旦保存し、変更や追加内容を簡単に記述する）|
|`git push`|Local Repositoryの変更内容をRemote Repositoryに送信する|
|`git fetch`　|Remote Repositoryを取得する|
|`git reset HEAD`|でRepositoryからStageに戻すことができる|
|`git checkout`|でStaging AreaからWorkingに戻すことができる|

## 終わりに
基礎知識がなくてもGitも使えますが、個人的にコマンドの意味を一つ一つ理解しないと使いにくいタイプの人なので、もし同じ方がいれば、力になれると嬉しいです。

## 参考記事
https://www.youtube.com/watch?v=zD_SWnK6NaQ

https://atmarkit.itmedia.co.jp/ait/articles/2005/08/news017.html

https://www.masatom.in/pukiwiki/GitHub/%25A5%25ED%25A1%25BC%25A5%25AB%25A5%25EB%25A1%25A6%25A5%25EA%25A5%25E2%25A1%25BC%25A5%25C8%25A5%25D6%25A5%25E9%25A5%25F3%25A5%25C1%25A4%25C8origin%25A4%25CE%25A4%25CF%25A4%25CA%25A4%25B7/
Ubuntu 22.04 on WSL 初回セットアップ

やったこと自分用メモ

* [参考](https://level69.net/archives/30464)

# インストール

* Microsoft Storeから "Ubuntu22.04 LTS" をインストール
* 起動直後にGUIが起動するのでユーザ名とパスワードを入力してセットアップ
* 初回インストール後にプリインしてあるパッケージのアップデートを行う

```bash
$ sudo apt update
$ sudo apt upgrade
```

* アップデート後にいくつかWSL固有のエラーが出る

```bash
No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
```

* 以下のコマンドを実行する

```bash
$ sudo apt purge needrestart
$ sudo apt autoremove
```
【Visual Studio】ショートカットキーの割り当てをVS Codeに合わせる

# やりたいこと
Visual Studioでは既定のキーバインドがVS Codeと異なる。
VS CodeのショートカットキーをVisual Studioに適用したい。

#### 環境：
- Windows 10
- Microsoft Visual Studio Community 17.2.3

# 方法
1. Visual Studioを開く
2. 上部メニューバー： [ツール]→[オプション]
3. 左側メニュー：[環境]→[キーボード]
4. "次の追加キーボードマップスキームを適用"：[Visual Studio Code] を選択
5. [OK]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2608203/ff358307-086c-18db-0666-6d982bc7ddf3.png)
コンパイルしてから考える

C++N4910 AdventCalendar2022 DoCAP coding 小川メソッド 

https://qiita.com/kaizen_nagoya/items/dd2a912f23b18e0f8893

programming like making a poem.

https://qiita.com/kaizen_nagoya/items/07ed8747f0811d070070

書いてどうする。
コンパイルしてから考える。

コンパイルエラーが出る。

どうする。

# コメントにする

書いたけど、どう直せばいいかわからないところは、ひとまず//コメントにしておく。

他のコンパイルエラーへの影響があるかないかを確かめるため。

もともと、他の人のプログラムでもコメントとして書いてあったものをコピペした際に、コメントになっていなかったりすることがある。
/* */ コメントの途中の行だけコピペしてきて、そこはコメントだっていうこともある。


# ;をつける。

何か、関係のない行が、他の行に影響を与えているかもしれない。

コメントにしなくても、なんとなく;さえつければよさそうな場合は、
コメントにするのではなく、;をつける。

# コンパイルエラーの記述を読む

あ、最初にコンパイルエラーの記述は読んでいます。

上の２つは直感的に手がうごいてしまい、
どういうエラーだったか記憶にない。そのうち、ちゃんと記録します。

## 文字系　（C,C++の場合）
それぞれの言語で変数名、関数名として扱えない文字がある。

### 文字　- ハイフン
例えば、C言語であれば-。
a - b と書けば、aという変数からbという変数を引こうとする。
a-bだと、場合によっては文字列に扱えない文字を使っていると判定するかもしれない。

うーん。むっちゃ記憶あいまい。あとで調べて追記します。

### 文字　. ピリオド
文の最後に. があるとき、これは;の間違いか、コメント行か、なにか行が分断しているか。


### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
Linuxについて８（自分用メモ


コマンドを入力を受け付け、適切な処理をして結果を表示しているプログラムのことをシェルという。
シェルプログラムにはいくつか種類があるが、Linuxで標準的に利用されているのはbashというシェル。

シェルの確認コマンド
ps

システムで利用可能なシェルは　/etc/shellsファイルで確認できる

●標準入出力
Linuxで実行されるプログラムはデフォルトで、標準入力、標準出力、標準エラー出力の３つ。

●リダイレクト
リダイレクトを使うと、コマンドの標準出力を端末画面ではなく、任意のファイルに切り替えることができる。

コマンド　>　ファイル名
例）date > today
dateコマンドの出力をtodayファイルにリダイレクトしている。todayファイルが存在しない場合は、ファイルが新しく作られる。

※「>」を使ったリダイレクトはファイル内容を上書きしてしまう。上書きではなく、ファイルの末尾に追記する場合は「>>」を使う、
※エラーメッセージは標準出力ではなく、標準エラー出力に出力される。標準エラー出力にリダイレクトするには「2>」もしくは「2>>」を使う。

●|（パイプ）
パイプ「|」を使うと、あるコマンドの実行結果を別のコマンドで処理することができる。lessコマンドで表示するときによく使われる。
コマンド　|　コマンド

●メタキャラクタ
シェルにとって特別な意味を持つ文字をメタキャラクタという。
*　０文字以上の任意の文字列
?　任意の１文字
[]　[]内の任意の１文字
\　メタキャラクタの打ち消し


・historyコマンドを実行するとコマン履歴の一覧を表示できる。「!履歴番号」を実行すると、指定した履歴番号のコマンドが再度実行される。

●エイリアス（コマンドの別名をつける）
alias ［別名[=コマンド]]

例）alias la=’ls -la’
これで、laコマンドを実行すると「ls -la」コマンドが実行される様になる。

例２）alias lsl=‘ls -l | less’
これで「ls -l」の実行結果をlessコマンドで実行するというエイリアスを設定できる。


※エイリアスを使用する場合、スペースを含む文字列には引用符（’’）で囲む必要がある。
※ダブルクォーテーション（””）で囲むと、変数に設定した値が展開されてしまうので注意。
※スペースの直前に「\」を置く方法もある（エスケープシーケンス）。
例）alias la=ls\　-la

●変数の設定
var=Linux

※「=」も前後にスペースを入れない。
※変数名は大文字、小文字が区別される。

●変数の内容表示
echo $var（変数名）

※変数名には「$」をつける
※変数の内容はシェルが終了すると失われる。また、変数の有効範囲は変数を設定したシェルの中だけ。

●シェル変数と環境変数
１つのシェルの中だけで使える変数をシェル変数といい、設定したシェルと、そのシェル上で起動したシェルや実行したコマンドでも使える変数を環境変数という。

●環境変数の設定
export ［変数名[=値]］

●設定している環境変数を表示
printenv

●設定されているシェル変数と環境変数を全て表示
set

●シェルスクリプト
一連のコマンドを自動化できる。シェルスクリプトのファイル名は「.sh」となる。

「#」という記号があると　、そこから右側はコメントとみなされる。

●シェルスクリプトの実行
・bash シェルスクリプトファイル名.sh
・source シェルスクリプト名.sh

sourceコマンドでは、元のシェル（sourceコマンドで実行したシェル）のシェル変数をシェルスクリプト内で参照できる。また、シェルスクリプト内でシェル変数を操作すると、それが元のシェルに反映される。

・シェルスクリプトに実行権を設定し、シェルスクリプトのパスを指定する方法もある。
その場合はカレントディレクトリを明示して実行する必要がある。
./シェルスクリプトファイル名
エンジニアが年収・給与・報酬を上げるための意識と行動（まとめ）


### 転職経験なしは自己のスキルポータビリティーを欠如させる
どこに行ってもオーバーヘッドを短く短期間で新しい現場やプロジェクトで活躍できるスキルのポータビリティは重要。

### 技術・報酬が頭打ちになったら次の活躍の場を探す
職場や案件に留まる理由を無理やり探さない。安定した職場で何年も働き続ける中で気づかないうちに自分の年収がマーケットバリューから乖離して低く抑えられている場合がある。（特に後から入社配属される人材の報酬のほうが今までの人材よりも高い傾向にある成長中の組織の場合）

### 報酬アップ交渉も仕事のうちと認識しておく
キャリアを重ねるうちに単なる技術のみの仕事から範囲を広げ、様々な場面での交渉力や説得力も仕事の能力として重要性を増す。報酬や職位の交渉の手を抜くことは仕事を半分していないと同じ。

### 転職や案件への応募の際、募集条件に完全にマッチしてなくても良い
募集する側もそもそも完全に条件にマッチする候補者を探す方が難しい。代わりに関連ある経験、活かせる経験をアピールする。自分が採用する側だったらいくつのスキル条件を満たしているかよりもエンジニアセンスや適性の方を重視する。

### 新しい技術は新しい現場に入ってから習得でも良い
エンジニアセンスに磨きをかけ、[新技術習得のツボを普段から習得](https://qiita.com/KatsuShin/items/e9e8f04fa78562f6fad0)しておく。

### 英語力×エンジニアスキルで希少性の高さを獲得する
英語力が求められる案件は報酬水準が高い。円安のせいもあり日本の報酬水準が低く止まっている。世界のエンジニアと同じチームで働くことにより世界の報酬水準についていく機会を得ることにもつながる。

### すぐに転職を考えてなくてもたまにはキャリアコンサルとカジュアルトークの機会を持つ
キャリアの健康診断のような効果が期待できる。
ただしキャリアコンサルタントも仕事なので安易な転職機会に飛びつくことは避ける。マーケットから求められるスキル需要など目的を持って聞きたいことを自ら質問する。

また、どこかに応募してみることで人材マーケットから求められる能力やスキルの把握につながり、普段の働き方や意識の持ち方も変わる。

### 転職、案件獲得のための条件を自分からエージェントに事前に提示しておく

自分の希望条件（技術ジャンル、報酬）にマッチする転職先や案件がある場合エージェントから提案してもらうよう事前に伝えておく。
自分の人材価値が高い場合に通用する方法。

### 報酬が高い業務形態、契約形態、技術ジャンル、ビジネスジャンルを普段からウォッチして把握しておく

年代により身につけるべき技術も異なる。
業界や職種により報酬水準も異なる。
今習得すべき技術ジャンル、今後のキャリアプラン考察のためにも常に動向を把握しておく。

## 別の視点・留意事項
キャリアの若いうちは自己の成長に注力・投資すべきです。報酬よりも長いキャリアにおける自己のスキルアップのための投資期間と考えましょう。
キャリアを積みながら徐々に報酬への重きを置いていくで良いと思います。

## この記事を執筆した目的
日本のIT人材の流動性が高まり、報酬水準が上がり、優秀な人材が集まってくる業界になればと願ってこの記事を執筆してみました。
世界に遅れをとってしまったと言われる日本ITですが、日本のITの底上げと、日本のITの底上げにより日本の世界の中での競争力やプレゼンスのアップに繋がればと思います。
g++ ありがたいこと

g++ でありがたいことがある。

コンパイルすると、includeファイルが足りないと、候補を示してくれる。

これむっちゃ助かる。

22.6.3.7 Swap [variant.swap] C++N4910:2022 (567) p707a.cpp

https://qiita.com/kaizen_nagoya/items/994ca221264063805056


```ubuntu:bash
$ g++ p707a.cpp -std=2b -o p707ag -I. -Wall
p707a.cpp:28:162: error: too many decimal points in number
   28 | onstructible_v<Ti> is true for all i. Preconditions: Lvalues of type Ti are swappable (16.4.4.3).
      |                                                                                        ^~~~~~~~

p707a.cpp:28:16: error: variable or field 'swap' declared void
   28 | constexpr void swap(variant& rhs) noexcept(see below); Mandates: is_move_constructible_v<Ti> is true for all i. Preconditions: Lvalues of type Ti are swappable (16.4.4.3).
      |                ^~~~
p707a.cpp:28:21: error: 'variant' was not declared in this scope
   28 | constexpr void swap(variant& rhs) noexcept(see below); Mandates: is_move_constructible_v<Ti> is true for all i. Preconditions: Lvalues of type Ti are swappable (16.4.4.3).
      |                     ^~~~~~~
p707a.cpp:23:1: note: 'std::variant' is defined in header '<variant>'; did you forget to '#include <variant>'?
   22 | #include <memory>
  +++ |+#include <variant>
   23 | #include <typeinfo>
p707a.cpp:28:30: error: 'rhs' was not declared in this scope
   28 | constexpr void swap(variant& rhs) noexcept(see below); Mandates: is_move_constructible_v<Ti> is true for all i. Preconditions: Lvalues of type Ti are swappable (16.4.4.3).
      |                              ^~~
p707a.cpp:28:64: error: found ':' in nested-name-specifier, expected '::'
   28 | constexpr void swap(variant& rhs) noexcept(see below); Mandates: is_move_constructible_v<Ti> is true for all i. Preconditions: Lvalues of type Ti are swappable (16.4.4.3).
      |                                                                ^
      |                                                                ::
p707a.cpp:28:56: error: 'Mandates' does not name a type
   28 | constexpr void swap(variant& rhs) noexcept(see below); Mandates: is_move_constructible_v<Ti> is true for all i. Preconditions: Lvalues of type Ti are swappable (16.4.4.3).
      |       
```
[ServiceNow] テーブルの選択肢を修正する場合の注意点

## 事象
２つの更新セットで同時に同じフィールドの選択肢を追加・変更しようとする場合、行単位ではなく選択肢すべてが更新セットに含まれてしまいます。

## 確認したバージョン
San Diego（それ以前も同じ）

## 解決策
更新セットからChoice listの更新を削除し、sys_choiceテーブルのレコードをXMLで別の環境に移送する。
![Export_to_xml.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/08a6879b-21d3-cc83-518c-1be4bde9498d.png)


## 発生手順（例）
インシデントのカテゴリに「要望」を追加する更新セットと、OOTBのカテゴリ「SD WAN」と「クラウド管理」を非表示にする更新セットを作成します。
![Incident_Category.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/9e28a8c3-9bd6-f7fb-d4cc-6707e1cb0e30.png)


１. カテゴリ追加の更新セットを作成し、「要望」カテゴリを追加します。
![Create_New_Update_Set_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/5c003a8d-75cf-d9eb-58d4-347358ddac3f.jpeg)

![Add_New_Category.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/12c49a20-458c-e453-db9b-7924d6d0bba5.png)

２. 新しい更新セットを作成し、「SD WAN」と「クラウド管理」を非表示にします。
![Create_New_Update_Set_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/c5cd7bcd-3544-3648-123b-6e53df79595e.png)

![Disable_category.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/d5f0a95a-743b-5a61-4e10-123b94c201ae.png)

３. ２の更新セットのレコードを確認すると、「要望」のレコード追加も含まれています。
　　そのため、更新セットのリリースタイミングが前後するとバグやデグレが起きてしまいます。
![Show_update_set_list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/94b625fc-f0ef-0690-3101-da737fdb9d0e.png)
 
![Open_update_record.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/8bdb3c47-698a-3fb8-9363-b2b68c75218b.png)


## 補足
[Add to Update Set Utility](https://developer.servicenow.com/connect.do#!/share/contents/9824957_add_to_update_set_utility?v=7.3&t=PRODUCT_DETAILS)を利用すると、レコードを更新セットに追加することが可能です。
【備忘録】wgetでつながらないのにcurlではつながる（再掲）

（昔別アカウントで書いていた記事の移行です）

# 事象
localにtomcatを立ち上げてwgetでアクセスしたらつながらない。
試しにcurlでアクセスしたらつながる。
同じアクセス先なのになぜだろう。

# 原因
wgetにはプロキシ経由でアクセスする設定があるらしく、それが有効になっていた。

```
[ファイル]
/etc/wgetrc

[該当設定]
http_proxy=http://proxy.xxx.xxx:pp/
https_proxy=http://proxy.xxx.xxx:pp/

```

# 感想
今まで好みでwgetを使用していたが、調べてみるとcurlとwgetで差分がけっこうある。
そこら辺については他にまとめている方がいるので割愛。
商談でアップロードしたファイル（PDF、エクセルなど）を自動的に指定ライブラリに格納する方法


[元の質問](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000IS8u2)

以下のようなコードで可能かと思う。

```
trigger createContentDocumentLink on ContentDocument (After insert,after update ,after delete) {
    
    Set<Id> ContentDocumentIdSet = new Set<Id>();  
    if (Trigger.isInsert || Trigger.isUpdate) {
        for (ContentDocument cd : Trigger.new){
            ContentDocumentIdSet.Add(cd.Id);
        }
    }
    
    //if (Trigger.isDelete || Trigger.isUpdate) {
    //    for (ContentDocument cd : Trigger.old){
    //        ContentDocumentIdSet.Add(cd.Id);
    //    }
    //}
    
    List<ContentDocumentLink> cdlList = [SELECT Id,ContentDocumentId,LinkedEntityId FROM ContentDocumentLink WHERE ContentDocumentId =: ContentDocumentIdSet];
    
    List<ContentWorkspaceDoc> insert_cwkList = new List<ContentWorkspaceDoc>();
    for (ContentDocumentLink cdl : cdlList){
        String LinkedEntityId = cdl.LinkedEntityId;
        if (LinkedEntityId.left(3) == '006'){
            //ここで　ContentWorkspaceDocを割り振るロジックが必要です。
            ContentWorkspaceDoc cwk = new ContentWorkspaceDoc();
            cwk.ContentDocumentId = cdl.ContentDocumentId;
            cwk.ContentWorkspaceId = 'x123456789012345678';//最終的にIdをセットできればいいと思います。
            insert_cwkList.add(cwk);
        }
    }
    if (insert_cwkList.size() > 0) insert insert_cwkList;

}
```
【備忘録】rsyslogの出力が止まった時の対応（再掲）

（昔別アカウントで書いていた記事の移行です）

# 環境
CentOS Linux release 7.3.1611 (Core)
systemd 219
rsyslog 7.4.7-16.el7

# 事象

rsyslogによるログ出力が一部止まった。

#やったこと

rsyslogをデバッグ実行すると下記が出力されていた。

```

/usr/sbin/rsyslogd -n -d

　7204.120717564:7fc48c3df780: Called LogError, msg: warning: ~ action is deprecated, consider using the 'stop' statement instead

```

/etc/rsyslog.d/21-cloudinit.confに~が書かれていることが問題らしいので、修正した。


（変更前）

```

# comment out the following line to allow CLOUDINIT messages through.
# Doing so means you'll also get CLOUDINIT messages in /var/log/syslog
& ~

```

（変更後）

```
# comment out the following line to allow CLOUDINIT messages through.
# Doing so means you'll also get CLOUDINIT messages in /var/log/syslog
& stop
```

状況変わらず。
/var/log/messagesを見るとjournaldがなんか駄目になっているっぽい

```
systemd: Starting Cleanup of Temporary Directories...
systemd-tmpfiles: [/usr/lib/tmpfiles.d/systemd.conf:26] Failed to replace specifiers: /run/log/journal/%m
systemd-tmpfiles: [/usr/lib/tmpfiles.d/systemd.conf:28] Failed to replace specifiers: /run/log/journal/%m
systemd-tmpfiles: [/usr/lib/tmpfiles.d/systemd.conf:29] Failed to replace specifiers: /run/log/journal/%m
systemd-tmpfiles: [/usr/lib/tmpfiles.d/systemd.conf:32] Failed to replace specifiers: /var/log/journal/%m
systemd-tmpfiles: [/usr/lib/tmpfiles.d/systemd.conf:34] Failed to replace specifiers: /var/log/journal/%m
systemd-tmpfiles: [/usr/lib/tmpfiles.d/systemd.conf:35] Failed to replace specifiers: /var/log/journal/%m
systemd: systemd-tmpfiles-clean.service: main process exited, code=exited, status=1/FAILURE
systemd: Failed to start Cleanup of Temporary Directories.
systemd: Unit systemd-tmpfiles-clean.service entered failed state.
systemd: systemd-tmpfiles-clean.service failed.

```

試しにjournaldを再起動してみると、起動しなくなった。。。
systemdでなくコマンドで起動してみると下記が出力された。

```

/usr/lib/systemd/systemd-journald
 Failed to get machine id: No such file or directory

```

machine idなんて知らんので、調べてみると/etc/machine-idというファイルが原因らしい。
なので、systemd-machine-id-setup実行しサーバrebootを実行。

直った。

#感想

サーバはVMコピーで用意してもらったものなので、ここまで不具合があるものかと思いつつ、
知らないことが多々あったので面白かった。
結局何が根本原因だったのかはこれから調べる予定。
【備忘録】ApacheのBalancer-Managerについて

（昔別アカウントで書いていた記事の移行です）

# BalancerMemberの設定について
設定の仕方は

```
<Proxy balancer://api-balancer/>
    BalancerMember 振り分け先 (オプション)
</Proxy>

```

オプションについて

|設定値  |説明  |
|---|---|
|loadfactor |振り分けるサーバの重み付け。数字が大きい方が優先度が大きい。  |
|timeout/connectiontimeout  |接続タイムアウト時間（秒） |
|retry|接続出来なかった際の切り離し時間（秒）。この時間が経過すると再度振り分け対象になる。|
【備忘録】seleniumとchromedriver-binaryのインストール手順

```
# vi /etc/yum.repos.d/google.chrome.repo
```

⇒下記を記入
```
==================================
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
==================================
```

```
# yum -y install google-chrome-stable
# google-chrome --version
⇒下記が表示されること（バージョンは差異あり）
Google Chrome 84.0.4147.125
# yum -y install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fon ts ipa-pmincho-fonts
# yum -y install python3
# pip3 install selenium
# pip3 install chromedriver-binary
```


おまけ
簡単なプログラム
```

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument("--no-sandbox")
driver = webdriver.Chrome('/usr/local/bin/chromedriver', chrome_options=options)
driver.get('https://www.yahoo.co.jp/')
driver.quit()

```
作業改善

C++N4910コンパイル実験で、
ソースコードの部品のコンパイル試験を実施していて、
PDFから持って来る時に開業が抜けて、コメントの後ろについたままのことがある。

C++で一番困るのが、template。

よく考えたら、grepすればわかるじゃん。

```macOS:bash
# grep template p706.cpp
template<class T, class... Args> constexpr T& emplace(Args&&... args);
template<class T, class U, class... Args>
// where I is the zero-based index of T in Types. template<size_t I, class... Args>
template<size_t I, class U, class... Args>
```

コメント行にtemplateの文字列があったら、説明文か実行分かを判定すればよい。

特に、今回の作業では、実行可能な説明文はコンパイルするようにしている。
Pythonが嫌いなのでC++版のPytorchで画像認識をやってみる 2日目

# ニューラルネットワークを移植する
Libtorchのコンパイルとリンキングが上手くいったので、Pytorchのニューラルネットワークを移植してみる。
↓こんなやつ。
```
class Net(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = torch.nn.Conv2d(1, 6, 5)
        self.pool = torch.nn.MaxPool2d(2, 2)
        self.conv2 = torch.nn.Conv2d(6, 16, 5)
        self.fc1 = torch.nn.Linear(16 * 16, 64)
        self.fc2 = torch.nn.Linear(64, 10)
    def forward(self, x):
        x = self.conv1(x)
        x = torch.nn.functional.relu(x)
        x = self.pool(x)
        x = self.conv2(x)
        x = self.pool(x)
        x = x.reshape(-1, 16 * 16)
        x = self.fc1(x)
        x = torch.nn.functional.relu(x)
        x = self.fc2(x)
        return x
```
なんとなく分かるけど、コピペでコンパイルしてポンというわけには行かなさそう。defが関数宣言なのは昭和のおじさんでも知っている。それにしてもメンバ変数の宣言が無いのはどういうことなのか?

# Pythonを読む
とにかく1行ずつ読んでみる。
```
class Net(torch.nn.Module):
```
↑クラス宣言のようだ。torch.nn.Moduleは親クラスらしい。
```
def __init__(self):
```
↑コンストラクタの宣言か。selfってなに?
```
super().__init__()
```
↑superってなんやねん?　Google先生によると親クラスのコンストラクタを呼んでいるらしい。引数が無いことろを見るとデフォルトコンストラクタか。

```
self.conv1 = torch.nn.Conv2d(1, 6, 5)
```
↑変数宣言が無いのに、いきなり代入式が。なんやねん意味わからん腹立つ。指示器無しで前に割り込みされたような不快さだ。コンストラクタの中で変数宣言しておくと、自動的にクラスのスコープで使える?と勝手に解釈。
torch.nn.Conv2d()はクラスのコンストラクタらしい。ということはconv1の型指定はtorch::nn::Conv2dクラスを指定すればいいと言う事かな。
```
def forward(self, x):
```
↑メンバ関数らしい。だからselfってなんやねん。いちいち引数に入れるんか。selfを自クラスを現すポインタみたいなもの? C++のthisみたいなものと勝手に解釈。xって何? 
```
        x = self.conv1(x)
        x = torch.nn.functional.relu(x)
        x = self.pool(x)
        x = self.conv2(x)
        x = self.pool(x)
        x = x.reshape(-1, 16 * 16)
        x = self.fc1(x)
        x = torch.nn.functional.relu(x)
        x = self.fc2(x)
```
↑xの型が不明だが、テンソルか何かを含む構造体なのだろう。各行で行列演算してxに格納するらしい。
```
return x
```
↑まあ、これは分かる。

# C++に置き換える
まあC++には変換できそうな感じ。クラスとコンストラクタの部分をC++に置き換える。とりあえず全部public。↓
```
//C++
class Net : torch::nn::Module
{
    public:
    torch::nn::Conv2d conv1;
    torch::nn::MaxPool2d pool;
    torch::nn::Conv2d conv2;
    torch::nn::Linear fc1;
    torch::nn::Linear fc2;

    Net();
};

Net::Net()
{
    torch::nn::Module();
    conv1 = torch::nn::Conv2d(1, 6, 5);
    pool = torch::nn::MaxPool2d(2, 2);
    conv2 = torch::nn::Conv2d(6, 16, 5);
    fc1 = torch::nn::Linear(16 * 16, 64);
    fc2 = torch::nn::Linear(64, 10);
}
```
文法エラーは出てこない。コンパイルしてみる。
エラー C2338がでる。[IDEのリンク先](https://docs.microsoft.com/ja-jp/cpp/error-messages/compiler-errors-1/compiler-error-c2338?f1url=%3FappId%3DDev16IDEF1%26l%3DJA-JP%26k%3Dk(C2338)%26rd%3Dtrue&view=msvc-170)を見ても良く分からない。よくあるマイクロソフトの斜め上な解説。チンプンカンプン。厳密にはエラーではなくワーニングのようだが致命的とある。
気を取り直してIDEの英語のエラーメッセージをよく読む。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464633/b1491bf8-b3d9-790e-6c3f-0375e9811ff2.png)
↑no default constructorとある。ははーん、おそらく親クラスかメンバ変数の中にテンプレート宣言か何かがあってインスタンス生成時に明示的にコンストラクタを呼ぶ必要があるのだろう。要するに動的メモリ確保すればいいわけだ。

今日はここまで
つづく

https://qiita.com/pipimaru1/items/3a365192f46da084dcf9
FlutterでTextField(TextFormField)を使うと、大量に再描画される

## 概要
TextFieldもしくはTextFormFieldを設置すると、大量(数十回)に再描写(build)される
※厳密には、MaterialPageRouteでpush(遷移)した先に、TextFieldを設置すると、同現象が発生する

この現象により、FutureBuilderやStreamBuilderと組み合わせると
「TextFieldが更新(focusやchange)される→再描画が走る→Future/StreamBuilderが走る」というループで、永遠にTextFieldへの入力が出来なかったりする。


## サンプル
```dart
// 遷移元
Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => Page())
);

// 遷移先
class Page extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: TextField(
        // このテキストフィールドがあると大量に再描画(rebuild)される
      ),
    );
  }
}
```

## 対応方法
### pushする直前にViewをインスタンス化する
通常、このように遷移するが
```dart
Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => Page())
);
```
↓ こうする
```dart
final page = Page();  // インスタンス化
Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => page)
);
```
こうする事で、遷移先のPageに設置したtextFieldにfocusが当たっても大量のrebuildが走らなくなる

## 参考
Opening or closing a TextField causes MaterialPageRoute to rebuild the page #37878
https://github.com/flutter/flutter/issues/37878
新規プロジェクトに参画して実践していたこと


# はじめに

自分自身の経験から業務についていくためにやったことを振り返ってみました。
これからプロジェクトに参画する方の参考に少しでもなりましたら幸いです。

※個別具体的な内容ではないため、かなり一般的になります。実践している方からすれば「当たり前だ馬鹿野郎」と言われてしまう内容となってしまいます。ご了承ください。


# 対象

新規プロジェクトに参画して間もない方、特に業務未経験でに参画したばかりの方


# とにかく資料を読む

とにもかくにも資料を読みまくることが大切です。
特に以下の資料をよく読んでおくことが肝だと思っています。

繰り返しになりますが当たり前のことでありますが、未経験で働き始める方は特に大切です。


１　設計書

自分が参画するシステムがどのような仕組みでどのように運用されているのか把握することは大切です。
オンプレ、クラウド、仮想化、冗長化、バックアップの時間仕組み等が挙げられます。


２　メール

今のプロジェクトで何が話題となっているかを把握すると何か仕事を振られた時に理解することが早くなります。周囲の会話にもついていきやすくなります。
今の流れをつかむことが大切です。


３　過去障害

業務で扱うシステムで過去起きた障害案件を知っておきましょう。
その時の障害の原因や対処策が記載されていると思いますのでそれを頭に入れておくだけでも、
障害が起きた時の対処策の参考となります。


# おわりに

本当に当たり前の内容になるのですがこれをやっておくだけでプロジェクトについていきやすくなります。
私自身これで乗り切ってきました。私自身もまだまだ初学者です。これからも継続していこうと思っております。

最後まで読んでいただきありがとうございました。
git pushまでの流れ

ファイル編集後
```
git add .
```
git addについて：https://note.nkmk.me/git-add-u-a-period/


```
git commit -a -F- << EOM
```
この書き方だと、改行が可能になるので便利。

```
git push origin XXXXX
```

これで完了。
管理者用のWindows Terminalのショートカットを用意する

PowerShellを管理者で起動するときもWindows Terminalで開きたいですよね。
でも右クリックで管理者で実行を選ぶの面倒くさい。
特にタスクバーのピン止めしたアイコンから開く場合はすこし面倒です。

- タスクバーの「ターミナル」を右クリック
- 開いたメニューの「ターミナル」を右クリック
- 「管理者として実行」をクリック

また「管理者として実行」の近くに「ピン止めを外すメニュー」があるのも地味に嫌です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19245/4cca4a6a-4431-db7a-e1d6-6c5d0221b098.png)

ショートカットをつくりましょう。
パスは `C:\Users\<ユーザー名>\AppData\Local\Microsoft\WindowsApps\wt.exe` 詳細設定で「管理者として実行」を設定しておきます。アイコンも適当に変えておくとよいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19245/11695c23-e293-1a03-cf36-25aa3940b357.png)
VSCODEでPythonのインタープリター選択(解決?)

# 目次
1. 現状
1. エラー内容
1. 仮想環境を再作成してみる
1. settings.jsonの問題？

# 1. 現状
#### 開発環境
>OS : Windows10
Editor : Visual Studio Code
#### フォルダー構成
>D: (ドライブ)
　|--AppData
　|　　|--python.exe (Python : 3.10.5)
　|　　|--...
　|--MyApp
　|　　|--.venv (仮想環境)
　|　　|--.vscode
　|　　|　　|--settings.json
　|　　|--flaskr (自作プログラム)
　|　　|　　|--...
#### ファイル内容
>```json:settings.json
>{
>    "python.defaultInterpreterPath": ".venv\\Scripts\\python.exe"
>}
>```
# 2. エラー内容
VSCODEでインタープリター選択＞デフォルトを指定した際、以下の様なエラーとなる。
>無効なPythonインタープリター{0}が選択されています。

# 3. 仮想環境を再作成してみる
まず、パッケージを逃がしておく。
```bash
pip freeze > requirements.txt
```
.venvを削除し、再度作成する。
```bash
# 手動で.venvフォルダーを削除する。
"D:\AppData\python.exe"  -m venv .venv
.venv\scripts\activate.bat
pip install -r requirements.txt
```
！インタープリター選択と表示されるが、.venvのなかのパッケージは有効になる。
VSCODEを再起動すると、3.10.5('.venv':venv)と表示されるようになった。
インタープリター選択画面にも仮想環境が表示される。
しかし、原因不明で再び仮想環境を認識しない可能性がある。

# 4. settings.jsonの問題？
こちらの記事によると、書き方が違うような気がする。

https://logixsquare.com/techblog/visual-studio-code-python-version-settings/

参考にして、以下の様に${workspaceFloder}を追加する。
```json:settings.json
{
    "python.defaultInterpreterPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe"
}
```
こちらに変更して、様子を見てみることにする。
【Chrome拡張機能】Githubのコミット間差分表示ページURLを生成して開く

# 概要
掲題のChrome拡張機能「GithubDiff」を作成したので紹介します。
# 目次
- [概要](#概要)
- [目次](#目次)
- [目的](#目的)
- [利用方法](#利用方法)
  - [想定](#想定)
  - [手順](#手順)
  - [参考動画](#参考動画)
- [書いたコードの紹介](#書いたコードの紹介)
  - [ディレクトリ構成](#ディレクトリ構成)
  - [manifest.json](#manifestjson)
  - [popup.html](#popuphtml)
  - [popup.js](#popupjs)
  - [つまづいた問題](#つまづいた問題)

# 目的
ChromeでGithubのコミット間差分表示ページに移動する際、アドレスバーのURLを編集する手間を簡単にする。

# 利用方法
## 想定
Pull requestにコードレビューと修正コミットがあり、修正前後のコミット間差分を表示したい。

## 手順
- Chrome拡張機能メニューにある「GithubDiff」のアイコンをクリックする。
- ポップアップで表示されたフォームに比較したいコミットのハッシュを入力してEnterを押すかCompareボタンをクリックする。

→コミット間差分表示ページが新しいタブで開く。

## 参考動画
![Animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2692730/8d64d571-6c13-8f3e-cc99-d12d7b389187.gif)


# 書いたコードの紹介
## ディレクトリ構成
```terminal
GitHubDiff
│  manifest.json
│  popup.html
│  popup.js
│  
└─images
        128.png
        16.png
        48.png
```

```json:manifest.json
{
  "name": "GithubDiff",
  "version": "1",
  "manifest_version": 3,
  "description": "Generate URL to compare commits or branches.",
  "icons": {
    "16" : "images/16.png",
    "48" : "images/48.png",
    "128" : "images/128.png"
  },
  "action": {
    "default_icon": "images/16.png",
    "default_title": "GithubDiff",
    "default_popup": "popup.html"
  },
  "permissions": [
    "tabs"
  ]
}
```

```html:popup.html
<script src="popup.js"></script>
<p>Enter Hash or Branch Name.</p>
<form id="compare">
    <input type="text" id="left" placeholder="left">
    <input type="text" id="right" placeholder="right">
    <button type="submit" id="btn">Compare</button>
</form>
```

```javascript:popup.js
// ここでイベントのバインディングをするのがChrome拡張機能でjavascript関数を実行するミソ
document.addEventListener('DOMContentLoaded', function() {
  document.getElementById("compare").addEventListener("submit", handler);
});

let url_text
let tabs = chrome.tabs.query({ active: true, lastFocusedWindow: true }, (tabs) => {
    url_text = tabs[0].url;
});

function handler(){
    let left = document.getElementById('left').value
    let right = document.getElementById('right').value
    let url = new URL(url_text);
    let url_elements = url_text.split('/');
    let compare_url = "https://" + url.hostname + "/" + url_elements[3] + "/" + url_elements[4] + "/compare/" + left + "..." + right
    window.open(compare_url);
}
```

## つまづいた問題
- Submitイベントで指定したjavascript関数が呼び出されない。  
  以下を参考にした。  
  https://stackoverflow.com/questions/13591983/onclick-or-inline-script-isnt-working-in-extension
漏えい等事案が発覚した場合に講ずべき措置

#### [全体の目次](https://qiita.com/tetz1/items/da4eb31b920f2acf4349)

**個人情報の保護に関する法律についてのガイドライン（通則編）<br>　[3 個人情報取扱事業者等の義務](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a3)<br> 　　> [3-5 個人データの漏えい等の報告等（法第26条関係）](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a3-5)<br> 　　　> [3-5-2 漏えい等事案が発覚した場合に講ずべき措置](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a3-5-2)**

---

# 漏えい等事案が発覚した場合に講ずべき措置
### 漏えい等事案（漏えい等、そのおそれのある事案）が発覚した場合は、内容等に応じて、下記について必要な措置を講じなければならない。

### 1. 事業者内部における報告及び被害の拡大防止
- 責任ある立場の者に直ちに報告するとともに、被害が発覚時よりも拡大しないよう必要な措置を講ずる

### 2. 事実関係の調査、及び、原因の究明
- 事実関係の調査及び原因の究明に必要な措置を講ずる

### 3. 影響範囲の特定
- 上記2で把握した事実関係による影響範囲の特定のために必要な措置を講ずる

### 4. 再発防止策の検討、及び、実施
- 上記2の結果を踏まえ、漏えい等事案の再発防止策の検討及び実施に必要な措置を講ずる

### 5. 個人情報保護委員会への報告、及び、本人への通知

- [3-5-3（個人情報保護委員会への報告）](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a3-5-3)、[3-5-4（本人への通知）](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a3-5-4)を参照のこと。なお、内容等に応じて、二次被害の防止、類似事案の発生防止等の観点から、事実関係及び再発防止策等について、速やかに公表することが望ましい
QAのアニメーションを実装するときに、いつも時間かかるので、いい感じのコードをメモしておく

ウェブサイトのQAで、Qをクリックしたら、Aが下に現れるアニメーションを実装についてのメモです。
実は、やるたびに調べたり、考えたりして、なんとか実装はできているんですが、
いつも時間かかるし、コードが違うような気がしています。
それはそれで勉強になるのですが、時間かかってかなわないので、
今回、なかなかいい感じで実装できたので、メモすることにしました。

# HTML
これもいつも迷うのですが、今回は`<ul><li>`で書きました。

```html
<ul class="p-faq__list">
<li class="p-faq__item">
	<h3 class="p-faq__question">
		<span class="p-faq__question__text">
　　　　　　　　　　　　　　　　　　　　毎回JavaScriptをいちから書くのは大変ではないですか？
		</span>
	</h3>
	<p class="p-faq__answer">
		<span class="p-faq__answer__text">
			確かに、たいへんですが、まあまあ勉強にはなるので、今は、まあいいかなと思っています。
		</span>
	</p>
</li>
<li class="p-faq__item">
	<h3 class="p-faq__question">
		<span class="p-faq__question__text">
			では、今後はどうするつもりですか？
		</span>
	</h3>
	<p class="p-faq__answer">
		<span class="p-faq__answer__text">
			今後お仕事としてコーディングすることになるので、そうなるとスピードが求められます。自分のsnippetとして登録したいと思います。
		</span>
	</p>
</li>
</ul>

```

# 考え方 p-faq-question をクリックしたら、p-faq-answer を出現させる。

1. translateYとvisibility,opacityで表示、非表示を制御
    1. answerを上に１００％ずらしても、questionの下に高さがのこってしまう。
    1. display:noneを入れてみるがそうすると、transitionは効かない
1. 高さもアニメーションに追加
    1. タイミングがうまくいかず、重なって見えるので、propertyごとに、transition-durationを指定して調整することにしました。
   

# 完成CSS
```sass
.p-faq__question {
　　　　background-color: #fff;
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 65px;
　　　　cursor: pointer;
  &::after {
    content: "ー";
    font-size: 2.5rem;
    padding-right: 1%;
  }
}

.p-faq__answer {
  background-color: #ｆ２ｆ２ｆ２;
  line-height: 65px;
　　　　　height: 0px;
　　　　　visibility: hidden;
　　　　　opacity: 0;
　　　　　transition: height .3s, visibility .1s, opacity .1s;
  &__text {
    padding-left: 26px;
  }
}
.p-faq__answer.open{
	transition: height .3s, visibility .5s, opacity .5s;
	height: 65px;
	visibility: visible;
	opacity: 1;
}
```
  
# ふりかえり
最初、qa全体全体にoverflow:hiddenをつけて、その高さを制御することでanswer部分の表示非表示をするようにしたのですが、アニメーションの動きが、上から開くのではなく、ちょっと意図した動きにならず。毎回、いろいろ試行錯誤してばかりなので、このメモをもとに、次のQAはさくっと実装できるようにしたいです。
スケジュールFlow

[Flowに関するまとめページ に戻る](https://qiita.com/Keiji_otsubo/items/55ebc9c634a3216f3990)



なんだ、結局は毎日走らせて、数式で走っていい日かを見るだけ？
Apexでやる時と何も変わらん。

+ [スケジュールトリガーフローでのコールアウト時のエラー](https://qiita.com/Keiji_otsubo/items/bf5ea581b7833c9eaf93)
+ [Create Task 18 Months after Opp created date](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000HESQ0)

+ [毎月実行するスケジュールされたフローを作成しますか？](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000H04iD)
+ [スケジュールトリガフローでメールアラートを設定しているのですが、メールが来る時間は、初期に設定する「フローの開始」の時刻でしょうか？](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007PfB5ZSAV)

:::note
スケジュールトリガフローのメール送信は、スケジュールトリガフローの処理が終わってから（データベース等のコミットが終わってから）送信が実行されます。

そのため、フローの開始の時刻から多少のズレが生じることがあります。
:::

+ [スケジュールによってトリガーされるフローの改善](https://qiita.com/Keiji_otsubo/items/4d2e449a4863de59f214)

+ [スケジュールトリガーフローで当日に更新を掛けるフローを作成したい。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007akPMg)

ループしなくても大丈夫

+ [フローで送信されたメールか、手動で送信されたメールか確かめる方法](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cm15G)

:::note
スケジュールトリガーフローの実行者を確認してみるとヒントがあるかもしれません。

コアアクションでメールを送信するとEmailMessageのレコードが作成されているので、このレコードの作成者がデフォルトのワークフローユーザならフローの可能性が高いですね。

もし、担当者が手動で送ったものなら、この担当者が作成者になっていると思います。

[スケジュールトリガーフロー・Apexスケジュールの実行者を確認する方法 ](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000079RKjjSAG)
:::

+ [スケジュールトリガーフローで「メールを送信」でメールを送信する](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000NOUa)
+ [72時間経過してもフィールドが変更されなかった場合のリマインダーメール](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000MXFt0)

:::note
レコードを作成した時点で値を保持する新しいフィールドを使用し、この値をスケジュールされたパスで使用するという別の解決策を見つけました。
:::



# デバック

+ [スケジュールされたフローがすべてのレコードに対して実行されないようです](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000MiAYZSA3)

これは期待どおりに動作しています。スケジュールされたフローをデバッグすると、レコードが 1 つしか見つかりません。これは、開始要素に条件を設定することで、「レコードのバッチに対してフローを実行する」という要件を満たしているためです。Salesforce は、条件を満たすレコードごとに個別のフロー インタビューを実行し、バックエンドでバッチ処理を行います。フロー内で一括処理を自分で処理する必要はありません。このユース ケースでは、レコードの取得やループを使用してより複雑なフローを作成する必要はありませんが、これが理解しにくい理由はわかります。スケジュールされたフローは、基本的にフロー構築のルールの例外です。デバッグが機能するため、さらに「テスト」するには、複数の連絡先が今日誕生日になるように設定し、フローを約 5 分後に実行するようにスケジュールし、アクティブ化して、フローが「実際に」実行されるのを待ちます。


スケジュールされたフローは、他のフローとデバッグ方法が少し異なります。デバッグするレコードを指定することはできません。Salesforce がランダムに 1 つ選択します。 

選択されたレコード (randomyl) は選択を続行します。そのため、テスト用にそのレコードを編集して生年月日を変更するだけです。準備ができたらアクティブ化します。 

サンドボックスでアクティベーションを実行するときは通常、サブセットまたはレコードをテストできるように、開始するための追加の条件（連絡先の名が「A」で始まるなど）を追加します。

+ [レコードトリガーフローが非同期パス Salesforce を実行しない](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007PwhpTSAR)

メールが送信されないこと以外に、タスクの作成 (パス「請求書の日付に実行」の下) は実際に行われていますか。今日の日付は今日の開始時 (つまり 00:00 時) と見なされ、これは過去の日付であるため、スケジュールされたパス全体がトリガーされていない可能性があります。そのため、今日作成された請求書と請求書の日付 = 今日でテストを実行している場合、スケジュールされたフローは実行されません。

期日が明日の請求書を作成し、「設定」>「ジョブ」>「スケジュールされたジョブ」に移動して、スケジュールされたフローが明日にスケジュールされているかどうかを確認できますか? はいの場合は、時間を確認して、スケジュールされたパスがいつ実行されるか、および電子メールがいつ送信されるかを確認します。


明日まで結果を確認したくない場合は、スケジュールされたパスの時間ソースを InvoiceDate から CreatedDate (日付/時刻フィールド) に変更し、スケジュールされたフローを実行して CreatedDate からたとえば 3 分間の遅延を与えるように選択すると、請求書が作成されてから 3 分後にメールを受信できるようになります。
従業者の監督

### [全体の目次](https://qiita.com/tetz1/items/da4eb31b920f2acf4349)
---

## 個人データの管理
 **[ガイドライン（通則編）- 3-4 個人データの管理（法第22条～第25条関係）](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a3-4)**

# 従業者の監督
 **[ガイドライン（通則編）- 3-4-3 従業者の監督（法第24条関係）](https://www.ppc.go.jp/personalinfo/legal/guidelines_tsusoku/#a3-4-3)**

### 従業者に個人データを取り扱わせる際に、個人データの安全管理が図られるよう、従業者に対する必要かつ適切な監督を行わなければならない

<details><summary><B>「従業者」とは？</B></summary>

* 組織内にあって直接・間接に業務に従事している者等
* 雇用関係にある従業員（正社員、契約社員、嘱託社員、パート社員、アルバイト社員等）のみならず、取締役、執行役、理事、監査役、監事、派遣社員等も含まれる

</details>

#### 従業者に対する監督において考慮するべき事項
- 個人データが漏えい等をした場合に本人が被る権利利益の侵害の大きさ
- 事業の規模及び性質
- 個人データの取扱状況（取り扱う個人データの性質及び量を含む）

#### 従業者に対する必要かつ適切な監督の例
- 個人データを取り扱う従業者に対する教育、研修等の内容、及び、頻度を充実させる等



#### 従業者に対し必要かつ適切な監督を行っていない例
- 例）従業者が、個人データの安全管理措置を定める規程等に従って業務を行っていることを確認しなかった結果、個人データが漏えいした場合
- 例）内部規程等に違反して個人データが入ったノート型パソコンや外部記録媒体が繰り返し持ち出されていたにもかかわらず、その行為を放置した結果、それを紛失し、個人データが漏えいした場合
CentOS7にpython3.10系を入れた場合のSSLエラー(pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.)


# 前提
- docker(CentOS7)を作成
- 上記にPython3.10.5をインストール
- pipで別途用意したrequirements.txtのライブラリをインストールしようとしていた

# 問題点
- "pip install -r requirements.txt"を実行しようとしたら、SSLエラーが発生した


# エラー内容
```shell
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/asgiref/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/asgiref/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/asgiref/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/asgiref/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/asgiref/
Could not fetch URL https://pypi.org/simple/asgiref/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/asgiref/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
ERROR: Could not find a version that satisfies the requirement asgiref==3.5.2 (from versions: none)
ERROR: No matching distribution found for asgiref==3.5.2
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
```



# やらないといけなかったこと
- そもそもPython3.10系はopen-sslのv1.1.1以上が必須になっていた
- CentOS7にはopen-sslの1.1.1が入っていないので、自分でインストールしてあげる必要がある
- 以下のコマンドを実行すればOK

```shell
yum install epel-release
yum install openssl11 openssl11-devel

export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)

./configure
make
sudo make install
```


# 結論
公式ドキュメントをちゃんと読まないとだめですね。。。

https://www.python.jp/news/wnpython310/require-openssl11.html
Salesforceのダッシュボードの参照設定について解説してみた

Salesfroceのダッシュボードの参照設定について解説します。

Salesforceのダッシュボード設定として以下のような設定があります
![ダッシュボードユーザ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/193a9a06-2536-8e50-18ad-1602c977a044.png)


こちらの設定「次のユーザとしてダッシュボードを参照」について深堀りしていきます


## 「次のユーザとしてダッシュボードを参照」が「自分」の場合に起こる現象


「次のユーザとしてダッシュボードを参照」が「自分」の場合に起こる現象を見てみましょう。

例えば、Salesforceシステム管理者の本橋さんがダッシュボードの設定を行い、「次のユーザとしてダッシュボードを参照」が「自分」に設定したとします。



その場合、「自分」＝本橋さん　となるので
・本橋さんがダッシュボードを見た場合＝本橋さんとしてダッシュボードが表示される
・他のユーザ（例：田中太郎、鈴木次郎）としてダッシュボードを見た場合＝本橋さんとしてダッシュボードが表示される

となります

図に表すとこのようになります
![ダッシュボード１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/171ca1e3-df6e-0bf1-612e-792db2bf2084.png)

なお、このダッシュボードの場合、ダッシュボードの設定をした本橋さんとしてみるとこのような設定ですが
![ダッシュボードユーザ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/9e93ffbb-6a5b-855c-7066-ab378ab4d169.png)


別のユーザ（例：田中太郎）で見ると

「別ユーザ：Motohashi Takaaki」という設定になっているのが分かります
![田中.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/3aba8edc-db72-49a1-7b75-f5dba0b84e61.png)


## 「次のユーザとしてダッシュボードを参照」が「ダッシュボード閲覧者」の場合に起こる現象


「次のユーザとしてダッシュボードを参照」が「ダッシュボード閲覧者」の場合に起こる現象を見てみましょう。

例えば、Salesforceシステム管理者の本橋さんがダッシュボードの設定を行い、「次のユーザとしてダッシュボードを参照」が「ダッシュボード閲覧者」に設定したとします。


その場合、「自分」＝本橋さん　となるので
・本橋さんがダッシュボードを見た場合＝本橋さんとしてダッシュボードが表示される
・田中太郎さんがダッシュボードを見た場合＝田中太郎さんとしてダッシュボードが表示される
・鈴木次郎さんがダッシュボードを見た場合＝鈴木次郎さんとしてダッシュボードが表示される

となります

図に表すとこのようになります
![田中太郎.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/eff8d95e-8bd7-a1a9-3a60-032fdb54c83e.png)


なので
・同じダッシュボードをユーザごとに見える設定を変えたい
という場合、「次のユーザとしてダッシュボードを参照」が「ダッシュボード閲覧者」の設定にする必要があります
Cloud9で指定ページにアクセスする方法

おはようございます。本日も仕事前にやっていきます。

今回はRialsチュートリアルの３章で起きたちょっとした問題です。

３章では静的なページの作成を学んでいきます。

rails g controller home help

とコマンドを打つと、アクション名までまとめてコントローラーを生成できる。同時にroutes.rbファイルも自動更新されます。

ここまできて問題が発生。rails ｓでサーバーを立ち上げ、
/static_pages/homeにアクセスして結果を表示します、、、

「/static_pages/homeにアクセスして」ってどうやるの？。。。

色々と調べても何も解決せず、2日たった今日。ついに見つけました（大袈裟。。。）

解決方法は以下です。

① cloud9でサーバーを立ち上げる
② 添付画像が表示される
③ アドレスバーを確認すると、https://f〜〜.vfs.cloud9.us-east-1.amazonaws.com/
　というURLがあるので
④ 末尾に「static_pages/home」を追加するだけ

![スクリーンショット 2022-07-27 8.48.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607524/0ecb74df-453b-ce22-905a-059943e14dd9.png)

これは誰でも知っていることなのだろうか、、、恥ずかしい。。。

今日は以上。行ってきます。
OST(Open Spece Technology)とは

7/25に開催された[コーチングわいわい会](https://coaching-community.connpass.com/event/252802/)に参加し、オープンスペーステクノロジーを経験しました。
このワークショップはオンラインでMTGするためのフレームワークとして今後重宝するので感じたので自己学習としてまとめてみました。

# Open Spece Technologyとは

wikipediaより
```
オープン・スペース・テクノロジー（英語: Open Space Technology）とは、会議での討論のやり方（ファシリテーション）の形式の1種。
頭字語でOSTと略すこともある

5人から2000人といった小人数から大人数にまで一堂に会して行えるのが特徴である。
参加者が課題を提案してミーティングを行う仲間を募り、課題を解決するプロジェクトを創出することができる。
参加者の当事者意識や自発性を喚起するとともに、参加者の主体的な発案、対話を促す。
```

OSTはワークショップの進め方の一つです。
OSTでは、**ファシリテーターは対話のコントロールを手放し、出席した参加者が自分達でワークショップを作っていくこと**を重んじます。
ファシリテーターの責務は参加者が自主的に対話を進められるよう場を作ることです。

## OSTはこんな状況におすすめ

* みんなが主体性を失って、状況に流されているように感じる
* 組織の中の信頼が薄らいでいる
* 会社の目指す方向性や戦略が共有化されていない
* 「自分たちらしさ」がわからなくなっていて、何を目指したらよいのかわからない
* 経営層と社員の間に意識の乖離がある
* コミュニケーション不足で、聞きたいことがあっても聞きにくい雰囲気がある
* 立場や部門の違いが、そのまま壁になっており、向こう側で起きたことが見えなくなっている
* 自分から何かを提案したり、積極的に周りに働きかけることがしづらくなっている
* 改善したいことはたくさんあるのに、関係者と協力し合うことができないでいる
* 異なる背景や文化をもった人たちが、互いに理解し合えずにいる

## オープンスペーステクノロジーの原則

1. ここにやってきた人はだれもが適任者である
1. 何が起ころうと、起こるべきことが起きる
1. 始まるべき時に始まる
1. 終わるべき時に終わる

## 主体的移動の法則

参加者は、どの課題に参加することも自由であると同時に、自分が選択した課題に貢献できないと感じたときには、その課題が話し合われる場から自由に移動することができます。
OSTではセッションから移動する人達をこのように例えています。

* ハチ･･･セッション間を移動している人。移動したセッションに多くの情報がもたらされる。
* チョウチョ･･･休憩所にとどまってコミュニケーションしている人。
* キリン･･･セッションに参加しながら他のセッションも聞いている人。これを許可するかどうかはその場次第。

## OSTの進め方

|概要|内容|担当|
|---|---|---|
|オープニング|OSTを説明する|ファシリテーター|
|テーマ出し|自分が情熱と責任を持って話したいテーマを上げる|参加者|
|マーケットプレイス|参加したい時間と場所を決める|ファシリテーター|
|セッション|テーマを出した人がセッションを運営する<br>壁新聞を作成する<br>全員で対話する<br>セッションに貢献できない人は他のセッションに移動してもよい<br>|全員|
|ハーベスト|議事録を作成する<br>セッションのふりかえりをする<br>|全員|

# 引用

* [参加者がつくる対話の場 オープンスペーステクノロジー](https://www.ogis-ri.co.jp/otc/hiroba/Report/EnterpriseAgileGathering2018/ost.html)
* [オープンスペーステクノロジーの流れ](https://matano-lab.com/wp/20200609/)
* [オープンスペーステクノロジー（OST）](https://www.ourfutures.net/session_methods/ost)
* [OST（オープン・スペース・テクノロジー）](https://www.humanvalue.co.jp/keywords/ost/)
* [人と組織の「アイデア実行力」を高める――OST(オープン・スペース・テクノロジー)実践ガイド](https://www.amazon.co.jp/%E4%BA%BA%E3%81%A8%E7%B5%84%E7%B9%94%E3%81%AE%E3%80%8C%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2%E5%AE%9F%E8%A1%8C%E5%8A%9B%E3%80%8D%E3%82%92%E9%AB%98%E3%82%81%E3%82%8B%E2%80%95%E2%80%95OST-%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%83%BB%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%83%BB%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC-%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E9%A6%99%E5%8F%96-%E4%B8%80%E6%98%AD/dp/4862762522/ref=sr_1_1_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=16KKDUNPLSJAQ&keywords=OST&qid=1658793788&sprefix=ost%2Caps%2C290&sr=8-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUFNNEFQOVBZOVJFM0UmZW5jcnlwdGVkSWQ9QTA3NzEwMDkyS1hOTjZFUlhOSjk5JmVuY3J5cHRlZEFkSWQ9QTNCS0pNV1hVTEpNN1Imd2lkZ2V0TmFtZT1zcF9hdGYmYWN0aW9uPWNsaWNrUmVkaXJlY3QmZG9Ob3RMb2dDbGljaz10cnVl)
Heroku Postgresを使ってみる

# 概要
Heroku Postgresのインストールからテーブル操作まで

# heroku cliをインストール
ローカルからherokuにアクセスするためのツールをインストールする。
以下はWindows環境用。

https://blog.kapiecii.com/posts/2021/09/26/installing-the-heroku-cli-on-wsl2/

# 自システムにPostgresをインストール
ローカルからHeroku Postgresにアクセスするためには、
ローカルにPostgresをインストールする必要がある。

https://noitalog.tokyo/wsl2-ubuntu-postgresql/

# herokuでアプリ作成、postgres追加するまで
Heroku Postgresを作成する。

https://amateur-engineer-blog.com/create-heroku-postgres/

# ローカルからHeroku Postgresに接続
[Setting]→[Database Credentials]→[Heroku CLI]のコマンドを自環境で実行
heroku pg:psql postgresql-opaque-56782 --app mokumoku1025

# テーブル削除とかデータ追加とか
https://amateur-engineer-blog.com/heroku-postgres-basic-data-operation/
Elasticsearchで見る検索エンジンの仕組み(9): Kibana画面が応答しない事象のトラブルシューティング

##### [前回] [Elasticsearchで見る検索エンジンの仕組み(8): Kibana起動エラーのトラブルシューティング](https://qiita.com/mingchun_zhao/items/77d84b745aa80f09e201)

## はじめに

今回は、Kibana画面が応答しない事象のトラブルシューティングですが、
その原因は、KibanaではなくElasticsearchのメモリ使用量(JVMヒープサイズ)でした。

## トラブル事象

- kibanaの画面が固まって、応答しない
    - ElasticsearchやKibanaのログに、それらしきエラーメッセージは見当たらず。。。

- 試しにKibanaを何回も再起動してみる
    - 改善せず、どういうこと？？？

## 原因調査

- タスクマネージャーからシステムリソースの使用率を確認
    - Elasticsearchのjava.exeプロセスが、メモリ4GBを使っている(長時間稼働しつづけていたから?)
    - メモリ枯渇により、システム全体が遅くなっている、まずい

- Elasticsearchのリファレンスから、[JVMヒープサイズの設定](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-heap-size)を確認

    - Elasticsearchは、デフォルトでノードのロール数と合計メモリに基づき、JVMヒープサイズを自動設定してくれる
        - ほとんどの実稼働環境で、デフォルトのサイズ設定を使用することをお勧めするとのこと
    - デフォルトのヒープサイズを上書きするには、最小ヒープサイズ(Xms)および最大ヒープサイズ(Xmx)を設定
        - 最小値と最大値は同じである必要あり


- ElasticsearchのJVM設定ファイルにもJVMヒープサイズの記載があった
    - `elasticsearch-{version}/config/jvm.options`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/010f6283-d8a4-d2cb-9398-7eaf9f5b030f.png)

## 対処

- リファレンスの手順とおり、`config/jvm.options.d`ディレクトリに設定ファイルを追加
    - 開発環境なので、一旦ヒープサイズを1GBに設定してみる

```elasticsearch-{version}/config/jvm.options.d/jvm.options.d
-Xms1g
-Xmx1g
```

- Elasticsearchを再起動
    - 起動ログから、JVMオプションに`-Xms1g, -Xmx1g`が含まれていることを確認

```
... ...
[2022-07-27T07:56:05,276][INFO ][o.e.n.Node               ] [81KRV93] JVM home [C:\es\elasticsearch-8.3.1\jdk], using bundled JDK [true]
[2022-07-27T07:56:05,276][INFO ][o.e.n.Node               ] [81KRV93] JVM arguments [
... ...
 -Xms1g, -Xmx1g,
... ...
```

- Kibanaを起動
    - Kibanaが正常に機能するようになった

## おわりに

Kibanaが応答しない事象のトラブルシューティングでした。
次回も続きます。お楽しみに。
Pardot フィールドマッピング


[Pordotの質問と回答をまとめ](https://qiita.com/Keiji_otsubo/items/a3ccd1370697dd914723)

元の質問 : [FIELD TYPE BETWEEN PARDOT AND SF](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000HEUHjSAP)

ヘルプ記事の内容を読めば理解できると思ったのですが... ダメみたい。

|pardot | Salesforce |
|:------|:-----------|
|Text | Text Area (Long)|
|Number | Number|
|Date | Date|
|Radio Button | picklist|
|Checkbox | Picklist (Multi-Select)|
|Dropdown |  picklist|
|TextArea |  Text Area (Long)|
|Multi-Select | Picklist (Multi-Select)|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/2d7d94ab-0c4e-448e-10c3-92cbfb6b04a3.png)



+ [Prospect Field Types](https://help.salesforce.com/s/articleView?id=sf.pardot_field_types.htm&type=5)
+ [デフォルトのプロスペクトフィールドマッピング](https://help.salesforce.com/s/articleView?id=sf.pardot_default_prospect_field_mapping.htm&type=5)
+ [Pardot Custom Field Mapping with Salesforce: The API Field Name Trap](https://www.salesforceben.com/the-drip/mapping-pardot-and-salesforce-custom-fields-api-name/)

+ [Salesforce カスタム項目をアカウントエンゲージメントにマッピングする](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007KFZWDSA5)

:::note
これらのページではカスタム フィールドをマッピングする場所ではありません。オブジェクト同期設定では、フィールドが CRM Analytics パッケージ (別名 B2BMA ダッシュボード) にマップされます。カスタムオブジェクトは、標準のリード、取引先担当者、取引先、商談以外のレコード オブジェクト (ケースなど) であり、Plus Edition はカスタム オブジェクトをサポートしません。カスタム フィールド マッピングを追加するには、[プロスペクト フィールド] に移動し、[カスタム フィールドの追加] をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/561a0abb-188c-4eb6-626f-a486b84b1322.png)

マッピングに使用できる Salesforce フィールドは、「salesforce.comフィールド名」ドロップダウンにあります。表示されていない場合は、円形の矢印アイコンを更新してみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/22fa9daa-990b-bf6b-9fbb-10374ae3b058.png)
:::

+ [Pardot でリード Salesforce.com フィールドが見つからない カスタム見込み客フィールドを追加する](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmRJV)
文字列「SPSS」を含むレコードを抽出/フラグ化する(SPSS Modeler データ加工逆引き2-8)

# 文字列「SPSS」を含むレコードを抽出/フラグ化する

![スクリーンショット 2022-07-15 12.52.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f906e839-dcdb-5ba4-f2de-d38b2773a56d.png)

## 1.想定される利用目的

・商品名称から特定カテゴリへの絞り込み
・設備ログの特定メッセージの抽出と破棄

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/issubstring.str?raw=true

## 3.サンプルストリームの説明

![スクリーンショット 2022-07-15 12.53.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/554aadb4-04b2-ad2a-93eb-870ebad6d8df.png)

a.入力するデータは以下の通りです。
![スクリーンショット 2022-07-15 12.47.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/536c89f8-50c5-230f-9e1f-3ec7da51574c.png)

b.[条件抽出]ノードを編集します。issubstring("文字列",フィールド)でフィールド内に文字列を含むと真になります。
![スクリーンショット 2022-07-15 12.54.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/da30b366-92f2-eef5-e369-a1cbfcdd5352.png)

[テーブル]を実行します。該当する３つのレコードが抽出されました。
![スクリーンショット 2022-07-15 12.47.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/27e4f09a-2724-5e14-4b69-45605667706b.png)

c.[フィールド作成]ノードを編集します。[派生:]を[フラグ型]にして先ほどのbと同じ式を真の条件にします。
![スクリーンショット 2022-07-15 12.55.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/461a01db-8c91-700f-06e0-3bbe763f2eea.png)

d.[テーブル]ノードを編集します。強調表示にcと同じ式をコピーします。
![スクリーンショット 2022-07-15 12.55.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2827e3cd-0d23-04e6-1d29-8ac34b264490.png)

[テーブル]を実行します。SPSSを含む製品にはフラグが立ち、赤で強調表示されました。
![スクリーンショット 2022-07-15 12.48.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/066993da-8434-78b7-678f-0e5e9048092f.png)

#### 注意事項

isendstring("文字列",フィールド)を[フラグ型]の真の条件で利用しましたが[CLEM式]で利用するとその文字の位置を返します。

![スクリーンショット 2022-07-15 13.29.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/bf4695ab-e9dd-b122-0e12-85d142d51cd3.png)


## 4.参考情報

#### よく使う文字列関数

https://qiita.com/Makimaki2020/items/35ab02a7375325e678c1

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008