OmniAICreator/Qiita-1.07M huggingface dataset:
Windows環境でpnpmを更新する方法

# はじめに
Windows環境で`pnpm`の更新にはLinux等と比べて更新するのに少し手間がかかり、調べないと出てこなかったのでここにまとめようとおもいます。

# 通常通りには更新できない
Windows環境以外では、`pnpm add -g pnpm`で簡単に更新することができますが、Windows環境では次のエラーにより更新できないことがよくあります。
```shell-session
 EPERM: operation not permitted, unlink 'C:\Users\~~~\AppData\Local\pnpm\pnpm.EXE'
 ```

実際、Githubにも次のissuesがあります。

https://github.com/pnpm/pnpm/issues/5700

# Corepackを有効にしてから更新
CorePackは、`npm`や`pnpm`などのパッケージマネージャを管理するマネージャのようです。

https://zenn.dev/teppeis/articles/2021-05-corepack

管理者でターミナルを開き、`corepack enable`したのちに`pnpm add -g pnpm`を行うことで更新ができました。
```
C:\Windows\System32>pnpm -v
8.6.0
C:\Windows\System32>corepack enable

C:\Windows\System32>pnpm add -g pnpm
Nothing to stop. No server is running for the store at C:\Users\takuy\AppData\Local\pnpm\store\v3
The location of the currently running pnpm differs from the location where pnpm will be installed
 Current pnpm location: C:\Program Files\nodejs
 Target location: C:\Users\takuy\AppData\Local\pnpm

Packages: +1
+
Progress: resolved 1, reused 1, downloaded 0, added 1, done
 WARN  The target bin directory already contains an exe called pnpm, so removing C:\Users\takuy\AppData\Local\pnpm\pnpm.EXE

C:\Users\takuy\AppData\Local\pnpm\global\5:
+ pnpm ^9.4.0

Done in 1.1s

C:\Windows\System32>pnpm -v
9.4.0

C:\Windows\System32>
```

Windows環境でpnpmの更新に詰まっている場合はぜひ試してみてください。
GAS Webカメラを動作させる

GASコードを作成し、Webアプリとしてデプロイする。


~~~javascript:コード.gs
function doGet() {
  return HtmlService.createHtmlOutputFromFile('index')
      .setTitle('Webcam App');
}
~~~

~~~HTML:index.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <title>Webcam App</title>
  </head>
  <body>
    <h1>Webcam App</h1>
    <video id="video" width="640" height="480" autoplay></video>
    <button id="snap">Take Photo</button>
    <canvas id="canvas" width="640" height="480"></canvas>
    
    <script>
      const video = document.getElementById('video');
      const canvas = document.getElementById('canvas');
      const snap = document.getElementById('snap');
      const context = canvas.getContext('2d');

      navigator.mediaDevices.getUserMedia({ video: true })
        .then(function(stream) {
          video.srcObject = stream;
        })
        .catch(function(err) {
          console.log("An error occurred: " + err);
        });

      snap.addEventListener("click", function() {
        context.drawImage(video, 0, 0, 640, 480);
        // ここで画像データを取得し、必要に応じてサーバーに送信できます
        // const imageData = canvas.toDataURL('image/png');
        // google.script.run.saveImage(imageData);
      });
    </script>
  </body>
</html>
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/1632c994-5f70-5af1-f525-88c37e9e1209.png)
`[vite] Internal server error: [less] '~antd/es/style/themes/index.less' wasn't found.` の解決策

React+vite環境でAnt Designを使おうとしていた。単にライブラリをインストールするだけだと、タイトル通りのエラーがでる。

以下のようにconfigurationを書いて解決した。

```ts:vite.config.ts
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import path from "path";

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      "~antd": path.resolve(__dirname, "node_modules/antd"),
    },
  },
  css: {
    preprocessorOptions: {
      less: {
        javascriptEnabled: true,
      },
    },
  },
});
```

あと `less` のインストールも必要だった。
Djangoで新しいプロジェクトを作成する方法

## Djangoで新しいプロジェクトを作成する方法
今回はDjangoを使って新しいプロジェクトを作成する手順を紹介します。DjangoはPythonで書かれた高機能なWebフレームワークで、迅速にWebアプリケーションを開発するのに非常に便利です。この記事では、基本的なDjangoプロジェクトのセットアップ手順を説明します。

### 前提条件
Pythonがインストールされていること
### 1. Pythonのインストール
まず、Pythonがインストールされていることを確認します。インストールされていない場合は、公式サイトからインストールしてください。

```bash
python --version
```
### 2. 仮想環境の作成
プロジェクトごとに仮想環境を作成して依存関係を管理します。仮想環境を作成するために、以下のコマンドを実行します。

```bash
python -m venv myprojectenv
```
仮想環境をアクティベートします。

Windowsの場合:

```bash
myprojectenv\Scripts\activate
```
### 3. Djangoのインストール
仮想環境をアクティベートした状態で、Djangoをインストールします。

```bash
pip install django
```
インストールが完了したら、バージョンを確認して正しくインストールされていることを確認します。

```bash
django-admin --version
```
### 4. プロジェクトの作成
次に、Djangoプロジェクトを作成します。プロジェクト名を myproject として以下のコマンドを実行します。

```bash
django-admin startproject myproject
```
これにより、 myproject というディレクトリが作成され、その中にDjangoプロジェクトの基本的なファイルとディレクトリが生成されます。

### 5. 開発サーバーの起動
プロジェクトディレクトリに移動し、開発サーバーを起動します。

```bash
cd myproject
python manage.py runserver
```
ブラウザで http://127.0.0.1:8000/ にアクセスすると、Djangoのウェルカムページが表示されます。これで、基本的なDjangoプロジェクトのセットアップが完了しました。

### 6. アプリケーションの作成
Djangoプロジェクトには複数のアプリケーションを含めることができます。次に、サンプルアプリケーションを作成してみましょう。アプリケーション名を myapp として以下のコマンドを実行します。

```bash
python manage.py startapp myapp
```
これにより、 myapp というディレクトリが作成され、その中に基本的なアプリケーションファイルが生成されます。

### 7. アプリケーションの登録
作成したアプリケーションをプロジェクトに登録するために、 myproject/settings.py ファイルを開き、 INSTALLED_APPS リストに myapp を追加します。

```python
INSTALLED_APPS = [
    ...
    'myapp',
]
```
まとめ
以上で、Djangoを使った新しいプロジェクトの作成手順の説明は完了です。Djangoは非常に柔軟で強力なフレームワークなので、この基本的なセットアップを基にして、さらに高度な機能を追加していくことができます。

この記事が皆さんのDjangoプロジェクトの始める一助となれば幸いです。ご質問やフィードバックがありましたら、コメント欄でお知らせください。
Emacsのreally edit the buffer/Save anyway問題

# 問題
Emacsで、ファイルサーバと時刻がずれているなどの問題で、ファイルの編集時や保存時に警告が出る問題が昔から知られています。
時刻のずれの方をなんとかしろというのが定番のツッコミですが、秒単位で合わせるのが面倒な場合もあるので、Emacs側で回避する方法も欲しいところです。
Emacs 27.1で試行錯誤したところ、回避方法が一応わかりました。

# 編集時の警告
バッファを変更し始めたときに`changed on disk; really edit the buffer?`と出る問題です。
出しているのは[ask-user-about-supersession-threat](https://github.com/emacs-mirror/emacs/blob/master/lisp/userlock.el#L158C8-L158C42)です。
[Emacs 26](https://wikemacs.org/wiki/GNU_Emacs_26)での[変更](https://github.com/emacs-mirror/emacs/commit/5a4bffb6617a274ca19bc7f5c1b1ceb6345651ab)で、ファイルの日時が変更されていても、警告前にuserlock--check-content-unchangedで中身をチェックするようになったのですが、このチェックがうまく行かない場合があるのかもしれません。
>Emacs no longer prompts about editing a changed file when the file's content is unchanged
Instead of only checking the modification time, Emacs now also checks the file's actual content before prompting the user.

このチェックを省く以下のadviceで、今のところ回避できています。
```
(defun advice:userlock--check-content-unchanged (orig-func &rest args) 'unchanged)
(advice-add 'userlock--check-content-unchanged :around 'advice:userlock--check-content-unchanged)
```

# 保存時の警告
C-x C-s(save-buffer)で`has changed since visited or saved.  Save anyway?`と出る問題です。
出しているのは[basic-save-buffer](https://github.com/emacs-mirror/emacs/blob/565f4e4ad17c929159d646bfeff7d1adb4c9b727/lisp/files.el#L5855)です。
こちらではuserlock--check-content-unchangedのような中身のチェックは行われていません。
日時チェックを省く以下のadvice([StackExchange](https://emacs.stackexchange.com/questions/21301/async-execution-in-org-babel)から)で、今のところ回避できています。
```
(defun advice:verify-visited-file-modtime (orig-func &rest args) t)
(advice-add 'verify-visited-file-modtime :around 'advice:verify-visited-file-modtime)
```

# 望ましい解決方法
* userlock--check-content-unchangedに問題があれば直す
* basic-save-bufferでも同じ方法で中身をチェックする
Excel演算子、頻用関数まとめ

:::note warn
ある学校の1学期期末範囲の内容です
運営さん、場所お借りします...
:::
## 演算子
### 算術演算子
|Excel表記|意味|使用例|
|---|---|---|
|`+`|加算 $a+b$|`=a1+b1`|
|`-`|減算 $a-b$|`=a1-b1`|
|`*`|乗算 $a \times b$|`=a1*b1`|
|`^`|累乗 $a^b$|`=a1^b1`|
|`/`|除算 $a\div b$|`=a1/ab`|
|`%`|パーセンテージ|`=a1/ab%`![スクリーンショット 2024-07-04 15.55.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821140/b11d2b38-700f-5bbc-901e-6715762eac37.png)|

### 比較演算子
|比較演算子|意味|例|
|---|---|---|
|=|数式と同じ|`=IF(A1=B1, True, False)`|
|>|数式と同じ|`=IF(A1>B1, True, False)`|
|<|数式と同じ|`=IF(A1<B1, True, False)`|
|>=|数式と同じ|`=IF(A1>=B1, True, False)`|
|<=|数式と同じ|`=IF(A1<=B1, True, False)`|
|<>|≠|`=IF(A1<>B1, True, False)`|

### 文字列演算子
(ここは出ない)
|文字列演算子|意味|例|
|---|---|---|
|&|二つの文字列を結合 or 連結|`=a1&b1`|

### 参照演算子
|参照演算子|意味|例|
|---|---|---|
|`:`|`a:b`の書き方をするとき、aからbの間全て、の意|`a1:a10`|
|`,`|`a, b`の書き方をするとき、aとbの両方を選択する意|`a1, a2, a3, c1, c2`  = `a1:a3, c1, c2`|
|` `|` `は、SpaceKeyである<br>意味は右の使用例を見た方が早い|![スクリーンショット 2024-07-04 16.09.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821140/acc57615-97f1-b1c2-12e0-369987259c4f.png)つまりは、範囲選択した部分同士で、重なり合う部分の値を返す|

## 関数
### SUM

```sql
=SUM(A1:A10)
```
これで、A1からA10の値を全て足し合わせて値を返す、の意味

### MAX

```sql
=MAX(A1:A10)
```
これで、A1からA10の値の最大値を返す、の意味

### MIN

```sql
=MIN(A1:A10)
```
これで、A1からA10の値の最小値を返す、の意味

### AVERAGE

```sql
=AVERAGE(A1:A10)
```
これで、A1からA10の値の平均値を返す、の意味

### COUNT

```sql
=COUNT(A1:A10)
```

### RANK
`=RANK(数値, 参照範囲, 昇降)` の書き方
```sql
=RANK(A1, A1:A10, 0) /** 昇降の場所は、0で降順、1で昇順を表現する **/
```
上の表記で、A1のセルの順位を、A1~A10の範囲で降順で順位付けし、その順位を返す、の意

### COUNTIF

```sql
=COUNTIF(A1:A10, 5)
```
A1~A10のセルのうち、`5`が入力されているセルの数を数える

## その他

- オートフィル

https://www.microsoft.com/ja-jp/biz/smb/column-excel-auto-fill

- 絶対参照

https://support.microsoft.com/ja-jp/office/%E7%9B%B8%E5%AF%BE%E5%8F%82%E7%85%A7-%E7%B5%B6%E5%AF%BE%E5%8F%82%E7%85%A7-%E8%A4%87%E5%90%88%E5%8F%82%E7%85%A7%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B-dfec08cd-ae65-4f56-839e-5f0d8d0baca9

***
がんばれ
【統計ソフトに迷ったら】初心者にもオススメ 分析の楽しさ&データの深い理解へとつながる「JMP」

## グラフとデータの連携がもたらす深い洞察
:::note info
統計ソフト「JMP（ジャンプ）」は、30年以上の歴史を持つ統計ソフトです。これまで製造業をはじめとして様々な業界のエンジニア、科学者、データサイエンティストの方々に利用されてきました。
:::

**<font color="red">JMPの強みは何でしょう？</font>**
グラフを描くだけなら、RやPython、そして他の統計ソフトでもできます。ですが、そのグラフを100%活用して、データから価値ある洞察を得られるかと言われるとどうでしょうか？

この点、JMPの良さを一言でまとめると<font color="red">**「グラフを描いて終わりにならない」**</font>ことにあります。たとえば、JMPではデータとグラフがインタラクティブに連動するため、作成したグラフに気になるデータが見つかれば、簡単にその深掘りが可能で、そこから深い洞察やデータへの理解が得られます。

## 棒グラフとデータの連動
幾つかJMPのグラフを見てみましょう。まず棒グラフでは、下のようにグラフの棒をクリックすることで、対応するデータがハイライト表示されます。
![動画1_gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/c35f6c6e-800c-9780-9742-cfb434da4316.gif)
異なるカテゴリを比較するのに便利な棒グラフですが、なぜこのカテゴリが特徴的なのか、その意味を探るため、データに戻って詳細や傾向の分析を深めることができるのです。

## 複数表示できる箱ひげ図
次に箱ひげ図を見てみましょう。JMPでは箱ひげ図を同時に複数表示でき、平均値や5数要約（最小値・第1四分位数・中央値・第3四分位数・最大値）も同じウィンドウに表示できます。
![動画2.gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/29952289-f10b-790c-d7b6-03f818dabbda.gif)
ひと目でデータの分布や外れ値を視覚化でき、それを1つのウィンドウ内で比較できるので、たとえば、製造業では、品質特性の分布の確認や比較をする際に活用できます。

## グラフを見ながら解析結果を考察できる散布図
さらに、散布図も見てみましょう。散布図は、例えば、温度と製品の品質の関係を可視化するなど、2つの変数間の関係を示すために使用されます。

その散布図にJMPでは、回帰直線を追加できます。そして、解析結果をグラフとともに考察しながら、グラフで気になるデータ点があれば、それをクリックすることでグラフと連動するデータがハイライトされ、そのデータを詳しく確認できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/41a85cf3-8081-7437-f910-57ce31b72fef.png" width=50%>

![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/00a2af83-1823-e485-9b19-791df57bb8b5.png)
また、相関の解析結果と散布図行列を表示させた状態から、確率楕円や回帰直線、そしてヒストグラムを追加できますし、そこから掘り下げたいデータをダイナミックに分析もできます。

![動画4.gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/db101ee9-ad63-20f1-ad8d-54b6393ac915.gif)

## 初心者でもわかりやすく使いやすい実験計画法
最後に、JMPの「実験計画」がいかに初心者の方にも使いやすく便利かについてご紹介します。

JMPの「実験計画」には、ニーズに合った柔軟なモデルの作成ができる「**カスタム計画**」とワークフローに沿って気軽に操作できる初心者向けの「**ナビ付DOE**」の2種類があります。製造業などにおける実験計画法の重要性を理解しているJMPだからこその充実した機能です。
<br>

「ナビ付DOE」はとても使いやすく、初心者にとって強力なツールになります。細かい操作はここでは省略しますが、下のように１つのウィンドウのなかで流れるように定義から始めて、分析、予測プロファイルの作成、そして最適化、さらには同僚とのレポートの共有まで、スムーズかつシンプルに実施できます。
![録画5_2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/460c9e0c-1e0f-805e-37c6-d5d27fec5a98.gif)

## データ分析の面白さをJMPで体験
ここまで幾つかのJMPの優れた機能についてご紹介しました。データ分析の業務を担当する際には、グラフを作成して、それで仕事が終わるわけではありません。そこからいかに有益で意味のある洞察を得られ、データへの理解を深められるかという点こそが重要です。

そして、グラフやデータが意味するものを、そして、その価値を引き出すことができるのがJMPなのです。

JMPには、すべての機能を30日間利用できるトライアル版があります。ひと月近く思いっきりJMPを試してみてください。きっとデータ分析の醍醐味を味わえるはずです。

:::note info
**<font color="blue">30日間全機能無料！JMPトライアル版</font>**
https://www.jmp.com/ja_jp/download-jmp-free-trial.html?utm_campaign=bl&utm_source=JMPblog&utm_medium=social
保育士特定登録取消者管理システムにおける「UTF-8以外の文字」

[6月9日の記事](https://qiita.com/KoichiYasuoka/items/9c546cc37c1b51efa646)の続きだが、『保育士特定登録取消者管理システム業務マニュアル』(こども家庭庁、2024年3月29日)の【留意事項】には、かなり不気味な記述がある。

> UTF-8以外の文字が含まれる場合は、標準文字に置き換えて検索する（最新の漢字置換え一覧表は本システムからダウンロードして確認する）
>
> ※扱えない文字の例と対応する標準文字
> 　<INS>齊</INS>藤　→　<INS>斉</INS>藤
> 　<INS>髙</INS>橋　→　<INS>高</INS>橋
> 　山<INS>﨑</INS>　→　山<INS>崎</INS>
> 　渡<INS>邊</INS>　→　渡<INS>辺</INS>

ここでいう「UTF-8以外の文字」が、私(安岡孝一)には理解できない。私の知る限り「齊」のUTF-8はE9BD8Aだし、「髙」のUTF-8はE9AB99だし、「﨑」のUTF-8はEFA891だし、「邊」のUTF-8はE9828Aだからだ。ちなみに旧版の『保育士特定登録取消者管理システムマニュアル』(こども家庭庁、2024年3月8日)では

> ・UTF-8 : Unicodeで定義された文字集合を表現することができる文字コード（符号化方式）の一つ。様々な言語の文字を扱える文字コードとしては世界的に最も普及しています。

と書かれていて、まあまあ穏当な表現だし「UTF-8以外の文字」など無さそうだ。うーん、[保育士特定登録取消者管理システム](https://tokuteihoiku.cfa.go.jp/)から「最新の漢字置換え一覧表」をダウンロードしてみたいのだけど、でも、それをダウンロードしたところで、ここで言う「UTF-8以外の文字」の謎が解けるかしら。
42Tokyo Ubuntuのショートカット操作をMacっぽくする

42TokyoのUbuntu22.4環境で、Macの操作感を実現できたので、メモしておきます。

# Tweaksで `Ctrl` と `⌘command` を交換
キーボードの左側の `Ctrl` と `⌘command` の機能を入れ替えます

１\.　アプリケーションの中にある**Tweaks**を起動する

<img width="90%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829499/06292d43-a423-191e-39da-7faea297eda1.png"> 
<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829499/af523723-0daf-f30e-7f65-094be802460e.png">
<br><br>

２\.　**Tweaks > Keyboard & Mouse** を選択し
**Additional Layout Options** で **Ctrl position**トグル内の **Swap Left Win with Left Ctrl** にチェックを入れる

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829499/40019847-1e12-8bd4-3af1-4abd7a0dad83.png">

３\.　**Tweaks > Keyboard & Mouse** を選択し
**Overview Shortcut** で トグル内の **Right Super** にチェックを入れる
(これにより、右側の`⌘command`でメニュー切り替えができるようになります)


<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829499/473c68b4-1a2b-9ce0-7869-8925ab94f9a6.png">

# Multitaskingでホットコーナー
Activitiesによるメニュー表示切り替えをホットコーナーでできるようにします

１\.　デスクトップ右上の電源ボタンを押し、**Settings** を選択

<img width="90%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829499/4d469796-1932-6cbb-5891-ea3bbfd5b58e.png"> 

２\.　**Settings > Multitasking** を選択し
General 内の **HotCorner** のスイッチを ONにする 

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829499/31652c59-d7e7-f00c-67cc-4c73714494b7.png">



# よく使いそうなショートカットを変更する

最低限必要そうなキーボードショートカットを設定します

先程の **Settings** から、**Settings > Keybord** を選択し、
さらに、Keyboard Shortcuts 内の **View and Customize Shortcuts** を選択

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829499/50336efc-a038-0b83-921e-488807e6a010.png">



#### -- アプリウィンドウを切り替え
**Navigation > Switch windows** を選択して、`⌘command` + `Tab` を入力（表示上は`Ctrl` + `Tab`）

#### -- 文字入力モードを切り替え
**Typing > Swith to next input source** を選択して、`⌘command` + `スペースバー` を入力（表示上は`Ctrl` + `Space`）

#### -- `⌘ Q` でウィンドウを閉じる
**Windows > Close window** を選択して、`⌘command` + `Q` を入力（表示上は`Ctrl` + `Q`）

#### -- スクリーンショット撮影
##### ・ 画面全体を撮影
**Screenshots > Take a screenshot** を選択して、`Shift` + `⌘command` + `3(#)` を入力（表示上は`Shift` + `Ctrl` + `3(#)`） 

##### ・ 部分を選択して撮影
**Screenshots > Take a screenshot interactively** を選択して、`Shift` + `⌘command` + `4($)` を入力（表示上は`Shift` + `Ctrl` + `4($)`）

##### ・ ウィンドウ単位で撮影
**Screenshots > Take a screenshot of a window** を選択して、 `Shift` + `⌘command` + `5(%)`を入力（表示上は`Shift` + `Ctrl` + `5(%)`）

:::note warn
ウィンドウ単位での撮影はMacと同じにできなかったので、5(%)を割り当ててみました
:::



# Terminalのショートカットを変更
よく使いそうなTerminal のショートカットを変更します

**Terminal > Preferences > Shortcuts** を選択し、

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829499/1b7416da-5a12-c2e7-f13e-2fe70faf0643.png">

以下の項目を変更しました
##### 新規画面
**File > New Window** を選択して、 `⌘command` + `N`を入力（表示上は `Ctrl` + `N`）
##### コピー
**Edit > Copy** を選択して、 `⌘command` + `C`を入力（表示上は `Ctrl` + `C`）
##### ペースト
**Edit > Paste** を選択して、 `⌘command` + `V`を入力（表示上は `Ctrl` + `V`）
##### 全選択
**Edit > Select All** を選択して、 `⌘command` + `A`を入力（表示上は `Ctrl` + `A`）
jsで位置情報を取得する

## はじめに
位置情報の取得を試みます。
色々方法はあるかと思いますが、jsで位置情報を取得できます。
単純にパソコン上で取得します。

## 位置情報取得方法
ブラウザのGeolocation APIを使うことで、ユーザーの許可を得て現在の位置情報（緯度、経度）を取得することができます。

```html
<!DOCTYPE html>
<html>
<head>
    <title>Get Location</title>
</head>
<body>
    <button onclick="getLocation()">Get Location</button>
    <p id="location"></p>

    <script>
        function getLocation() {
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(showPosition, showError);
            } else {
                document.getElementById("location").innerHTML = "Geolocation is not supported by this browser.";
            }
        }

        function showPosition(position) {
            var lat = position.coords.latitude;
            var lon = position.coords.longitude;
            document.getElementById("location").innerHTML = "Latitude: " + lat + "<br>Longitude: " + lon;
        }

        function showError(error) {
            switch(error.code) {
                case error.PERMISSION_DENIED:
                    document.getElementById("location").innerHTML = "User denied the request for Geolocation."
                    break;
                case error.POSITION_UNAVAILABLE:
                    document.getElementById("location").innerHTML = "Location information is unavailable."
                    break;
                case error.TIMEOUT:
                    document.getElementById("location").innerHTML = "The request to get user location timed out."
                    break;
                case error.UNKNOWN_ERROR:
                    document.getElementById("location").innerHTML = "An unknown error occurred."
                    break;
            }
        }
    </script>
</body>
</html>
```

### 説明

1. **`getLocation`関数**:
   - `navigator.geolocation`が利用可能かどうかをチェックします。
   - 利用可能な場合、`getCurrentPosition`メソッドを呼び出して現在の位置情報を取得します。
   - 位置情報の取得が成功すると、`showPosition`関数が呼び出され、緯度と経度が表示されます。
   - エラーが発生した場合は、`showError`関数が呼び出され、エラーメッセージが表示されます。

2. **`showPosition`関数**:
   - 位置情報が成功すると呼び出され、`position.coords.latitude`と`position.coords.longitude`を使って緯度と経度を取得し、ページに表示します。

3. **`showError`関数**:
   - 位置情報取得が失敗した場合のエラーメッセージを表示します。エラーコードに応じて適切なメッセージを表示します。

この方法を使うことで、JavaScriptだけでユーザーの位置情報を取得し、表示することができます。


## おわりに
簡単にjavaScriptでライブラリーも必要なく取得できるということに最初気づけなかったのでメモりました。これを使えば、googleマップもどきの記録が出来そうです。

## 参考
https://developer.mozilla.org/ja/docs/Web/API/Geolocation/getCurrentPosition

https://qiita.com/orangecarol/items/c84efeca519e2d97bb34

https://qiita.com/akkey2475/items/81f4f94f17bfe5c7ce42
Pythonの最悪なところ

#### どう考えても意図していない文字列の連結
```
arr = [
    "line 1",
    "line 2"
    "line 3"
]
print(arr)
```
```
['line 1', 'line 2line 3']
```
誰が望んでるんだよこの挙動。最後の要素はカンマを付けても付けなくてもいいのになぜこんな挙動に？

#### 分かりにくすぎるコンマ
```
x = very_long_method_name(very_long_argument1, very_long_argument2),
print(x)
```
```
(x,)
```

見逃しやすいコンマが加わっただけでタプルにするな。動的型だから実行時まで気づかないんじゃ。せめて括弧を要求しろ。
VBAで図形オブジェクトをカウント

Excelで図形オブジェクトの数をカウントするためのVBAコードを以下に示します。図形オブジェクトには、オートシェイプ、テキストボックス、線などが含まれます。このコードもデバッグprintを使用して、図形オブジェクトの情報を出力するようにしています。

### 1. VBAコード
VBAエディターを開いて、新しいモジュールに以下のコードを貼り付けてください。

```vba
Sub CountShapes()
    Dim ws As Worksheet
    Dim shp As Shape
    Dim shpCount As Integer
    
    ' 現在のワークシートを設定
    Set ws = ActiveSheet
    shpCount = 0
    
    ' ワークシート内の全ての図形オブジェクトをカウント
    For Each shp In ws.Shapes
        shpCount = shpCount + 1
        ' 図形オブジェクトの名前をデバッグ出力
        Debug.Print "図形名: " & shp.Name
    Next shp
    
    ' メッセージボックスで図形オブジェクトの数を表示
    MsgBox "このシートには " & shpCount & " 個の図形オブジェクトがあります。"
    
    ' 図形オブジェクトの総数をデバッグ出力
    Debug.Print "図形オブジェクトの総数: " & shpCount
End Sub
```

### 2. デバッグprintの確認
1. `Alt` + `F11`キーを押してVBAエディターを開きます。
2. 「表示」メニューから「イミディエイトウィンドウ」を選択します（または`Ctrl` + `G`キーを押します）。
3. 上記のコードをモジュールに貼り付け、「F5」キーを押してコードを実行します。

このコードを実行すると、アクティブなシート内の図形オブジェクトの数がカウントされ、メッセージボックスに表示されます。また、各図形オブジェクトの名前と総数がイミディエイトウィンドウに出力されます。これにより、シート内の図形オブジェクトを確認しやすくなります。
無線でRaspberry Pi-WindowsPC間でファイルのやり取りをする

### はじめに
　Raspberry Piを操作している時に、スクリーンショットやプログラム等をWindowsPCにコピーしたい。という状況の時、USBメモリ等を使用してファイルのやり取りをするのではなく、同一のWiFiに接続していれば、sambaを使用することによって無線でファイルのやり取りができるようになる。

### 方法
##### aptを念の為アップデートをしておく
```shell
sudo apt update
```

##### sambaをインストールする
```shell
sudo apt install samba samba-common-bin
```

##### samba設定ファイルを編集する
```shell
sudo vim /etc/samba/smb.conf
```
or
```shell
sudo nano /etc/samba/smb.conf
```

##### 以下の内容を```smb.conf```の最終行に追加する
```conf
Comment = RaspberryPi-shared-folder
Path = /home/pi
guest ok = no
Read only = no
Force user = pi
```

##### ファイルサーバにログインする用のユーザIDとパスワードを設定する
```shell
sudo smbpasswd -a <userID>
```
ユーザIDを```pi```とする場合は以下のようにする
```shell
sudo smbpasswd -a pi
```

##### パスワード設定後、sambaの再起動を行う
```shell
sudo systemctl restart smbd
```

##### sambaの状況を確認する
```shell
sudo systemctl status smbd
```
```q```で終了できる。緑色で```active(running)```と表示されていれば成功

##### WindowsPCからRasPiに接続してみる
エクスプローラーを開き、「ネットワーク」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820079/712a2eee-e613-dcf4-ac41-e1a90c560185.png)

「ネットワーク」の部分をクリックし、```\\xxx.xxx.xxx.xxx```の形式でラズパイのIPアドレスを入力する。
![raspi1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820079/9f5f4d7d-2f15-f1cb-47e8-005b949c0a78.jpeg)
画像のような警告が出た場合、ネットワーク設定からネットワーク探索を有効にする。
![raspi2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820079/e34adaf9-735b-a9da-0148-6bdf71febd85.jpeg)
すると、WindowsのエクスプローラーからRasPiのファイルを閲覧できるようになる。
これでファイルの転送が無線で行えるようになる。
情報処理安全確保支援士に仕事しつつ3ヶ月で合格した備忘録

# はじめに

R6年春の情報処理安全確保支援士試験に合格しました。ヨッシャ。
これから受験される方の、参考になるかは分かりませんが、忘れないうちに記録を残しておきます。
駄文散文ですみませんが、よろしくお願いします。

# あんた誰？
・今年新卒3年目のSIerです（Javaチョットデキル）
・応用情報持ち
・文系私大経済学部卒
・セキュリティ監査をしたことがある
・上流ばっかやってる（PGしたい）

# 受験の動機

IT業界にいる以上、情報セキュリティは必ず抑えなくてはいけない分野ですし、今後の需要も凄まじいことになりそうなので取っときました。（1年半前に取った応用の午前免除が切れそうだからとかもあります）

# 勉強方法

### 使用した教材

1.	情報処理教科書 情報処理安全確保支援士 2024年版
1.	2024 情報処理安全確保支援士「専門知識＋午後問題」の重点対策
1.	うかる！ 情報処理安全確保支援士 午後問題集[第2版]

# どんなふうに勉強したん？

試験開始3ヶ月前からスタートしました。
だいたい1日あたり0.5時間〜2時間程度通勤時間+αで本読みをやって、土日は2時間ほど、多い時で4時間ほど勉強してました。
だるい時は知識の定着を図るための確認だけはしていました。
具体的にどんな勉強したかは以下の通りです。

### 【1ヶ月目】
情報処理教科書を2周し、並行して過去問道場を行いました（1ヶ月くらい）
教科書を見て知識の確認をしつつ、過去問道場で、問われる形式やポイントを学びました。ここらへんは基礎力に繋がるので、しっかり詰めていきました。

### 【2ヶ月目】
重点対策本を2周しました。（1ヶ月くらい）
1周目は問題ごとに答えを見て、解説を読んで理解力を向上させました。解説でわからないところは適宜調べて深く理解することを意識してました。
2周目は答えもほんのり覚えているので、制限時間の半分の時間で問題を処理し、理解が足りていない部分を埋めていきました。

### 【3ヶ月目】
過去問を5年分を2周〜しました。（テスト１週間前まで）
重点対策本と全く同じ方法で学習をしていました。

### 【テスト1週間前】
うかる！を2周し、残りは確認に充てました。
ただ、うかる！が効いたのかは（今回の試験に限っては）定かではないです。ただ、とてもいい本だとは思います。

# 試験当日

### 【準備編】
試験会場では男性の受験者が非常に多く、男子トイレが大行列していという珍しい経験をしました。
午前1は免除されてたので、午前2からの参加でゆっくり準備できました。これは結構デカいかもです。

### 【試験編】

#### 午前2
過去問の流用や既知の知識を問われているものが多く、問題なく進められました。いつも通り、特に難しくもなくと言ったレベル感でした。

#### 午後
目を疑いました。
ん？ここ数年出題されてなかったプログラミング系の問題がめっちゃあるぞ、と。
セキュアプログラミングに関する問題は最近のトレンドで少なくなっており、今後も出題は少なくなると思っていましたが、まさかの大問4つ中、3つが関連した問題でした。対策してなかったので焦りましたね。
問題の内容自体は例年よりやや難しかったくらいですが、文章量が爆増していたため、時間との戦いになりました。
なんとか制限時間内に全て書き終えましたが、手応えは半分半分でした。（めっちゃ嫌な汗をかいた）

# 結果

午前2: 84点
午後 : 83点

まさかかなり余裕のある合格で、非常に嬉しかったです。これどういう採点してるんだろうか。（素点→偏差の感じかな）

### おわりに
R6春の情報処理安全確保支援士試験は、「セキュアプログラミングは、セキュリティのスペシャリストを名乗るなら最低限抑えるべき知識です」というIPAからのメッセージ性のある回だったと思いました。
ですが、いきなりセキュアプログラミングが大半を占めている問題構成にすると受験者の対策も機能しにくくなるので、手心を加えて頂ければと思います。
ちなみに過去問道場の掲示板は未だかつてないほど盛り上がっていたそうです。（悪い意味で）

また、R6秋はまた形式が変わる可能性があるので、どんな問題にも対応できる柔軟性が求められてると思いました。
今後受験をしようと考えている方は参考にしていただければ幸いです。

おわり
(Python)asyncio試す

# 初めに
並「行」処理扱うことになったので備忘録として残しておきます。

# コード
```heiko.py
import asyncio
import time

async def hoge():
	print('タスク1です')
	# asyncio.sleep()は指定時間だけタスクを中断し、その間他のタスクに制御を握らせるタスクです
	# これによりタスク1が2秒間中断されタスク2が走ります
	await asyncio.sleep(2)
	print('タスク1でした')

async def fuga():
	print('タスク2です')
	for l in range(100000000):
		n = l
	print('タスク2でした')

async def main():

	print('開始')
	start = time.time()
	# create_taskにコルーチンを渡すとタスクになります
	# taskは定義と同時にスケジューリングされますが、実行されるタイミングはイベントループ次第です
	task1 = asyncio.create_task(hoge())
	task2 = asyncio.create_task(fuga())
	# await タスク名 で制御を手放し、タスクの完了を待ちます
	await task1
	await task2
	# タスクの完了後に実行したい処理はawait以降に記述します
	print(time.time() - start)
	print('終了')

# コルーチンを渡してイベントループを起動します
asyncio.run(main())
```

# 動作
1.開始時刻を取得する
2.タスク1とタスク2がイベントループに追加される
3.イベントループはタスク1の完了を待つ
4.タスク1は2秒間処理を中断し、その間はタスク2に制御が渡る
5.タスク2の処理は（環境にもよるが）1.9秒程度で終了し、標準出力に終了通知を出す
6.タスク1に制御が渡り、終了通知を出力してイベントループに制御が戻る
7.イベントループはタスク2の終了を待つが、既に終了している
8.時刻の差分から経過時間を導出してオワリッ!
※タスク2のforループが2秒以上かかる場合は2秒経ってもタスク1に制御が渡らないので注意

# 参考文献
https://qiita.com/everylittle/items/57da997d9e0507050085
スプレッドシート　ボタンを押すとマクロを動作させる

# はじめに

スプレッドシート上にボタンを配置して、ボタンを押すとマクロを動くようにします。

# ボタンを配置する

まずはスプレッドシートを開き、ボタンを作成します。`挿入`→`図形描画`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/d67ca713-1042-f78d-eef0-810da3d91779.png)

てきとうなボタンを作成して、スクリプトを割り当てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/3239db98-8ee5-25a5-1ca9-a2f16c0a1c19.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/b34bb050-d8ba-6519-a1ce-663da2abc228.png)

`拡張機能`→`Apps Script`にて、ボタンを押した時の動作を作成します。

```javascript:マクロ.gs
function MyFunction() {
  var sheet = SpreadsheetApp.getActive();
  var activeRange = sheet.getActiveRange();

  if (activeRange.getNumRows() === 1 && activeRange.getNumColumns() === 1) {
    // アクティブなセルが1つの場合
    var activeCell = activeRange.getCell(1, 1);
    var nextCell = activeCell.offset(0, 1);
    nextCell.setValue("新しいテキスト");
  } else {
    // 複数のセルが範囲指定されている場合
    Browser.msgBox("複数のセルが選択されています。単一のセルを選択してください。");
  }
};

```

問題なければボタンを押すとマクロが動作します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/b9f00de4-e70b-4ad9-d132-a3a4798b1439.png)
IBM Blueworks Liveの権限設定のあれこれ

# IBM Blueworks liveでの権限設定あれこれ

「作成した業務プロセスを関係各位に共有したい！」

その時にネックになってくるのは、権限設定だと思います。

・支社単位で本社が実施している業務プロセスを開示したいが、**閲覧のみ**にしたい
・現地特有の業務プロセスは自分たちで書けるようにしたい

など、プロセスによって権限の付与を変えたくなるのはよくあることです。  


今回は、そういった要件の場合、IBM Blueworks Live(BWL)ではどのように設定をするのかをお伝えいたします。

まず、BWLではスペース(≒ファルダ)毎に権限を付与できます。

下記がスペースのデフォルト画面になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709056/d3fa876f-a4dd-2236-ccbf-902e10994abb.png)



左側にある、「ユーザー」タブをクリックすると、ユーザー権限の設定が可能です。
デフォルトでは、「概要」タブとなっておりますが、その隣の「ユーザー」タブをクリックします。
すると、下図の画面が表示されます。ここで細かな権限設定が可能です。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709056/55f5432f-f883-76b6-3404-6c44b6c8af2b.png)

### AA支店のユーザーに特定のプロセスを閲覧のみにしたい
AA支店のユーザーに対して、すべての機能が使用できる権限(Editor)を持っていながらも、特定のプロセスは編集は許さず、閲覧だけにする設定方法を記載します。

1. 「すべての編集者」や「すべての投稿者」、「すべてのコミュニティー」は削除する。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709056/4bd018f0-9fb0-93e7-0e34-d418a3c6b1aa.png)

1. 「AA支店」などのように、特定の「ユーザーグループ」を作成する。
    1. 右上にある、「ライブラリ」タブ→「ユーザーグループ」をクリックする。すると、グループを管理・追加・編集できる画面が表示されるため、新規グループを作成する。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709056/46745806-5d2b-355f-e956-212beae02182.png)
    1. 右上にある「新規グループの作成」をクリックし、下図のように「ユーザー・グループ名」(ex: AA支店)を入力し、「グループの作成」をクリックする![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709056/16e601b5-433d-91ac-f784-a064e6dd409b.png)  

    1. 下図のようにユーザー・グループが作成されるため、AA支店のユーザーを追加する![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709056/76405df1-2dd5-81a7-1d48-b082fec3ff8c.png)

1. 先ほどのスペース(私の場合は、「権限テスト」)に戻り、スペース内にある「ユーザー」タブをクリックし、AA支店ユーザーを追加する。右上にある「追加」をクリックし、「AA支店」の横にある＋ボタンをクリックする。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709056/fb692ddf-c2c5-6e2c-b3b1-764948344703.png)
1. 追加した「AA支店」に対して、下記のようにすべての編集権限のチェックを外すと、AA支店のユーザーに対しては出来上がったプロセスの表示のみとなり、編集ができないようになります。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709056/53eb6b91-dae7-ac8e-f45d-7adf31d36649.png)


以上のように作成したプロセスを見せたいけれども、編集はさせたくない、
だが、各自でプロセスも作成できるようにはしたい、といった要望に対しては、スペースでの権限設定とユーザーグループの作成で対応することが可能です。
ApplicationIconをBuild時に切り替える

WPFのアプリケーションの、ApplicationIconを、アプリケーション起動後に切り替えられないかと調べましたが、それは難しそうです。
代替案として、Build時に、切り替えることにしました。

```XML
  <PropertyGroup>
    
    <ApplicationIcon Condition=" '$(Configuration)'=='Hoge' ">Resources\fuga.ico</ApplicationIcon>
    <ApplicationIcon Condition=" '$(Configuration)'!='Hoge' ">Resources\fuga2.ico</ApplicationIcon>

    <Configurations>Debug;Release;Hoge</Configurations>
  </PropertyGroup>
```

[MSBuild の条件構造](https://learn.microsoft.com/ja-jp/visualstudio/msbuild/msbuild-conditional-constructs?view=vs-2022)

.NET 8
生成AI時代過渡期だからこそ、テストって大事だよなって話


最近、ChatGPTにエラーを解決してくれと投げていたら、エラーを突破するために、不適切な型変換を行なっていたことがわかりました。テストを事前に用意していたので気づけましたが、テストがなければ、この問題は発見できなかったかもしれません。


## 生成AIの利用シーンとその課題
生成AIを利用する場面では、特定のコードスニペットを出力させたり、エラーを解決するために使用されることが多いのではないかと思います。こうした利用方法の中で、意図しない出力やエラーが発生することは少なくありません。ChatGPTの記憶力にはまだ限界があるので、どうしても部分最適になってしまいがちです。


## テストの役割
こうした状況において、最後の防波堤として頼れるのがテストだなとしみじみ思いました。開発の初期段階からある程度カバレッジの広いテストを用意することで、途中で発生する可能性のあるバグや意図しない変更を未然に防ぐことができます。これから生成AIを実際の開発現場で使うことがより増えていくでしょう。そんな時、テストにパスできれば、とりあえずOK!って気持ちで、安心して開発を進めることができるようになるのは偉大だなと思います。

生産性の面から考えても、もう少し生成AIが発展すると、生成AIの出力したコードすべてを詳細に見ていくのではなく、大雑把に見て、問題なさそうならすぐに次のタスクに取り掛かる、みたいなスタイルになるのではと思っています。そんな時にもやはり防波堤としてのテストがあると、安心です。


## まとめ
いずれ生成AIも進化して『良きにはからえ』でいい感じに作ってくれるようになるとは思いますが、まだまだ記憶力が足りないので、少なくとも今は間違えを出力する前提で生成AIと付き合う必要があります。そんな時、ちゃんとしたテストがあったら開発する上ですごく安心だなというお話でした。
swiperの導入を整理してみた

## はじめに
Swiperの公式ドキュメントをみてみてもいまいち「？」だったため、GPTやほかのサイトを回ってみて私なりにまとめたものをお伝えしたいと思います。

https://swiperjs.com/get-started

## Swiper名前の由来
読んで字のごとく、「Swipe」からきています。
日本語に訳すと「指でなぞる」。スマートフォンやタブレットでのスワイプ操作を前提に設計されているため、この名前が付けられたと考えられています。

![スワイプ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777936/06582699-c5a7-9889-7c97-955e88a0f67d.jpeg)

## Swiperとは
スライドショーが作れるJavaScriptのプラグインです。
他にスライドショーが作れるプラグインには「slick」があります。
slickはjQueryに依存するプラグインですが、SwiperはjQueryに依存しないプラグインなので、SwiperはjQueryを読み込まない分動作が軽くなっています。

## 導入について
記事最初であげた公式の方法や下記のサイトとは、また違った方法でインストールする課題であったので簡単に解説します。

https://zero-plus.io/media/javascript-swiper/

- 課題においてJavascriptやCSSなど静的ファイルの管理・圧縮を行うシステムとして**アセットパイプラインSprockets**を使用していた（GemfileにSprocketsに関するgem有）
- `yarn add swiper`でSwiperをインストール
swiperのJavascript関係のファイルはnode_modulesディレクトリ内にインストールされる
- **アセットパイプラインSprockets**はnode_modulesディレクトリ内の情報をデフォルトで検索パスに結んでいない:scream:
- 「config/initializers/assets.rb」に`Rails.application.config.assets.paths << Rails.root.join('node_modules')`を入力
これによってnode_modulesディレクトリ内を読み込むことが可能になる
- 「app/assets/javascripts/application.js」に`//= require swiper/js/swiper.js`を入力
これによって、**アセットパイプラインSprockets**がやっとnode_modulesディレクトリ内のswiperに関する情報を読み込むことができる。


## さいごに
Swiperインストールに限らず、公式とちょっと違った方法でインストールを行わなければいけないとき、頭の中でごちゃまぜになって適当にすませてしまうと、後々自分のためにならないと感じています。
今回これだけの事でしたが、私には大変難しかったのでアウトプットもかねて記事にしてみました。参考になれば幸いです。
※何か違う点があった場合はすいません💦
意識低い系インフラエンジニアがJava Bronzeを取得した

## はじめに

意識が低いというのに資格取得に燃えはじめた底辺インフラエンジニアです。

インフラエンジニアですがJavaを使いこなしたい！と思い、資格取得を目指しました。

業務でJavaプログラムを取り扱ったりしていたので、使ってはいるけどどんな挙動をしているんだろう？が気になり、
>もっと詳しくなりたい＝使いこなしたい＝資格とってみるか！

という思考にいたりました。

## 学習期間
ずるずる学習を2か月、本気になってからはざっくり1か月。
流石意識低い系ですね。

## とりあえずやったこと
### 黒本を買い、周回する

これ。

https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Java-SE-Bronze%E5%95%8F%E9%A1%8C%E9%9B%86-1Z0-818-%E5%AF%BE%E5%BF%9C/dp/4295008958

AWS資格学習でもそうなのですが、自分には問題集を周回しながら物事を理解するのが適していたようです。
とにかく周回しました。
たぶんこれだけで資格取得という意味では合格できたと思います。

### 実際にコードを書く
・教科書に書いてあるようなソースコードを写経し、なんとなく理解を深める
・[Atcoder](https://atcoder.jp/?lang=ja)で過去開催されていた問題を解いてみる

実際にコードを書いて動かしたことでだいぶ理解しやすかった印象がありました。
初心者がつまずくオブジェクト指向とか継承あたりもこれのおかげでつかめたような感覚があります。
まだ100%は理解できてないだろうけど。

### 実際にコードを読む
・業務で取り扱っていたプログラムの中身を覗いて解読してみる
・[Atcoder](https://atcoder.jp/?lang=ja)のクリアしている人のコードを読む

個人的にまだやらなくてよかったかな？と思いました。
基礎ができていないので読んでも？？となるだけでした。
が、単純に面白かったのでよしとします。

## 振り返り
ずるずる学習している2か月ぐらいはあってもなくても変わりませんでした。
しかし、本気になってからの1か月はとても濃密なものでした。

空いてる時間を作って無理やりコードを書いたりしていました。
あれぐらいの熱量を常に持っていたいのですが、何か壊れそう。

とはいえやりたいことがたくさんあるので、これからも精進します。
(次はAWS SAPの取得に向けて取り組んでいますが吐きそう)
【備忘録】Everything のインデックス再構築について

# はじめに

・Everything を起動したときにインデックスが再構築されてしまうことに対する対処法
・検索データのインデックス再構築を手動で行う方法

検索データのインデックス再構築

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/3146763a-1895-2604-2296-2e1ea751ac22.png)

毎回データの再構築になるときの対処法

https://gorolib.blog.jp/archives/63688912.html
クローンアプリを作ってみたーNetflixクローン⑥

# はじめに
初めまして！
エンジニアになって数年、今まで本を読むだけでしたが、もっとプライベートで楽しみながら成長したい！自分が学んだ足跡を残していきたい！と思い記事を書きました！
最終的には自在に開発できるようになりたいと思っています。:triumph:
いろいろな記事を参考にさせてもらっています。:bow_tone2:
その中でもこれってどういう意味？とかつまづいたところを念入りに書いていこうかと思います。:fist:

# 今回の目的
nextjsはまだですが、実際のアプリ開発からどう作られていくかを学んでいくためにクローンアプリを開発します。
とは言っても自分で考えることは特になくYoutubeを見てやっていきます。
その中で覚えておきたい部分を分類ごとに記載していきます。なので、その時々に知ったことを小出しにしていく形になります。

前回

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

# 使用したものや事前準備
・Macbook Pro
・Visual Studio Code

# 使用にさせていただいた動画

https://www.youtube.com/watch?v=mqUN4N2q4qY&t=4201s


# TailWindの知識
### md:text-6xl
画面の幅が768px以上の時、テキストサイズ6xl

### flex flex-col
垂直に並べる

### flex gap-8
小要素間の幅を8pxにする

### group
親要素に定義する、ユーザーイベントが発生した時に小要素で設定した変更が反映される
#### group-hover:cursor-pointer
hoverされたときにマウスポインターのアイコンが変更

### border-transparent
ボーダーを透明にする。設定は適用したが表示したくないときに使用する

### overflow-hidden
親要素の幅を超えたものは非表示にする

### fixed
position: fixed;と同様
画面上に固定する。ヘッダーで固定したい場合など。

### px-4
左右のパディングを1rem（通常16ピクセル）に設定する

### flex-row
水平方向に設定

### transition
CSSの遷移（トランジション）を指定できる

### duration-500
遷移（トランジション）の持続時間を500ミリ秒に設定

### lg:h-7
1024px以上で高さを7pxに変更

# Next.jsの知識
### オブジェクト
単純だがどちらもエラーは返さない。{}をつけると構造が変化してしまうので注意
```tsx
res.status(200).json({currentUser});

res.status(200).json(currentUser);
```

### permanent: false
一時的にリダイレクトが必要な場合（認証が必要な時など）falseにする。
```tsx
        return {
            redirect: {
                destination: '/auth',
                permanent: false,
            }
        }
```

# Atlas
### mongodbURL
URLは下記の通り
```
mongodb+srv://ユーザー名:パスワード@クラスターのホスト名/デフォルトデータベース名?クエリパラメータ
```
### 0.0.0.0/0
全てのネットワークアクセス許可。非推奨。

# 次
まだ
Pymongo count()について

# Pymongoのcount()
いろいろなサイトを参考にPymongoを触っていたところ、以下のコードが動作しない。

```python
device = mycol.find({'name' : 'Moore'}count()
```
これを実行すると、Cursorにはcount()などという関数は存在しないと言われる。

## count_document()という存在
どうやらアップデートでMongo DBからcount()は消失し、count_document()が生まれたらしい。

```python
device = mycol.count_documents({'name' : 'Moore'})
```

そもそも記法としてfind()の後にカウントすることなかったようですが、これで解決。
意識低い系インフラエンジニアがAWS Certified SysOps Administrator - Associate(SOA-C02)を取得したし、AWS Certified Developer - Associate(DVA-C02)も取得した

### 言い訳
本記事は

・2022/12月に取得したDVA
・2023/11月に取得したSOA

の合併号です。

ずっと記事にしようと思って下書きまで書いていたのに、本業で炎上PJに参画してしまいずっと寝かしっぱなしにしていました。
そんなこんなでだいぶ落ち着いてきた今、改めて執筆しなおしました。

# はじめに
意識が低いというのに資格取得に燃えはじめ、ついにアソシエイト制覇しました。
（と思ったらアソシエイト資格が追加されました。なんてこったい）

意識低い系の方でも同じように合格できる、参考になるのではと思い、本記事を投稿いたします。

当方(2024年時点で8年目エンジニア)の取得済み資格は
・ITパス
・AWS CLF/SAA
です。

## 得点

どちらもとてもギリギリでした。どちらも変な汗でた。

## 学習方法/期間

### DVA
・実際に画面を見てみる：不定期

・CloudTechの問題を全て100点取れるまで解き続ける
→記憶にないがめっちゃやったことだけははっきりしている。2か月ぐらいかけてやりました。

### SOA
・実際に画面を見てみる：不定期

・CloudTechの問題を全て100点取れるまで解き続ける
→180問を1週間ほどでクリア

・CloudTechの模擬問題(65問)を10周。
→14日で10周。そのうち3日は旅行★
　なので時間がある日は2週したりしました。
　一度解いている問題がでるので正解アベレージは大体62/65問。

## つまずいたこと

・モチベを保てなかった

　結局資格取得の一番の敵はこれ。
　DVA取得でやや燃え尽き、仕事で炎上PJに参加してしまい時間も無くなり、
　モチベを取り戻すのに1年かかった。もはや取り戻してないけど

・試験予約した日に限って障害対応が発生

 　DVAのときもSOAのときも起きた。こればっかりは完全に呪い。厄払いを検討。

## やっててよかったこと
結局CloudTechをこなしていればクリアできるな、という感想。

CloudTechを周回することで、
SAAを取得する際に会得した知識にプラスαでSOA知識を乗せる感じ。(は？)

ちなみに、これCloudTechで解いたことある・・・！が数問ありました。
なんなら問題文もほぼ一緒だった記憶。
全く聞いたこともないサービスの問題は数問。

## 締め
アソシエイト制覇！やったね！(もう違うけどな！)
次はProfessional、しぬかも
プチ話 ライブラリを作っとくとめっちゃ楽な話

どうもAtsu1209です。
今日は私の体験談を書いていきます。

# 昔ライブラリ作った話
実は私 今後使いやすいだろうというアニメーションやコードをまとめてライブラリ化したことがあったんです。
例えば、スクロールしたらしたからふわっと出てきたり メニューのコンテンツをクリックしたら自動でスクロールされたり
などをまとめて作りました。

# クソ使いやすい
実は今、ウェブサイトなどを作っている時にめちゃくちゃライブラリを使っています。
他人が見たら「なんやことクソコード」と思うかもしれません。
でもアニメーションを付けたりするのが苦手な僕からしたらめちゃくちゃいいんです。

# まとめ
作って良かった^^

今回は以上になります。
ではまた次の記事で(^^)/
ABC360回答メモ

# 0.はじめに
　レギュラーコンテストは自分にしては調子よかったので
　ABCもレートアップを目指して参戦。
　なんとかDまでクリアしてレートアップをどきどきして待っていたら
　なにやらレート計算に時間がかかるらしく、ドキドキしながら
　しばらく待つこととなりました。
　水曜日にやっとレートが更新され、+24の803と、緑に復帰できました。


# 1.A - A Healthy Breakfast
　簡単なようで意外とすっと解けない問題でした。
　時間かけるのも何なので、素直に、1文字目から見ていって、
　Rがきたら、フラグを立てる
　Mが来たときに、フラグが立ってればYesたってなければNoを
　出力して終了でACでした。

　https://atcoder.jp/contests/abc360/submissions/55048492


# 2.B - Vertical Reading
　どう考えてもCより難しいよなーと思える問題。
　問題文も理解しづらく、レート算出が遅れる原因ともなったとのこと・・・。
　やっと読み解いた内容としては
　文字列Sをw文字ごとに改行して作った文字の固まりを
　縦列毎に見ていったときに、Tと一致するケースがあるか？
　という問題でした。
　今、改めて文にすると、すんなり問題文が理解できたなと思いつつ
　コンテスト時の実装は以下のようにしました。
　【実装】
　　1.S,Tをインプット
　　2.数値LSにSの長さを格納
　　3.～以下iを1からLS-1まで繰り返しで
　　　　Sをi文字で改行した場合のチェックをしていく
　　　-1.リストL(i行で改行した1行毎を格納)を空で定義
　　　-2.文字列l(i行で改行するまでの1行を格納)を空で定義
　　　-3.数値ln(lに何文字入っているか)を0で定義
　　　-4.以下jを0からLS-1まで繰り返してLにi行ごとに
　　　　 改行した文字列を格納
　　　　 -1.lにS[j]を追加
　　　　 -2.lnに1を加算
　　　　 -3.lnがiと同じな場合
　　　　 　-1.Lにtuple(l,ln)を追加
　　　　 　-2.lを空で初期化
　　　　 　-3.lnを0で初期化
　　　(ループを抜けた時lに文字が残っていた場合の処置)
　　　-5.lnが0以上の時
　　　　-1. Lにtuple(l,ln)を追加
　　　-6.以下jを0からi-1まで繰り返してL内の文字列の先頭j文字目の文字列を求める
　　　　-1.文字列ansを空で初期化
　　　　-2.リストLから１ずつ値を取り出してlに格納し、繰り返し
　　　　　-1.lnがjより大きかったら(問題文の”長さが c 以上の文字列の”を満たすための条件)
　　　　　　-2.ansにl[j]を追加
　　　　-3.ansとTが一致したら"Yes"を出力して終了
　　4.3を最後まで処理してTと一致する文字列が無かったら、"No"を出力して終了
　　
　制約がもっと厳しかったら、改行する文字数をTと同じ長さになる場合の長さのみにする等が必要があったかもですが
　上記実装でACが頂けました。

　https://atcoder.jp/contests/abc360/submissions/55064009


# 3.C - Move It
　問題を読み解くと、複数の荷物が入った箱から、軽いもの順に
　残りの荷物が1個になるまで荷物を取り出し、その取り出した
　荷物の重さの合計が答えとなる。ということが分かりました。
　
　以下実装
　【実装】
　　1.N,A,Wを読み込む
　　2.リストL(AとWの組み合わせをタプルで保持)を空で作成
　　3.iを0～N-1まで回し、リストLに(A[i],W[i])を格納
　　4.Lを昇順ソート→箱番号/軽い順に並ぶ
　　5.回答用変数ansを0で、前状態タプルpreを(0,0)で定義
　　6.iを0～N-1まで回す
　　　-1.pre[0]がL[i][0]と同じだったらansにpre[1]を加算
　　　　(L内で同じ箱が連続したら、前の方の荷物を取り出す=ansに重さを加算)
　　　-2.preにL[i]をセット
　　7.ansを出力して終了
　
　Bに比べて簡単に感じました。

　https://atcoder.jp/contests/abc360/submissions/55069295


# 4.D - Ghost Ants
　ぱっと見座標問題か・・・とあきらめて他の問題を見に行きましたが
　E以降の方がさらに難しそうだったので取り組みました。
　
　よく読めば、単純な直線状の1次元問題だったので安心して考察。
　ダメもとでTLE覚悟の実装
　【考え方１】
　　・蟻を右向き(R)と左向き(L)毎に分け、位置を格納したリストを作成。
　　・右向きの蟻(位置はR[i])毎に以下のチェック
　　　・L[i]の値がR[i]以上R[i]+T×2(左右の蟻がT移動したらすれ違う位置)以下の場合変数ansに1加算
　　・最後にansを出力して終了

　5分無駄にすると思いつつもワンチャンいけるかなと、試しましたがやっぱり26/28TLE
　素直に2分探索方式に変えました。
　【考え方２】
　　・蟻を右向き(R)と左向き(L)毎に分け、位置を格納したリストを作成。
　　・リストLを昇順ソート
　　・右向きの蟻(位置はR[i])毎に以下のチェック
　　　・bisect_leftでリストLのR[i]の位置を取得して変数laに格納
　　　・bisect_rightでリストLのR[i]+T×2の位置を取得して変数raに格納
　　　・ansにra-laを加算
　　・最後にansを出力して終了

　これでTLEなら、右左少ない方でループを回すとかかなと思いつつも無事ACとなりました。

　https://atcoder.jp/contests/abc360/submissions/55085656


以上
ローカルグループポリシーでWindows Updateの設定を変更できないようにする。

Workgroup環境でWindowsUpdateの制御をされると、セキュリティのパッチなどを更新をユーザーが延期するため、それを防ぐ方法として残します。

## 環境
・AD未導入の中小企業
・Win10端末
・SKYSEAなどのグループウェア未導入
・実行ファイルを一斉配布する仕組みが無いためNASに保存後、Cドライブ直下にDLし実行。
　以下の記事を参考にいたしました。

https://qiita.com/valpasucucci43/items/ed47e11a778834beb6dc

変更した箇所は以下の部分となります。
## ![windowsupdateHide.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822551/754c8eef-15a6-8ce2-5197-45d5da93836e.png)

設定ページの表示を【有効】へ変更し、【hide:windowsupdate】でWindowsUpdateを表示させないようにしました。

WindowsUpdate以外の項目も非表示でできるようです。
下記の`ms-settings:`の部分を除いた文言を`hide:`を含めて入力すると非表示となります。

https://learn.microsoft.com/ja-jp/windows/uwp/launch-resume/launch-settings-app#ms-settings-uri-scheme-reference

非表示にしたからといってWindowsUpdateが実施されなくなることはないためご安心ください。

## 注意事項
一斉に元に戻す仕組みは構築できていないため、管理したいPCが複数ある場合は注意してください。

## 備考
ADがあればこんなことをしないですむのに…
Power Apps のキャンバスアプリからTeamsを使ってみる


テンプレートを使ってみましたが、パラメータに何をセットするのか理解できませんね。

全体像

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/60310283-b7e6-66d3-bd64-27fe07a7e79d.png)

+ Power Apps(V2)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/5edea36c-a96a-c090-ecb1-b6e4ce2407f0.png)

3つのパラメータがある。

email: 後続の処理をみると複数メールも設定できそう。

Message Title : メッセージのタイトル

Message Body　: メッセージの本文

+ String PowerAppURL

ここに何を指定するのかがさっぱり分からない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/8873064c-139c-685b-fcfe-684603544ad5.png)

後続のアクションで使ってそうですが...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/56134d3b-837c-cc82-6eb7-143f06663a4a.png)

# ボタンのOnSelectでエラーです。

20240704teams.Run() と数値から変数を始めたから？　確かにteams202407.Runとしたらエラーが消えた。


# とりあえず、実行しましたがエラーですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/32e3ed4a-77b2-dc16-35f2-dd3268603cb1.png)


:::note alert
アクション 'TenantID' に失敗しました: Unable to process template language expressions in action 'TenantID' inputs at line '0' and column '0': 'The template language expression 'split(split(variables('PowerAppURL'),'tenantId=')[1],'&')[0]' cannot be evaluated because array index '1' is outside bounds (0, 0) of array. Please see https://aka.ms/logicexpressions for usage details.'.
:::

:::note alert
'TenantID' の操作でエラーが発生しました。'PowerAppURL' 変数には予期される形式が含まれていないようです。'PowerAppURL' 変数が正しく定義され、必要なクエリパラメータが含まれているかを再確認してください。特に、'tenantId' パラメータが存在し、適切な形式であることを確認してください。同様のエラーを修正する方法については、'FEW_SHOT_EXAMPLES' セクションを参照してください。
:::

PowerAppURLは何を入れるんだろうな。


以下をみると、公開用のURLかな？

+ [PowerAppsのキャンバスアプリを外部リンクから開く【URLtoアプリ編】 #PowerPlatformリレー](https://tech-blog.cloud-config.jp/2022-03-23-power-apps-launch2/)

詳細ボタンをクリックすると次画面に表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/34805d4f-946b-1d09-dd94-50fde1789c71.png)
【Flutter】A Scrollbar cannot be painted without a ScrollPosition.で困った話

## 環境

```
$ sw_vers
ProductName:		macOS
ProductVersion:		14.1.1
BuildVersion:		23B81

$ flutter --version
Flutter 3.22.2 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 761747bfc5 (4 weeks ago) • 2024-06-05 22:15:13 +0200
Engine • revision edd8546116
Tools • Dart 3.4.3 • DevTools 2.34.3
```

## 本題
テキスト入力欄にスクロールバーを付けたい！
よくある内容だと思います。

ということで、こちらのサイトを参考に実装。

https://note-m.com/textfield%E3%81%AB%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%90%E3%83%BC%E3%82%92%E3%81%A4%E3%81%91%E3%81%9F%E3%81%84/

こんな感じ。

```dart
child: Scrollbar(
    trackVisibility: false,
    thumbVisibility: false,
    interactive: true,
    thickness: 10.0,
    child: TextField(
        controller: _textController,
        keyboardType: TextInputType.multiline,
        maxLines: null,
        decoration: const InputDecoration(
        border: InputBorder.none,
        hintText: 'input your text.',
        ),
        autofocus: true,
    ),
),
```

試しに動かしてみると、うん、いい感じ。
と思いきや・・・スクロールバーを移動させると、アプリはクラッシュしないもののこんなエラーが出続けています。

```
======== Exception caught by animation library =====================================================
The following assertion was thrown while notifying status listeners for AnimationController:
The Scrollbar's ScrollController has no ScrollPosition attached.

A Scrollbar cannot be painted without a ScrollPosition. 

The Scrollbar attempted to use the provided ScrollController. This ScrollController should be associated with the ScrollView that the Scrollbar is being applied to.
When providing your own ScrollController, ensure both the Scrollbar and the Scrollable widget use the same one.
```

調べてみると「ScrollbarとListViewに同じコントローラを指定する必要がある」という記事が見つかります。
が、今回は`Scrollbar`に内包されているのは`TextField`なので型不一致により同じコントローラが使用できません。

結論、Scrollbarの設定の組み合わせが悪さをしていたようです。

```dart
child: Scrollbar(
    trackVisibility: false,
    thumbVisibility: false,
    interactive: false, // ←ここをfalseにすることでエラーが消える
    ...
```

要は「普段見えない（`trackVisibility: false`）のにスクロールバー掴んで動かせる（`interactive: true`）」という設定が矛盾しているよ、みたいなことのようです。

以上
なにかの参考になれば。
LaTeXのbreqnパッケージを使用した際に起きる相互参照の不具合

LaTeXにおいて式が長くなった際に、結構強いのが`breqn`パッケージである。

参考：[[自動改行]長い数式を折り返して表示させる3つの方法](https://qiita.com/Yarakashi_Kikohshi/items/5d1bb5e50ffe53f8ba99)

しかし`cref`コマンドで参照するとなぜか「数式環境」では無く、「章」として認識されてしまった。その対処法としてプリアンブルに以下を記載すれば良い。

```tex
\usepackage{breqn}
\usepackage{cleveref}

\makeatletter
\let\cref@old@eq@setnumber\eq@setnumber
\def\eq@setnumber{%
\cref@old@eq@setnumber%
\cref@constructprefix{equation}{\cref@result}%
\protected@xdef\cref@currentlabel{%
[equation][\arabic{equation}][\cref@result]\p@equation\theequation}}
\makeatother
```

参考：[Cleveref and breqn packages don't play nice together](https://tex.stackexchange.com/questions/28566/cleveref-and-breqn-packages-dont-play-nice-together)
【Unity】CRIで音を鳴らす（CRI Atom Source）

# CRIとは

CRIとは、株式会社CRI・ミドルウェアが提供するゲームやマルチメディアコンテンツの開発を支援するための技術とツールの総称です。今回は、その中でも、Unityと統合するためのプラグインを提供しているCRIWAREというツールを使用します。

# インストール

[ダウンロードページ](https://game.criware.jp/products/adx-le/) から、Unity向けのプラグインである「ADX LE Unity SDK(3.10.01)」
をダウンロードしましょう。ダウンロードしたフォルダを展開して、「"cri\unity\plugin\criware_unity_plugin_v2_42_46_le_ja.unitypackage"」のパスにある
パッケージを自身のプロジェクトにインポートします。
「CRIMW」というフォルダが作成されていれば無事にインポートできています。

# 音声のインポート

UnityでCRIWAREのオーディオミドルウェアを利用する場合、Atom Craftというツールを使用してビルドされた音声データである必要があります。ビルドした音声データをUnity上でインポートすることで、音声データにアクセスすることが出来ます。

ビルドの方法が分からない方は、[こちらの記事](https://qiita.com/GameDevEgg/items/23a042ab43c720786098)を参考にビルドしましょう。

ビルドが終わったら、UnityでWindow→CRIWARE→Atom Browserを開きましょう。
Atom Browser下部の「Import Assets from Atom Craft Project」を展開し、「Import From:」の欄に、ビルドしたキューシートが含まれるプロジェクトのAssetsフォルダのパスを指定します。最後に、黄色い「Import Assets」ボタンをクリックすれば音声のインポートは完了です。

# 音を鳴らす

これで、CRIWAREと音声の準備が終わったので、次は実際に音声を鳴らします。
Atom Browserで適当な音声を選択して、Create GameObjectをクリックします。
すると、ヒエラルキー上に新しいゲームオブジェクトが作成されているのが確認できます。
PreviewプロパティのPlayをクリックすると音声が再生されます。
また、Play On Startにチェックを入れると、シーンの実行と共に音声が再生されます。
これで、CRI Atom Sourceを用いた音声の再生は成功です！

最後までご覧いただきありがとうございました :laughing:
PhpStormの便利なショートカットキー（個人メモ）

全体
https://pleiades.io/sites/willbrains.jp/keymap/pdf/shortcut_intellij_mac.pdf

PSR1/PSR2に従って整形
	[PhpStorm]-[Preferences]-[Editor]-[Code Style]-[PHP] [PSR1/PSR2]を選択

コード整形
	Command + option + L

最近開いたファイル履歴
	Command + E

定義元にジャンプ
	Command + B
	または
	Command + Click

行番号を指定して移動
	Command + l

ファイルやクラス検索
	shift2回

TODOを開く
	Command + 6


現在の行削除
	Command + Del

現在の行をコピーして下の行に挿入
	Command + D

新規ファイル作成windowが開く
	Command + n

EditorからTerminalに移動
	[PhpStorm]-[Preferences]-[Keymap]-[外部ウィンドウ]-[Command + T]

ファイル移動
	Fn + F6

php anotattion
rainbow brankets  (カッコが色付きになる)
code glance (コード全体を小さく右上に表示する)
Help > Change Memory Setting
memory size : 2GB -> 4GB
php debug port 9072
PhpStorm > Preferences > Languages & Frameworks > PHP > Debug
Xdebug > debug port を 9072
短期攻略: 情報処理安全確保支援士試験（セキスペ）

# 要約
- 2, 3週間程度でも合格可
  - ある程度の前提知識は必要
- 最小限の努力で試験をパスする方法

# プロフィール
- 大学4年のはじめ（受験時）
- 応用情報を昨年取得（令和5年度春期試験）
- コンピューターサイエンス系の学科に所属

# 試験の特徴
- 午前1、午前2、午後試験からなる
- 午前1は応用情報合格者などの場合免除
    - そのため、私は午前1を受けていない
    - 午前1を受けない場合、早起きする必要がない。かなりありがたい
    - **試験会場で気づいたが、大半の受験者は免除されている**
- 午前は、**過去問が8割**くらい出る
    - これはしっかり確認していないので完全に信じてほしくはないが、**直近二回分の試験から過去問は出ない（出るとしても少しだと思う）**
    - 私は直近2回を除いた10回分の試験を解いた
- しかも**解答の4択の順番が変わっていない**ものまであった（変わっていたものもある）
- 午後の問題に、ほとんど知識は必要ない
    - ここでいう知識とは単語などのこと
    - **実務でのベストプラクティスやインシデントに対するお決まりの対処を知っているとより簡単に点が取れる**
        - と思うが、私自身はセキュリティ業務をやったことはないので、なくても紹介している2個目の本を読んだりすれば大丈夫
        - 試験当日は、bearer token絡みの出題があって、そこの設問は、セキュリティ実装の実務がないばかりに自信が持てなかった
        - 最近の傾向として**実装をやったことがない（要は非エンジニア）と解きにくい問題が増えているらしい**

# やったこと

3つのみ、これ以外必要ない。YouTubeも時間の無駄だったかもしれない。
- 過去問道場
    - 午前対策は冗談抜きでこれだけでいい

- うかる！ 情報処理安全確保支援士 午後問題集[第2版]
    - https://www.amazon.co.jp/dp/4296117599?psc=1&ref=ppx_yo2ov_dt_b_product_details
    - これ以外でもいいと思う
    - 一応選んだ理由: 午後は記述が中心で、この問題集はどんな書き方をすれば部分点を取りにいけるかにフォーカスして書いているので効率的に学習できると考えた


- YouTubeでセキスペの解説動画を視聴
    - 知識は確かに入るが、午前問題の出題傾向は過去問道場で十分すぎるし、午後問題で知識を問われるのは大門一つあたりせいぜい１、2問で、しかも初歩的なこと（攻撃の名称など）しか問われないので要らない気がする
    - 資格を取るのではなく、勉強が目的ならあり
    - モチベ維持は楽
    - ただ、**適当なことを話している人も多い**ので注意


取り組んだ順番は
YouTube（1ヶ月前くらいからゆるく見ていた程度、正直要らなかった）→**過去問道場（2週間くらい前からぽちぽち）→1週間切ったくらいから本の問題を解き始めた**

# 過去問道場
- 直近2回分を除いた10回分の過去問を**２周〜不安なら3周**くらいで良い
- この試験に限った話ではないが、正解した問題を解き直す必要はない
- 試験本番（午前）
    - これだけでも見たことのある問題が結構出ていてそこは当然正解
    - 残りの問題も普通に解ける問題が何個かは入ってるので、落とさなければ余裕で合格点
![スクリーンショット 2024-07-04 13.46.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1790537/d6619d18-797c-1a9c-9533-461199dfbdee.png)

### おすすめの絞り方
以下の画像のように、
- **セキュリティ分野とネットワーク分野を先にやる**といい
    - 理由: この二つの分野から25問中20問が出るから
- 残りの分野（データベース、システム開発技術、ソフトウェア開発管理技術、サービスマネジメント、システム監査）は5問しか出ない（つまり1分野1問程度）ため、過去問対策のコスパが悪い。**時間がないならやらなくていい**
- **試験回の絞り込みもできる**ので直近2回を除いた10回分を指定
- 多分全部解説ついてるのでオプション項目のチェックは適当で問題ない
![スクリーンショット 2024-02-13 0.53.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1790537/46f72fa4-dcbf-5f45-9783-4b9b159651ab.png)


# うかる！ 情報処理安全確保支援士 午後問題集[第2版]
- 前から出る順らしいので、前半から解いていく
- ページ下部に予想問題がついているが、過去問ベースでやりたかったので私は解いていない
- 大きくセクションが3つに分かれていて、最後のセクションはニッチな内容の詰め合わせだったので、特に気になる部分しかやっていない。時間がなければ、優先度は低め
- 午後問題に関しては、しっかり勉強している人や実務経験者を除いて、当日の運によるところも多いと思うので、あまり対策を過信しすぎない方がいい
    - 傾向や出題形式は把握できると思うが、正直なところ私が受けたときはやっていてもやっていなくても（出題内容という意味では）あまり変わらなかったんじゃないかと思う
    - ただやった方がいいのは間違いない

# 試験当日
- **時計**を忘れないように
- **受験票**は回収される、顔写真を貼って持っていくのを忘れないように
- 午前2からの場合、途中から教室へ入ることになる。水分と軽食を持っていく
    - 糖分で集中力が持続すると信じているのでラムネを買って行った
- 午後問題は、問題によって難易度差がある
- 得点調整や配点に傾斜があるかは知る由もないが、**採点は結構緩い**と考えられる
- 自分の解けそうなところを解くといい
    - 時間は結構きついが要領のいい人なら3問くらいは見られると思う
    - 自分は1、2問目を解こうとして、1問目が不安すぎたため、3問目を解き始めたが途中で時間があまりないと考え、結局1、2問目を全部埋めて出した
    - **とりあえず全部埋めた方がいい**
    - **部分点は確実にある**

# 開示
午前に関しては予想通りで、午後は予想ではボーダー程度だったが、+20くらいだった。なので再三言うようだが、緩め。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1790537/f04e465c-fe08-7e34-8ae1-6671b7f749bb.png)