Lambdaカクテル

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

Invite link for Scalaわいわいランド

入門Laminar: 0. もうひとつの世界のReact -- Laminarをビルドする

この記事はScala.jsのUIライブラリであるLaminarをステップバイステップで学習していこうという記事の第一弾だ。 いくつかの記事に分けて、現時点で自分が知っているLaminarの知識や知見をまとめていくつもりだ。 あまりどのような構成にするかは考えていな…

一定時間ホバーするとイベントがトリガーする仕組みをLaminarで実装する

実装する必要があったので、一定時間特定の要素にマウスホバーするとイベントをトリガする処理をLaminarで実装してみた。思っていたよりも直感的に書けた。 LaminarとはScalaJSのフロントエンドライブラリ。かなりざっくり言うとReactやVueの仲間といったと…

ScalaプロジェクトをMaven Centralにpublishするメモ

この記事はScalaプロジェクトをMaven Central Repositoryにリリースして全世界から使えるようにする手順をまとめたものである。作業は大別してSonatype側とビルドツール側とに分かれる。今回はビルドツールとしてMillを利用したが、作業の過半は同じである。…

Scala 3.3.0でunused import/variablesのチェックを有効化するには-Wunused:allを使う

未使用のimportや値を検査するコンパイラオプションとMetalsやScalafixとの関係について調べたメモです。コンパイラまわりの実装を追いきれていない可能性があるため、間違っていたらご指摘いただけると嬉しいです。 かつてScala 2系ではunused importなどの…

CatsのfoldM(foldLeftM)を勉強した

foldMについてちょっと勉強したのでメモ。 文脈 おさらい: foldLeft foldM foldMの振る舞い 発展例: ルールエンジン foldMの出番 まとめ 文脈 このへんの会話が流れてきたけど、そういえばfoldM使ったことなかったな、と思った。 やはり traverse … traverse…

松竹梅はsortしても松竹梅になる

物事の順位付けをするとき、松竹梅という雅な表現がよく使われる。自分もよく使う。 blog.3qe.us コンピュータにとってもそうなのだろうか?そう考えた私は実際にソートしてみることにした。 % echo $LANG ja_JP.UTF-8 % sort --version sort (GNU coreutils…

Scala Stewardを自分のOSSに導入する方法(5分で可能)

Scala Stewardという、自動的にScalaの依存性をアップデートしてくれるソフトウェアがある。ざっくり言うと、Scalaに特化したRenovateやDependabotみたいなやつ。 github.com 謎のゆるいネコがマスコット 以下のようなPull-Reqを作ってくれる。どうやらbuild…

CoursierでScala CLIをアップデートできないときはcsをインストールし直すと良い

プログラミング言語Scalaには、Scala製のツールやアプリケーションをインストールする基盤としてCoursierというソフトウェアが用意されている。グローバルに使うソフトウェアをインストールするのに主に使われ、振舞いとしてはnpm install -gに近い。 get-co…

Millのテストディレクトリはsbtと構成が違うので注意

ScalaのビルドツールであるMillでテストを書こうとしたらsbtとディレクトリ構成が違っていて詰まっていたのでその違いを記しておく。 % mill --version Mill Build Tool version 0.11.2 Java version: 18.0.2, vendor: Amazon.com Inc., runtime: /home/wind…

zshでRPROMPT設定してるならtransient_rprompt設定しましょう

職場のScrapboxで、 はてなのエンジニアのPS1が集まってくるページというページが盛り上がっていた。要するにシェルプロンプトどうしているかという話題。 そんな中zsh使っている同僚がRPROMPTに情報を集約してると言っていた。RPROMPTというのは画面の右側…

ScalaのビルドツールMillが生成するUberjarはZIPファイルの面白仕様を使ってシェルから直接実行できるようになっている

プログラミング言語Scalaで最もよく使われているビルドツールといえばsbtだ。起動しっぱなしのインタラクティブ仕様なsbtがやや鈍重なきらいがある一方、もう1つのビルドツールであるMillが開発されており、こちらではnpmのようなシェル単位の操作体系を指向…

sbtの依存性定義でたまに見るtestやprovidedとは何か--コンフィギュレーションについて学ぼう

sbtはかつてsimple build toolと呼ばれていた(今は酢豚の略とされている)。しかしビルドツールというのは本質的に難しい。複数の依存性を解決し、コンパイラ達が吐き出す成果物を統合し、1つあるいは2つ以上の最終成果物にしなければならないのだから、複雑…

sbt-packでScalaのDockerイメージを作る

以前、sbt-native-packagerでScalaのDockerイメージを作る方法を紹介した。今回はsbt-packを利用した、より軽量な手法を紹介する。 前回の記事はこちら: blog.3qe.us sbt-pack: 1つのディレクトリにまとめる君 sbt-packを聞いたことがなくても、sbt-assembly…

Scala 3から導入されたParameter Untuplingが便利

Scala 3でParameter Untuplingという機能が追加された。この機能は従来Scala 2で問題となっていたタプルまわりの取り回しを大きく改善する。 Parameter Untupling 従来、F[(A, B)]のような型(例えばSeq[(String, Int)])に対してmapを行うときは、caseを使っ…

30歳になりました

掲題の通りです。ちなみに十年以上このブログを使っているので成人した頃にも記事を書いているようだが、当時はネットに見せるような友達もあまりいなかったので、特に何事もなく別の話をしている。当時もAkkaを書いていたらしい。 しかし十年も同じブログを…

AWS LambdaでScala 3をContainer imageで動作させる

先日(といっても結構前のことだが)、Scala 3のLTSサポートバージョンである3.3.0がリリースされた。Scala 3の開発が円熟してきているようで嬉しい。これからも元気でいてね。今回はScala 3をAWS LambdaのContainer imageを使って動作させる手法についてお…

勉強の型を身に付けたい話

最近は、おもしろ技術について興味のおもむくまま手を動かしたりしていると詳しくなっている、というパターンが多い。一方で、コツコツ必要なことを学んで(応用の効く)体系的な知識を手に入れる、という行為にもあこがれがある。 例えば最近はScala.jsのビ…

帰省失敗(ANAの払い戻しメカニズムが難解)

掲題の通り。週末は京都にいるので遊びましょう。 明日から飛行機に乗って地元に帰る予定だったけれど、到着地の福岡空港に台風が接近しているとの報があり、あれよあれよという間に暴風域に入る勢いになってしまった。当たり前だが風が強すぎると飛行機は着…

心の闇

ネガティブになりがちである。が、今回はそれを打破できるよね、みたいな話。 人間に対して失望するとか、自分は周りと比べて仕事が下手すぎる……とか、アニメのようにまともに青春を行えていない……とか、若さが失われていく……といったことで悲観的になりがち…

カートに乗った

コース 大阪は舞洲のゴーカート施設に友達と行って乗ってきた。暑かったけど施設が整っていたのでジュースとか飲んで冷やした。自前のヘルメットとグローブ持って行ったけど普通に負けておもしろかった。車出してくれたみなさまありがとうございました。マツ…

主人公になるべし

どうにも気持ちが落ち込んでしまうこともあるけれど、そういうときも前向きでありたいものだ。しかし落ち込んでいるとそういうアドバイスも耳に入らない。 最近、こういうことを思った。主人公のように振る舞っていると主人公のような性格というかメンタリテ…

推測するな、計測せよ、ただし予測せよ

会社で1on1をやった。そのときに、ツメが甘い状態を脱することで、より良いエンジニアになれるという話で盛り上がった。よく詰められている状態だと大きな成果を発揮できている。だからその状態を持続させたい。他方でツメが甘い状態になりがちである。それ…

あと少しで眠れそうだったのに全然眠れなかった。今は世の中が憎いし、こんなことをしても何にもならず、ただ悲しい……

Nothing Phone(1)で三井住友カードをGoogle Wallet (Pay) に登録するにはVpassアプリ経由で登録する必要がある

Nothing Phone (2) が発表された。 jp.nothing.tech 欲しい。欲しいけど自分は(1)を持っているのでしばらくは我慢だ。 ところでNothing PhoneにはFellicaチップが乗っていないので、日本特有のおサイフケータイの機能が使えない(載せてくれ!!)。つまりiDやSu…

Akka(2.8) PersistenceでSerializerとしてCirceを使う方法

Akka PersistenceはAkkaでイベントソーシングを行い、アクターの状態を永続化するためのライブラリである。 doc.akka.io イベントなどの永続化にJSONライブラリであるCirceを使ったのでその手順をメモしておく。ここではAkka Persistenceの導入そのものの話…

Akka(2.8)でアクターの監視(Supervise)を行う

Akka 2.8でActorがクラッシュした場合にどのように振る舞うかについて調べる機会があったのでメモ。 ライブラリ依存性は以下の通り: libraryDependencies += "com.typesafe.akka" %% "akka-actor-typed" % "2.8.3 Actorの監視 通常のプログラムは例外をキャ…

コードコミュニケーションによるMP減少を雑談で補充している

就業間際、ちょうどその日は疲れていたのでくたくたになっていていて、コードレビューの指摘を打ち返す気力が出ずに黙って修正を受け入れる、という感じになってしまうことがあるけど、当然同僚はコードを良くするためにレビューしているので、どっちが良い…

Scalaのコーディングスタイルガイドでは名前は短いほうがいい

仕事でこういうシチュエーションに遭遇した。 foo.bar.buzz.Piyoというクラスがある(パッケージがfoo.bar.buzz) 同名のhoge.fuga.Piyoというクラスがよそのパッケージにもある(パッケージがhoge.fuga) こういう場合、BuzzPiyo / FugaPiyoみたいに弁別できる…

古代文明の謎を追うようにコードや仕様を読む / 「理解」のシノニムを具体的に決めてみる

ツイッターにも書いたが、エンジニアをやってる根源的な動機として、「難しいけどイケてる仕組みを理解わかりてェ・・・」というものがあり、それに衝き動かされてソフトウェアエンジニアという職をやっているようなところがある。 その一方で、難しい仕組み…

Akka HTTPでContent-Typeを設定する方法

Akka HTTPは素朴なライブラリなので、特にそういうプラグインを使っていない場合は自分でレスポンスのContent-Typeを設定する必要がある。この記事では、Akka HTTPでContent-Typeを設定する方法と、Acceptヘッダを設定する方法を説明する。 この記事ではAkka…

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