Lambdaカクテル

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

scala

ScalaMatsuri 2023にずんだもんを引っさげて登壇します #ScalaMatsuri #VOICEVOX

Scalaの国際カンファレンスであるScalaMatsuri 2023のCfPに応募したところ採択され、登壇の機会をいただきましたからお知らせします。 とき 2023-04-15〜2023-04-16 (変わる可能性があります) 20分間喋ります 今すぐGoogle Calendarに登録してください とこ…

Scalaのpipeでパイプライン演算子を作って遊ぶ

Scalaには2.13からpipeという面白いメソッドが追加されている。a pipe fと書くとf(a)になるという、それだけの仕組みだ。Elixirなどの他の言語では|>といった記号で導入されている。 blog.knoldus.com 記号の氾濫を避けるためにScalaは公式には単体の演算子…

ScalaからVOICEVOX呼んでずんだもんに喋らせる2023

ScalaからVOICEVOX喋らせようとしている人は多分絶対自分しかいないけど、ScalaからVOICEVOXを喋らせるためのラッパーであるvoicevoxcore4sを作った。 github.com この記事は、はてなエンジニアAdvent Calendar 2022の48日目の記事です。昨日の記事は id:gur…

Scala-CLIを使うとScalaをいきなりバイナリに変換できてすごいので紹介したい

Scala-CLIをいじっていたらかなり良さそうな機能を見付けたので紹介する。 Scala-CLI あらかじめ説明しておくと、Scala-CLIとはScalaをLLライクに扱うための便利ツールチェイン。REPLでコードを試したり、スクリプトを実行できたりする。 scala-cli.virtusla…

Apache Spark: CSV読み込み時に同名のカラム(case insensitive)があった場合は勝手に数字が付与される

Apache SparkでCSVファイルを読み込むときに気をつけておきたい挙動に遭遇したのでメモしておく。 Apache Spark Apache Sparkとは、Apache財団によってメンテナンスされている分散型の計算・分析エンジンで、Scalaを第一級言語としてサポートしている。要す…

ScalaとApache Sparkで線形回帰学習をやってみる + 簡単なSpark使い方メモ

1年間病院にかからなかったということで褒美の図書カードを健康保険組合にもらったので、こういう本を購入した。 scikit-learn、Keras、TensorFlowによる実践機械学習 第2版作者:Aurélien Géronオライリー・ジャパンAmazon 鈍器っぽい。この本ではまずはscik…

Tensorflo兎 Scalaで遊んだ記録その4(XORを学習させる)

あけましておめでとうございます。2023年は兎年ですね。 そして、兎といえばTensorFlo兎(テンソルフロウ)。今回もTensorflow Scalaをやっていきます。 XORをニューラルネットワークで実装する platanios.org 公式ページのサンプルを見ながら、 techblog.glpg…

Tensorflow Scalaで遊んだ記録その3(スライス記法)

機械学習で大儲けしたいからTensorflow Scalaを勉強している。その1とその2はこちら。 blog.3qe.us blog.3qe.us 今回は、テンソルの一部を表現する優れた記法であるスライス記法についてのお話。 オリジナルの(?)PythonのTensorflowにはスライス記法という…

Tensorflow Scalaで遊んだ記録その2(テンソルを作る)

機械学習で大儲けしたいので、Tensorflow Scalaで遊んでいる。 前回はこちら。 blog.3qe.us Tensor Creation 公式ドキュメントの Tensor Creation をやってみる。 platanios.org import org.platanios.tensorflow.api.tensors.Tensor import org.platanios.t…

Tensorflow Scalaで遊んだ記録その1(インストール〜初回動作)

機械学習をやるためのライブラリであるTensorflowにScalaバインディングが作られているのを知った。 platanios.org 機械学習で大儲けしたいので、ちょっと触ってみることにした。 インストール platanios.org 公式マニュアルのバージョン情報更新が滞ってい…

ScalaのDeclineで引数無しのサブコマンドを定義する方法

ScalaのコマンドラインパーサDeclineで、サブコマンドを定義したいのだが、サブコマンドには引数が無い、というケースを定義したかった。 普通サブコマンドにはさらに引数が付くのだが、例えば init みたいなサブコマンドを定義したいときは引数はいらない。…

4つのプラグインを活用して、Scalaソフトウェアを楽々リリースしよう

hljs.highlightAll(); Table of Contents 前提: JVM言語を配るのは大変 sbt-release でリリースプロセスの手間暇を省こう プラグインをインストールする build.sbt と version.sbt の設定 MavenにはPublishしないようにする リリースフローを起動する リリー…

Scalaの入門的な記事のまとめ(コレクションメソッドや関数型プログラミングが中心)

アルバイトとして働いてくれている同僚がScalaに入門していて、基礎的なScalaの文法などは習得してくれているけれど、コレクションメソッドや関数型プログラミングのイディオムまわりでもっと伸ばせそうな雰囲気があるので、何か良い資料を知らないですかと…

Scala記事を書き続けている話

Table of Contents はじめに 最近Scalaまわりのアウトプットを積極的にやっている Scalaの裾野を広げたい 高度な記事はあるけれど 入門的な記事を増やす お高く留まらない言語にしていく お高く留まった言語から滅んでいく 裾野がプログラミング言語を支えて…

Java(Scala)アプリどう配ってますか

自作の解説動画作成ツールがある程度形になってきたので、配布について考えている。 www.nicovideo.jp zmmはScalaで書かれたアプリケーションなので、JVMで動作する。JVM言語の配布形式には色々あるのだけれど、zmmではとりあえずJARを配ることにした。 Scal…

Shapelessでマルチテナンシーという問題領域を表現できるか?という考察

マルチテナンシーというコードの形態がある。同じコードベースで、実際の実行インスタンスなどは分けた形で複数のサービスを提供することである。例えば同じコードベースでAというECサイトとBというECサイトを提供する、という感じである。 このマルチテナン…

Scala3のUnion Types / Intersection Typesを試してみた

Scala3チャレンジをする記事の二本目。 前回はこちら。 blog.3qe.us ソースコードは以下に置いてある。 github.com github.com Union Types Eitherとの違い Discriminated Union Typesもどき Intersection Types まとめ MathJax v3以降ではbussproofs.styが…

Scala3のOptional Bracesを試してみた

ちびちびScala3に生えた新機能の実際に使ってみるチャレンジをやっている。いつの日かチームに導入できたら嬉しいね、とか、自分で使いこなせるようになると嬉しいね、というモチベーションである。 今日はOptional Bracesについて勉強した。ソースコードは…

for式でタプルのbindingが動かないと思っていたら10年モノのバグ(SI-5589)だった

こういうバグを踏んだ。このコードはScala 2.13でコンパイルしない。この例ではCats Effect 3のIOモナドを使っているけれど、どのモナドでも発生する。 def fa = IO.pure("left") def fb = IO.pure("right") for { (a, b) <- fa product fb // ここでIO[(Str…

ScalaのCatsにおけるTuple上でのmapやproductの振舞いが面白いので紹介する

ScalaでプログラミングをしているとTuple2にお世話になることが多い。例えばSeq[(K, V)]からMap[K, V]を得ることができるし、何かと応用範囲が広い。catsでも、Tuple2をうまく操作するための数々のインスタンスが用意されている。 そんな中、Tuple2のインス…

Seq[(K, V)]について、キーが同じである限り結合し続ける処理

こういうメソッドを定義したい。 Seq[(String, FiniteDuration)]があるとき、同一のStringが連続した場合に限ってFiniteDurationを足し合わせて、最終的にSeq[(String, FiniteDuration)]を返すような処理を書きたいんだけど、どうしたもんか— @windymelt@mst…

図で眺める Scalaの変位指定アノテーション

今日チームでScalaのこういう型制約ってどう書くんだっけ、といった話をしていて、Scalaには色々な型制約の表現の方法があることだなあ、と考えていた。そして、全て覚えるのは大変だなと思った。自分は特に変位指定アノテーションを覚えるのが大変だった。…

木構造における属性の伝播の表現 -- CatsのMonoidと再帰処理によって

プログラミングをして暮らしていると、だいたい木構造と向き合うことになる。その頻度はリスト程ではないものの十分に高い。 木構造操作の一類型として、木の根から順に辿っていき、一定の操作を加えていくというものがある。個々の要素だけ見れば良いことも…

http4sのEmberClientでタイムアウトを指定する

自分が書いている趣味プロダクトに、HTTPクライアントとして外部と通信するコードがあった。タイムアウトを指定しつつ通信させたかったがあまり資料が無かったのでメモしておく。 http4sとは タイムアウトを設定する withTimeout withIdleTimeInPool .withId…

Cats EffectのHotswapの使い方について調べた / 無限に出てくるトイレットペーパーを実装する

Cats Effectの勉強をしてたらHotswapというコンポーネントがあって便利そうだったので紹介します。 Hotswap Resourceを単体で使う欠点 そもそもResourceとは Resourceにできないこと Hotswap登場 応用: 途切れないトイレットペーパー ToiletPaperクラス toil…

Cats Effect 3でセマフォを使う方法 + よくある落とし穴 (標語付き)

Cats Effect 3のセマフォの使い方の例があまりないなと思ったので自分で書いておいた。標語もあるよ。 そもそもセマフォって何よ 前提知識 Cats Effect 3によるセマフォ 落とし穴 標語 (大きな声で読み上げよう) 解説 Cats Effectという、Scalaで非同期処理…

Scala 2.12と2.13とで、ListMapのキーまわりの挙動が違っているので注意しましょう / ライブラリ調査の心得

アプリケーションのコレクションまわりの実装について調査していたところ、Scala 2.12から2.13にかけての更新がscala.collection.immutable.ListMapの挙動を変化させており、実は元々2.13で見せていた振舞いは仕様外のものだったことが判明したのでメモ。 こ…

Scalaをスクリプト言語にしよう! Ammonite文法最速マスター

Ammonite文法最速マスター この記事は、Scalaのスクリプティング環境でありREPLでもあるAmmoniteの基礎的な利用方法をマスターし、ちょっと凝ったシェルスクリプトをAmmoniteスクリプトに書き換えられる程度のAmmonite力を手に入れるためのものです。 Ammoni…

Perlのqw()みたいなやつがScalaにも欲しいので作った

追記2: ライブラリ化した。Mavenにpublishする手続きをちびちびやっている。 github.com 追記: 実装おかしかったのでちょっと修正した Perlにはqw()という文字列のリストを構築するための便利な構文があって、以下の表現は等価だ: ("foo", "bar", "buzz", "q…

Haskellのguard/<$のコンボはCatsではasを使う

覚えておきたいのでメモ。 x <$ guard (y == z) こういう式をCatsで表現したいとき、Catsには<$も$>も、そのままの演算子では存在しない。そのかわり、Catsにはasという名前で同等のメソッドがある。 typelevel.org F[A] => B => F[B] as つまりこういう感じ…

Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?