OmniAICreator/Qiita-1.07M huggingface dataset:
趣味論文読み：Sketch-Guided Text-to-Image Diffusion Models

# Sketch-Guided Text-to-Image Diffusion Models

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/1fba7961-85fc-724c-dd9b-a19d2a97d550.png)

https://sketch-guided-diffusion.github.io/

:::note info
まずはリンク先のproject pageでデモを触ってみるべき！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/754e2b68-fdb1-1207-58fb-f60112c19978.png)

:::

## Sketch-Guided Text-to-Image Diffusion Models

### 概要
本論文では、スケッチとテキストプロンプトを用いて、テキストから画像への拡散モデルをガイドする新しい手法を提案する。提案手法は、推論時に事前学習済みのテキストから画像への拡散モデルを別ドメイン（例えばスケッチ）からの空間マップでガイドする。従来の手法と異なり、専用のモデルやエンコーダーを新たに学習させる必要がない。

### 研究の背景
テキストから画像への生成モデルは、テキストプロンプトから高品質な画像を生成する能力を持つ。しかし、生成される画像の空間的なプロパティを制御するための直感的な操作手段に乏しい。特に、スケッチなどの空間マップで推論をガイドすることは、未解決の課題であった。

### 新規性
- **Latent Edge Predictor（LGP）の導入**: ノイズのある画像のLatent特徴を空間マップにマッピングする小規模な多層パーセプトロン（MLP）を使用する。LGPは数千枚の画像でのみ学習され、微調整を通じて中間画像を空間マップと一致させる。
- **汎用性と柔軟性**: LGPはアウトオブドメインのスケッチにも対応可能で、自由な手描きスタイルのスケッチも処理できる。

### 方法
1. **入力準備**: スケッチと対応するテキストプロンプトを入力とし、事前学習済みの拡散モデルの推論プロセスをガイド。
2. **Latent Edge Predictorの訓練**: 拡散モデルのコアネットワークから抽出されたLatent特徴を使用し、ノイズのある画像のLatent特徴を空間エッジマップにマッピング。
3. **反復プロセス**: ガイドされた推論プロセス中に、エッジ予測を行い、エッジマップとの類似度を計算し、勾配を逆伝播させて中間画像を調整。

:::note info
Latent Edge Predictor（潜在エッジ予測器）は、テキストに基づいて画像を生成する際に、その画像のエッジ（輪郭や境界線）をどのように描くかをコントロールするもの

このシステムの役割は、ユーザーが提供したスケッチ（手書きの図や線画など）に基づいて、画像のエッジをより正確に生成すること

- **スケッチの使用**：ユーザーが提供したスケッチ（線画）を元に、画像のエッジ（輪郭）をどう描くかを学習。
- **画像生成の調整**：テキストから画像を生成する際、このスケッチに沿ってエッジを形成するようにモデルを調整。
- **結果の改善**：テキストだけでなく、ユーザーが提供したスケッチも考慮して、よりユーザーの意図に合った画像を生成できるようになる。
:::

### 実験と応用
- **スケッチから画像への変換**: 提案手法は、さまざまなドメインのスケッチに対して優れた性能を示し、自由な手描きスタイルのスケッチでも高品質な画像を生成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/44a1ef48-239d-4e44-15ec-3edd9b529be9.png)

### 注目すべき点
- **高いエッジ忠実度**: エッジガイダンススケールβを調整することで、生成される画像のリアリズムとエッジの一致度のバランスを取ることができる。
- **少数の訓練データでの高効率訓練**: Latentエッジ予測器は数千枚の画像での訓練で済み、単一GPUで1時間程度で学習可能。
- **多様な応用**: 提案手法は、スケッチガイドの他にも、サリエンシーガイド、背景のインペインティングなどの空間的にガイドされたテキストから画像へのタスクにも適用可能。

### 結論
提案手法は、スケッチとテキストプロンプトを用いて、事前学習済みのテキストから画像への拡散モデルをガイドする新しいアプローチを示す。高い汎用性と効率的な学習プロセスにより、さまざまなドメインやスタイルのスケッチに対応でき、幅広い応用が期待される。
C_TS422_2021 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（66/100）

【66日目】
トピック 7：SAPS/4HANAにおける拡張計画（12/14）

≪問題66≫
アドバンスト計画ではSAPS/4HANAのマスタデータとトランザクションデータが使用されます。どのデータオブジェクトで、アドバンスト計画フラグを設定できますか。
（２つ選択）
□品目
□製造バージョン
□作業区
□プラント

≪解答≫
■品目
□製造バージョン
■作業区
□プラント

≪解説≫
◆ PP/DSのマスタデータオブジェクトは、SAPS/4HANAのマスタデータオブジェクトとは異なるため、マスタデータを転送する際には、関連するSAPS/4HANAマスタデータオブジェクトがPP/DSの計画マスタデータオブジェクトにマッピングされます。
◆品目は製品に統合され、作業区はリソースに統合されます。そのためには、品目と作業区のマスタデータにおいて拡張計画フラグを設定する必要があります。
趣味の論文読み：The Chosen One: Consistent Characters in Text-to-Image Diffusion Models

## The Chosen One: Consistent Characters in Text-to-Image Diffusion Models
SIGGRPAH 2024

https://omriavrahami.com/the-chosen-one/

https://github.com/ZichengDuan/TheChosenOne

公式ではないけど、コードはあるみたい。

### 概要
この論文では、テキストプロンプトのみを入力として、一貫したキャラクターを自動的に生成する方法を提案している。従来の方法は、ターゲットキャラクターの複数の既存画像を使用したり、手作業で行うプロセスに依存していた。提案手法は、テキストプロンプトに基づいて生成された画像の中から共通のアイデンティティを持つ画像セットを特定し、そのセットから一貫したアイデンティティを抽出する反復プロセスを導入している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/2d5dae12-f996-c796-7a22-6752a065c17b.png)

### 研究の背景
テキストから画像を生成するモデルは、創造的なビジュアルコンテンツの生成に大きな可能性をもたらしている。しかし、生成されたキャラクターの一貫性を維持することは、多くの現実世界のアプリケーション（ストーリーの視覚化、ゲーム開発、広告デザインなど）において重要でありながら困難である。既存の方法では、ターゲットキャラクターの複数の画像を使用したり、手作業で画像をフィルタリングする必要があり、効率が悪かった。

### 新規性
- **完全自動化**: テキストプロンプトのみを入力とし、一貫したキャラクターを生成する完全自動化された方法を提案。
- **アイデンティティの反復抽出**: 生成された画像セットから一貫したアイデンティティを抽出し、それを用いて次の画像セットを生成する反復プロセスを導入。
- **定量的および定性的評価**: 提案手法は、既存の方法と比較してプロンプトの整合性とアイデンティティの一貫性のバランスをより良く保つことを示す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/75b26d45-bd76-1f11-11e7-26ad5100ae48.png)

:::note info
モデル構造のイメージは、この画像が一番分かりやすい
:::

### 方法
1. **画像生成**: テキストプロンプトに基づいて多数の画像を生成。
2. **特徴抽出とクラスタリング**: 生成された画像を高次元の特徴空間に埋め込み、クラスタリングを行う。
3. **アイデンティティ抽出**: 最もコヒーレントなクラスタから共通のアイデンティティを抽出。
4. **反復プロセス**: 抽出されたアイデンティティを使用して次の画像セットを生成し、一貫したキャラクターが得られるまでプロセスを繰り返す。

### 実験と応用
- **ストーリーの視覚化**: 一貫したキャラクターを用いたストーリーの各シーンの視覚化。
- **ローカルイメージ編集**: 提案手法を使用して、指定された背景画像に一貫したキャラクターを挿入。
- **ポーズ制御**: ControlNetを使用して追加のポーズ制御を行う。

### 注目すべき点
- **高いアイデンティティ一貫性**: 提案手法は、異なるコンテキストでも同一キャラクターを一貫して生成。
- **プロンプト整合性の向上**: テキストプロンプトと生成された画像の間の整合性を保ちながら、一貫したアイデンティティを維持。
- **ユーザスタディによる評価**: 提案手法がユーザ視点からも高い評価を受けていることを示す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/e46e2953-8bfc-440a-711d-c7f6aea1bab5.png)

:::note info
文章から、ストーリー仕立ての4コマ漫画みたいに出力できるのが、すごい！
:::

### 結論
この論文では、テキストプロンプトのみを入力として、一貫したキャラクターを生成する完全自動化された方法を提案した。提案手法は、現行のアプローチと比較して、アイデンティティの一貫性とプロンプト整合性のバランスをより良く保つことができる。これにより、ストーリーテリング、ゲーム開発、広告デザインなどの分野での応用が期待される。
C_TS422_2021 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（65/100）

【65日目】
トピック 7：SAPS/4HANAにおける拡張計画（11/14）

≪問題65≫
能力の制約がある場合、どのように実行可能な生産計画を達成できますか。
（３つ選択）
□計画表で利用可能能力に基づいて期間を決定する。
□定期的な間隔で能力供給を増加させる。
□段取時間を削減する最適な順序を定義する。
□計画ウィンドウを縮小する。
□重要なリソースに対して無限生産計画を実行する。

≪解答≫
■計画表で利用可能能力に基づいて期間を決定する。
■定期的な間隔で能力供給を増加させる。
■段取時間を削減する最適な順序を定義する。
□計画ウィンドウを縮小する。
□重要なリソースに対して無限生産計画を実行する。

≪解説≫
◆利用可能な能力は、生産に利用できるリソースの供給を示します。これらの能力所要量時間は、作業の順序の日程計画を使用して決定されます。また、能力所要量は、製品の数量と生産データ構造（PDS）の標準値から計算されます。
◆詳細計画プランニングボードを使用した負荷平準化は、プラスの計画またはバランスの取れた負荷を実現するためのオプションを提供します。目標は、"実行可能な"生産計画を立てることであり、これは以下の方法で実現できます。
（1）対応するリソースの標準能力供給を増やすか、定期間隔で能力供給を増やすことにより、利用可能能力を調整する。
（2）十分な残存能力があるリソースで代替モードを使用する。
（3）十分な利用可能能力がある期間をプランニングボードにて手動で決定または登録する。
（4）段取時間を短縮する最適な順序を形成する。
gradle module metadata について

gradleでビルドする場合、mavenリポジトリを利用することが多いと思います。mavenリポジトリではpomファイルにてモジュール自体の情報やその依存関係を表現します。（pomファイルは拡張子がpom、内容はXMLで記述されています）

https://maven.apache.org/pom.html

そのため、モジュールの依存関係にライブラリモジュールがあると、pomファイルをダウンロードすることになるわけですが、ビルドログのダウンロード進捗をみていると、pomファイルの後にmoduleファイルをダウンロードしている場合があります。
これはなんでしょうか？

```
Download https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/2.0.0/kotlin-stdlib-2.0.0.pom, took 17 ms
Download https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/2.0.0/kotlin-stdlib-2.0.0.module, took 5 ms
```

これは gradle module metadataと呼ばれるもので、Gradle 5.3で1.0になり、6.0でデフォルト対応になっています。

https://docs.gradle.org/current/userguide/publishing_gradle_module_metadata.html

pomファイルよりも詳細にモジュールの情報を記述できるようになっています。
ベースフォーマットもXMLからJSONになっており、よりモダンなファイル形式である印象がありますね。
現在、mavenリポジトリへのpublishを行うと自動的にmoduleファイルも公開されるようになっているので、多くのリポジトリで、moduleファイルを参照できるようになっています。

ライブラリモジュールの依存があると、gradleはpomファイルをとりにいきますが、moduleファイルがある場合、pomファイルにはgradle module metadataが一緒に公開されていることを知らせるマーカーコメントが含められています。
ダウンロードログにあった、kotlin-stdlibのpomファイルを見てみましょう

https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/2.0.0/kotlin-stdlib-2.0.0.pom

```xml:kotlin-stdlib-2.0.0.pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--  This module was also published with a richer model, Gradle metadata,   -->
<!--  which should be used instead. Do not delete the following line which   -->
<!--  is to indicate to Gradle or any Gradle module metadata file consumer   -->
<!--  that they should prefer consuming it instead.  -->
<!--  do_not_remove: published-with-gradle-metadata  -->
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>2.0.0</version>
<name>Kotlin Stdlib</name>
<description>Kotlin Standard Library</description>
<url>https://kotlinlang.org/</url>
```

このように先頭にコメントが挿入されていて、英語での説明の後、以下のようなマーカーがありますね。

```xml
<!--  do_not_remove: published-with-gradle-metadata  -->
```

前段で全部説明されていますが、一緒によりリッチなメタデータがあるからそっち使ってねということですね。
moduleファイルは以下で、中を覗くと、pomファイルでは記述されていない様々な情報が含まれていることが分かります。


https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/2.0.0/kotlin-stdlib-2.0.0.module

moduleファイルの公開が一般的になってきたので、いずれこちらがデフォルトになり、ライブラリモジュールの公開では実質必須になるかもしれないですね。

# pomファイルよりmoduleファイルを優先する方法

これはあくまでこういう設定もできると言うだけで、推奨しているわけではないです。
まだmoduleファイルの参照がデフォルトにはなっていませんが、ほとんどのリポジトリでgradle module metadataが公開されていて、pomファイルのあとにmoduleファイルもダウンロードしないといけないというのはチョット無駄じゃないかな？などと思ってしまう場合もあります。

その場合、リポジトリ設定にて、　`metadataSources`をつかって、利用するメタデータを設定できます。
以下のように設定するとmavenCentralのモジュールについてgradle module metadataを優先して取りに行くようになります。

```settings.gradle.kts
dependencyResolutionManagement {
    repositories {
        mavenCentral {
            metadataSources {
                gradleMetadata()
                mavenPom()
            }
        }
    }
}
```
SharePointのファイル名、フォルダ名を一括コピーする

# 初めに
この記事ではShare Pointにアップロードされているファイルや、フォルダの名称を一括で取得する方法を紹介しています。

# ファイル名やフォルダ名を一括でコピーする方法
ファイル名やフォルダ名を一括でコピーするには以下の流れで作業します。
1. グリッドビューでの編集モードに変更する
![１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612369/953661d3-3293-8117-875a-adde26c13d8f.png)
2. コピーしたい列の１行目を選択する（今回は３行目から６行目までをコピーしようと思います）
![２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612369/5ca5fa99-7294-d893-8ee4-658c4f8dd674.png)
3. シフト（Shift）を押した状態で、コピーしたい列の最後の行を選択する（今回はシフトを押した状態で、６行目をクリックしています）
![３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612369/d7e92ff2-3435-6f61-c05e-d772ff8fb47e.png)
4. コピー（Ctrl + C）をする
5. 貼り付け（Ctrl + V）をする（下記に記載するような拡張子込みで選択したファイル名をコピーできてます）
:::note info
qiita.com.url
エクセルファイル１.xlsx
エクセルファイル２.xlsx
テキスト.txt
:::

# 補足
コピーしたい行を選択するために、上記例ではシフトを使いましたが、コントール（Ctrl）を使って１行ずつ選択することも可能です。
グリッドビューを普段あまり使わない人もいるかと思いますが、操作自体はエクセルと非常に似ており、複数のセルを選択する感覚で操作できます。

もちろん更新日時や更新者といった列についてもコピーすることが出来ます。
趣味論文読み：HyperDreamBooth: HyperNetworks for Fast Personalization of Text-to-Image Models

## HyperDreamBooth: HyperNetworks for Fast Personalization of Text-to-Image Models

:::note info
DreamBoothの応用研究の一つ
一枚の顔画像のみでその人物の色々なバリエーションの画像を生成することができる。
:::


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/1aa576a7-4eab-53e4-8254-be2509e1dd8c.png)
すごすぎ...

### 概要
HyperDreamBoothは、テキストから画像生成モデルのパーソナライズを高速かつ効率的に行うための新しい手法です。DreamBoothの25倍速く、わずか1枚の参照画像から高品質な個別化を実現します。HyperNetworkを利用して初期予測を行い、短時間で高精度な微調整を行うことで、モデルの知識とスタイルの多様性を保ちながら、対象の詳細を高忠実度で再現します。

### 研究の背景
テキストから画像生成（T2I）モデルは、テキストプロンプトから多様な画像を生成する能力を持ちますが、特定の対象の画像を一貫して生成するには課題があります。DreamBoothは、この問題に対処するために開発されましたが、サイズと速度の面で制約がありました。本研究では、これらの制約を克服し、モデルの一貫性と多様性を維持しつつ、パーソナライズの速度と効率を向上させることを目指しています。

### 新規性
- **軽量なDreamBooth（LiDB）**: カスタマイズされた部分のサイズを約100KBに抑え、効率的なパーソナライズを実現。
- **新しいHyperNetworkアーキテクチャ**: LiDB構成を活用し、テキストから画像生成モデルのカスタマイズ部分の重みを生成。少数の反復で高精度なパーソナライズを達成。
- **ランク緩和型微調整**: LoRAモデルのランクを緩和し、高周波数の詳細を捉えることで高忠実度のパーソナライズを実現。

### 方法
1. **軽量なDreamBooth（LiDB）**: ランク1のLoRA残差をさらに分解し、モデルのパーソナライズされた重みを最小限に抑えます。
2. **HyperNetworkアーキテクチャ**: ViTエンコーダーとトランスフォーマーデコーダーを使用して、対象画像からLiDB重みを予測。
3. **ランク緩和型微調整**: 初期予測を行った後、ランクを緩和して高速微調整を実施。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/e8fff8bd-4c96-9709-8541-314ae6f69f12.png)

:::note info
DearmBoothでもあったようにユニークな識別子を使って、個人を識別
:::


### 実験と応用
- **個別化結果**: 幅広い顔の個別化結果を達成し、異なるスタイルや文脈で高品質な画像を生成。
- **定性的および定量的比較**: DreamBoothおよびTextual Inversionと比較し、我々の手法が優れた結果を示す。

### 注目すべき点
- **高速化と効率化**: DreamBoothの25倍速く、1枚の画像から高品質な個別化を実現。
- **モデルの一貫性と多様性**: 高忠実度と多様なスタイルを維持しながら、対象の詳細を再現。
- **小型モデル**: DreamBoothのモデルの10000分の1のサイズで、同等の品質と多様性を実現。
エンジニアのキャリア形成とプロジェクト管理のノウハウを共有します

## はじめに
アウトプットを意識して、Qiitaでの投稿を始めることにしました。月に2~3回のペースで投稿を目指します。

10年以上エンジニアとして働き、今年からマネージャーにもなりました。私の経験や知識を文章化して、蓄積していきたいと思います。


## 書くテーマ
今後、以下のようなテーマで記事を書いていく予定です。

* **エンジニアへの道：なんとなくエンジニアからの脱出の模索**
    * なんとなくエンジニアを続けている状態から、エンジニアとしての強みを探したストーリー。文系卒知識ゼロから入社してリーダーを務めることが多くなったときに、方向性を悩んだ経験談。
* **炎上プロジェクトの真の課題を捉える**
    * 具体的な事例を交えながら、プロジェクト管理の難しさと対策を解説。学んだ教訓や実践的なアドバイス。
* **ウォータフォール開発とスクラム開発の管理の違い**
    * 両方の手法を経験して感じた共通点と違い。抑えるべき根っこは変わらない。
* **ポジティブ心理学を学び、システム開発の現場で実践してみる**
    * 現場での具体的な実践方法とその効果について。ポジティブ心理学の基本概念とそれをどう応用したかの具体例。
* **子供3人育てたいならマネージャーになりなと言われた話**
    * ワークライフバランスとキャリアの両立について。家族との時間を大切にしながら、仕事も楽しむための選択。
* **ドキュメントはコミュニケーションツール**
    * 効果的なドキュメント作成のポイントとその重要性。なぜを伝えることが出来ているか。


## さいごに
私の経験や知識が、誰かの役に立つことを願っています。これからの投稿を楽しみにしていてください。
「政治で昇進昇格しても同じくらい簡単に転げ落ちる危険がある」

## 政治で昇進昇格しても同じくらい簡単に転げ落ちる危険がある

このタイトルは[『SOFT SKILLS』](https://amzn.asia/d/0c0BNXeB)の一節を要約したものです。

> ほとんどの企業に社内政治がうごめいていることはわかっているし、あなたもそのことは意識しなければならない。しかし、政治ゲームにあまり時間をかけすぎるべきではないと思う。
> 確かに、戦術を駆使し、野心をむき出しにすれば、社内の出世階段を上ることはできるが、そのような形で昇進昇格しても、同じくらい簡単に転げ落ちる危険がある。
> (中略)
> 価値のある社員に見せるのではなく、本当に価値のある社員になってしっかりとした基礎を築く方がいい結果を残せることを見てきた

このフレーズは、**社内政治との向き合い方に悩んでいた私の指針**となりました。

特に「**同じくらい簡単に転げ落ちる危険がある**」や「**価値のある社員に見せるのではなく、本当に価値のある社員になってしっかりとした基礎を築く**」に共感しました。

この記事では、私の社内政治との向き合い方について紹介します。
同じ悩みを持つ方の参考になれば幸いです。

## 先に結論

- 社内政治との距離感について、それぞれが腑に落ちることが大事
- 私の方針
    - 社内政治はする
    - だけど、全体の5%以内に収める
    - プライベートは好きなことをする

## 社内政治との距離感

社内政治とは「**社内の意思決定において調整力・影響力を発揮する活動**」と考えます。

どんな組織にも調整が必要です。そのため、意識的にも無意識的にも社内政治からは避けられません。

加えて、組織の中には必ず人間関係の悩みがあります。

[『Political Skill』](https://amzn.asia/d/0ioG7QYy)でも同様に言及されています。
> 組織の中には必ず人間関係の悩みがある。
> いわゆる「社内政治」は特別なものではなく、通常の仕事の一部

社内政治を完全に無くすことはできません。

◆私の社内政治の距離感

私は社内政治が好きでもなく、嫌いでもありません。
必要性は理解しているものの、優先度は高いと考えていません。

そこで、全体の5%以内であれば許容できると決めました。
また、現在は社内政治のためにプライベートを削る必要はないという立場です。

## なぜ5%なのか

「5%まで」と決めた理由は主観的です。
週40時間のうち、2時間以内であれば妥当性があると私自身が納得できたからです。

プライベートの時間は、**自分の価値を上げる時間**にしたいと考えました。
勉強したり、Qiitaを書いたり、登壇したりする時間です。
社内政治で自分の価値を高く見せるよりも、価値そのものを高くする時間です。

冒頭の『SOFT SKILLS』の一節に影響を受けつつ、自分の中で一定の納得感が得られました。

このように、**社内政治に対して腑に落ちることが重要**だと考えます。

## おわりに

この記事では、社内政治の距離の取り方について紹介しました。

悩んでいる方の参考になれば幸いです。

## 参考

- [『SOFT SKILLS』](https://amzn.asia/d/0c0BNXeB)
- [『社内政治の教科書』](https://amzn.asia/d/04al5ANK)
- [『Political Skill』](https://amzn.asia/d/0ioG7QYy)
趣味の論文読み：DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation

# DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation

CVPR 2023

:::note warn
2022年に公開された？後すでに、被引用数が2024年7月時点で1500件を超えている凄まじい論文
:::

### 概要
DreamBoothは、少数の画像から特定の主体を識別し、その主体をさまざまな文脈で高品質に再現するためのテキスト・画像拡散モデルの微調整手法。具体的には、事前学習済みのモデルを微調整し、ユニークな識別子を使って新しい画像を生成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/e06ec38e-ead4-205b-9240-1c5a0c7f6d06.png)

### 研究の背景
近年、ImagenやDALL-E2などの大規模なテキストから画像を生成するモデルが開発され、テキストプロンプトから高品質で多様な画像を生成する能力を持つようになった。しかし、これらのモデルは、特定の主体の外観を異なる文脈で再現するのが難しいという課題があった。この問題を解決するために、DreamBoothは、テキスト・画像拡散モデルを主体駆動型生成にパーソナライズする新しいアプローチを提案する。

### 新規性
- **少数画像からの学習**: わずか3〜5枚の画像から特定の主体を学習し、高品質に再現。
- **ユニークな識別子の使用**: 一般的な単語ではなく、レアトークンを使って主体を識別し、テキストプロンプトとの組み合わせで新しい画像を生成。
- **クラス固有の事前保全損失**: 言語ドリフトを防ぎ、モデルが多様な画像を生成するための損失関数を導入。

### 方法
1. **入力準備**: 3〜5枚の主体画像を用意し、それぞれにユニークな識別子とクラス名を付ける。
2. **レアトークン識別子**: レアトークンを使って識別子を作成。
3. **クラス固有の事前保全損失**: 言語ドリフトを防ぎ、モデルが多様な画像を生成するための損失関数を導入。

:::note info
イメージは、ユニークな形容詞（識別子）をつけるだけ。
例えば、家にいる犬の画像を生成したいと思ったら、何枚かその犬の写真を撮って、'sks'とかユニークそうな識別子を設定することで、うちの犬＝'sks'なdogということになる。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/4514ab84-40bd-b76c-99eb-5af322e9ec8b.png)

### 実験と応用
- **再文脈化**: 主体を異なるシーンやポーズで生成。
- **芸術的レンダリング**: 有名な画家のスタイルで主体を描画。
- **視点変更**: 主体を新しい視点から生成。
- **特性変更**: 主体の色や形状を変更。

### 注目すべき点
- **高い主体忠実度**: 少数の画像から主体の特徴を高い忠実度で保持し、異なる文脈で生成。
- **多様な生成能力**: 主体の再文脈化、芸術的レンダリング、視点変更、特性変更など、多岐にわたる応用が可能。
- **効率的な学習プロセス**: 短時間でモデルを微調整し、少数の入力画像で効果的に学習。

### 結論
DreamBoothは、少数の画像とテキストプロンプトを使って、特定の主体をさまざまな文脈で再現する新しい手法。微調整プロセスは簡単で、幅広い応用が可能。このアプローチは、テキスト・画像拡散モデルの新たな可能性を開くものであり、今後の研究や実用化において重要なステップとなるだろう。
github actionを使って自動でリリースタグをつけたい

gitのリリースブランチにpushした時に、自動でversion付きのTagをつけれると便利なのでやってみた

<!-- more -->

## バージョン管理の番号の手入力をやめたい
バージョン番号を手入力していると、少し変更するだけでも1回1回バージョン付け直さないといけないし、複数人だとさらにごちゃるので、
基本的にはリリースブランチにpushされたら自動で生成されるようにするルールでやってみることにした


## 作成したgithub actionのworkflow
VERSIONを読み込んで、v0.0.1だったら、v0.0.2にするgithub action

```yaml
name: Create Release Tag

on:
  push:
    branches:
      - release

jobs:
  create-release-tag:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Read current version
        id: current_version
        run: echo "CURRENT_VERSION=$(cat VERSION)" >> "$GITHUB_OUTPUT"
      
      - name: Increment version
        id: increment_version
        run: |
          current_version=${{ steps.current_version.outputs.CURRENT_VERSION }}
          IFS='.' read -r -a version_parts <<< "${current_version#v}"
          major=${version_parts[0]}
          minor=${version_parts[1]}
          patch=${version_parts[2]}
          new_patch=$((patch + 1))
          new_version="v$major.$minor.$new_patch"
          echo "NEW_VERSION=${new_version}" >> "$GITHUB_OUTPUT"
          echo $new_version > VERSION

      - name: Commit and push updated VERSION
        run: |
          git config --global user.name "github-actions[bot]"
          git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git add VERSION
          git commit -m "Increment version to ${{ steps.increment_version.outputs.NEW_VERSION }}"
          git push origin HEAD:release

      - name: Create and push the tag
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          new_version=${{ steps.increment_version.outputs.NEW_VERSION }}
          git tag $new_version
          git push origin $new_version
```

## 解説
バージョン番号は v0.0.1のような形式になっていて、releaseブランチにpushされると、
最後の桁(マイナーバージョン)に+1してTAG付けをします。
メジャーバージョンを上げたい場合はレポジトリのVERSIONのテキストを手で編集していきます。

## TAGをつけることによってうれしいこと
コードを取得する際にTAG指定でfetchすればいいので、後々の管理が楽なのと、デプロイ先のDockerでもインスタンスでも
tagを指定して開発、検証、本番環境のような切り分けができるようになってよかった
[Swift] `if var` `for var` 知ってる？

# `if var`

`if var ・・・`と 書けることをご存知ですか？<br>　

オプショナル型をアンラップする場合に`if let ・・・`と書きますが、`if var ・・・`もアンラップします。
違いは、受け取る”<font color=gold>変数</font>”が`ミュータブル`（書き換え可能）だということです。

> ”変数”と書いた時点で<i> `ミュータブル`(mutable)</i> ですね。
<i> `イミュータブル`(immutable)</i> なら"定数"と書きますから・・・


```swift
let optInt: Int? = 10

if let int = optInt {
    print(int)  // 10
}

if var int = optInt {
    print(int)  // 10
    int = 20
    print(int)  // 20
}
```



# `for var `

`for var ・・・`と 書けることをご存知ですか？<br>　

意味は同じで、 ”変数”（ミュータブル）に受け取ります。

```swift
for var a in 0 ..< 10 {
    a = 0
    print(a)  // always 0
}
```

でも、`for let ・・・`とは 書けません。

```swift
for let a in 0 ..< 10 {
// 'let' pattern cannot appear nested in an already immutable context
}
```

『すでにイミュータブルだから被せるな』的に怒られます。



# おまけ

`for x: 型 in ・・・`と、型名を指定できることをご存知ですか？<br>　

左辺の型と違う型の定数（変数）で受け取りたい場合に指定します。
もちろん、`for var`との組み合わせも可能です。

```swift
for x: UInt8 in 0 ..< 10 {
    print(type(of: x)) // UInt8
}
```


<br>しかし、キャストできない型を書くと、何かしらのエラーになります。

```swift
for x: UInt8 in -10 ..< 10 {
//Negative integer '-10' overflows when stored into unsigned type 'UInt8'
}
```

次のようにCharacterで受け取りたいですが、エラーになります。

```swift
for x: Character in 0 ..< 256 {
//Cannot convert sequence element type 'Int' to expected type 'Character'
}

extension Character {
    init(_ int: Int) { self = Character(Unicode.Scalar(int)!) }
}
```

`Int`を引数に取る`Character`の`イニシャライザ`を定義していてもエラーです。
`イニシャライザ`を呼ぶわけではなく、あくまで『`キャスト`できる型に限る』ということです。

<br><br>当然ですが、左辺の`Sequence`を`Array<Character>`に変換してやれば、普通にCharacterで受け取れます。

```swift
for x in (0 ..< 256).map(Character.init) {
    if x.isCurrencySymbol { print(x) }
}
// $
// ¢
// £
// ¤
// ¥
```

<br>　

# おまけ の おまけ

`let`,`var`と`while`を組み合わせて、
`while let 定数 = `、`while var 変数 = `とも書けます。

```swift
var optInt: Int? = 10

while let int = optInt {      }
while var int = optInt {      }
```
使い道が思い浮かびませんが、知っていると役に立つ場面があるかも・・・

---

[Swift](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/summaryofthegrammar)って面白い言語ですね。

**以上です。**
趣味の論文読み：StreamDiffusion: A Pipeline-level Solution for Real-time Interactive Generation

# StreamDiffusion: A Pipeline-level Solution for Real-time Interactive Generation

好きで読んでまとめるだけなので、研究的な視点の不備が多数ある場合あります。
画像生成系で2023年の末ごろに大きな話題になっていたもの。
日本人の方が発表されているの論文で、Youtubeでご本人の解説動画まであります（日本語だし、最高すぎる）。

https://www.youtube.com/watch?v=CnVbZv-6lGE

### 概要
論文では、リアルタイムの対話型画像生成を実現するための新しいディフュージョンパイプライン「StreamDiffusion」を紹介している。従来のディフュージョンモデルはテキストや画像プロンプトからの画像生成には優れているけど、リアルタイムのインタラクションには対応しきれていない。特にメタバースやビデオゲームのグラフィックスレンダリング、ライブビデオストリーミングなどのシナリオでは高いスループットが求められる。

![demo_07.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/c3b908dd-1482-1a8e-d277-56b6b4667109.gif)

:::note info
早すぎて、、、すごすぎ
:::


### 提案手法
StreamDiffusionは、以下の技術を組み合わせることで高いスループットとエネルギー効率を実現している：

1. **ストリームバッチ処理**：
    - 従来の逐次的なノイズ除去処理をバッチ処理に変換。
    - ノイズ除去ステップをバッチで処理することで、処理時間を大幅に短縮。

2. **Residual Classifier-Free Guidance (RCFG)**：
    - クラス分類器を用いないガイダンス手法を改良し、負の条件付けによる冗長な計算を削減。
    - 一回またはゼロ回の負の条件付けで済む新しいアルゴリズムを提案。

3. **入力-出力キュー**：
    - 入力データとモデルの処理スループットの不一致を解消するためのキュー戦略を設計。
    - 非同期処理により、画像の前処理と後処理を並列化。

4. **確率的類似性フィルタ**：
    - GPUの使用率を最適化し、エネルギー消費を削減するための確率的類似性フィルタリング戦略を採用。

5. **モデル加速および小型オートエンコーダー**：
    - TensorRTを利用してU-NetとVAEエンジンを構築し、推論速度を向上。
    - 高速かつ効率的な小型オートエンコーダーを使用。

:::note info
この辺のアイディアを他のdiffusion研究にも流用することができたら非常に有用
:::

### 実験結果
提案されたStreamDiffusionパイプラインは、以下のような結果を示している：

- RTX 4090 GPUでの画像生成において91.07fpsを達成。
- 従来のAutoPipelineと比較して、最大59.6倍のスピードアップを実現。
- 静的なシーン入力では、RTX 3060 GPUで2.39倍、RTX 4090 GPUで1.99倍のエネルギー消費削減を達成。

### 結論
StreamDiffusionは、インタラクティブなディフュージョン生成を実現するためのパイプラインレベルのソリューション。高いスループットとエネルギー効率を提供することで、メタバースやオンラインビデオストリーミング、放送などの分野での実用性を大幅に向上させることができる。

この論文の内容は、リアルタイムの画像生成における効率性とエネルギー消費の最適化に関するもので、特にインタラクティブなアプリケーションにおいて非常に有用。
センテンスの解析をする

GR-M10-RPで取得したセンテンスの解析をしていきます。

基本ドキュメントをなめていく形になります。

https://prioris.jp/gnss/docs/processing/qzqsm

## Azarashiのインストール

https://github.com/nbtk/azarashi

PySerialをインストール時は、面倒なのでaptコマンドを使ってインストールしようとした（すでにインストール済みだった）のですが、Azarashiはaptコマンドではインストールできないので仮想環境を作っていくことにします。

まずはaptコマンドの失敗

```:aptコマンド失敗
$ sudo apt install python3-azarashi
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package python3-azarashi
```

### 仮想環境を作る

pipを使ってインストールをしようとしたときに以下のようなメッセージが出ていていたと思いますので、この通り実行していきます。

```
    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.
```

まずは、仮想環境を作っていきます。
今回はホームディレクトリの下に.venvという名前で仮想環境用のファイルを置いておくことにします。

```:仮想環境の作成
$ python -m venv .venv
```

仮想環境を利用するとき

```:仮想環境を有効
$ source ~/.venv/bin/activate
(.venv) $
```

仮想環境になるとプロンプトの前に **(.env)** が付きます。
この状態になるとpipコマンドが使えるようになります。

```:azarashiのインストール
(.venv) $ pip install azarashi
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting azarashi
  Downloading azarashi-0.10.2-py3-none-any.whl (169 kB)
     ──────────────────────────────────────── 169.7/169.7 kB 590.2 kB/s eta 0:00:00
Installing collected packages: azarashi
Successfully installed azarashi-0.10.2
```
ドキュメントに出ているサンプルを実行すると＄QZQSM から始まるセンテンスを解析できます。

仮想環境を無効にするとき

```:仮想環境を無効
(.venv) $ deactivate
$
```

仮想環境を無効にするとサンプルはエラーになり実行できません。

```:仮想環境が無効状態で実行
$ python sample.py
Traceback (most recent call last):
  File "/home/nomura/sample.py", line 1, in <module>
    import azarashi
ModuleNotFoundError: No module named 'azarashi'
```

## その他

### PySerialのインストール

通常の環境ではインストールされていたPySerialは、仮想環境を有効にすると認識されないようでサンプルプログラムがエラーになりました。

```:サンプルプログラムがエラー
(.venv) $ python read.py /dev/ttyS0 38400
Traceback (most recent call last):
  File "/home/nomura/read.py", line 5, in <module>
    import serial
ModuleNotFoundError: No module named 'serial'
```
ということで、改めてPySerialをインストールしました。

```:PySerialのインストール
(.venv) $ pip install pyserial
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pyserial
  Downloading https://www.piwheels.org/simple/pyserial/pyserial-3.5-py2.py3-none-any.whl (90 kB)
     ──────────────────────────────────────── 90.6/90.6 kB 249.9 kB/s eta 0:00:00
Installing collected packages: pyserial
Successfully installed pyserial-3.5
```

サンプルプログラムは無事動きました。

```:サンプルプログラム実行
(.venv) $ python read.py /dev/ttyS0 38400
initializing...
start!
```

### みちびきの災害・危機管理通報サービス

みちびきの災害・危機管理通報サービス 試験用データ配信

https://qzss.go.jp/technical/dod/dc-report/test-data-distribution.html

ということで、一番近い時でも試験データ配信は7/25(木) 10:00~12:00ということで当面はテストができないようです。

【2024年7月度 配信予定】
・1回目：2024年 7月 9日（火）13:00～15:00
・2回目：2024年 7月25日（木）10:00～12:00

【今後の配信予定】
・2024年 8月 7日（水）午後
・2024年 8月23日（金）午前
'Image' cannot be used as a JSX component.   Its return type 'ReactNode' is not a valid JSX element.ts(2786)


Next.js でWebアプリケーションを開発しよう～！と意気込んだのはいいものの、Next.js をインストールして、それを VS Code で開くだけで、このエラーが出てしまいました。

# エラーの内容

> 'Image' cannot be used as a JSX component.   Its return type 'ReactNode' is not a valid JSX element.ts(2786)

↓スクショ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2291204/3a8d096f-bb05-a3a1-7f1f-4faacb9f7002.png)

↓Problem view のログも見てみるとエラー出てる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2291204/61c73ec3-5ce5-0527-ca7a-088140e3ba8c.png)


自分が実装したコードならエラーが起きることも想定できますが、インストールしただけでエラーになると困りますよね。


# 結論

結論としては、自分の場合は、VS Code の設定が問題でエラーが出ているだけでした。

以下のように、VS Code が使用する Typescript のバージョンを、workspace のバージョン、つまり package.json と npm install によってインストールされた、ローカルな typescript バージョンを使うようにすればエラーが解消されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2291204/6053357c-aa46-35d6-eed9-4c49519c98c5.png)


# 補足

状況を箇条書きで整理すると:

- いつも通り `npx create-next-app@latest .` しただけ。
- その後 VS code でファイルを開くと、このエラー。
- エラー文面の解釈としては、Next.js に含まれる Image コンポーネントが JSX の中では使えないよ、なぜなら ReactNode は JSX としてただしくないから。
- `npm run build` と `npm start` はなんの問題もなく実行できたので、false alert だとわかった。
    - なので、無視すればOK
    - けど、気持ち悪い(ただの潔癖)
    - もしくは、Image コンポーネントを使わないようにする(画像がないサイトって素敵ですよね！)

試した解消法(無駄足)

- VS Code を再起動
    - VS Code  で時々問題あると、再起動することで治ること結構ありますが、これでは解消せず
- 古い Next.js バージョンを明示的に利用
    - package.json を書き換えて、14.x のバージョンの中の一番古いものを使ってみましたが解消せず(Reactのバージョンアップなどで、breaking changes があったのかなーと思い)
    - 比較的新しい app router などの next の機能を使いたかったので、13 以前には戻れなかった


# 参考

https://mikebifulco.com/posts/typescript-vscode-error-fix-last-resort

https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-typescript-next
【競プロ】ダイクストラ法を正確に書く（O((M+N)log N) のつもりが Θ(N^2 log N) になっていた話）

## はじめに

競技プログラミングをやっている高校生のButterFlvです！！内容はタイトルにある通りです。[トヨタ自動車プログラミングコンテスト2024#7（AtCoder Beginner Contest 362）](https://atcoder.jp/contests/abc362) の [D - Shortest Path 3](https://atcoder.jp/contests/abc362/tasks/abc362_d) でダイクストラ法の実装が不完全であったためTLEしてしまったのでちゃんとダイクストラできるために書きます。

## ダイクストラ法について

**ダイクストラ法**はBFSの拡張で動的計画法の一種です。単一の始点からの距離を各頂点について高速に求めることができます。使える条件は

* 負のコストの辺を持たない

です。頂点の数を $N$ 辺の数を $M$ として大体、ナイーブ $O(N^2)$ でpriority queueを使うと $O((M+N)\log N)$ です。

## 疑似コード

頂点に $0,1,2,\cdots ,N-1$ と番号をつけて, $\mathrm{edge}[v]$ を頂点 $v$ を始点とする辺の集合とし, 各辺は $(辺の終点, 辺のコスト)$ の形式で持ちます。また始点を $0$ とします。（このようにしてもアルゴリズムとして一般性を失いません。）


1. $\mathrm{dist}[v]_{(0\le v\lt N)} \gets \mathrm{inf}\ と初期化する.$
1. $\mathrm{dist}[0] \gets 0$
1. $\mathrm{used}[v]_{(0\le v\lt N)} \gets \mathrm{false}\ と初期化する.$
1. $\mathrm{queue}\gets_{\mathrm{push}}(\mathrm{dist}[0], 0)$ （$\mathrm{queue}$は最小ヒープ）
1. $\mathrm{queue}が空でないならループ$
   1. $(\mathrm{vdist}, v)\gets_{\mathrm{pop}} \mathrm{queue}$ （先頭の要素を消去）
   1. $\mathrm{used}[v]=\mathrm{true}\ なら次のループに移る.$
   1. $\mathrm{used}[v]\gets\mathrm{true}$
   1. $\mathrm{foreach}\ (nv, \mathrm{cost})\gets\mathrm{edge}[v]$
      1. $\mathrm{dist}[nv]\le\mathrm{dist}[v]+\mathrm{cost}$ なら次のループに移る.
      1. $\mathrm{dist}[nv]\gets\mathrm{dist}[v]+\mathrm{cost}$
      1. $\mathrm{queue}\gets_{\mathrm{push}}(\mathrm{dist}[nv],nv)$


## 注意ポイント

前章のコードのうち、一行でも抜けると $O((M+N)\log N)$ が保証されません。特に忘れがちなのは $\mathrm{used}$ の存在です。（ただし、$\mathrm{used}$ がなくても有限の時間で正当な解を出力します。）$\mathrm{used}$ がないときの撃墜ケースを考えてみましょう。例えば以下の場合です。

### 問題文

$N$ 頂点 $M$ 辺からなる単純連結無向グラフが与えられるので頂点 $1$ から頂点 $N$ までの最短経路を求めてください。
$i\ (1\le i\le M)$ 番目の辺は頂点 $u_i$ と $v_i$ を結び、そのコストは $w_i$ です。

### 制約

* $2\le N\le 2\times 10^5$
* $N-1\le M\le 2\times 10^5$
* $1\le u_i,v_i \le N$
* $0\le w_i \le 10^9$
* 入力はすべて整数

### 入力

入力は以下の形式で与えられます。
> $N\quad M$
> $u_1\quad v_1\quad w_1$
> $u_2\quad v_2\quad w_2$
> $\vdots$
> $u_M\quad v_M\quad w_M$


#### 撃墜ケース


> $100005\quad 200000$
> $1\quad 2\quad 1$
> $1\quad 3\quad 2$
> $1\quad 4\quad 3$
> $\vdots$
> $1\quad 100004\quad 100003$
> $100005\quad 100004\quad 2$
> $100005\quad 100003\quad 4$
> $100005\quad 100002\quad 6$
> $\vdots$
> $100005\quad 2\quad 200006$


図にしてみるとわかりやすいかもしれません。コストをうまく調整することでキューに $N-2$ 回、頂点 $N$ を追加させることができ、頂点の探索順が $$1\to 2\to 3\to\cdots\to N-1\to \underbrace{N\to N\to\cdots\to N}_{N-2個}$$

となります。ここで、$\mathrm{used}$ がない場合は頂点 $N$ を探索するそれぞれのループで頂点 $2,3,4,\cdots ,N-1$ を走査することになり、このアルゴリズムは $\Theta(N^2\log N)$ になってしまいます。（本問の制約下だと全然ダメ）


## さいごに

* おそらく、きちんとアルゴリズムを学んでいらっしゃる方であればこれくらい当たり前のことかと思いますが僕はハマってしまったので意外と忘れがちなポイントなのかな(?)と思いました
* A~Dは確実に迅速に、沼らずとれるよう、基礎的なアルゴリズムも時々復習しておきたいですね～
【SwiftUI】ナビゲーションバーの実装方法

#### 注意事項
本記事はエンジニア歴の浅い初心者が備忘録としてまとめたものです。
細かい部分に誤りがあるかもしれませんが、ご容赦ください。
※認識に間違いがありましたら、コメントで指摘頂けますと幸いです！

## 1.はじめに
SwiftUIを学習する中で、ナビゲーションバーを実装したいが、NavigationStackやNavigationView、toolbarという文言が出てきて、その違いや使い方がわからなかった。

## 2.環境
Xcode:15.2
Swift:5.9.2

## 3.ナビゲーションコンテナについて
ナビゲーションバーを設置するには、そもそも”ナビゲーションコンテナ”というものを用意する必要があります。
イメージとしては、ナビゲーションバーを実装するための”大きな箱”を準備すると捉えていただければいいかなと思います。
（ナビゲーションバーに限らず、ナビゲーションに関わる機能を実装したい場合も使用しますが、ひとまず、ナビゲーションバーの実装で必要となるものだとご理解いただければ良いかと思います！）

現時点での記載方法は以下のいずれかになるかと思います。
```
①
struct ContentView: View {
    var body: some View {
        NavigationStack{
         //4.ナビゲーションバーの実装に詳細を記載
        }
    }
}
```
```
②
struct ContentView: View {
    var body: some View {
        NavigationView{
         //4.ナビゲーションバーの実装に詳細を記載
        }
    }
}
```

①と②に機能的な差異はありませんが、推奨されるOSが異なります。
①：iOS16以降で推奨される比較的新しい実装方法
②：iOS13からある実装方法（iOS16以降は非推奨）

## 4.ナビゲーションバーの実装
ナビゲーションコンテナを実装できたので、いよいよナビゲーションバーの実装に移ります。
NavigationStackやNavigationViewの中に色々と記載していきますが、
ここからは個人個人の実装したい内容によって異なるので、よく使用される”タイトル”と”戻るボタン”を例として実装します。

```
struct ContentView: View {
    var body: some View {
        NavigationView　もしくは NavigationStack{
            .navigationBarTitle("タイトル")
            .navigationBarItems(leading: Button("戻る") {
            　　　　//Action
            })
        }
    }
}
```


ちなみに、iOS14以降ではこんな書き方もできるみたいです。（←冒頭で出てきた”toolbar”とはこれのことだった様子。。）
```
struct ContentView: View {
    var body: some View {
        NavigationStack{
            .toolbar {
                ToolbarItem(placement: .navigationBarLeading) {
                    Button("戻る") {
                     // Action
                    }
                }
            }
        }
    }
}
```


## +α
ナビゲーションバーについて調べているともう1つ気になるワードが出てきたので、そちらも合わせて記載しておきます。
それは”タブバー”です。
これはアプリでよくある、画面下部に設置されているView間を移動するためのものです。
こんな風に実装できるみたいです。
```
struct ContentView: View {
    var body: some View {
        TabView {
            Text("Home")
                .tabItem {
                    Image(systemName: "house")
                    Text("Home")
                }
    
            Text("Settings")
                .tabItem {
                    Image(systemName: "gear")
                    Text("Settings")
                }
        }
    }
}
```

## 最後に
ここまで見ていただきありがとうございます。
少しでも参考になれば幸いです。

補足：ChatGPTに聞いた”ナビゲーションバー”と”タブバー”の違いを載せておきます笑
```
ナビゲーションバー:
    ・ビューの上部に表示。
    ・階層的なビューの遷移をサポート。
    ・各ビューごとにタイトルやボタンをカスタマイズ可能。
タブバー:
    ・アプリの下部に固定表示。
    ・アプリの主要セクション間のナビゲーションをサポート。
    ・各タブにアイコンとラベルを設定可能。
```
隙間時間にみる早見表リンク集〜応用情報技術者試験〜

# この記事
資格試験でわからないところの復習にしようしていたメモをすぐに見れるように記事にしました！
区切りよく見れるように分割しているので勉強に役立ててみてください！

# リンク集

https://qiita.com/mr_noppo/items/cacd05e7d2672eefc20a

https://qiita.com/mr_noppo/items/3c0b29e9e1d4c25eb6f6

https://qiita.com/mr_noppo/items/2ef724ab8469d33f0668

https://qiita.com/mr_noppo/items/0ae5f5a4eb92671eb778

https://qiita.com/mr_noppo/items/4d3e51f301550f3e46d0

https://qiita.com/mr_noppo/items/b1443dc98828b6a9dd63
XserverでLaravel 11のCRON設定をする際にハマった点と解決策

## 概要
XserverレンタルサーバーのCRON設定を行う際に、ハマった点を書き残しておく


## 思い当たる原因(?)
- 先日Xserverの新サーバー簡単移行を行った。
https://www.xserver.ne.jp/manual/man_order_servertransfer_intro.php

- 下記手順でXserverレンサバにデプロイをした。
https://juno-engineer.com/article/laravel-xserver-deploy/

## 解決方法
通常XserverでCron設定を行う際は、下記のような記述をする(はず)
~~~
* * * * * cd /home/test/test && /usr/bin/php7.3 artisan schedule:run >> /dev/null 2>&1
~~~

自分の環境では下記のように記述したところ、正常に動作した
~~~
* * * * * cd /home/{username}/{domain}/public_html/{laravelまでのパス} && /home/{username}/bin/php artisan schedule:run >> /dev/null 2>&1
~~~
【ChatGPT＋Code Interpreter】で画像を回転させる。


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

　今回は、描画した画像を回転や移動させます。アニメGIFですね。

:::note info
本記事は、ChatGPT（有料版）
で行なっております。あしからず。
:::

　ニュースはないので、本題です。

　生成した画像を
　　アニメ化したい気持ちは
　　　ありますよね。

　もちろん、
　　動画生成AIが
　　　いくつも出てきています。

　しかし、
　　単純なアニメを
　　　させたいときは
　　　　そうした動画生成AIでの
　　　　　生成は、面倒くさいです。

　そこで
　　ChatGPTのCode Interpreterに
　　　やってもらいます。

　では、やり取りをどうぞ。
***
***user***
背景は黒のみ。茶色の子犬。アスペクト比は1:1で描画

***ChatGPT***
（指定どおり）

***user***
CodeInterpreterを使って、この画像が回転するアニメGIFを作成してください。

***ChatGPT***
（ダウンロードリンク）

***user***（上記を編集）
CodeInterpreterを使って、この画像が右から左に移動するアニメGIFを作成してください。

***ChatGPT***
（ダウンロードリンク）
***
　こんなところですね。

　アニメGIFは
　　X-Twitterに上げました。
　　　[子犬の移動](https://x.com/kabumira862571/status/1812338617609822332?t=Lajv3zGWs-94r0oXd-wSkA&s=19)

　回転は、ポストできませんでした。
　（あとからChatGPTに聞いたら）
　（サイズオーバーしてた。圧縮よろで）
　（アップできたです😅）

　もちろん、
　　やりたいことは
　　　人それぞれです。

　頑張って、
　　創意工夫して
　　　いきましょう。

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

　今回は、ここまで。
JS継承の話

下記の例でJSの継承手法を解説していきたいと思います
※下記の文章を読めるにはオブジェクトのプロトタイプ知識が必要となります

### 会員システム

動画配信サイトには2種類の会員があります：

- 一般会員
  - 属性：ユーザー名、パスワード
  - メソッド：無料動画の視聴
- プレミアム会員
  - 属性：一般会員のすべての属性、会員の有効期限
  - メソッド：一般会員のすべてのメソッド、有料動画の視聴

これらの要件を満たすために、コンストラクタをどのように書けばよいでしょうか？

```js
// 一般会員のコンストラクタ
function user(username, password) {
  this.username = username;
  this.password = password;
}
User.prototype.playFreeVideo = function() {
  console.log('無料動画を視聴する');
}

// プレミアム会員のコンストラクタ
function premiumUser(username, password, expires) {
  this.username = username;
  this.password = password;
  this.expires = expires;
}
premiumUser.prototype.playFreeVideo = function() {
  console.log('無料動画を視聴する');
}
premiumUser.prototype.playPremiumVideo = function() {
  if (this.expires > new Date()) { //動作しないコード　今の日付の意味で記載している
    console.log('有料動画を視聴する');
  }else{
    console.log('プレミアム会員の有効期限が切れています');
  }
}
```

上記のコードには2つの重複があります：

1. premiumUserのコンストラクタに含まれる重複コード

   ```js
   this.username = username;
   this.password = password;
   ```

   このコードはUserコンストラクタと同じです。将来も変わることはないでしょう。すなわち、**一般会員が持つべき属性はプレミアム会員も必ず持つ**ということです。

2. premiumUserのプロトタイプに含まれる重複コード

   ```js
   premiumUser.prototype.playFreeVideo = function() {
     console.log('無料動画を視聴する');
   }
   ```

   このメソッドはUser上の同名メソッドと全く同じです。将来も変わることはないでしょう。すなわち、**一般会員が持つべきメソッドはプレミアム会員も必ず持つ**ということです。

>>>>>> これらの重複をどのように解決するか？

### コンストラクタ内部の重複を処理する

premiumUserコンストラクタを次のように書き換えることができます：

```js
function premiumUser(username, password, expires) {
  user.call(this, username, password);
  this.expires = expires;
}
```

### プロトタイプの重複を処理する

プロトタイプチェーンを次のように設定するだけで済みます：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218041/289d71c5-d734-4842-5b60-aff770d7aebd.png)



次の一文で完了です：

```js
Object.setPrototypeOf(premiumUser.prototype, User.prototype);
```

これで、先に挙げた重複コードの問題を完璧に解決しました。

ほかデザインパターンで解決手法はありますが、また次回......


## おまけ、JavaScriptで継承を封装する方法

```js
function inherit(Child, Parent) {
  // プロトタイプチェーンで継承を完了する
  Object.setPrototypeOf(Child.prototype, Parent.prototype);
}
```
Goのregexpとregexp2のパッケージの違い

## regexp パッケージ
regexpはGoの標準ライブラリに含まれている正規表現パッケージです。以下はその主な特徴です：
特徴
#### 1. シンプルで高速:
  - regexpはシンプルで高速な正規表現エンジンを提供します。
  - 基本的な正規表現機能をサポートしています。
#### 2. RE2エンジン:
  - regexpはGoogleのRE2エンジンをベースにしており、バックトラッキングをサポートしないため、常に線形時間で動作します。
  - 無限ループやスタックオーバーフローのリスクがありません。
#### 3．基本的な機能:
  - 名前付きキャプチャグループや条件付きパターンなどの高度な機能はサポートしていません。
##### 使用例
```go:例
package main

import (
    "fmt"
    "regexp"
)

func main() {
    pattern := `[a-zA-Z]+`
    re := regexp.MustCompile(pattern)
    text := "Hello123 World456"
    matches := re.FindAllString(text, -1)
    fmt.Println("All matched substrings:", matches)
}
```
```:結果
All matched substrings: [Hello World]
```
## regexp2 パッケージ
regexp2は、.NETの正規表現エンジンをGo言語に移植したもので、より強力な正規表現機能を提供します。以下はその主な特徴です：
### 特徴
#### 1．高度な機能:
  - 名前付きキャプチャグループ、条件付きパターン、バックトラッキングなどの高度な正規表現機能をサポートしています。
#### 2．バックトラッキング:
  - regexp2はバックトラッキングをサポートしており、複雑なパターンマッチングが可能です。
  - ただし、バックトラッキングを使用するため、特定のパターンでパフォーマンスが低下する可能性があります。
#### 3. .NET互換:
  - .NETの正規表現エンジンと互換性があり、.NETで使用される正規表現パターンをそのまま使用できます。
##### 使用例
```go:例
package main

import (
    "fmt"
    "github.com/dlclark/regexp2"
)

func main() {
    pattern := `[a-zA-Z]+`
    re := regexp2.MustCompile(pattern, 0)
    text := "Hello123 World456"
    
    var matches []string
    match, _ := re.FindStringMatch(text)
    for match != nil {
        matches = append(matches, match.String())
        match, _ = re.FindNextMatch(match)
    }
    
    for _, match := range matches {
        fmt.Println("Matched substring:", match)
    }
}
```
```:結果
Matched substring: Hello
Matched substring: World
```
## まとめ
- regexp:
  - シンプルで高速な正規表現エンジン。
  - 基本的な正規表現機能をサポート。
  - バックトラッキングをサポートしないため、常に線形時間で動作。
- regexp2:
  - 高度な正規表現機能をサポート。
  - バックトラッキングをサポートし、複雑なパターンマッチングが可能。
  - .NETの正規表現エンジンと互換性があり、.NETで使用される正規表現パターンをそのまま使用可能。

用途に応じて、シンプルで高速な処理が必要な場合はregexpを、より高度な正規表現機能が必要な場合はregexp2を選択すると良いでしょう。ということが分かりました！！
「Python 3 エンジニア認定実践試験」合格体験記

# はじめに
Python 3 エンジニア認定データ分析試験を受験、合格したので体験記を残していく。

# 受験勉強前のスペック
「Python 3 エンジニア認定基礎試験」を取得済。
仕事でNumpy, Pandas, Matplotlibは触っている。

# 勉強方法
試験1週間前からひたすら模擬試験をループする。
以下のそれぞれの試験を1~2周まわしていく。
わからない機能が出てきたらその都度調べていく。

- ExamApp(https://python-basic.com/)
- ディープロ(https://diver.diveintocode.jp/dive_into_exam)

# 結果
800 / 1000点で合格。
Magicmockあたりはもう少し勉強してもよかったかも。
親要素のプロパティが子要素に反映されない場合の対策

# はじめに
親要素に指定したのが子要素にも反映される。
はずなのに、子要素に反映されないプロパティがあるのはなんでか。

やっと`text-align: center;`を使いこなせるようになったと思ったら、新たな壁にぶつかりました。
親要素にプロパティ指定してるのに、なんでだー？と思ったのでまとめました。

# 結論
**ブロック要素には、個別にプロパティを指定する必要がある。**
プロパティの中には、親要素にプロパティを指定しても、子要素がブロック要素であれば、親要素に指定したプロパティは反映されない。

➡️ ブロック要素ってブロックであることへのこだわりが強い。
　ブロック要素は「親がどんなこと求めてきても、あくまでも私は私だから」的な。
  子には**子にあったプロパティ**を指定しないということ聞いてくれない。

# △ 私が実際にハマったのは、、、
**❌　NG**

```index.html
<div class="contents-wrapper">
  <div class="item">
    <div class="item-icon">
      <img src="./images/多角形 1.png" alt="">
      <p>ブロック要素</p>
    </div>
    <div class="txt-contents">
      これはひとつめですこれはひとつめですこれはひとつめです
      これはひとつめですこれはひとつめですこれはひとつめです
    </div>
  </div>
</div>
```

```style.css
.contents-wrapper {
  width: 100%;
  text-align: center;/*親要素に中央寄せ指定*/
}

.item {
  position: relative;
}

p {
  position: absolute;
  top: 100px;/*親要素に中央寄せ指定してるから上下の調整だけでいいはず*/
}

.txt-contents {
  width: 80%;/*親要素に対して幅80％にするだけでいいはず*/
}

```

![スクリーンショット 2024-07-14 11.28.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830302/d7179f24-b49a-ed8b-e168-a07a4f08cb30.png)

`.contents-wrapper`に`text-align: center;`（中央寄せ）を指定してるのに、、、

→`<p>`は下げられてるけど、真ん中に配置されない。（テキストは中央寄せになってる）
→`.txt-contents`のテキストは中央寄せになっていて幅も80％にはなってるけど、`.txt-contents`自体は真ん中に配置されない。

# ？: なんで真ん中に配置されないのか
  `text-align: center;`（中央寄せ）はテキストなどの**インライン要素**に適用される。
  　→ 文字自体は中央寄せにできる。だけど、**配置そのものには影響を与えない**。
　→`<p>`と`<div class="txt-contents">`は**もともとブロック要素なので配置については個別設定が必要**。

  ２つのことを同時に解決しようとしていたのが間違いだった。

  私がしたかったのは、
  textを中央寄せに　かつ　真ん中に配置　
  の2つの工程が必要だった。

  だから、
    ①`text-align: center;`でtextの位置を設定。
    ②ブロック要素の配置を設定。
    が必要。
  
  ## ⬇️具体的な設定

**⭕️ OK**
①`<p>`：親要素（`.item`）に対して100％になるように幅指定。
②`<div class="txt-contents">`：`display: inline-block;`でブロック要素をインラインブロック要素になるよう指定し、親要素に指定してる`text-align: center;`（中央寄せ）を反映させる。

```style.css
.contents-wrapper {
  width: 100%;
  text-align: center;
}

.item {
  position: relative;
}

p {
  position: absolute;
  top: 100px;
  width: 100%;/*親要素（.item）に対して100％になるように幅指定*/
}


.txt-contents {
  width: 80%;
  display: inline-block;/*ブロック→インラインブロックにしてtext-alignを反映させる*/
}

```

![スクリーンショット 2024-07-14 11.40.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830302/68898349-5d70-12b5-f641-263b7ae7b2db.png)

# おわりに
ブロック要素にはブロック要素の、インライン要素にはインライン要素のプロパティがそれぞれある。みんな違ってみんないい的なかんじだけど、コーディングする上ではその多様性が難しく感じます。
インライン要素のプロパティを使いたい時には、`display: inline-block`でインライン要素にしてしまえ〜。ていう便利な機能があることに早く慣れたいです。
親要素に設定しても、子要素がブロック要素であれば直接反映されないことが多いのは他に、下記がある。
`line-height`
`vertical-align`
`white-space`
`font-*`
これらは、子要素に対して個別に設定していく！

あー気をつけることがたくさんだ〜〜〜。

※間違ってたらご指摘いただけると嬉しいです！
よろしくお願いします！
Reflex：困ったときの検索や質問の方法（Ask AIやdiscordの利用）

# １．Reflexの情報がWeb上には少ない

この記事は、PythonだけでWebアプリを作ることができるライブラリ「Reflex」に関する記事です。

https://github.com/reflex-dev/reflex

今回は、問題があったときの解決方法についての情報を説明します。

2024年7月現在、Reflexの情報はまだネットでは少ないです。
ただ、以下の方法を使えば、問題解決できると思います。


# ２．公式ドキュメントでAIに質問

公式ドキュメントには、AskAIというドキュメントに基づいて回答してくれるAIがあります。
以下、利用方法です。

ドキュメント上部の検索欄をクリック。（ショートカットキーを押してもOK）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/37bfe6d8-5147-73ab-d0b4-5edd1c0fdf19.png)

検索欄の横にある、「Ask AI」をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/9b845306-9322-d2a4-9efe-1f27da88f320.png)

質問ダイアログが表示されたら、最下部のテキストボックスに質問を入力し、送信ボタンを押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/4192d446-1ca2-496a-e735-de16abb3a712.png)

日本語の質問もできますし、回答も日本語でしてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/73fbb005-dcb4-ec27-d630-f4a16f0f79a0.png)


## ３．discordサーバで質問

公式ドキュメントのAIで解決しない場合は、Reflexのdiscordサーバへ参加して、日本語チャンネルで質問したり、開発者に直接質問するのもありです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/c28c75e1-fa75-a0ae-e084-bbc6b6404fb9.png)


以下のリンクでサーバへ参加できます。

https://discord.gg/DeWEstSxZy

ちなみに、discordサーバ内でも、AskAIは利用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/f9852d8f-1f35-5d90-0e42-7a3e155bf579.png)
LocalStack環境向けTerraformの設定ファイル(main.tf)をollamaで自動生成してみました。

こちらの方の記事を拝見して、main.tfファイルが自動生成できるようなインタフェースがあれば面白いことができそうだと思いましたので、備忘録もかねて

https://zenn.dev/shimat/articles/32f5f1dc96f817

ollama-uiを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/60127739-0fa6-9bbc-9230-f5b95492a541.png)
詳細はこちらの記事を参照下さい。

https://qiita.com/nw-engineer/items/191f2b89dac88acd33b8


以下指示内容を「type your quesstin here...」に入れて、「Send」をクリックします。

```bash
あなたは、Terraform 構成を生成する便利なアシスタントです。\n次のリクエストの Terraform 構成を生成します。: 設定情報のみファイルに出力してください。S3バケットとLambda関数を作成してください。access_keyとsecret_access_keyはdummyを使用してください。provider設定の中には「endpoints｛｝」を追加し、s3とlambdaをその中に追加して、値を「http://localhost:4566」としてください。
```

main.tfの内容が生成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/0307b580-40fb-04f1-4c73-8dbd9fd97705.png)

APIとかフロントと連携することで、ユーザが構成要件をいれるだけでLocalStackへ連携させて自動で構成デプロイとか、簡単にできるようになりそうですね。
アプリケーション開発のアプローチについて

# はじめに
この記事は、プログラミングの基本的なスキルを身につけたものの、実際にアプリケーションを作るアイデアが思いつかない、またはどのように進めていいか分からないと感じている方に向けて書かれています。アプリケーション開発のアプローチについて、具体的なステップを解説し、どんなに小さなアイデアでも形にする方法を紹介します。初めてのアプリケーション開発を成功させ、成長の糧とするためのヒントを提供しますので、ぜひ参考にしてください。

# アイデアをメモする
アプリケーション開発の第一歩は、アイデアをメモすることです。大きな夢や壮大なプロジェクトであっても、まずは書き留めることが重要です。実現不可能に思えるアイデアでも、メモに残すことで見えてくるものがあります。次に、そのアイデアを最小要素に分解し、一つ一つの機能を具体化します。例えば、大規模なソーシャルメディアアプリを作りたい場合、まずはユーザー登録機能、投稿機能、コメント機能といった基本的な要素に分け、それぞれを順に実装していきます。このように段階的に進めることで、少しずつ成果が積み重なり、自身の成長にも繋がります。

# ChatGPTでアイデアを形にする
アイデアがまとまらない場合や抽象的な内容しか思い浮かばない場合には、ChatGPTを活用するのも一つの手です。ChatGPTは、曖昧なアイデアを具体的な形にするのに非常に有用です。例えば、「コミュニティをつくるアプリが作りたい」といった漠然としたアイデアでも、ChatGPTに相談することで、「ユーザーが自分のプロフィールを作成し、グループに参加し、イベントを共有できる機能」といった具体的な提案を得ることができます。また、技術的な課題や実装方法についてもアドバイスをもらえるため、開発の効率が向上します。アイデアのブレインストーミングからプロトタイプの作成まで、ChatGPTは強力なサポート役となるでしょう。

# アプリは簡単なものから
アプリケーション開発を始める際は、まず簡単なものから手を付けることをお勧めします。先ほどメモに残した具体化した内容の中から、最もシンプルな要素を選び、それをアプリケーション化してみましょう。例えば、先の例でいえば、まずはユーザー登録機能だけを実装し、それが完成したら次に投稿機能を追加するといった具合です。小さな成功体験を積み重ねることで、モチベーションが維持され、次のステップへ進む意欲が湧いてきます。また、初めてのアプリはバグが多くなることもありますが、小規模なプロジェクトであればデバッグも比較的容易です。シンプルなアプリから始めることで、開発の基礎をしっかりと身につけることができます。

# アプリを作ったらGitHubで保存しておく
アプリケーションを開発したら、完成したら必ずGitHubに保存しておきましょう。GitHubは、コードを保存・管理するためのプラットフォームであり、他の開発者と共有することができます。特に転職や就職を考えている場合、自分の実績を示すポートフォリオとして非常に有効です。実際に作ったアプリケーションを公開することで、自分のスキルや経験を具体的にアピールすることができます。また、GitHubにはバージョン管理の機能があり、過去のコードに戻すことができるため、開発中のミスやトラブルにも対応しやすくなります。自身の成長記録としても活用できるので、積極的に使いましょう。

# 大抵のアイデアはすでにある
新しいアイデアを考える際に気をつけたいのは、実は多くのアイデアが既に存在しているということです。しかし、これは悲観することではありません。重要なのは、そのアイデアをどのように実現するか、そしてどのように改良していくかです。既存のアイデアを参考にしつつ、自分なりのアレンジや新しい機能を追加することで、オリジナリティのあるアプリケーションを作ることができます。また、他人が思いついたアイデアでも、実際に実装されていないことも多いです。レガシーコードや古い技術で作られたアプリケーションを最新の技術でリメイクすることも、一つの有効なアプローチです。

# GitHubを活用
GitHubは、すでに多くのコードが公開されている宝庫です。ゼロからコードを書くよりも、既存のコードを活用して改良や機能追加を行う方が効率的な場合も多いです。オープンソースのプロジェクトに参加することで、他の開発者と協力しながら自身のスキルを磨くことができます。また、GitHub上のプロジェクトをフォークして自分のアイデアを追加することで、新たなプロジェクトを生み出すことも可能です。コードレビューやプルリクエストを通じて他の開発者からフィードバックを得ることも、自身の成長に繋がります。GitHubを活用して、効率的に開発を進めていきましょう。
rex0220 横並びプラグイン 応用例1

[rex0220 横並びプラグイン](https://qiita.com/rex0220/items/b24c41d6c3b6ce3f3d78)の応用例です。
テーブルとグループを並べて表示できます。

# 概要

[rex0220 横並びプラグイン](https://qiita.com/rex0220/items/b24c41d6c3b6ce3f3d78)で、テーブルと計算項目・グループなどを横に配置した例です。
画面の行位置とプラグイン設定で簡単に配置を変えることが出来ます。

- テーブルと計算項目の横並び
- テーブルとグループ・ラベルの横並び
- グループ・ラベルとテーブルの横並び

# テーブルと計算項目の横並び

テーブルと計算項目を２セット並べています。

![2024-07-14_11h45_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/cc3c699d-037b-5f92-453f-24d2422a3641.png)

## 横並びプラグイン設定例

罫線で、区切りを入れています。

![2024-07-14_11h52_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/c1f7a2d2-8319-8627-a694-6bfa547c31e4.png)

# テーブルとグループ・ラベルの横並び

テーブルと計算項目・グループの組合せを並べています。

![2024-07-14_11h48_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/78a1c55a-13a9-a12e-9a23-330a5bc10812.png)

## 横並びプラグイン設定例

罫線で、区切りを入れています。

![2024-07-14_11h53_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/9605e1af-d40d-73eb-92ac-5f06b12b4f96.png)

# グループ・ラベルとテーブルの横並び

グループとテーブル位置を入れ替え

![2024-07-14_12h57_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/150e4b70-83d5-83df-ecef-158b8f328d7a.png)

## 横並びプラグイン設定例

フォーム設定でグループとテーブルの上下位置を入れ替えて、プラグイン設定

![2024-07-14_12h59_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/85f3843d-d66f-426e-c445-53c83705529d.png)
ORACLE MASTER Gold DBA 2019合格体験談

# はじめに
この度、ORACLE MASTER Gold DBA 2019に合格したので、その経験談を書き記そうと思います。自分自身は、ORACLE再受験料無料期間に試験を受けて１回目は正答率47%(合格は57%)で不合格であった。その１ヶ月後に正答率68%(合格は57%)で合格した。

# 目次
- [はじめに](#はじめに)
- [ORACLE MASTER Gold DBA 2019とは？](#oracle-master-gold-dba-2019とは)
- [勉強開始時の前提](#勉強開始時の前提)
- [勉強期間とスケジュールについて](#勉強期間とスケジュールについて)
- [勉強方法](#勉強方法)
- [試験対策方法](#試験対策方法)
- [試験当日](#試験当日)
- [試験当日の経験談](#試験当日の経験談)
- [終わりに](#終わりに)

# ORACLE MASTER Gold DBA 2019とは？

**試験名**
- 1Z0-083 Oracle Database Administration II

**認定資格名**
- ORACLE MASTER Gold DBA 2019

**試験の形式**
- 選択問題

**試験時間**
- 120分

**出題数**
- 68問

**合格ライン**
- 57%

**試験費用**
- 37,730 円（税込）

**出題範囲**
- RMANの設定および使用
- バックアップとリカバリの方法
- 障害の診断とリカバリの実行
- CDBとPDBの管理
- データベースパフォーマンスの監視と調整
- データベースのセキュリティ管理
- バックアップとデータベースの複製

**試験の特徴**
- 高度なデータベース管理スキルが試される、専門的で発展的なトピックが含まれます。
- 有償の研修受講が不要で、試験に合格することで直接資格が付与されます。
- 試験は、データベースのバックアップ、リカバリ、パフォーマンスチューニングなど、運用と保守に関連する実務的な知識を深く問います。

# 勉強開始時の前提
ORACLE MASTER Silver DBA 2019を3ヶ月前に合格している。業務では、Oracle19cを使用しているが、基本的なSQLを叩くのみでDBの管理を直接行うわけではない。

# 勉強期間とスケジュールについて
勉強期間は2ヶ月。基本的に平日は2時間。土日は4時間ぐらい勉強した。なので、合計勉強時間は約160時間。

# 勉強方法
- 黒本
https://www.shoeisha.co.jp/book/detail/9784798174365
とにかく問題を解くことを意識していた。黒本自体は全部で約900ページほどあるので覚えるのが非常に大変！しかし、書いてあることはそこまで難しくはない。黒本を読んでもわからないところや、出題数の多い分野は自分のPCにOracle19cを入れて、実機で試すことで理解していた。各章の問題は、3回解いた。3回解いても不明なところは、印をつけて何度も繰り返した。模擬演習もついているので、3回解いた。黒本を読んでもわからないところは、Oracle公式マニュアルを読んで学習した。
# 試験対策方法
Goldの試験は主に4分野に分けられると思っています。
- バックアップ、リカバリ
- マルチテナントアーキテクチャ
- Grid Infrastructure
- その他

肌感覚であるが[バックアップ、リカバリ]と[マルチテナントアーキテクチャ]が黒本の問題を解いて完璧に解けるようにれば合格できるのではないかと思うほど、問題数が多い。自分は、この分野について徹底的に問題を解いて実機でも演習を重ねた。[Grid Infrastructure]は、5問〜10問出題されるイメージがある。最初は、とっつきにくかったが、演習を重ねると出題される問題もある程度同じなので、点数稼ぎには良い分野だと思う。[その他]については出題されても3問ぐらいなので、黒本を軽く読んだだけで、試験でも適当に解答した。

# 試験当日の経験談と結果
自分は1回目の試験は不合格だった。Oracleがたまに開催する再受検料無料に乗っかって勉強開始から1ヶ月立たずに受かったらいいなぁ〜で受けて見事に落ちました。黒本は1周して、模擬試験は2周した。最初の方に勉強した内容は記憶が定着しておらず、試験で悩むことが多かった。2回目の試験は1回目から1ヶ月後に受験した。この時には、3周ぐらいしていたので45分ぐらい余った状態で試験を終了して無事、正答率68%(合格は57%)で合格した。ちなみに、1回目はオンライン受験をした。日程が合う日がなくて、仕方なく試験監督英語で受けたが、あまりに早すぎて何言ってるか全然わからなかった。その後にチャットでやり取りするようにお願いして事なきを得たが疲れた。2回目は試験会場で受験した。オンライン試験と試験会場受験の違いは、試験会場受験はメモ用紙が渡されるけどオンライン試験ではメモ用紙なしで行わないといけないので自分みたいに何か書いて整理したい人にとっては試験会場受験の方が良い。また、途中でトイレに行けるのも試験会場のメリットだと思う。Oracleの試験は2時間ぐらいだから問題ないが、AWSの試験は3時間ぐらいあるのでもし、途中でトイレに行きたくなった時に試験会場の方が安心である。
# 終わりに
ひとまず、900ページの参考書を持ち歩く必要がなくなって良かった。難易度はそこまで高くはないと思うけど、市場価値のある資格を取ることができたのは良かった。
微分、導関数、微分係数の関係

# 微分係数
関数上の「ある点」における変化率。
2次関数等の上のある点における接線の傾き。

# 導関数
微分係数を導き出す為に使われる関数
元の関数をf(x)とした時、f'(x)として表現される。

# 微分
ある関数に対して、導関数を求める為に公式に基づいて式を変形する事。
ある式や値の事ではなく、上記変形する行い自体の事を表す。

# まとめ
ある関数を「微分」して「導関数」を求めたら、その変数に接線を求めたい点を代入すると、「微分係数」が求まる。
## 例：
### y=X^2+4x+2という関数があったとして、x=2における変化率(接線の傾き)を求めたい場合

y=X^2+4x+2・・・元の関数:f(x)
↓(微分)
y=2x+4・・・導関数:f'(x)
↓x=2を代入
y=2*2+4= 8・・・微分係数:f(a)の値