この記事はScala.jsのUIライブラリであるLaminarをステップバイステップで学習していこうという記事の第一弾だ。 いくつかの記事に分けて、現時点で自分が知っているLaminarの知識や知見をまとめていくつもりだ。 あまりどのような構成にするかは考えていな…
実装する必要があったので、一定時間特定の要素にマウスホバーするとイベントをトリガする処理をLaminarで実装してみた。思っていたよりも直感的に書けた。 LaminarとはScalaJSのフロントエンドライブラリ。かなりざっくり言うとReactやVueの仲間といったと…
この記事はScalaプロジェクトをMaven Central Repositoryにリリースして全世界から使えるようにする手順をまとめたものである。作業は大別してSonatype側とビルドツール側とに分かれる。今回はビルドツールとしてMillを利用したが、作業の過半は同じである。…
未使用のimportや値を検査するコンパイラオプションとMetalsやScalafixとの関係について調べたメモです。コンパイラまわりの実装を追いきれていない可能性があるため、間違っていたらご指摘いただけると嬉しいです。 かつてScala 2系ではunused importなどの…
foldMについてちょっと勉強したのでメモ。 文脈 おさらい: foldLeft foldM foldMの振る舞い 発展例: ルールエンジン foldMの出番 まとめ 文脈 このへんの会話が流れてきたけど、そういえばfoldM使ったことなかったな、と思った。 やはり traverse … traverse…
物事の順位付けをするとき、松竹梅という雅な表現がよく使われる。自分もよく使う。 blog.3qe.us コンピュータにとってもそうなのだろうか?そう考えた私は実際にソートしてみることにした。 % echo $LANG ja_JP.UTF-8 % sort --version sort (GNU coreutils…
Scala Stewardという、自動的にScalaの依存性をアップデートしてくれるソフトウェアがある。ざっくり言うと、Scalaに特化したRenovateやDependabotみたいなやつ。 github.com 謎のゆるいネコがマスコット 以下のようなPull-Reqを作ってくれる。どうやらbuild…
プログラミング言語Scalaには、Scala製のツールやアプリケーションをインストールする基盤としてCoursierというソフトウェアが用意されている。グローバルに使うソフトウェアをインストールするのに主に使われ、振舞いとしてはnpm install -gに近い。 get-co…
ScalaのビルドツールであるMillでテストを書こうとしたらsbtとディレクトリ構成が違っていて詰まっていたのでその違いを記しておく。 % mill --version Mill Build Tool version 0.11.2 Java version: 18.0.2, vendor: Amazon.com Inc., runtime: /home/wind…
職場のScrapboxで、 はてなのエンジニアのPS1が集まってくるページというページが盛り上がっていた。要するにシェルプロンプトどうしているかという話題。 そんな中zsh使っている同僚がRPROMPTに情報を集約してると言っていた。RPROMPTというのは画面の右側…
プログラミング言語Scalaで最もよく使われているビルドツールといえばsbtだ。起動しっぱなしのインタラクティブ仕様なsbtがやや鈍重なきらいがある一方、もう1つのビルドツールであるMillが開発されており、こちらではnpmのようなシェル単位の操作体系を指向…
sbtはかつてsimple build toolと呼ばれていた(今は酢豚の略とされている)。しかしビルドツールというのは本質的に難しい。複数の依存性を解決し、コンパイラ達が吐き出す成果物を統合し、1つあるいは2つ以上の最終成果物にしなければならないのだから、複雑…
以前、sbt-native-packagerでScalaのDockerイメージを作る方法を紹介した。今回はsbt-packを利用した、より軽量な手法を紹介する。 前回の記事はこちら: blog.3qe.us sbt-pack: 1つのディレクトリにまとめる君 sbt-packを聞いたことがなくても、sbt-assembly…
Scala 3でParameter Untuplingという機能が追加された。この機能は従来Scala 2で問題となっていたタプルまわりの取り回しを大きく改善する。 Parameter Untupling 従来、F[(A, B)]のような型(例えばSeq[(String, Int)])に対してmapを行うときは、caseを使っ…
掲題の通りです。ちなみに十年以上このブログを使っているので成人した頃にも記事を書いているようだが、当時はネットに見せるような友達もあまりいなかったので、特に何事もなく別の話をしている。当時もAkkaを書いていたらしい。 しかし十年も同じブログを…
先日(といっても結構前のことだが)、Scala 3のLTSサポートバージョンである3.3.0がリリースされた。Scala 3の開発が円熟してきているようで嬉しい。これからも元気でいてね。今回はScala 3をAWS LambdaのContainer imageを使って動作させる手法についてお…
最近は、おもしろ技術について興味のおもむくまま手を動かしたりしていると詳しくなっている、というパターンが多い。一方で、コツコツ必要なことを学んで(応用の効く)体系的な知識を手に入れる、という行為にもあこがれがある。 例えば最近はScala.jsのビ…
掲題の通り。週末は京都にいるので遊びましょう。 明日から飛行機に乗って地元に帰る予定だったけれど、到着地の福岡空港に台風が接近しているとの報があり、あれよあれよという間に暴風域に入る勢いになってしまった。当たり前だが風が強すぎると飛行機は着…
ネガティブになりがちである。が、今回はそれを打破できるよね、みたいな話。 人間に対して失望するとか、自分は周りと比べて仕事が下手すぎる……とか、アニメのようにまともに青春を行えていない……とか、若さが失われていく……といったことで悲観的になりがち…
コース 大阪は舞洲のゴーカート施設に友達と行って乗ってきた。暑かったけど施設が整っていたのでジュースとか飲んで冷やした。自前のヘルメットとグローブ持って行ったけど普通に負けておもしろかった。車出してくれたみなさまありがとうございました。マツ…
どうにも気持ちが落ち込んでしまうこともあるけれど、そういうときも前向きでありたいものだ。しかし落ち込んでいるとそういうアドバイスも耳に入らない。 最近、こういうことを思った。主人公のように振る舞っていると主人公のような性格というかメンタリテ…
会社で1on1をやった。そのときに、ツメが甘い状態を脱することで、より良いエンジニアになれるという話で盛り上がった。よく詰められている状態だと大きな成果を発揮できている。だからその状態を持続させたい。他方でツメが甘い状態になりがちである。それ…
あと少しで眠れそうだったのに全然眠れなかった。今は世の中が憎いし、こんなことをしても何にもならず、ただ悲しい……
Nothing Phone (2) が発表された。 jp.nothing.tech 欲しい。欲しいけど自分は(1)を持っているのでしばらくは我慢だ。 ところでNothing PhoneにはFellicaチップが乗っていないので、日本特有のおサイフケータイの機能が使えない(載せてくれ!!)。つまりiDやSu…
Akka PersistenceはAkkaでイベントソーシングを行い、アクターの状態を永続化するためのライブラリである。 doc.akka.io イベントなどの永続化にJSONライブラリであるCirceを使ったのでその手順をメモしておく。ここではAkka Persistenceの導入そのものの話…
Akka 2.8でActorがクラッシュした場合にどのように振る舞うかについて調べる機会があったのでメモ。 ライブラリ依存性は以下の通り: libraryDependencies += "com.typesafe.akka" %% "akka-actor-typed" % "2.8.3 Actorの監視 通常のプログラムは例外をキャ…
就業間際、ちょうどその日は疲れていたのでくたくたになっていていて、コードレビューの指摘を打ち返す気力が出ずに黙って修正を受け入れる、という感じになってしまうことがあるけど、当然同僚はコードを良くするためにレビューしているので、どっちが良い…
仕事でこういうシチュエーションに遭遇した。 foo.bar.buzz.Piyoというクラスがある(パッケージがfoo.bar.buzz) 同名のhoge.fuga.Piyoというクラスがよそのパッケージにもある(パッケージがhoge.fuga) こういう場合、BuzzPiyo / FugaPiyoみたいに弁別できる…
ツイッターにも書いたが、エンジニアをやってる根源的な動機として、「難しいけどイケてる仕組みを理解わかりてェ・・・」というものがあり、それに衝き動かされてソフトウェアエンジニアという職をやっているようなところがある。 その一方で、難しい仕組み…
Akka HTTPは素朴なライブラリなので、特にそういうプラグインを使っていない場合は自分でレスポンスのContent-Typeを設定する必要がある。この記事では、Akka HTTPでContent-Typeを設定する方法と、Acceptヘッダを設定する方法を説明する。 この記事ではAkka…