OmniAICreator/Qiita-1.07M huggingface dataset:
リフレクションの実践

# １．リフレクションとは？
「反射」や「内省」の意。
自分の考えや言動を振り返ることを意味する。

:::note info
リフレクション（reflection）：反響、反映、反射
:::

# ２．反省との違い

反省　自身の言動を振り返り、良くなかった点を認識して同じ過ちを犯さない。
リフレクション　自分で自分の状態を観察し、見つめ直す


# ３．３つのステップ

| レベル| 視点|具体例| 
|:-----------|:------------|:------------|
|1|「出来事を振り返る」|Aさんは～をしていた。|
|2|「他者および環境を振り返る」|背後の因果関係を考える。Aさんはなぜその行動を？|
|3|「自己について振り返る」|その時の自分の役割は？それができてたか？|

・レベル3に到達することで初めて新たな気付きに出会うことができる場合が多い。

# ４．学習していく人とそうでない人のリフレクションのやり方の違い

| 種別| 考え方| 
|:-----------|:------------|
|学習していく人|本来期待されていた結果は何か<br>実際の結果はどうだったのか<br>ありたい姿と現実にどのような差があったか<br>この差を埋めるために何を変えるか|
|そうでない人|どんな間違いが起きたのか<br>誰の責任か<br>事態に対する言い訳や謝罪|

# ５．考え方のフレームワーク
| 種別| 視点| 
|:-----------|:------------|
|K：Keep|「うまくいっているなどの理由で、今後も続けていくこと」|
|D：Discard|「良くない結果につながったなどの理由で、今後はやめること」|
|A：Add|「今回の経験から、今後新たに始めようと思っていること」|

・振り返りの対象となる経験は、成功したものでも失敗したものでも構わない。
・振り返りを行うタイミングとしては、経験した直後、記憶の鮮明なうちが望ましい
・思ったままに書き出していけばいい！

# ６．参考文献

https://www.kaonavi.jp/dictionary/reflection/
.NET 8のBlazor WASMプロジェクトを.NET 9へ移行する

# はじめに
既存の.NET 8で作られたプロジェクトを.NET 9へ移行する際に少しハマったので、移行方法をまとめました。  

# 結論
プロジェクトのターゲットフレームワークを.NET 8から.NET 9にするだけでなく、NuGetから関連ライブラリを`9.x.x`にアップデートする必要があります。公式ドキュメントにもしっかり書いてありました。
https://learn.microsoft.com/ja-jp/aspnet/core/migration/80-90?view=aspnetcore-9.0&tabs=visual-studio

# 手順
最低限必要な手順を示します。

## プロジェクトのターゲットフレームワークを変更
```xml
<TargetFramework>net9.0</TargetFramework>
```

`.NET 9.0`に変更します。

## パッケージのアップデート漏れ確認
インストールされているパッケージはプロジェクトによって異なると思いますが、`Blazor`関連のパッケージバージョンを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208939/cedc94ee-6c6d-f621-18db-9ce0b83e769f.png)

下2つは`9.0.0`になっていましたが、上3つは`8.x.x`のままでした。この状態で起動すると、以下のエラーが発生します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208939/bff3d85b-8e94-e2f4-30a8-f99bd4b1ce68.png)

これらのライブラリを`9.x.x`にアップデートすることで起動できるようになります。

# おわりに
.NETの後方互換性に甘えると、基本的な内容でハマります。
【成功？失敗？】忘年会幹事が作って実践！出欠＆会費管理システム！

## はじめに
本記事は、2024年を締めくくる忘年会で、幹事として会計担当を務めた筆者が、5年ぶりのオフライン開催にあたり作成した「出欠＆会費管理システム」について述べていきます。

## 筆者について
営業からエンジニアに転向して約1年半になったまだまだ初心者です。約1年ほどはクラウドインフラチームとして、AWSを使った案件を中心に担当してきました。半年ほど前から開発案件に携わり、試行錯誤しながらなんとか食らいついています。

## 出欠＆会費管理システムについて
### 背景と目的
「出欠＆会費管理システム」は、参加者の出席または欠席と、参加者が会費を支払ったかを、幹事が正確に管理し、適切な資金繰りを実施するために作成しました。

以下の要因によって、通常以上に参加者や会費、運営費を厳密に管理する必要がありました：
- 忘年会会場に支払う金額が、当日参加した人数によって変動する後払い制
- 参加者からは事前に会費を集める方法にしていたため、当日飛び入り参加の方を判別し、その場で会費を徴収する必要があった

また、開場から乾杯までの時間が少なく、入場時の混雑が想定されたため、少しでも時間の短縮になればよいと考えました。

### システムの概要
1.事前準備
- 参加者全員に個別のQRコードを配布
- QRコードには社員番号と名前を含む

2.受付時の処理
- 幹事がiPhoneのショートカットアプリでQRコードをスキャン
- スキャンした情報がAPI Gateway経由でLambdaに送信

3.システムの処理
- Lambdaがkintoneのアプリと連携
- 参加者の出欠と会費状況を確認
- 状況に応じて適切な処理を実行
    - 未出席で支払い済み → 出席済みに更新
    - 未出席で未支払い → 出席済みに更新（受付担当が会費を徴収）
    - すでに出席済み → エラー通知
    - リストにない場合 → エラー通知

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476215/80063b75-c8ef-4ebc-c0de-e69d3d26f990.png)

## 具体的な設定・実装方法
### iPhoneショートカットアプリの設定
以下のように、QRコードから社員番号を読み取ったうえで、API GatewayのURLを叩けるように設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476215/478a5a56-617a-8413-f00d-15e8084dea6c.png)

### Lambdaのコード
実際のソースコードの掲載は割愛しますが、以下の機能が主に実装されています。

- kintoneから情報を取得
    - 指定した社員番号の情報を取得するため、kintone に GET リクエストを送信
- レスポンスの処理
    - 対応するレコードが存在しない場合、エラーを返す
    - レコードの情報（出席状況、参加費状況、名前）を取得
- データ更新
    - 出席状況が「未出席」であれば「出席済み」に変更
    - 更新時に kintone API に PUT リクエストを送信
- メッセージ生成
    - 出席状況や参加費状況に応じてメッセージを生成し、結果を返す

## 開発にあたって工夫した点
1.参加者の出欠と会費の支払い状況を確認するリストをkintoneアプリに実装
- 忘年会当日、開始予定時刻の集まり状況をリアルタイムで把握し、開始時刻の調整などに柔軟に対応可能
- 乾杯等の重要任務がある出演者や役員の到着状況を即時確認可能

2.Lambdaからのレスポンスに名前を含め受付担当のスマホ画面に表示
- 参加者の顔と名前の目視確認による二重チェックが可能

3.QRコードリーダーを購入せず、iPhoneのショートカットアプリを活用
- 経費削減
- 無料のiPhoneショートカットアプリで複数台での同時受付に対応
- 使い慣れたスマートフォンでの操作が可能

## 実施結果と考察
当日のシステム運用については、技術面では概ね想定通りの動作を実現できました。APIの応答も良好で、kintoneとの連携も問題なく機能しました。

しかし、運用面では予想以上に時間がかかり、受付に列ができてしまう結果となりました。原因として以下が考えられます：
- QRコードをスムーズに表示いただくような、より丁寧な周知が必要だった
- 会場入口が狭く、物理的に混雑が生まれてしまった
- 参加者の一時的な来場集中

一方で、会計面では大きな成果がありました：

- 参加者の出欠状況をリアルタイムで正確に把握
- 当日の飛び入り参加者への迅速な確認・対応
- 会費徴収漏れの完全防止

## まとめと今後の展望
このシステムが完全な成功だったとは言い切れませんが、チャレンジする価値は十分にありました。特に、会計担当として抱えていた「正確な参加者管理」という課題に対して、テクノロジーを活用して解決できたことは、エンジニアとして大きな学びとなりました。

当日の運用を含めて、今後の改善点としては以下が挙げられます：
- QRコード読み取り後の通知機能追加
- 出演者向けの特別対応の実装
- QRコードに追加情報を付与し、運用価値を向上

これらの課題は来年度の担当者への引き継ぎ事項として整理し、さらなる改善につなげていければと考えています。

テクノロジーの力で業務改善を実現できた今回の経験は、エンジニアとしての自信にもつながりました。今後も、様々な課題に対してテクノロジーを活用した解決策を模索していきたいと思います。

（最後に、忘年会にご参加いただいたみなさまありがとうございました！こちらのシステムについてもご意見ございましたらアンケートにご記載くださいませ。）
Re:Mindのアドベントカレンダー2024最終日

# はじめに
Re:Mindのアドベントカレンダー2024最終日がついに到来しました！メリークリスマス！:tada::santa_tone2:

https://qiita.com/advent-calendar/2024/remind

# Re:Mindとの関わりの１年を振り返る

:tada::tada:**今年Re:Mindはセカンドイヤー**:tada::tada:

今年の目玉はなんといってもIPA「2024年度未踏アドバンスト事業」への応募でした。残念な結果には終わりましたが、引き続き試作品の設計と実装を進めてまいります。

# スペシャルサンクス
@Syuparnさん、今年もすばらしい記事でのご参加といいねの応援ありがとうございました。 VSCode拡張の記事と仕様へのご提言重ねてありがとうございます。たいへんな刺激になりました。

@killyさん、 @Mind-Club_2017さん、@ITVisionさん、いつも応援ありがとうございます。

# おわりに

来年もやります！やる気はまんまんですが、来年はどんな内容になるのか想像もつきません:santa_tone2:
GNU gforth 超初心者が説明を試みる 〜FORGET が無いどうしよう！〜

古典的FORTHを触った事があって、 GNU gforth などを使った時に、 困惑するのが FORGET が無い事です。

FORGET は その名の通り「忘れる」ワードです。

forget name

とすると、 name と name 以降に定義したワードを「忘れる」、つまり削除するというものです。

# marker
gforth では 代わりに marker を使います。使い方も異なっています。

将来、ここ以降は「忘れたい」ポイントで marker を定義する。

marker my-lib-start

そして、「忘れる」のは

my-lib-start

です。

実際には forth プログラムのファイルをロードするたびに以前定義下同じモノを消すような処理(消さないと二重登録される)のためです

````text
[IFDEF] my-code  ( 既に定義済かどうか?)
my-code          ( 定義済なら「忘れる」)
[ENDIF]

marker my-code   ( ここに来る時はいずれにせよ「無い」か「忘れてる」ので、今後のために「忘れる」時点を marker で登録する)
init-included-files

\ .. definitions start here
\ .
\ .
\ end
````

::: note info
ディクショナリへの追加・削除はメモリ上での話なので、  うっかり marker し忘れても一旦 gforth 自体を終了・起動すれば元に戻ります。
:::

今回はここまで。
PageSpeed InsightsのAPIのレスポンスのloadingExperience.metricsのそれぞれのキーについて

## 概要

PageSpeed InsightsのAPIのloadingExperience.metricsのそれぞれのキーについてどういった値のオブジェクトが紐づいているのかざっくりまとめる。

## 前提

本記事の中で「時間」と記載したら全て「ミリ秒」と思っていただきたい。

## すみません

誤りがありましたらコメントにてご指摘いただけますと幸いです。

## 内容

### INTERACTION_TO_NEXT_PAINT

公式の情報↓

https://web.dev/articles/inp?hl=ja

「ユーザーがインタラクションを開始してからブラウザが次にフレームをペイントできるまでの時間」らしい

クライアントが何かしらのアクションを実行し、画面に変化が出るまでの時間っぽい

### FIRST_CONTENTFUL_PAINT_MS

公式の情報を得ることは出来ず、、！

名前的に
「ページの最初のコンテンツが描画し終わるまでの時間」
だと思われる。

あくまで最初のコンテンツなので最後のコンテンツではない。ましてやページの完全読み込み完了でもないので注意が必要。

### EXPERIMENTAL_TIME_TO_FIRST_BYTE

公式の情報を得ることは出来ず、、！

ちょっと調べてみた感じ
「サーバーにリクエストを投げて、最初のバイトがブラウザに変えるまでの時間」
だと思われる

### CUMULATIVE_LAYOUT_SHIFT_SCORE

公式の情報↓

https://web.dev/articles/cls?hl=ja

「視覚的な安定性を評価するための指標」らしい。
0に近ければ近いほど視覚的に安定しているっぽい。
ページ読込中に発生するレイアウトシフトが多ければ多いほど安定していないと評価されるらしく数値が大きくなる模様。

### LARGEST_CONTENTFUL_PAINT_MS

公式の情報↓

https://web.dev/articles/lcp?hl=ja

「ページ内で視覚的に最も大きな要素が完全に表示されるまでの時間」らしい。
こちらもページ全体の読み込み完了時間ではないので注意する。
ユーザーが主要（と思われる）なコンテンツをどのくらい早く見ることができるか。
26記事達成しました

# 26記事達成しました!!!

ぬいぐるみ目的で始めた投稿、この記事を含めて26記事として完了します
とても大変でしたが、今年良い気持ちで年越せそうです🎍

# 徹底した管理方法
25記事達成まで毎日、スプレッドシートで進捗確認していました
これがとてもよかった。
また、qiitaの下書きもよく使っていました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/2472e228-6483-0710-deb4-8150fd9917e8.png)



# 25記事投稿内容一覧

## 開発でチャレンジして、失敗・成功したことをシェアしよう by 転職ドラフト Advent Calendar 2024
①　1日目担当

https://qiita.com/riicon72/items/ccd5ce3eded728aeffb8


②　6日目担当

https://qiita.com/riicon72/items/0602fefaafa395763467


③　15日目担当

https://qiita.com/riicon72/items/5f203f4680d775209541

④　16日目担当

https://qiita.com/riicon72/items/f5bda652425fced9efe9

⑤　17日目担当

https://qiita.com/riicon72/items/436a854ce4f97e342753


## Markdown AIのサーバーAI機能を使ってWebサイトを作ってみよう by MarkdownAI Advent Calendar 2024

⑥　23日目担当

https://qiita.com/riicon72/items/aaae4eecd05162f41327

⑦　1日目担当

https://qiita.com/riicon72/items/41650ff042fe14a1bd78

## テスト自動化あるある言いたい by T-DASH Advent Calendar 2024

⑧　1日目担当

https://qiita.com/riicon72/items/674a22eb349b8f34be79

## 女性エンジニア応援！エンジニアとしてやりがいを感じた経験談をシェアしよう！ by パナソニック コネクト Advent Calendar 2024

⑨　5日目担当

https://qiita.com/riicon72/items/20125ad68509e031c370


⑩　2日目担当

https://qiita.com/riicon72/items/fe6ac04ae5fca07a2efc


## 転職活動して気づいた「これをやっていれば.../やってよかった」をシェアしよう by 転職ドラフト Advent Calendar 2024

⑪　8日目担当

https://qiita.com/riicon72/items/366ca173a422cf6a1dd0


⑫　1日目担当　　※カレンダー投稿されています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/95b8031b-8379-3ab3-989b-2d24ee02467c.png" width=80%>


https://qiita.com/riicon72/items/394baafe97c38d00fdcb


⑬　22日目担当

https://qiita.com/riicon72/items/722a551124eadcffd33b



## 【CPaaS】SMS・メール機能の開発・運用でのやらかし談＆失敗エピソード募集 by ネクスウェイ Advent Calendar 2024

⑭ 24日目担当

https://qiita.com/riicon72/items/8753e6b3dae8a7611b7a


# Udemyおすすめ講座をシェアしよう！ by Udemy Advent Calendar 2024

⑮　23日目担当

https://qiita.com/riicon72/items/ceb84aefffb259c20915

## 身の回りの困りごとを楽しく解決！ by Works Human Intelligence Advent Calendar 2024

⑯　3日目担当

https://qiita.com/riicon72/items/ca009cfd524a46f6e0d5

⑰　24日目担当

https://qiita.com/riicon72/items/4ebfcfafe8609c9cc71e

⑱　2日目担当

https://qiita.com/riicon72/items/24fe246c5341685499b7

⑲　3日目担当

https://qiita.com/riicon72/items/84693be41c8b4c34578a

⑳　4日目担当

https://qiita.com/riicon72/items/cc0d0e444223fff92536


㉑　8日目担当

https://qiita.com/riicon72/items/f24d07e048132c27708c

㉒　14日目担当

https://qiita.com/riicon72/items/7de2efdcdf3b12ebcdd2

##  はじめてのアドベントカレンダー Advent Calendar 2024

㉓ 1日目担当

https://qiita.com/riicon72/items/b7a00396c1e8a00db64e

㉔　2日目担当

https://qiita.com/riicon72/items/46eb4fc0736033d50983

㉕ 23日目担当

https://qiita.com/riicon72/items/22d72083081641a64627

㉖　この記事



ーーーーーーーーーーーーーーーーーーーーーーーーー
みなさん見ていただき、ありがとうございました🥰
🎁メリークリスマス🎁
🌄よいお年をお迎えください🌄
Elixir Timex.shift/2の紹介

こんにちは！
プログラミング未経験文系出身、Elixirの国に迷い込んだ？！見習いアルケミストのaliceと申します。
今回はTimex.shift/2について学んだことをまとめます。

# 目的 
Timex.shift/2を触って機能を理解したい

https://hexdocs.pm/timex/Timex.html#shift/2

## 実行環境
Windows 11 ＋ WSL2 ＋ Ubuntu 22.04
Elixir v1.17.3
Erlang v27.0


# Timex.shiftとは
`Timex.shift(date, options)`は`date`を`options`だけ調整します。

## 例
```diff_elixir:iex
Datetime.shift
datetime = ~U[2024-12-24 14:12:20.713086Z]
Timex.shift(datetime, years: 1)
```
```
~U[2025-12-24 14:12:20.713086Z]
```

### durationを使用した例
`options`に`:duration`を使用することでカスタムな日時調整ができます。

```diff_elixir:iex
datetime = ~U[2024-12-24 14:12:20.713086Z]
duration_days = Timex.Duration.from_days(3)
duration_hours = Timex.Duration.from_hours(1)
combined_duration = Timex.Duration.add(duration_days, duration_hours)

Timex.shift(datetime, duration: combined_duration)
```

カスタムな日時調整(今回の場合3日と1時間)がされます。
```
~U[2024-12-27 15:12:20.713086Z]
```

### サマータイム開始／終了時刻をまたぐ場合
米国ニューヨークの次のサマータイム開始時刻は、現地時刻の3/9の02:00です。
このタイミングで時計が1時間進みます。
これをまたいで使用する場合自動調整が入ります。
```diff_elixir:iex
dt = Timex.to_datetime({{2025,3,9}, {1,59,59,123000}}, "America/New_York")
```
この時点では"EST"(米国東部標準時)の表示になっています。
```
#DateTime<2025-03-09 01:59:59.123-05:00 EST America/New_York>
```

サマータイム開始時刻をまたいで3秒後にしてみましょう。
```diff_elixir:iex
dt |> Timex.shift(seconds: 3)
```
サマータイム開始時刻の1時間+3秒後の値を返します。
また、"EDT"(米国東部夏時間)の表示になっています。
```
#DateTime<2025-03-09 03:00:02.123000-04:00 EDT America/New_York>
```


## 類似の関数
### DateTime.add
`DateTime.add`はElixirの標準ライブラリであるDateTimeモジュールの関数です。

https://qiita.com/Alicesky2127/items/971a013f34f0f1fb7c90#datetimeadd%E3%81%A8%E3%81%AF

`Timex.shift`と比較して下記の違いがあります。
1. DatetimeモジュールがElixirの標準ライブラリであるのに対して、Timexは外部ライブラリなので導入が必要です
2. 日時を操作できる単位について、サポート範囲が異なります
3. 日時を操作できる単位について
    - DateTimeモジュールは単数形(`:hour`)で呼称します
    - Timexモジュールは複数形(`:hours`)で呼称します

上記2.3.をまとめると以下の通りです↓

| 単位 | Timex.shift | DateTime.add |
|:---------|:------|:------|
| year | 〇(:years) | ✕ |
| month | 〇 (:months) | ✕ |
| week | 〇 (:weeks) | ✕ |
| day | 〇 (:days) | 〇 (:day) |
| hour | 〇 (:hours) | 〇 (:hour) |
| minute | 〇 (:minutes) | 〇 (:minute) |
| second | 〇 (:seconds) | 〇 (:second) |
| millisecond | 〇 (:milliseconds) | 〇 (:millisecond) |
| microsecond | 〇 (:microseconds) | 〇 (:microsecond) |
| nanosecond | ✕ | 〇 (:nanosecond) |
| duration | 〇 | ✕ |
| positive integer | ✕ | 〇 |




# ～Elixirの国のご案内～
↓Elixirって何ぞや？と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます:laughing::sparkles::sparkles:

https://qiita.com/piacerex/items/09876caa1e17169ec5e1

↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ！私もエンジニア未経験から学習中です。

https://elixir-lang.info/topics/entry_column


↓[We Are The Alchemists, my friends!:bouquet:](https://qiita.com/torifukukaiou/items/6bcd5bbb80df9e594e9e "Awesome-san's Awesome article")[^10]
Elixirコミュニティは本当に優しくて温かい人たちばかり！
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。[^11]


https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian


[^10]: @torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。


[^11]: @kn339264さんの素敵なスライドをお借りしました。Elixirコミュニティはいろんな形で活動中！
SLAとかの稼働率ってどうするの？

# 娘の成長、部下の成長
- 「パパサンタさん、今日来るの？」

こんな質問を、子供のお迎えの帰り道された。
「今日ね、学校で　世界中のお友達はたくさんいることを習ったの。」
　世界中のお友達にサンタさんがプレゼントを配る場合におやすみってできるのかな。パパも旅行行く時にパーキングエリアで休んだりするでしょう。大変だねーサンタさん」

- 案件の提案書を書く時に、システム構成図かいたら「99%」とか「99.9%」ってどうやって考えたらいいんですかね。
 後輩部下くんもこんなことを聞かれたことがある。

# 稼働率の計算ってどうするのか？　
知っているインフラエンジニアの人に撮って当然なのだろうけど。あらためて、調べてみたら　計算方法があるので
今夜はクリスマスイブ、さらっと読んで　サンタさんが来る前に寝てしまおう。

## AWSの Well Architectted フレームワークにかいてある「可用性」の項目をまずさらっと見る

すると　99% から 99.999% がどういうサイトを運営する場合に、1年24時間365日のワークロード内で　何かしらの原因で中断が発生する可能性のある最大合計時間のことが書いてある。
　例えば、オンラインサイトだと　1年のうち 4時間22分　ショッピングができない合計時間（サービスが利用できない）時の稼働率を 99.95% と計算している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/54107c9e-99b2-8a02-5bc9-440b97e2dfe1.png)

　詳細な流れについては、湾曲した説明にならないよう信頼性の柱を参照いただきたいのです。
　参考：　信頼性の柱　：　可用性　に以下のような一節があります。　
　https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/reliability-pillar/availability.html

## サービスを運用する以上、メンテや障害は必ず発生しうる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/1f8b5181-8891-5c3e-fdf5-ae343a5dc2a0.png)

## さらに、さまざまなリソースを組み合わせると、掛け算をしていくことで　稼働率は計算することができます。

　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/77267a69-6985-ccc0-c099-9e1c1edfa4e0.png)

## そうなると リソースの稼働率が100% 出ない限りそのまま並べるとどんどん稼働率の心配が増えていき、数値上は落ちてしまう・・・　（こまった）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/33af062e-de79-eaac-2e40-55a7854477da.png)

## どうするか

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/e52d7730-44ce-1d40-25a0-f6ea03e5aed4.png)

## 思い出してみよう　CloudDesignPattern: 基本的なMultiAZ を考える
参考：　[可用性を上げたい　パターン](https://aws.clouddesignpattern.org/index.php/CDP_Multi-Server%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3.html)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/87ac0a35-c5ef-acec-9f89-981f9dd3d4dc.png)

そうすると以下の指揮を使って　計算をしていくことができるという説明がされているので以下の指揮を応用して計算をする
```
 稼働率 = 稼働率最大値 − ((100%−冗長化されるコンポーネントの稼働率)×(100%−冗長化されるコンポーネントの稼働率))
```

## まずは 稼働台数を増やし、それぞれの　構成数をスケールアウトすることで対応する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/df8d2e43-9de7-445a-3235-3df56c782131.png)
そうすると
稼働率も 99.99　を超えていって近づくね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/ab5f5a94-3bf3-0812-127c-98193330d2d4.png)

## マルチにするって　可用性っていうけどこういうことか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/f416308a-3efe-cdc7-75a3-3a87c6f6f4cb.png)


ってわかったら。また読み進めていこう。　サンタさんも弟子を増やして。休める時間ができるといいね。メリークリスマース。
JSON形式でTeamsにメッセージを送る

:::note warn

Microsoftから機能提供ブロックのお知らせが出ています。ご注意ください。

>Microsoft 365 コネクタ (以前は Office 365 コネクタ) は非推奨に近づいています。新しい Microsoft 365 コネクタの作成は間もなくブロックされます。

https://learn.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet

:::

curlを使ってメッセージを通知するコードを備忘録として記録しておきます。

```
curl -H 'Content-Type: application/json' \
       -d '{"text": "
**[CRISIS通知]インフラ重大障害(ping)** <br>
[CRISISへはこちらをクリックしてください](https://hogehoge.com)  <br>
----------------------------------------------- <br>
対象システム ： {システム名}  <br> 
検知日時     ： {日時} 
"}' \

```
できた！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/b3f9e438-ff73-4a46-094e-506f3f9e05f6.png)
terraform init時にダウンロードされるプラグインをキャッシュする設定備忘録

# はじめに
Terraformのキャッシュ設定方法について毎回ググっている気がするので、
設定方法を自分の備忘録がてらまとめておく。

Terraformを使用する際、terraform init時にrequired_providers定義に従って
必要なプラグインをインターネットからダウンロードすることになる。
ダウンロードしたプラグインはmain.tfやbackend.tfが置かれたtfstate単位のディレクトリ内の`.terraform`配下に配置される。
以下のようなリソース単位でtfstateが管理されている場合、都度同じプラグインがダウンロードされ、各ディレクトリに格納されることになる。

```
.
├─00_modules
│  └─<モジュールファイル>
│
└─01_env
    └─01_dev
        └─eventbridge_stopec2
        │  └─ .terraform
        └─network
        │  └─ .terraform
        └─ec2
        │  └─ .terraform
        └─<その他のリソース>
           └─ .terraform
```

AWSプラグインの場合、このファイルは1個数百MBだが、塵も積もればで次第にディスク容量を逼迫する。
ちょっとした検証環境用だからとAL2023でEBS 8GiBの小さなEC2インスタンス上でやっていたり、
CloudShell上からTerraformを実行していると、気が付いたら各ディレクトリ配下にあるプラグインによってディスクがいっぱいになる。

これに対する対策として、Terraformではキャッシュを使用することができる。

https://developer.hashicorp.com/terraform/cli/config/config-file

https://developer.hashicorp.com/terraform/cli/config/config-file#provider-plugin-cache



## 設定
設定パターンについては2通りあり、キャッシュ用ディレクトリを作成したうえで、
環境変数を設定する方法と、`$HOME/.terraformrc`に設定を記載する方法がある。

### 1. キャッシュ用ディレクトリの作成(共通)
予めプラグインがダウンロードされるディレクトリを作成する。
```bash:
mkdir $HOME/.terraform.d/plugin-cache
```

### 2-1. 環境変数の設定
以下のコマンドで環境変数を定義してexportする。
```bash:
export TF_PLUGIN_CACHE_DIR=$HOME/.terraform.d/plugin-cache
```

### 2-2. terraformrcに記載
ホームディレクトリ配下にterraformrcファイルを作成してディレクトリを指定する。
```bash:
vi $HOME/.terraformrc
# 以下の内容を記載
plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"
```

# まとめ
このどちらかのパターンでキャッシュ用ディレクトリを指定すれば、
terraform init時に初回はキャッシュディレクトリにプラグインがダウンロードされ、
以降はキャッシュディレクトリ内にプラグインが存在すれば新規にダウンロードはせずそれを利用する挙動となる。

以上。
Patchモジュール概要

:::note info
「Tanium Cloud」の機能を1つずつ勉強していきます。
:::

# １．Patchモジュールについて

WindowsUpdateなどパッチ配信に用いるモジュール。

> Minimize critical security vulnerabilities by automating patch delivery.

https://help.tanium.com/bundle/ug_patch_cloud/page/patch/index.html


# ２．何が嬉しい？

管理端末へのパッチ配信と適用状況を可視化できる。


# ３．設定手順例
「Patch」モジュール＞「Patches」をクリック。
だいたいWindowsOS系はTanium側ですでに登録されている。ない場合は、Deployモジュールを使う。
対象のパッチにチェックをつけ、[Install]をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/32ad8609-279b-73f7-3330-8268a3a0dd7d.png)

「Patch」モジュールの「Deployment」に画面遷移するので、配信設定を入力。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/ab49111c-7e85-eb80-49df-9aa2978b0d45.png)

要件に合わせた設定になっていることを確認し、続行して配信か、一時保存を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/47acacf4-80b8-9a0c-a489-d19dffd50d9a.png)
TOCとボトルネック

# １．TOC（制約理論）とは
TOC（Theory of Constraints）
> パフォーマンスを妨げている”制約条件（Constraints）”に集中して改善することで、企業全体の業績改善や向上が期待できるマネジメント手法。

https://toc-consulting.jp/toc/#:~:text=TOC%E3%81%A8%E3%81%AF-,TOC%EF%BC%88Theory%20of%20Constraints%EF%BC%9A%E3%80%8C%E5%88%B6%E7%B4%84%E6%9D%A1%E4%BB%B6%E3%81%AE%E7%90%86%E8%AB%96%E3%80%8D,%E3%82%92%E7%9B%AE%E7%9A%84%E3%81%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82




# ２．TOCの基本原則
| STEP |原則 |説明  |
|:-----------|:------------|:------------|
|1  |制約の特定   | システム全体のパフォーマンスを制約しているボトルネックを見つける。    |
|2   | 制約の活用  |  ボトルネックのパフォーマンスを最大限に活用する方法を見つける。   |
|3   |その他のプロセスを制約に従わせる   |  ボトルネックの効率を最大化するために、他のプロセスを調整する。   |
|4   | 制約の改善  | ボトルネックの能力を向上させるための改善策を実施する。    |
|5   | 新たな制約の特定  | ボトルネックが解消された後、新たな制約を特定し、プロセスを繰り返す。    |

ボトルネックとは
ボトルネックは、システム全体のパフォーマンスを制約する最も弱い部分やプロセスのことを指す。ボトルネックが存在することで、システム全体の生産性や効率が低下する。

# ３．ボトルネックの特定方法
| STEP |プロセス |説明  |
|:-----------|:------------|:------------|
|1   |プロセスフローの分析   | 各プロセスの処理時間や待ち時間を分析し、最も時間がかかる部分を特定する。|
|2   | データの収集と分析  | 生産データやパフォーマンスデータを収集し、ボトルネックを特定する。|
|3   | 現場観察  |実際の作業現場を観察し、どの部分で滞りが発生しているかを確認する。 |


# ４．TOCとボトルネックの重要性

## ４－１．重要性の視点
生産性の向上: ボトルネックを特定し、改善することで、システム全体の生産性が向上。
コスト削減: 効率的な運営が可能になるため、無駄なコストを削減。
納期の短縮: ボトルネックの改善により、製品やサービスの提供スピードが向上し、納期を短縮。
品質の向上: プロセスの最適化により、製品やサービスの品質が向上。



## ４－２．TOCとボトルネックの概念を実際に適用するためのステップ例

1. 制約の特定
まず、システム全体のパフォーマンスを制約しているボトルネックを特定する。プロセスフローの分析やデータの収集、現場観察を通じて、最も時間がかかる部分や滞りが発生している部分を見つける。

2. 制約の活用
次に、ボトルネックのパフォーマンスを最大限に活用する方法を見つける。例えば、ボトルネックの稼働時間を増やす、作業の優先順位を変更するなどの方法がある。

3. その他のプロセスを制約に従わせる
ボトルネックの効率を最大化するために、他のプロセスを調整する。例えば、ボトルネックの前後のプロセスのスケジュールを調整し、ボトルネックが常に稼働できるようにする。

4. 制約の改善
ボトルネックの能力を向上させるための改善策を実施する。例えば、新しい設備の導入、作業手順の見直し、従業員のトレーニングなどがある。

5. 新たな制約の特定
ボトルネックが解消された後、新たな制約を特定し、プロセスを繰り返す。これにより、継続的な改善が可能になる。
TSKaigiは会計自動化もTypeScript製だったという話

# はじめに

[TSKaigi Advent Calendar 2024](https://qiita.com/advent-calendar/2024/tskaigi)の12/25の記事です。
メリークリスマス🎄TSKaigiで代表理事をしている竹下です。

[TSKaigiは配信画面もTypeScript製だったという話](https://zenn.dev/ken7253/articles/tskaigi-streaming-layout)に引き続き、TSKaigiの運営でTypeScript使っている紹介です。
TSKaigiの会計は、一般社団法人TSKaigi Associationが行っています。すべての購入物や支払いの帳簿をつけているのですが、2024年の10月から適格請求書発行事業者になったこともあり、税率区分の記録も適切に行わないといけなくなったため、会計をつける手間が増加しました。
そのため、なんとか省力化できないかと思い、領収書、請求書の情報を抜き出すプログラムを作ってみました。
今回はそのプログラムの流れと、どのように効率化しているかのご紹介です。

# Excuse

すみません、作り込み切れませんでした。現時点では安定動作も怪しいです。

# TSKaigiでの経費申請などの流れ

まず、TSKaigiの会計周りの申請は、Slackワークフローで組んでいます。

* 請求書の支払いを依頼するワークフロー
* 立て替えている金額の振込みを依頼するワークフロー
* 受け取った領収書を提出するワークフロー

などがあり、フォームから各種情報の入力(金額や会社名)と、請求書や領収書のファイルをアップロードすると手続きがされるようになっています。

最終的に、アップロードされたファイルが入力と一致しているかを確認しながら、支払い+帳簿へつけています。

```mermaid
flowchart LR

s[Slackのワークフロー起動] --> form[Slackのフォーム]
form --> file[Slackにファイルをアップロード]
form --> ss[Googleスプレッドシートに情報保存]

```

Slackワークフロー例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12647/ea73d8cd-d9c1-90c6-0957-6b571e628524.png)


# 問題点

フォームから入力された情報(金額や会社名)が正しいかを、アップロードされたファイルを目視でチェックするとともに、帳簿へ記載を行っています。
しかし、ファイルがSlack上にアップロードされており、スプレッドシートのどの行と一致したファイルかを確認するのに手間がかかっていました。
また、目視で金額やインボイスナンバーを確認し、手打ちで記載する必要もありました。
そこで、この部分を省力化し、ミスも減らせないかと思い、プログラムを作ることにしました。

# 作ったもの

1. [Slackのファイルを一括でダウンロードしてくるプログラム](https://github.com/takezoux2/files_transporter)
1. [ファイルを読み取り、CSVへ保存するプログラム](https://github.com/takezoux2/receipt-scanner)

の2つのプログラムを作成しました。

```mermaid
flowchart LR

Slack[Slackにアップロードされたファイル] --- DownloadProgram((ダウンロードプログラム))
DownloadProgram --> LocalFile[ローカルファイル]
LocalFile --> ReadProgram((領収書、請求書読み取りプログラム)) 
ReadProgram --> csv[CSVファイル]

```


## Slackからファイルの一括ダウンロード

[src/download_slack_files_to_local.ts](https://github.com/takezoux2/files_transporter/blob/master/src/download_slack_files_to_local.ts)がその実装になります。
対象となるチャンネル(TSKaigiのSlackでは #経費 チャンネル)にアップロードされたファイルをすべてローカルにダウンロードしてくるだけのプログラムです。

## 領収書、請求書の読み取り

次のようなフローを内部で実装しています。
LLMには現在は`Gemini-1.5-flush`を使用しています。


```mermaid
flowchart TB

subgraph ファイル判別
File[SlackからDLしたファイル] --> DetectFileType(ファイルタイプの判別)
DetectFileType --> FileTypes{ファイル種類}
FileTypes -- jpg,png --> DetectDocType(ドキュメントタイプの判別)
FileTypes -- pdf --> ExtractText(テキスト抽出)
ExtractText --> DetectDocType
end

subgraph 情報抜き出し
DetectDocType --> DocType{ドキュメントタイプ}
DocType -- 領収書 --> ReadReceipt(領収書の読み込み)
DocType -- 請求書(物品購入支払い) --> ReadInvoice(請求書の読み込み)
DocType -- 請求書(業務委託支払い) --> ReadOutSourcingInvoice(請求書の読み込み)

ReadReceipt --> csv(CSVに保存)
ReadInvoice --> csv(CSVに保存)
ReadOutSourcingInvoice --> csv(CSVに保存)
end
```

1. ファイル種類を判別し、pdfの場合はテキスト抽出、画像の場合はマルチモーダルで渡す
1. ファイルの中身から、`領収書`、`請求書(物品購入支払い)`、`請求書(業務委託支払い)`を判別
1. それぞれの内容に応じて、必要な情報を抜き出し

という流れで、処理をしています。
請求書を二種類に分けているのは、業務委託支払いの場合は`源泉徴収額`が含まれるためです。


# さいごに

このプログラムでCSVに情報を抜き出すことで、現在はチェックと帳簿への記載の省力化を行っています。
精度が上がってくれば、Slackワークフローでファイルの中身の情報を記載しなくても良いように変更していきたいと思います。

## TSKaigiについて

2025年5月23日/24日にTSKaigi 2025が開催されます！
TSKaigiは日本最大級のTypeScriptをテーマとした技術カンファレンスです(前回の参加者2000人以上)
TypeScriptに興味のある方は、ぜひ公式サイトやXを確認してみてください。

https://tskaigi.org/

https://x.com/tskaigi
ヒューマンインターフェース設計

# １．ヒューマンインターフェース設計とは

>人間と機械が情報をやり取りするための手段や、そのための装置やソフトウェアなどの総称、また、人間が機械を操作したり、機械が現在の状態や結果を人間に知らせる手段やそのための道具のことを指します。
機械が情報を伝える手段としては液晶画面やメーター、ランプ、スピーカーなどが含まれ、人間が指示を与える手段としてはスイッチやボタン、ハンドル、ダイヤル、ペダル、リモコン、マイク、キーボード、マウスなどが含まれます。

https://www.monodukuri.com/gihou/article_list/225/%E3%83%92%E3%83%A5%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9

# ２．目的

機械が間に入ってしまう事により、発生してしまう分かりにくさを無くしていこうとするのが、ヒューマンインターフェイスの最も重要な目的になります。


https://www.monodukuri.com/gihou/article_list/225/%E3%83%92%E3%83%A5%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9

# ３．重要性

・ユーザーの満足度とシステムの成功に直結

| Left align | Right align | Center align |
|:-----------|:------------|:------------|
|ユーザー満足度の向上   |  いやすいインターフェースは、ユーザーの満足度を高め、リピート利用を促進します。       |          |
|効率性の向上    |直感的なインターフェースは、ユーザーがタスクを迅速に完了できるようにし、生産性を向上させます。         |          |
|エラーの減少    | 明確で一貫性のあるデザインは、ユーザーのエラーを減少させ、システムの信頼性を高めます。        |          |



# ４．設計上の原則の一例(ガイドライン)

下記に整理してまとめられてます！

https://note.com/yiio/n/nfea2fec3b507


## ４－１．ユーザビリティ10原則(ニールセン)

1. システムの状態がわかるようにする（Visibility of system status）
システムの状態を絶えず適切にユーザにフィードバックする。

2. 実際の利用環境に適合したシステムを作る（Match between system and the real world）
専門用語や社内用語でなく、ユーザが本当に使っていることばを使う。

3. ユーザーに操作の主導権と自由度を与える（User control and freedom）
ユーザがいつでも状況から抜け出せる出口を提供する。操作のキャンセル、やり直しができるようにしておく。

4. 一貫性を保ち標準に倣う（Consistency and standards）
同じことを表すのに異なる用語を使わない。同じように操作すれば同じ結果が得られることを保証する。

5. エラーを防止する（Error prevention）
エラー後の対応策の充実よりも、エラーの発生そのものを防止する。

6. 記憶しなくても、見ればわかるようにデザインする（Recognition rather than recall）
ユーザに記憶を強要しない。選択肢を提示する。

7. 柔軟性と効率性を持たせる（Flexibility and efficiency of use）
上級ユーザ向けにショートカット機能やカスタマイズ機能を提供する。

8. 最小限で、美しいデザインにする（Aesthetic and minimalist design）
インターフェースに無駄な要素を詰め込まない。必要最小限に整える。

9. ユーザによるエラー認識、診断、回復をサポートする（Help users recognize, diagnose, and recover from errors）
エラー時、ユーザがエラーメッセージを頼りに問題を解決できるようにする。

10. ヘルプや説明文書を用意する（Help and documentation）
マニュアルなしで使えるようデザインした上で、補助のためのコンテンツを用意する。

## ４－２．UIデザインにおける8つの黄金法則(ベン・シュナイダーマン)

1. 一貫性を持たせる（Strive for consistency.）
用語、色、レイアウト、フォントなどを一貫して使う。

2. 誰にでも使いやすく（Seek universal usability.）
初心者には説明を、熟練ユーザにはショートカットなどを提供する。

3. 有益なフィードバックを提供する（Offer informative feedback.）
すべての操作に対してフィードバックを提供する。

4. 処理の完了を知らせる（Design dialogs to yield closure.）
一連の処理を設計し、処理を完了したことをユーザーがわかるようにする。

5. エラーを防止する（Prevent errors.）
エラーの発生を防止する。エラーの場合は回復方法を具体的に指示する。

6. 操作のやり直しができるようにする（Permit easy reversal of actions.）
可能な限り、アクションは可逆的にする。

7. システムはユーザーの制御下におく（Keep users in control.）
ユーザーがシステムを思い通りに動かせると感じられるようにする。

8. 短期記憶の負担を減らす（Reduce short-term memory load.）
ユーザに記憶を強要しない。選択肢を提示する。
PMBOKで定義されているコミュニケーション手段

# １．PMBOKで定義されているコミュニケーション手段について

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/bd2bac52-c7f4-7b29-367d-ce12713f1455.png)
(出典)　https://saikyouse.com/communication_style_pmp/

| 手段名 | 特徴| 例|
|:-----------|:------------|:------------|
|相互型| 当事者が2人以上で複数方向に情報が伝達される | 対面/TV会議、電話、オンラインチャット |
|プッシュ型| 情報を特定の相手に一方的に送信する。<br>内容が正しく相手につたわっているかは不明。 | 手紙、メモ、報告書、メール、FAX、留守電、メッセンジャーアプリ |
|プル型 | 発信者は不特定多数に向けて広く情報を公開し、公開された情報を受信者が自分の意志で能動的に取りに行く | イントラネットサイト、掲示板、eラーニング、wiki |

どれが正しいではなく、ステークホルダーの分析と彼らに対して最適な手段を取ることが必要。

# ２．参考文献

https://saikyouse.com/communication_style_pmp/
octoDNS で Cloudflare のDNS管理をしてみる

こちらはCloudflare Advent Calendar 2024 の21日目の記事になります。

昨年から大変お世話になっているCloudflareですが、
ちょっとした小ネタがあったので紹介します。

# CloudflareのDNS管理について

みなさんはCloudflareでDNS管理をどのように行っていますでしょうか？

Workersなどを使う際は、結構頻繁にDNSレコードを変更されるかと思います。
他のDNSプロバイダからCloudflare DNS環境に切り替える際、切り戻しなどをどうするかなど、考える事があるかと思います。
こんな時に octoDNS というソフトウェアを使うと、複数のDNSプロバイダ間のゾーン情報を同期したり、
他のDNSプロバイダに移行する際などに、ゾーンの変更履歴をgitなどで柔軟に管理することが出来るようになります。

似たようなソフトウェアとしては Route53用のRoadworker

https://github.com/cookpad/roadworker

などもあります。


# octoDNS とは

https://github.com/octodns/octodns

オープンソースのDNS管理用ソフトウェアです。

octoDNSについては、以下の記事が日本語では非常によくまとまっているので詳しい説明は省略させていただきます。

https://heartbeats.jp/hbblog/2020/02/octodns01.html

## 対応するDNSプロバイダ
https://github.com/octodns/octodns/blob/main/README.md#providers

にあるように、世界中のDNSプロバイダに対応しています。


# Cloudflare provider for octoDNS
octoDNSのCloudflareに特化したプロバイダです。

https://github.com/octodns/octodns-cloudflare

今回はこれを使ってゾーン情報を管理してみます。


# 存在するCloudflareのゾーン情報を取得してみる

## Cloudflare APIトークンの準備

https://github.com/octodns/octodns-cloudflare?tab=readme-ov-file#required-api-token-permissions

の案内通りに、Cloudflareのコンソールにログインし、API tokenを取得します。

- Page Rules
- DNS

のパーミッションが必要です。
DNSの変更を行わず、シンプルにゾーン情報をgitで管理するだけであればREADのみで問題ありません。

## octodns-dump (DNS取得)
管理したいゾーン単位で、DNSのダンプが可能です。

```
$ octodns-dump --config-file=config.yaml --output-dir=zones/  example.com. cloudflare
```

のようにすると、YAML形式でゾーン情報を出力できます。
これをgit管理するだけになります。

## octodns-sync (DNS変更)
dumpしたYAMLを編集して、変更したいゾーンの差分を確認できます。
octodns-sync はデフォルトで dry-run になっているため、特別なオプション `--doit` を付けなければ即座に変更されることはありません。
以下のように変更箇所が確認できます。

```
********************************************************************************
* example.com.
********************************************************************************
* cloudflare (CloudflareProvider)
*   Delete <ARecord A 300, hoge.example.com., ['127.0.0.1']>
*   Create <ARecord A 300, hogeex.example.com., ['127.0.0.1']> (zones)
*   Summary: Creates=1, Updates=0, Deletes=1, Existing Records=15
********************************************************************************

```

その他、 `octodns-validate` などのコマンドなどもあります。

CI/CDと連携することでRoute53等の複数DNSプロバイダと常に同期をしたり、
変更履歴をSlackと連動させたりすることも出来そうです。

このあたりについては以下の記事などが詳しく説明されています。

https://blog.cloudflare.com/improving-the-resiliency-of-our-infrastructure-dns-zone/

https://medium.com/devlan-io/octodns-github-actions-cloudflare-digital-ocean-redundant-multi-cloud-dns-hosting-for-free-134acdcc4f03

https://heartbeats.jp/hbblog/2020/02/octodns02.html

---

# make でシンプルに

普段からあまり使っていないと octodns-dump の細かいオプションなどを忘れてしまいがちになるため、

`make dump`
`make sync`

だけ覚えればいいように試してみたサンプルが以下になります。

https://github.com/teckl/octodns-cloudflare-test

社内ではCloudflareの環境は普段からあまりDNSゾーン情報の変更を行うことはないため、

```
$ make dump
$ git diff
$ git commit
```

をするだけでシンプルにDNS変更履歴を管理できるようにしてみました。

これまでは、CloudFront から Cloudflare Workersへの切り替えの際などでは、revert用のCloudFront向けのレコードをダミーとして残しておいたり、DNSレコードのコメント欄をいろいろ活用して運用でカバーしていたのですが、
octodnsを使う事でDNSの変更履歴をgit管理することが出来るようになったので、サクッとrevertなども出来るようになって良さそうです。


以上、octoDNSのちょっとした紹介でした。
CSVファイルの各フィールドの最初と最後に"を付けたい

# はじめに
以下のようなCSVファイルを作成したいと思った際に、はじめうまく作成できなかったので備忘録として作成方法を残しておこうと思います。

```csv:fruit.csv
"name","color","japanese"
"apple","red","りんご"
"grape","purple","ぶどう"
"orange","orange","オレンジ"
```

# 簡単に思いつく方法
作成したいCSVのコンテンツを用意し、`encoding/csv`パッケージを使用してCSVファイルを作成してみます。

```go
package main

import (
	"encoding/csv"
	"os"
)

func main() {
	file, err := os.Create("./fruit.csv")
	if err != nil {
		panic(err)
	}
	defer file.Close()

	header := []string{"\"name\"", "\"color\"", "\"japanese\""}
	records := [][]string{
		{"\"apple\"", "\"red\"", "\"りんご\""},
		{"\"banana\"", "\"yellow\"", "\"バナナ\""},
		{"\"orange\"", "\"orange\"", "\"オレンジ\""},
	}

	csvWriter := csv.NewWriter(file)
	csvWriter.Write(header)
	csvWriter.WriteAll(records)
}
```

上記を実行すると以下のようになります。
```csv:fruit.csv
"""name""","""color""","""japanese"""
"""apple""","""red""","""りんご"""
"""banana""","""yellow""","""バナナ"""
"""grape""","""purple""","""ぶどう"""
"""orange""","""orange""","""オレンジ"""
```

ダブルクオートが各項目で3つになってしまいます。
これは`encoding/csv`の`Write()`関数で`"`があるとエスケープ処理が行われ、`"`が追加されるためです。
具体的には、
1. エスケープが必要な文字を含むフィールドと判定される→フィールドの最初と最後に`"`を追加(""apple"")
1. `"`をエスケープする必要があるので`"`の前に`"`を追加("""apple""")
という処理が行われています。

つまり`encoding/csv`パッケージは`"`があると前後にダブルクオートを追加し、`"`の前にも`"`を追加する仕様になっています。

|encoding/csvに渡す値  |CSVファイルに出力される値  |
|:-:|:-:|
|apple  |apple  |
|app"le  |"app""le"  |
|"apple"  |"""apple"""  |


# 解決方法
`encoding/csv`パッケージを使うと難しいということがわかりました。
以下のように`[]byte`を作成し`encoding/csv`を使用しないでCSVを作成します。
```go:main.go
package main

import (
	"fmt"
	"os"
	"strings"
)

func createByteSlice(s []string) []byte {
	str := strings.Join(s, ",")
	return []byte(fmt.Sprintf("%s\n", str))
}

func main() {
	file, err := os.Create("./fruit.csv")
	if err != nil {
		panic(err)
	}
	defer file.Close()

	header := []string{"\"name\"", "\"color\"", "\"japanese\""}
	records := [][]string{
		{"\"apple\"", "\"red\"", "\"りんご\""},
		{"\"grape\"", "\"purple\"", "\"ぶどう\""},
		{"\"orange\"", "\"orange\"", "\"オレンジ\""},
	}

	file.Write(createByteSlice(header))
	for _, record := range records {
		file.Write(createByteSlice(record))
	}
}
```

これを実行すると以下のCSVファイルを作成することができました。
```csv:fruit.csv
"name","color","japanese"
"apple","red","りんご"
"grape","purple","ぶどう"
"orange","orange","オレンジ"
```

# おわりに
今回はCSVのフィールドに`"`を使用したい場合にGoを使ってどのように作成するかについて解説しました。
ダブルクオートをエスケープするというのは[RFC4180](https://www.ietf.org/rfc/rfc4180.txt)で定義されている事項になります。
`encoding/csv`パッケージを用いることでよしなに処理してくれるので、通常は`encoding/csv`パッケージを使用するといいと思います！
C#の非同期処理について調べてみた / I looked into asynchronous processing in C# (日本語 / 英語)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812041/ea4bc2bb-ba69-f6c1-8e5c-b38d03d93c8d.png)
# 日本語
こんばんわ！
Advent Calendar 2024に参加してまして、25日目の最終記事を書いていこうと思います。
題材は「C# Advent Calendar 2024」ということで、非同期処理について書いていこうと思います。

### 非同期処理とは？
非同期処理は、プログラムの応答性を向上させたり、リソースを効率的に活用するために欠かせない技術です。C# では async と await を使った非同期プログラミングが簡単に実現できます。

###### ・応答性の向上
ユーザーインターフェースがフリーズしにくくなる。
###### ・効率的なリソース利用
待ち時間を有効活用できる。
###### ・並列実行が可能
他の処理を同時進行で実行できる。

### 使用例

```csharp
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Task task1 = DoTaskAsync("タスク1", 2000);
        Task task2 = DoTaskAsync("タスク2", 1000);

        await Task.WhenAll(task1, task2);
        Console.WriteLine("全てのタスクが完了しました。");
    }

    static async Task DoTaskAsync(string taskName, int delay)
    {
        await Task.Delay(delay);
        Console.WriteLine($"{taskName} が完了しました。");
    }
}
```

出力はタスク２→タスク１の順となります。

こんな風に処理の並行実行もできます！
使えば、より可用性の高いシステムが作りこめます

ここまでです。
読んでいただきありがとうございます

# ENGLISH
Good evening!
I am participating in Advent Calendar 2024 and I am going to write the final article for the 25th day.
The subject is “C# Advent Calendar 2024” and I will write about asynchronous processing.

### What is asynchronous processing?
Asynchronous processing is an essential technique for improving program responsiveness and efficient use of resources.

###### ・Improved responsiveness
The user interface is less likely to freeze.
###### ・ Efficient resource utilization
Effective use of waiting time is possible.
###### ・Parallel execution possible
Other processes can be executed concurrently.

### Usage Example

```csharp
using System; using System.
Tasks; using System.

class Program
{
    static async Task Main()
    {
        Task task1 = DoTaskAsync("Task 1", 2000);
        Task task2 = DoTaskAsync("task2", 1000);

        await Task.WhenAll(task1, task2);
        Console.WriteLine("All tasks completed.") ;
    }

    static async Task DoTaskAsync(string taskName, int delay)
    {
        await Task.Delay(delay);
        Console.WriteLine($"{taskName} has completed.") ;
    }
}
````

The output will be in the order of Task 2, then Task 1.

You can also execute processes in parallel like this!
You can create a system with higher availability by using it!

That's all for now.
Thank you for reading!
アドバイスとフィードバックの違い

研修で学んだので備忘録として残しておきます。

# １．アドバイスについて
特定の問題や状況に対して、他者が提供する提案や指示のことを指す。
例「次のプレゼンテーションでは、もっと視覚的な資料を使うと良いですよ。」
上司からアドバイスされた場合は、「従う(しかない)」と思う人が多い。

# ２．フィードバックについて
行動や成果に対する評価やコメントのことを指す。
例「今回のプレゼンテーションでは、視覚的な資料が少なかったため、聴衆の理解が難しかったようです。
(＝難しかったように私は思います。難しかったように私は感じました。)」

# ３．アドバイスとフィードバックの違い
参考文献にとてもイメージしやすい例がありました。

>私が作ったお味噌汁に対して、「パパにはちょっと味が薄いな。」とフィードバックくれるのが父

>「だしの取り方が足りないのよ。」とダメ出しから始まり、出汁の取り方のウンチクを述べてアドバイスするのが母。

仕事上では、アドバイスもフィードバックも、相手の変化を期待してやることが多いと思います。
相手がムっとしてては良い変化も期待できないので、相手に合わせた言い方(アドバイスが良い人もいれば、フィードバックテイストを好む人もいる)というのも必要だなと思いました。
また「従う」マインドになってほしいときとそうでないときのシーンもあるので、そこもまた見定めないと、、と思いました(要はナメられないように。。)。



# ４．参考文献

https://infinitepossibility.co.jp/?p=17721
Deployモジュールの基本

:::note info
「Tanium Cloud」の機能を1つずつ勉強していきます。
:::

# 1.Deployとは

ソフトウェアのインストール、更新、削除を行うモジュール。

> Install, update, or remove software on a flexible set of targets.

公式マニュアル。

https://help.tanium.com/bundle/ug_deploy_cloud/page/deploy/index.html

# ２．何が嬉しいの？
・システム管理者権限を使ってクライアント端末に対してコマンドをリモート実行できるため、いろいろなことができる。コンソールから端末の是正アクション実行が可能となる。
<ユースケース例>
・特定のソフトウェアの配信
・特定のソフトウェアのアップデート(「インストール済みの端末のみ」の設定もできる)
・特定のソフトウェアの削除(アンインストールコマンドをリモート実行する)
・タスクスケジューラの登録
・ファイルの配信(フォルダ・ファイルを任意の場所にコピー)


# ３．設定作業例
## ３－１．ソフトウェアの設定
(1)[Deploy]モジュール＞[Software]をクリックし、「Software Packages」タブをクリック。
[Create Software Package]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/2cfcef53-2e17-74d4-2c1b-cd1aff913fe9.png)
(2)[Add Package Files]からソフトウェアを登録。その他、情報を入力。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/54d14bcb-c7aa-74cd-bb45-60a7d9852da7.png)


(3)「System Requirements」でインストール要件も設定可能。ここで満たなさない端末は対象外となります。
「Installation Requirements」はデプロイ対象とするべき端末を抽出できるQuestionを設定します。
例) インストールの場合、プログラム一覧にそのソフトウェアが入っていないこと
    この条件に合わないと、インストール対象となりません。

「Install Verification」は、デプロイが完了している端末を抽出できるQuestionを設定します。
例) インストールの場合、プログラム一覧にそのソフトウェアが入っていること
    この条件に合わないと、ずっとインストール対象となってしまいます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/da6ed516-af43-2fe4-a7e6-5800b1de2eea.png)



## ３－２．デプロイ(配信)の設定
デプロイ名などを入力していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/65e0ff03-8b93-7e80-a8ff-72ec26dfa8ce.png)

運用上気を付けるポイントは、「Deployment Settings」。OS再起動有無が要件通りかも確認します。
問題なければ、[Preview to Continue]をクリックし、配信設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/e78ce067-59cb-52e8-dd5a-2da7e6e8f9da.png)
Discoverモジュールの基本

:::note info
「Tanium Cloud」の機能を1つずつ勉強していきます。
:::

# １．Discoverモジュールのポイント
・非管理端末の検出、一覧化

公式マニュアル。

https://help.tanium.com/bundle/ug_discover_cloud/page/discover/index.html


> Find, report on, and take action against unmanaged endpoints.


# ２．何が嬉しいか？
## ２－１．前提
組織として会社のネットワーク上に接続されるデバイスに対し、Taniumを使って全体管理をするという目的がある。

## ２－２．嬉しいこと
会社のネットワーク上に接続されるデバイスに対し、TaniumClientが入っているかをリスト化してくれる。
→Tanium Clientが入っていない端末に対しては、(当然ながら)状態の可視化、パッチ適用などができない。
これがセキュリティリスクの温存になる。


# ３．アーキテクチャ
## ３－１．確認単位
MACアドレス(オフィスのプリンタなども抽出される可能性がある。スキャンを絞らないとカフェや自宅のネットワークもスキャンされるので、事前のスキャン設定が重要。)

## ３－２．スキャン

https://help.tanium.com/bundle/ug_discover_cloud/page/discover/discovery.html

|レベル|手法 |ポイント |
|:-----------|:------------|:------------|
|1  |ARP キャッシュおよびインターフェース接続| パッシブ検出方式。各エンドポイントのローカルARP キャッシュから結果が返されるため、エンドポイントはスキャンされない。 |
|2  |ping | ICMPを出して応答を取得。<br>ホスト名,MACアドレスと製造元,OSプラットフォームを確認。 |
|3  | Nmap スキャンとホスト検出)  |ARPリクエストを出して応答を取得。<br>NpcapがインストールされていないエンドポイントにNpcapをインストール<br>Nmapは、一連のTCPやUDPのパケットをリモートホストに送り、応答内容を解析する。<br>ARP ブロードキャストが実行されるため、スキャンの開始時にネットワーク アクティビティが急増することがある。|
|4  |ホスト検出と OS フィンガープリントを使用した Nmap スキャンqVBz | NMAPスキャンを実施して応答を取得。 <br>OS フィンガープリントも含まれる|

NMAPについて
https://nmap.org/man/ja/man-os-detection.html

# ４．運用例
下記を定期的に実施する(棚卸しのイメージ)。
|STEP|項目 |ポイント |
|:-----------|:------------|:------------|
|1|状態可視化|Locationカラムなどを手掛かりに拠点を識別した上で、Tanium Clientの入っていないデバイスを確認|
|2|精査|①インストール不可かどうかを確認。不可のデバイス(MACアドレス単位)に対して、ラベルを付ける。|
|3|是正|インストール可能な端末に対し、Tanium Clientインストールを行う。|
SQLAlchemyの基本

# １．概要
・Python用のSQLツールキットおよびObject-Relational Mapping (ORM)ライブラリ。
・データベース操作をPythonコードで行える。


# ２．ORMとは？
データベースのテーブルをプログラムの中でオブジェクト（クラスとインスタンス）に変換してくれる。
→コード内でSQL文を書かなくてすむってコト！


# ３．何がうれしい？
コードにSQL文を書かなくてすむので、コードの保守性が向上する。

# ４．実行例
## SELECT実行の書き方
```python
stmt = select(User).where(User.name.in_(["Yamada"])) 
```
Userがテーブル名にあたります。
User.nameがnameカラムです。
Yamadaが条件です。nameにYamadaを含むもの。

## 値を取得する
```python
user = session.query(User).get(1)
user_name = user.name
user_email = user.email
```
結果をuserで受け取って、カラム情報を取り出す。

# 参考文献
https://www.sqlalchemy.org/
🔥🔥ex-crowdworks 2024 THE FINAL🔥🔥なぜアドベントカレンダーの毎日投稿を達成できたのか🏋🏽

この記事は [ex-crowdworks Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ex-cw)の25日目の記事です。

# はじめに
今年、株式会社クラウドワークスを退職した@nisyuuです。来年は[四国旅行](https://shikoku-tourism.com/)を検討しています。
エンジニアとしてクラウドワークステック（旧クラウドテック）というフリーランスと企業をマッチングするエージェントサービスを開発していました。

今日はアドベントカレンダー最終日です。
12月1日から毎日記事を投稿してきました。

そこで今回は、投稿を毎日達成するために工夫していたことを紹介します。

# 毎日投稿の工夫

毎日欠かさず投稿をするために取り組んでいたことは、主にこちらの４点です。

- メモを保管しておく
- 下書きを作っておく
- 完璧を求めない
- 生成AIを使う

## メモを保管しておく

日々の業務や学習の中で、新しく学んだことや自分にとって重要なことはメモに残しておきましょう。
メモに残しておくことで記事を書くときのネタになります。

アドベントカレンダーは年に1回なため、1年の間にメモを少しづつ残しておけばそれなりにネタができると思います。

## 下書きを作っておく

メモしたものを元に、下書きを作って蓄積しておきましょう。
下書きはメモを簡単な文章にして書き残しておくことで、本格的に記事を作り始めた際にメモの内容を思い出しやすくなります。

下書きを作る時にちょっとしたコツがあり、簡単な目次を最初に入れておき、大まかな話の流れを考えておくことで、いざ記事を執筆するときに筆が進めやすくなります。

## 完璧を求めない

短期間に多くの記事を投稿するためには、完璧さを求めすぎないことも一つのコツです。
記事を書き終えた後に、追加したい情報や校正したい箇所が出てくるかもしれません。誤字脱字や語弊を与えるような内容はすぐに校正しても良いですが、それ以外については、後からでも更新できるのでグッと堪えていったんそのままにしておきましょう。

## 生成AIを使う

誤字脱字は、ChatGPTのような生成AIを使うことで早く簡単に訂正できます。
さらに、矛盾や文章の重複なども生成AIを使うことでチェックが可能であるほか、扱うテーマの話を膨らませることにも使えます。

生成AIを駆使できたからこそ、記事を毎日投稿できたと言っても過言ではないので個人的には使わない手はないと思っています。

# おわりに

[ex-crowdworks Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ex-cw)、いかがでしたでしょうか？
実質1人アドベントカレンダーになってしまったため、私だけ呑気に円満退職したやつみたいな感じになってしまいましたが、クラウドワークスで培ってきた技術、思考法、仕事術、退職したからこそ言える話などあらゆることを世の中に広く展開できたと考えています。

投稿を毎日するために強い意思を持って取り組んできましたが、けっこう疲れました。
たまたま来年の大会に向けて体力を作っているため、多少の身体的負荷に応じながら継続できましたが、何事も体力があることに越したことはないなと思いました。
マーク・ザッカーバーグがマッチョになった理由が、体感的に分かった気がします。
そういえばイーロンとの金網マッチはどうなったんだろうか。

これにて、[ex-crowdworks Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ex-cw)を締めさせていただきます。
ご覧いただきありがとうございました。

しばらく執筆は、もうええでしょう。
CIS Controlsの基本

セキュリティセミナーで「CIS Control」というものを学んだので、まとめてみます。
「どこから何を・・」という場合の考え方の指針と説明するときの支えに使えるかなと思いました。

# １．CIS Controlsとは？
・Center for Internet Security（CIS）によって策定されたセキュリティガイドライン。
・サイバー攻撃から組織を守るための具体的な対策を提供。
・情報セキュリティの強化を目指す。
・現在はバージョン8.1が公開されている。

https://www.cisecurity.org/controls

# ２．特徴
実際のサイバー攻撃のデータに基づいて設計されており、現実的で効果的なセキュリティ対策を提供している。これにより、組織はリソースを効率的に活用し、最も重要なセキュリティリスクに対処することができる。

# ３．ガイドラインが生まれた背景
米国防総省のセキュリティプロジェクト予算が増大しており、優先順位をつけるために、国家安全保障局がCISやSANSを呼んで、2008年に策定した。

# ４．対策の分類
|CIS Control |Contents|日本語|
|:------:|:------:|:------:|
|1|Inventory and Control of Enterprise Assets|組織の資産の特定と管理|
|2|Inventory and Control of Software Assets|ソフトウェア資産の特定と管理|
|3|Data Protection|情報持ち出し対策|
|4|Secure Configuration of Enterprise Assets and Software|組織で利用する機器やサービスのセキュアな構成や設定の維持|
|5|Account Management|アカウント管理|
|6|Access Control Management|アクセスコントロール管理|
|7|Continuous Vulnerability Management|脆弱性対応|
|8|Audit Log Management|監査ログの管理|
|9|Email and Web Browser Protections|Eメールとブラウザの保護|
|10|Malware Defenses|マルウェア対策|
|11|Data Recovery|データ復旧|
|12|Network Infrastructure Management|ネットワークインフラの管理|
|13|Network Monitoring and Defense|ネットワークの監視と防御|
|14|Security Awareness and Skills Training|教育訓練|
|15|Service Provider Management|さ^ビスプロバイダー管理|
|16|Application Software Security|アプリケーション対策|
|17|Incident Response Management|インシデント対応と管理|
|18|Penetration Testing|ぺネスとレーションテスト|

(出典)　『CIS Critical Security Controls® Version 8.1』

# ５．参考文献

https://www.cisecurity.org/controls
過去のDevRelConを見て新たな気づきがあった

こんにちは、ふるすです。
毎日アウトプットを続ける中で、私と同じようにDevRelとして働かれている方の記事をたくさん読ませていただきました。

同時に、DevRelの活動は海外からスタートしたということもあるので、海外のDevRelの方はどんなことを考えて働いていらっしゃるのかが気になってきました。
そこでDevRelの国際的なカンファレンスであるDevRelConのコンテンツを見てみることにしました。
>DevRelConは、ロンドンにあるHoopyという会社が2015年に開催したカンファレンスです。第一回目の「DevRelCon London」が成功を収めたことから、DevRelConは世界中で開催されるようになりました。

わたしが今回視聴したコンテンツは下記のとおり。

・Nick Walsh / AWS
・Keynotes: bringing DevRel to the big stage

https://developerrelations.com/strategy-and-metrics/a-success-ful-approach-to-devrel

・Cecelia Martinez / OUTSYSTEMS
・A success-ful approach to DevRel

https://developerrelations.com/dev-rel/keynotes-bringing-devrel-to-the-big-stage



いずれもDevRelCon New York 2024の講演です。

これら二つのコンテンツを見ていてまず最初に感じたことは、
「**DevRelも顧客の方向を見ている**」ということ。

私自身、DevRelという活動の在り方を考えているとやはり最終的には「採用」に行き着いてしまうのでは…と思っていたのですが、最近は採用という文脈だけではなく「昨日よりも少し開発をよい組織にするぞ」という目標をふんわり持ち始めていました。

ところがこれらのコンテンツでは全く違うテーマについて話しているものの、「顧客体験をどのように向上させるか」「DevRel（デベロッパーリレーションズ）の一員としての強みは、自分自身が顧客の一人であるために、特別な方法で顧客を理解していること」といったように、顧客を意識したDevRel活動をしていることが伺えるものでした。

この視点は私にとって抜け落ちていたところでした。
言われてみればたしかに顧客の課題を解決する製品を生み出しているのが開発部門なのですから、DevRelとしてももっと顧客を意識した施策をするのはありじゃないか、と思ってしまいました。
弊社製品はBtoBのサービスなのでどう実現していくかはなかなか難しそうなところですがチャレンジしてみたいなと思っています。

**おまけ**
ファインディさん、DevRelチームでDevRelConに参加してきたとのこと…！すごい。


https://note.com/a9a/n/nb24004014df4

ここまでお読みいただきありがとうございました。
RFPとRFI

# １．はじめに
とても久しぶりに出会うとごっちゃになるので整理。

# ２．RFI（Request for Information）
## ２－１．RFIとは？
RFIは、情報収集のための文書。

## ２－２．RFIの目的
市場調査: 現在の市場状況やトレンドを把握する。
ベンダーの能力評価: ベンダーが提供できるサービスや製品の概要を理解する。
プロジェクトの方向性決定: プロジェクトの具体的な要件を決定する前に、可能性を探る。

## ２－３．RFIの内容
企業情報: ベンダーの基本情報や業績。
サービス/製品概要: 提供されるサービスや製品の概要。
経験と実績: 過去のプロジェクトや実績。
技術情報: 使用される技術や方法論。

# ３．RFP（Request for Proposal）
## ３－１．RFPとは？
RFPは、具体的な提案を求める文書。
企業が特定のプロジェクトやサービスの提供を依頼する際に使用。

## ３－２．RFPの目的
具体的な提案の取得: ベンダーから詳細な提案を受け取り、比較検討する。
ベンダー選定: 最適なベンダーを選定するための基準を提供する。
契約条件の明確化: 契約条件や期待される成果を明確にする。

## ３－３．RFPの内容
プロジェクト概要: プロジェクトの目的や背景。
要件定義: 具体的な要件や期待される成果。
内容: 提案に含めるべき情報やフォーマット。
評価基準: 提案を評価するための基準や方法。
スケジュール: 提案の提出期限やプロジェクトのタイムライン。

# ４．RFIとRFPの使い分け

## ４－１．RFIの使用タイミング
プロジェクトの初期段階で、市場やベンダーの状況を把握するため。
具体的な要件を決定する前に、可能性を探るため。

## ４－２．RFPの使用タイミング
プロジェクトの要件が明確になり、具体的な提案を求める段階で。
ベンダーを選定し、契約条件を明確にするため。
Flutter初心者がUdemy講座で初めてFlutterに触りました。

# はじめに
閲覧いただきありがとうございます！
筆者は社会人プログラマーですが、モバイルアプリの作成経験はなく、Flutterに関しては完全に初心者となります。（もちろんDartに関しても初心者です。）
モバイルアプリを開発してみたいと思っていましたので、Udemy講座を受講して基礎的な知識をつけようと思いました。

:::note info
こちらはQiitaアドベントカレンダー2024 「Udemyおすすめ講座をシェアしよう！」に参加しています。
:::

# 購入した講座について
「Flutterアプリ開発講座(初級編)」を購入しました。
https://www.udemy.com/course/nzigen-flutter_beginner/?couponCode=ST12MT122624
購入した理由はいくつかあります。
* 同じ会社から中級編、上級編と出ているため初級編から次につなげやすそう
* サンプル動画からできるようになることが明確
* 上級編では自分が作りたいアプリの講座があった

などの理由になります。自分が購入した講座以外にも様々な講座があったので、よく調べてから購入することをおすすめします。
![検索結果 _ Udemy - Google Chrome 2024_12_22 2_20_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967640/2e841ce6-58b5-2939-6d72-9d338ace98a5.png)

# コースの内容について
![Flutterアプリ開発講座(初級編) _ Udemy - Google Chrome 2024_12_22 2_29_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967640/65959ef0-dddc-5bdf-9eec-d626a6dd5c8e.png)

#### この講座はこんな人におすすめ
* Flutterを0から始める人
* 挫折せずにFlutterの基礎知識をつけたい人

どのチャプターも丁寧に教えていただける講座でした。
少しずつゆっくり進めていけるので初心者ですが、無事最後まで終えることができました。
インプットからすぐにアウトプットを行うことができるので非常に身についたものになりました。

# まとめ
初めてUdemyを使用してとても満足しました。
一緒に買っておいた中級編を今は進めていっています。
中級編も終わり次第上級編に入っていき、自分の作りたいアプリができるようにこれからも頑張っていこうと思います。作った結果などもQiitaで記事にしたいです。

今回自分はセールのタイミングで購入しました。95%オフくらいになっていたので、気になったものに♡をつけておいてセールでまとめ買いをするほうがいいかもしれません。

最後まで見ていただきありがとうございました。
サイバーハイジーン

# １．サイバーハイジーンとは

ハイジーン(hygiene)とは、「衛生、衛生学、衛生管理」のことで、病気にならないための予防を意味します。


# ２．やりすぎは・・・

会社は事業利益を生まないといけません。なので予防に許容以上のコストをかけることは避ける必要があります。

目安は下記。
**予防コスト　＜　是正コスト**

そのうえで大切なこと。
・**高度な対応よりまずは基本から。**
　①端末把握(拠点にある端末の把握、野良PCやサーバを放置しない)
　②状態把握(脆弱性製品を有する)

(出典)
https://enterprisezine.jp/article/detail/19676


# ３．サイバーハイジーンを実現するための６つのミッション

**(1) IPデバイスの把握**
　機器管理台帳だけに頼らず、IPレベルでの可視化が必要。
 (性善説に立たない。機械的な把握の仕組みづくりを！！)

**(2)ソフトウェア構成の把握**
　端末のソフト構成の把握。管理すべき対象を明確にする。

**(3)セキュリティ状態の把握**
　
**(4)健全状態の維持**
　発見された問題の是正を行い、健全な状態を維持

**(5)見える化から見せる化へ**
　見える化は管理部門に対し、対応を迅速化させるための重要な要素。
 　情報公開による見せる化により、経営層への説明責任にも対応する必要がある。

**(6)不審な兆候の探索**
　管理対象の可視化を実施し、一歩進んだ脅威ハンティングの実施

※資産管理ツールのメーカーのセミナーなのでちょっとポジショントークもあるかもです。

# ４． 説明責任と実行責任

 「説明責任」インシデント発生時に発生内容・原因・対応方針を説明する。
 　　　　　　管理職、上級職に求められる。

「実行責任」指示内容や決定事項を滞りなく実施する。
　　　　　　現場担当に求められる。

# ５．参考文献

https://www.tanium.jp/press-releases/tanium-book-publication/
やる気が出ないときの対処法

# はじめに
皆さんは勉強や研究のやる気が出ないなと感じるときはありませんか？
私はめちゃくちゃあります．

そこで，この記事では私が普段実践しているやる気が出ないときの対処法を紹介します．ただし，私が実践している方法というだけで実際に効果があるかは保障できません．

## スマホを見ないようにする
まず，一つ目はスマホを見ないようにすることです．作業時にスマホが近くにあればついつい触ってしまい全く作業が進みません．私は軽い気持ちでゲームやYouTubeを見てしまい，気づいたら1時間以上たっているということがよくあります．こうならないように私が普段スマホを触らないように気を付けていることをいくつか紹介します．まずは，スマホを物理的に遠い距離に置いておくという方法が一番シンプルで効果があるように感じます．スマホを遠くに置いておくだけで，わざわざ取りに行って触るくらいならさぼらずやろうという思考になります．また，スマホの電源が入っていれば通知音が聞こえてきて気になってしまい作業に集中できない場合があるので，スマホの電源を切っておくことをお勧めします．

次にお勧めする方法は，作業に集中するためのタイマーアプリを使用することです．アプリストアで"集中"とかで検索すればいくつかアプリが出てくると思います．これは自分で時間を設定し，その時間がたつまではアプリが他のアプリを開くことを咎めてくれるといったアプリです．あまり強制力はありませんが勉強しているか見張られているような感覚になり集中できるような気がします．

## 時間を決めて仮眠・休憩をとる
作業と休憩の境界線があいまいになるとついついさぼる時間が増えてしまいます．そこで，あらかじめ作業時間と休憩時間を自分で決めておくことでメリハリをつけることができます．例えば，60分作業したら20分休憩するなど時間を決めることでだらだら休憩することを防ぐことができます．

眠気のせいで集中力を保てない場合は仮眠をとることも効果的です．私が普段実践している仮眠方法はカフェインを取った後に15分ほど寝るという方法です．これはカフェインナップと呼ばれていて寝る前にカフェインを取ることでちょうど目覚める頃にカフェインの効果が出てきて，目覚めた後の生産性がアップするそうです．ただし仮眠をとるつもりがそのまま熟睡してしまうということがよくあるので，あくまで仮眠にとどめておくよう注意が必要です．私はこれで何度も失敗してきました！

## とにかくやりはじめる
作業のやる気が出ないときはとにかく短時間でもいいからやり始めるという意識が大切です．おそらく作業は，やり始めるハードルよりやり続けるハードルの方が低いと思います．そのため，最初は5分くらいやったら終わろうくらいの気持ちでもいいので一度作業を始めてしまえば，意外と1時間以上集中して作業できてしまったりします．とにかく作業をスタートするためのハードルを下げることが重要だと思います．

# まとめ
この記事では私が普段やる気が出ないときにとっている対処法をいくつか紹介してきました．きっとやる気が出ないと悩んでいる人は多いと思います．私もいまだにやる気が全然湧かないという時があります．皆さんのやる気の出し方などあればぜひ教えてください！

みなさん勉強・仕事・研究など大変だと思うことはそれぞれあると思いますが頑張りましょう！私も頑張ります！