自作のパーサーでログファイルをパースしてEmbulk経由でElasticsearchに取り込んでみる

例えば以下のようなAAA ~ CCCに対してaddやremove、setの操作を行う時系列のログデータをもとに、現在の値がどうなっているのかを手動で見ていくのは大変かと思います。

2020-05-24 11:25:18,784 INFO jp.co.teruuu.LoggingService [main] add BAA:99.674
2020-05-24 11:25:18,784 INFO jp.co.teruuu.LoggingService [main] set BBB:5.730
2020-05-24 11:25:18,785 INFO jp.co.teruuu.LoggingService [main] hello hello CCC
2020-05-24 11:25:18,785 INFO jp.co.teruuu.LoggingService [main] move from ABCtoCAC : 68.080
2020-05-24 11:25:18,785 INFO jp.co.teruuu.LoggingService [main] add ACC:20.390
2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] hello hello ABA!
2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] add AAA:54.581
2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] globalRemove 46.694
2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] hello world AAC
2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] hello hello BCB!
2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] hello hello ABB!
2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] set AAC:59.363
2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] globalAdd 63.874
2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] set CCC:85.101
2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] hello hello ABC!
2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] hello hello CBC!
2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] hello world ACC!
2020-05-24 11:25:18,788 INFO jp.co.teruuu.LoggingService [main] globalAdd 55.108
2020-05-24 11:25:18,788 INFO jp.co.teruuu.LoggingService [main] move from BBBtoBAC : 46.040
2020-05-24 11:25:18,788 INFO jp.co.teruuu.LoggingService [main] move from CAAtoCCC : 90.571
2020-05-24 11:25:18,788 INFO jp.co.teruuu.LoggingService [main] add BCA:36.741

これを解決するためにログファイルをパースしてElasticsearchに取り込んでみるのを試してみたいと思います。 ちなみにですが今回の検証に使うログは自前で生成したものを使っています。 string_generator/LoggingService.java at master · teruuuuuu/string_generator · GitHub

続きを読む

Rustでlazy_staticを使ってグローバルでイミュータブルな定数を初期化してみる

以前Rustでチケットモデリングの実装をしたとき、グローバルでイミュータブルな定数を実装できず毎回初期化していたのですが、lazy_staticを使えば解決できるとのことだったので試してみました。 steavevaivai.hatenablog.com

詳しくは以下のQiitaの記事が詳しかったので、それを参考にlazy_staticのクレートを追加して修正を行いました。 qiita.com

具体的な修正部分は以下になるのですが、 github.com

続きを読む

チーム開発でInteliJとEclipseを使う場合の注意点調査(work in progress)

InteliJやEclipseではデフォルトの設定だとフォーマットをかけたときに微妙に差があり、gitで細かい差分がでることがあるのが気になっていますのでこのあたりの動きを調べてみたいと思います。

  • import
    • Organize Imports
    • *によるimport省略
続きを読む

Rustでチケット料金モデリングしてみる

Rustの勉強がてら以前話題になったチケット料金モデリングを実装してみました。

このチケット料金表を実装したのですが、すでにScalaで作られているこちらを参考にScalaからRustで作り変えていき、実装の違いのポイントを確認しながら進めてみました。

Rustで実装したものはこちらになります。

  • Specificationトレイト
  • Specificationトレイトの実装対象について
    • 映画の日の判断
    • 平日、土日 + レイトショーかどうかの判断
    • 顧客を判断できるようにする
    • 映画の判断条件を表現できるようにする
  • 映画の判断条件とプラン名、料金を構造体で持てるようにする
    • プラン一覧情報の表現
  • 顧客、開始時刻からプランを判断できるようにする
続きを読む

Rustでの関数型プログラミング

Rustでの関数型プログラミングについて調べていたのですが、以下のスライドでは高カインド型がないのが問題とされているようなので実装して確認してみました。
https://speakerdeck.com/helloyuk13/rust-demomonadohashi-zhuang-dekirufalseka

Scalaでの高カインド型

高カインド型とは型コンストラクタを型パラメータに取る型らしいのですが、具体例がないとよくわからないと思います。Scalaで以下のサンプルの実装を準備したのですが、Monoid[A] を型パラメータとして受け取る Foldable[F[_]] が高カインド型らしいです。

続きを読む

QuickFIX/Jソースコードリーディング

QuickFIX/Jソースコードリーディング

QuickFIX/Jとは

QuickFIX/JはFIXエンジンの実装になります。FIXエンジン自体が聞きなれないと思いますが、FIXエンジンは電子取引で使われるプロトコルであるFIXプロトコルの実装になります。FIXエンジンについては以下のリンクが参考になります。
https://javarevisited.blogspot.com/2012/01/what-is-fix-engine-in-fix-protocol.html

QuickFIX/Jの公式ページによると、もともとC++で実装されたQuickFIXをJavaで実装しなおしたもののようです。

続きを読む

SCombのコードを読み込んでみる

SCombとはScalaで作られたパーサコンビネータライブラリで実装はこちらになります。ソースコードの行数が600行行程度で読みやすいので、scalaのパーサコンビネータの実装の学習のために手を動かしながらソースコードを読み込んでみたいと思います。

続きを読む