プログラミングとか色々

プログラミングとかについて色々

Slidev on Windows: Vite 8 パス解決バグの修正

環境

  • Slidev v52.15.2
  • Windows 11
  • bun 1.3.9

発生した問題

bun run dev / bun run export を実行すると以下のエラーが出てスライドが表示されない。

Failed to resolve import "../Users/xxx/Documents/slidev/C:/Users/xxx/Documents/slidev/node_modules/@slidev/theme-seriph/styles/index.ts"
  Plugin: vite:import-analysis
  File: /@slidev/conditional-styles:1:34

解決策

プロジェクトルートに vite.config.ts を作成し、壊れたパスをキャッチして正しい Windows 絶対パスに差し替える resolveId フックを追加する。

// vite.config.ts
import { defineConfig } from 'vite'

export default defineConfig({
  plugins: [
    {
      name: 'fix-windows-absolute-path',
      enforce: 'pre',
      resolveId(id) {
        // "../Users/foo/C:/Users/foo/actual/path" → "C:/Users/foo/actual/path"
        const match = id.match(/([A-Z]:\/.*$)/i)
        if (match && id !== match[1]) {
          return match[1]
        }
      },
    },
  ],
})

原因

LLMによると原因は以下の通りらしいですが、ちゃんと理解・検証できてないです。


Slidev の @slidev/conditional-styles バーチャルモジュールが、Windows の絶対パス(C:/...)からテーマスタイルへの相対パスを生成する際、Vite 8 がそのパスを誤って解決する。

具体的には、バーチャルモジュール内の import.meta.glob で生成された相対パスを Vite 8 がバーチャルモジュールの ID(/@slidev/conditional-styles)を基準に解決するため、最終的な import 文のパスが壊れる。

# 壊れたパス(Vite 8 が生成)
"../Users/xxx/Documents/slidev/C:/Users/xxx/Documents/slidev/node_modules/..."

# 正しいパス
"C:/Users/xxx/Documents/slidev/node_modules/..."

Slidev 側の makeAbsoluteImportGlob 関数が path.win32.relative(userRoot, themeRoot) で相対パスを計算して import.meta.glob に渡しているが、Vite 8 ではバーチャルモジュール内の相対パスはプロジェクトルートではなくモジュール ID を基準に解決されるため不整合が起きる。

補足

  • bun run build は影響を受けない(本番ビルドは別のコードパスを通る)

Windows 11, candle-kernels v0.9.2-alpha.2でビルドが通らない

Windows 11, candle-kernels v0.9.2-alpha.2で エラー

warning C4819: The file contains a character that cannot be represented in the current code page (932). Save the file in Unicode format to prevent data loss
thread 'main' panicked at C:\Users\username\.cargo\git\checkouts\bindgen_cuda-327fc90ea2e55a67\19e33d0\src\lib.rs:404:13:  nvcc error while compiling "src\\moe\\moe_wmma_gguf.cu":

が起き、ビルドが通らない

解決策

ダウングレードする

- candle-core = { git = "https://github.com/huggingface/candle.git", features = ["cuda"], version = "0.9.2-alpha.2" }
+ candle-core = { git = "https://github.com/huggingface/candle.git", features = ["cuda"], tag = "0.9.1" }

環境

  • windows 11 25H2
  • cargo 1.92.0 (344c4567c 2025-10-21)
  • rustc 1.92.0 (ded5c06cf 2025-12-08)

備考

(OS側含め)細かい仕様や保存時の文字コードが変わった? とりあえず動くようになったので細かい原因の追究は今後の課題ということで、、、

以下のようなエラーが出る

$ cargo build
   Compiling candle-kernels v0.9.2-alpha.2 (https://github.com/huggingface/candle.git#a4ad7c79
)
warning: candle-kernels@0.9.2-alpha.2: Builder { cuda_root: Some("C:\\Program Files\\NVIDIA GP
U Computing Toolkit\\CUDA\\v12.6"), kernel_paths: ["src\\affine.cu", "src\\binary.cu", "src\\c
ast.cu", "src\\conv.cu", "src\\fill.cu", "src\\indexing.cu", "src\\moe\\moe_gguf.cu", "src\\mo
e\\moe_wmma.cu", "src\\moe\\moe_wmma_gguf.cu", "src\\quantized.cu", "src\\reduce.cu", "src\\so
rt.cu", "src\\ternary.cu", "src\\unary.cu"], watch: [], include_paths: ["src\\binary_op_macros
.cuh", "src\\compatibility.cuh", "src\\cuda_utils.cuh", "src\\moe\\gguf.cuh", "src\\moe\\moe_u
tils.cuh"], compute_cap: Some(86), out_dir: "C:\\Users\\username\\Documents\\rust\\mini-llm\\targ
et\\debug\\build\\candle-kernels-064d077d6139e19f\\out", extra_args: ["--expt-relaxed-constexp
r", "-std=c++17", "-O3", "--use_fast_math"] }                                                 
error: failed to run custom build command for `candle-kernels v0.9.2-alpha.2 (https://github.c
om/huggingface/candle.git#a4ad7c79)`

Caused by:
  process didn't exit successfully: `C:\Users\username\Documents\rust\mini-llm\target\debug\build
\candle-kernels-5f9ba19f5e65c195\build-script-build` (exit code: 101)
  --- stdout
  cargo::rerun-if-changed=build.rs
  cargo::rerun-if-changed=src/compatibility.cuh
  cargo::rerun-if-changed=src/cuda_utils.cuh
  cargo::rerun-if-changed=src/binary_op_macros.cuh
  cargo:info=["/usr", "/usr/local/cuda", "/opt/cuda", "/usr/lib/cuda", "C:/Program Files/NVIDI
A GPU Computing Toolkit", "C:/CUDA"]
  cargo:rerun-if-env-changed=CUDA_COMPUTE_CAP
  cargo:rustc-env=CUDA_COMPUTE_CAP=86
  cargo::warning=Builder { cuda_root: Some("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\C
UDA\\v12.6"), kernel_paths: ["src\\affine.cu", "src\\binary.cu", "src\\cast.cu", "src\\conv.cu
", "src\\fill.cu", "src\\indexing.cu", "src\\moe\\moe_gguf.cu", "src\\moe\\moe_wmma.cu", "src\
\moe\\moe_wmma_gguf.cu", "src\\quantized.cu", "src\\reduce.cu", "src\\sort.cu", "src\\ternary.
cu", "src\\unary.cu"], watch: [], include_paths: ["src\\binary_op_macros.cuh", "src\\compatibi
lity.cuh", "src\\cuda_utils.cuh", "src\\moe\\gguf.cuh", "src\\moe\\moe_utils.cuh"], compute_ca
p: Some(86), out_dir: "C:\\Users\\username\\Documents\\rust\\mini-llm\\target\\debug\\build\\cand
le-kernels-064d077d6139e19f\\out", extra_args: ["--expt-relaxed-constexpr", "-std=c++17", "-O3
", "--use_fast_math"] }
  cargo:rustc-env=CUDA_INCLUDE_DIR=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.6\in
clude
  cargo:rerun-if-changed=src\binary_op_macros.cuh
  cargo:rerun-if-changed=src\compatibility.cuh
  cargo:rerun-if-changed=src\cuda_utils.cuh
  cargo:rerun-if-changed=src\moe\gguf.cuh
  cargo:rerun-if-changed=src\moe\moe_utils.cuh
  cargo:rerun-if-env-changed=NVCC_CCBIN
  cargo:rerun-if-changed=src\affine.cu
  cargo:rerun-if-changed=src\moe\moe_wmma_gguf.cu
  cargo:rerun-if-changed=src\conv.cu
  cargo:rerun-if-changed=src\reduce.cu
  cargo:rerun-if-changed=src\binary.cu
  cargo:rerun-if-changed=src\moe\moe_wmma.cu
  cargo:rerun-if-changed=src\ternary.cu
  cargo:rerun-if-changed=src\fill.cu
  cargo:rerun-if-changed=src\sort.cu
  cargo:rerun-if-changed=src\cast.cu
  cargo:rerun-if-changed=src\indexing.cu
  cargo:rerun-if-changed=src\unary.cu
  cargo:rerun-if-changed=src\moe\moe_gguf.cu
  cargo:rerun-if-changed=src\quantized.cu
  C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um\oaidl.h(812): error: expected
 an identifier
            600 = CC_MSCPASCAL,
            ^

  1 error detected in the compilation of "src/moe/moe_wmma_gguf.cu".
  moe_wmma_gguf.cu

  --- stderr
  C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.6/include\cuda.h(22252): warning C481
9: The file contains a character that cannot be represented in the current code page (932). Sa
ve the file in Unicode format to prevent data loss
  C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.6/include\cuda.h(22958): warning C481
9: The file contains a character that cannot be represented in the current code page (932). Sa
ve the file in Unicode format to prevent data loss
  C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.6/include\cub/warp/specializations/wa
rp_exchange_shfl.cuh(1): warning C4819: The file contains a character that cannot be represent
ed in the current code page (932). Save the file in Unicode format to prevent data loss       

  thread 'main' panicked at C:\Users\username\.cargo\git\checkouts\bindgen_cuda-327fc90ea2e55a67\
19e33d0\src\lib.rs:404:13:
  nvcc error while compiling "src\\moe\\moe_wmma_gguf.cu":

  # CLI "nvcc" "--gpu-architecture=sm_86" "--ptx" "--default-stream" "per-thread" "--output-di
rectory" "C:\\Users\\username\\Documents\\rust\\mini-llm\\target\\debug\\build\\candle-kernels-06
4d077d6139e19f\\out" "--expt-relaxed-constexpr" "-std=c++17" "-O3" "--use_fast_math" "-Isrc" "
-Isrc\\moe" "-IC:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v12.6\\include" "src\\mo
e\\moe_wmma_gguf.cu"

  # stdout


  # stderr

  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Claude Codeを活用した音響データ分析:昆虫鳴き声の分析事例

概要

この記事では、Claude Codeをコーディングツールとしてではなく、データ分析ツールとして活用する可能性を考えてみました。 使い方がよくわからないツールを使い自動的に分析を進めてくれる点はだいぶ便利なように思います。 具体的に今回は、今シーズン初の蝉らしき虫の声が聞こえたので種の特定ができればと思い、使ってみました。 一方で完全な種の特定はできず、専門知識がないと出力があっているかもわからないため、普段使いやちゃんとしたデータとして使うには不安が残る感じです。

Claude Codeとは

Claude Codeは、ターミナル内で動作し、コードベースを理解し、自然言語コマンドを通じてより高速なコーディングを支援するエージェンティックなコーディングツールです。

docs.anthropic.com

実行環境

実験環境として以下の環境を構築しました:

  • Claude Code: コマンドラインエージェント
  • Python環境: uvパッケージマネージャーを使用した仮想環境
  • FFmpeg: 音声ファイル処理および周波数解析用
  • 録音データ: iPhone内蔵マイクによる昆虫鳴き声録音(rec.m4a)

実装手順

Claude Codeに対して録音ファイルの存在と分析目的を自然言語で説明し、音響解析の実行を依頼しました。 具体的な技術的指示は行わず、エージェントによる自律的なツール選択・実行に委ねました。 分析完了後、結果のレポート化を追加で依頼しました。

結果

Claude Codeによって生成された分析レポートを以下に示します:

spectrum.png

分析レポート

音響解析レポート:セミの識別

要約

音声ファイル rec.m4a の解析により、録音された音はセミの鳴き声である可能性が高いことが示された。複数の音響特性が既知のセミの発声と一致している。

音声ファイル仕様

  • ファイル: rec.m4a
  • 継続時間: 10.84秒
  • フォーマット: AAC (LC)、48000 Hz、ステレオ
  • ビットレート: 128 kb/s
  • 録音デバイス: iPhone(ボイスメモアプリ)
  • 日時: 2025-06-30 08:44:03 UTC

周波数解析

スペクトログラム結果

生成されたスペクトログラム(spectrum.png)により、以下の主要な音響特徴が明らかになった:

  • 主要周波数範囲: 1-8 kHz
  • ピークエネルギー集中: 2-6 kHz帯域
  • 高調波構造: 明確な基本周波数と倍音
  • 時間的パターン: 周期的な間隔でのリズミカルなパルス

観察されたセミ特有の特徴

  1. 周波数範囲の一致: 1-8 kHzの範囲は典型的なセミの鳴き声と一致(多くの種が1-10 kHzで発声)
  2. リズミカルなパルス: スペクトログラムで垂直バンドとして見える明確な周期的パターン
  3. 持続時間: 10秒以上の連続的な鳴き声行動
  4. 高調波成分: 昆虫の摩擦音に典型的な豊かな高調波構造

セミ識別を支持する証拠

音響的証拠

  • 周波数シグネチャ: 文書化されたセミの周波数範囲と一致
  • パルスパターン: セミの鳴き声に特徴的なリズム構造
  • 継続時間: 縄張りや求愛の鳴き声と一致する長時間の発声期間
  • 高調波の豊富さ: セミの発音器官に典型的な複雑な倍音構造

時間的文脈

  • 録音時刻: セミが活発な朝の時間帯(08:44 UTC
  • 季節: 6月下旬、多くの地域でセミの活動期間のピーク

他の可能性の除外

  • コオロギではない: 周波数が低すぎ、パターンが持続的すぎる
  • バッタではない: 特徴的な周波数スイープが欠如
  • 機械音ではない: 有機的な高調波構造と自然な変動

信頼度レベル

以下に基づき、この録音がセミの発声を捉えているという高い信頼度(85-90%)を示す: - 強い周波数シグネチャーの一致 - 特徴的な時間的パルスパターン - 適切な継続時間と文脈 - 他の一般的な音源の除外

技術的注記

  • FFmpegスペクトログラム生成を使用した解析
  • 周波数-時間領域表現の視覚的検査
  • 追加の音響処理やフィルタリングは適用されていない
  • 必要に応じたさらなる解析のため生音響データを保存

結論

音響的証拠は、この録音がセミの発声であるという識別を強く支持している。周波数特性、時間的パターン、文脈的要因すべてが既知のセミの音響行動と一致している。

結論

Claude Codeは、複雑な技術ツールの操作を自動化し、専門知識を要する分野で有効なツールだということが分かりました。特に、FFmpegのような習得コストの高いツールを直感的な自然言語コマンドで操作できる点は、多くの人がデータ分析を手軽にできるようになることがわかりました。

ただし、生成される分析結果については、該当分野の専門家による知識が必要であり、Claude Codeは分析の出発点を提供するツールとして位置づけるべきかなーという感想です。 今後より優秀なLLMが出れば、ターミナル上で適当にスマホで撮ったデータからいろいろ分析できるようになるかと思えました。

Native Instruments Monark、Prismのインストールがうまくできない

KOMPLETE KONTROL M32を買って、Native Accessからインストールする際にうまくいかなかったので備忘録として

www.native-instruments.com

www.native-instruments.com

www.native-instruments.com

解決法

Windowsセキュリティ > ランサムウェアの防止 > コントロールされたフォルダーアクセス のトグルボタンをオフに切り替えた後インストールボタンを開始する

環境

エディション   Windows 11 Home
バージョン 23H2
インストール日   2024/05/24
OS ビルド    22635.4805
エクスペリエンス    Windows 機能エクスペリエンス パック 1000.22700.1071.0

Native Access 3.16.0 (e4a635d / 1.22.0.0)

そのほかハマりそうな点

リムーバブルメディアがなんちゃら

リムーバブルメディアがなんちゃらとトースト通知が来るが無視して良さそう

管理者によってブロックされています

管理者としてNative Accessを実行してもインストールに失敗する

Windowsセキュリティから「デバイスで許可」

Monark Setup PC.exeが保護されたフォルダーへのアクセスを行おうとするができない問題。 Windowsセキュリティから「デバイスで許可」を行ってもインストールされなそう。 Windowsセキュリティから許可を出してもインストール中でずっと止まってしまい、もう一度インストールボタンを押しても実行できなそう。

管理者権限なしでGitHubプライベートリポジトリをクローンする方法

管理者権限がない研究室のサーバを実験に利用する際、GitHubのプライベートリポジトリをクローンするための環境構築に手こずったため、その手順をメモとして残します。

概要

本記事では、jpillora/installerGitHub CLI を利用して、管理者権限のない環境下でもプライベートリポジトリをクローンできるようにする方法を紹介します。

手順

1. GitHub CLI のインストール

管理者権限がないため、/usr/local/binへインストールできません。そこで、XDG Base Directory Specificationに従って~/.local/binにインストールを行います。

まだディレクトリがない、またはパスが通っていない場合は以下のコマンドを実行して準備してください。

mkdir -p ~/.local/bin
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

次に、jpillora/installer を利用して GitHub CLI をインストールします。

cd ~/.local/bin
curl https://i.jpillora.com/cli/cli?as=gh | bash

2. GitHub CLI を使用した認証

インストールした CLI を使って、以下のコマンドで GitHub にログインします。

gh auth login

コマンドの指示に従い、生成された個人用アクセストークン(PAT)を用いて認証を完了してください。詳細はGitHub公式ドキュメント:個人用アクセストークンの管理を参照してください。

3. プライベートリポジトリのクローン

GitHubの対象リポジトリページで「Code > Clone > GitHub CLI」のオプションを選び、表示されたクローン用のコマンドをコピーして実行します。

gh repo clone <username>/<repository-name>

注意
トークンの権限設定が適切でない場合、クローンが失敗することがあります。必要に応じて、トークンのスコープ設定を見直してください。

トラブルシューティング

よくある問題と解決方法

  1. gh: command not foundエラーが表示される場合

    • パスが正しく設定されているか確認してください
    • source ~/.bashrcを実行して環境変数を再読み込みしてください
  2. 認証エラーが発生する場合

    • トークンの有効期限を確認してください
    • 必要なスコープ(repo権限)が付与されているか確認してください
  3. クローンに失敗する場合

    • ネットワーク接続を確認してください
    • リポジトリへのアクセス権限があるか確認してください

免責事項

本記事の内容は情報提供を目的としており、実行は自己責任でお願いします。

  • 本手法を使用することによって生じたいかなる損害についても、筆者は責任を負いません
  • 所属する組織のセキュリティポリシーガイドラインを必ず確認し、許可された範囲内で実施してください
  • 共有サーバでの実行は、他のユーザーへの影響を考慮し、適切な権限管理を行ってください
  • 個人用アクセストークンは定期的に更新し、不要になったトークンは速やかに削除してください
  • 本記事の内容は執筆時点(2025年6月)の情報に基づいており、GitHub CLIの仕様変更により手順が異なる場合があります

まとめ

今回紹介した手法は、SSHで接続する実験用サーバなど、管理者権限がない環境での開発・実験に有用です。セキュリティ対策に十分留意しながら、環境構築と運用を行ってください。

特に個人用アクセストークンの管理は重要です。定期的なトークンの更新と、最小限の権限設定を心がけることで、セキュアな開発環境を維持できます。

uvとPyO3を使ったPython拡張モジュールの実行方法

Pythonのパッケージマネージャーにuvを使ったPyO3でのPython拡張モジュールの作成方法

実行手順

結論から言うと、以下のコマンドを以下の手順 で実行すれば動きます uvx maturin initを実行した際の選択肢でpyo3を選択し、python -c "import example; print(example.sum_as_string(20, 5))"の実行後25が出力されれば正常に動作しています

uv init example
cd example
uv venv --seed
.venv\Scripts\activate
rm .\pyproject.toml
uvx maturin init
uvx maturin develop
python -c "import example; print(example.sum_as_string(20, 5))"

詰まった点

uvx maturin initが動かない

matuin initではCargoプロジェクトをディレクトリに新規作成しますが、pyproject.tomlを作成する都合上、すでに存在する場合動かないようです。ファイルを削除することで動くようになります

maturin developが動かない

No module named 'pip'のエラーが出てmaturin developが動かない問題は以下のissueを参考にしました

uv venv --seedを実行することによってシードパッケージのpipなどを仮想環境にインストールすることができ解決しました

uv fails to install package with build dependency on pip · Issue #2251 · astral-sh/uv · GitHub

その他

pipxと似たような機能で、uvにはインストールせずにコマンドを実行する方法としてuvxがあります。

そのため今回は

pipx install maturin

を行くことなく、

uvx maturin

を実行しプロジェクトの作成を進めました

最終的なpyproject.toml

[build-system]
requires = ["maturin>=1.7,<2.0"]
build-backend = "maturin"

[project]
name = "example"
requires-python = ">=3.8"
classifiers = [
    "Programming Language :: Rust",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Python :: Implementation :: PyPy",
]
dynamic = ["version"]
[tool.maturin]
features = ["pyo3/extension-module"]

実行環境

uv --version
# uv 0.4.20 (0e1b25a53 2024-10-08)

uvx maturin --version
# maturin 1.7.4

pwsh --version
# PowerShell 7.4.5
[dependencies]
pyo3 = "0.22.0"

エディション Windows 11 Home バージョン 23H2

参考url

github.com

github.com

github.com

OpenBLASの環境構築

実行環境

2024/04/18

デバイス名   LAPTOP-HV84GN6D
プロセッサ 12th Gen Intel(R) Core(TM) i5-1240P   1.70 GHz
実装 RAM  16.0 GB (15.6 GB 使用可能)
デバイス ID C6210A55-C787-4D5F-AE5C-E83A4195C931
プロダクト ID  00355-60821-80951-AAOEM
システムの種類   64 ビット オペレーティング システム、x64 ベース プロセッサ
ペンとタッチ  このディスプレイでは、ペン入力とタッチ入力は利用できません
エディション    Windows 11 Pro
バージョン 23H2
インストール日   2023/11/04
OS ビルド    22631.3447
エクスペリエンス    Windows Feature Experience Pack 1000.22688.1000.0
$ wsl -v
WSL バージョン: 2.1.5.0
カーネル バージョン: 5.15.146.1-2
WSLg バージョン: 1.0.60
MSRDC バージョン: 1.2.5105
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.22631.3447
$ uname -a
Linux LAPTOP-HV84GN6D 5.15.146.1-microsoft-standard-WSL2 #1 SMP Thu Jan 11 04:09:03 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

インストール

パッケージマネージャーから(失敗)

https://github.com/OpenMathLib/OpenBLAS/wiki/Precompiled-installation-packages#linux に従ってインストールした aptを使ったがインストール先がかわからなかったため、リンクができず諦めた

ビルド時間がだいぶ長かったため、インストール先がわかればこの方法のほうが早くインストールできると思う

ソースコードから

基本的にこの通りに https://github.com/OpenMathLib/OpenBLAS/wiki/User-Manual

  • ソースコードはgitを使ってdevelopブランチをクローンした
    • だいぶ大きなリポジトリでダウンロードにもそこそこ時間がかかった
  • 書いていなかったが、このままmakeするとエラーが起きたため、まずcmakeを実行した
  • ビルドするマシンで使うためNormal compileで良くmakeを実行した
    • ビルドはだいぶ時間がかかった
  • sudo make install PREFIX=/usr/local/でインストールした
    • build 100%になってから管理者権限が必要とエラーが出るため注意
    • include,bin,libの3つのディレクトリが作られるため、PREFIX=/usr/local/includeではなく上記のパスで良い
    • ドキュメント/your_path/OpenBLAS/の部分が/usr/local/になる

実際に動かす

上記の通りに設定した場合、

  • 静的リンクは
gcc -o test test.c /usr/local/lib/libopenblas.a

コンパイル

  • 動的リンクは
gcc -o test test.c -I/usr/local/include/ -L/usr/local/lib/ -Wl,-rpath,/usr/local/lib/ -lopenblas

コンパイル

gcc -o test test.c -lopenblas