LongCat-Flash-Thinking-2601は日本語が得意

MeituanのLongCat-Flashフラグシップモデル。
総パラメータは562Bで、アクティブパラメータが19B-32Bの可変で平均27B。 Mac Studio 512GBでMLX 4bitを試します。

日本語がかなりうまく、そのために使ってもよさそう。
ただ、562Bで重いので、おうちエージェントに使うには厳しい。コードもなんか変なミスをしていた。

Liteの紹介はこちら。
LongCat-Flash-Lite 70Bなら64GB Macで動くし速いがエージェント未対応 - きしだのHatena

小説を作ってもらう

小説をつくってほしい。勇者が力に目覚めて、魔王に捕らえられた姫を助けにいく。現代の東京に、なぜか剣と魔法を使う世界が発生した状況で。

ヘルハウンドとか出てきて、ちゃんとわかっとる感じがある。

結末も、異世界に帰ったとされた姫が隣にいるというベタだけどちゃんとひねりがある。

LongCat-Flash-Liteも日本語がよく書けてたけど、オープンモデルでは一番かけてるかもしれない。

日本情報

松下村塾は全然モダンではないけど、Liteよりはまとも。ギャル口調はいい。

Thinkingとついてるように思考するんだけど、なんか言葉遣いがやっぱりフランク

普通に聞いたら普通にちゃんと答えました。

常識的なことは知ってるけど特産とかはダメっぽい、そのくらいの粒度でローカルの知識がありそう。

要約

注文の多い料理店」の要約。内容は文句なしですね。

読込には19秒かかっています。Mac Studioでは大きいモデルでどんどんプロンプト読み込みが重くなります。

難しい問題

難しい問題を。

「64歳以上であれば100円、64歳未満は1000円」を整数四則演算だけで実現して。
年齢制限なく対応できるように。

最初に比較演算子を使ってきたけど、とりあえず127歳まで対応のバージョンは出してきました。

そのあとツラツラとあまり関係ない話をつけたしていたので、自信がなさそう。

ブロック崩し

こんな感じで、一行前で正しく使えてる変数の大文字小文字を間違えるミスがあった。

        } else if (paddleX > getWidth() - PADDLE_WIDTH) {
            paddleX = getWidth() - Paddle_WIDTH;

Liteのほうでも一行前で定義した変数を間違えていた。
なんか独特の仕組み使ってるんだろうか。
可変のMoEの影響?

それ以外は問題なかった。

エージェントでのSpring Boot TODO管理

Roo CodeでSpring Boot TODO管理をつくります。

Spring Bootでtodo管理アプリを作って。 Spring MVCでテンプレートにthymeleafを使って。
DBはH2でアクセスにはSpring JDBCを。
Spring Bootは3.5.9、Maven管理でJavaのバージョンは25

ユーザーが間違ってることにしてJava 21で進めてる。

まあでも、めちゃくちゃ時間がかかった以外は、特に問題なく実装していました。

Roo Codeのプロンプトは10,000トークンくらいあるようで、読み込みに数分かかります。
なので、おうちエージェントには厳しい。

まとめ:日本語が得意

表現や要約など、日本語がかなり得意で、オープンモデルで一番いい気がする。
コードは書けるけどポカミスが多く、重いのもあってローカルでは使えないですね。

LongCat-Flash-Lite 70Bなら64GB Macで動くし速いがエージェント未対応

LongCat-Flash-Liteは、Uber Eats的な会社、Meituan(美団)が1/30くらいに出した68.5Bでアクティブ3Bのモデルです。ライセンスはMIT。

ということでMac Studio 512GBのLM StudioでMLX 4bitを試したのだけど、速くて日本語表現はかなりいいしコードもちょっと書けるけどコーディングエージェントでは使えなかった。残念。

562BのThinkingの紹介はこちら
LongCat-Flash-Thinking-2601は日本語が得意 - きしだのHatena

まずは異世界もの小説を作ってもらう

異世界もの作ってもらいます。速い。80tok/sec出てました。

日本語も不自然なところはありません。
しかし小説は次回予告で終わったw

日本知識は

山口県をギャルっぽく紹介してもらうと・・・何も紹介してくれんかった。ギャルっぽくあるのかもしれんが。

こういう日本語表現ができるのはすごいです。

気を取り直して普通に特徴を教えてもらうけど、だいぶ間違っている。

要約

注文の多い料理店」を要約してもらいます。だいたいあってる。少し最後が残念。

それより、この読み込みが2.98秒というのがめちゃくちゃ速い。Qwen3 Coder Nextでは5秒、GLM-4.7では30秒でした。

Open WebUIで試すとちょっと間違うの気になる。だいたいLM Studio上で動かすほうが性能いい気がします。

難しい問題

難しい問題をきいてみます。

「64歳以上であれば100円、64歳未満は1000円」を整数四則演算だけで実現して。
年齢制限なく対応できるように。

最初は丁寧に答えようとしてますね。

でも回答に行き詰ると、地がでる。

Thinkingモデルではないけど、見えるところでThinkingやってます。

結局できないという回答。127歳まで対応の式も導けませんでした。

ただ、こうやってThinkingのようなことをやるので、論理的な組み立てはできそうです。

ブロック崩しを作ってもらう

まずブロック崩しを作ってもらいます。

最初のコード、クラス名を間違い、その変数名を次の行で間違い、というミスが。

BlockBre breakerPanel = new BlockBreacker();
frame.add(blockerPanel);

ちょっと不安になったけどタイポらしい。

コピペミス・・・いやいや。で、リトライできないというとこれ。「なんでだろう?」じゃないんだよw

「よろしくね」とか「ああ、わかった!」とか、口調がフランク。

ネコだからしかたないか。

一応ちゃんと動きました。

エージェントでSpring Boot TODO管理

まずRoo Codeで試します。が、なんかタグがlongcat_で始まってしまっておかしい。

OpenCodeも同様。

ということでエージェントはあきらめ。雑エージェントで試したところ、コードは生成できてるので残念。

あとで8bitで試してみます。 -> 同じだった。

VRAM96GB(Unified memory 128GB)でどのLLMが使えるか

VRAM96GBが使える環境が増えてきていますね。そんな中、どのLLMを使うのがいいか考えてみます。
候補としては、gpt-oss-120b、GLM-4.6V、Qwen3-Coder-Nextがあります。 で、まあ、安定性のgpt-oss、汎用性のGLM、複雑なコードはQwen3、という感じで使いわけがいいんではないかと。
常用チャットは画像対応のGLM-4.6Vかな。

※ Llama4 ScoutやQwen3-Nextもありますが、Llama4 Scoutは少し古くて性能が劣るのと、Qwen3-NextはQwen3-Coder-Nextとかぶるので挙げていません。
※ LongCat-Flash-Liteをダウンロードしたまま忘れていたけど、軽くて良かった。しかしエージェントが動かない。

100B前後のLLM

モデル サイズ アクティブ 画像 公開時期
gpt-oss-120b 120B 5B - 2025/8
GLM-4.6V 106B 12B o 2025/12
Qwen3-Coder-Next 80B 3B - 2026/2
LongCat-Flash-Lite 69B 3B - 2026/1

gpt-oss-120b

OpenAIのモデル。 ここではgpt-oss-20bを動かしてますが、20Bでも指示追随性や破綻のなさがすごいです。
OpenAIのオープンモデルGPT-oss 20Bがすごすぎる - きしだのHatena

他のモデルは、たまに同じ文を繰り返し出力する問題が出ますが、gpt-oss-120bはそういった挙動がかなり少ない。

Roo Codeに作らせたSpring BootのTODO管理アプリがこちら

卒なくできていますが、夏頃のモデルはまだエージェントの考慮がされていないので、素のHTMLです。
この冬に出てきた他のモデルは、コーディングエージェントが流行るのを見て開発したのもあって、モデルが出たときにコーディング性能を最初に示すようになっているし、HTMLのデザインにも力をいれているようです。

口調は、まんまChatGPTです。表現力はそこまで高くない。

さくらのAI Engineで試せます。またAPIは3000リクエスト/月まで無料です。
https://www.sakura.ad.jp/aipf/ai-engine/

GLM-4.6V

z.aiのモデル。 このサイズ帯では唯一の画像言語モデルです。 https://chat.z.ai/

ここで試してますが、日本語の表現力も高く、チャットで使うならこれ。
Z.aiの新しい画像言語モデルGLM 4.6Vよさそう - きしだのHatena

Spring BootでのTODO管理アプリはこう。HTMLのデザインがちゃんとされています。

コードも書けて安定感もあるので、難しいコードじゃなければGLM-4.6Vがいい気がしています。

Qwen3-Coder-Next

Alibabaのモデル。
非線形アテンションを使ってメモリ消費が抑えられているのも強み。

ここではダメと書いていましたが、VRAM96GBで動くLLMでは最高のコーディング性能ではあるので、欠点をふまえながら使うというのはいいんではないかと。(あとでそういうブログ書く)
Qwen3-Coder-Next 80Bがコード書けるけど失敗の質が悪すぎてダメな理由をアーキテクチャから見てみる - きしだのHatena

つまり、コンパイラやテストで失敗を検知できる形にして、うまく動くまで再試行させる、というのがよさそうです。

Spring BootでのTODO管理アプリはこうなりました。

口調はChatGPTの嫌なところをそのまま、という感じ。

LongCat-Flash-Lite

Meituan(美団)のモデル。70B-A3Bで軽い。この4bit量子化がエージェントで使えれば64GBメモリでも使えてよかったけど、Roo CodeもOpenCodeも動かなかった。
LongCat-Flash-Lite 70Bなら64GB Macで動くし速いがエージェント未対応 - きしだのHatena

口調はフランク。
日本語表現はかなりいいです。 話し相手に使うにはいいかも。

VRAM96GBのハードウェア

VRAM96GBを積んだGPUというとRTX PRO 6000がありますが150万円くらいしますね。Amazonだと250万円。

asin:B0FTDC9VGF:detail

なぜかXのタイムラインだとみんなRTX PRO 6000を2枚くらい挿してますが、電源も1200W推奨ということで、結構出費が必要。2枚挿したくなるだろうし。

でもUnified memoryなPCがいくつか出てるので、こちらが本命ですね。

Ryzen AI Max+ 395が載ったEVO-X2がSDD2TBで40万円ちょい。(年初に見たとき35万、去年10月ごろは29万円だったのに)
asin:B0FRMDHSD6:detail

128GBのMacならSSD1TBで58万円
https://www.yodobashi.com/product/100000001009091812/

DGX SparkがASUS Ascent GX10で、これもSSD1TBで58万円
ASUS Ascent GX10 GX10-GG0006BN 90MS0371-M00060 (1TB) | パソコン通販のドスパラ【公式】

WindowsでゲームもしたいならEVO-X2、MacがいいならMac、パソコン的な使い方を求めずファインチューニングや画像生成AIなどGPUアプリをいろいろ動かしたいならDGX Spark、というところですね。

インテルCPUが欲しい場合は、春になったらPanther Lake搭載のEVO-T2が出るという噂。
もう発表しちゃうん……?GMKtec、世界初のPanther Lake搭載ミニPC「EVO-T2」 - PC Watch

サーバーではNVIDIAの独壇場だけど、PCではAMDAppleIntelNVIDIAがしのぎを削る、ということになりそうで、それはそれでよい。

まとめ

50万円くらいで動くLLMでもできることが増えてきています。
去年の春には「ローカルLLMが使いものになる」と、なんなりかの用途に使えるということを書いていましたが、今年は日常的に使えるようになっていきそうです。
Gemma 3やQwQなどでローカルLLMがそろそろ使い物になってきた - きしだのHatena

asin:B0DZDQ646B:detail

Qwen3-Coder-Next 80Bがコード書けるけど失敗の質が悪すぎてダメな理由をアーキテクチャから見てみる

Qwen3-Coder-Nextが出ていますね。
Qwen3-Coder-Next: Pushing Small Hybrid Models on Agentic Coding

Qwen3-Next 80B-A3Bをベースにしたコーディングモデルです。80Bで、Activeパラメータは3Bということで、かなり軽快に動きます。
しかし、元になるQwen3-Nextでは一発のコードはかけるものの やりとりすると弱く、あまりコードは書かせれないなと思っていたので、同じアーキテクチャならちょっと不安が。Qwen3-Nextは線形アテンションを取り入れてるけど、コーディングには向かないんじゃなかろうか、と思っていたので。
そして、その不安は現実に、ということをまとめます。失敗の質が悪い。アーキテクチャについては最後にまとめてます。

確かに、Qwen3-Nextに比べるとかなりコードが書けるようになったようです。でも、単発のコードはかなり書けるが、やりとりの筋が悪く、長いタスクはまかせれない、というところ。コードを書いてもらって編集の指摘をして、と進む作業には不安があります。
なので、ベンチマークなどコード一発かかせて「性能が高い!」という話はあまり鵜呑みにせず、実際の利用形態で確認するほうがいいです

GGUFとMLXで試す

Mac Studio 512GBのLM Studioで動かします。
MLXが爆速!58toc/sec出てました。GGUFでは36toc/secです。

GGUFはUnslothさんところのQ4_K_Mです。
https://huggingface.co/unsloth/Qwen3-Coder-Next-GGUF/blob/main/Qwen3-Coder-Next-Q4_K_M.gguf

6bit成分多め。

ちなみに、llama.cppでのQwen3 Next実装にバグがあったらしく、修正されています。LM Studioに来るまでタイムラグがあると思うので、いま試してる人は注意。
https://github.com/ggml-org/llama.cpp/pull/19324

MLXはLM Studio CommunityのMLX 4bit。
https://lmstudio.ai/models/qwen/qwen3-coder-next

MLXはプロンプト読み込みが遅いと書いたのですが、Qwen3-Coder-NextではMLXのほうが速いです。
MacでLLMを動かすときMLX版はGGUF版に比べてプロンプト処理がかなり遅い - きしだのHatena

注文の多い料理店」の要約では、プロンプト読み込みがGGUFで4秒、MLXで2秒くらいでした。GLM-4.7のときに30秒と60秒だったのに比べると激速。
これは線形アテンションの恩恵かな。

コードを書かせた

まずは、いつものブロック崩し
JS版でやってみた。あとでパーティクルの追加とブロックのグラデーションをやってもらってる。

Java版も。

型エラーを出してきたので、ちょっと印象が悪いけど、指摘したらすぐなおしたので問題なし。

main.java:138: エラー: 不適合な型: 精度が失われる可能性があるdoubleからintへの変換
            dx = 4 (hitPos - 0.5) 2; // 左/右へ曲がる
                                    ^
エラー1個
エラー: コンパイルが失敗しました

新しいswitch構文も使ってますね。JavaのSwingのコードは古いものが多く、ラムダ式ではなく匿名クラスを使ったり新しい構文を使わないことがあるのだけど、安定して新しい構文を使ってる印象。

そして、コード差分を表示するツールも一発で作ってくれました。

コードの修正が怪しいと感じていたので、確認用に。こういう、その場で必要なツールをその場で用意できるのは便利ですね。

一発のコード生成はかなり向上してるようです。
gpt-oss 120bやGLM 4.5 Air(106B)など、他の100Bクラスのモデルよりも難しいコードを書けるかな、という印象です。
GLM 4.7と比べると、先ほどのようなコンパイルエラーがあったり、パストレーシングのような難しいコードはうまく書いてくれませんでした。
確実性でいうと、gpt-oss 120bやGLM 4.5-Airのほうが安定感があります。

Spring Bootアプリ

OpenCodeでSpring BootでのTODO管理を作ってもらうとこんな感じ。

Qwen3-Nextだとこうだったので、画面構成はかなりの進化。

最近のモデルはだいたいちゃんとスタイルシートをあてるようになってきているので、これは昨年頭からのコーディングエージェント流行をみてHTMLデザインのトレーニングを増やしたんではないかという気がする。9月に出たQwen3-Nextでは間に合わなかったということだろう。

ただし、Thymeleafではエラーを出しまくっていた。こんな感じで、タグの中にタグをかくようなこともやっていた。

<button type="submit" class="btn btn-sm btn-outline-<th:block th:if="${todo.completed}">success</th:block><th:block th:unless="${todo.completed}">primary</th:block>">

やりとりしてると怪しい

誤差逆伝播を可視化して」という雑プロンプトでお願いしてみました。最初にPythonで書いてきたので「HTMLにして」と。

HTML版で図にはなったけど、アニメーションも欲しい。

「アニメーションしない」というと、アニメーションをしないバージョンを作ってきました。元からアニメーションしてないんだけど。

このように、所望の挙動をしていない問題を伝えると、その挙動をしないようにしてという指示なのかと、なんか工夫してくることはよくあること。それ自体は仕方ない。

けど、「アニメーションして」というと、ノードを結ぶ線が消えてます。

このとき、「意図せず簡略化されてしまいました」にちょっとした不安。他のLLMで、意図せず消えたということある?と。

そして、修正してもらっても表示されず。

最終的に、変なところに線が引かれてよくわからなくなりました。究極可視化なのに。

アニメーション可視化->完全可視化->完全可視化確実表示版->究極可視化と育っていくのがいいですね。
そのときの言葉、「究極の誤差逆伝播可視化をご提供します」は胸が熱くなりますね!動かなかったけど。

あと、この配色にQwenらしさある。

GLM-4.7では、こう。

GLM-4.7で自宅コーディングエージェントが現実的に。日本語力も高く幅広く使える。 - きしだのHatena

毎回UIがちょっとずつ違う

「パストレーシングでのcgをhtml+javascriptでつくって」とやってみたんです。
そうすると、こう。青黒の画面。まあ、CG出力プログラムではよくあること。GLM-4.7も一発目は黒い画面でした。

そうこうすると、なんか黒い球っぽいものが。
CGのコード、これが大事ですね。レンダリングしたい物体がちゃんと画角におさまってる。

次こそ!と思ったら、また表示されなくなる。

そのときの反応が「requestAnimationFrame(renderLoop) の呼び出しを忘れていました」ってそんなことある?二回目。

そしたら、キター!これレンダリング途中じゃなく、レンダリング完了したところです。

そして、全体を表示してほしいと、状況を伝えると、次はこれ。

レイトレのコードを開発する過程で、ここまで来て真っ暗に戻るというのは考えづらい。
ちょっと、コード作業があてにならんなというところでエラーが出て終了。

上記のキャプチャ、よく見るとUIの文言などが安定してないですね。そのあたりで修正作業の不安定感が出始めていました。

ちなみにGLM 4.7

コーディングがあてにならない

これ、GGUFがだめなのかなと、MLX版でやってみました。
最初から何かが表示される。

角に黒いなにかが表示されるだけ、と伝えたらこれ。何か見えてる!

これは幸先いいぞと思ったら黒画面・・・

レイトレのコードを開発する過程で、ここまで来て真っ暗に戻るというのは考えづらい(2回目)。

何回か修正依頼してたらログを吐くようにしたバージョンを出してきた。どうやらhitにatという関数がないっぽい。

30行前に自分で生成コードを書いたオブジェクトの呼び出し関数を間違えるのどうなの、

それはともかく、なんか動くようになった。。。

けど球体どこ・・・

ところで、UIもまた揺らいでますね。例えば「サンプル数」->「サンプル数(品質)」->「品質(サンプル数)」->「サンプル数」とか。
結局、こういった揺らぎがコードでもおきてたのでした。

58tok/secで出てくるコードを眺めながら、「毎回違わんか?」と思って確認したら毎回違う・・・

いくつかのバージョンでクラスや関数をまとめたものがこちら。

クラスがRayクラスさえ消えていたり。そしてEllipsoidクラスが生えてる。その後Rayクラスが復活して、しばらくするとEllipsoidクラスが消えた。
黒まる3つのあと何も表示されなくなったのは、Rayクラスを消したからだったようだ。そして、復活しても何も表示されないのは、新たなバグを生み出したから。
つまりまた、なぜか消えてる。

関数もchangeSampleがupdateSamplesになり、すぐ消え、renderはrenderLoopになり、最初から最後まであるのはtraceとclampくらいか。
要するに、ごっそり最初から書き直してる。なので、「今まで動いてた」が通用しない。ひとつずつバグを潰して、ということにならない。
そりゃ「意図せず簡略化」や「呼び出しを忘れていました」も、そんなことある。

もちろん、今回はチャットUIでやっていて毎回書き直しだから、コーディングエージェントでファイルの一部編集ならこういうことは起きにくいというのはあるかも。
けど、HTMLで画面配置をいじるとタグをまとめて書き換えるときがある。そのとき、ちょっと文言やデザイン、UI要素が変わるということは起こりそう。リファクタリングだと、それっぽい別実装になりそう。

あと、コーディングエージェントのセッション中の指示を忘れそう。「Javaプロセスを殺すな」と言ったその3ステップ後にJavaコマンドを殺すコマンドを入力していた。

ところでこんなJavaScript解析ツールをClaudeさんに作ってもらってます。

最初はQwen3-Coder-Nextに作ってもらってたんだけど、JavaScriptは コード中に</script>があるとスクリプトを抜けて処理が終わってしまう仕様で、毎回ひっかかるのであきらめた。

これ「</script>が入ると動かないので修正して」として出てきたもの。

一度は動いたけど、それを修正したらまた</script>だらけになっていた。これも全部書き換えなおす挙動のせいともいえる。よく見ると、表示の文言は毎回すこしずつ変わっていた。

Qwen3-Coder-Nextのアーキテクチャ

なんでこうなるかというと、これはQwen3-Nextのアーキテクチャが原因じゃないかと思います。
Qwen3-Nextは、TransformerのO(n2)を回避するために、O(n)で計算可能な線形アテンションを採用しています。
その線形アテンションとして選んだのがGated DeltaNet。
Qwen3-Next: Towards Ultimate Training & Inference Efficiency

Gated DeltaNetを基本に、4回に1回はTransformer系(Gated Attention)を使うというものです。

同じく線形アテンションを採用したNemotron 3はMamba2を使ってるけど、似た感じでMamba2 x 3 + Attentionというグループを重ねてるみたい。
NVIDIAのLLM、Nemotron 3 Nanoは賢いけどコーディングには向かないかも。Mamba 2の特性が悪く出てる? - きしだのHatena

実際のQwen3-Coder-Nextのモデル構成を見ると、2進数で下二桁が11のレイヤーはself_attnを持つけど、それ以外はlinear_attnです。これがGated DeltaNextということですね。
https://huggingface.co/Qwen/Qwen3-Coder-Next/blob/main/model.safetensors.index.json

では、線形アテンションで、Transformerがトークン同士を比較してO(n2)になっているのをどうやって線形に、つまりO(n)にするかというと、ざっくり言えば、やってきたトークンをそこまでのすべてのトークンと比較するのでなく、大きさ固定の一塊に対して処理をします。その大きさ固定の一塊にはそこまでのトークンの総合情報がある。そして、トークンを処理したあと、その一塊にトークンを混ぜ込めば線形時間で表現できる。

MambaなんかはTransformerと数学的に等価だと言ってるけど、実在の計算機での計算だと最初のトークンほど誤差が積みあがっていく。
線形アテンションには、そういった、最初に計算したトークンに誤差が積みあがっていく性質がでてくるはず。

これは、翻訳や要約、解説、対話など、多くの言語処理では問題ないけど、コーディングでは厳しそう。

TransformerのO(n2)問題は対処していく必要があって、Qwen3-Nextのチャレンジも大切で、アーキテクチャやトレーニングの改善で線形アテンションでコーディングもできるようになることには期待している。

原神広告依頼を装ってアカウントを奪う詐欺

こういうDMが来てたんだけど、怪しいし原神とか一回も触れたことないのにこんな投稿しても違和感しかないのでスルーしてた。

どうやら詐欺っぽいということで、試しに返事を返してみたら、こういうリンク付きの返事が。

ちなみに、返事の内容は見てなくて勝手にストーリーが進む系のDMスパムっぽい。

twitter. centerというドメインがダメですね。

リンクを踏むとこういう画面。ここで「Googleでログイン」を押すと「間違い。もう一度試してください。」と出る。

なので、ユーザー名を入力することになる。ユーザー名を入力して「次へ」を押すとパスワード入力へ。

一度は必ず失敗して、二度目の入力で電話番号を入れる画面。

恐らく、裏でログインを試していて、ホンモノのXからSMSで認証コードが送られてくるので、ここで入力した電話番号に「さっきのコードをここに入力」のようなリンクを送って認証コードを入力させるんじゃなかろうか。

そうすると、アカウントが乗っ取られることになる。

お気をつけを。

Oracleのソートアルゴリズムの特許が切れていたのでClaudeさんに実装してもらった

OracleがもっていたソートアルゴリズムのUS7680791B2特許が昨年11月28日で期限切れとなり開放されました。
US7680791B2 - Method for sorting data using common prefix bytes - Google Patents

この記事で紹介されていた。
Expired Oracle Patent Opens Fast Sorting Algorithm to Open Source Databases - InfoQ

この記事で、「特許が詳細なのでAIに入れたらすぐ実装できる」みたいなことを書いてあったので、試しにClaudeさんに渡してみたらすぐ実装してくれた。

一応ソースのリンクは貼っておいたけど、自分で試してみると楽しいと思う。あと、解説も軽く書いたけど、リンク貼ってAIさんに聞くほうがいいと思う。

アルゴリズムとしては次の3つがキー

  • Common Prefix Skipping Quicksort: CPS-QS
    • キーの先頭の共通部分を比較しない()
  • Key Substring Caching
    • 共通プレフィクスの次の2バイトをキャッシュする
  • Adaptive Quicksort(AQS)
    • QuickSortとRadixSortを切り替えながら使う

まず3つにパーティションを分けるQuickSortを行って、共通プレフィクスが増えたらRadix Sortで共通プレフィクスの次のバイトで256分割して、さらにQuickSort、という感じ。

そうすると、データベースでよくある最初のn件を取得とか、メモリからあふれるときにディスクに書くとかと相性がよいということらしい。

最初はSonnetさんに実装してもらってベンチマークとかを作りこんで、それからOpusさんに最適化を頼んだら、ちゃんと実装されていないといって作り直してくれた。
https://gist.github.com/kishida/660d1993a3c64cd2437ea1f14bac2a81

結果的には、Javaの標準ソートのほうがだいたい速くて、やっぱJava標準ライブラリの最適化はすごいねぇとOpusさんも言ってました。

ところで、このアルゴリズムOracle 10gR2に組み込まれたとき、ラリーエリソンから短い感謝のメールを受け取ったものの、昇進やボーナスはしばらくOracleに在籍しないとダメよってなったのが退職のきっかけだったという話で、世知辛い。
Small Datum: Common prefix skipping, adaptive sort

LuxTTSに自分の声でしゃべらせる

LuxTTSというのが出ていたので自分の声でしゃべらせてみました。 日本語はしゃべれないし英語もそんなによくないのでQwen3-TTS使うことになるけど。
https://luxtts.com/

デモのスクリプトは足りない変数とかあったり使いづらいのでGradioの画面を作った。

ソースはここに。プルリク送ってるので、取り込まれたらそのまま使えるはず。
https://github.com/kishida/LuxTTS/blob/gradio_demo/demo.py

結果、こんな感じ。
なんかどんどんテンションが高くなったりする。

ちなみに自分でちゃんとしゃべると、こう。

Qwen3-TTSにやらせよう。
Qwen3-TTSに自分の声でしゃべらせる - きしだのHatena