Lambdaカクテル

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

Invite link for Scalaわいわいランド

技術

RSSフィードをDiscordに流せるツール『rss2discord』のご紹介

RSSをDiscordに流したいって思ったこと、ありますよね?私もそうでした。しかしながら調べてみると単体でRSS配信を行うツールはないようで、なんでもできる多機能botがそのうちの機能の1つとしてRSS機能を提供していたりする。けどRSSを配信するためだけに別…

Scalaわいわいランドに参加するボタンをブログにつけました

プログラミング言語Scalaの日本語コミュニティとして、ScalaわいわいランドというDiscordサーバを運営している。 メンバーは順調に増えている一方、これから学ぼうという人にリーチしてほしいので定期的にTwitterで宣伝しているのだけれど、どちらかといえば…

ScalaのCatsにifMという便利なやつがある

ScalaのCatsにifMという便利なやつがある。IO[Boolean]に対して条件分岐を適用して、trueの場合とfalseの場合とで異なるIOを返すというもの。別にIOでなくとも良くて、Monadなどの仲間であればifMは定義されている。例えばOption[Boolean]に対してもifMが使…

Scalaのfs2でIOの実行結果をストリームに戻すにはevalMapを使う

プロのfs2使いにとっては常識なんだろうけど、常識がないからこうして勉強している。 fs2: 3.9.2 import cats.effect.IO import fs2.Stream val heavyProcess: String => IO[Int] = ??? // すごい時間がかかって返ってくる val stream = Stream("The answer …

問題: touch a && ln a b && touch c && mv c b && ls -li a bの結果はどうなるでしょう

% touch a % ln a b % touch c % mv c b % ls -li a b つまり、ハードリンクに対してmvした場合はハードリンクの双子の中身はどうなるのか?という問題です。 答えはinode番号は別々、ファイルの中身も守られます。 ちなみにcp c bするとinode番号が同じまま…

Scalaのfs2でクソデカ文字列ストリームを特定のデリミタで分割して処理する

巨大テキストファイルが--------\nとかで区切られていて、その単位で変形して使いたいときに使える技。クソデカといっても今回は10MiBくらいでした。ぜんぜんデカくなくてごめんね。 fs2のバージョンは3.9.2。 いきなり解を示すと、.repartition(s => fs2.Ch…

RFCで標準化されたバイナリ・シリアライゼーション・フォーマットのCBORとライブラリのBorerを試してみた

先日@110146氏とごはんを食べていたのだが、そのときにBorerというライブラリがおもしろいという話を聞いたので、試しに使ってみることにした。他にもSmithyやDeep Java Libraryといったライブラリの話も聞いたので、順に書いているというわけ。 CBOR CBORと…

Scalaの難しさをインターネットから集めてみる

Scalaは難しいと思われたり敬遠されがちである。Scalaの難しさについてTwitterなどでアンケートをとったり、ネットでググって意見を吸い上げてみた。議論の叩き台にするみたいな用途を意図しています。 ご意見や記事募集中です。できればTwitterじゃなくて記…

これだけ読めばOK!Scalaの環境構築2023

自分は、仕事でScalaを数年間・プライベートな経験を含めると10年弱のScalaの経験がある、そこそこの熟練Scalaエンジニアだ。チームにメンバーが入ってきたり他人に勧めるたびにScalaの環境構築を教えている一方、最新の知見を反映した記事が無くて他人に勧…

Scala CLIのJMH機能を使ってコレクションのベンチマークを取ってみた

Scala CLIにはJava Microbenchmark Harness (JMH)を使ったベンチマークを取るための機能がある。JMHでは、いくつかのアノテーションをつけてプログラムを起動することで、自動的にパラメータを調整したベンチマークを実行してくれる。ベンチマークはメソッド…

ViteでError: EISDIR: illegal operation on a directory, readって表示されるときは"workspaces": ["./"]をpackage.jsonに足すとよい

Viteを使っているとマシンによってビルドできなくて困っていた。 % npx vite -v vite/4.4.9 linux-x64 node-v18.17.1 % npm -v 10.1.0 % npm run dev > foobar@0.0.0 dev > vite error when starting dev server: Error: EISDIR: illegal operation on a dir…

入門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を利用したが、作業の過半は同じである。…

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を使っ…

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

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

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

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

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

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

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減少を雑談で補充している

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

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