Rust

Expressに22個以上の要素の配列クエリを渡すときは気をつける

自作ライブラリを使ったBlueskyクライアントを実装していて遭遇したバグ。 ATriumからのfeed.getPostsでurisが21個までなら大丈夫だが22個以上だとエラーになることが発覚した。問題切り分け中… ここまで自作クライアント実装してようやく気付く問題があるん…

BlueskyのDesktop Client Appを作り始めている

ATProtocolのRustライブラリを作っている 活動の続きとして、ライブラリの動作確認も兼ねてDesktop Applicationを作ってみることにした。 Tauri RustでDesktop Application作成、といえば今もっとも普及しているのがTauriだろう。 tauri.app ステータスとし…

Rustのserdeで、データフォーマットによって異なる型にserialize/deserializeする

背景 CidLink serde_json, serde_ipld_dagcbor 問題点: データフォーマットによって対象の型が異なる 最初の解決策: is_human_readable() による分岐 うまくいかないケース 解決策(?): Ipld を経由しデータの構造によって分岐する 汎用的? な解決策: Untag…

Cloudflare Workersで、自分のはてブをBlueskyに流す

bsky.app そういえば、古き良き時代は自分のブックマークは自動でTwitterに投稿されていたのだった。 今はBlueskyがメインになっているので、同じ仕組みが欲しい、と思った。ので、作った。 github.com 要件 先行事例 Rust版 WASM対応 Cloudflare Workersで…

自動でtokenをrefreshして再送するRustの非同期HTTP Client

半年ほど前から、BlueskyのAT ProtocolのRust版ライブラリを作っている。 memo.sugyan.com github.com その中で最近実装した機能の話。 API Agent AT Protocolの認証 tokenの管理と自動更新機構 ATriumでの実装 XrpcClient trait session管理するwrapper tok…

PentominoをBitboardを使って解く

子どもが百均で買ってきたパズルをやってみたら、全然うまく出来なくて悔しかったのでプログラムで解を探すことにした。 Pentominoとは 探索アルゴリズムと実装 計算量概算 効率的な探索の方針 backtracking Bitboardによる検索と判定 候補の事前計算 実装と…

AT Protocol(Bluesky)のためのRustライブラリを作った

前記事 でOCamlやってくぞ、と書いたけど結局Rustです。 Bluesky AT Protocolとエコシステムの現状 (〜2023/04) Rust版の実装 Lexiconとコード生成 自作Rust版実装: ATrium Lexicon schema コード生成 API設計 Lex CLI 今後 Bluesky Twitter代替の候補として…

Advent of Code 2022 を完走した

毎年12月に開催されている Advent of Code に、2019年から参加している。 過去記事: Advent of Code 2019 に挑戦している - すぎゃーんメモ Advent of Code 2020 完答した - すぎゃーんメモ 2022年のAdvent of Codeにも挑戦していて、年が明けてしまったが先…

2023パズル をRustで解いてみる

tkihiraさんの問題が面白そうだったので挑戦してみた。 2023年クイズ!上の例のように、数字の合間に四則演算(+−×÷)や括弧を入れることで、2023 を作ってください。- 数字の間に必ず演算子を 1 つ入れてください- ただし 9 と 8 の間には既に ÷ が入って…

Rustで将棋棋譜変換ライブラリを作った

将棋棋譜の形式色々 KIF CSA USI/SFEN 文字表記 その他 JSON棋譜フォーマット(JKF, json-kifu-format) 自作parser, converter クレート公開 Rustでjson-kifu-format互換の将棋棋譜変換ライブラリを書き始めていて、ついに分岐までちゃんと対応した.kifファイ…

SIMDによる将棋Bitboard計算の高速化

自作Rust製将棋合法手生成ライブラリ、計算の高速化のためBitboardの128bit計算をSIMDで行うようx86_64のAVX2、AArch64のNEON、wasm32のsimd128で動くようにそれぞれ実装して 各環境で多少速く探索できるようになった。https://t.co/h7Dz3X6BhT— すぎゃーん …

Bitboardでleading/trailing zerosを使って飛び駒の利きを求める

前置き 飛び利き計算いろいろ 基礎知識 縦型Bitboardでの香車の利き 角行・飛車の利き (Magic Bitboard / PEXT) Qugiyの手法 Leading/Trailing Zerosを使う 実験と考察 前置き Rustで将棋の高速合法手生成ライブラリを作り始めていて、 Rustでつくる もう一…

Rust+WASMでつくる、ブラウザ上で動く詰将棋Solver

成果物 Rust製ソルバの改良 探索部の抽象化 探索打ち切りのための拡張 WebAssembly化 将棋Player (自作WebComponents) まとめ 成果物 https://sugyan.com/tsumeshogi-solver-wasm/ 局面を編集し指定し、その局面からの詰み手順を探索する。クエリパラメータ…

Rustで将棋合法手生成、速度改善

memo.sugyan.com の続き。 前記事時点でだいたい合法手の生成が出来ていたが、速度面でやや問題があった。 perft の計測してみるとRust版Aperyと比較して2倍程度遅い。 だいたい同じ手順になるよう実装しているはずなんだけど どうしてそんなに差がついてい…

Rustでつくる もう一つの将棋ライブラリ

昨年末に出版された「強い将棋ソフトの創りかた」という本を読んで、自分も将棋AIを作ってみたいと思った。 強い将棋ソフトの創りかた作者:山岡忠夫,加納邦彦マイナビ出版Amazon この本では主にPythonでの実装が紹介されていたが、自分は最近はRustが好きな…

Rustでつくる詰将棋Solver その後

memo.sugyan.com の続き。1ヶ月ほど経ってちょこちょこ更新して進化した。 残課題が幾つかあったが、そのうち幾つかは解決した。 探索無限ループ 上図のような問題で ▲4四飛成 △3二玉 ▲4一竜 △3三玉 ▲4四竜 △3二玉 ... を無限に探索してしまっていた問題。 …

Rustでつくる詰将棋Solver

ついカッとなって先週からRustで詰将棋ソルバを書き始めてしまい、ようやくdf-pnで何らかの解答を出せるようになったところ。ここからもうちょっと調整していくぞ、、 pic.twitter.com/XM9iPJqocv— すぎゃーん (@sugyan) November 2, 2021 というわけで突然R…

N番目の素数を求める

SNSなどで話題になっていたので調べてみたら勉強になったのでメモ。 環境 Pythonでの実装例 例1 例2 例3 エラトステネスの篩 Rustでの実装例 試し割り法 エラトステネスの篩 アトキンの篩 おまけ: GMP Benchmark 高速化のテクニック 上限個数を見積もる Whee…

Advent of Code 2020 完答した

昨年はじめて真面目に挑戦した、Advent of Code。 memo.sugyan.com 今年もやるぞー!と意気込んで、12月になる前からちょいちょいTwitterで宣伝したりした甲斐もあってか、今年は日本国内でも挑戦している人が少し増えたようだった。嬉しい。 僕は昨年に引き…

Advent of Code 2019 に挑戦している

Advent of Code というのがある。 https://adventofcode.com/ 日本ではまだあまり 知っている人/やっている人 は多くないかもしれない。検索してみても、日本語の紹介記事はこれくらいしか見つからなかった。 Advent of Code の紹介 - Qiita 僕も、去年 元同…