scala

アドホックなScalaコードを実行したいときにAmmonite REPL

よく使うし便利なのでメモ Ammonite インストールしたら、ammで起動できる。 ᐅ amm Loading... Compiling (synthetic)/ammonite/predef/interpBridge.sc Compiling (synthetic)/ammonite/predef/replBridge.sc Compiling (synthetic)/ammonite/predef/Defaul…

scala with cats: Either, MonadError, Eval Monad

scala with cats という本を社内勉強会で輪読していて、今日は自分の担当分の発表日だった。 Scala with Cats - Underscore qiita.com qiita.com

ZonedDateTimeから日付の文字列を取り出す

よく使うのでメモ。 @ val d = ZonedDateTime.now(ZoneId.of("UTC")) d: ZonedDateTime = 2018-02-09T06:36:14.410Z[UTC] "UTC"の部分には"Asia/Tokyo"などタイムゾーンの文字列を入れられる。 minusDays plusHoursなどで演算ができる。 @ d.minusDays(1) re…

CircleCI 2.0 ミニマムスタート

2.0 Docs - CircleCI version: 2 jobs: build: docker: - image: circleci/openjdk:8-jdk steps: - checkout - run: sbt test 最低限のコンポーネントはこれだけ。 キャッシュを使うときは save_cacheとrestore_cacheをstepsに追加する。 - save_cache: path…

HeapAnalyzerを使う

なぜかEclipseのMATが手元のMacでうまく動作しないので同様の機能があるIBMのHeapAnalyzerを使う。 IBM HeapAnalyzer 下段の"Download HeapAnalyzer"からダウンロードできる。 2017年12月時点での最新のバージョンは4.5.6。 実行するには java -Xmx12G -jar …

ListのListで、前後の差分のListをつくる

状態遷移の記録をしたいとき、例えばこういうリストがあるときに @ val l = List(List(1, 2, 3, 4, 5), List(3, 4, 5), List(5)) 5個あった要素が、3個になり、1個になった、という遷移を、 2番目の処理で1と2が落ち、 3番目の処理で3と4が落ちた というよう…

Stackdriver Traceを使ってみる(準備)

何らかのAPM(Application Performance Management)ツールを入れたい。以前はNew Relicを使っていたことがあるけど、サーバー(というかCPU)の数に応じて費用がどんどん高騰していくし、かといって以前やっていたように複数台のうちの1台に入れる、というの…

http4sをHTTPクライアントとして使う

http4s: HTTP Client にあるとおり。 build.sbt scalaVersion := "2.12.4" val http4sVersion = "0.17.5" libraryDependencies ++= Seq( "org.http4s" %% "http4s-dsl" % http4sVersion, "org.http4s" %% "http4s-blaze-server" % http4sVersion, "org.http4…

java.util.loggingのログをStackdriverに出力する(続き)

前回の続き。 曲がりくねった方法をとってしまったが、java.util.loggingの仕様を順に追って検討すればできた。 java.util.loggingのログの出力の設定は、 java.util.logging.config.class のシステムプロパティの定義があればそれを参照 java.util.logging.…

java.util.loggingの出力の扱いをどうするか

java.util.loggingのログが出力されてStackdriver上でERRORログ扱いになってしまう(結果、ERRORレベルのログの中で重要度の高いログが埋もれてしまう)ことに対処したいと思っている。 今回のケースだと下記のライブラリが該当する。 GitHub - GoogleCloudPla…

ExecutionContextを自分で作る場合

stackoverflow.com とりあえず雑に val es: ExecutorService = Executors.newFixedThreadPool(1000) implicit val executionContext: ExecutionContext = ExecutionContext.fromExecutorService(es) とやってみたが、どれだけスレッド数使うのか計測しないと…

getClass.getCanonicalNameはNullになることもある

@ trait FooFilter { val filterName: String } defined trait FooFilter @ val a = new FooFilter{ override val filterName = this.getClass.getCanonicalName } a: AnyRef with FooFilter = ammonite.$sess.cmd1$$anon$1@3d904e9c @ a.filterName res2: S…

「Scala High Performance Programming」のメモ

ソースコード github.com HDR Histogram(30P) hdrhistogram.org 一定のデータサイズでヒストグラムを表現できるデータ型?あとで調べる Java Flight Recorderについて(33P) docs.oracle.com 普段はvisualvmを使っているけど、別のことができたっけ・・・ Saf…

EitherでLeftとRightそれぞれの場合に関数を適用する

基本ぽいけど考え込んでしまった。 stackoverflow.com Eitherな値でチェーンしているときに、LeftのときにもRightのときにも関数を適用したいという要件があった。 普通に考えれば次のようにすればいい。 scala> val x: Either[Int, Int] = Right(3) x: Eith…

http4sのデフォルトプールの数

いくつだろうと探していたらみつけた。 github.com CPUのコア+1だ。

Scala High Performance Programming を借りた

www.amazon.co.jp たまたま取り組んでいる途中のscalaアプリケーションのチューニングをやっていてググったときにこの本の一部がGoogle Booksでヒットしたので借りてみた。 ざっと読んだ感じ、いまの自分の課題感にマッチしてる。 * Chapter1 パフォーマンス…

scala 2.12.4リリース

Scala 2.12.4 is now available! | The Scala Programming Language github.com Our benchmarks show a further 5–10% reduction in compile times since 2.12.3. これは期待ですね