OmniAICreator/Qiita-1.07M huggingface dataset:
Pythonエンジニア認定基礎　受験記録

先日Pythonエンジニア認定基礎を受験してきました。
自分の記録のため、勉強期間や資料などを記載しておこうかと思います。
[Python 3 エンジニア認定基礎試験](https://cbt.odyssey-com.co.jp/pythonic-exam/python3basic.html)

## 結果

合格！
とりあえず11000円が無駄にならなかったことがうれしい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780076/9335b88f-057b-6de0-2185-a6eed7075f68.png)

## 受験の動機

アサインされていた案件が終了し、次が決まらず待機になったので、何か勉強しておこう、ついでに次の面接でプラスになりそうなものを、と思ったことが一番の動機です。
Pythonには興味津々だったものの実務経験がないので、どの程度使えるかの目安になれば未経験でもチャンスないかな？と思ったことがきっかけです。

## 勉強前の予備知識とスキルレベル

Pythonは未経験。実務経験がHTML、JavaScriptとVBA、SQLとBI。

## 勉強期間と使ったツール

### 期間：2週間
他言語とfor文やwhile文など、基本的な使い方は変わらないだろうと予想し、1週間で大丈夫かな、余裕を見て2週間にしておくか、と勉強を始める前に**2週間**後の日程で先に受験を申し込みしました。期間が長くなると、勉強に飽きるか、先に次の案件が決まると勉強しない言い訳を自分にしそうな気がしたので。

### 勉強に使ったツール

* [公式ドキュメント　v.3.9](https://docs.python.org/ja/3.9/tutorial/index.html)
* Youtube
　[Python基礎文法入門（Python3エンジニア認定基礎試験 絶対合格の講座）](https://www.youtube.com/playlist?list=PLHPmh91LsTgyDBFW2XIXZG2BvV6QXilEg)
* 模擬試験
　[ExamApp](https://python-basic.com/)
　[ディープロ EXAM](https://diver.diveintocode.jp/dive_into_exam/lp)
　[PRIME STUDY](https://study.prime-strategy.co.jp/)
 * 実行環境　google colaboratory

 
    公式ドキュメントは書籍を買わず、WEB版で。リンクにすぐジャンプできるのと、検索ができるのでWEBのほうが便利かと思ったので。WEBのほうが新しいバージョンなので、試験の認定テキストに合わせたバージョンを確認。

    公式ドキュメントの説明でよくわからなかった部分は、Youtubeの説明を視聴しました。基礎試験の内容を詳しく解説してくれていて、大変わかりやすかったです。ありがたい。

    模擬試験は認定模擬問題2つとExamApp。PRIME STUDYが一番難しく、実は本番の受験日までに一度も合格点がとれませんでした……

     一応、自PCに環境設定後VSCodeで実行したものの、書いたり消したりちょっとだけ動かしたりが面倒になってきたため、最終的にgoogle colaboratoryで動作確認。

## 受験にあたって注意したこと

模擬試験をやっていて、見直しをせずに出して間違っていたことが多かったので、本番ではじっくり見直しをするように気を付けました。実際の試験は60分ですが普通に所要時間15分ほどで終わるので、見直し時間はたっぷりです。模擬試験で自分がよくしたミスは、式の中身だけチラ見してタプルを選んだつもりが中身が同じだがリストで記載されているものを選んでいたりとかでしょうか。ループにループが入ってる時など、ただの足し算間違いなどで間違えないように、本番ではじっくり見直し時間を取りました。

## 受けて良かったこと

あまりよくわかってないところが明確になったと思いました。（試験結果からみても、クラスについての理解が浅い）説明を見て、分かったような気になっていただけだったなぁと。あと、資格という形で勉強したことが自分の中に残ったことがちょっとうれしかったです。

## 今後の目標

基礎認定では、すぐに仕事Getに反映するかと言われれば微妙ですが、Python使えるとスキルが上がる＝仕事のチャンスが増えるかな、と思っています。次は統計検定かデータ分析で資格を取っていこうかと思います。
将来的には、データ分析方面に行きたいので、今後もスキルアップを目指していきます！
【Linux】役に立つかも？なLinuxコマンド

## まえがき
　これまで業務でLinuxコマンドを使用して作業することが多々あったのですが、
 Linuxについて深く学んだこともなく、この期にLPIC LEVEL1(101,102)を取得しようと勉強しました。
 その中で **「このコマンドは今後使いそうだな。」
 「少しでも覚えておけば役に立ちそうだな。」**
 と思ったものを経験も含め書き残します。

　基本的なコマンドばかりなので初めて業務をされる方、Linuxをこれから触る方などのご参考になれば嬉しいです。

<br>
<br>

## 役に立つかもしれないLinuxコマンド一覧
|コマンド|オプション例|説明|
|---|---|---|
|ls|<details><summary>オプション表示</summary>-l：詳細情報の表示<br>-a：隠しファイルも含めて全て表示<br>-R：サブディレクトリの中身も全て表示<br>-1：縦一列で表示</details>|ファイルの確認|
|cd  |<details><summary>オプション表示</summary>パス：指定したパスのディレクトリへ移動<br>未指定 ,~ ,$HOME：自身のホームディレクトリに移動<br>.：現在のディレクトリに移動<br>..：現在のディレクトリから1つ上のディレクトリに移動<br>/：最上位のディレクトリに移動</details>|別のディレクトリへの移動|
|mv  |<details><summary>オプション表示</summary>-i：上書き前に確認する<br>-b：移動先に同名のファイルがあれば、バックアップを取ってから上書きする<br>-f：移動先に同名のファイルがあれば、強制的に上書きする<br>-n：移動先に同名のファイル(ディレクトリ)があったら上書きしない<br>-v：処理の詳細情報を表示する</details>|ファイルやディレクトリを移動、名前の変更|
|cp  |<details><summary>オプション表示</summary>-i(--interactive)：上書きする前に確認<br>-n(--no-clobber)：存在するファイルを上書きしない<br>-f(	--force)：強制的に上書きする<br>-R,-r(--recursive)：コピー元にディレクトリを指定した場合、再帰的に（サブディレクトリも含めて）コピーする<br>-a(--archive)：サブディレクトリや属性なども含め、可能な限り全てを保持しながらコピーする</details>|ファイルをコピーする|
|mkdir  |<details><summary>オプション表示</summary>-m：作成するディレクトリのパーミッションを設定する<br>-p(--parents)：必要に応じて親ディレクトリも作成する</details>|ディレクトリを作成|
|cat  |<details><summary>オプション表示</summary>-n：行番号を表示<br>-b：空白行を飛ばして行番号を表示</details>|ファイルの中身を確認（編集はできない）|
|vi  |Escキーで入力モードとコマンドモードの切り替えをする|テキストエディタを起動し、ファイルの中身を編集したりファイルを作成できる
|chmod 　　 |<details><summary>オプション表示</summary>-v：コマンド実行時に詳細を表示<br>-R：ディレクトリ内の複数のファイルも変更対象とする</details>|パーミッション(権限)を設定、変更<br>パーミッションの有効無効は0~7の数値で表す<br>例:chmod 777 test.txt<br>所有者・グループ・その他ユーザーに読み込み、書き込み、実行権を与える|
|chown  |-R：ディレクトリ内の所有権も変更する|ファイルやディレクトリのユーザーやグループの所有権を変更|
|pwd  |<details><summary>オプション表示</summary>-L：現在の作業ディレクトリの絶対パスを表示(オプション未指定も同じ)<br>-P：現在の作業ディレクトリの絶対パスを表示<br>**シンボリックリンクの場合はそれが示すディレクトリを表示**</details>|現在の作業ディレクトリの表示・確認|
|uname  |<details><summary>オプション表示</summary>-r：カーネルのバージョンを表示<br>-n：ホスト名を表示<br>-p：プロセッサの種類を表示</details>|システム情報を表示・確認|
|date  |-u：協定世界時を取得する|現在の日時を取得|
|rm  |-i：削除前にメッセージで確認<br>-r：ディレクトリの削除|ファイル・ディレクトリを削除|
|grep  |<details><summary>オプション表示</summary>-i：大文字と小文字を区別しない<br>-E(egrepコマンドと同じ)：拡張正規表現で検索</details>|ファイル中の文字を検索|
|sudo  |-|スーパーユーザーでコマンド実行<br>⇒実行できる他のユーザー権限を一時付与して実行|
|su  |-|ログインし直さずに他のユーザーに切り替える|

よく使うかもしれないオプションを抜粋し記載してますが他にも沢山あります。


<br>
<br>

## おまけ
通信業界の業務でよく使ってきたコマンドとして**tcpdump**がありました。
これはパケットを取得するためのコマンドです。
通信系やネットワーク関係の業務で使用するかもしれないですね！

:::note info
通信上で細かく分けてデータを送受信するのですが、その分かれたデータのことをパケットといいます。
:::

使用例：
```
# tcpdump host 192.168.1.111 and port 8080
```
192.168.1.111 が送受信する 8080番ポートのパケットをキャプチャする。

<br>

また、**ping**コマンドもよく使用していました。
これは疎通を確認するためのコマンドです。
相手側から正しい応答が返ってくれば、機器間でのネットワーク接続や設定に問題がないことが確認できます。IPアドレスを持っている機器なら、pingで疎通確認ができます。

:::note info
疎通確認とは簡単にいうと繋がっているかどうかです。
通信で問い合わせを行い正常に応答が返ってくるかを確認します。
:::
使用例：
```
# ping [オプション] [対象のIPアドレスまたはドメイン名]
```
対象のIPアドレス宛に疎通確認を行う。

<br>
<br>

## 最後に
ITでお仕事をするにあたりLinux環境で業務することがあるかもしれません。
実際は業務しながら身に付けていかれると思います。ざっくり頭に入れておくだけでも理解度が変わってくるかと思いますので、ぜひ学んでみてください。

お読みいただきありがとうございました。
robloxでassistant その39

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
マウスクリックしたら、partの複製を作れ。

# 手順
- workspaceに、partを追加。
- partに、clickdetectorを追加。
- partに、scriptを追加。
- スクリプトを書く。
```
local part = script.Parent
local clickdetector = part:WaitForChild("ClickDetector")
clickdetector.MouseClick:Connect(function(player)
	local clone = part:clone()
	clone.Position += Vector3.new(0, 0, -30)
	clone.Parent = game.Workspace
end)
```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/50fe4b1b-40be-7983-53bd-d3a7b4a00e73.png)


以上。
Pythonに自分のサボりを監視させる

# ■背景
最近電子工作に興味を持ち、「キーボードの振動がn秒停止したらヤクザ(の音声)に罵倒される」という装置をArduino、振動センサ等で作った。
電子工作は初めてであり、とにかくArduinoと仲良くなりたいという目的の方が大きかったので、実装自体は有意義だった。しかし、実運用においては、物理的・視覚的に邪魔なので、Pythonに代役をさせることにした。

# ■目的
自分を在宅勤務でもさぼらせずに追い込んで働かせるシステムをPythonで実装する

# ■実装
### ①準備

```python
pip install keyboard plyer

import threading
import keyboard
import time
from plyer import notification
```

### ②本編

キーボードからの入力が15秒停止するとポップアップ通知が表示される仕組み。
「マウスを操作して何かを読んでいるがキーボードは使っていない」時も容赦なく怒られる。
アラートを鳴らした回数も容赦なくカウントされる。

```python
class InputMonitor:
    def __init__(self, timeout=15):
        self.timeout = timeout
        self.last_input_time = time.time()
        self.running = True
        self.alert_thread = threading.Thread(target=self.alert_if_no_input)
        self.alert_thread.start()
        keyboard.hook(self.update_last_input_time)

    def update_last_input_time(self, event):
        self.last_input_time = time.time()

    def alert_if_no_input(self):
        while self.running:
            if time.time() - self.last_input_time >= self.timeout:
                self.show_notification()
                self.last_input_time = time.time()  # アラート後、再度待機開始
            time.sleep(1)

    def show_notification(self):
        notification.notify(
            title='さぼりアラート',
            message='PIPされてｪのか？働け お前の役割を全うしろ',
            timeout=10
        )

   def stop(self):
       self.running = False
       self.alert_thread.join()
       print(f"アラートは合計 {self.alert_count} 回作動しました。")  # 作動回数を表示


if __name__ == "__main__":
    monitor = InputMonitor(timeout=15)
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        monitor.stop()
```


# ■さいごに
若干マゾみがあるが、「アラートが鳴る間隔をどれだけ伸ばせるかのゲーム」と解釈することで、緊張感はありつつ仕事を楽しくできる。

実際に作動することは確認済みですので、自由に転用・活用頂いて構いません。

最後までお読みいただき、ありがとうございました。
robloxでassistant その38

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
マウスクリックしたら、partの位置を変えよ。

# 手順
- workspaceに、partを追加。
- partに、clickdetectorを追加。
- partに、scriptを追加。
- スクリプトを書く。
```
local part = script.Parent
part.Position = Vector3.new(-5, 0, -10)
local clickdetector = part:WaitForChild("ClickDetector")
clickdetector.MouseClick:Connect(function(player)
	for i = 1, 10, 1 do
		part.Position = Vector3.new(-i, 0, -10)
		wait(0.1)
	end
	for i = 10, 1, -1 do
		part.Position = Vector3.new(-i, 0, -10)
		wait(0.1)
	end
end)
```

以上。
bedrock knowledge baseを使ってAI総務社員を作ってみた

# :tent:　背景
  弊社では社内規定に対する質問が全社員から総務部に問い合わせがあり総務の負荷が増えております。「社内規定を見てください！」と常々周知はしていますが聞いた方が早いため気軽に総務にチャットで聞いてしまうのが現状です…これは「どげんかせんといかん！」(どうにかしなくては)ということで最近AI関連の技術でbedrock knowledge baseで**RAG検索**とかいう社内規定文章をベースにいい感じに回答してくれる仕組みがあるらしいので試してみました。
 
# :raised_hands:　ゴール
 ・teamsで社内規定の質問を投稿するとAIが自動で回答すること
 ・一般的な情報ではなく社内規定文章を元にした回答であること
 ・嘘をつかないこと
 ・総務の若い子からQiiZiro（私）さん素敵です:couple_mm:と愛が芽生えること:seedling:


ムフ、ムフフフフ...
AIの勉強にもなって念願の彼女もできる（かもしれない）ので燃えてまいりましたぞ:muscle:

# :tools:　アーキテクチャ
teamsとの親和性を考えるとバックエンドはazureになりそうなところですが、私はAWSを学びたいためあえてAWSでの構成としました。


![構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/d31b9c78-9ca8-cf5a-6560-25f346198d8a.png)



# :chart_with_upwards_trend:　AIモデルについて
bedrockにおける自然言語AIモデルで最近巷で噂になっているが「Claude3」簡単に言ってしまうとめちゃめちゃ賢いそうです。一説によるとチャットGPTを超えたとか…要はより人間っぽい挙動ができそうということで、**Claude3 Haiku**というモデルを使用することにしました。Claude3は3つのモデルがあるらしく用途によって使い分けるみたい。Haikuの特徴は「早くて安い」とのこと。

...あと「美味い」があれば最高やな:ramen:



# :moneybag:　運用費用について
運用費用はこんな感じでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/a6fefe60-061e-9a24-af39-b7f19fdb5dc1.png)
1日あたり1.3$程度でした。ほぼRDS代が占めておりますね。
当然ですが質問の頻度によってはlambda/bedrockのモデル使用料が蓄積していきます。


:::note info
費用削減ポイント
- データストレージにAuroraを使用(Opensearchは高い)
- Auroraを日中のみ起動
- 安いモデル（Claude3 haiku）を使用
::: 



# :runner_tone4:　実際に動かしてみよう
実験１：休職について聞いてみた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/d086ab19-b8f1-f26d-7cda-2699d36c7ee7.png)
社内規定は開示できませんが、社内規定に即していい感じに回答してくれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/d2fd44ff-63c9-44df-320e-592f668e7f1c.png)
有給の付与日数についても正しく回答してくれています。

実験２：一般常識について聞いてみた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/7dba2f4d-e3d6-b300-19d4-06910da65e16.png)
回答してくれました。社内規定以外の事は全く回答しないわけではないようですね…


実験３：社内規定には書いていない規定について聞いてみた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/0156c3c4-9fa8-be6d-d6e4-bbdda2486469.png)
むむ、英語で「回答できません」という旨の回答が来ました。
プロンプトの調整が必要ですな…



実験結果から、基本的には取り込んだデータソースを元に回答してくれて、世間一般の当たり前のことも回答してくれています。ただ、社内規定に書いていないことをあたかも書いているように回答することもあるようです…体感ですが社内規定に関する回答はある程度性格でした。AIに100%を求めるのは酷ってことなんですかね:robot:



# :ramen:　〆
### **「bedrock knowledge base/RAG検索」** 
聞きなれない言葉でしたが、自社のプライベートなデータを基にして人間のようにいい感じに回答してくれるというものでした。汎用性は高いと思うので、社員プロフィール情報をデータソースにすることで「〇〇さんの誕生日プレゼント何がいいかな？」と聞いたらいい感じに回答しれくれたりするかな？とかいろいろ考えてみるのも楽しそうですね:smiley:

最後に…勇気を振り絞って映画に誘ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/c67e900d-a875-88dd-9032-55f407c0e411.png)
えっ…そんな業務規程あったっけ？会社の承認てwww なぜか規定を理由に断られました:sob:
robloxでassistant その37

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
マウスクリックしたら、partのサイズを変えよ。

# 手順
- workspaceに、partを追加。
- partに、clickdetectorを追加。
- partに、scriptを追加。
- スクリプトを書く。
```
local part = script.Parent
part.Position = Vector3.new(-5, 0, -10)
local clickdetector = part:WaitForChild("ClickDetector")
clickdetector.MouseClick:Connect(function(player)
	for i = 1, 3, 0.1 do
		part.Size = Vector3.new(i, i, i)
		wait(0.01)
	end
	for i = 3, 1, -0.1 do
		part.Size = Vector3.new(i, i, i)
		wait(0.01)
	end
end)

```

以上。
ITパスポートのプロジェクト費用を計算する

# はじめに
ITパスの計算問題、プロジェクト費用の計算をしていきます。

# 最終更新日
2024年5月14日

# 注意
最新の状態を確認して下さい。

# 公式はこちら
https://www3.jitec.ipa.go.jp/JitesCbt/index.html

# 問題

1800万円の予算でプログラムを60本作成するプロジェクトにおいて、
開始後20日経った現在の状況を確認したところ、
60本中40本のプログラムが完成し、
1500万円のコストが掛かっていた。
このままプロジェクトを進めた場合、予算に対する超過コストは何万円か。
ここで、プログラムの規模及び生産性は全て同じであるとする。

# 問題の状況を、1つずつ整理

##### 1800万円の予算でプログラムを60本作成するプロジェクト

![無題5943_20240514141348.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/e78bfa33-c1f2-5309-e60e-614224898799.png)


##### 開始後20日経った現在の状況を確認したところ、60本中40本のプログラムが完成し、1500万円のコストが掛かっていた。

![無題5944_20240514142932.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/11451e03-cbdb-89f3-1375-dbe9cc8ef354.png)



# 解いていく

##### ①1本はいくらか。

開始後20日経った現在の状況を確認したところ、60本中40本のプログラムが完成し、1500万円のコストが掛かっていた。

1500万円で40本であった。

![無題5945_20240514142956.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/adb5d76c-25cb-6a55-73e1-35d8930d67bb.png)

1本あたり、37.5万円になる。
1500万円÷40をする。


##### ②残り作らないといけないのは？

60本予定していて、40本作ったので

60-40
=20

20本作らないといけない。


##### ③20本だと

1人あたりがわかっているので、20本分だとどのくらいか計算する。

![無題5947_20240514143012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/ed8c4d4d-4eeb-2c20-7070-b57af626f0fa.png)

##### ④残っている当初の予想

終わっていない分、当初の予想は1800万で、
終わったのが1500万分のため、
1800万円ー1500万円　＝　300万円分　が想定として残っている。

![無題5946_20240514142235.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/ada021bf-cac3-bd41-f509-46a30a4bb682.png)

作ってから、予想より超えているコストがどれくらいになるか聞いているので、
新しく予想した見込みと、当初の想定を比べてみる。

![無題5948_20240514143018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/6a2206ce-1f5c-070e-b69b-04a1a3bc046c.png)

750万円-300万円　

=450万円

# 答え

450万円
関数の多重定義を回避する方法(MPLAB X IDE, AVR)

# 結論
リンカ(avr-ld)のアディショナルオプションに､下記のコマンドを追加する｡
```
-z muldefs
```
![スクリーンショット 2024-05-14 144539.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455831/364e675a-8614-723f-0e9a-8573fd1c698f.png)
Quagga.jsで読み取り可能なバーコード

# 対応コード
左側が読み取り可能なコード、右側が読み取る際readersに記載する内容
* JAN: 'ean_reader'
* EAN: 'ean_reader'
* UPC: 'upc_reader'
* NW-7: 'codabar_reader'
* ITF: 'i2of5_reader'
* CODE39: 'code_39_reader'
* CODE93: 'code_93_reader'
* CODE128: 'code_128_reader'

# 記載することになったいきさつを知りたい人向けの話
仕事でQuagga.jsを用いたバーコードリーダーを使っていた。今までJANだけ読み取っていたが、どうやらNW-7も読み取るようにするとのことだった
しかし、QuaggaにNW-7が読み取れるなんて記述はない
作り直しなんてことになったらライブラリを選ぶことから始めないといけなくなるぞ…
わー！そんなのいやじゃーー！！と今度はバーコードについて調べると、NW-7(codebar)と出てきた。codebarならQuaggaの説明にあったぞ…！
こうしてバーコードリーダーは無事改修されたのであった
正直JAN＝ean_readerはすぐ出てきたけど、見かけが全然違うNW-7とITFはなかなかヒットしなかったし、また長時間調べることになるのはごめんなので、備忘録として投稿することにした
クライアントからリモートEC2へSSH接続したい

# 目標
- EC2 に ssh 接続を行う
- ssh 接続時に「-i」でキーの指定を行うが、これを省略する

# まずはキーを指定して ssh 接続
```
$ ssh -i key-pair-sample.pem ec2-user@xxx.xxx.xxx.xxx
```
都度、「-i」でキーを指定するのが不便なので改善できないかを考える。

# クライアントの秘密鍵・公開鍵で接続
## 概要
- クライアントにて自身の公開鍵・秘密鍵を作成
- クライアントの公開鍵はリモートサーバーに登録する
    - .ssh/authorized_keys に登録する
    - EC2 起動時もキーペアに指定したものが自動的に登録されている
- 秘密鍵を用いてクライアントから接続される

※EC2ダッシュボードから、対象のEC2インスタンスを選択し、[Actions] > [Instance Settings] > [Edit User Data] を編集することにより同様の操作ができるようなので後日追記する。


## 手順
1. クライアント端末作業/自身のローカル Linux の公開鍵・秘密鍵を作成
    ```
    $ ssh-keygen -t rsa -b 4096 
    ```
    ※パスコードを指定できる。指定した場合は、秘密鍵を使用する際（つまり ssh 接続時）に入力が求められる。
 

1. クライアント端末作業/公開鍵を EC2 に送る
    ```
    $ scp -i key-pair-sample.pem /home/user/.ssh/id_rsa.pub  ec2-user@xxx.xxx.xxx.xxx:~/.
    ```

1. リモート端末/受け取った公開鍵を登録
    ```
    $ cat ~/id_rsa.pub >> .ssh/authorized_keys
    ```
    これで
    ```
    $ ssh ec2-user@xxx.xxx.xxx.xxx
    ```
    で接続できる。

# 別解: .ssh/config を指定して入力を省略する
以下の指定を行うことにより、都度入力を省くことができる。
ただし、実質秘密鍵を各クライアントが持つことになるので注意。

    Host my_ec2_instance
        HostName your_ec2_instance_ip
        User ec2-user
        IdentityFile ~/.ssh/your_key.pem
初めてのオフラインカンファレンス参加体験

## 概要
初めてオフラインカンファレンスに参加しました。これまでのオンラインイベントとは異なる点や学びがありましたので、共有したいと思います。

## これまでの動き
これまでは主に[Connpass](https://connpass.com/)からオンラインイベントに参加してきました。オンラインイベントでも新しい知識を得ることはできますが、自分の場合、`ながら聞き`になりやすく、重要な部分を聞き逃してしまうことが多々ありました。

## オフラインイベントに参加してみて
オフラインイベントに参加して感じた衝撃的な点は以下の3つです。

### 1. 憧れのスピーカーとの出会い
自分がその領域に興味を持つきっかけとなった方がスピーカーとして登壇していました。オンラインよりもそのインパクトは大きく、実際にどこに熱を持っているのか、どのように考えるべきかが直接感じ取れました。

### 2. 直接の交流と反応の共有
顔を見ながら話を聞けることで、周りの雰囲気や他の聞き手の反応を視覚的に共有できました。これにより、重要な部分をより重く受け止めることができました。

### 3. 懇親会でのリアルな声
自分は文系の学生で、実装やアーキテクチャーの知識はほとんど独学です。しかし、懇親会でCTOやPdM、マネージャー層の方と直接話すことで、プロダクト進行中の考え方や難しさ、戦略的DDDの実践における困難など、ネットでは得られない生の声を聞くことができました。また、おすすめの本や資料も教えていただきました。

## オフラインイベントならではの難しさ
オフラインイベントは時間がかかるため、参加するのに大きなハードルがあります。また、懇親会では自分から積極的に話しかけない限り、貴重な情報を得ることが難しいです。特にスピーカーの方は常に誰かと話しているため、質問がある場合は事前に内容を整理しておく必要があります。

## まとめ
オフラインイベントは非常に楽しく、有意義でした。ただし、自分から話しかけないと懇親会の場を最大限活かすことはできないと感じました。参加回数を重ねることで知り合いが増え、徐々に話しかけやすくなると思いますが、新しい人に積極的に話しかける力があれば、さらに有益な情報を得ることができると思いました。きっと気づきや解決の糸口となるものを得ることができると思うので、技術や組織運営に悩んでいる方には、オフラインイベントへの参加を強くおすすめします。

この経験が、オフラインイベントに参加したいけど、、、と悩んでいる方などの参考になれば幸いです。
Cache-Control: max-ageとExpiresの違いを調べた

# Cache-Control: max-age
・Cache-Control ヘッダー内の max-age ディレクティブは、リソースの有効期限を秒単位で指定します。リソースがキャッシュされてから指定された秒数が経過すると、キャッシュが期限切れとなります。max-age が 0 の場合、リソースはキャッシュされていても即座に期限切れとなり、常にリソースの最新のバージョンを取得する必要があります。

・max-age は秒数を使用します。

・max-age は、リソースがキャッシュされた後、一定時間が経過すると期限切れとなるため、時刻同期の問題を回避します。

・HTTP/1.1 では Cache-Control に経過時間を指定する max-age が採用されました。


# Expires:
・Expires ヘッダーは、リソースの有効期限を特定の日時として設定します。この日時は、リソースがキャッシュされた後、その日時までの間はキャッシュが有効であり、その日時を過ぎるとキャッシュが期限切れとなります。ブラウザやプロキシは、この日時を参照して、リソースが有効かどうかを確認します。

・Expires は特定の日時を使用します。

・Expires は、ブラウザやプロキシがキャッシュの有効性を確認するために日時を参照します。

・HTTP/1.0 では、freshは Expires ヘッダーを使用して指定していました。

# 優先順位
一般的には、Cache-Control ヘッダー内の max-age ディレクティブがより優先されます。これは、Expires が特定の日時を使用するため、時刻同期の問題が発生しやすく、max-age がより柔軟で信頼性が高いためです。

# 参考サイト

https://developer.mozilla.org/ja/docs/Web/HTTP/Caching#%E6%9C%89%E5%8A%B9%E6%9C%9F%E9%99%90%E3%81%BE%E3%81%9F%E3%81%AF_max-age
Messaging for In-App　開発者向け

[Messaging for In-App and Webのまとめに戻る](https://qiita.com/Keiji_otsubo/items/97b3e0c3587bdb6bfa72)

------------

+ [Messaging for In-App](https://developer.salesforce.com/docs/service/messaging-web/overview)

Messaging for Web を使用すると、Web サイトから直接最新のメッセージング エクスペリエンスを提供できます。

# 主な特長

+ 簡単に始められます
Salesforce 設定から提供されたコード スニペットを使用して、Web サイトで基本的なメッセージングをすばやく設定できます。

+ 強化が簡単
提供されている JavaScript API の一部を使用してエクスペリエンスを強化します。

+ 高度に構成可能
Salesforce のフローと設定を通じてメッセージング エクスペリエンスを構成および調整します。

# Web 用メッセージングを開始する

このガイドでは、JavaScript API および Lightning Web コンポーネント (LWC) を使用して Messaging for Web エクスペリエンスをカスタマイズする方法について説明します。たとえば、認証されたユーザーが User Verification API を使用してエージェントとパーソナライズされた会話を行う方法について説明します。 Hidden Pre-Chat API を使用して顧客データをエージェントに送信する方法と、アンケートなどの自動応答コンポーネントを顧客に表示する方法を示します。 LWC を使用してカスタムの事前チャット フォームを作成する方法について説明します。他にもたくさんあります。
【PHP】str_repeat関数でfor文をより簡潔に書く

# 初めに
最近codewarsというプログラミング練習用のサイトに登録した。私はこれまでのPJでPHPとJSはやっているので、問題はPHPで解いている。その中でこうすればさらに簡潔にプログラムを書けるなという気づきがあったので、備忘録として書く。

## codewars
全て英語だが、他の人が書いた解答を見ることができる。また機会があればまとめる。
https://www.codewars.com/

## 問題の内容
かなりざっくりと書くと、以下のような問題があった。

>数値nの回数だけ文字列Iを繰り返して出力する

これを見た瞬間に、繰り返しだと判断した私は真っ先にこのような答えを書いた。

```ruby:PHP
for($i = 0; $i < n; $i++){
    echo "I";
}
```

for文を使った基本的な繰り返し文である。例えばn=2の場合，"II"と出力される。

ではこれを関数を使って書きなおしてみよう。

## str_repeatを使う
>str_repeat(string $string, int $times): string
string を times 回を繰り返した文字列を返します。

[PHPマニュアル](https://www.php.net/manual/ja/function.str-repeat.php)から引用
上記を踏まえ，str_repeat関数でコードを書きなおすと以下になる。

```ruby:PHP
echo str_repeat("I", n)
```
3行だったコードが1行に収まった。視認性も良く、直感的に理解しやすい(と思う)。

# まとめ
PHPならではの関数がいくつもあるため、プログラミング力向上のためにも使いこなせるようになりたい。
lodash debounce って何？

vue の勉強をしている際に、しらっと、あまり説明もなく、lodash というライブラリが出てきて、そのライブラリの debounce という関数を使うソースがありました。よくわからないので調べました。

https://qiita.com/waterada/items/986660d31bc107dbd91c

> lodash は大変便利なのですが、関数が多すぎてどれ使ったらいいのか解りづらいのが難点です。ここではその中でも連続する呼び出しを無視してくれる debounce と throttle という負荷対策用の関数を紹介します

lodash の中には、関数がたくさんあって、その中の１つにdebounce があるらしい。

https://qiita.com/haruusagi/items/cea27a0b6939ffbeb990

多重クリックや、サーバへの問い合わせを短時間で連続で行わないようにする事を簡単にできる関数のよう。

https://developer.so-tech.co.jp/entry/2022/11/08/104755

上記のブログは、react で書いてあるけど、vueで書いてみると、
(Vue.js 3.1.5を使用)
# 1) debounce 使わない。

```javascript:javascript
const app = Vue.createApp({
    data: () => ({
        message: ''
    }),
    watch: {
        message: function(value){
          console.log(value)
        }
    }
})
app.mount('#app')

```

```html:html
    <div id="app">
        <p>入力テキスト: <input type="text" v-model="message"> </p>
    </div>
```

![debounce_1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/d60f107a-020e-422e-8fd4-57372a7d9b1a.png)

入力する度に、入力した文字が、コンソールに表示される。




# 2) debounce 使う。

debounce は、以下のように書いて使う。
`_.debounce(関数, wait時間)`


```javascript:javascript
const app = Vue.createApp({
    data: () => ({
        message: ''
    }),
    watch: {
        message: _.debounce(function(value){
            console.log(value)
        }, 1000)
    }
})
app.mount('#app')

```

（wait時間 = 1000 とすると、1秒。）
文字入力が1秒以内に行われなければ、関数が呼ばれる。
1秒開けずに連続して文字入力をし続けてれば、その間は関数は呼ばれない。

例えば、a と入力して、1秒以上待ち、(コンソールにaだけ出力される)、さらにiueoと連続して文字入力し、1秒以上待った時、(コンソールの２行目にはaiueoと出力される)
以下のようにコンソールに表示された。

![debounce_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/1f3dc3e0-9095-7d99-868c-b4c26b5c9809.png)

## maxWait を指定する。
maxWait を指定すると、文字入力をし続けていても、maxWaitごとに関数が呼ばれるようになる。

```javascript:javascript
const app = Vue.createApp({
    data: () => ({
        message: ''
    }),
    watch: {
        message: _.debounce(function(value){
            console.log(value)
        }, 1000, { maxWait: 1000 })
    }
})
app.mount('#app')

```

![debounce_3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284134/6cf791f3-bacf-d519-ea7c-921fb2c99294.png)
maxWait = 1000 を指定したので、aiueoを止まらずに連続して入力し続けても、１秒ごとにコンソール出力されるようになった。
(maxWait指定しない場合であれば、文字の入力間隔を１秒以上開けないとコンソール出力されなかった)
GPT‑4oで面白かった・気になった事例まとめ

# はじめに
GPT‑4oが来ましたね！！
早速色々な使い方をされている方を見つけたのでまとめてみました。
公式ではリアルタイム翻訳や歌っている動画がありましたが、まだ試せないので、以下の事例には書いていません。

# GPT-4o
https://twitter.com/OpenAI/status/1790072068446265675

## GPT-4o日本語まとめ
https://twitter.com/ytiskw/status/1790133943586419167

## 処方箋読み込み(OCR機能)
https://twitter.com/GianMattya/status/1790177738596471050

## 漫画を読解(OCR機能)
https://twitter.com/izutorishima/status/1790110422634541107

## GPT-4oに一瞬騙されかけた話(OCR機能…じゃなかった！)
https://twitter.com/kajikent/status/1790188902072066083

## ペーパープロトタイピングから最初のHTML書き起こし
https://twitter.com/kmizu/status/1790227959724618123

## 簡単なゲームを作成
https://twitter.com/luta_ai/status/1790170147887673393

## カロリー推定アプリを作ってみる
https://qiita.com/sakasegawa/items/45947b0a1c1abb963d0a

# 終わりに
まだ公開されて１日も経っていないので数は少ないのですが、これから続々と皆さんの試した結果が出てくると思います…！
また思い立ったら更新しに来ます。
今後が色々楽しみですね！
AWSを基本的にまとめてみた【AWS Well Architected】

## AWS Well Architectedとは？

- クラウドアーキテクチャの構築、運用、最適化を支援するためのフレームワーク
- 6つの柱から構成されており、それぞれの柱にはベストプラクティスが定義されている

## 6つの柱

1. オペレーションの卓越性: 運用プロセスの自動化、監視、ログ記録を徹底することで、システムの信頼性と可用性を向上させる
2. セキュリティの卓越性: データの機密性、整合性、可用性を保護するためのベストプラクティスを実装することで、セキュリティリスクを軽減する
3. パフォーマンス効率の卓越性: ワークロードのニーズに合わせてリソースをプロビジョニングし、最適化することで、システムのパフォーマンスとコスト効率を向上させる
4. コスト最適化の卓越性: コスト管理、使用量分析、予約購入などのベストプラクティスを実装することで、クラウドコストを削減する
5. 持続可能性の卓越性: エネルギー効率の向上、廃棄物の削減、持続可能な調達などのベストプラクティスを実装することで、環境への影響を軽減する
6. デベロッパーエクスペリエンスの卓越性: コードのデプロイ、テスト、監視を自動化することで、開発者の生産性を向上させる


## AWS Well-Architected フレームワークのメリット

- クラウドアーキテクチャの健全性を向上: WAF を使用することで、クラウドアーキテクチャの健全性を体系的に評価し、改善することができる
- セキュリティリスクを軽減: WAF には、セキュリティリスクを軽減するためのベストプラクティスが定義されているため、データとシステムを保護することができる
- パフォーマンスとコスト効率を向上: WAF には、パフォーマンスとコスト効率を向上するためのベストプラクティスが定義されているため、システムのパフォーマンスを最適化し、クラウドコストを削減することができる
- 開発者の生産性を向上: WAF には、開発者の生産性を向上するためのベストプラクティスが定義されているため、コードのデプロイ、テスト、監視を自動化することができる




## 参考サイト
[【2分で解説！AWS初心者向け】AWSのベストプラクティス AWS Well-Architected フレームワークとは？【クラウドプラクティショナー】](https://www.youtube.com/watch?v=6xMRQudvgmo)
[サービスアップデート W-A サービス編：AWS Well-Architected フレームワーク](https://www.youtube.com/watch?v=69CzTTfRLL0)
[【初心者向け】AWSの経験から生まれたクラウド設計・運用のベストプラクティス集 Well-Architected Frameworkをマスターしよう！ #1 概要編](https://www.youtube.com/watch?v=zCBz0JQg5ag&t=20s)
せっかくのGWなのでAmazon bedrockのハンズオンを行ってみた

### はじめに
文系ITエンジニアになって2年半がたったまだ駆け出しのAWSのBedrockをさわる記事です。
私は、AWS SAAまで持ってますが、業務ではEC2,RDSなど基本的なところだけ触ってるくらいの知識です。

今回は、[ みのるんさん ](https://qiita.com/minorun365)の[ AWSの生成AI最新機能ハンズオン！BedrockのKnowledge BaseとAgentsに入門しよう ](https://qiita.com/minorun365/items/86a3667290a8e5657f65)を行ってみる。

※この方は6月末に本を出してしまうくらい生成AI関係について発信しているのでおすすめです。

[前回](https://qiita.com/tartarprogram/items/cb0261066f0df9a5beee)は、このハンズオンだと 2. Knowledge BaseでRAGに挑戦！ までだったから、そこからさらに一歩進んでみます。

### 作業概要

0.環境準備
1.まずはBedrockを使ってみよう！
2.Knowledge BaseでRAGに挑戦！
3.AgentsでコードやRAGをAIに使わせよう！

※詳細は、ぜひハンズオンを!!

### 0.環境準備

こちらは前回行っていたので、割愛します。IAMのユーザー作成や、Cloud9の作成については比較的簡単にできました。
特にIAMについては、個人開発だと触らないことがほとんど(もちろんAWSはrootユーザーでの通常運用を非推奨にしている)ので、実際にさわって学べるといいと思います。

※私も、会社で使わなかったら権限管理はしなかったと思います。

### 1. まずはBedrockを使ってみよう！

今回でてきた boto3 というライブラリにおどろかされました。

boto3 は、AWS SDK for Pythonのことで、[ドキュメンテーション](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)を確認するとEC2の起動から、S3のオブジェクトをとってくるところまでできるみたいです。

本旨とはずれますけど、マネコン上から毎回EC2起動したりS3さわったりするのももちろんいいですが、IaCにも挑戦してみたいです。

マネコンのチャット上からBedrockを使うときには、応答生成の長さ（返答の文字数制限）や可能性の高い結果に出力を制限したり、返答のランダム性？を決定できて、Pythonで行う際も細かく指定できるみたいなので、この辺りは用途に応じて設計が必要そうです。難易度的に、生成AIの概念確認と、Bedrockの公式ドキュメンテーションを読み込むことが必要ですね。

### 2. Knowledge BaseでRAGに挑戦！

こちらについても、2-3までは実際に行ったことがあるので、2-4からと思っていたのですが2点つまりました。

　
1.リージョン選択

なんどもバージニア北部リージョン(以下、バ北)で作成してって書いてあるのに、ほとんどを東京リージョンでつくってました、、。

5月3日から東京リージョン(ap-northeast-1)にナレッジベース機能が追加されていたみたいで、4月末に行った前回はなかったからナレッジベースがある=バ北と思ってたのに。
※ [クラスメソッドさんの記事を参考](https://dev.classmethod.jp/articles/knowledge-bases-for-amazon-bedrock-supports-tokyo-region/) 

Cloud9についてもリージョン別で作成していると、ナレッジベースがないという下記のエラーがでたので改めてバ北で作り直ししたら成功。
```
botocore.errorfactory.ResourceNotFoundException: An error occurred (ResourceNotFoundException) when calling the RetrieveAndGenerate operation: Knowledge Base with id XXXXXXXXXX does not exist
```

リージョン管理は大切です。

　
2.モデルの選択について 

ハンズオンの手順書には有効化してって書いているのに、Cohere の Embed Multilingal v3 を選択していたのですが、モデル管理で有効化していなかったので使用できずつまりました。
※「One or more data sources have not been synced.」はモデル管理から有効化すると「The system is syncing your data source. Wait for the sync to complete before starting next sync job.」とちゃんと同期してくれるようになります。それまではずっと同期ボタンを押しても「One or more data sources have not been synced.」のままです。
　
有効化していないモデルもナレッジベース作成時には選択できるので、注意するように覚えておきます。
あと、ちゃんと手順通りに行います。

#### メモ
S3バケットの費用を考えると、容量が少ないhtmlやjsonなど文字だけで構成される文書を参考にさせるのがいいみたいです。
実際に運用を考慮すると、
- 文字だけの資料を用意する
- 追記した文書を更新する周期（仕組み）をつくる
- ドキュメントの更新者の権限管理
などを考慮したいです。

運用はじめた会社さんなどでどのような構成をしているのかが気になります(EFSとか使えるのかな...?)。
※文字データの形式を指定すれば汎用性があがりそうです

理解が甘かった用語は後日改めて調べます。
・埋め込み専用モデルとは？
・OpenSerach Serverlessとは？

　
Cloud9について、環境作成時にタイムアウトを選択できるので30分など設定できるので、ブラウザを削除して接続オフして問題なさそう

### 3.AgentsでコードやRAGをAIに使わせよう！

こちらは、ハンズオン通りに行いました！
天気確認のAgentが作成できるのは面白かったです！

Lambda関数を久しぶりにつかったので、
少し手間取りましたがうまくいきました。

ここをどうやって転用できるかは、もっとさわってみます！

### 感想

みのるんさんも続々Qiitaの記事を出していただいているので追いかけつつ、他のかたのハンズオンも行ってみます🙇‍♂️
ありがとうございました。

※OpenSerach Serverlessを1週間放置して100ドル請求されたので、、、お片付け本当に大事です。。
【ChatGPT＋DALL-E3】新しいGPT-4の紹介。それと描画ネタ。


　どうも、カーブミラーです。

　今回は、新しいGPTモデルの紹介です、

:::note info
本記事は、
　GPTの新しいモデルの紹介です。

　画像はありません。
　あしからず。
:::

　ゆうべの深夜二時から
　　OpenAI Spring Updateライブが
　　　はしまりました。

　OpenAIの発表は
　　GPTの新しいモデルでした。
　　　その名も“GPT-4o”。

　GPT-4oのoは
　　Omniです。
　　　オムニモーダル。

　音声も画像認識も
　　やり取りは非常にスムーズ。
　　　人間相手かと思うくらいだ。

　GPT-4oは、
　　数週間かけて
　　　Plusユーザーに
　　　　順次開放されていく
　　　　　そうです。

　これまでの
　　GPT-4は、無料化するとか。
　　　DALL-E3はどうなるの？

　ちなみに
　　“im-also-a-good-gpt2-chatbot”
　　　というモデルが
　　　　いっとき騒がれていましたが
　　　　　どうやらGPT-4oだった
　　　　　　ようです。

　詳しくは下記参照。
[OpenAI発表要約](https://x.com/hokazuya/status/1790071288444367288?t=EQwAafQU9Gc3noniZ-pT5Q&s=03)
***
　寝ようとしたら
　　Web版とアプリ版（Android）に
　　　GPT-4oが来てたので、
　　　　簡単に触ってみた。

　返答が早い。
　画像生成（DALL-E3）は
　　これまでどおり。
　画像解析とCode Interpreterも
　　早くなってる？
　音声会話も応答が早くなっている。

　Web版は選択されたモデルは保持、
　アプリ版はNewChatで、GPT-4oに。
***
　ちなみに
　　Windows、Mac OS、Linux用の
　　　デスクトップアプリも
　　　　発表されました。

　Mac用のデスクトップアプリは
　　近日中に公開予定で、
　Windows用のデスクトップアプリは
　　今年後半にリリース予定。

　GPT-4oのAPIも
　　すでに公開されました。　　

　私は、環境がないので
　　このへんはわかりません😅
***
　OpenAIのサイトで
　　面白いものを
　　　見つけました。

[こんにちは GPT-4o](https://openai.com/index/hello-gpt-4o/)
　の“機能の探索”をごらんください。

　DALL-E3での
　　画像生成の指示が
　　　複数例あげられています。

　これからの
　　参考にしましょう。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
CODESYSのCNCを作ったら次はCADCAM、その次は画像AI

6軸コントロールできれば、6自由度を活かして（なるべく）加工上で切れ目のない動きが出来ます。

とはいえ、その軌道が曲面上であれば、人手でプログラムするのは難しいです。

3D-CADで、加工方向、法線方向を定義すれば機械の構造にあったGコードを生成できるようにします。いろんな3D-CADがありますが、高いもの月払いのものは避け、かつ、複雑な曲面や曲線生成に強いRhinocerosのプラグインを作ります。

こちらも、気が向けばGPLのオープンソースで公開するかもしれません。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408008/b08f0877-1c70-e611-db03-76cf20ed67d4.png)


その次は・・ワークがピカピカに磨けたかどうかを判定するのは、画像AIカメラを使いたいです。

しかし、工業用のAIカメラじゃなくて、CNC同様に、オープンソースプロジェクトにしたいのと、磨けたかどうかを判定するので、自分で画像集めて、学習できるタイプじゃないと。

具体的には、RPiのカメラ＋Pythonがいいかな、Spresense＋Sonyさんのツールがいいかな、と思ってます。（まだ先かな）


学習時は、人が表面を一緒に見て、撮影された画像を見ているAIに、ここはOk、ここはNGを教えてあげることになります。（うまくいくのかな）
Roomで使うkspを導入する際にハマったことと解決した方法

Developersの**Android Kotlin の基礎**のレッスン７までやり終えてやっとアプリが作れると思いきや、まさかのkspのせいでなかなか手こずったので問題そのものと、解決した方法を書きたいと思います。

[Android Kotlin の基礎](https://developer.android.com/courses/kotlin-android-fundamentals/overview?hl=ja)

※ 因みにこのコースを受講するきっかけの記事と、このコースを受講する際に参考にした記事も貼っておきます。
・[受講するきっかけの記事](https://qiita.com/yayamochi/items/7c689fd7fe6954e3c198)
・[参考にした記事](https://note.com/haine_rion23/)
参考に記事の方はコースごとに丁寧に解説していてとてもわかりやすかったのでおすすめ。

# 本題
android studioでroomを使おうとして公式のドキュメント通りに追加したらエラーが出たので、
色々と試したものと、最終的に解決した方法を書いていきたいと思います。
### 環境
android-studio-2023.3.1.18-windows.exe
   targetSdk = 34
   compileSdk = 34

# 結論
[こちらのサイトで紹介されている方法](https://zenn.dev/slowhand/articles/bde673d6afd133)でroomとkspを導入して、javaのバージョン不一致が起きるので、バージョンを一致させるために、**sourceCompatibility**と**targetCompatibility**をjavaVersion.VERSION_17に変えて、同じくjvmTargetを17に変えたら直りました。
```
 compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
kotlinOptions {
        jvmTarget = "17"
    }
```


# エラー
#### エラー内容:Unresolved reference: ksp
androidの公式のdocumentを見ながらroomとkspを導入していたら、普通にエラーしました。なして、、、

**公式のroomのドキュメント**

https://developer.android.com/jetpack/androidx/releases/room?hl=ja

https://developer.android.com/build/migrate-to-ksp?hl=ja

一応最上位レベルのbuild.gradle.ktsにもKSPプラグインを追加してもkspを認識してくれなかったので、どうすれば良かったのか。有識者の方で知っているのであれば教えて欲しいです。

#### エラー内容：Unresolved reference: ksp
次は色々調べた結果、ここ最近に書かれていてかつ、丁寧に書かれていたので、初心者の僕にも理解できてとても良かったのですが、kspを認識してくれませんでした。残念、、、
一応リンクを貼っておきます。

https://note.com/haine_rion23/n/nd61ae9ee4bbd

しかし、ここの記事のバージョンのエラーの解決方法を後に使います。

#### エラー内容:'compileDebugJavaWithJavac' task (current target is 1.8) and 'kspDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.

色々とサイトを検索した結果、根本的にroomとkspの実装がおかしいのではないかと思い、roomの実装について調べました。下記の記事を参考にしました。

https://zenn.dev/slowhand/articles/bde673d6afd133

因みにこの記事を参考にしたら解決しました。

記事通りに導入してsyncをしたら上記のエラーが出てきました。バージョンでのエラーは先ほど見た記事に書いてあったので、
先ほどの記事を参考にsourceCompatibilityとtargetCompatibilityのバージョンを17に変えて、jvmtargetも同様に変えたら無事起動する事ができました。


# 終わり
以上になります。何か間違えであったり、もっとこうした方がいいなど意見がありましたら、是非ご指摘ご鞭撻の方よろしくおねがいします。
M1 MacでPythonの開発環境構築

# はじめに
プロジェクトでPython3.8.5をインストールする必要があったのですが、Pythonの環境構築が初めてで、M1 Macを使用しているので色々とつまづきました。
venvで仮想環境の作成もしましたので手順を記載します。

# 環境
|チップ  |OS  |
|---|---|
|Apple M1 MAX  |Sonoma 14.1.2  |

環境構築前のバージョンはこのようになっていました。
```zsh
% python --version
zsh: command not found: python

% python3 --version
Python　3.9.19
```
# Homebrewのインストール
Homebrewがインストールされていない場合はインストールします。
```zsh
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

https://brew.sh/ja/

# pyenvのインストール
```zsh
% brew install pyenv
```

## pyenvのパスを通す

```zsh:~/.zshrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
```

ターミナルを再起動または下記コマンドでshell設定を反映します。
```
% source ~/.zshrc
```
**補足**
ここでパスが通っていなかったので、`python3 --version`で確認した際にpyenvではなくmacに元々インストールされていたバージョンになってしまい後々嵌まることになりました。

## pyenvコマンド
```zsh
## インストールできるバージョンのリスト
% pyenv install --list
## バージョンを指定してインストール
% pyenv install　【version】
## インストールしたバージョンの一覧
% pyenv　versions
## 使用するバージョンの指定
% pyenv global 【version】
% pyenv local 【version】
```

# pythonのインストール
```zsh
% pyenv install 3.8.5
```
### エラー発生
```zsh
BUILD FAILED (OS X 14.1.2 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/_p/qdj099zx4gsdlb4kl_l7bsd80000gn/T/python-build.20240513110603.6691
Results logged to /var/folders/_p/qdj099zx4gsdlb4kl_l7bsd80000gn/T/python-build.20240513110603.6691.log

Last 10 log lines:
checking size of _Bool... 1
checking size of off_t... 8
checking whether to enable large file support... no
checking size of time_t... 8
checking for pthread_t... yes
checking size of pthread_t... 8
checking size of pthread_key_t... 8
checking whether pthread_key_t is compatible with int... no
configure: error: Unexpected output of 'arch' on OSX
make: *** No targets specified and no makefile found.  Stop.
```
Mac m1が関係していそうなので、`arch -arch x86_64 env PATH〜`など試してみるが解決せず、`brew install python@3.8`で3.8.19を直接インストールするも、その後の`pip install`がうまくいきませんでした。

途中、Command Line Toolsがないと怒られXcodeのアップデート、Command Line Toolsのインストールなどだいぶ遠回りしましたが、結局以下のコマンドでインストールする事が出来ました。

ちなみに`pyenv install 3.8.19`はエラーにならず、普通にインストールできました。

### 解決
```zsh
% pyenv install --patch 3.8.5 <<(curl -sSL https://raw.githubusercontent.com/Homebrew/formula-patches/113aa84/python/3.8.3.patch\?full_index\=1)
```
無事インストールできたようなので、プロジェクトルートに移動して、バージョンを指定します。
```zsh
% pyenv local 3.8.5
```

バージョンの確認
```zsh
% pyenv versions
## output
  system
* 3.8.5 (set by /Users/username/project/.python-version)

% python3 --version
## output
Python 3.8.5
```
できた！

# venvで仮想環境を作成
```zsh
% python3 -m venv .venv
```
`.venv`が仮想環境名となります。

次に仮想環境を起動します。
```zsh
source .venv/bin/activate
```
ターミナルに`(.venv)`と表示され、仮想環境に入っている事が確認できます。
`pip install 〜`で必要なパッケージをインストールします。

仮想環境を終了するには、
```zsh
deactivate
```
で抜ける事が出来ます。


# 参考にさせていただいた記事

https://zenn.dev/kenghaya/articles/9f07914156fab5

https://qiita.com/Butterthon/items/5fc15330f35d05c1a310

https://zenn.dev/sion_pn/articles/d0f9e45716cabb
AWS Cost Anomaly Detectionの初期設定と所感

コスト異常検出のレイテンシーが減少したという公式ニュースを見かけました。
見た事はあったんですが触った事がなかったので触ってみた所感になります！


AWS Cost Anomaly Detection reduces anomaly detection latency by up to 30%
（訳 AWS コスト異常検出により、異常検出のレイテンシーが最大 30% 削減されます）

https://aws.amazon.com/about-aws/whats-new/2024/05/aws-cost-anomaly-detection-reduces-latency/

# ■そもそもAWS Cost Anomaly Detectionとは？

簡単に説明すると、そのまんまコストの異常検出です
機械学習を使っていい感じに異常があったらメールで通知してくれるんだな〜って感覚でまずは良いかと思います。

導入ステップについてはAWSコンソールにも記載がありました。

![cost概要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/75eec2e7-02c4-8a20-f071-05764d7a6f61.png)

# ■設定方法

初期設定はとても簡単です。

まずはAWSコンソールへログインし、「Billing and Cost Management」へ移動します。
ページ左に「コスト異常検出」とありますが、ここから設定可能です。

![cost手順1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/e6c64a25-4ac0-f31f-0635-39c42edca626.png)

ここから作成に進めます

![cost手順2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/89c3a211-c2a4-b742-4c3a-a7b866e7ed15.png)

後は設定内容と通知先を決めるという所ですが、特に難しい事はありませんでした。
（設定内容にもよりそうではある）

モニタータイプ（支出をモニタリングする方法）としては以下の4つあります。
一旦推奨されているデフォルトで進めました。

```
「AWS のサービス - 推奨事項」
このモニターは、使用する各サービスを個別に評価し、小さな異常を検出できるようにします。異常しきい値は、サービス使用履歴パターンに基づいて自動的に調整されます。

「連結アカウント」
このモニターは、個々の連結アカウントの総支出を評価します。このモニターは、組織が連結アカウント別にチーム (または製品、サービス、環境) を定義する場合に役立ちます。

「コストカテゴリ」
このモニターは、個々のコストカテゴリ値の総支出を評価します。このモニターは、組織が Cost Categories を使用してチーム (または製品、サービス、環境) を定義する場合に役立ちます。

「コスト配分タグ」
このモニターは、個々のタグのキーと値のペアの総支出を評価します。このモニターは、組織がコスト配分タグを使用してチーム (または製品、サービス、環境) を定義する場合に役立ちます。
```

![cost手順3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/ba4fcf74-147a-49d7-a2cd-0948b0f9fc05.png)

次は通知先となるメールアドレスの設定です。
通知されるタイミングは [個別、日次、週次] で選べるみたいですね〜

![20240514112505.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/56070940-2dc7-8853-efb9-6a6e2134bea5.png)

最後に閾値ですが100$で設定してみました。
（割合（%）とかもいけます）
ここは経過を見て修正していく事が必須と思われる

以上で初期の設定は終わりです！

# ■最後に
調べている感じだとコスト閾値は修正必須ですね。
日時で通知するように設定してみたので修正はまた別で書いてみます！
生活ログアプリの構想

https://qiita.com/EasyCording/items/fceef0255168852a1b7a

# 続き

学習データとしては、以下のようなデータが情報ソースとなる。

１）レシート　→　シートスキャナでテキスト化する。データには日付が含まれる。
２）日記　→　日付ごとに日記を書く。
３）お天気データ　→　天候や気温により、生活パターンが変わる場合など
４）健康データ　→　体重、食欲、生理現象、睡眠など。スマートウォッチのデータなど　

# 改良

ひとまず、自分の頭の中から引き出すことを念頭に、紙のノート上に日記を書くことにした。
日記をスキャナで読むにしても、自分の汚い字をOCRで認識できるかに課題感がある。
ボイスレコーダであれば、音声からのテキスト変換は容易のため、日記を読み上げるというのが良さそうである。
レシートはスキャナでまとめてテキストに換えれば良いだろう。

お天気データはWEBサイトのスクレイビング、予報も含めて先行して収納する
健康データはやはりBluetooth付きのスマートウォッチ

# 全体

```plantuml
@startuml
left to right direction
actor ユーザー as u
rectangle "生活ログ収集システム" {
    usecase "レシートをスキャン" as UC1
    usecase "日記を録音" as UC2
    usecase "健康データを記録" as UC3
    usecase "天気データを取得" as UC4
    usecase "音声をテキストに変換" as UC5
    usecase "データを保存" as UC6
    usecase "データを取得" as UC7
    usecase "データを可視化" as UC8
    usecase "インサイトを生成" as UC9
}
u --> UC1
u --> UC2
u --> UC3
UC1 ..> UC6 : <<include>>
UC2 .right.> UC5 : <<include>>
UC5 ..> UC6 : <<include>>
UC3 ..> UC6 : <<include>>
UC4 ..> UC6 : <<include>>
UC6 .left.> UC7 : <<include>>
UC7 .left.> UC8 : <<include>>
UC7 .left.> UC9 : <<include>>
@enduml
```

# 課題感

ノートの日記で入力を忘れてしまわないか？
日記に残すのがめんどくさくならないか？

# まとめ

いったんログのノート書きと、ボイスレコーダーへの録音は本日より開始する

# 音声の変換

これはOPENAIのWIHSPERを使う
https://aismiley.co.jp/ai_news/what-is-whisper/
AWSを基本的にまとめてみた【CloudTrail】

## CloudTrailとは？

- AWSアカウント上でのAPI操作をログに記録するサービス
- CloudTrailを使用することでAWSアカウント内に『誰が、いつ、何に対して、何をしたか』を把握できる
- 取得可能な操作には、(1)管理イベントと(2)データイベントがある
- 標準で90日間、管理イベントログを保存できる
- S3保存やCloudWatch Logsにイベント送信も可能

##### (1)管理イベント

- AWSアカウント内のリソースに対して実行される操作で、マネージメントコンソールへのログインやEC2インスタンスの作成などが含まれる

##### (2)データイベント

- リソース上またはリソース内で実行される操作で、Lambda関数の実行やS3バケット上のデータ操作などが含まれる

## CloudTrailのメリット

- AWS上での操作ログが自動的に保存されるため、コンプライアンス監査に役立てることができる
- トラブルが起きた場合に問題となる行動、利用者の不正操作などをすぐに特定が可能
- イベントログを管理しているため、セキュリティや運用上の問題を発見できる
- AWSアカウント内で『誰が、いつ、何に対して、何をしたか』を把握できる

## IAMの操作履歴を記録

『証跡機能の有効化』⇨ 『登録完了』
※ CloudTrail設定時は、全リージョンの適用が行われ、初回はS3の保管が合わせて設定される

①　CloudTrailを選択 ⇨ 証跡の作成 ⇨ 証跡名の入力 ⇨ 証跡の作成
② 左上のハンバーガー ⇨ イベント履歴 ⇨ 履歴を確認する






## 参考サイト
[【AWS CloudTrail】ソリューションアーキテクト アソシエイト(SAA) 第36回講座](https://www.youtube.com/watch?v=foiAnYYeqew)
[AWS CloudTrailを利用してIAMの操作履歴を記録してみた](https://www.youtube.com/watch?v=B3zYrDnFliQ)
[AWS CloudTrailの証跡を利用して決まった条件の時にアラートを通知してみた](https://www.youtube.com/watch?v=7rKkCNh0Xhc)
docker-comose の volumes の左辺は記法によってホストのディレクトリ / volume 名指定 が分かれるので注意

# 概要

非常にわかりづらい

docker-compose.yml で

volumeの左辺を `./` で始めるとホスト ( local ) のパス指定になるが

```yml
version: '3.8'
services:
  bar:
    volumes:
      - ./some_host_directory:/path/to/docker-somewhere
```

書かないとdockerのvolumeを指定することになる

```yml
version: '3.8'
services:
  foo:
    volumes:
      - some-volume-name:/path/to/docker-somewhere
volumes:
  some-volume-name:
```


# 参考


https://docs.docker.jp/v1.11/compose/compose-file.html#id50

```

# ホスト上のパスを指定する時、Compose ファイルからのパスを指定
  - ./cache:/tmp/cache

  # ユーザの相対パスを使用
  - ~/configs:/etc/configs/:ro

  # 名前付きボリューム（Named volume）
  - datavolume:/var/lib/mysql
```


# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura
ユーザモード、カーネルモードを見る

```
root@****:********# taskset -c 0 python3 hello.py &
[1] 2682
root@****:********# sar -P 0 1 1
Linux 5.15.0-100-generic (********) 	2024年05月14日 	_x86_64_	(1 CPU)

10時44分10秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
10時44分11秒       0    100.00      0.00      0.00      0.00      0.00      0.00
平均値:        0    100.00      0.00      0.00      0.00      0.00      0.00
root@****:********# kill 2682
```
プロセスがユーザモードで実行しているとき、「プロセスはユーザランド（あるいはユーザ空間)で実行しているということもあります。
...
プロセスはユーザモードで動作するため、デバイスにアクセスできません。
# 出典
https://gihyo.jp/book/2022/978-4-297-13148-7

# 気づき
userが１００％ということは期間内１００％ユーザモードだったということか
```
root@****:********# vim hello.py
[1]+  Terminated              taskset -c 0 python3 hello.py
root@****:********# taskset -c 0 python3 hello.py &
[1] 2697
root@****:********# sar -P 0 1 1
Linux 5.15.0-100-generic (********) 	2024年05月14日 	_x86_64_	(1 CPU)

10時49分36秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
10時49分37秒       0     69.05      0.00     30.95      0.00      0.00      0.00
平均値:        0     69.05      0.00     30.95      0.00      0.00      0.00
root@****:********# kill 2697
```
このhello.pyは無限にシステムコールするようになってます

カーネルに処理を依頼するためにシステムコールを発行すると、CPUにおいて例外というイベントが発生します。
これをきっかけとして、```CPUのモードがユーザモードからカーネルモードに遷移```し、依頼内容に応じたカーネルの処理が動き始めます。カーネル内のシステムコール処理が終了すれば、再びユーザモードに戻ってプロセスの動作を継続します。
# 出典
https://gihyo.jp/book/2022/978-4-297-13148-7

# %sys   
プロセッサがシステムモードになっている時間の割合が表示される
# 出典
https://docs.oracle.com/cd/E19683-01/817-0160/6mfvs9jf1/index.html#:~:text=%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B-,%25sys,%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E6%99%82%E9%96%93%E3%81%AE%E5%89%B2%E5%90%88%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B,-%25wio

#　気づき
この期間ユーザモードが約７０％、カーネルモードが約30%動いていたことになる。
ファイル検査用 マクロ VBA

ファイルを対象のフォルダにコピーするマクロです


```VBA
Sub CopyFilesFromCells()
    Dim fso As Object
    Dim sourcePath As String
    Dim destinationPath: String
    Dim fileName As String
    Dim sourceFile As String
    Dim destinationFile As String
    Dim ws As Worksheet
    Dim i As Long
    Dim fileFound As Boolean
    
    ' ファイルシステムオブジェクトを作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' コピー元とコピー先のパスをC2とC3セルから取得
    Set ws = ThisWorkbook.Sheets("Sheet1") ' シート名を適宜変更してください
    sourcePath = ws.Range("C2").Value
    destinationPath = ws.Range("C3").Value
    
    ' B7セルから下に向かってファイル名を取得してコピー
    i = 7
    Do While ws.Range("B" & i).Value <> ""
        fileName = ws.Range("B" & i).Value
        fileFound = False
        
        ' ファイル名に拡張子が含まれているかチェック
        If InStr(fileName, ".") = 0 Then
            ' 拡張子が省略されている場合、ディレクトリ内のファイルを確認
            Dim file As Object
            For Each file In fso.GetFolder(sourcePath).Files
                If Left(file.Name, InStrRev(file.Name, ".") - 1) = fileName Then
                    fileName = file.Name
                    fileFound = True
                    Exit For
                End If
            Next file
        Else
            fileFound = True
        End If
        
        If fileFound Then
            sourceFile = fso.BuildPath(sourcePath, fileName)
            destinationFile = fso.BuildPath(destinationPath, fileName)
            
            ' ファイルをコピー
            On Error Resume Next ' エラー発生時に処理を続行
            fso.CopyFile sourceFile, destinationFile, True ' 上書きコピー
            If Err.Number = 0 Then
                ' コピー成功時にC列とD列にフルパスを設定
                ws.Range("C" & i).Value = sourceFile
                ws.Range("D" & i).Value = destinationFile
            Else
                MsgBox "ファイルのコピーに失敗しました: " & sourceFile & " -> " & destinationFile & vbCrLf & Err.Description
            End If
            On Error GoTo 0 ' エラー処理をリセット
        Else
            MsgBox "ファイルが見つかりませんでした: " & ws.Range("B" & i).Value
        End If
        
        i = i + 1
    Loop
    
    ' コピー終了メッセージ
    MsgBox "ファイルのコピーが完了しました"
    
    ' オブジェクトの解放
    Set fso = Nothing
End Sub




Sub ClearFileEntries()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' シート名を適宜変更してください
    
    ' B7から下のセルをクリア
    ws.Range("B7:D" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row).ClearContents
End Sub
Azure Application Gatewayの停止・起動方法

# はじめに
Application Gateway V1の廃止→V2への移行により、運用コストの増加が懸念されます。
Azure PortalからApplication Gatewayを起動・停止することができないため、Windows PowerShellから起動・停止する手順をまとめます。

# Application Gateway V1廃止
2026年4月28日に Application Gateway V1は廃止となることがアナウンスされています。
V1を作成したことのあるサブスクリプションではV1の管理・使用が可能ですが、それ以外のサブスクリプションでは、2023年7月1日以降、V1の新規作成はできなくなっています。

比較的リーズナブルなV1（約＄20 ~ 250/月）でしたが、今後はV2への移行により、＄200/月以上のコストがかかってしまいます（料金は1カ月常時起動の場合）。

https://learn.microsoft.com/ja-jp/azure/application-gateway/retirement-faq


# PowerShell Galleryのインストール
PowerShellを開き、PowerShell Galleryをインストールします。

```
Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -AllowClobber
```

# パラメータの定義
後の操作で使用するパラメータを定義します。
```
$tenantId = 'テナントID'
$subscriptionId = 'サブスクリプションID'
$applicationGatewayName = 'application gateway名'
$resourceGroupName = 'リソースグループ名'
```

# MEIDへのログインとサブスクリプションの設定

```
Connect-AzAccount -TenantId $tenantId -SubscriptionId $subscriptionId
```

# Application Gatewayの停止
```
$AppGw = Get-AzApplicationGateway -Name $applicationGatewayName -ResourceGroupName $resourceGroupName
Stop-AzApplicationGateway -ApplicationGateway $AppGw
```
https://learn.microsoft.com/ja-jp/powershell/module/az.network/stop-azapplicationgateway?view=azps-11.5.0

# Application Gatewayの起動
```
$AppGw = Get-AzApplicationGateway -Name $applicationGatewayName -ResourceGroupName $resourceGroupName
Start-AzApplicationGateway -ApplicationGateway $AppGw
```
https://learn.microsoft.com/ja-jp/powershell/module/az.network/start-azapplicationgateway?view=azps-11.5.0
新しいPCでゲームorソフトが動かないときのトラブルシューティング

# 新しくセットアップしたPCでゲームorソフトが動かない！

そんなときは "Visual C++ 再頒布可能パッケージ" をダウンロードしてみましょう！
以下のMicrosoftの配布サイトを参考に自分のPCに合ったパッケージを入手してください．

https://learn.microsoft.com/ja-jp/cpp/windows/latest-supported-vc-redist?view=msvc-170

多分これで解決するはずです．

以上．
FileMaker Server 2023 ubuntu インストール

## AWSでubuntuを立ち上げる
＊私はこのイメージで立ち上げました。
![スクリーンショット 2024-05-14 10.58.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146151/0c53b882-1e44-fcb9-ac70-a06fcf0573e3.png)

![スクリーンショット 2024-05-14 10.56.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146151/b2a29904-d32c-3177-8b34-a74ac8ec857c.png)

## インスタンスが立ち上がったらSSH接続
＊私はAWSのコンソール画面から接続
![スクリーンショット 2024-05-14 11.01.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146151/8e13fdde-64d1-6284-e511-73ae557166c5.png)
![スクリーンショット 2024-05-14 11.02.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146151/aa6c513b-2846-218e-e876-c56d83785e4a.png)


## インストール手順を見ながら実行
https://help.claris.com/ja/server-installation-configuration-guide/content/installing-single-machine-linux.html

### Linuxパッケージの確認
`sudo apt update`

### Linuxパッケージのインストール
`sudo apt install wget`
`sudo apt install unzip`

### Linuxのアップデート
`sudo apt upgrade`
再起動が求められたら一度再起動する

### ディレクトリを作成する
`mkdir fminstaller`

### 移動する
`cd fminstaller`

### インストーラを取得する
`wget [URL]`
URLはメールの案内にあるダウンロードベージのリンクを指定
![スクリーンショット 2024-05-14 10.29.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146151/6a58069e-2474-11fe-ca08-570ee09ab909.png)

### インストーラを解凍する
`unzip [インストーラ]`

### インストーラの名前を識別する
`ls filemaker*.deb`

### インストーラを実行
`sudo apt install ./[インストーラの名前]`

### 途中でメッセージが表示さるので応答する
- ライセンス契約に同意：Y
- インストールタイプ：０
- ユーザ名とパスワード及びPINを設定

完了したら一度SSHを接続しなおす

### 各プロセスが起動しているかを確認
`ps -A | grep fm`
![スクリーンショット 2024-05-14 10.53.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146151/1c0a587b-03db-8688-278d-d6b114464882.png)

`ps -A | grep nginx`
![スクリーンショット 2024-05-14 10.53.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146151/f757083d-1aad-8d1f-e7be-9c1eeafde4d0.png)

プロセスが動いていればインストール完了

あとはadmin-consoleを開いてFileMakerServerの設定を行う。
組込機器の通信セキュリティ対策は待ったなし！（その１）

組込機器の通信セキュリティ対策はもはや検討段階ではなく待ったなしの時代となりました。「通信セキュリティ」と言っても話題の分野が非常に広いのでどこから始めるか迷うところですが、組込機器を使うユーザの立場から見ると一番近い話題となりそうな「認証」から始めたいと思います。そして、その中でも今回は「とにかく安全なユーザ名/パスワードの設定が大事」という話です。

<h2>■ユーザ名/パスワードってそんなに危ないものなの？</h2>
組込機器を設定したり制御するために、普通はユーザ名/パスワードを組込機器に設定しておき、それを知らない第三者はアクセスできない状態にして運用すると思います。そんなこと当たり前と思っているユーザなら何の心配もないのですが、世の中セキュリティリテラシーの高い方ばかりではありません。実際、ユーザ名/パスワードを設定していない、出荷時のデフォルトから変えていない、比較的予測可能な内容にしている、といった組込機器がインターネットに置かれていることで、これまでこんな危険なことが起きています。<br>

<h3>・監視カメラ映像が世界中の誰でも見られる状態に！</h3>

Insecam(http://www.insecam.org/ ) というWebサイトをご存じでしょうか。インターネットにつながっている全世界の監視カメラで、ユーザ名/パスワードが設定されていなかったりデフォルトだったりするもののライブ映像を見ることができる恐ろしいサイトです。日本では執筆時点で570台以上のカメラが登録されています（米国の約1110台についで世界第二位の数です！）。だいたいは道路状況や河川状況など比較的公共的なものなのですが、ときどき家庭、オフィス、店舗内部のライブ映像もあります。「第三者への情報の流出」という点で危ない例です。

<h3>・IoT機器がDDoS攻撃の片棒を担がされる！</h3>
2016年にはインターネット上のIoT機器をターゲットにしたマルウエアMiraiが大きな問題になりました。Miraiが侵入してしまった大量のIoT機器が、被害者となるサーバに一斉にアクセスする形でDDoS攻撃の片棒を担がされるわけです。IoT機器の設定ページにデフォルトやありがちなユーザ名/パスワードを使ってアクセスし、成功するとMiraiが仕込まれます。Miraiが侵入したIoT機器は、今度は自分が侵入者となってIPアドレスを変えながら次の侵入先を探す、というもので、「サイバー攻撃に加担させられる」という点で危ない例です。

<h3>・家庭内LANがインターネットから丸見えに！</h3>
普通、家庭で使われているようなブロードバンドルータはインターネット側からは設定ページにはアクセスできない状態がデフォルトだと思います。家庭内LANに悪人はいないからと言って油断してはいけません。別の方法で家庭内LANのPCにマルウエアが仕込まれて、そこからルータの設定ページにデフォルトやありがちなユーザ名/パスワードを使ってアクセス、設定を書き換えてインターネットからのアクセスを許可するような攻撃パターンもあります。利用者から見ると普通にインターネットアクセスできる状態なので気づきにくく、「リソースへの不正アクセス」という点でも最も危ない例かもしれません。

<h2>■組込機器メーカ側にもパスワード設定に関する責務がある！</h2>
この問題を視点を変えて組込機器メーカ側から見てみると、従来のように「ユーザが任意にユーザ名/パスワードを設定できる仕組みがある」だけでは済まなくなりました。従来電気的な基準が主に規定されていた技術基準適合認定に、新たにセキュリティ要項が追加されています。以下はその中でもパスワードに関する項目ですが、乱暴に言ってしまうと「安全なパスワードを設定しないとそもそも運用が開始できないようにしなさい」ということだと思います。

 ![no28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032022/331afa6a-3eba-0840-01c2-1b89eae915d2.png)

総務省「電気通信事業法に基づく端末機器の基準認証 に関するガイドライン(第２版)」（https://www.soumu.go.jp/main_content/000705080.pdf ）

<h2>■結論と次回予告</h2>
このように、組込機器といえども安易なユーザ名/パスワード運用は非常に危険であり、今は組込機器メーカ側にも安全な運用ができる機能の実装が求められています。ただ、どんなに安全なパスワードを設定したとしても、正しいユーザが組込機器にアクセスする際にパスワードを平文で送信してしまっては経路上で第三者が盗み見ていたら一発で流出です。次回は、認証の中でも秘密情報が第三者に流出しない公開鍵暗号を使った仕組みについて解説します。

こんな感じで我々が組込機器の通信セキュリティで重要と考える要素を解説していきますので、「この点はどうなんだ？」のようなリクエストがありましたらコメントいただければと思います。

Cente：
https://www.cente.jp/

Centeに関するお問合せはこちら：
https://www.cente.jp/otoiawase/