BNFパーサが生成したパーサでパースした後に整形表示してみた
前回BNFパーサーが生成したパーサーでログをパースできるようになりましたので steavevaivai.hatenablog.com
今回はパースした後に整形表示できるようにしてみます。
修正のコミットはこちらになります。
bnfパーサー 整形表示実装 · teruuuuuu/logging_converter@ab5b156 · GitHub
自作のパーサーでログファイルをパースして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
続きを読むRustでチケット料金モデリングしてみる
Rustの勉強がてら以前話題になったチケット料金モデリングを実装してみました。
このチケット料金表を実装したのですが、すでにScalaで作られているこちらを参考にScalaからRustで作り変えていき、実装の違いのポイントを確認しながら進めてみました。
Rustで実装したものはこちらになります。
- Specificationトレイト
- Specificationトレイトの実装対象について
- 映画の日の判断
- 平日、土日 + レイトショーかどうかの判断
- 顧客を判断できるようにする
- 映画の判断条件を表現できるようにする
- 映画の判断条件とプラン名、料金を構造体で持てるようにする
- プラン一覧情報の表現
- 顧客、開始時刻からプランを判断できるようにする
Rustでの関数型プログラミング
Rustでの関数型プログラミングについて調べていたのですが、以下のスライドでは高カインド型がないのが問題とされているようなので実装して確認してみました。
https://speakerdeck.com/helloyuk13/rust-demomonadohashi-zhuang-dekirufalseka
Scalaでの高カインド型
高カインド型とは型コンストラクタを型パラメータに取る型らしいのですが、具体例がないとよくわからないと思います。Scalaで以下のサンプルの実装を準備したのですが、Monoid[A]
を型パラメータとして受け取る Foldable[F[_]]
が高カインド型らしいです。