OmniAICreator/Qiita-1.07M huggingface dataset:
Eclipseでpropertiesファイルを編集すると文字化けしたみたいになる

## 事象

eclipseで編集し日本語を書いて保存した際、以下のようになり読むことができない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243523/f625be76-b5ba-d70e-9bbc-f82991816306.png)
```
MESSAGE1 = \u3051\u3044\u3053\u304f
MESSAGE2 = \u8b66\u544a
```
[Unicode Escape Sequence | KWONLINE.ORG](https://www.kwonline.org/u_esc_seq.php)

## 原因

実際は文字化けではなく文字コードに変換されていて `System.out.println();`すると日本語が出る。
eclipseで実行すると勝手にnative2ascii（ねいてぃぶあすきー）というツールを使い
自動で変換を行うため、このようになってしまう。
※ サクラエディタで編集すると回避できる。

## 対処方法

native2asciiを無効にする ※実行時に不具合が出た場合は、チェックを外して実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243523/34473a91-c54d-8e88-4fce-d5428c95a3fd.png)

または日本語の編集も可能にするプロパティエディター「PropertiesEditorプラグイン」を利用する 
http://proengineer.internous.co.jp/content/columnfeature/9158
LLMフレームワークとCassandraとを統合するCassIO概要

# はじめに

本稿では、以下のサイトで公開されている情報を元に、CassIOについて紹介します。CassIOは、LLMフレームワークとCassandraとを統合します。

https://cassio.org/

# CassIOとは

CassIO は、 Apache Cassandra® を生成人工知能やその他の機械学習ワークロードとシームレスに統合するための究極のソリューションです。この強力な Python ライブラリにより、ベクトル検索機能など、Cassandra データベースの高度な機能にアクセスする複雑なプロセスが簡素化されます。CassIO を使用すると、開発者は Cassandra との統合の複雑さを気にすることなく、AI システムの設計と完成度の向上に完全に集中できます。


# アーキテクチャ

CassIO は、さまざまな LLM フレームワークを強化するコア ロジックであり、各フレームワークの特定のインターフェイスに適合するように調整された「シン アダプター」を利用します。アプリケーション、LangChain や Llamaindex などのフレームワーク、Cassandra データベースの間の仲介者として、CassIO は効率的かつ効果的なデータ管理のための最適なソリューションです。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/41b2816e-9abe-7ca2-20bf-70d1abebe83e.png)


# LangChainサポート

CassIO は LangChain とシームレスに統合し、多くのタスクに Cassandra 固有のツールを提供します。 

### LangChainとは

LangChain は、大規模言語モデル (LLM) の管理と対話のほとんどを自動化する、人気があり急速に進化しているフレームワークです。その機能には、メモリのサポート、ベクトルベースの類似性検索、高度なプロンプト テンプレートの抽象化などが含まれます。

LangChain には、Python と JavaScript の実装が付属しています。

## CassIOの提供する基本機能

CassIOは、LangChainの以下の機能と組み合わせて利用することができます。

 - プロンプトテンプレート
 - メモリー
 - キャッシング
 - ベクトル検索

# サンプルプログラム


Cassandra からプロンプトへのデータの自動挿入

 https://cassio.org/frameworks/langchain/prompt-templates-basic/


https://cassio.org/frameworks/langchain/chat-prompt-templates/

プロンプトのパーティショニング

https://cassio.org/frameworks/langchain/prompt-templates-partialing/

Cassandraをバックエンドに用いる)Feastフィーチャーストアからプロンプトへのデータの自動挿入

https://cassio.org/frameworks/langchain/prompt-templates-feast/

ストレージに Cassandra を使用する LLM 用のメモリモジュール

https://cassio.org/frameworks/langchain/memory-basic/

https://cassio.org/frameworks/langchain/memory-conversationbuffermemory/

https://cassio.org/frameworks/langchain/memory-summarybuffermemory/

https://cassio.org/frameworks/langchain/caching-llm-responses/

さらに、Cassandra / Astra DB に追加される「ベクトル検索」機能により、別の「意味を認識する」ツール セットが有効になります。

https://cassio.org/frameworks/langchain/semantic-caching-llm-responses/

https://cassio.org/frameworks/langchain/qa-basic/

https://cassio.org/frameworks/langchain/qa-advanced/

https://cassio.org/frameworks/langchain/qa-maximal-marginal-relevance/

https://cassio.org/frameworks/langchain/memory-vectorstore/
検証用の仮想環境を構築する

# 背景
- 検証のため仮想環境が必要になったが、以前にさわったことがあるだけだったので、練習のために基本的な仮想環境作成を行うことにした

# 仮想マシンの作成
※virtualboxのインストールについては割愛
- virtualboxを開き、新規をクリックする
    - 仮想マシンの名前を「test_test」
    - メモリーサイズを1000mbに設定
    - 作成をクリック
- 仮想ハードディスク作成画面
    - 変更なしで作成をクリック
    - 仮想マシンが作成される
# 仮想マシンの設定
- 作成した「test_test」にチェックを入れを設定をクリック
- ストレージタブに移動し、ストレージSATAにあるディスクマークをクリックし「CentOS-7-x86_64-DVD-2009.iso」を選択
※isoファイルのダウンロードに関しては割愛
- ネットワークタブに移動し、割り当てを「ブリッジアダプター」に変更
- 右下のOKボタンを押す
- 「test_test」にチェックを入れ、起動をクリック

### 起動後の設定
- 言語の選択画面が表示されるので、日本語を選択
- インストールソース
    - 「自動検出したインストールメディア」にチェックが入っていることを確認し、完了をクリック
- ソフトウェアの選択
    - 今回はインフラストラクチャーサーバー、右側を開発ツールに設定、完了
- インストール先
    - 特に変更せずに完了
- ネットワークとホスト名
    - ethernetをオンにし、右下の設定を押す
    - ipv4セッティングタブに移動
        - 方式を「自動（DHCP）」に変更、保存を押す
    - 完了をクリック
- 日付は問題ないため、このまま「インストールの開始」をクリック
- ユーザー設定
    - rootパスワードの設定を行う
    - ユーザー名とパスワードの設定を行う
    - インストールが終わるまで待つ
    - インストールが終わったら再起動ボタンを押す

# サーバーにログイン
- 設定したユーザー名とパスワードを入力し、サーバーにログインできる
【Swift】CocoaPodsからSwift Package Managerへの移行で困ったこと・気をつけること

# 📦💨 CocoaPodsからSwift Package Managerに移行する
Swift Package ManagerはAppleが公式に提供しているライブラリ管理ツールです。
そのため、CocoaPodsやCarthageと比較してApple純正という点で長期的な保守性が高く今後のスタンダードになるではないかと考えられます。
今回は2019年に個人で制作したアプリでCocoaPodsを使っているために発生したビルドエラーに悩まされたことがSPMに移行するきっかけになりました。その上で、使用ライブラリが全てSPMに対応しておりどうしてもCocoaPodsを使わなければいけない理由が無かったため移行するに至りました。
移行したライブラリはFirebaseとFirebaseUIで、Xcode上のGUIからSPMを使用しました。

# 移行前に気をつけること
 - Podfileを消す前に何のライブラリを使っていたのかメモしておきます。
 - CocoaPodsを使っているままのファイルも残しておくと、後から元々使っていたライブラリのバージョンを確認するのに役立ちました。

# 移行時に困ったこと
### 1. FirebaseUI-iOS導入時に`Up to Next Major Version`のバージョン上限が1.0.0から変わらない
Dependency Ruleでは`Version` `Branch` `Commit`のいずれかを選択し、ライブラリのバージョンを設定します。ここでは指定したメジャーバージョン未満で最も新しいバージョンに更新することができ、デフォルトでも選択されている`Version`の`Up to Next Major Version`が適切です。メジャーバージョンの更新では更新時にコード変更が発生することがあるため、メジャーバージョン未満で設定することが安全なようです。
しかし、`Up to Next Major Version`を選択した状態で最小バージョンを変更しても本来変更されるはずの最大バージョンの値が変わらないという問題が起きました。
![スクリーンショット 2023-09-11 14.50.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333791/5a0549e8-cd5d-329d-af83-05c781c56d23.png)
**解決した方法**
1. Dependency Ruleを`Version`の`Range of Versions`もしくは`Exact Version`にし、最新バージョンの13.0.0(2023年9月現在)に値を変更してAdd Packageします。
※CocoaPodsを使っているファイルのディレクトリでターミナルから`pod outdated`を実行することでライブラリのバージョンと最新バージョンを確認することができます。
2. PROJECT -> PackageDependenciesよりSPMから導入したライブラリを確認し、ダブルクリックして表示される設定から、`Up to Next Major Version`に変更します。この時、すでに導入されたライブラリのバージョンが13.0.0であることから上限も13.0.0になった状態に変化していることが分かります。下限を12.0.0に設定しました。
![スクリーンショット 2023-09-11 15.38.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333791/60ca2fc5-9bf0-e298-b692-65346a1f52b8.png)
🎉**解決**🎉
背景に、先に導入したFirebaseのバージョンに対してFirebaseUIのバージョンが低すぎるためにconflictが起きAdd Packageに失敗するということがありました。
特に問題なければ最新バージョンを利用するのが適切かと思います。

### 2.ビルドすると`Module 'FirebaseStorage' not found`エラーが発生する
No such Module~~のエラーの類だと思い
- Clean Build Holder
- DerivedDataの削除
- シュミレータに既に入っているアプリの削除
- Xcodeの再起動
- FirebaseとFirebaseUIが互いに対応しているバージョンの確認
- Swift Package Managerのキャッシュ削除

などのあらゆる方法を試しましたが治りませんでした。
調べてみると、こちらのissueで解決方法が提示されておりました。

https://github.com/firebase/FirebaseUI-iOS/issues/1028#issuecomment-1262689219

**解決した方法**
TARGETS -> Build Settings -> Swift Compiler - Custom Flags -> Other Swift Flagsに`-Xcc -fmodule-map-file=$(GENERATED_MODULEMAP_DIR)/FirebaseStorage.modulemap`を追加します。
![スクリーンショット 2023-09-11 16.12.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333791/a44def60-5edf-9746-0974-2beb55ef49cd.png)
DebugとReleaseどちらにも記述したところ解決しました。

🎉**解決**🎉


# 移行後に気をつけること
 - Crashlyticsを使用する場合、設定するRun ScriptがCocoaPodsとは異なるため変更する必要があります。[Firebaseドキュメント - Firebase Crashlytics を使ってみる](https://firebase.google.com/docs/crashlytics/get-started?hl=ja&platform=ios#initialize-crashlytics)のステップ2に記載されている手順に従って変更します。
 - GitHubを使っている場合、.gitignoreのCocoaPodsに関する記述をSwift Package Managerに置き換えます。.gitignoreファイルの中身は、[gitignore.io](https://www.toptal.com/developers/gitignore)から簡単に生成することができます。

# おわりに

CocoaPodsからSPMに移行したことで、ビルド時間が短縮された気がします。よかったです。
お読みいただき、ありがとうございました。
お役に立てましたら幸いです。


## 参考

https://firebase.google.com/docs/ios/swift-package-manager?hl=ja
windowsでLaravel8.x DuskのChrome Driverを手動で更新

開発環境であればいけるかと。

# Chrome Driverを手動でダウンロード

https://googlechromelabs.github.io/chrome-for-testing/

対応するドライバーをダウンロードして解凍。

# /vendor/laravel/dusk/bin

Chrome Driverを上書きする。
windowsの場合、`chromedriver-win.exe` を上書きする

# 情報源

https://qiita.com/bei-1998/items/3643193a57dcc41e70ba
> ChromeDriverの場所を探してみて、/vendor/laravel/dusk/bin以下に発見。
Figma(ブラウザ)でローカルのフォントを使用する

#### 1. FigmaのフォントインストーラーをPCにインストールする
https://www.figma.com/ja/downloads/

#### 2. 使用したいフリーフォントをダウンロード（ここではSatoshiフォントさん）
https://www.fontshare.com/fonts/satoshi
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243523/2a59113c-a030-6647-61fb-0954b367ed98.png)

#### 3. zipを解凍して、otfファイルをインストール（ttfでもいいけど、otfの方が便利らしい）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243523/85b198ff-c5e7-1541-3881-b5763a09a6f5.png)

#### 4. ブラウザのFigmaに戻って、F5で一旦更新

#### 5. サイドメニューから、ローカルのフォントにアクセスできるようになっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243523/6f39d8ae-cf4b-3a93-cab6-2a97e2015935.png)
mulesoft training

Mulemasters is a software training and placement company that provides training on MuleSoft, an integration platform as a service (iPaaS) solution. They offer both online and classroom training, and their courses are designed to help students learn the skills they need to become MuleSoft certified.

Mulemasters was founded in 2015 by two software engineers who saw the need for better training on MuleSoft. They have since trained over 10,000 students, and their courses have been rated highly by students and employers alike.

Mulemasters offers a variety of courses on MuleSoft, including:

MuleSoft Foundations
MuleSoft Anypoint Platform
MuleSoft API Designer
MuleSoft API Manager
MuleSoft CloudHub
MuleSoft Anypoint Studio
They also offer courses on other related technologies, such as Salesforce and AWS.

In addition to training, Mulemasters also provides placement services for their students. They have a network of over 1000 employers who are looking for MuleSoft certified professionals.

Mulemasters is a leading provider of MuleSoft training. Their courses are designed to be comprehensive and practical, and they offer placement services to help their students find jobs.

Here are some of the benefits of training with Mulemasters:

Comprehensive training: Mulemasters' courses cover all the essential topics you need to know to become MuleSoft certified.
Practical training: Mulemasters' courses use real-world examples and projects to help you learn the skills you need to be successful.
Placement services: Mulemasters can help you find a job after you complete their training.
If you are interested in learning MuleSoft, Mulemasters is a great option. They offer comprehensive and practical training, and they can help you find a job after you complete their training.

Here are some of the reviews of Mulemasters:

"I really enjoyed the MuleSoft Foundations course. The instructor was very knowledgeable and the material was well-organized. I would definitely recommend this course to anyone who is interested in learning MuleSoft." - John Doe, Software Engineer
"The MuleSoft Anypoint Platform course was very helpful. I learned a lot about how to use the platform, and I was able to complete a real-world project as part of the course. I would definitely recommend this course to anyone who is using the Anypoint Platform." - Jane Doe, IT Manager
"I was able to find a job as a MuleSoft developer after completing the Mulemasters training program. I am very grateful for the help they provided." - Peter Smith, MuleSoft Developer![Untitled design.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555885/c936a926-8d4e-4a99-e6d5-f97e7ee27585.png)
Pythonプログラムの基本（クラスや関数の使用）

<h3>前提など</H3>

**対象：**　
　・Python初学者が対象
　・[過去記事](https://qiita.com/okamoto0) もチラ見してください。

**開発環境：**　Windows、Visual Studio Code、Python3系
　　　　　　　[前々回構築した開発環境で学習を進めます。](https://qiita.com/okamoto0/items/f63b7726626e57026f99)
　　　　　　　※Windows10での使用を前提とするが、他OSでも大きく変わらないはずです。

**前提：**　初学者は公式ドキュメントを元に学習すべきであるが、
　　　　社内勉強会を前提としているため、基本を掻い摘んで駆け足で説明します。
　　　　[★Python公式ドキュメントへのLINK★](https://docs.python.org/ja/3/)


<h3>今回のテーマ</h3>
関数、クラス、メソッド　の使い方を勉強します。

※今回もPythonというかプログラムの基本のおさらいです。

**言い訳**
クラスについて説明するには、まずオブジェクト指向の説明が必要なのですが
オブジェクト指向を正しく説明するとそ、れだけで勉強会を数回やらないと理解出来ないのでざっくり以下。
クラスとは学校のクラスと同じです。
同じ様な子が集まってるくらいでお茶を濁して進めますよ。

<h3>クラスとは</h3>
クラスとは、<B>要素（属性）</B>や　<B>振る舞い（操作）</B>を
まとまりとして定義したものです。

様々なプログラミング言語で使われています。
ひとまず現段階では、要素は<B>変数</B>、振る舞いは<B>関数</B>と思っておいてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/f51d2da4-d22b-0f66-d494-c2e6c9adc872.png)
<h3>メソッドとは</h3>
前回記事にて「関数」についてサラッとやりましたが、メソッドとはホボ関数と同じと思って良いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/25f808ca-e48f-261a-e92f-0c476d3282a9.png)
メソッドと関数では何が違うのか？
<B>メソッド</B>とは
・クラス内で定義された関数
・オブジェクトの属性として参照される関数
前回紹介した　list　もメソッドに使えます以下を試してください。
コード１:
```py
n_list = ["a","b"]
print( n_list )
```
コード２：
```py
n_list.append("c")
print( n_list )
```
解説
コード１ の１行目は、 listの設定を行っています。
コード２ の１行目は、 appendで listに「c」を追加しています。

<h3>関数を実装してみよう</h3>
まずは関数を実装してみよう。
test_func.py　というファイル名で実装し、実行して確認してください。

```py
def test_func():
    print('call test_func')

test_func()
```
解説
1行目　defが　関数の宣言
1行目～2行目　この2行が関数
末尾行の「test_func()」は関数を呼び出しています。

<B>関数に引数をつけてみよう</B>
先ほどのソースコードを以下のように修正し、実行して確認してください。
```py
def test_func(str1, str2):
    print("引数は" + str1 + "と" + str2)

test_func("test", "func")
```
解説
1行目　のカッコ内の「str1,str2」が引数です。
末尾行の関数呼出し時に、「test」　と「func"」を引数として渡しています。

<h3>クラスとメソッドを実装してみよう</h3>
test_class.py　というファイル名で実装し、実行して確認してください。

```py
#クラスの定義
class TestClass:
   # メソッドの定義
   def test_method(str1, str2):
       print("引数は" + str1 + "と" + str2)

####　ここからメソッドを呼び出す　###
TestClass.test_method("くらす","めそっど")
```
解説
2行目　class・・・　が　クラスの宣言
4行目　メソッドも　def　で宣言します。
4行目～5行目　この2行がメソッド
末尾行の「TestClass.test_method("くらす","めそっど")」はメソッドを呼び出しています。
メソッドの呼び出し時は　クラス名．メソッド名　で呼び出します。


<B>以下修正中。
~~他ファイルからクラスのメソッドを呼び出す場合~~
</B>
Google Cloud (GCP)資格受ける前に必読：Professional Cloud Network Engineer 編

皆さんこんにちは！iret Global Solutions 事業部の浜田です。今回はProfessional Cloud Network Engineerについて書いてみました。ネットワークは専門用語やサービスの使い分けが難しくとっつきにくいイメージがありますが勉強すれば困難な試験ではないのでしっかり頑張りましょう。

<h1>前提条件</h1>
本記事は既にVPC, Google Compute Engine, Cloud Functions,
Cloud storageなどの基本的なGCPのサービスを知っていることを前提としています。


<h1>試験概要</h1>
他の試験と同様、試験時間は2時間で問題数は50問です。

https://cloud.google.com/learn/certification/cloud-network-engineer?hl=ja

https://cloud.google.com/learn/certification/guides/cloud-network-engineer?hl=ja

<h1>絶対覚えておいた方がいいサービス</h1>

|名称|説明|
|:-----------------|------------------:|
|Cloud VPN|Google Cloudが提供するVPNです。ネットワーク間の送受信を安全位保護してくれます。|
|Cloud DNS|Google Cloud が提供するDNSサービスです。ドメインの登録や管理を行ってくれます。|
|Cloud CDN|Google のグローバルなネットワークを使用して、世界中に散らばるそれぞれのユーザーに一番近いエッジからコンテンツを配信するサービスです。AWS経験者はCloud Frontをイメージして頂ければと思います。||
|Cloud Armor|DDoS対策およびWAFを提供するサービスです。悪意のあるトラフィックからアプリケーションの保護とDDoS攻撃に対抗します。一般的なWebアプリケーションの脆弱性をフィルタリングしてWebサービスのセキュリティを向上させます。||
|Load Balancer|ユーザーのトラフィックをアプリケーションの複数のインスタンスに分散します。負荷を分散することで、アプリケーションにパフォーマンスの問題が起こるリスクを低減します。本試験ではトラフィックの種類とロードバランサーの関連性について把握しておくことが重要です。||
|VPC Peering|VPCピアリングを使用することで異なる組織間のVPCを安全に接続することができます。|
|Shared VPC|こちらは同組織内の別プロジェクト間で共有するためのサービスです。VPCピアリングと混同しないようにしましょう。|
|Cloud Interconnect|オンプレミスネットワークとGoogle Cloud間に専用のネットワーク接続を可能にするサービスです。公共のインターネットを避けることでオンプレミスデータセンターとGoogle Cloud間のデータ転送をセキュアに行うことができます。|
|VPCフローログ|インスタンスによって送受信されたネットワーク フローを記録することができます。モニタリングや分析に活用することが可能です。||
|Private Google Acces|VPC内の仮想マシンが他のGoogle Cloudサービスにインターネットを経由せずにアクセスできます。公共のインターネットへを避けることでVPCとGoogleサービス間のセキュアなデータ転送を確保します。|
|Cloud NAT|外部IPを持たないインスタンスがインターネットへのアクセスをするために利用する ツールです。Cloud NAT を使うことで外部からのアクセスを防ぐことができ、VM がある VPC を外部のネットワークと切り離すことが可能です。|
|VPC Service Controls|Google Cloudのリソース間で境界線を張ることで外からのアクセスを制限できます。Google Cloudのインフラ内でも、認証されていないアクセスからリソースを保護するための細かいアクセス制限を行うことが可能です。||
|Network Intelligence Center|Google Cloud が提供するネットワークの監視コンソールです。活用することでサービス停止のリスク減らして、セキュリティとコンプライアンスを確保してくれます。||





<h1>その他必須項目</h1>

<strong>基本的なネットワークサービス </strong>
ファイヤウォールルールやCloud Routeなどネットワークでは欠かせないトピックになってきます。試験を受ける前に必ず勉強しておきましょう。



<strong>各サービスの比較</strong>
前述したサービスの中でもVPN, Private Google Acces,やCloud Interconnectなど価格や安定性、提供に必要な時間や何に対して使うかなどをしっかり整理しておきましょう。特にCloud Interconnectの中には Partner Interconnect と Dedicated Interconnectの2種類があるのでしっかり押さえましょう。

<h1>試験対策</h1>
Google Cloudの模擬試験は必ず解いておきましょう。
足りない部分はUdemyを使うかWhizlabsをChromeのプラウザ翻訳して解くのがおすすめです。

https://docs.google.com/forms/u/0/d/e/1FAIpQLSenwtVgqT1eyc3_H_QFdFIAVGezCJ42qAJDmDxUC5Yiq-m-Pw/viewform?usp=send_form&pli=1

また、僕は本試験では使いませんでしたがUdemyでも沢山コースや問題集があるので是非活用してみてください。

<h1>最後に</h1>

さて、今回の記事は以上になります。AWS,GCP関係なくNetworking関係のの試験は専門用語が沢山ありとても難しかったイメージがあります。しっかり勉強して試験位備えましょう。

他のGoogle Cloud の試験に興味がある方は以下に難易度順のランキングを載せているので参考程度に是非。

https://qiita.com/sina-cloud/items/bbe1d263c6b69954867f

それでは皆さん、ご武運を。
AHCに久しぶりに出るときに思い出す重要ルール

# 皆さんちゃんとルールを思い出せていますか？？
先日のAHC023にて私は見事にルールを忘れ壮大にやらかしました。
このような事を皆さんも体験した、する可能性があると思うので忘れる前に書き残していきます。

## 1,最終的なスコア導出に使われる提出は最終ACではない

ABC,ARC,AGCをやっている人がやらかしやすいと思います。
Algoの大会では、各問題のAC後のWAは最終AC数に影響されないのですがAHCでは違います。


:::note alert
### CEではない結果を得られる最終提出が、結果の点数計算に用いられます

:::




## 2,再提出に必要な時間は30分以上

1つ目のルールが存在することによってデスコンボになります。
algoと同じノリで時間前にACになるかどうかわからない提出をすることで最終解答WAになるのが最悪のケースです。

なのでAHCでは時間が30分前になったら何があっても事前に提出している中でACが確定している提出をする方が安全です。


## まとめ
:::note
- 残り30分になったら今まで提出した中で一番いい提出を再提出し、危険な冒険(WAになる可能性をもつ提出)をできるだけしない

:::
Javascript Strict Mode

### In which environment can Strict Mode be worked?
Strict mode was introduced in ECMAScript 5 (ES5) and continues to be supported in all modern browsers and JavaScript environments.
※Alternatively, you can enable strict mode for an individual JavaScript file by using ECMAScript modules, which are automatically in strict mode by default.

### What can Strict Mode do?
 - Converting mistakes into errors
 - Simplifying scope management
 - Making eval and arguments simpler
 - "Securing" JavaScript
 - Future-proofing JavaScript
 
### Usage of Strict Mode
It's very simple! 
If you want to stict your javascript code, add just 'use strict' before the statement that you want to strict.

```.js
"use strict";
let mistypeVariable;

// Assuming no global variable mistypeVarible exists
// this line throws a ReferenceError due to the
// misspelling of "mistypeVariable" (lack of an "a")
mistypeVarible = 17;
スマホでWebサイトをデバッグ

# iPhoneのsafari browserをMac上でDebug方法
Frontの開発をして様々なデザインチェックをする際に、自分が作ったサイトのデザインをスマホでデバッグしたいときに使えたらと思う。
今回はiPhoneのsafari browserで動いているサイトをMacBook上でデバッグする方法を紹介します。

# iPhoneとMacBookをCableで繋ぐ
接続ケーブルは使う端末によって違うが、自分の場合は iPhone 12 Promaxと MacBook Air を繋いで検証するので、TpyeCケーブルで繋げます

# iPhoneのSetting
iPhoneのSetting＞Safari＞Advanced(詳細)> `Web Inspector` をONにする
![WebInspector](https://github.com/ayemohmohthu-pg/study-stocks/assets/67247918/6b05d4ea-db0c-4633-9489-a4c3bc896eaf)

# MacのSetting
端末MacBookのSafariのDevelopにてお使いの

・MacのSafari＞Develop(開発)にて 繋げている iphoneデバイスを選択し＞デバッグしたいページを選択
![スクリーンショット 2023-09-11 15.36.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1981373/bde209ce-4cd6-5290-b742-aa0957a2bfa5.png)
![スクリーンショット 2023-09-11 15.35.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1981373/5eb555e7-a9e6-0925-f9b9-f3ca614c3d6e.png)
echo(go-lang)のプロキシをnginxで構築する

## 目的
echoに対するアクセスログを取得したい時に、nginxをプロキシとして構築する。

## 構築
```conf
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name www.example.com
    location /api/ {
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;

      proxy_pass http://golang:8080/;
    }

    location / {
        root /var/www/html;
        index index.html;
    }
}
```
Autonomous DatabaseのDatabase Actionsのチャート機能を使ってみた

# はじめに
Autonomous Databaseでは、Database Actions上において、SQLコマンドを使用してデータを視覚化するチャートという機能があります。
本記事では、サンプルデータを用いて、チャートを作成してみました。

# 実際にDatabase Actionsのチャートを触ってみた
### ユーザーに、サンプルデータのロード
1. [OCIチュートリアル](https://oracle-japan.github.io/ocitutorials/database/adb217-use-database-actions/#1-%E5%88%86%E6%9E%90%E7%94%A8%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%82%88%E3%81%86database-actions)を参考に、QTEAMというデータ操作用のユーザーを作成します。
1. 上記サイト内に記載のある「Movie_Sales_2020.csv」のリンクをクリックし、映画の売り上げデータが入ったサンプルデータをダウンロードしておきます。
1. [上記サイトの次の手順](https://oracle-japan.github.io/ocitutorials/database/adb217-use-database-actions/#2-%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%83%E3%83%97%E3%81%A7%E4%BD%BF%E3%81%86%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%BA%96%E5%82%99%E3%81%97%E3%82%88%E3%81%86)を参考に、Movie_Sales_2020.csvをQTEAMユーザーにロードします。

### チャートの作成
1. Database Actionsの起動パッド内の、チャートのカードをクリックします。
![チャートを使ってみた_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/9feed4a5-6be4-ba72-faa5-2ba60b70a5b7.png)

1. 画面右上の新規チャートをクリックします。
![チャートを使ってみた_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/4849658f-8b4e-49ba-4a54-8db49adcdf6b.png)

1. チャート作成画面で、チャートの設定を入力します。
チャート名: chart1
説明: 2020年4月における、国ごとの売り上げのグラフ
権限によって保護済み: 非保護
⇒次を押す
![チャートを使ってみた_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/86eecc6d-3eba-c86c-e87a-01f9680c2307.png)

1. 下記SQL文(例)を画面左側に入力します。
    ```
    SELECT
    sum(sales), country
    FROM QTEAM.MOVIE_SALES_2020
    where MONTH in('April')
    group by country;
    ```
    画面右側では、チャートの見た目の設定ができます。
    チャート・タイプ: 円グラフ
    スタイル: 3D
    
![チャートを使ってみた_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/75dc8aa0-c1b0-e1b0-c722-3777a55bfcc0.png)

⇒作成を押します。

1. すると、下記画像のようにチャートが作成されました。
![チャートを使ってみた_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/774de77a-f1d4-862f-be3d-8efdb0f93587.png)

1. 3点リーダーをクリックし、チャートの表示を押します。(画像のように、ここから編集画面にも遷移できます。)
![チャートを使ってみた_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/06b14925-7e7d-58bc-9da7-4054617ae517.png)

1. タブが変わり、作成したチャートが大きく表示されます。
![チャートを使ってみた_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/0678fb28-87a5-d085-230a-b11015f8b1bb.png)

1. チャートの作成は、Database ActionsのSQLの機能からもできます。下記画像のように、SQL文をワークシートに記載し、赤枠の「チャートの作成」を押すことでも同様にチャートの作成ができます。
![チャートを使ってみた_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/56d69fd8-2ed7-6897-ecd3-5c9cfdca52f2.png)



# 参考文献
* [チャートの作成および編集](https://docs.oracle.com/cd/F55414_01/sdweb/example.html#GUID-770876DA-CCBF-49D3-970A-2671FDD9065D)
.NET：JSON のシリアル化と逆シリアル化を行う方法

## 前書
自分の勉強メモ、ご参考まで

## JSONの逆シリアル化のサンプル

* 参考先

https://learn.microsoft.com/ja-jp/dotnet/standard/serialization/system-text-json/how-to?pivots=dotnet-6-0

* `System.Text.Json.JsonSerializer`を利用する。

```c#
using System.IO;
using System.Text.Json;

namespace Sample
{
    enum LogLevel
    {
        ERROR,
        WARN,
        INFO,
        DEBUG
    }

    internal class Settings
    {
        internal class Default
        {
            public const string LOGDIR_PATH = @"C:\aaa\ZZZ-temp\";
            public const string LOGFILE_NAME = "temp.log";
            public const LogLevel LOG_LEVEL = LogLevel.DEBUG;
            public const bool IS_LOGFILE = true;
            public const uint LOGFILE_MAXSIZE = 1024 * 1024 * 10;
            public const uint LOGFILE_PERIOD = 365 * 5;

            public string LogDirPath { get; set; } = LOGDIR_PATH;
            public string LogFileName { get; set; } = LOGFILE_NAME;
            public LogLevel LogLevel { get; set; } = LOG_LEVEL;
            public bool IsLogFile { get; set; } = IS_LOGFILE;
            public uint LogFileMaxSize { get; set; } = LOGFILE_MAXSIZE;
            public uint LogFilePeriod { get; set; } = LOGFILE_PERIOD;

            public void readJson()
            {
                try
                {
                    string jsonString = File.ReadAllText("Setting.json");
                    Default? @default = JsonSerializer.Deserialize<Default>(jsonString);

                    if (@default != null)
                    {
                        this.LogDirPath = @default.LogDirPath;
                        this.LogFileName = @default.LogFileName;
                        this.LogLevel = @default.LogLevel;
                        this.IsLogFile = @default.IsLogFile;
                        this.LogFileMaxSize = @default.LogFileMaxSize;
                        this.LogFilePeriod = @default.LogFilePeriod;
                    }
                } catch { }
            }
        }
    }
}
```
.NET：自学メモの目次

##前書
* 自分の勉強メモ、ご参考まで

https://qiita.com/tanakatian/items/b2ec06f03223ecb15425

https://qiita.com/tanakatian/items/a388422cc53a3c77ef11

https://qiita.com/tanakatian/items/108528a0a647455d614c

https://qiita.com/tanakatian/items/eab7b119ca4b815d9217

https://qiita.com/tanakatian/items/edb3bb991aa836610438

https://qiita.com/YoshijiGates/items/3febee15d66aae028f09
xml2rfcのインストール

## はじめに

RFCやInternet Draft(I-D)の執筆はXMLを用いて行い、xml2rfcを用いて整形されたテキストファイル等を生成します。このxmlファイルからtextファイルへの変換は、以下のサイト

https://github.com/ietf-tools/xml2rfc

で可能ですが、ここでは、xml2rfcコマンドのインストール方法について記述します。

## Mac OSの場合

ターミナルを起動して、以下のコマンドを入力します。

```
pip3 install xml2rfc
```

<!-- ## Windowsの場合 -->


## ソース
ソースは、以下と思われます。

https://pypi.org/project/xml2rfc/

## 以前のバージョンとの違いについて

以前の、xml2rfc version1は、tcl/tkで記述されていたと思います。
このバージョンは、pythonで記述されています。
XMLmindでI-Dを編集する

## はじめに

RFCやInternet Draft(I-D)の執筆は、XMLを用いることが一般的で、以下のページにあるように、XMLのファイルから成形されたテキストファイル等を生成する、xml2rfcのようなツールも提供されています。

https://github.com/ietf-tools/xml2rfc

ところで、XMLをテキストエディタで編集することは、なかなか敷居が高いのではないでしょうか。ここでは、XMLmindというXMLエディタを用いて執筆する方法を紹介します。

## XMLmindを用いたI-D編集

xml2rfc-xxeというプラグインをXMLmindに導入することにより可能になります。この際、注意すべきことは、XMLmindのバージョンに対応する、xml2rfc-xxeのバージョンを選択することです。双方のバージョンを確認した上でダウンロード、インストールすることをお勧めします。

### 動作環境
MacでもWindowsでも、動作します。Linuxでも可能なようです。

### XMLmindのインストール

XMLmindは、以下に最新版があります。

https://www.xmlmind.com/xmleditor/download.shtml

なお、古いバージョンも以下から入手可能です。

http://www.xmlmind.com/archive/xmleditor/

### xml2rfc-xxeのダウンロード

以下を見て、XMLmindに対応するxml-rfc-xxeのバージョンを確認して、対応するバージョンのzipファイルをダウンロードしましょう。

https://github.com/wkumari/xml2rfc-xxe/blob/master/README.md

### xml2rfc-xxeのXMLmindへの読み込み

XMLmindのメニューの、Options -> Preferancesを選択し、左にあるメニューのinstall add-onsからダウンロードしたzipファイルを選択します。
なお、URL指定でも可能なようです。再度、Options -> Install Add-onsを選択し、XML2RFC plug-inが存在することを確認し、チェックボックスにチェックを入れ、OKしましょう。その後、XMLmindを再起動し、I-Dを新規作成してみましょう。xml2rfcのテンプレートを選択すれば良いです。

この内容は、以下に記載されています。

https://github.com/wkumari/xml2rfc-xxe/blob/master/README.md

### 注意

もし、rfc2629.dtdが無いとエラーが出たら、XMLmindを終了し、再度起動してみてください。



## 備考
XMLmindのライセンスは確認してください。

xml2rfc-xxeは、以前は、以下から公開されていました。

https://code.google.com/archive/p/xml2rfc-xxe/
RDSバージョンアップに伴う、パラメーターグループの作成

# パラメーターグループ作成の経緯
- 前にまとめたRDSのEOL期間発表に伴い、RDS8.0用のパラメーターグループの作成が必要になった。
https://qiita.com/fsd-ishihara/items/46c84f05777d795dc168

# 作成手順
### パラメーターグループの作成
- サービスRDS>パラメーターグループに移動
- 「パラメーターグループの作成」をクリック
- 以下の項目を記載する
    - パラメーターグループファミリー「mysql8.0」
    - グループ名「任意の名前」
        - グループ名は任意であるが、本番環境なのか開発環境なのかや、RDSのバージョン（今回は8.0）などをグループ名に入れておくとわかりやすい
    - 説明 ⇒ どのRDSにこのパラメーターグループを使用するかなどを書いておくとわかりやすい
- 「作成」をクリック

### パラメーターグループ内の設定
- 今回は以前に作成されていた「mysql5.7」用のパラメーターグループが存在するため、こちらと同じパラメーターに設定する
- 「mysql5.7」用のパラメーターグループにチェックを入れ、アクション＞比較とクリックする
    - 作成した直後から変更されている値が表示される
- 作成したパラメーターグループにチェックをいれ、アクション＞編集をクリック
    - 5.7用のパラーメーターグループのパラメーターをもとに、8.0用のパラメーターグループのパラメータを変更する

#### 変更手順
- 上記の手順で変更まで押したら、パラメーターの一覧が表示される
- 上の検索窓に変更したいパラメーター名を入力
    - 先ほど比較で「init_connec」が表じされていたためこちらで検索
    - 比較に従い「init_connec」の値を「CALL shared.store_time_zone」に変更
- save changesをクリック
- 「正常に変更されました」と表示されれば変更完了
【xarray】nan（欠損値）を指定した値に置換する (fillna)

この記事では、以下のライブラリを用いる。
```Python
import xarray as xr
import numpy as np
```

# DataArray.fillna()
`DataArray`のメソッド`fillna()`を使うと、`nan`（欠損値）を別の値に置換することができる。

次の`DataArray`を例として説明する。
```Python
array = xr.DataArray([1, np.nan, 3, np.nan, 5], dims='x')
array
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552468/e17d586b-3e17-b54d-224a-1d19d34dbf82.png)

## 使い方①
`fillna()`の引数に置換後の値を指定する。
```Python
array.fillna(0)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552468/fc80f2e9-7220-885a-8048-74e99fb5f358.png)

## 使い方②
引数に`ndarray`や`DataArray`を指定すると、対応する位置の値で置換される。
```Python
array.fillna(np.array([11, 22, 33, 44, 55]))
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552468/7bd21efb-7104-a592-9d08-ded38717f4a5.png)

# 公式ドキュメント

https://docs.xarray.dev/en/latest/generated/xarray.DataArray.fillna.html
Android端末の操作性

# Android端末購入

iOSアプリを作るぞと言いつつAndroidかよという話ですが、
事情があるんです。

一つは学習動画アプリのSchoo。
動画をダウンロードして、通勤中に視聴できるのはとても良いのですが、
バックグラウンド再生をすると5分程度で必ず停止してしまうのです。
アプリの再インストールや、iOSの設定でバックグラウンド更新のオンオフももちろん
確認しましたが解決しませんでした。
そのため、iPhoneでの再生は諦めて、Androidを購入することにしました。

二つ目としては、AndroidアプリはiOSアプリとどれだけ違いがあるのか、
同じベンダーが出しているアプリでも操作感に違いはあるのか？などの勉強のためです。
将来的にはAndroidアプリも作りたいですしね。

ということで、メルカリでモトローラのmoto g53yを購入しました。

### 第一印象
Androidは家電屋の展示品で触ったことはありますが、
iPhoneに比べるとスクロールがいまいちというのがかつての印象でした。
スペックは悪くないし、スクロールが始まった後はヌルヌル動くのに
最初のスクロールし始めのところにコンマ1秒ほどの引っかかりがあるのが気になってたんです。
しかし、今回購入したg53yはその引っ掛かりもなくなっていました。
サブ機として買ったのでスペック的にはエントリーモデルですが、全く問題ない動作です。

### ジェスチャーナビゲーション
g53yはAndroid13が入っているので、ジェスチャーナビゲーションがデフォルトです。
今までのAndroidといえば、画面下部に△○□ボタンが並んでおり、Androidの象徴とも言えるボタンでしたが、
最近のAndroidはiPhoneのようなジェスチャー操作になっているんですね。
これはiPhoneに慣れ親しんだ自分には違和感なく溶け込めました。
iPhoneからの移行をしやすくすることでユーザーを取り込もうとするGoogleの戦略が垣間見えます。
しかし、このジェスチャーに思わぬ落とし穴が。

iPhoneでは左端から右へスワイプで「戻る」、右端から左でスワイプで「進む」が共通の操作ですが、
Androidのジェスチャーはどちらも「戻る」になるのです。
ブラウザでWebページを見ているときに、進む戻る操作はよく行いますが
ジェスチャー操作で「進む」が出来ません。

::::note info
かつて、ブラウザは戻るボタンのみ表示して、進むボタンを無くすという進化を遂げた時期がありました。
UIを簡素化するにあたり、「戻る操作は必要だが、進むときはまたリンクをクリックすればいいじゃん」
という思想によるものだと思います。
Androidのこの戻るオンリースワイプは当時の思想を思わせるものがあります。
::::

設定で簡単に変えられるだろうと思って調べますが、見当たりません。
右スワイプのジェスチャーを無効にすることもできない様子。

ただし、ジェスチャーナビゲーション自体を昔の3ボタンナビゲーションに変更することは可能です。
3ボタンナビゲーションに変更すると、Google Chromeの進む戻るのスワイプが有効になりました。
ブラウザの操作を取るか、OS全体の操作を取るか、二者択一です。
非常に悩ましい…。

AndroidはiPhoneに比べて自由度が高い、何でもカスタマイズ出来るというのが
メリットの一つだと思っていましたが、意外と融通が効かないものです。
環境差分というものについて

# これはなんですか
システムが動作する環境について、その要素分解と解説を試みるちょっとした哲学。
若干インフラ屋さん的な視点です。

# 「環境」とはなにか
ITにおいては、システムが動作するためのブツ（後述）の集合で、運用可能な状態ものと規定します。

よくあるパターンとして、下記があります。
一部方言として「環境面」といった言い方をするところもあります、出身がバレますね！

* 本番環境(prod, production)
* ステージ環境(stg, stage)
* 開発環境(dev, development)
* 検証またはテスト環境(uat, test)
* ローカル環境(local)

# 環境を分解してみる
では、環境を分解して構成する要素を下記に書き出してみます。

1. 名前
1. アプリケーション
1. コンフィグレーション
1. インフラストラクチャ
1. システム外にあるなにか

## 名前
名前は大事ですね。

環境(面)の名前なのでprod, stg, dev, test, uatとかいう味気ない名前ではなく、本番以外はneko, inu, usagiとか銀河系の名前とか、ジャイアン◯の歴代４番バッターとかスタートレックの艦船とかエヴァンゲリオンの使徒シリーズとかでもいいと思います。

その呼称と環境の役割が組織の中で一致していることが重要です。

## アプリケーション
特定の言語で作られたサーバまたはサーバレスのリソース空間で実行可能なプログラムのことで、ソースコードの版管理をする必要があります。

環境ごとにどのバージョンのビルドが投入されているのかを管理する必要があり、それらは最近だと gitのcommit単位であるrevisionになります。
revisionだとハッシュ値で読みづらいし管理もしづらいので、ブランチとかタグとかビルド番号などのrevision番号に対するエイリアスが投入されているアプリケーションの版を示すことになります。

## コンフィグレーション
使用されているアプリケーションの版はが異なる環境で同一でも、通信先や使うサービスのURLや名前が違ったりする環境差分を吸収するのがコンフィグレーションです。
これはアプリとは別で管理されるもので、アプリケーションには設定ファイルだったり環境変数だったりで渡されます。
クレデンシャルなども管理するため、各クラウドにそれ用のサービスが用意されていたりします。

私が見た例だとAWS Secret ManagerにJSONでコンテナに与える設定をぶちこんでおいて、アプリの起動時にキーのARNだけ渡してそこからすべてのconfigを引っ張り出すという、秘密主義極まったなーというのが面白かったです。
SecretManager を見れば全て書いてあるし、見れるIAMの制御も楽、なるほど。

## インフラストラクチャ
アプリケーションを受け入れる、またはアプリケーションから使われる使われることを前提として構築してあるもの。
でも最近はサーバレスという実態が微妙なものや、デプロイのたびにインフラを作り直すものもあるため、どこからどこまでをインフラといっていいか微妙だし、アプリケーションチームとインフラチームのどちらで管理するかで悩むところもあります。
わかんなかったわかる人やできる人が管理方針を示して管理すればいいと思います。

インフラの実態としてはネットワーク、サーバ、ストレージやその他クラウドで提供されるサービスなどです。
これも環境ごとに作っておきますが、最近だとIaCで管理して、インフラに対する構成や設定だったりを簡単に変えられる＆管理できるのが流行っています。（主流かどうかは知らないけどインフラを手で管理するもうやめたほうがいいんちゃいますかね・・）

「箱」とか言ったりもします。

## システム外にあるなにか
システムの外に存在するSaaSなど。

たとえば決済代行業者さんのAPIなどは、本番用とテスト用が提供されることが多いため、環境ごとにそれらを切り替えて使う。

# おわりに
環境（面）の説明のためにこれを執筆しました。
EclipseからGitへ接続しようとして「レポジトリ名: git-receive-pack not permitted on」のエラーが出た時の解決案の一つ


# 結論：SSHを利用した方法で登録できた。
「`作成したローカルレポジトリ名.git: git-receive-pack not permitted on`」
のエラーに対して、さまざまな方法を試みたが、アクセストークン→SSHの利用に切り替えることで、GitHubへの接続ができた。

https://qiita.com/ikumi1025193/questions/59ec1894f747af722df0

## 試行した方法

**Gitの基礎的な登録方法**

https://yuta-iwase.github.io/doc/pdf/github_tutorial.pdf

**macOs使用時の認証エラーへの対処**

https://byunsangho.hatenablog.com/entry/20130524/1369370791

**登録手順解説動画**

https://www.youtube.com/watch?v=B2N1AKIQfnY&t=359s

## 環境
*macOS Ventura Ver.13.5.1
*Eclipse　IDE Ver.4.28
＊Eclipse2023 Pleiades All in One 

### 手順①：ローカルレポジトリにコミットする
上記記載の基礎的な登録URLを参照して、Eclipseへ登録したいプロジェクトをコミットする。

### 手順②：EclipseにSSHを生成する
#### ❶SSH２のRSA鍵の生成
Eclipseの設定から、下記のSSH２という位置でRSA鍵を作る。
![SSHキー生成画面 11.05.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3338426/6d68764f-e6ba-b9ea-b2df-36168072387f.png)

#### ❷「.SSH」に生成した鍵を保存。
![鍵の保存確認画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3338426/56b43477-8216-717e-29ba-23bbf3088f45.png)
`*パスコード？か何かの設定を求められるが不要。`
#### ❸RSA鍵を確認＋コピーする
❶と同じ画面にある「既存の鍵をロード」を選択すると、おそらく保存したRSA鍵のフォルダまで移動できると思う。

:::note warn
＊<font color="red">この際開くファイルは「id_rsa.pub」の方です。</font>
「id_rsa」は鍵生成時の秘密キーのため、公開キーのファイルをコピーする必要がある。
:::
### 手順③：Gitに生成したSSHの公開キーを登録する。
![SSH鍵の登録（Git） 11.07.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3338426/33b7f557-89d7-5ab5-2e2a-5d6721c2f325.png)
#### ❶Keyの欄に「id_rsa.pub」の中身を全て貼り付ける。
#### ❷Titleは適当で問題ない。そのまま「Add SSH key」で登録。

### 手順④：EclipseからSSHで接続する。
基本的には下記URLの手順に沿っていけば問題ない。

:::note warn
ユーザーやパスワードは入力不要である。
SSHの選択とレポジトリのSSH用のURLを入力して「次へ」に進む。
設定できていれば、自動的に使用するSSH鍵が表示される。
:::

＊下記URLか手順ごとの画面を確認できる。

https://itsakura.com/eclipse-github-clone-push#s2
#### 所感
どうしてアクセストークンを利用してのGitへの接続ができなかったのかは不明である。
HttpsではなくSSH鍵での接続によるデメリットやメリットなどはさまざまであるが

https://zenn.dev/nameless_sn/articles/the_differences_between_https_and_ssh

上記記事でおおまかに解説してくれているので参考にしてもらえたらと思う。
個人的な使用の範囲であれば、SSH鍵が自身のハードに保存されているので問題ないが、ビジネスの場面では不都合がある可能性がある。



:::note 
こちらの質問の回答群にもある「URLを登録してパスまでは自動で入力されるがアクセストークンが自動入力されない」という状況が投稿主にもみられた。

そのため、アクセストークンが正常に使用できない状況にあると推測できるが、原因は投稿主では特定できなかった。

もし、アクセストークンで登録する必要がなければ今回の方法を試してほしい。

＊今回の事例はVsCodeを利用したLaravelのGitへの接続時にも同様にみられたため、おそらくPCの設定に問題がある可能性が高い。
:::

<font color="red">＊より良い解決法があればぜひコメントしていただければと思います。</font>
【Swift】フラットなJSONをネストしたモデルでデコードする【Decodable】

こんにちは。
withでiOS開発を行っている @zrn-ns です。

APIから返されたモデルをSwiftの `Decodable` 適合のモデルでデコードする処理を書いているとき、書き方に少し悩んだので、その内容を簡単にまとめておきます。

# 検証環境

- Xcode 14.3.1
- Swift 5.8.1

# フラットなJSONをネストしたモデルでデコードするには

今回実装方法に少し悩んだのは、プロパティがフラットに並んだJSONを、構造化されたSwiftのモデルにマッピングする処理です。

文章だけだとわかりにくいので、具体例を示します。

### 【前提】普通のJSONのデコード処理

以下のようなユーザ情報の一覧情報のJSON文字列を、モデルにマッピングすることを考えます。

```swift
let usersJsonData1 = """
[
    {
        "id": 1,
        "name": "Mario",
        "age": 26,
    },
    {
        "id": 2,
        "name": "Bowser",
        "age": 34,
    }
]
""".data(using: .utf8)!
```

これは以下のような `Decodable` 適合のモデル（ `SimpleUserResponse` ）を書けばデコード可能です。

```swift
struct SimpleUserResponse: Decodable {
    let id: Int
    let name: String
    let age: Int
}

let simpleUsersResponse = try JSONDecoder().decode([SimpleUserResponse].self, from: jsonData)
```

### 【本題】フラットなJSONをネストしたモデルでデコードする

ユーザ情報を返すAPIが↑のエンドポイントだけならいいですが、エンドポイントによってユーザのモデルの一部が変化する場合、どうしたらよいでしょうか。

例えば、一部のAPIでは `introduction` や `is_favorite` のような追加の属性が返ってくる場合などです。

```swift
let usersJsonData2 = """
[
    {
        "id": 1,
        "name": "Mario",
        "age": 26,
        "introduction": "It's me!",
        "is_favorite": true,
    },
    {
        "id": 2,
        "name": "Bowser",
        "age": 34,
        "introduction": "Gwah ha ha ha!",
        "is_favorite": false,
    }
]
""".data(using: .utf8)!
```

この場合 `introduction` と `is_favorite` 以外のパラメータは、最初に実装した `SimpleUserResponse` と共通なので、**Responseモデルは共通化したい**ですよね。

この場合、以下のように追加パラメータを切り出したモデル（`DetailAttrResponse`）を別で用意します。

```swift
/// ユーザの詳細情報をまとめたモデル
struct DetailAttrResponse: Decodable {
    let introduction: String
    let is_favorite: Bool
}
```

この `DetailAttrResponse` と、先程定義した `SimpleUserResponse` を組み合わせて、新しい `Decodable` 適合モデルを作ります。

```swift
struct DetailUserResponse: Decodable {
    let simpleUser: SimpleUserResponse
    let userDetail: DetailAttrResponse

    init(from decoder: Decoder) throws {
        self.simpleUser = try SimpleUserResponse(from: decoder)
        self.userDetail = try DetailAttrResponse(from: decoder)
    }
}

let detailUsersResponse = try JSONDecoder().decode([DetailUserResponse].self, from: usersJsonData2)
```

`init(from:)` の部分がミソで、 `SimpleUserResponse` と `DetailAttrResponse` それぞれの `init(from:)` を呼び出すことで、フラットであったユーザ情報を、複数のモデルそれぞれに分離してデコードする事ができます。

### どういう場面で役に立つのか

プロジェクトによって、サーバの負荷軽減や情報の秘匿のためにエンドポイントによって返却する属性を変化させたいことがあると思いますが、そのような場合に極めてシンプルな形で処理を共通化させることができます。

別解として `protocol` を使った実装も可能ですが、こちらは記述が増えて保守工数が増えてしまうので、（適材適所ではありますが）あまりオススメしません。

# 最後に

Decodableを使ってなるべくシンプルに、CodingKeys等使わずに実装共通化するにはどうしたら良いかを考えた結果、今回の記事を書くに至りました。

今回の記事とは逆の話で、「ネストしたJSONをフラットな構造体にマッピングする」方法については、 @aokiplayer  さんが記事にまとめてらっしゃるので、そちらをご参照ください。

https://qiita.com/aokiplayer/items/9463aaa5be38f035d30e

今回の記事のコードは playground としてこちらのリポジトリにアップしてありますので、動作確認したい方はどうぞ。

https://github.com/zrn-ns/decode_flat_json_as_nested_model_sample

# PR

withではエンジニアの採用を行っています。
興味がありましたら、ぜひお問い合わせください！

https://enito.co.jp/careers/
ScalikeJDBCでバルクインサート＆バルクアップデート

SQLでたくさんのデータをインサートしたりアップデートしたりすることを探していたら、意外とニッチな要求らしく、ググるにしても難しく、かつそれをScalikeJDBCでやるにはどうしたらいいんだろう？と躓いたので、メモとして残しておきます。

# バルクインサート、バルクアップデートとは？

手でSQL書くには多すぎる、例えば20件を超えるようなデータを一気にインサートしたりアップデートしたりすることを指します。後のScalikeJDBCでSQL Interpolationで説明するので、実際のSQL例を提示して説明してみます。

## バルクインサート

SQLのインサートの構文はもともとバルクインサートできるようになっています。

```sql
insert into hoge(id, fuga, piyo)
  values (1, 'fuga1', 'piyo1'),
         (2, 'fuga2', 'piyo2'),
         (3, 'fuga3', 'piyo3'),
         (4, 'fuga4', 'piyo4'),
         ...省略
         (20, 'fuga20', 'piyo20')
```

## バルクアップデート

バルクアップデートはちょっと工夫が必要になります。

```sql
update hoge as h
  set fuga = updated.fuga
      piyo = updated.piyo
  from (values
      (1, 'FUGA1', 'PIYO1'),
      (2, 'FUGA2', 'PIYO2'),
      ...省略
      (20, 'FUGA20', 'PIYO20')
    ) as updated(id, fuga, piyo)
  where h.id = updated.id
```

fromに続けてアップデートするデータをvaluesで指定する。また、setに指定するフィールド名は`h.fuga = updated.fuga`とかするとすぐ怒られるので注意。

https://qiita.com/yuuuuukou/items/d7723f45e83deb164d68#%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B32-%E5%90%84%E5%80%A4%E3%82%92%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%A8%E3%81%97%E3%81%A6%E6%B8%A1%E3%81%99

https://qiita.com/kt215prg/items/55de78e057c99edcecab

# ScalikeJDBCを使う

https://github.com/scalikejdbc/scalikejdbc-cookbook/blob/master/ja/00_intro.md

ScalikeJDBCではデータをsqlsで作って、それをsqls.csvで挿入するのが肝です。上記クックブックでもSQLInterpolationが推奨されているので、例はSQLInterpolationを利用します。

## バルクインサート

```scala
val values: Seq[Hoge] = ... // インサートするデータ
val sqlsValues = values.map { s =>
  sqls"""
    |(
    |  ${s.fuga},
    |  ${s.piyo}
    |)""".stripMargin
}

// bulk insert
sql"""
  insert into hoge(fuga, piyo)
    values ${sqls.csv(sqlsValues: _*)}
  """.update().apply()
```

## バルクアップデート

```scala
val values: Seq[Hoge] = ... // アップデートするデータ
val sqlsValues = values.map { s =>
  sqls"""
    |(
    |  ${s.id},
    |  ${s.fuga},
    |  ${s.piyo}
    |)""".stripMargin
}

// bulk update
sql"""
  update hoge as h set fuga = updated.fuga, piyo = updated.piyo
    from (values ${sqls.csv(sqlsValues: _*)}) as updated(id, fuga, piyo)
    where h.id = updated.id
  """.update().apply()
```

# SQLInterpolationについてのTips

ScalikeJDBCのSQLInterpolationで`${...}`は常に`?`に置換されます。そのため、それを見越したコードを書く必要があります。

## 値の生成が複雑な場合

例えば複数の値を使う場合は一時変数で作っておきます。

```scala
val sqlsValues = values.map { s =>
  val fuga = s"fuga-${s.fuga}"
  sqls"""
    |(
    |  ${fuga},
    |  ${s.piyo}
    |)""".stripMargin
}
```

## timestamp型を設定する場合

java.time.LocalDateTimeをtimestamp型に設定する場合、postgresql/h2互換の設定方法は`::timestamp`サフィックスを追加します。

```
val sqlsValues = values.map { s =>
  sqls"""
    |(
    |  ${s.fuga},
    |  ${s.piyo},
    |  ${s.updated_at}::timestamp
    |)""".stripMargin
```
【UiPath】「Windows - レガシ」から「Windows」プロジェクトへのマイグレーションについて【アーカイブ】

本内容につき、弊社UiPath Forumにてナレッジベースを公開しましたので従来のQiita記事はアーカイブいたします。今後の記事更新は以下のナレッジベース上で行わせて頂きます。

参考：
「Windows - レガシ」から「Windows」プロジェクトへのマイグレーションについて
https://forum.uipath.com/t/windows-windows/2772862
【ChatGPT無】にキャッチコピーが薬機法に抵触するか判定してもらいます。


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

　今回は、キャッチコピーが薬機法に抵触するかをChatGPTさんに判定してもらいます。

:::note info
本記事は、ChatGPT（無料版）で
行なっております。GPT4での確認
はできておりません。あしからず。
:::

　薬機法とは？
　　という人も多いでしょう。

　ウィキペディアによると
　　“医薬品、医療機器等の品質、
　　　有効性及び安全性の確保等に
　　　　関する法律”
　　　　　だとか。

　薬機法では、
　・医薬品
　・医薬部外品
　・化粧品
　・医療機器
　・再生医療等製品
　の製造・販売などに関する
　　規制が定められているそうです。

　これに違反すると、
　　良くて、行政指導、
　　　悪くて、逮捕だとか。
　　　　あとは罰金か刑務所行きか。

　だから、
　　これらに関係する企業は、
　　　例え、マスコミでも
　　　　対象になるみたい。

　「これであなたも天才に」
　　なんて、キャッチコピーは、
　　　ダメってことですw

　そこで、
　　キャッチコピーを
　　　ChatGPTさんに
　　　　判定してもらおう、と
　　　　　考えたわけです。

　まずは、やり取りから。
***
***ChatGPT***
了解しました。提供された文言を確認し、薬機法に違反するかどうかをチェックします。文言を入力していただければ、各チェック項目に対して評価と必要であれば改善案を提供します。文言をお知らせください。

***User***
保湿成分で、輝くお肌に

***ChatGPT***
提供された文言を薬機法に基づいてチェックします：

1. 治療効果を保証する文言: 不合格です
   - 「輝くお肌に」という表現は美容効果を示唆しており、治療効果を保証する文言に該当します。

改善案: 文言をより一般的な表現に変更するか、効果に関する具体的な証拠を提供する必要があります。例えば、「保湿成分を含むことで、肌の水分量を補給し、肌の調子を整えることができます」といった表現が適切かもしれません。

***User***
使い終わるころには、驚きの白さに

***ChatGPT***
提供された文言を薬機法に基づいてチェックします：

1. 治療効果を保証する文言: 不合格です
   - 「驚きの白さに」という表現は美白効果を示唆しており、治療効果を保証する文言に該当します。

改善案: 文言をより一般的な表現に変更するか、効果に関する具体的な証拠を提供する必要があります。美白効果については客観的なデータや詳細な説明を付けることが重要です。例えば、「使用後、肌のトーンが明るくなることがあります」といった表現が適切かもしれません。
***
　ここまで。

　まぁ、改善案は、
　　いただけませんけどねw
***
　どうやって、
　　Promptを
　　　ここまで育てたのか。

　1.薬機法を知っているか？

　2.薬機法とはなんなのか？

　3.キャッチコピーが
　　　薬機法に抵触するかを
　　　　判定するチェック項目を
　　　　　洗い出す。

　4.目的とチェック項目を書く。

　5.出力をどうするかを書く。

　基本は、こんな感じですね。

　チェック項目が出来上がったら、
　　あとは簡単でした。

```Text:コピー薬機法合否判定
# 目的
提供された文言が薬機法に違反するかどうかを確認してください。

# チェック項目
以下の点についてチェックしてください：
1. 治療効果を保証する文言
2. 疾病の予防効果を示唆する文言
3. 医療的な診断を行うことを促す文言
4. 医薬品や医療機器と誤解させる文言
5. 偽りや誤解を招く文言
6. 安全性に関する誤った情報を提供する文言
7. 健康への即時的な効果を保証する文言

# 出力
・文言がチェック項目に該当しない場合、「合格です」と答えてください。
・文言がチェック項目のいずれかに該当する場合、「不合格です」と答えて、その理由を出力してください。
・文言を改善すべきならば、改善案を提示してください。
```
　以上。
***
　本日（2023/09/15）、
　　ふと薬事法と薬機法の違いに
　　　クエスチョンが付いたので、
　　　　ググってみました。

[薬機法とは？
薬事法との違い・規制される医薬品等の種類・
主なルール・違反時の罰則など
を分かりやすく解説！](https://keiyaku-watch.jp/media/hourei/yakkihou/#:~:text=%E8%96%AC%E6%A9%9F%E6%B3%95%E3%81%AF%E3%80%81%E4%BB%A5%E5%89%8D,%E3%81%A8%E5%91%BC%E3%82%93%E3%81%A7%E3%81%84%E3%81%BE%E3%81%99%E3%80%82)
　　から、引用します。

>薬機法は、以前は「薬事法」という名称の法律でした。 しかし、2014年に施行された「薬事法等の一部を改正する法律」により、法令名が薬事法から「医薬品、医療機器等の品質、有効性及び安全性の確保等に関する法律」へ変更されました。 この現行の法令名を略して「薬機法」と呼んでいます。

　（2023/02/24更新）

　つまり、
　　薬事法→薬機法に
　　　なったということの
　　　　ようですね。

　勉強になります。

　以上。
***
　さらに追加。

[【ChatGPT無】に薬機法専門のコピーライターになってもらう。](https://qiita.com/kabumira/items/940f5901db0bffb7363a)

　という記事を書きました。
　　合わせて、ご覧ください。

　以上。
【Windows】コマンドプロンプト 基本コマンド一覧

## 経緯

最近Windows での作業が増えたのですが、CLIでの操作時にLinuxコマンドと混ざることがあり作業に時間がかかってしまいました、復習も兼ねて備忘録として記事にします。

## 基本コマンド一覧

### cd - ディレクトリの移動

使用法: cd ディレクトリのパス

```bash
cd C:\\Users\\YourUsername\\Documents
```

### dir - ディレクトリ内のファイルとフォルダの一覧表示

使用法: dir

```bash
dir
```

### mkdir - ディレクトリの作成

使用法: mkdir 新しいディレクトリ名

```bash
mkdir NewFolder
```

### copy - ファイルのコピー

使用法: copy 元のファイルのパス コピー先のパス

```bash
copy C:\\Path\\to\\file.txt D:\\Backup\\file.txt
```

### del - ファイルの削除

使用法: del ファイルのパス

```bash
del C:\\Path\\to\\file.txt
```

### rmdir - ディレクトリの削除

使用法: rmdir /s ディレクトリのパス

```bash
rmdir /s C:\\Path\\to\\Directory
```

### ren - ファイル名またはディレクトリ名の変更

使用法: ren 元の名前 新しい名前

```bash
ren oldfile.txt newfile.txt
```

### type - ファイルの内容表示

使用法: type ファイルのパス

```bash
type C:\\Path\\to\\file.txt
```

### doskey /h - コマンド履歴の表示

使用法: doskey /h

```bash
doskey /h
```

### cls - 画面をクリア

```bash
cls
```

### exit - コマンドプロンプトを終了

```bash
exit
```

## まとめ

自分は主にLinuxでのコマンド操作をしていた為、Windows のコマンドプロンプトで作業をする際よく「is not recognized as」を目にしていました（笑）
毎回作業する際に検索するのは大変なので備忘録にできてよかったです。

以上！
プログラミングを本格的に勉強し始めて約半年でKC3で登壇した大学2年生の話

### プログラミング初心者がKC3というイベントで初登壇した話
2023年の2月に始めて関西ビギナーズハッカソンに参加し、悔しさを噛み締めてプログラミングの勉強を3月から始めました。ハッカソンの話や、私がプログラミングの勉強を始めて2、3ヶ月でインターンに参加させていただいた話などはまた後日投稿させていただくこととして、先日開催された [__KC3__](https://kc3.me/news/1466/) に参加し、初めての登壇機会をいただけたことに関してお話をさせていただきたいと思います。

まず簡単な自己紹介からさせていただきます。
関西学院大学工学部2回生で情報工学課程の __ちゃんくろ__ といいます。
関西のIT系学生団体 Tech.Uniで渉外と企画を担当していて、今は大阪のとある出版会社でインターンをさせていただいています。


#### 実際にKC3で登壇するまで 
***


さて、本題に入ろうと思うのですがKC3とは関西情報系学生交流団体のことで、関西の学生エンジニアが交流し、技術や情報リテラシーを高め合えるような環境を作ろう！みたいな場のことです。行われるイベントに参加される方も非常に多く、100名以上の方が参加されていると聞き驚きました。

そんなこんなで実際に私が所属しているサークルにも登壇に関してのお話をいただき私がさせていただくことになったのですが、いざ蓋を開けてみるとまず __話す内容が少ない。__
それもそのはずで今年から始めたペーペーの初心者が技術のことを熱く語れるかと言われるとそれはキツく、しかも**これから勉強しよう！** と思っている人に、**実務に入ってみたコードの中で感動したもの** なんて絶対に求められていないでしょ！

というわけで、考えに考えたテーマとしては **よく聞くIT関連単語の概要とその内容** といういかにも面白く無さそうなテーマ。
これにはあとで他の登壇者さんのテーマを見て、やってしまった。(泣) と思いました。

#### 本番登壇させていただいて
***
話した内容としては __超基本的__ あとは私が勉強していく上で詰まった点やイメージについて、そして*github*の使い方をハンズオンで

まずは、__プログラミング__ って何？について答えられる人って意外と少ない。
というか解釈の話で
「0か1しかわからないパソコンにさまざまなことを伝える。」という教科書的な答えは少しわかりづらくて、個人的なイメージとしては __イメージの言語化__ そう考えて私は勉強していましたよー見たいなことを少し話しました。

他にも勉強の仕方で、0から始めるのって結構難しい。
まずは環境構築が鬼門。その鬼門を乗り越えた先にコーディングが待ち受けています。まず初心者はエラーが出たらそのエラーを読んでわからない単語をその単語だけ翻訳して考えちゃう。

でも実際はそのエラーをgoogle先生に __コピー&ペースト__ でぶちこんで同じエラーで苦しんでいる先人の屍を越えていくことがほとんど。

そんな中でおすすめの勉強法(というか、多分ベーシックな勉強法)は

##### 本をパクる
or
##### QiitaかZennをパクる

多分初心者の方は本を使いがち。でも本の場合はバージョンの違いがあることがほとんどで、執筆、値段設定などのいざこざ、印刷、それが終わって出版ってなると結構時間が経っている。なので私はネットのものをパクっていました。執筆からリリースまでの期間が早いWebはこういう点ですごく良い！
でも正解不正解を見極めるために、多くの記事字を読むことは意識する必要がある！

みたいな話をしました。

#### githubのハンズオン

私がおそらく一番ド初心者の頃に詰まったのは __github__ なので少しでも簡単に説明したい！
そう思ってハンズオンを始めたのですがそれがめちゃめちゃ難しかった。

まず私はmacを使っているのですが(ps. 36回払いで少し後悔)それにはgitが標準搭載されているのに対してwindowsはされていない！それが頭から離れていた私はgitのダウンロードしていない方達の前で進めようとしていました。
次に根本的な概念の説明が0からだと非常に難しい。
特にそう感じたのは、ブランチでのいざこざをする際にそのブランチが __リモート__ か __ローカル__ か。これがマジで説明しても、みなさん明々後日の方向を見ている。私の説明の仕方にも問題があるとは思うのですがそれを差し置いても、 __0からの__ 説明が本当に難しい。と、このように四苦八苦しながらも時間内にはやり切れたのでホッとしました。
githubに関してはまた気が向けば記事を書こうかな、と思います。


#### 個人的な学び
***
個人的に今回のKC3はとても面白かったです。プログラミングはイメージの言語化、のとおりgithubや自分の考え方を自分とは今まで何の関係もなかった方に言語化して簡単に面白おかしく伝えることは非常に難しく、登壇とプログラミングには通づる点があるように感じました。
私としては運良く、多くの経験をさせていただいてはいますがそれに相応しい技術力が不足していると痛感しています。そのため今後は技術を磨いていきたいと思います。

こんな長々とした記事を読んでいただき、ありがとうございました！
【CSS】指定行の文末を三点リーダーにして、それ以降非表示にするCSS

指定行の文末を三点リーダーにして、それ以降非表示にするCSSの紹介です！
ブログ記事一覧などで重宝します！

~~~css:style.css
.blog__title{
	display: -webkit-box;
	-webkit-line-clamp: 1; //表示したい行数を指定
	-webkit-box-orient: vertical;
	overflow: hidden;
	margin-bottom: 0; //必ずmarginにする
}
~~~

https://youtu.be/NDPpfdrniuk
Javaの文字列置換処理まとめ

よく使用するJavaでの文字列置換の方法をまとめます。

# replace()
文字列⇒文字列の置換。

```
String str = "今日の天気は晴れです。";
str.replace("晴れ", "雨");
System.out.println(str.replace("晴れ", "雨")); // 今日の天気は雨です。
```

# replaceAll()
正規表現⇒文字列の置換。

```
String str = "今日の降水確率は30%です。";
String str2 = str.replaceAll("\\d{1,2}", "80");
System.out.println(str2); // 今日の降水確率は80%です。
```

# String.format()
書式文字列を任意の値で置換することができます。
文字列を挿入する時は、「%s」を使用します。

```
String str = String.format("担当者は%sさん", "鈴木");
// 担当者は鈴木さん
```

複数の文字列を挿入する場合は、書式文字列の数分の置換後文字列を引数として追加します。
```
String str = String.format("%sさんは%s出身", "鈴木", "静岡県");
// 鈴木さんは静岡県出身
```

文字列以外にも以下のような書式を指定することができます。

**書式文字列**
- %s： 文字列を挿入
- %d： 整数を挿入
- %f： 浮動小数点数を挿入
- %b： 真偽値（true, false）を挿入
- %c：　1バイト文字を挿入


# 参考文献
* [クラス Formatter ドキュメント](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Formatter.html)
* [文字列の一部を別の文字や文字列に置換する](https://www.javadrive.jp/start/string/index16.html)
* [JavaのString.replaceAllと正規表現で文字列置換！](https://camp.trainocate.co.jp/magazine/java-string-replaceall/)
RDSメジャーバージョンアップについて

# メジャーバージョンアップ実施の経緯
- 先日RDS MySQL5.7のEOLが2024年2月29日と発表された。
これに伴い、RDSのマイナーおよびメジャーバージョンアップが必要となった。
今回は今後のことを考え、メジャーバージョンアップを実施することにした。
その手順についてまとめる。

# 作業日前までに行うこと
###  パラメータグループの作成
- RDSのパラメータグループではファミリーがあり、現在使われているパラメータ―グループでは「5.7」となっている。
- こちら更新はできないため、新しく作成する必要がある。
- 詳しい手順は割愛するが、現在のパラメータグループとパラメータ―を比較しながらファミリーが「8.0」のパラメータグループを作成する必要がある。

# 作業当日にバージョン実施前に行うこと
### バンプファイルの取得
- 今回は都合により作成しないが、メジャーバージョンアップで細心の注意が必要なため、可能な限りバックアップは作成する。
### スナップショットの作成
- AWSコンソールにログイン、サービス「RDS」に移動し、左タブ「データベース」に移動
- これからバージョンアップするRDSにチェックを入れ、「アクション」をクリック、「スナップショットの取得」の作成をクリック。
- スナップショット名を入力し、「スナップショットの取得」ボタンを押す。
- 5分ほでスナップショットはできるため、左ペイン「スナップショット」に移動し、ステータスが利用可能になるまで待つ。
※スナップショット名は任意であるが、日付を付けておくことで最新のスナップショット判別がつきやすくなる。
### 事前のテーブル確認
- RDSに接続しテーブル内容の確認を行う。接続方法は環境や案件によって異なるため、ここでは割愛する。
- 接続し、DBの選択まで終えたら以下のコマンドを実行
mysql> show tables;
- こちら実行結果を残しておき、バージョンアップ後の確認に使用する。

# メジャーバージョンアップの実行
- サービスRDS>「変更するDB名」を選択>右上の「変更」をクリック
"以下のように選択後、「続行」をクリック
    - DB エンジンバージョン：8.0.34
    - DB パラメータグループ：上記の手順で作成したファミリーが8.0のパラメータグループを選択
- 「変更のサマリー」で変更内容を確認する。問題がなければ「すぐに適用」を選択し、「DBインスタンスを変更」をクリックする
- 更新の完了を待ち、ステータスが「利用可能」になることを確認
- （参考までに）更新するRDSによって更新時間は大きく変わるが、今回の更新は約13分で完了した

# 更新後確認
- RDSへの接続を行い、正常に接続できるかの確認を行う
- パラメータ―グループが正常に適用されているかの確認を行う
    - sqlコマンドを使用し、パラメーターが正常化の確認を行う。環境によって確認内容は異なるため、今回は割愛
-以下コマンドを実行
mysql> show tables;
- 上記のコマンドで得た結果と事前に取得した結果を比較し、一致していることを確認する。

# 感想
- バージョンアップ自体の時間はさほどかからないが、メジャーバージョンということもあり、事前確認、事後確認、バックアップ等には時間惜しまずかけるべきということを学んだ