Lambdaカクテル

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

Invite link for Scalaわいわいランド

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

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…

ScalaCheckで任意の範囲のDateTimeを生成するGen

プロパティベースドテストを行うライブラリであるScalaCheckには、任意の値を生成できるGenという仕組みがある。任意の日付時刻を生成するためのGenを定義したメモを残しておく。 Gen Genとは値を生成するためのジェネレータである。例えばGen.longは任意のL…

エンジニア入門者に習得してほしい「熟考」とは何か、それは論理的飛躍の最小化ではないか

会社の1on1があって、 id:yigarashi と30分くらい話したら面白い話がいろいろできたので紹介する。掲題ではエンジニアと書いているが、別にウェブ系ソフトウェアエンジニアに限られた話でもないし、ホモサピエンス全員におすすめ、考える葦の皆様におすすめ…

最高の体験

最高の体験をしなければならない

ActivityPubで投稿を表示できるようにした

これは雑な日記。 blog.3qe.us blog.3qe.us こういうことをやっていた。HTTP Signatureの仕様がバラけていたり、フィールド名の内容をなぜか勘違いしてい(publishedフィールドにはその投稿を作成した時刻が入るのだが、なぜか投稿のURLを入れてしまっていた…

SHA-256ダイジェストをBase64で得る(hex形式をBase64に変換する)

わけあってHTTP Signatureの実装をしており、SHA-256と仲良くしようと頑張っている。 asnokaze.hatenablog.com しかし、HTTP上ではSHA-256ダイジェストはBase64で表現されることが多い一方で、linuxでsha256sumコマンドを使ってもhex形式で結果が返るので、…

ScalaのJSONライブラリであるCirceで余分なフィールドを持つJSONをデコードする

ScalaのJSONライブラリであるCirceは、JSONをパースしてさらにcase classへと変換してくれる機能があるけれど、余分なフィールドがJSONに生えていたらどうなるのか気になったので試してみた。 build.sbt 依存性は以下の通り。 scalaVersion := "3.2.2" libra…

ActivityPubサーバを実装したかったのでまとめWikiを作ったら人々が集いつつある

最近のTwitterの荒れ具合と、Fediverseへの流入がいちじるしい。そんな中自分は、Fediverseという愉快な電網の共通語であるActivityPubの上で、botを動かそうと練習を重ねている。 blog.3qe.us この情報を自分のアカウントで発信していると、ActivityPubの実…

田舎の昼のサイレンbotをActivityPubで実装する(マストドンにアカウントを認識してもらう編)

田舎の昼のサイレンbotというbotがある。正午にウゥーーーーとつぶやくだけの、謎のbotである。 https://twitter.com/Noon_Siren_bot 最近Twitterもあやういので、練習もかねてActivityPubに移植し、マストドンやMisskeyから閲覧できるようにしようと思った(…

Twitterに投稿できなくて困っています & こっちにいます

www.itmedia.co.jp こういったニュースが話題ですが、 僕は投稿もできなくて困っています。シャドウバン的なやつ?スパム認定された? 追記 なぜかRTはできるようなので、アカウント名に助けてくれ〜というメッセージを添えて程々にRTを行ってメッセージを伝…

Scala.jsを介したJavaScriptのObjectとの相互運用について勉強した

Scala.jsはScalaからJavaScriptのトランスパイラであり、執筆時点でバージョン1.13.2を記録しており、活発に開発が行われている。加えて、これを補助するコンパイラプラグインであるScalablyTypedによるTypeScriptの型定義からScalaの型定義への転写によって…

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