Lambdaカクテル

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

Invite link for Scalaわいわいランド

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

TypeScriptのvoidをasync voidとして継承できる / ScalablyTypedによるTypeScriptライブラリとScala.jsとの相互運用で、async functionがうまく変換されない問題

困っているので、思考の整理を兼ねてメモしておく。各項目がまちがっていたらおしえてください。 動機 Scala.js ScalablyTyped ScalablyTypedにおけるvoid ScalablyTypedにおけるasync TypeScriptにおけるasync void TypeScriptにおけるvoid methodのasynchr…

Codocのテスト記事

Codocと連携して、はてブロで有料記事を作れるようになった。 blog.hatenablog.com 実際に使ってみる。 今日の運勢は・・・

Obsidianのタグはスラッシュで階層化できる / 多元的な階層化の良さ

しばらく前からObsidianというMarkdownのエディタを愛用している。 blog.3qe.us blog.3qe.us blog.3qe.us 原稿執筆やメモ書きにとても良いエディタなので、ぜひ使うことをおすすめする。 今回は主として既にobsidianを使っている人向けの記事であるが、使っ…

Scalaのタプルまわりのわだかまり

フォロワーがHaskellの問題で困っていて、助けてくれ〜!! と言われたのだが、 当方Haskellが母語ではないのでハスケルヨクワカリマセン状態になってしまった。というわけでScalaでお答えすることにした。 #Haskell でもっとスマートなプログラムを考えて下さ…

要精密検査

前回 blog.3qe.us 人間ドックの結果が返ってきたのだけれど、たくさん文字が書かれていて、精密検査しなければならなかった。 赤血球多すぎワロタ これは毎年言われてる 脂質の代謝がなんかおかしい おっちゃんやん 糖の代謝がなんかおかしい おっちゃんやん…

AWS LambdaでScalaを動かし、JSONを入出力する

先日AWS LambdaでScala 3を走らせる方法を解説した。 blog.3qe.us 解説したというか、何事もなく動いたという感じだ。 今回は安定してJSONを入出力するテクがわかってきたので解説する。 完成品はこんな感じになる: import java.io.InputStream import java.…

Scalaのobjectで、finalなvalと普通のvalとではコンパイル結果がどう違うか検証する

ふと気になっていたので、素早く検証することにした。 ちなみに逆コンパイルなどではjavapコマンドを使うのが良いと教えてもらった。 javap コマンド?— がくぞ (@gakuzzzz) 2023年6月19日 検証方法 バージョン ソースコード コンパイル シグネチャの差分を…

マネーフォワードのCSVをParquetに変換する

いろいろと分析したいので、マネーフォワードでエクスポートできるCSVファイルをSparkを使ってParquetに変換したメモ。 マネーフォワード 特に今更説明する必要もないが、マネーフォワードはオンラインで動作する家計簿サービス。カードと連携したり、勝手に…

Apache Sparkはドットかアンダースコアからファイル名が始まると読み込んでくれない

Spark 3.4.0で確認した。例えば、.foobar.csvのようなファイルを読み取らせようとしても、読み込んでくれないし、しかし一見成功したかのような振舞いになるので注意しなければならない。 //> using scala "2.13" //> using lib "org.apache.spark::spark-co…

http4s + sbt-revolverでリロードが遅いときはデフォルトタイムアウトを設定してください

苦しんでいる人をちらほら見たので解決策を示しておく。 tl;dr このように、http4sでサーバを書くとき、バックエンド実装がEmber(デフォルト)の場合はwithDefaultTimeout()を使って短いタイムアウトを指定するようにしてください。 import scala.concurrent.…

Scala Nativeがいつのまにかシングルバイナリを吐けるようになっていた

ScalaをネイティブコンパイルしてJVM無しで実行ファイルとして動かせるようにする仕組みであるScala Nativeが、いつのまにかシングルバイナリを出力できるようになっていた。これにより、Goと同じように1つのバイナリさえコピーすればScalaを動かせる環境が…

元気が無いがちである

もともと睡眠/起床失敗しやすい体質なのだが、やはりそういう日は元気がないことが多い。したがって元気が無い日がありがちである。 元気がないと 趣味や仕事の進捗が悪くなりがち 指摘やアドバイスを受け入れるだけの余裕がないがち 単純に、思考のスピード…

はじめるコモナド -- モナドの双対を使って一定のルールでリストの内容を結合する

HaskellやScalaで関数型プログラミングをしていると、コなんとかというやつに出くわすことがある。でもコなんとかからのアプローチは決まってそっけない。深夜にやってる映画を見せまいとする親のようだ。まだ君には早いよ、そのうちね、といった具合に。こ…

Scalaのバージョンを上げたがScalafixが古くてコンパイルしなかった事例

最近Scala 2.12.18が出た。最新のJDKとかに対応したり、マイグレーション向けの機能が拡充されている。 github.com そんでScala 2.12.16をScala 2.12.18まで上げたら、手元ではコンパイルが通るけどCI(GitHub Actions)では通らなくなってしまった。ログを見…

油そば容器が落下し、有害物質が飛散したインシデント

俺: リモートワーク 事業場*1規模: 1人 機械設備・有害物質の種類(起因物): 汁が残った油そばの容器、油 災害の種類(事故の型): なかなか取れない油との接触、部屋が臭くなる 被害者数 死亡者数:0人 休業者数:0人 不休者数:0人 行方不明者数:0人 嫌な気…

Optics: 「パス」に型を付ければ、データ全体に型を付ける必要はない

あまり知られていない関数型言語のおもしろ概念として、Opticsというものがある。 Opticsとは、オブジェクト指向言語で言うところのSetter/Getterを一種の関数として捉え、いくつかの便利な特性を付与したものの総称だ。この便利な特性によって、Setter/Gett…

Scala 3のimport構文のワイルドカードは_ではなくて*になっている

Scala 3には大きな構文上の変更、例えばimplicitまわりが整理されてgivenなどに変化したりしている一方で、細やかな機微にわたる変更も含まれている。今回説明するimport構文上のワイルドカード記号の変更もその一部。 Scala 2では、あるパッケージに属する…

ブルガダ型心電図 その1

持ち前の計画性の無さで伸ばしに伸ばしていた健康診断が遂にバリウムと一緒にやってきてしまい、下剤が体中を駆け巡って今俺の腹は爆発している。台風も来て気圧もテンションも下がるしこれ四月にちゃんと受けていればよかったな、本当は四月あたりで受けな…

Scalaでネストしたオブジェクトの型はワンライナーで定義できる(JSONに対応する型を宣言的に定義する)

追記 具体的な型が分かるわけではないので、この方法だとうまくいかないことがわかった。詳しく調べている。 本編 わけあって(わけは後で話す)、以下のようなJSONに対応する型エイリアスを定義しなければならなくなった。 { "deviceEvent": { "buttonClicked…

あるサーバ(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は定期リリース版で、ローリングリリースモデ…

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