プログラミング
メリークリスマス! この記事は はてなエンジニア Advent Calendar 2025 の3日目の記事です。 大遅刻ですね。すごいことですよこれは。 さて、Rust ネタです。 ご存知の通り Rust には GC がありません。代わりに所有権システムがあり、所有権を持つ変数がス…
Grass 言語というプログラミング言語があります。 esolangs.org オリジナルの製作者 (UENO Katsuhiro さん) のサイトが2025年1月頃を最後に消えているので参照先が海外の Wiki しかない... 今回は Grass 言語に入門してみます。まずは Hello,world! を表示す…
Web アプリケーションフレームワークの Hono にはさまざまなミドルウェアが提供されています。その一つが Hono GraphQL Server Middleware で、Hono をベースとした GraphQL サーバーを構築できます。 www.npmjs.com 「よし Hono で GraphQL サーバー書くぞ…
先週 に引き続いて AI エージェントにコードを書かせてみた。 テーマとしてとてもとても典型的で既存のコード例がインターネットに溢れていそうな「テトリス」を選定した。 (選定したというか、職場の id:koudenpa さんが「テトリスでも作らせてみなはれ」と…
ココピー (cocopy) というブラウザ拡張機能がある。 chromewebstore.google.com Webページを見ていて URL やページタイトルなどをコピー&ペーストしたくなったとき、ココピーを使うと思い思いの形式でクリップボードへのコピーができて便利だ。 ココピーに…
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 の関数に文字列を渡して呼び出す方法を書き残します。 この記事は二本立てです 後編はこちら。 blog.mudatobunka.org 前後編のコードを全部まとめたリポジトリがここにあります。 github.com 前提知識 wasm に文字列型は無い wasm で扱…
JavaScript から wasm の関数を呼び出して結果の文字列を受け取る方法を書き残します。 この記事は二本立てです 前編はこちら。 blog.mudatobunka.org 前後編のコードを全部まとめたリポジトリがここにあります。 github.com 前提知識 まずは 前の記事 にも…
React と SolidJS のリアクティブシステムがそれぞれ対照的で面白い。React は冪等性を前提にしていて SolidJS は副作用を前提にしている。真逆だ。詳しく見てみよう。 3行まとめ React は冪等で純粋なコンポーネントをベースにしている、副作用はバーチャル…
この記事は Rust Advent Calendar 2024 の 8日目の記事です。 wasm-bindgen で wasm に型を付ける Rust は wasm にコンパイルできるよう意図された言語でもあります。Rust コードを wasm にコンパイルしてしまえば、ブラウザをはじめとした wasm ランタイム…
この記事は はてなエンジニア Advent Calendar 2024 の 2 日目の記事です。 昨日は id:hogashi さんの「querySelectorAllの結果をmapしたいときはArray.fromすると良い」でした。 どうも、趣味で関数型言語をやっている者です。 長らく関数型言語をやってな…
配列がとある要素を含むかどうか調べるには Array.prototype.includes を使います。 const arr = [1, 2, 4, 8, 16]; arr.includes(4); // => true arr.includes(7); // => false ところで、JavaScript には Set というデータ型があり、同じように Set.protot…
wasm-bindgen で生成したコードに対してテストを書くときの話題です。 Rust からコンパイルした wasm に対してテストを書くとき wasm-bindgen-test がおすすめされがちです。 wasm-bindgen-test は Rust でテストを書き wasm にコンパイルして実行します。た…
wasm-bindgen を使うと Rust の構造体から TypeScript の型情報を生成して wasm で受け渡しできるようになる。 やるべきことは #[wasm_bindgen] 属性をつけるだけで、wasm-bindgen がよしなにしてくれる。 // Rust use wasm_bindgen::prelude::*; #[wasm_bin…
wasm-bindgen では Rust に組み込みの型だけでなくユーザーが定義した型を関数の引数・返り値に使うことができます。 例えば下記のように User 構造体を定義して、 // Rust #[wasm_bindgen(getter_with_clone)] pub struct User { pub name: String, pub age…
Rust で wasm を書くときの話題です。 Rust で書いたプログラムは wasm にコンパイルすることが可能です。さらに wasm-bindgen を使うと JavaScript から呼び出しやすいインターフェースを自動生成してくれます。 例えば下記のようなコードを書くと、 // Rus…
どうも、趣味で JavaScript を書いている三井です。 先日、 JavaScript つまみ食い LT 会 というイベントを主催しまして。 そのメインの LT 会後の懇親会で「懇親会 LT」と銘打ったゆるゆる LT をやりました。 私も参加して「JavaScript で Hello,world! に…
TypeScript は便利だ。型検査で値が保証されるのはとても頼もしい。 とはいえ場合によっては型検査を通すために不必要にタイプ量が増えてしまうことがある。 例えば下記のような型が 外部ライブラリによって生成される としよう。 type User = { __typename:…
みなさま ラムダ計算 をご存知でしょうか。 ラムダ計算はある種の関数型プログラミング言語の体系で、変数と関数, そして関数適用というミニマルな構成要素だけでチューリング完全な表現力を持っています。 この記事では、ラムダ計算の中でも特に単純な 型無…
Rust は「コストのかかるコードは書くのが苦痛であるべき」という思想のもとデザインされている気がする。 というのも Rust を書いていると「意図的にショートカットが用意されていない」と思える場面があるからだ。 いくつか例を挙げてみようと思う。 文字…
どうも id:todays_mitsui です。この記事は はてなエンジニア Advent Calendar 2023 の23日目の記事です。 昨日は id:cateiru さん、明日は id:motemen さんです。 『達人プログラマー』という有名な書籍があって、そのなかで毎年少なくとも一つの言語を学習…
JavaScript においては typeof や constructor を参照するだけでは関数と class を見分けることができません。 // ただの関数 function myFunction() {} // class class MyClass {} // typeof では見分けられない typeof myFunction; // => 'function' typeo…
Perl に substr という関数があります。文字列を部分的に切り出したり、部分的に置換できる関数です。 典型的な使い方はこんな感じ、 my $s = 'The black cat climbed the green tree'; # 4文字読み飛ばしてから5文字取り出す my $color = substr $s, 4, 5; …
スクレイピングネタです。 クローリング+スクレイピングするにあたってパスワード認証の掛かったページから情報を取得するのはなかなかに厄介な課題ですよね。 今回は、いま表示しているページをHTMLとして保存するスクリプトをブックマークレットにしてみま…