OmniAICreator/Qiita-1.07M huggingface dataset:
kaggleについて Spaceship Titanic

# 概要
kaggleについて Spaceship Titanicの概要説明を行うものです。

このコンペティションは無期限に実施され、ローリングリーダーボード形式で進行します。詳しくはこちらをご覧ください。


## 説明
📣 おすすめのコンペティション
初心者向けに「**Titanic - Machine Learning from Disaster**」をお勧めします。このコンペティションで、機械学習やKaggleの基礎を学びましょう。

西暦2912年、データサイエンスのスキルが求められる宇宙の謎を解明する時が来ました。4光年先からの通信を受信しましたが、事態は深刻です。

スペースシップ・タイタニックは1か月前に打ち上げられた星間旅客船で、約13,000人の乗客を乗せて太陽系から近隣の3つの居住可能な惑星へ移住する計画でした。しかし、最初の目的地である55 Cancri Eへの航行中、アルファ・ケンタウリ付近で宇宙船は塵の中に隠された時空の異常に衝突しました。その結果、タイタニック号の運命と同じように、乗客の半分が異次元に送り込まれてしまいました。

救助隊が乗客を救出し、異次元に送り込まれた人々を見つけ出すために、あなたは宇宙船の損傷したコンピュータシステムから回収されたデータを基に、どの乗客が異次元に転送されたかを予測するという課題に挑みます。

彼らを救い、歴史を変える手助けをしましょう！

## 💡 スタートガイドノートブック
迅速に始めたい方は、スターターノートブックをご活用ください。

他のユーザーとコンペティションについて話し合いたい場合は、Discordに参加してください。コンペティション、求人情報、キャリアの話題、リソースなどについて話し合うためのチャンネルがあります。参加はこちらから: https://discord.gg/kaggle


## 評価
評価基準
提出物は分類精度（予測ラベルの正解率）に基づいて評価されます。

## 提出形式
このコンペティションの提出形式は、以下のようなCSVファイルです:

``` graphql
コードをコピーする
PassengerId,Transported  
0013_01,False  
0018_01,False  
0019_01,False  
0021_01,False  
etc.
```

## よくある質問
Getting Startedコンペティションとは？
初心者向けのコンペティションで、機械学習やKaggleに慣れるために作られました。機械学習の基礎を学びたい人や、MOOCを終えてKaggleに参加したい人に最適です。賞金はなく、ローリング形式で開催されます。

## チームの作成と管理方法
コンペティション規約に同意すると、チームが自動的に作成されます。他のメンバーをチームに招待したり、チームの合併を承認したり、チーム名などの基本情報を更新できます。チームを作ることで、新しいスキルを学びながら楽しむことができます。

## ノートブックとは？
Kaggle Notebooksは、再現可能で協力的な分析を可能にするクラウドベースの計算環境です。Python、R、Jupyter Notebooks、RMarkdownのスクリプトをサポートしており、Spaceship Titanicコンペティションで公開されたコードをすべて閲覧することができます。

## チームがリーダーボードから消えた理由は？
2か月間提出がない場合、提出物は無効となりリーダーボードから削除されます。これにより、リーダーボードが整理され、新規参加者が埋もれないようにします。


引用
Addison Howard, Ashley Chow, Ryan Holbrook. (2022). Spaceship Titanic. Kaggle. https://kaggle.com/competitions/spaceship-titanic




# データセットの説明
このコンペティションでは、Spaceship Titanicが時空の異常に衝突した際に、乗客が別の次元に転送されたかどうかを予測することが課題です。予測を行うために、宇宙船の損傷したコンピュータシステムから回収された個人記録が提供されています。

## ファイルおよびデータフィールドの説明
### 1. train.csv 
約2/3の乗客（約8700人）の個人記録が含まれており、これがトレーニングデータとして使用されます。

PassengerId: 各乗客に固有のID。このIDは「gggg_pp」の形式を取り、ggggはグループを示し、ppはそのグループ内での番号を示します。グループ内の人々は家族であることが多いですが、必ずしもそうではありません。
HomePlanet: 乗客が出発した惑星。通常はその人の居住惑星です。
CryoSleep: 乗客が航海中に冷凍睡眠を選んだかどうかを示します。冷凍睡眠中の乗客はキャビンに留まっています。
Cabin: 乗客が滞在しているキャビン番号。形式は「デッキ/番号/サイド」で、サイドは「P」（Port: 左舷）か「S」（Starboard: 右舷）になります。
Destination: 乗客が降りる予定の惑星。
Age: 乗客の年齢。
VIP: 乗客がVIPサービスを受けているかどうか。
RoomService, FoodCourt, ShoppingMall, Spa, VRDeck: Spaceship Titanicの豪華施設での利用料金（ルームサービス、フードコート、ショッピングモール、スパ、VRデッキ）。
Name: 乗客の名前（名字と名前）。
Transported: 乗客が別の次元に転送されたかどうか（予測すべきターゲット列）。
### 2. test.csv 
残りの約1/3の乗客（約4300人）の個人記録が含まれており、これはテストデータとして使用されます。このセットの乗客に対して、Transportedの値（TrueまたはFalse）を予測することが求められます。

### 3. sample_submission.csv 
正しいフォーマットのサンプル提出ファイルです。
PassengerId: テストセットにおける各乗客のID。
Transported: 各乗客について、True（転送された）またはFalse（転送されなかった）を予測します。
この情報を基に、異次元へ転送されたかどうかを予測するためのモデルを構築します。
公務員がエンジニアに転職するまで　vol.1

## 公務員がエンジニアに転職するまで

皆さん、こんにちは。
私は、現在20代半ばの年齢で、公務員をしています。今回、思い立って、エンジニアに転職しようと決めました。
今後の行く末を自分でも、日記感覚で書いていきたいと思います。時間がある方は読んでいただけると励みになります。
※あくまで、日記感覚なので全体的に適当です。


## 自己紹介
改めまして、簡単に身バレしない範囲で自己紹介しておきます。
・年齢　２４歳
・勤務地　本州ではない
・仕事　国家公務員
・趣味　数学　坂道系　サイクリング


とかですかね。まさに凡人の中の凡人、普通の人です。
下に、旅行行った時の写真載せときます。この都道府県に一応、住んでます。

![プロフィール.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3910144/0e5e8260-149b-5773-094a-c15886a159d3.jpeg)

## 転職を目指したきっかけ

結論から言うと、**「なんとなく」** ですかね。
元々、エンジニアに興味あったんですけど、親の希望もあって、試験も好きだから、公務員になったんですよ。でも、毎日が淡々としてるし、やりたいことやった方がいいなと思って、目指しました。
ちなみに **某エンジニアスクール**に今日入ったので、今日からがスタートです。

 **「思い立ったが吉日」** ですよ！！ 

### さいごに

これから、学んだ知識とか、いろいろ書いていこうと思います。
今回が最初の投稿なので、拙いのは許してください。また機会があれば書きますね。 ~~今度は見やすくなっていることを期待してください。~~ 多分、文章下手なので記事は見ずらいです。

ばいならー
【Docker】JavaアプリケーションコンテナとMySQLコンテナの作成と起動方法

## 準備するもの
- `JARファイル`（今回はGradleでビルド）
- `Dockerfile`
- `docker-compose.yaml`

## 手順
### 1. JARファイルの作成
gradleのbuildタスクを実行
⇨ `build/libs`フォルダにJARファイルが作成されます。
![スクリーンショット 2024-11-29 22.34.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1202056/085c587e-0a9b-9bad-7087-77daf43af0b0.png)


### 2. **Dockerfile と docker-compose.yaml を作成**
```:配置場所
project-root/
├── docker/
│   ├── Dockerfile              # Dockerイメージを構築するためのファイル
│   └── docker-compose.yaml     # Docker Composeでサービスを管理
```

```Dockerfile:Dockerfile
# JARファイルを実行するベースイメージとしてAmazon Correttoを使用
FROM amazoncorretto:17

# 作業ディレクトリを設定
WORKDIR /app

# ビルド済みJARファイルをコンテナ内の作業ディレクトリにapp.jarとしてコピー
COPY /build/libs/course-match-0.0.1-SNAPSHOT.jar app.jar

# アプリケーションを実行（コンテナ起動時に実行するコマンドを指定）
ENTRYPOINT ["java", "-jar", "app.jar"]
```

```yaml:docker-compose.yaml
version: '3.8'

services:
  app:
    build:
      context: ..  # プロジェクトルートをビルドコンテキストに設定
      dockerfile: docker/Dockerfile  # Dockerfile の場所を指定
    container_name: course_match
    ports:
      - "8080:8080" # ホスト:コンテナ
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/course_match_db
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=rootpassword
    depends_on:
      - db # dbコンテナの起動を優先

  db:
    image: mysql:8.0
    container_name: course_match_db
    ports:
      - "3306:3306" # ホスト:コンテナ
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: course_match_db # 起動時に自動的に作成されるデータベースの名前
    volumes:
      - db_data:/var/lib/mysql
      - ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql

volumes:
  db_data:
```


#### ※ application.propertiesと組み合わせて記載したい場合
```yaml:docker-compose.yaml（アプリ側の環境設定のみ抽出）
app:
  environment:
    DB_HOST: db
    DB_USER: root
    DB_PASSWORD: rootpassword
```

```yaml:application.properties
spring.datasource.url=jdbc:mysql://${DB_HOST}:3306/course_match_db
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWORD}
```


### 4. **Docker Composeでコンテナをビルド・起動**
```bash
cd docker # dockerディレクトリに移動
docker-compose up --build
```
→ JARファイル、Dockerfileをもとに、Dockerイメージを作成し、コンテナとして起動する



### 5. **確認**
- ブラウザで `http://localhost:8080` にアクセスし、Javaアプリケーションが動作しているか確認します。（:8080はホスト側のポート番号）
- MySQLコンテナはポート3306でリッスンしているので、外部のクライアントからも接続可能
SQL JOINについて

## テーブル結合時のJOIN句について

JOINを使ってテーブル結合を行いデータを取得していますが、INNSER JOIN OUTER JOIN LEFT JOINなど、結合方法は色々ありますが、正しく使い分けられている自信がなかったので、改めて自身の備忘として残します。


### INNER JOIN - 内部結合
例えば２つのテーブルを結合するクエリを作成する場合を仮定。
brandsテーブル、itemsテーブル
itemsテーブルにはbrand_idというカラムがあり、brands_idはbrands.idとの結合キーとします。

```
SELECT 
    items.brand_id, 
    items.name AS item_name, 
    brands.name AS brand_name 
FROM items
    INNER JOIN brands ON
        items.brand_id = brands.id;
```
上記のクエリで、内部結合でテーブル同士のデータを取得できます。
INNER JOINは、両テーブルの共に存在する情報だけを取得します。


### OUTER JOIN - 外部結合
基本的な使い方は内部結合と同様です。
異なる点は結果のみ。
外部結合の場合は、片方のテーブルの値が全て出力されます。
```
SELECT 
    items.brand_id, 
    items.name AS item_name, 
    brands.name AS brand_name 
FROM items
    OUTER JOIN brands ON
        items.brand_id = brands.id;
```
その片方とは、JOINしたテーブルの情報です。
指定した元テーブルにはない情報を結果に持ってくる
のでOUTER JOIN(外部結合)ということになります。

指定にはLEFT RIGHTと指定ができ、私自身よく使う、よく見るのはLEFTです。
結合するテーブルを指定することはあまりないですが、それは状況んなどによって変わるかもしれません。
M5Stackのタイマ割込み関数に関する備忘録

# 概要
タイマ割込みについて自分が使ったものをまとめておく。
参考にしたサイトは以下のサイト。

https://craft-gogo.com/m5stack-timer-interrupt/

## 宣言
```cpp
hw_timer_t *timer = NULL;
```

## 割込み時に実行する関数
```cpp
void IRAM_ATTR onTimer();
{
    // 割込み時に実行する処理
}
```
IRAM_ATTRを記載しておくのは、関数をフラッシュメモリではなくRAMに格納しておくためらしい。

https://esp32.com/viewtopic.php?t=4978

## タイマ作成
```cpp
timer = timerBegin(0, 80, true);
```
第一引数はタイマ番号。M5Stack Core2（ESP32）では4つまで使えるらしいので、0~3で指定。
第2引数は分周比。設定については以下の通り。

> M5Stackのペリフェラル周波数は80MHzです。
> タイマのカウント周波数は、分周器というペリフェラル周波数を整数分の1に落とす装置で作り出します。タイマカウントしやすいように分周比を80とし、1カウントを80M / 80 = 1MHzにするのが一般的です。

第3引数はカウンターをカウントアップするならtrue、カウントダウンするならfalse。

## 実行関数とタイマの紐づけ
```cpp
timerAttachInterrupt(timer, &onTimer, true);
```
第1引数はタイマ。
第2引数は実行したい関数。
第3引数は割込みの検知方法。trueならエッジトリガー、falseならレベルトリガー

## 割込みタイミングの設定
```cpp
timerAlarmWrite(timer, 100000, true);
```
第1引数はタイマ。
第2引数は割込み発生のカウント数。
カウント数 = 1カウントの周波数(Hz) × 割込み間隔(s)
第3引数は割込み周期の設定。trueなら周期的に実行、falseなら1度きり。

## タイマ割込みの有効化
```cpp
timerAlarmEnable(timer);
```
引数はタイマ。
有効化されるとタイマが開始される。

## タイマの停止
```cpp
timerStop(timer)
```
引数はタイマ。
タイマが一時停止する。

## タイマの開始
```cpp
timerStart(timer);
```
引数はタイマ。
止めたタイマを再開できる。

## タイマ割込みの設定判定
```cpp
timerAlarmEnabled(timer);
```
タイマ割込みの設定がされているかを確認する。
タイマに対して、`timerAlarmEnable()`が実行されていればtrue、されていなければfalseを返す。

## タイマの開始判定
```cpp
timerStartEnabled(timer);
```
タイマが開始しているか、止まっているかを判定する。
開始していればtrue、停止していればfalseを返す。

# まとめ
今回、コーヒースケールをM5Stackで作るにあたって調べたことをまとめた。
意外と全部の関数が記載されているサイトがなくて困った。
Github Pagesでwebサイトを公開する

# GitHubのアカウント作成
以下のURLにアクセスしてください
https://github.com/signup
※ すでにGitHubのアカウントを持っている場合、次の「リポジトリの作成」へ進んでください
以下の画像のようなページにアクセスしたら、入力フォームに、「メールアドレス」「パスワード」「ユーザー名」をそれぞれ入力して、アカウントを登録してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907132/aee79596-88e0-38c9-b4d7-6ab19a8006d3.png)
※「ユーザー名」は後ほど公開するWebページのURLの一部になります
# リポジトリの作成
画面右上の+のアイコンをクリックし、「New repository」を選択します
![51a48994-6cdd-3c92-6af5-a33c470798f7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907132/57fe980d-72d9-941a-a69c-ffdead3e626a.png)
表示されたページの中央にある、「Repository name」という入力欄にリポジトリ名を入力します。リポジトリ名は基本的に何でも大丈夫ですが、
![スクリーンショット 2024-10-14 191830.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907132/bbe56ef3-f185-e38b-64f4-826858bf424e.png)
※「リポジトリ名」も後ほど公開するWebページのURLの一部になります
# ファイルのアップロード
「uploading an existing file」をクリックします
![スクリーンショット 2024-10-14 192119.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907132/65afa037-cd63-1212-146a-333f2cd77ef5.png)
「choose your files」をクリックし、ファイルを選択し、アップロードしてください
その後「Commit changes」を押して保存します
※主にhtml、js、cssをアップロードします
![スクリーンショット 2024-10-14 192342.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907132/66d3329e-fe86-7f23-3c12-2451a0ab1e1b.png)
アップロードが完了すると以下の画像のようにアップロードしたファイルが一覧になっています
![スクリーンショット 2024-10-14 193211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907132/fb430fa3-b5a3-b0a5-8a13-3f7240a3c6a3.png)
# ページを公開する
「setting」をクリックします
![スクリーンショット 2024-10-14 193812.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907132/b38d807a-ccca-f211-c105-99aead9aa706.png)
左側にあるメニューの中から「Pages」をクリックしてください
![スクリーンショット 2024-10-14 193958.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907132/ad15558f-6052-1d0e-46a0-2ab3d6cfe452.png)
Branchの「None」をファイルをアップデートしたBranch名（デフォルトはmain）に変えて「Save」を押します
![スクリーンショット 2024-10-14 194151.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907132/7db8fa77-1290-fb42-b292-6da78a707c4f.png)
少しして以下の画像のようになっていれば公開完了です
「Visit site」をクリックしてサイトに飛びましょう
![スクリーンショット 2024-10-14 220757.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907132/3390d999-8eff-379a-afed-bb10ab3a8a0d.png)
TerraformでMinecraftマルチサーバーを構築する

## はじめに

以前CloudFormationでMinecraftサーバーを構築しましたが、今回はTerraformを使って同様のサーバーを構築してみたいと思います。

[こちら](https://qiita.com/sayyyyyy/items/e1c38a21482e1c162a63)の記事の続き？です。

:::note
環境
* Terraform v1.9.7 on darwin_arm64
* macOS Sonoma 14.4.1
:::

## 1分でわかるTerraform

TerraformはHashiCorp社が提供するIaCツールで、様々なクラウドサービス上にインフラを構築することができるサービスです

https://www.terraform.io/

## リソースを作成するTerraformコード

```
base/ EC2の作成に必要なVPCやIAMロールなどを作成
ec2/ Minecraftサーバーを動作させるEC2インスタンスを作成
scheduler/ EC2インスタンスを自動停止するスケジューラを作成
```

プロジェクトのrootで`terraform apply`を実行することでbaseとec2のリソースを作成し、schedulerディレクトリの中で`terraform apply`を実行することでスケジューラを作成することができます。

[こちら](https://github.com/sayyyyyy/minecraft-server-tf)にコードを配置しているのでご参照ください。

## 詰まったところ

### パブリックIPアドレスが割り当てられない

サブネットの`map_public_ip_on_launch`をtrueにする必要がありました。

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/subnet#map_public_ip_on_launch

### セキュリティグループでアウトバウンドの通信が弾かれてしまう

セキュリティグループにアウトバウンドルールが設定されておらず、EC2インスタンスの初期設定やセッションマネージャーの接続がうまくいきませんでした。
AWSのデフォルトでは全てのトラフィックを許可する出力ルールが作成されますが、TerraformはVPCに新しいセキュリティグループが作成された場合、その出力ルールが削除されるためアウトバウンドの通信が弾かれていました。

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group

### 導入するTerraformが間違っていた

初歩的なミスですがarm64アーキのPCにも関わらずamd64のTerraformを導入していました。
コマンドを実行するとタイムアウトになったためなぜだろうと思っていたのですが、アーキテクチャが間違っていたのが原因でした。。

## 使い方

1. [こちら](https://mcversions.net/)のサイトで遊びたいバージョンのサーバーのダウンロードリンクを取得する
    - バージョンを選択し、Download Server jarを右クリックしてリンクをコピーする
2. Terraformをインストールする
3. 環境変数を設定する
    1. AWSの認証に必要なアクセスキーなど
4. terraform init を実行する
5. terraform applyを実行する
    - インスタンス起動のタイミングで[EULA](https://www.minecraft.net/ja-jp/terms/r3)に自動的に同意するため注意
    - 1でコピーしたリンクを変数として入力する
    - リージョンはap_northeast_1にしているため、他のリージョンを利用する場合は変更する必要がある
6. AWSマネジメントコンソールからEC2の画面を開き、パブリックIPv4アドレスをコピーする
7. MinecraftでサーバーIPの欄にパブリックIPv4アドレスを入力してサーバーに接続する
    - EC2インスタンスが作成された後もインスタンス内部で設定を行っているため10分程待ってからアクセスする必要がある
8. 遊び終わったらEC2インスタンスを停止する
    - 稼働させている限り料金が発生してしまう
    - 停止ではなく終了してしまうとデータが消えてしまうので、理由がない限り停止を推奨

## CloudFormationとの比較

有名な2つのIaCツールを使ってみましたが、どちらにも長所があるため、プロジェクトの特性に応じて使い分けるのが良さそうです。特にTerraformは複数のクラウドサービスに対応しているため、他のクラウドサービスに移行する際も変更箇所を最小限に抑えられるのが利点だと思いました。また、Terraformはブラウザ上での操作ではなく、ターミナル上で完結するところが魅力的です。
ただし、AWS社が開発したものをHashiCorp社が追従する形になっているため、AWSを利用する場合はCloudFormationが優位に立つでしょう。
AWSにはAWS CDKもあり、こちらは各プログラミング言語で記述できるので、開発環境を統一したい場合に適しています。

## おわりに

また、今回のコードはCloudFormationのコードを元にAIに生成してもらったのですが、かなり精度が高くて驚きました。

## 参考

https://blog.dcs.co.jp/aws/20210401-terraformaws.html

https://zenn.dev/ryoyoshii/articles/81a7cfc7140816
地形図における鉄道表示ルール

## はじめに

自分が Web 地図を構築する際は、国土地理院から提供されているタイルを背景地図として多く利用させていただいておりますが、細かく見ていると、鉄道路線の実態に対して、少し不思議と感じる表示がされていることがあります。

国土地理院の地形図は、どのような地物を表示するかのルール（図式）が定められています。せっかくですので、これを参照して地形図における鉄道の表示方法を整理してみます。

:::note warn
* 挿入している画像は全て、地理院タイル（標準地図）です。地形図ではありません。
* 鉄道関係の知識については、Wikipedia での確認にとどめておりますので、ご承知おきください。
::: 


## 図式の記載（鉄道記号の様式）

[平成２５年２万５千分１地形図図式](https://www.gsi.go.jp/common/000218186.pdf)の第31条のうち、「普通鉄道」に関する部分を抜粋します。

> 1. 鉄道事業法（昭和61年法律第92号）による鉄道又は軌道法（大正10年法律第76号）による軌道に基づく鉄道に適用し、地下鉄、路面鉄道となっている部分は、以下の、「地下鉄及び地下式鉄道」、「路面の鉄道」の表示方法を適用する。
> 2. ＪＲ線は、個々の路線名を注記する。ただし、新幹線は「○○新幹線」と注記し、新幹線が乗り入れる在来線については、在来線の名称の後ろに新幹線の名称を括弧書きする。
> 3. ＪＲ線以外は、鉄道名及び路線名を注記する。ただし、路線名が本線とあるものを除き、他によく知られている略称がある場合には、その略称を以下の例に準じて注記する。
> （例は省略）
> 4. 貨物専用鉄道のうち、鉄道事業法に基づく専用鉄道は、鉄道名に「専用線」を付して注記し、これ以外のものは、必要に応じて、鉄道名に「貨物線」を付して注記する。
> 5. 普通鉄道で、ＪＲ線とＪＲ線以外が線路を共有して運行されている区間は、ＪＲ線の記号で表示する。

ちゃんとミニ新幹線（山形及び秋田新幹線）の取り扱いも記載されています。

この5項目のうち、1.及び5. のルールに基づく表示を不思議と感じることが多かったので、実例を見てみます。

## 軌道法の路線も「普通鉄道」

法律によって色分けされている道路（国道・県道・市町村道……）があると、鉄道事業法の路線が「普通鉄道」で、軌道法の路線は「路面の鉄道」と思われそうですが、実際はどちらでも「普通鉄道」となります。

「路面の鉄道」は「道路上に敷設された鉄道に適用」とされています。図式に明示されてはいませんが、実態を見るに、「道路上の空中又は地下に敷設」は対象外のようです（ただし、高架部や地下鉄として取得されている可能性はありますが……）。

例：
* 名鉄豊川線は軌道法に基づく路線ですが、全線専用軌道なので「普通鉄道」となっています
* ゆりかもめは鉄道事業法と軌道法に基づく部分が混在していますが、ほぼ「鉄道橋（高架部）」となっています

なお、江ノ電や熊本電鉄の有名な併用軌道然とした部分は、「普通鉄道」として取得されています。

![江ノ電.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842832/3796c885-151b-348c-f1b0-d679fa7b0101.png)
![熊本鉄道.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842832/b258ecbc-5078-0d4d-e6c9-99fc17e9f68c.png)

## JR線とそれ以外の共有区間はJR線の記号

JR と私鉄が重複すると JR の表記となります。有名な共用例は以下のようなものでしょうか。

* [豊橋駅付近（JR 東海・名鉄）](https://maps.gsi.go.jp/#15/34.792942/137.361739/)
![豊橋付近.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842832/89fad89e-61d8-6ea4-e191-1e0bad452a76.png)

* [関西空港付近（JR 西日本・南海）](https://maps.gsi.go.jp/#15/34.406308/135.307617/)
![関空付近.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842832/e28ad4fa-f3ce-7042-e011-8af5188e6d44.png)

一方、以下の例では、レールは共用しておらず、JR と京成（成田スカイアクセス線）の線路が単線で並んでいるだけです。

* [成田空港付近（JR 東日本・京成）](https://maps.gsi.go.jp/#15/35.796113/140.327017/)
![成田空港付近.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842832/967ef6e5-4b5d-48f4-f3af-2e023a6fa747.png)

厳密には、レールは共有していないはずですが、「線路」の定義次第で共用と言えるかもしれません。図式に線路の定義は記載されていませんが、[日本民営鉄道協会のページ](https://www.mintetsu.or.jp/knowledge/term/16401.html)を確認すると、以下の通り紹介があります。

> 日本工業規格では、「列車又は車両を走らせるための通路。軌道及びこれを支持するために必要な路盤、構造物を包含している地帯。」と定義しています。

JR 東日本と成田スカイアクセス線の例は、もともと成田新幹線用の路盤を共有しているはずなので、確かに広義では「線路を共有」と言えそうです。

他に、似たような例として、２社の単線並列ではありますが、複線で描かれている事例があります。

* [赤城駅付近（東武・上毛電鉄）](https://maps.gsi.go.jp/#17/36.426302/139.278429/)
![赤城付近.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842832/1f476639-4086-f1f6-154f-842df2e81ba8.png)

## おわりに

思えば、国道等の位置づけが利用者にも明示される道路と異なり、鉄道は法律や管理者の実態と鉄道利用者向けの案内や見た目が乖離することがあります。そもそも、第二種鉄道事業者（線路を借りて営業のみ実施）や第三種鉄道事業者（営業せず線路のみ所有）が存在する以上、運行事業者と線路所有者のどちらを優先して地図を作るかの判断は難しいはずです。

現行の図式は、そのような悩みがあったうえでの結果なのかもしれません。
【TryHackMe】Enumeration & Brute Force：Walkthrough

# 概要

TryHackMe「Enumeration & Brute Force」のWalkthroughです。

https://tryhackme.com/r/room/enumerationbruteforce

# Task2

## **Q1**.*What type of error messages can unintentionally provide attackers with confirmation of valid usernames?*

**Hint**.*These occur during login attempts or other interactive processes that can reveal too much information.*

**A**.**Verbose errors**

# Task3

## **Q1**.*What is the valid email address from the list?*

`http://enum.thm/labs/verbose_login/`にアクセスします。

![task3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/e5a49396-0968-8327-56ad-b8925b66ec90.jpeg)

ブルートフォースのソースコードを実行します。
emailのリストは下記リポジトリを使用します。

https://github.com/nyxgeek/username-lists/blob/master/usernames-top100/usernames_gmail.com.txt

有効なメールアドレスが見つかりました。

```
$ python script.py gmail_list
[VALID] canderson@gmail.com
```

**A**.**canderson@&#xFFF0;gmail.com**

# Task4

## **Q1**.*What is the flag?*

**Hint**.*Do not forget to make the password reset request BEFORE brute forcing the token.*

`http://enum.thm/labs/predictable_tokens/`にアクセスします。

BurpのIntruderでトークンの値を100~200でブルートフォースすると、パスワードをリセットできました。

![task4 reset pass.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/3a3131e9-6c61-c469-a777-c7f7a8378df8.jpeg)

`Email: admin@admin.com`,`Password: ioXzWnTV`でログインに成功しました。

![task4 flag.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/cdce55ed-8145-41a3-2b60-ba6db82614aa.jpeg)

**A**.**THM{50_pr3d1ct4BL333!!}**

# Task5

## **Q1**.*What is the flag?*

`http://enum.thm/labs/basic_auth/`にアクセスし、リクエストを取得します。
TryHackMeの解説通りにBurpの設定をし、Intruderを実行します。

![task5 .jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6b63c502-89a2-f99b-6a10-716b541928a2.jpeg)

`Username: admin`,`Password: yellow`でログインに成功しました。

![task5 flag.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/5ef629d8-a197-7ac0-c2d7-0a9e346f7753.jpeg)

**A**.**THM{b4$$1C_AuTTHHH}**

## **Q2**.*Try using Hydra instead of Burp to brute force the password.*

Hydraでのブルートフォース攻撃でも成功しました。

```
$ hydra -f -l admin -P /usr/share/seclists/Passwords/Common-Credentials/500-worst-passwords.txt enum.thm http-get /labs/basic_auth/
[80][http-get] host: enum.thm   login: admin   password: yellow
```
build.gradleの「sourceSets」について調べてみた

## 背景
参画していたプロジェクトでbuild.gradleに以下の記載があった。
どういう意図で書かれたものなのかわからなかったので調べてみた。
```bash:build.gradle
sourceSets {
  main {
    java {
      srcDirs 'src/main/java'
      srcDirs 'src/main/restapi'
      srcDirs 'src/main/test'
    }
  }
}
```

## Gradleビルド時にコンパイルされるものされないもの
基本的に、<strong>標準構造</strong>に従っているソースについては、``sourceSets``の記載なしで正常にコンパイルされます。

```bash:標準構造
・src/main/java       #メインのソースコード
・src/main/resources  #メインのリソース
・src/test/java       #テストコード
・src/test/resources  #テストのリソース
```
しかし、上記の標準構造に従っていないソースについては、Gradleが見つけることができないため、コンパイルされない。

今回でいうと、``src/main/restapi``がそれにあたる。


そういった標準構造に従っていないディレクトリを、build.gradle内の<strong>``sourceSets``</strong>に記載してあげることで、Gradleがソースの場所を理解し、コンパイルできるようになる。


## 結論
sourceSetsに記載が必要なディレクトリは、標準構造に則っていないディレクトリのみ。

そのため正しくは、以下のようになる。
```bash:build.gradle
sourceSets {
  main {
    java {
      srcDirs 'src/main/restapi'
    }
  }
}
```

## 余談
#### ①リソースファイルのディレクトリはresourcesブロックに指定すること
Javaブロックに入れると、GradleがJavaファイルと勘違いしてコンパイルしようとして、エラーが起きる場合あり。
```bash:build.gradle
sourceSets {
  main {
    resources {
      srcDirs 'src/***/resources'
    }
  }
}
```

#### ②コンパイル対象から外したいJavaファイルがあれば以下のように設定する
```bash:build.gradle
sourceSets {
  main {
    java {
      srcDirs 'src/main/java'
      excluded '**/Test.java' #コンパイル対象外となる
    }
  }
}
```
oletools

<!--
2024/10/14
-->
[oletools][oleid][olemeta][olevba]

## Kali linuxへのインストール
- 以下のコマンドを入力
`sudo -H pip install -U oletools[full]`
## oleid & olemeta
- OLEファイルの情報を確認
`oleid {FilePath}`
`olemeta {FilePath}`
## olevba
- VBAコードおよび解析結果の表示
`olevba {FilePath}`
- VBAコードの表示（-c --code）
`olevba -c {FilePath}`
- 解析結果の表示（-a --analysis）
`olevba -a {FilePath}`
- パスワード付きの場合（-p --password）
`olevba -p PASSWORD {FilePath}`
- 難読化された文字（Hex, Base64, StrReverse, Dridex, VBA）を復号
`olevba --decode {FilePath}`
- 難読化された文字を復号して、VBAコードを表示
`olevba --reveal {FilePath}`

## 参考
https://github.com/decalage2/oletools
[Remix]ログイン前後のレイアウトを変える

## 既存のコード

Remixでルートレイアウト(root.tsx)にサイドメニュー＋コンテンツのレイアウトを作成

```Typescript:root.tsx
export default function App() {
  return (
    <html lang="jp">
      <head>
        <meta charSet="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <Meta />
        <Links />
      </head>
      <body className="flex min-h-screen">
        <Sidebar />
        <div className="flex-1 p-5">
          <Outlet />
        </div>
        <ScrollRestoration />
        <Scripts />
      </body>
    </html>
  );
}
```

## 既存のルート構造
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/eea58d74-915d-5a93-3bbe-c537d1f2bcc3.png)
  
ホーム画面にレイアウトが適応される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/43797919-a972-c0cb-a808-dac0fe30123a.png)
  
ログイン画面にも適応される（当たり前）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/2971c82b-dc1e-1675-8332-8906e5fc3c8f.png)


## ルートの変更
Remixドキュメントを見ながらルートを変更
[RemixDocs-RouteFileNaming](https://remix.run/docs/en/main/file-conventions/routes#nested-layouts-without-nested-urls)
  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/09554c3c-3164-bc63-8bf3-c195c3a7ca5b.png)

変更
_authはURLから無視され、.は/に変換される。
_auth.tsxで_auth以下のページのレイアウトを定義できるらしいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/7931c8b1-3057-9415-761a-beac246f5622.png)
　
変わらない…😥
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/f2f2a4ed-de96-990f-1fa1-192bfb7526fc.png)

### 原因はroot.tsxをサイドメニュー＋コンテンツのレイアウトにしているから
_auth.tsxにレイアウトを定義しても、親のルートレイアウト(root.tsx)を継承するのでサイドメニューが表示される。
　
回避方法としては
①root.tsxをサイドメニュー無しにして、_auth以外のルートにはサイドメニューを付ける。
　→ディレクトリが増えるたびにサイドメニューコンポーネントを入れるのは微妙では…
　
②root.tsxでレイアウトを分岐させる。
　→一旦、こちらで対応

## root.tsxでレイアウト分岐（暫定）

```Typescript:root.tsx
export default function App() {
  const location = useLocation();
  
  // ログインやサインアップのルートではサイドメニューを非表示にする
  const isAuthRoute = location.pathname.startsWith("/login") || location.pathname.startsWith("/signup");

  return (
    <html lang="jp">
      <head>
        <meta charSet="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <Meta />
        <Links />
      </head>
      <body className="min-h-screen">
        {!isAuthRoute && (
          <div className="flex">
            <Sidebar />
            <div className="flex-1 p-5">
              <Outlet />
            </div>
          </div>
        )}
        {isAuthRoute && (
          <div className="flex-1 p-5">
            <Outlet />
          </div>
        )}
        <ScrollRestoration />
        <Scripts />
      </body>
    </html>
  );
}
```
　
サイドメニュー無しのレイアウトになった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/0c9a68f9-42ff-26f7-cebe-178e7dcc48d9.png)
　
ログイン後はサイドメニュー有り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/2567e3f3-db45-8848-503d-9bff6ddb7bf2.png)

## まとめ
とりあえずレイアウトは分けれたのですが、これがベストなのかよく分からず…
フロントエンドはあまり得意ではないので、公式ドキュメントや記事を探したいと思います。
コマンドでブラウザを開いてgoogle検索をしよう！

vimerの皆さん，ターミナルで操作することが多いみなさん，何かググりたい時ブラウザを開いて検索する...要するに**いちいちブラウザを開いて検索をする**のがめんどくさいなあと思いませんか？
つまり，**ブラウザを開く手間がある**ことが嫌なのです．本記事ではシェルスクリプトでブラウザを開いてGoogle検索を行う関数を作成する手順を紹介する．

# 結論
結論を先に言うと，openコマンドを使えば検索は...できる
```sh
open "https://www.google.com/search?q=hello+world"
```
これを実行すればターミナルでブラウザを開いてhello worldをgoogle検索できる．
ここで...
**いちいちhttpsとかgoogleとか入力するのがめんどくさい！**
と思いますよね？
ここでなんとかこの手間を省きたいですね！

イメージとして以下のコマンドで検索できるといいですね
```sh
s hello world
```


# シェルスクリプトで楽しよう
シェルスクリプトを使用して，ターミナルから直接ブラウザを開いてGoogle検索を行う機能を実装できる．

```~/.zshrc
function s() {
    local search_query="$@"
    local encoded_query=$(echo "$search_query" | sed 's/ /+/g')
    open "https://www.google.com/search?q=$encoded_query"
}
```

この関数は，以下の手順で動作する．

1. 関数名 s を定義する．

2. 引数として渡された検索クエリを $@ で受け取り，search_query 変数に格納する．

3. sed コマンドを使用して，検索クエリ内のスペースを + に置換し，URLエンコーディングの簡易版を実現する．

4. open コマンドを使用して，デフォルトのブラウザでGoogle検索URLを開く．


# どのファイルに書く？使用例は？
この関数を使用するには，シェルの設定ファイル（.bashrc や .zshrc など）に関数を追加し，シェルを再起動するか設定を再読み込み(ターミナルの再起動)をする必要がある．

:::note info
以下のコマンドで.zshrcの設定を適用できる
```
source ~/.zshrc
```
:::


```sh
s hello world
``` 

これで「hello world」という検索クエリでGoogle検索が行われ，結果がデフォルトのブラウザで表示される．

:::note warn
**注意点**
この実装は主にmacOS向けであり，open コマンドを使用している．Linux系OSでは xdg-open，Windowsでは start コマンドを使用する必要がある．また，より堅牢なURLエンコーディングを行うには，jq などのツールを使用することが推奨される．
:::

この関数を使用することで，コマンドラインから迅速にWeb検索を行うことができ，開発者の作業効率向上に貢献すると思います．
余裕があればターミナル上で動作するブラウザをchromiumベースで作ってみようと思う．

> 有識者の方chromiusのこと教えてください
「ATOM TailBAT」のバッテリーが過放電された場合の対応方法

4年前(2020年)に2つ購入していた「ATOM TailBAT」のバッテリーが充電されなくなっていました。

https://www.switch-science.com/products/6348?srsltid=AfmBOoqdEiFApxwkCEkuDdlL8kIEyRjrLv0ZUhFbCLvnlgGRiw0G6O6T

長年使っていなかったため過放電してバッテリーがダメになってしまったようです。

下記サイトによればバッテリーを一度取り出し、充電器で充電すれば回復するようです。

http://kio-denshi.com/hp/index.php?Technical%20Information%2Fetc.%2FM5StickC%20Error22

## 試したこと

下記のバッテリー充電器を購入しました。
充電基板10枚で740円となかなかのお得プライス。

https://www.amazon.co.jp/gp/product/B0D1FR67JK

「ATOM TailBAT」の蓋を開けてバッテリーを基板から外します(要はんだごて)。

![2024-10-14_10-54-15_167.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71746/a231d6e8-2e92-bc3c-1d9f-a0683d0e9b0b.jpeg)

下記のように充電基板を使いバッテリーを充電します。

![2024-10-14_11-00-28_173.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71746/751a29a1-9053-9378-aeb7-6c2a0836b054.jpeg)


## 結果
10分程度充電基板でバッテリーを充電した結果、「ATOM TailBAT」のガワに戻してもきちんと充電されるようになりました。
めでたしめでたし。
メールサーバーの移行を「5W3H」でまとめ


# メールサーバー移行の振り返り
### 【結論】
- メールのセキュリティは上り、取引先の相手にメールが届かないことは無くなった
- POP形式からIMAPに代わり、PCが壊れてメールが過去のデータを取り出すことから脱却
- Outlookを利用できなくなったハレーション解決に現在も取り組んでいる

### 良かったこと
- DKIM, DMARCが対応して、メールが迷惑メールとして登録されなくなったこと
- POPからIMAPに代わって、メールの同期と一人当たりのメール容量が増えたこと
    - 前までは会社全体で40GBだったので、もうそれだけでも最高
- 多くの迷惑メールがブロックされるようになったこと

### 良くなかったこと
- Outlookが使えなくなったことによる現場の厳しいご意見をいただき、執行役員にOutlookを含めた予算を承認をいただくことができなかった
- DKIMが「1024bit」しか自社のドメインが対応していなかったこと
    - ここに関しては、大本のドメイン管理をしている会社との交渉なので、Googleなどの動向をみて、ドメイン管理会社と相談と交渉
- PPAPの対策までできなかった
    - 暗号付きZIPファイル問題はまだ解決していないので、ここは解決したい

# 5W3H
## When：いつ（日時・期限）
- goolgeの最終通告：2024年の6月1日まで
https://news.mynavi.jp/techplus/kikaku/20240227-2886790/

## Where：どこで（場所）
- 子会社含めた全会社

## Who：誰が（対象者）
- 自社ドメインで管理を行っている全ユーザー

## What：何を（目標・要件）
- 目的
    - 取引先にメールが届かないことを無くす
- 要件
    - DKIM, DMARCが対応していること
    - 受信メールで、セキュリティを上げて、PCのウィルスを感染のリスクを減らす　

## Why：なぜ（理由）
- 入社時から、相手に迷惑メールとして届いている課題があると伝えられた
- 会社社員が毎日ウィルス付きの変なメールを送られている実態がある
- Googleより通達があった、メールのDKIM, DMARC対応が、現在契約しているメールサーバーを含めた会社では実施しないとの連絡あり（2023年11月時点の回答）
https://www.nikkei.com/article/DGXZQOUC156UY0V11C23A2000000/


## How many：どのくらい（規模・数量）
- 250名の社員＋採用などの専用メールアカウント 300のアカウントを移行

## How much：いくらで（金額）
すみません。ここはシステム費と人件費もかかわるので、公開はNGとさせてください。

## How：どのように（方法・プロセス）
### 移行前
- 現在のメールの送信するときのツールをヒアリング
    - 事務所内では、POPを設定したOutlookでメールを送信
    - 営業さんの出先では、Gmailに転送して、そこから送っている
- 3社見積とデモ環境を利用して検証
    - 執行役員に決済をいただく

### 移行時準備
- 各支店長・執行役員に上長のお力を借りて説明
    - 移行日程とフォローについて説明
- システム連携部分の洗い出し
- 移行時の設定値と移行後のテストメール送信検証のチェックリスト化
    - メールサーバーの値、DNS、SPF等
    - 問題発生時の切り戻し手順準備

### 移行日
- チェックリストに従って設定・テスト
※切り戻しが無くてほんとによかったです※

### 移行後
- outlookが使えなくなったので、社内から厳しいご意見をいただき、フォロー会を実施
- 専用のアプリがあるが、使いにくい声や不具合があるので、開発会社にバグレポートをともに提出して改善要望を随時依頼

# 終わりに
入社後、情シスとしての成果として、メールの移行を題材に記載を執筆しました。
いくつかの会社でも、まだメールの改善はあると思うので、今回の記事がメールサーバーの改善を検討している方へ少しでも役に立てれば幸いです。
Webエンジニアが業務で最低限使えなければいけないツールたち

## GitHub

GitHubは、ソフトウェア開発のためのプラットフォームで、主にソースコードを管理し、バージョン管理を行うために使われます。Gitというバージョン管理システムをベースにしており、プロジェクトの履歴を追跡し、チームでの共同作業を効率的に進めることができます。

https://github.co.jp/

## Visual Studio Code(VSCode)

Visual Studio Code（VSCode）は、Microsoftが提供する無料の軽量なコードエディタです。多くのプログラミング言語をサポートしており、拡張機能によってさらに機能を追加することができます。

また、上記で述べたGitHubもエディタのUI上で利用することができます。

https://code.visualstudio.com/

## ChatGPT

ChatGPTは、OpenAIが開発したAIチャットボットで、自然な言葉を使って人と会話できるプログラムです。膨大なデータを元に学習しており、質問に答えたり、アイデアを提案したり、文章を書いたり、プログラムの手助けをしたりできます。

孫正義さんか誰かが、「ChatGPTを使っていない人は人生を悔い改めよ」と言っていたくらい必須のツールです笑

https://chatgpt.com/g/g-PGPnMa4Ph-ri-ben-yu-rokuin

## Linux

Linuxは、オープンソースのオペレーティングシステム（OS）の一つです。無料で利用でき、プログラマーやサーバー管理者などに広く使われています。WindowsやmacOSと同じく、コンピュータを動かすための基本的なソフトウェアですが、特にサーバーや開発環境での使用が多いです。

開発エンジニア、インフラエンジニア問わずLinuxについての知識は必須だと思っています。

https://ja.wikipedia.org/wiki/Linux

## iTerm2などのターミナル

WindowsならPowerShellですが、ここではMacを利用しているとして説明します。

ターミナルは、コンピュータと対話するためのコマンドラインインターフェースです。グラフィカルな画面ではなく、テキストベースでコマンドを入力して操作します。ファイルの管理やソフトウェアの実行、システム設定の変更などを行うことができます。

最近コマンドを利用して作業をするエンジニアが減ってきていると感じています。
ですが大きな声で言います。
できるエンジニアは全員コマンドが使えます！

https://iterm2.com/

## Google スプレッドシート

Googleスプレッドシートは、Googleが提供する無料のオンライン表計算ツールです。Microsoft Excelのようなスプレッドシート機能を持ちながら、インターネットを通じて複数のユーザーがリアルタイムで共同編集できることが特徴です。

正直、Excelが使えなくてもxlsx拡張子にエクスポートできるのでスプレッドシートさえ使いこなされば時に問題ないと思っています。シンプルで使いやすいですし。

https://workspace.google.com/intl/ja/products/sheets/

## Docker

Dockerは、アプリケーションを効率的に動かすための「コンテナ」と呼ばれる軽量な仮想環境を作成・管理するツールです。これにより、アプリケーションとその必要な環境をまとめてパッケージ化し、どのマシンでも一貫した動作を実現できます。

https://www.docker.com/ja-jp/

## Wayback Machine

Wayback Machineは、インターネットアーカイブが提供するウェブサイトのアーカイブサービスです。過去のウェブサイトのスナップショット（画面や内容）を保存しており、誰でも過去のウェブページを閲覧できます。

https://warp.da.ndl.go.jp/contents/reccommend/world_wa/world_wa02.html

## Postman

Postmanは、APIの開発やテストを簡単に行うためのツールです。APIリクエストの作成、送信、レスポンスの確認ができ、APIの動作確認やデバッグに便利です。

https://www.postman.com/

## Clarity

Clarityは、Microsoftが提供する無料のウェブ解析ツールです。ウェブサイトのユーザー行動を可視化し、サイトの改善に役立てることができます。訪問者のクリックやスクロールのパターン、ページの閲覧時間などを詳細に記録・分析します。

https://clarity.microsoft.com/lang/ja-jp

## phpMyAdmin

phpMyAdminは、ウェブブラウザ上でMySQLやMariaDBのデータベースを管理できるオープンソースのツールです。データベース操作をGUIで簡単に行えるため、SQLコマンドを直接書かなくてもデータベースの操作が可能です。

https://www.phpmyadmin.net/
【UMTP】L1, L2に合格しました

UMTP L1, L2に合格しました。
社会人２年目になりました。

## 取得動機
社内で使うWebサービスを開発しているときにUMLを使ったりしていますが、非情報科出身ということもあり、全くわかりませんでした。そこで、UMTP L1くらいは取れたらいいねと言われました。UMLについて全くわからないし、勉強するいい機会だと感じL1, L2を受験することに決めました。

## 勉強法
### 点数
L1：90/100(合格点80)
L2：90.24~/100(合格点75)

### 勉強期間
３週間(L1：1週間　L2：2週間)
平日２時間、休日５時間ほど

### 参考書
↓L1の参考書

https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E7%89%88-UML%E3%83%A2%E3%83%87%E3%83%AA%E3%83%B3%E3%82%B0%E6%8A%80%E8%83%BD%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93-%E5%85%A5%E9%96%80%E3%83%AC%E3%83%99%E3%83%AB-%E5%95%8F%E9%A1%8C%E9%9B%86-UML2-0%E5%AF%BE%E5%BF%9C/dp/4774132454/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=14B4VHM2E8LDX&dib=eyJ2IjoiMSJ9.j9Yqp1Z7UrlmO85v9YfjcwHch6ntG9htKPbp0sNnu-AGmv7a_79bqMWba2H4gXDdC27FiUv-1LPYWkjDSq3MeoiQnr3qkIF2HGcmvBRt5p4.YY6N1dQ_ZlGJqHsogb7MZGt1wHWTR5GedULiXZCvPKE&dib_tag=se&keywords=umtp&qid=1728907477&s=books&sprefix=umtp%2Cstripbooks%2C212&sr=1-3

↓L2の参考書

https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5UML%E3%83%A2%E3%83%87%E3%83%AA%E3%83%B3%E3%82%B0%E6%8A%80%E8%83%BD%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93%E5%95%8F%E9%A1%8C%E9%9B%86-L2%E5%AF%BE%E5%BF%9C-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%82%AA%E3%83%BC%E3%82%B8%E3%82%B9%E7%B7%8F%E7%A0%94-%E7%AB%B9%E6%94%BF-%E6%98%AD%E5%88%A9/dp/4844335596/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=14B4VHM2E8LDX&dib=eyJ2IjoiMSJ9.j9Yqp1Z7UrlmO85v9YfjcwHch6ntG9htKPbp0sNnu-AGmv7a_79bqMWba2H4gXDdC27FiUv-1LPYWkjDSq3MeoiQnr3qkIF2HGcmvBRt5p4.YY6N1dQ_ZlGJqHsogb7MZGt1wHWTR5GedULiXZCvPKE&dib_tag=se&keywords=umtp&qid=1728907477&s=books&sprefix=umtp%2Cstripbooks%2C212&sr=1-2

(↑アフィエリエイトではありません)

UMLが全くわからない人はL1から勉強したほうが理解しやすいです。
かつての僕のように、アクティビティ図？継承？みたいな人でもこの参考書をやりこめば合格できると思います。

ちなみに、L2は受験センターか、ネットワークがある環境ならどこでも可のどちらかで受験ができ、受験センターで受験すると合格点数が65点、どこでも可なら75点になります。
しかし、合格点数が低いから受験センターで受けようとするのはやめた方がいいです。受験センターで受けると部分点がありません。L2は特に、大問一つに対して回答することが十数問あったりします。その問題で一つでも間違えてしまうとその大問は０点になってしまいますが、環境があればどこでも可受験なら部分点が付きます。自信に満ち溢れている人なら受験センターで受験するのもいいかもしれません。
僕はL1は受験センター、L2はネットワークがあればどこでも可受験でした。(L2は受験センターでも受験)

## 終わりに
UMTP L1, L2に合格してそういった図に対して苦手意識がなくなりました。実務でがっつり使用しているわけではないのですが、たま〜に使うのでより理解しやすくなりました。
かなりマイナーな資格ではありそうですが、応用情報のデータベース分野などでUMLが出てきたりするので活かせます(?)
L3も近いうちに取りたいですね〜
Qiitaにはじめての投稿、マークダウン記法をいじってみた。

# 初めてのQiita、マークダウン記法を練習する
##①見出し

 # 見出し１
 ## 見出し２
 ### 見出し３
 ## 見出し２
 #### 見出し４

## ②箇条書き
* リンゴ
* バナナ
* メロン

## ③チェックボックス
- [x] １２日午前
- [ ] １２日午後 
- [ ] １３日午前
- [x] １３日午後

## ④テーブル
|   | 立川 | 新宿 |
| --- | --- | --- |
| 昼間滞在人口 | 少ない | 多い |
| 家賃 | 安い | 高い |

## ⑤文字装飾
**全部うまくいく**
_nantehida_
日本語は斜体にできなかった。
できてる人もいるらしいけど

## ⑥コードの挿入

```python:hello.py
def Hello:
    print("Hello World")

Hello()
```

## ⑦リンクの挿入
[Youtube](https://www.youtube.com/watch?v=S_A6a3ukdWo&t=1301s)
Cypressを使ったE2Eテストの設定方法

# はじめに
本記事では、Cypressを使ってNext.jsアプリケーションのE2Eテストを設定し、ヘッドレスモードでの実行方法を紹介します。

# Cypressのインストール
まず、Cypressをプロジェクトにインストールします。devDependenciesに追加することで、開発環境でCypressを利用できるようになります。
```
npm install cypress --save-dev
```
# Cypressの初期化
Cypressを初期化し、必要な設定ファイルやディレクトリを自動生成します。
```
npx cypress open
```
このコマンドを実行すると、次のようなフォルダとファイルが生成されます。

- cypress/フォルダ: Cypress関連の設定やテストファイルが保存される場所
- cypress.config.tsまたはcypress.config.js: Cypressの設定ファイル


# cypress.config.tsの設定
Cypressの設定ファイルを編集し、Next.jsのローカルサーバーにアクセスできるようにします。baseUrlを指定することで、cy.visit()の際に省略してURLにアクセスできます。
```cypress.config.ts
export default defineConfig({
  e2e: {
    baseUrl: 'http://localhost:3000',
    projectId: 'your-project-id',  // Cypress Dashboardで取得したprojectIdを入力
    supportFile: false,
    video: true,
    screenshotOnRunFailure: true
  },
});
```

# package.jsonにテスト実行スクリプトを追加
テストを簡単に実行できるよう、package.jsonにスクリプトを追加します。ここでは、Cypressをヘッドレスモードで実行する設定も行っています。

```package.json
{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "cypress": "cypress open",
    "cypress:headless": "cypress run",  // ヘッドレスモードでテストを実行
  }
}
```

# テストファイルの作成
次に、cypress/e2eフォルダ内にテストファイルを作成します。以下は、/ルートページにアクセスし、h1タグに特定のテキストが含まれているかを確認するテストコードです。
```cypress/e2e/index.cy.ts
describe('Index Pages', () => {
  it('should visit the index page', () => {
    // ルートページにアクセスしてh1タグに"hello world"が含まれているか確認
    cy.visit('/');
    cy.get('h1').contains('hello world');
  });
});
```

# Next.jsサーバーの起動
```
npm run dev
```

# テストの実行
GUIモードでのテスト実行
CypressのGUIを使ってテストを実行する場合は、次のコマンドを実行します。
```
npm run cypress
```
ヘッドレスモードでのテスト実行
ヘッドレスモードでテストを実行する場合は、次のコマンドを使用します。
```
npm run cypress:headless
```

# 8.	テスト結果をターミナルで確認
ヘッドレスモードでテストを実行すると、結果がターミナルに表示されます。必要に応じて、Cypressは自動でスクリーンショットやビデオを保存し、失敗したテストのデバッグに役立てることができます。
WSLを外部ストレージで使う

## 概要
WSLのディストリビューションを外部ストレージにインストールして使える方法を紹介します。
今回は例として、Ubuntu-22.04をEドライブに移行する手順を上げます。

## 手順
### 事前準備
`wsl --install`から直接インストールことは出来ないようなので、
新規でインストールする場合は事前にUbuntu-22.04をインストールして下さい。
```powershell
wsl --install Ubuntu-22.04
```
なお、`wsl.conf`の内容は移行できないようなので、バックアップを取っておいた方がよさそうです。
[wsl.confってなに？](https://dev.classmethod.jp/articles/learn_wsl2_wslconf/)
### 下記スクリプトを順に実行
エクスポート・インポート時のフォルダは適宜作成してください
```powershell
wsl --export Ubuntu-22.04 "E:\wsl_export\ubuntu-22_04.tar" # エクスポート
wsl --unregister Ubuntu-22.04 # Cドライブ上のubuntuを削除
wsl --import Ubuntu-22.04 "E:\wsl_import\ubuntu-22_04" "E:\wsl_export\ubuntu-ex.tar" # Eドライブ上にインポート
wsl -d Ubuntu-22.04 # 起動確認
```

## 補足
#### 実行確認時に移行前と挙動が違う場合
上述の`wsl.conf`を`/etc/`配下に移す or 転記してください
#### `wsl`を実行すると別のディストリビューションが起動する
一度消しているのでデフォルト設定されていた場合、外れてしまいます。
`wsl --set-default Ubuntu-xx.xx`で戻してあげて下さい

## 参考文献
[How to set default user for manually installed WSL distro?](https://superuser.com/questions/1566022/how-to-set-default-user-for-manually-installed-wsl-distro)
[Installing WSL on another drive in Windows](https://dev.to/mefaba/installing-wsl-on-another-drive-in-windows-5c4a)
アセットパイプラインについて（※超初心者の記事です）

今日も引き続きrailsについて。
タイトルに毎度悩みますが、超初心者の人が書いてるので、
他のすごい人たちが見てがっかりしないようにタイトルに超初心者と入れてみました。

今、練習問題のwebアプリケーションの作成をしています。
webアプリのトップページにいい感じの画像を背景画像として表示させたいと思い、
記述例をもとに入力していました。

そしてCSSファイルに入力しながら思ったこと。
なんで、画像のurlの設定が、画像のファイルの保存先と一致しないのか？
例で示すと
「~/assets/images/sample.jpg」が画像ファイルの保存先なのに、
背景画像として登録するときにはなぜ、
「~/assets/sample.jpg」となるのか理解ができませんでした。

そしてこの疑問を一生懸命ChatGPTに質問しまくり、検索しまくりでやっと納得した答えが、
railsにはアセットパイプラインという便利機能があり、「/assets/ファイル名.jpg」と入れるだけで画像の設定をすることができる、ということでした。
ちなみにこれを知るまでの数十分、「/assets/images/sample.jpg」で何度もエラーを起こして意気消沈していました。
ChatGPTに聞くまでアセットパイプラインという言葉も知らなかった私。ChatGPT先生はいつも私のつたない説明で意図を組んでくれてすごい！

ついでにassetsのフォルダについて全く理解していなかったのでどういうことなのか確認もしました。
・assetsフォルダは、静的なファイル（CSS、JavaScript、画像、フォントなど）を保存する場所です。
・静的なリソースをまとめて管理し、効率的に配信するためにある。
・静的なファイルとは、サーバー側で動的に処理されず、そのままブラウザに送信されるファイルのこと。

確かに、assetsフォルダを見直したら、config、images、stylesheetsしかない！
（configはRailsのアセットパイプラインに関する設定ファイルを管理するためのフォルダらしい）
色々調べるとアセットパイプラインはフロントエンド側の超重要機能だな、と超初心者の私でも感じました。


様々な機能があるアセットパイプラインですが、私にはまだ理解しきれないのでこれからも課題に取り組みながら学んでいきたいと思います。
vbsの作法 その90

# 概要
vbsの作法、調べてみた。
vbs見つけたので、やってみた。

# 参考にしたページ

https://qiita.com/seastar3/items/95304175cabc6d1a128c

# サンプルコード

```
Class window_class
	Private objIE
	Private namae
	Private hyoujibun
	Private tate, iro, moji
	Private Sub Class_Initialize
		namae = "窓1"
		iro = "lightgreen"
		Set objIE = CreateObject("InternetExplorer.Application")
		objIE.Visible = true
		objIE.Top = 50
		objIE.Left = 100
		objIE.Width = 300
		objIE.Height = 200
		objIE.Navigate("about:blank")
		objIE.StatusBar = False
		objIE.ToolBar = 0
		objIE.Document.Write("<html><head><title>ウインドウ オブジェクト " & namae & "</title></head>")
		objIE.Document.Write("<body bgcolor='" & iro & "'>")
		objIE.Document.Write("<div id='div-id-1'></div><br>")
		objIE.Document.Write("<div id='div-id-2'></div><br>")
		objIE.Document.Write("<div id='div-id-3'></div><br>")
		objIE.Document.Write("</body></html>")
	End Sub
	Private Sub Class_Terminate
		MsgBox "ウインドウオブジェクト " & namae & " 解放", vbOKOnly + vbInformation, "ウインドウオブジェクト インスタンス " & namae
	End Sub
	Public Sub set_namae(meisyou)
		namae = meisyou
	End Sub
	Public Function get_namae()
		get_namae = namae
	End Function
	Public Sub moji_hyouji(moji)
		objIE.Document.getElementById("div-id-1").InnerText = moji
	End Sub
	Public Sub idou(x, y)
		objIE.Left = x
		objIE.Top = y
	End Sub
	Public Sub henkei(w, h)
		objIE.Width = w
		objIE.Height = h
	End Sub
	Public Sub ironuri(iro)
		objIE.Document.bgColor = iro
	End Sub
	Public Sub jyouhou_hyouji()
		MsgBox "ウインドウオブジェクト " & namae & " サイズ ", vbOKOnly + vbInformation, namae & " ウインドウ 情報"
	End Sub
	Public Sub tojiru()
		objIE.Quit
	End Sub
End Class


Dim w1
Set w1 = new window_class
w1.set_namae("ウインドウ１")
w1.henkei 400, 400
w1.idou 10, 10
w1.moji_hyouji "草原"
w1.ironuri("white")
w1.jyouhou_hyouji()
msgbox "文字を変更"
w1.moji_hyouji "さかな"
msgbox "ウインドウを閉じます。"
w1.tojiru()
Set w1 = Nothing





```

以上
Google Classroomでのファイル共有など

Google Classroomでの共有ファイルはGoogleドライブ内に保存され、クラスルームでの共有操作により、必要に応じ、適切なアクセス権が与えられたり、コピーされたり、とても便利です。クラスルームで使用するファイルはGoogleドライブアプリからも閲覧、操作できます。

# １　クラスのドライブフォルダとGoogleドライブ
Googleクラスルームで共有したファイル（連絡事項に添付、課題で配付等）は、Googleドライブにあります。クラスのページには「クラスのドライブフォルダ」へのリンクがありますが、一つのフォルダを指しているのではなく、ユーザーにより（教師と生徒それぞれ）違っています。クラスフォルダにファイルを入ただけではファイルは共有されません。投稿・配付でファイル・リンクを添付すれば、アクセス権が適切に変更され、共有されます。
![20241009_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157289/a767e972-dade-1aa3-5ae1-64a6aaa01ce2.png)
「クラスのドライブフォルダ」（クラスフォルダ）は、
オーナー教師の、マイドライブ/Classroom/[クラス名]
生徒の、マイドライブ/Classroom/[クラス名]
があります。
オーナー以外の教師のマイドライブ/Classroomにはオーナー教師のクラスフォルダへのショートカットがあります。生徒のクラスフォルダには、その生徒がクラスに投稿したファイルや教師から配付されたファイル（のリンク）が入ります。
クラスフォルダ以外にもクラスの共有ファイルがあります。Googleドライブにあるファイルを投稿した場合、クラスフォルダに入らずにアクセス権が適切に変更されて共有されます。

# ２　特定のフォルダをクラスで共有する
クラスフォルダ以外でもクラスでファイルを共有することが可能です。Googleドライブの特定のフォルダをクラスのメンバーと共有したい場合、クラスのグループIDがありますので、それに閲覧なり編集なりの権限を設定をすればよいわけです。クラスルームで共有の操作をした場合、それにあうようなアクセス権がつきます。例えば、ストリームへの投稿で特定のフォルダへのリンクを添付すると、フォルダのアクセス権は、生徒は閲覧者、教師は編集者となるように変更されます。この場合、投稿を削除してもアクセス権はそのままなので、必要であれば手動で戻す必要があるかもしれません。

# ３　クラスのグループID
教師のグループID（「[クラス名]の担任教師」、teacherGroupEmail）とユーザーのグループID（「[クラス名]」、courseGroupEmail）があります。後者には教師も含まれます。
グループIDは、GoogleAppsScriptでスクリプトを書けば、GoogleAPIからちゃらっと得ることもできますが、スクリプトを使わなくても調べることができます。
（GoogleAppsScriptを使用する場合はこちらを参考にしてください 
[Google ClassroomのcourseId等一覧を取得する（その2）](https://qiita.com/freshcl/items/2dba10222f2a0487fe23)） 

## （１）課題を出したことがある場合
教師が課題を出したことがあり、「各生徒にコピーを作成」してファイルを添付していれば、クラスフォルダのTemplates-Do Not Editフォルダの中にファイル[Tmplate]〜があります。そのアクセス権を見てみてください。教師、ユーザー両方のIDがわかります。また、クラスフォルダの中に課題名フォルダがあり、その中に各生徒用のコピーがあって生徒のマイフォルダのクラスフォルダには自分のファイルへのリンクがあるので、生徒側からも教師のグループIDはわかるはずです。
## （２）ファイルを投稿した事がある場合
ストリームへの投稿などでファイルを添付したことがあれば、そこから調べることが可能です。ローカルからアップロードした場合はクラスのフォルダ内にファイルが入り、Googleドライブからの場合はそのファイルのアクセス権が変わっています。該当ファイルのアクセス権を調べれば、ユーザーのグループIDがわかります。これは、生徒ユーザーでも、投稿が可能であればできます。

## （３）カレンダーから調べる
ファイルを投稿していない場合は、教師なら、Googleカレンダーから調べることも可能です。カレンダーのページの左の方で、クラス名の横の︙から、「カレンダーの設定と共有」の中で見ることができます。
![20241009_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157289/1cade323-266e-acd1-5714-cede6ec39c05.png)
以上、Google Classroomでのファイル共有についてまとめてみました。仕組みがわかっていればGoogleドライブから色々操作するのもよいと思います。

--
参考 
- [Google Classroom クラスフォルダとGoogle Driveの違い（@ganechi01）](https://qiita.com/ganechi01/items/9507b96647e425cea11a)
- [Google Classroom と連携した共有ドライブの使い方（ともかつのノート）](https://note.com/tomo_saka/n/ned7020b9df89)
- [クラスのドライブフォルダ「以外」のフォルダやデータをClassroom生徒に共有する方法（Y. Mashima）](https://gsuite.paidagogos.me/?p=813)
Qiita初投稿　 自己紹介と今後について

# はじめに

noteとかabemaのブログしか書いたことないので何書くか正直迷いますね…
自己紹介でも書いときましょう。
地方文系学部3年です。
プログラミングの経験としては、

・C#（インターンで少し）
・C（ポインタできない）
・R（授業で履修した程度）
・Java（←エアプw）
です。

一つ一つ解説してきますね。
C#は、Unityでの開発インターンで使ってます。5か月くらいですが、学ぶというより開発がメインなのでそんなに知識がない自信があります！（←胸を張るな）
Cは、「苦C」を兄が持ってたので少しやりました。でもポインタがわからなくてやめました（）
Rは、統計の授業でデータの読み込みから単回帰分析（y = ax + b)までやりました。
Javaについては、private static void main(){}

という暗号を覚えただけなので経験に入らないかもしれませんが。。。

Pythonは最近始めました。コーディングテストで使いやすい言語らしいので、、、

# 始めたきっかけ
今就活をしていて、感じることがあったんです。
それは、、、　

**「開発」をこの目で確認できるようにしたい…！！**

ということです。就活で企業様にエントリーするため「マイページ」なるものに登録するのですが、
「Githubなど開発をアピールできるものがあればお書きください」という設問の回答に何か書きたい…！
そんな思いからこのブログをはじめました。


# 今後何を書いていくか
書いていく候補としては
・Python
・C#（Unity）
・R

の三つで考えています。
Unityについてはほんの少しですが、エラー解消について書けるかなと思います。でも自信がないのでRから書いてこうかなとも思ってまする。

# 最後に
保険をかけておきます。　一応、どの言語も初学です。　正直まだよちよちの段階です。
もしミスがあったらさりげなく教えてあげてください。

次の記事では以下の二つどちらかを書こうかなと思います。

1.Rのファイル読み込みについて
・csvファイルの読み込み
・Rでのデータ表示
・簡単な分析

2.Unityでの開発について
・共同開発でのローカルとグローバルの違い
・エラーの事例と対処方法

です。

今後ともよろしくお願いします！

もしよければ見ていってください！
016 AI屋さんの　LLMに２００万トークン全文入力と「ずんだもん」とサーバーレスと私　実践編

AI屋さんの　LLMに２００万トークン全文入力と「ずんだもん」とサーバーレスと私　実践編

LLMとvoicevoxとstreamlitとdockerとcloud runで
LLMに２００万トークン全文入力　追加学習ずみの専門分野特化のLLMの作り方


完成イメージ
お喋り　ずんだもん先生　の「吾輩は猫」なのだ。

https://zunda-ghc4uieygq-an.a.run.app

https://
zunda-ghc4uieygq-an.a.run.app


ずんだもん先生　のためにvoicevoxのサーバーを　サーバーレスに　dockerイメージをデプロイしてみましょう。
簡単です。

dockerイメージを指定してあげます。
ポートは　50021　です。
メモリは　2ギガ以上　推奨です。


![スクリーンショット 2024-10-13 21.55.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/7dbb9924-116c-67f8-2030-755d52cd23ca.png)


いくつか　注意点
とっても簡単なのは良いのですが、あまりにも簡単すぎます。
機会があれば、サーバーありで建てるのも楽しいです。
ダウロードして、fastAPIとWEBサーバーを起動するだけです。
あと、実践派としてはローカルの物理マシンが現実的な場合も多いかもしれません。むしろ前回の方が近いです。

そうこうしている内に、あっという間にデプロイ完了です。
もはや、チート技です。


![スクリーンショット 2024-10-13 23.26.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/8df8c665-2dd4-e9cb-e54e-5e497ed1ae4e.png)



クラウドにも、動く環境を構築できました。

　→voicevox　ローカル
　→pythonで　実行
　→voicevox　クラウド（今回ここ）
　→pythonで　実行
　→streamlit　クラウド
　→完成

クラウドに、ずんだもん先生のための　voicevox サーバーが完成です。
中身は、pythonの　fastAPI　で出来ています。
あとは、使うだけですね。


動作確認は、前回と同等です。
URLだけ修正です。

https://qiita.com/bono0/items/502248b9bb64d797eb0e



公式　取説参照

echo -n "こんにちは、音声合成の世界へようこそ" >text.txt

curl -s
-X POST
"127.0.0.1:50021/audio_query?speaker=1"
--get --data-urlencode text@text.txt> query.json

curl -s
-H "Content-Type: application/json"
-X POST
-d @query.json
"127.0.0.1:50021/synthesis?speaker=1"> audio.wav


無事に、音声ファイルが出来ていれば
ずんだもん先生の完成です。

念の為、pythonで書いたらこんな感じです。


![スクリーンショット 2024-10-14 8.21.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/4a4b5a8c-c5de-a11d-9691-ab57d761df13.png)




import requests
import json

url_query = "http://127.0.0.1:50021/audio_query?speaker=1&text=こんにちは、音声合成の世界へようこそ"  # httpを追加
response_query = requests.post(url_query)

url_synthesis = "http://127.0.0.1:50021/synthesis?speaker=1" # httpを追加
headers = {"Content-Type": "application/json"}
response_synthesis = requests.post(url_synthesis, headers=headers, json=response_query.json())  # jsonパラメータを使用


if response_synthesis.status_code == 200:
    with open("audio.wav", "wb") as f:
        f.write(response_synthesis.content)
    print("Successfully generated audio.wav")
    




あと、pythonのwebアプリ・webapiの　streamlit、fastAPI、flask、gradio、flet　なども　ポート８０８０で起動する設定でdockerイメージにしてから　サーバーレスへデプロイする方法は　どれも今回とほぼ一緒です。web画面をポチポチするだけの簡単操作です。
サーバーレスなのでゼロ円〜、維持もメンテもクラウド任せ、超ニッチ用途のクラウドサービスも気楽に建てまくれます。
遍く、自分専用LLMとお喋りしながら　お仕事できます。


もはや、pythonひとつで　概ね全部作れそうな気がします。
何処かの誰かが勝手に作った仕組みですが、サービスの範囲内の利用であれば、知っていると圧倒的に便利です。

AI屋さんが独りで　開発、運用、保守　を簡単に行えます。
是非、皆さんもお試しください。




目次

https://qiita.com/bono0/items/dc1d000c98af7e07c9a7


無事に

　AI屋さんの　LLMに２００万トークン全文入力と「ずんだもん」とサーバーレスと私　実践編

完成です。おめでとうございます。



ー続くー
VivadoでRun Simulationが出来ない件

# エラー内容
Vivadoで電圧シミュレーションをする際、下記エラーが発生しました。

```
boost::filesystem::status: ファイルにアクセスできません。: "C:\Users\username\AppData\Local\Microsoft\ WindowsApps\python3.11.exe/xsim.exe
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832603/19de627a-8be0-f870-4c18-d41b8772d3da.png)

# 原因
xsim.exeのファイルパスが誤っています。

# 解決方法
下記フォルダにxsim.exeを格納することで解決しました。
Vivadoでアクセス先の指定を試みましたが、指定方法が不明のため断念。

:::note warn
注意
usernameは各自のフォルダ名に変更してください。
:::
```
C:\Users\username\AppData\Local\Microsoft\ WindowsApps\xsim.exe
```
<br>
私の場合、xsim.exeは下記に格納されていました。
インストール先をデフォルトにされた方は、Cドライブにあると思います。

```
D:\Xilinx\Vivado\2024.1\bin\unwrapped\win64.o\xsim.exe
```
# エラー発生手順
Simulation / Run Simulation /Run Behavioral Simulation をダブルクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832603/d711badc-dccb-6748-4db7-6aff5047ad54.png)


# 経緯
「作ろう！CPU：基礎から理解するコンピューターの仕組み」という本を参照しVivadoをインストール(Vivado 2024.1)した後、電圧シミュレーションで上記エラーが発生しました。
書籍上のインストール先はデフォルトですが、私はDドライブにしたことが、今回の原因の可能性があります。
公式QAにおいても同様のエラーに遭遇されている方がいたが、回答がないため投稿しました。

もしVivado側でファイルパスの指定方法をご存じであればご教示願います。


# 参照(未解決の公式QA)
https://adaptivesupport.amd.com/s/question/0D54U00007vut6ESAQ/im-trying-to-run-the-behavioural-simulation-on-vivado-20232-but-it-showcases-the-error-given-below-boostfilesystemstatus-the-file-cannot-be-accessed-by-the-system-cusersadmin-appdatalocalmicrosoftwindowsappspipexexsimexe-

https://adaptivesupport.amd.com/s/question/0D54U00007ytDLSSA2/thank-you-for-your-assistanceafter-installing-vivado-20232-i-get-an-error-when-i-run-the-simulationcould-you-please-let-us-know-how-to-work-around-the-error
【基本情報】独学マラソン GPT先生と復習② Day 14

インプットとアウトプットの黄金比は「3：7」
心理学者アーサー・ゲイツ博士


# GPT先生、問題出して！

### **問題 1:**  
仮想メモリの役割に関する説明として正しいものを選びなさい。

A. メモリの容量を自動で増やす機能  
B. メモリが不足した場合、データをハードディスクに一時保存する仕組み  
C. メモリとCPU間のデータ通信を最適化する  
D. データを圧縮してメモリ使用量を減らす  

---

### **問題 2:**  
FIFO（First In First Out）方式でページアウトされるページはどれですか？

A. 最後に使われたページ  
B. 使用回数が最も少ないページ  
C. 最初にメモリに読み込まれたページ  
D. 一番長い間使用されていないページ  

---

### **問題 3:**  
次のうち、ハッシュ関数の特徴として正しいものはどれですか？

A. 同じ入力に対して異なる出力を返すことがある  
B. 入力が同じなら毎回同じハッシュ値を生成する  
C. ハッシュ値から元のデータを復元できる  
D. データを圧縮して保存するための技術  

---

### **問題 4:**  
ファジングテストの主な目的として適切なものを選びなさい。

A. ソフトウェアの実行速度を向上させる  
B. 大量の異常データを送り込み、脆弱性を発見する  
C. 通常の利用状況でのエラーを記録する  
D. データの暗号化アルゴリズムをテストする  

---

### **問題 5:**  
「プロトコル」の役割に関する説明として正しいものはどれですか？

A. データの圧縮方式を指定する  
B. 通信するための共通のルールを決める  
C. 仮想メモリのページング方法を決定する  
D. コンピュータのハードウェア構成を定義する  

---

### **問題 6:**  
VPNプロトコルの役割に関する説明として正しいものはどれですか？

A. 通信の経路を圧縮し、パフォーマンスを向上させる  
B. 暗号化された通信経路を提供し、安全なデータ送信を可能にする  
C. 通常のインターネット接続よりも高速な通信を保証する  
D. 物理的な専用回線を設置し、データ漏洩を防止する  

## 答えと解説

### **問題 1の答え:**  
**正解:** B  
**解説:**  
仮想メモリは、物理メモリが不足したときにデータをハードディスクやSSDに一時的に保存する仕組みです。ただし、仮想メモリは物理メモリよりも速度が遅いため、パフォーマンスが低下する可能性があります。

---

### **問題 2の答え:**  
**正解:** C  
**解説:**  
FIFO方式は、最初にメモリにロードされたページが最初に仮想メモリにページアウトされるアルゴリズムです。この方式はシンプルですが、頻繁に使われるページも早々に削除されてしまう可能性があります。

---

### **問題 3の答え:**  
**正解:** B  
**解説:**  
ハッシュ関数は、同じ入力に対して常に同じハッシュ値を返します。しかし、ハッシュ値から元のデータを復元することは非常に難しく、安全なハッシュ関数では実質的に不可能です。

---

### **問題 4の答え:**  
**正解:** B  
**解説:**  
ファジングテストは、大量の異常データをソフトウェアに送り込み、未知の脆弱性やバグを発見するためのテスト手法です。異常系テストの一種として、質よりも量を重視します。

---

### **問題 5の答え:**  
**正解:** B  
**解説:**  
プロトコルとは、通信するための共通のルールを指します。IPやTCPなどのプロトコルは、データの送受信方法を決定し、正確で効率的な通信を実現します。

---

### **問題 6の答え:**  
**正解:** B  
**解説:**  
VPNプロトコルは、暗号化された通信経路を提供し、安全にデータを送受信するために使用されます。代表的なVPNプロトコルには、L2TP/IPsecやOpenVPNがあります。これにより、物理的な専用回線を設置することなく、仮想的に専用回線を構築することが可能です。

<br>

# 感想
やっぱり理解を深めた内容は時間が経っても覚えているものである