Lambdaカクテル

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

Invite link for Scalaわいわいランド

技術

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を適用する…

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

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

Cats Effectで同時実行数を制御しながらIOを並行実行する

Scalaの軽量スレッドなどを提供するCats Effectで、Seqに詰まったタスクを並行に実行したいが同時実行数は制限したいということがあったので、それに対応する実装をしたメモ。 typelevel.org IOのsequence Cats Effectでは、sequenceを使うことでSeq[IO[A]]…

sbt-native-packagerでDockerイメージにファイルを追加する

sbt-native-packagerのDocker pluginでentrypoint.shを追加してイメージの実行を制御したかったがつまづいたので 解決方法をメモ。 sbt-native-packager sbt-native-packagerとは、Scalaプロジェクトを様々なプラットフォームのネイティブな方式にパッケージ…

Metals v0.11.12で激便利になったScala Scriptの依存性記述を試そう

先日、ScalaのLSPサーバであるところのMetals v0.11.12がリリースされた。 scalameta.org このリリースで面白いLSPコードアクションが追加されたので紹介する。 sbt方式の依存性記述をScala Script方式に変換する Percent syntaxとColon syntax 苦痛をともな…

JSONをMessagePackにしてから圧縮するとどのくらい短くできるか(1/3になった)

追記: 最近はMessagePackを派生したCBORがRFCとして標準化されているようです blog.3qe.us こういう記事を読んだ。 blog.utgw.net URLにデータを載っける発想は面白い。せっかくなのでMessagePackにしたついでにzstdとかで圧縮してからBase64エンコードした…

Emacsのemacs-lsp-metalsでMetalsのバージョンをアップデートする

毎回忘れるのでメモ。Emacsのemacs-lsp-metalsでMetalsのバージョンをアップデートするには、M-x lsp-update-serverしてmetalsを選択すればよい。

Scalaのメモリ使用量はJavaよりも多いか検証した

こういう記事を読んだ。 transparent-to-radiation.blogspot.com なんかScalaのメモリ使用量が異常に多いなと思って、調べた。検証コードもアップした。 github.com 検証として、様々なJVM(OpenJDKとかCorettoとか)とそのバージョン(8, 11, 17)でJARを実行し…

ゴチャッと必要な情報が詰め込まれた標示に萌える

産業機械とか大型機械といった、相応に注意しながら操作しなければならないモノとかに貼り付けられている、ゴチャッとした、しかし必要な情報が詰め込まれたフォーマットが好きで、発見すると画像を集めてしまう。 萌えは死語っぽくなってないか?と思うけど…

Fs2 3.6.1で複数のワーカに処理を分散させるパターンを書く

Scalaの非同期・ストリーミング処理ライブラリであるfs2で、ジョブキュー的な感じで、複数のワーカにデータを分散して配りたいことがあり、それの実現方法について調査したメモ。 fs2.io 追記(2023-09-23) fs2 3.9.2で確認したが、stream.parEvalMap(N)(IO)…

Twitter + 各Fediverseマイクロブログツールの埋め込みの比較

Twitter Good bye— 言語の統合 / タスクの言語化 @windymelt@mstdn.takuya-a.net (@windymelt) 2023年4月10日 おなじみのやつ。 Mastodon mstdn.takuya-a.net マストドンでもいい感じに埋め込まれるようだ。 Misskey misskey.io Misskeyでは埋め込み用の枠は…

軽量MastodonことPleromaインスタンスを立てたメモ

立てました PleromaというActivityPubを使ったマイクロブログの実装がある。Elixirで書かれていて、バックエンドとフロントエンドが分離されていて、Mastodonよりやや軽量な感じらしい。 pleroma.social 分散SNSにおける標準的なプロトコルであるActivityPub…

Twitterが直球の言論統制を開始しつつある件に関して 兼 避難所アカウントのお知らせ

3行で Twitterが特定アカウントのツイートをRTできなくした。一線を踏み越えたと考えている これは言論の統制であるし、このまま加速度的に濫用されると考えている 悪いことは言わないから今すぐ別のSNS、マストドンとかにアカウントを作りなさい 統制 今日…

Obsidianにはデイリーノート機能があり、指定したディレクトリにその日のノートを書くことができる

タイトル通りなのですが、知らずに毎日手であたたかみのあるノート作りをしていました。 Markdown管理ツールであるObsidianが便利で毎日使っている。 blog.3qe.us blog.3qe.us そして、その日の日記を書く活動を自分はよくやっている。 これはネットの知人が…

Scala CLIのusing libはusing depになりました

Scalaのスクリプティングツールとして愛用されているScala CLIのusingディレクティブの用語が一部リネームされました。後方互換性があるため、これからのスクリプトに新しい記法を使うとよいでしょう。

jqの.[]チョットワカルになってきた

普段なんとなくjqを使うといったら.fooくらいの単純なフィルタや整形用途くらいで、ガッツリ勉強したことはなかった。 ガッツリ勉強していないので、.[]といった配列まわりの機能をゴリゴリ使えなかったのだが、基礎テクを学び直してある程度使えるようにな…

Scala ScriptでCats Effectを使う

毎回忘れて調べているのでメモ。 ファイル名は.scala.scではなく.scalaにする もろもろをimportする object Main extends IOApp.Simple { val run: IO[Unit] = IO.println("Hello world") } を定義する scala-cli script.scala で実行できる //> using scala…

自分のはてなブックマークをChatGPTにつないだ

scrapbox.io から派生して、 blog.sushi.money こういうことが可能だとわかった。 はてなブックマークはAtom形式でのエクスポートが可能なので、 はてブにAtomを吐き出させる AtomをJSONに変換する あとは同じ というプロセスで、自分のはてブのコメントを知…

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