OmniAICreator/Qiita-1.07M huggingface dataset:
手乗りシアーハートアタックをMRTKで実現する

# はじめに

こんにちは。
ジョジョ好きなXRクリエイターの [もふるね](https://twitter.com/mofurune_k) です。

今回作るものは、3Dモデルが手の平に追従するARアプリです。

開発環境
・Unity 2021.3.29f1
・NRSDK v1.10.2
・MRTK v2.8.3
使用機材
・Xreal Light
・Xreal Light Devkit（またはXreal Light対応スマートフォンでも可能）

実装するとこんな感じになります。
<img width="600" alt="te01.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/7819dc04-0599-04a9-f75f-308f6c9cd782.jpeg">


# 参考資料

・Xreal lightでMRTKを使えるようにできるリポジトリ（吉永さん[@Taka_Yoshinaga](https://twitter.com/Taka_Yoshinaga)）
[MRTK-Profiles-for-NrealLight](https://github.com/TakashiYoshinaga/MRTK-Profiles-for-NrealLight)
・ホロモンさんのブログ記事
[MRTK v2.4.0を使ってHoloLens2で手乗りキャラクターアプリを作成する その１](https://bluebirdofoz.hatenablog.com/entry/2020/07/21/232553)
・ちょまぎょさんのQiita記事
[手乗りちょまぎょアプリ開発で学ぶ MRTK 入門 (MRTK 2.5 対応)](https://qiita.com/chomado/items/d4ff1edae797dfbd3c45)


# １．準備
始めに、MRTKとNRSDKと[MRTK-Profiles-for-NrealLight](https://github.com/TakashiYoshinaga/MRTK-Profiles-for-NrealLight)の導入を済ませます。

手乗りするキャラの3Dモデルデータを用意します。
今回使うのは自作の[シアーハートアタック3Dモデル](https://mofurune.booth.pm/items/4675058)です。

Unity作業に入ります。
ヒエラルキーに空のゲームオブジェクトを作ります。
名前を「Tenori」にしておきます。
Tenoriの子にシアーハートアタックを置きます。

<img width="600" alt="te02.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/4a782c11-09ac-4877-6534-4256f0a1efbf.jpeg">


# ２．手の平に追従する機能

Tenoriに「Hand Constraint Palm Up」コンポーネントを付けます。
すると、「Hand Bounds」と「Solver Handler」コンポーネントも一緒に付いてきます。
これらのコンポーネントの設定をします。

Solver Handler
・Tracked Target Type: Hand Joint
・Addutuional Offset: X:0, Y:-0.05, Z:0

Hand Constraint Palm Up
・Hand Constraint
　・Safe Zone: Above Finger Tips
　・Safe Zone Buffer: 0
　・Rotation Behavior: None
　・Offset Behavior: Tracked Object Rotation
 
<img width="600" alt="te03.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/a3834e16-14ed-a719-7250-1a06d9e601b1.jpeg">


# ３．位置調整

Unityの再生ボタンを押して手とシアーハートアタックとの位置を確認しながら調節します。

操作|手のエミュレーション
---|---
シフトキー + マウス移動|手の移動
マウスホイール回転|手の奥行き
マウスホイール押し込み|手を内向きに

Tenoriの子にあるシアーハートアタックのTransformの値を調節します。
今回は以下のようにしました。
Position: X:0, Y:-0.05, Z:0
Rotation: X:0, Y:180, Z:0

<img width="600" alt="te0４.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/9f304bf3-e3d0-6f7e-927b-5b7aa8b04b3f.jpeg">


# おわりに

以上で完成になります。
Xreal Lightで実際にやってみるとこうなります。
ある程度手の平を傾けると、シアーハートアタックが右手から左手に乗り移る様子が見えます。
安定したところに乗りたいんでしょうね。かわいいですね。

<iframe width="560" height="400" src="https://www.youtube.com/embed/I28sHOb2sgI?si=26fr-rp4XqC3EYxZ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

更にここから、ちょっと手を加えてみました。
やっぱり、シアーハートアタックには爆発がないと！

<iframe width="560" height="400" src="https://www.youtube.com/embed/GkF8AdXfFlk?si=EZwyExfY0fYP4pXD" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

今回はMRTKを使って、手乗りシアーハートアタックを作りました。
MRTKは豊富な機能がノンコードで簡単に使えるので、とても便利ですね。
これからも創作に活かしていきたいです！

前回の記事

https://qiita.com/mofurune/items/532da1396dedb4ae9cf4
共有ライブラリについて

# はじめに
毎週1本様々な技術に関する記事を投稿しています。
もし興味のある方は下のリンクから他の記事も見ていただければ幸いです。
 [@7_inai_](https://qiita.com/7_inai_)

# 共有ライブラリとは
共有ライブラリとは、`複数のプログラムから共有されるライブラリ`のことです。
多くのプログラムは、実行時に必要な関数やデータを動的にロードする必要がありますが、その際に使用されるのが共有ライブラリという仕組みです。共有ライブラリは、複数のプログラムから共有して利用できるため、メモリの節約につながります。

# 共有ライブラリの特徴
### ①動的リンク
共有ライブラリは通常、__動的リンク__ として実装されます。プログラムが実行される際に必要なライブラリが動的にロードされることで使用することができます。
### ②シンボル
共有ライブラリには、外部から呼び出すことができる関数や変数が含まれています。これらの関数や変数は通常、共有ライブラリ内のシンボルテーブルに登録され、プログラムからアクセスできるようになります。__プログラムは、共有ライブラリのシンボルを呼び出す__ ことで、ライブラリの機能を利用します。
### ③仮想メモリ
共有ライブラリは、__仮想メモリ上に一つだけロードされ、複数のプロセスから共用__ されます。それに対して、静的ライブラリは、実行モジュールに静的にリンクされるため、同じライブラリを使っていたとしても、プロセスごとにそれぞれメモリ上にロードされます。
そのため、共有ライブラリの方がメモリの使用効率が高くなります。

# 終わりに
共有ライブラリについて解説しました。
これまで詳しく調べたことはありませんでしたが、今回調べてみて共有ライブラリの便利さや、概要について知ることができました。この記事に書けていないことも多くありますので、皆さんもぜひ調べてみてください。


最後までお付き合いくださりありがとうございました。
コインパーキングの料金体系を完全に理解した

# 最初に

「コインパーキングで予想外に高い請求が来た！」
そんな呟きを見かけることはありませんか？

料金看板を見ながら散歩してみると、さまざまなフォーマットで、さまざまな料金体系が説明されています。


```
平日300円/30分、24時間最大2000円
土日300円/15分
夜間(20:00-6:00)300円/60分、最大1000円
```

さて、あなたが木曜の18:35から翌朝まで車を停める場合、駐車料はいくらになりますか？予定が変わってもう一日駐車すると、料金はどうなりますか？
24時間最大は繰り返し適用されるのでしょうか？
夜間最大は繰り返し適用されるのでしょうか？

ふとそんな疑問を持ったので、料金体系を整理しながら並行して計算を行うウェブアプリを作成しています。
https://cpf.appbatake.com

* 開発言語：TypeScript
* フレームワーク：React Bootstrap
* 実行基盤：Cloudflare Pages
    * カスタムドメインに収容
    * SSLもCloudflare標準

# 料金体系の整理
さて、条件が不明瞭なので、まずはルールを明確に定義しましょう。

## 判定日の整理
判定日は下記の４種類に大別されるようです。
- 全日同一
- 日祝は別料金
- 土日祝は別料金
- 特定日は別料金

判定日によって時間帯ごとの課金体系と、最大料金が変化します。

## 夜間料金
夜間料金は判定日を跨ぐ特別な料金体系です。時間帯最大料金を適用するため、午前0時で夜間時間帯を分割することはできません。

夜間料金が一部の判定日のみに設定されているケースは今のところ見つけていませんが、その場合は夜間は前日の料金の延長として捉えるのが良さそうです。

## 時間帯最大料金
時間帯に対しては下記最大料金３種類のいずれか１種類が設定されるようです。

- 毎回最大（１個）
    - 該当時間帯について、何回でも最大料金を繰り返し適用する
- 各回最大（１個）
    - 該当時間帯について、それぞれの時間帯について駐車後１度だけ最大料金を適用する
- 初回最大（１個）
    - 該当時間帯について、いずれかの時間帯について駐車後１度だけ最大料金を適用する
- 駐車時最大（１個）
    - 該当時間帯について、その時間帯に駐車をした場合に限り１度だけ最大料金を適用する
    - （これ、多分トラブルが非常に多いやつです）

## 経過時間最大料金
時間帯に対しては下記最大料金４種類のいずれか１種類が設定されるようです。

- 繰返最大（１個）
    - 駐車時から、指定された時間での最大料金を繰り返し適用する
- 初回最大（n個）
    - 駐車時から、指定された時間での最大料金を１度だけ適用する。複数の条件が設定される場合がある。(6時間、12時間等）
- 毎回指定時間まで最大（１個）
    - 時間帯の毎回最大に近いが、課金時間帯を跨ぐ場合がある
- 初回指定時間まで最大（１個）
    - 時間帯の初回最大に近いが、課金時間帯を跨ぐ場合がある

# 残る問題
最近は散歩しながらコインパーキングの料金看板を見ているのですが、すでにいくつか対応できないケースを見つけています。

- 繁忙期料金がある（特定日にまだ未対応）
    - 羽田空港パーキング
    - 大相撲開催時期料金
- 特定日のみ最大料金が適用されないと記載されている
    - 24時間毎に最大料金が設定されていて、夜間にも最大料金が設定されているのに、「12/30 - 1/3最大料金の適用はございません」との記載がある。
    - 24時間毎に最大料金が設定されているのに、「12/31 - 1/11最大料金の適用はございません」との記載がある。

特定日に対して祝日のような扱いをするのは良いとして、特定期間だけ上限料金が適用されないのはどうしたものか。夜間料金と駐車後n時間料金は日付を跨ぐので、とても悩ましい。

この他にも対応できなさそうなコインパーキング料金を見かけたら、コメントいただけると助かります。

# 表にまとめてみる
| 種別 | 課金対象 | 繰り返し | 適用時間帯 | 例 |
|:-:|:-:|:-:|:-:|:-:|
| 帯毎 | 時間帯<br/>終わりまで  | ✔︎ | 各時間帯 | 夜間最大料金<br/>(繰り返しあり) |
| 帯各 | 時間帯<br/>終わりまで  |  | 各時間帯 | 時間帯最大料金<br/>（各一回適用） |
| 帯初 | 時間帯<br/>終わりまで  |   | いずれか一つの<br/>時間帯 | 時間帯最大料金<br/>（いずれか一回適用） |
| 帯駐 | 時間帯<br/>終わりまで  |   | 駐車した時間帯 | 時間帯最大料金<br/>（駐車した時間帯のみ有効） |
| 刻毎 | 特定時刻まで | ✔︎ | 指定時刻 | 駐車後24時間最大<br/>（繰り返しあり) |
| 刻初 | 特定時刻まで |   | 指定時刻 | 駐車後24時間最大<br/>(1回だけ) |
| 経毎 | 経過時間 | ✔︎ | 経過時間 | 24時まで最大<br/>(繰り返しあり) |
| 経初 | 経過時間 |   | 経過時間 | 当日24時まで最大 |

# さいごに
いつか「チョットデキル」ところまで理解したい。
distrolessの利用には依存関係に気をつけよう

```
FROM amd64/golang:1.18 AS builder

ENV PROJECT xxx/xxxx/batch
WORKDIR /go/src/$PROJECT

# restore dependencies
COPY go.* ./
RUN go mod download

COPY . .
RUN go build -o /batch

FROM gcr.io/distroless/static AS release
WORKDIR /
COPY --from=builder /batch /batch
USER nonroot:nonroot
ENTRYPOINT ["/batch"]
```
というようなDockerのマルチステージビルドをして、生成物も出力されているのに、ENTRYPOINTを実行すると
terminated: Application failed to start: "/batch": no such file or directory
ファイルは確かにそこにあるのに、ファイルが見つからないという不思議なエラーになりました。
原因は、RUN CGO_ENABLED=0 go build -o /batchのCGO_ENABLED=0のフラグのつけ忘れでした
distrolessのイメージは無駄なものをそぎ落としすぎており、共有ライブラリが足りない時があるので、このフラグをつけて生成されるバイナリが完全に静的であること、つまり共有ライブラリに依存しないようにする必要があるとのことでした
英語公用語の会社で学んだ英語に関する豆知識

NAIST Advent Calendar 2023の1日目。どうもNAIST情報科学領域の修士課程に在籍していますけいたです。

修士課程に在籍しつつ現在Googleでソフトウェアエンジニアとしてフルタイム働いています。
（詳しい自己紹介は[こちら](https://www.k1832.com/about/)）

この記事では僕が英語公用語の会社に入社してから知った英語に関する知識を披露したいと思います。
「ニッチな英単語を紹介」「このフレーズはよく使う！」という感じではなく、英語学習中の日本語話者がやってしまいがちな間違い（という程でもないですが）を紹介したいと思います。
（主語が大きくてすみません。そういう傾向があるというふうに読み替えてください。）

## 改行しすぎる
注意してみると分かりますが、英語ネイティブの人たちや日本語以外が母国語の人たちはそれほど改行しません。

以下、ChatGPTに書いてもらった例です。

### 英語学習中の日本語話者がやりがち
> Dear Team,
> 
> I hope this email finds you well.
> I am writing to inform you about our next project meeting scheduled for Friday, 17th November.
> 
> In this meeting, we will discuss the project timelines, assign tasks, and address any concerns you may have.
> Please ensure to read the project brief attached before the meeting.
> 
> ...

### その他の言語話者
> Dear Team,
> 
> I hope this email finds you well. I am writing to inform you about our next project meeting scheduled for Friday, 17th November.
> 
> In this meeting, we will discuss the project timelines, assign tasks, and address any concerns you may have. Please ensure to read the project brief attached before the meeting.
> 
> ...

## カジュアルな文章を書くときは最後にピリオドを打たない
日本語でもカジュアルな文章を書くときにそんなに句点を打ちませんよね？
英語でもそれは同じで、同僚とチャットをするときなどメッセージの最後にピリオドを打たないほうがカジュアルな感じにできます。

ピリオドが最後に打たれてあると、かたい感じ、もしくは冷たい感じになってしまうらしいです。

## まとめ
2つしか思いつきませんでした。また何か思いついたら更新します。

反論や付け加えたいことなどありましたらコメントお願いします。
File System APIを使ってローカルのフォルダをプレビュー表示したメモ

## 概要
ローカルのディレクトリをプレビュー表示したまでのメモ。

[ソースコード](https://github.com/hibohiboo/kaminiten/tree/2b8122c2d7da5c529e3da06fae8027bcb3e88fcc)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/57ea2e62-882f-3fc4-e3d1-d2bfb7989279.png)
ChatGPTの活用法20選

## 1. **質問応答システム**
**プロンプト例:** "Pythonでリスト内包表記を使う方法を教えてください。"
**応答例:** "Pythonのリスト内包表記は、forループを簡潔に書く方法です。例えば、`numbers = [i for i in range(10)]`と書くと、0から9までの数値を含むリストが作成されます。"

## 2. **言語学習のアシスタント**
**プロンプト例:** "英語の 'I'm looking forward to it.' を日本語に翻訳してください。"
**応答例:** "それを楽しみにしています。"

## 3. **コーディングの助け**
**プロンプト例:** "JavaScriptでシンプルなToDoリストを作るコード例を見せてください。"
**応答例:** "こちらは基本的なHTMLとJavaScriptを使ったToDoリストの例です。..."

## 4. **創作物のインスピレーション**
**プロンプト例:** "宇宙を舞台にした冒険小説のアイデアを教えてください。"
**応答例:** "未知の惑星を探索する宇宙飛行士のグループに焦点を当てた物語です。彼らは新しい生命形態と出会い、その惑星の謎を解き明かす冒険に出ます。"

## 5. **データ解析と計算**
**プロンプト例:** "Pythonを使ってリスト内の平均値を計算する方法を教えてください。"
**応答例:** "リスト `numbers = [1, 2, 3, 4, 5]` の平均値は、`sum(numbers) / len(numbers)` で計算できます。"

## 6. **ビジネスメールのライティング**
**プロンプト例:** "クライアントにプロジェクトの進捗を報告するメールの書き方を教えてください。"
**応答例:** "件名は「プロジェクト進捗報告」とし、メールの本文では具体的な進捗状況と次のステップについて簡潔に記載します。"

## 7. **教育ツール**
**プロンプト例:** "中学生向けの簡単な化学クイズを作ってください。"
**応答例:** "問題：水の化学式は何ですか？答え：H2O"

## 8. **レシピの提案**
**プロンプト例:** "家にある野菜を使った健康的なディナーレシピを教えてください。"
**応答例:** "トマト、キュウリ、玉ねぎを使ったサラダのレシピを紹介します。..."

## 9. **旅行計画のアシスタント**
**プロンプト例:** "京都での3日間の旅行プランを提案してください。"
**応答例:** "1日目は清水寺と祇園を訪れ、2日目は金閣寺と嵐山、3日目は伏見稲荷大社と錦市場を巡るプランです。"

## 10. **パーソナライズされたエンターテイメント**
**プロンプト例:** "私を笑わせるジョークを教えてください。"
**応答例:** "時間は最悪の美容師だ。なぜなら、いつも少しずつ髪を薄くしていくからね！"

## 11. **カスタマーサポート**
**プロンプト例:** "製品の使い方がわからないときの問い合わせ対応を教えてください。"
**応答例:** "製品のモデル番号や具体的な問題点を教えていただけますか？それに基づいて、詳しい使い方やトラブルシューティングの方法をご案内します。"

## 12. **健康とフィットネスアドバイス**
**プロンプト例:** "自宅でできる簡単な運動ルーチンを教えてください。"
**応答例:** "プッシュアップ、スクワット、プランクを各々30秒ずつ行うシンプルなサーキットトレーニングをおすすめします。"

## 13. **音楽の創作**
**プロンプト例:** "ポップソングの歌詞のアイデアをください。"
**応答例:** "夏の終わりの切ない恋の物語をテーマにした歌詞を提案します。..."

## 14. **ニュースの要約**
**プロンプト例:** "今日の主要なニュースを簡潔にまとめてください。"
**応答例:** "今日のニュースでは、政治、経済、スポーツの各分野で以下の主要な出来事がありました：..."

## 15. **ゲームの戦略とヒント**
**プロンプト例:** "「マインクラフト」で効率的な家の建築方法は？"
**応答例:** "基礎をしっかりと築き、資源の最適な利用を心がけましょう。また、防御機能も重要です。..."

## 16. **モチベーションと自己啓発**
**プロンプト例:** "勉強のモチベーションを上げる方法を教えてください。"
**応答例:** "具体的な目標を設定し、小さな達成感を重ねることが大切です。また、適度な休憩を取ることも忘れずに。"

## 17. **旅行記と体験談の作成**
**プロンプト例:** "京都旅行の感想を美しい文章で書いてください。"
**応答例:** "京都の古き良き街並みは、訪れる者の心に静けさと懐かしさをもたらします。特に紅葉の季節は、その美しさに言葉を失います。"

## 18. **ファッションとスタイルのアドバイス**
**プロンプト例:** "カジュアルなデートにふさわしい服装は？"
**応答例:** "シンプルなジーンズに、おしゃれなTシャツまたは軽いセーターを合わせると良いでしょう。アクセサリーで個性を出すのも素敵です。"

## 19. **文化と歴史の教育**
**プロンプト例:** "江戸時代の日本について簡単に説明してください。"
**応答例:** "江戸時代は1603年から1868年までの日本の歴史で、政治的には徳川家が幕府を開いています。この時代は芸術と文化の発展が特徴です。"

## 20. **パーソナルファイナンスのアドバイス**
**プロンプト例:** "貯蓄を増やすためのヒントを教えてください。"
**応答例:** "支出を記録し、不要な出費を削減することが重要です。また、自動積立の仕組みを利用すると良いでしょう。"
Gitを使う開発者のための時間節約術：自動`.gitkeep`ファイル生成ツール

# はじめに
開発者の皆さん、空のディレクトリをGitリポジトリに含めるために`.gitkeep`ファイルを一つずつ手動で作成する作業に時間を取られていませんか？今日は、この面倒な作業を自動化するツール「GitkeepGenerator」の使い方とメリットをご紹介します。

# GitkeepGeneratorとは？
`GitkeepGenerator`は、指定されたディレクトリパス内のすべての空のディレクトリに`.gitkeep`ファイルを自動的に作成するJavaプログラムです。このツールを使うと、空のディレクトリをGitリポジトリに簡単に追加できます。

# なぜ`.gitkeep`ファイルが必要？
Gitは空のディレクトリをトラックしません。プロジェクトのディレクトリ構造を保持するためには、空のディレクトリに何らかのファイルを置く必要があります。`.gitkeep`はその目的で広く使われています。

# GitkeepGeneratorの使い方
1. **ダウンロードとセットアップ：** GitkeepGeneratorのJavaプログラムをダウンロードし、Java環境をセットアップします。
2. **コマンドラインで実行：** プログラムをコマンドラインから実行し、対象のディレクトリパスを引数として渡します。
3. **自動生成：** プログラムが自動的に空のディレクトリを検出し、`.gitkeep`ファイルを生成します。

# GitkeepGeneratorのメリット
- **時間節約：** 手動で`.gitkeep`ファイルを作成する必要がなくなります。
- **エラー削減：** 手動操作によるミスが減少します。
- **効率的なプロジェクト管理：** プロジェクトのディレクトリ構造を簡単に保持できます。

# GitkeepGeneratorのソースコード
以下は`GitkeepGenerator`の基本的なソースコードです：

```java
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class GitkeepGenerator {

    public static void main(final String[] args) {
        if (args.length > 0) {
            final var dirPath = args[0];
            final var dir = new File(dirPath);
            if (dir.exists() && dir.isDirectory()) {
                final List<String> emptyDirs = new ArrayList<>();
                GitkeepGenerator.getChildPaths(dir, emptyDirs);
                for (final String emptyDir : emptyDirs) {
                    GitkeepGenerator.makeGitkeep(emptyDir);
                }
                System.out.println("完了");
            } else {
                System.out.println("指定されたパスは無効です。正しいディレクトリパスを指定してください。");
            }
        } else {
            System.out.println("ディレクトリパスが指定されていません。");
        }
    }

    private static void getChildPaths(final File parentDir, final List<String> emptyDirs) {
        final var subDirs = parentDir.listFiles(File::isDirectory);
        final var files = parentDir.listFiles((final var f) -> !f.isDirectory());
        if (subDirs != null) {
            if (subDirs.length > 0) {
                for (final File subDir : subDirs) {
                    GitkeepGenerator.getChildPaths(subDir, emptyDirs);
                }
            } else if (files != null && files.length == 0) {
                emptyDirs.add(parentDir.getAbsolutePath());
            }
        }
    }

    private static void makeGitkeep(final String dir) {
        try {
            Files.createFile(Paths.get(dir, ".gitkeep"));
        } catch (final IOException e) {
            e.printStackTrace();
        }
    }
}
```

# 結論
`GitkeepGenerator`は、Gitを使う開発者にとって非常に便利なツールです。このツールを利用することで、`.gitkeep`ファイルの作成作業から解放され、より重要な開発作業に集中できるようになります。開発の効率化を図りたい方は、ぜひこのツールをお試しください！
【プラクティス紹介】1分でさらっと分かる「ゴールドカード」

## プラクティス名（別名）
ゴールドカード　（20%ルール）

## プラクティスの目的・狙い
* 実験やチャレンジの時間を確保し、イノベーションを促進する
* DEVの意欲や主体性を向上させる

## どんな時に使うか
* 毎日、目の前のタスクを消化することに追われ、調べたいことや試したいことができない時
* いつものやり方を延々と続けており、チームにマンネリムードが漂ってきた時

## 実施手順
1. ゴールドカードの趣旨/効果/運用方法について**POと合意しておく**
1. DEVには毎月2回程度ゴールドカードを使う権利が与えられる（使い切らなくてもよい）
1. ゴールドカードを使う場合はデイリースクラムで何をやるか宣言し、チームの了解を得る
1. その日はチームのタスクではなく、自分で選んだテーマの仕事をする
1. 試した結果や学んだ成果はどこかでチームに共有する

:::note info
ゴールドカードの使用例
・新しいツールや手法を試してみる
・思いついたアイデアを実装してみる
・新しいことを学ぶ、調べる
・開発環境を改善する
:::

## アレンジ例
* 各自バラバラにゴールドカードを使うと足並みが揃わないという場合は使うタイミングを揃える

## アンチパターン
* PBI消化が危ういスプリントにもかかわらず、ゴールドカードを行使する
* ゴールドカードの時間が計画されていない（＝使った分だけ進捗が遅れる）

## 参考情報

https://www.ohmsha.co.jp/book/9784274219375/

## こぼれ話（私的コメント）
Google社のカルチャーとして有名な「20%ルール」というものがあります。業務時間の20％は普段の仕事とは異なる（成果には直結しない）仕事をするというものです。その現場において適切な比率が何％かはさておき、要は将来のためのアイデアを醸成する時間をきちんと確保すること大切で、それがイノベーションを生み、好循環に繋がります。そのコンセプトをチーム単位で運用できるプラクティスに落とし込むとゴールドカードのようなやり方になるのだと思います。実際にゴールドカードを導入したチームでは、開発中のプロダクトとそれを支えるインフラの両方に変化がもたらされたそうです。

　[アジャイルプラクティス一覧へ戻る](https://qiita.com/kakashi_h5/items/20584998c5ca4594b9ea)
Bashに慣れた人向けのPowershell機能備忘録

VBScriptが非推奨になったこともあり、Powershell の需要が高まっているかと思います。
この記事は、主に Bash に慣れている人が、「Bash で言うところの XXXX という機能は Powershell だとどうなるんだろうな？」 という疑問に対する回答を集め備た忘録です。

## コマンドライン引数の取得

コマンドライン引数は、配列 `$args` で取得できる。

参考: [Windows PowerShell クイック リファレンス](https://download.microsoft.com/download/8/3/1/8319DD7B-9F17-4B5D-A18A-8B1CC971C80D/powershell_reference_Apr2010.doc)

## コマンドライン引数を `shift` する

Bash の場合、コマンドライン引数を一つずらすには、 `shift` というコマンドがありますが、Powershell の場合はそれに該当するコマンドはありません。

ただし、変数 `$args` は一般的な配列ですので、以下のようにして先頭の要素を捨てる事はできます。

```
$null, $args = $args
```

## Boolean の定数

`$true` と `$false` というプリセットの定数Powershell では「自動変数」といいます）が用意されています。

## 標準出力にプリントする `echo`

```
Write-Output "Some String"
```

`Write-Output` のエイリアスとして `echo` というコマンドもあるので、以下のような書き方もできます。

```
echo "Some String"
```

ちなみに、標準出力と関係なくコンソールに出力したい場合は `Write-Host` というコマンドも使えます。
DrupalのWebformで入力したデータを他のWebサービスに登録

 DrupalのWebformを使って入力したデータ、例えばアンケート結果を他のウェブサービスで利用したいのでPOST使ってそこのサービスに送るというのをやってみました。この記事はDrupalを使ったことがある方が対象ですが、あーこんなこともできるんだDrupalってと思ってもらってもいいかな。

 手順は
 1. Drupalのサイトを立ち上げる --> 今回はcolorfullBoxというサービスを利用
 　　　　　　　　　　　　　　　　　　難しくないけど時間がかかる（無料枠あり）
 2. Webformのモジュールを追加する
 3. Webformを作る
 4. Webサービスを設定する　--> 外部のサービスをお試しで無料利用、すぐにできます。
 5. Webformで入力をし、Webサービスにメッセージが行っているか確認する。

ではやってみました。
1. Drupalのサイトを立ち上げる
 こちらのColorfulBoxを利用しました。https://www.colorfulbox.jp/
 DrupalだけではなくいろいろなＣＭＳやソフトが使えます。
 お値段もリーズナブルなのですが最初の30日は無料で試せます。
 コントロールパネルでクリックしていけばできるので今回は詳細の説明はしませんがよかったらこちらの本を参照してください。
 [酒屋の娘、Webサイト制作します: Drupal 10で小さな商店街がDXに挑戦！](https://www.amazon.co.jp/%E9%85%92%E5%B1%8B%E3%81%AE%E5%A8%98%E3%80%81Web%E3%82%B5%E3%82%A4%E3%83%88%E5%88%B6%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%99-Drupal-10%E3%81%A7%E5%B0%8F%E3%81%95%E3%81%AA%E5%95%86%E5%BA%97%E8%A1%97%E3%81%8CDX%E3%81%AB%E6%8C%91%E6%88%A6%EF%BC%81-Meetup-%E8%B1%8A%E7%94%B0%E6%94%AF%E9%83%A8-ebook/dp/B0C5F3MVP4/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=HD0RXPHS5MIE&keywords=drupal+10&qid=1699959627&sprefix=drupal10%2Caps%2C161&sr=8-1)

 2. Webformのモジュールを追加する
 　モジュールの追加はこちらのWebformのサイトに行き https://www.drupal.org/project/webform
  tar.gzファイルのリンクをコピー
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/08f09925-bc29-da6c-d98f-95534db50d07.png)
Drupalでモジュール追加し,管理メニューで有効化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/795bbcd2-9306-6c45-9cec-db7c76241d52.png)

3. Webformを作る
 管理メニュー > Webforms からAdd WebformでWebformを作成します。
 post_testというテキスト入力の項目だけある簡単なWebformを作りました。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/540a6e2d-9528-d0b6-6832-28065b0ad4d8.png)

4. Webサービスを設定する
 こちらのサービスにアカウントを作成します。
 https://beeceptor.com/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/b2ee388a-50c5-5702-202d-b7459d5765f3.png)

 
 Endpoinnt の名前を指定して"Create Endpoint"
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/5d04650d-2dc0-ca80-f7a2-ce97f0309e95.png)
Endpointが出来ました。ここをターゲットにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/57fb1855-5583-608b-8207-e8a986d60532.png)

5. Webformで入力をし、Webサービスにメッセージが行っているか確認する。
　最後にWebformの設定をします。今回使うWebformを開いて設定、email/Handlersを選んでAdd Handlerクリック
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/fcf98d7f-80ab-faea-053a-6a976a6f1976.png)
 Remote postを選択します。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/46eacde2-42da-86c2-e31f-d2f5170482b6.png)
任意のタイトルと endpointのURLを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/84b491eb-8867-0bb7-b51b-ed81e41ea4ec.png)
Webformに何か入力してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/5b293a6a-3df9-2576-e562-f7685d81808a.png)
メッセージがPOSTされてました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/d3278303-979e-b7db-3242-d074d227c293.png)
Amazon EC2と自動スケーリング

# Amazon EC2と必須の付随サービス：初心者向け解説

Amazon Elastic Compute Cloud（EC2）は、AWS（Amazon Web Services）が提供する柔軟でスケーラブルなクラウドコンピューティングサービスです。しかし、EC2単体ではその真価を発揮できません。ここでは、EC2の機能を最大限に引き出すために必須となる付随サービス、Elastic Load Balancing（ELB）、Amazon CloudWatch、Amazon EC2 Auto Scalingの全体的な関係性について、初心者にも分かりやすく解説します。

## Elastic Load Balancing（ELB）

### トラフィックの分散と管理

Elastic Load Balancingは、アプリケーションやウェブサイトへのトラフィックを複数のEC2インスタンスに分散させるサービスです。この分散により、単一のインスタンスに過負荷がかかることを防ぎ、アプリケーションの可用性と耐障害性を向上させます。

#### EC2との連携

ELBはEC2インスタンスの健康状態を監視し、問題があるインスタンスへのトラフィックを自動的に停止します。このプロセスは、アプリケーションのパフォーマンスと安定性を保つ上で不可欠です。

## Amazon CloudWatch

### パフォーマンス監視とアラート

Amazon CloudWatchは、AWSリソースとアプリケーションの監視を行うサービスです。EC2インスタンスのCPU使用率、ディスクI/O、ネットワーク利用状況など、多岐にわたるメトリクスを監視します。

#### 監視と自動応答

CloudWatchを使用すると、異常な動作やパフォーマンスの問題をリアルタイムで検出し、自動的にアクションを実行することができます。これにより、EC2環境の健全性と最適化が保たれます。

## Amazon EC2 Auto Scaling

### 自動スケーリングと効率管理

Amazon EC2 Auto Scalingは、アプリケーションの需要に基づいて、EC2インスタンスの数を自動で調整するサービスです。需要が増加した際に自動的にインスタンスを追加し、需要が減少した際にはインスタンスを削減します。

#### 効率的なリソース利用

EC2 Auto Scalingは、コスト削減とパフォーマンス最適化の両方を実現します。リソースの使用効率を最大化し、ユーザー体験の向上に寄与します。

## EC2と付随サービスの全体的な関係性

Amazon EC2は基本的なコンピューティングリソースを提供しますが、Elastic Load Balancing、Amazon CloudWatch、Amazon EC2 Auto Scalingは、EC2インスタンスのパフォーマンス、安定性、およびコスト効率を最適化するために重要な役割を果たします。

#### 1. **Elastic Load Balancingの役割**
   - ELBは、複数のEC2インスタンス間でトラフィックを分散させ、アプリケーションの可用性と耐障害性を高めます。EC2インスタンスが異常を示した場合、ELBはそのインスタンスへのトラフィックを自動的に中断し、他の健全なインスタンスにトラフィックを振り分けます。

#### 2. **Amazon CloudWatchの役割**
   - CloudWatchは、EC2インスタンスのパフォーマンス監視を行い、特定のメトリクスに基づいてアラートを生成します。これにより、問題が発生する前に適切な対応をとることが可能になります。

#### 3. **Amazon EC2 Auto Scalingの役割**
   - Auto Scalingは、アプリケーションの需要に応じて、EC2インスタンスの数を自動的に増減します。これにより、ピーク時の性能要求に対応しつつ、コストを抑制することが可能です。

### Amazon EC2と付随サービスの統合の重要性

- **性能と可用性の向上**
  - EC2とELB、Auto Scalingの統合により、アプリケーションのパフォーマンスを最適化し、不測のトラフィック増加にも柔軟に対応できます。
- **監視と運用の効率化**
  - Amazon CloudWatchによる詳細な監視とアラート機能を組み合わせることで、システムの運用効率を向上させ、問題発生時の迅速な対応を可能にします。
- **コスト管理と最適化**
  - Auto Scalingによるリソースの自動調整は、必要なリソースのみを使用し、無駄なコストを削減する助けとなります。

## EC2と付随サービスのシナジー

これらのサービスは、単独では有用ですが、組み合わせることでその真価を発揮します。EC2は基盤となる計算リソースを提供し、ELB、CloudWatch、Auto Scalingはそれを補完し、最適化します。このシナジーにより、EC2の利用者は、より安全で信頼性の高い、スケーラブルなアプリケーション環境を構築できます。

## まとめ

Amazon EC2とそれに付随するサービスの組み合わせは、クラウド環境におけるアプリケーションの運用において非常に強力です。Elastic Load Balancing、Amazon CloudWatch、およびAmazon EC2 Auto Scalingは、EC2のパフォーマンスを最大化し、アプリケーションの可用性と効率を向上させます。これらのサービスを理解し、適切に統合することで、クラウドリソースの管理と運用が大幅に改善されるでしょう。
親オブジェクトから子オブジェクトを検索する時にリレーション名称を確認する方法

# SOQLで親オブジェクトから子オブジェクトを検索する時にリレーション名称を確認する方法

１．オブジェクトマネージャーで子オブジェクトの親への参照フィールドを開く、
２．参照関係オプションの部分の子リレーション名を確認する。
３．SOQLのサブクエリで上記名称の「子リレーション__r」より検索するようにする。

例：子リレーション名がChild_Parentの場合
```SQL
SELECT Id, Name, (SELECT Id, Name FROM Child_Parent__r) FROM Parent
```

実際には、参照関係を作成するときに、入力する名称である。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159211/0f05d72f-1cc7-e451-4c31-75743c4561ee.png)
Apple Silicon(M1など)のMac(MacOS Sonoma14)でJMeterが動作しない

# Apple Silicon(M1など)のMac(MacOS Sonoma14)でJMeterが動作しない

HomebrewでインストールしたJMeterがうまく起動しませんでした。

Homebrewのアーキテクチャを変更したり、Javaのバージョンを変更したり、JAVA_HOMEを設定したり。。。

解決方法はこちらのissueにありました。
https://github.com/apache/jmeter/issues/6083#issuecomment-1786152329

1. HomebrewはarmアーキテクチャにしてJMeterをインストール
2. JAVA_HOME設定しない
3. correttoをインストール
4. 直接、変数を設定して呼び出す

```
uname -r # => 23.1.0
uname -m # => arm64
brew install corretto

# => successful launch on an M1
JAVA_HOME=/Library/Java/JavaVirtualMachines/amazon-corretto-21.jdk/Contents/Home/ exec /opt/homebrew/Cellar/jmeter/5.6.2/libexec/bin/jmeter
```
DockerコンテナでLambdaをデプロイする

## はじめに
Docker イメージを ECR リポジトリ にプッシュし、
Lambdaを ECR リポジトリから ビルドする手順を試してみたので、
その手順を記載しています。

## 事前準備
- Docker Desktop 
- AWS CLI
- ECR リポジトリの作成（pushするため）

## 手順
### ディレクトリ
```
docker-lambda-app/
├── Dockerfile
├── app.py
└── template.yaml
```

### Dockerfile
```Dockerfile:Dockerfile
FROM public.ecr.aws/lambda/python:3.10
COPY app.py   ./
CMD ["app.handler"]  
```

### Python
```python:app.py
import json

def handler(event, context):
    return {
        "statusCode": 200,
        "body": json.dumps(
            {
                "message": "hello world func1",
            }
        ),
    }
```

### YAML
```yaml:template.yaml
AWSTemplateFormatVersion: 2010-09-09

Parameters:
  EcrImageUri:
    Description: ECR image URI
    Type: String

Resources:
  LambdaFunc:
    Type: AWS::Lambda::Function
    Properties:
      Role: !GetAtt LambdaRole.Arn
      PackageType: Image
      Code:
        ImageUri: !Ref EcrImageUri

  LambdaRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: /
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
```

### イメージの起動
```
$ docker run --rm -p 9000:8080 func1:latest 
```

### ローカル動作確認
```
$ curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
```

### Docker に リポジトリの URI を含めたタグを付与
```
$ docker tag func1:latest {accountid}.dkr.ecr.ap-northeast-1.amazonaws.com/func1:latest
```

### ECRログイン
pushする前にログインする
```
$ aws ecr get-login-password --region ap-northeast-1 --profile {account} | docker login --username AWS --password-stdin {accountid}.dkr.ecr.ap-northeast-1.amazonaws.com
```

### ECRへpush
```
$ docker push {accountid}.dkr.ecr.ap-northeast-1.amazonaws.com/func1:latest
```
※必要に応じて、AWSコンソールで確認


### スタックの作成
```
$ aws cloudformation create-stack \
    --stack-name func1 \
    --template-body file://template.yaml \
    --parameters ParameterKey=EcrImageUri,ParameterValue={accountid}.dkr.ecr.ap-northeast-1.amazonaws.com/func1:latest \
    --profile {account} \
    --capabilities CAPABILITY_NAMED_IAM
```

## まとめ
### メリット
- 好みのプログラミング言語や実行環境を選択することができる
  - プロジェクトとかで使うことはないと思うが、できるという事実が分かった
- ローカル開発がしやすい
- 拡張性（逆にデメリットとも言える）

### デメリット
- SAMを使用する方がかなり楽（便利）
  - わざわざこの方法でやる必要があるかと言われるとおそらく微妙
- AWSコンソールでソースを確認できないので注意が必要
  - 例えば、バグを至急調査しないといけないときなどは致命的になりそう
データベースサーバーとファイルサーバーの違い

# データベースサーバーとファイルサーバーの違い：初心者向け解説

ITシステムにおいて、データベースサーバーとファイルサーバーはデータの保存と管理に重要な役割を担いますが、その働き方には大きな違いがあります。これらのサーバーがどのように異なり、どのような用途で使われるのかを初心者の方にも理解しやすく説明します。

## データベースサーバーの役割

### 構造化データの管理

データベースサーバーの主な目的は、構造化されたデータ（例えば、顧客情報、販売記録など）を管理することです。データベース管理システム（DBMS）を使用して、データを効率的に保存、検索、更新、削除することができます。

#### 複雑なクエリの処理

データベースサーバーは、SQL（Structured Query Language）などのクエリ言語を使用して、複雑なデータ操作や分析を行います。これにより、大量のデータから必要な情報を迅速に取り出すことが可能になります。

## ファイルサーバーの役割

### ファイルの中央管理

ファイルサーバーは、文書、画像、ビデオなどの非構造化データ（ファイル）を中央で管理するために使用されます。これにより、ネットワーク上の複数のユーザーがファイルにアクセスし、共有することができます。

#### アクセス制御と共有

ファイルサーバーは、ファイルのアクセス権を設定し、誰がどのファイルを見ることができるかを管理します。また、共有フォルダーを設定して、特定のユーザーグループ間でファイルを共有することも可能です。

## データベースサーバーとファイルサーバーの違い

### データの種類と管理方法

データベースサーバーは主に構造化されたデータを管理し、ファイルサーバーは非構造化データの保存と共有に特化しています。データベースサーバーではデータが表やレコードとして整理され、ファイルサーバーではファイルとして個別に管理されます。

### 使用目的と機能

データベースサーバーはデータの検索や分析を効率的に行うために設計されており、ファイルサーバーはファイルの保存と共有のために使用されます。データベースサーバーは複雑なデータ操作や分析をサポートするための高度な機能を持ち、ファイルサーバーはファイルへのアクセスと共有のための基本的な機能に特化しています。

### パフォーマンスとスケーラビリティ

データベースサーバーは、大量の構造化データを効率的に処理するために最適化されており、複雑なクエリやトランザクション処理に対応しています。一方、ファイルサーバーは大量のファイルデータの安定した保存とアクセスを提供しますが、データベースサーバーほどの複雑なデータ操作は行いません。

## データベースサーバーとファイルサーバーの使用例

### データベースサーバーの使用例

- **顧客管理システム**：顧客情報や取引履歴などを管理し、効率的な顧客対応を支援。
- **在庫管理システム**：在庫データをリアルタイムで追跡し、在庫の最適化を図る。

### ファイルサーバーの使用例

- **ドキュメント共有**：企業内の文書やプレゼンテーション資料を安全に共有。
- **メディアファイルの管理**：ビデオ、画像などのメディアファイルを中央で管理し、アクセスを容易にする。

## まとめ

データベースサーバーとファイルサーバーは、それぞれ異なる種類のデータを扱うために特化したサーバーです。データベースサーバーは構造化されたデータの管理と複雑なデータ操作に適しており、ファイルサーバーはファイルの保存と共有に最適化されています。これらの違いを理解することで、ビジネスのニーズに合わせた適切なサーバーの選択が可能となります。データの種類や必要な処理、使用目的に基づいて、どちらのサーバーが最適かを判断することが重要です。
Quarkusのチュートリアルで少しつまづいた話

# つまづいたこと

Quarkus公式の[Get Started](https://quarkus.io/get-started/)の通りに進めてLAN内サーバの`localhost:8080`にデプロイしたが、クライアントマシンのブラウザから`サーバのIP:8080`でアクセスできない。

# 結論

`src/main/resources/application.properties`に以下を記載する。
```
quarkus.http.host=0.0.0.0
```
以上。

# 原因

参考にした[stackoverflow](https://stackoverflow.com/questions/55043764/how-to-make-quarkus-to-listen-on-all-network-interfaces-instead-of-localhost)の記事によると、Quarkusはデフォルトではループバックアドレスの`127.0.0.1`しか受け付けていないらしい。

`src/main/resources/application.properties`修正前
```
$ lsof -i -P -n | grep LISTEN | grep java
java    27494 tabatad  118u  IPv4 177935      0t0  TCP 127.0.0.1:5005 (LISTEN)
java    27494 tabatad  347u  IPv6 181013      0t0  TCP 127.0.0.1:8080 (LISTEN)
```

`src/main/resources/application.properties`修正後
```
$ lsof -i -P -n | grep LISTEN | grep java
java    28956 tabatad  118u  IPv4 162438      0t0  TCP 127.0.0.1:5005 (LISTEN)
java    28956 tabatad  347u  IPv6 187165      0t0  TCP *:8080 (LISTEN)
```
あらゆるIPで受け付けるように変更できている。
アプリケーションサーバーとウェブサーバーの違い

# アプリケーションサーバーとウェブサーバーの違い：初心者向けガイド

ウェブサービスの背後にある技術を理解する上で、アプリケーションサーバーとウェブサーバーの違いを把握することは非常に重要です。これら二つのサーバータイプは、インターネット上での情報の処理と提供において異なる役割を果たします。初心者にも分かりやすく、それぞれの特徴と機能の違いについて解説します。

## アプリケーションサーバーの役割

### ビジネスロジックの処理

アプリケーションサーバーの主な役割は、ビジネスロジックの処理です。これは、ユーザーからのリクエストに基づいて複雑な計算やデータベースの操作を行い、その結果をユーザーに返すというものです。アプリケーションサーバーは、特にデータベースとの連携が密であり、情報の取得や更新を効率的に行います。

### アプリケーションの実行環境

アプリケーションサーバーは、さまざまなアプリケーションが実行される環境を提供します。例えば、Java EEアプリケーション、.NETアプリケーションなど、様々なプログラミング言語で書かれたアプリケーションの実行をサポートします。

## ウェブサーバーの役割

### 静的コンテンツの提供

ウェブサーバーの主な機能は、静的コンテンツ（HTMLファイル、CSSファイル、画像ファイルなど）の提供です。ウェブサーバーは、ユーザーのブラウザからのリクエストに応じて、対応するファイルを探し出し、インターネットを介して送信します。

### HTTP通信の管理

ウェブサーバーは、HTTP（Hypertext Transfer Protocol）を使用して、ウェブページのリクエストと応答を管理します。これにより、ウェブブラウザとサーバー間の通信が可能になります。

## アプリケーションサーバーとウェブサーバーの連携

アプリケーションサーバーとウェブサーバーはしばしば連携して動作します。ウェブサーバーは静的コンテンツの提供を担当し、複雑なリクエストがあった場合にはアプリケーションサーバーに処理を委ねます。例えば、フォームに入力されたデータを処理する場合、ウェブサーバーはそのリクエストをアプリケーションサーバーに転送し、アプリケーションサーバーは必要な処理を行い結果をウェブサーバーに返します。その後、ウェブサーバーはその結果をユーザーのブラウザに送信します。

## まとめ

アプリケーションサーバーとウェブサーバーは、共にインターネット上での情報提

供において重要な役割を担いますが、その機能と役割は明確に異なります。ウェブサーバーは主に静的コンテンツの提供を担当し、アプリケーションサーバーは複雑なビジネスロジックの処理を行います。これらの違いを理解することは、ウェブサービスの仕組みを理解する上で不可欠です。また、これらがどのように連携して機能するかを知ることで、より複雑なウェブベースのアプリケーションの理解につながるでしょう。
サーバーの種類と特徴：初心者向け解説

# サーバーの種類と特徴：初心者向け解説

サーバーは、データの処理や管理、提供を行うシステムですが、その役割や用途によっていくつかの種類に分けられます。ここでは、アプリケーションサーバー、ウェブサーバー、データベースサーバー、ファイルサーバー、プロキシサーバーの特徴と、これらがどのように連携して機能するのかを初心者にも分かりやすく解説します。

## アプリケーションサーバー

### ソフトウェアアプリケーションの実行

アプリケーションサーバーは、ユーザーのリクエストに応じてビジネスロジックを処理するサーバーです。クライアントからの要求を受け、データベースサーバーと連携してデータの取得や更新を行い、結果をクライアントに返します。これにより、アプリケーションの処理を効率的に行うことができます。

## ウェブサーバー

### HTTPを通じたコンテンツの提供

ウェブサーバーは、インターネットを介してウェブページや画像、ビデオなどの静的コンテンツを提供するサーバーです。ユーザーがウェブブラウザでURLを入力すると、ウェブサーバーは対応するファイルを探し、ブラウザに送信します。これが、我々がウェブサイトを閲覧する基本的な仕組みです。

## データベースサーバー

### データの集中管理

データベースサーバーは、さまざまなデータを効率的に管理、保存するためのサーバーです。ビジネスデータ、顧客情報、トランザクション記録などを格納し、アプリケーションサーバーからのリクエストに基づいてデータを検索、変更、削除します。

## ファイルサーバー

### ファイルの保存と共有

ファイルサーバーは、ネットワーク上でのファイルの保存と共有を行うサーバーです。ユーザーやグループ毎にアクセス権限を設定することで、必要なファイルを安全に共有することができます。ビジネス環境においては、文書やプロジェクトファイルの管理に不可欠です。

## プロキシサーバー

### インターネットアクセスの中継と制御

プロキシサーバーは、クライアントとインターネットの間に位置し、ユーザーのリクエストを代理で処理するサーバーです。セキュリティの強化、アクセス制御、キャッシュ機能によるアクセス速度の向上など、多くの利点があります。

## サーバー間の結び付き

これらのサーバーは、一般的なビジネス環境において互いに連携し、効率的な情報処理を実現します。例えば、ウェブサイト

でフォームに入力されたデータはアプリケーションサーバーを通じて処理され、データベースサーバーで保存されます。ファイルサーバーは必要な文書やデータの取得に使われ、プロキシサーバーはこれらのサーバーへの安全なアクセスを提供します。

## まとめ

サーバーの種類と特徴を理解することは、現代のビジネス環境において非常に重要です。アプリケーションサーバー、ウェブサーバー、データベースサーバー、ファイルサーバー、プロキシサーバーは、それぞれ特定の役割を果たしつつも、互いに連携して全体としてのシステムの効率と安全性を高めています。これらの基本を理解することで、より複雑なITシステムの理解へと進むことができるでしょう。
【Reactアプリ100本ノック】05 Calc

![bandicam 2023-11-11 07-10-11-363.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/32caf0b1-8f32-28a1-7c38-c892468afa1f.jpeg)

# はじめに

<h3>こんにちは！！@Sicut_studyです！</h3>

https://qiita.com/Sicut_study/items/78910cd8d103b8d45a73

こちらの記事が嬉しいことに多くの方に見ていただきました。
そこで**React**が多くの初心者の方に注目されているんだなということを実感させられました。

私の記事では何度も言っている通り

<font color="red"><h4>最速で学ぶならとにかく何か作る</h4></font>

というのが大事になってきます。そこで **「Reactアプリ100本ノック」** というのに挑戦していこうかと思います。徐々に難易度を挙げていってどこまでお題を作りきれるかの腕試しでやっていただければと思います。

今回は簡易的な計算機を作っていきます！そろそろ難しくなってきていますがついてきてください！

# 前回のお題

https://qiita.com/Sicut_study/items/1e4d8ec06f1af42a47e5

# Reactアプリ100本ノックルール

- 主要なライブラリやフレームワークはReactである必要がありますが、その他のツールやライブラリ（例: Redux, Next.js, Styled Componentsなど）を組み合わせて使用することは自由
- TypeScriptを利用する
- 要件をみたせばデザインなどは自由

# 05. Calc

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/ca4a131d-5872-a83f-8502-ebd13165abbe.png)


## 問題

簡易的な電卓を作成します

## 目的

計算機の機能を実装する過程で、条件付きレンダリングや複雑なビジネスロジックの処理に対する理解を深めることができます。
また、 様々な機能を持つ小さなコンポーントを作成し、それらを組み合わせて大きなアプリケーションを構築することで、効果的なコンポーネント設計とコードの再利用性について学習することができます

## 達成条件

- 四則演算（加算、減算、乗算、除算）が正確に行えること。
- 数字と演算子の入力が可能で、計算結果が表示されること。
- クリアボタンで入力と結果をリセットできること。
- 連続した数字入力など計算ができないときはエラーを表示する

## 実際に解いてみた

### 利用技術

- React
- TypeScript
- Vite
- Emotion

解答時間 : 1時間

基本的な流れは普段と変わらなかったが以下の2点を実装するのにすこし苦戦した

- 配列をうまく使って計算を行う(evalは使わない)
- 小数点の計算をどう行っていくか

小数点は今回「.」というボタンでできるようにしたので、「.」と他の演算子の区別をつける必要があったのでそこの実装を工夫してみました

|　　　　　　　　  　　　　　　　　   　　　　　　　　　　　　　　　　　　　　　|
|:-:|
|![Peek 2023-11-15 21-29.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/1faf7c54-a82a-8ee9-6cad-927d9df0e418.gif)

# 次のお題

https://qiita.com/Sicut_study/items/ccfc451360d3f22bde63

# おわりに

React100本ノックの記事を地道に上げていこうと思いますので、一緒に挑戦したい方は @Sicut_study をフォローいただけるととてもうれしく思います。
ここまで読んでいただけた方はぜひ**いいね**と**ストック**よろしくお願いします。

<h5>少し宣伝します🔥🔥🔥🔥🔥</h5>

これからエンジニアになろうとしている人を本気でコーチングして3か月の期間で立派なエンジニアにするようなチャレンジをしてみたいなと考えております。

もし、本気でエンジニアを目指してコーチングを受けてみたいという方がいれば、[Twitter](https://twitter.com/Sicut_study)に「プログラミング教えてほしいです」みたいなリプライ送っていただけたらなと思います！！

以上です。
今週もプログラミング頑張りましょう！

![bandicam 2023-10-04 20-58-54-525.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/f41a0065-b23e-1895-da22-66bf0e48c5fb.jpeg)
Nuxt3で変な動きをすると思ったらconfigの設定が間違っていた件

## 結論
SSRで作るのか否かちゃんと確認してnuxt.configを書こうという話。
私はSPAで作ろうとしていました。

## 何が起きたか
Nuxt3で試しにアプリケーション作ろうと思って簡単なページを作りました。

### 主に使ったもの

- node 18.17
- nuxt 3.6.5
- vuetify 3.3.11

こんな感じのめちゃくちゃシンプルなコード。

```vue:app.vue
<script setup lang="ts">
</script>

<template>
  <NuxtLayout>
    <NuxtPage />
  </NuxtLayout>
</template>
```

```vue:layout/default.vue
<script setup lang="ts">
</script>

<template>
  <v-layout>
    <Header />
    <v-main>
      <NuxtPage />
    </v-main>
  </v-layout>
</template>

<style scoped>
</style>
```

```vue:components/header.vue
<script setup lang="ts">
</script>

<template>
  <v-app-bar>
    <v-app-bar-title>example</v-app-bar-title>
  </v-app-bar>
</template>

<style scoped>
</style>
```

```vue:pages/index.vue
<template>
  example
</template>
```

いざ動作確認！したらなぜか初期表示がおかしい。

![画面収録 2023-11-14 19.58.29.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58841/9b508013-1133-9cd9-a202-2497ae7effe1.gif)

**何だこれ**

なんかコンテンツ部分がヘッダーに隠れて描写された後然るべき場所に移動しているように見える。

## 原因
色々調べてみたところ、どうやらnuxt.config.tsの設定が足りなかったよう。

```diff_typescript:nuxt.config.ts
export default defineNuxtConfig({
+ ssr: false,
```

`ssr: false`を追加したらnuxtのローディング画面を挟んだ後にちゃんとしたレイアウトで表示された。

SPAで作っているつもりだったがSSRで設定されていたための様子。詳しくは調べていないがSSRで作るなら別途対処が必要なよう。

フロントエンドは素人なのでまた一つ勉強になりました。
SaaS、PaaS、IaaSの違い：初心者向け解説

# SaaS、PaaS、IaaSの違い：初心者向け解説

クラウドサービスには、SaaS（Software as a Service）、PaaS（Platform as a Service）、IaaS（Infrastructure as a Service）の三つの主要なカテゴリがあります。これらのサービスは、企業が必要とするITリソースを提供する方法において異なります。初心者にも分かりやすいように、それぞれのカテゴリと具体例を用いて解説します。

## SaaS（Software as a Service）

### ソフトウェアの提供

SaaSは、インターネットを通じてアプリケーションを提供するサービスです。ユーザーは、ブラウザやアプリを通じてソフトウェアにアクセスし、サービス提供者が管理・運用を担います。これにより、ユーザーはソフトウェアのインストールやメンテナンスの必要がなくなります。

#### 具体例

- **Google Workspace（旧 G Suite）**
  - 文書作成、スプレッドシート、プレゼンテーションなどのオフィスツールを提供。
- **Salesforce**
  - 顧客関係管理（CRM）ツールとして、顧客データの管理や分析を行う。

## PaaS（Platform as a Service）

### プラットフォームの提供

PaaSは、アプリケーションの開発・実行に必要なプラットフォームを提供するサービスです。サーバー、ストレージ、ネットワーキングといった基本的なインフラに加えて、開発ツール、データベース管理システム、ミドルウェアなどが含まれます。開発者は、アプリケーションのコードの開発に集中できます。

#### 具体例

- **Heroku**
  - ウェブアプリケーションの開発に必要なツールやサービスを提供。
- **Microsoft Azure**
  - 広範囲の開発ツールとサービスを提供し、多様なアプリケーション開発を支援。

## IaaS（Infrastructure as a Service）

### インフラストラクチャの提供

IaaSは、インターネットを介してコンピューティングインフラ（サーバー、ストレージ、ネットワーキング）を提供するサービスです。ユーザーはこれらのリソースをオンデマンドでレンタルし、自分のニーズに合わせて設定・管理します。IaaSは最も基本的なクラウドサービスで、高い柔軟性と制御を提供します。

#### 具体例

- **Amazon Web Services（AWS）**
  - 豊富なインフラストラクチャサービスを提供し、さまざまなビジネスニーズに対応。
- **Google Cloud Platform（GCP）**
  - コンピューティング、ストレージ、ネットワーキングなどのインフラストラクチャサービスを提供し、企業のITニーズに応じた柔軟な構成が可能。

## まとめ

- **SaaS**は、ソフトウェアをインターネット経由で提供し、インストールやメンテナンスの手間を省きます。利用者はアプリケーションの使用に集中できます。
- **PaaS**は、アプリケーションの開発・運用に必要なプラットフォームを提供し、開発者はアプリケーションのコード開発に集中できる環境を提供します。
- **IaaS**は、基本的なインフラストラクチャ（サーバー、ストレージ、ネットワーキング）を提供し、ユーザーはこれらのリソースを自由に設定・管理できます。

このように、SaaS、PaaS、IaaSはそれぞれ異なるニーズに対応するクラウドサービスとして機能しています。ビジネスの要件に応じて適切なサービスモデルを選択することで、効率的かつ効果的なIT戦略を実行することが可能です。初心者の方にも、これらの基本的な違いを理解することが、クラウドサービスの世界をより深く理解する第一歩となるでしょう。
JavaSilverの試験で多分問われない演算子の話②

# はじめに
前回の記事

https://qiita.com/hiroki1994/items/ab95ecdaf3a20cac9615


に続き本記事では「&,|,^」といったビット演算子、三項演算子「?:」について紹介します。



# ビット演算子「&」「|」「^」



### ①「&」
**論理積(AND)** を取ります。
a=1100、b=0101の場合下記の図のように、
論理積なのでab両方1の桁は1に。
それ以外の桁は、両方0もしくは片方が0なので0になります。

|     |4桁目|3桁目|2桁目|1桁目|
|:-:|:-:|:-:|:-:|:-:|
|a|1|1|0|0|
|b|0|1|0|1|
|a & b|0|1|0|0|


こちらを実際のプログラムで見てみましょう。
```java:And1.java
public class And1
{
    public static void main( String[] args )
    {
		int a = 12; // 2進数 : 1100
		int b = 5; // 2進数 : 0101

		System.out.println("a & b ：" + String.format("%4s", Integer.toBinaryString(a & b)).replace(" ", "0"));

}
```

```ターミナル:実行結果
a & b ：0100
```

### ②「|」
**論理和(or)** を取ります。
a=1100、b=0101の場合下記の図のように、
論理和なのでab両方1の桁はもちろん、片方が1の桁も1になります。
両方0の桁は0になります。



|     |4桁目|3桁目|2桁目|1桁目|
|:-:|:-:|:-:|:-:|:-:|
|a|1|1|0|0|
|b|0|1|0|1|
|a \| b|1|1|0|1|

こちらを実際のプログラムで見てみましょう。
```java:Or1.java
public class Or1
{
    public static void main( String[] args )
    {
		int a = 12; // 2進数 : 1100
		int b = 5; // 2進数 : 0101

		System.out.println("a | b ：" + String.format("%4s", Integer.toBinaryString(a | b)).replace(" ", "0"));

}
```

```ターミナル:実行結果
a | b ：1101
```

### ③「^」
**排他的論理和(xor)** を取ります。
a=1100、b=0101の場合下記の図のように、
排他的論理和なので片方が1の桁は1になります。
ab両方1の桁、両方0の桁は0になります。


|     |4桁目|3桁目|2桁目|1桁目|
|:-:|:-:|:-:|:-:|:-:|
|a|1|1|0|0|
|b|0|1|0|1|
|a ^ b|1|0|0|1|

こちらを実際のプログラムで見てみましょう。
```java:Xor1.java
public class Xor1
{
    public static void main( String[] args )
    {
		int a = 12; // 2進数 : 1100
		int b = 5; // 2進数 : 0101

		System.out.println("a ^ b ：" + String.format("%4s", Integer.toBinaryString(a ^ b)).replace(" ", "0"));

}
```

```ターミナル:実行結果
a ^ b ：1001
```
# 三項演算子「?:」
条件式の真偽に応じてそれぞれ異なる値を返す演算子です。

下記の書式で記述します。

**条件式 ? 値1 : 値2**

条件式がtrueの場合は**値1**が、falseの場合は**値2**が返されます。

実際の例でみていきましょう。

scoreが60より大きい場合、「合格」と表示され、
そうでない場合「不合格」と表示されます。

今回scoreは76なので、コンソールには「合格」と表示されます。


```java:ternary.java
import java.util.*;

public class ternary {
    public static void main(String[] args) throws Exception {

        int score = 76;
        
        String result = score > 60 ? "合格" : "不合格";
        
        System.out.println(result);
    }
}
```

```ターミナル:実行結果
合格
```

読んでいただきありがとうございます。
次回③では「&=,|=,^=,<<=,>>=,>>>=」といった代入演算子について紹介します。(執筆中)
Amazon DynamoDBでcsvをExport/Importする方法

こんにちは。

Amazon DynamoDB上のテーブルからcsvをExport、またはImportする方法について調べたのでいくつか方法をまとめました。

## Export
### コンソールの利用
DynamoDBの管理画面からCSVをダウンロードすることができる。仕様として**画面に表示されている項目しか出力できない（最大100件）**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552758/5d16db4a-2e12-cb73-a4f1-55a2ae797edd.png)

### AWS CLI等の利用
AWS CLI（AWS SDK）でテーブルをスキャンしcsv形式で出力するコードを自作する。
```bash
aws dynamodb scan --table-name test | jq -r '.Items[] | [.id.N, .name.S, .flg.BOOL] | @csv' >> test.csv
```

### Amazon AthenaのFederated Queryの利用

Amazon AthenaではFederated Queryを利用することでS3以外のデータソースに対してクエリをかけることができる。また、Athenaのクエリ結果はS3にcsv形式で保存される。これを利用してDynamoDBに対してクエリを発行することでcsvをExportできる。
- 参考：[Amazon Athenaのフェデレーテッドクエリを使ってDynamoDBのデータをReactからCSV出力する - Zenn](https://zenn.dev/briete/articles/7c46762d115006)

### awslabs/dyneinの利用
Importの章で後述

### AWS DataPipelineの利用
出来るが使いどころは限られる印象。

## Import
### S3からの一括インポート
[S3上のcsvを一括インポートする機能](https://aws.amazon.com/jp/blogs/news/amazon-dynamodb-can-now-import-amazon-s3-data-into-a-new-table-jp/)を利用する。Partition KeyとSort Keyはインポート時に指定した型で、それ以外はString型で取り込まれる。なお、**既存のテーブルへはImport不可**という制限がある。

### AWS CLI等の利用
自作はできるが手間がかかる。例えばAWS CLIの[batch-write-item](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/dynamodb/batch-write-item.html)を利用する場合、引数として**csvをそのまま渡せないのでDynamoDB JSON形式に変換する必要がある**。さらに**一度に最大25件までのデータまでしか投入できない**。それ以上のデータを投入したい場合はファイルを分割する必要がある。

[put-item](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)を利用する場合、1件1件書き込む都合上Itemの件数が多い場合`batch-write-item`と比較して時間がかかる。


### 「Amazon DynamoDB への CSV 一括取り込みの実装」の利用
AWSで紹介されているソリューション「[Amazon DynamoDB への CSV 一括取り込みの実装](https://aws.amazon.com/jp/blogs/news/implementing-bulk-csv-ingestion-to-amazon-dynamodb/)」を利用する。CloudFormationを実行後、パラメーターで指定したS3のパスにcsvを配置すると、指定のテーブルにデータをImportしてくれる。こちらは既存のテーブルへImport可能。

### awslabs/dyneinの利用

awslabsから提供されている[dynein](https://github.com/awslabs/dynein)というRustで記述されたCLIツールを利用する。以下のような感じでImportできる。ExportもImportと同じような感じでできる。
- 参考: [DynamoDBで既存テーブルへExport/ImportするならDynein - Zenn](https://zenn.dev/watany/articles/c0a05d9c8f12f5)

```bash
# Import
$ dy import --table test --format csv --input-file test.csv

# Export
$ dy export --table test --output-file out.csv --format csv 
```

### AWS DataPipelineの使用

出来るが使いどころは限られる印象。

## おわり
お読みいただきありがとうございました！（re:Inventで既存テーブルにcsvをImportする機能来ないかな。）
【PHP】if($a == 1) と if(1 == $a) って何が違うの？

PHP の if 文の条件式の記述方法で、バグ対策になるような書き方があったので記事にしたいと思います。

例えば、以下のような2つのコード例があるとします。

```php:例１のコード
$a = 2;
if($a == 1){
  echo "one";
}else{
  echo "not one";
}
```

```php:例２のコード
$a = 2;
if(1 == $a){
  echo "one";
}else{
  echo "not one";
}
```

上記の2つのコード例を見て分かるように、違いがあるのは **条件式の変数と定数の順序** だけです。出力される内容に変化はありません（`not one` と出力されるはずです）。

「じゃあ、２つのどちらの例でも一緒なら、別にどちらの条件式で記述しても良いじゃん！」と思うところですが、**条件式の誤り** を防ぐ役割を含めた書き方をする場合では「例２のコード」が良いかもしれません。

### もし間違って「==」を「=」と書いたら…

少し極端なケースですが、**上記の２つのコード例の条件式で使用されている「==」を「=」と書き間違えてしまった場合** はどうなるでしょうか？

```php:例１のコード（記述ミス有）
$a = 2;
if($a = 1){
  echo "one";
}else{
  echo "not one";
}
```

```php:例２のコード（記述ミス有）
$a = 2;
if(1 = $a){
  echo "one";
}else{
  echo "not one";
}
```

上記例のように「==」を「=」と書き間違えてしまった場合、「例１のコード（記述ミス有）」は代入演算子（=）の評価結果が「1」となり条件は「true」となります。つまり「one」がそのまま表示されてしまいます。

一方、「例２のコード（記述ミス有）」の場合、条件式で記述されている `if(1 = $a)` という書き方は PHP の文法的には無効であるためエラーが発生します。`PHP Parse error: Syntax error, unexpected '=' on line 2` のようなエラー文が表示されると思います。

このように、**条件式の変数と定数の順序によって、構文の誤りに気付きやすくなる、かもしれない** というメモでした。
Unityで横スクロールゲームの敵タイプ別自動生成

##### Unityで横スクロールゲームの敵タイプ別自動生成
##### EnemySpawn.cs
```
public class EnemySpawn : MonoBehaviour
{
    [SerializeField] List<EnemyCount> enemyCounts;

    private List<GameObject> spawnedEnemies = new List<GameObject>();   // 生成済みの敵のリスト

    private void Start()
    {
        // 初期配置
        SpawnEnemies();
    }

    private void SpawnEnemies()
    {
        for (int i = 0; i <= 1; i++)
        {
            EnemyGenerator(enemyCounts[i]);
        }
    }

    private void EnemyGenerator(EnemyCount data)
    {
        if (data.isSpawn)
        {
            foreach (Vector3 p in data.pos)
            {
                // 敵を生成してリストに追加する
                GameObject enemyObj = Instantiate(data.enemyPrefabs, p, Quaternion.identity);
                spawnedEnemies.Add(enemyObj);
                enemyObj.SetActive(true);
            }
        }
    }


    public void SpawnEnemy()
    {
        SpawnEnemies();
    }

    public List<GameObject> GetSpawnedEnemies()
    {
        return spawnedEnemies;
    }
}

[System.Serializable]
public class EnemyCount
{
    public enum ENEMY
    {
        Enemy1,
        Enemy2,
        Enemy3,
        Enemy4,
        Enemy5,
        Enemy6,
        // これがラベルになる
    }

    public ENEMY enemy;
    public List<Vector3> pos;
    public GameObject enemyPrefabs;
    public bool isSpawn;
}
```
こちらのスクリプトでは敵キャラクタを自動生成するのに役立ちます。
EnemySpawnクラス外のEnemyCountクラスでは敵タイプ、座標、プレハブ、生成数を管理できます。
### 修正版ではbool型変数を追加してインスペクターからチェックをオンオフすることで生成するかしないかを管理できます。
terraform コマンド一覧

## コマンド

- バージョン確認
```bash
terraform -v
```

- 初期化
※一番最初に実施
```terraform
terraform init
```

- ワークスペース一覧の表示
```terraform
terraform workspace list
```

- ワークスペースの切替
```terraform
terraform workspace select "workspace_name"
```

- 新しいワークスペースの作成
```terraform
terraform workspace new new_workspace_name
```

- 現在のワークスペースを表示
```terraform
terraform workspace show
```

- コードのフォーマット調整
```terraform
terraform fmt
```

- リソース確認
```terraform
terraform plan
```

- 特定のリソース確認
```terraform
terraform plan -target=リソース名
```

- 適用
```terraform
terraform apply
```

## さいごに
現在terraform勉強中
まだまだ追加予定です…
単回帰分析やってみた

# 単回帰分析やってみた

この記事では、単回帰分析をやってみます。

## データの生成

まず、ランダムなデータを生成して単回帰分析を行います。以下はPythonコードの一部です。

```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# データ生成
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
```
$X$は、、
$[0,1]$の範囲で生成された$(100,1)$の形状をしている乱数が2倍されて、$[0,2]$の範囲の乱数が100個生成されています。
$y$は、、
$y=4+3x$に従うように生成されています。ノイズが加えられています。

# データの可視化
生成したデータを散布図で可視化します。
```
# データ可視化
plt.scatter(X, y, alpha=0.7)
plt.xlabel('X')
plt.ylabel('y')
plt.title('Scatter Plot of Sample Data')
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3363684/fcd81ec5-6ac5-6321-4384-ece66d43a2e0.png)

# データの分割とモデル構築
データを訓練データとテストデータに分割し、単回帰モデルを構築します。
```
# データ分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 単回帰モデルの構築と訓練
model = LinearRegression()
model.fit(X_train, y_train)
```
# モデルの評価と予測結果の可視化
訓練データとテストデータに対する予測結果を可視化し、モデルの評価を行います。
```
# 予測
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)

# 訓練データと予測結果の可視化
plt.scatter(X_train, y_train, alpha=0.7, label='Actual (Training)')
plt.plot(X_train, y_train_pred, color='red', label='Predicted')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Training Data and Predictions')
plt.legend()
plt.show()
```
訓練データに対するフィッティングは以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3363684/bdb7c8f6-2ade-5dcc-4bca-68efa1bfaefe.png)
AndroidStudio: ログメッセージの出し方

次のページを参考にしました。
[logcat を使用してログを書き込み、表示する](https://developer.android.com/studio/debug/am-logcat?hl=ja)

次のログメソッドがあります。
>エラー: Log.e(String, String)
>警告: Log.w(String, String)
>情報: Log.i(String, String)
>デバッグ: Log.d(String, String)
>詳細: Log.v(String, String)

## プログラム

```MainActivity.kt
package com.example.log01

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

private const val TAG = "MyActivity"
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val aa = 123
        val bb = 345
        val cc = aa + bb

        Log.i(TAG, "*** onCreate *** aa = $aa")
        Log.i(TAG, "*** onCreate *** bb = $bb")
        Log.i(TAG, "*** onCreate *** cc = $cc")

    }
}
```

## 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/43b3265b-c62f-c4b4-7e9d-030f8a285729.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/579d6494-f72c-e9c6-a898-044233ccdd65.png)
クラウドのメリットとオンプレミスとの違い

# クラウドのメリットとオンプレミスとの違い

オンプレミス（on-premise）とクラウドは、データとアプリケーションの管理方法に関して大きく異なる二つのアプローチです。これらの違いを理解することは、ビジネスのIT戦略を立てる上で非常に重要です。本ブログでは、特に初心者にも理解しやすいように、この二つの違いと、クラウドの利点に焦点を当てて解説します。

## オンプレミスとは？

### 基本的な概念

オンプレミスは、企業が自身の物理的な場所にサーバーやデータセンターを持ち、自ら管理・運用する方式を指します。この方式では、ハードウェアの購入、設置、メンテナンスなどすべてを自社で行う必要があります。オンプレミスの最大の特徴は、管理の自由度が高いことですが、それには高いコストと専門的な技術が必要になります。

## クラウドとは？

### 新時代のデータ管理

クラウドは、インターネットを通じてサーバー、ストレージ、データベース、ネットワーキング、ソフトウェアなどのコンピューティングリソースを提供するサービスです。このサービスを利用することで、物理的なハードウェアの設置や維持管理の必要がなくなります。クラウドは柔軟性と拡張性が高く、利用するリソースに応じて料金を支払うため、コスト効率が良いとされています。

### クラウドの主な利点

1. **データセンターの維持管理費用が不要**
   - 物理的なインフラの維持に関連するコストが削減されます。

2. **スピードと俊敏性が向上**
   - クラウドサービスでは、新しいサーバーの設置やスケールアップが迅速に行えます。

3. **キャパシティーの予測が不要**
   - 需要に応じてリソースを柔軟に調整できるため、事前の大規模なキャパシティプランニングが不要になります。

4. **資本支出を変動支出に切り替える**
   - 初期投資が少なく、使用した分だけの料金を支払うため、予算管理がしやすくなります。

5. **圧倒的なスケールメリット**
   - 同じクラウドサービスの利用者が増えるに連れて、利用料金が値下げされます。

6. **数分で世界中にデプロイできる**
   - クラウドを利用することで、地理的な制約なくアプリケーションを展開することが可能になります。

## まとめ

オンプレミスとクラウドは、それぞれにメリットとデメリットがあります。オンプレミスは自由度が高い反面、高コストと専門知識が必要です。一方で、クラウドは柔軟性とコスト効率の高さが魅

力です。これらの違いを理解し、自社のニーズに最適な選択をすることが重要です。特にクラウドは、そのスケールメリットと迅速なデプロイ能力により、多くの企業にとって魅力的な選択肢となっています。