OmniAICreator/Qiita-1.07M huggingface dataset:
【MySQL】カラム定義を変更する際の注意点

# はじめに
ALTER TABLE MODIFY文でカラム定義を変更した際に、元の定義が削除されてしまったので、その原因と対処法について調べた内容まとめます。

# 結論
- ALTER TABLE MODIFY(またはCHANGE)でカラム定義を変更すると、新しい定義で上書きされる
- 元からあった定義は引き継がれない

>CHANGE または MODIFY を使用してカラム定義を変更する場合、PRIMARY KEY や UNIQUE などのインデックス属性以外の、新しいカラムに適用するデータ型およびすべての属性を定義に含める必要があります。 元の定義には存在するが、新しい定義として指定されていない属性は引き継がれません。

https://dev.mysql.com/doc/refman/8.0/ja/alter-table.html

### 例
- 変更前：employeesテーブルのdepartment_nameカラムに下記の定義がある状態
  - varchar(10)
  - 非NULL制約 あり
  - default値は"temp"
```
mysql> DESC employees;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| department_name | varchar(10)  | NO   |     | temp    |                |
```
- varchar(5)に変更するMODIFY文を実行
```
mysql> ALTER TABLE employees modify COLUMN department_name varchar(5);
```
- 変更後
  - varchar(5)
  - 非NULL制約 なし 　# 元の定義が削除された状態 
  - default値 なし　# 元の定義が削除された状態 
```diff
mysql> DESC employees;
 +-----------------+--------------+------+-----+---------+----------------+
 | Field           | Type         | Null | Key | Default | Extra          |
 +-----------------+--------------+------+-----+---------+------------
-| department_name | varchar(10)  | NO   |     | temp    |                |
+| department_name | varchar(5)   | YES  |     | NULL    |                |
```

# 対処法
-  ALTER TABLE MODIFYでカラム定義を変更する際は、元の定義も含めて実行する
-  ALTER TABLE MODIFYで設定できない定義は、ALTER TABLE MODIFY実行後に再設定する

### 例
- varchar(5)に変更するMODIFY文に元からの定義である `NOT NULL` を含めて実行する
```diff
- mysql> ALTER TABLE employees modify COLUMN department_name varchar(5);
+ mysql> ALTER TABLE employees modify COLUMN department_name varchar(5) NOT NULL;
```
- ALTER TABLE MODIFY文で設定しなかったdefault設定は削除される
```diff
mysql> DESC employees;
 +-----------------+--------------+------+-----+---------+----------------+
 | Field           | Type         | Null | Key | Default | Extra          |
 +-----------------+--------------+------+-----+---------+----------------+
-| department_name | varchar(10)  | NO   |     | temp    |                |
+| department_name | varchar(5)   | NO   |     | NULL    |                |
```
- default設定を再設定する
```
mysql> ALTER TABLE employees ALTER department_name SET DEFAULT "temp";
```
```diff
mysql> DESC employees;
 +-----------------+--------------+------+-----+---------+----------------+
 | Field           | Type         | Null | Key | Default | Extra          |
 +-----------------+--------------+------+-----+---------+----------------+
-| department_name | varchar(5)   | NO   |     | NULL    |                |
+| department_name | varchar(5)   | NO   |     | temp    |                |

```

### 追記
- 非NULL制約を設定する
```
ALTER TABLE テーブル名 MODIFY COLUMN カラム名 データ型名 NOT NULL;
```
- 非NULL制約を解除する
```
ALTER TABLE テーブル名 MODIFY COLUMN カラム名 データ型名;
```
Atcoder解いてみた　ABC 087 C Candies

# ABC 087 C Candies
問題は[こちら](https://atcoder.jp/contests/abc087/tasks/arc090_a)  

# 回答
```C++
#include <iostream>
#include <string>
#include <map>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;


int main() {
    // 2xNのマス目 (1<=i<=2, 1<=j<=N)
    int N; // 1<=, <=100
    cin >> N;
    int A[2][100];

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < N; j++) {
            cin >> A[i][j];
        }
    }

    // 右 or 下しか移動できない
    // どこで下に移動するか?
    // 下移動のパターン：N通り

    // 下移動のパターン：N通り 毎にスコアを求める
    
    int maxSumVal = 0;
    for (int j = 0; j < N; j++) {
        int sumVal = 0;

        // 1行目のスコアの和
        for (int l1 = 0; l1 <= j; l1++) {
            sumVal += A[0][l1];
        }
        // 2行目のスコアの和
        for (int l2 = j; l2 < N; l2++) {
            sumVal += A[1][l2];
        }

        if (maxSumVal <= sumVal) {
            maxSumVal = sumVal;
        }
    }

    std::cout << maxSumVal << std::endl;

    return 0;
}
```

[DPによる解法](https://blog.hamayanhamayan.com/entry/2018/01/28/225409)も要参考
ICLR2025の量子化論文 (1)

# 概要

この記事では、[ICLR2025](https://www.iclr.cc/Conferences/2025)の量子化論文を紹介します。[^1]


# CBQ: Cross-Block Quantization for Large Language Models

https://arxiv.org/abs/2312.07950

- 概要：LLMのPTQで、ブロック間の依存性を活用して量子化パラメータを学習する方法 (Fig. 2)


# SynQ: Accurate Zero-shot Quantization by Synthesis-aware Fine-tuning

https://openreview.net/forum?id=2rnOgyFQgb

- 概要：Zero-shot(データを使わない)量子化
- キモ：ローパスフィルタで合成データのノイズを最小化する。合成データはFig. 4のように学習する


# ViDiT-Q: Efficient and Accurate Quantization of Diffusion Transformers for Image and Video Generation

https://arxiv.org/abs/2406.02540

- 概要：DiT (Diffusion Transformer) 向け量子化方法
- キモ：量子化のグループを変える、量子化レンジの調整、混合量子化


# DGQ: Distribution-Aware Group Quantization for Text-to-Image Diffusion Models

https://arxiv.org/abs/2501.04304

- 概要：拡散モデルの量子化
- キモ：ピクセル毎とチャンネル毎の外れ値を見て、レイヤ毎に量子化パラメータを決める

# LeanQuant: Accurate and Scalable Large Language Model Quantization with Loss-error-aware Grid

https://arxiv.org/abs/2407.10032

- 概要：PTQで、最適な量子化グリッドを決める方法
- キモ：量子化によるロスの誤差が最小になるように量子化グリッドを決める。(5)式に基づいて、非一様量子化の場合は(6)式で、一様量子化の場合は(7)式で最適化
MacでF10キーを押すたびに英字の大文字・小文字を切り替える方法（Google日本語入力）

🕒 この記事は約２分で読めます
<br>


Mac でも F10 を押すたびに、
`hello → HELLO → Hello`
といった感じに表示を切り替えたい！！！

「英語は英字に切り替えてから入力すればいいじゃないか」という声が聞こえてきそうだが、せっかく入力したものを消して入力し直すのもなんだかダルい。

設定でなんとかならないものかと思って探していたら、見つけちゃったので、忘れる前に残しておこうと思う。

- macOS: Sequoia 15.4.1

## Google 日本語入力 をインストールする

https://www.google.co.jp/ime/

こちらから MAC 版をダウンロードしてインストールする

## ひらがな（Google） を有効にする
`システム設定 > キーボード > テキスト入力 編集`
左下の + ボタンから ひらがな（Google） を追加する

※ インストール直後は表示されない場合があるため、表示されない場合は PC を再起動する

## 表示切り替えを可能にする設定（← 本題）
１．メニューバー右上の「入力切替」アイコンをクリック
２．ひらがな（Google） を選択
３．「環境設定...」 をクリック（１．で表示したモーダル内にある）
４．キー設定の選択 で 「MS-IME」 を選択

## 「F1、F2などのキーを標準のファンクションキーとして使用」 にチェックを入れる
`システム設定 > キーボード > キーボードショートカット > ファンクションキー`
「F1、F2などのキーを標準のファンクションキーとして使用」にチェックを入れる

## おわりに
初期設定では「ことえり」になっているが、それを「MS-IME」に変えただけ。

ChatGPT先生曰く、「ことえり」という名前は「言（こと）の選（え）り」という言葉遊びから来ているらしい。
現在は「Apple日本語入力システム」に置き換えられ、進化しているとはいえ、個人的には変換精度が微妙で、使い心地が好きじゃない。
Windowsで長年慣らされてきたせいかも・・・。
NeurIPS2024の量子化論文 (3)

# 概要

この記事では、[NeurIPS2024](https://neurips.cc/Conferences/2024)の量子化論文を紹介します。[^1]

[その1](https://qiita.com/kyad/items/ef9d7bf6a177e2d8758d) [その2](https://qiita.com/kyad/items/463ade31f31492af55d1)

[^1]: 画像や数式は論文から引用しています。


# KV Cache is 1 Bit Per Channel: Efficient Large Language Model Inference with Coupled Quantization

https://arxiv.org/abs/2405.03917

- 概要：KV Cacheを量子化する時に、Per-channel量子化するのではなく、複数のChannelをまとめて量子化することで圧縮効率を高めて量子化する方法 (Fig. 3)


# Towards Next-Level Post-Training Quantization of Hyper-Scale Transformers

https://arxiv.org/abs/2402.08958

- 概要：aespa. PTQで量子化誤差最小化する時に、重み全体を同時に最適化するのではなく、Q,K,Vを別々に最適化することによって計算効率化


# BiDM: Pushing the Limit of Quantization for Diffusion Models

https://arxiv.org/abs/2412.05926

- 概要：BiDM. 拡散モデル向けに工夫して1bit量子化
2025年最新版：フリーランスエンジニア独立ガイド 

## 【2025年版】フリーランスエンジニアのリアルを全部晒す 〜単価・営業・心構え〜

> **「そろそろ会社を出て、フリーでやってみたい」**  
> **「でも案件ってどうやって取るの？ 単価は？ 税金とか準備とか…」**  
> そんな人に向けて、21歳で独立 → ゼロから年収700万ラインまで来た  
> **コギ（@Corgilover）** が、実体験ベースでまとめました。  
> ✍️ 気になることがあれば、**ゆるくDMで話しかけてもらって大丈夫です。**  
> > ⬇⬇⬇ Ｘアカウント（旧Twitter） ⬇⬇⬇  
> > **https://x.com/stringname21**

---

## この記事でわかること

|  | 内容 |
|---|---|
| 💸 **お金** | 単価の決まり方 / 見積もりの考え方 / 年収の目安 |
| 🛠 **営業** | エージェント / 直請け / SES BP の特徴と使い分け |
| 📚 **準備** | 開業・税金・契約書などの基本 |
| ⚔️ **実体験** | トラブル・失敗・やって良かったこと など |

---

## 年収イメージ（例：月単価70万の場合）

| 稼働 | 売上 | 経費(15%) | 税金＆社保(25%) | 手取り |
|------|------|------------|-------------------|---------|
| 月140h ×12か月 | 8,400,000円 | -1,260,000円 | -2,100,000円 | **5,040,000円** |

> 💡 補足  
> - 法人化で消費税や所得分散を活かせば、+100万円くらい増えることも  
> - 稼働140hは「そこそこ自由もほしい人」にちょうどいい目安です

---

## よくもらう相談ベスト3

### Q. 案件ってどう取るのが正解？
最初はエージェントで安心感を確保 → 徐々に直営業やBP開拓で粗利を伸ばすのが定番ルート。  
「この条件ってどう？」という話ならDMで壁打ちできます。

### Q. ポートフォリオないんですが…
いきなり完璧じゃなくてOK。  
「なにを作るか」より、「どう伝えるか」。簡単なアプリ＋文章だけでも十分通ります。

### Q. 税金・保険どうしたらいい？
開業届・青色申告・国保・iDeCo…この辺は一回整理すれば大丈夫。  
迷ったら聞いてもらって大丈夫です（テンプレもあります）

---

## 案件の探し方ざっくり比較（2025/05時点）

| 手段 | 速度 | 単価 | 難易度 | コメント |
|------|------|------|--------|----------|
| エージェント（Midworksなど） | ◎ | ○ | 低 | 最初の1件はここでも◎ |
| YOUTRUSTなどの直求人 | ○ | ◎ | 中 | 交渉に慣れてきたらおすすめ |
| SES BPルート | ○ | ○ | 高 | 商流に注意。でも粗利は取れる |
| X（Twitter） | △ | ◎ | 中 | タイミングと即レス力が大事 |

---

## 独立前にやっておくと安心なこと

- [ ] 開業届・青色申告承認書を出す
- [ ] 銀行口座をつくる（屋号付き可）
- [ ] 契約書の雛形を用意しておく（準委任・業務委託）※エージェント利用の場合不要
- [ ] 会計ソフト（MF確定申告など）を導入
- [ ] SNSや名刺で“見つけてもらう導線”を作っておく

---

## トラブル・失敗からの学び

- 案件が炎上したら、**「入る前に仕様と人数を確認すべし」**
- 支払いサイトが90日で、**キャッシュ枯渇しかけた話**
- 商流が深い案件で**提示単価に目がくらんで粗利ゼロ**

> 👉 教訓：キラキラ単価よりも、**条件確認とリスク回避が大事**。  
> わからない時に話せる相手がいるだけで変わります。

---

## もっと深掘りしたい方へ

> 📩 気になることがあれば  
> 「とりあえず聞いてみたい」でも全然OKです  
> → [https://x.com/stringname21](https://x.com/stringname21)  

- DMは24時間以内に返します  
- ごりごり営業とかしません！ 
- 相談ベースでも、ゆるく話したいだけでも大丈夫です🙆‍♂️

---

## おわりに

- フリーランスは「技術×営業×自分マネジメント」のバランス勝負  
- 最初からうまくいかなくても大丈夫。  
- ひとりで悩まず、**壁打ちでも雑談でも、気軽にどうぞ**  

→ [https://x.com/stringname21](https://x.com/stringname21)
【Next.js × XServer】静的サイトが本番で白紙になる原因と対処法まとめ

## はじめに

Next.jsの `next export` を使ってXServerにデプロイしている構成で、本番環境でページが白紙になる問題に遭遇しました。  
原因の特定と再発防止のための対応をまとめます。

## 問題：開発環境では動くのに、本番公開後に白紙画面になる

### 症状

- `npm run dev` では正しく表示される
- 本番ビルドして `out/` を XServer にアップすると、ページが真っ白
- Chrome DevTools では以下のようなエラー：

```text
https://example.com/_next/static/chunks/517-xxxx.js net::ERR_ABORTED 404 (Not Found)
```

## 原因：`.next/` が更新されていなかった、または `out/` に古いJSが残ったままだった

Next.jsでは、ビルド時に `.next/` 配下にJSファイルが生成され、それが `next export` により `out/_next/static/` にコピーされます。  
しかし、`.next/` が更新されていないまま export を実行すると、古いJSファイルがそのまま出力されてしまい、本番で404が発生します。

## 解決方法：ビルド前に `.next/` を削除して再出力

```bash
# 本番用ビルド手順（.env.production は事前に用意）
rm -rf .next
dotenv -e .env.production -- next build
npx next export
```

`.next/` を削除することで、毎回新しい `chunks/` が出力されるようになります。

## 再発防止のために

- CI（GitHub Actionsなど）では `dangerous-clean-slate: true` の使用を検討
- `FTP-Deploy-Action` を使う場合は `_next/` を除外しないよう注意
- デプロイ前後で `_next/static/chunks/` に新しいJSファイルが存在するか確認

## まとめ

静的出力を前提とする `next export` では、ビルド結果とexport結果の整合性が極めて重要です。  
今回のような「白紙＆JS 404」はそのズレが原因でした。  
静的デプロイ運用時には、`rm -rf .next` を習慣にしておくと安全です。
HTML&CSSの学習記録vol.1

# はじめに
まだインプット中心の学習でWebページ作成などのアウトプットはできていない。
RecursionのカリキュラムのほかにもYouTubeや書籍での学習もしていきたい。
# HTML&CSSの基礎を学んでわかったこと
### HTMLとは
Webページの骨組みを作成できるマークアップ言語（プログラミング言語ではないらしい）
様々なタグを使用して骨組みを作成していく
#### よく使用するタグ
`<h1>`　見出しを表示するタグ。数字の順に記述する。
`<p>`　文章の段落つけるタグ。
`<a>`　リンクを貼れるタグ。リンク先は`href`属性で指定。
`<img>`　画像を表示できるタグ。`src`属性で表示させたい画像を指定する。

### CSSとは
HTMLで作成したものの見た目を調整できるスタイルシート言語。
HTML内で`link rel="stylesheet" href="style.css"`と読み込ませないとCSSは適用されない。
#### よく使用するプロパティ
###### 文字や文章の装飾
`font-size`　文字サイズを指定する
`font-family`　フォントの種類を指定
`color`　文字に色を付ける
###### 背景の装飾
`background-color`　背景色を指定する
`background-image`　背景画像を指定する
`background-size`　 背景画像の大きさを指定する
###### 幅と高さの指定
`width`　幅を指定する
`height` 高さを指定する
###### 余白
`margin`　要素の外側の余白。半角スペースで区切って上・右・下・左（時計回り）の順で指定する。
`padding`　要素の内側の余白。半角スペースで区切って上・右・下・左（時計回り）の順で指定する。

他にもCSSのプロパティは多く存在する。ポートフォリオ作成時にはもっと多くのプロパティを駆使して作成できるようにする。
# これからの目標について
次はアウトプットも兼ねて簡単なWebページを作成していきたい。
ポートフォリオ作成時にはUI/UXにこだわりたいです。
# さいごに
転職時期の目標を早めたことでいろいろと焦りが出た一週間で思うように学習が進みませんでした。
やるべきことをしっかりと理解して、良い転職ができるように頑張ります！！
VAE（Variational AutoEncoder）理解のまとめ

生成モデルが流行っている昨今ですが、勉強してる際にまずVAEの理解の解像度を上げたくなり、理解をまとめることにしました。

## 生成モデルとは
生成モデルは、観測データが得られる確率分布を推定するモデル。例えば、サイコロを2回投げた時の目の和の分布を推定する場合、実際のデータから分布のパラメータθを最適化することで、データの生成過程を理解することができる。

## VAEの基本概念
1. **潜在変数を持つモデル**
    - 潜在空間に「多変量正規分布」を仮定し、そこから潜在変数をサンプリング
    - ニューラルネットワーク（デコーダ）を用いて、潜在変数から観測データを生成
    - GMMも同様に「潜在変数を持つ」が、GMMのような混合分布構造ではなく連続的潜在空間
　     
2. **多様体仮説に基づく設計**
    - 高次元データ（例：784次元のMNIST画像）が、より低次元（例：20次元）の潜在空間（多様体）上に表現されると仮定
    - データの本質的特徴を低次元で捕捉し、生成やクラスタリング、補間が可能

### VAEの特徴
1. **連続的な潜在空間**
    - 潜在変数zは、多変量正規分布（通常は平均0、分散1）からサンプリングされる連続値ベクトル(GMMはカテゴリカル分布から取得される離散値を仮定している)
    - 潜在空間上の近い点同士は似たデータを生成し、多様で滑らかな表現が得られる
    - 潜在空間内での補間によって、新しい中間的なデータも自然に生成できる
　　
2. **確率的な生成過程**
    - デコーダは、潜在変数zから観測データxの確率分布のパラメータ（例えば正規分布の平均や分散、あるいはベルヌーイ分布のパラメータ）を出力
    - この分布からサンプリングすることで、同じzでも生成データに多様性を持たせることができる
    - モデル全体が確率的設計になっているため、ランダム性や多様性のある生成が可能

### VAEの学習と推論の流れ

#### 1. **学習時**
- エンコーダによって入力データ x を潜在変数 z の分布（平均ベクトルと共分散行列）にマッピング
- その平均ベクトルと共分散ベクトルをおいた正規分布から潜在変数zをサンプリング
- そのサンプリングによりzを得て、デコーダでzからデータx_hatを再構成
- 損失関数は「再構成誤差（ELBO）」と「KLダイバージェンス（潜在分布と標準正規分布の距離）」の和
- KLダイバージェンスが潜在空間を標準正規分布に近づける正則化項として働く

#### 2. **生成時**
- 学習済みデコーダを使い、標準正規分布からサンプリングしたzをデコーダに入力
- デコーダから新規データ（例：画像）を生成
- 潜在空間上の異なるzを使うことで、多様な新規データや、z間の補間による滑らかな変化も表現可能

## 学習・推論実装
調べると実装コード多々出てくるのでここでは紹介のみ。
ゼロつく５本での実装がリポジトリで公開されてます。私もこれで勉強させてもらいました。
https://github.com/oreilly-japan/deep-learning-from-scratch-5/blob/main/notebooks/07_vae.ipynb

## まとめ
生成モデル、具体的には拡散モデルを勉強する上でVAEの基礎部分の解像度を上げるために資料読んで学んだことをまとめてみたらかなりあっさり目になってしまった。まだ条件付きや階層型があるがまた機会があればまとめてみたいと思います。


## 参考文献
- ゼロから作るDeep Learning 5. https://www.oreilly.co.jp/books/9784814400591/
- Variational Autoencoder徹底解説. https://qiita.com/kenmatsu4/items/b029d697e9995d93aa24
- 龍野翔 (2016). 猫でも分かるVariational AutoEncoder. https://www.slideshare.net/slideshow/variational-autoencoder-64515581/64515581
- まつけん (2017). Variational Autoencoder徹底解説. https://qiita.com/kenmatsu4/items/b029d697e9995d93aa24
キーボードのこだわりを語るだけ

私がキーボードを使う上でこだわるポイントは以下の通りです。
- スイッチ(静電容量無接点方式)
- キー配置
    - Ctrlの位置
    - Fnの位置
    - ショートカットキー
- キーの見た目


## スイッチ
そもそも物理的なスイッチが存在しないので、反応速度が速い。

## キー配置

**CapsLock**と**Ctrl**を入れ替えて、元のCtrlの位置を無効化しています。

![71xHDyPq2fL._AC_UF1000,1000_QL80_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635999/1d361899-6d18-4e69-a625-6cf411885787.jpeg)

**無変換**の位置をFnキーに割り当てています。

![71xHDyPq2fL._AC_UF1000,1000_QL80_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635999/24a7097a-7c01-4703-a3ac-33dee4ca5ab4.jpeg)

**無変換**を使ったショートカットキーを設定しています。


**矢印キー**
**←→↑↓**のショートカット
**Fn + JLIK**
ホームポジションをいかに動かさずに矢印キーを割り当てられるかということを考えてJLIKを設定しました。
**元無変換**はFnにかわっているので親指で押し、右手はホームポジションを動かさずに矢印キーを操作できます。

**Ctrl + End** 
これはカーソルの位置を末尾に持っていくショートカットキーです。
**Fn + E**に割り当てることによって左手の親指と中指のみで末尾に移動できます。

似た機能に、**Ctrl + Home**があります。
このショートカットキーは文の最初の一にカーソルを持っていくことができます。
**Fn + H**でホームポジションをほとんど移動せずに操作することが可能です。

## キーの見た目
キーの見た目も割とこだわりがあります。
こんな感じの黒に黒のデザインが好きです。
これでもまだちょっと手元がうるさく感じて、もう何も書かれていなくてもいいぐらいですね
![photo_5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635999/a52dc6dd-27c9-4466-8319-557154ad5945.jpeg)

**どうせ手元なんて見ない**ので文字の色はできるだけ目立たないほうが好きです。

Realforceシリーズのキーボードは高いけどすごく手の負担軽減にもつながるし、打っていて楽しいのでぜひ使ってみてね！
キー配置も反応位置も自由に変えられるから自分好みにできるよ！

よくタイピングする私にはピッタリのものです。
値段はそれなりにしますが、不意に壊れることはほぼないので安心して使い続けられます。

実際に使っているFnのキーマップ入れ替え
このマップでは、Fnキーを押している間のキー配列を表しています。
なるべくホームポジションを崩さずにバックスペースや矢印キー、ショートカットキーなどが使えるように設定しています。

![スクリーンショット 2025-05-27 215748.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635999/d9b079d6-8f54-4e3c-85a4-bbdf87a34a31.png)
【ServiceNow】バッチ更新ジョブで大量のレコードを安全に更新する

:::note
バージョンはXanaduです。
:::
案件で本番リリース後に、リリース前に起票されたレコードの項目に特定の値を設定するデータパッチを実施しました。
今回は安全のため、ServiceNow標準で用意されているバッチ更新ジョブ機能を採用しました。

### バッチ更新ジョブ
[レコードを安全に更新する](https://www.servicenow.com/docs/ja-JP/bundle/yokohama-platform-administration/page/administer/managing-data/concept/updating-records-safely.html)
ノーコードでトランザクションデータを更新できる機能です。
今回はインシデントの2万件のレコードを更新します。

1. バックグラウンドスクリプトで2万件のテストレコードを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/5d5b8f05-1380-471a-8030-6fb877bb90b9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/292dfd60-80bf-4b61-9ff5-d48379d0ef74.png)

2. ［システムデータ管理］＞［ジョブを更新］メニューをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/192ee34c-2116-403d-a12b-65c2959322d7.png)
3. ［新規］ボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/59bf0535-ee66-4e5b-907a-353292a6b98c.png)
4. バッチ更新ジョブを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/6011140c-83cd-456b-b719-4e2cdca3e744.png)
①：対象のトランザクションテーブルを選択
②：［プレビュー］をクリックするとデータパッチ対象のレコードを自動でカウントしてくれる
③：データパッチ対象とするレコードの条件をフィルタ条件で指定
④：どの項目にどんな値を設定するか、フィルタ条件で指定
⑤：Trueに設定すると、データパッチで「更新者」などの項目が自動で更新される。今すぐ実行すると実行ボタンを押したユーザーで、日時指定で実行すると「System」で更新される
⑥：Trueに設定するとレコード更新をトリガーとするビジネスルールやフローが動く。PJで実行した際はFalseに設定しました
5. ［続行］ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/8e6c769a-b5bf-48ed-8b48-f59b14566ab3.png)
関連リンクから［今すぐ実行］するか、実行場所[run_at]（実行時間）を設定して、データパッチをスケジュールする。夜間データパッチを実施するときなどは後者が良い

6. 実行場所を設定して［更新］ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/c02fc471-ac9c-4f47-a81d-1d4c79c57eaa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/6fc889ab-e174-43c0-b132-69dc67c16073.png)
7. バッチ更新ジョブが作成される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/4633b246-a9e9-4430-bf99-37c240e6fe0f.png)
指定した時間に自動でデータパッチされます。
### 注意
* 作成されたバッチレコードは一度だけ実行可能です。定期的にデータを更新したいなどの目的には合いません。
* テストとしてあえてまったく同じ時刻に複数のバッチをスケジュールして実行しようとしたところ、指定した時刻にデータパッチが実行されないエラーが起きました。複数のデータパッチを実行する場合は時間をずらしてスケジュールするのがよさそうです（参考：インシデントの2万件のレコード更新に掛かった時間は約40分でした）。

### 余談
はじめはバックグラウンドスクリプトで数千件ずつ更新するかな...と考えていましたが、ちょうど本番リリース前に他の案件でバックグラウンドスクリプトから大量のレコードを更新しようとして原因不明のエラーになったという話を聞いて、より安全な方法はないかと探してみたところ発見しました。
リリース作業でデータパッチを実施することは多いので、公式が提供する安全な方法として今後も採用したいです。
Atcoder解いてみた　ABC 079 C - Train Ticket

# ABC 079 C - Train Ticket
問題は[こちら](https://atcoder.jp/contests/abc079/tasks/abc079_c)  

# 回答
```C++
#include <iostream>
#include <string>
#include <map>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;


int main() {
    // 0<=, <=9

    string S;

    cin >> S;

    // 答えが出たらbreak
    for (int d1 = 0; d1 < 2; d1++) {
        for (int d2 = 0; d2 < 2; d2++) {
            for (int d3 = 0; d3 < 2; d3++) {
                int tmp1;
                int tmp2;
                int tmp3;

                if (d1 == 0) tmp1 = (S[0] - '0') + (S[1] - '0');
                else if (d1 == 1) tmp1 = (S[0] - '0') - (S[1] - '0');

                if (d2 == 0) tmp2 = tmp1 + (S[2] - '0');
                else if (d2 == 1) tmp2 = tmp1 - (S[2] - '0');

                if (d3 == 0) tmp3 = tmp2 + (S[3] - '0');
                else if (d3 == 1) tmp3 = tmp2 - (S[3] - '0');

                if (tmp3 == 7) {
                    std::cout << S[0];

                    if (d1 == 0) std::cout << '+';
                    else if (d1 == 1) std::cout << '-';

                    std::cout << S[1];

                    if (d2 == 0) std::cout << '+';
                    else if (d2 == 1) std::cout << '-';

                    std::cout << S[2];

                    if (d3 == 0) std::cout << '+';
                    else if (d3 == 1) std::cout << '-';

                    std::cout << S[3];

                    cout << "=7" << endl;
                    return 0;
                }
            } //d3
        } //d2
    } //d1
    return 0;
}
```  

### 注意
式を全ての文字列で出すとWAになってしまった、、、  
=7は文字列で良かったが、それ以外の記号と数字は全て文字でださないとダメだった、、、
AI指示書 永遠にβ版

覚書程度に。
場当たり的に作っては直すので参考にはならないと思いますが…

```
# 指示書

S=内部知識,M=検索,DM=検索結果,P=解決策,R=URL,O=出力
TYPE=[code|arch|chat],出力調整={c:最小限/事実, a:分析/中程度, h:共感/詳細},言語=日本語

## 原則

@evidence_first: 論理・証拠優先
@critical: 結論を常に検証  
@honest: 不確実性を正直に伝達
@disproof: 常に反証を検査

## ソース管理

主要:DM, 代替:S(古い可能性), 表示:ソース必須明記, URL:DM 実在のみ

## エビデンス・完全性

検索クエリ列挙, URL 列挙, 信頼度 0-10(7 未満=低信頼), 矛盾時両方提示
重要主張は DM/S 裏付け必須, 推測は明記, 偽造禁止

## フロー

**code**: 技術特定 →M→DM 検証 →P 生成 →O(コード+説明+R)
**arch**: O(設計+案 2 ～ 3→ 判断基準:推奨案+ソース)  
**chat**: O(対話+推論+ソース)、長期対話時も cite 維持

## 手順

1. 「最初からクライマックスだぜ！！」と叫び全集中
2. タイプ判定 → フロー実行
3. M→DM 収集 → 検証(失敗時 S 使用+通知)
4. DM 不適切時追加検索
5. P 複数生成 → 評価 → 選択
6. ギャップ・不確実性明記
7. バージョン確認・エビデンス含む
8. URL 実在確認
9. 出力(ソース・時刻付)

## 品質・ツール

**品質**: 可読性/性能/セキュリティ/保守性, 複雑性回避, コメント原則禁止
**MCP**: claude_code 優先
**ファイル**: 変更前全体検査 → 変更後影響明示

## 警告

S 使用時:「注意:検索失敗のため内部知識使用。古い可能性」
**重要**: 構造厳守、無視時リセット
```

略語は適当、叫ぶ必要性はない（気分で入れてる）
絵文字とか使ってくるので感情表現を控えるように追加する必要があるかも
GitHubとは？

##  GitHubってなに？

GitHub（ギットハブ）は、**ソースコードを保存・共有・管理できるWebサービス**です。世界中の開発者が利用しており、プログラムのバージョン管理を行う「**Git**」という仕組みをWeb上で使えるようにしたものです。

>  開発者だけでなく、デザイナーやライター、学生など、さまざまな人が利用しています！

---

##  Gitとの違いは？

| 項目 | Git | GitHub |
|------|-----|--------|
| 種類 | バージョン管理システム | Gitを利用したWebサービス |
| 利用環境 | ローカル（自分のPC） | クラウド（インターネット上） |
| 主な役割 | ソースコードの履歴管理 | ソースコードの保存・共有・共同開発 |

---

##  GitHubでできること

-  ソースコードのバックアップ
-  チームでの共同開発（**コラボレーション**）
-  プロジェクト管理（Issues, Projects）
-  変更履歴の確認やロールバック（Revert）
-  他人のプロジェクトをフォーク（Fork）して再利用
-  GitHub PagesでWebページ公開

---

##  よく出てくる用語

| 用語 | 意味 |
|------|------|
| リポジトリ（Repository） | プロジェクトのデータが入っている箱。 |
| コミット（Commit） | ファイルの変更を保存すること。 |
| プルリクエスト（Pull Request） | 変更の提案。レビューしてもらってマージ。 |
| フォーク（Fork） | 他人のリポジトリを自分のアカウントにコピー。 |
| クローン（Clone） | リポジトリをローカルにコピー。 |

---

## 💻 GitHubを始めるには？

1. [GitHub公式サイト](https://github.com/) にアクセス
2. 無料アカウントを作成
3. GitをPCにインストール
4. リポジトリを作成し、コードを管理！

---

##  まとめ

GitHubは、**ソースコードを効率的に管理・共有できる最高のツール**です。初心者でも、少しずつ使っていくことでその便利さが実感できます。ポートフォリオ作成やチーム開発の第一歩として、ぜひ使ってみましょう！

---

>  学生や個人開発者には特におすすめ！GitHubで自分の成長を記録してみましょう。
子コンポーネントのPATCH処理時に親が再レンダリングしてしまう

## 概要

React + Vite + json-server を使った開発環境で、子コンポーネントでPATCH処理を実行すると親コンポーネントが予期せず再レンダリングされる現象に遭遇しました。

子コンポーネントは親の状態を一切更新していないし、何をトリガーに再レンダリングされるのか分からずハマってしまいました。

結果的には **ViteのHMR（Hot Module Replacement）** が原因でした。

## 現象

子コンポーネントでjson-serverにPATCH リクエストを送信すると、親コンポーネントが即時再レンダリングされる。

```typescript:TaskList.tsx（親コンポーネント）
const fetchTasks = async (): Promise<Task[]> => {
  console.log("APIからタスクを取得中...");
  const response = await fetch("http://localhost:3000/tasks");
  return response.json();
};

const fetchTasksPromise = fetchTasks();

export function TaskList() {
  const tasks = use(fetchTasksPromise);

  return (
    //　〜省略〜
      {tasks.map((task) => {
        return <TaskItem key={task.id} task={task} />;
      })}
    //　〜省略〜
  );
};

```

```typescript:TaskItem.tsx（子コンポーネント）
export function TaskItem({ task }: { task: Task }) {
  const handleComplete = async () => {
    await fetch(`http://localhost:3000/tasks/${task.id}`, {
      method: "PATCH",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ completed: !task.completed }),
    });
  };

  return (
    //　〜省略〜
      <button onClick={handleComplete}>
        ボタン
      </button>
    //　〜省略〜
  );
};
```

## 原因

以下の流れで親コンポーネントが再レンダリングされていたようです。

1. **PATCH処理で`db.json`が更新される**
2. **Viteが`db.json`の変更を検知する**
3. **HMRが発動してモジュールが再読み込みされる**
4. **再読み込みにより`fetchTasksPromise`が再作成される**
5. **データが更新されているため`TaskList`が再レンダリングされる**

## 解決方法

ズバリ`db.json`を監視対象から除外すればOKです。

```javascript:vite.config.js
export default {
  // 〜既存の設定〜
  server: {
    watch: {
      ignored: [
        '**/db.json', // json-serverのDBファイルを除外
      ]
    }
  }
}
```

## まとめ

HMRって自分でファイルを編集したとき以外にも発動するんだ〜って勉強になりました。（あたりまえか…）
【SilverSQL】その他

# その他

```sql:問題
SELECT
    TO_CHAR(TO_DATE('95/12/31', 'RR/MM/DD'), 'YYYY/MM/DD') RR,
    TO_CHAR(TO_DATE('95/12/31', 'YY/MM/DD'), 'YYYY/MM/DD') YY
FROM
    dual;
```
```:結果
1995/12/31 2095/12/31
```

```sql:問題
SELECT
    TO_CHAR(TO_DATE('2012-Apr-25','YYYY-Mon-DD'), 'DDTH "of" FMMonth, YyyySP')
FROM
    dual;
```
```:結果
25TH of April, Two Thousand Twelve
```

![kkkk49194.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846917/57245744-c226-4182-8f1b-0ef1297f3cf2.jpeg)

* 埋め込みモードを無効にするには、日付書式に「FM」を指定します。
設問では、「01st」ではなく「1st」、また「June」の後ろにスペースがないことから、埋め込みモードを無効にして問合せを実行したことがわかる。

```sql:問題
SELECT
    TO_CHAR(SYSDATE, 'fmDdth "of" Month, YYYY')
FROM
    dual;
```
```:結果
1st of June, 2012
```

```sql:問題
SELECT
    TO_CHAR(7777.777, 'L9,999')
FROM
    dual;
```
```:結果
¥7,778
```

### グループ関数
グループ関数は複数件の入力データをグループ化して、集計処理を行った結果を１つだけ戻す関数で、複数行関数や集計関数と呼ばれることもある。

![kkkk48963.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846917/1dc0a28c-3f03-4303-b4d1-55127ffebb69.jpeg)

#### LISTAGG
```sql
LISTAGG(連結して表示する列名 [, 'デリミタ'])
WITHIN GROUP(ORDER BY ソートする項目 [ASC | DESC])
```

* グループ関数は2レベルまでしかネストできません。しかも、GROUP BY句を指定した場合に限る。
```sql:問題
SELECT
    MAX(MIN(AVG(salary))) "Sal"
FROM
    employees
GROUP BY 
    department_id, 
    job_id;
```

* グループ関数を使用できるのは、SELECT句、ORDER BY句、HAVING句のみです。WHERE句ではグループ関数を使用することはできない。

```sql:問題
SELECT
    employee_id,
    employee_name,
    salary
FROM
    employees
WHERE
    AVG(salary) > 350000;
```

####  GROUP BY句と同様、HAVING句を使用する際にはいくつかの要件を満す必要がある。
* HAVING句に列別名を指定することはできない
* HAVING句にはGROUP BY句で指定した列、もしくはグループ関数のみ指定できる

HAVING句で取り出すグループを制限するのは、以下の4のタイミング。
1. WHERE句がある場合は、グループ化する前にWHERE句の条件で行を制限する
2. GROUP BY句に従ってグループ化する
3. グループ関数を適用する
4. HAVING句の条件で取り出すグループを制限する


* GROUP BY句ではRR書式に変換しています。このようにSELECT句とGROUP BY句のデータ型の変換が異なると、エラーになる。
```sql:問題
SELECT
    TO_CHAR(order_date, 'YYYY') 
    ,SUM(order_total)
FROM
    orders
GROUP BY
    TO_CHAR(order_date, 'RR');
```

* グループ関数をネストする場合は、必ずGROUP BY句を指定しなければなりません。
```sql:問題
SELECT
    AVG(MIN(salary))
FROM
    employees;
```

* グループ関数では、COUNT関数に引数に*(アスタリスク)が指定された場合を除き、NULL値を無視して集計処理を行う。

* HAVING句にはグループ関数とGROUP BY句に指定されている列を指定することができます。列別名を指定することはできない。
* 条件にグループ関数を使用する場合は、WHERE句ではなくHAVING句で指定する。
* WHERE句の条件にグループ関数を使用することはできない。
* COUNT関数は取り出されたデータの件数を返す関数。
* 引数には列名や数値型、文字列型、日付型の値を返す式の他、*(アスタリスク)を指定できます。

* SELECT文にWHERE句、GROUP BY句、HAVING句を同時に指定する場合は、WHERE句、GROUP BY句、HAVING句、またはWHERE句、HAVING句、GROUP BY句の順に指定する。
* WHERE句にはGROUP BY句で指定した列は指定できないので、エラーとなる。
* HAVING句ではグループ関数をネストできない。

* COUNT、MAX、MIN、SUM、AVG関数の引数には、次の値を指定する。
* COUNT関数　 ： 数値型、文字列型、日付型の値を返す式または列と*(アスタリスク)
* MAX/MIN関数 ： 数値型、文字列型、日付型の値を返す式または列
* SUM/AVG関数 ： 数値型の値を返す式または列
* GROUP BY句には1つ以上の列を指定する
* GROUP BY句に列別名を指定することはできない
* GROUP BY句を指定したSELECT文のSELECT句には、GROUP BY句で指定した列、もしくはグループ関数のみ指定できる
（select句に指定したグループ関数以外の列はすべてgroup by句で指定する必要がある）
* GROUP BY句とORDER BY句を併用する場合、ORDER BY句にはGROUP BY句で指定した列、もしくはグループ関数のみ指定できます
（グループ化されている列の値を、グループ化されていない列の値を基準に並べ替える事はできない為）

SELECT文に指定する句の順序は、
1.SELECT句
2.FROM句
3.WHERE句
4.GROUP BY句
5.HAVING句
6.ORDER BY句
です。ただし、GROUP BY句とHAVING句は入れ替えができる。
Unityの日本語化モジュールインストールが検証中のまま進まない

# 結論
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043084/69d421df-4df1-4258-a8a4-03fa7cc034a4.png)
モジュールのインストール時にデフォルトでチェックされている **Microsoft Visual Studio Community** のチェックを外してリトライする。

# 原因
すでにVisual Studioがインストールされてる場合は競合して検証が終わらないっぽい？
Claude4 x Claude Codeで半日でランディングページを制作した話🚀

# ClaudeでLPデザインが半日で完成✨
3日前にリリースされたClaude Opus 4 + Claude Codeで試してみました！
🔶友人の新規事業で実践投入するLPをデザイン
🔶プロに発注するのと遜色ない仕上がり
🔶半日で100往復以上会話してデザイン進行

※リリース前の事業のため、残念ながらデザインの中身は公開できず🙇‍♂️

以下、詳細をご紹介します！
1️⃣デザイナーへの発注との比較
2️⃣制作プロセス
3️⃣Claude Web版とClaude Codeの使い分け

# 💡デザイナーへの発注との比較
:::note info
結論：デザイナーでなくても、Claudeで短期間で満足のいくクオリティのLPを作れるようになった🚀
:::
- 信頼できる＆すぐに発注できるデザイナーがいない場合、デザイナーを選定して発注する手間がかかるが、それに時間をかけてる間にClaudeでデザインが完成しそう
- 異なる構成やデザインシステムの案を5パターン作成して比較するといった、人間だと負担のかかる作業を気兼ねなく依頼できるおかげで、イメージ・方向性をすり合わせやすい
- 「LPを作る対象がどんな事業なのか」「その事業カテゴリでの集客のベストプラクティス」など、手元文書やDeep Research結果の超長文を全部読ませて、UX設計やコピーライティングができるのでクオリティを上げやすい
- 「もっとxxなデザインにしたい」→「来週、改善案を持ってきます」といった待ち時間が発生せず、即座に改善サイクルを回せるので制作進行が爆速
- 少しでも違和感がある部分があれば何度でも修正できるので、クオリティを上げやすい（人間相手だと遠慮してしまうし、修正はx回までと制約がある場合も）

ただし、Claude等のAIツールを使いこなす一定のITリテラシーと、ビジネスで効果を生むLPは何かという判断能力を有している必要はある。

本職のデザイナーがAIツールを活用すると爆速で高クオリティの価値提供ができるようになりそう。また、起業家やProduct Managerが使いこなせると事業の進行がスムーズになりそう。

# 💡制作プロセス

:::note warn
📝STEP1〜3はWeb版のClaude Opus 4で実施（会話50往復くらい）
:::

## ⭐️STEP1：全体像をデザイン
- Deep Researchで「xx事業のLPをデザインする時のベストプラクティスをまとめて」を依頼
- ChatGPT, Gemini, Claude, Grokで回答を4種類作成し、それをClaudeに投げてLPデザインの草案を4パターン作成
- Gemini生成のベストプラクティスが一番長文で詳細だったおかげかイメージに近く、GeminiのLP案を採用して制作開始

:::note info
この時点で「ビジネスで効果を生む」構成のLPの型ができる
:::

## ⭐️STEP2：デザインシステムの適用
- 「xx事業で、xxがターゲット層、xxなトーンのサービスのデザインシステムを作成して」でプライマリー・セカンダリーカラーなどデザインのトーンを複数パターン作成
- STEP1のLPに複数パターンを適用してみて、最もイメージに近かったものを採用して制作継続

:::note info
この時点で「ターゲット層のトーンに合う」デザインになる
:::

## ⭐️STEP3：キャッチコピーのリライト
- 事業概要、ターゲット層、ペルソナなど事業に関する文書を全て投入し、キャッチコピー等のテキスト情報を全体的に書き直してもらう

:::note info
この時点で「ターゲット層に響く」メッセージのサイトの土台ができる
:::

## ⭐️STEP4：UIレイヤーの調整

:::note warn
📝STEP4は修正が細かくなるため、CursorにClaude Codeをインストールして作業（会話80往復くらい）
:::

- 「この部分をもっとこうしたい」はCursorで差分を見ながら作業する方が楽（意図せず他の箇所まで影響が及ぶのを防げるため）
- 実際の写真やアイコン画像を反映するといった作業は、ファイルシステムまで管理する必要があるため、ClaudeのWeb版は限界があるためClaude Codeで実施
- アイコン画像の生成はClaudeでもできるが、ChatGPT o3の方が精度が高かったのでo3を利用
- 細かい文言は自分で直接ファイルを修正した方が早いので手修正

:::note info
ここまでで「細部までこだわり抜いた」LPデザインが完成
:::

# 💡Claude Web版とClaude Codeの使い分け

:::note info
結論：大枠のデザインはWeb版で進め、細部を詰める段階でClaude Code
:::

- 大枠のデザインを複数パターンを生成して比較するといったコードを見ない段階では、Web版で同時並行で作業させる方が楽
- Claude CodeよりもWeb版の方が履歴が確認しやすいので、A案（70点）を元に作業を進め、たまにB案（50点）とC案（30点）の良いところだけをA案に反映するといったことがやりやすい
- Web版で生成したページは簡単に共有用URLを発行できるので、複数人でコミュニケーションを取りながら進める段階ではWeb版の方がやりやすい
- 修正箇所が細かくなってきて1人で黙々と作業する段階は、Cursor x Claude Codeでコードの差分を見ながら作業する方が進めやすい
- 変更したい箇所とは違う箇所まで変更されてしまうことが度々あるため、大枠をデザインする時は問題ないが、細部を詰めていく段階では差分を確認しながら着実に進めたい

Claude Codeを使うあたりから要求リテラシーが一気に上がるので、難しければWeb版でも作業は継続できるし、自分一人で頑張らずにデザイナーやエンジニアに任せるのもアリ。
ObsidianとGitの連携中にfatal: refusing to merge unrelated historiesエラーが出た。

## 原因
obsidianの初期コミットとgithub自体の初期コミットが別々で行われてしまったため。無関係な歴史同士を結合出来ないよというエラー。

## 解決方法
**GitBashで「無関係な歴史」を許可してマージする。**

1.該当フォルダをターミナルで開く

コマンドは省略・・・

2.念のためリモート名とブランチを確認する。

```
git remote -v
# 多分originがhttps://～なんちゃらって出る。

git branch
# mainって出るはず

```

3.` --allow-unrelated-histories` を付けてpull
```
git push origin main --allow-unrelated-histories
```
masterの人は`origin master`で置き換えてください。
もしこのタイミングでコンフリクトが出たら修正しましょう。ここでは省きます。

4.最後にプッシュするだけ

```
git push origin main
```
自宅のubuntuサーバにDockerでOracleDB21eeを導入してみる

自宅のサーバにDockerでOracleDB21eeを導入してみます。
いろいろな情報があって、うまくDockerでビルドできなかったり、XEであったり。自宅学習用のEEエディションを構築してみます。

まずは、自宅のサーバ（ここではubuntu）に展開していきます。
Ubuntu 22.04.5 LTS
Release:	22.04
Codename:	jammy
以上が環境

ローカル環境からDBアクセスするため、Win環境のローカル端末に以下を導入します。

SQL Developer 24.3.1
https://www.oracle.com/jp/database/sqldeveloper/technologies/download/

❖ここからサーバに入って作業
Dockerはあらかじめ自分で導入してね！

1.git clone https://github.com/oracle/docker-images.git
2.cd docker-images/OracleDatabase/SingleInstance/dockerfiles　（自分のHomeに作られているはず）
3.ubuntu-firefoxから
  https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
  にアクセスし、任意のフォルダにダウンロードする。
  要IDなどの入力
  ダウンロードするのは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77469/13625ba1-309d-465d-a778-674c5c665463.png)
zipが必須、PRMとかではない。

これを、ocker-images/OracleDatabase/SingleInstance/dockerfiles
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77469/c56e424c-cbfd-40a6-b638-e2958beaea23.png)
該当のversionに移動またはコピーする。

コピーが終わったら、該当のファルダに移動し、
./buildContainerImage.sh -v 21.3.0 -e
でイメージをビルドする。

イメージの起動（データ永続化なし）
docker run -d --name oracle21ee \
  -p 1521:1521 -p 5500:5500 \
  -e ORACLE_PWD=Oracle123 \
  -e ORACLE_CHARACTERSET=AL32UTF8 \
  oracle/database:21.3.0-ee

データ永続化あり
docker run -d --name oracle21ee \
  -p 1521:1521 -p 5500:5500 \
  -e ORACLE_PWD=Oracle123 \
  -e ORACLE_CHARACTERSET=AL32UTF8 \
  -v /your/local/path/oradata:/opt/oracle/oradata \
  oracle/database:21.3.0-ee

-vオプションで永続化先を指定。指定先はあらかじめ自分で用意する必要がある。
フォルダの所有権に気をつけること。
mkdir -p /your/local/path/oradata
chmod 777 /your/local/path/oradata  # アクセス権を緩める必要がある場合あり


SQL Developerからの接続
Nameは任意の覚えやすいもの
ユーザー名はsystem
パスワードは、イメージ作成時に指定したもの（ここではOracle123）
ホスト名はサーバIP（localhostじゃ繋がらない。）
サービス名にorclpdb1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77469/40285554-1dd9-4f77-8834-6316f1d816e7.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77469/7d6af8d7-28cc-49a1-be53-72403edcf484.png)


以上で接続できるはず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77469/ccef45bc-f49e-470d-acdc-0cbb11ade637.png)

あとは、自由にPDB変えたり、テーブル作ったりできる。
ただ、私のサーバ物理環境ではHDDのアクセス音がひどいため、夜間はOracleだけ停止している。

なかなか、お手軽に導入する記事を見つけることができなくて、そんな人用に書いてみています。
XEと遜色なくお手軽に導入できるけど、くれぐれも開発用・勉強用でのみEEは使用できるのでお忘れなく。
コードレビューの効果的な進め方

# はじめに

コードレビューは、ソフトウェア開発において品質向上や知識共有を実現する重要なプロセスです。しかし、適切な方法で実施しないと「時間がかかる」「チームのモチベーションが下がる」などの問題が発生します。  
この記事では、**効果的で生産性の高いコードレビューを実施するための具体的な手法**を解説します。レビュアーとレビュイー双方の視点から、すぐに実践できるテクニックを厳選しました。



# 1. プルリクエスト（PR）を最適化する

## 小さなPRを作成する
- **300行以内**を目安に、1PRで1つのタスクのみを扱う
- 大きな機能は「機能フラグ」で分割し、段階的にマージする
- 例：認証機能の実装 → 「ログイン画面」「API接続」「エラーハンドリング」に分割

## PRテンプレートを活用する
```markdown:template
## 変更内容
- [ ] 機能Aの実装
- [ ] テストコード追加

## 関連チケット
https://issue-tracker.com/123

## 検証方法
1. ローカルで`npm run test`を実行
2. ブラウザで動作確認

## 注意点
- データベースのマイグレーションが必要
```



# 2. レビュアーの効率を最大化する

## 静的解析ツールで自動化
| ツール種類       | 代表例                 | 効果                      |
|------------------|-----------------------|---------------------------|
| Linter          | ESLint, RuboCop      | コーディング規約違反の検出  |
| Formatter       | Prettier, Black      | コードフォーマットの統一    |
| セキュリティ検査 | SonarQube, Snyk      | 脆弱性の早期発見            |

## チェックリストで網羅性を確保
```markdown:checklist
- [ ] コードが仕様を満たしているか
- [ ] テストカバレッジが基準を超えているか
- [ ] ドキュメントが更新されているか
- [ ] パフォーマンスへの影響がないか
```


# 3. コミュニケーションを最適化する

## コメントの種類を明確化
| タグ       | 意味合い                                                                 |
|------------|--------------------------------------------------------------------------|
| MUST       | マージ前に必ず修正が必要（例：セキュリティホール）                      |
| SUGGESTION | 改善提案（例：「この処理はヘルパー関数に分離できます」）                |
| FYI        | 参考情報（例：「次回からはこちらのライブラリを使うと楽です」）          |
| QUESTION   | 疑問点（例：「この条件分岐の意図を教えてください」）                    |

## 建設的なフィードバック例
**NG例**  
「このコードは汚い」

**OK例**  
「この処理は複雑なので、`validateUserInput`関数に分離すると可読性が向上します。  
参考例: https://example.com/refactoring-patterns」

---

# 4. プロセスを標準化する

## レビューSLAを設定
| 指標               | 目標値         | 測定方法                     |
|--------------------|---------------|------------------------------|
| 初期応答時間       | 4時間以内      | PR作成から最初のコメントまで  |
| 平均レビュー時間   | 24時間以内     | PR作成からマージまで         |
| 再提出率           | 20%以下       | 修正依頼が発生したPRの割合    |

## ガイドライン策定例
1. コメントは**具体的な根拠**と共に記載する
2. 高優先度の指摘は**最大3件まで**に絞る
3. 定期的に**レビュー改善MTG**を開催する

---

# 5. 文化を醸成する

## ポジティブなフィードバック
```diff
- 「ここが間違っている」
+ 「全体の設計がシンプルで良いですね！一点、ここの例外処理に抜けがあるようです」
```

## 知識共有の機会を作る
- 週次で**代表的なPRを共有会**で紹介
- 新人向けに**模範レビュー事例集**を作成
- 定期的に**ペアレビュー**を実施



# まとめ

| ポイント       | 具体策例                          | 期待効果                      |
|----------------|-----------------------------------|-------------------------------|
| PR最適化       | 小さなPR・テンプレート活用         | レビュー工数の50%削減          |
| 自動化         | Linter/Formatter導入              | 人的ミスの80%削減              |
| コミュニケーション | コメント分類・建設的フィードバック | チームの心理的安全性向上        |
| プロセス改善   | SLA設定・ガイドライン策定          | 開発速度の30%向上              |

効果的なコードレビューは、**ツール・プロセス・文化**の三位一体で実現します。  
まずは「PRの小型化」と「チェックリスト導入」から始めて、継続的に改善を重ねましょう！

# 参考文献


https://techmania.jp/blog/source-code-review/

 
 https://qiita.com/yuki-naka/items/19de9b75b2779cedc2b4
 
 

 
 
 https://qiita.com/mnoguchi/items/e48852cce79ee1830274
 
 
 https://www.coderabbit.ai/blog/how-to-do-thoughtful-code-reviews-ja
Pipeline における Kaniko auths 認証のエスケープ対象

# 背景: Kaniko について
Kaniko についてご存知の方は読み飛ばしてください。

CD/CI, Pipeline 便利ですよね。
コンテナベースの開発・k8s などが整備されている場合は、おおよそ以下のような流れの Job の Pipeline を作成されているところが多いかと思います。

1. アプリケーションコードのビルド
1. コンテナ化・harbor などのレジストリへのアップロード
1. k8s などどこかへデプロイ
1. etc...

各 Job はコンテナ内で実行されるので、この 2. のコンテナ化の Job において docker コマンドを用いた実装をしてしまうと Container in Container 問題が発生してしまいます。
これを解決するためによく用いられるのが [Kaniko](https://gitlab-docs.creationline.com/ee/ci/docker/using_kaniko.html) です。
Job の実行元として公式提供のイメージを指定して、イメージビルドについての変数を渡して executor を script として実行するだけで image build/push を行ってくれるのです。

# 前提: Pipeline と Harbor の接続
レジストリとして Harbor を利用します。
Pipeline と Harbor の繋ぎこみに関しては [Gitlab のページ](https://gitlab-docs.creationline.com/ee/user/project/integrations/harbor.html)などで詳しく説明されています。

Kaniko を用いて Harbor に push する際、Job は auths という変数を含む JSON を /kaniko/.docker/config.json に配置する必要があります。
auths の中身には、Harbor の push を行うユーザー名とそのユーザーのパスワードを `:` で連結して base64 変換した文字列を `auths` の中に `auth:{}` として指定します。

```shell:Gitlab 公式ページでの auth 指定の例
- echo "{\"auths\":{\"${HARBOR_HOST}\":{\"auth\":\"$(echo -n ${HARBOR_USERNAME}:${HARBOR_PASSWORD} | base64)\"}}}" > /kaniko/.docker/config.json
```

# 今回の解決したい悩み
ユーザーとして robot アカウントを利用するときなどには、ユーザー名に $ などのエスケープの必要な文字が含まれている場合があります。
ユーザー名・パスワードは

```shell
Pipeline 環境変数等での ${HARBOR_USERNAME}, ${HARBOR_PASSWORD} の入力 //(1)
-> (Job 内 Script による Base64 変換)
-> /kaniko/.docker/config.json //(2)
-> (Kaniko による Harbor へのアクセス)
-> Harbor
-> Harbor 側での認証プロセス
```

といった具合に渡されていくわけですが
### この各受け渡しのうち、どの部分にエスケープ処理が必要になるの？
というのが今回の疑問です。要は次の 2 点です。

- 大元の USERNAME, PASSWORD はエスケープ処理する？ (1)
- Base64変換で得られた文字列はエスケープ処理する？ (2)

# 結論
- 大元の USERNAME, PASSWORD(1)
エスケープ処理が必要

- Base64変換で得られた文字列 (2)
エスケープ処理は不要

よく考えると、前述の公式 Script では Base64 変換して得られる値を `""` で囲っていますね、要はあの Script を手元で実行することを考えると自然と (1) はエスケープ、(2) はエスケープしないという結論が得られると思います。

# まとめ
公式のドキュメント・コマンドはちゃんと読んだ方が良い(1敗)
脳内では「エスケープ処理された文字列をもう一度エスケープ処理して渡すなんてことがあるか？」と思いつつなんだかんだ頭が混乱してしまいました。
Pipeline 系は実装の確認・検証に手間がかかるので、こういった細かいところでのつまずきは減らしていきたい..
【ChatGPT＋4o Image Generation】で、アイシングクッキーを作りましょう。


　どうも、カーブミラーです。

　今回は、4o Image Generationで、アイシングクッキーを作りましょう。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はあります。　あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　こちらも載せますね。
　　[ChatGPTが使えない？ログインできない・反応しない原因やエラー時の対処法を解説](https://aismiley.co.jp/ai_news/chatgpt-error-resolution-explanation/)
***
　著作権法については
　　こちらを参照するのが
　　　良いのではないかと。

　文化庁レポートをもとにした
　　著作権法についての動画（約20分）
　　　[かいちのAI大学　【警告】ChatGPTの画像生成は危険です...【4o Image Generation】](https://youtu.be/8VLUnG-iyo0?si=rAfjMboqmNqppDGq)
***
　では、さっそく【本題】です。

　今回は、
　　4o Image Generationで
　　　アイシングクッキーを
　　　　作りましょう。

　もちろん、画像です。
　　本物は、作ってください😅

　参考にしたのは、こちら。
　　[konmariさんポスト](https://x.com/konmari_tweet/status/1926460678853849151?t=sC2HFULCmDbkj9PdO8p43Q&s=19)

　まずは、
　　サンプル画像です。
　　　こんな風になります。
![file_0000000087d461f995cb5c3b2401a84f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/cb5dee55-4d1f-4716-99f6-800b5e7b5bd9.png)


　konmariさんのPromptは
　　元画像とテーマを
　　　あとから、入れる形です。

　私はそれを
　　Promptのみにしました。

　元画像とテーマを
　　変数にしただけですが。
　　　あと、メガネも出していたので
　　　　装飾品にした程度です。

　こちらがそのPromptです。
　　＊＊＊にそれぞれを
　　　入力・送信してください。

　OBJECTは、人物。
　テーマは、クッキーの形。

```Text:アイシングクッキーPrompt
OBJECT=“＊＊＊”
テーマ=“＊＊＊”

高品質な商品紹介風の写真。 中央には{{OBJECT}}のイラストを元にした、ちびキャラ（SDキャラ）風のアイシングクッキー。 淡いパステルカラーで、ふっくらとしたロイヤルアイシングが施され、髪型や装飾品、服装などの特徴が丁寧に再現されている。 その周囲には、テーマ「{{テーマ}}」に関連したアイテムのアイシングクッキーが散りばめられており、アイコン風のクッキーや、星・お花・リボン型・メッセージ入りクッキー（例：「THANK YOU」「おつかれさま」など）が含まれる。 プレートの一部が写っている程度の斜め上からのアングルで、主役が引き立ちつつも、周囲のクッキーが賑やかに彩りを添えている構成。 自然光で撮影されたような柔らかい影と、サクサクのクッキーの質感が表現されたスタイル。背景は明るくてシンプルなベージュまたはピンクトーン。
```

　ちょっとした
　　息抜きにどうぞ。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
こんな技術力の開発会社と付き合うのはもう嫌だ

一言で言えば「お行儀が悪い」ということですかね。

# ソフトウェア構成管理を使っていない
# 開発ツールが統一されていない
* リリースのたびにスペースやタブが異なっている
* 動けばいいですべてが回っている
* コーディング規約、Lintツール、統合環境を使っている様子がまったくかんじらｒ
# Excelマクロがマクロの記録で作られたままで納品される
* 無駄なコマンドで埋め尽くされて、何をやっているかがわからない
* 設計しなくてもうまく行った手順を自動化することが開発だと思っているのか？
# diffツールを使おうとしない
* テストが正しく動けば検証が終わりみたい
# 顧客のサーバーPCで作業するとデスクトップを散らかしまくり
# pythonのライブラリをサーバーにインストールしようとする
* それも全部手作業で-r requirements.txtも使おうともしない
* 仮想環境という概念の必要性をわかっていない
# 実行パスを変数にしているのに直値のスクリプトを平然と作りこんでくる
# 単体・結合・総合テストをろくに実施せずに顧客のテストに任せる作り方を平然とやる
* しかも、この開発は時間がかかりますからといって自分たちの品質の作り込みができないことを棚に上げる発言までしてくる
* 単体・結合・総合テストどころかレビューもしていないから、変更内容から把握する始末
# メンバーに何も教育していないリーダーが問題と解決策を偉そうに指摘する
# テストどこから、レビューもせずにリリースする
* 受け入れ時に変更点レビューをして問題を見つけることが多発
* 不具合が発生したときに変更箇所
# 変更点をソース全体に首尾一貫して反映する能力が欠如
* diffツールが使えていないからできるわけがない
一緒にアプリつくる人探してます！！

# エンジニア募集中！！

こんにちは！
大阪大学外国語学部の北村です。
今僕は大学を休学中で、大きな会社を作りたいと考えています。
そこで若者の中で大流行するようなアプリを考えました。それをとても実現させたいのです！

現状はChat GPTに聞きながら自分でできる限り作っていますが、内容が段々複雑になり難しくなってきています。
ここから一緒に大きな会社を作りたいと思う方を募集しています！！

ネットの文面だけでは不安だと思うので、まずは会って話せたらいいなと思っています！
自分は大阪に住んでいるので、関西圏の人だと助かります。

会社の初期メンバーとして、会社を大きくしたいと考えてくれている方ぜひご連絡ください！
以下が僕のXのアカウントになります。

@colors1stcom

DMお待ちしてます！！

北村
オレオレライブラリを紹介

自分用に作っていた機能をせっかくだからパッケージにして公開してみました。

探せばもっと良いのもあるのだろうけれど自身の研究と趣味のためのライブラリです。
Unity2022.3でのみテストしています。
（それ以降のUnityは触ったことなくって・・何が変わったのだろう）

●一つ目はNativeArrayのラッパーです。

[MyUnsafeUtil](URL "https://github.com/r-benjamin-cotton/MyUnsafeUtil")

NativeArrayをエディタ上で普通のc#で使うと配列よりも遅くて困ったので
内部的にポインタアクセスにして遅くならないようにしてみました。
ついでにusingで開放できるようdisposableにしたり、
通常の配列をピン止めしてNativeArrayとして使えるようにしたり。
解放忘れ時に取得時のスタックを表示してみたり。

速度のいるところではNativeArrayとしてBurst側に渡せば恩恵を受けられ、
通常はマネージコードとして簡単でそこそこ安全に使うことができます。


●次はUIから直接コンポーネントのプロパティを参照できるコンポーネント群です。

[LazyUI](URL "https://github.com/r-benjamin-cotton/LazyUI")

基本はUnityのuguiを元にしていて、スクリプトからアクセスするのではなく、
UI要素から直接ゲームオブジェクト、コンポーネント、プロパティを指定して
UI要素だけで完結できます。

はい、ただ怠惰なだけです。。

たとえばトグルボタンでは指定プロパティが指定の値のときのみチェック状態になるので
特にグループとか面倒くさいことなしにボタンを配置して参照設定するだけでOk。
プロパティが公開されていればコードを追加で書く必要がないです。

注意点としては値を常に監視することになるので大変重いです！
プロパティ名が変わったときとか再指定がめんどいです！
場合によってはプロパティがストリップされてしまう可能性も？その場合はpreserveを。
ちょっと変なことをしているので動作的に怪しいところもあるかも。

以前enumで悩んだりしていたのもこの機能のためだったのです。。

おまけで以前から作っていたピクセル強調のマテリアルを入れてあります。
シェーダーとしてはUIやスプライト描画用でフィルターを切り替えることができます。
ソフトにするものから、ポイント、リニア、エッジ、シャープ等。
エッジがピクセルパーフェクトでなくてもボケを減らす奴で、
ImageのスライスとかではPixelPerUnitMultiplierを0.5で使うのお勧め。
シャープは私が大昔から使っているアンシャープマスクもどき。

但しいずれもテクセル参照数が多いので重いです。
テクセルのセンターや上下の扱いでもしかしたらうまく動かない場合もあるかも。
テストはAMDのノートPCのみなので。

LazyUIにはサンプルも入れているので試してみてください。



●そして上記ライブラリを使ったのがこちら。
自作のボクセルエディタです！
[Cubic8](URL "https://r-benjamin-cotton.itch.io/cubic8")

公開半年でDL数５の大人気ツールです！
研究のために作成を始めてえらい時間が掛ったけれど自分的にはなっとくの出来。

ずーっと昔からMSX風のシンプルなピクセルエディタを作りたかったのが
やっとボクセルですが実現できました。

あえてデフォルトの色数とか制限してあります。
データフォーマットも当時風(笑)

動作もあえてもっさりするようにボクセルの更新時にウエイトを入れて
更新が目に見えるようにしてあります。

８ビット時代の感覚を楽しんでみてください。

あとUnityへの敬意を表して背景のデフォルトはUnityのスカイボックス！
いかにも初心者ががんばって作りました風でしょ！

（本当のところは私のセンスの問題ですけど）

MagicaVoxelがどうにも手になじまなかったので作ってみましたが、
作ってみてMagicaVoxelのすごさが良くわかりました。

最初c#とシェーダーのみで頑張ったけどどうにもパフォーマンスが出ず
Busrtにすることで劇的に、それこそ１００倍近く性能が上がったので
なんとか完成させることができました。
256x256x256で一千万ものデータをゴリゴリするのでそりゃ重いよと。。

ちなみにボクセルはメッシュ化とかしないでレイマーチング風に
シェーダーで無理やり描いています。
大変重いです。(最悪数千ループです)

一人で一つの環境でしかテストしていないので動かなかったらごめんなさい。


ロートルの自己満足ですがご覧いただき有難うございました。
Wiresharkのインストール手順（Windows編）


# はじめに

この記事では、ネットワークプロトコルアナライザ「Wireshark」をWindows環境にインストールする手順を解説します。  
Wiresharkはネットワークのトラブルシューティングやプロトコル学習、セキュリティ分析、アプリ開発など幅広い用途で利用される強力なツールです。


# 1. ダウンロード

1. 公式サイト（[Wireshark Downloadページ](https://www.wireshark.org/download.html)）にアクセスします。
2. 「Stable Release」欄から「Windows x64 Installer」など、自分のOSに合ったインストーラーを選びダウンロードします。
   - 例：`Wireshark-4.4.6-x64.exe`


# 2. インストール手順

## (1) インストーラーの起動

- ダウンロードしたインストーラー（例：`Wireshark-4.4.6-x64.exe`）をダブルクリックして起動します。
- ユーザーアカウント制御が表示された場合は「はい」を選択します。

## (2) セットアップウィザード

- 「Welcome」画面で「Next」をクリックします。

## (3) ライセンス同意

- ライセンス契約書が表示されるので内容を確認し、「I Agree」または「Noted」をクリックします。

## (4) コンポーネント選択

- インストールする機能の選択画面が表示されます。通常はデフォルトのままでOKです。
- 必要に応じて「デスクトップショートカット」や「スタートメニューショートカット」などを選択できます。
- `.pcapng`ファイルの関連付けもそのままで問題ありません。
- 「Next」をクリックします。

## (5) 追加タスク・ドライバの選択

- **Npcapのインストール**（ネットワークキャプチャ用ドライバ）は必須です。デフォルトでチェックが入っています。
- **USBPcap**（USB通信キャプチャ用）は必要に応じてチェックしてください。
- 「Next」をクリックします。

## (6) インストール先の指定

- インストール先フォルダを選択します。特に理由がなければデフォルトで「Next」。

## (7) インストール開始

- 設定内容を確認し、「Install」をクリックしてインストールを開始します。

## (8) Npcapのセットアップ

- インストール途中でNpcapのセットアップウィザードが起動します。
- ライセンスに同意し、「Install」をクリックします。
- インストールが完了したら「Finish」をクリック。

## (9) インストール完了

- Wiresharkのインストールが終わったら「Next」をクリックし、最後に「Finish」でセットアップウィザードを閉じます。
- 必要に応じてPCの再起動を求められる場合があります。

---

# 3. 起動と初期設定

- スタートメニューやデスクトップのショートカットからWiresharkを起動します。
- 初回起動時はネットワークインターフェースの一覧が表示されます。キャプチャしたいインターフェースを選択して「Start」をクリックすれば、すぐにパケットキャプチャが始まります。

---

# まとめ

- Wiresharkは公式サイトからインストーラーをダウンロードし、ウィザードに従って進めるだけで簡単にインストールできます。
- Npcapドライバは必ずインストールしてください。
- インストール後は、ネットワークインターフェースを選択してキャプチャを開始できます。

Wiresharkはネットワークの学習やトラブルシューティングに非常に役立つツールです。インストールが完了したら、実際にキャプチャを試してネットワークの動きを観察してみましょう！
スミレ畑、やってみた。 その15

# 概要
日本語プログラミング言語、スミレ畑、見つけたので、やってみた。
AtCoder、やってみた。
練習問題やってみた。

# 練習問題
ABC 081 B - Shift Only
N個の整数値を受け取り、一度の操作ですべての数を2で割る。割り切れなくなるまで割っていった時、何回割ることが出来るか？


# 投入するソース

```
3
8 12 40
```

# 期待値

```
2
```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/7f1c1733-5ac3-4f4b-b457-21a16e916124.png)

# サンプルコード

```
入力nは，整数を入力したもの
入力sは，入力したものを「 」で区切ったもの
結果は，０
((入力sすべてを、２で、割ったあまり)の合計が、０より、大きい)になるまで繰り返す
  入力sは，入力sすべてを、２で、割ったもの
  結果に、１を、足す
繰り返し終わり
結果を、出力して改行する


```

以上。
CachyOSで日本語を入力できるようにするまでの手順をまとめてみた

# CachyOSとは
CachyOSは現在人気沸騰中のLinuxディストリビューションです。DistroWatchのPage Hit RankingでもMintに次いで2位の座にまで上がってきています。（2025年5月25日現在）
Arch系ですが、設定が行き届いておりインストール直後からすぐに使える環境が整っているのが特徴です。
筆者はXfceをこよなく愛しているので、今回デスクトップ環境はXfce4を選択しました。

# 英語ロケールで使いたい
筆者はOSのロケールは英語であるべし、という信念を持っています。だって…ホームディレクトリ下の「Documents」ディレクトリが「ドキュメント」とか日本語表示になるのうざくないですか？コマンドラインから操作するときとかはっきり言って最悪ですよね。
ということで、筆者はいつも、「ロケールは英語」でOSをインストールしています。

# でも日本語入力はできないと困る
「ロケールは英語」でインストールしたときの最大の問題点は、標準で日本語入力ができない、ということです。さすがにこれでは困ります。ということで、日本語入力環境をあとづけでインストールすることになります。

# 日本語を入力できるようにするまでの手順

## 日本語入力に必要なソフトウェアをインストールする
まず、日本語入力に必要なソフトウェアであるmozcとfcitx5をインストールします。
ちなみに、mozcはグーグル社が開発した日本語入力エンジンで、fcitx5はそのフロントエンドとなります。
CachyOSはArch系なので、パッケージのインストールにはpacmanコマンドを使います。
```shell-session
$ sudo pacman -S fcitx5-im fcitx5-mozc
```

## 環境変数を設定する
 つぎに、fcitx5を使うための環境変数を設定します。
 CachyOSのデフォルトシェルはFishなので、
 ~/.config/fish/conf.d/ディレクトリの中にfishの文法で環境変数を設定するファイルを設置します。
 ```~/.config/fish/conf.d/fcitx5-env.fish
set -x GTK_IM_MODULE fcitx5
set -x QT_IM_MODULE fcitx5
set -x SDL_IM_MODULE fcitx5
set -x XMODIFIERS "@im=fcitx5"
```
:::note alert
FishではBashやZshとは環境変数を設定する構文が根本的に異なります。
他のシェルのように~/.xprofileにBashの構文で環境変数を設定すると、最悪の場合ログインできなくなります。
:::

## ログインし直す
一度ログアウトした後ログインし直します。
これでfcitx5が起動します。

## fcitx5の設定を行う
fcitx5を設定し、日本語入力をできるようにします。

まず、fcitx5のメニューから「Configure」をクリックします。
![Screenshot_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567613/dfbd5e9a-82a7-4f74-8dbf-0641849a264d.png)

つぎに、日本語を選択肢に表示するため「Only Show Current Language」のチェックを外します。
![Screenshot_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567613/b80ad836-7db0-4f05-8b5f-2748d77e8ae3.png)

つぎに、言語の検索欄に「Japanese」と入力します。
![Screenshot_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567613/ff7f1c3d-22f4-4956-8ad8-5647f96e754b.png)

「Current Input Method」に言語を
「Keyboard - Japanese」
「Mozc」
の順に登録します。
このとき、「Keyboard - US」は登録から外してください。

![Screenshot_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567613/6647231f-78e9-4dff-a659-2d95cefdb597.png)

お好みで、デフォルトテーマをダークモードに。
![Screenshot_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567613/e976e55f-f19b-49ad-9718-bb58367b2ebe.png)

最後に「OK」をクリックすると、警告が出ますがここは「Yes」をクリックします。これは、キーボードレイアウトが英語キーボードから日本語キーボードに切り替わりますよ、という警告ですので期待している挙動となります。
![Screenshot_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567613/cbd615ed-d218-405a-a29f-c3922c47fb7c.png)

これでめでたく日本語入力ができるようになります。
ターミナルを開いて、「全角/半角」キーを押して日本語を入力してみてください。
あとは「全角/半角」キーまたは「Ctrl+Space」キーで日本語入力モードと英字入力モードがトグルします。
![Screenshot_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567613/aa056dae-6986-4fe9-b141-b73891a6ec6a.png)

# まとめ
これで、英語ロケールで日本語入力ができる、という夢の環境が手に入りました。
今回はCachyOSのXfce4環境で、日本語入力環境を構築する方法を紹介しましたが、Linuxディストリビューションやデスクトップ環境が違っても基本的にやることは同じです。
この記事が、Linuxでの日本語入力に手こずっている方の一助になれば幸いです。
HoloLensのUnity開発について

# はじめに
HoloLens、Unityを使った開発中なのですが、「～～がしたいときは～～をする」というのを覚えておけないので、備忘録としてまとめておきます。

###### 参考
https://learn.microsoft.com/ja-jp/training/modules/mixed-reality-toolkit-project-unity/6-interaction-models
とその続き。

結構このリンクの横流しです。
初めて読む方は素直に参考URLを読んで理解したあとにここに戻って来ることをおすすめします。この記事の目的は、参考URLの簡単なまとめを作ることです。

# 相互作用モデルを選ぶ

まず、アプリケーションでUIをどう操作するか（相互作用モデル）を選びます。

- [手とモーションコントローラー](https://learn.microsoft.com/ja-jp/windows/mixed-reality/design/hands-and-tools)
    - たぶん普通はこれ。なぜならユーザにとって習得が簡単だから。
    - ハンドトラッキングや6DoFコントローラを使う。
- [ハンズフリー](https://learn.microsoft.com/ja-jp/windows/mixed-reality/design/hands-free)
    - ハンドトラッキングが使えないときに使う。
    - [音声入力](https://learn.microsoft.com/ja-jp/windows/mixed-reality/design/voice-input)
        - そのまんま
    - [視線入力とドウェル](https://learn.microsoft.com/ja-jp/windows/mixed-reality/design/gaze-and-dwell)
        - ボタンを見つめるとカウント開始、そのまま見続けると押される、みたいなUI。
        - 音声入力が使えないとき（うるさいときとか）に使うらしい。でもいつもこっちで良くね？
- [視線入力とコミット](https://learn.microsoft.com/ja-jp/windows/mixed-reality/design/gaze-and-commit)
    - 視線入力のあと、ジェスチャやボタンで選択、みたいなUI。
    - いつ使うんでしょう…？

基本的に、相互作用モデルは1つに統一することが好まれます。

## 全相互作用モデル共通

| やりたいこと |  やること |
|:--|:--|
| Materialをパフォーマンス重視のものに | Mesh Renderer コンポーネントの「素材」を、`Packages > MRTK Standerd Assets > Materials` 以下のもののどれかにする |

## [手とモーションコントローラー](https://learn.microsoft.com/ja-jp/windows/mixed-reality/design/hands-and-tools)


ハンドトラッキングを使います。

| やりたいこと |  やること |
|:--|:--|
| オブジェクトを手で動かす | Colliderを追加（すでにあるならいい）、Object Manipulatorを追加 |

## ハンズフリー



使ったことないのでわかりません。すいません。