技術
ここではsttp4前提で書くがsttp3でもたぶん同じ。 sttpについて説明しておくと、Scalaで利用できるHTTPクライアント実装で、操作体系がシンプルで簡単であり、なおかつ複数のバックエンド(JDK標準のクライアントを使うものとか、もっと並行性制御を強化され…
同僚と込み入った仕様を詰める作業をしないといけなくて、いくつかの疎結合なコンポーネントをネットワーク越しにデータが飛び交ったり、コンポーネントの中の状態が遷移していったりして、お盆と正月が同時に到来したような感じ。こういうとき、これまでは…
先日また風邪を引いたので、温湿度計を買うことにした。部屋の過ごしやすい環境が分かれば安定して体調を管理できるだろうという魂胆。 タニタ Tanita 温湿度計 一目で室内環境がわかる 温度 湿度 アナログ 壁掛け 卓上 グレー マグネット TT-587-GYタニタ(T…
この書評は、掲題書についての一個人の考えを述べ、改善に資せんとするものである。つまりここから先に書かれていることの冒頭には遍く「私見では」と見えない文字で書かれているということだ。 この本は初学者向けの教科書または副読書として不適切であり、…
Standard NotesをLinuxから使うと、Key Repeat機能が暴走して、手を放してもずっとカーソルが移動し続けたり、さらに悪いことには、バックスペースが外れなくなってどんどん文字列を削除していくことがあった。確かにこれはある意味セキュアだが、そういうこ…
tl;dr 以下の通り.zshrcに追記する # '/' を単語の境界として認める typeset -g WORDCHARS=${WORDCHARS:s@/@} 登場人物 typeset シェル変数を書き換える -g グローバルに適用する $WORDCHARS 「ここに入った文字は単語境界とはみなさない」というリスト :s@/…
最近Devinを使っていて、試しに色々やらせている。印象や、こういう局面で強そう、といったことをメモしておく。 印象 それほどAIが賢いわけではない。Claude Sonnet 3.7を使ってるのと同じような感じ。たまに筋違いなPRを作ったり、古い作法でコードを書い…
Redditを見ていたところ面白いコンパイラプラグインを発見したので紹介する。 Redacted Redactedは、case classの特定のフィールドをtoString()から除外し、***で塗り潰して見えなくできるコンパイラプラグインだ。 polentino.github.io github.com Redacted…
Scalaには言語サーバとしてMetalsというのがあり、LSPを喋ったりビルドサーバと協調してコンパイルを回したりしてくれる。 scalameta.org VSCodeでも使われる定番の言語サーバであり、Scala開発者の半分くらいはこれを使っているはず。ロゴがかわいい。 そん…
AI Coding Agentが活況だ。巷ではClineだRoo Codeだと盛り上がり、MCPを実装したことを自慢し、驕れる平家のごとくだが(平家と違ってもう少し長生きするだろうが)、かくいう私もそうである。 とはいえ、テトリスやブロック崩しが一瞬で作れたところで我々が…
だいたいタイトルの通り。最近MCPサーバ書くのが流行っており、実は自分はけっこう前にサーバ自体は書いてしまっていたのだが、記事にする元気がなかったので放置していた。しかし冷静に考えるとけっこう学びがあったので記事として残しておく。 記事書いた…
こういう記事を読んだ。 fujii-yuji.net 僭越ながら意訳すると、 robots.txtでLLMからのアクセスをrejectするコンテンツプロバイダが増えている(はてなブログも現状はrejectしている) なぜrejectするのかというと、負荷がかかる上に収益を奪われる形になるか…
Scalaのパターンマッチは変数を使って分割代入ができる。 val xs = 1 :: 2 :: 3 :: Nil xs match { case head :: tail => s"head is $head" // => "head is 1" case _ => "not found" } これはxsに対してまずhead :: tail という式にマッチが試みられ、head…
Scalaコンパイラは、特定の警告メッセージに対してad-hocに警告からエラーに昇格させ、コンパイルを失敗させることができる。 以下のscalac optionを設定することで non-exhaustive match だけエラーにできる: -Wconf:msg=match may not be exhaustive:error…
仕事でいろいろな資料を読みつつ方針を決めないといけない、というシチュエーションが多々あるのだが、仕事でNotebookLMが使えるようになったので公開資料はそこに突っ込んで秘書代わりにしている。NotebookLMはURLを直接受け取れるので便利。勝手にfetchし…
マメにlogger.errorを書いていたところ、「そのエラーはユーザ起因で起こる(HTTPでいうと400系統)からログするのではなくてユーザに表示するのが筋」というレビューをもらった。 最終的にエラーをどうしたいのか、という観点で整理すると、エラーに対する対…
val xs = List(1, 2, 3, 4, 5, 6, 7, 8, 9) xs.lift(4) // => Some(5) xs.lift(42) // => None liftというのはある関数をOptionを返すように加工するようなときに使われる慣例的な名前で、今回は暗にapplyのことを指している。 www.scala-lang.org 元々lift…
Scala 3 には篩型(refinement types)を実現するためのライブラリであるIronが存在する。 blog.3qe.us このライブラリを使うと、非負整数とか、8桁の文字列とか、UUIDといった、元々の型に加えて制約を加えたものをそのまま型情報に載せて扱うことができる…
ソフトウェア開発のフンワリした話が好きなので、ここ最近思っていることを書きます。 会社で、「アーキテクチャとは」みたいなのをわいわい会話したり持ち寄る会があって、色々な側面からアーキテクチャについて考えるのだが、そこでボンヤリ思っていたこと…
解の空間が広すぎるため。 考え事とか、単に少し不安を感じているとか、何らかの問題意識がある、というような時、「自分どうしよう」という問いに流されてしまうことがある。ボンヤリとAI大時代でやっていけるか不安、とか、自分の技術スタックが通用するか…
Scalaおじいちゃんではある一方、自分はReact赤ちゃんなので、ことReactについてはしばしば初歩的なつまづきをやってしまう。もう本当にうんざりするほどしょうもないミスをする。本格的にReactやりだしてから1年ちょいくらいだけど、全然ヘボい*1。ヘボいな…
Scala Native 0.5.7がリリースされた。 github.com 主要なアップデートはリリースノートに書かれているが、面白いと思ったので紹介する。 Scala Nativeとは(おさらい) バイナリ互換性 C++標準ライブラリへの依存が削減 clasのvtableのレイアウトが最適化さ…
Scala CLIはScalaの便利コマンドラインツールで、スクリプト実行やREPL、パッケージングなどをやってくれる。今回はスクリプティングの話。 blog.3qe.us Scala CLIはビルドサーバを起動する Scalaはコンパイル型の言語であり、JVMでコンパイラが動作するとい…
オチのない日記。 Next.jsで(といってもNext固有の要素はない。)タブがいくつも出るような画面の処理を実装していて、最終的に欲しいものは色々がソートされた配列にコンポーネントが入っている(そしてそれをレンダする)、という具合の仕事をしていた。なん…
今やっているプロジェクトで、とあるデータの持ち方が今のままで良いか考えて検討する、というタスクがあって、例えば将来の要件追加とかを想定して重厚にリモデリングしておくのか、それとも現状のモデルで耐えられる+将来的な変更は多少のパッチでなんとか…
ソフトウェア開発の現場では、スクリプトを発射してシステムになんらかの変更を加える、ということがよくある。DBに変更を加えたり、なんかを削除したりといった具合。専用の管理画面をわざわざ実装するまでもない、というときに使われがち。 Dry-run スクリ…
こんな文字列があるとする: val s1 = "foo" val s2 = "" これを、以下のような感じにしたいことはまあまあある: val s1a = Some("foo") val s2a = None つまり、以下のようなルールだ: 文字列sが空の場合、None。 それ以外の場合は、Some(s)。 素朴にmatchを…
ここ最近は開発が佳境で、同僚とかなりの頻度でペアプロ(ペアプログラミング)(ここではペアオペも含む)している。主にTypeScriptを使ったNext.jsのコードを書いているが、もちろん設計もするし、もうちょっと大きいアーキテクチャみたいな相談もする。DB…
仕事とかプライベートとかで、ものすごく頭が回るときと、エンストしたようにまるで回転しないときとがあり、その差はどこから来るのだろうと考えていた時期があった。 結論から言うと、自分の場合、「それを得意だと思っているかどうか」によって頭の回転具…
先日、言語の塩漬けビリティの話がネットで盛り上がっていた。 言語とそれをとりまくエコシステムの塩漬けビリティみたいな概念が、†生産性†みたいな概念とは独立した軸に存在しているような気がしており、JavaとかCは異常にこのへんが手堅く、だから選ばれ…