BNFパーサが生成したパーサでパースした後に整形表示してみた

前回BNFパーサーが生成したパーサーでログをパースできるようになりましたので steavevaivai.hatenablog.com

今回はパースした後に整形表示できるようにしてみます。 修正のコミットはこちらになります。
bnfパーサー 整形表示実装 · teruuuuuu/logging_converter@ab5b156 · GitHub

続きを読む

柔軟にログをパースできるようBNFパーサーを実装してみる

前回ログファイルをjsonに変換した後Embulk経由でElasticsearchに取り込むのを試したのですが、ログの出力内容毎に対してパーサーを定義していなかったので、不要なものまで取り込まれていました。 steavevaivai.hatenablog.com

今回は必要なものだけを取り込めるように、またScalaを知らなくてもパーサーを定義できるように外部で宣言できるようにしたいと思います。

調べてみたところパーサジェネレータを使えば受け取った構文規則をもとにパーサーを出力するということでYaccが有名なようで、パーサジェネレータを使えばちょうどやりたいことが出来そうです。

続きを読む

自作のパーサーでログファイルをパースして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[_]] が高カインド型らしいです。

続きを読む