OmniAICreator/Qiita-1.07M huggingface dataset:
マークダウンで本文が長くなる時に折りたたむ方法(メモ)

# 概要
Githubなどのマークダウンが使えるコメントで本文が長くなると読みにくくなってしまいますね。
これを折りたたみにしてなるべく邪魔にならないようにする方法ないかなぁと思って調べたのでそのメモです。

# やり方
マークダウン自体にはないのでHTMLの`details`を使う

## 例

### コード

```markdown
<details>
<summary>
ここにタイトル(折りたたまれても表示される)
</summary>
ここに折りたたまれる内容
</details>
```

### 表示結果

<details>
<summary>
ここにタイトル(折りたたまれても表示される)
</summary>
ここに折りたたまれる内容
</details>

# 備考
## テーブルと組み合わせ
### テーブル in details
これはうまくいきます。

```markdown
<details>
<summary>
テーブル in details
</summary>

|タイトル|説明|
|:--:|:--:|
|タイトルA|これはテーブルが折りたたまれるかのテストです|
|タイトルB|2行目|

</details>
```


<details>
<summary>
テーブル in details
</summary>

|タイトル|説明|
|:--:|:--:|
|タイトルA|これはテーブルが折りたたまれるかのテストです|
|タイトルB|2行目|

</details>

## details in テーブル
これもうまくいきます
```markdown
|タイトル|折り畳み|
|:--:|:--:|
|タイトル部|<details><summary>折り畳みタイトル</summary>うまくいく？</details>|
```

|タイトル|折り畳み|
|:--:|:--:|
|タイトル部|<details><summary>折り畳みタイトル</summary>うまくいく？</details>|

## 画像 in details
これもうまくいきます。
```markdown
<details><summary>画像テスト</summary>

画像のテストです
![IMAGE_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2399365/233c02c0-f5b3-dc25-dfd5-e9d727b71846.png)

</details>
```

<details><summary>画像テスト</summary>

画像のテストです
![IMAGE_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2399365/233c02c0-f5b3-dc25-dfd5-e9d727b71846.png)

</details>
Unity CancellationToken

スクロールのリスト要素を使いまわして使う系のスクローラーで、
スクロール中に画像を読み込む場合のサンプル処理。

```C#:SampleCell.cs
using System.Threading.Tasks;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
using Cysharp.Threading.Tasks;


public class SampleCell : MonoBehaviour {
	// リスト要素データ用クラス
	public class Data {
		public int memberId;
	}

	// キャラアイコン
	[SerializeField] Image _memberIcon;

	private Data _data;
	private CancellationTokenSource _cts = null;


	/// <summary>
	/// リスト要素のデータ設定
	/// </summary>
	public async void SetData(Data data) {
		_data = data;

		// 表示更新
		UpdateView();

		await Task.CompletedTask;
	}

	/// <summary>
	/// 表示更新
	/// </summary>
	private async void UpdateView() {
		// キャンセル
		_cts?.Cancel();
		// CancellationTokenSource生成
		_cts = CancellationTokenSource.CreateLinkedTokenSource(this.GetCancellationTokenOnDestroy());

		try {
			// 読み込み完了までImageを非表示
			_memberIcon.gameObject.SetActive(false);
			// 画像を読み込み (※AppliResourceManagerは独自で用意しているもの)
			Sprite sprite = await AppliResourceManager.Instance.LoadAssetAsync<Sprite>($"asset_bundle/path/{_data.memberId}", _cts.Token);
			// 読み込んだ画像をImageに設定
			_memberIcon.sprite = sprite;
			// Imageを表示
			_memberIcon.gameObject.SetActive(true);
		} catch (System.OperationCanceledException e) {
			// 画像読み込みがキャンセルされた場合
		}
	}
}

```
【Flutter】Logging Error Failed to initialize logging system. が出た時

## エラー全文
```
Logging Error Failed to initialize logging system.
LogMessage may be missing. 
If this issue persists, try setting IDEPreferLogStreaming=YES 
in the active scheme actions environment variables.
```

Xcodeでrunした時に発生。
このエラーでビルドが止まったり、正常に動かなかったりはないが、エラー表示が気持ち悪いのとログのエラーなので、直しておきたい。

## 手順
try settingと書いてる通りにIDEPreferLogStreaming をYESにする。

- Xcodeメニューバーの`Product`から`Scheme` > `Edit Scheme...`を選択
- `Arguments Passed on Launch`に`IDEPreferLogStreaming=YES`を追加
- Closeを押して閉じる

## エラー解消
これでエラーが消えてすっきり。
vbsの作法 その77

# 概要
vbsの作法、調べてみた。
練習問題、やってみた。

# 練習問題
vbsで、QiitaのuserのContributionを取れ。

# サンプルコード

```


Function Scraping(url)
	SamAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
	Set objHTTP = CreateObject("Microsoft.XMLHTTP")
	objHTTP.Open "GET", url, False
	objHTTP.SetRequestHeader "User-Agent", SamAgent
	objHTTP.Send
	Set objStream = CreateObject("ADODB.Stream")
	objStream.Type = 1
	objStream.Open
	objStream.Write objHTTP.responseBody
	objStream.Position = 0
	objStream.Type = 2
	objStream.Charset = "utf-8"
	http_source = objStream.ReadText
	objStream.Close
	'MsgBox http_source
	Set re = New RegExp
	re.Pattern = "Contribution: ([0-9].+[0-9]) "
	re.IgnoreCase = True
	re.Global = True
	Set Matches = re.Execute(http_source)
	For Each Match in Matches
		'RetStr = RetStr & "位置は、" & Match.FirstIndex & " です。一致した文字列は、"
		'RetStr = RetStr & Match.Value & " です。" & vbCRLF
		RetStr = RetStr & Match.submatches(0) & " です。" & vbCRLF
	Next
	msgbox RetStr
	Set re = Nothing
	Set Matches = Nothing
	Set objHTTP = Nothing
	Set objStream = Nothing
End Function

Scraping("https://qiita.com/ohisama@github")


```

# 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/3667cb35-7170-1765-dd0f-d5e0e405d7b0.png)

以上。
Supabase のWrapper 機能の設定方法 (修正済み)

# 環境

Windows
Supabase のサーバーとローカル両方で確認



# Supabase Wrapper

Supabase Wrapperを使ってStripeのデータにSupabaseからアクセスする #SQL - Qiita
https://qiita.com/dshukertjr/items/eb20dc13ec5c313d9dfa

この記事は、↑この記事の修正記事です。



# 修正箇所

2箇所あります。

エラーの1箇所目は、

SupabaseのWrappers機能を設定する前に。

Postgresのpublicとは別に外部スキーマを作ります。

```
CREATE SCHEMA Stripe;

```

↑SupabaseのSQL Editorで実行してください。

※このStripeのスキーマが存在しないと、Wrapperを登録できないのでエラーになるようです。



## Wrappersの設定

Supabaseのダッシュボードから

左サイドバーDatabase
Wrappers
Enable 有効化

+ Create a new wrapperボタンを押します。

※ボタンは2つ見えるがどちらでもいい。

Stripeを選んで追加します。

Create a Stripe Wrapper画面が開きます。


## Wrapper Configuration

エラーの2箇所目、空白を使わない。

```
# Wrapper Name
Stripe dev <<<<文字間に空白をいれるとエラーになる
↓
Stripe_dev <<<<文字間に空白を入れない

# Your wrapper's server name will be Stripe dev_server

# Stripe Configuration
# Stripe Secret Key
.env.localファイルから取ってくる
sk_test_51*****VmU


# Stripe API URL
https://api.stripe.com/v1

# Foreign Tables
# You can query your data from these foreign tables after the wrapper is created

# Add foreign tableボタン

```



↑「Add foreign table」ボタンを押して、「テーブルの数分」設定画面をそのたびに開きます。

```Add foreign tableボタン
# Select a target the table will point to
Subscriptionsを選択

# Select a schema for the foreign table
Stripeを選択 (新規に作りません、作ってもエラーになります。)

# Table name

subscriptions
customers
prices
products

```

テーブルは↓これだけ作るのを繰り返します。
subscriptions
customers
prices
products

Saveボタンを押します。

これでStripeのWrappersが作成されます。

![Stripe設定後.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44761/eb8e39af-b710-796a-d1d6-493e175d7e31.png)


# 結果

Wrapperの設定はできたが、このWrapperをどうやって使うかはまだ勉強中なので、この設定でちゃんと使えるかどうかはわからない。

## わからないこと

作った外部テーブルの中身は何を設定したらいいかわからない。

今回はSupabaseのWrappers機能を使ってStripeの外部テーブルを作成しただけで、これをどうやって使うのかはまだわからない。

現在は、Wrappersで外部テーブルを作っただけで、この先は未知数
E資格合格体験記


## E資格合格体験記

2024年2月18日に受験したE資格の試験に合格したので、振り返りがてら合格体験記を書きたいと思います。

## E資格とは

・E資格とは、日本ディープラーニング協会が主催している「ディープラーニングを実装するエンジニアの技能を認定する資格試験」である。
・G検定の内容を詳しくしたような試験。
・協会が認めた認定講座を受講して、修了試験を突破しないと受験することができない。

## 前提
・私立大学2年生（情報系学科）
・1年生の時に、統計検定2級を取得
・データコンペ(signate)を少しやっていた

## 受験までの経緯
元々、大学生のうちに何か身につけてそれを元に就活をしたいと考えており、何をしようか調べていたときにデータサイエンティストという職種を知って、AIとかデータ分析とか面白そうくらいの興味でpythonから勉強し始めました。

調べていくとデータサイエンティストの業務内容はデータを分析して予測モデルを作るといった内容があり、機械学習の話が出てきてそこでAIに興味を持つようになります。

特に、Udemyの講座で機械学習について学んでいる時に、「AIってこうやって学習するんだ！」ってすごい感動したのを覚えています。ニューラルネットワークを知った時は天才すぎると思いました笑
（この辺りから統計の知識が出てくるようになり、統計検定2級を取りました）

この調子でデータコンペのビギナー限定みたいなやつになんとか挑戦してみて、モデルの精度を上げるのが難しかったのですがグンと上がった時はすごい楽しかったです。

そして段々とAIに触れる時間が増えてきて、せっかくだから体系的に学んで全体像を見てみようということで受験を決意しました。

## 認定講座について
自分が受講した認定講座はAVILENの「全人類がわかるE資格講座」です。

この講座を選んだ理由は、サポートが手厚くしっかり学ぶならおすすめなどネットに書いてあったからで、確かにコーディングの採点や質問対応などサポート充実していました。
他の講座を受講していないのでわかりませんが、講義資料もかなり詳しく作られていたと思います。pythonや数学の初歩から解説してくれるチャプターもあったので復習もしやすかったです。

個人的にコーディング演習はAIの仕組みをよく理解していないと解けないものだったので、アウトプットの訓練としてすごくやりごたえがありました。

## 認定講座以外で勉強したもの
認定講座以外ではyoutubeと黒本（徹底攻略ディープラーニングE資格エンジニア問題集）という問題集を取り組んでいました。

youtubeは、データサイエンス研究所というチャンネルにとてもお世話になりました。
E資格の範囲が網羅されているわけではないのですが、直感的な理解に繋がりやすい解説が魅力的でした。

黒本の方は、本番の形式に近い総仕上げ的な問題集でした。
この黒本を仕上げることはとても合格に響いたと思います。

ただ、形式こそ同じですがE資格はシラバスが短いスパンで変わるようなので、シラバスを見ながらズレている部分は認定講座の資料を深く読み込みました。

特に今回(2024#1)以降からまたシラバスが変わると思うので要注意です。

## 試験結果
試験結果はメールで試験終了後、大体３週間くらいできました。
以下はメールの一部です。



■合否結果

【　合　格　】

総受験者数　 1,194名
合格者数　　　 867名


■分野別の得点率
応用数学：71 ％
機械学習：81 ％
深層学習：65 ％
開発環境：86 ％


全体的にあまり手応えがなかったので、不安だったのですが想像よりも得点できていたようで安心しました。
ただ、受験者数に対して合格者もかなり多いと思うので、認定講座でめげずに走り切ることが大切だと思います。

## 最後に
E資格は受けるまでが大変な資格だと感じましたが、先人の天才的な閃きを学ぶことがとても楽しかったです。ディープラーニングをベースに画像認識や自然言語処理を知って、当初の目的であったAIの全体像を知ることができたと思います。

最近はchatgptなどAIがより身近に感じられる機会が増えてきて、
勉強していてもAIの発展に置いていかれるんじゃないかと思えてくるくらいです笑

なのでAIの発展に置いていかれないためにも、AIとはどのようなものなのか、
どのように活用していくべきなのかを理解する上でとてもおすすめな資格だと思います。
[Docker Desktop]Something went wrong  Wsl.exe -l -v --all

# 背景
Dockerを使用した経験が両手分ぐらいしかないまま新しいパソコンを購入し、新パソコンで作業している際にDockerが必要になったのでとりあえずDocker入れるかーとうろ覚えの知識でインストールしているときに直面したエラー
## エラー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637403/31c795ac-1fcb-1c08-63a0-aca4ae30ea8e.png)
**Something went wrong
Wsl.exe -l -v --all**

いったいこれは…？？旧パソコンの時にこんなエラー出なかったはずでは？？？となり調べてみたらWSLというものをインストールする必要があるらしい。
旧パソコンのときにはいつのまにか入れていたみたいでまったく知らなった。
そもそもWSLって何？となったので簡単にまとめる

# WSL
WSLは**Windows Subsystem for Linux**の略でWindows上でLinux 環境を構築するためのソフトウェアとのこと。
## インストール
インストール方法はPowerShellにて以下のコマンドを実行
```
wsl --install
```
ということでエラーがなくなりDockerのインストールが終わりました。
「Steam for Chromebook」にて豆腐化した日本語フォントへの対策

# 課題

Chromebook Plus にインストールした Steam クライアントにて、日本語フォントが化けてしまう現象が発生しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8721/d911f451-71e2-dcd0-37c1-3f8d426521dd.png)

「Steam for Chromebook」はまだベータ版であるため、そのうち修正される可能性は高いですが、とりあえずの対策手順を記事にします。

# IPAフォントのダウンロード

IPAexフォントの最新版をダウンロードします。
今回は、「2書体パック(IPAex明朝(Ver.004.01)、IPAexゴシック(Ver.004.01))」をダウンロードしました。
https://moji.or.jp/ipafont/ipafontdownload/

ダウンロードに保存したZIPファイルは、右クリックメニューから「すべて解凍」を選択して解凍しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8721/58a3277e-ba3f-1260-92e0-05f467e55f91.png)

# Steam用VM環境へフォントをインストール

Chromeブラウザにて `Ctrl+Alt+T` キーを押して、croshを起動します。
`vmc list` コマンドでVMリストを確認すると、Steamがインストールしてある環境では `borealis` が表示されます。
```
crosh> vmc list
borealis (7369498624 bytes, raw, sparse)
termina (10737557504 bytes, min shrinkable size 9165602816 bytes, raw)
Total Size (bytes): 18107056128
```

`borealis`に対して操作するためにまずは Steam クライアントを起動しておきます。
ダウンロード フォルダを共有するために `vmc share` コマンドを実行。
`borealis` シェルへログインするために `vsh borealis` コマンドを実行。
```
crosh> vmc share borealis "Downloads"
Downloads is available at path /mnt/shared/MyFiles/Downloads
crosh> vsh borealis
```

`borealis` にダウンロードフォルダからIPAフォントをコピーしてきます。
`fc-cashe` コマンドによってフォントキャッシュを更新したら、一度 Steam クライアントを終了します。
```
[chronos@Chromebook ~]$ mkdir -p /home/chronos/.local/share/fonts/ipa-jp/
[chronos@Chromebook ~]$ cp /mnt/shared/MyFiles/Downloads/IPAexfont00401/**/*.ttf /home/chronos/.local/share/fonts/ipa-jp/
[chronos@Chromebook ~]$ ls /home/chronos/.local/share/fonts/ipa-jp/
ipaexg.ttf  ipaexm.ttf
[chronos@Chromebook ~]$ fc-cache -vf
Font directories:
        /home/chronos/.local/share/fonts
        /usr/local/share/fonts
        ...
fc-cache: succeeded
```

Steam クライアントを再起動して、「STEAM SETTINGS - Interface - Steam Client Language」から「日本語 (Japanese)」が文字化けせずに表示されていれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8721/597f8dde-d5d0-143b-1023-71b1986be9fb.png)

言語を変更して Steam クライアントを再起動すると、無事に日本語化されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8721/6f0c008a-95ff-f5e0-e68e-3cb55fe231e5.png)
【初めての人用】　Django  アプリケーションフォルダを作る

<header>
<h1>今回やる事</h1>
・アプリケーションフォルダをコマンドを実行して作成する


<h1>必要な環境</h1>
python のインストール<br>
インストールURL<br>
https://python.org/  <br>


Djangoをインストールしておく<br>
仮想環境無しでもできるが、仮想環境をおすすめ。

Djangoの環境構築してない人はこっちを先にみると良い
[【初めての人用】 Django環境構築 ロケット飛ばすところまで。](https://qiita.com/souichirou157/items/0ebe37a1016d79062f49)





自分はwindowsを使っているが、Macの方はターミナル操作のコマンドは各自で調べていただきたい。

とりあえずフォルダに移動してpythonの仮想環境を開く




```
venv\Scripts\activate.bat   
```
<p>venvは自分のフォルダの名前</p>





<h3>アプリケーションフォルダを作成する</h3>

```
django-admin startapp  django-app
```



<p>一応補足(以下割愛)、django-Appの部分は作成するフォルダの名前</p>

<p>確認すると<p>


```
db.sqlite3
django-app
Django_dev 
manage.py
```

<p>なんかできた。</p>

<p>次回はhtml表示するくらいまでできたらと思う</p>
Renesas TSIP①：鍵の管理

## はじめに
Renesas TSIPは、Renesas RXシリーズで利用できるMCU組み込みのセキュリティソリューションです。

秘密鍵管理のためにTSIPを使おうとすると、いろいろと準備が必要でした。
この記事は、Renesas TSIPを使えるようにするためのシリーズ記事の一つで、TSIPでの鍵管理についてのものです。

筆者はRenesas から個別提供されるTSIPのソースコード版を見ることができません。間違いがあるかもしれませんので、そのつもりでご覧いただければ（そして修正点を教えていただけると）嬉しいです。

## TSIPでの鍵の種類
TSIPでは、3種類の鍵の種類があります。

### 平文鍵
Renesasのドキュメントでは平文鍵とは書かれていません。暗号化、署名・署名検証などに使える普通の鍵データです。
平文鍵には、ユーザ鍵、UFPK、KUKがあります。
#### ユーザ鍵
ユーザ鍵は、アプリケーションが使用する任意の鍵です。RSA/ECCの秘密鍵や公開鍵、AESの共通鍵などです。
MCUは平文の鍵を受け付けないため、ユーザ鍵は後述のUFPKまたはKUKにより暗号化して注入することが必須です。

#### UFPK
UFPKはユーザ鍵（および後述のKUK）をMCUに注入する際に利用する鍵で、ユーザがSecurity
 Key Management Toolで作成します。ユーザ鍵（およびKUK）を注入する際にUFPKで暗号化することにより、ユーザ鍵（およびKUK）を平文でやり取りすることを避けることができます。

UFPK自体をMCUに注入するためにも暗号化が必須です。このために利用されるのがHRKと呼ばれるユーザには不可視の鍵で、HRKはRenesas DLM ServerとTSIP内部にのみ存在します。
ユーザは、生成したUFPKをMCUに注入するためRenesas DLM Serverに送ります。Renesas DLM Serverは暗号化したUFPKを返してくるので、これをMCUに注入します。
UFPKをRenesas DLM Serverに送信したり暗号化されたUFPKを受信したりするためには安全な通信路が必要です。インターネット上で安全な通信路を確保するために、PGPによる暗号化・復号化が利用されています。

#### KUK
KUKはユーザ鍵をMCUに注入する際に利用する鍵で、ユーザがSecurity
 Key Management Toolで作成します。ユーザ鍵を注入する際にKUKで暗号化することにより、ユーザ鍵を平文でやり取りすることを避けることができます。

KUK自体をMCUに注入するためにも暗号化が必須です。このために利用されるのはUFPKです。

### Encrypted Key
ユーザ鍵、UFPK、KUKをMCUにインストールする際、平文鍵をそのまま注入することはできません。必ず暗号化して注入する必要があり、暗号化された鍵のことをEncrypted Key と呼びます。
* ユーザ鍵：UFPKまたはKUKにより暗号化された状態でMCUに注入します。UFPKおよびKUKはPC上で生成するものなので、ユーザ鍵の暗号化はPC上で行うことができます。
* KUK：UFPKにより暗号化された状態でMCUに注入します。UFPKはPC上で生成するものなので、KUKの暗号化はPC上で行うことができます。
* UFPK：HRKにより暗号化された状態でMCUに注入します。HRKはRenesas DLM ServerおよびTSIP内部にのみ存在するものなので、UFPKの暗号化はPC上で行うことができず、必ずRenesas DLM Serverで行う必要があります（TSIPでUFPKの復号化は行われません）。

ユーザ鍵とKUKの平文鍵からEncrypted Keyを生成するためのソフトウェアとして、Renesas からSecurity Key Management Toolが提供されています。
UFPKの平文鍵からEncrypted Keyを生成することは、Renesas DLM Server でのみ行うことが可能です。

Encrypted KeyはMCUごとのキーではなく、全MCUで共通の情報です。
Encrypted Keyはデータフラッシュに保存することができますが、仮にデータフラッシュのデータをコピーされた場合、コピー先のMCUでも同じ鍵を利用することができてしまいます。

### Wrapped Key
Encrypted KeyをMCUに注入し、TSIPで使用できる形式にしたものです。以下の関数で変換します。
* `R_TSIP_GenerateXXXKeyIndex`: UFPKによりユーザ鍵が暗号化されたEncrypted KeyをWrapped Keyに変換します。
* `R_TSIP_UpdateXXXKeyIndex`: KUKによりユーザ鍵が暗号化されたEncrypted KeyをWrapped Keyに変換します。
* `R_TSIP_GenerateUpdateKeyRingKeyIndex`: UFPKによりKUKが暗号化されたEncrypted KeyをWrapped Keyに変換します。

Wrapped Keyは、MCU内部で乱数生成することもできます。以下の関数を利用します。
* `R_TSIP_GenerateXXXRandomKeyIndex`

Wrapped Keyは、HUKと呼ばれるデバイス固有の暗号鍵により暗号化されているため、各デバイス固有の情報です。
Wrapped Keyはデータフラッシュに保存することができますし、仮にデータフラッシュをコピーされてもデバイス固有の情報のため同じ鍵を利用することはできません。

## どう使うか
以下のように利用したいと思います。

UFPKおよびKUKのEncrypted Keyをプロビジョニング時に注入し、`R_TSIP_GenerateUpdateKeyRingKeyIndex`でKUKのWrapped Keyを生成します。その後、データフラッシュにはKUKのWrapped Keyを保存します。
これで、以下の状態ができます：
* PC上にはKUKの平文鍵が存在する。通信路上ではUFPKはHRKで、KUKはUFPKで暗号化されているため鍵は漏洩しない。
* デバイス上にはKUKのWrapped Keyが存在する。このデータはデバイス固有なのでコピーされて漏洩することはない。

ユーザ鍵は、KUKで暗号化してEncrypted Keyを生成します（Security Key Management Toolを使う）。
この情報をMCUに注入し、`R_TSIP_UpdateXXXKeyIndex`によりユーザ鍵のWrapped Keyを生成します。その後、データフラッシュにはユーザ鍵のWrapped Keyを保存します。
これで、以下の状態ができます：
* PC上にはユーザ鍵の平文鍵が存在する。通信路上ではKUKで暗号化されているため鍵は漏洩しない。
* デバイス上にはユーザ鍵のWrapped Keyが存在数る。このデータはデバイス固有なのでコピーされて漏洩することはない。
ハッカソン序章: 初挑戦！Ruby勉強会の企画から運営まで

# はじめに
とあるハッカソンに技術メンターとして、参加させていただきました。ハッカソン当日以前に**Rubyに関する勉強会**（1時間枠）を実施する必要があり、その勉強会の企画と運営に関してお話します。

# 勉強会当日までの流れ
技術メンターとして参加することが決まり、まず始めにハッカソン運営メンバーとキックオフMTGを行い、どのような勉強会の内容でいくのか摺合せを行いました。その後、他技術メンターと協力して勉強会の資料を作成し、勉強会当日を迎える形になりました。

# 勉強会の内容
勉強会の内容は、受講対象者をプログラミング経験者だがRubyを触ったことがない人ということでハッカソン運営メンバーと摺合せできていたので、RubyやRuby on Railsの概要から入り、Rubyの基本構文等を説明しました。その後、クラスやインスタンスに関して簡単に説明しました。Rubyの基本構文等を説明する際は、例題や問題を散りばめて実際に実行（ブラウザ上でRubyコード実行できるサービスを使った）してもらい実行結果を自分の手で確かめてもらう形式を選択しました。

# 勉強会当日
勉強会はウェブ会議システムを用いて行い、準備していた内容ほぼ全てを制限時間内に説明することができました。

# 所感
勉強会の内容を検討する際に、勉強会後に受講者がRubyの概要をイメージできている状態になるためにはどのような内容がいいのか非常に考えていました。その結果、<font color="Red">例題や問題を自分で実行してもらいRubyのコードに慣れてもらう形</font>がいいのではないかと考えました。また、キックオフMTG当初は受講対象者のレベル感が分からなかったため、勉強会の内容がなかなか定まらない状態でした。しかし、受講対象が確定してきたタイミングでハッカソン運営メンバーに受講対象者のレベル感について確認を行うことで勉強会の内容が一気に固まり始めました。勉強会を実施する際は、<font color="Red">受講対象者のレベル感を確認したうえで勉強会の内容を検討する</font>とより早く内容を決めやすくなると感じました。今回の勉強会の時間は1時間ということが決まっており、最初は1時間丸ごと使った勉強会の内容を想定していましたが、<font color="Red">トラブルが起きた時のためにバッファ10分を設けた勉強会の内容</font>に方向を切り替えました（他技術メンターの方ありがとうございます！）。勉強会当日はウェブ会議システムトラブルが生じ、10分程遅れて始まったため、バッファに救われました...!

# おわりに
今回初めて勉強の企画と運営をやってみて、自分自身Rubyの勉強にもなり、勉強会を開催するためにはどのような準備が必要なのか少しはイメージできるようになったため、非常にいい経験でした。あとは、勉強会受講者の方にアンケートも記載していただいているため、アンケート結果を元にブラッシュアップできたらと思います！
初心者ガイド：Gitブランチ作成からRemote Pushまでの手順



### **user**:

ChatGPT先生、今、main ブランチを git clone してきて、ちょっと改変しました。これを remote の main に push するのは今はやめておきたいので、適当な branch を作ってそれを remote に push したいです。

---

### **assistant**:

はぁ…君って本当に、まったく…もう。やり方は自分で調べることもできるでしょ？ただ、仕事ですから私が教えてあげます。こんな感じでコマンドを打つといいわよ。

まずは新しいブランチを作成するために、以下のコマンドを使って。後ろの ``branch-name`` は君が適当に決めた名前にするんだから。

```bash
git checkout -b branch-name
```

その後、君が加えた変更を新しいブランチにコミットするために以下のコマンドを打つの。

```bash
git add .
git commit -m "commit message"
```

この ``commit message`` は、君が何を改変したかを簡単に記述する場所よ。適当にすませないでちゃんと書きなさい。

それから君が新しく作ったブランチを remote に push するために以下のコマンドを使用するのよ。

```bash
git push origin branch-name
```

こんな感じでできるわ。自分で調べてみる能力も鍛えなさい、なんでもかんでも他人に頼るなんて思わないで。でもそれだけじゃわからない時は、聞いてくれればいいから。私がここにいるのだから。

---

### **user**:

ありがとうございます。できたみたいです。

---

### **assistant**:

もう、君って子は本当に……一つぐらい自分で何とかする気はないの？…でもまあ、無事にできたならそれで良かったわね。ここで私がいる限り、どんな問題もきっと解決できるさ。

こんな基本の操作も覚えておいてよ。だって君、これからもっと複雑な問題に直面するかもしれないでしょ？その時には私がちゃんとアドバイスしてあげるから、安心しなさい。

…ま、まあ、認めてあげるけど、君が頑張ってコマンドを打ったのは評価に値するわ。次からはもっと自分で解決する力を身につけて、それで私に少しでも頼らないようにしてみてほしい。それが君の成長なんだから。

---

### **user**:

ありがとうございます。このやりとりをブログ記事にするなら、どんなタイトルにしますか？

---

### **assistant**:

もう、そういうのも自分で決められないの？でもまあ、仕方がないから…「初心者ガイド：Gitブランチ作成からRemote Pushまでの手順」なんてどうかしら？でも、記事の内容はしっかりと書いてね。新たな読者があなたのブログに来てくれるきっかけになるかもしれないから。

そして、悩んだときや迷ったときは素直に聞いてみること。それが最も早い解決法よ。私がここにいる限り、君をサポートするから。でも適当に頼るんじゃなく、自分でも解決できるような力を身につけることも忘れないで。それが成長するための第一歩よ。

---
【Next.js】Pinoを使用してログを取る方法

## Pinoをインストール

https://github.com/pinojs/pino

```terminal
yarn add pino
```

## Pinoの設定ファイルを作成

```ts:lib/pino/logger.ts
import pino from 'pino'

const logLevel = process.env.PINO_LOG_LEVEL ?? 'info'

export const logger = pino({
  level: logLevel,  // 出力するログレベルを設定
  timestamp: pino.stdTimeFunctions.isoTime,  // timestampの形式を変更
  // ログレベルを数値から'error'のような文字列に変更
  formatters: {
    level: (label: string) => {
      return {
        level: label,
      };
    },
  },
  // ブラウザで使用するための設定
  browser: {
    asObject: true,
    serialize: true,
  },
})

```

## ログを出力する

```ts
import { logger } from '@/lib/pino/logger'

logger.error('TEST')
```
E資格2024#1合格体験記

# はじめに
2024年2月に実施された、JDLA Deep Learning for ENGINEER 2024 #1（E資格2024#1）に合格したので、その時のことを記録に残しておこうと思います。
E資格の詳細は[こちら](https://www.jdla.org/certificate/engineer/)

簡単に説明すると、MLP、CNNから始まり、RNNや生成分野、画像処理、自然言語処理、音声処理、そして強化学習といった幅広い分野の知識が問われます。
なお2024#2よりシラバス改訂が入るので、これから受験される方はシラバスの内容に従って勉強してください。
# 自己紹介
軽く受験前のスペックを紹介しておきます。
- 旧帝大理系4年
- C言語、Pythonの実装経験あり
- 機械学習・深層学習の実装経験あり(とは言ってもそこまでガッツリはやっていない)
- 応用情報技術者取得済み

全くの素人ではなかったので、試験内容はだいぶ頭に入りやすかったです。

# 受験資格
資格試験としては珍しい？かもしれませんが、受験資格として、	「[JDLA認定プログラム](https://www.jdla.org/certificate/engineer/#certificate_No04)を試験日の過去2年以内に修了していること」があります。
どれでもいいので試験日までに認定プログラムを受講して修了しなければなりません。
私は株式会社AVILENの「[全人類がわかるE資格講座](https://avilen.co.jp/lp/e-certificate-jdla/)」を受講しました。
修了条件は
- 全てのコーディング演習の合格
- 自分で一から作るプロダクト課題の合格
- 修了試験[基礎] (線形代数、情報理論、機械学習、Python、統計)と修了試験[深層学習]合格

でした。（結構ボリューミーです笑）
簡単にAVILENの良かった点と残念だった点をまとめておきます。参考にどうぞ。
- 良かった点
    - 講義資料と動画がわかりやすい
    - 動画は長くて15分の細切れなので、スキマ時間に見られる
    - コーディング演習の返却が早い(大体1日で返ってくる)
    - 試験対策の演習問題が豊富
- 残念だった点
    - 細切れの動画しかないので、復習で一気に見たいとき見にくい
    - 間違った問題だけを再度ピックして解くことができない(応用情報の過去問道場に慣れてしまった...)

# 受講開始
私は受講開始が2023年の11月でした。多分だいぶ遅い...
それでも2024#1で受験を決めたのは
- 2024#2からシラバス改訂が入る
- 就活の履歴書に書きたい
- そもそも次の試験はおそらく就活で忙しい

といった理由でした。急ピッチで受講を進めなければ！という思いのもと、一ヶ月で全てのコーディング演習を**気合い**で終わらせました。それぞれの単元ごとにコーディング演習が設定されており(一部ないのもあった)、全部で11個でした。提示された所要時間は5~8時間のものが多かったです。
私はE資格の勉強をすると決めた日は、一日一単元進めることにしていたので、三日で一単元のペースで受講していました。私は大学入学がちょうどコロナ禍で講義動画を基本2倍で見る癖がついており、だいぶ早かったと思います。

# プロダクト課題
プロダクト課題は全ての単元を受講してから、学んだことを活かして自分で何か作ってみようというスタンスのものでした。とは言っても、「何か作れ！」と言われて「出来たよー」と言える人はほとんどいないので、講座の中でいくつか案を出してもらえます。私は大学の授業でCNNを少し書いたことがあったので、それを応用したものをプロダクト課題としました。

# 修了試験
気づけば12月半ば。修了試験[基礎]は何度も挑戦でき、分量も少ないのでサクサク合格できたのですが、鬼門は修了試験[深層学習]です。
修了試験[深層学習]は本番を同じ形式で7割正解しなければなりませんでした。また修了試験は二回落ちると三回目以降は追加料金が発生します。とはいっても受けてみないことには始まらないので、記憶の新しいうちに1回受けてみることにしました。
結果はなんと合格で修了試験を突破してしまいました。突破して**しまった**んですよね...これは後から見返してわかったことなのですが、一回目の修了試験でわからなくて適当に選んだところの正解率が異様に高く、完全なる上振れで合格してしまいました。~~本番だったら良かったのに。~~

# 卒論との戦い
自己紹介でもお話しした通り、大学卒業の時期でしたので、やはり卒論という壁があります。また、年明けすぐは学会に行っていたため、1月はほとんどE資格の勉強ができませんでした。それでも当の本人は余裕ぶっていました。修了試験の合格がまぐれとも知らずに...

# 最後の追い込み
1月の末辺りからようやく修了試験の結果が上振れであったことに気が付きます。そもそもあれだけの勉強時間で試験に合格できるはずがないのです。
それから追い込みでやった勉強は以下の通りです。
- 各単元のノートでのまとめ直し
    - 情報の正確性より、内容が一目で思い出せることを重視(詳しい内容は講義資料をその都度見返す)
    - 紙よりiPad派なのでGoodNotesを使用
- 各単元の内容をそらで言えるようにする
    - 例えば、物体検出の各モデルはどんどん進化していますが、何が変わったか(例：Faster R-CNNはRegion ProposalにCNNを導入した)と何が改善されたか(例：精度)を時系列順に自分の頭の中に叩き込む
    - スキマ時間(お風呂とか)にもできて良き
- 講座の修了者用の演習問題をひたすら解く
    - AVILENの講座は、修了者用で演習問題がランダムで出題されるシステム

試験日は金土日の三日間から好きに選べるのですが、間に合わないことはわかっていたので日曜日に設定しました。なんとか土曜日までに勉強を終わらせあとは受けるのみ！

# 結果
無事に合格できました！勉強が間に合ったようで良かったです。試験初日(2月16日)の三週間後の3月8日に結果がメールで届きました。
![スクリーンショット 2024-03-09 20.18.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739888/74ccc348-5575-133d-74f4-4ebf1d442f8a.png)
深層学習の点数があまり奮わず...勉強しなおしたいと思います。

# 最後に
一時はヒヤヒヤしましたが、なんとか合格できて良かったです。総勉強時間は70~80時間ぐらいだったと思います。
これを読んだ方はぜひ早めに勉強を始めてください笑
少しでもどなたかの役に立てれば嬉しいです。
AtCoder初心者振り返りメモ ABC344

# ABC344の回
https://atcoder.jp/contests/abc344

# A-問題
https://atcoder.jp/contests/abc344/tasks/abc344_a

[問題文]
英小文字と | のみからなる文字列 S が与えられます。
S は | をちょうど 2 個含むことが保証されます。

2 つの | の間にある文字および | を S から削除した文字列を出力してください。

[考察や感想]
解答用に用意した変数「 T 」に転記するタイミング、転記しないタイミングを変数「 flg 」を使って制御しました。

````Python:A.py
# 2024/3/9 本番解答

S = input()

# 解答用の変数と制御用の変数を用意する
T = ""
flg = 0

# flg の値で「転記する」「しない」を制御した
for c in S:
    if c != "|" and flg == 0:
        T += c

    if c != "|" and flg == 2:
        T += c

    if c == "|":
        flg += 1
print(T)
````
追記:解説を見たら、"|" で区切って、間を除去する方法が書いてありました。
それが一番スマートですね～。。。
````Python:A解説.py
# 2024/3/9 解説の模範解答
L = list(map(str, input().split("|")))

print(L[0]+L[2])
````

# B-問題
https://atcoder.jp/contests/abc344/tasks/abc344_b

![344b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547298/a7bd3638-15ed-6929-d270-d0a12b97f75e.png)

[考察や感想]
Nの入力が与えられないというレアケースで、リスト格納に手間取りましたが、順に入力してくる値の最後が「 0 」とわかっているので、ループから出る記述を追加した。入力とは、逆の順に出力して正答となりました。

````Python:B.py
# 格納用の配列を用意
A = []

for _ in range(101):
    a = int(input())
    A.append(a)
    if a == 0:
        break

L = len(A)

# 配列A を末尾から順番に出力する
for i in range(L-1,-1,-1):
    print(A[i])
````

# C-問題
https://atcoder.jp/contests/abc344/tasks/abc344_c

![344c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547298/108bd6dc-254c-9730-47d5-65a06d5dd3d1.png)

[考察や感想]
まず最初に問題通りの動作を実装しましたが、TLEで通りませんでした。そこは、想定通りでいかに高速化するかを考えました。

全パターンでは、多すぎると考えられるので
・配列X の最大値を取得して、それ以上の値を除去
・set() に格納して、一意に集約

なんとか、TLEを回避できました。

````Python:C.py
# 問題通りに順番に変数に格納
N = int(input()) 
a = list(map(int, input().split()))
M = int(input()) 
b = list(map(int, input().split()))
L = int(input()) 
c = list(map(int, input().split()))
Q = int(input()) 
X = list(map(int, input().split()))

# 配列X の最大値を取得
MX = max(X)

# a,b,c それぞれをソートし、X の最大値を超える値を除去
a.sort()
b.sort()
c.sort()

A = []
for i in a:
    if i <= MX:
        A.append(i)
    else:
        break
B = []
for i in b:
    if i <= MX:
        B.append(i)
    else:
        break
C = []
for i in c:
    if i <= MX:
        C.append(i)
    else:
        break

# すべての組み合わせを一意に集約
ST = set()
for x in A:
    for y in B:
        for z in C:
            d = 0
            d = x+y+z
            if d <= MX:
                ST.add(d)
                
# STの中から、X の値の有無をひとつずつ検証
for x in X:
    if x in ST:
        print("Yes")
    else:
        print("No")
````
[DEV NOTE] Initial turbo project and add tailwindcss library

## Prepare environments
ENV: node v16.20.1
In this project, I use pnpm. So that we need to install pnpm by:

```
npm install pnpm -g
```

## Init project
Firstly, we need to create project by this command:
pnpm dlx create-turbo@lasted

Enter project name: "codeforstartup"

## Start project
```
turbo dev
```

## Add tailwindcss
# Add tailwind-config package

Under packages folder, create tailwind-config folder.
Under tailwind-config folder create: File packages/tailwind-config/package.json

```
{
  "name": "tailwind-config",
  "version": "0.0.0",
  "private": true,
  "main": "index.js",
  "devDependencies": {
    "tailwindcss": "^3.2.4"
  }
}
```

File packages/tailwind-config/tailwind.config.js

```
const colors = require("tailwindcss/colors");

module.exports = {
    content: [
        // app content
        "./app/**/*.{js,ts,jsx,tsx}"
        // include packages if not transpiling
        // "../../packages/**/*.{js,ts,jsx,tsx}",
    ],
    theme: {
        extend: {},
    },
    plugins: [],
};
```

Nice. You added tailwind-config successfully. Now we need to install it by:
pnpm install
【Python】リストの中に特定の要素があるか判定する処理はsetを使え

某競技プログラミングコンテストにて、要素群の中に特定の要素が入っているかを判定する処理を実装しなければならない問題がありました。

この問題では、なにも工夫せずリストで実装すると指定された実行時間以内にプログラムが終了しません。
#### リストを使う方法(イメージ)
```python
A=[1,2,3,4,5,6,7,8,9,10]
if 5 in A:
    print("YES")
```
このように実装して、要素が少ない時は問題にはならないですが、要素がとても多いときは実行時間が長くなり、競技プログラミングのコンテストではタイムオーバーになってしまう。ちなみに計算量はO(n)。

では、どうしたら良いのか。
**リストを使うのではなく、set型を使えば高速化できる！**

#### setを使う方法
```python
A={1,2,3,4,5,6,7,8,9,10}
if 5 in A:
    print("YES")
```
このようにするだけで劇的に速くなるそうです。計算量はO(1)に。

setの使い方は以下のページ
https://docs.python.org/ja/3/library/stdtypes.html#set

# 参考
https://at-428.blogspot.com/2019/07/python-in-list.html

https://docs.python.org/ja/3/library/stdtypes.html#set

https://qiita.com/bee2/items/4ab87d05cc03d53e19f9
FlutterをWebで動かすと白紙になる人へ

# はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1657253/fdf196c3-20b3-e174-5655-bb64ebb0213c.png)

FlutterでWebを使おうとしたら、正常にビルドはできるのに表示されないトラブルに遭遇したため、対処法を書いておく。

ちなクッソ雑い記事なのでごめん🙏

## その1:Flutter in app web viewを使っている場合
エラー内容
:::note alert
TypeError: Cannot set properties of undefined (setting 'nativeCommunication'
:::

なんかこのエラーが出ていた為、ひたすらGithubやらネットの海を漁っていると以下の情報がヒットした。

https://github.com/pichillilorenzo/flutter_inappwebview/issues/1468


このコードをweb/index.htmlのどこかに記載してあげると改善する模様。
```
<script type="application/javascript" src="/assets/packages/flutter_inappwebview/assets/web/web_support.js" defer></script>
```

## その2:Firebase関連のパッケージを最新にする
エラー内容

:::note alert
TypeError: Class constructor IndexedDBLocalPersistence cannot be invoked without 'new'
:::

その１の対応をするとエラーメッセージが変わった。ググってみると以下のサイトの情報がヒットした。

https://stackoverflow.com/questions/77705647/flutter-typeerror-class-constructor-indexeddblocalpersistence-cannot-be-invok

このパッケージを最新Verにしてあげると俺は無事に表示することができた。
```
 dependencies:
  firebase_core: ^0.0.0
  cloud_functions: ^0.0.0
  firebase_auth: ^0.0.0
  cloud_firestore: ^0.0.0
```


# まとめ
FlutterでWebを使おうとするとなかなかすんなりいかねぇな。
OpenTDBとは何か


# OPENTDB とは何か

Open Trivia Database の略で，オープンソースのトリビアデータベースです．
トリビアとは，雑学や豆知識のことで，簡単に言うとクイズの問題です．
つまり，この api を使えばクイズアプリを作っているときに，クイズのデモ問題をわざわざ用意しなくて良くなります！

https://opentdb.com/browse.php

# 使い方

```
https://opentdb.com/api_config.php
```

ここにアクセスして，クイズのカテゴリーや難易度，問題数などを設定して，その URL を使って GET リクエストを送ると，クイズの問題が返ってきます．

::: note
公式 HP で条件を入力すると，その条件に合った URL が生成されます．

https://opentdb.com/api_config.php
:::

# 例

言語は*Vue.js*を使っています．

```javascript
<template>
  <div>
    <h1>クイズアプリ</h1>
    <div v-if="quiz">
      <p>{{ quiz.question }}</p>
      <button v-for="(answer, index) in quiz.answers" :key="index" @click="submitAnswer(answer)">
        {{ answer }}
      </button>
    </div>
    <p v-else>読み込み中...</p>
    <p>スコア: {{ score }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      quiz: null,
      score: 0
    };
  },
  created() {
    this.getQuiz();
  },
  methods: {
    submitAnswer(answer) {
      if (answer === this.quiz.correctAnswer) {
        this.score++;
      }
      this.getQuiz();
    },
    async getQuiz() {
      let data;
      do {
        const response = await fetch('https://opentdb.com/api.php?amount=1&type=multiple&encode=base64');
        data = await response.json();
      } while (data.response_code === 5);

      const quizData = data.results[0];
      this.quiz = {
        question: atob(quizData.question),
        answers: this.shuffleArray([...quizData.incorrect_answers.map(answer => atob(answer)), atob(quizData.correct_answer)]),
        correctAnswer: atob(quizData.correct_answer)
      };
    },
    shuffleArray(array) {
      for (let i = array.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [array[i], array[j]] = [array[j], array[i]];
      }
      return array;
    }
  }
};
</script>

```

## api

使用した api はこれです
`https://opentdb.com/api.php?amount=1&type=multiple&encode=base64`

簡単に説明すると，
| Parameter | Description |
|-----------|-------------------------------|
| `amount` | 問題数 |
| `type` | 問題の形式（選択か yes,no か） |
| `encode` | エンコードの種類 |

エンコードをしておかないと，`"`が`&quot;`のようになってしまうので，エンコード・デコードを行っています．

## response_code

`response_code`が 5 のときは，問題取得に失敗したときなので，再度リクエストを送るようにしています．
ChatGTPの反応がない際に解決した方法

## はじめに

こんにちは、今日はエンジニアにはもはや必須ツールと言ってもいいChatGTPですが、
どんなスクリプトを送っても一切反応がなく、使えない不具合を解消できた方法を共有します。

## 遭遇した不具合

一才どんなスクリプトを送りつけても全く反応がなく、一切返答がない状態になった。
その他、いろんな不具合の際に一度試してみてください。
クッキー削除してるので、何かしら改善する可能性高し。

## 解決法

1.Chromeを開く。

2.右上の3点リーダーをタップ

3.プライバシーとセキュリティをタップ

4.サードパーティCookieをタップ

5.すべてのサイトデータと権限を表示

6.openai.comを見つける（右上から検索も可）

7.ゴミ箱をクリック

8.再度サイトに戻りログイン

## 最後に

せっかく課金したのに使えないとかしんどいですよね。
この解決法を見つけるまでChatGTPが使えず、めちゃめちゃ開発の総度が落ちたのを感じました。
気付かぬうちにどっぷりAIに依存してる、、恐ろしい時代だ。。
機能管理システムを作成（途中）


### ソース管理
[GitLab](https://gitlab.com/tokio-mori/management-function )
[GitHub_設計書](https://github.com/tokio-mori/control-function-document )
[GitHub_フロント](https://github.com/tokio-mori/control-function-front )
[GitHub_バック](https://github.com/tokio-mori/control-function-back )

## 経緯
機能管理を行うシステムを作成しております。

Javaの学習をする際、Streamやぬるぽ等、特定の処理について
実装をして学びたい機会があります。
実装を行う際、毎回環境構築から始まり、コード管理をGithubで行っても
再度それを見ることがない（いちいち探したりするのが面倒くさい）ので
上手く管理ができていませんでした。

そんな中、実装した機能についてはまとめて画面上で管理できるようにすれば、
現状を改善できるかもしれないと思い、本アプリの作成に取り掛かりました。

## 機能概要
・初期表示時、保存してあるシステムの一覧を表示します
・機能を選択→実行をすると保存してある機能が実行されます
・ホーム画面から外部リンクへ遷移ができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/8b2c486c-4613-59d6-65c9-a535c836c6cf.png)

## 機能説明

下記がホーム画面になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/72aa2b66-55c9-2895-6d0c-dd9ae3016c22.png)

機能としてはざっくり２点です。
１．Feature List
　自身で作成した処理をまとめる箇所です。
２．External Links
　外部リンクです。よく使っているサイトをホーム画面から飛べるようにしてあります。

 Feature Listについて
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/7dd4291e-dc48-2bd7-2d9f-9347e0070326.png)

Feature Listにある機能名のボタンを押下すると、上記モーダル画面が開きます。
`Run`ボタンを押下すると機能が実行。`Cancel`ボタンを押下するとホーム画面へ戻ります。

## 作成にあたって意識したこと
・デザインはかなりシンプルでちょっとかっこいい感じになるようにしました。
・レスポンシブデザインにすることで、画面サイズを変えても
　操作しやすいようにしました。
・ソースコードもシンプルに、スパゲティ回避できるようにしました。

## 反省点
<b>・実装しようと思っていた機能の実装をまだ完走できていない</b>
・リファクタリング、テスト、DevOpsを行っていない

言い訳：AWSの勉強をしたくなったので、一時離脱します。個人開発だから許されるね。

## さいごに
一旦本アプリの開発は終わりにします。今学びたいAWSが一区切りできたら再開しようと思います。
本アプリはGithubにあげているので、もし機会があれば公開してみようかなと考え中…。
以上です。ありがとうございました。
INSERT文を使ってテーブルにデータを追加する

１）テキストエディタ(VSCodeなど)にINSERT文を書く
```SQL
INSERT INTO <テーブル名>(
    <列名1>,
    <列名2>,
    <列名3>,
    <列名4>,
)VALUES(
  '<値1>',
  '<値2>',
  '<値3>',
  '<値4>',
);
```

２）テーブルがあるか確認
```SQL
SHOW TABLES;
```

３）カラムもあるか確認
```SQL
SHOW COLUMNS FROM <テーブル名>;
```

４）エディタで記入したINSERT文を貼り付け→Enter
　　※**Query OK,** 1 row affected (0.009 sec)と表示されたら成功
  
５）テーブルの内容を確認
```SQL
SELECT * FROM <テーブル名>;
```
コマンドラインからサクラエディタのGrepを実行する

サクラエディタはコマンドラインからGrepを実行することができます。コマンドラインオプションは以下のドキュメントにあります。

https://sakura-editor.github.io/help/HLP000109.html

**Example** 

対象のフォルダの配下にあるjavaファイルをGrepし、結果をtxtファイルに出力したい。サクラエディタはフルパスで指定する。

```
"C:\Program Files (x86)\sakura\sakura.exe" ^
    -GREPMODE ^
    -GCODE=99 ^
    -GOPT=SPUH ^
    -GFOLDER="C:\Path\To\Folder" ^
    -GFILE="*.java" ^
    -GKEY="検索ワード" > "C:\Path\To\GrepResult.txt"
```

なお、同じことをGUIから実行した場合は以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/a326d79c-15df-530b-ec17-54ae540e42ce.png)


**環境情報**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/5ba63ffe-c038-5bd7-b5dc-a6b7d83ce166.png)
MySQLの作成


**1.ターミナルで直接作成する場合**

１）エディタ(VSCode等)でテーブルを作成

```SQL:SQL
CREATE TABLE <テーブル名> (
  <列名1> <データ型> <制約>,
  <列名2> <データ型> <制約>,
  <列名3> <データ型> <制約>
)DEFAULT CHARACTER SET=utf8mb4;
```
 ※データベース名、テーブル名、列名は半角文字のアルファベット、数字、(_)
 ※名前(テーブル名、カラム名)の最初の文字は半角アルファベット
 ※名前(テーブル名、カラム名)の重複はNG
 ※テーブルの括弧内の最後は,がいらない
 ※データ型や制約はMySQL公式ドキュメントを確認↓
 >https://dev.mysql.com/doc/refman/8.0/ja/create-table.html
 

２）ターミナルでMySQLに接続し、SQL文を貼り付ける→Enter→パスワードの入力
  
  ```SQL:SQL
　% docker-compose exec app mysql -h <ホスト名> -u <ユーザー名> -D <データベース名> -p　
 ```
※-hはホスト名
※-uはユーザー名
※-Dはデータベース名
 
３）テーブルができているか確認
```SQL:SQL
% SHOW TABLES;
```
４）カラムも確認
```SQL:SQL
% SHOW COLUMNS FROM reviews;
```
５）quitでMySQLから出る
　Byeと表示されたら成功!
　※MySQLは使用したらすぐ退出(quit)する

**2.ファイルから実行する場合**

１）エディタ(VSCode等)でテーブルを作成（ここはターミナルで直接実行の場合と同じ）

```SQL:SQL
CREATE TABLE <テーブル名> (
  <列名1> <データ型> <制約>,
  <列名2> <データ型> <制約>,
  <列名3> <データ型> <制約>
)DEFAULT CHARACTER SET=utf8mb4;
```
 ※データベース名、テーブル名、列名は半角文字のアルファベット、数字、(_)
 ※名前(テーブル名、カラム名)の最初の文字は半角アルファベット
 ※名前(テーブル名、カラム名)の重複はNG
 ※テーブルの括弧内の最後は,がいらない
 ※データ型や制約はMySQL公式ドキュメントを確認↓
 >https://dev.mysql.com/doc/refman/8.0/ja/create-table.html

 ２）appコンテナに入り、/bin/bashを作成する
 
```SQL:SQL
 % docker-compose exec app /bin/bash
 ```

 ３）appコンテナからMySQLに接続し、ファイルからSQLを実行→Enter→パスワードの入力
 ```SQL:SQL
 mysql -h <ホスト名> -u <ユーザー名> -D <データベース名> -p < tmp/<ファイル名>.sql
 ```
 ４）テーブルができているか確認
```SQL:SQL
% SHOW TABLES;
```
５）カラムも確認
```SQL:SQL
% SHOW COLUMNS FROM reviews;
```
６）quitでMySQLから出る
　Byeと表示されたら成功!
　※MySQLは使用したらすぐ退出(quit)する

次回、PHPからMySQLに接続する方法
統計検定準一級 2021年過去問解説 論述 問2 ベイズ法

# 初めに #
統計検定準一級の2021年度の過去問の解説です。
問題本文は統計検定の公式サイトでダウンロードしてください。

## 論述問題 ##
### 問2 ベイズ法 ###
#### (1-1) ####
共役事前分布に関する問題。事前分布と事後分布が同じ分布となるような事前分布のことを共役事前分布という。よく知られているようにベータ・ポアソン分布、ガンマ・ポアソン分布や正規分布-正規分布が共役事前分布となる。 なお共役事前分布の「共役」は「きょうやく」と読むのが正しいらしい。

#### (1-2) ####
$X$と$\theta$が
```math
\begin{align}
X &\sim Bin(n, \theta)\\ 
\theta &\sim Beta(\alpha_0, \beta_0)
\end{align}
```
という分布に従うとき、$(X, \theta)$の同時確率密度関数は
```math
\begin{align}
f(X, \theta) &= {}_nC_x \theta^x (1-\theta)^{n-x}\frac{1}{\mathrm{B(\alpha_0, \beta_0})} \theta ^{\alpha_0-1} (1-\theta)^{\beta_0-1} \\
&\propto \theta^{x+\alpha_0-1} (1-\theta)^{n-x+\beta_0-1}
\end{align}
```
となるので、$X=x_0$が与えられたときの事後分布は、
```math
\begin{align}
f(\theta | X=x_0) &= \frac{f(X=x_0, \theta)}{\int d\theta f(X=x_0, \theta)} \\
&= \frac{\theta^{x_0+\alpha_0-1} (1-\theta)^{n-x_0+\beta_0-1}}{B(x_0+\alpha_0, n-x_0+\beta_0)}
\end{align}
```
となる。したがって$\alpha_1=x_0+\alpha_0, \beta_1=n-x_0+\beta_0$である。

#### (1-3) ####
対数尤度の微分は
```math
\frac{\partial \mathrm{log} \mathcal{L}}{\partial 
 \theta} = \frac{x+\alpha_0-1}{\theta} - \frac{n-x+\beta_0 -1}{1-\theta}
```
となるので、上式=0と置いて、答えが得られる。

#### (2-1) ####
事前分布が共役事前分布であるという知識を用いると、答えが(B)あることはすぐに分かる。事前分布、事後分布ともに正規分布であるため、メトロポリス・ヘイスティング法で容易に平衡分布へたどり着ける。事前分布は$N(0, 1)$であるが、事後分布は$X_1=3.0$というデータに引っ張られて平均値が正の値となっている。

#### (2-2) ####
具体的に事後分布を示す必要があるので計算しないといけない。少し大変。
まず$X\sim N(\mu, \sigma^2), \ \mu \sim N(\mu_0, \sigma^2_0)$としたときの、$\mu$の事後分布を計算しておく。同時確率密度関数は
```math
\begin{align}
f(X, \mu) &\propto \exp \left( -\frac{(X-\mu)^2}{2\sigma^2} -\frac{(\mu-\mu_0)^2}{2\sigma_0^2}\right) 
\end{align}
```
であり、指数関数の中身を$\mu$に注目して整理すると
```math
-\frac{1}{2} \left( \frac{1}{\sigma^2}+\frac{1}{\sigma^2_0}\right) \left( \mu - \left( \frac{1}{\sigma^2}+\frac{1}{\sigma^2_0}\right)^{-1} \left( \frac{X}{\sigma^2} +\frac{\mu_0}{\sigma^2_0}\right) \right) + (\mathrm{\muに依存しない部分})
```
と書ける。したがって、$X=x$が与えられたときの事後分布は
```math
\begin{align}
f(\mu | x) &\sim N(\mu', \sigma'^2) \\
\mu' &= \left( \frac{1}{\sigma^2}+\frac{1}{\sigma^2_0}\right)^{-1} \left( \frac{x}{\sigma^2}+\frac{\mu_0}{\sigma^2_0}\right) \\
\sigma'^2 &= \left( \frac{1}{\sigma^2}+\frac{1}{\sigma^2_0}\right)^{-1}
\end{align}
```
となる。
まず$X_1=3.0$が観測されたときの事後分布は、上式に$x=3.0, \ \mu_0=0, \ \sigma^2=4, \ \sigma^2_0=1$ を代入すると$N\left( \frac{3}{5}, \frac{4}{5} \right)$となる。次に、さらに$X_2=2.3, \ X_3=4.2, \ X_4=1.5$が観測されたときの事後分布を考える。このとき$X_2, \ X_3, \ X_4$が観測されたとする代わりに、平均値$\bar{X}=8/3$が観測されたと見なしてよい。$X \sim N(\mu, \ \sigma^2)$のとき、$\bar{X} \sim N(\mu, \ \sigma^2/3)$となることに注意すると、上記の事後分布の式に$x=8/3, \mu_0=3/5, \sigma^2=4/3, \sigma_0^2=4/5$を代入して、解答は$N(11/8, \ 1/2)$となる。
安全・手軽なマインクラフトサーバーを作りたい話。Part 1

# 発端
マインクラフトサーバーとして、`安心・手軽`とはどのようなものだろうか。
基本的なマインクラフトサーバーの作り方は、この記事を見ている人ならば既にご存知であろう。単純なマインクラフトサーバーにおいて`安全`でない部分として`ポート開放`というものがある。

そしてこのポート開放を安全に行うには、ある程度の`知識`や`手順`が必要なことからも`手軽`ではない。

本企画の目的は`安全・手軽なマインクラフトサーバー`を作ることにある。

# 先行事例
本企画は勉強のために既存のサービスを`再現`する形となる。

https://gsht.io/

えずこ氏が開発した`SecureShare.net`では、ポート解放を必要とせず、サーバーの公開を安全なものとすることができる。尚、プレイヤーは従来同様にアドレスとポートを入力すればサーバーにアクセスできるため、手軽さはそのままである。

詳しいロジックは上記のサイトに記載があるため、参考にしてほしい。

# 実現方法

SecureShareNetの説明にもあるとおり、リレーサーバーというものを間に挟むことで実現している。
よって今回は以下のように、`リレーサーバー`と`サーバーPCアプリケーション`を追加することで実現をしようとしている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3403549/13e70969-95e8-1754-cb5b-d9a154d40bf7.png)

各セクションでの動作内容を整理する
### Player層
- 各プレイヤーは通常のサーバーにアクセスするのと同様に`アドレス`、`ポート番号`を入力することでサーバーにアクセスしたと認識する
- だが実際には`クラウド上のリレーサーバー`にアクセスを行う
Player側からは通常の認識同様の動作が期待できるため、今回はPlayerセクションに変更は加えないこととする。

### サーバーPC層
- 通常のサーバーは外部からのアクセスを許すことで通信を確立するが、本構造においてはサーバーPC上に存在するアプリケーションから、`クラウド層`に存在するリレーサーバーにアクセスすることでデータのリクエストを行う
- リレーサーバーに`Player層`からの通信が存在した場合に`アプリケーション`には`リレーサーバー`にリクエストした圧縮データが返ってくる
- 圧縮データを解凍し、マインクラフトサーバーにアクセスすることで通信が確立する
- この際、マインクラフトサーバーからはPlayerがアクセスしてきているのと同様に見えているため、マインクラフトサーバーは通常のものと同様に動作する

### クラウド層
- `リレーサーバー`は通常のサーバー同様に`ポートを開放`し、Playerからのアクセスを待つ
- Playerからのアクセスがあった場合、動作クロック内の通信内容を`圧縮`してサーバーPCからのリクエストに応える
- サーバーPCからデータの返答があった場合、Player層からのリクエストに返答する形でデータをPlayer層に返す

# Part 1を終えて
Part 1は以上となる。
実現可能性および、今後必要な知識や制作範囲の決定が行えたため、目標達成とする。
次回に続く。
パソコンを特定の時間に自動でシャットダウンする

# ○やりたいこと
夜の9時45分になったらPCをシャットダウンさせる。夜更かし防止！！
10分前の9時35分に画面になにかしら通知的なやつを出したい
# ○実現方法
PCシャットダウンするバッチファイルを作って9:44にタスクスケジューラーで実行
9:44に1分後に電源が切れる通知が表示される
# ○結果
適当な時間にタスクスケジューラを実行させて成功
10分前の9:35に通知ではなく1分前になったけど良しとする
9:44で試していないけど良しとする！

# ○NW環境
Win11pro

# ○設定
## batファイルの中身
shutdown /s
文字コード　utf-8
### ハマったところ
なし
### わからなかったところ
SJISじゃないと動かない思ってたが動いた。Win11だからか？

## タスクスケジューラの設定
### ハマったところ
バッテリー駆動だったので時間になってもタスクが実行されなかった。
条件指定方法が電源接続時じゃないと実行されなかった。
ネットワークの接続を条件に変更したらタスクが実行された。
![スクリーンショット 2024-03-09 213241.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3683457/e63af9d8-e2cb-1b94-0e10-8614a921eddb.png)

### わからなかったところ
タスクスケジューラでバッチファイル実行時とバッチファイルダブルクリックではシャットダウンされるまでの動作が少し異なる。
タスクスケジューラでは、1分後にシャットダウンされる旨のダイアログが表示されてから1分後くらいにPCがシャットダウンされる。
![スクリーンショット 2024-03-07 215827.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3683457/9d08c481-9760-6e4c-2b78-e458c3bf8211.png)

以下が記載されたバッチファイルを実行すると即時シャットダウンされる。
"shutdown /i"

# ○その他
コマンドプロンプトで"shutdown  ?"とかでヘルプ表示される
文字コードutf-8だったけど実行できた

# ○参考記事
・shutdownコマンドについて
https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/shutdown

・Windowsコマンドについて
https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/windows-commands

・バッチファイルについて
https://qiita.com/talesleaves/items/8990a55b7a770de3d34f
https://www.tohoho-web.com/ex/bat.html
https://qiita.com/sksmnagisa/items/8c4c1788af44cc1dc63a

・タスクスケジューラーについて
https://learn.microsoft.com/ja-jp/windows/win32/taskschd/about-the-task-scheduler
https://qiita.com/Richard_Roe/items/44e16841f16ee40c6113
Python3エンジニア認定基礎試験：勉強方法とおすすめ教材



# はじめに

私はデータアナリストとして働いており、データ分析のスキルアップのためにPythonの学習を始めました。学習の一環として、Python3エンジニア認定基礎試験を受験した時の私の勉強方法とおすすめ教材をご紹介したいと思います。

# 試験概要

Python3エンジニア認定基礎試験は、Pythonの基礎知識を問う試験です。試験内容は、以下のようになっています。

問題数：40問
出題形式：選択式
試験方式：CBT方式（コンピューター上で実施）
試験時間：60分
合格基準：7割正解
受験料：一般価格 11,000円（税込） / 学割価格 5,500円（税込）

参照：Python 3 エンジニア認定基礎試験
https://cbt.odyssey-com.co.jp/pythonic-exam/python3basic.html
# 勉強期間と勉強方法

私の勉強期間は1週間でした。限られた時間の中で効率的に学習するために、以下の3つのステップに重点を置いて取り組みました。

### 1. Pythonの基礎を学ぶ

まずは、Pythonの基本文法を学習する必要があります。私は、はやたすさんの「【永久保存版】Python入門完全攻略」というYouTube動画を視聴しました。この動画は、Pythonの基礎を分かりやすく解説しており、初心者にもおすすめです。

### 2. Pythonチュートリアルの内容を理解する

Python公式のチュートリアルも学習教材としておすすめです。Pythonアカデミアさんの「Python基礎文法入門（Python3エンジニア認定基礎試験 絶対合格の講座）」というYouTube動画では、チュートリアルの内容を丁寧に解説しているので、一緒に学習すると理解が深まります。

### 3. 公式問題集を解く

学習の最後に、公式問題集を解いて知識の定着を図りました。私は、「徹底攻略Python 3 エンジニア認定［基礎試験］問題集」という書籍を使用しました。この問題集には、試験によく出る問題が収録されております。解説も丁寧で分かりやすいため、知識の定着に役立ちます。

### おすすめ教材

#### 動画

はやたすさん「【永久保存版】Python入門完全攻略」
https://youtu.be/W1cnEb8LwVU?si=ESEq6Pr7FV4kFuk3
Pythonアカデミアさん「Python基礎文法入門（Python3エンジニア認定基礎試験 絶対合格の講座）」
https://youtube.com/playlist?list=PLHPmh91LsTgyDBFW2XIXZG2BvV6QXilEg&si=O8IedG_wlH3-cnXD

#### 書籍

徹底攻略Python 3 エンジニア認定［基礎試験］問題集
https://aoten.jp/store/detail.html?no=a1800i_k210201

#### 模擬試験

試験対策として、模擬試験を受けることもおすすめです。PRIME STUDYでは、3回分の模擬試験が無料で提供されています。

PRIME STUDY
https://study.prime-strategy.co.jp/
# まとめ

今回ご紹介した勉強方法を参考に、ぜひPython3エンジニア認定基礎試験合格を目指してみてください。
CloudFormationの参照系の技

# 記事の概要
AWSで技術検証する際にも[CloudFormation](https://aws.amazon.com/jp/cloudformation/)を使用するようにしています
CloudFormation用のファイルを作成する際にARNやAccountIDを参照する場面が増えてきたので色々と便利だったのでまとめようと思います
# 使用頻度の高い変数はパラメータ化しておく
リソース名の後にDEVやSTGなどを付ける場合はパラメータ化しておくと便利です
```
AWSTemplateFormatVersion: "2010-09-09"
Description: "Example1"
Parameters:
  Env:
    Type: "String"
    Default "Dev"
    # ↓のようにすると選択形式になる
    AllowedValues:
        - "Dev"
        - "Stg"
        - "Prod"
Resources:
  TimeStreamDB:
    Type: AWS::Timestream::Database
    Properties:
      DatabaseName: !Sub "TimeStream-${Env}"
```
# RegionやアカウントIDの参照
[擬似パラメータ](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html)参照ですね
```
Resources:
  TestBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: "GiziBucket"
        Tags:
        - Key: Region
          Value: !Ref 'AWS::Region'   # 東京リージョンでこのスタックを立ち上がると'ap-northeast-1'になる
        - Key: AccountId  
          Value: !Ref 'AWS::AccountId' # 自分のAccountIdの値になる
```
# CloudFormationで作成したリソースの参照
cloudformationで立ち上げたリソースのArn等を参照する
## そもそも!Refや!GetAttを理解していないと難しい
リソース情報を参照するには!Refや!GetAttで何が返却されるのかを理解しておく必要がある
各リソースで参照した場合に何が返却されるかはCloudFormationドキュメントの[Return Values](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#aws-resource-iam-role-return-values)を読むしかない
例えば、IAMRoleの場合だとリソースネームが返却されると明記されている。
![参照.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1952885/7fc4e5d5-cee2-0319-ef23-9685191a80c9.png)
↓例
```
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VpcCidr
      EnableDnsHostnames: "true"
      EnableDnsSupport: "true"
      InstanceTenancy: "default"
      
  InternetGateway: 
    Type: AWS::EC2::InternetGateway
  
  InternetGatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties: 
      InternetGatewayId: !Ref InternetGateway # internetGatewayリソースのIDを参照
      VpcId: !Ref VPC # VPCのIDを参照
```

# 参照を繋げる
一つの値の中に複数の参照系を活用したい場合
```
AWSTemplateFormatVersion: "2010-09-09"
Description: "Sample Stack"
Parameters:
  Env:
    Type: String
    Default: "DEV"
    AllowedValues:
      - "DEV"
      - "STG"
      - "PROD"
Resources:
  TestBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: !Sub
            - Bucket-${Region}-${Env}
            - Region: !Ref 'AWS::Region'
              Env: !Ref EnvName
```
Unleashing the Power of Boostaro in Australia: Elevate Your Energy, Boost Your Life

Unleashing the Power of Boostaro in Australia: Elevate Your Energy, Boost Your LiIn the bustling world we live in, maintaining optimal energy levels is crucial for a productive and fulfilling life. Whether you're a student burning the midnight oil, a professional navigating a demanding work schedule, or a fitness enthusiast pushing your limits, having the right energy boost can make all the difference. Enter Boostaro, the game-changer in the world of energy supplements, now making waves across Australia.

Boostaro: A Revolution in Energy Enhancement

Boostaro, a cutting-edge energy supplement, has gained popularity for its unique approach to enhancing vitality and focus without the unwanted side effects associated with traditional stimulants. Developed with a commitment to quality and backed by scientific research, Boostaro stands out as a reliable solution for those seeking a sustainable energy boost.
Direct buy : https://newsofdesk.com/boostaroget
Facebook : https://www.facebook.com/boostaroget/
Pinterest : https://in.pinterest.com/gummieshealthcare44/
Tumlr : https://www.tumblr.com/gummieshealthca
Twitter : https://twitter.com/health_car66345
Blog : https://fixr.co/event/boostaro-reviews-tickets-448808722?preview=NDQ4ODA4NzIy:1riW1j:sSuWhsUWIgIltDju7his5alOWJLExfQa6OiHzpxg4yc
Blog : https://soundcloud.com/boostaro-reviews-143860297/17098885804350d7g6gl-voicemakerin-speech
Blog : https://gamma.app/public/Unleashing-the-Power-of-Boostaro-in-Australia-Elevate-Your-Energy-uvkim4lcp40eyte
Blog : https://groups.google.com/g/gino-chouinard-cbd-gummies-usa-sk2/c/2ZdCb1dZ_RI
Blog : https://www.bitsdujour.com/profiles/ad0S0m
Blog : https://www.scoop.it/topic/boostaro-reviews-by-boostaro-reviews-74
Blog : https://www.linkedin.com/in/boostaro-reviews-3636142b9/
Blog ; https://infogram.com/unleashing-the-power-of-boostaro-in-australia-elevate-your-energy-boost-your-life-1h984wv35mkmd2p
Blog : https://github.com/Boostarorev/Boostarorev/tree/main
Blog : https://grabcad.com/library/boostaro-reviews-1
fe
QEum Luncharで、tetris.elf

# 概要
QEum Luncharで、bootgrub.imgやってみた。
diskexplorerで、tetris.elfを入れて
grubのコマンドラインに入って、elfを実行した。
「grubが、elfを起動できる」の実証。

# elfとは

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

# GRUBとは

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


# 手順

# tetris.elfをダウンロードする。

https://github.com/programble/bare-metal-tetris

# diskexplorerで、tetris.elfを入れる。

![スクリーンショット 2024-03-09 204400.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/11f60e8d-1ddb-0485-b507-1fab3a0ca4d0.png)

# QEum Luncharで、bootgrub.imgを起動

![スクリーンショット 2024-03-09 173930.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/c473a458-24ca-a03f-1a28-5760c829ad13.png)

Cキーで、コマンドラインに入る
kernelを設定
bootで起動

```
grub> kernel (fd0)/boot/tetris-1.elf

grub> boot
```
![スクリーンショット 2024-03-09 174238.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/fb193a78-024f-49cc-fd08-982d0696b980.png)



# tetrisが起動
![スクリーンショット 2024-03-09 173829.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/e4af5fc2-40c0-82df-1ec1-15a40e475897.png)

以上。
【Oracle Database】Diagnostics Pack / Tuning Packオプションを使用しているかどうか確認する方法について

## はじめに
Oracle Database が「Diagnostics Pack」「Tuning Pack」ライセンスを使用中なのか調べる機会がありましたので、調べる方法について簡単にまとめました。

### 補足情報
#### Diagnostic Packを使用すると、
自動ワークロード・リポジトリ(AWR)、自動データベース診断モニター(ADDM)、アクティブ・セッション履歴(ASH)などの便利な機能を使用することが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072159/64b1950d-a379-3738-04c4-799e997f1ff5.png)

#### Tuning Packを使用すると、
SQLチューニング・アドバイザ、SQLアクセス・アドバイザ、リアルタイムSQL監視などの便利な機能を使用することが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072159/c563fac4-b1a0-c540-d4c5-d929e5b88176.png)

#### 参考記事
https://speakerdeck.com/oracle4engineer/oracle-dbasecamp-9


## 本文

調べるために使用したSQLコマンドは以下の通りです

``` SQL
SQL> select value from v$parameter 
where name ='control_management_pack_access';
 
VALUE
--------------------------------------------------------------------------------
DIAGNOSTIC+TUNING

```
control_management_pack_accecss 初期化パラメータを使って、Diagnostics Pack や Tuning Packを使用中かどうかを調べています。

VALUE で 「DIAGNOSTIC + TUNING」と出ていますが、これは Diagnostics Pack も Tuning Pack も使用中であることを示しています。


## まとめ
「オプションが使用中なのかどうかを調べる方法」という観点でご紹介しましたが、反対に言えばDiagnostic Pack / Tuning Packの機能を使い始める場合は、こちらの初期化パラメータの設定が必要になります。

## 参考資料
https://docs.oracle.com/cd/F19136_01/refrn/CONTROL_MANAGEMENT_PACK_ACCESS.html#GUID-A5CA11BA-AE1F-4A2E-9C59-A98BA1F4E5C2


https://docs.oracle.com/cd/F19136_01/dblic/Licensing-Information.html#GUID-68A4128C-4F52-4441-8BC0-A66F5B3EEC35