無駄と文化

実用的ブログ

プログラミング

新着順 人気順

dangerouslySetInnerHTMLを避けてHTML文字列をReactに埋め込む

Markdown を React でレンダリングして表示するための react-markdown というライブラリがある。Markdown には HTML を直接記述可能で、どのようにして任意の HTML 文字列を React コンポーネントに埋め込んでいるのか気になった。 というのも、真っ先に思い…

NumPyのオーバーロード悪用っぷりが面白い

機械学習などの数値計算で使われる Python ライブラリの NumPy (ナンパイ)、DSL が独特で面白いので紹介します。 基本の ndarray とブロードキャスト NumPy のクラスでよく使うのは、N次元配列を表現する ndarray (N-dimension Array) です。 例えばシンプル…

BigQueryのCASTとSAFE_CASTは名前が逆じゃないか?

ふたつのキャスト BigQuery には値をキャストする関数として CAST() と SAFE_CAST() の二つがある。 このように動作する。 SELECT CAST('0xDEADBEEF' AS INT64) AS number; /*------------* | number | +------------+ | 3735928559 | *------------*/ SELEC…

サブエージェント と エージェントツール

最近は Google Agent Developer Kit (通称: ADK) でエージェントを自作して遊んでいます。 サブエージェントにタスクを委譲ってやつをやってみました。そしたら思ってたんと違ったので書き記します。 サブエージェントが思ってたんと違った ADK ではとても簡…

徒歩旅実況ブログを支える技術

先日、高松市から徳島市までの約80kmを歩いて旅をした。 実際の経路と歩いた距離 こういう長距離の徒歩旅は以前にもやっていて、このブログに記事が残っている。 blog.mudatobunka.org 歩きながら写真を撮ったものにコメントをそえてまとめている。これらの…

セグメント木で時系列データの統計量を計算する

何気なく @chokudai さんのタイムラインを見ていたら「セグ木」という言葉が目にとまった。 セグ木だけやたらみんな解けるようになってる話、ちょっと考えれば、「もっと高度なデータ構造であるmapを使った問題」がもっと解かれているのだから、標準ライブラ…

Rust で Grass インタプリタを実装する

書くのも読むのも難しい Grass 言語のインタプリタを書きました。Rust 実装です。 github.com cargo install --git https://github.com/todays-mitsui/rusty-grass.git でインストールして遊べます。 モチベーション Grass 言語は言語仕様がカッチリしていて…

Debug トレイトを使いこなして構造体を自由自在に印字する

この記事は Rust Advent Calendar 2025 の15日目の記事です。 大遅刻、すみませんすみません。 Rust ではオリジナルの構造体を println!() で印字しようとしても、デフォルトでは印字できません。 // 二次元平面上の点を表現する構造体 struct Point { name:…

やってみよう!メモリリーク

メリークリスマス! この記事は はてなエンジニア Advent Calendar 2025 の3日目の記事です。 大遅刻ですね。すごいことですよこれは。 さて、Rust ネタです。 ご存知の通り Rust には GC がありません。代わりに所有権システムがあり、所有権を持つ変数がス…

Grass言語でHello,world!に挑戦

Grass 言語というプログラミング言語があります。 esolangs.org オリジナルの製作者 (UENO Katsuhiro さん) のサイトが2025年1月頃を最後に消えているので参照先が海外の Wiki しかない... 今回は Grass 言語に入門してみます。まずは Hello,world! を表示す…

Hono GraphQL Server Middleware のサンプルコード

Web アプリケーションフレームワークの Hono にはさまざまなミドルウェアが提供されています。その一つが Hono GraphQL Server Middleware で、Hono をベースとした GraphQL サーバーを構築できます。 www.npmjs.com 「よし Hono で GraphQL サーバー書くぞ…

AIエージェントにコードを書かせてみた感想:AIエージェントが訳分からなくならないために人間が訳分かっておく必要がある

先週 に引き続いて AI エージェントにコードを書かせてみた。 テーマとしてとてもとても典型的で既存のコード例がインターネットに溢れていそうな「テトリス」を選定した。 (選定したというか、職場の id:koudenpa さんが「テトリスでも作らせてみなはれ」と…

ココピーからChatGPTを呼んで文章生成させる

ココピー (cocopy) というブラウザ拡張機能がある。 chromewebstore.google.com Webページを見ていて URL やページタイトルなどをコピー&ペーストしたくなったとき、ココピーを使うと思い思いの形式でクリップボードへのコピーができて便利だ。 ココピーに…

色記法を雑に正規化する (#000 とか rgb() とか hsl() とか)

CSS では様々な色記法が認められています。 例えば私が好きなコーンフラワーブルーは、 cornflowerblue #6495ed rgb(100, 149, 237) hsl(218.54, 79%, 66%) hwb(218.54 39% 7%) lab(61.2% 2.4% -40.2%) これらどの記法でも同じ色が表示されます。 ぜんぶ同じ…

要素を入れ替えたときにスクロール位置が追従することがあるみたい

JavaScript を使って画面上の要素を入れ替えたとき、スクロール位置が勝手に動いて画面がカクつくという現象に遭遇しました。調査して分かったことをまとめます。 まずはデモをご覧ください todays-mitsui.github.io カラフルな <div> が並んでいて、右上のボタン</div>…

JavaScript から wasm に文字列を渡す with TinyGo

JavaScript から wasm の関数に文字列を渡して呼び出す方法を書き残します。 この記事は二本立てです 後編はこちら。 blog.mudatobunka.org 前後編のコードを全部まとめたリポジトリがここにあります。 github.com 前提知識 wasm に文字列型は無い wasm で扱…

wasm から JavaScript に文字列を受け取る with TinyGo

JavaScript から wasm の関数を呼び出して結果の文字列を受け取る方法を書き残します。 この記事は二本立てです 前編はこちら。 blog.mudatobunka.org 前後編のコードを全部まとめたリポジトリがここにあります。 github.com 前提知識 まずは 前の記事 にも…

React のリアクティブと SolidJS のリアクティブ

React と SolidJS のリアクティブシステムがそれぞれ対照的で面白い。React は冪等性を前提にしていて SolidJS は副作用を前提にしている。真逆だ。詳しく見てみよう。 3行まとめ React は冪等で純粋なコンポーネントをベースにしている、副作用はバーチャル…

wasm-bindgen で「この型が欲しいときはこう書く」集

この記事は Rust Advent Calendar 2024 の 8日目の記事です。 wasm-bindgen で wasm に型を付ける Rust は wasm にコンパイルできるよう意図された言語でもあります。Rust コードを wasm にコンパイルしてしまえば、ブラウザをはじめとした wasm ランタイム…

不動点コンビネータで無名再帰を作る流れをおさらい with JavaScript

この記事は はてなエンジニア Advent Calendar 2024 の 2 日目の記事です。 昨日は id:hogashi さんの「querySelectorAllの結果をmapしたいときはArray.fromすると良い」でした。 どうも、趣味で関数型言語をやっている者です。 長らく関数型言語をやってな…

Array.prototype.includes と Set.prototype.has の速さ比べ

配列がとある要素を含むかどうか調べるには Array.prototype.includes を使います。 const arr = [1, 2, 4, 8, 16]; arr.includes(4); // => true arr.includes(7); // => false ところで、JavaScript には Set というデータ型があり、同じように Set.protot…

Vitest を使って wasm のテストを書く

wasm-bindgen で生成したコードに対してテストを書くときの話題です。 Rust からコンパイルした wasm に対してテストを書くとき wasm-bindgen-test がおすすめされがちです。 wasm-bindgen-test は Rust でテストを書き wasm にコンパイルして実行します。た…

wasm-bindgen で Record<Keys, Type> 型を取り扱う

wasm-bindgen を使うと Rust の構造体から TypeScript の型情報を生成して wasm で受け渡しできるようになる。 やるべきことは #[wasm_bindgen] 属性をつけるだけで、wasm-bindgen がよしなにしてくれる。 // Rust use wasm_bindgen::prelude::*; #[wasm_bin…

wasm-bindgen の型情報を Tsify でもっと良い感じにする

wasm-bindgen では Rust に組み込みの型だけでなくユーザーが定義した型を関数の引数・返り値に使うことができます。 例えば下記のように User 構造体を定義して、 // Rust #[wasm_bindgen(getter_with_clone)] pub struct User { pub name: String, pub age…

【wasm-bindgen】いろいろな型注釈による wasm の挙動の違いを調べよう

Rust で wasm を書くときの話題です。 Rust で書いたプログラムは wasm にコンパイルすることが可能です。さらに wasm-bindgen を使うと JavaScript から呼び出しやすいインターフェースを自動生成してくれます。 例えば下記のようなコードを書くと、 // Rus…

JavaScript で Hello,world! に挑戦 (ただし記号だけを使って)

どうも、趣味で JavaScript を書いている三井です。 先日、 JavaScript つまみ食い LT 会 というイベントを主催しまして。 そのメインの LT 会後の懇親会で「懇親会 LT」と銘打ったゆるゆる LT をやりました。 私も参加して「JavaScript で Hello,world! に…

指定したキーだけを省略可能にするユーティリティタイプを書く

TypeScript は便利だ。型検査で値が保証されるのはとても頼もしい。 とはいえ場合によっては型検査を通すために不必要にタイプ量が増えてしまうことがある。 例えば下記のような型が 外部ライブラリによって生成される としよう。 type User = { __typename:…

型無しラムダ計算学習用ステップ評価器 skiMogul を作っている話

みなさま ラムダ計算 をご存知でしょうか。 ラムダ計算はある種の関数型プログラミング言語の体系で、変数と関数, そして関数適用というミニマルな構成要素だけでチューリング完全な表現力を持っています。 この記事では、ラムダ計算の中でも特に単純な 型無…

Rust はコストのかかるコードを書くのが苦痛になるようにデザインされている(?)

Rust は「コストのかかるコードは書くのが苦痛であるべき」という思想のもとデザインされている気がする。 というのも Rust を書いていると「意図的にショートカットが用意されていない」と思える場面があるからだ。 いくつか例を挙げてみようと思う。 文字…

Perl と Rust

どうも id:todays_mitsui です。この記事は はてなエンジニア Advent Calendar 2023 の23日目の記事です。 昨日は id:cateiru さん、明日は id:motemen さんです。 『達人プログラマー』という有名な書籍があって、そのなかで毎年少なくとも一つの言語を学習…