OmniAICreator/Qiita-1.07M huggingface dataset:
GSKit V8 のLinuxへのインストール

なんだか必要になったのでメモ。

参考:
- [GSKit V8 - Install, Uninstall and Upgrade instructions for Linux systems](https://www.ibm.com/support/pages/gskit-v8-install-uninstall-and-upgrade-instructions-linux-systems#Linuxx64Inst)
- [rpm コマンドを使用した IBM Global Security Kit パッケージのインストール](https://www.ibm.com/docs/ja/db2/11.5?topic=linux-installing-packages-rpm-command)

### 1 . GSKit V8 ファイルをダウンロード
[Linux x86_64 platform from IBM Fix Central](http://www.ibm.com/support/fixcentral/swg/selectFixes?product=ibm/Tivoli/IBM+Global+Security+Kit&function=fixId&fixids=*-GSKIT-LinuxX64*)にアクセス。

### 2 . とりあえず一番新しいバージョンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/0729d5b2-b2dd-d491-87c4-582938405d01.png)

### 3 . ダウンロードオプションを1つ選択し、[次へ進む]をクリック
ここでは単純な「ブラウザー (HTTPS) を使用したダウンロード」を選択しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/1113d7c1-75f8-594a-9980-15bcc9dad979.png)

### 4. 表示されたファイルをダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/e01d8531-4a4e-059f-2ccc-414c45845e9d.png)

### 5 . ダウンローしたファイルを導入するLinuxマシンに置き、ログインし、ダウンロードしたファイルが置いてあるDirにcdします。
ここでは`/tmp`に置いたとします。
またファイル名はバージョンによって異なりますが、ここでは
`8.0.55.26-ISS-GSKIT-LinuxX64-FP0026.tar.gz`
とします。
適時、自分のダウンロードしたファイルに読み替えてください。
また実行はroot権限で行ってください。

```shell-session
# cd /tmp
# ls 8.0.55.26-ISS-GSKIT-LinuxX64-FP0026.tar.gz
8.0.55.26-ISS-GSKIT-LinuxX64-FP0026.tar.gz
#
```

### 6 . ダウンロードしたファイルの解凍
```shell-session
# tar -zxvf 8.0.55.26-ISS-GSKIT-LinuxX64-FP0026.tar.gz
8.0.55.26-ISS-GSKIT-LinuxX64-FP0026/
8.0.55.26-ISS-GSKIT-LinuxX64-FP0026/64/
8.0.55.26-ISS-GSKIT-LinuxX64-FP0026/64/gskssl64-8.0.55.26.linux.x86_64.rpm
8.0.55.26-ISS-GSKIT-LinuxX64-FP0026/64/gskcrypt64-8.0.55.26.linux.x86_64.rpm
8.0.55.26-ISS-GSKIT-LinuxX64-FP0026/32/
8.0.55.26-ISS-GSKIT-LinuxX64-FP0026/32/gskcrypt32-8.0.55.26.linux.x86.rpm
8.0.55.26-ISS-GSKIT-LinuxX64-FP0026/32/gskssl32-8.0.55.26.linux.x86.rpm
#
```

### 7 . 64bit版か32bit版、適応する方を選んでcd
下記は64bit版を選択、以下64bit版　で記述
```shell-session
# cd 8.0.55.26-ISS-GSKIT-LinuxX64-FP0026/64
```

### 8 . rpmでインストール

```shell-session
# rpm -Uhv gskcrypt64-8*.rpm
警告: gskcrypt64-8.0.55.26.linux.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 33259e38: NOKEY
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:gskcrypt64-8.0-55.26             ################################# [100%]
#
```
```shell-session
# rpm -Uhv gskssl64-8*.rpm
警告: gskssl64-8.0.55.26.linux.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 33259e38: NOKEY
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:gskssl64-8.0-55.26               ################################# [100%]
#
```

### 9 . 確認
```shell-session
# rpm -qa | egrep "gskcrypt32|gskssl32|gskcrypt64|gskssl64"
gskssl64-8.0-55.26.x86_64
gskcrypt64-8.0-55.26.x86_64
#
```

以上です。
クロスオブジェクトマージフィールドは電子メールテンプレートでは機能しません Cross-object Merge Fields Do Not Work in Email Templates

何となくおぼえているけど、いつもこのHelpが探せない。
数式フィールドを使うか、自動化処理で値をセットするかだな。

[Cross-object Merge Fields Do Not Work in Email Templates](https://help.salesforce.com/s/articleView?id=000324867&type=1)



# 質問/回答例

Use Cross Object Formulas as workaround for Email Template processing limitations

+ With the cross object formulas, you can create a field on the object that references the associated object.
+ The email template can then reference that field on the primary object instead of an entirely different object. 

Link

+ [Merge fields not working](https://help.salesforce.com/s/articleView?id=000324867&type=1)
+ [What Is a Cross-Object Formula?](https://help.salesforce.com/s/articleView?id=sf.customize_cross_object.htm&type=5)

いつも回答を横取りする、その対策。
[Email Merge Fields](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HFlJYSA1)


+ [Merge fields on email templates for CPQ](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgY5H)

:::note
Use Cross Object Formulas as workaround for Email Template processing limitations

+ With the cross object formulas, you can create a field on the object that references the associated object.
+ The email template can then reference that field on the primary object instead of an entirely different object.


Link

+ [Merge fields not working](https://help.salesforce.com/s/articleView?id=000324867&type=1)
+ [What Is a Cross-Object Formula?](https://help.salesforce.com/s/articleView?id=sf.customize_cross_object.htm&type=5)

```
{!SBQQ__Quote__r.SBQQ__Key__c}
{!SBQQ__Quote__r.SBQQ__NetAmount__c)
{!SBQQ__Quote__r.Total_Discount__c}
```
:::


+ [Classic Email Template: Case Merge Fields](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Ctbr2)

:::note
as a workaround, you could consider putting formula fields on your case object that reference Account and Contact to display the names.  That way you're not asking your template do the cross object reference, you'll be pulling all three fields from Case.  Clunky, but should be effective.

Cross-object Merge Fields Do Not Work in Email Templates
https://help.salesforce.com/s/articleView?id=000385133&type=1
:::


+ [取引先責任者レコード画面からメール作成をする際に差し込み項目の挿入で取引先を選択しようとしてのですが、選択項目にありませんでした。 下記のヘルプページに記載の通り、参照項目は差し込み項目で選択は不可なのでしょうか？ ](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000UaUI)

https://help.salesforce.com/s/articleView?id=000381076&type=1

:::note
参照項目のメールでの差し込みは対応できていないと思います。 
数式項目を使うしかないと思います。 

メールテンプレートのクロスオブジェクト差し込み項目を取得できない 
https://help.salesforce.com/s/articleView?id=000385133&type=1
:::
全レコード/設備毎に通し番号を振る(SPSS Modeler データ加工逆引き4-1)

# 全レコード/設備毎に通し番号を振る（通し番号）

![スクリーンショット 2022-06-23 10.38.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/18c64da2-7c27-800a-978f-4009cd46a031.png)

## 1.想定される利用目的
・降順ソート後のランキング
・Webログデータの行動識別番号を作成
・異常検知や故障予測のための特徴量の作成

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

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

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

![スクリーンショット 2022-06-23 10.38.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/322dd0a3-ddc3-35b3-52bd-2aeb33063a4f.png)

a.入力するデータは以下の通りです。
![スクリーンショット 2022-06-23 10.56.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/46ff2287-8c87-d93e-1a36-c44ad0f01bdf.png)

b.[フィールド作成]ノードを編集します。関数@&#xFFF0;INDEXを利用すると通し番号を振ります。
![スクリーンショット 2022-06-23 10.40.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/953798b6-095e-bcb9-73c7-ca10733863c5.png)

式ビルダーのライブラリから@&#xFFF0;関数を探すと簡単に入力できます。
![スクリーンショット 2022-06-23 10.40.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/874ca6e9-0ec7-a69b-cfba-0a9ba3181bf5.png)

[プレビュー]をします。全体に通し番号が振られました。
![スクリーンショット 2022-06-23 10.41.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/58386c20-91ee-96d5-74bd-44272e4e126a.png)

c.設備毎に通し番号を作ります。[派生]モードを[カウント]にしてカウントアップするための条件を記述します。[@&#xFFF0;OFFSET（設備,1)]は設備の1行上を参照する関数です。設備が1行上と異なったら1つカウントアップすることになります。
![スクリーンショット 2022-06-23 10.41.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/74b7f685-bc85-6b90-8213-b5b29b89aeb3.png)

式ビルダーのライブラリから@&#xFFF0;関数を探すと簡単に入力できます。
![スクリーンショット 2022-06-23 10.42.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c8e4d107-b7bd-b8a4-c5c4-0a74bf9873e5.png)

[プレビュー]をします。設備がAからBへ、BからCに移るとカウントアップして通し番号が作られました。
![スクリーンショット 2022-06-23 10.43.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d0b68735-8b66-35e9-baa6-067970d9c5b9.png)

d.設備毎に通し番号を作ります。今度は設備が1行上と等しければカウントアップし、切り替わるとリセットされるように記述します。
![スクリーンショット 2022-06-23 10.44.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/bf2ad3e4-62f0-8be1-2317-9c08d898f807.png)

[プレビュー]をします。
![スクリーンショット 2022-06-23 10.44.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f75afd86-ee4f-3e3b-c2ed-2cc68f3b1912.png)


#### 注意点
設備はあらかじめソートされている必要があります。設備毎の記録時間であらかじめ多重ソートしておくのが一般的です。

## 4.参考情報

#### カウント型を解説した記事

https://qiita.com/kawada2017/items/7b3c279963d39043214a#3m-%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E5%9E%8B%E3%82%B8%E3%82%B0%E3%82%B6%E3%82%B0%E3%82%92%E8%B5%B7%E3%81%93%E3%81%97%E3%81%9F%E7%B4%AF%E7%A9%8D%E5%9B%9E%E6%95%B0modeler%E7%89%88

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

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

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

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
Validatio Ruleだけでは実現できない検証ルール


ほとんどは子のオブジェクトの条件に基づく検証です。
英文の回答例として整理します。

フローが先に流れるみたい？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/847047b0-f495-d7d9-7bc2-df721fe138e1.png)

[自動化プロセスの実行順序](https://qiita.com/TaaaZyyy/items/8af80be381ad3c1a6715)

+ [検証：特定のユーザーがOppスプリットに参加していない場合に機会を閉じるのを防ぐ](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HDpGF)

フローを使用してOpportunitySplitオブジェクトをターゲットにする場合、メンバーがOpportunityに追加されるときに、バックグラウンドで非表示のボックスをチェックします。 
次に、これを検証ルールに組み込むことができます

If you target the Opportunity Split object using a Flow then when the member is added to the Opportunity check a hidden box in the background.  

You could then factor this into your Validation Rule. 


# 各月に保存できるレコードは 4 つだけであるようにします。

+ [Validation or Flow rule for object](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007H8KBG)

:::note
Use a record trigger flow to count the number of records for the month entered. If it exceeds 4, set the checkbox field to true.

Before Creating the Flow
Record-triggered flows cannot have a screen element. Therefore, you cannot display a message on the screen. The main idea is to have a simple validation rule that is triggered when a checkbox field becomes true.

https://salesforcetime.com/2021/09/25/complex-validation-rules-using-record-triggered-flows/
:::
Service Spreadsheets failed while accessing document with id 'XXX'の解決方法(xlsxファイルからgoogleスプレッドシートの変換方法)

# 目次
* 初めに
* エラーが出てしまう
* 解決方法
* xlsxファイルからgoogleスプレッドシートの変換方法

# 1. 初めに
こちらはエラーの対処方法の記事かつ、xlsxファイルからgoogleスプレッドシートの変換方法になります。

# 2. エラーが出てしまう
外部のgoogle driveからgoogleスプレッドシートをローカルのPCにダウンロードし、
自分のgoogle drive内にインポートしました。
GASでいつも通りgoogleスプレッドシートをインポートしようと思ったら..
```
Exception: Service Spreadsheets failed while accessing document with id 'XXX'
```
とエラーが出てしまいました。
ちなみに直訳すると、
「スプレッドシートは、ID 'XXX' のドキュメントにアクセスする際に失敗しました。」
#### なんで失敗したのかわからない！！
という方向けにこちらの記事書かせていただきました。

# 3. 解決方法
google driveからgoogleスプレッドシートをダウンロードすると、自動でxlsxファイルに書き変わるんですね...

つまり、「GAS上でxlsxファイルを読み込もうと思っても、無理ですよ...」というエラーでした。

解決方法としては、
##### xlsxファイルをgoogleスプレッドシートに変換すること！

次の項目で説明したいと思います。

# 4. xlsxファイルからgoogleスプレッドシートの変換方法
GUIで操作できるので非常に簡単です。
下記の画像のようにxlsxファイルを１クリックでgoogleスプレッドシートに変換完了です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1936739/d37fc96f-9ff6-756d-2222-6ad9c7b93dd9.png" width=65%>

無事googleスプレッドシートを読み込めました^^
MacでlabelImgを爆速でインストール(コマンドで1行)

# はじめに
labelImg　インストールで調べると，何個もコマンドが必要でgitからクローンする，みたいに色々手順が必要だったのですが，もっと簡単にできたので共有します．

# labelImgのインストール

ターミナルでうつコマンド↓
```
sudo pip3 install labelImg
```
これで終わりです！(人によっては，pip install labelImg かも)

あとはコマンドで
```
labelImg
```
とうつと起動します！
【TypeScript】URL取得や解析

# はじめに
今までは`location.～`しか使っていなかった….
ただ、最近`new URL()`を使用してもっと早く知りたかったと思い記事にすることにしました。

# 結論
- `location`は関連付けられたオブジェクトの場所 （現在アクセスしているブラウザのURL）を取得することができる。
    - 取得したURLやプロパティを変更するとブラウザのURLに反映される。
- new URL()は取得したURLの解析や構築が容易にできる。
    - URLやプロパティを変更してもブラウザに反映とかはされない。
- さらに詳しく知りたい方は参考文献から詳細内容を確認して下さい。

# **Location**
> **`Location`**インターフェイスは、関連付けられたオブジェクトの場所 (URL) を表します。 変更が行われると、関連するオブジェクトに反映されます。
> 
参考： [mdn web docs : Location](https://developer.mozilla.org/ja/docs/Web/API/Location)

## 各プロパティ取得
```jsx
// https://user:password@example.com:8080/directory1/directory2/index.html?aaa=111&bbb=222#hash ※仮URL
const url = location.href;

console.log(url);               // https://user:password@example.com:8080/directory1/directory2/index.html?aaa=111&bbb=222#hash
console.log(location.origin);   // https://example.com:8080
console.log(location.protocol); // https:
console.log(location.host);     // example.com:8080
console.log(location.hostname); // example.com
console.log(location.port);     // 8080
console.log(location.pathname); // /directory1/directory2/index.html
console.log(location.search);   // ?aaa=111&bbb=222
console.log(location.hash);     // #hash

// 下記は現在非推奨になっています。
// console.log(location.username);
// console.log(location.password);
```

# new URL()
> **`URL`**インターフェイスは、[URL](https://developer.mozilla.org/ja/docs/Glossary/URL)の解析、構築、正規化、およびエンコードに使用します。 URL のコンポーネントを簡単に読み取って変更できるプロパティを提供することで機能します。
> 
参考：[mdn web docs : URL](https://developer.mozilla.org/ja/docs/Web/API/URL)

## 各プロパティ取得
```jsx
// location.href →　https://user:password@example.com:8080/directory1/directory2/index.html?aaa=111&bbb=222#hash ※仮URL
const url = new URL(location.href)

console.log(url.href);     // https://user:password@example.com:8080/directory1/directory2/index.html?aaa=111&bbb=222#hash
console.log(url.origin);   // https://example.com:8080
console.log(url.protocol); // https:
console.log(url.host);     // example.com:8080
console.log(url.hostname); // example.com
console.log(url.port);     // 8080
console.log(url.username); // user
console.log(url.password); // password
console.log(url.pathname); // /directory1/directory2/index.html
console.log(url.search);   // ?aaa=111&bbb=222
console.log(url.hash);     // #hash
console.log(url.searchParams.get("aaa")); // 111
```

## URL構築
origin以外の値は変更できる。originに値を入れようとした場合は下記エラーが発生する。
- Cannot set property origin of [object URL] which has only a getter
    - ゲッターしか持っていない。つまり読み取り専用プロパティである。

```jsx
// location.href →　https://user:password@example.com:8080/directory1/directory2/index.html?aaa=111&bbb=222#hash ※仮URL
const url = new URL(location.href)

// 下記の値で再構築
url.username = "user1";
url.pathname = "/directory1/directory2/directory3/index.html";
url.search = "?aaa=111&bbb=222&ccc=333";
console.log(url.href); // https://user1:password@example.com:8080/directory1/directory2/directory3/index.html?aaa=111&bbb=222&ccc=333#hash
```

# 参考文献
[mdn web docs : Location](https://developer.mozilla.org/ja/docs/Web/API/Location)
[mdn web docs : URL](https://developer.mozilla.org/ja/docs/Web/API/URL)
6.13 (標準) 最尤推定7，推定量の評価6

## 方針

(4)については，6.14で詳しく述べる予定の最尤推定量の漸近正規性を用いても良い．

## 答案

![6. 2周目-31.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1702786/91b7f764-706e-3363-3a1a-d6f5a92c30df.jpeg)
![6. 2周目-32.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1702786/e349f791-bd52-ef29-0709-ac106cc2b395.jpeg)
![6. 2周目-33.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1702786/56412fda-b923-90da-ed61-bacf5666da9f.jpeg)

## 参考文献

- 『[現代数理統計学の基礎](https://www.kyoritsu-pub.co.jp/bookdetail/9784320111660)』(久保川達也　著)
Python勉強⑤ Pandas quantile 2020/06/22

q分位数(q-quantile)とは分布をq:1-qに分割する値。
q/100分位数をqパーセンタイルという。（Wikipedia）

例えば25%タイルが欲しければquantile(0.25)として指定する。

記憶しやすいようdatetimeと合わせてダイエット記録（フィクション）をpandasでいじってみる。

~~~
import pandas as pd

df = pd.DataFrame({'weight': range(50, 60),
                   'fat': range(25, 35),
                   'date': range(1, 11)})



df['date'] = pd.date_range('2019-01-01', '2019-01-10')

print(df)
~~~

出力
~~~
   weight  fat       date
0      50   25 2019-01-01
1      51   26 2019-01-02
2      52   27 2019-01-03
3      53   28 2019-01-04
4      54   29 2019-01-05
5      55   30 2019-01-06
6      56   31 2019-01-07
7      57   32 2019-01-08
8      58   33 2019-01-09
9      59   34 2019-01-10

~~~

体重も体脂肪も微増していく悲しい記録。

何も指定しなけば50%タイル値になる
~~~
print(df.quantile())

weight    54.5
fat       29.5
Name: 0.5, dtype: float64
~~~

numeric_onlyをFalseにすることで数値ではないdatetime型にも適用される。まだ1/5はマシだったのに...
~~~
print(df.quantile(numeric_only=False))

weight                   54.5
fat                      29.5
date      2019-01-05 12:00:00
Name: 0.5, dtype: object
~~~


20%タイルの時点で食生活を改めていれば...
~~~
print(df.quantile(0.2))

weight    51.8
fat       26.8
Name: 0.2, dtype: float64
~~~

リストで指定することで各パーセンタイルを一度に指定することも可能。
~~~
print(df.quantile([0, 0.25, 0.5, 0.75, 1.0]))

      weight    fat
0.00   50.00  25.00
0.25   52.25  27.25
0.50   54.50  29.50
0.75   56.75  31.75
1.00   59.00  34.00
~~~

さぁ今日からヘルシーにいこ。





参考サイト
note.nkmk
https://note.nkmk.me/python-pandas-quantile/
書籍要約　「自分の頭で考える読書」

# 何が書いてあるか
読んだ本の要約化で理解と記憶の定着化を目指します。
**あくまで個人のエッセンスの列挙になります。実際の内容はこの何十倍も示唆に含まれている素晴らしい書籍です。この素晴らしさを一人でも多くの方が知るキッカケになれば嬉しいです**

# 読んだ本
**[自分の頭で考える読書 変化の時代に、道が拓かれる「本の読み方」](https://www.amazon.co.jp/%E8%87%AA%E5%88%86%E3%81%AE%E9%A0%AD%E3%81%A7%E8%80%83%E3%81%88%E3%82%8B%E8%AA%AD%E6%9B%B8-%E5%A4%89%E5%8C%96%E3%81%AE%E6%99%82%E4%BB%A3%E3%81%AB%E3%80%81%E9%81%93%E3%81%8C%E6%8B%93%E3%81%8B%E3%82%8C%E3%82%8B%E3%80%8C%E6%9C%AC%E3%81%AE%E8%AA%AD%E3%81%BF%E6%96%B9%E3%80%8D-%E8%8D%92%E6%9C%A8-%E5%8D%9A%E8%A1%8C/dp/4534059019/ref=sr_1_1?keywords=%E8%87%AA%E5%88%86%E3%81%AE%E9%A0%AD%E3%81%A7%E8%80%83%E3%81%88%E3%82%8B%E8%AA%AD%E6%9B%B8&qid=1655940369&sprefix=%E8%87%AA%E5%88%86%E3%81%AE%E9%A0%AD%E3%81%A7%2Caps%2C268&sr=8-1)**
荒木博行著
2022年に出版された本です。

[<img width="150" alt="1.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83103/1ce34afa-9a43-0a97-677b-624e20507c63.jpeg">](https://www.amazon.co.jp/%E8%87%AA%E5%88%86%E3%81%AE%E9%A0%AD%E3%81%A7%E8%80%83%E3%81%88%E3%82%8B%E8%AA%AD%E6%9B%B8-%E5%A4%89%E5%8C%96%E3%81%AE%E6%99%82%E4%BB%A3%E3%81%AB%E3%80%81%E9%81%93%E3%81%8C%E6%8B%93%E3%81%8B%E3%82%8C%E3%82%8B%E3%80%8C%E6%9C%AC%E3%81%AE%E8%AA%AD%E3%81%BF%E6%96%B9%E3%80%8D-%E8%8D%92%E6%9C%A8-%E5%8D%9A%E8%A1%8C/dp/4534059019/ref=sr_1_1?keywords=%E8%87%AA%E5%88%86%E3%81%AE%E9%A0%AD%E3%81%A7%E8%80%83%E3%81%88%E3%82%8B%E8%AA%AD%E6%9B%B8&qid=1655940369&sprefix=%E8%87%AA%E5%88%86%E3%81%AE%E9%A0%AD%E3%81%A7%2Caps%2C268&sr=8-1)

# 出会ったきっかけ
Podcast番組「超相対性理論」のスピーカーが上梓されたと紹介されていました。

# 要約（本編）
### 序章
・グローバリゼーションと自由化で世界中に変化の伝播が、高頻度・大規模に行われるようになった。つまり変化の激しい世界になった。
・こういった環境で情報のアップデートが早くなる。ついていくためには学習が必要だが、本質を捉える抽象的な捉え方でないとすぐ役に立たなくなる。経験も抽象化することが重要。
・思いつきや思い込みを抽象化と勘違いすると、せっかくの新しい学びに蓋をしてしまうことになるので注意。
・本を通して何人分もの経験や視点を得て、抽象化のトレーニングを行える。

### 第１章「なぜ今本なのか？」
・情報の取得効率性では劣るが、余白があること、適度なスピード感、圧が少ないことで自身で考えながら学習できることが本にある魅力。
・色んな解釈ができるので、読むシチュエーションで色んなものを受け取れる。読み手と書き手の共創。
・受け手の感受性が高まっている心が高ぶっている時が読書チャンス。
・べき論から離れる。その上のそもそもの視点で読むことが大切。

### 第２章「どんな本を選ぶのか？」
・３種類ある、新たな問いをもたらすもの、新たな答えをもたらすもの、既知の答えをリマインドさせてくれるもの。

### 第３章「本を通して問いを立てる」
・現実で抱えている具体的な問いを、抽象化して本に向き合う。琴線に触れた事柄を自分の今のシチューエーションに還元するとどういうことかで具体化する。
・具体→抽象→具体の往復だが、三段跳びで最初よりより遠くの場所に飛べる。

### 第４章「読書の病を治療しよう」
・完璧な読書を求めないようにする、相性やタイミングがある。ただし、何が書かれている本かは将来必要になったときのために記憶しておく。背表紙が見える状態で置いておければ最高。自分のに図書一覧を作って分類分けするイメージ。この広がりと場所を認識できる力が教養。
・１つの本にコミットしようとしない。
・積読は悪くない、囲まれて圧を受けて謙虚な気持ちにさせてくれるだけで良い。自律的な世界観を作るのに役立つ。常にここではなどこかの世界との比較の参照点をもつこと。
・スマホを触るのをやめて読書の時間を確保しよう。

### 第５章「読書が役に立つとはどういうことか？」
・情報を得るための読書と、情報を得る眼を養うための読書がある。
・役に立つかという問いの外側に立つことが読書である。
・予想だにしない出会いをフィルターしないために無責任、軽薄、不真面目に読む。
・アイデアの結実は、スノードームに例えられる。何気なくまず知識や技術を沈殿させておく、かき回されて舞い上がった沈殿物が結びついて新たなアイデアとなる。この現象を誘発させるためには、アウトプットして刻み込むことが大切。書いたり話したり。

### 第６章「本を読むとは自らを生きるということ」
・共感と疑いのバランスを考える。共感７割、懐疑３割。本は読み終えたら処理済みにして忘れることではない。問いは続く。
・アートはエンジニアリングではない、最初に設計図があるのではなく、フワッとした思いで種をまき、起きることや関係しあいながらどう育つかを眺めること。
・ネガティブケイパビリティを鍛える。すぐ答えを出さなくて良いことに焦って拙速に解決策を出すべきでない。答えをホールドしてもやもやを抱え続けられ得る能力。一段と深い問いは浅い答えより貴重。

### 感想
・自分に感じたことは、自分は問いを育てようと全くしてこなかったこと。反射的に答えを出すことばかりに眼が向いており、焦って浅い答えになっていたこと。

最後までお読みくださりありがとうございました。
GCPアカウント作成してみた

# はじめに
“エンジニアファーストの会社　株式会社CRE-CO”のクワバラと申します。

GCPをほかのクラウドサービスと比較して使ってみたいため、アカウントを作成してみたいと思います。
ついでに無料利用枠についても少し解説できればと思います。

需要があるかは置いておいて、、、

それでは、レッツゴー！！
## 無料利用枠について
### 90 日間 $300 相当の無料トライアル
GCPでは90日間限定ですが、新規ユーザー向けに、$300相当の無料トライアルをすべてのサービスに対して利用することができる。
アカウント登録が完了すると自動的に開始される。
無料トライアル期間が終わると、利用中サービスが一時停止されて課金される心配はない。
利用し続けたい場合、有料アカウントにアップグレードする必要があります。

※詳細に確認したい方は[無料利用枠について](https://cloud.google.com/free/docs/gcp-free-tier/#free-trial)を確認することを推奨します。

### 無料枠プロダクト
無料枠（永久）では、使用量上限の枠内で多くのサービスに対して無料で使用することができる。
無料枠リソースは通常、1 か月間隔で提供される。
無料枠のリソースはクレジットではないため、期間をまたがって累積することや、繰り越されることはない。

注意）無料枠の使用量上限を超えると、標準料金が自動的に課金されます。
[予算とアラート](https://cloud.google.com/billing/docs/how-to/budgets)を参照して設定することで、費用のモニタリングと管理を行うことはできる。

[無料枠の使用量上限](https://cloud.google.com/free/docs/gcp-free-tier/#free-tier-usage-limits)についてはこちらで確認できます。

※詳細に確認したい方は[無料利用枠について](https://cloud.google.com/free/docs/gcp-free-tier/#free-tier)を確認することを推奨します。

## アカウント登録方法
アカウント登録について説明させていただきたいと思います。
### 1. 右上の「無料で開始」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/f65359e2-e180-7c8e-48ae-66fa9ca762af.png)

### 2. Googleアカウントにログインする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/6790adeb-517f-79dd-0217-a7361b56de89.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/9739b3d7-d07a-7a60-8612-fea0461d4999.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/e2854a12-d1c5-9222-5257-408ae6b2988e.png)
※特に設定することもないため今回は「後で行う」を選択しました。

### 3. アカウント情報の入力を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/8f0919b6-a4dc-d377-727a-289ad329f15a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/4365b86e-1222-1cff-3f04-9eab1b111640.png)
※アカウント登録時の注意事項及び説明
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/66318c96-9bc5-9523-b555-496f971ce51e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/fb01220d-7b61-0a0e-c548-ae57dfd85c78.png)
※入力した電話番号宛てに来た確認コードを入力する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/d0c60a8e-ddaa-8c15-30c4-972f34be6042.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/95071dc9-254f-dd62-40f5-9fb83028ce00.png)
※情報の入力が完了したら、「無料トライアルを開始」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/933edb89-b21b-24b3-6565-ce37b24ce078.png)
※アンケートが表示されるため、「閉じる」でも問題ない（次画面に移行）です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/fd3671b8-edb6-84fc-1bcb-e5934916047e.png)
※「今回はスキップ」を選択することで上記画面が消えます。

### 4. ホーム画面になっていることを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/caabd58a-e139-3d0a-426e-eca40aa4acf1.png)

# おわりに
Googleアカウントとの互換性が高かったので楽に登録できたと思います。
また、無料利用枠についても他のクラウドと比較しても理解しやすい日本語で説明してあるのでとても良いなと個人的には感動しました。
（日本語って母国語なのに難しい時ってあるじゃないですか、、、）

今後はこのGCPを用いて無料でサービスの検証をしていきたいと思います！！

こんなクワバラの他愛もない記事を最後までご覧いただきありがとうございました！
cscの作法 その209

# 概要
cscの作法、調べてみた。
サイトの証明書、叩いてみた。
httpclient使ってみた。

# サンプルコード

```


using System.Collections;
using System.IO;
using System;
using System.Text;
using System.Net;
using System.Net.Http;
using System.Security.Cryptography.X509Certificates;

namespace app
{
	class test0 {
		private static void PrintCertificate(X509Certificate certificate) {
			Console.WriteLine("===========================================");
			Console.WriteLine("Subject: {0}", certificate.Subject);
			Console.WriteLine("Issuer: {0}", certificate.Issuer);
			Console.WriteLine("Format: {0}", certificate.GetFormat());
			Console.WriteLine("ExpirationDate: {0}", certificate.GetExpirationDateString());
			Console.WriteLine("EffectiveDate: {0}", certificate.GetEffectiveDateString());
			Console.WriteLine("KeyAlgorithm: {0}", certificate.GetKeyAlgorithm());
			Console.WriteLine("PublicKey: {0}", certificate.GetPublicKeyString());
			Console.WriteLine("SerialNumber: {0}", certificate.GetSerialNumberString());
			Console.WriteLine("===========================================");
		}
		static void Main() {
			ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
			string url = "https://google.com/";
			var httpClientHandler = new HttpClientHandler {
				ServerCertificateCustomValidationCallback = (_, cert, __, ___) => {
					PrintCertificate(cert);
					return true;
				}
			};
			HttpClient client = new HttpClient(httpClientHandler);
			string response = client.GetStringAsync(url).Result;
			Console.WriteLine("ok");
		}
	}
}


```

# 実行結果

```
===========================================
Subject: CN=www.google.com
Issuer: CN=GTS CA 1C3, O=Google Trust Services LLC, C=US
Format: X509
ExpirationDate: 2022/08/29 18:39:59
EffectiveDate: 2022/06/06 18:40:00
KeyAlgorithm: 1.2.840.10045.2.1
PublicKey: 043F0EEDC5D648F42187F1A286A262FA076DA52D2F02DD8678344705A55E07CC79743B71DEEB364C65B658919F0BB55E4951C25F5B835E48C020E4DAB8C5230AED
SerialNumber: 009F074B11745F16FC122375FA587993F0
===========================================
ok
```

以上。
簡易的な AWS の EC2 設定ができているか比較して確かめる用の CFn 

## 目的

元々は社内のメンティーの方に向けて作ろうと考えていましたが、公開してもいいかなと思い投稿します。

AWS をまだあまりちゃんと触ったことがない方用に、EC2 や VPC を設定して、うまく疎通して設定できているかを比較するためのテンプレートを作成しました。

初めて VPC を作成する方はなんで疎通ができていないかわからずにつまづきやすいと思います。(私がそうだったので)
もし、疎通ができているサンプルがあれば、比較することで色々検証に役立つかなと考えたので、使っていただけると嬉しいです。

## レポジトリ

https://github.com/itsuki-n22/simple-nginx


## 使い方

0. AWS CLI を[インストール](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html)
1. `git clone git@github.com:itsuki-n22/simple-nginx.git`
2. `cp params.cfg.sample params.cfg`
3. `aws ec2 create-key-pair --key-name simple-nginx | jq -r '.KeyMaterial' > simple-nginx.pem`
4. `aws cloudformation deploy --stack-name simple-nginx --template-file template.yml --parameter-overrides $(cat params.cfg)`
5. 5~10分待つ
6. `aws ec2 describe-instances | jq '.Reservations[].Instances[] | select(.KeyName == "simple-nginx") | .PublicIpAddress'`
7. `http://x.x.x.x` へアクセスする。 (x.x.x.x は 6. で取得した IPアドレス)
    - ※ http であることに注意してください。

## アクセスすると

![スクリーンショット 2022-06-20 23.00.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632997/d83fb455-dcdc-e829-03cb-c7ee2aca6ca3.png)

## SSH でアクセス

一応、 EC2インスタンス には nginx と aws-cli がインストールされているので、色々試したい方は SSH で中に入っていじることも可能です。

8. `chmod 600 simple-nginx.pem`
9. `ssh -i ./simple-nginx.pem ec2-user@x.x.x.x` (x.x.x.x は 6. で取得した IPアドレス)

## 後片付け

1. インスタンス削除
    - `aws cloudformation delete-stack --stack-name simple-nginx`
1. キーペア削除
    - `aws ec2 delete-key-pair --key-name simple-nginx`


## 後書き

不備があればご指摘いただけると嬉しいです。
また、[ツイッター](https://twitter.com/Itsuki_n22)もフォローしていただけると嬉しいです :bow:
Ansible 小ネタ: TASK [debug: { msg: "{{ 'yes' }}" }] **** の樣なTask nameのエスケープ

備忘

# Task nameにJinja2構文やシングルクォート、ダブルクォートを含む情報を入れる場合、!unsafe >-による型指定と行の継続が有効


# task例

```yaml
  - name: !unsafe >-
      debug: { msg: "{{ 'yes' }}" }
    debug  : { msg: "{{ 'yes' }}" }
```
!unsafe 型指定により、Jinja2による解釈を停止
\>- により文字列全体を " や ' で囲う必要性を取り除き、内部の " や ' に対するエスケープを不要としている

なお、この例では、2行目に # による行末コメントを追加すると、それもTask nameに含まれるので注意

# 実行例

```
TASK [debug: { msg: "{{ 'yes' }}" }] *******************************************
ok: [localhost] => {
    "msg": "yes"
}
```
値が100を超えたらフラグ立てる/抽出する(SPSS Modeler データ加工逆引き3-5)

# 値が100を超えたらフラグ立てる/抽出（任意の範囲のフラグ化と抽出）

![スクリーンショット 2022-06-23 9.05.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/9fc62027-5c7d-42f7-4529-437372b230a8.png)

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

・特定の実績を持つ顧客の優良顧客認定や抽出
・異常検知や故障予測のための特徴量の作成とデータ準備


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

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

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

![スクリーンショット 2022-06-23 9.05.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f1d98a80-5a27-d8e0-d596-d4337829607f.png)

a.入力するデータは以下の通りです。
![スクリーンショット 2022-06-23 9.14.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/a2f7e3e8-28a6-bbff-0a80-bae520ab6b6b.png)

b.[フィールド作成]ノードを編集します。[派生]モードが[フラグ型]にしてあるため真の条件を記述します。温度が100度以上にはフラグを立てます。
![スクリーンショット 2022-06-23 9.11.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/992fa4fc-97d9-8817-8b46-870a72082c8a.png)

式ビルダーの演算子を利用すると簡単に入力できます。
![スクリーンショット 2022-06-23 9.12.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f7bb0018-95b0-c524-a55e-054da7d8e16d.png)

[プレビュー]をします。[100度以上]を識別するフラグ列ができています。
![スクリーンショット 2022-06-23 9.13.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/3d9eab19-aca7-6720-1616-2037d18d2aad.png)

c.100度以上105度未満の範囲でフラグを作ります。
![スクリーンショット 2022-06-23 9.12.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/35e51ea9-251d-aef4-af6f-1e0e8f42a042.png)

[プレビュー]をします。[100度以上105度未満]を識別するフラグ列ができています。
![スクリーンショット 2022-06-23 9.13.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c94dfd42-c9b3-1b6b-6d99-d16a2073f8bd.png)

d.[条件抽出]ノードで100度以上105度未満のレコード（行）を抽出します。
![スクリーンショット 2022-06-23 9.43.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/8605175a-6ed3-db49-faff-f6d44fc65d6a.png)

[プレビュー]をします。２レコードが抽出されました。
![スクリーンショット 2022-06-23 9.14.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/9719ae63-ef5b-266c-b782-d7a5c2cb05ba.png)


#### 注意点
範囲の記述を[100　<= 温度 < 105] としたくなりますが検査の時点でNGになります。and条件で
[温度 >= 100　 and  温度 < 105]とする必要があります。日付による期間のフラグ化/抽出も同様です。

## 4.参考情報

#### フラグ化を解説した記事

https://qiita.com/416nishimaki/items/9c8109ab7a2c1838392e#%E4%BB%96%E3%81%AE%E6%B4%BE%E7%94%9F%E6%96%B9%E6%B3%95%E3%83%95%E3%83%A9%E3%82%B0%E5%9E%8B%E3%81%A7%E5%B9%B4%E9%BD%A2%E3%81%8B%E3%82%89%E3%82%B7%E3%83%8B%E3%82%A2%E3%83%95%E3%83%A9%E3%82%B0%E4%BD%9C%E6%88%90

#### ヒストグラムを利用して範囲を抽出する方法

https://qiita.com/416nishimaki/items/dcb99c48dde67c5adc9a#%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%A7%E9%A0%98%E5%9F%9F%E6%8C%87%E5%AE%9A%E3%82%92%E3%81%97%E3%81%A6%E6%9D%A1%E4%BB%B6%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B

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

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

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

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
SolidJSで.env(環境変数)を使う方法

[SolidJS](https://www.solidjs.com/)のチュートリアルを行なっている最中、環境変数ってどうやるんだろう？と思い調べた所、下記の方法で実装できました。

SolidJSはビルドツールとして `Vite` を使用しています。
なので、Viteのルールで環境変数を呼び出しましょう。

## やり方

#### .envの作成
プロジェクトのルートディレクトリに `.env` ファイルを作成します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206790/b9406c3c-c419-4185-7403-5b112a92cda3.png" width="300">

#### 記述ルール
.envの中身はこのように記述。
VITE_~~ というルールで記述します。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206790/87bb6858-864b-c740-26f7-0b4c447e399c.png">

#### 呼び出し方

下記を参考にしてください。
[Vite:環境変数とモード](https://ja.vitejs.dev/guide/env-and-mode.html)


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206790/e26780b8-49b6-0053-985e-e1cd70678161.png" width="５00">

#### 結果

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206790/ae894ebd-6890-a3a8-fdd9-ead22fae7449.png" width="300">

---



SolidJSはReactにとても似ていて、とても書きやすいですね。
ドキュメントがあまりなくて一苦労する場面もありますが、面白いです!!
【備忘録】ArdupilotでTF MINI Plus を I2Cで動かす

## はじめに
Benewake社のTF MINI Plus（測距センサー）をI2Cで使うまでの方法について記載していきます。
このセンサを使用して車体の進行方向にある壁等を検出して停止できるような車体を構成したいと考えています。

## TF MINI Plusについて
TFMini-Plusは赤外線の反射時間を基に距離を測定する単焦点LiDARです。
反射率90%の場合0.1m～12mまで、反射率10%の場合0.1m～7mまで測定することができます。
視野角（FOV）が3.6度と狭い為、2DLiDARの様に広範囲に渡って障害物を検出することが出来ませんが、車体の進行方向にある壁等に対する回避（停止）を目的として使用します。

## 手順
1. モードを設定する
2. IDを確認する
3. パラメータ設定
4. 動作確認

#### 1.　モードを設定する
TF MINI Plusは初期状態ではシリアル（URAT）で通信するように設定されています。
I2Cで使用する為にはシリアルモードで設定変更を行います。
設定変更に必要なコマンドは以下となります。

・I2Cモードへ切り替え
・I2Cアドレスの設定
・設定の保存

TF MINI Plusのマニュアルより送信するコマンドは

・アドレスの変更　：　`5A 05 0B Address CheckSUM`
・通信モードの変更　：　`5A 05 0A MODE CheckSUM`
・設定保存　：　`5A 04 11 6F`

を送信すれば良いという事がわかります。
I2Cモードへの切り替えとI2Cアドレスの割り当てとチェックサムを付与したコマンドを送信します。
チェックサムは左側を最上位とした場合、上位4byteまでの値を加算して得られた値を0x100で割った余りとなります。
IDを0X12に設定した場合、チェックサムまで含めた送信コマンドは以下の様になります。

・アドレスの変更　：　`5A 05 0B 12 7C`
・通信モードの変更　：　`5A 05 0A 01 6A`
・設定保存　：　`5A 04 11 6F`

#### 2.　IDを確認する
ラズパイやArduinoを用いてID検索を行い設定したIDが記載されているか確認を行います。

・ラズパイを使用する場合　：　`i2cdetect`コマンドを使用してIDを確認してください
・Arduinoを使用する場合　：　i2c_scannerを等で確認してください

#### 3.　パラメータ設定
AutoPilotのI2C端子に配線を接続しMisson Planserでパラメータの設定を行います。
AutoPilotの端子配列については[こちら](https://qiita.com/Fumi_Saito/items/70bf8d61549cce47aa87)に例を記載しています。

Mission Plannerで`RNGFND1_ADDR`の値を設定したアドレスを指定したときに検出できていればOKです。
以下のパラメータの設定内容については[Ardupilot で障害物検出を行う（その1）](https://qiita.com/Fumi_Saito/items/c9c2f735dc9351b5e5e7)で設定した値を基にTF Mini Plusに合わせて修正したものです。

#### 設定例
TF MINI-Plus を2個使用しIDを0X10, 0X12 とした場合の設定について以下に記載します。

<B>回避の設定</B>
|パラメータ|値|備考|
|-|-|-|
|AVOID_ENABLE|7|回避入力ソース ⇒ すべて使う|
|AVOID_MARGIN|1|ここでは1mとしています（機体に合わせて設定してください）|
|PRX_TYPE|4|接続されている近接センサーの種類 ⇒ RangeFinder|

<B>1個目のセンサ</B>
|パラメータ|値|備考|
|-|-|-|
|RNGFND1_ADDR|16|I2Cアドレス|
|RNGFND1_MAX_CM|400|接続している距離計の最大距離 ⇒ 4m|
|RNGFND1_MIN_CM|30|接続している距離計の最小距離 ⇒ 0.3ｍ|
|RNGFND1_ORIENT|0|前方|
|RNGFND1_TYPE|25|TFmini-Plus I2C|

<B>2個目のセンサ</B>
|パラメータ|値|備考|
|-|-|-|
|RNGFND2_ADDR|18|I2Cアドレス|
|RNGFND2_MAX_CM|400|接続している距離計の最大距離 ⇒ 4m|
|RNGFND2_MIN_CM|30|接続している距離計の最小距離 ⇒ 0.3ｍ|
|RNGFND2_ORIENT|4|後方|
|RNGFND2_TYPE|25|TFmini-Plus I2C|

:::note
<B>230214追記</B>
回避に関する設定項目を分けました
:::

:::note
<B>メモ</B>
※　RNGFNDx_：設定するセンサが何番目となるかで x の値が変わります
※　RNGFNDx_ADDRI2C：手順1で設定したアドレスの値を10進で入力します
:::

#### 4.　動作確認
Misson Planner起動中であれば以下の方法で確認することが出来ます

##### ① レーダーチャートを表示させる
「ctrl+F」⇒Temp画面から「Proximity」をクリック，もしくは「初期設定」⇒「Advanced」⇒「Proximity」でレーダーチャートを表示します。
センサーの前に手をかざし赤いマーカーの位置が変わればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1064722/dbfab6ac-0d10-df2b-a74b-71199cb9f2fd.png)

##### ② ステータスから確認
「ステータス」から「sonarrang」を探してください。
センサーの前に手をかざし数値が変わればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1064722/e6105c2c-1ddf-7775-67bb-414f27671a80.png)

## 動作確認
上記の確認が終わりましたら車体に取り付け、車体に搭載した状態で再確認をしてください。
センサーの前に障害物を置き、車体が停止することを確認できればOKです。

## 参考
https://discuss.ardupilot.org/t/avoidance-experiments-with-the-new-poc-and-benewake-tfmini-s/58305

https://jidounten-lab.com/u_sensor-4
未経験が読む「コンピュータシステムの理論と実装」#3

# はじめに
本記事は「コンピュータシステムの理論と実装」の勉強会の記録第3回となります。

前回ALU（算術論理演算機）の実装が終わり、今回はメモリを組み立てていくことになります。
この章が終わればハードウェアのパーツは完成です。
第5章では1〜3章のパーツを組み合わせてハードウェアは完成するようなので、非常に楽しみですね！

実装の部分についてはこれまでの記事と同様、私が詰まった部分をヒントとして残していきます。

# 3章の感動ポイント
#### 記憶を維持する"メモリ"
「時間の経過によりデータを失うことなく保存でき、また引き出したい時にそのデータを引き出せる」という超便利アイテム"メモリ"が作れてしまいます。
今まで作ってきたCHIPだけでそれができてしまうのが驚きです。

#### 1章の伏線回収
1章で「これなんで作ったの？」と疑問に思っていたCHIPを使います。
「ここで伏線回収……！」という少年マンガのような感動がある、と先輩エンジニアさんが言っていました。たしかに！

#### 偉人の軌跡を感じるフリップフロップ回路の登場
ちなみに、Apple創業者たちを描いたマンガ「スティーブズ」の冒頭で、ウォズニアックが「♪フリップ フロップ」と歌っています。彼らもこうして（※ただし物理的に）コンピュータを作っていったのかもしれません。

# 3章実装のヒント
作る順序は
Bit
Register
RAM小さい順
PC
がよさそうです。
少し詰まったのはBit、RAM8、RAM16KでしたがALUやMUXなどに比べると簡単かもしれません。<br>


#### 多bitピンを分割するテクニック
前章のヒント内で紹介しましたが、見逃した方のために。(実装例は正解ではありません)
```
CHIP RAM16K {
    IN in[16], load, address[14];
    OUT out[16];

    PARTS:
    // Put your code here:
    // address[3..5]のように書くことができます。
    RAM8(in=in, load=address[0], address=address[3..5], out=out);
}
```

#### outピンを2回以上出力するテクニック
「最後の出力を入力ピンに入れたいのに、outを他のピンに代入できない」という問題が起きました。
こんな記載方法があります。
```
Nand(a=a, b=b, out=out1, out=out);
```
#### 各CHIPのヒント
※以下に答えは載せていません。あくまでヒントです。
<details><summary>Bit</summary><div>
図3-1のとおりなのですが、そのとおりに実装したつもりがテストを通りませんでした。<br>
"逆"になってませんか？
</div></details>

<details><summary>RAM8</summary><div>
P.54のヒントが神。<br>
「なんでこれ作ったんだろう？」と思っていたCHIPがここで使われます。<br>
使うパーツはわかったものの、そのCHIPへの入力に何を使えばいいか考えるのが複雑でした。落ち着いて整理しましょう。<br>
また、outピンは一度しか使えません。<br>
8本ありそうな出力を1本にまとめるCHIPが必要です。
</div></details>

<details><summary>RAM16K</summary><div>
8, 64, 512, 4Kと進められた人なら難しくないはず。<br>
ワンパターンだと思って実装したらエラーが出て少し頭を捻りました。<br>
<br>
8→64→512→4k　と　4k→16k　　規則が違いますね。

</div></details>

<details><summary>PC</summary><div>
Registerを通ると、これまでの時間がt-1という過去になります。<br>
<br>
また、3.2.4の仕様の部分を見てください。<br>
inc,load,resetの中で、他の2つによらず結果を出せる"強力な"セレクターはどれでしょう。<br>
さらに残った2つの中で、もう一方によらず結果を出す"強力な"セレクターは？<br>
<br>
"強力"なほど、先に書くべきですか？後に書くべきですか？

</div></details>

# 3章を読み終えた私の感想
PCを最初に発明した人は本当に間違いなく天才ですね。
NAND回路から始まり、NANDだけで種々の回路を作り、ALUのような複雑な回路を作りました。
そしてメモリというデータを記憶するパーツを作りました。
インターネットやPCに関する知識が広まった今だからこそ容易に思いつく構造を、何十年も前に考案し、今我々が使っているシミュレータとテストが存在しない中、物理的に作りあげています。
私たちはDFFを実装済みCHIPとして使わせてもらえますが、当時の人はDFFすら自分で作り上げなければならなかったはずです。

そんな偉人のPC開発の軌跡を追うのは、ロマンを追いかけているようで心が躍ります。

4章以降も楽しみです。
データ分析ライブラリのpandasについて

# はじめに
始めまして、株式会社ジール所属の@hiroaki_yoshidaです。
普段はAWSやPythonを使った開発を行っています。
開発に携わるにあたり、現場で学んだ事をアウトプットしていこうと思います。

今回はPythonの __pandas__ というライブラリについて書いています。
データ分析基盤ではETL処理などで利用されています。

# pandasについて
pandasとはPythonのデータ分析ライブラリの1つです。
データ分析ライブラリとしてはほかには __numpy__ や __matplotlib__ などがあります。
今回は比較的よく使うpandasを扱います。

# pandasの基本知識
ここではpandasを利用するにあたって抑えておきたい単語について解説します。
### 1.Series
pandasで扱われるデータ構造の一つで、単一列で構成された表になります。
※インデックが付与されている為2列になっています。インデックスについてはのちほど説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2166184/c42bfebc-a0f4-b96d-de30-bcfce3da2d92.png)

### 2.DataFrame
pandasで扱われるデータ構造の一つで、複数列で構成された表になります。
Seriesをまとめたものになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2166184/0fa7c819-8110-aa35-f06d-e0aea59e74f2.png)

### 3.index
行ラベルの事、SeriesやDataFrameに付与することができます。
インデックスを利用して行データにアクセスすることも可能です。
インデックスは自動的に付与されますが、不要であればオプションで付与しないこともできます。
また、任意のカラムをインデックスとすることも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2166184/3f0d9c22-7077-e6ce-655f-1f6a74b9b147.png)


### 4.columns
列に対して付与することのできるラベルです。
columnsを利用してDataFrameのカラム情報を取得することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2166184/7130b222-6c10-39c6-e954-c13d2e3b1ff3.png)


# pandasを利用するには

まず、利用にあたってpandas のインストールをしなくてはいけません。
インストールする際は下記pipコマンドを利用してインストールをおこなってください。

```
pip install pandas
```

実際にコーディングする際はimport文を書くのですが、pandasは多くの場合に別名であるpdとしてインポートします。

``` python
import pandas as pd
```

毎回モジュールを利用する際にpandasって書くよりもpdの方が楽ですよね！


# 簡単なサンプルコード
下記は基本知識で表示していたDataFrameの作成をしているコードです。

```python
#pandasをimportする文です。例の如くpdにリネームしています。
import pandas as pd

#DataFrameにするための元データを作成してdataという変数に入れています。
data = [["山田",20],["吉田",27],["鈴木",22],["佐藤",25],["木村",28]]

#作ったdataという変数を用いてDataFrameを作成しています。
#その際にカラム名をcolumns = []で指定しています。
#作成したDataFrameはdfという変数に格納します。
df = pd.DataFrame(data,columns=["name","age"])

#DataFrameの中身を確認しています。
df
```


Jupyter notebookでは下記の様に表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2166184/d54000f3-9258-fb2c-c89f-5f3b7e3246bd.png)


# まとめ
今回はデータを手作業で作成し、dataという変数へ格納し、さらにその変数を利用してDataFrameを作成しました。
実はpandasではCSVやparquetなど様々な種類のファイルを読み取ることでDataFrameを作成することができます。
扱えるフォーマットファイルについては下記URLが参考になるかと思います。
https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html?highlight=format%20file

次回はpandasを使ったデータ加工についてSQLとの書き方の比較の記事を作成予定です。

>株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください：

https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area
Railsのrakeタスク

# 定義されているタスクの確認
```
% bundle exec rake -T
```

# rakeタスクの作成
## ファイルの作成
```
% rails g task :namespace :task_name
```
lin/tasks/task_name.rbが作成される。
## 作成されたファイル
```ruby:task_name.rb
namespace :namespace do
 desc "TODO"
 task task_name: :environment do
 end
end
```
## 実行したい処理を記述
```ruby:task_name.rb
namespace :task_name do
 desc 'あいさつをする'
 task task_name: :environment do
  puts 'おはようございます'
 end
end
```
`desc`には処理内容の説明を記載する。
`:environment`はRailsで準備されているenvironmentタスクを先に実行している。

# rakeタスクの実行
```
% bundle exec rake namespace:task_name
```
Go言語で Codewars の問題を解くための設定

# はじめに

Codewars の Go の問題はテスティングフレームワークとして Ginkgo https://onsi.github.io/ginkgo/ を使っているけれど、このフレームワークの使い方がわからなて試行錯誤して一応問題を解く上では困らなくなったのでメモを残す。
手順は以下の通り

 - 作業ディレクトリの作成
 - モジュールの初期化
 - フレームワークのダウンロード
 - テストコードのコピー・ペースト
 - テストの実行

Codewars ではパッケージ名に kata を使うのが一般的なようなので、モジュール名を codewars、パッケージ名を kata にする。

## 作業ディレクトリの作成

```
mkdir -p codewars/kata
```

## モジュールの初期化

```
cd codewars
go mod init codewars
```

## フレームワークのダウンロード

ginko は v2 を使うことにした。特に理由はないが、Codewars のテストコードは v2 を使うように後で変更する。

```
go get github.com/onsi/ginkgo/v2
go get github.com/onsi/gomega
```

## 雛形のコピー、修正

```
cd kata
cat > kata.go
cat > kata_test.go

sed -i 's#ginkgo#ginkgo/v2#' kata_test.go
```

## テスト実行(テストースイートの雛形作成)

```
ginkgo bootstrap
go test -v
```

#### トップディレクトリでテスト実行する場合

```
go test -v ./...
```

あとはコード書きながらテストする。
日本語のコード変換（都道府県名）

都道府県名のコード変換
ブラウザ画面ではデコードされて表示されているけど、ソースコード内ではコードで書かれている時に curl 等ど見たい時に予め変換しておく

コード変換コマンドを使ってもいいけど
都道府県以外が入れられてもエラーなので、エラーチェックしつつ、該当コードに置き換える感じのやつ

```
#!/usr/bin/env bash


PREFECTURES="北海道"

declare -A PREFECTURES_TABLE=(
        ["北海道"]="&#21271;&#28023;&#36947;"
        ["青森県"]="&#38738;&#26862;&#30476;"
)


if [ -n "${PREFECTURES_TABLE[$PREFECTURES]}" ]; then
        echo "OK $PREFECTURES"
        echo "${PREFECTURES_TABLE[$PREFECTURES]}"
else
        echo "Incorrect input"
fi
```
Macでスクリーンキャプチャを取ってgifアニメーションに変換する

こんにちは。
[リケイのオコジョ](https://twitter.com/mounmou_design)です。

技術記事を書くにあたって、UIの操作感が視覚的にわかるgifアニメーションがあると良いですよね。
今回はMacでスクリーンキャプチャを取ってgifアニメーションに変換する方法を書きます。

![ocby3fth89cigb3sbr6z.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710694/91068520-a6bd-b098-9029-fb71cf79b8d6.gif)

# スクリーンキャプチャを取って動画として保存する
「shift」「command」「5」の3つのキーを同時に押します。
ツールバーが出てくるので、キャプチャを撮りたい範囲を選択し「収録」をクリックすることで画面の動きの撮影が開始されます。

撮影を止める時は「command」「control」「esc」の3つのキーを同時に押します。
この時点ではmovファイルとして保存されます。

# ffmpegでgifアニメーションに変換する
ffmpegコマンドでアスペクト比を保ちながら任意のサイズ（以下では幅1280px）のgifアニメーションに変換することができます。

```bash
$ ffmpeg -i capture.mov -r 24 -vf "scale=1280:-1" capture.gif
```

# 参考
https://support.apple.com/ja-jp/HT208721
Webページのリンク から ダウンロードファイル名を抽出


```
$ curl -s 'https://www.XXXXXX.jp/' | grep "<a" | grep "アンカータグ内の項目名" | awk -F 'file=' '{print $2}' | cut -d $'\"' -f 1
donload.zip
$
```

アンカータグ内のURL内の 先頭から `file=` までをカットし、`"` で閉じているファイル名を抽出する
OpenAPIでレスポンスボディに配列を使用する

## はじめに
OpenAPIに関しての記事が少ない気がする、もしくは僕の検索の仕方が下手なのかわかりませんが、とにかくここにまとめておきます。
間違っていたりしましたらぜひご指摘いただけると嬉しいです。

ちなみに、openAPIのバージョンとしては、3.0.3を使用。

## OpenAPIで配列を使用する
ここでは、レスポンスの部分に関しては別ファイルに分割している。postでのレスポンスに関しては、postResponse.yamlというファイルに分割し、そこにレスポンスの内容を記述している。以下が例です。
``` postResponse.yaml
description: OK
content:
  application/json:
    schema:
      oneOf:
        - type: object
          properties: {}
        - type: object
          properties:
            goriras:
              type: array ## ここtypeをarrayとすること
              items:
                type: object
                description: ゴリラ一覧
                properties:
                  age:
                    type: integer
                    description: 年齢
                    required: true
                  name:
                    type: string
                    description: 名前
                    required: true
    examples:
      ゴリラあり:
        value:
          {
            goriras:
              [
                { age: 2, name: takeshi },
                { age: 23, name: hage },
              ], ## ここのカンマを忘れるとexamplesとしてSwagger Previewで正常に表示されない
          }
      ゴリラなし:
        value: {}
```

## Swagger Previewの表示はどうなるか
### ゴリラあり
![スクリーンショット 2022-06-23 7.28.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628093/78901346-3a6b-292e-5f10-434e64aef51e.png)
こんな感じで、ゴリラありの場合は配列でレスポンスの値があるのが表現できる。

### ゴリラなし
![スクリーンショット 2022-06-23 7.28.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628093/ac3b30e7-71f4-a2b1-f816-80a65ed9132a.png)
ゴリラなしの場合はこのように何もレスポンスがないことを表現することができる。

## おわり
書き方だけで詰まる人はたくさんいると思うからここに記しておきます。
詳しいことは自分でググってください。
【注意喚起】Packt PublishingのTwitterアカウントが乗っ取られています

IT系の書籍をペガサス流星拳の如く繰り出してくることで有名なPackt PublishingのTwitterアカウントが乗っ取りを喰らったとの夜中の1:00ごろにメールが来てました。 @PacktPubはアンフォローしておけよ、新しいアカウントは@PacktPublishingとのことです。

どのぐらいの北斗百烈拳ぶりかというと、Go関連の書籍だけで45冊ビデオ18本、Flutterの本だけで8冊ビデオ5本とか、　日本の出版社全部合わせたよりも多いのでは、というラインナップの多さです。Expert Python Programmingの原著の出版社でもあります。初Flutter案件のときは、その新狼牙風風拳並みのコンテンツから適当にピックアップして、動画コンテンツをみながら書籍を何冊かなぞるだけでロケットスタートを切れて、1ヶ月でアプリをリリースできたりしたのでPackt Publishingの読み放題サブスクリプションは便利です。まあ、それだけコンテンツが多いということはたまに品質もそれなりなものもあったりはしますが・・・

> Dear Packt Community, 
> 
> As you may have heard or seen, our Twitter account has been compromised by hackers directing users to a website and defrauding them of cryptocurrencies. Please note all links posted through the @PacktPub Twitter account since 8 June are fraudulent. If you have clicked links and submitted any details, please get in touch with your financial service provider, see   Cryptoasset investment scams | FCA. 
> 
> We have been unable to regain control of this account, so we're moving to our new official Twitter account, @PacktPublishing. 
> 
> We would also like to thank everyone who has already reported the hacked account on Twitter. This will help our case with Twitter and help shut down this hacked account. For those who have not already done so, we urge you to  report  and  unfollow  the  @PacktPub  Twitter  account. 
> 
> You can find additional information about this incident at  https://hub.packtpub.com/twitter-account-takeover/. 
> 
> For further questions, please do not hesitate to email us at customercare@packt.com. 
> 
> Packt 

↓deepL翻訳貼っときます。

親愛なるPacktコミュニティの皆様。

ご存知の通り、弊社のTwitterアカウントがハッカーによって侵害され、ユーザーをウェブサイトへ誘導し、暗号通貨を詐取する事件が発生しました。6月8日以降にTwitterアカウント@PacktPubから投稿されたリンクはすべて不正なものであることにご注意ください。リンクをクリックし、何らかの情報を送信した場合は、暗号資産投資詐欺｜FCAを参照し、金融サービス提供者に連絡してください。

このアカウントの制御を取り戻すことができなかったため、新しい公式Twitterアカウント「@PacktPublishing」に移行しています。

また、すでにTwitterでハッキングされたアカウントを報告してくださった皆様に感謝いたします。これは、私たちのTwitterへの提訴と、このハッキングされたアカウントを閉鎖するのに役立ちます。まだ報告されていない方は、@PacktPubのTwitterアカウントを報告し、フォローを解除することを強くお勧めします。

この事件に関する追加情報は、https://hub.packtpub.com/twitter-account-takeover/ でご覧になれます。

さらにご質問がある場合は、遠慮なく customercare@packt.com まで電子メールでお問い合わせください。

Packt

www.DeepL.com/Translator （無料版）で翻訳しました。
Intra-martの各種アプリケーション特徴まとめ

本記事では、Intra-mart Accel PlatForm（以下、IM）の基盤上で動作するアプリケーションに関する紹介記事になります。

# 紹介するアプリケーション
下記について紹介します。

1.IM-FormaDesigner
2.IM-ViewCreater
3.IM-LogicDesigner

# 1. IM-FormaDesigner
※以下、Formaと記載します。

:::note info
※詳細については、下記公式ガイドを参照願います。
[IM-FormaDesigner 参考ページ](https://document.intra-mart.jp/library/forma/public/forma_appli_maker_guide/overview_of_forma_designer/overview_of_forma_application.html "IM-FormaDesigner 参考ページ")
:::

## 1-1. Formaの特徴
* 画面項目の配置、各種イベント（※）、保存先のDB定義やIMワークフロー連携の各種設定等について、基本的に全てGUIで定義可能。
※初期表示や画面項目の各操作、入力チェック等のイベント操作等多岐にわたります。

* 各種カスタムスクリプト（※）を実装可能。

:::note info
※詳細については、下記公式ガイドを参照願います。
[Forma-Designer クライアントサイドスクリプト参考ページ](https://document.intra-mart.jp/library/bis/public/bis_specification/texts/spec/csjs_script.html "Forma-Designer クライアントサイドスクリプト参考ページ")
:::

* 作成したアプリケーションで登録した各種データは、ビューとして参照可能（※）。
※ビューはIMワークフロー標準、ViewCreaterから選択可能。

* Formaで定義したアプリケーションが、エクスポート・インポート可能。
* Formaで定義したアプリケーションの設計書が、エクスポート可能。
* 組織毎に、アプリケーションから入力したデータの登録、参照、削除単位で認可設定が可能。
* IM基盤上で動作するので、ユーザ毎のテーマ切り替えに自動的に対応（※）。
※カスタムスクリプトで各画面項目のcolor属性に対して画面項目への着色も可能。


# 2. IM-ViewCreater
※以下、VCと記載します。

:::note info
※詳細については、下記公式ガイドを参照願います。
[IM-ViewCreater 参考ページ](https://document.intra-mart.jp/library/iap/public/viewcreator/viewcreator_administrator_guide/texts/about/about.html "IM-ViewCreater 参考ページ")
:::

## 2-1. VCの特徴
* クエリ定義、データ参照定義の2段階構成。
* クエリ定義では、ビューとして表示する対象データを設定する。
* データ参照定義では、クエリ定義で設定した対象データの表示方法を設定する。
* 上述したFormaとの連携が可能。

### 2-1-1. クエリ定義の特徴
* 取得対象テーブルの選択、テーブル間の結合や取得条件の設定をGUIで作成可能。
　※GUIですが一部DBの知識が必要です。

* 物理的に存在するテーブルだけでなく、SQLビルダにより手入力で作成したSQLをクエリ定義として作成可能（※）。
　※2020年4月頃からの機能のため、VCのバージョンによっては使用できない場合もあります。

* 定義したクエリの実行結果について、プレビュー表示にて確認可能。
* クエリ定義単体でエクスポート・インポート可能（※）。
　※2021 Winter(Dandelion)より、単体でのエクスポート・インポートは非推奨となりました。


### 2-1-2. データ参照定義の特徴
* 表示項目名、表示幅、グループ化対象、項目の表示・非表示、表示フォーマット、ソート対象項目、アイコン等のリンクの設定を全てGUIで作成可能（※）。
　※GUIですが一部DBの知識が必要です。

* 定義したデータ参照の実行結果について、プレビュー表示にて確認可能。
* データ参照定義単体でエクスポート・インポート可能（※）。
　※2021 Winter(Dandelion)より、単体でのエクスポート・インポートは非推奨となりました。


# 3. IM-LogicDesigner
※以下、LDと記載します。

:::note info
※詳細については、下記公式ガイドを参照願います。
[IM-LogicDesigner 参考ページ](https://document.intra-mart.jp/library/iap/public/im_logic/im_logic_user_guide/texts/summary/index.html "IM-LogicDesigner 参考ページ")
:::

## 3-1. LDの特徴
* サーバサイドロジックで各種データを操作する際に必要なプログラムが全てIFとして用意されており、GUIで定義可能。
* 基本的にAPIの多くがGUIで表現されている（※）。
　※プログラムで言うところの繰り返し処理、代入処理、条件分岐、データ取得、登録、他ロジックの実行等が可能です。
* 作成したLDは、IM-BISやForma、ジョブだけでなく、REST-APIを利用して外部からの呼び出しも可能。
・LDの実行時に必要なI/Oは、LDを使用するアプリケーション毎に異なることに注意。

# まとめ
いかがでしたでしょうか。

画面開発ならForma、一覧画面ならVC、内部の処理ロジックならLDを使うことで、直感的に各種アプリケーションを作成できるだけでなく、パッケージ開発な面バグも少ないです。

Intra-mart社の認定資格にも登場するアプリケーションなので、業務利用される方は使いこなせると大きな武器になると思います。