OmniAICreator/Qiita-1.07M huggingface dataset:
Primary Keyが設定されているカラムを確認したい

Primary Keyが設定されているカラムを確認したい場合、`USER_CONS_COLUMNS`テーブルと`USER_CONSTRAINTS`テーブルを利用します。

**例**

以下のようなテーブルT1、T2、T3があるとします。

```SQL
CREATE TABLE T1 (
  COL1 INT NOT NULL PRIMARY KEY,
  COL2 INT NOT NULL,
  COL3 INT NOT NULL,
  COL4 INT NOT NULL,
  COL5 INT NOT NULL
);

CREATE TABLE T2 (
  COL1 CHAR NOT NULL,
  COL2 CHAR NOT NULL,
  COL3 CHAR NOT NULL,
  COL4 CHAR NOT NULL,
  COL5 CHAR NOT NULL,
  PRIMARY KEY (COL1, COL2)
);


CREATE TABLE T3 (
  COL1 DATE NOT NULL,
  COL2 DATE NOT NULL,
  COL3 DATE NOT NULL,
  COL4 DATE NOT NULL,
  COL5 DATE NOT NULL,
  PRIMARY KEY (COL1, COL2, COL3)
);
```

T1、T2、T3のPrimary Keyが設定されているカラムは以下のようなクエリで取得できます。

```SQL
SELECT TABLE_NAME, COLUMN_NAME, POSITION
FROM USER_CONS_COLUMNS UCC
WHERE TABLE_NAME IN ('T1', 'T2', 'T3')
AND EXISTS (
  SELECT *
  FROM USER_CONSTRAINTS UC
  WHERE UCC.OWNER = UC.OWNER
  AND UCC.CONSTRAINT_NAME = UC.CONSTRAINT_NAME
  AND UCC.TABLE_NAME = UC.TABLE_NAME
  AND UC.CONSTRAINT_TYPE = 'P'
)
ORDER BY TABLE_NAME, POSITION
```

このクエリの実行結果は以下の通りになります。

|TABLE_NAME|COLUMN_NAME|POSITION|
|:-|:-|:-|
|T1|COL1|1|
|T2|COL1|1|
|T2|COL2|2|
|T3|COL1|1|
|T3|COL2|2|
|T3|COL3|3|

**環境情報**

- Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
独自のページ内検索をCtrl+Fでフォーカスするために、ブラウザのショートカットキーを奪う方法

# 概要
システム内に設けた検索窓に`Ctrl+F`で遷移できると便利な場合があります。PDFをブラウザで閲覧すると`Ctrl+F`でPDF内検索が開きますが、まさにあれです。

# 実現方法
`addEventListener`でkeydownを検知し、デフォルトの動作を無効化しましょう

```javascript
document.addEventListener('keydown', (evt) => {
  if (evt.ctrlKey && evt.key === 'f') {
    // ブラウザの検索ショートカットを無効にする
    evt.preventDefault()

    // 検索窓をフォーカスさせる
    searchInputRef.value.focus()
  }
})
```

# 参考
https://qiita.com/daisei-yoshino/items/171779e71be860f94c02

# まとめ
地味な機能ですけど、結構嬉しかったりする。案外簡単に実現できてうれしかった。
TIME EXCEEDEDメッセージによるトレースルート

>トレースルートは、ネットワーク上で特別な権限を取得することなく、`ホストからあて先IPアドレスへの経路上のルーターを調べる`ことができる。

### 経由するルーターにつく時にパケットカウンタが０となる数値を送信元へ送信する
>その方法は実はシンプルで、一連のパケットを宛先に不送信するだけである。まず、TtLが1のパケットを送信し、その後の２、3...とこの値をを順次増やしていく。それらの`パケットカウンタは経路上にあるそれぞれのルーターでちょうどゼロになるため、各ルーターは順にTIME EXCEEDEDメッセージをホストへ返送`する。

### ルーターの経路上の統計情報やタイミングの情報を取得できる
>ホストは、それらのメッセージから経路上の`ルーターのIPアドレスや経路上の各部分における統計情報やタイミングの情報を収集`できる。これはTIME EXCEEDEDメッセージの本来の目的とは異なるが、`ネットワークのデバッグを行う上で常に便利なツール`となっている。

https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/
【Laravel】初学者向け－Laravelとは？

まず、この記事はLaravelとは何？、Laravelについて初めて触るといった方の記事向けとなります。

## そもそもLaravelとは何？

**Laravelとは**
PHPのフレームワークでは代表的なもの。PHPでまとまった便利機能の集まり。


## フレームワークとは？
**フレームワークとは**
枠組みであり、プログラミングのひな形をあらかじめ事前に準備しているもの。


## Laravelでできることは？
Laravelでできる機能は、
* ログイン機能
* データベースとのやりとり
* API連携
* 二段階認証など


## Laravelの概要

MVC（エムブイシー）モデルという役割分担でそれぞれされている。

**MVC（エムブイシー）モデルとは**
* Model（モデル）…データベースとやりとり
* View（ビュー）…見た目
* Controller（コントローラ）…処理
下記2点は＋αでよく使われる
* Routing（ルーティング）…どのアクセスがきて、振り分けるかの役割
* Migration（マイグレーション）…データベーステーブルの履歴管理
→テーブルを作ったり、列を追加したりする

## Laravelの構成（イメージ図描いてみた）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929458/b236edea-1830-d960-2bfd-36962a9d1b77.png)

**上記の図の流れ**
①クライアント→PCやスマホからルーティングにアクセス
②ルーティングからどのコントローラを使うか
③コントローラで処理をし、ビューで返しユーザ側に見せる

その他にもルーティングに行きコントローラからモデル経由でデータベースに登録
またはデータベースから情報を持ってきたりする→それをビュー側に渡す

## まとめ
Laravelは、PHPのフレームワークでは代表的なものであり、MVC（エムブイシー）モデルといった構造となっている。
ICMP

# ICMP インターネット制御メッセージ・プロトコル
>インターネットの動作はルーターによって監視されている。ルーターの処理において何か想定外のことが起こった場合には、その事実がICMP（Internet Control Message Protcol:インターネット制御メッセージ・プロトコル）によって送信元へ知らされる。

# 主要ICMPメッセージの種類
### あて先到達不能(DESTNATION UNREACHABLE)メッセージ
>ルーターが`あて先の場所を特定できない`場合や、DFビット付きのパケットが小さなパケットしか扱えないネットワークを追加する必要があり、転送できない場合に使用される

### TIME EXCEEDED（時間超過）メッセージ
>パケットのTtL(生存期間)`カウンタが０になり、パケットが破棄される時に使用`される。これはパケットが`ループに陥っている`場合や、`設定されたカウンタの値が小さすぎる`場合に、それらを示す兆候となる。

https://qiita.com/masatom86650860/items/58ee5fc49c4b13a5b6d4

### PARAERER PROBLEM(パラメータ問題)メッセージ
>`ヘッダー・フィールド内で不正な値が検出`されたことを表す。この問題は、送信元ホストか、転送を行ったルーターのIPソフトウェアにバグがあることを示している。

### SOURCE QUENCH（送信元抑制）メッセージ
>`パケットを送信しすぎているホストに対して送信を抑制させる`ために使用されていた。このメッセージを受け取ったホストは、`自身の送信速度を下げる`。ただし、輻輳が起こった場合には、`SOURCE QUENCHメッセージそのものが輻輳をさらに悪化させる`ことや、メッセージに対してホストがどのように対応すればよいかが明確でないことから、`現在ではほとんど使用されない`。

### REDIRECT(リダイレクト）メッセージ
>`パケットのルートが正しくないとルーターが判断した時に使用`される。ルーターは、このメッセージを用いることで、送信元ホストに対してより良いルートへの更新を促す

### ECHO(エコ-)メッセージ、ECHO REPLY（エコー応答）メッセージ
>`あて先へ到達可能か、またあて先ホストが起動しているかを調べる`ために送信される。エコー・メッセージを受け取ったあて先ホストは、エコー応答メッセージを送り出す。
これらのメッセージは、インターネット上にホストが存在し、起動していることを確認するpingコマンドで用いられる

### TIMESTAMP REQEST(タイムスタンプ要求)メッセージとTIMESTAMP REPLY(タイムスタンプ応答)メッセージ
>要求メッセージの到着時刻とそれに対する応答時刻が応答メッセージに記録される点が異なる。この機能は、`ネットワークの性能を計測`する際に使用される

### ROUTER ADVERTISEMENT(ルーター・アドバタイズ)メッセージ、ROUTER SOLICITATION(ルーター要請)メッセージ
>`ホストが近隣ルーターを見つける`ために使用される。ホストが、`ローカル・ネットワーク外へとパケットを送信できるルーターのIPアドレスを、少なくとも一つは知っておく必要`がある。

https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/
【Udemyで脱初心者】Pythonで学ぶSOLID原則・デザインパターン

# はじめに
Udemyにはたくさんお世話になってるので、　Qiitaのプレゼントカレンダーが公開されてから、何か貢献したいなと思ってたので、出せて嬉しいです！

SOLID原則とは？デザインパターンって知ってるど実際にコードで書くのは大変だな、というPython初心者の筆者が、個人的にオススメの講座をご紹介します。

この記事は、「Udemyおすすめ講座をシェアしよう！ by Udemy Advent Calendar 2024」の17日目の記事です。


## サマリ
オススメ講座： "【脱オブジェクト指向初心者！】Pythonで学ぶSOLID原則・デザインパターン"
Pythonを通して、SOLID原則とデザインパターンを学習できる講座です。

URL： https://www.udemy.com/course/python-solid-design-patterns


## オススメしたい理由
1. SOLID原則をPythonのコードを通して理解できる
2. たくさんあるデザインパターンを学べる
3. 資料付きなので、コードともに見直せる

## 自己紹介・想定読者
エンジニアで普段はphpをメインでプログラミングしてますが、たまにPythonでバッチ作ったりもしてます。趣味でRustも勉強している中堅エンジニアです。

そのため、以下の読者を想定しています。

1. 次のステージへ進みたいと思ってる方
1. SOLID原則は知らない、または知ってるがコードで表現するとイメージがわかないので、知りたい方
1. 同様にデザインパターンを知らない、または知ってるがコードで表現するとイメージがわかないので、知りたい方

## 受講した経緯
Pythonに詳しいわけではないですが、もっと知りたいなと思ったのと、SOLID原則とデザインパターンについて、Pythonで知れたら今後の役に立ちそうだなと思って、ちょうどセールでかなりお得だったので買いました。


## オススメしたい理由

### SOLID原則が理解でき、綺麗なコードを理解できる

原則ごとに動画が用意されており、ハンズオンしながら、講義を進めることができます。
ネットなどでSOLID原則を読んだだけでは、コードで表現するのは難しいと思いますが、一度、手を動かし、コードで表現することで、より理解が深まると思います。

### デザインパターンを知ることで実務に役立つ

デザインパターンも同じようにパターンごとに動画が用意されてます。たくさんパターンがあるので、全部覚えるのはさすがに難しいですが、こんな例のときにこのデザインパターンを使います、と説明があるので、採用パターンがわかるだけでも、とてもメリットがあると思います。
実務でステータスコードごとに処理分けたい、でも綺麗な設計で開発するにはどうすれば・・思ったときがありました。そんなとき、講座で学んだデザインパターンは使えないか？と思い、見返してみると、Strategyパターンで実装するがよさそう、ということがわかり、記載なコードで実装することができました。
この講座を受講してなかったら、良くない設計で実装していた可能性はあったと思います。


# まとめ

SOLID原則やデザインパターンを実務で使うことは頻繁にはないと思います。
ですが、設計に困ったり、コードを綺麗に書きたいとき、これを知ってるのと知らないのではちょっと違ってくるのかなと、思ってます。
また、意識でコードを書くことで抽象化された可読性の高いコードを書けるようにもなってくると思うので、振り返りたいときは、コースの資料に目を通すなどしていきたいと思います。
適切な命名について最近思うこと

## 記事の内容
この記事は[フリュー Advent Calendar 2024](https://qiita.com/advent-calendar/2024/furyu)の15日目の記事となります。

ずっとインフラ周りの業務を担当していたのですが、最近SpringBootを使って「お問い合わせツール」の開発業務に携わることなりました。そこで、命名の大切さをいろんなシーンで感じたので、記事にまとめてみました。

## 命名の大切さを感じたシーン
* データベースのテーブル設計をしてみて
* APIのURL設計をしてみて
* O'reillyの[リーダブルコード](https://www.oreilly.co.jp/books/9784873115658/)を読んでみて

#### データベースのテーブル設計をしてみて
弊社は、Webサービスやゲーム、筐体など数多くのサービスをお客様に提供しています。お問い合わせツールを作成するにあたって、問い合わせをサービスごとに分類する必要があります。そのためサービスを管理するテーブル名を何にするか定義する必要がありました。まずはテーブル名を検討するのですが、サービスなので`Services`でいいなとすぐ決めました。しかし、実装を進めていく中で、お客様に提供している`Service`とサービス層のファイル名に使われる`Service`が同じ英単語のため、コード上で`Service`がどっちの意味かわかりにくい箇所ができてしまったと気づき、再検討となりました。

そして次に候補に挙がった`Products`
よい単語だと思ったのですが、これも開発でよく使われる`本番環境=Product`と被ってしまうと指摘を受け再検討となりました。

最終的に`Contents`という単語を採用しました。

###### 学んだこと
* 予約語(開発でよく使われる単語)と被らないことが重要！
* テーブル名からどんなデータが入っているか予測できることが重要！

テーブル名１つにしても名前を決めることは大変です。
命名する時に`どんな基準で考えるか`(学んだこと２点)のポイントをまとめておくと良いです！チーム内でいろんな候補が出てきましたが、基準を設けることで、迷わない対策が取れました。

#### APIのURL設計をしてみて
「指定したコンテンツID(contentId)に紐づくタグ一覧を、グループ付けした状態で表示させる」機能のプルリクエストを出したところ、下記のような指摘をもらいました。

`http://localhost:8080/tag/list`
→タグがリストを持っているわけではなく、タグのリストですよね？

`http://localhost:8080/tags/1`
→/tags/{tagId}を連想してしまいますよね！？
contentIdで検索するという意図が見えないですよね！？

`http://localhost:8080/tags?contentId=1`
→グループ付けした状態で表示させたいので、tagsではなく、tag-groupsですよね！？

最終的に`http://localhost:8080/tag-groups?contentId=1`を採用しました。

###### 学んだこと
* `どのようなリソースを扱うか`が明確にわかるURLがよい！
* 誤解されない名前にする！

何の情報を扱うAPIなのか見てすぐわかる名前にしておくことで混乱も起こらない。同じような機能で書き方が異なるのも避けたいので、API命名規則を決めて運用することになりました。


#### O'reillyのリーダブルコードを読んでみて
「プログラミング初心者は読んでおいた方がいい」とおすすめされ、お問い合わせツールの開発を進める合間に読んでいました。
古い本ですが「とても役に立つ」や「この本を読んでおけば、あんなにプルリクエストで指摘を受けて凹むことなかったかも」など社内でも評判のいい本です。この本の中でクラス名やメソッド名を考える時のアドバイスが書かれていました。印象的だったのが、

* 名前に情報を埋め込む
    * 誤解されない名前にする
    * 明確な単語を選ぶ
    * 具体的な名前を使って、物事を詳細に説明する

例えば、よく使いそうな`get`や`stop`について書かれていました。
`get`とは、どこからとってくるのかが明確でない！
`Stop`も動作に合わせて、`Kill`,`Resume`,`Pause`など使い分けてもよい
など。

###### 学んだこと
* 象徴的な単語よりも、より具体的な単語を選択する
* 英単語には同じような意味を持つものが存在するので、ケースに応じてより具体的な単語を選択する

初めてコードを見る人に対して明確になっていることが大切！理解するために時間がかかってしまうとかなりのタイムロスになることを学びました。


## なぜ適切な命名がこんなに大切なのか？
私は今までバリバリコードを書く開発をしてこなかったので、正直、命名がこれだけ大切だとは思っていませんでした。
```
最善の名前とは、誤解されない名前である。
つまり、君のコードを読んでいる人が、君の意図を正しく理解できるということだ。
```
リーダブルコードに書いていました。

自分が理解していればそれでいいではなく、初めてテーブル設計やコードを見る人に対して明確になっていることが大切！誤解されやすい名前や曖昧な単語が使われていたら、理解に時間を費やしてしまいタイムロスになります。また、バグを生まないようにできるメリットも大事なので、品質の高いソフトウェアを作るためにも、わかりやすい命名は欠かせません！

より早く正確に実装を進めるためにも、命名がいかに大切かを学びました。
最後まで読んでくださり、ありがとうございました。

それではみなさま、HAPPY MERRY X'MAS!!!
Flex 従量課金プラン使う際の GithubAction での Azure Functions デプロイの注意点２

前回、Flex 従量課金プランでのGithubAction のymlファイルでの注意点について記事にしましたが、  
あれからもう一点詰まる場所がありました。そこの共有です。

 https://qiita.com/taisyu6789/items/2efc663da14bdbac7205

# 基本認証を最初のリソース立ち上げでONにする

こちらデフォルトでは、「無効にする」になっており、読み飛ばすと無効となり、自動デプロイ時に認証関連でエラーになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846056/e5336c99-50df-1d36-7a07-82b9c743c11f.png)

### 実際にGitHubActionで出るエラー
```powershell
Error: Execution Exception (state: ValidateAzureResource) (step: Invocation)
Error:   When request Azure resource at ValidateAzureResource, Get Function App Settings : Failed to acquire app settings from https://<scmsite>/api/settings with publish-profile
Error:     Failed to fetch Kudu App Settings.
Unauthorized (CODE: 401)
Error:       Error: Failed to fetch Kudu App Settings.
Unauthorized (CODE: 401)
    at Kudu.<anonymous> (/home/runner/work/_actions/Azure/functions-action/v1/lib/appservice-rest/Kudu/azure-app-kudu-service.js:72:23)
    at Generator.next (<anonymous>)
    at fulfilled (/home/runner/work/_actions/Azure/functions-action/v1/lib/appservice-rest/Kudu/azure-app-kudu-service.js:5:58)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
Error: Deployment Failed!
```

## リソース作成時しか変更できないっぽい
 
たちの悪いことにこちら最初に設定してしまうと2024年11月現在それっぽい場所は合っても、変更できないです。(僕は変更する方法がわかりませんでした。)
KEDAでKubernetes Podのゼロスケールを実現する

## 本記事
KEDAを利用してKubernetes Pod数をゼロにする（ゼロスケール）方法を紹介します。

## KEDAとは
イベント駆動型のオートスケーラーで、Podの水平スケールを実現するKubernetesコンポーネントです。様々な外部メトリクスをサポートしています。

https://keda.sh/


## ゼロスケール
Kubernetesの標準APIリソースであるHorizontal Pod Autoscaling(HPA)ではゼロスケールはできません。

厳密には[feature gate](https://kubernetes.io/ja/docs/reference/command-line-tools-reference/feature-gates/)の`HPAScaleToZero`を有効化すれば可能ですが、Kubernetes `v1.29`時点ではAlphaとなっています。

KEDAではゼロスケールを実現することが可能です。

## ScaledObject
スケール対象と、その対象をスケールさせるトリガーを設定するカスタムリソースです。
今回は Cronを使用します。

https://keda.sh/docs/2.16/concepts/scaling-deployments/#scaledobject-spec

https://keda.sh/docs/2.16/scalers/cron/

### Cronの設定

ゼロスケールの設定例です。毎日10時から19時の間はPodが2台稼働し、それ以外の時間帯でPodのゼロスケールを実現しています。

ポイントとしては、`desiredReplicas`に`0`を設定することはできません。cron設定ではゼロスケールの時間帯を指定するのではなく、Podが稼働する時間帯を指定します。

```
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: sample-scaledobject
spec:
  scaleTargetRef:
    name: sample-deployment
  maxReplicaCount: 3
  minReplicaCount: 0
  triggers:
  - type: cron
    metadata:
      timezone: Asia/Tokyo
      start: 0 10 * * *
      end: 0 19 * * *
      desiredReplicas: "2"
```

## 終わりに
KEDAでKubernetes Podのゼロスケールを実現する方法を紹介しました。開発環境など平日の深夜帯や休日にPodを稼働させる必要がない場合、ゼロスケールでコストの削減が見込めます。ぜひ活用してみてください。
【JavaScript】備忘録② innerHTML、innerText、textContentの違いについて

JavaScriptを使ってHTMLのテキストを操作しようと思ったとき、使うものとして出てくるのが「innerHTML」「textContent」「innerText」だと思います。３つもあるけど、どれを使ったらいいの！？となることがありましたので、改めてそれぞれの特徴と用途をまとめたいと思います！

# ◆innerHTML
要素内のHTMLを含むすべての内容を取得または更新することができます。

::: note info
HTMLタグをそのまま文字列として取得・更新できます。
JavaScriptで要素を動的に生成したい場合に便利。
ただし、外部から提供された値を直接設定すると、XSS（クロスサイトスクリプティング）の脆弱性に繋がる可能性があるため注意が必要です。
:::
::: note warn 
**クロスサイトスクリプティング（XSS） とは？？*
攻撃者が悪意のあるスクリプトをウェブページに挿入する攻撃のこと。ユーザーがそのページを表示すると、悪意のあるスクリプトが実行され、ユーザーのデータが盗まれたり、他の悪意のある操作が行われたりする可能性があります。
:::
**◆用途**
HTMLコンテンツ全体（タグを含む）を取得または更新する場合。
特に要素内のHTMLを動的に変更したい場合。

# ◆innerText
要素内の表示されているテキストを取得します。
ただし、CSSスタイルによって非表示になっているテキスト
（たとえば、display: noneの要素のテキスト）は含まれません。

::: note info
textContentに似ていますが、ブラウザ上で
ユーザーに見えている内容のみを操作します。
見た目に依存する内容を取得したい場合に有効。
:::
**◆用途**
ユーザーに表示されているテキストだけを操作したい場合。

# ◆textContent
要素内のテキスト内容（すべての子要素を含む）を取得または更新します。

::: note info
HTMLタグは無視され、純粋なテキストのみを操作します。
HTMLとして解釈されることはないため、セキュリティリスクが少ない。
レンダリングされていない隠し要素も含めて取得します。
:::

**◆用途**
HTML構造を無視して、純粋なテキストを取得・設定する場合。

# まとめ

|  |HTMLタグ|CSSの影響|主な用途|
|---|---|---|---|
|innerHTML|表示する|受けない |HTML構造全体を操作する|
|textContent|表示しない|受けない|純粋なテキストを取得・設定する|
|innerText|表示しない|受ける|表示されているテキストを取得・設定する|

::: note info　
**使い分けのポイント**
- HTML構造を操作したい場合
→ innerHTMLを使用（ただし、入力内容の検証を忘れずに）

- 純粋なテキストを扱いたい場合
→ textContentを使用

- 表示内容に基づいて操作したい場合
→ innerTextを使用
:::
【Delphi】Delphi XE6 について

# はじめに
**『Delphi XE6』** についての概要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/61c781c3-21af-a430-1d06-317cbf5f3780.png)

# 概要
製品概要です。


| 項目 | 説明 |
|:---|:---|
| 製品名 | Delphi XE6 / Appmethod 1.14 |
| コードネーム | Proteus |
| 発売年 | 2014  |
| 発売元 | Embarcadero Technologies |
| ビルドバージョン | 20.0  |
| コンパイラバージョン | 27.0 |
| BDS バージョン | 14.0 |
| サポートプラットフォーム | Windows (32/64 bit) / macOS (32bit) / iOS デバイス (32bit) / iOS シミュレータ (32bit) / Android (32bit) |

## 前バージョンとの違い

 - センサーコンポーネントが VCL / FMX で共通になった
 - アプリケーションテザリングコンポーネントが追加された
 - DirectX 11 のユニットが追加された
 - FireMonkey で多重解像度ビットマップが使えるようになった
 - FireMonkey で IMEMode / TabOrder が使えるようになった
 - FireMonkey の列挙型の識別子名からプレフィックスが削除された
 - IDE のツールバーアイコンがフラットデザインになった

## その他

 - デフォルトのインストールパスが `%ProgramFiles%\Embarcadero\RAD Studio` から `%ProgramFiles%\Embarcadero\Studio` へ変更になった
 - 『Documentation Insight』が付属しなくなった
 - ドキュメントに載っていないユニットスコープのリファクタリングが行われている
 - 座標 / ベクトル / 行列関連のレコード及び計算ルーチンが `System.Math.Vectors` ユニットスコープへ移動
 - FireDAC における名前のリファクタリングが引き続き進められた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/0e960919-dcd9-5b92-25cf-cf589be20dd4.png)

# おわりに

このバージョンは `高品質リリース` とされ、製品の改良がメインとなっています。

半年に一度という高速リリースのせいでアップデート費用が嵩むという事で「リチャージプラン」というものができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/ce9a580f-b151-ce25-75ff-ec4a0313cd68.png)

 - [RAD Studio、Delphi、C++Builder 向け RAD ライセンスリチャージプラン (Internet Archive: Embarcadero)](https://web.archive.org/web/20150109050041/http://www.embarcadero.com/jp/products/rad-studio/recharge)

現在のアップデートサブスクリプションに近いものです。

**See also:**

 - [Delphi / C++Builder の新機能 (2007 以降) (Qiita)](https://qiita.com/ht_deko/items/23f51b4345f5d9ef14b1)
 - [XE6 のライブラリに関するリファクタリングについて (SupportKB)](https://support.embarcadero.com/article/43863)
 - [「MS Help 2.x ランタイムがインストールされていない」というエラーを解消する (Qiita)](https://qiita.com/ht_deko/items/be1fb0aa801abbcdaa5c)
 - [オフラインインストール用に登録コードを取得する（RAD Studio/Delphi/C++Builder XE6以降、InterBase XE7以降、ER/Studio 10以降）(Support Wiki)](https://docwiki.embarcadero.com/Support/ja/%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E7%94%A8%E3%81%AB%E7%99%BB%E9%8C%B2%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%EF%BC%88RAD_Studio/Delphi/C%2B%2BBuilder_XE6%E4%BB%A5%E9%99%8D%E3%80%81InterBase_XE7%E4%BB%A5%E9%99%8D%E3%80%81ER/Studio_10%E4%BB%A5%E9%99%8D%EF%BC%89)
 - [手動アンインストール手順（RAD Studio XE6）(Supprt Wiki)](https://docwiki.embarcadero.com/Support/ja/%E6%89%8B%E5%8B%95%E3%82%A2%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86%EF%BC%88RAD_Studio_XE6%EF%BC%89)

# 索引
[ [← Delphi XE5](https://qiita.com/ht_deko/items/b035425182913df5a48c) ] [ [↑ 目次へ](https://qiita.com/ht_deko/items/eb96629d705542e3a980) ]  [ [→ Delphi XE7](https://qiita.com/ht_deko/items/b2f9e8b52e7785f65cfe) ]
【Delphi】Delphi 5 について

# はじめに
**『Delphi 5』** についての概要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/af420291-398f-696b-4fdb-744a8758aa18.png)

# 概要
製品概要です。

| 項目 | 説明 |
|:---|:---|
| 製品名 | Delphi 5|
| コードネーム | Argus |
| 発売年 | 1999 |
| 発売元 | Inprise Corporation |
| ビルドバージョン | 5.0  |
| コンパイラバージョン | 13.0  |
| BDS バージョン | - |
| サポートプラットフォーム | Windows |

## 前バージョンとの違い

 - フレームが使えるようになった
 - データモジュールデザイナが使えるようになった
 - TWebBrowser が追加された
 - TApplicationEvents が追加された
 - テキスト形式 DFM に対応 (0x80 以降の文字はコードページに依存)
 - フォームファイルのデフォルトはテキスト形式 DFM となった
 - IDE の機能強化

## その他

 - **Indy** が付属するようになった 
 - Enterprise 版に **ADO** (ADO Express) が付属するようになった 
 - **IBX** (Interbase Express) が標準で付属するようになった 
 - Delphi 5 以前のバイナリ形式 DFM での 0x80 以降の文字はコードページに依存する
 - DFM をバイナリ &lt;-&gt; テキスト相互変換するコマンドラインツール `convert.exe` が付属するようになった
 - コードエディタでマウスホイールによるスクロールが可能になった
 - 生成した実行形式バイナリが Win32s でも動作するかもしれない最終版 (まず動かないと思う)
 - <font color="Crimson">TBitmap にバッファオーバーフローの脆弱性がある</font>
 - <font color="crimson">W32/Induc-A に感染する</font>
 - 1999 年は『Windows 98 Second Edition (SE)』が発売された年です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/4cb2d682-ee55-725a-3394-a8ba86eeeeb5.png)

# おわりに

フォーラム等で頑なに『Delphi 5』の質問をする方がいらっしゃいましたが、社内で〇ピーされた『Delphi 5』を使っていたのではないかと勘繰ってしまいました (Delphi 6 からはアクティベーションが存在するので)。

「後のバージョンで直ってますよ？」「後のバージョンではもっと簡単にできるようになってますよ？」「Delphi 5 ではサポートしてないコンポーネントですよ？」

等々。

**See also:**

 - [インプライズ、統合環境を備えた開発ツール『Borland Delphi 5』日本語版を発表 (ASCII.jp)](https://ascii.jp/elem/000/000/304/304684/)
 - [Delphi で生成された EXE が動作する Windows のバージョン (Qiita)](https://qiita.com/ht_deko/items/e7d3e32dd97b3569e581)
 - [今更聞けない Delphi のコト (フォームファイル編) (ht-deko.com)](https://ht-deko.com/tech032.html)
 - [Delphi および C++ Builder における VCL Bitmap LoadFromFile の脆弱性について (Support Wiki)](https://docwiki.embarcadero.com/Support/ja/Delphi%E3%81%8A%E3%82%88%E3%81%B3C%2B%2BBuilder%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BVCL_Bitmap_LoadFromFile%E3%81%AE%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
 - [W32/Induc-A Virus (Compile-A-Virus)に関する Q&amp;A (Internet Archive: EDN)](https://web.archive.org/web/20090903001158/https://edn.embarcadero.com/article/39854)

# 索引
[ [← Delphi 4](https://qiita.com/ht_deko/items/965a26d61e6257faf193) ] [ [↑ 目次へ](https://qiita.com/ht_deko/items/eb96629d705542e3a980) ]  [ [→ Delphi 6](https://qiita.com/ht_deko/items/831971dfcfba94b375e9) ]
【Delphi】Delphi 4 について

# はじめに
**『Delphi 4』** についての概要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/17e3f98d-a8ce-423b-8483-a16eb47edc46.png)

# 概要
製品概要です。

| 項目 | 説明 |
|:---|:---|
| 製品名 | Delphi 4|
| コードネーム | Allegro |
| 発売年 | 1998 |
| 発売元 | Inprise Corporation |
| ビルドバージョン | 4.0  |
| コンパイラバージョン | 12.0  |
| BDS バージョン | - |
| サポートプラットフォーム | Windows |

## 前バージョンとの違い

 - 動的配列がサポートされた
 - メソッドのオーバーロードがサポートされた
 - ルーチンにデフォルトパラメータが設定できるようになった
 - 64 ビット整数型 `Int64` が追加された
 - 符号なし 32 ビット整数型 `LongWord` が追加された
 - Real 型が 48bit ではなく 64bit になった
 - 後方互換性を保つため、従来の 48bit 実数型は Real48 として残された
 - `[プロジェクトマネージャ]` が追加された
 - クラス補完等の入力支援が追加された
 - `[CPU ウィンドウ]` 等の IDE の機能強化
 - アクションリスト (`TActionList`) が使えるようになった
 - フォームに `Anchors` プロパティが実装された
 - 2000 年問題対応

## その他

 - コンパイラバージョン 11.0 は『C++Builder 3』
 - **IBX** (Interbase Express) が付属するようになった 
 - インストール CD 内に『Delphi 1.0』が収録されている
 - 上位 SKU にリモートデバッガが付属するようになった
 - <font color="Crimson">TBitmap にバッファオーバーフローの脆弱性がある</font>
 - <font color="crimson">W32/Induc-A に感染する</font>
 - 社名が Inprise に変更になった
 - 1998 年は『Windows 98』が発売された年です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/16f66105-1fb7-7f30-dbd9-5da015912c30.png)

# おわりに

『C++ Builder』がリリースされた事もあってか、型に対する変更が多いです。

> 48bit 実数型

詳しくはこちら。

https://qiita.com/ht_deko/items/e36898d7aa4bb3300f78#25-real-%E5%9E%8B-real-types

**See also:**

 - [インプライズ、Windows 98 対応の Delphi 4 (PC Watch)](https://pc.watch.impress.co.jp/docs/article/980817/delphi.htm)
 - [Delphi 1～4 でコンソールアプリケーションを作る (Qiita)](https://qiita.com/ht_deko/items/55d583a8a9cc37aea40e)
 - [Delphi および C++ Builder における VCL Bitmap LoadFromFile の脆弱性について (Support Wiki)](https://docwiki.embarcadero.com/Support/ja/Delphi%E3%81%8A%E3%82%88%E3%81%B3C%2B%2BBuilder%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BVCL_Bitmap_LoadFromFile%E3%81%AE%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
 - [W32/Induc-A Virus (Compile-A-Virus)に関する Q&amp;A (Internet Archive: EDN)](https://web.archive.org/web/20090903001158/https://edn.embarcadero.com/article/39854)


# 索引
[ [← Delphi 3](https://qiita.com/ht_deko/items/d271f9fe4d8a10d397c0) ] [ [↑ 目次へ](https://qiita.com/ht_deko/items/eb96629d705542e3a980) ]  [ [→ Delphi 5](https://qiita.com/ht_deko/items/8f9123cc7e8d7810a603) ]
【Delphi】Delphi 3 について

# はじめに
**『Delphi 3』** についての概要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b287ae4b-faa9-7c2c-f8f4-52d1b02854f3.png)

# 概要
製品概要です。

| 項目 | 説明 |
|:---|:---|
| 製品名 | Delphi 3 |
| コードネーム | Ivory |
| 発売年 | 1997 |
| 発売元 | Borland International |
| ビルドバージョン | 3.0  |
| コンパイラバージョン | 10.0  |
| BDS バージョン | - |
| サポートプラットフォーム | Windows |

## 前バージョンとの違い

 - パッケージがサポートされた
 - インターフェース型が追加された
 - コードテンプレート等の支援機能が強化された
 - マルチバイト文字サポート関数が追加された
 - `TEvent` `TSimpleEvent` が使えるようになった
 - TCanvas に `Lock()` / `Unlock()` メソッドが追加された
 - COM のサポート
 - [Assert()](https://docwiki.embarcadero.com/Libraries/ja/System.Assert) が使えるようになった
 - ActiveX コントロール作成のサポート
 - 標準で JPG 形式の画像を扱えるようになった
 - TeeChart が標準添付になった
 - インターネットコンポーネント (`[Internet]` タブ) が追加された
 - Web サーバーアプリケーションが作れるようになった (**WebBroker**)

## その他

 -  Delphi 3 自体は 32bit アプリケーションだが、インストーラが 16bit アプリケーションであるため、64bit Windows へはそのままではインストールできない
 - インストール CD 内に『Delphi 1.0』が収録されている
 - <font color="Crimson">TBitmap にバッファオーバーフローの脆弱性がある</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/40983723-2897-c331-2450-227c3e38a4a7.png)

### Delphi 3.1J

1997 年 12 月に『Delphi 3.1J』が発売されました。Delphi 3.0J をユーザー登録していれば、Delphi 3.1J の CD-ROM が郵送されてきました。

C/S 版にしか付属しなかった WebBroker が Professional 版で使えるようになっています。Delphi 3.0J を Delphi 3.1 相当にするアップデータも別途提供されました。

Delphi 3.1J で追加された『CleanX』は Delphi 4 以降には含まれません...不具合でもあったのでしょうか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/4a763066-e3d9-c0d8-051d-138c3e94c76f.png)

:::note
Delphi 3.1 というバージョンは日本でのみリリースされています。
:::

**See also:**

 - [Delphi 3.1 日本語版 (Internet Archive: Inprise)](https://web.archive.org/web/19990219201334/http://www.inprise.co.jp/news/del31j.html)

# おわりに

ここからアプリケーションを作るのに便利な機能が増えていきます。

もうヘジたんはいないの...（；＿；）

**See also:**

 - [ボーランドが 32 bit アプリケーション開発ツール「Delphi 3 日本語版」を発表 (PC Watch)](https://pc.watch.impress.co.jp/docs/article/970515/borland.htm)
 - [Delphi 1～4 でコンソールアプリケーションを作る (Qiita)](https://qiita.com/ht_deko/items/55d583a8a9cc37aea40e)
 - [Delphi 2 ～ 3.1 は 32bit アプリケーションだけどインストーラが 16bit アプリケーションなせいで 64bit Windows へインストールできない件をどうにかする (Qiita)](https://qiita.com/ht_deko/items/ca2d174c14542646f46d)
 - [CPU ウィンドウを Delphi 2 および 3 で使う (Qiita)](https://qiita.com/ht_deko/items/56fd79678e418e922e4a)
 - [Delphi および C++ Builder における VCL Bitmap LoadFromFile の脆弱性について (Support Wiki)](https://docwiki.embarcadero.com/Support/ja/Delphi%E3%81%8A%E3%82%88%E3%81%B3C%2B%2BBuilder%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BVCL_Bitmap_LoadFromFile%E3%81%AE%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
 - [アンダース・ヘルスバーグ (Wikipedia)](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%B3%E3%83%80%E3%83%BC%E3%82%B9%E3%83%BB%E3%83%98%E3%83%AB%E3%82%B9%E3%83%90%E3%83%BC%E3%82%B0)

# 索引
[ [← Delphi 2](https://qiita.com/ht_deko/items/4c663be138f24f11f7a5) ] [ [↑ 目次へ](https://qiita.com/ht_deko/items/eb96629d705542e3a980) ]  [ [→ Delphi 4](https://qiita.com/ht_deko/items/965a26d61e6257faf193) ]
windowsでUbuntuを初めて起動したときにError: 0x800701bc WSL 2 ???????????? ??????????????????????? https://aka.ms/wsl2kernel ?????????と出る

# やりたかったこと
powershellでLinuxコマンドが使いたかったのでWSLを入れようとした

# 環境
Windows11

# 出たエラー
```
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ???????????? ??????????????????????? https://aka.ms/wsl2kernel ?????????

Press any key to continue...
```
レジスタエラーだと...? これはまた厄介そうなもんに引っかかったな....

# 原因
どうやらバージョン関係が原因らしい

# やったこと
- powershellからwslをアップデートしようとした
こんな感じで突っぱねられた
```powershell
PS C:\Users\yusei> wsl.exe --update
インストール中: Linux 用 Windows サブシステム
サーバー名またはアドレスは解決されませんでした
```
- CPU仮想化のオン
```powershell
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
- WSL有効化
```powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```

- Ubuntuの再インストール
Microsoft Storeから再インストール
- WSLを更新
以下のURLにアクセスし、インストール
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

ここまでやったら起動した！！！！
![{D1055C45-FFC2-41CF-A985-0ECB86F66890}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820975/0d5ca74d-b1e3-b57d-dea5-7e7d83f622ed.png)
# 最後に
エラーメッセージそのままはりつけて検索してたから全然出てこなかったけど、エラーコード```0x800701bc```で検索すると結構いっぱい記事出てくる
最後に参考記事はっときます

https://leokun0210.hatenablog.com/entry/2021/09/29/WSL2%E3%81%A7Ubuntu%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%81%9F%E3%82%890x800701bc%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8C%E5%87%BA%E3%81%9F%E3%80%82

https://qiita.com/kztktr/items/f5b629fab5a85ba0ee09
静的Webページのコーダーで、サーバーサイドJavaScriptを勉強しようとしている人への共有

## 記事の対象・内容

ローカルだけですが、とりあえず一通り動くNode.jsツール（Next.js+TypeScript+Playwright）を初めて作成しました。それを作成中に思ったよもやま話を伝えようかと思います。参考になれば幸いです。

### 作ったツール

https://github.com/sinkingseawheat/webpage_snapshot

ざっくりいうと、Webページで読み込んでいるファイルをアーカイブして、ついでに遷移先のレスポンスステータスなどを記録するツールです。使い方とかは上記遷移先をご覧ください。ChatGPTで質問しながらElectronでアプリ化を試みたのですが、どの設定を間違っているのかが分からず、断念しました。

### 想定している読者

HTML・CSS・JSでフルスクラッチ制作は可能で、これからサーバーサイドJavaScriptの勉強に手を付けようとしている人に向けた記事です。
※ かなり定性的で主観的な記事になっています。
※ 検索したら簡単に出てくる各ソフトウェアの概要は省略しています。

## プラットフォームの選定の話

javascriptでバックエンドが書けるプラットフォームはNode.js・Deno・Bunがありますが、学習の入り口としてはまだNode.jsをお勧めします。
古いバージョンの情報が散見されるとはいえ、フレームワークやライブラリはまだまだNode.jsを基準に作成されているように思えるからです。

## フレームワークの環境構築の話

フレームワークにビルドツールがあるならそれを使用したほうがいいです。手作業で構築を試みると、ネットの情報はバージョンの情報が古かったりしてうまくいかないことが多いです。
next.jsであれば[create-next-app](https://nextjs.org/docs/app/api-reference/cli/create-next-app)を利用しましょう。
利用するか不明なツールの場合はとりあえず入れたほうがいいです。後から入れると苦労します。

create-next-appには選択肢が無いですが、単体テストツールである[jest](https://jestjs.io/ja/docs/getting-started)も入れたほうがいいです。単体テストを繰り返しながら少しずつモジュールを増やしましょう。そうしないとかなり辛いです。

## JavaScriptの話

コーダーだとIE11に対応しているJavaScriptを引き続き使用している人も多いかと思います。しかし、最低でもアロー関数と分割代入、async/awaitは使いこなせるようになったほうがいいです。コードの例ではよく見かけるのでこれが理解できないと話が先に進まないです。

## TypeScriptの話
TypeScriptは必須だと思います。導入すると記述量が増えますし、全てが想像通りに動くことはまず無いです。ある処理を記述中に何かエラーが出て、解決方法にとっかかりが無い場合は別の記述を試したほうがいいです。
そんなことを書くと「使う意味あるのか」という疑問が出てくると思いますが、使ったほうがいいです。深いオブジェクトの階層の指定をミスってたとか、非同期処理なのにawaitが漏れていたりとか、JavaScriptだけだと実行しなければ検知できないバグを実行前に検知しやすくなります。
あと、変数にホバーするとツールチップである程度の型の情報や、コメントを見ることができるので日を置いた後の修正にはほんとに役に立ちます（これはTypeScriptというよりVisual Studio Codeのメリットですが…）

## jest(ts-jest)の話
jestなどの単体テストツールも必須だと思います。
例えば、[ツールのこのtestファイル](https://github.com/sinkingseawheat/webpage_snapshot/blob/main/src/component/snapshot/api/sub/getResponseByPageGoto.test.ts)のように、HTMLのブラウザ側でのリダイレクトの修正を確認したいときに、わざわざ修正→ツールを実行→レスポンスを確認とかしなくても
```
npx jest src/component/snapshot/api/sub/getResponseByPageGoto.test.ts
```
と実行すれば修正後の挙動の成否がわかります。
※ Windowsの場合は
```
npx jest src\\component\\snapshot\\api\\sub\\getResponseByPageGoto.test.ts
```
でも可。
単体テストの作成とまではいかなくても、モック中にconsole.logを記述するだけでも、修正の度にツールを一通り実行する手間がなくなるのでかなり楽になります。

追記：未確認ですがESModuleの場合はVitestの方がいいらしいです。

## 今書いているJSはどこで動く？
Web制作だとJSはWebページを閲覧しているブラウザでの挙動のみを考えれば大体は問題ないです。一方、同じくJSで処理を記述するNode.jsが絡むと考え方を切り替える必要があります。
今回作成したツールでは以下の3種類のコンテキストがあります。
- エンドユーザーのブラウザに表示される、Reactが制御するUI画面で動くJS
- サーバーサイドの処理（Node.js）で動くJS
- サーバーで起動したPlaywrigthが実行するJS（evaluateメソッドに渡すpageFunction等）

このあたりを認識しないと、エンドユーザーのブラウザで動くJSに、ファイルの書き込み処理を書いて「何で動かないんだ…」と頭を抱えたりします。
気を付けましょう。

## 困ったときは
チャットAIに聞きましょう。コードの一例がすぐにでてきます。Google検索では情報が古かったりするのであてになりません（特にNode.js関連）。それぞれのパッケージのリファレンスも、そもそもバックエンド知識が必要だったりするのである程度慣れてからのほうがいいです。
もちろん、チャットAIだと誤った情報が出てくる可能性もありますが、上記のJestでモックを作成できればトライ＆エラーはそんなに苦ではないと思います。


## 参考

[TypeScriptは型安全じゃないからすばらしい](https://mametter.hatenablog.com/entry/2024/10/07/095302)
コマンドでwebminを日本語化

###### 環境
VirtualBox 7.0.20
Rocky Linux release 9.5 (Blue Onyx)
webmin 2.202 


webminを日本語表示する際にだいたいGUIから変更するかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946964/db2f4c80-49da-36dc-cc5d-495c207df9b1.png)

でも、「GUIでページ遷移するのめんどくさいし、コマンドでやりたいなぁ。。」と思って、色々と関係してそうなファイルを見てたらありました。

「/etc/webmin/config」の中にある「lang_root=en」でした。

ということで置換してwebmin再起動。。。
```
# sed -i s/lang_root=en/lang_root=ja/g /etc/webmin/config
# systemctl restart webmin
```

長年気にはしてたけどずっと放置してたんですが、こういう小さいことを解決できるとちょっと気持ちが楽になります😅
Windows11 でディスプレイ設定が開けない問題を解決する（ms-settings:）

# 注意

この作業にはレジストリ編集が伴います。関係のない値を編集するとコンピュータの動作が不安定になる場合があります。

レジストリ編集を行ったことが無い方は、先に注意点などをご自身で調べた上、自己責任で編集を行ってください。

# 症状

随分と前からデスクトップのコンテキストメニューから「ディスプレイ設定」を開こうとすると

> ms-settings:display
> このファイルには、この操作を実行するように関連付けられたアプリがありません。アプリをインストールするか、またはすでにインストールされている場合は、既定のアプリの設定ページで関連付けを作成してください。

と表示されたり、タスクバーの音量ボタンから音量ミキサーを開こうとすると無反応だったりすることがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547414/04ad98ec-35c6-da84-49cf-5cd0b7b7702d.png)

ネットで検索すると、`dism` やら `sfc` やらで Windows を修復しろだとか、Windows を再インストールしろだとか、初期化しろだとか書いてありました。しかし、修復系のコマンドを使っても、Windows を再インストールしても治らないし、わがままなので初期化はしたくなかったです。

# 解決策

調べてみると、エラーメッセージの示す通り URI とアプリを結びつけるレジストリの値が空になっていたので、これを修復すると解決しました。

```
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ms-settings\shell\open\command]
"DelegateExecute"="{4ed3a719-cea8-4bd9-910d-e252f997afc2}"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547414/1692b54d-25fe-83dd-c596-b69dbf5951f8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547414/fbccb160-075e-30e3-9e24-2cf9a9c81863.png)

# 注意2

この設定アプリを示すであろうGUID `{4ed3a719-cea8-4bd9-910d-e252f997afc2}` ですが、すべてのコンピュータで共通かどうか分かりません。もう1台のPC（Windows11 Home）では同じでした。

どうやら `ms-settings` に続く `ms-settings-airplanemode` などにも同じ値が入っているようなので、これらも確認しながら修復してみてください。

何故壊れたのか謎
シェルスクリプト内でphpファイルを実行したい

こんにちは！エンジニアの篠原です:penguin:

先日、業務でシェルスクリプトを作成していて
phpファイルを実行したいときがあり調べた結果を
備忘録として残したいと思います。


## 目次

1.phpファイルを準備
2.シェルスクリプトを作成
3.シェルスクリプトの動作確認
4.【おまけ】引数をphpファイルに渡す
5.【おまけ】エラーハンドリングとログ出力
6.まとめ

## 1.phpファイルを準備

まず、実行したいPHPファイルを作成または準備します。

```php:sample.php
<?php
echo "PHPファイルが実行されました！\n";
```


## 2.シェルスクリプトを作成
次に、PHPファイルを実行するシェルスクリプトを作成します。

```shell
#!/bin/bash

# PHPの実行ファイルのパスを確認
PHP_PATH="/usr/bin/php"

# PHPスクリプトのパス
PHP_SCRIPT="/home/username/scripts/sample.php"

# PHPスクリプトを実行
$PHP_PATH $PHP_SCRIPT

# または、phpコマンドがPATHにある場合は以下でOK
# php $PHP_SCRIPT

```

## 3.シェルスクリプトの動作確認
まずシェルスクリプトを実行可能にするため、実行権限を付与します。

```shell
chmod +x /home/username/scripts/run_php.sh
```

では、実際に動作確認してみます。
```shell
/home/username/scripts/run_php.sh
```

```shell:出力結果
PHPファイルが実行されました！
```

無事、phpファイルが実行できました:clap:


## 4.【おまけ】引数をphpファイルに渡す

ここからはおまけですが、
phpファイルに引数を渡して実行したい場合は
以下のように書きます。

```shell:シェルスクリプト
#!/bin/bash

PHP_PATH="/usr/bin/php"
PHP_SCRIPT="/home/username/scripts/sample.php"

# 引数を指定
ARG1="hello"
ARG2="world"

# PHPスクリプトを引数付きで実行
$PHP_PATH $PHP_SCRIPT $ARG1 $ARG2
```

```php:sample.php
<?php
// コマンドライン引数を取得
$args = $_SERVER['argv'];

// スクリプト名を除外
array_shift($args);

// 引数を表示
foreach ($args as $index => $arg) {
    echo "引数" . ($index + 1) . ": " . $arg . "\n";
}
```

```shell:出力結果
引数1: hello
引数2: world
```

## 5.【おまけ】エラーハンドリングとログ出力
実行結果やエラーをログファイルに出力したい場合は
以下のように書きます。

```shell:シェルスクリプト
#!/bin/bash

PHP_PATH="/usr/bin/php"
PHP_SCRIPT="/home/username/scripts/sample.php"

# ログファイルのパス
LOG_FILE="/home/username/scripts/php_sample.log"

# PHPスクリプトを実行し、出力をログに記録
$PHP_PATH $PHP_SCRIPT >> $LOG_FILE 2>&1
```

## 6.まとめ
今回は、シェルスクリプトでphpファイルを実行する方法をまとめました。
cronと組み合わせることで定期的に実行することもできますし
何かと便利です:thumbsup:

以上、篠原でした:penguin:
C言語　可変長引数関数これだけでOK【超初心者向け】

# 可変長引数とは

可変長引数とは、渡す引数の**型を自由に決められる**関数のことで、引数の数を事前に決めておく**必要がない**仕組みのことをいいます。つまり、1個以上の引数があれば、その型を自由に設定して、引数を何個でも渡すことができる柔軟な関数を作ることができます！
  ```diff_c
  void function(char *fmt, ...)
  // 「char *fmt　が1個以上の通常の引数
  // 「...」　これが仮引数の可変にする部分でござるよ。
  ```
  
C言語で、可変長引数を扱うための標準ライブラリヘッダー。
```diff_c
#include <stdarg.h>
```
`<stdarg.h>`ヘッダーの中に可変長引数を管理するための便利な仕組み（マクロと型）が用意されています。

|関数|	詳細|
|---|---|
|va_start|可変長引数関数の引数にアクセスできるようにします  |　
|va_copy| 可変長引数関数の引数をコピーします |　
|va_list|va_start, va_arg, va_end, va_copy で使用される情報を保持します|　
|va_arg| 可変長引数関数の次の引数にアクセスします |　
|va_end| 可変長引数関数の引数の巡回を終了します |　

## マクロと型の説明
簡単にマクロとは？
- コードを簡潔に記述したり、繰り返し使用する定義を事前に準備する仕組みのことだよ

`va_list`
  - 何をするもの？
    - 可変長引数のリストを管理するためのデータ型
    - これが「可変長引数をまとめて扱う箱」になる

`va_start`
- 何をするもの？
    -  可変長引数リストの「準備」をする
    -  必ず「最後の名前付き引数」を教えてから使う

`va_arg`
- 何をするもの？
    - 可変長引数リストから1つの値を取り出す
    - 値の型を指定して使う

`va_copy`
- 何をするもの？
    - `va_copy`は`va_list`をコピーするマクロ
    - 可変長引数を2回以上読みたい場合に便利

> イメージとしては、va_listが「リストの箱」、va_startで箱を開けて、va_argで中身を取り出し、最後にva_endで箱を片付ける感じ！

#### ただし、可変長引数を使うときにはいくつかルールがあります
1. 少なくとも1つの通常の引数（名前付き引数）を先に書く必要があります
    - これは、引数の数や型を管理する目印となるためです
1. 可変長引数は、関数の仮引数リストの最後に置く必要があります
    - これは構文上のルールです

## これが可変長引数の大まかなの流れ
```diff_c
#include <stdio.h>
#include <stdarg.h>

void func(char *fmt_1, ...)
{
    va_list ap;
    va_start(ap, fmt_1);

    /*処理〜*/

    va_end(ap);
}
```

## 分かりやすい例え

可変長引数を使うと、それがぐーんと楽になるよ！
まるで、いつでも友達を好きなだけ、好きなタイプの人たちも自由に家に招待できるみたいな感じ。普通の関数は『3人までで、しかも全員同じタイプじゃないとダメ！』みたいな感じだけど、可変長引数の関数は『何人来ても、どんなタイプでも大丈夫だよ！』って感じなんだ。
プログラミングでは、引数の数だけでなく、それぞれの型も自由に設定して、好きなだけデータを渡せる特別な仕組みなんだね。まるで、パーティーの定員もなく、どんなゲストでも歓迎する自由な会場みたいに、引数を柔軟に受け取れるんだ。すごく便利で使いやすい機能だよ！



|特徴  |普通の引数 |可変長引数 |
|---|---|---|
|引数の数 |	決まっている  |呼び出しごとに変えられる　　　　　　|
|引数の型 |固定 |自由だが、関数内で管理が必要　 |
|例 |	```int add(int a, int b)```  |	```int printf(const char *format, ...) ```　|

# 最後に
少しでも参考になれば幸いです。
最後までご覧いただき、本当にありがとうございます。
短い期間で2つの現場を経験した新卒経験談

# はじめに
社会人1年目の三浦です。
今回は2つの現場を経験して学んだことや感じたことをまとめました。

## 現場で学んだこと
業務の内容が異なるのは当たり前なのですが、業務以外の点で共通する点が3つありました。

### 報連相
　仕事をする上で一番重要なスキルだと感じました。ある日、先輩に「報連相が足りない」と言われました。自分では意識していたつもりだったので、ショックでした。先輩からアドバイスとして、「自分の想像以上にできていない」と言われたので、自分の中で多いくらいの意識で報連相を実施するようにしましょう。

 ### メモを多くとる
　業務をする中でメモを取る機会は必ずあります。しかし、セキュリティ的な観点から電子端末でのメモは原則できません。なので学習ノートに殴り書きでもよいのでメモを取ることをお勧めします。私は時間を見つけては殴り書きをきれいにまとめるなどしています。

 ### 恥をかく
 　失敗は誰もしたくはないとは思います。しかし、失敗をしたほうが業務を覚えるスピードは速く、学べることがあると個人的に思います。先輩がフォローしてくれるので伸び伸びと働きましょう。

  ## さいごに
  　約半年と短い期間ではありますが、2つの異なる現場で私が経験したことを簡単にまとめました。これからも、初心を忘れずに精進してまいります。
ひずみエネルギとそれを使った材料力学 問題12. P319「材料力学演習(20221021)」をsympyでやってみたい。3/4円弧曲がりはり

# オリジナル
[問題12. P319 (pdf)](http://zairikiweb.starfree.jp/zai_enshuh/zai_enshuh_ver.3.3.pdf#page=324)＜[「材料力学演習(20221021)一括(ver.3.3)」を勉強したい。#sympy](https://qiita.com/mrrclb48z/items/c3274daf5f7a99cfe027#%E4%BD%9C%E6%A5%AD%E4%B8%AD%E7%A7%81%E3%81%AE%E8%A7%A3%E7%AD%94sympy)
　　　　　　　　？？？タブレット等で、pdfを開く事ができないかも。？？？　

# sympyで
・ver0.1 p319 問題12. 3/4円弧曲がりはり
・t時計回り,P下向き,Q左向き
```python
# ver0.1 p319 問題12. 3/4円弧曲がりはり
from sympy import *
var('P,M0,Q,a,t,EI')
M=Q*a*cos(t)-P*a*(1-sin(-t))                       #;print(M)
U=a/(2*EI)*integrate(M**2,(t,0,Rational(3,2)*pi))  #;print(U)
rep={Q:0}
δV=diff(U,P).subs(rep).simplify()                   ;print("#",δV) 
δH=diff(U,Q).subs(rep)                              ;print("#",δH)   
# P*a**3*(8 + 9*pi)/(4*EI)
# P*a**3/(2*EI)
```


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

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

https://qiita.com/mrrclb48z/items/976bdd4fda75c2f14c61


#### 参考文献

~~＞一部に等分布荷重を受ける単純支持はり~~
~~＞JSME p89~~
　
~~＞単純支持ばり 7)~~
~~＞構造力学公式集 p136~~
【UE5】C++ファイル作成後、コンパイルに失敗するときに試したこと


## はじめに
UE5.5.0でC++を使って関数を作り実行できるまで、かなり苦戦したので自分用に記録。一部うろ覚え。

## 環境
Windows10
Visual Studio2022
Unreal Engine5.5.0

## 発生したエラー
UEのメニューバー>新規C++クラスでブループリント関数ライブラリ『MyBlueprintFunctionLibrary.h』（クラスタイプはPublic）を作成した後、ソリューションをビルドしコードを記述してコンパイルを実行すると以下の2つのエラーが生じた。
- エラー１：Nugetパッケージの復元コマンドで、ファイル（名前は忘れた）へのアクセスに失敗
- エラー２：エラーコードMSB3073：出力`"C:\【UEの保存先】\Engine\Build\BatchFiles\Build.bat MyCityBuilderEditor Win64 Development -Project="C:\【プロジェクトの保存先/プロジェクト名】.uproject" -WaitMutex -FromMsBuild -architecture=x64 -WorkingDir=C:\【プロジェクトの保存先】\Intermediate\ProjectFiles -Files=..\..\Source\【プロジェクト名】\Public\MyBlueprintFunctionLibrary.h" はコード 8 で終了しました`

それぞれについていくつかの方法で解決しようと試みたので、その詳細を以下に記録。

## 試したが駄目だったこと
- ### エラー1
- #### PCの再起動
- #### UEを閉じてからコンパイル
- #### VisualStudio、UnrealEngineの再インストール
VisualStudioインストール時のオプションは以下のページを参考にした。
https://dev.epicgames.com/documentation/ja-jp/unreal-engine/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine

- #### Nugetパッケージマネージャーの設定変更、Nugetストレージのクリア
以下のページで紹介されている設定を変更したり、ストレージをクリアしたりした。
https://learn.microsoft.com/ja-jp/nuget/consume-packages/package-restore-troubleshooting

- ### エラー2
- #### プロジェクト内のIntermedeateフォルダの削除

## 最終的に成功した方法
- ### エラー1
- #### ファイルのアクセス許可設定で読み取り専用のチェックを外す。
エクスプローラーでプロジェクトとエンジンの保存フォルダのプロパティを開き、「全般」タブ下部の読み取り専用のチェックを外したところ、エラーが解消された。
- ### エラー2
- #### コンパイルの代わりに、デバッグなしで開始を選択する。
コードを書き終わったら、メニューバーの「デバッグ」>「デバッグなしで開始」（ショートカット：Ctrl+F5）
以下のページを参考にデバッグなしでコードを実行したところ、ビルドが成功しUEが立ち上がった。
https://stackoverflow.com/questions/75816783/build-bat-error-code-6-in-the-unreal-engine-5

## 結果
C++で作成した関数をブループリントから呼び出せる！！！
Arch Linux上のzshにpowerlineを導入する

Arch Linux上のzshにPowerlineを導入します

↓これ
![スクリーンショット_2025-01-03_15-42-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931772/55c4cf15-6b17-1cfd-b2f5-62806e2e43f2.png)


# インストール
```
sudo pacman -S powerline powerline-fonts
```
Powerlineをzshで使用するために、~/.zshrcファイルに以下の設定を追加します。
（grml-zsh-configを使用している場合、prompt offが必要です）
```
prompt off
powerline-daemon -q
. /usr/share/powerline/bindings/zsh/powerline.zsh
```
ターミナルのフォントをSource Code Pro Midiumにしましょう。

# おわり
これだけ！
シェルスクリプトで変数に数値を代入した使い方

# 変数に数値を入れて比較したい
シェルスクリプトで数値を変数に代入した使い方を調べてみました。

以下の通りに書いてみます。

```
#!/bin/bash

a="熱い"
b="涼しい"

kion=18

if [[ "${kion}" > 20 ]]; then
echo $a
else
echo $b
fi
```
変数「kion」に数値を代入した後、条件文で比較しています。
条件文の中での変数の書き方は特徴があります。


実行結果は以下の通りです。
```
涼しい
```
【JavaScript】備忘録① getElementByIdとquerySelectorの違いについて

動きのあるWEBサイトを作る際、CSSなどいろいろな方法がありますが、
メインで使われる言語といえばJavaScriptだと思います。

今回は、HTML側のIDやクラスを取得する際によく出てくる
「getElementById」と「querySelector」の違いとそれぞれの使用法について簡単に説明しようと思います！

# 「getElementById」と「querySelector」の違い

## ◆getElementById

getElementByIdは、指定されたID属性を持つ要素をドキュメント内から取得します。
ページ内でIDは一意であることが求められるため、getElementByIdによって取得される要素は一つです。その為、個人的な感想ですがIDを取得しに行ってると一目でわかるので、IDを取得するなら、getElementByIdを使った方が、可読性が高いと思っています。

使用例:
``` javaScript
const element = document.getElementById('box_open');
```

## ◆querySelector

querySelectorは、id属性やclass属性などを意識せずにHTML要素をセレクタ指定し取得することができます。「querySelector()」だけであらゆるHTML要素を取得することができるため、柔軟な対応ができます。

使用例:
``` javaScript
const element = document.querySelector('#box_open'); // IDセレクタ
const firstText = document.querySelector('p'); // タグセレクタ
const bgColor = document.querySelector('.boxBgColor'); // クラスセレクタ
```

# まとめ

getElementByIdとquerySelectorは、それぞれの用途に応じて使い分けることで、適切な要素の取得が可能です！！
Pythonのファイル書き出しのタイミングを自分で調整する

## 目的および背景
実行経過のログをファイルに書き出す処理を行っています。
write()メソッドを実行後、実際にファイルに書かれるまでに一定の時間がかかるため、flush()メソッドを使用して書き出しのタイミングを調整するようにしました。
## プログラムコード
write()メソッド実行のタイミングで、ストリームの書き込みバッファをフラッシュするflush()メソッドを実行するようにプログラミングしました。
頻発すると実行速度に影響が出る可能性はありますが、開発途中のデバッグ時などには大変有効でした。

https://docs.python.org/3.13/library/io.html#io.IOBase.close
```python:withキーワードを使用したwrite()メソッド
with open("workfile", "w", encoding="utf-8") as f:
   f.write("test")
   f.flush()
```

## 参照
以下のページを参考にさせていただきました。

https://qiita.com/zawazawa5809/items/be6fadf56df571cfefa3

https://sigotonosozai.com/2019/12/24/python-write-read/

https://stackoverflow.com/questions/2447143/does-close-imply-flush-in-python
【Salesforce】画面フロー内で画像を表示させる3つの方法とその違い

結論から言うと、環境移行の観点から静的リソースを使用した①か②がオススメです。
「A01_sample」という名前でpng画像を静的リソースに保存済みの前提です。


#### ①表示画像 - 静的リソース
静的リソースに保存したファイル名をそのまま入力すると自動で表示してくれる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/58c2dd16-9d6b-298b-7f90-3f8cae562840.png)

#### ②表示テキスト - 静的リソース
<img>タグを設定するテキスト変数を用意する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/48db5b48-b1a7-06ff-c42c-4c43397a168a.png)

画面に表示する。表示テキスト形式なのでリンクを設定することも可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/3684dfb6-1a34-5658-fc43-3b4d6c790de8.png)

このとき、絶対パスを指定しても一応機能するが、環境移行時に余計な手間がかかるので、
基本的に相対パスを指定するようにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/6b742dbf-7393-2311-4f7a-a24e8e927f4b.png)

#### ③表示テキスト - 直接貼り付けるパターン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/9ab45f39-add1-460b-f063-1b462b3ffb9e.png)

静的リソースを使用しないパターン。
この場合フロー保存時に 画像が「ファイル」に保存される。
これも環境移行時に面倒なので、あまりオススメできない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/2a073ad2-09e1-d6b4-e78f-dbe432db4bf9.png)

<br />

先日担当した実務では、リンクの設定が必須要件だったので②を採用しました。
GIGAスクール端末がぼったくりという件についてポエム

# 概要
- こちらのTV番組がとてもよい構成でわかりやすかった
- コメント欄が炎上してたのでポエムしてみます。
https://youtu.be/43bCGnJ9WTQ?t=162


::: note
# 結論
・謎の「端末設定費用」「ネットワーク設定費用」あたりがお高い
・学校側が丸投げせずにじぶんたちで運用（しようとちょっと努力）すれば解決する
・iPadは1年おきに交換にしてあげれば生徒のモチベがわく
・若いうちからマイクロソフトに慣れさせれば生徒の人生のためになる
:::

# 費用
| No. | 費用項目                 | 金額   |
|-----|--------------------------|--------|
| 1   | iPad端末本体            | 36,080 |
| 2   | キーボードケース         | 11,000 |
| 3   | MDM 5年分               | 9,900  |
| 4   | 端末設定費用            | 19,800 |
| 5   | セキュリティソフト        | 2,200  |
| 6   | 故障保障                | 1,650  |
| 7   | ネットワーク設定         | 4,995  |
| 8   | 端末設定設計費用        | 3,330  |
|     | **合計**                | **88,955** |

# 感想
- 1, 2, 6 の物理端末関連は大量仕入れだとかアカデミック購入なのか、安めになってると思います。
- 3, 5 あたりも妥当な金額でしょう。
- 4, 7, 8 の**謎の設計費用 ￥28,125**が高い気がしますね。
- YouTubeのコメント欄でも炎上気味ですが、ここがいわゆる批判されているところなのかなと思います。
- なので消費者もばかではなく「ぼられている」と直感的に感じているんだとおもいます。

# なぜ炎上してしまうのか
- たとえばマイクロソフトも毎年値上げしてますが、常に新しい機能を提供していて、世界のビジネスそのものを変容しています。
- アップルも高いといわれますがその他のハードウェア製品にくらべて品質が高く、長くつかえてリセールもあるので結局おとく。
- つまり彼らはしっかり頂くもの頂くけどそれ以上の価値を提供しているわけですね。
- **ユーザーからは￥28,125の価値の中身がわからないので批判されてしまう**と。時代が変わってきてるんですかね。

# どうすればいいのか
- 設計と運用はSIerに丸投げるんじゃなくて**SIerにトレーニング費用を払ってIT専任者を雇用する**。そっちのがけっきょく安上がりだし社会が進歩します。
- これまでは「難しくてよくわからないからうまくやっといて」っていうのが中抜きの温床になっていました。
- 「難しくてよくわからないけどちょっと教えて。やってみる」ってスタイルにちょっとずつ変えていくと何かが変わるのかも。
- 生徒は必死に勉強してるのに、学校は勉強しませんってのもなんか手本にならないというか、もし自分が運営側だったらちょっと恥ずかしい。
- SIerにとってもだましてもうけるのではなくてトレーニングによる正の貢献度が目に見えるので、ビジネスメンタリティが善に向う可能性も。

# ハードはどうするか
- iPadという選定はいいと思います。無名タブより結局おとく。
- だいたいモデルチェンジが毎年なので、1～1年半おきに新品交換してあげるといいと思う。売買オーバーヘッドは20%くらいを目標。
- 考えてみてください。毎年新しいAppleの端末にしてもらったらそれだけで学習意欲わきますよね。**モノの支給以上の価値を提供できるわけです。**
- キーボードは自費で好きなの買ってもらう。ロジクールがおすすめ。
- これによりラップトップ貸与するのに比べて故障ポイントを分離できます。
- あと動画で生徒が移動が重いって言ってたので、**学校と家にキーボード置いておけばiPad持ち運ぶだけですむ。**

# ソフト
- MS365ライセンス一択だと思います。
- **就職したらけっきょくExcelとかWordとかOutlook使うんで最初から覚えてもらったほうがいい。**
- データはすべてSharepointなりOneDriveに同期。
- これってほとんどの企業がやってることですからね。。。
- 高校で別の会社のものを使ったら再学習になってしまい就職後のキャッチアップに不利。

# MDMはどうする
- iPadはIntuneでもかなりできることが増えているので、Intuneこみのスクールライセンスがいいでしょう。
- おぬぬめは[共有デバイスモード](https://learn.microsoft.com/ja-jp/mem/intune/enrollment/device-enrollment-shared-ios)にして端末のユーザーアフィニティをなくすこと。**故障や紛失とかの場合でも、設定せずに新しいiPadを貸すだけですむ**。
- このあたりは現在の運用でも実現されてそうですね。

# iPad以上のことがしたくなったら
- Windowが必要になったら、学校の情報ルーム（？）とかに[Windows365 Link](https://www.publickey1.jp/blog/24/pcwindows_365_link.html)の端末とデカいQHD 32インチモニタとかおいてあげて、Windows365を使ってもらう。
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/7acfaa74-b8a0-0900-e739-eb8e32be9961.png)](https://www.gizmodo.jp/2024/11/windows_365_link.html)
- 生徒はMS365ライセンスがあるのでOneDriveやSharepointを通してファイルは同期される。
- **高度な作業はWindows365で。普段の授業はiPadのMS365 Onlineアプリで**。こんな使い方できたら素敵ですね。
- 以上、マイクロソフト（最近アップル）おじさんからのポエムでした。

# 追記
- さすがに全ユーザーにWindows365ライセンスは高いのでオンプレのRDSが現実的かもしれません。
- SharedとかConcurrentライセンスとかなさそうなので。
LeetCodeを1日1題解いてみる (day29)

29日目に取り組んだ問題はこちら！

# 136. Single Number

https://leetcode.com/problems/single-number/

## 問題文
Given a non-empty array of integers nums, every element appears twice except for one. Find that single one.

You must implement a solution with a linear runtime complexity and use only constant extra space.


## 僕の回答
```py
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        set_nums = set(nums)
        for i in set_nums:
            if nums.count(i) == 1:
                return i
```

## より効率の良い回答例1

```py
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        number=0
        for num in nums:
            number^=num
        return number
```

## より効率の良い回答例2
```py
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        nums.sort()
        while len(nums) != 1:
            if nums[0] == nums[1]:
                nums.pop(0)
                nums.pop(0)
            else:
                return nums[0]
        return nums[0]
```
## コメント
`^`は`XOR`の演算子で、
- 同じ値をXORすると0になる
- 0と任意の値をXORするとその値になる
という性質があることを学びました。

## 次の問題はこちら!
https://qiita.com/h_y_s_d/items/47ca28516abe51537943
【Git】チェックアウトしていないローカルブランチを全て削除したい

# これだけ

「これだけの内容で記事にするな！」と言われそうですがメモ程度に残します。

バグ対応や機能の追加等でローカルのブランチが増えすぎると個人的に嫌なので、

```sh
git branch | grep -v '\*' | xargs git branch -D
```

これで現在チェックアウトしているブランチ以外のブランチを全削除できます。（ローカルのみ）
作業が終わったブランチを一掃できるので便利です。
【基本】ゲーム開発とビッグ・オー

[PONOS Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ponos)の3日目の記事です。

# はじめに
もちろん某アニメのことではありません！

だいぶ前に [【小ネタ】ルックアップテーブルの効果](https://qiita.com/nissy_gp/items/5167edcd04ecc595277a) という記事を書きました。
記事ではルックアップテーブルによるパフォーマンス改善を計測してみたわけですが、そもそもこのようなアルゴリズムにおける計算量というのは、どのような観点で着目すべきかという話が前提にあるよなという事をふと思いました。

ということで、今回はそれを補完する形で ビッグ・オー について書いてみたいと思います。

# アルゴリズムと計算量
アルゴリズムを考えるにあたり重要な指標が二つあります。「時間計算量」と「空間計算量」です。
「時間計算量」とは時間的な資源量、つまり処理の実行回数です。「空間計算量」とは空間的な資源量、つまりメモリ使用量の指標です。
どちらについても、小さいほうがより優秀ということになりますが、ここでは前者について着目します。

## ビッグ・オー（Big O） と O(1)
ビッグ・オー記法、O記法、オーダー記法などと言われます。
これはアルゴリズムの「時間計算量」に着目した指標であり、問題の大きさ（入力の大きさ）に対しての計算ステップの成長率の特性を表します。
O(1)というのは定数時間と呼ばれ、理論上の理想的な計算量のことです。

## ビッグ・オーの具体例
| 表記 | 説明 | 補足 |
|---|---|---|
| O(N) | 線形時間 | 問題の大きさに比例する。例えば配列の全要素を一度に検査する際にこれ。 |
| O(N^2) | 二次時間 | 問題の大きさの二乗に比例する。ある配列に対する二重ループなどの場合です。 |
| O(log n) | 対数時間 | 問題の大きさが倍になるごとに計算量が1増加します。 ステップごとに処理データが半分になるようなアルゴリズムで、二分探索などがこれに当たります。 |
| O(1) | 定数時間 | 問題の大きさによらずに常に一定の計算量です。理論上は理想です。 |

# ゲームにおけるアルゴリズム
前述の通り、アルゴリズムにおいて O(1) とは理想的な計算量です。
ゲーム開発でよく使われるものの中でも O(1) となっている仕組みがあります。もちろん、あらゆる構造が O(1) でできるわけではないですが、一般的に O(1) であることが多いものを見ていきたいと思います。

## キャッシュやインベントリーシステム
例えばシンプルな Hashtable や Dictionary はキーに基づいた値の取得が O(1) であるため、データ量の増加に対しても一定の計算量でアクセスが可能です。
実際には、より複雑なキャッシュ機構を作ろうとした場合は注意が必要です。値の追加のたびに並び替えが発生するなどの場合は O(1) とはならない可能性がありますが、Least Recently Used なアルゴリズムであれば O(1) で書くことができるはずです。

## オブジェクトプール
主に頻繁なオブジェクト生成を避けるために使われる、みんな大好きオブジェクトプールも通常は O(1) となるはずです。
例えば内部が Queue であれば O(1) です。

## グリッドポジショニング / 空間分割
例えば近くのキャラクターを検索したり、当たり判定、経路探索など、様々な場面で全件操作のコストを低減する目的で、グリッドや円形に空間を分割してエンティティを管理するパターンがあると思います。

これらもある特定のグリッドから所属するエンティティを取得するという点において O(1) です。
実際には取り出したエンティティたちに対して個別の処理を適用するため、そこに対しての処理は O(N) になりますが、それでも一連の手続きのうちグリッドに絞り込んでいる部分が O(1) であるため有用な手段です。

# まとめ
ビッグ・オーは時間計算量にしか着目していません。実際のシステムパフォーマンスはもちろん空間計算量、すなわちメモリにも注意が必要です。トレードオフとしてメモリ量が増えることもありますし、それが許容できるかできないかもケースバイケースです。

とはいえ当たり前のことではありますが "とりあえず動く" というところから脱却し、計算量が最適かどうかという視点を持ってプログラミングに臨むことは、プロのエンジニアとしてのスキルが見えてくるポイントかなと思います。

それでは次回は[@kerimeka](https://qiita.com/kerimeka)さんです。