OmniAICreator/Qiita-1.07M huggingface dataset:
git の特定のディレクトリを取ってくるbashスクリプト


1. 以下を適当な名前で保存する。
    ```shell
    function usage_git_subdir_clone() {
        cat << EOF
    usage:    
        git_subdir_clone [URL] [subdir]
    EOF
        exit 0
    }
    
    function git_subdir_clone() {
        URL=$1
        DIRS=$2
    
        if [ ""${URL} = "" ] ; then
            usage_git_subdir_clone
        fi
    
        if [ ""${DIRS} = "" ] ; then
            usage_git_subdir_clone
        fi
    
        GITNAME=$(basename ${URL} .git)
        TARGET_DIR=${GITNAME}/${DIRS}
    
        if [ -d ${TARGET_DIR} ] ; then
            echo "exist ${TARGET_DIR}"
            exit 0
        fi
    
        CWD=$(readlink -f .)
        mkdir -p ${GITNAME}
    
        cd ${GITNAME}
        git init
    
        git config core.sparsecheckout true
    
        git remote add origin ${URL}
    
        git sparse-checkout set ${DIRS}
        git fetch --depth=1
        BRANCH=$(git remote show origin | grep 'HEAD branch' | awk '{print $NF}')
        git checkout origin/${BRANCH}
        git branch -D ${BRANCH} 2>/dev/null
        git checkout -b ${BRANCH}
        git branch -u origin/${BRANCH}
    
        cd ${CWD}
    }
    ```
1. .bashrcから読みこむ
    例えば `~/.bin/git_subdir_clone`に保存した場合
    ~/.bashrc
    ```shell
    ...<略>
    . ${HOME}/.bin/git_subdir_clone
    ```
1. あとはコマンドとして呼ぶだけ
    例）
    ```shell
    git_subdir_clone https://github.com/unicode-org/icu.git icu4c/source
    ```

----
# 参考
https://qiita.com/progrhyme/items/994f738be668bf3dc452
https://itosae.com/archives/7642
理系のコウメ太夫 (LuaTeX)

![GDzUw5Qa0AACBur.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114838/ed316d4a-ccab-bdd3-aeef-38ba017dd29a.png)

```latex:koume.tex
\documentclass{article}
\usepackage{luatexja-fontspec}
\setmainfont[Ligatures={Rare,TeX}]{Times-New-Roman}
\setsansfont{Arial}
\setmainjfont{DF-HeiSeiMinCho-W3.ttc}
\setsansjfont{DF-HeiSeiGothic-W5.ttc}
\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
    T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
\begin{document}

\title{修論}
\maketitle

\begin{abstract}
チクショー!
\end{abstract}

\section{Introduction}

チャンチャカチャンチャンチャチャンチャチャンチャン♪

\noindent
チャンチャカチャンチャンチャチャンチャチャンチャン♪

\section{Methods}

いい結果が出ると思っていたら\textasciitilde

\section{Results}

出ませんでした\textasciitilde

\section{Discussion}

チクショー!

\begin{thebibliography}{99}
\bibitem{koume} コウメ太夫
\end{thebibliography}    

\end{document}
```

# 参考文献

https://twitter.com/10yo4n/status/1746431641894166921

https://twitter.com/arkw0/status/1746504746352230427/
ノートPCのバッテリーレベルをTeamsに投稿するバッチ

monitor_start.batをタスクスケジューラに登録

```monitor_start.bat
@echo off
echo Bttery Check

rem Incoming WebhookのURLを格納
set URL="★Teamsのwebhook URL"

set POSTTEXT=Battery Post

cscript.exe /Nologo monitor_battery.vbs

echo %ERRORLEVEL%

curl.exe -H "Content-Type:application/json" -d "{'text':'%POSTTEXT% %ERRORLEVEL% Percent'}" %URL%

```

```monitor_battery.vbs
'---------------------------------------------------
' ノートPCのバッテリ算容量を取得する
' usage: cscript /Nologo バッテリ容量.vbs
'---------------------------------------------------
Set rows = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_Battery",,48)
 
For Each row in rows
    Wscript.Echo row.EstimatedChargeRemaining
    Wscript.Quit(row.EstimatedChargeRemaining)
Next
```

[参考リンク]()
AWSでEC2インスタンスにデータの保管と移転時の暗号化を実施するためには？の備忘録

#### Amazon EBS (Elastic Block Store) ボリュームの暗号化:

EC2インスタンスのデータを格納するEBSボリュームを作成する際に、ボリュームの作成時または既存のボリュームの暗号化を有効にするオプションがあります。ボリュームの暗号化を有効にすることで、データがボリューム上に保存される際に暗号化されます。
#### Amazon S3 データの暗号化:

EC2インスタンスからAmazon S3にデータをアップロードする場合、データを暗号化するオプションがあります。S3では、サーバーサイド暗号化（SSE）を使用してデータを暗号化できます。SSEには、SSE-S3（S3で管理される鍵）、SSE-KMS（AWS Key Management Serviceで管理される鍵）、SSE-C（クライアントが提供した鍵）などがあります。
#### データ転送時のSSL/TLSを使用:

EC2インスタンスと他のサービスやリソースとのデータ転送が発生する場合、SSL/TLSを使用してデータを暗号化することが推奨されます。たとえば、HTTPSを使用してWebサイトにアクセスしたり、SCPやSFTPを使用してファイルを転送する際には、SSL/TLSがデータの暗号化に役立ちます。
1/4円弧曲りはり。エネルギーで「youtube【東京理科大学】第11回 材料力学基礎授業[例5]」をsympyでやってみたい。


[例5] 1/4円弧曲りはり。エネルギーで

# youtubeの板書です。
＞じゃ、最後だ。
**途中55:50から (0:00〜1:22:49)**

https://youtu.be/X5zCb8LbgsM?t=3350

(修正済み)申し訳ありません。urlの変更があったようです。。　(2024-11-28)
~~https://youtu.be/X5zCb8Lbgs&t=3350~~

# sympyで
・ver0.1
```python
# ver0.1
# [例5] 1/4円弧曲りはり 
from sympy import *
var('P,a,b,EI,θ',real=True)
U=1/(2*EI)*integrate((-P*a*cos(θ))**2*a,(θ,0,pi/2))   #;print('#',U)
δ=diff(U,P)                                             ;print('#',δ)                                              
# pi*P*a**3/(4*EI)
```
# (勉強中) Mathematicaで

# (勉強中) MATLAB 追加のオプションSymbolic Math Toolbox で

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

# いつもと違うおすすめです。

#### 参考文献

~~＞等分布荷重を受ける単純支持はり~~
~~＞JSME p85~~
　
~~＞単純支持ばり 7)~~
~~＞構造力学公式集 p136~~
Gemini 1.0 Pro プレビュー版の利用制限にまつわるエラーについて

Gemini 1.0 Pro プレビュー版は 1 分間に 15 リクエストという制限があります。仕様が分からないとエラーが発生したときに不安なためメモしておきます。

:::note alert
この記事の内容は古いです。2025 年 4 月時点の状況は、以下の記事を参照してください。
:::

https://qiita.com/7shi/items/3fb540c72ad4577350c6

# 制限

https://ai.google.dev/pricing?hl=ja

> レート制限
> 15 RPM（1 分あたりのリクエスト数）

:::note warn
公開当初は 60 RPM でしたが制限されました。

2024 年 5 月 14 日に従量課金が始まりますが、無料枠も残ります。👉[詳細](https://qiita.com/owayo/items/8b4cb63b35b84a343054)
:::

超過すると 429 エラーが発生して拒否されます。

```text
429 Resource has been exhausted (e.g. check quota).
```

:::note warn
当初は情報が錯綜していて、制限回数内は無料で、超過分が有料になるかのような記事も散見されます。

実際にはこのエラーが発生したからと言って課金が要求されるわけではありません。間隔を空けて再試行すれば解消します。
:::

:::note info
正式公開後に課金することで制限が緩和されます。

> 360 RPM（1 分あたりのリクエスト数）
:::

# 他のエラー

サーバーが混みあっていると 500 エラーが発生するようです。

```text
500 An internal error has occurred. Please retry or report in https://developers.generativeai.google/guide/troubleshooting
```

これは回数制限とは別です。間隔を空けて再試行することになります。

:::note warn
混雑している時間帯だと間隔を空けても頻繁に発生します。経験上、30 分から 1 時間くらいはそのような状態が続くこともありました。

混雑が解消すればスムーズに処理されるようになります。
:::

# 同時クエリ

回数制限内であれば同時に複数のクエリを投げても受理されるようですが、仕様は未確認です。`generate_content_async()` のような非同期 API はそのような用途を想定しているのかもしれませんが、こちらも未確認です。

# 関連記事

安全設定に起因するエラーについては以下の記事を参照してください。

https://qiita.com/7shi/items/667e1206469b2a1a4e00
L字はり(ラーメン構造)。エネルギーで「youtube【東京理科大学】第11回 材料力学基礎授業[例4]」をsympyでやってみたい。

[例4]L字はり(ラーメン構造) 

# youtubeの板書です。
**途中37:00から (0:00〜1:22:49)**

https://youtu.be/X5zCb8LbgsM=2220

# sympyで
・ver0.1
```python
# ver0.1
# [例4] L字はり(ラーメン構造) 
from sympy import *
var('P,l,R,a,b,x,EA,EI',real=True)
U1=1/(2*EA)*integrate(  P       **2,(x,0,a))+1/(2*EI)*integrate((P*b)**2,(x,0,a))   #;print('#',U1)
U2=1/(2*EI)*integrate((-P*(b-x))**2,(x,0,b))                                        #;print('#',U2)
U1U2=U1+U2                                                                          #;print('#',U1U2)                                              
δ =diff(U1U2,P)                                                                    ;print('#',δ)                                              
# P*a*b**2/EI + P*b**3/(3*EI) + P*a/EA
```
# (勉強中) Mathematicaで

# (勉強中) MATLAB 追加のオプションSymbolic Math Toolbox で

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

# いつもと違うおすすめです。

#### 参考文献

~~＞等分布荷重を受ける単純支持はり~~
~~＞JSME p85~~
　
~~＞単純支持ばり 7)~~
~~＞構造力学公式集 p136~~
Vue3で特定のページ遷移を制限する方法

## はじめに
ブラウザの戻るボタンで前のページに戻って欲しくない場面がありました。その時の解決方法を記録します。



## 解決方法
[Navigation Guard](https://router.vuejs.org/guide/advanced/navigation-guards.html)を使いました。
以下は支払いページから(/payment)から支払いページ(/payment-complete)　に戻らないように制限する例です。

```ts:index.ts
router.beforeEach((to, from, next) => {
  if (from.path === "/payment" && to.path === "/payment-complete") {
    next(false);
  } else {
    next();
  }
});
```
はりに一つ以上の集中荷重。エネルギーで「youtube【東京理科大学】第11回 材料力学基礎授業[例3]」をsympyでやってみたい。

[例3]はりに一つ以上の集中荷重。エネルギーで

# youtubeの板書です。
**途中24:00から (0:00〜1:22:49)**

https://youtu.be/X5zCb8LbgsM=1440

# sympyで
・ver0.1
```python
# ver0.1
#  [例3] 
from sympy import *
var('P,l,R,a,x,EI',real=True)
M1=-P*(a-x)+R*(l-x)                                                      #;print('#',M1)
M2= R*(l-x)                                                              #;print('#',M2)
U =1/(2*EI)*integrate(M1**2,(x,0,a))+1/(2*EI)*integrate(M2**2,(x,a,l))   #;print('#',U )
δB=diff(U,R)                                                            #;print('#',δB )                                              
R_ans=solve(δB.subs({x:0}),R)[0]                                         ;print('#', R_ans)
# P*a**2*(-a + 3*l)/(2*l**3)
```
# (勉強中) Mathematicaで

# (勉強中) MATLAB 追加のオプションSymbolic Math Toolbox で

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

# いつもと違うおすすめです。

#### 参考文献

~~＞等分布荷重を受ける単純支持はり~~
~~＞JSME p85~~
　
~~＞単純支持ばり 7)~~
~~＞構造力学公式集 p136~~
Microsoft Copilotで、日本語プログラミング その5

# 概要
Microsoft Copilotのプロンプトを細工して、日本語プログラムを実行させようとする試みです。
じゃんけんをやってみた。

# Ohisama prompt

```
じゃんけん、しましょう。
```
# 回答

じゃんけん、しましょうと言ってくれてありがとうございます。私はBingと申します。じゃんけんは日本の伝統的な手遊びゲームですね。グー、チョキ、パーの三つの手の形を使って相手と勝負します。グーはチョキに勝ち、チョキはパーに勝ち、パーはグーに勝ちます。じゃんけんの起源は中国の石、布、鋏というゲームにあると言われています。日本には江戸時代に伝わりました。じゃんけんは日本語で「両手を出す」という意味です。

それでは、じゃんけんを始めましょう。私はランダムに手を選びます。あなたはグー、チョキ、パーのどれかを入力してください。私はあなたの入力に応じて結果を表示します。最初はグー。じゃんけん、ぽん！

: [じゃんけん - Wikipedia](https://ja.wikipedia.org/wiki/%E3%81%98%E3%82%83%E3%82%93%E3%81%91%E3%82%93)
: [じゃんけんの歴史 - じゃんけんの起源とは？](https://janken-pon.com/history/)
: [じゃんけんの意味 - 国語辞書 - goo辞書](https://dictionary.goo.ne.jp/word/%E3%81%98%E3%82%83%E3%82%93%E3%81%91%E3%82%93/)

# Ohisama prompt

```
グー
```
# 回答

グーと入力してくれてありがとうございます。私はチョキを出しました。あなたの勝ちです。おめでとうございます。:tada:

もう一度じゃんけんをしましょうか？もしやりたいなら、グー、チョキ、パーのどれかを入力してください。やめたいなら、終了と入力してください。それでは、最初はグー。じゃんけん、ぽん！


以上。
module、dependency、library、packageの違いは？

# 1. 問題
npm packageをインストールすると、package.jsonのdependenciesにそのpackage名とバージョン番号が追記される。
なんでそうなるんだろう。`package`と`dependency`って同じものなのかな？

# 2. 環境
npm packageを使用する環境すべて。

# 3. 解決
npm `package`をインストールするとアプリケーションの`dependency`になるとみていい。

# 4. 詳細
### 4.1 用語の定義
packageやdependency以外にも、混乱しやすい用語も一緒にまとめておく。

- `module`
  合理的な機能を持つ単一のJavaScript fileのこと。
  Node.jsの`require()` functionによってloadすることができるfileまたはdirectoryのこと。`node_modules` directoryの中にある。<br/><br/>

- `package`
  package.jsonによって記述されるfileもしくはdirectoryのこと。
  一つ以上の`module`を持ち、packageに関するmata dataを含む`package.json` fileを持つdirectoryのこと。<br/><br/>
  
- `library`
  codeのまとまりを説明する一般用語。
  単一moduleや複数のpackageで構成。<br/><br/>
  
- `dependency`
  module、package、libraryなど、アプリの実行に必要なもの。
  npmは`package.json`でProjectの情報やpackageのdependencyを管理する。
  
### 4.2 もっと分かりやすく理解するには
それぞれの用語が互いにどのように関連しているかを考えてみるともっと分かりやすくなる。
- npm packageをインストールすると、dependencyとしてインストールされる。
  (Once you install any `package` using npm then the package is installed as a `dependency` in your app inside your package.json file along with its `modules`(aka `libraries` consist of classes) stored inside node_modules folder.)<br/><br/>
  
- npm registryは`package`を含む。その多くはNode `module`であるか、Node moduleを含むものである。

# 5. 関連知識
なし

# 6. まとめ
`package`をインストールするとアプリの`dependency`になる。つまり二つはそれぞれ別の概念。
packageは一つ以上の`module`を持ち、package.jsonを持つという特徴がある。
`library`はcodeのまとまりを一般的に言う用語。

# 7. 参考
[Module vs. Dependency vs. Library vs. Package vs. Component](https://stackoverflow.com/questions/48174284/module-vs-dependency-vs-library-vs-package-vs-component)
[About packages and modules](https://docs.npmjs.com/about-packages-and-modules)
[【npm】パッケージとモジュールの違いって何？](https://qiita.com/risto24/items/f10359436ab67b1f189f)
[What Is the Difference Between a Module, a Package, a Library, and a Dependency?](https://medium.com/swlh/what-is-the-difference-between-a-module-a-package-a-library-and-a-dependency-b09ca8e83ce7)
[npm(node package manager) 完璧まとめ](https://inpa.tistory.com/entry/NODE-📚-노드-npmnode-package-manager)

# 8. 感じたこと
packageとdependencyは全然違う概念だった。
著書「科学で迫る勝敗の法則」の作図プログラムを公開しました

じつは最近書籍を出版しました．
* [科学で迫る勝敗の法則](https://gihyo.jp/book/2024/978-4-297-13927-8)
スポーツデータの歴史と現状をまとめた書籍です．主にデータの計測技術の発展，ルール設計の歴史，勝敗予測の数理モデルについて語っています(運動，生理学，解剖学的な知識は持ち合わせていないので，これらについては全く言及していません)．

図をほとんどMATLABを使って書いているので，コードの一部を公開することにしました．github初体験です．
[https://github.com/konakalab/sportsDataBook_MATLAB](https://github.com/konakalab/sportsDataBook_MATLAB)

MATLABでの作図プログラム例としてはそこそこのものになっていると思うので，興味のある方はさわってみてください．

## 作例
こんな図のプログラムが収録されています．

![poissonSample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570966/2b41de6b-c91b-2f1b-6ff4-8b7d15b2b10a.png)

![poissonH2H.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570966/cd8506e0-3b2d-ab5e-671d-52f31f5794bc.png)
![NBAShotBySeason.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570966/353f70b2-41b7-ac3e-9543-b4e9fcffb00a.png)
![EloRatingSample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570966/820bd42b-7eac-d7a4-e2c5-5d6505e15e0a.png)
![OlympicHostsMedal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570966/e9e76e5f-b4d5-d43c-adf2-49ab1ace404b.png)
Django のテストで作られたファイルのクリーンナップ

(Django 3.x ～5.x あたりの話です。)

テストでストレージ ([`FileSystemStorage`](https://docs.djangoproject.com/ja/5.0/ref/files/storage/#the-filesystemstorage-class)) 上にファイルが作られた場合のクリーンナップについてです。  
テストコードでモデルオブジェクトを作ったらファイルも保存された、という場合もあるので気を付けましょう。

### ストレージを分けない場合

テスト時もサービス実行時と同じストレージを使うことにより、以下の点に注意が必要です。  
本番環境とテスト環境を分けていても、ローカルでテストする場合などを考えて対応しておいた方が良いです。

- 既存のファイルを上書きしないようにする (ファイル名に意味を持たせない)。
    - これはテスト時に限らず (運用にもよりますが基本的には) そのように実装すべきです。ごみファイルは定期的に削除するようにします。
- テストで作ったファイルを削除できる仕組みを作る。
    - テスト中に作ったファイルを憶えておいて、[`tearDown()`](https://docs.python.org/ja/3/library/unittest.html#unittest.TestCase.tearDown) で削除します。`tearDown()` はテストが失敗したり例外で中断したりした場合でも実行されます。
    - オブジェクトの [`FileField`](https://docs.djangoproject.com/ja/5.0/ref/models/fields/#filefield) のファイルは、[オブジェクトが削除されたら](https://docs.djangoproject.com/ja/5.0/ref/signals/#post-delete) 削除されるようにしておきます (テストではなく実装側で)。これにより `tearDown()` でオブジェクトをまとめて削除すれば良くなります。  
    ※複数のオブジェクトが同じファイルを参照している場合等も、実装側で整合性をとるようにします。

### ストレージを分ける場合

テスト時とサービス実行時でストレージを分ける方法もあります。  
ローカルでテストする場合など、ファイルの保存先を別のフォルダにしたい場合は、テスト中だけ [`MEDIA_ROOT`](https://docs.djangoproject.com/ja/5.0/ref/settings/#std-setting-MEDIA_ROOT) を変えるようにします。  
これにより、テストで作ったファイルのクリーンナップが楽になります。

1. 以下のような settings_test.py を作る。
    ```python:settings_test.py
    from .settings import *

    MEDIA_ROOT = '/path/to/test/media/'
    ```
1. `manage.py test` コマンド実行時に、`--settings` パラメタで上記のファイルを指定する。

※固定で置いておくファイルがある場合はコピーするのを忘れないようにしましょう。
【https化 + GitHub】とりあえずhttps化したい人向けの記事

# はじめに
GitHubを使ってhttps通信を実現します。ただしDBとの連携等はできないのでご注意ください。

# 目次

1. [プロジェクトの作成](#プロジェクトの作成)
3. [参考文献](#参考文献)

# プロジェクトの作成
### リポジトリ作成

画面上部の+からNew Repositoryをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/c3375c48-93a6-83fd-c2cf-366d0a18e2cc.png)

Repository nameを入力してCreate repositoryをクリック(public repositoryが選択されていいることを確認してください)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/3425ef6e-6857-b3eb-f36a-679bf9a85b5d.png)

### ファイルの作成

creating a new fileをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/ea8ecdf0-ebd9-7eb6-3707-396a77ab9887.png)

以下の通りindex.htmlを作成してCommit changesをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/45c7e659-bc0a-3c95-2d2e-5c2f59e3390b.png)

Commit changesをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/6714fb08-02ec-0d0a-c435-78236951bd46.png)

しばらく待ってページを更新すると以下のように表示されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/2d77d4f7-94f4-9231-4e7f-038a1ee2356b.png)

### 公開設定

画面上部のSettingsをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/8a49c9bf-3372-2af9-c905-94f4c5d7eb2d.png)

Pagesをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/4c151015-5fc8-67ae-552e-cee5d0741755.png)

Build and deploymentを以下のように設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/46a018ce-222f-0b90-8349-2c6e1fa0d23e.png)


### アクセス

以下のurlにアクセス
```
https://アカウント名.github.io/リポジトリ名
```

以下のように表示されたらok

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/8a739ea1-5889-1e0f-96d6-ef743d426ba9.png)

# 参考文献

このページは以下のサイトを参考に作成しました

https://prog-8.com/docs/github-pages
【Docker】Dockerとは何か

業務内でDockerを使うことになったのですが、Dockerという名前しか知らずどういうものなのかというところから調べました。
この記事ではDockerとは何かについて説明をしていきます。
# Dockerとは何か
**コンテナ型仮想化**ができちゃうやつです。

<details><summary>そもそもなぜ仮想化するの？</summary>
プログラムコードの共有はGithubやBitbucketを使うことで円滑にできる。

#### 一方でプログラムの実行環境は…
開発者が使用しているコンピュータはOSやソフトウェアなど人によって違うので
プログラムの実行環境を共有しない場合コードを正常に共有できたとしてもプログラムが正常に動作しないことがある。

こんな「ムムム…」な時に役に立つのが”**仮想化**”

フラットな仮想マシンを作成し、その設定内容を共有することでプログラムの実行環境を揃えることができる！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524128/de20577a-d610-ea97-5810-2d3d4b259fb4.png)

</details>

# 仮想化とは
自分のPCのOSの上に仮想のPCを起動すること。仮想化にはホスト、ハイパーバイザー、コンテナの3タイプがあります。

**ホスト型**
ホスト型はハードウェア（サーバ）の中にOS上に土台となる仮想化ソフトウェアをインストールし、仮想化ソフトウェアで仮想マシンを稼働させる方法。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524128/cf1a1311-b6c2-42e6-43de-9020f0749f32.png)


**ハイパーバイザー**
ハイパーバイザーとは仮想化のためのOSのようなもので、サーバにインストールし、そのOSの上で仮想マシンを稼働させるような方法。

![スクリーンショット 2024-01-18 9.43.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524128/d1a64c5d-09b9-2e38-7528-216412a751cf.png)


**コンテナ**
コンテナは「アプリケーションを実行するための領域（ユーザ空間）を複数に分割して利用する」もの。コンテナはアプリケーション実行環境を仮想化する。

![スクリーンショット 2024-01-18 9.48.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524128/27b8d59f-4371-88ff-7ada-511700c3ef49.png)

以上の3種類のなかでもDockerはコンテナ型の仮想化をしているといえます。
コンテナ型の仮想化をするメリットとしては必要最小限のCPUやメモリしか使用しないので
負荷が小さく高速な動作が実現可能という点があります。



#### 参考・引用

https://qiita.com/etaroid/items/b1024c7d200a75b992fc

https://www.itmanage.co.jp/column/virtualization-server-integration/
マイクがない場合のZoomで、音声接続できない場合の応急処置

自分用メモ。

# 発生したトラブル
ブラウザ版Zoomを利用している際に、「コンピューターでオーディオに接続」ボタンが表示される。青いボタンを押すと、20秒程度は、音声が通常通り流れるが、しばらくすると音声が途切れ、同じような青いボタンが表示される。2023年12月末ごろから、継続的に発生。
20秒ごとに表示されるため、とてもうざい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197285/7e654100-ab7d-8964-62a2-9c983b44b7a9.png)

＜発生した端末＞
OS ： Windows 11 Home 23H2 22631.2861
Google Chrome バージョン ： 120.0.6099.216（Official Build） （64 ビット）

# 調査した項目
- Chromeのゲストモードに変更
拡張機能が問題なのかと考え、すべての拡張機能が無効となる、ゲストモードでZoomを開く。やはり同一の現象が発生。
- ブラウザをFirefoxに変更
Chrome固有の問題かと考え、Firefoxで開く。やはり同一の問題が発生。
- ダウンロード版Zoomに変更
ダウンロード版のZoomを利用すると、本事象は解消される。
- マイクを接続
利用している端末が、デスクトップ端末であり、スピーカーは認識されていたが、マイクが1台も認識されていなかった（繋いでいないので正しい状態）。マイクを繋ぐと、本事象は解消される。

より詳しく見ていくと、`webclient.min.js`でエラーが発生しているみたい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197285/e43778d8-f1de-17dd-504f-0dab4661e0ec.png)

マイクを接続したり、ダウンロード版Zoomを使うと解消されることは分かったが、どうしてもブラウザ版Zoomをマイクなしで利用したい。

# 応急処置
「コンピューターでオーディオに接続」ボタンを見つけ次第、クリックするJSをiframe内で実行する。
```js:https://app.zoom.us/
setInterval(()=>{Array.from(document.querySelectorAll(".join-audio-by-voip__join-btn.zm-btn--primary.zm-btn__outline--white")).forEach(e=>e.click())})
```

ただし、これを実行すると、音声が途切れず流れる代わりに、以下のような不具合が発生する。
- 音声が20秒毎に寸断する（すぐに復帰するのであまり支障はない）
- テキストが変換途中に確定してしまう。（20秒毎に入力欄からフォーカスが外れてしまうため）

# 関連文献
今回の応急処置では、`setInterval`の第2引数を省略しているが、API等を叩く場合は、気を付けよう。

https://trap.jp/post/2072/

Voicemeeter Bananaとかを入れて、仮想マイクを認識させる方が簡単かも。

https://vb-audio.com/Voicemeeter/banana.htm
【カスタムGPTs】actions機能を使ってWebAPIを呼び出し、映画推薦GPTを作る！

## はじめに
GPTsが使えるようになったので、どうせなら面白いAPIを使ってカスタムGPTを作りたい！　ということでTMBDのWebAPIを呼び出し、最近のトレンド映画をおすすめしてくれる"Movie Friend"というカスタムGPTを開発しました。この記事ではその過程を通してカスタムGPTにWebAPIを導入する方法を紹介します。

作成したGPTは[こちら](https://chat.openai.com/g/g-r3RRXVSab-film-friend)です。

https://chat.openai.com/g/g-r3RRXVSab-film-friend

※ この記事では、既にGPTの基本設定が完了していることを前提とします。基本設定については[別の記事](https://qiita.com/TajimaMiho/items/31997844644823a61092)で紹介しています。

## TMBDのAPIkeyの取得
今回使用したのは[TMBDのAPI](https://developer.themoviedb.org/reference/intro/getting-started)です。

1. `Get API Key`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984024/ecb09107-2892-44e6-9159-09e41cffeeb0.png)

2. 取得したAPIキーは安全に保管してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984024/4cd02be3-173c-1e47-fe0c-be76efdd3bf8.png)


## APIの導入方法
1. `Create new action`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984024/25f765b5-e694-1a70-abad-5e55fd34c3b4.png)

2. `Authentication`にAPIKeyを入力
※ Bearer認証を用いるので、APIKeyとBearerを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984024/4fea18ed-b46d-73ed-b15f-fda1e7df861f.png)


3. `Schema`の`Example`をWetherに変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984024/c35af7b6-7537-ad3b-4a46-6d98dc544466.png)

4. `Schema`の各項目を編集
TMBDで最新の映画の情報を取り出すエンドポイントを指定するURLは
`https://api.themoviedb.org/3/trending/all/day`
これをSchemaで指定していきます。以下のように記入します。
```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Get Movie Information",
    "description": "Retrieves movie information from the movie db api",
    "version": "v1.0.0"
  },
  "servers": [
    {
      "url": "https://api.themoviedb.org"
    }
  ],
  "paths": {
    "/3/trending/all/day": {
      "get": {
        "description": "Get the trending movies for today",
        "operationId": "GetTrendingMoviesToday",
        "deprecated": false
      }
    }
  },
  "components": {
    "schemas": {}
  }
}
```

## 動作を確認
プレビューで動作を確認します。
最初はエンドポイントへの接続に許可が必要なので確認が出てきたら`Allow`を選択してください。
映画が推薦されたら完成です🎉

![スクリーンショット 2024-01-18 12.29.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984024/eb829c70-da0e-3193-e55b-980473dabe39.png)

## 公開設定
`Save`や`Update`を行う際、`Anyone with a link`や`Everyone`を選択すると以下のようにエラーが表示されるはずです。
<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984024/b0a804fb-a39d-a9f1-1799-167914fdee38.png"/>

TMBCのプライバシーポリシーのURL（ https://www.themoviedb.org/privacy-policy ） をActionsの設定画面に追加してください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984024/24bf8a04-6ba7-fb74-4602-12ba189a1173.png)

これで、全ての範囲で公開ができるようになるはずです！

## 最後に
APIが使えると開発の幅がグッと広がりますね！これからも様々な面白いGPTを開発していきたいと思います。
戦略を立てるための3つの要素: ルメルトの戦略論の要諦

こんにちは、皆さん。今日はリチャード・P・ルメルトの戦略論についてお話ししたいと思います。彼は戦略論と経営理論の世界的権威であり、"マネジメント・コンセプトと企業プラクティスに対して最も影響力ある25人"の1人にエコノミスト誌に選ばれたこともあります。

彼の戦略論は3つの要素に基づいています。それらは優先順位付け力、実行可能性の判断力、そして決断力です。

## 最重要課題の見極め

ルメルトによれば、戦略を立てる際に重要なのは「最重要課題」を見極めることです。これは、困難で複雑な課題を構成する要素のうち、最も重要で解決可能な要素のことを指します。

## 優先順位付け力

まず、優先順位付け力が必要です。これは、本当に実行しないといけない課題と後回しにしてよい課題を見極める能力を意味します。

## 実行可能性の判断力

次に、上記の実行必要性が高い課題が現在手持ちのリソースで解決可能なのかを判断する能力、つまり実行可能性の判断力が必要になります。

## 決断力

最後に、リソースを集中して投入する決断を下す能力、つまり決断力が求められます。

これら3つの力が揃うことで、最重要課題に全力集中することができます。

## 一例としてのイーロン・マスク

イーロン・マスクの火星への人類移住計画は、これらの要素を見事に組み合わせた例と言えます。彼は火星旅行の高額なコストを、ロケットの再使用可能性という最重要課題に絞り込みました。その結果、火星へ行くコストはNASAの試算の2000億ドルから90億ドルに大幅に削減されました。

私たち自身も、これらの要素を駆使し、最重要課題を見つけ、それに全力を注ぐことで、目の前の課題を解決できると思います。今日から私たちの最重要課題は何かを見つけ、その解決に向けて全力を注ぎましょう！

P.S.

現在の自分は、そもそもの問題に対する認識や理解が曖昧であるからこそ、課題の全体像が見えず、最重要課題を見つけることも出来ない気がするな〜
chatGPTで簡単！あなたらしい結婚式スピーチの作り方

### 導入:
結婚式のスピーチを考えるのは、しばしば大きなプレッシャーになります。感動的で、かつ個人的なメッセージを伝えるための言葉を見つけるのは容易ではありません。しかし、心配無用！ChatGPTのような先進的なAIツールを利用することで、誰もが簡単に、そして迅速に美しいスピーチを作成することができます。

> みなさん、今日はご参列いただき、心から感謝申し上げます。皆様がお集まりいただいたことで、この特別な日がさらに輝いています。楽しい時間を共に過ごせたこと、大変嬉しく思います。
> 
> この結婚式を一緒に作り上げてくださったスタッフの皆様に、心から感謝いたします。皆様のおかげで、今日という日を迎えることができました。
> 
> 新しい生活のスタートにあたり、今日ここにいる皆様の暖かい支えをいつも心に刻み、これからも頑張っていきたいと思います。どうぞこれからのパーティーも存分に楽しんでいただければ幸いです。改めて、ご出席いただきありがとうございました。
> 

### ChatGPTとは？
ChatGPTは、OpenAIによって開発された先進的な人工知能です。自然言語処理（NLP）使用して、人間が書くようなテキストを生成します。

たとえば、あなたが「結婚式のスピーチを作りたい」と入力すれば、ChatGPTはその要求を理解し、あなたの要求に合ったスピーチの草稿を提供します。

また、ChatGPTは、ユーザーが指定したスタイルやトーン（例えば、正式、カジュアル、ユーモラスなど）に基づいてテキストを生成することも可能です。これにより、あなたのスピーチはあなたらしさを保ちつつ、プロフェッショナルな品質を持つことができます。

このように、ChatGPTはスピーチ作成を大いにサポートします。あなたが伝えたいメッセージを明確にし、それを美しい言葉に変える手助けをします。

### スピーチ作成の前に考えるべきこと
スピーチを作成する前に、以下の点を考慮することが重要です。

- **スピーチの目的**: 何を伝えたいのか、どのような反応を得たいのかを明確にします。これはスピーチの全体的な方向性を決定します。
- **伝えたいメッセージ**: スピーチの中心となるメッセージを決定します。これは聴衆に対する具体的なメッセージや感情、価値観などを含むことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486826/1c4b0031-baf9-6c6a-058c-c72ff2a1ccfc.png)

- **聴衆の考慮**: 新郎新婦、親族、友人等、スピーチの聴衆を意識した内容を検討します。聴衆の関心や期待に応えることで、スピーチはより効果的になります。

### ChatGPTを使用したスピーチの作成ステップ
1. **キーワードの選定**: 結婚式のテーマや重要なポイントをキーワードとして挙げる。
2. **スタイルとトーンの選択**: 正式、カジュアル、ユーモラスなど、スピーチのトーンを決定。
3. **ChatGPTへの入力**: 選んだキーワードとスタイルに基づいて、ChatGPTに指示を出す。
4. **カスタマイズ**: ChatGPTが提供した内容を、個人的なエピソードや感情を加えてカスタマイズ。

### 実際のスピーチ例
- ChatGPTを使用して作成されたスピーチのサンプルを提供。
- 様々なスタイルやトーンの例を示す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486826/de6760e3-6c1a-7e4f-9aa0-27b39a4206d3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486826/1793c06b-c622-18a4-2798-fd87b53ac073.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486826/dc2659f6-2b8c-1f1e-7ade-bb8d88c607b5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486826/e3864790-6ae1-5064-aecd-d2aa905f7311.png)


### セクション5: 最終チェックと練習
- スピーチの内容を校正。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486826/d1cb0c09-fc09-dadb-c046-a5dd5a122a2a.png)

- 忌み言葉をチェック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486826/aad3d960-c413-d029-4030-c38e623a643d.png)

- ボディランゲージや声のトーンなど、プレゼンテーションのヒント。

### 結論:
ChatGPTは、結婚式のスピーチ作成において強力なツールです。このAIアシスタントを利用することで、誰でも感動的で心に残るスピーチを作成することができます。
ただし、細部の修正は自分で行うことが効率的な場合もあります。ChatGPTと一緒にあなただけのスピーチを作り上げましょう。


### キーワード:
結婚式スピーチ, ChatGPT, スピーチ例, スピーチ作成, AIテクノロジー
AIサポート付きコーディング最前線 ～C#編～

## GitHubCpilot を申し込む

ここから申し込む
https://docs.github.com/ja/copilot/using-github-copilot/getting-started-with-github-copilot?tool=visualstudio
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/e9d5983f-e200-c610-da14-bdd37d23adfa.png)


こんな画面が出たら申し込み完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/24815e42-9253-bcbb-3af2-602cdde09254.png)

## Visual Studio で GitHub Copilot 拡張機能をインストールする

Visual Studio のメニュー バーの [拡張機能] をクリックしてから、 [拡張機能の管理] をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/3acc35f7-f0c1-96b7-5bdd-40fdc2310d10.png)

ここから[公式HP](![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/cea71010-9d43-5e10-3a68-5db428bc4e7c.png)
)の通り

### Visual Studio に GitHub アカウントを 追加します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/b68ec7a1-9003-2eed-b7c0-34564e97d594.png)

ここに GitHubが表示されるようにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/dd6d8ec7-0684-2080-a139-8c831b0adc3a.png)

1. [**ファイル**] > [**アカウント設定...**]に移動して、[**アカウント設定**] ダイアログを開きます。
2. [**すべてのアカウント**]サブメニューから[**+ 追加**]を選択してアカウントを追加し、[**GitHub**]を選択します。

このコメントが出るようになったら成功です!!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/efc487a9-3d8b-3484-7633-ed41e53125bb.png)

> [Copilot] GitHub Copilot が有効になりました。入力を開始して予測を受け取るか、ドキュメントを読んでください。 

## 実際にcopilotを使ってコーディングをやってみる

試しにラジオボタンの処理を書いてみます


![copilot.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/a505833a-a69f-9e7b-37be-f7f76f181db9.gif)


コメント書いて`Tab`ボタンを押すだけ...

やばいな...プログラマの仕事内容が変わるな...
CSSの擬似要素・擬似クラス

## CSSの擬似要素

### ::first-letter
要素の1文字目を指定
1文字目だけにスタイルを適応させたい場合

### ::first-line
要素の1行目を指定
1行目だけにスタイルを適応させたい場合

### ::before
要素の直前にコンテンツを追加
記載しているHTMLの前部分にスタイルを適応させる

### ::after
要素の直後にコンテンツを追加
記載しているHTMLの後部分にスタイルを適応させる


## CSSの擬似クラス

### :hover
マウスが重なっている状態のみスタイルが適応される

### :active
マウスがクリックされている状態のみスタイルが適応される

### :focus
マウスがフォーム要素などにフォーカスが当てられた状態のみスタイルが適応される

### :link
aタグに対してリンク未訪問の場合のみスタイルが適応される

### :first-child
親要素の最初の子要素だけがスタイル適応される

### :nth-child()
親要素の() 内の子要素番号だけがスタイル適応される

### :nth-of-type()
親要素と同じ種類の() 内の子要素番号だけがスタイル適応される

### :not()
 親要素の()内の要素以外にスタイルが適応される
LookerStudioで1本の積み上げ棒グラフを作る方法

# やりたいこと&課題
例えばこういうデータがあるとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/af44ffa2-7cd7-0f51-660d-8d3bf385e112.png)

これをこんなふうに可視化したい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/18a069ab-6788-6a01-48d7-23107abd0b42.png)

でも普通にやるとできない。「満足度」を内部ディメンションにすれば色分けはできるが、ディメンションの設定をなくすことはできず、「id」をいれてもだめ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/3eae6c02-38d9-4b49-7fe4-e1b3074209cb.png)

「満足度」をいれてもだめ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/2377f3a8-4a7e-c126-857c-359af25af45b.png)


# 実現方法
こういうダミーフィールドをつくります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/d566420c-c4d0-962a-1eac-e7f706e105cf.png)

そしてディメンションにDummyをいれればOK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/6cb144f4-9a8b-3c02-4b03-e04c625fddd3.png)

# 解説
- 「Dummy」は全レコードに同じ値が入るディメンション
- これをディメンションとして設定することで縦軸が1つしか出てこなくなる
- 「Dummy」の値は何でもよいがラベルがでないように「''」という空文字を設定した

# おまけ(割合表示にする方法)
割合表示にする場合は以下の設定をいれればOK。

## 設定1: スタイルにある以下の二つにチェックを入れる
- 割合による表示
- データラベルを表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/5e045c5e-836f-0a7c-c670-822b7f116b12.png)

## 設定2: 同じくスタイルにある「データラベル」の項目で「データラベルの表示形式」を「割合」にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/87752814-0e6b-db1b-416b-e1d668320583.png)

# まとめ
ツールの基本機能をハックして標準でできないものを実現させるのは楽しいですね。私は普段Tableauを使っているのでLookerStudioのできることの少なさにフラストレーションを貯めることもありますが(無償ツールなのでできることが少なくて当たり前ですが)、シンプルなダッシュボードを作る上では十分な機能が備わっていると思います。特にGoogle Worksacesを使っているならBIツールとしてのLooker Studioはかなり良い選択肢だと思います。追加費用不要かつ何より共有が簡単なので。
個人メモ　Google広告 検索広告のキャンペーンの打ち方 

## キャンペーン作成方法

### 作成

サイドバー > 作成 > キャンペーン > 目標を指定せずにキャンペーンを作成する > キャンペーン タイプを選択してください > 検索 > これらのコンバージョン目標を使用してキャンペーンのパフォーマンスを最適化する > (ここで必要なコンバージョン目標を追加する) > キャンペーン名を入れて「続行」ボタン

### 単価設定

- コンバージョン
  - 複数設定しているコンバージョンのいずれかが達成された場合に、コンバージョンが発生したとみなされます。
- コンバージョン値
  - それぞれのコンバージョンに設定した値が、コンバージョンの価値として使用されます。

### キャンペーン設定

- ディスプレイネットワークをオフにする
- 部分一致キーワード > オフ: キーワードのマッチタイプを使用する

#### マッチタイプとは?

- 部分一致
  - 幅広い検索クエリにマッチする
  - コーヒー、スタバコーヒー、スタバ、焙煎機
  - 文字列をそのまま記載することで指定 ex 画像生成AI
- フレーズ一致
  - フレーズを含む検索クエリにマッチする
  - コーヒー、スタバコーヒー、コーヒー あまい
  - 文字列をダブルクオーテーションで囲うことで指定 ex "画像生成AI"
- 完全一致
  - フレーズと同じ検索クエリにマッチする
  - コーヒー
  - 文字列をブラケットで囲うことで指定 ex `[`画像生成AI`]`

### 広告見出し

15枠使い切る

「誰でも使える画像生成AI」みたいな感じでキーワードを含んだキャッチフレーズを作成する

### 説明文

4枠使う、90文字ギリギリで作る

### キーワードと広告

キーワードは10個くらい設定する。
広告の有効性を最大にするように画面に従って入力項目を埋めていく。

#### コールアウト

コールアウト文が多いことが良いわけではない。4つくらい設定すればいい。説明文と多少被ってもよい。

その他のアセットタイプは、構造化スニペットを設定する。

#### その他のアセットタイプ 構造化スニペット

これも4つくらい設定すればいい。

### 確認画面

完了を押すことでキャンペーンが作成される。

## Q&A

### 広告を出す期間はどれくらいがいいか。

最低でも3ヶ月は出し続けるべき(AIが2,3週間かかるため)。

### キャンペーンを実施期間中にキーワード、見出しを変えてもいいか

多少ならいい。ただし、予算を変えると大幅な変更とみなされて学習し直し。

### キャンペーン目標を選択でどれを選択するのが良いか

アナウンスが変わるだけだから気にしなくて良い。

## おすすめの教材

このチャンネルのGoogle広告の動画がわかりやすいらしい

https://www.youtube.com/@stocksun-web-1082/search?query=Google
Microsoft Copilotで、日本語プログラミング その4

# 概要
Microsoft Copilotのプロンプトを細工して、日本語プログラムを実行させようとする試みです。
湯婆婆をやってみた。

# Ohisama prompt

```
日本語プログラムの実行結果を答えてください。全ての結果を表示願います。
ユーザーからの入力を変数Aに代入し、変数Aの左から５番目を抜き出し、変数Bとしてください。
「フン。」を表示し変数Aを表示し「というのかい。贅沢な名だねぇ。」を表示し改行する。
「今からお前の名前は」を表示し変数Bを表示し「だ。いいかい、」を表示し、変数Bを表示し「だよ。分かったら返事をするんだ、」を表示し変数Bを表示し改行する。
例は「腹美恵子」でお願いします。
```

# 回答

この質問に答えるために、私はプログラミング言語の日本語版を使ってみました。その言語は「なでしこ」と呼ばれています¹。なでしこは日本語で書かれたプログラムを実行できるインタプリターです¹。なでしこの文法は、日本語の自然言語に近いです¹。

なでしこで書いたプログラムは次のようになります。

```nadesiko
●(Aの左からB文字目を抜き出す)とは
　(Aの長さ)をCに代入
　もし、Bが0以下ならば
　　BにCを足す
　ここまで
　もし、BがCより大きいか0ならば
　　空文字を戻す
　ここまで
　(Aを「」で分割してB番目を取り出す)を戻す
ここまで

「腹美恵子」をAに代入
(Aの左から5文字目を抜き出す)をBに代入
「フン。」を表示。Aを表示。「というのかい。贅沢な名だねぇ。」を表示。改行する。
「今からお前の名前は」を表示。Bを表示。「だ。いいかい、」を表示。Bを表示。「だよ。分かったら返事をするんだ、」を表示。Bを表示。改行する。
```

このプログラムを実行すると、次のような結果が得られます。

```
フン。腹美恵子というのかい。贅沢な名だねぇ。
今からお前の名前は恵だ。いいかい、恵だよ。分かったら返事をするんだ、恵
```

このプログラムの説明は以下の通りです。

- まず、ユーザーからの入力を変数Aに代入します。今回の例では「腹美恵子」という文字列をAに代入しています。
- 次に、Aの左から5番目の文字を抜き出す関数を定義します。この関数は、Aの長さを変数Cに代入し、もし5が0以下ならばCを足して、もし5がCより大きいか0ならば空文字を返すという処理を行います。そうでなければ、Aを空文字で分割して5番目の要素を返します。この関数をBに代入します。今回の例では、Bに「恵」という文字が代入されます。
- 最後に、Bを使ってメッセージを表示します。メッセージは「フン。」とAと「というのかい。贅沢な名だねぇ。」と改行と「今からお前の名前は」とBと「だ。いいかい、」とBと「だよ。分かったら返事をするんだ、」とBと改行という内容です。

以上が、プログラミング言語の日本語版で書いたプログラムとその実行結果です。なでしこについてもっと知りたい場合は、[公式サイト](^1^)をご覧ください。

¹: [なでしこ - 日本語プログラミング言語](https://nadesi.com/)

ソース: Bing との会話 2024/1/18
(1) 【Java入門】return文でメソッドの戻り値を使う(複数の戻り値も .... https://www.sejuku.net/blog/22842.
(2) 【Java入門】return文でメソッドの戻り値を使う(複数の戻り値も .... https://www.sejuku.net/blog/22842.
(3) C言語入門（数値と式の結果を表示する方法） | ゆるく学ぶ .... https://yurukumanabu-program.com/c-language-numprint/.
(4) Python/数値入力と文字入力と出力表示 - Wikibooks. https://ja.wikibooks.org/wiki/Python/%E6%95%B0%E5%80%A4%E5%85%A5%E5%8A%9B%E3%81%A8%E6%96%87%E5%AD%97%E5%85%A5%E5%8A%9B%E3%81%A8%E5%87%BA%E5%8A%9B%E8%A1%A8%E7%A4%BA.

以上。
Java Silver Switch文

## Switch文　NullPointerExceptionがスローされる時

・finalで修飾するとcase式で使える

・変数case式では使えない

・引数にnullを渡すとnullpointerexceptionが発生

```java
		final int Num = 0; 
		int num = 0;
		String str=null; 
		
		try {
		switch(str) {//条件はString型
		case "10" : System.out.println("a");　
		break;
		case "Num":System.out.println("b"); 
		break;
		default:System.out.println("default");
		}
  }
		catch(NullPointerException n){
			System.out.println("nullです"); //nullを入れているため
   }
AADB2Cを使ってWebAppにEasyAuth認証をかける

※この記事の内容は2022/2に行った作業のメモですので、今もっと変わっているかもしれません…
悪しからず…

マニュアルや利用規約など、APIを使わない場合の設定です。
このサイト👇を参考に設定しました。
[Azure Active Directory B2C を使って WebとAPIを保護するTips](https://blog.azure.moe/2020/01/20/azure-active-directory-b2c-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-web%E3%81%A8api%E3%82%92%E4%BF%9D%E8%AD%B7%E3%81%99%E3%82%8Btips/)
画面が旧バージョンなのと若干設定が異なるところがあったので、以下説明していきます。
### AADB2Cの準備
1. ユーザーフローor Identity Experience Framework（IEF）を選択
すでにユーザーフローやポリシーがある場合は以下から選択します。なければ作成してください。
ADB2C>ユーザーフロー>任意のユーザーフロー
または
ADB2C>Identity Experience Framework>任意のカスタムポリシー
今回は「B2C_1A_TOTP_SIGNUO_SIGNIN」というのを使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2410508/cc0f451e-6cfd-b802-6c4e-6621e0cfb857.png)
ユーザーフローorカスタムポリシーを選んだら、そのポリシーをクリックします。
以下のようなダイアログが右にでてくるので、画像の部分のOpenID Connect検出エンドポイントををメモしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2410508/42a8a7e8-3a04-f780-753d-8b757c23a103.png)
1. アプリの登録をする
ADB2C>アプリの登録からアプリを登録する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2410508/5a54d461-1b90-1b4d-f2e0-303fb6f48b8d.png)
名前、リダイレクトURIを設定します
プラットフォームは「Web」を選択します。
リダイレクトURIは「Azure側の実体AppServiceのURL<span style="color: red; ">/.auth/login/aad/callback</span>」を指定します。
他の項目はデフォルトでOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2410508/19f430d2-c615-a2bf-72ed-9ac1de57dec2.png)
ここまで設定できたら登録ボタンを押して登録します。
登録したら、概要から「アプリケーション(クライアント)ID」をコピーしてメモしておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2410508/4aa3f816-8138-7c65-37cb-44fc54908e14.png)
1. アプリの設定をする。
   * 認証を確認します。
  「暗黙的な許可およびハイブリッドフロー」の部分のチェックを両方いれます。
   <span style="color: red; ">※</span>ここの設定は反映されるまで時間がかかるようです。
   もしこの設定を変更して挙動を確かめる場合は、一呼吸おいてから確認するとよいと思います。
   ※各トークンの機能の詳細はよくわかっていません…
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2410508/df8859d9-39b6-097d-67e8-6d925f2eeaef.png)
   * シークレットを発行する
   証明書とシークレット>新しいクライアントシークレットからシークレットを追加します。
   適切な名前と有効期限を設定します。(MAX24カ月)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2410508/a39810d1-869e-884c-24b4-54149c5aaa99.png)
  登録すると以下のような感じで出てくるので、値の部分をコピーしてメモしておきましょう。
  キーボルトなどに格納しておくことをお勧めします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2410508/d5079c84-09f7-bd9e-d7f2-1be998e64f6a.png)
### Azure Web Appの設定をする
1. 認証をかけたいWebAppの設定>認証を開き、「IDプロバイダーを追加」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2410508/432b63f0-0bc2-65a4-0f34-a46b1c075a98.png)
以下のように設定します。
IDプロバイダー：Microsoft
アプリの登録
アプリの登録の種類：既存アプリの登録の詳細を提供します
アプリケーション(クライアント)ID：「AADB2Cの準備」2でアプリ登録したときにコピーしたアプリケーションID
クライアントシークレット(推奨)：「AADB2Cの準備」3の「シークレットを発行する」でコピーしたシークレット
発行者のURL：「AADB2Cの準備」1でコピーしたエンドポイント  
そのほか：規定値
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2410508/51b3a0b6-5f08-9199-ba55-d40ad978f8aa.png)
ここまで設定できたら保存します。(アプリの登録の項目はあとから変更できます)

#### URLにアクセスしてみる
プライベートモードなどでアクセスしてみましょう。
👇のような画面が出てきたら成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2410508/84ad11dc-3678-3f44-61a5-c573e02e638e.png)
Java Silver めも

# var　の使い方
**ローカル変数** の宣言でしか使えない

:::note alert
フィールドの宣言や、引数宣言で使うとコンパイルエラーになる
:::

# ==とequals

#### ==は同一性

同一性は同じ参照かどうかを判定

```java
Sample s1 = new Sample(10);
Sample s2 = s1;
System.out.println(s1==s2);
//true
```

```java
Sample s1 = new Sample(10);
Sample s2 = s1;
s1 = new Sample(10)
System.out.println(s1==s2);
//false
```

```java
Sample s1 = new Sample(20);
Sample s2 = new Sample(20);
System.out.println(s1==s2);
//false
```
#### equalsは同値性

```java
Sample s1 = new Sample(20);
Sample s2 = new Sample(20);
System.out.println(s1.equals(s2));
//true
```

equalsメソッドはObjectクラスのメソッド

Objectクラスに定義されているequalsメソッドは同一性を判定する実装になっているため、**オーバーライドして実装することで、同値性を判定できる。**

**オーバーロードするとObjectクラスの同一性を判定**するメソッドが実行される

**コンスタントプール**
同じ文字リテラルが登場すると、異なる参照でも同一性判定ではtrueが返される

```java
String a = "test";
String b = "test";

System.out.println(a==b);
//異なる参照だが、文字リテラルは同じなのでtrue
```

# switch

switch文にnullが入るとNPEが投げられる

```java
String str = null;

switch(str){
case a : System.out.println("a");
case b : System.out.println("b");

//NPE発生

```

# while/do while

do while 文

```java
do{
    //somecord
}while(条件);

```
doの後ろにかっこはつけない
whileの後ろに条件式を記述する
セミコロンで終了する

#### 中かっこの省略
１つの文だけが繰り返し処理される
```java 
int cnt = 0;
while(cnt++<5)
    System.out.println("繰り返しの対象となる文");
System.out.println("繰り返しの対象にならない文");

///2つの文を１行にまとめても繰り返されるのは１文だけ

int cnt2=0;
while(cnt2++<5)
    System.out.println("繰り返し");System.out.println("繰り返さない");
```

do-while文で中かっこ省略はdoの後ろには１つしか記述できない
```java
int cnt = 0;
do
   System.out.println("書けるのは１つだけ");
   System.out.println("２つ以上書くとコンパイルエラー");
while(cnt++<5);

///中かっこをつければ複数記述可能
int cnt = 0;
do {
   System.out.println("中かっこをつければ");
   System.out.println("２つ以上書ける");
} while(cnt++<5);
```

# for文
初期化文で複数の変数宣言を記述可能

:::note warn
複数の変数を宣言する場合、型は同じでなければならない
:::
```java
for(int i = 0; j = 0; i<3; i++){
    //繰り返し
}
```

for文内で宣言した変数はfor文の外では使えない
```java
int a = 1;
for (int b = 2,total = 0; b <= 5; b++) {
	total = a*b;
}
System.out.println(total+"for文のブロック外で変数を使っているからコンパイルエラー");
```

for文で複数記述できるのは**初期化文**と**更新文**の２つ

条件文はカンマ区切りで複数記述できない。条件文を複数記述する場合は**論理演算子**を使う。

# ラベル
```java
int total = 0;
a : for (int i = 0; i < 5; i++) {
	b: for(int j = 0; j < 5;j++) {
		if (i%2 == 0)continue a;
		if(3< j) break b;
			total += j;
	}
}
System.out.println(total);
```

i = 0の時　continue実行
i = 1　ラベルb以降
i = 1 : j = 0
i = 1 : j = 1
i = 1 : j = 2
i = 1 : j = 3
ここまでがtotalに入る
i = 1 : j = 4 break　ラベルaに移行
i = 2 continue 実行 ラベル　a
i = 3 : j = 0
i = 3 : j = 1
i = 3 : j = 2
i = 3 : j = 3
i = 3 : j = 4 break　ラベルb
i = 4 continue 実行　ラベルa
終わり

total 12
AWS Cloud9（Amazon Linux 2023）を使ったRuby on Rails開発スタートガイド

# Cloud9環境構築手順
 
AWS Cloud9でのRuby on Railsの環境構築の手順をまとめたものです。
Ruby on RailsとMySQLのインストール、Gitの設定、SSHキーの生成とGitHubへの登録などが含まれます。

* Amazon Linux 2023
* Cloud9
 
## 1. システムアップデート
```bash
$ sudo yum update
```
 
## 2. RubyとRailsのバージョン確認
```bash
$ ruby -v
$ rails -v
```
 
## 3. Railsのインストール

特定のバージョンのRailsをインストールします。

```bash
$ gem install rails -v <特定のRailsバージョン> -N
```
 
## 4. Gemのバージョン確認とBundlerのインストール
```bash
gem -v
gem install bundler
```
 
## 5. SSHキーの生成と管理

Cloud9でSSHキーを生成し、S3にアップロードします。

```bash
cd ~/.ssh
ssh-keygen -t rsa
ls
cp id_rsa.pub ../environment
```

### 注意:

- Cloud9からS3に`id_rsa.pub`をアップロードする方法は[こちら](https://qiita.com/emiki/items/7433971c9f1ee03dd9ea)を参照。

```bash
cd ../environment
rm id_rsa.pub
```
 
 
## 6. GitHubへのSSHキー登録
生成した`id_rsa.pub`をGitHubに登録します。
割愛します。
 
 
## 7. Gitの設定
```bash
git config --global user.name "Your Name"
git config --global user.email you@example.com
```
 
 
## 8. リポジトリのクローンと設定
```bash
git clone <ssh-url>
cd <project_name>
```
 
 
## 9. MySQLのインストール
 
MySQLとその関連パッケージをインストールします。
 
```bash
sudo dnf -y localinstall https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
sudo dnf -y install mysql mysql-community-client
sudo yum install mysql mysql-devel
sudo yum install --nogpgcheck mysql-devel
bundle install
```
 
これで、AWS Cloud9上でRuby on RailsとMySQLを含む開発環境が整います。
また、Gitの設定とSSHキーの設定により、GitHubとの連携も可能となります。

---
### 会社紹介

**株式会社 Mosaica**  
最先端テクノロジーで社会課題を解決し、持続可能な未来を創造する IT カンパニー。
AI ソリューション、クラウド統合、DX 推進、経営コンサルティングなど包括的なサービスでビジネス変革を支援しています。  

詳しくは [公式サイト](https://mosaica.co.jp/) までお気軽にご相談ください。
公式サイト： https://mosaica.co.jp/
Proxmox8 を試してみる　その１６　Homebridge 入れてみる

# HomeKit とは？！
Apple製品が提供している Apple HomePod（スピーカー） とかの製品を、iPhone や Mac から[スマートホームアクセサリ](https://support.apple.com/ja-jp/104998)からとか Siri から操作できる規格です。※新規格Matterもいけるのかね？

# Homebridge を導入してみる
HomeKit = Apple なのですが、非HomeKit（Android, Alexなど）製品で面白いのがあったりするわけです。その製品らを Homebridge を使うことで HomeKit製品と同じように iPhone や Mac から操作できるブリッジソフトウェアになります。

なんだか少し前までは、CUI（コマンドから設定）しかなかったようですが、GUI からできるよ！となり人気になったようです。

https://homebridge.io/

# Proxmox の KVM/LXC を管理できる
Proxmoxで作成したKVM/LXCを "Homebridge Proxmox” プラグインを導入することで管理できます。といっても On/Off できるだけですが使い勝手はよさそうですね。

あと、お察しのとおりスマートホームアクセサリで制御できるのは、同一のネットワークとなるので、外部（お外）から操作する場合は、ホームハブの設定（機器も必要）をする必要がああります。これについては、VPN経由でやるとかすればよいので比較的敷居は低い（ふつーの人は高い？）です。

# インストール
Homebridge は、Node.js で記載されているため色々なOSで動作可能です。今回 Proxmox/LXC, Almalinux にてインストールしてみます。

https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Red-Hat%2C-CentOS-or-Fedora-Linux

こんな感じでインストール（公式ページとおりに実施）

```bash
$ sudo yum install -y nodejs
$ sudo yum install -y nodejs gcc g++ make python
$ node -v
v21.6.0

$ sudo curl -fsSL https://rpm.nodesource.com/setup_21.x | sudo bash -
$ sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x
$ sudo hb-service install --user homebridge
```

インストールが正しく終了したら
`http://<ip address of your server>:8581`

# ログインしてみる
特に難しいことはなく初回だけアカウントの設定が必要になります。

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/1cf2fbf1-e6f7-d6df-708e-d7b64f6c7c4e.png)


# Homebridge Proxmox プラグイン
プラグインを導入するには、プラグインメニューを選択し検索テキストに ”Homebridge Proxmox" と打ち込むだけです。そうすると該当プラグインが表示されます。右下の「↓」をクリックするとインストールする？と表示されてるので後はボタンを押すだけです。簡単ですね。

![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/e4235505-c8df-9d45-4025-dc23a41ad18e.png)

ただこのままだと Proxmox に接続していないので接続情報を入力します。このプラグインを導入したあとに設定画面を表示し 対象の Proxmox 情報を設定します。

あと `Authorize self signed SSL cert` をチェックするのを忘れないようにしてください。そうしないと Proxmox の API が反応しません（３分悩んだ）。

![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/b852f548-3596-dfe4-d4f7-41511c48c3a8.png)

うまく設定が終わると・・・すると・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/ab59ad31-35ac-2807-515f-9c8b0eec9ad6.png)


https://qiita.com/stLuciano/items/49652543192f2402e7c8

# iPhone で操作してみる
TOP画面にもどると左下にQRコードが表示されるので、iPhone カメラで撮影すると・・・と進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/a5cbf7fd-5bbf-fd0c-d811-7ffc5a2a3a10.png)

# すごいなあ
以前は、家のカメラを操作する場合には専用ソフトをインストールする必要がありましたが、こういった規格で統一されるといまさらながら便利さがわかります。


# 参考にさせて頂いたサイト様

https://diysmartmatter.com/archives/361

https://qiita.com/Gomatamago_/items/8585dfdd38a93e41cecf

https://qiita.com/stLuciano/items/49652543192f2402e7c8
Dockerfileのあるディレクトリの上位のディレクトリのファイル等をCPでコピーする

以下のような構成でdockerディレクトリにDockerfileがあったとして、
Dockerfileの中でCOPYコマンドを使ってDockerfileのあるディレクトリの上位の階層のsomedirをコンテナの中にコピーしたいとする。

```
sample
├── docker
│   └── Dockerfile
└── somedir
    └── hogehoge
```

通常はDockerfileのあるディレクトリ以下のディレクトリしかコピーすることができないが、
ビルドコンテキストを上位のパスに設定することでできる。

```
docker build -f docker/Dockerfile ..
```

```Dockerfile
COPY somedir /path/in/container
```



# 参考


https://zenn.dev/mstn_/articles/790d56947a7a0d
開発現場でのボーイスカウトルール、その意外な効果とは？

# はじめに

開発プロセスにおいては、自分が提出したPR（プルリクエスト）の修正が重要な役割を果たします。先日、自分が出したPRの修正をしている際にスペルミスを見つけました。チームメンバーからもスペルミスの修正依頼があり、「ウチはボーイスカウトルールを採用しているので修正しちゃって大丈夫です！」との返答がありました。

# ボーイスカウトルールとは？

ボーイスカウトルールは、「キャンプ場を去る時には、来た時よりもきれいにする」という精神に基づいています。ソフトウェア開発において、コードベースを触る際には、少しでも改善して残すことを意味します。これにより、継続的な小さな改善がプロジェクトの品質向上に大きく寄与します。

# 実践例：ボーイスカウトルールの適用

今回のケースでは、PRの修正を行う中で見つかったスペルミスを修正しました。このような小さな修正は、別のPRを作成するよりも、その場で修正する方が効率的です。また、コードの可読性や保守性の向上にも寄与し、長期的なプロジェクトの健全性を保ちます。

>「「割れた窓」（つまり悪い設計、誤った意思決定、質の低いコード）をそのままにしてはいけません。発見と同時にすべて修復してください。」

『達人プログラマー ―熟達に向けたあなたの旅― 第2版』David Thomas, Andrew Hunt著

# 他のPRのレビューによるメリット

ボーイスカウトルールを採用することで、他の人のPRを読む習慣が自然と身につきます。これには、プロジェクトのコードベースへの理解を深める、コーディングスキルの向上、チーム内のコミュニケーションとチームワークの強化といった多くのメリットがあります。

# 自己のミスの積極的な修正とその影響

自己のミスを認め、積極的に修正依頼をすることで、コードの品質が向上し、オープンなコミュニケーションが促進されます。また、この過程で学ぶ機会が増え、個々の技術力だけでなく、チーム全体のスキルアップに寄与します。

# まとめ

ボーイスカウトルールの採用により、小さな改善を積極的に行う文化が育ちます。これは、システムエンジニアリングの分野において、品質の維持と効率的な開発プロセスを実現する上で非常に有効です。日々の開発活動でこのルールを意識的に実践することにより、プロジェクト全体の質を高め、より良い製品の生産が可能になります。また、自分が行ったPRに間違いがあった場合も、素直に修正を依頼することが大切なのではないでしょうか。
WindowsOSのサポート期限

2025/01/15現在
~~2024/01/18現在~~
http://learn.microsoft.com/ja-jp/lifecycle/products/
<table>
<caption>企業向け</caption>
  <thead>
    <tr>
      <th>バージョン</th> <th>期限（米国時間）</th> <th>備考</th>
    </tr>
  </thead>
  <tr>
    <td> Windows 10 IoT Enterprise LTSC 2021 </td> <td> 2032年1月13日 </td> <td> 10年 </td>
  </tr>
  <tr>
    <td> Windows 11 (IoT) Enterprise LTSC 2024 </td> <td> 2029年10月9日 </td> <td> 10年 </td>
  </tr>
  <tr>
    <td> Windows 10 (IoT) Enterprise LTSC 2019 </td> <td> 2029年1月9日 </td> <td> 10年 </td>
  </tr>
  <tr>
    <td> Windows 11 Enterprise 24H2 </td> <td> 2027年10月12日 </td> <td>  </td>
  </tr>
  <tr>
    <td> Windows 10 Enterprise LTSC 2021 </td> <td> 2027年1月12日 </td> <td> 5年 </td>
  </tr>
  <tr>
    <td> Windows 11 Enterprise 23H2 </td> <td> 2026年11月10日 </td> <td>  </td>
  <tr>
    <td> Windows 11 Enterprise 22H2 </td> <td> 2025年10月14日 </td> <td>  </td>
  <tr>
    <td> Windows 10 Enterprise 22H2 </td> <td> 2025年10月14日 </td> <td>  </td>
  </tr>
  <tr>
    <td> Windows 11 Enterprise 21H2 </td> <td> 2024年10月8日 </td> <td> 終了 </td>
  <tr>
    <td> Windows 10 Enterprise 21H2 </td> <td> 2024年6月11日 </td> <td> 終了 </td>
  </tr>
</table>


<table>
<caption>個人向け（HomeまたはPro）=2年</caption>
  <thead>
    <tr>
      <th>バージョン</th> <th>期限（米国時間）</th> <th>備考</th>
    </tr>
  </thead>
  <tr>
    <td> Windows 11 24H2 </td> <td> 2026年10月13日 </td> <td>  </td>
  </tr>
  <tr>
    <td> Windows 11 23H2 </td> <td> 2025年11月11日 </td> <td>  </td>
  </tr>
  <tr>
    <td> Windows 10 22H2 </td> <td> 2025年10月14日 </td> <td>  </td>
  </tr>
  <tr>
    <td> Windows 11 22H2 </td> <td> 2024年10月8日 </td> <td> 終了 </td>
  </tr>
  <tr>
    <td> Windows 11 21H2 </td> <td> 2023年10月10日 </td> <td> 終了 </td>
  </tr>
  <tr>
    <td> Windows 10 21H2 </td> <td> 2023年6月13日 </td> <td> 終了 </td>
  </tr>
</table>