たより

Zennの「Rust」のフィード icon

Zennの「Rust」のフィード

Zennのトピック「Rust」のRSSフィードです

Rust の tracing で init() しただけで info!() が動く仕組みを理解する

mosson

はじめに こんにちは、ソフトウェアエンジニアの mosson です。株式会社estie(エスティ)では Rust でウェブアプリケーションの開発をしています。 さて、Rust でウェブアプリケーションを開発していると、アプリケーションの起動処理にこのようなコードを見かけます。 #[tokio::main] async fn main() { tracing_subscriber::fmt().init(); run_server().await; } init() はこのスコープで完結しています。戻り値を変数に束縛すらしていません。それなのに、まったく別の関数の中で...

Rustのenumとmatchで書く——JSONの字句解析器

Dr.K Laboratory

enumとmatchの組み合わせが好きだ Rustを書いていて「この言語よくできてるな」と感じる瞬間はいくつかありますが、個人的に一番好きなのが enum と match の組み合わせです。 この記事では、その良さを伝えるためにJSONの 字句解析器(Lexer) を書きます。フル実装はせず、プリミティブな値(文字列・数値・真偽値・null)を切り分ける最小の Lexer に絞ります。構文解析(パーサ)と入れ子構造は、続編に回します。 字句解析と構文解析を分ける テキストを構造化データに変換する処理は、伝統的に2段階に分けます。 字句解析: 文字列をトークン列に切り分ける ...

マンガでわかるRustの所有権、リトライ!

黒ヰ樹

リトライ Google LabsのFlowで作成したNano Banana 2の漫画をChatGPT Images 2.0で再挑戦してみました。 https://zenn.dev/tkithrta/articles/92393e2c56e80e https://zenn.dev/tkithrta/articles/79236c84c2161d https://openai.com/index/introducing-chatgpt-images-2-0/ Google LabsのFlowで作成した時はi2iでNano Banana 2特有の絵柄のクセをなくしましたが、今回はt2iで作成し...

Rustで自作データベースを作る その22: logical export を追加して、DBを安全に持ち出せるようにする

ひまちゃん

前回は、管理用 CLI を導入して、 tables describe <table> artifacts <table> inspect-db を追加し、DB の状態を人が直接確認できるようにしました。 ここまで来ると、かなり「触れる」DB になってきます。 table 一覧を見られる schema を見られる manifest / WAL / snapshot / index snapshot を見られる dirty marker まで見られる すると次に自然に欲しくなるのは、その状態を外へ持ち出すことです。 たとえばこういう場面です。 テスト用に t...

PDFから「存在を消す」Forensic Deep Purgeと、肉眼で見えない透かしStealth Watermarkの実装開発日誌 #6

hiyoyo

開発日誌 #6 です。前回はMagic Pipelineの設計について書きました。 ※検証環境は8年前のMacBook Airです。 今回は「見えないセキュリティ」を2つ紹介します。 Forensic Deep Purge:PDFからメタデータや隠しデータを物理的に抹消する Stealth Watermark:肉眼では見えないが、流出経路を特定できる透かしを埋め込む Forensic Deep Purge:「削除」では足りない PDFを「名前を付けて保存」しても、元のファイルの痕跡が残ることがあります。 具体的には: 作成者名・ソフトウェア名・作成日時などのメタデータ 削...

xremapによる究極のキーリマップ構築:Alt+ijkl移動を一生の資産にする

PVE-Echo

結論:OSの設定をいじらず「専用レイヤー」で制御せよ [[Zorin OS]] や [[Ubuntu]] などの [[Linux]] 環境で、Alt キーを組み合わせた高度なショートカットを実現したい場合、OS標準の設定画面や [[Mozc]] のプロパティではAltを装飾キーとして設定することができません。 最も合理的で確実な方法は、Rust製の高速リマッパー [[xremap]] を使い、YAML形式の設定ファイルで入力を直接制御することです。これにより、[[JIS配列]] と [[US配列]] が混在する環境でも、全く同じ操作感を維持できます。 なぜこの解決策が最強なのか...

[写経]Rustの練習帳 Chapter 2(その4) 構造体と列挙型

okaniCo_oC

教材 書籍「Rustの練習帳」を使って、教養としての Rust を勉強。 https://www.oreilly.co.jp/books/9784814400584/ 構造体と列挙型 前回登場した Option 型の理解がまだ深まっていないので、いったん Rust における構造体と列挙型の違いをAIと壁打ちして理解を深めることにした。 Gemini くんにお願いして図解してもらったのがこちら。 図:Rustのデータ型の可視化 同じ列挙型という言葉を使っていても、言語によって随分と構造が異なるのね… ! Javaのような「共通のフィールド」を持つスタイルは、「共通の性質(継承)」...

Pollardのρ法の動作原理

qdot3

はじめに Pollardのρ法は素因数分解や離散対数問題を高速に計算する乱択アルゴリズムとして知られています。本稿ではPollardのρ法の動作原理を解説し、とくにPRNGに対する十分条件を与えます。 本稿ではp \le qを素数とし、半素数N = p qの素因数分解を考えます。また、実装上のテクニックは他に譲ります。 Pollardの\rho法 誕生日のパラドクス 誕生日のパラドクスは「無作為に人を23人以上集めると、50\%の確率で誕生日が被る」という事実が直感に反することを言います。これを一般化すると、「N以下の自然数から無作為に\Theta(\sqrt{N})個選ぶと...

パスワードマネージャーを1行もコードを書かずにAIに作らせた話

タピオカミルクティー

TL;DR 1行もコードを書かずにDesktop/Web Browser Extension/Androidアプリ対応のサーバーレスパスワードマネージャーをAIに作らせた。 開発期間は3〜4週間、Claud Pro (途中からMAX 5xプラン) を契約してClaude Codeで開発。 成果物 こちらの記事で紹介しているパスワードマネージャー。 主な機能 マルチデバイス対応 スマートフォン、ウェブブラウザ拡張、デスクトップアプリで使ってもデータが自動的に同期される クロスプラットフォーム対応 DesktopアプリはTauri 2.0で開発し、Linux/macOS...

Rustで自作データベースを作る その21: 管理用CLIを追加して、DBの状態を直接確認できるようにする

ひまちゃん

前回は、read-only system metadata API を導入して、 inspect_database describe_table inspect_table_artifacts を追加し、複数テーブル DB の状態を安全に観測できるようにしました。 ここまで来ると、内部的にはかなり見通しが良くなっています。 catalog が table 名 / schema / prefix を持つ manifest が generation を持つ snapshot / WAL / index snapshot の存在状態が見える dirty marker / orphan t...

OCR→圧縮→保存を1クリックで繋ぐMagic Pipelineの設計【開発日誌 #5】

hiyoyo

開発日誌 #5 です。前回は1000ページPDFをフリーズなく表示するTurbo View Engineの話を書きました。 今回は Magic Pipeline、複数の処理を1クリックで連鎖させるワークフローエンジンの設計です。 ※検証環境は8年前のMacBook Airです。 なぜ作ったか PDFの定型作業って、毎回同じ手順を繰り返すことが多いです。 例えば: スキャンしたPDFを開く OCRをかけてテキストを抽出 ファイルサイズを圧縮 特定のフォルダに保存 これを毎回手動でやるのは面倒。かといって複雑なスクリプトを書くほどでもない。 Magic Pipelineはこの「定型...

[写経]Rustの練習帳 Chapter 2(その3) マクロ、式と文の違い

okaniCo_oC

教材 書籍「Rustの練習帳」を使って、教養としての Rust を勉強。 https://www.oreilly.co.jp/books/9784814400584/ Option の unwrap メソッド 書籍の 2.2.4 にある以下の記載が一読してよくわからなかった。 Option::unwrap メソッド(https://oreil.ly/4bPoA)は、Some<T>から値を取り 出してT を取得します。 これは 本来使いたい Some<T> の値を取り出すよ、と素直に解釈すればよいのか、それとも、何が包まれているかわからない場合に T 型...

HiyokoBar を Product Hunt でローンチしました 🐤💐

hiyoyo

本日、HiyokoBar を Product Hunt でローンチしました! 👉 https://www.producthunt.com/products/hiyokobar 応援していただけると嬉しいです🐤 HiyokoBarとは macOSメニューバーに常駐する、エンジニア向けAlways-on HUDです。 シェルスクリプト・Python・JSを定期実行し、結果をすりガラスのカードで表示。エラーが発生するとGemini AIが自動で原因を解析し、「AI Insight」パネルを表示します。 技術スタック バックエンド: Rust / Tauri 2.0 / T...

ターミナルでヴァンサバライクなゲームができる term-survivors を作ってる話

kimulaco

はじめに 最近趣味でterm-survivorsという、ターミナル上でプレイできるヴァンサバライクなゲームを作っているので紹介します。 term-survivorsとは 先述した通り、term-survivorsはターミナル上でプレイできるヴァンサバライクなゲームです。OSSとして公開しています。 https://github.com/kimulaco/term-survivors 「ヴァンサバライク」というゲームカテゴリはVampire Survivorsというゲームにインスパイアされたゲームで、移動しながらランダムにキャラを強化し、一定時間生存したりボスを倒すゲームを指してい...

Rustで自作データベースを作る その20: Read-onlyなシステムメタデータAPIでDB状態を安全に観測する

ひまちゃん

前回は、最小の RENAME TABLE を導入して、 rename_table(old_name, new_name) を追加する catalog entry の名前と prefix を更新する table prefix に属する artifact 群を付け替える rename 後に open_table(old_name) を失敗させる reopen 後も rename 結果を維持する という path を整えました。 ここまで来ると、複数テーブル DB としての lifecycle はかなり揃ってきます。 create open list drop rename しかも ...

[写経]Rustの練習帳 Chapter 2(その2) 終了コードのお作法

okaniCo_oC

教材 書籍「Rustの練習帳」を使って、教養としての Rust を勉強。 https://www.oreilly.co.jp/books/9784814400584/ App構造体はどうなった? clap v4 では App構造体は廃止されたのかを Claude Code くんに質問。 ! 経緯: clap 2.x: App が CLI 定義のメインの構造体 clap 3.x: App が Command に改名。移行期間として App は Command の型エイリアスとして残されていた(非推奨) clap 4.x: 型エイリアスも削除され、Command のみに統一 した...

HiyokoBar — シェルスクリプトをメニューバーHUDに変えるmacOSアプリを作った

hiyoyo

TL;DR ・macOSメニューバーに常駐するエンジニア向けHUD ・シェルスクリプト・Python・JSを定期実行してカード表示 ・エラー時はGemini AIが自動解析して「AI Insight」を表示 ・JSONを1行も書かずにフルGUIで設定できる ・$39 / ¥5,980 買い切り 作った背景 「今Dockerは動いてる?」「GitHub PRは何件ある?」「サーバーは生きてる?」 こういった情報を確認するたびに、ターミナルを開いてコマンドを叩いていました。 Raycastも使っていましたが、あれはPull型——「確認したいときに自分から呼び出す」ツールです。 欲しかったのは...

1000ページのPDFをフリーズなく表示するTurbo View Engineを設計した話【開発日誌 #4】

hiyoyo

開発日誌 #4 です。前回はAES-256-GCMとZero Leak Architectureの話を書きました。 今回は「重いPDFをサクサク表示する」という、一見地味だけど実装が一番大変だった部分の話です。 問題:普通にやるとすぐ固まる 最初の実装はシンプルでした。PDFを開いたら全ページをレンダリングしてDOMに突っ込む。 100ページくらいまでは問題なし。 300ページを超えたあたりから重くなり始め、1000ページになるとアプリが数秒固まります。 原因は明白で、見えていないページまで全部レンダリングしているからです。 解決策:仮想化スクロール Webフロントエンドでは...

[WebAssembly]WadoをコンパイルできるWebアプリ作った(wasm-pack)

黒ヰ樹

Webアプリ https://wado-wasm.vercel.app/ はじめに https://developer.mozilla.org/ja/docs/WebAssembly/Guides/Rust_to_Wasm MDNのWebAssemblyチュートリアルを眺めていたところ、RustでJavaScriptパッケージを構築するためのツールであるwasm-packを使用して何かやってみたくなりました。 ちょうどプログラミング言語Wadoのコンパイラがwasm32-unknown-unknownターゲットに対応していたので、コンパイラをコンパイルするというブートストラップじ...

GitHub Traffic APIの14日制限を回避してトラフィック履歴を長期保存する

Lettera

個人開発プロジェクトのアクセス解析をしていると、必ずぶつかる壁がある。GitHub Traffic APIが返すデータは直近14日分だけという仕様だ。毎日確認していれば問題ないが、少し放置すると古いデータが消えてしまい、長期的なトラフィック推移を追うことができない。 この記事では、GitHub Traffic APIの制約を理解した上で、トラフィック履歴を永続的に蓄積するための実装パターンを解説する。TypeScript + GitHub Actionsの構成で、実際にコードを動かしながら確認できる内容にした。 GitHub Traffic APIの制約を正確に理解する まず公式仕様...