OmniAICreator/Qiita-1.07M huggingface dataset:
log4j2やってみよう

## 素人なので色々な人のサイトをミクスチャーしてみましょう

## まずはeclipseを起動

### プロジェクトを作成

必要ないけど動的Webアプリで作成

## log4j2のファイルをダウンロード

https://logging.apache.org/log4j/2.x/download.html

以下のファイルをダウンロード

apache-log4j-2.22.0-bin.zip

## 3つのファイルを外部JARの追加を実施。

https://itsakura.com/eclipse_add_jarfile

追加したファイル

log4j-1.2-api-2.22.0.jar
log4j-api-2.22.0.jar
log4j-core-2.22.0.jar


## クラスフォルダを作成

https://itsakura.com/eclipse-add-classfolder

作成理由：log4j2は「log4j2.xml」というファイルを読み込む。
それがない場合はデフォルトのファイルを読み込む。（どこにデフォルトファイルがあるかは不明）
明示的に設定しないとファイル出力またはログレベルによっては出力できない。（ifnoレベルなど）

ちなみに私は
log4jというディレクトリをsrcと同じレベルに作った。
その中に「log4j2.xml」というファイルを作成

https://itsakura.com/java-log4j2-sample

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project>  
<Configuration status="off">

	<!-- Propertiesは、nameの値を変数として使える -->
    <Properties>
        <Property name="format1">%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %-6p %c{10} %m%n</Property>
       <!-- ログのフォーマット 
   		%dは日時。{}に日時の形式を指定
   		%tはスレッド名
   		%-6pはログレベル名称を左詰めで6文字分出力する。「debug」であれば後ろに空白１文字が追加される。
   		    但し、%-3pとしても名称は削られず「debug」として出力される。%6と-をとると右づめになる。
   		%c{x}は,例えばロガー名がorg.apache.commons.Fooのとき%c{2}の場合、commons.Fooが出力される
   		%mはログメッセージ
   		%nは改行
      -->
        <Property name="logfile">./log/testlog.log</Property>
        <Property name="logfile-archive">./log/testlog_%d{yyyy-MM-dd}-%i.log</Property>
    </Properties>
    
	<Appenders>
		<!-- コンソールに出力する設定 -->
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout>
				<pattern>${format1}</pattern>
			</PatternLayout>
		</Console>

		<!-- ファイルに出力する設定 -->
		<RollingFile name="logfile001" append="true" fileName="${logfile}"
			filePattern="${logfile-archive}">
			<PatternLayout>
				<pattern>${format1}</pattern>
			</PatternLayout>
			<Policies>
				//　1kBに達したらローテーションのファイルを作成する
				<SizeBasedTriggeringPolicy size="1KB"/>
			</Policies>
			//　ローテーションのファイルは、3つ持つ
			<DefaultRolloverStrategy max="3"/>
		</RollingFile>
	</Appenders>
	
	<Loggers>
		// trace以上のログを出力する
		<Root level="trace">
			<AppenderRef ref="Console" />
			<AppenderRef ref="logfile001" />
		</Root>
	</Loggers>
</Configuration>
```


## 最後にソースコード


https://tech.mamezou00000.com/entry/log4j2-kihon

```

package log4;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class Test {
	
	public static void main(String[] args) {
		// ロガーを呼び出します
		Logger logger = LogManager.getLogger("Logger");

		// INFOを出力します
		logger.info("INFOです");

		//WARNを出力します
		logger.warn("WARNです");

		// ERRORを出力します
		logger.error("ERRORです。");
		}
}

```

## 実行

実行→javaアプリケーション

ログが以下に出力されていることを確認

C:\pleiades\2022-12\workspace\log4\log

```
2023/12/04 21:56:09.647 [main] INFO   Logger INFOです
2023/12/04 21:56:09.653 [main] WARN   Logger WARNです
2023/12/04 21:56:09.653 [main] ERROR  Logger ERRORです。
```

わーい
AWS無料利用枠について、急な課金に慌てない程度に理解しよう

## はじめに

AWSには無料利用枠があるというのは有名な話ですが、私自身、無料利用枠について詳細には理解していなかったことに気づきました。<br>
というのも、先日（土曜日の夕方）、"AWS Free Tier limit alert"という件名のメールが個人メールアドレスに届きまして、しかも、使用した覚えのないサービスについて記載されていたため慌てたからです（笑）
今後、私と同様に慌てる方がいらっしゃるかもしれないと思い、記事にしました。
<br>

ちなみに届いたのはこんなメールです。AWSQueueServiceはAmazon SQSですが、使った覚えがありませんでした。
![メール画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619198/b8ec4ed4-a2b6-8f84-7973-defabfaadc76.png)


## AWS無料利用枠について改めて理解する

AWS無料利用枠には、12ヶ月無料、無期限無料、短期トライアルの３タイプがあります。
なお、AWS Organizationsの組織にリンクされたAWSアカウントが複数ある場合、無料利用枠を使えるのは１つのAWSアカウントだけだということです。
<br>

以下に、３タイプの無料枠にどのようなものがあるのかを記載します。
これらは参考情報にも記載した[AWS 無料利用枠](https://aws.amazon.com/jp/free/)のページで、無料利用枠のタイプでフィルタして確認することができます。

### 12ヶ月無料タイプ

AWSアカウントを使い始めて12ヶ月間、無料で利用できるタイプです。
例えば一例として、次のようなサービスの利用が12ヶ月無料です。
* Amazon EC2の一部のインスタンスタイプが、リージョンにも依りますが、月 750時間まで
* Amazon S3の標準ストレージ 5GB、20,000 Getリクエストまで、2,000 Putリクエストまで
* Amazon Pollyが500万文字まで


### 無期限無料のタイプ

無期限無料のタイプの例は以下のようなサービスの利用です。

* AWS Lambda 100万件/月までのリクエスト、月あたり320万秒までのコンピューティング時間
* Amazon SQS 100万件/月までのリクエスト
* AWS CodeCommit 月あたり5アクティブユーザー、50GB/月のストレージサイズ、11万件のGetリクエストまで
* AWS Well-Architected Tool（ワークロードのレビューを履歴管理できるツール）は無制限で無料

私に届いたメールは、この無期限無料タイプのAmazon SQSに関する無料枠の85%まで使われていることを知らせてくれるものでした。


### 短期トライアルのタイプ

短期トライアルのタイプは、サービスをある程度の期間または利用量までは無料になるタイプです。
どんな使用感なのか、どのような出力結果になるのかなど、使ってみないと価値が分かりにくいサービスに、この短期トライアルのタイプが設けられている印象です。

例えば以下のようなものです。

* Amazon Inspector 15日間
* Amazon GuardDuty 30日間
* Amazon SecurityHub 30日間
* Amazon Kendra 750時間まで、30日間


## AWS無料利用枠の利用状況を確認する

AWS無料利用枠の利用状況は、AWSマネジメントコンソールのBilling & Cost Management > Free Tierで確認することができます。
スクリーンショット上は無期限無料のタイプのみしか表示されていないように見えますが、他のタイプも表示されるのではないかと思います。（AWS Billing and Cost ManagementのAPIリファレンスからの推測。）

![awsfreetier.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619198/f4239e61-910f-3dc2-4280-9216a52fc7a2.png)

## おわりに

AWS無料利用枠について、少しでも読んだ方の理解につながれば嬉しいです。
<br>
ちなみに冒頭のAmazon SQSの利用は、試しに15日間無料トライアルとして「Amazon Security Lake」を有効化したことで発生したものだということがわかりました。めでたし、めでたし。
（もし本当に身に覚えのない請求があったら、AWSサポートへ問い合わせましょう。）


## 参考情報

- [AWS 無料利用枠](https://aws.amazon.com/jp/free/)
- [AWS 無料利用枠に関するよくある質問](https://aws.amazon.com/jp/free/free-tier-faqs/)
- [AWS Billing and Cost Management API Reference - FreeTierUsage](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_freetier_FreeTierUsage.html)
- [Amazon Security Lake - 料金](https://aws.amazon.com/jp/security-lake/pricing/)
[技術書典15] 記事書き上げを完走した感想 - in Code Polaris

:::note info
この記事は[Code Polaris Advent Calendar 2023](https://qiita.com/advent-calendar/2023/code-polaris)の 5日目の記事です。
:::

## 本について
女性による女性のための技術コミュニティ「Code Polaris」に参加しているメンバーで執筆した本です。
[Code Polaris Tech Book vol.2：Code Polaris - 技術書典](https://techbookfest.org/product/b4z1CZcTcfh0TuVfAFt3j8)

Code Polaris[^code-polaris]で出版する同人誌としては、2冊目になります。

寄稿した人数は9名です(私は初参加です)。

コミュニティメンバーの事情もあり、オンラインのみの出店でした。

[^code-polaris]: 私はゲーム業界から参戦しましたが、温かく見守っていただいております。同じ人いないかなぁ。それか誰か来てくれないかな…。


### 書いた記事について
私の書いた記事は「第2章 Unityを絵文字ジェネレーターにしてみた」になります。

Unity初心者・初学者向けに、サンプルプロジェクトの解説を行っています。

何かの足掛かりになれば幸いです。
…しかし果たして伝わっただろうか…？心配です…



### 執筆環境
Re:VIEW を使用しました。
[TechBooster/ReVIEW-Template](https://github.com/TechBooster/ReVIEW-Template) のフォーク環境です。

個人環境として、Visual Studio CodeでDev Conteinerを立てて書いていました。
GitHub Codespace使っても良かったのですが、別のコミュニティで Re:VIEW を使って書いたとき、
ローカルでDockerを立ち上げていた記憶があったので、
今回もそうした感じです。



## 完走した感想

### 第一稿、自分は遅刻しました…
レビュワーの負担を考えるなら、第一稿締め切り1週間前には仕上げるべき…
いや、もっと早い段階が理想ですね。すみません…。

原因としては
- 多忙で、執筆時間、サンプルプロジェクト作成時間が限られている
- Unityに触ったことがない方向けといいつつ、導入ハードルが高い
    - 一般的ではない、エディタ拡張の話が中心になっている
    - レンダーパイプラインの話を持ち込んでいる
- サンプルプロジェクトを作るのが遅かった
辺りが考えられます。

時間の問題は、そのまま仕事の問題に直結しているのでここではあまり書きませんが…
やることがあるなら、定時に帰れるときに定時に帰って作業しようね！
(Code Polarisのほかのイベント参加含めて、NaN敗してる…)


### 誤字脱字、リンク切れが多かった
これはツールを活用しなかった問題もあります。
レビュワーの負担がさらに増えるから、やめようね！(5敗以上してる)

#### 文章校正ツール、入れたい

私のZennでの執筆環境では textlint[^textlint] を入れ、
Pull Requestでは reviewdog[^reviewdog] が動くようになっています。
Re:VIEW環境でも、自主的に入れていきたいですね。
ここは要検討です。


#### リンク切れ
具体的には `@<href>` でURLだけを記載した際、
ビルド環境によってはリンクとして認識されませんでした。

何故これが起きるかについては、
追跡するための調査は行っていないため、詳細はわかりません。

予防策として今後、Re:VIEWでリンクだけだと思っていても、
必ずテキスト部分とURL部分、両方に書きましょう。


[^textlint]: Node.js環境で動作する、文章校正ツール。
[textlint](https://github.com/textlint/textlint) を中心に、様々な文章校正ルールが入れられる。
例えば、[textlint-rule-preset-japanese](https://github.com/textlint-ja/textlint-rule-preset-japanese)(日本語向け文章校正ルール) や [textlint-rule-preset-ja-technical-writing](https://github.com/textlint-ja/textlint-rule-preset-ja-technical-writing)(日本語向け技術文章校正ルール) などがある。
[^reviewdog]: textlintなどのツールから出力された結果を元に、機械的にコメントをつけてくれるツール。
GitHubのPullRequest, GitHub Actionと組み合わせるといい感じになるのでお勧め。
https://github.com/reviewdog/reviewdog


### Unity知らない人向け、にしてはまだハードルが高そう
Unityも含め、初めてのゲームエンジンというのは、環境構築自体はそう難しくないですが
覚えなければならないエンジン特有の前提知識、というのが結構多いです。

特に **短期間で空のプロジェクトからサンプルプロジェクトに近づける、
というのはほぼ不可能** です。
初心者から脱してしまうと、このことを忘れちゃいますね…。

これだったら、技術解説より
「Unity拡張は楽しいぞ！」の方向に
思いっきり舵を切ってしまったほうがよかったかな、と思ってます。

ぼくのかんがえた さいきょうの ツールづくり、たのしいぞ！


## 次に繋げること
来年も、コミュニティ内で機会あれば何か書こうと思っています。
あわよくばUnreal Engine版を…と思ってます。…勉強、間に合うかな…？

仮にUnreal Engineでなくても、IT系が多い中で変わらず異色の記事を書くつもりです。
だってゲーム好きなので。好きなものを仕事にしてご飯食べてますので。

Code Polarisの皆様、
これからも、来年も、宜しくお願い致します。
拠点内ポータルサイトを作って問い合わせ対応時間を減らすためのサイト設計

# はじめに
　急いでいる時に限って、「パソコンがフリーズしたんだけど」「システムにログインできない」「これって、どう操作するんだっけ？」「あのファイルってどこにあるの？」といった、小さな質問に悩まされていませんか？
　この記事では、Googleサイトで拠点内のポータルサイトを作って、問い合わせ対応の時間を削減した方法について書きます。

## 想定読者
* ファイルやレポートの場所を何回も聞かれてうんざりしている方
* システムの簡単な操作を聞かれてうんざりしている方
* ノーコードで社内の簡単な情報共有サイトを構築したい方
※社内Wikiなどのデータベースほどの規模ではないのでご了承ください

# 使用したツール
　ポータルサイトの作成には、Googleが提供している、無料のサイト作成ツール「Googleサイト」を使用しました。
 社内でGoogleワークスペースを使用している場合は、Googleドライブのファイルを掲載できたりするので、より効果を発揮します。
 
 実装についてはノーコードツールで簡単すぎるので割愛します。公式ドキュメントをご参照ください。

 https://support.google.com/a/users/answer/9310491?hl=ja

# サイト設計の考え方

　以下からは、サイトを作る上で考察した3点について述べます。

## 掲載内容
### 短期的ではなく、長期的に参照されるものをメインに据える
理由は、
    * 頻繁に追加があると見落としてしまうことが多い
    * メンテナンスにも手間がかかってしまうこと
です。

　逆に言うと、短期的に閲覧されるものは、新鮮な情報が集まりやすい社内Chatなどでリマインドをかけます。

### 特定の個人やチームに関わる項目は一つのページ内に収める
　利用するユーザー側が探す手間を省くためです。
他部署の先輩から依頼があり、個人用にカスタマイズした、独立ページを作っても良いと思います。（メンテナンスが疎かになりがちなのでそこは注意！）

## 表現方法

### よく使う項目はトップページの目立つ部分にまとめておく
　トップページからすぐ遷移できる場所に置きます。これは、リピーターのストレスを減らすためです。

### アイコンなどを使って、直感的に分かりやすく表示する
　少しでも探すコストが高いと、諦めてしまう可能性が高くなります。
とっつきやすく、かつ、ページ遷移先が分かりやすいアイコンを使うことが重要です。

#### 素材サイト

　個人的に使っている素材サイトをご紹介します。

* **シルエットAC**
　シルエットで一眼でわかる・色変えもしやすいのが便利です。

https://www.silhouette-ac.com/

* **Loose Drawing**
　ゆるふわなイラスト。種類が多めなのでテイストを揃えたい時に便利です。

https://loosedrawing.com/

## メンテナンスのしやすさ
### あまり深い階層にせず、1〜2クリックで到達するようにする
　リンク数が多くなってくると、ついつい細かくカテゴリ分けしてページを増やしたくなりますが、
できるだけ控えましょう。
　作成者にはそこまで難しくなくても、初めてアクセスする側の探すコストが大きくなってしまうためです。

### 頻繁に更新する部分は、Googleドキュメントやスプレッドシートで補う
Googleサイトは、Googleワークスペースのファイルを埋め込めるので、ドライブ内で編集したファイルをそのまま使用・表示できます。

# まとめ
　頻発する問い合わせを減らすことで、差し込みに翻弄されることなく、通常業務に集中できるようになりました。場所さえ一度教えれば、以降はそれを参照&似た悩みを持つ人に紹介してくれるので、どんどん問い合わせが減っていきます。
Git: 変更内容の一部だけ残して内容を戻したい

patch コマンドを知って、こういう使い方もできそうじゃないか、と思っていくつか試してみたらうまくいったので記事にしました。

# この記事は何か
Git を使っていて、
* 変更を stash し忘れたまま別件の改修を加えてしまった
* フォーマッタが改修対象以外にも変更を発生させてしまった

など、ファイルの一部分だけを除いて内容をもとに戻したい、と思ったことはないでしょうか？

この記事では、Git と patch コマンドを使って、指定した変更箇所を除いて、内容を直前の commit に切り戻す方法を紹介します。

# 前提
前提として、以下のツールが使える必要があります。

* Git
* patch

Linux であればデフォルトで入っていたり、package で簡単に入れられると思います。
Windows の場合は WSL を使うのが早いのではないでしょうか。

# どう実現するか
## 1. 現在の変更差分をファイル出力する
まずは、現在の変更差分を適当なファイルに出力しましょう。
ここでは、`diff.patch`というファイルに差分を出力することにします。
``` bash
git diff > diff.patch
```

## 2. 残したい変更差分を抽出する
続いて 1. で出力した `diff.patch` を適当なエディタで編集し、欲しい差分だけ残して不要部分を削除していきます。
念のため編集前の `diff.patch` をコピーして残しておくことをお勧めします。
``` bash
cp diff.patch diff.patch.bak
```

以下のような `diff.patch` が得られているとします。
``` patch
diff --git a/sample.txt b/sample.txt
index 0edb856..6757c5e 100644
--- a/sample.txt
+++ b/sample.txt
@@ -1,5 +1,5 @@
-a
-b
+1: a
+2: b
 c
 d
 e
@@ -8,6 +8,7 @@ g
 h
 i
 j
+---
 k
 l
 m
```
この差分に対し、`---`の追加のみを残して、ほかの差分を削除したい場合は、以下のように `diff.patch`を変更します。
``` patch
diff --git a/sample.txt b/sample.txt
index 0edb856..6757c5e 100644
--- a/sample.txt
+++ b/sample.txt
@@ -8,6 +8,7 @@ g
 h
 i
 j
+---
 k
 l
 m
```

残念ながら、残したい差分となくしたい差分が、同じhunk (マーカーで示されたブロック) 内に混在する場合は、単純に削除すればよい、というわけにはいきません。

例えば、以下のような `diff.patch` に対し、 `---` の追加だけを残したい場合です。
``` patch
diff --git a/sample.txt b/sample.txt
index 0edb856..4971857 100644
--- a/sample.txt
+++ b/sample.txt
@@ -16,6 +15,7 @@ o
 p
 q
 r
+---
 s
 t
 u
-v
-w
+V
+W
```
`diff.patch`を適切に修正することもできなくはないのですが、多少不要な差分が混じることを許容して差分削除を行い、ファイルを直接編集して差分を修正するのが早いと思います。

## 3. ファイルを直前の commit の内容に戻す
`git checkout` でファイルの内容を直前の commit に戻しましょう。

``` bash
git checkout .
```

## 4. 変更差分を適用する
patch コマンドを使って `diff.patch` を適用します。

``` bash
patch < diff.patch
```

patch コマンドが失敗した場合は、`diff.patch.bak` を適用し、1. の状態に戻しましょう。

``` bash
git checkout .
patch < diff.patch.bak
```

## 5. `diff.patch`で取り切れなかった差分を取り除く
必要に応じ、 `diff.patch` の編集で取り切れなかった差分を直接ファイルで取り除きましょう。

## 6. 完成
これで完成です。
念のため `git diff` で差分を確認しておくとよいです。
また事故らないうちに変更を commit しておきましょう。。。

# 応用例
## 変更差分を 2つに分けて commit を作る
stash し忘れて別な変更を入れてしまった場合などは、以下の手順で修正することが、できます。
### 1. ちなみに1つ目の commit を作成する
[どう実現するか](#どう実現するか) の手順に沿って、1 つ目の commit の内容を作成します。
このとき、[2.残したい変更差分を抽出する](#2-残したい変更差分を抽出する) で `diff.patch.bak` を作っておいてください。

### 2. 現在の commit hash を記録する
``` bash
target_hash=$(git rev-parse HEAD)
```

### 3. 1つ前の commit に戻る
``` bash
git checkout HEAD^
```

### 4. 1 つ目の commit との差分を取る
[2. 現在の commit hash を記録する](#2-現在の-commit-hash-を記録する) で取得した、 1 つ目の commit との差分をファイルに出力します。
ここではこの差分ファイルを `diff2.patch` とします。
``` bash
git diff ${target_hash} > diff2.patch
```

### 5. commit したい branch に checkout する
``` bash
git checkout .
git checkout <branch_name>
```

### 6. 2 つ目の commit を作成する
[4.  1 つ目の commit との差分を取る](#4-1-つ目の-commit-との差分を取る) で作成した `diff2.patch`を使って、[4. 変更差分を適用する](#4-変更差分を適用する) 以降を実行する。

# よくわかってないこと
patchファイルの編集により変更後の hunk 開始位置が普通にずれるのがだいぶもやもやしてます…
一応期待通り動きますが、どうしてうまくいくのか理解できてません… 教えて詳しい人…

# まとめ
Git と patch を駆使して、変更内容の一部だけを切り戻す方法について解説しました。 
意図しない変更が大量に混じってしまった場合に使うと便利なので、ぜひお試しあれ！！！
【GitHub Pages】リモートリポジトリからWebサイトを公開する

## GitHub Pages とは

GitHub PagesとはリモートリポジトリからWebサイトを公開できるホスティングサービスです。

> GitHub Pagesは、GitHubのリポジトリからHTML、CSS、およびJavaScriptファイルを直接取得し、任意でビルドプロセスを通じてファイルを実行し、ウェブサイトを公開できる静的なサイトホスティングサービスです。
>> [GitHub Pagesについて](https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages)

## 事前準備

既にリモートリポジトリを作成している状態であれば、僅か数分でWebサイトを公開できてしまいます。実際に公開するまでの手順をここでは解説していきます。  

まだリモートリポジトリを作成されていない方は[こちら](https://docs.github.com/ja/pages/getting-started-with-github-pages/creating-a-github-pages-site#creating-a-repository-for-your-site)のページを参考に、作成してみましょう。

注意点ですがGitHub Pagesでページを公開するにはエントリファイルをrootディレクトリ又は、docsフォルダ内に配置する必要があります。

> GitHub Pagesでは、サイト用のエントリファイルとしてindex.html、index.md、またはREADME.mdファイルを検索します。公開元がブランチおよびフォルダーである場合、エントリ ファイルは、ソース ブランチ上のソース フォルダーの最上位レベルに配置する必要があります。
>> [サイトを作成する](https://docs.github.com/ja/pages/getting-started-with-github-pages/creating-a-github-pages-site#creating-your-site)

## Web サイトを公開しよう

では早速、手順を解説していきます。

リポジトリのツリーはこの様になっています。
エントリーファイル(index.html)をrootディレクトリに配置しています。

<img width=250 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551297/8f9f5eb7-a400-0008-0b1a-66726a0743bc.png">

1. 公開したいリモートリポジトリのページを開いて、**Setting**タブをクリックします。

![Settingsを選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551297/835d9d65-b0a2-ed06-2f5c-b5071ca792f9.jpeg)

2\. Code and automationから**Pages**をクリックします。

![Pagesを選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551297/bf2aedd7-c87c-6daa-72b0-a4ecbb8c44be.jpeg)

3\. Build and deploymentの設定を行います。

- Source
  - ブランチから公開するのでDeploy from a branchのままで大丈夫です。
- Branch
  1. 公開元のブランチを指定します。
      今回は公開したいブランチがmainブランチなので**main**を選択します。
  1. ディレクトリは`/root`と`/docs`の 2 種類から選択します。
      今回は inedx.htmlがrootディレクトリに存在するので`/root`を選択します。
- 設定が良ければ**Save**します。

![デプロイ設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551297/30aa1e6c-3a06-f736-1045-f806c664bd37.png)


4\. 数分待ってページを更新すると、Visit Siteが表示されます。Visit Siteをクリックすると公開された Webサイトにジャンプします。後はみんなに共有して完了です！

![デプロイ先のリンク](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551297/7c8dd64f-ef22-8112-8640-b1eb6e83a70e.png)

## おわりに
こんな簡単にWebサイトを公開できるのは素晴らしいですね。
最後にGitHub Pagesの注意事項や使用制限について触れておきます。
詳細はリンク先よりご確認下さい。

> GitHub Pages サイトは、パスワードやクレジットカード番号といった機密情報のやりとりに使うべきではありません。
さらに、GitHub Pages の使用には、一獲千金を狙った計画、わいせつなコンテンツ、暴力的あるいは脅迫的なコンテンツや活動に関する制限など、GitHub 利用規約が適用されます。
>> [禁止される用途](https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages#prohibited-uses)

> ・ 公開されたGitHub Pagesのサイトは1GB以上であってはなりません。
・ GitHub Pages のデプロイは、10 分を超えるとタイムアウトになります。
・ GitHub Pages サイトには、月当たり 100 GB の ソフトな 帯域幅制限があります。
>> [使用状況の制限](https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages#usage-limits)
Qt 勉強会＠Tokyo を毎月開催しています

# はじめに

みなさんこんばんは。
Qt Advent Calendar 2023 の 4日目 は、Qt勉強会＠Tokyo の宣伝です。

Qt を使っている開発者との情報交換に興味のある方、
Qt を使っていて困りごとのある方は、是非見て行ってくださいませ。

# Qt 勉強会とは

Qt 勉強会は、[日本Qtユーザー会](https://qt-users.jp/) が主催している、Qt の勉強会です。
Qt 勉強会の歴史については、[hermit4](https://twitter.com/hermit4) さんが 2015 年の Qt Advent Calendar で書いてくださっていたので、[そちら](http://blog.hermit4.info/2015/12/qt.html#:~:text=%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82-,%E6%AD%B4%E5%8F%B2,-Qt%E8%87%AA%E4%BD%93%E3%81%AF) をご覧ください。

現在の Qt 勉強会は、[Connpass の Qt 勉強会 グループ](https://qt-users.connpass.com/) でイベントを公開して参加者を募集しています。

概ね毎月、概ね第三土曜日の 13:00～18:00 に、新宿駅近くの貸会議室を借りて開催しています。

# 勉強会の内容

現在の Qt 勉強会＠Tokyo は基本的に もくもく会 です。

13:00 くらいに集まって、ゆるく自己紹介をして、17:30 くらいまで各自もくもくして、ゆるく成果発表をしておしまいです。

途中参加・途中退出は自由、飲食も自由、何か発表がある人は発表してもらったり、困りごとがある人は自由に質問してもらって答えられる人が居れば答える、というゆるい雰囲気でやっています。

最近では、QWebView で初回に load したウェブページが表示されない問題が解決した方や、音を鳴らしているあいだ処理が止まってしまう問題が解決した方など、ここで質問して困りごとが解決したケースもあります。

# 次の勉強会の予定

12月の勉強会は 12/16(土) の開催です。参加される方は「このイベントに申し込む」ボタンから申し込みをしてください。
https://qt-users.connpass.com/event/304322/

2024年1月の勉強会は、今のところ 1/20(土) を予定しています。

# おわりに

今日は Qt勉強会＠Tokyo の宣伝でした。

これから Qt を始める方、始めてまだ日の浅い方も、勉強会に参加してもらうとユーザー会メンバーの顔も分かってメーリングリスト等での質問もしやすくなるかな、と思います。

是非気負わずお気軽に参加してみてくださいね。
【Android】Contextって何者なん？~Activity Context編~

これは、アドベントカレンダーの2日目の続きになります。
そちらがまだの方は、2日目を先に読んでいただけると幸いです。
https://qiita.com/minomusi/items/78693966e99f05af3e00

それでは行きましょう！:writing_hand:

## Activity Context
これは、その名前の通り**Activity**に依存したContextになります。
よってActivityのライフサイクルにより発生、消滅します。
これが重要な観点になります。

## Contextの誤用によるメモリリーク
contextの寿命と使用箇所の寿命を考えた時に、
context > 使用箇所の関係になっていると、メモリリークが発生してしまう可能性があります。

具体的には、シングルトンなどのインスタンスでActivity Contextを渡した場合などが考えられます。
上記の場合などは、Application Contextを使用するようにしましょう。

## Contextの使い分け関する私の考え
基本的に迷ったら、Application Contextを使えば良いのではないかと考えています。
そうすることで、消滅のタイミングなどを自身で管理しなくて良くなり、考えることが減ります。
ただ、限定的に使いたいなどの場合には、Activity Contextを使用する方が良いと考えられます。

この辺りは、実装を多く経験していくと判断することが可能になってくるかなと思います。

以上でContextに関する記載を終わりにします。
では、また明日〜:thumbsup_tone1:
文化祭のシステム作成をしたので振り返る

本記事は、[めんどい太郎の Advent Calendar 2023](https://qiita.com/advent-calendar/2023/mendoitarou_first_calendar) 8日目の記事です。

# はじめに

この記事は初心者が書いています。

今回は、私のクラスの文化祭の模擬店で使用するシステムを作成しましたので、振り返っていきたいと思います。

# 概要

作成のために用意された時間が異常に短く、作りがひどいので画像などはなしで行きます。すみません。

(なんとたった2日間(学校にいる間は飾り付けなどをしたので実質1日もないです。))

今回作成したシステムは、大まかに以下の機能があります。

- 得点管理(追加・参照・ソート)
- ユーザー管理(アカウント作成・参照)

それぞれを軽く説明します。

## 得点管理

私達の模擬店では、物を箱に投げ入れ箱と入れたものに応じて得点がつけられるというシンプルな仕組みでした。

それだけなら簡単でしたが、その**日**の一番得点が高かった人に豪華景品を贈呈するという案が出ました。

渡すのが難しいということで却下となりかけましたが、私がシステムを作れば解決！ということで採用ということです。

さて、一番得点が高かった人に景品を贈呈ということですのでいわゆるランキング形式となるわけです。

そのためデータベースなどに得点を登録してソートを行い、得点とユーザーを参照できるという仕組みが必要です。

これをこのシステムの１つ目の機能として組み込みました。

また、このランキングをプロジェクターを使用して大きなスクリーンに常に表示することで誰でも簡単にランキングを見ることが可能です。

昨日の記事[^1]はそのスクリーンに表示するためにWebSocketを使ってリアルタイム更新を行っていたときに行ったことです。

そして得点の登録はできる限り簡単で素早いことが望まれます。

そのためにお客さんの識別をQRコードで行いました。

スタッフもQRコードを読み込んで得点を入力するだけなので楽です。

## ユーザー管理

しかし、得点を登録するだけではいけません。

**誰が**何点獲得したかという情報が必要です。

そこで、2つ目の機能としてユーザー管理機能を実装しました。

お客さんは楽にアカウントの登録を行いたいと考えられるので、数タップでアカウントを登録できるSNSログインを実装しました。

具体的にはGoogleでログインを実装しました。

1日目の記事[^2]はこのことです。

Googleでログインの実装はインターネット上にある情報は古く、FirebaseはPHPに公式ライブラリがないなどの理由で苦労しました。

# 当日

デバッグがきちんとできておらず、一日目からバグありまくりでした。

ちゃんと機能しない→呼ばれる→即修正

これの繰り返しでした。

二日目、なんと仕様変更。

しかも結構大きな仕様変更です。

約30分しか残されていない中、なんとか変更できました。

そしてこの仕様変更によってまたバグが発生。

しかし、二日目は一日目よりも楽でした。

# 反省点

箇条書すると以下のような反省点があります。

- 操作方法の周知不足
- UIデザインの不備
- 時間不足
- 寝不足状態でのプログラミング
- ちゃんとした仕様決め

## 操作方法の周知不足

完成したのがほぼ当日(何なら開始直前)だったので、操作方法をわかっていないスタッフが多くいました。

操作方法のマニュアルを作成するなどして、操作方法を周知すべきでした。

## UIデザインの不備

ユーザーは大きなテキストであっても、ちゃんと読みません。

例えば「すでに登録している方はこちら」という文章を登録ページに設けた結果、ユーザー登録と勘違いしてログインをしてエラーが出るといった呼び出しが度々起こりました。

登録ボタンが一番目立つようにするのが良さそうです。

## 時間不足

模擬店係にそんな短い期間じゃ作れないよ！と念押すべきでした。

なんとかなりはしましたが、もしなにか問題が起きていたかと考えると恐ろしいです。

## 寝不足状態でのプログラミング

寝不足状態でプログラミングしてはいけません。

めっちゃミスります。

修正時、なんでこんなミスしてるんだ？というミスが非常に多かったです。

## ちゃんとした仕様決め

仕様はちゃんと決めましょう。

仕様が曖昧なせいでシステム設計に無駄な時間がかかりました。

また、途中で変更が入って苦労しました。

# よかったポイント

箇条書きします。

- クラスメイトが優しい
- 最終的になんとかなった
- 一応なんとか修正できた

## クラスメイトが優しい

クラスメイトが優しかったです。

エラーが起きたら即報告、修正後即対応...

優しい...

クソシステムなんて一言も言われませんでした。

逆にすごいと褒める言葉ばかり....

優しかったです。

お陰で僕もやる気が出ました。

## 最終的になんとかなった

最終的になんとかなりました。

よかったです。

## 一応なんとか修正できた

その場で即修正ができました。

デバッグ不足なのは時間がなかったのでもう仕方ありません。

直せない...なんて事態にならなくてよかったです。

# 最後に

システム開発や運用のいい経験となりました。

もし次があれば、もっとゆとりを持ったスケジュールで今回の改善点を踏まえて効率よく完成度の高いシステムを作成し、運用していきたいと思います。

文化祭って...かなり大事なイベントですね。

本当にいい経験になりました。

ちなみに、プログラムは完全非公開です。ページも現在はアクセスできないようになっています。ご了承ください。

[^1]:[WebSocketで引っかかったこと(SSL対応)](https://qiita.com/mendoitarou_/items/69a97936f5e65809d824)

[^2]:[PHPでGoogleログインの実装をする方法(2023年11月時点動作)](https://qiita.com/mendoitarou_/items/9d6838a0db468c4f5dee)
購入したばかりの曲を積極的に再生するための確率設定

# 購入したばかりの曲を積極的に再生するための確率設定
音楽プレイヤーのランダム再生機能を実装する事を考えます
購入したばかりの曲はたくさん聞きたく、逆に1年以上も前に購入した曲であればたまに再生されれば良いかと思います
そこで購入日に比例して再生確率を決定する仕組みを作ります

## 素点の作成
確率を決定するために曲毎に素点を作成し、後ほど点数を確率に変換する手段を取ります
その計算式を以下の通りに設定
算出される最小値を １／曲数 になるようにします

**y = 1 - 経過日数 / 曲数**
**y > 1 / 曲数**

１０００曲、購入からの経過日数を最大を２０００日とした時のプロットです

![test_plot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104691/a6c3e063-94fa-9995-a50a-8dcf2847f3df.png)

１０００日経過まで徐々に素点が下がり１０００日を超えたところで 1/1000 となります
この式で取得した素点を確率に変換し再生時の選択に反映させれば完成です

## ソースコード

``` python

import matplotlib.pyplot as pyplot
import numpy as np

def coff_function(x, xmax, ymin):
    y = 1 - x / xmax
    if y < ymin:
        y = ymin
    return y

def test_plot():
    xmax = 1000
    ymin = 1 / xmax
    x = []
    y = []
    for ix in range(xmax + 1000):
        x.append(ix)
        y.append(coff_function(ix, xmax, ymin))
    
    pyplot.plot(x, y)
    pyplot.savefig("test_plot.png")

def test1():
    # 曲名, 購入日からの経過日数
    music_list = [
        ["bloom", 7],
        ["ふざけてないぜ", 1],
        ["優しくなれたなら", 6],
        ["今日はカレーの日", 5],
        ["北上のススメ", 0],
        ["こんがらがった", 6],
        ["君はいなせなガール", 3],
    ]
    
    #music_list = music_list * 10
    
    xmax = len(music_list)
    ymin = 1 / xmax
    names = []
    x = []
    y = []
    for v in music_list:
        ix = v[1]
        names.append(v[0])
        x.append(ix)
        y.append(coff_function(ix, xmax, ymin))
    
    names = np.array(names)
    x = np.array(x)
    y = np.array(y)
    idxs = np.argsort(y)
    idxs = np.flip(idxs) # 確率の高い順番に並べたいので逆転する
    
    names = names[idxs]
    x = x[idxs]
    y = y[idxs]
    
    ysum = np.sum(y)
    prob = y / ysum
    
    #print(names)
    #print(x)
    #print(y)
    #print(prob)
    #print(np.sum(prob))
    
    X = np.c_[names, prob * 100]
    for ix in X:
        print("{}\t{:.2f}%".format(ix[0], float(ix[1])))

def main():
    #test_plot()
    test1()

if __name__ == "__main__":
    main()

```


## 出力
``` python
北上のススメ    31.82%
ふざけてないぜ  27.27%
君はいなせなガール      18.18%
今日はカレーの日        9.09%
こんがらがった  4.55%
優しくなれたなら        4.55%
bloom   4.55%
```

曲数が少ないためすぐに下限に達してしまうため偏りが酷いですが曲数を多くして経過日数のばらつきをもっと作るとそれっぽくなります

この確率に従い曲を選択し続ければ購入からの経過日数に比例してランダム再生が可能です
同じ曲を連続して再生はしないけど確率も考慮するとなると人の好みもありますので確率を良い具合に反映しつつ連続再生を防ぐのが難しいかなと思いました

以上です

[記事の続き、実際の選曲部分を実装します](https://qiita.com/ikuo0/items/b8e20daa86f36eee39c7)
Apacheとは

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

# Apacheとは
Apacheは、`オープンソースのwebサーバーソフトウェアであり、世界で最も広く使用されているものの一つ`です。

# Webサーバーとは
Webサーバーは、__クライアントからのリクエストに応じてウェブページやファイルを提供するソフトウェア__ です。これにより、ユーザーがブラウザを通じてウェブページを閲覧できます。Apacheは、このようなリクエストを受け取り、要求されたコンテンツをクライアントに送信する役割を果たします。

# Apacheの特徴
### ■拡張性とモジュール性
Apacheは、モジュールを通じて機能を追加したり拡張したりすることができます。これにより、必要な機能を組み込むことが可能です。セキュリティ、認証、ログ管理などの機能を提供するための様々なモジュールが存在します。

### ■カスタマイズ可能な設定
Apacheは、柔軟な設定オプションを提供し、ユーザーがウェブサーバーの挙動や構成を細かく調整できます。これにより、特定のニーズや要件に合わせた最適な環境を構築できます。

### ■クロスプラットフォーム対応
さまざまなオペレーティングシステムやプラットフォームで動作することができます。Linux、Windows、macOSなど、幅広い環境で利用できます。

# 終わりに
Apacheは、その柔軟性、信頼性、そして豊富な機能セットにより、世界中の多くのwebサイトやアプリケーションで採用されています。ウェブの基盤として不可欠な役割を果たし、今後も進化し続けることが期待されています。

最後までお付き合いくださりありがとうございました。
Postmanで異体字をPOSTする

# IPAmj明朝フォントで住所や人名等の字形を正しく表示

**PDF帳票作成サーバー** を使えば、住所や人名等の字形を正しく表示できる **IPAmj明朝** フォントが埋め込まれた **PDF帳票** を作成できます。
[日本上陸記念イベントも開催された **Postman**](https://www.postman.com/jp/events/postman-japan-launch/) から **PDF帳票作成サーバー** へPOSTすることで、異体字も正しく表示できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/317dc376-3ffa-bba6-ba46-5a731b4a3ec4.png)


# 「奈良県葛󠄂城市」の"葛󠄂"

**PDF帳票作成サーバー** を起動し、 [Postman](https://www.postman.com/) を使ってPOST送信します。

|#|イメージ|
|---|-----|
|Postmanの起動|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/ff42ef5b-4d96-57f8-a8df-f9a5c366170d.png)|
|サービスへPOST|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/3921bb48-94a0-b948-0e1d-12e124f16894.png)|
|コピーフィールドの値でPOST|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/537ac241-c41f-a66f-750f-1da8b719f4cd.png)|

:::note info
**PDF帳票作成サーバーの準備**

git と Docker をインストール後、次のコマンドで、 **PDF帳票作成サーバー** を取得し(`git clone`)、起動します(`docker-compose`)。

```
git clone --depth=1 https://github.com/jp-one/py3o-whl.git
cd py3o-whl/.devcontainer
docker-compose -p py3o-whl -f docker-compose.yml -f py3o-ports.yml up
```

:::

Postmanで、次のように選択・入力し、送信(Send)します。

|項目|値|備考|
|----|----|----|
|Protocol|HTTP|
|Method|POST||
|URL| `http://localhost:8765/form` ||

**Bodyタブ/form-data**
|key|type|value|
|---|----|-----|
|targetformat|Text|pdf|
|datadict|Text|{"addr1":"東京都葛飾区","addr2":"奈良県\u845B\uDB40\uDD02城市"}|
|image_mapping|Text|{}|
|tmpl_file|File|py3o_addr_ipamjonly.odt|

```json:Bulk Edit
targetformat:pdf
datadict:{"addr1":"東京都葛飾区","addr2":"奈良県\u845B\uDB40\uDD02城市"}
image_mapping:{}
```

:::note info
**unicodeエスケープシーケンス**
「奈良県葛󠄂城市」の"葛󠄂" を **`\u845B\uDB40\uDD02`** と入力していますが、 [文字情報基盤検索システムで検索した文字（MJ022335）](https://moji.or.jp/mojikibansearch/info?MJ%E6%96%87%E5%AD%97%E5%9B%B3%E5%BD%A2%E5%90%8D=MJ022335) の **コピーフィールド** からコピーした文字をペーストして入力することもできます。

次の `datadict` の内容をコピーし、 `value` としてペーストして、POST送信すると正しい字形で表示されます。

```json:datadict
{"addr1":"東京都葛飾区","addr2":"奈良県葛󠄂城市"}
```

※ Qiitaページ上の表示では、区別できません。

:::

# おわりに

PostmanからPDF帳票作成サーバーへPOSTすることができました。

- form-dataにTextとFileとを混在させることができました
- Textに異体字を含めることができました

https://qiita.com/jp-96/items/4ff9a04c704d9366dba6
中1がIパス取った話

# 中1がIパスを取った話
最近有名なIパスを去年中1で取ってみた話
## 何で取ったのか
* なんとなくITに興味があった
* 国家試験という響きにつられた
* 暇だった
* 勉強すれば取れそう
## 勉強方法
もともとIT系に興味があったのでなんとなくPCいじいじしながら一日一時間もしないくらい勉強しました。
[使用した参考書 みんなが欲しかった！ ＩＴパスポートの教科書＆問題集　TAC出版](https://www.amazon.co.jp/IT-E3-83-91-E3-82-B9-E3-83-9D-E3-83-BC-E3-83-88-E3-81-BF-E3-82-93-E3-81-AA-E3-81-8C-E6-AC-B2-E3-81/dp/4300109389/)
ほかの参考書は全く見ていないのでわかりませんが文系でもOKという響きで中学生でも理解しやすいかと思い買いました。わかりやすく、ちょうどよい情報量だったと思います。
一週目はなんとなく目を通し
二週目はノートテイク
単語暗記ゲームなところが大きい。特にストラデジ、マネジメント分野は単語暗記ゲーム。

これで受験してぎりぎり届かなくて落ちた。
もう一周したら余裕で合格した。
最年少が7歳であることより、だれでもそこそこ勉強すれば受かる資格ではある。

## Iパスを中学生で取るメリット
あんまりない。普通に学校の勉強した方が良い。
ITの勉強のマイルストーンになり、自分の学習成果がわかる。
早めに触れておくことで高度試験とかにその後挑戦する余裕は生まれるかも。
あとはITアレルギーがないことがわかる。（誰に認識してもらうのかは謎

## その後の試験
ただし、Iパスをはじめとしてその後情報処理技術者試験を受けています。毎年一つずつ取っていこうと決めたのでそういう意味ではマイルストーンになり良いかも。
自社サービスのターゲットになったら、結果的に自社サービスの理解が進んだ

こんにちは
NE(株)のアドカレ4日目です。

自分語りでポエムです。


# メルカリショップス開店しました！🏬

ﾄﾞﾝﾄﾞﾝﾊﾟﾌﾊﾟﾌ~~~🎉🎉🎉

![スクリーンショット 2023-12-04 16.34.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212395/9514fd4a-6402-9806-a712-49b87c1b6588.png)

ECの裏側を管理するシステム開発に携わっているわけですが！

ひょんなことからプライベートでEC業務にも触れるきっかけがあり！
自分自身が自社サービスのターゲット層になったわけです。

そんな僕が、自社サービスに近くなったからこそ自分の中で少し変化があったけど
この少しは僕にとってもとても大切な気がしたので書き起こそうかなと思います。

## 今日話さないこと
* メルカリショップの仕様について
* NEの仕様について

## 今日話すこと
* 自社サービスの捉え方の変化

## 変わったこと1-モールのお知らせの捉え方

そうなんです。個人的に捉え方変わったんですよね〜〜

モール・カートの新機能や仕様のお知らせがあった場合、
僕はネクストエンジンに
* 「ネクトエンジンのどこ影響があるのか？」
* 「何を修正する必要があるか？」

までを開発者としては考えていました。
(個人的な視点なので他の観点で考えてくれている人もいます)

---

そんな僕が最近は出品者になったことで
* 「モール・カートの変更が販売の工夫に使えるかどうか？」
が増えました。

そう。ゴリゴリの利用者側の視点👀
物を買ってくれる人が見る画面はネクストエンジンの画面ではなく、モールやカート画面なんですよね。

モールやカートでできることが増える・仕様が変わる＝
購入してくれる人へのアピールの幅が広がる・何かしら影響がある

なので、ネクストエンジンへの影響がどうであれどのモールカートの仕様変更にも
「機能めっちゃ便利そう！！このモールカートでも出品してみようかな？」という視点が入るようになったんですよね

シンプルに自社のサービスに影響があるのか関係なく、モール・カートのが出来ることが増えたことに関心が**自然と向く**ようになったのは結果的に僕自身がEC全般に興味がむき始めた感覚があったのが変化ポイントです✅


## 変わったこと2-自社サービスの理解が深まった
これは僕自身の特徴というか何かを学ぶときに「視覚、体感覚」を使うとイメージが膨らんで学びがより定着しやすい感覚があります。

実際、僕はEC業務の
* 商品登録
* 在庫管理
* ユーザー取引
* 発送
 
 一連フローを体験したことがなかったので僕は想像で補填したり他ロールの人と話して解像度を上げて、自社サービスの開発に携わってました。

自分自身が在庫を抱えた運営者になったことで、
* 「どれだけ楽になっているか？」
* 「ネクストエンジンのこの機能はショップ運営者のこの手間を無くしてるんだ」

この気づきを改めて体感できたのは良かったです

逆に「意外と僕みたいな事業者なら恩恵少ない。恩恵がでかい」の視野も広がったので

開発者としての観点以外も増えたので
業務中のMTGでも別視点での質問や確認が出やすくなったのも個人的には大きな変化です

## 変わったこと3-自分の聞き手がわかった
最後ちょっと毛色が違うんですけど、

自分自身の何かの取り組み方のスタンスがわかった感覚があります。

今まで自分がショップ開いてみるなんて考えたこともなかったし、
まず、自社サービスの**学びを深めるため**にショップを開いてみるって考えると
* 「それだけコストかけても何か変わるかわからないし意味ないだろう・・」
* 「他の人ならもっと効率よく自社サービスへの理解を深めるだろう」

って心の声がめちゃくちゃ聞こえてくるわけですよね
ただ、今年この体験から
* **「何から学びを得るのが向いてるのか？」**
* **「自分をどういう状態に置くとテンション上がげれるのか？」**

これを自分が自分を知っていると、何かと他の学びや仕事でも自分で少し楽しくなれる感覚を得たのも大きかったです。


# 世界の見え方っていろいろある

まとめです。
今まで、エンジニアとして一方向から見えてなかった部分がちょっと別の角度から視る視点を持つと
物事の全体性が違う視点をそれぞれ使って掴みやすくなった感覚は大切にしたい。
自社プロダクト。下から見るか？横から見るか？

今まで視点ってロールチェンジしたり、役職を変わることなのかと思ってたけど、それ以外にも視点を増やすことができる発見があったので誰かに共有したくなった話でした。

何か、頭うちになってる感覚や
学びが鈍化してる感覚があれば、別角度から見えてる景色を変えてみるのはどうでしょう？？💭
名前に左右されないシートの取得方法

getSheetByName()メソッドだと、「シート名を変更されたらどうしよう」という不安が残りますし、getSheets()[index]はシートの位置が変わった瞬間にとんでもないことになります。

これが不安なので、シートの名前に左右されない方法を考えました。

ソースコード
```js
function getSheetById(id){

  const sheets = ss.getSheets();
  return sheets.find(sheet => sheet.getSheetId() === id);

}
```

スプレッドシートのURLからシートIDを確認できます。これは固定値なので、シートの名前が変更されても、位置が変わっても影響を受けません。


ということで、過去のこちらも対応させます。

https://qiita.com/toratosoine/items/137e04968521b684f865

```js
const sheets = new Proxy({e : ss},{
    get(t,p){
      if(t[p]) return t[p];
      t[p] = t.e.getSheetByName(p) || this.q(t,p);
      return t[p];
    },
    q(t,p){ 
      for(const s of t.e.getSheets()){
        t[s.getSheetId()] = s;
        if(s.getSheetId() === (p|0)) return t[p];
      }
      return null;
    }
  });
  ```
ゼロから始めるAI学習（知識編）

[CYBIRD Advent Calendar 2023](https://qiita.com/advent-calendar/2023/cybird)  7日目担当の @kazurasaka です。
6日目は @gumita さんの「初めてのUnrealEngine5」でした。
Unity / UnrealEngine などは作った！！！！ って実感が見た目にも得られて楽しいですね。

# はじめに
一年ぶり二回目 の CYBIRD Advent Calendar 参戦です！こんにちは！
普段はQAエンジニアとイケメンシリーズの1プロジェクト内で技術サブリーダを兼任しております。
今回は社内研究の一環でAIまわりのことをやっていたので、その話をば。
といっても、詳しいことではなく
**何も知らないイチどころかゼロから始めるときに単語が何となく分かるようになるまで**
みたいなのを書いていきますよー！

### MY SPEC
- 機械学習系は社外での仲間内勉強会でkaggleなどを一〜二年ほど
    - アンサンブル使用しての応募を何回かやった（勉強のために）
- 数学はできない（すうがくはできない）
- midjourneyが出現したときには触って遊んだ
- ChatGPTが出現したときには触って遊んだ

## 本題：ゼロから始めるAI学習（知識編）
まっさらな状態から研究記事読んだときに何がわからなくてどう調べたらなんとなく輪郭が見えるまでなれるか、という温度感でいきます。色々とくわしい説明は一本分じゃ足りないので、学習方法的に使用してもらえたなら幸い。

## 知識を辿れ
やあ。ようこそ、7日目へ。
この知識はサービスだから、まずは読んで落ち着いて欲しい。

うん、「また」なんだ。済まない。
仏の顔もって言うしね、謝って許してもらおうとも思っていない。

でも、このタイトルを見たとき、君は、きっと言葉では言い表せない「ときめき」みたいなものを感じてくれたと思う。
殺伐とした世の中で、そういう気持ちを忘れないで欲しい
そう思って、この記事を作ったんだ。

さて、君が知りたいのは会話できるAIということでいいのかな？それとも画像？
歴史の講義をここでするつもりはないけれど、まずは以下の違いをわかっていると、理解の助けになるはずだ。

- 機械学習
- 深層学習
- 大規模言語モデル（LLM）

### 書いてあることの単語が分からなさすぎる
例えばどうやって学習させるんだろう、と、検索をかけたときにこういう文章を目にしたことはないか？

>条件付き画像生成モデルであるStable DiffusionやControlNetのfine-tuningにおいてもLoRAが利用されるようになっています。

Stable DiffusionやControlNetは、それを利用していればわかるものだろう。
（画像生成系のAIがStable Diffusionで、ControlNetはStable Diffusionの拡張機能だ）
fine-tuningやLoRAなどわからない単語はまず検索したかもしれないね。

ではここでまずfine-tuningについて検索をかけてみよう。

>ファインチューニングとは、既に学習済みのモデルに新たな層を追加し、モデル全体を再学習する手法です。 モデルを再利用するため、一から学習するよりも短時間で少ないデータでモデルの構築が可能です。

なんとなく解った気になれるかもしれない。だが、実際にどうやって再学習するんだ？層って何？と、新たな疑問が生まれることだろう。

では続けてその疑問のために層について検索してみよう。
といっても、層、だけだと別のものがヒットするのは目に見えているね。ここでは層＋再学習と組み合わせて検索してみるよ。

>大部分の畳み込みネットワークでは、上位のレイヤーに行くほど専門性が高くなります。最初の数レイヤーは、ほとんどすべてのタイプの画像に一般化する、非常に単純かつ一般的な特徴を学習します。上位のレイヤーに行くに従って、特徴はモデルがトレーニングされたデータセットに対してもっと固有なものになっていきます。ファインチューニングの目的は、一般的な学習を上書きするのではなく、これらの特殊な特徴に適応させて新しいデータセットで作業ができるようにすることです。

TensorFlowのファインチューニングの項目に辿り着いた。
さあ、検索すればするほどわからない単語が増えていくよ。
畳み込みネットワーク？上位レイヤー？データセット、って単語の組み合わせのこと？なんのために必要なんだろう？
そもそもTensorFlowはなんぞや？なんとなく目に入ることは多いけど……。

全部を一気に理解しようなんて無駄なことさ。
時間はかかるがひと単語ずつでも、腹落ちするまで調べるしかない。
もし、近くに詳しい人がいるならその単語について聞いてみてもいいかもしれないね。でもまあ、何がわからないかがわからないと質問のしようもない。
そのためにわからないなりにヒットした文章をたどり、単語の知識を増やしていくことが必要なのさ。

ようこそ深淵へ。
もしやってみようと思うなら、LoRAについて辿ってみるといい。

## 最後に
書き始めた瞬間からなぜか頭の中にバーボンハウスが出てきてそんな記事と口調になってしまいました。ネタを知っている人は僕と握手！！

知識やらなんやらはまとめなり記事なりで取れるけど、その更に前ってどこにもないよね、と思い記載してみました。単語＋説明の羅列だと味気ないのとどこまで書いたらいいかわかんなくなったので、今回はこのような記事に。

次回、[CYBIRD Advent Calendar 2023](https://qiita.com/advent-calendar/2023/cybird)　8日目は @cy_ssss さんの「インターンでPhaser3に触れた話」です！お楽しみに！
.NET8のApplication InsightsでTrace/Informationログをタイムラインに出す方法

# 概要

`appsettings.json`（デバッグ用途と分ける場合は`appsettings.Development.json`）に出力するログレベルを記載する。ログレベルは`Trace`<`Debug`<`Information`<`Warning`<`Error`<`Critical`の順で優先度が高くなる。出力しない場合は`None`を指定する。

## appsettings.json

```json
{
    "Logging": {
        "ApplicationInsights": {
            "LogLevel": {
                "Default": "Trace"
            }
        }
    }
}
```

## 参考資料

- [Azure Functions (Isolated Worker) で AppInsights に出力したログが LogLevel.Warning 以上にフィルターされてしまう問題への対処](https://blog.xin9le.net/entry/2022/12/04/034034)
VPNとはなんなのか

# VPNとはざっとなんなのか
VPNって理解してなかった。
## VPN(Virtual Private Network)
仮想的な専用の通信網であります。つまり、普通の共有回線なんだけど、がんばって仮想的に自分だけの通信網っぽくする感じです。専用回線の導入には莫大な費用が必要ですが、仮想的に自分だけの回線を作るならコストは抑えられます。
## VPNの意義
* 低コストで拠点間の通信ができる
* 高セキュリティである
* 社内ネットワークなどに接続できる
## VPNはなぜ高セキュリティなのか
* トネリングと認証
これらは通信過程の安全性を高めます。送受信する回線にトンネルを立て、入口出口で認証することで通信過程を安全に保つイメージです。
* カプセル化と暗号化
これらは通信内容を攻撃者に見られても解読されることを防ぎます。通信内容をカプセル化し、解読することを難しくしたうえで、暗号化することで万が一、トンネルに侵入されても解読されることを防ぎます。

## VPN接続の種類
* インターネットVPN
インターネット上を経路とするVPN、安価で無料VPNなどで利用される。
* エントリーVPN
光やLTE回線などのブロードバンド回線を用いたVPN、拠点間接続で利用されることが多い。
* IP-VPN
通信事業者の閉域網に限られないVPN、拠点間接続に用いられることが多い。　
* 広域イーサネット
物理的に離れた拠点間のLANを接続したネットワークでL2で接続する。IP-VPNはL3以上でで接続するのに対し、L2で接続するのが違い。


ネットワーク系は抽象的で理解が難しい。
WebSocketで引っかかったこと(SSL対応)

本記事は、[めんどい太郎の Advent Calendar 2023](https://qiita.com/advent-calendar/2023/mendoitarou_first_calendar) 7日目の記事です。

# はじめに

この記事は初心者が書いています。

この前、WebSocketを利用したWebページを作成したところエラーが出てうまく行かなかったのでその原因と解決策をご紹介いたします。

# エラー

Node.jsのwsでWebSocketのサーバーを建て、JavaScriptで接続しようとしたところ以下のようなエラーが発生しました。

```
Uncaught DOMException: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
```

これはつまりHTTPSのサイトでHTTPのWebSocket接続をしたらセキュリティ的によくないから接続しないよというエラーです。

Googleの検索結果をまとめてくれるAIによれば

>これは、WebSockets を混合コンテンツ環境で使用しないこと、つまり、HTTPS で読み込まれたページから非セキュアな WebSocket 接続を開かないことを指します。
>WebSockets では、制限なく接続をサーバーに送信できるため、攻撃者が DoS 攻撃でサーバーをフラッディングすることができます。

とのことです。よくないですね。

ということで、WebSocketのサーバーをSSL化していきます。

# WebSocketのSSL対応

まずはSSL証明書を発行します。

今回は無料で気軽に発行できるLet's Encryptを使用していきます。

## Let's Encryptの設定

Let's Encryptのホームページにやり方が乗っています。

https://letsencrypt.org/ja/

今回はCertbotを用いて設定していきます。

https://certbot.eff.org/instructions

こちらに沿ってやれば簡単にできます。

記事にもやり方を書いておきますが、方法が変わる可能性があることを忘れないでください。

環境はUbuntu 22.04.3です。

### Snapdのインストール

まずはSnapdをインストールします。

サイトによれば、Ubuntu 18.04以降はプリインストールされているとのことですが私が借りたVPSには入っていなかったためインストールします。

といっても簡単。aptでインストールするだけです。

```Shell
sudo apt update
sudo apt install snapd
```

これで終わり。

### 既存のCertbotを削除

aptなどで入っているCertbotを削除しろとのことです。

入っていなくてもとりあえずコマンド実行しときましょう

```Shell
sudo apt-get remove certbot
```

### Certbotのインストール

snapdを使用して、Certbotをインストールします。

```Shell
sudo snap install --classic certbot
```

### コマンドを実行して設定

コマンドを実行して設定をしていきます。

が、その前に準備が必要らしいです。

```Shell
sudo ln -s /snap/bin/certbot /usr/bin/certbot
```

これでOK。

そうしたら、設定開始です。

```Shell
sudo certbot certonly --standalone
```

質問に答えて、設定をします。

(質問は諸事情により省略します。)

### 自動更新のテスト

最後に自動更新のテストを行います。

```Shell
sudo certbot renew --dry-run
```

これで正しく更新できていればOK。

## サーバープログラムの修正

こちらの記事[^1]を参考にサーバープログラムを修正します。

```Javascript
const fs = require('fs');
const https = require('https');
const WebSocket = require('ws');

const server_port = 8080;
const server_domain = 'example.com';

const server = https.createServer({
  key: fs.readFileSync("/etc/letsencrypt/live/"+server_domain+"/privkey.pem"),
  cert: fs.readFileSync("/etc/letsencrypt/live/"+server_domain+"/cert.pem")
});

const wss = new WebSocket.Server({ server });

// 以下省略

server.listen(server_port);
```

これだけです。

修正ポイントとしては``fs``と``https``を読み込み

``fs``で証明書とキーファイルを読み込み、``https``で鯖を建てます。

``https``で建てた鯖を``ws``を使ってWebSocketの鯖として使います。

最後に``server.listen({port})``でポート番号を指定すればOKです。

最初をちょっと書き換えて、最後に一行付け足すだけなので簡単です。

# さいごに

WebSocketのSSL化をすっかり忘れていました。

ブラウザがエラー吐いてくれるのでありがたいですね。

SSL化は思っていたよりも簡単で、良かったです。

WebSocket鯖用のドメイン(サブドメイン)を用意して、DNSの設定をするのを忘れずに！

# 参考

[^1]: [EC2上にNode.jsでWSSサーバをたてる - Qiita](https://qiita.com/edapo/items/c86fd88980ec75bed1e2)
使って便利なmermaid記法(flowchart編）

この記事はand factory.inc Advent Calendar 2023　5日目の記事です。
昨日は @yasukotelin  さんの「[[Jetpack Compose] scrollStateに連動したScrollBarの実装](https://qiita.com/yasukotelin/items/fcf5b538fac922cb08a5)」でした。

# はじめに
最近notionなどでmermaid記法のflowchartを書くことが増えてきたので、抑えておくと便利な記法をいくつか紹介します

# sample
```mermaid
flowchart TD    
    subgraph group2
    corner_round(corner_round)
    rect[rect]
    round([round])
    database[(Database)]
    circle((circle))
    hexagon{{hexagon}}
    asymmetric>asymmetric]
    parallelogram[/parallelogram/]
    rapezoid[/trapezoid\]
    corner_round --> rect --- round
    database ==> circle -.- hexagon
    asymmetric ~~~ parallelogram  -- hogehoge --> rapezoid
    end

    subgraph group1
    normal(normal) --> styled(styled) --> classed(classed):::classed --> linked
    end

    normal --> corner_round

	style styled color:#0000ff,stroke:#FF0000,stroke-width:2px,fill:#ffc0cb,stroke-dasharray: 5 5
    classDef classed stroke:#ffff00, fill:000000, color:ffffff

    click linked href "https://qiita.com/advent-calendar/2023/andfactory"
```

## code
```
flowchart TD    
    subgraph group2
    corner_round(corner_round)
    rect[rect]
    round([round])
    database[(Database)]
    circle((circle))
    hexagon{{hexagon}}
    asymmetric>asymmetric]
    parallelogram[/parallelogram/]
    rapezoid[/trapezoid\]
    corner_round --> rect --- round
    database ==> circle -.- hexagon
    asymmetric ~~~ parallelogram  -- hogehoge --> rapezoid
    end

    subgraph group1
    normal(normal) --> styled(styled) --> classed(classed):::classed --> linked
    end

    normal --> corner_round

	style styled color:#0000ff,stroke:#FF0000,stroke-width:2px,fill:#ffc0cb,stroke-dasharray: 5 5
    classDef classed stroke:#ffff00, fill:000000, color:ffffff

    click linked href "https://qiita.com/advent-calendar/2023/andfactory"
```

## style
- ノードのスタイルを指定できます
        - color:テキストカラー
        - fill:塗りつぶし色
        - stroke:枠線の色
        - stroke-width:枠線の太さ
        - dasharray:破線
## click
- ノードのクリック時イベント
- hrefを使えばリンクになるので便利

## classDef
- styleまとめて指定

## subgraph
- graphのグループを指定
- 後に書いたものが先にくる
- 線で他のグループのgraphに接続可能

# まとめ
紹介と言いつつ、調べてみると知らない記法がありました。
うまく使って見やすいドキュメント作成を心がけたいですね。

参考
Mermaid公式：https://mermaid.js.org/
【Shopify】ローカル環境に任意テーマを作成

# ファイル格納ディレクトリまで移動
```:ターミナル
C:\>cd テーマ格納場所のパス
```

# ローカル環境にShopifyテーマを作成
```:ターミナル
shopify theme init
```
```:ターミナル
?  Name of the new theme:
>  polished-gradients-theme
```
polished-gradients-themeのところに任意のテーマ名を記入してエンター。
中断したい場合はctrl+cでOK。
すると、移動したフォルダにテーマが作成される。
特にテーマを指定していないので、Dawnテーマのディレクトリ郡が格納されたテーマフォルダが作成される。
Excelに書き込まなくなった件

## 1,はじめに
下記の企画で昨日から連続で記事を投稿します！！
本日は連続投稿2日目です。

https://t.co/56WibbNlvz

本日は今まで毎日稼働していたロボットが急に書き込まなくなり、それをどう解決したか紹介します。

## 2,前提
下記が前提です。

:::note info
* 毎日オーケストレーターからトリガーで稼働しているロボットです。
* CSV(インプット)を読み込んでExcel(アウトプット)に書き込んだあとにメールで送付するシンプルなロボットです。※CSVを3つ読んでExcelにその3つを書き込むだけです。
* ユーザーが言うには、インプットとなるCSV、アウトプットのExcelの書式やデータなどとなる変更していないみたいです。
:::

## 3,何が起こったか
急にエクセルに書き込まなくなりました。
エラー内容は下記の通りです。

:::note alert
A1から開始するデータテーブルDataTableに書き込めませんでした。
:::

## 問題の切り分け
前提にあることを確認してから問題の切り分けとして下記の方法を試しました。

:::note info
(1)同じExcelファイルの新規Sheetに書き込むか？
(2)異なるExcelファイルに書き込むか？
(3)モダンアクティビティで書き込むか？
(4)CSVに書き込むか？
(5)(1)~(3)が同様のエラーで(4)ができたらなら、アクティビティが壊れている可能性があるから作り直してどうなるか？
:::

:::note warn
全て行ってもエラーでした。
(5)を行っても同様のエラーの時は、どうしたもんかと天を仰ぎました。
:::

:::note alert
問題の切り分けができかったです。
:::


## 4,UiPath社に問い合わせをしました。
そこでUiPath社に問い合わせすることにしました。
UiPath社への問い合わせ方法などは下記にまとめています！

https://qiita.com/thxUVER2012/items/b80664e1cd6c974a7396

問い合わせをした結果、

:::note alert
Excelの書き込みではなく、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3327229/e926d229-7531-ba53-d11d-4a60534772b6.png)
:::

:::note
ワークブックの範囲に書き込みを使用してくださいと言われました。
この対応をしたら見事解決できました！！
お忙しい中、対応していただきありがとうございます！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3327229/fd495ded-c862-16d0-52e7-c7eb0711efb0.png)
:::

## 5,おわりに
これで解決したかと思いきや、、、、。

CSVを3つ読んでExcelにその3つを書き込むだけなので、同じ手法でできると思いテストした結果、そのうち1回が下記のエラーでした。

:::note alert
「予期しない終了コードでジョブが停止されました: 0xE0434352」
:::

これについてはまた明日！！
書き込まないことがあればこれを試してみてください！
AWS SysOps Administrator 受験記

SysOps Administrator（SOA）を受験してきたのでモチベや勉強方法なんかについて語ろうと思う。

# 自己紹介
- 総合電気メーカー 入社2年目
- 業務内容は主にデータ分析
※データ分析とはいえデータを取得、加工するAWSのアーキテクチャなんかも考えたりするのでそれなりにAWSを業務でも利用している
- AWS歴 1年半
- 好きなサービスはPolly

# なぜ受験しようと思ったのか
- このご時世会社がどうなるかわからない
- もっと技術的な知識を身につけたい（最近パワポエンジニアになりつつある）

このように思い今年度中にAWSの資格を4つ取得するという目標を掲げており、AWS Cloud Practitioner（CLF）とSolution Architecht Associate（SAA）まで取得できたので3つ目のSOAを取得しようと思った。

# 勉強方法
弊社ではUdemy Businessが無料で使えるためCLFとSAAを取得した際にはフル活用して挑んだが、SOAに関しては教材は英語版しかなく練習問題も少なそうだったので今回は別の教材を使用した。
	
使った教材①
<a "https://www.amazon.co.jp/%E3%83%9D%E3%82%B1%E3%83%83%E3%83%88%E3%82%B9%E3%82%BF%E3%83%87%E3%82%A3-AWS%E8%AA%8D%E5%AE%9A-SysOps-%E3%82%A2%E3%83%89%E3%83%9F%E3%83%8B%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%BF%E3%83%BC-%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88-ebook/dp/B0BQLYNLJM">ポケットスタディ AWS認定 SysOpsアドミニストレーター アソシエイト</a>
1か月間会社への通勤時に読む。これで出てくるサービスの概要なんかを確認していた。
	
使った教材②
<a "https://kws-cloud-tech.com/">CloudTech 資格演習対策 </a>
すごく怪しいサイトに見えるが、解説では絵で正解の構成や内容を教えてくれるのでとても分かりやすかった。2,3週間前からこれを解き間違えた内容を確認しながら正答率が8,9割くらいになるように3週くらいした。
	
# 試験の雰囲気
AWSの試験は自宅でも受けることができるが、カンニング対策として部屋や机周りをカメラで移す必要があり、片付けやらが面倒なので私は毎回テストセンターで受験している。テストセンターに行った方が「試験やるぞ」という感じになるのでおススメ。
	
SOA試験は全部で130分あり時間配分は
　65分　全問題を一通り解く。わからないやつにフラグを付ける。
　30分　全問題見直す。ここで不安になってきて自信がない問題が増える。
　35分　死ぬ気で自信のない問題を考える。

	
ちなみに最終的に
　48問　自信あり
　8問　多分あってそうやけど自信なし
　9問　わからん！！
という感じになった。

自信ありの問題は基本的に少し文章が違うけどなんか同じような奴見たことあるなぁという感じで、逆にわからん問題は全く見たことない単語が入っていていくら考えてもわからないような問題だった。

# 試験の結果
![スクリーンショット 2023-12-04 204615.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272113/e5eb6b5e-89d7-4c99-7a19-7efbdfbe7797.png)

1000点満点中832点で、合格点は720点なのでかなり余裕を持って合格！
反省点としては問題集をメインで勉強しており間違いの回答についてもなぜ間違いなのかを理解するようにしたが、それでもまだサービスに対する理解度が足りていなかったと思った。そのため、次の試験ではユーザーガイドの確認やAWSの公式で用意されている<a link = "https://aws.amazon.com/jp/events/aws-event-resource/hands-on/">Hands on for Begginers </a>のうち出題範囲に関わっている部分をやってみて各サービスの理解度を上げようと思う。

# 資格取得のメリット・デメリット
現在3つのAWSの資格を取得して個人的に感じたメリット・デメリット
## メリット
<b>自信がつく</b>
入社するまではAWSを触ったことがない人間で会議でもS3、EC2とか謎の単語が飛び交っている状態だったが、今はかなり各サービスの知識もつき構成について質問ができるくらいには理解力が上がった。

<b>心の余裕ができる</b>
このご時世なので会社が一生安定しているとは考えづらい。資格を持っていれば急に会社がなくなったとき次を探しやすかったり、資格が取れなかったとしてもそういった努力や過程で身に着けた知識が困ったときに助けてくれると思える。
## デメリット
<b>金がかかる</b>
各受講料は
　CLF：12,100円
　SAA、SOA：16,500円
となっており受講にかなりお金がかかる。
私の場合CLFはAWSのイベント参加時にもらった無料バウチャーで受験し、SAAとSOAはAWS認定に合格した際にもらえる半額バウチャーを使って受験しているためある程度は抑えられているが、これ以外にもUdemy以外の教材代もかかっている。
資格取得補助制度の実現を願うばかり。。。

# まとめ
今回のSOAを受験して合格することで、年度初めに立てた目標である年度内4つの資格取得に王手をかけることができた。次はいよいよ最後のAdministrator試験であるDeveloper Associate。
今回の反省を活かしてもっと各サービスの知識を身に着けられるように勉強していく所存。
目指せ12完！！
「JDLA Generative AI Test 2023」#1と#2の両方受けてみたので比較してみた

最近、資格の受験記ばっかり記事を書いている気がしていますが、懲りずに今回も資格の受験記です。
12/2(土)に「JDLA Generative AI Test 2023 #2」があり、受験してきましたので、#1との比較などを語れればと思います。
なお、合否連絡は12/8とのことですので、合否が出る前に本記事を執筆していること、ご承知おき下さい。**（※試験結果を追記しました(12/10)）**

# 「JDLA Generative AI Test 2023」とは？

日本ディープラーニング協会が主催する、生成AIのスキルを評価するためのミニテストです。
自身のスキルを客観的に評価し、合格するとオープンバッジがもらえて自信を持てる、そんなテストになっています。
2023年6月に第1回目のテストが開催され、今回は2回目の開催となります。
（受験勉強方法などを記載した1回目のテスト受験記に関してはhttps://qiita.com/t_horumon/items/56c9b16c17bc8e7b3b3a 参照）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457739/5a985277-9bbc-17eb-820b-873d585eac48.png)

https://www.jdla.org/certificate/generativeai/

# なんで#1持っているのに#2受けたの？

実は、当初は受けるつもりはなかったのです。
しかし、偶々ですが、#2の試験問題を作られた方々の、下記の座談会動画を拝見しました。
そこで、「記述式問題の評価は、人間だとブレが出るので、GPTに評価をさせることも考えている。」というお話が出ておりました。

https://www.youtube.com/watch?v=h1sdebLzuEY

、、、なぬ！？おもしろそうじゃないか！！
どんな試験問題なのか見てやろうではないか！

ってことで、2,000円ですし、様子見がてら受けてみることと致しました。

# 試験形式の変更点

まずは、試験形式が変更になりました。
個人的には、最も影響が大きいのは、試験時間が5分伸びたことです。
前回は、見直す時間すら残らず慌ただしく、それが難易度を上げていた印象ですので、いくら記述式が増えたことによる時間延長とは言え、気分的には大分楽になります。

|  | #1 | #2 |
|:-|:-|:-|
| 受験資格 | どなたでも受験可能 | どなたでも受験可能 |
| 試験時間  |  15分 |  <font color="red">20分</font> |
| 試験形式 | 択一式/多肢選択式 20問 | 択一式/多肢選択式19問、<font color="red">記述式1問 |
| 受験費用 | 2,200円 | 2,200円 |
| 申込期間 | 2023年6月7日～2023年6月20日（14日間） | 2023年10月16日～2023年11月28日<font color="red">（1ヵ月半） |

# シラバスでの変更点

#1のときからのシラバス上での変更点を洗い出してみました。
大枠は変わっていませんが、直近で必須となってきたキーワードが追加になっている印象です。

| 区分 | 項目 | 変更事項 |
|:-|:-|:-|
| 生成AIの技術(特徴)  | 大規模言語モデルにおける生成の仕組みを理解している。  |  キーワードに"Chain-of-Thought"が追加 |
|   | 大規模言語モデルの性能評価について知っている。（リーダーボード、ベンチマーク） |  項目から新規追加 |
|  生成AIの技術(動向)  |  大規模言語モデルのオープン化の動向と原因について理解している。 |  キーワードに"推論の効率化"を追加 |
| 生成AIの利活用(動向)  | 業界に特化した生成AIの活用方法を理解している。  |  キーワードに"LLMを利用したサービス（ChatGPT・Bardなど）"、"RAG (Retrieval-Augmented Generation)の利用"、"エージェント・コード生成"、"外部ツール呼出し"を追加 |
| 生成AIのリスク(特徴)  | 生成AIが、技術面・倫理面・法令面・社会面などで多様なリスクを孕むことを理解している。  | キーワードに"悪用、誤情報の拡散"、"敵対的プロンプト"、"特定の生成AIサービスへの依存"、"環境問題"が追加  |

# 受験した感想

## 内容

シラバスで追加されたキーワードは試験に出るんだろうなぁと睨んでいましたが、想像以上に新しいお話が出てきました。
#1から"2の間の半年間で進んだ技術・動向の問題が多く出てきた印象です。

## 難易度

前回よりも難易度は上がっている印象です。
前回は、択一問題がまだあった認識ですが、今回は「当てはまるものを全て選べ」問題がほぼ全てを占めていました。
そういう意味で、まぐれ当たりが出来なくなり、しっかりと理解をしていないと正解できないので、難易度は上がったと思います。

## 記述問題

言い方は難しいですが、想像していたよりも「王道な」記述問題でした。
試験時間20分ですし、「記述問題」レベルで「文章問題」ではなかった印象です。
この回答を本当にGPTで判断するのかはわかりませんが、本当に出来そうな問題だったので、そういった世界を想像するだけでワクワクできるので、それだけで2,000円の価値がありますね＾＾

# まとめ

先ほども記載しましたが、直近の状勢を反映したTestでした。
「試験勉強をした人」ではなく、「日々、生成AIを触っている人(情報に触れている人)」が合格する試験だったと思います。
そういう意味で、一度合格すればOKという試験でなく、半年に一度「自分はちゃんと時代に付いていけているか？」を確認できる、まさしくテストだったと思います。
学生時代に受けた「全国統一学力テスト」のノリですね。
社会人になったらあまり経験できない貴重なテストですので、継続的に受けてみようかと考え始めている、そんな試験翌日でした。

# 試験結果（12/10追記）

12/8に試験結果が公表されましたが、無事に合格することが出来ていました。
ただ、今回は受験者数は1,822名、そのうち合格者数は1,162名、合格率は63.78％とのことで前回よりも合格率が低下しており（第1回の受験者は1,122名、そのうち合格者は829名で、合格率は73.9%）、かつ、↓で添付したように、私もかなり低い点数でも合格していました。
なので、やはり、今回のテストはかなり難化していたようです。
https://jdla.org/news/202312080001/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457739/9297f103-31fb-8492-2b03-7a5c381737c5.png)
ぐら2023アドカレ05: ゆるっと記事テンプレートを作って、アドカレ毎日更新を楽にする

# 何の記事？
この記事は[ぐらだけアドカレ2023](https://qiita.com/advent-calendar/2023/c9h11o2)、5日目の記事です。

アドカレ記事を書くにあたって、記事を書くテンプレートを用意しました。
# 誰むけ？
- これから技術記事を書いてみたい人
- 今後アドカレを書いてみようと考えている人
- ガチガチの技術記事は書かない人
- 記事構成を固定化することで、執筆のストレスを減らしたい人

普段技術記事を書かない人が記事を書く場合か、逆に普段技術記事を読まない人に読んでもらうことを想定したテンプレートを意識しました。
わたしは決してわかりやすい文章の書き方を説ける専門家ではありません。
だからこそ、このゆるっとテンプレートが誰かの参考になることもあるかもしれない、と思い記事にしました。

# 参考にしたサイトなど
技術記事の書き方やQiita記事の書き方を検索しました。

#### ミノ駆動さんの記事
一番最初に文章の書き方について考えたのがミノ駆動さんのこの記事でした。
基本の骨組みはこの記事を参考にしています。
今また読み直しても色々と考えさせられるところがあります。

https://qiita.com/MinoDriven/items/6718b5e70e3fb321ff9b

#### チェリー本の人の記事
伊藤 淳一さんのブログやQiita記事を定期的に読んでいます。
などの記事も読みやすいのですが、命名規則やコードの書き方や考え方などは記事の書き方にも通ずるところがあるように感じました。

https://blog.jnito.com/
#### 結城先生の本

理数系や数学の文章を書く人でなくても、文章を書く人を助けてくれる一冊です。
わかりにくい文章と、何故わかりにくいのか、どう改良するといいのか……を少しずつ読み解ける一冊です。

https://www.hyuki.com/mw/

# 完成したテンプレート内容
```md:2023アドカレ時テンプレート
# 何これ？
- トップ画像や一文など、端的に何の記事かわかるもの
- ひとこと感想
# 何の記事？
- ページに来てくれた人が「このページを読むことで得られるもの」がわかるような端的な説明
# 誰向け？ どんな役にたつ？
- 推定読者が誰かを書く
- 自分向けじゃないな、と判断した人が迷わずブラウザバックできるように
# あらすじ
- あらすじを好きに書く
- あまり長くなりすぎないように
# 具体的に何を使ったか
- 使ったツールをリンクや画像付きで紹介
- 参考サイトなどもここに載せる
- 見出し4くらいの大きさで、目次に載るようにする
# 何をやったか
- やったことを手順通りに書く
- 手順の番号を手入力し、見出し機能で目次に載るようにする。
# 結果
- 成果物や結果などを書く
- 感想などもここに書いていい
# 応用事例
- 他にも使えそうな事例ややってみたいことがあれば書く
- これも見出し機能で目次に載るようにする
# デメリット、できなかったことなど
- この手法ではできないことなど
- この手法を選ぶ前にやろうとしてできなかったことなど
- 同じ轍を踏む人が出ないようにという情報を残す
```

### 意識したこと
上記リンクから自分ならこれが必要と思う項目を抜き出してテンプレートをつくりました。
最低限この順番なら記事になり、どんな記事でも応用でき、ざっくり読み飛ばせそう！……を意識。

Qiitaは目次がデフォルトでつき、必要に応じて読み飛ばしができることが魅力だと思います。
なので、大切な項目は見出し機能を使って目次に並べることを忘れないようにというところも意識しました。

下記文章を各記事を書き出す前にコピーし、そこから箇条書きなどで文章を組み立てていきました。


# 結果
- 自分でも書きやすくなった
- テンプレートがあることで落ち着いてかけるようになった
- 読む人を意識しながら文章を書くようになった

とはいえ、テンプレートができたところで読みやすい記事を書けるようになったわけでも、書き続けられるわけでもありません。
書き続けているうちに少しずつ変化していくものとも思います。
結城先生の本にあるように、著者の帽子を捨て、読者目線で改良していければと思います。
AutoHotkeyでXbox Game Barを常駐させるスクリプトを作った


    #Persistent  ; スクリプトを常駐させる
    SendMode Input  ; キーストローク送信モードを高速化

    Loop  ; 無限ループを開始
    {
        if !IsGameRunning() and !IsGameBarRunning()
        {
            Send, {LWin Down}{g}{LWin Up}  ; Xbox Game Barを起動
            Sleep, 500  ; 一定時間待機（Xbox Game Barが開くのを待つ）
            Click, 1440, 540  ; xとyはクリックしたい画面上の座標
        }

        Sleep, 10000  ; 10秒待機してからループの先頭に戻る
    }

    IsGameRunning() {
    Process, Exist, Game.exe　; Gameは実行されたくないプロセス名
    return ErrorLevel != 0  ; プロセスが実行中であればtrueを返す
    }

    IsGameBarRunning() {
    Process, Exist, GameBar.exe
    return ErrorLevel != 0  ; プロセスが実行中であればtrueを返す
    }