OmniAICreator/Qiita-1.07M huggingface dataset:
MCreator/ビームの作り方

#前の記事:https://qiita.com/yt365/items/420b6ccf2ce3a59b3b4d
今回はMCreatorでビームが出せるようにしたいと思います。
## この記事で分かること
MCreatorでビーム出すこと。
## 飛び道具
リソースからテクスチャを作成します。
![2025-04-19_20h29_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/c0ba0a1e-926c-4e85-bbcf-dc4cfbcb8aba.png)
何も書かずに、右上の保存ボタンから保存します。
modの要素に移って、＋ボタンからアイテムを選びます。
名前を入力して作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/bbb42ae6-9fdd-4142-971d-07081a70709a.png)
テクスチャをさっき作成した、何も書いていない物にします。
右上の保存ボタンで保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/15570a86-34dc-4179-b8c2-2506e686a88f.png)
＋ボタンから飛び道具を選びます。
名前を入力したら作成します。
発射に必要なアイテムをさっき作った透明のアイテムにします。
発射物が飛行中にパーティクルを生成させるにチェックをします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/6adea117-318c-4fcb-aadd-b2f1a486bcc3.png)
トリガーに移って、プロシージャを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/ca4bf234-8b1b-4dac-b26d-5026b8950b36.png)
ブロックを写真のように組み立てます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/258e89bc-f89a-4cfe-9238-880b5ee6814a.png)
右上の保存ボタンを押します。
飛び道具も保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/131f1d98-df40-4307-8a3e-cf19254a8dbb.png)

## キー設定
＋ボタンからキー設定を選びます。
名前を入力して作成します。
発生させるキーを設定します。![2025-04-19_10h39_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/af025b3f-fc41-4b1d-ba1f-1b8487becfaa.png)
右下の＋ボタンを押します。
名前を入力してプロシージャを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/6a5c2b83-167c-49f5-90ee-51a2876a3b77.png)
下の写真のようにブロックを組みます。
![2025-04-19_19h28_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/d678997b-32e1-47f8-b485-b041e6bc547e.png)
右上の保存ボタンを押します。
さっき作ったキー設定から、作ったプロシージャを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/b846035a-c3a9-4a76-9e6e-50aed1af2942.png)
右上の保存ボタンから保存します。
## 試してみる
Zキーを押すとビームが発射されると思います。
## 終わりに
これでビームが作れるようになったと思います。
パーティクルを変えたり、ビームの速度とかダメージ量とかが変えることができるのでぜひやってみてください！
「拡張機能はNG」な時にSalesforceの項目セキュリティ設定を一括操作するスクリプト

# はじめに
**テーブル内のチェックボックスを指定してチェックのつけ外しを行うスクリプト**  
Salesforceの項目レベルセキュリティのチェックのつけ外しが面倒な上、間違えられないので、このスクリプトを作成しました💁‍♂️  

下記項目レベルセキュリティ画面で使用できます。  
　・各項目の項目レベルセキュリティ設定画面  
　・各プロファイルの項目レベルセキュリティ設定画面  
※項目レベルセキュリティ設定画面以外でも、テーブルかつ列見出し・行見出しがある箇所であればチェックのつけ外しできます。

# ソースコード(GitHub)
https://github.com/yutashio/sfdc_selfaddon_checkbyspecifyingcheckboxes

# 【使い方】  

## ➀ テーブル内で右クリックしメニュー画面から「検証」を選択してください。
![contact_Field-LevelSecurity00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3772806/54d875f2-c25c-45e2-9d88-c38588295daf.png)
![contact_Field-LevelSecurity01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3772806/ff6e98bc-baa2-4492-9ebb-171b61e29e0f.png)

## ➁ 検証(Developer Tools)を表示させ「Console」パネルを選択してくさい。
![contact_Field-LevelSecurity02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3772806/785c38ec-0a0f-4021-be9d-27fa579ce724.png)

## ➂ 値の変更を行ってください。
![contact_Field-LevelSecurity03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3772806/fbb0b76d-bb85-4f7c-a257-24fbc03da7fc.png)

1. 変数名：`lineName`
    1. チェックのつけ外しを行いたい**列見出し**を記載してください。
    1. 例）取引先責任者 項目レベルセキュリティ  ![contact_Field-LevelSecurity04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3772806/87edeae7-7ee4-444b-9205-cbcb5f3e1fd9.png)

        1. 参照アクセス権のチェックのつけ外しを行いたい場合：
			```
			let lineName = ['参照アクセス権'];
			```
        1. 編集アクセス権のチェックのつけ外しを行いたい場合：
			```
			let lineName = ['編集アクセス権'];
			```
        1. 参照・編集アクセス権両方のチェックのつけ外しを行いたい場合：
			```
			let lineName = ['参照アクセス権','編集アクセス権'];
			```
1. 変数名：`columnName`
    1. チェックのつけ外しを行いたい**行見出し**を記載してください。
	1. 例）取引先責任者 項目レベルセキュリティ![contact_Field-LevelSecurity04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3772806/7c275efb-7d93-498b-bfc8-19e258bd4f06.png)

        1. 「Languages」「メール」「リードソース」項目のチェックのつけ外しを行いたい場合：
			```
			let columnName = ['Languages','メール','リードソース'];
			```
        1. 全項目のチェックのつけ外しを行いたい場合：
			```
			let columnName = [];
			```
			※空にしてください。
1. 変数名：`checkboxStatus`
     1. チェックのつけ外しを設定してください。
        1. チェックをつける場合：
			```
			let checkboxStatus = true;
			```
        1. チェックを外す場合：
			```
			let checkboxStatus = false;
			```
## ➃スクリプトの編集ができたらConsoleにスクリプトを貼り付けてEnterを押してください。
![contact_Field-LevelSecurity05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3772806/7ef175de-d092-4330-bf93-4f75e0dbcb38.png)

# おわりに
少し時間が経っていますが、GitHubで公開していたものをQiitaにも載せてみました！

本スクリプトは、項目レベルセキュリティ設定の作業を少しでも楽にすることを目的として作成したものです。  
実行後は必ず **目視で結果を確認**してから運用に反映いただき、  **ご利用は自己責任でお願いいたします。**

今後も、同じような作業で困っている方の助けになれば嬉しいです😊
Javaをとりあえず書けるようになるまで #1

ようやくコードを触っていきます。

# 文字列の出力 ~Hello World~
myCompilerを開くと、以下のプログラムが書かれていると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065456/0f4e9bab-16fb-4fbe-a59c-dc23fd9bd733.png)

今は不要なので、一旦1~5行目を消してしまいましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065456/2c5ebef7-015a-45b2-b50a-f95806556703.png)

すっきりしました。今回の目的は、このプログラムの内容を理解し、自分でちょこちょこ改変を加えられるようになることです。

Javaのプログラムを実行したとき、処理される場所([エントリーポイント](https://qiita.com/mojirico/items/b1c6f1816d4027254ea5)と呼ばれる)は以下の部分です。
```
class Main{
    public static void main(String[] args){
        // ここの処理が実行される
    }
}
```

`class`の名前は、実行するプログラムのファイル名に一致するようにします。myCompilerでは`Main.java`というプログラム名になっているので、`class`名は`Main`とする必要があります。`main`の前にたくさんくっついてる`public`, `static`, `void`とか、`String[] args`とかについては今は無視して、Javaのお約束だと思ってください。

これらを無視すると、今回実行されるのは以下の一行の処理になります。
```
System.out.println("Hello World!");
```
この`System.out.println("表示する文字列")`というのが文字列を表示するための<b>関数</b> (#5にて解説予定) です。この中の文字を変えると、表示される文字列も変化します。いろいろ試してみてください。また、文末の`;`(セミコロン)はJavaにおいて必ずつける必要のある記号です。文章における"。" (句点)のようなものです。

ちなみに、この`println`の`ln`はline(行)を意味しており、`()`の中に書いてあるものを表示した後に改行を行います。これにより
```
System.out.println("Hello World!");
System.out.println("Hello World!2");
```
とした時の出力は以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065456/5cf26e25-140d-43ce-a2c6-07cff7bb038d.png)

改行を行わないただのprintという関数もあり、
```
System.out.print("Hello World!");
System.out.print("Hello World!2");
```
とすると出力は下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065456/43f9bb30-ebab-4e6e-9fa6-e3a7ebfe3765.png)

2つのメッセージが改行されることなく表示されている様子が見られます。

# 改行位置を調整する
では改行は`println`でしかできないのか？というとそういうわけではありません。<b>改行文字</b>というものがあります。改行コードは`\n`とか`\r\n`とか複数存在しており、実行環境によって変わってきます (前触ったマイコンでは`\r\n`じゃないと正常に改行されませんでした)。

```
System.out.print("Hello\nWorld!\n");
```
とすると以下のような出力が得られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065456/3fe76d89-41af-443a-968e-c035b88a522a.png)

`\n`を入れたところで改行されて出力されているのがわかりますね！これで自由に改行位置を調整することが出来ます。

### 注意点
この[サイト](https://qiita.com/gts/items/5bae62d2b57a4a6d4221)によると、Javaの改行コードには`System.lineSeparator()`が推奨されているようです。先述の通り改行コードは複数存在しており、実行環境に応じてこれらの中から適切なものを自動で選択してくれる機能のようです。ただmyCompilerでは`\n`で動いたので、わかりやすさのために以降も一貫して`\n`を使っていきます。

# まとめ
今回は文字列の出力の仕方や、改行文字について学びました。実務の中でもプリントデバッグと言って、エラーメッセージや変数の中身などを出力して、バグが起きている箇所を探すということを日常的に行います (プログラミング作業の9割はこれでしょう) 。一番基礎的で重要な内容なので、ぜひぜひ中身を色々変えて触ってみてください。

次回は数式を触っていきます。よりプログラミングっぽくなってくると思います！
CDNで焦った

## 環境
以下の環境で動作させています。
```
% winver

Windows11
バージョン:24H2
OSBuild:26100.2605
```
## 焦った事象
```
①Mixed Content The page at `https://~~~`  was loaded over HTTPS but requested an insecure script 'http://unpkg.com/vue@3.5.13/dist/vue.global.js' . This request has been blocked; the content must be served over HTTPS.

②Uncaught ReferenceError: vue is not defiened at ~~~
```

### CDNの読み込みエラーが発生　だが・・・

軽微な修正作業中に、テスト環境の管理画面ログイン画面がエラーを吐いて画面遷移できなくなっていました。
ログイン周りはLaravelのSanctum & Vue.jsで作成していたため、検証ツール上からエラーを確認。

**HTTPSページ上でHTTPのスクリプトを読み込もうとしてブロックされた？**

「いやちゃんとhttpsになっているよな・・・？」
「そもそも数時間前までは問題なく動作していたような？」


どうやら本番環境でも同様の不具合が起きていたようで急ぎチームに助力を求めたところ、下記の記事を共有いただきました。



https://analyzegear.co.jp/blog/1217



なるほど参照先側のパスが変更になった可能性もあるのか・・・いや困るんだが。

・パスを辿ったところ、参照先のVueも落ちているっぽかったこと
・リリース後間もない不具合だったこと

からCDN参照を取りやめ、ファイル参照にすることで事なきを得ました。


## 所感
その後同時期のSNSを覗いていたらunpkg自体が落ちていたとの情報もちらほら見かけたので、上記の記事にもあったCDN参照の怖さを肌で感じた事象でした。

## ほか参考にした記事
https://qiita.com/mozukuzuku/items/174a1b1c451175b69272

https://qiita.com/yamato1491038/items/732a5fb78ec6b9be4f62
無課金プレイヤー向け Cursor と Windsurf のできる・できない

:::note warn
2025年4月19日時点での情報です。
最新の情報と乖離している場合があるのでご留意ください。

あと、情報に間違いあったらごめんなさい
5月24日に加筆しましたが、圧倒的に実態と乖離があるので参考程度にどうぞ
:::

# :pencil: 執筆のモチベーション

仕事ではなく、趣味のコーディング環境では「AI ネイティブなエディタ」を試してみたいと思ってます。
とはいえ、課金するほどの使用量ではなく、**"無課金でどこまで使えるのか"** が気になる段階。

Cursor と Windsurf をざっくり触ったり、ドキュメントを読んだりしたので、**備忘録的にまとめておきます**。

# :vs: Cursor, Windsurf できる・できない比較表

| 機能カテゴリ       | 項目                           | Cursor 無課金         | Windsurf 無課金         |
|------------------|--------------------------------|-----------------------|--------------------------|
| **コード補完**     | 通常のコード補完                | ✅ できる | ✅ できる          |
|                  | Cursor Prediction<br>Tab to Jump 補完               | ✅ できる                | ❌ できない |
| **チャット機能**   | チャット利用                    | ✅ できる                | ✅ できる（Cascade Base のみ） |
|                  | モデル選択                      | ✅ できる（選択肢に制限あり） | ❌ できない    |
| **その他機能**     | コミットメッセージ生成           | ✅ できる                | ❌ できない                    |


# 💡 コード補完まわり

入力中のコードに対して、AI が続きを提案してくれる系の機能です。

## 🔹 Cursor

⭕ できる

Tab 補完は 200回/月

## 🔸 Windsurf

⭕ 一部使える

- 基本的なコード補完：できる
- Tab to Jump（複数箇所編集のサポート）：できない
　※同一コンテキスト内の編集補完が対象

# 💬 チャット機能（LLM 連携）

エディタやターミナル内で、自然言語によるコマンドや質問ができる機能。
エージェント、質問、編集、MCP なども含まれます。

## 🔹 Cursor

⭕ 基本機能は使える

- モデル選択：可能
　※ただし、高性能なモデルは使えない

## 🔸 Windsurf（Cascade）

⭕ 基本機能は使える

- モデル選択：不可
　※使用できるのは Cascade Base ⚡ のみ

# 📦 その他

## 🔹 Cursor

- コミットメッセージ生成：できる

## 🔸 Windsurf

- コミットメッセージ生成：できない

---

まあ、課金しろよって話なんですが。。。

この記事の文体見覚えありますか？そうです。ChatGPT にいい感じにしてもらいました。
UnityでScriptableObjectを使ったらバグ地獄に…？　-複数の敵が勝手に弾を撃つようになった原因と対策-

## この投稿で得られること

- ScriptableObjectを使う際の意外な落とし穴
- 「Healのはずが弾が出る」ようなバグの本質
- Unityで状態管理する際の安全な設計パターン

---

## 開発背景

敵キャラの行動管理に ScriptableObject（以下SO）を使っていました。  
`EnemyData` というSOにこんな感じのパラメータを持たせています：

```csharp
[CreateAssetMenu(fileName = "EnemyData", menuName = "Game/EnemyData")]
public class EnemyData : ScriptableObject
{
    public string enemyName = "Enemy";
    public int maxHP = 100;
    public float attackInterval = 10f;
    public int attackPower = 10;
    public int defense = 5;

    // 実はここが落とし穴
    public EnemyActionType actionType = EnemyActionType.Attack;
}
```
## 発生した問題
敵Aが Heal を選んだ

敵Bが Attack を選んだ

→ なぜか 敵Aまで弾を撃ち出した！？

見た目は Heal アイコンなのに、弾が出てプレイヤーを攻撃。完全にバグってるように見えました。

## 原因：SOは「共有される」インスタンスだった
SOは Unity において、アセットベースで共有される参照型です。
そのため、複数の敵が同じSOを参照していると、状態を上書きし合ってしまうのです。

```csharp
enemyA.stats.actionType = Heal;
enemyB.stats.actionType = Attack;
// enemyA も attack 扱いされる（共有されてるため）
```
## 解決策：SOを複製して使う！
```csharp
[SerializeField] private EnemyData statsTemplate; // SOアセット
private EnemyData stats; // 実行時インスタンス

void Start()
{
    stats = Instantiate(statsTemplate); // ランタイムで複製
}
```
これにより、各敵が個別の stats を持てるようになり、バグは完全解消しました。

## ScriptableObjectに持たせてはいけないもの

OK（共有すべき情報）　　　名前、HP上限、攻撃力など
NG（実行中に変わる情報）　現在HP、状態、行動タイプなど

## 教訓とベストプラクティス
SOは「読み取り専用設定データ」と割り切る

状態（行動・HP・ターゲット）は必ずインスタンス側で保持する

複製には Instantiate() を使う

UnityのSOは便利だけど「安全ではない」こともある

## 再現チェック用ログ例（抜粋）
```csharp
[Decision] Drone decided to Buff
[Execute] Drone BUFFS Player
```
→ 弾が飛ぶ
```csharp
[Decision] Drone decided to Attack
[Execute] Drone ATTACKS EnemyController
```
→ 弾のログ

## まとめ
ScriptableObjectは便利だけど危険な共有変数

状態を扱うには、実行時に複製してインスタンス管理するのがベスト

「バフのはずが攻撃してる…」そんな直感に反する挙動にはSOの共有性を疑うべき

## ブログでもUnityや個人開発ネタを発信中です！
開発ノウハウやアプリ制作過程、Unity連携系のハマりポイントなど
より深掘りした内容をブログにまとめています。
▶ https://syunpp.com

## 公開中のアプリ一覧はこちら！
実際にUnityで開発してリリース済みのアプリ一覧をまとめています。
▶ https://syunpp.com/公開中のアプリ一覧/

## コメント・ストック・LGTM大歓迎！
「自分も似た経験ある」「こうやって回避してるよ」などあれば気軽にコメントください！
ストックやLGTMも励みになります！
【Dart】競プロ 入出力まとめ

# はじめに
この記事では，Dart言語を使って競技プログラミングの入力を効率的に受け取るための基本的なテンプレート＆メソッドをまとめています．

# 実際のコード例
以下が本記事で紹介する基本テンプレートです．最初に標準入力をすべて文字列として読み込み，ポインタを動かしながら必要な型を逐次取り出します．

<details><summary>テンプレコード</summary>

```dart
import 'dart:io';
import 'dart:convert';

void main() {
  final input = _Input();
  int n = input.getInt();

  print(n);
}

class _Input {
  static _Input? _instance;
  final String data;
  int pos = 0;

  _Input._()
      : data = File('/dev/stdin')
          .readAsStringSync(encoding: utf8);

  factory _Input() {
    _instance ??= _Input._();
    return _instance!;
  }

  bool isSpace(String ch) => ch == ' ' || ch == '\n';

  String getString() {
    while (pos < data.length && isSpace(data[pos])) {
      pos++;
    }
    int start = pos;
    while (pos < data.length && !isSpace(data[pos])) {
      pos++;
    }
    return data.substring(start, pos);
  }

  List<String> getStringAsList() => getString().split('');

  List<String> getStrings(int n) {
    return List<String>.generate(n, (_) => getString());
  }

  List<List<String>> getStrings2d(int n, int m) {
    return List<List<String>>.generate(
        n, (_) => getStringAsList());
  }

  int getInt() => int.parse(getString());

  int getInt0idx() => getInt() - 1;

  List<int> getInts(int n) {
    return List<int>.generate(n, (_) => getInt());
  }

  List<int> getInts0idx(int n) {
    return List<int>.generate(n, (_) => getInt0idx());
  }

  double getDouble() => double.parse(getString());

  List<List<int>> getInt2d(int n, int m) {
    return List<List<int>>.generate(n, (_) => getInts(m));
  }
}

void printBool(bool b) {
  print(b ? 'Yes' : 'No');
}

void printList(List list, {String separator = ' '}) {
  print(list.join(separator));
}
```
</details>


# セクションごとの使い方
以下では，よくある入力パターン別に，`_Input`ヘルパーの呼び出し例と代替のDart標準コードを紹介します．

## 【1行】1文字
```:入力
abc
```

```dart
final input = _Input();
String s = input.getString();
print(s);  // 'abc'
```

## 【1行】1数字
```:入力
10
```
```dart
int n = input.getInt();
print(n);  // 10
```
## 【1行】n文字
```:入力
abc def ghi
```
```dart
List<String> tokens = input.getStrings(3);
// ['abc', 'def', 'ghi']
```
## 【1行】n数字
```:入力
1 2 3
```
```dart
List<int> nums = input.getInts(3);
// [1, 2, 3]
```

## 【n行】1文字／1数字／n文字／n数字


### n行1文字
```:入力
3
abc
def
ghi
```
```dart
int n = input.getInt();
List<String> s = input.getStrings(n);
print(s); // [abc, def, ghi]
```

### n行1数字
```:入力
3
123
456
789
```
```dart
int n = input.getInt();
List<int> a = input.getInts(n);
print(a); // [123, 456, 789]
```

### Grid的な
```:入力
4 6
....##
...###
..####
.#####
```
```dart
final [n, m] = input.getInts(2);
List<List<String>> grid = input.getStrings2d(n, m);
```
```
[., ., ., ., #, #]
[., ., ., #, #, #]
[., ., #, #, #, #]
[., #, #, #, #, #]
```

### n行n数字
```:入力
3 4
1 2 3 4
5 6 7 8
9 10 11 12
```
```dart
final [n, m] = input.getInts(2);
List<List<int>> grid = input.getInt2d(n, m);
```
```
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]
```

---
終わり
実務経験者が沖縄でPGになる為に利用した転職サイト

### ITキャリア沖縄
コーディネーターの方が会社を紹介してくれます!

https://www.itcokinawa.jp/

### ジョブアンテナ沖縄
応募企業のレスポンスが早い!

https://www.jobantenna.jp/
住所から都道府県・市区町村を抽出する

# はじめに
今回は、前回作った市区町村リストを使用して、
住所データから都道府県・市区町村を抽出してみます

# 環境
```terminal
~ % python -V
Python 3.11.9

~ % pip list | grep pandas
pandas             2.2.3
```

# 準備
## 市区町村マスタ
以下内容のCSVデータを用意します（[前回記事参照](https://qiita.com/00b012deb7c8/items/69dde5fb12574bc8f52d)

![69dde5fb12574bc8f52d-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4001795/72977cfe-cd8d-487d-a5df-954c957370b8.png)

## 抽出対象の住所リスト
ChatGPTで適当に作成します
```text:address.csv
東京都渋谷区代々木2丁目2-1
北海道札幌市厚別区厚別中央2条5丁目
大阪府豊中市新千里東町1丁目5-3
京都府綾部市駅前通り1丁目9
神奈川県鎌倉市小町1丁目9-3
愛知県知立市中町中132
兵庫県芦屋市船戸町1-31
福岡県糸島市前原中央1丁目1-1
宮城県加美郡加美町字南町115-1
広島県安芸郡熊野町出来庭2丁目1-1
茨城県稲敷郡阿見町中央1丁目1-1
静岡県賀茂郡南伊豆町下賀茂413-1
千葉県安房郡鋸南町吉浜516
新潟県南魚沼郡湯沢町大字湯沢2497
岐阜県大野郡白川村荻町1086
長野県木曽郡木祖村薮原1191
群馬県多野郡上野村大字勝山127
岡山県久米郡美咲町原田2155
栃木県下都賀郡壬生町壬生乙2452
熊本県球磨郡水上村大字湯山1322-1
```

# プログラム
```Python
import pandas as pd
import re
pd.set_option('display.unicode.east_asian_width', True)

# 都道府県名の抽出パターン
pref_pattern = r'(東京都|北海道|(?:京都|大阪)府|.{2,3}県)'

# 市区町村マスタの読み込み
# 市区町村名を結合したカラムを作っておく city_ward
city_df = pd.read_csv('city_list.csv')
city_df = city_df.fillna('')
# 市・区・町・村・郡の並びはクセがあるので調整の必要あり
# 今回は 区(ward)/郡(county)/市区町村(city) と想定し、
# 連結して一度に抽出するが、それぞれ抽出する方が良いかも
city_df['city_name'] = city_df.apply(lambda x: f"{x['ward']}{x['county']}{x['city']}", axis=1)

# 市区町村名のリストを名の長い順にソートし、抽出パターンに
city_pattern = '|'.join(sorted(city_df['city_name'].tolist(), key=len, reverse=True))

# 住所データの読み込み
df = pd.read_csv('address.csv', header=None, names=['address'])

def extract(address):
    # 都道府県名を抽出
    pref_match = re.match(pref_pattern, address)
    pref = pref_match.group() if pref_match else None
    rest = address[len(pref):] if pref else address # 都道府県名を除いた残り文字列

    # 市区町村名を抽出
    city_match = re.match(city_pattern, rest)
    city = city_match.group() if city_match else None
    return pd.Series([pref, city])

# 抽出結果を新しいカラムに追加
df[['pref', 'city']] = df['address'].apply(extract)
```

# 結果

![7ce41fb74f1f70305426.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4001795/1a5b99ef-3583-4549-9754-47299fa5c738.png)
[Blender]AreaLightが鏡面に映らないようにしたい

# 概要
![スクリーンショット 2025-04-19 200923.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/c599a384-e7fe-45bc-b429-0a1e51343d25.png)

このようにAreaLightはメタリックなオブジェクトにその形が映し出されてしまいます。意図して映したい場合はこのままでも良いですが、映ってほしくない場合はどうすればいいのでしょうか？:thinking:
# 本文
今回鏡用オブジェクトはMetallic = 1.0 / Roughness = 0.0で用意しました。後はViewportの表示モードをRenderedモードにしてRenderEngineはCyclesにしています。

ここからAreaLightを選択状態にした後、スクショのようにObjectプロパティタブ→Ray Visibility→GlossyをOFFにします。
![スクリーンショット 2025-04-19 201807.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/cd4bb110-b575-47d9-b422-8e355155979c.png)
これでViewportはもちろんレンダリングしてもAreaLightは鏡面に映り込まなくなります:open_hands_tone2:
![mirrorTest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/16af250c-8b88-4b6a-8d4c-98c2db6f1ca7.png)
状態遷移図 　状態機械



# state machine diagram
state chart, state machine chart, "state transition diagram"

## state transition diagram
Issues on drawing the State Transition Diagram for arbitrary Cellular Automata
https://arxiv.org/pdf/0811.1513

Measures of Tipping Points, Robustness, and Path Dependence
https://arxiv.org/pdf/0811.0633

Color Graphs: An Efficient Model For Two-Dimensional Cellular Automata Linear Rules
https://arxiv.org/pdf/0802.3626

Stochastic approach to molecular interactions and computational theory of metabolic and genetic regulations
https://arxiv.org/pdf/q-bio/0612011

Feature Specification and Refinement with State Transition Diagrams
https://arxiv.org/pdf/1409.7232

CraftRTL: High-quality Synthetic Data Generation for Verilog Code Models with Correct-by-Construction Non-Textual Representations and Targeted Code Repair
https://arxiv.org/pdf/2409.12993

Development of monitoring systems for anomaly detection using ASTD specifications
https://arxiv.org/pdf/2207.11134

Can process mining help in anomaly-based intrusion detection?
https://arxiv.org/pdf/2206.10379

Discovering and Understanding the Security Hazards in the Interactions between IoT Devices, Mobile Apps, and Clouds on Smart Home Platforms
https://arxiv.org/pdf/1811.03241

Multi-UAV Cooperative Trajectory for Servicing Dynamic Demands and Charging Battery
https://arxiv.org/pdf/1805.08357

Two Dimensional Discrete Dynamics of Integral Value Transformations
https://arxiv.org/pdf/1709.05205

Deterministic Computing Mechanism for Perfect Density Classification
https://arxiv.org/pdf/1607.06909

Formal refinement of extended state machines
https://arxiv.org/pdf/1606.02016

Dynamics of transcription-translation networks
https://arxiv.org/pdf/1605.08474

State Based Service Description
https://arxiv.org/pdf/1409.7233

Towards Focus on Time
https://arxiv.org/pdf/1403.1006

Security in Cognitive Radio Networks
https://arxiv.org/pdf/1402.1137

Noise and information transmission in promoters with multiple internal states
https://arxiv.org/pdf/1307.8075

On Quantum Turing Machine Halting Deterministically
https://arxiv.org/pdf/1202.6530

Mutation of Directed Graphs -- Corresponding Regular Expressions and Complexity of Their Generation
https://arxiv.org/pdf/0907.5055

Discrete Baker Transformation and Cellular Automata
https://arxiv.org/pdf/math/0407116

Point Mutations and Transitions Between Cellular Automata Attractor Basins
https://arxiv.org/pdf/nlin/0306033

## 
Embedded System Evolution in IoT System Development Based on MAPE-K Loop Mechanism
https://arxiv.org/pdf/2205.13375

State-Based Behavior Modeling in Software and Systems Engineering
https://arxiv.org/pdf/2205.07018

Integrating User Design and Formal Models within PVSio-Web
https://arxiv.org/pdf/1811.10821

Platform-Based Design Methodology and Modeling for Aircraft Electric Power Systems
https://arxiv.org/pdf/1311.6092

Building on the DEPLOY Legacy: Code Generation and Simulation
https://arxiv.org/pdf/1210.7034
[Linux][command] シェルスクリプト_実行_bash, sh, source, . , exec

# bash, shコマンド
- bash, shコマンドは**サブシェル**を起動してシェルスクリプトを実行する

```terminal
$ bash シェルスクリプト

or

$ sh シェルスクリプト
```

---

# sourceコマンド (`.`)
- sourceコマンドは**現在のシェル**で直接シェルスクリプトを実行する
- 実行権

```terminal
$ source シェルスクリプト

or

$ . シェルスクリプト
```

---

# execコマンド
- execコマンドは**現在のプロセスを指定したコマンドに置き換える**（元のシェルには戻らない）

```terminal
$ exec コマンド
```

* 現在のシェルが**終了**し、指定したコマンドがそのプロセスを置き換える
* シェルスクリプト内で `exec` を使うと、**その後の処理は行われない**
* ログインシェルで使うと、**ログアウト状態**になることもあるので注意

# 各コマンドの違い
| コマンド                                | 処理される場所        | シェルの動作      | ユースケース                        |
| :---------------------------------- | :------------- | :---------- | :------------------------------ |
| `bash script.sh`<br>`sh script.sh`                    | サブシェル（新しいプロセス） | スクリプト終了後に戻る | 新しい環境で安全にスクリプトを実行したいとき          |
| `source script.sh`<br>`. script.sh` | 現在のシェル         | シェル内で直接実行   | 環境変数や設定を**今のシェルに反映**させたいとき      |
| `exec script.sh`                    | 現在のプロセス置き換え    | 元のシェルが消える   | スクリプトに完全に置き換える（**戻らない**）必要があるとき |

# 権限
| 実行方法                               | ファイルの読み取り権 (r) | ファイルの実行権 (x) | ディレクトリの実行権 (x) | 備考                                                                                          |
| :--------------------------------- | :------------- | :----------- | :------------- | :------------------------------------------------------------------------------------------ |
| `bash script.sh`                   | ✅            | ❌          | ✅           | `bash` がスクリプトを読み込んで実行。読み取り権が必要で、実行権は不要。                                                     |
| `source script.sh`<br>`. script.sh` | ✅           | ❌        | ✅           | 現在のシェルに読み込むため、読み取り権が必要。実行権は不要。                                                              |
| `exec script.sh`                   | ✅         | ✅      | ✅           | `exec` は**新しいプロセスを起動せず**に**現在のシェルを置き換える**<br>→ `./script.sh` のように使うのが一般的で、その場合は **実行権が必要**。 |



# Ping-t
- [33974_bash, source, .](https://mondai.ping-t.com/question_subjects/31/question_sessions/32076138/progressing_questions/491415220)
- [4632_source](https://mondai.ping-t.com/question_subjects/32/question_sessions/33502345/progressing_questions/513098351?result=true)
- [4658_exec](https://mondai.ping-t.com/question_subjects/32/question_sessions/33449680/progressing_questions/512330534?result=true)
- [5136_source, .](https://mondai.ping-t.com/question_subjects/32/question_sessions/33449680/progressing_questions/512330528?result=true)
「三角錐の体積の求め方を教えて下さい。」「三角錐の体積を行列式で教えて下さい。」をAI先生に聞きました。


・ChatGPT先生へ(1回目)「三角錐の体積の求め方を教えて下さい。」
・ChatGPT先生へ(2回目)「三角錐の体積を行列式で教えて下さい。」
・ChatGPT先生へあきらめました。「切頭四角錐の体積計算を教えて下さい。」
　切頭四角錐（せっとうしかくすい、英語では「 **truncated square pyramid** 」）の体積は、上面と下面が平行な正方形になっている四角錐の一部を切り取った立体です。

# ChatGPT先生へ(1回目)
#### 質問リスト
・質問リストの追番は無視して下さい。１個ずつです。途中の回答表示は省略しています。
```
# 質問リスト  
1. 三角錐の体積の求め方を教えて下さい。
2. 図を描いて説明して下さい。
3. 上記をsympy のソースコードで。
4. 興味あります。
5. 正面から
6. 保存したい。
7. sympy のソースコードで、積分を使って体積をシンボリックの変数のままで、結果も出力して下さい。
8. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。追番を追加して。本質問も含めて下さい。
```
sympy のソースコードで教えて下さい。
```python
from sympy import symbols, integrate, Rational

# 変数定義
x, y, z = symbols('x y z')
b, h_b, H = symbols('b h_b H', positive=True)  # b: 底辺, h_b: 底面高さ, H: 錐の高さ

# z の上限は錐の高さに比例（x, y による傾斜あり）
# 底面の三角形を x: [0, b], y: [0, h_b*(1 - x/b)] にすると、ピラミッド形になる

# z の上面：線形に減衰するように仮定（高さ H に比例）
z_top = H * (1 - x / b - y / h_b)

# 積分：dz dy dx の順で三重積分
volume = integrate(
    integrate(
        integrate(1, (z, 0, z_top)),
    (y, 0, h_b * (1 - x / b))),
(x, 0, b))

# 結果出力
print("積分による体積（シンボリック） =")
print(volume.simplify())
```
結果（出力）
```
積分による体積（シンボリック） =
b*h_b*H/6
```

# ChatGPT先生へ(2回目)
#### 質問リスト
```
# 質問リスト  
1. 三角錐の体積を行列式で教えて下さい。
2. 上記をsympyのソースコードで。ユーザー定義関数で。計算結果を記号で出力して下さい。
3. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。追番を追加して。本質問も含めて下さい。
```
```python
import sympy as sp
from sympy.geometry import Point3D

def tetrahedron_volume(A: Point3D, B: Point3D, C: Point3D, D: Point3D):
    # ベクトルAB, AC, AD を計算
    AB = sp.Matrix(B - A)
    AC = sp.Matrix(C - A)
    AD = sp.Matrix(D - A)

    # スカラー三重積: AB ・ (AC × AD)
    volume_det = AB.dot(AC.cross(AD))

    # 三角錐の体積 = |スカラー三重積| / 6
    V = sp.Rational(1, 6) * sp.Abs(volume_det)
    return V

# 記号を定義
x1, y1, z1 = sp.symbols('x1 y1 z1')
x2, y2, z2 = sp.symbols('x2 y2 z2')
x3, y3, z3 = sp.symbols('x3 y3 z3')
x4, y4, z4 = sp.symbols('x4 y4 z4')

# Point3Dで点を定義
A = Point3D(x1, y1, z1)
B = Point3D(x2, y2, z2)
C = Point3D(x3, y3, z3)
D = Point3D(x4, y4, z4)

# 体積を計算
V = tetrahedron_volume(A, B, C, D)

# 結果を記号で出力
sp.pprint(V, use_unicode=True)
```
# Gemini先生へ

# copilot先生へ

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

https://qiita.com/mrrclb48z/items/b6351b48e47bcf6265c0

# いつもと違うおすすめです。
### wikipedia
https://en.wikipedia.org/wiki/Tetrahedron#General_properties

>

https://en.wikipedia.org/wiki/Tetrahedron

https://ja.wikipedia.org/wiki/三角錐#体積

>

https://ja.wikipedia.org/wiki/三角錐
【React】スプレッド構文でPropsを渡す際に、条件切り替えを行う方法


まずこのような簡単な文字を表示する `JSX` を考える。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3833190/bd91ce0f-17f0-4944-a285-e38ac1e3da9e.png)


```tsx:page.tsx
export default function Test() {
  const props = {
    style: {
      padding: '20px',
      color: 'red',
    },
  }

  return (
    <div {...props}>
      ラベル
    </div>
  )
}
```

このとき、何らかの変数によってスプレッド構文を渡したり渡さなかったりしたい。
そういう時は、スプレッド構文の中で切り替えるとよい。

```diff_tsx:page.tsx
  export default function Test() {
+   const isError = true

    const props = {
      style: {
        padding: '20px',
        color: 'red',
      },
    }

    return (
-     <div {...props}>
+     <div {...(isError && props)}>
        ラベル
      </div>
    )
  }
```

これに気付くのに少し時間がかかってしまった。
TSは `関数型` やこの `&&` `||` を使いこなせるようになると楽しいね。

`JSX` の `HTML` が思ったより `TypeScript` に寄せられてて感動している。
【React】Github Actions supabaseUrl is requiredの解決方法について

# はじめに
GithubのCIでjestのテストでsupabaseUrl is required.が表示されることについて、こちらの解決方法について記事にします。

次のような表示がActionsに表示されsupabaseの環境変数が読み込めていないようでした。

```
  supabaseUrl is required.

 export const supabase = createClient<Database>(
        |                                     ^
      6 |   process.env.VITE_SUPABASE_URL!,
      7 |   process.env.VITE_SUPABASE_ANON_KEY!
      8 | );
```
<br>
<details><summary>【修正前のコード】</summary>

```github-test.yml

name: Jest use test
on: push

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install dependencies
        run: npm ci

      - name: Run tests with Makefile
        run: make test

```
</details>


# 解決方法
envで環境変数が読み込まれるようにする

```github-test.yml
name: Jest use test
on: push

jobs:
  test:
    runs-on: ubuntu-latest

    env:
      VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }}
      VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_SUPABASE_ANON_KEY }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install dependencies
        run: npm ci

      - name: Run tests with Makefile
        run: make test
```

# 参考
https://docs.github.com/ja/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions


# おわりに
過去にも同じ箇所でつまずいた記憶があり、今回記事にしました。

<br>

[<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3707255/8bfacf61-7d8d-6d27-cb07-98d1f8f27fcd.png"  width=100%>](https://projisou.jp)
Incorrect actor executor assumption

global actorを用いて実装していたところ上記のエラーが出た。
調べてみるとこのエラーが出る状況は色々あるようで、その中の一つが以下の例なのでもし参考になればと思い投稿。

状況としては以下のように preconcurrencyなAVFoundationやSpeechを用いていたため、actorに隔離する必要があった。
また、値を特定のactorに隔離して監視したい要件があっため global actorを利用することにした。

``` Swift
import AVFoundation
import Speech

@globalActor
public struct SpeechActor {
  public actor ActorType {}
  public static let shared: ActorType = ActorType()
}

@SpeechActor
public final class SpeechRecognizer {

}
```

そして、このglobal actor内の以下の部分で毎回クラッシュした
``` Swift 
func prepareEngine() throws -> (AVAudioEngine, SFSpeechAudioBufferRecognitionRequest) {
    let (audioEngine, request) = (AVAudioEngine(), SFSpeechAudioBufferRecognitionRequest())
    request.shouldReportPartialResults = true
    request.requiresOnDeviceRecognition = false
    let audioSession = AVAudioSession.sharedInstance()
    try audioSession.setCategory(.playAndRecord, mode: .measurement, options: .duckOthers)
    try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
    let inputNode = audioEngine.inputNode
    let recordingFormat = inputNode.outputFormat(forBus: 0)
    inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, _) in
      request.append(buffer)
    }
    audioEngine.prepare()
    try audioEngine.start()
    return (audioEngine, request)
  }
```
エラーは`Incorrect actor executor assumption`と表示されていた
そもそもここにある、audioEngineやSFSpeechAudioBuffer...などはSendableに準拠できない参照型(reference type)のインスタンスであり、内部で他のactor等が使われていた場合に値が別のactorに隔離されているとその値を取得できないということになりかねない（あくまでも予想）

調べてもよくわからなかったが、global actorに隔離されていることがまずいのであれば nonisolatedで呼んでみれば良いでのはと試したところうまく行った。
つまり
``` Swift 
  nonisolated static func prepareEngine() throws -> (AVAudioEngine, SFSpeechAudioBufferRecognitionRequest) {
    let (audioEngine, request) = (AVAudioEngine(), SFSpeechAudioBufferRecognitionRequest())
    request.shouldReportPartialResults = true
    request.requiresOnDeviceRecognition = false
    let audioSession = AVAudioSession.sharedInstance()
    try audioSession.setCategory(.playAndRecord, mode: .measurement, options: .duckOthers)
    try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
    let inputNode = audioEngine.inputNode
    let recordingFormat = inputNode.outputFormat(forBus: 0)
    inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, _) in
      request.append(buffer)
    }
    audioEngine.prepare()
    try audioEngine.start()
    return (audioEngine, request)
  }
```
こうすると上記のクラッシュに合わずに済んだ。

以上
爆速でGoogle Cloud RunでAPI作成

Google Cloudの設定は、もちろんウェブのUIを使って行うことができて、見落としとかもしにくいのでおすすめなのですが、定型的に行うのならばgcloudコマンドを使ってさくっとやりたいものです。ということで、２分で初期設定しちゃいましょ。

## プロジェクトの作成と課金の有効化

gcloudコマンドで、とにかくプロジェクト作って課金を有効化。

``` shell
#!/bin/bash
set -Ceu
config_name="config_name"
project_name="project_name"
account_id="gcloud billing accounts list"
gcloud config configurations create $config_name
gcloud config configurations activate $config_name
gcloud auth login
gcloud projects create $project_name
gcloud config set project $project_name
gcloud billing projects link $project_name --billing-account=$account_id
```
上の３つの変数を適切に設定する。アカウントIDは、

``` shell
gcloud billing accounts list
```

コマンドで調べておく。

続いて必要なサービスを有効化する。

``` shell
#!/bin/bash
set -Ceu
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable artifactregistry.googleapis.com # Buildpacks がイメージを保存するために必要
gcloud services enable iam.googleapis.com # IAM ポリシー管理に必要
gcloud services enable cloudresourcemanager.googleapis.com # プロジェクト情報取得などに必要
gcloud services enable secretmanager.googleapis.com # GitHub 接続トークン保存に必要
```

これで初期設定完了。

## ソースコードの準備。

今回はPythonで書きますが、他の言語でも似たようなものでしょう。

* Procfile
* requirements.txt
* main.py

たったこれだけ、これが最低限です。

``` plaintext:Procfile
# Procfile の例 (main.py 内の 'app' という Flask/WSGI アプリケーションオブジェクトを起動)
web: gunicorn -b :$PORT main:app
```

``` plaintext:requirements.txt
Flask==3.1.0
gunicorn==23.0.0
requests==2.32.3
```

こちらはたった３つ。バージョンは適当に調べてくださいませ。

``` python:main.py
import signal
import sys
from types import FrameType

from flask import Flask


app = Flask(__name__)


@app.route("/")
def hello() -> str:
    return "Hello, Google Cloud Run! Please enjoy!"


def shutdown_handler(signal_int: int, frame: FrameType) -> None:
    # Safely exit program
    sys.exit(0)


if __name__ == "__main__":
    # Running application locally, outside of a Google Cloud Environment

    # handles Ctrl-C termination
    signal.signal(signal.SIGINT, shutdown_handler)

    app.run(host="localhost", port=8080, debug=True)
else:
    # handles Cloud Run container termination
    signal.signal(signal.SIGTERM, shutdown_handler)
```

一応ローカルでもテストしてみましょう。

``` shell
python -m venv venv
. ./venv/bin/activate
pip install -r requirements.txt
python main.app
```

ローカルホストでサーバが立ち上がりましたか？立ち上がればこれでOK！

では、デプロイしてみましょ。

``` shell
#!/bin/bash
set Ceu
service_name=hoge_service
gcloud run deploy $service_name --region=asia-northeast1 --source=.
```

時間かかりますがそのうち終わります。これで完成！ここから本格的に開発を始めましょう。
Atcorder 競プロ典型 90 問 013 - Passing（★5）

# [Atcoder 競プロ典型 90 問 013 - Passing（★5）](https://atcoder.jp/contests/typical90/tasks/typical90_m)  
問題文は👆を確認してください

# 導入
atcoderで精進してますが、  
どこかにアウトプットしたかったので、qiitaに書くことにしました。  
ACしてから載せるようにしてますが、考え方が至っていない点があればご指摘頂けると幸いです。  
また、誰かの参考になると嬉しいです。

# 使用しているアルゴリズム

## ダイクストラ法（Dijkstra法）

- 開始地点（`start`）を起点として、各地点への最短経路（`dest`）を返却する
- 開始地点から繋がっている無向辺を全て調べて、隣接するノードに最短コストで到達できるかをチェックする
- 既に `dest[to]` に格納されている最短距離が、今のルートよりも短い場合はスキップ（枝刈り）
- `heapq`（優先度付きキュー）を使用して、コストが小さい順に探索を進めることで、全体の計算量を  
  `O((N + M) log N)` に抑えている
- 素朴に `cost` 昇順にリストソートしていたら `O(N^2)` 近くになって間に合わないため、`heapq` による改善は必須

# 解法のポイント
この問題は、グラフ上で「各都市を中継点としたときに1番目の都市からN番目の都市へ行く最短距離」を求めるものです。

ポイントは以下の通りです：

- **無向グラフの表現**：`bectors` という辞書に、各都市から繋がっている隣接都市と距離を記録します。これは `defaultdict(list)` を使って構築。
- **ダイクストラ法の利用**：開始都市（1番目）から各都市への最短距離、およびゴール都市（N番目）から各都市への最短距離をそれぞれ計算します。
- **中継点を全探索**：都市 `k` を経由したときの合計距離は `dest1[k] + destN[k]` になります。これを全都市について計算して出力すれば良いです。
- **計算量**：`O((N+M) log N)` が2回なので、十分に許容範囲内です（N, M ≤ 10^5）。

# ACサンプル
```python
def dijkstra(bectors,start,N):
  import heapq
  
  # 各ノードまでの最短距離を無限大で初期化
  dest = [float('inf')] * N
  dest[start] = 0
  
  # 優先度付きキュー（コスト昇順）
  q = []
  heapq.heappush(q,(0,start))
  
  while q:
    cost,p = heapq.heappop(q)
    
    # 既に最短距離より長い場合はスキップ
    if dest[p] < cost:
      continue
    
    # pから行ける隣接ノードを全探索
    nexts = bectors[p]
    for m,to in nexts:
      if dest[to] > cost + m:
        dest[to] = cost + m
        heapq.heappush(q,(cost + m,to))
  
  return dest

from collections import defaultdict
N,M = map(int, input().split())
bectors = defaultdict(list)

# 無向グラフの構築（0-indexed）
for _ in range(M):
  a,b,m = map(int, input().split())
  a,b = a-1,b-1
  bectors[a].append((m,b))
  bectors[b].append((m,a))

# 1番目の都市（0）から各都市までの最短距離
dest1 = dijkstra(bectors,0,N)

# N番目の都市（N-1）から各都市までの最短距離
destN = dijkstra(bectors,N-1,N)

# 各都市kを経由したときの最短距離を出力
for i in range(N):
  r = dest1[i] + destN[i]
  print(r)
```

# リンク
[ACサンプル集(アルゴリズム逆引き)](https://www.notion.so/motonao/1cc8aca4381b80f39713ddb52fa85e8f?v=1cc8aca4381b80519654000c236bb8d6&pvs=4)
FramePack使ってみた

# framepackってなに？

動画生成できるみたい
https://note.com/aonekoss/n/n8eb9260f5be9?sub_rt=share_pw


# 結論

https://x.com/ma7ma7pipipi/status/1913511944428065064

https://x.com/ma7ma7pipipi/status/1913522559418868106

はい、できますね。

# エロいけるの？

エロもいけます。
ただし、服を脱げという命令ではなく、最初からエロいのをアップしておきましょう。
チーム開発dev2！：前回の反省点、どう活かせたか振り返ってみた

## はじめに
人生で２回目のチーム開発が終わりました。

**前回の反省点をどう活かせたのか、、**

を、振り返ろうと思います。もしこれからチーム開発に初めて挑戦する人が読んでくれたら、ちょっとでも役に立てたら嬉しいです。

 前回の経験記録はこちら👉
 
https://qiita.com/poppukon4628/items/f6ff0eed376367533bd9#try%E8%A9%A6%E3%81%99%E3%81%B9%E3%81%8D%E6%96%B0%E3%81%97%E3%81%84%E3%82%A2%E3%83%97%E3%83%AD%E3%83%BC%E3%83%81

## なぜ書こうと思ったのか
前回のチーム開発は、**初心者同士かつお互い初めてのチーム開発**という状況でいろんなことが手探り状態でした。やりたい気持ちはあっても、どう動けばいいのか分からない…。そんな中で浮かび上がった反省点が4つありました。

今回はそれらにどう向き合い、どう改善できたのかを残しておきたいと思います。

## 問題点と対応
### 役割分担の不明確さ
前回は、僕がテーマを決めたことで責任を感じすぎて、バックエンドもフロントも1人で抱えてしまいました。その結果、進捗をうまく共有できず、他のメンバーも「自分は何をすれば？」と戸惑わせてしまっていたと思います。

今回は、事前にAPI仕様をしっかり設計し、それを軸にバックエンドとフロントを分担。さらに、タスクも「1時間単位」で細かく切り出し、お互いの作業内容を共有しました。これにより、作業が前に進んでいく実感もあり、自然と会話も増えてきたのが印象的でした。

### ユーザー視点の不足
前回は「とにかく動かすこと」に夢中になってしまい、ユーザーがどう使うかまで頭が回っていませんでした。

今回開発したのはFXの学習アプリ。実際にプロトタイプを見せてみると、「レバレッジって何？ どう使えばいいの？」という声があり、説明文やUIの導線を見直すきっかけになりました。

**自分の“常識”は、他人の“非常識”かもしれない。**この視点をもつことと、そのすり合わせは重要だということを認識できました。

### GitHub運用の課題
前回は、Gitの基本操作しか分かっておらず、とにかく「コンフリクトしないように」ビクビクしながらの運用で、開発効率が下がってしまっていました。

今回は、事前にメンターさんからgit cherryの使い方を教わり、チーム開発前に実際に手を動かして練習。それだけでも不安が大きく減り、「コンフリクト＝怖い」から「起きたらちゃんと対応すればいい」という前向きな気持ちに変わりました。

実務を想定すると、複数人が同時に作業を行うことため、コンフリクトが発生する可能性が高いです。また、独学ではコンフリクトの解消スキルを身につけるのも難しいと思います。その解消スキルを学べたことは大きいと思います。

### 技術不足
前回は、他チームの完成度に圧倒され、「自分にはまだ早いのかも…」と感じたこともありました。

でも今回は、「少しづつ前に」と気持ちを切り替え、わからないことはすぐに調べたり、素直に人に聞いたり。できることを一つずつ積み重ねていくという姿勢を意識しました。

チームの中で「これは任せて」と言える範囲が少しずつ増えてきたことで、自信にもつながってきました。

## 新たな反省点
チーム開発を通じて見えてきたのは、「技術力」と同じくらい「伝える力」「巻き込む力」が大切だということ。

レビューのやり取り、ミーティングでの進捗報告、方向性のすり合わせ…。エンジニアは手を動かすだけじゃなく、チームで成果を出すためのコミュニケーション力が求められる。その重要さを、ようやく体感できるようになってきました。

## 最後に
今回の開発を通じて、前回の自分よりも「チームの一員としてどう動くべきか」を考えられるようになった気がします。

まだまだ未熟ですが、「学んだことをすぐに実践して、次に活かす」サイクルを大事にしていこうと思います。

ここまで読んでくださって、ありがとうございました！
IntelliJ が遅いときのチェック項目

なんかいもインターネットに上げられてるけど、意外に日本語でまとまったものが無い気がする。。。

久しぶりに IntelliJ インストールしてなんか JUnit で書かれたユニットテスト実行すると、なんかクソ遅くてタダのテスト実行に3秒ぐらいかかることがあります。（今日）

毎回、『PC セットアップする度にまたこれだよ。。/etc/hosts に設定しないといけないやつなんだっけ？』となってるので書いておきます。

Before/After 比較
====

* 初期設定：
* 設定後：

レギュレーション
----

以下のコードを書いて、1回 JUnit 実行後に、少し編集して Ctrl + D で再実行して結果が見える前の体感時間。


|   |  |note|
|---|--|----|
|設定前| 6s||
|Runner を IntellJ に| 1s~7s|何故かたまに詰まることがある|
|/etc/hosts に自ホスト名記入| < 1s （安定）|これが必要|


設定その1) Runner を IntelliJ に
===
言わずと知れたやつ。（ただ、最近だと Gradle のままでも早い？ いやでもそんなの知らん

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52956/7df4716f-22f3-4816-b9c3-c99556948a5f.png)


設定その2) `/etc/hosts` に自ホスト名を書く
===

Before
---

もう元がどうなってるか解らないですがこういうものの場合

```
127.0.0.1	localhost
```

`hostname` コマンドの結果が、`my-computer` だったとしたら以下の用に書き換えておきます。

```
127.0.0.1	localhost  my-computer my-computer.local
::1         localhost  my-computer my-computer.local
```

----

効果があるかどうか分からないやつ：その1）
===

最小サンプルでは変わらないと思いますが、IntelliJ に割り当てるメモリは増やしておきましょう。
（自分は 16GiB ぐらいを割り当てる事が多い（多すぎる気はするけど））

効果があるかどうか分からないやつ：その2）
===

ありとあらゆる 起動オプションに
`-Djava.net.preferIPv4Stack=true`
は入れてます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52956/fa53b9ab-877b-47ac-8856-eba13221293d.png)


効果があるかどうか分からないやつ：その3）
===
他のやつずいじｋ
FreeBSD 12Rのpkgが消されてました

久しぶりにFreeBSD/元祖amd64をいじったところ、pkgが消されてしまいpkgのinstallができませんでした。

FreeBSDが厳しいのは分かりますが、同じインストール状態を作れなくなってしまい、現在の14でも将来的に同じ事が起きFreeBSD離れをいっそう助長してしまうのではないでしょうか。

portsからのビルドも試しましたがautoconfはperlでこけてました。

rubyはautoconfでビルドしているので、perlが無いとビルドできないんですね。始めて知りました。

12でpccardなどいろいろ消したので、取っておいてほしかった。。。

13もじきに消されると思いますが、installしたホストなりjailなりがあれば/var/cache/pkg/を元に再構築できるかもしれません。

結局12.4Rのports.tgzを展開して必要なpkgを自力でビルドしました。このホストは12.3をインストールするとパニックするので12.2のままです。portsのビルドでWARNINGが出るのでALLOW_UNSUPPORTED_SYSTEMをsetenvしてmakeしました。WARNINGが表示される時少し間があるのは嫌がらせだと思います。

cmakeはoptionの依存が激しいので、すべて外しました。

そもそもportsって厳密なホストバージョンの確定はなくて、メジャーバージョンのチェックくらいで良いと思うのだが。同一メジャーバージョンで再コンパイルが必要になるようなシステムコールの変更は行うべきではない。

12以降は大きくいじられているので、以前のように気軽にfreebsd-updateすると破滅的な状況になることがあります。

なので一度作った環境はできるだけいじらないほうがいいです。

FreeBSD12/mipsのカーネルは独自路線でいじり続けます。

https://github.com/ZRouter/freebsd-src/tree/zrouter_yamori813
【react-testing-library】要素がないことを確認したい

# はじめに
テストコードを書いていて、要素の存在を確認するために、なんでもかんでも`findByTestId`のクエリを使用していました。
要素がないことを確認する場合、`findByTestId`が使えなかったため、理由と対処法についてまとめました。

# 問題
レンダリングした画面に要素がないことを確認するテストコードを書きたい。
`findByTestId`で存在しない要素を指定すると、`Unable to find an element`でエラーが発生、テストとしてはFAILになる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993509/1bd4679d-a8ee-4a3b-8518-c2e201ed4b4d.png)


```tsx
import { render, screen, waitFor } from "@testing-library/react";
import App from "../App";
import { GetAllStudyRecords } from "../lib/study-record";
import userEvent from "@testing-library/user-event";

jest.mock("../lib/study-record", () => ({
  GetAllStudyRecords: jest.fn(),
}));

describe("App", () => {
  it("データが表示されないことを確認", async () => {
    // DBから値を取得(空データを返す)
    (GetAllStudyRecords as jest.Mock).mockResolvedValue([]);

    render(<App />);

    // 表示データ(tbodyの行)がないことを確認
    expect(await screen.findByTestId("table-row")).not.toBeInTheDocument();
  });
});
```


# 解決方法
### queryByを使う

`findBy`は要素を取得できるまで待機し、取得できない場合はエラーを投げます。
そのため、要素がないことを確認するには適していません。

`queryBy`は要素がない場合、nullを返し、エラーは発生しません。
そのため、要素がないことを確認するには適しているといえます。

```diff_tsx
import { render, screen, waitFor } from "@testing-library/react";
import App from "../App";
import { GetAllStudyRecords } from "../lib/study-record";
import userEvent from "@testing-library/user-event";

jest.mock("../lib/study-record", () => ({
  GetAllStudyRecords: jest.fn(),
}));

describe("App", () => {
  it("データが表示されないことを確認", async () => {
    // DBから値を取得(空データを返す)
    (GetAllStudyRecords as jest.Mock).mockResolvedValue([]);

    render(<App />);

+   // レンダリングされたことを確認
+   expect(await screen.findByTestId("title")).toBeInTheDocument();

    // 表示データ(tbodyの行)がないことを確認
-   expect(await screen.findByTestId("table-row")).not.toBeInTheDocument();
+   expect(screen.queryByTestId("table-row")).not.toBeInTheDocument();
  });
});
```

# getBy,findBy,queryByの違い

https://testing-library.com/docs/dom-testing-library/cheatsheet/#queries

**ドキュメントより引用**
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993509/12a640e6-661d-4dfd-b406-efa4e11c0693.png)

* **getBy** : awaitしない、一致するものがないときは、エラーをthrowする
* **findBy** : await**する**、一致するものがないときは、エラーをthrowする
* **queryBy** : awaitしない、一致するものがないときは、**null**をthrowする

# おわりに
getBy、findBy、queryByを適材適所で使いこなせるようになりたいです。

# 参考
https://testing-library.com/docs/dom-testing-library/cheatsheet/#queries
Received `true` for a non-boolean attribute `ページが見つかりません`.

# はじめに
コンポーネントの呼び出しで、なぜかエラーが出てしまいました。
しょうもないミスでしたが、戒めのために投稿します。

# 問題
ルーティングテーブルに一つも当てはまらないURLがユーザから有力された場合に「404ページ」を返すという処理を書いていました。
```Page404.jsx
export const Page404 = () => {
  return (
    <div>
      <h1 ページが見つかりません />
      <Link to="/" />
    </div>
  );
};
```

```Router.jsx
...
<Route path="*" element={<Page404 />}></Route>
...
```
コンポーネントの呼び出しは合ってるよな...と思っていたところ
ココがおかしいことに気づきました。```h1``` タグに引数を渡しているような感じになってしまっています（笑）
```Page404.jsx
<h1 ページが見つかりません />
```

# 解決方法
こうしたら、エラーは出なくなりました。
```Page404.jsx
<h1>ページが見つかりません</h1>
```
# おわりに
しょうもないミスでしたが、このエラーが出るときは意図していない引数の渡し方をしている状況だと思います。
MacBookのIPアドレスを固定する

## 初めに
MacBookをサーバーとして使う場合、IPアドレスが都度変わると面倒なため、IPアドレスは固定にしましょう。

## 環境
OSはSonoma 14.7.4です。
ただし違うバージョンでも、macOSであれば手順はほとんど同じだと思います。

## やり方
早速やり方です。

1. システム設定 -> ネットワーク -> 使用している接続（Wi-Fi）の 「詳細…」をクリック
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931306/cc007fee-97f4-4b6a-8ab3-81836f046b95.png)
　
  
2. TCP/IP -> IPv4の構成 を「DHCPサーバを使用(アドレスは手入力)」に変更
　
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931306/23e91cee-a6f2-4ac3-9f8b-86fc1954b6b3.png)
　
3. IPアドレスを任意のものにする
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931306/6d43a7ec-1803-448e-99dd-e63e3647001b.png)
　
**IPアドレスについて**
IPアドレスはDHCPの割り当て範囲外にしましょう。
割り当て範囲はルーターによりますが、だいたいデフォルトは
`192.168.0.2` ～ `192.168.0.100` または `192.168.0.199`らしいです。


:::note info
結論
よく分からなければ`192.168.0.200`で試してみてください。
設定する前に`ping`コマンドで応答がなければ問題なく使えるでしょう。
```:bash
ping 192.168.0.200
```
:::
Git 運用 ブランチ運用ワークフロー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/29ee77fc-b5ea-4677-971a-41c3f5b75925.png)


## はじめに

前回の「[Git 運用 PRのワークフロー。PRレビューは"PRの記載粒度"が重要！](https://qiita.com/magic10r/items/f456a02423c7f81b704d)」に続き、Git 運用についてまとめです。
今回は ブランチのワークフローをまとめます。

WIPのブランチもあると便利と、最近体感しました。

## 主要ブランチ

### メインブランチ

- **`main`**: 
  - リリース可能な状態を維持
  - 本番環境へのデプロイに使用

### 環境別ブランチ

- **`develop`**: 
  - 開発作業のマージ先ブランチ
  - 開発環境へのデプロイに使用
- **`staging`**: 
  - develop からマージ
  - 検証環境へのデプロイに使用
- **`prod`**: 
  - staging からマージ
  - 本番環境へのデプロイに使用
  - mainの代替。main を本番用に使用する場合はこのブランチを使用しない

## 作業用ブランチ

- 命名規則:
  - 英小文字のみ使用
  - 単語はハイフン(`-`)で区切る
  - Issue番号を含める

- **`feature/#<Issue番号>-<説明>`**: 機能開発ブランチ
  ```
  # 例
  feature/#7-add-user-authentication
  ```
  - 対象:
    - 新機能開発
    - ドキュメント修正
    - ユニットテスト追加
    - フォルダ構成変更
    - バッグ対応以外の修正

- **`bugfix/#<Issue番号>-<説明>`**: バグ修正ブランチ。
  ```
  # 例
  bugfix/#12-fix-login-error
  ```
  - 対象:
    - 不具合対応

- **`release/<バージョン番号>`**: リリース準備のためのブランチ。
  ```
  # 例
  release/v1.2.3
  ```

## 一時的な作業用ブランチ

- **`wip/<name>-<short-description>`**: 一時的な作業のためのブランチ
  - 使用目的
    - ブランチのプッシュのテスト
    - 個人での一時的な検証や修正作業
  - 運用ルール
    - `<name>` でブランチの作成者の名前を記入する。このブランチは作成者のみ使用する
    - このブランチからは PR を作成しない
    - 作業完了後速やかに削除する
  - 注意点
    - ブランチを整理時に、これらのブランチは削除対象となる

## ブランチ運用ルール

1. 開発の流れ:
   ```
   feature/bugfix → develop → staging → prod(main)
   ```

2. レビュー要件:
   - `feature/bugfix` ブランチはPRを通して `develop` にマージ
   - `develop` から `staging` へは検証後にマージ
   - `staging` から `prod(main)` へは承認後にマージ

3. 命名時の注意点:
   - 分かりやすい説明を心がける
   - 一貫性のある命名規則を守る
   - Issue番号は必ず含める

## ブランチ削除ポリシー

- feature/bugfix ブランチ: マージ後に削除
- release ブランチ: リリースのタグ付けが完了した後に削除
- 環境ブランチ（develop/staging/prod）: 永続的に保持

## おわりに

このブランチを運用するまでは、WIP ブランチは作ったことが無かったのですが、結構便利ですね。
WIPとつけると削除しやすい（意味的にも、コマンド的にも）です。
今のところ作業ブランチを最小種類にしてますが、コミットと同様に５種類ぐらいまでは増やしてもいいかもしれませんね。

---
Amazon Rekognitionハンズオン!!

## 内容
・趣旨目標
・使用するサービス
・参考サイト
・ハンズオン開始

## 趣旨内容
人工知能、機械学習に触れることで知見を増やし、業務などに活かしていきたい。


## 使用するサービス
Amazon Rekognition 
イメージやビデオ内のラベル、オブジェクト、概念、シーンを検出します。
https://docs.aws.amazon.com/ja_jp/rekognition/

## 参考サイト

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-AIML-2022-confirmation_003.html

## ハンズオン開始
オブジェクトとシーンの検出を体験します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/e1b9cba2-fa95-6bf0-7114-5ef97904043f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/a1e1c556-111e-bb3c-32f4-e9c7cb24eda5.png)
車の画像をドロップしたのですが、人間ではわからない範囲の要素を検出していますね。

顔の比較も行ってみます。
犯罪の抑止力になると良いですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/d1b3cab9-c467-2fc2-dc19-7ac760e9f319.png)


保存済み動画分析を行ってみます。
公式さんのハンズオン動画をアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/4376eaa3-def1-ec06-4441-b2f579c174ad.png)
ここで顔なんか認識されたら、追跡できそうですね。最新技術は計り知れないですね。


リソースを削除します。
動画などをアップロードした際にできたS3を削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/bcec8d0c-ecf4-4f25-916b-2eae76056943.png)
空にしてから、削除です。

最後に率直に思ったことは面白いということですかね(笑)楽しんでも良いわけであって、悪く使わなければ良いのです。子供の日記になってしまったｗ

では！
2025/4/19　応用技術進捗どうですか③

## はじめに
初めてIPA資格を受けるので、そこまでの軌跡を記録しようと思ってます。
第３弾です。終わったらどこかでまとめますね。
[①進捗記事](https://qiita.com/gravellander/items/1ba2f111c43728b6bf16)
[②進捗記事](https://qiita.com/gravellander/items/3c5e7abb56de0e90dc32)


## 進捗を伝える前に皆さんに言いたいこと

まず、みなさんに１つ言いたいのは
<strong>不合格　＝　悪い</strong>　ことではないです。
不合格は次へのステップに続く、１つの努力の結果です。次につなげてください。
(自分の保身かもｗ)別に不合格になったところで、命を落とすわけでもないので。

<strong>　力は抜いて、手は抜かず</strong>　　でがんばりましょう

ネット上では、<strong>成功例</strong>ばかり目にして　合格するのが当たり前と思ってしまいがちですが

そうではないです。
３回、４回不合格して５回目でやっと合格する人だっていますのでご安心を。

むしろ何回も不合格を受けた末に、なんとか合格した。
そういう人の体験記を僕は見たいです。



## 進捗 全期間 応用技術過去問道場 午前
![bandicam 2025-04-19 17-36-16-994.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3740433/53261dbd-d288-4b9b-b000-102cb651856a.jpeg)

計算？アルゴリズム？何それ？わからん！　
から　３か月ぐらいでここまで正答率を伸ばしました。

4500問程解きました。もうやり切りました。

後は結果次第です。

## 進捗 全期間 応用技術過去問道場 午後

![bandicam 2025-04-19 17-36-00-349.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3740433/6ca986b0-661f-474d-8b54-b638143059ee.jpeg)

進捗はこんな感じです。直近１０年分を３週ぐらいしました。
ここも、思い残すことはありません、後は結果次第です。
(システム監査22%になっているのは、回答中に間違えて一番下の終了ボタン押しました())

## あとがき
この解いた数は　あくまでも　目安　と思ってください。
この数やらなくては受からない！というわけないです。
僕は容量が悪いので　ひたすら解きながら解説を読んでました。

あと　<strong>運</strong>　も　あります。

その日の問題が自分にアジャスト　するかは当日にならないとわからないので

だから、僕は思い残すことなく　当日　全力でやって
落ちる　なり　受かる　なり　して　次の資格勉強へ　つなげようと思います。


自己採点はしません。結果だけ見ます。

てことで、みなさん4/20頑張りましょう！！！

結果が出たら、次の応用技術者受験者のために、僕の経験とかを描きたいと思います。
アルゴリズムとデータ構造：計算量とオーダー記法

## 参考文献
大槻兼資 著, 問題解決力を鍛える！アルゴリズムとデータ構造, 講談社, 2020
## 計算量
### 計算量とは何か
計算量には以下の２つがある
* 時間計算量
    計算時の処理時間
* 領域計算量
    計算時のメモリの使用量

また、時間計算量には以下の2つがある。
* 最悪時間計算量
    最悪のケースにおける時間計算量
* 平均時間計算量
    全てのケースにおける平均的な時間計算量

ここでは**計算量=最悪時間計算量**として扱う。

## オーダー記法
（ランダウの）オーダー記法は最悪時間計算量を簡潔に理解する手法である。

(工事中)

## 結論
オーダー記法は計算量において最も影響力の高い項に着目して、
アルゴリズムの性能を評価する手法だと感じた。