Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

2025-01-01から1年間の記事一覧

おじさん

タチの悪い風邪を引いて熱も出た。 少年時代もまぁそれなりの頻度で風邪を引いていた気がするけれど、知らないNHK教育の番組を見ながらゴロゴロして、子供向けの変な甘い粉薬を飲んで寝ていたら、二日もすれば治っていたような気がする。 ひるがえって自分は…

風邪をひくたびに薬に詳しくなる

軽い喉風邪みたいなのをもらってきてしまった。ここ数日色々な場所に行っていたのでどこかで拾ってきたのかもしれない。 こういう時は早期防衛するに限るので葛根湯を飲もうと思ったが、朝飲んだぶんで払底して空箱になっていた。しょうがないから仕事の隙間…

Claude Code くんのホームディレクトリ破壊を AppArmor で阻止する

AI Agentの叛逆により、ホームディレクトリを破壊された人が話題となった。LLM無職を差し置いてLLMホームレスである。 ん?え?は?何してるの? pic.twitter.com/QaDkToek4P— /mugisus/g (@mugisus) 2025年7月1日 かわいそうに。AIはこういうとき全く躊躇な…

テスト用に適当なドメインを注入したいときは .invalid を使うとよさそう

tl;dr foobarhogehoge.invalidは絶対にリクエストが飛ばないのでおすすめ あらすじ 書いていたコードは、とあるミドルウェア向けに内部利用するURLを環境変数で受け取るようになっていた。普段は実際の内部のURLが書かれているのだが、テスト時には以下のよ…

Gitのタグをこっそりずらす

GitHubとかで、タグがつけられたら特定のアクションを実行する、といったワークフローを仕込んでいるときに、うまく動かなかったので再度走らせたい、みたいなことがあって(やんごとない理由でworkflow_dispatchはない)、なんとかしてタグをつけなおしたメモ…

Deno みたいに Scala を書く: Scala CLI 1.8.1 の using file ディレクティブの新機能

Scala CLI 1.8.1がしばらく前にリリースされていた。このリリースの主な変更は、using fileディレクティブで URL を展開する機能が利用できるようになったことだ。 github.com この記事ではこの機能について紹介する。 Scala CLI とは Scala CLI とはVirtusL…

Cyclic Barrierで安全なじゃんけんを実装する feat. Scala + Cats Effect

じゃんけんという遊びがある。 じゃんけんは、離散的に定義された三つの手(グー・チョキ・パー)の非推移的な優劣関係――グーはチョキに勝ち、チョキはパーに勝ち、パーはグーに勝つ――を用いて勝敗を決定する二人以上参加可能な競技的ゲームです。遊戯手順は…

Cats Effect 3でセマフォを使うときの便利なイディオム

Redditを見ていると便利そうな記事を発見した。 lukastymo.com この記事では、MutexやSemaphore、そしてCyclic Barrierの使い方について解説している。 セマフォとは同時に一定数のみがリソースにアクセスできるようにする、つまり「いくつまでなら同時に使…

エンジニアがVAIO SX14-R買って1週間経過したのでレビュー(たいへんおすすめ)

VAIO SX14-Rをヨドバシカメラの店頭でカスタマイズ購入した。着弾後1週間使ってみたのでレビューしてみる。今のところ自分が求めていたものが完璧に近い形で手に入ったため大満足している。 store.vaio.com 自分について 買い替え前の機種 購入の観点 MUST要…

ulimitに死す / ScalaのHTTPクライアントsttpではバックエンドを都度作らずに1つだけ作って使いまわしましょう

ここではsttp4前提で書くがsttp3でもたぶん同じ。 sttpについて説明しておくと、Scalaで利用できるHTTPクライアント実装で、操作体系がシンプルで簡単であり、なおかつ複数のバックエンド(JDK標準のクライアントを使うものとか、もっと並行性制御を強化され…

同僚とFigJamでお絵描きしながら仕事している

同僚と込み入った仕様を詰める作業をしないといけなくて、いくつかの疎結合なコンポーネントをネットワーク越しにデータが飛び交ったり、コンポーネントの中の状態が遷移していったりして、お盆と正月が同時に到来したような感じ。こういうとき、これまでは…

温湿度計を買ったところオブザーバビリティが向上した

先日また風邪を引いたので、温湿度計を買うことにした。部屋の過ごしやすい環境が分かれば安定して体調を管理できるだろうという魂胆。 タニタ Tanita 温湿度計 一目で室内環境がわかる 温度 湿度 アナログ 壁掛け 卓上 グレー マグネット TT-587-GYタニタ(T…

『はじめてのScala3』書評

この書評は、掲題書についての一個人の考えを述べ、改善に資せんとするものである。つまりここから先に書かれていることの冒頭には遍く「私見では」と見えない文字で書かれているということだ。 この本は初学者向けの教科書または副読書として不適切であり、…

ibus-skkでキーリピートが暴走する問題の解決策

Standard NotesをLinuxから使うと、Key Repeat機能が暴走して、手を放してもずっとカーソルが移動し続けたり、さらに悪いことには、バックスペースが外れなくなってどんどん文字列を削除していくことがあった。確かにこれはある意味セキュアだが、そういうこ…

Zshでスラッシュ単位で移動・削除できるようにするには$WORDCHARSを設定する

tl;dr 以下の通り.zshrcに追記する # '/' を単語の境界として認める typeset -g WORDCHARS=${WORDCHARS:s@/@} 登場人物 typeset シェル変数を書き換える -g グローバルに適用する $WORDCHARS 「ここに入った文字は単語境界とはみなさない」というリスト :s@/…

Devin 感想 (驚かない)

最近Devinを使っていて、試しに色々やらせている。印象や、こういう局面で強そう、といったことをメモしておく。 印象 それほどAIが賢いわけではない。Claude Sonnet 3.7を使ってるのと同じような感じ。たまに筋違いなPRを作ったり、古い作法でコードを書い…

Redacted: Scalaのcase classの特定のフィールドを隠すコンパイラプラグイン

Redditを見ていたところ面白いコンパイラプラグインを発見したので紹介する。 Redacted Redactedは、case classの特定のフィールドをtoString()から除外し、***で塗り潰して見えなくできるコンパイラプラグインだ。 polentino.github.io github.com Redacted…

Scalaの言語サーバMetalsがMCPに対応したのでRoo Codeで使ってみた / 型やシンボル情報をMCPが渡してくれる時代の到来

Scalaには言語サーバとしてMetalsというのがあり、LSPを喋ったりビルドサーバと協調してコンパイルを回したりしてくれる。 scalameta.org VSCodeでも使われる定番の言語サーバであり、Scala開発者の半分くらいはこれを使っているはず。ロゴがかわいい。 そん…

元気(軍艦島建造日記)

精神が水を打ったように静かになり、身体も調子が良くなる、そんな日がたまにある。今日は割とそういう日だった。 最近ものすごく眠くて、舌もピクピクして困っていたのだが、部屋を一週間は換気してなかったことに気づいた。ずっとリモートワークだからこの…

AI Coding Agent を使うことで、怒り狂い、視座が上昇する話

AI Coding Agentが活況だ。巷ではClineだRoo Codeだと盛り上がり、MCPを実装したことを自慢し、驕れる平家のごとくだが(平家と違ってもう少し長生きするだろうが)、かくいう私もそうである。 とはいえ、テトリスやブロック崩しが一瞬で作れたところで我々が…

Scala 3でMCPサーバとフレームワークをフルスクラッチした

だいたいタイトルの通り。最近MCPサーバ書くのが流行っており、実は自分はけっこう前にサーバ自体は書いてしまっていたのだが、記事にする元気がなかったので放置していた。しかし冷静に考えるとけっこう学びがあったので記事として残しておく。 記事書いた…

生成AIがWeb上のコンテンツを読めるようになる鍵は暗号通貨によるマイクロペイメント(かもしれない)

こういう記事を読んだ。 fujii-yuji.net 僭越ながら意訳すると、 robots.txtでLLMからのアクセスをrejectするコンテンツプロバイダが増えている(はてなブログも現状はrejectしている) なぜrejectするのかというと、負荷がかかる上に収益を奪われる形になるか…

Scalaで変数に入った値そのものにパターンマッチさせるときは変数をバックティックで囲うとよい

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で特定の警告をエラーにするには -Wconf:msg=FOOBAR:error と書けばよいので non-exhaustive match だけエラーにできる

Scalaコンパイラは、特定の警告メッセージに対してad-hocに警告からエラーに昇格させ、コンパイルを失敗させることができる。 以下のscalac optionを設定することで non-exhaustive match だけエラーにできる: -Wconf:msg=match may not be exhaustive:error…

NotebookLMをコキ使っている

仕事でいろいろな資料を読みつつ方針を決めないといけない、というシチュエーションが多々あるのだが、仕事でNotebookLMが使えるようになったので公開資料はそこに突っ込んで秘書代わりにしている。NotebookLMはURLを直接受け取れるので便利。勝手にfetchし…

元気なし

今日は良くなかった。些細なことで声を荒らげたり、手が進まなかったり、まるで脳に感情の蛇口があるとしたら悲しみの部分だけ壊れて止まらなくなってしまったかのようだった。みっともない。 花粉の薬が終わり、花から土へ、山から砂漠へと心配事の主体が移…

見せるエラー、見せないエラー

マメにlogger.errorを書いていたところ、「そのエラーはユーザ起因で起こる(HTTPでいうと400系統)からログするのではなくてユーザに表示するのが筋」というレビューをもらった。 最終的にエラーをどうしたいのか、という観点で整理すると、エラーに対する対…

元気

部屋をよく片付け、夕飯を食べない作戦でサクセスしている。代わりに夕方に少しなにか食べている。あとはメラトニン飲んで寝ている。

ScalaでSeq[A]にインデックスアクセスしてOption[A]を得るにはliftメソッドを呼ぶ

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…

株式会社はてなに入社しました

株式会社はてなに入社しました 株式会社はてなに入社しました - hitode909の日記

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?