OmniAICreator/Qiita-1.07M huggingface dataset:
【データ活用/Snowflake】Snowflakeでデータ活用をする際のデータの流れを理解する

# 今回の課題
Snowflakeを通してデータ活用をする際の、データの流れのパターンを理解する。
下記の動画で紹介されていたアーキテクチャを参考に調査して勉強をしてみた。

https://www.youtube.com/watch?v=4RplSCXVL2U


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883573/f5a95ec0-981a-1e07-92d8-b4ff4c882439.png)
※紹介されていたアーキテクチャ

## データ活用時のデータ基盤の構成について
上記のアーキテクチャでは、大きく分けて3パターンのデータの流れが紹介されていた。
### 1)Snowpipeなどを使用してSnowflakeに格納したデータをBIツールと連携
S3から、Snowpipeなどを使用してSnowflakeにデータをロードしてテーブルを生成し、
そちらをBIツールや`Amazon SageMaker`などに連携する基本的な使い方。


### 2)Snowflakeの外部テーブル機能でS3のデータを参照し、それらをBIツールや`Amazon SageMaker`と連携
外部テーブルとは、読み取り専用でS3などの外部のストレージのデータに、Snowflakeからアクセスすることができる機能。

Snowflake内にテーブルを生成しなくても、Snowflakeの外部テーブル機能でS3などのストレージにあるCSVやParquetファイルを読み込み、
それらをBIツールやAmazon SageMaketに連携することで、`1)`と同様にデータを活用することができる。

また、S3のデータをSnowflakeに外部テーブル機能で読み込み、
それらを加工して新たなテーブルを生成して、データ活用したり、S3にデータをアンロードするといったことも可能。

※参考：[外部テーブルの概要(公式ドキュメント)](https://docs.snowflake.com/ja/user-guide/tables-external-intro)

### 3)S3から直接`AmazonSageMaker`に連携する。
Snowflakeを通さず、AWSのサービスでデータ活用をすることも可能。

# まとめ
SnowflakeとAWSをデータ基盤として使用する際に、
`1)`のように**データレイクからSnowflakeにデータをロードして生成したテーブルを活用する**ということ以外にも、データ活用時に行える方法があることを学べた。
ChatGPT-4にSeleniumで画像キャプチャするソースコードを生成してもらってみた

条件
seleniumを使って、引数として入力したurlの画面をキャプチャするプログラムを書いてください。ただし、条件は以下に従って下さい。
・言語はPython3を使用
・開発はMac
・複数のURLに対応
・実行する際の引数はターミナルで指定
・スクロールした時の画面をキャプチャする
・キャプチャした画面を、10MB未満で保存する

```capture_screenshot.py
import sys
import os
from io import BytesIO
from PIL import Image
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def capture_website(url, output_path):
    # Chrome WebDriverをヘッドレスモードで設定
    options = Options()
    options.headless = True
    driver = webdriver.Chrome(options=options)

    # 指定されたURLを読み込み、ページの一番下までスクロール
    driver.get(url)
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    driver.implicitly_wait(3)

    # スクリーンショットをキャプチャし、WebDriverを閉じる
    image_data = BytesIO(driver.get_screenshot_as_png())
    driver.quit()

    # キャプチャした画像をPIL Imageオブジェクトに変換
    img = Image.open(image_data)
    img_quality = 90
    img_size = img.size

    # 画像サイズが10MB未満になるまで、画像品質を下げる
    while img_size > 10 * 1024 * 1024:
        img.save(output_path, "JPEG", quality=img_quality)
        img_size = os.path.getsize(output_path)
        img_quality -= 5

    # 調整された品質で画像を保存
    img.save(output_path, "JPEG", quality=img_quality)
    print(f"Screenshot saved at {output_path}")

if __name__ == "__main__":
    # コマンドライン引数に最低1つのURLが指定されているかチェック
    if len(sys.argv) < 2:
        print("Usage: python capture_website_chrome.py <url1> [<url2> <url3> ...]")
        sys.exit(1)

    # コマンドライン引数からURLのリストを取得
    urls = sys.argv[1:]

    # 各URLのスクリーンショットをキャプチャし、保存
    for i, url in enumerate(urls, 1):
        output_path = f"screenshot_{i}.jpeg"
        capture_website(url, output_path)


```
Googleデジタルマーケティング＆Eコマース：ソーシャルリスニングの重要性


# はじめに

”Googleデジタルマーケティング＆Eコマース プロフェッショナル認定証"　の受講が完了しました(2022/3/3)。私がこのコースから得られた素晴らしい体験を、テーマごとに分割して、わかりやすくご紹介しています。興味を持たれた方は、是非下記を受講してみてください。

https://jp.coursera.org/professional-certificates/google-digital-marketing-ecommerce

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/24ea32fb-2fb3-bdb2-462a-4ffc4d60a96f.png" width="800">

# ソーシャルリスニングとは

***<font color="MediumVioletRed">『ソーシャルリスニングとは、あなたのブランドに関する会話やトレンドを追跡・分析すること』</font>***

人々があなたのブランドについてどう考えているかを理解し、今後のマーケティングや製品開発の意思決定に役立てることができます。

ソーシャルリスニングは2つのステップで構成されています。

1. ソーシャルメディア・プラットフォームを監視し、貴社ブランド、製品サービス、競合他社、関連キーワードについての言及を確認します。
2. 収集した情報を分析し、学んだことに基づいて行動を計画することです。

これらのアクションは、不満のある顧客に対応するような小さなものから、ソーシャルメディア戦略全体を調整するような大きなものまであります。

# ソーシャルリスニングの重要性

ソーシャルリスニングがソーシャルメディア・マーケティング戦略の重要な部分となる理由は数多くあります。

### 理由１

ソーシャルリスニングは、***<font color="MediumBlue">貴社ブランドに対するソーシャルメディア上のセンチメントを理解する</font>***　のに役立ちます。

ソーシャルメディアセンチメントとは、ソーシャルメディア上で人々があなたのブランドに対して抱いている態度や感情のことです。人々が貴社ブランドについてどのように感じているかを知ることは、貴社のソーシャルメディア・マーケティング戦略で何がうまくいっているか、どこを変更する必要があるかを特定するのに役立ちます。

### 理由2

ソーシャルリスニングは、***<font color="MediumBlue">ブランドについて顧客やフォロワーと対話する機会</font>***　を提供します。

例えば、顧客が製品をどれほど気に入っているかをコメントしたり、質問をしたりした場合、これは顧客に直接関わることができる絶好の機会です。顧客はソーシャルメディア上で自分の意見を聞いてもらいたがっており、それに応えることでブランドロイヤリティを引き出し、顧客維持率を高めることができます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/7e3b02d7-a170-43fd-f4bc-9f26b814b2db.png" width="400">

ソーシャルメディア上であなたのブランドに対して否定的な感情が表明されている場合、ソーシャルリスニングはその原因を突き止め、問題に対処するのに役立ちます。

- **顧客のペインポイントは何か？**
- **人々が話している問題に対して、解決策を提供することはできますか？**

もし可能であれば、ソーシャルメディア上で人々にそれを伝えるようにしてください。例えば、あなたの会社のアプリからの注文に関する問題を多くのお客様がモニターしているとします。その問題を自社のIT部門にエスカレートさせ、その上で、顧客の懸念に対処していることを伝える投稿を公開するとよいでしょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/aee2ed23-e379-6336-087f-88a9644274f1.png" width="500">

とはいえ、個々のユーザーに直接対応するために共有するメッセージと、公に投稿するメッセージとには、十分な配慮が必要です。少人数のグループに影響する問題は、オーディエンスの大部分には影響しないかもしれませんし、その問題について公に投稿することで、より注目を集めることができるかもしれません。

### 理由3

ソーシャルリスニングは、***<font color="MediumBlue">競合を分析するのに最適なツール</font>***　です。

競合他社が何をしようとしているのかを知り、それについて顧客がどう感じているかを知ることができます。例えば、競合の顧客が特定の製品に不満を持っていることを知ることができるかもしれない。そうすれば、同じような製品を改良するための戦略を練ることができます。

また、競合のコンテンツが自社のコンテンツを凌駕していることに気づくかもしれません。競合のコンテンツが、なぜあなたの共通のオーディエンスによく響くのかを分析し、それに応じてあなたのコンテンツを調整することができます。

### 理由4

ソーシャルリスニングを利用して、***<font color="MediumBlue">顧客獲得数を増やす</font>***　こともできます。


ソーシャルメディアは、潜在的な新規顧客を獲得するための多くの機会を提供します。あなたのフォロワーは既存の顧客だけでなく、あなたのコンテンツに興味を持っている人たちでもあるのです。ソーシャルリスニングを利用すれば、フォロワーがどのようなコンテンツを楽しんでいるかを知ることができます。そして、そのフォロワーにアピールするコンテンツを作成し、あなたのブランドに引き込むことができるのです。


:::note info
ソーシャルリスニングは、ソーシャルメディア・キャンペーンの重要な要素になります。ソーシャルリスニングから得られる洞察は、フォロワーが興味を持っているコンテンツを作成したり、業界のトレンドに基づいて新しいアイデアを思いついたり、現在の市場に合うようにマーケティング戦略を調整したりするのに役立ちます。
:::
Visual BasicとかVBとか.NETとかの違いを用語を整理してみた

似たような単語が多くて混乱しがちなので整理

## 実行環境

* .NET framework
フレームワーク、実行環境。Windows OSなら標準で入っている。.NET frameworkアプリケーションと言ったら、こいつが入っているPC上で動くアプリケーションということ
https://wa3.i-3-i.info/word13559.html
  * 対応している言語はC#とかVBとか
  * Microsoft .NET と言った場合はさらに広い概念だが実質的には.NET frameworkのことっぽい cf. https://e-words.jp/w/Microsoft_.NET.html
* .NET
Windows上で動作する.NET Framework、macOS/Linux/Windowsで動作する.NET Core、Android/iOSで動作するXamarinを総称したもの

## フレームワーク

* ASP.NET  
.NET Frameworkの上に構築されたWebアプリケーションのためのフレームワークとなります。Visual Studioと組み合わせて使用することで、簡単に効率よく高機能なWebアプリケーションを開発することが出来ます。ASPとはActive Server Pages（アクティブサーバーページ）の略称でWebページを動的に作成する技術のことです。ASP.NETはこのActive Server Pagesを.NET Framework向けにしたものです。 cf. https://anken-hyouban.com/blog/2020/06/21/net-framework/#the_post_19

## プログラム言語

* Visual Basic (VB) / Visual Basic .NET (VB .NET)
全部同じ系列のプログラミング言語。Windowsアプリを作るときに使う。cf. https://wa3.i-3-i.info/word14235.html
* Visual Basic for Applications (VBA)
Office製品を動かすために調整したVB cf. https://wa3.i-3-i.info/word14239.html
* VBScript
VBを真似て作ったスクリプト言語。cf. https://wa3.i-3-i.info/word14238.html
子要素にfocusが当てられたときに親要素のスタイルを変更する

# はじめに
子要素のイベントに対して親要素のスタイルを変える方法がよくわからなかったので調べました。
SCSSを使ってます。

# 完成イメージ
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="xxajaGd" data-user="riiiiion" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/riiiiion/pen/xxajaGd">
  Untitled</a> by riiiiion (<a href="https://codepen.io/riiiiion">@riiiiion</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>


# 解説
inputContainerの中にinputとボタンが配置されているので
inputContainer = 親要素
input,button = 子要素
となっています。
今回は子要素にfocusが当たったときに親要素のborderの色を変更します。

それを実現するために :focus-withinという擬似クラスを使用します。
```SCSS::focus-within

.inputContainer {
  width:210px;
  border:3px solid black;
  display: flex;
  justify-content :space-around;

  &:focus-within {
  border:3px solid red;
}
}
```
このようにすると子要素にfocusが当たったときのスタイルを記述することができます。


# まとめ
:focus-within　　便利ですね〜
Rocky Linux 9でPowerToolsリポジトリを使いたい

# 結論
そんなものはない。代わりにCRBリポジトリを使え。

はい、ちょっとでも詳しい人にはタイトルを見て「何言ってんの、この人？」と言われそうだったので、最初に答を書きました。

# 詳細
## 経緯
ネットに書かれた手順の通りにパッケージをインストールしようとして、yum/dnfに「そんなパッケージはない」と怒られることは（それなりに）あると思います。だいたいそういう場合は、標準では有効になっていないリポジトリにそのパッケージがあります。で、親切なページには「powertoolsを有効にしておくこと」とか非標準のリポジトリの名前が書いてあって、さらのそのためのコマンドも書いてあったりするので、普通はそれに従いますよね。が、それではうまくいきません。

    $ sudo dnf config-manager --set-enabled powertools
    Error: No matching repo to modify: powertools.

「え？書いてある通りやったはずだけど。"powertools"の綴りが間違ってるかな。そんなわけないよな」とか考え始めると（底なし）沼ですね。

## 文書読め
Rocky Linuxも結構ちゃんと文書を作ってくれているのです。その文書を読みましょう。リポジトリ関連のことは[Rocky Linux Repositories](https://wiki.rockylinux.org/rocky/repo/)に書いてあります。

| Repository | repoid |	Rocky 8 | Rocky 9 |
|----------|---------|-------|----|
|PowerTools|powertools|**Yes**|No|
|CRB | crb | No | **Yes** |

（https://wiki.rockylinux.org/rocky/repo/#base-repositories の表より必要な部分を抜粋）

> Notes on: CRB
>
> CRB is "Code Ready Builder" - PowerTools was a carryover from CentOS, which is still the equivalent of CRB in RHEL. crb will be the repository name going forward in Rocky Linux and other derivatives.

（参考訳と解釈）CRBは"Code Ready Builder"の頭文字を並べたものです。PowerToolsはCentOSからの借り物であり、RHELでのCRBと同等です。Rocky LinuxはCentOS互換ではなくRHEL互換なのですから、crbという名前を使う方が筋が通ってますよね。他のRHEL互換を謳っているものもそうするのではないでしょうか。

で、うまくいかなかった手順の書かれたサイトを改めて見直すと"on Rocky Linux 8"とか"also be used for CentOS8 and RHEL8"とか書いてあるわけです。そりゃRocky Linux 9でうまくいくわけがありませんね。

ということで、気を取り直してpowertoolsと入力していたところをcrbにして再挑戦です。

    sudo dnf config-manager --set-enabled crb

このコマンド自体は何も表示してくれなかったので、成功したかどうかはこの時点では自信がありませんでした。が、その後、パッケージをインストールする過程でCRBも見に行っていたようですし、実際にそこからパッケージをインストールしてくれましたので、上のコマンドは有効だったのだと思います。

# おことわり
恒例のお断りですが、この文章の内容は、筆者が所属している会社・団体とは一切関わりがありません。いわゆる「自主的な研究の成果の発表」というものです。

# 追記
ほぼ同じような時期に全く同じ落とし穴に落ちた方がいるようです。

https://qiita.com/lasxle/items/1bbacec71293eaf5f4a0

ということで、私の十八番の「車輪の再発明記事」になってしまいました。ただ、こちらはRocky Linuxなので多少意味があるでしょうか。（まあ、Rocky LinuxもAlmaLinuxもできた経緯が経緯なので、「AlmaLinuxでそうだったらRocky Linuxでもきっとそうだよね」と多くの人には見当がつくのではないかと思いますが、、、）
地名、住所に関する日英単語対応リスト

# 日英単語対応リスト

プログラミングで使用するために日本国内特有の単語に割り当てた英語表記のリストです。行政の公式文書に書かれているものや Wikipedia に書かれているもので、過去に使用したことがある英単語をリストしています。

執筆段階で出典が分かっている Wikipedia 記事については、末尾にリンクをリストしています。

尚、個人の意見としては、意訳せずにローマ字で設定する方が後々困らないことが多かったです。日本語である方が海外の方にも新しく参画される方にも伝わりやすいことと、「厳密には違う意味じゃね？」という後悔をしなくて済むからです。

一応、私は、国内大手の金融や保険関連の企業でよく利用されている住所をきれいにする製品やサービスを提供する企業に勤めています。

市区町村より下位の町丁や字については、整理が終わり次第、掲載します。

## 地名、住所に関する単語

| 単語                   | 英語表記                     |
| ---------------------- | ---------------------------- |
| 全国地方公共団体       | local public entity          |
| 政令指定都市           | ordinance designated city    |
| 都道府県               | todofuken, prefectures       |
| 都                     | to, metropolis               |
| 道                     | do, circuit, territory       |
| 府                     | fu, urban prefecture         |
| 県                     | ken, prefecture              |
| 支庁                   | shicho, subprefecture        |
| 市区町村               | shikuchoson, municipalities  |
| 市                     | shi, city                    |
| 特別区（東京都 23 区） | ku, special ward, ward, city |
| 政令指定都市の区       | ku, ward                     |
| 郡                     | gun, district, county        |
| 町（市区町村としての） | machi, town                  |
| 村                     | mura, village                |
| 字                     | aza                          |

**参考文献**

* ["Prefectures of Japan"](https://en.wikipedia.org/wiki/Prefectures_of_Japan). Wikipedia. Retrieved 2023-03-16.
* ["Municipalities of Japan"](https://en.wikipedia.org/wiki/Municipalities_of_Japan). Wikipedia. Retrieved 2023-03-16.
* ["Japanese addressing system"](https://en.wikipedia.org/wiki/Japanese_addressing_system). Wikipedia. Retrieved 2023-03-16.
ユーザのプロフィールページ作成⑥

<h1>プロフィールの内容を表示</h1>
app/views/profiles/show.html.haml
のdisplay_nameの内容を変更していきます。

app/models/user.rb

      def display_name
        profile.nickname || self.email.split('@').first
      end

現状ニックネームが登録されていないと、エラーが起こってしまう

    ＄Profile.first.destroy
これで、内容を削除してみます。

undefined method `nickname' for nil:NilClass
エラーが発生しました。
プロフィールは、Nilであり、Nilの中にニックネームがないので、エラーが起こってしまう。

      def display_name
        if profile && profile.nickname
          profile.nickname
        else
          self.email.split('@').first
        end
こうすることで、プロフィールがある且つプロフィールの中にニックネームがない場合は、下が実行される　

      def display_name
        profile&.nickname || self.email.split('@').first
      end
こういった短縮の形で書くこともできる👍
.&は、ぼっち演算子
prosileがnil出ない場合は、nicknameを実行する


年齢、性別を表示！

      def birthday
        profile&.birthday
      end

      def gender
        profile&.gender
      end

app/views/profiles/show.html.haml

      #{current_user.display_name} (#{current_user.birthday} • #{current_user.gender})

app/views/profiles/show.html.haml

      = current_user.profile&.introduction
追加。自己紹介を表示するように

app/models/user.rb

      delegate :birthday, :gender, to: :profile, allow_nil: true
こうすることで、

      def birthday
        profile&.birthday
      end

      def gender
        profile&.gender
      end
これを省略でき、nilの時もエラーが起こらないようにできる！
【初学者向け】簡単に作れる！Ruby on RailsでTODOアプリを作成しよう

# はじめに
Ruby on Railsを使って、タスク管理を行うシンプルなTODOアプリを作成する方法を紹介します。この記事では、タスクの追加、編集、削除、完了状況の変更ができる機能を持つアプリを作成しました。

以下のGithubからクローンしてローカルで動作確認できると思います。

https://github.com/takazu-fo/my_todo_app

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1884151/b01b898f-3a0f-5e6f-0617-d7a10750c7da.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1884151/e3ed9aa3-39c3-c0ad-4535-107e18c2efb1.png)


# 使用技術
- Ruby on Rails
- Ruby
- PostgreSQL (データベース)
- Bootstrap (CSSフレームワーク)
- JavaScript


# アプリの機能
- タスクの一覧表示
- タスクの追加
- タスクの編集
- タスクの削除
- タスクの完了状況の変更


# 作成手順
- Railsアプリケーションの作成
- タスクモデルとコントローラの生成
- データベースのマイグレーション
- タスク一覧画面の作成
- タスク追加機能の実装
- タスク編集機能の実装
- タスク削除機能の実装
- タスクの完了状況の変更機能の実装
- Bootstrapを使ったデザインの適用

# さいごに
この記事で紹介した手順に従って、Ruby on Railsを使ったシンプルなTODOアプリが作成できました。今回は基本的な機能に絞りましたが、さらに機能を追加することで、自分だけのオリジナルのTODOアプリを作成することができます。

この記事が、Ruby on Railsでアプリケーションを作成する際の参考になれば幸いです。
Happy coding!

https://github.com/takazu-fo/my_todo_app

https://note.com/kazu_engineer58

https://zenn.dev/kazu_engineer
知っとかないといけない、システム運用保守について

未経験からエンジニアになりたい人は、プログラミングから始める人が多いと思いますが、
エンジニアの仕事は、プログラミングだけではありません。そして、プログラミングだけでは、エンジニアになれません。同時にプログラミングが苦手でも、システム構成や開発の流れを理解するとエンジニアに近づきます！
今回はシステム運用保守の色々について更に詳しく調べてみましょう！
![インスタスライド_202303024.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23130/0b46d83d-56e0-b586-2d19-1bd1f1bc1878.gif)


# 運用とは
予め作成された運用計画書にしたがって作業を行う。

運用計画書には、運用手順、障害対策、運用管理等の手順書を含める。

具体的には、監視項目を定め、監視にて障害検知時の連絡フロー、対策フローを管理する。

# 保守とは
バグの修正を行う保守と機能の追加、改善を行う保守の二通りある。

# まとめ
ー システムリリース後には、運用と保守がある

# 最後に
未経験の皆さん、若手エンジニアの皆さん、勉強方法について悩みがあればなんでも気軽に質問して下さい！
これからも記事を書いていきますので、モチベーションアップのためフォロー、イイねお願いします。
Men Kilts - Tartan Kilts | Kilts For Men

Kilts for Men is a leading manufacturer of custom kilts in the United States. They offer a wide range of kilts made from high-quality materials that are both durable and comfortable to wear. Whether you're looking for a traditional tartan kilt or a full kilt outfit. At Kilts for Men, they offer competitive pricing and a wide range of customization options to fit any budget. Kilts for Men is a trusted and reliable name in the kilt-making industry, with years of experience and a commitment to customer satisfaction.
2023/3/16主にITとかセキュリティの記事

2022年はランサム攻撃が前年比21％減 - 後半で増加傾向も
https://www.security-next.com/144082

住民システムを不正閲覧、情報漏洩した職員を処分 - 平塚市
https://www.security-next.com/144426

元従業員が顧客情報を不正持出、転職先へ提供 - アイ工務店
https://www.security-next.com/144479

ファイルサーバがランサムウェア感染、詳細を調査 - 沼尻産業
https://www.security-next.com/144466

レッドチームによる検証事例からCISAが推奨する3つのアクション(3/14)
https://japan.zdnet.com/article/35201187/

国立研究所で「PPAP」を使うも個人情報漏洩、被害者に指摘受けて行政機関に報告(3/14)
https://xtech.nikkei.com/atcl/nxt/column/18/00598/021000205/

Emotetが活動再開　対策する前にチェックすべき“組織の仕組み”とは？(3/14)
https://news.yahoo.co.jp/articles/f2c94f3826a9f955c1e6caeacd4226cc32409213?source=rss

先週のサイバー事件簿 - スマートフォン利用シーンに潜む脅威 Top10 2023(3/14)
https://news.mynavi.jp/article/20230314-security/

「ChatGPT」など生成AIツールがセキュリティの大きな懸念材料に(3/14)
https://japan.cnet.com/article/35201233/

【シンガポール】飲食店予約イーティゴー、情報流出で罰金(3/14)
https://news.yahoo.co.jp/articles/73129587f68a4b182d34e1c35904a036ca71064b

サイバー犯罪の被害総額、昨年は全米で１．３兆円超　ＦＢＩ報告(3/14)
https://news.yahoo.co.jp/articles/21506cb78b0fc76ff669e2e771bf9db697229061

欧米政府機関に広がる｢TikTok排除｣の連鎖反応
EU､カナダ､米国が公用端末での利用を禁止(3/13)
https://toyokeizai.net/articles/-/656711

チャットＧＰT、開発本格化＝巨大ＩＴ覇権争い、暮らし変化も(3/14)
https://www.jiji.com/jc/v8?id=202303chatgpt01

ChatGPTに関心が高いリテラシー層のChatGPT利用実態調査結果。現在利用中は7割超え！一方で会社による禁止の実態も。
～今後の活用シーンには「人事・採用」「人材育成」が伸長～(3/14)
https://prtimes.jp/main/html/rd/p/000000106.000038674.html

量子コンピューター時代を先取り？開発が加速する「量子ブロックチェーン」(3/14)
https://zuuonline.com/archives/247325

テキストベースではない、「認証アプリ」による二要素認証を活用しよう(3/14)
https://news.mynavi.jp/techplus/article/20230314-2611603/

Windows 11に標準組み込みのウイルス対策機能、知っ得知識(3/14)
https://atmarkit.itmedia.co.jp/ait/articles/2303/14/news006.html

AIが生成したYouTube動画でマルウェアに感染させるサイバー攻撃が増加(3/14)
https://news.mynavi.jp/techplus/article/20230314-2624772/

米国の電力網は物理的攻撃とサイバー攻撃の双方に対し脆弱、専門家が指摘(3/14)
https://news.mynavi.jp/techplus/article/20230314-2620688/

2月マルウェア動向、トロイの木馬「Remcos」がウクライナ政府機関狙う(3/14)
https://news.mynavi.jp/techplus/article/20230314-2613555/

バイデン米政権、国家サイバーセキュリティー戦略を公表（米国）(3/14)
https://www.jetro.go.jp/biznews/2023/03/cccf397e17ec58e4.html

医療機関にサイバーセキュリティ対策義務付け　助産所にも、厚労省が改正省令を官報告示(3/13)
https://www.cbnews.jp/news/entry/20230313150348

FaaS到来(3/15)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/030900345/030900001/

トヨタ・みずほ・テルモも、事業会社の3割超が新卒「IT人材」を別枠採用(3/15)
https://xtech.nikkei.com/atcl/nxt/column/18/00001/07815/

企業ネットワークに欠かせないNTPの時刻同期、トラブルを回避する運用のコツ(3/15)
https://xtech.nikkei.com/atcl/nxt/column/18/02381/031200002/

真偽のわからないパソコンの都市伝説や実用知識90本を見ていこう(3/15)
https://xtech.nikkei.com/atcl/nxt/column/18/02351/013000001/

リモートワーク可能な社員は31％　日本はOECD25カ国中最下位(3/15)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600010/030300142/

事業会社とコンサルが技術者吸い込む　SIerの人手不足が危ない(3/15)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/092400133/030800102/
ある日突然HomebrewのCompletion(Tab補完)が効かなくなってしまった。。。という時の対処法

:warning: 2023/2/9以前にHomebrewをインストールされた方は同様の症状が発生する可能性が有ります。

https://github.com/Homebrew/homebrew-core/issues/125461#issuecomment-1471335594

# 事の発端

Homebrewでアップデートを実施した後、突然オプションコマンドのCompletion(Tab補完)が効かなくなりました。最初Bash Completionが壊れてしまったと思っていましたが、他のコマンドでは補完が動作します。症状の一例を以下に示します。

![brew_bug.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/0df55118-907e-9412-7c72-60ef4ff247e3.gif)

以下の記事に記載が有る通りHomebrewは大幅なアップデートがなされました。その影響でバグが入り込んでいるのでは？と思い、Issueを出してみました。

https://codezine.jp/article/detail/17413

ところが。。。以下のURLのページがコメントとして返されただけで、Issueは強制的にClosedされてしまいました。結論から述べるとこのページにある設定は必須ですが、これを設定してもCompletionが効かない症状は直りません。。。:scream: :scream_cat: 

https://docs.brew.sh/Shell-Completion

# 根本原因分析と対応策の実施

原因を探るため、`/opt/homebrew/completions/bash/brew`の中身を見てみることにしました。このファイルはHomebrewのためのBash Completionファイルです。原因はどうやら以下の部分(109~112行)の部分が正常に動作していなさそうです。ここではHomebrewコマンドのTab補完時に出力する内容をファイルから読み込んでいます。しかし、`HOMEBREW_REPOSITORY`という変数はこのファイル中で初期化されずに使われています。環境変数から読み込みを想定しているのかもしれませんが、Homebrewのインストール方法にはその記載は有りません。実は最新版のHomebrewのインストーラーはインストール後に環境変数の追加を求めるメッセージが出力されます。但し、2023/2/9以前にHomebrewを既にインストールしている人にはアップデート時は通知されないため、環境変数が追加されないまま使ってしまっているという状態となってしまうため、正常に動作しなくなります。

```bash
elif [[ -n ${HOMEBREW_REPOSITORY:-} && -f ${HOMEBREW_REPOSITORY}/completions/internal_commands_list.txt ]]                                
then
    cmds="$(< "${HOMEBREW_REPOSITORY}/completions/internal_commands_list.txt" \grep -v instal$)"
fi
```

解決策はハッキリしました。以下の様に`.bash_profile`追記します。`eval "$(/opt/homebrew/bin/brew shellenv)"`を追記することで必要な環境変数を全て自動で追加してくれます。今までHomebrewのPATHを自分で追加する必要が有りましたが、不要になりました。序でに利用状況が外部に送信されることを防ぐ環境変数も有効化させて起きます。

```bash:.bash_profileへの追記内容
eval "$(/opt/homebrew/bin/brew shellenv)"

export HOMEBREW_NO_ANALYTICS=1
export HOMEBREW_NO_GOOGLE_ANALYTICS=1

if type brew &>/dev/null
then
  HOMEBREW_PREFIX="$(brew --prefix)"
  if [[ -r "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh" ]]
  then
    source "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh"
  else
    for COMPLETION in "${HOMEBREW_PREFIX}/etc/bash_completion.d/"*
    do
      [[ -r "${COMPLETION}" ]] && source "${COMPLETION}"
    done
  fi
fi
```

シェルを再起動します。以下の方法で再起動します。

```bash
exec $SHELL -l
```

.bash_profileの再読込でも大丈夫です。

```bash
. ~/.bash_profile
```

無事Tab補完が動作する様になりました。

![brew_completions.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/b140699f-329e-84ce-4fc0-432fc16498f9.gif)

# Reference
https://rcmdnk.com/blog/2016/04/28/computer-mac-homebrew/

https://rcmdnk.com/blog/2015/05/14/computer-linux-mac-bash/

https://github.com/orgs/Homebrew/discussions/4322#discussioncomment-5328284
GPT4で記事を書いてみた

今回はめちゃくちゃ短い文章です。
人である私が記事を書くことは疲れますし、今は深夜なので眠たいので気力もわきませんでした。

GPT4に書いてもらった記事を置いておくので良かったら軽く目を通してみてください。
文字数は1500文字くらいだったと思います。

https://note.com/rick_programer/n/nb8dca2a2ec2c
競技プログラミング日記#1

全検索/ペアの全検索1~4

特に問題なかったがすべて愚直にループ文を回して解いただけなのでもう少しスマートに解く方法を復習するべき。

重複を許さずに解くパターンはカウンター変数の初期値をずらすということは忘れない。
Webアプリケーションとは

# はじめに
この記事はWebアプリケーション開発の勉強のメモです．これから勉強していく人の参考になればと思います．
理解不足な部分もあるので，間違っている点があればご指導よろしくお願いします．

# Webアプリケーションとは
まずはWebアプリケーションについてWikipediaで調べると以下のように出てくる．
> ウェブアプリケーション（Web application）は，ウェブ（World Wide Web）技術を基盤としたアプリケーションソフトウェアである．
>> Wikipediaより引用(https://ja.wikipedia.org/wiki/ウェブアプリケーション)

「World Wide Web」というのは“世界に広がる蜘蛛の巣”という意味で，世界中のインターネット上にある無数のページをハイパーテキスト(複数の文書を関連付け，結びつける仕組みを持つテキスト)を利用して，公開，閲覧，利用できる仕組みである．ホームページのURLで登場する"http://**www**.~~"は，このことを指している．

&rArr; WebアプリケーションはこのWWWの仕組みを利用したネットワークから使用するアプリケーションソフトウェア

### [参考] インターネットとウェブの違いは？
よくインターネットとWebを同じ意味として認識されることがあるが，実際には似ているようで全く違うものである．
<img width=70% alt="qiita-square" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3133563/a88b8b79-0101-8b05-ffc2-2ea272700b57.png" >
インターネットはInternet Protocol(インターネット通信に関する約束事を定義したプロトコル)を用いて，コンピュータ同士を繋いで提供される世界規模の情報通信網(技術)の総称である．それに対して，Webはインターネットを使った応用技術の１つということができる．EメールやIP電話などもインターネットを使った技術である．


# Webアプリの例
Webアプリケーションをイメージしやすくするために，多くの人が身近に使っているWebアプリケーションの例を紹介する．

* Google　(https://www.google.com)
世界中で利用されている検索サイト「Google」には便利なWebアプリが備わっている．検索エンジンとしての機能に加えて，電車や車のルート検索，電卓機能，翻訳など様々な機能を利用することができる．

* YouTube　(https://www.youtube.com)
世界で最も利用されている動画共有サイトの「YouTube」もWebアプリである．動画のアップロードや再生，評価やコメントなどを行うことができる．またアカウント管理機能によって，チャンネル登録やユーザのプレイリストの追加などの機能が利用できる．

* 食べログ　(https://tabelog.com)
グルメ情報サイトとして有名な「食べログ」もWebアプリケーションとして多くの機能が備わっている．指定した日付や時間，人数から空いているお店を検索したり，行きたいお店を予約することができる便利な機能が備わっている．また店舗の口コミや評価を見ることができ，多くの人に利用されている．

* Amazon　(https://www.amazon.co.jp)
インターネット上で商品の売買ができるECサイトとしてAmazonもWebアプリケーションである．ECサイトとして必要な機能として，商品管理機能や受注管理システム機能，ショッピングカート機能やクレジットカード決済機能などが搭載されている．

# ネイティブアプリとハイブリットアプリとは
アプリと呼ばれるものは大きく分けて3種類ある．
これまで説明したWebアプリに加えて，<ins>ネイティブアプリ</ins>と<ins>ハイブリットアプリ</ins>があり，それぞれに特徴がある．

**○ネイティブアプリ**
スマートフォンやタブレットのホーム画面に，App StoreやGoogle Playなどのアプリケーションストアでインストールして使用するアプリのこと．Webアプリと比較すると以下の特徴がある．
| メリット | デメリット |
| :--: | :--: |
| ・オフライン環境でも利用できる<br>・環境に左右されにくく，動作が早い<br>・端末の機能を利用できる(カメラや位置情報など) | ・開発コスト/期間がかかる<br>・アプリケーションストアに公開するのに審査が必要<br>・開発における制限がある | 



**○ハイブリットアプリ**
ネイティブアプリとWebアプリの中間に位置するもので，ブラウザでも端末にインストールしても使用できるアプリのこと．
例としてTwitter，Line，Zoomなどがあり，ネイティブアプリとWebアプリの特徴をそれぞれ活かしたアプリを開発することができる．
| メリット | デメリット|
| :--: | :--: |
| ・開発費用が抑えられる<br>・端末の機能を利用できる(ネイティブアプリと同様)<br>・メンテナンスが容易 | ・(ネイティブアプリと比較すると)動作が遅い<br>・細かな仕様変更が難しい |
５行でChatGPT



```sh
$ pip install openai
```

```py:run.py
import openai
openai.api_key = "XXXXXXXXXXXXXXXX"
prompt = "クラゲについて、１行で教えてください"
completion = openai.ChatCompletion.create(model="gpt-3.5-turbo",  messages=[{"role": "user", "content": prompt}])
print(str(completion.choices[0].message.content).replace("\n", "。"))
```

```sh
$ python run.py
クラゲは8本の触手を持ち、無脊椎動物の中でも最も古い種類の一つである。
```
スタイルのバインディング(v-bind:style)と三項演算子でCSSのスタイルを条件によって切り替える方法

# 概要
スタイルのバインディング(`v-bind:style` or `:style`)と三項演算子を駆使して、CSSのスタイル変更ができないか考えてみました。その方法を備忘録も含めて記載します。

# バージョン or 条件
- CDNを使用してVue.jsの環境を構築 [[参考資料(公式)] Using Vue from CDN](https://vuejs.org/guide/quick-start.html#using-vue-from-cdn)
- バージョンはVue.js 3系を使用

# 手順方法
HTMLのタグに、下記のコード`v-bind:style` or `:style`のどちらかを使用して記入する。
この方法を使用する場合は、`v-for`や`v-slot`と組み合わせて使用する必要があります。
```html
<!-- spanタグ以外にも適用可能です -->
<span v-bind:style="{ プロパティ : [ 真偽値 ? 条件1: 条件2 ]}">
  {{ test }}
</span>

<!-- or -->

<span :style="{ プロパティ : [ 真偽値 ? 条件1: 条件2 ]}">
  {{ test }}
</span>
```

# 実際の使用例
`v-for`で設定した`index`の値が`1`の時、赤色の文字が表示される。それ以外は、青色の文字が表示される。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="gOdzXjz" data-user="kengo-sk8" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/kengo-sk8/pen/gOdzXjz">
  Untitled</a> by kengo-sk8 (<a href="https://codepen.io/kengo-sk8">@kengo-sk8</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

# 感想
今回は、[CODEPEN](https://codepen.io/)を使用して、実際の作成したviewを見れるように書いてみました。今後、view関連で記事を書く際は、[CODEPEN](https://codepen.io/)を使用して分かり易くまとめたいと思います。<font color="#808080">記事とは関係ない感想ですいませんw
</font>

# 参考資料
- [[公式]オブジェクト構文](https://v2.ja.vuejs.org/v2/guide/class-and-style#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%A7%8B%E6%96%87-1)
- [[Vue.js] StyleをVueインスタンスで指定](https://www.searchlight8.com/vue-js-style-v-bind/)
- [vue.jsのv-bind:style構文で条件分技をしたい](https://ja.stackoverflow.com/questions/31691/vue-js%E3%81%AEv-bindstyle%E6%A7%8B%E6%96%87%E3%81%A7%E6%9D%A1%E4%BB%B6%E5%88%86%E6%8A%80%E3%82%92%E3%81%97%E3%81%9F%E3%81%84)
- [[CodePen]ブログにコードを埋め込みたい！！ブラウザでHTML、CSS、JavaScriptの記述と表示をする方法](https://amateur-engineer.com/codepen/)
AWS:EC2のユーザーデータで、タグNameの値を自動付与(IAMポリシー編)

[前回の記事](https://qiita.com/If_it_bleeds-we_can_kill_it/items/ad46ae4c66d80f504462)で記載漏れ。

ユーザーデータにNameタグを自動で付与するスクリプトがあったが、あのEC2インスタンスはIAMロールを割り当てて、AWSリソースに権限を与えている。
IAMロールの中には、カスタムで作成したIAMポリシーや、事前にAWSで用意されたマネージドIAMポリシーを包含させている。これにより、AWSのリソースを安全に設定するようにしている。
※IAMユーザーのシークレットキーなどを利用させずに、AWSリソースにアクセスできる権限を与えている。ベストプラクティス通りのよくあるやり方。

そんなわけで、AWSリソースであるEC2のタグを編集するIAMポリシーを作成する。

```json:tag-iampolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": [
                "arn:aws:ec2:ap-northeast-*:AWSAccountID:*/*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

AWSAccountIDの部分は実際のAWSアカウントIDを記載する。このIAMポリシーを作成する。IAMポリシー作成したら、このIAMポリシーを、IAMロールにアタッチする。

あとはEC2インスタンスに、IAMロールを割り当てる。起動テンプレートなどでも、事前にIAMロールを指定できるので、事前に指定し、ユーザーデータも[前回の記事](https://qiita.com/If_it_bleeds-we_can_kill_it/items/ad46ae4c66d80f504462)で書いたスクリプトを指定しておくと、自動でタグ名を付与してくれる。

# 余談
時間がたつとどれだけメモを残していても設定したことを忘れる。やっぱり記事にして備忘として残すのは、早いうちがいい。
JavaScriptでパソコン・タブレット・スマホを判別する

スマホとPCで処理の仕方を変える方法の紹介。今までは画面幅で判別してきたが、今回はアクセスしてきた端末のユーザーエージェントを取得、解析して判別する方法のメモ。

```js
    function device() {
      const ua = navigator.userAgent;
      if(ua.indexOf('iPhone') > 0 || ua.indexOf('iPod') > 0 || ua.indexOf('Android') > 0 && ua.indexOf('Mobile') > 0){
          return 'mobile';
      }else if(ua.indexOf('iPad') > 0 || ua.indexOf('Android') > 0){
          return 'tablet';
      }else{
          return 'desktop';
      }
    }

    window.onload = function() {
      console.log(device());
    }

```
device()の返り値で端末を判断できます。
ただ、`navigator.userAgent`は将来的に非推奨とし、凍結するそうで、代替として`User-Agent Client Hints`が策定中みたい。今後はそちらを使用していく。

#### 参考
https://qumeru.com/magazine/86

https://qiita.com/nightyknite/items/b2590a69f2e0135756dc
ChatGPTの会話をワンクリックでMarkDownにしてQiitaに投稿した

# 概要
ChatGPTが話題になりQiitaでも多くの記事が書かれている昨今。
ChatGPTの会話をQiitaに投稿するのにいちいちコピペやスクリーンショットをとるのがめんどくさい。なので会話内容をまるごとマークダウンにしてくれるサービスがないか探してみた。
# あった
https://chrome.google.com/webstore/detail/chatgpt-to-markdown/adghjpdmpbcmppeafpodcjpagmegdpci/related?hl=ja
# 使ってみた
Person: 
- こんにちは

ChatGPT: 
- こんにちは！ご質問やお困りごとがあれば何でもお聞かせください。

Person: 
- pythonでpdfを取得するコードを書いてください

ChatGPT: 
- PythonでPDFを取得する方法はいくつかありますが、最も一般的な方法は、PyPDF2ライブラリを使用することです。以下は、PyPDF2を使用してPDFファイルを取得するための簡単なコード例です。

```python
import PyPDF2

# PDFファイルを開く
pdf_file = open('example.pdf', 'rb')

# PyPDF2のPdfFileReaderオブジェクトを作成する
pdf_reader = PyPDF2.PdfFileReader(pdf_file)

# PDFファイルのページ数を取得する
num_pages = pdf_reader.getNumPages()

# PDFファイルの各ページを取得する
for page_num in range(num_pages):
    page = pdf_reader.getPage(page_num)
    print(page.extractText())
    
# PDFファイルを閉じる
pdf_file.close()
```



このコードは、指定したPDFファイルからテキストを抽出して表示するだけです。必要に応じて、取得したPDFファイルに対して他の操作を実行することができます。

Person: 
- 九九の表を作ってください

ChatGPT: 
- 以下は、Pythonで九九の表を作成するためのコード例です。このコードでは、`for`ループを2回ネストして、1から9までの数字を順番にかけ算していくことで、九九の表を作成しています。

```python
for i in range(1, 10):
    for j in range(1, 10):
        # 2つの数をかけた結果を計算して表示する
        print(i*j, end='\t')
    # 1段落表示し終わったら改行する
    print()
```



上記のコードを実行すると、以下のように九九の表が表示されます。

```
Copy code
1  2  3  4  5  6  7  8  9  
2  4  6  8  10 12 14 16 18 
3  6  9  12 15 18 21 24 27 
4  8  12 16 20 24 28 32 36 
5  10 15 20 25 30 35 40 45 
6  12 18 24 30 36 42 48 54 
7  14 21 28 35 42 49 56 63 
8  16 24 32 40 48 56 64 72 
9  18 27 36 45 54 63 72 81
```



上記の出力例では、`print()`文により改行が行われ、`\t`を使ってタブで区切られた表が表示されます。

# 使用感
ChatGPTのタブを開いて、上記の拡張をワンクリック→コピペするだけなのでとても簡単だった。これはQiita投稿するときに捗りそう。（欲を言えばもう少しかっこよくしてほしいけど）。
コメント書くのが面倒くさいのでChatGPTに書いてもらう

# 使用物
ChatGPT (無料)
# 質問
![スクリーンショット 2023-03-16 013057.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707277/0df0e356-0528-5e6b-9836-8c38cc50c471.png)

# 回答

![スクリーンショット 2023-03-16 013140.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707277/6ba18e09-951e-62f0-a3db-35353cc32984.png)
![スクリーンショット 2023-03-16 013208.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707277/48288f0c-2f9e-782e-1566-f94528fb62d8.png)

# まとめ
面倒くさいコメント作業が楽になりそう。
Spring、Mavenで作ったWebアプリをダブルクリックで起動する方法

<h1>・はじめに</h1>
　自分で作ったWebアプリを使う際、わざわざIntelliJを開いてTomcatを起動することが面倒だったので、調べてみたところMavenのビルド機能を使ってJarファイルを作成すれば、簡単にできると知ったので今回はその方法について書いていきます。

<h1>・やり方</h1>
　既にJava, Spring, さらにMavenでWebアプリが作成されている前提で進めていきます。

<h3>①Mavenに依存を追加</h3>
まず、ビルドの際にJarファイルを作成する必要があります。そのためにMavenに依存を追加する必要があります。

```XML:pom.xml
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-assembly-plugin</artifactId>
	<version>3.0.0</version>
	<configuration>
		<finalName>test</finalName>
		<descriptorRefs>
    		<descriptorRef>jar-with-dependencies</descriptorRef>
		</descriptorRefs>
		<archive>
			<manifest>
				<mainClass>main.Main</mainClass>
			</manifest>
		</archive>
	</configuration>
	<executions>
		<execution>
			<id>make-assembly</id>
			<phase>package</phase>
			<goals>
				<goal>single</goal>
    		</goals>
			</execution>
		</executions>
</plugin>
```

②ビルドする
    ターミナルに`mvn clean package`と入力してビルドをする。ビルドが完了すると、targetディレクトリに「アプリ名-バージョン-SNAPSHOT.jar」が作成されます。今回はこれを使います。

③batファイルを作成する。
コマンドで`java -jar アプリ名-バージョン-SNAPSHOT.jar`と入力するとWebアプリを起動することができます。

これをbatファイルに書くことによって起動する際、毎回上記のコマンドを入力することなくダブルクリックでWebアプリを起動することがでるようになります。

サーバーの閉じ方はバツで閉じるか、Ctrl+Cで閉じることができます。
”プログラム"とは何か

# プログラム
プログラムとは、簡潔に言うと、**パソコンなどのコンピューターに与える命令や手順**のことです。
この記事では、もう少し詳しく見ていきましょう。

# コンピュータ
まずコンピュータとはなにか、それは**情報を処理するための電子機器**です。
ここで**情報**とは何でしょう。
### 情報とは
**人が意味を持つように整理された**データのことです。
例えば、ajoayfahnfaのような謎の文字列は意味を持たない(もしかしたら何かの意味があるかもしれないが、私は適当にキーボードを打ちました）ため、このデータは情報ではありません。

次に、Good morningという文字列について考えてみましょう。おそらく見て即座に意味が分かりましたよね。このようなものを情報といいます。

情報とは何かはわかって頂けたと思います。
では、情報を**処理する**とは具体的にどういうことかを説明していきます。
### 処理の手順
１、入力
２、加工
３、出力　これだけです。

ちょっとイメージが湧きにくいですよね。こういう時は、具体例を見ていきましょう。ここでは、Twitterのツイートする一連の流れについて考えます。
まず、画像のようにツイートしたい内容をきめて打ち込むのが１の入力です。![IMG_0302.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3071293/e0a115ca-cfdc-c64c-b26f-cd520fcc0220.png)
そして、ツイートとして先ほどの内容が発信された状態![IMG_0304.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3071293/bea06fe9-86cb-8098-a2b8-52369ed7f744.png)
になるのが３の出力にあたります。

では、２の加工とは何か、それは１⇒３に至るまでの**目に見えない必要なやり取り**です。ツイートするのボタンを押してから、出力されるまでに1秒程度時間が生じることがあると思いますが、この時間に行われている様々な行為がすべて加工にあたります。

コンピュータについてはこんな感じです。さらに深い内容については、今後また別の記事で説明します。

# 本題：プログラムとは
ここで再び本題に戻りましょう。
プログラムとは、**パソコンなどのコンピューターに与える命令や手順**でしたよね。
何を命令するのか。入力？出力？

いいえ、
### 命令するのは、処理のすべて
です。
入力を受け付けるところから、加工し、出力する。このすべての内容の命令をプログラムといいます。

AIの登場によって例外もあるように見えますが、本来、**コンピュータは言われたことしかできません。**
そのため、事細かに処理のすべてを伝えてあげないといけないのが、ヒトへの命令との相違点です。


分かって頂けたでしょうか。



本日はこの辺にしておきます。
ChatGPTで誕生日を祝おう

# 自己紹介とお願い
こんにちは、初投稿になります。新卒1年目にてデータサイエンティストとして活動しているGSです。

今回はSIGNATEにてChatGPTを用いたコンペティションが開催されました。このブログはそのコンペに参加するために書いたものです。このコンペティションではTwitterを通して評価されるため。もしよろしければTwitterの方でRTやいいねをしていただけると嬉しいです。以下にリンクを追記します。

https://twitter.com/ggtyun29/status/1636036040308953088?s=61&t=Z72DFjr2eaiw2NVau3vwZA

このコンペティションの目的ではビジネスシーンでのChatGPTの「具体的な活用成功例」「具体的な活用失敗例」の集約を目指します。

# 現段階の利用方法

2023/03/15時点で様々な利用例が考えられています。


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">主婦の皆へ、これがchatGPTのとても便利な使い方です。夕飯に悩んだら冷蔵庫の材料を伝えて見ましょう。うちの冷蔵庫の中身が少なかったのと、和洋折衷それぞれレシピについて提案してほしいと伝えたらもっと解像度高いかもしれません。 <a href="https://t.co/HHMSB46I9g">pic.twitter.com/HHMSB46I9g</a></p>&mdash; りべり™ (@M_coffeekatsu) <a href="https://twitter.com/M_coffeekatsu/status/1631572447681200130?ref_src=twsrc%5Etfw">March 3, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">冷蔵庫の食材メモを送るとAI (ChatGPT) がレシピを提案してくれるLINE botをつくりました<a href="https://t.co/ZbMrXNBZ8q">https://t.co/ZbMrXNBZ8q</a> <a href="https://t.co/CxyQcSPMs9">pic.twitter.com/CxyQcSPMs9</a></p>&mdash; さいぴ (@_SA1P) <a href="https://twitter.com/_SA1P/status/1632681333112856581?ref_src=twsrc%5Etfw">March 6, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 現状の雑感

* ChatGPTの回答は信頼性が低い
* ビジネスの現場で利用した際、倫理的な問題でアウトになる危険性がある
* プロンプトをうまく書けばキャラクターの口調の真似なども行える

# コンペ課題

上記の課題や特性を踏まえた上で<font color="OrangeRed">「質問の回答として複数のパターンを許して、ユーザがその回答群から選択できる状況」</font>にはめっぽう強いと思いました。簡単に書くと、<font color="OrangeRed">おすすめをたくさん聞くこと</font>です。

今回は人生の中でよく悩む誕生日についてChatGPTに聞いてみました。以下回答です。

![スクリーンショット 2023-03-16 0.38.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606656/fd81a475-d7cc-ba47-64b8-58ab707f9d96.png)
![スクリーンショット 2023-03-16 0.38.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606656/a1fa07ab-67d4-556c-7c38-06be7e5c71b8.png)
![スクリーンショット 2023-03-16 0.44.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606656/0ad36908-1894-a45e-b0db-82c05636764c.png)
![スクリーンショット 2023-03-16 0.44.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606656/4fb56ee4-a0e4-9e04-0beb-46ccbe9baea1.png)

このように複数のアイデアを得られました。

# 感想
間違えるリスクを考えた時に判断できるものに関しては問題ないと思います。（自分で後から追加で調べて補完できるため）
個人的な感想ならば、すごい物知りだけどたまに間違える友達くらいに使うのがベストかなと感じています。

# 追記(2023/03/16)

プロンプトを工夫して予算の組み立て方も考えてもらいました。
順番なども指定すれば対応してくれるかもしれないですね

![スクリーンショット 2023-03-16 2.03.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606656/670ba10f-f9fc-a930-5722-6a6a6d0c81fa.png)
![スクリーンショット 2023-03-16 2.03.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606656/4e83b4aa-8ef6-bddf-92ee-3d10597e446f.png)

希望のプランについて追記すると以下のようになりました。
![スクリーンショット 2023-03-16 2.14.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606656/c6bdbb0b-b5a5-a08e-ba88-cd10d368cca0.png)
![スクリーンショット 2023-03-16 2.14.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606656/9ca03de6-ff36-24e8-4187-42fb4716cba3.png)

すごいですね。きちんと5万円以内におさまっています。
【競プロ/Swift】まよコン 2023/03/13

# 注意事項
本記事は復習のための日記的なものであり、丁寧な解説を求めている方には不十分かと思われますので、ご了承のほどお願いいたします。

# 正解済み問題
## A - Saturday
**問題文**
[こちら問題ページ](https://atcoder.jp/contests/abc267/tasks/abc267_a)

**解答**
入力された曜日から次の土曜日が何日後かを出力するだけ。
switch文で解答。

```swift
switch readLine()! {
case "Monday": print(5)
case "Tuesday": print(4)
case "Wednesday": print(3)
case "Thursday": print(2)
case "Friday": print(1)
default: break
}
```

## B - Multiplication 2
**問題文**
[こちら問題ページ](https://atcoder.jp/contests/abc169/tasks/abc169_b)

**解答**
割と例外パターンを網羅できず、最終的には以下の解答でなんとかAC。
ポイントは
Decimalで計算しないと正確な値が出ないこと。（Intとかだと正確に計算できなかった。）
例外パターンとして、isNaNで不正な値が渡された時のことも考える。
isNaNなんて普段使わないから、全く気づかなかった。。

```swift
import Foundation
let n = Int(readLine()!)!
let aArray = readLine()!.split(separator: " ").map{Decimal(Int($0)!)}.sorted()

var result: Decimal = aArray[0]
for index in 1..<n {
    result = result * aArray[index]
}

if result > 1000000000000000000 || result.isNaN {
    print(-1)
} else {
    print(result)
}
```

# 誤答及び、未解答問題
## C - Streamline
**問題文**
[こちら問題ページ](https://atcoder.jp/contests/abc117/tasks/abc117_c)

**未解答**
問題の意味はわかったが、どう答えたら良いか分からず１回も解答せずに終わった。

以下途中まで書いたやつ。

```swift
import Foundation
let nm = readLine()!.split(separator: " ").map{Int($0)!}
let xArray = readLine()!.split(separator: " ").map{Int($0)!}.sorted()
var marginArray: [Int] = []

if nm[1] < nm[0] {
    print(0)
}

for index in 0..<(nm[1] - 1) {
    marginArray.append(xArray[index] - xArray[index + 1])
}


var pointArray: [Int] = []

for _ in 0..<nm[0] {
    var tmpArray = marginArray
    let maxIndex = tmpArray.firstIndex(where: {$0 == tmpArray.max()})
    pointArray.append(xArray[maxIndex!])
    tmpArray.remove(at: maxIndex!)
}
```
**正答**
方法としては与えられた数列を大きさ順にソートした後、各値の距離を大きい順に配列にまとめる。
そしてコマを差分が大きい座標から当てはめていけば、初期座標で一番移動時間がかかる座標を埋められて、あとは初期座標で埋められなかった移動距離を順番に足していくと、最小操作回数がわかる。

まじでかしこい、早くこんな発想を自分でできるようになりたい。

```swift
let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let n = input[0]
let m = input[1]
let x: [Int] = readLine()!.split(separator: " ").map { Int(String($0))! }

// 与えられる数字をソートして整理する。
let sorted = x.sorted()//.map{ $0 - x.min()! + 1 }

// コマの数より数列の数が少ない場合は、操作回数０回
if n >= m {
    print(0)
    
} else {
    var distance: [Int] = []
    // ソートされた数列の移動距離を配列にまとめる。
    for i in 1..<sorted.count {
        distance.append(sorted[i] - sorted[i-1])
    }
    // 移動距離を降順に並べる。
    distance.sort(by: > )

    // 差分が大きい値からコマを置いていき、一番右のコマを最右まで動かせば最短操作で全ての値を踏める。
    let moves = distance[(n-1)...distance.endIndex-1]
    let ans = moves.reduce(0) { $0 + $1 }
    print(ans)
}
```
# 参考
https://kenkoooo.com/atcoder/#/contest/show/72affb77-4b37-4715-8a93-deab61aedd3f
Juliaの構造体の分解と合成

## 構造体の分解
構造体を分解するには、構造体名の取得、各フィールド名の取得、各フィールドの取得が必要。

構造体名は、`typeof`で取得できる。
``` julia
julia> struct A
           x
           y
       end

julia> a = A(1,2)
A(1, 2)

julia> println(typeof(a))
A
```

フィールド名は`fieldnames` で取得。

``` julia
julia> fieldnames(A)
(:x, :y)
```

各フィールドの値は`getproperty` で取得。
``` julia
julia> getproperty(a, :x)
1
```

まとめると以下の関数で分解することができる。
``` julia
# returns type and vals
function decompose(target)
    t = typeof(target)
    vals = [getproperty(target, name) for name in fieldnames(t)]
    t, vals
end 
```

## 構造体の合成
構造体の合成はコンストラクタを使えばできるように思える。

``` julia
t(vals...)
```

しかしこれは、コンストラクタが明示的に実装されているとうまく行かない。

``` julia
julia> struct B 
         x
         y
         B(x) = new(x, 1)
       end

julia> b = B(1)
B(1, 1)

julia> t, vals = decompose(b)
(B, [1, 1])

julia> t(vals...)
ERROR: MethodError: no method matching B(::Int64, ::Int64)
Closest candidates are:
  B(::Any) at REPL[21]:4
```

明示的に1引数のコンストラクタが作られたので、デフォルトの2引数のコンストラクタが見えなくなっている。

これを回避する方法を探したらこんな方法を見つけた。

``` julia
@generated function __new__(T, args...)
    return Expr(:splatnew, :T, :args)
end

function compose(t, vals)
    __new__(t, vals...)
end
```

正直言ってなんでこれでうまくいくのか完全に腹落ちしていないのだが、
これだとうまくいく。

``` julia
julia> compose(t, vals)
B(1, 1)
```

なおこの方法だと、引数の数が間違っていた場合に、エラーも出さずに失敗するので要注意。
カジュアル面談受けてみました

# 経緯
基礎の学習がひと段落し、ポートフォリオ作成し始めたところです。
学習と並行して、自身が身につけるべき技術の選定のためにも、企業をみて技術選定はまとめたりしていました。
しかし、企業HPや採用ページを見ても、わからないことはあります。
カジュアルといっているし、IT業界未経験ということを前提に話を伺えればと、４〜５件メッセージを送って１件OKをいただいたので面談を受けてみました。

# 所感
30分ほどでしたが、受けてみて良かったと感じます。そう思える点は主に4つあります。

1. 会社の事業について、HPの文面以上の内容を現場目線で聞ける
1. 現場の現状課題、それをどう解決していくのかを聞ける
1. 上記と似ているが、会社として今後どうサービスを発展させていくのか、展望を聞ける
1. もしかすると一緒に働くかもしれないエンジニアと、オンラインではあるが直接話せる

特に現状の課題が何で、それをどう解決していくのかを知った状態で、自身の学習に取り組んだり転職活動できるのは、大きなメリットだと感じました。


# まとめ
今後も続けていきたいと思います。
自分の興味がある分野や会社を中心に、本当にカジュアルに受けていきたいと思います。
あと、ポートフォリオの作成も頑張ります。
Office365で複数のユーザーをパスワード自動設定＋詳細設定をしつつ一括登録する

# やりたかったこと

・Office365で複数ユーザーを一括登録したい（パスワード自動生成）
・自動生成したパスワードをそのまま本運用で使いたい
　（初回にパスワードの変更をしない設定＋無期限で使える設定にしたい）

Office365の管理画面から「複数のユーザーを追加」をクリックすると、CSVのインポートが可能で
いけそうな気がするのですが、初回にパスワードの変更をしない設定等がどうやら出来なさそうなので
結局あきらめて、PowerShellを使う方向で行くことにしました。（残念）

# PowerShell側の準備
Office365に接続するために必要なモジュールをインストールします。
管理者としてPowerShellを起動して、

　**Install-Module MSOnline**

と打ち込んでEnterキーを押せばインストールが始まります。
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648912/d878c03a-3535-49f0-cd4d-d9aca79174b0.jpeg)
途中で　Y　を２回押せば完了！
# PowerShellでOffice365に接続

　次に、**connect-msolservice** と打ち込むと「アカウントにサインイン」が立ち上がります。
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648912/5e555227-7355-cbd5-bd09-8b5ee818bfd4.jpeg)
ここに、Office365の管理者アカウントのIDとパスワードを入力します。
# 接続確認を兼ねてライセンスの名前を表示させる
IDとパスワードが正しければ、Office365に接続できているはずですが、
表示が変わらないのでよくわかりません・・・
そこで、確認のために

　**get-msolaccountsku**

と打ち込んでみます。
Office365に接続できていれば、下図のようにライセンス名が表示されます。
![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648912/2898fff5-169c-a22e-d408-07e5194fce84.jpeg)
この場合は「reseller-account:O365_BUSINESS_PREMIUM」がライセンス名になります。
（それぞれの環境によって違う名前になります）
# 流し込むCSVファイルを準備
・ユーザー名（必須）
・表示名
・名
・姓
の4列のCSVファイルを準備します。
列の名前はそれぞれ下図のように、UserPrincipalName,DisplayName,FirstName,LastNameとします。
![4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648912/e921b302-2a0d-e4e0-8bdf-eccb06a174ac.jpeg)
データに日本語が入る場合は、CSVで保存するときにエンコードをUTF8にしておく必要があります。
（Shift-JIS等の文字コードだと文字化けしてしまいます）

このファイルにわかりやすい名前をつけて、わかりやすい場所に設置します。
今回は、C:\test\　という場所に、user.csv　という名前で保存しました。
# PowerShellでCSVインポートを実行！
この長いコマンドを入力すればインポートが実行されます。
```
Import-Csv "C:\test\user.csv" | ForEach-Object {New-MsolUser -UserPrincipalName $_.UserPrincipalName -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -LicenseAssignment reseller-account:O365_BUSINESS -UsageLocation JP -ForceChangePassword $False -PasswordNeverExpires $true} | Export-csv -Path "C:\test\output.csv"
```
長くて見づらいので、少し形を変えて補足をつけてみました。
![5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648912/49cc71f6-7075-b97b-99d7-d18f0e599d5c.jpeg)
※ライセンス名が上の方の図と少し違いますが、実際は同じライセンス名を入れます。
![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648912/9c579ff7-dc80-1d6b-7a43-d742f46eece4.jpeg)
PowerShellに入力して、少し待つと処理が完了します。
# Office365の管理画面で確認
![7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648912/ee0f940f-35e3-420e-1b37-f52859632878.jpeg)
きちんと追加されていればＯＫ！
[MySQL] 大量の連番を生成する

# MySQL で大量の連番を生成したい

MySQL を使ったアプリケーションの性能試験用に大量のデータを生成したかったのですが、
PostgreSQL の [generate_series](https://www.postgresql.jp/document/14/html/functions-srf.html) みたいなものが無いので、SQL だけでデータを insert ～ select できない・・・

# ググってみる
ユーザ変数を使って生成する方法を多くの方が挙げていました。
こんなの。
```sql:generate_series.sql
select
  @seq := @seq + 1 as value
from
  -- ここのテーブルは何でも良いが、欲しい連番の最大数と同じだけのレコードが入ってないとダメ
  information_schema.tables
  , (select @seq := 0) x
;
```

この方法の問題点は、欲しい最大数と同じだけのレコードが格納されているテーブルが必要なところです。
上の例では、 `information_schema.tables` に 100 件しかレコードが無ければ、連番は 100 止まりになってしまいます。

# 直積で組んでみる
今回は 10,000,000 までの連番が欲しかったのですが、そんな件数のレコードが予め入っているテーブルは用意できなかったので、以下のように愚直な計算で連番を生成しました。

```sql:generate_series_with_cross_join.sql
insert into test_data
with part (value) as (
  select 0
  union all select 1
  union all select 2
  union all select 3
  union all select 4
  union all select 5
  union all select 6
  union all select 7
  union all select 8
  union all select 9
)
, seq (value) as (
  select
    (g.value * 1000000) +
    (f.value * 100000) +
    (e.value * 10000) +
    (d.value * 1000) +
    (c.value * 100) +
    (b.value * 10) +
    a.value value
  from
    part a
    , part b
    , part c
    , part d
    , part e
    , part f
    , part g
  order by
    1
)
select
  -- ここで連番を使って何かする
  s.value
from
  seq s
;
```

cross join するテーブルを増やせば桁は増やせますが、流石にこの桁数になってくるとちょっと反応が悪い。
(手元のマシンではクエリの応答が返ってくるまでに約 8 秒かかりました)
とはいえ、火種(？)になるテーブルが一切無くても好きなだけ連番を生成できるので、ヨシとします。


# まとめ
直積を使って連番を生成する方法を紹介しました。

当初は `load data local infile ...` で CSV を投入しようとしていたのですが、そもそも CSV を試験用サーバにアップロードする段階で途方も無い時間がかかっていたので、かなり時間短縮になりました。
React.jsで麻雀作ってみた

## なにこれ

先日社内で、開発合宿なるものが開催されました。
https://fusic.co.jp/doings/351

上記開発合宿で何をテーマにしようかなーと思って
最終的にReact.jsで麻雀を作ろうと思い立ったので作りました

※実際には開発合宿だけでは全部は開発が終わらなかったので
その後ボチボチ少しずつ作業してある程度満足いくところまでできたので記事にしてます。

## 作ったもの

github
https://github.com/satthi/react_majong/

サンプルサイト
http://react-mahjong.s3-website-ap-northeast-1.amazonaws.com/sample/hanchan_game
※上記サイトはそのうち消すかもです

![2023-03-16_00h03_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54588/205a745a-e806-d5b8-e9d0-b2e516018c37.png)

![2023-03-15_23h45_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54588/4c2d7534-429a-ada7-587a-57cbaed2c5e6.png)
![2023-03-05_22h21_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54588/fc89c29e-ce7a-afe5-0bcc-b192ccf1073d.png)


## やったこと

・牌を表示
・それぞれターンを回す
・メンツ判定/シャンテン数の計算
・役・点数計算
・ツモ・ロン・ポン・チー・カンの実装
・簡易的なCPU思考の実装

### メンツ判定/シャンテン数の計算

以前麻雀に関するネタはやっていましたが、
この計算方法は実際には正しくないことは気づいていたので
今回はゲームにする必要があったためやり方を変えました。

https://qiita.com/satthi/items/575b323578010a89c120
https://qiita.com/satthi/items/c9e2cddc32148887426d
https://qiita.com/satthi/items/cb673491540b9affc8eb

代替肝はこの辺
https://github.com/satthi/react_majong/blob/main/front/src/components/game/shanten_base.tsx#L826

色々やってますが、基本的に総当たりで試してるって感じです。
雀頭があるかどうかは大事なところ（でかつシャンテン数をややこしくしている要因)なので
雀頭があるパターンとないパターンという見方で総当たりしている感じです。
※これだけで、シャンテン当てゲームとかメンチン待ち当てゲームとか点数計算のサイトとか作れそうではあるｗ

### それぞれターンを回す/ツモ・ロン・ポン・チー・カンの実装

特定のuseEffectの変数を利用して
・現在誰のターンなのか
・現在思考中なのか
・上がりなのか
などを判定するようにしています。

この辺はReactの癖が強いところで毎度苦労するところですが
今回も2重に動作してしまったり、うまくターンが回らなかったりなど難しいポイントでした。

### 簡易的なCPU思考の実装

これがないとゲームにならないので、
あまり凝り過ぎない程度にやりました。

一番凝ったCPU思考で
・切る牌はシャンテン数が少なくなる牌が基本
・待ちは両面・カンチャン・ペンチャン・シャンポン・単騎の順で優先
・鳴きは役牌からのみ
・面前のテンパイは即リーチ
くらいなレベル感で対応しています

この辺
https://github.com/satthi/react_majong/tree/main/front/src/components/game/cpu_type/type3

## やってないこと

・槍槓の実装
通常の流れと結構大きく違うのでひとまず置いてます
・役を意識したCPU思考
これはそのうち少しずつやりたい気持ちはある

## まとめ

楽しかった
やっぱ役に立たないものを作るっていいね！
[AWS Q&A 365][EventBridge]AWSのよくある問題の毎日5選 #5

# 1. Amazon EventBridgeとは何ですか、どのように機能しますか？
答え：Amazon EventBridgeは、さまざまなソースからのイベントに対応するアプリケーションを構築することができるイベント駆動型のサービスです。ユーザーが定義したルールに基づいて、イベントを受け取り、それらをAWS Lambda関数やSNSトピックなどのターゲットにルーティングすることによって機能します。

# 2. Amazon EventBridgeを設定して使用する方法は？
答え：Amazon EventBridgeを設定および使用するには、ユーザーはAWSアカウントにサインアップし、管理ユーザーを作成し、Amazon EventBridgeコンソールにサインインする必要があります。また、AWSコマンドラインインターフェイスを設定し、リージョンエンドポイントを設定する必要があります。設定が完了したら、ユーザーはルール、イベントバス、ターゲットを作成し、イベントバスの権限を管理することができます。

# 3. Amazon EventBridgeで利用可能なターゲットの種類は何ですか？
答え：Amazon EventBridgeで利用可能なターゲットには、AWS Batchジョブキュー、CloudWatch Logsグループ、CodeBuildプロジェクト、Amazon ECSタスク、インシデントマネージャー対応プランなどがあります。また、ユーザーはAPIデスティネーションを設定して、イベントをHTTPエンドポイント、AWS Lambda関数、または他のAWSサービスに送信することができます。

# 4. Amazon EventBridgeのイベント配信の問題をどのようにトラブルシューティングしますか？
答え：ユーザーは、CloudTrailログを使用してイベント配信を追跡し、エラーコードと再試行動作を表示することができます。また、デッドレターキューを使用して配信できなかったイベントを保存し、後で再送信することができます。さらに、Amazon X-Rayを使用してイベント配信の問題をデバッグすることができます。

# 5. Amazon EventBridgeでデータ保護とセキュリティを確保する方法は？
答え：Amazon EventBridgeは、データ保護を確保するために、静止中の暗号化と転送中の暗号化を提供します。また、ユーザーは、タグベースのポリシーを実装してリソースへ
[AWS Q&A 365][EventBridge]Daily Five Common Questions #5

# 1. What is Amazon EventBridge and how does it work?
Answer: Amazon EventBridge is an event-driven service that allows users to build applications that respond to events from various sources. It works by receiving events and routing them to targets, such as AWS Lambda functions or SNS topics, based on user-defined rules.

# 2. How do I set up and use Amazon EventBridge?
Answer: To set up and use Amazon EventBridge, users need to sign up for an AWS account, create an administrative user, and sign in to the Amazon EventBridge console. They also need to set up the AWS Command Line Interface and configure regional endpoints. Once set up, users can create rules, event buses, and targets, and manage event bus permissions.

# 3. What are the different types of targets available in Amazon EventBridge?
Answer: Some of the targets available in Amazon EventBridge include AWS Batch job queues, CloudWatch Logs groups, CodeBuild projects, Amazon ECS tasks, and Incident Manager response plans. Users can also configure API destinations, which allow them to send events to HTTP endpoints, AWS Lambda functions, or other AWS services.

# 4. How can I troubleshoot event delivery issues in Amazon EventBridge?
Answer: Users can use CloudTrail logging to track event delivery and view error codes and retry behavior. They can also use dead-letter queues to store events that couldn't be delivered, and resubmit them at a later time. Additionally, they can use Amazon X-Ray to debug event delivery issues.

# 5. How can I ensure data protection and security in Amazon EventBridge?
Answer: Amazon EventBridge provides encryption at rest and encryption in transit to ensure data protection. Users can also implement tag-based policies to control access to resources and use IAM to manage user access and permissions.