無駄と文化

実用的ブログ

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

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

毎年3日間だけ花粉症に罹っている【定点観測】

ここ数年、春先に鼻炎になる。「花粉症か」「自分にもついに来たか」と思って薬を飲むのだが3日ほどすると治っている。そんなことが続くので冗談めかして「毎年3日間だけ花粉症になるんです」などと言っていた。 2024年、今年も花粉症の季節がやってきた。 …

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

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

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

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

二重数を使って2階微分を計算する方法 と 超二重数への発展

二重数という数があります。「その数自体は0でないのに2乗すると0になる数」のことを二重数と呼びます。 実数の範囲で を満たす は のみなので、 でかつ となるような数があるならばそれは 実数ではない ということになります。 そのような実数ではない数 の…

ラムダ式に含まれる全ての部分式に一意かつ列挙可能なタグを付与する方法

ラムダ式に含まれる全ての部分式に一意かつ列挙可能なタグを付与する方法について考察する。 導入 例として次のラムダ式について考える。 ````ABC``DEF`GH この式を二分木で書くと以下のようになる。 graph TB; a1((app))---a2((app)) a2((app))---a3((app))…

やる気スイッチを作った

やんなきゃいけないのにやる気が出ないことありませんか? ポチッと押すだけでやる気がみなぎってくるスイッチがあればいいと思いませんか? やる気スイッチを作りました 使用例 todays-mitsui.github.io ※ やる気が出るとは言ってない 私からは以上です。

Perl と Rust

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

JavaScript で関数とクラスを見分ける

JavaScript においては typeof や constructor を参照するだけでは関数と class を見分けることができません。 // ただの関数 function myFunction() {} // class class MyClass {} // typeof では見分けられない typeof myFunction; // => 'function' typeo…

自然数の集合が無限集合であることを証明する

6歳になる子供がいる。ある日、自転車に乗りながらこんな話をした、 「ねぇ、数字って数えていったらどこまで続くの?」 『いい質問だね、どう思う?』 「うーん、どこまでも続く?」 『そう、数字はどこまでも続くから 1, 2, 3, ... と数えていっても終わり…

10月の体重推移

ビーチサンダルが寒いので最近は靴を履くようになりました。 10月の体重の推移を振り返ります。 9月20日から10月31日にかけて 78.8kg→76.8kg (マイナス2.0kg) という推移でした。 6ヵ月間のグラフを見るとどうにか下降トレンドであることは分かる。 運動の記…

JavaScript で割り算の商と余りを求める

JavaScript で整数同士の割り算をして商と余りを求める方法について解説します。 まず2つの整数 m, n を受け取って商と余りの組を返す関数 div を定義しましょう。 const div = (f=>(u=>u(u))(x=>f(y=>x(x)(y))))(g=>m=>n=>m>=n?(b=>b?1+g(m-n)(n)(1):g(m-n)…

9月の体重推移

あーもう10月ですね。 9月の体重の推移を振り返ります。 8月31日から9月30日にかけて 83.7kg→78.8kg (マイナス4.9kg) という推移でした。 運動の記録 9月の消費は17,606kcalでした。目標通り10,000kcalを超えられてよかった。 こちらはウォーキングだけを抽…

Rust で借用 (参照) を取り扱うときの大事な心構え

はっきり云って Rust は難しいです。 Rust は GC を持たず、 所有権という概念の上に構成されています。 そのため所有権のある値そのものを扱うより、借用 (参照) した値を扱うほうが難しくなりがちです。 なぜ借用のほうが扱いが難しいかと云うと、 所有権…

「若さ」とは何だろう

昨晩、妻と「年上に見られがち」「若さってなんだろう」という中年のお手本のような会話を繰り広げた。 若さとは何かについては問われてみればいろいろな持論がでてきた、 一所懸命に何かに打ち込み続ける姿じゃないか ボロは着てても心はギャル、と云うこと…

自分の体重を全世界に公開するために GraphQL API を作った

先日の記事でも書いたとおり、最近 健康志向になってきてダイエットっぽいことをしています。 blog.mudatobunka.org そんなわけで毎日体重計に乗ったりしてるわけですが。日々の体重データが蓄積されてくると「このデータを広く世界中の人が使えるように公開…

Rust ではどんな値が &'static になれるのか

Rust では所有権と借用, そしてライフタイムという概念があるため、値そのものを取り扱うより参照 (借用) を取り扱うことが難しくなりがちです。 特に関数から参照を返そうとすると、そこにはライフタイムの概念が絡んできます。 例えば下記のように関数内か…

スマートバンドを買って以降まんまと健康志向になっている

2023年7月19日に『ポケモンスリープ』という睡眠ゲームアプリがリリースされました。 リリース前から話題になっていて、Twitter などでもゲーム画面のスクリーンショットなどを目にするようになりました。 それを見て、 以前から睡眠のログを取りたいと思っ…

オートマットのプレステージが好きだ

「オートマット」という製品がある。 プラスチックでできた板で、地面に敷き詰めることで簡易舗装ができる製品だ。 公式サイト ( https://www.web-prestige.com/automat/ ) より引用 私はこのオートマットを販売しているプレステージの公式 X (旧: Twitter) …

Rust における関数とメソッドの使い分け

Rust ネタです。 Rust では構造体に対してメソッドを定義できます。 公式のドキュメント では Rectangle 構造体に対して面積を求める area メソッドを定義する例が紹介されています。 struct Rectangle { width: f64, height: f64, } impl Rectangle { /// …

スマートスピーカーにはあと300ミリ秒だけ待ってほしい

我が家には Amazon Echo (通称 アレクサ) が居るんですが、最近、食い気味に聞き間違いをしてくるので少しだけ嫌な気持ちにさせられています。 一例) 三井『アレクサ、エアコン消しt...』 アレクサ「エアコンを操作するには "アレクサ、エアコン消して" のよ…

福岡出身者が "博多名物" に感じる違和感

どうも、生まれも育ちも福岡県福岡市な三井です。 「博多は飯が美味い」と認知されているのか、福岡県外でも博多フェアのようなものが企画されているのを目にします。 福岡出身者として嬉しいです。 が、福岡県外で展開されがちな "博多名物" に違和感を感じ…

バイブスで覚える Rust - 借用

ご存知の通り Rust 言語はとても厳格な型システムを持っています。 そのためノリで書こうとしてもコンパイラや Language Server から「ここ、型が合わないよ」と言われて実行すらさせてもらえないことが稀によくあります。 ですが、そんなことばかり言っても…

はてなスターを表示させた

今年の4月に株式会社はてなに入社して思ったことがあります。 それは『はてなスターってまだ使われてるんだー』ってことです。 はてブのブックマークコメントにおいてはスターがつけられることは認識していたし、実際にスターをつけることもありました。 け…

return; で何が返されるか【Perl ネタ】

Perl ネタです。 sub f { return; } sub g { return undef; } 上記の f と g は違うという話をします。 違いのわかるコード sub f { return; } print Dumper f; # => '' print Dumper { map { $_ => f } (1..4) }; # => '{ 1 => 2, 3 => 4 }' sub g { return…

substr のマジカルな挙動を再現したい

Perl に substr という関数があります。文字列を部分的に切り出したり、部分的に置換できる関数です。 典型的な使い方はこんな感じ、 my $s = 'The black cat climbed the green tree'; # 4文字読み飛ばしてから5文字取り出す my $color = substr $s, 4, 5; …

PHPカンファレンス福岡2023にスタッフとして参加していました

2023年6月24日に行われた PHPカンファレンス福岡2023 に運営スタッフとして参加していました。 当日は受付に座って主に Twitter をしていました。 4年ぶりの開催 コロナの影響を受け、実に4年ぶりの開催でした。 3年前、会場も日程も決まっているにも関わら…

Perl のショートカット集 (随時更新)

Perl には頻出するイデオムを短い書き方で代替する ショートカット が多くあります。 ショートカットを集めてみます。 目次 while ループの条件部に行入力演算子 <STDIN> を置く foreach ループで制御変数を省略する 正規表現リテラルを単体で評価する => は , のシ</stdin>…

history.back() でページを戻ったときの JavaScript の挙動

「ページ A」から「ページ B」へ遷移した後に「ページ B」で hidtory.back() が実行され「ページ A」に戻ってきたとき、「ページ A」で走っていたスクリプトの挙動について考えよう。 ちなみにブラウザの「戻る」ボタンでページを戻ったときにも全く同じ議論…

フォント読み込み完了のタイミングで処理を実行する

ブラウザにフォントが読み込まれたタイミングで JavaScript の処理を実行したいと思ったとき、以前であればサードパーティー製のライブラリを使っていた *1 けど、最近はブラウザの標準 API だけで読み込みタイミングの判定ができるようだ。 Document.fonts …