OmniAICreator/Qiita-1.07M huggingface dataset:
DBのパフォーマンスには何が関係しているのか？

## はじめに 
仕事で普段からDBを使っていますが、クエリの実行速度を決める要因はなんなんだろう？と気になったので書籍を使って勉強してみました。
勉強してわかった、パフォーマンスに関係している要素を整理します。
## 結論
- DBのパフォーマンスにはソフトウェアの面とハードウェアの面両方が関わっている
- ソフトウェアではクエリ評価エンジンを使って適切な実行計画を作成できるかどうかが関係している
- ハードウェアではいかに効率よくメモリを使えるかが関係している
## ソフトウェアの影響
ソフトウェア面では、DBMSに存在する**クエリ評価エンジン**とそれが作成する**実行計画**がパフォーマンスに大きく影響しています。
### 実行計画
実行計画はどのようにデータにアクセスするかという計画を指します。
実行計画は人間でも読めるような形で表現され、これを元にパフォーマンスのチューニングを行うことが可能です。
例えばMySQLであれば以下のようにすると実行計画を確認することができます。
```sql
EXPLAIN SELECT * FROM hoges
```
※実行計画の読み方についてはまだ勉強中なので、まとまったらまた記事にします。
### クエリ評価エンジン
クエリ評価エンジンは、ユーザーが送信したSQLを解析し、最適なデータの取得方法を決定するDBMSのモジュールです。
データの取得方法は複数作成され、最終的に最もコストが低い方法が採用されます。
この採用された取得方法が実行計画となります。
クエリ評価エンジンの内部はさらに様々なサブモジュールが存在しています。
ここではサブモジュールの一つである**オプティマイザ**と**カタログマネージャ**について記載します。
#### オプティマイザ
オプティマイザは先ほど述べた実行計画を作成するためのサブモジュールです。
カタログマネージャから統計情報を取得し、それを元に複数の実行計画が作成されます。
#### カタログマネージャ
カタログマネージャにはオプティマイザが参考にするための統計情報が保存されています。
統計情報とはインデックスやテーブルに関するメタ情報です。
この統計情報はテーブルの情報が更新されるたびに情報が古くなってしまうため、更新が必要です。
DBMSによってはデフォルトで更新処理後に統計情報が書き換わるものもあります。
## ハードウェアがDBパフォーマンスに与える影響
ハードウェアの影響として、**メモリ**と**ストレージ**の関係があります
メモリとストレージには、それぞれトレードオフがあり、以下のような違いがあります。
||読み込み・書き込み速度|コスト|容量|永続性|
|---|---|---|---|---|
|メモリ|速い|高い|小さい|ない|
|ストレージ|遅い|小さい|大きい|ある|

### メモリの役割
前述のようにメモリは高コストな代わりに高速に書き込みと読み込みが行えます。
そのため、メモリにはデータキャッシュやログバッファ、ワーキングメモリなどの領域を確保して実行速度を上げています。
#### データキャッシュ
データキャッシュは名前の通り、DBに存在するデータをキャッシュしている領域です。
ここにデータが存在すればストレージを検索することなくデータを返すことができるため検索のスピードが上がります。
#### ログバッファ
ログバッファはデータの更新処理の際に使用します。
更新処理の際に、一旦ログバッファに更新情報を溜めてから非同期で更新することによってユーザへのレスポンスを速くしています。
#### ワーキングメモリ
ワーキングメモリはSQLの実行時にソートやハッシュなどの実際の処理を行う際に使用するメモリ領域です。
この領域はパフォーマンスにおいて重要な役割をしていて、ワーキングメモリの容量が不足すると一旦ストレージのTEMP領域という領域を使って処理を続行します。
その結果、ストレージとのデータの出し入れが起きている状態になり、処理に時間がかかってしまいます。
## まとめ
今回はDBのパフォーマンスに関連している要素を俯瞰して整理してみました。
今後は実行計画の読み方や、具体的なパフォーマンスの改善方法などを深掘りしてみたいと思います。
少しでも参考になれば幸いです！
## 参考
https://gihyo.jp/book/2015/978-4-7741-7301-6
文章の組み立て方

# ◆この記事の目的
スムーズに理解できる文章の組み立て方を理解する

# 目次
▼[説明対象と情報の整理](#説明対象と情報の整理)
▼[伝える目的と伝える相手を明確にする](#伝える目的と伝える相手を明確にする)
▼[共通基盤を作る](#共通基盤を作る)
▼[論理的な組み立て方](#論理的な組み立て方)

# ▼説明対象と情報の整理
## 説明対象を理解する
- 対象はどのような事物なのか
例）目的
　　内容
　　対象範囲
　　時間・場所
- 類似の事物との位置付け
- 読み手にとってどんな意味を持つのか
## 読み手を理解に導くための情報を整理する
### 対象を理解した情報を分類整理する
- 分類観点
- 時系列
- 重要度
- 難易度
- 関連度
- メイン、サブ
- 正常、異常
- 必要、不要

※きれいに書くことは意識せず、とにかく書き出すことが重要

# ▼伝える目的と伝える相手を明確にする
## 伝える目的を明確にする
目的が多いと内容や表現が中途半端なものになる。
主な目的を１つに絞り込んで、その他は副次的目的とする。

例）

    ＜主な目的＞
    オープンしたばかりのスーパーを知ってもらう
    ＜副次的目的＞
    スーパーの理念と歴史を伝える
    安全性を伝える
    特売日時を告知する

※＜主な目的＞は必ず達成させ、＜副次的目的＞は可能な範囲で達成する位置付けにする。

## 伝える相手を明確にする
以下２つのステップに分けるとよい

１, 読み手はどの層か
 年齢、性別、居住地域、職業、職種など

２, 読み手はどのような特徴があるか
 どのような知識を持っているか、読んだ後どのような行動をするか

# ▼共通基盤を作る
「共通認識を形成する流れ」をコンテキスト（日本語では文脈）と呼ぶ。
書き手と読み手の間には情報量と知識量にギャップが存在している。そのため、読み手のストレスを軽減するために、簡単な用語解説などの作成も検討する。

# ▼論理的な組み立て方
以下、意味のある順に並べる

- 概要から詳細へ
- 既存の事柄から新規の事柄へ
- 重要な事柄から
- 相手が知りたい事柄から
- 作業や手順に沿って

# 参考文献
[日本語スタイルガイド（第3版）](https://jtca.org/learn-tc/publication/guide_jsg/)
ChatGPTを使用してmermaidの知識がなくてもER図を作成する方法

# はじめに
以前以下の記事で、mermaidという記述を用いることでUMLやER図をグラフィカルに表現することができる記事を書きました。

私は現在、個人開発で友人と遊べるWebアプリを作成しており、ゲームルームとそこに参加するユーザーの関係をER図で表現したいと思っています。

個人開発を行うにあたって、実際どのようにmermaidを使用しているかをお伝えしたいと思います。

https://qiita.com/Marron-chan/items/48701aee4cf279f8b7f9

# ＥＲ図の定義

今回作成するWebアプリに関して、要件定義を行い以下のようにデータを扱うことが決まりました。

* 必要なテーブルは「ユーザー」と「ルーム」
* 「ユーザー」は複数のルームに所属できるので、あくまでユーザー情報しか保持しない（room.***に当たる情報を持たせない）
* 「ルーム」は参加者および最大参加人数、作成者と参加者の権限を保持する
    * ユーザーの追加、削除ができる人は権限がある人のみに限るようにする
* 「ユーザー」と「ルーム」をつなぐ中間テーブルが必要

では実際にER図を作成してみたいと思います。

これらの情報をChatGPTに伝え、mermaidで出力するように指示すると以下のようなテキストが返ってきました。これを「\``` mermaid \```」で囲うことにより、以下図のような出力が得られます。

```
erDiagram
    USER ||--|{ ROOM : "creator"
    USER ||--|{ ROOM_USERS : "多対多(役割付き)"
    ROOM ||--|{ ROOM_USERS : "多対多(役割付き)"

    %% === テーブル定義 ===
    USER {
        uint       ID PK
        string     name
        string     password
        datetime   created_at
        datetime   updated_at
        datetime   deleted_at
    }

    ROOM {
        uint       ID PK
        string     name
        string     password
        int        maxPlayers
        uint       creatorID FK
        datetime   created_at
        datetime   updated_at
        datetime   deleted_at
    }

    ROOM_USERS {
        uint       user_id  FK
        uint       room_id  FK
        Role       role
    }

```

``` mermaid
erDiagram
    USER ||--|{ ROOM : "creator"
    USER ||--|{ ROOM_USERS : "多対多(役割付き)"
    ROOM ||--|{ ROOM_USERS : "多対多(役割付き)"

    %% === テーブル定義 ===
    USER {
        uint       ID PK
        string     name
        string     password
        datetime   created_at
        datetime   updated_at
        datetime   deleted_at
    }

    ROOM {
        uint       ID PK
        string     name
        string     password
        int        maxPlayers
        uint       creatorID FK
        datetime   created_at
        datetime   updated_at
        datetime   deleted_at
    }

    ROOM_USERS {
        uint       user_id  FK
        uint       room_id  FK
        Role       role
    }

```

ChatGPTに伝えるだけで物の５分でER図を出力することに成功しました。
因果推論探索と因果推論の違いとは？各手法の概要と選び方を徹底解説！

## **はじめに**

「データ分析で因果関係を特定したい」というニーズが高まる中、重要なキーワードとして「因果推論探索（Causal Discovery）」と「因果推論（Causal Inference）」が注目されています。これら2つの概念には明確な違いがあり、目的や適用する場面が異なります。

この記事では、それぞれの違いを解説し、代表的な手法の概要、メリット・デメリット、そしてどのように使い分けるべきかを紹介します。

---

## **因果推論探索と因果推論の違い**

### **1. 因果推論探索（Causal Discovery）とは？**
**因果推論探索**は、データから因果関係の「構造」を自動的に探索するアプローチです。どの変数がどの変数に影響を与えるかがわからない場合に、探索的に因果構造を明らかにするために使用します。

---

### **2. 因果推論（Causal Inference）とは？**
**因果推論**は、すでに特定された因果関係に基づいて、「介入が結果にどのような影響を及ぼすか」を定量的に推定する手法です。特に、特定の介入（施策や薬の投与など）の効果を評価する場面で活用されます。

---

| **観点**           | **因果推論探索**                           | **因果推論**                             |
|------------------|-------------------------------------------|-----------------------------------------|
| **目的**           | 因果関係の構造を探索する                   | 因果効果を統計的に推定する                |
| **対象**           | 因果関係が不明な場合                        | 因果関係がある程度既知な場合               |
| **手法のアプローチ**| グラフィカルモデル、探索的アルゴリズムなど | 統計的手法を用いた効果推定                 |
| **適用場面**       | 初期探索段階、因果構造が未知のとき          | 実験デザインや観測データから効果を測定したいとき |

---

## **因果推論探索の具体的な手法**

因果推論探索では、観測データから因果構造を探索するために以下の手法が用いられます：

---

### **1. PCアルゴリズム（Peter-Clark Algorithm）**
**概要**：条件付き独立性テストを用いて、変数間の因果関係を有向非巡回グラフ（DAG）として構築する手法です。

**メリット**：
- 確率的因果モデルに基づき、理論的に整合性がある。
- 少量のデータでも動作する。

**デメリット**：
- 高次元データでは計算コストが高く、ノイズに弱い。

---

### **2. LiNGAM（Linear Non-Gaussian Acyclic Model）**
**概要**：線形性と非ガウス性の仮定を用いて因果構造を推定する手法です。因果の「方向」をデータから直接推定できる点が特徴です。

**メリット**：
- 因果の方向を特定できる。
- 計算が比較的高速。

**デメリット**：
- 非ガウス性と線形性の強い仮定があり、実データに適用できない場合もある。

---

### **3. グレンジャー因果（Granger Causality）**
**概要**：時系列データにおける因果関係を特定するため、ある変数の過去の値が他の変数の未来に影響を与えるかどうかを判定します。

**メリット**：
- 時系列データ分析に適しており、簡単かつ効率的。

**デメリット**：
- 真の因果関係を示すわけではなく、単に予測可能性に基づく場合がある。

---

## **因果推論の具体的な手法**

因果推論では、すでに特定された因果関係に基づき、介入効果を正確に推定するために以下の手法が用いられます：

---

### **1. ランダム化比較試験（Randomized Controlled Trials, RCT）**
**概要**：対象を無作為に介入群と対照群に分けることで、交絡因子の影響を排除し、介入の因果効果を推定する方法です。

**メリット**：
- 交絡因子の影響をほぼ排除できるため、因果関係の特定が確実。

**デメリット**：
- 実験コストが高い。
- 実験倫理の制約がある場合には実施できない。

---

### **2. 傾向スコアマッチング（Propensity Score Matching, PSM）**
**概要**：観測データから介入群と非介入群の類似するペアをマッチングし、介入の因果効果を推定する手法です。

**メリット**：
- 実験が難しい状況でも、観測データから因果効果を推定可能。

**デメリット**：
- マッチングが不十分な場合には推定バイアスが残る。

---

### **3. 差分の差分法（Difference-in-Differences, DID）**
**概要**：介入前後のデータを比較し、介入群と非介入群の変化の差から介入効果を推定する手法です。

**メリット**：
- 自然実験に適用可能であり、介入効果を簡単に測定できる。

**デメリット**：
- 交絡因子が時間とともに変化すると推定バイアスが発生する。

---

### **4. 操作変数法（Instrumental Variables, IV）**
**概要**：交絡因子の影響を取り除くために、介入に影響を与えるが結果には直接影響しない「操作変数」を用いて因果効果を推定する手法です。

**メリット**：
- 実験が難しい場合でも、観測データから因果効果を推定可能。

**デメリット**：
- 適切な操作変数を見つけるのが難しい。
- 弱い操作変数を使うと推定に大きな誤差が生じる。

---

## **手法選びのポイントとまとめ**

1. **因果構造が不明な場合**：因果推論探索を行い、PCアルゴリズムやLiNGAMを活用して構造を特定します。
2. **因果構造が特定された場合**：実際の介入効果を測定するために、RCT、DID、傾向スコアマッチングなどの因果推論手法を適用します。
3. **実験が難しいとき**：観測データを基に、操作変数法や傾向スコアマッチングを使って推定するのが現実的です。

---

## **最後に**
因果推論探索と因果推論は、それぞれ異なる目的で使われますが、組み合わせて活用することで実世界の複雑な因果関係を解明できます。適切な手法を選び、因果推論の力をデータ分析に活かしていきましょう！
デッドラインスケジューリングポリシー(SCHED_DEADLINE)



## デッドラインスケジューリングポリシー(SCHED_DEADLINE)とは
SCHED_DEADLINEは、Linux 3.14で導入されたリアルタイムスケジューリングポリシー。
デッドライン駆動型のスケジューリングを実現する。
タスクごとに、

 - 実行時間（Runtime）
 - デッドライン（Deadline）
 - 周期（Period）

を指定し、期限内に処理が完了するよう管理する。
ハードリアルタイム性が求められる自動運転、ロボティクス、金融取引などの分野で有用。
SCHED_FIFOやSCHED_RRよりも精密なスケジューリングが可能で、Linux上でリアルタイム制御を実現する選択肢の一つ。

## スケジューリングポリシーごとの優先度
| スケジューリングポリシー | 概要 |
|:-----------------|:------------|
| SCHED_DEADLINE   | 最高優先度。指定した期限内に処理が完了するよう管理        |
| SCHED_FIFO       | 優先度が高いタスクが終了するまで CPU を独占。固定優先度   |
| SCHED_RR         |SCHED_FIFO と同じ優先度だが、一定時間ごとに CPU を譲る（ラウンドロビン方式）。|
| SCHED_OTHER（CFS）| Linux におけるデフォルト優先度。各プロセスに平等にCPU時間を割り当てる

## サンプル
### コード（参考文献より引用）
```c
#include<linux/sched.h>
#include<linux/sched/types.h>
#include<memory.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/syscall.h>
int sched_setattr(pid_t pid, const struct sched_attr *attr, unsigned int flags)
{
  return syscall(__NR_sched_setattr, pid, attr, flags);
}
int main(int argc, char **argv){
  struct sched_attr attr;
  memset(&attr, 0, sizeof(attr));
  attr.size = sizeof(attr);
  attr.sched_policy = SCHED_DEADLINE;
  attr.sched_runtime = 500000;
  attr.sched_deadline = 900000;
  attr.sched_period = 10000000;
  if ( sched_setattr(0, &attr, 0)) {
    perror("sched_setattr");
    return 1;
  }
  for(;;){
    printf("test\n");
  }
  return 0;
}
```

### 実行結果
``` bash
$ gcc sample.c
$ sudo ./a.out
$ ps -eo 'pid,class,comm'
    PID CLS COMMAND
    ・
    ・
  28972 TS  sudo
  28973 DLN a.out
  29041 TS  ps
```

CLS が DLN （デッドライン）　として動作していることが確認できる。

## 参考文献
https://www.shoeisha.co.jp/book/detail/9784798177847
【Rails】Bootstrapとは

# はじめに
こんにちは。アメリカで独学でエンジニアを目指している者です。
現在 Rails を勉強中ですが、初めて Bootstrap を触ったので、今回は教材に出てきた Bootstrap について記事にしてみたいと思います。

開発環境
ruby 3.2.3
rails 7.0.4.3
bootstrap-sass 3.4.1

# Bootstrapとは
Bootstrap は、Web ページや Web アプリケーションのデザインを簡単に整えるための CSS フレームワーク です。
HTML、CSS、JavaScript が組み合わさったツールキットで、レスポンシブデザインやモダンな UI を手軽に構築できる仕組みを提供します。
Rails では、Gemfile に `gem 'bootstrap-sass', '3.4.1'` のように記述して `bundle install` するだけで導入可能です。

## コード例
以下は、Bootstrap を使用しているコードの一例です。
現在学習している Rails チュートリアル から一部引用しています。

```html:application.html.erb
<!DOCTYPEhtml>
<html>
・
・
・
  <body>
    <header class="navbar navbar-fixed-top navbar-inverse">
      <div class="container">
      <%= link_to "sample app", '#', id:"logo"%>
        <nav>
        <ul class="nav navbar-nav navbar-right">
          <li><%= link_to "Home", '#' %></li>
          <li><%= link_to "Help", '#' %></li>
          <li><%= link_to "Login",'#' %></li>
        </ul>
        </nav>
      </div>
    </header>
    <div class="container">
    <%= yield %>
    </div>
  </body>
</html>
```
CSS だけを学んでいた段階では、「なぜクラスが 3 つもあるの？1 つではダメなの？」と疑問に思いましたが、Bootstrap の場合は `navbar` や `navbar-fixed-top` をクラスに加えることで、あらかじめ用意されているスタイルが反映される 仕組みになっています。

### `header class="navbar navbar-fixed-top navbar-inverse"`
今回はBootstrapに焦点を当てて説明していきます。
* `navbar`: ナビゲーションバー（横並びのリンクメニュー）を作成するためのスタイルを提供します
* `navbar-fixed-top`: ヘッダーがスクロールしてもページの上部に固定されるスタイルを指定します。
* `navbar-inverse`: ナビゲーションバーの色を逆転（通常は背景が濃い色、文字が白）させます。

これらを `class` 属性に並べることで、上記 3 つの性質を同時に `header` に適用できます。

### `ul class="nav navbar-nav navbar-right"`
* `nav`: ナビゲーションリンクのリストであることを示します。
* `navbar-nav`: Bootstrapのクラスで、ナビゲーションバー内のリンクを整列させるスタイルを提供します。
* `navbar-right`: リンクを右寄せにするスタイルを適用します。

# まとめ
本日は Rails チュートリアルで登場した Bootstrap について紹介しました。
Rails でアプリを作成するにあたって、システムの仕組みだけでなく「見た目」も非常に重要です。そのため、デザインを整える一つの方法として Bootstrap を理解しておくと良いでしょう。

教材にはこのほかにも `jumbotron` や `bt`n などのクラスが登場しますが、今回は解説をここまでにしておきます。
Rails チュートリアルを 1 周目で学んでいたときは、クラスを複数書く理由を深く考えていませんでしたが、今回の学習を通じて「なぜクラスを 3 つ書いているのか？」がわかり、今後の学習でさらに理解が深まりそうです。

Bootstrapについてもう少し知りたい方は公式ドキュメント(日本語)があるようなので確認してみてください

https://getbootstrap.jp/docs/5.3/components/navs-tabs/
pyenvがversionをswitchしてくれない

# pyenvがversionをswitchしてくれない

謎にroot dirに存在していた`.python-version`が原因でした。これに何も記載がなく、変更する対象がないため、変更されないという感じだったようです。ので、これを消すことで解決しました。

```
rm ~/.python-version
```


## 詳細
[pyenvのドキュメントによると](https://github.com/pyenv/pyenv?tab=readme-ov-file#understanding-python-version-selection)、pyenvはglobalの`.version`ファイルを見に行く前に、`.python-version`をcurrent dirとroot dirの間で、再起的に探しに行くようです。そのため、一番今のdirに近い`.python-version`にversionが指定されていないと、versionのswitchができなくなる、といった形っぽいです。

また、[shim executableがpathに入ってない](https://stackoverflow.com/questions/33321312/cannot-switch-python-with-pyenv)、説もありましたが、これでは解決できなかったです。そもそも`which python`がpyenvのpythonを示していたので、pathの設定はうまくいってそうでした。
system.vhdがいなくなった

# 【重要】バックアップを忘れずに！

wslが起動しなくなってもディスクイメージは無事に残っている可能性があります。
作業前に必ず
```
%LOCALAPPDATA%\Packages\CanonicalGroupLimited.XXXXXXXX\LocalState\ext4.vhdx
```
を確認し、バックアップを取得しておきましょう(XXXXXXはディストリビューションによって違う)

特に、wsl --unregister <ディストロ名>を実行するとそのディストリビューションのディスクが消えてしまいまうので気を付けてください。


## 本題

wsl --updateでwslをアップデートしたのですが、以下のエラー出てwslが起動できなくなりました

```
ディスク 'C:\Program Files\WSL\system.vhd' を WSL2 にアタッチできませんでした: 指定されたファイルが見つかりません。
エラー コード: Wsl/Service/CreateInstance/CreateVm/MountVhd/HCS/ERROR_FILE_NOT_FOUND
```

確かに、C:\Program Files\WSLを見るとsystem.vhdがいなくなっています。

WSLのクリーンインストール方法をChatGPTに聞いたりググったりすると、

- dism.exeで無効化/有効化したあとwsl --installで再インストール
- windowsの機能の有効化/無効化でwsl、Virtual Machine Platformを削除、再インストール
- システム > システムコンポーネントからLinxu用windowsサブシステムを削除

という解決方法ばかりが出てくるのですが、どれもWSLをやってもsystem.vhdが戻ってくることはありませんでした。

## 私はこれで直った

ChatGPTで新しいチャットを開きまくって、聞き方変えて何回も聞いているうちに出てきたのがこれ。

```
wsl --shutdown
wsl --uninstall
```

これを管理者権限で実行するとC:\Program Files\WSLがなくなりました！
どきどきしながらwslのインストールに再挑戦すると復活！
あわててwsl --unregisterを実行しなかったことが功を奏し、インストール済みのディストリビューションもそのまま復活しました。

## なぜすぐwsl --uninstallが出てこなかったのか

wsl --helpを見ると確かに

```
Copyright (c) Microsoft Corporation.All rights reserved.
この製品のプライバシー情報については、https://aka.ms/privacy にアクセスしてください。

使用法: wsl.exe [Argument] [Options...] [CommandLine]

Linux バイナリを実行するための引数:

    コマンド ラインが指定されていない場合、wsl.exe は既定のシェルを起動します。

    --exec, -e <CommandLine>
        既定の Linux シェルを使用せずに、指定されたコマンドを実行します。

    --shell-type <standard|login|none>
        指定されたコマンドを、指定されたシェル タイプで実行します。

    --
        残りのコマンド ラインをそのまま渡します。

～ 省略 ～

    --uninstall
        このマシンから Linux 用 Windows サブシステム パッケージをアンインストールします。

～ 省略 ～
```

と書いてあるのですが、[WSL の基本的なコマンド](https://learn.microsoft.com/ja-jp/windows/wsl/basic-commands#unregister-or-uninstall-a-linux-distribution)をみてもunistallオプションのことは何も書いてないのであまり有名じゃないのかもしれません。
いろいろやってもダメだった人は自己責任でお試しください。
文章の「見せ方」を決める

# この記事の目的
テクニカルライティング技術に関する「フォーマット」と「ルール」について理解する

# 目次
▼[表現設計](#表現設計)
▼[基本フォーマット](#基本フォーマット)
▼[執筆ルール](#執筆ルール)

# ▼表現設計
表現設計とは、文字の大きさやフォント、図や表をどのように配置するかなどを決めること。表現設計を決めることで、表現に統一感が出せる。また、文章作成の分業化も可能になる。
## 種類
表現設計には、下記のとおり様々なことを決めることができる。
- デザイン表現：何を文章で、何を図形で表現するかといった、レイアウトを作成すること
- 基本フォーマット：デザイン表現に基づき、最終的な見せ方を決めたもの
- 執筆ルールの作成：文字・用字・用語・表記を統一するためのルール

# ▼基本フォーマット
基本フォーマットとは、視覚的な設計図である。
## 役割
- 読み手の視点をスムーズに誘導する
- 全体構成が明確にわかる
- 必要な情報へすぐにたどり着ける
- 統一感をもたせる
## 構成要素
一般的な構成要素は、以下の通りである。
- 見出し
- 本文
- 操作手順
- 関連情報
- 図表
- 検索情報
- 余白

# ▼執筆ルール
一貫性を保つためにルールを決めることが望ましい。

## 種類
- 見出しの付け方
- ですます調なのかである調なのか
- 記号の種類や使い方
- 箇条書きのルール
- 数値の半角・全角の使い分け
など

例）
見出しの付け方：見出しは、行頭に「## ▼ 見出し」をつける。小見出しを付ける場合は、「## 小見出し」を使用する。

# ▼参考文献
[日本語スタイルガイド（第3版）](https://jtca.org/learn-tc/publication/guide_jsg/)
公式ドキュメントを読む時、挫折しないためにしていること

# 目的
様々な文脈において「エンジニアは公式ドキュメントを読め」とよく言われます。
一度読もうと奮起したとして、1日目は続いても2日目以降で挫折して振り出しに戻る、という経験を私は何度も繰り返してきました。
__「途中で挫折しないである程度まで読み進めるために何をしたら良いか」__ を考えたので、忘れないように書き留めておきます。

# 結論
やることは以下の3STEPです。
1. 読む範囲を決める(ドキュメントの目次から抜粋する)
1. 読み進める(時間配分を決める、完璧を求めない、翻訳ツールを活用する)
1. 読み終えたら記録を取る(セーブデータを取る)

# 1.読む範囲を決める
公式ドキュメントのサイトだとだいたいサイドバーに目次があると思うのでそれをコピーしてNotionなどにペーストします。
- 目次の各ページを表形式データとかにまとめようとすると手間が発生するので、なるべくコピー&ペーストするだけに留める
例：Next.jsの公式ドキュメントの場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518221/558c2f37-5ccf-fff5-9d7e-5a47950aef40.png)
↓コピペ　(ペーストするだけで勝手に階層構造になってくれるの、ありがたい🙏)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518221/4f604528-5ca6-60a4-c977-6d83dff9c773.png)
(✅️は後続の「読み終えたら記録を取る」で付けたものです。)

# 2.読み進める
読む範囲が決まったので、1ページずつ読んでいきます。下の内容を意識して読むようにしています。
- __時間配分を決める__
  - 基本的には長くても10分ぐらいで読む(重要なページであればもっとかける)
- __完璧を求めない__
  - 「必要になった時、読み返しにくればいいや」ぐらいの軽い気持ちで読む
- __翻訳ツールを活用する__
  - 英語を読む勉強のためにも基本的には英語で読む(画面左側に寄せる)
    - Chrome拡張機能「Google Dictionary (by Google)」を使ってポップアップで翻訳結果を見られるようにする
  - 読むのが辛くなってきた時用に、ページ全体を「日本語に翻訳」して画面右側に表示しておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518221/4a99032a-4746-0773-c5f9-4e7fee43e504.png)

# 3.読み終えたら記録を取る
下の画像のように、読み終えたページに印✅️を付けていきます。
- 学習を再開する時の目印になる(ゲームのセーブデータ)
- 読了日のデータも入力しておくと後で見える化しやすいかもしれない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518221/4f604528-5ca6-60a4-c977-6d83dff9c773.png)

# 後書き
上の方法は、公式ドキュメントだけでなく、技術書を読む時にも使えそうだと思いました。


以上
laravelのbladeファイルがキャッシュ反映されない場合

## 本記事の目的
システム内にお知らせや注意文言が記載されている場合、それの文言を急に差し替える為にbladeファイルを編集したが、反映されない場合があり原因を調査したのでその備忘録。
冷静に対処したら良かったが、当時はかなりてんぱった。

## 結論
bladeファイルのキャッシュはタイムスタンプ比較で生成されるので、バックアップファイルから復元した場合などは別途タイムスタンプを更新する必要がある。

##確認
①以下のようにlaravelのトップページに「動作確認用」と文字を入れておく。
```welcome.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>
        動作確認用

        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet">

        <!-- Styles -->
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271953/80f5e29b-fcfd-e3c6-37fa-dcdee6d5ce9a.png)

②以下のようにバックアップを取得しておく
 cp -ip  welcome.blade.php  bkwelcome.blade.php

③welcome.phpから「動作確認用」という文字を消す→反映される。

③バックアップを戻す（※やっぱりさっきの作業はなしで！と依頼元から連絡があったときを想定）
$ cp -ip  bkwelcome.blade.php  welcome.blade.php
→このようにファイルを戻しても反映されない。

④タイムスタンプを更新する。
touch welcome.blede.php→これで反映される。

## おそらく上記の理由
公式のドキュメントには以下の記載があります。
「すべてのBladeテンプレートはプレーンなPHPコードにコンパイルされ、変更されるまでキャッシュされます。」

この仕組み自体がlaravelの高速化に役立っているのですが、今回はこちらが悪いほうに働いたようです。

この「変更されるまで」というのがおそらくタイムスタンプ比較なのではないかと思います。
そのため、バックアップファイルをそのまま戻した場合は、タイムスタンプが古いままなのでキャッシュされない、ようです。

このような事象は普通にググると、php artisanでclearしたらよい、などど出てきますが、
本番稼働中の環境では影響範囲が見えない為やりたくないのでタイムスタンプ更新で回避しました。
Record Producer １：Record Producerとは？概論【ServiceNow】

※この記事はServiceNow初心者が学習用のために記載した記事です。内容について誤っている場合がございます。不足点などございましたらコメントいただけますと幸いです。

# ServiceNowのレコードプロデューサーとは？  
- レコードプロデューサー（Record Producer） は、ServiceNowの Service Catalog（サービスカタログ） の一部として機能するフォームの一種
- Record ProducerはOOTBである
- ユーザーが特定のテーブル（例：インシデント、リクエスト、カスタムテーブルなど）に新しいレコードを作成できる仕組み
    - Service Catalog（サービスカタログ） 
        - ユーザーがITサービスやリクエストを申請できるポータル
        - 企業の ITサービスの「オンラインショップ」 のようなもの

# レコードプロデューサーの特徴
- カスタムフォームの作成
   - 通常の「新規作成」ではなく、カスタムフォームを提供できる 
   - ユーザー向けに入力フィールドを簡略化したり、独自のUIを設計できる  
   ※カスタムフォームはRecord Producer以外にも可能
        方法 | 適用範囲 | 特徴  
        ------ | ------------ | ----------  
        レコードプロデューサー | Service Catalog | 簡単にリクエストフォームを作成できる  
        フォームデザイナー | 既存テーブルのフォーム | フォームのレイアウトを変更可能  
        UIポリシー | 既存フォームの動的変更 | 条件に応じてフィールドを表示・非表示  
        Service Portal | 完全カスタムフォーム | 高度なUIカスタマイズが可能  

- 任意のテーブルにレコードを作成
   - インシデント（incident）、サービス要求（sc_request）、またはカスタムテーブルにデータを登録可能

- スクリプトでの動的制御が可能  
   - スクリプト（Producer Script）を使って、フィールドの値を計算したり、特定の条件で動作を変更できる  
   - 例：「カテゴリが〇〇のとき、説明フィールドを必須にする」など  

- Service PortalやSelf-Service UIから利用可能 
   - エンドユーザーが使いやすいUIでリクエストを作成できる  


## よくある活用例
| 用途 | 対象テーブル | 利用ケース |
|------------|--------------|------------------|
| インシデント登録 | `incident` | ユーザーが「システム障害」や「パスワードリセット」を申請 |
| 新規ユーザー作成 | `sys_user` | IT部門が新しい社員のアカウントをリクエスト |
| ハードウェアリクエスト | `sc_request` | ユーザーが新しいPCやスマホを申請 |
付加価値を高めるテクニカルライティング技術 

# この記事の目的
以下の付加価値を高めるための技術を理解する
- 文書から目的とする内容探しやすい
- 文書をデータとして活用しやすい

# 目次
▼[文書設計方法を工夫する](#文書設計方法を工夫する)
▼[文書の構造化を意識しよう](#文書の構造化を意識しよう)

# ▼文書設計方法を工夫する
## 記載順序を設計をする
探しやすく、理解しやすくなる順序を検討する。
読み手の思考過程をイメージして、どこで、いつ、なにを必要としているかを考えることがコツ。
### 文書の種類ごとに考える
- トピック指向文書：FAQなど、読み手がすべてを読む前提がない文書。探しやすさだけを追求さえすれば問題ない
- コンテキスト指向文書：コンテキストを重んじて作られる文書。操作手順を説明する文書などでは、順序に意味（コンテキスト）がある。そのため、文書の内容と記載順序は切り離すことが難しい

### 文書を階層化する
どのようなカテゴリーにまとめ、どのような関係をもたせるかを考える。
読み手にとっての階層化であり、作り手のための階層化ではないことに留意する。

適用媒体に対応した階層化をする。
- 画面の表示幅を考慮した内容の細分化
- ハイパーリンクを活用した階層の順序変更

# ▼文書の構造化を意識しよう
## 文書の構造化とは？
書いている文章が、本文なのかリードなのか、何階層目の見出しなのかを意識して、文章を作成すること。そして、作られた文書のことを構造化文書という。

## 文書の構造化とデータの構造化の違い
「データの構造化」を行うということは、作り手にとって使いやすさと情報システム的な意味での使いやすさを同時に追求すること。

一方、「文書の構造化」とは、読み手にとっての使いやすさのみを追求する。

# ▼参考文献
[日本語スタイルガイド（第3版）]()
Amazon Linux 初期設定(使い捨てプログラミング)

## Amazon Linux 初期設定
プログラミング勉強などでちょっとLinux触りたい際などに
AWS EC2 で Amazon Linux 起動した際の初期設定。

### yum upadte
```
$ sudo yum update
```

### C言語(gcc)インストール
```
$ sudo yum -y install gcc
```

### python インストール
```
$ sudo yum -y install python
$ sudo yum -y install pip
```

### git インストール
```
$ sudo yum -y git
```

### docker インストール
```
$ sudo yum -y install docker
$ sudo systemctl start docker
$ sudo systemctl enable docker
$ sudo gpasswd -a $(whoami) docker
$ sudo chgrp docker /var/run/docker.sock
$ sudo service docker restart
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/
bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ 
```
日本株式銘柄セミ自動トレードシステムの開発

# # 日本株式銘柄セミ自動トレードシステムの開発

## 概要

東証プライム市場上場銘柄（約1900銘柄）を対象に、銘柄選別、新規買注文/決済売注文、保有銘柄の管理をセミオートメーション化した一連のトレーディングシステムを開発しました。本記事では、

1. 先行事例の紹介
2. 開発のモチベーションと想定効果
3. 設計コンセプト
4. 実装方法
5. 5ヶ月間の運用実績

について説明します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150223/23b02213-f137-6566-b65a-2645647e2c36.png)

---





## 1. はじめに

### 自動トレードシステムとは？
株式取引、FX、指数先物、オプション取引では、事前に決めたルールに基づき自動的に取引を行う自動トレードシステムが利用されています。

市販システムには以下のようなものがあります。
- **イザナミ** ([公式サイト](https://www.izanami.jp/gosystre/))
- **ITRADE** ([公式サイト](http://itrade.tokyo/start/b.php))
- **kabuステーション® API** ([公式サイト](https://kabu.com/company/lp/lp90.html))
- **岡三RSS** ([公式サイト](https://www.okasan-online.co.jp/ont/rss/))

市販システムは購入後すぐに利用できますが、仕様の範囲内でしか機能しません。一方、独自開発では自由度が高いものの、開発スキルと時間が必要になります。

私が本システムを開発した理由は、
- 市場分析、銘柄選別、新規買/決済売発注、保有銘柄管理の工数削減
- プロスペクト理論による損失回避心理を排除し、損切りの最適化

を目指したためです。

そのため、**Pythonとkabuステーション® APIを利用して独自のトレードシステムを構築**しました。

---

## 2. 設計コンセプト

本システムの設計コンセプトは以下の2点です。

1. **システムの単純化**
   - 取引対象は「現物株のみ」（空売りなし）
   - 上昇基調の銘柄のみを対象に選別
   - 新規買/決済売の注文を1日1回に限定

2. **リスク低減投資**
   - 東証プライム市場の低リスク銘柄に投資
   - 最大4日間の保有ルールで含み損の拡大を防ぐ
   - 新規買注文は前日に目視確認を行い、誤発注を防ぐ

これにより、**単純で安定した運用が可能なシステムを実現**しました。

---

## 3. 実装方法

本システムの処理の流れは、以下の6つのプロシージャーに分割されます。

1. **procedure1:** J-Quants API で銘柄データ取得
2. **procedure2:** 翌営業日新規買銘柄の選別（ユーザー確認）
3. **procedure3:** 損切り・利確ライン、新規買条件の算出
4. **procedure4:** DBに記録
5. **procedure5:** kabuステーション® API への発注指示
6. **procedure6:** 新規買・決済売注文の実行

**実行タイミング**
- **前日夜:** 損切ライン設定、注文条件の記録
- **当日14:50:** PC起動（SwitchBot使用）、新規買/決済売注文

また、**Windows + Docker(Ubuntu) 環境**で動作するよう設計し、
- `kabuステーション® API`（Windows）
- `jupyter, Python, MySQL`（DockerのUbuntuコンテナ）

を利用して、柔軟な運用を可能にしました。

---

## 4. 運用結果

5ヶ月間の運用結果を検証しました。

- **日経平均騰落率と新規買銘柄の関係**
  - 相関係数0.42の正相関 → 日経平均が上昇すると新規買銘柄が増加

- **運用利益率**
  - 日経平均とおおよそ連動
  - ただし、以下の期間に特徴的な動き
    1. **日経平均がレンジ相場**（2023/7）：本システムは利益を確保（+3.8% → +5.6%）
    2. **日経平均急落**（2023/8）：影響を受け運用利益率が減少
    3. **日経平均下降トレンド**（2023/8後半）：新規買銘柄が減少し、損失を抑制

---

## 5. まとめ

本システムの利点：
- **取引の自動化による工数削減**（1日15分以内）
- **損切りをルール化し、心理的要因を排除**
- **運用利益率はプラス達成**

ただし、以下の課題があります。
1. **急激なトレンド転換の影響を受ける**
   - **対策:** 米国CPI, FOMCなどの経済イベント前にポジションを閉じる

2. **上昇トレンド時の運用利益率が日経平均を下回る**
   - **対策:** 日経平均VIXが低いときは、ボラティリティが高い銘柄を選別

今後、**バックテストを通じてこれらの対策を検証**していきます。

---

## 参考文献
- [イザナミ](https://www.izanami.jp/gosystre/)
- [ITRADE](http://itrade.tokyo/start/b.php)
- [kabuステーション® API](https://kabu.com/company/lp/lp90.html)
- [岡三RSS](https://www.okasan-online.co.jp/ont/rss/)
- [最小分散投資](https://www.nomura.co.jp/terms/japan/sa/A02356.html)
- [J-Quants](https://jpx-jquants.com/)
- [SwitchBot](https://www.switchbot.jp/pages/switchbot-bot)
[Cursor] 各機能の使い方・解説

## コード補完 & 編集機能

### 1. Tabキー補完（AIによるコード予測）
**機能:**
- コードの続きをAIが予測し、複数行のコードを提案してくれる
- PythonやJavaScriptなど、一般的な言語で特に効果的
- 例えば、`for`ループを書き始めると、AIが自動で`for i in range(10):`のように提案

**使い方:**
- コードを書き始めて`Tab`キーを押すと、AIが提案するコードを補完できる

---

### 2. マルチライン編集（複数行のコード変更）
**機能**
- AIが一度に複数行のコードを編集し、修正を提案
- 例: 関数の変数名を一括で変更したい場合、AIに「変数`x`を`count`に変更して」と指示すると、自動で適用

**使い方**
- コードを選択し、AIチャットで指示を入力すると、自動で変更

---

### 3. スマートリライト（自動修正）
**機能**
- コードの誤りや冗長な部分をAIが修正し、最適化してくれる
- 例: 関数を短くまとめる、不要な`if`文を削除するなど

**使い方**
- コードを選択し、AIチャットで「このコードを最適化して」と入力

---

## AIチャット & コードナビゲーション

### 1. AIチャット（コードのバグ検出や修正提案）
**機能**
- AIと会話しながらコードのバグを見つけたり、最適化したりできる
- 例: 「このコードのエラーを見つけて修正して」と入力すると、AIが問題点を指摘し、修正案を提案

**ショートカット**

| 機能 | Mac | Windows |
|------|------|---------|
| AIチャットを開く | `Cmd + L` | `Ctrl + L` |
| 選択したコードをAIに送る | `Cmd + Shift + L` | `Ctrl + Shift + L` |

---

### 2. コードベース検索（プロジェクト全体の検索）
**機能**
- `@Codebase`を使って、プロジェクト全体から関数や変数を検索
- 例: `@Codebase undo redo`と入力すると、関連するコードを一覧表示

**ショートカット:**

| 機能 | Mac | Windows |
|------|------|---------|
| コードベース検索 | `Cmd + Enter` | `Ctrl + Enter` |

---

### 3. カーソル予測（次に編集すべき場所をAIが提案）
**機能**
- AIが「ここを編集したほうがいい」と判断した場所をハイライト表示
- 例: 変数が未定義の場合、AIが指摘して適切な値を提案

---

## コード適用 & コマンド操作

### 1. インスタント適用（AI提案のコードをすぐ適用）
**機能**
- AIチャットで提案されたコードを、そのままエディタに適用できる
- 例: AIが修正案を提示 → 「適用」ボタンを押すだけで反映

---

### 2. ターミナル連携（英語の指示をコマンドに変換）
**機能**
- 自然言語（英語）でターミナル操作を指示できる
- 例: 「clone the repository」と指示すると、AIが`git clone URL`を自動生成

**ショートカット**

| 機能 | Mac | Windows |
|------|------|---------|
| ターミナルコマンド変換 | `Cmd + K` | `Ctrl + K` |

---

### 3. エージェントモード（AIがタスクを自動実行）
**機能**
- AIがエンドツーエンドでタスクを実行
- 例: 「この関数にテストを書いて」と指示すると、AIが自動でテストコードを作成

---

## ドキュメント & 外部情報連携

### 1. `@Docs`（ライブラリの公式ドキュメント検索）
**機能**
- `@Docs`を使って、特定のライブラリの公式ドキュメントを検索可能
- 例: `@Docs React useState`と入力すると、React公式の`useState`の説明を表示

---

### 2. `@Web`（最新情報の検索）
**機能**
- `@Web`を使って、最新の技術情報を検索
- 例: `@Web 最新のPython 3.12の変更点`と入力すると、関連情報を取得

---

## **まとめ（初心者におすすめの使い方）**

### **基本の流れ**
1. **コードを書くとき:** `Tab`キーでAIの補完を利用
2. **エラーや最適化:** `Cmd + L`（Mac）または`Ctrl + L`（Windows）でAIチャットを開き、「このコードのバグを教えて」と入力
3. **プロジェクト内検索:** `Cmd + Enter`（Mac）または`Ctrl + Enter`（Windows）で関数や変数を探す
4. **ドキュメント検索:** `@Docs ライブラリ名 関数名`で公式情報を調べる
5. **ターミナルコマンド:** `Cmd + K`（Mac）または`Ctrl + K`（Windows）で英語の指示をコマンドに変換
M5Stack LLM モジュール・LLMデバッグツールキット（LLMモジュール デバッグボード）を使うための情報の自分用メモ

以下のスイッチサイエンスさんのオンラインショップで購入した「M5Stack LLM モジュール」と、その際に商品についてきた「LLMデバッグツールキット（LLMモジュール デバッグボード）」を使おうとする際の、事前調査のメモとなる記事です。

●M5Stack LLM モジュール — スイッチサイエンス
　https://www.switch-science.com/products/10034

ちなみに、購入した品が届いた時の写真は以下のとおりです。

https://x.com/youtoy/status/1880256401697890611


## メモ
網羅的なものでなく偏った内容になるかとは思いますが、以下に情報をメモしていきます。

### 公式ドキュメント
以下は、公式のドキュメントになります。

#### デバッグ関連：LLMデバッグツールキット（LLMモジュール デバッグボード）の話も

●m5-docs
　https://docs.m5stack.com/ja/guide/llm/llm/adb

#### UIFLow 2.0 で使う

https://docs.m5stack.com/ja/guide/llm/llm/uiflow2

https://uiflow-micropython.readthedocs.io/en/latest/module/llm.html

#### ファームウェアのアップグレード

https://docs.m5stack.com/ja/guide/llm/llm/image

### アドベントカレンダー
以下は、2024年12月に作られたアドベントカレンダーです。

●M5Stack Module LLM - Qiita Advent Calendar 2024 - Qiita
　https://qiita.com/advent-calendar/2024/m5stack_module_llm

界隈の皆様が、たくさん知見を共有してくれていてありがたいです。

そこから気になったものを抜粋してみます。

#### デバッグ関連

●Module LLMのデバッグ基板を一体化するフレーム - Qiita
　https://qiita.com/kenichih/items/3b6cef2c71a1f9faf42d
 
●Module-LLMとデバック基板のつなぎ方 - Qiita
　https://qiita.com/nnn112358/items/3be6049d97bd360ce6f8


#### カスタムモデルの利用

●M5Stack Module LLM で カスタムモデルを動かす ～ 0.概要
　https://zenn.dev/airpocket/articles/526e6b0f554e81
●M5Stack Module LLM で カスタムモデルを動かす ～ 1.モデル変換
　https://zenn.dev/airpocket/articles/f41765f304e313
●M5Stack Module LLM で カスタムモデルを動かす ～ 2.python用runtimeビルド
　https://zenn.dev/airpocket/articles/b274c40f988434
●M5Stack Module LLM で カスタムモデルを動かす ～ 3.pythonデモコードでリアルタイム推論
　https://zenn.dev/airpocket/articles/3cc51cd57cd18d


#### いろいろ（未分類）

●Module-LLMの 起動音の消し方 - Qiita
　https://qiita.com/nnn112358/items/8157d2534e1a6e11ccdd

●Module-LLMにUSBカメラを接続する - Qiita
　https://qiita.com/nnn112358/items/b284763de0d333dfdb73

●Module-LLMからPCのブラウザへ動画データを送る - Qiita
　https://qiita.com/nnn112358/items/cd56d1e71ff12a09009e

●M5 Base AAA 単4電池ホルダーでM5Stack LLM Moduleを使ってみる - Qiita
　https://qiita.com/A-Uta/items/7378ecf0bab6fa0e7bd5

●Module-LLMでメモリが足りなくなった場合の対処 - Qiita
　https://qiita.com/nnn112358/items/ead108aa094fe6e3d432

●Module-LLMのIPアドレスを固定するには - Qiita
　https://qiita.com/nnn112358/items/da1bffb82ad675f1b625

### Qiita のタグ
上にメモした記事にもついているタグで記事を探してみます。

とりあえず、以下をピックアップしてみました。

●Module-LLMとは？開発に役立つ使い方、トレンド記事やtips - Qiita
　https://qiita.com/tags/module-llm

#### 自作モデルの利用・Function Calling

●M5Stack Module LLMのNPUで自作モデルを実行 - Qiita
　https://qiita.com/motoh_qiita/items/181217bb24a1fa294048

●M5Stack Module LLMでFunction Callingを実行 - Qiita
　https://qiita.com/motoh_qiita/items/1b0882e507e803982753


### Ｘ の投稿

以下は、以前見かけてメモしていたポストです。
このポストと、そこに連なる投稿に、色々と情報が書かれています。

https://x.com/devemin/status/1853652602074091736

## おわりに

他にもたくさん情報があると思うのですが、いったんここまでで。


## 余談
M5Stack LLM モジュール以外に、LLM関連の製品としては M5Stack公式ストアで買った「M5Stack LLM630 Compute Kit (AX630C)」もあるのですが、これも手をつけたいところです。 

https://x.com/youtoy/status/1883468925452878160

●M5Stack LLM630 Compute Kit (AX630C) | m5stack-store
　https://shop.m5stack.com/products/m5stack-llm630-compute-kit-ax630c
ABC392回答メモ

# 0.はじめに
　最近コンスタントにDまでは行けるようになっていて、慣れてきたのかなと思いつつ参戦。
　今回も、Ａ～Ｄはすんなり解け、1時間残しでＥに取り組めました。
　ただ、Ｅはクリアできず結局4問ＡＣで終わり。
　レートは+29の787まであがり、再入緑が見えてきました。


# 1.A - Shuffled Equation
　問題文に従いABCの関係性3種類（A+B=C、A+C=B、B+C=A）それぞれが
　条件に合うか判断。
　合うものがあればYesなければNoを出力して終了。

　https://atcoder.jp/contests/abc392/submissions/62503991


# 2.B - Who is Missing?
　リストAをセット化し、１～Nまでの数字がセットにあるかを判断。
　ないものを回答用リストに追加していき
　最後に回答用リストの長さと、内容を出力して終了。

　https://atcoder.jp/contests/abc392/submissions/62511569


# 3.C - Bib
　ややこしいと言えばややこしいけど、まぁ言われた通り実装すれば
　なんてことはない問題。

　【実装】
　　1.回答用リストansを用意（実装を簡単にするため、0～NのN+1個の項目を持つ、index0は使わない）
　　　ans[i]には、i が書かれたゼッケンを着けている人が見つめている人の着けているゼッケンにかかれている数がセットされる
　　2.人iを先頭から調べていく。
　　　-1.ans[Q[i]]にQ[P[i]-1]をセットする。
　　3.最後にansをindex１から、N個出力して終了

　https://atcoder.jp/contests/abc392/submissions/62520983


# 4.D - Doubles
　苦手意識のある確率の問題。
　とりあえず、メモ帳に例題1のケースをメモって理解。
　
　Nが、100以下なので、とりあえず、サイコロの全組み合わせを試すことは可能と判断。
　事前処理として、サイコロごとの値数(K)と値毎の目の数を持つ辞書の列を用意
　入力例の１の場合
　　1個目のサイコロ”3 1 2 3”の場合、(3,{1:1,2:1,3:1})
　　2個目のサイコロ”4 1 2 2 1”の場合、(4,{1:2,2:2})
　　3個目のサイコロ”6 1 2 3 4 5 6”の場合、(6,{1:1,2:1,3:1,4:1,5:1,6:1})
　上記列毎の全組み合わせに対し、同じ値となる率を求める。
　一つ目のサイコロのKをK1、値毎の目の数を持つ辞書をC1とし
　二つ目のサイコロのKをK2、値毎の目の数を持つ辞書をC2とする
　2つのサイコロ毎の同じ値発生率は
　分母はK1×K2
　分子は、C1の各値がC2にあった場合、C1の値数×C2の値数の合計
　上記で求めた全ケースの発生率のうち一番大きな値を最後に出力して終了

　https://atcoder.jp/contests/abc392/submissions/62533307


以上
詳細設計を基本からまとめてみた

## 詳細設計とは？
```
『要件定義』⇨『基本設計』⇨『詳細設計』⇨『開発』⇨
『単体テスト』⇨『結合テスト』⇨『受入テスト』
```
- 詳細設計を基にプログラムを作成するため
- 詳細設計を基に単体テストを行うため
- 運用保守時の調査資料になるため

## 詳細設計の目的

- システムの内部構造を検討する
- 基本設計で定義したことを開発者視点で取りまとめる

## 詳細設計で最低限押さえておくべきこと

『基本設計の内容と反映』と『プログラマーに最低限の材料を渡す』

- テーブル設計 ⇨ ちょっとずつではなく、一気に作成する
- データ転送表・データ更新表　⇨　基本設計で決めた内容でOK
- 画面・帳票レイアウト ⇨ 基本設計で決めた内容でOK 
- エラーチェック ⇨ 必要かもというチェックは一旦保留

## 詳細設計の成果物

- 状態遷移図
- シーケンス図
- 画面遷移図
- クラス図
- アクティブ図
- モジュール構造図
- 入出力設計書
- バッチ処理設計書
- テスト設計書
- データベース物理設計書
- 外部インターフェース設計図
- IPO（処理機能記述書）

## 詳細設計の進め方

①基本設計の具体化

②詳細設計書の作成

- 変更時の工数負担を考慮すること
- 要件定義と整合性の確認
- 実現可能なレベルになっているか確認


## 参考サイト
[【詳細設計を書く！】システムエンジニアが最低限やるべきこと](https://www.youtube.com/watch?v=8oyMQMmb3Sk)
[詳細設計とは？設計フェーズ・詳細設計のプロセスや流れと成果物を解説します！15分で解説☆#005(株式会社GeNEE)](https://www.youtube.com/watch?v=PxyUJD_u7FU)
インデックスによるDBパフォーマンスチューニング

# 概要
雰囲気でSQLパフォーマンスチューニングをしていたことを反省し、インデックスについて勉強したことで重要と感じたことをまとめる。
# SQLチューニングの前提知識
## ざっくりしたインデックスでチューニングするイメージ
ようはどれだけ早く国語辞典から単語を調べることができるか。
国語辞典はあいうえお順でソートされていて"あかさたなはまやらわ"でインデックスが貼られている。
"みかん"を調べたい時は"ま"を探して"ま→み"と探して"み→か"と探す。
インデックスがなければ1ページから探すことになり、大変な手間がかかる。
## オプティマイザ（プランナ）
どうやったら一番早く検索できるか考える機能。以下の要素が考慮される。
- テーブルへアクセスする順番
- どのインデックスを使うか
- テーブルのスキャン方式
## オプティマイザ統計情報
どんなテーブルなのか分析するための情報。例えば、件数・1レコード長さ・最大値・最小値・ばらつき・Nullの数等。
# スキャン方式
## テーブルスキャン
データの先頭から末尾まで全てのデータを走査する。
以下のケースで選択される。
- サイズが小さい
- Nullの判定条件がある
- 統計情報のばらつきが少ない
## インデックススキャン
辞典の索引と同じ。キーワードをソートして並べてページ番号をふる。Nullに対して無効。
### Btreeインデックス
データベースで最も一般的に使用されているインデックス。バランスのとれた木構造で以下の特性をもつ。ようは、辞書の索引のような構造を表現している。
- 各ノードには複数のキーと子ノードへのポインタが含まれる
- ルートノードからリーフノードへのすべてのパスの長さは同じ
- データは順序が保たれ、範囲検索や順次アクセスが高速
cscの作法 その552

# 概要
cscの作法、調べてみた。
練習問題やってみた。

# 練習問題
window formでドッキングウィンドウを実現せよ。

# 方針
WeifenLuo.WinFormsUI.Docking.dll使う。

# 参考にしたページ

https://qiita.com/wt_0816earth/items/bc480de47bf1124ca18e

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/7488cc34-5efa-eee3-1057-96df8a115597.png)

# サンプルコード

```
using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using System.Drawing;

namespace Dock
{
	public partial class Win1: WeifenLuo.WinFormsUI.Docking.DockContent {
		public Win1() {
		}
	}
	public partial class Form1: Form {
		public Form1() {
			ClientSize = new Size(900, 700);
			Text = "dock";
			Test1();
		}
		private void Test1() {
			var dockPanel1 = new DockPanel();
			dockPanel1.ShowDocumentIcon = true;
			dockPanel1.Dock = DockStyle.Fill;
			dockPanel1.DocumentStyle = DocumentStyle.DockingWindow;
			Controls.Add(dockPanel1);
			var left1 = new Win1();
			left1.TabText = "left1";
			left1.Show(dockPanel1, DockState.DockLeft);
			var right1 = new Win1();
			right1.TabText = "right1";
			right1.Show(dockPanel1, DockState.DockRight);
			var bottom1 = new Win1();
			bottom1.TabText = "bottom1";
			bottom1.Show(dockPanel1, DockState.DockBottom);
			var center1 = new Win1();
			center1.TabText = "center1";
			center1.Show(dockPanel1, DockState.Document);
			dockPanel1.UpdateDockWindowZOrder(DockStyle.Left, true);
		}
		[STAThread]
		public static void Main() {
			Application.Run(new Form1());
		}
	}
}





```

以上。
日経オプショントレードサポートツール

# 日経オプション取引を革新するサポートツールのご紹介  
～個人投資家の情報格差を解消し、合理的なトレード判断を実現～

## 📌 サービス名  
**日経先物オプション取引サポートツール**

## 🏦 現在の問題点  
日経オプションは、日経平均の急激な変動に備えたヘッジ手段として有用な金融商品ですが、個人投資家が利用できる情報やツールは依然として限定的です。  

### ❌ 情報格差の問題  
- 機関投資家と個人投資家の間には、マーケット分析や戦略判断に必要な情報の質・量に大きな差がある  
- **スマイルカーブ**（権利行使価格ごとのインプライド・ボラティリティ）が証券会社から個人投資家に提供されていない。スマイルカーブは売買の優位性があるか判断するツールとして利用します。


補足 :売買の優位性があるとは下記のストーリの実現が可能であることを言います。
- 売買の優位性日経オプションの市場価格が相対的に割安であれば買い(売買有意性があるという)、日経オプションの市場価格が上昇すれば日経オプションを売却し、差額の利益を獲得するトレードを行う。
- 日経オプションの市場価格が相対的に割高であれば売り(売買有意性があるという)、日経オプションの市場価格が下落すれば日経オプションを買い戻し、差額の利益を獲得するトレードを行う。

### ❌ トレードアプリケーションの機能不足  
- 証券会社の提供するトレードアプリは、個別株に比べて日経オプション向けの機能が限定的  
- タイムリーな意思決定を支援する機能が不足している  

## 🎯 開発の契機目的  
このツールは、個人投資家が日経オプションのトレードを行うにあたり、証券会社が提供する情報に対しギャップを埋めるために本ツールを開発し、投資判断を有意に進められることを目的にしております。


### 📌 背景  
- **マーケット変動と取引判断の必要性**  
  - インプライド・ボラティリティの情報が不足し、割安・割高の判断が難しい  
- **情報格差の是正と誤発注の防止**  
  - 過去データをログ取得・視覚化し、合理的な取引判断を支援  
  - 誤発注を防ぐ仕組みを導入し、無駄な損失を削減  

## 🔧 日経オプション取引サポートツールの機能紹介  
本ツールは、マーケット分析からポートフォリオ管理、発注業務まで幅広い機能を搭載しています。  

### 📊 主な機能  
- **📈 日経225チャート・日経先物遷移**  
  - 日経225の動向をリアルタイムで可視化
  
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150223/4dd4d3c2-21af-05c4-3ecc-de0e70ffaa1e.png)
  

- **📉 スマイルカーブの表示**  
  - 各権利行使価格のインプライド・ボラティリティをグラフ化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150223/9d857ced-eb9c-f033-47bd-5f3998c313aa.png)


- **📊 現ポジション損益のビジュアライズ**  
  - 日経平均の変動に対する保有ポジションの損益を計算し、見える化する  
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150223/ed79e935-663e-68a9-0f23-6d474c766140.png)

- **📊 各スプレッドごとの損益分析**  
  - 取引戦略ごとの損益評価を計算
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150223/70dd1e56-e52e-752e-dd6c-3943dfa33664.png)


- **📊 日経オプション価格 インプライド・ボラティリティの相対比較チャート**  
  - 現在の日経オプションの市場価格が過去実績に対し相対的に割安か割高かを見える化する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150223/a584fedc-ad18-ee00-33fc-83855e7b164d.png)

- **⚡ 証拠金,発注余力金の見える化**  

- **⚡ 経済合理性を欠いた注文の防止**  
  - 無駄な損失を防ぐロジックを実装
  - 経済合理性を欠いた注文を証券会社のAPIに送信する前に警告しストップする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150223/18569afe-eae0-7091-f580-6aa158286c5f.png)



<br>
さらに、以下の技術を駆使して自動化を実現しています。  

## 🛠️ 使用技術  
| 技術 | 詳細 |
|------|------|
| **Python** | pandas, numpy, plotly, オプショントレード専門モジュール|
| **Ubuntu** | cronタブでの自動実行、Xへの自動投稿 |
| **MySQL** | データ管理 |
| **Docker** | Windows上にUbuntuコンテナを配置 |
| **kabuステーションR API** | 三菱UFJ eスマート証券との連携 |
| **SwitchBot / Raspberry Pi** | PCの自動起動・管理 |

## ⚡ 日経オプション取引サポートツールの効果効用  
### ✅ 迅速な売買判断の実現  
- 日経オプションの売買有意性をリアルタイムで可視化  
- 他の個人投資家より先にトレード判断が可能  

### ✅ トレード戦略の効果検証  
- 直近1か月間のデータに基づき、採用中のトレード戦略の有効性を評価  

### ✅ リスク管理と誤発注防止  
- 経済合理性を欠いた発注を排除  
- 損益変動を視覚化し、リスクを管理  

### ✅ システムの自動化による運用効率向上  
- 市場データの**自動ログ取得**  
- 日経オプションスマイルカーブの**Xへの定時投稿**  


---

日経オプション取引における情報格差を解消し、合理的な取引判断を可能にする本ツール。  
最新技術を活用し、効率的かつ安全なトレード環境を提供します！  
今後も個人投資家のために、さらなる進化を遂げていくでしょう。
fortran spreadの使い方：２つのベクトルの外積で行列を作る

２つのベクトル[1,2,3]と[4,5,6]から外積（成分ごとの掛け算）により、3x3行列を作る例題を考えてみる。spreadを利用するなら

fortranなら
```fortran
program test
  real(8),allocatable:: aaa(:,:),bbb(:,:),ccc(:,:)
  allocate(aaa,source=spread([1d0,2d0,3d0],dim=2,ncopies=1))
  allocate(bbb,source=spread([4d0,5d0,6d0],dim=2,ncopies=1))
  allocate(ccc,source=matmul(aaa,transpose(bbb)))
  write(*,*)'aaa=',aaa
  write(*,*)'bbb=',bbb
  write(*,*)'outer product: aaa*bbb',shape(ccc)
  write(*,*) ccc
end program test
```
とすればインデックス操作なしで作れる。doなどを使うとdoのレンジ指定、cccのアロケーションサイズ指定などで間違いそうな点が何点か生じる。spreadというあまりポピュラーでない関数を使わないと次元を増やせない点は面倒（このような場合、a(3)をa(3,1)にしたいだけ。unsqueezeしたいだけ。spreadって変にオーバースペック）。

とにかくfortranコードにおいても可能な限りインデックス操作やdo loopの数は減らしていくべき（無理なことをして難解になるのはいけない）。階層化をより浅くしていく、極端にはpytorchのごとくdo文を極力使わない書き方が好ましい。

* allocateする時、moldなど使わずsourceを用いて直接にshapeごとallocateすると間違いが生じにくいと思う。
* 最近のfortranにおいては、配列のshape matchingは極力自動的に行わせるようにする方が良い。配列のレンジやインデックスの直接操作はできるだけ避ける。
* fortranは一次元配列、というのは過去の常識。もちろん知っていないと困るが、shapeがとれる形になっているかどうか？shapeが引き渡せてるか？なども気にしないといけない。
* そのためにも独立した関数定義は極力避けてすべての関数、サブルーチンをモジュールに所属させる方向がよい（モジュールの使い方には主に2種類ー中途半端な使い方はまずい）。自動でインターフェイス（*.mod)を作ってくれるのはとてもありがたい。
*（原則的に自動的に決定されるような）インターフェイス文は人間がかくべきでない。仕方ない場合は仕方ないが。
* ところどころにassertを入れる（昔はsanity checkと言ってたが）。
* 情報の二重記述が安全側に働くことは稀である。たとえばmodule内でallocateしてデータ生成した場合、それを読むにはuseで直接に読むこと。配列サイズもそこから取る。subroutine冒頭でのデータ授受は極力避けるようにしていったほうが良い。
* fortranで構造体や構造体を使ったClassは極力用いていない。
---
pytorchならbroadcastを使えるので、以下のような感じで簡単に作れる。

```python
import torch

# 2つのベクトルを定義
vector_a = torch.tensor([1, 2, 3])
vector_b = torch.tensor([4, 5, 6])

# ベクトルの次元を調整し、broadcastを利用
matrix = vector_a.unsqueeze(1) * vector_b

print(matrix)
```
これを考えると、fortranならインプリシットなbroadcastは避けることにして、以下のように書けたらいいのにな、とは思います。
```fortran
（こう書けたらいいのにな）
program test
  real(8),allocatable:: aaa(:,:),bbb(:,:),ccc(:,:)
  allocate(ccc,source=matmul([1d0,2d0,3d0].unsqueeze(-1),[4d0,5d0,6d0].unsqueeze(1)))
  write(*,*)'outer product: ',shape(ccc)
  write(*,*) ccc
end program test
```
Joy-Conの通信技術をまとめてみた。

# はじめに
なぜこんな記事を書こうと思ったのかというと、
単純に**Joy-Conの仕組みが気になった**からです。
しかし検索しても日本語でまとめているサイトはほとんどないので、
僕が書こう！ということで書き始めました。
Joy-Conの仕組みを理解する上で、少しでも役立ったら嬉しいです。
この記事ではJoy-Conの通信方法についてまとめようと思います。

# Joy-Conとは？
Joy-Conとは、任天堂の家庭用ゲーム機「[Nintendo Switch](https://www.nintendo.com/jp/hardware/detail/switch/index.html)」で使用するコントローラーです。
~~もう後継機の話も出てますけどね~~

### 機能
![Joy-Con](https://www.nintendo.com/jp/hardware/detail/switch/img/08-local-specs/body-switch03-front.jpg)
ボタン、スティックに加え、HD振動やNFC、モーションIRカメラなど、
さまざまな機能を搭載しています。

### 使用方法
本体に取り付けて**携帯機**にしたり、本体をスタンドで立ててJoy-Conは**おすそ分け**したり、
テレビに繋いで**大画面**で操作することも可能です。

# 通信
Joy-Conの通信方法について話しましょう。

### 内部の通信
[機能](#機能)で話したように、Joy-Conはセンサーやモーターをいくつも持っています。
そのセンサーやモーター同士は**SPI通信**という通信規格で通信します。

#### SPI通信とは？
SPI通信は、双方向で同時にデータのやり取りができ、特に短距離での通信に優れています。
なのでJoy-Conの内部通信には最適な規格なのです！

### 外部の通信
Joy-Conは、本体と接続して操作します。本体との通信では
Bluetoothとコネクタの2種類が使われます。詳しくみていきましょう。

#### Bluetoothを使うとき
Joy-Conを本体から外して使用するときは、物理的に本体には接続されていないので、
Bluetoothを介して無線通信を行なっています。

#### コネクタを使うとき
Joy-Conを本体に取り付けて遊ぶときは、Joy-Conのレール下部にあるコネクタで
本体と通信します。

# 終わりに
Joy-Conの通信規格について理解は深まりましたか？
できれば続きも書こうと思います！
最後まで読んでいただきありがとうございました！

## 参考文献
- [Nintendo Switch - 任天堂](https://www.nintendo.com/jp/hardware/detail/switch/index.html)
- [dekuNukem/Nintendo_Switch_Reverse_Engineering - GitHub](https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering)
- [シリアル・ペリフェラル・インタフェース - Wikipedia](https://ja.wikipedia.org/wiki/シリアル・ペリフェラル・インタフェース)
[Cursor] 説明と手順

# Cursorエディタとは
AIを活用したソフトウェア開発向けのコードエディタ
AI補完機能、コードの自動補完、バグの修正提案、リファクタリングの支援などを行うことができる

# **主な特徴**
### 1. AIによるコード補完
- コードを書いていると、AIが適切な補完候補を提案
- 関数の実装やコメントの補完も可能

### 2. デバッグ支援
- エラーメッセージをもとにAIが修正案を提示
- バグの特定やリファクタリングのアドバイスを提供

### 3. コードの説明機能
- コードの意味をAIが解説
- 他人が書いたコードの理解を助ける

### 4. VS CodeベースのUI
- 使い慣れたVisual Studio Codeのインターフェースを採用
- 既存のVS Codeプラグインも多く利用可能

### 5. Gitとの統合
- GitHubやGitLabなどと連携し、コードレビューの支援も可能

## メリット
✅ 初心者でもコーディングがしやすい  
✅ 開発のスピードが向上する  
✅ バグ修正の時間を短縮できる  

## デメリット
❌ AIの提案が必ずしも正しいとは限らない  
❌ プライバシーやセキュリティの考慮が必要

## 類似ツールとの比較
| ツール名     | AI補完 | デバッグ支援 | Git統合 | ベースエディタ |
|-------------|--------|-------------|--------|--------------|
| Cursor      | 〇     | 〇          | 〇     | VS Code      |
| GitHub Copilot | 〇  | △（主に補完） | 〇     | VS Code      |
| Tabnine     | 〇     | ×           | ×      | VS Code      |
| Codeium     | 〇     | ×           | 〇     | VS Code      |

# 手順
### 1. 公式サイトからダウンロード
- Cursorの公式サイトにアクセスし、インストーラーをダウンロードする
  - https://www.cursor.com

### 2. インストーラーの実行
- ダウンロードしたインストーラーを実行し、セットアップを開始する
    - Install Cursor.app

### 3. 初期設定
- 起動時に表示される画面で、以下の設定を行う
    1. Keyword：「Default（VS Code）」を選択する
    2. Language for AI：「日本語」を入力する
    3. Codebase-wide：「Enabled」にする
    4. Add Terminal Command：「+ Install “code”」と「+ Install “cursor”」を両方クリックして、コマンドラインツールをインストールする

### 4. VSCodeの拡張機能の移行（VS Code Extensions）
- 既存のVSCodeユーザーは、拡張機能を引き継ぐかどうかを選択する
  - Use Extensions：VSCodeの拡張機能を引き継ぐ場合に選択する
  - Start from Scratch：新規に開始する場合は選択する

### 5. データ設定（Data Preferences）
- データ収集するかしないかを選択する
    - Help Improve Cursor：データを収集するようにする
        - 主にチャットでの質問、コードスニペット、編集内容、エディターの操作を収集する
    - Privacy Mode：データを収集しないようにする（セキュリティが心配の方はこちら）

### 6. アカウントの作成またはログイン（You're all set!!）
- Cursorのアカウントを作成するか（Sign Up）、既存のアカウントでログイン（Log In）する
  - GoogleやGitHubアカウントとの連携も可能

### 7. 日本語化の設定
1. アプリ上部の「View」から「Command palette」を選択する
2. displayと入力して「Configure Display Language」を選択する
3. リストから「日本語」を選択し、アプリを再起動すると日本語化が完了

　  
以上でCursorのインストールと初期設定が完了します。
テクニカルライティング技術とは

# ◆この記事の目的
テクニカルライティング技術とは何かを理解する

# 目次
▼[テクニカルライティング技術の歴史](#テクニカルライティング技術の歴史)
▼[テクニカルライティング技術で作られる実用文](#テクニカルライティング技術で作られる実用文)
▼[テクニカルライティング技術だけでは作れない実用文](#テクニカルライティングコミュニケーション技術)

# ▼テクニカルライティング技術の歴史
## 誕生
テクニカルライティング技術の誕生は、1950年代に遡る。技術の発展と分業化に伴い、専門的な情報を正確に伝える必要性が生まれた。

## 普及
第二次世界大戦後、テクニカルライティングの重要性はさらに高まる。1970年代には、工業製品が広く普及し、製品を安全かつ安心して利用するための取扱説明書の需要が増加した。

1980年代に入ると、製造物責任に対する企業の意識が高まり、訴訟リスクへの対応が求められるようになった。この流れを受け、分かりやすく誤解を招かない記述の重要性が増し、テクニカルライティングは不可欠な技術となる。

さらに、企業の責任範囲が労働安全や環境問題にも拡大したことで、テクニカルライティングは製品マニュアル以外にも応用されるようになった。

## 発展
1980年代以降、ビジネスにおけるコンピュータの利用が本格化すると、テクニカルライティングは新たな発展を遂げる。ソフトウェアの操作方法など、目に見えない仕組みを論理的かつ分かりやすく説明する技術が追求されるようになった。

1990年代のパーソナルコンピュータの普及は、この流れを決定づけた。ドキュメントが紙媒体からデジタルデータへと移行し、作成・運用手法も多様化し、テクニカルライティング技術はさらなる発展を遂げた。

# ▼テクニカルライティング技術で作られる実用文
実用文とは、日常的な業務や生活の中で、特定の目的を達成するために情報を正確かつ効率的に伝える文書である。テクニカルライティングによって作られる実用文は、以下のような特徴を持ち、私たちの業務や生活において重要な役割を果たす。

## 特徴
### 説明対象の存在
業務手順書や製品マニュアルのように、説明すべき具体的な対象やテーマが存在する。読者が知りたい情報を的確に提供することを目的とする。

### 誤解を生まない
曖昧な表現を徹底して排除し、誰が読んでも同じように解釈できるよう、情報を正確かつ明確に伝えることが求められる。

### 簡潔で明快
冗長な表現を避け、要点を整理して記述することで、読者が短時間で内容を理解できるように構成される。

### 読み手に何らかの行動を促す
「指示に従って作業する」「手順を実行して問題を解決する」など、読者が次に取るべき行動を具体的かつ明確に示す。

### 文章を成果物とする
作成された文章（図やグラフを含む）は、それ自体が価値を持つ「成果物」となる。マニュアルや仕様書のように、製品やサービスの一部として機能する。

# ▼テクニカルライティング技術だけでは作れない実用文
幅広い分野で有効なテクニカルライティングですが、その原則が必ずしも最適とは限らない文書も存在する。なぜなら、文書の目的によっては、テクニカルライティングが重視する「分かりやすさ」や「客観性」とは異なる価値が優先されるため。

## 有効でない例
### 法務文書
法務文書の第一の目的は、権利や義務を厳密に定義し、将来的な解釈の揺れを未然に防ぐこと。そのため、一般的な分かりやすさよりも、法令や判例に基づいた専門用語や独特の言い回しが意図的に用いられる。

簡潔で平易な表現が、かえって意図しない抜け道や解釈を生むリスクとなる場合があるため、「誰が読んでも誤解なく伝わる」ことを目指すテクニカルライティングの原則がそのまま適用されるとは限らない。

### 広告コピー
広告コピーの目的は、読み手の感情に訴えかけ、共感や興味を喚起し、行動を促すことにある。客観的な事実を正確に伝えることよりも、印象的な言葉選びやリズム、比喩表現といった「インパクト」が重視される。

時には、あえて解釈の幅を持たせる表現や、論理を飛躍させた表現が効果的な場合もあり、これは正確性・客観性を重んじるテクニカルライティングのアプローチとは方向性が異なります。

# ▼参考文献
[日本語スタイルガイド（第3版）](https://jtca.org/learn-tc/publication/guide_jsg/)
M5NanoC6、8x8 Puzzle Unit (Unit Puzzle ?)で数字を表示。



参考


https://qiita.com/caa45040/items/cab17c957a00491cb600




x 過去ログを見よ!!!
x 3.1.1
x フォント[9]は、6の回転版に修正
x M5Stackのミーティングで[タダ]で、貰った。
x Arduino IDEでコンパル
x WS2812B


結果
----


イメージ


![image_original (43).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/46795f6e-ea95-b1dd-37e9-167ef2bec78c.jpeg)



プログラム
---


```c++




//NeoPixel8x8_0_9_M5NanoC6_1


//インクルド
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>


//定義
#define MAX_X 8
#define MAX_Y 8
#define NUM_LEDS 64
Adafruit_NeoPixel strip(NUM_LEDS, 2, NEO_GRB + NEO_KHZ800);

unsigned char Pixel[8][8][3]; //キャラクターRAM(カラー)

// 'font8x8_0_9', 8x64px
unsigned char font8x8_0_9 [] =
{
  0x81, 0x7c, 0x7a, 0x76, 0x6e, 0x5e, 0x3e, 0x81, //0
  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, //1
  0x81, 0x7e, 0xfe, 0xfe, 0xc1, 0xbf, 0x7f, 0x00, //2
  0x81, 0x7e, 0xfe, 0xc0, 0xfe, 0xfe, 0x7e, 0x81, //3
  0xe3, 0xdb, 0xbb, 0x7b, 0x00, 0xfb, 0xfb, 0xfb, //4
  0x00, 0x7f, 0x7f, 0x01, 0xfe, 0xfe, 0x7e, 0x81, //5
  0x81, 0x7e, 0x7f, 0x01, 0x7e, 0x7e, 0x7e, 0x81, //6
  0x00, 0x7e, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, //7
  0x81, 0x7e, 0x7e, 0x81, 0x7e, 0x7e, 0x7e, 0x81, //8
  0x81, 0x7e, 0x7e, 0x7e, 0x80, 0xfe, 0x7e, 0x81, //9
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  //: ' '
};


//ネオピクセルに転送後に表示
void NeoPixe_OUT() {

  int k = 0;
  for (int y = 0; y < MAX_Y; y++) {
    for (int x = 0; x < MAX_X; x++) {

      strip.setPixelColor(k++, strip.Color(
        Pixel[y][x][0], Pixel[y][x][1], Pixel[y][x][2]));

      //Serial.print('.');

    } //for j
    //Serial.println();
  } //for i
  //Serial.println();

  strip.show();

}  //NeoPixe_OUT


//8x8文字の表示
void ch_8x8(char ch, int c1, int c2, int c3){

  ch = (ch - '0') * 8;
  for (int y = 0; y < MAX_Y; y++) {
    int a = font8x8_0_9[ch++];
    for (int x = 0; x < MAX_X; x++) {

      if ( ((a << x) & 0x80) != 0) {
        Pixel[y][x][0] = 0;
        Pixel[y][x][1] = 0;
        Pixel[y][x][2] = 0;
      } else {
        Pixel[y][x][0] = c1;
        Pixel[y][x][1] = c2;
        Pixel[y][x][2] = c3;
      } //if

    } //for j
  } //for i

  NeoPixe_OUT(); //RBG LEDに出力

} //ch_8x8


//初期化
void setup() {

  //ネオピクセルの設定
  strip.begin();
  strip.show();

  //シリアルポートの設定
  //Serial.begin(9600);
  //Serial.println();
  //for (int i = 0; i < 9; i++) {
  //  Serial.print('.');
  //  delay(500); //接続待ち
  //} //for
  //Serial.println();

} //main


//メインループ
void loop() {

  for (int i = 0; i < 10; i++) {

    ch_8x8('0' + i, 64, 64, 64);
    delay(3000);  //3秒待つ

  } //for

} //loop


```
スプシと組み合わせると超絶便利なLLM関数(Sonar関数/GPT関数)

# はじめに
スプシと組み合わせて使うと超絶便利なLLMの使い方を紹介します！
今回はLLMを実行するGASの関数を作成し、調べ物やアイデアのブレストに便利な使い方を2つ紹介します。

# 前準備
- 以下のシートを開いて[ファイル]から[コピーを作成]し,コピー先のシートにて[拡張機能]から[App Script]を開く
 https://docs.google.com/spreadsheets/d/1IqFDPezIApIWGn8pvEw51TLGb2spsyiVyCQWmoaYh8U/edit?gid=1580424974#gid=1580424974
     ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353509/6969b0ea-83e1-2014-81ca-dd99cfe0adfa.png)

- sonerのapiを取得し,sonar_ai.gs内のコード内に貼り付ける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353509/5f9a3bc1-584d-655f-4fc1-95c1fbc5ae18.png)
- open aiのapi keyを取得し,gpt_function.gs内のコード内に貼り付ける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353509/d3d5aa31-e24a-73be-2494-9e4e6254631d.png)
※api keyの取り扱いは個人の責任で行ってください。
（とはいえ、どこかに送信する処理等ははしっておりませんのでご安心ください。）

# 使い方
### soner関数
検索して結果をまとめてもらいたいときに使います。
調べたい単語を入れる「=searchSonar()」の()の中に入れてください。
例えば「=searchSonar("スマート書記 運営会社")」です。
参照と組み合わせることで威力を増します。searchSonar(A1&" "&F$2)であれば「{A列の項目}  {2列目の項目}」などで検索することが可能です。
![タイトルなし2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353509/91552fdf-300e-e609-0884-c0a0c44aba2e.gif)



### gpt関数
アイデアのブレストや文章の変換に使えます
プロンプトを「=gpt()」の()の中に入れてください。
例えば「=gpt("100万円を漢字なしの数字だけに変換して")」などです。
参照と組み合わせることで威力を増します。gpt(A1&"を漢字なしの数字だけに変換して")であれば、「{A列の項目}を変換してくれます。
![タイトルなし.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353509/b114e573-1dfa-72e2-a8cd-92f3a598211f.gif)


# 注意点
関数として放置していると一定期間に一度、LLMが実行されてしまうことがあります。
生成が終わったら値としてコピペ（macならcommand + shift + V）して関数のまま残らないようにしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353509/e0bae40b-dbf7-71eb-21ed-d12a0771f604.png)