OmniAICreator/Qiita-1.07M huggingface dataset:
Pardot Campaigns

[Pardotの質問と回答をまとめに戻る](https://qiita.com/Keiji_otsubo/items/a3ccd1370697dd914723)

------------

+ [キャンペーン階層の利用について](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000HF15xSAD)


+ [流入経路を測定する際にキャンペーンを分けることでチャネル毎に経路を測れると紹介がありました。しかし、1つのフォームでチャネル毎のキャンペーンを紐づける方法がわからず、もしよい手法があればご教授いただければと存じます。](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000ORKg)

:::note
２点目のキャンペーンを分ける手段ですが、流入経路に配置しているフォームにパラメータを付与することで非表示項目に値渡し→条件付き完了アクションで非表示項目の値がXXXの時に「キャンペーンに追加」という流れで達成できないでしょうか？

https://help.salesforce.com/s/articleView?id=000382980&language=es&type=1
:::


# Pardot Connected Campaign


+ [Pardot Connected Campaign](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007F3iIX)
+ [キャンペーンメンバーの状況「Connected」について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007iflhJ)

:::note
キャンペーンが Pardot での見込み客の最初の接触である場合、リードが SF で作成されると、そのキャンペーンに「接続済み」のステータスで同期されます。 

This status can't be removed or renamed.  If you have "Campaign Member Sync enabled, the Lead / Contact record will be added to the Salesforce campaign as a campaign member with status ‘Connected’. " It means, that if the campaign is the first touch in Pardot for prospect, once a Lead is created in SF, it will be synced to that campaign with the status "Connected". 

More reference here: 

https://www.salesforceben.com/campaign-member-sync/
https://trailhead.salesforce.com/es/trailblazer-community/feed/0D54S00000OtpBCSAZ
https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007RJNSJSA5
:::


# 資料

+ [Pardot (Account Engagement) Connected Campaigns: Set Up Steps + Tips](https://www.salesforceben.com/the-drip/pardot-account-engagement-connected-campaigns/)
+ [Connected Salesforce + Pardot Campaigns: How They Rock Our World](https://thespotforpardot.com/2022/09/19/connected-salesforce-pardot-campaigns-how-they-rock-our-world/)
【ポエム】ホワイト企業・組織となる際や就職する際の注意点・弊害

# ホワイト企業・組織とは何か

ホワイト企業・組織の定義は諸説あるが、一般的には次のような職場環境らしい。
・労働時間が短い
・残業がない・少ない（残業代がなくても賃金・給与・賞与が高い）
・休暇が取りやすい
・離職率が低い
・オンとオフが明確にできる
・性善説で監視されない
・年齢層に隔たりがない
・備品購入等の金銭について余裕がある
・達成可能な目標設定・ノルマが課せられる（背伸び目標なんかも問われても少なかったりするし給与・賞与も目標設定の結果如何に問わずあまり変わらない）

# 職場環境をホワイト化させた場合の弊害

https://agora-web.jp/archives/230824010602.html
や
https://denkenden.com/entry/white-kigyou-aruaru

など様々なところで語られ始めたホワイト企業・組織の弊害。
おおむね同じ内容を経験している。
・ハングリー精神がなくなる
・指示待ちの人が増える
・視野が狭くなる
・挑戦しなくなる
・（互いに支えあうことができ属人的な要素が少ないが故）自分が居なくても会社は回ることによる虚無感を感じる

何か問題があっても先送りで和気あいあいとのんびり働ける反面、自己研鑽に励む人は少なくなる。快適な環境の維持が前提となる。

# 物足りなさ

常日頃から学びなおしを行い積極的、主体的、能動的に働きたい人にとってホワイト企業・組織はなかなか物足りないことになるのかなとも感じた。ブラック企業・組織が頑張ってホワイト企業・組織になるとそれはそれで物足りなさと感じなくなる人も間違いなく一定数いるはずだ。問題意識が問われない環境（問題提起を積極的にする必要のない環境）では解決したい、解決すべきと考えるべき要素がいわゆる「ブラック企業・組織」に比べて相対的に少ないのではないかと推察する。自動化を行うにしても目の前の仕事で手一杯で仕事が休めない、入力ミスやシステムトラブルで毎日大変だという環境で自動化・安定化させるのと、人気企業で人はいくらでも集まるし切羽詰まって仕事をするようなことがなく休みも取り放題の環境では自動化のニーズなんてあればいいかもしれないけどそうそうありゃしないということになる。金銭的な余裕もあることから転職してよりよい状況で頑張りたいというインセンティブも起きにくい。それはそれで良いことかもしれないけど結果として次の目標がないというか目標がなくても何とかなる生活になる。

# 結局どちらがいいのかは人次第・・・

必ずしもホワイト企業・組織が万人受けすることもないと感じるようになった今日この頃。ハラスメントやサービス残業で過労死するような環境はいかがなものかと思う一方で極端なホワイト企業・組織はQiitaの投稿者や読者の皆さんは合わない人も多いのではないかと思う。極端なホワイト企業・組織に属するようになるとQiitaすら見る必要性もなくなるだろう。でもそれってどうなんだろう。
【メモ】gitを使う前によくやる設定


　gitを使う前によくやる設定を、git初心者向けにメモ。
　これらをやっておくとミスが発生しにくくなって作業がしやすい。

## 目次

[1.意図しない変更が入らないための設定](#意図しない変更が入らないための設定)
[2.利便性を上げるための設定](#利便性を上げるための設定)
[3.ブランチ名と作業ツリーの状態を常に表示する](#ブランチ名と作業ツリーの状態を常に表示する)

## 意図しない変更が入らないための設定
　今どういう設定かを確認するときは`git config --list`とかで確認

```コマンド
# パーミッションの変更をコミットに反映しない
git config --global core.filemode false

# CRLFとLFの自動変換をオフ
git config --global core.autocrlf false
git config --global user.autocrlf false

# マルチバイト文字に対する自動変換を抑制したり文字化けを抑えたりする
git config --global core.quotepath false
git config --global core.precomposeunicode true

# 大文字小文字を区別させる
git config --global core.ignorecase false
```

## 利便性を上げるための設定

```コマンド
# コマンドライン上の出力のカラー化
git config --global color.ui true

# git graph コマンドを作成し、カラフルなグラフで履歴を見られるようにする
git config --global alias.graph "log --graph --date-order -C -M --pretty=format:\"<%h> %ad [%an] %Cgreen%d%Creset %s\" --all --date=short"
```

## ブランチ名と作業ツリーの状態を常に表示する

　こんな感じになります。
![ブランチ名と作業ツリーの状態を表示](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536297/1c5e5485-a4da-b749-11a1-1b7ab4304569.png)

　以下のgit公式リポジトリにある、`Contributed Software`群の中の一つを導入することで表示させます。

https://github.com/git/git/tree/master/contrib

●導入方法

```コマンド
# 作業アカウントのホームに移動
$ cd ~/

# 必要なファイルをgithubから落とす　（wget が無い場合は curlの-oオプション）
$ wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash --no-check-certificate
$ wget https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh --no-check-certificate

# 隠しファイルにする
$ mv git-completion.bash .git-completion.bash
$ mv git-prompt.sh .git-prompt.sh

# ファイルを読み込むように設定を追加　（vim が無い場合は vi）
$ vim .bashrc

--.bashrcに追記する内容---------------------------

if [ -f ~/.git-completion.bash ]; then
    source ~/.git-completion.bash
fi

if [ -f ~/.git-prompt.sh ]; then
    source ~/.git-prompt.sh
fi

GIT_PS1_SHOWDIRTYSTATE=true
PS1='\[\033[01;37m\][\u@\h\[\033[01;33m\] \w\[\033[01;37m\]] \[\033[01;32m\]$(__git_ps1) \n\[\033[01;34m\]\$\[\033[00m\] '

------------------------------------------------

# ターミナルにbashrcを再読み込みさせる（ターミナルの再起動でも良い）
$ source ~/.bashrc
```
JavaScriptでサウンド再生

# Oscillator
簡単。

```pipo1.html
<!DOCTYPE html>
<html>
<head></head>

<body>
<input type="button" value="play" onclick="play();" />
<script>

"use strict";

let ac;
let gain;

onload = function() {
	ac = new AudioContext();
	gain = ac.createGain();
	gain.gain.value = 0.1;
	gain.connect(ac.destination);
};

function play() {
	const ct = ac.currentTime;
	for (let i = 0; i < 2; i++) {
		const osc = ac.createOscillator();
		osc.type = "square";
		osc.frequency.value = 1000 * (2 - i);
		osc.connect(gain);
		osc.start(ct + i / 4);
		osc.stop(ct + (i + 1) / 4);
	}
}

</script>
</body>
</html>
```

https://jsfiddle.net/6mzx41b8/

# BufferSource
任意の波形を再生できる。

```pipo2.js
"use strict";

let ac;
let gain;

onload = function() {
	ac = new AudioContext();
	gain = ac.createGain();
	gain.gain.value = 0.1;
	gain.connect(ac.destination);
};

function play() {
	const buf = ac.createBuffer(1, 4000, 8000);
	const data = buf.getChannelData(0);
	for (let i = 0; i < 2000; i++) {
		data[i] = (i & 2) ? 1 : -1;
	}
	for (let i = 2000; i < 4000; i++) {
		data[i] = (i & 4) ? 1 : -1;
	}

	const src = ac.createBufferSource();
	src.buffer = buf;
	src.connect(gain);
	src.start();
}
```

https://jsfiddle.net/6odvLa19/

# wavファイル
wavファイルをダウンロードできる。

```pipo3.js
"use strict";

let objUrl;
let view;
let offset;

onload = function() {
	const datalen = 4000;
	const wave = new ArrayBuffer(44 + datalen);
	view = new DataView(wave);
	offset = 0;

	writeFcc("RIFF");
	write(4, 36 + datalen);
	writeFcc("WAVE");
	writeFcc("fmt ");
	write(4, 16);
	write(2, 1);
	write(2, 1);
	write(4, 8000);
	write(4, 8000);
	write(2, 1);
	write(2, 8);
	writeFcc("data");
	write(4, datalen);

	const data = new Uint8Array(wave, offset);
	for (let i = 0; i < 2000; i++) {
		data[i] = (i & 2) ? 0x90 : 0x70;
	}
	for (let i = 2000; i < 4000; i++) {
		data[i] = (i & 4) ? 0x90 : 0x70;
	}

	const blob = new Blob([wave], { type:"audio/wav" });
	objUrl = URL.createObjectURL(blob);
};

function writeFcc(str) {
	for (let i = 0; i < 4; i++) {
		view.setUint8(offset++, str.charCodeAt(i));
	}
}

function write(len, val) {
	if (len == 2) view.setUint16(offset, val, true);
	if (len == 4) view.setUint32(offset, val, true);
	offset += len;
}

function play() {
	const sound = new Audio(objUrl);
	sound.play();
}

function download() {
	const a = document.createElement("a");
	a.download = "pipo.wav";
	a.href = objUrl;
	a.click();
}
```

https://jsfiddle.net/rwk4L2dz/
WSL2 インストール時の wslregisterdistribution failed with error: 0x80004002

# 環境
Windows10　22H2（OSビルド：19045.3324）

# エラー発生
Docker を使う前準備として、`WSL --install` を実行したところ、 Ubuntu を起動しようとしている（推測）タイミングで下記のようなエラーが出ました。
```
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x80004002
Error: 0x80004002 ???????????????????????????????????????????????????
```
# 対処法
[こちら](WSL導入時のエラー(0x80004002)対処)に記載の通り、「[以前のバージョンの WSL の手動インストール手順](https://learn.microsoft.com/ja-jp/windows/wsl/install-manual)」と同じコマンドを流します。

## 手順 1 - Linux 用 Windows サブシステムを有効にする
Microsoft の[手順](https://learn.microsoft.com/ja-jp/windows/wsl/install-manual#step-1---enable-the-windows-subsystem-for-linux)そのままです。
>管理者 ([スタート] メニュー > [PowerShell] > 右クリック > [管理者として実行]) として PowerShell を開き、次のコマンドを入力します。
```PowerShell:PowerShell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```

## 手順 2 - 仮想マシンの機能を有効にする
Microsoft の[手順](https://learn.microsoft.com/ja-jp/windows/wsl/install-manual#step-3---enable-virtual-machine-feature)では「手順３」になっていますが、WSL2 の実行要件の確認を飛ばしているだけです。
>WSL 2 をインストールする前に、"仮想マシン プラットフォーム" オプション機能を有効にする必要があります。 この機能を使用するには、コンピューターに仮想化機能が必要です。
>
>管理者として PowerShell を開き、以下を実行します。
```PowerShell:PowerShell
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
>お使いのマシンを再起動して WSL のインストールを完了し、WSL 2 に更新します。

## 手順 3 - PC の再起動と WSL --install の再実行
ここからはMicrosoft の手順から離れます。
一旦 PC を再起動した後、`WSL --install` を実行します。
そうすれば、今度はおそらくエラーが発生せず、Ubuntu からユーザー名・パスワードの作成を求められる状態になるかと思います。

## おわりに
Windows のバージョン自体は一応最新だと思うんですが、何でエラー吐かれたのか……
ちょうどアップデートの更新が来ていたみたいなので、それと何かしら干渉したんでしょうか。

## 参考
[WSL導入時のエラー(0x80004002)対処](https://qiita.com/Gen0001/items/27afeae6ec8e00afccaa)
2023年8月29日 10時10分 最終閲覧

[以前のバージョンの WSL の手動インストール手順](https://learn.microsoft.com/ja-jp/windows/wsl/install-manual)
2023年8月29日 10時11分 最終閲覧
PandasとPythonの主要な機能について


この記事では、Pythonと特にPandasライブラリでよく使用されるメソッドや関数について解説します。

# 目次
pd.date_range()メソッド
diff()メソッド
resample()メソッド
<a id="pd.date_range"></a>

# 1. pd.date_range()メソッド
pd.date_range()は、特定の頻度で定期的な日時のインデックスを生成します。これは時間系列データの分析や操作に非常に便利なツールです。

```
import pandas as pd

# 2023年1月1日から2023年1月10日までの日付のリストを生成
dates = pd.date_range(start='2023-01-01', end='2023-01-10')
```

頻度を変更するには、freq引数を使用します。

```
dates = pd.date_range(start='2023-01-01', end='2023-01-10', freq='2D')
```

# 2. diff()メソッド
diff()メソッドは、シリーズやデータフレームのデータに対して一次差分（すなわち、連続する要素間の差）を計算します。

```
import pandas as pd

# シリーズの作成
s = pd.Series([1, 3, 6, 10, 15])

# 一次差分の計算
diff = s.diff()

print(diff)
```

# 3. resample()メソッド
resample()メソッドは、時間系列データの再サンプリングを行うための非常に強力なツールです。

```
import pandas as pd
import numpy as np

# 一時間ごとの日時を生成
index = pd.date_range(start='2023-01-01', end='2023-01-10', freq='H')

# 同じ長さのランダムなデータを生成
data = np.random.randn(len(index))

# シリーズを作成
s = pd.Series(data=data, index=index)

# 日次のデータにリサンプリング
resampled = s.resample('D').mean()

print(resampled)
```
これらのメソッドは、データ分析の際に非常に役立ちます。

以上がPandasとPythonのいくつかの主要な機能についての簡単な解説です。これらの機能をうまく活用することで、データ分析がより効率的になります。
ようつべ体験記1

ふだんの業務では Google Workspace や Google Cloud を使って業務改善やデータ収集、可視化といった作業をやってる事が多いのですが、データ分析するにあたっての数字の感覚みたいなものを持っておきたいなと思ったので、自分自身で YouTube をする事にしました。

YouTube Channel への流入から高評価、チャンネル登録といったコンバージョンに至る流れを数字で追っていき、その数字をどう捉え、コンテンツをどう変えて、数字がどう変わるか、みたいな事を通して数字の感覚がつかめたらいいなと思っています。

やったところで出てくる数字が 0 だったら分析もクソも無いじゃないかと、やる前は思っていたのですが、一か月ほどやってみたところ、クソコンテンツを投下してるだけでも YouTube の AI がクソ有能なので 0 にはならないという事がわかりました。

![YS-チャンネルアナリティクス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423506/d617239b-095b-2f00-d616-37138fe00a8e.png)

数字の変わり方も色々あってすごく面白いのですが、ただぼーっと見てるだけだと面白いだけで終わりそうなので Qiita にでも書き留めておく事にしました。

[次回](https://qiita.com/matsukatsu/items/12090dc9aeb7807c50d0)
つよつよGitHubプロフィールの作り方

こんにちは、モロ([@moro_is](https://twitter.com/moro_is))です。

GitHubでつよつよエンジニアのプロフィールなんかを見ていると、一番上に `USERNAME/README.md` という枠が表示され、何やらオシャレなグラフやらアイコンやらが並んでいるのを稀に見かけます。

今の今まで全く知らなかったのですが、ユーザー名と同じパブリックリポジトリを作って、ルートに`README.md`を置いておくとプロフィールページにも表示されるそうです。

https://docs.github.com/ja/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/managing-your-profile-readme

わかります。
プロフィールだけ真似しても本当のつよつよエンジニアにはなれません。
でも形から入ることも大切だと思うんです。モチベーションとかそういうやつです。

作りましょう、つよつよGitHubプロフィールを。

# テキスト部分

もっとも多く見かけたのは、

- 挨拶
- リスト形式でのプロフィールの補足や近況

のみのシンプルなものです。

ちょうど上記URLでもスクリーンショットの載っている[オクトキャット氏のプロフィール](https://github.com/octocato)の感じです。
そもそもプロフィールページに+αで表示されるものなので、名前等の基本情報は書かなくてもサイドバーに表示されているんですね。

補足の内容については、個人的な趣味を掘り下げるものであったり、好きな技術への想い、エンジニア哲学等を綴るものが多く見られました。

主観ですが、絵文字が多いとポップでいい感じです。

## その他の要素

上記以外では、

- 得意な技術スタック
- OSS活動での実績
- 自作プロダクトの紹介
- GitHub Sponsorへのリンクやスポンサーのアイコン
- Connect with me
  - 各SNSのリンクや連絡先メールアドレス

等を掲載しているパターンが多く見られました。

また、ごくごく少数ですが、**一言謎のスラングだけ書かれたもの**もありました。

> asl?

とだけ書かれていて何だろうかと調べたら「**Age? Sex? Location?**」を省略した古いネットスラングだそうです。

日本語でいうところの「きみ可愛いね？ どこ住み？ てかLINEやってる？」みたいなことでしょうか(全然違うかも知れない)。

こういうのもギークっぽくていいですね。

# ウィジェット(カード？)

もっとも目を引くウィジェット(という呼び方が適切かはわかりませんが)ですが、これらの多くもOSSで公開されているようです。

## GitHub Readme Stats 

中でも圧倒的に多かったのがこちらのウィジェット。

https://github.com/anuraghazra/github-readme-stats

READMEにあるように、パラメータでユーザーIDを渡すだけでグラフィカルな画像を出力してくれます。

![](https://github-readme-stats.vercel.app/api?username=moroi)
![](https://github-readme-stats.vercel.app/api/top-langs/?username=moroi)

さらに、パラメータを指定して色を変えたり表示する内容を絞ったり、ダークモードの対応までできるようです。

ただ、見ての通りGitHub上での実績を可視化するものなので、私程度だと**よわよわが強調されてつらいものがありました**。

## Github Profilinator

こちらはもはや全部盛り、READMEジェネレーターみたいなウィジェット（多分個別でも使える）。

https://github.com/rishavanand/github-profilinator

[下記がジェネレーター](https://profilinator.rishav.dev/)で、装いもちょっとモダンです。

https://profilinator.rishav.dev/

## Shields.io

こちらはむしろリポジトリのREADMEでよく見かける気がするのですが、コントリビューションの数やスポンサーの数を表示できるウィジェット。
プロフィールで使用している方も多いようでした。

https://github.com/badges/shields

# さいごに

なお、上記のデータはGitHubで**フォロワーの多いつよつよエンジニア300人ほどのプロフィールをPythonで集計**などはできようはずもなく、残念ながら目視でポチポチ確認しました。

重ねて残念なことに、プロフィールの`README.md`を設定している人はせいぜい2−3割弱程度、**つよつよエンジニアたちのほとんどは設定していない**という見方もできそうです。

**しこたま草を生やす**、それだけがつよつよGitHubプロフィールの作り方と言えるかも知れません。

https://github.com/moroi

頑張ります。
終わり。
最新の展示会の情報取得方法

## 概要
- 技術の最新動向や世の中のトレンドにキャッチアップするために、ビッグサイトや幕張メッセの展示会に行くことは効果的です。
- 展示会の開催情報は、メルマガなどで収集できますが、そこだけに頼っていると見落としてしまうこともあります。
- そこで、能動的に展示会の開催情報を探す方法をまとめました。

## 探し方
- JETRO(日本貿易振興機構、ジェトロ)のHPの、[世界の見本市・展示会情報（J-messe）](https://www.jetro.go.jp/j-messe/)へアクセスする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1834744/e05b6870-e197-7ab5-20f1-f35ac037cade.png)

- 開催地別に探す -> `すべての国一覧を見る`をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1834744/6f3a6642-ec58-e02e-cffa-8b0de514eab5.png)

- `日本`をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1834744/fe43dc6f-ff15-11f8-bd32-1c6632125375.png)

- 【任意の作業】やらなくてもOK
    - 都市で絞り込む -> 任意の都市を選択
    - 関東全体(千葉＆東京＆横浜)というAND検索ができないので、正直ここはあまり使わないと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1834744/f2c076cb-b51b-2326-d3a9-7c81e2f1dcf0.png)

- 直近のものからまとめて閲覧するために、以下の設定に変更する。
    - 並び順 -> `会期順` -> `変更`をクリック
    - 表示件数 -> `100件` -> `変更`をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1834744/cf8ef0ae-cf20-efdc-73f2-e6e703ac11aa.png)

- これで、直近の開催順のものから閲覧できます。
- 展示会名をクリックすると、詳細を確認できます。
    - 例として、`国際物流総合展2023 第3回 INNOVATION EXPO`を確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1834744/0464f542-53a7-ca95-6211-6e55bf497dcd.png)

- このように、展示会に関する詳細情報を確認したり、公式サイトへ行くこともできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1834744/c5d92d0e-3520-c229-db73-fab5d01acc13.png)

- 以上で、最新の展示会の情報取得方法の説明を終わります。
Marketo、Salesforce連携のまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)



+ [Send Marketo Email not working?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A8Lf6SAF)

https://nation.marketo.com/t5/product-discussions/leads-ands-contacts-in-sfdc/td-p/82374

https://nation.marketo.com/t5/product-discussions/how-to-stop-salesforce-from-syncing-contacts-without-email/td-p/330891

https://nation.marketo.com/t5/product-discussions/marketo-salesforce-sync/td-p/301677
【概要編】SSRとCSRについて

## はじめに
実務を進めていく上で、改めてSSRとCSRの違いやデータ・処理の流れを
理解する必要が出てきたため今回は備忘録として図を用いて記事にまとめさせて頂きました。

## CSRって何？
CSRは、「Client-Side Rendering（クライアントサイドレンダリング）」の略で、ウェブアプリケーションの開発手法の一つです。
**ブラウザ上でJavaScriptを実行して、DOMを生成し、マウント後にブラウザ上で表示**します。

図にすると以下の通りになります。

![CSR.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636995/ea2e2574-9291-564d-384a-38fa9fa3f806.png)

上記の図はHTMLやCSSやJSが置いてあるWEBサーバーがあり、それとは別でバックエンドのアプリケーションサーバーがあり、アプリケーションサーバーは必要なデータをデータベースから問い合わせてとってくるようなよくあるアプリケーションの構成となっています。

図の番号を補足していくと、

**1.URLをサーバーに問い合わせする**
**2.必要なHTML/CSS/JSを返却する**
**3.バックエンドサーバーに対して、データをリクエスト**
**4.マッチしたデータをレスポンスとして返却する**
**5.取得したデータを基にレンダリングする**

といった流れになります。


ユーザーから画面が表示されてからデータの`リクエスト→レスポンス→レンダリング(3~5)`といった流れになるので、その間ユーザー側ではローディングアイコン等が表示されるのが良くある実装になります。

## SSRって何？
SSRは、「Server-Side Rendering（サーバーサイドレンダリング）」の略で、ウェブアプリケーションの開発手法の一つです。
サーバー側でHTML・CSS、またレンダリングに必要な情報を取得して、その生成結果のHTML,CSS,JSをクライアント側に返却する形式になります。。

先ほど、同様図解します。

![SSR.drawio (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636995/797d6c63-8c8c-ef6b-1532-006d9d5e7664.png)

**1.URLをサーバーに問い合わせする**
**2.バックエンドサーバーに対して、データをリクエスト**
**3.マッチしたデータをレスポンスとして返却する**
**4.取得したデータを基にHTMLを構築**
**5.HTMLを返却する**

SSR対象のページを表示するには「データの取得」と「HTMLの構築」の2つのステップが必要であり、これらが
サーバー側で必要なので全てが完了されるまでは何も表示されません。

CSRの場合は、**リンクをクリックした瞬間に画面遷移自体は終わっていて**、データの取得ができてない部分はローディングして取得され次第、フロントエンド側でレンダリングするといった**UX**の違いがあります。


## 参考文献
https://qiita.com/souhei-etou/items/4c3320471d23a08510e1

https://zenn.dev/takuyakikuchi/articles/2f7e54bdafce52

https://www.udemy.com/course/react_v18/
plunkerでvue その62

# 概要
plunkerでvueやってみた。
練習問題、やってみた。

# 練習問題
vueファイルからvueファイルを呼び出せ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/045f54a2-dece-586c-0bcc-97c546568777.png)

# サンプルコード

```

<template>
  <div>
    <h2>demo</h2>
    <ul>
      <li v-for="i in items">
        {{i}}
      </li>
    </ul>
    <div id="koko"></div>
    <div id="dynamic-placeholder"></div>
  </div>
</template>

<script>
define(['Vue'], function(Vue) {
  return new Vue({
    template: template,
    data: {
      items: ['ichi', 'ni', 'san', 'shi', 'go', 'roku', 'shichi', 'hachi']
    },
    mounted() {
      require(['vue!tVar'], function(compo) {
        compo.$mount('#koko');
      });
      require(['vue!dynamics'], function(compo) {
				compo.$mount('#dynamic-placeholder');
			})
    },
    methods: {
    }
  })
});
</script>

<style>
body {
  background: grainsboro;
  color: chucknorris;
}
li {
  list-style-type: cjk-ideographic;
}
</style>




```

# 成果物

https://embed.plnkr.co/plunk/RzpjugBDANNuW6RW

以上。
Breadcrumb　パンくずリストの設定

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)


ヘルプを読んでもよく分からないですね。

+ [Experience Cloud ブレッドクラムについて](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007FYR15)
【hosts】macでhostsファイルを書き換える

## やりたいこと
macでhostsファイルを書き換えたい

:::note info
hostsファイルとは？
IPアドレスとホスト名の組み合わせが一覧で記載されているテキストファイルです。
hostsファイルに記述された内容はDNSよりも優先されるので、hostsファイルを書き換えることで、DNSに関係なく公開前のウェブサイトの動作確認が可能になります。
:::

※hostsファイルはPCごとに存在しているので、記述内容が反映されるのはそのPCだけです。



## やり方
今回はターミナルを使います。

### 1.ターミナルを開いたら以下を入力（入力後パスワード入力してください）

```zsh
sudo vi /private/etc/hosts
```

### 2.iを押してエディタをインサートモード(テキストを編集できる状態)にします。

### 3.編集

### 4.インサートモードを終了するため、escキーを押します。

### 5.:wqと入力し、Enterキーを押してvimの内容を保存します。
Grafana で Variables を使う

## 概要

GrafanaのVariablesを使う方法を説明します。
GrafanaのVariablesは、以下の図のようにダッシュボード上でダッシュボードの閲覧者がパラメータを指定できる機能です。
ダッシュボードの閲覧者が、パラメータを指定すると紐づいた値がクエリに反映できます（SQLのWhere句などフィルタに利用できます）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774545/5c5bbb80-0aa6-c3e4-46ed-f11e6ddd68a3.png)

基本的には以下の公式ドキュメントのとおりです。

https://grafana.com/docs/grafana/latest/dashboards/variables/add-template-variables

なお、本記事の正確性や完全性について保証しませんので、ご注意ください。

### Variablesの利用

ダッシュボードの設定から Variablesを選択し「+New variable」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774545/14a0f7c6-cc46-a928-75d8-4de8876ea6b4.png)

#### Variableの追加

Variableには、以下の4つの typeがあります。

- Query : データソースに対してクエリを発行しその結果をユーザは指定できます。
- Label : 入力ボックスでユーザがテキストを自由に指定できます。
- Custom : カンマ区切りリストを手動で定義します。
- Constants : 隠れた定数を指定します。

ここでは一番使いそうな「Query」での使い方を詳しく説明します。

#### Query Variableの使い方

Variable typeは「Query」を指定します。
Name, Label, Descriptionは適当に。

「Show on dashboard」 は概要の図のように、Labelで指定した値(display name)と選択肢の値(display text)を表示したければ「Label and value」を指定しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774545/529e1249-b184-da13-7124-65314eedcae8.png)

#### Query optionsと Regex
Query variableでは、display textとvalueの2つの値のセットのリストを持つことができます。   
display text は選択肢用の表示テキストで、valueはユーザが選択肢を選択したときにクエリに代入する値になります。  
  
Query optionsで、variableに指定したいデータを取得するためのデータソースに対するクエリを記述します。  
Regexでは、クエリの返却結果からvariableで使うデータを分離します。  
重要なポイントとして、クエリの結果は、2つの値（display textとvalue）に相当するデータを1つの文字列として返し、Regexでdisplay textとvalueに分解します。

以下の図のクエリでは、Amazon Athenaにクエリを発行し、あるデータセットのidとtitleをカンマ区切りの文字列(`id || ',' || title`)のデータセットとして返却するように設定しています。
Regexで`/(?<value>.*),(?<text>.*)/`と指定して、返却されたデータからvalueとdisplay text を分離しています。

これにより表示テキスト(title)とvalue(id)のリストを作っています（図の例でvariableを作ると、スプリントのリストが表示され、選択時にそのスプリントのidがパネルなどの実行クエリに代入されます）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774545/1dc86b2f-8f0b-88e7-d203-57c5b46b8a26.png)

その他のオプションは以下のとおりです。
- Sort : text valueの順序指定
- Refresh : ダッシュボードの表示時に１回 or タイムレンジ変更時に１回
- Selection options
  - Multi-value : 有効な場合、複数の値を同時に選択できるようにする
  - Include All options : 有効な場合、「All」選択肢を追加します。「Custom all value」に「All」選択時のvalueを指定します。

### variableで設定された値を使う

variableを追加したダッシュボード上のパネルのクエリで、`${Nameで記述した値}` と記述することでユーザが指定した選択肢のvalue が代入されます。  
例えば上記の図のようにNameが `milestone`の場合は、`$milestone`となります。
SQLのwhere句に使うとなると以下な感じです。
```
select * FROM $__table() where id = $milestone
```

### TIPS 

- ダッシュボードで選択したvariableを初期値にしたい（ロード時に必ずその値にしたい）場合はダッシュボードのセーブ時の設定「Save current variable values as dashboard defalut」をONにすることで出来ます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774545/88e74f21-e542-ca01-edca-2310bce9f992.png)
- 「Include All options」を利用する際に、Athenaなどでは「Custiom all value」をうまく指定できず困ることがあります。
  普通に考えると `*` ですが、Athenaではwhere句で `*` を利用できません(`where id = *`が利用できません)。
  その場合は、ハック的ですが `0 OR 1=1` のように指定することで全件を対象と出来ます(`where id = 0 OR 1=1 となってidが全件対象となる`)。


## おわりに

今回は Grafanaでの Variablesの使い方をまとめました。
Variablesを使うことでユーザがダッシュボードのデータをフィルタ等することで、可視化の高度化が可能です。

## 商標
記載の会社名、製品名、サービス名等はそれぞれの会社の商標または登録商標です。
【WordPress】Contact Form 7で郵便番号から住所を自動入力する方法



## zipaddr-jp プラグインをインストール
Contact Form 7で郵便番号から住所を自動入力する方法として以下のプラグインを入れると簡単に実装できます!

**zipaddr-jp プラグイン**

https://ja.wordpress.org/plugins/zipaddr-jp/

簡単に住所自動入力ができるWordPressのプラグインです。


## Contact Form 7との連携

メールフォーム作成プラグイン「Contact Form 7」とzipaddr-jpプラグインを連携する方法を紹介します。すでにContact Form 7を使って簡単な問い合わせフォームを作ったことがある方を想定して説明します。

「問い合わせ」‐「コンタクトフォーム」メニューから、レイアウトを変更したいフォームの「編集」をクリックして編集画面を開きます。

## 「郵便番号」「都道府県」「市区町村」用のタグを作成
「フォーム」タブでメールフォームのレイアウト（タグ）を確認して、「郵便番号」「都道府県」「市区町村」を追加する場所をイメージしましょう。ここでは、「メールアドレス」と「メッセージ本文」の間に追加しますが、基本的には好きな場所で大丈夫です。

## 作成したフォームの動作確認
レイアウトを変更した問い合わせフォームを表示して郵便番号を入力すると、連動して住所（都道府県と市町村）が自動で入力されるはずです。

## 最後に
このようにzipaddr-jpプラグインを使うと、入力した郵便番号と連動して住所が自動で入力されるフォームを作成することができます。住所の入力が必要な申し込みフォームや問い合わせフォームを作成している方はお試しください。
Rails7.0でbootstrapを導入する

### Rails7.0でbootstrapを導入する
bootstrap-sass を Rails 7.0 プロジェクトに導入する手順は以下の通りです。
Rails プロジェクトの Gemfile を開きます。

Gemfile 内に以下の行を追加して、bootstrap-sass gem を導入します。

```
gem "bootstrap-sass", "3.4.1"
```
ターミナルを開き、プロジェクトのルートディレクトリに移動します。

ターミナルで以下のコマンドを実行して、新しい Gem をインストールします。
```
bundle install
```

application.scss ファイル（通常は app/assets/stylesheets/application.scss）を作成して、以下をインポートします。
```
@import "bootstrap-sprockets";
@import "bootstrap";
```

これで bootstrap-sass gem のバージョン 3.4.1 が Rails 7.0 プロジェクトに導入されました。SCSS ファイル内で Bootstrap のクラスやコンポーネントを使用できるようになります。

参考資料
https://railstutorial.jp/chapters/filling_in_the_layout?version=7.0#sec-structure
【WordPress】これだけまず入れとくべきプラグイン紹介

こんにちは。今年から本格的にWordPressに関わることになったエンジニアです。
実際にHP作成をしてこれだけは入れておくべきだなというプラグインを紹介させていただきます！

## 目次
[WordPressのプラグインとは](#wordpressのプラグインとは)
[既存のプラグインについて](#既存のプラグインについて)
[おすすめプラグイン](#おすすめプラグイン)
[プラグインの注意点](#プラグインの注意点)

## WordPressのプラグインとは
WordPressの既存の機能や設定したテーマだけでは実現できない、便利な機能を追加・登録し、カスタマイズできるツールです。

## 既存のプラグインについて
まず、WordPressをインストールするとデフォルトで以下の2つのプラグインが設定されています。

#### Akismet Anti-Spam
スパムコメントを自動的に振り分けたりスパムメールを防いでくれるスパム対策プラグインです

https://ja.wordpress.org/plugins/akismet/


#### Hello Dolly
サンプルプラグインで、プラグインの開発や機能の実装方法を学ぶための基本的なガイドとして利用されています

https://ja.wordpress.org/plugins/hello-dolly/

※既存のプラグインは自分にとって必要なのかどうかを判断し削除してしまってもかまいません。

## おすすめプラグイン

#### Contact Form 7
お問い合わせフォームを簡単に作成することができるプラグインです。
お問い合わせに対し、自動でメール返信、簡単なバリデーション機能などもあります。

https://ja.wordpress.org/plugins/contact-form-7/

#### Broken Link Checker
内部・外部リンクでリンク切れが起きたことを自動で検知し、修正（リンクの解除）するプラグインです。
また、なくなってしまった画像、リダイレクト設定に変更されたURLなども検知するなどとても便利です。

https://wordpress.org/plugins/broken-link-checker/

#### SiteGuard WP Plugin
セキュリティを強化してくれるプラグインです。
必要なセキュリティ対策が揃っているので色んなプラグインを入れることなく、1つでセキュリティ対策ができます。

https://ja.wordpress.org/plugins/siteguard/」

#### WP MULTIBYTE PATCH
日本語の文字化けやマルチバイト文字を使用することで発生するバグを解消してくれるプラグインです。

https://ja.wordpress.org/plugins/wp-multibyte-patch/

## プラグインの注意点
便利だからといって闇雲にプラグインを導入するのはおすすめしません。
理由としては、WordPressのサーバーが重くなり、ページ速度が遅くなったり、エラーになるリスクがあります。

使わなくなったプラグイン・同じような機能のプラグインは無効化するなどの対応しつつ追加をおこないましょう。

プラグインの個数は10個～15個までが推奨とされています。

また、プラグインのバージョンがアップロードがある時は更新をなるべくおこなうようにしましょう。
[Ruby] JSON相互変換

# 目的
Railsで外部APIと通信した際に、APIから返ってきた値をJSONからHashに変換したり、逆に送る値をHashからJSONに変換する処理を行ったのでまとめる。
# 前提
`ruby 2.7`

# RailsのHash
Rubyでキーと値を組み合わせでデータを管理するオブジェクト。他の言語では連想配列とも
　
#### 形式
- 文字列を囲むのは`''`でも`""`でもどちらでもいい。
文字列で囲まれていないものはシンボル
囲まれているものでもシンボルのものがある。
```
{ 'id' => 1, 'name' => 'user1', 'age' => 22}

# キーがシンボル
{ "id": 1, "name": "user1", "age": 22}
{ id: 1, name: "user1", age: 22 }
{ :id => 1, :name => "user1", :age => 22}
```

# JSON
- 「JavaScript Object Notation」の略で、「JavaScriptのオブジェクトのオブジェクトの書き方を元にしたデータ定義方法」のこと
- JavaScriptなどのクライアント言語とRailsなどのサーバサイド言語間のデータのやり取りで使用される。
#### 形式
```
{ "id": 1, "name": "user1", "age": 22}
```
# 相互変換
# Hash -> JSON
to_jsonメソッドを使う
例）
```pra.rb
require 'json'
data = { 'id' => 1, 'name' => 'user1', 'age' => 22}

puts data.to_json
p data.to_json
```
結果
```
$ ruby pra.rb
{"id":1,"name":"user1","age":22}
"{\"id'\":1,\"name\":\"user1\",\"age\":22}"
```

# JSON -> Hash
JSON.parse()を使う
例)
```pra2.rb
require 'json'
data = '{
	"id": 1,
	"name": "user1",
	"age": 22
}'

puts JSON.parse(data)
p JSON.parse(data)
```
結果
```
$ ruby pra2.rb
{"id"=>1, "name"=>"user1", "age"=>22}
{"id"=>1, "name"=>"user1", "age"=>22}
```

# 参考にさせていただいた記事
- [【Ruby】ハッシュとJSONの変換メモ](https://qiita.com/kure/items/3f81a4e1a24d07104596)
Big Sur, Monterey, Ventura と Fink

Fink は、macOS 用のパッケージ管理システムです。元となっているのは Debian の APT ですが、ラッパーである fink というコマンドを使います。

この Fink Project、公式には 2022 年から 10.X までの対応になっています。しかし、、、

Big Sur, Monterey, Ventura でも動作します。

## Fink の特徴

Fink は、macOS のパッケージ管理システムです。Unix 系のソフトウェアをインストール・アンインストールを管理します。依存関係にあるパッケージもインストールします。

A というソフトウェアが libB の version 1 に依存していたとします。libB にversion 2 が出たとします。この場合、Fink では、libB.1.dylib と libB.2.dylib の両方を維持することができます。A が libB.2.dylib で動作するか検証されるまで、libB1.dylib にリンクしたものが使われます。

Fink では、どのライブラリにリンクされているかをすべてチェックして、エラーを防いでいます。

## バイナリ配布？

Debian APT をベースとしているのであれば、バイナリのインストールができるのでしょうか？仕組みとしてはできるのですが、公式 Fink Project はバイナリ配布をやめてしまいました。

このため、現在はソースからビルドすることが主流になっています。

## インストール方法

ターミナルで、作業ディレクトリに移動度、

```
% git clone https://github.com/fink/fink.git
% cd fink 
% ./bootstrap
```

この後、設定を聞かれるので、デフォルトでよければエンターを押していくだけです。これだけです。

ビルドが始まると、数十分かかります。

なお、PATH が通っていないので、`~/.zprofile` (bash の場合 `~/.profile` など) に

```
. /opt/sw/bin/init.sh
```

と記述しておきましょう。こうすることで、ターミナルを開くたびに PATH を通してくれます。

インストールが終わったら、

```
% fink selfupdate
% fink update-all
```

しましょう。
TypeORMと実際のデータベース構造の不一致：EntityMetadataNotFoundエラーの解決方法

:frowning2:
**TypeORMに関する問題：EntityMetadataNotFound: No metadata for "***" was found**

皆さん、こんにちは！最近、TypeORMを使用してプロジェクトを進める中で、特定のエンティティに関連する問題に直面しました。私はこの問題の解決方法を共有したいと思いますので、同じ問題に直面している方の参考になればと思います。

**問題の詳細**：

以下は、問題が発生する前のエンティティクラスの一部です：

```typescript
import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn } from "typeorm";
import { PostBodyType } from "../constants";

@Entity('content_posts')
export class PostEntity extends BaseEntity {
    @PrimaryColumn({ type: 'varchar', generated: 'uuid', length: 36 })
    id: string;
    // ... その他のフィールド
}
```

**解決方法**：

私が行った主な変更は、`PrimaryColumn`の`type`および`generated`のプロパティです。`varchar`から`uuid`への変更と、`generated`プロパティの変更です。

以下は、修正後のエンティティクラスの一部です：

```typescript
import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn } from "typeorm";
import { PostBodyType } from "../constants";

@Entity('content_posts')
export class PostEntity extends BaseEntity {
    @PrimaryColumn({ type: 'uuid', generated: 'uuid' })
    id: string;
    // ... その他のフィールド
}
```

関連するデータベースのテーブル構造は以下のとおりです：

```sql
CREATE TABLE content_posts (
    id uuid NOT NULL DEFAULT uuid_generate_v4(),
    title varchar NOT NULL,
    body varchar NOT NULL,
    summary varchar NULL,
    keywords _text NULL,
    "type" varchar NOT NULL DEFAULT 'MD'::character varying,
    "publishedAt" timestamptz NULL,
    "customOrder" int4 NOT NULL DEFAULT 0,
    "createdAt" timestamp NOT NULL DEFAULT now(),
    "updatedAt" timestamp NOT NULL DEFAULT now(),
    CONSTRAINT "PK_1234567890abcdef" PRIMARY KEY (id)
);
```

**結論**：

`@Entity`が原因でTypeORMの`EntityMetadataNotFound: No metadata for "*" was found`のような問題に遭遇した場合、最初にエンティティクラスとデータベース構造が一致しているかを確認してください。これが最も一般的な原因の一つと考えられます。
SpringBoot入門メモ

SpringBootの環境構築時にどのライブラリを使えば良いのかわからなかったので、そのメモ。

## 入門記事
backpaper0/enjoy-spring https://github.com/backpaper0/enjoy-spring 

チュートリアル: 最初の Spring アプリケーションを作成する | IntelliJ IDEA ドキュメント https://pleiades.io/help/idea/your-first-spring-application.html#what-next 
Intellijで始めるSpring Boot - Qiita https://qiita.com/yuutom1996/items/fc998a9b613b5406dd12 
Spring Boot / Thymeleafの基礎を学ぶ【初心者向け】 - Qiita https://qiita.com/mi0/items/7e63f3212091c3786370 

Thymeleaf基本編、Web画面を作ってみよう！ https://zenn.dev/sugaryo/books/spring-boot-run-up/viewer/thymeleaf_web_page

Spring Boot にて Spring Security を使用した直後の認証の仕組みをソースコードとともに確認する https://zenn.dev/kiyotatakeshi/articles/fc593c768ad7e0 

初めてのひとのためのSpring/Spring Boot #jjug | ドクセル https://www.docswell.com/s/MasatoshiTada/5Q4EMZ-spring-101#p49 

## First to do
https://pleiades.io/help/idea/your-first-spring-application.html#create-new-spring-boot-project
Spring Web: Spring MVC を使用するすべての Web アプリケーションに必要
Thymeleaf: テンプレートエンジン?
Lombok: Java/Kotlinを便利にするやつ

## DB
Spring Data JPA: DBに使うやつ
H2: 最初だけにつかうDB
https://spring.pleiades.io/guides/gs/accessing-data-jpa/
Spring Bootでデータベースにアクセスしよう (2/2)|CodeZine（コードジン） https://codezine.jp/article/detail/11584?p=2 
Kotlin + SpringBoot + JPA + Thymeleafで簡単なCRUDを作る②～画面と機能作成まで～ - Qiita https://qiita.com/ozaki25/items/301d43dfcb1903ef995b 

## Test
【初心者向け】SpringBootにおける単体テストの基本事項 - Qiita https://qiita.com/Shukupon/items/373939bc0dea4f25b007 

## Spring REST Docs
> Spring MVC Test を実行した結果をスニペット(Asciidoc)として出力できます。
> 自分で手書きしたドキュメント(Asciidoc)とスニペットを組み合わせられます。
Spring REST Docsでドキュメント作成 - Qiita https://qiita.com/mitsuzawa/items/c0044c053f37ce4cecdc 

## 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655180/e521d2d8-1887-79ce-6176-c94911c1781b.png)
Spring Boot Devtoolsも忘れず！

## 📃2.2 Spring Boot で Hello World https://zenn.dev/msksgm/books/implementing-server-side-kotlin-development/viewer/chapter-02-02-spring-intro-hello-world 

jkazama/sample-boot-kotlin: Spring Boot + JPA ( Hibernate ) + Kotlin [ DDD Sample ] https://github.com/jkazama/sample-boot-kotlin
WindowsでGoogle IMEのON/OFFを任意のキーに設定するための備忘

# 概要

私は分割キーボードを愛用していますが、IMEのON/OFFのキー配置が面倒に感じることがよくあります。キーボードによっては、キーアサインを変更できるソフトウェアが提供されていることがありますが、そういったソフトウェアが利用できない場合もあります。

そのため、私はIMEのON/OFFをCtrl+1 / Cmd+1というキーアサインに設定しています。しかしながら、WindowsのGoogle IMEの設定をすぐに忘れてしまうことがあるため、以下に備忘録として記載しておきます。

## 設定方法

### Google 日本語入力プロパティを開いて、キー設定/編集ボタンをクリック

![2023-08-29_07h49_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58872/38ac8118-dde2-e191-77b0-a8a3d83012c7.png)

### Ctrl 1 と設定されている４つのモードに対して、アサインしたいキーを設定します

編集ボタンから、"エントリーを追加" を選び、４つのモードに対してコマンドを設定します。

![2023-08-29_07h50_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58872/524493b4-14bd-7925-ce59-cead65410a3f.png)
git diff でファイル名のみ表示する

本当にファイル名しか要らないならこう（pipeぐらいしか使い道無さそう）

```
$ git diff --name-only
code/2023_misumi/evacuation_simulator/Cargo.toml
code/2023_misumi/evacuation_simulator/src/data/mod.rs
code/2023_misumi/evacuation_simulator/src/main.rs
code/2023_misumi/evacuation_visualizer/src/app/layout.tsx
code/2023_misumi/evacuation_visualizer/src/app/page.tsx
code/2023_misumi/u_link-2.dat
```

この記事を見つけた人が求めているのは多分こう（±行数付き）
```
$ git diff --stat
 code/2023_misumi/evacuation_simulator/Cargo.toml          | 130 ++++++++++++++++++++++++++++++++++
 code/2023_misumi/evacuation_simulator/src/data/mod.rs     |   2 +-
 code/2023_misumi/evacuation_simulator/src/main.rs         |  39 +++++------
 code/2023_misumi/evacuation_visualizer/src/app/layout.tsx |   2 +-
 code/2023_misumi/evacuation_visualizer/src/app/page.tsx   | 173 +++++++++++++++++++++++++++-------------------
 code/2023_misumi/u_link-2.dat                             | 616 ------------------------------------------------------------------------------------------------------------------------------------------------------------------
 6 files changed, 254 insertions(+), 708 deletions(-)
```

上はworking-treeと現在の作業ブランチの比較だがmasterと比較したいなら`git diff master --stat`などアレンジできる
MySQL インデックス作成されているかどうかをSQL文で確認する

# 概要

- インデックス作成状況をSQL文で確認する方法を簡単にまとめる。

# 方法

- 下記SQL文を実行することで当該のテーブルにインデックスが作成されているかを確認できる。

    ```SQL
    show indexes from テーブル名;
    ```

- Key_nameがインデックス名、Column_nameが対象カラムとなっている。
githubのリポジトリ内の、特定のフォルダのみ手元にcloneする方法

cloneするリポジトリ「myproj」は以下のフォルダ構成になっているとする
```
myproj
|- dir1
|- dir2
|- README.md
```

cloneしたフォルダを置いておくディレクトリを作成、移動

```
$ mkdir test1
$ cd test1
```

gitの初期化、sparse-checkoutの有効化、リモートのリポジトリの登録

```
$ git init
$ git config core.sparsecheckout true
$ git remote add origin https://github.com/testuser/myproj.git
```

手元にcloneしたいフォルダを登録（今回はdir1とする）
```
$ echo "dir1/*" > .git/info/sparse-checkout
```

手元にpull
```
$ git pull origin main
```

最初に作ったtest1ディレクトリ内にディレクトリdir1があれば成功。
2023/8/29主にITとかセキュリティの記事

セキュリティーの死角を発見しシステム守る「ASM」、既存の防御策とどう違う？(8/25)
https://active.nikkeibp.co.jp/atcl/act/19/00146/071300117/

AWS WAF ベーシックな設定について(8/26)
https://qiita.com/honey416x2/items/df339dd02989e05c2b8a

インスタンスIPを取得してVuls用のconfigファイルを作成するbashスクリプト(8/27)
https://qiita.com/kisama2000/items/82f0d090745bcda46848

犯罪捜査網に巻き込まれたトルネード・キャッシュ開発者たち──開発者の責任とは(8/27)
https://www.coindeskjapan.com/198766/

突然「dカード」利用停止メールが着弾!?　それはクレカ情報を盗む詐欺だ！(8/27)
https://ascii.jp/elem/000/004/152/4152292/?rss

偽LINE Payに個人情報を盗まれる!?　手口にバリエがあるので要注意(8/27)
https://ascii.jp/elem/000/004/152/4152294/?rss

Netflix並みの製作費は伊達じゃなかった…「VIVANT」が“テレビ離れが進む若者”に人気の秘密(8/27)
https://news.livedoor.com/article/detail/24875002/

10万件のChatGPTアカウントが闇市場に
「機密情報の宝庫」が狙われている　暗躍するスティーラーマルウエア(8/28)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/041800012/081800220/

もう外部侵入を防ぐのは無理、著名ファイアウオール開発者がSOC自動化を進める理由(8/28)
https://xtech.nikkei.com/atcl/nxt/column/18/00001/08328/

いかにして攻撃を無害化するのか、能動的サイバー防御の「戦術」を推測する(8/28)
https://xtech.nikkei.com/atcl/nxt/column/18/02559/082400002/

「SEが転職後に独立起業して、仕事のやり方はどう変わったのですか？」(8/28)
https://xtech.nikkei.com/atcl/nxt/column/18/02518/00028/

人月ビジネスで稼ぎ続けるSIer　IT業界は「一人前の産業」なのか(8/28)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600007/081800146/

ハイパーオートメーション（Hyper Automation）(8/28)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600009/082100149/

デジタルの遅れを取り戻す　コロナ禍で大型投資を決断
小山 徹 氏　エイチ・ツー・オー リテイリング 執行役員 IT・デジタル推進室長(8/28)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600003/082200071/

基幹系をリフト＆シフト　EC企業への事業転換を図る(8/28)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600004/082300138/

ChatGPTでシューティングゲーム　欲しいソフトを誰でもつくれる(8/25)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/052100112/081800076/

経路を制御できない　Windowsの便利機能があだに(8/28)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/041800004/081800068/
プライベートリポジトリからGit for Windowsを使用してgit cloneができない


# 問題
PowerShellで`ssh -T git@github.com`が成功するのに，gitコマンドからsshを叩くと失敗する．

## 具体的には...
GitHubとsshでの通信を行うのに必要な最低限の操作を行った．
- `ssh-keygen`により`C:\Users\{User}\.ssh`以下に鍵を作成．
- 公開鍵をGitHubに登録
- .ssh以下にconfigファイルを作成
- $HOME環境変数に`C:\Users\{User}`を設定することで`ssh -T git@github.com`が成功することを確認．

その後，sshでの`git clone`や`git push`など，gitコマンドからsshを叩くようなコマンドを打ったとき，以下のようなエラーが発生する．

    PS C:\Users\{user}\projects> git clone git@github.com:*****/{private_repository}.git
    Cloning into '{private_repository}'...
    The authenticity of host 'github.com (20.27.177.113)' can't be established.
    ED25519 key fingerprint is SHA256:+*************.
    This key is not known by any other names.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Could not create directory '/home/{user}/.ssh' (No such file or directory).
    Failed to add the host to the list of known hosts (/home/{user}/.ssh/known_hosts).
    git@github.com: Permission denied (publickey).
    fatal: Could not read from remote repository.

    Please make sure you have the correct access rights and the repository exists.

よく見ると，$HOME環境変数を設定しているのに，`/home/{user}/.ssh`のようにLinuxのようなパス指定が行われている．
そのため，gitがホームディレクトリを認識できておらず，ホームディレクトリ以下の.sshディレクトリも見れていない．このためknown_hostsや鍵が発見できずcloneに失敗する．

# 解決策
## git bashを使用する

git bashで`where ssh`，PowerShellで`gcm ssh`をそれぞれ実行することにより，sshコマンドで実行するファイルのパスがわかる．
筆者の場合，以下であった．
- git bash: C:\Program Files\Git\usr\bin\ssh.exe
- PowerShell: C:\Windows\System32\OpenSSH\ssh.exe

git bashはデフォルトでOpenSSHではなくgitのsshを使用しているようである．インストール時に設定で変えられるかもしれないが未調査．
このため，この段階でgit bashで`ssh -T git@github.com`を叩いても失敗した．

https://zenn.dev/sue_creative/articles/8b19b200d16a7c

を参考に`C:\Users\{User}`以下に.bash_profileファイルを作成し，`PATH="/c/Windows/System32/OpenSSH:${PATH}"`の記述を加えて環境変数を変更し，sshコマンドで先にOpenSSHが読み込まれるようにした．



これにより，git bashで`ssh -T git@github.com`が成功することを確認．また，sshを用いた`git clone`や`git push`もできるようになった．

## gitconfigを変更する
`C:\Users\{User}\.gitconfig`，もしくは`C:\Program Files\Git\etc\gitconfig`(システムレベルのconfigをいじりたくないなら非推奨)に，以下の記述を追加


    [core]
    	sshCommand = C:/Windows/System32/OpenSSH/ssh.exe

これでgitのsshではなくOpenSSHを使うようになり，sshを用いた`git clone`や`git push`もできるようになる．

参考

https://qiita.com/ryounagaoka/items/b661f96f599e26a04589

https://www.lisz-works.com/entry/git-windows10-openssh

# 環境
- Windows10
- PowerShell
  - version 5.1.19041.3031
- git for windows
  - git version 2.41.0.windows.3
- ssh
  - OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
GoでURLの全角・半角空白を処理する



# TL;DR
検索機能などを実装するとき、クエリパラメータで送られてきた検索ワードを一旦配列に落とし込みたい。
けど、ユーザーによって使われるスペースの全角・半角は人それぞれ。

# 方法
1.クエリをデコードする
```Go
parsedKeyword, err := url.QueryUnescape(keyword)
if err != nil {
    return nil, err
}
```

2.全角をすべて半角に置き換え

```Go
singleByteKeywords := strings.Replace(parsedKeyword, "　", " ", -1)
```

3.Splitする

```Go
keywords := strings.Split(singleByteKeywords, " ")
```
【Go】jwt-goのライブラリをインストールする際の注意点（2023年8月時点）

## 概要
Goでjwtを実装する際に、[dgrijalva/jwt-go](https://github.com/dgrijalva/jwt-go)を使用する実装例が紹介されていると思います。
ただ、`dgrijalva/jwt-go`は2022年5月にアーカイブとなりました。どうやらリポジトリが新しいものに移動したようです。

## 新しいリポジトリ
2023年8月時点において、[golang-jwt/jwt](https://github.com/golang-jwt/jwt)にて開発が継続されていますので、こちらを使用してください。基本的な機能は`dgrijalva/jwt-go`と変わらないと思います。

## インストール時の注意点
[Installation Guidelines](https://github.com/golang-jwt/jwt#installation-guidelines)にある通り、2023年8月時点では`go get -u github.com/golang-jwt/jwt/v5`の形式で、バージョンを指定するようにしてください。
バージョンを指定せず、`go get -u github.com/golang-jwt/jwt`でインストールすると、2023年8月時点では古いバージョン(v3)がインストールされます。
GitとGitHubについて概要を知る

# はじめに
GitとGitHubについての自分用のメモです

# Gitとは
バージョン管理システム
>  「どのファイルの何を」「誰が」「いつ」「何のために」変更したかを残せる

# Gitの仕組み
・変更履歴を順番に記録する、記録する際はメッセージをつける。

# GitHubとは
Gitリポジトリ（コード）のホスティングサービス
→Gitのファイルの変更履歴をオンライン上で扱ってくれる
ソーシャルコーディングの場所

:::note info
リポジトリとは：
ファイルとファイルの変更履歴を保管しておく箱のようなもの
:::

# GitHubの特徴
・プルリクエストによるコラボレーション
プルリク：GitHubにあるGitリポジトリに対して、自分が変更したコードを取り込んでもらえるようにリクエストする機能
・他チームのソフトウェアが見える
余談：Bitbucketというのもある

# ローカルリポジトリの新規作成
コマンドで新規作成
git init
何が行われているか
.gitディレクトリが作成されている→このディレクトリでファイルの管理をしてくれる

# 基本的なワークフロー
①ファイルを変更
↓git add
②ファイルの変更をステージングエリア（コミットする前の控え室）へ追加
↓git commit
③ローカルリポジトリにコミット
↓git push:サーバー上に変更履歴を登録
共有リポジトリー：サーバー上にある変更履歴を保管しておく箱

# 変更の際のワークフロー
①ファイルを変更
↓git add
②ファイルの変更をステージングエリアへ追加
↓git commit：コミット（リポジトリに変更を時系列で記録すること）ができる
③ローカルリポジトリにコミット
↓git push:サーバー上に変更履歴を登録
共有リポジトリー：サーバー上にある変更履歴を保管しておく箱

:::note info
コミットメッセージをわかりやすく書く：
「なにをどうして変更したのか」がわかるようなメッセージをつける
１行目：変更内容の要約
２行目：空行
３行目：変更した理由
:::

# Gitで管理したくないファイルを外す
・.gitignoreファイルでGitの管理から外す
①自動生成されるファイル
②パスワードが記載されているファイル

# GitHubの画面について
Codeの画面：
今まで作成してきたコードを確認したり、管理したりすることができる
>  リポジトリの簡単な説明を追記する
>> ⚙️を押す
>> ![スクリーンショット 2023-08-28 23.53.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459665/c3e292e8-9f82-9d3f-07e5-444ecbb04615.png)
　　　　　　　　　　　　　　　　　　↓
>> Descriptionに内容を記載後、Save Changesを押して保存
>> ![スクリーンショット 2023-08-28 23.55.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459665/fc114f34-d0ad-ee51-39b4-b9c2dff2514d.png)

>  Rawでファイルの中身を確認
>> ![スクリーンショット 2023-08-29 0.08.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459665/98d582bc-8153-cd57-c0df-887ef64f8dab.png)
　　　　　　　　　　　　　　　　　　↓
>> <img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459665/a3f342d2-c2ec-d850-468c-85afa2656b16.png">

>  Blameで誰が何の為にいつ変更したのかを確認
>> ![スクリーンショット 2023-08-29 0.15.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459665/a8034118-3604-b438-2b3d-6bd0ce6712a6.png)

>  今までのコミット（変更）の履歴を時系列で確認
>> ![スクリーンショット 2023-08-29 0.00.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459665/ba965dad-8855-5d41-032d-f23419981b1e.png)
　　　　　　　　　　　　　　　　　　↓
>> ![スクリーンショット 2023-08-29 0.23.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459665/1d0c4f71-735f-7087-b006-4861ed881c66.png)

# 最後に
表面上だけの理解ですが全く知らない時にあった怖さが減りました。

***
参照
[・Git：はじめてのGitとGitHub](https://www.udemy.com/course/intro_git/learn/lecture/6449732#content)

今後参考予定
[・Atlassianの社のGitチュートリアル](https://www.atlassian.com/ja/git/tutorials/what-is-version-control)
[・チーム開発においてGit初心者が踏みがちな地雷まとめ
](https://techracho.bpsinc.jp/morimorihoge/2020_09_09/16856)
【個人開発】【iOS】プログラミング実装ゲームアプリをリリース

# はじめに
タイムアタック形式のプログラミング実装ゲームアプリをリリースしました。

# URL
https://apps.apple.com/us/app/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E7%8E%8B/id6451335541

# ゲーム内容
HTMLのタグを組み合わせてコードを完成させるアプリケーションです。

# サービス概要
### HTMLのタグを組み合わせる
右画面のページに合わせる形でHTMLのタグを組み合わせて画面を開発していきます。

![ezgif.com-video-to-gif (9).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/1578e1ec-468e-b406-4191-7b03ed85fbae.gif)

### タイムを記録
５ステージクリアすると、タイムが表示されます。
タイムに応じて称号が送られるので、最高の称号である「プログラミング王」を目指しましょう。

![ezgif.com-video-to-gif (10).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/4f1087ba-245a-6484-d4d7-d68bcdcbcd69.gif)
メモリ使用量を削減する

```python
import numpy as np

def reduce_mem_usage(df, verbose=True):
    # 数値型のデータ型を定義
    numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
    
    # 初期のメモリ使用量を計算
    start_mem = df.memory_usage().sum() / 1024**2
    
    # 各列ごとにメモリ使用量を削減
    for col in df.columns:
        col_type = df[col].dtypes
        
        if col_type in numerics:
            c_min = df[col].min()
            c_max = df[col].max()
            
            # 整数型の場合
            if str(col_type)[:3] == 'int':
                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:
                    df[col] = df[col].astype(np.int8)
                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:
                    df[col] = df[col].astype(np.int16)
                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:
                    df[col] = df[col].astype(np.int32)
                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:
                    df[col] = df[col].astype(np.int64)
            # 浮動小数点数型の場合
            else:
                if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:
                    df[col] = df[col].astype(np.float16)
                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:
                    df[col] = df[col].astype(np.float32)
                else:
                    df[col] = df[col].astype(np.float64)
    
    # 処理後のメモリ使用量を計算
    end_mem = df.memory_usage().sum() / 1024**2
    
    # メモリ使用量の削減率を表示
    if verbose:
        print('Mem. usage decreased to {:5.2f} Mb ({:.1f}% reduction)'.format(end_mem, 100 * (start_mem - end_mem) / start_mem))
    
    # 処理後のDataFrameを返す
    return df

```

通常、読み込んだデータのデフォルトのデータ型は`int64`や`float64`が指定されています。

上記は、Pandasのデータフレームのメモリ使用量を削減するための関数です。

この関数を呼び出すことで、データ型を最適化することによってデータフレームのメモリ使用量を削減できます。ただし、注意点として、データ型の変換によって一部の精度が失われる可能性があるため、十分なテストと検討が必要です。
IT知識超基礎まとめ

備忘録

ITエンジニアであれば、一般職よりITに関する基礎知識は深掘りされている必要があります。

「知りません、わかりません」では頼りない人材だと思われてしまいます。
ですので知識の深掘りとしてIT用語を下記にまとめて行きます。

# IT用語

### OS
オペレーティング・システム(Operating System)の略
OSはソフトウェアの１つ　基本ソフトウェア
具体例はwindowsやmacなど

私たちが触っているアプリ等はOSの環境上で動作している。
つまり、OSの規約にのっとって制作されているもの。


【処理イメージ】
ハードウェア　⇔　OS　⇔ アプリケーション ⇔ ユーザー
(具体例)PC本体 ⇔ mac ⇔ 作曲ソフト ⇔ 自分

余談だが、windowsはマイクロソフト社、macはapple社、これらはパソコン向けのOSにあたる。

スマホにもOSはある。iOS(iphone)やAndroidがそれにあたる。

サーバー向けのOSはlinuxなどが有名
linuxの最大の特徴はは無料、PCOSとしても使える。
サーバー向けとして使われる理由として最も大きいのはコスト面である。
サーバーは複数台使用する。つまり、それらのOSをlinuxで賄えるということは非常にコスト面で優れている。
故に普及率が高く、故に開発が進み、品質が良い。
一般向けとしてlinuxが普及しないのは、対応したアプリケーションが少ないからだろう。

OS上で動作するソフトウェアを「アプリケーションソフト」と呼び
OSの呼び出し規約(API)に基づいて、動作している。

なのでたまにwindowsは対応しているがmacの対応は無しなどがある。

### ミドルウェア
OSとアプリケーションの間にあるシステム
ウイルス対策ソフトやバックアップソフトなど

### CPU/メモリ/HDD/GPU

PC選びの時によく見かける表記
詳しくは別記事でいつかまとめたいので、こちらでは、概要だけ。

【CPU】
Central Processing Unitの略
直訳すると「中央処理装置」
頭脳、処理速度。サクサクなPCの処理をしたい場合にはCPUが大切。
余談、「intel入ってる」よく聞くフレーズだがこれはintel社製のCPUのことを指している。

【メモリ】
同時に起動できる許容メモリ
Youtube開いて、作曲ソフトを開いて、動画編集ソフトを開いて・・・など
同時進行で色々なアプリを起動する場合にはメモリが重要。

【HDD】
Hard Disk Driveの略
保存容量、これが多いとシンプルにたくさん保存できる。
たくさん動画を保存したい、たくさん画像を保存したいなど、したい場合にはこちらが重要。
予備知識として外付けのHDDを利用することで、拡張することも容易。

【GPU】
Graphics Processing Unitの略
直訳すると「グラフィックス処理装置」
画像処理装置を意味します。
リアルタイム画像処理を指す、
Webゲームや４K動画の視聴などをする場合にはこちらが重要。

### IPアドレス
よく聞く言葉だが、すごくふんわりしかわかってない。

IPはInternet Protocolの略。通信相手を識別するための番号。
って言われてもわからん・・・実際どういう時に使われてる・・・？？

IPアドレスはデータの送受信をする際に必要
メールの送受信だけでなく、サイトの表示などにも
PCやスマホ、それぞれにIPアドレスはある。

グローバルIPアドレス/プライベートIPアドレスの２種類がある。

【グローバルIPアドレス】
外部との情報やり取りに使用
一般的なIPアドレスはこちらを指すことが多い
これはwi-fiとかのネットワーク機器に紐づいてる。
下記のリンクから、現在繋がっているIPアドレスを確認することができる。
https://www.cman.jp/network/support/go_access.cgi

【プライベートIPアドレス】
ローカルIPアドレスともいう
社内LANなどの外部との通信をしない場合に使用
基本的にIPアドレスは１台につき、１つしかなく、プライベートIPアドレス。

【流れ】
プライベートIPアドレス⇔ルーター⇔グローバルIPアドレス

余談だが、IPv4(32桁)からIPv6(128桁)に変わってきつつある。接続端末増加に伴うもの。

###### ※IPアドレスの自分なりの解釈
**(前提)一般家庭、wifiを通じてPCをインターネットに繋いでいるとする。**
グローバルIPアドレスはwifi機器が保有している。**PCなどの端末は保有していない。**
プライベートIPアドレスはPCやスマホが保有しているが、それを決めるのはPCなどの端末側ではなくネットワーク側、PCなどの端末側から自発的に決まるものではない。
つまりIPアドレスを動的・固定など変更したい場合はネットワーク会社とのプラン相談が必要。

### CUI/GUI
CUIはCharacter User Interfaceの略
GUIはGraphical User Interfaceの略

【CUI】
キーボードでしか操作できない画面
ターミナルとかがそれにあたる

GUI：マウスや指などで操作できる画面

### アプリケーション
アプリケーションとは、アプリケーションソフトウェアの略
OSの上で動作するよう特定の目的をもって開発された専用のプログラムのことです。 
具体例をあげると、メール・地図・LINEなど


# PCのショートカットキーについて

Ctrl+A:表示されているファイルの全選択　(aはall?)
Ctrl+C:コピー
Ctrl+V:ペースト
Ctrl+X:選択範囲の削除(Xは❌マーク？)
Ctrl+F:文字検索ウィンドウを開く(Fはfocus?)
Ctrl+S:データの保存(Sはsave?)
windowsロゴ+L：画面ロック(お昼休みとかによくやるやつ）

# エクセルの用語

絶対参照："$A$1"のように記載・・・オートフィルをしても参照セルが固定化される

IF関数：条件によって表記を変える
IF(条件式,真,偽)

オートフィル：セルの角をクリックしながらドラッグすると自動計算される
パスワードジェネレーターの作成

ポートフォリオ作成01

「パスワードジェネレーター」

要件：
・randomモジュールを使用
・英字（大文字・小文字）、数字、特殊文字

```py
import random
import string

def generate_password(length=12):
    characters = string.ascii_letters + string.digits + string.punctuation
    password = "".join(random.choice(characters) for _ in range(length))
    return password

if __name__ == "__main__":
    password_length = int(input("生成するパスワードの長さを入力してください: "))
    generated_password = generate_password(password_length)
    print("生成されたパスワード:", generated_password)

```