「だんご屋のひまつぶし」完全解析

「だんご屋のひまつぶし」とは 最長手順の問題は…? 組み合わせ、グラフ問題 プログラムで解く 状態の列挙 グラフの構築 最短経路問題を解く WASM化して、ブラウザ上で解く もしもすべて異なる団子だったら さらに一般化していくと 到達可能性 頂点数 本数を…

BlueskyのTUI Client Appを作り始めてしまった

memo.sugyan.com の続き…? I've published `tuisky`, a TUI Client for Bluesky, as v0.0.1. (It's still a work in progress.) Were there already other clients available for use in the terminal? #atdev #bluesky-client #tui crates.io/crates/tuisk…

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で…

Rustで将棋の局面画像生成、そしてCDN Edgeで動的生成

背景 先行・類似事例 自作のメリット Rustで局面画像生成 盤・駒画像の素材 画像処理 入出力 Generatorと下準備 Publish Web Appで使う CDN Edgeで動かす wasm-packでWebAssembly作成 Deno Deploy Vercel Edge Functions Cloudflare Workers Fastly Compute@…

Advent of Code 2023 を完走した

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

自動で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代替の候補として…

40歳から始める関数型言語、OCaml

動機 Why OCaml 学習方法 Real World OCaml Github Copilot と ChatGPT オンラインジャッジ (競プロ) Advent of Code その次? 所感 関数型という概念 OCamlの書き味 Rust, Python の経験 AIとの親和性 まとめ 某Nさんがここ最近Haskellとか勉強してて楽しそ…

YAPC::Kyoto 2023 に参加した #yapcjapan

yapcjapan.org おそらく YAPC::Tokyo 2019 以来?4年ぶりにオフラインのイベントに参加しました。地元開催ということで日帰りで行けてありがたい…! 最初だけちょろっと家族で参加。 子ゃーんたち連れて #yapcjapan 会場。異様な雰囲気のおじさんたちに囲ま…

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 の間には既に ÷ が入って…

Rubyでバイナリデータに対するrindex検索の挙動でハマったので調べたことメモ

自分の手元の環境でこんなことが起きた。 $ ruby -v ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21] $ irb irb(main):001:0> "\x01\x80\x00\x00".index("\x01") => 0 irb(main):002:0> "\x01\x80\x00\x00".rindex("\x01") => 1 \x01 は 0…

spherical linear interpolation(slerp)によるlatent spaceでのnoise補間

memo.sugyan.com の記事を書いてから、先行事例の調査が足りていなかったなと反省。 Latent Seed の Gaussian noise 間での morphing はあんまりやっている人いないんじゃないかな、と書いたけど、検索してみると普通に居た。 why settle for a few images f…

Stable Diffusionでmorphing

#stablediffusion 完全に理解した pic.twitter.com/IR5yjnL07Y— すぎゃーん (@sugyan) August 31, 2022 ということで少し触って遊んでみたのでメモ。 Stable Diffusion をザックリ理解 先月公開された Stable Diffusion。 stability.ai 高精度で美しい画像を…

Slackの家庭内日記をはてなブログに同期していく

弊家庭ではSlackを日記ツールとして使っていて、 #diary channelに夫婦1日1投稿ずつ3~4行程度で今日あったこと・子の成長記録・感想などを書く、というのを続けてるんすよね。SNS感覚で気楽に書けて編集も出来るし遡ったり検索したりしやすくて何気に便利だ…

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…

creative codingに入門してみている

子ゃーんに喜んでもらいたくて、creative coding入門してp5.jsで色々作る練習してる。今はフワフワでキラキラな可愛いシャボン玉を表現しようと試行錯誤しています pic.twitter.com/qGeRYCelqh— すぎゃーん (@sugyan) October 6, 2021 動機・目的 上記の通り…

ISUCON11予選のNode.js実装を書いた

ISUCON11 予選おつかれさまでした。 ここ数年は参加者として予選敗退を繰り返してきたのだけど、今年はちょっと違う関わり方をしてみるか、と思い 「参考実装の移植」に立候補してみました。 isucon.net Node.js担当として採用していただき、ちょっと不安も…

3Dモデルを動かせるアプリをPWAで作る

乗り物大好きな子ゃーんに遊ばせてあげよう、と 救急車の3Dモデルデータを購入してThree.jsでグリグリ動かせるようにしてPWAにしてあげた pic.twitter.com/61MUg3MrOR— すぎゃーん (@sugyan) August 1, 2021 子(1歳5ヶ月)が最近すごく消防車とか救急車に興味…