OmniAICreator/Qiita-1.07M huggingface dataset:
Summer '23 のリリース 


+ [Summer '23 のリリース プレビューが公開されました! 📣](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Pedna)

🔗リソースリンク🔗

+ [リリース サイト](https://www.salesforce.com/products/summer-23-release/):リリースについて知るためのワンストップ ショップです。
+ [Release In a Box:PDF](https://www.salesforce.com/content/dam/web/en_us/www/documents/release-notes/summer-23-release-in-a-box.pdf) :多くのリリース機能に関する概要デッキ
+ [リリース デモ](https://salesforce.vidyard.com/watch/6kRmgSzBEf9J6vYZhkdw22) - 管理者
+ [リリース デモ](https://salesforce.vidyard.com/watch/DFuak6NJ4c9a9KF1kLEr2J) - IT
+ [リリース デモ](https://salesforce.vidyard.com/watch/uNe8qm4NDbBUpqkiNG41Xq) - 開発者

+ [Summer '23 Release Feature Matrix. ](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000Plvm5)

+ [2023/05/12 サンドボックス プレビュー Web サイトが復活して稼働中です!  ❗](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Pel3f)

+ [リリース準備ライブ](https://www.salesforce.com/events/release-readiness-live/summer-23/?utm_source=techcomms&utm_medium=email&utm_campaign=FY24_Core)
Summer '23 リリースでは時間を節約し、自動化を高速化します。新機能を最大限に活用するには、プロダクト マネージャーのライブに参加して、Summer '23 リリースの新機能について詳しく学びましょう。当社のプロダクト マネージャーが 2023 年のロードマップをこっそりと紹介し、ライブ放送中に質問に答えます。

+ [Coming in the Summer '23 Release: Improved Contrast for All Salesforce Users 📣](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000PetP8)


+ [新しい統合ライセンス - 製品アイテムまたはシリアル化された製品では作成不可](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000OsVh0)
Amazon Linux2でのdnfの導入

## はじめに

`Amazon Linux2` のパッケージ管理に使われている `yum` は終了する方向なので `dnf` を導入します。設定・運用前のインスタンスでは `Amazon Linux 2023` の導入も検討したほうがいいかもしれません。導入には以下の記事を参考にしましたが、 `libreport-filesystem` が今回の環境では足りなかったので、備忘録として書いておきます。

https://qiita.com/piyojiro/items/58f9a89120808e1c1e84

## 設定の流れ

以下のパッケージが必要となりますが、 `yum` だと見つからないので、 `rpm` を取ってきてから `yum` でインストールします。

- dnf-0.6.4-2.sdl7
- dnf-conf-0.6.4-2
- python-dnf-0.6.4-2
- libreport-filesystem

このあと、 `yum` の変数定義を `dnf` にリンクすれば完了します。

### 実際の操作例

##### パッケージのダウンロード

先ず、 `wget` を使って適当なサーバーから必要な `rpm` パッケージをダウンロードします。

```
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-0.6.4-2.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm
wget https://centos.pkgs.org/7/centos-aarch64/libreport-filesystem-2.1.11-53.el7.centos.aarch64.rpm.html
```

##### インストール

次に、ダウンロードしたパッケージを `yum` でインストールします。

```
sudo yum install \
     python-dnf-0.6.4-2.sdl7.noarch.rpm \
     dnf-0.6.4-2.sdl7.noarch.rpm \
     dnf-conf-0.6.4-2.sdl7.noarch.rpm \
     libreport-filesystem-2.1.11-53.el7.centos.x86_64.rpm
```

##### 変数定義

これでパッケージの導入は完了ですが、 `sudo dnf update` すると以下のようなエラーが出てくると思います。

```
Repository u'amzn2-core': Error parsing config: Error parsing "mirrorlist = u'$awsproto://$amazonlinux.$awsregion.$awsdomain/2/$product/$target/x86_64/mirror.list'": URL must be http, ftp, file or https not ""

...（中略）...

Repository u'amzn2extra-kernel-5.15': Error parsing config: Error parsing "mirrorlist = u'$awsproto://$amazonlinux.$awsregion.$awsdomain/2/extras/kernel-5.15/latest/x86_64/mirror.list'": URL must be http, ftp, file or https not ""
```

これは、 `$awsproto` などの変数に値が代入されていないことが原因です。これらの変数値は `/etc/yum/vars` に定義してあるので、 `/etc/dnf/` に同様の変数を定義すれば解決します。実際には、シンボリックリンクを貼ってやればいいと思います。（ `yum` をアンインストールするときは注意）

```
sudo ln -s /etc/yum/vars /etc/dnf/
```

##### 導入完了の確認

以上でパッケージの導入か終わりなので、試しにパッケージのアップデートを行います。

```
sudo dnf update
```

設定がうまくいってると、アップデートが開始されて完了するはずです。

```
Amazon Linux 2 core repository     72 MB/s |  68 MB     00:00    
Amazon Extras repo for epel        14 kB/s | 1.3 kB     00:00  

...（中略）...

完了しました!
```
Salesforce Military 

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



+ [Good Day, I want to know when the next veterans cohort will start. I had to stop due to moving and starting a new night position. I am interested in continuing with Salesforce. Any help greatly appreciated.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000PlTO1)


The page for Salesforce Military is located here: https://veterans.my.site.com/s/


The Salesforce Military Contact Us link is here: https://veterans.my.site.com/s/contact-us

+ [New to Salesforce](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000QLj9B)

:::note
If you have military affiliation, and haven't done so already, be sure to take a look at and register with the Salesforce Military program, which offers all kinds of great resources for Salesforce certification, networking, and career building.

Also, for opportunities to start building Salesforce work experience, check out the Salesforce fellowship program at Hiring our Heroes.
:::

+ [How can I be a part of Trailhead Military?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007IfvEA)

:::note
Register for Trailhead Military

The first step to get started is to register on salesforce.com/military. Click Sign Up to access the registration form. First, click Verify with TroopID to confirm your military status. Then, fill out some information about yourself and click Submit Registration.

Sign Up for Trailhead Military
https://trailhead.salesforce.com/content/learn/modules/vetforce/vetforce-signup
:::

+ [Is this where I would sign up for Trailhead Military?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000BqyYM)

:::note
Please check this article.


https://trailhead.salesforce.com/en/content/learn/modules/vetforce/vetforce-signup
:::
プロファイル ドロップダウンに値が表示されない Service Setup  --> Get Started

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




![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6ffa6997-fcfe-b9e0-b8d3-4500d97c61e0.png)

グレイアウトしている場合はライセンスを使い切っているんだけど、プロファイルが表示されないのは何かおかしい

That means both you and an another user are using the available 2 'Salesforce' licenses in your practice/playground org.

Locate the other user using it and deactivate it. This will release one 'Salesforce' license which you can use to proceed further. 

これは、あなたと別のユーザの両方が、診療所/遊び場組織で利用可能な 2 つの「Salesforce」ライセンスを使用していることを意味します。

それを使用している他のユーザーを見つけて非アクティブ化します。これにより、「Salesforce」ライセンスが 1 つ解放され、これを使用してさらに続行できるようになります。

+ [Module project problem](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007PxTlI)

:::note
Do you have unused Salesforce licenses left?

I was able to get past this problem by finding some other experience answers.  The module exercise was insufficient in warning/explaining the relationship between active licenses and the ability to setup support.   The solution which was not obvious to me (because the admin cert trailmix introduces so many concepts, seemingly randomly), was to look at my playground's users, and one-by-one see which have a license = Salesforce, and deactivate one.  Apparently only 2 can have that license as active

未使用の Salesforce ライセンスが残っていますか?

他の経験上の回答を見つけることで、この問題を乗り越えることができました。このモジュールの演習では、アクティブなライセンスとサポートをセットアップする機能との関係についての警告/説明が不十分でした。私にとっては自明ではなかった解決策 (管理者証明書 Trailmix では非常に多くの概念がランダムに導入されているため) は、プレイグラウンドのユーザーを調べて、どのユーザーがライセンス (Salesforce) を持っているかを 1 つずつ確認し、そのうちの 1 つを非アクティブ化することでした。どうやらそのライセンスをアクティブにできるのは 2 人だけのようです
:::


# 結局新しいプレイグランドを使ったらしい

+ [Not getting any values in Profile dropdown](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Os67b)
+ [Profile dropdown not visible while adding user in salesforce from Service setup home ?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000PjZxt)
+ [Can't Add Users in Service Setup](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007LToeY)

# 未解決

+ [Problems creating a new user in the "Set Up the Service Console" Trailhead.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Pkiyr)
+ [customize home page/ service console](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgZDR)
neosでlogix その137

# 概要
neosでlogixやってみる。
練習問題やってみた。

# 練習問題
カメラを使え。

# 方針
statictexture2dに、カメラの画像を入れる。

# 写真

![2023-05-06 21.37.07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/66c10d8b-9ce0-5a44-db2b-c26e7f1bead0.jpeg)

# 手順

- devtooltipを装着
- 新規>オブジェクト>カメラ
- logixtooltipを装着
- cameraのインターフェースを取り出す
- ファイルブラウザを開く
- news.pngをダブルクリックする
- statictexture2dのインターフェースを取り出す
- ノードブラウザを開く
- Rendering>Render To Texture Assetをアポーン
- Actions>writeをアポーン
- つなぐ

# 俺コード
```
{a, b} = RenderToTextureAsset pulse camera 800,800
statictexture2d.url = write a b
```

以上。
もしも社長がセキュリティ対策を聞いてきたら

https://www.amazon.co.jp/%E3%82%82%E3%81%97%E3%82%82%E7%A4%BE%E9%95%B7%E3%81%8C%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E5%AF%BE%E7%AD%96%E3%82%92%E8%81%9E%E3%81%84%E3%81%A6%E3%81%8D%E3%81%9F%E3%82%89-%E8%94%B5%E6%9C%AC-%E9%9B%84%E4%B8%80/dp/4822215911

背景
CISSPの勉強を開始しようと思い、ネットを調べていたところ発見した本です。
勉強に直結しないものの「CISSPの考え方」「セキュリティとの向き合い方がわかる」ということでしたので、読んでみようと思いました。

本書のテーマ
タイトルにある状況を想定して、セキュリティを知らない相手にどういうふうに説明したらいいかが書かれています。
セキュリティの知識を持っていても、それを説明するのとはわけが違う。
特に経営層などマネジメントを司る人たちにセキュリティの必要性を説明するにはどうしたらいいのか。
マーケティングや戦略の観点から書かれていてすごく面白いですし、この観点がCISSPに必要なところなのではないかなと思います。

個人的なポイント
1、新たなソリューションを検討するときは比較する
比較する方法はコンジョイント分析などを用いる

2、多層防御はBATNA
BATNAは交渉が決裂したときの代替案を用意するという考え方だが、多層防御はこれに似ている。
もしEDRを突破されても、データは暗号化されているのでデータは守れるなど。

3、BYODのメリット
最近、問い合わせをいただくことが多いが、BYODを実現するには細かい部分まで気にしないといけないので、その分メリットも明確にしないといけない。
メリットの一つは可用性が向上するということ。
いつでもどこでもどんなときでも仕事をできる可能性ができる点。
例えば、災害時も仕事が可能となる。

4、自社が目指すセキュリティと現状のギャップ分析
ゴールからの逆算の考え方だが、このときも業界標準と比較するのがいい。同業他社と比較するのもいいだろう。この同業他社比較は経営層が最も気にする部分だ。

5、セキュリティのルールが社内に浸透するまで
イノベーター理論と同じように波がある。キャズム克服をできるかが鍵。

6、購買プロセスを活用することで説得する
「危険です」ではセキュリティ機能を導入するには至らない。経営側はセキュリティに投資する側＝商品を購入する立場と考えるとこの理論が生きてくる。

7、リスクを点数化する
どれくらい危ないかが定量的にわかるとありがたい。発生頻度、影響度、防御困難度を採点して分析する。

8、マッキンゼーの7Sを考える
組織運営を考えるフレームワークでヌケモレを防ぐ。組織の方向性からセキュリティを考えられるので、局所的な考え方から抜け出せる。

１番心に残ったこと
セキュリティ機能を社内に導入する重要度を改めて認識しました。仕事では、セキュリティ製品を提案する立場にいますが、担当製品、担当のセキュリティ領域にしか目を向けていなかったかもしれません。この本があると、視野、視点、視座が変えられるのではないかと思いました。

今後やれること
担当製品の分析
今後の市場の動向分析
提案方法の変更

まとめ
お客様と話すとき、自分にどんなことが求められているのかを考え直すきっかけになりました。セキュリティを導入するに当たって、会社の方針となぜ導入検討に至ったかを考え、横比較やリスク分析、どのような状況を目指すのかということを把握して提案できると、質も変わってくると思います。
ChatGPTを使ってAWSソリューションアーキテクトアソシエイトの問題集を作成してみた

# ChatGPTを利用して、AWSソリューションアーキテクトアソシエイト向けのWEB問題集を作成してみました。
https://www.aws-qualification.link/

AWSソリューションアーキテクトアソシエイトの認定試験は、AWSのクラウドアーキテクチャ設計に関する知識を問うものであり、幅広い知識が求められます。
試験に合格するには、AWSの公式ドキュメントを読み込んだりする必要がありますが、並行して問題を解くと知識の定着率が高まります。
そこでChatGPTを利用して、AWSソリューションアーキテクトアソシエイト向けのWEB問題集を作成してみました。

ChatGPTは誤った内容を生成するので、目視で正しい内容に修正する作業が手間でしたが、1から自分で作成するよりは早く問題が作成できるような気がします。

あまりにもChatGPTが間違えた内容を生成するので、オフィスワーカーの仕事は無くならないなと安心しましたw。
google-translate.el を M-w(kill-ring-save)風に使う


# 環境
Emacs 26.3

google-translate   20220921.245

Ubuntu Linux 22.04 LTS

# 使い方
てっとりばやく使うには下記コードを init.el に追加します。

翻訳したい英語テキストの先頭でマーク(C-SPC)して、末尾にカーソル移動してから C-c w とすると、翻訳結果が kill-ring に入ります。yankなどで好きなところに貼り付けます。

# 解説
## 翻訳結果が kill-ring に入るようにする
翻訳結果が kill-ring に入るようにします
```elisp
(setq google-translate-output-destination 'kill-ring)
```
他にいろいろあるけど、例えば、翻訳結果をポイント(現在のカーソル位置)に挿入する。
```elisp
(setq google-translate-output-destination 'current-buffer)
```

## google-translate-translate に直接指定する。
最期の引数に 'kill-ring とか直接指定できます。特定の関数でだけ kill-ringに入れるとかできます。たぶん。

## 詳しくは…

詳しくは google-translate-core-ui.el の google-translate-output-destination の説明(英語)を見て下さい。
(手元の環境では ~/.emacs.d/elpa/google-translate-20220921.245/google-translate-core-ui.el)

## 関数本体

 (interactive "r") がミソらしいです。

```elisp
(defun google-translate-region (start-point end-point &optional override-p reverse-p)
  "translate from mark to point."
  (interactive "r")
  (if (string-equal major-mode "pdf-view-mode")
      (message "In PDF, select region and use google-translate-at-point")
    (let* ((langs (google-translate-read-args override-p reverse-p))
	   (source-language (car langs))
           (target-language (cadr langs)))
      (google-translate-translate
       source-language target-language
       (buffer-substring-no-properties start-point end-point)))))

```

## キーバインド
お好みで。 ここでは M-w に合わせて C-c w としてみました。

```elisp
(define-key global-map (kbd "C-c w") 'google-translate-region)
```

## てっとりばやく使いたい人用
必須の部分ではないのですが、 init.el にコピペしたときにとりあえず使えるようにしてあります。
既に google-translate を使っていて設定・自動検出で使っている人はこの部分を削除してください。
## おまけ
カレントバッファをまるっと翻訳するコマンド。元から google-translateにあるコマンドですがバインドされていないっぽかったので。

# コード全体
```elisp:google-translate-region.el
(require 'google-translate)
(require 'google-translate-default-ui)

;; てっとりばやく使いたい人用。
;; とりあえず 英語から日本語への翻訳に固定しています。
;; 既に設定・自動検出している人は削除してください。削除しろ。
(setq google-translate-default-source-language "en")
(setq google-translate-default-target-language "ja")

;; おまけ。カレントバッファまるごと翻訳
(define-key global-map (kbd "C-c b") 'google-translate-buffer)

(setq google-translate-output-destination 'kill-ring)

(defun google-translate-region (start-point end-point &optional override-p reverse-p)
  "translate from mark to point."
  (interactive "r")
  (if (string-equal major-mode "pdf-view-mode")
      (message "In PDF, select region and use google-translate-at-point")
    (let* ((langs (google-translate-read-args override-p reverse-p))
	   (source-language (car langs))
           (target-language (cadr langs)))
      (google-translate-translate
       source-language target-language
       (buffer-substring-no-properties start-point end-point)))))

(define-key global-map (kbd "C-c w") 'google-translate-region)

```

# なんでかこんなの作った！？
google-translate-at-point の使い方がよくわからんかったので。

白内障進行により(近日手術する…予定)で白黒画面がサッパリ見えず、 Chrome や FireFoxの画面もダークモードや、アドインで強制的にダークモードで使っています。
Google翻訳も同様にしていたのですが、2023年4月末ぐらいにプチ変更あったのか翻訳結果部分を最終的にレンダリングする時に白黒画面表示するようになりました。アドインなどで強制黒白画面にしても、その処理後にレンダリング走るらしく。
ということでWebでのGoogle翻訳の利用は諦めて google-translate.el を使うことに

ああ、Emacs(XEmacs)は昔から好みで黒白画面にしてあるので。
モデル駆動アプリのビューをエクセルライクに操作する　(編集可能グリッドの設定方法)

**モデル駆動アプリを再生した状態でエクセル感覚のデータ編集**

<デフォルトUI>
ビュー上で直接編集できなかったものが
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/fffb134d-5977-0e02-6415-357d33b9c6c6.png)

<編集可能グリッドUI>
直接編集できるようになる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/ca390795-7c20-166c-a41e-943539a16d73.png)

**編集可能グリッドを有効にするための設定方法**

アプリを再生した時のユーザ操作方法を変更するには、テーブルデータの設定を変更する。


PowerAppsホームからソリューションを選択
(ソリューションが表示されない場合は「詳細・・・」から追加する)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/b2af9b7b-348d-801a-a28e-b16806fa563a.png)

CDSの項目を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/86af8c56-9800-421c-8d05-797bce0b123a.png)

クラシック表示に切り替え
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/21fe7374-ce1f-6772-1847-0963c405705d.png)

エンティティから任意のテーブルを選択
(テーブルが表示されない場合は「必須コンポーネントの追加」)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/e86ab780-fa8e-def4-dcd1-7e25a80df932.png)

コントロールタブから編集可能グリッドを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/b32590cf-486a-027c-bad6-0947a5e6e464.png)

Webのトグルを変更して保存＆公開
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/5f28c069-9c03-9ad7-f0d4-fb4fd39c9248.png)

設定完了。
【UE5】Sequencerをゲーム実行せずに使うTips

# はじめに
UEのSequencerでは使い方次第で多種多様な事ができます。

ゲームで用いるとなるとゲーム実行→Sequencerで確認or編集、というフローが多くなるかと思います。

プロジェクトが肥大化するにつれてゲームを起動させて確認、というのが億劫になることがあり
できるだけUEを実行せずにSequencerを編集したく思うことがあります。

そこで、（初歩的な内容ですが）実際に使用してSequencerの編集に役に立った方法を記載します。

# シーケンサーのカメラをエディタに表示させる

CineCameraを配置したSequencerを開きつつ、画像のように配置カメラを指定することで作成したカメラをエディタ画面に表示をすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275167/b9424058-3428-f70a-908b-caccb3eb28c7.png)

画面上出ている再生ボタンを押すことでエディタ画面でシーケンサーの再生が可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275167/b8acef83-1db5-99d4-3e95-b7c20a484652.png)

# シーケンサーのイベントを非実行時に動かす

設定したイベントで、イベント内の「エディタで呼び出す」をONにすることで非実行時でも動作を行うようにできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275167/71967944-221c-34f0-9918-6b7320319e2d.png)

当然ゲーム実行中に呼ばれる機構とは異なるため、実行中か判定を行う関数を作成して分岐処理を書くことがオススメ。

# 特定のトラックをピン止めして見やすくする

Sequencerが肥大化すると構成が複雑になり、配置したトラックが見づらくなってしまいます。
そこでトラックを右クリックして「ピン止め済み」にチェックを入れると、シーケンサーの上部に固定されるため視認性が上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275167/fee942b5-0a95-81ea-57c3-552f39b79f5a.png)

# イベントのログを画面上に表示させる

統計情報を表示→コマンドで「EnableAllScreenMessages true」と入力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275167/e2844cd0-4bb2-be59-37d6-959444e32c53.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275167/6c5c1f3c-677f-2802-68b3-417c1355ed20.png)

非実行時に起動するイベントへログを仕込むことで画面上にログを出すことができます。
ゲームを起動しなくても会話劇にログを仕込むことで会話が正常に入っているかの確認が可能です。
2023/5/7主にITとかセキュリティの記事

最も使われがちなパスワード上位200。83％は「1秒未満」でクラック可能(5/5)
https://news.yahoo.co.jp/articles/bdf73b663c8e38f5ced6b5659856913ccfbfdd5d?source=rss

生成AIのリスクとは　誤情報拡散や情報漏洩が課題 きょうのことば(5/5)
https://www.nikkei.com/article/DGXZQOCB041NJ0U3A500C2000000/

米政府がAI利用指針を発表　開発企業の責任を明記(5/5)
https://news.yahoo.co.jp/articles/c6bf33888aa51d76724141b145ef660893328352?source=rss

米当局、メタの若者向け事業に規制案　18歳未満データ、収益化禁止(5/4)
https://mainichi.jp/articles/20230504/k00/00m/030/142000c

経済安保の加速へ「中国依存」脱却し国民の命守る　高市早苗氏・独占インタビュー「４つの柱」で新たな制度　闘いはＳＣ制度化(5/5)
https://news.yahoo.co.jp/articles/626c55ead55ce694f36f9cbbfdb6cb7eee5c3ebb?source=rss

北朝鮮ハッキング攻撃に韓国内で真実攻防…中央選管委「通知なかった」ｖｓ国情院「８回あった」(5/5)
https://news.yahoo.co.jp/articles/f83dd99a66673ad21faf0536b3563826313e86f2?source=rss
WSL2でElixirDesktopビルド環境を作ろう

# 前提条件
Windows11であること（Homeでも可能）

# WSL2のインストール

① 下記のコマンドを実行後再起動
```
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
② [x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)をインストール

③ 下記のコマンドを実行
```
wsl --set-default-version 2
```
④ [Windows Subsystem for Linux](https://apps.microsoft.com/store/detail/windows-subsystem-for-linux/9P9TQF7MRM4R)をMicrosoft Storeからインストールする

⑤ [Ubuntu 22.04.2 LTS](https://apps.microsoft.com/store/detail/ubuntu-22042-lts/9PN20MSR04DW)をMicrosoft Storeからインストールする

# asdfを使ってElixirと関連のパッケージのインストール
WSL2 Ubuntu22.04を起動後 
インストールスクリプトを作りましたので使い方

```
sudo apt update
sudo apt install git
git clone https://github.com/t-yamanashi/install_wsl2
cd install_wsl2
bash elixir_install.sh
```

参考elixir_install.shの中身
```elixir_install.sh
#!/bin/bash
sudo apt update
sudo apt -y install curl build-essential autoconf m4 libncurses5-dev libwxgtk3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-17-jdk libwxgtk-webview3.0-gtk3-dev

sudo apt install -y nodejs npm inotify-tools
sudo npm install n -g
sudo n stable
sudo apt purge -y nodejs npm

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.3
echo ". $HOME/.asdf/asdf.sh" >> ~/.bashrc
echo ". $HOME/.asdf/completions/asdf.bash" >> ~/.bashrc

#source ~/.bashrc
. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash

asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git

asdf install erlang 25.0.4
asdf install elixir 1.13.4-otp-25
asdf global erlang 25.0.4
asdf global elixir 1.13.4-otp-25
```

# Android Studioのインストール
① android-studio-2022.2.1.19-linux.tar.gzを下記のURLから手動でダウンロード
https://developer.android.com/studio

② ダウンロード後に、エクスプローラを使って、wsl2側にコピーする
(/home/アカウント名)

③ 解凍してAndroid Studioのを実行
```
tar zxvf android-studio-2022.2.1.19-linux.tar.gz
cd  android-studio/bin/
./studio.sh
```

あとは
Ubuntu 22.04 にElixirDesktopの開発環境を作成しようコラムの [画面に従って設定をする](https://qiita.com/t-yamanashi/items/f593731dd7b894635d66#%E7%94%BB%E9%9D%A2%E3%81%AB%E5%BE%93%E3%81%A3%E3%81%A6%E8%A8%AD%E5%AE%9A%E3%82%92%E3%81%99%E3%82%8B)

を参考にしてください。

※「スマホ本体にアプリを転送しよう」以降は、WSL2ではWifi転送が使えない為に、「画面に従って設定をする」のみ参照してください


実機転送は出来上がったapkファイル
buid/outputs/apk/debug/app-debug.apk
Googleドライブ経由でアップロードし、スマホでダウンロードして動かす事も可能です


# 補足
下記のメッセージが表示することもあります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295814/a46b38b1-f795-1e55-53ea-2636e6dcc36c.png)

対処方法
Upgrade Gradle wrpper 〜のメッセージが出るのでリンクをクリック
国際学会に出るまでの準備（手続きおよび発表内容について）

初めての国際学会で発表することが決まってから、やることがたくさんあって大変でした。発表の準備もさることながら、海外へ行くとなると様々な手続きが発生します。（コロナ禍のせいで海外に行くのも久しぶりでした。）さらに英語力についても不安だらけでした。
これは自分用のメモですが、せっかくなので公開します。特に忘れがちな手続き関係を先に書いています。

なお、この内容は発表が決まってからの準備であり、学会発表の申し込み手続きなどは省略します。他のサイトをご参考ください。

## 手続き関係
1. 1か月前からすること
　・パスポート申請、受け取り
　・大学事務に学会発表助成金等について確認
　　- 助成金申請の条件および必要な書類等を確認しておく
　・飛行機の予約、ホテルの手配
　・海外旅行保険の契約
2. 2週間前にはすべきこと
　・名刺の準備
　　- 私は簡単だったのでアスクルを使いました。
　・日本の空港へのバスorタクシー手配（電車を使わない場合）
　・ぼちぼち荷物の準備（不足してるものを買い足す）
　　- 歓迎ツアーが予定されていたので、歩きやすいフォーマルな靴などを買いました。
　　- レーザーポインターは用意されている可能性もありますが、あった方が安心です。
3. 数日前にすべきこと
　・外務省の旅レジの登録
　・大学に海外渡航申請
　・eチケットや保険証書の印刷
　・携帯を海外で使えるように手続き
　　（UQだったので、世界データ定額アプリダウンロード）

## 発表関係
1. 早いうちから
　・国際学会発表ガイド的な本を買う
　　-今回は[この本](https://www.ishiyaku.co.jp/search/details.aspx?bookcode=433640)を参考にしました
　・発表内容の英訳
　　- 関連する論文の英語アブストを参考に
　　- できるだけ自分に馴染みやすい簡単な英語を使う
　　　（故にdeeplやChatgptに頼りすぎるのは危険）
　・英語のハノン初級の前半を読む
　　- 発音の細かいルールが参考になる。実践もできる。
　・インターネット英会話の申し込み、実践
　　- 私は学研のKiminiというサービスを使いました。
　　　教材があって予習ができます。
　・海外の授業サイト見るなどしてリスニングの実践
　　- 私ははedXのジェンダー関連の授業（無料）を聞いてました。
　　　自分の専門分野に関連すると一石二鳥です。
2. 1～2週間前にはすべきこと
　・いったん発表スライド完成、先方に提出
　　- コメント担当者が確認するため、事前にスライドの提出を求められた。
　・読み原稿の作成、読み原稿をグーグル翻訳に読ませてシャドーイング
　・発表の実践的な練習
　　- ゼミメンバーに聞いてもらったり、指導教員には何度も聞いてもらいました。
3. 数日前にすべきこと
　・読み原稿が完成したら印刷しておくこと
　・スライドデータと読み原稿データをUSBメモリなどに保存して準備しておくこと
　　- 今回の学会では自分のPCが使えず、会場のPCにデータを保存してはっぴょうでした
効果的な学習法：構造的理解を目指して

# はじめに

本記事では、学習について再考し、おすすめの学習の方法を提言する。

# 学習とは

本記事では、**ある分野を構造的に理解すること**を学習と定義する。また、学習の観点として、**広さ・深さ・正確さ・関係性**を下記のように定義し、頂点をある分野を構成する情報とした下図のような木構造を簡易的に考える。それぞれが木構造と学習においてどの部分に相当するかを下記に列挙する。

- 広さ
    - ある分野の広い範囲の情報を網羅することが広さの学習
    - 木構造においては頂点あたりの辺数に相当
- 深さ
    - 分野をさらに境界づけて分割した分野を詳細に理解することが深さの学習
    - 木構造においてはの木の深さに相当
- 正確さ
    - それぞれの情報を正確に理解することが正確さの学習
    - 木構造においては頂点ごとの情報の正確性に相当
- 関係性
    - 情報どうしを単体ではなく関連づけて理解することが関係性の学習
    - 木構造においては辺に相当


```mermaid
graph LR
 プログラミングパラダイム --> 手続型プログラミング
 プログラミングパラダイム --> オブジェクト指向プログラミング
 プログラミングパラダイム --> 関数型プログラミング
 オブジェクト指向プログラミング --> クラスベース
 オブジェクト指向プログラミング --> プロトタイプベース
```

# おすすめの学習方法

先ほど紹介した考え方を用いて、自分は以下のような学習方法を提言する。

この方法は多くの分野で汎用的に用いることができると自分は考えている。

## （1）初学者→初級者 ~知る~

初学者の時点ではその分野を**知ること**が重要である。また、この段階では、正確さや深さや関係性の学習にかかるコストが高いため、それらの部分は意識せず広げることのみを意識すべきと自分は考えている。

この用途には、各分野のチュートリアルや入門用の記事が適している。また、今であればChatGPTを利用してサンプルを動かしたり概念の概要を学んだりといった方法もある。当然ではあるが、この部分の学習のための教材は非常に多い。

## （2）初級者→中級者 ~理解する~

(1)を一定時間続けると初級者になるが、次は**理解する**ために学習する必要がある。

先ほどの**知る**段階では、正確さ・深さ・関係性が十分でなく、**理解する**というのはこの部分を補填する行為である。正確さの部分については一次情報またはそれに近い情報を参照する習慣をつけることで自然と補填できると自分は考える。また、深さの部分については一次情報を元により詳しい情報を掘っていくことで補填できると考える。

ただ、関係性の部分については、ドキュメント等で明示的に示されているものでないとなかなか学習するのが難しい。自分の場合は、様々な人のスライドや記事や本などを読むことでそれぞれの情報を多角的に捉え、この部分を補填するようにしている。

さらに、**理解する**にはアウトプットが必要である。自分の場合は、Qiitaやnote等でブログを作成したり社内のLTで発表したり実務で使ったりといったところでアウトプットをしている。特にブログやLTの場合は構造化を意識してアウトプットをしており、この行為が正確さ・深さ・関係性の学習に非常に役立っていると感じる。

## （3）中級者→上級者 ~抽象化する~

先ほどの（1）と（2）を繰り返すことで中級者として成長できるが、次は**抽象化する**ために学習する必要がある。

**抽象化する**メリットとしては、学習した分野の構造を再度俯瞰することで、構造的により洗練された理解をすることができる点である。（2）の際に紹介したアウトプットは（3）においても役立つ。

また、アナロジー思考を利用することでもう一つの抽象化のメリットを享受できる。アナロジー思考とは、ある未経験の事象に対して共通した特徴を持つ他の事象を応用するような思考法である。つまり、分野間での共通性を頭に入れて学習を進めることで、差分のみを学ぶことができ、効率よく学習することができるというメリットがある。

例えば、プログラミング言語を複数学習した人は他の言語の学習も高速にできるということは耳にしたことがあると思う。この場合は、プログラミングパラダイムや言語仕様などを抽象度高く捉えられているため、差分に着目して学習できるからであり、まさにアナロジー思考を利用した例と言える。

# まとめ

昨年末に書いた下記の記事を大幅更新する形で本記事を書いた。学習という分野の学習も約半年間行ったことで、自分の見方が更新されたように、どの分野であっても継続的に学習をしていくのが重要であると自分は考える。本記事の学習方法が参考になれば幸いである。

https://qiita.com/DaikiSuyama/items/20cce5940a74743a169e
【Rust】Library crateの使い方

# crates.ioのcrateを使う
[crates.io](https://crates.io/)は、Rustで使えるutility crateをまとめたサイトです。
たとえば、乱数を生成する`rand`を導入する場合、以下の手順になります。

### 1）下図の`rand = "0.8.5"`をコピーする 

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358498/48e7e148-2680-6e1c-f511-dcab781d93a8.png' width='600' />

### 2）`Cargo.toml`の`dependencies`に登録する
```Cargo.toml
[package]
name = "lib_demo"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "0.8.5"
```

### 3）`build`する
```.cmd
cargo build
```

### 4）`use`で参照する
```rs
use rand::Rng;

pub fn gen_ran() -> u8 {
  let mut rng = rand::thread_rng();
  let n: u8 = rng.gen();
  n
}
```

# 自作のライブラリを使う
自作したライブラリをGitHubに登録して、それをrust appで使用する方法です。

### 1）ライブラリの作成
`cargo`を使ったプロジェクトは、appとlibがあり、ライブラリとしてプロジェクトを作る場合は、以下のコマンドで作成します。
```.cmd
cargo new --lib [name]
```

ちなみに、アプリケーションとしてプロジェクトを作成する場合は、
```.cmd
cargo new [name]
```

### 2）`lib.rs`に関数を作る
ライブラリは、`lib.rs`が実行ファイル（最初にcallされるファイル）になります。ここに、publicで関数を記述することで、ライブラリとして外部から呼び出すことができます。

```rs:lib.rs
mod generator;

pub fn print_random_number() {
  let n = generator::gen_ran();
  println!("Random u8: {}", n);
}
```

### 3）GitHubにリポジトリを作成する
publicリポジトリを作成して、プロジェクトをコミットします。

### 4）ライブラリとして別のプロジェクトから呼び出す
ライブラリを使いたいプロジェクトの`Cargo.toml`の`dependencies`に登録します。
gitに指定しているurlは、リポジトリのurlです。

```Cargo.toml
[package]
name = "rust-lesson"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
lib_demo = {git = "https://github.com/xxxxx/rust-lib-demo"}
```

### 5）`build`する
```.cmd
cargo build
```

### 6）`extern crate`で参照する
登録したライブラリは、`extern crate`で参照します。

```rs:main.rs
extern crate lib_demo;

fn main() {
  lib_demo::print_random_number();
}
```

# 参考
この記事は、こちらの備忘録として書いています。

https://www.udemy.com/share/104OIy3@OH0dm0ntN0Nqr9ZEnJnIMq8vdImbQQUuUpZUa7IdJyUnXNRmh1KecQ-zAB_sC36uNA==/
Photon OS 5.0 GA が出たから Photon OS 4.0 から Upgrade してみる

まさに、この 5月頭に Photon OS 5.0 が GA しました！

https://blogs.vmware.com/vsphere/2023/05/announcing-photon-os-5-0-general-availability.html

https://github.com/vmware/photon/wiki/What-is-New-in-Photon-OS-5.0

VMware Blog の記事でも、GitHub 上の Wiki でも紹介されている通り、けっこう面白そうな機能が色々あります。
詳細が気になる方は、ぜひ、上記の記事を覗いてみてください！

今回は、そんな気になる内容を試す前に、手元の環境がまだ Photon OS 4.0 なので、これを Upgrade して、Photon OS 5.0 の環境を整えて行こうと思います。
もちろん、OVA からデプロイしたとしても、Photon OS のデプロイは非常に簡単です。

https://qiita.com/iwaseyusuke/items/7b2a76f4538df93ba792

なので、今回の記事は、「へぇ、Upgrade するなら、こうやるんだ」くらいの参考にしていただければ幸いです。


# 前提

もちろん、手元の環境は Photon OS 4.0 です。

```text
# cat /etc/photon-release
VMware Photon OS 4.0
PHOTON_BUILD_NUMBER=2f5aad892
```


# 手順

基本は、公式ドキュメントの記載に従って、実行していきます。
ただ、非常に簡単な手順になっています。

https://vmware.github.io/photon/docs-v5/installation-guide/upgrading-to-photon-os-4/


## Photon OS 4.0 の最新化

よりトラブル少なく、Upgrade を実行するために、まずは、Photon OS 4.0 としてパッケージを最新化しておきます。
やっておかなくても、後でスクリプトを流した時に、自動的に実行されます。

```sh
tdnf update -y
```


## バックアップの取得

私の環境はあくまで個人のお遊びラボなので、特に取りませんでしたが、必要に応じてバックアップを取得してください。

長期間保持するようなバックアップ用途としては、全く推奨できませんが、今回のような短期間 (72時間を超えないようなレベル) のバックアップとしては、スナップショットが非常に有力な選択肢になるかと思います。
その際、どんな点を考慮すべきかは、下記の VMware KB が分かりやすいかと思います。

https://kb.vmware.com/s/article/1025279


## サービスの停止

例えば、Docker コンテナ等で、何かしらアプリを動かしている場合には、安全のためにも停止しておきましょう。
私は、↓こんな感じで、Docker コンテナが動いていないか確認をしました。

```text
# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
```


## `photon-upgrade` パッケージのインストール

Photon OS を Upgrade するためのスクリプトが、`photon-upgrade` パッケージとして提供されているので、インストールします。

```sh
tdnf -y install photon-upgrade
```

## Upgrade の実行

実際に Upgrade を実行していきます。
ちなみに、公式ドキュメントにもある通り、`--assume-yes` オプションを指定すると、対話的に聞かれる選択肢を全て `yes` で回答したと扱い、対話をスキップできます。
今回の環境は、ガチャガチャツールをインストールしたりしていたので、念の為、対話形式で進めました。

```sh
photon-upgrade.sh --upgrade-os
```

:::note info
**参考**
対話形式で進めた場合、廃止されたパッケージがあると、↓こんな感じで聞かれるので、削除した場合には、後でインストールし直すことをお忘れずに。

```sh
The following deprecated packages will be removed before upgrade -
    openjdk8
    openjre8
    openjre8
Proceed(y/n)?y
```
:::

スクリプトが最後まで実行されると、再起動を促されるので `yes(y)` を選択して、再起動します。


## 確認

起動してきたら、↓こんな感じで、Photon OS のバージョンを確認して、Photon OS 5.0 になっていれば、完了です。

```text
cat /etc/photon-release
VMware Photon OS 5.0
PHOTON_BUILD_NUMBER=dde71ec57
```
【React学習 #4】ReactにTailwind CSSを導入する

# はじめに
この記事はReact初心者の筆者が学習のために書いている記事です。
間違っていたら温かくご指摘いただけるとありがたいです。

※既にReactプロジェクトが作成済みである前提です。

# 動作環境
* PC：Macbook
* CPU：Intel
* OS：MacOS Ventura 13.3.1

# 参考
[Create React App を使用して Tailwind CSS をインストールする](https://tailwindcss.com/docs/guides/create-react-app)

# Tailwind CSSをインスール
以下のコマンドを実行してTailwind CSSをインストールします。

```
# Reactプロジェクト直下に移動する。
cd [ReactプロジェクトまでのPath]

# Tailwind CSSをインストールする。
npm install -D tailwindcss

# initコマンドを実行してconfigファイルを作成する。
npx tailwindcss init
```

# テンプレートパスを構成する
tailwind.config.jsを編集し、ファイル内のすべてのテンプレートファイルへのパスを追加します。

```tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./src/**/*.{js,jsx,ts,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}
```

# CSSにTailwindディレクティブを追加する
index.cssにTailwindディレクティブを追加する

```/src/index.css
@tailwind base;
@tailwind components;
@tailwind utilities;
```

# ビルドプロセスを開始する
以下のコマンドを実行する。

```
npm run start
```

これでTailwind CSSを使う準備は完了です。

# Tailwind CSSを使用する
App.jsでTailwind CSSが使えるか確かめます。
App.jsを以下のように編集します。

```/src/App.js
function App() {
  return (
    <h1 className="text-3xl font-bold underline">
      Hello world!
    </h1>
  );
}

export default App;
```

ブラウザで「 http://localhost:3000/ 」を開き、Tailwind CSSが適用されていることを確認できます。
ローカルリポジトリからGitHubへのプッシュまでの流れ

# 目的
Git,GitHubの学習で、ローカルリポジトリからGitHubへのプッシュまでの一連の流れにて、順序がごちゃ混ぜになってしまったのでここに整理したものを残します。

**手順**
1.パーソナルアクセストークンの作成
2.GitHubにてリポジトリの作成
3.使用するリポジトリのURLのショートカットを作成
4.プッシュ
5.GitHubにてプッシュができているか確認




# パーソナルアクセストークンの生成
まずは、リポジトリの所有者かどうか確認するためのパスワードの役割を果たす"アクセストークン"を生成します。
GitHubに移動し、メニューの``settings``をクリック。
出てきたページの左下にある、``Developer settings``をクリック。
3つ出てきた項目のうち、``Personal access tokens``の``Tokens (classic)``をクリック。
``Generate new token``で生成を開始。
``Note``トークン名を入力。何のためのトークンなのかわかりやすい名前にする。
``Expiration``で任意の有効期間を設定。
``Select scopes``で任意の設定をかける。

:::note
``Select scopes``では、アクセストークンの所有者が、どういった事までできる様にするのかを設定する項目になります。
全てのことを許可したい場合には全てにチェックを入れる。
:::

チェックを入れ終えたら``Generate token``をクリックで生成。
![スクリーンショット 2023-05-06 23.03.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332842/78e87103-f673-62ce-e0d9-9a004d3cd686.png)
オレンジ枠部の文字列をコピーし、メモアプリ等に貼り付けて残しておく。

# リポジトリの作成
GitHubのマイページにある``Repositories``をクリック。
右手にある``New``をクリック。
``Repository name``にてリポジトリの名前を設定。
その他の箇所に関しては任意の選択になります。
無料版のGitHubであれば``Public``一択になります。
``Create repository``で作成。
![スクリーンショット 2023-05-06 23.18.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332842/7cfe203d-1fe8-77ff-069b-0a391f96b36f.png)
作成後にオレンジ枠部のコードをターミナルにて実行します。

# リポジトリ(GitHub)のURLのショートカットを作成
ターミナルにてGitHubからコピーしてきた内容を実行して行きます。
```
git remote add origin GitHubのURL
```
上記コードは、originという名のショートカットを作り、GitHubのURLをそこに登録するコードになります。
この工程を踏むことで今後は`origin`でプッシュやプルができるようになります。
いちいちURLをコピペしてきて持ってくるのはきついのでこの工程はマストかと思います！
`GitHubのURL`という箇所にはコピーしてきたうちのURLが入ります。

:::note
```
git branch -M main
```
このコードは``branch``コマンドの``-M``オプションが付いており、現在のブランチ名を``main``に強制的に変更しています。
:::

# GitHub(リモートリポジトリ)へ送信(プッシュ)する
ショートカットを作成し終えたらローカルリポジトリからリモートリポジトリへ送信をします。
```
git push -u origin main
```
上記コードでリモートリポジトリへのプッシュが完了します。
``-u``というオプションは。今後``origin main``をプッシュする際に、``git push``と打つだけでプッシュができるようにするモノです。
こちらも便利なので、しておくとよいと思います。
裏側では、``ワークツリー``から``ローカルリポジトリ``へコミットしたものを``リモートリポジトリ``へプッシュといった流れになっています。

:::note
"main"という箇所はブランチ名になります。
デフォルトだと"master"になっている場合もあります。
:::

# プッシュの確認
最後にプッシュがちゃんとできているかの確認になります。
GitHubのリポジトリを作成し終え、コードをコピーしたページに戻ります。
そのページを再読み込みし、プッシュが成功すると、今まで作ったファイルなどが見れるようになっています。


# 補足 
:::note
**プッシュ時にユーザー名とパスワードの入力を求められない場合**
macを使っていると"キーチェーンアクセス"というアプリに保存され、ターミナル上で2つの項目を打たないでも大丈夫なようになっている為です。
セキュリティ上、毎回入力を出したい場合は"キーチェーンアクセス"にて検索欄で``GitHub``と検索。
検索結果で出てきた項目を削除をすると、入力が求められるようになります。
:::
Heroku上にYoutubeAPIキーを設定する

Railsでアプリを作成し、HerokuにデプロイしたときにAPIが正常に動作しなかったので、修正した過程を記事に残します。

### Heroku上で変数を設定する
1. [Herokuダッシュボード](https://dashboard.heroku.com/apps)にアクセスし、アプリを選択する
1. Settingタブに移動する
1. Config Varsの`Reveal Config Vars`ボタンを押す
1. 環境変数一覧が表示されるので、Keyに変数名を、VALUEに値を入力して`add`で保存をする

Heroku上での変数の設定は以上！！

### Rails側で変数を使用する
Rails側で使用する時も簡単で以下のように指定することで使用することができる
```
ENV['変数名']
```

### 参考にした記事

https://devcenter.heroku.com/ja/articles/config-vars
EditorConfigの設定方法

## はじめに
EditorConfigを利用することで複数のテキストエディタやIDEでインデントや改行コードなどの設定を共有することができます。
設定は`.editorconfig`に記述します。
この`.editorconfig`の記述方法について記載します。

https://editorconfig.org/#overview

なおVSCodeの場合には、以下の拡張機能をインストールすることで使用可能です。

https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig

![スクリーンショット 2022-05-11 午前4.04.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/9b2b5d10-9673-4631-d994-185b112ec505.png)

## `.editorconfig`の記述方法
以下のように記述します。
```.editorconfig
root = true

[*]
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = space
indent_size = 2

[*.md]
trim_trailing_whitespace = false
```

設定できる主な項目は以下のとおりです。

| 設定名 | 説明 |
-----|----
[...] | 対象ファイルを指定。
root| trueにすることで`.editorconfig`以下のディレクトリに設定を適用する。
end_of_line | 改行コードを指定する。`lf`,`cr`,`crlf`から選択。
indent_style | ハードタブかソフトタブかを指定。`tab` , `space`から選択。
indent_size | インデントのサイズを指定。`2` , `4`から選択。
charset | 文字コードを指定。`latin1` , `utf-8` , `utf-8-bom` , `utf-16be` , `utf-16le`から選択。
tab_width | タブの幅を指定する。省略するとindent_sizeが適用される。
trim_trailing_whitespace | 行末の空白を削除。
insert_final_newline | ファイルの末尾が改行ではない場合に補完。

https://editorconfig.org/#example-file
エラー【apt-get: command not found】について

・apt-getは、DebianやUbuntuベースのシステム用のパッケージマネージャーです。もしDebianやUbuntuベースのシステムを使っていない場合、このコマンドは動作しない可能性があります。

異なるシステムを使用している場合は、適切なパッケージマネージャーとコマンドを使用してパッケージを更新およびインストールする必要があります。

・自分のシステムが何かわからない為、
コマンド「uname -a」（カーネルのバージョンやアーキテクチャ、ホスト名などの情報を表示します。）また、システムの詳細情報を取得するために、次のコマンド「cat /etc/os-release」をうつと、
システムの情報を表示することもできます。このコマンドは、Linuxディストリビューションの名前、バージョン、ID、およびID_LIKEを表示します。

・しかし自分のPCでは、エラー文「cat: /etc/os-release: No such file or directory」と表示されました。

原因は、/etc/os-release ファイルはLinuxシステムで使われるファイルであり、macOSには存在しません。macOSのバージョン情報を知るには、このコマンド「sw_vers」をターミナルで実行してください。



以下　

メモ　①

macOS 12.5.1は、Appleが開発したオペレーティングシステムであり、DebianまたはUbuntuベースのLinuxディストリビューションではないため、apt-getパッケージマネージャーを使用することはできません。macOSでは、Homebrewと呼ばれるパッケージマネージャーが一般的に使用されています。以下は、Homebrewを使用してPostgreSQLをインストールする方法です：

1.ターミナルを開き、以下のコマンドを入力してHomebrewをインストールします。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"


2.次に、以下のコマンドを入力してPostgreSQLをインストールします。

brew install postgresql


3.インストールが完了したら、以下のコマンドを入力してPostgreSQLを起動します。

brew services start postgresql
これで、macOSにPostgreSQLがインストールされ、起動されました。


メモ②

brew install postgresqlを実行することでPostgreSQLをインストールできます。ただし、macOSでは、brewを使用してPostgreSQLをインストールすると、一部のライブラリが正しく設定されない場合があります。エラーが発生した場合は、icu4cライブラリがないことが原因である可能性があります。この場合は、icu4cライブラリをインストールすることで問題を解決できます。以下のコマンドを実行してください。

brew install icu4c

その後、PostgreSQLを再インストールしてください。

brew install postgresql



以下

エラー文と解決方法


エラー文
Warning: postgresql@14 14.7 is already installed, it's just not linked.
To link this version, run:
  brew link postgresql@14


解決方法
これは、Homebrewでpostgresql@14が既にインストールされているが、現在はリンクされていないことを示しています。したがって、次のコマンドを実行して、postgresql@14をリンクしてください。

brew link postgresql@14



最後に、以下をして終了
・アプリケーションのルートディレクトリに移動
・次に、以下のコマンドを実行して、アプリケーションに必要なgem（Rubyの場合）をインストールします。

bundle install


これで、PostgreSQLを使用する準備が整いました。
Grafana Loki＋PromtailでvCenter/ESXiのログを可視化する

## 概要
vCenter/ESXiのログファイルをリモートのrsyslogへ転送して集約することはよく行われるが、ここではさらにログを可視化したり検索しやすいようにGrafana Lokiの導入を試してみる。rsyslog、Promtail、Loki、Grafanaはすべてdocker-composeで環境構築する。
参考：https://grafana.com/oss/loki/

アーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/cbf3c31a-376d-417c-358b-22e0fa136c23.png)


## 環境
- vCenter/ESXi : 7.0u1
- Promtail : 2.8.0
- Loki : 2.8.0
- Grafana : 8.2.6

## 前提
- docker、docker-composeはインストール済み

## How to setup
1．rsyslogコンテナイメージを作成
以下のようにDockerfileを書いて `sudo docker build -t rsyslog .` でイメージビルドしておく。
 
https://gist.github.com/tadashota212/bc35af8c76e80f6ebf5a681c3aa093cd

2．docker-compose.yaml

https://gist.github.com/tadashota212/8eb638fcd8218fa787d911d7d52dfe08

3．rsyslog.conf
vCenter/ESXiからのsyslogは一旦すべてrsyslogで受信する。514/udpで受信して、1514/tcpでリッスンしているPromtailへリレーする。

https://gist.github.com/tadashota212/6b8f0c819bf18cdc9c851b8841e6bc5c

4．promtail-config.yaml
参考： https://grafana.com/docs/loki/latest/clients/promtail/scraping/#syslog-receiver

https://gist.github.com/tadashota212/6bab77c9b315cd1f5e75be6cddf07d20

5．コンテナを起動

```
//コンテナを起動
$ sudo docker compose up -d

//起動確認
$ sudo docker compose ps
NAME                IMAGE                    COMMAND                  SERVICE             CREATED             STATUS              PORTS
loki-grafana-1      grafana/grafana:latest   "/run.sh"                grafana             About an hour ago   Up About an hour    0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
loki-loki-1         grafana/loki:2.8.0       "/usr/bin/loki -conf…"   loki                About an hour ago   Up About an hour    0.0.0.0:3100->3100/tcp, :::3100->3100/tcp
loki-promtail-1     grafana/promtail:2.8.0   "/usr/bin/promtail -…"   promtail            About an hour ago   Up About an hour    0.0.0.0:1514->1514/tcp, :::1514->1514/tcp, 0.0.0.0:9080->9080/tcp, :::9080->9080/tcp
loki-rsyslog-1      rsyslog                  "rsyslogd -n"            rsyslog             About an hour ago   Up About an hour    0.0.0.0:514->514/udp, :::514->514/udp
```

6．vSphere側のログ転送設定
- <a href="https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.monitoring.doc/GUID-9633A961-A5C3-4658-B099-B81E0512DC21.html">vCenterのログファイルをsyslogサーバへ転送</a>
- <a href="https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.security.doc/GUID-9F67DB52-F469-451F-B6C8-DAE8D95976E7.html">ESXiホストでの Syslog の構成</a>



7．Grafana設定
データソースとしてLokiを指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/fdfb2753-05d2-313a-1108-fb1c768062fe.png)

## Log queries
Promtailのラベル設定で付与したラベルを使ってログを検索・抽出。ホスト名、ログの重要度レベル、etcでフィルタするなどの使い方ができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/85df7974-73ee-035a-746a-c1e2e4201f9e.png)
【離島生活】沖縄県宮古島市の回線事情について

## きっかけ
海とは無縁の環境から沖縄県の宮古島市に移住し、東京の会社をそのままにフルリモート勤務をして約1年が経ちました。
移住前に「インターネットの回線事情」は全然情報がなく、結構私の中ではチャレンジでした。

結果的に業務上必要なWeb会議や画面共有は問題なく対応できています。実際の回線速度や離島で仕事をする上での注意点を残せればな～と思って投稿しました。

## 前提
* 東京の会社でフルリモート勤務のWebエンジニア
* NWの知識は応用情報技術者試験に合格する程度

## 宮古島の回線事情
### 島の生命線　～海底ケーブル～
宮古島の回線事情についてまず疑問だったのが海底ケーブルの構成でした。
移住前に調べた際に、下記の記事が参考になりました。
[離島へつながる"光の道"完成！](https://www.pref.okinawa.lg.jp/site/chijiko/kohokoryu/kense/publicity/kohoshi/kohoshi/back/2013/documents/churashima497_03.pdf)

> ※要約すると既に「①沖縄本島～宮古島ルート」と「②宮古島～石垣島ルート」が構築されており、例え①ルートの海底ケーブルに通信不通が起きても②ルートで通信が継続できます。
ちょっとやそっとで断線・通信断したりはしないということが分かりました。（いま考えれば当たり前！！）



### 回線速度
宮古島のインターネット回線の速度は中々調べても前提など含めた情報がなく、半ばチャレンジでの移住でした。

我が家での計測結果は下記の通りで、下り30MB以上は基本的に維持出来ているので、業務上での不都合はありませんでした。
マンションタイプでも恐らく大丈夫だと思いますが、心配な方は戸建てタイプで回線契約できればより安心かな～と思いました。

**＜環境＞**
* 回線：NTT 西日本
* プロバイダー：So-net 光 戸建 (西)
* ONU：単体型ONU
* ルーター：NEC 無線LAN Atermシリーズ WF1200CR


**＜Wi-fi環境による測定結果＞**
<table>
  <thead>
    <tr>
      <th>時間</th>
      <th>下り速度</th>
      <th>上り速度</th>
      <th>Ping値</th>
    </tr>
  </thead>
  <tr>
    <td>平日9時頃</td>
    <td>43.02Mbps</td>
    <td>51.08Mbps</td>
    <td>30ms</td>
  </tr>
  <tr>
    <td>平日13時頃</td>
    <td>62.34Mbps</td>
    <td>94.74Mbps</td>
    <td>47ms</td>
  </tr>
  <tr>
    <td>平日16時頃</td>
    <td>66.45Mbps</td>
    <td>93.13Mbps</td>
    <td>32ms</td>
  </tr>
  <tr>
    <td>平日20時頃</td>
    <td>50.84Mbps</td>
    <td>91.22Mbps</td>
    <td>30ms</td>
  </tr>
</table>

## 離島ワーカーの注意点
なんだフルリモート楽勝！と思いましたが、不便な点や現在進行形で不安な点もあります。

### キャリア回線は遅い
回線工事を引っ越し日に合わせるのは至難の技なので、移住直後はiPhoneのテザリングやレンタルルーターを利用して業務をしていました。
光回線の利用までは移住してから約1ヶ月ほど掛かりました。
キャリア回線は電波塔が少ないためか、下り10MBを切ることもザラでした。
5Gエリアも少しずつ拡張していますが、googleのページを開くのに1～3秒程度かかる時もあるので出先では結構ストレスを感じます。

### 停電の備え
大きい台風や雷雨で停電することが普通にあります。
我が家の住んでいる地域は運よく停電を免れていますが、こればっかりは地域によりけりです。非常用の大型電源を持っておくと離島暮らしでは何かと便利ですね。
iPhoneのテザリングと非常用電源で最低限業務継続できるハズです。

### 電話の不通（途切れ）
iPhoneでスピーカー通話をすると音声の途切れが激しくほぼ使えない状態です。
キャリアの調査チームに自宅まで来て頂き、色々と見てもらいましたが原因は不明でした。音声通話であれば途切れもほぼなく通話できます。
東京にいた際はなかった事象なので離島特有なのかもしれません。


## 最後に
技術とは少し離れた記事になってしまいましたが、移住生活を考えている方の後押しになれば幸いです。
ここまで見て頂きありがとうございました。
SQLのVIEW

# SQLのVIEW
SQLのVIEWとは、データベース内の1つまたは複数のテーブルからデータを取得し、仮想的なテーブルとして定義することができるオブジェクトです。VIEWを使用することで、複雑なクエリを簡略化することができます。

## VIEWの利点
VIEWは、以下のような利点があります：

- 簡潔なコード：VIEWを使用することで、複雑なクエリを作成する際に必要なコードの量を削減することができます。また、VIEWを使用することで、同じクエリを何度も再利用することができます。

- セキュリティ：VIEWを使用することで、アプリケーションに必要なデータだけを抽出して表示することができます。つまり、アプリケーションに必要なデータ以外のデータが表示されることがなく、データのセキュリティが向上します。

- パフォーマンス：VIEWを使用することで、データベース内の冗長なデータを排除することができます。また、VIEWを使用することで、複雑なクエリを作成する際に必要なコストを削減することができます。

VIEWを作成するには、CREATE VIEW文を使用します。CREATE VIEW文を使用してVIEWを作成すると、VIEWを使用してデータを取得することができます。また、VIEWを使用してデータを更新することもできますが、一部の制限があります。VIEWを使用してデータを更新する場合は、VIEWが参照するテーブルの1つまたは複数の列を更新することができます。ただし、VIEWが参照する複数のテーブルの列を更新することはできません。

## 使用例
以下は、2つのテーブルからVIEWを作成し、より簡単にデータの集計や集約を行う方法を示した例です。

まず、顧客情報を持つcustomersテーブルと、注文情報を持つordersテーブルを作成します。

```SQL
CREATE TABLE customers (
  customer_id INT PRIMARY KEY,
  customer_name VARCHAR(50),
  customer_email VARCHAR(50)
);

CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  customer_id INT,
  order_date DATE
);
```
次に、LEFT JOINを使用して、customersテーブルとordersテーブルを結合し、顧客ごとの注文数を計算するVIEWを作成します。

```SQL
CREATE VIEW customer_order_count AS
SELECT c.customer_name, COUNT(o.order_id) AS order_count
FROM customers c
LEFT JOIN orders o
ON c.customer_id = o.customer_id
GROUP BY c.customer_name;
```
上記のVIEWを使用することで、以下のように顧客ごとの注文数を簡単に取得することができます。

```SQL
SELECT * FROM customer_order_count;
```
結果は以下のように表示されます。

```SQL
| customer_name | order_count |
| ------------- | ----------- |
| Alice         | 2           |
| Bob           | 3           |
| Charlie       | 0           |
```
このように、VIEWを使用することで、複雑なクエリを簡略化し、データの集計や集約を簡単に行うことができます。

また、以下の例は、商品情報を含むproductsテーブルと、商品カテゴリーを含むcategoriesテーブルを結合して、商品名、商品価格、商品カテゴリーを表示するVIEWを作成する例です。

```SQL
CREATE TABLE categories (
  category_id INT PRIMARY KEY,
  category_name VARCHAR(50)
);

CREATE TABLE products (
  product_id INT PRIMARY KEY,
  product_name VARCHAR(50),
  product_price INT,
  category_id INT,
  FOREIGN KEY (category_id) REFERENCES categories(category_id)
);

INSERT INTO categories (category_id, category_name) VALUES (1, '食品');
INSERT INTO categories (category_id, category_name) VALUES (2, '家電');
INSERT INTO products (product_id, product_name, product_price, category_id) VALUES (1, 'りんご', 100, 1);
INSERT INTO products (product_id, product_name, product_price, category_id) VALUES (2, 'みかん', 50, 1);
INSERT INTO products (product_id, product_name, product_price, category_id) VALUES (3, 'テレビ', 50000, 2);
INSERT INTO products (product_id, product_name, product_price, category_id) VALUES (4, '洗濯機', 70000, 2);
```

上記の例では、VIEWを使用することで、JOINを行っているテーブルの結合条件やフィールドの指定をVIEWで定義し、簡潔にクエリを書くことができます。また、VIEWを使用することで、より高度なクエリの実行やパフォーマンスの向上にも役立つことがあります。

ただし、VIEWを使用する場合には、いくつかの制限があることに注意する必要があります。例えば、VIEWはSELECT文のみで定義されるため、INSERT、UPDATE、DELETEなどのデータの変更操作はできません。また、VIEWを使用すると、元のテーブルが変更された場合、VIEWの内容も変更されるため、予期しない結果が生じることがあります。

さらに、VIEWを使用することでパフォーマンス上の問題が生じる場合があります。特に、VIEWの定義が複雑であったり、JOINや集計を多用する場合には、クエリの実行に時間がかかる場合があります。そのため、大規模なデータを扱う場合には、VIEWを使用する前に注意深く検討する必要があります。

以上のように、VIEWは複雑なクエリを簡略化し、データの集計や集約を簡単に行うことができる有用な機能です。しかし、VIEWを使用する場合には、いくつかの制限や注意点についても理解しておく必要があります。
Pythonで通貨換算（為替レート取得）してみました - Part2

## 概要

USD から JPY へ為替変換する Pythonプログラムを[以前作成](https://qiita.com/turupon/items/309bc3963e59cd0bdaf2)しました。そのプログラムはいつの間にかエラーで動作ぜず、改めてプログラムを見直しました。　

- 以下の２パターンで実施
  - CurrencyConverter を利用
  - pandas-datareader を利用

### 実行環境

macOS Ventura 13.0 
python 3.8.12

### 事前準備

事前に以下のモジュールをインポートしておきます。

```
$ pip install yfinance
```

### 実行プログラム

```python:GetCurrentRaye_2.py
from currency_converter import CurrencyConverter
import pandas_datareader.data as pdr
import pandas as pd
import yfinance as yf
import datetime


# CurrencyConverter を利用した USD-JPY 為替
def get_currencyconverter_rate() :
    res0 = CurrencyConverter()
    crate = res0.convert(1, 'USD', 'JPY')
    print("CurrencyConverter を利用した USD-JPY 為替 ---> ", round(crate, 2), "\n")


# pandas-datareader を利用した USD-JPY 為替
def get_datareader_rate() :
    start = "2023-05-01"
    ticker = "USDJPY=X"
    yf.pdr_override()

    res1 = pdr.get_data_yahoo(ticker, start).tail(1)
    res2 = res1["Adj Close"].values 
    crate = res2[0]
    print("pandas-datareader を利用した USD-JPY 為替 ---> ", round(crate, 2), "\n")


# pandas-datareader を利用した USD-JPY 日毎為替情報
def get_datareader_rate_list() :
    start = "2023-05-01"
    end = datetime.date.today()
    ticker = "USDJPY=X"
    yf.pdr_override()

    res1 = pdr.get_data_yahoo(ticker, start, end)
    print("pandas-datareader を利用した USD-JPY 対象期間の為替 ---> ")
    print(res1)


# メイン
if __name__ == '__main__':
    print("")
    get_currencyconverter_rate()
    get_datareader_rate()
    get_datareader_rate_list()
```

### プログラムの実行

```
## 為替レートの取得
$ python GetCurrentRate_2.py

CurrencyConverter を利用した USD-JPY 為替 --->  138.35 

[*********************100%***********************]  1 of 1 completed
pandas-datareader を利用した USD-JPY 為替 --->  134.82 

[*********************100%***********************]  1 of 1 completed
pandas-datareader を利用した USD-JPY 対象期間の為替 ---> 
                  Open        High         Low       Close   Adj Close  Volume
Date                                                                          
2023-05-01  136.386002  137.401993  136.263000  136.386002  136.386002       0
2023-05-02  137.520996  137.764999  136.408997  137.520996  137.520996       0
2023-05-03  136.466003  136.569000  135.072006  136.466003  136.466003       0
2023-05-04  134.544006  134.869995  133.686005  134.544006  134.544006       0
2023-05-05  134.179001  135.085007  133.886002  134.179001  134.179001       0
2023-05-06  134.218994  135.125000  133.880005  134.819000  134.819000       0
```

### まとめ

エラーはなくなり、正常に為替情報を取得できるようになりました。引き続き、pandas-datareader を利用して為替情報を取得していきたいと思います（CurrencyConverter を利用するより正確なため）。

### 参考記事

以下の記事を参考にさせていただきました。感謝申し上げます。
[python（pandas_datareader）の株価取得でエラーが出た方へ](https://www.bookloveru2.com/post/python-analysis16)
【初学者向け】viやvimなどのエディタがない！どうすれば！？

# はじめに
はじめてLinuxを勉強するときに、Dockerイメージをもとに環境構築をすると、viやvimなどのエディタが入っていないため、`bash: vim: command not found`と出てしまい戸惑ったので、その解決方法を共有します。

:::note info
今回のように、Dockerイメージによっては最小限の機能しかインストールされていないことがあります。
そのため、viやvimが存在しないことは普通にあり得ます。

:::

# 解決方法
- コンテナ内でパッケージマネージャの apt をアップデートします。
```
apt-get update
```
- 次に、vimをインストールします。
```
apt-get install -y vim
```
これで、vimがインストールされるはずです。

# apt とは
apt（Advanced Package Tool）は、Ubuntu などで使用されるパッケージ管理ツールです。
aptは、ソフトウェアのインストール、アップグレード、削除、依存関係の解決など、システム上のパッケージを簡単かつ効率的に管理するために使用されます。

特に apt-getコマンド は、ソフトウェアパッケージのインストール、アップグレード、削除を行います。例えば、`sudo apt-get install vim` は、vimエディタをインストールするために使用されます。

# 今後を見据えて
今後みなさんが Ruby on Rails を学ぶために環境構築をDockerでする際、Dockerfileを記述することになると思います。
その中では
```
RUN apt-get update -qq && apt-get install -y (略)
```
のようなコードを記述するため、今のうちに慣れてほしいな〜と言う気持ちでこの記事を書きました。

:::note info
-qqは、apt-get updateの出力を最小限に抑えるオプションです。
:::

# なぜ apt-get update をするのか
apt-get updateは、ローカルのパッケージリストをリモートのリポジトリと同期することで、最新のパッケージを取得できるようにします。
apt-get updateを行わずにパッケージをインストールしようとすると、古いパッケージがインストールされたり、依存関係が解決できない場合があります。
そのため、新しいパッケージをインストールする前にはapt-get updateを実行する必要があります。

# 最後に
お疲れ様でした！
以上で、viやvimなどのエディタをインストールする手順が完了となります。

- また、日本語を扱えるようにしたい方には以下の記事も参考になるかと思います。
[【Linux・vim】日本語を扱えるようにする](https://qiita.com/yuta_931214/items/fba2b1ba5aab750823e7)

プログラミングは学習範囲が広すぎて頭がパンクしそうになりますねw
ですが、お互い諦めずに頑張りましょう！
それではまた！(^_^)ﾉｼ
言語別 関係・論理演算子 ==と===の違いのまとめ 2023/5/6

そんなのまとめなくてもわかる。という方しかほぼいないと思いますが、なんかわけわからなくなることがたまにあったりなかったりするので整理
言語: C, Java, JavaScript, Python

# 一応、関係演算子（比較演算子）・論理演算子とは

- 関係演算子: あるものとあるものの関係を調べようぜ、の時に使う。true/falseの真偽値で返す。
  例: AとBが**同じ**とき,AがBより**大きい**とき,AがB**以下**のときみたいな感じで使う
- 論理演算子、命題的な感じでの論理演算の演算子の総称
  例: AとBが同じ**かつ**CがDより大きい**または**EがF以下のときに～～みたいな感じで使う

# 真偽値
|言語|偽|真|その他に偽として判定される値(falsyな値)|
|---|---|---|---|
|C|false|true|0, NULL|
|Java|false|true|なし|
|JavaScript|false|true|undefined, null, 数値の0, 空文字列|
|Python|False|True|None, 数値の0、空文字列, 空リスト, 空タプル, 空辞書|

# 等号/不等号
|言語|等号|不等号|
|---|---|---|
|C|==|!=|
|Java|==|!=|
|JavaScript|==|!=|
|Python|==|!=|

# 大/小/以下/以上
|言語|大|小|以下|以上|
|---|---|---|---|---|
|C|<|>|<=|>=|
|Java|<|>|<=|>=|
|JavaScript|<|>|<=|>=|
|Python|<|>|<=|>=|

# かつ/または/否定
|言語|かつ|または|否定|
|---|---|---|---|
|C|&&|\|\||!|
|Java|&&|\|\||!|
|JavaScript|&&|\|\||!|
|Python|and|or|not|

まとめてみるとほぼみんないっしょ。これじゃ中身が薄いから、==と===の違いについて

# ==と===の違いについて
JavaScriptには==と===があり、これらは混ぜて使われがちで議論を生みます。
==とは、等価演算子であり、文字列と数字を比較するときには文字列を数字に変換してから比較します。
===とは、厳密等価演算子であり、まったく、形式を変換せずに比較します。
厳密にやるなら===ということですね。


|言語|値型同値|参照型同値|参照型同一|曖昧等価|厳密等価|
|---|---|---|---|---|---|
|C|==|各種比較関数|==|なし|なし|
|Java|==|equalsメソッド|==|なし|なし|
|JavaScript|なし|なし|なし|==|===|
|Python|==|==|is|なし|なし|

# まとめ
演算子はいろいろあるから理解して使うようにします。