Lambdaカクテル

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

Invite link for Scalaわいわいランド

2023-05-01から1ヶ月間の記事一覧

あるサーバ(MySQL、任意のTCPサーバ)が起動しているかシェルスクリプトから確認し、起動するまで待つ作法

自分用メモ。 MySQLが起動するまで待つ mysqladminコマンドにはpingというサブコマンドがあるので、これを利用すれば起動するまで待つ処理を書くことができる: until mysqladmin ping -u "$MYSQL_USER" -h "$HOST" --silent; do echo "waiting for MySQL to …

畳み込みの視点から見たforall(every)とexists(some): 空集合に対するforallは常にtrueになる

こういうツイートが話題になっていた。 「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡したらfalseを返すかtrueを返すかが、良いプログラマかどうかの一つの境目だ— ふみ (DJ Monad) (@fumieval) 2023年5月29日 つま…

Scala 3.3.0から標準で使えるようになるfewerBraces記法のまとめ

先日、Scala CLI v1.0.0がついにリリースされた。これまではv0系列だったので、満を持しての正式版リリースだ。おめでとう! github.com いちおう説明しておくとScala CLIは総合的なScalaのコマンドラインツールで、以下のようなことができる: Uber JAR(単体…

Scala + tapirで定義したエンドポイントにhttp4sクライアントでアクセスするパターン

ScalaでHTTPエンドポイントを定義するためのライブラリであるTapirは最近よく使われており、Star数もとても多い(今見たら1.2kだった)。具体的なHTTPライブラリから独立した定義ができるため、メンテナビリティが高いのが特徴である。OpenAPIの定義を生成する…

Scala 3は普通にAWS Lambdaで実行できる

そういえばScalaをAWS Lambdaで実行するのどうするんだっけ、と思った。実はScalaをLambdaで動かしたことは無い気がするので調べておいた。今回はJava 17を前提に動作させる。 tl;dr AWS LambdaのJavaランタイム sbt-assembly sbt-assemblyへの依存性の宣言 …

Scala 3でONNX Runtimeを走らせ、ウサギの画像分類タスクを実行させた

最近のAI技術の発展には目を見張るものがあるが、そんな中でも言語・ライブラリ・フレームワーク間の互換性は今ひとつ進んでいないのが現状で、TensorFlowとPyTorchとscikit-learnとでは別々の形式をモデルとして利用しているし、もちろんPythonで動かすしか…

Scala 3のEnumとStringを相互変換する方法がやや不便

プログラミングにおけるEnumeration、略してEnumは列挙型とも呼ばれ、いくつかあるうちの特定の値しか取らない型を表現するために使われる型である。Enumはだいたいの言語で様々な形で実装されている。 さて、Scala 2までではEnumを使う際はやや特殊なクラス…

EmacsでScala3のインデントが正しく動かないので調査した

自分はEmacsでScalaを開発している。最近はScala 3がアツいのでEmacsでScala3を書いているのだが、Scala 3固有のシンタックスをうまく認識しないというトラブルが起こり困っている。 具体的には、Scala 3から利用できるOptional Bracesを使っているとき、TAB…

Cats Effect 3ではSIGINTはどこで処理されるか

この記事では、プログラミング言語Scalaにおいて関数型ライブラリCatsをベースとした非同期処理(グリーンスレッド)ライブラリである Cats Effect(CE) において、プロセスがSIGINTを受信した場合にどのようにCEが振る舞うかを解説する。 またこの記事は執筆時…

Http4sのEmberサーバはSIGINTを受けてもしばらく停止しない(30秒待てば止まる)

zenn.dev こういう良い記事がある。しかしこの構成を実行すると、SIGINTを受け付けないサーバになってしまう(以下引用)。 object Main extends IOApp { val echo = HttpRoutes.of[IO] { case GET -> Root / "echo" / arg => Ok(arg) }.orNotFound def run(ar…

業務端末としてMacを使うかLinux使うか

仕事で、なんか自分のマシンでしか発生しないDockerの謎の挙動があってずっと困っていたのだけれど、実は自分のDockerのバージョンが古いというのが理由だった。自分はopenSuSE Leapで仕事をしているけれど、Leapは定期リリース版で、ローリングリリースモデ…

同僚と自分とでナレッジを結晶化させる方法論の違いがあって面白かった

id:yigarashi *1と1on1をしていて、自分がid:yigarashiが書く記事はよく体系化されてるけど普段から体系化して情報を集めたりしてんの、という質問をしたところから色々面白い話を聞くことができたのでメモ。 いつ結晶化して展開するか まず、自分もid:yigar…

Tree-sitterでシンタックスハイライトしたコードをHTMLで出力するワンライナー

Tree-sitterというソフトウェアがある。CとRustメインで書かれているパーサジェネレータとそれをとりまくツールである。 tree-sitter.github.io これを利用して、コードをもとにシンタックスハイライトを効かせたHTMLを生成できたのでその紹介をする。 追記(…

スライド作るならRemark

Remarkという、markdownを書くことでスライドを作れるツールがある。 remarkjs.com 一般的なスライド作成ツールと比べて、以下のような利点があって自分の主義にマッチしていると感じた。 無料 プレーンなHTMLとランタイムのJavaScriptで動作する Markdownを…

sbtでサブプロジェクトをクロスコンパイルする

大きなsbtプロジェクトのScalaのバージョンアップを行いたいが、共通して依存されているモジュールがあるとそこがボトルネックになって結局全てのモジュールのScalaバージョンを上げなければならなくなってしまう。これをクロスコンパイルで解消したメモ。 …

ScalaでSeqの先頭と中間と最後をパターンマッチで取り出すには+:と:+を使うと良い

こういうSeqがあるとする。 val lis = Seq(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) これの先頭要素と、最後の要素、そしてどちらでもない中間の要素を取り出したい。 素朴にやると、headとlastとを使って、slice(1, lis.size)を使うことになるが、これをパターンマ…

Seq[(A, B)]の片側だけにflatMapするにはcats.arrowを使う

タプルのSeqの片側にflatMapしたいことがあって、arrowのsecondを使ったらうまくいったのでメモ。 flatMap(知ってる人は飛ばしていい) タプルのSeqに対してflatMapしたい ナイーブな解法1: fをタプルに拡張する ナイーブな解法2: lisの片側にだけfを適用する…

月報: 2023年4月

本来は週報をまとめて書くべきなのだが、中途半端な時期に始めてしまったので一気に月報を書く。 3月から4月まで溜めてしまった。 日記、週報、月報を書くと自分自身の思っていることを再構成でき、より洗練させ、発展の足掛りとすることができる。今のとこ…

Logbackでプログラムからログレベルを動的に変更する in Scala

ZMMの開発で、動的にログレベルを変更したいということがあった。具体的には、--verboseをつけるたびにログレベルを上げて詳細な情報を吐き出してほしい。 結論から言うと、以下のようにすればよい。 stackoverflow.com Scalaだと以下のようなコードを書いた…

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