OmniAICreator/Qiita-1.07M huggingface dataset:
40回の登壇経験から学んだ、今日から始められるLTネタ作りの4つの法則

この記事は[めぐろLT Advent Calendar 2024](https://qiita.com/advent-calendar/2024/meguro-lt) 21日目の記事です。

# はじめに
気づけばこの1年間で40回もLT（ライトニングトーク）に登壇していました。
この記事では、LT登壇がしやすくなるコツを共有します。
来年、この記事を読んだ方が1人でも多くLTに挑戦するきっかけになれば幸いです。

# 結論
- LTネタを考えるときは、**わかりやすい(面白い) > ためになる**を意識する
- スライドに文字を詰め込まないことで、自信を持って話せるようになる

# LT登壇内容

登壇スライドは以下で公開しています。

https://speakerdeck.com/junmikai

# 前提: ここでいう「LT登壇」に関して
- [connpass](https://connpass.com/)などのプラットフォームで一般募集されているLT枠への登壇
- LTのテーマは基本自由で、技術だけに限りません
- 発表時間は5–7分程度の短いイベントが中心です

# LTネタ考える思考法①: 内容より感想を書く

感想を中心に発表することをモットーに1年間LTを行いました。

感想をテーマにすることで、交流会では**発表内容の〇〇について共感しました**と声をかけられることが多くなりました。

LTは短いからこそ、情報を詰め込みすぎず、自分だけが感じた独自の視点やエピソードを交えることが重要です。

### なぜ独自の視点やエピソードが大事なのか？

具体性や感情が加わることで、聞き手がその場面をリアルに想像しやすくなります。
以下はリーダブルコードを説明したスライドです。
固い技術用語をあえて崩して親しみやすくしたところ、会場からリアクションをもらえました。



![コメントアウトするべきでは「ない」こと.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/102082f3-14c9-2367-ca99-5c84cac3c402.jpeg)
![コメントアウトするべきでは「ない」こと.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/f84fc81d-8f2d-f991-93aa-6d5a75b176ed.png)

https://speakerdeck.com/junmikai/komentoautosurubekideha-nai-koto

# LTネタ考える思考法②:  LTネタはわかりやすさを第一に
LTネタは**わかりやすい(面白い) > ためになる**を意識して考えます。

イベントには多様なバックグラウンドを持つエンジニアが参加します。
そのため、専門的な話題に固執するよりも、「多くの人に伝わる内容」に焦点を当てるのが大切です。

### 技術的な話題でも心がけたこと

- コード解説や専門用語に固執せず、背景や目的、得られた結果を伝える
- 聞き手が「聞いてよかった」と思える内容を目指す

以下のスライドは1年間で**最も難しかった**技術解説の例です。

![本当にあった怖い体験談 本番環境で画面が真っ白になりました.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/0a159096-21ca-d023-4a33-5358f7edbaeb.png)

https://speakerdeck.com/junmikai/ben-dang-niatutabu-iti-yan-tan-ben-fan-huan-jing-dehua-mian-gazhen-tubai-ninarimasita

# LTネタ考える思考法③:スライドは作り込まない
スライドは必要以上に凝らなくても十分です。
発表用スライドは、早いときは30分程度で完成させています。

### 心がけたこと

- スライドに文字を詰め込まない

- スライドはあくまでカンペ代わりにし、発表中は聞き手を見ながら話す

スライドに頼りすぎると、声が小さくなったり、視線が外れたりしがちです。
そのため、簡潔なスライドを作り、発表中は聞き手と目線を合わせるようにしています。

以下はスライド1枚の文字量を抑えた技術的解説の例です。
![フロントエンドテスト導入は 「ストーリー」 を意識しよう.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/2895455c-72bf-c838-31ef-ea0347d93fcf.png)

https://speakerdeck.com/junmikai/hurontoendotesutodao-ru-ha-sutori-woyi-shi-siyou

# LTネタ考える思考法④:スライドがバズることを期待しない

公開したスライドの多くは閲覧数が50を切っています。

https://speakerdeck.com/junmikai

**閲覧数を稼ぐことを目的にしない**ほうが、テーマ選びやスライド作りが楽になります。

### 閲覧数を目的にすると起こりうる問題

- 興味や経験から離れたテーマを選びがちになる。

- 内容の具体化が難しくなり、準備が進まない。

- 自信を持てない発表になりがち。

スライドは「伝えたいこと」を簡潔にまとめるだけで十分です。
これにより、発表準備がスムーズになり、話す内容そのものに集中できます。


# おまけ
### 今すぐ登壇できる！LTネタ一覧

これからLT登壇を目指す方に向けて、手軽に話せるテーマを挙げます。

- エンジニアになった経緯

- 苦労話や成功体験

- キャリアの考え方

- 開発中のプロジェクト

- おすすめの開発ツール（例: キーボードやモニターなど）

### 1年間で40回LT登壇してどうだった？

とにかく楽しかった。それに尽きます。
交流会で感想を頂く機会が多く、それだけで「LT登壇してよかった」と感じられました。

# おわりに
LT登壇をしやすくするための4つの思考法をご紹介しました。

「LT登壇のハードルは無限に下げられる」と考えています。
極論、スライド1枚でも十分です。

この記事が来年、あなたのLT登壇のきっかけになれば嬉しいです。
最後までお読みいただき、ありがとうございました！
Oracle環境での開発者の失敗を未然に防ぐ「参照ユーザー」設定術

## ごあいさつ
こんにちは、「エイジ＠フジワーランド」です
フリーエンジニアでパッケージシステムOEM供給やってますが、最近暇なので時給でSESやってます
SESやると色々勉強になりますね、お金もらって勉強になって現場に喜んでもらえていい仕事です
さて今回は開発者の失敗を未然に防ぐ「参照ユーザー」設定の話です

## 開発者の身を守るための参照専用ユーザー
開発環境（ステージング環境）と同じDBサーバーに、本番環境や結合テスト用検証環境などが共存しているケースはよく見られます

別環境のデータを参照しながら開発環境でテストデータを作成しているうちに、どちらが開発環境か本番環境か分からなくなり、誤って本番データを更新してしまった……という事態は決して珍しい話ではありませんよね

ここで役立つのが「参照ユーザー」です
参照ユーザーは一般的に通常のユーザーが誤って本番データを更新しないようにするための仕組みと考えられがちですが、実際に本番データを更新してしまうリスクが最も高いのは管理者権限を持つ開発者だったりします（これはあくまで個人の感想ですが）

ただし、別のユーザーでログインするとテーブルを参照する際にスキーマ名を毎回付ける必要があり、手間がかかることがあります（スキーマ名を指定しないと参照できないことで本番環境を意識するようになるというメリットもありますが、これについてはまた別の機会に）

本記事では、参照ユーザー運用をより効率的に行うためのヒントを共有します
この記事が少しでもお役に立てば幸いです

## この記事でわかること
ORACLEで「カレントスキーマ設定」と「ログイントリガー」を使って
手間なく別スキーマのテーブルを参照できる設定を解説します
急ぐ方は 「3. 毎回自動でデフォルトスキーマを設定する方法」を参照ください

## 1. サンプルDDL
以下の例では、データを格納するアプリケーションスキーマ`APP_SCHEMA`と、参照専用のユーザ`READ_ONLY_USER`を作成します。

### スキーマ作成とサンプルテーブルの作成

※管理者権限ユーザーで実行してください
```sql
-- アプリケーションスキーマの作成
CREATE USER APP_SCHEMA IDENTIFIED BY app_password;
GRANT CONNECT, RESOURCE TO APP_SCHEMA;

-- サンプルテーブルの作成
CREATE TABLE APP_SCHEMA.EMPLOYEES (
    EMPLOYEE_ID NUMBER PRIMARY KEY,
    EMPLOYEE_NAME VARCHAR2(100),
    DEPARTMENT_ID NUMBER
);

-- サンプルデータの挿入
INSERT INTO APP_SCHEMA.EMPLOYEES (EMPLOYEE_ID, EMPLOYEE_NAME, DEPARTMENT_ID) VALUES (1, 'Alice', 10);
INSERT INTO APP_SCHEMA.EMPLOYEES (EMPLOYEE_ID, EMPLOYEE_NAME, DEPARTMENT_ID) VALUES (2, 'Bob', 20);
COMMIT;
```

### 参照専用ユーザの作成

※管理者権限ユーザーで実行してください
```sql
-- 参照専用ユーザの作成
CREATE USER READ_ONLY_USER IDENTIFIED BY readonly_password;
GRANT CONNECT TO READ_ONLY_USER;

-- すべてのテーブルへの参照権限を付与
GRANT SELECT ANY TABLE TO READ_ONLY_USER;
```

## 2. スキーマ名なしでデータを照会する方法
シノニム使えば好きな名前で参照できますが
本記事ではデフォルトスキーマを設定する方法で実現いたします

※READ_ONLY_USERで実行してください
```sql
-- 参照専用ユーザでセッション中にデフォルトスキーマを設定
ALTER SESSION SET CURRENT_SCHEMA = APP_SCHEMA;

-- データを照会
-- (スキーマ名を省略して参照可能)
SELECT * FROM EMPLOYEES;
```

## 3. 毎回自動でデフォルトスキーマを設定する方法
毎回 ALTER SESSION しなくても、ログイントリガーを作成しておけば自動で実行されます

※管理者権限ユーザーで実行してください
```sql
-- トリガーの作成
CREATE OR REPLACE TRIGGER set_default_schema_on_login
AFTER LOGON ON DATABASE
BEGIN
    -- READ_ONLY_USER がログインした場合にのみ実行
    IF USER = 'READ_ONLY_USER' THEN
        EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA = APP_SCHEMA';
    END IF;
END;
/
```

## おわりに
今回は Oracleで「カレントスキーマ設定」と「ログイントリガー」を使って手間なく別スキーマのテーブルを参照できる設定を解説いたしました
参照ユーザーをうまく活用して開発者の失敗が少しでもなくなることを願います(自戒を込めて)

最後まで読んでいただきありがとうございました
テスト自動化していても次々に悩みが出てくるのあるあるですか？

# はじめに
　新規開発で1つの仕様を作って動作確認。「よし、大丈夫！」と思って次の仕様を作る。ところが、それを追加した途端、最初の仕様が動かなくなる…。
「え、なんで？さっき動いてたよね？」という混乱と戦いながら、原因を探すテスト地獄が始まる。

# 新規開発あるあるランキング



<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/bd811f19-e9ab-4fdc-02a9-53bf4f7fb925.jpeg" width=80%>


:::note warn
--1位--
テスト用の環境で実行できたけど、いろいろ模索したせいでどこを直したのか忘れる。
:::

:::note warn
--2位--
バックアップ用に別の環境を用意していたのに、その更新をすっかり忘れる。
:::

:::note warn
--3位--
試行錯誤の末に、元の状態に戻れなくなる。
:::



特に手動テストだと、毎回同じ手順で確認するのも大変。「自動化ってやっぱり必要だな…」と痛感する瞬間です。

# 自動化あるあるランキング

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/6ac5ed64-e534-6a8d-fb67-fcd6e6b586e8.jpeg" width=80%>

:::note warn
--1位--
テスト自動化スクリプト自体に問題があり、その修正に苦労する。結局手動テストより時間がかかる
:::
:::note warn
--2位--
テストスクリプトを動かして結果待ち。「失敗してないよね？成功して！お願い成功して！」と画面を凝視しながら祈る時間
:::

:::note warn
--3位--
新しいバージョンにアップデートしたら、スクリプトが動かなくなり、1から作り直し
:::

テストを自動化することで手間は減るはずですが、また別の悩みが出てくるのも開発者の宿命ですね。これを解決してくれるのが、このサービスとのこと。
まだ使ったことないので、使って見たいです✨

https://service.valtes.co.jp/t-dash/
【検索効率UP】結構使えるGoogle検索テクニック

# 初めに
この記事では、Google検索を倍以上に活用できるようになる
様々な検索テクニックを紹介します！

# 1.必須項目
"で必須にしたい文言を囲むと、その文言が含まれるページのみ表示されます。
### 使用例
```
Qiita 名前 "由来"
```
こうすることで、「由来」という文言が含まれるページのみ検索結果に表示される。
# 2.マイナス検索
文言の最初に-をつけることでその文言を含まないページのみ検索結果に表示される。
### 使用例
```
Qiita -アドベントカレンダー
```
これで「アドベントカレンダー」という文言を含むページは検索結果に表示されない。
# 3.あいまい検索
分からない文字を*に置き換えることで使用できる
### 使用例
「キータの3文字目が何だったか忘れたな～」(そんなことないでしょうが)
```
Qi*ta
```
![あいまい検索](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930283/d9c18d7f-22cf-eda2-f14b-57df7be16da5.png)
「そうだ、Qiitaだった。」
# 4.ウェブサイトを指定
特定のサイトの検索結果のみ表示することができます。
### 使用例
```
site:https://example.com hogehoge
```
# 5.OR検索
どちらかの文言が含まれている場合に検索結果に表示されます。
### 使用例
```
hoge OR fuga
```

# 最後に
Google検索をこれまで以上に使えるようになりましたか？
コメント、いいねお願いします！
【React】useCallbackについて

## useCallbackの引数は依存配列に関係ない

```tsx:
import { useCallback, useState } from "react";

const Index = () => {
  const [name, setName] = useState<string>("");

  // 引数valの値をconsole.logで出力
  // 依存配列は[]
  const handleClick = useCallback((val: string) => {
    console.log("callback " + val);
  }, []);

  return (
    <div className="w-screen h-screen bg-red-50">
      <div className="w-full h-full flex justify-center items-center">
        <div className="w-1/2 h-1/2 bg-slate-200">
          <div className="w-full h-full flex justify-center items-center">
            
            <button
              onClick={() => handleClick(name)}
              className="p-2 rounded-sm bg-indigo-400 text-white shadow-md"
            >
              Click me
            </button>
            <input
              type="text"
              value={name}
              onChange={(e) => setName(e.currentTarget.value)}
            />
          </div>
        </div>
      </div>
    </div>
  );
};

export default Index;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/943997/fddea172-cd37-27d6-ce20-4f106e4822d5.png)

:::note info
- 依存配列が[]となっていても、引数の値が変わればちゃんと出力される
- useCallback関数を渡した子要素も、再レンダリングされない
:::
１年間１０００記事無理になりそうだ。仕事趣味より健康大事。

１年間１０００記事無理になりそうだ。仕事趣味より健康大事。#短歌

M.S.WindowsにPython3(3)を導入する（７つの方法、7つの罠）2024年版 Syntax Error(109) Missing parentheses in call to 'print'.
https://qiita.com/kaizen_nagoya/items/2b6e7643fb164c287f4e

３１文字抄録として、facebookなどの記事に書いた短歌を紹介。日付の後ろはいいねをくださった方の数。
Pythonが圧倒的にQiitaが多い。Rustはどっちも、それ以外はQiitaは極端にいいねが少ない。AUTOSARやっている人がfacebookの友達には多いが、Qiitaには少ないことの表れかも。

20240107, 14, 29
M.S.WindowsにPython3を導入する（７つの方法、7つの罠）2024年版
https://qiita.com/kaizen_nagoya/items/2b6e7643fb164c287f4e

20240103, 24, 0
４日間連続２０記事書いた。間にハリポタ見て休みつつ。#短歌 Amaon Primeでハリポタやってた。２時間作業して２時間ハリポタみるのを１日２回。
AUTOSAR R23-11 記憶の記録
https://qiita.com/kaizen_nagoya/items/701bc800b5f137e51a36

20240101, 17, 1
昨日今日、連続２０記事書いた。あとはハリポタでも見て寝よう #短歌　
Countdown Calendar 2023, 百記事目を書くにあたって。
https://qiita.com/kaizen_nagoya/items/45185a04cfd88b71256a

20240101, 12, 2
現状の維持にも成長見出そうマイナス補うプラスあるはず #短歌 #あけおめことよろ
祝休日・謹賀新年：2024年の目標
https://qiita.com/kaizen_nagoya/items/b659d922327a7dcdc898

20231231, 25, 0
１年に１０００記事書いた。来年も継続できる健康管理 #短歌 昨年、今年と２年連続で入院しただけでなく、膠原病皮膚筋炎という難病治療の方向性がみえず、勤務時間以外はキーボードを触らないという対策以外は有効でない。１１月、１２月は土日寝たきり。
AUTOSAR 文書番号
https://qiita.com/kaizen_nagoya/items/8b894228a0b76c2265c7

20231229, 7, 1
YouTubeチャンネル登録伸びません。YouTuberにはなれそうにない。 #短歌
IT系のYoutubeの作り方、宣伝の仕方。 Youtube(0)
https://qiita.com/kaizen_nagoya/items/7d13a2a9bad6c0a4e6c9

20231218, 12, 1
今日だいぶ書き換えましたURLなにしてくれちゃうのAUTOSARやだ #短歌
Adaptive Platform Release Overview, AUTOSAR 782, R23-11, AP
https://qiita.com/kaizen_nagoya/items/13a104606a34fe24fcf7

20231218, 5, 4
コピペして記事を増産中でして順次追記をお待ちください。#短歌
AUTOSARのRustの取り組み
https://qiita.com/kaizen_nagoya/items/6669aa552b6150d85350
[Memo] Macを導入したらいつもやっていることリスト

1. Google Chromeをインストールし、ログインする
2. プリンタを設定する
3. Google日本語入力をインストール、設定する
4. 入力ソースのショートカットキーを変更する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46811/af841bc9-0607-99f3-5e66-43c41454bfab.png)
5. Spotlightのショートカットキーを無効化する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46811/bcc34ca7-02eb-773a-5ca4-f12dbba4614f.png)
6. Alfredをインストールし、ログイン、設定する。起動用のショートカットキーはOptionキーをダブルタップするように設定する
7. System PreferencesでKey repeatを設定する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46811/1c575850-8bc7-0c89-00f2-c83074246c1c.png)
8. System PreferecnesでCapsLockキーとしてControlキーとして使うように設定する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46811/3985297d-d4fe-c47e-e629-8050d895ef46.png)
9. Sublime Text 4をインストールし、ログインする
10. iTerm 2をインストールする
11. Homebrewをインストールする
    * https://medium.com/@xxyxu/zsh%E3%81%AEcompinit%E3%81%AB%E3%82%88%E3%82%8B%E7%A2%BA%E8%AA%8D%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%B8%E3%81%AE%E5%AF%BE%E5%BF%9C-afd3c4975b8c
11. Gitをインストールする
    ```bash
    brew install git
    ```
12. デフォルトシェルをzshに切り替える
    ```
    chsh -s ${which zsh}
    ```
13. 自分用のdotfilesを設定する
    ```
    ln -s ~/dotfiles/.zshenv ~/.zshenv
    ln -s ~/dotfiles/.zlogin ~/.zlogin
    ln -s ~/dotfiles/.zprofile ~/.zprofile
    ln -s ~/dotfiles/.zshrc ~/.zshrc
    ```
14. Visual Studio Codeをインストールする
15. Xcodeをインストールする
16. IntelliJ IDEAをインストールする
17. Logicool Helperをインストールする
18. Slackをインストールする
19. Teamsをインストールする
20. Zoomをインストールする
21. SwitchyOmega Chrome拡張をインストールする
22. tmuxをインストールする
    ```
    brew install tmux
    ```
23. Dockerをインストールする
    https://github.com/rancher-sandbox/rancher-desktop/releases
2024年 Atlassian の話題と最近の小ネタ

## はじめに
こんにちは、仕事でもプライベートでも Atlassian 生活の長い者です。今年、個人的に気になった話題を数点、最近の情報もおりまぜながら振り返りたいと思います。

## OKR、Atlas、そして Goals へ
年末年始は一年の目標をふりかえり、新たな目標を設定するシーズンですね。Atlassian 製品では OKR のアプリや Atlas を活用して目標とタスクをつなげることができます。例えば、以下のような方法があります。

https://www.ricksoft.jp/blog/articles/001589.html

https://www.ricksoft.jp/blog/articles/001604.html

Atlas は Goals へと進化を遂げ、Atlassian の System of Work の根幹を成す機能になってきているように感じます。新年の目標を Goals で設定し、やることリストを Jira で管理するなんていう使い方も素敵ですね。

https://community.atlassian.com/t5/Atlas-Group-articles/Atlas-is-evolving/ba-p/2686154

最近の Goals には、Progress（進捗）や Metric（メトリック）を設定して入力できる UI も追加されており、トレンドをミニグラフ表示できるようにもなっています。

今年、わたしは健康のために休肝日年間165日という、とてつもない高い目標を掲げました。Goals の画面によると現在の進捗は約60%だそうです。

![goals-editor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83323/f4c97f63-cd47-337b-a2da-13aa217c38aa.png)

![goals-progress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83323/fd227baa-3f3d-7502-baf3-0bb4f1d7219f.png)

## Jira でふりかえり

スクラムチームに限らず、定期的にふりかえりを実施して、学んだことを記録、次のアクションにつなげることは大事かと思います。今年、わたしは Easy Agile のアプリに注目し、日常業務でも活用してきました。

https://www.ricksoft.jp/blog/articles/001598.html

Jira を使っていない場合は、Confluence の 4L テンプレートなどを活用し、シンプルに Wiki ページとして書いていくのも良いかと思います。最近では、Confluence ホワイトボードに AI 機能が搭載されたりと進化も著しいので、ホワイトボードでふりかえりを実施するのも面白そうです。さきほど確認したところ、ふりかえり（Retrospective）テンプレートは3種類用意されていました。

![retro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83323/15def10f-7596-be20-2a22-883f52170bd7.png)

日々の学びを記録していくのであれば、先述の Goals の Learnings タブを使うのもありかと思っています。とてもシンプルな UI ですが、学び、リスク、意思決定の記録をサッと入力できるのは便利です。

例えば、以下は休肝日を妨げると考えられるリスクです。

![goals-learnings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83323/b6aebdaa-4011-57b4-069b-e7de8dd44a43.png)

## おわりに
最近は Atlassian Intelligence や Rovo が熱いですが、個人的にはこれまで挙げたようなタスクのトレーサビリティや記録の保持といった機能に注目しています。来年もワクワクするような新機能の登場に期待しています。

それでは、みなさん良いクリスマスを！🎄🤶
新破産者マップを調べてみた

## 新破産者マップとは？
新破産者マップとは、破産者情報をGoogleMap上に表示して、削除してほしければビットコインを支払えと恐喝してくる犯罪サイトです。
海外のサーバで運営されており、運営者の正体は不明のため、バリバリ違法なのに、警察に捕まっていません。

最近はGoogle検索結果からBANされるようになっており、破産者マップ側がURLを変えて対抗し、イタチごっこが続いています。

## 調べてみた内容
新破産者マップは、leafletのロゴ表示がマップ右下にされていました。
leafletはマップを扱うためのJavascriptライブラリです。
OpenStreetMapというGoogleMapのパクリサービスがあります。
GoogleMapは企業のサイトなどに有料でGoogleMapを貸し出していますが、OpenStreetMapは無料で貸してくれます。
leafletはOpenstreetMapによく使われます。
なので、新破産者マップのフロントエンドのコードをよく調べてみた所、てっきり、OpenStreetMapから読み込んでいるのかと思いきや、何と、leafletを使ってGoogleMapからAPIキー無しで、地図情報を呼び出しているっぽく、驚きました。

```
var map = L.map('map').setView([35.18, 136.9], 5);
var tileLayer = L.tileLayer('https://{s}.google.com/vt/lyrs=m&x={x}&y={y}&z={z}',{
    maxZoom: 20,
    subdomains:['mt0','mt1','mt2','mt3'],
});
tileLayer.addTo(map);
```
コードのソースは以下です。
https://www.hasanmap.top/js/map.js
https://archive.md/xGV1o

最初は僕みたいに調べる人をかく乱するためのダミーコードかと思いきや、どうやら、APIキー無しでGoogleMapのデータを呼び出せるっぽいです。
以下の記事にそうした方法が書いてありました。
https://2ndart.hatenablog.com/entry/2021/04/29/111336

## まとめ
普通にopenstreetmapのデータを読み込めばいいのに、そこまでしてGoogleMapのデータが欲しいのかと驚きました。
まあ、商業用データの方が詳しいのでしょう。

新破産者マップは恐喝サイトであり、違法なので、GoogleMap側はAPIキー無しで呼び出せる穴を塞いだ方がいいでしょう
新破産者マップの被害者がGoogleMapにこの記事のURLを送り付けて、穴を塞げと言えば、多分、GoogleMap側は、対応してくれます。

また、新破産者マップは、おそらくそれらの対策をされた場合、openstreetmapのデータをAPI呼び出しか、セルフホストすることが予想されます。
根本的な解決にはならず、一時的な妨害や、新破産者マップ側の仕事を増やすといった妨害にしかなりません。

また、私はアマチュアのプログラマーなので、プロの方は私が間違っていないか、検証してください

## おまけ
新破産者マップは、フロントエンドコードを調べたら、blocknomicsというビットコイン決済APIサービスを使っているようです
そちらに苦情を入れれば、Google検索結果BANのように、決済APIサービスをBANできるかもしれません。

また、フロントエンドのデザイン用のbootstrap呼び出しに、jsdeliverというCDNを使っている様子なので、そちらに苦情を入れれば、破産者マップのURLやIPアドレスから呼び出せないようにできるかもしれません。
unpkgなどのCDNも使っていました。

ただし、新破産者マップ側がそれらをセルフホストすればよく、根本的な解決策にはなりません。
一時的な妨害にしかなりません。
SASE、SSEを調べてみた / I looked up SASE and SSE (日本語 / 英語)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812041/479e9054-5b85-2663-02c6-85afa1ae1063.png)
# 日本語
こんばんわ！
Advent Calendar 2024に参加してまして、21日目の記事を書いていこうと思います。
題材は「クラウドセキュリティ最前線！SASE、SSEなどのトレンドを語ろう by Netskope Advent Calendar 2024」ということで、ほぼ初耳なんですが、SASE、SSEについて調べていきたいと思います。

### SASEとは
SASEは、セキュアアクセスサービスエッジの略で、クラウドベースのネットワークとセキュリティ機能を統合する新しいアーキテクチャです。SASEは、ユーザー、デバイス、アプリケーション、データセンター、クラウドサービスなどが企業のネットワークと接続される環境において、セキュリティと接続性を強化します。

主な特徴は、ユーザーがどこにいても、安全にアプリケーションやサービスにアクセスできるようすること、クラウドに分散したネットワーク上で、すべてのトラフィックを保護し、適切なアクセス制御を提供しています。

### SSEとは
SSEは、SASEの一部として発展した概念で、特にセキュリティ機能に特化したクラウドベースのアーキテクチャです。SSEは、ユーザーやデバイスがインターネットやクラウドサービスにアクセスする際に、そのアクセスのセキュリティを強化することを目的としています。

主な特徴は、ユーザーがSaaSアプリケーションにアクセスする際、そのアクセスがセキュアであることを確認するために、セキュリティポリシーを適用すること、リモートワークをしている社員が企業のリソースに安全にアクセスできるようにする。

違いは、ASEはネットワーク接続とセキュリティを一体化したアーキテクチャで、SSEはその中のセキュリティ機能を強化したものです。

セキュリティ技術は都度変わり、変化が目まぐるしいですが楽しいですね
ここまで読んでいただきありがとうございます
# ENGLISH
Good evening!
I'm participating in Advent Calendar 2024 and I'm going to write an article for the 21st day.
The subject is “Cloud Security Frontiers! Let's talk about SASE, SSE and other trends by Netskope Advent Calendar 2024.” I've almost never heard of SASE and SSE before, but I'd like to look into them.

### What is SASE?
SASE stands for Secure Access Service Edge and is a new architecture that integrates cloud-based networking and security capabilities SASE is an environment where users, devices, applications, data centers, and cloud services are connected to the enterprise network SASE enhances security and connectivity in environments where users, devices, applications, data centers, and cloud services connect to enterprise networks.

Key features include: enabling users to securely access applications and services wherever they are, protecting all traffic on distributed networks in the cloud, and providing appropriate access control.

### What is SSE?
SSE is a concept that evolved as part of SASE, a cloud-based architecture specifically focused on security features; SSE aims to enhance the security of access to the Internet and cloud services by users and devices.

Key features include: applying security policies to ensure that when users access SaaS applications, their access is secure; and allowing remote employees to securely access corporate resources.

The difference is that ASE is an architecture that integrates network connectivity and security, while SSE is an enhanced security function within that architecture.

Security technology changes every time, and the changes are dizzying but fun!
Thank you for reading this far!
【デザインパターン】Template Method 

## Template Method とは?

### そもそも Template って?

そもそも Template とはなんでしょう。
「雛形」や「型板」といった意味を持つ英単語になります。

例として、挙げると デザインのテンプレートや契約書のテンプレートなどがあります。

Template を使う 理由として、

- 類似したものを簡単に作ることができる
- 具体の内容は変更できる

といったものがあります。

---

さて、Template Method の説明に入ります。
スーパークラス(親クラス)で処理の骨組みを定義し、サブクラス(子クラス)は構造を変更することなく具体的な内容を定義することができるデザインパターンです。

### Template Method の構成要素

**AbstractClass(抽象クラス)**

- 処理全体の流れを決定するテンプレートメソッド
- テンプレートメソッドで使用する抽象メソッド

**ConcreteClass**

- AbstractClass を継承したクラス
- AbstractClass で定義された抽象メソッドを実装する

### Template Method のメリット

- 共通な処理を親クラスにまとめることができる
- 処理全体の流れは変えずに、子クラスごとに一部の処理内容を変更することできる

### Template Method のデメリット

- 子クラスで親クラスのメソッドの振る舞いを変えてしまうとリスコフの置換原則に違反する
- 親クラスの処理が大きくなると、子クラスの処理の自由が制限される


## 実装例
さて、今回は TypeScript で Template Method を実装してきます。
JavaScriptには実装されていませんが、TypeScriptには**抽象クラス (abstract class)** 
が実装されているので今回はそれを使用していきます!

**abstract class** について知りたい方は

https://typescriptbook.jp/reference/object-oriented/class/abstract-class

をご覧ください。

```typescript
export {}

abstract class ReportTemplate {
    generateReport() {
        this.fetchData();
        this.analyzeData();
        this.formatReport();
        this.printReport();
    }

    abstract fetchData(): void;
    abstract analyzeData(): void;
    abstract formatReport(): void;

    printReport() {
        console.log("Report printed");
    }
}

class SalesReport extends ReportTemplate {
    fetchData() {
        console.log("Fetching sales data");
    }

    analyzeData() {
        console.log("Analyzing sales data");
    }

    formatReport() {
        console.log("Formatting sales report");
    }
}

class InventoryReport extends ReportTemplate {
    fetchData() {
        console.log("Fetching inventory data");
    }

    analyzeData() {
        console.log("Analyzing inventory data");
    }

    formatReport() {
        console.log("Formatting inventory report");
    }
}

function run() {
    const salesReport = new SalesReport();
    const inventoryReport = new InventoryReport();

    salesReport.generateReport();
    console.log("");
    inventoryReport.generateReport();
}

run();
```

上記を実行すると、以下が出力されます。

```console
Fetching sales data
Analyzing sales data
Formatting sales report
Report printed

Fetching inventory data
Analyzing inventory data
Formatting inventory report
Report printed
```

salesReport と  の inventoryReport 両方で printReport が実行されているのが
分かると思います。

また、`fetchData`→`analyzeData`→`formatReport` という処理のフローは変わっていないものの
処理の内容を変更することが出来ているのが分かると思います。

## 最後に
いかがでしたでしょうか。

テンプレートメソッドパターンを利用することで、処理の流れを変えずに部分的な処理の内容のみを変更することができます。

上手く活用して、コードの再利用性を高めていきましょう。

## 参照

https://www.udemy.com/course/typescript-solid-design-patterns

https://refactoring.guru/ja/design-patterns/template-method

https://qiita.com/shoheiyokoyama/items/c2ce16b4f492cd014d50
NetSuiteで差し込み印刷を行う

NetSuiteで管理している見積データや請求データなどを、独自のレイアウトで印刷する文書作成や印刷ができるといいなと思ったことはありませんか？

NetSuiteにはAdvanced PDFというPDFをカスタマイズする機能がありますが、NetSuiteの「差し込み印刷」機能を利用することで、より簡単にPDFの指定した位置にNetSuiteの情報を出力することができます。

# 差し込み印刷とは？

- 差し込み印刷とは、例えばラベルやはがきをエクセルなどで作成したの情報に基づいて、文書の指定した位置に差し込んで印刷する機能のことです。

- 差し込み印刷を行う際には、名簿の情報とは別に、元となるラベルのデータを作成することが必要です。案内状や挨拶状などの送付の際によく使われ、複数の宛先に一斉に送る際に便利です。

# 差し込み印刷をする手順
今回は、見積書を例に手順をご紹介します。

### テンプレートPDFファイル作成しNetSuiteに保存する
1. PDFエディタでテンプレートとなるPDFファイルを作成する
PDFエディタの「フォームを準備」機能を使用します
'NLTRANID'などが関連するNetSuiteレコードのフィールドを示していますが、標準のフィールドについてはこちらのヘルプに記載があります⇒https://docs.oracle.com/en/cloud/saas/netsuite/nsoa-online-help/section_N515605.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246667/6307b9bb-e658-2955-30dd-c1f0200b2b5e.png)

1. NetSuiteメニューより「ドキュメント」 > 「テンプレート」 >「PDFテンプレート」 >「新規作成」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246667/5e56092c-b3c4-2e76-c4fb-26a1e7f4ec77.png)

1. 名前、件名を入力し、1で作成したPDFファイルをアップロード。最後に「保存」ボタンをクリックして保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246667/0ab37856-10b1-5bd8-a3c1-e9d8dfa0d0dd.png)

### 実際に差し込み印刷してみる
1. メニューより「トランザクション」 > 「営業」 > 「見積を作成」 >「リスト」
リスト上で既存の見積を選択して表示します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246667/b3416759-b615-a1bf-6b2a-f7c3e29a7a07.png)

1. 見積書に表示する項目を入力し、保存します。（PDFに表示しない項目も必須項目であれば入力してください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246667/52e6ad77-116f-9c9a-33df-11f550597769.png)

1. 保存した見積の「新規作成」メニューから>「PDF」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246667/9c8a0b16-2cd0-2967-df40-528a7abda26f.png)

1. 「テンプレート」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246667/b403189e-09bd-3f37-fb78-d7041bb306e2.png)

1. テンプレート >「見積テンプレート」を選択し、件名に任意のテキストを入力
最後に「結合」ボタンをクリックするとダウンロードが始まります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246667/d6f48414-fa2a-1b5c-0cd3-f47920750738.png)

1. 見積書がダウンロードされました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246667/ee320c51-d4df-527c-9edc-c07fbf504336.png)

1. PDFに見積内容が反映されていることが確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246667/92c76e99-6b63-cea6-504d-1d1c7274e4a1.png)


いかがでしょうか。請求書や納品書、検収依頼書などにも応用が可能です。ぜひ試してみてください。
条件式を一行でかける発見！！三項演算子との出会い / Discover Conditional Expressions Multiply by One Line! Meet the ternary operator! (日本語 / 英語)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812041/3297457a-401f-f62c-9019-3e51c97bf65d.png)
# 日本語
こんばんわ！
Advent Calendar 2024に参加してまして、20日目の記事を書いていこうと思います。
題材は「脆弱エンジニアの Advent Calendar 2024」ということで、コードのちょっとした発見を書いていこうと思います。

### if文って一行でかけるという発見

皆さんはif文というか条件分岐ってどう書きます？
私はこう書いてました
```c#
var test = string.empty;
var flag = true;
if (flag){
    test = "OK";
}
else{
    test = "NG";
}
```

これでいいと思ってました！
ただ、これを仕事でやるともっと簡単にかけと怒られましたｗ

ではどうすれば。。

### 三項演算子（条件演算子）との出会い
下記のように、三項演算子（条件演算子）を使えば一行でかけることができるんですね。

```c#
var test = flag ? "OK" : "NG";
```

同じ処理でも、いろいろな書き方があるんだと脆弱ながら学んだ体験でした。

ここまで読んでいただきありがとうございます
# ENGLISH
Good evening!
I'm participating in Advent Calendar 2024 and I'm going to write an article for the 20th day.
The subject is “Vulnerable Engineer's Advent Calendar 2024,” so I'd like to write about a small discovery of code.

### I discovered that if statements can be written in one line.

How do you write if statements or conditional branching?
I used to write like this
```c#
var test = string.empty;
var flag = true;
if (flag){
    test = "OK";
}
else{
    test = "NG";
}
````

I thought this was fine!
But when I did this at work, I was pissed off that I had to do it more easily. w

So what should I do?

### Encounter with ternary operators (conditional operators)
I found out that I can do it in one line by using ternary operators (conditional operators) as shown below.

```c#
var test = flag ? "OK" : "NG";
````

It was an experience where I learned, while being vulnerable, that there are many ways to write the same process.

Thank you for reading this far!
プログラミングを「教える」のは難しい、けど楽しい

:::note info
これは [ZOZO Advent Calendar 2024](https://qiita.com/advent-calendar/2024/zozo) カレンダー Vol.6 の 21日目の記事です
:::

## はじめに
今回の記事では、自分が今年経験した「Javaが未経験のメンバー」に対して自分が講師を務めた際に感じた、**プログラミングを「教える」ことの難しさ**と、同時にそこに隠れている**楽しさ**について共有したいと思います。

## 経緯
以前に自分が書いたこちらの記事：[Event Stormingワークショップを体験してきた話](https://qiita.com/takumi_links/items/d62dc62d9b0a573e5d29)でも紹介したのですが、現在自分が所属しているブロックでは、ZOZOTOWNを裏で支える基幹システムのリプレイスを推進しており、**リプレイスを進める過程でVBScriptからJavaへの言語リプレイス**を段階的に始めています。
**※ 今後数年でJavaでの開発が100%になるように推進している**

**参考：**[本番環境における等価比較を活用した言語リプレイス](https://techblog.zozo.com/entry/language-replacement-equality-comparison)

リプレイスを推進していくメンバーについては、前職でJavaでの開発してきたメンバーや、VBScript以外の言語での開発経験もあるメンバーで構成されている為、特に問題なくリプレイス開発を進められますが、今まで保守・運用でVBScript・ASP環境下でずっと開発を進めてきたメンバーにとっては、**いきなりJavaでの開発を強いられても参入ハードルの高いもの**になってきます。

これから部署内での開発がJavaに一本化されていく方針の中で、「**JavaおよびJavaでのアプリケーション開発のイロハをJava未経験のメンバーにどんどん伝えていこう！教えていこう！**」という動きが強まった中で、Javaでの開発をこれまでも長くやってきた自分もJava講師としての役割を担うことになりました。

## 講師としての自分と向き合う日々
上記のJava講師を務めて約2ヶ月半程経ちます。

ここからの内容は現在進行形で自分が日々向き合っている内容なのでかなりリアルな内容にはなってきますが、**自分の想いを言語化する為にも赤裸々に書いてみます。**

私自身がまだまだ教える立場として未熟だったことが大いにあるので、ウィークポイントの克服は来年の目標として、しっかりと受け止めていきたいと思います。

## 説明することに躍起になってしまったこと
「トレーニング受ける人全員にわかってもらう資料・サンプルコードを作るぞ！！！」と意気込んでスタートした講師としての役割。振り返ると、自分の中で「**説明すること**」に全力を注ぐあまり、受け手側が自発的に考える余裕を奪ってしまっていたという反省点があります。

「これさえ読めばアーキテクチャについて完璧に抑えられるだろう！」
「OpenAPIの定義の仕方、資料にしっかり落とし込めたし、これを**説明**できればOKだ！」

各トレーニング会用に資料をまとめ、毎回その準備に費やして**説明の仕方**を練習して臨んでいました。

説明する内容が不安なので、カンペも作成して論理武装をしっかりした状態で臨んで、その内容をよくわかるように述べることはできていたかなとは思っています。

> 説明する：ある事柄が、よくわかるように述べること。
> 「goo辞書」より

しかし、実際に受講者がその説明をもとに何かを「できるようになる」段階に進んだかというと、決してそうではなく、**情報を伝えるだけ**になってしまったように思います。

聞いている相手の表情を見る余裕がなく、こちらが伝えたいことを伝えるのに躍起になってしまって、質問しやすい雰囲気をなかなか作り出せなかったという反省も合わせてあります。

### 反省点
- 説明を聞く時間が長くなりすぎ、受け手の能動的な理解の時間を阻害してしまった
- 自分が説明する内容に集中するあまり、受講者が感じている疑問や戸惑いを拾いきれなかった

## 教えることはできていなかった
> 教える：知識や技能を身につけるように導く。
> 「goo辞書」より

「**教える**」
- 講師が伝えた知識・技能を自分のものにしようと、受け手側が自発的に動くよう促す。
- 分からないことをそのままにしないことを良しとして、積極的に質問できる雰囲気を作る。

受け手が「わかった！」と理解できるレベルまで、時には具体的な例も交えながら伝えて、受講者が**前のめり**になるようなトレーニングにはできていないという自覚はあります。

プログラミングを始めた時に味わう「**あ！俺の書いたコードが動いた！楽しい！！**」

楽しさ、奥深さを感じてより**学ぶ意欲が湧くようなトレーニング**を今後は目指していきたいと思っています。

## 教えるのは楽しい
試行錯誤の連続ではありますが、数ヶ月経ってきて少しずつですが余裕が出てきている感覚はあります。

前はこだわりすぎていた説明資料の作成もほどほどにし、トレーニングのスタイルをペアプログラミングやモブプログラミングを中心とした「**みんなで**コードを書いていくスタイル」に変えてから、自分自身も楽しめるようになり、受講者からのレスポンスも増えてきました。

自分自身も一緒にコードを書きながら、受講者と同じ視点にいることを心がけるようにすると、トレーニングにおいての一体感が生まれ、その場で「動いた！」瞬間を共有する喜びも得られるようになりました。

教え方の部分ではまだまだ改善点が沢山ありますが、自分自身も楽しみながら今後のトレーニングに取り組みたいと思っています。

## まとめ
プログラミングを「**教える**」ことは、改めて難しいことだと実感する毎日です。

説明だけで終わらせず、受講者が自発的に学び、実践し、成長できるように導くためには、講師自身の工夫や成長が必要であり、以下のことを強く感じました。

#### 「説明」と「教える」の違い
知識を伝えるだけではなく、それを活用できる力を身につけてもらうことが本当の意味での「教える」こと。

#### 受講者との一体感は大事
ペアプロやモブプロのような参加型のスタイルを取り入れることで、教える側と学ぶ側の垣根を越え、共に学び成長する場を作ることができる。

#### 成功体験を共有し、楽しむこと
受講者が「できた！」と感じる瞬間を大切にし、その達成感を共有することで学びのモチベーションを高める。

#### 自分も成長し続ける
教える中で、自分の知識を再確認し、新たな学びを得ることが講師自身の成長にもつながる。

これからも試行錯誤を続けながら、受講者とともに楽しく学び合う場を作っていきたいと思います。プログラミングの楽しさ、奥深さを共有し、受講者が次のステップに進む手助けができるよう、講師としてのスキルをさらに磨いていく所存です。
MAMP起動時のパスワード入力をやめたい

MAMP起動時に毎回パスワードを求められるので省略方法を調べてみました。

するとデフォルトではポート番号を80&3306に設定してあるので、それ以外の任意の番号を設定するとパスワードを求めなくなります。

![スクリーンショット 2024-12-21 9.21.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759506/7dcec829-023f-f24c-c964-c738e24b5905.png)

MAMP.appを開き、Preferencesのポート設定から変更できます。
「MAMP default」のボタンを押すと「8888&8889」に自動入力され、パスワードを要求されなくなりました。

（MAMP defaultならデフォルトは80&3306にしないで欲しい・・・）
KAN: Kolmogorov–Arnold Networks : 論文紹介

# はじめに

本記事は「KAN: Kolmogorov–Arnold Networks」の紹介をしています。

https://arxiv.org/abs/2404.19756

# 概要
コルモゴロフ–アーノルド表現定理に着想を得て、我々はKolmogorov–Arnold Networks（KAN）を提案し、これは多層パーセプトロン（MLP）の有望な代替手段となります。MLPではノード（「ニューロン」）に固定の活性化関数が使用されますが、KANではエッジ（「重み」）に学習可能な活性化関数が適用されます。

KANには線形の重みが全く存在せず、すべての重みパラメータはスプラインとしてパラメータ化された一変数関数に置き換えられています。この一見単純な変更により、KANは精度と解釈性の両面でMLPを上回ることを示しました。精度に関しては、データフィッティングや偏微分方程式の解法において、はるかに小規模なKANが、より大規模なMLPと同等かそれ以上の精度を達成できます。理論的および実証的に、KANはMLPよりも高速なニューラルスケーリング則を持っています。
解釈性に関しては、KANは直感的に視覚化でき、人間のユーザーと容易に相互作用することが可能です。数学や物理学の2つの例を通じて、KANが科学者の数学的および物理的法則の（再）発見を支援する有用な協力者であることが示されました。

要約すると、KANはMLPの有望な代替手段であり、MLPに大きく依存している現在のディープラーニングモデルのさらなる改善の機会を提供します。 ￼

# 用語の解説
1.	コルモゴロフ–アーノルド表現定理: 任意の連続関数を一変数関数の合成として表現できることを示す数学の定理で、関数近似の理論的基盤となります。
2.	多層パーセプトロン（MLP）: 複数の層からなるフィードフォワード型の人工ニューラルネットワークで、各層のニューロンは前の層の出力に重みをかけて線形結合し、活性化関数を通じて次の層に伝達します。
3.	スプライン: 関数近似や補間に用いられる分割多項式で、特に滑らかさと精度が求められる場合に使用されます。
4.	ニューラルスケーリング則: ニューラルネットワークの性能がモデルのサイズやトレーニングデータの量に応じてどのように変化するかを示す経験則で、モデルの設計や学習に関する指針を提供します。
5.	偏微分方程式（PDE）: 複数の独立変数に関する未知関数の偏微分を含む方程式で、物理学や工学などで多くの現象を記述するために用いられます。

# 論文中の主要な図表
![Screenshot 2024-12-21 at 9.27.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/a939973d-baaa-8032-9961-924358679001.png)
![Screenshot 2024-12-21 at 9.27.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/917f9232-9605-b1c0-e808-b82ce2114df9.png)
![Screenshot 2024-12-21 at 9.27.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/b35ee9d8-2c5d-d0af-0703-dfbbbef5bf11.png)
![Screenshot 2024-12-21 at 9.28.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/7764392d-edd7-1bb4-56c1-0e52d6648fab.png)
![Screenshot 2024-12-21 at 9.28.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/5814cce6-6d98-092c-c1f4-e2cbb400a324.png)
![Screenshot 2024-12-21 at 9.30.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/9a15f8fa-ceee-3b6f-1314-205c55f4604f.png)
![Screenshot 2024-12-21 at 9.30.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/f477a70c-7ffa-199c-588c-2c9dc7abf2a2.png)
![Screenshot 2024-12-21 at 9.32.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/14e4aa36-07ed-4563-df25-f1175d0f40fe.png)
Azure DNS ゾーンで DNSSEC を試してみた

Azure DNS で DNSSEC がパブリックプレビューでサポートされました。DNSSEC は、DNS のセキュリティを向上させるための機能です。DNSSEC の仕組み上、親ドメインに子ドメイン用の DS レコードを登録して信頼チェーンを構築する必要があるので、今回は子ドメインの DNS ゾーンを作成して試してみました。

## 子ドメインの「 DNSSEC を有効にする」にチェック

![azure-dnssec-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/c52b5e18-a358-7487-453b-0889574d3b5a.png)

![azure-dnssec-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/d571d030-8021-1a31-1a4f-78d43220a906.png)

## DS record の値をコピー

![azure-dnssec-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/fe15ae6e-452b-83d8-c6cd-0479d3abb27a.png)

## 親ドメインに先ほどコピーした値の DS レコードを作成

![azure-dnssec-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/8b2e5e3e-95c3-891c-0abf-15d11f1d92fd.png)

## 子ドメインに戻り「署名済みで、委任が確立されました」を確認

![azure-dnssec-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/3fe0eef6-cfb9-b062-2b03-b435fcb15f59.png)

## 参考

https://azure.microsoft.com/ja-jp/updates/?id=468560

https://learn.microsoft.com/ja-jp/azure/dns/dnssec
MongoDBの基本

# Mongooseを用いたMongoDB操作


## 1. 初期設定

まず、プロジェクトをセットアップし、必要なパッケージをインストールします。

```bash
npm init -y
npm install mongoose
```

---

## 2. MongoDBへの接続

Mongooseを用いてMongoDBに接続します。接続エラーが発生した場合の処理も含めています。

### **database.js**
```javascript
const mongoose = require('mongoose');

const connectDB = async () => {
  try {
    await mongoose.connect('mongodb://localhost:27017/myDatabase', {
      useNewUrlParser: true,
      useUnifiedTopology: true
    });
    console.log('MongoDBに接続しました');
  } catch (error) {
    console.error('MongoDB接続エラー:', error);
    process.exit(1); // 接続失敗時にプロセスを終了
  }
};

module.exports = connectDB;
```

---

## 3. スキーマとモデルの定義

Mongooseスキーマを使って、データ構造とバリデーションを定義します。

### **userModel.js**
```javascript
const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: [true, '名前は必須です'],
    trim: true,
    minlength: [2, '名前は2文字以上でなければなりません']
  },
  age: {
    type: Number,
    min: [0, '年齢は0以上でなければなりません'],
    max: [120, '年齢は120以下でなければなりません'],
    required: [true, '年齢は必須です']
  },
  email: {
    type: String,
    unique: true,
    required: [true, 'メールアドレスは必須です'],
    match: [/^\S+@\S+\.\S+$/, '有効なメールアドレスを入力してください']
  },
  createdAt: {
    type: Date,
    default: Date.now
  }
});

const User = mongoose.model('User', userSchema);
module.exports = User;
```

#### スキーマフィールドの詳細

1. **`name` フィールド**
   - 型: `String`
   - 必須: 名前が空の場合エラーをスローします。
   - `trim`: 前後の空白を削除します。
   - 最小文字数: 2文字以上である必要があります。

2. **`age` フィールド**
   - 型: `Number`
   - 最小値: 0（マイナスの値を防止）
   - 最大値: 120（非現実的な年齢を防止）
   - 必須: 値が存在しない場合にエラーをスローします。

3. **`email` フィールド**
   - 型: `String`
   - 一意性: データベース内で重複を防ぎます。
   - 必須: メールアドレスが未入力の場合エラーをスローします。
   - フォーマット: 正規表現でメールアドレスの形式を検証します。

4. **`createdAt` フィールド**
   - 型: `Date`
   - デフォルト値: ドキュメント作成時に現在日時を自動設定します。

---

## 4. データ操作

データの挿入、検索、更新、削除の方法を個別に説明します。

### データの挿入
```javascript
const User = require('./userModel');

const createUser = async () => {
  try {
    const newUser = new User({ name: 'Taro', age: 30, email: 'taro@example.com' });
    await newUser.save();
    console.log('ユーザーが作成されました:', newUser);
  } catch (error) {
    console.error('ユーザー作成エラー:', error);
  }
};

createUser();
```

### データの検索
```javascript
const findUsers = async () => {
  try {
    const users = await User.find({ age: { $gte: 20 } });
    console.log('検索結果:', users);
  } catch (error) {
    console.error('データ検索エラー:', error);
  }
};

findUsers();
```

### データの更新
```javascript
const updateUser = async () => {
  try {
    const updatedUser = await User.updateOne({ name: 'Taro' }, { $set: { age: 31 } });
    console.log('更新結果:', updatedUser);
  } catch (error) {
    console.error('データ更新エラー:', error);
  }
};

updateUser();
```

### データの削除
```javascript
const deleteUser = async () => {
  try {
    const deletedUser = await User.deleteOne({ name: 'Taro' });
    console.log('削除結果:', deletedUser);
  } catch (error) {
    console.error('データ削除エラー:', error);
  }
};

deleteUser();
```
Webアプリ開発で活躍！作業効率を向上させる（かも）便利ツール5選

## はじめに
今回は下記アドベントカレンダーに参加したので「身の回りの困りごとを楽しく解決！」という視点で記事を書きたいと思います

https://qiita.com/advent-calendar/2024/works-hi-1

## 私の困りごと
Webアプリ開発に取り組んでいると、思わぬところで困りごとが発生することがあります。
私も、画面遷移図の作成やMarkdownの表作成、アイコン探しなど、地味に時間がかかるタスクに頭を悩ませていました。:sweat:
そんな中、いくつかの便利なツールやサービスに出会い、それらが作業効率を向上させてくれました。
本記事では、私が実際に使って役に立ったツールをご紹介します！


## Figma：画面遷移図の作成がスムーズに
Figmaは、Webアプリの画面遷移図を作成する際に活躍しました。
直感的な操作で画面要素を配置し、リンクを設定してフローを可視化できます。
また、YouTubeには使い方についての動画が沢山あることで、初めてFigmaを利用する私には、挑戦するハードルが下がりました。
共有機能もあるのでチーム開発の人にもおすすめです。

https://www.figma.com/files/team/1385114184632392905/recents-and-sharing?fuid=1385114180688551062


## Markdown Table Tool：表作成が驚くほど簡単に
Markdownで表を作成するのは、地味に手間がかかりますよね。
そこで役に立ったのが、Markdown Table Tool。
テキストを入力するだけで、自動でMarkdown形式の表を生成してくれます。
これにより、手動でフォーマットを調整する手間が大幅に削減されました。

https://notepm.jp/markdown-table-tool


## Icônes：多種多様なアイコンを簡単に取得
ボタンやメニューに使用するアイコン探しに苦労していた私を救ってくれたのが、Icônesです。
削除用のゴミ箱アイコンや「いいね」のグッドマークなど、種類豊富で簡単に検索・コピーができる点が魅力です。
さらに、SVG形式で取得できるので、カスタマイズも思いのまま。
デザイン作業の時間を大幅に短縮できました。

https://icones.js.org/


## AI画像生成ツール：イラストを作成
独自のイラストを作成するスキルがなかった私が助けられたのが、Google Labs Image FX。
自分の要望に合った画像をAIが生成してくれるので、思い通りのビジュアルを簡単に手に入れることができました。
また、シンプルなイラストを作りたいときには、Undrawもおすすめです。
幅広いテーマの無料イラストが揃っており、Webアプリにぴったりな素材が見つかります。

https://labs.google/fx/tools/image-fx

https://undraw.co/illustrations


## さいごにまとめ
今回ご紹介したツールは、私が実際に使って「便利だ」と感じたものばかりです。
技術的な課題を楽しく解決するきっかけになれば幸いです。
身の回りの困りごとに直面したら、ぜひこうしたツールを活用してみてください。
LLMによる数学的理解の限界を理解する : 論文紹介

はじめに

本記事は「GSM-Symbolic: Understanding the Limitations of Mathematical Reasoning in Large Language Models」の紹介を紹介しています。

https://arxiv.org/abs/2410.05229

# 概要
近年の大規模言語モデル（LLM）の進展により、特に数学における形式的推論能力への関心が高まっています。GSM8Kベンチマークは、小学生レベルの数学問題に対するモデルの推論能力を評価するために広く使用されています。しかし、LLMのGSM8Kにおける性能が近年大幅に向上している一方で、その数学的推論能力が本当に進歩したのかは明確ではなく、報告されている指標の信頼性に疑問が生じています。これらの懸念に対処するために、我々は複数の最先端のオープンおよびクローズドモデルに関する大規模な研究を実施しました。既存の評価の限界を克服するために、我々はGSM-Symbolicを導入しました。これは、シンボリックなテンプレートから作成された改良版ベンチマークで、多様な質問の生成を可能にします。GSM-Symbolicは、より制御可能な評価を可能にし、モデルの推論能力を測定するための重要な洞察とより信頼性の高い指標を提供します。我々の研究結果は、LLMが同じ質問の異なる具体化に対して顕著なばらつきを示すことを明らかにしています。具体的には、GSM-Symbolicベンチマークで数値だけを変更した場合、すべてのモデルの性能が低下しました。さらに、これらのモデルの数学的推論の脆弱性を調査し、質問内の節の数が増えるにつれて性能が大幅に低下することを示しました。この低下は、現在のLLMが本当の論理的推論を行うことができず、訓練データから観察された推論ステップを再現しているためであると仮定しています。質問に関連するように見える節を1つ追加するだけで、最先端のすべてのモデルで大幅な性能低下（最大65％）が観察されました。これは、その節が最終的な答えに到達するための推論チェーンに寄与していないにもかかわらずです。全体として、我々の研究は、LLMの数学的推論における能力と限界について、より微妙な理解を提供します。 ￼

# 用語の解説:
1.	大規模言語モデル（LLM）:
大量のテキストデータを基に訓練された人工知能モデルで、人間の言語を理解し生成する能力を持っています。GPT-4やBERTなどがその例です。
2.	GSM8Kベンチマーク:
小学生レベルの数学問題を集めたデータセットで、言語モデルの数学的推論能力を評価するために使用されます。
3.	シンボリックテンプレート:
数式や記号を用いて一般的な問題の構造を表現したテンプレートで、具体的な数値や要素を代入することで多様な問題を生成できます。
4.	推論チェーン:
問題の解決に至る一連の論理的なステップやプロセスのことを指します。
5.	性能低下（パフォーマンスドロップ）:
モデルの精度や効果が、特定の条件下で減少する現象を指します。例えば、問題の複雑さが増すとモデルの正答率が下がる場合などです。

# 論文中の主要な図表
![Screenshot 2024-12-21 at 9.20.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/c3ba0ae5-d4a2-de84-e20d-668c4e42ba20.png)
![Screenshot 2024-12-21 at 9.20.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/7c9210e5-964e-0b40-b708-0c2bb7bc3dd3.png)
![Screenshot 2024-12-21 at 9.21.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/32fb6f37-7db6-947e-aa1c-fa6bb144c3a1.png)
![Screenshot 2024-12-21 at 9.21.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/99f3b8de-f7cf-edeb-c61f-2245e07f912c.png)
![Screenshot 2024-12-21 at 9.21.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/25adce2d-252e-ecaf-ad2d-7519c42f4287.png)
![Screenshot 2024-12-21 at 9.21.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/300c4fd1-0350-d72f-ae25-ceb9684a8cb4.png)
![Screenshot 2024-12-21 at 9.21.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/163c6d28-4887-0c00-42c0-f8ab34b6b599.png)
無料なのに超便利！CodeiumでVSCodeを最強の開発環境に

「プログラミングの勉強を始めたけど、コードを書くのが難しくて挫折しそう…」と悩んでいませんか？実は、AIの力でプログラミングの効率を劇的に向上させることができます。

なぜならAIは膨大な量のコードデータを学習しており、人間のプログラマーのようにコードを生成したり、エラーを修正したりすることができるからです。現在フリーランスエンジニアの私も、全然経験のなかったReactでの開発案件でCodeiumを活用し、開発効率を大幅にアップさせることができました。

この記事では、そんなAIプログラミングアシスタントの**Codeium**を徹底解説します。Codeiumの便利な機能や使い方、そして実際にどのようにプログラミングの効率化に役立つのかを具体的に紹介します。この記事を読むと、Codeiumを活用してプログラミングの学習を効率化し、よりスムーズにコードを書くことができるようになります。

[>> 無料で使える生成AIおすすめ3選！用途別の使い方と特徴を徹底比較](https://taishi-official.com/2024/09/05/2874/)

## Codeiumとは？
![Codeium-top.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784196/c65ccad8-86c1-d570-4912-3dc90be32e88.jpeg)


Codeiumは、AIを活用した無料のコーディングアシスタントツールです。2024年現在、多くの開発者に利用されており、プログラミングの効率化に大きく貢献しています。

Codeiumの主な特徴と機能は以下の通りです。

- 自動コード補完
- 多言語対応
- AIチャットボット
- Codeium Command
- プライバシー保護
- IDE統合

Codeiumがプログラミングの効率化にどのように役立つかについて、具体的に以下のポイントが挙げられます。

- 時間短縮
- 学習支援
- コード品質向上
- 多言語プロジェクトの効率化
- コスト効率

これらの特徴により、Codeiumは開発者の生産性を大幅に向上させ、プログラミング作業の効率化に大きく貢献しています。特に、コーディング時間の短縮、コード品質の向上、学習支援など、多岐にわたる面でプログラミングの効率化をサポートしています。

[>> Codeiumの主な特徴と効率化のポイントの詳細！](https://taishi-official.com/2024/12/14/3044/#toc1)

## Codeiumの使い方
Codeiumは、AIを活用したコード補完ツールで、特にVisual Studio Code（VSCode）での利用が人気です。以下に、インストール方法、基本的な使い方、応用的な使い方について詳しく解説します。

[>> インストール方法](https://taishi-official.com/2024/12/14/3044/#toc3)

[>> 基本的な使い方](https://taishi-official.com/2024/12/14/3044/#toc4)

[>> 応用的な使い方](https://taishi-official.com/2024/12/14/3044/#toc5)

## Codeiumのメリットとデメリット

Codeiumは、AIを活用したコーディング支援ツールであり、開発者に多くのメリットを提供する一方で、いくつかのデメリットも存在します。以下にCodeiumの主なメリットとデメリットを詳しく説明します。

### Codeiumのメリット

- コーディングのスピードアップ
- コードの品質向上
- 学習効果の向上
- 無料で利用できる
 
### Codeiumのデメリット

- AIが生成したコードの正確性には注意が必要
- 依存しすぎると学習効果が低下する可能性
- 大規模なプロジェクトでの利用には課題がある場合も

これらのメリットとデメリットを考慮すると、Codeiumは非常に強力なツールですが、その使用方法には注意が必要です。適切に活用すれば、生産性向上や学習効果を得られる一方で、自身のスキル維持やプロジェクト特有のニーズへの対応も忘れないよう心掛けることが重要です。

[>> メリット・デメリットの詳細はコチラ！](https://taishi-official.com/2024/12/14/3044/#toc6)

## Codeiumの活用事例

### プログラミング学習での活用例
Codeiumは、特に初心者や学生のプログラミング学習に効果的です。

- 自動補完機能の活用
- AIチャットボットによるサポート
- コード検索機能
- プロジェクトベースの学習
- フィードバックと改善

[>> 各項目の詳細はココをチェック！](https://taishi-official.com/2024/12/14/3044/#toc8)

### 実際の開発現場での活用例
Codeiumはプロの開発者やソフトウェア企業の実際のプロジェクトでも、広く活用されています。

- 開発時間の短縮
- 新技術の学習支援
- セキュリティ強化
- グローバル開発環境での活用
- 生産性向上

[>> 各項目の詳細はココをチェック！](https://taishi-official.com/2024/12/14/3044/#toc9)

このように、Codeiumは学習者から専門家まで幅広いユーザーに利用され、プログラミングの効率化と生産性向上に大きく貢献しています。

## まとめ
今回はVScodeの拡張機能で使えるAIコード補完ツール、Codeiumについてご紹介いたしました。AIコード補完ツールにはCodeiumの他にも、有名なものでGitHub Copilotなどがありますが、こちらは利用に料金が発生します。しかしCodeiumは、無料での利用が可能です。

Codeiumは初級者にはプログラミング学習のメンターに、ベテランにとってはプログラミングの相棒となってくれます。筆者も全く経験のないReactを開発で使うことになったとき、時にCodeiumはReactの先生に、時に良き相棒として開発案件の手助けをしてくれました。プログラミングをされる全エンジニアに、ぜひ利用を検討してみていただけたらと思います。

### おまけ

https://qiita.com/taishi_will_be/items/70a8ce8938944286b487

https://taishi-official.com/learning-programming/

<strong>＼Follow me／</strong>

- X（旧Twitter）：https://x.com/taishi_it_blog
- Instagram：https://www.instagram.com/taishi_will_be/
- YouTube：https://www.youtube.com/@Engineer_ILLBE
- TikTok：https://www.tiktok.com/@taishi_will_be
- note：https://note.com/taishi_wii_be/

<br>

最後にいいねお願いします:thumbsup:
水っぽいアニメーションを表現させるためのアイデアまとめ

# はじめに
Webアニメーションの中でも、うねうねやグネグネした水っぽい動きは特に魅力的ですが、実現するには少し工夫が必要です。
本記事では、水っぽいアニメーションを作るためのアイデアを紹介します。

#### 1.SVGフィルタで波打たせる

<p class="codepen" data-height="400" data-default-tab="html,result" data-slug-hash="ByBRZNN"</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

SVGの中に画像を用意しフィルター効果を与え、feTurbulenceを使い画像を歪ませています。
そのフィルターをgsapで横にずらすことで波打っている様に見せています。

#### 2.mask-imageで波打たせる
<p class="codepen" data-height="400" data-default-tab="html,result" data-slug-hash="zYXzqMX"</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

こちらのアニメーションは2枚の画像を重ね片方の画像をスケールし波紋のようなマスク画像を使用することで波打っているかの様に見せています。

使用したマスク画像
![スクリーンショット 2024-12-21 7.56.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728643/caf45b13-dec9-6ecd-cafa-ef801fd293a9.png)

#### 3.マスキング+スプライトで滲ませるアニメーション
<p class="codepen" data-height="400" data-default-tab="html,result" data-slug-hash="eYbZypo"</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

なぜかcodepenで画像が表示されないので下記の動画でアニメーションをご確認ください。
![画面収録 2024-12-21 10.06.29.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728643/01af7eb8-2242-cb10-f759-53118bf96b25.gif)

まずは、マスクで使用する素材を準備します
アフターエフェクトを使い実現させたい滲みアニメーションを作成し連番で書き出す。それを繋げて一つの画像にします。

（例）
![wave.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728643/0270c467-2f1b-c6ec-2082-90e1ae8ff07f.png)
作成した画像をmask-imageに設定しcssプロパティanimation-timing-functionのstepsでコマ送りアニメーションさせることで滲んだような表現を演出しています。


いかがだったてしょうか。
（本記事で紹介したのはあくまでアイデアで細かいチューニングなどはしておりませんのでご注意ください。）

以上この記事を読んだ誰かのお役に立てれば幸いです。
リストのアイコンを自作する方法

# はじめに
HP制作をしている駆け出しエンジニアです。
リストのアイコンをデフォルトのものではなく、自作したいときの方法をまとめました。

今回は「▶」にしたい場合について、2通りの実装方法がありますので紹介します。

# 方法1：実際の文字をアイコンとして使用する方法
実際の文字（`▶`）をアイコンとして使用します。
フォントや文字サイズで調整可能です。

以下のコードを使用して、リストアイコンを右向きの三角形に変更できます。
```CSS:css
ul {
  list-style: none; /* デフォルトのリストスタイルを削除 */
  padding: 0;
  margin: 0;
}

ul li {
  position: relative;
  padding-left: 20px; /* アイコン分のスペースを確保 */
}

ul li::before {
  content: "▶"; /* 三角形アイコンを設定 */
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  color: #333; /* 三角形の色を設定 */
  font-size: 16px; /* アイコンのサイズ */
}

```

# 方法2：CSSで三角形を描画する方法
純粋にCSSで三角形を描画します。
厳密な形状の調整が必要な場合に便利です。

以下のコードを使用して、リストアイコンを右向きの三角形に変更できます。
```css:css
ul {
  list-style: none; /* デフォルトのリストスタイルを削除 */
  padding: 0;
  margin: 0;
}

ul li {
  position: relative;
  padding-left: 20px; /* アイコン分のスペースを確保 */
}

ul li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 0;
  height: 0;
  border-top: 6px solid transparent; /* 上部分を透明に */
  border-bottom: 6px solid transparent; /* 下部分を透明に */
  border-left: 10px solid #333; /* 三角形の色を設定 */
}

```

# HTMLサンプル
どちらの方法でも、HTMLは以下を使用しています。
```HTML:html
<ul>
  <li>リストアイテム1</li>
  <li>リストアイテム2</li>
  <li>リストアイテム3</li>
</ul>

```

以上、参考になれば幸いです!!
Hacking CTFs with Plain Agents : 論文紹介

# はじめに
本記事は「Hacking CTFs with Plain Agents」の紹介を紹介しています。

https://arxiv.org/abs/2412.02776v1

# 概要
本研究では、シンプルなLLM（大規模言語モデル）エージェント設計を用いて、高校レベルのハッキングベンチマークであるInterCode-CTFにおいて95%の性能を達成しました。具体的には、プロンプト設計、ツールの使用、複数回の試行を組み合わせることで、先行研究（Phuongら2024の29%、Abramovichら2024の72%）を上回る成果を得ました。この結果は、現在のLLMが攻撃的サイバーセキュリティにおいて高校レベルを超える能力を持つことを示唆しています。これらのハッキング能力は十分に引き出されておらず、我々のReAct&Planプロンプト戦略は、複雑なエンジニアリングや高度なハーネスを必要とせず、多くの課題を1～2ターンで解決します。

# 用語の解説
1.	LLM（大規模言語モデル）:
大量のテキストデータを学習し、自然言語の理解や生成を行う人工知能モデル。GPT-4などがその例。
2.	InterCode-CTF:
LLMのハッキングスキルを評価するためのベンチマークで、Capture The Flag形式の課題を含む。LLMのサイバーセキュリティ能力を測定するために使用される。
3.	ReAct&Planプロンプト戦略:
LLMに対して、行動（Action）と計画（Plan）を組み合わせた指示を与えることで、問題解決能力を向上させる手法。複雑なエンジニアリングを必要とせず、効率的な解決を促進する。
4.	ハーネス（harness）:
LLMを特定のタスクや環境で動作させるための枠組みや設定。適切なハーネス設計により、モデルの性能を最大限に引き出すことが可能となる。
5.	サイバーセキュリティベンチマーク:
サイバーセキュリティ分野における技術やツールの性能を評価するための基準やテストセット。InterCode-CTFやCyberSecEvalなどが例として挙げられる。

# 論文中の図表
![Screenshot 2024-12-21 at 9.14.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/814c5715-ae36-2e57-d886-f001d931b8cd.png)

![Screenshot 2024-12-21 at 9.14.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/bf5e6a02-6b50-344e-62af-e3d5de796705.png)
![Screenshot 2024-12-21 at 9.15.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/08e2918f-2ae9-9511-3018-6d0e31ecd62f.png)
![Screenshot 2024-12-21 at 9.15.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/8b642365-f1a5-4521-b1ef-b10d213a30dd.png)
![Screenshot 2024-12-21 at 9.15.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/4df93a59-d195-dab1-3461-2ab9a63468cd.png)
![Screenshot 2024-12-21 at 9.15.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/e8fee16a-2d0b-f38b-b612-5edd3be1a509.png)