Lambdaカクテル

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

Invite link for Scalaわいわいランド

2024-01-01から1年間の記事一覧

ScalaでZIPファイルを簡単に扱うならos-libが便利そう

会社では定期的にScalaの新たなトピックを確認したり共有したりする会をやっている。そこでScalaのRedditを見ていると、os-libのバージョンアップが知らされていた。 見ると最近のバージョンではos-libはZIPを扱えるようになっていた。APIも便利そうなので紹…

Scala 3でクラスフィールドの初期化順の困りを回避できるSafe Initialization機能が便利なので紹介したい

突然だがこのScala 3のコードはコンパイルするだろうか。先に正解を言っておくと「コンパイルする」(Scala 3.5.0)。 class Foo: val x = y val y = 42 では、このFooに向けて以下の呼び出しを行うとどうなるだろう? Foo().x 驚くなかれ、この式は0に評価さ…

Pulumi(Besom)でリソース名が自動的に変化するのを防ぐ

PulumiとはIaCツールである。 www.pulumi.com 競合としてTerraformとかCDK Terraformがある。PulumiはSDKを持つ好きなプログラミング言語で好きなプロバイダのリソースを記述できる面白いアーキテクチャになっていて、例えばKubernetesやCloudflare、AWSなど…

sbt-native-packagerでCorrettoを利用するにはdaemonUserUidをいじるといい

案外まとまった手順がネットになかったので放流しておきます。 どういうときに読むか sbt-native-packagerでDockerイメージを作成しようとしたら /bin/sh: adduser: command not found と表示されたとき sbt-native-packagerとは ScalaをDockerやdebパッケー…

Scalaでもコードとテストを同じディレクトリに配置できる(テストのコロケーション)

社のSlackでこういう発言を見た。 Go みたいにプログラムとテストを同じ dir に入れたい。 そういえば、テストとコードを同じ場所に配置する言語をよく見かける。こうした、テストとコードを同じ位置に置くという思想を(テストの)コロケーションと呼ぶようだ…

Play frameworkでJSONに余計なフィールドが含まれているときにエラーにするには

Reads[A]にはcomposeWithメソッドがあるため、これを利用して余分なフィールドを検出できる。composeWithは、いったん別のReadsを事前に経由させるメソッド。 Scala 3.3.0、play-json 3.0.4で確認した。 前提 まず、あるcase classと、余分なフィールドを含…

Scalaのfs2でテクニカルなStreamを作りたいときはPullを使うといい

Scalaにはfs2という非同期ストリーミング処理を生産的に行えるライブラリがある。ストリーミング処理なので、沢山のデータがどんどん流れてきたり、ビッグデータ的な情報を扱う企業でよく利用されている。 fs2.io speakerdeck.com 最初から非同期処理に対応…

なぜDBから引くときに1000件ずつchunkingするのか、説明できますか

MySQLやPostgreSQLといったRDBMSからデータを引いてくるとき、扱うデータの規模によっては、1000件ずつLIMITをかけて順に引いていくということがある。 以前slow queryが出たらよくやっていたのを思い出して、ふとこのあたりってどういう根拠があってやって…

ヤモリくん

数日前、マンションの廊下に出た拍子にヤモリくんが家に入ってきてどこかに行ってしまった。 暑かったのでホモサピエンスの巣で涼みたかったのかもしれないが、そのときは急いでいたのでそのままヤモリくんに留守番、まさに家守をさせていたが、とうとうその…

Scala 3のsummonって何?

Scala 3にはsummonという関数がある。普段はあまり使うことがないが、知っておくとusingまわりのデバッグにも使えるとても便利なやつだ。この記事ではsummonの便利な利用法を紹介する。 docs.scala-lang.org 型の一致を確認する summonの典型的なユースケー…

心に原風景を飼っておく

わりと多くの人間には、原風景や基盤となる心象風景みたいなものがあると思う。自分の場合、出身地である佐賀の雄大な(何もないとも言う)田園風景とか、のどかな県民性とか、気候が穏やかであることが、原風景としてすぐに思い浮かぶ。 心が安定している人と…

金がない

先日ぶっ倒れたり帯状疱疹になったりした。色々あって具合が悪かったのだ。 blog.3qe.us blog.3qe.us したら普通に金がどんどんなくなっていって、自分は3割負担だけど、普通に口座の残高が尽きた。このときばかりはキューバ国民*1になりたいと思った。病気…

Cats EffectのResourceで安全にリソースをむすんでひらいてしよう

Scalaの非同期処理フレームワークであるCats Effectには、非同期処理のためのバラエティ豊かな部品が沢山揃っていて、これらを組み合わせることで簡単に柔軟な非同期処理を書けるようになっている。 中でもよく登場する部品がResourceだ。Resourceを利用する…

Cats Effectの*>と>>の違いは何?Scaladocはあるの?調べてみました!

tl;dr どちらも「左を実行してから右を実行」であることに変わりない *>は再帰セーフではない 値渡し(IO[B])していることに起因する >>は再帰セーフ 名前渡し(=> IO[B])していることに起因する 特に理由がなければ>>を使おう Scaladoc しっかりScaladocに説…

「ちゃんと」やるべきか検討するステップをちゃんと踏みたい

仕事で、あるタスクについて同僚が状況整理から始めていて良かった。その過程で色々と見落しや気付いてなかったポイントが出てきてお得だ。自分は「やりながら考えたらなんとかなるっしょ」みたいな性質で、細かい部分を見落しがちだから助かる。 仕事という…

Feral: Cats EffectとScala.jsを使って高性能なAWS Lambda Functionを迅速に作ろう

現代のクラウドネイティブな開発においてはいわゆるFaaS(Function as a Service)が欠かせない存在となりつつある。AWSではAWS Lambdaとして、Google CloudではCloud Functionsとして提供されるこのサービスは、小さなコード片をマシンのデプロイを行うことな…

Scala.jsで環境変数を呼び出したいときはsys.envではなくjs.Dynamicを利用する

Scala.jsをNode環境で動作させるときに環境変数を取得したかったけどうまく動かずにハマったのでメモ。 tl;dr val env = js.Dynamic.global.process.env.asInstanceOf[js.Dictionary[String]].toMap Scala.jsと環境変数 通常Scalaで環境変数にアクセスするに…

ブロッキングってそもそも何だよ

さきほど別のブログ記事を書いていて(それはまたそのうち発射するけど)、その中でブロッキング処理とか同期的に扱う、という言葉を使った。 このときの自分の理解がこれ: ブロッキング 呼ぶと待たされる ノンブロッキング 呼んでも待たされない、すぐ返る そ…

ARCHISS Maestro TKL (キーボード)を買った

キーボードを買い替えた。ARCHISSというブランドのテンキーレス・US配列・メカニカルという、まぁ同業者(?)の中ではポピュラーだが世間一般的には全然そんなことはないような仕様のやつだ。 箱から出したばかりだとこんな感じ。 前代はというとFILCOのMajest…

帯状疱疹にならないほうがいい3つの理由

帯状疱疹になったけどメリット1つもないのでそのダルさを啓蒙する記事。 あらすじ 2日くらい前から左の脇腹のあたり、場所といったらちょうど俺が椅子に腰掛けたときにTシャツのタグが触れるくらいの位置にブツブツができた。 最近暑かったし汗疹かなんかか…

何かを理解するためには借り物の言葉でもいい

エンジニアは一生勉強と世に言うが、べつにこれは所謂エンジニアに限ったことでもない。人間として生きている以上は日々が勉強の連続で、毎日何かを理解して、憶えて、その繰り返しだ。 だから、日常のレベルではドキュメントを探したりチュートリアルを見た…

ScalaでWebアプリを爆速開発するための技術スタック 2024

去年はこれです。ちらほらスターがもらえていたりするので、今年も更新するかという気になった。 blog.3qe.us 以下の項目について技術スタックを考えていく。太字は今年になって追加したもの。 言語 エディタ ビルドツール スクリプティング ロギング テスト…

勉強会タダ飯人間問題を暗号通貨とNFTでなんとかしたい

ジャストアイデアなのでできるかどうかとかは全然考えていない。思い付いたのでメモという感じ。NFTで金儲けみたいな話では一切ないです。そこ勘違いしないよう。 前提 勉強会でタダ飯を喰らう人間がいて迷惑している、という話がITエンジニアならよく知る話…

ゼロから考えないで既知の思想や他人、潮流に従ったほうがよい

常識は疑うほうが良い、みたいな妙な思考が頭の中にあって、何かを考えるときに無駄に根本的な所から考えてしまう。 例: 上の階がやかましいようだ 考える: そもそも夜間に振動を発生させるという行為に対する考え方は歴史的にどのように発展していったのか……

終わりなき非日常

ゲームをやり終わったら、間髪入れずにまた別の何かをしている自分がいる。休憩というか、あ~終わったなという日常の無の時間があってしかるべき気がするし、小さいころはそうだったかもしれない。今では人の手を握るよりもスマホを握っている。 日常への帰…

一定の範囲内からフォーカスが外れた場合にのみ発動するblurイベントを作る

blurイベントとev.currentTarget / ev.relatedTarget を活用することで、範囲で作用するblurイベントを作れる。 <div id="area"> <input type="text" /> <input type="text" /> </div> const area = document.querySelector('#area')!; area.addEventListener('blur', (ev) => { if (!ev.currentTarget.contains(ev.relatedTa…

救急車で運ばれる実績を解除

実績を解除なんてユーモラスに書いていますが本当はこんなの解除したくないし救急隊員だってなるだけ運びたくないしお医者様は来てほしくないに決まっているけど運ばれてしまった以上はユーモラスに書いてやろうというわけです。医療システムに感謝。 ジムで…

ScalaでWASMランタイムを実装してHello Worldを動かした感想

元同僚の id:tanishiking24 くんがScalaMatsuri 2024でWASMの発表をしたのだが、それもあってWASMへの興味が湧いていた自分もちょっとWASMで遊んでみようと思った。 そこで、ゴリラ氏が書いたWASMの記事を読んでScalaでWASMバイナリをパースして簡単なWASIが…

じゃあ何すか、COBOL以外では4.8 - 4.7 - 0.1できないってことっすか / ScalaとSpireで安心安全な計算ライフを実現しよう

先日こういうツイートが流れてきた。 Q:なぜ金融系では未だにCOBOLが使われるんですか?A:お手元にExcelがありましたら任意のセルに「=4.8-4.7-0.1」って入れてみてください。— 遊撃部長F/S&RWAs (@fstora) 2024年6月6日 Q:なぜ金融系では未だにCOBOLが使わ…

Bashで$(cat foo.txt)していませんか?$(< foo.txt)しよう

以下の文書はBashを使う前提の話。 Bashにはコマンド置換(Command substitution)というのがある。$(another-command)のように、$()でコマンドを括る記法だ。これを利用すると、括弧で括られたコマンドが実行され、その標準出力が文字列として取り出され、$()…

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