2026年3月9日月曜日

playwrightとかじゃなく、ブラウザのfetchでスクレイパーを作ってみるの巻き

fetchしたときCORSで弾かれるので、こいつで解決!

https://corsproxy.io/


意味あるんかな?!この謎スクレイパー。


2026年3月7日土曜日

国会図書館のOCRに乗り換える。

以前作ったシステムで、依存関係が重いと思っていた。


Opus 4.6で評価





NDLOCR-Lite(Python版) vs あなたの実装(EasyOCR)

1. アーキテクチャ比較

項目あなたの実装 (EasyOCR)NDLOCR-Lite (Python版)
推論ランタイムPyTorch (~2GB+)ONNX Runtime (~50MB)
検出モデルCRAFTDEIMv2 (2025年, 最新)
認識モデルEasyOCR内蔵 LSTM/TransformerPARSeq × 3 (カスケード)
依存関係の重さ非常に重い (PyTorch + torchvision)軽い (onnxruntime + opencv-headless)
モデルサイズ~200MB+ (自動DL)~146MB (ONNX)
GPU対応PyTorch CUDAONNX Runtime CUDA (オプション)
文字セットEasyOCR内蔵 (en/ja)NDLmoji (国会図書館文字セット)





2. 技術的に重要な違い

依存関係の軽さが圧倒的に違う

NDLOCR-Liteのrequirements.txtを見ると:

onnxruntime==1.23.2
opencv-python-headless==4.11.0.86
numpy==2.2.2
pillow==12.1.1
PyYAML==6.0.1

PyTorch が一切不要です。EasyOCRはPyTorch + torchvision が必須で、これだけで2GB以上のインストールサイズになります。NDLOCR-Liteは ONNX Runtime のみで動作するため、環境構築が格段に簡単で軽量です。

モデルの世代が新しい

モデルEasyOCRNDLOCR-Lite
検出CRAFT (2019年)DEIMv2 (2025年, arXiv:2509.20787)
認識LSTM/Transformer (旧世代)PARSeq (2022年, arXiv:2207.06966)

DEIMv2は「Real-Time Object Detection Meets DINOv3」がベースで、CRAFTより5年以上新しいモデルです。PARSeqも「Permuted Autoregressive Sequence Models」で、EasyOCRの内蔵モデルより世代が新しいです。

カスケード認識が賢い

NDLOCR-Liteのソースコードを読むと、単純に3モデルを使い分けるだけでなく、フォールバック機構が実装されています:

  1. PARSeq-30で認識 → 結果が25文字以上なら → PARSeq-50にフォールバック
  2. PARSeq-50で認識 → 結果が45文字以上なら → PARSeq-100にフォールバック

これにより、文字数予測が外れた場合でも精度が担保されます。






3. あなたの用途(残高数値読み取り)に対する評価

NDLOCR-Lite Python版: 適合度 ★★★☆☆

前回のWeb版(★★☆☆☆)より評価を上げた理由:


利点詳細
PyTorch不要環境構築が劇的に簡単。N100等の低スペックマシンでもインストール容易
ONNX Runtimeは高速PyTorch推論より一般的に速い。CPU推論に最適化されている
Python統合が容易そのままPythonプロジェクトに組み込める
GPU対応onnxruntime-gpu で CUDA も使える
課題詳細
訓練データの不一致NDLmojiは日本の書籍・雑誌向け。ゲームUIの「mBTC0.71」は訓練分布外
DEIMv2が不要あなたは既にテンプレートマッチングで領域を特定済み。レイアウト検出は無駄なオーバーヘッド
文字セットの偏り英数字+通貨記号は含まれるが、主力は漢字・かな。数字認識に最適化されていない



これにより:

  • PyTorch依存を完全に排除(2GB+ → 50MB程度に軽量化)
  • 推論速度が向上(ONNX Runtimeの方がCPU推論で高速)
  • DEIMv2は使わない(テンプレートマッチングで十分)
  • PARSeq-30のみ使用(短い数字列には十分)
  • parse_balance_value() の後処理はそのまま維持






総合評価

評価軸EasyOCRNDLOCR-Lite全体NDLOCR-Lite Web版PARSeq単体利用
数値認識精度
環境構築の容易さ
推論速度 (CPU)
推論速度 (GPU)-
メモリ消費△ (~2GB+)○ (~200MB)○ (~146MB)◎ (~50MB)
Python統合
用途適合度★★★★★★★★★★★★☆


NDLOCR-Liteでの使われ方

NDLOCR-Liteでは、PARSeqを3つのサイズ違いで使い分けている:

モデル入力サイズ最大文字数用途
PARSeq-3016×256≤30文字短い行(見出し等)
PARSeq-5016×384≤50文字中程度の行
PARSeq-10016×768≤100文字長い行(本文等)

入力幅が異なるだけで、アーキテクチャは同じ。短い行に大きなモデルを使うと無駄が出るので、効率化のためにカスケード方式を採用している。



モデル年代役割
DEIMv22025年 (arXiv:2509.20787)レイアウト検出(テキスト行の矩形を見つける)
PARSeq2022年 (arXiv:2207.06966)テキスト認識(切り出した画像から文字を読む)


まとめ

  • 現在EasyOCRで問題なく動いているなら、無理に変える必要はない。
  • 環境構築の簡便さ・軽量さを重視するなら、NDLOCR-LiteのPARSeqモジュールだけをONNX Runtimeで使う方式は検討の価値がある。
  • NDLOCR-Liteは日本語文書OCRとしては非常に優秀だが、ゲーム画面の短い英数字読み取りという用途には設計思想が異なる。
  • 特にN100等の低スペック環境では、PyTorchを排除できるメリットは大きい。


2026年3月4日水曜日

SOLをBNBに変換

BNBの残高が0で困ったので、SOLから変換する。

phantom wallet

STEP1: paybisから$200で購入(住信SBIのデビット【新 dNEOBANK】)
STEP2: phantomに2.21427SOL着金($191)
STEP3: SOLが値上がり$193になる
STEP4: rangoでSOLからBNBにブリッジ&スワップ 2SOL($174), 残り0.20913SOL
STEP5: TX込みでRangoの手数料は0.00514SOL($4.48)、 約2.57%
STEP6: 着金 0.272BNB($173.99)


購入した金額: $200
届いた金額: $173.99
余った金額: $18.28(0.20913SOL)

変換したら微妙に価値が増えたが・・・
変換後の価値: $192.27


ざっくり3.8%ぐらいかかる。



BNB側でのスワップ

Metamask Swap: 0.154BNB -> 100.1USDC
1Inch Swap: 0.154BNB -> 100.4USDC

$0.3ぐらいお得。

ちなみに1Inchでもブリッジできる、間違えてメインネットにUSDCスワップしてしまった。


2026年2月28日土曜日

webmack machineにないから、ここに書いておく。

www3.enix.co.jpみたいなドメインがwebmack machineにないから、ここに書いておく。

エニックスがスクエニになる前。
デジタルエンターテイメントアカデミー(DEA)が、まだエニックスゲームスクールだったころ。

スーパーストII:1994年6月(SFC)
スーパーストII X:1995年8月(SFC)
とかをジョルダン(乗換案内)で作っていたころ。

俺が19歳の時、ちょうど30年前。


1996年に開催した、World Wide ENIX Internet Entertainment Contest(世界 エニックス インターネット エンターテインメント コンテスト)。
どこかに世界があった気がした。

エニックス第1回ゲーム・ホビープログラムコンテスト(1983年、受賞者 中村光一/ドアドア)から10年以上経過して2回目となるコンテスト。


俺は受賞して1万ドルもらってる。
スタインウェイのピアノまで見に行って10万ドルを狙ってたが、
1万ドルじゃ変えないので、飲み会で全部使った。
学校の全員の人におごった。

同じスクールであと1人もらってた奴もいた。


最優秀賞はチリ人、たぶん賞金10万ドル。

ネットで見つけたロシア人、賞金1万ドル

<K-D Lab>







<チーム名忘れた、タイトルも忘れた>
チームといっても5人中、俺だけが作ってたが・・・
内容。
javascriptでできることも少ない。







ENIX Internet Entertainment Contest 1996 入賞作品仕様

概要

  • ジャンル:箱庭系RPG・非同期対人戦闘ゲーム
  • プラットフォーム:Webブラウザ
  • 受賞:ENIX Internet Entertainment Contest 1996 入賞($10,000)

技術仕様

  • サーバー:C++
  • セッション管理:URLパラメータ
  • データ保存:プレイヤーごとに1ファイル
  • 通信:GET(ページ遷移・参照系)、POST(状態変更系)
  • フォーム:サーバーサイドで動的生成

ゲームシステム

街パート

  • フルリロード方式
  • 宿屋・武器屋などの施設を移動(ソーサリアン的構造)
  • キャラクター育成あり(レベル・HP・装備等、詳細不明)

戦闘パート

  • 1日1回、プレイヤー同士の戦闘をサーバーが一括計算
  • 全ターン分をHTML一括生成して返却
  • テーブルレイアウト+GIF画像でグラフィカルに表示
  • ターンごとにスクロールして結果を閲覧

ランキング

  • 対人戦結果によるランキング制

不明事項

  • 敵の種類・配置
  • キャラクター育成の詳細
  • マップ構造の詳細
  • ゲームタイトル






2026年2月24日火曜日

claude-3-7-sonnet-20250219 が廃止

古いclaude APIを使うシステムでエラー。

どうやら、claude-3-7-sonnet-20250219 が廃止された模様。


2026年2月22日日曜日

BMAXのノートPCにlinux mintを入れる

表にトランスフォーマーの顔があるノートパソコン。

DISPLAY: 15インチ
CPU: N4120
WiFi: intel AC系
SOUND: realtek audio
OS: linux mint 22.3
KEYBOARD: US 104

live usbを起動した結果。
・音は鳴る
・wifi使えない

intel系で使えないことは流石にないので、起動オプション変更してみるが・・・
状況確認。


# ドライバー状況確認
dmesg | grep -i iwl


# 結果
iwlwifi 0000:00:0c.0: enabling device (0000 -> 0002)
iwlwifi 0000:00:0c.0: probe with driver iwlwifi failed with error -110


ファームウェアのロード以前にPCIデバイスの初期化自体でタイムアウトっぽい。
Live USBなら起動時のGRUBメニューで e キー押して quiet splash の後に追加。

# grubの起動オプションに追加してテスト
pci=noaer
# または
pcie_aspm=off

ctrl + xでオプション付き起動。


pci=noaerで試したら、wifi認識した。



# ホームディレクトリを日本語から英語に(デスクトップ、ピクチャなど)
LANG=C xdg-user-dirs-update --force


# alt + [チルダ/バックスペース]キーの押下制御
システム設定 → キーボード → ショートカット → 「一般」 カテゴリ → 「同じアプリケーションのウィンドウを循環」
とその逆を削除

これでバックスラッシュを犠牲にして入力切替が動く。
shift押せば~(チルダ)は入力できる。
バックスラッシュは頻度が低いので捨てる。


2026年2月17日火曜日

GLM-5のベータ版

ちょっと前から、verdentならGLM-5がもう使える。





こちらのリンクから40%オフでご利用いただけます:
または、サブスクリプション登録前にダッシュボードから私の紹介コードを入力してください:
紹介コード:FNEN7K
⏰ 登録&ログイン後7日間有効です。





ちなみにtraeでもz.aiのAPIプランならGLM-5を使える。
z.aiをコーディングプランにしてしまうと、APIプランが使えない。
ちなみにAPIプランからコーディングプランにするとチャージしたAPIのポイントが紛失する。
運営に問い合わせても、よくわからん答えが返ってくる。



Z.aiからのメールで2026/02/13からGLM Coding Plan MAXでGLM-5が使えるとなってる。
verdentはOpenAI互換のAPIキー設定できないので、GLM coding planが使えない。
TRAE側ならGLM Coding Plan対応しているが、GLM-4.7までしか対応してないので、クソめんどい。
違うハーネス使いたくないんだわ。



あいうえお