OmniAICreator/Qiita-1.07M huggingface dataset:
【Markdown】書き方

# なぜ使うのか
今後Qiitaでアウトプットする際や、GithubのREADMEでも使用する機会があるので、覚えておくに越したことがない。
またmarkdownをマスターすることによって、自身の作業効率も捗る。

# Markdownとは
>Markdown（マークダウン）は、文書を記述するための軽量マークアップ言語のひとつである。本来はプレーンテキスト形式で手軽に書いた文書からHTMLを生成するために開発されたものである。しかし、現在ではHTMLのほかパワーポイント形式やLATEX形式のファイルへ変換するソフトウェア（コンバータ）も開発されている。各コンバータの開発者によって多様な拡張が施されるため、各種の方言が存在する。


マークアップ言語とは、文章構造をコンピュータに認識させるための言語であり、
マークダウンを使うことによって人間でも手軽にかけて読みやすいというメリットがある。

 
# Markdownの基本
|記入方法|使い方|
|---|---|
|#|大見出し（HTMLのh1と同じ）|
|##|中見出し(HTMLのh2と同じ)|
|###|小見出し(HTMLのh3と同じ)|
|`で囲む　|１行のコードをボーダーで囲み、背景が灰色になる　例 (`hoge`)|
|```で囲む|複数行のコードを囲み、背景が灰色になる　|
|*で囲む|囲んだ文字が*イタリック*になる|
|**で囲む|囲んだ文字が**太字**になる|
| ~~で囲む|打ち消し線（※前後に半角スペースが必要） 例 ~~hoge~~|

# リスト
```:書き方
- Ruby
- PHP
- Java
1. Google
2. Twitter
3. Facebook
```
【結果】
- Ruby
- PHP
- Java
1. Google
1. Twitter
1. Facebook













参考文献
[wiki](https://ja.wikipedia.org/wiki/Markdown)
[Markdown記法チートシート](https://qiita.com/Qiita/items/c686397e4a0f4f11683d)
4STEP/M + m-SHEL で行う、ISO27001 10 改善

# ISO 27001 10 改善
10 改善 はISMSが継続して有効であるために、是正処置などで改善を行うことを要求する。
10.1 不具合及び是正処置 / 10.2 継続的改善 が含まれる。
10.1 不具合及び是正処置では、不具合発生時に是正処置の実施を要求している。
是正処置は、再発防止として以下の4つを満たす必要がある。
```
1, 修正と結果への対処
2, 不具合の原因調査
3, 是正処置の実施と有効性の確認
4, 是正処置の実施記録の作成
```
  
本記事では、ヒューマンエラーが起きた際の是正処置として、情報処理学会研究報告の
「企業のセキュリティ対策におけるヒューマンエラー管理実践に向けた検討」を参考に、
4STEP/Mとm-SHELによる対策立案手法を紹介する。

# 4STEP/M
4STEP/Mは、医療分野において、ヒューマンエラーによる影響を低減するための対策を考える時に用いられる手法である。
以下のPDFに分かりやすくまとめられている。

http://www.medicalsafer-kts.com/4STEM.pdf

4STEP/Mでは、ヒューマンエラーの対策を4つのステップに分け、ステップごとに対策立案を行う。

# m-SHEL

m-SHELとは、製造現場などで用いられる、ヒューマンエラーの背後要因を洗い出すためのフレームワークである。
m-SHELでは、エラー要因をManagement, Software, Hardware, Environment, Livewares に分け分析する。
風土、組織を変える(m), 手順・表示を変える(S), 設備を変える(H), 作業環境を変える(E), 人による支援体制を変える(L)
の5項目の変更で対策立案を行っていく。

# 4STEP/M + m-SHEL
論文より、メール誤送信を仮想の事例として、4STEP/Mとm-SHELを用いて対策を図表化する例を示す。

![3ff854a367fee1c5ca7451512815d00b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2682657/cb1b4416-392c-2478-8947-bd97252ba081.png)
画像は 富樫由美子, 佐藤嘉則, 藤井康広, (2009) 「企業のセキュリティ対策におけるヒューマンエラー管理実践に向けた検討」より引用

対策が網羅的であり、対策の目的と対象が共有しやすくなっている。
また、4STEP/Mで示された目標に対し、m-SHELでの多角的な対策が立案されている。

# 参考

https://cir.nii.ac.jp/crid/1520009409505517440

https://gihyo.jp/book/2019/978-4-297-10754-3
AccessのVBAでファイルパスから親フォルダーパスを取得（FileSystemObject使用）

# やり方

参照設定で、Microsoft Scripting Runtime にチェック入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/7b026d07-3b64-6b56-edbc-7b3f29cf9555.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/987108a9-5129-7979-4a10-2c739bd22339.png)


```vb:サンプルコード
Dim fso_ As New FileSystemObject
Dim folder_path_ As String
folder_path_ = fso_.GetParentFolderName("C:\Users\unko\tester.jpg")
Debug.Print folder_path_
```

サンプルコードの出力結果は
```C:\Users\unko```

# 注意点

```GetParentFolderName``` という名前から フォルダー**名** が返ってきそうだけど、実際は フォルダー**パス** が返ってくる。

末尾に **\ は付かない** 。

**存在しないファイル** のパスを引数で渡しても **例外にはならない** 。

**存在しないフォルダー** のパスを引数で渡しても **例外にはならない** 。

**フォルダーのパス** を渡した場合、 **親フォルダーのパス** が返ってくる。
（特定フォルダーの親フォルダーのパス取得という用途としても使える）

|引数の値 |戻り値 |
|--|--|
| C:\Users\unko\ | C:\Users |
| C:\Users\unko | C:\Users |

# 参考サイトさん

https://atmarkit.itmedia.co.jp/ait/articles/1705/01/news019.html

# バージョン

Windows 10 Pro 21H2 OSビルド 19044.1865
Microsoft Access for Microsoft 365 MSO (バージョン 2206 ビルド 16.0.15330.20260) 32 ビット
SQLでgroup byして、それぞれのgroup内でorder byして最初のレコードを選ぶ

なんかよくあれどうするんだっけと思うのでメモる。
他に良い方法があれば追加でメモる。
postgresqlで動くことは確認した。

```sql
-- 各クラスで最年少の生徒の身長を求めたい
SELECT id, class_id, age, height
FROM (
  SELECT id, class_id, age, height, ROW_NUMBER() OVER (PARTITION BY class_id ORDER BY age ASC)
  FROM students
) AS class_youngest_students
WHERE row_number = 1 -- 0-indexではない
```
【Linux】シェルスクリプトの実行方法


## `source`コマンドで実行
`source`コマンドを使用することで実行できます。
```:ターミナル
$ source ./foo/bar.sh
```
また以下のように`.`でも同様に実行できます。  
shには`source`コマンドがないのでshの場合には`.`を使用する必要があります。
```:ターミナル
$ . ./foo/bar.sh
```
`source`コマンドでの実行には以下の特徴があります。
 * 現在実行中のシェル環境でスクリプトが実行される  
 現在実行されているシェルがshの場合にはshが使用されます。そのためスクリプトの実行が現在のシェル環境に影響されます。またスクリプトの実行結果が現在のシェル環境に反映されます。
 * 実行権限は不要
 * shebang(`#!/bin/bash` など)は不要  
 shebangを記述しても現在実行中のシェルで実行されます。

## シェルの引数として実行
以下のようにシェルの引数として実行できます。
```:ターミナル
bash ./foo/bar.sh
```
シェルの引数として実行する方法には以下の特徴があります。
* 指定したシェルで実行される
現在実行されているシェルがshの場合でも`bash ./foo/bar.sh`とするとbashで実行されます。そのためスクリプトの実行は現在のシェルの環境に影響されません。  
* 実行権限は不要
* shebang(`#!/bin/bash` など)は不要  
 shebangを記述しても指定したシェルで実行されます。

## パスを指定して実行
パスを指定することで実行できます。
```
$ ./foo/bar.sh
```
パスを指定して実行する方法には以下の特徴があります。
* shebangのシェルで実行される
shebangを`#!/bin/bash`と記述するとbashで実行されます。
* 実行権限が必要  
実行前に`chmod +x ./foo/sample.sh`などを実行して実行権限を付与する必要があります。
* shebang(`#!/bin/bash` など)が必要
 shebangを記述してシェルなどを指定する必要があります。

 なお環境変数`PATH`に指定されているディレクトリに保存するとパスを指定せず実行できます。
 ```:ターミナル
$ bar.sh
 ```
Docker Volumeについてメモ

## 背景
既存の`docker.compose.yml` を変更することになった。
「内容としては、volume名をhash値から命名する」というもの。新卒になってdockerまわりの知識をつけたいと思っていたので、それのメモとして残しておく。


## volumeとは
> Docker コンテナにおいて生成され利用されるデータを永続的に保持する目的で作られた仕組み

https://matsuand.github.io/docs.docker.jp.onthefly/storage/volumes/



外部のHDDのようなイメージだそう

## volume vs バインドマウント
- volume
    - ホストマシン上に新たなディレクトリを生成し、dockerの保存先となる
- バインドマウント
    - ホストマシン上のファイルやディレクトリをコンテナ内にマウントする
    - 必ずホストにディレクトリが必要
    - 



## 参考
https://matsuand.github.io/docs.docker.jp.onthefly/storage/volumes/
https://qiita.com/gounx2/items/23b0dc8b8b95cc629f32
Gmail で、アーカイブ・削除・ミュートを行ったときに、受信トレイの代わりに次のスレッドを表示する方法

## はじめに

先日、社内勉強会で、メール整理術のLTを聴きました。
そのとき、発表者の方が「Gmail で、アーカイブを行ったときに、次のスレッドを表示するようにしている」とも話しており、私もそうしたい！と思い設定を行ったので、その設定方法を記事にしておくことにしました :pray: 

## 何が実現できるようになるか？

Gmail のスレッドで、アーカイブや削除、ミュートを行うと、デフォルト設定では、受信トレイに画面が戻る。

この記事の手順を踏むことで、このアクションを取ったときに、受信トレイに画面が戻るのではなく、自動的に次の（新しい）スレッドを表示することができるようになる。

![Screen Shot 2022-08-08 at 9.08.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292215/1397c00b-853b-ee72-6350-1d59c3ff7abd.png)


## 方法

:::note warn
注意
Gmail の[設定]で、２箇所変更する必要がある。
:::

### [設定]ページの[詳細]の[自動表示]機能で「有効にする」に ✅ する

> スレッドの削除、アーカイブ、ミュートを行ったときに、受信トレイの代わりに次のスレッドまたは前のスレッドを表示できます。

チェックしたら、下方の「変更を保存」のクリックを忘れずに。

![Screen Shot 2022-08-08 at 8.53.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292215/6e8ce2d9-bab0-c4a9-2e1c-94e6c9e359d6.png)

### [設定]ページの[全般]の[自動表示]機能で「次の（新しい）スレッドに移動する」に ✅ する

スレッドのアーカイブ、削除、ミュートなどを行った後の操作を、以下の選択肢から選択できる。

- 次の（新しい）スレッドに移動する
- 前の（古い）スレッドの移動する
- スレッドリストに戻る

チェックしたら、下方の「変更を保存」のクリックを忘れずに。

![Screen Shot 2022-08-08 at 8.55.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292215/cf236659-e30e-5486-528e-0ca00128e584.png)
Windwosで起動時にパスワードありのユーザーで自動ログイン

# 概要

「パスワードありのユーザーだけど、Windows起動時に自動ログインしたい」
といったちょっと特殊な要件。

:::note warn
管理者権限を持たないユーザーであっても、レジストリーの値を **『参照すること』** は可能です。
管理者以外が物理的にアクセスできるPCでこの設定を行うと、重要なユーザーのパスワードが漏洩してしまう可能性があります。
:::

# レジストリーに設定追加

レジストリーの下記フォルダーのキーに設定することで可能になります。

```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
```

デフォルトでは用意されていないキーもあるので、それについては新規作成。

# 設定するキー（ActiveDirectoryのドメイン参加済PCの場合）

| 名前 | 種類 | データ | 備考 |
|--|--|--|--|
| AutoAdminLogon | REG_GZ | 1 | |
| DefaultDomainName | REG_GZ | ドメイン名 | 『※※.local』の場合『※※』だけでOK。 |
| DefaultUserName | REG_GZ | ユーザー名 | |
| DefaultPassword | REG_GZ | ぱすわーど | |

# 設定するキー（ドメインに参加していないPCの場合）

* AutoAdminLogon
* DefaultUserName
* DefaultPassword

の3つのキーでよいです。
『DefaultDomainName』キーは無くてもOK。

# パスワードを変更した場合

自動ログインできなくなります。
また、新しいパスワードを使って手動でログインしても、レジストリーの ```DefaultPassword``` の値は更新されません。
あくまで **レジストリーには固定値が設定されているだけ** で、パスワード変更は同期されません。

『ある日を境に自動ログインできなくなった』とならないように注意。

# バージョン

Windows 10 Pro 21H2 OSビルド 19044.1865
【2022年08月版】 秘密鍵の暗号化を解除できない openssl/ssh-keygen

# 【2022年08月版】 秘密鍵の暗号化を解除できない

## はじめに

- 秘密鍵の暗号化を解除しようと ```openssl rsa``` したら、 ```unable to load Private Key``` と表示され、できない。。。

## 前提条件

- ```ssh-keygen``` で秘密鍵を作成した
- 秘密鍵のヘッダがなんか違う

- 秘密鍵のヘッダ

```
-----BEGIN OPENSSH PRIVATE KEY-----
```

- 想定しているヘッダ

```
-----BEGIN RSA PRIVATE KEY-----
```

- ```openssl rsa``` で暗号化を解除しようとすると、```unable to load Private Key``` と表示されてエラーになる

```terminal
% openssl rsa -in privatekey.pem -out decrypt.pem
unable to load Private Key
 :
 :
 :
libressl/libressl-2.8/crypto/pem/pem_lib.c:684:Expecting: ANY PRIVATE KEY
```

- 秘密鍵のパーミッションは ```600``` になっていて、読める・書ける

## 解除方法

- ```ssh-keygen``` で作成した秘密鍵は ```openssl rsa``` で解除できない
- ```ssh-keygen``` で解除する
- 秘密鍵ファイルは ```privatekey.pem``` 、なんでもいいけど

- 解除方法

```terminal
% ssh-keygen -p -f privatekey.pem
Enter old passphrase: 
Key has comment 'user@machine'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.
```

## その他

- パーミッションを間違っているとエラーになるので確認

```terminal
% ssh-keygen -p -f privatekey.pem
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0666 for 'privatekey.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Failed to load key privatekey.pem: bad permissions
```

## さいごに

かんたんでしたね
【夏休み企画】#IT用語一問一答【毎朝投稿5日目】Cookie

# この記事を読むと、、
- 「関連用語」を使って「Cookie」を説明できるようになる
- 「Cookie」がもっと好きになる(多分)

# 関連用語
Session Cookie / Persistent Cookie / Tracking Cookie / Secure Cookie

[**復習用**] 記事の内容を見る前に上記の言葉でCookieを説明してみよう！

# 企画説明
- クラウドって何？って人に聞かれて説明してるけど俺もよく知らないや、、
- ドキュメント読んでみてるけど半分くらい何言ってるか分かんない、、
- 今日の夕飯はナスの炒めものにしよっかな〜、あれ、NASってなんだっけ？

みたいなことが結構あったので、知ったかしていたIT用語を毎日一個ずつちゃんと学んでいこうっていう企画です！

昨日の記事はこちら↓

https://qiita.com/acta/items/50ce101d5e6a1ccc47de

# Cookieとは
Cookie = HTTPにおけるWebサーバーとブラウザ間で状態を管理する通信プロトコル、ないしそこで用いられる情報

Cookieの通信の流れは以下の通り
1. Webサーバーが状態を区別するCookieをブラウザに渡す
1. ブラウザが次にサーバーと通信する際に同じCookieを渡す
1. サーバーはCookieをもとにカスタマイズしたコンテンツを渡す

- `Cookie: name=value; name2=value2`といった形でHTTPヘッダに含まれて通信される

- Cookieを使えばStatelssな通信であるHTTPでStatefulなサービスを提供することができる

- `Expires`属性がなくブラウザを閉じると消えてしまう一時的なCookie = **Session Cookie**
- 一定期間経つまで保存され続けるCookie = **Persistent Cookie**
    - ユーザーの行動ログを取るのにも用いられることから**Tracking Cookies**ともいう

- `Secure`属性によって暗号通信上でしかやり取りされないCookie = **Secure Cookie**
    - Cookieの盗聴を防ぐ目的がある

# 【おまけ】調べている時にでてきたなにこれ用語
- Stateless = 同じ時刻、同じリクエストなら同じコンテンツを返却する性質
- Stateful = 同じ時刻、同じリクエストでも過去の履歴を元にカスタマイズされたコンテンツを返却する性質


# 参考資料
- https://en.wikipedia.org/wiki/HTTP_cookie
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie
100日後くらいに個人開発するぞ！day066

## 今日はビュー・コントローラ・ルーティングを学んでみた！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/b3cf51c0-ae7d-6d92-f302-a1dc343369cd.png)

## 今日の学び




### ページの作成に必要なもの
* ビュー（view）
* コントローラ（controller）
* ルーティング（routing）

### ビューとは
* ビューとはページの見た目を作るためのHTMLファイル
* ビューはviewsフォルダの中に格納されている

### コントローラとは
* ページを表示するときRailsの中ではコントローラを経由してビューをブラウザに返している
* コントローラ内のメソッドを「アクション」と呼ぶ
* アクションはブラウザに返すビューをviewsフォルダから見つけ出す役割を担う

### ルーティングとは
* ルーティングはブラウザとコントローラをつなぐ役割を担う
* ルーティングは送信されたURLに対して適切なコントローラのアクションを呼び出す
* ルーティングは`get"URL" => "コントローラ名#アクション名"`という文法で書かれる
* ルーティングに記述されていないURLはアクセスできない
cscの作法 その263

# 概要
cscの作法、調べてみた。
インストーラーやってみたいので、wixいれてみた。
練習問題やってみた。

# 練習問題
msbuildを使って、msiをmakeせよ。

# 方針

- ターゲットは、buildとmakemsi
- Exec Commandを使う。

# サンプルコード

```
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
	<Target Name="Build">
		<Exec Command='csc beep0.cs' ContinueOnError="false" WorkingDirectory="." />
		<Message Text="ok0" />
	</Target>
	<Target Name="makemsi">
		<Exec Command='candle test1.wxs' ContinueOnError="false" WorkingDirectory="." />
		<Exec Command='light -ext WixUIExtension test1.wixobj' ContinueOnError="false" WorkingDirectory="." />
		<Message Text="ok1" />
	</Target>
</Project>

```

# コンパイル手順

```
>set PATH=C:\Program Files (x86)\WiX Toolset v3.10\bin;%PATH%

>set PATH=C:\Windows\Microsoft.NET\Framework\v4.0.30319;%PATH%

>msbuild test1.wixproj /t:build

>msbuild test1.wixproj /t:makemsi

```

以上
EC2インスタンスのCPU使用率を監視する

CPU使用率のモニタリングをしていなかったことについて、ユーザーから突っ込みがあったらしいので設定しました。
エージェントのインストールは不要でとても簡単です。

# はじめに
これはAWS EC2インスタンスの話です。

メトリクス（監視対象から取得するデータセットのことで、CPU使用率、Disk読み書き回数、通信量等があります）が、閾値を超えた場合や下回った場合などにアラームを発行するのは、**CloudWatchアラーム**というサービスが担っています。
CloudWatchアラーム自体にはメールを送信する機能はありませんが、CloudWatchアラームは **Amazon SNS** と連携できるので、SNS上に定義したトピックにメッセージを送信し、トピックに紐づけられた受信者にメール等で通知するやり方を解説します。

# トピックの作成
まず、Amazon SNS（Simple Notification Service）から**トピック**を作成します。
Amazon SNS はサーバレスでメッセージ（スマートフォンのプッシュ通知、Eメール、SMSなど）の配信を可能にするマネージドサービスです。トピックという論理的なアクセスポイントにメッセージを送信すると、トピックに紐づけられた受信者に対してメッセージが非同期で一斉送信される仕組みです。
この仕組みを自前で構築しようとすると、開発コストだけでなく、サービスのスケールに応じて管理コストもかかってきますが、Amazon SNS なら初期費用をかけずに利用できます。

今回はEメールで通知するのでタイプはスタンダード、任意の名前で設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/627df1b4-bfc3-a217-a8c1-6c4243ec938c.png)

# サブスクリプションの作成
続いて、トピックとプロトコルを選択し、エンドポイントを設定します。
選択するプロトコルによって、Eメールならメールアドレス、SMSなら電話番号、というようにエンドポイントに設定する情報は変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/a555c0cd-648a-ce78-3a7a-a3f7541be871.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/aced7e84-0822-4f09-f850-754c52fc09e2.png)
サブスクリプションを作成すると、ただちにHTMLメールが送信されるので、本文にある ***Confirm subscription*** をクリックします。

```
From: AWS Notifications <no-reply@sns.amazonaws.com>
Date: 2022年8月8日(月) 7:43
Subject: AWS Notification - Subscription Confirmation
To: <foo@example.co.jp>

You have chosen to subscribe to the topic:
arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:MyTopic
To confirm this subscription, click or visit the link below (If this was in error no action is necessary):
Confirm subscription
```

ステータスが「確認済み」になればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/d2a398e8-8511-300d-8a45-f8f1ef01d780.png)

# CloudWatchアラームの作成
CPU使用率をモニタリングしたいEC2インスタンスを選択し、**CloudWatchアラームの管理** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/10891cf1-3ca2-b922-387b-b4570f934a1e.png)
作成したトピックを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/733a6649-0d07-837c-b7d2-7ac05dd0110b.png)
しきい値を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/b187ca19-63a4-a63b-a723-69fa5352f7a6.png)
最後に「作成」をクリックしたら完了です。

# テスト
`yes > /dev/null &` や `stress` コマンドで負荷を与えてみましょう。
アラームのメールを受信したら成功です。
ポータル ユーザー

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)


+ [ポータル ユーザーがカスタム レポート タイプの「ユーザー」オブジェクト フィールドを表示できない](https://help.salesforce.com/s/articleView?id=000324880&type=1)
+ [カスタマー ポータルのセルフ登録と個人アカウントの制限](https://developer.salesforce.com/forums/?id=906F00000009A8UIAU)

:::note
there is a limit on how many person accounts can be owned by to the same internal user. Person accounts roles are tied to the owners role. If you have too many of these when you change the owner there might be performance issues. 

Because of this limit it's not feasible to provide an automated self service registration for person accounts via sites (otherwise after every x number of registration you would need to pick a new owner etc..)

同じ内部ユーザーが所有できる個人アカウントの数には制限があります。個人取引先の役割は、所有者の役割に関連付けられています。所有者を変更するときにこれらが多すぎると、パフォーマンスの問題が発生する可能性があります。 

この制限のため、サイト経由で個人アカウントの自動セルフサービス登録を提供することは現実的ではありません (そうしないと、x 回の登録ごとに新しい所有者を選択する必要があります。)
:::
Kernel.dbg/2でデバッグがはかどる🎉(Elixir)

# はじめに

[elixir.jp](https://join.slack.com/t/elixirjp/shared_invite/zt-1e5vg2q6o-YWUxC94TCt_ngglWrsctTg) Slackで、@sotashiro さん、 @zacky1972 先生が、[Kernel.dbg/2](https://hexdocs.pm/elixir/1.14.0-rc.0/Kernel.html#dbg/2)をご紹介されていました。
とても便利そうです。
使ってみました。

2022/08/08現在、[Elixir](https://elixir-lang.org/) `1.14.0-rc.0`で使用できます。

# [Kernel.dbg/2](https://hexdocs.pm/elixir/1.14.0-rc.0/Kernel.html#dbg/2)

論よりRun :rocket::rocket::rocket:
[公式ドキュメント](https://hexdocs.pm/elixir/1.14.0-rc.0/Kernel.html#dbg/2)のサンプルです。

```elixir:my_file.ex
"Elixir is cool!"
|> String.trim_trailing("!")
|> String.split()
|> List.first()
|> dbg()
```

`my_file.ex`があるとします。
早速Runしてみます。

```bash
$ elixir my_file.ex 
```

そうすると、こういった出力結果が得られます！

```elixir
[my_file.ex:5: (file)]
"Elixir is cool!" #=> "Elixir is cool!"
|> String.trim_trailing("!") #=> "Elixir is cool"
|> String.split() #=> ["Elixir", "is", "cool"]
|> List.first() #=> "Elixir"
```

各行の実行結果が、`#=> `で表示されます。
以前は同じことをするのに、一行一行[IO.inspect/2](https://hexdocs.pm/elixir/IO.html#inspect/2)を入れて確かめたりしていました。
[Kernel.dbg/2](https://hexdocs.pm/elixir/1.14.0-rc.0/Kernel.html#dbg/2)を使えばもうそんなことをする必要はないのです！　奥さん！

# 環境構築

以下、参考です。
[asdf](https://asdf-vm.com/)を使って私は、[Elixir](https://elixir-lang.org/) `1.14.0-rc.0`をインストールしました。

[asdf](https://asdf-vm.com/)のインストールは以下の記事が詳しいです。

https://qiita.com/nishiuchikazuma/items/b9d319732ddb540fd990

https://qiita.com/torifukukaiou/items/9009191de6873664bb58

以下、[asdf](https://asdf-vm.com/)はインストール済みということで書いておきます。

```bash
$ mkdir dbg
$ cd dbg
$ asdf plugin update --all 
$ asdf list all erlang
$ asdf install erlang 25.0.3
$ asdf local erlang 25.0.3
$ asdf list all elixir
$ asdf install elixir 1.14.0-rc.0-otp-25
$ asdf local elixir 1.14.0-rc.0-otp-25
$ asdf reshim
```

`asdf list all erlang`と`asdf list all elixir`でインストール可能なバージョンが表示されますので、実行されるときにお好みのバージョンをお使いください。
ここでは、2022/08/08現在において[Kernel.dbg/2](https://hexdocs.pm/elixir/1.14.0-rc.0/Kernel.html#dbg/2)を利用できるバージョンで書いています。
ErlangはOTP-24でも大丈夫です。OTP-24を利用される場合は、[Elixir](https://elixir-lang.org/)は`1.14.0-rc.0-otp-24`をインストールしてください。

# おわりに

[Kernel.dbg/2](https://hexdocs.pm/elixir/1.14.0-rc.0/Kernel.html#dbg/2)のご紹介をしました。
[Kernel.dbg/2](https://hexdocs.pm/elixir/1.14.0-rc.0/Kernel.html#dbg/2)が入る前は同じことをしようとすると、一行一行[IO.inspect/2](https://hexdocs.pm/elixir/IO.html#inspect/2)を入れて確かめたりしていました。
[Kernel.dbg/2](https://hexdocs.pm/elixir/1.14.0-rc.0/Kernel.html#dbg/2)を使うことで、便利にそしてさらに楽しく[Elixir](https://elixir-lang.org/)のプログラミングを楽しめそうです :rocket::rocket::rocket: 

[Elixir](https://elixir-lang.org/) 1.14のリリースが楽しみです :tada::tada::tada:
Elasticsearchクラスタ検証(2): Elasticsearch 8.xを導入

##### [前回] [Elasticsearchクラスタ検証(1): Hyper-VにAlmaLinuxサーバー3台構築](https://qiita.com/mingchun_zhao/items/b229addd5697ad571d94)
## はじめに
前回用意した、AlmaLinuxサーバー3台に、
同じ手順でElasticsearch 8.xを導入します。
- `AlmaLinux8-1`(node1)
- `AlmaLinux8-2`(node2)
- `AlmaLinux8-3`(node3)
## 仮想マシン`AlmaLinux8-1`(node1)に、Elasticsearchパッケージ導入
端末を開き、管理者権限で以下実行。
- EslasticsearchリポジトリのGPG keyをインポート
```shell
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
```
- rpm repositoryを登録
```/etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
```
- Elasticsearchパッケージをインストール
```shell
# dnf check-update --enablerepo=elasticsearch
# dnf install elasticsearch --enablerepo=elasticsearch -y
```
## Elasticsearchの設定
- Elasticsearchをサービスとして有効化
```
# systemctl enable elasticsearch
Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /usr/lib/systemd/system/elasticsearch.service.
```
- Elasticsearch設定ファイルを開き、index自動作成設定を最終行に追加
```/etc/elasticsearch/elasticsearch.yml
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*
```
## Elasticsearchのユーザーパスワードをリセット
- Elasticsearchを起動
```
# systemctl start elasticsearch
```
- elasticユーザーのパスワードをリセット
```
# /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i
This tool will reset the password of the [elastic] user.
You will be prompted to enter the password.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Re-enter password for [elastic]:
Password for the [elastic] user successfully reset.
```
## Elasticsearchの起動確認
```
# curl -k -u elastic https://localhost:9200
Enter host password for user 'elastic':
{
  "name" : "node1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "ksn5SqyVRQK4I1RWKKp95w",
  "version" : {
    "number" : "8.3.3",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "801fed82df74dbe537f89b71b098ccaff88d2c56",
    "build_date" : "2022-07-23T19:30:09.227964828Z",
    "build_snapshot" : false,
    "lucene_version" : "9.2.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}
```
## 仮想マシン`AlmaLinux8-2`(node2)に、Elasticsearch導入
手順は上記と同じ。
## 仮想マシン`AlmaLinux8-3`(node3)に、Elasticsearch導入
手順は上記と同じ。
## おわりに
Elasticsearchを、サーバー3台にそれぞれ導入しました。
次回はクラスタ設定を行います。お楽しみに。

##### [次回] [Elasticsearchクラスタ検証(3): Elasticsearch 8.xのクラスタ化(HTTPS未対応)](https://qiita.com/mingchun_zhao/items/7385c750351dcfa0c5e2)
Databricksワークフローにおけるタスク間の文脈の共有

[Sharing Context Between Tasks in Databricks Workflows \- The Databricks Blog](https://databricks.com/blog/2022/08/02/sharing-context-between-tasks-in-databricks-workflows.html)の翻訳です。

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

[Databricksワークフロー](https://qiita.com/taka_yayoi/items/871bf30f6edf00d3ee1e)は、複雑なインフラストラクチャを管理する必要なしに、複雑なデータパイプライン、MLパイプラインを容易に構築・管理できるようにするDatabricksによるフルマネージドサービスです。

ある時には、ETLやMLパイプラインのタスクは上流のタスクの出力に依存することがあります。例としては、機械学習モデルのパフォーマンスを評価し、モデルのメトリクスに基づいてモデルを再トレーニングするかどうかを判断するということが挙げられます。これらは2つの分離したステップであるため、この作業を行うためには分離したタスクを持つことがベストと言えます。これまでは、前段のタスクがDeltaテーブルなどジョブの文脈外でこの情報を保持し、アクセスする必要がありました。

Databricksワークフローでは、タスクから小規模の値を設定、取得するシンプルなAPIである「タスクバリュー」という新機能を導入します。今では、タスクは出力値を後段のタスクから参照することができ、より表現力のあるワークフローを構築することが容易となります。また、ジョブの実行履歴を参照すると、DAG(有向非巡回グラフ)とタスクレベルでタスクによって引き渡される値が表示されるのでより詳細な文脈を確認することができます。タスクバリューは[Databricks Utilities](https://qiita.com/taka_yayoi/items/3717623187859809515d) APIを通じて設定、参照することができます。
![](https://databricks.com/wp-content/uploads/2022/07/db-243-blog-img-1.png)
*実行履歴では、「evaluate_model」というタスクが値を出力したことが示されています*
![](https://databricks.com/wp-content/uploads/2022/07/db-243-blog-img-2.png)
*タスクをクリックすると、タスクによって出力された値を確認できます*

[タスクバリュー](https://qiita.com/taka_yayoi/items/3717623187859809515d#taskvalues%E3%82%B5%E3%83%96%E3%83%A6%E3%83%BC%E3%83%86%E3%82%A3%E3%83%AA%E3%83%86%E3%82%A3dbutilsjobstaskvalues)は正式公開されています。この新機能を試していただき、我々がこのオーケストレーションをさらに改善できるように[フィードバック](https://ideas.databricks.com/)をお待ちしています！

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
【Unity】GameObjectの色を変更する方法

GameObjectの色を変更する方法

## Materialの作成
1. まずMaterialフォルダをProjectビューで好きな場所に作成する（今回はAssets直下に作成）
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/1f7e0473-9018-7823-89f8-b45104f4741d.png)
1. 作成したMaterialフォルダ内でMaterialを新規作成
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/3761d242-43b0-3884-9abf-bdf6f7a012b3.png)
1. 作成したMaterialをクリックして、Inspectorビューで色を変更する
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/e47efd75-7515-afce-82d2-05d658cd83d2.png)
1. 作成したMaterialを適用するGameObjectにドラッグ&ドロップする
![download.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/befb5f48-59b7-cbe8-98bd-ab216a2a89d3.gif)
Elasticsearchクラスタ検証(1): Hyper-VにAlmaLinuxサーバー3台構築

## はじめに

Elasticsearchクラスタ検証のため、Hyper-Vで仮想マシン3台を用意します。
※ WSL2は、全てのインスタンスでネットワークインターフェースを共有し、
ディストリビューション別IPアドレスを設定できないため、使用できず。

## 今回の目標

Hyper-Vに、AlmaLinuxの仮想サーバー3台を構築します。

- 仮想マシン名: AlmaLinux8-1
    - ホスト名: node1
    - IPアドレス: 172.17.80.11

- 仮想マシン名: AlmaLinux8-2
    - ホスト名: node2
    - IPアドレス: 172.17.80.12

- 仮想マシン名: AlmaLinux8-3
    - ホスト名: node3
    - IPアドレス: 172.17.80.13


## AlmaLinuxインストールISOイメージファイルをダウンロード

- AlmaLinux-8.6のISOファイルをダウンロード(サイズは11GB)
`https://repo.almalinux.org/almalinux/8/isos/x86_64/AlmaLinux-8.6-x86_64-dvd.iso`

## Hyper-Vを起動し、仮想マシン作成

- Windowsキーをクリックし、Hyper-Vと入力
    - `Hyper-V マネージャー`が表示されるので選択
- Hyper-Vマネージャーのメニューから、操作/新規/仮想マシンを選択し、次へ
- 名前に、`AlmaLinux8-1`を入力、次へ
- 第 2 世代を選択し、次へ
- 起動メモリに、`2048 MB`、`動的メモリ使用`チェックを外して、次へ
- 接続で、`Default Switch`を選択し、次へ
- `仮想ハードディスクを作成する`を選択し、`サイズ 80GB`を指定し、次へ
- `ブートイメージファイルからオペレーティングシステムをインストールする`を選択し、次へ
- ダウンロードした、AlmaLinuxのISOファイルを選択

## 仮想マシンの設定変更

- 仮想マシン`AlmaLinux8-1`を右クリックし、設定を選択
- セキュリティで、`セキュリティブートを有効にする`のチェックを外す
- プロセッサで、仮想プロセッサの数を2に変更

## 仮想マシンを起動

- 仮想マシン`AlmaLinux8-1`を右クリックし、接続を選択
- 起動をクリックし、`Install AlmaLinux 8.6`を選択
- 日本語を選択
- rootパスワードを設定
- 新規ユーザーを作成
    - 必要に応じて、`管理者権限を付与する`にチェックを入れる
- ネットワークとホスト名を選択
    - 左下のホスト名に`node1`を入力し、適用
    - 右下の設定を選択
        - IPv4設定タブを選択、以下入力し保存
            - メソッドを手動に
            - IPアドレス: 172.17.80.11
            - ネットマスク: 255.255.255.0
            - ゲートウェイ: 172.17.80.1
            - DNSサーバー: 8.8.8.8
    - 右上のEthernet(eth0)をオンに切り替える
    - 左上の完了をクリック
- インストール先を選択
    - そのまま完了
- インストールの開始
- 終わったら再起動
- ライセンス契約に同意し、設定の完了
- 作成したユーザーでサインイン

## OSアップデートを実施

- 左上のアクティビティをクリックし、端末を選択

```shell
$ su -
# hostname
node1
# hostname -I
172.17.80.11
# dnf update -y
```

## `/etc/hosts`に、ホスト名を追加

```/etc/hosts
172.17.80.11 node1
172.17.80.12 node2
172.17.80.13 node3
```

## 同じ手順で、さらに仮想マシン2台作成

- ホスト名: node2
    - IPアドレス: 172.17.80.12

- ホスト名: node3
    - IPアドレス: 172.17.80.13

## 疎通確認

node1サーバーから、node2とnode3にpingテスト

```
# ping node2
# ping node3
```

## おわりに

Elasticsearchクラスタ検証用に、AlmaLinux仮想マシン3台構築しました。
次回も続きます。お楽しみに。

##### [次回] [Elasticsearchクラスタ検証(2): Elasticsearch 8.xを導入](https://qiita.com/mingchun_zhao/items/9de73d39aad82b78cf3e)
excelメモ

# ショートカット
セルの書式設定　ctrl + 1

https://support.microsoft.com/ja-jp/office/excel-%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88-1798d9d5-842a-42b8-9c99-9b7213f0040f
ゲストユーザのセキュリティポリシーとタイムライン

[ヘルプ記事](https://help.salesforce.com/s/articleView?id=sf.networks_guest_policies_timelines.htm&type=5)

ゲストユーザを使用する組織のデータセキュリティを強化するため、Salesforce ではいくつかの改善を行っています。このトピックをスタートポイントとして、すべてのセキュリティの改善と更新 (適用のタイムラインや変更に向けた準備など) について理解してください。

ゲスト ユーザー アクセス レポート: https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000FR6GaUAL&tab=e

ゲスト ユーザー: ゲスト ユーザー セキュリティ ポリシーの適用:https://help.salesforce.com/s/articleView?id=release-notes.rn_networks_guest_user.htm&type=5&release=228

ゲスト ユーザー レコード アクセス開発のベスト プラクティス: https://www.learnexperiencecloud.com/s/article/Guest -User-Record-Access-Development-Best-Practices 

クラウド サイトのユーザーが表示できるユーザー エクスペリエンスを制御します: https://help.salesforce.com/s/articleView?id=sf.networks_user_sharing.htm&type=5

ベスト プラクティスと考慮事項ゲスト ユーザー プロファイルの設定: https://help.salesforce.com/s/articleView?id=sf.networks_guest_profile_best_practices.htm&type=5

また、Spring '21 リリースからゲスト ユーザーのセキュリティ ポリシーを更新し続けています。 Summer '23 に予定されています。ゲスト ユーザーのセキュリティ ポリシーは、次の場所にあります。https://help.salesforce.com/s/articleView?id=sf.networks_guest_policies_timelines.htm&type=5 .


# Salesforce セキュリティポリシーは、Lightning プラットフォーム、Site.com、Experience Cloud など、Salesforce 組織で作成されたすべての公開サイトを対象とします。このポリシーが完全に適用された公開サイトは、次のルールに準拠する必要があります。


**ゲストユーザによるレコードへのアクセスの保護**
+ ゲストユーザの外部組織全体のデフォルトは常に [非公開] に設定されます。
+ ゲストユーザには、データへの参照アクセス権より強力なアクセス権を付与することはできません。
+ ゲストユーザを、公開グループまたはキューのメンバーにすることはできません。
このポリシーが有効になる前に公開グループまたはキューに追加されたゲストユーザは、自動的には削除されません。これらのゲストユーザは手動で削除する必要があります。
+ ゲストユーザは、共有の直接設定によってレコードにアクセスすることはできません。
+ ゲストユーザは、特別な条件ベースの共有ルールであるゲストユーザ共有ルールによってのみレコードにアクセスできます。
共有ルールによってゲストユーザに付与できる最大の権限は参照アクセス権です。
+ ゲストユーザには、オブジェクトに対する「更新」または「削除」権を付与することはできません。ゲストユーザは、システムモードでのみレコードを更新または削除できます。
+ ゲストユーザには、オブジェクトに対する「すべて表示」または「すべて変更」アクセス権を付与することはできません。

**ゲストユーザによって作成された新規レコードの組織内のデフォルト所有者への割り当て**
+ ゲストユーザを、新しく作成されたレコードの所有者にすることはできません。
既存のレコードの所有権をゲストユーザに付与することはできません。
+ゲストユーザによって作成されたレコードの所有権は、組織内の有効なユーザであるデフォルトの所有者に移行する必要があります。

**公開されているサイトの他のメンバーの表示**
+ ゲストユーザには「すべてのユーザの参照」権限を割り当てることはできません。
+ メンバーの表示設定は、サイト単位で評価できます。

公開サイトセキュリティポリシー適用のタイムライン
設定は Summer ’20 以降のすべてのリリースで有効化されています。

**ゲスト ユーザーは特定のオブジェクトのすべてのレコードを削除または表示することはできなくなりますが、それらを作成することは引き続き可能になるはずです。**

+ [ゲスト ユーザー](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000HEiUESA1)

# 関連資料
+ [共有ルールを作成して、ゲスト ユーザーの製品へのアクセスを保持および制御する](https://help.salesforce.com/s/articleView?id=000364131&type=1)
+ [Summer 22 Release のリリースノート ゲストユーザ関係](https://advancedcommunities.com/salesforce-summer-22-top-features-for-experience-cloud-review-advanced-communities/)
VBScript で起動済みの Access を操作する

VBScript で、起動済みの Access で開いているフォームのテキストボックスに値を入れてみよう。

```vb:VBScript
Option Explicit

Call ControlAccessSingle
Call ControlAccessMulti
Call ControlAccessMultiJ
```
GetObject は、最初に起動されたインスタンスをつかまえる。

```vb:VBScript
'// 起動済み Access のインスタンスが一つだけの場合
Sub ControlAccessSingle()
    With GetObject(, "Access.Application").Forms("Form1")
        .text1_box.Value = "Hello, World!"
    End With
End Sub
```

起動済みのインスタンスがひとつだけの場合は上記のコードで問題ないが、複数のインスタンスが起動されている場合は、つかまえたいインスタンスをファイルパスで指定する必要がある。

```vb:VBScript
'// 起動済み Access のインスタンスが複数ある場合
Sub ControlAccessMulti()
    With GetObject("C:\Access\Database2.accdb").Application.Forms("Form1")
        .text1_box.Value = "Hello, World!"
    End With
End Sub
```
また、VBA は日本語の変数名が使えるが、VBScript はそのままでは日本語の変数名が使えないので、日本語の変数名を使いたい場合や、Access のコントロール名が日本語の場合はその名前を [ ] で囲う必要がある。

```vb:VBScript
Sub ControlAccessMultiJ()
    Dim [挨拶1], [挨拶2]    
    [挨拶1] = "See you, World!"
    [挨拶2] = "おやすみ！"    
    With GetObject("C:\Access\Database2.accdb").Application.Forms("Form1")
        .text1_box.Value = [挨拶1]
        .[テキスト1_box].Value = [挨拶2]
    End With
End Sub
```
---
＜参照サイト＞
- [Officeオートメーション サーバーの GetObject と CreateObject の動作](https://docs.microsoft.com/ja-jp/office/troubleshoot/office-suite-issues/getobject-createobject-behavior)
- [VBScript関数リファレンス TOP > その他 > GetObject 関数](https://www.kanaya440.com/contents/script/vbs/function/others/get_object.html)
- [ファイル名によってActiveXオブジェクトを操作する (GetObject関数)](http://www2.tokai.or.jp/mother/newhtm2/acvba/av06/av027.htm)
「ザッポス伝説」を読んで、カスタマーサポートにも活かしたい「アマゾンを震撼させた靴屋さん」の考え方


カルチャーブックの作り方も非常に参考になりました。

[顧客が熱狂するネット靴店　ザッポス伝説―アマゾンを震撼させたサービスはいかに生まれたか | トニー・シェイ, 本荘　修二, 豊田早苗, 本荘　修二 |本 | 通販 | Amazon](https://www.amazon.co.jp/dp/447801373X)
![](https://images-na.ssl-images-amazon.com/images/I/51AxOZRGdrL._SX346_BO1,204,203,200_.jpg)



## 概要

- 自身の生い立ち
- ビジネス
- これから

からなる、「アマゾンを震撼させたサービス」に辿り着いた靴屋さんのお話。ビジネス書の体ではあるが開発として、クラウド時代の製品と顧客満足をどう考えて行ったら良いのか、お客様に対するマインドとは、が学べる本。

### ポイント

- 社員の幸せを追求すると、それが顧客の、そして取引先や関係者の幸せになるという新しい経営のあり方を示している
    - ザッポスのイメージ、配送業務、ウェブサイトの全体的なデザインなどは他社がそっくり真似できますが、社員、企業文化、サービスは真似できません
    - 絶え間ない変化を歓迎することが私たちの文化の一部である限り、他社は私たちほど速く進化することはできません。
    - 優れた企業文化の確立は他社との良い差別化になる。いかなる企業も1日で企業文化を確立する事は出来ませんし、規模が大きくなればなるほど企業文化の浸透は難しいものになります。
- 売り上げが十分でも、企業文化が従業員の満足出来るものでなければ人は離れていきます。その企業で働いていて幸せなのか？という人生の根本
> 1. 自分で自分をコントロールしていると感じられるか？
> 2. 自分が進歩していると感じられるか？
> 3. つながり（関係の数と深さ）
> 4. ビジョンと意味

- **私たちの在庫にない特定のサイズの特定のスタイルの靴を探している顧客から電話があった場合にどうするか。そのような場合には、どのオペレーターも、競合他社少なくとも三社のウェブサイトを調べ、在庫を見つけた時は顧客に他社のサイトを教える** ように訓練されています。
    - 明らかに、この場合、私たちは売上げを失うことになります。しかし、私たちはひとつひとつ すべての応対業務で生じる利益を最大にしようとはしていません。その代わり、私たちは電話に 一ずつ対応し、**顧客ひとりひとりと生涯続く関係を築こうとしている** のです。




### 本にかかわる名言

- 謙虚であれ：『初心者の心には可能性があります。しかし、専門家といわれる人の心にはそれはほとんどありません。』-鈴木俊隆
    - http://h-kishi.sakura.ne.jp/s-114.htm
    - https://en.wikipedia.org/wiki/Zen_Mind,_Beginner%27s_Mind
- 勇気を持って挑むことは一時的に自分の立場を危うくするが、そうしなければ自分自身を見失うことになる-セーレン・キルケゴール
    - [キルケゴールの名言。実存主義の創始者の言葉 | 癒しツアー](https://iyashitour.com/archives/49073)


### Zappos関連
- ザッポス・ライブラリー
    - 読んだ本を会社の書棚にする試み
- ザッポス・カルチャーブック
    - ザッポスの文化にフィットする人だけを採用するにはどうしたら良いかを考えて出てきた社員にヒアリングしてできた名言集みたいなもの
    - https://www.zapposinsights.com/culture-book
    - https://issuu.com/zapposinsights/docs/culture-book

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/0032be55-fb1a-e46d-11d6-e23fed6c39cb.png)

- ザッポスのコアバリュー
    - https://www.zapposinsights.com/about/core-values
- Twitter: https://twitter.com/zappos
- Website: https://www.zappos.com/


## 参考

[「ザッポス伝説」でわかったザッポスが成功した3つの理由とは？](https://dokushokai.tokyo/archives/7083)
[アマゾンが震撼した企業（『ザッポス伝説』書評）｜池田寛人 | ファンベース×金融でまちを元気に｜note](https://note.com/delpie6/n/nc3e6ebfa0523)
[ザッポス伝説／トニー・シェイ – suadd blog](https://suadd.com/wp/blog/886)
[ザッポス伝説 | トニー・シェイ | shinodogg.com](https://shinodogg.com/2011/03/01/%E3%82%B6%E3%83%83%E3%83%9D%E3%82%B9%E4%BC%9D%E8%AA%AC-%E3%83%88%E3%83%8B%E3%83%BC%E3%83%BB%E3%82%B7%E3%82%A7%E3%82%A4/)

以上です～
2022/8/8主にITとかセキュリティの記事

ローコード開発、現在の企業には不可欠な存在に（下）(8/5)
https://project.nikkeibp.co.jp/idg/atcl/19/00315/072200003/

ロシアの航空宇宙・防衛関連企業を狙うトロイの木馬「Woody RAT」確認(8/6)
https://news.mynavi.jp/techplus/article/20220806-2417374/

7月のランサムウェア動向、最もコスト高のContiが引退も新種が台頭(8/6)
https://news.mynavi.jp/techplus/article/20220806-2417386/

セキュリティ・ミニキャンプ in 山梨 2022　オンライン開催(9/22,9/23開催)
一般講座と専門講座のオンライン参加者募集いたします。
https://prtimes.jp/main/html/rd/p/000000002.000096005.html

フランスではリモートワークが長期的に定着していることが調査から判明(8/6)
https://www.antennefrance.com/humains/remote-working-is-settling-in-for-the-long-term/

北朝鮮、資金調達・洗浄にNFT利用　規制の抜け穴突く(8/5)
https://www.nikkei.com/article/DGXZQOGN0516L0V00C22A8000000/

店舗Wi-Fi侵入、わいせつ画像大量印刷　容疑で会社員書類送検(8/6)
https://news.biglobe.ne.jp/domestic/0806/mai_220806_7957779669.html
Arduinoのライブラリでよく見るボード種別に応じてコンパイル内容を変えるマクロ定義文字列の正体

# この記事で知りたいこと
Arduinoのライブラリでよく見るボード依存でコンパイル時にコード内容を分岐させる。
```c++:test.ino
#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_MEGA2560)
// ARDUINO UNOかARDUINO MEGA2560をボード選択した時にコンパイルされる部分
#endif
#if defined(ARDUINO_AVR_LEONARDO)
// ARDUINO Leonardoをボード選択した時にコンパイルされる部分
#endif

void setup() {

}

void loop() {

}
```
みたいな書き方が便利なので**IDE上のボード選択に依存してコンパイル内容が変わる機能**を
自分のコードにも入れてみたい。
でも、そもそも`ARDUINO_AVR_UNO`みたいなやつ、**どんな文字列が定義されるのかわからない**。

特にArduino公式のボードでない場合は**既存のライブラリの記述から探すのも難しい**。

**この記事ではこの文字列の正体を探す。**

# 検証環境
- Windows10
- Arduino IDE 1.8.13

# 結論
各Arduinoボードのコンパイル時に必要なパラメータを格納した
`boards.txt`の中の
`{ボード名}.build.board={ボード名}`の値を探してきて、右辺値を
`ARDUINO_`の後ろにくっつける

`ARDUINO_{ボード名}`
こんな感じ

ちなみにコンパイル時にコンパイラに渡す文字列から生成してるみたいで、いくらソースコードの中を探しても見当たらないみたいです。


## 例えば
### Arduino UNO の場合
ボード周りのライブラリがインストールされているフォルダを探し、
`C:\Users\{$USERNAME}\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4` の
（↑AppDataは隠しフォルダ）
`boards.txt`の中に
`uno.build.board=AVR_UNO`
という記述があるので、この`AVR_UNO`を使って
`ARDUINO_AVR_UNO`というマクロ定義文字列を処理の分岐に使用する。
### Seeeduino XIAO の場合
ボード周りのライブラリがインストールされているフォルダを探し、
`C:\Users\{$USERNAME}\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.8.1` の
（↑AppDataは隠しフォルダ）
`boards.txt`の中に
`seeed_XIAO_m0.build.board=SEEED_XIAO_M0`
という記述があるので、この`SEEED_XIAO_M0`を使って
`ARDUINO_SEEED_XIAO_M0`というマクロ定義文字列を処理の分岐に使用する。

## 検証コードの例
マクロ定義文字列があってるかどうか確かめるだけなので、実際にボードに書き込む必要はありません。
下記コードをスケッチに張り付けて**IDEの「検証」ボタンを押します**。

（`#pragma message`はArduino IDEが使っているコンパイラavr-gccの機能です）
```C++:test.ino
#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_MEGA2560)
  #pragma message "\n >> ARDUINO_AVR_UNO or ARDUINO_AVR_MEGA2560 is defined." 
#endif
#if defined(ARDUINO_AVR_LEONARDO)
  #pragma message "\n >> ARDUINO_AVR_LEONARDO is defined." 
#endif
#if defined(ARDUINO_SEEED_XIAO_M0)
  #pragma message "\n >> ARDUINO_SEEED_XIAO_M0 is defined." 
#endif
#if defined(ARDUINO_RASPBERRY_PI_PICO)
  #pragma message "\n >> ARDUINO_RASPBERRY_PI_PICO is defined." 
#endif

void setup() {

}

void loop() {

}
```

ボードを「Leonardo」選択状態でコンパイルしたときのIDEのコンパイラメッセージ
```
C:\Users\{$USERNAME}\Documents\Arduino\sketch_aug08a\sketch_aug08a.ino:6:19: note: #pragma message: 
 >> ARDUINO_AVR_LEONARDO is defined.
   #pragma message "\n >> ARDUINO_AVR_LEONARDO is defined."
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
最大28672バイトのフラッシュメモリのうち、スケッチが3462バイト（12%）を使っています。
最大2560バイトのRAMのうち、グローバル変数が149バイト（5%）を使っていて、ローカル変数で2411バイト使うことができます。

```
あとはマクロの機能で
`#ifdef ARDUINO_HOGE`
`#ifndef ARDUINO_FUGA`
`#if define(ARDUINO_FOO)`
とかそのあたりをうまく使ってコンパイラに判断させましょう。

# その他
## この話の情報ソース
### Arduino IDEの1.5.3 BETAのリリースノート
https://www.arduino.cc/en/software/ReleaseNotes#arduino-153-beta---20130830

> ARDUINO 1.5.3 BETA - 2013.08.30
> [ide]
> ~~
> Pass board type from boards.txt (https://github.com/arduino/Arduino/issues/308)

このリリースノートの記述とGithubのissueが公式ソースってことになるんでしょうか。
仕様についてはもうちょっと情報まとめておいてほしいですけど・・・。

## 参考ライブラリ
今回の調査の過程で見つけたんですが、自分で`boards.txt`を探さなくても分岐処理用のヘッダファイルを公開してくれている方もいるようです。
https://github.com/houtbrion/detectArduinoHardware
（最近はArduino IDE互換のボードが増えすぎてるので網羅とはいってないようですが）

## その他
間違い等ありましたらご指摘ください。
MacOSのrebootコマンドの引数について

# 概要
この記事ではMacOSでTerminal上から再起動する際の引数についてメモを残します．

# 注意
Termianl上で
```terminal
man reboot
```
をした際に表示されるものを[DeepL](https://www.deepl.com/translator)にかけて翻訳したものです．(2022/08/08)

# 引数
## -l
### 原文
> The halt or reboot is not recorded in the system log.  This option is intended for applications such as shutdown(8), that call reboot or halt and log this themselves.

### 翻訳
> 停止または再起動は、システムログに記録されません。 このオプションは、 shutdown(8) のような、 reboot や halt を呼び出して自分自身でログを取るようなアプリケーションを想定しています。

## -n
### 原文
> The file system cache is not flushed.  This option should probably not be used.

### 翻訳
> ファイルシステムのキャッシュはフラッシュされません。 このオプションはおそらく使用されるべきではない。

## -q
### 原文
> The system is halted or restarted quickly and ungracefully, and only the flushing of the file system cache is performed (if the -n option is not specified).  This option should probably not be used.

### 翻訳
> システムは迅速かつ無秩序に停止または再起動され、 ファイルシステムのキャッシュのフラッシュのみが実行される (-n オプションが指定されない場合)。 このオプションはおそらく使用されるべきではない。

## -u
### 原文
> The system is halted up until the point of removing system power, but waits before removing power for 5 minutes so that an external UPS (uninterruptible power supply) can forcibly remove power.  This simulates a dirty shutdown to permit a later automatic power on. macOS uses this mode automatically with supported UPSs in emergency shutdowns.

### 翻訳
> システムは、システム電源を切断する時点まで停止しています。が、電源を切る前に5分間待機し、外部UPS（無停電電源装置）が起動できるようにします。UPS (無停電電源装置) が強制的に電源を切断できるように、電源を切断する前に5分間待機します。 これにより ダーティシャットダウンをシミュレートし、後で自動電源投入を可能にします。macOSは、サポートされているUPSで自動的にこのモードを使用して、緊急シャットダウン シャットダウンします。

# おわり
再起動が早いという理由で`-n`を使用していたので当時の僕はよく調べるべきでした．
`This option should probably not be used.`なんて書かれていると...
かといって何か問題が起きたこともない．ゾッとしますね．
ではまた．
goplsやgoimportsでimport補完がバージョンを認識しないのを直す

## 問題

```go:go.mod
module github.com/k0kubun/test

go 1.19

require (
	github.com/k0kubun/pp/v3 v3.1.0
)
```

と

```go:main.go
package main

func main() {
	pp.Println(1)
}
```

が置いてあるリポジトリで `goimports main.go` すると、`import "github.com/k0kubun/pp/v3"` が補完されてほしいのに `import "github.com/k0kubun/pp"` が補完されてしまうことがある。

## 対処法
`"${GOPATH}/pkg/mod/github.com/k0kubun/pp@v3.0.1+incompatible"` など、go.mod非互換のバージョンが残っていると再現する。なので `"${GOPATH}/pkg/mod/github.com/k0kubun"` と ``"${GOPATH}/pkg/mod/cache/download/github.com/k0kubun"`` を丸ごと削除したあと以下をやり直したりすると良い。

```
go get -t ./...
```

goplsはその後再起動しないといけないので、VSCode等はリロードする。
【Go】reflectを使用した型判定で`reflect.Type`に無いものも使用したい

## 概要
あまり使うことは多くないと思いますが、例えばStructのフィールドを動的に取得する等の際に、reflectパッケージを利用します。reflectの概要等は、[reflectで動的に型を判定](https://www.wakuwakubank.com/posts/795-go-reflect/)の記事にまとめられています。
上記で紹介した記事では`reflect.Type`を使用して型の判定を行なっていますが、例えば`time.Time`型など`reflect.Type`に用意されていない型が含まれる時にどうするか。対応方法をメモ書きします。

## 対応
[Go type switch with time.Time](https://stackoverflow.com/questions/47739395/go-type-switch-with-time-time)のstackoverflowの記事にいくつか対応方法が紹介されています。
個人的には一度`Interface`型でreflectのvalueを取得した後に、型の判定をする方法が良いかなと感じました。

## 実装サンプル
`Interface`型でreflectのvalueを取得した後に、型の判定をする実装サンプルを以下に記します。

```go
package main

import (
	"fmt"
	"reflect"
	"time"
)

type ReflectSampleStruct struct {
	IntSample    int
	StringSample string
	DateSample   time.Time
}

func main() {
	reflectSample := ReflectSampleStruct{
		IntSample:    100,
		StringSample: "sample",
		DateSample:   time.Now(),
	}
	reflectValue := reflect.ValueOf(reflectSample)
	reflectType := reflect.TypeOf(reflectSample)
	fieldLen := reflectType.NumField()
	for i := 0; i < fieldLen; i++ {
		field := reflectType.Field(i)
		value := reflectValue.FieldByName(field.Name)
		// 一度Interface型で取得する
		valueInterface := value.Interface()
		switch v := valueInterface.(type) {
		case int:
			fmt.Println("【int】")
			fmt.Println(v)
		case string:
			fmt.Println("【string】")
			fmt.Println(v)
		case time.Time:
			fmt.Println("【time.Time】")
			fmt.Printf("%d/%d/%d", v.Year(), v.Month(), v.Day())
		}
	}
}
```
Visual Studioの「グローバルESLint構成オプション」に惑わされずESLintをソース管理する

<h2>起こった問題</h2>
Visual Studioのツール>オプション>JavaScript/TypeScript>Linting>全般からESLintの有効化をONにすることでESLintを使えるようにしました。この際、グローバルESLint構成オプションの「グローバルESLint構成ファイル(.eslintrc)は、次の場所で見つかります」に書いてあるC:\Users\<ユーザ名>\.eslintrcにある設定ファイルを使用していました。<br>
その後、チームで共通の設定ファイルを使用しようとなった時、設定ファイルがホームディレクトリ直下にあったため、プロジェクトのソース管理に含めてチーム内で共通のESLint設定ファイルを使用するにはどうすればいいんだ？と困っていました。<br>
※Visual Studioで有効化ONにすればデフォルトの設定で使用できるため、何も考えずにとりあえずその設定で使用していました。

<h2>前提</h2>
Visual Studio Professional 2019

<h2>解決方法</h2>
ESLintのドキュメントに詳細がありました。<br><a href="https://eslint.org/docs/latest/user-guide/configuring/configuration-files
">https://eslint.org/docs/latest/user-guide/configuring/configuration-files
</a><br>
設定ファイルの参照方法としては、まずファイルがあるところから親ディレクトリへ遡っていき、ルートディレクトリ・ログインしているユーザのホームディレクトリまで探していくようです。そのため、js/tsファイルの親のソース管理に含まれるディレクトリに.eslintrcファイルを置いてあげればソース管理に含めることができました。<br>
「グローバルESLint構成ファイル(.eslintrc)は、次の場所で見つかります」の場所は.eslintrcファイルが見つからないときに共通で使われる設定ファイルが置いてある場所ということでした。
Springの備忘録

※SpringBootの学習での知識を備忘録として記載しています。

* Inputタグの値の受け渡しについて
  Inputタグ（textやhidden）に設定してある値がサーバで受け取れない事象があり、
  調べるとth:filedやth:nameに値が入っているとth:valueが空になるらしい...
  
  実際に試したところ、th:nameが入っているとたしかにth:valueの値がNullになっているが、th:filedは入っていても問題なさそう

  また、Form内に定義しているクラス内のクラス変数に値を設定したい場合は以下で設定が可能
  InputタグのnameにFormクラスに定義しているTestクラスの変数名.Testクラスの変数名
```Java:java
  public class From {
    // Testクラスを定義
    private Test test;
  }

  public class Test {
    // TestクラスでtestIdを定義
    private String testId;
  }
```
```HTML:HTML
<form th:object="${form}">
  <Input type="text" th:value="*{test.testId}" name="test.testId">
```

・参考
[親バカエンジニアのナレッジ帳](https://ti-tomo-knowledge.hatenablog.com/entry/2018/06/14/162616)
子供のための単語起こしアプリケーション


# 1.はじめに

将来子供が出来たとき仕事の傍ら教育にも力を入れていきたいと思っており、教育用アプリケーションの作成を考えています。
そのため簡単な英単語（言語はどれでもいい）をキーボード上のキーで入力することで、単語を出力してより優しく理解していただけたらいいなと思います。

# 2．手順

## (1)keycode(キーコード)を確認する

キーボード上のキーには、それに対応するコードがあります。
このアプリケーションの作成に当たっては、キーコードが非常に重要になります。
（最初はkeycodeではなく、keysymで試しましたが、keycodeのほうがスムーズに作業が行えました。)
例えば、「A」キーは「65」、「C」キーは「67」となる。

下のURLを参考にしました

http://faq.creasus.net/04/0131/CharCode.html

## (2)キーコードに対応するテキストを表示するには

```
buffer = tkinter.StringVar()
変数　= buffer.set(文字列)
```
キーコードに対応する文字を出力するには、StringVar()を使用します。
ここで使う英単語は「Good afternoon」,「How are you?」,「Good morning」の三つです。

# 3．実装

```main.py
import tkinter
import pyttsx3

key = 0

engine = pyttsx3.init()
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)

def key_down(e):
    global key
    key = e.keycode

def main():
    global key
    Xt = label['text']
    engine.say(Xt)
    engine.runAndWait()
    
    if key == 65 :  # 「A」のコードは「65」であるため、「A」のキーを押すとHelloが表示される
        Xt =buffer.set('Good afternoon ')
    if key == 67:　# 「c」のコードは「67」であるため、「c」のキーを押すとHow are you?が表示される
        Xt = buffer.set('How are you?')
    if key == 68: # 「D」のコードは「68」であるため、「D」のキーを押すとGood morningが表示される
        Xt = buffer.set('Good morning')
    
    root.after(1000, main)

    
root = tkinter.Tk()
root.geometry('500x500')
root.title('英単語君')
canvas = tkinter.Canvas(root, height = 500, width = 500, bg = 'black')
canvas.pack()
buffer = tkinter.StringVar()
label = tkinter.Label(font = ('Times New Roman', 40), textvariable=buffer, foreground='blue', bg='black')
label.place(x = 90, y = 170)
root.bind('<KeyPress>', key_down)

main()
root.mainloop()
```
以下のリンクから実装動画が見れます。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">英単語文字起こしアプリケーション<br>作りました。<br><br>もっと単語を増やせたらいいなと思います。 <a href="https://t.co/PxnjJyq3Nm">pic.twitter.com/PxnjJyq3Nm</a></p>&mdash; つばめ (@ZnRKT46JvWKbHDW) <a href="https://twitter.com/ZnRKT46JvWKbHDW/status/1556319493798129665?ref_src=twsrc%5Etfw">August 7, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
m1macのターミナルをintelmac化する

:::note warn
私はこの記事を、2ヶ月以上前の記憶を頼りに書いているため、内容の正確性は他の記事には及びません。ほとんど備忘録のためだけに書いているようなものなのでご了承ください。 

:::

# この記事が役立つかもしれない状況
- intelmacで動く実行ファイルを作りたいが手元にM1macしかない（pyinstallerなどはintelmacで作業しないとintelmacで動くファイルにならない）。
- なのでM1macにIntelmacのpython環境を構築したい
- Appleシリコンとintelプロセッサの環境でターミナルを分割したい

# 作業環境
MacBook Air （m1チップ）
os: Monterey ver.12.2.1
シェル　: zsh


# ターミナルを2つ用意する(Rosettaが有効のものと無効のもの)
**ターミナルを2つ作るのに参考になる記事↓**
https://qiita.com/funatsufumiya/items/cec08f1ba3387edc2eed

Rosettaはm1macでintelプロセッサを動かすのに必要なのでintel用のターミナルはRosettaが有効である必要があります。
デフォルトのターミナルはRosettaが無効なのでターミナルをもう一つ作ってそちらはRosettaを有効にすればよいことになります。Rosetta有効ターミナルにはintelmac用のhomebrew等々をインストールしてpython環境を1から構築してください。この時zshrcとzprofileへのパス等の設定が少しややこしいです。

# zprofile内に書くべきこと
arm64はm1mac、x86_64はintelmac用の環境変数に対応しています。下の内容は簡単にいうと "uname -m"　が　arm64 だったらm1mac用の環境変数を、そうでなければintel用の環境変数を適用するということです。

```
if [ "$(uname -m)" = "arm64" ]; then
  # arm64
  export PYENV_ROOT="$HOME/.pyenv_arm64"
  export PATH="$HOME/.pyenv_arm64/bin:$PATH"
  eval "$(pyenv init --path)"
else
  # x86_64
  export PYENV_ROOT="$HOME/.pyenv_x64"
  export PATH="$HOME/.pyenv_x64/bin:$PATH"
  eval "$(pyenv init --path)"
fi

```

# zshrc内に書くべきこと

```
if [ "$(uname -m)" = "arm64" ]; then
  eval "$(/opt/homebrew/bin/brew shellenv)"
  export PATH="/opt/homebrew/bin:$PATH"
  export PYENV_ROOT="$HOME/.pyenv"
  export PATH="$PYENV_ROOT/bin:$PATH"
  eval "$(pyenv init --path)"
  eval "$(pyenv init -)"
  export PATH="/opt/homebrew/bin:$PATH"
  alias ibrew=/usr/local/bin/brew
  alias ibrew="arch -x86_64 /usr/local/bin/brew"
  alias eagle='open -n -a EAGLE'
  alias g++="/usr/local/bin/g++-10 -std=c++17 -Wall -Wextra -Wconversion -pedantic"
  alias gcc="/usr/local/bin/gcc-10 -std=c99 -Wall -Wextra"
  export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
else
  eval "$(/usr/local/bin/brew shellenv)"
  export PATH="/usr/local/bin:$PATH"
  export PYENV_ROOT="$HOME/.pyenv_x86_64"
  export PATH="$PYENV_ROOT/bin:$PATH"
  eval "$(pyenv init --path)"
  eval "$(pyenv init -)"
fi

```

# 終わりに

なんか自分でもよくわかっていないのですがこれで動きました...
詳しい方いらっしゃったらアドバイスください。

ちなみに"uname -m"とターミナルに打ち込むと現在自分がどの環境で動かしているのか見られますので確認にどうぞ。

::: note info
"x86_64"→intel
"arm64"→m1
:::

「ターミナル　intel化」でググると色々出てきます。
GitHub Actions: InputsのBoolean評価まとめ

# GitHub ActionsのBoolean
GitHub Actionsにおける特殊なbooleanの評価について、
いつも迷うので下記に一覧表残しておきます。(検索してもfalseに関する評価結果がないものが多いので。)

## 一覧表

|#||値|評価式|結果|
|:--:|:---:|:---:|:---|:--|
|1||true|${{ inputs.boolean == true }}|true|
|2|❗️|true|${{ inputs.boolean == 'true' }}|false|
|3|❗️|true|${{ inputs.boolean != 'true' }}|true|
|4||true|${{ inputs.boolean == false }}|false|
|5||true|${{ inputs.boolean == 'false' }}|false|
|6||true|${{ inputs.boolean != 'false' }}|true|
|7||false|${{ inputs.boolean == true }}|false|
|8||false|${{ inputs.boolean == 'true' }}|false|
|9||false|${{ inputs.boolean != 'true' }}|true|
|10||false|${{ inputs.boolean == false }}|true|
|11|❗️|false|${{ inputs.boolean == 'false' }}|false|
|23|❗️|false|${{ inputs.boolean != 'false' }}|true|

## shell構文

### 🙅‍♂️ testによるBooleanの評価
```bash:expression
if [ true ]; then
  echo "❗️:true"
elif
  echo "🙆‍♂️:true"
fi

if [ false ]; then
  echo "❗️:false"
elif
  echo "🙆‍♂️:false"
fi
```
```bash:result
🙆‍♂️:true
❗️:false
```

### 🙆‍♂️ 直接Booleanの評価
```bash:expression
if true; then
  echo "❗️:true"
elif
  echo "🙆‍♂️:true"
fi
if false; then
  echo "❗️:false"
elif
  echo "🙆‍♂️:false"
fi

```
```bash:result
🙆‍♂️:true
🙆‍♂️:false
```
C言語　アスタリスク表示

# この記事について
・Forループによるアスタリスク表示


# 今日のソース
入力した整数分だけ "*" を表示する。ただし、3個表示ごとにスペースを表示する。
負の数が入力された場合は、再入力のメッセージを表示する。

```c
#include <stdio.h>

int n;
int a = 3;

int main(void)
{
	printf("入力した数字:");
	scanf("%d",&n);
	
	if(n >= 0){
		for(int i=0; i<n; i++){
		
			printf("*");
			
			if((i+1)%a == 0){
			
				printf(" ");
			}
		}
	
	}else{
			printf("0以上を入力して下さい。\n");
	}
	return 0;
``` 

# 実行結果
入力した数字:24
　*** *** *** *** *** *** *** ***　

# やってみて思ったこと
昔、何かの課題で２重ループによるピラミッドやひし形を表示させたな。
そのうち、円を表示させてみるか。