Latest

Dependabotの対応が面倒なのでRenovateを導入する

Dependabotくんはある程度の依存関係の更新を通知してくれるが、山のようにprojectを抱えているとなんとも痒いところに手が届かない。 ということで、Renovateを使ってみる。 Build software better, togetherGitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.GitHub ここからGitHub Appを入れる。 あとは、指示に従ってポチポチするだけで、超かんたんだった。 感想 自動化最高。

By Sakashita Yasunobu

nodejsのバグを見つけたのでPRを投げてみた

概要 要するに、node --testで特定のバイナリを標準出力に書くと、テストランナーが固まったり、異常終了したりするバグです。 バグ自体は既知のものだったようで、修正がされていました。 test_runner: infinite loop in FileTest#drainRawBuffer when child stdout contains FF 0F followed by large size bytes · Issue #62693 · nodejs/nodeVersion v25.9.0 (also reproduced on v24.14.1 LTS, v22.21.0 LTS, v23.4.0) Platform Darwin 25.

By Sakashita Yasunobu
青空文庫のParser

青空文庫のParser

青空文庫のParserを作ってます。 GitHub - P4suta/aozora: Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks.Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks. - P4suta/aozoraGitHubP4suta Rustで作ってますが、配布物はcargoのほかにnpm/pypiでも入手できます Documentation * Playground — try it in

By Sakashita Yasunobu

イケイケなWinスクショアプリを作りました

パソコンのスクショってなんというか、地味というか、撮ってそのままだと何とものっぺりしていますよね。 特にWindowsだとMacっぽい丸っこい感じとかもなく、無骨だなあと。 ということで、それっぽくおしゃれな背景や角丸を付けておしゃれに撮影をしてくれるスクショアプリを作りました。 GitHubで公開しています。 GitHub - P4suta/Snaply: Snaply — a modern, clean-architecture Windows screenshot tool (WinUI 3 / .NET 10)Snaply — a modern, clean-architecture Windows screenshot tool (WinUI 3 / .NET 10) - P4suta/SnaplyGitHubP4suta ウィンドウ・領域選択・スクリーンのキャプチャができます。 タッチスクリーンなどにも対応しているはずです。 撮影をすると、クリップボードにコピーされ、フォルダーへの保存もされます。

By Sakashita Yasunobu
Find My Files

Find My Files

Windowsにおける爆速ファイル検索アプリの定番といえば、Everythingです。 voidtoolswebhost2 その高速さの理由は、NTFSの仕組みをうまく活用していることにあります。Windowsで一般的に使われているNTFSには、ファイル情報を管理するマスターファイルテーブル(MFT)と、ファイルシステムの変更履歴を記録するUSN Journalがあります。Everythingはこれらを利用することで、初回に高速にファイル一覧を構築し、その後はUSN Journalを監視してリアルタイムにインデックスを更新しています。そのため、数百万ファイル規模の環境でも非常に高速な検索を実現しています。 もちろん、単純にファイル名やパスを保持するだけでは、大量のメモリを消費してしまいます。また、数百万件ものファイルから一瞬で目的のものを見つけるためには、メモリ効率の高いデータ構造や高速な検索アルゴリズムなど、さまざまな工夫が必要になります。 このように、Everythingは見た目こそシンプルですが、中身はかなり高度なことをやっているソフトウェアです。 なお、Everyth

By Sakashita Yasunobu
Rust libfprint?

Rust libfprint?

指紋認証は便利で快適です。 iPhoneはFaceIDを使うので別次元の快適さですが、PCでは指紋認証が現役です。 Windows/Macはいざ知らずいざ知らず、Linuxで指紋認証デバイスを使おうと思ってもPlug-and-Playというわけにはいきません。 それどころか、Linuxでの指紋認証サポートは限定的です。 Linuxではfprint projectが主体となって(事実上のデファクトとして)指紋認証デバイスのサポートを行っていますが、指紋認証デバイスの仕様をメーカーが公開していない以上、指紋認証デバイスAを持つユーザーが自分でドライバAを書くほかありません。 メンテナーによる骨の折れる作業と血のにじむ努力によって多数のデバイスがLinuxでサクッと動くようになり、Linux Mintなどの一部ディストロではGUIから気楽に使えるようになったので、対応デバイスをお持ちの方にとってはとてもいい時代になりました。 しかし、まあ、内部実装が歴史的につらい事情などなど、現代的に作り直すことで歴史から解き放ちつつも、共存の道を模索するプロジェクトとしてfprintdというプ

By Sakashita Yasunobu
Claude Code: API Error: Unable to connect to API (ConnectionRefused)

Claude Code: API Error: Unable to connect to API (ConnectionRefused)

先日Claude Codeをイジイジしていたら、前触れもなくAPI Error: Unable to connect to API (ConnectionRefused)とかいう謎のエラーをはいてうんともすんとも言わなくなった。 イヤー困った。 Unable to connect to API (ConnectionRefused) by u/Pristine_Ad9316 in ClaudeCode curlでAnthropicのAPIエンドポイントをたたくと確かにDNS周りでなんだか不穏な様子。 /etc/resolv.confを書き換えろと言われるが、なんとも強引すぎやしないかと思い、そっ閉じ。 ダメもとでsudo shutdown -h nowでお茶を濁したところなんと解決しましたとさ。

By Sakashita Yasunobu
Pure Rust Webp Implementation

Pure Rust Webp Implementation

webpをPure Rustで実装しました。 GitHub - P4suta/webpkit: Pure-Rust WebP codec (VP8L lossless + VP8, encoder & decoder, no_std, forbid-unsafe)Pure-Rust WebP codec (VP8L lossless + VP8, encoder & decoder, no_std, forbid-unsafe) - P4suta/webpkitGitHubP4suta https://crates.io/crates/webpkit libwebpよりも使いやすく、モダンな作りになっています。 no_stdなど、汎用的に使えると思います。 Rustで実装をする以上、unsafeがあると意味が薄れてしまいますので、本実装ではunsafeはありません。 また、ちょっとしたことですし、

By Sakashita Yasunobu

1Passwordを閉じるボタンが……ねえ!

1Passwordを使っていたら、いつの間にかウィンドウの 閉じる/最小化/最大化ボタンが消えていた。Ctrl+Wでウィンドウ自体は閉じられるので長らく放置していたけれど、調べてみたら原因がしょうもなかったので共有しておく。 💡結論 F11を押してみよう 症状 * ウィンドウ右上の最小化・最大化・閉じるボタンが表示されない * タイトルバーも消えている * Ctrl+W では普通に閉じられる * PC再起動、1Passwordの終了・再起動、アンインストール → 再インストール、いずれも変化なし 原因 ただフルスクリーンモードに入っていただけ。 1Passwordコミュニティの投稿「Lost window minimize buttons top rhc.」で全く同じ症状が報告されていて、コミュニティマネージャーの回答が「F11でフルスクリーンを切り替えてみて」だった。 解決手順 1. 1Passwordのウィンドウをクリックしてフォーカスを当てる 2. F11 を押す これでタイトルバーとボタン類が戻ってくる。ダメな場合は Win + ↓(ウィン

By Sakashita Yasunobu

外字と訓点を compile-time hash で解く

aozora は青空文庫の外字参照 (※[#「魚+師」、第3水準1-94-37] のような形) を約 14,000 件のテーブルで解決する。このテーブルを runtime の HashMap ではなく phf (perfect hash function) で持ち、コンパイル時に static 配列に焼き込んでいる。この記事はその選択の根拠と、JIS X 0213 → Unicode フォールバックの設計をまとめたもの。 handbook の対応章: Shift_JIS + 外字 resolver。 外字テーブルの形 外字エントリには 3 種類の解決結果があり、それぞれに対応する variant を GaijiEntry に持たせている。 static GAIJI_TABLE: phf:

By Sakashita Yasunobu

技術

青空文庫の .txt を HTML に変換する最短手順

青空文庫 で配布されている .txt ファイルを HTML に変換したい、という用途向けの手順。Rust の知識は要らない。コマンド 1 行で済む。 1. CLI バイナリを取ってくる aozora の Releases ページ から自分の OS 向けのアーカイブを落とす。 OS アーカイブ名 Linux x86_64 aozora-vX.Y.Z-x86_64-unknown-linux-gnu.tar.gz macOS arm64 aozora-vX.Y.Z-aarch64-apple-darwin.tar.gz Windows

By Sakashita Yasunobu

技術

50,000 ノードの AST を 16 回のアロケーションで: bumpalo 借用アリーナの実例

aozora の AST は bumpalo 単一アリーナの上に構築されている。Box<Node> を素直に並べた版に比べてパースが 6.4 倍速、ピーク RSS が 30% 減という結果が出ている。この記事は、その設計判断と Rust ライフタイムの取り回しを実装の視点から整理したもの。 handbook の対応章: Borrowed-arena AST。 問題設定 青空文庫の典型的な作品は約 500KiB のソースで、aozora がパースすると約 50,000 ノードの木に展開される。素直に Rust らしく書けば次のような形になる。 enum Node { Plain(String), Ruby { target: String, gloss: String }, Container

By Sakashita Yasunobu

技術

7 個のトリガーバイトを 12 GB/s で探す: Teddy を選んだ理由

aozora は青空文庫記法の Rust パーサで、字句解析の最初のフェーズが「ソース全体から 7 種類のトリガーバイトを探す」というマルチパターンスキャンになっている。この記事は、その 1 フェーズに Intel Hyperscan 由来の Teddy アルゴリズムを採用した経緯と、対立候補に勝った算術的な根拠を整理したもの。 handbook の対応章: SIMD scanner backends。 問題設定 aozora-pipeline の Phase 1 (字句解析の最初のフェーズ) は、ソース文字列の中から次の 7 文字の出現位置を全て列挙する。 | 《 》 ※ [ ] 全角空白 これらは青空文庫記法の構文トリガー (ルビ・注釈・字下げの開始/終了マーカ) で、出現する位置だけが分かれば後段のフェーズで「これは何の構文か」を解釈できる。 UTF-8 で見ると 7 文字

By Sakashita Yasunobu

技術

青空文庫記法を解析する Rust パーサ aozora

aozora は青空文庫記法のパーサ。CommonMark や Markdown は扱わず、青空文庫が配布している .txt ファイルに現れる注釈記法だけを対象にする。実装は Rust で、CLI バイナリ・Rust ライブラリ・WASM・C ABI・Python バインディングの 5 種類で配布する。 use aozora::Document; let source = "|青梅《おうめ》".to_owned(); let doc = Document::new(source); let tree = doc.parse(); let html: String = tree.to_html(); let

By Sakashita Yasunobu

光と写真

Capture Oneに待望のネガフィルム変換機能が来た

2026年4月3日、Capture One 16.7.4 がリリースされた。目玉はなんといっても Negative Film Conversion(ネガフィルム変換) の搭載だ。これまで Cultural Heritage エディション限定だったネガ反転処理が、ついに通常の Capture One Pro / Studio でも使えるようになった。 何が変わったのか 従来、Capture One でネガフィルムをポジに変換するには、Cultural Heritage(CH)エディションを使う必要があった。CH は文化財デジタル化向けの専用製品で、Base Characteristics ツールに Film Negative / Film Positive モードが用意されていた。しかし一般の写真愛好家がフィルムスキャンのためだけに CH を導入するのは現実的ではなく、多くのユーザーは Lightroom とそのプラグイン(Negative Lab

By Sakashita Yasunobu

日常の構造

雨の中、歩くべきか走るべきか

傘を忘れた日の永遠の問い、歩くか、走るか、いやいっそ雨宿りをするのか。物理で決着をつける。 モデル 人体を直方体で近似。上面積 $A_{\text{top}}$(頭・肩)、前面積 $A_{\text{front}}$(胸・顔)。雨は鉛直一様(落下速度 $v_r$、数密度 $n$)、距離 $d$ を速度 $v$ で直線移動する。 人体の直方体モデルは、上から見た水平断面が $A_{\text{top}}$、正面から見た鉛直断面が $A_{\text{front}}$ の二面で構成される。移動方向は水平、雨は鉛直に降る。 受ける雨滴数は、上面が $n v_r A_{\text{top}

By Sakashita Yasunobu

光と写真

T-GRAIN・Core-Shell・旧式乳剤の定量比較

Kodak T-GRAIN、Ilford Core-Shell、旧式立方晶乳剤。写真フィルムの性能を左右する三つの乳剤技術を、特許文献と数式に基づいて比較する。 1. 出発点: 旧式乳剤の構造と限界 T-MAXやDeltaが何を改良したのかを理解するには、まず従来の乳剤がどのようなものだったかを押さえておく必要がある。 1980年代以前、標準的なハロゲン化銀乳剤はAgBrやAgBr(I)の結晶が立方体(cubic)か不定形(irregular)の形をしていた。Tri-XやHP5の祖先にあたるこれらの乳剤では、結晶のアスペクト比(直径対厚さの比)はおおむね1:1から2:1。三次元的にほぼ等方的な粒子が乳剤層にランダムに散らばっていた。 この形態が感度と粒状性のトレードオフに直結する。立方晶粒子を一辺 $a$ の立方体として近似すると、表面積と体積、そしてその比は次のとおりである。 $$ S_{\text{cubic}} = 6a^2, \quad V_{\text{cubic}} = a^3, \quad \frac{

By Sakashita Yasunobu

技術

クジラはなぜがんにならないのか

体が大きい動物ほど細胞の数が多い。細胞が多ければ、そのうちどれかががん化する確率も高くなるはずだ。ところが現実には、クジラやゾウのがん発生率はヒトよりも低い。1977年、疫学者リチャード・ピートがこの矛盾を指摘した。以来この問いは「ピートのパラドックス」と呼ばれ、比較腫瘍学における最大の謎のひとつであり続けている。 種の中では予測通り、種の間では崩れる 同じ種の中では、直感どおりの傾向が確認されている。身長の高いヒトはそうでないヒトよりがんの発生率がやや高く、年齢を重ねるほどがんは増える。細胞の数が多いほど、細胞分裂の回数が多いほど、がん化の確率は上がる。 しかし種を超えて比較すると、この関係が崩壊する。シロナガスクジラの細胞数はヒトの約1000倍にのぼるが、がんの発生率がヒトの1000倍になるわけではない。哺乳類全体を見渡しても、体サイズとがんリスクの間に明確な正の相関は長い間見つかっていなかった。がんの発生率は種が異なっても約2倍の範囲にしか収まらないとされてきた。体サイズの差は100万倍を超えるにもかかわらず。 ゾウが持つ余分ながん抑制遺伝子 最もよく知られた説明は

By Sakashita Yasunobu

技術

電脳空間のハエ

ショウジョウバエの脳がコンピュータの上で再現され、仮想の体に接続されたら、歩き始めた。強化学習で訓練されたわけでも、行動規則をプログラムされたわけでもない。ニューロンの接続パターンをコピーしただけで、ハエは動いた。 何が起きたのか 2026年3月7日、サンフランシスコに拠点を置くEon Systems PBCが、デモンストレーション映像を公開した。同社の共同創設者であるAlex Wissner-Grossによれば、世界初の「身体を持つ全脳エミュレーション(embodied whole-brain emulation)」だという。 「全脳エミュレーション」とは、生物の脳の神経回路をニューロン単位、シナプス単位でコンピュータ上に再現し、動作させることを指す。「身体を持つ」とは、その脳のシミュレーションが物理法則に従う仮想の体に接続され、感覚入力を受け取り、運動出力を返す閉じたループを構成していることを意味する。 これまでにも脳のシミュレーションや体のシミュレーションは個別に存在した。線虫(C. elegans)の神経系を再現するOpenWormプロジェクトは約302個のニューロン

By Sakashita Yasunobu

光と写真

写真のしくみ ④ 虫めがねが紙を燃やす「焦点」のひみつ

💡シリーズ「写真のしくみ」について 光はまっすぐ進み、レンズは世界をひっくり返す。写真と映像にひそむ小さな「なぜ?」を、数式なしで解き明かす全40回。 晴れた日に虫めがねを持って外へ出てみましょう。地面に黒い紙を置いて、虫めがねを太陽にかざします。レンズと紙のあいだの距離をゆっくり変えていくと、紙の上の光がだんだん小さくなって、あるところでぎゅっと小さな点になります。 その点をじっと動かさずにいると、白い煙がすうっと立ちのぼって、やがて紙がこげはじめます。 小学校の理科の実験で経験した人も多いのではないでしょうか。でも、あらためて考えてみると不思議です。虫めがねはただの透明なガラス。火をつける道具なんかではありません。それなのに、なぜ紙が燃えるほど熱くなるのでしょうか。 この「なぜ?」の先に、レンズの本質が隠れています。 太陽の光は「平行」にやってくる まず、太陽の光について考えてみましょう。 太陽は地球からおよそ1億5000万キロメートルも離れています。あまりにも遠いので、太陽から届く光は、地球に届くころにはほぼ完全にそろって「平行」に進んでいます。つまり、どの光も

By Sakashita Yasunobu

光と写真

写真のしくみ ㉔ 白黒しか見えないセンサーがカラー写真をつくるしくみ

💡シリーズ「写真のしくみ」について 光はまっすぐ進み、レンズは世界をひっくり返す。写真と映像にひそむ小さな「なぜ?」を、数式なしで解き明かす全40回。 カメラのシャッターを切れば、カラー写真ができあがる。あまりに当たり前なので、そのしくみを不思議に思う人は少ないかもしれません。でも実は、カメラの中では驚くほど巧妙なことが起きています。 センサーは色が見えない いきなりですが、ちょっとびっくりする話から始めましょう。 デジタルカメラのセンサーは、色が分かりません。 「え、だってカラー写真が撮れるじゃん!」と思うかもしれません。もちろん最終的にはカラーの写真ができあがります。でも、センサーそのものが見ているのは、実は 「光の強さ」だけ なんです。 センサーの表面には、何百万、何千万という小さな「画素(ピクセル)」が並んでいます。ひとつひとつの画素は、光が当たると電気信号に変えます。光が強ければ大きな信号、弱ければ小さな信号。やっていることは、いわば 「ここは明るい」「ここは暗い」と測っているだけ です。 目をつぶって手のひらを太陽にかざしてみてください。まぶたの裏が明るく

By Sakashita Yasunobu

光と写真

写真のしくみ ⑯ 虫の目になるマクロ撮影のしくみ

💡シリーズ「写真のしくみ」について 光はまっすぐ進み、レンズは世界をひっくり返す。写真と映像にひそむ小さな「なぜ?」を、数式なしで解き明かす全40回。 前回は、絞りすぎると光の回折でぼやけるという「くっきりの限界」を見ました。今回は視点を変えて、ふだん肉眼では見えないほど小さな世界へ飛び込むマクロ撮影の話です。 きみは道ばたにしゃがみこんで、アリをじーっと見つめたことがあるでしょうか。花びらについた朝つゆをのぞきこんで、小さな水玉の中にひっくり返った景色が映っているのを見て、ちょっとびっくりしたことは? ぼくたちの目は、ものすごく近いものにはピントが合いません。試しに、人差し指を目の前5センチくらいまで持ってきてみてください。指紋がぼやけて見えるはずです。実はカメラのレンズにも、これとまったく同じ限界があります。 マクロ撮影というのは、その限界をぶち破って、小さなものを大きく写す技術のことです。テントウムシの背中の水玉もよう、タンポポの綿毛の一本一本、蝶の羽についた鱗粉のきらめき。ふだん肉眼では「なんとなく」しか見えなかったものが、写真になると「こんな世界だったのか!」と声が

By Sakashita Yasunobu