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

OpenCVのDescriptorMatcherの話

特徴量の検出(detect)と記述(compute)については割愛。これはその後の特徴量を比較するときに使うDescriptorMatcherについての話。 まずDescriptorMatcherの使い方 コードはScalaです。 import org.opencv.core.MatOfDMatch import org.opencv.features2…

OpenCVをJavaから使うぞ〜〜〜完全インストールマニュアル

まあJavaというかScalaから使いたかったんですが、同じことなんでとりあえずJavaから使うぞ〜〜〜という話です。 (macOSの話だけど)Homebrewで入れていいの?Mavenのリポジトリにあるの使っていいの?とまあいろいろ躓いたんで、まとめときます。 OpenCV(…

ObjectOutputStreamでシリアライズしたオブジェクトを永続化したら、serialVersionUIDが変わっちゃって破滅するやつ

題名のことやったやつおる? ここにおる。こういう例外が投げられる。 InvalidClassException: local class incompatible: stream classdesc serialVersionUID = 1083041391519420705, local class serialVersionUID = -8102506628468650634 シリアライズし…

JSR-310のDateTimeFormatterに気を付けろ

JSR-310に限った話ではないかもしれませんが。 JSR-310で日時なりを文字列にするときは、fomratメソッドにDateTimeFormatterクラスのインスタンスを渡してやる。んー分かりやすい。ちなみにtoStringメソッドでもOK。この場合はISO 8601の形式でフォーマット…

ELBを介したSSEを行う場合の設定や気を付けるところ

aws

SSE(Content-Type: text/event-stream)便利ですよね。フレームワークがサポートしていることも多いですし、その通りやれば結構サクッと動作します。 しかし、ローカルで試した場合にサクッと動作しても、ELBを介した場合に結構ハマったりしたので、その場…

Akka StreamsのalsoToを使うとSourceが停止しない

結論から言うと下記のコードには問題がある。rediscalaでRedis pub/subに繋いで、subscribeで受け取った内容をAkka HTTPでのSSEで返すコードの例です。 import java.nio.charset.Charset import akka.actor.ActorSystem import akka.stream._ import akka.st…

sealed abstract case classがすごい

sealed abstract case classなるものがある。別のことを調べてたらこちらの記事(のコメント欄)で見掛けて感動してしまった。 軽く触れると、newできなくなり、case classによって自動で生成されるcopyメソッド、そしてコンパニオンオブジェクトのapplyメソ…

Scalaマクロのerrorとabortの違い

Scalaのマクロで、コンパイルエラーにしてしまうときは Context.error を使う。 def someMethod_impl(c: Context)(arg: c.Expr[String]): c.Expr[Unit] = { // ... if (cond) { c.error(c.enclosingPosition, "a message") } // ... } でもこれが微妙に使い…

Scala dynamics + macros

Type Dynamic Scalaはメソッドなどの有無をコンパイルの時点で解決しますが、Dynamic traitを使うことによって動的にすることが出来ます。 // Dynamic traitを使うために必要。コンパイラオプションに `-language:dynamics` を渡してもOK import scala.langu…